From 60e1ad20e4a9c27c53a1e6e2416b995b50d52744 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Mon, 10 Oct 2022 22:07:34 -0400 Subject: [PATCH 001/428] Add NUM_MON_PIC_FRAMES, and trainer pic size constants --- include/battle.h | 2 +- include/constants/pokemon.h | 8 + include/data.h | 6 + src/battle_anim_effects_2.c | 2 +- src/battle_anim_mons.c | 2 +- src/battle_anim_utility_funcs.c | 2 +- src/data.c | 70 +++---- src/data/trainer_graphics/back_pic_tables.h | 50 ++++- src/data/trainer_graphics/front_pic_tables.h | 186 +++++++++---------- src/pokemon.c | 10 +- src/pokemon_jump.c | 2 +- src/pokemon_storage_system.c | 2 +- src/pokenav_conditions.c | 2 +- src/pokenav_match_call_gfx.c | 2 +- src/trainer_pokemon_sprites.c | 28 +-- src/use_pokeblock.c | 2 +- 16 files changed, 211 insertions(+), 165 deletions(-) diff --git a/include/battle.h b/include/battle.h index e779dee3df8c..aa9acac3cbc9 100644 --- a/include/battle.h +++ b/include/battle.h @@ -593,7 +593,7 @@ struct MonSpritesGfx u8 *byte[MAX_BATTLERS_COUNT]; } sprites; struct SpriteTemplate templates[MAX_BATTLERS_COUNT]; - struct SpriteFrameImage frameImages[MAX_BATTLERS_COUNT][4]; + struct SpriteFrameImage frameImages[MAX_BATTLERS_COUNT][MAX_MON_PIC_FRAMES]; u8 unusedArr[0x80]; u8 *barFontGfx; void *unusedPtr; diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h index d0e6094483d9..716d5adf9d14 100644 --- a/include/constants/pokemon.h +++ b/include/constants/pokemon.h @@ -260,6 +260,14 @@ #define MON_PIC_HEIGHT 64 #define MON_PIC_SIZE (MON_PIC_WIDTH * MON_PIC_HEIGHT / 2) +// Most pokemon have 2 frames (a default and an alternate for their animation). +// There are 4 exceptions: +// - Castform has 4 frames, 1 for each form +// - Deoxys has 2 frames, 1 for each form +// - Spinda has 1 frame, presumably to avoid the work of animating its spots +// - Unown has 1 frame, presumably to avoid the work of animating all 28 of its forms +#define MAX_MON_PIC_FRAMES 4 + #define BATTLE_ALIVE_EXCEPT_ACTIVE 0 #define BATTLE_ALIVE_ATK_SIDE 1 #define BATTLE_ALIVE_DEF_SIDE 2 diff --git a/include/data.h b/include/data.h index 0cd87fc99ac7..732fda992cd8 100644 --- a/include/data.h +++ b/include/data.h @@ -7,6 +7,12 @@ #define MAX_TRAINER_ITEMS 4 +#define TRAINER_PIC_WIDTH 64 +#define TRAINER_PIC_HEIGHT 64 +#define TRAINER_PIC_SIZE (TRAINER_PIC_WIDTH * TRAINER_PIC_HEIGHT / 2) + +#define MAX_TRAINER_PIC_FRAMES 4 // ? Red and Leaf's back pics have 5 frames + enum { BATTLER_AFFINE_NORMAL, BATTLER_AFFINE_EMERGE, diff --git a/src/battle_anim_effects_2.c b/src/battle_anim_effects_2.c index 6b60440528d8..7efa2e9edda6 100755 --- a/src/battle_anim_effects_2.c +++ b/src/battle_anim_effects_2.c @@ -3023,7 +3023,7 @@ void AnimTask_LoadMusicNotesPals(u8 taskId) for (i = 1; i < NUM_MUSIC_NOTE_PAL_TAGS; i++) paletteNums[i] = AllocSpritePalette(ANIM_SPRITES_START - i); - gMonSpritesGfxPtr->buffer = AllocZeroed(0x2000); + gMonSpritesGfxPtr->buffer = AllocZeroed(MON_PIC_SIZE * MAX_MON_PIC_FRAMES); LZDecompressWram(gBattleAnimSpritePal_MusicNotes2, gMonSpritesGfxPtr->buffer); for (i = 0; i < NUM_MUSIC_NOTE_PAL_TAGS; i++) LoadPalette(&gMonSpritesGfxPtr->buffer[i * 32], (u16)((paletteNums[i] << 4) + 0x100), 32); diff --git a/src/battle_anim_mons.c b/src/battle_anim_mons.c index a5d4659a9dc1..ba493ed1891d 100644 --- a/src/battle_anim_mons.c +++ b/src/battle_anim_mons.c @@ -2101,7 +2101,7 @@ u8 CreateAdditionalMonSpriteForMoveAnim(u16 species, bool8 isBackpic, u8 id, s16 u16 palette = AllocSpritePalette(sSpriteTemplates_MoveEffectMons[id].paletteTag); if (gMonSpritesGfxPtr != NULL && gMonSpritesGfxPtr->buffer == NULL) - gMonSpritesGfxPtr->buffer = AllocZeroed(0x2000); + gMonSpritesGfxPtr->buffer = AllocZeroed(MON_PIC_SIZE * MAX_MON_PIC_FRAMES); if (!isBackpic) { LoadCompressedPalette(GetMonSpritePalFromSpeciesAndPersonality(species, trainerId, personality), (palette * 0x10) + 0x100, 0x20); diff --git a/src/battle_anim_utility_funcs.c b/src/battle_anim_utility_funcs.c index 403939f883f0..cae9eb7d5f8f 100644 --- a/src/battle_anim_utility_funcs.c +++ b/src/battle_anim_utility_funcs.c @@ -905,7 +905,7 @@ void AnimTask_GetBattleTerrain(u8 taskId) void AnimTask_AllocBackupPalBuffer(u8 taskId) { - gMonSpritesGfxPtr->buffer = AllocZeroed(0x2000); + gMonSpritesGfxPtr->buffer = AllocZeroed(MON_PIC_SIZE * MAX_MON_PIC_FRAMES); DestroyAnimVisualTask(taskId); } diff --git a/src/data.c b/src/data.c index 5856d17b855a..d3674c2886dc 100644 --- a/src/data.c +++ b/src/data.c @@ -48,68 +48,68 @@ const struct SpriteFrameImage gBattlerPicTable_OpponentRight[] = const struct SpriteFrameImage gTrainerBackPicTable_Brendan[] = { - gTrainerBackPic_Brendan, 0x0800, - gTrainerBackPic_Brendan + 0x0800, 0x0800, - gTrainerBackPic_Brendan + 0x1000, 0x0800, - gTrainerBackPic_Brendan + 0x1800, 0x0800, + gTrainerBackPic_Brendan + TRAINER_PIC_SIZE * 0, TRAINER_PIC_SIZE, + gTrainerBackPic_Brendan + TRAINER_PIC_SIZE * 1, TRAINER_PIC_SIZE, + gTrainerBackPic_Brendan + TRAINER_PIC_SIZE * 2, TRAINER_PIC_SIZE, + gTrainerBackPic_Brendan + TRAINER_PIC_SIZE * 3, TRAINER_PIC_SIZE, }; const struct SpriteFrameImage gTrainerBackPicTable_May[] = { - gTrainerBackPic_May, 0x0800, - gTrainerBackPic_May + 0x0800, 0x0800, - gTrainerBackPic_May + 0x1000, 0x0800, - gTrainerBackPic_May + 0x1800, 0x0800, + gTrainerBackPic_May + TRAINER_PIC_SIZE * 0, TRAINER_PIC_SIZE, + gTrainerBackPic_May + TRAINER_PIC_SIZE * 1, TRAINER_PIC_SIZE, + gTrainerBackPic_May + TRAINER_PIC_SIZE * 2, TRAINER_PIC_SIZE, + gTrainerBackPic_May + TRAINER_PIC_SIZE * 3, TRAINER_PIC_SIZE, }; const struct SpriteFrameImage gTrainerBackPicTable_Red[] = { - gTrainerBackPic_Red, 0x0800, - gTrainerBackPic_Red + 0x0800, 0x0800, - gTrainerBackPic_Red + 0x1000, 0x0800, - gTrainerBackPic_Red + 0x1800, 0x0800, - gTrainerBackPic_Red + 0x2000, 0x0800, + gTrainerBackPic_Red + TRAINER_PIC_SIZE * 0, TRAINER_PIC_SIZE, + gTrainerBackPic_Red + TRAINER_PIC_SIZE * 1, TRAINER_PIC_SIZE, + gTrainerBackPic_Red + TRAINER_PIC_SIZE * 2, TRAINER_PIC_SIZE, + gTrainerBackPic_Red + TRAINER_PIC_SIZE * 3, TRAINER_PIC_SIZE, + gTrainerBackPic_Red + TRAINER_PIC_SIZE * 4, TRAINER_PIC_SIZE, }; const struct SpriteFrameImage gTrainerBackPicTable_Leaf[] = { - gTrainerBackPic_Leaf, 0x0800, - gTrainerBackPic_Leaf + 0x0800, 0x0800, - gTrainerBackPic_Leaf + 0x1000, 0x0800, - gTrainerBackPic_Leaf + 0x1800, 0x0800, - gTrainerBackPic_Leaf + 0x2000, 0x0800, + gTrainerBackPic_Leaf + TRAINER_PIC_SIZE * 0, TRAINER_PIC_SIZE, + gTrainerBackPic_Leaf + TRAINER_PIC_SIZE * 1, TRAINER_PIC_SIZE, + gTrainerBackPic_Leaf + TRAINER_PIC_SIZE * 2, TRAINER_PIC_SIZE, + gTrainerBackPic_Leaf + TRAINER_PIC_SIZE * 3, TRAINER_PIC_SIZE, + gTrainerBackPic_Leaf + TRAINER_PIC_SIZE * 4, TRAINER_PIC_SIZE, }; const struct SpriteFrameImage gTrainerBackPicTable_RubySapphireBrendan[] = { - gTrainerBackPic_RubySapphireBrendan, 0x0800, - gTrainerBackPic_RubySapphireBrendan + 0x0800, 0x0800, - gTrainerBackPic_RubySapphireBrendan + 0x1000, 0x0800, - gTrainerBackPic_RubySapphireBrendan + 0x1800, 0x0800, + gTrainerBackPic_RubySapphireBrendan + TRAINER_PIC_SIZE * 0, TRAINER_PIC_SIZE, + gTrainerBackPic_RubySapphireBrendan + TRAINER_PIC_SIZE * 1, TRAINER_PIC_SIZE, + gTrainerBackPic_RubySapphireBrendan + TRAINER_PIC_SIZE * 2, TRAINER_PIC_SIZE, + gTrainerBackPic_RubySapphireBrendan + TRAINER_PIC_SIZE * 3, TRAINER_PIC_SIZE, }; const struct SpriteFrameImage gTrainerBackPicTable_RubySapphireMay[] = { - gTrainerBackPic_RubySapphireMay, 0x0800, - gTrainerBackPic_RubySapphireMay + 0x0800, 0x0800, - gTrainerBackPic_RubySapphireMay + 0x1000, 0x0800, - gTrainerBackPic_RubySapphireMay + 0x1800, 0x0800, + gTrainerBackPic_RubySapphireMay + TRAINER_PIC_SIZE * 0, TRAINER_PIC_SIZE, + gTrainerBackPic_RubySapphireMay + TRAINER_PIC_SIZE * 1, TRAINER_PIC_SIZE, + gTrainerBackPic_RubySapphireMay + TRAINER_PIC_SIZE * 2, TRAINER_PIC_SIZE, + gTrainerBackPic_RubySapphireMay + TRAINER_PIC_SIZE * 3, TRAINER_PIC_SIZE, }; const struct SpriteFrameImage gTrainerBackPicTable_Wally[] = { - gTrainerBackPic_Wally, 0x0800, - gTrainerBackPic_Wally + 0x0800, 0x0800, - gTrainerBackPic_Wally + 0x1000, 0x0800, - gTrainerBackPic_Wally + 0x1800, 0x0800, + gTrainerBackPic_Wally + TRAINER_PIC_SIZE * 0, TRAINER_PIC_SIZE, + gTrainerBackPic_Wally + TRAINER_PIC_SIZE * 1, TRAINER_PIC_SIZE, + gTrainerBackPic_Wally + TRAINER_PIC_SIZE * 2, TRAINER_PIC_SIZE, + gTrainerBackPic_Wally + TRAINER_PIC_SIZE * 3, TRAINER_PIC_SIZE, }; const struct SpriteFrameImage gTrainerBackPicTable_Steven[] = { - gTrainerBackPic_Steven, 0x0800, - gTrainerBackPic_Steven + 0x0800, 0x0800, - gTrainerBackPic_Steven + 0x1000, 0x0800, - gTrainerBackPic_Steven + 0x1800, 0x0800, + gTrainerBackPic_Steven + TRAINER_PIC_SIZE * 0, TRAINER_PIC_SIZE, + gTrainerBackPic_Steven + TRAINER_PIC_SIZE * 1, TRAINER_PIC_SIZE, + gTrainerBackPic_Steven + TRAINER_PIC_SIZE * 2, TRAINER_PIC_SIZE, + gTrainerBackPic_Steven + TRAINER_PIC_SIZE * 3, TRAINER_PIC_SIZE, }; static const union AnimCmd sAnim_GeneralFrame0[] = @@ -290,7 +290,7 @@ static const union AnimCmd sAnim_MonPic_3[] = ANIMCMD_END, }; -const union AnimCmd *const gAnims_MonPic[] = +const union AnimCmd *const gAnims_MonPic[MAX_MON_PIC_FRAMES] = { sAnim_MonPic_0, sAnim_MonPic_1, diff --git a/src/data/trainer_graphics/back_pic_tables.h b/src/data/trainer_graphics/back_pic_tables.h index 1dbffba428c4..524d48d480ef 100644 --- a/src/data/trainer_graphics/back_pic_tables.h +++ b/src/data/trainer_graphics/back_pic_tables.h @@ -13,18 +13,48 @@ const struct MonCoords gTrainerBackPicCoords[] = // this table goes functionally unused, since none of these pics are compressed // and the place they would get extracted to gets overwritten later anyway // the casts are so they'll play nice with the strict struct definition -#define TRAINER_BACK_SPRITE(trainerPic, sprite, size) [TRAINER_BACK_PIC_##trainerPic] = {(const u32 *)sprite, size, TRAINER_BACK_PIC_##trainerPic} - const struct CompressedSpriteSheet gTrainerBackPicTable[] = { - TRAINER_BACK_SPRITE(BRENDAN, gTrainerBackPic_Brendan, 0x2000), - TRAINER_BACK_SPRITE(MAY, gTrainerBackPic_May, 0x2000), - TRAINER_BACK_SPRITE(RED, gTrainerBackPic_Red, 0x2800), - TRAINER_BACK_SPRITE(LEAF, gTrainerBackPic_Leaf, 0x2800), - TRAINER_BACK_SPRITE(RUBY_SAPPHIRE_BRENDAN, gTrainerBackPic_RubySapphireBrendan, 0x2000), - TRAINER_BACK_SPRITE(RUBY_SAPPHIRE_MAY, gTrainerBackPic_RubySapphireMay, 0x2000), - TRAINER_BACK_SPRITE(WALLY, gTrainerBackPic_Wally, 0x2000), - TRAINER_BACK_SPRITE(STEVEN, gTrainerBackPic_Steven, 0x2000), + [TRAINER_BACK_PIC_BRENDAN] = { + .data = (const u32 *)gTrainerBackPic_Brendan, + .size = TRAINER_PIC_SIZE * ARRAY_COUNT(gTrainerBackPicTable_Brendan), + .tag = TRAINER_BACK_PIC_BRENDAN, + }, + [TRAINER_BACK_PIC_MAY] = { + .data = (const u32 *)gTrainerBackPic_May, + .size = TRAINER_PIC_SIZE * ARRAY_COUNT(gTrainerBackPicTable_May), + .tag = TRAINER_BACK_PIC_MAY, + }, + [TRAINER_BACK_PIC_RED] = { + .data = (const u32 *)gTrainerBackPic_Red, + .size = TRAINER_PIC_SIZE * ARRAY_COUNT(gTrainerBackPicTable_Red), + .tag = TRAINER_BACK_PIC_RED, + }, + [TRAINER_BACK_PIC_LEAF] = { + .data = (const u32 *)gTrainerBackPic_Leaf, + .size = TRAINER_PIC_SIZE * ARRAY_COUNT(gTrainerBackPicTable_Leaf), + .tag = TRAINER_BACK_PIC_LEAF, + }, + [TRAINER_BACK_PIC_RUBY_SAPPHIRE_BRENDAN] = { + .data = (const u32 *)gTrainerBackPic_RubySapphireBrendan, + .size = TRAINER_PIC_SIZE * ARRAY_COUNT(gTrainerBackPicTable_RubySapphireBrendan), + .tag = TRAINER_BACK_PIC_RUBY_SAPPHIRE_BRENDAN, + }, + [TRAINER_BACK_PIC_RUBY_SAPPHIRE_MAY] = { + .data = (const u32 *)gTrainerBackPic_RubySapphireMay, + .size = TRAINER_PIC_SIZE * ARRAY_COUNT(gTrainerBackPicTable_RubySapphireMay), + .tag = TRAINER_BACK_PIC_RUBY_SAPPHIRE_MAY, + }, + [TRAINER_BACK_PIC_WALLY] = { + .data = (const u32 *)gTrainerBackPic_Wally, + .size = TRAINER_PIC_SIZE * ARRAY_COUNT(gTrainerBackPicTable_Wally), + .tag = TRAINER_BACK_PIC_WALLY, + }, + [TRAINER_BACK_PIC_STEVEN] = { + .data = (const u32 *)gTrainerBackPic_Steven, + .size = TRAINER_PIC_SIZE * ARRAY_COUNT(gTrainerBackPicTable_Steven), + .tag = TRAINER_BACK_PIC_STEVEN, + }, }; #define TRAINER_BACK_PAL(trainerPic, pal) [TRAINER_BACK_PIC_##trainerPic] = {pal, TRAINER_BACK_PIC_##trainerPic} diff --git a/src/data/trainer_graphics/front_pic_tables.h b/src/data/trainer_graphics/front_pic_tables.h index e751f3c1d2ff..dd4aa26de0c0 100644 --- a/src/data/trainer_graphics/front_pic_tables.h +++ b/src/data/trainer_graphics/front_pic_tables.h @@ -99,99 +99,99 @@ const struct MonCoords gTrainerFrontPicCoords[] = const struct CompressedSpriteSheet gTrainerFrontPicTable[] = { - TRAINER_SPRITE(HIKER, gTrainerFrontPic_Hiker, 0x800), - TRAINER_SPRITE(AQUA_GRUNT_M, gTrainerFrontPic_AquaGruntM, 0x800), - TRAINER_SPRITE(POKEMON_BREEDER_F, gTrainerFrontPic_PokemonBreederF, 0x800), - TRAINER_SPRITE(COOLTRAINER_M, gTrainerFrontPic_CoolTrainerM, 0x800), - TRAINER_SPRITE(BIRD_KEEPER, gTrainerFrontPic_BirdKeeper, 0x800), - TRAINER_SPRITE(COLLECTOR, gTrainerFrontPic_Collector, 0x800), - TRAINER_SPRITE(AQUA_GRUNT_F, gTrainerFrontPic_AquaGruntF, 0x800), - TRAINER_SPRITE(SWIMMER_M, gTrainerFrontPic_SwimmerM, 0x800), - TRAINER_SPRITE(MAGMA_GRUNT_M, gTrainerFrontPic_MagmaGruntM, 0x800), - TRAINER_SPRITE(EXPERT_M, gTrainerFrontPic_ExpertM, 0x800), - TRAINER_SPRITE(AQUA_ADMIN_M, gTrainerFrontPic_AquaAdminM, 0x800), - TRAINER_SPRITE(BLACK_BELT, gTrainerFrontPic_BlackBelt, 0x800), - TRAINER_SPRITE(AQUA_ADMIN_F, gTrainerFrontPic_AquaAdminF, 0x800), - TRAINER_SPRITE(AQUA_LEADER_ARCHIE, gTrainerFrontPic_AquaLeaderArchie, 0x800), - TRAINER_SPRITE(HEX_MANIAC, gTrainerFrontPic_HexManiac, 0x800), - TRAINER_SPRITE(AROMA_LADY, gTrainerFrontPic_AromaLady, 0x800), - TRAINER_SPRITE(RUIN_MANIAC, gTrainerFrontPic_RuinManiac, 0x800), - TRAINER_SPRITE(INTERVIEWER, gTrainerFrontPic_Interviewer, 0x800), - TRAINER_SPRITE(TUBER_F, gTrainerFrontPic_TuberF, 0x800), - TRAINER_SPRITE(TUBER_M, gTrainerFrontPic_TuberM, 0x800), - TRAINER_SPRITE(COOLTRAINER_F, gTrainerFrontPic_CoolTrainerF, 0x800), - TRAINER_SPRITE(LADY, gTrainerFrontPic_Lady, 0x800), - TRAINER_SPRITE(BEAUTY, gTrainerFrontPic_Beauty, 0x800), - TRAINER_SPRITE(RICH_BOY, gTrainerFrontPic_RichBoy, 0x800), - TRAINER_SPRITE(EXPERT_F, gTrainerFrontPic_ExpertF, 0x800), - TRAINER_SPRITE(POKEMANIAC, gTrainerFrontPic_Pokemaniac, 0x800), - TRAINER_SPRITE(MAGMA_GRUNT_F, gTrainerFrontPic_MagmaGruntF, 0x800), - TRAINER_SPRITE(GUITARIST, gTrainerFrontPic_Guitarist, 0x800), - TRAINER_SPRITE(KINDLER, gTrainerFrontPic_Kindler, 0x800), - TRAINER_SPRITE(CAMPER, gTrainerFrontPic_Camper, 0x800), - TRAINER_SPRITE(PICNICKER, gTrainerFrontPic_Picnicker, 0x800), - TRAINER_SPRITE(BUG_MANIAC, gTrainerFrontPic_BugManiac, 0x800), - TRAINER_SPRITE(POKEMON_BREEDER_M, gTrainerFrontPic_PokemonBreederM, 0x800), - TRAINER_SPRITE(PSYCHIC_M, gTrainerFrontPic_PsychicM, 0x800), - TRAINER_SPRITE(PSYCHIC_F, gTrainerFrontPic_PsychicF, 0x800), - TRAINER_SPRITE(GENTLEMAN, gTrainerFrontPic_Gentleman, 0x800), - TRAINER_SPRITE(ELITE_FOUR_SIDNEY, gTrainerFrontPic_EliteFourSidney, 0x800), - TRAINER_SPRITE(ELITE_FOUR_PHOEBE, gTrainerFrontPic_EliteFourPhoebe, 0x800), - TRAINER_SPRITE(ELITE_FOUR_GLACIA, gTrainerFrontPic_EliteFourGlacia, 0x800), - TRAINER_SPRITE(ELITE_FOUR_DRAKE, gTrainerFrontPic_EliteFourDrake, 0x800), - TRAINER_SPRITE(LEADER_ROXANNE, gTrainerFrontPic_LeaderRoxanne, 0x800), - TRAINER_SPRITE(LEADER_BRAWLY, gTrainerFrontPic_LeaderBrawly, 0x800), - TRAINER_SPRITE(LEADER_WATTSON, gTrainerFrontPic_LeaderWattson, 0x800), - TRAINER_SPRITE(LEADER_FLANNERY, gTrainerFrontPic_LeaderFlannery, 0x800), - TRAINER_SPRITE(LEADER_NORMAN, gTrainerFrontPic_LeaderNorman, 0x800), - TRAINER_SPRITE(LEADER_WINONA, gTrainerFrontPic_LeaderWinona, 0x800), - TRAINER_SPRITE(LEADER_TATE_AND_LIZA, gTrainerFrontPic_LeaderTateAndLiza, 0x800), - TRAINER_SPRITE(LEADER_JUAN, gTrainerFrontPic_LeaderJuan, 0x800), - TRAINER_SPRITE(SCHOOL_KID_M, gTrainerFrontPic_SchoolKidM, 0x800), - TRAINER_SPRITE(SCHOOL_KID_F, gTrainerFrontPic_SchoolKidF, 0x800), - TRAINER_SPRITE(SR_AND_JR, gTrainerFrontPic_SrAndJr, 0x1000), - TRAINER_SPRITE(POKEFAN_M, gTrainerFrontPic_PokefanM, 0x1000), - TRAINER_SPRITE(POKEFAN_F, gTrainerFrontPic_PokefanF, 0x800), - TRAINER_SPRITE(YOUNGSTER, gTrainerFrontPic_Youngster, 0x800), - TRAINER_SPRITE(CHAMPION_WALLACE, gTrainerFrontPic_ChampionWallace, 0x1000), - TRAINER_SPRITE(FISHERMAN, gTrainerFrontPic_Fisherman, 0x800), - TRAINER_SPRITE(CYCLING_TRIATHLETE_M, gTrainerFrontPic_CyclingTriathleteM, 0x1000), - TRAINER_SPRITE(CYCLING_TRIATHLETE_F, gTrainerFrontPic_CyclingTriathleteF, 0x800), - TRAINER_SPRITE(RUNNING_TRIATHLETE_M, gTrainerFrontPic_RunningTriathleteM, 0x800), - TRAINER_SPRITE(RUNNING_TRIATHLETE_F, gTrainerFrontPic_RunningTriathleteF, 0x800), - TRAINER_SPRITE(SWIMMING_TRIATHLETE_M, gTrainerFrontPic_SwimmingTriathleteM, 0x800), - TRAINER_SPRITE(SWIMMING_TRIATHLETE_F, gTrainerFrontPic_SwimmingTriathleteF, 0x800), - TRAINER_SPRITE(DRAGON_TAMER, gTrainerFrontPic_DragonTamer, 0x800), - TRAINER_SPRITE(NINJA_BOY, gTrainerFrontPic_NinjaBoy, 0x800), - TRAINER_SPRITE(BATTLE_GIRL, gTrainerFrontPic_BattleGirl, 0x1000), - TRAINER_SPRITE(PARASOL_LADY, gTrainerFrontPic_ParasolLady, 0x800), - TRAINER_SPRITE(SWIMMER_F, gTrainerFrontPic_SwimmerF, 0x800), - TRAINER_SPRITE(TWINS, gTrainerFrontPic_Twins, 0x800), - TRAINER_SPRITE(SAILOR, gTrainerFrontPic_Sailor, 0x800), - TRAINER_SPRITE(MAGMA_ADMIN, gTrainerFrontPic_MagmaAdmin, 0x800), - TRAINER_SPRITE(WALLY, gTrainerFrontPic_Wally, 0x800), - TRAINER_SPRITE(BRENDAN, gTrainerFrontPic_Brendan, 0x800), - TRAINER_SPRITE(MAY, gTrainerFrontPic_May, 0x800), - TRAINER_SPRITE(BUG_CATCHER, gTrainerFrontPic_BugCatcher, 0x800), - TRAINER_SPRITE(POKEMON_RANGER_M, gTrainerFrontPic_PokemonRangerM, 0x800), - TRAINER_SPRITE(POKEMON_RANGER_F, gTrainerFrontPic_PokemonRangerF, 0x800), - TRAINER_SPRITE(MAGMA_LEADER_MAXIE, gTrainerFrontPic_MagmaLeaderMaxie, 0x800), - TRAINER_SPRITE(LASS, gTrainerFrontPic_Lass, 0x800), - TRAINER_SPRITE(YOUNG_COUPLE, gTrainerFrontPic_YoungCouple, 0x800), - TRAINER_SPRITE(OLD_COUPLE, gTrainerFrontPic_OldCouple, 0x800), - TRAINER_SPRITE(SIS_AND_BRO, gTrainerFrontPic_SisAndBro, 0x800), - TRAINER_SPRITE(STEVEN, gTrainerFrontPic_Steven, 0x800), - TRAINER_SPRITE(SALON_MAIDEN_ANABEL, gTrainerFrontPic_SalonMaidenAnabel, 0x800), - TRAINER_SPRITE(DOME_ACE_TUCKER, gTrainerFrontPic_DomeAceTucker, 0x800), - TRAINER_SPRITE(PALACE_MAVEN_SPENSER, gTrainerFrontPic_PalaceMavenSpenser, 0x800), - TRAINER_SPRITE(ARENA_TYCOON_GRETA, gTrainerFrontPic_ArenaTycoonGreta, 0x1000), - TRAINER_SPRITE(FACTORY_HEAD_NOLAND, gTrainerFrontPic_FactoryHeadNoland, 0x800), - TRAINER_SPRITE(PIKE_QUEEN_LUCY, gTrainerFrontPic_PikeQueenLucy, 0x800), - TRAINER_SPRITE(PYRAMID_KING_BRANDON, gTrainerFrontPic_PyramidKingBrandon, 0x800), - TRAINER_SPRITE(RED, gTrainerFrontPic_Red, 0x800), - TRAINER_SPRITE(LEAF, gTrainerFrontPic_Leaf, 0x800), - TRAINER_SPRITE(RS_BRENDAN, gTrainerFrontPic_RubySapphireBrendan, 0x800), - TRAINER_SPRITE(RS_MAY, gTrainerFrontPic_RubySapphireMay, 0x800), + TRAINER_SPRITE(HIKER, gTrainerFrontPic_Hiker, TRAINER_PIC_SIZE), + TRAINER_SPRITE(AQUA_GRUNT_M, gTrainerFrontPic_AquaGruntM, TRAINER_PIC_SIZE), + TRAINER_SPRITE(POKEMON_BREEDER_F, gTrainerFrontPic_PokemonBreederF, TRAINER_PIC_SIZE), + TRAINER_SPRITE(COOLTRAINER_M, gTrainerFrontPic_CoolTrainerM, TRAINER_PIC_SIZE), + TRAINER_SPRITE(BIRD_KEEPER, gTrainerFrontPic_BirdKeeper, TRAINER_PIC_SIZE), + TRAINER_SPRITE(COLLECTOR, gTrainerFrontPic_Collector, TRAINER_PIC_SIZE), + TRAINER_SPRITE(AQUA_GRUNT_F, gTrainerFrontPic_AquaGruntF, TRAINER_PIC_SIZE), + TRAINER_SPRITE(SWIMMER_M, gTrainerFrontPic_SwimmerM, TRAINER_PIC_SIZE), + TRAINER_SPRITE(MAGMA_GRUNT_M, gTrainerFrontPic_MagmaGruntM, TRAINER_PIC_SIZE), + TRAINER_SPRITE(EXPERT_M, gTrainerFrontPic_ExpertM, TRAINER_PIC_SIZE), + TRAINER_SPRITE(AQUA_ADMIN_M, gTrainerFrontPic_AquaAdminM, TRAINER_PIC_SIZE), + TRAINER_SPRITE(BLACK_BELT, gTrainerFrontPic_BlackBelt, TRAINER_PIC_SIZE), + TRAINER_SPRITE(AQUA_ADMIN_F, gTrainerFrontPic_AquaAdminF, TRAINER_PIC_SIZE), + TRAINER_SPRITE(AQUA_LEADER_ARCHIE, gTrainerFrontPic_AquaLeaderArchie, TRAINER_PIC_SIZE), + TRAINER_SPRITE(HEX_MANIAC, gTrainerFrontPic_HexManiac, TRAINER_PIC_SIZE), + TRAINER_SPRITE(AROMA_LADY, gTrainerFrontPic_AromaLady, TRAINER_PIC_SIZE), + TRAINER_SPRITE(RUIN_MANIAC, gTrainerFrontPic_RuinManiac, TRAINER_PIC_SIZE), + TRAINER_SPRITE(INTERVIEWER, gTrainerFrontPic_Interviewer, TRAINER_PIC_SIZE), + TRAINER_SPRITE(TUBER_F, gTrainerFrontPic_TuberF, TRAINER_PIC_SIZE), + TRAINER_SPRITE(TUBER_M, gTrainerFrontPic_TuberM, TRAINER_PIC_SIZE), + TRAINER_SPRITE(COOLTRAINER_F, gTrainerFrontPic_CoolTrainerF, TRAINER_PIC_SIZE), + TRAINER_SPRITE(LADY, gTrainerFrontPic_Lady, TRAINER_PIC_SIZE), + TRAINER_SPRITE(BEAUTY, gTrainerFrontPic_Beauty, TRAINER_PIC_SIZE), + TRAINER_SPRITE(RICH_BOY, gTrainerFrontPic_RichBoy, TRAINER_PIC_SIZE), + TRAINER_SPRITE(EXPERT_F, gTrainerFrontPic_ExpertF, TRAINER_PIC_SIZE), + TRAINER_SPRITE(POKEMANIAC, gTrainerFrontPic_Pokemaniac, TRAINER_PIC_SIZE), + TRAINER_SPRITE(MAGMA_GRUNT_F, gTrainerFrontPic_MagmaGruntF, TRAINER_PIC_SIZE), + TRAINER_SPRITE(GUITARIST, gTrainerFrontPic_Guitarist, TRAINER_PIC_SIZE), + TRAINER_SPRITE(KINDLER, gTrainerFrontPic_Kindler, TRAINER_PIC_SIZE), + TRAINER_SPRITE(CAMPER, gTrainerFrontPic_Camper, TRAINER_PIC_SIZE), + TRAINER_SPRITE(PICNICKER, gTrainerFrontPic_Picnicker, TRAINER_PIC_SIZE), + TRAINER_SPRITE(BUG_MANIAC, gTrainerFrontPic_BugManiac, TRAINER_PIC_SIZE), + TRAINER_SPRITE(POKEMON_BREEDER_M, gTrainerFrontPic_PokemonBreederM, TRAINER_PIC_SIZE), + TRAINER_SPRITE(PSYCHIC_M, gTrainerFrontPic_PsychicM, TRAINER_PIC_SIZE), + TRAINER_SPRITE(PSYCHIC_F, gTrainerFrontPic_PsychicF, TRAINER_PIC_SIZE), + TRAINER_SPRITE(GENTLEMAN, gTrainerFrontPic_Gentleman, TRAINER_PIC_SIZE), + TRAINER_SPRITE(ELITE_FOUR_SIDNEY, gTrainerFrontPic_EliteFourSidney, TRAINER_PIC_SIZE), + TRAINER_SPRITE(ELITE_FOUR_PHOEBE, gTrainerFrontPic_EliteFourPhoebe, TRAINER_PIC_SIZE), + TRAINER_SPRITE(ELITE_FOUR_GLACIA, gTrainerFrontPic_EliteFourGlacia, TRAINER_PIC_SIZE), + TRAINER_SPRITE(ELITE_FOUR_DRAKE, gTrainerFrontPic_EliteFourDrake, TRAINER_PIC_SIZE), + TRAINER_SPRITE(LEADER_ROXANNE, gTrainerFrontPic_LeaderRoxanne, TRAINER_PIC_SIZE), + TRAINER_SPRITE(LEADER_BRAWLY, gTrainerFrontPic_LeaderBrawly, TRAINER_PIC_SIZE), + TRAINER_SPRITE(LEADER_WATTSON, gTrainerFrontPic_LeaderWattson, TRAINER_PIC_SIZE), + TRAINER_SPRITE(LEADER_FLANNERY, gTrainerFrontPic_LeaderFlannery, TRAINER_PIC_SIZE), + TRAINER_SPRITE(LEADER_NORMAN, gTrainerFrontPic_LeaderNorman, TRAINER_PIC_SIZE), + TRAINER_SPRITE(LEADER_WINONA, gTrainerFrontPic_LeaderWinona, TRAINER_PIC_SIZE), + TRAINER_SPRITE(LEADER_TATE_AND_LIZA, gTrainerFrontPic_LeaderTateAndLiza, TRAINER_PIC_SIZE), + TRAINER_SPRITE(LEADER_JUAN, gTrainerFrontPic_LeaderJuan, TRAINER_PIC_SIZE), + TRAINER_SPRITE(SCHOOL_KID_M, gTrainerFrontPic_SchoolKidM, TRAINER_PIC_SIZE), + TRAINER_SPRITE(SCHOOL_KID_F, gTrainerFrontPic_SchoolKidF, TRAINER_PIC_SIZE), + TRAINER_SPRITE(SR_AND_JR, gTrainerFrontPic_SrAndJr, TRAINER_PIC_SIZE * 2), + TRAINER_SPRITE(POKEFAN_M, gTrainerFrontPic_PokefanM, TRAINER_PIC_SIZE * 2), + TRAINER_SPRITE(POKEFAN_F, gTrainerFrontPic_PokefanF, TRAINER_PIC_SIZE), + TRAINER_SPRITE(YOUNGSTER, gTrainerFrontPic_Youngster, TRAINER_PIC_SIZE), + TRAINER_SPRITE(CHAMPION_WALLACE, gTrainerFrontPic_ChampionWallace, TRAINER_PIC_SIZE * 2), + TRAINER_SPRITE(FISHERMAN, gTrainerFrontPic_Fisherman, TRAINER_PIC_SIZE), + TRAINER_SPRITE(CYCLING_TRIATHLETE_M, gTrainerFrontPic_CyclingTriathleteM, TRAINER_PIC_SIZE * 2), + TRAINER_SPRITE(CYCLING_TRIATHLETE_F, gTrainerFrontPic_CyclingTriathleteF, TRAINER_PIC_SIZE), + TRAINER_SPRITE(RUNNING_TRIATHLETE_M, gTrainerFrontPic_RunningTriathleteM, TRAINER_PIC_SIZE), + TRAINER_SPRITE(RUNNING_TRIATHLETE_F, gTrainerFrontPic_RunningTriathleteF, TRAINER_PIC_SIZE), + TRAINER_SPRITE(SWIMMING_TRIATHLETE_M, gTrainerFrontPic_SwimmingTriathleteM, TRAINER_PIC_SIZE), + TRAINER_SPRITE(SWIMMING_TRIATHLETE_F, gTrainerFrontPic_SwimmingTriathleteF, TRAINER_PIC_SIZE), + TRAINER_SPRITE(DRAGON_TAMER, gTrainerFrontPic_DragonTamer, TRAINER_PIC_SIZE), + TRAINER_SPRITE(NINJA_BOY, gTrainerFrontPic_NinjaBoy, TRAINER_PIC_SIZE), + TRAINER_SPRITE(BATTLE_GIRL, gTrainerFrontPic_BattleGirl, TRAINER_PIC_SIZE * 2), + TRAINER_SPRITE(PARASOL_LADY, gTrainerFrontPic_ParasolLady, TRAINER_PIC_SIZE), + TRAINER_SPRITE(SWIMMER_F, gTrainerFrontPic_SwimmerF, TRAINER_PIC_SIZE), + TRAINER_SPRITE(TWINS, gTrainerFrontPic_Twins, TRAINER_PIC_SIZE), + TRAINER_SPRITE(SAILOR, gTrainerFrontPic_Sailor, TRAINER_PIC_SIZE), + TRAINER_SPRITE(MAGMA_ADMIN, gTrainerFrontPic_MagmaAdmin, TRAINER_PIC_SIZE), + TRAINER_SPRITE(WALLY, gTrainerFrontPic_Wally, TRAINER_PIC_SIZE), + TRAINER_SPRITE(BRENDAN, gTrainerFrontPic_Brendan, TRAINER_PIC_SIZE), + TRAINER_SPRITE(MAY, gTrainerFrontPic_May, TRAINER_PIC_SIZE), + TRAINER_SPRITE(BUG_CATCHER, gTrainerFrontPic_BugCatcher, TRAINER_PIC_SIZE), + TRAINER_SPRITE(POKEMON_RANGER_M, gTrainerFrontPic_PokemonRangerM, TRAINER_PIC_SIZE), + TRAINER_SPRITE(POKEMON_RANGER_F, gTrainerFrontPic_PokemonRangerF, TRAINER_PIC_SIZE), + TRAINER_SPRITE(MAGMA_LEADER_MAXIE, gTrainerFrontPic_MagmaLeaderMaxie, TRAINER_PIC_SIZE), + TRAINER_SPRITE(LASS, gTrainerFrontPic_Lass, TRAINER_PIC_SIZE), + TRAINER_SPRITE(YOUNG_COUPLE, gTrainerFrontPic_YoungCouple, TRAINER_PIC_SIZE), + TRAINER_SPRITE(OLD_COUPLE, gTrainerFrontPic_OldCouple, TRAINER_PIC_SIZE), + TRAINER_SPRITE(SIS_AND_BRO, gTrainerFrontPic_SisAndBro, TRAINER_PIC_SIZE), + TRAINER_SPRITE(STEVEN, gTrainerFrontPic_Steven, TRAINER_PIC_SIZE), + TRAINER_SPRITE(SALON_MAIDEN_ANABEL, gTrainerFrontPic_SalonMaidenAnabel, TRAINER_PIC_SIZE), + TRAINER_SPRITE(DOME_ACE_TUCKER, gTrainerFrontPic_DomeAceTucker, TRAINER_PIC_SIZE), + TRAINER_SPRITE(PALACE_MAVEN_SPENSER, gTrainerFrontPic_PalaceMavenSpenser, TRAINER_PIC_SIZE), + TRAINER_SPRITE(ARENA_TYCOON_GRETA, gTrainerFrontPic_ArenaTycoonGreta, TRAINER_PIC_SIZE * 2), + TRAINER_SPRITE(FACTORY_HEAD_NOLAND, gTrainerFrontPic_FactoryHeadNoland, TRAINER_PIC_SIZE), + TRAINER_SPRITE(PIKE_QUEEN_LUCY, gTrainerFrontPic_PikeQueenLucy, TRAINER_PIC_SIZE), + TRAINER_SPRITE(PYRAMID_KING_BRANDON, gTrainerFrontPic_PyramidKingBrandon, TRAINER_PIC_SIZE), + TRAINER_SPRITE(RED, gTrainerFrontPic_Red, TRAINER_PIC_SIZE), + TRAINER_SPRITE(LEAF, gTrainerFrontPic_Leaf, TRAINER_PIC_SIZE), + TRAINER_SPRITE(RS_BRENDAN, gTrainerFrontPic_RubySapphireBrendan, TRAINER_PIC_SIZE), + TRAINER_SPRITE(RS_MAY, gTrainerFrontPic_RubySapphireMay, TRAINER_PIC_SIZE), }; #define TRAINER_PAL(trainerPic, pal) [TRAINER_PIC_##trainerPic] = {pal, TRAINER_PIC_##trainerPic} diff --git a/src/pokemon.c b/src/pokemon.c index b65f97bd8562..0b4e6465bb40 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -6928,8 +6928,6 @@ static bool8 ShouldSkipFriendshipChange(void) #define ALLOC_FAIL_BUFFER (1 << 0) #define ALLOC_FAIL_STRUCT (1 << 1) #define GFX_MANAGER_ACTIVE 0xA3 // Arbitrary value -#define GFX_MANAGER_SPR_SIZE (MON_PIC_SIZE * 4) // Only Castform uses more than MON_PIC_SIZE, despite not displaying its forms. -#define GFX_MANAGER_NUM_FRAMES 4 // Only 2 frames are needed static void InitMonSpritesGfx_Battle(struct MonSpritesGfxManager* gfx) { @@ -6976,7 +6974,7 @@ struct MonSpritesGfxManager *CreateMonSpritesGfxManager(u8 managerId, u8 mode) case MON_SPR_GFX_MODE_FULL_PARTY: gfx->numSprites = PARTY_SIZE + 1; gfx->numSprites2 = PARTY_SIZE + 1; - gfx->numFrames = GFX_MANAGER_NUM_FRAMES; + gfx->numFrames = MAX_MON_PIC_FRAMES; gfx->dataSize = 1; gfx->mode = MON_SPR_GFX_MODE_FULL_PARTY; break; @@ -6985,14 +6983,14 @@ struct MonSpritesGfxManager *CreateMonSpritesGfxManager(u8 managerId, u8 mode) default: gfx->numSprites = MAX_BATTLERS_COUNT; gfx->numSprites2 = MAX_BATTLERS_COUNT; - gfx->numFrames = GFX_MANAGER_NUM_FRAMES; + gfx->numFrames = MAX_MON_PIC_FRAMES; gfx->dataSize = 1; gfx->mode = MON_SPR_GFX_MODE_NORMAL; break; } // Set up sprite / sprite pointer buffers - gfx->spriteBuffer = AllocZeroed(gfx->dataSize * GFX_MANAGER_SPR_SIZE * gfx->numSprites); + gfx->spriteBuffer = AllocZeroed(gfx->dataSize * MON_PIC_SIZE * MAX_MON_PIC_FRAMES * gfx->numSprites); gfx->spritePointers = AllocZeroed(gfx->numSprites * 32); // ? Only * 4 is necessary, perhaps they were thinking bits. if (gfx->spriteBuffer == NULL || gfx->spritePointers == NULL) { @@ -7001,7 +6999,7 @@ struct MonSpritesGfxManager *CreateMonSpritesGfxManager(u8 managerId, u8 mode) else { for (i = 0; i < gfx->numSprites; i++) - gfx->spritePointers[i] = gfx->spriteBuffer + (gfx->dataSize * GFX_MANAGER_SPR_SIZE * i); + gfx->spritePointers[i] = gfx->spriteBuffer + (gfx->dataSize * MON_PIC_SIZE * MAX_MON_PIC_FRAMES * i); } // Set up sprite structs diff --git a/src/pokemon_jump.c b/src/pokemon_jump.c index 4f2a14fdf05f..e9397a08e80c 100755 --- a/src/pokemon_jump.c +++ b/src/pokemon_jump.c @@ -2714,7 +2714,7 @@ static void CreateJumpMonSprite(struct PokemonJumpGfx *jumpGfx, struct PokemonJu u8 spriteId; spriteTemplate = sSpriteTemplate_JumpMon; - buffer = Alloc(0x2000); + buffer = Alloc(MON_PIC_SIZE * MAX_MON_PIC_FRAMES); unusedBuffer = Alloc(MON_PIC_SIZE); if (multiplayerId == GetPokeJumpMultiplayerId()) subpriority = 3; diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index 9a9e551a2a50..a879cd4c89d6 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -550,7 +550,7 @@ struct PokemonStorageSystemData u16 *displayMonTilePtr; struct Sprite *displayMonSprite; u16 displayMonPalBuffer[0x40]; - u8 tileBuffer[MON_PIC_SIZE * 4]; // 4x the size of a 'Mon sprite to account for Castform + u8 tileBuffer[MON_PIC_SIZE * MAX_MON_PIC_FRAMES]; u8 itemIconBuffer[0x800]; u8 wallpaperBgTilemapBuffer[0x1000]; u8 displayMenuTilemapBuffer[0x800]; diff --git a/src/pokenav_conditions.c b/src/pokenav_conditions.c index e0645bac0b6d..e7269ae835f3 100644 --- a/src/pokenav_conditions.c +++ b/src/pokenav_conditions.c @@ -19,7 +19,7 @@ struct Pokenav_ConditionMenu { u32 monPal[CONDITION_MONS_LOADED][0x20]; u8 fill[0x180]; - u32 monPicGfx[CONDITION_MONS_LOADED][MON_PIC_SIZE]; + u32 monPicGfx[CONDITION_MONS_LOADED][MON_PIC_SIZE]; // TODO: Is this too small? bool8 inSearchMode; s16 toLoadListIndex; u32 (*callback)(struct Pokenav_ConditionMenu *); diff --git a/src/pokenav_match_call_gfx.c b/src/pokenav_match_call_gfx.c index fd5b36fae08a..c207e3826cd9 100755 --- a/src/pokenav_match_call_gfx.c +++ b/src/pokenav_match_call_gfx.c @@ -49,7 +49,7 @@ struct Pokenav_MatchCallGfx u8 unusedTilemapBuffer[BG_SCREEN_SIZE]; u8 bgTilemapBuffer2[BG_SCREEN_SIZE]; u8 *trainerPicGfxPtr; - u8 trainerPicGfx[0x800]; + u8 trainerPicGfx[0x800]; // TODO u8 trainerPicPal[0x20]; }; diff --git a/src/trainer_pokemon_sprites.c b/src/trainer_pokemon_sprites.c index a7289677e642..2ef8a7cff1ef 100644 --- a/src/trainer_pokemon_sprites.c +++ b/src/trainer_pokemon_sprites.c @@ -9,6 +9,12 @@ #include "pokemon.h" #include "constants/trainers.h" +#define PICS_COUNT 8 + +// Needs to be large enough to store either a decompressed pokemon pic or trainer pic +#define PIC_SPRITE_SIZE max(MON_PIC_SIZE, TRAINER_PIC_SIZE) +#define MAX_PIC_FRAMES max(MAX_MON_PIC_FRAMES, MAX_TRAINER_PIC_FRAMES) + struct PicData { u8 *frames; @@ -18,8 +24,6 @@ struct PicData u8 active; }; -#define PICS_COUNT 8 - static EWRAM_DATA struct SpriteTemplate sCreatingSpriteTemplate = {}; static EWRAM_DATA struct PicData sSpritePics[PICS_COUNT] = {}; @@ -149,11 +153,11 @@ static u16 CreatePicSprite(u16 species, u32 otId, u32 personality, bool8 isFront if (i == PICS_COUNT) return 0xFFFF; - framePics = Alloc(4 * 0x800); + framePics = Alloc(PIC_SPRITE_SIZE * MAX_PIC_FRAMES); if (!framePics) return 0xFFFF; - images = Alloc(4 * sizeof(struct SpriteFrameImage)); + images = Alloc(sizeof(struct SpriteFrameImage) * MAX_PIC_FRAMES); if (!images) { Free(framePics); @@ -164,10 +168,10 @@ static u16 CreatePicSprite(u16 species, u32 otId, u32 personality, bool8 isFront // debug trap? return 0xFFFF; } - for (j = 0; j < 4; j ++) + for (j = 0; j < MAX_PIC_FRAMES; j ++) { - images[j].data = framePics + 0x800 * j; - images[j].size = 0x800; + images[j].data = framePics + PIC_SPRITE_SIZE * j; + images[j].size = PIC_SPRITE_SIZE; } sCreatingSpriteTemplate.tileTag = TAG_NONE; sCreatingSpriteTemplate.oam = &sOamData_Normal; @@ -209,7 +213,7 @@ u16 CreateMonPicSprite_Affine(u16 species, u32 otId, u32 personality, u8 flags, if (i == PICS_COUNT) return 0xFFFF; - framePics = Alloc(4 * MON_PIC_SIZE); + framePics = Alloc(MON_PIC_SIZE * MAX_MON_PIC_FRAMES); if (!framePics) return 0xFFFF; @@ -222,7 +226,7 @@ u16 CreateMonPicSprite_Affine(u16 species, u32 otId, u32 personality, u8 flags, { type = flags; } - images = Alloc(4 * sizeof(struct SpriteFrameImage)); + images = Alloc(sizeof(struct SpriteFrameImage) * MAX_MON_PIC_FRAMES); if (!images) { Free(framePics); @@ -233,7 +237,7 @@ u16 CreateMonPicSprite_Affine(u16 species, u32 otId, u32 personality, u8 flags, // debug trap? return 0xFFFF; } - for (j = 0; j < 4; j ++) + for (j = 0; j < MAX_MON_PIC_FRAMES; j ++) { images[j].data = framePics + MON_PIC_SIZE * j; images[j].size = MON_PIC_SIZE; @@ -307,10 +311,10 @@ static u16 CreateTrainerCardSprite(u16 species, u32 otId, u32 personality, bool8 { u8 *framePics; - framePics = Alloc(4 * 0x800); + framePics = Alloc(TRAINER_PIC_SIZE * MAX_TRAINER_PIC_FRAMES); if (framePics && !DecompressPic_HandleDeoxys(species, personality, isFrontPic, framePics, isTrainer)) { - BlitBitmapRectToWindow(windowId, framePics, 0, 0, 0x40, 0x40, destX, destY, 0x40, 0x40); + BlitBitmapRectToWindow(windowId, framePics, 0, 0, TRAINER_PIC_WIDTH, TRAINER_PIC_HEIGHT, destX, destY, TRAINER_PIC_WIDTH, TRAINER_PIC_HEIGHT); LoadPicPaletteBySlot(species, otId, personality, paletteSlot, isTrainer); Free(framePics); return 0; diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c index 2f16f220aa94..37e75bc4e95f 100644 --- a/src/use_pokeblock.c +++ b/src/use_pokeblock.c @@ -88,7 +88,7 @@ struct UsePokeblockMenu { u32 unused; u16 partyPalettes[PARTY_SIZE][0x40]; - u8 partySheets[NUM_SELECTIONS_LOADED][0x2000]; + u8 partySheets[NUM_SELECTIONS_LOADED][MON_PIC_SIZE * MAX_MON_PIC_FRAMES]; u8 unusedBuffer[0x1000]; u8 tilemapBuffer[BG_SCREEN_SIZE + 2]; u8 selectionIconSpriteIds[PARTY_SIZE + 1]; From 620e69945d1dea0f5429e7fd1e3330704711a10b Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Thu, 20 Oct 2022 13:14:32 -0300 Subject: [PATCH 002/428] Form change for starting and ending battles. Adjusted PP for Iron Head/Behemoth moves --- include/battle_util.h | 1 + include/pokemon.h | 2 +- src/battle_main.c | 20 +---- src/battle_script_commands.c | 4 +- src/battle_util.c | 20 +++-- src/data/pokemon/form_change_table_pointers.h | 33 ++++++++ src/data/pokemon/form_change_tables.h | 75 +++++++++++++++++++ src/pokemon.c | 35 ++++----- 8 files changed, 146 insertions(+), 44 deletions(-) diff --git a/include/battle_util.h b/include/battle_util.h index a456cc1e63e1..59ddad9406d3 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -150,6 +150,7 @@ u16 GetWishMegaEvolutionSpecies(u16 preEvoSpecies, u16 moveId1, u16 moveId2, u16 bool32 CanMegaEvolve(u8 battlerId); void UndoMegaEvolution(u32 monId); void UndoFormChange(u32 monId, u32 side, bool32 isSwitchingOut); +void BattleFormChange(u32 monId, u32 side, u16 method); bool32 DoBattlersShareType(u32 battler1, u32 battler2); bool32 CanBattlerGetOrLoseItem(u8 battlerId, u16 itemId); struct Pokemon *GetIllusionMonPtr(u32 battlerId); diff --git a/include/pokemon.h b/include/pokemon.h index c4015d562187..fa5bfc663ecc 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -564,7 +564,7 @@ u16 GetFormChangeTargetSpecies(struct Pokemon *mon, u16 method, u32 arg); u16 GetFormChangeTargetSpeciesBoxMon(struct BoxPokemon *mon, u16 method, u32 arg); u16 MonTryLearningNewMoveEvolution(struct Pokemon *mon, bool8 firstMove); bool32 ShouldShowFemaleDifferences(u16 species, u32 personality); -void TryToSetBattleFormChangeMoves(struct Pokemon *mon); +void TryToSetBattleFormChangeMoves(struct Pokemon *mon, u16 method); u32 GetMonFriendshipScore(struct Pokemon *pokemon); #endif // GUARD_POKEMON_H diff --git a/src/battle_main.c b/src/battle_main.c index 5b6e724c903d..9d75e901c02a 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -602,21 +602,9 @@ static void CB2_InitBattleInternal(void) for (i = 0; i < PARTY_SIZE; i++) { // Player's side - targetSpecies = GetFormChangeTargetSpecies(&gPlayerParty[i], FORM_BATTLE_BEGIN, 0); - if (targetSpecies != SPECIES_NONE) - { - SetMonData(&gPlayerParty[i], MON_DATA_SPECIES, &targetSpecies); - CalculateMonStats(&gPlayerParty[i]); - TryToSetBattleFormChangeMoves(&gPlayerParty[i]); - } + BattleFormChange(i, B_SIDE_PLAYER, FORM_BATTLE_BEGIN); // Opponent's side - targetSpecies = GetFormChangeTargetSpecies(&gEnemyParty[i], FORM_BATTLE_BEGIN, 0); - if (targetSpecies != SPECIES_NONE) - { - SetMonData(&gEnemyParty[i], MON_DATA_SPECIES, &targetSpecies); - CalculateMonStats(&gEnemyParty[i]); - TryToSetBattleFormChangeMoves(&gEnemyParty[i]); - } + BattleFormChange(i, B_SIDE_OPPONENT, FORM_BATTLE_BEGIN); } gBattleCommunication[MULTIUSE_STATE] = 0; @@ -3264,7 +3252,7 @@ void FaintClearSetData(void) UndoMegaEvolution(gBattlerPartyIndexes[gActiveBattler]); gBattleStruct->overwrittenAbilities[gActiveBattler] = ABILITY_NONE; - + // If the fainted mon was involved in a Sky Drop if (gBattleStruct->skyDropTargets[gActiveBattler] != 0xFF) { @@ -5219,7 +5207,7 @@ static void HandleEndTurn_FinishBattle(void) for (i = 0; i < PARTY_SIZE; i++) { UndoMegaEvolution(i); - UndoFormChange(i, B_SIDE_PLAYER, FALSE); + BattleFormChange(i, B_SIDE_PLAYER, FORM_BATTLE_END); DoBurmyFormChange(i); } #if B_RECALCULATE_STATS >= GEN_5 diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index eaa7bbde1a69..bfc9bfc42f4d 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -14109,7 +14109,7 @@ static void Cmd_handleballthrow(void) { BtlController_EmitBallThrowAnim(BUFFER_A, BALL_3_SHAKES_SUCCESS); MarkBattlerForControllerExec(gActiveBattler); - UndoFormChange(gBattlerPartyIndexes[gBattlerTarget], GET_BATTLER_SIDE(gBattlerTarget), FALSE); + BattleFormChange(gBattlerPartyIndexes[gBattlerTarget], GET_BATTLER_SIDE(gBattlerTarget), FORM_BATTLE_END), gBattlescriptCurrInstr = BattleScript_SuccessBallThrow; SetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_POKEBALL, &gLastUsedItem); @@ -14163,7 +14163,7 @@ static void Cmd_handleballthrow(void) if (IsCriticalCapture()) gBattleSpritesDataPtr->animationData->criticalCaptureSuccess = TRUE; - UndoFormChange(gBattlerPartyIndexes[gBattlerTarget], GET_BATTLER_SIDE(gBattlerTarget), FALSE); + BattleFormChange(gBattlerPartyIndexes[gBattlerTarget], GET_BATTLER_SIDE(gBattlerTarget), FORM_BATTLE_END), gBattlescriptCurrInstr = BattleScript_SuccessBallThrow; SetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_POKEBALL, &gLastUsedItem); diff --git a/src/battle_util.c b/src/battle_util.c index 9dbdb1abfcdf..92f79cd8d140 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -9726,15 +9726,19 @@ void UndoFormChange(u32 monId, u32 side, bool32 isSwitchingOut) break; } } - if (!isSwitchingOut) +} + +void BattleFormChange(u32 monId, u32 side, u16 method) +{ + u32 targetSpecies; + struct Pokemon *party = (side == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty; + + targetSpecies = GetFormChangeTargetSpecies(&party[monId], method, 0); + if (targetSpecies != SPECIES_NONE) { - targetSpecies = GetFormChangeTargetSpecies(&party[monId], FORM_BATTLE_END, 0); - if (targetSpecies != SPECIES_NONE) - { - SetMonData(&party[monId], MON_DATA_SPECIES, &targetSpecies); - CalculateMonStats(&party[monId]); - TryToSetBattleFormChangeMoves(&party[monId]); - } + TryToSetBattleFormChangeMoves(&party[monId], method); + SetMonData(&party[monId], MON_DATA_SPECIES, &targetSpecies); + CalculateMonStats(&party[monId]); } } diff --git a/src/data/pokemon/form_change_table_pointers.h b/src/data/pokemon/form_change_table_pointers.h index 90be7112b699..63971f1325f9 100644 --- a/src/data/pokemon/form_change_table_pointers.h +++ b/src/data/pokemon/form_change_table_pointers.h @@ -25,6 +25,10 @@ const struct FormChange *const gFormChangeTablePointers[NUM_SPECIES] = [SPECIES_ARCEUS_FAIRY] = sArceusFormChangeTable, #endif #if P_GEN_5_POKEMON == TRUE + [SPECIES_DARMANITAN] = sDarmanitanFormChangeTable, + [SPECIES_DARMANITAN_ZEN_MODE] = sDarmanitanFormChangeTable, + [SPECIES_DARMANITAN_GALARIAN] = sDarmanitanGalarianFormChangeTable, + [SPECIES_DARMANITAN_ZEN_MODE_GALARIAN] = sDarmanitanGalarianFormChangeTable, [SPECIES_TORNADUS] = sTornadusFormChangeTable, [SPECIES_TORNADUS_THERIAN] = sTornadusFormChangeTable, [SPECIES_THUNDURUS] = sThundurusFormChangeTable, @@ -33,6 +37,8 @@ const struct FormChange *const gFormChangeTablePointers[NUM_SPECIES] = [SPECIES_LANDORUS_THERIAN] = sLandorusFormChangeTable, [SPECIES_KELDEO] = sKeldeoFormChangeTable, [SPECIES_KELDEO_RESOLUTE] = sKeldeoFormChangeTable, + [SPECIES_MELOETTA] = sMeloettaFormChangeTable, + [SPECIES_MELOETTA_PIROUETTE] = sMeloettaFormChangeTable, [SPECIES_GENESECT] = sGenesectFormChangeTable, [SPECIES_GENESECT_DOUSE_DRIVE] = sGenesectFormChangeTable, [SPECIES_GENESECT_SHOCK_DRIVE] = sGenesectFormChangeTable, @@ -40,6 +46,10 @@ const struct FormChange *const gFormChangeTablePointers[NUM_SPECIES] = [SPECIES_GENESECT_CHILL_DRIVE] = sGenesectFormChangeTable, #endif #if P_GEN_6_POKEMON == TRUE + [SPECIES_GRENINJA_BATTLE_BOND] = sGreninjaBattleBondFormChangeTable, + [SPECIES_GRENINJA_ASH] = sGreninjaBattleBondFormChangeTable, + [SPECIES_AEGISLASH] = sAegislashFormChangeTable, + [SPECIES_AEGISLASH_BLADE] = sAegislashFormChangeTable, [SPECIES_XERNEAS] = sXerneasFormChangeTable, [SPECIES_XERNEAS_ACTIVE] = sXerneasFormChangeTable, [SPECIES_HOOPA] = sHoopaFormChangeTable, @@ -50,6 +60,8 @@ const struct FormChange *const gFormChangeTablePointers[NUM_SPECIES] = [SPECIES_ORICORIO_POM_POM] = sOricorioFormChangeTable, [SPECIES_ORICORIO_PAU] = sOricorioFormChangeTable, [SPECIES_ORICORIO_SENSU] = sOricorioFormChangeTable, + [SPECIES_WISHIWASHI] = sWishiwashiFormChangeTable, + [SPECIES_WISHIWASHI_SCHOOL] = sWishiwashiFormChangeTable, [SPECIES_SILVALLY] = sSilvallyFormChangeTable, [SPECIES_SILVALLY_BUG] = sSilvallyFormChangeTable, [SPECIES_SILVALLY_DARK] = sSilvallyFormChangeTable, @@ -68,8 +80,29 @@ const struct FormChange *const gFormChangeTablePointers[NUM_SPECIES] = [SPECIES_SILVALLY_ROCK] = sSilvallyFormChangeTable, [SPECIES_SILVALLY_STEEL] = sSilvallyFormChangeTable, [SPECIES_SILVALLY_WATER] = sSilvallyFormChangeTable, + [SPECIES_MIMIKYU] = sMimikyuFormChangeTable, + [SPECIES_MIMIKYU_BUSTED] = sMimikyuFormChangeTable, + [SPECIES_MINIOR] = sMiniorRedFormChangeTable, + [SPECIES_MINIOR_CORE_RED] = sMiniorRedFormChangeTable, + [SPECIES_MINIOR_METEOR_BLUE] = sMiniorBlueFormChangeTable, + [SPECIES_MINIOR_CORE_BLUE] = sMiniorBlueFormChangeTable, + [SPECIES_MINIOR_METEOR_GREEN] = sMiniorGreenFormChangeTable, + [SPECIES_MINIOR_CORE_GREEN] = sMiniorGreenFormChangeTable, + [SPECIES_MINIOR_METEOR_INDIGO] = sMiniorIndigoFormChangeTable, + [SPECIES_MINIOR_CORE_INDIGO] = sMiniorIndigoFormChangeTable, + [SPECIES_MINIOR_METEOR_ORANGE] = sMiniorOrangeFormChangeTable, + [SPECIES_MINIOR_CORE_ORANGE] = sMiniorOrangeFormChangeTable, + [SPECIES_MINIOR_METEOR_VIOLET] = sMiniorVioletFormChangeTable, + [SPECIES_MINIOR_CORE_VIOLET] = sMiniorVioletFormChangeTable, + [SPECIES_MINIOR_METEOR_YELLOW] = sMiniorYellowFormChangeTable, + [SPECIES_MINIOR_CORE_YELLOW] = sMiniorYellowFormChangeTable, #endif #if P_GEN_8_POKEMON == TRUE + [SPECIES_CRAMORANT] = sCramorantFormChangeTable, + [SPECIES_CRAMORANT_GULPING] = sCramorantFormChangeTable, + [SPECIES_CRAMORANT_GORGING] = sCramorantFormChangeTable, + [SPECIES_MORPEKO] = sMorpekoFormChangeTable, + [SPECIES_MORPEKO_HANGRY] = sMorpekoFormChangeTable, [SPECIES_ZACIAN] = sZacianFormChangeTable, [SPECIES_ZACIAN_CROWNED_SWORD] = sZacianFormChangeTable, [SPECIES_ZAMAZENTA] = sZamazentaFormChangeTable, diff --git a/src/data/pokemon/form_change_tables.h b/src/data/pokemon/form_change_tables.h index 94da0add3636..551b7484d9d2 100644 --- a/src/data/pokemon/form_change_tables.h +++ b/src/data/pokemon/form_change_tables.h @@ -97,6 +97,22 @@ static const struct FormChange sArceusFormChangeTable[] = { #endif #if P_GEN_5_POKEMON == TRUE + +static const struct FormChange sDarmanitanFormChangeTable[] = { + {FORM_BATTLE_END, SPECIES_DARMANITAN}, + {FORM_CHANGE_END}, +}; + +static const struct FormChange sDarmanitanGalarianFormChangeTable[] = { + {FORM_BATTLE_END, SPECIES_DARMANITAN_GALARIAN}, + {FORM_CHANGE_END}, +}; + +static const struct FormChange sMeloettaFormChangeTable[] = { + {FORM_BATTLE_END, SPECIES_MELOETTA}, + {FORM_CHANGE_END}, +}; + static const struct FormChange sTornadusFormChangeTable[] = { {FORM_ITEM_USE, SPECIES_TORNADUS_THERIAN, ITEM_REVEAL_GLASS}, {FORM_ITEM_USE, SPECIES_TORNADUS, ITEM_REVEAL_GLASS}, @@ -132,6 +148,16 @@ static const struct FormChange sGenesectFormChangeTable[] = { #endif #if P_GEN_6_POKEMON == TRUE +static const struct FormChange sGreninjaBattleBondFormChangeTable[] = { + {FORM_BATTLE_END, SPECIES_GRENINJA_BATTLE_BOND}, + {FORM_CHANGE_END}, +}; + +static const struct FormChange sAegislashFormChangeTable[] = { + {FORM_BATTLE_END, SPECIES_AEGISLASH}, + {FORM_CHANGE_END}, +}; + static const struct FormChange sXerneasFormChangeTable[] = { {FORM_BATTLE_BEGIN, SPECIES_XERNEAS_ACTIVE}, {FORM_BATTLE_END, SPECIES_XERNEAS, }, @@ -153,6 +179,10 @@ static const struct FormChange sOricorioFormChangeTable[] = { {FORM_ITEM_USE, SPECIES_ORICORIO_SENSU, ITEM_PURPLE_NECTAR}, {FORM_CHANGE_END}, }; +static const struct FormChange sWishiwashiFormChangeTable[] = { + {FORM_BATTLE_END, SPECIES_WISHIWASHI}, + {FORM_CHANGE_END}, +}; static const struct FormChange sSilvallyFormChangeTable[] = { {FORM_ITEM_HOLD, SPECIES_SILVALLY, ITEM_NONE, ABILITY_RKS_SYSTEM}, @@ -175,9 +205,54 @@ static const struct FormChange sSilvallyFormChangeTable[] = { {FORM_ITEM_HOLD, SPECIES_SILVALLY_FAIRY, ITEM_FAIRY_MEMORY, ABILITY_RKS_SYSTEM}, {FORM_CHANGE_END}, }; + +static const struct FormChange sMimikyuFormChangeTable[] = { + {FORM_BATTLE_END, SPECIES_MIMIKYU}, + {FORM_CHANGE_END}, +}; + +static const struct FormChange sMiniorRedFormChangeTable[] = { + {FORM_BATTLE_END, SPECIES_MINIOR_CORE_RED}, + {FORM_CHANGE_END}, +}; +static const struct FormChange sMiniorBlueFormChangeTable[] = { + {FORM_BATTLE_END, SPECIES_MINIOR_CORE_BLUE}, + {FORM_CHANGE_END}, +}; +static const struct FormChange sMiniorGreenFormChangeTable[] = { + {FORM_BATTLE_END, SPECIES_MINIOR_CORE_GREEN}, + {FORM_CHANGE_END}, +}; +static const struct FormChange sMiniorIndigoFormChangeTable[] = { + {FORM_BATTLE_END, SPECIES_MINIOR_CORE_INDIGO}, + {FORM_CHANGE_END}, +}; +static const struct FormChange sMiniorOrangeFormChangeTable[] = { + {FORM_BATTLE_END, SPECIES_MINIOR_CORE_ORANGE}, + {FORM_CHANGE_END}, +}; +static const struct FormChange sMiniorVioletFormChangeTable[] = { + {FORM_BATTLE_END, SPECIES_MINIOR_CORE_VIOLET}, + {FORM_CHANGE_END}, +}; +static const struct FormChange sMiniorYellowFormChangeTable[] = { + {FORM_BATTLE_END, SPECIES_MINIOR_CORE_YELLOW}, + {FORM_CHANGE_END}, +}; + #endif #if P_GEN_8_POKEMON == TRUE +static const struct FormChange sCramorantFormChangeTable[] = { + {FORM_BATTLE_END, SPECIES_CRAMORANT}, + {FORM_CHANGE_END}, +}; + +static const struct FormChange sMorpekoFormChangeTable[] = { + {FORM_BATTLE_END, SPECIES_MORPEKO}, + {FORM_CHANGE_END}, +}; + static const struct FormChange sZacianFormChangeTable[] = { {FORM_BATTLE_BEGIN, SPECIES_ZACIAN_CROWNED_SWORD, ITEM_RUSTED_SWORD, MOVE_IRON_HEAD, MOVE_BEHEMOTH_BLADE}, {FORM_BATTLE_END, SPECIES_ZACIAN, ITEM_RUSTED_SWORD, MOVE_BEHEMOTH_BLADE, MOVE_IRON_HEAD}, diff --git a/src/pokemon.c b/src/pokemon.c index 98ac99256007..1a748fb24a0c 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -4096,6 +4096,17 @@ void SetMonMoveSlot(struct Pokemon *mon, u16 move, u8 slot) SetMonData(mon, MON_DATA_PP1 + slot, &gBattleMoves[move].pp); } +static void SetMonMoveSlot_KeepPP(struct Pokemon *mon, u16 move, u8 slot) +{ + u8 ppBonuses = GetMonData(mon, MON_DATA_PP_BONUSES, NULL); + u8 currPP = GetMonData(mon, MON_DATA_PP1 + slot, NULL); + u8 newPP = CalculatePPWithBonus(move, ppBonuses, slot); + u8 finalPP = min(currPP, newPP); + + SetMonData(mon, MON_DATA_MOVE1 + slot, &move); + SetMonData(mon, MON_DATA_PP1 + slot, &finalPP); +} + void SetBattleMonMoveSlot(struct BattlePokemon *mon, u16 move, u8 slot) { mon->moves[slot] = move; @@ -8474,20 +8485,21 @@ bool32 ShouldShowFemaleDifferences(u16 species, u32 personality) return (gBaseStats[species].flags & SPECIES_FLAG_GENDER_DIFFERENCE) && GetGenderFromSpeciesAndPersonality(species, personality) == MON_FEMALE; } -void TryToSetBattleFormChangeMoves(struct Pokemon *mon) +void TryToSetBattleFormChangeMoves(struct Pokemon *mon, u16 method) { int i, j; u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL); const struct FormChange *formChanges = gFormChangeTablePointers[species]; - u8 ppBonuses = GetMonData(mon, MON_DATA_PP_BONUSES, NULL); - if (formChanges == NULL) + if (formChanges == NULL || (method != FORM_BATTLE_BEGIN && method != FORM_BATTLE_END)) return; for (i = 0; formChanges[i].method != FORM_CHANGE_END; i++) { - if ((formChanges[i].method == FORM_BATTLE_BEGIN || formChanges[i].method == FORM_BATTLE_END) - && formChanges[i].param2 && formChanges[i].param3 && formChanges[i].targetSpecies == species) + if (formChanges[i].method == method + && formChanges[i].param2 + && formChanges[i].param3 + && formChanges[i].targetSpecies != species) { u16 originalMove = formChanges[i].param2; u16 newMove = formChanges[i].param3; @@ -8495,20 +8507,9 @@ void TryToSetBattleFormChangeMoves(struct Pokemon *mon) for (j = 0; j < MAX_MON_MOVES; j++) { u16 currMove = GetMonData(mon, MON_DATA_MOVE1 + j, NULL); - u8 totalPp = gBattleMoves[currMove].pp; // Get current move's max PP - u8 currPp = GetMonData(mon, MON_DATA_PP1 + j, NULL); // Get current move's remaining PP - u8 diffPp = totalPp - currPp; // Current move's PP difference - u8 finalPp = gBattleMoves[newMove].pp - diffPp; // Apply the PP difference to the new move - if (currMove == originalMove) - { - if (finalPp > gBattleMoves[newMove].pp) - finalPp = 0; - SetMonMoveSlot(mon, newMove, j); - SetMonData(mon, MON_DATA_PP1 + j, &finalPp); - } + SetMonMoveSlot_KeepPP(mon, newMove, j); } - SetMonData(mon, MON_DATA_PP_BONUSES, &ppBonuses); break; } } From ff494edb85ce17bec2b1ecb2163305b195678566 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Thu, 20 Oct 2022 16:57:34 -0300 Subject: [PATCH 003/428] Refactored ItemUseOutOfBattle_FormChange to not use secondaryId --- src/data/items.h | 27 ++++++++------------------- src/party_menu.c | 2 +- 2 files changed, 9 insertions(+), 20 deletions(-) diff --git a/src/data/items.h b/src/data/items.h index b0b53c31f545..78d2e72aba40 100644 --- a/src/data/items.h +++ b/src/data/items.h @@ -3193,7 +3193,6 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_FormChange_ConsumedOnUse, - .secondaryId = FORM_ITEM_USE, .flingPower = 10, }, @@ -3207,7 +3206,6 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_FormChange_ConsumedOnUse, - .secondaryId = FORM_ITEM_USE, .flingPower = 10, }, @@ -3221,7 +3219,6 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_FormChange_ConsumedOnUse, - .secondaryId = FORM_ITEM_USE, .flingPower = 10, }, @@ -3235,7 +3232,6 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_FormChange_ConsumedOnUse, - .secondaryId = FORM_ITEM_USE, .flingPower = 10, }, @@ -9071,7 +9067,6 @@ const struct Item gItems[] = .pocket = POCKET_KEY_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_FormChange, - .secondaryId = FORM_ITEM_USE, }, [ITEM_REVEAL_GLASS] = @@ -9083,7 +9078,6 @@ const struct Item gItems[] = .pocket = POCKET_KEY_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_FormChange, - .secondaryId = FORM_ITEM_USE, }, [ITEM_DNA_SPLICERS] = @@ -9093,9 +9087,8 @@ const struct Item gItems[] = .price = 0, .description = sDNASplicersDesc, .pocket = POCKET_KEY_ITEMS, - .type = ITEM_USE_PARTY_MENU, - .fieldUseFunc = ItemUseOutOfBattle_FormChange, - .secondaryId = FORM_ITEM_USE, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo: ItemUseOutOfBattle_FormChange_Fusion }, [ITEM_ZYGARDE_CUBE] = @@ -9119,7 +9112,6 @@ const struct Item gItems[] = .pocket = POCKET_KEY_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_FormChange, - .secondaryId = FORM_ITEM_USE, }, [ITEM_N_SOLARIZER] = @@ -9129,9 +9121,8 @@ const struct Item gItems[] = .price = 0, .description = sNSolarizerDesc, .pocket = POCKET_KEY_ITEMS, - .type = ITEM_USE_PARTY_MENU, - .fieldUseFunc = ItemUseOutOfBattle_FormChange, - .secondaryId = FORM_ITEM_USE, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo: ItemUseOutOfBattle_FormChange_Fusion }, [ITEM_N_LUNARIZER] = @@ -9141,9 +9132,8 @@ const struct Item gItems[] = .price = 0, .description = sNLunarizerDesc, .pocket = POCKET_KEY_ITEMS, - .type = ITEM_USE_PARTY_MENU, - .fieldUseFunc = ItemUseOutOfBattle_FormChange, - .secondaryId = FORM_ITEM_USE, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo: ItemUseOutOfBattle_FormChange_Fusion }, [ITEM_REINS_OF_UNITY] = @@ -9153,9 +9143,8 @@ const struct Item gItems[] = .price = 0, .description = sReinsOfUnityDesc, .pocket = POCKET_KEY_ITEMS, - .type = ITEM_USE_PARTY_MENU, - .fieldUseFunc = ItemUseOutOfBattle_FormChange, - .secondaryId = FORM_ITEM_USE, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo: ItemUseOutOfBattle_FormChange_Fusion }, // Battle Mechanic Key Items diff --git a/src/party_menu.c b/src/party_menu.c index eaeadabab04f..3c8b163c54b4 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -5591,7 +5591,7 @@ static void Task_TryItemUseFormChange(u8 taskId) bool32 TryItemUseFormChange(u8 taskId, TaskFunc task) { struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId]; - u16 targetSpecies = GetFormChangeTargetSpecies(mon, ItemId_GetSecondaryId(gSpecialVar_ItemId), gSpecialVar_ItemId); + u16 targetSpecies = GetFormChangeTargetSpecies(mon, FORM_ITEM_USE, gSpecialVar_ItemId); if (targetSpecies != SPECIES_NONE) { From b74f0777daf19a01fa4892000bab55a6f6285403 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Thu, 20 Oct 2022 17:22:58 -0300 Subject: [PATCH 004/428] Renamed form change constants --- include/constants/pokemon.h | 14 +- src/battle_main.c | 6 +- src/battle_script_commands.c | 4 +- src/data/pokemon/form_change_tables.h | 216 +++++++++++++------------- src/daycare.c | 2 +- src/party_menu.c | 4 +- src/pokemon.c | 12 +- src/pokemon_storage_system.c | 2 +- src/script_pokemon_util.c | 2 +- 9 files changed, 131 insertions(+), 131 deletions(-) diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h index 5167f5f55f08..cacbdc55c03b 100644 --- a/include/constants/pokemon.h +++ b/include/constants/pokemon.h @@ -317,13 +317,13 @@ #define EVO_MODE_OVERWORLD_SPECIAL 5 // Form change types -#define FORM_CHANGE_END 0 -#define FORM_ITEM_HOLD 1 -#define FORM_ITEM_USE 2 -#define FORM_MOVE 3 -#define FORM_WITHDRAW 4 -#define FORM_BATTLE_BEGIN 5 -#define FORM_BATTLE_END 6 +#define FORM_CHANGE_END 0 +#define FORM_CHANGE_ITEM_HOLD 1 +#define FORM_CHANGE_ITEM_USE 2 +#define FORM_CHANGE_MOVE 3 +#define FORM_CHANGE_WITHDRAW 4 +#define FORM_CHANGE_BATTLE_BEGIN 5 +#define FORM_CHANGE_BATTLE_END 6 #define MON_PIC_WIDTH 64 #define MON_PIC_HEIGHT 64 diff --git a/src/battle_main.c b/src/battle_main.c index 9d75e901c02a..8a3cbcfcdb3b 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -602,9 +602,9 @@ static void CB2_InitBattleInternal(void) for (i = 0; i < PARTY_SIZE; i++) { // Player's side - BattleFormChange(i, B_SIDE_PLAYER, FORM_BATTLE_BEGIN); + BattleFormChange(i, B_SIDE_PLAYER, FORM_CHANGE_BATTLE_BEGIN); // Opponent's side - BattleFormChange(i, B_SIDE_OPPONENT, FORM_BATTLE_BEGIN); + BattleFormChange(i, B_SIDE_OPPONENT, FORM_CHANGE_BATTLE_BEGIN); } gBattleCommunication[MULTIUSE_STATE] = 0; @@ -5207,7 +5207,7 @@ static void HandleEndTurn_FinishBattle(void) for (i = 0; i < PARTY_SIZE; i++) { UndoMegaEvolution(i); - BattleFormChange(i, B_SIDE_PLAYER, FORM_BATTLE_END); + BattleFormChange(i, B_SIDE_PLAYER, FORM_CHANGE_BATTLE_END); DoBurmyFormChange(i); } #if B_RECALCULATE_STATS >= GEN_5 diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index bfc9bfc42f4d..060a9e7170da 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -14109,7 +14109,7 @@ static void Cmd_handleballthrow(void) { BtlController_EmitBallThrowAnim(BUFFER_A, BALL_3_SHAKES_SUCCESS); MarkBattlerForControllerExec(gActiveBattler); - BattleFormChange(gBattlerPartyIndexes[gBattlerTarget], GET_BATTLER_SIDE(gBattlerTarget), FORM_BATTLE_END), + BattleFormChange(gBattlerPartyIndexes[gBattlerTarget], GET_BATTLER_SIDE(gBattlerTarget), FORM_CHANGE_BATTLE_END), gBattlescriptCurrInstr = BattleScript_SuccessBallThrow; SetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_POKEBALL, &gLastUsedItem); @@ -14163,7 +14163,7 @@ static void Cmd_handleballthrow(void) if (IsCriticalCapture()) gBattleSpritesDataPtr->animationData->criticalCaptureSuccess = TRUE; - BattleFormChange(gBattlerPartyIndexes[gBattlerTarget], GET_BATTLER_SIDE(gBattlerTarget), FORM_BATTLE_END), + BattleFormChange(gBattlerPartyIndexes[gBattlerTarget], GET_BATTLER_SIDE(gBattlerTarget), FORM_CHANGE_BATTLE_END), gBattlescriptCurrInstr = BattleScript_SuccessBallThrow; SetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_POKEBALL, &gLastUsedItem); diff --git a/src/data/pokemon/form_change_tables.h b/src/data/pokemon/form_change_tables.h index 551b7484d9d2..1f2e926bb3c0 100644 --- a/src/data/pokemon/form_change_tables.h +++ b/src/data/pokemon/form_change_tables.h @@ -1,97 +1,97 @@ /* -FORM_ITEM_HOLD: +FORM_CHANGE_ITEM_HOLD: Form change activates when the specified item is given to or taken from the selected Pokémon. Alternatively, form change activates when the specified item is is given to or taken from the selected Pokémon that has a particular ability. param1 = item to hold param2 = ability to check for, optional -FORM_ITEM_USE: +FORM_CHANGE_ITEM_USE: Form change activates when the item is used on the selected Pokémon. param1 = item to use param2 = DAY if form change activates in the daytime, optional NIGHT if form change activates at nighttime, optional -FORM_MOVE: +FORM_CHANGE_MOVE: Form change activates when the Pokémon learns or forgets the move. param1 = move to check for param2 = WHEN_LEARNED if form change activates when move is forgotten WHEN_FORGOTTEN if form change activates when move is learned -FORM_WITHDRAW: +FORM_CHANGE_WITHDRAW: Form change activates when the Pokémon is withdrawn from the PC or Daycare. no parameters -FORM_BATTLE_BEGIN: +FORM_CHANGE_BATTLE_BEGIN: Form change activates when the Pokémon is sent out at the beginning of a battle param1 = item to hold, optional param2 = a move that will be replaced, optional param3 = a new move to replace it with, optional -FORM_BATTLE_END: +FORM_CHANGE_BATTLE_END: Form change activates at the end of a battle param1 = item to hold, optional param2 = a move that will be replaced, optional param3 = a new move to replace it with, optional */ -// FORM_MOVE param2 Arguments +// FORM_CHANGE_MOVE param2 Arguments #define WHEN_LEARNED 0 #define WHEN_FORGOTTEN 1 -// FORM_ITEM_USE param2 Arguments +// FORM_CHANGE_ITEM_USE param2 Arguments #define DAY 1 #define NIGHT 2 #if P_GEN_4_POKEMON == TRUE static const struct FormChange sGiratinaFormChangeTable[] = { - {FORM_ITEM_HOLD, SPECIES_GIRATINA, ITEM_NONE}, - {FORM_ITEM_HOLD, SPECIES_GIRATINA_ORIGIN, ITEM_GRISEOUS_ORB}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_GIRATINA, ITEM_NONE}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_GIRATINA_ORIGIN, ITEM_GRISEOUS_ORB}, {FORM_CHANGE_END}, }; static const struct FormChange sShayminFormChangeTable[] = { - {FORM_ITEM_USE, SPECIES_SHAYMIN_SKY, ITEM_GRACIDEA, DAY}, - // {FORM_WITHDRAW, SPECIES_SHAYMIN}, + {FORM_CHANGE_ITEM_USE, SPECIES_SHAYMIN_SKY, ITEM_GRACIDEA, DAY}, + // {FORM_CHANGE_WITHDRAW, SPECIES_SHAYMIN}, {FORM_CHANGE_END}, }; static const struct FormChange sArceusFormChangeTable[] = { - {FORM_ITEM_HOLD, SPECIES_ARCEUS, ITEM_NONE, ABILITY_MULTITYPE}, - {FORM_ITEM_HOLD, SPECIES_ARCEUS_FIGHTING, ITEM_FIST_PLATE, ABILITY_MULTITYPE}, - {FORM_ITEM_HOLD, SPECIES_ARCEUS_FIGHTING, ITEM_FIGHTINIUM_Z, ABILITY_MULTITYPE}, - {FORM_ITEM_HOLD, SPECIES_ARCEUS_FLYING, ITEM_SKY_PLATE, ABILITY_MULTITYPE}, - {FORM_ITEM_HOLD, SPECIES_ARCEUS_FLYING, ITEM_FLYINIUM_Z, ABILITY_MULTITYPE}, - {FORM_ITEM_HOLD, SPECIES_ARCEUS_POISON, ITEM_TOXIC_PLATE, ABILITY_MULTITYPE}, - {FORM_ITEM_HOLD, SPECIES_ARCEUS_POISON, ITEM_POISONIUM_Z, ABILITY_MULTITYPE}, - {FORM_ITEM_HOLD, SPECIES_ARCEUS_ROCK, ITEM_STONE_PLATE, ABILITY_MULTITYPE}, - {FORM_ITEM_HOLD, SPECIES_ARCEUS_ROCK, ITEM_ROCKIUM_Z, ABILITY_MULTITYPE}, - {FORM_ITEM_HOLD, SPECIES_ARCEUS_GROUND, ITEM_EARTH_PLATE, ABILITY_MULTITYPE}, - {FORM_ITEM_HOLD, SPECIES_ARCEUS_GROUND, ITEM_GROUNDIUM_Z, ABILITY_MULTITYPE}, - {FORM_ITEM_HOLD, SPECIES_ARCEUS_BUG, ITEM_INSECT_PLATE, ABILITY_MULTITYPE}, - {FORM_ITEM_HOLD, SPECIES_ARCEUS_BUG, ITEM_BUGINIUM_Z, ABILITY_MULTITYPE}, - {FORM_ITEM_HOLD, SPECIES_ARCEUS_GHOST, ITEM_SPOOKY_PLATE, ABILITY_MULTITYPE}, - {FORM_ITEM_HOLD, SPECIES_ARCEUS_GHOST, ITEM_GHOSTIUM_Z, ABILITY_MULTITYPE}, - {FORM_ITEM_HOLD, SPECIES_ARCEUS_STEEL, ITEM_IRON_PLATE, ABILITY_MULTITYPE}, - {FORM_ITEM_HOLD, SPECIES_ARCEUS_STEEL, ITEM_STEELIUM_Z, ABILITY_MULTITYPE}, - {FORM_ITEM_HOLD, SPECIES_ARCEUS_FIRE, ITEM_FLAME_PLATE, ABILITY_MULTITYPE}, - {FORM_ITEM_HOLD, SPECIES_ARCEUS_FIRE, ITEM_FIRIUM_Z, ABILITY_MULTITYPE}, - {FORM_ITEM_HOLD, SPECIES_ARCEUS_WATER, ITEM_SPLASH_PLATE, ABILITY_MULTITYPE}, - {FORM_ITEM_HOLD, SPECIES_ARCEUS_WATER, ITEM_WATERIUM_Z, ABILITY_MULTITYPE}, - {FORM_ITEM_HOLD, SPECIES_ARCEUS_GRASS, ITEM_MEADOW_PLATE, ABILITY_MULTITYPE}, - {FORM_ITEM_HOLD, SPECIES_ARCEUS_GRASS, ITEM_GRASSIUM_Z, ABILITY_MULTITYPE}, - {FORM_ITEM_HOLD, SPECIES_ARCEUS_ELECTRIC, ITEM_ZAP_PLATE, ABILITY_MULTITYPE}, - {FORM_ITEM_HOLD, SPECIES_ARCEUS_ELECTRIC, ITEM_ELECTRIUM_Z, ABILITY_MULTITYPE}, - {FORM_ITEM_HOLD, SPECIES_ARCEUS_PSYCHIC, ITEM_MIND_PLATE, ABILITY_MULTITYPE}, - {FORM_ITEM_HOLD, SPECIES_ARCEUS_PSYCHIC, ITEM_PSYCHIUM_Z, ABILITY_MULTITYPE}, - {FORM_ITEM_HOLD, SPECIES_ARCEUS_ICE, ITEM_ICICLE_PLATE, ABILITY_MULTITYPE}, - {FORM_ITEM_HOLD, SPECIES_ARCEUS_ICE, ITEM_ICIUM_Z, ABILITY_MULTITYPE}, - {FORM_ITEM_HOLD, SPECIES_ARCEUS_DRAGON, ITEM_DRACO_PLATE, ABILITY_MULTITYPE}, - {FORM_ITEM_HOLD, SPECIES_ARCEUS_DRAGON, ITEM_DRAGONIUM_Z, ABILITY_MULTITYPE}, - {FORM_ITEM_HOLD, SPECIES_ARCEUS_DARK, ITEM_DREAD_PLATE, ABILITY_MULTITYPE}, - {FORM_ITEM_HOLD, SPECIES_ARCEUS_DARK, ITEM_DARKINIUM_Z, ABILITY_MULTITYPE}, - {FORM_ITEM_HOLD, SPECIES_ARCEUS_FAIRY, ITEM_PIXIE_PLATE, ABILITY_MULTITYPE}, - {FORM_ITEM_HOLD, SPECIES_ARCEUS_FAIRY, ITEM_FAIRIUM_Z, ABILITY_MULTITYPE}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS, ITEM_NONE, ABILITY_MULTITYPE}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_FIGHTING, ITEM_FIST_PLATE, ABILITY_MULTITYPE}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_FIGHTING, ITEM_FIGHTINIUM_Z, ABILITY_MULTITYPE}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_FLYING, ITEM_SKY_PLATE, ABILITY_MULTITYPE}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_FLYING, ITEM_FLYINIUM_Z, ABILITY_MULTITYPE}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_POISON, ITEM_TOXIC_PLATE, ABILITY_MULTITYPE}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_POISON, ITEM_POISONIUM_Z, ABILITY_MULTITYPE}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_ROCK, ITEM_STONE_PLATE, ABILITY_MULTITYPE}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_ROCK, ITEM_ROCKIUM_Z, ABILITY_MULTITYPE}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_GROUND, ITEM_EARTH_PLATE, ABILITY_MULTITYPE}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_GROUND, ITEM_GROUNDIUM_Z, ABILITY_MULTITYPE}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_BUG, ITEM_INSECT_PLATE, ABILITY_MULTITYPE}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_BUG, ITEM_BUGINIUM_Z, ABILITY_MULTITYPE}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_GHOST, ITEM_SPOOKY_PLATE, ABILITY_MULTITYPE}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_GHOST, ITEM_GHOSTIUM_Z, ABILITY_MULTITYPE}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_STEEL, ITEM_IRON_PLATE, ABILITY_MULTITYPE}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_STEEL, ITEM_STEELIUM_Z, ABILITY_MULTITYPE}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_FIRE, ITEM_FLAME_PLATE, ABILITY_MULTITYPE}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_FIRE, ITEM_FIRIUM_Z, ABILITY_MULTITYPE}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_WATER, ITEM_SPLASH_PLATE, ABILITY_MULTITYPE}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_WATER, ITEM_WATERIUM_Z, ABILITY_MULTITYPE}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_GRASS, ITEM_MEADOW_PLATE, ABILITY_MULTITYPE}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_GRASS, ITEM_GRASSIUM_Z, ABILITY_MULTITYPE}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_ELECTRIC, ITEM_ZAP_PLATE, ABILITY_MULTITYPE}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_ELECTRIC, ITEM_ELECTRIUM_Z, ABILITY_MULTITYPE}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_PSYCHIC, ITEM_MIND_PLATE, ABILITY_MULTITYPE}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_PSYCHIC, ITEM_PSYCHIUM_Z, ABILITY_MULTITYPE}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_ICE, ITEM_ICICLE_PLATE, ABILITY_MULTITYPE}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_ICE, ITEM_ICIUM_Z, ABILITY_MULTITYPE}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_DRAGON, ITEM_DRACO_PLATE, ABILITY_MULTITYPE}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_DRAGON, ITEM_DRAGONIUM_Z, ABILITY_MULTITYPE}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_DARK, ITEM_DREAD_PLATE, ABILITY_MULTITYPE}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_DARK, ITEM_DARKINIUM_Z, ABILITY_MULTITYPE}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_FAIRY, ITEM_PIXIE_PLATE, ABILITY_MULTITYPE}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_FAIRY, ITEM_FAIRIUM_Z, ABILITY_MULTITYPE}, {FORM_CHANGE_END}, }; #endif @@ -99,144 +99,144 @@ static const struct FormChange sArceusFormChangeTable[] = { #if P_GEN_5_POKEMON == TRUE static const struct FormChange sDarmanitanFormChangeTable[] = { - {FORM_BATTLE_END, SPECIES_DARMANITAN}, + {FORM_CHANGE_BATTLE_END, SPECIES_DARMANITAN}, {FORM_CHANGE_END}, }; static const struct FormChange sDarmanitanGalarianFormChangeTable[] = { - {FORM_BATTLE_END, SPECIES_DARMANITAN_GALARIAN}, + {FORM_CHANGE_BATTLE_END, SPECIES_DARMANITAN_GALARIAN}, {FORM_CHANGE_END}, }; static const struct FormChange sMeloettaFormChangeTable[] = { - {FORM_BATTLE_END, SPECIES_MELOETTA}, + {FORM_CHANGE_BATTLE_END, SPECIES_MELOETTA}, {FORM_CHANGE_END}, }; static const struct FormChange sTornadusFormChangeTable[] = { - {FORM_ITEM_USE, SPECIES_TORNADUS_THERIAN, ITEM_REVEAL_GLASS}, - {FORM_ITEM_USE, SPECIES_TORNADUS, ITEM_REVEAL_GLASS}, + {FORM_CHANGE_ITEM_USE, SPECIES_TORNADUS_THERIAN, ITEM_REVEAL_GLASS}, + {FORM_CHANGE_ITEM_USE, SPECIES_TORNADUS, ITEM_REVEAL_GLASS}, {FORM_CHANGE_END}, }; static const struct FormChange sThundurusFormChangeTable[] = { - {FORM_ITEM_USE, SPECIES_THUNDURUS_THERIAN, ITEM_REVEAL_GLASS}, - {FORM_ITEM_USE, SPECIES_THUNDURUS, ITEM_REVEAL_GLASS}, + {FORM_CHANGE_ITEM_USE, SPECIES_THUNDURUS_THERIAN, ITEM_REVEAL_GLASS}, + {FORM_CHANGE_ITEM_USE, SPECIES_THUNDURUS, ITEM_REVEAL_GLASS}, {FORM_CHANGE_END}, }; static const struct FormChange sLandorusFormChangeTable[] = { - {FORM_ITEM_USE, SPECIES_LANDORUS_THERIAN, ITEM_REVEAL_GLASS}, - {FORM_ITEM_USE, SPECIES_LANDORUS, ITEM_REVEAL_GLASS}, + {FORM_CHANGE_ITEM_USE, SPECIES_LANDORUS_THERIAN, ITEM_REVEAL_GLASS}, + {FORM_CHANGE_ITEM_USE, SPECIES_LANDORUS, ITEM_REVEAL_GLASS}, {FORM_CHANGE_END}, }; static const struct FormChange sKeldeoFormChangeTable[] = { - // {FORM_MOVE, SPECIES_KELDEO_RESOLUTE, MOVE_SECRET_SWORD, WHEN_LEARNED}, - // {FORM_MOVE, SPECIES_KELDEO, MOVE_SECRET_SWORD, WHEN_FORGOTTEN}, + // {FORM_CHANGE_MOVE, SPECIES_KELDEO_RESOLUTE, MOVE_SECRET_SWORD, WHEN_LEARNED}, + // {FORM_CHANGE_MOVE, SPECIES_KELDEO, MOVE_SECRET_SWORD, WHEN_FORGOTTEN}, {FORM_CHANGE_END}, }; static const struct FormChange sGenesectFormChangeTable[] = { - {FORM_ITEM_HOLD, SPECIES_GENESECT, ITEM_NONE}, - {FORM_ITEM_HOLD, SPECIES_GENESECT_DOUSE_DRIVE, ITEM_DOUSE_DRIVE}, - {FORM_ITEM_HOLD, SPECIES_GENESECT_SHOCK_DRIVE, ITEM_SHOCK_DRIVE}, - {FORM_ITEM_HOLD, SPECIES_GENESECT_BURN_DRIVE, ITEM_BURN_DRIVE}, - {FORM_ITEM_HOLD, SPECIES_GENESECT_CHILL_DRIVE, ITEM_CHILL_DRIVE}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_GENESECT, ITEM_NONE}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_GENESECT_DOUSE_DRIVE, ITEM_DOUSE_DRIVE}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_GENESECT_SHOCK_DRIVE, ITEM_SHOCK_DRIVE}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_GENESECT_BURN_DRIVE, ITEM_BURN_DRIVE}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_GENESECT_CHILL_DRIVE, ITEM_CHILL_DRIVE}, {FORM_CHANGE_END}, }; #endif #if P_GEN_6_POKEMON == TRUE static const struct FormChange sGreninjaBattleBondFormChangeTable[] = { - {FORM_BATTLE_END, SPECIES_GRENINJA_BATTLE_BOND}, + {FORM_CHANGE_BATTLE_END, SPECIES_GRENINJA_BATTLE_BOND}, {FORM_CHANGE_END}, }; static const struct FormChange sAegislashFormChangeTable[] = { - {FORM_BATTLE_END, SPECIES_AEGISLASH}, + {FORM_CHANGE_BATTLE_END, SPECIES_AEGISLASH}, {FORM_CHANGE_END}, }; static const struct FormChange sXerneasFormChangeTable[] = { - {FORM_BATTLE_BEGIN, SPECIES_XERNEAS_ACTIVE}, - {FORM_BATTLE_END, SPECIES_XERNEAS, }, + {FORM_CHANGE_BATTLE_BEGIN, SPECIES_XERNEAS_ACTIVE}, + {FORM_CHANGE_BATTLE_END, SPECIES_XERNEAS, }, {FORM_CHANGE_END}, }; static const struct FormChange sHoopaFormChangeTable[] = { - {FORM_ITEM_USE, SPECIES_HOOPA_UNBOUND, ITEM_PRISON_BOTTLE, SPECIES_HOOPA}, - // {FORM_WITHDRAW, SPECIES_HOOPA}, + {FORM_CHANGE_ITEM_USE, SPECIES_HOOPA_UNBOUND, ITEM_PRISON_BOTTLE, SPECIES_HOOPA}, + // {FORM_CHANGE_WITHDRAW, SPECIES_HOOPA}, {FORM_CHANGE_END}, }; #endif #if P_GEN_7_POKEMON == TRUE static const struct FormChange sOricorioFormChangeTable[] = { - {FORM_ITEM_USE, SPECIES_ORICORIO, ITEM_RED_NECTAR}, - {FORM_ITEM_USE, SPECIES_ORICORIO_POM_POM, ITEM_YELLOW_NECTAR}, - {FORM_ITEM_USE, SPECIES_ORICORIO_PAU, ITEM_PINK_NECTAR}, - {FORM_ITEM_USE, SPECIES_ORICORIO_SENSU, ITEM_PURPLE_NECTAR}, + {FORM_CHANGE_ITEM_USE, SPECIES_ORICORIO, ITEM_RED_NECTAR}, + {FORM_CHANGE_ITEM_USE, SPECIES_ORICORIO_POM_POM, ITEM_YELLOW_NECTAR}, + {FORM_CHANGE_ITEM_USE, SPECIES_ORICORIO_PAU, ITEM_PINK_NECTAR}, + {FORM_CHANGE_ITEM_USE, SPECIES_ORICORIO_SENSU, ITEM_PURPLE_NECTAR}, {FORM_CHANGE_END}, }; static const struct FormChange sWishiwashiFormChangeTable[] = { - {FORM_BATTLE_END, SPECIES_WISHIWASHI}, + {FORM_CHANGE_BATTLE_END, SPECIES_WISHIWASHI}, {FORM_CHANGE_END}, }; static const struct FormChange sSilvallyFormChangeTable[] = { - {FORM_ITEM_HOLD, SPECIES_SILVALLY, ITEM_NONE, ABILITY_RKS_SYSTEM}, - {FORM_ITEM_HOLD, SPECIES_SILVALLY_FIGHTING, ITEM_FIGHTING_MEMORY, ABILITY_RKS_SYSTEM}, - {FORM_ITEM_HOLD, SPECIES_SILVALLY_FLYING, ITEM_FLYING_MEMORY, ABILITY_RKS_SYSTEM}, - {FORM_ITEM_HOLD, SPECIES_SILVALLY_POISON, ITEM_POISON_MEMORY, ABILITY_RKS_SYSTEM}, - {FORM_ITEM_HOLD, SPECIES_SILVALLY_GROUND, ITEM_GROUND_MEMORY, ABILITY_RKS_SYSTEM}, - {FORM_ITEM_HOLD, SPECIES_SILVALLY_ROCK, ITEM_ROCK_MEMORY, ABILITY_RKS_SYSTEM}, - {FORM_ITEM_HOLD, SPECIES_SILVALLY_BUG, ITEM_BUG_MEMORY, ABILITY_RKS_SYSTEM}, - {FORM_ITEM_HOLD, SPECIES_SILVALLY_GHOST, ITEM_GHOST_MEMORY, ABILITY_RKS_SYSTEM}, - {FORM_ITEM_HOLD, SPECIES_SILVALLY_STEEL, ITEM_STEEL_MEMORY, ABILITY_RKS_SYSTEM}, - {FORM_ITEM_HOLD, SPECIES_SILVALLY_FIRE, ITEM_FIRE_MEMORY, ABILITY_RKS_SYSTEM}, - {FORM_ITEM_HOLD, SPECIES_SILVALLY_WATER, ITEM_WATER_MEMORY, ABILITY_RKS_SYSTEM}, - {FORM_ITEM_HOLD, SPECIES_SILVALLY_GRASS, ITEM_GRASS_MEMORY, ABILITY_RKS_SYSTEM}, - {FORM_ITEM_HOLD, SPECIES_SILVALLY_ELECTRIC, ITEM_ELECTRIC_MEMORY, ABILITY_RKS_SYSTEM}, - {FORM_ITEM_HOLD, SPECIES_SILVALLY_PSYCHIC, ITEM_PSYCHIC_MEMORY, ABILITY_RKS_SYSTEM}, - {FORM_ITEM_HOLD, SPECIES_SILVALLY_ICE, ITEM_ICE_MEMORY, ABILITY_RKS_SYSTEM}, - {FORM_ITEM_HOLD, SPECIES_SILVALLY_DRAGON, ITEM_DRAGON_MEMORY, ABILITY_RKS_SYSTEM}, - {FORM_ITEM_HOLD, SPECIES_SILVALLY_DARK, ITEM_DARK_MEMORY, ABILITY_RKS_SYSTEM}, - {FORM_ITEM_HOLD, SPECIES_SILVALLY_FAIRY, ITEM_FAIRY_MEMORY, ABILITY_RKS_SYSTEM}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_SILVALLY, ITEM_NONE, ABILITY_RKS_SYSTEM}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_SILVALLY_FIGHTING, ITEM_FIGHTING_MEMORY, ABILITY_RKS_SYSTEM}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_SILVALLY_FLYING, ITEM_FLYING_MEMORY, ABILITY_RKS_SYSTEM}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_SILVALLY_POISON, ITEM_POISON_MEMORY, ABILITY_RKS_SYSTEM}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_SILVALLY_GROUND, ITEM_GROUND_MEMORY, ABILITY_RKS_SYSTEM}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_SILVALLY_ROCK, ITEM_ROCK_MEMORY, ABILITY_RKS_SYSTEM}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_SILVALLY_BUG, ITEM_BUG_MEMORY, ABILITY_RKS_SYSTEM}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_SILVALLY_GHOST, ITEM_GHOST_MEMORY, ABILITY_RKS_SYSTEM}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_SILVALLY_STEEL, ITEM_STEEL_MEMORY, ABILITY_RKS_SYSTEM}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_SILVALLY_FIRE, ITEM_FIRE_MEMORY, ABILITY_RKS_SYSTEM}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_SILVALLY_WATER, ITEM_WATER_MEMORY, ABILITY_RKS_SYSTEM}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_SILVALLY_GRASS, ITEM_GRASS_MEMORY, ABILITY_RKS_SYSTEM}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_SILVALLY_ELECTRIC, ITEM_ELECTRIC_MEMORY, ABILITY_RKS_SYSTEM}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_SILVALLY_PSYCHIC, ITEM_PSYCHIC_MEMORY, ABILITY_RKS_SYSTEM}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_SILVALLY_ICE, ITEM_ICE_MEMORY, ABILITY_RKS_SYSTEM}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_SILVALLY_DRAGON, ITEM_DRAGON_MEMORY, ABILITY_RKS_SYSTEM}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_SILVALLY_DARK, ITEM_DARK_MEMORY, ABILITY_RKS_SYSTEM}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_SILVALLY_FAIRY, ITEM_FAIRY_MEMORY, ABILITY_RKS_SYSTEM}, {FORM_CHANGE_END}, }; static const struct FormChange sMimikyuFormChangeTable[] = { - {FORM_BATTLE_END, SPECIES_MIMIKYU}, + {FORM_CHANGE_BATTLE_END, SPECIES_MIMIKYU}, {FORM_CHANGE_END}, }; static const struct FormChange sMiniorRedFormChangeTable[] = { - {FORM_BATTLE_END, SPECIES_MINIOR_CORE_RED}, + {FORM_CHANGE_BATTLE_END, SPECIES_MINIOR_CORE_RED}, {FORM_CHANGE_END}, }; static const struct FormChange sMiniorBlueFormChangeTable[] = { - {FORM_BATTLE_END, SPECIES_MINIOR_CORE_BLUE}, + {FORM_CHANGE_BATTLE_END, SPECIES_MINIOR_CORE_BLUE}, {FORM_CHANGE_END}, }; static const struct FormChange sMiniorGreenFormChangeTable[] = { - {FORM_BATTLE_END, SPECIES_MINIOR_CORE_GREEN}, + {FORM_CHANGE_BATTLE_END, SPECIES_MINIOR_CORE_GREEN}, {FORM_CHANGE_END}, }; static const struct FormChange sMiniorIndigoFormChangeTable[] = { - {FORM_BATTLE_END, SPECIES_MINIOR_CORE_INDIGO}, + {FORM_CHANGE_BATTLE_END, SPECIES_MINIOR_CORE_INDIGO}, {FORM_CHANGE_END}, }; static const struct FormChange sMiniorOrangeFormChangeTable[] = { - {FORM_BATTLE_END, SPECIES_MINIOR_CORE_ORANGE}, + {FORM_CHANGE_BATTLE_END, SPECIES_MINIOR_CORE_ORANGE}, {FORM_CHANGE_END}, }; static const struct FormChange sMiniorVioletFormChangeTable[] = { - {FORM_BATTLE_END, SPECIES_MINIOR_CORE_VIOLET}, + {FORM_CHANGE_BATTLE_END, SPECIES_MINIOR_CORE_VIOLET}, {FORM_CHANGE_END}, }; static const struct FormChange sMiniorYellowFormChangeTable[] = { - {FORM_BATTLE_END, SPECIES_MINIOR_CORE_YELLOW}, + {FORM_CHANGE_BATTLE_END, SPECIES_MINIOR_CORE_YELLOW}, {FORM_CHANGE_END}, }; @@ -244,30 +244,30 @@ static const struct FormChange sMiniorYellowFormChangeTable[] = { #if P_GEN_8_POKEMON == TRUE static const struct FormChange sCramorantFormChangeTable[] = { - {FORM_BATTLE_END, SPECIES_CRAMORANT}, + {FORM_CHANGE_BATTLE_END, SPECIES_CRAMORANT}, {FORM_CHANGE_END}, }; static const struct FormChange sMorpekoFormChangeTable[] = { - {FORM_BATTLE_END, SPECIES_MORPEKO}, + {FORM_CHANGE_BATTLE_END, SPECIES_MORPEKO}, {FORM_CHANGE_END}, }; static const struct FormChange sZacianFormChangeTable[] = { - {FORM_BATTLE_BEGIN, SPECIES_ZACIAN_CROWNED_SWORD, ITEM_RUSTED_SWORD, MOVE_IRON_HEAD, MOVE_BEHEMOTH_BLADE}, - {FORM_BATTLE_END, SPECIES_ZACIAN, ITEM_RUSTED_SWORD, MOVE_BEHEMOTH_BLADE, MOVE_IRON_HEAD}, + {FORM_CHANGE_BATTLE_BEGIN, SPECIES_ZACIAN_CROWNED_SWORD, ITEM_RUSTED_SWORD, MOVE_IRON_HEAD, MOVE_BEHEMOTH_BLADE}, + {FORM_CHANGE_BATTLE_END, SPECIES_ZACIAN, ITEM_RUSTED_SWORD, MOVE_BEHEMOTH_BLADE, MOVE_IRON_HEAD}, {FORM_CHANGE_END}, }; static const struct FormChange sZamazentaFormChangeTable[] = { - {FORM_BATTLE_BEGIN, SPECIES_ZAMAZENTA_CROWNED_SHIELD, ITEM_RUSTED_SHIELD, MOVE_IRON_HEAD, MOVE_BEHEMOTH_BASH}, - {FORM_BATTLE_END, SPECIES_ZAMAZENTA, ITEM_RUSTED_SHIELD, MOVE_BEHEMOTH_BASH, MOVE_IRON_HEAD}, + {FORM_CHANGE_BATTLE_BEGIN, SPECIES_ZAMAZENTA_CROWNED_SHIELD, ITEM_RUSTED_SHIELD, MOVE_IRON_HEAD, MOVE_BEHEMOTH_BASH}, + {FORM_CHANGE_BATTLE_END, SPECIES_ZAMAZENTA, ITEM_RUSTED_SHIELD, MOVE_BEHEMOTH_BASH, MOVE_IRON_HEAD}, {FORM_CHANGE_END}, }; static const struct FormChange sEnamorusFormChangeTable[] = { - {FORM_ITEM_USE, SPECIES_ENAMORUS, ITEM_REVEAL_GLASS}, - {FORM_ITEM_USE, SPECIES_ENAMORUS_THERIAN, ITEM_REVEAL_GLASS}, + {FORM_CHANGE_ITEM_USE, SPECIES_ENAMORUS, ITEM_REVEAL_GLASS}, + {FORM_CHANGE_ITEM_USE, SPECIES_ENAMORUS_THERIAN, ITEM_REVEAL_GLASS}, {FORM_CHANGE_END}, }; #endif diff --git a/src/daycare.c b/src/daycare.c index 18bc45eb013c..fc44e200e668 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -255,7 +255,7 @@ static u16 TakeSelectedPokemonFromDaycare(struct DaycareMon *daycareMon) species = GetBoxMonData(&daycareMon->mon, MON_DATA_SPECIES); BoxMonToMon(&daycareMon->mon, &pokemon); - newSpecies = GetFormChangeTargetSpecies(&pokemon, FORM_WITHDRAW, 0); + newSpecies = GetFormChangeTargetSpecies(&pokemon, FORM_CHANGE_WITHDRAW, 0); if (newSpecies != SPECIES_NONE) { SetMonData(&pokemon, MON_DATA_SPECIES, &newSpecies); CalculateMonStats(&pokemon); diff --git a/src/party_menu.c b/src/party_menu.c index 3c8b163c54b4..1071825a6b46 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -5591,7 +5591,7 @@ static void Task_TryItemUseFormChange(u8 taskId) bool32 TryItemUseFormChange(u8 taskId, TaskFunc task) { struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId]; - u16 targetSpecies = GetFormChangeTargetSpecies(mon, FORM_ITEM_USE, gSpecialVar_ItemId); + u16 targetSpecies = GetFormChangeTargetSpecies(mon, FORM_CHANGE_ITEM_USE, gSpecialVar_ItemId); if (targetSpecies != SPECIES_NONE) { @@ -5626,7 +5626,7 @@ void ItemUseCB_FormChange_ConsumedOnUse(u8 taskId, TaskFunc task) } void TryItemHoldFormChange(struct Pokemon *mon) { - u16 targetSpecies = GetFormChangeTargetSpecies(mon, FORM_ITEM_HOLD, 0); + u16 targetSpecies = GetFormChangeTargetSpecies(mon, FORM_CHANGE_ITEM_HOLD, 0); if (targetSpecies != SPECIES_NONE) { PlayCry_NormalNoDucking(targetSpecies, 0, CRY_VOLUME_RS, CRY_VOLUME_RS); diff --git a/src/pokemon.c b/src/pokemon.c index 1a748fb24a0c..b60e5a30ee30 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -8363,12 +8363,12 @@ u16 GetFormChangeTargetSpeciesBoxMon(struct BoxPokemon *boxMon, u16 method, u32 { switch (method) { - case FORM_ITEM_HOLD: + case FORM_CHANGE_ITEM_HOLD: if ((heldItem == formChanges[i].param1 || formChanges[i].param1 == ITEM_NONE) && (ability == formChanges[i].param2 || formChanges[i].param2 == ABILITY_NONE)) targetSpecies = formChanges[i].targetSpecies; break; - case FORM_ITEM_USE: + case FORM_CHANGE_ITEM_USE: if (arg == formChanges[i].param1) { switch (formChanges[i].param2) @@ -8389,12 +8389,12 @@ u16 GetFormChangeTargetSpeciesBoxMon(struct BoxPokemon *boxMon, u16 method, u32 } } break; - case FORM_MOVE: + case FORM_CHANGE_MOVE: if (BoxMonKnowsMove(boxMon, formChanges[i].param1) != formChanges[i].param2) targetSpecies = formChanges[i].targetSpecies; break; - case FORM_BATTLE_BEGIN: - case FORM_BATTLE_END: + case FORM_CHANGE_BATTLE_BEGIN: + case FORM_CHANGE_BATTLE_END: if (heldItem == formChanges[i].param1 || formChanges[i].param1 == ITEM_NONE) targetSpecies = formChanges[i].targetSpecies; } @@ -8491,7 +8491,7 @@ void TryToSetBattleFormChangeMoves(struct Pokemon *mon, u16 method) u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL); const struct FormChange *formChanges = gFormChangeTablePointers[species]; - if (formChanges == NULL || (method != FORM_BATTLE_BEGIN && method != FORM_BATTLE_END)) + if (formChanges == NULL || (method != FORM_CHANGE_BATTLE_BEGIN && method != FORM_CHANGE_BATTLE_END)) return; for (i = 0; formChanges[i].method != FORM_CHANGE_END; i++) diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index 3f58daa86195..4cce36a93266 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -6900,7 +6900,7 @@ static void ReshowDisplayMon(void) void SetMonFormPSS(struct BoxPokemon *boxMon) { - u16 targetSpecies = GetFormChangeTargetSpeciesBoxMon(boxMon, FORM_ITEM_HOLD, 0); + u16 targetSpecies = GetFormChangeTargetSpeciesBoxMon(boxMon, FORM_CHANGE_ITEM_HOLD, 0); if (targetSpecies != SPECIES_NONE) { SetBoxMonData(boxMon, MON_DATA_SPECIES, &targetSpecies); diff --git a/src/script_pokemon_util.c b/src/script_pokemon_util.c index e33c8ffcadbd..d95079b4d078 100755 --- a/src/script_pokemon_util.c +++ b/src/script_pokemon_util.c @@ -72,7 +72,7 @@ u8 ScriptGiveMon(u16 species, u8 level, u16 item, u32 unused1, u32 unused2, u8 u SetMonData(&mon, MON_DATA_HELD_ITEM, heldItem); // In case a mon with a form changing item is given. Eg: SPECIES_ARCEUS with ITEM_SPLASH_PLATE will transform into SPECIES_ARCEUS_WATER upon gifted. - targetSpecies = GetFormChangeTargetSpecies(&mon, FORM_ITEM_HOLD, 0); + targetSpecies = GetFormChangeTargetSpecies(&mon, FORM_CHANGE_ITEM_HOLD, 0); if (targetSpecies != SPECIES_NONE) { SetMonData(&mon, MON_DATA_SPECIES, &targetSpecies); From d8cc7f7abe5e151ca0473585ec68e632e5979693 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Thu, 20 Oct 2022 17:56:56 -0300 Subject: [PATCH 005/428] Form change when switching out --- include/constants/pokemon.h | 3 +- src/battle_util.c | 2 +- src/data/pokemon/form_change_tables.h | 43 +++++++++++++++++++-------- 3 files changed, 33 insertions(+), 15 deletions(-) diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h index cacbdc55c03b..01bc755cdd6b 100644 --- a/include/constants/pokemon.h +++ b/include/constants/pokemon.h @@ -323,7 +323,8 @@ #define FORM_CHANGE_MOVE 3 #define FORM_CHANGE_WITHDRAW 4 #define FORM_CHANGE_BATTLE_BEGIN 5 -#define FORM_CHANGE_BATTLE_END 6 +#define FORM_CHANGE_BATTLE_SWITCH 6 +#define FORM_CHANGE_BATTLE_END 7 #define MON_PIC_WIDTH 64 #define MON_PIC_HEIGHT 64 diff --git a/src/battle_util.c b/src/battle_util.c index 92f79cd8d140..003b8b272e36 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -518,7 +518,7 @@ void HandleAction_Switch(void) if (gBattleResults.playerSwitchesCounter < 255) gBattleResults.playerSwitchesCounter++; - UndoFormChange(gBattlerPartyIndexes[gBattlerAttacker], GetBattlerSide(gBattlerAttacker), TRUE); + BattleFormChange(gBattlerPartyIndexes[gBattlerAttacker], GetBattlerSide(gBattlerAttacker), FORM_CHANGE_BATTLE_SWITCH); } void HandleAction_UseItem(void) diff --git a/src/data/pokemon/form_change_tables.h b/src/data/pokemon/form_change_tables.h index 1f2e926bb3c0..e043fa46212b 100644 --- a/src/data/pokemon/form_change_tables.h +++ b/src/data/pokemon/form_change_tables.h @@ -22,6 +22,10 @@ Form change activates when the Pokémon is withdrawn from the PC or Daycare. no parameters +FORM_CHANGE_SWITCH: + Form change activates when the Pokémon is switched out in battle. + no parameters + FORM_CHANGE_BATTLE_BEGIN: Form change activates when the Pokémon is sent out at the beginning of a battle param1 = item to hold, optional @@ -99,12 +103,14 @@ static const struct FormChange sArceusFormChangeTable[] = { #if P_GEN_5_POKEMON == TRUE static const struct FormChange sDarmanitanFormChangeTable[] = { - {FORM_CHANGE_BATTLE_END, SPECIES_DARMANITAN}, + {FORM_CHANGE_BATTLE_SWITCH, SPECIES_DARMANITAN}, + {FORM_CHANGE_BATTLE_END, SPECIES_DARMANITAN}, {FORM_CHANGE_END}, }; static const struct FormChange sDarmanitanGalarianFormChangeTable[] = { - {FORM_CHANGE_BATTLE_END, SPECIES_DARMANITAN_GALARIAN}, + {FORM_CHANGE_BATTLE_SWITCH, SPECIES_DARMANITAN_GALARIAN}, + {FORM_CHANGE_BATTLE_END, SPECIES_DARMANITAN_GALARIAN}, {FORM_CHANGE_END}, }; @@ -154,7 +160,8 @@ static const struct FormChange sGreninjaBattleBondFormChangeTable[] = { }; static const struct FormChange sAegislashFormChangeTable[] = { - {FORM_CHANGE_BATTLE_END, SPECIES_AEGISLASH}, + {FORM_CHANGE_BATTLE_SWITCH, SPECIES_AEGISLASH}, + {FORM_CHANGE_BATTLE_END, SPECIES_AEGISLASH}, {FORM_CHANGE_END}, }; @@ -180,7 +187,8 @@ static const struct FormChange sOricorioFormChangeTable[] = { {FORM_CHANGE_END}, }; static const struct FormChange sWishiwashiFormChangeTable[] = { - {FORM_CHANGE_BATTLE_END, SPECIES_WISHIWASHI}, + {FORM_CHANGE_BATTLE_SWITCH, SPECIES_WISHIWASHI}, + {FORM_CHANGE_BATTLE_END, SPECIES_WISHIWASHI}, {FORM_CHANGE_END}, }; @@ -212,31 +220,38 @@ static const struct FormChange sMimikyuFormChangeTable[] = { }; static const struct FormChange sMiniorRedFormChangeTable[] = { - {FORM_CHANGE_BATTLE_END, SPECIES_MINIOR_CORE_RED}, + {FORM_CHANGE_BATTLE_SWITCH, SPECIES_MINIOR_CORE_RED}, + {FORM_CHANGE_BATTLE_END, SPECIES_MINIOR_CORE_RED}, {FORM_CHANGE_END}, }; static const struct FormChange sMiniorBlueFormChangeTable[] = { - {FORM_CHANGE_BATTLE_END, SPECIES_MINIOR_CORE_BLUE}, + {FORM_CHANGE_BATTLE_SWITCH, SPECIES_MINIOR_CORE_BLUE}, + {FORM_CHANGE_BATTLE_END, SPECIES_MINIOR_CORE_BLUE}, {FORM_CHANGE_END}, }; static const struct FormChange sMiniorGreenFormChangeTable[] = { - {FORM_CHANGE_BATTLE_END, SPECIES_MINIOR_CORE_GREEN}, + {FORM_CHANGE_BATTLE_SWITCH, SPECIES_MINIOR_CORE_GREEN}, + {FORM_CHANGE_BATTLE_END, SPECIES_MINIOR_CORE_GREEN}, {FORM_CHANGE_END}, }; static const struct FormChange sMiniorIndigoFormChangeTable[] = { - {FORM_CHANGE_BATTLE_END, SPECIES_MINIOR_CORE_INDIGO}, + {FORM_CHANGE_BATTLE_SWITCH, SPECIES_MINIOR_CORE_INDIGO}, + {FORM_CHANGE_BATTLE_END, SPECIES_MINIOR_CORE_INDIGO}, {FORM_CHANGE_END}, }; static const struct FormChange sMiniorOrangeFormChangeTable[] = { - {FORM_CHANGE_BATTLE_END, SPECIES_MINIOR_CORE_ORANGE}, + {FORM_CHANGE_BATTLE_SWITCH, SPECIES_MINIOR_CORE_ORANGE}, + {FORM_CHANGE_BATTLE_END, SPECIES_MINIOR_CORE_ORANGE}, {FORM_CHANGE_END}, }; static const struct FormChange sMiniorVioletFormChangeTable[] = { - {FORM_CHANGE_BATTLE_END, SPECIES_MINIOR_CORE_VIOLET}, + {FORM_CHANGE_BATTLE_SWITCH, SPECIES_MINIOR_CORE_VIOLET}, + {FORM_CHANGE_BATTLE_END, SPECIES_MINIOR_CORE_VIOLET}, {FORM_CHANGE_END}, }; static const struct FormChange sMiniorYellowFormChangeTable[] = { - {FORM_CHANGE_BATTLE_END, SPECIES_MINIOR_CORE_YELLOW}, + {FORM_CHANGE_BATTLE_SWITCH, SPECIES_MINIOR_CORE_YELLOW}, + {FORM_CHANGE_BATTLE_END, SPECIES_MINIOR_CORE_YELLOW}, {FORM_CHANGE_END}, }; @@ -244,12 +259,14 @@ static const struct FormChange sMiniorYellowFormChangeTable[] = { #if P_GEN_8_POKEMON == TRUE static const struct FormChange sCramorantFormChangeTable[] = { - {FORM_CHANGE_BATTLE_END, SPECIES_CRAMORANT}, + {FORM_CHANGE_BATTLE_SWITCH, SPECIES_CRAMORANT}, + {FORM_CHANGE_BATTLE_END, SPECIES_CRAMORANT}, {FORM_CHANGE_END}, }; static const struct FormChange sMorpekoFormChangeTable[] = { - {FORM_CHANGE_BATTLE_END, SPECIES_MORPEKO}, + {FORM_CHANGE_BATTLE_SWITCH, SPECIES_MORPEKO}, + {FORM_CHANGE_BATTLE_END, SPECIES_MORPEKO}, {FORM_CHANGE_END}, }; From 861590f747b7f43022f257980c7abb0f29953cf9 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Thu, 20 Oct 2022 18:53:12 -0300 Subject: [PATCH 006/428] Form change when fainting. Goodbye UndoFormChange! --- include/battle_util.h | 1 - include/constants/pokemon.h | 3 ++- src/battle_main.c | 2 +- src/battle_util.c | 38 --------------------------- src/data/pokemon/form_change_tables.h | 22 +++++++++++++--- 5 files changed, 22 insertions(+), 44 deletions(-) diff --git a/include/battle_util.h b/include/battle_util.h index 59ddad9406d3..fb5090f348d9 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -149,7 +149,6 @@ u16 GetPrimalReversionSpecies(u16 preEvoSpecies, u16 heldItemId); u16 GetWishMegaEvolutionSpecies(u16 preEvoSpecies, u16 moveId1, u16 moveId2, u16 moveId3, u16 moveId4); bool32 CanMegaEvolve(u8 battlerId); void UndoMegaEvolution(u32 monId); -void UndoFormChange(u32 monId, u32 side, bool32 isSwitchingOut); void BattleFormChange(u32 monId, u32 side, u16 method); bool32 DoBattlersShareType(u32 battler1, u32 battler2); bool32 CanBattlerGetOrLoseItem(u8 battlerId, u16 itemId); diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h index 01bc755cdd6b..bb77398dd548 100644 --- a/include/constants/pokemon.h +++ b/include/constants/pokemon.h @@ -324,7 +324,8 @@ #define FORM_CHANGE_WITHDRAW 4 #define FORM_CHANGE_BATTLE_BEGIN 5 #define FORM_CHANGE_BATTLE_SWITCH 6 -#define FORM_CHANGE_BATTLE_END 7 +#define FORM_CHANGE_BATTLE_FAINT 7 +#define FORM_CHANGE_BATTLE_END 8 #define MON_PIC_WIDTH 64 #define MON_PIC_HEIGHT 64 diff --git a/src/battle_main.c b/src/battle_main.c index 8a3cbcfcdb3b..71d263860eaf 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -3247,7 +3247,7 @@ void FaintClearSetData(void) gBattleMons[gActiveBattler].type3 = TYPE_MYSTERY; Ai_UpdateFaintData(gActiveBattler); - UndoFormChange(gBattlerPartyIndexes[gActiveBattler], GET_BATTLER_SIDE(gActiveBattler), FALSE); + BattleFormChange(gBattlerPartyIndexes[gActiveBattler], GET_BATTLER_SIDE(gActiveBattler), FORM_CHANGE_BATTLE_FAINT); if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) UndoMegaEvolution(gBattlerPartyIndexes[gActiveBattler]); diff --git a/src/battle_util.c b/src/battle_util.c index 003b8b272e36..f39d2a03e5b8 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -9690,44 +9690,6 @@ void UndoMegaEvolution(u32 monId) } } -void UndoFormChange(u32 monId, u32 side, bool32 isSwitchingOut) -{ - u32 i, currSpecies, targetSpecies; - struct Pokemon *party = (side == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty; - static const u16 species[][3] = - { - // Changed Form ID Default Form ID Should change on switch - {SPECIES_MIMIKYU_BUSTED, SPECIES_MIMIKYU, FALSE}, - {SPECIES_GRENINJA_ASH, SPECIES_GRENINJA_BATTLE_BOND, FALSE}, - {SPECIES_MELOETTA_PIROUETTE, SPECIES_MELOETTA, FALSE}, - {SPECIES_AEGISLASH_BLADE, SPECIES_AEGISLASH, TRUE}, - {SPECIES_DARMANITAN_ZEN_MODE, SPECIES_DARMANITAN, TRUE}, - {SPECIES_MINIOR, SPECIES_MINIOR_CORE_RED, TRUE}, - {SPECIES_MINIOR_METEOR_BLUE, SPECIES_MINIOR_CORE_BLUE, TRUE}, - {SPECIES_MINIOR_METEOR_GREEN, SPECIES_MINIOR_CORE_GREEN, TRUE}, - {SPECIES_MINIOR_METEOR_INDIGO, SPECIES_MINIOR_CORE_INDIGO, TRUE}, - {SPECIES_MINIOR_METEOR_ORANGE, SPECIES_MINIOR_CORE_ORANGE, TRUE}, - {SPECIES_MINIOR_METEOR_VIOLET, SPECIES_MINIOR_CORE_VIOLET, TRUE}, - {SPECIES_MINIOR_METEOR_YELLOW, SPECIES_MINIOR_CORE_YELLOW, TRUE}, - {SPECIES_WISHIWASHI_SCHOOL, SPECIES_WISHIWASHI, TRUE}, - {SPECIES_CRAMORANT_GORGING, SPECIES_CRAMORANT, TRUE}, - {SPECIES_CRAMORANT_GULPING, SPECIES_CRAMORANT, TRUE}, - {SPECIES_MORPEKO_HANGRY, SPECIES_MORPEKO, TRUE}, - {SPECIES_DARMANITAN_ZEN_MODE_GALARIAN, SPECIES_DARMANITAN_GALARIAN, TRUE}, - }; - - currSpecies = GetMonData(&party[monId], MON_DATA_SPECIES, NULL); - for (i = 0; i < ARRAY_COUNT(species); i++) - { - if (currSpecies == species[i][0] && (!isSwitchingOut || species[i][2] == TRUE)) - { - SetMonData(&party[monId], MON_DATA_SPECIES, &species[i][1]); - CalculateMonStats(&party[monId]); - break; - } - } -} - void BattleFormChange(u32 monId, u32 side, u16 method) { u32 targetSpecies; diff --git a/src/data/pokemon/form_change_tables.h b/src/data/pokemon/form_change_tables.h index e043fa46212b..0586c8ac88ea 100644 --- a/src/data/pokemon/form_change_tables.h +++ b/src/data/pokemon/form_change_tables.h @@ -104,18 +104,21 @@ static const struct FormChange sArceusFormChangeTable[] = { static const struct FormChange sDarmanitanFormChangeTable[] = { {FORM_CHANGE_BATTLE_SWITCH, SPECIES_DARMANITAN}, + {FORM_CHANGE_BATTLE_FAINT, SPECIES_DARMANITAN}, {FORM_CHANGE_BATTLE_END, SPECIES_DARMANITAN}, {FORM_CHANGE_END}, }; static const struct FormChange sDarmanitanGalarianFormChangeTable[] = { {FORM_CHANGE_BATTLE_SWITCH, SPECIES_DARMANITAN_GALARIAN}, + {FORM_CHANGE_BATTLE_FAINT, SPECIES_DARMANITAN_GALARIAN}, {FORM_CHANGE_BATTLE_END, SPECIES_DARMANITAN_GALARIAN}, {FORM_CHANGE_END}, }; static const struct FormChange sMeloettaFormChangeTable[] = { - {FORM_CHANGE_BATTLE_END, SPECIES_MELOETTA}, + {FORM_CHANGE_BATTLE_FAINT, SPECIES_MELOETTA}, + {FORM_CHANGE_BATTLE_END, SPECIES_MELOETTA}, {FORM_CHANGE_END}, }; @@ -155,12 +158,14 @@ static const struct FormChange sGenesectFormChangeTable[] = { #if P_GEN_6_POKEMON == TRUE static const struct FormChange sGreninjaBattleBondFormChangeTable[] = { - {FORM_CHANGE_BATTLE_END, SPECIES_GRENINJA_BATTLE_BOND}, + {FORM_CHANGE_BATTLE_FAINT, SPECIES_GRENINJA_BATTLE_BOND}, + {FORM_CHANGE_BATTLE_END, SPECIES_GRENINJA_BATTLE_BOND}, {FORM_CHANGE_END}, }; static const struct FormChange sAegislashFormChangeTable[] = { {FORM_CHANGE_BATTLE_SWITCH, SPECIES_AEGISLASH}, + {FORM_CHANGE_BATTLE_FAINT, SPECIES_AEGISLASH}, {FORM_CHANGE_BATTLE_END, SPECIES_AEGISLASH}, {FORM_CHANGE_END}, }; @@ -188,6 +193,7 @@ static const struct FormChange sOricorioFormChangeTable[] = { }; static const struct FormChange sWishiwashiFormChangeTable[] = { {FORM_CHANGE_BATTLE_SWITCH, SPECIES_WISHIWASHI}, + {FORM_CHANGE_BATTLE_FAINT, SPECIES_WISHIWASHI}, {FORM_CHANGE_BATTLE_END, SPECIES_WISHIWASHI}, {FORM_CHANGE_END}, }; @@ -215,42 +221,50 @@ static const struct FormChange sSilvallyFormChangeTable[] = { }; static const struct FormChange sMimikyuFormChangeTable[] = { - {FORM_CHANGE_BATTLE_END, SPECIES_MIMIKYU}, + {FORM_CHANGE_BATTLE_FAINT, SPECIES_MIMIKYU}, + {FORM_CHANGE_BATTLE_END, SPECIES_MIMIKYU}, {FORM_CHANGE_END}, }; static const struct FormChange sMiniorRedFormChangeTable[] = { {FORM_CHANGE_BATTLE_SWITCH, SPECIES_MINIOR_CORE_RED}, + {FORM_CHANGE_BATTLE_FAINT, SPECIES_MINIOR_CORE_RED}, {FORM_CHANGE_BATTLE_END, SPECIES_MINIOR_CORE_RED}, {FORM_CHANGE_END}, }; static const struct FormChange sMiniorBlueFormChangeTable[] = { {FORM_CHANGE_BATTLE_SWITCH, SPECIES_MINIOR_CORE_BLUE}, + {FORM_CHANGE_BATTLE_FAINT, SPECIES_MINIOR_CORE_BLUE}, {FORM_CHANGE_BATTLE_END, SPECIES_MINIOR_CORE_BLUE}, {FORM_CHANGE_END}, }; static const struct FormChange sMiniorGreenFormChangeTable[] = { {FORM_CHANGE_BATTLE_SWITCH, SPECIES_MINIOR_CORE_GREEN}, + {FORM_CHANGE_BATTLE_FAINT, SPECIES_MINIOR_CORE_GREEN}, {FORM_CHANGE_BATTLE_END, SPECIES_MINIOR_CORE_GREEN}, {FORM_CHANGE_END}, }; static const struct FormChange sMiniorIndigoFormChangeTable[] = { {FORM_CHANGE_BATTLE_SWITCH, SPECIES_MINIOR_CORE_INDIGO}, + {FORM_CHANGE_BATTLE_FAINT, SPECIES_MINIOR_CORE_INDIGO}, {FORM_CHANGE_BATTLE_END, SPECIES_MINIOR_CORE_INDIGO}, {FORM_CHANGE_END}, }; static const struct FormChange sMiniorOrangeFormChangeTable[] = { {FORM_CHANGE_BATTLE_SWITCH, SPECIES_MINIOR_CORE_ORANGE}, + {FORM_CHANGE_BATTLE_FAINT, SPECIES_MINIOR_CORE_ORANGE}, {FORM_CHANGE_BATTLE_END, SPECIES_MINIOR_CORE_ORANGE}, {FORM_CHANGE_END}, }; static const struct FormChange sMiniorVioletFormChangeTable[] = { {FORM_CHANGE_BATTLE_SWITCH, SPECIES_MINIOR_CORE_VIOLET}, + {FORM_CHANGE_BATTLE_FAINT, SPECIES_MINIOR_CORE_VIOLET}, {FORM_CHANGE_BATTLE_END, SPECIES_MINIOR_CORE_VIOLET}, {FORM_CHANGE_END}, }; static const struct FormChange sMiniorYellowFormChangeTable[] = { {FORM_CHANGE_BATTLE_SWITCH, SPECIES_MINIOR_CORE_YELLOW}, + {FORM_CHANGE_BATTLE_FAINT, SPECIES_MINIOR_CORE_YELLOW}, {FORM_CHANGE_BATTLE_END, SPECIES_MINIOR_CORE_YELLOW}, {FORM_CHANGE_END}, }; @@ -260,12 +274,14 @@ static const struct FormChange sMiniorYellowFormChangeTable[] = { #if P_GEN_8_POKEMON == TRUE static const struct FormChange sCramorantFormChangeTable[] = { {FORM_CHANGE_BATTLE_SWITCH, SPECIES_CRAMORANT}, + {FORM_CHANGE_BATTLE_FAINT, SPECIES_CRAMORANT}, {FORM_CHANGE_BATTLE_END, SPECIES_CRAMORANT}, {FORM_CHANGE_END}, }; static const struct FormChange sMorpekoFormChangeTable[] = { {FORM_CHANGE_BATTLE_SWITCH, SPECIES_MORPEKO}, + {FORM_CHANGE_BATTLE_FAINT, SPECIES_MORPEKO}, {FORM_CHANGE_BATTLE_END, SPECIES_MORPEKO}, {FORM_CHANGE_END}, }; From 0a79390ec00e982240edb8513b59b440e7218a45 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Fri, 21 Oct 2022 02:08:37 -0300 Subject: [PATCH 007/428] Primal Reversion in Form Change tables --- include/battle.h | 3 - include/battle_util.h | 6 +- include/constants/pokemon.h | 37 ++++++------ include/pokemon.h | 2 + src/battle_interface.c | 16 +++--- src/battle_main.c | 31 +++++----- src/battle_script_commands.c | 43 ++------------ src/battle_util.c | 56 +++++++++++++------ src/data/pokemon/base_stats.h | 4 +- src/data/pokemon/evolution.h | 2 - src/data/pokemon/form_change_table_pointers.h | 4 ++ src/data/pokemon/form_change_tables.h | 14 ++++- src/pokemon.c | 27 ++++++++- 13 files changed, 136 insertions(+), 109 deletions(-) diff --git a/include/battle.h b/include/battle.h index b328b46bb254..ff5d698abf0b 100644 --- a/include/battle.h +++ b/include/battle.h @@ -472,9 +472,6 @@ struct MegaEvolutionData bool8 alreadyEvolved[4]; // Array id is used for mon position. u16 evolvedSpecies[MAX_BATTLERS_COUNT]; u16 playerEvolvedSpecies; - u8 primalRevertedPartyIds[2]; // As flags using gBitTable; - u16 primalRevertedSpecies[MAX_BATTLERS_COUNT]; - u16 playerPrimalRevertedSpecies; u8 battlerId; bool8 playerSelect; u8 triggerSpriteId; diff --git a/include/battle_util.h b/include/battle_util.h index fb5090f348d9..5a0990950971 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -145,11 +145,12 @@ u16 CalcPartyMonTypeEffectivenessMultiplier(u16 move, u16 speciesDef, u16 abilit u16 GetTypeModifier(u8 atkType, u8 defType); s32 GetStealthHazardDamage(u8 hazardType, u8 battlerId); u16 GetMegaEvolutionSpecies(u16 preEvoSpecies, u16 heldItemId); -u16 GetPrimalReversionSpecies(u16 preEvoSpecies, u16 heldItemId); +u16 GetPrimalReversionSpecies(u16 preSpecies, u16 heldItemId); u16 GetWishMegaEvolutionSpecies(u16 preEvoSpecies, u16 moveId1, u16 moveId2, u16 moveId3, u16 moveId4); bool32 CanMegaEvolve(u8 battlerId); void UndoMegaEvolution(u32 monId); -void BattleFormChange(u32 monId, u32 side, u16 method); +bool32 IsBattlerPrimalReverted(u8 battlerId); +void TryBattleFormChange(u8 battlerId, u16 method); bool32 DoBattlersShareType(u32 battler1, u32 battler2); bool32 CanBattlerGetOrLoseItem(u8 battlerId, u16 itemId); struct Pokemon *GetIllusionMonPtr(u32 battlerId); @@ -186,6 +187,7 @@ void TryToRevertMimicry(void); void RestoreBattlerOriginalTypes(u8 battlerId); u32 GetBattlerMoveTargetType(u8 battlerId, u16 move); bool32 CanTargetBattler(u8 battlerAtk, u8 battlerDef, u16 move); +void RecalcBattlerStats(u32 battler, struct Pokemon *mon); // Ability checks bool32 IsRolePlayBannedAbilityAtk(u16 ability); bool32 IsRolePlayBannedAbility(u16 ability); diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h index bb77398dd548..7dc250834e92 100644 --- a/include/constants/pokemon.h +++ b/include/constants/pokemon.h @@ -266,7 +266,6 @@ // Evolution types #define EVO_MEGA_EVOLUTION 0xffff // Not an actual evolution, used to temporarily mega evolve in battle. #define EVO_MOVE_MEGA_EVOLUTION 0xfffe // Mega Evolution that checks for a move instead of held item. -#define EVO_PRIMAL_REVERSION 0xfffd // Not an actual evolution, used to undergo primal reversion in battle. #define EVO_FRIENDSHIP 1 // Pokémon levels up with friendship ≥ 220 #define EVO_FRIENDSHIP_DAY 2 // Pokémon levels up during the day with friendship ≥ 220 #define EVO_FRIENDSHIP_NIGHT 3 // Pokémon levels up at night with friendship ≥ 220 @@ -317,15 +316,16 @@ #define EVO_MODE_OVERWORLD_SPECIAL 5 // Form change types -#define FORM_CHANGE_END 0 -#define FORM_CHANGE_ITEM_HOLD 1 -#define FORM_CHANGE_ITEM_USE 2 -#define FORM_CHANGE_MOVE 3 -#define FORM_CHANGE_WITHDRAW 4 -#define FORM_CHANGE_BATTLE_BEGIN 5 -#define FORM_CHANGE_BATTLE_SWITCH 6 -#define FORM_CHANGE_BATTLE_FAINT 7 -#define FORM_CHANGE_BATTLE_END 8 +#define FORM_CHANGE_END 0 // Form table terminator +#define FORM_CHANGE_ITEM_HOLD 1 +#define FORM_CHANGE_ITEM_USE 2 +#define FORM_CHANGE_MOVE 3 // Todo +#define FORM_CHANGE_WITHDRAW 4 // +#define FORM_CHANGE_BATTLE_BEGIN 5 +#define FORM_CHANGE_BATTLE_END 6 +#define FORM_CHANGE_BATTLE_SWITCH 7 +#define FORM_CHANGE_BATTLE_FAINT 8 +#define FORM_CHANGE_PRIMAL_REVERSION 9 #define MON_PIC_WIDTH 64 #define MON_PIC_HEIGHT 64 @@ -345,14 +345,15 @@ #define SPECIES_FLAG_LEGENDARY (1 << 0) #define SPECIES_FLAG_MYTHICAL (1 << 1) #define SPECIES_FLAG_MEGA_EVOLUTION (1 << 2) -#define SPECIES_FLAG_ULTRA_BEAST (1 << 3) -#define SPECIES_FLAG_ALOLAN_FORM (1 << 4) -#define SPECIES_FLAG_GALARIAN_FORM (1 << 5) -#define SPECIES_FLAG_HISUIAN_FORM (1 << 6) -#define SPECIES_FLAG_GENDER_DIFFERENCE (1 << 7) -#define SPECIES_FLAG_ALL_PERFECT_IVS (1 << 8) -#define SPECIES_FLAG_SHINY_LOCKED (1 << 9) -#define SPECIES_FLAG_CANNOT_BE_TRADED (1 << 10) +#define SPECIES_FLAG_PRIMAL_REVERSION (1 << 3) +#define SPECIES_FLAG_ULTRA_BEAST (1 << 4) +#define SPECIES_FLAG_ALOLAN_FORM (1 << 5) +#define SPECIES_FLAG_GALARIAN_FORM (1 << 6) +#define SPECIES_FLAG_HISUIAN_FORM (1 << 7) +#define SPECIES_FLAG_GENDER_DIFFERENCE (1 << 8) +#define SPECIES_FLAG_ALL_PERFECT_IVS (1 << 9) +#define SPECIES_FLAG_SHINY_LOCKED (1 << 10) +#define SPECIES_FLAG_CANNOT_BE_TRADED (1 << 11) #define LEGENDARY_PERFECT_IV_COUNT 3 diff --git a/include/pokemon.h b/include/pokemon.h index fa5bfc663ecc..134991b9533d 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -409,6 +409,7 @@ extern const u16 gUnionRoomFacilityClasses[]; extern const struct SpriteTemplate gBattlerSpriteTemplates[]; extern const s8 gNatureStatTable[][5]; extern const u16 *const gFormSpeciesIdTables[NUM_SPECIES]; +extern const struct FormChange *const gFormChangeTablePointers[NUM_SPECIES]; extern const u32 sExpCandyExperienceTable[]; void ZeroBoxMonData(struct BoxPokemon *boxMon); @@ -564,6 +565,7 @@ u16 GetFormChangeTargetSpecies(struct Pokemon *mon, u16 method, u32 arg); u16 GetFormChangeTargetSpeciesBoxMon(struct BoxPokemon *mon, u16 method, u32 arg); u16 MonTryLearningNewMoveEvolution(struct Pokemon *mon, bool8 firstMove); bool32 ShouldShowFemaleDifferences(u16 species, u32 personality); +void TryFormChange(u32 monId, u32 side, u16 method); void TryToSetBattleFormChangeMoves(struct Pokemon *mon, u16 method); u32 GetMonFriendshipScore(struct Pokemon *pokemon); diff --git a/src/battle_interface.c b/src/battle_interface.c index 3039c65b6791..ed756592f80a 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -871,8 +871,8 @@ u8 CreateBattlerHealthboxSprites(u8 battlerId) healthBarSpritePtr->invisible = TRUE; // Create mega indicator sprite if is a mega evolved or a primal reverted mon. - if (gBattleStruct->mega.evolvedPartyIds[GetBattlerSide(battlerId)] & gBitTable[gBattlerPartyIndexes[battlerId]] - || gBattleStruct->mega.primalRevertedPartyIds[GetBattlerSide(battlerId)] & gBitTable[gBattlerPartyIndexes[battlerId]]) + if ((gBattleStruct->mega.evolvedPartyIds[GetBattlerSide(battlerId)] & gBitTable[gBattlerPartyIndexes[battlerId]]) + || IsBattlerPrimalReverted(battlerId)) { megaIndicatorSpriteId = CreateMegaIndicatorSprite(battlerId, 0); gSprites[megaIndicatorSpriteId].invisible = TRUE; @@ -979,8 +979,8 @@ void SetHealthboxSpriteVisible(u8 healthboxSpriteId) gSprites[healthboxSpriteId].invisible = FALSE; gSprites[gSprites[healthboxSpriteId].hMain_HealthBarSpriteId].invisible = FALSE; gSprites[gSprites[healthboxSpriteId].oam.affineParam].invisible = FALSE; - if (gBattleStruct->mega.evolvedPartyIds[GetBattlerSide(battlerId)] & gBitTable[gBattlerPartyIndexes[battlerId]] - || gBattleStruct->mega.primalRevertedPartyIds[GetBattlerSide(battlerId)] & gBitTable[gBattlerPartyIndexes[battlerId]]) + if ((gBattleStruct->mega.evolvedPartyIds[GetBattlerSide(battlerId)] & gBitTable[gBattlerPartyIndexes[battlerId]]) + || IsBattlerPrimalReverted(battlerId)) { u8 spriteId = GetMegaIndicatorSpriteId(healthboxSpriteId); if (spriteId != 0xFF) @@ -1104,8 +1104,8 @@ static void UpdateLvlInHealthbox(u8 healthboxSpriteId, u8 lvl) u8 battler = gSprites[healthboxSpriteId].hMain_Battler; // Don't print Lv char if mon is mega evolved or primal reverted. - if (gBattleStruct->mega.evolvedPartyIds[GetBattlerSide(battler)] & gBitTable[gBattlerPartyIndexes[battler]] - || gBattleStruct->mega.primalRevertedPartyIds[GetBattlerSide(battler)] & gBitTable[gBattlerPartyIndexes[battler]]) + if ((gBattleStruct->mega.evolvedPartyIds[GetBattlerSide(battler)] & gBitTable[gBattlerPartyIndexes[battler]]) + || IsBattlerPrimalReverted(battler)) { objVram = ConvertIntToDecimalStringN(text, lvl, STR_CONV_MODE_LEFT_ALIGN, 3); xPos = 5 * (3 - (objVram - (text + 2))) - 1; @@ -1561,7 +1561,7 @@ u32 CreateMegaIndicatorSprite(u32 battlerId, u32 which) LoadSpritePalette(&sSpritePalette_MegaIndicator); LoadSpriteSheet(&sSpriteSheet_MegaIndicator); } - else if (gBattleStruct->mega.primalRevertedPartyIds[GetBattlerSide(battlerId)] & gBitTable[gBattlerPartyIndexes[battlerId]]) + else if (IsBattlerPrimalReverted(battlerId)) { if (GET_BASE_SPECIES_ID(gBattleMons[battlerId].species) == SPECIES_GROUDON) { @@ -1590,7 +1590,7 @@ u32 CreateMegaIndicatorSprite(u32 battlerId, u32 which) { spriteId = CreateSpriteAtEnd(&sSpriteTemplate_MegaIndicator, x, y, 0); } - else if (gBattleStruct->mega.primalRevertedPartyIds[GetBattlerSide(battlerId)] & gBitTable[gBattlerPartyIndexes[battlerId]]) + else if (IsBattlerPrimalReverted(battlerId)) { if (GET_BASE_SPECIES_ID(gBattleMons[battlerId].species) == SPECIES_GROUDON) spriteId = CreateSpriteAtEnd(&sSpriteTemplate_OmegaIndicator, x, y, 0); diff --git a/src/battle_main.c b/src/battle_main.c index 71d263860eaf..f58c0d43bbac 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -602,9 +602,9 @@ static void CB2_InitBattleInternal(void) for (i = 0; i < PARTY_SIZE; i++) { // Player's side - BattleFormChange(i, B_SIDE_PLAYER, FORM_CHANGE_BATTLE_BEGIN); + TryFormChange(i, B_SIDE_PLAYER, FORM_CHANGE_BATTLE_BEGIN); // Opponent's side - BattleFormChange(i, B_SIDE_OPPONENT, FORM_CHANGE_BATTLE_BEGIN); + TryFormChange(i, B_SIDE_OPPONENT, FORM_CHANGE_BATTLE_BEGIN); } gBattleCommunication[MULTIUSE_STATE] = 0; @@ -3247,7 +3247,7 @@ void FaintClearSetData(void) gBattleMons[gActiveBattler].type3 = TYPE_MYSTERY; Ai_UpdateFaintData(gActiveBattler); - BattleFormChange(gBattlerPartyIndexes[gActiveBattler], GET_BATTLER_SIDE(gActiveBattler), FORM_CHANGE_BATTLE_FAINT); + TryFormChange(gBattlerPartyIndexes[gActiveBattler], GET_BATTLER_SIDE(gActiveBattler), FORM_CHANGE_BATTLE_FAINT); if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) UndoMegaEvolution(gBattlerPartyIndexes[gActiveBattler]); @@ -3682,18 +3682,12 @@ static void TryDoEventsBeforeFirstTurn(void) // Primal Reversion for (i = 0; i < gBattlersCount; i++) { - if (GetBattlerHoldEffect(i, TRUE) == HOLD_EFFECT_PRIMAL_ORB) + if (GetBattlerHoldEffect(i, TRUE) == HOLD_EFFECT_PRIMAL_ORB + && GetPrimalReversionSpecies(gBattleMons[i].species, gBattleMons[i].item) != SPECIES_NONE) { - for (j = 0; j < EVOS_PER_MON; j++) - { - if (gEvolutionTable[gBattleMons[i].species][j].targetSpecies != SPECIES_NONE - && gEvolutionTable[gBattleMons[i].species][j].method == EVO_PRIMAL_REVERSION) - { - gBattlerAttacker = i; - BattleScriptExecute(BattleScript_PrimalReversion); - return; - } - } + gBattlerAttacker = i; + BattleScriptExecute(BattleScript_PrimalReversion); + return; } } @@ -5207,7 +5201,7 @@ static void HandleEndTurn_FinishBattle(void) for (i = 0; i < PARTY_SIZE; i++) { UndoMegaEvolution(i); - BattleFormChange(i, B_SIDE_PLAYER, FORM_CHANGE_BATTLE_END); + TryFormChange(i, B_SIDE_PLAYER, FORM_CHANGE_BATTLE_END); DoBurmyFormChange(i); } #if B_RECALCULATE_STATS >= GEN_5 @@ -5221,6 +5215,13 @@ static void HandleEndTurn_FinishBattle(void) } } #endif + // Clear battle mon species to avoid a bug on the next battle that causes + // healthboxes loading incorrectly due to it trying to create a Mega Indicator + // if the previous battler would've had. + for (i = 0; i < MAX_BATTLERS_COUNT; i++) + { + gBattleMons[i].species = SPECIES_NONE; + } gBattleMainFunc = FreeResetData_ReturnToOvOrDoEvolutions; gCB2_AfterEvolution = BattleMainCB2; } diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 060a9e7170da..51d3cfbe16e7 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -7914,22 +7914,6 @@ u32 IsAbilityStatusProtected(u32 battler) || IsShieldsDownProtected(battler); } -static void RecalcBattlerStats(u32 battler, struct Pokemon *mon) -{ - CalculateMonStats(mon); - gBattleMons[battler].level = GetMonData(mon, MON_DATA_LEVEL); - gBattleMons[battler].hp = GetMonData(mon, MON_DATA_HP); - gBattleMons[battler].maxHP = GetMonData(mon, MON_DATA_MAX_HP); - gBattleMons[battler].attack = GetMonData(mon, MON_DATA_ATK); - gBattleMons[battler].defense = GetMonData(mon, MON_DATA_DEF); - gBattleMons[battler].speed = GetMonData(mon, MON_DATA_SPEED); - gBattleMons[battler].spAttack = GetMonData(mon, MON_DATA_SPATK); - gBattleMons[battler].spDefense = GetMonData(mon, MON_DATA_SPDEF); - gBattleMons[battler].ability = GetMonAbility(mon); - gBattleMons[battler].type1 = gBaseStats[gBattleMons[battler].species].type1; - gBattleMons[battler].type2 = gBaseStats[gBattleMons[battler].species].type2; -} - static u32 GetHighestStatId(u32 battlerId) { u32 i, highestId = STAT_ATK, highestStat = gBattleMons[battlerId].attack; @@ -8870,17 +8854,7 @@ static void Cmd_various(void) // Change species. if (gBattlescriptCurrInstr[3] == 0) { - u16 primalSpecies; - gBattleStruct->mega.primalRevertedSpecies[gActiveBattler] = gBattleMons[gActiveBattler].species; - if (GetBattlerPosition(gActiveBattler) == B_POSITION_PLAYER_LEFT - || (GetBattlerPosition(gActiveBattler) == B_POSITION_PLAYER_RIGHT && !(gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_INGAME_PARTNER)))) - { - gBattleStruct->mega.playerPrimalRevertedSpecies = gBattleStruct->mega.primalRevertedSpecies[gActiveBattler]; - } - // Checks Primal Reversion - primalSpecies = GetPrimalReversionSpecies(gBattleStruct->mega.primalRevertedSpecies[gActiveBattler], gBattleMons[gActiveBattler].item); - - gBattleMons[gActiveBattler].species = primalSpecies; + gBattleMons[gActiveBattler].species = GetPrimalReversionSpecies(gBattleMons[gActiveBattler].species, gBattleMons[gActiveBattler].item); PREPARE_SPECIES_BUFFER(gBattleTextBuff1, gBattleMons[gActiveBattler].species); BtlController_EmitSetMonData(BUFFER_A, REQUEST_SPECIES_BATTLE, gBitTable[gBattlerPartyIndexes[gActiveBattler]], sizeof(gBattleMons[gActiveBattler].species), &gBattleMons[gActiveBattler].species); @@ -8890,7 +8864,6 @@ static void Cmd_various(void) else if (gBattlescriptCurrInstr[3] == 1) { RecalcBattlerStats(gActiveBattler, mon); - gBattleStruct->mega.primalRevertedPartyIds[GetBattlerSide(gActiveBattler)] |= gBitTable[gBattlerPartyIndexes[gActiveBattler]]; } // Update healthbox and elevation. else @@ -9606,15 +9579,7 @@ static void Cmd_various(void) return; case VARIOUS_JUMP_IF_CANT_REVERT_TO_PRIMAL: { - bool8 canDoPrimalReversion = FALSE; - - for (i = 0; i < EVOS_PER_MON; i++) - { - if (gEvolutionTable[gBattleMons[gActiveBattler].species][i].method == EVO_PRIMAL_REVERSION - && gEvolutionTable[gBattleMons[gActiveBattler].species][i].param == gBattleMons[gActiveBattler].item) - canDoPrimalReversion = TRUE; - } - if (!canDoPrimalReversion) + if (GetPrimalReversionSpecies(gBattleMons[gActiveBattler].species, gBattleMons[gActiveBattler].item) == SPECIES_NONE) gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); else gBattlescriptCurrInstr += 7; @@ -14109,7 +14074,7 @@ static void Cmd_handleballthrow(void) { BtlController_EmitBallThrowAnim(BUFFER_A, BALL_3_SHAKES_SUCCESS); MarkBattlerForControllerExec(gActiveBattler); - BattleFormChange(gBattlerPartyIndexes[gBattlerTarget], GET_BATTLER_SIDE(gBattlerTarget), FORM_CHANGE_BATTLE_END), + TryFormChange(gBattlerPartyIndexes[gBattlerTarget], GET_BATTLER_SIDE(gBattlerTarget), FORM_CHANGE_BATTLE_END), gBattlescriptCurrInstr = BattleScript_SuccessBallThrow; SetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_POKEBALL, &gLastUsedItem); @@ -14163,7 +14128,7 @@ static void Cmd_handleballthrow(void) if (IsCriticalCapture()) gBattleSpritesDataPtr->animationData->criticalCaptureSuccess = TRUE; - BattleFormChange(gBattlerPartyIndexes[gBattlerTarget], GET_BATTLER_SIDE(gBattlerTarget), FORM_CHANGE_BATTLE_END), + TryFormChange(gBattlerPartyIndexes[gBattlerTarget], GET_BATTLER_SIDE(gBattlerTarget), FORM_CHANGE_BATTLE_END), gBattlescriptCurrInstr = BattleScript_SuccessBallThrow; SetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_POKEBALL, &gLastUsedItem); diff --git a/src/battle_util.c b/src/battle_util.c index f39d2a03e5b8..729728ec0ee2 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -518,7 +518,7 @@ void HandleAction_Switch(void) if (gBattleResults.playerSwitchesCounter < 255) gBattleResults.playerSwitchesCounter++; - BattleFormChange(gBattlerPartyIndexes[gBattlerAttacker], GetBattlerSide(gBattlerAttacker), FORM_CHANGE_BATTLE_SWITCH); + TryFormChange(gBattlerPartyIndexes[gBattlerAttacker], GetBattlerSide(gBattlerAttacker), FORM_CHANGE_BATTLE_SWITCH); } void HandleAction_UseItem(void) @@ -8955,8 +8955,7 @@ static bool32 CanEvolve(u32 species) { if (gEvolutionTable[species][i].method && gEvolutionTable[species][i].method != EVO_MEGA_EVOLUTION - && gEvolutionTable[species][i].method != EVO_MOVE_MEGA_EVOLUTION - && gEvolutionTable[species][i].method != EVO_PRIMAL_REVERSION) + && gEvolutionTable[species][i].method != EVO_MOVE_MEGA_EVOLUTION) return TRUE; } return FALSE; @@ -9565,15 +9564,20 @@ u16 GetMegaEvolutionSpecies(u16 preEvoSpecies, u16 heldItemId) return SPECIES_NONE; } -u16 GetPrimalReversionSpecies(u16 preEvoSpecies, u16 heldItemId) +u16 GetPrimalReversionSpecies(u16 preSpecies, u16 heldItemId) { u32 i; + const struct FormChange *formChanges = gFormChangeTablePointers[preSpecies]; - for (i = 0; i < EVOS_PER_MON; i++) + if (formChanges != NULL) { - if (gEvolutionTable[preEvoSpecies][i].method == EVO_PRIMAL_REVERSION - && gEvolutionTable[preEvoSpecies][i].param == heldItemId) - return gEvolutionTable[preEvoSpecies][i].targetSpecies; + for (i = 0; formChanges[i].method != FORM_CHANGE_END; i++) + { + if (formChanges[i].method == FORM_CHANGE_PRIMAL_REVERSION + && formChanges[i].param1 == heldItemId + && formChanges[i].targetSpecies != preSpecies) + return formChanges[i].targetSpecies; + } } return SPECIES_NONE; } @@ -9675,12 +9679,6 @@ void UndoMegaEvolution(u32 monId) SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &gBattleStruct->mega.playerEvolvedSpecies); CalculateMonStats(&gPlayerParty[monId]); } - else if (gBattleStruct->mega.primalRevertedPartyIds[B_SIDE_PLAYER] & gBitTable[monId]) - { - gBattleStruct->mega.primalRevertedPartyIds[B_SIDE_PLAYER] &= ~(gBitTable[monId]); - SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &baseSpecies); - CalculateMonStats(&gPlayerParty[monId]); - } // While not exactly a mega evolution, Zygarde follows the same rules. else if (GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, NULL) == SPECIES_ZYGARDE_COMPLETE) { @@ -9690,17 +9688,23 @@ void UndoMegaEvolution(u32 monId) } } -void BattleFormChange(u32 monId, u32 side, u16 method) +bool32 IsBattlerPrimalReverted(u8 battlerId) +{ + return (gBaseStats[gBattleMons[battlerId].species].flags & SPECIES_FLAG_PRIMAL_REVERSION); +} + +void TryBattleFormChange(u8 battlerId, u16 method) { - u32 targetSpecies; + u16 targetSpecies; + u8 monId = gBattlerPartyIndexes[battlerId]; + u8 side = GET_BATTLER_SIDE(battlerId); struct Pokemon *party = (side == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty; targetSpecies = GetFormChangeTargetSpecies(&party[monId], method, 0); if (targetSpecies != SPECIES_NONE) { - TryToSetBattleFormChangeMoves(&party[monId], method); SetMonData(&party[monId], MON_DATA_SPECIES, &targetSpecies); - CalculateMonStats(&party[monId]); + RecalcBattlerStats(battlerId, &party[monId]); } } @@ -10362,3 +10366,19 @@ bool32 CanTargetBattler(u8 battlerAtk, u8 battlerDef, u16 move) return FALSE; // Pokémon affected by Heal Block cannot target allies with Pollen Puff return TRUE; } + +void RecalcBattlerStats(u32 battler, struct Pokemon *mon) +{ + CalculateMonStats(mon); + gBattleMons[battler].level = GetMonData(mon, MON_DATA_LEVEL); + gBattleMons[battler].hp = GetMonData(mon, MON_DATA_HP); + gBattleMons[battler].maxHP = GetMonData(mon, MON_DATA_MAX_HP); + gBattleMons[battler].attack = GetMonData(mon, MON_DATA_ATK); + gBattleMons[battler].defense = GetMonData(mon, MON_DATA_DEF); + gBattleMons[battler].speed = GetMonData(mon, MON_DATA_SPEED); + gBattleMons[battler].spAttack = GetMonData(mon, MON_DATA_SPATK); + gBattleMons[battler].spDefense = GetMonData(mon, MON_DATA_SPDEF); + gBattleMons[battler].ability = GetMonAbility(mon); + gBattleMons[battler].type1 = gBaseStats[gBattleMons[battler].species].type1; + gBattleMons[battler].type2 = gBaseStats[gBattleMons[battler].species].type2; +} diff --git a/src/data/pokemon/base_stats.h b/src/data/pokemon/base_stats.h index a161fbf9086c..a13ea59391a6 100644 --- a/src/data/pokemon/base_stats.h +++ b/src/data/pokemon/base_stats.h @@ -24117,7 +24117,7 @@ const struct BaseStats gBaseStats[] = .abilities = {ABILITY_PRIMORDIAL_SEA, ABILITY_PRIMORDIAL_SEA}, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, - .flags = SPECIES_FLAG_LEGENDARY, + .flags = SPECIES_FLAG_LEGENDARY | SPECIES_FLAG_PRIMAL_REVERSION, }, [SPECIES_GROUDON_PRIMAL] = @@ -24142,7 +24142,7 @@ const struct BaseStats gBaseStats[] = .abilities = {ABILITY_DESOLATE_LAND, ABILITY_DESOLATE_LAND}, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, - .flags = SPECIES_FLAG_LEGENDARY, + .flags = SPECIES_FLAG_LEGENDARY | SPECIES_FLAG_PRIMAL_REVERSION, }, [SPECIES_RATTATA_ALOLAN] = diff --git a/src/data/pokemon/evolution.h b/src/data/pokemon/evolution.h index 4f09867a6c32..0aaf8f90c75d 100644 --- a/src/data/pokemon/evolution.h +++ b/src/data/pokemon/evolution.h @@ -293,8 +293,6 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] = [SPECIES_METAGROSS] = {{EVO_MEGA_EVOLUTION, ITEM_METAGROSSITE, SPECIES_METAGROSS_MEGA}}, [SPECIES_LATIAS] = {{EVO_MEGA_EVOLUTION, ITEM_LATIASITE, SPECIES_LATIAS_MEGA}}, [SPECIES_LATIOS] = {{EVO_MEGA_EVOLUTION, ITEM_LATIOSITE, SPECIES_LATIOS_MEGA}}, - [SPECIES_KYOGRE] = {{EVO_PRIMAL_REVERSION, ITEM_BLUE_ORB, SPECIES_KYOGRE_PRIMAL}}, - [SPECIES_GROUDON] = {{EVO_PRIMAL_REVERSION, ITEM_RED_ORB, SPECIES_GROUDON_PRIMAL}}, [SPECIES_RAYQUAZA] = {{EVO_MOVE_MEGA_EVOLUTION, MOVE_DRAGON_ASCENT, SPECIES_RAYQUAZA_MEGA}}, #if P_GEN_4_POKEMON == TRUE diff --git a/src/data/pokemon/form_change_table_pointers.h b/src/data/pokemon/form_change_table_pointers.h index 63971f1325f9..a0cc805e9a6d 100644 --- a/src/data/pokemon/form_change_table_pointers.h +++ b/src/data/pokemon/form_change_table_pointers.h @@ -1,5 +1,9 @@ const struct FormChange *const gFormChangeTablePointers[NUM_SPECIES] = { + [SPECIES_KYOGRE] = sKyogreFormChangeTable, + [SPECIES_KYOGRE_PRIMAL] = sKyogreFormChangeTable, + [SPECIES_GROUDON] = sGroudonFormChangeTable, + [SPECIES_GROUDON_PRIMAL] = sGroudonFormChangeTable, #if P_GEN_4_POKEMON == TRUE [SPECIES_GIRATINA] = sGiratinaFormChangeTable, [SPECIES_GIRATINA_ORIGIN] = sGiratinaFormChangeTable, diff --git a/src/data/pokemon/form_change_tables.h b/src/data/pokemon/form_change_tables.h index 0586c8ac88ea..7342256ecd8c 100644 --- a/src/data/pokemon/form_change_tables.h +++ b/src/data/pokemon/form_change_tables.h @@ -47,6 +47,18 @@ #define DAY 1 #define NIGHT 2 +static const struct FormChange sKyogreFormChangeTable[] = { + {FORM_CHANGE_PRIMAL_REVERSION, SPECIES_KYOGRE_PRIMAL, ITEM_BLUE_ORB}, + {FORM_CHANGE_BATTLE_END, SPECIES_KYOGRE}, + {FORM_CHANGE_END}, +}; + +static const struct FormChange sGroudonFormChangeTable[] = { + {FORM_CHANGE_PRIMAL_REVERSION, SPECIES_GROUDON_PRIMAL, ITEM_RED_ORB}, + {FORM_CHANGE_BATTLE_END, SPECIES_GROUDON}, + {FORM_CHANGE_END}, +}; + #if P_GEN_4_POKEMON == TRUE static const struct FormChange sGiratinaFormChangeTable[] = { {FORM_CHANGE_ITEM_HOLD, SPECIES_GIRATINA, ITEM_NONE}, @@ -178,7 +190,7 @@ static const struct FormChange sXerneasFormChangeTable[] = { static const struct FormChange sHoopaFormChangeTable[] = { {FORM_CHANGE_ITEM_USE, SPECIES_HOOPA_UNBOUND, ITEM_PRISON_BOTTLE, SPECIES_HOOPA}, - // {FORM_CHANGE_WITHDRAW, SPECIES_HOOPA}, + {FORM_CHANGE_WITHDRAW, SPECIES_HOOPA}, {FORM_CHANGE_END}, }; #endif diff --git a/src/pokemon.c b/src/pokemon.c index b60e5a30ee30..ced0f67b9d6f 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -8397,6 +8397,16 @@ u16 GetFormChangeTargetSpeciesBoxMon(struct BoxPokemon *boxMon, u16 method, u32 case FORM_CHANGE_BATTLE_END: if (heldItem == formChanges[i].param1 || formChanges[i].param1 == ITEM_NONE) targetSpecies = formChanges[i].targetSpecies; + break; + case FORM_CHANGE_PRIMAL_REVERSION: + if (arg == formChanges[i].param1) + targetSpecies = formChanges[i].targetSpecies; + break; + case FORM_CHANGE_WITHDRAW: + case FORM_CHANGE_BATTLE_SWITCH: + case FORM_CHANGE_BATTLE_FAINT: + targetSpecies = formChanges[i].targetSpecies; + break; } } } @@ -8485,13 +8495,28 @@ bool32 ShouldShowFemaleDifferences(u16 species, u32 personality) return (gBaseStats[species].flags & SPECIES_FLAG_GENDER_DIFFERENCE) && GetGenderFromSpeciesAndPersonality(species, personality) == MON_FEMALE; } +void TryFormChange(u32 monId, u32 side, u16 method) +{ + u32 targetSpecies; + struct Pokemon *party = (side == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty; + + targetSpecies = GetFormChangeTargetSpecies(&party[monId], method, 0); + if (targetSpecies != SPECIES_NONE) + { + TryToSetBattleFormChangeMoves(&party[monId], method); + SetMonData(&party[monId], MON_DATA_SPECIES, &targetSpecies); + CalculateMonStats(&party[monId]); + } +} + void TryToSetBattleFormChangeMoves(struct Pokemon *mon, u16 method) { int i, j; u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL); const struct FormChange *formChanges = gFormChangeTablePointers[species]; - if (formChanges == NULL || (method != FORM_CHANGE_BATTLE_BEGIN && method != FORM_CHANGE_BATTLE_END)) + if (formChanges == NULL + || (method != FORM_CHANGE_BATTLE_BEGIN && method != FORM_CHANGE_BATTLE_END)) return; for (i = 0; formChanges[i].method != FORM_CHANGE_END; i++) From a57f6d184b9c0aa9f6d3af6a81aead19ea9e3552 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Tue, 1 Nov 2022 12:24:04 -0300 Subject: [PATCH 008/428] Fainting by poison in the overworld reverts forms --- include/constants/pokemon.h | 10 ++++----- src/battle_main.c | 2 +- src/data/pokemon/form_change_tables.h | 32 +++++++++++++-------------- src/field_poison.c | 3 +++ src/pokemon.c | 2 +- 5 files changed, 26 insertions(+), 23 deletions(-) diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h index 7dc250834e92..06e4be4f3417 100644 --- a/include/constants/pokemon.h +++ b/include/constants/pokemon.h @@ -320,11 +320,11 @@ #define FORM_CHANGE_ITEM_HOLD 1 #define FORM_CHANGE_ITEM_USE 2 #define FORM_CHANGE_MOVE 3 // Todo -#define FORM_CHANGE_WITHDRAW 4 // -#define FORM_CHANGE_BATTLE_BEGIN 5 -#define FORM_CHANGE_BATTLE_END 6 -#define FORM_CHANGE_BATTLE_SWITCH 7 -#define FORM_CHANGE_BATTLE_FAINT 8 +#define FORM_CHANGE_WITHDRAW 4 // Daycare done, Todo PC +#define FORM_CHANGE_FAINT 5 +#define FORM_CHANGE_BATTLE_BEGIN 6 +#define FORM_CHANGE_BATTLE_END 7 +#define FORM_CHANGE_BATTLE_SWITCH 8 #define FORM_CHANGE_PRIMAL_REVERSION 9 #define MON_PIC_WIDTH 64 diff --git a/src/battle_main.c b/src/battle_main.c index f58c0d43bbac..9d08a4e8c043 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -3247,7 +3247,7 @@ void FaintClearSetData(void) gBattleMons[gActiveBattler].type3 = TYPE_MYSTERY; Ai_UpdateFaintData(gActiveBattler); - TryFormChange(gBattlerPartyIndexes[gActiveBattler], GET_BATTLER_SIDE(gActiveBattler), FORM_CHANGE_BATTLE_FAINT); + TryFormChange(gBattlerPartyIndexes[gActiveBattler], GET_BATTLER_SIDE(gActiveBattler), FORM_CHANGE_FAINT); if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) UndoMegaEvolution(gBattlerPartyIndexes[gActiveBattler]); diff --git a/src/data/pokemon/form_change_tables.h b/src/data/pokemon/form_change_tables.h index 7342256ecd8c..b936808b6afd 100644 --- a/src/data/pokemon/form_change_tables.h +++ b/src/data/pokemon/form_change_tables.h @@ -116,20 +116,20 @@ static const struct FormChange sArceusFormChangeTable[] = { static const struct FormChange sDarmanitanFormChangeTable[] = { {FORM_CHANGE_BATTLE_SWITCH, SPECIES_DARMANITAN}, - {FORM_CHANGE_BATTLE_FAINT, SPECIES_DARMANITAN}, + {FORM_CHANGE_FAINT, SPECIES_DARMANITAN}, {FORM_CHANGE_BATTLE_END, SPECIES_DARMANITAN}, {FORM_CHANGE_END}, }; static const struct FormChange sDarmanitanGalarianFormChangeTable[] = { {FORM_CHANGE_BATTLE_SWITCH, SPECIES_DARMANITAN_GALARIAN}, - {FORM_CHANGE_BATTLE_FAINT, SPECIES_DARMANITAN_GALARIAN}, + {FORM_CHANGE_FAINT, SPECIES_DARMANITAN_GALARIAN}, {FORM_CHANGE_BATTLE_END, SPECIES_DARMANITAN_GALARIAN}, {FORM_CHANGE_END}, }; static const struct FormChange sMeloettaFormChangeTable[] = { - {FORM_CHANGE_BATTLE_FAINT, SPECIES_MELOETTA}, + {FORM_CHANGE_FAINT, SPECIES_MELOETTA}, {FORM_CHANGE_BATTLE_END, SPECIES_MELOETTA}, {FORM_CHANGE_END}, }; @@ -170,14 +170,14 @@ static const struct FormChange sGenesectFormChangeTable[] = { #if P_GEN_6_POKEMON == TRUE static const struct FormChange sGreninjaBattleBondFormChangeTable[] = { - {FORM_CHANGE_BATTLE_FAINT, SPECIES_GRENINJA_BATTLE_BOND}, + {FORM_CHANGE_FAINT, SPECIES_GRENINJA_BATTLE_BOND}, {FORM_CHANGE_BATTLE_END, SPECIES_GRENINJA_BATTLE_BOND}, {FORM_CHANGE_END}, }; static const struct FormChange sAegislashFormChangeTable[] = { {FORM_CHANGE_BATTLE_SWITCH, SPECIES_AEGISLASH}, - {FORM_CHANGE_BATTLE_FAINT, SPECIES_AEGISLASH}, + {FORM_CHANGE_FAINT, SPECIES_AEGISLASH}, {FORM_CHANGE_BATTLE_END, SPECIES_AEGISLASH}, {FORM_CHANGE_END}, }; @@ -205,7 +205,7 @@ static const struct FormChange sOricorioFormChangeTable[] = { }; static const struct FormChange sWishiwashiFormChangeTable[] = { {FORM_CHANGE_BATTLE_SWITCH, SPECIES_WISHIWASHI}, - {FORM_CHANGE_BATTLE_FAINT, SPECIES_WISHIWASHI}, + {FORM_CHANGE_FAINT, SPECIES_WISHIWASHI}, {FORM_CHANGE_BATTLE_END, SPECIES_WISHIWASHI}, {FORM_CHANGE_END}, }; @@ -233,50 +233,50 @@ static const struct FormChange sSilvallyFormChangeTable[] = { }; static const struct FormChange sMimikyuFormChangeTable[] = { - {FORM_CHANGE_BATTLE_FAINT, SPECIES_MIMIKYU}, + {FORM_CHANGE_FAINT, SPECIES_MIMIKYU}, {FORM_CHANGE_BATTLE_END, SPECIES_MIMIKYU}, {FORM_CHANGE_END}, }; static const struct FormChange sMiniorRedFormChangeTable[] = { {FORM_CHANGE_BATTLE_SWITCH, SPECIES_MINIOR_CORE_RED}, - {FORM_CHANGE_BATTLE_FAINT, SPECIES_MINIOR_CORE_RED}, + {FORM_CHANGE_FAINT, SPECIES_MINIOR_CORE_RED}, {FORM_CHANGE_BATTLE_END, SPECIES_MINIOR_CORE_RED}, {FORM_CHANGE_END}, }; static const struct FormChange sMiniorBlueFormChangeTable[] = { {FORM_CHANGE_BATTLE_SWITCH, SPECIES_MINIOR_CORE_BLUE}, - {FORM_CHANGE_BATTLE_FAINT, SPECIES_MINIOR_CORE_BLUE}, + {FORM_CHANGE_FAINT, SPECIES_MINIOR_CORE_BLUE}, {FORM_CHANGE_BATTLE_END, SPECIES_MINIOR_CORE_BLUE}, {FORM_CHANGE_END}, }; static const struct FormChange sMiniorGreenFormChangeTable[] = { {FORM_CHANGE_BATTLE_SWITCH, SPECIES_MINIOR_CORE_GREEN}, - {FORM_CHANGE_BATTLE_FAINT, SPECIES_MINIOR_CORE_GREEN}, + {FORM_CHANGE_FAINT, SPECIES_MINIOR_CORE_GREEN}, {FORM_CHANGE_BATTLE_END, SPECIES_MINIOR_CORE_GREEN}, {FORM_CHANGE_END}, }; static const struct FormChange sMiniorIndigoFormChangeTable[] = { {FORM_CHANGE_BATTLE_SWITCH, SPECIES_MINIOR_CORE_INDIGO}, - {FORM_CHANGE_BATTLE_FAINT, SPECIES_MINIOR_CORE_INDIGO}, + {FORM_CHANGE_FAINT, SPECIES_MINIOR_CORE_INDIGO}, {FORM_CHANGE_BATTLE_END, SPECIES_MINIOR_CORE_INDIGO}, {FORM_CHANGE_END}, }; static const struct FormChange sMiniorOrangeFormChangeTable[] = { {FORM_CHANGE_BATTLE_SWITCH, SPECIES_MINIOR_CORE_ORANGE}, - {FORM_CHANGE_BATTLE_FAINT, SPECIES_MINIOR_CORE_ORANGE}, + {FORM_CHANGE_FAINT, SPECIES_MINIOR_CORE_ORANGE}, {FORM_CHANGE_BATTLE_END, SPECIES_MINIOR_CORE_ORANGE}, {FORM_CHANGE_END}, }; static const struct FormChange sMiniorVioletFormChangeTable[] = { {FORM_CHANGE_BATTLE_SWITCH, SPECIES_MINIOR_CORE_VIOLET}, - {FORM_CHANGE_BATTLE_FAINT, SPECIES_MINIOR_CORE_VIOLET}, + {FORM_CHANGE_FAINT, SPECIES_MINIOR_CORE_VIOLET}, {FORM_CHANGE_BATTLE_END, SPECIES_MINIOR_CORE_VIOLET}, {FORM_CHANGE_END}, }; static const struct FormChange sMiniorYellowFormChangeTable[] = { {FORM_CHANGE_BATTLE_SWITCH, SPECIES_MINIOR_CORE_YELLOW}, - {FORM_CHANGE_BATTLE_FAINT, SPECIES_MINIOR_CORE_YELLOW}, + {FORM_CHANGE_FAINT, SPECIES_MINIOR_CORE_YELLOW}, {FORM_CHANGE_BATTLE_END, SPECIES_MINIOR_CORE_YELLOW}, {FORM_CHANGE_END}, }; @@ -286,14 +286,14 @@ static const struct FormChange sMiniorYellowFormChangeTable[] = { #if P_GEN_8_POKEMON == TRUE static const struct FormChange sCramorantFormChangeTable[] = { {FORM_CHANGE_BATTLE_SWITCH, SPECIES_CRAMORANT}, - {FORM_CHANGE_BATTLE_FAINT, SPECIES_CRAMORANT}, + {FORM_CHANGE_FAINT, SPECIES_CRAMORANT}, {FORM_CHANGE_BATTLE_END, SPECIES_CRAMORANT}, {FORM_CHANGE_END}, }; static const struct FormChange sMorpekoFormChangeTable[] = { {FORM_CHANGE_BATTLE_SWITCH, SPECIES_MORPEKO}, - {FORM_CHANGE_BATTLE_FAINT, SPECIES_MORPEKO}, + {FORM_CHANGE_FAINT, SPECIES_MORPEKO}, {FORM_CHANGE_BATTLE_END, SPECIES_MORPEKO}, {FORM_CHANGE_END}, }; diff --git a/src/field_poison.c b/src/field_poison.c index fcb47acdb8b2..68a345919b08 100644 --- a/src/field_poison.c +++ b/src/field_poison.c @@ -128,7 +128,10 @@ s32 DoPoisonFieldEffect(void) // Apply poison damage hp = GetMonData(pokemon, MON_DATA_HP); if (hp == 0 || --hp == 0) + { + TryFormChange(i, B_SIDE_PLAYER, FORM_CHANGE_FAINT); numFainted++; + } SetMonData(pokemon, MON_DATA_HP, &hp); numPoisoned++; diff --git a/src/pokemon.c b/src/pokemon.c index ced0f67b9d6f..c296e14136e8 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -8404,7 +8404,7 @@ u16 GetFormChangeTargetSpeciesBoxMon(struct BoxPokemon *boxMon, u16 method, u32 break; case FORM_CHANGE_WITHDRAW: case FORM_CHANGE_BATTLE_SWITCH: - case FORM_CHANGE_BATTLE_FAINT: + case FORM_CHANGE_FAINT: targetSpecies = formChanges[i].targetSpecies; break; } From f5b900e2ef23713aa83096eb843c8fe33785e9b4 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Tue, 1 Nov 2022 15:02:22 -0300 Subject: [PATCH 009/428] Defaults Primal Reversion indicator to Alpha when item not Red Orb. --- src/battle_interface.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/battle_interface.c b/src/battle_interface.c index ed756592f80a..48882bb266cf 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -1563,12 +1563,12 @@ u32 CreateMegaIndicatorSprite(u32 battlerId, u32 which) } else if (IsBattlerPrimalReverted(battlerId)) { - if (GET_BASE_SPECIES_ID(gBattleMons[battlerId].species) == SPECIES_GROUDON) + if (gBattleMons[battlerId].item == ITEM_RED_ORB) { LoadSpritePalette(&sSpritePalette_OmegaIndicator); LoadSpriteSheet(&sSpriteSheet_OmegaIndicator); } - else if (GET_BASE_SPECIES_ID(gBattleMons[battlerId].species) == SPECIES_KYOGRE) + else // ITEM_BLUE_ORB { LoadSpritePalette(&sSpritePalette_AlphaIndicator); LoadSpriteSheet(&sSpriteSheet_AlphaIndicator); @@ -1592,9 +1592,9 @@ u32 CreateMegaIndicatorSprite(u32 battlerId, u32 which) } else if (IsBattlerPrimalReverted(battlerId)) { - if (GET_BASE_SPECIES_ID(gBattleMons[battlerId].species) == SPECIES_GROUDON) + if (gBattleMons[battlerId].item == ITEM_RED_ORB) spriteId = CreateSpriteAtEnd(&sSpriteTemplate_OmegaIndicator, x, y, 0); - else if (GET_BASE_SPECIES_ID(gBattleMons[battlerId].species) == SPECIES_KYOGRE) + else // ITEM_BLUE_ORB spriteId = CreateSpriteAtEnd(&sSpriteTemplate_AlphaIndicator, x, y, 0); } From fa8b1b9c053fb5360ff0ba2c702acdaad4acc066 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Tue, 1 Nov 2022 15:02:45 -0300 Subject: [PATCH 010/428] Updated descriptions of form change constants --- src/data/pokemon/form_change_tables.h | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/data/pokemon/form_change_tables.h b/src/data/pokemon/form_change_tables.h index b936808b6afd..1f0dc85da101 100644 --- a/src/data/pokemon/form_change_tables.h +++ b/src/data/pokemon/form_change_tables.h @@ -20,11 +20,11 @@ FORM_CHANGE_WITHDRAW: Form change activates when the Pokémon is withdrawn from the PC or Daycare. - no parameters + No parameters. -FORM_CHANGE_SWITCH: - Form change activates when the Pokémon is switched out in battle. - no parameters +FORM_CHANGE_FAINT: + Form change activates when the Pokémon faints, either in battle or in the overworld by poison. + No parameters. FORM_CHANGE_BATTLE_BEGIN: Form change activates when the Pokémon is sent out at the beginning of a battle @@ -37,6 +37,15 @@ param1 = item to hold, optional param2 = a move that will be replaced, optional param3 = a new move to replace it with, optional + +FORM_CHANGE_BATTLE_SWITCH: + Form change activates when the Pokémon is switched out in battle. + No parameters. + +FORM_CHANGE_PRIMAL_REVERSION: + Form change activates when entering battle with the specified item. If the item is a Red Orb, + it uses the Omega Symbol for the animation and icon. Otherwise, it defaults to Alpha. + param1 = item to hold, required. */ // FORM_CHANGE_MOVE param2 Arguments From 797c5514d3a39332f8df1eaba967dc7959bc2eb6 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Tue, 1 Nov 2022 18:37:23 -0300 Subject: [PATCH 011/428] Mega Evolution in form change tables --- include/battle.h | 3 - include/battle_util.h | 1 + include/constants/pokemon.h | 6 +- src/battle_interface.c | 13 +- src/battle_script_commands.c | 14 +- src/battle_util.c | 47 +-- src/data/pokemon/evolution.h | 49 --- src/data/pokemon/form_change_table_pointers.h | 94 +++++ src/data/pokemon/form_change_tables.h | 323 ++++++++++++++++++ 9 files changed, 453 insertions(+), 97 deletions(-) diff --git a/include/battle.h b/include/battle.h index ff5d698abf0b..0ff70ee707d5 100644 --- a/include/battle.h +++ b/include/battle.h @@ -468,10 +468,7 @@ struct LinkBattlerHeader struct MegaEvolutionData { u8 toEvolve; // As flags using gBitTable. - u8 evolvedPartyIds[2]; // As flags using gBitTable; bool8 alreadyEvolved[4]; // Array id is used for mon position. - u16 evolvedSpecies[MAX_BATTLERS_COUNT]; - u16 playerEvolvedSpecies; u8 battlerId; bool8 playerSelect; u8 triggerSpriteId; diff --git a/include/battle_util.h b/include/battle_util.h index 5a0990950971..e1b890ebfed3 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -149,6 +149,7 @@ u16 GetPrimalReversionSpecies(u16 preSpecies, u16 heldItemId); u16 GetWishMegaEvolutionSpecies(u16 preEvoSpecies, u16 moveId1, u16 moveId2, u16 moveId3, u16 moveId4); bool32 CanMegaEvolve(u8 battlerId); void UndoMegaEvolution(u32 monId); +bool32 IsBattlerMegaEvolved(u8 battlerId); bool32 IsBattlerPrimalReverted(u8 battlerId); void TryBattleFormChange(u8 battlerId, u16 method); bool32 DoBattlersShareType(u32 battler1, u32 battler2); diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h index 06e4be4f3417..f31fa8d6ccd8 100644 --- a/include/constants/pokemon.h +++ b/include/constants/pokemon.h @@ -264,8 +264,6 @@ #define F_SUMMARY_SCREEN_FLIP_SPRITE 0x80 // Evolution types -#define EVO_MEGA_EVOLUTION 0xffff // Not an actual evolution, used to temporarily mega evolve in battle. -#define EVO_MOVE_MEGA_EVOLUTION 0xfffe // Mega Evolution that checks for a move instead of held item. #define EVO_FRIENDSHIP 1 // Pokémon levels up with friendship ≥ 220 #define EVO_FRIENDSHIP_DAY 2 // Pokémon levels up during the day with friendship ≥ 220 #define EVO_FRIENDSHIP_NIGHT 3 // Pokémon levels up at night with friendship ≥ 220 @@ -325,7 +323,9 @@ #define FORM_CHANGE_BATTLE_BEGIN 6 #define FORM_CHANGE_BATTLE_END 7 #define FORM_CHANGE_BATTLE_SWITCH 8 -#define FORM_CHANGE_PRIMAL_REVERSION 9 +#define FORM_CHANGE_MEGA_EVOLUTION_ITEM 9 +#define FORM_CHANGE_MEGA_EVOLUTION_MOVE 10 +#define FORM_CHANGE_PRIMAL_REVERSION 11 #define MON_PIC_WIDTH 64 #define MON_PIC_HEIGHT 64 diff --git a/src/battle_interface.c b/src/battle_interface.c index 48882bb266cf..c3d97f1379a5 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -871,8 +871,7 @@ u8 CreateBattlerHealthboxSprites(u8 battlerId) healthBarSpritePtr->invisible = TRUE; // Create mega indicator sprite if is a mega evolved or a primal reverted mon. - if ((gBattleStruct->mega.evolvedPartyIds[GetBattlerSide(battlerId)] & gBitTable[gBattlerPartyIndexes[battlerId]]) - || IsBattlerPrimalReverted(battlerId)) + if (IsBattlerMegaEvolved(battlerId) || IsBattlerPrimalReverted(battlerId)) { megaIndicatorSpriteId = CreateMegaIndicatorSprite(battlerId, 0); gSprites[megaIndicatorSpriteId].invisible = TRUE; @@ -979,8 +978,7 @@ void SetHealthboxSpriteVisible(u8 healthboxSpriteId) gSprites[healthboxSpriteId].invisible = FALSE; gSprites[gSprites[healthboxSpriteId].hMain_HealthBarSpriteId].invisible = FALSE; gSprites[gSprites[healthboxSpriteId].oam.affineParam].invisible = FALSE; - if ((gBattleStruct->mega.evolvedPartyIds[GetBattlerSide(battlerId)] & gBitTable[gBattlerPartyIndexes[battlerId]]) - || IsBattlerPrimalReverted(battlerId)) + if (IsBattlerMegaEvolved(battlerId) || IsBattlerPrimalReverted(battlerId)) { u8 spriteId = GetMegaIndicatorSpriteId(healthboxSpriteId); if (spriteId != 0xFF) @@ -1104,8 +1102,7 @@ static void UpdateLvlInHealthbox(u8 healthboxSpriteId, u8 lvl) u8 battler = gSprites[healthboxSpriteId].hMain_Battler; // Don't print Lv char if mon is mega evolved or primal reverted. - if ((gBattleStruct->mega.evolvedPartyIds[GetBattlerSide(battler)] & gBitTable[gBattlerPartyIndexes[battler]]) - || IsBattlerPrimalReverted(battler)) + if (IsBattlerMegaEvolved(battler) || IsBattlerPrimalReverted(battler)) { objVram = ConvertIntToDecimalStringN(text, lvl, STR_CONV_MODE_LEFT_ALIGN, 3); xPos = 5 * (3 - (objVram - (text + 2))) - 1; @@ -1556,7 +1553,7 @@ u32 CreateMegaIndicatorSprite(u32 battlerId, u32 which) u32 spriteId, position; s16 x, y; - if (gBattleStruct->mega.evolvedPartyIds[GetBattlerSide(battlerId)] & gBitTable[gBattlerPartyIndexes[battlerId]]) + if (IsBattlerMegaEvolved(battlerId)) { LoadSpritePalette(&sSpritePalette_MegaIndicator); LoadSpriteSheet(&sSpriteSheet_MegaIndicator); @@ -1586,7 +1583,7 @@ u32 CreateMegaIndicatorSprite(u32 battlerId, u32 which) else if (gBattleMons[battlerId].level < 10) x += 5; - if (gBattleStruct->mega.evolvedPartyIds[GetBattlerSide(battlerId)] & gBitTable[gBattlerPartyIndexes[battlerId]]) + if (IsBattlerMegaEvolved(battlerId)) { spriteId = CreateSpriteAtEnd(&sSpriteTemplate_MegaIndicator, x, y, 0); } diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 51d3cfbe16e7..6cc2bc323a22 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -8807,20 +8807,11 @@ static void Cmd_various(void) // Change species. if (gBattlescriptCurrInstr[3] == 0) { - u16 megaSpecies; - gBattleStruct->mega.evolvedSpecies[gActiveBattler] = gBattleMons[gActiveBattler].species; - if (GetBattlerPosition(gActiveBattler) == B_POSITION_PLAYER_LEFT - || (GetBattlerPosition(gActiveBattler) == B_POSITION_PLAYER_RIGHT && !(gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_INGAME_PARTNER)))) - { - gBattleStruct->mega.playerEvolvedSpecies = gBattleStruct->mega.evolvedSpecies[gActiveBattler]; - } //Checks regular Mega Evolution - megaSpecies = GetMegaEvolutionSpecies(gBattleStruct->mega.evolvedSpecies[gActiveBattler], gBattleMons[gActiveBattler].item); + u16 megaSpecies = GetMegaEvolutionSpecies(gBattleMons[gActiveBattler].species, gBattleMons[gActiveBattler].item); //Checks Wish Mega Evolution if (megaSpecies == SPECIES_NONE) - { - megaSpecies = GetWishMegaEvolutionSpecies(gBattleStruct->mega.evolvedSpecies[gActiveBattler], gBattleMons[gActiveBattler].moves[0], gBattleMons[gActiveBattler].moves[1], gBattleMons[gActiveBattler].moves[2], gBattleMons[gActiveBattler].moves[3]); - } + megaSpecies = GetWishMegaEvolutionSpecies(gBattleMons[gActiveBattler].species, gBattleMons[gActiveBattler].moves[0], gBattleMons[gActiveBattler].moves[1], gBattleMons[gActiveBattler].moves[2], gBattleMons[gActiveBattler].moves[3]); gBattleMons[gActiveBattler].species = megaSpecies; PREPARE_SPECIES_BUFFER(gBattleTextBuff1, gBattleMons[gActiveBattler].species); @@ -8833,7 +8824,6 @@ static void Cmd_various(void) { RecalcBattlerStats(gActiveBattler, mon); gBattleStruct->mega.alreadyEvolved[GetBattlerPosition(gActiveBattler)] = TRUE; - gBattleStruct->mega.evolvedPartyIds[GetBattlerSide(gActiveBattler)] |= gBitTable[gBattlerPartyIndexes[gActiveBattler]]; } // Update healthbox and elevation. else diff --git a/src/battle_util.c b/src/battle_util.c index 729728ec0ee2..d4efdb898824 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -8953,9 +8953,7 @@ static bool32 CanEvolve(u32 species) for (i = 0; i < EVOS_PER_MON; i++) { - if (gEvolutionTable[species][i].method - && gEvolutionTable[species][i].method != EVO_MEGA_EVOLUTION - && gEvolutionTable[species][i].method != EVO_MOVE_MEGA_EVOLUTION) + if (gEvolutionTable[species][i].method) return TRUE; } return FALSE; @@ -9554,12 +9552,17 @@ bool32 IsPartnerMonFromSameTrainer(u8 battlerId) u16 GetMegaEvolutionSpecies(u16 preEvoSpecies, u16 heldItemId) { u32 i; + const struct FormChange *formChanges = gFormChangeTablePointers[preEvoSpecies]; - for (i = 0; i < EVOS_PER_MON; i++) + if (formChanges != NULL) { - if (gEvolutionTable[preEvoSpecies][i].method == EVO_MEGA_EVOLUTION - && gEvolutionTable[preEvoSpecies][i].param == heldItemId) - return gEvolutionTable[preEvoSpecies][i].targetSpecies; + for (i = 0; formChanges[i].method != FORM_CHANGE_END; i++) + { + if ((formChanges[i].method == FORM_CHANGE_MEGA_EVOLUTION_ITEM + && formChanges[i].param1 == heldItemId) + && formChanges[i].targetSpecies != preEvoSpecies) + return formChanges[i].targetSpecies; + } } return SPECIES_NONE; } @@ -9584,15 +9587,18 @@ u16 GetPrimalReversionSpecies(u16 preSpecies, u16 heldItemId) u16 GetWishMegaEvolutionSpecies(u16 preEvoSpecies, u16 moveId1, u16 moveId2, u16 moveId3, u16 moveId4) { - u32 i, par; + u32 i, param; + const struct FormChange *formChanges = gFormChangeTablePointers[preEvoSpecies]; - for (i = 0; i < EVOS_PER_MON; i++) + if (formChanges != NULL) { - if (gEvolutionTable[preEvoSpecies][i].method == EVO_MOVE_MEGA_EVOLUTION) + for (i = 0; formChanges[i].method != FORM_CHANGE_END; i++) { - par = gEvolutionTable[preEvoSpecies][i].param; - if (par == moveId1 || par == moveId2 || par == moveId3 || par == moveId4) - return gEvolutionTable[preEvoSpecies][i].targetSpecies; + param = formChanges[i].param1; + if ((formChanges[i].method == FORM_CHANGE_MEGA_EVOLUTION_MOVE + && (param == moveId1 || param == moveId2 || param == moveId3 || param == moveId4)) + && formChanges[i].targetSpecies != preEvoSpecies) + return formChanges[i].targetSpecies; } } return SPECIES_NONE; @@ -9671,16 +9677,8 @@ bool32 CanMegaEvolve(u8 battlerId) void UndoMegaEvolution(u32 monId) { - u16 baseSpecies = GET_BASE_SPECIES_ID(GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES)); - - if (gBattleStruct->mega.evolvedPartyIds[B_SIDE_PLAYER] & gBitTable[monId]) - { - gBattleStruct->mega.evolvedPartyIds[B_SIDE_PLAYER] &= ~(gBitTable[monId]); - SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &gBattleStruct->mega.playerEvolvedSpecies); - CalculateMonStats(&gPlayerParty[monId]); - } // While not exactly a mega evolution, Zygarde follows the same rules. - else if (GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, NULL) == SPECIES_ZYGARDE_COMPLETE) + if (GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, NULL) == SPECIES_ZYGARDE_COMPLETE) { SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &gBattleStruct->changedSpecies[monId]); gBattleStruct->changedSpecies[monId] = 0; @@ -9688,6 +9686,11 @@ void UndoMegaEvolution(u32 monId) } } +bool32 IsBattlerMegaEvolved(u8 battlerId) +{ + return (gBaseStats[gBattleMons[battlerId].species].flags & SPECIES_FLAG_MEGA_EVOLUTION); +} + bool32 IsBattlerPrimalReverted(u8 battlerId) { return (gBaseStats[gBattleMons[battlerId].species].flags & SPECIES_FLAG_PRIMAL_REVERSION); diff --git a/src/data/pokemon/evolution.h b/src/data/pokemon/evolution.h index 0aaf8f90c75d..20279043fe3a 100644 --- a/src/data/pokemon/evolution.h +++ b/src/data/pokemon/evolution.h @@ -2,22 +2,16 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] = { [SPECIES_BULBASAUR] = {{EVO_LEVEL, 16, SPECIES_IVYSAUR}}, [SPECIES_IVYSAUR] = {{EVO_LEVEL, 32, SPECIES_VENUSAUR}}, - [SPECIES_VENUSAUR] = {{EVO_MEGA_EVOLUTION, ITEM_VENUSAURITE, SPECIES_VENUSAUR_MEGA}}, [SPECIES_CHARMANDER] = {{EVO_LEVEL, 16, SPECIES_CHARMELEON}}, [SPECIES_CHARMELEON] = {{EVO_LEVEL, 36, SPECIES_CHARIZARD}}, - [SPECIES_CHARIZARD] = {{EVO_MEGA_EVOLUTION, ITEM_CHARIZARDITE_X, SPECIES_CHARIZARD_MEGA_X}, - {EVO_MEGA_EVOLUTION, ITEM_CHARIZARDITE_Y, SPECIES_CHARIZARD_MEGA_Y}}, [SPECIES_SQUIRTLE] = {{EVO_LEVEL, 16, SPECIES_WARTORTLE}}, [SPECIES_WARTORTLE] = {{EVO_LEVEL, 36, SPECIES_BLASTOISE}}, - [SPECIES_BLASTOISE] = {{EVO_MEGA_EVOLUTION, ITEM_BLASTOISINITE, SPECIES_BLASTOISE_MEGA}}, [SPECIES_CATERPIE] = {{EVO_LEVEL, 7, SPECIES_METAPOD}}, [SPECIES_METAPOD] = {{EVO_LEVEL, 10, SPECIES_BUTTERFREE}}, [SPECIES_WEEDLE] = {{EVO_LEVEL, 7, SPECIES_KAKUNA}}, [SPECIES_KAKUNA] = {{EVO_LEVEL, 10, SPECIES_BEEDRILL}}, - [SPECIES_BEEDRILL] = {{EVO_MEGA_EVOLUTION, ITEM_BEEDRILLITE, SPECIES_BEEDRILL_MEGA}}, [SPECIES_PIDGEY] = {{EVO_LEVEL, 18, SPECIES_PIDGEOTTO}}, [SPECIES_PIDGEOTTO] = {{EVO_LEVEL, 36, SPECIES_PIDGEOT}}, - [SPECIES_PIDGEOT] = {{EVO_MEGA_EVOLUTION, ITEM_PIDGEOTITE, SPECIES_PIDGEOT_MEGA}}, [SPECIES_RATTATA] = {{EVO_LEVEL, 20, SPECIES_RATICATE}}, [SPECIES_SPEAROW] = {{EVO_LEVEL, 20, SPECIES_FEAROW}}, [SPECIES_EKANS] = {{EVO_LEVEL, 22, SPECIES_ARBOK}}, @@ -48,7 +42,6 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] = {EVO_TRADE_ITEM, ITEM_KINGS_ROCK, SPECIES_POLITOED}}, [SPECIES_ABRA] = {{EVO_LEVEL, 16, SPECIES_KADABRA}}, [SPECIES_KADABRA] = {{EVO_TRADE, 0, SPECIES_ALAKAZAM}}, - [SPECIES_ALAKAZAM] = {{EVO_MEGA_EVOLUTION, ITEM_ALAKAZITE, SPECIES_ALAKAZAM_MEGA}}, [SPECIES_MACHOP] = {{EVO_LEVEL, 28, SPECIES_MACHOKE}}, [SPECIES_MACHOKE] = {{EVO_TRADE, 0, SPECIES_MACHAMP}}, [SPECIES_BELLSPROUT] = {{EVO_LEVEL, 21, SPECIES_WEEPINBELL}}, @@ -59,7 +52,6 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] = [SPECIES_PONYTA] = {{EVO_LEVEL, 40, SPECIES_RAPIDASH}}, [SPECIES_SLOWPOKE] = {{EVO_LEVEL, 37, SPECIES_SLOWBRO}, {EVO_TRADE_ITEM, ITEM_KINGS_ROCK, SPECIES_SLOWKING}}, - [SPECIES_SLOWBRO] = {{EVO_MEGA_EVOLUTION, ITEM_SLOWBRONITE, SPECIES_SLOWBRO_MEGA}}, [SPECIES_MAGNEMITE] = {{EVO_LEVEL, 30, SPECIES_MAGNETON}}, #if P_GEN_4_POKEMON == TRUE [SPECIES_MAGNETON] = {{EVO_MAPSEC, MAPSEC_NEW_MAUVILLE, SPECIES_MAGNEZONE}, @@ -71,7 +63,6 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] = [SPECIES_SHELLDER] = {{EVO_ITEM, ITEM_WATER_STONE, SPECIES_CLOYSTER}}, [SPECIES_GASTLY] = {{EVO_LEVEL, 25, SPECIES_HAUNTER}}, [SPECIES_HAUNTER] = {{EVO_TRADE, 0, SPECIES_GENGAR}}, - [SPECIES_GENGAR] = {{EVO_MEGA_EVOLUTION, ITEM_GENGARITE, SPECIES_GENGAR_MEGA}}, [SPECIES_ONIX] = {{EVO_TRADE_ITEM, ITEM_METAL_COAT, SPECIES_STEELIX}}, [SPECIES_DROWZEE] = {{EVO_LEVEL, 26, SPECIES_HYPNO}}, [SPECIES_KRABBY] = {{EVO_LEVEL, 28, SPECIES_KINGLER}}, @@ -92,7 +83,6 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] = #if P_GEN_4_POKEMON == TRUE [SPECIES_TANGELA] = {{EVO_MOVE, MOVE_ANCIENT_POWER, SPECIES_TANGROWTH}}, #endif - [SPECIES_KANGASKHAN] = {{EVO_MEGA_EVOLUTION, ITEM_KANGASKHANITE, SPECIES_KANGASKHAN_MEGA}}, [SPECIES_HORSEA] = {{EVO_LEVEL, 32, SPECIES_SEADRA}}, [SPECIES_SEADRA] = {{EVO_TRADE_ITEM, ITEM_DRAGON_SCALE, SPECIES_KINGDRA}}, [SPECIES_GOLDEEN] = {{EVO_LEVEL, 33, SPECIES_SEAKING}}, @@ -102,9 +92,7 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] = [SPECIES_ELECTABUZZ] = {{EVO_TRADE_ITEM, ITEM_ELECTIRIZER, SPECIES_ELECTIVIRE}}, [SPECIES_MAGMAR] = {{EVO_TRADE_ITEM, ITEM_MAGMARIZER, SPECIES_MAGMORTAR}}, #endif - [SPECIES_PINSIR] = {{EVO_MEGA_EVOLUTION, ITEM_PINSIRITE, SPECIES_PINSIR_MEGA}}, [SPECIES_MAGIKARP] = {{EVO_LEVEL, 20, SPECIES_GYARADOS}}, - [SPECIES_GYARADOS] = {{EVO_MEGA_EVOLUTION, ITEM_GYARADOSITE, SPECIES_GYARADOS_MEGA}}, [SPECIES_EEVEE] = {{EVO_ITEM, ITEM_THUNDER_STONE, SPECIES_JOLTEON}, {EVO_ITEM, ITEM_WATER_STONE, SPECIES_VAPOREON}, {EVO_ITEM, ITEM_FIRE_STONE, SPECIES_FLAREON}, @@ -123,11 +111,8 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] = [SPECIES_PORYGON] = {{EVO_TRADE_ITEM, ITEM_UPGRADE, SPECIES_PORYGON2}}, [SPECIES_OMANYTE] = {{EVO_LEVEL, 40, SPECIES_OMASTAR}}, [SPECIES_KABUTO] = {{EVO_LEVEL, 40, SPECIES_KABUTOPS}}, - [SPECIES_AERODACTYL] = {{EVO_MEGA_EVOLUTION, ITEM_AERODACTYLITE, SPECIES_AERODACTYL_MEGA}}, [SPECIES_DRATINI] = {{EVO_LEVEL, 30, SPECIES_DRAGONAIR}}, [SPECIES_DRAGONAIR] = {{EVO_LEVEL, 55, SPECIES_DRAGONITE}}, - [SPECIES_MEWTWO] = {{EVO_MEGA_EVOLUTION, ITEM_MEWTWONITE_X, SPECIES_MEWTWO_MEGA_X}, - {EVO_MEGA_EVOLUTION, ITEM_MEWTWONITE_Y, SPECIES_MEWTWO_MEGA_Y}}, [SPECIES_CHIKORITA] = {{EVO_LEVEL, 16, SPECIES_BAYLEEF}}, [SPECIES_BAYLEEF] = {{EVO_LEVEL, 32, SPECIES_MEGANIUM}}, [SPECIES_CYNDAQUIL] = {{EVO_LEVEL, 14, SPECIES_QUILAVA}}, @@ -149,7 +134,6 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] = [SPECIES_NATU] = {{EVO_LEVEL, 25, SPECIES_XATU}}, [SPECIES_MAREEP] = {{EVO_LEVEL, 15, SPECIES_FLAAFFY}}, [SPECIES_FLAAFFY] = {{EVO_LEVEL, 30, SPECIES_AMPHAROS}}, - [SPECIES_AMPHAROS] = {{EVO_MEGA_EVOLUTION, ITEM_AMPHAROSITE, SPECIES_AMPHAROS_MEGA}}, [SPECIES_MARILL] = {{EVO_LEVEL, 18, SPECIES_AZUMARILL}}, [SPECIES_HOPPIP] = {{EVO_LEVEL, 18, SPECIES_SKIPLOOM}}, [SPECIES_SKIPLOOM] = {{EVO_LEVEL, 27, SPECIES_JUMPLUFF}}, @@ -167,10 +151,7 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] = #if P_GEN_4_POKEMON == TRUE [SPECIES_GLIGAR] = {{EVO_ITEM_HOLD_NIGHT, ITEM_RAZOR_FANG, SPECIES_GLISCOR}}, #endif - [SPECIES_STEELIX] = {{EVO_MEGA_EVOLUTION, ITEM_STEELIXITE, SPECIES_STEELIX_MEGA}}, [SPECIES_SNUBBULL] = {{EVO_LEVEL, 23, SPECIES_GRANBULL}}, - [SPECIES_SCIZOR] = {{EVO_MEGA_EVOLUTION, ITEM_SCIZORITE, SPECIES_SCIZOR_MEGA}}, - [SPECIES_HERACROSS] = {{EVO_MEGA_EVOLUTION, ITEM_HERACRONITE, SPECIES_HERACROSS_MEGA}}, #if P_GEN_4_POKEMON == TRUE [SPECIES_SNEASEL] = {{EVO_ITEM_HOLD_NIGHT, ITEM_RAZOR_CLAW, SPECIES_WEAVILE}}, #endif @@ -182,7 +163,6 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] = #endif [SPECIES_REMORAID] = {{EVO_LEVEL, 25, SPECIES_OCTILLERY}}, [SPECIES_HOUNDOUR] = {{EVO_LEVEL, 24, SPECIES_HOUNDOOM}}, - [SPECIES_HOUNDOOM] = {{EVO_MEGA_EVOLUTION, ITEM_HOUNDOOMINITE, SPECIES_HOUNDOOM_MEGA}}, [SPECIES_PHANPY] = {{EVO_LEVEL, 25, SPECIES_DONPHAN}}, #if P_GEN_4_POKEMON == TRUE [SPECIES_PORYGON2] = {{EVO_TRADE_ITEM, ITEM_DUBIOUS_DISC, SPECIES_PORYGON_Z}}, @@ -195,16 +175,12 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] = [SPECIES_MAGBY] = {{EVO_LEVEL, 30, SPECIES_MAGMAR}}, [SPECIES_LARVITAR] = {{EVO_LEVEL, 30, SPECIES_PUPITAR}}, [SPECIES_PUPITAR] = {{EVO_LEVEL, 55, SPECIES_TYRANITAR}}, - [SPECIES_TYRANITAR] = {{EVO_MEGA_EVOLUTION, ITEM_TYRANITARITE, SPECIES_TYRANITAR_MEGA}}, [SPECIES_TREECKO] = {{EVO_LEVEL, 16, SPECIES_GROVYLE}}, [SPECIES_GROVYLE] = {{EVO_LEVEL, 36, SPECIES_SCEPTILE}}, - [SPECIES_SCEPTILE] = {{EVO_MEGA_EVOLUTION, ITEM_SCEPTILITE, SPECIES_SCEPTILE_MEGA}}, [SPECIES_TORCHIC] = {{EVO_LEVEL, 16, SPECIES_COMBUSKEN}}, [SPECIES_COMBUSKEN] = {{EVO_LEVEL, 36, SPECIES_BLAZIKEN}}, - [SPECIES_BLAZIKEN] = {{EVO_MEGA_EVOLUTION, ITEM_BLAZIKENITE, SPECIES_BLAZIKEN_MEGA}}, [SPECIES_MUDKIP] = {{EVO_LEVEL, 16, SPECIES_MARSHTOMP}}, [SPECIES_MARSHTOMP] = {{EVO_LEVEL, 36, SPECIES_SWAMPERT}}, - [SPECIES_SWAMPERT] = {{EVO_MEGA_EVOLUTION, ITEM_SWAMPERTITE, SPECIES_SWAMPERT_MEGA}}, [SPECIES_POOCHYENA] = {{EVO_LEVEL, 18, SPECIES_MIGHTYENA}}, [SPECIES_ZIGZAGOON] = {{EVO_LEVEL, 20, SPECIES_LINOONE}}, [SPECIES_WURMPLE] = {{EVO_LEVEL_SILCOON, 7, SPECIES_SILCOON}, @@ -227,20 +203,16 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] = #if P_GEN_4_POKEMON == TRUE [SPECIES_NOSEPASS] = {{EVO_MAPSEC, MAPSEC_NEW_MAUVILLE, SPECIES_PROBOPASS}}, #endif - [SPECIES_SABLEYE] = {{EVO_MEGA_EVOLUTION, ITEM_SABLENITE, SPECIES_SABLEYE_MEGA}}, [SPECIES_BARBOACH] = {{EVO_LEVEL, 30, SPECIES_WHISCASH}}, [SPECIES_CORPHISH] = {{EVO_LEVEL, 30, SPECIES_CRAWDAUNT}}, [SPECIES_FEEBAS] = {{EVO_BEAUTY, 170, SPECIES_MILOTIC}, {EVO_TRADE_ITEM, ITEM_PRISM_SCALE, SPECIES_MILOTIC}}, [SPECIES_CARVANHA] = {{EVO_LEVEL, 30, SPECIES_SHARPEDO}}, - [SPECIES_SHARPEDO] = {{EVO_MEGA_EVOLUTION, ITEM_SHARPEDONITE, SPECIES_SHARPEDO_MEGA}}, [SPECIES_TRAPINCH] = {{EVO_LEVEL, 35, SPECIES_VIBRAVA}}, [SPECIES_VIBRAVA] = {{EVO_LEVEL, 45, SPECIES_FLYGON}}, [SPECIES_MAKUHITA] = {{EVO_LEVEL, 24, SPECIES_HARIYAMA}}, [SPECIES_ELECTRIKE] = {{EVO_LEVEL, 26, SPECIES_MANECTRIC}}, - [SPECIES_MANECTRIC] = {{EVO_MEGA_EVOLUTION, ITEM_MANECTITE, SPECIES_MANECTRIC_MEGA}}, [SPECIES_NUMEL] = {{EVO_LEVEL, 33, SPECIES_CAMERUPT}}, - [SPECIES_CAMERUPT] = {{EVO_MEGA_EVOLUTION, ITEM_CAMERUPTITE, SPECIES_CAMERUPT_MEGA}}, [SPECIES_SPHEAL] = {{EVO_LEVEL, 32, SPECIES_SEALEO}}, [SPECIES_SEALEO] = {{EVO_LEVEL, 44, SPECIES_WALREIN}}, [SPECIES_CACNEA] = {{EVO_LEVEL, 32, SPECIES_CACTURNE}}, @@ -249,14 +221,10 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] = {EVO_ITEM_FEMALE, ITEM_DAWN_STONE, SPECIES_FROSLASS} #endif }, - [SPECIES_GLALIE] = {{EVO_MEGA_EVOLUTION, ITEM_GLALITITE, SPECIES_GLALIE_MEGA}}, [SPECIES_AZURILL] = {{EVO_FRIENDSHIP, 0, SPECIES_MARILL}}, [SPECIES_SPOINK] = {{EVO_LEVEL, 32, SPECIES_GRUMPIG}}, - [SPECIES_MAWILE] = {{EVO_MEGA_EVOLUTION, ITEM_MAWILITE, SPECIES_MAWILE_MEGA}}, [SPECIES_MEDITITE] = {{EVO_LEVEL, 37, SPECIES_MEDICHAM}}, - [SPECIES_MEDICHAM] = {{EVO_MEGA_EVOLUTION, ITEM_MEDICHAMITE, SPECIES_MEDICHAM_MEGA}}, [SPECIES_SWABLU] = {{EVO_LEVEL, 35, SPECIES_ALTARIA}}, - [SPECIES_ALTARIA] = {{EVO_MEGA_EVOLUTION, ITEM_ALTARIANITE, SPECIES_ALTARIA_MEGA}}, [SPECIES_WYNAUT] = {{EVO_LEVEL, 15, SPECIES_WOBBUFFET}}, [SPECIES_DUSKULL] = {{EVO_LEVEL, 37, SPECIES_DUSCLOPS}}, #if P_GEN_4_POKEMON == TRUE @@ -270,12 +238,9 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] = [SPECIES_LOUDRED] = {{EVO_LEVEL, 40, SPECIES_EXPLOUD}}, [SPECIES_CLAMPERL] = {{EVO_TRADE_ITEM, ITEM_DEEP_SEA_TOOTH, SPECIES_HUNTAIL}, {EVO_TRADE_ITEM, ITEM_DEEP_SEA_SCALE, SPECIES_GOREBYSS}}, - [SPECIES_ABSOL] = {{EVO_MEGA_EVOLUTION, ITEM_ABSOLITE, SPECIES_ABSOL_MEGA}}, [SPECIES_SHUPPET] = {{EVO_LEVEL, 37, SPECIES_BANETTE}}, - [SPECIES_BANETTE] = {{EVO_MEGA_EVOLUTION, ITEM_BANETTITE, SPECIES_BANETTE_MEGA}}, [SPECIES_ARON] = {{EVO_LEVEL, 32, SPECIES_LAIRON}}, [SPECIES_LAIRON] = {{EVO_LEVEL, 42, SPECIES_AGGRON}}, - [SPECIES_AGGRON] = {{EVO_MEGA_EVOLUTION, ITEM_AGGRONITE, SPECIES_AGGRON_MEGA}}, [SPECIES_LILEEP] = {{EVO_LEVEL, 40, SPECIES_CRADILY}}, [SPECIES_ANORITH] = {{EVO_LEVEL, 40, SPECIES_ARMALDO}}, [SPECIES_RALTS] = {{EVO_LEVEL, 20, SPECIES_KIRLIA}}, @@ -284,17 +249,10 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] = {EVO_ITEM_MALE, ITEM_DAWN_STONE, SPECIES_GALLADE} #endif }, - [SPECIES_GARDEVOIR] = {{EVO_MEGA_EVOLUTION, ITEM_GARDEVOIRITE, SPECIES_GARDEVOIR_MEGA}}, [SPECIES_BAGON] = {{EVO_LEVEL, 30, SPECIES_SHELGON}}, [SPECIES_SHELGON] = {{EVO_LEVEL, 50, SPECIES_SALAMENCE}}, - [SPECIES_SALAMENCE] = {{EVO_MEGA_EVOLUTION, ITEM_SALAMENCITE, SPECIES_SALAMENCE_MEGA}}, [SPECIES_BELDUM] = {{EVO_LEVEL, 20, SPECIES_METANG}}, [SPECIES_METANG] = {{EVO_LEVEL, 45, SPECIES_METAGROSS}}, - [SPECIES_METAGROSS] = {{EVO_MEGA_EVOLUTION, ITEM_METAGROSSITE, SPECIES_METAGROSS_MEGA}}, - [SPECIES_LATIAS] = {{EVO_MEGA_EVOLUTION, ITEM_LATIASITE, SPECIES_LATIAS_MEGA}}, - [SPECIES_LATIOS] = {{EVO_MEGA_EVOLUTION, ITEM_LATIOSITE, SPECIES_LATIOS_MEGA}}, - [SPECIES_RAYQUAZA] = {{EVO_MOVE_MEGA_EVOLUTION, MOVE_DRAGON_ASCENT, SPECIES_RAYQUAZA_MEGA}}, - #if P_GEN_4_POKEMON == TRUE // Gens 4-7 [SPECIES_TURTWIG] = {{EVO_LEVEL, 18, SPECIES_GROTLE}}, @@ -320,7 +278,6 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] = [SPECIES_SHELLOS] = {{EVO_LEVEL, 30, SPECIES_GASTRODON}}, [SPECIES_DRIFLOON] = {{EVO_LEVEL, 28, SPECIES_DRIFBLIM}}, [SPECIES_BUNEARY] = {{EVO_FRIENDSHIP, 0, SPECIES_LOPUNNY}}, - [SPECIES_LOPUNNY] = {{EVO_MEGA_EVOLUTION, ITEM_LOPUNNITE, SPECIES_LOPUNNY_MEGA}}, [SPECIES_GLAMEOW] = {{EVO_LEVEL, 38, SPECIES_PURUGLY}}, [SPECIES_CHINGLING] = {{EVO_FRIENDSHIP_NIGHT, 0, SPECIES_CHIMECHO}}, [SPECIES_STUNKY] = {{EVO_LEVEL, 34, SPECIES_SKUNTANK}}, @@ -330,18 +287,14 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] = [SPECIES_HAPPINY] = {{EVO_ITEM_HOLD_DAY, ITEM_OVAL_STONE, SPECIES_CHANSEY}}, [SPECIES_GIBLE] = {{EVO_LEVEL, 24, SPECIES_GABITE}}, [SPECIES_GABITE] = {{EVO_LEVEL, 48, SPECIES_GARCHOMP}}, - [SPECIES_GARCHOMP] = {{EVO_MEGA_EVOLUTION, ITEM_GARCHOMPITE, SPECIES_GARCHOMP_MEGA}}, [SPECIES_MUNCHLAX] = {{EVO_FRIENDSHIP, 0, SPECIES_SNORLAX}}, [SPECIES_RIOLU] = {{EVO_FRIENDSHIP_DAY, 0, SPECIES_LUCARIO}}, - [SPECIES_LUCARIO] = {{EVO_MEGA_EVOLUTION, ITEM_LUCARIONITE, SPECIES_LUCARIO_MEGA}}, [SPECIES_HIPPOPOTAS] = {{EVO_LEVEL, 34, SPECIES_HIPPOWDON}}, [SPECIES_SKORUPI] = {{EVO_LEVEL, 40, SPECIES_DRAPION}}, [SPECIES_CROAGUNK] = {{EVO_LEVEL, 37, SPECIES_TOXICROAK}}, [SPECIES_FINNEON] = {{EVO_LEVEL, 31, SPECIES_LUMINEON}}, [SPECIES_MANTYKE] = {{EVO_SPECIFIC_MON_IN_PARTY, SPECIES_REMORAID, SPECIES_MANTINE}}, [SPECIES_SNOVER] = {{EVO_LEVEL, 40, SPECIES_ABOMASNOW}}, - [SPECIES_ABOMASNOW] = {{EVO_MEGA_EVOLUTION, ITEM_ABOMASITE, SPECIES_ABOMASNOW_MEGA}}, - [SPECIES_GALLADE] = {{EVO_MEGA_EVOLUTION, ITEM_GALLADITE, SPECIES_GALLADE_MEGA}}, #endif #if P_GEN_5_POKEMON == TRUE [SPECIES_SNIVY] = {{EVO_LEVEL, 17, SPECIES_SERVINE}}, @@ -365,7 +318,6 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] = [SPECIES_BOLDORE] = {{EVO_TRADE, 0, SPECIES_GIGALITH}}, [SPECIES_WOOBAT] = {{EVO_FRIENDSHIP, 0, SPECIES_SWOOBAT}}, [SPECIES_DRILBUR] = {{EVO_LEVEL, 31, SPECIES_EXCADRILL}}, - [SPECIES_AUDINO] = {{EVO_MEGA_EVOLUTION, ITEM_AUDINITE, SPECIES_AUDINO_MEGA}}, [SPECIES_TIMBURR] = {{EVO_LEVEL, 25, SPECIES_GURDURR}}, [SPECIES_GURDURR] = {{EVO_TRADE, 0, SPECIES_CONKELDURR}}, [SPECIES_TYMPOLE] = {{EVO_LEVEL, 25, SPECIES_PALPITOAD}}, @@ -456,7 +408,6 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] = [SPECIES_PUMPKABOO] = {{EVO_TRADE, 0, SPECIES_GOURGEIST}}, [SPECIES_BERGMITE] = {{EVO_LEVEL, 37, SPECIES_AVALUGG}}, [SPECIES_NOIBAT] = {{EVO_LEVEL, 48, SPECIES_NOIVERN}}, - [SPECIES_DIANCIE] = {{EVO_MEGA_EVOLUTION, ITEM_DIANCITE, SPECIES_DIANCIE_MEGA}}, #endif #if P_GEN_7_POKEMON == TRUE [SPECIES_ROWLET] = {{EVO_LEVEL, 17, SPECIES_DARTRIX}}, diff --git a/src/data/pokemon/form_change_table_pointers.h b/src/data/pokemon/form_change_table_pointers.h index a0cc805e9a6d..d69ced5bf2fc 100644 --- a/src/data/pokemon/form_change_table_pointers.h +++ b/src/data/pokemon/form_change_table_pointers.h @@ -1,10 +1,100 @@ const struct FormChange *const gFormChangeTablePointers[NUM_SPECIES] = { + [SPECIES_VENUSAUR] = sVenusaurFormChangeTable, + [SPECIES_VENUSAUR_MEGA] = sVenusaurFormChangeTable, + [SPECIES_CHARIZARD] = sCharizardFormChangeTable, + [SPECIES_CHARIZARD_MEGA_X] = sCharizardFormChangeTable, + [SPECIES_CHARIZARD_MEGA_Y] = sCharizardFormChangeTable, + [SPECIES_BLASTOISE] = sBlastoiseFormChangeTable, + [SPECIES_BLASTOISE_MEGA] = sBlastoiseFormChangeTable, + [SPECIES_BEEDRILL] = sBeedrillFormChangeTable, + [SPECIES_BEEDRILL_MEGA] = sBeedrillFormChangeTable, + [SPECIES_PIDGEOT] = sPidgeotFormChangeTable, + [SPECIES_PIDGEOT_MEGA] = sPidgeotFormChangeTable, + [SPECIES_ALAKAZAM] = sAlakazamFormChangeTable, + [SPECIES_ALAKAZAM_MEGA] = sAlakazamFormChangeTable, + [SPECIES_SLOWBRO] = sSlowbroFormChangeTable, + [SPECIES_SLOWBRO_MEGA] = sSlowbroFormChangeTable, + [SPECIES_GENGAR] = sGengarFormChangeTable, + [SPECIES_GENGAR_MEGA] = sGengarFormChangeTable, + [SPECIES_KANGASKHAN] = sKangaskhanFormChangeTable, + [SPECIES_KANGASKHAN_MEGA] = sKangaskhanFormChangeTable, + [SPECIES_PINSIR] = sPinsirFormChangeTable, + [SPECIES_PINSIR_MEGA] = sPinsirFormChangeTable, + [SPECIES_GYARADOS] = sGyaradosFormChangeTable, + [SPECIES_GYARADOS_MEGA] = sGyaradosFormChangeTable, + [SPECIES_AERODACTYL] = sAerodactylFormChangeTable, + [SPECIES_AERODACTYL_MEGA] = sAerodactylFormChangeTable, + [SPECIES_MEWTWO] = sMewtwoFormChangeTable, + [SPECIES_MEWTWO_MEGA_X] = sMewtwoFormChangeTable, + [SPECIES_MEWTWO_MEGA_Y] = sMewtwoFormChangeTable, + [SPECIES_AMPHAROS] = sAmpharosFormChangeTable, + [SPECIES_AMPHAROS_MEGA] = sAmpharosFormChangeTable, + [SPECIES_STEELIX] = sSteelixFormChangeTable, + [SPECIES_STEELIX_MEGA] = sSteelixFormChangeTable, + [SPECIES_SCIZOR] = sScizorFormChangeTable, + [SPECIES_SCIZOR_MEGA] = sScizorFormChangeTable, + [SPECIES_HERACROSS] = sHeracrossFormChangeTable, + [SPECIES_HERACROSS_MEGA] = sHeracrossFormChangeTable, + [SPECIES_HOUNDOOM] = sHoundoomFormChangeTable, + [SPECIES_HOUNDOOM_MEGA] = sHoundoomFormChangeTable, + [SPECIES_TYRANITAR] = sTyranitarFormChangeTable, + [SPECIES_TYRANITAR_MEGA] = sTyranitarFormChangeTable, + [SPECIES_SCEPTILE] = sSceptileFormChangeTable, + [SPECIES_SCEPTILE_MEGA] = sSceptileFormChangeTable, + [SPECIES_BLAZIKEN] = sBlazikenFormChangeTable, + [SPECIES_BLAZIKEN_MEGA] = sBlazikenFormChangeTable, + [SPECIES_SWAMPERT] = sSwampertFormChangeTable, + [SPECIES_SWAMPERT_MEGA] = sSwampertFormChangeTable, + [SPECIES_SABLEYE] = sSableyeFormChangeTable, + [SPECIES_SABLEYE_MEGA] = sSableyeFormChangeTable, + [SPECIES_SHARPEDO] = sSharpedoFormChangeTable, + [SPECIES_SHARPEDO_MEGA] = sSharpedoFormChangeTable, + [SPECIES_MANECTRIC] = sManectricFormChangeTable, + [SPECIES_MANECTRIC_MEGA] = sManectricFormChangeTable, + [SPECIES_CAMERUPT] = sCameruptFormChangeTable, + [SPECIES_CAMERUPT_MEGA] = sCameruptFormChangeTable, + [SPECIES_GLALIE] = sGlalieFormChangeTable, + [SPECIES_GLALIE_MEGA] = sGlalieFormChangeTable, + [SPECIES_MAWILE] = sMawileFormChangeTable, + [SPECIES_MAWILE_MEGA] = sMawileFormChangeTable, + [SPECIES_MEDICHAM] = sMedichamFormChangeTable, + [SPECIES_MEDICHAM_MEGA] = sMedichamFormChangeTable, + [SPECIES_ALTARIA] = sAltariaFormChangeTable, + [SPECIES_ALTARIA_MEGA] = sAltariaFormChangeTable, + [SPECIES_ABSOL] = sAbsolFormChangeTable, + [SPECIES_ABSOL_MEGA] = sAbsolFormChangeTable, + [SPECIES_BANETTE] = sBanetteFormChangeTable, + [SPECIES_BANETTE_MEGA] = sBanetteFormChangeTable, + [SPECIES_AGGRON] = sAggronFormChangeTable, + [SPECIES_AGGRON_MEGA] = sAggronFormChangeTable, + [SPECIES_GARDEVOIR] = sGardevoirFormChangeTable, + [SPECIES_GARDEVOIR_MEGA] = sGardevoirFormChangeTable, + [SPECIES_SALAMENCE] = sSalamenceFormChangeTable, + [SPECIES_SALAMENCE_MEGA] = sSalamenceFormChangeTable, + [SPECIES_METAGROSS] = sMetagrossFormChangeTable, + [SPECIES_METAGROSS_MEGA] = sMetagrossFormChangeTable, + [SPECIES_LATIAS] = sLatiasFormChangeTable, + [SPECIES_LATIAS_MEGA] = sLatiasFormChangeTable, + [SPECIES_LATIOS] = sLatiosFormChangeTable, + [SPECIES_LATIOS_MEGA] = sLatiosFormChangeTable, [SPECIES_KYOGRE] = sKyogreFormChangeTable, [SPECIES_KYOGRE_PRIMAL] = sKyogreFormChangeTable, [SPECIES_GROUDON] = sGroudonFormChangeTable, [SPECIES_GROUDON_PRIMAL] = sGroudonFormChangeTable, + [SPECIES_RAYQUAZA] = sRayquazaFormChangeTable, + [SPECIES_RAYQUAZA_MEGA] = sRayquazaFormChangeTable, #if P_GEN_4_POKEMON == TRUE + [SPECIES_LOPUNNY] = sLopunnyFormChangeTable, + [SPECIES_LOPUNNY_MEGA] = sLopunnyFormChangeTable, + [SPECIES_GARCHOMP] = sGarchompFormChangeTable, + [SPECIES_GARCHOMP_MEGA] = sGarchompFormChangeTable, + [SPECIES_LUCARIO] = sLucarioFormChangeTable, + [SPECIES_LUCARIO_MEGA] = sLucarioFormChangeTable, + [SPECIES_ABOMASNOW] = sAbomasnowFormChangeTable, + [SPECIES_ABOMASNOW_MEGA] = sAbomasnowFormChangeTable, + [SPECIES_GALLADE] = sGalladeFormChangeTable, + [SPECIES_GALLADE_MEGA] = sGalladeFormChangeTable, [SPECIES_GIRATINA] = sGiratinaFormChangeTable, [SPECIES_GIRATINA_ORIGIN] = sGiratinaFormChangeTable, [SPECIES_SHAYMIN] = sShayminFormChangeTable, @@ -29,6 +119,8 @@ const struct FormChange *const gFormChangeTablePointers[NUM_SPECIES] = [SPECIES_ARCEUS_FAIRY] = sArceusFormChangeTable, #endif #if P_GEN_5_POKEMON == TRUE + [SPECIES_AUDINO] = sAudinoFormChangeTable, + [SPECIES_AUDINO_MEGA] = sAudinoFormChangeTable, [SPECIES_DARMANITAN] = sDarmanitanFormChangeTable, [SPECIES_DARMANITAN_ZEN_MODE] = sDarmanitanFormChangeTable, [SPECIES_DARMANITAN_GALARIAN] = sDarmanitanGalarianFormChangeTable, @@ -56,6 +148,8 @@ const struct FormChange *const gFormChangeTablePointers[NUM_SPECIES] = [SPECIES_AEGISLASH_BLADE] = sAegislashFormChangeTable, [SPECIES_XERNEAS] = sXerneasFormChangeTable, [SPECIES_XERNEAS_ACTIVE] = sXerneasFormChangeTable, + [SPECIES_DIANCIE] = sDiancieFormChangeTable, + [SPECIES_DIANCIE_MEGA] = sDiancieFormChangeTable, [SPECIES_HOOPA] = sHoopaFormChangeTable, [SPECIES_HOOPA_UNBOUND] = sHoopaFormChangeTable, #endif diff --git a/src/data/pokemon/form_change_tables.h b/src/data/pokemon/form_change_tables.h index 1f0dc85da101..9c0b2d866663 100644 --- a/src/data/pokemon/form_change_tables.h +++ b/src/data/pokemon/form_change_tables.h @@ -56,6 +56,274 @@ #define DAY 1 #define NIGHT 2 +static const struct FormChange sVenusaurFormChangeTable[] = { + {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_VENUSAUR_MEGA, ITEM_VENUSAURITE}, + {FORM_CHANGE_FAINT, SPECIES_VENUSAUR}, + {FORM_CHANGE_BATTLE_END, SPECIES_VENUSAUR}, + {FORM_CHANGE_END}, +}; + +static const struct FormChange sCharizardFormChangeTable[] = { + {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_CHARIZARD_MEGA_X, ITEM_CHARIZARDITE_X}, + {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_CHARIZARD_MEGA_Y, ITEM_CHARIZARDITE_Y}, + {FORM_CHANGE_FAINT, SPECIES_CHARIZARD}, + {FORM_CHANGE_BATTLE_END, SPECIES_CHARIZARD}, + {FORM_CHANGE_END}, +}; + +static const struct FormChange sBlastoiseFormChangeTable[] = { + {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_BLASTOISE_MEGA, ITEM_BLASTOISINITE}, + {FORM_CHANGE_FAINT, SPECIES_BLASTOISE}, + {FORM_CHANGE_BATTLE_END, SPECIES_BLASTOISE}, + {FORM_CHANGE_END}, +}; + +static const struct FormChange sBeedrillFormChangeTable[] = { + {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_BEEDRILL_MEGA, ITEM_BEEDRILLITE}, + {FORM_CHANGE_FAINT, SPECIES_BEEDRILL}, + {FORM_CHANGE_BATTLE_END, SPECIES_BEEDRILL}, + {FORM_CHANGE_END}, +}; + +static const struct FormChange sPidgeotFormChangeTable[] = { + {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_PIDGEOT_MEGA, ITEM_PIDGEOTITE}, + {FORM_CHANGE_FAINT, SPECIES_PIDGEOT}, + {FORM_CHANGE_BATTLE_END, SPECIES_PIDGEOT}, + {FORM_CHANGE_END}, +}; + +static const struct FormChange sAlakazamFormChangeTable[] = { + {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_ALAKAZAM_MEGA, ITEM_ALAKAZITE}, + {FORM_CHANGE_FAINT, SPECIES_ALAKAZAM}, + {FORM_CHANGE_BATTLE_END, SPECIES_ALAKAZAM}, + {FORM_CHANGE_END}, +}; + +static const struct FormChange sSlowbroFormChangeTable[] = { + {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_SLOWBRO_MEGA, ITEM_SLOWBRONITE}, + {FORM_CHANGE_FAINT, SPECIES_SLOWBRO}, + {FORM_CHANGE_BATTLE_END, SPECIES_SLOWBRO}, + {FORM_CHANGE_END}, +}; + +static const struct FormChange sGengarFormChangeTable[] = { + {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_GENGAR_MEGA, ITEM_GENGARITE}, + {FORM_CHANGE_FAINT, SPECIES_GENGAR}, + {FORM_CHANGE_BATTLE_END, SPECIES_GENGAR}, + {FORM_CHANGE_END}, +}; + +static const struct FormChange sKangaskhanFormChangeTable[] = { + {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_KANGASKHAN_MEGA, ITEM_KANGASKHANITE}, + {FORM_CHANGE_FAINT, SPECIES_KANGASKHAN}, + {FORM_CHANGE_BATTLE_END, SPECIES_KANGASKHAN}, + {FORM_CHANGE_END}, +}; + +static const struct FormChange sPinsirFormChangeTable[] = { + {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_PINSIR_MEGA, ITEM_PINSIRITE}, + {FORM_CHANGE_FAINT, SPECIES_PINSIR}, + {FORM_CHANGE_BATTLE_END, SPECIES_PINSIR}, + {FORM_CHANGE_END}, +}; + +static const struct FormChange sGyaradosFormChangeTable[] = { + {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_GYARADOS_MEGA, ITEM_GYARADOSITE}, + {FORM_CHANGE_FAINT, SPECIES_GYARADOS}, + {FORM_CHANGE_BATTLE_END, SPECIES_GYARADOS}, + {FORM_CHANGE_END}, +}; + +static const struct FormChange sAerodactylFormChangeTable[] = { + {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_AERODACTYL_MEGA, ITEM_AERODACTYLITE}, + {FORM_CHANGE_FAINT, SPECIES_AERODACTYL}, + {FORM_CHANGE_BATTLE_END, SPECIES_AERODACTYL}, + {FORM_CHANGE_END}, +}; + +static const struct FormChange sMewtwoFormChangeTable[] = { + {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_MEWTWO_MEGA_X, ITEM_MEWTWONITE_X}, + {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_MEWTWO_MEGA_Y, ITEM_MEWTWONITE_Y}, + {FORM_CHANGE_FAINT, SPECIES_MEWTWO}, + {FORM_CHANGE_BATTLE_END, SPECIES_MEWTWO}, + {FORM_CHANGE_END}, +}; + +static const struct FormChange sAmpharosFormChangeTable[] = { + {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_AMPHAROS_MEGA, ITEM_AMPHAROSITE}, + {FORM_CHANGE_FAINT, SPECIES_AMPHAROS}, + {FORM_CHANGE_BATTLE_END, SPECIES_AMPHAROS}, + {FORM_CHANGE_END}, +}; + +static const struct FormChange sSteelixFormChangeTable[] = { + {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_STEELIX_MEGA, ITEM_STEELIXITE}, + {FORM_CHANGE_FAINT, SPECIES_STEELIX}, + {FORM_CHANGE_BATTLE_END, SPECIES_STEELIX}, + {FORM_CHANGE_END}, +}; + +static const struct FormChange sScizorFormChangeTable[] = { + {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_SCIZOR_MEGA, ITEM_SCIZORITE}, + {FORM_CHANGE_FAINT, SPECIES_SCIZOR}, + {FORM_CHANGE_BATTLE_END, SPECIES_SCIZOR}, + {FORM_CHANGE_END}, +}; + +static const struct FormChange sHeracrossFormChangeTable[] = { + {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_HERACROSS_MEGA, ITEM_HERACRONITE}, + {FORM_CHANGE_FAINT, SPECIES_HERACROSS}, + {FORM_CHANGE_BATTLE_END, SPECIES_HERACROSS}, + {FORM_CHANGE_END}, +}; + +static const struct FormChange sHoundoomFormChangeTable[] = { + {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_HOUNDOOM_MEGA, ITEM_HOUNDOOMINITE}, + {FORM_CHANGE_FAINT, SPECIES_HOUNDOOM}, + {FORM_CHANGE_BATTLE_END, SPECIES_HOUNDOOM}, + {FORM_CHANGE_END}, +}; + +static const struct FormChange sTyranitarFormChangeTable[] = { + {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_TYRANITAR_MEGA, ITEM_TYRANITARITE}, + {FORM_CHANGE_FAINT, SPECIES_TYRANITAR}, + {FORM_CHANGE_BATTLE_END, SPECIES_TYRANITAR}, + {FORM_CHANGE_END}, +}; + +static const struct FormChange sSceptileFormChangeTable[] = { + {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_SCEPTILE_MEGA, ITEM_SCEPTILITE}, + {FORM_CHANGE_FAINT, SPECIES_SCEPTILE}, + {FORM_CHANGE_BATTLE_END, SPECIES_SCEPTILE}, + {FORM_CHANGE_END}, +}; + +static const struct FormChange sBlazikenFormChangeTable[] = { + {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_BLAZIKEN_MEGA, ITEM_BLAZIKENITE}, + {FORM_CHANGE_FAINT, SPECIES_BLAZIKEN}, + {FORM_CHANGE_BATTLE_END, SPECIES_BLAZIKEN}, + {FORM_CHANGE_END}, +}; + +static const struct FormChange sSwampertFormChangeTable[] = { + {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_SWAMPERT_MEGA, ITEM_SWAMPERTITE}, + {FORM_CHANGE_FAINT, SPECIES_SWAMPERT}, + {FORM_CHANGE_BATTLE_END, SPECIES_SWAMPERT}, + {FORM_CHANGE_END}, +}; + +static const struct FormChange sSableyeFormChangeTable[] = { + {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_SABLEYE_MEGA, ITEM_SABLENITE}, + {FORM_CHANGE_FAINT, SPECIES_SABLEYE}, + {FORM_CHANGE_BATTLE_END, SPECIES_SABLEYE}, + {FORM_CHANGE_END}, +}; + +static const struct FormChange sSharpedoFormChangeTable[] = { + {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_SHARPEDO_MEGA, ITEM_SHARPEDONITE}, + {FORM_CHANGE_FAINT, SPECIES_SHARPEDO}, + {FORM_CHANGE_BATTLE_END, SPECIES_SHARPEDO}, + {FORM_CHANGE_END}, +}; + +static const struct FormChange sManectricFormChangeTable[] = { + {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_MANECTRIC_MEGA, ITEM_MANECTITE}, + {FORM_CHANGE_FAINT, SPECIES_MANECTRIC}, + {FORM_CHANGE_BATTLE_END, SPECIES_MANECTRIC}, + {FORM_CHANGE_END}, +}; + +static const struct FormChange sCameruptFormChangeTable[] = { + {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_CAMERUPT_MEGA, ITEM_CAMERUPTITE}, + {FORM_CHANGE_FAINT, SPECIES_CAMERUPT}, + {FORM_CHANGE_BATTLE_END, SPECIES_CAMERUPT}, + {FORM_CHANGE_END}, +}; + +static const struct FormChange sGlalieFormChangeTable[] = { + {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_GLALIE_MEGA, ITEM_GLALITITE}, + {FORM_CHANGE_FAINT, SPECIES_GLALIE}, + {FORM_CHANGE_BATTLE_END, SPECIES_GLALIE}, + {FORM_CHANGE_END}, +}; + +static const struct FormChange sMawileFormChangeTable[] = { + {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_MAWILE_MEGA, ITEM_MAWILITE}, + {FORM_CHANGE_FAINT, SPECIES_MAWILE}, + {FORM_CHANGE_BATTLE_END, SPECIES_MAWILE}, + {FORM_CHANGE_END}, +}; + +static const struct FormChange sMedichamFormChangeTable[] = { + {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_MEDICHAM_MEGA, ITEM_MEDICHAMITE}, + {FORM_CHANGE_FAINT, SPECIES_MEDICHAM}, + {FORM_CHANGE_BATTLE_END, SPECIES_MEDICHAM}, + {FORM_CHANGE_END}, +}; + +static const struct FormChange sAltariaFormChangeTable[] = { + {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_ALTARIA_MEGA, ITEM_ALTARIANITE}, + {FORM_CHANGE_FAINT, SPECIES_ALTARIA}, + {FORM_CHANGE_BATTLE_END, SPECIES_ALTARIA}, + {FORM_CHANGE_END}, +}; + +static const struct FormChange sAbsolFormChangeTable[] = { + {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_ABSOL_MEGA, ITEM_ABSOLITE}, + {FORM_CHANGE_FAINT, SPECIES_ABSOL}, + {FORM_CHANGE_BATTLE_END, SPECIES_ABSOL}, + {FORM_CHANGE_END}, +}; + +static const struct FormChange sBanetteFormChangeTable[] = { + {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_BANETTE_MEGA, ITEM_BANETTITE}, + {FORM_CHANGE_FAINT, SPECIES_BANETTE}, + {FORM_CHANGE_BATTLE_END, SPECIES_BANETTE}, + {FORM_CHANGE_END}, +}; + +static const struct FormChange sAggronFormChangeTable[] = { + {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_AGGRON_MEGA, ITEM_AGGRONITE}, + {FORM_CHANGE_FAINT, SPECIES_AGGRON}, + {FORM_CHANGE_BATTLE_END, SPECIES_AGGRON}, + {FORM_CHANGE_END}, +}; + +static const struct FormChange sGardevoirFormChangeTable[] = { + {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_GARDEVOIR_MEGA, ITEM_GARDEVOIRITE}, + {FORM_CHANGE_FAINT, SPECIES_GARDEVOIR}, + {FORM_CHANGE_BATTLE_END, SPECIES_GARDEVOIR}, + {FORM_CHANGE_END}, +}; + +static const struct FormChange sSalamenceFormChangeTable[] = { + {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_SALAMENCE_MEGA, ITEM_SALAMENCITE}, + {FORM_CHANGE_FAINT, SPECIES_SALAMENCE}, + {FORM_CHANGE_BATTLE_END, SPECIES_SALAMENCE}, + {FORM_CHANGE_END}, +}; + +static const struct FormChange sMetagrossFormChangeTable[] = { + {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_METAGROSS_MEGA, ITEM_METAGROSSITE}, + {FORM_CHANGE_FAINT, SPECIES_METAGROSS}, + {FORM_CHANGE_BATTLE_END, SPECIES_METAGROSS}, + {FORM_CHANGE_END}, +}; + +static const struct FormChange sLatiasFormChangeTable[] = { + {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_LATIAS_MEGA, ITEM_LATIASITE}, + {FORM_CHANGE_FAINT, SPECIES_LATIAS}, + {FORM_CHANGE_BATTLE_END, SPECIES_LATIAS}, + {FORM_CHANGE_END}, +}; + +static const struct FormChange sLatiosFormChangeTable[] = { + {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_LATIOS_MEGA, ITEM_LATIOSITE}, + {FORM_CHANGE_FAINT, SPECIES_LATIOS}, + {FORM_CHANGE_BATTLE_END, SPECIES_LATIOS}, + {FORM_CHANGE_END}, +}; + static const struct FormChange sKyogreFormChangeTable[] = { {FORM_CHANGE_PRIMAL_REVERSION, SPECIES_KYOGRE_PRIMAL, ITEM_BLUE_ORB}, {FORM_CHANGE_BATTLE_END, SPECIES_KYOGRE}, @@ -68,7 +336,49 @@ static const struct FormChange sGroudonFormChangeTable[] = { {FORM_CHANGE_END}, }; +static const struct FormChange sRayquazaFormChangeTable[] = { + {FORM_CHANGE_MEGA_EVOLUTION_MOVE, SPECIES_RAYQUAZA_MEGA, MOVE_DRAGON_ASCENT}, + {FORM_CHANGE_FAINT, SPECIES_RAYQUAZA}, + {FORM_CHANGE_BATTLE_END, SPECIES_RAYQUAZA}, + {FORM_CHANGE_END}, +}; + #if P_GEN_4_POKEMON == TRUE +static const struct FormChange sLopunnyFormChangeTable[] = { + {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_LOPUNNY_MEGA, ITEM_LOPUNNITE}, + {FORM_CHANGE_FAINT, SPECIES_LOPUNNY}, + {FORM_CHANGE_BATTLE_END, SPECIES_LOPUNNY}, + {FORM_CHANGE_END}, +}; + +static const struct FormChange sGarchompFormChangeTable[] = { + {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_GARCHOMP_MEGA, ITEM_GARCHOMPITE}, + {FORM_CHANGE_FAINT, SPECIES_GARCHOMP}, + {FORM_CHANGE_BATTLE_END, SPECIES_GARCHOMP}, + {FORM_CHANGE_END}, +}; + +static const struct FormChange sLucarioFormChangeTable[] = { + {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_LUCARIO_MEGA, ITEM_LUCARIONITE}, + {FORM_CHANGE_FAINT, SPECIES_LUCARIO}, + {FORM_CHANGE_BATTLE_END, SPECIES_LUCARIO}, + {FORM_CHANGE_END}, +}; + +static const struct FormChange sAbomasnowFormChangeTable[] = { + {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_ABOMASNOW_MEGA, ITEM_ABOMASITE}, + {FORM_CHANGE_FAINT, SPECIES_ABOMASNOW}, + {FORM_CHANGE_BATTLE_END, SPECIES_ABOMASNOW}, + {FORM_CHANGE_END}, +}; + +static const struct FormChange sGalladeFormChangeTable[] = { + {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_GALLADE_MEGA, ITEM_GALLADITE}, + {FORM_CHANGE_FAINT, SPECIES_GALLADE}, + {FORM_CHANGE_BATTLE_END, SPECIES_GALLADE}, + {FORM_CHANGE_END}, +}; + static const struct FormChange sGiratinaFormChangeTable[] = { {FORM_CHANGE_ITEM_HOLD, SPECIES_GIRATINA, ITEM_NONE}, {FORM_CHANGE_ITEM_HOLD, SPECIES_GIRATINA_ORIGIN, ITEM_GRISEOUS_ORB}, @@ -122,6 +432,12 @@ static const struct FormChange sArceusFormChangeTable[] = { #endif #if P_GEN_5_POKEMON == TRUE +static const struct FormChange sAudinoFormChangeTable[] = { + {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_AUDINO_MEGA, ITEM_AUDINITE}, + {FORM_CHANGE_FAINT, SPECIES_AUDINO}, + {FORM_CHANGE_BATTLE_END, SPECIES_AUDINO}, + {FORM_CHANGE_END}, +}; static const struct FormChange sDarmanitanFormChangeTable[] = { {FORM_CHANGE_BATTLE_SWITCH, SPECIES_DARMANITAN}, @@ -197,6 +513,13 @@ static const struct FormChange sXerneasFormChangeTable[] = { {FORM_CHANGE_END}, }; +static const struct FormChange sDiancieFormChangeTable[] = { + {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_DIANCIE_MEGA, ITEM_DIANCITE}, + {FORM_CHANGE_FAINT, SPECIES_DIANCIE}, + {FORM_CHANGE_BATTLE_END, SPECIES_DIANCIE}, + {FORM_CHANGE_END}, +}; + static const struct FormChange sHoopaFormChangeTable[] = { {FORM_CHANGE_ITEM_USE, SPECIES_HOOPA_UNBOUND, ITEM_PRISON_BOTTLE, SPECIES_HOOPA}, {FORM_CHANGE_WITHDRAW, SPECIES_HOOPA}, From 15c12af2cf9d51731e8ca9b9cce3f2d3adf7e97f Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Tue, 1 Nov 2022 23:50:26 -0300 Subject: [PATCH 012/428] Using TryBattleFormChange in place of certain TryFormChange --- include/battle_util.h | 2 ++ include/pokemon.h | 2 +- src/battle_main.c | 2 +- src/battle_script_commands.c | 14 +++----------- src/battle_util.c | 25 +++++++++++++++++-------- src/pokemon.c | 4 +++- 6 files changed, 27 insertions(+), 22 deletions(-) diff --git a/include/battle_util.h b/include/battle_util.h index e1b890ebfed3..120c0b7e910c 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -188,6 +188,8 @@ void TryToRevertMimicry(void); void RestoreBattlerOriginalTypes(u8 battlerId); u32 GetBattlerMoveTargetType(u8 battlerId, u16 move); bool32 CanTargetBattler(u8 battlerAtk, u8 battlerDef, u16 move); +void CopyMonLevelAndBaseStatsToBattleMon(u32 battler, struct Pokemon *mon); +void CopyMonAbilityAndTypesToBattleMon(u32 battler, struct Pokemon *mon); void RecalcBattlerStats(u32 battler, struct Pokemon *mon); // Ability checks bool32 IsRolePlayBannedAbilityAtk(u16 ability); diff --git a/include/pokemon.h b/include/pokemon.h index 134991b9533d..10b132f48a34 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -565,7 +565,7 @@ u16 GetFormChangeTargetSpecies(struct Pokemon *mon, u16 method, u32 arg); u16 GetFormChangeTargetSpeciesBoxMon(struct BoxPokemon *mon, u16 method, u32 arg); u16 MonTryLearningNewMoveEvolution(struct Pokemon *mon, bool8 firstMove); bool32 ShouldShowFemaleDifferences(u16 species, u32 personality); -void TryFormChange(u32 monId, u32 side, u16 method); +bool32 TryFormChange(u32 monId, u32 side, u16 method); void TryToSetBattleFormChangeMoves(struct Pokemon *mon, u16 method); u32 GetMonFriendshipScore(struct Pokemon *pokemon); diff --git a/src/battle_main.c b/src/battle_main.c index 9d08a4e8c043..6afae7d9c3bc 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -3247,7 +3247,7 @@ void FaintClearSetData(void) gBattleMons[gActiveBattler].type3 = TYPE_MYSTERY; Ai_UpdateFaintData(gActiveBattler); - TryFormChange(gBattlerPartyIndexes[gActiveBattler], GET_BATTLER_SIDE(gActiveBattler), FORM_CHANGE_FAINT); + TryBattleFormChange(gActiveBattler, FORM_CHANGE_FAINT); if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) UndoMegaEvolution(gBattlerPartyIndexes[gActiveBattler]); diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 6cc2bc323a22..d2de985a753a 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -4213,15 +4213,7 @@ static void Cmd_getexp(void) if (battlerId != 0xFF) { - gBattleMons[battlerId].level = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_LEVEL); - gBattleMons[battlerId].hp = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_HP); - gBattleMons[battlerId].maxHP = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_MAX_HP); - gBattleMons[battlerId].attack = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_ATK); - gBattleMons[battlerId].defense = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_DEF); - gBattleMons[battlerId].speed = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_SPEED); - gBattleMons[battlerId].spAttack = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_SPATK); - gBattleMons[battlerId].spDefense = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_SPDEF); - + CopyMonLevelAndBaseStatsToBattleMon(battlerId, &gPlayerParty[gBattleStruct->expGetterMonId]); if (gStatuses3[battlerId] & STATUS3_POWER_TRICK) SWAP(gBattleMons[battlerId].attack, gBattleMons[battlerId].defense, temp); } @@ -14064,7 +14056,7 @@ static void Cmd_handleballthrow(void) { BtlController_EmitBallThrowAnim(BUFFER_A, BALL_3_SHAKES_SUCCESS); MarkBattlerForControllerExec(gActiveBattler); - TryFormChange(gBattlerPartyIndexes[gBattlerTarget], GET_BATTLER_SIDE(gBattlerTarget), FORM_CHANGE_BATTLE_END), + TryBattleFormChange(gBattlerTarget, FORM_CHANGE_BATTLE_END); gBattlescriptCurrInstr = BattleScript_SuccessBallThrow; SetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_POKEBALL, &gLastUsedItem); @@ -14118,7 +14110,7 @@ static void Cmd_handleballthrow(void) if (IsCriticalCapture()) gBattleSpritesDataPtr->animationData->criticalCaptureSuccess = TRUE; - TryFormChange(gBattlerPartyIndexes[gBattlerTarget], GET_BATTLER_SIDE(gBattlerTarget), FORM_CHANGE_BATTLE_END), + TryBattleFormChange(gBattlerTarget, FORM_CHANGE_BATTLE_END); gBattlescriptCurrInstr = BattleScript_SuccessBallThrow; SetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_POKEBALL, &gLastUsedItem); diff --git a/src/battle_util.c b/src/battle_util.c index d4efdb898824..7709fa59ec85 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -518,7 +518,7 @@ void HandleAction_Switch(void) if (gBattleResults.playerSwitchesCounter < 255) gBattleResults.playerSwitchesCounter++; - TryFormChange(gBattlerPartyIndexes[gBattlerAttacker], GetBattlerSide(gBattlerAttacker), FORM_CHANGE_BATTLE_SWITCH); + TryBattleFormChange(gBattlerAttacker, FORM_CHANGE_BATTLE_SWITCH); } void HandleAction_UseItem(void) @@ -9698,16 +9698,14 @@ bool32 IsBattlerPrimalReverted(u8 battlerId) void TryBattleFormChange(u8 battlerId, u16 method) { - u16 targetSpecies; u8 monId = gBattlerPartyIndexes[battlerId]; u8 side = GET_BATTLER_SIDE(battlerId); struct Pokemon *party = (side == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty; - targetSpecies = GetFormChangeTargetSpecies(&party[monId], method, 0); - if (targetSpecies != SPECIES_NONE) + if (TryFormChange(monId, side, method)) { - SetMonData(&party[monId], MON_DATA_SPECIES, &targetSpecies); - RecalcBattlerStats(battlerId, &party[monId]); + CopyMonLevelAndBaseStatsToBattleMon(battlerId, &party[monId]); + CopyMonAbilityAndTypesToBattleMon(battlerId, &party[monId]); } } @@ -10370,9 +10368,8 @@ bool32 CanTargetBattler(u8 battlerAtk, u8 battlerDef, u16 move) return TRUE; } -void RecalcBattlerStats(u32 battler, struct Pokemon *mon) +void CopyMonLevelAndBaseStatsToBattleMon(u32 battler, struct Pokemon *mon) { - CalculateMonStats(mon); gBattleMons[battler].level = GetMonData(mon, MON_DATA_LEVEL); gBattleMons[battler].hp = GetMonData(mon, MON_DATA_HP); gBattleMons[battler].maxHP = GetMonData(mon, MON_DATA_MAX_HP); @@ -10381,7 +10378,19 @@ void RecalcBattlerStats(u32 battler, struct Pokemon *mon) gBattleMons[battler].speed = GetMonData(mon, MON_DATA_SPEED); gBattleMons[battler].spAttack = GetMonData(mon, MON_DATA_SPATK); gBattleMons[battler].spDefense = GetMonData(mon, MON_DATA_SPDEF); +} + +void CopyMonAbilityAndTypesToBattleMon(u32 battler, struct Pokemon *mon) +{ gBattleMons[battler].ability = GetMonAbility(mon); gBattleMons[battler].type1 = gBaseStats[gBattleMons[battler].species].type1; gBattleMons[battler].type2 = gBaseStats[gBattleMons[battler].species].type2; + gBattleMons[battler].type3 = TYPE_MYSTERY; +} + +void RecalcBattlerStats(u32 battler, struct Pokemon *mon) +{ + CalculateMonStats(mon); + CopyMonLevelAndBaseStatsToBattleMon(battler, mon); + CopyMonAbilityAndTypesToBattleMon(battler, mon); } diff --git a/src/pokemon.c b/src/pokemon.c index c296e14136e8..d4f14b5b9b7c 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -8495,7 +8495,7 @@ bool32 ShouldShowFemaleDifferences(u16 species, u32 personality) return (gBaseStats[species].flags & SPECIES_FLAG_GENDER_DIFFERENCE) && GetGenderFromSpeciesAndPersonality(species, personality) == MON_FEMALE; } -void TryFormChange(u32 monId, u32 side, u16 method) +bool32 TryFormChange(u32 monId, u32 side, u16 method) { u32 targetSpecies; struct Pokemon *party = (side == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty; @@ -8506,7 +8506,9 @@ void TryFormChange(u32 monId, u32 side, u16 method) TryToSetBattleFormChangeMoves(&party[monId], method); SetMonData(&party[monId], MON_DATA_SPECIES, &targetSpecies); CalculateMonStats(&party[monId]); + return TRUE; } + return FALSE; } void TryToSetBattleFormChangeMoves(struct Pokemon *mon, u16 method) From 8b0a8484247f09a809fc97c0b966b1b154880a62 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Tue, 1 Nov 2022 23:53:04 -0300 Subject: [PATCH 013/428] Zen Mode triggers at the beginning of a battle --- src/battle_util.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/battle_util.c b/src/battle_util.c index 7709fa59ec85..544eef1fd24d 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -4735,6 +4735,8 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move case ABILITY_SCHOOLING: if (gBattleMons[battler].level < 20) break; + // Fallthrough + case ABILITY_ZEN_MODE: case ABILITY_SHIELDS_DOWN: if (ShouldChangeFormHpBased(battler)) { @@ -4954,6 +4956,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move case ABILITY_SCHOOLING: if (gBattleMons[battler].level < 20) break; + // Fallthrough case ABILITY_ZEN_MODE: case ABILITY_SHIELDS_DOWN: if ((effect = ShouldChangeFormHpBased(battler))) From 271bff5675f69781dcae95c3696347806df9e746 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Wed, 2 Nov 2022 10:06:02 -0300 Subject: [PATCH 014/428] Gen 5+ stat recalculate in the same party loop at the end of battle that changes forms. --- src/battle_main.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/battle_main.c b/src/battle_main.c index 6afae7d9c3bc..df8e245510fc 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -5203,18 +5203,15 @@ static void HandleEndTurn_FinishBattle(void) UndoMegaEvolution(i); TryFormChange(i, B_SIDE_PLAYER, FORM_CHANGE_BATTLE_END); DoBurmyFormChange(i); - } - #if B_RECALCULATE_STATS >= GEN_5 - // Recalculate the stats of every party member before the end - for (i = 0; i < PARTY_SIZE; i++) - { + #if B_RECALCULATE_STATS >= GEN_5 + // Recalculate the stats of every party member before the end if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) != SPECIES_NONE && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) != SPECIES_EGG) { CalculateMonStats(&gPlayerParty[i]); } + #endif } - #endif // Clear battle mon species to avoid a bug on the next battle that causes // healthboxes loading incorrectly due to it trying to create a Mega Indicator // if the previous battler would've had. From 42f8e8c11461cc09830c143c14f953e42d23b79e Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sat, 5 Nov 2022 20:00:12 -0300 Subject: [PATCH 015/428] Multiple refactors - Added a general GetBattleFormChangeTargetSpecies instead of getting specific ones for Mega Evolution and Primal Reversion. - Added FORM_CHANGE_BATTLE_HP_PERCENT, to replace ShouldChangeFormHpBased. - Cleaned ifdefs for hold effects. - Finally removed UndoMegaEvolution. - FORM_CHANGE_FAINT and FORM_CHANGE_BATTLE_END restore to the first form before a battle form change if species isn't specified. - When changing from a form with more HP to one with less, now current HP is kept to fix Zygarde edge case. (Will likely need to be reworked for Dynamax, as it behaves differently) - Uses DoesSpeciesUseHoldItemToChangeForm in CanBattlerGetOrLoseItem. --- include/battle_util.h | 8 +- include/constants/pokemon.h | 11 +- include/pokemon.h | 3 +- src/battle_ai_main.c | 4 - src/battle_main.c | 15 +- src/battle_script_commands.c | 8 +- src/battle_util.c | 258 +++++++++--------- src/data/pokemon/form_change_table_pointers.h | 3 + src/data/pokemon/form_change_tables.h | 120 +++++--- src/daycare.c | 3 +- src/pokemon.c | 47 +++- 11 files changed, 272 insertions(+), 208 deletions(-) diff --git a/include/battle_util.h b/include/battle_util.h index 120c0b7e910c..4f263e8da994 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -144,14 +144,12 @@ u16 CalcTypeEffectivenessMultiplier(u16 move, u8 moveType, u8 battlerAtk, u8 bat u16 CalcPartyMonTypeEffectivenessMultiplier(u16 move, u16 speciesDef, u16 abilityDef); u16 GetTypeModifier(u8 atkType, u8 defType); s32 GetStealthHazardDamage(u8 hazardType, u8 battlerId); -u16 GetMegaEvolutionSpecies(u16 preEvoSpecies, u16 heldItemId); -u16 GetPrimalReversionSpecies(u16 preSpecies, u16 heldItemId); -u16 GetWishMegaEvolutionSpecies(u16 preEvoSpecies, u16 moveId1, u16 moveId2, u16 moveId3, u16 moveId4); +bool32 DoesSpeciesUseHoldItemToChangeForm(u16 species, u16 heldItemId); bool32 CanMegaEvolve(u8 battlerId); -void UndoMegaEvolution(u32 monId); bool32 IsBattlerMegaEvolved(u8 battlerId); bool32 IsBattlerPrimalReverted(u8 battlerId); -void TryBattleFormChange(u8 battlerId, u16 method); +u16 GetBattleFormChangeTargetSpecies(u8 battlerId, u16 method); +bool32 TryBattleFormChange(u8 battlerId, u16 method); bool32 DoBattlersShareType(u32 battler1, u32 battler2); bool32 CanBattlerGetOrLoseItem(u8 battlerId, u16 itemId); struct Pokemon *GetIllusionMonPtr(u32 battlerId); diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h index f31fa8d6ccd8..31b7e72fbe07 100644 --- a/include/constants/pokemon.h +++ b/include/constants/pokemon.h @@ -323,9 +323,14 @@ #define FORM_CHANGE_BATTLE_BEGIN 6 #define FORM_CHANGE_BATTLE_END 7 #define FORM_CHANGE_BATTLE_SWITCH 8 -#define FORM_CHANGE_MEGA_EVOLUTION_ITEM 9 -#define FORM_CHANGE_MEGA_EVOLUTION_MOVE 10 -#define FORM_CHANGE_PRIMAL_REVERSION 11 +#define FORM_CHANGE_BATTLE_HP_PERCENT 9 +#define FORM_CHANGE_MEGA_EVOLUTION_ITEM 10 +#define FORM_CHANGE_MEGA_EVOLUTION_MOVE 11 +#define FORM_CHANGE_PRIMAL_REVERSION 12 + +// FORM_CHANGE_BATTLE_HP_PERCENT param2 arguments +#define HP_HIGHER_THAN 1 +#define HP_LOWER_EQ_THAN 2 #define MON_PIC_WIDTH 64 #define MON_PIC_HEIGHT 64 diff --git a/include/pokemon.h b/include/pokemon.h index 10b132f48a34..f7f5ea6deb00 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -562,7 +562,8 @@ u8 *MonSpritesGfxManager_GetSpritePtr(u8 managerId, u8 spriteNum); u16 GetFormSpeciesId(u16 speciesId, u8 formId); u8 GetFormIdFromFormSpeciesId(u16 formSpeciesId); u16 GetFormChangeTargetSpecies(struct Pokemon *mon, u16 method, u32 arg); -u16 GetFormChangeTargetSpeciesBoxMon(struct BoxPokemon *mon, u16 method, u32 arg); +u16 GetFormChangeTargetSpeciesBoxMon(struct BoxPokemon *boxMon, u16 method, u32 arg); +bool32 DoesSpeciesHaveFormChangeMethod(u16 species, u16 method); u16 MonTryLearningNewMoveEvolution(struct Pokemon *mon, bool8 firstMove); bool32 ShouldShowFemaleDifferences(u16 species, u32 personality); bool32 TryFormChange(u32 monId, u32 side, u16 method); diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index b1154e7934f7..0998d0a485b3 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -3043,12 +3043,8 @@ static bool32 IsPinchBerryItemEffect(u16 holdEffect) case HOLD_EFFECT_SP_DEFENSE_UP: case HOLD_EFFECT_CRITICAL_UP: case HOLD_EFFECT_RANDOM_STAT_UP: - #ifdef HOLD_EFFECT_CUSTAP_BERRY case HOLD_EFFECT_CUSTAP_BERRY: - #endif - #ifdef HOLD_EFFECT_MICLE_BERRY case HOLD_EFFECT_MICLE_BERRY: - #endif return TRUE; } diff --git a/src/battle_main.c b/src/battle_main.c index df8e245510fc..907fb1aa400e 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -3248,8 +3248,6 @@ void FaintClearSetData(void) Ai_UpdateFaintData(gActiveBattler); TryBattleFormChange(gActiveBattler, FORM_CHANGE_FAINT); - if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) - UndoMegaEvolution(gBattlerPartyIndexes[gActiveBattler]); gBattleStruct->overwrittenAbilities[gActiveBattler] = ABILITY_NONE; @@ -3683,7 +3681,7 @@ static void TryDoEventsBeforeFirstTurn(void) for (i = 0; i < gBattlersCount; i++) { if (GetBattlerHoldEffect(i, TRUE) == HOLD_EFFECT_PRIMAL_ORB - && GetPrimalReversionSpecies(gBattleMons[i].species, gBattleMons[i].item) != SPECIES_NONE) + && GetBattleFormChangeTargetSpecies(i, FORM_CHANGE_PRIMAL_REVERSION) != SPECIES_NONE) { gBattlerAttacker = i; BattleScriptExecute(BattleScript_PrimalReversion); @@ -5200,16 +5198,15 @@ static void HandleEndTurn_FinishBattle(void) #endif for (i = 0; i < PARTY_SIZE; i++) { - UndoMegaEvolution(i); - TryFormChange(i, B_SIDE_PLAYER, FORM_CHANGE_BATTLE_END); + bool32 changedForm = TryFormChange(i, B_SIDE_PLAYER, FORM_CHANGE_BATTLE_END); DoBurmyFormChange(i); + // Clear original species field + gBattleStruct->changedSpecies[i] = SPECIES_NONE; + #if B_RECALCULATE_STATS >= GEN_5 // Recalculate the stats of every party member before the end - if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) != SPECIES_NONE - && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) != SPECIES_EGG) - { + if (!changedForm) CalculateMonStats(&gPlayerParty[i]); - } #endif } // Clear battle mon species to avoid a bug on the next battle that causes diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index d2de985a753a..5ea145c05704 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -8800,10 +8800,10 @@ static void Cmd_various(void) if (gBattlescriptCurrInstr[3] == 0) { //Checks regular Mega Evolution - u16 megaSpecies = GetMegaEvolutionSpecies(gBattleMons[gActiveBattler].species, gBattleMons[gActiveBattler].item); + u16 megaSpecies = GetBattleFormChangeTargetSpecies(gActiveBattler, FORM_CHANGE_MEGA_EVOLUTION_ITEM); //Checks Wish Mega Evolution if (megaSpecies == SPECIES_NONE) - megaSpecies = GetWishMegaEvolutionSpecies(gBattleMons[gActiveBattler].species, gBattleMons[gActiveBattler].moves[0], gBattleMons[gActiveBattler].moves[1], gBattleMons[gActiveBattler].moves[2], gBattleMons[gActiveBattler].moves[3]); + megaSpecies = GetBattleFormChangeTargetSpecies(gActiveBattler, FORM_CHANGE_MEGA_EVOLUTION_MOVE); gBattleMons[gActiveBattler].species = megaSpecies; PREPARE_SPECIES_BUFFER(gBattleTextBuff1, gBattleMons[gActiveBattler].species); @@ -8836,7 +8836,7 @@ static void Cmd_various(void) // Change species. if (gBattlescriptCurrInstr[3] == 0) { - gBattleMons[gActiveBattler].species = GetPrimalReversionSpecies(gBattleMons[gActiveBattler].species, gBattleMons[gActiveBattler].item); + gBattleMons[gActiveBattler].species = GetBattleFormChangeTargetSpecies(gActiveBattler, FORM_CHANGE_PRIMAL_REVERSION); PREPARE_SPECIES_BUFFER(gBattleTextBuff1, gBattleMons[gActiveBattler].species); BtlController_EmitSetMonData(BUFFER_A, REQUEST_SPECIES_BATTLE, gBitTable[gBattlerPartyIndexes[gActiveBattler]], sizeof(gBattleMons[gActiveBattler].species), &gBattleMons[gActiveBattler].species); @@ -9561,7 +9561,7 @@ static void Cmd_various(void) return; case VARIOUS_JUMP_IF_CANT_REVERT_TO_PRIMAL: { - if (GetPrimalReversionSpecies(gBattleMons[gActiveBattler].species, gBattleMons[gActiveBattler].item) == SPECIES_NONE) + if (GetBattleFormChangeTargetSpecies(gActiveBattler, FORM_CHANGE_PRIMAL_REVERSION) == SPECIES_NONE) gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); else gBattlescriptCurrInstr += 7; diff --git a/src/battle_util.c b/src/battle_util.c index 544eef1fd24d..27b8cf945e20 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -4170,51 +4170,6 @@ static bool32 TryChangeBattleTerrain(u32 battler, u32 statusFlag, u8 *timer) return FALSE; } -static bool32 ShouldChangeFormHpBased(u32 battler) -{ - // Ability, form >, form <=, hp divided - static const u16 forms[][4] = - { - {ABILITY_ZEN_MODE, SPECIES_DARMANITAN, SPECIES_DARMANITAN_ZEN_MODE, 2}, - {ABILITY_SHIELDS_DOWN, SPECIES_MINIOR, SPECIES_MINIOR_CORE_RED, 2}, - {ABILITY_SHIELDS_DOWN, SPECIES_MINIOR_METEOR_BLUE, SPECIES_MINIOR_CORE_BLUE, 2}, - {ABILITY_SHIELDS_DOWN, SPECIES_MINIOR_METEOR_GREEN, SPECIES_MINIOR_CORE_GREEN, 2}, - {ABILITY_SHIELDS_DOWN, SPECIES_MINIOR_METEOR_INDIGO, SPECIES_MINIOR_CORE_INDIGO, 2}, - {ABILITY_SHIELDS_DOWN, SPECIES_MINIOR_METEOR_ORANGE, SPECIES_MINIOR_CORE_ORANGE, 2}, - {ABILITY_SHIELDS_DOWN, SPECIES_MINIOR_METEOR_VIOLET, SPECIES_MINIOR_CORE_VIOLET, 2}, - {ABILITY_SHIELDS_DOWN, SPECIES_MINIOR_METEOR_YELLOW, SPECIES_MINIOR_CORE_YELLOW, 2}, - {ABILITY_SCHOOLING, SPECIES_WISHIWASHI_SCHOOL, SPECIES_WISHIWASHI, 4}, - {ABILITY_GULP_MISSILE, SPECIES_CRAMORANT, SPECIES_CRAMORANT_GORGING, 2}, - {ABILITY_GULP_MISSILE, SPECIES_CRAMORANT, SPECIES_CRAMORANT_GULPING, 1}, - {ABILITY_ZEN_MODE, SPECIES_DARMANITAN_GALARIAN, SPECIES_DARMANITAN_ZEN_MODE_GALARIAN, 2}, - }; - u32 i; - u16 battlerAbility = GetBattlerAbility(battler); - - if (gBattleMons[battler].status2 & STATUS2_TRANSFORMED) - return FALSE; - - for (i = 0; i < ARRAY_COUNT(forms); i++) - { - if (battlerAbility == forms[i][0]) - { - if (gBattleMons[battler].species == forms[i][2] - && gBattleMons[battler].hp > gBattleMons[battler].maxHP / forms[i][3]) - { - gBattleMons[battler].species = forms[i][1]; - return TRUE; - } - if (gBattleMons[battler].species == forms[i][1] - && gBattleMons[battler].hp <= gBattleMons[battler].maxHP / forms[i][3]) - { - gBattleMons[battler].species = forms[i][2]; - return TRUE; - } - } - } - return FALSE; -} - static u8 ForewarnChooseMove(u32 battler) { struct Forewarn { @@ -4738,7 +4693,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move // Fallthrough case ABILITY_ZEN_MODE: case ABILITY_SHIELDS_DOWN: - if (ShouldChangeFormHpBased(battler)) + if (TryBattleFormChange(battler, FORM_CHANGE_BATTLE_HP_PERCENT)) { BattleScriptPushCursorAndCallback(BattleScript_AttackerFormChangeEnd3); effect++; @@ -4959,15 +4914,9 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move // Fallthrough case ABILITY_ZEN_MODE: case ABILITY_SHIELDS_DOWN: - if ((effect = ShouldChangeFormHpBased(battler))) - BattleScriptPushCursorAndCallback(BattleScript_AttackerFormChangeEnd3); - break; case ABILITY_POWER_CONSTRUCT: - if ((gBattleMons[battler].species == SPECIES_ZYGARDE || gBattleMons[battler].species == SPECIES_ZYGARDE_10) - && gBattleMons[battler].hp <= gBattleMons[battler].maxHP / 2) + if (TryBattleFormChange(battler, FORM_CHANGE_BATTLE_HP_PERCENT)) { - gBattleStruct->changedSpecies[gBattlerPartyIndexes[battler]] = gBattleMons[battler].species; - gBattleMons[battler].species = SPECIES_ZYGARDE_COMPLETE; BattleScriptPushCursorAndCallback(BattleScript_AttackerFormChangeEnd3); effect++; } @@ -5614,7 +5563,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move { if (gBattleMons[gBattlerTarget].species == SPECIES_CRAMORANT_GORGING) { - gBattleStruct->changedSpecies[gBattlerPartyIndexes[gBattlerTarget]] = gBattleMons[gBattlerTarget].species; gBattleMons[gBattlerTarget].species = SPECIES_CRAMORANT; if (GetBattlerAbility(gBattlerAttacker) != ABILITY_MAGIC_GUARD) { @@ -5628,7 +5576,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move } else if (gBattleMons[gBattlerTarget].species == SPECIES_CRAMORANT_GULPING) { - gBattleStruct->changedSpecies[gBattlerPartyIndexes[gBattlerTarget]] = gBattleMons[gBattlerTarget].species; gBattleMons[gBattlerTarget].species = SPECIES_CRAMORANT; if (GetBattlerAbility(gBattlerAttacker) != ABILITY_MAGIC_GUARD) { @@ -5681,7 +5628,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move break; case ABILITY_GULP_MISSILE: if (((gCurrentMove == MOVE_SURF && TARGET_TURN_DAMAGED) || gStatuses3[gBattlerAttacker] & STATUS3_UNDERWATER) - && (effect = ShouldChangeFormHpBased(gBattlerAttacker))) + && TryBattleFormChange(gBattlerAttacker, FORM_CHANGE_BATTLE_HP_PERCENT)) { BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_AttackerFormChange; @@ -9552,59 +9499,27 @@ bool32 IsPartnerMonFromSameTrainer(u8 battlerId) return TRUE; } -u16 GetMegaEvolutionSpecies(u16 preEvoSpecies, u16 heldItemId) -{ - u32 i; - const struct FormChange *formChanges = gFormChangeTablePointers[preEvoSpecies]; - - if (formChanges != NULL) - { - for (i = 0; formChanges[i].method != FORM_CHANGE_END; i++) - { - if ((formChanges[i].method == FORM_CHANGE_MEGA_EVOLUTION_ITEM - && formChanges[i].param1 == heldItemId) - && formChanges[i].targetSpecies != preEvoSpecies) - return formChanges[i].targetSpecies; - } - } - return SPECIES_NONE; -} - -u16 GetPrimalReversionSpecies(u16 preSpecies, u16 heldItemId) +bool32 DoesSpeciesUseHoldItemToChangeForm(u16 species, u16 heldItemId) { u32 i; - const struct FormChange *formChanges = gFormChangeTablePointers[preSpecies]; - - if (formChanges != NULL) - { - for (i = 0; formChanges[i].method != FORM_CHANGE_END; i++) - { - if (formChanges[i].method == FORM_CHANGE_PRIMAL_REVERSION - && formChanges[i].param1 == heldItemId - && formChanges[i].targetSpecies != preSpecies) - return formChanges[i].targetSpecies; - } - } - return SPECIES_NONE; -} - -u16 GetWishMegaEvolutionSpecies(u16 preEvoSpecies, u16 moveId1, u16 moveId2, u16 moveId3, u16 moveId4) -{ - u32 i, param; - const struct FormChange *formChanges = gFormChangeTablePointers[preEvoSpecies]; + const struct FormChange *formChanges = gFormChangeTablePointers[species]; if (formChanges != NULL) { for (i = 0; formChanges[i].method != FORM_CHANGE_END; i++) { - param = formChanges[i].param1; - if ((formChanges[i].method == FORM_CHANGE_MEGA_EVOLUTION_MOVE - && (param == moveId1 || param == moveId2 || param == moveId3 || param == moveId4)) - && formChanges[i].targetSpecies != preEvoSpecies) - return formChanges[i].targetSpecies; + switch (formChanges[i].method) + { + case FORM_CHANGE_MEGA_EVOLUTION_ITEM: + case FORM_CHANGE_PRIMAL_REVERSION: + case FORM_CHANGE_ITEM_HOLD: + if (formChanges[i].param1 == heldItemId) + return TRUE; + break; + } } } - return SPECIES_NONE; + return FALSE; } bool32 CanMegaEvolve(u8 battlerId) @@ -9647,7 +9562,7 @@ bool32 CanMegaEvolve(u8 battlerId) itemId = GetMonData(mon, MON_DATA_HELD_ITEM); // Check if there is an entry in the evolution table for regular Mega Evolution. - if (GetMegaEvolutionSpecies(species, itemId) != SPECIES_NONE) + if (GetBattleFormChangeTargetSpecies(battlerId, FORM_CHANGE_MEGA_EVOLUTION_ITEM) != SPECIES_NONE) { #if B_ENABLE_DEBUG == TRUE if (B_ENABLE_DEBUG && gBattleStruct->debugHoldEffects[battlerId]) @@ -9668,7 +9583,7 @@ bool32 CanMegaEvolve(u8 battlerId) } // Check if there is an entry in the evolution table for Wish Mega Evolution. - if (GetWishMegaEvolutionSpecies(species, GetMonData(mon, MON_DATA_MOVE1), GetMonData(mon, MON_DATA_MOVE2), GetMonData(mon, MON_DATA_MOVE3), GetMonData(mon, MON_DATA_MOVE4))) + if (GetBattleFormChangeTargetSpecies(battlerId, FORM_CHANGE_MEGA_EVOLUTION_MOVE) != SPECIES_NONE) { gBattleStruct->mega.isWishMegaEvo = TRUE; return TRUE; @@ -9678,17 +9593,6 @@ bool32 CanMegaEvolve(u8 battlerId) return FALSE; } -void UndoMegaEvolution(u32 monId) -{ - // While not exactly a mega evolution, Zygarde follows the same rules. - if (GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, NULL) == SPECIES_ZYGARDE_COMPLETE) - { - SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &gBattleStruct->changedSpecies[monId]); - gBattleStruct->changedSpecies[monId] = 0; - CalculateMonStats(&gPlayerParty[monId]); - } -} - bool32 IsBattlerMegaEvolved(u8 battlerId) { return (gBaseStats[gBattleMons[battlerId].species].flags & SPECIES_FLAG_MEGA_EVOLUTION); @@ -9699,17 +9603,121 @@ bool32 IsBattlerPrimalReverted(u8 battlerId) return (gBaseStats[gBattleMons[battlerId].species].flags & SPECIES_FLAG_PRIMAL_REVERSION); } -void TryBattleFormChange(u8 battlerId, u16 method) +// Returns SPECIES_NONE if no form change is possible +u16 GetBattleFormChangeTargetSpecies(u8 battlerId, u16 method) +{ + u32 i, j; + u16 targetSpecies = SPECIES_NONE; + u16 species = gBattleMons[battlerId].species; + const struct FormChange *formChanges = gFormChangeTablePointers[species]; + u16 heldItem; + u32 ability; + + if (formChanges != NULL) + { + heldItem = gBattleMons[battlerId].item; + ability = GetBattlerAbility(battlerId); + + for (i = 0; formChanges[i].method != FORM_CHANGE_END; i++) + { + if (method == formChanges[i].method && species != formChanges[i].targetSpecies) + { + switch (method) + { + case FORM_CHANGE_MEGA_EVOLUTION_ITEM: + case FORM_CHANGE_PRIMAL_REVERSION: + if (heldItem == formChanges[i].param1) + targetSpecies = formChanges[i].targetSpecies; + break; + case FORM_CHANGE_MEGA_EVOLUTION_MOVE: + if (gBattleMons[battlerId].moves[0] == formChanges[i].param1 + || gBattleMons[battlerId].moves[1] == formChanges[i].param1 + || gBattleMons[battlerId].moves[2] == formChanges[i].param1 + || gBattleMons[battlerId].moves[3] == formChanges[i].param1) + targetSpecies = formChanges[i].targetSpecies; + break; + case FORM_CHANGE_BATTLE_SWITCH: + targetSpecies = formChanges[i].targetSpecies; + break; + case FORM_CHANGE_BATTLE_HP_PERCENT: + { + if (formChanges[i].param1 == GetBattlerAbility(battlerId)) + { + // We multiply by 100 to make sure that integer division doesn't mess with the health check. + u32 hpCheck = gBattleMons[battlerId].hp * 100 * 100 / gBattleMons[battlerId].maxHP; + switch(formChanges[i].param2) + { + case HP_HIGHER_THAN: + if (hpCheck > formChanges[i].param3 * 100) + targetSpecies = formChanges[i].targetSpecies; + break; + case HP_LOWER_EQ_THAN: + if (hpCheck <= formChanges[i].param3 * 100) + targetSpecies = formChanges[i].targetSpecies; + break; + } + } + break; + } + } + } + } + } + + return targetSpecies; +} + +bool32 TryBattleFormChange(u8 battlerId, u16 method) { u8 monId = gBattlerPartyIndexes[battlerId]; u8 side = GET_BATTLER_SIDE(battlerId); struct Pokemon *party = (side == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty; + u16 targetSpecies; + + // Can't change form if transformed. + if (gBattleMons[battlerId].status2 & STATUS2_TRANSFORMED) + return FALSE; + + if (!DoesSpeciesHaveFormChangeMethod(gBattleMons[battlerId].species, method)) + return FALSE; + + targetSpecies = GetBattleFormChangeTargetSpecies(battlerId, method); + if (targetSpecies != SPECIES_NONE) + { + // Saves the original species on the first form change. + if (gBattleStruct->changedSpecies[monId] == SPECIES_NONE) + gBattleStruct->changedSpecies[monId] = gBattleMons[battlerId].species; + + TryToSetBattleFormChangeMoves(&party[monId], method); + SetMonData(&party[monId], MON_DATA_SPECIES, &targetSpecies); + gBattleMons[battlerId].species = targetSpecies; + RecalcBattlerStats(battlerId, &party[monId]); + return TRUE; + } - if (TryFormChange(monId, side, method)) + targetSpecies = GetFormChangeTargetSpecies(&party[monId], method, 0); + if (targetSpecies != SPECIES_NONE) { - CopyMonLevelAndBaseStatsToBattleMon(battlerId, &party[monId]); - CopyMonAbilityAndTypesToBattleMon(battlerId, &party[monId]); + // Saves the original species on the first form change. + if (gBattleStruct->changedSpecies[monId] == SPECIES_NONE) + gBattleStruct->changedSpecies[monId] = targetSpecies; + + TryToSetBattleFormChangeMoves(&party[monId], method); + SetMonData(&party[monId], MON_DATA_SPECIES, &targetSpecies); + gBattleMons[battlerId].species = targetSpecies; + RecalcBattlerStats(battlerId, &party[monId]); + return TRUE; } + else if ((method == FORM_CHANGE_BATTLE_END || method == FORM_CHANGE_FAINT) + && gBattleStruct->changedSpecies[monId] != SPECIES_NONE) + { + TryToSetBattleFormChangeMoves(&party[monId], method); + SetMonData(&party[monId], MON_DATA_SPECIES, &gBattleStruct->changedSpecies[monId]); + RecalcBattlerStats(battlerId, &party[monId]); + return TRUE; + } + + return FALSE; } bool32 DoBattlersShareType(u32 battler1, u32 battler2) @@ -9740,24 +9748,10 @@ bool32 CanBattlerGetOrLoseItem(u8 battlerId, u16 itemId) // Mail can be stolen now if (itemId == ITEM_ENIGMA_BERRY_E_READER) return FALSE; - // Primal Reversion inducing items cannot be lost if pokemon's base species can undergo primal reversion with it. - else if (holdEffect == HOLD_EFFECT_PRIMAL_ORB && (GetPrimalReversionSpecies(GET_BASE_SPECIES_ID(species), itemId) != SPECIES_NONE)) + else if (DoesSpeciesUseHoldItemToChangeForm(species, itemId)) return FALSE; - // Mega stone cannot be lost if pokemon's base species can mega evolve with it. - else if (holdEffect == HOLD_EFFECT_MEGA_STONE && (GetMegaEvolutionSpecies(GET_BASE_SPECIES_ID(species), itemId) != SPECIES_NONE)) - return FALSE; - else if (GET_BASE_SPECIES_ID(species) == SPECIES_GIRATINA && itemId == ITEM_GRISEOUS_ORB) - return FALSE; - else if (GET_BASE_SPECIES_ID(species) == SPECIES_GENESECT && holdEffect == HOLD_EFFECT_DRIVE) - return FALSE; - else if (GET_BASE_SPECIES_ID(species) == SPECIES_SILVALLY && holdEffect == HOLD_EFFECT_MEMORY) - return FALSE; - else if (GET_BASE_SPECIES_ID(species) == SPECIES_ARCEUS && holdEffect == HOLD_EFFECT_PLATE) - return FALSE; -#ifdef HOLD_EFFECT_Z_CRYSTAL else if (holdEffect == HOLD_EFFECT_Z_CRYSTAL) return FALSE; -#endif else return TRUE; } diff --git a/src/data/pokemon/form_change_table_pointers.h b/src/data/pokemon/form_change_table_pointers.h index d69ced5bf2fc..06d5825a2d35 100644 --- a/src/data/pokemon/form_change_table_pointers.h +++ b/src/data/pokemon/form_change_table_pointers.h @@ -148,6 +148,9 @@ const struct FormChange *const gFormChangeTablePointers[NUM_SPECIES] = [SPECIES_AEGISLASH_BLADE] = sAegislashFormChangeTable, [SPECIES_XERNEAS] = sXerneasFormChangeTable, [SPECIES_XERNEAS_ACTIVE] = sXerneasFormChangeTable, + [SPECIES_ZYGARDE_10_POWER_CONSTRUCT] = sZygardePowerConstructFormChangeTable, + [SPECIES_ZYGARDE_50_POWER_CONSTRUCT] = sZygardePowerConstructFormChangeTable, + [SPECIES_ZYGARDE_COMPLETE] = sZygardePowerConstructFormChangeTable, [SPECIES_DIANCIE] = sDiancieFormChangeTable, [SPECIES_DIANCIE_MEGA] = sDiancieFormChangeTable, [SPECIES_HOOPA] = sHoopaFormChangeTable, diff --git a/src/data/pokemon/form_change_tables.h b/src/data/pokemon/form_change_tables.h index 9c0b2d866663..1df1d7581d9c 100644 --- a/src/data/pokemon/form_change_tables.h +++ b/src/data/pokemon/form_change_tables.h @@ -24,6 +24,8 @@ FORM_CHANGE_FAINT: Form change activates when the Pokémon faints, either in battle or in the overworld by poison. + If species is not specified and it's on the player's side, it will try to use the value + saved in gBattleStruct->changedSpecies from a previous form change. No parameters. FORM_CHANGE_BATTLE_BEGIN: @@ -33,7 +35,8 @@ param3 = a new move to replace it with, optional FORM_CHANGE_BATTLE_END: - Form change activates at the end of a battle + Form change activates at the end of a battle. If species is not specified and it's on the player's side, + it will try to use the value saved in gBattleStruct->changedSpecies from a previous form change. param1 = item to hold, optional param2 = a move that will be replaced, optional param3 = a new move to replace it with, optional @@ -42,10 +45,27 @@ Form change activates when the Pokémon is switched out in battle. No parameters. +FORM_CHANGE_BATTLE_HP_PERCENT: + Form change activates when the Pokémon's HP % passes a certain threshold. + param1 = Ability to check. + param2 = HP_HIGHER_THAN if the form triggers when the current HP is higher than the specified threshold. + HP_LOWER_EQ_THAN if the form triggers when the current HP is lower or equal than the specified threshold. + param3 = HP percentage threshold. + +FORM_CHANGE_MEGA_EVOLUTION_ITEM: + Form change activates when the mon has the defined item. If it's on the player's side, it also requires + ITEM_MEGA_RING in the user's bag and for the player to choose to enable it. + param1 = item to hold. + +FORM_CHANGE_MEGA_EVOLUTION_MOVE: + Form change activates when the mon has the defined move. If it's on the player's side, it also requires + ITEM_MEGA_RING in the user's bag and for the player to choose to enable it. + param1 = move to have. + FORM_CHANGE_PRIMAL_REVERSION: - Form change activates when entering battle with the specified item. If the item is a Red Orb, + Form change activates automatically when entering battle with the specified item. If the item is a Red Orb, it uses the Omega Symbol for the animation and icon. Otherwise, it defaults to Alpha. - param1 = item to hold, required. + param1 = item to hold. */ // FORM_CHANGE_MOVE param2 Arguments @@ -440,16 +460,18 @@ static const struct FormChange sAudinoFormChangeTable[] = { }; static const struct FormChange sDarmanitanFormChangeTable[] = { - {FORM_CHANGE_BATTLE_SWITCH, SPECIES_DARMANITAN}, - {FORM_CHANGE_FAINT, SPECIES_DARMANITAN}, - {FORM_CHANGE_BATTLE_END, SPECIES_DARMANITAN}, + {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_DARMANITAN, ABILITY_ZEN_MODE, HP_HIGHER_THAN, 50}, + {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_DARMANITAN_ZEN_MODE, ABILITY_ZEN_MODE, HP_LOWER_EQ_THAN, 50}, + {FORM_CHANGE_FAINT, SPECIES_DARMANITAN}, + {FORM_CHANGE_BATTLE_END, SPECIES_DARMANITAN}, {FORM_CHANGE_END}, }; static const struct FormChange sDarmanitanGalarianFormChangeTable[] = { - {FORM_CHANGE_BATTLE_SWITCH, SPECIES_DARMANITAN_GALARIAN}, - {FORM_CHANGE_FAINT, SPECIES_DARMANITAN_GALARIAN}, - {FORM_CHANGE_BATTLE_END, SPECIES_DARMANITAN_GALARIAN}, + {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_DARMANITAN_GALARIAN, ABILITY_ZEN_MODE, HP_HIGHER_THAN, 50}, + {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_DARMANITAN_ZEN_MODE_GALARIAN, ABILITY_ZEN_MODE, HP_LOWER_EQ_THAN, 50}, + {FORM_CHANGE_FAINT, SPECIES_DARMANITAN_GALARIAN}, + {FORM_CHANGE_BATTLE_END, SPECIES_DARMANITAN_GALARIAN}, {FORM_CHANGE_END}, }; @@ -513,6 +535,13 @@ static const struct FormChange sXerneasFormChangeTable[] = { {FORM_CHANGE_END}, }; +static const struct FormChange sZygardePowerConstructFormChangeTable[] = { + {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_ZYGARDE_COMPLETE, ABILITY_POWER_CONSTRUCT, HP_LOWER_EQ_THAN, 50}, + {FORM_CHANGE_FAINT}, + {FORM_CHANGE_BATTLE_END}, + {FORM_CHANGE_END}, +}; + static const struct FormChange sDiancieFormChangeTable[] = { {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_DIANCIE_MEGA, ITEM_DIANCITE}, {FORM_CHANGE_FAINT, SPECIES_DIANCIE}, @@ -536,9 +565,11 @@ static const struct FormChange sOricorioFormChangeTable[] = { {FORM_CHANGE_END}, }; static const struct FormChange sWishiwashiFormChangeTable[] = { - {FORM_CHANGE_BATTLE_SWITCH, SPECIES_WISHIWASHI}, - {FORM_CHANGE_FAINT, SPECIES_WISHIWASHI}, - {FORM_CHANGE_BATTLE_END, SPECIES_WISHIWASHI}, + {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_WISHIWASHI_SCHOOL, ABILITY_SCHOOLING, HP_HIGHER_THAN, 25}, + {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_WISHIWASHI, ABILITY_SCHOOLING, HP_LOWER_EQ_THAN, 25}, + {FORM_CHANGE_BATTLE_SWITCH, SPECIES_WISHIWASHI}, + {FORM_CHANGE_FAINT, SPECIES_WISHIWASHI}, + {FORM_CHANGE_BATTLE_END, SPECIES_WISHIWASHI}, {FORM_CHANGE_END}, }; @@ -571,55 +602,70 @@ static const struct FormChange sMimikyuFormChangeTable[] = { }; static const struct FormChange sMiniorRedFormChangeTable[] = { - {FORM_CHANGE_BATTLE_SWITCH, SPECIES_MINIOR_CORE_RED}, - {FORM_CHANGE_FAINT, SPECIES_MINIOR_CORE_RED}, - {FORM_CHANGE_BATTLE_END, SPECIES_MINIOR_CORE_RED}, + {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_MINIOR, ABILITY_SHIELDS_DOWN, HP_HIGHER_THAN, 50}, + {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_MINIOR_CORE_RED, ABILITY_SHIELDS_DOWN, HP_LOWER_EQ_THAN, 50}, + {FORM_CHANGE_BATTLE_SWITCH, SPECIES_MINIOR_CORE_RED}, + {FORM_CHANGE_FAINT, SPECIES_MINIOR_CORE_RED}, + {FORM_CHANGE_BATTLE_END, SPECIES_MINIOR_CORE_RED}, {FORM_CHANGE_END}, }; static const struct FormChange sMiniorBlueFormChangeTable[] = { - {FORM_CHANGE_BATTLE_SWITCH, SPECIES_MINIOR_CORE_BLUE}, - {FORM_CHANGE_FAINT, SPECIES_MINIOR_CORE_BLUE}, - {FORM_CHANGE_BATTLE_END, SPECIES_MINIOR_CORE_BLUE}, + {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_MINIOR_METEOR_BLUE, ABILITY_SHIELDS_DOWN, HP_HIGHER_THAN, 50}, + {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_MINIOR_CORE_BLUE, ABILITY_SHIELDS_DOWN, HP_LOWER_EQ_THAN, 50}, + {FORM_CHANGE_BATTLE_SWITCH, SPECIES_MINIOR_CORE_BLUE}, + {FORM_CHANGE_FAINT, SPECIES_MINIOR_CORE_BLUE}, + {FORM_CHANGE_BATTLE_END, SPECIES_MINIOR_CORE_BLUE}, {FORM_CHANGE_END}, }; static const struct FormChange sMiniorGreenFormChangeTable[] = { - {FORM_CHANGE_BATTLE_SWITCH, SPECIES_MINIOR_CORE_GREEN}, - {FORM_CHANGE_FAINT, SPECIES_MINIOR_CORE_GREEN}, - {FORM_CHANGE_BATTLE_END, SPECIES_MINIOR_CORE_GREEN}, + {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_MINIOR_METEOR_GREEN, ABILITY_SHIELDS_DOWN, HP_HIGHER_THAN, 50}, + {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_MINIOR_CORE_GREEN, ABILITY_SHIELDS_DOWN, HP_LOWER_EQ_THAN, 50}, + {FORM_CHANGE_BATTLE_SWITCH, SPECIES_MINIOR_CORE_GREEN}, + {FORM_CHANGE_FAINT, SPECIES_MINIOR_CORE_GREEN}, + {FORM_CHANGE_BATTLE_END, SPECIES_MINIOR_CORE_GREEN}, {FORM_CHANGE_END}, }; static const struct FormChange sMiniorIndigoFormChangeTable[] = { - {FORM_CHANGE_BATTLE_SWITCH, SPECIES_MINIOR_CORE_INDIGO}, - {FORM_CHANGE_FAINT, SPECIES_MINIOR_CORE_INDIGO}, - {FORM_CHANGE_BATTLE_END, SPECIES_MINIOR_CORE_INDIGO}, + {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_MINIOR_METEOR_INDIGO, ABILITY_SHIELDS_DOWN, HP_HIGHER_THAN, 50}, + {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_MINIOR_CORE_INDIGO, ABILITY_SHIELDS_DOWN, HP_LOWER_EQ_THAN, 50}, + {FORM_CHANGE_BATTLE_SWITCH, SPECIES_MINIOR_CORE_INDIGO}, + {FORM_CHANGE_FAINT, SPECIES_MINIOR_CORE_INDIGO}, + {FORM_CHANGE_BATTLE_END, SPECIES_MINIOR_CORE_INDIGO}, {FORM_CHANGE_END}, }; static const struct FormChange sMiniorOrangeFormChangeTable[] = { - {FORM_CHANGE_BATTLE_SWITCH, SPECIES_MINIOR_CORE_ORANGE}, - {FORM_CHANGE_FAINT, SPECIES_MINIOR_CORE_ORANGE}, - {FORM_CHANGE_BATTLE_END, SPECIES_MINIOR_CORE_ORANGE}, + {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_MINIOR_METEOR_ORANGE, ABILITY_SHIELDS_DOWN, HP_HIGHER_THAN, 50}, + {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_MINIOR_CORE_ORANGE, ABILITY_SHIELDS_DOWN, HP_LOWER_EQ_THAN, 50}, + {FORM_CHANGE_BATTLE_SWITCH, SPECIES_MINIOR_CORE_ORANGE}, + {FORM_CHANGE_FAINT, SPECIES_MINIOR_CORE_ORANGE}, + {FORM_CHANGE_BATTLE_END, SPECIES_MINIOR_CORE_ORANGE}, {FORM_CHANGE_END}, }; static const struct FormChange sMiniorVioletFormChangeTable[] = { - {FORM_CHANGE_BATTLE_SWITCH, SPECIES_MINIOR_CORE_VIOLET}, - {FORM_CHANGE_FAINT, SPECIES_MINIOR_CORE_VIOLET}, - {FORM_CHANGE_BATTLE_END, SPECIES_MINIOR_CORE_VIOLET}, + {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_MINIOR_METEOR_VIOLET, ABILITY_SHIELDS_DOWN, HP_HIGHER_THAN, 50}, + {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_MINIOR_CORE_VIOLET, ABILITY_SHIELDS_DOWN, HP_LOWER_EQ_THAN, 50}, + {FORM_CHANGE_BATTLE_SWITCH, SPECIES_MINIOR_CORE_VIOLET}, + {FORM_CHANGE_FAINT, SPECIES_MINIOR_CORE_VIOLET}, + {FORM_CHANGE_BATTLE_END, SPECIES_MINIOR_CORE_VIOLET}, {FORM_CHANGE_END}, }; static const struct FormChange sMiniorYellowFormChangeTable[] = { - {FORM_CHANGE_BATTLE_SWITCH, SPECIES_MINIOR_CORE_YELLOW}, - {FORM_CHANGE_FAINT, SPECIES_MINIOR_CORE_YELLOW}, - {FORM_CHANGE_BATTLE_END, SPECIES_MINIOR_CORE_YELLOW}, + {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_MINIOR_METEOR_YELLOW, ABILITY_SHIELDS_DOWN, HP_HIGHER_THAN, 50}, + {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_MINIOR_CORE_YELLOW, ABILITY_SHIELDS_DOWN, HP_LOWER_EQ_THAN, 50}, + {FORM_CHANGE_BATTLE_SWITCH, SPECIES_MINIOR_CORE_YELLOW}, + {FORM_CHANGE_FAINT, SPECIES_MINIOR_CORE_YELLOW}, + {FORM_CHANGE_BATTLE_END, SPECIES_MINIOR_CORE_YELLOW}, {FORM_CHANGE_END}, }; - #endif #if P_GEN_8_POKEMON == TRUE static const struct FormChange sCramorantFormChangeTable[] = { - {FORM_CHANGE_BATTLE_SWITCH, SPECIES_CRAMORANT}, - {FORM_CHANGE_FAINT, SPECIES_CRAMORANT}, - {FORM_CHANGE_BATTLE_END, SPECIES_CRAMORANT}, + {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_CRAMORANT_GULPING, ABILITY_GULP_MISSILE, HP_HIGHER_THAN, 50}, + {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_CRAMORANT_GORGING, ABILITY_GULP_MISSILE, HP_LOWER_EQ_THAN, 50}, + {FORM_CHANGE_BATTLE_SWITCH, SPECIES_CRAMORANT}, + {FORM_CHANGE_FAINT, SPECIES_CRAMORANT}, + {FORM_CHANGE_BATTLE_END, SPECIES_CRAMORANT}, {FORM_CHANGE_END}, }; diff --git a/src/daycare.c b/src/daycare.c index fc44e200e668..82280077bd72 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -256,7 +256,8 @@ static u16 TakeSelectedPokemonFromDaycare(struct DaycareMon *daycareMon) BoxMonToMon(&daycareMon->mon, &pokemon); newSpecies = GetFormChangeTargetSpecies(&pokemon, FORM_CHANGE_WITHDRAW, 0); - if (newSpecies != SPECIES_NONE) { + if (newSpecies != SPECIES_NONE) + { SetMonData(&pokemon, MON_DATA_SPECIES, &newSpecies); CalculateMonStats(&pokemon); species = newSpecies; diff --git a/src/pokemon.c b/src/pokemon.c index d4f14b5b9b7c..0fc69a35f2af 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -3999,13 +3999,14 @@ void CalculateMonStats(struct Pokemon *mon) { if (currentHP == 0 && oldMaxHP == 0) currentHP = newMaxHP; - else if (currentHP != 0) { - // BUG: currentHP is unintentionally able to become <= 0 after the instruction below. This causes the pomeg berry glitch. - currentHP += newMaxHP - oldMaxHP; - #ifdef BUGFIX + else if (currentHP != 0) + { + if (newMaxHP > oldMaxHP) + currentHP += newMaxHP - oldMaxHP; if (currentHP <= 0) currentHP = 1; - #endif + if (currentHP > newMaxHP) + currentHP = newMaxHP; } else return; @@ -8397,13 +8398,8 @@ u16 GetFormChangeTargetSpeciesBoxMon(struct BoxPokemon *boxMon, u16 method, u32 case FORM_CHANGE_BATTLE_END: if (heldItem == formChanges[i].param1 || formChanges[i].param1 == ITEM_NONE) targetSpecies = formChanges[i].targetSpecies; - break; - case FORM_CHANGE_PRIMAL_REVERSION: - if (arg == formChanges[i].param1) - targetSpecies = formChanges[i].targetSpecies; - break; + break; case FORM_CHANGE_WITHDRAW: - case FORM_CHANGE_BATTLE_SWITCH: case FORM_CHANGE_FAINT: targetSpecies = formChanges[i].targetSpecies; break; @@ -8415,6 +8411,23 @@ u16 GetFormChangeTargetSpeciesBoxMon(struct BoxPokemon *boxMon, u16 method, u32 return targetSpecies; } +bool32 DoesSpeciesHaveFormChangeMethod(u16 species, u16 method) +{ + u32 i, j; + const struct FormChange *formChanges = gFormChangeTablePointers[species]; + + if (formChanges != NULL) + { + for (i = 0; formChanges[i].method != FORM_CHANGE_END; i++) + { + if (method == formChanges[i].method && species != formChanges[i].targetSpecies) + return TRUE; + } + } + + return FALSE; +} + u16 MonTryLearningNewMoveEvolution(struct Pokemon *mon, bool8 firstMove) { u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL); @@ -8495,12 +8508,21 @@ bool32 ShouldShowFemaleDifferences(u16 species, u32 personality) return (gBaseStats[species].flags & SPECIES_FLAG_GENDER_DIFFERENCE) && GetGenderFromSpeciesAndPersonality(species, personality) == MON_FEMALE; } +// Returns species that it transformed into. If it didn't, returns SPECIES_NONE. bool32 TryFormChange(u32 monId, u32 side, u16 method) { - u32 targetSpecies; struct Pokemon *party = (side == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty; + u16 targetSpecies; + + if (GetMonData(&party[monId], MON_DATA_SPECIES2, 0) == SPECIES_NONE + || GetMonData(&party[monId], MON_DATA_SPECIES2, 0) == SPECIES_EGG) + return FALSE; targetSpecies = GetFormChangeTargetSpecies(&party[monId], method, 0); + + if (targetSpecies == SPECIES_NONE) + targetSpecies = gBattleStruct->changedSpecies[monId]; + if (targetSpecies != SPECIES_NONE) { TryToSetBattleFormChangeMoves(&party[monId], method); @@ -8508,6 +8530,7 @@ bool32 TryFormChange(u32 monId, u32 side, u16 method) CalculateMonStats(&party[monId]); return TRUE; } + return FALSE; } From 8f289714b2037c2d01bc7d6826aa6e527b630632 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sat, 5 Nov 2022 20:57:55 -0300 Subject: [PATCH 016/428] Moved form change defines and descriptions to their own header --- include/battle.h | 1 + include/constants/form_change_types.h | 81 +++++++++++++++++++++++++++ include/constants/pokemon.h | 19 ------- src/data/pokemon/form_change_tables.h | 78 -------------------------- src/daycare.c | 1 + src/field_poison.c | 1 + src/party_menu.c | 1 + src/pokemon.c | 1 + src/pokemon_storage_system.c | 1 + 9 files changed, 87 insertions(+), 97 deletions(-) create mode 100644 include/constants/form_change_types.h diff --git a/include/battle.h b/include/battle.h index 544514f1373b..e0baf889557d 100644 --- a/include/battle.h +++ b/include/battle.h @@ -3,6 +3,7 @@ // should they be included here or included individually by every file? #include "constants/battle.h" +#include "constants/form_change_types.h" #include "battle_main.h" #include "battle_message.h" #include "battle_util.h" diff --git a/include/constants/form_change_types.h b/include/constants/form_change_types.h new file mode 100644 index 000000000000..1eb2af30a927 --- /dev/null +++ b/include/constants/form_change_types.h @@ -0,0 +1,81 @@ + +// FORM_CHANGE_BATTLE_HP_PERCENT param2 arguments +#define HP_HIGHER_THAN 1 +#define HP_LOWER_EQ_THAN 2 +// FORM_CHANGE_MOVE param2 Arguments +#define WHEN_LEARNED 0 +#define WHEN_FORGOTTEN 1 +// FORM_CHANGE_ITEM_USE param2 Arguments +#define DAY 1 +#define NIGHT 2 + +#define FORM_CHANGE_END 0 // Form table terminator + +// Form change that activates when the specified item is given to or taken from the selected Pokémon. +// param1: item to hold. +// param2: ability to check for, optional. +#define FORM_CHANGE_ITEM_HOLD 1 + +// Form change that activates when the item is used on the selected Pokémon. +// param1: item to use +// param2: time of day to check, optional. +// - DAY if Form change that activates in the daytime. +// - NIGHT if Form change that activates at nighttime. +#define FORM_CHANGE_ITEM_USE 2 + +// TODO: Form change that activates when the Pokémon learns or forgets the move. +// param1: move to check for +// param2: +// - WHEN_LEARNED if Form change that activates when move is forgotten +// - WHEN_FORGOTTEN if Form change that activates when move is learned +#define FORM_CHANGE_MOVE 3 + +// Form change that activates when the Pokémon is withdrawn from the PC or Daycare. +// Daycare withdraw done, PC withdraw TODO. +// - No parameters. +#define FORM_CHANGE_WITHDRAW 4 + +// Form change that activates when the Pokémon faints, either in battle or in the overworld by poison. +// If species is not specified and it's on the player's side, it will try to use the value +// saved in gBattleStruct->changedSpecies from a previous form change. +// - No parameters. +#define FORM_CHANGE_FAINT 5 + +// Form change that activates when the Pokémon is sent out at the beginning of a battle +// param1: item to hold, optional +// param2: a move that will be replaced, optional +// param3: a new move to replace it with, optional +#define FORM_CHANGE_BATTLE_BEGIN 6 + +// Form change that activates at the end of a battle. If species is not specified and it's on the player's side, it will try to use the value saved in gBattleStruct->changedSpecies from a previous form change. +// param1: item to hold, optional +// param2: a move that will be replaced, optional +// param3: a new move to replace it with, optional +#define FORM_CHANGE_BATTLE_END 7 + +// Form change that activates when the Pokémon is switched out in battle. +// - No parameters. +#define FORM_CHANGE_BATTLE_SWITCH 8 + +// Form change that activates when the Pokémon's HP % passes a certain threshold. +// param1: Ability to check. +// param2: HP comparer +// - HP_HIGHER_THAN if the form triggers when the current HP is higher than the specified threshold. +// - HP_LOWER_EQ_THAN if the form triggers when the current HP is lower or equal than the specified threshold. +// param3: HP percentage threshold. +#define FORM_CHANGE_BATTLE_HP_PERCENT 9 + +// Form change that activates when the mon has the defined item. +// If it's on the player's side, it also requires ITEM_MEGA_RING in the user's bag and for the player to trigger it by pressing START before selecting a move. +// param1: item to hold. +#define FORM_CHANGE_MEGA_EVOLUTION_ITEM 10 + +// Form change that activates when the mon has the defined move. +// If it's on the player's side, it also requires ITEM_MEGA_RING in the user's bag and for the player to trigger it by pressing START before selecting a move. +// param1: move to have. +#define FORM_CHANGE_MEGA_EVOLUTION_MOVE 11 + +// Form change that activates automatically when entering battle with the specified item. +// If the item is a Red Orb, it uses the Omega Symbol for the animation and icon. Otherwise, it defaults to the Alpha symbol. +// param1: item to hold. +#define FORM_CHANGE_PRIMAL_REVERSION 12 diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h index 088015d0666c..7ba16fc57e3c 100644 --- a/include/constants/pokemon.h +++ b/include/constants/pokemon.h @@ -313,25 +313,6 @@ #define EVO_MODE_BATTLE_SPECIAL 4 #define EVO_MODE_OVERWORLD_SPECIAL 5 -// Form change types -#define FORM_CHANGE_END 0 // Form table terminator -#define FORM_CHANGE_ITEM_HOLD 1 -#define FORM_CHANGE_ITEM_USE 2 -#define FORM_CHANGE_MOVE 3 // Todo -#define FORM_CHANGE_WITHDRAW 4 // Daycare done, Todo PC -#define FORM_CHANGE_FAINT 5 -#define FORM_CHANGE_BATTLE_BEGIN 6 -#define FORM_CHANGE_BATTLE_END 7 -#define FORM_CHANGE_BATTLE_SWITCH 8 -#define FORM_CHANGE_BATTLE_HP_PERCENT 9 -#define FORM_CHANGE_MEGA_EVOLUTION_ITEM 10 -#define FORM_CHANGE_MEGA_EVOLUTION_MOVE 11 -#define FORM_CHANGE_PRIMAL_REVERSION 12 - -// FORM_CHANGE_BATTLE_HP_PERCENT param2 arguments -#define HP_HIGHER_THAN 1 -#define HP_LOWER_EQ_THAN 2 - #define MON_PIC_WIDTH 64 #define MON_PIC_HEIGHT 64 #define MON_PIC_SIZE (MON_PIC_WIDTH * MON_PIC_HEIGHT / 2) diff --git a/src/data/pokemon/form_change_tables.h b/src/data/pokemon/form_change_tables.h index 1df1d7581d9c..4bb0c5780db5 100644 --- a/src/data/pokemon/form_change_tables.h +++ b/src/data/pokemon/form_change_tables.h @@ -1,81 +1,3 @@ -/* -FORM_CHANGE_ITEM_HOLD: - Form change activates when the specified item is given to or taken from the selected Pokémon. - Alternatively, form change activates when the specified item is is given to or taken from - the selected Pokémon that has a particular ability. - param1 = item to hold - param2 = ability to check for, optional - -FORM_CHANGE_ITEM_USE: - Form change activates when the item is used on the selected Pokémon. - param1 = item to use - param2 = DAY if form change activates in the daytime, optional - NIGHT if form change activates at nighttime, optional - -FORM_CHANGE_MOVE: - Form change activates when the Pokémon learns or forgets the move. - param1 = move to check for - param2 = WHEN_LEARNED if form change activates when move is forgotten - WHEN_FORGOTTEN if form change activates when move is learned - -FORM_CHANGE_WITHDRAW: - Form change activates when the Pokémon is withdrawn from the PC or Daycare. - No parameters. - -FORM_CHANGE_FAINT: - Form change activates when the Pokémon faints, either in battle or in the overworld by poison. - If species is not specified and it's on the player's side, it will try to use the value - saved in gBattleStruct->changedSpecies from a previous form change. - No parameters. - -FORM_CHANGE_BATTLE_BEGIN: - Form change activates when the Pokémon is sent out at the beginning of a battle - param1 = item to hold, optional - param2 = a move that will be replaced, optional - param3 = a new move to replace it with, optional - -FORM_CHANGE_BATTLE_END: - Form change activates at the end of a battle. If species is not specified and it's on the player's side, - it will try to use the value saved in gBattleStruct->changedSpecies from a previous form change. - param1 = item to hold, optional - param2 = a move that will be replaced, optional - param3 = a new move to replace it with, optional - -FORM_CHANGE_BATTLE_SWITCH: - Form change activates when the Pokémon is switched out in battle. - No parameters. - -FORM_CHANGE_BATTLE_HP_PERCENT: - Form change activates when the Pokémon's HP % passes a certain threshold. - param1 = Ability to check. - param2 = HP_HIGHER_THAN if the form triggers when the current HP is higher than the specified threshold. - HP_LOWER_EQ_THAN if the form triggers when the current HP is lower or equal than the specified threshold. - param3 = HP percentage threshold. - -FORM_CHANGE_MEGA_EVOLUTION_ITEM: - Form change activates when the mon has the defined item. If it's on the player's side, it also requires - ITEM_MEGA_RING in the user's bag and for the player to choose to enable it. - param1 = item to hold. - -FORM_CHANGE_MEGA_EVOLUTION_MOVE: - Form change activates when the mon has the defined move. If it's on the player's side, it also requires - ITEM_MEGA_RING in the user's bag and for the player to choose to enable it. - param1 = move to have. - -FORM_CHANGE_PRIMAL_REVERSION: - Form change activates automatically when entering battle with the specified item. If the item is a Red Orb, - it uses the Omega Symbol for the animation and icon. Otherwise, it defaults to Alpha. - param1 = item to hold. -*/ - -// FORM_CHANGE_MOVE param2 Arguments -#define WHEN_LEARNED 0 -#define WHEN_FORGOTTEN 1 - -// FORM_CHANGE_ITEM_USE param2 Arguments -#define DAY 1 -#define NIGHT 2 - static const struct FormChange sVenusaurFormChangeTable[] = { {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_VENUSAUR_MEGA, ITEM_VENUSAURITE}, {FORM_CHANGE_FAINT, SPECIES_VENUSAUR}, diff --git a/src/daycare.c b/src/daycare.c index 82280077bd72..f0eae449ec7c 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -20,6 +20,7 @@ #include "list_menu.h" #include "overworld.h" #include "item.h" +#include "constants/form_change_types.h" #include "constants/items.h" #include "constants/moves.h" #include "constants/region_map_sections.h" diff --git a/src/field_poison.c b/src/field_poison.c index 68a345919b08..d1bd381cdb1c 100644 --- a/src/field_poison.c +++ b/src/field_poison.c @@ -15,6 +15,7 @@ #include "task.h" #include "trainer_hill.h" #include "constants/field_poison.h" +#include "constants/form_change_types.h" #include "constants/party_menu.h" static bool32 IsMonValidSpecies(struct Pokemon *pokemon) diff --git a/src/party_menu.c b/src/party_menu.c index da87352b5ac1..a3b65fe365fc 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -66,6 +66,7 @@ #include "constants/battle.h" #include "constants/battle_frontier.h" #include "constants/field_effects.h" +#include "constants/form_change_types.h" #include "constants/item_effects.h" #include "constants/items.h" #include "constants/moves.h" diff --git a/src/pokemon.c b/src/pokemon.c index b5d9633765fa..9c13bd17e7de 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -43,6 +43,7 @@ #include "constants/battle_frontier.h" #include "constants/battle_move_effects.h" #include "constants/battle_script_commands.h" +#include "constants/form_change_types.h" #include "constants/hold_effects.h" #include "constants/item_effects.h" #include "constants/items.h" diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index 3ede591e8a98..e1a38569b312 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -36,6 +36,7 @@ #include "trig.h" #include "walda_phrase.h" #include "window.h" +#include "constants/form_change_types.h" #include "constants/items.h" #include "constants/moves.h" #include "constants/rgb.h" From 99536089cf7a051f4b86606075cbfad4c4e848bd Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sat, 5 Nov 2022 22:02:25 -0300 Subject: [PATCH 017/428] Renamed form change defines to be consistant with which function calls which --- include/constants/form_change_types.h | 26 +- src/battle_main.c | 8 +- src/battle_script_commands.c | 12 +- src/battle_util.c | 20 +- src/data/pokemon/form_change_tables.h | 490 +++++++++++++------------- src/pokemon.c | 12 +- 6 files changed, 284 insertions(+), 284 deletions(-) diff --git a/include/constants/form_change_types.h b/include/constants/form_change_types.h index 1eb2af30a927..c6d4c6eae206 100644 --- a/include/constants/form_change_types.h +++ b/include/constants/form_change_types.h @@ -9,53 +9,53 @@ #define DAY 1 #define NIGHT 2 -#define FORM_CHANGE_END 0 // Form table terminator +#define FORM_CHANGE_TERMINATOR 0 // Form change that activates when the specified item is given to or taken from the selected Pokémon. // param1: item to hold. // param2: ability to check for, optional. -#define FORM_CHANGE_ITEM_HOLD 1 +#define FORM_CHANGE_ITEM_HOLD 1 // Form change that activates when the item is used on the selected Pokémon. // param1: item to use // param2: time of day to check, optional. // - DAY if Form change that activates in the daytime. // - NIGHT if Form change that activates at nighttime. -#define FORM_CHANGE_ITEM_USE 2 +#define FORM_CHANGE_ITEM_USE 2 // TODO: Form change that activates when the Pokémon learns or forgets the move. // param1: move to check for // param2: // - WHEN_LEARNED if Form change that activates when move is forgotten // - WHEN_FORGOTTEN if Form change that activates when move is learned -#define FORM_CHANGE_MOVE 3 +#define FORM_CHANGE_MOVE 3 // Form change that activates when the Pokémon is withdrawn from the PC or Daycare. // Daycare withdraw done, PC withdraw TODO. // - No parameters. -#define FORM_CHANGE_WITHDRAW 4 +#define FORM_CHANGE_WITHDRAW 4 // Form change that activates when the Pokémon faints, either in battle or in the overworld by poison. // If species is not specified and it's on the player's side, it will try to use the value // saved in gBattleStruct->changedSpecies from a previous form change. // - No parameters. -#define FORM_CHANGE_FAINT 5 +#define FORM_CHANGE_FAINT 5 // Form change that activates when the Pokémon is sent out at the beginning of a battle // param1: item to hold, optional // param2: a move that will be replaced, optional // param3: a new move to replace it with, optional -#define FORM_CHANGE_BATTLE_BEGIN 6 +#define FORM_CHANGE_BEGIN_BATTLE 6 // Form change that activates at the end of a battle. If species is not specified and it's on the player's side, it will try to use the value saved in gBattleStruct->changedSpecies from a previous form change. // param1: item to hold, optional // param2: a move that will be replaced, optional // param3: a new move to replace it with, optional -#define FORM_CHANGE_BATTLE_END 7 +#define FORM_CHANGE_END_BATTLE 7 // Form change that activates when the Pokémon is switched out in battle. // - No parameters. -#define FORM_CHANGE_BATTLE_SWITCH 8 +#define FORM_CHANGE_BATTLE_SWITCH 8 // Form change that activates when the Pokémon's HP % passes a certain threshold. // param1: Ability to check. @@ -63,19 +63,19 @@ // - HP_HIGHER_THAN if the form triggers when the current HP is higher than the specified threshold. // - HP_LOWER_EQ_THAN if the form triggers when the current HP is lower or equal than the specified threshold. // param3: HP percentage threshold. -#define FORM_CHANGE_BATTLE_HP_PERCENT 9 +#define FORM_CHANGE_BATTLE_HP_PERCENT 9 // Form change that activates when the mon has the defined item. // If it's on the player's side, it also requires ITEM_MEGA_RING in the user's bag and for the player to trigger it by pressing START before selecting a move. // param1: item to hold. -#define FORM_CHANGE_MEGA_EVOLUTION_ITEM 10 +#define FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM 10 // Form change that activates when the mon has the defined move. // If it's on the player's side, it also requires ITEM_MEGA_RING in the user's bag and for the player to trigger it by pressing START before selecting a move. // param1: move to have. -#define FORM_CHANGE_MEGA_EVOLUTION_MOVE 11 +#define FORM_CHANGE_BATTLE_MEGA_EVOLUTION_MOVE 11 // Form change that activates automatically when entering battle with the specified item. // If the item is a Red Orb, it uses the Omega Symbol for the animation and icon. Otherwise, it defaults to the Alpha symbol. // param1: item to hold. -#define FORM_CHANGE_PRIMAL_REVERSION 12 +#define FORM_CHANGE_BATTLE_PRIMAL_REVERSION 12 diff --git a/src/battle_main.c b/src/battle_main.c index 5138a6e02875..f396b9b0a6d4 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -602,9 +602,9 @@ static void CB2_InitBattleInternal(void) for (i = 0; i < PARTY_SIZE; i++) { // Player's side - TryFormChange(i, B_SIDE_PLAYER, FORM_CHANGE_BATTLE_BEGIN); + TryFormChange(i, B_SIDE_PLAYER, FORM_CHANGE_BEGIN_BATTLE); // Opponent's side - TryFormChange(i, B_SIDE_OPPONENT, FORM_CHANGE_BATTLE_BEGIN); + TryFormChange(i, B_SIDE_OPPONENT, FORM_CHANGE_BEGIN_BATTLE); } gBattleCommunication[MULTIUSE_STATE] = 0; @@ -3682,7 +3682,7 @@ static void TryDoEventsBeforeFirstTurn(void) for (i = 0; i < gBattlersCount; i++) { if (GetBattlerHoldEffect(i, TRUE) == HOLD_EFFECT_PRIMAL_ORB - && GetBattleFormChangeTargetSpecies(i, FORM_CHANGE_PRIMAL_REVERSION) != SPECIES_NONE) + && GetBattleFormChangeTargetSpecies(i, FORM_CHANGE_BATTLE_PRIMAL_REVERSION) != SPECIES_NONE) { gBattlerAttacker = i; BattleScriptExecute(BattleScript_PrimalReversion); @@ -5202,7 +5202,7 @@ static void HandleEndTurn_FinishBattle(void) #endif for (i = 0; i < PARTY_SIZE; i++) { - bool32 changedForm = TryFormChange(i, B_SIDE_PLAYER, FORM_CHANGE_BATTLE_END); + bool32 changedForm = TryFormChange(i, B_SIDE_PLAYER, FORM_CHANGE_END_BATTLE); DoBurmyFormChange(i); // Clear original species field gBattleStruct->changedSpecies[i] = SPECIES_NONE; diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index e60f5a49e2a4..73604ce124f0 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -8965,10 +8965,10 @@ static void Cmd_various(void) if (gBattlescriptCurrInstr[3] == 0) { //Checks regular Mega Evolution - u16 megaSpecies = GetBattleFormChangeTargetSpecies(gActiveBattler, FORM_CHANGE_MEGA_EVOLUTION_ITEM); + u16 megaSpecies = GetBattleFormChangeTargetSpecies(gActiveBattler, FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM); //Checks Wish Mega Evolution if (megaSpecies == SPECIES_NONE) - megaSpecies = GetBattleFormChangeTargetSpecies(gActiveBattler, FORM_CHANGE_MEGA_EVOLUTION_MOVE); + megaSpecies = GetBattleFormChangeTargetSpecies(gActiveBattler, FORM_CHANGE_BATTLE_MEGA_EVOLUTION_MOVE); gBattleMons[gActiveBattler].species = megaSpecies; PREPARE_SPECIES_BUFFER(gBattleTextBuff1, gBattleMons[gActiveBattler].species); @@ -9001,7 +9001,7 @@ static void Cmd_various(void) // Change species. if (gBattlescriptCurrInstr[3] == 0) { - gBattleMons[gActiveBattler].species = GetBattleFormChangeTargetSpecies(gActiveBattler, FORM_CHANGE_PRIMAL_REVERSION); + gBattleMons[gActiveBattler].species = GetBattleFormChangeTargetSpecies(gActiveBattler, FORM_CHANGE_BATTLE_PRIMAL_REVERSION); PREPARE_SPECIES_BUFFER(gBattleTextBuff1, gBattleMons[gActiveBattler].species); BtlController_EmitSetMonData(BUFFER_A, REQUEST_SPECIES_BATTLE, gBitTable[gBattlerPartyIndexes[gActiveBattler]], sizeof(gBattleMons[gActiveBattler].species), &gBattleMons[gActiveBattler].species); @@ -9720,7 +9720,7 @@ static void Cmd_various(void) return; case VARIOUS_JUMP_IF_CANT_REVERT_TO_PRIMAL: { - if (GetBattleFormChangeTargetSpecies(gActiveBattler, FORM_CHANGE_PRIMAL_REVERSION) == SPECIES_NONE) + if (GetBattleFormChangeTargetSpecies(gActiveBattler, FORM_CHANGE_BATTLE_PRIMAL_REVERSION) == SPECIES_NONE) gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); else gBattlescriptCurrInstr += 7; @@ -14241,7 +14241,7 @@ static void Cmd_handleballthrow(void) { BtlController_EmitBallThrowAnim(BUFFER_A, BALL_3_SHAKES_SUCCESS); MarkBattlerForControllerExec(gActiveBattler); - TryBattleFormChange(gBattlerTarget, FORM_CHANGE_BATTLE_END); + TryBattleFormChange(gBattlerTarget, FORM_CHANGE_END_BATTLE); gBattlescriptCurrInstr = BattleScript_SuccessBallThrow; SetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_POKEBALL, &gLastUsedItem); @@ -14295,7 +14295,7 @@ static void Cmd_handleballthrow(void) if (IsCriticalCapture()) gBattleSpritesDataPtr->animationData->criticalCaptureSuccess = TRUE; - TryBattleFormChange(gBattlerTarget, FORM_CHANGE_BATTLE_END); + TryBattleFormChange(gBattlerTarget, FORM_CHANGE_END_BATTLE); gBattlescriptCurrInstr = BattleScript_SuccessBallThrow; SetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_POKEBALL, &gLastUsedItem); diff --git a/src/battle_util.c b/src/battle_util.c index 634e30338e0b..eaf3f72e07f5 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -9654,12 +9654,12 @@ bool32 DoesSpeciesUseHoldItemToChangeForm(u16 species, u16 heldItemId) if (formChanges != NULL) { - for (i = 0; formChanges[i].method != FORM_CHANGE_END; i++) + for (i = 0; formChanges[i].method != FORM_CHANGE_TERMINATOR; i++) { switch (formChanges[i].method) { - case FORM_CHANGE_MEGA_EVOLUTION_ITEM: - case FORM_CHANGE_PRIMAL_REVERSION: + case FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM: + case FORM_CHANGE_BATTLE_PRIMAL_REVERSION: case FORM_CHANGE_ITEM_HOLD: if (formChanges[i].param1 == heldItemId) return TRUE; @@ -9710,7 +9710,7 @@ bool32 CanMegaEvolve(u8 battlerId) itemId = GetMonData(mon, MON_DATA_HELD_ITEM); // Check if there is an entry in the evolution table for regular Mega Evolution. - if (GetBattleFormChangeTargetSpecies(battlerId, FORM_CHANGE_MEGA_EVOLUTION_ITEM) != SPECIES_NONE) + if (GetBattleFormChangeTargetSpecies(battlerId, FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM) != SPECIES_NONE) { #if B_ENABLE_DEBUG == TRUE if (B_ENABLE_DEBUG && gBattleStruct->debugHoldEffects[battlerId]) @@ -9731,7 +9731,7 @@ bool32 CanMegaEvolve(u8 battlerId) } // Check if there is an entry in the evolution table for Wish Mega Evolution. - if (GetBattleFormChangeTargetSpecies(battlerId, FORM_CHANGE_MEGA_EVOLUTION_MOVE) != SPECIES_NONE) + if (GetBattleFormChangeTargetSpecies(battlerId, FORM_CHANGE_BATTLE_MEGA_EVOLUTION_MOVE) != SPECIES_NONE) { gBattleStruct->mega.isWishMegaEvo = TRUE; return TRUE; @@ -9766,18 +9766,18 @@ u16 GetBattleFormChangeTargetSpecies(u8 battlerId, u16 method) heldItem = gBattleMons[battlerId].item; ability = GetBattlerAbility(battlerId); - for (i = 0; formChanges[i].method != FORM_CHANGE_END; i++) + for (i = 0; formChanges[i].method != FORM_CHANGE_TERMINATOR; i++) { if (method == formChanges[i].method && species != formChanges[i].targetSpecies) { switch (method) { - case FORM_CHANGE_MEGA_EVOLUTION_ITEM: - case FORM_CHANGE_PRIMAL_REVERSION: + case FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM: + case FORM_CHANGE_BATTLE_PRIMAL_REVERSION: if (heldItem == formChanges[i].param1) targetSpecies = formChanges[i].targetSpecies; break; - case FORM_CHANGE_MEGA_EVOLUTION_MOVE: + case FORM_CHANGE_BATTLE_MEGA_EVOLUTION_MOVE: if (gBattleMons[battlerId].moves[0] == formChanges[i].param1 || gBattleMons[battlerId].moves[1] == formChanges[i].param1 || gBattleMons[battlerId].moves[2] == formChanges[i].param1 @@ -9856,7 +9856,7 @@ bool32 TryBattleFormChange(u8 battlerId, u16 method) RecalcBattlerStats(battlerId, &party[monId]); return TRUE; } - else if ((method == FORM_CHANGE_BATTLE_END || method == FORM_CHANGE_FAINT) + else if ((method == FORM_CHANGE_END_BATTLE || method == FORM_CHANGE_FAINT) && gBattleStruct->changedSpecies[monId] != SPECIES_NONE) { TryToSetBattleFormChangeMoves(&party[monId], method); diff --git a/src/data/pokemon/form_change_tables.h b/src/data/pokemon/form_change_tables.h index 4bb0c5780db5..6f963b599f2b 100644 --- a/src/data/pokemon/form_change_tables.h +++ b/src/data/pokemon/form_change_tables.h @@ -1,336 +1,336 @@ static const struct FormChange sVenusaurFormChangeTable[] = { - {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_VENUSAUR_MEGA, ITEM_VENUSAURITE}, - {FORM_CHANGE_FAINT, SPECIES_VENUSAUR}, - {FORM_CHANGE_BATTLE_END, SPECIES_VENUSAUR}, - {FORM_CHANGE_END}, + {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_VENUSAUR_MEGA, ITEM_VENUSAURITE}, + {FORM_CHANGE_FAINT, SPECIES_VENUSAUR}, + {FORM_CHANGE_END_BATTLE, SPECIES_VENUSAUR}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sCharizardFormChangeTable[] = { - {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_CHARIZARD_MEGA_X, ITEM_CHARIZARDITE_X}, - {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_CHARIZARD_MEGA_Y, ITEM_CHARIZARDITE_Y}, - {FORM_CHANGE_FAINT, SPECIES_CHARIZARD}, - {FORM_CHANGE_BATTLE_END, SPECIES_CHARIZARD}, - {FORM_CHANGE_END}, + {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_CHARIZARD_MEGA_X, ITEM_CHARIZARDITE_X}, + {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_CHARIZARD_MEGA_Y, ITEM_CHARIZARDITE_Y}, + {FORM_CHANGE_FAINT, SPECIES_CHARIZARD}, + {FORM_CHANGE_END_BATTLE, SPECIES_CHARIZARD}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sBlastoiseFormChangeTable[] = { - {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_BLASTOISE_MEGA, ITEM_BLASTOISINITE}, - {FORM_CHANGE_FAINT, SPECIES_BLASTOISE}, - {FORM_CHANGE_BATTLE_END, SPECIES_BLASTOISE}, - {FORM_CHANGE_END}, + {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_BLASTOISE_MEGA, ITEM_BLASTOISINITE}, + {FORM_CHANGE_FAINT, SPECIES_BLASTOISE}, + {FORM_CHANGE_END_BATTLE, SPECIES_BLASTOISE}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sBeedrillFormChangeTable[] = { - {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_BEEDRILL_MEGA, ITEM_BEEDRILLITE}, - {FORM_CHANGE_FAINT, SPECIES_BEEDRILL}, - {FORM_CHANGE_BATTLE_END, SPECIES_BEEDRILL}, - {FORM_CHANGE_END}, + {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_BEEDRILL_MEGA, ITEM_BEEDRILLITE}, + {FORM_CHANGE_FAINT, SPECIES_BEEDRILL}, + {FORM_CHANGE_END_BATTLE, SPECIES_BEEDRILL}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sPidgeotFormChangeTable[] = { - {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_PIDGEOT_MEGA, ITEM_PIDGEOTITE}, - {FORM_CHANGE_FAINT, SPECIES_PIDGEOT}, - {FORM_CHANGE_BATTLE_END, SPECIES_PIDGEOT}, - {FORM_CHANGE_END}, + {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_PIDGEOT_MEGA, ITEM_PIDGEOTITE}, + {FORM_CHANGE_FAINT, SPECIES_PIDGEOT}, + {FORM_CHANGE_END_BATTLE, SPECIES_PIDGEOT}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sAlakazamFormChangeTable[] = { - {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_ALAKAZAM_MEGA, ITEM_ALAKAZITE}, - {FORM_CHANGE_FAINT, SPECIES_ALAKAZAM}, - {FORM_CHANGE_BATTLE_END, SPECIES_ALAKAZAM}, - {FORM_CHANGE_END}, + {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_ALAKAZAM_MEGA, ITEM_ALAKAZITE}, + {FORM_CHANGE_FAINT, SPECIES_ALAKAZAM}, + {FORM_CHANGE_END_BATTLE, SPECIES_ALAKAZAM}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sSlowbroFormChangeTable[] = { - {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_SLOWBRO_MEGA, ITEM_SLOWBRONITE}, - {FORM_CHANGE_FAINT, SPECIES_SLOWBRO}, - {FORM_CHANGE_BATTLE_END, SPECIES_SLOWBRO}, - {FORM_CHANGE_END}, + {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_SLOWBRO_MEGA, ITEM_SLOWBRONITE}, + {FORM_CHANGE_FAINT, SPECIES_SLOWBRO}, + {FORM_CHANGE_END_BATTLE, SPECIES_SLOWBRO}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sGengarFormChangeTable[] = { - {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_GENGAR_MEGA, ITEM_GENGARITE}, - {FORM_CHANGE_FAINT, SPECIES_GENGAR}, - {FORM_CHANGE_BATTLE_END, SPECIES_GENGAR}, - {FORM_CHANGE_END}, + {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_GENGAR_MEGA, ITEM_GENGARITE}, + {FORM_CHANGE_FAINT, SPECIES_GENGAR}, + {FORM_CHANGE_END_BATTLE, SPECIES_GENGAR}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sKangaskhanFormChangeTable[] = { - {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_KANGASKHAN_MEGA, ITEM_KANGASKHANITE}, - {FORM_CHANGE_FAINT, SPECIES_KANGASKHAN}, - {FORM_CHANGE_BATTLE_END, SPECIES_KANGASKHAN}, - {FORM_CHANGE_END}, + {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_KANGASKHAN_MEGA, ITEM_KANGASKHANITE}, + {FORM_CHANGE_FAINT, SPECIES_KANGASKHAN}, + {FORM_CHANGE_END_BATTLE, SPECIES_KANGASKHAN}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sPinsirFormChangeTable[] = { - {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_PINSIR_MEGA, ITEM_PINSIRITE}, - {FORM_CHANGE_FAINT, SPECIES_PINSIR}, - {FORM_CHANGE_BATTLE_END, SPECIES_PINSIR}, - {FORM_CHANGE_END}, + {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_PINSIR_MEGA, ITEM_PINSIRITE}, + {FORM_CHANGE_FAINT, SPECIES_PINSIR}, + {FORM_CHANGE_END_BATTLE, SPECIES_PINSIR}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sGyaradosFormChangeTable[] = { - {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_GYARADOS_MEGA, ITEM_GYARADOSITE}, - {FORM_CHANGE_FAINT, SPECIES_GYARADOS}, - {FORM_CHANGE_BATTLE_END, SPECIES_GYARADOS}, - {FORM_CHANGE_END}, + {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_GYARADOS_MEGA, ITEM_GYARADOSITE}, + {FORM_CHANGE_FAINT, SPECIES_GYARADOS}, + {FORM_CHANGE_END_BATTLE, SPECIES_GYARADOS}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sAerodactylFormChangeTable[] = { - {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_AERODACTYL_MEGA, ITEM_AERODACTYLITE}, - {FORM_CHANGE_FAINT, SPECIES_AERODACTYL}, - {FORM_CHANGE_BATTLE_END, SPECIES_AERODACTYL}, - {FORM_CHANGE_END}, + {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_AERODACTYL_MEGA, ITEM_AERODACTYLITE}, + {FORM_CHANGE_FAINT, SPECIES_AERODACTYL}, + {FORM_CHANGE_END_BATTLE, SPECIES_AERODACTYL}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sMewtwoFormChangeTable[] = { - {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_MEWTWO_MEGA_X, ITEM_MEWTWONITE_X}, - {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_MEWTWO_MEGA_Y, ITEM_MEWTWONITE_Y}, - {FORM_CHANGE_FAINT, SPECIES_MEWTWO}, - {FORM_CHANGE_BATTLE_END, SPECIES_MEWTWO}, - {FORM_CHANGE_END}, + {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_MEWTWO_MEGA_X, ITEM_MEWTWONITE_X}, + {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_MEWTWO_MEGA_Y, ITEM_MEWTWONITE_Y}, + {FORM_CHANGE_FAINT, SPECIES_MEWTWO}, + {FORM_CHANGE_END_BATTLE, SPECIES_MEWTWO}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sAmpharosFormChangeTable[] = { - {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_AMPHAROS_MEGA, ITEM_AMPHAROSITE}, - {FORM_CHANGE_FAINT, SPECIES_AMPHAROS}, - {FORM_CHANGE_BATTLE_END, SPECIES_AMPHAROS}, - {FORM_CHANGE_END}, + {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_AMPHAROS_MEGA, ITEM_AMPHAROSITE}, + {FORM_CHANGE_FAINT, SPECIES_AMPHAROS}, + {FORM_CHANGE_END_BATTLE, SPECIES_AMPHAROS}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sSteelixFormChangeTable[] = { - {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_STEELIX_MEGA, ITEM_STEELIXITE}, - {FORM_CHANGE_FAINT, SPECIES_STEELIX}, - {FORM_CHANGE_BATTLE_END, SPECIES_STEELIX}, - {FORM_CHANGE_END}, + {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_STEELIX_MEGA, ITEM_STEELIXITE}, + {FORM_CHANGE_FAINT, SPECIES_STEELIX}, + {FORM_CHANGE_END_BATTLE, SPECIES_STEELIX}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sScizorFormChangeTable[] = { - {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_SCIZOR_MEGA, ITEM_SCIZORITE}, - {FORM_CHANGE_FAINT, SPECIES_SCIZOR}, - {FORM_CHANGE_BATTLE_END, SPECIES_SCIZOR}, - {FORM_CHANGE_END}, + {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_SCIZOR_MEGA, ITEM_SCIZORITE}, + {FORM_CHANGE_FAINT, SPECIES_SCIZOR}, + {FORM_CHANGE_END_BATTLE, SPECIES_SCIZOR}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sHeracrossFormChangeTable[] = { - {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_HERACROSS_MEGA, ITEM_HERACRONITE}, - {FORM_CHANGE_FAINT, SPECIES_HERACROSS}, - {FORM_CHANGE_BATTLE_END, SPECIES_HERACROSS}, - {FORM_CHANGE_END}, + {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_HERACROSS_MEGA, ITEM_HERACRONITE}, + {FORM_CHANGE_FAINT, SPECIES_HERACROSS}, + {FORM_CHANGE_END_BATTLE, SPECIES_HERACROSS}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sHoundoomFormChangeTable[] = { - {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_HOUNDOOM_MEGA, ITEM_HOUNDOOMINITE}, - {FORM_CHANGE_FAINT, SPECIES_HOUNDOOM}, - {FORM_CHANGE_BATTLE_END, SPECIES_HOUNDOOM}, - {FORM_CHANGE_END}, + {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_HOUNDOOM_MEGA, ITEM_HOUNDOOMINITE}, + {FORM_CHANGE_FAINT, SPECIES_HOUNDOOM}, + {FORM_CHANGE_END_BATTLE, SPECIES_HOUNDOOM}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sTyranitarFormChangeTable[] = { - {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_TYRANITAR_MEGA, ITEM_TYRANITARITE}, - {FORM_CHANGE_FAINT, SPECIES_TYRANITAR}, - {FORM_CHANGE_BATTLE_END, SPECIES_TYRANITAR}, - {FORM_CHANGE_END}, + {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_TYRANITAR_MEGA, ITEM_TYRANITARITE}, + {FORM_CHANGE_FAINT, SPECIES_TYRANITAR}, + {FORM_CHANGE_END_BATTLE, SPECIES_TYRANITAR}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sSceptileFormChangeTable[] = { - {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_SCEPTILE_MEGA, ITEM_SCEPTILITE}, - {FORM_CHANGE_FAINT, SPECIES_SCEPTILE}, - {FORM_CHANGE_BATTLE_END, SPECIES_SCEPTILE}, - {FORM_CHANGE_END}, + {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_SCEPTILE_MEGA, ITEM_SCEPTILITE}, + {FORM_CHANGE_FAINT, SPECIES_SCEPTILE}, + {FORM_CHANGE_END_BATTLE, SPECIES_SCEPTILE}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sBlazikenFormChangeTable[] = { - {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_BLAZIKEN_MEGA, ITEM_BLAZIKENITE}, - {FORM_CHANGE_FAINT, SPECIES_BLAZIKEN}, - {FORM_CHANGE_BATTLE_END, SPECIES_BLAZIKEN}, - {FORM_CHANGE_END}, + {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_BLAZIKEN_MEGA, ITEM_BLAZIKENITE}, + {FORM_CHANGE_FAINT, SPECIES_BLAZIKEN}, + {FORM_CHANGE_END_BATTLE, SPECIES_BLAZIKEN}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sSwampertFormChangeTable[] = { - {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_SWAMPERT_MEGA, ITEM_SWAMPERTITE}, - {FORM_CHANGE_FAINT, SPECIES_SWAMPERT}, - {FORM_CHANGE_BATTLE_END, SPECIES_SWAMPERT}, - {FORM_CHANGE_END}, + {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_SWAMPERT_MEGA, ITEM_SWAMPERTITE}, + {FORM_CHANGE_FAINT, SPECIES_SWAMPERT}, + {FORM_CHANGE_END_BATTLE, SPECIES_SWAMPERT}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sSableyeFormChangeTable[] = { - {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_SABLEYE_MEGA, ITEM_SABLENITE}, - {FORM_CHANGE_FAINT, SPECIES_SABLEYE}, - {FORM_CHANGE_BATTLE_END, SPECIES_SABLEYE}, - {FORM_CHANGE_END}, + {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_SABLEYE_MEGA, ITEM_SABLENITE}, + {FORM_CHANGE_FAINT, SPECIES_SABLEYE}, + {FORM_CHANGE_END_BATTLE, SPECIES_SABLEYE}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sSharpedoFormChangeTable[] = { - {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_SHARPEDO_MEGA, ITEM_SHARPEDONITE}, - {FORM_CHANGE_FAINT, SPECIES_SHARPEDO}, - {FORM_CHANGE_BATTLE_END, SPECIES_SHARPEDO}, - {FORM_CHANGE_END}, + {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_SHARPEDO_MEGA, ITEM_SHARPEDONITE}, + {FORM_CHANGE_FAINT, SPECIES_SHARPEDO}, + {FORM_CHANGE_END_BATTLE, SPECIES_SHARPEDO}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sManectricFormChangeTable[] = { - {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_MANECTRIC_MEGA, ITEM_MANECTITE}, - {FORM_CHANGE_FAINT, SPECIES_MANECTRIC}, - {FORM_CHANGE_BATTLE_END, SPECIES_MANECTRIC}, - {FORM_CHANGE_END}, + {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_MANECTRIC_MEGA, ITEM_MANECTITE}, + {FORM_CHANGE_FAINT, SPECIES_MANECTRIC}, + {FORM_CHANGE_END_BATTLE, SPECIES_MANECTRIC}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sCameruptFormChangeTable[] = { - {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_CAMERUPT_MEGA, ITEM_CAMERUPTITE}, + {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_CAMERUPT_MEGA, ITEM_CAMERUPTITE}, {FORM_CHANGE_FAINT, SPECIES_CAMERUPT}, - {FORM_CHANGE_BATTLE_END, SPECIES_CAMERUPT}, - {FORM_CHANGE_END}, + {FORM_CHANGE_END_BATTLE, SPECIES_CAMERUPT}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sGlalieFormChangeTable[] = { - {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_GLALIE_MEGA, ITEM_GLALITITE}, - {FORM_CHANGE_FAINT, SPECIES_GLALIE}, - {FORM_CHANGE_BATTLE_END, SPECIES_GLALIE}, - {FORM_CHANGE_END}, + {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_GLALIE_MEGA, ITEM_GLALITITE}, + {FORM_CHANGE_FAINT, SPECIES_GLALIE}, + {FORM_CHANGE_END_BATTLE, SPECIES_GLALIE}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sMawileFormChangeTable[] = { - {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_MAWILE_MEGA, ITEM_MAWILITE}, - {FORM_CHANGE_FAINT, SPECIES_MAWILE}, - {FORM_CHANGE_BATTLE_END, SPECIES_MAWILE}, - {FORM_CHANGE_END}, + {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_MAWILE_MEGA, ITEM_MAWILITE}, + {FORM_CHANGE_FAINT, SPECIES_MAWILE}, + {FORM_CHANGE_END_BATTLE, SPECIES_MAWILE}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sMedichamFormChangeTable[] = { - {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_MEDICHAM_MEGA, ITEM_MEDICHAMITE}, - {FORM_CHANGE_FAINT, SPECIES_MEDICHAM}, - {FORM_CHANGE_BATTLE_END, SPECIES_MEDICHAM}, - {FORM_CHANGE_END}, + {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_MEDICHAM_MEGA, ITEM_MEDICHAMITE}, + {FORM_CHANGE_FAINT, SPECIES_MEDICHAM}, + {FORM_CHANGE_END_BATTLE, SPECIES_MEDICHAM}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sAltariaFormChangeTable[] = { - {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_ALTARIA_MEGA, ITEM_ALTARIANITE}, - {FORM_CHANGE_FAINT, SPECIES_ALTARIA}, - {FORM_CHANGE_BATTLE_END, SPECIES_ALTARIA}, - {FORM_CHANGE_END}, + {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_ALTARIA_MEGA, ITEM_ALTARIANITE}, + {FORM_CHANGE_FAINT, SPECIES_ALTARIA}, + {FORM_CHANGE_END_BATTLE, SPECIES_ALTARIA}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sAbsolFormChangeTable[] = { - {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_ABSOL_MEGA, ITEM_ABSOLITE}, - {FORM_CHANGE_FAINT, SPECIES_ABSOL}, - {FORM_CHANGE_BATTLE_END, SPECIES_ABSOL}, - {FORM_CHANGE_END}, + {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_ABSOL_MEGA, ITEM_ABSOLITE}, + {FORM_CHANGE_FAINT, SPECIES_ABSOL}, + {FORM_CHANGE_END_BATTLE, SPECIES_ABSOL}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sBanetteFormChangeTable[] = { - {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_BANETTE_MEGA, ITEM_BANETTITE}, - {FORM_CHANGE_FAINT, SPECIES_BANETTE}, - {FORM_CHANGE_BATTLE_END, SPECIES_BANETTE}, - {FORM_CHANGE_END}, + {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_BANETTE_MEGA, ITEM_BANETTITE}, + {FORM_CHANGE_FAINT, SPECIES_BANETTE}, + {FORM_CHANGE_END_BATTLE, SPECIES_BANETTE}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sAggronFormChangeTable[] = { - {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_AGGRON_MEGA, ITEM_AGGRONITE}, - {FORM_CHANGE_FAINT, SPECIES_AGGRON}, - {FORM_CHANGE_BATTLE_END, SPECIES_AGGRON}, - {FORM_CHANGE_END}, + {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_AGGRON_MEGA, ITEM_AGGRONITE}, + {FORM_CHANGE_FAINT, SPECIES_AGGRON}, + {FORM_CHANGE_END_BATTLE, SPECIES_AGGRON}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sGardevoirFormChangeTable[] = { - {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_GARDEVOIR_MEGA, ITEM_GARDEVOIRITE}, - {FORM_CHANGE_FAINT, SPECIES_GARDEVOIR}, - {FORM_CHANGE_BATTLE_END, SPECIES_GARDEVOIR}, - {FORM_CHANGE_END}, + {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_GARDEVOIR_MEGA, ITEM_GARDEVOIRITE}, + {FORM_CHANGE_FAINT, SPECIES_GARDEVOIR}, + {FORM_CHANGE_END_BATTLE, SPECIES_GARDEVOIR}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sSalamenceFormChangeTable[] = { - {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_SALAMENCE_MEGA, ITEM_SALAMENCITE}, - {FORM_CHANGE_FAINT, SPECIES_SALAMENCE}, - {FORM_CHANGE_BATTLE_END, SPECIES_SALAMENCE}, - {FORM_CHANGE_END}, + {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_SALAMENCE_MEGA, ITEM_SALAMENCITE}, + {FORM_CHANGE_FAINT, SPECIES_SALAMENCE}, + {FORM_CHANGE_END_BATTLE, SPECIES_SALAMENCE}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sMetagrossFormChangeTable[] = { - {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_METAGROSS_MEGA, ITEM_METAGROSSITE}, - {FORM_CHANGE_FAINT, SPECIES_METAGROSS}, - {FORM_CHANGE_BATTLE_END, SPECIES_METAGROSS}, - {FORM_CHANGE_END}, + {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_METAGROSS_MEGA, ITEM_METAGROSSITE}, + {FORM_CHANGE_FAINT, SPECIES_METAGROSS}, + {FORM_CHANGE_END_BATTLE, SPECIES_METAGROSS}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sLatiasFormChangeTable[] = { - {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_LATIAS_MEGA, ITEM_LATIASITE}, - {FORM_CHANGE_FAINT, SPECIES_LATIAS}, - {FORM_CHANGE_BATTLE_END, SPECIES_LATIAS}, - {FORM_CHANGE_END}, + {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_LATIAS_MEGA, ITEM_LATIASITE}, + {FORM_CHANGE_FAINT, SPECIES_LATIAS}, + {FORM_CHANGE_END_BATTLE, SPECIES_LATIAS}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sLatiosFormChangeTable[] = { - {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_LATIOS_MEGA, ITEM_LATIOSITE}, - {FORM_CHANGE_FAINT, SPECIES_LATIOS}, - {FORM_CHANGE_BATTLE_END, SPECIES_LATIOS}, - {FORM_CHANGE_END}, + {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_LATIOS_MEGA, ITEM_LATIOSITE}, + {FORM_CHANGE_FAINT, SPECIES_LATIOS}, + {FORM_CHANGE_END_BATTLE, SPECIES_LATIOS}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sKyogreFormChangeTable[] = { - {FORM_CHANGE_PRIMAL_REVERSION, SPECIES_KYOGRE_PRIMAL, ITEM_BLUE_ORB}, - {FORM_CHANGE_BATTLE_END, SPECIES_KYOGRE}, - {FORM_CHANGE_END}, + {FORM_CHANGE_BATTLE_PRIMAL_REVERSION, SPECIES_KYOGRE_PRIMAL, ITEM_BLUE_ORB}, + {FORM_CHANGE_END_BATTLE, SPECIES_KYOGRE}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sGroudonFormChangeTable[] = { - {FORM_CHANGE_PRIMAL_REVERSION, SPECIES_GROUDON_PRIMAL, ITEM_RED_ORB}, - {FORM_CHANGE_BATTLE_END, SPECIES_GROUDON}, - {FORM_CHANGE_END}, + {FORM_CHANGE_BATTLE_PRIMAL_REVERSION, SPECIES_GROUDON_PRIMAL, ITEM_RED_ORB}, + {FORM_CHANGE_END_BATTLE, SPECIES_GROUDON}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sRayquazaFormChangeTable[] = { - {FORM_CHANGE_MEGA_EVOLUTION_MOVE, SPECIES_RAYQUAZA_MEGA, MOVE_DRAGON_ASCENT}, + {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_MOVE, SPECIES_RAYQUAZA_MEGA, MOVE_DRAGON_ASCENT}, {FORM_CHANGE_FAINT, SPECIES_RAYQUAZA}, - {FORM_CHANGE_BATTLE_END, SPECIES_RAYQUAZA}, - {FORM_CHANGE_END}, + {FORM_CHANGE_END_BATTLE, SPECIES_RAYQUAZA}, + {FORM_CHANGE_TERMINATOR}, }; #if P_GEN_4_POKEMON == TRUE static const struct FormChange sLopunnyFormChangeTable[] = { - {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_LOPUNNY_MEGA, ITEM_LOPUNNITE}, - {FORM_CHANGE_FAINT, SPECIES_LOPUNNY}, - {FORM_CHANGE_BATTLE_END, SPECIES_LOPUNNY}, - {FORM_CHANGE_END}, + {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_LOPUNNY_MEGA, ITEM_LOPUNNITE}, + {FORM_CHANGE_FAINT, SPECIES_LOPUNNY}, + {FORM_CHANGE_END_BATTLE, SPECIES_LOPUNNY}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sGarchompFormChangeTable[] = { - {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_GARCHOMP_MEGA, ITEM_GARCHOMPITE}, - {FORM_CHANGE_FAINT, SPECIES_GARCHOMP}, - {FORM_CHANGE_BATTLE_END, SPECIES_GARCHOMP}, - {FORM_CHANGE_END}, + {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_GARCHOMP_MEGA, ITEM_GARCHOMPITE}, + {FORM_CHANGE_FAINT, SPECIES_GARCHOMP}, + {FORM_CHANGE_END_BATTLE, SPECIES_GARCHOMP}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sLucarioFormChangeTable[] = { - {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_LUCARIO_MEGA, ITEM_LUCARIONITE}, - {FORM_CHANGE_FAINT, SPECIES_LUCARIO}, - {FORM_CHANGE_BATTLE_END, SPECIES_LUCARIO}, - {FORM_CHANGE_END}, + {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_LUCARIO_MEGA, ITEM_LUCARIONITE}, + {FORM_CHANGE_FAINT, SPECIES_LUCARIO}, + {FORM_CHANGE_END_BATTLE, SPECIES_LUCARIO}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sAbomasnowFormChangeTable[] = { - {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_ABOMASNOW_MEGA, ITEM_ABOMASITE}, - {FORM_CHANGE_FAINT, SPECIES_ABOMASNOW}, - {FORM_CHANGE_BATTLE_END, SPECIES_ABOMASNOW}, - {FORM_CHANGE_END}, + {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_ABOMASNOW_MEGA, ITEM_ABOMASITE}, + {FORM_CHANGE_FAINT, SPECIES_ABOMASNOW}, + {FORM_CHANGE_END_BATTLE, SPECIES_ABOMASNOW}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sGalladeFormChangeTable[] = { - {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_GALLADE_MEGA, ITEM_GALLADITE}, - {FORM_CHANGE_FAINT, SPECIES_GALLADE}, - {FORM_CHANGE_BATTLE_END, SPECIES_GALLADE}, - {FORM_CHANGE_END}, + {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_GALLADE_MEGA, ITEM_GALLADITE}, + {FORM_CHANGE_FAINT, SPECIES_GALLADE}, + {FORM_CHANGE_END_BATTLE, SPECIES_GALLADE}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sGiratinaFormChangeTable[] = { {FORM_CHANGE_ITEM_HOLD, SPECIES_GIRATINA, ITEM_NONE}, {FORM_CHANGE_ITEM_HOLD, SPECIES_GIRATINA_ORIGIN, ITEM_GRISEOUS_ORB}, - {FORM_CHANGE_END}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sShayminFormChangeTable[] = { {FORM_CHANGE_ITEM_USE, SPECIES_SHAYMIN_SKY, ITEM_GRACIDEA, DAY}, // {FORM_CHANGE_WITHDRAW, SPECIES_SHAYMIN}, - {FORM_CHANGE_END}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sArceusFormChangeTable[] = { @@ -369,62 +369,62 @@ static const struct FormChange sArceusFormChangeTable[] = { {FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_DARK, ITEM_DARKINIUM_Z, ABILITY_MULTITYPE}, {FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_FAIRY, ITEM_PIXIE_PLATE, ABILITY_MULTITYPE}, {FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_FAIRY, ITEM_FAIRIUM_Z, ABILITY_MULTITYPE}, - {FORM_CHANGE_END}, + {FORM_CHANGE_TERMINATOR}, }; #endif #if P_GEN_5_POKEMON == TRUE static const struct FormChange sAudinoFormChangeTable[] = { - {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_AUDINO_MEGA, ITEM_AUDINITE}, - {FORM_CHANGE_FAINT, SPECIES_AUDINO}, - {FORM_CHANGE_BATTLE_END, SPECIES_AUDINO}, - {FORM_CHANGE_END}, + {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_AUDINO_MEGA, ITEM_AUDINITE}, + {FORM_CHANGE_FAINT, SPECIES_AUDINO}, + {FORM_CHANGE_END_BATTLE, SPECIES_AUDINO}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sDarmanitanFormChangeTable[] = { {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_DARMANITAN, ABILITY_ZEN_MODE, HP_HIGHER_THAN, 50}, {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_DARMANITAN_ZEN_MODE, ABILITY_ZEN_MODE, HP_LOWER_EQ_THAN, 50}, {FORM_CHANGE_FAINT, SPECIES_DARMANITAN}, - {FORM_CHANGE_BATTLE_END, SPECIES_DARMANITAN}, - {FORM_CHANGE_END}, + {FORM_CHANGE_END_BATTLE, SPECIES_DARMANITAN}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sDarmanitanGalarianFormChangeTable[] = { {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_DARMANITAN_GALARIAN, ABILITY_ZEN_MODE, HP_HIGHER_THAN, 50}, {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_DARMANITAN_ZEN_MODE_GALARIAN, ABILITY_ZEN_MODE, HP_LOWER_EQ_THAN, 50}, {FORM_CHANGE_FAINT, SPECIES_DARMANITAN_GALARIAN}, - {FORM_CHANGE_BATTLE_END, SPECIES_DARMANITAN_GALARIAN}, - {FORM_CHANGE_END}, + {FORM_CHANGE_END_BATTLE, SPECIES_DARMANITAN_GALARIAN}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sMeloettaFormChangeTable[] = { {FORM_CHANGE_FAINT, SPECIES_MELOETTA}, - {FORM_CHANGE_BATTLE_END, SPECIES_MELOETTA}, - {FORM_CHANGE_END}, + {FORM_CHANGE_END_BATTLE, SPECIES_MELOETTA}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sTornadusFormChangeTable[] = { {FORM_CHANGE_ITEM_USE, SPECIES_TORNADUS_THERIAN, ITEM_REVEAL_GLASS}, {FORM_CHANGE_ITEM_USE, SPECIES_TORNADUS, ITEM_REVEAL_GLASS}, - {FORM_CHANGE_END}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sThundurusFormChangeTable[] = { {FORM_CHANGE_ITEM_USE, SPECIES_THUNDURUS_THERIAN, ITEM_REVEAL_GLASS}, {FORM_CHANGE_ITEM_USE, SPECIES_THUNDURUS, ITEM_REVEAL_GLASS}, - {FORM_CHANGE_END}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sLandorusFormChangeTable[] = { {FORM_CHANGE_ITEM_USE, SPECIES_LANDORUS_THERIAN, ITEM_REVEAL_GLASS}, {FORM_CHANGE_ITEM_USE, SPECIES_LANDORUS, ITEM_REVEAL_GLASS}, - {FORM_CHANGE_END}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sKeldeoFormChangeTable[] = { // {FORM_CHANGE_MOVE, SPECIES_KELDEO_RESOLUTE, MOVE_SECRET_SWORD, WHEN_LEARNED}, // {FORM_CHANGE_MOVE, SPECIES_KELDEO, MOVE_SECRET_SWORD, WHEN_FORGOTTEN}, - {FORM_CHANGE_END}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sGenesectFormChangeTable[] = { @@ -433,48 +433,48 @@ static const struct FormChange sGenesectFormChangeTable[] = { {FORM_CHANGE_ITEM_HOLD, SPECIES_GENESECT_SHOCK_DRIVE, ITEM_SHOCK_DRIVE}, {FORM_CHANGE_ITEM_HOLD, SPECIES_GENESECT_BURN_DRIVE, ITEM_BURN_DRIVE}, {FORM_CHANGE_ITEM_HOLD, SPECIES_GENESECT_CHILL_DRIVE, ITEM_CHILL_DRIVE}, - {FORM_CHANGE_END}, + {FORM_CHANGE_TERMINATOR}, }; #endif #if P_GEN_6_POKEMON == TRUE static const struct FormChange sGreninjaBattleBondFormChangeTable[] = { {FORM_CHANGE_FAINT, SPECIES_GRENINJA_BATTLE_BOND}, - {FORM_CHANGE_BATTLE_END, SPECIES_GRENINJA_BATTLE_BOND}, - {FORM_CHANGE_END}, + {FORM_CHANGE_END_BATTLE, SPECIES_GRENINJA_BATTLE_BOND}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sAegislashFormChangeTable[] = { {FORM_CHANGE_BATTLE_SWITCH, SPECIES_AEGISLASH}, {FORM_CHANGE_FAINT, SPECIES_AEGISLASH}, - {FORM_CHANGE_BATTLE_END, SPECIES_AEGISLASH}, - {FORM_CHANGE_END}, + {FORM_CHANGE_END_BATTLE, SPECIES_AEGISLASH}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sXerneasFormChangeTable[] = { - {FORM_CHANGE_BATTLE_BEGIN, SPECIES_XERNEAS_ACTIVE}, - {FORM_CHANGE_BATTLE_END, SPECIES_XERNEAS, }, - {FORM_CHANGE_END}, + {FORM_CHANGE_BEGIN_BATTLE, SPECIES_XERNEAS_ACTIVE}, + {FORM_CHANGE_END_BATTLE, SPECIES_XERNEAS, }, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sZygardePowerConstructFormChangeTable[] = { {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_ZYGARDE_COMPLETE, ABILITY_POWER_CONSTRUCT, HP_LOWER_EQ_THAN, 50}, {FORM_CHANGE_FAINT}, - {FORM_CHANGE_BATTLE_END}, - {FORM_CHANGE_END}, + {FORM_CHANGE_END_BATTLE}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sDiancieFormChangeTable[] = { - {FORM_CHANGE_MEGA_EVOLUTION_ITEM, SPECIES_DIANCIE_MEGA, ITEM_DIANCITE}, - {FORM_CHANGE_FAINT, SPECIES_DIANCIE}, - {FORM_CHANGE_BATTLE_END, SPECIES_DIANCIE}, - {FORM_CHANGE_END}, + {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_DIANCIE_MEGA, ITEM_DIANCITE}, + {FORM_CHANGE_FAINT, SPECIES_DIANCIE}, + {FORM_CHANGE_END_BATTLE, SPECIES_DIANCIE}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sHoopaFormChangeTable[] = { {FORM_CHANGE_ITEM_USE, SPECIES_HOOPA_UNBOUND, ITEM_PRISON_BOTTLE, SPECIES_HOOPA}, {FORM_CHANGE_WITHDRAW, SPECIES_HOOPA}, - {FORM_CHANGE_END}, + {FORM_CHANGE_TERMINATOR}, }; #endif @@ -484,15 +484,15 @@ static const struct FormChange sOricorioFormChangeTable[] = { {FORM_CHANGE_ITEM_USE, SPECIES_ORICORIO_POM_POM, ITEM_YELLOW_NECTAR}, {FORM_CHANGE_ITEM_USE, SPECIES_ORICORIO_PAU, ITEM_PINK_NECTAR}, {FORM_CHANGE_ITEM_USE, SPECIES_ORICORIO_SENSU, ITEM_PURPLE_NECTAR}, - {FORM_CHANGE_END}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sWishiwashiFormChangeTable[] = { {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_WISHIWASHI_SCHOOL, ABILITY_SCHOOLING, HP_HIGHER_THAN, 25}, {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_WISHIWASHI, ABILITY_SCHOOLING, HP_LOWER_EQ_THAN, 25}, {FORM_CHANGE_BATTLE_SWITCH, SPECIES_WISHIWASHI}, {FORM_CHANGE_FAINT, SPECIES_WISHIWASHI}, - {FORM_CHANGE_BATTLE_END, SPECIES_WISHIWASHI}, - {FORM_CHANGE_END}, + {FORM_CHANGE_END_BATTLE, SPECIES_WISHIWASHI}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sSilvallyFormChangeTable[] = { @@ -514,13 +514,13 @@ static const struct FormChange sSilvallyFormChangeTable[] = { {FORM_CHANGE_ITEM_HOLD, SPECIES_SILVALLY_DRAGON, ITEM_DRAGON_MEMORY, ABILITY_RKS_SYSTEM}, {FORM_CHANGE_ITEM_HOLD, SPECIES_SILVALLY_DARK, ITEM_DARK_MEMORY, ABILITY_RKS_SYSTEM}, {FORM_CHANGE_ITEM_HOLD, SPECIES_SILVALLY_FAIRY, ITEM_FAIRY_MEMORY, ABILITY_RKS_SYSTEM}, - {FORM_CHANGE_END}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sMimikyuFormChangeTable[] = { {FORM_CHANGE_FAINT, SPECIES_MIMIKYU}, - {FORM_CHANGE_BATTLE_END, SPECIES_MIMIKYU}, - {FORM_CHANGE_END}, + {FORM_CHANGE_END_BATTLE, SPECIES_MIMIKYU}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sMiniorRedFormChangeTable[] = { @@ -528,56 +528,56 @@ static const struct FormChange sMiniorRedFormChangeTable[] = { {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_MINIOR_CORE_RED, ABILITY_SHIELDS_DOWN, HP_LOWER_EQ_THAN, 50}, {FORM_CHANGE_BATTLE_SWITCH, SPECIES_MINIOR_CORE_RED}, {FORM_CHANGE_FAINT, SPECIES_MINIOR_CORE_RED}, - {FORM_CHANGE_BATTLE_END, SPECIES_MINIOR_CORE_RED}, - {FORM_CHANGE_END}, + {FORM_CHANGE_END_BATTLE, SPECIES_MINIOR_CORE_RED}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sMiniorBlueFormChangeTable[] = { {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_MINIOR_METEOR_BLUE, ABILITY_SHIELDS_DOWN, HP_HIGHER_THAN, 50}, {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_MINIOR_CORE_BLUE, ABILITY_SHIELDS_DOWN, HP_LOWER_EQ_THAN, 50}, {FORM_CHANGE_BATTLE_SWITCH, SPECIES_MINIOR_CORE_BLUE}, {FORM_CHANGE_FAINT, SPECIES_MINIOR_CORE_BLUE}, - {FORM_CHANGE_BATTLE_END, SPECIES_MINIOR_CORE_BLUE}, - {FORM_CHANGE_END}, + {FORM_CHANGE_END_BATTLE, SPECIES_MINIOR_CORE_BLUE}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sMiniorGreenFormChangeTable[] = { {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_MINIOR_METEOR_GREEN, ABILITY_SHIELDS_DOWN, HP_HIGHER_THAN, 50}, {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_MINIOR_CORE_GREEN, ABILITY_SHIELDS_DOWN, HP_LOWER_EQ_THAN, 50}, {FORM_CHANGE_BATTLE_SWITCH, SPECIES_MINIOR_CORE_GREEN}, {FORM_CHANGE_FAINT, SPECIES_MINIOR_CORE_GREEN}, - {FORM_CHANGE_BATTLE_END, SPECIES_MINIOR_CORE_GREEN}, - {FORM_CHANGE_END}, + {FORM_CHANGE_END_BATTLE, SPECIES_MINIOR_CORE_GREEN}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sMiniorIndigoFormChangeTable[] = { {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_MINIOR_METEOR_INDIGO, ABILITY_SHIELDS_DOWN, HP_HIGHER_THAN, 50}, {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_MINIOR_CORE_INDIGO, ABILITY_SHIELDS_DOWN, HP_LOWER_EQ_THAN, 50}, {FORM_CHANGE_BATTLE_SWITCH, SPECIES_MINIOR_CORE_INDIGO}, {FORM_CHANGE_FAINT, SPECIES_MINIOR_CORE_INDIGO}, - {FORM_CHANGE_BATTLE_END, SPECIES_MINIOR_CORE_INDIGO}, - {FORM_CHANGE_END}, + {FORM_CHANGE_END_BATTLE, SPECIES_MINIOR_CORE_INDIGO}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sMiniorOrangeFormChangeTable[] = { {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_MINIOR_METEOR_ORANGE, ABILITY_SHIELDS_DOWN, HP_HIGHER_THAN, 50}, {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_MINIOR_CORE_ORANGE, ABILITY_SHIELDS_DOWN, HP_LOWER_EQ_THAN, 50}, {FORM_CHANGE_BATTLE_SWITCH, SPECIES_MINIOR_CORE_ORANGE}, {FORM_CHANGE_FAINT, SPECIES_MINIOR_CORE_ORANGE}, - {FORM_CHANGE_BATTLE_END, SPECIES_MINIOR_CORE_ORANGE}, - {FORM_CHANGE_END}, + {FORM_CHANGE_END_BATTLE, SPECIES_MINIOR_CORE_ORANGE}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sMiniorVioletFormChangeTable[] = { {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_MINIOR_METEOR_VIOLET, ABILITY_SHIELDS_DOWN, HP_HIGHER_THAN, 50}, {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_MINIOR_CORE_VIOLET, ABILITY_SHIELDS_DOWN, HP_LOWER_EQ_THAN, 50}, {FORM_CHANGE_BATTLE_SWITCH, SPECIES_MINIOR_CORE_VIOLET}, {FORM_CHANGE_FAINT, SPECIES_MINIOR_CORE_VIOLET}, - {FORM_CHANGE_BATTLE_END, SPECIES_MINIOR_CORE_VIOLET}, - {FORM_CHANGE_END}, + {FORM_CHANGE_END_BATTLE, SPECIES_MINIOR_CORE_VIOLET}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sMiniorYellowFormChangeTable[] = { {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_MINIOR_METEOR_YELLOW, ABILITY_SHIELDS_DOWN, HP_HIGHER_THAN, 50}, {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_MINIOR_CORE_YELLOW, ABILITY_SHIELDS_DOWN, HP_LOWER_EQ_THAN, 50}, {FORM_CHANGE_BATTLE_SWITCH, SPECIES_MINIOR_CORE_YELLOW}, {FORM_CHANGE_FAINT, SPECIES_MINIOR_CORE_YELLOW}, - {FORM_CHANGE_BATTLE_END, SPECIES_MINIOR_CORE_YELLOW}, - {FORM_CHANGE_END}, + {FORM_CHANGE_END_BATTLE, SPECIES_MINIOR_CORE_YELLOW}, + {FORM_CHANGE_TERMINATOR}, }; #endif @@ -587,33 +587,33 @@ static const struct FormChange sCramorantFormChangeTable[] = { {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_CRAMORANT_GORGING, ABILITY_GULP_MISSILE, HP_LOWER_EQ_THAN, 50}, {FORM_CHANGE_BATTLE_SWITCH, SPECIES_CRAMORANT}, {FORM_CHANGE_FAINT, SPECIES_CRAMORANT}, - {FORM_CHANGE_BATTLE_END, SPECIES_CRAMORANT}, - {FORM_CHANGE_END}, + {FORM_CHANGE_END_BATTLE, SPECIES_CRAMORANT}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sMorpekoFormChangeTable[] = { {FORM_CHANGE_BATTLE_SWITCH, SPECIES_MORPEKO}, {FORM_CHANGE_FAINT, SPECIES_MORPEKO}, - {FORM_CHANGE_BATTLE_END, SPECIES_MORPEKO}, - {FORM_CHANGE_END}, + {FORM_CHANGE_END_BATTLE, SPECIES_MORPEKO}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sZacianFormChangeTable[] = { - {FORM_CHANGE_BATTLE_BEGIN, SPECIES_ZACIAN_CROWNED_SWORD, ITEM_RUSTED_SWORD, MOVE_IRON_HEAD, MOVE_BEHEMOTH_BLADE}, - {FORM_CHANGE_BATTLE_END, SPECIES_ZACIAN, ITEM_RUSTED_SWORD, MOVE_BEHEMOTH_BLADE, MOVE_IRON_HEAD}, - {FORM_CHANGE_END}, + {FORM_CHANGE_BEGIN_BATTLE, SPECIES_ZACIAN_CROWNED_SWORD, ITEM_RUSTED_SWORD, MOVE_IRON_HEAD, MOVE_BEHEMOTH_BLADE}, + {FORM_CHANGE_END_BATTLE, SPECIES_ZACIAN, ITEM_RUSTED_SWORD, MOVE_BEHEMOTH_BLADE, MOVE_IRON_HEAD}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sZamazentaFormChangeTable[] = { - {FORM_CHANGE_BATTLE_BEGIN, SPECIES_ZAMAZENTA_CROWNED_SHIELD, ITEM_RUSTED_SHIELD, MOVE_IRON_HEAD, MOVE_BEHEMOTH_BASH}, - {FORM_CHANGE_BATTLE_END, SPECIES_ZAMAZENTA, ITEM_RUSTED_SHIELD, MOVE_BEHEMOTH_BASH, MOVE_IRON_HEAD}, - {FORM_CHANGE_END}, + {FORM_CHANGE_BEGIN_BATTLE, SPECIES_ZAMAZENTA_CROWNED_SHIELD, ITEM_RUSTED_SHIELD, MOVE_IRON_HEAD, MOVE_BEHEMOTH_BASH}, + {FORM_CHANGE_END_BATTLE, SPECIES_ZAMAZENTA, ITEM_RUSTED_SHIELD, MOVE_BEHEMOTH_BASH, MOVE_IRON_HEAD}, + {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sEnamorusFormChangeTable[] = { {FORM_CHANGE_ITEM_USE, SPECIES_ENAMORUS, ITEM_REVEAL_GLASS}, {FORM_CHANGE_ITEM_USE, SPECIES_ENAMORUS_THERIAN, ITEM_REVEAL_GLASS}, - {FORM_CHANGE_END}, + {FORM_CHANGE_TERMINATOR}, }; #endif diff --git a/src/pokemon.c b/src/pokemon.c index 9c13bd17e7de..1b41d666dc4a 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -8498,7 +8498,7 @@ u16 GetFormChangeTargetSpeciesBoxMon(struct BoxPokemon *boxMon, u16 method, u32 heldItem = GetBoxMonData(boxMon, MON_DATA_HELD_ITEM, NULL); ability = GetAbilityBySpecies(species, GetBoxMonData(boxMon, MON_DATA_ABILITY_NUM, NULL)); - for (i = 0; formChanges[i].method != FORM_CHANGE_END; i++) + for (i = 0; formChanges[i].method != FORM_CHANGE_TERMINATOR; i++) { if (method == formChanges[i].method && species != formChanges[i].targetSpecies) { @@ -8534,8 +8534,8 @@ u16 GetFormChangeTargetSpeciesBoxMon(struct BoxPokemon *boxMon, u16 method, u32 if (BoxMonKnowsMove(boxMon, formChanges[i].param1) != formChanges[i].param2) targetSpecies = formChanges[i].targetSpecies; break; - case FORM_CHANGE_BATTLE_BEGIN: - case FORM_CHANGE_BATTLE_END: + case FORM_CHANGE_BEGIN_BATTLE: + case FORM_CHANGE_END_BATTLE: if (heldItem == formChanges[i].param1 || formChanges[i].param1 == ITEM_NONE) targetSpecies = formChanges[i].targetSpecies; break; @@ -8558,7 +8558,7 @@ bool32 DoesSpeciesHaveFormChangeMethod(u16 species, u16 method) if (formChanges != NULL) { - for (i = 0; formChanges[i].method != FORM_CHANGE_END; i++) + for (i = 0; formChanges[i].method != FORM_CHANGE_TERMINATOR; i++) { if (method == formChanges[i].method && species != formChanges[i].targetSpecies) return TRUE; @@ -8681,10 +8681,10 @@ void TryToSetBattleFormChangeMoves(struct Pokemon *mon, u16 method) const struct FormChange *formChanges = gFormChangeTablePointers[species]; if (formChanges == NULL - || (method != FORM_CHANGE_BATTLE_BEGIN && method != FORM_CHANGE_BATTLE_END)) + || (method != FORM_CHANGE_BEGIN_BATTLE && method != FORM_CHANGE_END_BATTLE)) return; - for (i = 0; formChanges[i].method != FORM_CHANGE_END; i++) + for (i = 0; formChanges[i].method != FORM_CHANGE_TERMINATOR; i++) { if (formChanges[i].method == method && formChanges[i].param2 From 57bdb683ece950a473b30230ccd9d4cafc86fed5 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sat, 5 Nov 2022 23:27:40 -0300 Subject: [PATCH 018/428] DoBurmyFormChange handled by FORM_CHANGE_END_BATTLE_TERRAIN --- include/battle_util.h | 1 - include/constants/form_change_types.h | 14 ++++--- src/battle_main.c | 13 ++++-- src/battle_util.c | 40 ------------------- src/data/pokemon/form_change_table_pointers.h | 3 ++ src/data/pokemon/form_change_tables.h | 18 +++++++-- src/pokemon.c | 6 ++- 7 files changed, 42 insertions(+), 53 deletions(-) diff --git a/include/battle_util.h b/include/battle_util.h index 18b31957bbd5..ae5263b7fe37 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -177,7 +177,6 @@ void SortBattlersBySpeed(u8 *battlers, bool8 slowToFast); bool32 CompareStat(u8 battlerId, u8 statId, u8 cmpTo, u8 cmpKind); bool32 TryRoomService(u8 battlerId); void BufferStatChange(u8 battlerId, u8 statId, u8 stringId); -void DoBurmyFormChange(u32 monId); bool32 BlocksPrankster(u16 move, u8 battlerPrankster, u8 battlerDef, bool32 checkTarget); u16 GetUsedHeldItem(u8 battler); bool32 IsBattlerWeatherAffected(u8 battlerId, u32 weatherFlags); diff --git a/include/constants/form_change_types.h b/include/constants/form_change_types.h index c6d4c6eae206..8701a9497c8f 100644 --- a/include/constants/form_change_types.h +++ b/include/constants/form_change_types.h @@ -53,9 +53,13 @@ // param3: a new move to replace it with, optional #define FORM_CHANGE_END_BATTLE 7 +// Form change that activates at the end of a battle based on the terrain if it participated in the battle and hasn't fainted. Takes priority over FORM_CHANGE_END_BATTLE. +// param1: battle terrain to check. +#define FORM_CHANGE_END_BATTLE_TERRAIN 8 + // Form change that activates when the Pokémon is switched out in battle. // - No parameters. -#define FORM_CHANGE_BATTLE_SWITCH 8 +#define FORM_CHANGE_BATTLE_SWITCH 9 // Form change that activates when the Pokémon's HP % passes a certain threshold. // param1: Ability to check. @@ -63,19 +67,19 @@ // - HP_HIGHER_THAN if the form triggers when the current HP is higher than the specified threshold. // - HP_LOWER_EQ_THAN if the form triggers when the current HP is lower or equal than the specified threshold. // param3: HP percentage threshold. -#define FORM_CHANGE_BATTLE_HP_PERCENT 9 +#define FORM_CHANGE_BATTLE_HP_PERCENT 10 // Form change that activates when the mon has the defined item. // If it's on the player's side, it also requires ITEM_MEGA_RING in the user's bag and for the player to trigger it by pressing START before selecting a move. // param1: item to hold. -#define FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM 10 +#define FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM 11 // Form change that activates when the mon has the defined move. // If it's on the player's side, it also requires ITEM_MEGA_RING in the user's bag and for the player to trigger it by pressing START before selecting a move. // param1: move to have. -#define FORM_CHANGE_BATTLE_MEGA_EVOLUTION_MOVE 11 +#define FORM_CHANGE_BATTLE_MEGA_EVOLUTION_MOVE 12 // Form change that activates automatically when entering battle with the specified item. // If the item is a Red Orb, it uses the Omega Symbol for the animation and icon. Otherwise, it defaults to the Alpha symbol. // param1: item to hold. -#define FORM_CHANGE_BATTLE_PRIMAL_REVERSION 12 +#define FORM_CHANGE_BATTLE_PRIMAL_REVERSION 13 diff --git a/src/battle_main.c b/src/battle_main.c index f396b9b0a6d4..1aefd71b0fe5 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -5202,8 +5202,15 @@ static void HandleEndTurn_FinishBattle(void) #endif for (i = 0; i < PARTY_SIZE; i++) { - bool32 changedForm = TryFormChange(i, B_SIDE_PLAYER, FORM_CHANGE_END_BATTLE); - DoBurmyFormChange(i); + bool32 changedForm = FALSE; + + // Appeared in battle and didn't faint + if ((gBattleStruct->appearedInBattle & gBitTable[i]) && GetMonData(&gPlayerParty[i], MON_DATA_HP, NULL) != 0) + changedForm = TryFormChange(i, B_SIDE_PLAYER, FORM_CHANGE_END_BATTLE_TERRAIN); + + if (!changedForm) + changedForm = TryFormChange(i, B_SIDE_PLAYER, FORM_CHANGE_END_BATTLE); + // Clear original species field gBattleStruct->changedSpecies[i] = SPECIES_NONE; @@ -5215,7 +5222,7 @@ static void HandleEndTurn_FinishBattle(void) } // Clear battle mon species to avoid a bug on the next battle that causes // healthboxes loading incorrectly due to it trying to create a Mega Indicator - // if the previous battler would've had. + // if the previous battler would've had it. for (i = 0; i < MAX_BATTLERS_COUNT; i++) { gBattleMons[i].species = SPECIES_NONE; diff --git a/src/battle_util.c b/src/battle_util.c index eaf3f72e07f5..52a3202007b1 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -10414,46 +10414,6 @@ bool32 TryRoomService(u8 battlerId) } } -void DoBurmyFormChange(u32 monId) -{ - u16 newSpecies, currSpecies; - struct Pokemon *party = gPlayerParty; - - currSpecies = GetMonData(&party[monId], MON_DATA_SPECIES, NULL); - - if ((GET_BASE_SPECIES_ID(currSpecies) == SPECIES_BURMY) - && (gBattleStruct->appearedInBattle & gBitTable[monId]) // Burmy appeared in battle - && GetMonData(&party[monId], MON_DATA_HP, NULL) != 0) // Burmy isn't fainted - { - switch (gBattleTerrain) - { - case BATTLE_TERRAIN_GRASS: - case BATTLE_TERRAIN_LONG_GRASS: - case BATTLE_TERRAIN_POND: - case BATTLE_TERRAIN_MOUNTAIN: - case BATTLE_TERRAIN_PLAIN: - newSpecies = SPECIES_BURMY; - break; - case BATTLE_TERRAIN_CAVE: - case BATTLE_TERRAIN_SAND: - newSpecies = SPECIES_BURMY_SANDY_CLOAK; - break; - case BATTLE_TERRAIN_BUILDING: - newSpecies = SPECIES_BURMY_TRASH_CLOAK; - break; - default: // Don't change form if last battle was water-related - newSpecies = SPECIES_NONE; - break; - } - - if (newSpecies != SPECIES_NONE) - { - SetMonData(&party[monId], MON_DATA_SPECIES, &newSpecies); - CalculateMonStats(&party[monId]); - } - } -} - bool32 BlocksPrankster(u16 move, u8 battlerPrankster, u8 battlerDef, bool32 checkTarget) { #if B_PRANKSTER_DARK_TYPES >= GEN_7 diff --git a/src/data/pokemon/form_change_table_pointers.h b/src/data/pokemon/form_change_table_pointers.h index 06d5825a2d35..65e71b2cf9c8 100644 --- a/src/data/pokemon/form_change_table_pointers.h +++ b/src/data/pokemon/form_change_table_pointers.h @@ -85,6 +85,9 @@ const struct FormChange *const gFormChangeTablePointers[NUM_SPECIES] = [SPECIES_RAYQUAZA] = sRayquazaFormChangeTable, [SPECIES_RAYQUAZA_MEGA] = sRayquazaFormChangeTable, #if P_GEN_4_POKEMON == TRUE + [SPECIES_BURMY] = sBurmyFormChangeTable, + [SPECIES_BURMY_SANDY_CLOAK] = sBurmyFormChangeTable, + [SPECIES_BURMY_TRASH_CLOAK] = sBurmyFormChangeTable, [SPECIES_LOPUNNY] = sLopunnyFormChangeTable, [SPECIES_LOPUNNY_MEGA] = sLopunnyFormChangeTable, [SPECIES_GARCHOMP] = sGarchompFormChangeTable, diff --git a/src/data/pokemon/form_change_tables.h b/src/data/pokemon/form_change_tables.h index 6f963b599f2b..7b8c4a6ce7c3 100644 --- a/src/data/pokemon/form_change_tables.h +++ b/src/data/pokemon/form_change_tables.h @@ -279,13 +279,25 @@ static const struct FormChange sGroudonFormChangeTable[] = { }; static const struct FormChange sRayquazaFormChangeTable[] = { - {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_MOVE, SPECIES_RAYQUAZA_MEGA, MOVE_DRAGON_ASCENT}, - {FORM_CHANGE_FAINT, SPECIES_RAYQUAZA}, - {FORM_CHANGE_END_BATTLE, SPECIES_RAYQUAZA}, + {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_MOVE, SPECIES_RAYQUAZA_MEGA, MOVE_DRAGON_ASCENT}, + {FORM_CHANGE_FAINT, SPECIES_RAYQUAZA}, + {FORM_CHANGE_END_BATTLE, SPECIES_RAYQUAZA}, {FORM_CHANGE_TERMINATOR}, }; #if P_GEN_4_POKEMON == TRUE +static const struct FormChange sBurmyFormChangeTable[] = { + {FORM_CHANGE_END_BATTLE_TERRAIN, SPECIES_BURMY, BATTLE_TERRAIN_GRASS}, + {FORM_CHANGE_END_BATTLE_TERRAIN, SPECIES_BURMY, BATTLE_TERRAIN_LONG_GRASS}, + {FORM_CHANGE_END_BATTLE_TERRAIN, SPECIES_BURMY, BATTLE_TERRAIN_POND}, + {FORM_CHANGE_END_BATTLE_TERRAIN, SPECIES_BURMY, BATTLE_TERRAIN_MOUNTAIN}, + {FORM_CHANGE_END_BATTLE_TERRAIN, SPECIES_BURMY, BATTLE_TERRAIN_PLAIN}, + {FORM_CHANGE_END_BATTLE_TERRAIN, SPECIES_BURMY_SANDY_CLOAK, BATTLE_TERRAIN_CAVE}, + {FORM_CHANGE_END_BATTLE_TERRAIN, SPECIES_BURMY_SANDY_CLOAK, BATTLE_TERRAIN_SAND}, + {FORM_CHANGE_END_BATTLE_TERRAIN, SPECIES_BURMY_TRASH_CLOAK, BATTLE_TERRAIN_BUILDING}, + {FORM_CHANGE_TERMINATOR}, +}; + static const struct FormChange sLopunnyFormChangeTable[] = { {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_LOPUNNY_MEGA, ITEM_LOPUNNITE}, {FORM_CHANGE_FAINT, SPECIES_LOPUNNY}, diff --git a/src/pokemon.c b/src/pokemon.c index 1b41d666dc4a..dc87126b9408 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -8538,7 +8538,11 @@ u16 GetFormChangeTargetSpeciesBoxMon(struct BoxPokemon *boxMon, u16 method, u32 case FORM_CHANGE_END_BATTLE: if (heldItem == formChanges[i].param1 || formChanges[i].param1 == ITEM_NONE) targetSpecies = formChanges[i].targetSpecies; - break; + break; + case FORM_CHANGE_END_BATTLE_TERRAIN: + if (gBattleTerrain == formChanges[i].param1) + targetSpecies = formChanges[i].targetSpecies; + break; case FORM_CHANGE_WITHDRAW: case FORM_CHANGE_FAINT: targetSpecies = formChanges[i].targetSpecies; From 0eccbdf980e09c4de4a11f63ea1cad2db7d9d9f7 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sun, 6 Nov 2022 00:36:25 -0300 Subject: [PATCH 019/428] Primal Reversion at the beginning of a battle now happens in the switchin ability loop, making it happen by speed order. --- src/battle_main.c | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/src/battle_main.c b/src/battle_main.c index 1aefd71b0fe5..6abc19083bd2 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -3678,18 +3678,6 @@ static void TryDoEventsBeforeFirstTurn(void) } memset(gTotemBoosts, 0, sizeof(gTotemBoosts)); // erase all totem boosts just to be safe - // Primal Reversion - for (i = 0; i < gBattlersCount; i++) - { - if (GetBattlerHoldEffect(i, TRUE) == HOLD_EFFECT_PRIMAL_ORB - && GetBattleFormChangeTargetSpecies(i, FORM_CHANGE_BATTLE_PRIMAL_REVERSION) != SPECIES_NONE) - { - gBattlerAttacker = i; - BattleScriptExecute(BattleScript_PrimalReversion); - return; - } - } - // Check neutralizing gas if (AbilityBattleEffects(ABILITYEFFECT_NEUTRALIZINGGAS, 0, 0, 0, 0) != 0) return; @@ -3698,6 +3686,14 @@ static void TryDoEventsBeforeFirstTurn(void) while (gBattleStruct->switchInAbilitiesCounter < gBattlersCount) { gBattlerAttacker = gBattlerByTurnOrder[gBattleStruct->switchInAbilitiesCounter++]; + + // Primal Reversion + if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_PRIMAL_ORB + && GetBattleFormChangeTargetSpecies(gBattlerAttacker, FORM_CHANGE_BATTLE_PRIMAL_REVERSION) != SPECIES_NONE) + { + BattleScriptExecute(BattleScript_PrimalReversion); + return; + } if (AbilityBattleEffects(ABILITYEFFECT_ON_SWITCHIN, gBattlerAttacker, 0, 0, 0) != 0) return; } From 62912f8caf852eb453fe07a1fb504123d1a50e2e Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sun, 6 Nov 2022 16:01:07 -0300 Subject: [PATCH 020/428] Battle indicator now depends on species instead of held item - This is to avoid a situation where a user would plop a Primal Groudon and its indicator would become Alpha if it doesn't have a Red Orb. --- include/constants/form_change_types.h | 1 + src/battle_interface.c | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/include/constants/form_change_types.h b/include/constants/form_change_types.h index 8701a9497c8f..b9d6c89424f9 100644 --- a/include/constants/form_change_types.h +++ b/include/constants/form_change_types.h @@ -81,5 +81,6 @@ // Form change that activates automatically when entering battle with the specified item. // If the item is a Red Orb, it uses the Omega Symbol for the animation and icon. Otherwise, it defaults to the Alpha symbol. +// The battle indicator icon is based on the species, with Primal Groudon's as Omega and otherwise being Alpha. // param1: item to hold. #define FORM_CHANGE_BATTLE_PRIMAL_REVERSION 13 diff --git a/src/battle_interface.c b/src/battle_interface.c index c3d97f1379a5..f7882c15bbb2 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -1560,12 +1560,12 @@ u32 CreateMegaIndicatorSprite(u32 battlerId, u32 which) } else if (IsBattlerPrimalReverted(battlerId)) { - if (gBattleMons[battlerId].item == ITEM_RED_ORB) + if (gBattleMons[battlerId].species == SPECIES_GROUDON_PRIMAL) { LoadSpritePalette(&sSpritePalette_OmegaIndicator); LoadSpriteSheet(&sSpriteSheet_OmegaIndicator); } - else // ITEM_BLUE_ORB + else // SPECIES_KYOGRE_PRIMAL { LoadSpritePalette(&sSpritePalette_AlphaIndicator); LoadSpriteSheet(&sSpriteSheet_AlphaIndicator); @@ -1589,9 +1589,9 @@ u32 CreateMegaIndicatorSprite(u32 battlerId, u32 which) } else if (IsBattlerPrimalReverted(battlerId)) { - if (gBattleMons[battlerId].item == ITEM_RED_ORB) + if (gBattleMons[battlerId].species == SPECIES_GROUDON_PRIMAL) spriteId = CreateSpriteAtEnd(&sSpriteTemplate_OmegaIndicator, x, y, 0); - else // ITEM_BLUE_ORB + else // SPECIES_KYOGRE_PRIMAL spriteId = CreateSpriteAtEnd(&sSpriteTemplate_AlphaIndicator, x, y, 0); } From 2ef2134be1a04e79bc09dfb35dd0ceda59ff4f2b Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sun, 6 Nov 2022 17:12:34 -0300 Subject: [PATCH 021/428] Moved Hunger Switch to form change table. --- data/battle_scripts_1.s | 1 + include/constants/form_change_types.h | 4 ++++ src/battle_ai_main.c | 4 ---- src/battle_util.c | 19 ++++++------------- src/data/pokemon/form_change_tables.h | 8 +++++--- 5 files changed, 16 insertions(+), 20 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 472b1c9d1d85..34a1bead899f 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -7525,6 +7525,7 @@ BattleScript_AttackerFormChangeEnd3:: BattleScript_AttackerFormChangeEnd3NoPopup:: call BattleScript_AttackerFormChangeNoPopup + end3 BattleScript_AttackerFormChangeMoveEffect:: waitmessage 1 diff --git a/include/constants/form_change_types.h b/include/constants/form_change_types.h index b9d6c89424f9..f6a858f9769c 100644 --- a/include/constants/form_change_types.h +++ b/include/constants/form_change_types.h @@ -84,3 +84,7 @@ // The battle indicator icon is based on the species, with Primal Groudon's as Omega and otherwise being Alpha. // param1: item to hold. #define FORM_CHANGE_BATTLE_PRIMAL_REVERSION 13 + +// Form change that activates automatically when the turn ends. +// param1: ability to check. +#define FORM_CHANGE_BATTLE_TURN_END 14 diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 70818a29c3dc..25e06806bbd9 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -3817,7 +3817,6 @@ static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) ProtectChecks(battlerAtk, battlerDef, move, predictedMove, &score); break; case MOVE_KINGS_SHIELD: - #if (defined SPECIES_AEGISLASH && defined SPECIES_AEGISLASH_BLADE) if (AI_DATA->abilities[battlerAtk] == ABILITY_STANCE_CHANGE //Special logic for Aegislash && gBattleMons[battlerAtk].species == SPECIES_AEGISLASH_BLADE && !IsBattlerIncapacitated(battlerDef, AI_DATA->abilities[battlerDef])) @@ -3825,7 +3824,6 @@ static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) score += 3; break; } - #endif //fallthrough default: // protect ProtectChecks(battlerAtk, battlerDef, move, predictedMove, &score); @@ -4484,7 +4482,6 @@ static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) score += 3; break; case EFFECT_RELIC_SONG: - #if (defined SPECIES_MELOETTA && defined SPECIES_MELOETTA_PIROUETTE) if (!(gBattleMons[battlerAtk].status2 & STATUS2_TRANSFORMED)) // Don't try to change form if it's transformed. { if (gBattleMons[battlerAtk].species == SPECIES_MELOETTA && gBattleMons[battlerDef].defense < gBattleMons[battlerDef].spDefense) @@ -4492,7 +4489,6 @@ static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) else if (gBattleMons[battlerAtk].species == SPECIES_MELOETTA_PIROUETTE && gBattleMons[battlerDef].spDefense < gBattleMons[battlerDef].defense) score += 3; // Change to Aria if can do more damage } - #endif break; case EFFECT_ELECTRIC_TERRAIN: case EFFECT_MISTY_TERRAIN: diff --git a/src/battle_util.c b/src/battle_util.c index 52a3202007b1..5629acc95bec 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -5019,18 +5019,9 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move } break; case ABILITY_HUNGER_SWITCH: - if (!(gBattleMons[battler].status2 & STATUS2_TRANSFORMED)) + if (TryBattleFormChange(battler, FORM_CHANGE_BATTLE_TURN_END)) { - if (gBattleMons[battler].species == SPECIES_MORPEKO) - { - gBattleMons[battler].species = SPECIES_MORPEKO_HANGRY; - BattleScriptPushCursorAndCallback(BattleScript_AttackerFormChangeEnd3NoPopup); - } - else if (gBattleMons[battler].species == SPECIES_MORPEKO_HANGRY) - { - gBattleMons[battler].species = SPECIES_MORPEKO; - BattleScriptPushCursorAndCallback(BattleScript_AttackerFormChangeEnd3NoPopup); - } + BattleScriptPushCursorAndCallback(BattleScript_AttackerFormChangeEnd3NoPopup); effect++; } break; @@ -9788,7 +9779,6 @@ u16 GetBattleFormChangeTargetSpecies(u8 battlerId, u16 method) targetSpecies = formChanges[i].targetSpecies; break; case FORM_CHANGE_BATTLE_HP_PERCENT: - { if (formChanges[i].param1 == GetBattlerAbility(battlerId)) { // We multiply by 100 to make sure that integer division doesn't mess with the health check. @@ -9806,7 +9796,10 @@ u16 GetBattleFormChangeTargetSpecies(u8 battlerId, u16 method) } } break; - } + case FORM_CHANGE_BATTLE_TURN_END: + if (formChanges[i].param1 == GetBattlerAbility(battlerId)) + targetSpecies = formChanges[i].targetSpecies; + break; } } } diff --git a/src/data/pokemon/form_change_tables.h b/src/data/pokemon/form_change_tables.h index 7b8c4a6ce7c3..9f01f832031e 100644 --- a/src/data/pokemon/form_change_tables.h +++ b/src/data/pokemon/form_change_tables.h @@ -604,9 +604,11 @@ static const struct FormChange sCramorantFormChangeTable[] = { }; static const struct FormChange sMorpekoFormChangeTable[] = { - {FORM_CHANGE_BATTLE_SWITCH, SPECIES_MORPEKO}, - {FORM_CHANGE_FAINT, SPECIES_MORPEKO}, - {FORM_CHANGE_END_BATTLE, SPECIES_MORPEKO}, + {FORM_CHANGE_BATTLE_TURN_END, SPECIES_MORPEKO_HANGRY, ABILITY_HUNGER_SWITCH}, + {FORM_CHANGE_BATTLE_TURN_END, SPECIES_MORPEKO , ABILITY_HUNGER_SWITCH}, + {FORM_CHANGE_BATTLE_SWITCH, SPECIES_MORPEKO}, + {FORM_CHANGE_FAINT, SPECIES_MORPEKO}, + {FORM_CHANGE_END_BATTLE, SPECIES_MORPEKO}, {FORM_CHANGE_TERMINATOR}, }; From 34ba9b4e0d4f710f4f0961a7b73902266c06f38a Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Mon, 28 Nov 2022 14:36:19 -0500 Subject: [PATCH 022/428] convert a few various to callnatives --- asm/macros/battle_script.inc | 50 ++++++------ include/constants/battle_script_commands.h | 5 -- src/battle_script_commands.c | 95 ++++++++++++++-------- src/battle_z_move.c | 4 +- 4 files changed, 88 insertions(+), 66 deletions(-) diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index 27c5a86c4166..0fa2212292cf 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -1310,6 +1310,33 @@ callnative BS_CalcMetalBurstDmg .4byte \ptr .endm + + .macro setzeffect + callnative BS_SetZEffect + .endm + + @ Used by effects that may proc Symbiosis but do not call removeitem. + .macro trysymbiosis + callnative BS_TrySymbiosis + .endm + + @ returns TRUE or FALSE to gBattleCommunication[0] + .macro canteleport battler:req + callnative BS_CanTeleport + .byte \battler + .endm + + @ returns B_SIDE_x to gBattleCommunication[0] + .macro getbattlerside battler:req + callnative BS_GetBattlerSide + .byte \battler + .endm + + .macro checkparentalbondcounter counter:req, ptr:req + callnative BS_CheckParentalBondCounter + .byte \counter + .4byte \ptr + .endm @ various command changed to more readable macros .macro cancelmultiturnmoves battler:req @@ -1791,10 +1818,6 @@ various \battler, VARIOUS_TRY_ACTIVATE_GRIM_NEIGH .endm - .macro setzeffect - various BS_ATTACKER, VARIOUS_SET_Z_EFFECT - .endm - .macro consumeberry battler:req, frombattler:req various \battler, VARIOUS_CONSUME_BERRY .byte \frombattler @@ -1986,20 +2009,6 @@ various BS_ATTACKER, VARIOUS_SWAP_SIDE_STATUSES .endm - .macro canteleport battler:req - various \battler, VARIOUS_CAN_TELEPORT - .endm - - .macro getbattlerside battler:req - various \battler, VARIOUS_GET_BATTLER_SIDE - .endm - - .macro checkparentalbondcounter counter:req, ptr:req - various BS_ATTACKER, VARIOUS_CHECK_PARENTAL_BOND_COUNTER - .byte \counter - .4byte \ptr - .endm - @ helpful macros .macro setstatchanger stat:req, stages:req, down:req setbyte sSTATCHANGER, \stat | \stages << 3 | \down << 7 @@ -2152,8 +2161,3 @@ .macro skydropyawn various 0, VARIOUS_SKY_DROP_YAWN .endm - - @ Used by effects that may proc Symbiosis but do not call removeitem. - .macro trysymbiosis - various BS_ATTACKER, VARIOUS_TRY_SYMBIOSIS - .endm diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h index 06a09fc17970..e8f25f77f39c 100644 --- a/include/constants/battle_script_commands.h +++ b/include/constants/battle_script_commands.h @@ -241,11 +241,6 @@ #define VARIOUS_BATTLER_ITEM_TO_LAST_USED_ITEM 150 #define VARIOUS_SET_BEAK_BLAST 151 #define VARIOUS_SWAP_SIDE_STATUSES 152 -#define VARIOUS_SET_Z_EFFECT 153 -#define VARIOUS_TRY_SYMBIOSIS 154 -#define VARIOUS_CAN_TELEPORT 155 -#define VARIOUS_GET_BATTLER_SIDE 156 -#define VARIOUS_CHECK_PARENTAL_BOND_COUNTER 157 // Cmd_manipulatedamage #define DMG_CHANGE_SIGN 0 diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index b7551ab9eee4..770a5444a393 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -9434,9 +9434,6 @@ static void Cmd_various(void) gBattlescriptCurrInstr += 7; // exit if loop failed (failsafe) } return; - case VARIOUS_SET_Z_EFFECT: - SetZEffect(); //handles battle script jumping internally - return; case VARIOUS_MOVEEND_ITEM_EFFECTS: if (ItemBattleEffects(ITEMEFFECT_NORMAL, gActiveBattler, FALSE)) return; @@ -10035,39 +10032,6 @@ static void Cmd_various(void) case VARIOUS_SWAP_SIDE_STATUSES: CourtChangeSwapSideStatuses(); break; - case VARIOUS_TRY_SYMBIOSIS: //called by Bestow, Fling, and Bug Bite, which don't work with Cmd_removeitem. - if (SYMBIOSIS_CHECK(gActiveBattler, BATTLE_PARTNER(gActiveBattler))) - { - BestowItem(BATTLE_PARTNER(gActiveBattler), gActiveBattler); - gLastUsedAbility = gBattleMons[BATTLE_PARTNER(gActiveBattler)].ability; - gBattleScripting.battler = gBattlerAbility = BATTLE_PARTNER(gActiveBattler); - gBattlerAttacker = gActiveBattler; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_SymbiosisActivates; - return; - } - break; - case VARIOUS_CAN_TELEPORT: - gBattleCommunication[0] = CanTeleport(gActiveBattler); - break; - case VARIOUS_GET_BATTLER_SIDE: - if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) - gBattleCommunication[0] = B_SIDE_PLAYER; - else - gBattleCommunication[0] = B_SIDE_OPPONENT; - break; - case VARIOUS_CHECK_PARENTAL_BOND_COUNTER: - { - // Some effects should only happen on the first or second strike of Parental Bond, - // so a way to check this in battle scripts is useful - u8 counter = T1_READ_8(gBattlescriptCurrInstr + 3); - if (gSpecialStatuses[gBattlerAttacker].parentalBondState == counter && gBattleMons[gBattlerTarget].hp != 0) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 4); - else - gBattlescriptCurrInstr += 8; - return; - } - break; } // End of switch (gBattlescriptCurrInstr[2]) gBattlescriptCurrInstr += 3; @@ -14861,3 +14825,62 @@ static bool8 IsFinalStrikeEffect(u16 move) } return FALSE; } + +// 10 bytes long (callnative(5) + counter(1) + ptr(4)) +void BS_CheckParentalBondCounter(void) +{ + // Some effects should only happen on the first or second strike of Parental Bond, + // so a way to check this in battle scripts is useful + u8 counter = T1_READ_8(gBattlescriptCurrInstr + 5); + if (gSpecialStatuses[gBattlerAttacker].parentalBondState == counter && gBattleMons[gBattlerTarget].hp != 0) + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 6); + else + gBattlescriptCurrInstr += 10; +} + +// 6 bytes long (callnative(5) + battler(1)) +void BS_GetBattlerSide(void) +{ + u8 battler = gBattlescriptCurrInstr[5]; + if (GetBattlerSide(battler) == B_SIDE_PLAYER) + gBattleCommunication[0] = B_SIDE_PLAYER; + else + gBattleCommunication[0] = B_SIDE_OPPONENT; + + gBattlescriptCurrInstr += 6; +} + +// 6 bytes long (callnative(5) + battler(1)) +void BS_CanTeleport(void) +{ + u8 battler = gBattlescriptCurrInstr[5]; + gBattleCommunication[0] = CanTeleport(battler); + gBattlescriptCurrInstr += 6; +} + +// 5 bytes long +void BS_TrySymbiosis(void) +{ + //called by Bestow, Fling, and Bug Bite, which don't work with Cmd_removeitem. + gActiveBattler = gBattlerAttacker; + if (SYMBIOSIS_CHECK(gBattlerAttacker, BATTLE_PARTNER(gActiveBattler))) + { + BestowItem(BATTLE_PARTNER(gActiveBattler), gActiveBattler); + gLastUsedAbility = gBattleMons[BATTLE_PARTNER(gActiveBattler)].ability; + gBattleScripting.battler = gBattlerAbility = BATTLE_PARTNER(gActiveBattler); + gBattlerAttacker = gActiveBattler; + BattleScriptPushCursor(gBattlescriptCurrInstr + 5); + gBattlescriptCurrInstr = BattleScript_SymbiosisActivates; + } + else + { + gBattlescriptCurrInstr += 5; + } +} + +void BS_SetZEffect(void) +{ + SetZEffect(); // Handles battle script jumping internally +} + + diff --git a/src/battle_z_move.c b/src/battle_z_move.c index 2eccd82f5270..e27304853cf8 100644 --- a/src/battle_z_move.c +++ b/src/battle_z_move.c @@ -593,7 +593,7 @@ const u8 *GetZMoveName(u16 move) return gZMoveNames[0]; // Failsafe } -#define Z_EFFECT_BS_LENGTH 3 +#define Z_EFFECT_BS_LENGTH 5 // This function kinda cheats by setting a return battle script to after the setzeffect various command // and then jumping to a z effect script void SetZEffect(void) @@ -684,7 +684,7 @@ void SetZEffect(void) gBattlescriptCurrInstr = BattleScript_StatUpZMove; break; default: - gBattlescriptCurrInstr += 3; + gBattlescriptCurrInstr += Z_EFFECT_BS_LENGTH; break; } From cd7abea6fe50f9e75a4712ee5061b378707b4834 Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Mon, 28 Nov 2022 14:47:56 -0500 Subject: [PATCH 023/428] fix BS_TrySymbiosis --- src/battle_script_commands.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 770a5444a393..55487eab7634 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -14869,13 +14869,12 @@ void BS_TrySymbiosis(void) gLastUsedAbility = gBattleMons[BATTLE_PARTNER(gActiveBattler)].ability; gBattleScripting.battler = gBattlerAbility = BATTLE_PARTNER(gActiveBattler); gBattlerAttacker = gActiveBattler; - BattleScriptPushCursor(gBattlescriptCurrInstr + 5); + BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_SymbiosisActivates; + return; } - else - { - gBattlescriptCurrInstr += 5; - } + + gBattlescriptCurrInstr += 5; } void BS_SetZEffect(void) From 4b799f2571bc6ba49c190e1bf908566d99992d95 Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Mon, 28 Nov 2022 15:10:42 -0500 Subject: [PATCH 024/428] optimize BS_GetBattlerSide --- src/battle_script_commands.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 55487eab7634..7ad656737329 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -14841,12 +14841,7 @@ void BS_CheckParentalBondCounter(void) // 6 bytes long (callnative(5) + battler(1)) void BS_GetBattlerSide(void) { - u8 battler = gBattlescriptCurrInstr[5]; - if (GetBattlerSide(battler) == B_SIDE_PLAYER) - gBattleCommunication[0] = B_SIDE_PLAYER; - else - gBattleCommunication[0] = B_SIDE_OPPONENT; - + gBattleCommunication[0] = GetBattlerSide(gBattlescriptCurrInstr[5]); gBattlescriptCurrInstr += 6; } From ae482ed1f4648fb5f09e0c4c382ff401ce2cec96 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Mon, 12 Dec 2022 21:08:46 -0300 Subject: [PATCH 025/428] Implemented Ceaseless Edge's effect --- data/battle_scripts_1.s | 35 +++++++++++++++++++++++++ include/constants/battle_move_effects.h | 3 ++- src/data/battle_moves.h | 2 +- 3 files changed, 38 insertions(+), 2 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 94a220608a72..d1d1e670f384 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -416,6 +416,18 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectDoubleShock @ EFFECT_DOUBLE_SHOCK .4byte BattleScript_EffectSpecialAttackUpHit @ EFFECT_SPECIAL_ATTACK_UP_HIT .4byte BattleScript_EffectVictoryDance @ EFFECT_VICTORY_DANCE + .4byte BattleScript_EffectCeaselessEdge @ EFFECT_CEASELESS_EDGE + +BattleScript_EffectCeaselessEdge:: + call BattleScript_EffectHit_Ret + trysetspikes BattleScript_ButItFailedAtkStringPpReduce + attackstring + ppreduce + attackanimation + waitanimation + printstring STRINGID_SPIKESSCATTERED + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd BattleScript_AffectionBasedEndurance:: playanimation BS_TARGET, B_ANIM_AFFECTION_HANGED_ON @@ -3029,6 +3041,29 @@ BattleScript_MoveEnd:: moveendall end +BattleScript_EffectHit_Ret:: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + critcalc + damagecalc + adjustdamage + attackanimation + waitanimation + effectivenesssound + hitanimation BS_TARGET + waitstate + healthbarupdate BS_TARGET + datahpupdate BS_TARGET + critmessage + waitmessage B_WAIT_TIME_LONG + resultmessage + waitmessage B_WAIT_TIME_LONG + seteffectwithchance + tryfaintmon BS_TARGET + return + BattleScript_EffectNaturalGift: attackcanceler attackstring diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h index 5af1017a9d66..1ac102c35b0a 100644 --- a/include/constants/battle_move_effects.h +++ b/include/constants/battle_move_effects.h @@ -397,7 +397,8 @@ #define EFFECT_DOUBLE_SHOCK 391 #define EFFECT_SPECIAL_ATTACK_UP_HIT 392 #define EFFECT_VICTORY_DANCE 393 +#define EFFECT_CEASELESS_EDGE 394 -#define NUM_BATTLE_MOVE_EFFECTS 394 +#define NUM_BATTLE_MOVE_EFFECTS 395 #endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index ef4d150396e8..225da6ff7126 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -13598,7 +13598,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_CEASELESS_EDGE] = { - .effect = EFFECT_PLACEHOLDER, // EFFECT_CEASELESS_EDGE, + .effect = EFFECT_CEASELESS_EDGE, .power = 65, .type = TYPE_DARK, .accuracy = 90, From 3ce486976640d517f34188be08124bce9461d33a Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Mon, 12 Dec 2022 21:41:13 -0300 Subject: [PATCH 026/428] Implemented Shell Trap's effect --- data/battle_scripts_1.s | 18 ++++++++++++++++++ include/battle_scripts.h | 1 + include/constants/battle_move_effects.h | 3 ++- include/constants/battle_string_ids.h | 4 +++- src/battle_main.c | 13 ++++++++----- src/battle_message.c | 4 ++++ src/battle_script_commands.c | 7 ++++--- src/data/battle_moves.h | 2 +- 8 files changed, 41 insertions(+), 11 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index d1d1e670f384..f2a0223cf4c6 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -417,6 +417,24 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectSpecialAttackUpHit @ EFFECT_SPECIAL_ATTACK_UP_HIT .4byte BattleScript_EffectVictoryDance @ EFFECT_VICTORY_DANCE .4byte BattleScript_EffectCeaselessEdge @ EFFECT_CEASELESS_EDGE + .4byte BattleScript_EffectShellTrap @ EFFECT_SHELL_TRAP + +BattleScript_EffectShellTrap: + jumpifnodamage BattleScript_EffectShellTrap_Failed + goto BattleScript_EffectHit + +BattleScript_EffectShellTrap_Failed: + printstring STRINGID_ATTACKERSHELLTRAPDIDNTWORK + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_ShellTrapSetUp:: + printstring STRINGID_EMPTYSTRING3 + waitmessage 1 + playanimation BS_ATTACKER, B_ANIM_SHELL_TRAP_SETUP, NULL + printstring STRINGID_ATTACKERSETASHELLTRAP + waitmessage B_WAIT_TIME_LONG + end2 BattleScript_EffectCeaselessEdge:: call BattleScript_EffectHit_Ret diff --git a/include/battle_scripts.h b/include/battle_scripts.h index 75afdbf633d1..89ad9302bbec 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -433,6 +433,7 @@ extern const u8 BattleScript_MultiHitPrintStrings[]; extern const u8 BattleScript_BurnUpRemoveType[]; extern const u8 BattleScript_TargetAbilityStatRaiseRet[]; extern const u8 BattleScript_DoubleShockRemoveType[]; +extern const u8 BattleScript_ShellTrapSetUp[]; // zmoves extern const u8 BattleScript_ZMoveActivateDamaging[]; diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h index 1ac102c35b0a..c16084c3080f 100644 --- a/include/constants/battle_move_effects.h +++ b/include/constants/battle_move_effects.h @@ -398,7 +398,8 @@ #define EFFECT_SPECIAL_ATTACK_UP_HIT 392 #define EFFECT_VICTORY_DANCE 393 #define EFFECT_CEASELESS_EDGE 394 +#define EFFECT_SHELL_TRAP 395 -#define NUM_BATTLE_MOVE_EFFECTS 395 +#define NUM_BATTLE_MOVE_EFFECTS 396 #endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index 8dd94cca4dc4..64ddcbebd57b 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -632,8 +632,10 @@ #define STRINGID_TARGETTOUGHEDITOUT 630 #define STRINGID_ATTACKERLOSTELECTRICTYPE 631 #define STRINGID_ATTACKERSWITCHEDSTATWITHTARGET 632 +#define STRINGID_ATTACKERSETASHELLTRAP 633 +#define STRINGID_ATTACKERSHELLTRAPDIDNTWORK 634 -#define BATTLESTRINGS_COUNT 633 +#define BATTLESTRINGS_COUNT 635 // This is the string id that gBattleStringsTable starts with. // String ids before this (e.g. STRINGID_INTROMSG) are not in the table, diff --git a/src/battle_main.c b/src/battle_main.c index d138cf23112d..8ba87133eb29 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -101,7 +101,7 @@ static void SetActionsAndBattlersTurnOrder(void); static void UpdateBattlerPartyOrdersOnSwitch(void); static bool8 AllAtActionConfirmed(void); static void TryChangeTurnOrder(void); -static void CheckFocusPunch_ClearVarsBeforeTurnStarts(void); +static void CheckChosenMoveForEffectsBeforeTurnStarts(void); static void CheckMegaEvolutionBeforeTurn(void); static void CheckQuickClaw_CustapBerryActivation(void); static void FreeResetData_ReturnToOvOrDoEvolutions(void); @@ -4878,7 +4878,7 @@ static void CheckMegaEvolutionBeforeTurn(void) } #if B_MEGA_EVO_TURN_ORDER <= GEN_6 - gBattleMainFunc = CheckFocusPunch_ClearVarsBeforeTurnStarts; + gBattleMainFunc = CheckChosenMoveForEffectsBeforeTurnStarts; gBattleStruct->focusPunchBattlerId = 0; #else gBattleMainFunc = TryChangeTurnOrder; // This will just do nothing if no mon has mega evolved @@ -4903,11 +4903,11 @@ static void TryChangeTurnOrder(void) } } } - gBattleMainFunc = CheckFocusPunch_ClearVarsBeforeTurnStarts; + gBattleMainFunc = CheckChosenMoveForEffectsBeforeTurnStarts; gBattleStruct->focusPunchBattlerId = 0; } -static void CheckFocusPunch_ClearVarsBeforeTurnStarts(void) +static void CheckChosenMoveForEffectsBeforeTurnStarts(void) { u32 i; @@ -4921,7 +4921,7 @@ static void CheckFocusPunch_ClearVarsBeforeTurnStarts(void) && !(gDisableStructs[gBattlerAttacker].truantCounter) && !(gProtectStructs[gActiveBattler].noValidMoves)) { - switch(gChosenMoveByBattler[gActiveBattler]) + switch (gChosenMoveByBattler[gActiveBattler]) { case MOVE_FOCUS_PUNCH: BattleScriptExecute(BattleScript_FocusPunchSetUp); @@ -4929,6 +4929,9 @@ static void CheckFocusPunch_ClearVarsBeforeTurnStarts(void) case MOVE_BEAK_BLAST: BattleScriptExecute(BattleScript_BeakBlastSetUp); return; + case MOVE_SHELL_TRAP: + BattleScriptExecute(BattleScript_ShellTrapSetUp); + return; } } } diff --git a/src/battle_message.c b/src/battle_message.c index 031261a289ae..60578897e747 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -761,9 +761,13 @@ static const u8 sText_AttackerMeltedTheIce[] = _("{B_ATK_NAME_WITH_PREFIX} melte static const u8 sText_TargetToughedItOut[] = _("{B_DEF_NAME_WITH_PREFIX} toughed it out\nto show you its best side!"); static const u8 sText_AttackerLostElectricType[] = _("{B_ATK_NAME_WITH_PREFIX} used up all\nof its electricity!"); static const u8 sText_AttackerSwitchedStatWithTarget[] = _("{B_ATK_NAME_WITH_PREFIX} switched {B_BUFF1}\nwith its target!"); +static const u8 sText_AttackerSetAShellTrap[] = _("{B_ATK_NAME_WITH_PREFIX} set\na shell trap!"); +static const u8 sText_AttackerShellTrapDidntWork[] = _("{B_ATK_NAME_WITH_PREFIX}'s shell trap\ndidn't work!"); const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = { + [STRINGID_ATTACKERSHELLTRAPDIDNTWORK - BATTLESTRINGS_TABLE_START] = sText_AttackerShellTrapDidntWork, + [STRINGID_ATTACKERSETASHELLTRAP - BATTLESTRINGS_TABLE_START] = sText_AttackerSetAShellTrap, [STRINGID_ATTACKERSWITCHEDSTATWITHTARGET - BATTLESTRINGS_TABLE_START] = sText_AttackerSwitchedStatWithTarget, [STRINGID_TARGETTOUGHEDITOUT - BATTLESTRINGS_TABLE_START] = sText_TargetToughedItOut, [STRINGID_ATTACKERMELTEDTHEICE - BATTLESTRINGS_TABLE_START] = sText_AttackerMeltedTheIce, diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 9c780c28eec3..3d85d13795ba 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -10031,7 +10031,7 @@ static void Cmd_various(void) gBattleMons[gActiveBattler].item = gLastUsedItem; break; case VARIOUS_SET_BEAK_BLAST: - gProtectStructs[gBattlerAttacker].beakBlastCharge = TRUE; + gProtectStructs[gActiveBattler].beakBlastCharge = TRUE; break; case VARIOUS_SWAP_SIDE_STATUSES: CourtChangeSwapSideStatuses(); @@ -11926,8 +11926,9 @@ static void Cmd_trysetencore(void) } if (gLastMoves[gBattlerTarget] == MOVE_STRUGGLE - || gLastMoves[gBattlerTarget] == MOVE_ENCORE - || gLastMoves[gBattlerTarget] == MOVE_MIRROR_MOVE) + || gLastMoves[gBattlerTarget] == MOVE_ENCORE + || gLastMoves[gBattlerTarget] == MOVE_MIRROR_MOVE + || gLastMoves[gBattlerTarget] == MOVE_SHELL_TRAP) { i = MAX_MON_MOVES; } diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index 225da6ff7126..6badf0ee519a 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -11616,7 +11616,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_SHELL_TRAP] = { - .effect = EFFECT_PLACEHOLDER, // EFFECT_SHELL_TRAP, + .effect = EFFECT_SHELL_TRAP, .power = 150, .type = TYPE_FIRE, .accuracy = 100, From 2cb9400ef0b6b732da416d10a12065ffd38191e4 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Tue, 13 Dec 2022 02:19:41 -0300 Subject: [PATCH 027/428] Implemented Dire Claw's effect --- data/battle_scripts_1.s | 5 +++++ include/constants/battle.h | 3 ++- include/constants/battle_move_effects.h | 3 ++- src/battle_script_commands.c | 16 ++++++++++++++++ src/data/battle_moves.h | 4 ++-- 5 files changed, 27 insertions(+), 4 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index f2a0223cf4c6..b3313abbe182 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -418,6 +418,11 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectVictoryDance @ EFFECT_VICTORY_DANCE .4byte BattleScript_EffectCeaselessEdge @ EFFECT_CEASELESS_EDGE .4byte BattleScript_EffectShellTrap @ EFFECT_SHELL_TRAP + .4byte BattleScript_EffectDireClaw @ EFFECT_DIRE_CLAW + +BattleScript_EffectDireClaw:: + setmoveeffect MOVE_EFFECT_DIRE_CLAW + goto BattleScript_EffectHit BattleScript_EffectShellTrap: jumpifnodamage BattleScript_EffectShellTrap_Failed diff --git a/include/constants/battle.h b/include/constants/battle.h index be44c21cbe21..fa9d4bd1866b 100644 --- a/include/constants/battle.h +++ b/include/constants/battle.h @@ -371,8 +371,9 @@ #define MOVE_EFFECT_RELIC_SONG 69 #define MOVE_EFFECT_TRAP_BOTH 70 #define MOVE_EFFECT_DOUBLE_SHOCK 71 +#define MOVE_EFFECT_DIRE_CLAW 72 -#define NUM_MOVE_EFFECTS 72 +#define NUM_MOVE_EFFECTS 73 #define MOVE_EFFECT_AFFECTS_USER 0x4000 #define MOVE_EFFECT_CERTAIN 0x8000 diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h index c16084c3080f..fa3184855bbb 100644 --- a/include/constants/battle_move_effects.h +++ b/include/constants/battle_move_effects.h @@ -399,7 +399,8 @@ #define EFFECT_VICTORY_DANCE 393 #define EFFECT_CEASELESS_EDGE 394 #define EFFECT_SHELL_TRAP 395 +#define EFFECT_DIRE_CLAW 396 -#define NUM_BATTLE_MOVE_EFFECTS 396 +#define NUM_BATTLE_MOVE_EFFECTS 397 #endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 3d85d13795ba..e5d7935fd5bb 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -3647,6 +3647,22 @@ void SetMoveEffect(bool32 primary, u32 certain) BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_DoubleShockRemoveType; break; + case MOVE_EFFECT_DIRE_CLAW: + if (gBattleMons[gEffectBattler].status1) + { + gBattlescriptCurrInstr++; + } + else + { + DIRE_CLAW_STATUS_PICK: + gBattleScripting.moveEffect = Random() % 6; + if (gBattleScripting.moveEffect == MOVE_EFFECT_NONE + || gBattleScripting.moveEffect == MOVE_EFFECT_BURN + || gBattleScripting.moveEffect == MOVE_EFFECT_FREEZE) + goto DIRE_CLAW_STATUS_PICK; + SetMoveEffect(FALSE, 0); + } + break; } } } diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index 6badf0ee519a..6481b7d450e7 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -13279,11 +13279,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = #else .power = 60, #endif - .effect = EFFECT_PLACEHOLDER, // EFFECT_DIRE_CLAW, + .effect = EFFECT_DIRE_CLAW, .type = TYPE_POISON, .accuracy = 100, .pp = 15, - .secondaryEffectChance = 0, + .secondaryEffectChance = 50, .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, From 1229fa752a3b711e802f401e4a5e09d3160b9bfd Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Wed, 14 Dec 2022 09:14:40 -0300 Subject: [PATCH 028/428] Fixed Triple Axe's target, added its effect and fixed Ceaseless Edge's --- data/battle_scripts_1.s | 12 ++++++++---- include/constants/battle_move_effects.h | 3 ++- src/data/battle_moves.h | 4 ++-- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index b3313abbe182..622463830932 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -419,6 +419,14 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectCeaselessEdge @ EFFECT_CEASELESS_EDGE .4byte BattleScript_EffectShellTrap @ EFFECT_SHELL_TRAP .4byte BattleScript_EffectDireClaw @ EFFECT_DIRE_CLAW + .4byte BattleScript_EffectStoneAxe @ EFFECT_STONE_AXE + +BattleScript_EffectStoneAxe:: + call BattleScript_EffectHit_Ret + setstealthrock BattleScript_ButItFailed + printstring STRINGID_POINTEDSTONESFLOAT + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd BattleScript_EffectDireClaw:: setmoveeffect MOVE_EFFECT_DIRE_CLAW @@ -444,10 +452,6 @@ BattleScript_ShellTrapSetUp:: BattleScript_EffectCeaselessEdge:: call BattleScript_EffectHit_Ret trysetspikes BattleScript_ButItFailedAtkStringPpReduce - attackstring - ppreduce - attackanimation - waitanimation printstring STRINGID_SPIKESSCATTERED waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h index fa3184855bbb..16aac5284304 100644 --- a/include/constants/battle_move_effects.h +++ b/include/constants/battle_move_effects.h @@ -400,7 +400,8 @@ #define EFFECT_CEASELESS_EDGE 394 #define EFFECT_SHELL_TRAP 395 #define EFFECT_DIRE_CLAW 396 +#define EFFECT_STONE_AXE 397 -#define NUM_BATTLE_MOVE_EFFECTS 397 +#define NUM_BATTLE_MOVE_EFFECTS 398 #endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index 6481b7d450e7..22b695fc43b2 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -13326,13 +13326,13 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_STONE_AXE] = { - .effect = EFFECT_PLACEHOLDER, // EFFECT_STONE_AXE, + .effect = EFFECT_STONE_AXE, .power = 65, .type = TYPE_ROCK, .accuracy = 90, .pp = 15, .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, + .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, From 4bb86c5d961a68da83f5798a0dd06be4a8507c97 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Wed, 14 Dec 2022 09:33:09 -0300 Subject: [PATCH 029/428] Implemented Barb Barrage's effect --- data/battle_scripts_1.s | 2 ++ include/constants/battle_move_effects.h | 3 ++- src/battle_util.c | 4 ++++ src/data/battle_moves.h | 10 +++++++--- 4 files changed, 15 insertions(+), 4 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 622463830932..ec604ebc629b 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -420,6 +420,7 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectShellTrap @ EFFECT_SHELL_TRAP .4byte BattleScript_EffectDireClaw @ EFFECT_DIRE_CLAW .4byte BattleScript_EffectStoneAxe @ EFFECT_STONE_AXE + .4byte BattleScript_EffectBarbBarrage @ EFFECT_BARB_BARRAGE BattleScript_EffectStoneAxe:: call BattleScript_EffectHit_Ret @@ -3265,6 +3266,7 @@ BattleScript_CantMakeAsleep:: orhalfword gMoveResultFlags, MOVE_RESULT_FAILED goto BattleScript_MoveEnd +BattleScript_EffectBarbBarrage: BattleScript_EffectPoisonHit: setmoveeffect MOVE_EFFECT_POISON goto BattleScript_EffectHit diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h index 16aac5284304..f51ae08c188d 100644 --- a/include/constants/battle_move_effects.h +++ b/include/constants/battle_move_effects.h @@ -401,7 +401,8 @@ #define EFFECT_SHELL_TRAP 395 #define EFFECT_DIRE_CLAW 396 #define EFFECT_STONE_AXE 397 +#define EFFECT_BARB_BARRAGE 398 -#define NUM_BATTLE_MOVE_EFFECTS 398 +#define NUM_BATTLE_MOVE_EFFECTS 399 #endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H diff --git a/src/battle_util.c b/src/battle_util.c index 00e3b869b116..08eea7f41d1e 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -8483,6 +8483,10 @@ static u16 CalcMoveBasePower(u16 move, u8 battlerAtk, u8 battlerDef) basePower = CalcBeatUpPower(); #endif break; + case EFFECT_BARB_BARRAGE: + if (gBattleMons[battlerDef].status1 & STATUS1_PSN_ANY) + basePower *= 2; + break; } // Move-specific base power changes diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index 22b695fc43b2..227f77daf8ec 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -13490,12 +13490,16 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_BARB_BARRAGE] = { - .effect = EFFECT_PLACEHOLDER, // EFFECT_BARB_BARRAGE, + .effect = EFFECT_BARB_BARRAGE, .power = 60, .type = TYPE_POISON, .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, + #if B_UPDATED_MOVE_DATA >= GEN_9 + .pp = 10, + #else + .pp = 15, + #endif + .secondaryEffectChance = 50, .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, From 9972cce0ec3ad30c7acf2c853aec3fc996a93833 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Wed, 21 Dec 2022 20:05:10 -0300 Subject: [PATCH 030/428] Updated MOVE_EFFECT_DIRE_CLAW --- src/battle_script_commands.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index e5d7935fd5bb..bb0d2019926a 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -3656,7 +3656,7 @@ void SetMoveEffect(bool32 primary, u32 certain) { DIRE_CLAW_STATUS_PICK: gBattleScripting.moveEffect = Random() % 6; - if (gBattleScripting.moveEffect == MOVE_EFFECT_NONE + if (gBattleScripting.moveEffect == 0 || gBattleScripting.moveEffect == MOVE_EFFECT_BURN || gBattleScripting.moveEffect == MOVE_EFFECT_FREEZE) goto DIRE_CLAW_STATUS_PICK; From 034ba7d5d2a345c27de32019b869319a9dbed94a Mon Sep 17 00:00:00 2001 From: Eduardo Quezada D'Ottone Date: Mon, 26 Dec 2022 08:59:37 -0300 Subject: [PATCH 031/428] Fixed usage of gBattleStruct->changedSpecies so its only used by player's party --- src/battle_util.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/battle_util.c b/src/battle_util.c index b3b16f255c41..6a31bc9e2b35 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -9796,8 +9796,8 @@ bool32 TryBattleFormChange(u8 battlerId, u16 method) targetSpecies = GetBattleFormChangeTargetSpecies(battlerId, method); if (targetSpecies != SPECIES_NONE) { - // Saves the original species on the first form change. - if (gBattleStruct->changedSpecies[monId] == SPECIES_NONE) + // Saves the original species on the first form change for the player. + if (side == B_SIDE_PLAYER && gBattleStruct->changedSpecies[monId] == SPECIES_NONE) gBattleStruct->changedSpecies[monId] = gBattleMons[battlerId].species; TryToSetBattleFormChangeMoves(&party[monId], method); @@ -9810,8 +9810,8 @@ bool32 TryBattleFormChange(u8 battlerId, u16 method) targetSpecies = GetFormChangeTargetSpecies(&party[monId], method, 0); if (targetSpecies != SPECIES_NONE) { - // Saves the original species on the first form change. - if (gBattleStruct->changedSpecies[monId] == SPECIES_NONE) + // Saves the original species on the first form change for the player. + if (side == B_SIDE_PLAYER && gBattleStruct->changedSpecies[monId] == SPECIES_NONE) gBattleStruct->changedSpecies[monId] = targetSpecies; TryToSetBattleFormChangeMoves(&party[monId], method); From b5b7631be75619384f889147b964f08b694c5238 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada D'Ottone Date: Mon, 26 Dec 2022 09:14:28 -0300 Subject: [PATCH 032/428] Added guards to form_change_types.h --- include/constants/form_change_types.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/include/constants/form_change_types.h b/include/constants/form_change_types.h index f6a858f9769c..4e60904aa613 100644 --- a/include/constants/form_change_types.h +++ b/include/constants/form_change_types.h @@ -1,3 +1,5 @@ +#ifndef GUARD_CONSTANTS_FORM_CHANGE_TYPES_H +#define GUARD_CONSTANTS_FORM_CHANGE_TYPES_H // FORM_CHANGE_BATTLE_HP_PERCENT param2 arguments #define HP_HIGHER_THAN 1 @@ -88,3 +90,5 @@ // Form change that activates automatically when the turn ends. // param1: ability to check. #define FORM_CHANGE_BATTLE_TURN_END 14 + +#endif // GUARD_CONSTANTS_FORM_CHANGE_TYPES_H From 0159065deaf90c3d8296c1ecca6b2912fdc6a8b9 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Wed, 28 Dec 2022 07:51:11 -0300 Subject: [PATCH 033/428] Removed Shell Trap It's time to let it go for my own mental sanity. Besides, it's a Gen. 7 move. I shouldn't have added it here. --- data/battle_scripts_1.s | 18 ------------------ include/battle_scripts.h | 1 - include/constants/battle_move_effects.h | 9 ++++----- include/constants/battle_string_ids.h | 4 +--- src/battle_main.c | 13 +++++-------- src/battle_message.c | 4 ---- src/battle_script_commands.c | 5 ++--- src/data/battle_moves.h | 2 +- 8 files changed, 13 insertions(+), 43 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index ec604ebc629b..49d06a033dce 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -417,7 +417,6 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectSpecialAttackUpHit @ EFFECT_SPECIAL_ATTACK_UP_HIT .4byte BattleScript_EffectVictoryDance @ EFFECT_VICTORY_DANCE .4byte BattleScript_EffectCeaselessEdge @ EFFECT_CEASELESS_EDGE - .4byte BattleScript_EffectShellTrap @ EFFECT_SHELL_TRAP .4byte BattleScript_EffectDireClaw @ EFFECT_DIRE_CLAW .4byte BattleScript_EffectStoneAxe @ EFFECT_STONE_AXE .4byte BattleScript_EffectBarbBarrage @ EFFECT_BARB_BARRAGE @@ -433,23 +432,6 @@ BattleScript_EffectDireClaw:: setmoveeffect MOVE_EFFECT_DIRE_CLAW goto BattleScript_EffectHit -BattleScript_EffectShellTrap: - jumpifnodamage BattleScript_EffectShellTrap_Failed - goto BattleScript_EffectHit - -BattleScript_EffectShellTrap_Failed: - printstring STRINGID_ATTACKERSHELLTRAPDIDNTWORK - waitmessage B_WAIT_TIME_LONG - goto BattleScript_MoveEnd - -BattleScript_ShellTrapSetUp:: - printstring STRINGID_EMPTYSTRING3 - waitmessage 1 - playanimation BS_ATTACKER, B_ANIM_SHELL_TRAP_SETUP, NULL - printstring STRINGID_ATTACKERSETASHELLTRAP - waitmessage B_WAIT_TIME_LONG - end2 - BattleScript_EffectCeaselessEdge:: call BattleScript_EffectHit_Ret trysetspikes BattleScript_ButItFailedAtkStringPpReduce diff --git a/include/battle_scripts.h b/include/battle_scripts.h index 89ad9302bbec..75afdbf633d1 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -433,7 +433,6 @@ extern const u8 BattleScript_MultiHitPrintStrings[]; extern const u8 BattleScript_BurnUpRemoveType[]; extern const u8 BattleScript_TargetAbilityStatRaiseRet[]; extern const u8 BattleScript_DoubleShockRemoveType[]; -extern const u8 BattleScript_ShellTrapSetUp[]; // zmoves extern const u8 BattleScript_ZMoveActivateDamaging[]; diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h index f51ae08c188d..423fa9a58ce9 100644 --- a/include/constants/battle_move_effects.h +++ b/include/constants/battle_move_effects.h @@ -398,11 +398,10 @@ #define EFFECT_SPECIAL_ATTACK_UP_HIT 392 #define EFFECT_VICTORY_DANCE 393 #define EFFECT_CEASELESS_EDGE 394 -#define EFFECT_SHELL_TRAP 395 -#define EFFECT_DIRE_CLAW 396 -#define EFFECT_STONE_AXE 397 -#define EFFECT_BARB_BARRAGE 398 +#define EFFECT_DIRE_CLAW 395 +#define EFFECT_STONE_AXE 396 +#define EFFECT_BARB_BARRAGE 397 -#define NUM_BATTLE_MOVE_EFFECTS 399 +#define NUM_BATTLE_MOVE_EFFECTS 398 #endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index 64ddcbebd57b..8dd94cca4dc4 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -632,10 +632,8 @@ #define STRINGID_TARGETTOUGHEDITOUT 630 #define STRINGID_ATTACKERLOSTELECTRICTYPE 631 #define STRINGID_ATTACKERSWITCHEDSTATWITHTARGET 632 -#define STRINGID_ATTACKERSETASHELLTRAP 633 -#define STRINGID_ATTACKERSHELLTRAPDIDNTWORK 634 -#define BATTLESTRINGS_COUNT 635 +#define BATTLESTRINGS_COUNT 633 // This is the string id that gBattleStringsTable starts with. // String ids before this (e.g. STRINGID_INTROMSG) are not in the table, diff --git a/src/battle_main.c b/src/battle_main.c index 8ba87133eb29..d138cf23112d 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -101,7 +101,7 @@ static void SetActionsAndBattlersTurnOrder(void); static void UpdateBattlerPartyOrdersOnSwitch(void); static bool8 AllAtActionConfirmed(void); static void TryChangeTurnOrder(void); -static void CheckChosenMoveForEffectsBeforeTurnStarts(void); +static void CheckFocusPunch_ClearVarsBeforeTurnStarts(void); static void CheckMegaEvolutionBeforeTurn(void); static void CheckQuickClaw_CustapBerryActivation(void); static void FreeResetData_ReturnToOvOrDoEvolutions(void); @@ -4878,7 +4878,7 @@ static void CheckMegaEvolutionBeforeTurn(void) } #if B_MEGA_EVO_TURN_ORDER <= GEN_6 - gBattleMainFunc = CheckChosenMoveForEffectsBeforeTurnStarts; + gBattleMainFunc = CheckFocusPunch_ClearVarsBeforeTurnStarts; gBattleStruct->focusPunchBattlerId = 0; #else gBattleMainFunc = TryChangeTurnOrder; // This will just do nothing if no mon has mega evolved @@ -4903,11 +4903,11 @@ static void TryChangeTurnOrder(void) } } } - gBattleMainFunc = CheckChosenMoveForEffectsBeforeTurnStarts; + gBattleMainFunc = CheckFocusPunch_ClearVarsBeforeTurnStarts; gBattleStruct->focusPunchBattlerId = 0; } -static void CheckChosenMoveForEffectsBeforeTurnStarts(void) +static void CheckFocusPunch_ClearVarsBeforeTurnStarts(void) { u32 i; @@ -4921,7 +4921,7 @@ static void CheckChosenMoveForEffectsBeforeTurnStarts(void) && !(gDisableStructs[gBattlerAttacker].truantCounter) && !(gProtectStructs[gActiveBattler].noValidMoves)) { - switch (gChosenMoveByBattler[gActiveBattler]) + switch(gChosenMoveByBattler[gActiveBattler]) { case MOVE_FOCUS_PUNCH: BattleScriptExecute(BattleScript_FocusPunchSetUp); @@ -4929,9 +4929,6 @@ static void CheckChosenMoveForEffectsBeforeTurnStarts(void) case MOVE_BEAK_BLAST: BattleScriptExecute(BattleScript_BeakBlastSetUp); return; - case MOVE_SHELL_TRAP: - BattleScriptExecute(BattleScript_ShellTrapSetUp); - return; } } } diff --git a/src/battle_message.c b/src/battle_message.c index 60578897e747..031261a289ae 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -761,13 +761,9 @@ static const u8 sText_AttackerMeltedTheIce[] = _("{B_ATK_NAME_WITH_PREFIX} melte static const u8 sText_TargetToughedItOut[] = _("{B_DEF_NAME_WITH_PREFIX} toughed it out\nto show you its best side!"); static const u8 sText_AttackerLostElectricType[] = _("{B_ATK_NAME_WITH_PREFIX} used up all\nof its electricity!"); static const u8 sText_AttackerSwitchedStatWithTarget[] = _("{B_ATK_NAME_WITH_PREFIX} switched {B_BUFF1}\nwith its target!"); -static const u8 sText_AttackerSetAShellTrap[] = _("{B_ATK_NAME_WITH_PREFIX} set\na shell trap!"); -static const u8 sText_AttackerShellTrapDidntWork[] = _("{B_ATK_NAME_WITH_PREFIX}'s shell trap\ndidn't work!"); const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = { - [STRINGID_ATTACKERSHELLTRAPDIDNTWORK - BATTLESTRINGS_TABLE_START] = sText_AttackerShellTrapDidntWork, - [STRINGID_ATTACKERSETASHELLTRAP - BATTLESTRINGS_TABLE_START] = sText_AttackerSetAShellTrap, [STRINGID_ATTACKERSWITCHEDSTATWITHTARGET - BATTLESTRINGS_TABLE_START] = sText_AttackerSwitchedStatWithTarget, [STRINGID_TARGETTOUGHEDITOUT - BATTLESTRINGS_TABLE_START] = sText_TargetToughedItOut, [STRINGID_ATTACKERMELTEDTHEICE - BATTLESTRINGS_TABLE_START] = sText_AttackerMeltedTheIce, diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index bb0d2019926a..6e0f4c05dd97 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -10047,7 +10047,7 @@ static void Cmd_various(void) gBattleMons[gActiveBattler].item = gLastUsedItem; break; case VARIOUS_SET_BEAK_BLAST: - gProtectStructs[gActiveBattler].beakBlastCharge = TRUE; + gProtectStructs[gBattlerAttacker].beakBlastCharge = TRUE; break; case VARIOUS_SWAP_SIDE_STATUSES: CourtChangeSwapSideStatuses(); @@ -11943,8 +11943,7 @@ static void Cmd_trysetencore(void) if (gLastMoves[gBattlerTarget] == MOVE_STRUGGLE || gLastMoves[gBattlerTarget] == MOVE_ENCORE - || gLastMoves[gBattlerTarget] == MOVE_MIRROR_MOVE - || gLastMoves[gBattlerTarget] == MOVE_SHELL_TRAP) + || gLastMoves[gBattlerTarget] == MOVE_MIRROR_MOVE) { i = MAX_MON_MOVES; } diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index 227f77daf8ec..40663a421693 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -11616,7 +11616,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_SHELL_TRAP] = { - .effect = EFFECT_SHELL_TRAP, + .effect = EFFECT_PLACEHOLDER, // EFFECT_SHELL_TRAP, .power = 150, .type = TYPE_FIRE, .accuracy = 100, From f5c165ff0ccc0801ff0a9b93619103cc81940f91 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Wed, 28 Dec 2022 08:18:15 -0300 Subject: [PATCH 034/428] Updated Dire Claw's effect again Thanks to MGriffin for providing a much nicer code for it. --- src/battle_script_commands.c | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 6e0f4c05dd97..df995ef60bc9 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -3654,13 +3654,9 @@ void SetMoveEffect(bool32 primary, u32 certain) } else { - DIRE_CLAW_STATUS_PICK: - gBattleScripting.moveEffect = Random() % 6; - if (gBattleScripting.moveEffect == 0 - || gBattleScripting.moveEffect == MOVE_EFFECT_BURN - || gBattleScripting.moveEffect == MOVE_EFFECT_FREEZE) - goto DIRE_CLAW_STATUS_PICK; - SetMoveEffect(FALSE, 0); + static const u8 sDireClawEffects[] = { MOVE_EFFECT_POISON, MOVE_EFFECT_PARALYSIS, MOVE_EFFECT_SLEEP }; + gBattleScripting.moveEffect = sDireClawEffects[Random() % 3]; + SetMoveEffect(TRUE, 0); } break; } @@ -11942,8 +11938,8 @@ static void Cmd_trysetencore(void) } if (gLastMoves[gBattlerTarget] == MOVE_STRUGGLE - || gLastMoves[gBattlerTarget] == MOVE_ENCORE - || gLastMoves[gBattlerTarget] == MOVE_MIRROR_MOVE) + || gLastMoves[gBattlerTarget] == MOVE_ENCORE + || gLastMoves[gBattlerTarget] == MOVE_MIRROR_MOVE) { i = MAX_MON_MOVES; } From 9a6bdfb74f50d9133860944c8824382d907aba4c Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Wed, 4 Jan 2023 12:13:34 -0300 Subject: [PATCH 035/428] Added AI conditionals for the new move effects in this batch --- src/battle_ai_main.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 92866a7c2cb3..5ec8e91aa4a8 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -1486,6 +1486,7 @@ static s16 AI_CheckBadMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) } break; case EFFECT_SPIKES: + case EFFECT_CEASELESS_EDGE: if (gSideTimers[GetBattlerSide(battlerDef)].spikesAmount >= 3) score -= 10; else if (PartnerMoveIsSameNoTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove) @@ -1493,6 +1494,7 @@ static s16 AI_CheckBadMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) score -= 10; // only one mon needs to set up the last layer of Spikes break; case EFFECT_STEALTH_ROCK: + case EFFECT_STONE_AXE: if (gSideTimers[GetBattlerSide(battlerDef)].stealthRockAmount > 0 || PartnerMoveIsSameNoTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove)) //Only one mon needs to set up Stealth Rocks score -= 10; @@ -3472,6 +3474,7 @@ static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) break; case EFFECT_TOXIC: case EFFECT_POISON: + case EFFECT_BARB_BARRAGE: IncreasePoisonScore(battlerAtk, battlerDef, move, &score); break; case EFFECT_LIGHT_SCREEN: @@ -3865,7 +3868,9 @@ static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) break; case EFFECT_SPIKES: + case EFFECT_CEASELESS_EDGE: case EFFECT_STEALTH_ROCK: + case EFFECT_STONE_AXE: case EFFECT_STICKY_WEB: case EFFECT_TOXIC_SPIKES: if (AI_DATA->abilities[battlerDef] == ABILITY_MAGIC_BOUNCE || CountUsablePartyMons(battlerDef) == 0) @@ -4596,6 +4601,10 @@ static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) break; }*/ break; + case EFFECT_DIRE_CLAW: + if (gBattleMons[battlerDef].status1 & STATUS1_NONE) + score += 3; + break; case EFFECT_FEINT: if (gBattleMoves[predictedMove].effect == EFFECT_PROTECT) score += 3; @@ -4900,6 +4909,7 @@ static s16 AI_SetupFirstTurn(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) case EFFECT_HAIL: case EFFECT_GEOMANCY: case EFFECT_VICTORY_DANCE: + case EFFECT_STONE_AXE: score += 2; break; default: From 2414283bb76739b5f24e0926a08e9366744a196d Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Wed, 4 Jan 2023 12:32:17 -0300 Subject: [PATCH 036/428] Removed BattleScript_EffectHit_Ret --- data/battle_scripts_1.s | 71 +++++++++++++++++++++++++---------------- 1 file changed, 44 insertions(+), 27 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index d606809ed9ee..d64336638bc9 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -423,22 +423,62 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectBarbBarrage @ EFFECT_BARB_BARRAGE BattleScript_EffectStoneAxe:: - call BattleScript_EffectHit_Ret + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + critcalc + damagecalc + adjustdamage + attackanimation + waitanimation + effectivenesssound + hitanimation BS_TARGET + waitstate + healthbarupdate BS_TARGET + datahpupdate BS_TARGET + critmessage + waitmessage B_WAIT_TIME_LONG + resultmessage + waitmessage B_WAIT_TIME_LONG + seteffectwithchance + tryfaintmon BS_TARGET setstealthrock BattleScript_ButItFailed printstring STRINGID_POINTEDSTONESFLOAT waitmessage B_WAIT_TIME_LONG - goto BattleScript_MoveEnd + moveendall + end BattleScript_EffectDireClaw:: setmoveeffect MOVE_EFFECT_DIRE_CLAW goto BattleScript_EffectHit BattleScript_EffectCeaselessEdge:: - call BattleScript_EffectHit_Ret + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + critcalc + damagecalc + adjustdamage + attackanimation + waitanimation + effectivenesssound + hitanimation BS_TARGET + waitstate + healthbarupdate BS_TARGET + datahpupdate BS_TARGET + critmessage + waitmessage B_WAIT_TIME_LONG + resultmessage + waitmessage B_WAIT_TIME_LONG + seteffectwithchance + tryfaintmon BS_TARGET trysetspikes BattleScript_ButItFailedAtkStringPpReduce printstring STRINGID_SPIKESSCATTERED waitmessage B_WAIT_TIME_LONG - goto BattleScript_MoveEnd + moveendall + end BattleScript_EffectTeatime:: attackcanceler @@ -3151,29 +3191,6 @@ BattleScript_MoveEnd:: moveendall end -BattleScript_EffectHit_Ret:: - attackcanceler - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - attackstring - ppreduce - critcalc - damagecalc - adjustdamage - attackanimation - waitanimation - effectivenesssound - hitanimation BS_TARGET - waitstate - healthbarupdate BS_TARGET - datahpupdate BS_TARGET - critmessage - waitmessage B_WAIT_TIME_LONG - resultmessage - waitmessage B_WAIT_TIME_LONG - seteffectwithchance - tryfaintmon BS_TARGET - return - BattleScript_EffectNaturalGift: attackcanceler attackstring From 7e398ce80e1858833d33110e469becd5c7c334f9 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Wed, 4 Jan 2023 12:45:49 -0300 Subject: [PATCH 037/428] Corrected the AI conditionals --- src/battle_ai_main.c | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 5ec8e91aa4a8..2f9690250c96 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -1486,7 +1486,6 @@ static s16 AI_CheckBadMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) } break; case EFFECT_SPIKES: - case EFFECT_CEASELESS_EDGE: if (gSideTimers[GetBattlerSide(battlerDef)].spikesAmount >= 3) score -= 10; else if (PartnerMoveIsSameNoTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove) @@ -1494,7 +1493,6 @@ static s16 AI_CheckBadMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) score -= 10; // only one mon needs to set up the last layer of Spikes break; case EFFECT_STEALTH_ROCK: - case EFFECT_STONE_AXE: if (gSideTimers[GetBattlerSide(battlerDef)].stealthRockAmount > 0 || PartnerMoveIsSameNoTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove)) //Only one mon needs to set up Stealth Rocks score -= 10; @@ -4601,10 +4599,6 @@ static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) break; }*/ break; - case EFFECT_DIRE_CLAW: - if (gBattleMons[battlerDef].status1 & STATUS1_NONE) - score += 3; - break; case EFFECT_FEINT: if (gBattleMoves[predictedMove].effect == EFFECT_PROTECT) score += 3; From 72566e63230497ebf8533d8b254ea33ba7f9216a Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Thu, 5 Jan 2023 03:01:18 -0300 Subject: [PATCH 038/428] Turned Stone Axe's and Ceaseless Edge's effects into MOVE_EFFECTs --- data/battle_scripts_1.s | 24 ++++++++++++++++-------- include/battle_scripts.h | 2 ++ include/constants/battle.h | 4 +++- src/battle_script_commands.c | 20 ++++++++++++++++++++ 4 files changed, 41 insertions(+), 9 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index d64336638bc9..238c0e21bd3b 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -441,14 +441,18 @@ BattleScript_EffectStoneAxe:: waitmessage B_WAIT_TIME_LONG resultmessage waitmessage B_WAIT_TIME_LONG - seteffectwithchance tryfaintmon BS_TARGET - setstealthrock BattleScript_ButItFailed - printstring STRINGID_POINTEDSTONESFLOAT - waitmessage B_WAIT_TIME_LONG + setmoveeffect MOVE_EFFECT_STEALTH_ROCK + seteffectprimary moveendall end +BattleScript_StealthRockActivates:: + setstealthrock BattleScript_MoveEnd + printstring STRINGID_POINTEDSTONESFLOAT + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + BattleScript_EffectDireClaw:: setmoveeffect MOVE_EFFECT_DIRE_CLAW goto BattleScript_EffectHit @@ -472,14 +476,18 @@ BattleScript_EffectCeaselessEdge:: waitmessage B_WAIT_TIME_LONG resultmessage waitmessage B_WAIT_TIME_LONG - seteffectwithchance tryfaintmon BS_TARGET - trysetspikes BattleScript_ButItFailedAtkStringPpReduce - printstring STRINGID_SPIKESSCATTERED - waitmessage B_WAIT_TIME_LONG + setmoveeffect MOVE_EFFECT_SPIKES + seteffectprimary moveendall end +BattleScript_SpikesActivate:: + trysetspikes BattleScript_MoveEnd + printstring STRINGID_SPIKESSCATTERED + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + BattleScript_EffectTeatime:: attackcanceler attackstring diff --git a/include/battle_scripts.h b/include/battle_scripts.h index d79566a44be1..55caf9022fb9 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -448,6 +448,8 @@ extern const u8 BattleScript_SupremeOverlordActivates[]; extern const u8 BattleScript_CostarActivates[]; extern const u8 BattleScript_ToxicDebrisActivates[]; extern const u8 BattleScript_EarthEaterActivates[]; +extern const u8 BattleScript_StealthRockActivates[]; +extern const u8 BattleScript_SpikesActivate[]; // zmoves extern const u8 BattleScript_ZMoveActivateDamaging[]; diff --git a/include/constants/battle.h b/include/constants/battle.h index fa9d4bd1866b..e7e65951b182 100644 --- a/include/constants/battle.h +++ b/include/constants/battle.h @@ -372,8 +372,10 @@ #define MOVE_EFFECT_TRAP_BOTH 70 #define MOVE_EFFECT_DOUBLE_SHOCK 71 #define MOVE_EFFECT_DIRE_CLAW 72 +#define MOVE_EFFECT_STEALTH_ROCK 73 +#define MOVE_EFFECT_SPIKES 74 -#define NUM_MOVE_EFFECTS 73 +#define NUM_MOVE_EFFECTS 75 #define MOVE_EFFECT_AFFECTS_USER 0x4000 #define MOVE_EFFECT_CERTAIN 0x8000 diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index fcf09641f5de..9a8a2cabf6d8 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -2789,6 +2789,7 @@ void SetMoveEffect(bool32 primary, u32 certain) bool32 mirrorArmorReflected = (GetBattlerAbility(gBattlerTarget) == ABILITY_MIRROR_ARMOR); u32 flags = 0; u16 battlerAbility; + bool8 activateAfterFaint = FALSE; if (gSpecialStatuses[gBattlerAttacker].parentalBondState == PARENTAL_BOND_1ST_HIT && gBattleMons[gBattlerTarget].hp != 0 @@ -2806,6 +2807,10 @@ void SetMoveEffect(bool32 primary, u32 certain) gBattleStruct->moveEffect2 = gBattleScripting.moveEffect; gBattlescriptCurrInstr++; return; + case MOVE_EFFECT_STEALTH_ROCK: + case MOVE_EFFECT_SPIKES: + activateAfterFaint = TRUE; + break; } if (gBattleScripting.moveEffect & MOVE_EFFECT_AFFECTS_USER) @@ -2838,6 +2843,7 @@ void SetMoveEffect(bool32 primary, u32 certain) INCREMENT_RESET_RETURN if (gBattleMons[gEffectBattler].hp == 0 + && !activateAfterFaint && gBattleScripting.moveEffect != MOVE_EFFECT_PAYDAY && gBattleScripting.moveEffect != MOVE_EFFECT_STEAL_ITEM && gBattleScripting.moveEffect != MOVE_EFFECT_BUG_BITE) @@ -3659,6 +3665,20 @@ void SetMoveEffect(bool32 primary, u32 certain) SetMoveEffect(TRUE, 0); } break; + case MOVE_EFFECT_STEALTH_ROCK: + if (!(gSideStatuses[GetBattlerSide(gEffectBattler)] & SIDE_STATUS_STEALTH_ROCK)) + { + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_StealthRockActivates; + } + break; + case MOVE_EFFECT_SPIKES: + if (!(gSideStatuses[GetBattlerSide(gEffectBattler)] & SIDE_STATUS_SPIKES)) + { + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_SpikesActivate; + } + break; } } } From f39f48fc5102c10eeed978e9832f501c607e64d5 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Thu, 5 Jan 2023 03:07:28 -0300 Subject: [PATCH 039/428] Made MOVE_EFFECT_DIRE_CLAW a tiny bit prettier --- src/battle_script_commands.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 9a8a2cabf6d8..74e5f31ef0df 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -3654,11 +3654,7 @@ void SetMoveEffect(bool32 primary, u32 certain) gBattlescriptCurrInstr = BattleScript_DoubleShockRemoveType; break; case MOVE_EFFECT_DIRE_CLAW: - if (gBattleMons[gEffectBattler].status1) - { - gBattlescriptCurrInstr++; - } - else + if (!gBattleMons[gEffectBattler].status1) { static const u8 sDireClawEffects[] = { MOVE_EFFECT_POISON, MOVE_EFFECT_PARALYSIS, MOVE_EFFECT_SLEEP }; gBattleScripting.moveEffect = sDireClawEffects[Random() % 3]; From 5793a1a5e7865cd2a70706501c6ed801705b7fe3 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Thu, 2 Feb 2023 00:09:53 -0500 Subject: [PATCH 040/428] Correct some union room chat documentation --- ..._palette2.pal => chat_messages_window.pal} | 0 .../{window_1.pal => input_text.pal} | 0 .../{border.bin => keyboard.bin} | Bin .../{border.png => keyboard.png} | Bin graphics/union_room_chat/r_button.png | Bin 188 -> 177 bytes .../{unk_palette1.pal => unused.pal} | 0 graphics/union_room_chat/window_2.pal | 19 --- include/graphics.h | 8 +- src/graphics.c | 8 +- src/union_room_chat.c | 158 ++++++++++-------- 10 files changed, 94 insertions(+), 99 deletions(-) rename graphics/union_room_chat/{unk_palette2.pal => chat_messages_window.pal} (100%) rename graphics/union_room_chat/{window_1.pal => input_text.pal} (100%) rename graphics/union_room_chat/{border.bin => keyboard.bin} (100%) rename graphics/union_room_chat/{border.png => keyboard.png} (100%) rename graphics/union_room_chat/{unk_palette1.pal => unused.pal} (100%) delete mode 100644 graphics/union_room_chat/window_2.pal diff --git a/graphics/union_room_chat/unk_palette2.pal b/graphics/union_room_chat/chat_messages_window.pal similarity index 100% rename from graphics/union_room_chat/unk_palette2.pal rename to graphics/union_room_chat/chat_messages_window.pal diff --git a/graphics/union_room_chat/window_1.pal b/graphics/union_room_chat/input_text.pal similarity index 100% rename from graphics/union_room_chat/window_1.pal rename to graphics/union_room_chat/input_text.pal diff --git a/graphics/union_room_chat/border.bin b/graphics/union_room_chat/keyboard.bin similarity index 100% rename from graphics/union_room_chat/border.bin rename to graphics/union_room_chat/keyboard.bin diff --git a/graphics/union_room_chat/border.png b/graphics/union_room_chat/keyboard.png similarity index 100% rename from graphics/union_room_chat/border.png rename to graphics/union_room_chat/keyboard.png diff --git a/graphics/union_room_chat/r_button.png b/graphics/union_room_chat/r_button.png index 168a293f35474ee97ea6a9ed3754d59a6b5c978f..06079ca2113a79e665b763c48c086075818cf5ad 100644 GIT binary patch delta 123 zcmdnPxRFt@Gr-TCmrII^fq{Y7)59eQNDF{43p0>>d-qY$L`C~R8&4O<5RRF(y$3lN z3^HM^k*qXReihuNE+> WXz3gaE13i`mBG{1&t;ucLK6TA3MyOx delta 134 zcmdnUxQ9`(Gr-TCmrII^fq{Y7)59eQNOJ(O0t+*cyn9dO@kB-Y7#}JO0sl69D z84Nj`?=JYwFK+GVEj}S8=vOIQ4NIrtqD+a@$+LvGe)50hm~p60=bFvN>Eh;p7(^%h kZJiPzv9Ce4QhK)Cgm*f}KJN&=3pAR+)78&qol`;+056*@5dZ)H diff --git a/graphics/union_room_chat/unk_palette1.pal b/graphics/union_room_chat/unused.pal similarity index 100% rename from graphics/union_room_chat/unk_palette1.pal rename to graphics/union_room_chat/unused.pal diff --git a/graphics/union_room_chat/window_2.pal b/graphics/union_room_chat/window_2.pal deleted file mode 100644 index a8c95a3c04ad..000000000000 --- a/graphics/union_room_chat/window_2.pal +++ /dev/null @@ -1,19 +0,0 @@ -JASC-PAL -0100 -16 -156 197 98 -41 131 222 -0 82 172 -197 255 106 -172 230 49 -246 246 213 -255 49 49 -255 148 148 -131 164 213 -238 238 90 -65 65 65 -115 115 115 -172 172 172 -230 230 255 -0 0 0 -255 255 255 diff --git a/include/graphics.h b/include/graphics.h index 45dd9175decf..135eaa95e3ac 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -4992,10 +4992,10 @@ extern const u32 gUsePokeblockCondition_Gfx[]; extern const u16 gUnionRoomChat_Background_Pal[]; extern const u32 gUnionRoomChat_Background_Gfx[]; extern const u32 gUnionRoomChat_Background_Tilemap[]; -extern const u16 gUnionRoomChat_Window_Pal1[]; -extern const u16 gUnionRoomChat_Window_Pal2[]; -extern const u32 gUnionRoomChat_Border_Gfx[]; -extern const u32 gUnionRoomChat_Border_Tilemap[]; +extern const u16 gUnionRoomChat_InputText_Pal[]; +extern const u16 gUnionRoomChat_Keyboard_Pal[]; +extern const u32 gUnionRoomChat_Keyboard_Gfx[]; +extern const u32 gUnionRoomChat_Keyboard_Tilemap[]; extern const u32 gUnionRoomChat_RButtonLabels[]; // Use Pokeblock diff --git a/src/graphics.c b/src/graphics.c index e0045ba6b353..f288b98bf146 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -1427,10 +1427,10 @@ const u32 gNamingScreenKeyboardSymbols_Tilemap[] = INCBIN_U32("graphics/naming_s const u16 gUnionRoomChat_Background_Pal[] = INCBIN_U16("graphics/union_room_chat/background.gbapal"); const u32 gUnionRoomChat_Background_Gfx[] = INCBIN_U32("graphics/union_room_chat/background.4bpp.lz"); const u32 gUnionRoomChat_Background_Tilemap[] = INCBIN_U32("graphics/union_room_chat/background.bin.lz"); -const u16 gUnionRoomChat_Window_Pal1[] = INCBIN_U16("graphics/union_room_chat/window_1.gbapal"); -const u16 gUnionRoomChat_Window_Pal2[] = INCBIN_U16("graphics/union_room_chat/window_2.gbapal"); -const u32 gUnionRoomChat_Border_Gfx[] = INCBIN_U32("graphics/union_room_chat/border.4bpp.lz"); -const u32 gUnionRoomChat_Border_Tilemap[] = INCBIN_U32("graphics/union_room_chat/border.bin.lz"); +const u16 gUnionRoomChat_InputText_Pal[] = INCBIN_U16("graphics/union_room_chat/input_text.gbapal"); +const u16 gUnionRoomChat_Keyboard_Pal[] = INCBIN_U16("graphics/union_room_chat/keyboard.gbapal"); +const u32 gUnionRoomChat_Keyboard_Gfx[] = INCBIN_U32("graphics/union_room_chat/keyboard.4bpp.lz"); +const u32 gUnionRoomChat_Keyboard_Tilemap[] = INCBIN_U32("graphics/union_room_chat/keyboard.bin.lz"); const u32 gUnionRoomChat_RButtonLabels[] = INCBIN_U32("graphics/union_room_chat/r_button_labels.4bpp.lz"); const u16 gTilesetPalettes_General[][16] = diff --git a/src/union_room_chat.c b/src/union_room_chat.c index af4ec2721f66..253e025689b7 100755 --- a/src/union_room_chat.c +++ b/src/union_room_chat.c @@ -116,6 +116,13 @@ enum { // Shared by all above #define PALTAG_INTERFACE 0 +enum { + WIN_CHAT_HISTORY, + WIN_TEXT_ENTRY, + WIN_KEYBOARD, + WIN_SWAP_MENU, +}; + struct UnionRoomChat { u32 filler1; @@ -166,8 +173,7 @@ struct UnionRoomChatDisplay u8 bg1Buffer[BG_SCREEN_SIZE]; u8 bg3Buffer[BG_SCREEN_SIZE]; u8 bg2Buffer[BG_SCREEN_SIZE]; - u8 unk2128[0x20]; - u8 unk2148[0x20]; + u8 textEntryTiles[TILE_SIZE_4BPP * 2]; }; struct UnionRoomChatSprites @@ -247,11 +253,11 @@ static void FreeSprites(void); static void ResetGpuBgState(void); static void SetBgTilemapBuffers(void); static void ClearBg0(void); -static void LoadChatWindowBorderGfx(void); +static void LoadKeyboardWindowGfx(void); static void LoadChatWindowGfx(void); static void LoadChatUnkPalette(void); static void LoadChatMessagesWindow(void); -static void LoadKeyboardWindow(void); +static void DrawKeyboardWindow(void); static void LoadKeyboardSwapWindow(void); static void LoadTextEntryWindow(void); static void CreateKeyboardCursorSprite(void); @@ -520,8 +526,8 @@ static const u8 *const sUnionRoomKeyboardText[UNION_ROOM_KB_PAGE_COUNT - 1][UNIO } }; -static const u16 sUnk_Palette1[] = INCBIN_U16("graphics/union_room_chat/unk_palette1.gbapal"); -static const u16 sUnk_Palette2[] = INCBIN_U16("graphics/union_room_chat/unk_palette2.gbapal"); +static const u16 sUnusedPalette[] = INCBIN_U16("graphics/union_room_chat/unused.gbapal"); // Loaded but never apparently used +static const u16 sChatMessagesWindow_Pal[] = INCBIN_U16("graphics/union_room_chat/chat_messages_window.gbapal"); static const struct BgTemplate sBgTemplates[] = { { @@ -560,7 +566,7 @@ static const struct BgTemplate sBgTemplates[] = { }; static const struct WindowTemplate sWinTemplates[] = { - { + [WIN_CHAT_HISTORY] = { .bg = 3, .tilemapLeft = 8, .tilemapTop = 1, @@ -568,7 +574,8 @@ static const struct WindowTemplate sWinTemplates[] = { .height = 19, .paletteNum = 15, .baseBlock = 0x0001, - }, { + }, + [WIN_TEXT_ENTRY] = { .bg = 1, .tilemapLeft = 9, .tilemapTop = 18, @@ -576,7 +583,8 @@ static const struct WindowTemplate sWinTemplates[] = { .height = 2, .paletteNum = 12, .baseBlock = 0x007a, - }, { + }, + [WIN_KEYBOARD] = { .bg = 1, .tilemapLeft = 0, .tilemapTop = 2, @@ -584,7 +592,8 @@ static const struct WindowTemplate sWinTemplates[] = { .height = 15, .paletteNum = 7, .baseBlock = 0x0020, - }, { + }, + [WIN_SWAP_MENU] = { .bg = 0, .tilemapLeft = 1, .tilemapTop = 2, @@ -749,15 +758,15 @@ static const u32 sTextEntryArrowTiles[] = INCBIN_U32("graphics/union_room_chat/t static const u32 sRButtonGfxTiles[] = INCBIN_U32("graphics/union_room_chat/r_button.4bpp.lz"); static const struct CompressedSpriteSheet sSpriteSheets[] = { - {sKeyboardCursorTiles, 0x1000, 0}, - {sTextEntryArrowTiles, 0x0040, 1}, - {sTextEntryCursorTiles, 0x0040, 2}, - {sRButtonGfxTiles, 0x0080, 3}, - {gUnionRoomChat_RButtonLabels, 0x0400, 4} + {.data = sKeyboardCursorTiles, .size = 0x1000, .tag = GFXTAG_KEYBOARD_CURSOR}, + {.data = sTextEntryArrowTiles, .size = 0x0040, .tag = GFXTAG_TEXT_ENTRY_ARROW}, + {.data = sTextEntryCursorTiles, .size = 0x0040, .tag = GFXTAG_TEXT_ENTRY_CURSOR}, + {.data = sRButtonGfxTiles, .size = 0x0080, .tag = GFXTAG_RBUTTON_ICON}, + {.data = gUnionRoomChat_RButtonLabels, .size = 0x0400, .tag = GFXTAG_RBUTTON_LABELS} }; static const struct SpritePalette sSpritePalette = { - sUnionRoomChatInterfacePal, 0 + .data = sUnionRoomChatInterfacePal, .tag = PALTAG_INTERFACE }; static const struct OamData sOam_KeyboardCursor = { @@ -960,7 +969,7 @@ static void CB2_LoadInterface(void) sChat->handleInputTask = CreateTask(Task_HandlePlayerInput, 8); sChat->receiveMessagesTask = CreateTask(Task_ReceiveChatMessage, 7); LoadWirelessStatusIndicatorSpriteGfx(); - CreateWirelessStatusIndicatorSprite(232, 150); + CreateWirelessStatusIndicatorSprite(DISPLAY_WIDTH - 8, DISPLAY_HEIGHT - 10); } break; } @@ -1749,7 +1758,7 @@ static void RegisterTextAtRow(void) static void ResetMessageEntryBuffer(void) { sChat->messageEntryBuffer[0] = EOS; - sChat->lastBufferCursorPos = 15; + sChat->lastBufferCursorPos = MAX_MESSAGE_LENGTH; sChat->bufferCursorPos = 0; } @@ -2053,10 +2062,10 @@ static void Task_ReceiveChatMessage(u8 taskId) tState = 3; // fall through case 3: - for (; tI < 5 && ((tBlockReceivedStatus >> tI) & 1) == 0; tI++) + for (; tI < MAX_RFU_PLAYERS && ((tBlockReceivedStatus >> tI) & 1) == 0; tI++) ; - if (tI == 5) + if (tI == MAX_RFU_PLAYERS) { tState = 1; return; @@ -2244,7 +2253,7 @@ static bool32 Display_LoadGfx(u8 *state) ClearBg0(); break; case 2: - LoadChatWindowBorderGfx(); + LoadKeyboardWindowGfx(); break; case 3: LoadChatWindowGfx(); @@ -2254,7 +2263,7 @@ static bool32 Display_LoadGfx(u8 *state) break; case 5: LoadChatMessagesWindow(); - LoadKeyboardWindow(); + DrawKeyboardWindow(); LoadKeyboardSwapWindow(); LoadTextEntryWindow(); break; @@ -2280,7 +2289,7 @@ static bool32 Display_ShowKeyboardSwapMenu(u8 *state) { case 0: ShowKeyboardSwapMenu(); - CopyWindowToVram(3, COPYWIN_FULL); + CopyWindowToVram(WIN_SWAP_MENU, COPYWIN_FULL); break; case 1: return IsDma3ManagerBusyWithBgCopy(); @@ -2296,7 +2305,7 @@ static bool32 Display_HideKeyboardSwapMenu(u8 *state) { case 0: HideKeyboardSwapMenu(); - CopyWindowToVram(3, COPYWIN_FULL); + CopyWindowToVram(WIN_SWAP_MENU, COPYWIN_FULL); break; case 1: return IsDma3ManagerBusyWithBgCopy(); @@ -2316,7 +2325,7 @@ static bool32 Display_SwitchPages(u8 *state) return TRUE; PrintCurrentKeyboardPage(); - CopyWindowToVram(2, COPYWIN_GFX); + CopyWindowToVram(WIN_KEYBOARD, COPYWIN_GFX); break; case 1: if (IsDma3ManagerBusyWithBgCopy()) @@ -2393,7 +2402,7 @@ static bool32 Display_UpdateMessageBuffer(u8 *state) FillTextEntryWindow(x, width, 0); str = GetMessageEntryBuffer(); DrawTextEntryMessage(0, str, 3, 1, 2); - CopyWindowToVram(1, COPYWIN_GFX); + CopyWindowToVram(WIN_TEXT_ENTRY, COPYWIN_GFX); break; case 1: if (!IsDma3ManagerBusyWithBgCopy()) @@ -2422,7 +2431,7 @@ static bool32 Display_AskRegisterText(u8 *state) length = StringLength_Multibyte(str); FillTextEntryWindow(x, length, PIXEL_FILL(6)); DrawTextEntryMessage(x, str, 0, 4, 5); - CopyWindowToVram(1, COPYWIN_GFX); + CopyWindowToVram(WIN_TEXT_ENTRY, COPYWIN_GFX); break; case 1: if (!IsDma3ManagerBusyWithBgCopy()) @@ -2463,7 +2472,7 @@ static bool32 Display_CancelRegister(u8 *state) length = StringLength_Multibyte(str); FillTextEntryWindow(x, length, PIXEL_FILL(0)); DrawTextEntryMessage(x, str, 3, 1, 2); - CopyWindowToVram(1, COPYWIN_GFX); + CopyWindowToVram(WIN_TEXT_ENTRY, COPYWIN_GFX); break; case 1: if (!IsDma3ManagerBusyWithBgCopy()) @@ -2501,7 +2510,7 @@ static bool32 Display_ReturnToKeyboard(u8 *state) { case 0: PrintCurrentKeyboardPage(); - CopyWindowToVram(2, COPYWIN_GFX); + CopyWindowToVram(WIN_KEYBOARD, COPYWIN_GFX); (*state)++; break; case 1: @@ -2527,7 +2536,7 @@ static bool32 Display_ScrollChat(u8 *state) str = GetLastReceivedMessage(); colorIdx = GetReceivedPlayerIndex(); PrintChatMessage(row, str, colorIdx); - CopyWindowToVram(0, COPYWIN_GFX); + CopyWindowToVram(WIN_CHAT_HISTORY, COPYWIN_GFX); break; case 1: if (IsDma3ManagerBusyWithBgCopy()) @@ -2546,8 +2555,8 @@ static bool32 Display_ScrollChat(u8 *state) } // fall through case 2: - ScrollWindow(0, 0, 5, PIXEL_FILL(1)); - CopyWindowToVram(0, COPYWIN_GFX); + ScrollWindow(WIN_CHAT_HISTORY, 0, 5, PIXEL_FILL(1)); + CopyWindowToVram(WIN_CHAT_HISTORY, COPYWIN_GFX); sDisplay->scrollCount++; (*state)++; // fall through @@ -2864,7 +2873,7 @@ static void DestroyStdMessageWindow(void) static void FillTextEntryWindow(u16 x, u16 width, u8 fillValue) { - FillWindowPixelRect(1, fillValue, x * 8, 1, width * 8, 14); + FillWindowPixelRect(WIN_TEXT_ENTRY, fillValue, x * 8, 1, width * 8, 14); } static void DrawTextEntryMessage(u16 x, u8 *str, u8 bgColor, u8 fgColor, u8 shadowColor) @@ -2881,7 +2890,7 @@ static void DrawTextEntryMessage(u16 x, u8 *str, u8 bgColor, u8 fgColor, u8 shad strBuffer[1] = EXT_CTRL_CODE_MIN_LETTER_SPACING; strBuffer[2] = 8; StringCopy(&strBuffer[3], str); - AddTextPrinterParameterized3(1, FONT_SHORT, x * 8, 1, color, TEXT_SKIP_DRAW, strBuffer); + AddTextPrinterParameterized3(WIN_TEXT_ENTRY, FONT_SHORT, x * 8, 1, color, TEXT_SKIP_DRAW, strBuffer); } static void PrintCurrentKeyboardPage(void) @@ -2894,7 +2903,7 @@ static void PrintCurrentKeyboardPage(void) u8 str[45]; u8 *str2; - FillWindowPixelBuffer(2, PIXEL_FILL(15)); + FillWindowPixelBuffer(WIN_KEYBOARD, PIXEL_FILL(15)); page = GetCurrentKeyboardPage(); color[0] = TEXT_COLOR_TRANSPARENT; color[1] = TEXT_DYNAMIC_COLOR_5; @@ -2916,7 +2925,7 @@ static void PrintCurrentKeyboardPage(void) return; StringCopy(&str[3], sUnionRoomKeyboardText[page][i]); - AddTextPrinterParameterized3(2, FONT_SMALL, left, top, color, TEXT_SKIP_DRAW, str); + AddTextPrinterParameterized3(WIN_KEYBOARD, FONT_SMALL, left, top, color, TEXT_SKIP_DRAW, str); } } else @@ -2927,7 +2936,7 @@ static void PrintCurrentKeyboardPage(void) str2 = GetRegisteredTextByRow(i); if (GetStringWidth(FONT_SMALL, str2, 0) <= 40) { - AddTextPrinterParameterized3(2, FONT_SMALL, left, top, color, TEXT_SKIP_DRAW, str2); + AddTextPrinterParameterized3(WIN_KEYBOARD, FONT_SMALL, left, top, color, TEXT_SKIP_DRAW, str2); } else { @@ -2938,8 +2947,8 @@ static void PrintCurrentKeyboardPage(void) StringCopyN_Multibyte(str, str2, length); } while (GetStringWidth(FONT_SMALL, str, 0) > 35); - AddTextPrinterParameterized3(2, FONT_SMALL, left, top, color, TEXT_SKIP_DRAW, str); - AddTextPrinterParameterized3(2, FONT_SMALL, left + 35, top, color, TEXT_SKIP_DRAW, sText_Ellipsis); + AddTextPrinterParameterized3(WIN_KEYBOARD, FONT_SMALL, left, top, color, TEXT_SKIP_DRAW, str); + AddTextPrinterParameterized3(WIN_KEYBOARD, FONT_SMALL, left + 35, top, color, TEXT_SKIP_DRAW, sText_Ellipsis); } } } @@ -2989,17 +2998,17 @@ static bool32 SlideKeyboardPageIn(void) static void ShowKeyboardSwapMenu(void) { - FillWindowPixelBuffer(3, PIXEL_FILL(1)); - DrawTextBorderOuter(3, 1, 13); - PrintMenuActionTextsAtPos(3, FONT_SHORT, 8, 1, 14, ARRAY_COUNT(sKeyboardPageTitleTexts), sKeyboardPageTitleTexts); - InitMenuNormal(3, FONT_SHORT, 0, 1, 14, 5, GetCurrentKeyboardPage()); - PutWindowTilemap(3); + FillWindowPixelBuffer(WIN_SWAP_MENU, PIXEL_FILL(1)); + DrawTextBorderOuter(WIN_SWAP_MENU, 1, 13); + PrintMenuActionTextsAtPos(WIN_SWAP_MENU, FONT_SHORT, 8, 1, 14, ARRAY_COUNT(sKeyboardPageTitleTexts), sKeyboardPageTitleTexts); + InitMenuNormal(WIN_SWAP_MENU, FONT_SHORT, 0, 1, 14, 5, GetCurrentKeyboardPage()); + PutWindowTilemap(WIN_SWAP_MENU); } static void HideKeyboardSwapMenu(void) { - ClearStdWindowAndFrameToTransparent(3, FALSE); - ClearWindowTilemap(3); + ClearStdWindowAndFrameToTransparent(WIN_SWAP_MENU, FALSE); + ClearWindowTilemap(WIN_SWAP_MENU); } static void PrintChatMessage(u16 row, u8 *str, u8 colorIdx) @@ -3009,8 +3018,8 @@ static void PrintChatMessage(u16 row, u8 *str, u8 colorIdx) color[0] = TEXT_COLOR_WHITE; color[1] = colorIdx * 2 + 2; color[2] = colorIdx * 2 + 3; - FillWindowPixelRect(0, PIXEL_FILL(1), 0, row * 15, 168, 15); - AddTextPrinterParameterized3(0, FONT_SHORT, 0, row * 15 + 1, color, TEXT_SKIP_DRAW, str); + FillWindowPixelRect(WIN_CHAT_HISTORY, PIXEL_FILL(1), 0, row * 15, 168, 15); + AddTextPrinterParameterized3(WIN_CHAT_HISTORY, FONT_SHORT, 0, row * 15 + 1, color, TEXT_SKIP_DRAW, str); } static void ResetGpuBgState(void) @@ -3053,12 +3062,12 @@ static void ClearBg0(void) CopyBgTilemapBufferToVram(0); } -static void LoadChatWindowBorderGfx(void) +static void LoadKeyboardWindowGfx(void) { - LoadPalette(gUnionRoomChat_Window_Pal2, BG_PLTT_ID(7), PLTT_SIZE_4BPP); - LoadPalette(gUnionRoomChat_Window_Pal1, BG_PLTT_ID(12), PLTT_SIZE_4BPP); - DecompressAndCopyTileDataToVram(1, gUnionRoomChat_Border_Gfx, 0, 0, 0); - CopyToBgTilemapBuffer(1, gUnionRoomChat_Border_Tilemap, 0, 0); + LoadPalette(gUnionRoomChat_Keyboard_Pal, BG_PLTT_ID(7), PLTT_SIZE_4BPP); + LoadPalette(gUnionRoomChat_InputText_Pal, BG_PLTT_ID(12), PLTT_SIZE_4BPP); + DecompressAndCopyTileDataToVram(1, gUnionRoomChat_Keyboard_Gfx, 0, 0, 0); + CopyToBgTilemapBuffer(1, gUnionRoomChat_Keyboard_Tilemap, 0, 0); CopyBgTilemapBufferToVram(1); } @@ -3070,8 +3079,12 @@ static void LoadChatWindowGfx(void) ptr = DecompressAndCopyTileDataToVram(2, gUnionRoomChat_Background_Gfx, 0, 0, 0); if (ptr) { - CpuFastCopy(&ptr[0x220], sDisplay->unk2128, sizeof(sDisplay->unk2128)); - CpuFastCopy(&ptr[0x420], sDisplay->unk2148, sizeof(sDisplay->unk2148)); + // The below is nonsense. Tiles 0x11 and 0x21 of the background tileset are + // the second half of "OK" and the "T" in "START" in the instructions header. + // They're later blitted onto the text entry window, then immediately cleared. + // The window has a different palette as well, so the tiles would appear mostly black anyway. + CpuFastCopy(&ptr[0x11 * TILE_SIZE_4BPP], &sDisplay->textEntryTiles[TILE_SIZE_4BPP * 0], TILE_SIZE_4BPP); + CpuFastCopy(&ptr[0x21 * TILE_SIZE_4BPP], &sDisplay->textEntryTiles[TILE_SIZE_4BPP * 1], TILE_SIZE_4BPP); } CopyToBgTilemapBuffer(2, gUnionRoomChat_Background_Tilemap, 0, 0); @@ -3080,23 +3093,23 @@ static void LoadChatWindowGfx(void) static void LoadChatUnkPalette(void) { - LoadPalette(sUnk_Palette1, BG_PLTT_ID(8), sizeof(sUnk_Palette1)); - RequestDma3Fill(0, (void *)BG_CHAR_ADDR(1) + 0x20, 0x20, 1); + LoadPalette(sUnusedPalette, BG_PLTT_ID(8), sizeof(sUnusedPalette)); + RequestDma3Fill(0, (void *)BG_CHAR_ADDR(1) + TILE_SIZE_4BPP, TILE_SIZE_4BPP, 1); } static void LoadChatMessagesWindow(void) { - LoadPalette(sUnk_Palette2, BG_PLTT_ID(15), sizeof(sUnk_Palette2)); - PutWindowTilemap(0); - FillWindowPixelBuffer(0, PIXEL_FILL(1)); - CopyWindowToVram(0, COPYWIN_FULL); + LoadPalette(sChatMessagesWindow_Pal, BG_PLTT_ID(15), sizeof(sChatMessagesWindow_Pal)); + PutWindowTilemap(WIN_CHAT_HISTORY); + FillWindowPixelBuffer(WIN_CHAT_HISTORY, PIXEL_FILL(1)); + CopyWindowToVram(WIN_CHAT_HISTORY, COPYWIN_FULL); } -static void LoadKeyboardWindow(void) +static void DrawKeyboardWindow(void) { - PutWindowTilemap(2); + PutWindowTilemap(WIN_KEYBOARD); PrintCurrentKeyboardPage(); - CopyWindowToVram(2, COPYWIN_FULL); + CopyWindowToVram(WIN_KEYBOARD, COPYWIN_FULL); } static void LoadTextEntryWindow(void) @@ -3106,20 +3119,21 @@ static void LoadTextEntryWindow(void) unused[0] = 0; unused[1] = 0xFF; + // Pointless, cleared below. The tiles are nonsense anyway, see LoadChatWindowGfx. for (i = 0; i < MAX_MESSAGE_LENGTH; i++) - BlitBitmapToWindow(1, sDisplay->unk2128, i * 8, 0, 8, 16); + BlitBitmapToWindow(WIN_TEXT_ENTRY, sDisplay->textEntryTiles, i * 8, 0, 8, 16); - FillWindowPixelBuffer(1, PIXEL_FILL(0)); - PutWindowTilemap(1); - CopyWindowToVram(1, COPYWIN_FULL); + FillWindowPixelBuffer(WIN_TEXT_ENTRY, PIXEL_FILL(0)); + PutWindowTilemap(WIN_TEXT_ENTRY); + CopyWindowToVram(WIN_TEXT_ENTRY, COPYWIN_FULL); } static void LoadKeyboardSwapWindow(void) { - FillWindowPixelBuffer(3, PIXEL_FILL(1)); - LoadUserWindowBorderGfx(3, 1, BG_PLTT_ID(13)); - LoadUserWindowBorderGfx_(3, 0xA, BG_PLTT_ID(2)); - LoadPalette(gStandardMenuPalette, BG_PLTT_ID(14), PLTT_SIZE_4BPP); + FillWindowPixelBuffer(WIN_SWAP_MENU, PIXEL_FILL(1)); + LoadUserWindowBorderGfx(WIN_SWAP_MENU, 1, BG_PLTT_ID(13)); + LoadUserWindowBorderGfx_(WIN_SWAP_MENU, 0xA, BG_PLTT_ID(2)); + LoadPalette(gStandardMenuPalette, BG_PLTT_ID(14), PLTT_SIZE_4BPP); } static void InitScanlineEffect(void) From 896b575c07171c76c3a146f369447f836f47cca2 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Wed, 8 Feb 2023 12:42:38 +0100 Subject: [PATCH 041/428] Fix volt switch breaking ace pokemon --- data/battle_scripts_1.s | 2 +- include/battle.h | 1 + src/battle_ai_switch_items.c | 90 +++++++++++++++++++++++------------- src/battle_script_commands.c | 3 ++ src/data/trainer_parties.h | 32 +++++++++++-- src/data/trainers.h | 4 +- 6 files changed, 92 insertions(+), 40 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 25386dbf01f2..a707d7bcea3b 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -3055,7 +3055,7 @@ BattleScript_EffectHitEscape: jumpifbyte CMP_NOT_EQUAL gBattleOutcome 0, BattleScript_HitEscapeEnd jumpifbattletype BATTLE_TYPE_ARENA, BattleScript_HitEscapeEnd jumpifcantswitch SWITCH_IGNORE_ESCAPE_PREVENTION | BS_ATTACKER, BattleScript_HitEscapeEnd - jumpifemergencyexited BS_TARGET, BattleScript_HitEscapeEnd + jumpifemergencyexited BS_TARGET, BattleScript_HitEscapeEnd openpartyscreen BS_ATTACKER, BattleScript_HitEscapeEnd switchoutabilities BS_ATTACKER waitstate diff --git a/include/battle.h b/include/battle.h index 79413441c8a4..cfeec466397c 100644 --- a/include/battle.h +++ b/include/battle.h @@ -643,6 +643,7 @@ struct BattleStruct struct StolenItem itemStolen[PARTY_SIZE]; // Player's team that had items stolen (two bytes per party member) u8 blunderPolicy:1; // should blunder policy activate u8 swapDamageCategory:1; // Photon Geyser, Shell Side Arm, Light That Burns the Sky + u8 forcedSwitch:4; // For each battler u8 ballSpriteIds[2]; // item gfx, window gfx u8 stickyWebUser; u8 appearedInBattle; // Bitfield to track which Pokemon appeared in battle. Used for Burmy's form change diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index 5bcd17716e4f..f976b47e3e90 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -27,6 +27,15 @@ static bool32 AiExpectsToFaintPlayer(void); static bool32 AI_ShouldHeal(u32 healAmount); static bool32 AI_OpponentCanFaintAiWithMod(u32 healAmount); +static bool32 isAceMon(u32 battlerId, u32 monPartyId) +{ + if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_ACE_POKEMON + && !(gBattleStruct->forcedSwitch) + && monPartyId == CalculateEnemyPartyCount()-1) + return TRUE; + return FALSE; +} + void GetAIPartyIndexes(u32 battlerId, s32 *firstId, s32 *lastId) { if (BATTLE_TWO_VS_ONE_OPPONENT && (battlerId & BIT_SIDE) == B_SIDE_OPPONENT) @@ -109,8 +118,7 @@ static bool8 ShouldSwitchIfWonderGuard(void) continue; if (i == gBattlerPartyIndexes[gActiveBattler]) continue; - if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_ACE_POKEMON - && i == (CalculateEnemyPartyCount()-1)) + if (isAceMon(gActiveBattler, i)) continue; for (opposingBattler = GetBattlerAtPosition(opposingPosition), j = 0; j < MAX_MON_MOVES; j++) @@ -202,10 +210,9 @@ static bool8 FindMonThatAbsorbsOpponentsMove(void) continue; if (i == *(gBattleStruct->monToSwitchIntoId + battlerIn2)) continue; - if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_ACE_POKEMON - && i == (CalculateEnemyPartyCount()-1)) + if (isAceMon(gActiveBattler, i)) continue; - + species = GetMonData(&party[i], MON_DATA_SPECIES); if (GetMonData(&party[i], MON_DATA_ABILITY_NUM) != 0) @@ -267,7 +274,7 @@ static bool8 ShouldSwitchIfGameStatePrompt(void) ) switchMon = FALSE; - if (IsBattlerAlive(BATTLE_PARTNER(gActiveBattler)) + if (IsBattlerAlive(BATTLE_PARTNER(gActiveBattler)) && (gBattleMoves[AI_DATA->partnerMove].effect == EFFECT_MISTY_TERRAIN || gBattleMoves[AI_DATA->partnerMove].effect == EFFECT_ELECTRIC_TERRAIN) && IsBattlerGrounded(gActiveBattler) @@ -277,15 +284,14 @@ static bool8 ShouldSwitchIfGameStatePrompt(void) if (*(gBattleStruct->AI_monToSwitchIntoId + BATTLE_PARTNER(gActiveBattler)) != PARTY_SIZE) //Partner is switching { GetAIPartyIndexes(gActiveBattler, &firstId, &lastId); - + if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) party = gPlayerParty; - + for (i = firstId; i < lastId; i++) { - if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_ACE_POKEMON - && i == (CalculateEnemyPartyCount()-1)) - break; + if (isAceMon(gActiveBattler, i)) + continue; //Look for mon in party that is able to be switched into and has ability that sets terrain if (GetMonData(&party[i], MON_DATA_HP) != 0 @@ -305,7 +311,7 @@ static bool8 ShouldSwitchIfGameStatePrompt(void) } } } - + //Check if Active Pokemon can KO opponent instead of switching //Will still fall asleep, but take out opposing Pokemon first if (AiExpectsToFaintPlayer()) @@ -328,7 +334,7 @@ static bool8 ShouldSwitchIfGameStatePrompt(void) && AI_DATA->abilities[opposingBattler] != ABILITY_UNAWARE && AI_DATA->abilities[opposingBattler] != ABILITY_KEEN_EYE && !(gBattleMons[gActiveBattler].status2 & STATUS2_FORESIGHT) - && !(gStatuses3[gActiveBattler] & STATUS3_MIRACLE_EYED)) + && !(gStatuses3[gActiveBattler] & STATUS3_MIRACLE_EYED)) switchMon = FALSE; } @@ -343,7 +349,7 @@ static bool8 ShouldSwitchIfGameStatePrompt(void) && gBattleMons[gActiveBattler].hp >= (gBattleMons[gActiveBattler].maxHP / 3) && (Random() % (moduloChance*chanceReducer)) == 0) switchMon = TRUE; - + //Cursed moduloChance = 2; //50% if (gBattleMons[gActiveBattler].status2 & STATUS2_CURSED @@ -370,7 +376,7 @@ static bool8 ShouldSwitchIfGameStatePrompt(void) //Todo //Pass Wish Heal - + //Semi-Invulnerable if (gStatuses3[opposingBattler] & STATUS3_SEMI_INVULNERABLE) { @@ -416,7 +422,7 @@ static bool8 ShouldSwitchIfAbilityBenefit(void) switch(AI_DATA->abilities[gActiveBattler]) { case ABILITY_NATURAL_CURE: moduloChance = 4; //25% - //Attempt to cure bad ailment + //Attempt to cure bad ailment if (gBattleMons[gActiveBattler].status1 & (STATUS1_SLEEP | STATUS1_FREEZE | STATUS1_TOXIC_POISON) && GetMostSuitableMonToSwitchInto() != PARTY_SIZE) break; @@ -432,17 +438,17 @@ static bool8 ShouldSwitchIfAbilityBenefit(void) case ABILITY_REGENERATOR: moduloChance = 2; //50% //Don't switch if ailment - if (gBattleMons[gActiveBattler].status1 & STATUS1_ANY) - return FALSE; + if (gBattleMons[gActiveBattler].status1 & STATUS1_ANY) + return FALSE; if ((gBattleMons[gActiveBattler].hp <= ((gBattleMons[gActiveBattler].maxHP * 2) / 3)) && GetMostSuitableMonToSwitchInto() != PARTY_SIZE && Random() % (moduloChance*chanceReducer) == 0) break; - + return FALSE; default: - return FALSE; + return FALSE; } *(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) = PARTY_SIZE; @@ -576,8 +582,7 @@ static bool8 FindMonWithFlagsAndSuperEffective(u16 flags, u8 moduloPercent) continue; if (i == *(gBattleStruct->monToSwitchIntoId + battlerIn2)) continue; - if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_ACE_POKEMON - && i == (CalculateEnemyPartyCount()-1)) + if (isAceMon(gActiveBattler, i)) continue; @@ -619,6 +624,7 @@ bool32 ShouldSwitch(void) struct Pokemon *party; s32 i; s32 availableToSwitch; + bool32 hasAceMon = FALSE; if (gBattleMons[gActiveBattler].status2 & (STATUS2_WRAPPED | STATUS2_ESCAPE_PREVENTION)) return FALSE; @@ -668,15 +674,22 @@ bool32 ShouldSwitch(void) continue; if (i == *(gBattleStruct->monToSwitchIntoId + battlerIn2)) continue; - if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_ACE_POKEMON - && i == (CalculateEnemyPartyCount()-1)) + if (isAceMon(gActiveBattler, i)) + { + hasAceMon = TRUE; continue; + } availableToSwitch++; } if (availableToSwitch == 0) - return FALSE; + { + if (hasAceMon) // If the ace mon is the only available mon, use it + availableToSwitch++; + else + return FALSE; + } //NOTE: The sequence of the below functions matter! Do not change unless you have carefully considered the outcome. //Since the order is sequencial, and some of these functions prompt switch to specific party members. @@ -694,14 +707,14 @@ bool32 ShouldSwitch(void) return TRUE; if (ShouldSwitchIfAbilityBenefit()) return TRUE; - + //Removing switch capabilites under specific conditions //These Functions prevent the "FindMonWithFlagsAndSuperEffective" from getting out of hand. if (HasSuperEffectiveMoveAgainstOpponents(FALSE)) return FALSE; if (AreStatsRaised()) return FALSE; - + //Default Function //Can prompt switch if AI has a pokemon in party that resists current opponent & has super effective move if (FindMonWithFlagsAndSuperEffective(MOVE_RESULT_DOESNT_AFFECT_FOE, 2) @@ -758,8 +771,7 @@ void AI_TrySwitchOrUseItem(void) continue; if (monToSwitchId == *(gBattleStruct->monToSwitchIntoId + battlerIn2)) continue; - if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_ACE_POKEMON - && monToSwitchId == (CalculateEnemyPartyCount()-1)) + if (isAceMon(gActiveBattler, monToSwitchId)) continue; break; @@ -916,7 +928,7 @@ u8 GetMostSuitableMonToSwitchInto(void) s32 lastId = 0; // + 1 struct Pokemon *party; s32 i, j, aliveCount = 0; - u8 invalidMons = 0; + u32 invalidMons = 0, aceMonId = PARTY_SIZE; if (*(gBattleStruct->monToSwitchIntoId + gActiveBattler) != PARTY_SIZE) return *(gBattleStruct->monToSwitchIntoId + gActiveBattler); @@ -958,12 +970,19 @@ u8 GetMostSuitableMonToSwitchInto(void) || gBattlerPartyIndexes[battlerIn2] == i || i == *(gBattleStruct->monToSwitchIntoId + battlerIn1) || i == *(gBattleStruct->monToSwitchIntoId + battlerIn2) - || (GetMonAbility(&party[i]) == ABILITY_TRUANT && IsTruantMonVulnerable(gActiveBattler, opposingBattler)) // While not really invalid per say, not really wise to switch into this mon. - || ((AI_THINKING_STRUCT->aiFlags & AI_FLAG_ACE_POKEMON) - && i == (CalculateEnemyPartyCount() - 1))) //Save Ace Pokemon for last + || (GetMonAbility(&party[i]) == ABILITY_TRUANT && IsTruantMonVulnerable(gActiveBattler, opposingBattler))) // While not really invalid per say, not really wise to switch into this mon.) + { + invalidMons |= gBitTable[i]; + } + else if (isAceMon(gActiveBattler, i))// Save Ace Pokemon for last. + { + aceMonId = i; invalidMons |= gBitTable[i]; + } else + { aliveCount++; + } } bestMonId = GetBestMonBatonPass(party, firstId, lastId, invalidMons, aliveCount); @@ -978,6 +997,11 @@ u8 GetMostSuitableMonToSwitchInto(void) if (bestMonId != PARTY_SIZE) return bestMonId; + // If ace mon is the last available Pokemon and U-Turn/Volt Switch was used - switch to the mon. + if (aceMonId != PARTY_SIZE + && (gBattleMoves[gLastUsedMove].effect == EFFECT_HIT_ESCAPE || gBattleMoves[gLastUsedMove].effect == EFFECT_PARTING_SHOT)) + return aceMonId; + return PARTY_SIZE; } diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index be5e2ee215df..0e447bbfc826 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -6844,6 +6844,7 @@ static void Cmd_switchineffects(void) gBattlerFainted++; } } + gBattleStruct->forcedSwitch &= ~(gBitTable[gActiveBattler]); gBattlescriptCurrInstr += 2; } } @@ -11410,6 +11411,8 @@ static void Cmd_forcerandomswitch(void) *(gBattleStruct->battlerPartyIndexes + gBattlerTarget) = gBattlerPartyIndexes[gBattlerTarget]; gBattlescriptCurrInstr = BattleScript_RoarSuccessSwitch; + gBattleStruct->forcedSwitch |= gBitTable[gBattlerTarget]; + do { i = Random() % monsCount; diff --git a/src/data/trainer_parties.h b/src/data/trainer_parties.h index 1759120b7f3c..d04d25009035 100644 --- a/src/data/trainer_parties.h +++ b/src/data/trainer_parties.h @@ -1706,12 +1706,36 @@ static const struct TrainerMonNoItemCustomMoves sParty_Jessica5[] = { } }; -static const struct TrainerMonItemDefaultMoves sParty_Winston1[] = { +static const struct TrainerMonItemCustomMoves sParty_Winston1[] = { { .iv = 0, - .lvl = 7, - .species = SPECIES_ZIGZAGOON, - .heldItem = ITEM_NUGGET + .lvl = 10, + .species = SPECIES_EMOLGA, + .heldItem = ITEM_NONE, + .moves = {MOVE_VOLT_SWITCH, MOVE_NONE, MOVE_NONE, MOVE_NONE}, + }, + /* + { + .iv = 0, + .lvl = 4, + .species = SPECIES_ABRA, + .heldItem = ITEM_NONE, + .moves = {MOVE_VOLT_SWITCH, MOVE_NONE, MOVE_NONE, MOVE_NONE}, + }, + { + .iv = 0, + .lvl = 8, + .species = SPECIES_KADABRA, + .heldItem = ITEM_NONE, + .moves = {MOVE_VOLT_SWITCH, MOVE_NONE, MOVE_NONE, MOVE_NONE}, + }, + */ + { + .iv = 250, + .lvl = 24, + .species = SPECIES_ZEBSTRIKA, + .heldItem = ITEM_SITRUS_BERRY, + .moves = {MOVE_VOLT_SWITCH, MOVE_VOLT_SWITCH, MOVE_VOLT_SWITCH, MOVE_VOLT_SWITCH}, } }; diff --git a/src/data/trainers.h b/src/data/trainers.h index 75f7edc8b787..6ffdee13aebd 100644 --- a/src/data/trainers.h +++ b/src/data/trainers.h @@ -1641,8 +1641,8 @@ const struct Trainer gTrainers[] = { .trainerName = _("WINSTON"), .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = ITEM_DEFAULT_MOVES(sParty_Winston1), + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_ACE_POKEMON, + .party = ITEM_CUSTOM_MOVES(sParty_Winston1), }, [TRAINER_MOLLIE] = From 84d7024add9a0e7e21896dea61b87ad9a3768f95 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Wed, 8 Feb 2023 12:48:48 +0100 Subject: [PATCH 042/428] cleanup --- src/data/trainer_parties.h | 32 ++++---------------------------- src/data/trainers.h | 4 ++-- 2 files changed, 6 insertions(+), 30 deletions(-) diff --git a/src/data/trainer_parties.h b/src/data/trainer_parties.h index d04d25009035..1759120b7f3c 100644 --- a/src/data/trainer_parties.h +++ b/src/data/trainer_parties.h @@ -1706,36 +1706,12 @@ static const struct TrainerMonNoItemCustomMoves sParty_Jessica5[] = { } }; -static const struct TrainerMonItemCustomMoves sParty_Winston1[] = { +static const struct TrainerMonItemDefaultMoves sParty_Winston1[] = { { .iv = 0, - .lvl = 10, - .species = SPECIES_EMOLGA, - .heldItem = ITEM_NONE, - .moves = {MOVE_VOLT_SWITCH, MOVE_NONE, MOVE_NONE, MOVE_NONE}, - }, - /* - { - .iv = 0, - .lvl = 4, - .species = SPECIES_ABRA, - .heldItem = ITEM_NONE, - .moves = {MOVE_VOLT_SWITCH, MOVE_NONE, MOVE_NONE, MOVE_NONE}, - }, - { - .iv = 0, - .lvl = 8, - .species = SPECIES_KADABRA, - .heldItem = ITEM_NONE, - .moves = {MOVE_VOLT_SWITCH, MOVE_NONE, MOVE_NONE, MOVE_NONE}, - }, - */ - { - .iv = 250, - .lvl = 24, - .species = SPECIES_ZEBSTRIKA, - .heldItem = ITEM_SITRUS_BERRY, - .moves = {MOVE_VOLT_SWITCH, MOVE_VOLT_SWITCH, MOVE_VOLT_SWITCH, MOVE_VOLT_SWITCH}, + .lvl = 7, + .species = SPECIES_ZIGZAGOON, + .heldItem = ITEM_NUGGET } }; diff --git a/src/data/trainers.h b/src/data/trainers.h index 6ffdee13aebd..75f7edc8b787 100644 --- a/src/data/trainers.h +++ b/src/data/trainers.h @@ -1641,8 +1641,8 @@ const struct Trainer gTrainers[] = { .trainerName = _("WINSTON"), .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_ACE_POKEMON, - .party = ITEM_CUSTOM_MOVES(sParty_Winston1), + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = ITEM_DEFAULT_MOVES(sParty_Winston1), }, [TRAINER_MOLLIE] = From db5edc49d76eaf0e67c0d80e34feb8f6f1f7e37c Mon Sep 17 00:00:00 2001 From: GriffinR Date: Wed, 8 Feb 2023 12:10:17 -0500 Subject: [PATCH 043/428] Sync mapjson --- tools/mapjson/mapjson.cpp | 140 +++++++++++++++++++++++++------------- 1 file changed, 92 insertions(+), 48 deletions(-) diff --git a/tools/mapjson/mapjson.cpp b/tools/mapjson/mapjson.cpp index 1a3058f3da1c..0f2f4f5bb6be 100644 --- a/tools/mapjson/mapjson.cpp +++ b/tools/mapjson/mapjson.cpp @@ -29,6 +29,7 @@ using json11::Json; #include "mapjson.h" +string version; string read_text_file(string filepath) { ifstream in_file(filepath); @@ -61,7 +62,7 @@ void write_text_file(string filepath, string text) { } -string json_to_string(const Json &data, const string &field = "") { +string json_to_string(const Json &data, const string &field = "", bool silent = false) { const Json value = !field.empty() ? data[field] : data; string output = ""; switch (value.type()) { @@ -75,12 +76,14 @@ string json_to_string(const Json &data, const string &field = "") { output = value.bool_value() ? "TRUE" : "FALSE"; break; default:{ - string s = !field.empty() ? ("Value for '" + field + "'") : "JSON field"; - FATAL_ERROR("%s is unexpected type; expected string, number, or bool.\n", s.c_str()); + if (!silent) { + string s = !field.empty() ? ("Value for '" + field + "'") : "JSON field"; + FATAL_ERROR("%s is unexpected type; expected string, number, or bool.\n", s.c_str()); + } } } - if (output.empty()){ + if (!silent && output.empty()) { string s = !field.empty() ? ("Value for '" + field + "'") : "JSON field"; FATAL_ERROR("%s cannot be empty.\n", s.c_str()); } @@ -88,14 +91,14 @@ string json_to_string(const Json &data, const string &field = "") { return output; } -string generate_map_header_text(Json map_data, Json layouts_data, string version) { +string generate_map_header_text(Json map_data, Json layouts_data) { string map_layout_id = json_to_string(map_data, "layout"); vector matched; - for (auto &field : layouts_data["layouts"].array_items()) { - if (map_layout_id == json_to_string(field, "id")) - matched.push_back(field); + for (auto &layout : layouts_data["layouts"].array_items()) { + if (map_layout_id == json_to_string(layout, "id", true)) + matched.push_back(layout); } if (matched.size() != 1) @@ -123,28 +126,33 @@ string generate_map_header_text(Json map_data, Json layouts_data, string version text << "\t.4byte " << mapName << "_MapScripts\n"; if (map_data.object_items().find("connections") != map_data.object_items().end() - && map_data["connections"].array_items().size() > 0) + && map_data["connections"].array_items().size() > 0 && json_to_string(map_data, "connections_no_include", true) != "TRUE") text << "\t.4byte " << mapName << "_MapConnections\n"; else - text << "\t.4byte 0x0\n"; + text << "\t.4byte NULL\n"; text << "\t.2byte " << json_to_string(map_data, "music") << "\n" << "\t.2byte " << json_to_string(layout, "id") << "\n" << "\t.byte " << json_to_string(map_data, "region_map_section") << "\n" << "\t.byte " << json_to_string(map_data, "requires_flash") << "\n" << "\t.byte " << json_to_string(map_data, "weather") << "\n" - << "\t.byte " << json_to_string(map_data, "map_type") << "\n" - << "\t.2byte 0\n"; + << "\t.byte " << json_to_string(map_data, "map_type") << "\n"; + + if (version != "firered") + text << "\t.2byte 0\n"; if (version == "ruby") text << "\t.byte " << json_to_string(map_data, "show_map_name") << "\n"; - else if (version == "emerald") + else if (version == "emerald" || version == "firered") text << "\tmap_header_flags " << "allow_cycling=" << json_to_string(map_data, "allow_cycling") << ", " << "allow_escaping=" << json_to_string(map_data, "allow_escaping") << ", " << "allow_running=" << json_to_string(map_data, "allow_running") << ", " << "show_map_name=" << json_to_string(map_data, "show_map_name") << "\n"; + if (version == "firered") + text << "\t.byte " << json_to_string(map_data, "floor_number") << "\n"; + text << "\t.byte " << json_to_string(map_data, "battle_scene") << "\n\n"; return text.str(); @@ -193,22 +201,34 @@ string generate_map_events_text(Json map_data) { text << objects_label << ":\n"; for (unsigned int i = 0; i < map_data["object_events"].array_items().size(); i++) { auto obj_event = map_data["object_events"].array_items()[i]; - text << "\tobject_event " << i + 1 << ", " - << json_to_string(obj_event, "graphics_id") << ", 0, " - << json_to_string(obj_event, "x") << ", " - << json_to_string(obj_event, "y") << ", " - << json_to_string(obj_event, "elevation") << ", " - << json_to_string(obj_event, "movement_type") << ", " - << json_to_string(obj_event, "movement_range_x") << ", " - << json_to_string(obj_event, "movement_range_y") << ", " - << json_to_string(obj_event, "trainer_type") << ", " - << json_to_string(obj_event, "trainer_sight_or_berry_tree_id") << ", " - << json_to_string(obj_event, "script") << ", " - << json_to_string(obj_event, "flag") << "\n"; + string type = json_to_string(obj_event, "type", true); + + // If no type field is present, assume it's a regular object event. + if (type == "" || type == "object") { + text << "\tobject_event " << i + 1 << ", " + << json_to_string(obj_event, "graphics_id") << ", 0, " + << json_to_string(obj_event, "x") << ", " + << json_to_string(obj_event, "y") << ", " + << json_to_string(obj_event, "elevation") << ", " + << json_to_string(obj_event, "movement_type") << ", " + << json_to_string(obj_event, "movement_range_x") << ", " + << json_to_string(obj_event, "movement_range_y") << ", " + << json_to_string(obj_event, "trainer_type") << ", " + << json_to_string(obj_event, "trainer_sight_or_berry_tree_id") << ", " + << json_to_string(obj_event, "script") << ", " + << json_to_string(obj_event, "flag") << "\n"; + } else if (type == "clone") { + text << "\tclone_event " << i + 1 << ", " + << json_to_string(obj_event, "graphics_id") << ", " + << json_to_string(obj_event, "x") << ", " + << json_to_string(obj_event, "y") << ", " + << json_to_string(obj_event, "target_local_id") << ", " + << json_to_string(obj_event, "target_map") << "\n"; + } } text << "\n"; } else { - objects_label = "0x0"; + objects_label = "NULL"; } if (map_data["warp_events"].array_items().size() > 0) { @@ -224,14 +244,15 @@ string generate_map_events_text(Json map_data) { } text << "\n"; } else { - warps_label = "0x0"; + warps_label = "NULL"; } if (map_data["coord_events"].array_items().size() > 0) { coords_label = mapName + "_MapCoordEvents"; text << coords_label << ":\n"; for (auto &coord_event : map_data["coord_events"].array_items()) { - if (json_to_string(coord_event, "type") == "trigger") { + string type = json_to_string(coord_event, "type"); + if (type == "trigger") { text << "\tcoord_event " << json_to_string(coord_event, "x") << ", " << json_to_string(coord_event, "y") << ", " @@ -240,7 +261,7 @@ string generate_map_events_text(Json map_data) { << json_to_string(coord_event, "var_value") << ", " << json_to_string(coord_event, "script") << "\n"; } - else if (coord_event["type"] == "weather") { + else if (type == "weather") { text << "\tcoord_weather_event " << json_to_string(coord_event, "x") << ", " << json_to_string(coord_event, "y") << ", " @@ -250,14 +271,15 @@ string generate_map_events_text(Json map_data) { } text << "\n"; } else { - coords_label = "0x0"; + coords_label = "NULL"; } if (map_data["bg_events"].array_items().size() > 0) { bgs_label = mapName + "_MapBGEvents"; text << bgs_label << ":\n"; for (auto &bg_event : map_data["bg_events"].array_items()) { - if (bg_event["type"] == "sign") { + string type = json_to_string(bg_event, "type"); + if (type == "sign") { text << "\tbg_sign_event " << json_to_string(bg_event, "x") << ", " << json_to_string(bg_event, "y") << ", " @@ -265,15 +287,21 @@ string generate_map_events_text(Json map_data) { << json_to_string(bg_event, "player_facing_dir") << ", " << json_to_string(bg_event, "script") << "\n"; } - else if (bg_event["type"] == "hidden_item") { + else if (type == "hidden_item") { text << "\tbg_hidden_item_event " << json_to_string(bg_event, "x") << ", " << json_to_string(bg_event, "y") << ", " << json_to_string(bg_event, "elevation") << ", " << json_to_string(bg_event, "item") << ", " - << json_to_string(bg_event, "flag") << "\n"; + << json_to_string(bg_event, "flag"); + if (version == "firered") { + text << ", " + << json_to_string(bg_event, "quantity") << ", " + << json_to_string(bg_event, "underfoot"); + } + text << "\n"; } - else if (bg_event["type"] == "secret_base") { + else if (type == "secret_base") { text << "\tbg_secret_base_event " << json_to_string(bg_event, "x") << ", " << json_to_string(bg_event, "y") << ", " @@ -283,7 +311,7 @@ string generate_map_events_text(Json map_data) { } text << "\n"; } else { - bgs_label = "0x0"; + bgs_label = "NULL"; } text << mapName << "_MapEvents::\n" @@ -299,7 +327,7 @@ string get_directory_name(string filename) { return filename.substr(0, dir_pos + 1); } -void process_map(string map_filepath, string layouts_filepath, string version) { +void process_map(string map_filepath, string layouts_filepath) { string mapdata_err, layouts_err; string mapdata_json_text = read_text_file(map_filepath); @@ -313,7 +341,7 @@ void process_map(string map_filepath, string layouts_filepath, string version) { if (layouts_data == Json()) FATAL_ERROR("%s\n", layouts_err.c_str()); - string header_text = generate_map_header_text(map_data, layouts_data, version); + string header_text = generate_map_header_text(map_data, layouts_data); string events_text = generate_map_events_text(map_data); string connections_text = generate_map_connections_text(map_data); @@ -337,7 +365,10 @@ string generate_groups_text(Json groups_data) { text << "\n"; } - text << "\t.align 2\n" << "gMapGroups::\n"; + if (version != "firered") + text << "\t.align 2\n"; + + text << "gMapGroups::\n"; for (auto &group : groups_data["group_order"].array_items()) text << "\t.4byte " << json_to_string(group) << "\n"; text << "\n"; @@ -484,6 +515,7 @@ string generate_layout_headers_text(Json layouts_data) { text << "@\n@ DO NOT MODIFY THIS FILE! It is auto-generated from data/layouts/layouts.json\n@\n\n"; for (auto &layout : layouts_data["layouts"].array_items()) { + if (layout == Json::object()) continue; string layoutName = json_to_string(layout, "name"); string border_label = layoutName + "_Border"; string blockdata_label = layoutName + "_Blockdata"; @@ -498,7 +530,13 @@ string generate_layout_headers_text(Json layouts_data) { << "\t.4byte " << border_label << "\n" << "\t.4byte " << blockdata_label << "\n" << "\t.4byte " << json_to_string(layout, "primary_tileset") << "\n" - << "\t.4byte " << json_to_string(layout, "secondary_tileset") << "\n\n"; + << "\t.4byte " << json_to_string(layout, "secondary_tileset") << "\n"; + if (version == "firered") { + text << "\t.byte " << json_to_string(layout, "border_width") << "\n" + << "\t.byte " << json_to_string(layout, "border_height") << "\n" + << "\t.2byte 0\n"; + } + text << "\n"; } return text.str(); @@ -512,8 +550,11 @@ string generate_layouts_table_text(Json layouts_data) { text << "\t.align 2\n" << json_to_string(layouts_data, "layouts_table_label") << "::\n"; - for (auto &layout : layouts_data["layouts"].array_items()) - text << "\t.4byte " << json_to_string(layout, "name") << "\n"; + for (auto &layout : layouts_data["layouts"].array_items()) { + string layout_name = json_to_string(layout, "name", true); + if (layout_name.empty()) layout_name = "NULL"; + text << "\t.4byte " << layout_name << "\n"; + } return text.str(); } @@ -526,9 +567,12 @@ string generate_layouts_constants_text(Json layouts_data) { text << "//\n// DO NOT MODIFY THIS FILE! It is auto-generated from data/layouts/layouts.json\n//\n\n"; - int i = 0; - for (auto &layout : layouts_data["layouts"].array_items()) - text << "#define " << json_to_string(layout, "id") << " " << ++i << "\n"; + int i = 1; + for (auto &layout : layouts_data["layouts"].array_items()) { + if (layout != Json::object()) + text << "#define " << json_to_string(layout, "id") << " " << i << "\n"; + i++; + } text << "\n#endif // GUARD_CONSTANTS_LAYOUTS_H\n"; @@ -559,9 +603,9 @@ int main(int argc, char *argv[]) { FATAL_ERROR("USAGE: mapjson [options]\n"); char *version_arg = argv[2]; - string version(version_arg); - if (version != "emerald" && version != "ruby") - FATAL_ERROR("ERROR: must be 'emerald' or 'ruby'.\n"); + version = string(version_arg); + if (version != "emerald" && version != "ruby" && version != "firered") + FATAL_ERROR("ERROR: must be 'emerald', 'firered', or 'ruby'.\n"); char *mode_arg = argv[1]; string mode(mode_arg); @@ -575,7 +619,7 @@ int main(int argc, char *argv[]) { string filepath(argv[3]); string layouts_filepath(argv[4]); - process_map(filepath, layouts_filepath, version); + process_map(filepath, layouts_filepath); } else if (mode == "groups") { if (argc != 4) From 118a9701c94730a563afe271a3502800464cc771 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Wed, 8 Feb 2023 12:52:28 -0500 Subject: [PATCH 044/428] Add event type errors --- tools/mapjson/mapjson.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tools/mapjson/mapjson.cpp b/tools/mapjson/mapjson.cpp index 0f2f4f5bb6be..10283eb08bc9 100644 --- a/tools/mapjson/mapjson.cpp +++ b/tools/mapjson/mapjson.cpp @@ -224,6 +224,8 @@ string generate_map_events_text(Json map_data) { << json_to_string(obj_event, "y") << ", " << json_to_string(obj_event, "target_local_id") << ", " << json_to_string(obj_event, "target_map") << "\n"; + } else { + FATAL_ERROR("Unknown object event type '%s'. Expected 'object' or 'clone'.\n", type.c_str()); } } text << "\n"; @@ -267,6 +269,8 @@ string generate_map_events_text(Json map_data) { << json_to_string(coord_event, "y") << ", " << json_to_string(coord_event, "elevation") << ", " << json_to_string(coord_event, "weather") << "\n"; + } else { + FATAL_ERROR("Unknown coord event type '%s'. Expected 'trigger' or 'weather'.\n", type.c_str()); } } text << "\n"; @@ -307,6 +311,8 @@ string generate_map_events_text(Json map_data) { << json_to_string(bg_event, "y") << ", " << json_to_string(bg_event, "elevation") << ", " << json_to_string(bg_event, "secret_base_id") << "\n"; + } else { + FATAL_ERROR("Unknown bg event type '%s'. Expected 'sign', 'hidden_item', or 'secret_base'.\n", type.c_str()); } } text << "\n"; From de56e400ffd5791fd6975323295a7bce642bed80 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Wed, 8 Feb 2023 13:11:10 -0500 Subject: [PATCH 045/428] Sync clone object macro --- asm/macros/map.inc | 28 ++++++++++++++++++++++------ include/constants/event_objects.h | 3 +++ include/global.fieldmap.h | 2 +- src/event_object_movement.c | 2 +- tools/mapjson/mapjson.cpp | 2 +- 5 files changed, 28 insertions(+), 9 deletions(-) diff --git a/asm/macros/map.inc b/asm/macros/map.inc index 662257e41694..21445138dec0 100644 --- a/asm/macros/map.inc +++ b/asm/macros/map.inc @@ -19,11 +19,11 @@ .4byte \script .endm - @ Defines an object event template for map data. Mirrors the struct layout of ObjectEventTemplate in include/global.fieldmap.h - .macro object_event index:req, gfx:req, inConnection:req, x:req, y:req, elevation:req, movement_type:req, x_radius:req, y_radius:req, trainer_type:req, sight_radius_tree_etc:req, script:req, event_flag:req + @ Defines an object event template for map data, to be used by a normal object. Mirrors the struct layout of ObjectEventTemplate in include/global.fieldmap.h + .macro object_event index:req, gfx:req, x:req, y:req, elevation:req, movement_type:req, x_radius:req, y_radius:req, trainer_type:req, sight_radius_tree_etc:req, script:req, event_flag:req .byte \index .byte \gfx - .byte \inConnection + .byte OBJ_KIND_NORMAL .space 1 @ Padding .2byte \x, \y .byte \elevation @@ -38,6 +38,22 @@ inc _num_npcs .endm + @ Defines an object event template for map data, to be used by a clone object. Mirrors the struct layout of ObjectEventTemplate in include/global.fieldmap.h + @ NOTE: The handling for this type of event does not exist in Emerald by default; it is exclusive to FRLG. + .macro clone_event index:req, gfx:req, x:req, y:req, target_local_id:req, target_map_id:req + .byte \index + .byte \gfx + .byte OBJ_KIND_CLONE + .space 1 @ Padding + .2byte \x, \y + .byte \target_local_id + .space 3 @ Padding + .2byte \target_map_id & 0xFF @ map num + .2byte \target_map_id >> 8 @ map group + .space 8 @ Padding + inc _num_npcs + .endm + @ Defines a warp event for map data. Mirrors the struct layout of WarpEvent in include/global.fieldmap.h .macro warp_def x:req, y:req, elevation:req, warpId:req, map_id:req .2byte \x, \y @@ -49,12 +65,12 @@ .endm @ Defines a coord event for map data. Mirrors the struct layout of CoordEvent in include/global.fieldmap.h - .macro coord_event x:req, y:req, elevation:req, trigger:req, index:req, script:req + .macro coord_event x:req, y:req, elevation:req, var:req, varValue:req, script:req .2byte \x, \y .byte \elevation .space 1 @ Padding - .2byte \trigger - .2byte \index + .2byte \var + .2byte \varValue .space 2 @ Padding .4byte \script inc _num_traps diff --git a/include/constants/event_objects.h b/include/constants/event_objects.h index 8278c6a66bde..c8fa942655a6 100644 --- a/include/constants/event_objects.h +++ b/include/constants/event_objects.h @@ -288,6 +288,9 @@ #define FIRST_DECORATION_SPRITE_GFX OBJ_EVENT_GFX_PICHU_DOLL +#define OBJ_KIND_NORMAL 0 +#define OBJ_KIND_CLONE 255 // Exclusive to FRLG + // Special object event local ids #define OBJ_EVENT_ID_PLAYER 0xFF #define OBJ_EVENT_ID_CAMERA 0x7F diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h index 26e5c44bf130..d8fea5b23c4d 100644 --- a/include/global.fieldmap.h +++ b/include/global.fieldmap.h @@ -67,7 +67,7 @@ struct ObjectEventTemplate { /*0x00*/ u8 localId; /*0x01*/ u8 graphicsId; - /*0x02*/ u8 inConnection; // Leftover from FRLG + /*0x02*/ u8 kind; // Always OBJ_KIND_NORMAL in Emerald. /*0x03*/ //u8 padding1; /*0x04*/ s16 x; /*0x06*/ s16 y; diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 870f55081fa2..be0c4ce26dfa 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -1498,7 +1498,7 @@ u8 SpawnSpecialObjectEventParameterized(u8 graphicsId, u8 movementBehavior, u8 l y -= MAP_OFFSET; objectEventTemplate.localId = localId; objectEventTemplate.graphicsId = graphicsId; - objectEventTemplate.inConnection = 0; + objectEventTemplate.kind = OBJ_KIND_NORMAL; objectEventTemplate.x = x; objectEventTemplate.y = y; objectEventTemplate.elevation = elevation; diff --git a/tools/mapjson/mapjson.cpp b/tools/mapjson/mapjson.cpp index 10283eb08bc9..460e5e8aff0e 100644 --- a/tools/mapjson/mapjson.cpp +++ b/tools/mapjson/mapjson.cpp @@ -206,7 +206,7 @@ string generate_map_events_text(Json map_data) { // If no type field is present, assume it's a regular object event. if (type == "" || type == "object") { text << "\tobject_event " << i + 1 << ", " - << json_to_string(obj_event, "graphics_id") << ", 0, " + << json_to_string(obj_event, "graphics_id") << ", " << json_to_string(obj_event, "x") << ", " << json_to_string(obj_event, "y") << ", " << json_to_string(obj_event, "elevation") << ", " From c29cf5a5e5a017c9b5f479c46965cc6da2bf6eef Mon Sep 17 00:00:00 2001 From: GriffinR Date: Wed, 8 Feb 2023 13:34:38 -0500 Subject: [PATCH 046/428] Remove unnecessary version check --- tools/mapjson/mapjson.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/tools/mapjson/mapjson.cpp b/tools/mapjson/mapjson.cpp index 460e5e8aff0e..cfe95c485a50 100644 --- a/tools/mapjson/mapjson.cpp +++ b/tools/mapjson/mapjson.cpp @@ -371,10 +371,7 @@ string generate_groups_text(Json groups_data) { text << "\n"; } - if (version != "firered") - text << "\t.align 2\n"; - - text << "gMapGroups::\n"; + text << "\t.align 2\n" << "gMapGroups::\n"; for (auto &group : groups_data["group_order"].array_items()) text << "\t.4byte " << json_to_string(group) << "\n"; text << "\n"; From 6da5e0a280d481d3eab0ca292dd53277f75d120a Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sat, 11 Feb 2023 17:13:53 -0300 Subject: [PATCH 047/428] Rename eventLegal to fatefulEncounter --- asm/macros/event.inc | 14 +++++++------- data/maps/BirthIsland_Exterior/scripts.inc | 2 +- data/maps/FarawayIsland_Interior/scripts.inc | 2 +- data/maps/NavelRock_Bottom/scripts.inc | 2 +- data/maps/NavelRock_Top/scripts.inc | 2 +- data/maps/SouthernIsland_Interior/scripts.inc | 4 ++-- data/script_cmd_table.inc | 4 ++-- data/scripts/gift_pichu.inc | 2 +- data/specials.inc | 2 +- include/pokemon.h | 8 ++++---- include/trade.h | 4 ++-- src/battle_util.c | 6 +++--- src/egg_hatch.c | 6 +++--- src/party_menu.c | 8 ++++---- src/pokemon.c | 18 +++++++++--------- src/scrcmd.c | 12 ++++++------ src/trade.c | 16 ++++++++-------- 17 files changed, 56 insertions(+), 56 deletions(-) diff --git a/asm/macros/event.inc b/asm/macros/event.inc index 6c0c3856b9bd..ed2e95c6c7a7 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -1576,15 +1576,15 @@ .4byte \value .endm - @ Sets the eventLegal bit for the Pokemon in the specified slot of the player's party. - .macro setmoneventlegal slot:req + @ Sets the fatefulEncounter bit for the Pokemon in the specified slot of the player's party. + .macro setfatefulencounter slot:req .byte 0xcd .2byte \slot .endm - @ Checks if the eventLegal bit is set for the Pokemon in the specified slot of the player's party. If it isn't set, + @ Checks if the fatefulEncounter bit is set for the Pokemon in the specified slot of the player's party. If it isn't set, @ VAR_RESULT is TRUE. If the bit is set (or if the specified slot is empty or invalid), VAR_RESULT is FALSE. - .macro checkmoneventlegal slot:req + .macro checkfatefulencounter slot:req .byte 0xce .2byte \slot .endm @@ -1932,10 +1932,10 @@ closebraillemessage .endm - @ Creates an "event legal" Pokémon for an encounter - .macro seteventmon species:req, level:req, item=ITEM_NONE + @ Creates a Pokémon with the fatefulEncounter bit set for an encounter + .macro setfatefulencountermon species:req, level:req, item=ITEM_NONE setvar VAR_0x8004, \species setvar VAR_0x8005, \level setvar VAR_0x8006, \item - special CreateEventLegalEnemyMon + special CreateFatefulEncounterEnemyMon .endm diff --git a/data/maps/BirthIsland_Exterior/scripts.inc b/data/maps/BirthIsland_Exterior/scripts.inc index d2174eee99bf..2b5d6ba1ad30 100644 --- a/data/maps/BirthIsland_Exterior/scripts.inc +++ b/data/maps/BirthIsland_Exterior/scripts.inc @@ -85,7 +85,7 @@ BirthIsland_Exterior_EventScript_Deoxys:: delay 40 waitmoncry setvar VAR_LAST_TALKED, LOCALID_DEOXYS - seteventmon SPECIES_DEOXYS, 30 + setfatefulencountermon SPECIES_DEOXYS, 30 setflag FLAG_SYS_CTRL_OBJ_DELETE special BattleSetup_StartLegendaryBattle waitstate diff --git a/data/maps/FarawayIsland_Interior/scripts.inc b/data/maps/FarawayIsland_Interior/scripts.inc index d3d519ed1511..1a7eb43c6b3f 100644 --- a/data/maps/FarawayIsland_Interior/scripts.inc +++ b/data/maps/FarawayIsland_Interior/scripts.inc @@ -129,7 +129,7 @@ FarawayIsland_Interior_EventScript_Mew:: special DestroyMewEmergingGrassSprite delay 40 waitmoncry - seteventmon SPECIES_MEW, 30 + setfatefulencountermon SPECIES_MEW, 30 setflag FLAG_SYS_CTRL_OBJ_DELETE special BattleSetup_StartLegendaryBattle waitstate diff --git a/data/maps/NavelRock_Bottom/scripts.inc b/data/maps/NavelRock_Bottom/scripts.inc index 90cc229895be..cee6242f66a3 100644 --- a/data/maps/NavelRock_Bottom/scripts.inc +++ b/data/maps/NavelRock_Bottom/scripts.inc @@ -53,7 +53,7 @@ NavelRock_Bottom_EventScript_Lugia:: playmoncry SPECIES_LUGIA, CRY_MODE_ENCOUNTER waitmoncry delay 20 - seteventmon SPECIES_LUGIA, 70 + setfatefulencountermon SPECIES_LUGIA, 70 setflag FLAG_SYS_CTRL_OBJ_DELETE special BattleSetup_StartLegendaryBattle waitstate diff --git a/data/maps/NavelRock_Top/scripts.inc b/data/maps/NavelRock_Top/scripts.inc index 10969367a11f..c25fbdb22b61 100644 --- a/data/maps/NavelRock_Top/scripts.inc +++ b/data/maps/NavelRock_Top/scripts.inc @@ -57,7 +57,7 @@ NavelRock_Top_EventScript_HoOh:: applymovement LOCALID_HO_OH, NavelRock_Top_Movement_HoOhApproach waitmovement 0 special RemoveCameraObject - seteventmon SPECIES_HO_OH, 70 + setfatefulencountermon SPECIES_HO_OH, 70 setflag FLAG_SYS_CTRL_OBJ_DELETE special BattleSetup_StartLegendaryBattle waitstate diff --git a/data/maps/SouthernIsland_Interior/scripts.inc b/data/maps/SouthernIsland_Interior/scripts.inc index 8486739d93dc..a0eaabff3cd5 100644 --- a/data/maps/SouthernIsland_Interior/scripts.inc +++ b/data/maps/SouthernIsland_Interior/scripts.inc @@ -105,11 +105,11 @@ SouthernIsland_Interior_EventScript_Sign:: end SouthernIsland_Interior_EventScript_SetLatiosBattleVars:: - seteventmon SPECIES_LATIOS, 50, ITEM_SOUL_DEW + setfatefulencountermon SPECIES_LATIOS, 50, ITEM_SOUL_DEW return SouthernIsland_Interior_EventScript_SetLatiasBattleVars:: - seteventmon SPECIES_LATIAS, 50, ITEM_SOUL_DEW + setfatefulencountermon SPECIES_LATIAS, 50, ITEM_SOUL_DEW return SouthernIsland_Interior_Movement_CameraPanUp: diff --git a/data/script_cmd_table.inc b/data/script_cmd_table.inc index 51b7f966e4a9..7957e34eb4e3 100644 --- a/data/script_cmd_table.inc +++ b/data/script_cmd_table.inc @@ -205,8 +205,8 @@ gScriptCmdTable:: .4byte ScrCmd_nop1 @ 0xca .4byte ScrCmd_nop1 @ 0xcb .4byte ScrCmd_nop1 @ 0xcc - .4byte ScrCmd_setmoneventlegal @ 0xcd - .4byte ScrCmd_checkmoneventlegal @ 0xce + .4byte ScrCmd_setmonfatefulencounter @ 0xcd + .4byte ScrCmd_checkmonfatefulencounter @ 0xce .4byte ScrCmd_trywondercardscript @ 0xcf .4byte ScrCmd_nop1 @ 0xd0 .4byte ScrCmd_warpspinenter @ 0xd1 diff --git a/data/scripts/gift_pichu.inc b/data/scripts/gift_pichu.inc index d2cd381b5391..de2346a0a2a1 100644 --- a/data/scripts/gift_pichu.inc +++ b/data/scripts/gift_pichu.inc @@ -29,7 +29,7 @@ SurfPichu_FullParty: SurfPichu_GiveEgg: giveegg SPECIES_PICHU - setmoneventlegal VAR_GIFT_PICHU_SLOT + setfatefulencounter VAR_GIFT_PICHU_SLOT setmonmetlocation VAR_GIFT_PICHU_SLOT, METLOC_FATEFUL_ENCOUNTER vgoto_if_eq VAR_GIFT_PICHU_SLOT, 1, SurfPichu_Slot1 vgoto_if_eq VAR_GIFT_PICHU_SLOT, 2, SurfPichu_Slot2 diff --git a/data/specials.inc b/data/specials.inc index 26eb4e134b17..9ea7df31a11b 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -490,7 +490,7 @@ gSpecials:: def_special ScrollableMultichoice_ClosePersistentMenu def_special DoDeoxysRockInteraction def_special SetDeoxysRockPalette - def_special CreateEventLegalEnemyMon + def_special CreateFatefulEncounterEnemyMon def_special StartMirageTowerDisintegration def_special StartMirageTowerShake def_special StartMirageTowerFossilFallAndSink diff --git a/include/pokemon.h b/include/pokemon.h index ab102000a39a..8087d7b3184d 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -85,7 +85,7 @@ enum { MON_DATA_EARTH_RIBBON, MON_DATA_WORLD_RIBBON, MON_DATA_UNUSED_RIBBONS, - MON_DATA_EVENT_LEGAL, + MON_DATA_FATEFUL_ENCOUNTER, MON_DATA_KNOWN_MOVES, MON_DATA_RIBBON_COUNT, MON_DATA_RIBBONS, @@ -165,7 +165,7 @@ struct PokemonSubstruct3 /* 0x0B */ u32 earthRibbon:1; /* 0x0B */ u32 worldRibbon:1; // distributed during Pokémon Festa '04 and '05 to tournament winners /* 0x0B */ u32 unusedRibbons:4; // discarded in Gen 4 - /* 0x0B */ u32 eventLegal:1; // controls Mew & Deoxys obedience; if set, Pokémon is a fateful encounter in Gen 4+; set for in-game event island legendaries, some distributed events, and Pokémon from XD: Gale of Darkness. + /* 0x0B */ u32 fatefulEncounter:1; // controls Mew & Deoxys obedience; set for in-game event island legendaries, some distributed events, and Pokémon from XD: Gale of Darkness. }; // Number of bytes in the largest Pokémon substruct. @@ -401,12 +401,12 @@ void CreateBattleTowerMon_HandleLevel(struct Pokemon *mon, struct BattleTowerPok void CreateApprenticeMon(struct Pokemon *mon, const struct Apprentice *src, u8 monId); void CreateMonWithEVSpreadNatureOTID(struct Pokemon *mon, u16 species, u8 level, u8 nature, u8 fixedIV, u8 evSpread, u32 otId); void ConvertPokemonToBattleTowerPokemon(struct Pokemon *mon, struct BattleTowerPokemon *dest); -void CreateEventLegalMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId); +void CreateFatefulEncounterMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId); bool8 ShouldIgnoreDeoxysForm(u8 caseId, u8 battlerId); void SetDeoxysStats(void); u16 GetUnionRoomTrainerPic(void); u16 GetUnionRoomTrainerClass(void); -void CreateEventLegalEnemyMon(void); +void CreateFatefulEncounterEnemyMon(void); void CalculateMonStats(struct Pokemon *mon); void BoxMonToMon(const struct BoxPokemon *src, struct Pokemon *dest); u8 GetLevelFromMonExp(struct Pokemon *mon); diff --git a/include/trade.h b/include/trade.h index d63749653a09..f89d203e9c85 100644 --- a/include/trade.h +++ b/include/trade.h @@ -12,8 +12,8 @@ extern const struct WindowTemplate gTradeEvolutionSceneYesNoWindowTemplate; s32 GetGameProgressForLinkTrade(void); void CB2_StartCreateTradeMenu(void); void CB2_LinkTrade(void); -int CanRegisterMonForTradingBoard(struct RfuGameCompatibilityData player, u16 species2, u16 species, bool8 isEventLegal); -int GetUnionRoomTradeMessageId(struct RfuGameCompatibilityData player, struct RfuGameCompatibilityData partner, u16 playerSpecies2, u16 partnerSpecies, u8 requestedType, u16 playerSpecies, bool8 isEventLegal); +int CanRegisterMonForTradingBoard(struct RfuGameCompatibilityData player, u16 species2, u16 species, bool8 isFatefulEncounter); +int GetUnionRoomTradeMessageId(struct RfuGameCompatibilityData player, struct RfuGameCompatibilityData partner, u16 playerSpecies2, u16 partnerSpecies, u8 requestedType, u16 playerSpecies, bool8 isFatefulEncounter); int CanSpinTradeMon(struct Pokemon *, u16); void InitTradeSequenceBgGpuRegs(void); void LinkTradeDrawWindow(void); diff --git a/src/battle_util.c b/src/battle_util.c index bbf34ab31631..c3186671f518 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -3885,14 +3885,14 @@ u8 GetMoveTarget(u16 move, u8 setTarget) return targetBattler; } -static bool32 IsMonEventLegal(u8 battlerId) +static bool32 IsBattlerFatefulEncounter(u8 battlerId) { if (GetBattlerSide(battlerId) == B_SIDE_OPPONENT) return TRUE; if (GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES, NULL) != SPECIES_DEOXYS && GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES, NULL) != SPECIES_MEW) return TRUE; - return GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_EVENT_LEGAL, NULL); + return GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_FATEFUL_ENCOUNTER, NULL); } u8 IsMonDisobedient(void) @@ -3906,7 +3906,7 @@ u8 IsMonDisobedient(void) if (GetBattlerSide(gBattlerAttacker) == B_SIDE_OPPONENT) return 0; - if (IsMonEventLegal(gBattlerAttacker)) // only false if illegal Mew or Deoxys + if (IsBattlerFatefulEncounter(gBattlerAttacker)) // only false if illegal Mew or Deoxys { if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && GetBattlerPosition(gBattlerAttacker) == 2) return 0; diff --git a/src/egg_hatch.c b/src/egg_hatch.c index 8c0bb5f79a92..b741a9b15a25 100644 --- a/src/egg_hatch.c +++ b/src/egg_hatch.c @@ -313,7 +313,7 @@ static void CreateHatchedMon(struct Pokemon *egg, struct Pokemon *temp) { u16 species; u32 personality, pokerus; - u8 i, friendship, language, gameMet, markings, isEventLegal; + u8 i, friendship, language, gameMet, markings, isFatefulEncounter; u16 moves[MAX_MON_MOVES]; u32 ivs[NUM_STATS]; @@ -332,7 +332,7 @@ static void CreateHatchedMon(struct Pokemon *egg, struct Pokemon *temp) gameMet = GetMonData(egg, MON_DATA_MET_GAME); markings = GetMonData(egg, MON_DATA_MARKINGS); pokerus = GetMonData(egg, MON_DATA_POKERUS); - isEventLegal = GetMonData(egg, MON_DATA_EVENT_LEGAL); + isFatefulEncounter = GetMonData(egg, MON_DATA_FATEFUL_ENCOUNTER); CreateMon(temp, species, EGG_HATCH_LEVEL, USE_RANDOM_IVS, TRUE, personality, OT_ID_PLAYER_ID, 0); @@ -350,7 +350,7 @@ static void CreateHatchedMon(struct Pokemon *egg, struct Pokemon *temp) friendship = 120; SetMonData(temp, MON_DATA_FRIENDSHIP, &friendship); SetMonData(temp, MON_DATA_POKERUS, &pokerus); - SetMonData(temp, MON_DATA_EVENT_LEGAL, &isEventLegal); + SetMonData(temp, MON_DATA_FATEFUL_ENCOUNTER, &isFatefulEncounter); *egg = *temp; } diff --git a/src/party_menu.c b/src/party_menu.c index da2cb0fd19db..571af54a4173 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -3591,9 +3591,9 @@ static void CursorCb_Register(u8 taskId) { u16 species2 = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES2); u16 species = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES); - u8 isEventLegal = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_EVENT_LEGAL); + u8 isFatefulEncounter = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_FATEFUL_ENCOUNTER); - switch (CanRegisterMonForTradingBoard(*(struct RfuGameCompatibilityData *)GetHostRfuGameData(), species2, species, isEventLegal)) + switch (CanRegisterMonForTradingBoard(*(struct RfuGameCompatibilityData *)GetHostRfuGameData(), species2, species, isFatefulEncounter)) { case CANT_REGISTER_MON: StringExpandPlaceholders(gStringVar4, gText_PkmnCantBeTradedNow); @@ -3618,8 +3618,8 @@ static void CursorCb_Trade1(u8 taskId) { u16 species2 = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES2); u16 species = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES); - u8 isEventLegal = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_EVENT_LEGAL); - u32 stringId = GetUnionRoomTradeMessageId(*(struct RfuGameCompatibilityData *)GetHostRfuGameData(), gRfuPartnerCompatibilityData, species2, gUnionRoomOfferedSpecies, gUnionRoomRequestedMonType, species, isEventLegal); + u8 isFatefulEncounter = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_FATEFUL_ENCOUNTER); + u32 stringId = GetUnionRoomTradeMessageId(*(struct RfuGameCompatibilityData *)GetHostRfuGameData(), gRfuPartnerCompatibilityData, species2, gUnionRoomOfferedSpecies, gUnionRoomRequestedMonType, species, isFatefulEncounter); if (stringId != UR_TRADE_MSG_NONE) { diff --git a/src/pokemon.c b/src/pokemon.c index e8d334a6ac1f..e08a08103b90 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -2623,12 +2623,12 @@ void ConvertPokemonToBattleTowerPokemon(struct Pokemon *mon, struct BattleTowerP GetMonData(mon, MON_DATA_NICKNAME, dest->nickname); } -void CreateEventLegalMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId) +void CreateFatefulEncounterMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId) { - bool32 isEventLegal = TRUE; + bool32 isFatefulEncounter = TRUE; CreateMon(mon, species, level, fixedIV, hasFixedPersonality, fixedPersonality, otIdType, fixedOtId); - SetMonData(mon, MON_DATA_EVENT_LEGAL, &isEventLegal); + SetMonData(mon, MON_DATA_FATEFUL_ENCOUNTER, &isFatefulEncounter); } // If FALSE, should load this game's Deoxys form. If TRUE, should load normal Deoxys form @@ -2763,14 +2763,14 @@ u16 GetUnionRoomTrainerClass(void) return gFacilityClassToTrainerClass[gUnionRoomFacilityClasses[arrId]]; } -void CreateEventLegalEnemyMon(void) +void CreateFatefulEncounterEnemyMon(void) { s32 species = gSpecialVar_0x8004; s32 level = gSpecialVar_0x8005; s32 itemId = gSpecialVar_0x8006; ZeroEnemyPartyMons(); - CreateEventLegalMon(&gEnemyParty[0], species, level, USE_RANDOM_IVS, FALSE, 0, OT_ID_PLAYER_ID, 0); + CreateFatefulEncounterMon(&gEnemyParty[0], species, level, USE_RANDOM_IVS, FALSE, 0, OT_ID_PLAYER_ID, 0); if (itemId) { u8 heldItem[2]; @@ -3957,8 +3957,8 @@ u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data) case MON_DATA_UNUSED_RIBBONS: retVal = substruct3->unusedRibbons; break; - case MON_DATA_EVENT_LEGAL: - retVal = substruct3->eventLegal; + case MON_DATA_FATEFUL_ENCOUNTER: + retVal = substruct3->fatefulEncounter; break; case MON_DATA_SPECIES2: retVal = substruct0->species; @@ -4341,8 +4341,8 @@ void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const void *dataArg) case MON_DATA_UNUSED_RIBBONS: SET8(substruct3->unusedRibbons); break; - case MON_DATA_EVENT_LEGAL: - SET8(substruct3->eventLegal); + case MON_DATA_FATEFUL_ENCOUNTER: + SET8(substruct3->fatefulEncounter); break; case MON_DATA_IVS: { diff --git a/src/scrcmd.c b/src/scrcmd.c index 45cb65afb17a..56bea0843e8b 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -2206,21 +2206,21 @@ bool8 ScrCmd_lockfortrainer(struct ScriptContext *ctx) } } -// This command will set a Pokémon's eventLegal bit; there is no similar command to clear it. -bool8 ScrCmd_setmoneventlegal(struct ScriptContext *ctx) +// This command will set a Pokémon's fatefulEncounter bit; there is no similar command to clear it. +bool8 ScrCmd_setmonfatefulencounter(struct ScriptContext *ctx) { - bool8 isEventLegal = TRUE; + bool8 isFatefulEncounter = TRUE; u16 partyIndex = VarGet(ScriptReadHalfword(ctx)); - SetMonData(&gPlayerParty[partyIndex], MON_DATA_EVENT_LEGAL, &isEventLegal); + SetMonData(&gPlayerParty[partyIndex], MON_DATA_FATEFUL_ENCOUNTER, &isFatefulEncounter); return FALSE; } -bool8 ScrCmd_checkmoneventlegal(struct ScriptContext *ctx) +bool8 ScrCmd_checkmonfatefulencounter(struct ScriptContext *ctx) { u16 partyIndex = VarGet(ScriptReadHalfword(ctx)); - gSpecialVar_Result = GetMonData(&gPlayerParty[partyIndex], MON_DATA_EVENT_LEGAL, NULL); + gSpecialVar_Result = GetMonData(&gPlayerParty[partyIndex], MON_DATA_FATEFUL_ENCOUNTER, NULL); return FALSE; } diff --git a/src/trade.c b/src/trade.c index f8817421f279..a02cad9df1c2 100644 --- a/src/trade.c +++ b/src/trade.c @@ -1577,7 +1577,7 @@ static u8 CheckValidityOfTradeMons(u8 *aliveMons, u8 playerPartyCount, u8 player // Partner cant trade illegitimate Deoxys or Mew if (partnerSpecies == SPECIES_DEOXYS || partnerSpecies == SPECIES_MEW) { - if (!GetMonData(&gEnemyParty[partnerMonIdx], MON_DATA_EVENT_LEGAL)) + if (!GetMonData(&gEnemyParty[partnerMonIdx], MON_DATA_FATEFUL_ENCOUNTER)) return PARTNER_MON_INVALID; } @@ -2426,7 +2426,7 @@ static u32 CanTradeSelectedMon(struct Pokemon *playerParty, int partyCount, int if (species[monIdx] == SPECIES_DEOXYS || species[monIdx] == SPECIES_MEW) { - if (!GetMonData(&playerParty[monIdx], MON_DATA_EVENT_LEGAL)) + if (!GetMonData(&playerParty[monIdx], MON_DATA_FATEFUL_ENCOUNTER)) return CANT_TRADE_INVALID_MON; } @@ -2491,17 +2491,17 @@ s32 GetGameProgressForLinkTrade(void) return TRADE_BOTH_PLAYERS_READY; } -static bool32 IsDeoxysOrMewUntradable(u16 species, bool8 isEventLegal) +static bool32 IsDeoxysOrMewUntradable(u16 species, bool8 isFatefulEncounter) { if (species == SPECIES_DEOXYS || species == SPECIES_MEW) { - if (!isEventLegal) + if (!isFatefulEncounter) return TRUE; } return FALSE; } -int GetUnionRoomTradeMessageId(struct RfuGameCompatibilityData player, struct RfuGameCompatibilityData partner, u16 playerSpecies2, u16 partnerSpecies, u8 requestedType, u16 playerSpecies, bool8 isEventLegal) +int GetUnionRoomTradeMessageId(struct RfuGameCompatibilityData player, struct RfuGameCompatibilityData partner, u16 playerSpecies2, u16 partnerSpecies, u8 requestedType, u16 playerSpecies, bool8 isFatefulEncounter) { bool8 playerHasNationalDex = player.hasNationalDex; bool8 playerCanLinkNationally = player.canLinkNationally; @@ -2520,7 +2520,7 @@ int GetUnionRoomTradeMessageId(struct RfuGameCompatibilityData player, struct Rf } // Cannot trade illegitimate Deoxys/Mew - if (IsDeoxysOrMewUntradable(playerSpecies, isEventLegal)) + if (IsDeoxysOrMewUntradable(playerSpecies, isFatefulEncounter)) return UR_TRADE_MSG_MON_CANT_BE_TRADED_2; if (partnerSpecies == SPECIES_EGG) @@ -2563,11 +2563,11 @@ int GetUnionRoomTradeMessageId(struct RfuGameCompatibilityData player, struct Rf return UR_TRADE_MSG_NONE; } -int CanRegisterMonForTradingBoard(struct RfuGameCompatibilityData player, u16 species2, u16 species, bool8 isEventLegal) +int CanRegisterMonForTradingBoard(struct RfuGameCompatibilityData player, u16 species2, u16 species, bool8 isFatefulEncounter) { bool8 hasNationalDex = player.hasNationalDex; - if (IsDeoxysOrMewUntradable(species, isEventLegal)) + if (IsDeoxysOrMewUntradable(species, isFatefulEncounter)) return CANT_REGISTER_MON; if (hasNationalDex) From 96865f66afc9872e142e6c26e597e4f5db32f42e Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sat, 11 Feb 2023 22:36:42 -0300 Subject: [PATCH 048/428] Updated term to modernFatefulEncounter --- asm/macros/event.inc | 14 +++++----- data/maps/BirthIsland_Exterior/scripts.inc | 2 +- data/maps/FarawayIsland_Interior/scripts.inc | 2 +- data/maps/NavelRock_Bottom/scripts.inc | 2 +- data/maps/NavelRock_Top/scripts.inc | 2 +- data/maps/SouthernIsland_Interior/scripts.inc | 4 +-- data/script_cmd_table.inc | 4 +-- data/scripts/gift_pichu.inc | 2 +- data/specials.inc | 2 +- include/pokemon.h | 27 ++++++++++++------- include/trade.h | 4 +-- src/battle_util.c | 4 +-- src/egg_hatch.c | 6 ++--- src/party_menu.c | 8 +++--- src/pokemon.c | 14 +++++----- src/scrcmd.c | 10 +++---- src/trade.c | 12 ++++----- 17 files changed, 63 insertions(+), 56 deletions(-) diff --git a/asm/macros/event.inc b/asm/macros/event.inc index ed2e95c6c7a7..26a7e8157922 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -1576,15 +1576,15 @@ .4byte \value .endm - @ Sets the fatefulEncounter bit for the Pokemon in the specified slot of the player's party. - .macro setfatefulencounter slot:req + @ Sets the modernFatefulEncounter bit for the Pokemon in the specified slot of the player's party. + .macro setmodernfatefulencounter slot:req .byte 0xcd .2byte \slot .endm - @ Checks if the fatefulEncounter bit is set for the Pokemon in the specified slot of the player's party. If it isn't set, + @ Checks if the modernFatefulEncounter bit is set for the Pokemon in the specified slot of the player's party. If it isn't set, @ VAR_RESULT is TRUE. If the bit is set (or if the specified slot is empty or invalid), VAR_RESULT is FALSE. - .macro checkfatefulencounter slot:req + .macro checkmodernfatefulencounter slot:req .byte 0xce .2byte \slot .endm @@ -1932,10 +1932,10 @@ closebraillemessage .endm - @ Creates a Pokémon with the fatefulEncounter bit set for an encounter - .macro setfatefulencountermon species:req, level:req, item=ITEM_NONE + @ Creates a Pokémon with the modernFatefulEncounter bit set for an encounter + .macro setmodernfatefulencountermon species:req, level:req, item=ITEM_NONE setvar VAR_0x8004, \species setvar VAR_0x8005, \level setvar VAR_0x8006, \item - special CreateFatefulEncounterEnemyMon + special CreateModernFatefulEncounterEnemyMon .endm diff --git a/data/maps/BirthIsland_Exterior/scripts.inc b/data/maps/BirthIsland_Exterior/scripts.inc index 2b5d6ba1ad30..4e38d8855e74 100644 --- a/data/maps/BirthIsland_Exterior/scripts.inc +++ b/data/maps/BirthIsland_Exterior/scripts.inc @@ -85,7 +85,7 @@ BirthIsland_Exterior_EventScript_Deoxys:: delay 40 waitmoncry setvar VAR_LAST_TALKED, LOCALID_DEOXYS - setfatefulencountermon SPECIES_DEOXYS, 30 + setmodernfatefulencountermon SPECIES_DEOXYS, 30 setflag FLAG_SYS_CTRL_OBJ_DELETE special BattleSetup_StartLegendaryBattle waitstate diff --git a/data/maps/FarawayIsland_Interior/scripts.inc b/data/maps/FarawayIsland_Interior/scripts.inc index 1a7eb43c6b3f..91536c13bf89 100644 --- a/data/maps/FarawayIsland_Interior/scripts.inc +++ b/data/maps/FarawayIsland_Interior/scripts.inc @@ -129,7 +129,7 @@ FarawayIsland_Interior_EventScript_Mew:: special DestroyMewEmergingGrassSprite delay 40 waitmoncry - setfatefulencountermon SPECIES_MEW, 30 + setmodernfatefulencountermon SPECIES_MEW, 30 setflag FLAG_SYS_CTRL_OBJ_DELETE special BattleSetup_StartLegendaryBattle waitstate diff --git a/data/maps/NavelRock_Bottom/scripts.inc b/data/maps/NavelRock_Bottom/scripts.inc index cee6242f66a3..4230398d8b39 100644 --- a/data/maps/NavelRock_Bottom/scripts.inc +++ b/data/maps/NavelRock_Bottom/scripts.inc @@ -53,7 +53,7 @@ NavelRock_Bottom_EventScript_Lugia:: playmoncry SPECIES_LUGIA, CRY_MODE_ENCOUNTER waitmoncry delay 20 - setfatefulencountermon SPECIES_LUGIA, 70 + setmodernfatefulencountermon SPECIES_LUGIA, 70 setflag FLAG_SYS_CTRL_OBJ_DELETE special BattleSetup_StartLegendaryBattle waitstate diff --git a/data/maps/NavelRock_Top/scripts.inc b/data/maps/NavelRock_Top/scripts.inc index c25fbdb22b61..4388c1d5c5af 100644 --- a/data/maps/NavelRock_Top/scripts.inc +++ b/data/maps/NavelRock_Top/scripts.inc @@ -57,7 +57,7 @@ NavelRock_Top_EventScript_HoOh:: applymovement LOCALID_HO_OH, NavelRock_Top_Movement_HoOhApproach waitmovement 0 special RemoveCameraObject - setfatefulencountermon SPECIES_HO_OH, 70 + setmodernfatefulencountermon SPECIES_HO_OH, 70 setflag FLAG_SYS_CTRL_OBJ_DELETE special BattleSetup_StartLegendaryBattle waitstate diff --git a/data/maps/SouthernIsland_Interior/scripts.inc b/data/maps/SouthernIsland_Interior/scripts.inc index a0eaabff3cd5..77350c076881 100644 --- a/data/maps/SouthernIsland_Interior/scripts.inc +++ b/data/maps/SouthernIsland_Interior/scripts.inc @@ -105,11 +105,11 @@ SouthernIsland_Interior_EventScript_Sign:: end SouthernIsland_Interior_EventScript_SetLatiosBattleVars:: - setfatefulencountermon SPECIES_LATIOS, 50, ITEM_SOUL_DEW + setmodernfatefulencountermon SPECIES_LATIOS, 50, ITEM_SOUL_DEW return SouthernIsland_Interior_EventScript_SetLatiasBattleVars:: - setfatefulencountermon SPECIES_LATIAS, 50, ITEM_SOUL_DEW + setmodernfatefulencountermon SPECIES_LATIAS, 50, ITEM_SOUL_DEW return SouthernIsland_Interior_Movement_CameraPanUp: diff --git a/data/script_cmd_table.inc b/data/script_cmd_table.inc index 7957e34eb4e3..d16e25e18779 100644 --- a/data/script_cmd_table.inc +++ b/data/script_cmd_table.inc @@ -205,8 +205,8 @@ gScriptCmdTable:: .4byte ScrCmd_nop1 @ 0xca .4byte ScrCmd_nop1 @ 0xcb .4byte ScrCmd_nop1 @ 0xcc - .4byte ScrCmd_setmonfatefulencounter @ 0xcd - .4byte ScrCmd_checkmonfatefulencounter @ 0xce + .4byte ScrCmd_setmonmodernfatefulencounter @ 0xcd + .4byte ScrCmd_checkmonmodernfatefulencounter @ 0xce .4byte ScrCmd_trywondercardscript @ 0xcf .4byte ScrCmd_nop1 @ 0xd0 .4byte ScrCmd_warpspinenter @ 0xd1 diff --git a/data/scripts/gift_pichu.inc b/data/scripts/gift_pichu.inc index de2346a0a2a1..56c1e5234915 100644 --- a/data/scripts/gift_pichu.inc +++ b/data/scripts/gift_pichu.inc @@ -29,7 +29,7 @@ SurfPichu_FullParty: SurfPichu_GiveEgg: giveegg SPECIES_PICHU - setfatefulencounter VAR_GIFT_PICHU_SLOT + setmodernfatefulencounter VAR_GIFT_PICHU_SLOT setmonmetlocation VAR_GIFT_PICHU_SLOT, METLOC_FATEFUL_ENCOUNTER vgoto_if_eq VAR_GIFT_PICHU_SLOT, 1, SurfPichu_Slot1 vgoto_if_eq VAR_GIFT_PICHU_SLOT, 2, SurfPichu_Slot2 diff --git a/data/specials.inc b/data/specials.inc index 9ea7df31a11b..6d53864676e9 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -490,7 +490,7 @@ gSpecials:: def_special ScrollableMultichoice_ClosePersistentMenu def_special DoDeoxysRockInteraction def_special SetDeoxysRockPalette - def_special CreateFatefulEncounterEnemyMon + def_special CreateModernFatefulEncounterEnemyMon def_special StartMirageTowerDisintegration def_special StartMirageTowerShake def_special StartMirageTowerFossilFallAndSink diff --git a/include/pokemon.h b/include/pokemon.h index 8087d7b3184d..5836d2c34bfe 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -152,20 +152,27 @@ struct PokemonSubstruct3 /* 0x08 */ u32 cuteRibbon:3; /* 0x09 */ u32 smartRibbon:3; /* 0x09 */ u32 toughRibbon:3; - /* 0x09 */ u32 championRibbon:1; + /* 0x09 */ u32 championRibbon:1; // Shared by bo /* 0x0A */ u32 winningRibbon:1; /* 0x0A */ u32 victoryRibbon:1; /* 0x0A */ u32 artistRibbon:1; /* 0x0A */ u32 effortRibbon:1; - /* 0x0A */ u32 marineRibbon:1; // never distributed - /* 0x0A */ u32 landRibbon:1; // never distributed - /* 0x0A */ u32 skyRibbon:1; // never distributed - /* 0x0A */ u32 countryRibbon:1; // distributed during Pokémon Festa '04 and '05 to tournament winners + /* 0x0A */ u32 marineRibbon:1; // Never distributed. + /* 0x0A */ u32 landRibbon:1; // Never distributed. + /* 0x0A */ u32 skyRibbon:1; // Never distributed. + /* 0x0A */ u32 countryRibbon:1; // Distributed during Pokémon Festa '04 and '05 to tournament winners. /* 0x0B */ u32 nationalRibbon:1; /* 0x0B */ u32 earthRibbon:1; - /* 0x0B */ u32 worldRibbon:1; // distributed during Pokémon Festa '04 and '05 to tournament winners - /* 0x0B */ u32 unusedRibbons:4; // discarded in Gen 4 - /* 0x0B */ u32 fatefulEncounter:1; // controls Mew & Deoxys obedience; set for in-game event island legendaries, some distributed events, and Pokémon from XD: Gale of Darkness. + /* 0x0B */ u32 worldRibbon:1; // Distributed during Pokémon Festa '04 and '05 to tournament winners. + /* 0x0B */ u32 unusedRibbons:4; // Discarded in Gen 4. + + // The functionality of this bit changed in FRLG: + // In RS, this bit does nothing, is never set, & is accidentally unset when hatching Eggs. + // In FRLG & Emerald, this controls Mew & Deoxys obedience and whether they can be traded. + // If set, a Pokémon is a fateful encounter in FRLG's summary screen if hatched & for all Pokémon in Gen 4+ summary screens. + // Set for in-game event island legendaries, events distributed after a certain date, & Pokémon from XD: Gale of Darkness. + // Not to be confused with METLOC_FATEFUL_ENCOUNTER. + /* 0x0B */ u32 modernFatefulEncounter:1; }; // Number of bytes in the largest Pokémon substruct. @@ -401,12 +408,12 @@ void CreateBattleTowerMon_HandleLevel(struct Pokemon *mon, struct BattleTowerPok void CreateApprenticeMon(struct Pokemon *mon, const struct Apprentice *src, u8 monId); void CreateMonWithEVSpreadNatureOTID(struct Pokemon *mon, u16 species, u8 level, u8 nature, u8 fixedIV, u8 evSpread, u32 otId); void ConvertPokemonToBattleTowerPokemon(struct Pokemon *mon, struct BattleTowerPokemon *dest); -void CreateFatefulEncounterMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId); +void CreateModernFatefulEncounterMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId); bool8 ShouldIgnoreDeoxysForm(u8 caseId, u8 battlerId); void SetDeoxysStats(void); u16 GetUnionRoomTrainerPic(void); u16 GetUnionRoomTrainerClass(void); -void CreateFatefulEncounterEnemyMon(void); +void CreateModernFatefulEncounterEnemyMon(void); void CalculateMonStats(struct Pokemon *mon); void BoxMonToMon(const struct BoxPokemon *src, struct Pokemon *dest); u8 GetLevelFromMonExp(struct Pokemon *mon); diff --git a/include/trade.h b/include/trade.h index f89d203e9c85..6b621038fccd 100644 --- a/include/trade.h +++ b/include/trade.h @@ -12,8 +12,8 @@ extern const struct WindowTemplate gTradeEvolutionSceneYesNoWindowTemplate; s32 GetGameProgressForLinkTrade(void); void CB2_StartCreateTradeMenu(void); void CB2_LinkTrade(void); -int CanRegisterMonForTradingBoard(struct RfuGameCompatibilityData player, u16 species2, u16 species, bool8 isFatefulEncounter); -int GetUnionRoomTradeMessageId(struct RfuGameCompatibilityData player, struct RfuGameCompatibilityData partner, u16 playerSpecies2, u16 partnerSpecies, u8 requestedType, u16 playerSpecies, bool8 isFatefulEncounter); +int CanRegisterMonForTradingBoard(struct RfuGameCompatibilityData player, u16 species2, u16 species, bool8 isModernFatefulEncounter); +int GetUnionRoomTradeMessageId(struct RfuGameCompatibilityData player, struct RfuGameCompatibilityData partner, u16 playerSpecies2, u16 partnerSpecies, u8 requestedType, u16 playerSpecies, bool8 isModernFatefulEncounter); int CanSpinTradeMon(struct Pokemon *, u16); void InitTradeSequenceBgGpuRegs(void); void LinkTradeDrawWindow(void); diff --git a/src/battle_util.c b/src/battle_util.c index c3186671f518..007bf688318f 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -3885,7 +3885,7 @@ u8 GetMoveTarget(u16 move, u8 setTarget) return targetBattler; } -static bool32 IsBattlerFatefulEncounter(u8 battlerId) +static bool32 IsBattlerModernFatefulEncounter(u8 battlerId) { if (GetBattlerSide(battlerId) == B_SIDE_OPPONENT) return TRUE; @@ -3906,7 +3906,7 @@ u8 IsMonDisobedient(void) if (GetBattlerSide(gBattlerAttacker) == B_SIDE_OPPONENT) return 0; - if (IsBattlerFatefulEncounter(gBattlerAttacker)) // only false if illegal Mew or Deoxys + if (IsBattlerModernFatefulEncounter(gBattlerAttacker)) // only false if illegal Mew or Deoxys { if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && GetBattlerPosition(gBattlerAttacker) == 2) return 0; diff --git a/src/egg_hatch.c b/src/egg_hatch.c index b741a9b15a25..bf615be06120 100644 --- a/src/egg_hatch.c +++ b/src/egg_hatch.c @@ -313,7 +313,7 @@ static void CreateHatchedMon(struct Pokemon *egg, struct Pokemon *temp) { u16 species; u32 personality, pokerus; - u8 i, friendship, language, gameMet, markings, isFatefulEncounter; + u8 i, friendship, language, gameMet, markings, isModernFatefulEncounter; u16 moves[MAX_MON_MOVES]; u32 ivs[NUM_STATS]; @@ -332,7 +332,7 @@ static void CreateHatchedMon(struct Pokemon *egg, struct Pokemon *temp) gameMet = GetMonData(egg, MON_DATA_MET_GAME); markings = GetMonData(egg, MON_DATA_MARKINGS); pokerus = GetMonData(egg, MON_DATA_POKERUS); - isFatefulEncounter = GetMonData(egg, MON_DATA_FATEFUL_ENCOUNTER); + isModernFatefulEncounter = GetMonData(egg, MON_DATA_FATEFUL_ENCOUNTER); CreateMon(temp, species, EGG_HATCH_LEVEL, USE_RANDOM_IVS, TRUE, personality, OT_ID_PLAYER_ID, 0); @@ -350,7 +350,7 @@ static void CreateHatchedMon(struct Pokemon *egg, struct Pokemon *temp) friendship = 120; SetMonData(temp, MON_DATA_FRIENDSHIP, &friendship); SetMonData(temp, MON_DATA_POKERUS, &pokerus); - SetMonData(temp, MON_DATA_FATEFUL_ENCOUNTER, &isFatefulEncounter); + SetMonData(temp, MON_DATA_FATEFUL_ENCOUNTER, &isModernFatefulEncounter); *egg = *temp; } diff --git a/src/party_menu.c b/src/party_menu.c index 571af54a4173..8c84c5c0306d 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -3591,9 +3591,9 @@ static void CursorCb_Register(u8 taskId) { u16 species2 = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES2); u16 species = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES); - u8 isFatefulEncounter = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_FATEFUL_ENCOUNTER); + u8 isModernFatefulEncounter = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_FATEFUL_ENCOUNTER); - switch (CanRegisterMonForTradingBoard(*(struct RfuGameCompatibilityData *)GetHostRfuGameData(), species2, species, isFatefulEncounter)) + switch (CanRegisterMonForTradingBoard(*(struct RfuGameCompatibilityData *)GetHostRfuGameData(), species2, species, isModernFatefulEncounter)) { case CANT_REGISTER_MON: StringExpandPlaceholders(gStringVar4, gText_PkmnCantBeTradedNow); @@ -3618,8 +3618,8 @@ static void CursorCb_Trade1(u8 taskId) { u16 species2 = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES2); u16 species = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES); - u8 isFatefulEncounter = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_FATEFUL_ENCOUNTER); - u32 stringId = GetUnionRoomTradeMessageId(*(struct RfuGameCompatibilityData *)GetHostRfuGameData(), gRfuPartnerCompatibilityData, species2, gUnionRoomOfferedSpecies, gUnionRoomRequestedMonType, species, isFatefulEncounter); + u8 isModernFatefulEncounter = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_FATEFUL_ENCOUNTER); + u32 stringId = GetUnionRoomTradeMessageId(*(struct RfuGameCompatibilityData *)GetHostRfuGameData(), gRfuPartnerCompatibilityData, species2, gUnionRoomOfferedSpecies, gUnionRoomRequestedMonType, species, isModernFatefulEncounter); if (stringId != UR_TRADE_MSG_NONE) { diff --git a/src/pokemon.c b/src/pokemon.c index e08a08103b90..9b6ee977d6cd 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -2623,12 +2623,12 @@ void ConvertPokemonToBattleTowerPokemon(struct Pokemon *mon, struct BattleTowerP GetMonData(mon, MON_DATA_NICKNAME, dest->nickname); } -void CreateFatefulEncounterMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId) +void CreateModernFatefulEncounterMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId) { - bool32 isFatefulEncounter = TRUE; + bool32 isModernFatefulEncounter = TRUE; CreateMon(mon, species, level, fixedIV, hasFixedPersonality, fixedPersonality, otIdType, fixedOtId); - SetMonData(mon, MON_DATA_FATEFUL_ENCOUNTER, &isFatefulEncounter); + SetMonData(mon, MON_DATA_FATEFUL_ENCOUNTER, &isModernFatefulEncounter); } // If FALSE, should load this game's Deoxys form. If TRUE, should load normal Deoxys form @@ -2763,14 +2763,14 @@ u16 GetUnionRoomTrainerClass(void) return gFacilityClassToTrainerClass[gUnionRoomFacilityClasses[arrId]]; } -void CreateFatefulEncounterEnemyMon(void) +void CreateModernFatefulEncounterEnemyMon(void) { s32 species = gSpecialVar_0x8004; s32 level = gSpecialVar_0x8005; s32 itemId = gSpecialVar_0x8006; ZeroEnemyPartyMons(); - CreateFatefulEncounterMon(&gEnemyParty[0], species, level, USE_RANDOM_IVS, FALSE, 0, OT_ID_PLAYER_ID, 0); + CreateModernFatefulEncounterMon(&gEnemyParty[0], species, level, USE_RANDOM_IVS, FALSE, 0, OT_ID_PLAYER_ID, 0); if (itemId) { u8 heldItem[2]; @@ -3958,7 +3958,7 @@ u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data) retVal = substruct3->unusedRibbons; break; case MON_DATA_FATEFUL_ENCOUNTER: - retVal = substruct3->fatefulEncounter; + retVal = substruct3->modernFatefulEncounter; break; case MON_DATA_SPECIES2: retVal = substruct0->species; @@ -4342,7 +4342,7 @@ void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const void *dataArg) SET8(substruct3->unusedRibbons); break; case MON_DATA_FATEFUL_ENCOUNTER: - SET8(substruct3->fatefulEncounter); + SET8(substruct3->modernFatefulEncounter); break; case MON_DATA_IVS: { diff --git a/src/scrcmd.c b/src/scrcmd.c index 56bea0843e8b..d055ff3a07ee 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -2206,17 +2206,17 @@ bool8 ScrCmd_lockfortrainer(struct ScriptContext *ctx) } } -// This command will set a Pokémon's fatefulEncounter bit; there is no similar command to clear it. -bool8 ScrCmd_setmonfatefulencounter(struct ScriptContext *ctx) +// This command will set a Pokémon's modernFatefulEncounter bit; there is no similar command to clear it. +bool8 ScrCmd_setmonmodernfatefulencounter(struct ScriptContext *ctx) { - bool8 isFatefulEncounter = TRUE; + bool8 isModernFatefulEncounter = TRUE; u16 partyIndex = VarGet(ScriptReadHalfword(ctx)); - SetMonData(&gPlayerParty[partyIndex], MON_DATA_FATEFUL_ENCOUNTER, &isFatefulEncounter); + SetMonData(&gPlayerParty[partyIndex], MON_DATA_FATEFUL_ENCOUNTER, &isModernFatefulEncounter); return FALSE; } -bool8 ScrCmd_checkmonfatefulencounter(struct ScriptContext *ctx) +bool8 ScrCmd_checkmonmodernfatefulencounter(struct ScriptContext *ctx) { u16 partyIndex = VarGet(ScriptReadHalfword(ctx)); diff --git a/src/trade.c b/src/trade.c index a02cad9df1c2..508cde7cb549 100644 --- a/src/trade.c +++ b/src/trade.c @@ -2491,17 +2491,17 @@ s32 GetGameProgressForLinkTrade(void) return TRADE_BOTH_PLAYERS_READY; } -static bool32 IsDeoxysOrMewUntradable(u16 species, bool8 isFatefulEncounter) +static bool32 IsDeoxysOrMewUntradable(u16 species, bool8 isModernFatefulEncounter) { if (species == SPECIES_DEOXYS || species == SPECIES_MEW) { - if (!isFatefulEncounter) + if (!isModernFatefulEncounter) return TRUE; } return FALSE; } -int GetUnionRoomTradeMessageId(struct RfuGameCompatibilityData player, struct RfuGameCompatibilityData partner, u16 playerSpecies2, u16 partnerSpecies, u8 requestedType, u16 playerSpecies, bool8 isFatefulEncounter) +int GetUnionRoomTradeMessageId(struct RfuGameCompatibilityData player, struct RfuGameCompatibilityData partner, u16 playerSpecies2, u16 partnerSpecies, u8 requestedType, u16 playerSpecies, bool8 isModernFatefulEncounter) { bool8 playerHasNationalDex = player.hasNationalDex; bool8 playerCanLinkNationally = player.canLinkNationally; @@ -2520,7 +2520,7 @@ int GetUnionRoomTradeMessageId(struct RfuGameCompatibilityData player, struct Rf } // Cannot trade illegitimate Deoxys/Mew - if (IsDeoxysOrMewUntradable(playerSpecies, isFatefulEncounter)) + if (IsDeoxysOrMewUntradable(playerSpecies, isModernFatefulEncounter)) return UR_TRADE_MSG_MON_CANT_BE_TRADED_2; if (partnerSpecies == SPECIES_EGG) @@ -2563,11 +2563,11 @@ int GetUnionRoomTradeMessageId(struct RfuGameCompatibilityData player, struct Rf return UR_TRADE_MSG_NONE; } -int CanRegisterMonForTradingBoard(struct RfuGameCompatibilityData player, u16 species2, u16 species, bool8 isFatefulEncounter) +int CanRegisterMonForTradingBoard(struct RfuGameCompatibilityData player, u16 species2, u16 species, bool8 isModernFatefulEncounter) { bool8 hasNationalDex = player.hasNationalDex; - if (IsDeoxysOrMewUntradable(species, isFatefulEncounter)) + if (IsDeoxysOrMewUntradable(species, isModernFatefulEncounter)) return CANT_REGISTER_MON; if (hasNationalDex) From a937b3221ac54fc48b9dde2294980d6585f7442c Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sat, 11 Feb 2023 23:16:24 -0300 Subject: [PATCH 049/428] Documented Ribbons --- include/pokemon.h | 24 ++++++++++++------------ src/trade.c | 2 +- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/include/pokemon.h b/include/pokemon.h index 5836d2c34bfe..273cb9175f31 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -147,22 +147,22 @@ struct PokemonSubstruct3 /* 0x07 */ u32 isEgg:1; /* 0x07 */ u32 abilityNum:1; - /* 0x08 */ u32 coolRibbon:3; - /* 0x08 */ u32 beautyRibbon:3; - /* 0x08 */ u32 cuteRibbon:3; - /* 0x09 */ u32 smartRibbon:3; - /* 0x09 */ u32 toughRibbon:3; - /* 0x09 */ u32 championRibbon:1; // Shared by bo - /* 0x0A */ u32 winningRibbon:1; - /* 0x0A */ u32 victoryRibbon:1; - /* 0x0A */ u32 artistRibbon:1; - /* 0x0A */ u32 effortRibbon:1; + /* 0x08 */ u32 coolRibbon:3; // Stores the highest contest rank achieved in the Cool category. + /* 0x08 */ u32 beautyRibbon:3; // Stores the highest contest rank achieved in the Beauty category. + /* 0x08 */ u32 cuteRibbon:3; // Stores the highest contest rank achieved in the Cute category. + /* 0x09 */ u32 smartRibbon:3; // Stores the highest contest rank achieved in the Smart category. + /* 0x09 */ u32 toughRibbon:3; // Stores the highest contest rank achieved in the Tough category. + /* 0x09 */ u32 championRibbon:1; // Given when defeating the Champion in both RSE and FRLG. + /* 0x0A */ u32 winningRibbon:1; // Given at the Battle Tower's Level 50 challenge by winning a set of seven battles that extends the current streak to 56 or more. + /* 0x0A */ u32 victoryRibbon:1; // Given at the Battle Tower's Level 100 challenge by winning a set of seven battles that extends the current streak to 56 or more. + /* 0x0A */ u32 artistRibbon:1; // Given at the Contest Hall by winning a Master Rank contest with at least 800 points, and agreeing to have the Pokémon's portrait placed in the museum after being offered. + /* 0x0A */ u32 effortRibbon:1; // Given at Slateport's market to Pokémon with maximum EVs. /* 0x0A */ u32 marineRibbon:1; // Never distributed. /* 0x0A */ u32 landRibbon:1; // Never distributed. /* 0x0A */ u32 skyRibbon:1; // Never distributed. /* 0x0A */ u32 countryRibbon:1; // Distributed during Pokémon Festa '04 and '05 to tournament winners. - /* 0x0B */ u32 nationalRibbon:1; - /* 0x0B */ u32 earthRibbon:1; + /* 0x0B */ u32 nationalRibbon:1; // Given to purified Shadow Pokémon in Colosseum/XD. + /* 0x0B */ u32 earthRibbon:1; // Given to teams that have beaten Mt. Battle's 100-battle challenge in Colosseum/XD. /* 0x0B */ u32 worldRibbon:1; // Distributed during Pokémon Festa '04 and '05 to tournament winners. /* 0x0B */ u32 unusedRibbons:4; // Discarded in Gen 4. diff --git a/src/trade.c b/src/trade.c index 508cde7cb549..9e811888fd0a 100644 --- a/src/trade.c +++ b/src/trade.c @@ -2380,7 +2380,7 @@ static void SaveTradeGiftRibbons(void) { if (gSaveBlock1Ptr->giftRibbons[i] == 0 && sTradeMenu->giftRibbons[i] != 0) { - if (sTradeMenu->giftRibbons[i] < 64) + if (sTradeMenu->giftRibbons[i] < MAX_GIFT_RIBBON) gSaveBlock1Ptr->giftRibbons[i] = sTradeMenu->giftRibbons[i]; } } From d699d55ba319e68b06af0bcbb23c12c182c16ec4 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sun, 12 Feb 2023 01:19:03 -0300 Subject: [PATCH 050/428] Reformatted gNatureStatTable --- src/pokemon.c | 53 +++++++++++++++++++++++++-------------------------- 1 file changed, 26 insertions(+), 27 deletions(-) diff --git a/src/pokemon.c b/src/pokemon.c index e8d334a6ac1f..b4844d740ed9 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -1355,33 +1355,32 @@ const struct SpindaSpot gSpindaSpotGraphics[] = #include "data/pokemon/item_effects.h" const s8 gNatureStatTable[NUM_NATURES][NUM_NATURE_STATS] = -{ - // Atk Def Spd Sp.Atk Sp.Def - [NATURE_HARDY] = { 0, 0, 0, 0, 0}, - [NATURE_LONELY] = { +1, -1, 0, 0, 0}, - [NATURE_BRAVE] = { +1, 0, -1, 0, 0}, - [NATURE_ADAMANT] = { +1, 0, 0, -1, 0}, - [NATURE_NAUGHTY] = { +1, 0, 0, 0, -1}, - [NATURE_BOLD] = { -1, +1, 0, 0, 0}, - [NATURE_DOCILE] = { 0, 0, 0, 0, 0}, - [NATURE_RELAXED] = { 0, +1, -1, 0, 0}, - [NATURE_IMPISH] = { 0, +1, 0, -1, 0}, - [NATURE_LAX] = { 0, +1, 0, 0, -1}, - [NATURE_TIMID] = { -1, 0, +1, 0, 0}, - [NATURE_HASTY] = { 0, -1, +1, 0, 0}, - [NATURE_SERIOUS] = { 0, 0, 0, 0, 0}, - [NATURE_JOLLY] = { 0, 0, +1, -1, 0}, - [NATURE_NAIVE] = { 0, 0, +1, 0, -1}, - [NATURE_MODEST] = { -1, 0, 0, +1, 0}, - [NATURE_MILD] = { 0, -1, 0, +1, 0}, - [NATURE_QUIET] = { 0, 0, -1, +1, 0}, - [NATURE_BASHFUL] = { 0, 0, 0, 0, 0}, - [NATURE_RASH] = { 0, 0, 0, +1, -1}, - [NATURE_CALM] = { -1, 0, 0, 0, +1}, - [NATURE_GENTLE] = { 0, -1, 0, 0, +1}, - [NATURE_SASSY] = { 0, 0, -1, 0, +1}, - [NATURE_CAREFUL] = { 0, 0, 0, -1, +1}, - [NATURE_QUIRKY] = { 0, 0, 0, 0, 0}, +{ // Attack Defense Speed Sp.Atk Sp.Def + [NATURE_HARDY] = { 0, 0, 0, 0, 0 }, + [NATURE_LONELY] = { +1, -1, 0, 0, 0 }, + [NATURE_BRAVE] = { +1, 0, -1, 0, 0 }, + [NATURE_ADAMANT] = { +1, 0, 0, -1, 0 }, + [NATURE_NAUGHTY] = { +1, 0, 0, 0, -1 }, + [NATURE_BOLD] = { -1, +1, 0, 0, 0 }, + [NATURE_DOCILE] = { 0, 0, 0, 0, 0 }, + [NATURE_RELAXED] = { 0, +1, -1, 0, 0 }, + [NATURE_IMPISH] = { 0, +1, 0, -1, 0 }, + [NATURE_LAX] = { 0, +1, 0, 0, -1 }, + [NATURE_TIMID] = { -1, 0, +1, 0, 0 }, + [NATURE_HASTY] = { 0, -1, +1, 0, 0 }, + [NATURE_SERIOUS] = { 0, 0, 0, 0, 0 }, + [NATURE_JOLLY] = { 0, 0, +1, -1, 0 }, + [NATURE_NAIVE] = { 0, 0, +1, 0, -1 }, + [NATURE_MODEST] = { -1, 0, 0, +1, 0 }, + [NATURE_MILD] = { 0, -1, 0, +1, 0 }, + [NATURE_QUIET] = { 0, 0, -1, +1, 0 }, + [NATURE_BASHFUL] = { 0, 0, 0, 0, 0 }, + [NATURE_RASH] = { 0, 0, 0, +1, -1 }, + [NATURE_CALM] = { -1, 0, 0, 0, +1 }, + [NATURE_GENTLE] = { 0, -1, 0, 0, +1 }, + [NATURE_SASSY] = { 0, 0, -1, 0, +1 }, + [NATURE_CAREFUL] = { 0, 0, 0, -1, +1 }, + [NATURE_QUIRKY] = { 0, 0, 0, 0, 0 }, }; #include "data/pokemon/tmhm_learnsets.h" From 0df56b808d3f766f22cd65a0061067df9966e46a Mon Sep 17 00:00:00 2001 From: GriffinR Date: Tue, 14 Feb 2023 11:40:15 -0500 Subject: [PATCH 051/428] Remove duplicate metatile label sections --- include/constants/metatile_labels.h | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/include/constants/metatile_labels.h b/include/constants/metatile_labels.h index 71aac2308a13..9569dad78a85 100644 --- a/include/constants/metatile_labels.h +++ b/include/constants/metatile_labels.h @@ -47,12 +47,6 @@ #define METATILE_Building_PC_Off 0x004 #define METATILE_Building_PC_On 0x005 -// gTileset_PokemonCenter -#define METATILE_PokemonCenter_Door_CableClub 0x264 - -// gTileset_Shop -#define METATILE_Shop_Door_Elevator 0x285 - // gTileset_Petalburg #define METATILE_Petalburg_Door_Littleroot 0x248 #define METATILE_Petalburg_Door_BirchsLab 0x249 @@ -122,6 +116,7 @@ #define METATILE_BrendansMaysHouse_BookOnTable 0x293 // gTileset_Shop +#define METATILE_Shop_Door_Elevator 0x285 #define METATILE_Shop_Laptop1_Normal 0x29D #define METATILE_Shop_Laptop2_Normal 0x2A5 #define METATILE_Shop_Laptop1_Flash 0x258 @@ -294,6 +289,7 @@ #define METATILE_EverGrande_Door_PokemonLeague 0x21D // gTileset_PokemonCenter +#define METATILE_PokemonCenter_Door_CableClub 0x264 #define METATILE_PokemonCenter_Escalator1F_Tile0_Frame0 0x280 #define METATILE_PokemonCenter_Escalator1F_Tile0_Frame1 0x282 #define METATILE_PokemonCenter_Escalator1F_Tile0_Frame2 0x284 From b656565af0ce22d3ad724728b1361a1681bcaf9d Mon Sep 17 00:00:00 2001 From: GriffinR Date: Tue, 14 Feb 2023 11:42:13 -0500 Subject: [PATCH 052/428] Standardize RS mossdeep gym metatile labels --- data/maps/MossdeepCity_Gym/scripts.inc | 48 +++++++++++++------------- include/constants/metatile_labels.h | 18 +++++----- 2 files changed, 33 insertions(+), 33 deletions(-) diff --git a/data/maps/MossdeepCity_Gym/scripts.inc b/data/maps/MossdeepCity_Gym/scripts.inc index b47011d680e3..8892097dee48 100644 --- a/data/maps/MossdeepCity_Gym/scripts.inc +++ b/data/maps/MossdeepCity_Gym/scripts.inc @@ -26,26 +26,26 @@ MossdeepCity_Gym_EventScript_CheckSwitch4:: @ All the below set metatile scripts are leftover from RS and are functionally unused MossdeepCity_Gym_EventScript_SetSwitch1Metatiles:: - setmetatile 5, 5, METATILE_RS_MossdeepGym_RedArrow_Right, FALSE - setmetatile 2, 7, METATILE_RS_MossdeepGym_Switch_Down, TRUE + setmetatile 5, 5, METATILE_RSMossdeepGym_RedArrow_Right, FALSE + setmetatile 2, 7, METATILE_RSMossdeepGym_Switch_Down, TRUE goto MossdeepCity_Gym_EventScript_CheckSwitch2 end MossdeepCity_Gym_EventScript_SetSwitch2Metatiles:: - setmetatile 8, 14, METATILE_RS_MossdeepGym_RedArrow_Right, FALSE - setmetatile 8, 10, METATILE_RS_MossdeepGym_Switch_Down, TRUE + setmetatile 8, 14, METATILE_RSMossdeepGym_RedArrow_Right, FALSE + setmetatile 8, 10, METATILE_RSMossdeepGym_Switch_Down, TRUE goto MossdeepCity_Gym_EventScript_CheckSwitch3 end MossdeepCity_Gym_EventScript_SetSwitch3Metatiles:: - setmetatile 15, 17, METATILE_RS_MossdeepGym_RedArrow_Left, FALSE - setmetatile 17, 15, METATILE_RS_MossdeepGym_Switch_Down, TRUE + setmetatile 15, 17, METATILE_RSMossdeepGym_RedArrow_Left, FALSE + setmetatile 17, 15, METATILE_RSMossdeepGym_Switch_Down, TRUE goto MossdeepCity_Gym_EventScript_CheckSwitch4 end MossdeepCity_Gym_EventScript_SetSwitch4Metatiles:: - setmetatile 1, 23, METATILE_RS_MossdeepGym_RedArrow_Up, FALSE - setmetatile 5, 24, METATILE_RS_MossdeepGym_Switch_Down, TRUE + setmetatile 1, 23, METATILE_RSMossdeepGym_RedArrow_Up, FALSE + setmetatile 5, 24, METATILE_RSMossdeepGym_Switch_Down, TRUE end MossdeepCity_Gym_EventScript_TateAndLiza:: @@ -116,8 +116,8 @@ MossdeepCity_Gym_EventScript_Switch1:: setflag FLAG_MOSSDEEP_GYM_SWITCH_1 applymovement OBJ_EVENT_ID_PLAYER, MossdeepCity_Gym_Movement_WaitAfterSwitchUse waitmovement 0 - setmetatile 5, 5, METATILE_RS_MossdeepGym_RedArrow_Right, FALSE - setmetatile 2, 7, METATILE_RS_MossdeepGym_Switch_Down, TRUE + setmetatile 5, 5, METATILE_RSMossdeepGym_RedArrow_Right, FALSE + setmetatile 2, 7, METATILE_RSMossdeepGym_Switch_Down, TRUE goto MossdeepCity_Gym_EventScript_DrawMapAfterSwitchUsed end @@ -131,8 +131,8 @@ MossdeepCity_Gym_EventScript_ClearSwitch1:: clearflag FLAG_MOSSDEEP_GYM_SWITCH_1 applymovement OBJ_EVENT_ID_PLAYER, MossdeepCity_Gym_Movement_WaitAfterSwitchUse waitmovement 0 - setmetatile 5, 5, METATILE_RS_MossdeepGym_RedArrow_Left, FALSE - setmetatile 2, 7, METATILE_RS_MossdeepGym_Switch_Up, TRUE + setmetatile 5, 5, METATILE_RSMossdeepGym_RedArrow_Left, FALSE + setmetatile 2, 7, METATILE_RSMossdeepGym_Switch_Up, TRUE goto MossdeepCity_Gym_EventScript_DrawMapAfterSwitchUsed end @@ -142,8 +142,8 @@ MossdeepCity_Gym_EventScript_Switch2:: setflag FLAG_MOSSDEEP_GYM_SWITCH_2 applymovement OBJ_EVENT_ID_PLAYER, MossdeepCity_Gym_Movement_WaitAfterSwitchUse waitmovement 0 - setmetatile 8, 14, METATILE_RS_MossdeepGym_RedArrow_Right, FALSE - setmetatile 8, 10, METATILE_RS_MossdeepGym_Switch_Down, TRUE + setmetatile 8, 14, METATILE_RSMossdeepGym_RedArrow_Right, FALSE + setmetatile 8, 10, METATILE_RSMossdeepGym_Switch_Down, TRUE goto MossdeepCity_Gym_EventScript_DrawMapAfterSwitchUsed end @@ -151,8 +151,8 @@ MossdeepCity_Gym_EventScript_ClearSwitch2:: clearflag FLAG_MOSSDEEP_GYM_SWITCH_2 applymovement OBJ_EVENT_ID_PLAYER, MossdeepCity_Gym_Movement_WaitAfterSwitchUse waitmovement 0 - setmetatile 8, 14, METATILE_RS_MossdeepGym_RedArrow_Down, FALSE - setmetatile 8, 10, METATILE_RS_MossdeepGym_Switch_Up, TRUE + setmetatile 8, 14, METATILE_RSMossdeepGym_RedArrow_Down, FALSE + setmetatile 8, 10, METATILE_RSMossdeepGym_Switch_Up, TRUE goto MossdeepCity_Gym_EventScript_DrawMapAfterSwitchUsed end @@ -162,8 +162,8 @@ MossdeepCity_Gym_EventScript_Switch3:: setflag FLAG_MOSSDEEP_GYM_SWITCH_3 applymovement OBJ_EVENT_ID_PLAYER, MossdeepCity_Gym_Movement_WaitAfterSwitchUse waitmovement 0 - setmetatile 15, 17, METATILE_RS_MossdeepGym_RedArrow_Left, FALSE - setmetatile 17, 15, METATILE_RS_MossdeepGym_Switch_Down, TRUE + setmetatile 15, 17, METATILE_RSMossdeepGym_RedArrow_Left, FALSE + setmetatile 17, 15, METATILE_RSMossdeepGym_Switch_Down, TRUE goto MossdeepCity_Gym_EventScript_DrawMapAfterSwitchUsed end @@ -171,8 +171,8 @@ MossdeepCity_Gym_EventScript_ClearSwitch3:: clearflag FLAG_MOSSDEEP_GYM_SWITCH_3 applymovement OBJ_EVENT_ID_PLAYER, MossdeepCity_Gym_Movement_WaitAfterSwitchUse waitmovement 0 - setmetatile 15, 17, METATILE_RS_MossdeepGym_RedArrow_Right, FALSE - setmetatile 17, 15, METATILE_RS_MossdeepGym_Switch_Up, TRUE + setmetatile 15, 17, METATILE_RSMossdeepGym_RedArrow_Right, FALSE + setmetatile 17, 15, METATILE_RSMossdeepGym_Switch_Up, TRUE goto MossdeepCity_Gym_EventScript_DrawMapAfterSwitchUsed end @@ -182,8 +182,8 @@ MossdeepCity_Gym_EventScript_Switch4:: setflag FLAG_MOSSDEEP_GYM_SWITCH_4 applymovement OBJ_EVENT_ID_PLAYER, MossdeepCity_Gym_Movement_WaitAfterSwitchUse waitmovement 0 - setmetatile 1, 23, METATILE_RS_MossdeepGym_RedArrow_Up, FALSE - setmetatile 5, 24, METATILE_RS_MossdeepGym_Switch_Down, TRUE + setmetatile 1, 23, METATILE_RSMossdeepGym_RedArrow_Up, FALSE + setmetatile 5, 24, METATILE_RSMossdeepGym_Switch_Down, TRUE goto MossdeepCity_Gym_EventScript_DrawMapAfterSwitchUsed end @@ -191,8 +191,8 @@ MossdeepCity_Gym_EventScript_ClearSwitch4:: clearflag FLAG_MOSSDEEP_GYM_SWITCH_4 applymovement OBJ_EVENT_ID_PLAYER, MossdeepCity_Gym_Movement_WaitAfterSwitchUse waitmovement 0 - setmetatile 1, 23, METATILE_RS_MossdeepGym_RedArrow_Right, FALSE - setmetatile 5, 24, METATILE_RS_MossdeepGym_Switch_Up, TRUE + setmetatile 1, 23, METATILE_RSMossdeepGym_RedArrow_Right, FALSE + setmetatile 5, 24, METATILE_RSMossdeepGym_Switch_Up, TRUE goto MossdeepCity_Gym_EventScript_DrawMapAfterSwitchUsed end diff --git a/include/constants/metatile_labels.h b/include/constants/metatile_labels.h index 9569dad78a85..76e3d8fde9b2 100644 --- a/include/constants/metatile_labels.h +++ b/include/constants/metatile_labels.h @@ -95,15 +95,15 @@ #define METATILE_PetalburgGym_SlidingDoor_Frame4 0x21C #define METATILE_PetalburgGym_Door 0x224 -// gTileset_MossdeepGym from R/S -#define METATILE_RS_MossdeepGym_RedArrow_Right 0x204 -#define METATILE_RS_MossdeepGym_RedArrow_Left 0x20C -#define METATILE_RS_MossdeepGym_RedArrow_Up 0x20D -#define METATILE_RS_MossdeepGym_RedArrow_Down 0x205 -#define METATILE_RS_MossdeepGym_Switch_Up 0x238 -#define METATILE_RS_MossdeepGym_Switch_Down 0x239 - -// gTileset_MossdeepGym from Emerald +// gTileset_RSMossdeepGym +#define METATILE_RSMossdeepGym_RedArrow_Right 0x204 +#define METATILE_RSMossdeepGym_RedArrow_Left 0x20C +#define METATILE_RSMossdeepGym_RedArrow_Up 0x20D +#define METATILE_RSMossdeepGym_RedArrow_Down 0x205 +#define METATILE_RSMossdeepGym_Switch_Up 0x238 +#define METATILE_RSMossdeepGym_Switch_Down 0x239 + +// gTileset_MossdeepGym #define METATILE_MossdeepGym_YellowArrow_Right 0x250 // gTileset_BrendansMaysHouse From d3d680c1dd72f770075a19c3c82ae549ae5876ae Mon Sep 17 00:00:00 2001 From: GriffinR Date: Tue, 14 Feb 2023 11:43:26 -0500 Subject: [PATCH 053/428] Sort metatile labels alphabetically --- include/constants/metatile_labels.h | 1410 +++++++++++++-------------- 1 file changed, 705 insertions(+), 705 deletions(-) diff --git a/include/constants/metatile_labels.h b/include/constants/metatile_labels.h index 76e3d8fde9b2..c2c018761a31 100644 --- a/include/constants/metatile_labels.h +++ b/include/constants/metatile_labels.h @@ -1,790 +1,790 @@ #ifndef GUARD_METATILE_LABELS_H #define GUARD_METATILE_LABELS_H -// gTileset_General -#define METATILE_General_Grass 0x001 -#define METATILE_General_TallGrass 0x00D -#define METATILE_General_LongGrass 0x015 -#define METATILE_General_TallGrass_TreeUp 0x025 -#define METATILE_General_Grass_TreeUp 0x00E -#define METATILE_General_TallGrass_TreeLeft 0x1C6 -#define METATILE_General_TallGrass_TreeRight 0x1C7 -#define METATILE_General_Grass_TreeLeft 0x1CE -#define METATILE_General_Grass_TreeRight 0x1CF -#define METATILE_General_MuddySlope_Frame0 0x0E8 -#define METATILE_General_MuddySlope_Frame1 0x0E9 -#define METATILE_General_MuddySlope_Frame2 0x0EA -#define METATILE_General_MuddySlope_Frame3 0x0EB -#define METATILE_General_SandPit_Center 0x121 -#define METATILE_General_Door 0x021 -#define METATILE_General_Door_PokeMart 0x041 -#define METATILE_General_Door_PokeCenter 0x061 -#define METATILE_General_Door_Gym 0x1CD -#define METATILE_General_Door_Contest 0x1DB -#define METATILE_General_CaveEntrance_Top 0x09F -#define METATILE_General_CaveEntrance_Bottom 0x0A7 -#define METATILE_General_RockWall_GrassBase 0x079 -#define METATILE_General_RockWall_RockBase 0x07C -#define METATILE_General_RockWall_SandBase 0x091 -#define METATILE_General_CalmWater 0x170 -#define METATILE_General_RoughWater 0x14E -#define METATILE_General_RoughDeepWater 0x14F -#define METATILE_General_ReflectiveWater 0x0A1 -#define METATILE_General_SecretBase_TreeLeft 0x026 -#define METATILE_General_SecretBase_TreeRight 0x027 -#define METATILE_General_SecretBase_VineLeft 0x036 -#define METATILE_General_SecretBase_VineRight 0x037 -#define METATILE_General_RedCaveIndent 0x1A0 -#define METATILE_General_RedCaveOpen 0x1A1 -#define METATILE_General_YellowCaveIndent 0x1A8 -#define METATILE_General_YellowCaveOpen 0x1A9 -#define METATILE_General_BlueCaveIndent 0x1B0 -#define METATILE_General_BlueCaveOpen 0x1B1 - -// gTileset_Building -#define METATILE_Building_TV_Off 0x002 -#define METATILE_Building_TV_On 0x003 -#define METATILE_Building_PC_Off 0x004 -#define METATILE_Building_PC_On 0x005 - -// gTileset_Petalburg -#define METATILE_Petalburg_Door_Littleroot 0x248 -#define METATILE_Petalburg_Door_BirchsLab 0x249 -#define METATILE_Petalburg_Door_Oldale 0x287 - -// gTileset_Rustboro -#define METATILE_Rustboro_Door_Gray 0x21F -#define METATILE_Rustboro_Door_Tan 0x22F - -// gTileset_MauvilleGym -#define METATILE_MauvilleGym_RaisedSwitch 0x205 -#define METATILE_MauvilleGym_PressedSwitch 0x206 -#define METATILE_MauvilleGym_FloorTile 0x21A -#define METATILE_MauvilleGym_GreenBeamH1_On 0x220 -#define METATILE_MauvilleGym_GreenBeamH2_On 0x221 -#define METATILE_MauvilleGym_GreenBeamH3_On 0x228 -#define METATILE_MauvilleGym_GreenBeamH4_On 0x229 -#define METATILE_MauvilleGym_GreenBeamH1_Off 0x230 -#define METATILE_MauvilleGym_GreenBeamH2_Off 0x231 -#define METATILE_MauvilleGym_GreenBeamH3_Off 0x238 -#define METATILE_MauvilleGym_GreenBeamH4_Off 0x239 -#define METATILE_MauvilleGym_RedBeamH1_On 0x222 -#define METATILE_MauvilleGym_RedBeamH2_On 0x223 -#define METATILE_MauvilleGym_RedBeamH3_On 0x22A -#define METATILE_MauvilleGym_RedBeamH4_On 0x22B -#define METATILE_MauvilleGym_RedBeamH1_Off 0x232 -#define METATILE_MauvilleGym_RedBeamH2_Off 0x233 -#define METATILE_MauvilleGym_RedBeamH3_Off 0x23A -#define METATILE_MauvilleGym_RedBeamH4_Off 0x23B -#define METATILE_MauvilleGym_GreenBeamV1_On 0x240 -#define METATILE_MauvilleGym_GreenBeamV2_On 0x248 -#define METATILE_MauvilleGym_RedBeamV1_On 0x241 -#define METATILE_MauvilleGym_RedBeamV2_On 0x249 -#define METATILE_MauvilleGym_PoleTop_On 0x250 -#define METATILE_MauvilleGym_PoleTop_Off 0x251 -#define METATILE_MauvilleGym_PoleBottom_On 0x242 -#define METATILE_MauvilleGym_PoleBottom_Off 0x243 - -// gTileset_PetalburgGym -#define METATILE_PetalburgGym_RoomEntrance_Left 0x210 -#define METATILE_PetalburgGym_RoomEntrance_Right 0x211 -#define METATILE_PetalburgGym_SlidingDoor_Frame0 0x218 -#define METATILE_PetalburgGym_SlidingDoor_Frame1 0x219 -#define METATILE_PetalburgGym_SlidingDoor_Frame2 0x21A -#define METATILE_PetalburgGym_SlidingDoor_Frame3 0x21B -#define METATILE_PetalburgGym_SlidingDoor_Frame4 0x21C -#define METATILE_PetalburgGym_Door 0x224 - -// gTileset_RSMossdeepGym -#define METATILE_RSMossdeepGym_RedArrow_Right 0x204 -#define METATILE_RSMossdeepGym_RedArrow_Left 0x20C -#define METATILE_RSMossdeepGym_RedArrow_Up 0x20D -#define METATILE_RSMossdeepGym_RedArrow_Down 0x205 -#define METATILE_RSMossdeepGym_Switch_Up 0x238 -#define METATILE_RSMossdeepGym_Switch_Down 0x239 - -// gTileset_MossdeepGym -#define METATILE_MossdeepGym_YellowArrow_Right 0x250 - -// gTileset_BrendansMaysHouse -#define METATILE_BrendansMaysHouse_BrendanPC_Off 0x25A -#define METATILE_BrendansMaysHouse_BrendanPC_On 0x27F -#define METATILE_BrendansMaysHouse_MayPC_Off 0x259 -#define METATILE_BrendansMaysHouse_MayPC_On 0x27E -#define METATILE_BrendansMaysHouse_MovingBox_Closed 0x268 -#define METATILE_BrendansMaysHouse_MovingBox_Open 0x270 -#define METATILE_BrendansMaysHouse_BookOnTable 0x293 - -// gTileset_Shop -#define METATILE_Shop_Door_Elevator 0x285 -#define METATILE_Shop_Laptop1_Normal 0x29D -#define METATILE_Shop_Laptop2_Normal 0x2A5 -#define METATILE_Shop_Laptop1_Flash 0x258 -#define METATILE_Shop_Laptop2_Flash 0x260 - -// gTileset_BattleFrontier -#define METATILE_BattleFrontier_Door_Elevator 0x20E -#define METATILE_BattleFrontier_Door_MultiCorridor 0x2AD -#define METATILE_BattleFrontier_CorridorOpenDoor_Top 0x207 -#define METATILE_BattleFrontier_CorridorOpenDoor_Bottom 0x20F -#define METATILE_BattleFrontier_Elevator_Top0 0x329 -#define METATILE_BattleFrontier_Elevator_Top1 0x32A -#define METATILE_BattleFrontier_Elevator_Top2 0x32B -#define METATILE_BattleFrontier_Elevator_Mid0 0x331 -#define METATILE_BattleFrontier_Elevator_Mid1 0x332 -#define METATILE_BattleFrontier_Elevator_Mid2 0x333 -#define METATILE_BattleFrontier_Elevator_Bottom0 0x339 -#define METATILE_BattleFrontier_Elevator_Bottom1 0x33A -#define METATILE_BattleFrontier_Elevator_Bottom2 0x33B +// gTileset_BattleArena +#define METATILE_BattleArena_Door 0x21B -// gTileset_BattleFrontierOutsideWest -#define METATILE_BattleFrontierOutsideWest_Door_BattleFactory 0x263 -#define METATILE_BattleFrontierOutsideWest_Door_BattleDome 0x28A -#define METATILE_BattleFrontierOutsideWest_Door_Sliding 0x396 -#define METATILE_BattleFrontierOutsideWest_Door 0x3FC +// gTileset_BattleDome +#define METATILE_BattleDome_Door_Corridor 0x25E +#define METATILE_BattleDome_Door_Lobby 0x209 +#define METATILE_BattleDome_Door_PreBattleRoom 0x20A // gTileset_BattleFrontierOutsideEast +#define METATILE_BattleFrontierOutsideEast_Door 0x3FC #define METATILE_BattleFrontierOutsideEast_Door_BattleArena 0x291 #define METATILE_BattleFrontierOutsideEast_Door_BattleTower 0x329 #define METATILE_BattleFrontierOutsideEast_Door_Sliding 0x396 -#define METATILE_BattleFrontierOutsideEast_Door 0x3FC -// gTileset_BattleDome -#define METATILE_BattleDome_Door_Lobby 0x209 -#define METATILE_BattleDome_Door_PreBattleRoom 0x20A -#define METATILE_BattleDome_Door_Corridor 0x25E +// gTileset_BattleFrontierOutsideWest +#define METATILE_BattleFrontierOutsideWest_Door 0x3FC +#define METATILE_BattleFrontierOutsideWest_Door_BattleDome 0x28A +#define METATILE_BattleFrontierOutsideWest_Door_BattleFactory 0x263 +#define METATILE_BattleFrontierOutsideWest_Door_Sliding 0x396 -// gTileset_BattleArena -#define METATILE_BattleArena_Door 0x21B +// gTileset_BattleFrontier +#define METATILE_BattleFrontier_CorridorOpenDoor_Bottom 0x20F +#define METATILE_BattleFrontier_CorridorOpenDoor_Top 0x207 +#define METATILE_BattleFrontier_Door_Elevator 0x20E +#define METATILE_BattleFrontier_Door_MultiCorridor 0x2AD +#define METATILE_BattleFrontier_Elevator_Bottom0 0x339 +#define METATILE_BattleFrontier_Elevator_Bottom1 0x33A +#define METATILE_BattleFrontier_Elevator_Bottom2 0x33B +#define METATILE_BattleFrontier_Elevator_Mid0 0x331 +#define METATILE_BattleFrontier_Elevator_Mid1 0x332 +#define METATILE_BattleFrontier_Elevator_Mid2 0x333 +#define METATILE_BattleFrontier_Elevator_Top0 0x329 +#define METATILE_BattleFrontier_Elevator_Top1 0x32A +#define METATILE_BattleFrontier_Elevator_Top2 0x32B // gTileset_BattlePalace #define METATILE_BattlePalace_Door 0x219 -// gTileset_Cave -#define METATILE_Cave_EntranceCover 0x229 -#define METATILE_Cave_CrackedFloor_Hole 0x206 -#define METATILE_Cave_CrackedFloor 0x22F -#define METATILE_Cave_SealedChamberEntrance_TopLeft 0x22A -#define METATILE_Cave_SealedChamberEntrance_TopMid 0x22B -#define METATILE_Cave_SealedChamberEntrance_TopRight 0x22C -#define METATILE_Cave_SealedChamberEntrance_BottomLeft 0x232 -#define METATILE_Cave_SealedChamberEntrance_BottomMid 0x233 -#define METATILE_Cave_SealedChamberEntrance_BottomRight 0x234 -#define METATILE_Cave_SealedChamberBraille_Mid 0x235 -#define METATILE_Cave_ShoalCave_DirtPile_Large 0x358 -#define METATILE_Cave_ShoalCave_DirtPile_Small 0x35A -#define METATILE_Cave_ShoalCave_BlueStone_Large 0x359 -#define METATILE_Cave_ShoalCave_BlueStone_Small 0x35B +// gTileset_BattlePike +#define METATILE_BattlePike_CurtainFrames_Start 0x201 +#define METATILE_BattlePike_Curtain_Stage0_Tile0 0x24A +#define METATILE_BattlePike_Curtain_Stage0_Tile1 0x251 +#define METATILE_BattlePike_Curtain_Stage0_Tile2 0x252 +#define METATILE_BattlePike_Curtain_Stage0_Tile3 0x253 +#define METATILE_BattlePike_Curtain_Stage0_Tile4 0x259 +#define METATILE_BattlePike_Curtain_Stage0_Tile5 0x25A +#define METATILE_BattlePike_Curtain_Stage0_Tile6 0x25B +#define METATILE_BattlePike_Curtain_Stage1_Tile0 0x22A +#define METATILE_BattlePike_Curtain_Stage1_Tile1 0x231 +#define METATILE_BattlePike_Curtain_Stage1_Tile2 0x232 +#define METATILE_BattlePike_Curtain_Stage1_Tile3 0x233 +#define METATILE_BattlePike_Curtain_Stage1_Tile4 0x239 +#define METATILE_BattlePike_Curtain_Stage1_Tile5 0x23A +#define METATILE_BattlePike_Curtain_Stage1_Tile6 0x23B +#define METATILE_BattlePike_Curtain_Stage2_Tile0 0x20A +#define METATILE_BattlePike_Curtain_Stage2_Tile1 0x211 +#define METATILE_BattlePike_Curtain_Stage2_Tile2 0x212 +#define METATILE_BattlePike_Curtain_Stage2_Tile3 0x213 +#define METATILE_BattlePike_Curtain_Stage2_Tile4 0x219 +#define METATILE_BattlePike_Curtain_Stage2_Tile5 0x21A +#define METATILE_BattlePike_Curtain_Stage2_Tile6 0x21B +#define METATILE_BattlePike_Curtain_Stage3_Tile0 0x2AB +#define METATILE_BattlePike_Curtain_Stage3_Tile1 0x2B2 +#define METATILE_BattlePike_Curtain_Stage3_Tile2 0x2B3 +#define METATILE_BattlePike_Curtain_Stage3_Tile3 0x2B4 +#define METATILE_BattlePike_Curtain_Stage3_Tile4 0x2BA +#define METATILE_BattlePike_Curtain_Stage3_Tile5 0x2BB +#define METATILE_BattlePike_Curtain_Stage3_Tile6 0x2BC -// gTileset_Pacifidlog -#define METATILE_Pacifidlog_Door 0x21A -#define METATILE_Pacifidlog_FloatingLogs_HorizontalLeft 0x250 -#define METATILE_Pacifidlog_FloatingLogs_HorizontalRight 0x251 -#define METATILE_Pacifidlog_HalfSubmergedLogs_HorizontalLeft 0x252 -#define METATILE_Pacifidlog_HalfSubmergedLogs_HorizontalRight 0x253 -#define METATILE_Pacifidlog_SubmergedLogs_HorizontalLeft 0x254 -#define METATILE_Pacifidlog_SubmergedLogs_HorizontalRight 0x255 -#define METATILE_Pacifidlog_FloatingLogs_VerticalTop 0x258 -#define METATILE_Pacifidlog_FloatingLogs_VerticalBottom 0x260 -#define METATILE_Pacifidlog_HalfSubmergedLogs_VerticalTop 0x259 -#define METATILE_Pacifidlog_HalfSubmergedLogs_VerticalBottom 0x261 -#define METATILE_Pacifidlog_SubmergedLogs_VerticalTop 0x25A -#define METATILE_Pacifidlog_SubmergedLogs_VerticalBottom 0x262 -#define METATILE_Pacifidlog_SkyPillar_CrackedFloor_Hole 0x237 -#define METATILE_Pacifidlog_SkyPillar_DoorOpen_Top 0x2AA -#define METATILE_Pacifidlog_SkyPillar_DoorOpen_Bottom 0x2B2 +// gTileset_BattlePyramid +#define METATILE_BattlePyramid_Exit 0x28E +#define METATILE_BattlePyramid_Floor 0x28D -// gTileset_Fortree -#define METATILE_Fortree_LongGrass_Root 0x208 -#define METATILE_Fortree_BridgeOverGrass_Raised 0x24E -#define METATILE_Fortree_BridgeOverGrass_Lowered 0x24F -#define METATILE_Fortree_BridgeOverTrees_Raised 0x256 -#define METATILE_Fortree_BridgeOverTrees_Lowered 0x257 -#define METATILE_Fortree_SecretBase_Shrub 0x271 -#define METATILE_Fortree_SecretBase_ShrubOpen 0x278 -#define METATILE_Fortree_SecretBase_LongGrass_TopLeft 0x279 -#define METATILE_Fortree_SecretBase_LongGrass_TopMid 0x27A -#define METATILE_Fortree_SecretBase_LongGrass_TopRight 0x27B -#define METATILE_Fortree_SecretBase_LongGrass_BottomLeft 0x281 -#define METATILE_Fortree_SecretBase_LongGrass_BottomMid 0x282 -#define METATILE_Fortree_SecretBase_LongGrass_BottomRight 0x283 -#define METATILE_Fortree_WoodBridge1_Top 0x297 -#define METATILE_Fortree_WoodBridge1_Bottom 0x29F +// gTileset_BattleTent +#define METATILE_BattleTent_Door 0x26B -// gTileset_Sootopolis -#define METATILE_Sootopolis_Door 0x21E -#define METATILE_Sootopolis_Door_PeakedRoof 0x21C -#define METATILE_Sootopolis_Door_Closed 0x248 -#define METATILE_Sootopolis_GymDoor_Closed 0x250 -#define METATILE_Sootopolis_RoughWater 0x290 +// gTileset_BikeShop +#define METATILE_BikeShop_Barrier_Blue_Bottom 0x2CF +#define METATILE_BikeShop_Barrier_Blue_BottomMid 0x2C7 +#define METATILE_BikeShop_Barrier_Blue_Top 0x2B7 +#define METATILE_BikeShop_Barrier_Blue_TopMid 0x2BF +#define METATILE_BikeShop_Barrier_Green_Bottom 0x2CE +#define METATILE_BikeShop_Barrier_Green_BottomMid 0x2C6 +#define METATILE_BikeShop_Barrier_Green_Top 0x2B6 +#define METATILE_BikeShop_Barrier_Green_TopMid 0x2BE +#define METATILE_BikeShop_Barrier_Hidden_Bottom 0x271 +#define METATILE_BikeShop_Barrier_Hidden_Top 0x269 +#define METATILE_BikeShop_Button_Blue 0x236 +#define METATILE_BikeShop_Button_Green 0x22E +#define METATILE_BikeShop_Button_Pressed 0x24F +#define METATILE_BikeShop_Floor_Shadow_Top 0x26D +#define METATILE_BikeShop_Generator_Off_Tile0 0x2F0 +#define METATILE_BikeShop_Generator_Off_Tile1 0x2F1 +#define METATILE_BikeShop_Generator_Off_Tile2 0x2F2 +#define METATILE_BikeShop_Generator_Off_Tile3 0x2F3 +#define METATILE_BikeShop_Generator_Off_Tile4 0x2F4 +#define METATILE_BikeShop_Generator_Off_Tile5 0x2F5 +#define METATILE_BikeShop_Generator_Off_Tile6 0x2F6 +#define METATILE_BikeShop_Generator_Off_Tile7 0x2F7 +#define METATILE_BikeShop_Wall_Edge_Top 0x281 -// gTileset_SootopolisGym -#define METATILE_SootopolisGym_Ice_Cracked 0x20E -#define METATILE_SootopolisGym_Ice_Broken 0x206 -#define METATILE_SootopolisGym_Stairs 0x207 +// gTileset_BrendansMaysHouse +#define METATILE_BrendansMaysHouse_BookOnTable 0x293 +#define METATILE_BrendansMaysHouse_BrendanPC_Off 0x25A +#define METATILE_BrendansMaysHouse_BrendanPC_On 0x27F +#define METATILE_BrendansMaysHouse_MayPC_Off 0x259 +#define METATILE_BrendansMaysHouse_MayPC_On 0x27E +#define METATILE_BrendansMaysHouse_MovingBox_Closed 0x268 +#define METATILE_BrendansMaysHouse_MovingBox_Open 0x270 -// gTileset_Fallarbor -#define METATILE_Fallarbor_AshGrass 0x20A -#define METATILE_Fallarbor_BrownCaveIndent 0x208 -#define METATILE_Fallarbor_BrownCaveOpen 0x210 -#define METATILE_Fallarbor_NormalGrass 0x212 -#define METATILE_Fallarbor_AshField 0x218 -#define METATILE_Fallarbor_BrownCaveEntrance_Top 0x259 -#define METATILE_Fallarbor_BrownCaveEntrance_Bottom 0x261 -#define METATILE_Fallarbor_RedCaveEntrance_Top 0x347 -#define METATILE_Fallarbor_RedCaveEntrance_Bottom 0x34F -#define METATILE_Fallarbor_BrownRockWall 0x265 -#define METATILE_Fallarbor_RedRockWall 0x269 -#define METATILE_Fallarbor_Door_LightRoof 0x2A5 -#define METATILE_Fallarbor_Door_DarkRoof 0x2F7 -#define METATILE_Fallarbor_Door_BattleTent 0x36C +// gTileset_Building +#define METATILE_Building_PC_Off 0x004 +#define METATILE_Building_PC_On 0x005 +#define METATILE_Building_TV_Off 0x002 +#define METATILE_Building_TV_On 0x003 -// gTileset_Lavaridge -#define METATILE_Lavaridge_NormalGrass 0x206 -#define METATILE_Lavaridge_AshGrass 0x207 -#define METATILE_Lavaridge_LavaField 0x271 -#define METATILE_Lavaridge_RockWall 0x274 -#define METATILE_Lavaridge_CaveEntrance_Top 0x256 -#define METATILE_Lavaridge_CaveEntrance_Bottom 0x25E +// gTileset_Cave +#define METATILE_Cave_CrackedFloor 0x22F +#define METATILE_Cave_CrackedFloor_Hole 0x206 +#define METATILE_Cave_EntranceCover 0x229 +#define METATILE_Cave_SealedChamberBraille_Mid 0x235 +#define METATILE_Cave_SealedChamberEntrance_BottomLeft 0x232 +#define METATILE_Cave_SealedChamberEntrance_BottomMid 0x233 +#define METATILE_Cave_SealedChamberEntrance_BottomRight 0x234 +#define METATILE_Cave_SealedChamberEntrance_TopLeft 0x22A +#define METATILE_Cave_SealedChamberEntrance_TopMid 0x22B +#define METATILE_Cave_SealedChamberEntrance_TopRight 0x22C +#define METATILE_Cave_ShoalCave_BlueStone_Large 0x359 +#define METATILE_Cave_ShoalCave_BlueStone_Small 0x35B +#define METATILE_Cave_ShoalCave_DirtPile_Large 0x358 +#define METATILE_Cave_ShoalCave_DirtPile_Small 0x35A -// gTileset_Mauville -#define METATILE_Mauville_Door 0x2AC -#define METATILE_Mauville_Door_CyclingRoad 0x289 -#define METATILE_Mauville_Door_Verdanturf 0x3A1 -#define METATILE_Mauville_Door_BattleTent 0x3D4 -#define METATILE_Mauville_DeepSand_Center 0x251 -#define METATILE_Mauville_DeepSand_BottomMid 0x259 -#define METATILE_Mauville_MirageTower_Tile0 0x3D8 -#define METATILE_Mauville_MirageTower_Tile1 0x3D9 -#define METATILE_Mauville_MirageTower_Tile2 0x3DA -#define METATILE_Mauville_MirageTower_Tile3 0x3E0 -#define METATILE_Mauville_MirageTower_Tile4 0x3E1 -#define METATILE_Mauville_MirageTower_Tile5 0x3E2 -#define METATILE_Mauville_MirageTower_Tile6 0x3E8 -#define METATILE_Mauville_MirageTower_Tile7 0x3E9 -#define METATILE_Mauville_MirageTower_Tile8 0x3EA -#define METATILE_Mauville_MirageTower_Tile9 0x3F0 -#define METATILE_Mauville_MirageTower_TileA 0x3F1 -#define METATILE_Mauville_MirageTower_TileB 0x3F2 -#define METATILE_Mauville_MirageTower_TileC 0x3DB -#define METATILE_Mauville_MirageTower_TileD 0x3DC -#define METATILE_Mauville_MirageTower_TileE 0x3DD -#define METATILE_Mauville_MirageTower_TileF 0x3E3 -#define METATILE_Mauville_MirageTower_Tile10 0x3E4 -#define METATILE_Mauville_MirageTower_Tile11 0x3E5 +// gTileset_Contest +#define METATILE_Contest_CounterFlap_Bottom 0x2D9 +#define METATILE_Contest_CounterFlap_Top 0x2D1 +#define METATILE_Contest_FloorShadow 0x261 +#define METATILE_Contest_WallShadow 0x221 // gTileset_Dewford #define METATILE_Dewford_Door 0x225 #define METATILE_Dewford_Door_BattleTower 0x25D -// gTileset_Slateport -#define METATILE_Slateport_Door 0x2DC -#define METATILE_Slateport_Door_BattleTent 0x393 - -// gTileset_Mossdeep -#define METATILE_Mossdeep_Door 0x2A1 -#define METATILE_Mossdeep_Door_SpaceCenter 0x2ED +// gTileset_EliteFour +#define METATILE_EliteFour_EntryDoor_ClosedBottom 0x20E +#define METATILE_EliteFour_EntryDoor_ClosedTop 0x206 +#define METATILE_EliteFour_LeftSpotlightOff 0x2DD +#define METATILE_EliteFour_OpenDoorChampion_Frame 0x346 +#define METATILE_EliteFour_OpenDoorChampion_Opening 0x347 +#define METATILE_EliteFour_OpenDoor_Frame 0x344 +#define METATILE_EliteFour_OpenDoor_Opening 0x345 +#define METATILE_EliteFour_RightSpotlightOff 0x2DE // gTileset_EverGrande #define METATILE_EverGrande_Door_PokemonLeague 0x21D -// gTileset_PokemonCenter -#define METATILE_PokemonCenter_Door_CableClub 0x264 -#define METATILE_PokemonCenter_Escalator1F_Tile0_Frame0 0x280 -#define METATILE_PokemonCenter_Escalator1F_Tile0_Frame1 0x282 -#define METATILE_PokemonCenter_Escalator1F_Tile0_Frame2 0x284 -#define METATILE_PokemonCenter_Escalator1F_Tile1_Frame0 0x281 -#define METATILE_PokemonCenter_Escalator1F_Tile1_Frame1 0x283 -#define METATILE_PokemonCenter_Escalator1F_Tile1_Frame2 0x285 -#define METATILE_PokemonCenter_Escalator1F_Tile2_Frame0 0x288 -#define METATILE_PokemonCenter_Escalator1F_Tile2_Frame1 0x28A -#define METATILE_PokemonCenter_Escalator1F_Tile2_Frame2 0x28C -#define METATILE_PokemonCenter_Escalator1F_Tile3_Frame0 0x289 -#define METATILE_PokemonCenter_Escalator1F_Tile3_Frame1 0x28B -#define METATILE_PokemonCenter_Escalator1F_Tile3_Frame2 0x28D -#define METATILE_PokemonCenter_Escalator2F_Tile0_Frame0 0x2A0 -#define METATILE_PokemonCenter_Escalator2F_Tile0_Frame1 0x2A2 -#define METATILE_PokemonCenter_Escalator2F_Tile0_Frame2 0x2A4 -#define METATILE_PokemonCenter_Escalator2F_Tile1_Frame0 0x2A1 -#define METATILE_PokemonCenter_Escalator2F_Tile1_Frame1 0x2A3 -#define METATILE_PokemonCenter_Escalator2F_Tile1_Frame2 0x2A5 -#define METATILE_PokemonCenter_Escalator2F_Tile2_Frame0 0x2A8 -#define METATILE_PokemonCenter_Escalator2F_Tile2_Frame1 0x2AA -#define METATILE_PokemonCenter_Escalator2F_Tile2_Frame2 0x2AC -#define METATILE_PokemonCenter_Floor_ShadowTop_Alt 0x2DC -#define METATILE_PokemonCenter_Floor_Plain_Alt 0x2E4 -#define METATILE_PokemonCenter_Floor_ShadowTop 0x21E -#define METATILE_PokemonCenter_CounterBarrier 0x25D +// gTileset_Facility +#define METATILE_Facility_DataPad 0x3E4 +#define METATILE_Facility_NewMauvilleDoor_Closed_Tile0 0x314 +#define METATILE_Facility_NewMauvilleDoor_Closed_Tile1 0x315 +#define METATILE_Facility_NewMauvilleDoor_Closed_Tile2 0x316 +#define METATILE_Facility_NewMauvilleDoor_Closed_Tile3 0x31C +#define METATILE_Facility_NewMauvilleDoor_Closed_Tile4 0x31D +#define METATILE_Facility_NewMauvilleDoor_Closed_Tile5 0x31E +#define METATILE_Facility_NewMauvilleDoor_Open_Tile0 0x2C3 +#define METATILE_Facility_NewMauvilleDoor_Open_Tile1 0x2C4 +#define METATILE_Facility_NewMauvilleDoor_Open_Tile2 0x2C5 +#define METATILE_Facility_NewMauvilleDoor_Open_Tile3 0x2CB +#define METATILE_Facility_NewMauvilleDoor_Open_Tile4 0x2CC +#define METATILE_Facility_NewMauvilleDoor_Open_Tile5 0x2CD -// gTileset_InsideOfTruck -#define METATILE_InsideOfTruck_ExitLight_Top 0x208 -#define METATILE_InsideOfTruck_ExitLight_Mid 0x210 -#define METATILE_InsideOfTruck_ExitLight_Bottom 0x218 -#define METATILE_InsideOfTruck_DoorClosedFloor_Top 0x20D -#define METATILE_InsideOfTruck_DoorClosedFloor_Mid 0x215 -#define METATILE_InsideOfTruck_DoorClosedFloor_Bottom 0x21D +// gTileset_Fallarbor +#define METATILE_Fallarbor_AshField 0x218 +#define METATILE_Fallarbor_AshGrass 0x20A +#define METATILE_Fallarbor_BrownCaveEntrance_Bottom 0x261 +#define METATILE_Fallarbor_BrownCaveEntrance_Top 0x259 +#define METATILE_Fallarbor_BrownCaveIndent 0x208 +#define METATILE_Fallarbor_BrownCaveOpen 0x210 +#define METATILE_Fallarbor_BrownRockWall 0x265 +#define METATILE_Fallarbor_Door_BattleTent 0x36C +#define METATILE_Fallarbor_Door_DarkRoof 0x2F7 +#define METATILE_Fallarbor_Door_LightRoof 0x2A5 +#define METATILE_Fallarbor_NormalGrass 0x212 +#define METATILE_Fallarbor_RedCaveEntrance_Bottom 0x34F +#define METATILE_Fallarbor_RedCaveEntrance_Top 0x347 +#define METATILE_Fallarbor_RedRockWall 0x269 -// gTileset_MossdeepGameCorner -#define METATILE_MossdeepGameCorner_CounterOpen_Top 0x22C -#define METATILE_MossdeepGameCorner_CounterOpen_Bottom 0x234 -#define METATILE_MossdeepGameCorner_CounterClosed_Top 0x22A -#define METATILE_MossdeepGameCorner_CounterClosed_Bottom 0x232 +// gTileset_Fortree +#define METATILE_Fortree_BridgeOverGrass_Lowered 0x24F +#define METATILE_Fortree_BridgeOverGrass_Raised 0x24E +#define METATILE_Fortree_BridgeOverTrees_Lowered 0x257 +#define METATILE_Fortree_BridgeOverTrees_Raised 0x256 +#define METATILE_Fortree_LongGrass_Root 0x208 +#define METATILE_Fortree_SecretBase_LongGrass_BottomLeft 0x281 +#define METATILE_Fortree_SecretBase_LongGrass_BottomMid 0x282 +#define METATILE_Fortree_SecretBase_LongGrass_BottomRight 0x283 +#define METATILE_Fortree_SecretBase_LongGrass_TopLeft 0x279 +#define METATILE_Fortree_SecretBase_LongGrass_TopMid 0x27A +#define METATILE_Fortree_SecretBase_LongGrass_TopRight 0x27B +#define METATILE_Fortree_SecretBase_Shrub 0x271 +#define METATILE_Fortree_SecretBase_ShrubOpen 0x278 +#define METATILE_Fortree_WoodBridge1_Bottom 0x29F +#define METATILE_Fortree_WoodBridge1_Top 0x297 -// gTileset_EliteFour -#define METATILE_EliteFour_OpenDoor_Frame 0x344 -#define METATILE_EliteFour_OpenDoor_Opening 0x345 -#define METATILE_EliteFour_OpenDoorChampion_Frame 0x346 -#define METATILE_EliteFour_OpenDoorChampion_Opening 0x347 -#define METATILE_EliteFour_LeftSpotlightOff 0x2DD -#define METATILE_EliteFour_RightSpotlightOff 0x2DE -#define METATILE_EliteFour_EntryDoor_ClosedTop 0x206 -#define METATILE_EliteFour_EntryDoor_ClosedBottom 0x20E +// gTileset_General +#define METATILE_General_BlueCaveIndent 0x1B0 +#define METATILE_General_BlueCaveOpen 0x1B1 +#define METATILE_General_CalmWater 0x170 +#define METATILE_General_CaveEntrance_Bottom 0x0A7 +#define METATILE_General_CaveEntrance_Top 0x09F +#define METATILE_General_Door 0x021 +#define METATILE_General_Door_Contest 0x1DB +#define METATILE_General_Door_Gym 0x1CD +#define METATILE_General_Door_PokeCenter 0x061 +#define METATILE_General_Door_PokeMart 0x041 +#define METATILE_General_Grass 0x001 +#define METATILE_General_Grass_TreeLeft 0x1CE +#define METATILE_General_Grass_TreeRight 0x1CF +#define METATILE_General_Grass_TreeUp 0x00E +#define METATILE_General_LongGrass 0x015 +#define METATILE_General_MuddySlope_Frame0 0x0E8 +#define METATILE_General_MuddySlope_Frame1 0x0E9 +#define METATILE_General_MuddySlope_Frame2 0x0EA +#define METATILE_General_MuddySlope_Frame3 0x0EB +#define METATILE_General_RedCaveIndent 0x1A0 +#define METATILE_General_RedCaveOpen 0x1A1 +#define METATILE_General_ReflectiveWater 0x0A1 +#define METATILE_General_RockWall_GrassBase 0x079 +#define METATILE_General_RockWall_RockBase 0x07C +#define METATILE_General_RockWall_SandBase 0x091 +#define METATILE_General_RoughDeepWater 0x14F +#define METATILE_General_RoughWater 0x14E +#define METATILE_General_SandPit_Center 0x121 +#define METATILE_General_SecretBase_TreeLeft 0x026 +#define METATILE_General_SecretBase_TreeRight 0x027 +#define METATILE_General_SecretBase_VineLeft 0x036 +#define METATILE_General_SecretBase_VineRight 0x037 +#define METATILE_General_TallGrass 0x00D +#define METATILE_General_TallGrass_TreeLeft 0x1C6 +#define METATILE_General_TallGrass_TreeRight 0x1C7 +#define METATILE_General_TallGrass_TreeUp 0x025 +#define METATILE_General_YellowCaveIndent 0x1A8 +#define METATILE_General_YellowCaveOpen 0x1A9 + +// gTileset_GenericBuilding +#define METATILE_GenericBuilding_TableEdge 0x2F1 +#define METATILE_GenericBuilding_TrickHouse_Door_Closed 0x21B +#define METATILE_GenericBuilding_TrickHouse_Stairs_Down 0x219 + +// gTileset_InsideOfTruck +#define METATILE_InsideOfTruck_DoorClosedFloor_Bottom 0x21D +#define METATILE_InsideOfTruck_DoorClosedFloor_Mid 0x215 +#define METATILE_InsideOfTruck_DoorClosedFloor_Top 0x20D +#define METATILE_InsideOfTruck_ExitLight_Bottom 0x218 +#define METATILE_InsideOfTruck_ExitLight_Mid 0x210 +#define METATILE_InsideOfTruck_ExitLight_Top 0x208 // gTileset_InsideShip -#define METATILE_InsideShip_IntactDoor_Bottom_Unlocked 0x22B -#define METATILE_InsideShip_IntactDoor_Bottom_Locked 0x233 -#define METATILE_InsideShip_DoorIndent_Unlocked 0x21A -#define METATILE_InsideShip_DoorIndent_Locked 0x234 -#define METATILE_InsideShip_IntactDoor_Bottom_Interior 0x297 +#define METATILE_InsideShip_DoorIndent_Locked 0x234 +#define METATILE_InsideShip_DoorIndent_Unlocked 0x21A +#define METATILE_InsideShip_IntactDoor_Bottom_Interior 0x297 +#define METATILE_InsideShip_IntactDoor_Bottom_Locked 0x233 +#define METATILE_InsideShip_IntactDoor_Bottom_Unlocked 0x22B -// gTileset_BattlePike -#define METATILE_BattlePike_CurtainFrames_Start 0x201 -#define METATILE_BattlePike_Curtain_Stage0_Tile0 0x24A -#define METATILE_BattlePike_Curtain_Stage0_Tile1 0x251 -#define METATILE_BattlePike_Curtain_Stage0_Tile2 0x252 -#define METATILE_BattlePike_Curtain_Stage0_Tile3 0x253 -#define METATILE_BattlePike_Curtain_Stage0_Tile4 0x259 -#define METATILE_BattlePike_Curtain_Stage0_Tile5 0x25A -#define METATILE_BattlePike_Curtain_Stage0_Tile6 0x25B -#define METATILE_BattlePike_Curtain_Stage1_Tile0 0x22A -#define METATILE_BattlePike_Curtain_Stage1_Tile1 0x231 -#define METATILE_BattlePike_Curtain_Stage1_Tile2 0x232 -#define METATILE_BattlePike_Curtain_Stage1_Tile3 0x233 -#define METATILE_BattlePike_Curtain_Stage1_Tile4 0x239 -#define METATILE_BattlePike_Curtain_Stage1_Tile5 0x23A -#define METATILE_BattlePike_Curtain_Stage1_Tile6 0x23B -#define METATILE_BattlePike_Curtain_Stage2_Tile0 0x20A -#define METATILE_BattlePike_Curtain_Stage2_Tile1 0x211 -#define METATILE_BattlePike_Curtain_Stage2_Tile2 0x212 -#define METATILE_BattlePike_Curtain_Stage2_Tile3 0x213 -#define METATILE_BattlePike_Curtain_Stage2_Tile4 0x219 -#define METATILE_BattlePike_Curtain_Stage2_Tile5 0x21A -#define METATILE_BattlePike_Curtain_Stage2_Tile6 0x21B -#define METATILE_BattlePike_Curtain_Stage3_Tile0 0x2AB -#define METATILE_BattlePike_Curtain_Stage3_Tile1 0x2B2 -#define METATILE_BattlePike_Curtain_Stage3_Tile2 0x2B3 -#define METATILE_BattlePike_Curtain_Stage3_Tile3 0x2B4 -#define METATILE_BattlePike_Curtain_Stage3_Tile4 0x2BA -#define METATILE_BattlePike_Curtain_Stage3_Tile5 0x2BB -#define METATILE_BattlePike_Curtain_Stage3_Tile6 0x2BC +// gTileset_Lavaridge +#define METATILE_Lavaridge_AshGrass 0x207 +#define METATILE_Lavaridge_CaveEntrance_Bottom 0x25E +#define METATILE_Lavaridge_CaveEntrance_Top 0x256 +#define METATILE_Lavaridge_LavaField 0x271 +#define METATILE_Lavaridge_NormalGrass 0x206 +#define METATILE_Lavaridge_RockWall 0x274 -// gTileset_Lilycove -#define METATILE_Lilycove_Door 0x246 -#define METATILE_Lilycove_Door_Wooden 0x28E -#define METATILE_Lilycove_Door_DeptStore 0x30C -#define METATILE_Lilycove_Door_SafariZone 0x32D -#define METATILE_Lilycove_Wailmer0 0x290 -#define METATILE_Lilycove_Wailmer1 0x291 -#define METATILE_Lilycove_Wailmer2 0x2A0 -#define METATILE_Lilycove_Wailmer3 0x2A1 -#define METATILE_Lilycove_Wailmer0_Alt 0x298 -#define METATILE_Lilycove_Wailmer1_Alt 0x299 +// gTileset_LilycoveMuseum +#define METATILE_LilycoveMuseum_Painting0_Left 0x25A +#define METATILE_LilycoveMuseum_Painting0_Right 0x25B +#define METATILE_LilycoveMuseum_Painting1_Left 0x25C +#define METATILE_LilycoveMuseum_Painting1_Right 0x25D +#define METATILE_LilycoveMuseum_Painting2_Left 0x25E +#define METATILE_LilycoveMuseum_Painting2_Right 0x25F +#define METATILE_LilycoveMuseum_Painting3_Left 0x260 +#define METATILE_LilycoveMuseum_Painting3_Right 0x261 +#define METATILE_LilycoveMuseum_Painting4_Left 0x262 +#define METATILE_LilycoveMuseum_Painting4_Right 0x263 -// gTileset_Contest -#define METATILE_Contest_WallShadow 0x221 -#define METATILE_Contest_FloorShadow 0x261 -#define METATILE_Contest_CounterFlap_Top 0x2D1 -#define METATILE_Contest_CounterFlap_Bottom 0x2D9 +// gTileset_Lilycove +#define METATILE_Lilycove_Door 0x246 +#define METATILE_Lilycove_Door_DeptStore 0x30C +#define METATILE_Lilycove_Door_SafariZone 0x32D +#define METATILE_Lilycove_Door_Wooden 0x28E +#define METATILE_Lilycove_Wailmer0 0x290 +#define METATILE_Lilycove_Wailmer0_Alt 0x298 +#define METATILE_Lilycove_Wailmer1 0x291 +#define METATILE_Lilycove_Wailmer1_Alt 0x299 +#define METATILE_Lilycove_Wailmer2 0x2A0 +#define METATILE_Lilycove_Wailmer3 0x2A1 -// gTileset_BattleTent -#define METATILE_BattleTent_Door 0x26B +// gTileset_MauvilleGym +#define METATILE_MauvilleGym_FloorTile 0x21A +#define METATILE_MauvilleGym_GreenBeamH1_Off 0x230 +#define METATILE_MauvilleGym_GreenBeamH1_On 0x220 +#define METATILE_MauvilleGym_GreenBeamH2_Off 0x231 +#define METATILE_MauvilleGym_GreenBeamH2_On 0x221 +#define METATILE_MauvilleGym_GreenBeamH3_Off 0x238 +#define METATILE_MauvilleGym_GreenBeamH3_On 0x228 +#define METATILE_MauvilleGym_GreenBeamH4_Off 0x239 +#define METATILE_MauvilleGym_GreenBeamH4_On 0x229 +#define METATILE_MauvilleGym_GreenBeamV1_On 0x240 +#define METATILE_MauvilleGym_GreenBeamV2_On 0x248 +#define METATILE_MauvilleGym_PoleBottom_Off 0x243 +#define METATILE_MauvilleGym_PoleBottom_On 0x242 +#define METATILE_MauvilleGym_PoleTop_Off 0x251 +#define METATILE_MauvilleGym_PoleTop_On 0x250 +#define METATILE_MauvilleGym_PressedSwitch 0x206 +#define METATILE_MauvilleGym_RaisedSwitch 0x205 +#define METATILE_MauvilleGym_RedBeamH1_Off 0x232 +#define METATILE_MauvilleGym_RedBeamH1_On 0x222 +#define METATILE_MauvilleGym_RedBeamH2_Off 0x233 +#define METATILE_MauvilleGym_RedBeamH2_On 0x223 +#define METATILE_MauvilleGym_RedBeamH3_Off 0x23A +#define METATILE_MauvilleGym_RedBeamH3_On 0x22A +#define METATILE_MauvilleGym_RedBeamH4_Off 0x23B +#define METATILE_MauvilleGym_RedBeamH4_On 0x22B +#define METATILE_MauvilleGym_RedBeamV1_On 0x241 +#define METATILE_MauvilleGym_RedBeamV2_On 0x249 -// gTileset_LilycoveMuseum -#define METATILE_LilycoveMuseum_Painting0_Left 0x25A -#define METATILE_LilycoveMuseum_Painting0_Right 0x25B -#define METATILE_LilycoveMuseum_Painting1_Left 0x25C -#define METATILE_LilycoveMuseum_Painting1_Right 0x25D -#define METATILE_LilycoveMuseum_Painting2_Left 0x25E -#define METATILE_LilycoveMuseum_Painting2_Right 0x25F -#define METATILE_LilycoveMuseum_Painting3_Left 0x260 -#define METATILE_LilycoveMuseum_Painting3_Right 0x261 -#define METATILE_LilycoveMuseum_Painting4_Left 0x262 -#define METATILE_LilycoveMuseum_Painting4_Right 0x263 +// gTileset_Mauville +#define METATILE_Mauville_DeepSand_BottomMid 0x259 +#define METATILE_Mauville_DeepSand_Center 0x251 +#define METATILE_Mauville_Door 0x2AC +#define METATILE_Mauville_Door_BattleTent 0x3D4 +#define METATILE_Mauville_Door_CyclingRoad 0x289 +#define METATILE_Mauville_Door_Verdanturf 0x3A1 +#define METATILE_Mauville_MirageTower_Tile0 0x3D8 +#define METATILE_Mauville_MirageTower_Tile1 0x3D9 +#define METATILE_Mauville_MirageTower_Tile10 0x3E4 +#define METATILE_Mauville_MirageTower_Tile11 0x3E5 +#define METATILE_Mauville_MirageTower_Tile2 0x3DA +#define METATILE_Mauville_MirageTower_Tile3 0x3E0 +#define METATILE_Mauville_MirageTower_Tile4 0x3E1 +#define METATILE_Mauville_MirageTower_Tile5 0x3E2 +#define METATILE_Mauville_MirageTower_Tile6 0x3E8 +#define METATILE_Mauville_MirageTower_Tile7 0x3E9 +#define METATILE_Mauville_MirageTower_Tile8 0x3EA +#define METATILE_Mauville_MirageTower_Tile9 0x3F0 +#define METATILE_Mauville_MirageTower_TileA 0x3F1 +#define METATILE_Mauville_MirageTower_TileB 0x3F2 +#define METATILE_Mauville_MirageTower_TileC 0x3DB +#define METATILE_Mauville_MirageTower_TileD 0x3DC +#define METATILE_Mauville_MirageTower_TileE 0x3DD +#define METATILE_Mauville_MirageTower_TileF 0x3E3 // gTileset_MeteorFalls -#define METATILE_MeteorFalls_CaveEntrance_Top 0x246 -#define METATILE_MeteorFalls_CaveEntrance_Left 0x24D -#define METATILE_MeteorFalls_CaveEntrance_Bottom 0x24E -#define METATILE_MeteorFalls_CaveEntrance_Right 0x24F +#define METATILE_MeteorFalls_CaveEntrance_Bottom 0x24E +#define METATILE_MeteorFalls_CaveEntrance_Left 0x24D +#define METATILE_MeteorFalls_CaveEntrance_Right 0x24F +#define METATILE_MeteorFalls_CaveEntrance_Top 0x246 -// gTileset_Facility -#define METATILE_Facility_NewMauvilleDoor_Closed_Tile0 0x314 -#define METATILE_Facility_NewMauvilleDoor_Closed_Tile1 0x315 -#define METATILE_Facility_NewMauvilleDoor_Closed_Tile2 0x316 -#define METATILE_Facility_NewMauvilleDoor_Closed_Tile3 0x31C -#define METATILE_Facility_NewMauvilleDoor_Closed_Tile4 0x31D -#define METATILE_Facility_NewMauvilleDoor_Closed_Tile5 0x31E -#define METATILE_Facility_NewMauvilleDoor_Open_Tile0 0x2C3 -#define METATILE_Facility_NewMauvilleDoor_Open_Tile1 0x2C4 -#define METATILE_Facility_NewMauvilleDoor_Open_Tile2 0x2C5 -#define METATILE_Facility_NewMauvilleDoor_Open_Tile3 0x2CB -#define METATILE_Facility_NewMauvilleDoor_Open_Tile4 0x2CC -#define METATILE_Facility_NewMauvilleDoor_Open_Tile5 0x2CD -#define METATILE_Facility_DataPad 0x3E4 +// gTileset_MossdeepGameCorner +#define METATILE_MossdeepGameCorner_CounterClosed_Bottom 0x232 +#define METATILE_MossdeepGameCorner_CounterClosed_Top 0x22A +#define METATILE_MossdeepGameCorner_CounterOpen_Bottom 0x234 +#define METATILE_MossdeepGameCorner_CounterOpen_Top 0x22C -// gTileset_GenericBuilding -#define METATILE_GenericBuilding_TableEdge 0x2F1 -#define METATILE_GenericBuilding_TrickHouse_Door_Closed 0x21B -#define METATILE_GenericBuilding_TrickHouse_Stairs_Down 0x219 +// gTileset_MossdeepGym +#define METATILE_MossdeepGym_YellowArrow_Right 0x250 -// gTileset_TrickHousePuzzle -#define METATILE_TrickHousePuzzle_Stairs_Down 0x20B -#define METATILE_TrickHousePuzzle_Lever_Off 0x23E -#define METATILE_TrickHousePuzzle_Lever_On 0x23F -#define METATILE_TrickHousePuzzle_Button_Up 0x258 -#define METATILE_TrickHousePuzzle_Button_Pressed 0x259 -#define METATILE_TrickHousePuzzle_Door_Shuttered 0x26A -#define METATILE_TrickHousePuzzle_Floor_ShadowTop_Alt 0x252 -#define METATILE_TrickHousePuzzle_Floor_ShadowTop 0x255 -#define METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile0 0x24B -#define METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile1 0x24C -#define METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile2 0x253 -#define METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile3 0x254 -#define METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile0 0x23B -#define METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile1 0x23C -#define METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile2 0x243 -#define METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile3 0x244 -#define METATILE_TrickHousePuzzle_RedDoorH_Open_Tile0 0x248 -#define METATILE_TrickHousePuzzle_RedDoorH_Open_Tile1 0x249 -#define METATILE_TrickHousePuzzle_RedDoorH_Open_Tile2 0x250 -#define METATILE_TrickHousePuzzle_RedDoorH_Open_Tile3 0x251 -#define METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile0 0x238 -#define METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile1 0x239 -#define METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile2 0x240 -#define METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile3 0x241 -#define METATILE_TrickHousePuzzle_BlueDoorV_Retracted 0x24D -#define METATILE_TrickHousePuzzle_RedDoorV_Retracted 0x24A -#define METATILE_TrickHousePuzzle_RedDoorV_Open0 0x23A -#define METATILE_TrickHousePuzzle_RedDoorV_Open1 0x242 -#define METATILE_TrickHousePuzzle_BlueDoorV_Open0 0x23D -#define METATILE_TrickHousePuzzle_BlueDoorV_Open1 0x245 -#define METATILE_TrickHousePuzzle_Arrow_RedOnBlack_Right 0x260 -#define METATILE_TrickHousePuzzle_Arrow_RedOnBlack_Left 0x261 -#define METATILE_TrickHousePuzzle_Arrow_RedOnBlack_Up 0x262 -#define METATILE_TrickHousePuzzle_Arrow_RedOnBlack_Down 0x263 -#define METATILE_TrickHousePuzzle_Arrow_RedOnBlack_Left_Alt 0x27B -#define METATILE_TrickHousePuzzle_Arrow_RedOnBlack_Right_Alt 0x27C -#define METATILE_TrickHousePuzzle_Arrow_YellowOnWhite_Right 0x298 - -// gTileset_BikeShop (also used by New Mauville) -#define METATILE_BikeShop_Barrier_Hidden_Top 0x269 -#define METATILE_BikeShop_Barrier_Hidden_Bottom 0x271 -#define METATILE_BikeShop_Floor_Shadow_Top 0x26D -#define METATILE_BikeShop_Wall_Edge_Top 0x281 -#define METATILE_BikeShop_Button_Pressed 0x24F -#define METATILE_BikeShop_Button_Green 0x22E -#define METATILE_BikeShop_Button_Blue 0x236 -#define METATILE_BikeShop_Barrier_Green_Top 0x2B6 -#define METATILE_BikeShop_Barrier_Green_TopMid 0x2BE -#define METATILE_BikeShop_Barrier_Green_BottomMid 0x2C6 -#define METATILE_BikeShop_Barrier_Green_Bottom 0x2CE -#define METATILE_BikeShop_Barrier_Blue_Top 0x2B7 -#define METATILE_BikeShop_Barrier_Blue_TopMid 0x2BF -#define METATILE_BikeShop_Barrier_Blue_BottomMid 0x2C7 -#define METATILE_BikeShop_Barrier_Blue_Bottom 0x2CF -#define METATILE_BikeShop_Generator_Off_Tile0 0x2F0 -#define METATILE_BikeShop_Generator_Off_Tile1 0x2F1 -#define METATILE_BikeShop_Generator_Off_Tile2 0x2F2 -#define METATILE_BikeShop_Generator_Off_Tile3 0x2F3 -#define METATILE_BikeShop_Generator_Off_Tile4 0x2F4 -#define METATILE_BikeShop_Generator_Off_Tile5 0x2F5 -#define METATILE_BikeShop_Generator_Off_Tile6 0x2F6 -#define METATILE_BikeShop_Generator_Off_Tile7 0x2F7 +// gTileset_Mossdeep +#define METATILE_Mossdeep_Door 0x2A1 +#define METATILE_Mossdeep_Door_SpaceCenter 0x2ED -// gTileset_TrainerHill -#define METATILE_TrainerHill_GreenFloorTile 0x307 -#define METATILE_TrainerHill_CounterDoor 0x334 -#define METATILE_TrainerHill_Door_Elevator_Lobby 0x32C -#define METATILE_TrainerHill_Door_Elevator_Roof 0x383 +// gTileset_Pacifidlog +#define METATILE_Pacifidlog_Door 0x21A +#define METATILE_Pacifidlog_FloatingLogs_HorizontalLeft 0x250 +#define METATILE_Pacifidlog_FloatingLogs_HorizontalRight 0x251 +#define METATILE_Pacifidlog_FloatingLogs_VerticalBottom 0x260 +#define METATILE_Pacifidlog_FloatingLogs_VerticalTop 0x258 +#define METATILE_Pacifidlog_HalfSubmergedLogs_HorizontalLeft 0x252 +#define METATILE_Pacifidlog_HalfSubmergedLogs_HorizontalRight 0x253 +#define METATILE_Pacifidlog_HalfSubmergedLogs_VerticalBottom 0x261 +#define METATILE_Pacifidlog_HalfSubmergedLogs_VerticalTop 0x259 +#define METATILE_Pacifidlog_SkyPillar_CrackedFloor_Hole 0x237 +#define METATILE_Pacifidlog_SkyPillar_DoorOpen_Bottom 0x2B2 +#define METATILE_Pacifidlog_SkyPillar_DoorOpen_Top 0x2AA +#define METATILE_Pacifidlog_SubmergedLogs_HorizontalLeft 0x254 +#define METATILE_Pacifidlog_SubmergedLogs_HorizontalRight 0x255 +#define METATILE_Pacifidlog_SubmergedLogs_VerticalBottom 0x262 +#define METATILE_Pacifidlog_SubmergedLogs_VerticalTop 0x25A -// gTileset_Underwater -#define METATILE_Underwater_RockWall 0x21E -#define METATILE_Underwater_FloorShadow 0x228 +// gTileset_PetalburgGym +#define METATILE_PetalburgGym_Door 0x224 +#define METATILE_PetalburgGym_RoomEntrance_Left 0x210 +#define METATILE_PetalburgGym_RoomEntrance_Right 0x211 +#define METATILE_PetalburgGym_SlidingDoor_Frame0 0x218 +#define METATILE_PetalburgGym_SlidingDoor_Frame1 0x219 +#define METATILE_PetalburgGym_SlidingDoor_Frame2 0x21A +#define METATILE_PetalburgGym_SlidingDoor_Frame3 0x21B +#define METATILE_PetalburgGym_SlidingDoor_Frame4 0x21C + +// gTileset_Petalburg +#define METATILE_Petalburg_Door_BirchsLab 0x249 +#define METATILE_Petalburg_Door_Littleroot 0x248 +#define METATILE_Petalburg_Door_Oldale 0x287 + +// gTileset_PokemonCenter +#define METATILE_PokemonCenter_CounterBarrier 0x25D +#define METATILE_PokemonCenter_Door_CableClub 0x264 +#define METATILE_PokemonCenter_Escalator1F_Tile0_Frame0 0x280 +#define METATILE_PokemonCenter_Escalator1F_Tile0_Frame1 0x282 +#define METATILE_PokemonCenter_Escalator1F_Tile0_Frame2 0x284 +#define METATILE_PokemonCenter_Escalator1F_Tile1_Frame0 0x281 +#define METATILE_PokemonCenter_Escalator1F_Tile1_Frame1 0x283 +#define METATILE_PokemonCenter_Escalator1F_Tile1_Frame2 0x285 +#define METATILE_PokemonCenter_Escalator1F_Tile2_Frame0 0x288 +#define METATILE_PokemonCenter_Escalator1F_Tile2_Frame1 0x28A +#define METATILE_PokemonCenter_Escalator1F_Tile2_Frame2 0x28C +#define METATILE_PokemonCenter_Escalator1F_Tile3_Frame0 0x289 +#define METATILE_PokemonCenter_Escalator1F_Tile3_Frame1 0x28B +#define METATILE_PokemonCenter_Escalator1F_Tile3_Frame2 0x28D +#define METATILE_PokemonCenter_Escalator2F_Tile0_Frame0 0x2A0 +#define METATILE_PokemonCenter_Escalator2F_Tile0_Frame1 0x2A2 +#define METATILE_PokemonCenter_Escalator2F_Tile0_Frame2 0x2A4 +#define METATILE_PokemonCenter_Escalator2F_Tile1_Frame0 0x2A1 +#define METATILE_PokemonCenter_Escalator2F_Tile1_Frame1 0x2A3 +#define METATILE_PokemonCenter_Escalator2F_Tile1_Frame2 0x2A5 +#define METATILE_PokemonCenter_Escalator2F_Tile2_Frame0 0x2A8 +#define METATILE_PokemonCenter_Escalator2F_Tile2_Frame1 0x2AA +#define METATILE_PokemonCenter_Escalator2F_Tile2_Frame2 0x2AC +#define METATILE_PokemonCenter_Floor_Plain_Alt 0x2E4 +#define METATILE_PokemonCenter_Floor_ShadowTop 0x21E +#define METATILE_PokemonCenter_Floor_ShadowTop_Alt 0x2DC + +// gTileset_RSMossdeepGym +#define METATILE_RSMossdeepGym_RedArrow_Down 0x205 +#define METATILE_RSMossdeepGym_RedArrow_Left 0x20C +#define METATILE_RSMossdeepGym_RedArrow_Right 0x204 +#define METATILE_RSMossdeepGym_RedArrow_Up 0x20D +#define METATILE_RSMossdeepGym_Switch_Down 0x239 +#define METATILE_RSMossdeepGym_Switch_Up 0x238 + +// gTileset_Rustboro +#define METATILE_Rustboro_Door_Gray 0x21F +#define METATILE_Rustboro_Door_Tan 0x22F // gTileset_SecretBase -#define METATILE_SecretBase_Wall_TopMid 0x202 -#define METATILE_SecretBase_Ground 0x20A -#define METATILE_SecretBase_PC 0x220 -#define METATILE_SecretBase_RegisterPC 0x221 -#define METATILE_SecretBase_PC_On 0x224 -#define METATILE_SecretBase_RedBrick_Top 0x225 -#define METATILE_SecretBase_RedBrick_Bottom 0x22D -#define METATILE_SecretBase_YellowBrick_Top 0x226 -#define METATILE_SecretBase_YellowBrick_Bottom 0x22E -#define METATILE_SecretBase_BlueBrick_Top 0x227 +#define METATILE_SecretBase_AttractMat_BottomLeft 0x313 +#define METATILE_SecretBase_AttractMat_BottomMid 0x314 +#define METATILE_SecretBase_AttractMat_BottomRight 0x315 +#define METATILE_SecretBase_AttractMat_Center 0x30C +#define METATILE_SecretBase_AttractMat_MidLeft 0x30B +#define METATILE_SecretBase_AttractMat_MidRight 0x30D +#define METATILE_SecretBase_AttractMat_TopLeft 0x303 +#define METATILE_SecretBase_AttractMat_TopMid 0x304 +#define METATILE_SecretBase_AttractMat_TopRight 0x305 +#define METATILE_SecretBase_BallPoster 0x330 +#define METATILE_SecretBase_BigPlant_BaseLeft1 0x2EC +#define METATILE_SecretBase_BigPlant_BaseLeft2 0x2EE +#define METATILE_SecretBase_BigPlant_BaseRight1 0x2ED +#define METATILE_SecretBase_BigPlant_BaseRight2 0x2EF +#define METATILE_SecretBase_BigPlant_TopLeft 0x2E4 +#define METATILE_SecretBase_BigPlant_TopRight 0x2E6 +#define METATILE_SecretBase_BlueBalloon 0x33C #define METATILE_SecretBase_BlueBrick_Bottom 0x22F -#define METATILE_SecretBase_MudBall 0x228 -#define METATILE_SecretBase_Fence_Horizontal 0x22C -#define METATILE_SecretBase_Fence_Vertical 0x233 -#define METATILE_SecretBase_SolidBoard_Top 0x234 -#define METATILE_SecretBase_SolidBoard_Bottom 0x23C -#define METATILE_SecretBase_RedTent_TopLeft 0x230 -#define METATILE_SecretBase_RedTent_TopMid 0x231 -#define METATILE_SecretBase_RedTent_TopRight 0x232 -#define METATILE_SecretBase_RedTent_MidLeft 0x238 -#define METATILE_SecretBase_RedTent_DoorTop 0x239 -#define METATILE_SecretBase_RedTent_MidRight 0x23A -#define METATILE_SecretBase_RedTent_BottomLeft 0x240 -#define METATILE_SecretBase_RedTent_Door 0x241 -#define METATILE_SecretBase_RedTent_BottomRight 0x23B +#define METATILE_SecretBase_BlueBrick_Top 0x227 +#define METATILE_SecretBase_BluePoster 0x333 +#define METATILE_SecretBase_BlueTent_BottomLeft 0x258 +#define METATILE_SecretBase_BlueTent_BottomRight 0x269 +#define METATILE_SecretBase_BlueTent_Door 0x259 +#define METATILE_SecretBase_BlueTent_DoorTop 0x251 +#define METATILE_SecretBase_BlueTent_MidLeft 0x250 +#define METATILE_SecretBase_BlueTent_MidRight 0x270 #define METATILE_SecretBase_BlueTent_TopLeft 0x248 #define METATILE_SecretBase_BlueTent_TopMid 0x249 #define METATILE_SecretBase_BlueTent_TopRight 0x268 -#define METATILE_SecretBase_BlueTent_MidLeft 0x250 -#define METATILE_SecretBase_BlueTent_DoorTop 0x251 -#define METATILE_SecretBase_BlueTent_MidRight 0x270 -#define METATILE_SecretBase_BlueTent_BottomLeft 0x258 -#define METATILE_SecretBase_BlueTent_Door 0x259 -#define METATILE_SecretBase_BlueTent_BottomRight 0x269 -#define METATILE_SecretBase_Slide_TopLeft 0x235 -#define METATILE_SecretBase_Slide_TopRight 0x236 -#define METATILE_SecretBase_Slide_StairLanding 0x23D -#define METATILE_SecretBase_Slide_SlideTop 0x23E -#define METATILE_SecretBase_Slide_Stairs 0x263 -#define METATILE_SecretBase_Slide_SlideBottom 0x264 -#define METATILE_SecretBase_Slide_MatLeft 0x26F -#define METATILE_SecretBase_Slide_MatRight 0x277 -#define METATILE_SecretBase_Stand_CornerLeft 0x26A -#define METATILE_SecretBase_Stand_MidLeft 0x26B -#define METATILE_SecretBase_Stand_MidRight 0x26C -#define METATILE_SecretBase_Stand_CornerRight 0x26D -#define METATILE_SecretBase_Stand_StairsLeft 0x272 -#define METATILE_SecretBase_Stand_BaseLeft 0x273 -#define METATILE_SecretBase_Stand_BaseRight 0x274 -#define METATILE_SecretBase_Stand_StairsRight 0x275 -#define METATILE_SecretBase_BreakableDoor_TopClosed 0x237 #define METATILE_SecretBase_BreakableDoor_BottomClosed 0x23F -#define METATILE_SecretBase_BreakableDoor_TopOpen 0x26E #define METATILE_SecretBase_BreakableDoor_BottomOpen 0x276 -#define METATILE_SecretBase_GlitterMat 0x260 -#define METATILE_SecretBase_JumpMat 0x261 -#define METATILE_SecretBase_SpinMat 0x262 -#define METATILE_SecretBase_NoteMat_C_Low 0x278 -#define METATILE_SecretBase_NoteMat_D 0x279 -#define METATILE_SecretBase_NoteMat_E 0x27A -#define METATILE_SecretBase_NoteMat_F 0x27B -#define METATILE_SecretBase_NoteMat_G 0x27C -#define METATILE_SecretBase_NoteMat_A 0x27D -#define METATILE_SecretBase_NoteMat_B 0x27E -#define METATILE_SecretBase_NoteMat_C_High 0x2B3 -#define METATILE_SecretBase_Tire_TopLeft 0x280 -#define METATILE_SecretBase_Tire_TopRight 0x281 -#define METATILE_SecretBase_Tire_BottomLeft 0x288 -#define METATILE_SecretBase_Tire_BottomRight 0x289 -#define METATILE_SecretBase_GlassOrnament_Top 0x282 -#define METATILE_SecretBase_GlassOrnament_Base1 0x28A -#define METATILE_SecretBase_GlassOrnament_TopWall 0x283 -#define METATILE_SecretBase_GlassOrnament_Base2 0x28B -#define METATILE_SecretBase_SandOrnament_BrokenTop 0x284 -#define METATILE_SecretBase_SandOrnament_BrokenBase 0x28C -#define METATILE_SecretBase_SandOrnament_Top 0x285 -#define METATILE_SecretBase_SandOrnament_Base1 0x28D -#define METATILE_SecretBase_SandOrnament_TopWall 0x286 -#define METATILE_SecretBase_SandOrnament_Base2 0x28E -#define METATILE_SecretBase_SmallDesk 0x287 -#define METATILE_SecretBase_PokemonDesk 0x28F -#define METATILE_SecretBase_HeavyDesk_TopLeft 0x290 -#define METATILE_SecretBase_HeavyDesk_TopMid 0x291 -#define METATILE_SecretBase_HeavyDesk_TopRight 0x292 -#define METATILE_SecretBase_HeavyDesk_BottomLeft 0x298 -#define METATILE_SecretBase_HeavyDesk_BottomMid 0x299 -#define METATILE_SecretBase_HeavyDesk_BottomRight 0x29A -#define METATILE_SecretBase_RaggedDesk_TopLeft 0x293 -#define METATILE_SecretBase_RaggedDesk_TopMid 0x294 -#define METATILE_SecretBase_RaggedDesk_TopRight 0x295 -#define METATILE_SecretBase_RaggedDesk_BottomLeft 0x29B -#define METATILE_SecretBase_RaggedDesk_BottomMid 0x29C -#define METATILE_SecretBase_RaggedDesk_BottomRight 0x29D -#define METATILE_SecretBase_ComfortDesk_TopLeft 0x296 -#define METATILE_SecretBase_ComfortDesk_TopMid 0x297 -#define METATILE_SecretBase_ComfortDesk_TopRight 0x2A3 -#define METATILE_SecretBase_ComfortDesk_BottomLeft 0x29E -#define METATILE_SecretBase_ComfortDesk_BottomMid 0x29F -#define METATILE_SecretBase_ComfortDesk_BottomRight 0x2AB -#define METATILE_SecretBase_BrickDesk_TopLeft 0x2A0 -#define METATILE_SecretBase_BrickDesk_TopMid 0x2A1 -#define METATILE_SecretBase_BrickDesk_TopRight 0x2A2 -#define METATILE_SecretBase_BrickDesk_MidLeft 0x2A8 -#define METATILE_SecretBase_BrickDesk_Center 0x2A9 -#define METATILE_SecretBase_BrickDesk_MidRight 0x2AA +#define METATILE_SecretBase_BreakableDoor_TopClosed 0x237 +#define METATILE_SecretBase_BreakableDoor_TopOpen 0x26E +#define METATILE_SecretBase_BrickChair 0x2C8 #define METATILE_SecretBase_BrickDesk_BottomLeft 0x2B0 #define METATILE_SecretBase_BrickDesk_BottomMid 0x2B1 #define METATILE_SecretBase_BrickDesk_BottomRight 0x2B2 -#define METATILE_SecretBase_CampDesk_TopLeft 0x2A4 -#define METATILE_SecretBase_CampDesk_TopMid 0x2A5 -#define METATILE_SecretBase_CampDesk_TopRight 0x2A6 -#define METATILE_SecretBase_CampDesk_MidLeft 0x2AC -#define METATILE_SecretBase_CampDesk_Center 0x2AD -#define METATILE_SecretBase_CampDesk_MidRight 0x2AE +#define METATILE_SecretBase_BrickDesk_Center 0x2A9 +#define METATILE_SecretBase_BrickDesk_MidLeft 0x2A8 +#define METATILE_SecretBase_BrickDesk_MidRight 0x2AA +#define METATILE_SecretBase_BrickDesk_TopLeft 0x2A0 +#define METATILE_SecretBase_BrickDesk_TopMid 0x2A1 +#define METATILE_SecretBase_BrickDesk_TopRight 0x2A2 +#define METATILE_SecretBase_CampChair 0x2C9 #define METATILE_SecretBase_CampDesk_BottomLeft 0x2B4 #define METATILE_SecretBase_CampDesk_BottomMid 0x2B5 #define METATILE_SecretBase_CampDesk_BottomRight 0x2B6 -#define METATILE_SecretBase_HardDesk_TopLeft 0x2A7 -#define METATILE_SecretBase_HardDesk_TopMid 0x2BB -#define METATILE_SecretBase_HardDesk_TopRight 0x2BC -#define METATILE_SecretBase_HardDesk_MidLeft 0x2AF -#define METATILE_SecretBase_HardDesk_Center 0x2C3 -#define METATILE_SecretBase_HardDesk_MidRight 0x2C4 -#define METATILE_SecretBase_HardDesk_BottomLeft 0x2B7 -#define METATILE_SecretBase_HardDesk_BottomMid 0x2CB -#define METATILE_SecretBase_HardDesk_BottomRight 0x2CC -#define METATILE_SecretBase_PrettyDesk_TopLeft 0x2BD -#define METATILE_SecretBase_PrettyDesk_TopMid 0x2BE -#define METATILE_SecretBase_PrettyDesk_TopRight 0x2BF -#define METATILE_SecretBase_PrettyDesk_MidLeft 0x2C5 -#define METATILE_SecretBase_PrettyDesk_Center 0x2C6 -#define METATILE_SecretBase_PrettyDesk_MidRight 0x2C7 -#define METATILE_SecretBase_PrettyDesk_BottomLeft 0x2CD -#define METATILE_SecretBase_PrettyDesk_BottomMid 0x2CE -#define METATILE_SecretBase_PrettyDesk_BottomRight 0x2CF -#define METATILE_SecretBase_SmallChair 0x2B8 -#define METATILE_SecretBase_PokemonChair 0x2B9 -#define METATILE_SecretBase_HeavyChair 0x2BA -#define METATILE_SecretBase_PrettyChair 0x2C0 -#define METATILE_SecretBase_ComfortChair 0x2C1 -#define METATILE_SecretBase_RaggedChair 0x2C2 -#define METATILE_SecretBase_BrickChair 0x2C8 -#define METATILE_SecretBase_CampChair 0x2C9 -#define METATILE_SecretBase_HardChair 0x2CA -#define METATILE_SecretBase_RedPlant_Top 0x2D0 -#define METATILE_SecretBase_RedPlant_Base1 0x2D8 -#define METATILE_SecretBase_RedPlant_TopWall 0x2D1 -#define METATILE_SecretBase_RedPlant_Base2 0x2D9 -#define METATILE_SecretBase_TropicalPlant_Top 0x2D2 -#define METATILE_SecretBase_TropicalPlant_Base1 0x2DA -#define METATILE_SecretBase_TropicalPlant_TopWall 0x2D3 -#define METATILE_SecretBase_TropicalPlant_Base2 0x2DB -#define METATILE_SecretBase_PrettyFlowers_Top 0x2D4 -#define METATILE_SecretBase_PrettyFlowers_Base1 0x2DC -#define METATILE_SecretBase_PrettyFlowers_TopWall 0x2D5 -#define METATILE_SecretBase_PrettyFlowers_Base2 0x2DD -#define METATILE_SecretBase_ColorfulPlant_TopLeft 0x2E0 -#define METATILE_SecretBase_ColorfulPlant_TopRight 0x2E2 +#define METATILE_SecretBase_CampDesk_Center 0x2AD +#define METATILE_SecretBase_CampDesk_MidLeft 0x2AC +#define METATILE_SecretBase_CampDesk_MidRight 0x2AE +#define METATILE_SecretBase_CampDesk_TopLeft 0x2A4 +#define METATILE_SecretBase_CampDesk_TopMid 0x2A5 +#define METATILE_SecretBase_CampDesk_TopRight 0x2A6 #define METATILE_SecretBase_ColorfulPlant_BaseLeft1 0x2E8 +#define METATILE_SecretBase_ColorfulPlant_BaseLeft2 0x2EA #define METATILE_SecretBase_ColorfulPlant_BaseRight1 0x2E9 +#define METATILE_SecretBase_ColorfulPlant_BaseRight2 0x2EB +#define METATILE_SecretBase_ColorfulPlant_TopLeft 0x2E0 #define METATILE_SecretBase_ColorfulPlant_TopLeftWall 0x2E1 +#define METATILE_SecretBase_ColorfulPlant_TopRight 0x2E2 #define METATILE_SecretBase_ColorfulPlant_TopRightWall 0x2E3 -#define METATILE_SecretBase_ColorfulPlant_BaseLeft2 0x2EA -#define METATILE_SecretBase_ColorfulPlant_BaseRight2 0x2EB -#define METATILE_SecretBase_BigPlant_TopLeft 0x2E4 -#define METATILE_SecretBase_BigPlant_TopRight 0x2E6 -#define METATILE_SecretBase_BigPlant_BaseLeft1 0x2EC -#define METATILE_SecretBase_BigPlant_BaseRight1 0x2ED -#define METATILE_SecretBase_BigPlant_BaseLeft2 0x2EE -#define METATILE_SecretBase_BigPlant_BaseRight2 0x2EF -#define METATILE_SecretBase_GorgeousPlant_TopLeft 0x2F0 -#define METATILE_SecretBase_GorgeousPlant_TopRight 0x2F2 +#define METATILE_SecretBase_ComfortChair 0x2C1 +#define METATILE_SecretBase_ComfortDesk_BottomLeft 0x29E +#define METATILE_SecretBase_ComfortDesk_BottomMid 0x29F +#define METATILE_SecretBase_ComfortDesk_BottomRight 0x2AB +#define METATILE_SecretBase_ComfortDesk_TopLeft 0x296 +#define METATILE_SecretBase_ComfortDesk_TopMid 0x297 +#define METATILE_SecretBase_ComfortDesk_TopRight 0x2A3 +#define METATILE_SecretBase_CutePoster 0x334 +#define METATILE_SecretBase_CuteTV 0x2F6 +#define METATILE_SecretBase_Fence_Horizontal 0x22C +#define METATILE_SecretBase_Fence_Vertical 0x233 +#define METATILE_SecretBase_FireBlastMat_BottomLeft 0x265 +#define METATILE_SecretBase_FireBlastMat_BottomMid 0x266 +#define METATILE_SecretBase_FireBlastMat_BottomRight 0x267 +#define METATILE_SecretBase_FireBlastMat_Center 0x25E +#define METATILE_SecretBase_FireBlastMat_MidLeft 0x25D +#define METATILE_SecretBase_FireBlastMat_MidRight 0x25F +#define METATILE_SecretBase_FireBlastMat_TopLeft 0x25A +#define METATILE_SecretBase_FireBlastMat_TopMid 0x25B +#define METATILE_SecretBase_FireBlastMat_TopRight 0x25C +#define METATILE_SecretBase_FissureMat_BottomLeft 0x316 +#define METATILE_SecretBase_FissureMat_BottomMid 0x317 +#define METATILE_SecretBase_FissureMat_BottomRight 0x328 +#define METATILE_SecretBase_FissureMat_Center 0x30F +#define METATILE_SecretBase_FissureMat_MidLeft 0x30E +#define METATILE_SecretBase_FissureMat_MidRight 0x320 +#define METATILE_SecretBase_FissureMat_TopLeft 0x306 +#define METATILE_SecretBase_FissureMat_TopMid 0x307 +#define METATILE_SecretBase_FissureMat_TopRight 0x318 +#define METATILE_SecretBase_GlassOrnament_Base1 0x28A +#define METATILE_SecretBase_GlassOrnament_Base2 0x28B +#define METATILE_SecretBase_GlassOrnament_Top 0x282 +#define METATILE_SecretBase_GlassOrnament_TopWall 0x283 +#define METATILE_SecretBase_GlitterMat 0x260 +#define METATILE_SecretBase_GoldShield_Base1 0x336 +#define METATILE_SecretBase_GoldShield_Base2 0x337 +#define METATILE_SecretBase_GoldShield_Top 0x32E +#define METATILE_SecretBase_GoldShield_TopWall 0x32F #define METATILE_SecretBase_GorgeousPlant_BaseLeft1 0x2F8 +#define METATILE_SecretBase_GorgeousPlant_BaseLeft2 0x2FA #define METATILE_SecretBase_GorgeousPlant_BaseRight1 0x2F9 +#define METATILE_SecretBase_GorgeousPlant_BaseRight2 0x2FB +#define METATILE_SecretBase_GorgeousPlant_TopLeft 0x2F0 #define METATILE_SecretBase_GorgeousPlant_TopLeftWall 0x2F1 +#define METATILE_SecretBase_GorgeousPlant_TopRight 0x2F2 #define METATILE_SecretBase_GorgeousPlant_TopRightWall 0x2F3 -#define METATILE_SecretBase_GorgeousPlant_BaseLeft2 0x2FA -#define METATILE_SecretBase_GorgeousPlant_BaseRight2 0x2FB -#define METATILE_SecretBase_TV 0x2F4 -#define METATILE_SecretBase_RoundTV 0x2F5 -#define METATILE_SecretBase_CuteTV 0x2F6 -#define METATILE_SecretBase_PikaPoster_Left 0x31C -#define METATILE_SecretBase_PikaPoster_Right 0x31D +#define METATILE_SecretBase_GreenPoster 0x331 +#define METATILE_SecretBase_Ground 0x20A +#define METATILE_SecretBase_HardChair 0x2CA +#define METATILE_SecretBase_HardDesk_BottomLeft 0x2B7 +#define METATILE_SecretBase_HardDesk_BottomMid 0x2CB +#define METATILE_SecretBase_HardDesk_BottomRight 0x2CC +#define METATILE_SecretBase_HardDesk_Center 0x2C3 +#define METATILE_SecretBase_HardDesk_MidLeft 0x2AF +#define METATILE_SecretBase_HardDesk_MidRight 0x2C4 +#define METATILE_SecretBase_HardDesk_TopLeft 0x2A7 +#define METATILE_SecretBase_HardDesk_TopMid 0x2BB +#define METATILE_SecretBase_HardDesk_TopRight 0x2BC +#define METATILE_SecretBase_HeavyChair 0x2BA +#define METATILE_SecretBase_HeavyDesk_BottomLeft 0x298 +#define METATILE_SecretBase_HeavyDesk_BottomMid 0x299 +#define METATILE_SecretBase_HeavyDesk_BottomRight 0x29A +#define METATILE_SecretBase_HeavyDesk_TopLeft 0x290 +#define METATILE_SecretBase_HeavyDesk_TopMid 0x291 +#define METATILE_SecretBase_HeavyDesk_TopRight 0x292 +#define METATILE_SecretBase_JumpMat 0x261 +#define METATILE_SecretBase_KissPoster_Left 0x32C +#define METATILE_SecretBase_KissPoster_Right 0x32D #define METATILE_SecretBase_LongPoster_Left 0x31E #define METATILE_SecretBase_LongPoster_Right 0x31F +#define METATILE_SecretBase_MudBall 0x228 +#define METATILE_SecretBase_NoteMat_A 0x27D +#define METATILE_SecretBase_NoteMat_B 0x27E +#define METATILE_SecretBase_NoteMat_C_High 0x2B3 +#define METATILE_SecretBase_NoteMat_C_Low 0x278 +#define METATILE_SecretBase_NoteMat_D 0x279 +#define METATILE_SecretBase_NoteMat_E 0x27A +#define METATILE_SecretBase_NoteMat_F 0x27B +#define METATILE_SecretBase_NoteMat_G 0x27C +#define METATILE_SecretBase_PC 0x220 +#define METATILE_SecretBase_PC_On 0x224 +#define METATILE_SecretBase_PikaPoster_Left 0x31C +#define METATILE_SecretBase_PikaPoster_Right 0x31D +#define METATILE_SecretBase_PokemonChair 0x2B9 +#define METATILE_SecretBase_PokemonDesk 0x28F +#define METATILE_SecretBase_PowderSnowMat_BottomLeft 0x310 +#define METATILE_SecretBase_PowderSnowMat_BottomMid 0x311 +#define METATILE_SecretBase_PowderSnowMat_BottomRight 0x312 +#define METATILE_SecretBase_PowderSnowMat_Center 0x309 +#define METATILE_SecretBase_PowderSnowMat_MidLeft 0x308 +#define METATILE_SecretBase_PowderSnowMat_MidRight 0x30A +#define METATILE_SecretBase_PowderSnowMat_TopLeft 0x300 +#define METATILE_SecretBase_PowderSnowMat_TopMid 0x301 +#define METATILE_SecretBase_PowderSnowMat_TopRight 0x302 +#define METATILE_SecretBase_PrettyChair 0x2C0 +#define METATILE_SecretBase_PrettyDesk_BottomLeft 0x2CD +#define METATILE_SecretBase_PrettyDesk_BottomMid 0x2CE +#define METATILE_SecretBase_PrettyDesk_BottomRight 0x2CF +#define METATILE_SecretBase_PrettyDesk_Center 0x2C6 +#define METATILE_SecretBase_PrettyDesk_MidLeft 0x2C5 +#define METATILE_SecretBase_PrettyDesk_MidRight 0x2C7 +#define METATILE_SecretBase_PrettyDesk_TopLeft 0x2BD +#define METATILE_SecretBase_PrettyDesk_TopMid 0x2BE +#define METATILE_SecretBase_PrettyDesk_TopRight 0x2BF +#define METATILE_SecretBase_PrettyFlowers_Base1 0x2DC +#define METATILE_SecretBase_PrettyFlowers_Base2 0x2DD +#define METATILE_SecretBase_PrettyFlowers_Top 0x2D4 +#define METATILE_SecretBase_PrettyFlowers_TopWall 0x2D5 +#define METATILE_SecretBase_RaggedChair 0x2C2 +#define METATILE_SecretBase_RaggedDesk_BottomLeft 0x29B +#define METATILE_SecretBase_RaggedDesk_BottomMid 0x29C +#define METATILE_SecretBase_RaggedDesk_BottomRight 0x29D +#define METATILE_SecretBase_RaggedDesk_TopLeft 0x293 +#define METATILE_SecretBase_RaggedDesk_TopMid 0x294 +#define METATILE_SecretBase_RaggedDesk_TopRight 0x295 +#define METATILE_SecretBase_RedBalloon 0x338 +#define METATILE_SecretBase_RedBrick_Bottom 0x22D +#define METATILE_SecretBase_RedBrick_Top 0x225 +#define METATILE_SecretBase_RedPlant_Base1 0x2D8 +#define METATILE_SecretBase_RedPlant_Base2 0x2D9 +#define METATILE_SecretBase_RedPlant_Top 0x2D0 +#define METATILE_SecretBase_RedPlant_TopWall 0x2D1 +#define METATILE_SecretBase_RedPoster 0x332 +#define METATILE_SecretBase_RedTent_BottomLeft 0x240 +#define METATILE_SecretBase_RedTent_BottomRight 0x23B +#define METATILE_SecretBase_RedTent_Door 0x241 +#define METATILE_SecretBase_RedTent_DoorTop 0x239 +#define METATILE_SecretBase_RedTent_MidLeft 0x238 +#define METATILE_SecretBase_RedTent_MidRight 0x23A +#define METATILE_SecretBase_RedTent_TopLeft 0x230 +#define METATILE_SecretBase_RedTent_TopMid 0x231 +#define METATILE_SecretBase_RedTent_TopRight 0x232 +#define METATILE_SecretBase_RegisterPC 0x221 +#define METATILE_SecretBase_RoundTV 0x2F5 +#define METATILE_SecretBase_SandOrnament_Base1 0x28D +#define METATILE_SecretBase_SandOrnament_Base2 0x28E +#define METATILE_SecretBase_SandOrnament_BrokenBase 0x28C +#define METATILE_SecretBase_SandOrnament_BrokenTop 0x284 +#define METATILE_SecretBase_SandOrnament_Top 0x285 +#define METATILE_SecretBase_SandOrnament_TopWall 0x286 #define METATILE_SecretBase_SeaPoster_Left 0x324 #define METATILE_SecretBase_SeaPoster_Right 0x325 -#define METATILE_SecretBase_SkyPoster_Left 0x326 -#define METATILE_SecretBase_SkyPoster_Right 0x327 -#define METATILE_SecretBase_KissPoster_Left 0x32C -#define METATILE_SecretBase_KissPoster_Right 0x32D -#define METATILE_SecretBase_BallPoster 0x330 -#define METATILE_SecretBase_GreenPoster 0x331 -#define METATILE_SecretBase_RedPoster 0x332 -#define METATILE_SecretBase_BluePoster 0x333 -#define METATILE_SecretBase_CutePoster 0x334 -#define METATILE_SecretBase_SilverShield_Top 0x2D6 #define METATILE_SecretBase_SilverShield_Base1 0x2DE -#define METATILE_SecretBase_SilverShield_TopWall 0x2D7 #define METATILE_SecretBase_SilverShield_Base2 0x2DF -#define METATILE_SecretBase_GoldShield_Top 0x32E -#define METATILE_SecretBase_GoldShield_Base1 0x336 -#define METATILE_SecretBase_GoldShield_TopWall 0x32F -#define METATILE_SecretBase_GoldShield_Base2 0x337 -#define METATILE_SecretBase_RedBalloon 0x338 -#define METATILE_SecretBase_BlueBalloon 0x33C -#define METATILE_SecretBase_YellowBalloon 0x340 -#define METATILE_SecretBase_SurfMat_TopLeft 0x242 -#define METATILE_SecretBase_SurfMat_TopMid 0x243 -#define METATILE_SecretBase_SurfMat_TopRight 0x244 -#define METATILE_SecretBase_SurfMat_MidLeft 0x24A -#define METATILE_SecretBase_SurfMat_Center 0x24B -#define METATILE_SecretBase_SurfMat_MidRight 0x24C +#define METATILE_SecretBase_SilverShield_Top 0x2D6 +#define METATILE_SecretBase_SilverShield_TopWall 0x2D7 +#define METATILE_SecretBase_SkyPoster_Left 0x326 +#define METATILE_SecretBase_SkyPoster_Right 0x327 +#define METATILE_SecretBase_Slide_MatLeft 0x26F +#define METATILE_SecretBase_Slide_MatRight 0x277 +#define METATILE_SecretBase_Slide_SlideBottom 0x264 +#define METATILE_SecretBase_Slide_SlideTop 0x23E +#define METATILE_SecretBase_Slide_StairLanding 0x23D +#define METATILE_SecretBase_Slide_Stairs 0x263 +#define METATILE_SecretBase_Slide_TopLeft 0x235 +#define METATILE_SecretBase_Slide_TopRight 0x236 +#define METATILE_SecretBase_SmallChair 0x2B8 +#define METATILE_SecretBase_SmallDesk 0x287 +#define METATILE_SecretBase_SolidBoard_Bottom 0x23C +#define METATILE_SecretBase_SolidBoard_Top 0x234 +#define METATILE_SecretBase_SpikesMat_BottomLeft 0x329 +#define METATILE_SecretBase_SpikesMat_BottomMid 0x32A +#define METATILE_SecretBase_SpikesMat_BottomRight 0x32B +#define METATILE_SecretBase_SpikesMat_Center 0x322 +#define METATILE_SecretBase_SpikesMat_MidLeft 0x321 +#define METATILE_SecretBase_SpikesMat_MidRight 0x323 +#define METATILE_SecretBase_SpikesMat_TopLeft 0x319 +#define METATILE_SecretBase_SpikesMat_TopMid 0x31A +#define METATILE_SecretBase_SpikesMat_TopRight 0x31B +#define METATILE_SecretBase_SpinMat 0x262 +#define METATILE_SecretBase_Stand_BaseLeft 0x273 +#define METATILE_SecretBase_Stand_BaseRight 0x274 +#define METATILE_SecretBase_Stand_CornerLeft 0x26A +#define METATILE_SecretBase_Stand_CornerRight 0x26D +#define METATILE_SecretBase_Stand_MidLeft 0x26B +#define METATILE_SecretBase_Stand_MidRight 0x26C +#define METATILE_SecretBase_Stand_StairsLeft 0x272 +#define METATILE_SecretBase_Stand_StairsRight 0x275 #define METATILE_SecretBase_SurfMat_BottomLeft 0x252 #define METATILE_SecretBase_SurfMat_BottomMid 0x253 #define METATILE_SecretBase_SurfMat_BottomRight 0x254 -#define METATILE_SecretBase_ThunderMat_TopLeft 0x245 -#define METATILE_SecretBase_ThunderMat_TopMid 0x246 -#define METATILE_SecretBase_ThunderMat_TopRight 0x247 -#define METATILE_SecretBase_ThunderMat_MidLeft 0x24D -#define METATILE_SecretBase_ThunderMat_Center 0x24E -#define METATILE_SecretBase_ThunderMat_MidRight 0x24F +#define METATILE_SecretBase_SurfMat_Center 0x24B +#define METATILE_SecretBase_SurfMat_MidLeft 0x24A +#define METATILE_SecretBase_SurfMat_MidRight 0x24C +#define METATILE_SecretBase_SurfMat_TopLeft 0x242 +#define METATILE_SecretBase_SurfMat_TopMid 0x243 +#define METATILE_SecretBase_SurfMat_TopRight 0x244 +#define METATILE_SecretBase_TV 0x2F4 #define METATILE_SecretBase_ThunderMat_BottomLeft 0x255 #define METATILE_SecretBase_ThunderMat_BottomMid 0x256 #define METATILE_SecretBase_ThunderMat_BottomRight 0x257 -#define METATILE_SecretBase_FireBlastMat_TopLeft 0x25A -#define METATILE_SecretBase_FireBlastMat_TopMid 0x25B -#define METATILE_SecretBase_FireBlastMat_TopRight 0x25C -#define METATILE_SecretBase_FireBlastMat_MidLeft 0x25D -#define METATILE_SecretBase_FireBlastMat_Center 0x25E -#define METATILE_SecretBase_FireBlastMat_MidRight 0x25F -#define METATILE_SecretBase_FireBlastMat_BottomLeft 0x265 -#define METATILE_SecretBase_FireBlastMat_BottomMid 0x266 -#define METATILE_SecretBase_FireBlastMat_BottomRight 0x267 -#define METATILE_SecretBase_PowderSnowMat_TopLeft 0x300 -#define METATILE_SecretBase_PowderSnowMat_TopMid 0x301 -#define METATILE_SecretBase_PowderSnowMat_TopRight 0x302 -#define METATILE_SecretBase_PowderSnowMat_MidLeft 0x308 -#define METATILE_SecretBase_PowderSnowMat_Center 0x309 -#define METATILE_SecretBase_PowderSnowMat_MidRight 0x30A -#define METATILE_SecretBase_PowderSnowMat_BottomLeft 0x310 -#define METATILE_SecretBase_PowderSnowMat_BottomMid 0x311 -#define METATILE_SecretBase_PowderSnowMat_BottomRight 0x312 -#define METATILE_SecretBase_AttractMat_TopLeft 0x303 -#define METATILE_SecretBase_AttractMat_TopMid 0x304 -#define METATILE_SecretBase_AttractMat_TopRight 0x305 -#define METATILE_SecretBase_AttractMat_MidLeft 0x30B -#define METATILE_SecretBase_AttractMat_Center 0x30C -#define METATILE_SecretBase_AttractMat_MidRight 0x30D -#define METATILE_SecretBase_AttractMat_BottomLeft 0x313 -#define METATILE_SecretBase_AttractMat_BottomMid 0x314 -#define METATILE_SecretBase_AttractMat_BottomRight 0x315 -#define METATILE_SecretBase_FissureMat_TopLeft 0x306 -#define METATILE_SecretBase_FissureMat_TopMid 0x307 -#define METATILE_SecretBase_FissureMat_TopRight 0x318 -#define METATILE_SecretBase_FissureMat_MidLeft 0x30E -#define METATILE_SecretBase_FissureMat_Center 0x30F -#define METATILE_SecretBase_FissureMat_MidRight 0x320 -#define METATILE_SecretBase_FissureMat_BottomLeft 0x316 -#define METATILE_SecretBase_FissureMat_BottomMid 0x317 -#define METATILE_SecretBase_FissureMat_BottomRight 0x328 -#define METATILE_SecretBase_SpikesMat_TopLeft 0x319 -#define METATILE_SecretBase_SpikesMat_TopMid 0x31A -#define METATILE_SecretBase_SpikesMat_TopRight 0x31B -#define METATILE_SecretBase_SpikesMat_MidLeft 0x321 -#define METATILE_SecretBase_SpikesMat_Center 0x322 -#define METATILE_SecretBase_SpikesMat_MidRight 0x323 -#define METATILE_SecretBase_SpikesMat_BottomLeft 0x329 -#define METATILE_SecretBase_SpikesMat_BottomMid 0x32A -#define METATILE_SecretBase_SpikesMat_BottomRight 0x32B +#define METATILE_SecretBase_ThunderMat_Center 0x24E +#define METATILE_SecretBase_ThunderMat_MidLeft 0x24D +#define METATILE_SecretBase_ThunderMat_MidRight 0x24F +#define METATILE_SecretBase_ThunderMat_TopLeft 0x245 +#define METATILE_SecretBase_ThunderMat_TopMid 0x246 +#define METATILE_SecretBase_ThunderMat_TopRight 0x247 +#define METATILE_SecretBase_Tire_BottomLeft 0x288 +#define METATILE_SecretBase_Tire_BottomRight 0x289 +#define METATILE_SecretBase_Tire_TopLeft 0x280 +#define METATILE_SecretBase_Tire_TopRight 0x281 +#define METATILE_SecretBase_TropicalPlant_Base1 0x2DA +#define METATILE_SecretBase_TropicalPlant_Base2 0x2DB +#define METATILE_SecretBase_TropicalPlant_Top 0x2D2 +#define METATILE_SecretBase_TropicalPlant_TopWall 0x2D3 +#define METATILE_SecretBase_Wall_TopMid 0x202 +#define METATILE_SecretBase_YellowBalloon 0x340 +#define METATILE_SecretBase_YellowBrick_Bottom 0x22E +#define METATILE_SecretBase_YellowBrick_Top 0x226 -// gTileset_BattlePyramid -#define METATILE_BattlePyramid_Floor 0x28D -#define METATILE_BattlePyramid_Exit 0x28E +// gTileset_Shop +#define METATILE_Shop_Door_Elevator 0x285 +#define METATILE_Shop_Laptop1_Flash 0x258 +#define METATILE_Shop_Laptop1_Normal 0x29D +#define METATILE_Shop_Laptop2_Flash 0x260 +#define METATILE_Shop_Laptop2_Normal 0x2A5 + +// gTileset_Slateport +#define METATILE_Slateport_Door 0x2DC +#define METATILE_Slateport_Door_BattleTent 0x393 + +// gTileset_SootopolisGym +#define METATILE_SootopolisGym_Ice_Broken 0x206 +#define METATILE_SootopolisGym_Ice_Cracked 0x20E +#define METATILE_SootopolisGym_Stairs 0x207 + +// gTileset_Sootopolis +#define METATILE_Sootopolis_Door 0x21E +#define METATILE_Sootopolis_Door_Closed 0x248 +#define METATILE_Sootopolis_Door_PeakedRoof 0x21C +#define METATILE_Sootopolis_GymDoor_Closed 0x250 +#define METATILE_Sootopolis_RoughWater 0x290 + +// gTileset_TrainerHill +#define METATILE_TrainerHill_CounterDoor 0x334 +#define METATILE_TrainerHill_Door_Elevator_Lobby 0x32C +#define METATILE_TrainerHill_Door_Elevator_Roof 0x383 +#define METATILE_TrainerHill_GreenFloorTile 0x307 + +// gTileset_TrickHousePuzzle +#define METATILE_TrickHousePuzzle_Arrow_RedOnBlack_Down 0x263 +#define METATILE_TrickHousePuzzle_Arrow_RedOnBlack_Left 0x261 +#define METATILE_TrickHousePuzzle_Arrow_RedOnBlack_Left_Alt 0x27B +#define METATILE_TrickHousePuzzle_Arrow_RedOnBlack_Right 0x260 +#define METATILE_TrickHousePuzzle_Arrow_RedOnBlack_Right_Alt 0x27C +#define METATILE_TrickHousePuzzle_Arrow_RedOnBlack_Up 0x262 +#define METATILE_TrickHousePuzzle_Arrow_YellowOnWhite_Right 0x298 +#define METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile0 0x23B +#define METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile1 0x23C +#define METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile2 0x243 +#define METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile3 0x244 +#define METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile0 0x24B +#define METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile1 0x24C +#define METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile2 0x253 +#define METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile3 0x254 +#define METATILE_TrickHousePuzzle_BlueDoorV_Open0 0x23D +#define METATILE_TrickHousePuzzle_BlueDoorV_Open1 0x245 +#define METATILE_TrickHousePuzzle_BlueDoorV_Retracted 0x24D +#define METATILE_TrickHousePuzzle_Button_Pressed 0x259 +#define METATILE_TrickHousePuzzle_Button_Up 0x258 +#define METATILE_TrickHousePuzzle_Door_Shuttered 0x26A +#define METATILE_TrickHousePuzzle_Floor_ShadowTop 0x255 +#define METATILE_TrickHousePuzzle_Floor_ShadowTop_Alt 0x252 +#define METATILE_TrickHousePuzzle_Lever_Off 0x23E +#define METATILE_TrickHousePuzzle_Lever_On 0x23F +#define METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile0 0x238 +#define METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile1 0x239 +#define METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile2 0x240 +#define METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile3 0x241 +#define METATILE_TrickHousePuzzle_RedDoorH_Open_Tile0 0x248 +#define METATILE_TrickHousePuzzle_RedDoorH_Open_Tile1 0x249 +#define METATILE_TrickHousePuzzle_RedDoorH_Open_Tile2 0x250 +#define METATILE_TrickHousePuzzle_RedDoorH_Open_Tile3 0x251 +#define METATILE_TrickHousePuzzle_RedDoorV_Open0 0x23A +#define METATILE_TrickHousePuzzle_RedDoorV_Open1 0x242 +#define METATILE_TrickHousePuzzle_RedDoorV_Retracted 0x24A +#define METATILE_TrickHousePuzzle_Stairs_Down 0x20B + +// gTileset_Underwater +#define METATILE_Underwater_FloorShadow 0x228 +#define METATILE_Underwater_RockWall 0x21E #endif // GUARD_METATILE_LABELS_H From bd549903336848ac3b914eb36aeee832d446ff96 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Wed, 15 Feb 2023 13:56:11 -0300 Subject: [PATCH 054/428] Review changes --- asm/macros/event.inc | 4 +- data/maps/BirthIsland_Exterior/scripts.inc | 2 +- data/maps/FarawayIsland_Interior/scripts.inc | 2 +- data/maps/NavelRock_Bottom/scripts.inc | 2 +- data/maps/NavelRock_Top/scripts.inc | 2 +- data/maps/SouthernIsland_Interior/scripts.inc | 4 +- data/script_cmd_table.inc | 454 +++++++++--------- data/specials.inc | 2 +- include/pokemon.h | 5 +- src/battle_util.c | 2 +- src/egg_hatch.c | 4 +- src/party_menu.c | 4 +- src/pokemon.c | 12 +- src/scrcmd.c | 4 +- src/trade.c | 4 +- 15 files changed, 253 insertions(+), 254 deletions(-) diff --git a/asm/macros/event.inc b/asm/macros/event.inc index 26a7e8157922..b91ac682107c 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -1933,9 +1933,9 @@ .endm @ Creates a Pokémon with the modernFatefulEncounter bit set for an encounter - .macro setmodernfatefulencountermon species:req, level:req, item=ITEM_NONE + .macro seteventmon species:req, level:req, item=ITEM_NONE setvar VAR_0x8004, \species setvar VAR_0x8005, \level setvar VAR_0x8006, \item - special CreateModernFatefulEncounterEnemyMon + special CreateEnemyEventMon .endm diff --git a/data/maps/BirthIsland_Exterior/scripts.inc b/data/maps/BirthIsland_Exterior/scripts.inc index 4e38d8855e74..d2174eee99bf 100644 --- a/data/maps/BirthIsland_Exterior/scripts.inc +++ b/data/maps/BirthIsland_Exterior/scripts.inc @@ -85,7 +85,7 @@ BirthIsland_Exterior_EventScript_Deoxys:: delay 40 waitmoncry setvar VAR_LAST_TALKED, LOCALID_DEOXYS - setmodernfatefulencountermon SPECIES_DEOXYS, 30 + seteventmon SPECIES_DEOXYS, 30 setflag FLAG_SYS_CTRL_OBJ_DELETE special BattleSetup_StartLegendaryBattle waitstate diff --git a/data/maps/FarawayIsland_Interior/scripts.inc b/data/maps/FarawayIsland_Interior/scripts.inc index 91536c13bf89..d3d519ed1511 100644 --- a/data/maps/FarawayIsland_Interior/scripts.inc +++ b/data/maps/FarawayIsland_Interior/scripts.inc @@ -129,7 +129,7 @@ FarawayIsland_Interior_EventScript_Mew:: special DestroyMewEmergingGrassSprite delay 40 waitmoncry - setmodernfatefulencountermon SPECIES_MEW, 30 + seteventmon SPECIES_MEW, 30 setflag FLAG_SYS_CTRL_OBJ_DELETE special BattleSetup_StartLegendaryBattle waitstate diff --git a/data/maps/NavelRock_Bottom/scripts.inc b/data/maps/NavelRock_Bottom/scripts.inc index 4230398d8b39..90cc229895be 100644 --- a/data/maps/NavelRock_Bottom/scripts.inc +++ b/data/maps/NavelRock_Bottom/scripts.inc @@ -53,7 +53,7 @@ NavelRock_Bottom_EventScript_Lugia:: playmoncry SPECIES_LUGIA, CRY_MODE_ENCOUNTER waitmoncry delay 20 - setmodernfatefulencountermon SPECIES_LUGIA, 70 + seteventmon SPECIES_LUGIA, 70 setflag FLAG_SYS_CTRL_OBJ_DELETE special BattleSetup_StartLegendaryBattle waitstate diff --git a/data/maps/NavelRock_Top/scripts.inc b/data/maps/NavelRock_Top/scripts.inc index 4388c1d5c5af..10969367a11f 100644 --- a/data/maps/NavelRock_Top/scripts.inc +++ b/data/maps/NavelRock_Top/scripts.inc @@ -57,7 +57,7 @@ NavelRock_Top_EventScript_HoOh:: applymovement LOCALID_HO_OH, NavelRock_Top_Movement_HoOhApproach waitmovement 0 special RemoveCameraObject - setmodernfatefulencountermon SPECIES_HO_OH, 70 + seteventmon SPECIES_HO_OH, 70 setflag FLAG_SYS_CTRL_OBJ_DELETE special BattleSetup_StartLegendaryBattle waitstate diff --git a/data/maps/SouthernIsland_Interior/scripts.inc b/data/maps/SouthernIsland_Interior/scripts.inc index 77350c076881..8486739d93dc 100644 --- a/data/maps/SouthernIsland_Interior/scripts.inc +++ b/data/maps/SouthernIsland_Interior/scripts.inc @@ -105,11 +105,11 @@ SouthernIsland_Interior_EventScript_Sign:: end SouthernIsland_Interior_EventScript_SetLatiosBattleVars:: - setmodernfatefulencountermon SPECIES_LATIOS, 50, ITEM_SOUL_DEW + seteventmon SPECIES_LATIOS, 50, ITEM_SOUL_DEW return SouthernIsland_Interior_EventScript_SetLatiasBattleVars:: - setmodernfatefulencountermon SPECIES_LATIAS, 50, ITEM_SOUL_DEW + seteventmon SPECIES_LATIAS, 50, ITEM_SOUL_DEW return SouthernIsland_Interior_Movement_CameraPanUp: diff --git a/data/script_cmd_table.inc b/data/script_cmd_table.inc index d16e25e18779..f50ce5322bee 100644 --- a/data/script_cmd_table.inc +++ b/data/script_cmd_table.inc @@ -1,232 +1,232 @@ .align 2 gScriptCmdTable:: - .4byte ScrCmd_nop @ 0x00 - .4byte ScrCmd_nop1 @ 0x01 - .4byte ScrCmd_end @ 0x02 - .4byte ScrCmd_return @ 0x03 - .4byte ScrCmd_call @ 0x04 - .4byte ScrCmd_goto @ 0x05 - .4byte ScrCmd_goto_if @ 0x06 - .4byte ScrCmd_call_if @ 0x07 - .4byte ScrCmd_gotostd @ 0x08 - .4byte ScrCmd_callstd @ 0x09 - .4byte ScrCmd_gotostd_if @ 0x0a - .4byte ScrCmd_callstd_if @ 0x0b - .4byte ScrCmd_returnram @ 0x0c - .4byte ScrCmd_endram @ 0x0d - .4byte ScrCmd_setmysteryeventstatus @ 0x0e - .4byte ScrCmd_loadword @ 0x0f - .4byte ScrCmd_loadbyte @ 0x10 - .4byte ScrCmd_setptr @ 0x11 - .4byte ScrCmd_loadbytefromptr @ 0x12 - .4byte ScrCmd_setptrbyte @ 0x13 - .4byte ScrCmd_copylocal @ 0x14 - .4byte ScrCmd_copybyte @ 0x15 - .4byte ScrCmd_setvar @ 0x16 - .4byte ScrCmd_addvar @ 0x17 - .4byte ScrCmd_subvar @ 0x18 - .4byte ScrCmd_copyvar @ 0x19 - .4byte ScrCmd_setorcopyvar @ 0x1a - .4byte ScrCmd_compare_local_to_local @ 0x1b - .4byte ScrCmd_compare_local_to_value @ 0x1c - .4byte ScrCmd_compare_local_to_ptr @ 0x1d - .4byte ScrCmd_compare_ptr_to_local @ 0x1e - .4byte ScrCmd_compare_ptr_to_value @ 0x1f - .4byte ScrCmd_compare_ptr_to_ptr @ 0x20 - .4byte ScrCmd_compare_var_to_value @ 0x21 - .4byte ScrCmd_compare_var_to_var @ 0x22 - .4byte ScrCmd_callnative @ 0x23 - .4byte ScrCmd_gotonative @ 0x24 - .4byte ScrCmd_special @ 0x25 - .4byte ScrCmd_specialvar @ 0x26 - .4byte ScrCmd_waitstate @ 0x27 - .4byte ScrCmd_delay @ 0x28 - .4byte ScrCmd_setflag @ 0x29 - .4byte ScrCmd_clearflag @ 0x2a - .4byte ScrCmd_checkflag @ 0x2b - .4byte ScrCmd_initclock @ 0x2c - .4byte ScrCmd_dotimebasedevents @ 0x2d - .4byte ScrCmd_gettime @ 0x2e - .4byte ScrCmd_playse @ 0x2f - .4byte ScrCmd_waitse @ 0x30 - .4byte ScrCmd_playfanfare @ 0x31 - .4byte ScrCmd_waitfanfare @ 0x32 - .4byte ScrCmd_playbgm @ 0x33 - .4byte ScrCmd_savebgm @ 0x34 - .4byte ScrCmd_fadedefaultbgm @ 0x35 - .4byte ScrCmd_fadenewbgm @ 0x36 - .4byte ScrCmd_fadeoutbgm @ 0x37 - .4byte ScrCmd_fadeinbgm @ 0x38 - .4byte ScrCmd_warp @ 0x39 - .4byte ScrCmd_warpsilent @ 0x3a - .4byte ScrCmd_warpdoor @ 0x3b - .4byte ScrCmd_warphole @ 0x3c - .4byte ScrCmd_warpteleport @ 0x3d - .4byte ScrCmd_setwarp @ 0x3e - .4byte ScrCmd_setdynamicwarp @ 0x3f - .4byte ScrCmd_setdivewarp @ 0x40 - .4byte ScrCmd_setholewarp @ 0x41 - .4byte ScrCmd_getplayerxy @ 0x42 - .4byte ScrCmd_getpartysize @ 0x43 - .4byte ScrCmd_additem @ 0x44 - .4byte ScrCmd_removeitem @ 0x45 - .4byte ScrCmd_checkitemspace @ 0x46 - .4byte ScrCmd_checkitem @ 0x47 - .4byte ScrCmd_checkitemtype @ 0x48 - .4byte ScrCmd_addpcitem @ 0x49 - .4byte ScrCmd_checkpcitem @ 0x4a - .4byte ScrCmd_adddecoration @ 0x4b - .4byte ScrCmd_removedecoration @ 0x4c - .4byte ScrCmd_checkdecor @ 0x4d - .4byte ScrCmd_checkdecorspace @ 0x4e - .4byte ScrCmd_applymovement @ 0x4f - .4byte ScrCmd_applymovementat @ 0x50 - .4byte ScrCmd_waitmovement @ 0x51 - .4byte ScrCmd_waitmovementat @ 0x52 - .4byte ScrCmd_removeobject @ 0x53 - .4byte ScrCmd_removeobjectat @ 0x54 - .4byte ScrCmd_addobject @ 0x55 - .4byte ScrCmd_addobjectat @ 0x56 - .4byte ScrCmd_setobjectxy @ 0x57 - .4byte ScrCmd_showobjectat @ 0x58 - .4byte ScrCmd_hideobjectat @ 0x59 - .4byte ScrCmd_faceplayer @ 0x5a - .4byte ScrCmd_turnobject @ 0x5b - .4byte ScrCmd_trainerbattle @ 0x5c - .4byte ScrCmd_dotrainerbattle @ 0x5d - .4byte ScrCmd_gotopostbattlescript @ 0x5e - .4byte ScrCmd_gotobeatenscript @ 0x5f - .4byte ScrCmd_checktrainerflag @ 0x60 - .4byte ScrCmd_settrainerflag @ 0x61 - .4byte ScrCmd_cleartrainerflag @ 0x62 - .4byte ScrCmd_setobjectxyperm @ 0x63 - .4byte ScrCmd_copyobjectxytoperm @ 0x64 - .4byte ScrCmd_setobjectmovementtype @ 0x65 - .4byte ScrCmd_waitmessage @ 0x66 - .4byte ScrCmd_message @ 0x67 - .4byte ScrCmd_closemessage @ 0x68 - .4byte ScrCmd_lockall @ 0x69 - .4byte ScrCmd_lock @ 0x6a - .4byte ScrCmd_releaseall @ 0x6b - .4byte ScrCmd_release @ 0x6c - .4byte ScrCmd_waitbuttonpress @ 0x6d - .4byte ScrCmd_yesnobox @ 0x6e - .4byte ScrCmd_multichoice @ 0x6f - .4byte ScrCmd_multichoicedefault @ 0x70 - .4byte ScrCmd_multichoicegrid @ 0x71 - .4byte ScrCmd_drawbox @ 0x72 - .4byte ScrCmd_erasebox @ 0x73 - .4byte ScrCmd_drawboxtext @ 0x74 - .4byte ScrCmd_showmonpic @ 0x75 - .4byte ScrCmd_hidemonpic @ 0x76 - .4byte ScrCmd_showcontestpainting @ 0x77 - .4byte ScrCmd_braillemessage @ 0x78 - .4byte ScrCmd_givemon @ 0x79 - .4byte ScrCmd_giveegg @ 0x7a - .4byte ScrCmd_setmonmove @ 0x7b - .4byte ScrCmd_checkpartymove @ 0x7c - .4byte ScrCmd_bufferspeciesname @ 0x7d - .4byte ScrCmd_bufferleadmonspeciesname @ 0x7e - .4byte ScrCmd_bufferpartymonnick @ 0x7f - .4byte ScrCmd_bufferitemname @ 0x80 - .4byte ScrCmd_bufferdecorationname @ 0x81 - .4byte ScrCmd_buffermovename @ 0x82 - .4byte ScrCmd_buffernumberstring @ 0x83 - .4byte ScrCmd_bufferstdstring @ 0x84 - .4byte ScrCmd_bufferstring @ 0x85 - .4byte ScrCmd_pokemart @ 0x86 - .4byte ScrCmd_pokemartdecoration @ 0x87 - .4byte ScrCmd_pokemartdecoration2 @ 0x88 - .4byte ScrCmd_playslotmachine @ 0x89 - .4byte ScrCmd_setberrytree @ 0x8a - .4byte ScrCmd_choosecontestmon @ 0x8b - .4byte ScrCmd_startcontest @ 0x8c - .4byte ScrCmd_showcontestresults @ 0x8d - .4byte ScrCmd_contestlinktransfer @ 0x8e - .4byte ScrCmd_random @ 0x8f - .4byte ScrCmd_addmoney @ 0x90 - .4byte ScrCmd_removemoney @ 0x91 - .4byte ScrCmd_checkmoney @ 0x92 - .4byte ScrCmd_showmoneybox @ 0x93 - .4byte ScrCmd_hidemoneybox @ 0x94 - .4byte ScrCmd_updatemoneybox @ 0x95 - .4byte ScrCmd_getpokenewsactive @ 0x96 - .4byte ScrCmd_fadescreen @ 0x97 - .4byte ScrCmd_fadescreenspeed @ 0x98 - .4byte ScrCmd_setflashlevel @ 0x99 - .4byte ScrCmd_animateflash @ 0x9a - .4byte ScrCmd_messageautoscroll @ 0x9b - .4byte ScrCmd_dofieldeffect @ 0x9c - .4byte ScrCmd_setfieldeffectargument @ 0x9d - .4byte ScrCmd_waitfieldeffect @ 0x9e - .4byte ScrCmd_setrespawn @ 0x9f - .4byte ScrCmd_checkplayergender @ 0xa0 - .4byte ScrCmd_playmoncry @ 0xa1 - .4byte ScrCmd_setmetatile @ 0xa2 - .4byte ScrCmd_resetweather @ 0xa3 - .4byte ScrCmd_setweather @ 0xa4 - .4byte ScrCmd_doweather @ 0xa5 - .4byte ScrCmd_setstepcallback @ 0xa6 - .4byte ScrCmd_setmaplayoutindex @ 0xa7 - .4byte ScrCmd_setobjectsubpriority @ 0xa8 - .4byte ScrCmd_resetobjectsubpriority @ 0xa9 - .4byte ScrCmd_createvobject @ 0xaa - .4byte ScrCmd_turnvobject @ 0xab - .4byte ScrCmd_opendoor @ 0xac - .4byte ScrCmd_closedoor @ 0xad - .4byte ScrCmd_waitdooranim @ 0xae - .4byte ScrCmd_setdooropen @ 0xaf - .4byte ScrCmd_setdoorclosed @ 0xb0 - .4byte ScrCmd_addelevmenuitem @ 0xb1 - .4byte ScrCmd_showelevmenu @ 0xb2 - .4byte ScrCmd_checkcoins @ 0xb3 - .4byte ScrCmd_addcoins @ 0xb4 - .4byte ScrCmd_removecoins @ 0xb5 - .4byte ScrCmd_setwildbattle @ 0xb6 - .4byte ScrCmd_dowildbattle @ 0xb7 - .4byte ScrCmd_setvaddress @ 0xb8 - .4byte ScrCmd_vgoto @ 0xb9 - .4byte ScrCmd_vcall @ 0xba - .4byte ScrCmd_vgoto_if @ 0xbb - .4byte ScrCmd_vcall_if @ 0xbc - .4byte ScrCmd_vmessage @ 0xbd - .4byte ScrCmd_vbuffermessage @ 0xbe - .4byte ScrCmd_vbufferstring @ 0xbf - .4byte ScrCmd_showcoinsbox @ 0xc0 - .4byte ScrCmd_hidecoinsbox @ 0xc1 - .4byte ScrCmd_updatecoinsbox @ 0xc2 - .4byte ScrCmd_incrementgamestat @ 0xc3 - .4byte ScrCmd_setescapewarp @ 0xc4 - .4byte ScrCmd_waitmoncry @ 0xc5 - .4byte ScrCmd_bufferboxname @ 0xc6 - .4byte ScrCmd_nop1 @ 0xc7 - .4byte ScrCmd_nop1 @ 0xc8 - .4byte ScrCmd_nop1 @ 0xc9 - .4byte ScrCmd_nop1 @ 0xca - .4byte ScrCmd_nop1 @ 0xcb - .4byte ScrCmd_nop1 @ 0xcc - .4byte ScrCmd_setmonmodernfatefulencounter @ 0xcd - .4byte ScrCmd_checkmonmodernfatefulencounter @ 0xce - .4byte ScrCmd_trywondercardscript @ 0xcf - .4byte ScrCmd_nop1 @ 0xd0 - .4byte ScrCmd_warpspinenter @ 0xd1 - .4byte ScrCmd_setmonmetlocation @ 0xd2 - .4byte ScrCmd_moverotatingtileobjects @ 0xd3 - .4byte ScrCmd_turnrotatingtileobjects @ 0xd4 - .4byte ScrCmd_initrotatingtilepuzzle @ 0xd5 - .4byte ScrCmd_freerotatingtilepuzzle @ 0xd6 - .4byte ScrCmd_warpmossdeepgym @ 0xd7 - .4byte ScrCmd_selectapproachingtrainer @ 0xd8 - .4byte ScrCmd_lockfortrainer @ 0xd9 - .4byte ScrCmd_closebraillemessage @ 0xda - .4byte ScrCmd_messageinstant @ 0xdb - .4byte ScrCmd_fadescreenswapbuffers @ 0xdc - .4byte ScrCmd_buffertrainerclassname @ 0xdd - .4byte ScrCmd_buffertrainername @ 0xde - .4byte ScrCmd_pokenavcall @ 0xdf - .4byte ScrCmd_warpwhitefade @ 0xe0 - .4byte ScrCmd_buffercontestname @ 0xe1 - .4byte ScrCmd_bufferitemnameplural @ 0xe2 + .4byte ScrCmd_nop @ 0x00 + .4byte ScrCmd_nop1 @ 0x01 + .4byte ScrCmd_end @ 0x02 + .4byte ScrCmd_return @ 0x03 + .4byte ScrCmd_call @ 0x04 + .4byte ScrCmd_goto @ 0x05 + .4byte ScrCmd_goto_if @ 0x06 + .4byte ScrCmd_call_if @ 0x07 + .4byte ScrCmd_gotostd @ 0x08 + .4byte ScrCmd_callstd @ 0x09 + .4byte ScrCmd_gotostd_if @ 0x0a + .4byte ScrCmd_callstd_if @ 0x0b + .4byte ScrCmd_returnram @ 0x0c + .4byte ScrCmd_endram @ 0x0d + .4byte ScrCmd_setmysteryeventstatus @ 0x0e + .4byte ScrCmd_loadword @ 0x0f + .4byte ScrCmd_loadbyte @ 0x10 + .4byte ScrCmd_setptr @ 0x11 + .4byte ScrCmd_loadbytefromptr @ 0x12 + .4byte ScrCmd_setptrbyte @ 0x13 + .4byte ScrCmd_copylocal @ 0x14 + .4byte ScrCmd_copybyte @ 0x15 + .4byte ScrCmd_setvar @ 0x16 + .4byte ScrCmd_addvar @ 0x17 + .4byte ScrCmd_subvar @ 0x18 + .4byte ScrCmd_copyvar @ 0x19 + .4byte ScrCmd_setorcopyvar @ 0x1a + .4byte ScrCmd_compare_local_to_local @ 0x1b + .4byte ScrCmd_compare_local_to_value @ 0x1c + .4byte ScrCmd_compare_local_to_ptr @ 0x1d + .4byte ScrCmd_compare_ptr_to_local @ 0x1e + .4byte ScrCmd_compare_ptr_to_value @ 0x1f + .4byte ScrCmd_compare_ptr_to_ptr @ 0x20 + .4byte ScrCmd_compare_var_to_value @ 0x21 + .4byte ScrCmd_compare_var_to_var @ 0x22 + .4byte ScrCmd_callnative @ 0x23 + .4byte ScrCmd_gotonative @ 0x24 + .4byte ScrCmd_special @ 0x25 + .4byte ScrCmd_specialvar @ 0x26 + .4byte ScrCmd_waitstate @ 0x27 + .4byte ScrCmd_delay @ 0x28 + .4byte ScrCmd_setflag @ 0x29 + .4byte ScrCmd_clearflag @ 0x2a + .4byte ScrCmd_checkflag @ 0x2b + .4byte ScrCmd_initclock @ 0x2c + .4byte ScrCmd_dotimebasedevents @ 0x2d + .4byte ScrCmd_gettime @ 0x2e + .4byte ScrCmd_playse @ 0x2f + .4byte ScrCmd_waitse @ 0x30 + .4byte ScrCmd_playfanfare @ 0x31 + .4byte ScrCmd_waitfanfare @ 0x32 + .4byte ScrCmd_playbgm @ 0x33 + .4byte ScrCmd_savebgm @ 0x34 + .4byte ScrCmd_fadedefaultbgm @ 0x35 + .4byte ScrCmd_fadenewbgm @ 0x36 + .4byte ScrCmd_fadeoutbgm @ 0x37 + .4byte ScrCmd_fadeinbgm @ 0x38 + .4byte ScrCmd_warp @ 0x39 + .4byte ScrCmd_warpsilent @ 0x3a + .4byte ScrCmd_warpdoor @ 0x3b + .4byte ScrCmd_warphole @ 0x3c + .4byte ScrCmd_warpteleport @ 0x3d + .4byte ScrCmd_setwarp @ 0x3e + .4byte ScrCmd_setdynamicwarp @ 0x3f + .4byte ScrCmd_setdivewarp @ 0x40 + .4byte ScrCmd_setholewarp @ 0x41 + .4byte ScrCmd_getplayerxy @ 0x42 + .4byte ScrCmd_getpartysize @ 0x43 + .4byte ScrCmd_additem @ 0x44 + .4byte ScrCmd_removeitem @ 0x45 + .4byte ScrCmd_checkitemspace @ 0x46 + .4byte ScrCmd_checkitem @ 0x47 + .4byte ScrCmd_checkitemtype @ 0x48 + .4byte ScrCmd_addpcitem @ 0x49 + .4byte ScrCmd_checkpcitem @ 0x4a + .4byte ScrCmd_adddecoration @ 0x4b + .4byte ScrCmd_removedecoration @ 0x4c + .4byte ScrCmd_checkdecor @ 0x4d + .4byte ScrCmd_checkdecorspace @ 0x4e + .4byte ScrCmd_applymovement @ 0x4f + .4byte ScrCmd_applymovementat @ 0x50 + .4byte ScrCmd_waitmovement @ 0x51 + .4byte ScrCmd_waitmovementat @ 0x52 + .4byte ScrCmd_removeobject @ 0x53 + .4byte ScrCmd_removeobjectat @ 0x54 + .4byte ScrCmd_addobject @ 0x55 + .4byte ScrCmd_addobjectat @ 0x56 + .4byte ScrCmd_setobjectxy @ 0x57 + .4byte ScrCmd_showobjectat @ 0x58 + .4byte ScrCmd_hideobjectat @ 0x59 + .4byte ScrCmd_faceplayer @ 0x5a + .4byte ScrCmd_turnobject @ 0x5b + .4byte ScrCmd_trainerbattle @ 0x5c + .4byte ScrCmd_dotrainerbattle @ 0x5d + .4byte ScrCmd_gotopostbattlescript @ 0x5e + .4byte ScrCmd_gotobeatenscript @ 0x5f + .4byte ScrCmd_checktrainerflag @ 0x60 + .4byte ScrCmd_settrainerflag @ 0x61 + .4byte ScrCmd_cleartrainerflag @ 0x62 + .4byte ScrCmd_setobjectxyperm @ 0x63 + .4byte ScrCmd_copyobjectxytoperm @ 0x64 + .4byte ScrCmd_setobjectmovementtype @ 0x65 + .4byte ScrCmd_waitmessage @ 0x66 + .4byte ScrCmd_message @ 0x67 + .4byte ScrCmd_closemessage @ 0x68 + .4byte ScrCmd_lockall @ 0x69 + .4byte ScrCmd_lock @ 0x6a + .4byte ScrCmd_releaseall @ 0x6b + .4byte ScrCmd_release @ 0x6c + .4byte ScrCmd_waitbuttonpress @ 0x6d + .4byte ScrCmd_yesnobox @ 0x6e + .4byte ScrCmd_multichoice @ 0x6f + .4byte ScrCmd_multichoicedefault @ 0x70 + .4byte ScrCmd_multichoicegrid @ 0x71 + .4byte ScrCmd_drawbox @ 0x72 + .4byte ScrCmd_erasebox @ 0x73 + .4byte ScrCmd_drawboxtext @ 0x74 + .4byte ScrCmd_showmonpic @ 0x75 + .4byte ScrCmd_hidemonpic @ 0x76 + .4byte ScrCmd_showcontestpainting @ 0x77 + .4byte ScrCmd_braillemessage @ 0x78 + .4byte ScrCmd_givemon @ 0x79 + .4byte ScrCmd_giveegg @ 0x7a + .4byte ScrCmd_setmonmove @ 0x7b + .4byte ScrCmd_checkpartymove @ 0x7c + .4byte ScrCmd_bufferspeciesname @ 0x7d + .4byte ScrCmd_bufferleadmonspeciesname @ 0x7e + .4byte ScrCmd_bufferpartymonnick @ 0x7f + .4byte ScrCmd_bufferitemname @ 0x80 + .4byte ScrCmd_bufferdecorationname @ 0x81 + .4byte ScrCmd_buffermovename @ 0x82 + .4byte ScrCmd_buffernumberstring @ 0x83 + .4byte ScrCmd_bufferstdstring @ 0x84 + .4byte ScrCmd_bufferstring @ 0x85 + .4byte ScrCmd_pokemart @ 0x86 + .4byte ScrCmd_pokemartdecoration @ 0x87 + .4byte ScrCmd_pokemartdecoration2 @ 0x88 + .4byte ScrCmd_playslotmachine @ 0x89 + .4byte ScrCmd_setberrytree @ 0x8a + .4byte ScrCmd_choosecontestmon @ 0x8b + .4byte ScrCmd_startcontest @ 0x8c + .4byte ScrCmd_showcontestresults @ 0x8d + .4byte ScrCmd_contestlinktransfer @ 0x8e + .4byte ScrCmd_random @ 0x8f + .4byte ScrCmd_addmoney @ 0x90 + .4byte ScrCmd_removemoney @ 0x91 + .4byte ScrCmd_checkmoney @ 0x92 + .4byte ScrCmd_showmoneybox @ 0x93 + .4byte ScrCmd_hidemoneybox @ 0x94 + .4byte ScrCmd_updatemoneybox @ 0x95 + .4byte ScrCmd_getpokenewsactive @ 0x96 + .4byte ScrCmd_fadescreen @ 0x97 + .4byte ScrCmd_fadescreenspeed @ 0x98 + .4byte ScrCmd_setflashlevel @ 0x99 + .4byte ScrCmd_animateflash @ 0x9a + .4byte ScrCmd_messageautoscroll @ 0x9b + .4byte ScrCmd_dofieldeffect @ 0x9c + .4byte ScrCmd_setfieldeffectargument @ 0x9d + .4byte ScrCmd_waitfieldeffect @ 0x9e + .4byte ScrCmd_setrespawn @ 0x9f + .4byte ScrCmd_checkplayergender @ 0xa0 + .4byte ScrCmd_playmoncry @ 0xa1 + .4byte ScrCmd_setmetatile @ 0xa2 + .4byte ScrCmd_resetweather @ 0xa3 + .4byte ScrCmd_setweather @ 0xa4 + .4byte ScrCmd_doweather @ 0xa5 + .4byte ScrCmd_setstepcallback @ 0xa6 + .4byte ScrCmd_setmaplayoutindex @ 0xa7 + .4byte ScrCmd_setobjectsubpriority @ 0xa8 + .4byte ScrCmd_resetobjectsubpriority @ 0xa9 + .4byte ScrCmd_createvobject @ 0xaa + .4byte ScrCmd_turnvobject @ 0xab + .4byte ScrCmd_opendoor @ 0xac + .4byte ScrCmd_closedoor @ 0xad + .4byte ScrCmd_waitdooranim @ 0xae + .4byte ScrCmd_setdooropen @ 0xaf + .4byte ScrCmd_setdoorclosed @ 0xb0 + .4byte ScrCmd_addelevmenuitem @ 0xb1 + .4byte ScrCmd_showelevmenu @ 0xb2 + .4byte ScrCmd_checkcoins @ 0xb3 + .4byte ScrCmd_addcoins @ 0xb4 + .4byte ScrCmd_removecoins @ 0xb5 + .4byte ScrCmd_setwildbattle @ 0xb6 + .4byte ScrCmd_dowildbattle @ 0xb7 + .4byte ScrCmd_setvaddress @ 0xb8 + .4byte ScrCmd_vgoto @ 0xb9 + .4byte ScrCmd_vcall @ 0xba + .4byte ScrCmd_vgoto_if @ 0xbb + .4byte ScrCmd_vcall_if @ 0xbc + .4byte ScrCmd_vmessage @ 0xbd + .4byte ScrCmd_vbuffermessage @ 0xbe + .4byte ScrCmd_vbufferstring @ 0xbf + .4byte ScrCmd_showcoinsbox @ 0xc0 + .4byte ScrCmd_hidecoinsbox @ 0xc1 + .4byte ScrCmd_updatecoinsbox @ 0xc2 + .4byte ScrCmd_incrementgamestat @ 0xc3 + .4byte ScrCmd_setescapewarp @ 0xc4 + .4byte ScrCmd_waitmoncry @ 0xc5 + .4byte ScrCmd_bufferboxname @ 0xc6 + .4byte ScrCmd_nop1 @ 0xc7 + .4byte ScrCmd_nop1 @ 0xc8 + .4byte ScrCmd_nop1 @ 0xc9 + .4byte ScrCmd_nop1 @ 0xca + .4byte ScrCmd_nop1 @ 0xcb + .4byte ScrCmd_nop1 @ 0xcc + .4byte ScrCmd_setmonmodernfatefulencounter @ 0xcd + .4byte ScrCmd_checkmonmodernfatefulencounter @ 0xce + .4byte ScrCmd_trywondercardscript @ 0xcf + .4byte ScrCmd_nop1 @ 0xd0 + .4byte ScrCmd_warpspinenter @ 0xd1 + .4byte ScrCmd_setmonmetlocation @ 0xd2 + .4byte ScrCmd_moverotatingtileobjects @ 0xd3 + .4byte ScrCmd_turnrotatingtileobjects @ 0xd4 + .4byte ScrCmd_initrotatingtilepuzzle @ 0xd5 + .4byte ScrCmd_freerotatingtilepuzzle @ 0xd6 + .4byte ScrCmd_warpmossdeepgym @ 0xd7 + .4byte ScrCmd_selectapproachingtrainer @ 0xd8 + .4byte ScrCmd_lockfortrainer @ 0xd9 + .4byte ScrCmd_closebraillemessage @ 0xda + .4byte ScrCmd_messageinstant @ 0xdb + .4byte ScrCmd_fadescreenswapbuffers @ 0xdc + .4byte ScrCmd_buffertrainerclassname @ 0xdd + .4byte ScrCmd_buffertrainername @ 0xde + .4byte ScrCmd_pokenavcall @ 0xdf + .4byte ScrCmd_warpwhitefade @ 0xe0 + .4byte ScrCmd_buffercontestname @ 0xe1 + .4byte ScrCmd_bufferitemnameplural @ 0xe2 gScriptCmdTableEnd:: .4byte ScrCmd_nop diff --git a/data/specials.inc b/data/specials.inc index 6d53864676e9..a0dbde86836e 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -490,7 +490,7 @@ gSpecials:: def_special ScrollableMultichoice_ClosePersistentMenu def_special DoDeoxysRockInteraction def_special SetDeoxysRockPalette - def_special CreateModernFatefulEncounterEnemyMon + def_special CreateEnemyEventMon def_special StartMirageTowerDisintegration def_special StartMirageTowerShake def_special StartMirageTowerFossilFallAndSink diff --git a/include/pokemon.h b/include/pokemon.h index 273cb9175f31..0375b20dc0ad 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -85,7 +85,7 @@ enum { MON_DATA_EARTH_RIBBON, MON_DATA_WORLD_RIBBON, MON_DATA_UNUSED_RIBBONS, - MON_DATA_FATEFUL_ENCOUNTER, + MON_DATA_MODERN_FATEFUL_ENCOUNTER, MON_DATA_KNOWN_MOVES, MON_DATA_RIBBON_COUNT, MON_DATA_RIBBONS, @@ -408,12 +408,11 @@ void CreateBattleTowerMon_HandleLevel(struct Pokemon *mon, struct BattleTowerPok void CreateApprenticeMon(struct Pokemon *mon, const struct Apprentice *src, u8 monId); void CreateMonWithEVSpreadNatureOTID(struct Pokemon *mon, u16 species, u8 level, u8 nature, u8 fixedIV, u8 evSpread, u32 otId); void ConvertPokemonToBattleTowerPokemon(struct Pokemon *mon, struct BattleTowerPokemon *dest); -void CreateModernFatefulEncounterMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId); bool8 ShouldIgnoreDeoxysForm(u8 caseId, u8 battlerId); void SetDeoxysStats(void); u16 GetUnionRoomTrainerPic(void); u16 GetUnionRoomTrainerClass(void); -void CreateModernFatefulEncounterEnemyMon(void); +void CreateEnemyEventMon(void); void CalculateMonStats(struct Pokemon *mon); void BoxMonToMon(const struct BoxPokemon *src, struct Pokemon *dest); u8 GetLevelFromMonExp(struct Pokemon *mon); diff --git a/src/battle_util.c b/src/battle_util.c index 007bf688318f..9f06bf36bfe5 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -3892,7 +3892,7 @@ static bool32 IsBattlerModernFatefulEncounter(u8 battlerId) if (GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES, NULL) != SPECIES_DEOXYS && GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES, NULL) != SPECIES_MEW) return TRUE; - return GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_FATEFUL_ENCOUNTER, NULL); + return GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_MODERN_FATEFUL_ENCOUNTER, NULL); } u8 IsMonDisobedient(void) diff --git a/src/egg_hatch.c b/src/egg_hatch.c index bf615be06120..96d431a22682 100644 --- a/src/egg_hatch.c +++ b/src/egg_hatch.c @@ -332,7 +332,7 @@ static void CreateHatchedMon(struct Pokemon *egg, struct Pokemon *temp) gameMet = GetMonData(egg, MON_DATA_MET_GAME); markings = GetMonData(egg, MON_DATA_MARKINGS); pokerus = GetMonData(egg, MON_DATA_POKERUS); - isModernFatefulEncounter = GetMonData(egg, MON_DATA_FATEFUL_ENCOUNTER); + isModernFatefulEncounter = GetMonData(egg, MON_DATA_MODERN_FATEFUL_ENCOUNTER); CreateMon(temp, species, EGG_HATCH_LEVEL, USE_RANDOM_IVS, TRUE, personality, OT_ID_PLAYER_ID, 0); @@ -350,7 +350,7 @@ static void CreateHatchedMon(struct Pokemon *egg, struct Pokemon *temp) friendship = 120; SetMonData(temp, MON_DATA_FRIENDSHIP, &friendship); SetMonData(temp, MON_DATA_POKERUS, &pokerus); - SetMonData(temp, MON_DATA_FATEFUL_ENCOUNTER, &isModernFatefulEncounter); + SetMonData(temp, MON_DATA_MODERN_FATEFUL_ENCOUNTER, &isModernFatefulEncounter); *egg = *temp; } diff --git a/src/party_menu.c b/src/party_menu.c index 8c84c5c0306d..dcc3974c1671 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -3591,7 +3591,7 @@ static void CursorCb_Register(u8 taskId) { u16 species2 = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES2); u16 species = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES); - u8 isModernFatefulEncounter = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_FATEFUL_ENCOUNTER); + u8 isModernFatefulEncounter = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_MODERN_FATEFUL_ENCOUNTER); switch (CanRegisterMonForTradingBoard(*(struct RfuGameCompatibilityData *)GetHostRfuGameData(), species2, species, isModernFatefulEncounter)) { @@ -3618,7 +3618,7 @@ static void CursorCb_Trade1(u8 taskId) { u16 species2 = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES2); u16 species = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES); - u8 isModernFatefulEncounter = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_FATEFUL_ENCOUNTER); + u8 isModernFatefulEncounter = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_MODERN_FATEFUL_ENCOUNTER); u32 stringId = GetUnionRoomTradeMessageId(*(struct RfuGameCompatibilityData *)GetHostRfuGameData(), gRfuPartnerCompatibilityData, species2, gUnionRoomOfferedSpecies, gUnionRoomRequestedMonType, species, isModernFatefulEncounter); if (stringId != UR_TRADE_MSG_NONE) diff --git a/src/pokemon.c b/src/pokemon.c index 9b6ee977d6cd..1c55091e0d0c 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -2623,12 +2623,12 @@ void ConvertPokemonToBattleTowerPokemon(struct Pokemon *mon, struct BattleTowerP GetMonData(mon, MON_DATA_NICKNAME, dest->nickname); } -void CreateModernFatefulEncounterMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId) +static void CreateEventMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId) { bool32 isModernFatefulEncounter = TRUE; CreateMon(mon, species, level, fixedIV, hasFixedPersonality, fixedPersonality, otIdType, fixedOtId); - SetMonData(mon, MON_DATA_FATEFUL_ENCOUNTER, &isModernFatefulEncounter); + SetMonData(mon, MON_DATA_MODERN_FATEFUL_ENCOUNTER, &isModernFatefulEncounter); } // If FALSE, should load this game's Deoxys form. If TRUE, should load normal Deoxys form @@ -2763,14 +2763,14 @@ u16 GetUnionRoomTrainerClass(void) return gFacilityClassToTrainerClass[gUnionRoomFacilityClasses[arrId]]; } -void CreateModernFatefulEncounterEnemyMon(void) +void CreateEnemyEventMon(void) { s32 species = gSpecialVar_0x8004; s32 level = gSpecialVar_0x8005; s32 itemId = gSpecialVar_0x8006; ZeroEnemyPartyMons(); - CreateModernFatefulEncounterMon(&gEnemyParty[0], species, level, USE_RANDOM_IVS, FALSE, 0, OT_ID_PLAYER_ID, 0); + CreateEventMon(&gEnemyParty[0], species, level, USE_RANDOM_IVS, FALSE, 0, OT_ID_PLAYER_ID, 0); if (itemId) { u8 heldItem[2]; @@ -3957,7 +3957,7 @@ u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data) case MON_DATA_UNUSED_RIBBONS: retVal = substruct3->unusedRibbons; break; - case MON_DATA_FATEFUL_ENCOUNTER: + case MON_DATA_MODERN_FATEFUL_ENCOUNTER: retVal = substruct3->modernFatefulEncounter; break; case MON_DATA_SPECIES2: @@ -4341,7 +4341,7 @@ void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const void *dataArg) case MON_DATA_UNUSED_RIBBONS: SET8(substruct3->unusedRibbons); break; - case MON_DATA_FATEFUL_ENCOUNTER: + case MON_DATA_MODERN_FATEFUL_ENCOUNTER: SET8(substruct3->modernFatefulEncounter); break; case MON_DATA_IVS: diff --git a/src/scrcmd.c b/src/scrcmd.c index d055ff3a07ee..18a56631d3d5 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -2212,7 +2212,7 @@ bool8 ScrCmd_setmonmodernfatefulencounter(struct ScriptContext *ctx) bool8 isModernFatefulEncounter = TRUE; u16 partyIndex = VarGet(ScriptReadHalfword(ctx)); - SetMonData(&gPlayerParty[partyIndex], MON_DATA_FATEFUL_ENCOUNTER, &isModernFatefulEncounter); + SetMonData(&gPlayerParty[partyIndex], MON_DATA_MODERN_FATEFUL_ENCOUNTER, &isModernFatefulEncounter); return FALSE; } @@ -2220,7 +2220,7 @@ bool8 ScrCmd_checkmonmodernfatefulencounter(struct ScriptContext *ctx) { u16 partyIndex = VarGet(ScriptReadHalfword(ctx)); - gSpecialVar_Result = GetMonData(&gPlayerParty[partyIndex], MON_DATA_FATEFUL_ENCOUNTER, NULL); + gSpecialVar_Result = GetMonData(&gPlayerParty[partyIndex], MON_DATA_MODERN_FATEFUL_ENCOUNTER, NULL); return FALSE; } diff --git a/src/trade.c b/src/trade.c index 9e811888fd0a..04f9efce9f3a 100644 --- a/src/trade.c +++ b/src/trade.c @@ -1577,7 +1577,7 @@ static u8 CheckValidityOfTradeMons(u8 *aliveMons, u8 playerPartyCount, u8 player // Partner cant trade illegitimate Deoxys or Mew if (partnerSpecies == SPECIES_DEOXYS || partnerSpecies == SPECIES_MEW) { - if (!GetMonData(&gEnemyParty[partnerMonIdx], MON_DATA_FATEFUL_ENCOUNTER)) + if (!GetMonData(&gEnemyParty[partnerMonIdx], MON_DATA_MODERN_FATEFUL_ENCOUNTER)) return PARTNER_MON_INVALID; } @@ -2426,7 +2426,7 @@ static u32 CanTradeSelectedMon(struct Pokemon *playerParty, int partyCount, int if (species[monIdx] == SPECIES_DEOXYS || species[monIdx] == SPECIES_MEW) { - if (!GetMonData(&playerParty[monIdx], MON_DATA_FATEFUL_ENCOUNTER)) + if (!GetMonData(&playerParty[monIdx], MON_DATA_MODERN_FATEFUL_ENCOUNTER)) return CANT_TRADE_INVALID_MON; } From dbd02d3a56f83f2f85d3b8c0b0c5c97f6579bc39 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Wed, 15 Feb 2023 14:06:42 -0300 Subject: [PATCH 055/428] Clarified Champion Ribbon's description to avoid being interpreted as needing to beat the champion in both RSE and FRLG. --- include/pokemon.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/pokemon.h b/include/pokemon.h index 0375b20dc0ad..897f54762cca 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -152,7 +152,7 @@ struct PokemonSubstruct3 /* 0x08 */ u32 cuteRibbon:3; // Stores the highest contest rank achieved in the Cute category. /* 0x09 */ u32 smartRibbon:3; // Stores the highest contest rank achieved in the Smart category. /* 0x09 */ u32 toughRibbon:3; // Stores the highest contest rank achieved in the Tough category. - /* 0x09 */ u32 championRibbon:1; // Given when defeating the Champion in both RSE and FRLG. + /* 0x09 */ u32 championRibbon:1; // Given when defeating the Champion. Because both RSE and FRLG use it, later generations don't specify from which region it comes from. /* 0x0A */ u32 winningRibbon:1; // Given at the Battle Tower's Level 50 challenge by winning a set of seven battles that extends the current streak to 56 or more. /* 0x0A */ u32 victoryRibbon:1; // Given at the Battle Tower's Level 100 challenge by winning a set of seven battles that extends the current streak to 56 or more. /* 0x0A */ u32 artistRibbon:1; // Given at the Contest Hall by winning a Master Rank contest with at least 800 points, and agreeing to have the Pokémon's portrait placed in the museum after being offered. From d7f68a3893045acff68bf37a892af0e7225ab7b4 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Thu, 16 Feb 2023 15:57:15 +0100 Subject: [PATCH 056/428] IsAceMon - not isAceMon --- src/battle_ai_switch_items.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index f976b47e3e90..a8c09c40bce4 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -27,7 +27,7 @@ static bool32 AiExpectsToFaintPlayer(void); static bool32 AI_ShouldHeal(u32 healAmount); static bool32 AI_OpponentCanFaintAiWithMod(u32 healAmount); -static bool32 isAceMon(u32 battlerId, u32 monPartyId) +static bool32 IsAceMon(u32 battlerId, u32 monPartyId) { if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_ACE_POKEMON && !(gBattleStruct->forcedSwitch) @@ -118,7 +118,7 @@ static bool8 ShouldSwitchIfWonderGuard(void) continue; if (i == gBattlerPartyIndexes[gActiveBattler]) continue; - if (isAceMon(gActiveBattler, i)) + if (IsAceMon(gActiveBattler, i)) continue; for (opposingBattler = GetBattlerAtPosition(opposingPosition), j = 0; j < MAX_MON_MOVES; j++) @@ -210,7 +210,7 @@ static bool8 FindMonThatAbsorbsOpponentsMove(void) continue; if (i == *(gBattleStruct->monToSwitchIntoId + battlerIn2)) continue; - if (isAceMon(gActiveBattler, i)) + if (IsAceMon(gActiveBattler, i)) continue; @@ -290,7 +290,7 @@ static bool8 ShouldSwitchIfGameStatePrompt(void) for (i = firstId; i < lastId; i++) { - if (isAceMon(gActiveBattler, i)) + if (IsAceMon(gActiveBattler, i)) continue; //Look for mon in party that is able to be switched into and has ability that sets terrain @@ -582,7 +582,7 @@ static bool8 FindMonWithFlagsAndSuperEffective(u16 flags, u8 moduloPercent) continue; if (i == *(gBattleStruct->monToSwitchIntoId + battlerIn2)) continue; - if (isAceMon(gActiveBattler, i)) + if (IsAceMon(gActiveBattler, i)) continue; @@ -674,7 +674,7 @@ bool32 ShouldSwitch(void) continue; if (i == *(gBattleStruct->monToSwitchIntoId + battlerIn2)) continue; - if (isAceMon(gActiveBattler, i)) + if (IsAceMon(gActiveBattler, i)) { hasAceMon = TRUE; continue; @@ -771,7 +771,7 @@ void AI_TrySwitchOrUseItem(void) continue; if (monToSwitchId == *(gBattleStruct->monToSwitchIntoId + battlerIn2)) continue; - if (isAceMon(gActiveBattler, monToSwitchId)) + if (IsAceMon(gActiveBattler, monToSwitchId)) continue; break; @@ -974,7 +974,7 @@ u8 GetMostSuitableMonToSwitchInto(void) { invalidMons |= gBitTable[i]; } - else if (isAceMon(gActiveBattler, i))// Save Ace Pokemon for last. + else if (IsAceMon(gActiveBattler, i))// Save Ace Pokemon for last. { aceMonId = i; invalidMons |= gBitTable[i]; From 6cdca24c31c0a8f216c176b01b86aeeb5038b535 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Thu, 16 Feb 2023 21:58:00 +0100 Subject: [PATCH 057/428] use forced switch battler bit --- src/battle_ai_switch_items.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index a8c09c40bce4..b43927819060 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -30,7 +30,7 @@ static bool32 AI_OpponentCanFaintAiWithMod(u32 healAmount); static bool32 IsAceMon(u32 battlerId, u32 monPartyId) { if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_ACE_POKEMON - && !(gBattleStruct->forcedSwitch) + && !(gBattleStruct->forcedSwitch & gBitTable[battlerId]) && monPartyId == CalculateEnemyPartyCount()-1) return TRUE; return FALSE; From 6e134bb7dc0b5650946318a28cbe72a2e5743e24 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Fri, 17 Feb 2023 12:52:43 -0300 Subject: [PATCH 058/428] Removed pointless IsBattlerHpLow function --- src/battle_message.c | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/src/battle_message.c b/src/battle_message.c index 2b8005f64b14..9c8a1b702011 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -3899,14 +3899,6 @@ static u32 GetEnemyMonCount(bool32 onlyAlive) return count; } -static bool32 IsBattlerHpLow(u32 battler) -{ - if ((gBattleMons[battler].hp * 100) / gBattleMons[battler].maxHP < 25) - return TRUE; - else - return FALSE; -} - bool32 ShouldDoTrainerSlide(u32 battlerId, u32 trainerId, u32 which) { s32 i; @@ -3931,7 +3923,7 @@ bool32 ShouldDoTrainerSlide(u32 battlerId, u32 trainerId, u32 which) case TRAINER_SLIDE_LAST_LOW_HP: if (sTrainerSlides[i].msgLastLowHp != NULL && GetEnemyMonCount(TRUE) == 1 - && IsBattlerHpLow(battlerId) + && gBattleMons[battlerId].hp <= (gBattleMons[battlerId].maxHP / 4) && !gBattleStruct->trainerSlideLowHpMsgDone) { gBattleStruct->trainerSlideLowHpMsgDone = TRUE; From bc3805f9d32d532088214fe38492d8d92c6c6666 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Fri, 17 Feb 2023 13:27:39 -0500 Subject: [PATCH 059/428] Fix two binary palettes --- graphics/battle_anims/sprites/black_ball.bin | Bin 36 -> 0 bytes graphics/battle_anims/sprites/black_ball.pal | 19 ++++++++++++++++++ .../battle_anims/unused/line_sketch_2.pal | 19 ++++++++++++++++++ .../battle_anims/unused/line_sketch_2_pal.bin | Bin 32 -> 0 bytes src/graphics.c | 4 ++-- 5 files changed, 40 insertions(+), 2 deletions(-) delete mode 100644 graphics/battle_anims/sprites/black_ball.bin create mode 100644 graphics/battle_anims/sprites/black_ball.pal create mode 100644 graphics/battle_anims/unused/line_sketch_2.pal delete mode 100644 graphics/battle_anims/unused/line_sketch_2_pal.bin diff --git a/graphics/battle_anims/sprites/black_ball.bin b/graphics/battle_anims/sprites/black_ball.bin deleted file mode 100644 index 4a6592a8edc36cade78caec09192fd5174eb5e6c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36 pcmWeoU|>)%HWpwsa5iRUW;Zc5aByZ|V_;`s=5Tg4HU=^o7yw7&1D^l@ diff --git a/graphics/battle_anims/sprites/black_ball.pal b/graphics/battle_anims/sprites/black_ball.pal new file mode 100644 index 000000000000..57e320140e8b --- /dev/null +++ b/graphics/battle_anims/sprites/black_ball.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +156 205 98 +156 205 98 +156 205 98 +131 205 131 +156 205 0 +24 0 106 +156 8 98 +0 213 131 +24 197 0 +164 8 106 +156 8 98 +164 8 106 +156 205 131 +24 213 98 +156 8 106 +164 205 98 diff --git a/graphics/battle_anims/unused/line_sketch_2.pal b/graphics/battle_anims/unused/line_sketch_2.pal new file mode 100644 index 000000000000..17cce5c65e48 --- /dev/null +++ b/graphics/battle_anims/unused/line_sketch_2.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 255 +0 255 255 +148 255 255 +148 205 255 +148 156 255 +0 0 0 +0 0 0 +0 0 0 +255 0 8 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +255 255 255 diff --git a/graphics/battle_anims/unused/line_sketch_2_pal.bin b/graphics/battle_anims/unused/line_sketch_2_pal.bin deleted file mode 100644 index 15379a9ceae794c6755d5198ba223866efd6138a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32 kcmWeoU;u-f2lb!od5r3d>KM2g80A?G7_bX4{;y{M0C$E5-v9sr diff --git a/src/graphics.c b/src/graphics.c index f6b3ce0af2dc..40ed78ae6965 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -69,7 +69,7 @@ const u32 gBattleAnimSpriteGfx_BlackSmoke[] = INCBIN_U32("graphics/battle_anims/ const u32 gBattleAnimSpritePal_BlackSmoke[] = INCBIN_U32("graphics/battle_anims/sprites/black_smoke.gbapal.lz"); const u32 gBattleAnimSpriteGfx_BlackBall[] = INCBIN_U32("graphics/battle_anims/sprites/black_ball.4bpp.lz"); -const u32 gBattleAnimSpritePal_BlackBall[] = INCBIN_U32("graphics/battle_anims/sprites/black_ball.bin"); +const u32 gBattleAnimSpritePal_BlackBall[] = INCBIN_U32("graphics/battle_anims/sprites/black_ball.gbapal.lz"); const u32 gBattleAnimSpritePal_Glass[] = INCBIN_U32("graphics/battle_anims/sprites/glass.gbapal.lz"); const u32 gBattleAnimSpriteGfx_Glass[] = INCBIN_U32("graphics/battle_anims/sprites/glass.4bpp.lz"); @@ -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_pal.bin"); +const u16 gBattleAnimUnusedPal_LineSketch2[] = INCBIN_U16("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 4be4ec30815e21c342c7f769b94e10491f17cdf5 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Fri, 17 Feb 2023 16:43:22 -0300 Subject: [PATCH 060/428] metatitleBehavior -> metatileBehavior --- src/bike.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/bike.c b/src/bike.c index ae30ce288bba..ae9dfd3e9170 100644 --- a/src/bike.c +++ b/src/bike.c @@ -863,23 +863,23 @@ static u8 Bike_DPadToDirection(u16 heldKeys) static u8 GetBikeCollision(u8 direction) { - u8 metatitleBehavior; + u8 metatileBehavior; struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; s16 x = playerObjEvent->currentCoords.x; s16 y = playerObjEvent->currentCoords.y; MoveCoords(direction, &x, &y); - metatitleBehavior = MapGridGetMetatileBehaviorAt(x, y); - return GetBikeCollisionAt(playerObjEvent, x, y, direction, metatitleBehavior); + metatileBehavior = MapGridGetMetatileBehaviorAt(x, y); + return GetBikeCollisionAt(playerObjEvent, x, y, direction, metatileBehavior); } -static u8 GetBikeCollisionAt(struct ObjectEvent *objectEvent, s16 x, s16 y, u8 direction, u8 metatitleBehavior) +static u8 GetBikeCollisionAt(struct ObjectEvent *objectEvent, s16 x, s16 y, u8 direction, u8 metatileBehavior) { - u8 collision = CheckForObjectEventCollision(objectEvent, x, y, direction, metatitleBehavior); + u8 collision = CheckForObjectEventCollision(objectEvent, x, y, direction, metatileBehavior); if (collision > COLLISION_OBJECT_EVENT) return collision; - if (collision == COLLISION_NONE && IsRunningDisallowedByMetatile(metatitleBehavior)) + if (collision == COLLISION_NONE && IsRunningDisallowedByMetatile(metatileBehavior)) collision = COLLISION_IMPASSABLE; if (collision) From c82f35d6bf649bb7930835c5be48ad4268005152 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 19 Feb 2023 12:01:13 +0100 Subject: [PATCH 061/428] correct Cmd_pickup --- src/battle_script_commands.c | 87 +++++++++++------------------------- test/ability_guts.c | 20 +++++++++ 2 files changed, 45 insertions(+), 62 deletions(-) create mode 100644 test/ability_guts.c diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 8b8d4f1e9485..8e13ebf6db9a 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -14895,21 +14895,20 @@ static void Cmd_pickup(void) { CMD_ARGS(); - s32 i; - u16 species, heldItem; - u16 ability; + u32 i, j; + u16 species, heldItem, ability; u8 lvlDivBy10; - if (InBattlePike()) - { - - } - else if (InBattlePyramid()) + if (!InBattlePike()) // No items in Battle Pike. { + bool32 isInPyramid = InBattlePyramid_(); for (i = 0; i < PARTY_SIZE; i++) { species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); heldItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); + lvlDivBy10 = (GetMonData(&gPlayerParty[i], MON_DATA_LEVEL)-1) / 10; //Moving this here makes it easier to add in abilities like Honey Gather. + if (lvlDivBy10 > 9) + lvlDivBy10 = 9; ability = gSpeciesInfo[species].abilities[GetMonData(&gPlayerParty[i], MON_DATA_ABILITY_NUM)]; @@ -14919,63 +14918,27 @@ static void Cmd_pickup(void) && heldItem == ITEM_NONE && (Random() % 10) == 0) { - heldItem = GetBattlePyramidPickupItemId(); - SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &heldItem); - } - else if (ability == ABILITY_HONEY_GATHER - && species != 0 - && species != SPECIES_EGG - && heldItem == ITEM_NONE) - { - if ((lvlDivBy10 + 1 ) * 5 > Random() % 100) + if (isInPyramid) { - heldItem = ITEM_HONEY; + heldItem = GetBattlePyramidPickupItemId(); SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &heldItem); } - } - #if P_SHUCKLE_BERRY_JUICE == TRUE - else if (species == SPECIES_SHUCKLE - && heldItem == ITEM_ORAN_BERRY - && (Random() % 16) == 0) - { - heldItem = ITEM_BERRY_JUICE; - SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &heldItem); - } - #endif - } - } - else - { - for (i = 0; i < PARTY_SIZE; i++) - { - species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); - heldItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); - lvlDivBy10 = (GetMonData(&gPlayerParty[i], MON_DATA_LEVEL)-1) / 10; //Moving this here makes it easier to add in abilities like Honey Gather - if (lvlDivBy10 > 9) - lvlDivBy10 = 9; - - ability = gSpeciesInfo[species].abilities[GetMonData(&gPlayerParty[i], MON_DATA_ABILITY_NUM)]; - - if (ability == ABILITY_PICKUP - && species != SPECIES_NONE - && species != SPECIES_EGG - && heldItem == ITEM_NONE - && (Random() % 10) == 0) - { - s32 j; - s32 rand = Random() % 100; - - for (j = 0; j < (int)ARRAY_COUNT(sPickupProbabilities); j++) + else { - if (sPickupProbabilities[j] > rand) - { - SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &sPickupItems[lvlDivBy10 + j]); - break; - } - else if (rand == 99 || rand == 98) + u32 rand = Random() % 100; + + for (j = 0; j < ARRAY_COUNT(sPickupProbabilities); j++) { - SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &sRarePickupItems[lvlDivBy10 + (99 - rand)]); - break; + if (sPickupProbabilities[j] > rand) + { + SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &sPickupItems[lvlDivBy10 + j]); + break; + } + else if (rand == 99 || rand == 98) + { + SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &sRarePickupItems[lvlDivBy10 + (99 - rand)]); + break; + } } } } @@ -14990,7 +14953,7 @@ static void Cmd_pickup(void) SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &heldItem); } } - #if P_SHUCKLE_BERRY_JUICE == TRUE + #if P_SHUCKLE_BERRY_JUICE == TRUE else if (species == SPECIES_SHUCKLE && heldItem == ITEM_ORAN_BERRY && (Random() % 16) == 0) @@ -14998,7 +14961,7 @@ static void Cmd_pickup(void) heldItem = ITEM_BERRY_JUICE; SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &heldItem); } - #endif + #endif } } diff --git a/test/ability_guts.c b/test/ability_guts.c new file mode 100644 index 000000000000..259b863ec360 --- /dev/null +++ b/test/ability_guts.c @@ -0,0 +1,20 @@ +#include "global.h" +#include "test_battle.h" + +SINGLE_BATTLE_TEST("Blaze boosts Fire-type moves in a pinch", s16 damage) +{ + u16 hp; + PARAMETRIZE { hp = 99; } + PARAMETRIZE { hp = 33; } + GIVEN { + ASSUME(gBattleMoves[MOVE_EMBER].type == TYPE_FIRE); + PLAYER(SPECIES_CHARMANDER) { Ability(ABILITY_BLAZE); MaxHP(99); HP(hp); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_EMBER); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_GT(results[1].damage, results[0].damage); + } +} From dcb1117470bb809d1906f8b2b1f0f71da2cf6ff4 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 19 Feb 2023 12:01:47 +0100 Subject: [PATCH 062/428] a --- test/ability_guts.c | 20 -------------------- 1 file changed, 20 deletions(-) delete mode 100644 test/ability_guts.c diff --git a/test/ability_guts.c b/test/ability_guts.c deleted file mode 100644 index 259b863ec360..000000000000 --- a/test/ability_guts.c +++ /dev/null @@ -1,20 +0,0 @@ -#include "global.h" -#include "test_battle.h" - -SINGLE_BATTLE_TEST("Blaze boosts Fire-type moves in a pinch", s16 damage) -{ - u16 hp; - PARAMETRIZE { hp = 99; } - PARAMETRIZE { hp = 33; } - GIVEN { - ASSUME(gBattleMoves[MOVE_EMBER].type == TYPE_FIRE); - PLAYER(SPECIES_CHARMANDER) { Ability(ABILITY_BLAZE); MaxHP(99); HP(hp); } - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { MOVE(player, MOVE_EMBER); } - } SCENE { - HP_BAR(opponent, captureDamage: &results[i].damage); - } FINALLY { - EXPECT_GT(results[1].damage, results[0].damage); - } -} From 53180ebf8791277339b829fc11eb26bb611180ad Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 20 Feb 2023 12:25:43 +0100 Subject: [PATCH 063/428] Update Healing wish to gen5 / gen8 mechanics (#2708) * Updated Healing Wish and added config * Fixed Lunar Dance message Co-authored-by: AgustinGDLV Co-authored-by: AgustinGDLV <103095241+AgustinGDLV@users.noreply.github.com> Co-authored-by: Martin Griffin --- asm/macros/battle_script.inc | 5 ++ data/battle_scripts_1.s | 19 +++-- include/battle.h | 2 + include/battle_scripts.h | 2 + include/config/battle.h | 2 + include/constants/battle_script_commands.h | 1 + src/battle_script_commands.c | 27 ++++++++ test/move_effect_healing_wish.c | 80 ++++++++++++++++++++++ test/move_effect_recoil_if_miss.c | 2 +- 9 files changed, 133 insertions(+), 7 deletions(-) create mode 100644 test/move_effect_healing_wish.c diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index 4f11fc78b8ef..6c985e3cddea 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -1322,6 +1322,11 @@ .macro cancelmultiturnmoves battler:req various \battler, VARIOUS_CANCEL_MULTI_TURN_MOVES .endm + + @ Stores Healing Wish effect. + .macro storehealingwish battler:req + various \battler, VARIOUS_STORE_HEALING_WISH + .endm .macro setmagiccoattarget battler:req various \battler, VARIOUS_SET_MAGIC_COAT_TARGET diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index ae92aba7cf07..6fa0cd7ad709 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -2697,6 +2697,8 @@ BattleScript_EffectHealingWish: instanthpdrop BS_ATTACKER setatkhptozero tryfaintmon BS_ATTACKER + storehealingwish BS_ATTACKER +.if B_HEALING_WISH_SWITCH <= GEN_4 openpartyscreen BS_ATTACKER, BattleScript_EffectHealingWishEnd switchoutabilities BS_ATTACKER waitstate @@ -2711,11 +2713,19 @@ BattleScript_EffectHealingWish: printstring STRINGID_SWITCHINMON switchinanim BS_ATTACKER, TRUE waitstate + switchineffects BS_ATTACKER +.endif +BattleScript_EffectHealingWishEnd: + moveendall + end + +BattleScript_HealingWishActivates:: setbyte cMULTISTRING_CHOOSER, 0 - jumpifnotchosenmove MOVE_LUNAR_DANCE, BattleScript_EffectHealingWishNewMon + goto BattleScript_EffectHealingWishRestore +BattleScript_LunarDanceActivates:: setbyte cMULTISTRING_CHOOSER, 1 restorepp BS_ATTACKER -BattleScript_EffectHealingWishNewMon: +BattleScript_EffectHealingWishRestore: printfromtable gHealingWishStringIds waitmessage B_WAIT_TIME_LONG playanimation BS_ATTACKER, B_ANIM_WISH_HEAL @@ -2730,10 +2740,7 @@ BattleScript_EffectHealingWishNewMon: waitstate printstring STRINGID_HEALINGWISHHEALED waitmessage B_WAIT_TIME_LONG - switchineffects BS_ATTACKER -BattleScript_EffectHealingWishEnd: - moveendall - end + return BattleScript_EffectWorrySeed: attackcanceler diff --git a/include/battle.h b/include/battle.h index 8be922384f3a..2c16887bf66a 100644 --- a/include/battle.h +++ b/include/battle.h @@ -655,6 +655,8 @@ struct BattleStruct u16 overwrittenAbilities[MAX_BATTLERS_COUNT]; // abilities overwritten during battle (keep separate from battle history in case of switching) bool8 allowedToChangeFormInWeather[PARTY_SIZE][2]; // For each party member and side, used by Ice Face. u8 battleBondTransformed[NUM_BATTLE_SIDES]; // Bitfield for each party. + u8 storedHealingWish:4; // Each battler as a bit. + u8 storedLunarDance:4; // Each battler as a bit. }; #define F_DYNAMIC_TYPE_1 (1 << 6) diff --git a/include/battle_scripts.h b/include/battle_scripts.h index 18c1911e52e4..70d398e2a523 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -452,6 +452,8 @@ extern const u8 BattleScript_MimicryActivates_End3[]; extern const u8 BattleScript_IceFaceNullsDamage[]; extern const u8 BattleScript_BattlerFormChangeWithStringEnd3[]; extern const u8 BattleScript_DampPreventsAftermath[]; +extern const u8 BattleScript_HealingWishActivates[]; +extern const u8 BattleScript_LunarDanceActivates[]; // zmoves extern const u8 BattleScript_ZMoveActivateDamaging[]; diff --git a/include/config/battle.h b/include/config/battle.h index 6dea72b4061c..a8f4a3e8b4bd 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -95,6 +95,8 @@ #define B_BEAT_UP GEN_LATEST // In Gen5+, Beat Up uses a different formula to calculate its damage, and deals Dark-type damage. Prior to Gen 5, each hit also announces the party member's name. #define B_DARK_VOID_FAIL GEN_LATEST // In Gen7+, only Darkrai can use Dark Void. #define B_BURN_HIT_THAW GEN_LATEST // In Gen6+, damaging moves with a chance of burn will thaw the target, regardless if they're fire-type moves or not. +#define B_HEALING_WISH_SWITCH GEN_LATEST // In Gen5+, the mon receiving Healing Wish is sent out at the end of the turn. + // Additionally, in gen8+ the Healing Wish's effect will be stored until the user switches into a statused or hurt mon. // Ability settings #define B_EXPANDED_ABILITY_NAMES TRUE // If TRUE, ability names are increased from 12 characters to 16 characters. diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h index 68e927d75fcd..9f18455a841d 100644 --- a/include/constants/battle_script_commands.h +++ b/include/constants/battle_script_commands.h @@ -257,6 +257,7 @@ #define VARIOUS_ACTIVATE_TERRAIN_CHANGE_ABILITIES 165 #define VARIOUS_JUMP_IF_NO_VALID_TARGETS 166 #define VARIOUS_JUMP_IF_EMERGENCY_EXITED 167 +#define VARIOUS_STORE_HEALING_WISH 168 // Cmd_manipulatedamage #define DMG_CHANGE_SIGN 0 diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 8b8d4f1e9485..48d23cf765dd 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -6924,6 +6924,24 @@ static void Cmd_switchineffects(void) BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_SwitchInAbilityMsgRet; } + // Healing Wish activates before hazards. + // Starting from Gen8 - it heals only pokemon which can be healed. In gens 5,6,7 the effect activates anyways. + else if (((gBattleStruct->storedHealingWish & gBitTable[gActiveBattler]) || (gBattleStruct->storedLunarDance & gBitTable[gActiveBattler])) + && (gBattleMons[gActiveBattler].hp != gBattleMons[gActiveBattler].maxHP || gBattleMons[gActiveBattler].status1 != 0 || B_HEALING_WISH_SWITCH < GEN_8)) + { + if (gBattleStruct->storedHealingWish & gBitTable[gActiveBattler]) + { + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_HealingWishActivates; + gBattleStruct->storedHealingWish &= ~(gBitTable[gActiveBattler]); + } + else // Lunar Dance + { + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_LunarDanceActivates; + gBattleStruct->storedLunarDance &= ~(gBitTable[gActiveBattler]); + } + } else if (!(gSideStatuses[GetBattlerSide(gActiveBattler)] & SIDE_STATUS_SPIKES_DAMAGED) && (gSideStatuses[GetBattlerSide(gActiveBattler)] & SIDE_STATUS_SPIKES) && GetBattlerAbility(gActiveBattler) != ABILITY_MAGIC_GUARD @@ -11040,6 +11058,15 @@ static void Cmd_various(void) gBattlescriptCurrInstr = cmd->nextInstr; return; } + case VARIOUS_STORE_HEALING_WISH: + { + VARIOUS_ARGS(); + if (gCurrentMove == MOVE_LUNAR_DANCE) + gBattleStruct->storedLunarDance |= gBitTable[gActiveBattler]; + else + gBattleStruct->storedHealingWish |= gBitTable[gActiveBattler]; + break; + } } // End of switch (cmd->id) gBattlescriptCurrInstr = cmd->nextInstr; diff --git a/test/move_effect_healing_wish.c b/test/move_effect_healing_wish.c new file mode 100644 index 000000000000..98e8730b3441 --- /dev/null +++ b/test/move_effect_healing_wish.c @@ -0,0 +1,80 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_HEALING_WISH].effect == EFFECT_HEALING_WISH); + ASSUME(gBattleMoves[MOVE_LUNAR_DANCE].effect == EFFECT_HEALING_WISH); +} + +#define TEST_MAX_HP (100) + +SINGLE_BATTLE_TEST("Healing Wish causes the user to faint and fully heals the replacement") +{ + GIVEN { + ASSUME(B_HEALING_WISH_SWITCH >= GEN_5); + PLAYER(SPECIES_GARDEVOIR); + PLAYER(SPECIES_WYNAUT) { HP(1); MaxHP(TEST_MAX_HP); Status1(STATUS1_POISON); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_HEALING_WISH); SEND_OUT(player, 1); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_HEALING_WISH, player); + HP_BAR(player, hp: 0); + MESSAGE("Gardevoir fainted!"); + MESSAGE("The healing wish came true for Wynaut!"); + HP_BAR(player, hp: TEST_MAX_HP); + STATUS_ICON(player, none: TRUE); + MESSAGE("Wynaut regained health!"); + } +} + +DOUBLE_BATTLE_TEST("Lunar Dance causes the user to faint and fully heals the replacement in a double battle") +{ + GIVEN { + ASSUME(B_HEALING_WISH_SWITCH >= GEN_5); + PLAYER(SPECIES_GARDEVOIR) { Speed(300); } + PLAYER(SPECIES_WOBBUFFET) { Speed(50); } + PLAYER(SPECIES_WYNAUT) { HP(TEST_MAX_HP - 1); MaxHP(TEST_MAX_HP); Status1(STATUS1_BURN); Speed(50); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(50); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(50); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_LUNAR_DANCE); SEND_OUT(playerLeft, 2); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_LUNAR_DANCE, playerLeft); + HP_BAR(playerLeft, hp: 0); + MESSAGE("Gardevoir fainted!"); + MESSAGE("Wynaut became cloaked in mystical moonlight!"); + HP_BAR(playerLeft, hp: TEST_MAX_HP); + STATUS_ICON(playerLeft, none: TRUE); + MESSAGE("Wynaut regained health!"); + } +} + +SINGLE_BATTLE_TEST("Healing Wish effect activates only if the switched pokemon can be healed") +{ + GIVEN { + ASSUME(B_HEALING_WISH_SWITCH >= GEN_8); + PLAYER(SPECIES_GARDEVOIR) { Speed(300); } + PLAYER(SPECIES_NINJASK) { Speed(400); } + PLAYER(SPECIES_WYNAUT) { HP(TEST_MAX_HP / 2); MaxHP(TEST_MAX_HP); Status1(STATUS1_PARALYSIS); Speed(50); } + OPPONENT(SPECIES_WOBBUFFET) {Speed(50); } + } WHEN { + TURN { MOVE(player, MOVE_HEALING_WISH); SEND_OUT(player, 1); } + TURN { MOVE(player, MOVE_U_TURN); SEND_OUT(player, 2); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_HEALING_WISH, player); + HP_BAR(player, hp: 0); + MESSAGE("Gardevoir fainted!"); + NONE_OF { + MESSAGE("The healing wish came true for Wynaut!"); + MESSAGE("Wynaut regained health!"); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_U_TURN, player); + MESSAGE("Do it! Wynaut!"); + MESSAGE("The healing wish came true for Wynaut!"); + HP_BAR(player, hp: TEST_MAX_HP); + STATUS_ICON(player, none: TRUE); + MESSAGE("Wynaut regained health!"); + } +} diff --git a/test/move_effect_recoil_if_miss.c b/test/move_effect_recoil_if_miss.c index 5c1f1a61af39..8a80309d7491 100644 --- a/test/move_effect_recoil_if_miss.c +++ b/test/move_effect_recoil_if_miss.c @@ -42,8 +42,8 @@ SINGLE_BATTLE_TEST("Jump Kick has 50% recoil on protect") SINGLE_BATTLE_TEST("Jump Kick has no recoil if no target") { - KNOWN_FAILING; // #2596. GIVEN { + ASSUME(B_HEALING_WISH_SWITCH >= GEN_5); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WYNAUT); From 03915524c5912c1c1d4e68406dcac01252ab5291 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 20 Feb 2023 12:42:06 +0100 Subject: [PATCH 064/428] Fix switch-in abilities activating on empty field --- include/battle.h | 1 + include/battle_script_commands.h | 1 + src/battle_script_commands.c | 72 +++++++++++++++++++++++--------- src/battle_util.c | 17 +++++++- src/data/trainer_parties.h | 12 +++--- test/ability_intimidate.c | 50 ++++++++++++++++++++-- test/test_runner.c | 2 +- 7 files changed, 124 insertions(+), 31 deletions(-) diff --git a/include/battle.h b/include/battle.h index 8be922384f3a..46c934082323 100644 --- a/include/battle.h +++ b/include/battle.h @@ -644,6 +644,7 @@ struct BattleStruct struct StolenItem itemStolen[PARTY_SIZE]; // Player's team that had items stolen (two bytes per party member) u8 blunderPolicy:1; // should blunder policy activate u8 swapDamageCategory:1; // Photon Geyser, Shell Side Arm, Light That Burns the Sky + u8 switchInAbilityPostponed:4; // To not activate against an empty field, each bit for battler u8 ballSpriteIds[2]; // item gfx, window gfx u8 stickyWebUser; u8 appearedInBattle; // Bitfield to track which Pokemon appeared in battle. Used for Burmy's form change diff --git a/include/battle_script_commands.h b/include/battle_script_commands.h index 60fd9b156ba4..c3d6831e956d 100644 --- a/include/battle_script_commands.h +++ b/include/battle_script_commands.h @@ -44,6 +44,7 @@ u16 GetSecretPowerMoveEffect(void); void StealTargetItem(u8 battlerStealer, u8 battlerItem); u8 GetCatchingBattler(void); u32 GetHighestStatId(u32 battlerId); +bool32 DoSwitchInAbilitiesItems(u32 battlerId); extern void (* const gBattleScriptingCommandsTable[])(void); extern const u8 gBattlePalaceNatureToMoveGroupLikelihood[NUM_NATURES][4]; diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 8b8d4f1e9485..9555111b4d43 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -6900,6 +6900,35 @@ static void SetDmgHazardsBattlescript(u8 battlerId, u8 multistringId) gBattlescriptCurrInstr = BattleScript_DmgHazardsOnFaintedBattler; } +bool32 DoSwitchInAbilitiesItems(u32 battlerId) +{ + return (AbilityBattleEffects(ABILITYEFFECT_ON_SWITCHIN, battlerId, 0, 0, 0) + || (gBattleWeather & B_WEATHER_ANY && WEATHER_HAS_EFFECT && AbilityBattleEffects(ABILITYEFFECT_ON_WEATHER, battlerId, 0, 0, 0)) + || (gFieldStatuses & STATUS_FIELD_TERRAIN_ANY && AbilityBattleEffects(ABILITYEFFECT_ON_TERRAIN, battlerId, 0, 0, 0)) + || ItemBattleEffects(ITEMEFFECT_ON_SWITCH_IN, battlerId, FALSE) + || AbilityBattleEffects(ABILITYEFFECT_TRACE2, 0, 0, 0, 0)); +} + +bool32 ShouldPostponeSwitchInAbilities(u32 battlerId) +{ + bool32 aliveOpposing1 = IsBattlerAlive(BATTLE_OPPOSITE(battlerId)); + bool32 aliveOpposing2 = IsBattlerAlive(BATTLE_PARTNER(BATTLE_OPPOSITE(battlerId))); + // No pokemon on opposing side - postopone. + if (!aliveOpposing1 && !aliveOpposing2) + return TRUE; + + // Checks for double battle, so abilities like Intimidate wait until all battlers are switched-in before activating. + if (IsDoubleBattle()) + { + if (aliveOpposing1 && !aliveOpposing2 && !HasNoMonsToSwitch(BATTLE_OPPOSITE(battlerId), PARTY_SIZE, PARTY_SIZE)) + return TRUE; + if (!aliveOpposing1 && aliveOpposing2 && !HasNoMonsToSwitch(BATTLE_PARTNER(BATTLE_OPPOSITE(battlerId)), PARTY_SIZE, PARTY_SIZE)) + return TRUE; + } + + return FALSE; +} + static void Cmd_switchineffects(void) { CMD_ARGS(u8 battler); @@ -7016,12 +7045,17 @@ static void Cmd_switchineffects(void) gDisableStructs[gActiveBattler].truantSwitchInHack = 0; - if (AbilityBattleEffects(ABILITYEFFECT_ON_SWITCHIN, gActiveBattler, 0, 0, 0) - || (gBattleWeather & B_WEATHER_ANY && WEATHER_HAS_EFFECT && AbilityBattleEffects(ABILITYEFFECT_ON_WEATHER, gActiveBattler, 0, 0, 0)) - || (gFieldStatuses & STATUS_FIELD_TERRAIN_ANY && AbilityBattleEffects(ABILITYEFFECT_ON_TERRAIN, gActiveBattler, 0, 0, 0)) - || ItemBattleEffects(ITEMEFFECT_ON_SWITCH_IN, gActiveBattler, FALSE) - || AbilityBattleEffects(ABILITYEFFECT_TRACE2, 0, 0, 0, 0)) - return; + // Don't activate switch-in abilities if the opposing field is empty. + // This could happen when a mon uses explosion and causes everyone to faint. + if (ShouldPostponeSwitchInAbilities(gActiveBattler) || gBattleStruct->switchInAbilityPostponed) + { + gBattleStruct->switchInAbilityPostponed |= gBitTable[gActiveBattler]; + } + else + { + if (DoSwitchInAbilitiesItems(gActiveBattler)) + return; + } gSideStatuses[GetBattlerSide(gActiveBattler)] &= ~(SIDE_STATUS_SPIKES_DAMAGED | SIDE_STATUS_TOXIC_SPIKES_DAMAGED | SIDE_STATUS_STEALTH_ROCK_DAMAGED | SIDE_STATUS_STICKY_WEB_DAMAGED); @@ -11016,21 +11050,21 @@ static void Cmd_various(void) return; } case VARIOUS_JUMP_IF_NO_VALID_TARGETS: - { - VARIOUS_ARGS(const u8 *jumpInstr); - u32 count = 0; + { + VARIOUS_ARGS(const u8 *jumpInstr); + u32 count = 0; - for (i = 0; i < gBattlersCount; i++) - { - if (GetBattlerSide(i) != GetBattlerSide(gBattlerAttacker) && IsBattlerAlive(i)) - count++; - } - if (count == 0) - gBattlescriptCurrInstr = cmd->jumpInstr; - else - gBattlescriptCurrInstr = cmd->nextInstr; - return; + for (i = 0; i < gBattlersCount; i++) + { + if (GetBattlerSide(i) != GetBattlerSide(gBattlerAttacker) && IsBattlerAlive(i)) + count++; } + if (count == 0) + gBattlescriptCurrInstr = cmd->jumpInstr; + else + gBattlescriptCurrInstr = cmd->nextInstr; + return; + } case VARIOUS_JUMP_IF_EMERGENCY_EXITED: { VARIOUS_ARGS(const u8 *jumpInstr); diff --git a/src/battle_util.c b/src/battle_util.c index 25ba83093c48..1855754110c6 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -3301,7 +3301,7 @@ bool8 HandleWishPerishSongOnTurnEnd(void) return FALSE; } -#define FAINTED_ACTIONS_MAX_CASE 7 +#define FAINTED_ACTIONS_MAX_CASE 8 bool8 HandleFaintedMonActions(void) { @@ -3386,7 +3386,19 @@ bool8 HandleFaintedMonActions(void) else gBattleStruct->faintedActionsState = 4; break; - case 6: + case 6: // All battlers switch-in abilities happen here to prevent them happening against an empty field. + for (i = 0; i < gBattlersCount; i++) + { + if (gBattleStruct->switchInAbilityPostponed & gBitTable[i]) + { + if (DoSwitchInAbilitiesItems(i)) + return TRUE; + gBattleStruct->switchInAbilityPostponed &= ~(gBitTable[i]); + } + } + gBattleStruct->faintedActionsState++; + break; + case 7: if (ItemBattleEffects(ITEMEFFECT_NORMAL, 0, TRUE)) return TRUE; gBattleStruct->faintedActionsState++; @@ -4749,6 +4761,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move case ABILITY_INTIMIDATE: if (!gSpecialStatuses[battler].switchInAbilityDone) { + gBattlerAttacker = battler; gSpecialStatuses[battler].switchInAbilityDone = TRUE; SET_STATCHANGER(STAT_ATK, 1, TRUE); BattleScriptPushCursorAndCallback(BattleScript_IntimidateActivates); diff --git a/src/data/trainer_parties.h b/src/data/trainer_parties.h index 1759120b7f3c..de2d1e89775f 100644 --- a/src/data/trainer_parties.h +++ b/src/data/trainer_parties.h @@ -400,17 +400,17 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Rose1[] = { { .iv = 0, .lvl = 14, - .species = SPECIES_ROSELIA, + .species = SPECIES_PORYGON, }, { .iv = 0, .lvl = 14, - .species = SPECIES_SHROOMISH, + .species = SPECIES_PORYGON, }, { .iv = 0, .lvl = 14, - .species = SPECIES_ROSELIA, + .species = SPECIES_PORYGON, } }; @@ -9631,17 +9631,17 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Deandre[] = { { .iv = 0, .lvl = 14, - .species = SPECIES_ZIGZAGOON, + .species = SPECIES_PORYGON, }, { .iv = 0, .lvl = 14, - .species = SPECIES_ARON, + .species = SPECIES_PORYGON, }, { .iv = 0, .lvl = 14, - .species = SPECIES_ELECTRIKE, + .species = SPECIES_PORYGON, } }; diff --git a/test/ability_intimidate.c b/test/ability_intimidate.c index 450ca640294c..a0f48776cad6 100644 --- a/test/ability_intimidate.c +++ b/test/ability_intimidate.c @@ -30,13 +30,12 @@ SINGLE_BATTLE_TEST("Intimidate (opponent) lowers player's attack after switch ou SINGLE_BATTLE_TEST("Intimidate (opponent) lowers player's attack after KO", s16 damage) { u32 ability; - KNOWN_FAILING; PARAMETRIZE { ability = ABILITY_INTIMIDATE; } PARAMETRIZE { ability = ABILITY_RECKLESS; } GIVEN { - PLAYER(SPECIES_WOBBUFFET) { Speed(2); }; + PLAYER(SPECIES_WOBBUFFET) { Speed(2); Attack(120) ; }; OPPONENT(SPECIES_WOBBUFFET) { HP(1); Speed(1); }; - OPPONENT(SPECIES_STARAPTOR) { Ability(ABILITY_INTIMIDATE); Speed(1); }; + OPPONENT(SPECIES_STARAPTOR) { Ability(ability); Speed(1); }; } WHEN { TURN { MOVE(player, MOVE_TACKLE); SEND_OUT(opponent, 1); } TURN { MOVE(player, MOVE_TACKLE); } @@ -48,3 +47,48 @@ SINGLE_BATTLE_TEST("Intimidate (opponent) lowers player's attack after KO", s16 EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage); } } + +DOUBLE_BATTLE_TEST("Intimidate doesn't activate on an empty field in a double battle") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_EXPLOSION].effect == EFFECT_EXPLOSION); + PLAYER(SPECIES_WOBBUFFET) { }; + PLAYER(SPECIES_WOBBUFFET) { HP(1); }; + PLAYER(SPECIES_STARAVIA) { Ability(ABILITY_INTIMIDATE); }; + PLAYER(SPECIES_ABRA); + OPPONENT(SPECIES_WOBBUFFET) { HP(1); }; + OPPONENT(SPECIES_WOBBUFFET) { HP(1); }; + OPPONENT(SPECIES_STARAPTOR) { Ability(ABILITY_INTIMIDATE); }; + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(playerLeft, MOVE_EXPLOSION); SEND_OUT(playerLeft, 2); SEND_OUT(opponentLeft, 2); SEND_OUT(playerRight, 3); SEND_OUT(opponentRight, 3); } + TURN { MOVE(playerLeft, MOVE_CELEBRATE);} + } SCENE { + HP_BAR(playerLeft, hp: 0); + ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, playerLeft); + // Leaving these messages as they're not that important to the test, to not exceed MAX_QUEUED_EVENTS. + /* + MESSAGE("Foe Wobbuffet fainted!"); + MESSAGE("Wobbuffet fainted!"); + MESSAGE("Foe Wobbuffet fainted!"); + MESSAGE("Wobbuffet fainted!"); + */ + + MESSAGE("Go! Staravia!"); + MESSAGE("2 sent out Staraptor!"); + MESSAGE("Go! Abra!"); + MESSAGE("2 sent out Wynaut!"); + + ABILITY_POPUP(playerLeft, ABILITY_INTIMIDATE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); + MESSAGE("Staravia's Intimidate cuts Foe Staraptor's ATTACK!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); + MESSAGE("Staravia's Intimidate cuts Foe Wynaut's ATTACK!"); + + ABILITY_POPUP(opponentLeft, ABILITY_INTIMIDATE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); + MESSAGE("Foe Staraptor's Intimidate cuts Staravia's ATTACK!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); + MESSAGE("Foe Staraptor's Intimidate cuts Abra's ATTACK!"); + } +} diff --git a/test/test_runner.c b/test/test_runner.c index 3cb1f7c21379..c4befb35f201 100644 --- a/test/test_runner.c +++ b/test/test_runner.c @@ -7,7 +7,7 @@ #include "test.h" #include "test_runner.h" -#define TIMEOUT_SECONDS 30 +#define TIMEOUT_SECONDS 49 void CB2_TestRunner(void); From a8c0e1ebeb13de3bb037942d21b8a8c151b90d6c Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 20 Feb 2023 13:15:08 +0100 Subject: [PATCH 065/428] fix intimidate --- src/data/trainer_parties.h | 12 ++++++------ test/ability_download.c | 29 +++++++++++++++++++++++++++++ test/ability_intimidate.c | 11 ++++++++++- 3 files changed, 45 insertions(+), 7 deletions(-) create mode 100644 test/ability_download.c diff --git a/src/data/trainer_parties.h b/src/data/trainer_parties.h index de2d1e89775f..1759120b7f3c 100644 --- a/src/data/trainer_parties.h +++ b/src/data/trainer_parties.h @@ -400,17 +400,17 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Rose1[] = { { .iv = 0, .lvl = 14, - .species = SPECIES_PORYGON, + .species = SPECIES_ROSELIA, }, { .iv = 0, .lvl = 14, - .species = SPECIES_PORYGON, + .species = SPECIES_SHROOMISH, }, { .iv = 0, .lvl = 14, - .species = SPECIES_PORYGON, + .species = SPECIES_ROSELIA, } }; @@ -9631,17 +9631,17 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Deandre[] = { { .iv = 0, .lvl = 14, - .species = SPECIES_PORYGON, + .species = SPECIES_ZIGZAGOON, }, { .iv = 0, .lvl = 14, - .species = SPECIES_PORYGON, + .species = SPECIES_ARON, }, { .iv = 0, .lvl = 14, - .species = SPECIES_PORYGON, + .species = SPECIES_ELECTRIKE, } }; diff --git a/test/ability_download.c b/test/ability_download.c new file mode 100644 index 000000000000..8380487cee8f --- /dev/null +++ b/test/ability_download.c @@ -0,0 +1,29 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_TACKLE].split == SPLIT_PHYSICAL); +} + +SINGLE_BATTLE_TEST("Download raises Attack if enemy has greater Atk than Sp.Atk", s16 damage) +{ + u32 ability; + PARAMETRIZE { ability = ABILITY_TRACE; } + PARAMETRIZE { ability = ABILITY_DOWNLOAD; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_PORYGON) { Ability(ability); }; + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE); } + } SCENE { + if (ability == ABILITY_DOWNLOAD) + { + ABILITY_POPUP(opponent, ABILITY_DOWNLOAD); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + } + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage); + } +} diff --git a/test/ability_intimidate.c b/test/ability_intimidate.c index a0f48776cad6..29acfe6f93eb 100644 --- a/test/ability_intimidate.c +++ b/test/ability_intimidate.c @@ -20,7 +20,11 @@ SINGLE_BATTLE_TEST("Intimidate (opponent) lowers player's attack after switch ou TURN { MOVE(player, MOVE_TACKLE); } } SCENE { if (ability == ABILITY_INTIMIDATE) + { ABILITY_POPUP(opponent, ABILITY_INTIMIDATE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Foe Staraptor's Intimidate cuts Wobbuffet's ATTACK!"); + } HP_BAR(opponent, captureDamage: &results[i].damage); } FINALLY { EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage); @@ -33,15 +37,20 @@ SINGLE_BATTLE_TEST("Intimidate (opponent) lowers player's attack after KO", s16 PARAMETRIZE { ability = ABILITY_INTIMIDATE; } PARAMETRIZE { ability = ABILITY_RECKLESS; } GIVEN { - PLAYER(SPECIES_WOBBUFFET) { Speed(2); Attack(120) ; }; + PLAYER(SPECIES_WOBBUFFET) { Speed(2); }; OPPONENT(SPECIES_WOBBUFFET) { HP(1); Speed(1); }; OPPONENT(SPECIES_STARAPTOR) { Ability(ability); Speed(1); }; } WHEN { TURN { MOVE(player, MOVE_TACKLE); SEND_OUT(opponent, 1); } TURN { MOVE(player, MOVE_TACKLE); } } SCENE { + HP_BAR(opponent); if (ability == ABILITY_INTIMIDATE) + { ABILITY_POPUP(opponent, ABILITY_INTIMIDATE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Foe Staraptor's Intimidate cuts Wobbuffet's ATTACK!"); + } HP_BAR(opponent, captureDamage: &results[i].damage); } FINALLY { EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage); From a6f6c205c9fce128b76bcd56c03317c490ee8456 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 20 Feb 2023 15:41:22 +0100 Subject: [PATCH 066/428] add tests for download --- test/ability_download.c | 72 +++++++++++++++++++++++++++++++++++++-- test/ability_intimidate.c | 8 +---- 2 files changed, 70 insertions(+), 10 deletions(-) diff --git a/test/ability_download.c b/test/ability_download.c index 8380487cee8f..77d090a3068c 100644 --- a/test/ability_download.c +++ b/test/ability_download.c @@ -4,16 +4,17 @@ ASSUMPTIONS { ASSUME(gBattleMoves[MOVE_TACKLE].split == SPLIT_PHYSICAL); + ASSUME(gBattleMoves[MOVE_TRI_ATTACK].split == SPLIT_PHYSICAL); } -SINGLE_BATTLE_TEST("Download raises Attack if enemy has greater Atk than Sp.Atk", s16 damage) +SINGLE_BATTLE_TEST("Download raises Attack if player has lower Def than Sp.Def", s16 damage) { u32 ability; PARAMETRIZE { ability = ABILITY_TRACE; } PARAMETRIZE { ability = ABILITY_DOWNLOAD; } GIVEN { - PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_PORYGON) { Ability(ability); }; + PLAYER(SPECIES_WOBBUFFET) {Defense(100); SpDefense(200); }; + OPPONENT(SPECIES_PORYGON) { Ability(ability); Attack(100); }; } WHEN { TURN { MOVE(opponent, MOVE_TACKLE); } } SCENE { @@ -21,9 +22,74 @@ SINGLE_BATTLE_TEST("Download raises Attack if enemy has greater Atk than Sp.Atk" { ABILITY_POPUP(opponent, ABILITY_DOWNLOAD); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Porygon's Download raised its attack!"); + } + HP_BAR(player, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage); + } +} + +SINGLE_BATTLE_TEST("Download raises Sp.Attack if enemy has lower Sp.Def than Def", s16 damage) +{ + u32 ability; + PARAMETRIZE { ability = ABILITY_TRACE; } + PARAMETRIZE { ability = ABILITY_DOWNLOAD; } + GIVEN { + PLAYER(SPECIES_PORYGON) { Ability(ability); SpAttack(100); }; + OPPONENT(SPECIES_WOBBUFFET) {Defense(200); SpDefense(100); }; + } WHEN { + TURN { MOVE(player, MOVE_TRI_ATTACK); } + } SCENE { + if (ability == ABILITY_DOWNLOAD) + { + ABILITY_POPUP(player, ABILITY_DOWNLOAD); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Porygon's Download raised its sp. attack!"); } HP_BAR(opponent, captureDamage: &results[i].damage); } FINALLY { EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage); } } + +SINGLE_BATTLE_TEST("Download doesn't activate if target hasn't been sent out yet", s16 damagePhysical, s16 damageSpecial) +{ + u32 ability; + PARAMETRIZE { ability = ABILITY_TRACE; } + PARAMETRIZE { ability = ABILITY_DOWNLOAD; } + GIVEN { + ASSUME(gBattleMoves[MOVE_EXPLOSION].effect == EFFECT_EXPLOSION); + PLAYER(SPECIES_WOBBUFFET) { Speed(100); }; + PLAYER(SPECIES_PORYGON) { Ability(ability); Defense(400); SpDefense(300); Speed(300); Attack(100); }; + OPPONENT(SPECIES_WOBBUFFET) { HP(1); Speed(100); }; + OPPONENT(SPECIES_PORYGON2) { Ability(ability); Defense(100); SpDefense(200); Speed(200); }; + } WHEN { + TURN { MOVE(player, MOVE_EXPLOSION); SEND_OUT(player, 1); SEND_OUT(opponent, 1); } + TURN { MOVE(player, MOVE_TACKLE); MOVE(opponent, MOVE_TRI_ATTACK);} + } SCENE { + HP_BAR(player, hp: 0); + ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, player); + // Everyone faints. + + MESSAGE("Go! Porygon!"); + MESSAGE("2 sent out Porygon2!"); + + if (ability == ABILITY_DOWNLOAD) + { + ABILITY_POPUP(player, ABILITY_DOWNLOAD); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Porygon's Download raised its attack!"); + ABILITY_POPUP(opponent, ABILITY_DOWNLOAD); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Porygon2's Download raised its sp. attack!"); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + HP_BAR(opponent, captureDamage: &results[i].damagePhysical); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TRI_ATTACK, opponent); + HP_BAR(player, captureDamage: &results[i].damageSpecial); + } FINALLY { + EXPECT_MUL_EQ(results[0].damagePhysical, Q_4_12(1.5), results[1].damagePhysical); + EXPECT_MUL_EQ(results[0].damageSpecial, Q_4_12(1.5), results[1].damageSpecial); + } +} diff --git a/test/ability_intimidate.c b/test/ability_intimidate.c index 29acfe6f93eb..f978b80ab0aa 100644 --- a/test/ability_intimidate.c +++ b/test/ability_intimidate.c @@ -75,13 +75,7 @@ DOUBLE_BATTLE_TEST("Intimidate doesn't activate on an empty field in a double ba } SCENE { HP_BAR(playerLeft, hp: 0); ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, playerLeft); - // Leaving these messages as they're not that important to the test, to not exceed MAX_QUEUED_EVENTS. - /* - MESSAGE("Foe Wobbuffet fainted!"); - MESSAGE("Wobbuffet fainted!"); - MESSAGE("Foe Wobbuffet fainted!"); - MESSAGE("Wobbuffet fainted!"); - */ + // Everyone faints. MESSAGE("Go! Staravia!"); MESSAGE("2 sent out Staraptor!"); From 7d23d5433b68e104621073021afae493f632511f Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 20 Feb 2023 16:38:37 +0100 Subject: [PATCH 067/428] try fix tests failing --- test/test_runner.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_runner.c b/test/test_runner.c index c4befb35f201..f64dffacb23b 100644 --- a/test/test_runner.c +++ b/test/test_runner.c @@ -7,7 +7,7 @@ #include "test.h" #include "test_runner.h" -#define TIMEOUT_SECONDS 49 +#define TIMEOUT_SECONDS 55 void CB2_TestRunner(void); From 8f74a6777afc43eb0093b326ae6c69b4ca6ac38d Mon Sep 17 00:00:00 2001 From: Zunawe Date: Mon, 20 Feb 2023 18:17:30 -0800 Subject: [PATCH 068/428] Fix spelling mistake for item flag --- data/maps/PetalburgWoods/map.json | 2 +- include/constants/flags.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/data/maps/PetalburgWoods/map.json b/data/maps/PetalburgWoods/map.json index 4179d819579f..2979e7e46908 100644 --- a/data/maps/PetalburgWoods/map.json +++ b/data/maps/PetalburgWoods/map.json @@ -168,7 +168,7 @@ "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", "script": "PetalburgWoods_EventScript_ItemParalyzeHeal", - "flag": "FLAG_ITEM_PETALBURD_WOODS_PARALYZE_HEAL" + "flag": "FLAG_ITEM_PETALBURG_WOODS_PARALYZE_HEAL" }, { "graphics_id": "OBJ_EVENT_GFX_GIRL_2", diff --git a/include/constants/flags.h b/include/constants/flags.h index 4e108e1fe98b..f39a7219c0f6 100644 --- a/include/constants/flags.h +++ b/include/constants/flags.h @@ -1162,7 +1162,7 @@ #define FLAG_ITEM_ROUTE_103_GUARD_SPEC 0x45A #define FLAG_ITEM_ROUTE_104_X_ACCURACY 0x45B #define FLAG_ITEM_MAUVILLE_CITY_X_SPEED 0x45C -#define FLAG_ITEM_PETALBURD_WOODS_PARALYZE_HEAL 0x45D +#define FLAG_ITEM_PETALBURG_WOODS_PARALYZE_HEAL 0x45D #define FLAG_ITEM_ROUTE_115_GREAT_BALL 0x45E #define FLAG_ITEM_SAFARI_ZONE_NORTH_CALCIUM 0x45F #define FLAG_ITEM_MT_PYRE_3F_SUPER_REPEL 0x460 From 3a91a5c930d8c06de95882b5ca0ce90d017cbbc9 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Fri, 17 Feb 2023 12:53:24 -0300 Subject: [PATCH 069/428] =?UTF-8?q?Added=20new=20trainer=20slide-in=20msg?= =?UTF-8?q?=20conditions=20Now=20they=20can=20say=20something:=20-When=20t?= =?UTF-8?q?heir=20last=20Pok=C3=A9mon's=20HP=20is=20between=2025%=20and=20?= =?UTF-8?q?50%.=20-When=20a=20critical=20hit=20is=20dealt=20to=20their=20f?= =?UTF-8?q?irst=20Pok=C3=A9mon=20for=20the=20first=20time.=20-When=20a=20s?= =?UTF-8?q?uper=20effective=20hit=20is=20dealt=20to=20their=20first=20Pok?= =?UTF-8?q?=C3=A9mon=20for=20the=20first=20time.=20-When=20a=20STAB=20move?= =?UTF-8?q?=20is=20used=20against=20(but=20doesn't=20faint)=20the=20oppone?= =?UTF-8?q?nt's=20Pok=C3=A9mon.=20-When=20the=20Player's=20Pok=C3=A9mon's?= =?UTF-8?q?=20move=20doesn't=20affect=20the=20opponent's=20Pok=C3=A9mon.?= =?UTF-8?q?=20-When=20they're=20about=20to=20trigger=20a=20Mega=20Evolutio?= =?UTF-8?q?n.=20-When=20they're=20about=20to=20trigger=20a=20Z-Move.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Misc. changes: -Split GetEnemyMonCount for readability's sake. -Optimized the size allocated to trainerSlideLowHpMsgDone. --- asm/macros/battle_script.inc | 8 + data/battle_scripts_1.s | 8 + include/battle.h | 9 +- include/battle_message.h | 7 + include/constants/battle_script_commands.h | 338 +++++++++++---------- src/battle_main.c | 10 + src/battle_message.c | 109 ++++++- src/battle_script_commands.c | 35 +++ src/battle_util.c | 10 + 9 files changed, 356 insertions(+), 178 deletions(-) diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index 4f11fc78b8ef..e24e20e6e95c 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -2049,6 +2049,14 @@ .4byte \jumpInstr .endm + .macro trytrainerslidezmovemsg battler:req + various \battler, VARIOUS_TRY_TRAINER_SLIDE_MSG_Z_MOVE + .endm + + .macro trytrainerslidemegaevolutionmsg battler:req + various \battler, VARIOUS_TRY_TRAINER_SLIDE_MSG_MEGA_EVOLUTION + .endm + @ helpful macros .macro setstatchanger stat:req, stages:req, down:req setbyte sSTATCHANGER, \stat | \stages << 3 | \down << 7 diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index ae92aba7cf07..c6c9626384eb 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -7763,6 +7763,8 @@ BattleScript_FocusPunchSetUp:: end2 BattleScript_MegaEvolution:: + printstring STRINGID_EMPTYSTRING3 + trytrainerslidemegaevolutionmsg BS_ATTACKER printstring STRINGID_MEGAEVOREACTING waitmessage B_WAIT_TIME_LONG setbyte gIsCriticalHit, 0 @@ -7777,6 +7779,8 @@ BattleScript_MegaEvolution:: end2 BattleScript_WishMegaEvolution:: + printstring STRINGID_EMPTYSTRING3 + trytrainerslidemegaevolutionmsg BS_ATTACKER printstring STRINGID_FERVENTWISHREACHED waitmessage B_WAIT_TIME_LONG setbyte gIsCriticalHit, 0 @@ -9989,6 +9993,8 @@ BattleScript_JabocaRowapBerryActivate_Dmg: @ z moves / effects BattleScript_ZMoveActivateDamaging:: + printstring STRINGID_EMPTYSTRING3 + trytrainerslidezmovemsg BS_ATTACKER printstring STRINGID_ZPOWERSURROUNDS playanimation BS_ATTACKER, B_ANIM_ZMOVE_ACTIVATE, NULL printstring STRINGID_ZMOVEUNLEASHED @@ -9996,6 +10002,8 @@ BattleScript_ZMoveActivateDamaging:: return BattleScript_ZMoveActivateStatus:: + printstring STRINGID_EMPTYSTRING3 + trytrainerslidezmovemsg BS_ATTACKER savetarget printstring STRINGID_ZPOWERSURROUNDS playanimation BS_ATTACKER, B_ANIM_ZMOVE_ACTIVATE, NULL diff --git a/include/battle.h b/include/battle.h index 8be922384f3a..f4b10c813c9c 100644 --- a/include/battle.h +++ b/include/battle.h @@ -620,7 +620,7 @@ struct BattleStruct struct MegaEvolutionData mega; struct ZMoveData zmove; const u8 *trainerSlideMsg; - bool8 trainerSlideLowHpMsgDone; + bool8 trainerSlideLowHpMsgDone:1; u8 introState; u8 ateBerry[2]; // array id determined by side, each party pokemon as bit u8 stolenStats[NUM_BATTLE_STATS]; // hp byte is used for which stats to raise, other inform about by how many stages @@ -655,6 +655,13 @@ struct BattleStruct u16 overwrittenAbilities[MAX_BATTLERS_COUNT]; // abilities overwritten during battle (keep separate from battle history in case of switching) bool8 allowedToChangeFormInWeather[PARTY_SIZE][2]; // For each party member and side, used by Ice Face. u8 battleBondTransformed[NUM_BATTLE_SIDES]; // Bitfield for each party. + bool8 trainerSlideHalfHpMsgDone:1; + u8 trainerSlideFirstCriticalHitMsgState:2; + u8 trainerSlideFirstSuperEffectiveHitMsgState:2; + u8 trainerSlideFirstSTABMoveMsgState:2; + u8 trainerSlidePlayerMonUnaffectedMsgState:2; + bool8 trainerSlideMegaEvolutionMsgDone:1; + bool8 trainerSlideZMoveMsgDone:1; }; #define F_DYNAMIC_TYPE_1 (1 << 6) diff --git a/include/battle_message.h b/include/battle_message.h index 9f6905abd358..57c6c21c24e4 100644 --- a/include/battle_message.h +++ b/include/battle_message.h @@ -229,6 +229,13 @@ enum TRAINER_SLIDE_LAST_SWITCHIN, TRAINER_SLIDE_LAST_LOW_HP, TRAINER_SLIDE_FIRST_DOWN, + TRAINER_SLIDE_LAST_HALF_HP, + TRAINER_SLIDE_FIRST_CRITICAL_HIT, + TRAINER_SLIDE_FIRST_SUPER_EFFECTIVE_HIT, + TRAINER_SLIDE_FIRST_STAB_MOVE, + TRAINER_SLIDE_PLAYER_MON_UNAFFECTED, + TRAINER_SLIDE_MEGA_EVOLUTION, + TRAINER_SLIDE_Z_MOVE, }; void BufferStringBattle(u16 stringID); diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h index 68e927d75fcd..f55628315cde 100644 --- a/include/constants/battle_script_commands.h +++ b/include/constants/battle_script_commands.h @@ -89,174 +89,176 @@ #define CMP_NO_COMMON_BITS 5 // Cmd_various -#define VARIOUS_CANCEL_MULTI_TURN_MOVES 0 -#define VARIOUS_SET_MAGIC_COAT_TARGET 1 -#define VARIOUS_IS_RUNNING_IMPOSSIBLE 2 -#define VARIOUS_GET_MOVE_TARGET 3 -#define VARIOUS_GET_BATTLER_FAINTED 4 -#define VARIOUS_RESET_SWITCH_IN_ABILITY_BITS 5 -#define VARIOUS_UPDATE_CHOICE_MOVE_ON_LVL_UP 6 -#define VARIOUS_RESET_PLAYER_FAINTED 7 -#define VARIOUS_PALACE_FLAVOR_TEXT 8 -#define VARIOUS_ARENA_JUDGMENT_WINDOW 9 -#define VARIOUS_ARENA_OPPONENT_MON_LOST 10 -#define VARIOUS_ARENA_PLAYER_MON_LOST 11 -#define VARIOUS_ARENA_BOTH_MONS_LOST 12 -#define VARIOUS_EMIT_YESNOBOX 13 -#define VARIOUS_DRAW_ARENA_REF_TEXT_BOX 14 -#define VARIOUS_ERASE_ARENA_REF_TEXT_BOX 15 -#define VARIOUS_ARENA_JUDGMENT_STRING 16 -#define VARIOUS_ARENA_WAIT_STRING 17 -#define VARIOUS_WAIT_CRY 18 -#define VARIOUS_RETURN_OPPONENT_MON1 19 -#define VARIOUS_RETURN_OPPONENT_MON2 20 -#define VARIOUS_VOLUME_DOWN 21 -#define VARIOUS_VOLUME_UP 22 -#define VARIOUS_SET_ALREADY_STATUS_MOVE_ATTEMPT 23 -#define VARIOUS_PALACE_TRY_ESCAPE_STATUS 24 -#define VARIOUS_SET_TELEPORT_OUTCOME 25 -#define VARIOUS_PLAY_TRAINER_DEFEATED_MUSIC 26 -#define VARIOUS_STAT_TEXT_BUFFER 27 -#define VARIOUS_SWITCHIN_ABILITIES 28 -#define VARIOUS_SAVE_TARGET 29 -#define VARIOUS_RESTORE_TARGET 30 -#define VARIOUS_INSTANT_HP_DROP 31 -#define VARIOUS_CLEAR_STATUS 32 -#define VARIOUS_RESTORE_PP 33 -#define VARIOUS_TRY_ACTIVATE_MOXIE 34 -#define VARIOUS_TRY_ACTIVATE_FELL_STINGER 35 -#define VARIOUS_PLAY_MOVE_ANIMATION 36 -#define VARIOUS_SET_LUCKY_CHANT 37 -#define VARIOUS_SUCKER_PUNCH_CHECK 38 -#define VARIOUS_SET_SIMPLE_BEAM 39 -#define VARIOUS_TRY_ENTRAINMENT 40 -#define VARIOUS_SET_LAST_USED_ABILITY 41 -#define VARIOUS_TRY_HEAL_PULSE 42 -#define VARIOUS_TRY_QUASH 43 -#define VARIOUS_INVERT_STAT_STAGES 44 -#define VARIOUS_SET_TERRAIN 45 -#define VARIOUS_TRY_ME_FIRST 46 -#define VARIOUS_JUMP_IF_BATTLE_END 47 -#define VARIOUS_TRY_ELECTRIFY 48 -#define VARIOUS_TRY_REFLECT_TYPE 49 -#define VARIOUS_TRY_SOAK 50 -#define VARIOUS_HANDLE_MEGA_EVO 51 -#define VARIOUS_TRY_LAST_RESORT 52 -#define VARIOUS_ARGUMENT_STATUS_EFFECT 53 -#define VARIOUS_TRY_HIT_SWITCH_TARGET 54 -#define VARIOUS_TRY_AUTOTOMIZE 55 -#define VARIOUS_TRY_COPYCAT 56 -#define VARIOUS_ABILITY_POPUP 57 -#define VARIOUS_DEFOG 58 -#define VARIOUS_JUMP_IF_TARGET_ALLY 59 -#define VARIOUS_TRY_SYNCHRONOISE 60 -#define VARIOUS_PSYCHO_SHIFT 61 -#define VARIOUS_CURE_STATUS 62 -#define VARIOUS_POWER_TRICK 63 -#define VARIOUS_AFTER_YOU 64 -#define VARIOUS_BESTOW 65 -#define VARIOUS_ARGUMENT_TO_MOVE_EFFECT 66 -#define VARIOUS_JUMP_IF_NOT_GROUNDED 67 -#define VARIOUS_HANDLE_TRAINER_SLIDE_MSG 68 -#define VARIOUS_TRY_TRAINER_SLIDE_MSG_FIRST_OFF 69 -#define VARIOUS_TRY_TRAINER_SLIDE_MSG_LAST_ON 70 -#define VARIOUS_SET_AURORA_VEIL 71 -#define VARIOUS_TRY_THIRD_TYPE 72 -#define VARIOUS_ACUPRESSURE 73 -#define VARIOUS_SET_POWDER 74 -#define VARIOUS_SPECTRAL_THIEF 75 -#define VARIOUS_GRAVITY_ON_AIRBORNE_MONS 76 -#define VARIOUS_CHECK_IF_GRASSY_TERRAIN_HEALS 77 -#define VARIOUS_JUMP_IF_ROAR_FAILS 78 -#define VARIOUS_TRY_INSTRUCT 79 -#define VARIOUS_JUMP_IF_NOT_BERRY 80 -#define VARIOUS_TRACE_ABILITY 81 -#define VARIOUS_UPDATE_NICK 82 -#define VARIOUS_TRY_ILLUSION_OFF 83 -#define VARIOUS_SET_SPRITEIGNORE0HP 84 -#define VARIOUS_HANDLE_FORM_CHANGE 85 -#define VARIOUS_GET_STAT_VALUE 86 -#define VARIOUS_JUMP_IF_FULL_HP 87 -#define VARIOUS_LOSE_TYPE 88 -#define VARIOUS_TRY_ACTIVATE_SOULHEART 89 -#define VARIOUS_TRY_ACTIVATE_RECEIVER 90 -#define VARIOUS_TRY_ACTIVATE_BEAST_BOOST 91 -#define VARIOUS_TRY_FRISK 92 -#define VARIOUS_JUMP_IF_SHIELDS_DOWN_PROTECTED 93 -#define VARIOUS_TRY_FAIRY_LOCK 94 -#define VARIOUS_JUMP_IF_NO_ALLY 95 -#define VARIOUS_POISON_TYPE_IMMUNITY 96 -#define VARIOUS_JUMP_IF_NO_HOLD_EFFECT 97 -#define VARIOUS_INFATUATE_WITH_BATTLER 98 -#define VARIOUS_SET_LAST_USED_ITEM 99 -#define VARIOUS_PARALYZE_TYPE_IMMUNITY 100 -#define VARIOUS_JUMP_IF_ABSENT 101 -#define VARIOUS_DESTROY_ABILITY_POPUP 102 -#define VARIOUS_TOTEM_BOOST 103 -#define VARIOUS_TRY_ACTIVATE_GRIM_NEIGH 104 -#define VARIOUS_MOVEEND_ITEM_EFFECTS 105 -#define VARIOUS_TERRAIN_SEED 106 -#define VARIOUS_MAKE_INVISIBLE 107 -#define VARIOUS_ROOM_SERVICE 108 -#define VARIOUS_JUMP_IF_TERRAIN_AFFECTED 109 -#define VARIOUS_EERIE_SPELL_PP_REDUCE 110 -#define VARIOUS_JUMP_IF_TEAM_HEALTHY 111 -#define VARIOUS_TRY_HEAL_QUARTER_HP 112 -#define VARIOUS_REMOVE_TERRAIN 113 -#define VARIOUS_JUMP_IF_PRANKSTER_BLOCKED 114 -#define VARIOUS_TRY_TO_CLEAR_PRIMAL_WEATHER 115 -#define VARIOUS_GET_ROTOTILLER_TARGETS 116 -#define VARIOUS_JUMP_IF_NOT_ROTOTILLER_AFFECTED 117 -#define VARIOUS_TRY_ACTIVATE_BATTLE_BOND 118 -#define VARIOUS_CONSUME_BERRY 119 -#define VARIOUS_JUMP_IF_CANT_REVERT_TO_PRIMAL 120 -#define VARIOUS_HANDLE_PRIMAL_REVERSION 121 -#define VARIOUS_APPLY_PLASMA_FISTS 122 -#define VARIOUS_JUMP_IF_SPECIES 123 -#define VARIOUS_UPDATE_ABILITY_POPUP 124 -#define VARIOUS_JUMP_IF_WEATHER_AFFECTED 125 -#define VARIOUS_JUMP_IF_LEAF_GUARD_PROTECTED 126 -#define VARIOUS_SET_ATTACKER_STICKY_WEB_USER 127 -#define VARIOUS_PHOTON_GEYSER_CHECK 128 -#define VARIOUS_SHELL_SIDE_ARM_CHECK 129 -#define VARIOUS_TRY_NO_RETREAT 130 -#define VARIOUS_TRY_TAR_SHOT 131 -#define VARIOUS_CAN_TAR_SHOT_WORK 132 -#define VARIOUS_CHECK_POLTERGEIST 133 -#define VARIOUS_SET_OCTOLOCK 134 -#define VARIOUS_CUT_1_3_HP_RAISE_STATS 135 -#define VARIOUS_TRY_END_NEUTRALIZING_GAS 136 -#define VARIOUS_JUMP_IF_UNDER_200 137 -#define VARIOUS_SET_SKY_DROP 138 -#define VARIOUS_CLEAR_SKY_DROP 139 -#define VARIOUS_SKY_DROP_YAWN 140 -#define VARIOUS_JUMP_IF_CANT_FLING 141 -#define VARIOUS_JUMP_IF_HOLD_EFFECT 142 -#define VARIOUS_CURE_CERTAIN_STATUSES 143 -#define VARIOUS_TRY_RESET_NEGATIVE_STAT_STAGES 144 -#define VARIOUS_JUMP_IF_LAST_USED_ITEM_BERRY 145 -#define VARIOUS_JUMP_IF_LAST_USED_ITEM_HOLD_EFFECT 146 -#define VARIOUS_SAVE_BATTLER_ITEM 147 -#define VARIOUS_RESTORE_BATTLER_ITEM 148 -#define VARIOUS_BATTLER_ITEM_TO_LAST_USED_ITEM 149 -#define VARIOUS_SET_BEAK_BLAST 150 -#define VARIOUS_SWAP_SIDE_STATUSES 151 -#define VARIOUS_SET_Z_EFFECT 152 -#define VARIOUS_TRY_SYMBIOSIS 153 -#define VARIOUS_CAN_TELEPORT 154 -#define VARIOUS_GET_BATTLER_SIDE 155 -#define VARIOUS_CHECK_PARENTAL_BOND_COUNTER 156 -#define VARIOUS_SWAP_STATS 157 -#define VARIOUS_JUMP_IF_ROD 158 -#define VARIOUS_JUMP_IF_ABSORB 159 -#define VARIOUS_JUMP_IF_MOTOR 160 -#define VARIOUS_TEATIME_INVUL 161 -#define VARIOUS_TEATIME_TARGETS 162 -#define VARIOUS_TRY_WIND_RIDER_POWER 163 -#define VARIOUS_ACTIVATE_WEATHER_CHANGE_ABILITIES 164 -#define VARIOUS_ACTIVATE_TERRAIN_CHANGE_ABILITIES 165 -#define VARIOUS_JUMP_IF_NO_VALID_TARGETS 166 -#define VARIOUS_JUMP_IF_EMERGENCY_EXITED 167 +#define VARIOUS_CANCEL_MULTI_TURN_MOVES 0 +#define VARIOUS_SET_MAGIC_COAT_TARGET 1 +#define VARIOUS_IS_RUNNING_IMPOSSIBLE 2 +#define VARIOUS_GET_MOVE_TARGET 3 +#define VARIOUS_GET_BATTLER_FAINTED 4 +#define VARIOUS_RESET_SWITCH_IN_ABILITY_BITS 5 +#define VARIOUS_UPDATE_CHOICE_MOVE_ON_LVL_UP 6 +#define VARIOUS_RESET_PLAYER_FAINTED 7 +#define VARIOUS_PALACE_FLAVOR_TEXT 8 +#define VARIOUS_ARENA_JUDGMENT_WINDOW 9 +#define VARIOUS_ARENA_OPPONENT_MON_LOST 10 +#define VARIOUS_ARENA_PLAYER_MON_LOST 11 +#define VARIOUS_ARENA_BOTH_MONS_LOST 12 +#define VARIOUS_EMIT_YESNOBOX 13 +#define VARIOUS_DRAW_ARENA_REF_TEXT_BOX 14 +#define VARIOUS_ERASE_ARENA_REF_TEXT_BOX 15 +#define VARIOUS_ARENA_JUDGMENT_STRING 16 +#define VARIOUS_ARENA_WAIT_STRING 17 +#define VARIOUS_WAIT_CRY 18 +#define VARIOUS_RETURN_OPPONENT_MON1 19 +#define VARIOUS_RETURN_OPPONENT_MON2 20 +#define VARIOUS_VOLUME_DOWN 21 +#define VARIOUS_VOLUME_UP 22 +#define VARIOUS_SET_ALREADY_STATUS_MOVE_ATTEMPT 23 +#define VARIOUS_PALACE_TRY_ESCAPE_STATUS 24 +#define VARIOUS_SET_TELEPORT_OUTCOME 25 +#define VARIOUS_PLAY_TRAINER_DEFEATED_MUSIC 26 +#define VARIOUS_STAT_TEXT_BUFFER 27 +#define VARIOUS_SWITCHIN_ABILITIES 28 +#define VARIOUS_SAVE_TARGET 29 +#define VARIOUS_RESTORE_TARGET 30 +#define VARIOUS_INSTANT_HP_DROP 31 +#define VARIOUS_CLEAR_STATUS 32 +#define VARIOUS_RESTORE_PP 33 +#define VARIOUS_TRY_ACTIVATE_MOXIE 34 +#define VARIOUS_TRY_ACTIVATE_FELL_STINGER 35 +#define VARIOUS_PLAY_MOVE_ANIMATION 36 +#define VARIOUS_SET_LUCKY_CHANT 37 +#define VARIOUS_SUCKER_PUNCH_CHECK 38 +#define VARIOUS_SET_SIMPLE_BEAM 39 +#define VARIOUS_TRY_ENTRAINMENT 40 +#define VARIOUS_SET_LAST_USED_ABILITY 41 +#define VARIOUS_TRY_HEAL_PULSE 42 +#define VARIOUS_TRY_QUASH 43 +#define VARIOUS_INVERT_STAT_STAGES 44 +#define VARIOUS_SET_TERRAIN 45 +#define VARIOUS_TRY_ME_FIRST 46 +#define VARIOUS_JUMP_IF_BATTLE_END 47 +#define VARIOUS_TRY_ELECTRIFY 48 +#define VARIOUS_TRY_REFLECT_TYPE 49 +#define VARIOUS_TRY_SOAK 50 +#define VARIOUS_HANDLE_MEGA_EVO 51 +#define VARIOUS_TRY_LAST_RESORT 52 +#define VARIOUS_ARGUMENT_STATUS_EFFECT 53 +#define VARIOUS_TRY_HIT_SWITCH_TARGET 54 +#define VARIOUS_TRY_AUTOTOMIZE 55 +#define VARIOUS_TRY_COPYCAT 56 +#define VARIOUS_ABILITY_POPUP 57 +#define VARIOUS_DEFOG 58 +#define VARIOUS_JUMP_IF_TARGET_ALLY 59 +#define VARIOUS_TRY_SYNCHRONOISE 60 +#define VARIOUS_PSYCHO_SHIFT 61 +#define VARIOUS_CURE_STATUS 62 +#define VARIOUS_POWER_TRICK 63 +#define VARIOUS_AFTER_YOU 64 +#define VARIOUS_BESTOW 65 +#define VARIOUS_ARGUMENT_TO_MOVE_EFFECT 66 +#define VARIOUS_JUMP_IF_NOT_GROUNDED 67 +#define VARIOUS_HANDLE_TRAINER_SLIDE_MSG 68 +#define VARIOUS_TRY_TRAINER_SLIDE_MSG_FIRST_OFF 69 +#define VARIOUS_TRY_TRAINER_SLIDE_MSG_LAST_ON 70 +#define VARIOUS_SET_AURORA_VEIL 71 +#define VARIOUS_TRY_THIRD_TYPE 72 +#define VARIOUS_ACUPRESSURE 73 +#define VARIOUS_SET_POWDER 74 +#define VARIOUS_SPECTRAL_THIEF 75 +#define VARIOUS_GRAVITY_ON_AIRBORNE_MONS 76 +#define VARIOUS_CHECK_IF_GRASSY_TERRAIN_HEALS 77 +#define VARIOUS_JUMP_IF_ROAR_FAILS 78 +#define VARIOUS_TRY_INSTRUCT 79 +#define VARIOUS_JUMP_IF_NOT_BERRY 80 +#define VARIOUS_TRACE_ABILITY 81 +#define VARIOUS_UPDATE_NICK 82 +#define VARIOUS_TRY_ILLUSION_OFF 83 +#define VARIOUS_SET_SPRITEIGNORE0HP 84 +#define VARIOUS_HANDLE_FORM_CHANGE 85 +#define VARIOUS_GET_STAT_VALUE 86 +#define VARIOUS_JUMP_IF_FULL_HP 87 +#define VARIOUS_LOSE_TYPE 88 +#define VARIOUS_TRY_ACTIVATE_SOULHEART 89 +#define VARIOUS_TRY_ACTIVATE_RECEIVER 90 +#define VARIOUS_TRY_ACTIVATE_BEAST_BOOST 91 +#define VARIOUS_TRY_FRISK 92 +#define VARIOUS_JUMP_IF_SHIELDS_DOWN_PROTECTED 93 +#define VARIOUS_TRY_FAIRY_LOCK 94 +#define VARIOUS_JUMP_IF_NO_ALLY 95 +#define VARIOUS_POISON_TYPE_IMMUNITY 96 +#define VARIOUS_JUMP_IF_NO_HOLD_EFFECT 97 +#define VARIOUS_INFATUATE_WITH_BATTLER 98 +#define VARIOUS_SET_LAST_USED_ITEM 99 +#define VARIOUS_PARALYZE_TYPE_IMMUNITY 100 +#define VARIOUS_JUMP_IF_ABSENT 101 +#define VARIOUS_DESTROY_ABILITY_POPUP 102 +#define VARIOUS_TOTEM_BOOST 103 +#define VARIOUS_TRY_ACTIVATE_GRIM_NEIGH 104 +#define VARIOUS_MOVEEND_ITEM_EFFECTS 105 +#define VARIOUS_TERRAIN_SEED 106 +#define VARIOUS_MAKE_INVISIBLE 107 +#define VARIOUS_ROOM_SERVICE 108 +#define VARIOUS_JUMP_IF_TERRAIN_AFFECTED 109 +#define VARIOUS_EERIE_SPELL_PP_REDUCE 110 +#define VARIOUS_JUMP_IF_TEAM_HEALTHY 111 +#define VARIOUS_TRY_HEAL_QUARTER_HP 112 +#define VARIOUS_REMOVE_TERRAIN 113 +#define VARIOUS_JUMP_IF_PRANKSTER_BLOCKED 114 +#define VARIOUS_TRY_TO_CLEAR_PRIMAL_WEATHER 115 +#define VARIOUS_GET_ROTOTILLER_TARGETS 116 +#define VARIOUS_JUMP_IF_NOT_ROTOTILLER_AFFECTED 117 +#define VARIOUS_TRY_ACTIVATE_BATTLE_BOND 118 +#define VARIOUS_CONSUME_BERRY 119 +#define VARIOUS_JUMP_IF_CANT_REVERT_TO_PRIMAL 120 +#define VARIOUS_HANDLE_PRIMAL_REVERSION 121 +#define VARIOUS_APPLY_PLASMA_FISTS 122 +#define VARIOUS_JUMP_IF_SPECIES 123 +#define VARIOUS_UPDATE_ABILITY_POPUP 124 +#define VARIOUS_JUMP_IF_WEATHER_AFFECTED 125 +#define VARIOUS_JUMP_IF_LEAF_GUARD_PROTECTED 126 +#define VARIOUS_SET_ATTACKER_STICKY_WEB_USER 127 +#define VARIOUS_PHOTON_GEYSER_CHECK 128 +#define VARIOUS_SHELL_SIDE_ARM_CHECK 129 +#define VARIOUS_TRY_NO_RETREAT 130 +#define VARIOUS_TRY_TAR_SHOT 131 +#define VARIOUS_CAN_TAR_SHOT_WORK 132 +#define VARIOUS_CHECK_POLTERGEIST 133 +#define VARIOUS_SET_OCTOLOCK 134 +#define VARIOUS_CUT_1_3_HP_RAISE_STATS 135 +#define VARIOUS_TRY_END_NEUTRALIZING_GAS 136 +#define VARIOUS_JUMP_IF_UNDER_200 137 +#define VARIOUS_SET_SKY_DROP 138 +#define VARIOUS_CLEAR_SKY_DROP 139 +#define VARIOUS_SKY_DROP_YAWN 140 +#define VARIOUS_JUMP_IF_CANT_FLING 141 +#define VARIOUS_JUMP_IF_HOLD_EFFECT 142 +#define VARIOUS_CURE_CERTAIN_STATUSES 143 +#define VARIOUS_TRY_RESET_NEGATIVE_STAT_STAGES 144 +#define VARIOUS_JUMP_IF_LAST_USED_ITEM_BERRY 145 +#define VARIOUS_JUMP_IF_LAST_USED_ITEM_HOLD_EFFECT 146 +#define VARIOUS_SAVE_BATTLER_ITEM 147 +#define VARIOUS_RESTORE_BATTLER_ITEM 148 +#define VARIOUS_BATTLER_ITEM_TO_LAST_USED_ITEM 149 +#define VARIOUS_SET_BEAK_BLAST 150 +#define VARIOUS_SWAP_SIDE_STATUSES 151 +#define VARIOUS_SET_Z_EFFECT 152 +#define VARIOUS_TRY_SYMBIOSIS 153 +#define VARIOUS_CAN_TELEPORT 154 +#define VARIOUS_GET_BATTLER_SIDE 155 +#define VARIOUS_CHECK_PARENTAL_BOND_COUNTER 156 +#define VARIOUS_SWAP_STATS 157 +#define VARIOUS_JUMP_IF_ROD 158 +#define VARIOUS_JUMP_IF_ABSORB 159 +#define VARIOUS_JUMP_IF_MOTOR 160 +#define VARIOUS_TEATIME_INVUL 161 +#define VARIOUS_TEATIME_TARGETS 162 +#define VARIOUS_TRY_WIND_RIDER_POWER 163 +#define VARIOUS_ACTIVATE_WEATHER_CHANGE_ABILITIES 164 +#define VARIOUS_ACTIVATE_TERRAIN_CHANGE_ABILITIES 165 +#define VARIOUS_JUMP_IF_NO_VALID_TARGETS 166 +#define VARIOUS_JUMP_IF_EMERGENCY_EXITED 167 +#define VARIOUS_TRY_TRAINER_SLIDE_MSG_Z_MOVE 168 +#define VARIOUS_TRY_TRAINER_SLIDE_MSG_MEGA_EVOLUTION 169 // Cmd_manipulatedamage #define DMG_CHANGE_SIGN 0 diff --git a/src/battle_main.c b/src/battle_main.c index b23d8af5538c..5ec0937f094a 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -3868,6 +3868,16 @@ void BattleTurnPassed(void) BattleScriptExecute(BattleScript_ArenaTurnBeginning); else if (ShouldDoTrainerSlide(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), gTrainerBattleOpponent_A, TRAINER_SLIDE_LAST_LOW_HP)) BattleScriptExecute(BattleScript_TrainerSlideMsgEnd2); + else if (ShouldDoTrainerSlide(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), gTrainerBattleOpponent_A, TRAINER_SLIDE_LAST_HALF_HP)) + BattleScriptExecute(BattleScript_TrainerSlideMsgEnd2); + else if (ShouldDoTrainerSlide(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), gTrainerBattleOpponent_A, TRAINER_SLIDE_FIRST_CRITICAL_HIT)) + BattleScriptExecute(BattleScript_TrainerSlideMsgEnd2); + else if (ShouldDoTrainerSlide(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), gTrainerBattleOpponent_A, TRAINER_SLIDE_FIRST_SUPER_EFFECTIVE_HIT)) + BattleScriptExecute(BattleScript_TrainerSlideMsgEnd2); + else if (ShouldDoTrainerSlide(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), gTrainerBattleOpponent_A, TRAINER_SLIDE_FIRST_STAB_MOVE)) + BattleScriptExecute(BattleScript_TrainerSlideMsgEnd2); + else if (ShouldDoTrainerSlide(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), gTrainerBattleOpponent_A, TRAINER_SLIDE_PLAYER_MON_UNAFFECTED)) + BattleScriptExecute(BattleScript_TrainerSlideMsgEnd2); } u8 IsRunningFromBattleImpossible(void) diff --git a/src/battle_message.c b/src/battle_message.c index 9c8a1b702011..6a301d9ee7cf 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -3868,6 +3868,13 @@ struct TrainerSlide const u8 *msgLastSwitchIn; const u8 *msgLastLowHp; const u8 *msgFirstDown; + const u8 *msgLastHalfHp; + const u8 *msgFirstCriticalHit; + const u8 *msgFirstSuperEffectiveHit; + const u8 *msgFirstSTABMove; + const u8 *msgPlayerMonUnaffected; + const u8 *msgMegaEvolution; + const u8 *msgZMove; }; static const struct TrainerSlide sTrainerSlides[] = @@ -3879,20 +3886,39 @@ static const struct TrainerSlide sTrainerSlides[] = .msgLastSwitchIn = sText_AarghAlmostHadIt, .msgLastLowHp = sText_BoxIsFull, .msgFirstDown = sText_123Poof, + .msgLastHalfHp = sText_ShootSoClose, + .msgFirstCriticalHit = sText_CriticalHit, + .msgFirstSuperEffectiveHit = sText_SuperEffective, + .msgFirstSTABMove = sText_ABoosted, + .msgPlayerMonUnaffected = sText_ButNoEffect, + .msgMegaEvolution = sText_PowderExplodes, + .msgZMove = sText_Electromagnetism, }, */ }; -static u32 GetEnemyMonCount(bool32 onlyAlive) +static u32 GetAliveEnemyMonCount(void) { u32 i, count = 0; for (i = 0; i < PARTY_SIZE; i++) { u32 species = GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2, NULL); - if (species != SPECIES_NONE - && species != SPECIES_EGG - && (!onlyAlive || GetMonData(&gEnemyParty[i], MON_DATA_HP, NULL))) + if (species != SPECIES_NONE && species != SPECIES_EGG && GetMonData(&gEnemyParty[i], MON_DATA_HP, NULL)) + count++; + } + + return count; +} + +static u32 GetTotalEnemyMonCount(void) +{ + u32 i, count = 0; + + for (i = 0; i < PARTY_SIZE; i++) + { + u32 species = GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2, NULL); + if (species != SPECIES_NONE && species != SPECIES_EGG) count++; } @@ -3914,7 +3940,7 @@ bool32 ShouldDoTrainerSlide(u32 battlerId, u32 trainerId, u32 which) switch (which) { case TRAINER_SLIDE_LAST_SWITCHIN: - if (sTrainerSlides[i].msgLastSwitchIn != NULL && GetEnemyMonCount(TRUE) == 1) + if (sTrainerSlides[i].msgLastSwitchIn != NULL && GetAliveEnemyMonCount() == 1) { gBattleStruct->trainerSlideMsg = sTrainerSlides[i].msgLastSwitchIn; return TRUE; @@ -3922,9 +3948,9 @@ bool32 ShouldDoTrainerSlide(u32 battlerId, u32 trainerId, u32 which) break; case TRAINER_SLIDE_LAST_LOW_HP: if (sTrainerSlides[i].msgLastLowHp != NULL - && GetEnemyMonCount(TRUE) == 1 - && gBattleMons[battlerId].hp <= (gBattleMons[battlerId].maxHP / 4) - && !gBattleStruct->trainerSlideLowHpMsgDone) + && GetAliveEnemyMonCount() == 1 + && gBattleMons[battlerId].hp <= (gBattleMons[battlerId].maxHP / 4) + && !gBattleStruct->trainerSlideLowHpMsgDone) { gBattleStruct->trainerSlideLowHpMsgDone = TRUE; gBattleStruct->trainerSlideMsg = sTrainerSlides[i].msgLastLowHp; @@ -3932,12 +3958,77 @@ bool32 ShouldDoTrainerSlide(u32 battlerId, u32 trainerId, u32 which) } break; case TRAINER_SLIDE_FIRST_DOWN: - if (sTrainerSlides[i].msgFirstDown != NULL && GetEnemyMonCount(TRUE) == GetEnemyMonCount(FALSE) - 1) + if (sTrainerSlides[i].msgFirstDown != NULL && GetAliveEnemyMonCount() == GetTotalEnemyMonCount() - 1) { gBattleStruct->trainerSlideMsg = sTrainerSlides[i].msgFirstDown; return TRUE; } break; + case TRAINER_SLIDE_LAST_HALF_HP: + if (sTrainerSlides[i].msgLastHalfHp != NULL + && GetAliveEnemyMonCount() == 1 + && (gBattleMons[battlerId].hp <= (gBattleMons[battlerId].maxHP / 2) && gBattleMons[battlerId].hp > (gBattleMons[battlerId].maxHP / 4)) + && !gBattleStruct->trainerSlideHalfHpMsgDone) + { + gBattleStruct->trainerSlideHalfHpMsgDone = TRUE; + gBattleStruct->trainerSlideMsg = sTrainerSlides[i].msgLastHalfHp; + return TRUE; + } + break; + case TRAINER_SLIDE_FIRST_CRITICAL_HIT: + if (sTrainerSlides[i].msgFirstCriticalHit != NULL && gBattleStruct->trainerSlideFirstCriticalHitMsgState == 1) + { + gBattleStruct->trainerSlideFirstCriticalHitMsgState = 2; + gBattleStruct->trainerSlideMsg = sTrainerSlides[i].msgFirstCriticalHit; + return TRUE; + } + break; + case TRAINER_SLIDE_FIRST_SUPER_EFFECTIVE_HIT: + if (sTrainerSlides[i].msgFirstSuperEffectiveHit != NULL + && gBattleStruct->trainerSlideFirstSuperEffectiveHitMsgState == 1 + && gBattleMons[battlerId].hp) + { + gBattleStruct->trainerSlideFirstSuperEffectiveHitMsgState = 2; + gBattleStruct->trainerSlideMsg = sTrainerSlides[i].msgFirstSuperEffectiveHit; + return TRUE; + } + break; + case TRAINER_SLIDE_FIRST_STAB_MOVE: + if (sTrainerSlides[i].msgFirstSTABMove != NULL + && gBattleStruct->trainerSlideFirstSTABMoveMsgState == 1 + && GetAliveEnemyMonCount() == GetTotalEnemyMonCount()) + { + gBattleStruct->trainerSlideFirstSTABMoveMsgState = 2; + gBattleStruct->trainerSlideMsg = sTrainerSlides[i].msgFirstSTABMove; + return TRUE; + } + break; + case TRAINER_SLIDE_PLAYER_MON_UNAFFECTED: + if (sTrainerSlides[i].msgPlayerMonUnaffected != NULL + && gBattleStruct->trainerSlidePlayerMonUnaffectedMsgState == 1 + && GetAliveEnemyMonCount() == GetTotalEnemyMonCount()) + { + gBattleStruct->trainerSlidePlayerMonUnaffectedMsgState = 2; + gBattleStruct->trainerSlideMsg = sTrainerSlides[i].msgPlayerMonUnaffected; + return TRUE; + } + break; + case TRAINER_SLIDE_MEGA_EVOLUTION: + if (sTrainerSlides[i].msgMegaEvolution != NULL && !gBattleStruct->trainerSlideMegaEvolutionMsgDone) + { + gBattleStruct->trainerSlideMegaEvolutionMsgDone = TRUE; + gBattleStruct->trainerSlideMsg = sTrainerSlides[i].msgMegaEvolution; + return TRUE; + } + break; + case TRAINER_SLIDE_Z_MOVE: + if (sTrainerSlides[i].msgZMove != NULL && !gBattleStruct->trainerSlideZMoveMsgDone) + { + gBattleStruct->trainerSlideZMoveMsgDone = TRUE; + gBattleStruct->trainerSlideMsg = sTrainerSlides[i].msgZMove; + return TRUE; + } + break; } break; } diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 87feb5627103..683a979bdd40 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -2540,6 +2540,11 @@ static void Cmd_critmessage(void) if (gIsCriticalHit == TRUE && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)) { PrepareStringBattle(STRINGID_CRITICALHIT, gBattlerAttacker); + + // Signal for the trainer slide-in system. + if (GetBattlerSide(gBattlerTarget) != B_SIDE_PLAYER && gBattleStruct->trainerSlideFirstCriticalHitMsgState != 2) + gBattleStruct->trainerSlideFirstCriticalHitMsgState = 1; + gBattleCommunication[MSG_DISPLAY] = 1; } gBattlescriptCurrInstr = cmd->nextInstr; @@ -2619,7 +2624,13 @@ static void Cmd_resultmessage(void) { case MOVE_RESULT_SUPER_EFFECTIVE: if (!gMultiHitCounter) // Don't print effectiveness on each hit in a multi hit attack + { + // Signal for the trainer slide-in system. + if (GetBattlerSide(gBattlerTarget) != B_SIDE_PLAYER && gBattleStruct->trainerSlideFirstSuperEffectiveHitMsgState != 2) + gBattleStruct->trainerSlideFirstSuperEffectiveHitMsgState = 1; + stringId = STRINGID_SUPEREFFECTIVE; + } break; case MOVE_RESULT_NOT_VERY_EFFECTIVE: if (!gMultiHitCounter) @@ -11040,6 +11051,30 @@ static void Cmd_various(void) gBattlescriptCurrInstr = cmd->nextInstr; return; } + case VARIOUS_TRY_TRAINER_SLIDE_MSG_Z_MOVE: + { + VARIOUS_ARGS(); + if (ShouldDoTrainerSlide(gActiveBattler, gTrainerBattleOpponent_A, TRAINER_SLIDE_Z_MOVE)) + { + gBattleScripting.battler = gActiveBattler; + BattleScriptPush(cmd->nextInstr); + gBattlescriptCurrInstr = BattleScript_TrainerSlideMsgRet; + return; + } + break; + } + case VARIOUS_TRY_TRAINER_SLIDE_MSG_MEGA_EVOLUTION: + { + VARIOUS_ARGS(); + if (ShouldDoTrainerSlide(gActiveBattler, gTrainerBattleOpponent_A, TRAINER_SLIDE_MEGA_EVOLUTION)) + { + gBattleScripting.battler = gActiveBattler; + BattleScriptPush(cmd->nextInstr); + gBattlescriptCurrInstr = BattleScript_TrainerSlideMsgRet; + return; + } + break; + } } // End of switch (cmd->id) gBattlescriptCurrInstr = cmd->nextInstr; diff --git a/src/battle_util.c b/src/battle_util.c index 46f8d3a3d3be..18ac8fa543b5 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -1607,6 +1607,12 @@ void PrepareStringBattle(u16 stringId, u8 battler) } #endif + // Signal for the trainer slide-in system. + if ((stringId == STRINGID_ITDOESNTAFFECT || stringId == STRINGID_PKMNWASNTAFFECTED || stringId == STRINGID_PKMNUNAFFECTED) + && GetBattlerSide(gBattlerTarget) == B_SIDE_OPPONENT + && gBattleStruct->trainerSlidePlayerMonUnaffectedMsgState != 2) + gBattleStruct->trainerSlidePlayerMonUnaffectedMsgState = 1; + gActiveBattler = battler; BtlController_EmitPrintString(BUFFER_A, stringId); MarkBattlerForControllerExec(gActiveBattler); @@ -9884,6 +9890,10 @@ static u16 CalcTypeEffectivenessMultiplierInternal(u16 move, u8 moveType, u8 bat } } + // Signal for the trainer slide-in system. + if (GetBattlerSide(battlerDef) != B_SIDE_PLAYER && modifier && gBattleStruct->trainerSlideFirstSTABMoveMsgState != 2) + gBattleStruct->trainerSlideFirstSTABMoveMsgState = 1; + return modifier; } From 2eb6401d52ab0853aa71e28f090ef8e1b1504f99 Mon Sep 17 00:00:00 2001 From: Martin Griffin Date: Sun, 19 Feb 2023 14:48:51 +0000 Subject: [PATCH 070/428] Test Overgrow, Swarm and Torrent --- test/ability_blaze.c | 2 +- test/ability_overgrow.c | 20 ++++++++++++++++++++ test/ability_swarm.c | 20 ++++++++++++++++++++ test/ability_torrent.c | 20 ++++++++++++++++++++ 4 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 test/ability_overgrow.c create mode 100644 test/ability_swarm.c create mode 100644 test/ability_torrent.c diff --git a/test/ability_blaze.c b/test/ability_blaze.c index 259b863ec360..1e12c6b2945c 100644 --- a/test/ability_blaze.c +++ b/test/ability_blaze.c @@ -15,6 +15,6 @@ SINGLE_BATTLE_TEST("Blaze boosts Fire-type moves in a pinch", s16 damage) } SCENE { HP_BAR(opponent, captureDamage: &results[i].damage); } FINALLY { - EXPECT_GT(results[1].damage, results[0].damage); + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage); } } diff --git a/test/ability_overgrow.c b/test/ability_overgrow.c new file mode 100644 index 000000000000..82d8dd467e74 --- /dev/null +++ b/test/ability_overgrow.c @@ -0,0 +1,20 @@ +#include "global.h" +#include "test_battle.h" + +SINGLE_BATTLE_TEST("Overgrow boosts Grass-type moves in a pinch", s16 damage) +{ + u16 hp; + PARAMETRIZE { hp = 99; } + PARAMETRIZE { hp = 33; } + GIVEN { + ASSUME(gBattleMoves[MOVE_VINE_WHIP].type == TYPE_GRASS); + PLAYER(SPECIES_BULBASAUR) { Ability(ABILITY_OVERGROW); MaxHP(99); HP(hp); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_VINE_WHIP); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage); + } +} diff --git a/test/ability_swarm.c b/test/ability_swarm.c new file mode 100644 index 000000000000..7709e976eae0 --- /dev/null +++ b/test/ability_swarm.c @@ -0,0 +1,20 @@ +#include "global.h" +#include "test_battle.h" + +SINGLE_BATTLE_TEST("Swarm boosts Bug-type moves in a pinch", s16 damage) +{ + u16 hp; + PARAMETRIZE { hp = 99; } + PARAMETRIZE { hp = 33; } + GIVEN { + ASSUME(gBattleMoves[MOVE_BUG_BITE].type == TYPE_BUG); + PLAYER(SPECIES_LEDYBA) { Ability(ABILITY_SWARM); MaxHP(99); HP(hp); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_BUG_BITE); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage); + } +} diff --git a/test/ability_torrent.c b/test/ability_torrent.c new file mode 100644 index 000000000000..e5c701775d61 --- /dev/null +++ b/test/ability_torrent.c @@ -0,0 +1,20 @@ +#include "global.h" +#include "test_battle.h" + +SINGLE_BATTLE_TEST("Torrent boosts Water-type moves in a pinch", s16 damage) +{ + u16 hp; + PARAMETRIZE { hp = 99; } + PARAMETRIZE { hp = 33; } + GIVEN { + ASSUME(gBattleMoves[MOVE_BUBBLE].type == TYPE_WATER); + PLAYER(SPECIES_SQUIRTLE) { Ability(ABILITY_TORRENT); MaxHP(99); HP(hp); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_BUBBLE); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage); + } +} From 666e59b37f2a3a79554589c8b7667928219a75e1 Mon Sep 17 00:00:00 2001 From: Martin Griffin Date: Sun, 19 Feb 2023 15:36:16 +0000 Subject: [PATCH 071/428] Test Roar The original implementation of forcerandomswitch was biased towards certain party members. --- src/battle_script_commands.c | 33 +++++------------ test/move_effect_roar.c | 70 ++++++++++++++++++++++++++++++++++++ 2 files changed, 78 insertions(+), 25 deletions(-) create mode 100644 test/move_effect_roar.c diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 21dbf59e4813..b4bafd215c57 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -12089,8 +12089,8 @@ static void Cmd_forcerandomswitch(void) s32 lastMonId = 0; // + 1 s32 monsCount; struct Pokemon *party = NULL; - s32 validMons = 0; - s32 minNeeded; + u8 validMons[PARTY_SIZE]; + s32 validMonsCount = 0; bool32 redCardForcedSwitch = FALSE; @@ -12147,7 +12147,6 @@ static void Cmd_forcerandomswitch(void) firstMonId = 0; lastMonId = 6; monsCount = 6; - minNeeded = 2; battler2PartyId = gBattlerPartyIndexes[gBattlerTarget]; battler1PartyId = gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerTarget)]; } @@ -12166,7 +12165,6 @@ static void Cmd_forcerandomswitch(void) lastMonId = PARTY_SIZE / 2; } monsCount = PARTY_SIZE / 2; - minNeeded = 1; battler2PartyId = gBattlerPartyIndexes[gBattlerTarget]; battler1PartyId = gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerTarget)]; } @@ -12184,7 +12182,6 @@ static void Cmd_forcerandomswitch(void) lastMonId = PARTY_SIZE / 2; } monsCount = PARTY_SIZE / 2; - minNeeded = 1; battler2PartyId = gBattlerPartyIndexes[gBattlerTarget]; battler1PartyId = gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerTarget)]; } @@ -12195,7 +12192,6 @@ static void Cmd_forcerandomswitch(void) firstMonId = 0; lastMonId = PARTY_SIZE; monsCount = PARTY_SIZE; - minNeeded = 2; // since there are two opponents, it has to be a double battle } else { @@ -12210,7 +12206,6 @@ static void Cmd_forcerandomswitch(void) lastMonId = PARTY_SIZE / 2; } monsCount = PARTY_SIZE / 2; - minNeeded = 1; } battler2PartyId = gBattlerPartyIndexes[gBattlerTarget]; battler1PartyId = gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerTarget)]; @@ -12220,7 +12215,6 @@ static void Cmd_forcerandomswitch(void) firstMonId = 0; lastMonId = PARTY_SIZE; monsCount = PARTY_SIZE; - minNeeded = 2; battler2PartyId = gBattlerPartyIndexes[gBattlerTarget]; battler1PartyId = gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerTarget)]; } @@ -12229,7 +12223,6 @@ static void Cmd_forcerandomswitch(void) firstMonId = 0; lastMonId = PARTY_SIZE; monsCount = PARTY_SIZE; - minNeeded = 1; battler2PartyId = gBattlerPartyIndexes[gBattlerTarget]; // there is only one pokemon out in single battles battler1PartyId = gBattlerPartyIndexes[gBattlerTarget]; } @@ -12238,13 +12231,15 @@ static void Cmd_forcerandomswitch(void) { if (GetMonData(&party[i], MON_DATA_SPECIES) != SPECIES_NONE && !GetMonData(&party[i], MON_DATA_IS_EGG) - && GetMonData(&party[i], MON_DATA_HP) != 0) + && GetMonData(&party[i], MON_DATA_HP) != 0 + && i != battler1PartyId + && i != battler2PartyId) { - validMons++; + validMons[validMonsCount++] = i; } } - if (!redCardForcedSwitch && validMons <= minNeeded) + if (validMonsCount == 0) { gBattlescriptCurrInstr = cmd->failInstr; } @@ -12252,19 +12247,7 @@ static void Cmd_forcerandomswitch(void) { *(gBattleStruct->battlerPartyIndexes + gBattlerTarget) = gBattlerPartyIndexes[gBattlerTarget]; gBattlescriptCurrInstr = BattleScript_RoarSuccessSwitch; - - do - { - i = Random() % monsCount; - i += firstMonId; - } - while (i == battler2PartyId - || i == battler1PartyId - || GetMonData(&party[i], MON_DATA_SPECIES) == SPECIES_NONE - || GetMonData(&party[i], MON_DATA_IS_EGG) == TRUE - || GetMonData(&party[i], MON_DATA_HP) == 0); - - *(gBattleStruct->monToSwitchIntoId + gBattlerTarget) = i; + *(gBattleStruct->monToSwitchIntoId + gBattlerTarget) = validMons[Random() % validMonsCount]; if (!IsMultiBattle()) SwitchPartyOrder(gBattlerTarget); diff --git a/test/move_effect_roar.c b/test/move_effect_roar.c new file mode 100644 index 000000000000..2d4eadda8578 --- /dev/null +++ b/test/move_effect_roar.c @@ -0,0 +1,70 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_ROAR].effect == EFFECT_ROAR); +} + +SINGLE_BATTLE_TEST("Roar switches the target with a random non-fainted replacement") +{ + PASSES_RANDOMLY(1, 2); + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_BULBASAUR); + OPPONENT(SPECIES_CHARMANDER); + OPPONENT(SPECIES_SQUIRTLE) { HP(0); } + } WHEN { + TURN { MOVE(player, MOVE_ROAR); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_ROAR, player); + MESSAGE("Foe Bulbasaur was dragged out!"); + } +} + +DOUBLE_BATTLE_TEST("Roar switches the target with a random non-battler, non-fainted replacement") +{ + PASSES_RANDOMLY(1, 2); + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + OPPONENT(SPECIES_BULBASAUR); + OPPONENT(SPECIES_CHARMANDER); + OPPONENT(SPECIES_SQUIRTLE) { HP(0); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_ROAR, target: opponentRight); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_ROAR, playerLeft); + MESSAGE("Foe Bulbasaur was dragged out!"); + } +} + +SINGLE_BATTLE_TEST("Roar fails if no replacements") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_ROAR); } + } SCENE { + MESSAGE("Wobbuffet used Roar!"); + MESSAGE("But it failed!"); + } +} + +SINGLE_BATTLE_TEST("Roar fails if replacements fainted") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT) { HP(0); } + } WHEN { + TURN { MOVE(player, MOVE_ROAR); } + } SCENE { + MESSAGE("Wobbuffet used Roar!"); + MESSAGE("But it failed!"); + } +} From afe09e96532165c044848ace9a3a3ed034567041 Mon Sep 17 00:00:00 2001 From: Martin Griffin Date: Sun, 19 Feb 2023 21:08:30 +0000 Subject: [PATCH 072/428] Test Dragon Tail Remove the "But it failed!" message if the foe cannot be switched. --- data/battle_scripts_1.s | 7 ++- include/battle_scripts.h | 1 - src/battle_script_commands.c | 2 +- test/move_effect_hit_switch_target.c | 72 ++++++++++++++++++++++++++++ 4 files changed, 76 insertions(+), 6 deletions(-) create mode 100644 test/move_effect_hit_switch_target.c diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 6fa0cd7ad709..53925b578d36 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -2128,9 +2128,9 @@ BattleScript_EffectHitSwitchTarget: moveendall jumpifability BS_TARGET, ABILITY_SUCTION_CUPS, BattleScript_AbilityPreventsPhasingOut jumpifstatus3 BS_TARGET, STATUS3_ROOTED, BattleScript_PrintMonIsRooted - tryhitswitchtarget BattleScript_EffectHitSwitchTargetMoveEnd -BattleScript_EffectHitSwitchTargetMoveEnd: - end + tryhitswitchtarget BattleScript_MoveEnd + forcerandomswitch BattleScript_MoveEnd + goto BattleScript_MoveEnd BattleScript_EffectClearSmog: setmoveeffect MOVE_EFFECT_CLEAR_SMOG @@ -3708,7 +3708,6 @@ BattleScript_EffectRoar:: accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE jumpifbattletype BATTLE_TYPE_ARENA, BattleScript_ButItFailed -BattleScript_ForceRandomSwitch:: forcerandomswitch BattleScript_ButItFailed BattleScript_EffectMultiHit:: diff --git a/include/battle_scripts.h b/include/battle_scripts.h index 70d398e2a523..d4e4d4b3ce3e 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -293,7 +293,6 @@ extern const u8 BattleScript_WishMegaEvolution[]; extern const u8 BattleScript_MoveEffectRecoilWithStatus[]; extern const u8 BattleScript_EffectWithChance[]; extern const u8 BattleScript_MoveEffectClearSmog[]; -extern const u8 BattleScript_ForceRandomSwitch[]; extern const u8 BattleScript_SideStatusWoreOffReturn[]; extern const u8 BattleScript_MoveEffectSmackDown[]; extern const u8 BattleScript_MoveEffectFlameBurst[]; diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index b4bafd215c57..fdd3d4f07bcb 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -9792,7 +9792,7 @@ static void Cmd_various(void) && GetBattlerAbility(gBattlerTarget) != ABILITY_GUARD_DOG) { gBattleScripting.switchCase = B_SWITCH_HIT; - gBattlescriptCurrInstr = BattleScript_ForceRandomSwitch; + gBattlescriptCurrInstr = cmd->nextInstr; } else { diff --git a/test/move_effect_hit_switch_target.c b/test/move_effect_hit_switch_target.c new file mode 100644 index 000000000000..9c50a4e4c071 --- /dev/null +++ b/test/move_effect_hit_switch_target.c @@ -0,0 +1,72 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_DRAGON_TAIL].effect == EFFECT_HIT_SWITCH_TARGET); + ASSUME(gBattleMoves[MOVE_LOCK_ON].effect == EFFECT_LOCK_ON); +} + +SINGLE_BATTLE_TEST("Dragon Tail switches the target with a random non-fainted replacement") +{ + KNOWN_FAILING; // Only 18/50. Waiting for an improved PASSES_RANDOMLY. + PASSES_RANDOMLY(90 * 1, 100 * 2); + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_BULBASAUR); + OPPONENT(SPECIES_CHARMANDER); + OPPONENT(SPECIES_SQUIRTLE) { HP(0); } + } WHEN { + TURN { MOVE(player, MOVE_DRAGON_TAIL); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_TAIL, player); + MESSAGE("Foe Bulbasaur was dragged out!"); + } +} + +DOUBLE_BATTLE_TEST("Dragon Tail switches the target with a random non-battler, non-fainted replacement") +{ + PASSES_RANDOMLY(90 * 1, 100 * 2); + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + OPPONENT(SPECIES_BULBASAUR); + OPPONENT(SPECIES_CHARMANDER); + OPPONENT(SPECIES_SQUIRTLE) { HP(0); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_DRAGON_TAIL, target: opponentRight); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_TAIL, playerLeft); + MESSAGE("Foe Bulbasaur was dragged out!"); + } +} + +SINGLE_BATTLE_TEST("Dragon Tail does not fail if no replacements") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_DRAGON_TAIL); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_TAIL, player); + NOT MESSAGE("But it failed!"); + } +} + +SINGLE_BATTLE_TEST("Dragon Tail does not fail if replacements fainted") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT) { HP(0); } + } WHEN { + TURN { MOVE(player, MOVE_DRAGON_TAIL); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_TAIL, player); + NOT MESSAGE("But it failed!"); + } +} From 29c64c82f329c45131c7e31e7e48ad69ae3fdb97 Mon Sep 17 00:00:00 2001 From: Martin Griffin Date: Tue, 21 Feb 2023 10:44:58 +0000 Subject: [PATCH 073/428] Test Red Card Dragon Tail activates Red Card if the target does not switch. --- asm/macros/battle_script.inc | 4 + data/battle_scripts_1.s | 7 +- include/battle.h | 1 + include/constants/battle_script_commands.h | 1 + src/battle_script_commands.c | 10 +- test/hold_effect_red_card.c | 378 +++++++++++++++++++++ 6 files changed, 399 insertions(+), 2 deletions(-) create mode 100644 test/hold_effect_red_card.c diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index 6c985e3cddea..7c94f06ffedb 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -2247,3 +2247,7 @@ various \battler, VARIOUS_JUMP_IF_EMERGENCY_EXITED .4byte \jumpInstr .endm + + .macro hitswitchtargetfailed + various 0, VARIOUS_HIT_SWITCH_TARGET_FAILED + .endm diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 53925b578d36..239d22109332 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -2129,7 +2129,12 @@ BattleScript_EffectHitSwitchTarget: jumpifability BS_TARGET, ABILITY_SUCTION_CUPS, BattleScript_AbilityPreventsPhasingOut jumpifstatus3 BS_TARGET, STATUS3_ROOTED, BattleScript_PrintMonIsRooted tryhitswitchtarget BattleScript_MoveEnd - forcerandomswitch BattleScript_MoveEnd + forcerandomswitch BattleScript_HitSwitchTargetForceRandomSwitchFailed + goto BattleScript_MoveEnd + +BattleScript_HitSwitchTargetForceRandomSwitchFailed: + hitswitchtargetfailed + setbyte sSWITCH_CASE, B_SWITCH_NORMAL goto BattleScript_MoveEnd BattleScript_EffectClearSmog: diff --git a/include/battle.h b/include/battle.h index 2c16887bf66a..c3281174d057 100644 --- a/include/battle.h +++ b/include/battle.h @@ -651,6 +651,7 @@ struct BattleStruct // When using a move which hits multiple opponents which is then bounced by a target, we need to make sure, the move hits both opponents, the one with bounce, and the one without. u8 attackerBeforeBounce:2; u8 beatUpSlot:3; + bool8 hitSwitchTargetFailed:1; u8 targetsDone[MAX_BATTLERS_COUNT]; // Each battler as a bit. u16 overwrittenAbilities[MAX_BATTLERS_COUNT]; // abilities overwritten during battle (keep separate from battle history in case of switching) bool8 allowedToChangeFormInWeather[PARTY_SIZE][2]; // For each party member and side, used by Ice Face. diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h index 9f18455a841d..0b71c22db9e5 100644 --- a/include/constants/battle_script_commands.h +++ b/include/constants/battle_script_commands.h @@ -258,6 +258,7 @@ #define VARIOUS_JUMP_IF_NO_VALID_TARGETS 166 #define VARIOUS_JUMP_IF_EMERGENCY_EXITED 167 #define VARIOUS_STORE_HEALING_WISH 168 +#define VARIOUS_HIT_SWITCH_TARGET_FAILED 169 // Cmd_manipulatedamage #define DMG_CHANGE_SIGN 0 diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index fdd3d4f07bcb..5667beb4ac38 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -5968,7 +5968,7 @@ static void Cmd_moveend(void) gBattleScripting.moveendState++; break; case MOVEEND_RED_CARD: - if (gBattleMoves[gCurrentMove].effect != EFFECT_HIT_SWITCH_TARGET + if ((gBattleMoves[gCurrentMove].effect != EFFECT_HIT_SWITCH_TARGET || gBattleStruct->hitSwitchTargetFailed) && IsBattlerAlive(gBattlerAttacker) && !TestSheerForceFlag(gBattlerAttacker, gCurrentMove) && GetBattlerAbility(gBattlerAttacker) != ABILITY_GUARD_DOG) @@ -6199,6 +6199,7 @@ static void Cmd_moveend(void) gBattleStruct->zmove.active = FALSE; gBattleStruct->zmove.toBeUsed[gBattlerAttacker] = MOVE_NONE; gBattleStruct->zmove.effect = EFFECT_HIT; + gBattleStruct->hitSwitchTargetFailed = FALSE; gBattleScripting.moveendState++; break; case MOVEEND_COUNT: @@ -11067,6 +11068,13 @@ static void Cmd_various(void) gBattleStruct->storedHealingWish |= gBitTable[gActiveBattler]; break; } + case VARIOUS_HIT_SWITCH_TARGET_FAILED: + { + VARIOUS_ARGS(); + gBattleStruct->hitSwitchTargetFailed = TRUE; + gBattlescriptCurrInstr = cmd->nextInstr; + return; + } } // End of switch (cmd->id) gBattlescriptCurrInstr = cmd->nextInstr; diff --git a/test/hold_effect_red_card.c b/test/hold_effect_red_card.c new file mode 100644 index 000000000000..c32c489d5a39 --- /dev/null +++ b/test/hold_effect_red_card.c @@ -0,0 +1,378 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gItems[ITEM_RED_CARD].holdEffect == HOLD_EFFECT_RED_CARD); +} + +SINGLE_BATTLE_TEST("Red Card switches the attacker with a random non-fainted replacement") +{ + PASSES_RANDOMLY(1, 2); + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_RED_CARD); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_BULBASAUR); + OPPONENT(SPECIES_CHARMANDER); + OPPONENT(SPECIES_SQUIRTLE) { HP(0); } + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); + MESSAGE("Foe Bulbasaur was dragged out!"); + } +} + +DOUBLE_BATTLE_TEST("Red Card switches the target with a random non-battler, non-fainted replacement") +{ + PASSES_RANDOMLY(1, 2); + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_RED_CARD); } + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + OPPONENT(SPECIES_BULBASAUR); + OPPONENT(SPECIES_CHARMANDER); + OPPONENT(SPECIES_SQUIRTLE) { HP(0); } + } WHEN { + TURN { MOVE(opponentLeft, MOVE_TACKLE, target: playerLeft); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentLeft); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerLeft); + MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); + MESSAGE("Foe Bulbasaur was dragged out!"); + } +} + +SINGLE_BATTLE_TEST("Red Card does not activate if holder faints") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { HP(1); Item(ITEM_RED_CARD); } + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE); SEND_OUT(player, 1); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); + } + } +} + +SINGLE_BATTLE_TEST("Red Card does not activate if target is behind a Substitute") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_RED_CARD); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(player, MOVE_SUBSTITUTE); MOVE(opponent, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); + } + } +} + +SINGLE_BATTLE_TEST("Red Card activates after the last hit of a multi-hit move") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_RED_CARD); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(opponent, MOVE_DOUBLE_KICK); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DOUBLE_KICK, opponent); + HP_BAR(player); + HP_BAR(player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); + } +} + +SINGLE_BATTLE_TEST("Red Card does not activate if no replacements") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_RED_CARD); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); + } + } +} + +SINGLE_BATTLE_TEST("Red Card does not activate if replacements fainted") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_RED_CARD); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT) { HP(0); } + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); + } + } +} + +SINGLE_BATTLE_TEST("Red Card does not activate if knocked off") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_RED_CARD); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(opponent, MOVE_KNOCK_OFF); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_KNOCK_OFF, opponent); + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); + } + } +} + +SINGLE_BATTLE_TEST("Red Card does not activate if stolen by a move") +{ + u32 item; + bool32 activate; + PARAMETRIZE { item = ITEM_NONE; activate = FALSE; } + PARAMETRIZE { item = ITEM_POTION; activate = TRUE; } + ASSUME(gBattleMoves[MOVE_THIEF].effect == EFFECT_THIEF); + + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_RED_CARD); } + OPPONENT(SPECIES_WOBBUFFET) { Item(item); } + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(opponent, MOVE_THIEF); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_THIEF, opponent); + if (activate) { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); + } else { + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); + } + } + } +} + +SINGLE_BATTLE_TEST("Red Card does not activate if stolen by Magician") +{ + u32 item; + bool32 activate; + PARAMETRIZE { item = ITEM_NONE; activate = FALSE; } + PARAMETRIZE { item = ITEM_POTION; activate = TRUE; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_RED_CARD); } + OPPONENT(SPECIES_FENNEKIN) { Ability(ABILITY_MAGICIAN); Item(item); } + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + if (activate) { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Wobbuffet held up its Red Card against Foe Fennekin!"); + } else { + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Wobbuffet held up its Red Card against Foe Fennekin!"); + } + } + } +} + +DOUBLE_BATTLE_TEST("Red Card activates for only the fastest target") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Speed(3); Item(ITEM_RED_CARD); } + PLAYER(SPECIES_WYNAUT) { Speed(2); Item(ITEM_RED_CARD); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(5); } + OPPONENT(SPECIES_WYNAUT) { Speed(4); } + OPPONENT(SPECIES_UNOWN) { Speed(1); } + } WHEN { + TURN { + MOVE(opponentLeft, MOVE_ROCK_SLIDE); + MOVE(opponentRight, MOVE_TACKLE, target: playerRight); + } + } SCENE { + // Fastest target's Red Card activates. + ANIMATION(ANIM_TYPE_MOVE, MOVE_ROCK_SLIDE, opponentLeft); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerLeft); + MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); + MESSAGE("Foe Unown was dragged out!"); + + // Slower target's Red Card still able to activate on other battler. + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentRight); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerRight); + MESSAGE("Wynaut held up its Red Card against Foe Wynaut!"); + MESSAGE("Foe Wobbuffet was dragged out!"); + } +} + +DOUBLE_BATTLE_TEST("Red Card activates but fails if the attacker is rooted") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_RED_CARD); } + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + OPPONENT(SPECIES_UNOWN); + } WHEN { + TURN { MOVE(opponentLeft, MOVE_INGRAIN); } + TURN { + MOVE(opponentLeft, MOVE_TACKLE, target: playerLeft); + MOVE(opponentRight, MOVE_TACKLE, target: playerLeft); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentLeft); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerLeft); + MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); + MESSAGE("Foe Wobbuffet anchored itself with its roots!"); + + // Red Card already consumed so cannot activate. + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentRight); + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerRight); + MESSAGE("Wynaut held up its Red Card against Foe Wynaut!"); + } + } +} + +DOUBLE_BATTLE_TEST("Red Card activates but fails if the attacker has Suction Cups") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_RED_CARD); } + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_OCTILLERY) { Ability(ABILITY_SUCTION_CUPS); } + OPPONENT(SPECIES_WYNAUT); + OPPONENT(SPECIES_UNOWN); + } WHEN { + TURN { + MOVE(opponentLeft, MOVE_TACKLE, target: playerLeft); + MOVE(opponentRight, MOVE_TACKLE, target: playerLeft); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentLeft); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerLeft); + MESSAGE("Wobbuffet held up its Red Card against Foe Octillery!"); + MESSAGE("Foe Octillery anchors itself with Suction Cups!"); + + // Red Card already consumed so cannot activate. + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentRight); + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerRight); + MESSAGE("Wynaut held up its Red Card against Foe Wynaut!"); + } + } +} + +SINGLE_BATTLE_TEST("Red Card does not activate if switched by Dragon Tail") +{ + bool32 hasWynaut, activate; + PARAMETRIZE { hasWynaut = TRUE; activate = FALSE; } + PARAMETRIZE { hasWynaut = FALSE; activate = TRUE; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_RED_CARD); } + if (hasWynaut) PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(opponent, MOVE_DRAGON_TAIL); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_TAIL, opponent); + if (activate) { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); + } else { + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); + } + } + } +} + +SINGLE_BATTLE_TEST("Red Card activates and overrides U-turn") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_RED_CARD); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(opponent, MOVE_U_TURN); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_U_TURN, opponent); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); + } +} + +SINGLE_BATTLE_TEST("Red Card does not activate if attacker's Sheer Force applied") +{ + u32 move; + bool32 activate; + PARAMETRIZE { move = MOVE_TACKLE; activate = TRUE; } + PARAMETRIZE { move = MOVE_STOMP; activate = FALSE; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_RED_CARD); } + OPPONENT(SPECIES_TAUROS) { Ability(ABILITY_SHEER_FORCE); } + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(opponent, move); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, move, opponent); + if (activate) { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Wobbuffet held up its Red Card against Foe Tauros!"); + } else { + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Wobbuffet held up its Red Card against Foe Tauros!"); + } + } + } +} + +SINGLE_BATTLE_TEST("Red Card activates before Emergency Exit") +{ + GIVEN { + PLAYER(SPECIES_GOLISOPOD) { MaxHP(100); HP(51); Item(ITEM_RED_CARD); } + PLAYER(SPECIES_WIMPOD); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE); SEND_OUT(player, 1); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Golisopod held up its Red Card against Foe Wobbuffet!"); + ABILITY_POPUP(player, ABILITY_EMERGENCY_EXIT); + MESSAGE("Go! Wimpod!"); + } +} + +// SINGLE_BATTLE_TEST("Red Card activates but fails if the attacker has Dynamaxed") From 1e2eeb4d797aaba2324dfbaa41a283fa6ac9fa86 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 21 Feb 2023 16:26:49 +0100 Subject: [PATCH 074/428] fix wrong assumption --- test/ability_download.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/ability_download.c b/test/ability_download.c index 77d090a3068c..132c0eb5baa9 100644 --- a/test/ability_download.c +++ b/test/ability_download.c @@ -4,7 +4,7 @@ ASSUMPTIONS { ASSUME(gBattleMoves[MOVE_TACKLE].split == SPLIT_PHYSICAL); - ASSUME(gBattleMoves[MOVE_TRI_ATTACK].split == SPLIT_PHYSICAL); + ASSUME(gBattleMoves[MOVE_TRI_ATTACK].split == SPLIT_SPECIAL); } SINGLE_BATTLE_TEST("Download raises Attack if player has lower Def than Sp.Def", s16 damage) From f3c6b647c089d75c53dbb26cf5cfccd5fade73ee Mon Sep 17 00:00:00 2001 From: Martin Griffin Date: Tue, 21 Feb 2023 15:30:42 +0000 Subject: [PATCH 075/428] Hydra fixes and improvements (#2718) * Build tools for check * Display PASSes when Hydra exits * Print buffered output at exit * Remove unused test summaries * Show SKIP if ASSUMPTIONS fails --- Makefile | 2 +- test/test.h | 1 - test/test_runner.c | 27 +++++++++------------------ tools/mgba-rom-test-hydra/main.c | 16 +++++++++++++++- 4 files changed, 25 insertions(+), 21 deletions(-) diff --git a/Makefile b/Makefile index 8e3ff29753f1..2b997fee59c2 100644 --- a/Makefile +++ b/Makefile @@ -464,7 +464,7 @@ LD_SCRIPT_TEST := ld_script_test.txt $(OBJ_DIR)/ld_script_test.ld: $(LD_SCRIPT_TEST) $(LD_SCRIPT_DEPS) cd $(OBJ_DIR) && sed "s#tools/#../../tools/#g" ../../$(LD_SCRIPT_TEST) > ld_script_test.ld -$(TESTELF): $(OBJ_DIR)/ld_script_test.ld $(OBJS) $(TEST_OBJS) libagbsyscall check-tools +$(TESTELF): $(OBJ_DIR)/ld_script_test.ld $(OBJS) $(TEST_OBJS) libagbsyscall tools check-tools @echo "cd $(OBJ_DIR) && $(LD) -T ld_script_test.ld -o ../../$@ " @cd $(OBJ_DIR) && $(LD) $(TESTLDFLAGS) -T ld_script_test.ld -o ../../$@ $(OBJS_REL) $(TEST_OBJS_REL) $(LIB) $(FIX) $@ -t"$(TITLE)" -c$(GAME_CODE) -m$(MAKER_CODE) -r$(REVISION) --silent diff --git a/test/test.h b/test/test.h index cbcf117178fa..c69a4fa925d1 100644 --- a/test/test.h +++ b/test/test.h @@ -39,7 +39,6 @@ struct TestRunnerState u8 exitCode; s32 tests; s32 passes; - s32 skips; const char *skipFilename; const struct Test *test; u32 processCosts[MAX_PROCESSES]; diff --git a/test/test_runner.c b/test/test_runner.c index 3cb1f7c21379..0be163431703 100644 --- a/test/test_runner.c +++ b/test/test_runner.c @@ -60,7 +60,6 @@ void CB2_TestRunner(void) gTestRunnerState.exitCode = 0; gTestRunnerState.tests = 0; gTestRunnerState.passes = 0; - gTestRunnerState.skips = 0; gTestRunnerState.skipFilename = NULL; gTestRunnerState.test = __start_tests - 1; break; @@ -70,20 +69,15 @@ void CB2_TestRunner(void) if (gTestRunnerState.test == __stop_tests) { - MgbaPrintf_("%s%d/%d PASSED\e[0m", gTestRunnerState.exitCode == 0 ? "\e[32m" : "\e[31m", gTestRunnerState.passes, gTestRunnerState.tests); - if (gTestRunnerState.skips) - { - if (gTestRunnerSkipIsFail) - MgbaPrintf_("\e[31m%d SKIPPED\e[0m", gTestRunnerState.skips); - else - MgbaPrintf_("%d SKIPPED", gTestRunnerState.skips); - } gTestRunnerState.state = STATE_EXIT; return; } - if (!PrefixMatch(gTestRunnerArgv, gTestRunnerState.test->name)) + if (gTestRunnerState.test->runner != &gAssumptionsRunner + && !PrefixMatch(gTestRunnerArgv, gTestRunnerState.test->name)) + { return; + } // Greedily assign tests to processes based on estimated cost. // TODO: Make processCosts a min heap. @@ -111,6 +105,7 @@ void CB2_TestRunner(void) return; } + MgbaPrintf_(":N%s", gTestRunnerState.test->name); gTestRunnerState.state = STATE_REPORT_RESULT; gTestRunnerState.result = TEST_RESULT_PASS; gTestRunnerState.expectedResult = TEST_RESULT_PASS; @@ -130,7 +125,6 @@ void CB2_TestRunner(void) } else { - MgbaPrintf_(":N%s", gTestRunnerState.test->name); if (gTestRunnerState.test->runner->setUp) gTestRunnerState.test->runner->setUp(gTestRunnerState.test->data); gTestRunnerState.test->runner->run(gTestRunnerState.test->data); @@ -150,12 +144,6 @@ void CB2_TestRunner(void) if (gTestRunnerState.result != TEST_RESULT_PASS) gTestRunnerState.skipFilename = gTestRunnerState.test->filename; } - else if (gTestRunnerState.result == TEST_RESULT_SKIP) - { - gTestRunnerState.skips++; - if (gTestRunnerSkipIsFail) - gTestRunnerState.exitCode = 1; - } else { const char *color; @@ -206,7 +194,10 @@ void CB2_TestRunner(void) default: result = "UNKNOWN"; break; } - MgbaPrintf_(":R%s%s\e[0m", color, result); + if (gTestRunnerState.expectedResult == gTestRunnerState.result) + MgbaPrintf_(":P%s%s\e[0m", color, result); + else + MgbaPrintf_(":F%s%s\e[0m", color, result); } break; diff --git a/tools/mgba-rom-test-hydra/main.c b/tools/mgba-rom-test-hydra/main.c index 5dfc995176ca..4ce9b09bd055 100644 --- a/tools/mgba-rom-test-hydra/main.c +++ b/tools/mgba-rom-test-hydra/main.c @@ -38,6 +38,8 @@ struct Runner size_t output_buffer_size; size_t output_buffer_capacity; char *output_buffer; + int passes; + int results; }; static unsigned nrunners = 0; @@ -72,7 +74,11 @@ static void handle_read(struct Runner *runner) runner->test_name[eol - soc - 1] = '\0'; break; - case 'R': + case 'P': + case 'F': + if (soc[1] == 'P') + runner->passes++; + runner->results++; soc += 2; fprintf(stdout, "%s: ", runner->test_name); fwrite(soc, 1, eol - soc, stdout); @@ -404,6 +410,8 @@ int main(int argc, char *argv[]) // Reap test runners and collate exit codes. int exit_code = 0; + int passes = 0; + int results = 0; for (int i = 0; i < nrunners; i++) { int wstatus; @@ -412,8 +420,14 @@ int main(int argc, char *argv[]) perror("waitpid runners[i] failed"); exit(2); } + if (runners[i].output_buffer_size > 0) + fwrite(runners[i].output_buffer, 1, runners[i].output_buffer_size, stdout); if (WIFEXITED(wstatus) && WEXITSTATUS(wstatus) > exit_code) exit_code = WEXITSTATUS(wstatus); + passes += runners[i].passes; + results += runners[i].results; } + fprintf(stdout, "%d/%d \e[32mPASS\e[0med\n", passes, results); + fflush(stdout); return exit_code; } From d73ab0246f0e0ccb24861dae1d3c9ec5a71b9f51 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 21 Feb 2023 23:50:29 +0100 Subject: [PATCH 076/428] Fix Explosion + Galvanize + Volt Absorb and Mind Blown (#2688) * Fix Explosion and Mind Blown * Use battler ability in jumpifabilitypresent --- asm/macros/battle_script.inc | 6 ++ data/battle_scripts_1.s | 69 ++++++++++++--------- src/battle_script_commands.c | 33 ++++++---- test/ability_damp.c | 20 +++++++ test/ability_volt_absorb.c | 28 ++++++++- test/move_effect_explosion.c | 46 +++++++++++++- test/move_effect_mind_blown.c | 109 ++++++++++++++++++++++++++++++++++ 7 files changed, 268 insertions(+), 43 deletions(-) create mode 100644 test/move_effect_mind_blown.c diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index 7c94f06ffedb..573ffff26195 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -1317,6 +1317,12 @@ .2byte \holdEffect .4byte \jumpInstr .endm + + .macro jumpifmorethanhalfHP battler:req, jumpInstr:req + callnative BS_JumpIfMoreThanHalfHP + .byte \battler + .4byte \jumpInstr + .endm @ various command changed to more readable macros .macro cancelmultiturnmoves battler:req diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 239d22109332..95d774b20fa1 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -3417,27 +3417,20 @@ BattleScript_EffectFreezeHit:: BattleScript_EffectParalyzeHit:: setmoveeffect MOVE_EFFECT_PARALYSIS goto BattleScript_EffectHit - -BattleScript_EffectExplosion:: - attackcanceler - attackstring - ppreduce -@ Below jumps to BattleScript_DampStopsExplosion if it fails (only way it can) - tryexplosion - setatkhptozero - waitstate - jumpifbyte CMP_NO_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_MISSED, BattleScript_ExplosionDoAnimStartLoop + +BattleScript_EffectExplosion_AnimDmgRet: + jumpifbyte CMP_NO_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_MISSED, BattleScript_ExplosionAnimRet call BattleScript_PreserveMissedBitDoMoveAnim - goto BattleScript_ExplosionLoop -BattleScript_ExplosionDoAnimStartLoop: + goto BattleScript_ExplosionDmgRet +BattleScript_ExplosionAnimRet: attackanimation waitanimation -BattleScript_ExplosionLoop: +BattleScript_ExplosionDmgRet: movevaluescleanup critcalc damagecalc adjustdamage - accuracycheck BattleScript_ExplosionMissed, ACC_CURR_MOVE + accuracycheck BattleScript_ExplosionMissedRet, ACC_CURR_MOVE effectivenesssound hitanimation BS_TARGET waitstate @@ -3448,17 +3441,25 @@ BattleScript_ExplosionLoop: resultmessage waitmessage B_WAIT_TIME_LONG tryfaintmon BS_TARGET - moveendto MOVEEND_NEXT_TARGET - jumpifnexttargetvalid BattleScript_ExplosionLoop - tryfaintmon BS_ATTACKER - moveendcase MOVEEND_CLEAR_BITS - end -BattleScript_ExplosionMissed: +BattleScript_ExplosionAnimEndRet_Return: + return +BattleScript_ExplosionMissedRet: effectivenesssound resultmessage waitmessage B_WAIT_TIME_LONG - moveendto MOVEEND_NEXT_TARGET - jumpifnexttargetvalid BattleScript_ExplosionLoop + goto BattleScript_ExplosionAnimEndRet_Return + +BattleScript_EffectExplosion:: + attackcanceler + attackstring + ppreduce +@ Below jumps to BattleScript_DampStopsExplosion if it fails (only way it can) + tryexplosion + waitstate +BattleScript_EffectExplosion_AnimDmgFaintAttacker: + call BattleScript_EffectExplosion_AnimDmgRet + moveendall + setatkhptozero tryfaintmon BS_ATTACKER end @@ -3466,14 +3467,28 @@ BattleScript_EffectMindBlown:: attackcanceler attackstring ppreduce - tryexplosion + jumpifbyte CMP_GREATER_THAN, sB_ANIM_TARGETS_HIT, 0, BattleScript_EffectMindBlown_NoHpLoss + jumpifabilitypresent ABILITY_DAMP, BattleScript_MindBlownDamp + jumpifmorethanhalfHP BS_ATTACKER, BattleScript_EffectMindBlown_HpDown + setbyte sMULTIHIT_EFFECT, 0 @ Note to faint the attacker + instanthpdrop BS_ATTACKER + waitstate + goto BattleScript_EffectExplosion_AnimDmgFaintAttacker +BattleScript_EffectMindBlown_NoHpLoss: + jumpifbyte CMP_EQUAL, sMULTIHIT_EFFECT, 0, BattleScript_EffectExplosion_AnimDmgFaintAttacker + goto BattleScript_EffectMindBlown_AnimDmgNoFaint +BattleScript_MindBlownDamp: + copybyte gBattlerTarget, gBattlerAbility + goto BattleScript_DampStopsExplosion +BattleScript_EffectMindBlown_HpDown: + setbyte sMULTIHIT_EFFECT, 1 @ Note to not faint the attacker dmg_1_2_attackerhp healthbarupdate BS_ATTACKER datahpupdate BS_ATTACKER waitstate - jumpifbyte CMP_NO_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_MISSED, BattleScript_ExplosionDoAnimStartLoop - call BattleScript_PreserveMissedBitDoMoveAnim - goto BattleScript_ExplosionLoop +BattleScript_EffectMindBlown_AnimDmgNoFaint: + call BattleScript_EffectExplosion_AnimDmgRet + goto BattleScript_MoveEnd BattleScript_PreserveMissedBitDoMoveAnim: bichalfword gMoveResultFlags, MOVE_RESULT_MISSED @@ -8360,9 +8375,9 @@ BattleScript_AbilityRaisesDefenderStat:: BattleScript_AbilityPopUp: .if B_ABILITY_POP_UP == TRUE showabilitypopup BS_ABILITY_BATTLER - recordability BS_ABILITY_BATTLER pause 40 .endif + recordability BS_ABILITY_BATTLER sethword sABILITY_OVERWRITE, 0 return diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 5667beb4ac38..19d0b3afb61b 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -5017,10 +5017,17 @@ static void Cmd_jumpifabilitypresent(void) { CMD_ARGS(u16 ability, const u8 *jumpInstr); - if (IsAbilityOnField(cmd->ability)) + u16 ability = cmd->ability; + u32 abilityBattler = IsAbilityOnField(ability); + if (abilityBattler) + { + gBattlerAbility = abilityBattler - 1; gBattlescriptCurrInstr = cmd->jumpInstr; + } else + { gBattlescriptCurrInstr = cmd->nextInstr; + } } static void Cmd_endselectionscript(void) @@ -11183,14 +11190,15 @@ static void Cmd_tryexplosion(void) { CMD_ARGS(); + u32 dampBattler; if (gBattleControllerExecFlags) return; - if ((gBattlerTarget = IsAbilityOnField(ABILITY_DAMP))) + if ((dampBattler = IsAbilityOnField(ABILITY_DAMP))) { // Failed, a battler has Damp gLastUsedAbility = ABILITY_DAMP; - RecordAbilityBattle(--gBattlerTarget, ABILITY_DAMP); + gBattlerTarget = --dampBattler; gBattlescriptCurrInstr = BattleScript_DampStopsExplosion; return; } @@ -11200,14 +11208,6 @@ static void Cmd_tryexplosion(void) BtlController_EmitHealthBarUpdate(BUFFER_A, INSTANT_HP_BAR_DROP); MarkBattlerForControllerExec(gActiveBattler); gBattlescriptCurrInstr = cmd->nextInstr; - - for (gBattlerTarget = 0; gBattlerTarget < gBattlersCount; gBattlerTarget++) - { - if (gBattlerTarget == gBattlerAttacker) - continue; - if (IsBattlerAlive(gBattlerTarget)) - break; - } } static void Cmd_setatkhptozero(void) @@ -16033,6 +16033,17 @@ void BS_CalcMetalBurstDmg(void) } } +void BS_JumpIfMoreThanHalfHP(void) +{ + NATIVE_ARGS(u8 battler, const u8 *jumpInstr); + + u8 battler = GetBattlerForBattleScript(cmd->battler); + if (gBattleMons[battler].hp > (gBattleMons[battler].maxHP + 1) / 2) + gBattlescriptCurrInstr = cmd->jumpInstr; + else + gBattlescriptCurrInstr = cmd->nextInstr; +} + void BS_JumpIfHoldEffect(void) { u8 battler = gBattlescriptCurrInstr[5]; diff --git a/test/ability_damp.c b/test/ability_damp.c index 33d1ae466ac0..c473660f5c74 100644 --- a/test/ability_damp.c +++ b/test/ability_damp.c @@ -19,6 +19,26 @@ SINGLE_BATTLE_TEST("Damp prevents explosion-like moves from enemies") } } +DOUBLE_BATTLE_TEST("Damp prevents explosion-like moves from enemies in a double battle") +{ + u32 move; + PARAMETRIZE { move = MOVE_EXPLOSION; } + PARAMETRIZE { move = MOVE_SELF_DESTRUCT; } + PARAMETRIZE { move = MOVE_MIND_BLOWN; } + PARAMETRIZE { move = MOVE_MISTY_EXPLOSION; } + GIVEN { + PLAYER(SPECIES_PARAS) { Ability(ABILITY_DAMP); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponentLeft, move); } + } SCENE { + ABILITY_POPUP(playerLeft, ABILITY_DAMP); + NONE_OF { HP_BAR(playerLeft); HP_BAR(opponentLeft); HP_BAR(playerRight); HP_BAR(opponentRight); } + } +} + SINGLE_BATTLE_TEST("Damp prevents explosion-like moves from self") { u32 move; diff --git a/test/ability_volt_absorb.c b/test/ability_volt_absorb.c index f485f6557493..bef35e2b4b00 100644 --- a/test/ability_volt_absorb.c +++ b/test/ability_volt_absorb.c @@ -63,6 +63,30 @@ SINGLE_BATTLE_TEST("Volt Absorb is only triggered once on multi strike moves") } } +DOUBLE_BATTLE_TEST("Volt Absorb does not stop Electric Typed Explosion from damaging other pokemon", s16 damage1, s16 damage2) // Fixed issue #1961 +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_EXPLOSION].effect == EFFECT_EXPLOSION); + ASSUME(gBattleMoves[MOVE_EXPLOSION].type == TYPE_NORMAL); + PLAYER(SPECIES_JOLTEON) { Ability(ABILITY_VOLT_ABSORB); HP(1); MaxHP(TEST_MAX_HP); } + PLAYER(SPECIES_ABRA); + OPPONENT(SPECIES_GRAVELER_ALOLAN) { Ability(ABILITY_GALVANIZE); } + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(opponentLeft, MOVE_EXPLOSION); } + } SCENE { + ABILITY_POPUP(playerLeft, ABILITY_VOLT_ABSORB); + HP_BAR(playerLeft, hp: TEST_MAX_HP / 4 + 1); + MESSAGE("Jolteon restored HP using its Volt Absorb!"); + HP_BAR(playerRight, captureDamage: &results->damage1); + HP_BAR(opponentRight, captureDamage: &results->damage2); + } + FINALLY { + EXPECT_NE(results[0].damage1, 0); + EXPECT_NE(results[0].damage2, 0); + } +} + SINGLE_BATTLE_TEST("Volt Absorb prevents Cell Battery from activating") { GIVEN { @@ -75,11 +99,11 @@ SINGLE_BATTLE_TEST("Volt Absorb prevents Cell Battery from activating") ABILITY_POPUP(player, ABILITY_VOLT_ABSORB); HP_BAR(player, hp: TEST_MAX_HP / 4 + 1); MESSAGE("Jolteon restored HP using its Volt Absorb!"); - NONE_OF { + NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Using Cell Battery, the attack of Jolteon rose!"); } - + } } diff --git a/test/move_effect_explosion.c b/test/move_effect_explosion.c index 872f3f709054..41e74044ba2b 100644 --- a/test/move_effect_explosion.c +++ b/test/move_effect_explosion.c @@ -8,7 +8,6 @@ ASSUMPTIONS SINGLE_BATTLE_TEST("Explosion causes the user to faint") { - u16 remainingHP; GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); @@ -17,12 +16,29 @@ SINGLE_BATTLE_TEST("Explosion causes the user to faint") } SCENE { HP_BAR(player, hp: 0); ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, player); + MESSAGE("Wobbuffet fainted!"); + } +} + +SINGLE_BATTLE_TEST("Explosion causes the user & the target to faint") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { HP(1); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_EXPLOSION); } + } SCENE { + HP_BAR(player, hp: 0); + ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, player); + HP_BAR(opponent, hp: 0); + MESSAGE("Foe Wobbuffet fainted!"); + MESSAGE("Wobbuffet fainted!"); } } SINGLE_BATTLE_TEST("Explosion causes the user to faint even if it misses") { - u16 remainingHP; GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); @@ -31,12 +47,12 @@ SINGLE_BATTLE_TEST("Explosion causes the user to faint even if it misses") } SCENE { HP_BAR(player, hp: 0); ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, player); + MESSAGE("Wobbuffet fainted!"); } } SINGLE_BATTLE_TEST("Explosion causes the user to faint even if it has no effect") { - u16 remainingHP; GIVEN { ASSUME(gBattleMoves[MOVE_EXPLOSION].type == TYPE_NORMAL); ASSUME(gSpeciesInfo[SPECIES_GASTLY].types[0] == TYPE_GHOST); @@ -49,5 +65,29 @@ SINGLE_BATTLE_TEST("Explosion causes the user to faint even if it has no effect" ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, player); MESSAGE("It doesn't affect Foe Gastly…"); NOT HP_BAR(opponent); + MESSAGE("Wobbuffet fainted!"); + } +} + +DOUBLE_BATTLE_TEST("Explosion causes everyone to faint in a double battle") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WYNAUT) { HP(1); } + OPPONENT(SPECIES_ABRA) { HP(1); } + OPPONENT(SPECIES_KADABRA) { HP(1); } + OPPONENT(SPECIES_KADABRA); + } WHEN { + TURN { MOVE(playerLeft, MOVE_EXPLOSION); } + } SCENE { + HP_BAR(playerLeft, hp: 0); + ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, playerLeft); + HP_BAR(opponentLeft, hp: 0); + MESSAGE("Foe Abra fainted!"); + HP_BAR(playerRight, hp: 0); + MESSAGE("Wynaut fainted!"); + HP_BAR(opponentRight, hp: 0); + MESSAGE("Foe Kadabra fainted!"); + MESSAGE("Wobbuffet fainted!"); } } diff --git a/test/move_effect_mind_blown.c b/test/move_effect_mind_blown.c new file mode 100644 index 000000000000..6b053cfb5662 --- /dev/null +++ b/test/move_effect_mind_blown.c @@ -0,0 +1,109 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_MIND_BLOWN].effect == EFFECT_MIND_BLOWN); +} + +#define HP_TEST (400) + +SINGLE_BATTLE_TEST("Mind Blown makes the user lose 1/2 of its HP") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { HP(HP_TEST); MaxHP(HP_TEST); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_MIND_BLOWN); } + } SCENE { + HP_BAR(player, hp: HP_TEST / 2); + ANIMATION(ANIM_TYPE_MOVE, MOVE_MIND_BLOWN, player); + NOT MESSAGE("Wobbuffet fainted!"); // Wobb had more than 1/2 of its HP, so it can't faint. + } +} + +DOUBLE_BATTLE_TEST("Mind Blown makes the user lose 1/2 of its HP in a double battle") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { HP(HP_TEST); MaxHP(HP_TEST); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerLeft, MOVE_MIND_BLOWN); } + } SCENE { + HP_BAR(playerLeft, hp: HP_TEST / 2); + ANIMATION(ANIM_TYPE_MOVE, MOVE_MIND_BLOWN, playerLeft); + NOT MESSAGE("Wobbuffet fainted!"); // Wobb had more than 1/2 of its HP, so it can't faint. + } +} + +SINGLE_BATTLE_TEST("Mind Blown causes the user to faint when below 1/2 of its HP") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { HP(HP_TEST / 2); MaxHP(HP_TEST); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_MIND_BLOWN); } + } SCENE { + HP_BAR(player, hp: 0); + ANIMATION(ANIM_TYPE_MOVE, MOVE_MIND_BLOWN, player); + MESSAGE("Wobbuffet fainted!"); + } +} + +DOUBLE_BATTLE_TEST("Mind Blown causes the user to faint when below 1/2 of its HP in a double battle") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { HP(HP_TEST / 2); MaxHP(HP_TEST); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerLeft, MOVE_MIND_BLOWN);} + } SCENE { + HP_BAR(playerLeft, hp: 0); + ANIMATION(ANIM_TYPE_MOVE, MOVE_MIND_BLOWN, playerLeft); + MESSAGE("Wobbuffet fainted!"); + } +} + +SINGLE_BATTLE_TEST("Mind Blown causes the user & the target to faint when below 1/2 of its HP") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { HP(HP_TEST / 2) ; MaxHP(HP_TEST); } + OPPONENT(SPECIES_WOBBUFFET) { HP(1); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_MIND_BLOWN);} + } SCENE { + HP_BAR(player, hp: 0); + ANIMATION(ANIM_TYPE_MOVE, MOVE_MIND_BLOWN, player); + HP_BAR(opponent, hp: 0); + MESSAGE("Foe Wobbuffet fainted!"); + MESSAGE("Wobbuffet fainted!"); + } +} + +DOUBLE_BATTLE_TEST("Mind Blown causes everyone to faint in a double battle") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { HP(HP_TEST / 2); MaxHP(HP_TEST); } + PLAYER(SPECIES_WYNAUT) { HP(1); } + OPPONENT(SPECIES_ABRA) { HP(1); } + OPPONENT(SPECIES_KADABRA) { HP(1); } + OPPONENT(SPECIES_KADABRA); + } WHEN { + TURN { MOVE(playerLeft, MOVE_MIND_BLOWN, criticalHit: FALSE); } + } SCENE { + HP_BAR(playerLeft, hp: 0); + ANIMATION(ANIM_TYPE_MOVE, MOVE_MIND_BLOWN, playerLeft); + HP_BAR(opponentLeft, hp: 0); + MESSAGE("Foe Abra fainted!"); + HP_BAR(playerRight, hp: 0); + MESSAGE("Wynaut fainted!"); + HP_BAR(opponentRight, hp: 0); + MESSAGE("Foe Kadabra fainted!"); + MESSAGE("Wobbuffet fainted!"); + } +} From 54e388a3752e81d6c8137f740097dc68540f5fad Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Wed, 22 Feb 2023 00:30:12 -0300 Subject: [PATCH 077/428] More detailed hydra test results --- test/test_runner.c | 4 +++- tools/mgba-rom-test-hydra/main.c | 29 +++++++++++++++++++++++++++-- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/test/test_runner.c b/test/test_runner.c index 0be163431703..c2d3f66d2502 100644 --- a/test/test_runner.c +++ b/test/test_runner.c @@ -194,8 +194,10 @@ void CB2_TestRunner(void) default: result = "UNKNOWN"; break; } - if (gTestRunnerState.expectedResult == gTestRunnerState.result) + if (gTestRunnerState.result == TEST_RESULT_PASS) MgbaPrintf_(":P%s%s\e[0m", color, result); + else if (gTestRunnerState.expectedResult == gTestRunnerState.result) + MgbaPrintf_(":K%s%s\e[0m", color, result); else MgbaPrintf_(":F%s%s\e[0m", color, result); } diff --git a/tools/mgba-rom-test-hydra/main.c b/tools/mgba-rom-test-hydra/main.c index 4ce9b09bd055..107ca339be7a 100644 --- a/tools/mgba-rom-test-hydra/main.c +++ b/tools/mgba-rom-test-hydra/main.c @@ -9,7 +9,11 @@ * COMMANDS * N: Sets the test name to the remainder of the line. * R: Sets the result to the remainder of the line, and flushes any - * output buffered since the previous R. */ + * output buffered since the previous R. + * + * //Missing P, F and K documentation, please tell me what to put here lol + * + */ #include #include #include @@ -39,6 +43,7 @@ struct Runner size_t output_buffer_capacity; char *output_buffer; int passes; + int knownFails; int results; }; @@ -76,8 +81,11 @@ static void handle_read(struct Runner *runner) case 'P': case 'F': + case 'K': if (soc[1] == 'P') runner->passes++; + else if (soc[1] == 'K') + runner->knownFails++; runner->results++; soc += 2; fprintf(stdout, "%s: ", runner->test_name); @@ -411,6 +419,7 @@ int main(int argc, char *argv[]) // Reap test runners and collate exit codes. int exit_code = 0; int passes = 0; + int knownFails = 0; int results = 0; for (int i = 0; i < nrunners; i++) { @@ -425,9 +434,25 @@ int main(int argc, char *argv[]) if (WIFEXITED(wstatus) && WEXITSTATUS(wstatus) > exit_code) exit_code = WEXITSTATUS(wstatus); passes += runners[i].passes; + knownFails += runners[i].knownFails; results += runners[i].results; } - fprintf(stdout, "%d/%d \e[32mPASS\e[0med\n", passes, results); + + if (results == 0) + { + fprintf(stdout, "\nNo tests found.\n"); + } + else + { + fprintf(stdout, "\n- Tests TOTAL: %d\n", results); + fprintf(stdout, "- Tests \e[32mPASSED: \e[0m %d\n", passes); + if (knownFails > 0) + fprintf(stdout, "- Tests \e[33mKNOWN_FAILING:\e[0m %d\n", knownFails); + if (passes + knownFails < results) + fprintf(stdout, "- Tests \e[31mFAILED: \e[0m %d\n", results - passes - knownFails); + } + fprintf(stdout, "\n"); + fflush(stdout); return exit_code; } From bca47a0891a7e69781425cb7b30d3573dee88aeb Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Wed, 22 Feb 2023 09:17:23 +0100 Subject: [PATCH 078/428] Update src/battle_script_commands.c Co-authored-by: LOuroboros --- src/battle_script_commands.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index ce9ea50f70ac..344c5091bb6f 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -6914,7 +6914,7 @@ bool32 ShouldPostponeSwitchInAbilities(u32 battlerId) { bool32 aliveOpposing1 = IsBattlerAlive(BATTLE_OPPOSITE(battlerId)); bool32 aliveOpposing2 = IsBattlerAlive(BATTLE_PARTNER(BATTLE_OPPOSITE(battlerId))); - // No pokemon on opposing side - postopone. + // No pokemon on opposing side - postpone. if (!aliveOpposing1 && !aliveOpposing2) return TRUE; From 31138455ded2fd6d711777b4ee19cadd5245e1b2 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Wed, 22 Feb 2023 09:28:12 +0100 Subject: [PATCH 079/428] remove unneeded VARIOUS_JUMP_IF_NO_VALID_TARGETS --- asm/macros/battle_script.inc | 5 ----- data/battle_scripts_1.s | 1 - include/constants/battle_script_commands.h | 7 +++---- src/battle_script_commands.c | 16 ---------------- 4 files changed, 3 insertions(+), 26 deletions(-) diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index 7c94f06ffedb..03a4d6222d62 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -2049,11 +2049,6 @@ various \battler, VARIOUS_ACTIVATE_TERRAIN_CHANGE_ABILITIES .endm - .macro jumpifnovalidtargets jumpInstr:req - various BS_ATTACKER, VARIOUS_JUMP_IF_NO_VALID_TARGETS - .4byte \jumpInstr - .endm - @ helpful macros .macro setstatchanger stat:req, stages:req, down:req setbyte sSTATCHANGER, \stat | \stages << 3 | \down << 7 diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 239d22109332..036d662e8e37 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -8573,7 +8573,6 @@ BattleScript_TryAdrenalineOrbRet: return BattleScript_IntimidateActivates:: - jumpifnovalidtargets BattleScript_IntimidateEnd showabilitypopup BS_ATTACKER pause B_WAIT_TIME_LONG destroyabilitypopup diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h index 0b71c22db9e5..9699a29211a1 100644 --- a/include/constants/battle_script_commands.h +++ b/include/constants/battle_script_commands.h @@ -255,10 +255,9 @@ #define VARIOUS_TRY_WIND_RIDER_POWER 163 #define VARIOUS_ACTIVATE_WEATHER_CHANGE_ABILITIES 164 #define VARIOUS_ACTIVATE_TERRAIN_CHANGE_ABILITIES 165 -#define VARIOUS_JUMP_IF_NO_VALID_TARGETS 166 -#define VARIOUS_JUMP_IF_EMERGENCY_EXITED 167 -#define VARIOUS_STORE_HEALING_WISH 168 -#define VARIOUS_HIT_SWITCH_TARGET_FAILED 169 +#define VARIOUS_JUMP_IF_EMERGENCY_EXITED 166 +#define VARIOUS_STORE_HEALING_WISH 167 +#define VARIOUS_HIT_SWITCH_TARGET_FAILED 168 // Cmd_manipulatedamage #define DMG_CHANGE_SIGN 0 diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 344c5091bb6f..e0f0116ffd44 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -11068,22 +11068,6 @@ static void Cmd_various(void) AbilityBattleEffects(ABILITYEFFECT_ON_TERRAIN, gActiveBattler, 0, 0, 0); return; } - case VARIOUS_JUMP_IF_NO_VALID_TARGETS: - { - VARIOUS_ARGS(const u8 *jumpInstr); - u32 count = 0; - - for (i = 0; i < gBattlersCount; i++) - { - if (GetBattlerSide(i) != GetBattlerSide(gBattlerAttacker) && IsBattlerAlive(i)) - count++; - } - if (count == 0) - gBattlescriptCurrInstr = cmd->jumpInstr; - else - gBattlescriptCurrInstr = cmd->nextInstr; - return; - } case VARIOUS_JUMP_IF_EMERGENCY_EXITED: { VARIOUS_ARGS(const u8 *jumpInstr); From 64e26f5c86f202ff9327c7c3a21a02fadbcd6b80 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Wed, 22 Feb 2023 13:11:16 +0100 Subject: [PATCH 080/428] Fix Contrary String on Intimidate --- data/battle_scripts_1.s | 45 ++++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 23 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 8ed23a922dec..fdec43234eeb 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -484,15 +484,13 @@ BattleScript_Teatimevul: moveendcase MOVEEND_CLEAR_BITS goto BattleScript_MoveEnd BattleScript_Teatimesorb: - copybyte gBattlerAbility, gBattlerTarget - call BattleScript_AbilityPopUp + call BattleScript_AbilityPopUpTarget moveendto MOVEEND_NEXT_TARGET jumpifnexttargetvalid BattleScript_TeatimeLoop moveendcase MOVEEND_CLEAR_BITS goto BattleScript_MoveEnd BattleScript_Teatimerod: - copybyte gBattlerAbility, gBattlerTarget - call BattleScript_AbilityPopUp + call BattleScript_AbilityPopUpTarget playstatchangeanimation BS_TARGET, BIT_SPATK, STAT_CHANGE_BY_TWO setstatchanger STAT_SPATK, 1, FALSE statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_TeatimeBuffer @@ -504,8 +502,7 @@ BattleScript_Teatimerod: moveendcase MOVEEND_CLEAR_BITS goto BattleScript_MoveEnd BattleScript_Teatimemotor: - copybyte gBattlerAbility, gBattlerTarget - call BattleScript_AbilityPopUp + call BattleScript_AbilityPopUpTarget playstatchangeanimation BS_TARGET, BIT_SPEED, STAT_CHANGE_BY_TWO setstatchanger STAT_SPEED, 1, FALSE statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_TeatimeBuffer @@ -3386,8 +3383,7 @@ BattleScript_EffectAbsorb:: setbyte cMULTISTRING_CHOOSER, B_MSG_ABSORB goto BattleScript_AbsorbUpdateHp BattleScript_AbsorbLiquidOoze:: - copybyte gBattlerAbility, gBattlerTarget - call BattleScript_AbilityPopUp + call BattleScript_AbilityPopUpTarget manipulatedamage DMG_CHANGE_SIGN setbyte cMULTISTRING_CHOOSER, B_MSG_ABSORB_OOZE BattleScript_AbsorbUpdateHp:: @@ -5505,9 +5501,8 @@ BattleScript_NotAffected:: goto BattleScript_MoveEnd BattleScript_NotAffectedAbilityPopUp:: - copybyte gBattlerAbility, gBattlerTarget pause B_WAIT_TIME_SHORT - call BattleScript_AbilityPopUp + call BattleScript_AbilityPopUpTarget orhalfword gMoveResultFlags, MOVE_RESULT_DOESNT_AFFECT_FOE resultmessage waitmessage B_WAIT_TIME_LONG @@ -5996,8 +5991,7 @@ BattleScript_EffectSkillSwap: attackanimation waitanimation .if B_ABILITY_POP_UP == TRUE - copybyte gBattlerAbility, gBattlerTarget - call BattleScript_AbilityPopUp + call BattleScript_AbilityPopUpTarget pause 20 copybyte gBattlerAbility, gBattlerAttacker call BattleScript_AbilityPopUp @@ -7752,9 +7746,8 @@ BattleScript_EnduredMsg:: return BattleScript_SturdiedMsg:: - copybyte gBattlerAbility, gBattlerTarget pause B_WAIT_TIME_SHORTEST - call BattleScript_AbilityPopUp + call BattleScript_AbilityPopUpTarget printstring STRINGID_ENDUREDSTURDY waitmessage B_WAIT_TIME_LONG return @@ -7895,8 +7888,7 @@ BattleScript_CudChewActivates:: BattleScript_TargetFormChange:: pause 5 - copybyte gBattlerAbility, gBattlerTarget - call BattleScript_AbilityPopUp + call BattleScript_AbilityPopUpTarget printstring STRINGID_EMPTYSTRING3 waitmessage 1 handleformchange BS_TARGET, 0 @@ -7908,8 +7900,7 @@ BattleScript_TargetFormChange:: BattleScript_TargetFormChangeWithString:: pause 5 - copybyte gBattlerAbility, gBattlerTarget - call BattleScript_AbilityPopUp + call BattleScript_AbilityPopUpTarget printstring STRINGID_EMPTYSTRING3 waitmessage 1 handleformchange BS_TARGET, 0 @@ -8372,6 +8363,8 @@ BattleScript_AbilityRaisesDefenderStat:: waitmessage B_WAIT_TIME_LONG return +BattleScript_AbilityPopUpTarget: + copybyte gBattlerAbility, gBattlerTarget BattleScript_AbilityPopUp: .if B_ABILITY_POP_UP == TRUE showabilitypopup BS_ABILITY_BATTLER @@ -8611,9 +8604,10 @@ BattleScript_IntimidateEffect: copybyte sBATTLER, gBattlerAttacker statbuffchange STAT_CHANGE_NOT_PROTECT_AFFECTED | STAT_CHANGE_ALLOW_PTR, BattleScript_IntimidateLoopIncrement setgraphicalstatchangevalues - playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + jumpifability BS_TARGET, ABILITY_CONTRARY, BattleScript_IntimidateContrary printstring STRINGID_PKMNCUTSATTACKWITH waitmessage B_WAIT_TIME_LONG +BattleScript_IntimidateEffect_AfterString: copybyte sBATTLER, gBattlerTarget call BattleScript_TryAdrenalineOrb BattleScript_IntimidateLoopIncrement: @@ -8624,6 +8618,13 @@ BattleScript_IntimidateEnd: pause B_WAIT_TIME_MED end3 +BattleScript_IntimidateContrary: + call BattleScript_AbilityPopUpTarget + playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG + goto BattleScript_IntimidateEffect_AfterString + BattleScript_IntimidatePrevented: call BattleScript_AbilityPopUp pause B_WAIT_TIME_LONG @@ -8637,8 +8638,7 @@ BattleScript_IntimidatePrevented_Item: BattleScript_IntimidateInReverse: copybyte sBATTLER, gBattlerTarget - copybyte gBattlerAbility, gBattlerTarget - call BattleScript_AbilityPopUp + call BattleScript_AbilityPopUpTarget pause B_WAIT_TIME_SHORT modifybattlerstatstage BS_TARGET, STAT_ATK, INCREASE, 1, BattleScript_IntimidateLoopIncrement, ANIM_ON call BattleScript_TryAdrenalineOrb @@ -8881,8 +8881,7 @@ BattleScript_SturdyPreventsOHKO:: BattleScript_DampStopsExplosion:: pause B_WAIT_TIME_SHORT - copybyte gBattlerAbility, gBattlerTarget - call BattleScript_AbilityPopUp + call BattleScript_AbilityPopUpTarget printstring STRINGID_PKMNPREVENTSUSAGE pause B_WAIT_TIME_LONG moveendto MOVEEND_NEXT_TARGET From e0b76e98ff319901d1316ad9305620dbd57d56ed Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Wed, 22 Feb 2023 14:55:34 +0100 Subject: [PATCH 081/428] Add MOVE_SHELL_TRAP Effect (#2716) * implemented Shell Trap Co-authored-by: AgustinGDLV --- asm/macros/battle_script.inc | 5 + data/battle_anim_scripts.s | 144 +++++++++--------- data/battle_scripts_1.s | 18 +++ include/battle.h | 1 + include/battle_scripts.h | 1 + include/constants/battle_move_effects.h | 3 +- include/constants/battle_script_commands.h | 1 + include/constants/battle_string_ids.h | 4 +- src/battle_main.c | 3 + src/battle_message.c | 4 + src/battle_script_commands.c | 87 ++++++++--- src/battle_util.c | 3 +- src/data/battle_moves.h | 2 +- test/move_effect_shell_trap.c | 168 +++++++++++++++++++++ 14 files changed, 344 insertions(+), 100 deletions(-) create mode 100644 test/move_effect_shell_trap.c diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index 5c71cef706ef..66c60a7cf060 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -2249,6 +2249,11 @@ .4byte \jumpInstr .endm + .macro jumpifshelltrap battler:req, ptr:req + various \battler, VARIOUS_JUMP_IF_SHELL_TRAP + .4byte \ptr + .endm + .macro hitswitchtargetfailed various 0, VARIOUS_HIT_SWITCH_TARGET_FAILED .endm diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index 71bd93d70a11..75a831a33132 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -12036,168 +12036,168 @@ ShellTrapUnleash: monbg ANIM_TARGET waitplaysewithpan SE_M_REFLECT, SOUND_PAN_ATTACKER, 0x10 delay 0x6 - launchtemplate gShellTrapYellowImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - launchtemplate gShellTrapYellowImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - launchtemplate gShellTrapYellowImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - launchtemplate gShellTrapYellowImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - launchtemplate gShellTrapYellowImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - launchtemplate gShellTrapYellowImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - launchtemplate gShellTrapYellowImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - launchtemplate gShellTrapYellowImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - launchtemplate gShellTrapYellowImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x0 - launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x0 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x2 - launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x4 - launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x4 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x2 - launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x8 - launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x8 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x2 - launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0xc - launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0xc + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x2 - launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x10 - launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x10 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x2 - launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x14 - launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x14 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x2 - launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x18 - launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x18 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 waitforvisualfinish call ShellTrapFireLaunch1 - launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0x0 0x0 0x0 0x38 0x4 0x4 0x1 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0, 0x38, 0x4, 0x4, 0x1 delay 0x3 - launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0xfff6 0x0 0xfff6 0x38 0x4 0x4 0x1 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xfff6, 0x0, 0xfff6, 0x38, 0x4, 0x4, 0x1 delay 0x3 - launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0xa 0x0 0xa 0x38 0xfffc 0x3 0x1 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xa, 0x0, 0xa, 0x38, 0xfffc, 0x3, 0x1 delay 0x3 - launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0xffec 0x0 0xffec 0x38 0xfffc 0x5 0x1 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xffec, 0x0, 0xffec, 0x38, 0xfffc, 0x5, 0x1 delay 0x3 call ShellTrapFireLaunch2 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 delay 0x3 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 delay 0x3 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 delay 0x3 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 delay 0x3 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 delay 0x3 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 delay 0x3 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 delay 0x3 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 delay 0x3 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 delay 0x3 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 delay 0x3 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 delay 0x3 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 delay 0x3 waitforvisualfinish clearmonbg ANIM_TARGET end ShellTrapFireLaunch1: - launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0x0 0x0 0x0 0x38 0x4 0x4 0x1 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0, 0x38, 0x4, 0x4, 0x1 delay 0x3 - launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0xfff6 0x0 0xfff6 0x38 0x4 0x4 0x1 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xfff6, 0x0, 0xfff6, 0x38, 0x4, 0x4, 0x1 delay 0x3 - launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0xa 0x0 0xa 0x38 0xfffc 0x3 0x1 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xa, 0x0, 0xa, 0x38, 0xfffc, 0x3, 0x1 delay 0x3 - launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0xffec 0x0 0xffec 0x38 0xfffc 0x5 0x1 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xffec, 0x0, 0xffec, 0x38, 0xfffc, 0x5, 0x1 delay 0x3 - launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0xf 0x0 0xf 0x38 0x4 0x4 0x1 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xf, 0x0, 0xf, 0x38, 0x4, 0x4, 0x1 delay 0x3 - launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0xffec 0x0 0xffec 0x38 0x4 0x4 0x1 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xffec, 0x0, 0xffec, 0x38, 0x4, 0x4, 0x1 delay 0x3 - launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0x14 0x0 0x14 0x38 0x4 0x4 0x1 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0x14, 0x0, 0x14, 0x38, 0x4, 0x4, 0x1 delay 0x3 return ShellTrapFireLaunch2: - launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0x0 0x0 0x0 0x38 0x4 0x4 0x1 - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0, 0x38, 0x4, 0x4, 0x1 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x3 - launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0xfff6 0x0 0xfff6 0x38 0x4 0x4 0x1 - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xfff6, 0x0, 0xfff6, 0x38, 0x4, 0x4, 0x1 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x3 - launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0xa 0x0 0xa 0x38 0xfffc 0x3 0x1 - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xa, 0x0, 0xa, 0x38, 0xfffc, 0x3, 0x1 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x3 - launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0xffec 0x0 0xffec 0x38 0xfffc 0x5 0x1 - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xffec, 0x0, 0xffec, 0x38, 0xfffc, 0x5, 0x1 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x3 - launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0xf 0x0 0xf 0x38 0x4 0x4 0x1 - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xf, 0x0, 0xf, 0x38, 0x4, 0x4, 0x1 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x3 - launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0xffec 0x0 0xffec 0x38 0x4 0x4 0x1 - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xffec, 0x0, 0xffec, 0x38, 0x4, 0x4, 0x1 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x3 - launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0x14 0x0 0x14 0x38 0x4 0x4 0x1 - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0x14, 0x0, 0x14, 0x38, 0x4, 0x4, 0x1 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x3 return diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 8ed23a922dec..5bf5f52b0feb 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -417,6 +417,7 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectVictoryDance @ EFFECT_VICTORY_DANCE .4byte BattleScript_EffectTeatime @ EFFECT_TEATIME .4byte BattleScript_EffectAttackUpUserAlly @ EFFECT_ATTACK_UP_USER_ALLY + .4byte BattleScript_EffectShellTrap @ EFFECT_SHELL_TRAP BattleScript_EffectAttackUpUserAlly: jumpifnoally BS_ATTACKER, BattleScript_EffectAttackUp @@ -557,6 +558,23 @@ BattleScript_AffectionBasedStatusHeal_Continue: waitstate end2 +BattleScript_ShellTrapSetUp:: + printstring STRINGID_EMPTYSTRING3 + waitmessage 0x1 + playanimation BS_ATTACKER, B_ANIM_SHELL_TRAP_SETUP, NULL + printstring STRINGID_PREPARESHELLTRAP + waitmessage B_WAIT_TIME_LONG + end2 + +BattleScript_EffectShellTrap:: + attackcanceler + jumpifshelltrap BS_ATTACKER, BattleScript_HitFromAccCheck + jumpifword CMP_COMMON_BITS, gHitMarker, HITMARKER_NO_ATTACKSTRING | HITMARKER_NO_PPDEDUCT, BattleScript_MoveEnd + ppreduce + printstring STRINGID_SHELLTRAPDIDNTWORK + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + BattleScript_EffectSteelBeam:: attackcanceler attackstring diff --git a/include/battle.h b/include/battle.h index e177338234be..48c283ab4e84 100644 --- a/include/battle.h +++ b/include/battle.h @@ -143,6 +143,7 @@ struct ProtectStruct u16 quickDraw:1; u16 beakBlastCharge:1; u16 quash:1; + u16 shellTrap:1; u16 silkTrapped:1; u32 physicalDmg; u32 specialDmg; diff --git a/include/battle_scripts.h b/include/battle_scripts.h index d4e4d4b3ce3e..7904f5dc1fe9 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -453,6 +453,7 @@ extern const u8 BattleScript_BattlerFormChangeWithStringEnd3[]; extern const u8 BattleScript_DampPreventsAftermath[]; extern const u8 BattleScript_HealingWishActivates[]; extern const u8 BattleScript_LunarDanceActivates[]; +extern const u8 BattleScript_ShellTrapSetUp[]; // zmoves extern const u8 BattleScript_ZMoveActivateDamaging[]; diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h index beab881512ea..061271dd56e4 100644 --- a/include/constants/battle_move_effects.h +++ b/include/constants/battle_move_effects.h @@ -398,7 +398,8 @@ #define EFFECT_VICTORY_DANCE 392 #define EFFECT_TEATIME 393 #define EFFECT_ATTACK_UP_USER_ALLY 394 // Howl 8th Gen +#define EFFECT_SHELL_TRAP 395 -#define NUM_BATTLE_MOVE_EFFECTS 395 +#define NUM_BATTLE_MOVE_EFFECTS 396 #endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h index 9699a29211a1..26064bcfb1b8 100644 --- a/include/constants/battle_script_commands.h +++ b/include/constants/battle_script_commands.h @@ -258,6 +258,7 @@ #define VARIOUS_JUMP_IF_EMERGENCY_EXITED 166 #define VARIOUS_STORE_HEALING_WISH 167 #define VARIOUS_HIT_SWITCH_TARGET_FAILED 168 +#define VARIOUS_JUMP_IF_SHELL_TRAP 169 // Cmd_manipulatedamage #define DMG_CHANGE_SIGN 0 diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index 3f8853024f07..e561a9cb98f4 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -639,8 +639,10 @@ #define STRINGID_ABILITYWEAKENEDFSURROUNDINGMONSSTAT 637 #define STRINGID_ATTACKERGAINEDSTRENGTHFROMTHEFALLEN 638 #define STRINGID_PKMNSABILITYPREVENTSABILITY 639 +#define STRINGID_PREPARESHELLTRAP 640 +#define STRINGID_SHELLTRAPDIDNTWORK 641 -#define BATTLESTRINGS_COUNT 640 +#define BATTLESTRINGS_COUNT 642 // This is the string id that gBattleStringsTable starts with. // String ids before this (e.g. STRINGID_INTROMSG) are not in the table, diff --git a/src/battle_main.c b/src/battle_main.c index b23d8af5538c..6588d3c5ee4b 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -4954,6 +4954,9 @@ static void CheckChosenMoveForEffectsBeforeTurnStarts(void) case MOVE_BEAK_BLAST: BattleScriptExecute(BattleScript_BeakBlastSetUp); return; + case MOVE_SHELL_TRAP: + BattleScriptExecute(BattleScript_ShellTrapSetUp); + return; } } } diff --git a/src/battle_message.c b/src/battle_message.c index 2b8005f64b14..ec2527d84634 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -774,6 +774,8 @@ static const u8 sText_StatWasHeightened[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s static const u8 sText_ElectricTerrainActivatedAbility[] = _("The Electric Terrain activated\n{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ABILITY}!"); static const u8 sText_AbilityWeakenedSurroundingMonsStat[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY}\nweakened the {B_BUFF1} of\lall surrounding Pokémon!\p"); static const u8 sText_AttackerGainedStrengthFromTheFallen[] = _("{B_ATK_NAME_WITH_PREFIX} gained strength\nfrom the fallen!"); +static const u8 sText_PrepareShellTrap[] = _("{B_ATK_NAME_WITH_PREFIX} set a shell trap!"); +static const u8 sText_ShellTrapDidntWork[] = _("{B_ATK_NAME_WITH_PREFIX}'s shell trap didn't work!"); const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = { @@ -800,6 +802,8 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_ZMOVEHPTRAP - BATTLESTRINGS_TABLE_START] = sText_ZMoveHpSwitchInTrap, [STRINGID_PLAYERLOSTTOENEMYTRAINER - BATTLESTRINGS_TABLE_START] = sText_PlayerLostToEnemyTrainer, [STRINGID_PLAYERPAIDPRIZEMONEY - BATTLESTRINGS_TABLE_START] = sText_PlayerPaidPrizeMoney, + [STRINGID_SHELLTRAPDIDNTWORK - BATTLESTRINGS_TABLE_START] = sText_ShellTrapDidntWork, + [STRINGID_PREPARESHELLTRAP - BATTLESTRINGS_TABLE_START] = sText_PrepareShellTrap, [STRINGID_COURTCHANGE - BATTLESTRINGS_TABLE_START] = sText_CourtChange, [STRINGID_HEATUPBEAK - BATTLESTRINGS_TABLE_START] = sText_HeatingUpBeak, [STRINGID_METEORBEAMCHARGING - BATTLESTRINGS_TABLE_START] = sText_MeteorBeamCharging, diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 1d6ab5faeb50..3826a4751789 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -350,6 +350,7 @@ static bool32 CriticalCapture(u32 odds); static void BestowItem(u32 battlerAtk, u32 battlerDef); static bool8 IsFinalStrikeEffect(u16 move); static void TryUpdateRoundTurnOrder(void); +static bool32 ChangeOrderTargetAfterAttacker(void); static void Cmd_attackcanceler(void); static void Cmd_accuracycheck(void); @@ -5732,6 +5733,22 @@ static void Cmd_moveend(void) else gBattleStruct->lastMoveFailed &= ~(gBitTable[gBattlerAttacker]); + // Set ShellTrap to activate after the attacker's turn if target was hit by a physical move. + if (gBattleMoves[gChosenMoveByBattler[gBattlerTarget]].effect == EFFECT_SHELL_TRAP + && gBattlerTarget != gBattlerAttacker + && GetBattlerSide(gBattlerTarget) != GetBattlerSide(gBattlerAttacker) + && gProtectStructs[gBattlerTarget].physicalDmg + && gProtectStructs[gBattlerTarget].physicalBattlerId == gBattlerAttacker + && !TestSheerForceFlag(gBattlerAttacker, gCurrentMove)) + { + gProtectStructs[gBattlerTarget].shellTrap = TRUE; + // Change move order in double battles, so the hit mon with shell trap moves immediately after being hit. + if (IsDoubleBattle()) + { + ChangeOrderTargetAfterAttacker(); + } + } + if (gHitMarker & HITMARKER_SWAP_ATTACKER_TARGET) { gActiveBattler = gBattlerAttacker; @@ -6196,6 +6213,7 @@ static void Cmd_moveend(void) gBattleStruct->targetsDone[gBattlerAttacker] = 0; gProtectStructs[gBattlerAttacker].usesBouncedMove = FALSE; gProtectStructs[gBattlerAttacker].targetAffected = FALSE; + gProtectStructs[gBattlerAttacker].shellTrap = FALSE; gBattleStruct->ateBoost[gBattlerAttacker] = 0; gStatuses3[gBattlerAttacker] &= ~STATUS3_ME_FIRST; gSpecialStatuses[gBattlerAttacker].gemBoost = FALSE; @@ -8643,6 +8661,38 @@ static bool32 CanTeleport(u8 battlerId) return TRUE; } +// Return True if the order was changed, and false if the order was not changed(for example because the target would move after the attacker anyway). +static bool32 ChangeOrderTargetAfterAttacker(void) +{ + u32 i; + u8 data[MAX_BATTLERS_COUNT]; + + if (GetBattlerTurnOrderNum(gBattlerAttacker) > GetBattlerTurnOrderNum(gBattlerTarget) + || GetBattlerTurnOrderNum(gBattlerAttacker) + 1 == GetBattlerTurnOrderNum(gBattlerTarget)) + return FALSE; + + for (i = 0; i < gBattlersCount; i++) + data[i] = gBattlerByTurnOrder[i]; + if (GetBattlerTurnOrderNum(gBattlerAttacker) == 0 && GetBattlerTurnOrderNum(gBattlerTarget) == 2) + { + gBattlerByTurnOrder[1] = gBattlerTarget; + gBattlerByTurnOrder[2] = data[1]; + gBattlerByTurnOrder[3] = data[3]; + } + else if (GetBattlerTurnOrderNum(gBattlerAttacker) == 0 && GetBattlerTurnOrderNum(gBattlerTarget) == 3) + { + gBattlerByTurnOrder[1] = gBattlerTarget; + gBattlerByTurnOrder[2] = data[1]; + gBattlerByTurnOrder[3] = data[2]; + } + else // Attacker == 1, Target == 3 + { + gBattlerByTurnOrder[2] = gBattlerTarget; + gBattlerByTurnOrder[3] = data[2]; + } + return TRUE; +} + static void Cmd_various(void) { CMD_ARGS(u8 battler, u8 id); @@ -10010,34 +10060,14 @@ static void Cmd_various(void) case VARIOUS_AFTER_YOU: { VARIOUS_ARGS(const u8 *failInstr); - if (GetBattlerTurnOrderNum(gBattlerAttacker) > GetBattlerTurnOrderNum(gBattlerTarget) - || GetBattlerTurnOrderNum(gBattlerAttacker) + 1 == GetBattlerTurnOrderNum(gBattlerTarget)) + if (ChangeOrderTargetAfterAttacker()) { - gBattlescriptCurrInstr = cmd->failInstr; + gSpecialStatuses[gBattlerTarget].afterYou = 1; + gBattlescriptCurrInstr = cmd->nextInstr; } else { - for (i = 0; i < gBattlersCount; i++) - data[i] = gBattlerByTurnOrder[i]; - if (GetBattlerTurnOrderNum(gBattlerAttacker) == 0 && GetBattlerTurnOrderNum(gBattlerTarget) == 2) - { - gBattlerByTurnOrder[1] = gBattlerTarget; - gBattlerByTurnOrder[2] = data[1]; - gBattlerByTurnOrder[3] = data[3]; - } - else if (GetBattlerTurnOrderNum(gBattlerAttacker) == 0 && GetBattlerTurnOrderNum(gBattlerTarget) == 3) - { - gBattlerByTurnOrder[1] = gBattlerTarget; - gBattlerByTurnOrder[2] = data[1]; - gBattlerByTurnOrder[3] = data[2]; - } - else - { - gBattlerByTurnOrder[2] = gBattlerTarget; - gBattlerByTurnOrder[3] = data[2]; - } - gSpecialStatuses[gBattlerTarget].afterYou = 1; - gBattlescriptCurrInstr = cmd->nextInstr; + gBattlescriptCurrInstr = cmd->failInstr; } return; } @@ -11068,6 +11098,15 @@ static void Cmd_various(void) AbilityBattleEffects(ABILITYEFFECT_ON_WEATHER, gActiveBattler, 0, 0, 0); return; } + case VARIOUS_JUMP_IF_SHELL_TRAP: + { + VARIOUS_ARGS(const u8 *jumpInstr); + if (gProtectStructs[gActiveBattler].shellTrap) + gBattlescriptCurrInstr = cmd->jumpInstr; + else + gBattlescriptCurrInstr = cmd->nextInstr; + return; + } case VARIOUS_ACTIVATE_TERRAIN_CHANGE_ABILITIES: { VARIOUS_ARGS(); diff --git a/src/battle_util.c b/src/battle_util.c index 1855754110c6..ccc7445b5260 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -948,7 +948,8 @@ void HandleAction_ActionFinished(void) u8 battler1 = gBattlerByTurnOrder[i]; u8 battler2 = gBattlerByTurnOrder[j]; - if (gProtectStructs[battler1].quash || gProtectStructs[battler2].quash) + if (gProtectStructs[battler1].quash || gProtectStructs[battler2].quash + || gProtectStructs[battler1].shellTrap || gProtectStructs[battler2].shellTrap) continue; // We recalculate order only for action of the same priority. If any action other than switch/move has been taken, they should diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index bf5414276432..82883fb8c9cc 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -11613,7 +11613,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_SHELL_TRAP] = { - .effect = EFFECT_PLACEHOLDER, // EFFECT_SHELL_TRAP, + .effect = EFFECT_SHELL_TRAP, .power = 150, .type = TYPE_FIRE, .accuracy = 100, diff --git a/test/move_effect_shell_trap.c b/test/move_effect_shell_trap.c new file mode 100644 index 000000000000..27dc4b7f648e --- /dev/null +++ b/test/move_effect_shell_trap.c @@ -0,0 +1,168 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_SHELL_TRAP].effect == EFFECT_SHELL_TRAP); + ASSUME(gBattleMoves[MOVE_TACKLE].split == SPLIT_PHYSICAL); + ASSUME(gBattleMoves[MOVE_WATER_GUN].split == SPLIT_SPECIAL); + ASSUME(gBattleMoves[MOVE_LEER].split == SPLIT_STATUS); +} + +SINGLE_BATTLE_TEST("Shell Trap activates only if hit by a physical move") +{ + u32 move; + bool32 activate; + PARAMETRIZE { move = MOVE_TACKLE; activate = TRUE; } + PARAMETRIZE { move = MOVE_WATER_GUN; activate = FALSE; } + PARAMETRIZE { move = MOVE_LEER; activate = FALSE; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_SHELL_TRAP); MOVE(opponent, move); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SHELL_TRAP_SETUP, player); + MESSAGE("Wobbuffet set a shell trap!"); + ANIMATION(ANIM_TYPE_MOVE, move, opponent); + + if (activate) { + MESSAGE("Wobbuffet used Shell Trap!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SHELL_TRAP, player); + HP_BAR(opponent); + } else { + MESSAGE("Wobbuffet's shell trap didn't work!"); + NONE_OF { + MESSAGE("Wobbuffet used Shell Trap!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SHELL_TRAP, player); + HP_BAR(opponent); + } + } + } +} + +SINGLE_BATTLE_TEST("Shell Trap does not activate if attacker's Sheer Force applied") +{ + u32 move; + bool32 activate; + PARAMETRIZE { move = MOVE_TACKLE; activate = TRUE; } + PARAMETRIZE { move = MOVE_STOMP; activate = FALSE; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_TAUROS) { Ability(ABILITY_SHEER_FORCE); } + } WHEN { + TURN { MOVE(player, MOVE_SHELL_TRAP); MOVE(opponent, move); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SHELL_TRAP_SETUP, player); + MESSAGE("Wobbuffet set a shell trap!"); + ANIMATION(ANIM_TYPE_MOVE, move, opponent); + if (activate) { + MESSAGE("Wobbuffet used Shell Trap!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SHELL_TRAP, player); + HP_BAR(opponent); + } else { + MESSAGE("Wobbuffet's shell trap didn't work!"); + NONE_OF { + MESSAGE("Wobbuffet used Shell Trap!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SHELL_TRAP, player); + HP_BAR(opponent); + } + } + } +} + +SINGLE_BATTLE_TEST("Shell Trap does not activate if battler faints before being able to activate it") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { HP(1); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_SHELL_TRAP); MOVE(opponent, MOVE_TACKLE); SEND_OUT(player, 1); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SHELL_TRAP_SETUP, player); + MESSAGE("Wobbuffet set a shell trap!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + MESSAGE("Wobbuffet fainted!"); + MESSAGE("Go! Wobbuffet!"); + NONE_OF { + MESSAGE("Wobbuffet used Shell Trap!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SHELL_TRAP, player); + HP_BAR(opponent); + } + } +} + +DOUBLE_BATTLE_TEST("Shell Trap activates immediately after being hit on turn 1 and attacks both opponents") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_SHELL_TRAP].target == MOVE_TARGET_BOTH); + PLAYER(SPECIES_WOBBUFFET) { Speed(1); } + PLAYER(SPECIES_WOBBUFFET) { Speed(2); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(5); } + OPPONENT(SPECIES_WYNAUT) { Speed(1); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_SHELL_TRAP); MOVE(opponentLeft, MOVE_TACKLE, target:playerLeft); MOVE(playerRight, MOVE_CELEBRATE); MOVE(opponentRight, MOVE_CELEBRATE); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SHELL_TRAP_SETUP, playerLeft); + MESSAGE("Wobbuffet set a shell trap!"); + MESSAGE("Foe Wobbuffet used Tackle!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentLeft); + MESSAGE("Wobbuffet used Shell Trap!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SHELL_TRAP, playerLeft); + HP_BAR(opponentLeft); + HP_BAR(opponentRight); + MESSAGE("Wobbuffet used Celebrate!"); + MESSAGE("Foe Wynaut used Celebrate!"); + } +} + +DOUBLE_BATTLE_TEST("Shell Trap activates immediately after being hit on turn 2 and attacks both opponents") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_SHELL_TRAP].target == MOVE_TARGET_BOTH); + PLAYER(SPECIES_WOBBUFFET) { Speed(1); } + PLAYER(SPECIES_WOBBUFFET) { Speed(2); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(5); } + OPPONENT(SPECIES_WYNAUT) { Speed(6); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_SHELL_TRAP); MOVE(opponentLeft, MOVE_TACKLE, target:playerLeft); MOVE(playerRight, MOVE_CELEBRATE); MOVE(opponentRight, MOVE_CELEBRATE); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SHELL_TRAP_SETUP, playerLeft); + MESSAGE("Wobbuffet set a shell trap!"); + MESSAGE("Foe Wynaut used Celebrate!"); + MESSAGE("Foe Wobbuffet used Tackle!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentLeft); + MESSAGE("Wobbuffet used Shell Trap!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SHELL_TRAP, playerLeft); + HP_BAR(opponentLeft); + HP_BAR(opponentRight); + MESSAGE("Wobbuffet used Celebrate!"); + } +} + +DOUBLE_BATTLE_TEST("Shell Trap activates immediately after being hit on turn 3 and attacks both opponents") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_SHELL_TRAP].target == MOVE_TARGET_BOTH); + PLAYER(SPECIES_WOBBUFFET) { Speed(1); } + PLAYER(SPECIES_WOBBUFFET) { Speed(7); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(5); } + OPPONENT(SPECIES_WYNAUT) { Speed(6); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_SHELL_TRAP); MOVE(opponentLeft, MOVE_TACKLE, target:playerLeft); MOVE(playerRight, MOVE_CELEBRATE); MOVE(opponentRight, MOVE_CELEBRATE); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SHELL_TRAP_SETUP, playerLeft); + MESSAGE("Wobbuffet set a shell trap!"); + MESSAGE("Wobbuffet used Celebrate!"); + MESSAGE("Foe Wynaut used Celebrate!"); + MESSAGE("Foe Wobbuffet used Tackle!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentLeft); + MESSAGE("Wobbuffet used Shell Trap!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SHELL_TRAP, playerLeft); + HP_BAR(opponentLeft); + HP_BAR(opponentRight); + } +} From 83281944faaedc401de52bf7968cc041378bdf24 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Wed, 22 Feb 2023 16:24:27 +0100 Subject: [PATCH 082/428] Add tests for Contrary --- data/battle_scripts_1.s | 9 ++- test/ability_contrary.c | 143 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 149 insertions(+), 3 deletions(-) create mode 100644 test/ability_contrary.c diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index fdec43234eeb..d78b4cdd948e 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -8606,8 +8606,8 @@ BattleScript_IntimidateEffect: setgraphicalstatchangevalues jumpifability BS_TARGET, ABILITY_CONTRARY, BattleScript_IntimidateContrary printstring STRINGID_PKMNCUTSATTACKWITH +BattleScript_IntimidateEffect_WaitString: waitmessage B_WAIT_TIME_LONG -BattleScript_IntimidateEffect_AfterString: copybyte sBATTLER, gBattlerTarget call BattleScript_TryAdrenalineOrb BattleScript_IntimidateLoopIncrement: @@ -8620,10 +8620,13 @@ BattleScript_IntimidateEnd: BattleScript_IntimidateContrary: call BattleScript_AbilityPopUpTarget + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_IntimidateContrary_WontIncrease playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 printfromtable gStatUpStringIds - waitmessage B_WAIT_TIME_LONG - goto BattleScript_IntimidateEffect_AfterString + goto BattleScript_IntimidateEffect_WaitString +BattleScript_IntimidateContrary_WontIncrease: + printstring STRINGID_TARGETSTATWONTGOHIGHER + goto BattleScript_IntimidateEffect_WaitString BattleScript_IntimidatePrevented: call BattleScript_AbilityPopUp diff --git a/test/ability_contrary.c b/test/ability_contrary.c new file mode 100644 index 000000000000..7fd902280bb4 --- /dev/null +++ b/test/ability_contrary.c @@ -0,0 +1,143 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_TACKLE].split == SPLIT_PHYSICAL); +} + +SINGLE_BATTLE_TEST("Contrary raises Attack when Intimidated", s16 damage) +{ + u32 ability; + PARAMETRIZE { ability = ABILITY_CONTRARY; } + PARAMETRIZE { ability = ABILITY_TANGLED_FEET; } + GIVEN { + PLAYER(SPECIES_MIGHTYENA) { Ability(ABILITY_INTIMIDATE); } + OPPONENT(SPECIES_SPINDA) { Ability(ability); } + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE); } + } SCENE { + ABILITY_POPUP(player, ABILITY_INTIMIDATE); + if (ability == ABILITY_CONTRARY) { + ABILITY_POPUP(opponent, ABILITY_CONTRARY); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Spinda's attack rose!"); + } + HP_BAR(player, captureDamage: &results[i].damage); + } + FINALLY { + EXPECT_MUL_EQ(results[1].damage, Q_4_12(2.125), results[0].damage); + } +} + +SINGLE_BATTLE_TEST("Contrary raises stats after using a move which would normally lower them: Overheat", s16 damageBefore, s16 damageAfter) +{ + u32 ability; + PARAMETRIZE { ability = ABILITY_CONTRARY; } + PARAMETRIZE { ability = ABILITY_TANGLED_FEET; } + GIVEN { + ASSUME(gBattleMoves[MOVE_OVERHEAT].effect == EFFECT_OVERHEAT); + ASSUME(gBattleMoves[MOVE_OVERHEAT].split == SPLIT_SPECIAL); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_SPINDA) { Ability(ability); } + } WHEN { + TURN { MOVE(opponent, MOVE_OVERHEAT); } + TURN { MOVE(opponent, MOVE_OVERHEAT); } + } SCENE { + MESSAGE("Foe Spinda used Overheat!"); + HP_BAR(player, captureDamage: &results[i].damageBefore); + if (ability == ABILITY_CONTRARY) { + // ABILITY_POPUP(opponent, ABILITY_CONTRARY); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Spinda's sp. attack sharply rose!"); + } + else { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Spinda's sp. attack harshly fell!"); + } + + // MESSAGE("Foe Spinda used Overheat!"); + HP_BAR(player, captureDamage: &results[i].damageAfter); + if (ability == ABILITY_CONTRARY) { + // ABILITY_POPUP(opponent, ABILITY_CONTRARY); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Spinda's sp. attack sharply rose!"); + } + else { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Spinda's sp. attack harshly fell!"); + } + } + FINALLY { + EXPECT_MUL_EQ(results[0].damageBefore, Q_4_12(2.0), results[0].damageAfter); + EXPECT_MUL_EQ(results[1].damageBefore, Q_4_12(0.5), results[1].damageAfter); + } +} + +SINGLE_BATTLE_TEST("Contrary lowers a stat after using a move which would normally raise it: Swords Dance", s16 damageBefore, s16 damageAfter) +{ + u32 ability; + PARAMETRIZE { ability = ABILITY_CONTRARY; } + PARAMETRIZE { ability = ABILITY_TANGLED_FEET; } + GIVEN { + ASSUME(gBattleMoves[MOVE_SWORDS_DANCE].effect == EFFECT_ATTACK_UP_2); + PLAYER(SPECIES_WOBBUFFET) {Defense(102); } + OPPONENT(SPECIES_SPINDA) { Ability(ability); Attack(100); } + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE); } + TURN { MOVE(opponent, MOVE_SWORDS_DANCE); } + TURN { MOVE(opponent, MOVE_TACKLE); } + } SCENE { + MESSAGE("Foe Spinda used Tackle!"); + HP_BAR(player, captureDamage: &results[i].damageBefore); + + //MESSAGE("Foe Spinda used Swords Dance!"); + if (ability == ABILITY_CONTRARY) { + // ABILITY_POPUP(opponent, ABILITY_CONTRARY); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Spinda's attack harshly fell!"); + } + else { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Spinda's attack sharply rose!"); + } + + // MESSAGE("Foe Spinda used Tackle!"); + HP_BAR(player, captureDamage: &results[i].damageAfter); + } + FINALLY { + EXPECT_MUL_EQ(results[0].damageBefore, Q_4_12(0.5), results[0].damageAfter); + EXPECT_MUL_EQ(results[1].damageBefore, Q_4_12(2.0), results[1].damageAfter); + } +} + +SINGLE_BATTLE_TEST("Contrary raises a stat after using a move which would normally lower it: Growl", s16 damage) +{ + u32 ability; + PARAMETRIZE { ability = ABILITY_CONTRARY; } + PARAMETRIZE { ability = ABILITY_TANGLED_FEET; } + GIVEN { + ASSUME(gBattleMoves[MOVE_GROWL].effect == EFFECT_ATTACK_DOWN); + PLAYER(SPECIES_WOBBUFFET) {Speed(3); } + OPPONENT(SPECIES_SPINDA) { Ability(ability); Speed(2); } + } WHEN { + TURN { MOVE(player, MOVE_GROWL); MOVE(opponent, MOVE_TACKLE); } + } SCENE { + MESSAGE("Wobbuffet used Growl!"); + if (ability == ABILITY_CONTRARY) { + // ABILITY_POPUP(opponent, ABILITY_CONTRARY); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Spinda's attack rose!"); + } + else { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Spinda's attack fell!"); + } + + MESSAGE("Foe Spinda used Tackle!"); + HP_BAR(player, captureDamage: &results[i].damage); + } + FINALLY { + EXPECT_MUL_EQ(results[1].damage, Q_4_12(2.125), results[0].damage); + } +} From 5808e82434ab03d10396485028398f618858eac6 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Wed, 22 Feb 2023 15:05:39 -0300 Subject: [PATCH 083/428] Added assumption fail total, made fails into their own counter and changed "SKIP" to "ASSUMPTION_FAIIL" in log --- test/test_runner.c | 7 ++++++- tools/mgba-rom-test-hydra/main.c | 31 ++++++++++++++++++++++--------- 2 files changed, 28 insertions(+), 10 deletions(-) diff --git a/test/test_runner.c b/test/test_runner.c index c2d3f66d2502..eb5d12c77893 100644 --- a/test/test_runner.c +++ b/test/test_runner.c @@ -187,7 +187,10 @@ void CB2_TestRunner(void) } break; case TEST_RESULT_PASS: result = "PASS"; break; - case TEST_RESULT_SKIP: result = "SKIP"; break; + case TEST_RESULT_SKIP: + result = "ASSUMPTION_FAIL"; + color = "\e[33m"; + break; case TEST_RESULT_INVALID: result = "INVALID"; break; case TEST_RESULT_ERROR: result = "ERROR"; break; case TEST_RESULT_TIMEOUT: result = "TIMEOUT"; break; @@ -196,6 +199,8 @@ void CB2_TestRunner(void) if (gTestRunnerState.result == TEST_RESULT_PASS) MgbaPrintf_(":P%s%s\e[0m", color, result); + else if (gTestRunnerState.result == TEST_RESULT_SKIP) + MgbaPrintf_(":A%s%s\e[0m", color, result); else if (gTestRunnerState.expectedResult == gTestRunnerState.result) MgbaPrintf_(":K%s%s\e[0m", color, result); else diff --git a/tools/mgba-rom-test-hydra/main.c b/tools/mgba-rom-test-hydra/main.c index 107ca339be7a..75c705f17758 100644 --- a/tools/mgba-rom-test-hydra/main.c +++ b/tools/mgba-rom-test-hydra/main.c @@ -44,6 +44,8 @@ struct Runner char *output_buffer; int passes; int knownFails; + int assumptionFails; + int fails; int results; }; @@ -80,12 +82,17 @@ static void handle_read(struct Runner *runner) break; case 'P': - case 'F': + runner->passes++; + goto add_to_results; case 'K': - if (soc[1] == 'P') - runner->passes++; - else if (soc[1] == 'K') - runner->knownFails++; + runner->knownFails++; + goto add_to_results; + case 'A': + runner->assumptionFails++; + goto add_to_results; + case 'F': + runner->fails++; +add_to_results: runner->results++; soc += 2; fprintf(stdout, "%s: ", runner->test_name); @@ -420,6 +427,8 @@ int main(int argc, char *argv[]) int exit_code = 0; int passes = 0; int knownFails = 0; + int assumptionFails = 0; + int fails = 0; int results = 0; for (int i = 0; i < nrunners; i++) { @@ -435,6 +444,8 @@ int main(int argc, char *argv[]) exit_code = WEXITSTATUS(wstatus); passes += runners[i].passes; knownFails += runners[i].knownFails; + assumptionFails += runners[i].assumptionFails; + fails += runners[i].fails; results += runners[i].results; } @@ -445,11 +456,13 @@ int main(int argc, char *argv[]) else { fprintf(stdout, "\n- Tests TOTAL: %d\n", results); - fprintf(stdout, "- Tests \e[32mPASSED: \e[0m %d\n", passes); + fprintf(stdout, "- Tests \e[32mPASSED\e[0m: %d\n", passes); if (knownFails > 0) - fprintf(stdout, "- Tests \e[33mKNOWN_FAILING:\e[0m %d\n", knownFails); - if (passes + knownFails < results) - fprintf(stdout, "- Tests \e[31mFAILED: \e[0m %d\n", results - passes - knownFails); + fprintf(stdout, "- Tests \e[33mKNOWN_FAILING\e[0m: %d\n", knownFails); + if (fails > 0) + fprintf(stdout, "- Tests \e[31mFAILED\e[0m : %d\n", fails); + if (assumptionFails > 0) + fprintf(stdout, "- \e[33mASSUMPTIONS_FAILED\e[0m: %d\n", assumptionFails); } fprintf(stdout, "\n"); From e3ed11475457999e828349eb499b3fa0ae25405a Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Wed, 22 Feb 2023 15:09:47 -0300 Subject: [PATCH 084/428] Updated commands comment --- tools/mgba-rom-test-hydra/main.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/mgba-rom-test-hydra/main.c b/tools/mgba-rom-test-hydra/main.c index 75c705f17758..f506d0428d31 100644 --- a/tools/mgba-rom-test-hydra/main.c +++ b/tools/mgba-rom-test-hydra/main.c @@ -10,9 +10,9 @@ * N: Sets the test name to the remainder of the line. * R: Sets the result to the remainder of the line, and flushes any * output buffered since the previous R. - * - * //Missing P, F and K documentation, please tell me what to put here lol - * + * P/K/F/A: Sets the result to the remaining of the line, flushes any + * output since the previous P/K/F/A and increment the number of + * passes/known fails/assumption fails/fails. */ #include #include From 460dceb48b480bead43c13ae2d9d9f68e4c791a6 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Wed, 22 Feb 2023 19:20:18 +0100 Subject: [PATCH 085/428] fix intimidate derp --- data/battle_scripts_1.s | 1 + 1 file changed, 1 insertion(+) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index d78b4cdd948e..a5ed319a0114 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -8605,6 +8605,7 @@ BattleScript_IntimidateEffect: statbuffchange STAT_CHANGE_NOT_PROTECT_AFFECTED | STAT_CHANGE_ALLOW_PTR, BattleScript_IntimidateLoopIncrement setgraphicalstatchangevalues jumpifability BS_TARGET, ABILITY_CONTRARY, BattleScript_IntimidateContrary + playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 printstring STRINGID_PKMNCUTSATTACKWITH BattleScript_IntimidateEffect_WaitString: waitmessage B_WAIT_TIME_LONG From 1f694ae7ed851e821c1b981af7aca81aa619cfbe Mon Sep 17 00:00:00 2001 From: Alex Date: Wed, 22 Feb 2023 20:41:01 +0100 Subject: [PATCH 086/428] missing pla sprites --- graphics/pokemon/basculegion/back.png | Bin 0 -> 625 bytes graphics/pokemon/basculegion/front.png | Bin 0 -> 960 bytes graphics/pokemon/basculegion/normal.pal | 19 +++++++ graphics/pokemon/basculegion/shiny.pal | 19 +++++++ graphics/pokemon/decidueye/hisuian/back.png | Bin 0 -> 850 bytes graphics/pokemon/decidueye/hisuian/front.png | Bin 0 -> 966 bytes graphics/pokemon/decidueye/hisuian/icon.png | Bin graphics/pokemon/decidueye/hisuian/normal.pal | 19 +++++++ graphics/pokemon/decidueye/hisuian/shiny.pal | 19 +++++++ graphics/pokemon/enamorus/back.png | Bin 0 -> 841 bytes graphics/pokemon/enamorus/front.png | Bin 0 -> 896 bytes graphics/pokemon/enamorus/normal.pal | 19 +++++++ graphics/pokemon/enamorus/shiny.pal | 19 +++++++ graphics/pokemon/enamorus/therian/back.png | Bin 0 -> 844 bytes graphics/pokemon/enamorus/therian/front.png | Bin 0 -> 999 bytes graphics/pokemon/enamorus/therian/normal.pal | 19 +++++++ graphics/pokemon/enamorus/therian/shiny.pal | 19 +++++++ graphics/pokemon/samurott/hisuian/back.png | Bin 0 -> 912 bytes graphics/pokemon/samurott/hisuian/front.png | Bin 0 -> 930 bytes graphics/pokemon/samurott/hisuian/normal.pal | 19 +++++++ graphics/pokemon/samurott/hisuian/shiny.pal | 19 +++++++ graphics/pokemon/samurott/shiny.pal | 0 graphics/pokemon/sneasler/back.png | Bin 0 -> 821 bytes graphics/pokemon/sneasler/front.png | Bin 0 -> 913 bytes graphics/pokemon/sneasler/normal.pal | 19 +++++++ graphics/pokemon/sneasler/shiny.pal | 19 +++++++ graphics/pokemon/wyrdeer/back.png | Bin 0 -> 854 bytes graphics/pokemon/wyrdeer/front.png | Bin 0 -> 1094 bytes graphics/pokemon/wyrdeer/normal.pal | 19 +++++++ graphics/pokemon/wyrdeer/shiny.pal | 19 +++++++ include/graphics.h | 48 +++++++++--------- src/battle_ai_util.c | 2 +- src/data/graphics/pokemon.h | 48 +++++++++--------- src/data/pokemon_graphics/back_pic_table.h | 12 ++--- src/data/pokemon_graphics/front_pic_table.h | 12 ++--- src/data/pokemon_graphics/palette_table.h | 12 ++--- .../pokemon_graphics/shiny_palette_table.h | 14 ++--- src/data/trainer_parties.h | 2 +- 38 files changed, 341 insertions(+), 75 deletions(-) create mode 100755 graphics/pokemon/basculegion/back.png create mode 100755 graphics/pokemon/basculegion/front.png create mode 100755 graphics/pokemon/basculegion/normal.pal create mode 100755 graphics/pokemon/basculegion/shiny.pal create mode 100755 graphics/pokemon/decidueye/hisuian/back.png create mode 100755 graphics/pokemon/decidueye/hisuian/front.png mode change 100644 => 100755 graphics/pokemon/decidueye/hisuian/icon.png create mode 100755 graphics/pokemon/decidueye/hisuian/normal.pal create mode 100755 graphics/pokemon/decidueye/hisuian/shiny.pal create mode 100755 graphics/pokemon/enamorus/back.png create mode 100755 graphics/pokemon/enamorus/front.png create mode 100755 graphics/pokemon/enamorus/normal.pal create mode 100644 graphics/pokemon/enamorus/shiny.pal create mode 100755 graphics/pokemon/enamorus/therian/back.png create mode 100755 graphics/pokemon/enamorus/therian/front.png create mode 100755 graphics/pokemon/enamorus/therian/normal.pal create mode 100644 graphics/pokemon/enamorus/therian/shiny.pal create mode 100755 graphics/pokemon/samurott/hisuian/back.png create mode 100755 graphics/pokemon/samurott/hisuian/front.png create mode 100755 graphics/pokemon/samurott/hisuian/normal.pal create mode 100755 graphics/pokemon/samurott/hisuian/shiny.pal mode change 100644 => 100755 graphics/pokemon/samurott/shiny.pal create mode 100755 graphics/pokemon/sneasler/back.png create mode 100755 graphics/pokemon/sneasler/front.png create mode 100755 graphics/pokemon/sneasler/normal.pal create mode 100755 graphics/pokemon/sneasler/shiny.pal create mode 100755 graphics/pokemon/wyrdeer/back.png create mode 100755 graphics/pokemon/wyrdeer/front.png create mode 100755 graphics/pokemon/wyrdeer/normal.pal create mode 100755 graphics/pokemon/wyrdeer/shiny.pal diff --git a/graphics/pokemon/basculegion/back.png b/graphics/pokemon/basculegion/back.png new file mode 100755 index 0000000000000000000000000000000000000000..cb4e0c0883e7391e103718b619a7d7c593117371 GIT binary patch literal 625 zcmV-%0*?KOP)D7 z5hx!8maw4!000+sMObuGZ)S9NVRB^vM@&RePDdbiWpW@hE;Mn4q~QPn00?w&PDe*f zL^A*Y002sWDIWj;00d`2O+f$vv5yPxq@WN$AP^7` zco-P?q{v`ADB$GaKu}O1FgPG!IQUR_U|?W4R7k7>n$iFO00Cl4M?{!*(FQ&M00EUr zL_t(|ob8f5OT$nUhJ#Qjbvng>LkB&y5Tu#9*y2zrF5-|PS*kxqoi4Nm!6^kHw021r z>1Y-!?IM{nb-Dk=bM8%B`+b+{=&!+hmp$rHkOFi z6I$KqBjAjq4Sc{?#eGmI?us&*?dPhfCFs}{hz}VG zF{-@@5pVAx&h#w8?|M?ciJ`f}RYF<4_Fl^|fU}?5SZaCR1t_7g!vjnJX03ApVEQEZ zDR-BAB2Ve=tS=wU&NB%OZRCR00vZ5NwB^ENP^b@-&{;3w0dP!$qXp03T|ff%6D`!d zfp6qKHWvWcBB?k9EqDXtZZ$wJAVDS-*LAeujn@NGj#8rQ-hWbi76!jx0a0XbxouEF zos7o1VUa0u?72{Kj9fj#PyoxQGy|rEwMh00000 LNkvXXu0mjfr*!_m literal 0 HcmV?d00001 diff --git a/graphics/pokemon/basculegion/front.png b/graphics/pokemon/basculegion/front.png new file mode 100755 index 0000000000000000000000000000000000000000..4d46e3cbc637fe4110e0a8df7495e2d4da6db96a GIT binary patch literal 960 zcmV;x13&zUP)D7 z5hw_TMKxvs000+sMObuGZ)S9NVRB^vM@&RePDdbiWpW@hE;Mn4q~QPn00?w&PDe*f zL^A*Y002sWDIWj;00d`2O+f$vv5yPxq@WN$AP^7` zco-P?q{v`ADB$GaKu}O1FgPG!IQUR_U|?W4R7k7>n$iFO00Cl4M@0Xn2lB-L00QJm zL_t(|ob8f7Yui8=#*b2qK#AcBHWci^2hx&i5(#7p1k$a89Op_5k#R(=4&jz8ojL}* z2M4rd=#W8>FW^8S!S19&eIS)UUoaR$y#)FV`krF>kDM>i(i_B~=l8zPd(Ryq|JUET z@^-rO)MtGKn52LPO|40Oe9t!U?Qsgk!hQ;9bjbJ-0I<;_LrnZhC%>6&g&CBhu)1_U<8!=w6srTA~P)!%#$F&9ZhK;POP+YcF_&fAA)g=!Do5%4dEWVGl&NRG7I?Zaw_4Z>dCMsQ;?rOH$KMfy-qBQscLnRlkv>TTfan11%L* z$G0Lx3qumJ i|3ux=daCh1wf+FDY-@nhW|Kq!0000AP_kztSKoVgJKw3K`ALQtcz+&N?L(z#+|?v~PqJf6vfZUe5(U5Cz4z|vOvry;JO2W^n`CQs zRM{lEMWwg~6p3Ec*MZVD-{-4=vR&EdoNunF0Q<}9Kv^wwRn=DapqEuu-C74Yr1-o# zPL%8C*A}gxuZq`SQp=*RYG_ z-doli;k&S$9B8@16aY*C%XNcnih?WV%NK6j&L)6QAqD=0hbi2amQK*dC=;R~gvXFM z8GxU8u$v087lWXY0;YJJ><$5haWO9qJQGu6(CdUrvQ!OIGcmQ-=`j3_aSBjkQi!p= z4*VbpS*8Y|O6Xw<+UYoxAYU6n2JN17UMBcr0vl z324RuqAm-ZAa@K!*a?6ryv=36HU2w<1x$tK65Qh=QLZvI^f6mKGy?b{uDSq zrL?sQm@vy{Qp$0z#s-UfWFo-0l)0BZZXMfku{6~R*0h8bcL?0!gtG)%rN@ZWk3$9W8oW;N~3=igLI9FtW=@ub1+ICc#MS_lX*lM(^01;F?q;6130PZb|yyM1#mCtDW*j> zh6{li97eYf;3+1M`jLcb%`-*O+vq$22A*K_=ScQT3(d-?ULPkwkt5hxK~SA`8F%{b c{$3;GFKMiIKa1T==l}o!07*qoM6N<$f(o5<0RR91 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/decidueye/hisuian/front.png b/graphics/pokemon/decidueye/hisuian/front.png new file mode 100755 index 0000000000000000000000000000000000000000..f3c4d93af1fb2cf6727504961a4dc89d3626f676 GIT binary patch literal 966 zcmV;%13CPOP)(*zQ0S&1zE4{XN3gbrLI-aRw9BKRnGOyw$H6To6c3rg={~v5Rq>PkN5=2z`@R47 zJ-tu1rWJJMigs07ph~M%Y14&(Z+PA!z`gI9WKoXI;Lak0Z$i|g`SEZwKt1^J@tkhWoMu0-j#e-5{8G+@gMV$6aGQ`6-_&Gqp0$Tylex~)?8Kf@q-b|Mee-aiwt+3j{8pv8%ll6{)ZAa9DFHm-LN z*pHsxmWTIdfkUy^F+CdC0O<;o^7f3y+55pBeZo1lAfeK~E9KFJcqZR2LE5jat>bgp z$Msl7(c&`B1@!tp%bP!Wic>j0`cwoyyvL=KF>K8wx4;w^l7w3#fkA__9sJ%!;DeNB z1wcQQLV(rqnTtT5j^)u;^cSyRuvi7!PS{l zC;@X23}=+DF}G$g1aL~U3vwoUMryp~@j7c~=2fNd@m-;s$vxBS*Er>5HvWa;+_Td< z=WFwRO)+NUp&~a2FtH=j-Ivt`fTyQBDRSjSi$Bx`C9g0EnCq^b0fXKke6dqqr{Z>i_@%07*qoM6N<$f@P=AI{*Lx literal 0 HcmV?d00001 diff --git a/graphics/pokemon/decidueye/hisuian/icon.png b/graphics/pokemon/decidueye/hisuian/icon.png old mode 100644 new mode 100755 diff --git a/graphics/pokemon/decidueye/hisuian/normal.pal b/graphics/pokemon/decidueye/hisuian/normal.pal new file mode 100755 index 000000000000..a5a61bafe07e --- /dev/null +++ b/graphics/pokemon/decidueye/hisuian/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +156 213 164 +115 106 106 +16 16 16 +238 238 238 +189 189 189 +238 156 57 +65 41 32 +106 24 41 +189 106 41 +205 49 41 +148 32 41 +41 41 49 +213 148 98 +74 74 90 +172 106 74 +115 65 57 diff --git a/graphics/pokemon/decidueye/hisuian/shiny.pal b/graphics/pokemon/decidueye/hisuian/shiny.pal new file mode 100755 index 000000000000..5dd5e9e8f60b --- /dev/null +++ b/graphics/pokemon/decidueye/hisuian/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +156 213 164 +115 106 106 +16 16 16 +238 238 238 +189 189 189 +238 82 57 +65 41 32 +16 57 41 +172 41 41 +32 131 98 +24 90 65 +41 41 49 +172 139 106 +74 74 90 +131 106 90 +90 65 57 diff --git a/graphics/pokemon/enamorus/back.png b/graphics/pokemon/enamorus/back.png new file mode 100755 index 0000000000000000000000000000000000000000..1b2b00e218f9f00d05f649ab21fd56845f8afffc GIT binary patch literal 841 zcmV-P1GfB$P)D7 z5D71?693r%000+sMObuGZ)S9NVRB^vM@&RePDdbiWpW@hE;Mn4q~QPn00?w&PDe*f zL^A*Y002sWDIWj;00d`2O+f$vv5yP^3p!LMeSoHyF@vN&frW4IVDB0G0ScK7DR}525QO_4 z3Iyb#1qBMe50!T(xg^%RJmX0}|L?t%eDb`pz&GEy=c-vE<})F#o#49=SA`J56){WV zLM&20iCuut84ofqZ~?|M3ySm|5a;iLFL}s9bPj+&-DVyzSAfTw0(Qv21uE5W*swGY z9RW%yh#?0dXi*`kAqZo$m!EEFuq*RL3nb2zhi(VfY~TG1KE8g zfbTal;AYCt^6?`v#$m6TVH>30kRUR*GsX-A#1h^rGPfh=L8_lU3g8?y_5lS35SQ&7 z^#Rvu0E+~yQp-Iq<45W)qrfVxYD}ncoQI!Oz#(cXA0I13G{E=%BXnRH;5G4#tfRwUyG+_YnP_{%D27Cb4nUf51;`M2|C!Z)UPYK5#x7p~`k+7p Txv2ET00000NkvXXu0mjfD7 z4i6~@lXDON000+sMObuGZ)S9NVRB^vM@&RePDdbiWpW@hE;Mn4q~QPn00?w&PDe*f zL^A*Y002sWDIWj;00d`2O+f$vv5yPS6X|3#AjbR$egk)H1r>g`@nkuc-k0~z=hGcR|1&hpyt^s#F7@Qi zR|!llY+}z63@#uN3!Y~pysQEy()?%gp#}n-nhzv+qy)aX;QGF6Vg*2fsf%HH$X1L2 z1r7?4Uem~u0_emNv!vNXIa2|#UC$vpNTjEoLDfI++$@42+r zVeAkt5f9?Q8LcuALm+Lm;*4PBe?sxZ7w_fh?MF^nHIEe=- zUhW@N`ZXZ0RWFi@B(qoAVSNz>S(aVRPgh#T2<)Ieo@d$jIj*7|7@(&=v#aMnM1hZE zr~}eowC7)6Wlvf=qY(^#HP61KSJ7}|40k}KA*CzV$6Ng|{3SHL_>SaJ=Phr*1?s#X zMOK-8;NS=(uvm|m*-;73BZJGY#MpsqJ#`MFqY8hxZLtGbtT8K!qW7}PF$mUsT;y1V zmk(iJSQ7Mjf3&TbDDj?Rwec`qSAd=HCT97kngZl+CX>(kY%_;}kza32CX;+N+?;_x z&!Zc#-rk+UEncSWgb(sYnkdGgr?ccTNp~+pIFC?cmZr&h+E(R}EBg99Wd{rWnHXeCmU{lxE`4696|?sSj=F*rSwIzBF-F{1T^FfXeXbZ9u@Kf5Qg= z#`gdrwF0o|y%N4ttPl|5-fL0ZZ3VbXQX*QYfPVuB1awEXAfmdcPnJSdn5%%?g#^SY z9&LZXZHRtW0od}dw|SSY{#!y1NGLAiNM@6gUO2h*P+kG46Ok2%ieljj6Drpv7{3AU W4&fabTMu^t0000 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/enamorus/normal.pal b/graphics/pokemon/enamorus/normal.pal new file mode 100755 index 000000000000..08f6e5ebf1a9 --- /dev/null +++ b/graphics/pokemon/enamorus/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +74 74 74 +180 180 189 +252 252 252 +16 16 16 +118 50 58 +147 33 30 +224 116 156 +243 46 46 +174 74 87 +199 46 41 +243 84 143 +187 62 94 +255 197 60 +239 228 176 +0 0 0 diff --git a/graphics/pokemon/enamorus/shiny.pal b/graphics/pokemon/enamorus/shiny.pal new file mode 100644 index 000000000000..180ae687e5ac --- /dev/null +++ b/graphics/pokemon/enamorus/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +74 74 74 +180 180 189 +255 255 255 +0 0 0 +131 57 82 +164 24 24 +230 131 164 +255 90 0 +189 82 106 +222 74 41 +255 139 238 +205 98 189 +255 197 32 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/enamorus/therian/back.png b/graphics/pokemon/enamorus/therian/back.png new file mode 100755 index 0000000000000000000000000000000000000000..8ef80407f583e2838b0e46e9a2e69fd4503d1f6d GIT binary patch literal 844 zcmV-S1GD^zP)D7 z4izI;Yhcv?000+sMObuGZ)S9NVRB^vM@&RePDdbiWpW@hE;Mn4q~QPn00?w&PDe*f zL^A*Y002sWDIWj;00d`2O+f$vv5yPgqq$|2WS||<0Ds*Ulsl zWQCOX-n4*Gem?Hu=)jXa#Y7#D`-WBEqxa*n_oxGepBuA~wnSJ2o(x~N_JJ5uTE-?xFN6G-_X#l2*6*#*Dq!Lbg2>0Sq5BlT9xcN)r}+yz!C zLO3a9~i8-U|A0|r~M0YaTY zC$38{1o{RbirpF3B}5T&t#!#)NOwUsuQk_Dk*vv9rVY?_q#UQp5=T|11?UDyN2e>J zv#d&0LYfA6(`(w~Bd#}s>(XX?-Ug1gKTW#PV7*a-9^&meC2qYGn}$$2UGF5Ngd;%L z)Z!`K2Gp$pb?g%C*WM=RD7 z4h{t@P%g3n000+sMObuGZ)S9NVRB^vM@&RePDdbiWpW@hE;Mn4q~QPn00?w&PDe*f zL^A*Y002sWDIWj;00d`2O+f$vv5yP0PS4v7s z^DZv@{QR`Ey^|px^Hh(=E-AY{UjM~B@8qxm006*=;>-X500Cl4M@0Xn2lB-L00Rq2 zL_t(|oVC@xYui8+0Pr(Hq~59|ZK3s25$_6Drw+}OD!Uu|EK#zhKCqjip@{R?VuX%P zDFIRADHs=eWG)1E2_Y^xw{nzkga>uXu@ zoUZE|Mg~{~P+SJ;huIa1Gy^ERw*f-nQ3(Oji#3u0gt3asobY0c)N6amCLv}yD}cfj z^p%ED3RF~Qg+u`1&F85OEJ$t*5sCq-!0+mX^33IqH0hGXI5U?6XZJ-yr{ur`ryP%RF-|DgtXDZCqb)s)*8pg>kx=kvCxZju@ z1)@)!c{i5e^%rseQ}k&q025K9wb*jykNolXUqWmJp*n5s2cS`%gPiD%e*h>kLiWN8 z!N)CCrr@Cv134C-`;0M6tLCIc!z{bA1VVT(g&4J-daPYyPfW58J(xDH%o3b?j*zl- z<}qfmwg;7DlZzi^WDes)6yQgn-N(Vk$;m?p&lrbR*5R6ofaYJEFdy%)E6r!mBBe z8-Bx4TY>0cSq8czjTn&jG`$NE04|ntek5+>RaifGs@@C%bYu(^U`od*bIjr1*%^Kn z0~dB+Ee0+X11T7lI}&dfMpX0-Wr*i3(4(vHm4Yva7r(~<(6in!2IfC}y@kua?$IZz#%gfJp3Ez8UcV;Gmxh-U|=Nz#_a2tZ#HS-%UTel#I^5tlfS*O zl3{`+K-oUrUI5MbwE~|hex0Yjp8)9rpqmY#DSDCt{G|ZD7 z5I8ZCK*b0E000+sMObuGZ)S9NVRB^vM@&RePDdbiWpW@hE;Mn4q~QPn00?w&PDe*f zL^A*Y002sWDIWj;00d`2O+f$vv5yP4I|bCe0WH}DVBG^RA6jLwFqU1@a6IZ2-mer`WdW$8!BPRO@#Uz%J{tg(X&g6A zbB@5QRUlWuha!*z(LoPg%w!KuGCb@eP_xE2JO&m4*u#sOAa=R}>j)Hy5m1IVfpAgR zBHknLrGUo)bop%unE6WNBYBg324L3%P;}bJ(z0Gj{*k1TXQq`sUT?bkuvPS(=w~em zMuAe8qlgO)M00kppTEBSup*aC^M9dN*{Q*~1ISfaY1?`Lu+QE_WH4Z7tpfC(=L#GV zoC4S_I|Edp0G*EQrO33;ZDU&{h$s^Hdp%WD=Kg>keiK>Ns1k%_8i4AQdhhkfV85-k z2=#~rSvU~%B1{PEDV4Y!p)fTTa^%fmp4uD`JuRa?ABVT!P}(LD$hW2svz;+HyG=k z-AM}`L?t4PXc;IHVjL-8w0~Qrh0||40*{$L=QOR z$GlW0v`%BdHZBY-<{3X#b@vq}%nng^YiR;7Av^-eFag+Z+M~fekXY_5FtNB*cMjd1 mM3t&*7n1-sy9(=c&G8o`RmGQTvojz70000D7 z5I8xUn@u_Z000+sMObuGZ)S9NVRB^vM@&RePDdbiWpW@hE;Mn4q~QPn00?w&PDe*f zL^A*Y002sWDIWj;00d`2O+f$vv5yP*YurE(hP92cn?uvgSu*}_*=9%(30$=*(zv=yz+g4TdvJw1-;zd+^05$b zm1a4(Cg9>ARcx@i-;i1Ptkaz~uF_;Gp?P@U+1b%3ivEv)?c=K;fbsLwK^+8yY=J7Q z;UyZMtYRbt$c@V106~BrIIvX~1R^BzF8DG4wzkq%aUd@wP%JDpAp-!$f+TJL3P^xA zftsj(=Ox55B04NrQBy{DziX7-mcd4O3!I?`>bnOkkxd@ssN3NvI?QE8lzmqZwkb0J zWHo)k&v{;Xfr0Y?c7U8@yJ>2PGs565|cM&QP11|T)!gQhx4W7|vK5dCUAmGoPGKJW$FokY4Qo`yK)r;P6Mt z8k0QI3K}MDQ&`$;*Vm z%n@V&&_$H`O%Nv7&7;PM*B`CekN&(48WwzNCv5D4*Q1Zkv5zZDw1Xt8A=<&DwVWc6&AA z`Ko2NQxJCn3NQUloX}-QJOos568tN)7Jdi5Wbv=#58-ov&or~g1poj507*qoM6N<$ Ef~sAU6951J literal 0 HcmV?d00001 diff --git a/graphics/pokemon/samurott/hisuian/normal.pal b/graphics/pokemon/samurott/hisuian/normal.pal new file mode 100755 index 000000000000..65d979af9499 --- /dev/null +++ b/graphics/pokemon/samurott/hisuian/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +16 16 16 +112 96 64 +208 192 120 +240 224 168 +160 144 96 +72 64 80 +248 248 248 +128 168 176 +32 64 104 +40 96 168 +190 54 54 +192 184 200 +96 120 120 +32 48 72 +0 0 0 diff --git a/graphics/pokemon/samurott/hisuian/shiny.pal b/graphics/pokemon/samurott/hisuian/shiny.pal new file mode 100755 index 000000000000..f7c51115a3de --- /dev/null +++ b/graphics/pokemon/samurott/hisuian/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +16 16 16 +112 96 64 +208 192 120 +240 224 168 +213 82 98 +222 218 220 +248 248 248 +128 168 176 +36 49 94 +32 69 155 +162 145 134 +192 184 200 +96 120 120 +32 48 72 +0 0 0 diff --git a/graphics/pokemon/samurott/shiny.pal b/graphics/pokemon/samurott/shiny.pal old mode 100644 new mode 100755 diff --git a/graphics/pokemon/sneasler/back.png b/graphics/pokemon/sneasler/back.png new file mode 100755 index 0000000000000000000000000000000000000000..b39320894ca8d955bbf59954d6a2701e1b60fcdd GIT binary patch literal 821 zcmV-51Iqk~P)D7 z5d|gVurvGs000+sMObuGZ)S9NVRB^vM@&RePDdbiWpW@hE;Mn4q~QPn00?w&PDe*f zL^A*Y002sWDIWj;00d`2O+f$vv5yPhCjzQ4l1z~=q} zvAe=XQV8h}<**TU{|4VoCc7aC_QDNhGn@C}`@Zw?UI=+u59@zi8GZE6I19tzG2Zj# zeB5^8;~@~Ky-wzVB0e6Ehlty2>CS2tN3~iZKvvZZv2ZjXfO{ZU)rlq+D1HfNQauf#y z@?IhTd_8_I1zOM^ac!D!H*eGNDFy&E`OTLxU=IP{&%WNCLM)vEo7+Fvr#M!40yNE& zrkB2B+q={NZZFU@O`l>L6m5vX#dc5!3^(SOcFW>`M!4Gz3kBcb8Q?hzFu|0UAB0%m z$pq`-i#B>0Xb*(_9Jt&xrVJNhanJ5A)W2*;%Mx_X5`7<7KD zDvK;vcPzNxvd<8Pbtm8=z&zcLC}2iwCHI#SM7Q^(@03tV-B6G$I{_(c-eoJLeD4T> z4*=9bDi_Nt!^;}XfozbRrie*($`WvbJ&6GD{;gvd(P*s!cw-AtTe+{3bOzu!6DXnx z@W~iJ4_u7|ih!)o-;#U`pvbze&#heoWg1W|ZJxd6_3{k7q8Y`!D9|5_lsP9u1r5Le z$VoZ`IHg@bCF7YgDHvsDs^;SOmCbsD7 z5d|)EV(N4N000+sMObuGZ)S9NVRB^vM@&RePDdbiWpW@hE;Mn4q~QPn00?w&PDe*f zL^A*Y002sWDIWj;00d`2O+f$vv5yPEe<_1(SX6BIHQ(nP~8 zol555CG7|38puHix0It}yM%s^KIyIn+wxp3HhMq)|M&EsM96XDh(}U5}&3{PBLiav=VXCO`*o?uC#`ho6>S5E}lC+W|MA zp~QX~;Fk>$vU>Oo2+K$y}R;A|FwNN{8UFH8NNw>yB_8hEFFHBj@|1eg#5xcUzpR|A;db`Suh%*a$d9KNRkfkwG;KnW{= zD__lhErrn@Y_EXP!Ndaev~VbJr1G)l>N^L!OQ0Ky<7y4W^LLGdSl2+rV^%!{y70LHut`FD@Jv>L?@wMYb@W$_d4(hD_}vS$M*>&N<`RMWYM>4WyM1H2rT`nhfOpy@Cr`=hUq53N~BvUag7C9bs+ n0V&%7wCR`aVPivEGqA2dM@rwYmKAmH00000NkvXXu0mjf59)ut literal 0 HcmV?d00001 diff --git a/graphics/pokemon/sneasler/normal.pal b/graphics/pokemon/sneasler/normal.pal new file mode 100755 index 000000000000..5cc13df59221 --- /dev/null +++ b/graphics/pokemon/sneasler/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +156 213 164 +49 41 49 +74 74 98 +74 57 82 +123 139 180 +16 16 16 +164 189 222 +164 123 57 +123 98 189 +238 197 49 +255 255 255 +255 32 65 +90 65 131 +255 41 41 +189 41 41 +139 24 24 diff --git a/graphics/pokemon/sneasler/shiny.pal b/graphics/pokemon/sneasler/shiny.pal new file mode 100755 index 000000000000..b3bc5103e3c1 --- /dev/null +++ b/graphics/pokemon/sneasler/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +156 213 164 +49 41 49 +106 90 41 +74 57 82 +156 148 82 +16 16 16 +238 213 131 +74 148 156 +106 74 98 +123 213 230 +255 255 255 +90 172 32 +74 49 74 +246 189 8 +213 148 24 +213 148 24 diff --git a/graphics/pokemon/wyrdeer/back.png b/graphics/pokemon/wyrdeer/back.png new file mode 100755 index 0000000000000000000000000000000000000000..00f1ba932de55c027c83d07b22b389a1da1c01a9 GIT binary patch literal 854 zcmV-c1F8IpP)D7 z5epGqhw8@w000+sMObuGZ)S9NVRB^vM@&RePDdbiWpW@hE;Mn4q~QPn00?w&PDe*f zL^A*Y002sWDIWj;00d`2O+f$vv5yPYgfB*mh zNJvQFm{_2wsCamIaDa&L@bJLM&^SOqSXfvtvk9f!#M}KVC6Hx76bt@{Zj>ozSGwqL(OvNo zFh8pIOrq79NolW&kn_!*bMA}=fv<${KK>&sHTkk z>Eqtih?Jzn+BW6%kCPj~jTq8pfU+<^D6AA&VO9x=!=OYw*n{HEykvyaU_jjtstbt; z3L%MvOfxopGbj^sDnx9a!3N^F5pMDFj3$E`$6^Jul;blmZn)cZN)>>B@4fspzt=nO(m)&Z;Ewy$V1h2|cU#cv9 zCWGh-csA%={3}pT<7(>1Sb>#px7~aSQnZaM)^V0cV!^V|Hj5*e)H5 z2L}2O{BEoZVTN!?X_&88hC`RKTaSA70Y}rlbLj#{0Qwr^9@t|!#!y3S@UlH}0$4DB gnUo)Bt~op4H#IbZS=}eo@&Et;07*qoM6N<$f{6NiHvj+t literal 0 HcmV?d00001 diff --git a/graphics/pokemon/wyrdeer/front.png b/graphics/pokemon/wyrdeer/front.png new file mode 100755 index 0000000000000000000000000000000000000000..9e5bffce51c892308229b0856acf0c06e7b636d4 GIT binary patch literal 1094 zcmV-M1iAZ(P)D7 z5epeoTw?VA000+sMObuGZ)S9NVRB^vM@&RePDdbiWpW@hE;Mn4q~QPn00?w&PDe*f zL^A*Y002sWDIWj;00d`2O+f$vv5yPYgfB*mh zNJvQFm{_2wsCamIaDa&L@bJLM&^SOqSXfvq^5IwX$^kPKh`3djGycrvcS(BAwl$~#9XV<$1NSk#AyHc=22D#qQ>JbP=V4VOR5riYlIcr^w7cQIv z_kj`&x|6wUIVZq%FcP&cbR18(om0T6iaVzZCFfeS8{I;jmd@>rfb*s9oB$vw&iyU= ztrkv9DunYy zh)Jkt_+6_pzInTSqMBb`_f+9_NkIMU(>xhaS_{3|0UL3&LR8ar>|@qh(cI?y8HD%{ zM7VhfF&0^Z7mi1{w^GLK47YNLaW26j1Hc%+eL^YsB`B4G*Bp?a+fs%Mo}r=;JqG9= zfnPF=G{&J?@}`l94n`3Axf09Bc+CGFbgPaG;) zew`#^nYK{Mr`@*hLBar|41{9_!vlb2LLi|xcE6>;YRMp%0D#Uc0mPWrrxa2p^6BV` z(V0ki^#rIo^ccWoverwrittenAbilities[battlerId]) return gBattleStruct->overwrittenAbilities[battlerId]; - + // The AI knows its own ability. if (IsBattlerAIControlled(battlerId)) return knownAbility; diff --git a/src/data/graphics/pokemon.h b/src/data/graphics/pokemon.h index 385460228b96..38d8138e8917 100644 --- a/src/data/graphics/pokemon.h +++ b/src/data/graphics/pokemon.h @@ -919,14 +919,14 @@ const u32 gMonFrontPic_Regidrago[] = INCBIN_U32("graphics/pokemon/regidrago/fron const u32 gMonFrontPic_Glastrier[] = INCBIN_U32("graphics/pokemon/glastrier/front.4bpp.lz"); const u32 gMonFrontPic_Spectrier[] = INCBIN_U32("graphics/pokemon/spectrier/front.4bpp.lz"); const u32 gMonFrontPic_Calyrex[] = INCBIN_U32("graphics/pokemon/calyrex/front.4bpp.lz"); -//const u32 gMonFrontPic_Wyrdeer[] = INCBIN_U32("graphics/pokemon/wyrdeer/front.4bpp.lz"); +const u32 gMonFrontPic_Wyrdeer[] = INCBIN_U32("graphics/pokemon/wyrdeer/front.4bpp.lz"); const u32 gMonFrontPic_Kleavor[] = INCBIN_U32("graphics/pokemon/kleavor/front.4bpp.lz"); const u32 gMonFrontPic_Ursaluna[] = INCBIN_U32("graphics/pokemon/ursaluna/front.4bpp.lz"); -//const u32 gMonFrontPic_Basculegion[] = INCBIN_U32("graphics/pokemon/basculegion/front.4bpp.lz"); +const u32 gMonFrontPic_Basculegion[] = INCBIN_U32("graphics/pokemon/basculegion/front.4bpp.lz"); //const u32 gMonFrontPic_BasculegionF[] = INCBIN_U32("graphics/pokemon/basculegion/frontf.4bpp.lz"); -//const u32 gMonFrontPic_Sneasler[] = INCBIN_U32("graphics/pokemon/sneasler/front.4bpp.lz"); +const u32 gMonFrontPic_Sneasler[] = INCBIN_U32("graphics/pokemon/sneasler/front.4bpp.lz"); const u32 gMonFrontPic_Overqwil[] = INCBIN_U32("graphics/pokemon/overqwil/front.4bpp.lz"); -//const u32 gMonFrontPic_Enamorus[] = INCBIN_U32("graphics/pokemon/enamorus/front.4bpp.lz"); +const u32 gMonFrontPic_Enamorus[] = INCBIN_U32("graphics/pokemon/enamorus/front.4bpp.lz"); #endif const u32 gMonFrontPic_VenusaurMega[] = INCBIN_U32("graphics/pokemon/venusaur/mega/front.4bpp.lz"); const u32 gMonFrontPic_CharizardMegaX[] = INCBIN_U32("graphics/pokemon/charizard/mega_x/front.4bpp.lz"); @@ -1031,7 +1031,7 @@ const u32 gMonFrontPic_TyphlosionHisuian[] = INCBIN_U32("graphics/pokemon/typhlo const u32 gMonFrontPic_QwilfishHisuian[] = INCBIN_U32("graphics/pokemon/qwilfish/hisuian/front.4bpp.lz"); const u32 gMonFrontPic_SneaselHisuian[] = INCBIN_U32("graphics/pokemon/sneasel/hisuian/front.4bpp.lz"); #if P_GEN_5_POKEMON == TRUE -//const u32 gMonFrontPic_SamurottHisuian[] = INCBIN_U32("graphics/pokemon/samurott/hisuian/front.4bpp.lz"); +const u32 gMonFrontPic_SamurottHisuian[] = INCBIN_U32("graphics/pokemon/samurott/hisuian/front.4bpp.lz"); const u32 gMonFrontPic_LilligantHisuian[] = INCBIN_U32("graphics/pokemon/lilligant/hisuian/front.4bpp.lz"); const u32 gMonFrontPic_ZoruaHisuian[] = INCBIN_U32("graphics/pokemon/zorua/hisuian/front.4bpp.lz"); const u32 gMonFrontPic_ZoroarkHisuian[] = INCBIN_U32("graphics/pokemon/zoroark/hisuian/front.4bpp.lz"); @@ -1043,7 +1043,7 @@ const u32 gMonFrontPic_GoodraHisuian[] = INCBIN_U32("graphics/pokemon/goodra/his const u32 gMonFrontPic_AvaluggHisuian[] = INCBIN_U32("graphics/pokemon/avalugg/hisuian/front.4bpp.lz"); #endif #if P_GEN_7_POKEMON == TRUE -//const u32 gMonFrontPic_DecidueyeHisuian[] = INCBIN_U32("graphics/pokemon/decidueye/hisuian/front.4bpp.lz"); +const u32 gMonFrontPic_DecidueyeHisuian[] = INCBIN_U32("graphics/pokemon/decidueye/hisuian/front.4bpp.lz"); #endif const u32 gMonFrontPic_PikachuCosplay[] = INCBIN_U32("graphics/pokemon/pikachu/cosplay/front.4bpp.lz"); const u32 gMonFrontPic_PikachuRockStar[] = INCBIN_U32("graphics/pokemon/pikachu/rock_star/front.4bpp.lz"); @@ -2131,14 +2131,14 @@ const u32 gMonBackPic_Regidrago[] = INCBIN_U32("graphics/pokemon/regidrago/back. const u32 gMonBackPic_Glastrier[] = INCBIN_U32("graphics/pokemon/glastrier/back.4bpp.lz"); const u32 gMonBackPic_Spectrier[] = INCBIN_U32("graphics/pokemon/spectrier/back.4bpp.lz"); const u32 gMonBackPic_Calyrex[] = INCBIN_U32("graphics/pokemon/calyrex/back.4bpp.lz"); -//const u32 gMonBackPic_Wyrdeer[] = INCBIN_U32("graphics/pokemon/wyrdeer/back.4bpp.lz"); +const u32 gMonBackPic_Wyrdeer[] = INCBIN_U32("graphics/pokemon/wyrdeer/back.4bpp.lz"); const u32 gMonBackPic_Kleavor[] = INCBIN_U32("graphics/pokemon/kleavor/back.4bpp.lz"); const u32 gMonBackPic_Ursaluna[] = INCBIN_U32("graphics/pokemon/ursaluna/back.4bpp.lz"); -//const u32 gMonBackPic_Basculegion[] = INCBIN_U32("graphics/pokemon/basculegion/back.4bpp.lz"); +const u32 gMonBackPic_Basculegion[] = INCBIN_U32("graphics/pokemon/basculegion/back.4bpp.lz"); //const u32 gMonBackPic_BasculegionF[] = INCBIN_U32("graphics/pokemon/basculegion/backf.4bpp.lz"); -//const u32 gMonBackPic_Sneasler[] = INCBIN_U32("graphics/pokemon/sneasler/back.4bpp.lz"); +const u32 gMonBackPic_Sneasler[] = INCBIN_U32("graphics/pokemon/sneasler/back.4bpp.lz"); const u32 gMonBackPic_Overqwil[] = INCBIN_U32("graphics/pokemon/overqwil/back.4bpp.lz"); -//const u32 gMonBackPic_Enamorus[] = INCBIN_U32("graphics/pokemon/enamorus/back.4bpp.lz"); +const u32 gMonBackPic_Enamorus[] = INCBIN_U32("graphics/pokemon/enamorus/back.4bpp.lz"); #endif const u32 gMonBackPic_VenusaurMega[] = INCBIN_U32("graphics/pokemon/venusaur/mega/back.4bpp.lz"); const u32 gMonBackPic_CharizardMegaX[] = INCBIN_U32("graphics/pokemon/charizard/mega_x/back.4bpp.lz"); @@ -2243,7 +2243,7 @@ const u32 gMonBackPic_TyphlosionHisuian[] = INCBIN_U32("graphics/pokemon/typhlos const u32 gMonBackPic_QwilfishHisuian[] = INCBIN_U32("graphics/pokemon/qwilfish/hisuian/back.4bpp.lz"); const u32 gMonBackPic_SneaselHisuian[] = INCBIN_U32("graphics/pokemon/sneasel/hisuian/back.4bpp.lz"); #if P_GEN_5_POKEMON == TRUE -//const u32 gMonBackPic_SamurottHisuian[] = INCBIN_U32("graphics/pokemon/samurott/hisuian/back.4bpp.lz"); +const u32 gMonBackPic_SamurottHisuian[] = INCBIN_U32("graphics/pokemon/samurott/hisuian/back.4bpp.lz"); const u32 gMonBackPic_LilligantHisuian[] = INCBIN_U32("graphics/pokemon/lilligant/hisuian/back.4bpp.lz"); const u32 gMonBackPic_ZoruaHisuian[] = INCBIN_U32("graphics/pokemon/zorua/hisuian/back.4bpp.lz"); const u32 gMonBackPic_ZoroarkHisuian[] = INCBIN_U32("graphics/pokemon/zoroark/hisuian/back.4bpp.lz"); @@ -2255,7 +2255,7 @@ const u32 gMonBackPic_GoodraHisuian[] = INCBIN_U32("graphics/pokemon/goodra/hisu const u32 gMonBackPic_AvaluggHisuian[] = INCBIN_U32("graphics/pokemon/avalugg/hisuian/back.4bpp.lz"); #endif #if P_GEN_7_POKEMON == TRUE -//const u32 gMonBackPic_DecidueyeHisuian[] = INCBIN_U32("graphics/pokemon/decidueye/hisuian/back.4bpp.lz"); +const u32 gMonBackPic_DecidueyeHisuian[] = INCBIN_U32("graphics/pokemon/decidueye/hisuian/back.4bpp.lz"); #endif const u32 gMonBackPic_PikachuCosplay[] = INCBIN_U32("graphics/pokemon/pikachu/cosplay/back.4bpp.lz"); const u32 gMonBackPic_PikachuRockStar[] = INCBIN_U32("graphics/pokemon/pikachu/rock_star/back.4bpp.lz"); @@ -3337,14 +3337,14 @@ const u32 gMonPalette_Regidrago[] = INCBIN_U32("graphics/pokemon/regidrago/norma const u32 gMonPalette_Glastrier[] = INCBIN_U32("graphics/pokemon/glastrier/normal.gbapal.lz"); const u32 gMonPalette_Spectrier[] = INCBIN_U32("graphics/pokemon/spectrier/normal.gbapal.lz"); const u32 gMonPalette_Calyrex[] = INCBIN_U32("graphics/pokemon/calyrex/normal.gbapal.lz"); -//const u32 gMonPalette_Wyrdeer[] = INCBIN_U32("graphics/pokemon/wyrdeer/normal.gbapal.lz"); +const u32 gMonPalette_Wyrdeer[] = INCBIN_U32("graphics/pokemon/wyrdeer/normal.gbapal.lz"); const u32 gMonPalette_Kleavor[] = INCBIN_U32("graphics/pokemon/kleavor/normal.gbapal.lz"); const u32 gMonPalette_Ursaluna[] = INCBIN_U32("graphics/pokemon/ursaluna/normal.gbapal.lz"); -//const u32 gMonPalette_Basculegion[] = INCBIN_U32("graphics/pokemon/basculegion/normal.gbapal.lz"); +const u32 gMonPalette_Basculegion[] = INCBIN_U32("graphics/pokemon/basculegion/normal.gbapal.lz"); //const u32 gMonPalette_BasculegionF[] = INCBIN_U32("graphics/pokemon/basculegion/normalf.gbapal.lz"); -//const u32 gMonPalette_Sneasler[] = INCBIN_U32("graphics/pokemon/sneasler/normal.gbapal.lz"); +const u32 gMonPalette_Sneasler[] = INCBIN_U32("graphics/pokemon/sneasler/normal.gbapal.lz"); const u32 gMonPalette_Overqwil[] = INCBIN_U32("graphics/pokemon/overqwil/normal.gbapal.lz"); -//const u32 gMonPalette_Enamorus[] = INCBIN_U32("graphics/pokemon/enamorus/normal.gbapal.lz"); +const u32 gMonPalette_Enamorus[] = INCBIN_U32("graphics/pokemon/enamorus/normal.gbapal.lz"); #endif const u32 gMonPalette_VenusaurMega[] = INCBIN_U32("graphics/pokemon/venusaur/mega/normal.gbapal.lz"); const u32 gMonPalette_CharizardMegaX[] = INCBIN_U32("graphics/pokemon/charizard/mega_x/normal.gbapal.lz"); @@ -3449,7 +3449,7 @@ const u32 gMonPalette_TyphlosionHisuian[] = INCBIN_U32("graphics/pokemon/typhlos const u32 gMonPalette_QwilfishHisuian[] = INCBIN_U32("graphics/pokemon/qwilfish/hisuian/normal.gbapal.lz"); const u32 gMonPalette_SneaselHisuian[] = INCBIN_U32("graphics/pokemon/sneasel/hisuian/normal.gbapal.lz"); #if P_GEN_5_POKEMON == TRUE -//const u32 gMonPalette_SamurottHisuian[] = INCBIN_U32("graphics/pokemon/samurott/hisuian/normal.gbapal.lz"); +const u32 gMonPalette_SamurottHisuian[] = INCBIN_U32("graphics/pokemon/samurott/hisuian/normal.gbapal.lz"); const u32 gMonPalette_LilligantHisuian[] = INCBIN_U32("graphics/pokemon/lilligant/hisuian/normal.gbapal.lz"); const u32 gMonPalette_ZoruaHisuian[] = INCBIN_U32("graphics/pokemon/zorua/hisuian/normal.gbapal.lz"); const u32 gMonPalette_ZoroarkHisuian[] = INCBIN_U32("graphics/pokemon/zoroark/hisuian/normal.gbapal.lz"); @@ -3461,7 +3461,7 @@ const u32 gMonPalette_GoodraHisuian[] = INCBIN_U32("graphics/pokemon/goodra/hisu const u32 gMonPalette_AvaluggHisuian[] = INCBIN_U32("graphics/pokemon/avalugg/hisuian/normal.gbapal.lz"); #endif #if P_GEN_7_POKEMON == TRUE -//const u32 gMonPalette_DecidueyeHisuian[] = INCBIN_U32("graphics/pokemon/decidueye/hisuian/normal.gbapal.lz"); +const u32 gMonPalette_DecidueyeHisuian[] = INCBIN_U32("graphics/pokemon/decidueye/hisuian/normal.gbapal.lz"); #endif const u32 gMonPalette_PikachuCosplay[] = INCBIN_U32("graphics/pokemon/pikachu/cosplay/normal.gbapal.lz"); const u32 gMonPalette_PikachuRockStar[] = INCBIN_U32("graphics/pokemon/pikachu/rock_star/normal.gbapal.lz"); @@ -4570,14 +4570,14 @@ const u32 gMonShinyPalette_Regidrago[] = INCBIN_U32("graphics/pokemon/regidrago/ const u32 gMonShinyPalette_Glastrier[] = INCBIN_U32("graphics/pokemon/glastrier/shiny.gbapal.lz"); const u32 gMonShinyPalette_Spectrier[] = INCBIN_U32("graphics/pokemon/spectrier/shiny.gbapal.lz"); const u32 gMonShinyPalette_Calyrex[] = INCBIN_U32("graphics/pokemon/calyrex/shiny.gbapal.lz"); -//const u32 gMonShinyPalette_Wyrdeer[] = INCBIN_U32("graphics/pokemon/wyrdeer/shiny.gbapal.lz"); +const u32 gMonShinyPalette_Wyrdeer[] = INCBIN_U32("graphics/pokemon/wyrdeer/shiny.gbapal.lz"); const u32 gMonShinyPalette_Kleavor[] = INCBIN_U32("graphics/pokemon/kleavor/shiny.gbapal.lz"); const u32 gMonShinyPalette_Ursaluna[] = INCBIN_U32("graphics/pokemon/ursaluna/shiny.gbapal.lz"); -//const u32 gMonShinyPalette_Basculegion[] = INCBIN_U32("graphics/pokemon/basculegion/shiny.gbapal.lz"); +const u32 gMonShinyPalette_Basculegion[] = INCBIN_U32("graphics/pokemon/basculegion/shiny.gbapal.lz"); //const u32 gMonShinyPalette_BasculegionF[] = INCBIN_U32("graphics/pokemon/basculegion/shinyf.gbapal.lz"); -//const u32 gMonShinyPalette_Sneasler[] = INCBIN_U32("graphics/pokemon/sneasler/shiny.gbapal.lz"); +const u32 gMonShinyPalette_Sneasler[] = INCBIN_U32("graphics/pokemon/sneasler/shiny.gbapal.lz"); const u32 gMonShinyPalette_Overqwil[] = INCBIN_U32("graphics/pokemon/overqwil/shiny.gbapal.lz"); -//const u32 gMonShinyPalette_Enamorus[] = INCBIN_U32("graphics/pokemon/enamorus/shiny.gbapal.lz"); +const u32 gMonShinyPalette_Enamorus[] = INCBIN_U32("graphics/pokemon/enamorus/shiny.gbapal.lz"); #endif const u32 gMonShinyPalette_VenusaurMega[] = INCBIN_U32("graphics/pokemon/venusaur/mega/shiny.gbapal.lz"); const u32 gMonShinyPalette_CharizardMegaX[] = INCBIN_U32("graphics/pokemon/charizard/mega_x/shiny.gbapal.lz"); @@ -4682,7 +4682,7 @@ const u32 gMonShinyPalette_TyphlosionHisuian[] = INCBIN_U32("graphics/pokemon/ty const u32 gMonShinyPalette_QwilfishHisuian[] = INCBIN_U32("graphics/pokemon/qwilfish/hisuian/shiny.gbapal.lz"); const u32 gMonShinyPalette_SneaselHisuian[] = INCBIN_U32("graphics/pokemon/sneasel/hisuian/shiny.gbapal.lz"); #if P_GEN_5_POKEMON == TRUE -//const u32 gMonShinyPalette_SamurottHisuian[] = INCBIN_U32("graphics/pokemon/samurott/hisuian/shiny.gbapal.lz"); +const u32 gMonShinyPalette_SamurottHisuian[] = INCBIN_U32("graphics/pokemon/samurott/hisuian/shiny.gbapal.lz"); const u32 gMonShinyPalette_LilligantHisuian[] = INCBIN_U32("graphics/pokemon/lilligant/hisuian/shiny.gbapal.lz"); const u32 gMonShinyPalette_ZoruaHisuian[] = INCBIN_U32("graphics/pokemon/zorua/hisuian/shiny.gbapal.lz"); const u32 gMonShinyPalette_ZoroarkHisuian[] = INCBIN_U32("graphics/pokemon/zoroark/hisuian/shiny.gbapal.lz"); @@ -4694,7 +4694,7 @@ const u32 gMonShinyPalette_GoodraHisuian[] = INCBIN_U32("graphics/pokemon/goodra const u32 gMonShinyPalette_AvaluggHisuian[] = INCBIN_U32("graphics/pokemon/avalugg/hisuian/shiny.gbapal.lz"); #endif #if P_GEN_7_POKEMON == TRUE -//const u32 gMonShinyPalette_DecidueyeHisuian[] = INCBIN_U32("graphics/pokemon/decidueye/hisuian/shiny.gbapal.lz"); +const u32 gMonShinyPalette_DecidueyeHisuian[] = INCBIN_U32("graphics/pokemon/decidueye/hisuian/shiny.gbapal.lz"); #endif const u32 gMonShinyPalette_PikachuCosplay[] = INCBIN_U32("graphics/pokemon/pikachu/cosplay/shiny.gbapal.lz"); const u32 gMonShinyPalette_PikachuRockStar[] = INCBIN_U32("graphics/pokemon/pikachu/rock_star/shiny.gbapal.lz"); diff --git a/src/data/pokemon_graphics/back_pic_table.h b/src/data/pokemon_graphics/back_pic_table.h index ebe0c316f84a..0cb20daaf4de 100644 --- a/src/data/pokemon_graphics/back_pic_table.h +++ b/src/data/pokemon_graphics/back_pic_table.h @@ -908,13 +908,13 @@ const struct CompressedSpriteSheet gMonBackPicTable[] = SPECIES_SPRITE(GLASTRIER, gMonBackPic_Glastrier), SPECIES_SPRITE(SPECTRIER, gMonBackPic_Spectrier), SPECIES_SPRITE(CALYREX, gMonBackPic_Calyrex), - SPECIES_SPRITE(WYRDEER, gMonBackPic_CircledQuestionMark), //gMonBackPic_Wyrdeer), + SPECIES_SPRITE(WYRDEER, gMonBackPic_Wyrdeer), SPECIES_SPRITE(KLEAVOR, gMonBackPic_Kleavor), SPECIES_SPRITE(URSALUNA, gMonBackPic_Ursaluna), - SPECIES_SPRITE(BASCULEGION, gMonBackPic_CircledQuestionMark), //gMonBackPic_Basculegion), - SPECIES_SPRITE(SNEASLER, gMonBackPic_CircledQuestionMark), //gMonBackPic_Sneasler), + SPECIES_SPRITE(BASCULEGION, gMonBackPic_Basculegion), + SPECIES_SPRITE(SNEASLER, gMonBackPic_Sneasler), SPECIES_SPRITE(OVERQWIL, gMonBackPic_Overqwil), - SPECIES_SPRITE(ENAMORUS, gMonBackPic_CircledQuestionMark), //gMonBackPic_Enamorus), + SPECIES_SPRITE(ENAMORUS, gMonBackPic_Enamorus), #endif SPECIES_SPRITE(VENUSAUR_MEGA, gMonBackPic_VenusaurMega), @@ -1024,7 +1024,7 @@ const struct CompressedSpriteSheet gMonBackPicTable[] = SPECIES_SPRITE(QWILFISH_HISUIAN, gMonBackPic_QwilfishHisuian), SPECIES_SPRITE(SNEASEL_HISUIAN, gMonBackPic_SneaselHisuian), #if P_GEN_5_POKEMON == TRUE - SPECIES_SPRITE(SAMUROTT_HISUIAN, gMonBackPic_CircledQuestionMark), //gMonBackPic_SamurottHisuian), + SPECIES_SPRITE(SAMUROTT_HISUIAN, gMonBackPic_SamurottHisuian), SPECIES_SPRITE(LILLIGANT_HISUIAN, gMonBackPic_LilligantHisuian), SPECIES_SPRITE(ZORUA_HISUIAN, gMonBackPic_ZoruaHisuian), SPECIES_SPRITE(ZOROARK_HISUIAN, gMonBackPic_ZoroarkHisuian), @@ -1036,7 +1036,7 @@ const struct CompressedSpriteSheet gMonBackPicTable[] = SPECIES_SPRITE(AVALUGG_HISUIAN, gMonBackPic_AvaluggHisuian), #endif #if P_GEN_8_POKEMON == TRUE - SPECIES_SPRITE(DECIDUEYE_HISUIAN, gMonBackPic_CircledQuestionMark), //gMonBackPic_DecidueyeHisuian), + SPECIES_SPRITE(DECIDUEYE_HISUIAN, gMonBackPic_DecidueyeHisuian), #endif SPECIES_SPRITE(PIKACHU_COSPLAY, gMonBackPic_PikachuCosplay), diff --git a/src/data/pokemon_graphics/front_pic_table.h b/src/data/pokemon_graphics/front_pic_table.h index 24ebc78f3811..4da64827a127 100644 --- a/src/data/pokemon_graphics/front_pic_table.h +++ b/src/data/pokemon_graphics/front_pic_table.h @@ -908,13 +908,13 @@ const struct CompressedSpriteSheet gMonFrontPicTable[] = SPECIES_SPRITE(GLASTRIER, gMonFrontPic_Glastrier), SPECIES_SPRITE(SPECTRIER, gMonFrontPic_Spectrier), SPECIES_SPRITE(CALYREX, gMonFrontPic_Calyrex), - SPECIES_SPRITE(WYRDEER, gMonFrontPic_CircledQuestionMark), //gMonFrontPic_Wyrdeer), + SPECIES_SPRITE(WYRDEER, gMonFrontPic_Wyrdeer), SPECIES_SPRITE(KLEAVOR, gMonFrontPic_Kleavor), SPECIES_SPRITE(URSALUNA, gMonFrontPic_Ursaluna), - SPECIES_SPRITE(BASCULEGION, gMonFrontPic_CircledQuestionMark), //gMonFrontPic_Basculegion), - SPECIES_SPRITE(SNEASLER, gMonFrontPic_CircledQuestionMark), //gMonFrontPic_Sneasler), + SPECIES_SPRITE(BASCULEGION, gMonFrontPic_Basculegion), + SPECIES_SPRITE(SNEASLER, gMonFrontPic_Sneasler), SPECIES_SPRITE(OVERQWIL, gMonFrontPic_Overqwil), - SPECIES_SPRITE(ENAMORUS, gMonFrontPic_CircledQuestionMark), //gMonFrontPic_Enamorus), + SPECIES_SPRITE(ENAMORUS, gMonFrontPic_Enamorus), #endif SPECIES_SPRITE(VENUSAUR_MEGA, gMonFrontPic_VenusaurMega), SPECIES_SPRITE(CHARIZARD_MEGA_X, gMonFrontPic_CharizardMegaX), @@ -1023,7 +1023,7 @@ const struct CompressedSpriteSheet gMonFrontPicTable[] = SPECIES_SPRITE(QWILFISH_HISUIAN, gMonFrontPic_QwilfishHisuian), SPECIES_SPRITE(SNEASEL_HISUIAN, gMonFrontPic_SneaselHisuian), #if P_GEN_5_POKEMON == TRUE - SPECIES_SPRITE(SAMUROTT_HISUIAN, gMonFrontPic_CircledQuestionMark), //gMonFrontPic_SamurottHisuian), + SPECIES_SPRITE(SAMUROTT_HISUIAN, gMonFrontPic_SamurottHisuian), SPECIES_SPRITE(LILLIGANT_HISUIAN, gMonFrontPic_LilligantHisuian), SPECIES_SPRITE(ZORUA_HISUIAN, gMonFrontPic_ZoruaHisuian), SPECIES_SPRITE(ZOROARK_HISUIAN, gMonFrontPic_ZoroarkHisuian), @@ -1035,7 +1035,7 @@ const struct CompressedSpriteSheet gMonFrontPicTable[] = SPECIES_SPRITE(AVALUGG_HISUIAN, gMonFrontPic_AvaluggHisuian), #endif #if P_GEN_7_POKEMON == TRUE - SPECIES_SPRITE(DECIDUEYE_HISUIAN, gMonFrontPic_CircledQuestionMark), //gMonFrontPic_DecidueyeHisuian), + SPECIES_SPRITE(DECIDUEYE_HISUIAN, gMonFrontPic_DecidueyeHisuian), #endif SPECIES_SPRITE(PIKACHU_COSPLAY, gMonFrontPic_PikachuCosplay), diff --git a/src/data/pokemon_graphics/palette_table.h b/src/data/pokemon_graphics/palette_table.h index a8c986d7957b..a85829be2976 100644 --- a/src/data/pokemon_graphics/palette_table.h +++ b/src/data/pokemon_graphics/palette_table.h @@ -908,13 +908,13 @@ const struct CompressedSpritePalette gMonPaletteTable[] = SPECIES_PAL(GLASTRIER, gMonPalette_Glastrier), SPECIES_PAL(SPECTRIER, gMonPalette_Spectrier), SPECIES_PAL(CALYREX, gMonPalette_Calyrex), - SPECIES_PAL(WYRDEER, gMonPalette_CircledQuestionMark), // gMonPalette_Wyrdeer), + SPECIES_PAL(WYRDEER, gMonPalette_Wyrdeer), SPECIES_PAL(KLEAVOR, gMonPalette_Kleavor), SPECIES_PAL(URSALUNA, gMonPalette_Ursaluna), - SPECIES_PAL(BASCULEGION, gMonPalette_CircledQuestionMark), // gMonPalette_Basculegion), - SPECIES_PAL(SNEASLER, gMonPalette_CircledQuestionMark), // gMonPalette_Sneasler), + SPECIES_PAL(BASCULEGION, gMonPalette_Basculegion), + SPECIES_PAL(SNEASLER, gMonPalette_Sneasler), SPECIES_PAL(OVERQWIL, gMonPalette_Overqwil), - SPECIES_PAL(ENAMORUS, gMonPalette_CircledQuestionMark), // gMonPalette_Enamorus), + SPECIES_PAL(ENAMORUS, gMonPalette_Enamorus), #endif SPECIES_PAL(VENUSAUR_MEGA, gMonPalette_VenusaurMega), SPECIES_PAL(CHARIZARD_MEGA_X, gMonPalette_CharizardMegaX), @@ -1023,7 +1023,7 @@ const struct CompressedSpritePalette gMonPaletteTable[] = SPECIES_PAL(QWILFISH_HISUIAN, gMonPalette_QwilfishHisuian), #if P_GEN_5_POKEMON == TRUE SPECIES_PAL(SNEASEL_HISUIAN, gMonPalette_SneaselHisuian), - SPECIES_PAL(SAMUROTT_HISUIAN, gMonPalette_CircledQuestionMark), //gMonPalette_SamurottHisuian), + SPECIES_PAL(SAMUROTT_HISUIAN, gMonPalette_SamurottHisuian), SPECIES_PAL(LILLIGANT_HISUIAN, gMonPalette_LilligantHisuian), SPECIES_PAL(ZORUA_HISUIAN, gMonPalette_ZoruaHisuian), SPECIES_PAL(ZOROARK_HISUIAN, gMonPalette_ZoroarkHisuian), @@ -1035,7 +1035,7 @@ const struct CompressedSpritePalette gMonPaletteTable[] = SPECIES_PAL(AVALUGG_HISUIAN, gMonPalette_AvaluggHisuian), #endif #if P_GEN_7_POKEMON == TRUE - SPECIES_PAL(DECIDUEYE_HISUIAN, gMonPalette_CircledQuestionMark), //gMonPalette_DecidueyeHisuian), + SPECIES_PAL(DECIDUEYE_HISUIAN, gMonPalette_DecidueyeHisuian), #endif SPECIES_PAL(PIKACHU_COSPLAY, gMonPalette_PikachuCosplay), diff --git a/src/data/pokemon_graphics/shiny_palette_table.h b/src/data/pokemon_graphics/shiny_palette_table.h index 012a95cf1fb4..fdc5b9d4058e 100644 --- a/src/data/pokemon_graphics/shiny_palette_table.h +++ b/src/data/pokemon_graphics/shiny_palette_table.h @@ -908,13 +908,13 @@ const struct CompressedSpritePalette gMonShinyPaletteTable[] = SPECIES_SHINY_PAL(GLASTRIER, gMonShinyPalette_Glastrier), SPECIES_SHINY_PAL(SPECTRIER, gMonShinyPalette_Spectrier), SPECIES_SHINY_PAL(CALYREX, gMonShinyPalette_Calyrex), - SPECIES_SHINY_PAL(WYRDEER, gMonShinyPalette_CircledQuestionMark), // gMonShinyPalette_Wyrdeer), + SPECIES_SHINY_PAL(WYRDEER, gMonShinyPalette_Wyrdeer), SPECIES_SHINY_PAL(KLEAVOR, gMonShinyPalette_Kleavor), SPECIES_SHINY_PAL(URSALUNA, gMonShinyPalette_Ursaluna), - SPECIES_SHINY_PAL(BASCULEGION, gMonShinyPalette_CircledQuestionMark), // gMonShinyPalette_Basculegion), - SPECIES_SHINY_PAL(SNEASLER, gMonShinyPalette_CircledQuestionMark), // gMonShinyPalette_Sneasler), + SPECIES_SHINY_PAL(BASCULEGION, gMonShinyPalette_Basculegion), + SPECIES_SHINY_PAL(SNEASLER, gMonShinyPalette_Sneasler), SPECIES_SHINY_PAL(OVERQWIL, gMonShinyPalette_Overqwil), - SPECIES_SHINY_PAL(ENAMORUS, gMonShinyPalette_CircledQuestionMark), // gMonShinyPalette_Enamorus), + SPECIES_SHINY_PAL(ENAMORUS, gMonShinyPalette_Enamorus), #endif SPECIES_SHINY_PAL(VENUSAUR_MEGA, gMonShinyPalette_VenusaurMega), @@ -1024,7 +1024,7 @@ const struct CompressedSpritePalette gMonShinyPaletteTable[] = SPECIES_SHINY_PAL(QWILFISH_HISUIAN, gMonShinyPalette_QwilfishHisuian), SPECIES_SHINY_PAL(SNEASEL_HISUIAN, gMonShinyPalette_SneaselHisuian), #if P_GEN_5_POKEMON == TRUE - SPECIES_SHINY_PAL(SAMUROTT_HISUIAN, gMonShinyPalette_CircledQuestionMark), //gMonShinyPalette_SamurottHisuian), + SPECIES_SHINY_PAL(SAMUROTT_HISUIAN, gMonShinyPalette_SamurottHisuian), SPECIES_SHINY_PAL(LILLIGANT_HISUIAN, gMonShinyPalette_LilligantHisuian), SPECIES_SHINY_PAL(ZORUA_HISUIAN, gMonShinyPalette_ZoruaHisuian), SPECIES_SHINY_PAL(ZOROARK_HISUIAN, gMonShinyPalette_ZoroarkHisuian), @@ -1036,7 +1036,7 @@ const struct CompressedSpritePalette gMonShinyPaletteTable[] = SPECIES_SHINY_PAL(AVALUGG_HISUIAN, gMonShinyPalette_AvaluggHisuian), #endif #if P_GEN_7_POKEMON == TRUE - SPECIES_SHINY_PAL(DECIDUEYE_HISUIAN, gMonShinyPalette_CircledQuestionMark), //gMonShinyPalette_DecidueyeHisuian), + SPECIES_SHINY_PAL(DECIDUEYE_HISUIAN, gMonShinyPalette_DecidueyeHisuian), #endif SPECIES_SHINY_PAL(PIKACHU_COSPLAY, gMonShinyPalette_PikachuCosplay), @@ -1328,7 +1328,7 @@ const struct CompressedSpritePalette gMonShinyPaletteTable[] = SPECIES_SHINY_PAL(CALYREX_ICE_RIDER, gMonShinyPalette_CalyrexIceRider), SPECIES_SHINY_PAL(CALYREX_SHADOW_RIDER, gMonShinyPalette_CalyrexShadowRider), - + SPECIES_SHINY_PAL(ENAMORUS_THERIAN, gMonShinyPalette_CircledQuestionMark), //gMonShinyPalette_EnamorusTherian), #endif SPECIES_SHINY_PAL(EGG, gMonPalette_Egg), diff --git a/src/data/trainer_parties.h b/src/data/trainer_parties.h index 1759120b7f3c..e3f1fb303c2e 100644 --- a/src/data/trainer_parties.h +++ b/src/data/trainer_parties.h @@ -6873,7 +6873,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_BrendanRoute103Torchic[] { .iv = 0, .lvl = 5, - .species = SPECIES_MUDKIP, + .species = SPECIES_WYRDEER, } }; From 1c832768bb3d9fa9661221f8141e6eb306fb3f48 Mon Sep 17 00:00:00 2001 From: Alex Date: Wed, 22 Feb 2023 20:44:03 +0100 Subject: [PATCH 087/428] fix trainer party --- src/data/trainer_parties.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/trainer_parties.h b/src/data/trainer_parties.h index e3f1fb303c2e..1759120b7f3c 100644 --- a/src/data/trainer_parties.h +++ b/src/data/trainer_parties.h @@ -6873,7 +6873,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_BrendanRoute103Torchic[] { .iv = 0, .lvl = 5, - .species = SPECIES_WYRDEER, + .species = SPECIES_MUDKIP, } }; From 60be59d18b04ef0dec2ee0948dfcfaeda59ad059 Mon Sep 17 00:00:00 2001 From: Zunawe Date: Wed, 22 Feb 2023 13:13:57 -0800 Subject: [PATCH 088/428] Fix wrong route in hidden item flag name --- data/maps/Route114/map.json | 2 +- include/constants/flags.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/data/maps/Route114/map.json b/data/maps/Route114/map.json index 10f15233c975..17c483c0fac2 100644 --- a/data/maps/Route114/map.json +++ b/data/maps/Route114/map.json @@ -503,7 +503,7 @@ "y": 30, "elevation": 3, "item": "ITEM_REVIVE", - "flag": "FLAG_HIDDEN_ITEM_ROUTE_113_REVIVE" + "flag": "FLAG_HIDDEN_ITEM_ROUTE_114_REVIVE" } ] } diff --git a/include/constants/flags.h b/include/constants/flags.h index f39a7219c0f6..4bef779385ee 100644 --- a/include/constants/flags.h +++ b/include/constants/flags.h @@ -580,7 +580,7 @@ #define FLAG_HIDDEN_ITEM_ROUTE_121_HP_UP (FLAG_HIDDEN_ITEMS_START + 0x27) #define FLAG_HIDDEN_ITEM_ROUTE_121_NUGGET (FLAG_HIDDEN_ITEMS_START + 0x28) #define FLAG_HIDDEN_ITEM_ROUTE_123_REVIVE (FLAG_HIDDEN_ITEMS_START + 0x29) -#define FLAG_HIDDEN_ITEM_ROUTE_113_REVIVE (FLAG_HIDDEN_ITEMS_START + 0x2A) +#define FLAG_HIDDEN_ITEM_ROUTE_114_REVIVE (FLAG_HIDDEN_ITEMS_START + 0x2A) #define FLAG_HIDDEN_ITEM_LILYCOVE_CITY_PP_UP (FLAG_HIDDEN_ITEMS_START + 0x2B) #define FLAG_HIDDEN_ITEM_ROUTE_104_SUPER_POTION (FLAG_HIDDEN_ITEMS_START + 0x2C) #define FLAG_HIDDEN_ITEM_ROUTE_116_SUPER_POTION (FLAG_HIDDEN_ITEMS_START + 0x2D) From dc83708443b1def89264d0c63f5ac710769b7003 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Wed, 22 Feb 2023 22:51:59 +0100 Subject: [PATCH 089/428] Remove unused script BattleScript_TargetAbilityStatRaiseOnMoveEnd --- data/battle_scripts_1.s | 10 ---------- include/battle_scripts.h | 1 - 2 files changed, 11 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 5bf5f52b0feb..04b709f82630 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -9164,16 +9164,6 @@ BattleScript_BattlerAbilityStatRaiseOnSwitchIn:: waitmessage B_WAIT_TIME_LONG end3 -BattleScript_TargetAbilityStatRaiseOnMoveEnd:: - call BattleScript_AbilityPopUp - statbuffchange STAT_CHANGE_NOT_PROTECT_AFFECTED | MOVE_EFFECT_CERTAIN, NULL - setgraphicalstatchangevalues - playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 - waitanimation - printstring STRINGID_ABILITYRAISEDSTATDRASTICALLY - waitmessage B_WAIT_TIME_LONG - return - BattleScript_ScriptingAbilityStatRaise:: copybyte gBattlerAbility, sBATTLER call BattleScript_AbilityPopUp diff --git a/include/battle_scripts.h b/include/battle_scripts.h index 7904f5dc1fe9..8c6b074c188e 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -256,7 +256,6 @@ extern const u8 BattleScript_SturdiedMsg[]; extern const u8 BattleScript_GravityEnds[]; extern const u8 BattleScript_MoveStatDrain[]; extern const u8 BattleScript_MoveStatDrain_PPLoss[]; -extern const u8 BattleScript_TargetAbilityStatRaiseOnMoveEnd[]; extern const u8 BattleScript_TargetsStatWasMaxedOut[]; extern const u8 BattleScript_AttackerAbilityStatRaise[]; extern const u8 BattleScript_AttackerAbilityStatRaiseEnd3[]; From a86b870cfdbf313024ff4ddd7f1d1b9eaee50660 Mon Sep 17 00:00:00 2001 From: Alex Date: Wed, 22 Feb 2023 23:06:22 +0100 Subject: [PATCH 090/428] PLA cries --- sound/cry_tables.inc | 28 +++++++++--------- sound/direct_sound_data.inc | 4 +-- .../cries/basculegion.aif | Bin 0 -> 122206 bytes sound/direct_sound_samples/cries/enamorus.aif | Bin 0 -> 171902 bytes sound/direct_sound_samples/cries/kleavor.aif | Bin 0 -> 66940 bytes sound/direct_sound_samples/cries/overqwil.aif | Bin 0 -> 50784 bytes sound/direct_sound_samples/cries/sneasler.aif | Bin 0 -> 51992 bytes sound/direct_sound_samples/cries/ursaluna.aif | Bin 0 -> 59604 bytes sound/direct_sound_samples/cries/wyrdeer.aif | Bin 0 -> 87764 bytes 9 files changed, 16 insertions(+), 16 deletions(-) create mode 100644 sound/direct_sound_samples/cries/basculegion.aif create mode 100644 sound/direct_sound_samples/cries/enamorus.aif create mode 100644 sound/direct_sound_samples/cries/kleavor.aif create mode 100644 sound/direct_sound_samples/cries/overqwil.aif create mode 100644 sound/direct_sound_samples/cries/sneasler.aif create mode 100644 sound/direct_sound_samples/cries/ursaluna.aif create mode 100644 sound/direct_sound_samples/cries/wyrdeer.aif diff --git a/sound/cry_tables.inc b/sound/cry_tables.inc index 7714cd00ec71..98225fa8e887 100644 --- a/sound/cry_tables.inc +++ b/sound/cry_tables.inc @@ -1334,13 +1334,13 @@ gCryTable:: cry Cry_Glastrier cry Cry_Spectrier cry Cry_Calyrex - cry Cry_Unown //Cry_Wyrdeer - cry Cry_Unown //Cry_Kleavor - cry Cry_Unown //Cry_Ursaluna - cry Cry_Unown //Cry_Basculegion - cry Cry_Unown //Cry_Sneasler - cry Cry_Unown //Cry_Overqwil - cry Cry_Unown //Cry_Enamorus + cry Cry_Wyrdeer + cry Cry_Kleavor + cry Cry_Ursaluna + cry Cry_Basculegion + cry Cry_Sneasler + cry Cry_Overqwil + cry Cry_Enamorus .else cry Cry_Unown cry Cry_Unown @@ -3456,13 +3456,13 @@ gCryTable_Reverse:: cry_reverse Cry_Glastrier cry_reverse Cry_Spectrier cry_reverse Cry_Calyrex - cry_reverse Cry_Unown //Cry_Wyrdeer - cry_reverse Cry_Unown //Cry_Kleavor - cry_reverse Cry_Unown //Cry_Ursaluna - cry_reverse Cry_Unown //Cry_Basculegion - cry_reverse Cry_Unown //Cry_Sneasler - cry_reverse Cry_Unown //Cry_Overqwil - cry_reverse Cry_Unown //Cry_Enamorus + cry_reverse Cry_Wyrdeer + cry_reverse Cry_Kleavor + cry_reverse Cry_Ursaluna + cry_reverse Cry_Basculegion + cry_reverse Cry_Sneasler + cry_reverse Cry_Overqwil + cry_reverse Cry_Enamorus .else cry_reverse Cry_Unown cry_reverse Cry_Unown diff --git a/sound/direct_sound_data.inc b/sound/direct_sound_data.inc index fb4c6b44f6aa..2129f32a19bf 100644 --- a/sound/direct_sound_data.inc +++ b/sound/direct_sound_data.inc @@ -3986,7 +3986,7 @@ Cry_Spectrier:: .align 2 Cry_Calyrex:: .incbin "sound/direct_sound_samples/cries/calyrex.bin" -/* + .align 2 Cry_Wyrdeer:: .incbin "sound/direct_sound_samples/cries/wyrdeer.bin" @@ -4014,7 +4014,7 @@ Cry_Overqwil:: .align 2 Cry_Enamorus:: .incbin "sound/direct_sound_samples/cries/enamorus.bin" -*/ + .endif .align 2 diff --git a/sound/direct_sound_samples/cries/basculegion.aif b/sound/direct_sound_samples/cries/basculegion.aif new file mode 100644 index 0000000000000000000000000000000000000000..a1405ee8d7370b6ead460cf4f240cc865c5ff301 GIT binary patch literal 122206 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

}Fu0xkp~-BZ^~C)3T+}~ktY?lGWV>_% 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 literal 0 HcmV?d00001 diff --git a/sound/direct_sound_samples/cries/kleavor.aif b/sound/direct_sound_samples/cries/kleavor.aif new file mode 100644 index 0000000000000000000000000000000000000000..1052cabd3a570ac77529f99bc69c3f5f6c35f9c8 GIT binary patch literal 66940 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 literal 0 HcmV?d00001 diff --git a/sound/direct_sound_samples/cries/overqwil.aif b/sound/direct_sound_samples/cries/overqwil.aif new file mode 100644 index 0000000000000000000000000000000000000000..56b3d97558e473a68ca83db893f2800830475b4a GIT binary patch literal 50784 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 literal 0 HcmV?d00001 diff --git a/sound/direct_sound_samples/cries/ursaluna.aif b/sound/direct_sound_samples/cries/ursaluna.aif new file mode 100644 index 0000000000000000000000000000000000000000..7f054dc5cb433cffeeb5c786b91daf1171b2469c GIT binary patch literal 59604 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 literal 0 HcmV?d00001 From 23272074bf18017142b733445e650c59ad77d378 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Thu, 23 Feb 2023 09:53:57 +0100 Subject: [PATCH 091/428] fix uninitialized ai modifier variable in ai calc damage --- src/battle_ai_util.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 531a4aa6b754..4641ba2cdd77 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -802,6 +802,7 @@ s32 AI_CalcDamage(u16 move, u8 battlerAtk, u8 battlerDef, u8 *typeEffectiveness, } else { + effectivenessMultiplier = CalcTypeEffectivenessMultiplier(move, moveType, battlerAtk, battlerDef, FALSE); dmg = 0; } @@ -1166,7 +1167,7 @@ s32 AI_GetAbility(u32 battlerId) // We've had ability overwritten by e.g. Worry Seed. It is not part of AI_PARTY in case of switching if (gBattleStruct->overwrittenAbilities[battlerId]) return gBattleStruct->overwrittenAbilities[battlerId]; - + // The AI knows its own ability. if (IsBattlerAIControlled(battlerId)) return knownAbility; From 3ff8c95c4eac9c1cb92569e29a0109f4fe07bc43 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Thu, 23 Feb 2023 10:53:55 +0100 Subject: [PATCH 092/428] add meltan melmetal teachable moves --- src/data/pokemon/teachable_learnsets.h | 56 ++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/src/data/pokemon/teachable_learnsets.h b/src/data/pokemon/teachable_learnsets.h index 19b22d9b3d4b..746aeb9b4c7e 100644 --- a/src/data/pokemon/teachable_learnsets.h +++ b/src/data/pokemon/teachable_learnsets.h @@ -30118,11 +30118,67 @@ static const u16 sZeraoraTeachableLearnset[] = { }; static const u16 sMeltanTeachableLearnset[] = { + MOVE_HEADBUTT, + MOVE_REST, + MOVE_PROTECT, + MOVE_SUBSTITUTE, + MOVE_THUNDER_WAVE, + MOVE_TOXIC, + MOVE_THUNDERBOLT, + MOVE_FLASH_CANNON, + MOVE_SNORE, + MOVE_FACADE, + MOVE_ROUND, + MOVE_ENDURE, + MOVE_SLEEP_TALK, + MOVE_IRON_DEFENSE, + MOVE_GYRO_BALL, + MOVE_STEEL_BEAM, MOVE_HIDDEN_POWER, MOVE_UNAVAILABLE, }; static const u16 sMelmetalTeachableLearnset[] = { + MOVE_HEADBUTT, + MOVE_REST, + MOVE_PROTECT, + MOVE_SUBSTITUTE, + MOVE_FACADE, + MOVE_BRICK_BREAK, + MOVE_THUNDER_WAVE, + MOVE_ROCK_SLIDE, + MOVE_THUNDER_PUNCH, + MOVE_TOXIC, + MOVE_ICE_PUNCH, + MOVE_THUNDERBOLT, + MOVE_THUNDER, + MOVE_EARTHQUAKE, + MOVE_SELF_DESTRUCT, + MOVE_SOLAR_BEAM, + MOVE_HYPER_BEAM, + MOVE_SUPERPOWER, + MOVE_FLASH_CANNON, + MOVE_ICE_BEAM, + MOVE_MEGA_PUNCH, + MOVE_MEGA_KICK, + MOVE_GIGA_IMPACT, + MOVE_SNORE, + MOVE_ROCK_TOMB, + MOVE_ROUND, + MOVE_ELECTRIC_TERRAIN, + MOVE_BRUTAL_SWING, + MOVE_BODY_SLAM, + MOVE_ENDURE, + MOVE_SLEEP_TALK, + MOVE_IRON_DEFENSE, + MOVE_GYRO_BALL, + MOVE_IRON_HEAD, + MOVE_HEAVY_SLAM, + MOVE_DARKEST_LARIAT, + MOVE_HIGH_HORSEPOWER, + MOVE_BODY_PRESS, + MOVE_STEEL_BEAM, + MOVE_STEEL_ROLLER, MOVE_HIDDEN_POWER, MOVE_UNAVAILABLE, }; From a870ec3c2295cdb11afac73a17308d70ed8286f6 Mon Sep 17 00:00:00 2001 From: Alex Date: Thu, 23 Feb 2023 15:20:12 +0100 Subject: [PATCH 093/428] enamorus_t cry, basculegionf sprite, new typhlosion back sprite --- graphics/pokemon/basculegion/female/back.png | Bin 0 -> 633 bytes graphics/pokemon/basculegion/female/front.png | Bin 0 -> 928 bytes .../{iconf.png => female/icon.png} | Bin .../pokemon/basculegion/female/normal.pal | 19 +++ graphics/pokemon/basculegion/female/shiny.pal | 19 +++ graphics/pokemon/typhlosion/hisuian/back.png | Bin 767 -> 932 bytes include/constants/species.h | 5 +- include/graphics.h | 10 +- sound/cry_tables.inc | 4 +- sound/direct_sound_data.inc | 3 +- .../cries/enamorus_therian.aif | Bin 0 -> 178022 bytes src/data/graphics/pokemon.h | 12 +- .../pokemon/form_species_table_pointers.h | 3 + src/data/pokemon/form_species_tables.h | 6 + src/data/pokemon/level_up_learnset_pointers.h | 1 + src/data/pokemon/species_info.h | 25 +++- .../pokemon/teachable_learnset_pointers.h | 1 + .../pokemon_graphics/back_pic_coordinates.h | 4 +- src/data/pokemon_graphics/back_pic_table.h | 2 +- src/data/pokemon_graphics/front_pic_anims.h | 1 + .../pokemon_graphics/front_pic_coordinates.h | 134 +++++++++--------- src/data/pokemon_graphics/front_pic_table.h | 2 +- src/data/pokemon_graphics/palette_table.h | 2 +- .../pokemon_graphics/shiny_palette_table.h | 4 +- src/data/text/species_names.h | 1 + src/pokemon.c | 1 + src/pokemon_icon.c | 4 +- 27 files changed, 172 insertions(+), 91 deletions(-) create mode 100755 graphics/pokemon/basculegion/female/back.png create mode 100755 graphics/pokemon/basculegion/female/front.png rename graphics/pokemon/basculegion/{iconf.png => female/icon.png} (100%) create mode 100755 graphics/pokemon/basculegion/female/normal.pal create mode 100755 graphics/pokemon/basculegion/female/shiny.pal mode change 100644 => 100755 graphics/pokemon/typhlosion/hisuian/back.png create mode 100644 sound/direct_sound_samples/cries/enamorus_therian.aif diff --git a/graphics/pokemon/basculegion/female/back.png b/graphics/pokemon/basculegion/female/back.png new file mode 100755 index 0000000000000000000000000000000000000000..a652e2fa53525cb97b3484ca6d63b62320d56980 GIT binary patch literal 633 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 z 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
  • 8X~RQFZ2+bGB3JOZ6pL=^CZ#sb-0Gje3{vrR|I7PPh~J*6XtFwX*Fh z#}OOC>NjguYh)pnM1wQ{?AJW!z4LABHBS_0)PLI!1y+TJKyJg|1}9pzwhHgT;Mc&? z@H+5iumf?6aFUY5*vO;Bk560??+`4HP9e*Zt??=*7`F)=0(`@)W-my5meDt(SNf>r zuY&BP)hUY-uO_VG&Lpfu2q6WKHz++Zn|uSq0Pl%52t9QdIUc&l25TUj;q#$uLyKMC z9ABf1szG{^PNl3C&l7Q^2ekc7KWs|N1^p2vwqta?wre_yn{_6OpZuWK0?p8KN>n_?P-IpW>Wpw#C9=#`mE-)KkX8c0#obw>?1f5B8?Gk2szfXP7Kr zNl+e8d4+bgalMA6f@vOT(lrOvSt7SkE3Y?2+&2Q7z{|1ei1ui|_$okQ

    Oi^b52O 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%0D7RT!r%teDz#*_4 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 PU+ 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 xd=>_fO~*!fLw{APJXXwELL Date: Thu, 23 Feb 2023 11:43:40 -0300 Subject: [PATCH 094/428] Document the 2 different sText_GotchaPkmnCaught --- data/battle_scripts_2.s | 4 ++-- include/constants/battle_string_ids.h | 4 ++-- src/battle_message.c | 8 ++++---- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/data/battle_scripts_2.s b/data/battle_scripts_2.s index b7f0f693fb7a..954509cf563e 100644 --- a/data/battle_scripts_2.s +++ b/data/battle_scripts_2.s @@ -65,7 +65,7 @@ BattleScript_SuccessBallThrow:: jumpifhalfword CMP_EQUAL, gLastUsedItem, ITEM_SAFARI_BALL, BattleScript_PrintCaughtMonInfo incrementgamestat GAME_STAT_POKEMON_CAPTURES BattleScript_PrintCaughtMonInfo:: - printstring STRINGID_GOTCHAPKMNCAUGHT + printstring STRINGID_GOTCHAPKMNCAUGHTPLAYER trysetcaughtmondexflags BattleScript_TryNicknameCaughtMon printstring STRINGID_PKMNDATAADDEDTODEX waitstate @@ -87,7 +87,7 @@ BattleScript_SuccessBallThrowEnd:: finishturn BattleScript_WallyBallThrow:: - printstring STRINGID_GOTCHAPKMNCAUGHT2 + printstring STRINGID_GOTCHAPKMNCAUGHTWALLY setbyte gBattleOutcome, B_OUTCOME_CAUGHT finishturn diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index ae18b61ef282..b34cf6ce13e1 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -264,8 +264,8 @@ #define STRINGID_ITAPPEAREDCAUGHT 264 #define STRINGID_AARGHALMOSTHADIT 265 #define STRINGID_SHOOTSOCLOSE 266 -#define STRINGID_GOTCHAPKMNCAUGHT 267 -#define STRINGID_GOTCHAPKMNCAUGHT2 268 +#define STRINGID_GOTCHAPKMNCAUGHTPLAYER 267 +#define STRINGID_GOTCHAPKMNCAUGHTWALLY 268 #define STRINGID_GIVENICKNAMECAPTURED 269 #define STRINGID_PKMNSENTTOPC 270 #define STRINGID_PKMNDATAADDEDTODEX 271 diff --git a/src/battle_message.c b/src/battle_message.c index 586fdd268bac..f02e38f13445 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -469,8 +469,8 @@ static const u8 sText_PkmnBrokeFree[] = _("Oh, no!\nThe POKéMON broke free!"); static const u8 sText_ItAppearedCaught[] = _("Aww!\nIt appeared to be caught!"); static const u8 sText_AarghAlmostHadIt[] = _("Aargh!\nAlmost had it!"); static const u8 sText_ShootSoClose[] = _("Shoot!\nIt was so close, too!"); -static const u8 sText_GotchaPkmnCaught[] = _("Gotcha!\n{B_OPPONENT_MON1_NAME} was caught!{WAIT_SE}{PLAY_BGM MUS_CAUGHT}\p"); -static const u8 sText_GotchaPkmnCaught2[] = _("Gotcha!\n{B_OPPONENT_MON1_NAME} was caught!{WAIT_SE}{PLAY_BGM MUS_CAUGHT}{PAUSE 127}"); +static const u8 sText_GotchaPkmnCaughtPlayer[] = _("Gotcha!\n{B_OPPONENT_MON1_NAME} was caught!{WAIT_SE}{PLAY_BGM MUS_CAUGHT}\p"); +static const u8 sText_GotchaPkmnCaughtWally[] = _("Gotcha!\n{B_OPPONENT_MON1_NAME} was caught!{WAIT_SE}{PLAY_BGM MUS_CAUGHT}{PAUSE 127}"); static const u8 sText_GiveNicknameCaptured[] = _("Give a nickname to the\ncaptured {B_OPPONENT_MON1_NAME}?"); static const u8 sText_PkmnSentToPC[] = _("{B_OPPONENT_MON1_NAME} was sent to\n{B_PC_CREATOR_NAME} PC."); static const u8 sText_Someones[] = _("someone's"); @@ -771,8 +771,8 @@ const u8 * const gBattleStringsTable[BATTLESTRINGS_COUNT - BATTLESTRINGS_TABLE_S [STRINGID_ITAPPEAREDCAUGHT - BATTLESTRINGS_TABLE_START] = sText_ItAppearedCaught, [STRINGID_AARGHALMOSTHADIT - BATTLESTRINGS_TABLE_START] = sText_AarghAlmostHadIt, [STRINGID_SHOOTSOCLOSE - BATTLESTRINGS_TABLE_START] = sText_ShootSoClose, - [STRINGID_GOTCHAPKMNCAUGHT - BATTLESTRINGS_TABLE_START] = sText_GotchaPkmnCaught, - [STRINGID_GOTCHAPKMNCAUGHT2 - BATTLESTRINGS_TABLE_START] = sText_GotchaPkmnCaught2, + [STRINGID_GOTCHAPKMNCAUGHTPLAYER - BATTLESTRINGS_TABLE_START] = sText_GotchaPkmnCaughtPlayer, + [STRINGID_GOTCHAPKMNCAUGHTWALLY - BATTLESTRINGS_TABLE_START] = sText_GotchaPkmnCaughtWally, [STRINGID_GIVENICKNAMECAPTURED - BATTLESTRINGS_TABLE_START] = sText_GiveNicknameCaptured, [STRINGID_PKMNSENTTOPC - BATTLESTRINGS_TABLE_START] = sText_PkmnSentToPC, [STRINGID_PKMNDATAADDEDTODEX - BATTLESTRINGS_TABLE_START] = sText_PkmnDataAddedToDex, From d330ca051a80899fcdde8e4c884fa79802fd57ad Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Thu, 23 Feb 2023 11:44:23 -0300 Subject: [PATCH 095/428] Document music usage to make it easier to search for a specific track --- charmap.txt | 2 +- data/maps/Route111/scripts.inc | 2 +- include/constants/songs.h | 98 +++++++++++++++++----------------- src/overworld.c | 2 +- 4 files changed, 52 insertions(+), 52 deletions(-) diff --git a/charmap.txt b/charmap.txt index 725f5d1b91a7..8c886bdf0c10 100644 --- a/charmap.txt +++ b/charmap.txt @@ -795,7 +795,7 @@ MUS_LITTLEROOT = 95 01 MUS_MT_CHIMNEY = 96 01 MUS_ENCOUNTER_FEMALE = 97 01 MUS_LILYCOVE = 98 01 -MUS_ROUTE111 = 99 01 +MUS_ROUTE111_DESERT = 99 01 MUS_HELP = 9A 01 MUS_UNDERWATER = 9B 01 MUS_VICTORY_TRAINER = 9C 01 diff --git a/data/maps/Route111/scripts.inc b/data/maps/Route111/scripts.inc index f97326c54363..44372da37d91 100644 --- a/data/maps/Route111/scripts.inc +++ b/data/maps/Route111/scripts.inc @@ -260,7 +260,7 @@ Route111_EventScript_SunTrigger:: Route111_EventScript_SandstormTrigger:: setweather WEATHER_SANDSTORM - fadenewbgm MUS_ROUTE111 + fadenewbgm MUS_ROUTE111_DESERT doweather end diff --git a/include/constants/songs.h b/include/constants/songs.h index d6a4184959cd..ffa5c3df0b34 100644 --- a/include/constants/songs.h +++ b/include/constants/songs.h @@ -278,47 +278,47 @@ #define SE_SUDOWOODO_SHAKE 269 // SE_USSOKI // Music -#define MUS_LITTLEROOT_TEST 350 // MUS_TETSUJI -#define MUS_GSC_ROUTE38 351 // MUS_FIELD13 +#define MUS_LITTLEROOT_TEST 350 // MUS_TETSUJI // Unused, likely a test track. +#define MUS_GSC_ROUTE38 351 // MUS_FIELD13 // Unused, likely a test track. #define MUS_CAUGHT 352 // MUS_KACHI22 #define MUS_VICTORY_WILD 353 // MUS_KACHI2 -#define MUS_VICTORY_GYM_LEADER 354 // MUS_KACHI3 +#define MUS_VICTORY_GYM_LEADER 354 // MUS_KACHI3 // Also used in Frontier Brain victories. #define MUS_VICTORY_LEAGUE 355 // MUS_KACHI5 -#define MUS_C_COMM_CENTER 356 // MUS_PCC -#define MUS_GSC_PEWTER 357 // MUS_NIBI -#define MUS_C_VS_LEGEND_BEAST 358 // MUS_SUIKUN -#define MUS_ROUTE101 359 // MUS_DOORO1 -#define MUS_ROUTE110 360 // MUS_DOORO_X1 -#define MUS_ROUTE120 361 // MUS_DOORO_X3 -#define MUS_PETALBURG 362 // MUS_MACHI_S2 -#define MUS_OLDALE 363 // MUS_MACHI_S4 +#define MUS_C_COMM_CENTER 356 // MUS_PCC // Unused, likely a test track. +#define MUS_GSC_PEWTER 357 // MUS_NIBI // Used in unused Contest Halls. +#define MUS_C_VS_LEGEND_BEAST 358 // MUS_SUIKUN // Unused, likely a test track. +#define MUS_ROUTE101 359 // MUS_DOORO1 // Also used in Routes 102 and 103. +#define MUS_ROUTE110 360 // MUS_DOORO_X1 // Also used in Routes 112, 114, 117, 111's non-desert section and 118's west half. +#define MUS_ROUTE120 361 // MUS_DOORO_X3 // Also used in Routes 121, 124, 125, 126, 127 and 128. +#define MUS_PETALBURG 362 // MUS_MACHI_S2 // Also used in Mr. Briney's House and Pretty Petal Flower Shop. +#define MUS_OLDALE 363 // MUS_MACHI_S4 // Also used in Lavaridge Town. #define MUS_GYM 364 // MUS_GIM #define MUS_SURF 365 // MUS_NAMINORI -#define MUS_PETALBURG_WOODS 366 // MUS_DAN01 +#define MUS_PETALBURG_WOODS 366 // MUS_DAN01 // Also used in Artisan Cave, Fiery Path, Granite Cave, Jagged Pass, Marine Cave, Rusturf Tunnel, Scorched Slab and Terra Cave. #define MUS_LEVEL_UP 367 // MUS_FANFA1 #define MUS_HEAL 368 // MUS_ME_ASA #define MUS_OBTAIN_BADGE 369 // MUS_ME_BACHI #define MUS_OBTAIN_ITEM 370 // MUS_FANFA4 -#define MUS_EVOLVED 371 // MUS_FANFA5 +#define MUS_EVOLVED 371 // MUS_FANFA5 // Also used in egg hatching, trades and upon catching. #define MUS_OBTAIN_TMHM 372 // MUS_ME_WAZA -#define MUS_LILYCOVE_MUSEUM 373 // MUS_BIJYUTU -#define MUS_ROUTE122 374 // MUS_DOORO_X4 +#define MUS_LILYCOVE_MUSEUM 373 // MUS_BIJYUTU // Also used in the Battle Frontier's Ranking Hall. +#define MUS_ROUTE122 374 // MUS_DOORO_X4 // Also used in Route 123 and Birch's intro speech. #define MUS_OCEANIC_MUSEUM 375 // MUS_FUNE_KAN -#define MUS_EVOLUTION_INTRO 376 // MUS_ME_SHINKA -#define MUS_EVOLUTION 377 // MUS_SHINKA +#define MUS_EVOLUTION_INTRO 376 // MUS_ME_SHINKA // Also used in egg hatching. +#define MUS_EVOLUTION 377 // MUS_SHINKA // Also used in egg hatching and trades. #define MUS_MOVE_DELETED 378 // MUS_ME_WASURE #define MUS_ENCOUNTER_GIRL 379 // MUS_SYOUJOEYE #define MUS_ENCOUNTER_MALE 380 // MUS_BOYEYE -#define MUS_ABANDONED_SHIP 381 // MUS_DAN02 -#define MUS_FORTREE 382 // MUS_MACHI_S3 +#define MUS_ABANDONED_SHIP 381 // MUS_DAN02 // Also used in Faraway and Southern Islands. +#define MUS_FORTREE 382 // MUS_MACHI_S3 // Also used in Secret Bases and the Safari Zone's entrance. #define MUS_BIRCH_LAB 383 // MUS_ODAMAKI -#define MUS_B_TOWER_RS 384 // MUS_B_TOWER +#define MUS_B_TOWER_RS 384 // MUS_B_TOWER // Used in Battle Tents, Trainer Hill and Battle Frontier's lounges and Exchange Service Corner. #define MUS_ENCOUNTER_SWIMMER 385 // MUS_SWIMEYE -#define MUS_CAVE_OF_ORIGIN 386 // MUS_DAN03 +#define MUS_CAVE_OF_ORIGIN 386 // MUS_DAN03 // Also used in Meteor Falls. #define MUS_OBTAIN_BERRY 387 // MUS_ME_KINOMI #define MUS_AWAKEN_LEGEND 388 // MUS_ME_TAMA -#define MUS_SLOTS_JACKPOT 389 // MUS_ME_B_BIG -#define MUS_SLOTS_WIN 390 // MUS_ME_B_SMALL +#define MUS_SLOTS_JACKPOT 389 // MUS_ME_B_BIG // Also used in the Roulette. +#define MUS_SLOTS_WIN 390 // MUS_ME_B_SMALL // Also used in the Roulette. #define MUS_TOO_BAD 391 // MUS_ME_ZANNEN #define MUS_ROULETTE 392 // MUS_BD_TIME #define MUS_LINK_CONTEST_P1 393 // MUS_TEST1 @@ -327,17 +327,17 @@ #define MUS_LINK_CONTEST_P4 396 // MUS_TEST4 #define MUS_ENCOUNTER_RICH 397 // MUS_TEST #define MUS_VERDANTURF 398 // MUS_GOMACHI0 -#define MUS_RUSTBORO 399 // MUS_GOTOWN -#define MUS_POKE_CENTER 400 // MUS_POKECEN -#define MUS_ROUTE104 401 // MUS_NEXTROAD -#define MUS_ROUTE119 402 // MUS_GRANROAD +#define MUS_RUSTBORO 399 // MUS_GOTOWN // Also used in Mauville City, Mossdeep City, Daycare, Weather Institute and several Route houses. +#define MUS_POKE_CENTER 400 // MUS_POKECEN // Also used in the Pokémon League's lobby. +#define MUS_ROUTE104 401 // MUS_NEXTROAD // Also used in Routes 105, 106, 107, 108, 109, 115 and 116. +#define MUS_ROUTE119 402 // MUS_GRANROAD // Also used in Routes 129, 130, 131, 132, 133, 134 and 118's east half. #define MUS_CYCLING 403 // MUS_CYCLING -#define MUS_POKE_MART 404 // MUS_FRIENDLY +#define MUS_POKE_MART 404 // MUS_FRIENDLY // Also used in Lilycove's Department Store. #define MUS_LITTLEROOT 405 // MUS_MISHIRO -#define MUS_MT_CHIMNEY 406 // MUS_TOZAN +#define MUS_MT_CHIMNEY 406 // MUS_TOZAN // Also used in Desert Underpass, Mirage Tower, Seafloor Cavern and Sky Pillar. #define MUS_ENCOUNTER_FEMALE 407 // MUS_GIRLEYE -#define MUS_LILYCOVE 408 // MUS_MINAMO -#define MUS_ROUTE111 409 // MUS_ASHROAD +#define MUS_LILYCOVE 408 // MUS_MINAMO // Also used in Pacifidlog Town and the Diving Treasure Hunter's house. +#define MUS_ROUTE111_DESERT 409 // MUS_ASHROAD #define MUS_HELP 410 // MUS_EVENT0 #define MUS_UNDERWATER 411 // MUS_DEEPDEEP #define MUS_VICTORY_TRAINER 412 // MUS_KACHI1 @@ -350,29 +350,29 @@ #define MUS_ENCOUNTER_AQUA 419 // MUS_AQA_0 #define MUS_FOLLOW_ME 420 // MUS_TSURETEK #define MUS_ENCOUNTER_BRENDAN 421 // MUS_BOY_SUP -#define MUS_EVER_GRANDE 422 // MUS_RAINBOW +#define MUS_EVER_GRANDE 422 // MUS_RAINBOW // Also used in link rooms. #define MUS_ENCOUNTER_SUSPICIOUS 423 // MUS_AYASII #define MUS_VICTORY_AQUA_MAGMA 424 // MUS_KACHI4 #define MUS_CABLE_CAR 425 // MUS_ROPEWAY #define MUS_GAME_CORNER 426 // MUS_CASINO -#define MUS_DEWFORD 427 // MUS_HIGHTOWN +#define MUS_DEWFORD 427 // MUS_HIGHTOWN // Also used in Route 109's Seashore house. #define MUS_SAFARI_ZONE 428 // MUS_SAFARI -#define MUS_VICTORY_ROAD 429 // MUS_C_ROAD +#define MUS_VICTORY_ROAD 429 // MUS_C_ROAD // Also used in Pokémon League's E4/Champion rooms and halls. #define MUS_AQUA_MAGMA_HIDEOUT 430 // MUS_AJITO #define MUS_SAILING 431 // MUS_M_BOAT -#define MUS_MT_PYRE 432 // MUS_M_DUNGON -#define MUS_SLATEPORT 433 // MUS_FINECITY +#define MUS_MT_PYRE 432 // MUS_M_DUNGON // Also used in New Mauville and Shoal Cave. +#define MUS_SLATEPORT 433 // MUS_FINECITY // Also used in Cycling Road's entrances. #define MUS_MT_PYRE_EXTERIOR 434 // MUS_MACHUPI #define MUS_SCHOOL 435 // MUS_P_SCHOOL #define MUS_HALL_OF_FAME 436 // MUS_DENDOU -#define MUS_FALLARBOR 437 // MUS_TONEKUSA -#define MUS_SEALED_CHAMBER 438 // MUS_MABOROSI +#define MUS_FALLARBOR 437 // MUS_TONEKUSA // Also used in Route 114's houses. +#define MUS_SEALED_CHAMBER 438 // MUS_MABOROSI // Also used in Ancient Tomb, Desert Ruins and Island Cave. #define MUS_CONTEST_WINNER 439 // MUS_CON_FAN #define MUS_CONTEST 440 // MUS_CONTEST0 #define MUS_ENCOUNTER_MAGMA 441 // MUS_MGM0 #define MUS_INTRO_BATTLE 442 // MUS_T_BATTLE -#define MUS_ABNORMAL_WEATHER 443 // MUS_OOAME (Replaces MUS_WEATHER_KYOGRE from R/S) -#define MUS_WEATHER_GROUDON 444 // MUS_HIDERI (Unused, from R/S) +#define MUS_ABNORMAL_WEATHER 443 // MUS_OOAME // Replaces MUS_WEATHER_KYOGRE from R/S. +#define MUS_WEATHER_GROUDON 444 // MUS_HIDERI // Unused from R/S. #define MUS_SOOTOPOLIS 445 // MUS_RUNECITY #define MUS_CONTEST_RESULTS 446 // MUS_CON_K #define MUS_HALL_OF_FAME_ROOM 447 // MUS_EIKOU_R @@ -381,7 +381,7 @@ #define MUS_ENCOUNTER_ELITE_FOUR 450 // MUS_SITENNOU #define MUS_ENCOUNTER_HIKER 451 // MUS_YAMA_EYE #define MUS_CONTEST_LOBBY 452 // MUS_CONLOBBY -#define MUS_ENCOUNTER_INTERVIEWER 453 // MUS_INTER_V +#define MUS_ENCOUNTER_INTERVIEWER 453 // MUS_INTER_V // Also used during Petalburg City report at the beginning of the game. #define MUS_ENCOUNTER_CHAMPION 454 // MUS_DAIGO #define MUS_CREDITS 455 // MUS_THANKFOR #define MUS_END 456 // MUS_END @@ -398,7 +398,7 @@ #define MUS_B_DOME 467 // MUS_B_DOME #define MUS_B_PIKE 468 // MUS_B_TUBE #define MUS_B_FACTORY 469 // MUS_B_FACTORY -#define MUS_VS_RAYQUAZA 470 // MUS_VS_REKKU (Identical to MUS_VS_KYOGRE_GROUDON) +#define MUS_VS_RAYQUAZA 470 // MUS_VS_REKKU // Identical to MUS_VS_KYOGRE_GROUDON. #define MUS_VS_FRONTIER_BRAIN 471 // MUS_VS_FRONT #define MUS_VS_MEW 472 // MUS_VS_MEW #define MUS_B_DOME_LOBBY 473 // MUS_B_DOME1 @@ -451,9 +451,9 @@ #define MUS_RG_SILPH 519 // MUS_RG_SHIRUHU #define MUS_RG_FUCHSIA 520 // MUS_RG_HANADA #define MUS_RG_CELADON 521 // MUS_RG_TAMAMUSI -#define MUS_RG_VICTORY_TRAINER 522 // MUS_RG_WIN_TRE (Identical to MUS_VICTORY_TRAINER) -#define MUS_RG_VICTORY_WILD 523 // MUS_RG_WIN_YASEI (Identical to MUS_VICTORY_WILD) -#define MUS_RG_VICTORY_GYM_LEADER 524 // MUS_RG_WIN_GYM (Identical to MUS_VICTORY_GYM_LEADER) +#define MUS_RG_VICTORY_TRAINER 522 // MUS_RG_WIN_TRE // Identical to MUS_VICTORY_TRAINER. +#define MUS_RG_VICTORY_WILD 523 // MUS_RG_WIN_YASEI // Identical to MUS_VICTORY_WILD. +#define MUS_RG_VICTORY_GYM_LEADER 524 // MUS_RG_WIN_GYM // Identical to MUS_VICTORY_GYM_LEADER. #define MUS_RG_VERMILLION 525 // MUS_RG_KUCHIBA #define MUS_RG_PEWTER 526 // MUS_RG_NIBI #define MUS_RG_ENCOUNTER_RIVAL 527 // MUS_RG_RIVAL1 @@ -472,11 +472,11 @@ #define MUS_RG_NET_CENTER 540 // MUS_RG_NETWORK #define MUS_RG_MYSTERY_GIFT 541 // MUS_RG_OKURIMONO #define MUS_RG_BERRY_PICK 542 // MUS_RG_KINOMIKUI -#define MUS_RG_SEVII_CAVE 543 // MUS_RG_NANADUNGEON (Identical to MUS_RG_MT_MOON) -#define MUS_RG_TEACHY_TV_SHOW 544 // MUS_RG_OSHIE_TV (Identical to MUS_RG_FOLLOW_ME) +#define MUS_RG_SEVII_CAVE 543 // MUS_RG_NANADUNGEON // Identical to MUS_RG_MT_MOON. +#define MUS_RG_TEACHY_TV_SHOW 544 // MUS_RG_OSHIE_TV // Identical to MUS_RG_FOLLOW_ME. #define MUS_RG_SEVII_ROUTE 545 // MUS_RG_NANASHIMA -#define MUS_RG_SEVII_DUNGEON 546 // MUS_RG_NANAISEKI (Identical to MUS_RG_VIRIDIAN_FOREST) -#define MUS_RG_SEVII_123 547 // MUS_RG_NANA123 (Identical to MUS_RG_PEWTER) +#define MUS_RG_SEVII_DUNGEON 546 // MUS_RG_NANAISEKI // Identical to MUS_RG_VIRIDIAN_FOREST. +#define MUS_RG_SEVII_123 547 // MUS_RG_NANA123 // Identical to MUS_RG_PEWTER #define MUS_RG_SEVII_45 548 // MUS_RG_NANA45 #define MUS_RG_SEVII_67 549 // MUS_RG_NANA67 #define MUS_RG_POKE_FLUTE 550 // MUS_RG_POKEFUE diff --git a/src/overworld.c b/src/overworld.c index c3ce7c91253c..c9258e05e8f4 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -1104,7 +1104,7 @@ u16 GetCurrLocationDefaultMusic(void) if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(ROUTE111) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROUTE111) && GetSavedWeather() == WEATHER_SANDSTORM) - return MUS_ROUTE111; + return MUS_ROUTE111_DESERT; music = GetLocationMusic(&gSaveBlock1Ptr->location); if (music != MUS_ROUTE118) From db02cd05f6f68397ec37eed11433aeaa8ddd7b62 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Fri, 24 Feb 2023 00:09:13 -0300 Subject: [PATCH 096/428] Purged the bKGD warning once and for all --- graphics/battle_anims/sprites/new/teapot.png | Bin 881 -> 761 bytes .../battle_anims/sprites/omega_symbol.png | Bin 349 -> 273 bytes graphics/battle_interface/alpha_indicator.png | Bin 266 -> 199 bytes graphics/battle_interface/omega_indicator.png | Bin 271 -> 198 bytes graphics/battle_interface/z_move_trigger.png | Bin 351 -> 275 bytes graphics/berries/babiri.png | Bin 483 -> 399 bytes graphics/berries/charti.png | Bin 430 -> 364 bytes graphics/berries/chilan.png | Bin 469 -> 365 bytes graphics/berries/chople.png | Bin 498 -> 406 bytes graphics/berries/coba.png | Bin 402 -> 315 bytes graphics/berries/colbur.png | Bin 435 -> 382 bytes graphics/berries/haban.png | Bin 466 -> 373 bytes graphics/berries/kasib.png | Bin 459 -> 364 bytes graphics/berries/kebia.png | Bin 500 -> 398 bytes graphics/berries/kee.png | Bin 589 -> 479 bytes graphics/berries/micle.png | Bin 383 -> 291 bytes graphics/berries/occa.png | Bin 434 -> 345 bytes graphics/berries/passho.png | Bin 543 -> 444 bytes graphics/berries/rindo.png | Bin 440 -> 356 bytes graphics/berries/roseli.png | Bin 576 -> 489 bytes graphics/berries/rowap.png | Bin 565 -> 471 bytes graphics/berries/shuca.png | Bin 412 -> 326 bytes graphics/berries/tanga.png | Bin 506 -> 419 bytes graphics/berries/wacan.png | Bin 457 -> 376 bytes graphics/berries/yache.png | Bin 514 -> 430 bytes graphics/expansion_intro/powered_by.png | Bin 336 -> 250 bytes graphics/items/icons/ability_capsule.png | Bin 349 -> 254 bytes graphics/items/icons/ability_patch.png | Bin 312 -> 243 bytes graphics/items/icons/absorb_bulb.png | Bin 365 -> 271 bytes graphics/items/icons/air_balloon.png | Bin 343 -> 248 bytes graphics/items/icons/armor_fossil.png | Bin 457 -> 361 bytes graphics/items/icons/babiri_berry.png | Bin 391 -> 288 bytes graphics/items/icons/big_malasada.png | Bin 393 -> 298 bytes graphics/items/icons/big_root.png | Bin 415 -> 334 bytes graphics/items/icons/black_apricorn.png | Bin 368 -> 271 bytes graphics/items/icons/black_sludge.png | Bin 364 -> 279 bytes graphics/items/icons/blue_apricorn.png | Bin 368 -> 271 bytes graphics/items/icons/bug_gem.png | Bin 353 -> 252 bytes graphics/items/icons/bug_memory.png | Bin 423 -> 324 bytes graphics/items/icons/burn_drive.png | Bin 342 -> 258 bytes graphics/items/icons/cell_battery.png | Bin 289 -> 207 bytes graphics/items/icons/charti_berry.png | Bin 359 -> 264 bytes graphics/items/icons/chilan_berry.png | Bin 377 -> 271 bytes graphics/items/icons/chill_drive.png | Bin 342 -> 258 bytes graphics/items/icons/choice_scarf.png | Bin 447 -> 347 bytes graphics/items/icons/choice_specs.png | Bin 369 -> 277 bytes graphics/items/icons/chople_berry.png | Bin 388 -> 287 bytes graphics/items/icons/coba_berry.png | Bin 370 -> 271 bytes graphics/items/icons/colbur_berry.png | Bin 376 -> 295 bytes graphics/items/icons/cover_fossil.png | Bin 418 -> 317 bytes graphics/items/icons/custap_berry.png | Bin 406 -> 304 bytes graphics/items/icons/damp_rock.png | Bin 429 -> 329 bytes graphics/items/icons/dark_gem.png | Bin 353 -> 251 bytes graphics/items/icons/dark_memory.png | Bin 419 -> 322 bytes graphics/items/icons/dawn_stone.png | Bin 375 -> 276 bytes graphics/items/icons/destiny_knot.png | Bin 396 -> 299 bytes graphics/items/icons/douse_drive.png | Bin 342 -> 258 bytes graphics/items/icons/draco_plate.png | Bin 355 -> 244 bytes graphics/items/icons/dragon_gem.png | Bin 353 -> 252 bytes graphics/items/icons/dragon_memory.png | Bin 420 -> 321 bytes graphics/items/icons/dread_plate.png | Bin 355 -> 244 bytes graphics/items/icons/dubious_disc.png | Bin 377 -> 279 bytes graphics/items/icons/dusk_stone.png | Bin 376 -> 272 bytes graphics/items/icons/earth_plate.png | Bin 355 -> 244 bytes graphics/items/icons/eject_button.png | Bin 370 -> 266 bytes graphics/items/icons/electirizer.png | Bin 371 -> 271 bytes graphics/items/icons/electric_gem.png | Bin 353 -> 252 bytes graphics/items/icons/electric_memory.png | Bin 421 -> 327 bytes graphics/items/icons/eviolite.png | Bin 317 -> 228 bytes graphics/items/icons/expert_belt.png | Bin 383 -> 292 bytes graphics/items/icons/fairy_gem.png | Bin 353 -> 252 bytes graphics/items/icons/fairy_memory.png | Bin 422 -> 326 bytes graphics/items/icons/fighting_gem.png | Bin 353 -> 252 bytes graphics/items/icons/fighting_memory.png | Bin 419 -> 321 bytes graphics/items/icons/fire_gem.png | Bin 353 -> 252 bytes graphics/items/icons/fire_memory.png | Bin 422 -> 321 bytes graphics/items/icons/fist_plate.png | Bin 355 -> 244 bytes graphics/items/icons/flame_plate.png | Bin 355 -> 244 bytes graphics/items/icons/float_stone.png | Bin 345 -> 251 bytes graphics/items/icons/flying_gem.png | Bin 353 -> 252 bytes graphics/items/icons/flying_memory.png | Bin 420 -> 324 bytes graphics/items/icons/focus_sash.png | Bin 392 -> 288 bytes graphics/items/icons/full_incense.png | Bin 409 -> 312 bytes graphics/items/icons/ghost_gem.png | Bin 353 -> 252 bytes graphics/items/icons/ghost_memory.png | Bin 421 -> 322 bytes graphics/items/icons/gracidea.png | Bin 446 -> 348 bytes graphics/items/icons/grass_gem.png | Bin 353 -> 252 bytes graphics/items/icons/grass_memory.png | Bin 421 -> 327 bytes graphics/items/icons/green_apricorn.png | Bin 368 -> 271 bytes graphics/items/icons/grip_claw.png | Bin 413 -> 304 bytes graphics/items/icons/griseous_orb.png | Bin 426 -> 322 bytes graphics/items/icons/ground_gem.png | Bin 353 -> 252 bytes graphics/items/icons/ground_memory.png | Bin 420 -> 321 bytes graphics/items/icons/haban_berry.png | Bin 401 -> 298 bytes graphics/items/icons/heat_rock.png | Bin 434 -> 324 bytes graphics/items/icons/ice_gem.png | Bin 353 -> 252 bytes graphics/items/icons/ice_memory.png | Bin 415 -> 316 bytes graphics/items/icons/ice_stone.png | Bin 422 -> 319 bytes graphics/items/icons/icicle_plate.png | Bin 355 -> 244 bytes graphics/items/icons/icy_rock.png | Bin 411 -> 315 bytes graphics/items/icons/insect_plate.png | Bin 355 -> 244 bytes graphics/items/icons/iron_ball.png | Bin 352 -> 252 bytes graphics/items/icons/iron_plate.png | Bin 355 -> 244 bytes graphics/items/icons/jaboca_berry.png | Bin 395 -> 298 bytes graphics/items/icons/jaw_fossil.png | Bin 444 -> 352 bytes graphics/items/icons/kasib_berry.png | Bin 403 -> 297 bytes graphics/items/icons/kebia_berry.png | Bin 393 -> 286 bytes graphics/items/icons/kee_berry.png | Bin 447 -> 339 bytes graphics/items/icons/lagging_tail.png | Bin 400 -> 296 bytes graphics/items/icons/life_orb.png | Bin 330 -> 239 bytes graphics/items/icons/light_clay.png | Bin 362 -> 268 bytes graphics/items/icons/lucarionite.png | Bin 333 -> 246 bytes graphics/items/icons/luck_incense.png | Bin 404 -> 307 bytes graphics/items/icons/luminous_moss.png | Bin 385 -> 288 bytes graphics/items/icons/lustrous_orb.png | Bin 458 -> 332 bytes graphics/items/icons/magmarizer.png | Bin 376 -> 279 bytes graphics/items/icons/maranga_berry.png | Bin 401 -> 294 bytes graphics/items/icons/meadow_plate.png | Bin 355 -> 244 bytes graphics/items/icons/metronome.png | Bin 356 -> 262 bytes graphics/items/icons/micle_berry.png | Bin 340 -> 235 bytes graphics/items/icons/mind_plate.png | Bin 355 -> 244 bytes graphics/items/icons/muscle_band.png | Bin 418 -> 318 bytes graphics/items/icons/normal_gem.png | Bin 353 -> 252 bytes graphics/items/icons/occa_berry.png | Bin 366 -> 262 bytes graphics/items/icons/odd_incense.png | Bin 402 -> 304 bytes graphics/items/icons/odd_keystone.png | Bin 395 -> 289 bytes graphics/items/icons/old_gateau.png | Bin 330 -> 228 bytes graphics/items/icons/oval_stone.png | Bin 364 -> 267 bytes graphics/items/icons/passho_berry.png | Bin 383 -> 289 bytes graphics/items/icons/payapa_berry.png | Bin 390 -> 293 bytes graphics/items/icons/pink_apricorn.png | Bin 368 -> 271 bytes graphics/items/icons/pink_nectar.png | Bin 379 -> 286 bytes graphics/items/icons/plume_fossil.png | Bin 393 -> 301 bytes graphics/items/icons/poison_gem.png | Bin 353 -> 252 bytes graphics/items/icons/poison_memory.png | Bin 419 -> 322 bytes graphics/items/icons/poke_radar.png | Bin 395 -> 299 bytes graphics/items/icons/power_anklet.png | Bin 415 -> 311 bytes graphics/items/icons/power_band.png | Bin 417 -> 309 bytes graphics/items/icons/power_belt.png | Bin 412 -> 308 bytes graphics/items/icons/power_bracer.png | Bin 401 -> 301 bytes graphics/items/icons/power_herb.png | Bin 353 -> 256 bytes graphics/items/icons/power_lens.png | Bin 428 -> 319 bytes graphics/items/icons/power_weight.png | Bin 404 -> 303 bytes graphics/items/icons/prism_scale.png | Bin 325 -> 228 bytes graphics/items/icons/protector.png | Bin 381 -> 277 bytes graphics/items/icons/psychic_gem.png | Bin 353 -> 252 bytes graphics/items/icons/psychic_memory.png | Bin 420 -> 325 bytes graphics/items/icons/pure_incense.png | Bin 401 -> 308 bytes graphics/items/icons/purple_nectar.png | Bin 379 -> 286 bytes graphics/items/icons/quick_powder.png | Bin 392 -> 296 bytes graphics/items/icons/rare_bone.png | Bin 331 -> 242 bytes graphics/items/icons/razor_claw.png | Bin 360 -> 264 bytes graphics/items/icons/razor_fang.png | Bin 342 -> 244 bytes graphics/items/icons/reaper_cloth.png | Bin 401 -> 306 bytes graphics/items/icons/red_apricorn.png | Bin 368 -> 271 bytes graphics/items/icons/red_card.png | Bin 311 -> 211 bytes graphics/items/icons/red_nectar.png | Bin 380 -> 288 bytes graphics/items/icons/rindo_berry.png | Bin 353 -> 260 bytes graphics/items/icons/ring_target.png | Bin 330 -> 245 bytes graphics/items/icons/rock_gem.png | Bin 353 -> 252 bytes graphics/items/icons/rock_incense.png | Bin 407 -> 310 bytes graphics/items/icons/rock_memory.png | Bin 414 -> 316 bytes graphics/items/icons/rocky_helmet.png | Bin 385 -> 289 bytes graphics/items/icons/rose_incense.png | Bin 408 -> 311 bytes graphics/items/icons/roseli_berry.png | Bin 400 -> 298 bytes graphics/items/icons/rowap_berry.png | Bin 440 -> 332 bytes graphics/items/icons/sachet.png | Bin 369 -> 275 bytes graphics/items/icons/safety_goggles.png | Bin 386 -> 288 bytes graphics/items/icons/sail_fossil.png | Bin 438 -> 332 bytes graphics/items/icons/shed_shell.png | Bin 393 -> 285 bytes graphics/items/icons/shiny_charm.png | Bin 356 -> 274 bytes graphics/items/icons/shiny_stone.png | Bin 390 -> 294 bytes graphics/items/icons/shock_drive.png | Bin 342 -> 258 bytes graphics/items/icons/shuca_berry.png | Bin 369 -> 275 bytes graphics/items/icons/skull_fossil.png | Bin 450 -> 347 bytes graphics/items/icons/sky_plate.png | Bin 355 -> 244 bytes graphics/items/icons/smooth_rock.png | Bin 427 -> 323 bytes graphics/items/icons/snowball.png | Bin 333 -> 242 bytes graphics/items/icons/splash_plate.png | Bin 352 -> 243 bytes graphics/items/icons/spooky_plate.png | Bin 355 -> 244 bytes graphics/items/icons/steel_gem.png | Bin 353 -> 251 bytes graphics/items/icons/steel_memory.png | Bin 419 -> 323 bytes graphics/items/icons/sticky_barb.png | Bin 332 -> 247 bytes graphics/items/icons/stone_plate.png | Bin 355 -> 244 bytes graphics/items/icons/sweet_heart.png | Bin 328 -> 235 bytes graphics/items/icons/tanga_berry.png | Bin 416 -> 310 bytes graphics/items/icons/toxic_orb.png | Bin 347 -> 259 bytes graphics/items/icons/toxic_plate.png | Bin 355 -> 244 bytes graphics/items/icons/wacan_berry.png | Bin 386 -> 283 bytes graphics/items/icons/water_gem.png | Bin 353 -> 252 bytes graphics/items/icons/water_memory.png | Bin 417 -> 320 bytes graphics/items/icons/wave_incense.png | Bin 400 -> 304 bytes graphics/items/icons/weakness_policy.png | Bin 316 -> 228 bytes graphics/items/icons/whipped_dream.png | Bin 392 -> 292 bytes graphics/items/icons/white_apricorn.png | Bin 367 -> 265 bytes graphics/items/icons/wide_lens.png | Bin 370 -> 260 bytes graphics/items/icons/wise_glasses.png | Bin 333 -> 248 bytes graphics/items/icons/x_special_defense.png | Bin 410 -> 308 bytes graphics/items/icons/yache_berry.png | Bin 395 -> 298 bytes graphics/items/icons/yellow_apricorn.png | Bin 368 -> 271 bytes graphics/items/icons/yellow_nectar.png | Bin 379 -> 286 bytes graphics/items/icons/zap_plate.png | Bin 355 -> 244 bytes graphics/items/icons/zoom_lens.png | Bin 385 -> 280 bytes .../object_events/pics/berry_trees/chople.png | Bin 697 -> 637 bytes .../object_events/pics/berry_trees/custap.png | Bin 669 -> 588 bytes .../object_events/pics/berry_trees/jaboca.png | Bin 693 -> 593 bytes .../object_events/pics/berry_trees/kasib.png | Bin 606 -> 532 bytes .../object_events/pics/berry_trees/kebia.png | Bin 600 -> 521 bytes .../object_events/pics/berry_trees/micle.png | Bin 627 -> 571 bytes .../object_events/pics/berry_trees/occa.png | Bin 618 -> 566 bytes .../object_events/pics/berry_trees/payapa.png | Bin 589 -> 521 bytes .../object_events/pics/berry_trees/roseli.png | Bin 593 -> 521 bytes .../object_events/pics/berry_trees/shuca.png | Bin 638 -> 552 bytes .../object_events/pics/berry_trees/tanga.png | Bin 697 -> 599 bytes .../pokemon/alcremie/caramel_swirl/front.png | Bin 805 -> 729 bytes .../pokemon/alcremie/lemon_cream/front.png | Bin 805 -> 729 bytes .../pokemon/alcremie/matcha_cream/back.png | Bin 747 -> 657 bytes .../pokemon/alcremie/matcha_cream/front.png | Bin 805 -> 729 bytes .../pokemon/alcremie/mint_cream/front.png | Bin 806 -> 729 bytes .../pokemon/alcremie/rainbow_swirl/back.png | Bin 755 -> 660 bytes .../pokemon/alcremie/ruby_cream/front.png | Bin 809 -> 730 bytes .../pokemon/alcremie/salted_cream/front.png | Bin 804 -> 729 bytes graphics/pokemon/altaria/back.png | Bin 703 -> 603 bytes graphics/pokemon/ampharos/back.png | Bin 640 -> 563 bytes graphics/pokemon/bagon/back.png | Bin 646 -> 552 bytes .../pokemon/basculin/blue_striped/back.png | Bin 741 -> 629 bytes .../pokemon/basculin/blue_striped/icon.png | Bin 462 -> 362 bytes graphics/pokemon/beartic/back.png | Bin 628 -> 526 bytes graphics/pokemon/bidoof/anim_frontf.png | Bin 852 -> 781 bytes graphics/pokemon/bidoof/backf.png | Bin 570 -> 487 bytes graphics/pokemon/breloom/back.png | Bin 811 -> 705 bytes graphics/pokemon/budew/back.png | Bin 580 -> 484 bytes graphics/pokemon/carvanha/back.png | Bin 716 -> 605 bytes graphics/pokemon/castform/rainy/icon.png | Bin 375 -> 296 bytes graphics/pokemon/castform/snowy/icon.png | Bin 395 -> 321 bytes graphics/pokemon/castform/sunny/icon.png | Bin 386 -> 312 bytes graphics/pokemon/celebi/back.png | Bin 732 -> 641 bytes graphics/pokemon/cherrim/sunshine/icon.png | Bin 405 -> 334 bytes graphics/pokemon/chespin/anim_front.png | Bin 923 -> 797 bytes graphics/pokemon/cinccino/back.png | Bin 686 -> 578 bytes graphics/pokemon/cinderace/back.png | Bin 761 -> 649 bytes graphics/pokemon/cinderace/front.png | Bin 840 -> 726 bytes graphics/pokemon/corsola/galarian/front.png | Bin 684 -> 582 bytes graphics/pokemon/cranidos/back.png | Bin 832 -> 731 bytes graphics/pokemon/cursola/front.png | Bin 970 -> 878 bytes graphics/pokemon/darmanitan/zen_mode/icon.png | Bin 414 -> 323 bytes graphics/pokemon/deerling/autumn/icon.png | Bin 498 -> 379 bytes graphics/pokemon/deerling/summer/icon.png | Bin 507 -> 378 bytes graphics/pokemon/deerling/winter/icon.png | Bin 503 -> 377 bytes graphics/pokemon/dewgong/back.png | Bin 568 -> 502 bytes graphics/pokemon/ditto/back.png | Bin 434 -> 360 bytes graphics/pokemon/dunsparce/back.png | Bin 664 -> 569 bytes graphics/pokemon/eevee/backf.png | Bin 696 -> 615 bytes graphics/pokemon/elekid/back.png | Bin 741 -> 652 bytes graphics/pokemon/espeon/back.png | Bin 677 -> 617 bytes graphics/pokemon/flabebe/back.png | Bin 642 -> 526 bytes graphics/pokemon/flabebe/blue_flower/icon.png | Bin 374 -> 301 bytes .../pokemon/flabebe/orange_flower/icon.png | Bin 374 -> 301 bytes .../pokemon/flabebe/white_flower/icon.png | Bin 375 -> 302 bytes .../pokemon/flabebe/yellow_flower/icon.png | Bin 377 -> 302 bytes graphics/pokemon/flareon/icon.png | Bin 496 -> 404 bytes graphics/pokemon/floette/blue_flower/icon.png | Bin 431 -> 352 bytes .../pokemon/floette/eternal_flower/back.png | Bin 783 -> 668 bytes .../pokemon/floette/eternal_flower/front.png | Bin 807 -> 710 bytes .../pokemon/floette/eternal_flower/icon.png | Bin 449 -> 376 bytes .../pokemon/floette/orange_flower/icon.png | Bin 431 -> 352 bytes .../pokemon/floette/white_flower/icon.png | Bin 429 -> 352 bytes .../pokemon/floette/yellow_flower/icon.png | Bin 436 -> 353 bytes graphics/pokemon/florges/back.png | Bin 768 -> 673 bytes graphics/pokemon/florges/blue_flower/icon.png | Bin 651 -> 480 bytes .../pokemon/florges/orange_flower/icon.png | Bin 648 -> 479 bytes .../pokemon/florges/white_flower/icon.png | Bin 619 -> 470 bytes .../pokemon/florges/yellow_flower/icon.png | Bin 650 -> 480 bytes graphics/pokemon/furfrou/dandy_trim/icon.png | Bin 598 -> 455 bytes .../pokemon/furfrou/debutante_trim/icon.png | Bin 594 -> 458 bytes .../pokemon/furfrou/diamond_trim/icon.png | Bin 624 -> 492 bytes graphics/pokemon/furfrou/heart_trim/icon.png | Bin 602 -> 477 bytes graphics/pokemon/furfrou/kabuki_trim/icon.png | Bin 573 -> 451 bytes .../pokemon/furfrou/la_reine_trim/icon.png | Bin 580 -> 444 bytes graphics/pokemon/furfrou/matron_trim/icon.png | Bin 581 -> 455 bytes .../pokemon/furfrou/pharaoh_trim/icon.png | Bin 579 -> 443 bytes graphics/pokemon/furfrou/star_trim/icon.png | Bin 639 -> 496 bytes graphics/pokemon/galvantula/back.png | Bin 575 -> 492 bytes graphics/pokemon/gastrodon/east_sea/icon.png | Bin 565 -> 403 bytes graphics/pokemon/geodude/back.png | Bin 652 -> 593 bytes graphics/pokemon/glaceon/back.png | Bin 647 -> 541 bytes graphics/pokemon/golett/back.png | Bin 933 -> 788 bytes graphics/pokemon/gourgeist/back.png | Bin 653 -> 536 bytes graphics/pokemon/gourgeist/large/back.png | Bin 673 -> 546 bytes graphics/pokemon/gourgeist/small/back.png | Bin 639 -> 522 bytes graphics/pokemon/gourgeist/super/back.png | Bin 681 -> 560 bytes graphics/pokemon/greninja/ash/icon.png | Bin 681 -> 491 bytes graphics/pokemon/gurdurr/back.png | Bin 683 -> 564 bytes graphics/pokemon/hippowdon/back.png | Bin 740 -> 663 bytes graphics/pokemon/hitmonchan/back.png | Bin 830 -> 713 bytes graphics/pokemon/hoopa/back.png | Bin 860 -> 718 bytes graphics/pokemon/hoopa/footprint.png | Bin 190 -> 102 bytes graphics/pokemon/hoopa/unbound/icon.png | Bin 623 -> 521 bytes graphics/pokemon/jellicent/backf.png | Bin 617 -> 521 bytes graphics/pokemon/jellicent/icon.png | Bin 489 -> 418 bytes graphics/pokemon/jellicent/iconf.png | Bin 499 -> 430 bytes graphics/pokemon/jigglypuff/back.png | Bin 518 -> 447 bytes graphics/pokemon/keldeo/resolute/back.png | Bin 857 -> 742 bytes graphics/pokemon/keldeo/resolute/icon.png | Bin 558 -> 482 bytes graphics/pokemon/kricketot/anim_frontf.png | Bin 1048 -> 976 bytes graphics/pokemon/kricketot/backf.png | Bin 625 -> 540 bytes graphics/pokemon/lapras/back.png | Bin 786 -> 682 bytes graphics/pokemon/larvitar/back.png | Bin 594 -> 527 bytes graphics/pokemon/lucario/back.png | Bin 906 -> 800 bytes graphics/pokemon/luxio/back.png | Bin 784 -> 707 bytes graphics/pokemon/luxray/back.png | Bin 890 -> 792 bytes graphics/pokemon/lycanroc/dusk/front.png | Bin 1001 -> 894 bytes graphics/pokemon/lycanroc/midnight/front.png | Bin 920 -> 841 bytes graphics/pokemon/magearna/back.png | Bin 782 -> 661 bytes graphics/pokemon/magearna/front.png | Bin 938 -> 828 bytes .../pokemon/magearna/original_color/back.png | Bin 797 -> 667 bytes .../pokemon/magearna/original_color/front.png | Bin 966 -> 834 bytes .../pokemon/magearna/original_color/icon.png | Bin 519 -> 444 bytes graphics/pokemon/marshtomp/back.png | Bin 748 -> 641 bytes graphics/pokemon/mimikyu/busted/back.png | Bin 505 -> 425 bytes graphics/pokemon/mimikyu/busted/front.png | Bin 554 -> 488 bytes graphics/pokemon/mimikyu/busted/icon.png | Bin 426 -> 327 bytes graphics/pokemon/minccino/back.png | Bin 601 -> 519 bytes graphics/pokemon/minior/core/back.png | Bin 493 -> 412 bytes graphics/pokemon/minior/core/blue/icon.png | Bin 447 -> 356 bytes graphics/pokemon/minior/core/front.png | Bin 532 -> 455 bytes graphics/pokemon/minior/core/green/icon.png | Bin 440 -> 355 bytes graphics/pokemon/minior/core/indigo/icon.png | Bin 443 -> 356 bytes graphics/pokemon/minior/core/orange/icon.png | Bin 443 -> 355 bytes graphics/pokemon/minior/core/violet/icon.png | Bin 442 -> 355 bytes graphics/pokemon/minior/core/yellow/icon.png | Bin 438 -> 355 bytes graphics/pokemon/minun/back.png | Bin 673 -> 574 bytes graphics/pokemon/mr_mime/back.png | Bin 868 -> 747 bytes graphics/pokemon/necrozma/dawn_wings/back.png | Bin 951 -> 847 bytes .../pokemon/necrozma/dawn_wings/front.png | Bin 1413 -> 1294 bytes graphics/pokemon/necrozma/dawn_wings/icon.png | Bin 709 -> 595 bytes graphics/pokemon/necrozma/dusk_mane/back.png | Bin 1187 -> 1033 bytes graphics/pokemon/necrozma/dusk_mane/front.png | Bin 1311 -> 1217 bytes graphics/pokemon/necrozma/dusk_mane/icon.png | Bin 559 -> 485 bytes graphics/pokemon/necrozma/ultra/back.png | Bin 863 -> 760 bytes graphics/pokemon/necrozma/ultra/front.png | Bin 1312 -> 1268 bytes graphics/pokemon/necrozma/ultra/icon.png | Bin 626 -> 561 bytes graphics/pokemon/nidoqueen/back.png | Bin 785 -> 698 bytes graphics/pokemon/nidorino/back.png | Bin 794 -> 740 bytes graphics/pokemon/ninetales/back.png | Bin 699 -> 628 bytes graphics/pokemon/oddish/back.png | Bin 656 -> 552 bytes graphics/pokemon/oricorio/pau/back.png | Bin 884 -> 761 bytes graphics/pokemon/oricorio/pau/front.png | Bin 828 -> 706 bytes graphics/pokemon/oricorio/pau/icon.png | Bin 452 -> 341 bytes graphics/pokemon/oricorio/pom_pom/back.png | Bin 836 -> 721 bytes graphics/pokemon/oricorio/pom_pom/front.png | Bin 733 -> 617 bytes graphics/pokemon/oricorio/pom_pom/icon.png | Bin 462 -> 361 bytes graphics/pokemon/oricorio/sensu/back.png | Bin 750 -> 667 bytes graphics/pokemon/oricorio/sensu/front.png | Bin 883 -> 784 bytes graphics/pokemon/oricorio/sensu/icon.png | Bin 481 -> 350 bytes graphics/pokemon/persian/back.png | Bin 731 -> 665 bytes graphics/pokemon/phanpy/back.png | Bin 525 -> 454 bytes graphics/pokemon/pichu/spiky_eared/icon.png | Bin 375 -> 312 bytes graphics/pokemon/pikachu/alola_cap/back.png | Bin 749 -> 633 bytes graphics/pokemon/pikachu/alola_cap/front.png | Bin 717 -> 624 bytes graphics/pokemon/pikachu/alola_cap/icon.png | Bin 499 -> 384 bytes graphics/pokemon/pikachu/belle/back.png | Bin 953 -> 837 bytes graphics/pokemon/pikachu/belle/front.png | Bin 900 -> 808 bytes graphics/pokemon/pikachu/belle/icon.png | Bin 586 -> 453 bytes graphics/pokemon/pikachu/cosplay/back.png | Bin 740 -> 634 bytes graphics/pokemon/pikachu/cosplay/front.png | Bin 708 -> 611 bytes graphics/pokemon/pikachu/cosplay/icon.png | Bin 444 -> 367 bytes graphics/pokemon/pikachu/hoenn_cap/back.png | Bin 742 -> 631 bytes graphics/pokemon/pikachu/hoenn_cap/front.png | Bin 723 -> 638 bytes graphics/pokemon/pikachu/hoenn_cap/icon.png | Bin 497 -> 383 bytes graphics/pokemon/pikachu/kalos_cap/back.png | Bin 750 -> 633 bytes graphics/pokemon/pikachu/kalos_cap/front.png | Bin 726 -> 632 bytes graphics/pokemon/pikachu/kalos_cap/icon.png | Bin 506 -> 388 bytes graphics/pokemon/pikachu/libre/back.png | Bin 837 -> 717 bytes graphics/pokemon/pikachu/libre/front.png | Bin 751 -> 657 bytes graphics/pokemon/pikachu/libre/icon.png | Bin 487 -> 380 bytes .../pokemon/pikachu/original_cap/back.png | Bin 760 -> 636 bytes .../pokemon/pikachu/original_cap/front.png | Bin 737 -> 635 bytes .../pokemon/pikachu/original_cap/icon.png | Bin 498 -> 385 bytes graphics/pokemon/pikachu/partner_cap/icon.png | Bin 507 -> 389 bytes graphics/pokemon/pikachu/ph_d/back.png | Bin 853 -> 747 bytes graphics/pokemon/pikachu/ph_d/front.png | Bin 846 -> 758 bytes graphics/pokemon/pikachu/ph_d/icon.png | Bin 498 -> 405 bytes graphics/pokemon/pikachu/pop_star/back.png | Bin 978 -> 841 bytes graphics/pokemon/pikachu/pop_star/front.png | Bin 831 -> 732 bytes graphics/pokemon/pikachu/pop_star/icon.png | Bin 524 -> 411 bytes graphics/pokemon/pikachu/rock_star/back.png | Bin 876 -> 764 bytes graphics/pokemon/pikachu/rock_star/front.png | Bin 803 -> 692 bytes graphics/pokemon/pikachu/rock_star/icon.png | Bin 499 -> 394 bytes graphics/pokemon/pikachu/sinnoh_cap/back.png | Bin 742 -> 631 bytes graphics/pokemon/pikachu/sinnoh_cap/front.png | Bin 723 -> 638 bytes graphics/pokemon/pikachu/sinnoh_cap/icon.png | Bin 498 -> 384 bytes graphics/pokemon/pikachu/unova_cap/back.png | Bin 760 -> 636 bytes graphics/pokemon/pikachu/unova_cap/front.png | Bin 737 -> 638 bytes graphics/pokemon/pikachu/unova_cap/icon.png | Bin 503 -> 384 bytes graphics/pokemon/pumpkaboo/back.png | Bin 591 -> 515 bytes graphics/pokemon/pumpkaboo/large/back.png | Bin 619 -> 547 bytes graphics/pokemon/pumpkaboo/small/back.png | Bin 591 -> 510 bytes graphics/pokemon/pumpkaboo/super/back.png | Bin 634 -> 562 bytes graphics/pokemon/pyroar/icon.png | Bin 555 -> 492 bytes graphics/pokemon/relicanth/back.png | Bin 745 -> 612 bytes graphics/pokemon/reshiram/back.png | Bin 747 -> 670 bytes graphics/pokemon/riolu/back.png | Bin 803 -> 713 bytes graphics/pokemon/sawsbuck/autumn/back.png | Bin 901 -> 801 bytes graphics/pokemon/sawsbuck/autumn/icon.png | Bin 498 -> 426 bytes graphics/pokemon/sawsbuck/summer/back.png | Bin 825 -> 716 bytes graphics/pokemon/sawsbuck/summer/icon.png | Bin 468 -> 389 bytes graphics/pokemon/sawsbuck/winter/icon.png | Bin 464 -> 390 bytes graphics/pokemon/sealeo/back.png | Bin 584 -> 486 bytes graphics/pokemon/shellos/east_sea/back.png | Bin 689 -> 577 bytes graphics/pokemon/shellos/east_sea/icon.png | Bin 518 -> 359 bytes graphics/pokemon/shinx/anim_frontf.png | Bin 981 -> 917 bytes graphics/pokemon/shinx/backf.png | Bin 728 -> 634 bytes graphics/pokemon/shuppet/back.png | Bin 576 -> 494 bytes graphics/pokemon/silvally/back.png | Bin 718 -> 640 bytes graphics/pokemon/silvally/front.png | Bin 957 -> 837 bytes graphics/pokemon/sirfetchd/front.png | Bin 1032 -> 907 bytes graphics/pokemon/snubbull/back.png | Bin 561 -> 477 bytes graphics/pokemon/spheal/back.png | Bin 473 -> 393 bytes graphics/pokemon/staravia/back.png | Bin 779 -> 689 bytes graphics/pokemon/swablu/back.png | Bin 711 -> 621 bytes graphics/pokemon/swalot/back.png | Bin 698 -> 589 bytes graphics/pokemon/togetic/back.png | Bin 618 -> 545 bytes graphics/pokemon/tornadus/therian/icon.png | Bin 647 -> 479 bytes graphics/pokemon/unfezant/backf.png | Bin 827 -> 725 bytes graphics/pokemon/unfezant/icon.png | Bin 466 -> 397 bytes .../pokemon/vivillon/continental/icon.png | Bin 562 -> 492 bytes graphics/pokemon/vivillon/elegant/icon.png | Bin 559 -> 482 bytes graphics/pokemon/vivillon/fancy/icon.png | Bin 583 -> 508 bytes graphics/pokemon/vivillon/garden/icon.png | Bin 552 -> 482 bytes graphics/pokemon/vivillon/jungle/icon.png | Bin 539 -> 470 bytes graphics/pokemon/vivillon/marine/icon.png | Bin 558 -> 494 bytes graphics/pokemon/vivillon/modern/icon.png | Bin 564 -> 492 bytes graphics/pokemon/vivillon/monsoon/icon.png | Bin 546 -> 493 bytes graphics/pokemon/vivillon/ocean/icon.png | Bin 582 -> 510 bytes graphics/pokemon/vivillon/poke_ball/icon.png | Bin 562 -> 496 bytes graphics/pokemon/vivillon/polar/icon.png | Bin 569 -> 493 bytes graphics/pokemon/vivillon/river/icon.png | Bin 549 -> 483 bytes graphics/pokemon/vivillon/sandstorm/icon.png | Bin 548 -> 478 bytes graphics/pokemon/vivillon/savanna/icon.png | Bin 563 -> 486 bytes graphics/pokemon/vivillon/sun/icon.png | Bin 557 -> 484 bytes graphics/pokemon/vivillon/tundra/icon.png | Bin 568 -> 491 bytes graphics/pokemon/whiscash/back.png | Bin 724 -> 609 bytes graphics/pokemon/wingull/back.png | Bin 647 -> 561 bytes graphics/pokemon/xerneas/back.png | Bin 838 -> 740 bytes graphics/pokemon/xerneas/front.png | Bin 910 -> 799 bytes graphics/pokemon/xerneas/icon.png | Bin 597 -> 435 bytes graphics/pokemon/zapdos/back.png | Bin 586 -> 497 bytes graphics/pokemon/zygarde/10_percent/icon.png | Bin 446 -> 381 bytes graphics/pokemon/zygarde/complete/icon.png | Bin 592 -> 537 bytes 450 files changed, 0 insertions(+), 0 deletions(-) diff --git a/graphics/battle_anims/sprites/new/teapot.png b/graphics/battle_anims/sprites/new/teapot.png index 6be0680dfce165621cf650c7b94fb1f8d456f83e..0e26606418919a0f8b49d83ce7792fedfdc2f2af 100644 GIT binary patch delta 690 zcmV;j0!{t#2Kfb$7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0007LNklvXS?Bns(SN}l3 z`p7>`)BFKJ{H*XkU=}}q0Kj?17~cmlAx3!DPbmbD0GV~)O*AbC^E^i;#PZC5m&t#q zPE$qX8ps)PjHQq#fE4#K7}RB27=Y0I4DbZ*k7m2@BL`@N5VH6y`^h{W@Rk1o5pj_T zSdbH_UHq^=pY&`Oexf3T&fp+o=aWEQH~+He+5FG;wV_gL<R#K(a`Pt6hRRs6gNAQF-HGmDUtvvP89|6@xI09OL-a#S6UjXR{ z*aL6}0uR_Tpt>`pLkS#U3TOW32s=PqU;v{DuK<4EXykZJOOY6AnG2R_%{GA$N>Uq_%raN+NaOtuKxzhVLaTn2E(;HS;_ZEK`s{Mv5_QuJuPH2?Jr-4m?8eIo_@ z!OsL}9@AJIz`y$C?Z61yrb26f$FCudBC+52r^R!1&@FpIeE_NBjT)02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00NasL_t(|ob8mqPuoBg$1hSO=unA+5E=;< zQY4{Y$~^xY4G zlY)n??Hlj=$@kv(y>kfpUw>5@x|9wq8{6pyhGFcd0z1Z5e>zYtK`KC2A(tk%%@ym! z{qmB$z>9~wdocXz#uv`Hb&cS#YB|HEuRWHxDl-jEive4O0yM`Rb+EGs$?H~s86#G! z3?cMS<@v!ToFpCc?Aj0&G}nWn@T zTgMK)2ulKJ@ml#v1Iw(l8ZKG_kpg=6oVV}vI81`X0RkfdgzAoS&Q%K;qlRlJGj^l_ zX~Fq@46JM(6LNN2x8{I{7+4lhs5>p6JOZI?;^CYRf0Dr4uR28x^fZ7WC4eF3fPPy6 zN7g>cOs3ay2-SqoJN>>&S;Y_;JMs)~7AV9369BV4tSAA{7|1eAxqzE~G7x}6H~K1s z1Qr9vc6XW9@zH=odofVQFJ*Cp#A8_kz!Yj#q%1zA%P5!yIR7vpF>ow^Tj8w=TWBJn z4M-Nif82k6Teju>w(7CL`O|wX100)W_$2heR)cKt_7i{>qShtA)G{gWBp!Svk9xt@ zfZPP-g9Jd_D<}-*6d1FG!3|xzO9JGT`wc(=O#!s%n^{11I-W!UjzHYdq8oF%=oEkZ z10=vHt;_>xfq+QU#8uPWpZ_x1JV*lopSPYdJRro(H-t>-+Oq~&@2IX;&V5cN*((ja opd;Z5#B^WMi5QrhCjZOz8+s?4P36)aUjP6A07*qoM6N<$f{LYJWB>pF diff --git a/graphics/battle_anims/sprites/omega_symbol.png b/graphics/battle_anims/sprites/omega_symbol.png index a821d5e40aa7b4fab4b28d545b787e47508920b9..150501367aa7aa0a870a2ad8ef72813e9bf7fdee 100644 GIT binary patch delta 198 zcmcc1G?8h71SbbG0|SH0lCEPDtL^IrN`m}?|D%DkikqeY)iijzIEGmCo(=LAYf#{r zvgiL?Z;8r=j@?;hpA~Bi*Z$=_qVcACV<*pU<4+y8I@Z|9JV|o;^YQIYO%;oVt1Od# zNOK+KlGJat*r1`$dT#x?A0OQ(+6x@5zG!12-^?Q#&APHt)2NNd{I$K}rI$zf3|SNs#-!Fbl2>1Eevp5;KtFnGH9xvX&pI=LyAp>Z+b}14xo^DiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}9o-U3d6?4`G+?70Fz>>n8)4-eb|E^Z(%lpy$t32NIO~fi8ynK^HBIgSIVm&0W8+MaVs=$-t@GmT{*|{&rgTe~DWM4fdN5@o diff --git a/graphics/battle_interface/alpha_indicator.png b/graphics/battle_interface/alpha_indicator.png index 0e302576b6aced8d385e93eee3a2919ea2e4d1c3..66f37f1d3353444663abadfb73b5801d24158d07 100644 GIT binary patch delta 123 zcmeBTI?gyjf|G-pfq_9omp^!7wSBrkNswRge>8Abanlr_8Z%E9#}J9BXM1+?G8k|$ zf86~4jG^cfPgxc5a<_HAo-uq%;{0Hc>VDQgONIa7ge~beceo|*_{}W$n<01Ro?d03 O2@IaDelF{r5}E*SM>cc- delta 190 zcmX@k*u^wKBAJDmfq~)e-A6${ioL|s*OmP#hZLid(zlr#BY;BUC9V-A!TD(=<%vb9 z4DLQI0e diff --git a/graphics/battle_interface/omega_indicator.png b/graphics/battle_interface/omega_indicator.png index c56d51c151e6c578e4a8935a7cf6bd4efaceb009..f321fc8263fd4ba43bac4e7039a1a86731282272 100644 GIT binary patch delta 122 zcmeBYI>tCbf|G-pfq_9omp^!7wSAgENswRge>8Abanlr_8dFaf#}J9BXV2^uWH8`h zcKq@sezPk}NkZy&;u#y~cMSA(WJkYY)9^mSxl*x1kgCy{lc zqJ1c1lDE6d|E27ojsj(kJzX3_D&{07ED#e2YP-;*<;0fIHnCg5<%Ea8DT5FZAvWVV nBCR0@c*K&E**naVlMPrIIx?8=Ez0_J8f1y5tDnm{r-UW|^XEH` diff --git a/graphics/battle_interface/z_move_trigger.png b/graphics/battle_interface/z_move_trigger.png index 5e27dbabbe83560938b5871700ea63f0a8158dd5..d719494d9f0a64b59552862bed58adfc2c8056b5 100644 GIT binary patch delta 200 zcmcc5G?{6F1SbbG0|SH0lCEPDtL^IrN`m}?|D%DkikqeY)iim!IEGmCzMbeT)S$rQ zymG7S`})MoUGaxlW$w4R-s4f3QgoPgilN@=MOJ1L{1Y;^)MUKb=^^z*b*A?uw$o2r z?l!emZQ8VHV`J7@#Sf+lGnO8DUUWpPZPrDxvZoDOW-#|mcy97X?9=phdv+g+{u_08 t!n=v?d`>T0qVH93>9K6Oe4hOVgMcm5g-01Jw}H-K@O1TaS?83{1OOTIVoLx3 delta 276 zcmbQtbf0O0L^2CA0|P^2NcwRg#a`m+>&pI&U5Hni<4No1X< zXkX8mn z?p*j<-p0i=C(uQ_CnVqq%Z8-bGZsb%BM$9yYv1_HwX?H*WBrrT+P*7sKC8D(6FzRj zbFy{O?2Bs_HTg7tc2tz<-C+>@;$K+wt3w6_>YDM+4-6jMD9vF}tFL-8jjQ#QcXx$t z@xlTL8=l;2W^P}1Hy=vjS2@|@Bs7^lA~SpG$JXHHIWmGtahJsYlz16NyjoLvC&oU3 zr|X~ZPxHjRbLFI*-tronHKl7D<-Nu7O)iIlhkyUWbnT8WmiAk!|LotlLrznb{Y6GQ SM;91LFgb7-Iwj0001`EabER000McNliru;{yc%9V2mZQ~&?~02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L009R{L_t(|ob8Z7YQsPbMdg$pKrx z;BmRtpquijg7Z>ISn@~|pKlgWU?J-Ah|B3WI7o8QXRY?>e`I|G*SSipKvLxEN+MV% zLb*;wVE~}xR{8?I%x4;6X{DPB=&Y3}SiK~hqXq@6k~wp}R3Lc~4ftw6b5t)U#qiAl zcu`5zloIuoX8UmvLQd#pHUPXvBt&+4K{81Y*Bws%LiH41068*(@?KwV<`%+TP#Klw z;x!CyfbM{gD?$7QfD7<&)B_USDGJR-@WXcIf3Us*&D28&%TK_W00000NkvXXu0mjf DZ04v0 diff --git a/graphics/berries/charti.png b/graphics/berries/charti.png index 9f119ebac0e9d1d9883bf3b3a92d57e18c57fe3f..399cd626efa83c80a69c4de5143c382c0f866630 100644 GIT binary patch delta 290 zcmZ3-{Dx_Q1SbbG0|P_C9nP&2tL^IrN`m}?|D%DkikqeY)!g=UaSZY3d^`Cp-(dre zW^RiwfA3fPS(01UD6@R!wI#8C66dHL|M=?a`>q4OOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L007cSL_t(|ob8b@4#F@DMGN8pAXUs@gvRi*(%3C42oPbHs_jSEl?&~hUninYtJTnvsvo-(#002ovPDHLkV1gZ0 BiW2|; diff --git a/graphics/berries/chilan.png b/graphics/berries/chilan.png index 8f717bb82cfe103413e8dd976fca23cf26519e51..286ed5c3fae40a05c224dbd6b632c57120a6330b 100644 GIT binary patch delta 291 zcmcc0{FZ5g1SbbG0|P_C9nP&2tL^IrN`m}?|D%DkikqeY)!gxPaSZY3e0%vKU$X)a zYrvMR4gdcioE9YLqw!&z&bQRaBL3|;ukM)tH!O@lb9~1X`$rqEZJ1TQx^lZXgA0p^ zZbQ?VDK{+mEp*M~?zIJ+40y7Gr>ntn-uC>~SVk7j%N(nl{Oj94>-KQj&HcbLb;9g& z?G$OAwGzxi5Aq-M&h_xC3ze{TJeTPz@t$Q@S6IvQTVfNs!oKJSYDpcuU)AtVWYYS) zzHjHJxK{3J{r*3@Dk$Q$9>c1#^DbJu9*D(x8ok`i|KsVJP6_D^0m1XsjvVx!&XHi+ jT(h(!?bH1~zhbu3^C~~(-}6fd=u-wyS3j3^P6OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L008+(L_t(|oaK?RN(3sc6XU#MGkA)TSJIkny;bN+;LGj}IQ>TpbM zyHIhuqbMQPqm<>+{GRo<#gsZP`t6e48R*2Cy6u>0T-F|=whJ3R{!mps(rxhZSyxQU z&S|zr2L@$l&!#Wy1b-OXk1 z|1CbUDSTl{!Gk%$8XMlFS_tis&s%fgm)UoNsKd6F9})|~?c#bC%|Cg%{lf#vPlwOn c|LHp~rkZ!_=BX=Gfx*V$>FVdQ&MBb@0F`5)rT_o{ delta 424 zcmV;Z0ayN(1M&lq7-Iwj0001`EabER000McNliru;{ya19VgZcD82vy02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L009G0;G_d zUgf|c04UIbu7B#)Hd8w3ugW-JO=yYZh{&pN3)!b4X1Z~Uw3Spuwu*(&N)*W>WvrPIKt8? zp!1M_qK4qzBbR-TfBPTxYr9hHmE|4>V+~Z>F2p`La72kmW0UB@14?1ddlcPlURaB^ j?9X=dd-p)tUR2+76H7yhvf?_Rvl%>H{an^LB{Ts5IAw8E delta 327 zcmdnZG>LhFL^2CA0|UcSohMs>6nlxMuPggwW)?9W-qUZN-2w`Um$*ih1m~xflqVLY zGPwJ=1o*itl%*Ca80(o7wk~-HRKihG;O7pMF$S_3yc#s+ffP%+qpu?a!^VE@KZ&dp z747R8lf2zs{x4_W6marJ&aA90>AqY zm^RIyXP#mAIc0uw>MXzdbstNomGU`W(Gd}Szi@@giPm?Mql({aH)m|#uk5){ zX?5L&9xt&2+FmEu=JPMPlI)q6_dDUM+sg_zw#~|s3bGe=1?u0ePRw|+3N)kb;3><8I2^{rP6^s8Uo-f(Q WU8H6hlB~TBowWK`+Y z;IgEFD=Ila&@oi}@#F`yelaZg%w4cPGooZu*84w4IXhO>YuEoc%;LcObnPC~C-y`sA70<;_Ez{W z-`dU3w>0`x7)$)S6}L)FmEl`EOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L007rXL_t(|ob8dpbps&`MA>x;u$L`h0T*C2 z2pN>M-P3;g+?N}NP2;91CN6h8P&v<` z^qP&f9gj}sT)XFQ%+&6)-cH!kq?RwWddSem5)9dO=%5q zw3NtYDB~1y%24)xpjXggSaw)w2}4O-Pe53aYJg$JCs)p6lKM8>b`_UA^?qt`_|NUn z;r=yMPYY*-vY6`}53+f}DX1E|q%&eaztL>gTe~DWM4f(>aO^ delta 392 zcmV;30eAlO0@4GJ7-Iwj0001`EabER000McNliru;{yc%7Yn{C6mS3l02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L008z$L_t(|oaK^1YQr!TL=8?4;HDRd+XJ-7 z?mFSm&pKdzye-6tT%f2oNRHjF5GeXmpxe?}crlL|NqCy(pQ#O}JN~gA81MMbz1C`2 zymOV7If@7s{%Vf#Q%M0NUd}0UF#f~*b%_bs2y4@|%0ya`f158;ezg4PcVM_$K_!ws z9-RCIi5v{@AuMhm0&h!j?4Iq3(_sZ3 z=gb<0|NjqfEz{yc-9 zu~~CE>#`)-&sWs0e{C^ue(CsaMdcy+IZ_7i{vU1b*Jtee%e>~(!haqSPs{Ir5S}Ad iv&W=ZD(`Qkzepp;Y%d?aW^JHH89ZJ6T-G@yGywqZZ;FWk delta 385 zcmV-{0e=4M0?PxC7-Iwj0001`EabER000McNliru;{yc%6Etig{7C=+02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L008evL_t(|oYjyqZo@DPMTx>mPtXf=$r^yM zW&>nAXAq4ZpdvIDU5Z{n@YuDt4c&N%Bx~pxjqmyCLk4*C^Zn5fzd!#iUK{-Bvmu^a zHyvuxon-*{s=2Co#Cm(wAjotq`95hN5w1i`fu|t86#H5If4HoaBBpm%6NE*e%Hyo+ zPd*pM-E8wLxtNqNF2NXl$!~#%%N^g@B;A4(hWi3>U5H8YZKk+9+}UF?-dSKA-%>UK z;K`nbh-NdszJluVXYWdYHk7dx*Z(d)1#*3sH$S`NtX_TQLt6OF9l8Dg9M2Tw&r`am#1J~Mqd@XPrczp5(t%^C z|12twvZYptPh=FC-Y{pg5|DhDmmm7jte85LPd4G-;2tzopr0IPeFO#lD@ delta 426 zcmV;b0agBv1M~xs7-Iwj0001`EabER000McNliru;{ya1BM>ihmdpSE02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L009_DL_t(|oaNH7YQr!P24EZ0rBj3H3urJ- zr-X}_PK9F9Jw6N`JqWtj)U$`m>6oF!Yl9&uZ{WUM&kiZ*q&`5YMt%HuC;L3_pB#PT zzQ4|vZtwwCxN$;?sQZNtbYGkXv?Rd%wIawI(5gx!J}|h#fBbE)DzpZ;#k>)%LPYkS zgrJODikR*F5u$R8m=6sIwox}mz=RcM_57pUzhq!E2>`JcvW(RuEKEqT-pOvRzy$h+ z=~F|s^u`1a0M^?`mhT5xa=6#g^X{$(;E?F1lNN*|`cukSGYANZW7G)_{<#*7#b9g# zg%&o1Q{*THJT~rBiz25l;J-aQ%K&`yrU)cGYjKGHZ}AhcDqY0A+q2m(JO78zH-Y?I U_n5kgH2?qr07*qoM6N<$g1XbRApigX diff --git a/graphics/berries/kee.png b/graphics/berries/kee.png index 1c83b65b1943a2fc373ad1b59dd70662352c3394..37e1dc087c015edc35962a71b10bab437738bf75 100644 GIT binary patch delta 406 zcmV;H0crlt1m6RY7zqdi0001B+zGXjdp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0003_Nkl{YyEf~)HMl?B47vfBa6&G5ghQo&dAbo#O zQVkp6@+J|uOG-(J_-)09kn?UhedQG6lE35CSn<2@c0mUC!uWU*sD`Ix)O5HCPFEQZ zNfGO_Vf<0#`%*}NnKAIJm_Q{ar!^aIq8Tjkfq_W@*|F@PGd#i8bwoG_=flXl%moHR zE1XY(7O555g3c6g!bzW}fNiF&M0S5F(6PX7sMrgMH$7Gu1T#J$x**ebaRKgedO`&3N%_SV&8r4Z-&O(j>hN z{(B&0jdoM{0E_nqy~MOi!`X28>Ts6KKcDgjO|28Fq*!t&00000NkvXXu0jG}g2@ZU As{jB1 delta 516 zcmV+f0{i{n1I+}G7-Iwj0001`EabER000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00D7HL_t(|oYj&sZi6rshMfp@Ks`Wh#!QJv z77~#g;3Pc&Mm<1y^aOS<(3H-dGA1LJ>w9hsCdvWYCt0%o&)>5#X6%2~T!{PmqVMC# zO~s=RFz>HRN7AJ)^cNwd@5Oo4H2~-6%y<_4nv?EZ#N`?plt|984aBbya2RL@xcLC;z!g!Ad|nn z4o24}?9x&%e>AQGXzKQ4fD{5*HiDK8)ljd>H^SPT)_j9PW;ej1Xp~x~!{+QX08r&j z498_pUDr8a41sh2s->$!&>mIpgJAD^HDHb_{;cfXXL;ZShORi6-y@Uf*6yfY7_Rl@>{6nlxMuPggg7C|N{8G{Q)0)ax}C9V-A!TD(=<%vb9 z4DLQI0e%sbNXzXnee9fdrA2;Mzg<>_ulK?{@EZ_Xm_#a;)l#wwI1`U^VgL=>|oKGo5kMD z(3n*_iOu$dfdhAl($gTe~DWM4f DUd?p@ diff --git a/graphics/berries/occa.png b/graphics/berries/occa.png index 1ad829e5f1a65fc9cdc66a0c61f044cb2e0834d2..1d2af365f926b6a656173da503485ca0134dcf3a 100644 GIT binary patch delta 270 zcmdnQe3NN{1SbbG0|P_C9nP&2tL^IrN`m}?|D%DkikqeY)tvBjaSZY3e0%9MUyA|{ zYd}__#{d6^FS9Eg^I6?}^J1^W`K79pF0G6Gzjn>l_`b(KT=tkUDD)cWFLjyI-NCTK zm$Sl%@6g)Q%I9SQpDp^Vu`mCGDx;El!N-i|Kna2PKzAkEwyO7zwQCnQiqDV}muEfp z=h@R6AB-m)6!`YDQj(P?c8~ChUt72STt3_M15^2Xe-~wgusmkY4}H(9`}f2K)cVPr zHb}nKe!l+Z(V6p@<{PcOUH&fq?Nb5%iu}Sy9o|a&4=8_PdVg!{HF4F=oNHrL<^%&h O#o+1c=d#Wzp$PzMMuCO^ delta 359 zcmV-t0hs>T0OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L007oWL_t(|ob8b@4#F@DMLpyKmKfX>2`-QU zbt_VkU}Nb?Ixt)6V8*BmzAX-AAPy5Vf2s7IzQ3XZ{PRmfN`rm2d(ST!=K;36(Q{Sd zO&T2sFNrq4~~j+Y74T&9%XI|_ZWL(YJ@CPR6-iuc_q3ZZZV4!L9;A}$u2db zELfpKuEfz$v;|f#48`7Tu0=rVw7gt1VJ+CW6%=VxZ4<8rn{Wa<&4t&O;3$YFs5b2c z7ygpfr6Pn2cLg{jy}A1vp>S$B1YWV{0O>m}<~#o9BTr}IQ=dSJ$(R5D002ovPDHLk FV1iVPhvxtQ diff --git a/graphics/berries/passho.png b/graphics/berries/passho.png index c5414754505f3307821ecdc3ecae7fd633ab60cd..156dc18d18253e28f0fd1c219dc9466ebd5f1f8b 100644 GIT binary patch delta 370 zcmV-&0ge8j1iS-~7zqdi0001B+zGXjdp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0003iNklUL(7nLe??k0GcN{9P?F};xL740V z+y&@Qg&YO>W(wE}MS`scL%H?teQnW&7}0&2<$Imhn$Q%$l|un4G;g~LVl8!{*4W6I zdF+Uo0k|-XyP&A8Dg6kVwZDW^Z$e%+)VmmBFERL(YQzJ)$g6PcM#J_GtM6&-_{3Oo zV}5qe(=SV|_@3Q!o=2bS)u}n}-~Ty(wPZ^TuIUq1C;pL;{-O{)&3AqwpW+Y@$*+#X QOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00BcuL_t(|obAy)Pr^VL2k?RkGRh*lUdhGL zP-7%)<|KXqS)53kU>g=(JV#yNxlPlgxqp~l_y!GM&bx!O$BUbTga7gQ<$1X_2>uh) z84C~9Sw{%LF8Axg=9b;i&YZj9gM$$7ThJLUhYnazZ#9U=f92O2F7UPs_mN=cGWFrX zl`x|Q=vwG~`YVK4K2Vv3)LU}oZWXC*>E|BQ*N;e$v9LhmLC0Ohp`$)9F6+%Yj|7hm zAWorYC8(HZjO%WwFiSxdAWn3b7g?ABYE0xoikPp8$N)Vh73g?^{CZVn%7A>K@|)C7 zC+3#L3S?j|XOjwGX5?xC?clhCbL4~ywiAq|4)rfIQNBI00000 LNkvXXu0mjf!2ry- diff --git a/graphics/berries/rindo.png b/graphics/berries/rindo.png index 91e895d04311e573be0436d3a2b2a91fc07b1b2d..74107789382335a7c622ac38ecf16b243454728b 100644 GIT binary patch delta 282 zcmdnN{Df(O1SbbG0|P_C9nP&2tL^IrN`m}?|D%DkikqeY)m-*;aSZY3d^=?)-w_2K zmxIR+{ICCbOQum|!orBm@KYiy|9mi9Z1Mfoc~zxfyo~G4TXwfNuzxjlvy}9>Z?8D# ztbU;QM>QUW*H1cUaw?tLcjVxa2>$0aYuh>f7jnGbc6y=={07plTv2hP9k(j%-ZIh7&EdeRaH$-Mp-zO%EdLf1ZDE^x15TCsHg&Pxny zRxO|4tDRIeHNE2QqTe=*(ebm+raskfjSjD|U$*@8BzE!Lv3EZ+U%y?zzVlFh=K8ug ac^^$y=LC_-kAePU@N{MKb6Mw<&;$Vdwt@%% delta 365 zcmV-z0h0dY0=NT^7-Iwj0001`EabER000McNliru;{ya16b!3%YPSFY02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L007)cL_t(|oaK^14uUWcMW+V#P%l6SFJR#S zMn>J@g2W5x2~4fF9VG_@ZbK&p5)7|LizjvGJ6@8U z?rolD02Jx9tlS!Gh)R(LNXXP8vIoHGy&QogfC7R3`5iE|e*zD7n4Rum;EHT59!w(2 znW2CzGYU?o6c4&0+GTb>PCp1U!#TR@Gc&rnhCl zb9Y9k_yD3jnvWeTXm}aNj83&L)kTKKY-4m(L(+I_ZFbC^bpxTwlm=*P7ZhmNJ`uGtv_1**Yj4D z)Ykh%D}`9OPn6Q&P#gcNAJ;&yEsOen-{oBGzV+VP7_Id%=vB}4suloR9{{cmTs?mx zdVs)hh=RY;7gTS9CgEa!X;1+)HZev7{Lb{IDv;!e20uu5x(yYP3dSf8>1SD8)( z&_ww1FnKl%gSQ^*@bzsl0Ol{f8Na6M(<-xp$7EBlC-MZKI_99>Y! delta 503 zcmVOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00Cr4L_t(|oZXPIQo=wKMRx|l89LA(U{`yG zO=xJ4ywKQCY-ns4g%qZ-!@vg!+R!;Kq_8x^!Wj`H@dq-)N10G--@uQh?G+ zGw>qU+aXG!60gw<&6=U>;?kD_#RPOVw&P*s%k_nNl_||<+mB!1$l#t*4$Y~*3Y;y< zSJi7&flj#Mf59aD7|Wo_72u`<)}$9cNuXWjf>Q=yz4nN_W1BU!I0bOyo2j3oT-Rz$ z0cfmSGAL4YkOT}cL|+C4rfQTay3irz$G~Va4nxpW4G9o+t{R%&OZ%kM6)Y}*E;*2h tYY*o4Aolw?J}HV}&OJ#>?)XvbAI@fV3sjPSV*mgE2>?k&PDHLkV1m2+*dPD^ diff --git a/graphics/berries/rowap.png b/graphics/berries/rowap.png index bbeee3f3b4608f8daae62c16537a0c0da84bbb7b..decb5a2a99884fad677ac9b53c0717681f42260b 100644 GIT binary patch delta 397 zcmV;80doGe1lI$Q7zqdi0001B+zGXjdp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0003-Nkl~fQqG{fpGR|ld`kPMvVt? zMY+udf?n8eiVUWj+K!|Pq?;_5b1ZqZMfnbpfvDDDhQ!o(?>$Sk7z=8U<894y^5LFg zAYg&VfCp>7NOF0T^5|W?8uG_@;Jx=tAHla12xj;f^n`aq?BBu13*M&Nl;Z`iadOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00CJ^L_t(|oXya^PQx$|2XG?=DM$=tgeIFL$NY3b@ zKR+4Y^uy)&Y5=Y$12FJF-2Nv_0N^kUAbK7tN%~%d>sD?Ue-cZi!_D`q0ZC-kC^1B& zT>auq1U4-&x=Rc{S*rTFbD-lAwE~cqa8^T>uboU$gEWSVH4wh%Sxl(85wXmh*6S>b z3*@{kNZMrs@Zi!yTT0847RCd)*`~z6LMR&utmYPm3Pgz{BMKl&nTZgWgx| z$?U$0{LkH2<1W?I?Mf9$v+FXSbwNV{aG38#){*+{^~MKPG1yvmW0HZ>^Ge z#+rFhq-Ca#jlMwm&LiUMYEq9!uzqXZB{qX;>woR{T=V&!);dm|To%6L`0i^m_2xEp trZxYP0$Sedn>6#QHm;s@X#O9C{1{J8W&SDWQ-D5T@O1TaS?83{1OSjea>oDw delta 337 zcmV-X0j~bW0-OVo7-Iwj0001`EabER000McNliru;{ya1C<&OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L006*AL_t(|oaKIGLbyf?K+WTeBV()@ATUJSDnA~+IBAE+`OD$!@BM(>&55^%uD73 zX9O){n}0pIu1g@)#rf0Exs!fqe&YIiLU}jihs{5>^Kwkh+EiS>uZCN3Ry>E=@p6WY z32YgMSQdKGJAmV11}~Aj(O@VY2syU74KMu5vc4ow&9x&8ONW z-y>Q)G o!G}L09a{F6{y$XrdU+L7_jc|{CiRNez%XR+boFyt=akR{07e3uRR910 delta 432 zcmV;h0Z;y;1NsAy7-Iwj0001`EabER000McNliru;{ya1G85&a02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00ACJL_t(|oZZkdZo@DP1yBkIP_$F!7|0wg zo&)IufvFpazCkkwUL0r2*0sn|C>JQ2Q-_R@t$AC2+rSXt98Y~X1zytX_jcKp+**$fu()J5Gu(M9ic@2JckwEGo0XB zjY(F3upXh-DRks4uNOv4oVB6{@JI|IK#1b3^)5c0JJa5rB@?g?@d3$(VYy#O20$Rr z|IlFyJYuj2LIU-4JYogeNQ*3dhfM~eHS^CMG61P3*u3Weu;#uTE=vF@<*5h&&8gh~ a!}SBNT4B=s&!1EP0000cE*d3E55u4-}tg`?{~dTz8gHIFT170u&~p_SA=QD z8yAKL*H&=qJSo#sbKN8p(IZi&Ze$b?3 zkf?MmR&3{#3uaFH@9OSkaJ>A^{L!oXtasKMA9_D=O|xict>>hPRi`)Q)$DS!x_tBF vjsuRfT(|K5Z#!qY>+7kzQdJ`Ie<#Q7uH~rK^jvlq=xGK|S3j3^P6OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L008YtL_t(|ob8e^Qp7L}MLhvrW0sk1gM9%K z`2vf@4U*ooMbd9!?Fqo#Ah|7$Q(0?L3M_ZcC6ydBa~Yb*J(mnj1jdQa*hxc11oTaC47P@HOz` dfBA>?4b}8W5gnWA)Vu%y002ovPDHLkV1gDrnZp18 diff --git a/graphics/berries/yache.png b/graphics/berries/yache.png index 3f397827701679cf57db19244f171ec6afdcb507..43ebf0768281b97f3da8d52e8722bda3607e1266 100644 GIT binary patch delta 356 zcmV-q0h|7U1g-;+7zqdi0001B+zGXjdp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0003UNkl{hYNT`G8 C{jW*@ delta 440 zcmV;p0Z0C>1A+vQ7-Iwj0001`EabER000McNliru;{ya18WC3TE8qYC02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00AaRL_t(|oaN9#O2t472H>Ge*Op$O1{B}U zN8bTl^a2V&T>2J|x^*)ru#E1DX50xvC*I(BIg^4g)Ak)e%%<>vB$L#be^$p=hhS~$ z15h@X%dnY2wyTUeS~qo(=I5>Jwx%d+8J6TuYb#JTO`3ZSf3CYPicKBum6LmBsSc#& zBx-o@gID-~(<07u;^6lqK(bRN^WVQm!0Q-R0$&PGh&M6F!-4n215Ti2CLid{S&LZ3 zKZ6G%ViK@1BR^owzV1SbbG0|SHMLoVBi)%NuQB|(0{|Ixr%#Z6OyYBD`t978lF?hT0MJD|W( zZ1k@Fso_DTBWG)8m>&6*aqGyTwxkDV8y?Dq ze+h7&HWt|$EB4~x?5pB)xgMIe7#&=j$gw9e;~sNSK+c)X=cNNaU2n+U!Lai<_ltkt S!XZFg89ZJ6T-G@yGywpM=u>3? delta 261 zcmeyxc!6nxL^2CA0|Ubs!RIzWioL|s*OmP#3mdZ>w{&u2Gf+sp#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8mgWiLOx74>Jrb!k=_1>rp24?QwLQh{Z5>7=yz*&*^xI{B{6fD zHlOckuxOb&bG1VV-%g>C~X*ci-LsIn&eC&t;uc GLK6VH31OcA diff --git a/graphics/items/icons/ability_capsule.png b/graphics/items/icons/ability_capsule.png index 4cb366137fb5c1c6e016792d615d891835589d6c..49a70ffa56c3c5e85712427e041cd301abdcc8c6 100755 GIT binary patch delta 179 zcmcc1^pA0Z1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J&eux;TbtOguXwn(u%D z2aBs?cJ1B&+m1SPo7p-%FILxKeEyGHCud_glh8~i`DCFFCuUyN72=jYDU#Ar9Tc^@ z;~a-lkAT<8C-)b9)$|IyIB&=530mxXGuJpxw_dST+gScEU!uIKLeZZ4|9(#TU&we( XlBIU~B;%Jrn;AS^{an^LB{Ts5T*^>- delta 274 zcmeyzc$aB{L^2CA0|SFlq{3++#a`m+>&pI^m5EVTGj_YqVW5zBiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyaf4o-U3d6?2jk78oUnurM-mM0CZUuCigNQTn+#mXH1iG90$N!oqO$z1kyt TmIYgY4q)(f^>bP0l+XkKmI+>R diff --git a/graphics/items/icons/ability_patch.png b/graphics/items/icons/ability_patch.png index acbef74623f7ea65a994931b036e3f79009be211..8f14ab7eeee8d2b392bb5b876846e2a49b44dd9f 100644 GIT binary patch delta 168 zcmdnN^qFyj1SbbG0|UeLm1j>)thTQgC<*cl{*MOEDsGwrRFmZC;uxYa@os;hP=f-8 z%WW5tDSQ6sI@e!%#q>4p$4&Fo2e$p?Sm6JB+GfVm4OS+`N8TKHm=?_Aeo1T6<}0Tc zRHXZ_(po2Wcx}s!N#dJ4=1ec#C~zWp;a9VUnamd-Kl$#y?=YuGt|-$7{Zgq7K&pI=Nsxnw^RUxXX`qmJiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y}r`$=ls!LIqbJ4^TG7)5S5QVoq|x0%?I10TGdwO_If|=jT`|YcM?gvsdEc#j0lt zE$aKj*S&hubFMj|@5_Df(A8<@W-w1nI&)tp?&d{H(M5ha>o*=hqZz;~dGwNxOk$g{ f0hg2SGFb+OmuDpUkG-Af404U9tDnm{r-UW|#a2*M diff --git a/graphics/items/icons/absorb_bulb.png b/graphics/items/icons/absorb_bulb.png index d958ab368400806acaa18f633728fb51d7cb556b..a63f7a8bcc4a57df0b9ecc18498672109bbb684c 100755 GIT binary patch delta 196 zcmaFM)Xy|Qf|G-pfq~)r%Cn~?R@>JLlmz(&GyF#d2LigCfokeJT^vI+CN7=W%XL_R zr=@!O{Gb2)_sm##W{V)3wc`^zeYYZ+{~R}dOqu4Oc}p;YUtx&}OO{EcPz9S)-|YXt z8oU<7ZxCx%-yp0bxFT!M#EBMR0&vUz1?vrf(T5@j| pTs@Q1qGEqt>kjFM$NmTAzq-w|_fW%*PM}j5JYD@<);T3K0RX{UTGapm delta 290 zcmeBYddoCHBAJDmfq_9NQsFd^VlVOZb!C6d%ET+r+Rggb6euKK;u=vBoS#-wo>-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+Tbkr;B4q#hm1X1N;)K6D*wCJcRtzI5dwb zsPt`^v{5N%&t7czH7@kFf&%z^5Ul9r_8ym`d& zbcdGYZU@UGJv~P~Jw1Wco=m-UdU}}wmv3D%3A%g9Xu&qGC5(>BXDk;93N{u@H_FOT i_~{oQIDPv@MusmR#f5Afi#7or#Ng@b=d#Wzp$PyZw_j%f diff --git a/graphics/items/icons/air_balloon.png b/graphics/items/icons/air_balloon.png index 6ed3a9ad214d26512c6cdac550934aa244e69a89..dbcff6d13bad5c6b20af3c7947465d1bd0e2cdc3 100755 GIT binary patch delta 173 zcmcc4^n-DN1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J$H^x;TbtOl<9Q&pI^m5Eo*JnCfc7od=MiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyag3o-U3d6?2jk9GIJ$m^ijgnxxosJmb-l zB{^J=S6DDET`(s>Rl$Joz%j$1prE$mp57_Ff-(XPMG=lUGcK+<>ENezhIOGsC&P~F zLuUkX+7wh(__8%N$unKBSXjUqX3#QQu3@E^Tw;o*5&O{^1qKFI0bzE5@Yat&s~J39 L{an^LB{Ts592iyp diff --git a/graphics/items/icons/armor_fossil.png b/graphics/items/icons/armor_fossil.png index a24d2ec4da2ea92769d904e4094a51fdb2bb7184..7647f9db555bf089b299e48011b468231053156b 100755 GIT binary patch delta 287 zcmX@f{E}&c1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J&H{ba4#PnAke$b|14L zhqHH+;gkRN6~2?Uy^7mXCy`lW#CFI=?*Hj+bsvwHFx;PcbHZCgw!cTM5`7wqnwKoU zee!|M`E5%%-286u6FzZcTSLGnrWd@W41ZZGlJvOv_cLtXWVWh)f=xko!wWxY&5%>K zVk3LsC@8Xau87{_Sp7nAQ-6#@@3zy6j(hxIZRAWXwU%9?a!=o&ERZ)~zopr0H<+@p8x;= delta 383 zcmV-_0f7GL0?7lA7-Iwj0000ISs=>*000McNliru;{^f@9w$eBosa+k02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L0004WQchCv2MaZ z3eG7$G!tqzaJiFodV%9HFXeJ^7Pm$-f=v zUvbWVdiJa|cOSi{f|=~oka4dU34>W~XWpVL1R|KN>#*)}e=JLlmz(&GyF#d2LigCfol3aT^vI+Ca%5cE!1Mb z!4e=XaqxG1#e(Dffy+;|zL}KHuCwgrTc(0~{VaykKTJw#vsi1=dKNrevy=OdYmB7V zO~#4o`U|!=T-kYRicEuQ(*lujo(!uDsp%A-|XZHTQ`*EV=DokNyGO#^CAd=d#Wz Gp$Pznv0-Qc delta 316 zcmZ3$)XqFXBAJDmfq_9NQsFd^VlVOZb!C6d%ET)tB`-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+X|APZ!6KiaEXKt@#ca@GxBX!e+{y+B@-3 zm(0oHQ13H3Z+K)HI3~{3JIU#l?>)t3DKqoDKTrIVmj2_**k9Rf+t9?N>r#-Zz2^JB zva>g=lG&@~6(^?Tx9-qY*gkz>g7}Gr9P-)`e$kexCGRJi>Q!Ve-?+uJa9)pbf85lC z9d80Z?K-QNbgPk7kxgm&>D7sRjqkqRzM!gWzEo;WUhGr*$INBZRD3OFvho0(%HZkh K=d#Wzp$Py@@NtI# diff --git a/graphics/items/icons/big_malasada.png b/graphics/items/icons/big_malasada.png index d24cd9e00d3121ae551fc82c594a5391e3d29981..a651027774bb3307dc4f6bedef00129b9becc707 100755 GIT binary patch delta 223 zcmeBVUd1#)f|G-pfq~)r%Cn~?R@>JLlmz(&GyF#d2LigCfof)Yx;TbtOguW_BHv*J z4p;33JS*=0|NmAmYnR^L&t;x97VZj(x9etXDmr}RjEj+LrFjFHyDV)SCg#Pp z2XNOM4RJ%i3_41t>3;k_Pc#0BkM)hUWe$Q R=|ER9c)I$ztaD0e0syLKWzzrv delta 318 zcmZ3*)X6+SBAJDmfq_9NQsFd^VlVOZb!C6d%ET+jJLhPK8&F8R#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8mq*GFdponv&D>re@6SF< zcizsb=QDTL$FJ96iHw@Gv+C=*SZ!9;1Lrg^-q~BURAJI$R>>8N3=7QlLq2StVFh$7 NgQu&X%Q~loCIJ2Fbs7Kw diff --git a/graphics/items/icons/big_root.png b/graphics/items/icons/big_root.png index e857cc5f301e74dc95dbcdeb839ac9e802f63ab0..ef20e8ea541239af49916673741a17bf2875258d 100644 GIT binary patch delta 259 zcmbQwe2!^?1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J&&Hba4#PnAjWW$#>X+ zLwfVy|0lQ3+_pfg-A~B%0qdMOpN}`n$^FheTv6>}AtowzPI%%THp2-Ln!D~jlsDg? zQND4l(PwQ#%iW=;J$^8}h$>UrUD-EzDzoU8#QW2Qk1pdhd2%ZMbfFDTYmuT0 zC%t^-r_>ZV&9teDEvLaiQ^euGlRUuxlKtgH}Mc*$EJbs%*000McNliru;{qHFA}pb~!CL?T02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L0004WQchCoM?cKq`A;?^d7yrX)m5ez?v}UX5f|%zyaSiS(;l9?k`g# z;UY(}GocdN0c^~t5SsCUgeoR~fJLlmz(&GyF#d2LigCfokeJT^vI+Ca#@$k?)8C z2g^~`jbH!&-!AlyYpY$EaD17O+lDFq&MC(?ec39Ml{)d8!{%_+Q02YqPG?pHgifoI z(JyKiV_|v!R!cC7wc~l1+Jh_YPBU08vS%>(-DEt?$HTnvNVP%i&xOWkAD*&T?w@xs p`S8P@($9UzekrH^54`_`>D&vJKOe0WNo1X< zXkX8m_b7?W~xX?V{ZBI4Cdf-7QOICDli9e2-L`EZd$vRb42!wlN^}>CuG?7bY?#^i}WF zoFL5gY{m|W_CuB@k9iBu*|H^sB|SPSOydlLIon1P0e!Bd{t_vPoR%HzhZ=W9ODQr= kVftit$mU4H6U!u^V~e!n7N5!A19TIEr>mdKI;Vst0A#*mkN^Mx diff --git a/graphics/items/icons/black_sludge.png b/graphics/items/icons/black_sludge.png index 2e1fac755f6e1ebd387828cdb667b0172769013b..9987ef73b6ba849f882e592e71330535f7ad732d 100644 GIT binary patch delta 204 zcmaFEG@WUJ1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J$&7x;TbtOx!!+Am3pF z9;fUL|Nl>K&z!t8H*fMWRUv)GpB?%H8l!`E(BmQ!@t9eX-S=5uO`q*44$rjF6*2UngAC#Ub_GQ delta 289 zcmbQv^oD7IL^2CA0|SFlq{3++#a`m+>&pI^NrqQR-7H(;GEhjo#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8m$U< ks&wA?Q?opC-rweXJS<|3Z&-pC0o}vk>FVdQ&MBb@001&;9{>OV diff --git a/graphics/items/icons/blue_apricorn.png b/graphics/items/icons/blue_apricorn.png index 35d0ed23b24bd46ac022e2fa3b8e65abc9c2ad5b..9e1b19fb30b2ca86eb7382dc3d80002fa7b42610 100755 GIT binary patch delta 196 zcmeys)Xy|Qf|G-pfq~)r%Cn~?R@>JLlmz(&GyF#d2LigCfokeJT^vI+Ca#@$k?)8C z2g^~`jbH!&-!AlyYpY$EaD17O+lDFq&MC(?ec39Ml{)d8!{%_+Q02YqPG?pHgifoI z(JyKiV_|v!R!cC7wc~l1+Jh_YPBU08vS%>(-DEt?$HTnvNVP%i&xOWkAD*&T?w@xs p`S8P@($9UzekrH^54`_`>D&vJKOe0W-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+Tc9r;B4q#hl~>1u+9I11>Hu2TP|eH?4)8 z0&)thTQgC<*clX84Z^4g_>N1Jz`Ex;TbtOguZmo9}=E zhfAu&i@*6XF3DGS8>DW8|U+qb9g#~J(6yt5uN V>DI^n$OhWW;OXk;vd$@?2>?cgRgC}u delta 278 zcmeyv_>gIWL^2CA0|SFlq{3++#a`m+>&pI^nN?g!ZT>6Htw16164!{5;QX|b^2DN4 z26rEq06%wyveY64V?C3?)+G;tN;pai{M>;u#y~cMSA(WJkYY)9^mSxl*x1kgCy{lc zqJ2GMlDE6d|E27ojsj&FOM?7@862M7NCR>zJY5_^D&{07EMQ6yVPRs_aQC=*Yd%Q*qf#AI=W05cYE329d5sg}~sOC;uoI`{TY4e>c3Gx@@W1Z7p#4z)thTQgC<*clX84Z^4g_>N1J!Kyba4#Pn7DM}ZJ}lZ z4i{Axr{d55|8Mg)@!L}Sa?0^ywsO_m-_Bo{p>I*pBP7@5;oQ{0wDps~m9_`78SPms zyrwS*muQ>WSgdzBV6A{!64RZi_IR~mx<#sxn-b%bPtxDn%0zW@qNDEPF?POkM69Wm|wFvXZeOr sMKd0Con8N>hF9jXu>7mnoBtW*n~1Sz_CDVn2y{P#r>mdKI;Vst0Fp;@NB{r; delta 348 zcmX@Yw48Z@L^2CA0|SFlq{3++#a`m+>&pI^m5GmC$MaQiBv44a#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8my#J3-DHCetft5yLb~%URV%!%7neu-{ns*Y~0e9aBz3|`~6Ik zx>o{kNp1Xg@9$NGK9}kZ?ze93PSE9XTI#Spv+K(8=(y85}Sb4q9e0AwwKHUIzs diff --git a/graphics/items/icons/burn_drive.png b/graphics/items/icons/burn_drive.png index c83fbd335896fb69b0d5bec7e57d911034dbdc17..9486eff484acf45f61232638f9f31f690154d7b9 100644 GIT binary patch delta 183 zcmcb{)WkGFf|G-pfq~)r%Cn~?R@>JLlmz(&GyF#d2LigCfocjpT^vI+CZ3%TDAb_9 z;lg@t@BfL;7iOHYo1MA;i>>39t@B-6wngxM3+b~B*t_b;vWY>$>8-DB2K-qO`Tkr@ z>qFh13D*v0Y|)xtU~_1mgzAG;AA}NeEZ#AB{pdDjIoX+=;901Ac(c~gXTiq=^zZLD ce*Y=M)iS1e?Ems718ryUboFyt=akR{0Pfvc=>Px# delta 267 zcmZo-y2dm?BAJDmfq_9NQsFd^VlVOZb!C6dBqPqN=OeXm4^T+F#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8mN2q-XQlQD6bfbEn7SgY@c->#-TqQ_L)mwnsryPk9pA|qd{p$yxqF#$K${sn MUHx3vIVCg!0EWt6_W%F@ diff --git a/graphics/items/icons/cell_battery.png b/graphics/items/icons/cell_battery.png index 6183bdb085b331e37b8df0e501c0a7f616f4d2fe..23fde6a299b8d0f1da5b80d2b0c664d65aaaf17a 100755 GIT binary patch delta 131 zcmZ3;be?g71SbbG0|UeLm1j>)thUb=C<*clX84Z^4g_>N1J&4hx;TbtOuTzhQH()> z!^JV7^|$=Zt1Bj`{8awDK;hGbO(l5^s*4QTqD7i(8QFVdQ&MBb@0Q<)~sQ>@~ delta 213 zcmX@lxR7arL^2CA0|SFlq{3++#a`m+>&pI^m5EozO#a9H2S6e564!{5;QX|b^2DN4 z26rEq06%wyveY64V?C3?)+G;tN;pai{M>;u#y~cMSA(WJkYY)9^mSxl*x1kgCy{lc zqJ27JlDE6d|E27ojsj&FOM?7@862M7NCR>#JY5_^D&{079N=eR70huJLlmz(&GyF#d2LigCfojSOTB4YTH{*ETksudFsPUl7xl hth@F7q4>Vbyh6*F)-tIqx(9RvgQu&X%Q~loCIEr{Qy>5U delta 284 zcmeBRdd@UKBAJDmfq_9NQsFd^VlVOZb!C6d%ET+9I@@iY9Z*QT#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8m}6~ad%3? zs;>-=6^*y-xkEnvQ{E!_g(ZE9I^utk&msF)BGG5(i`B>1hw_8hop5FUYr;3g16DBsSS#+|$(p|;1y({3) dr&IY~nM!YqZGYz9@CfJ>22WQ%mvv4FO#lK5Yb^i( diff --git a/graphics/items/icons/chilan_berry.png b/graphics/items/icons/chilan_berry.png index d1516f7323dc1f2d41d6b928dfeec32d3e960690..c78465aa2183784fb25dae9019d59d3ec89c2ac7 100755 GIT binary patch delta 196 zcmey#)Xy|Qf|G-pfq~)r%Cn~?R@>JLlmz(&GyF#d2LigCfokeJT^vI+Ca#?rDAu6B z!4fOJ>Gyn#3qe<|hrgX~+_XaTufT)W=RKA8_ZEvWxNgysIW7>eQgMzrOP$rW1yh8$ z=1k5yc;xENYX*GX2UowE<9x&Ou!GX~mD~MtpT#996-Dbf&1*7n&AG$kT;H}brbOm_ o;#{exHN_iJYbShjFTd0tQ}CEYy&=Yv9q1GWPgg&ebxsLQ0B1*A3jhEB delta 302 zcmeBY`pGmwBAJDmfq_9NQsFd^VlVOZb!C6d%ET)pa%#pr7NC%LiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyae-JY5_^D(19KFyuRIz~Oq9w`o$?%xdQD zBBtb(*-s)~ao*Y)tT&ZsGI)>mB$W?)k93{dR%PBmNKb3=f=U2%BgUbDwQ` zyGqyX<1v@#?a-UOd)}d~V)J>bSFP>RT-^91L(rjgYh(AJH3~}4W>4lkBpWr~dPRWE x;b{+EY{+_Ftv1c4CdNQ0aK9Qu*4#fQ#hoWBC0AT2um?Jh!PC{xWt~$(695I_ad7|u diff --git a/graphics/items/icons/chill_drive.png b/graphics/items/icons/chill_drive.png index a2c7e98a6893275c11b47a829d37be8a4e0668c6..d3d5e019c2469a4d3fac90b9d18e55ff276e5329 100644 GIT binary patch delta 183 zcmcb{)WkGFf|G-pfq~)r%Cn~?R@>JLlmz(&GyF#d2LigCfocjpT^vI+CZ3%TDAb_9 z;lg@t@BfL;7iOHYo1MA;i>>39t@B-6wngxM3+b~B*t_b;vWY>$>8-DB2K-qO`Tkr@ z>qFh13D*v0Y|)xtU~_1mgzAG;AA}NeEZ#AB{pdDjIoX+=;901Ac(c~gXTiq=^zZLD ce*Y=M)iS1e?Ems718ryUboFyt=akR{0Pfvc=>Px# delta 267 zcmZo-y2dm?BAJDmfq_9NQsFd^VlVOZb!C6dBqPozve4S(EKo?i#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8mN2q-XQlQD6bfbEn7SgY@c->#-TqQ_L)mwnsryPk9pA|qd{p$yxqF#$K${sn MUHx3vIVCg!0BxdQ+W-In diff --git a/graphics/items/icons/choice_scarf.png b/graphics/items/icons/choice_scarf.png index 51157fcc22f097f39c733412520d48ece1571f84..99e126453ec9f13f3ff2097901cfb07913860046 100644 GIT binary patch delta 272 zcmdnbe4A;41SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J#`Jba4#PnAkhXTj+=a zhfDJxm*W4Q{gPD!jW+sa#pQe(Q#;-#BB=;d%8NN zPhI_>I61Up+sWD+v#VLevnF?keRwC76|=10W9_N36%f`d^jcy3mbj34m4P0UwSTsL+iH%xQ{riovs|x)@7}r%h_q|%7 z{yVS1V8fc}XW2Mx19n*jcHc>Spu3PYZ>nBIvG*~P9Y>|_OD7%w9{*vpo$ht^()_P8 R?f|{T;OXk;vd$@?2>_64hO__x delta 373 zcmV-*0gC?H0>1;07-Iwj0000ISs=>*000McNliru;{qHFA|o*d+{yp|02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L0004WQchC)thTQgC<*clX84Z^4g_>N1J$&6x;TbtOx!!cQH)uU z!&#MQ!M*&pI^NrqQRE;Db!ZJ>~NiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyae{o-U3d6?2jk6vR0cH}@v!sIe&~t4g@L zo`{&pc`Pv0FR7t$#vyOf1y-UGGnAIG8)`5tZRrw~kXSv<+K_dn28XCNQ|hW|?5n3u z*Amq>Vz8Y0_UY5u%if}r4Ki(CKB;^TeH)N%F?F)&mEF^JLlmz(&GyF#d2LigCfol3ZT^vI+CN7=mD0D=D zgXM5T)Bpbk2Yf}mzi-%j=S^9|k=MVLcf9C1XrXaj=}p#dy`WQR9CiDz3HW47d#p6A z(iQwvY{E59{KG#xi&fn-6~$ESj<-BG;@&dvbNlgDMFyXFEFliQhCc-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+X|wPZ!6KiaE9Z8wC#;@bs7+Sg4@e_kP93 zEsalkZJgOWrfxB5oTm11TVRg-4#v>`zpi^{&HB%}>d@N1o2JdN6wKWv zFw)*Y?7n1e!3^aC0-GnOFiNH!ku!eD&loJ{;T_CUbP0 Hl+XkKA%kz# diff --git a/graphics/items/icons/coba_berry.png b/graphics/items/icons/coba_berry.png index 5ac21683e07f5d7342f009cfc8aa83e9c029e1f7..05f117f4bfa48bf6783c1256a2a57a2ff3dbe983 100755 GIT binary patch delta 196 zcmeyw)Xy|Qf|G-pfq~)r%Cn~?R@>JLlmz(&GyF#d2LigCfokeJT^vI+CT^W*D0V=B z!`YST-v48+E9?TN^PT+>+{C-|j|$h^Ek)r=d#qbKD^0D~TwE+Aza#~Q>KuE}7AkhQ zsA>DMNj>|n?3Df-YR7Q8Q13Rw4e>di-%d?`uJS+ic5|-64t0ZThY#Fqmt;;}pIkSu pYw3e~<$5(S56c#wzH9fIQO<^W!q!!vLV-?U@O1TaS?83{1OP~WT`>Rv delta 295 zcmeBY`ouIrBAJDmfq_9NQsFd^VlVOZb!C6d%EYT=cpx&+4k#pE;u=vBoS#-wo>-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+Tb=r;B4q#hj`Arv(oy@USjqHV`#fcc9LP ztHXtTn)C?=s|~mLpFIvP>hRmGym#V~EA~s*Zf$q&lb5%yc z!z(FTz26mmWsd)~d6JnmC)sYYj;YX$qG`Dta+aPaw%afkN>?fvtlw^M`O>%GhlMkD pw>=0ISNl=-|7(|N{JcMr@)thTQgC<*clX84Z^4g_>N1Jz9Pba4#Pm^gQ$qfn~> zhcj=>@A#kUA6Yy(DWk+tS0f zD>J{>NKLu?MW1rZyZ`SKQ)*!IpAnk>^g^2H<=XUv-WvxU7`1+Gtt1jk^A=R z8-H%eD)N5&6Z&9_{j2x8E#G8JoZI$w+t&T}D?Wc#v6lE=-86l2U9Y^2EYn8j3o_zB PCo*`t`njxgN@xNA7s6?+ delta 301 zcmZ3^^n+=FL^2CA0|SFlq{3++#a`m+>&pI^m5EnL-K6(PK2S)!#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8mU$IbewQj=fI{{F3={m#QXix(6Z9DWgZmv!>=v*rQIN^=z2GFKYhIHHlteIiZd zq}UHfp`^kGe=koF*{uKbLh*2~7Yu5^V1P diff --git a/graphics/items/icons/cover_fossil.png b/graphics/items/icons/cover_fossil.png index bc8bbe69b5ee1c2d6db9c3e2fc959044e527a49e..1202bb4556982ea61cfc26c09ec2429455055754 100755 GIT binary patch delta 242 zcmZ3)yq9T$1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J$hYba4#Pn7DKzH{THj z4wr78rtkYd@NF@jRW{jIY;w}`kHP(q^@S&v@7($=Ws0cR;l3lg4#}4Aawm!&vwpl$ zkn{DG#A!#j+;@;zA(1D^pKF_vX<%c$ShHAvLMz9W7g_5#B@V}RMsO79@oFoW^1OO% zw_~T{4()!2ttEWs(N7jlQ(w}}s`4n=^Oy4L`41Wc%KB m^P`3H&px^>z3-I$E%vQJtlAUf?#lrk&fw|l=d#Wzp$PzWUU9Mj delta 343 zcmdnXw1|0vL^2CA0|SFlq{3++#a`m+>&pI^m5EnL^6Q(QM}R`&C9V-A!TD(=<%vb9 z4DLQI0ed_&uf(2v|N zj9+9#t?6+&u#Szbe3nTMkMA!=iTZFZ4+)<=mu)M*@7?p-qW;NF?)|r`HuGyVb_OtN z>3vTw61^a$_pnmpg;rO7i;d12$vvC7Tl{B#&OE(DO=m^lI^U@$7b>u@t#C-~DPC25 zL%^+ZWnaVrtw}MaASi9Nbkcr(WRg4M(ru4>8GcT$#5HxQffTw1p!Z@K$MGo}A# nPWudB#_-K7i!6Ou|B`u)jMno%tKND6eZk=A>gTe~DWM4fIvaz1 diff --git a/graphics/items/icons/custap_berry.png b/graphics/items/icons/custap_berry.png index 3fa594667d46ec342b5b3c790038481f9e289182..56f1492c3cf70c2d6f73d0f5ca814058bc1ab836 100755 GIT binary patch delta 229 zcmbQnyn$(g1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J%s;ba4#Pn7DM}L%zcb z94)7xT=?{le~}wy$3G%G$pR>^!%7Yi_z)cJYa`STy5`D4q#D z9WNOgN|mPbU%3`_Rc=usYs0m3nbGNJ) zW#BFdKT~^k1&f)T(ybk9*H(0Fd~mzCY(m_Nzy#?T_Zn`m_x(`jtF-yov%V*%m;PI) ZJ}Z*000McNliru;{^f@A`byLOqBot02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L0004WQchCv5HykE%AfDay2seR!$oo4 z%l3MpY;Rq$M}+7^mB25km0;C9q6XBmFL(r>2K$jPvKZrNU6=V4Mky6w-}p>u(9Qvm zH9-!u)u7h=8A#O7=gFoef}$~DLeR=nj?spaywBShXB@d5o(vf`=JlJ1b??UO@P70R dea_Cm&lfqeEgWxo4iNwV002ovPDHLkV1g@Vfw}+y diff --git a/graphics/items/icons/damp_rock.png b/graphics/items/icons/damp_rock.png index fe908739e5bda6005cd8e8c4399d9739359e2aa6..97c75b08fda4ccbcd38956a4add92cab3be8d073 100644 GIT binary patch delta 254 zcmZ3>e3EH`1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J&&Cba4#PnAke;wh*%- zhqE?I%m4om*{)wL-DP}s@?pgjPe1=$UG~ykYr0=ZpsbK<^|7zhW<*wZuHJF;lSyo= z%bo2@HNX6td1m|4##dkS-^*^)w*%y1AC>s_&@CFId<=D<>|*w&%fS(>>Yown)RY{xb7XGCm1|k{an^LB{Ts56$yM^ delta 354 zcmV-o0iFKI0<8m(7-Iwj0000ISs=>*000McNliru;{qHFA{qAz1$Y1e02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L0004WQchCG{iF44r@)#=^Hd5IYATg?31QFIr3;-!?*dfqt*rSyNM0b}eC zVKD#~zC!>ucy)J)*r6>kML6DKUF9G+vsGP{T0}B~SdB}IbVX5FC{WYVzAVBdQ)4zP z{p{mo52cE&-@ytsHQzNyu>95yAAlJlj2_lEfJw29G0XM@QQM{@G17F6(%6P1C6)EO z>C_?hsJzM@I0&U;$Hfg5YWL}VLUK%cEaJSSA0+cKS=}nPmjD0&07*qoM6N<$f&x~F Ag8%>k diff --git a/graphics/items/icons/dark_gem.png b/graphics/items/icons/dark_gem.png index 947f04167490568a9a072b7bf8aa17e1d602a135..8999ca25acccf81ef6e86cf9334c51d3023326e3 100644 GIT binary patch delta 176 zcmaFJ^qX;l1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1Jz`Cx;TbtOguZmo9}=E zhfC^@JO588NvxihJNeuvTjPece-*YA6*edzNbFEg7h5*hdd5fbEyXX^2-Wd)7GITl z=r%1Oke9jT=B`UB)0212wEQ?D=C_snp@R4oiyxo89AdLhzw(Vt*r$(&P5gIWL^2CA0|SFlq{3++#a`m+>&pI^nN?g!p{#RF15il3#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8mLLPLYkF%s-<-E5{bE?&b_@;LwpX%Ould-L0MI`LoM<8g#cAm zQTL9_v`oFGCe48Emf#qcqaulV97TdYO*=Ij979<37>k&lm{yz?ym{9{NQH@^?X^Iq USdaN*pd%POUHx3vIVCg!0GmHlJ^%m! diff --git a/graphics/items/icons/dark_memory.png b/graphics/items/icons/dark_memory.png index 258bd309bf404e482f3adcdb1677fe43265cc681..3cb69c7a5f67d70f4d6ce1e016f279f2b67d8259 100755 GIT binary patch delta 247 zcmZ3?e28g+1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J!Kwba4#Pn7DM}X}-e> zJS?x-4b>F?{@?#r%Ecj5FZBDAGaff|)?c?@IF0?xBCVR>13H<`Q^J|gTywc}mE}EC z%p0L8#e9>4f&{-C@w~O}SviYI-hFBJ;RrRY#(XB3c+oFHhKkAQo$^d;j=wYsPg;6x z;^t|ZXG|_WuydO+Gvkd2_rnF>MHXcmKihU`#)Xz|Mn{^bR~BZ!UC0~H$MtYctVg7! rPovZ7i&pI^m5GmC`DUo!380X8iEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyag*JY5_^D&{079N?E=Wo3PkqbQv2$|w0m-b0j866+bv?}y{>02gL{(NS-UQ@{1dw1_? zn11Hz306E%@myzy^2LjZCk|9Rd$+SQp?RuImSoDgIhDHw&S;j4+7v&#<2&Kvqo-=B z?~2dOo6Y}BWcM=dvzE-)4k^Sjm2^LyIX%Hz();oyCmY385)$e=m$q80|HDzZ<%){< o@|oO;_a@HbOkZ3j#m>MmZMtpS+s*YQKyNU3y85}Sb4q9e0B{g~k^lez diff --git a/graphics/items/icons/dawn_stone.png b/graphics/items/icons/dawn_stone.png index 0465d18bad46738f1dd93e637b31e98e411e6bf0..a0db015327fd01fadfefeef7d0106676ae799439 100755 GIT binary patch delta 201 zcmey)G=*t`1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1JyKpx;TbtOx!y0B43LE z2TLpK&;Ryz)3TUuO|LGvY*MJ^u;KVe*Cm?{MpbGhMW|hU;_}UCQC`)&)EcfkOkxx6 zaXb)EsqdVc;bihgOHp2FPRv!~Yb{U9Lsj01UTrvKdn`vJex~Um&2`QD&pI^m5Eo;WVYP5BA}3XiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyag7o-U3d6?3MZcjP;yAix^1gYgBYOjbvj@$PAuv~%AL#RnfXH@x|RM6Koj*BQ6HMk+nP7H_zg@;m26c6-$y*PIW#>Ej{JLlmz(&GyF#d2LigCfof)Xx;TbtOl+OV$ahqM z!`W5iyZtAwysp{y^Ic48O%`qWrmylyrTpqWdk>Q@F7_qPs+V*fRX#f%S$42$W6Qxy z2kvgrNm87U_AOQL3%g`#J+qo#Nc(S=hUwdmG_p(ylovYSeA*|sI`LF9hux9jeEmaw zkK#`1ZJ!_Wc}BvNnX8i27p=KkawGOjM96#P{k;No1X< zXkX8m*>^ylKa1Xi|Mn`Nfp2g~Xg=3w8A~Ir!{P#7?xVEZizwo7n!3>{N{eo6EKAAJ=O8uD`lb5`S;#Qhe zb|dP#`#tN+ORV~vOg9{P6d0dho!$P)Wd6^ME(x#G&ITBN-rFAZWaCo%(k9t+6I!;+ Q0=k#M)78&qol`;+0M{pdv;Y7A diff --git a/graphics/items/icons/douse_drive.png b/graphics/items/icons/douse_drive.png index eee5ae35f1efa90dfee9e4e1dc3eec5082c23847..f59616159aed0435f89fdba79504a4ba226ceaa5 100644 GIT binary patch delta 183 zcmcb{)WkGFf|G-pfq~)r%Cn~?R@>JLlmz(&GyF#d2LigCfocjpT^vI+CZ3%TDAb_9 z;lg@t@BfL;7iOHYo1MA;i>>39t@B-6wngxM3+b~B*t_b;vWY>$>8-DB2K-qO`Tkr@ z>qFh13D*v0Y|)xtU~_1mgzAG;AA}NeEZ#AB{pdDjIoX+=;901Ac(c~gXTiq=^zZLD ce*Y=M)iS1e?Ems718ryUboFyt=akR{0Pfvc=>Px# delta 267 zcmZo-y2dm?BAJDmfq_9NQsFd^VlVOZb!C6dBqPqp7ZZ7QJ5Wfx#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8mN2q-XQlQD6bfbEn7SgY@c->#-TqQ_L)mwnsryPk9pA|qd{p$yxqF#$K${sn MUHx3vIVCg!0K3*;F#rGn diff --git a/graphics/items/icons/draco_plate.png b/graphics/items/icons/draco_plate.png index 9b08c31c8df7bbd046af83623c1f118db34a6118..21339c048226491da1259b88645a08855672c49b 100644 GIT binary patch delta 169 zcmaFN^o4PP1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1JxvZx;TbtOx!xjk?(*4 z2g_8^KmYr)`PVGkVq3b$P;s(^SLO1&0=*3Fg5ZTl^O)Dh%($$;zR delta 280 zcmeyu_?T&eL^2CA0|SFlq{3++#a`m+>&pI^NrqR6pZVSfO`wo?iEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyafqo-U3d6?0NAoaJp$;9*U;abUh62cN)thTQgC<*clX84Z^4g_>N1Jz`Ex;TbtOguZmo9}=E zhfAu&i@*6XF3DGS8>DW8|U+qb9g#~J(6yt5uN V>DI^n$OhWW;OXk;vd$@?2>?cgRgC}u delta 278 zcmeyv_>gIWL^2CA0|SFlq{3++#a`m+>&pI^nN?g!Ci2+@cA$`WiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyaegRB@%N(oqKzyhWH$inS9|wg0iY=hg#zG3jwOC zqV64;X_mdKI;Vst0O&AQCIA2c diff --git a/graphics/items/icons/dragon_memory.png b/graphics/items/icons/dragon_memory.png index d073dace311d1b6d64b92c6985d07dc34d537c6a..3888b3f3af5f63efb9886471b44175cc25857d91 100755 GIT binary patch delta 246 zcmZ3&e2{5^1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J!Ksba4#Pn7DM}L7`>^ z9+$fgCM*a4|G%vlawSTC?z_&)`~>5~S^qezLPfKUw>JI=uxpK&VS3E&Qbxw2kNbG^r*oUk-Jbh{eg1>rypwC5n%q44 p?85ev|GavSrT1Tby#3!K@x7nePfcU`zYOSj22WQ%mvv4FO#nVHbh7{e delta 345 zcmX@ew1jzrL^2CA0|SFlq{3++#a`m+>&pI^m5GmCCf_*uD^N(h#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8m}$F_ezAaio2v8bfP`+d9j3#1fOW_v0(zqz~nzXMyxjutcSdwZ+@i=N21 z7|`2sZR_`U>)DE%W(CJyyT_WHC~%cwm+R|y`Wxoixmjv>CtX5^4)FbB%`}` p#o3IjZZpc4gde=QV%{-E2J21EL7YB^e1ZO8@O1TaS?83{1OS8Rf)oG% diff --git a/graphics/items/icons/dread_plate.png b/graphics/items/icons/dread_plate.png index f93493f97bbbe7afe74486d13afc8e0344776473..8679df524d240940861934bff3e5fac51c37170e 100644 GIT binary patch delta 169 zcmaFN^o4PP1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1JxvZx;TbtOx!xjk?(*4 z2g_8^KmYr)`PVGkVq3b$P;s(^SLO1&0=*3Fg5ZTl^O)Dh%($$;zR delta 280 zcmeyu_?T&eL^2CA0|SFlq{3++#a`m+>&pI^NrqR6t9XmcGN6!niEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyafqo-U3d6?0NAoaJp$;9*U;abUh62cN)thTQgC<*clX84Z^4g_>N1J$&7x;TbtOx%0^pwM9j z4%dquQ34uAXq&!n9&m&pI^m5EnT-h2_i5l~3H#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8mpRhM~5X;Aw-rnA;mzu7`N;S%yJbCPxn^%;oUzfr;p9NOQ$=a$M>EF|m zlRp=6q+fbxtR6n!ax=%7oh8fm)O??3tnDD)thTQgC<*clX84Z^4g_>N1J%@fx;TbtOx!xrQS7h+ z2dn86{+<6@yB#hytnb$QHQjg-Q}Q2W<4unbJNru3Rd!^A`JI&HH|DqAv4g{SF_%So z@pKDw#a-MCMe|m9-|2U0EHsW);SbFJ#UY}&NxbF4>zB9YaT@mSw__Iy-zpYVuwv60G>yv6?@8wrAyF6vtRg%hW26PL9r>mdKI;Vst0MrRpbN~PV delta 301 zcmbQh^n+=FL^2CA0|SFlq{3++#a`m+>&pI^m5EnT*iOV*5-22I;u=vBoS#-wo>-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+TcDr;B4q#hl~>1x5}oF0KPNy}Z2I0^}A? z>hA8|sMw;s9SHHW!_VxpUgv`QWRTp35;>4`eoPIVJgaX=0l| z=u6}DLzbCS75p|Z2&qdR@?1a1a)thTQgC<*clX84Z^4g_>N1JxvZx;TbtOx!xjk?(*4 z2g_8^KmYr)`PVGkVq3b$P;s(^SLO1&0=*3Fg5ZTl^O)Dh%($$;zR delta 280 zcmeyu_?T&eL^2CA0|SFlq{3++#a`m+>&pI^NrqR6WeQK`LZFa%iEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyafqo-U3d6?0NAoaJp$;9*U;abUh62cNJLlmz(&GyF#d2LigCfodu}T^vI+CT^YR&38b7 zgOzpbqVM(vj$4l2U!{3^rbT7vxxYmW>^(aS8RQIg+6?8}PHL=6Tj9u~@#B$nmICMd z$sH-#4wEttU2E`QOEuHHovY)KH8cN)np1Xdw8^4tvow!#UDD2NQeU{WYkuTkUcMip i-0!lQLuKt=eZK4ahQ-KKGvYVU6%3xPelF{r5}E)^3RP$T delta 295 zcmeBT`ouIrBAJDmfq_9NQsFd^VlVOZb!C6d%EYV4v8AxNo1X< zXkX8mOJSEv$draTO6nV?xJ>R!i~N<+(I_OV zdKkG*rTAS%OQQ{b<;-2 lJ?mOI_zk&~D*Fr=7;^q7U0<0wLm%iW22WQ%mvv4FO#ryqU@rgw diff --git a/graphics/items/icons/electirizer.png b/graphics/items/icons/electirizer.png index 73f6f8f26ed76c28f4a505f5109b779f1b216af4..f0351e64d61c52dc1df31aeac65d21507b88b63c 100755 GIT binary patch delta 196 zcmey&)Xy|Qf|G-pfq~)r%Cn~?R@>JLlmz(&GyF#d2LigCfokeJT^vI+CN91Bkn4Z~ zhug)-tk-|zD}HZr5^p~Er;>l-mBK#~i>AkLy=}{xocYv8(|yq?9YL2Ek8G8R*VsbN zC_LeDo5wt7?|iqnjIzud&oFLz+_UK^PnYr?i>60?45~S%dLIpJ^!MLSdH1xkF*r7Q pskqsuwcG3&KhB#QSNHvPj9DPd3sd&1SAkAp@O1TaS?83{1OW08T!R1r delta 296 zcmeBY`ph&zBAJDmfq_9NQsFd^VlVOZb!C6d%EYT+(Y?7_0w^S2;u=vBoS#-wo>-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+Tbwr;B4q#hm1X1NCBZJ^OM*azWvm`pH;E$C(v08p00i_>zopr0J}J2TmS$7 diff --git a/graphics/items/icons/electric_gem.png b/graphics/items/icons/electric_gem.png index 88e604f182f83899b0039f7a423433e74b0fe9be..e17e3f4d139a34708c5b6f56c960ffa8d59fd030 100644 GIT binary patch delta 177 zcmaFJ^oMbR1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1Jz`Ex;TbtOguZmo9}=E zhfAu&i@*6XF3DGS8>DW8|U+qb9g#~J(6yt5uN V>DI^n$OhWW;OXk;vd$@?2>?cgRgC}u delta 278 zcmeyv_>gIWL^2CA0|SFlq{3++#a`m+>&pI^nN?g!{G17AKTt@##5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8mLLPLYkF%s-<-E5{bE?&b_@;LwpX%Ould-L0MI`LoM<8g#cAm zQTL9_v`oFHPc;L&TY_Uwofb*d<0#VfZ`!HR;26TH$5_Pd#I)kH;LW=pLMluQ3ttIc UtkCMp2Reem)78&qol`;+0Bl@Ur2qf` diff --git a/graphics/items/icons/electric_memory.png b/graphics/items/icons/electric_memory.png index ce9a8f362472756d183dc3b583780ae0966271b4..0ab5da3770d42219d4038eea35ee7be3e027254d 100755 GIT binary patch delta 252 zcmZ3=e4J^51SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J!Kvba4#Pn7DM}ZLt;w z4p(OffzAK^=d|1h=YvF~2H*ZMyh_H1Q8tJ+}L4)g+pr>mdKI;Vst03EV*bN~PV delta 346 zcmV-g0j2)O0;L0x7-Iwj0000ISs=>*000McNliru;{^f^2Nf3Y+fe`j02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L0004WQchCo+QjC){Ox;q-L%|%$nM%zr?xCwTf;ciKCz%(Q zuDbgWr0UF>$rGhl-Gy;11sLDn19K#2&J1K=y!-C{LXg2qY#N0OvUl(P0~sLEVO%13 z_wM~yAftti!_AA=-n+jV%rPxV?pS*ltc5|w9O#y)yT8D8GMc2NxmQ6{F)%I$%9QTf s2ywLZim-@P8)4p&UIk~PdKw1+0POuj&NrELoB#j-07*qoM6N<$f~Dex{{R30 diff --git a/graphics/items/icons/eviolite.png b/graphics/items/icons/eviolite.png index c08cc595068054e99a5c95b9de191a2550df20cb..b8bc613f8f507cd73443e043adfe9af177c1eff5 100644 GIT binary patch delta 153 zcmdnX^n`JO1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1Jwk3x;TbtOg!7~$aTPg zgJp5v*Z=nKW;rdq=$wCY!sVU~DLsb;C*E6~75?I^$lU!`vM1V@uXoi@|2CJg*2T_T vM^Wxy+x9i{RNXBC?U~fvzZ!3?VmFs`W#Sg_wp9Td&*16m$Lg}qDWM4fRun@` delta 242 zcmaFDxR+^yL^2CA0|SFlq{3++#a`m+>&pI^Nk*KHW2;q06HrLJ#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8m})Ul2=c4&a`RMcubp)>g-)(bC%_proO)Z;bVyfe){_UZITBjg~d%{+I~e< kmo-mwLi>?rEDQ{Oyn@Y1`T6=l^BFu{{ajeqIVCg!0CjgrwEzGB diff --git a/graphics/items/icons/expert_belt.png b/graphics/items/icons/expert_belt.png index bc00454907e3e76c93b63311c592c4440205824e..62d4b8bc2605d8dd6e0ea5ab9ddd261b0f1eb4c3 100644 GIT binary patch delta 217 zcmey*w1jDb1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1Jz9Sba4#Pm^e2uQ0%Y) z2iJqY=WW)yUEa4={GOYZMUR!xFM@*AF=o3u0St8MfB4;h<|R5m}Y{P|9-)@z4sn7i*hjD6}s@M5$HY! MPgg&ebxsLQ03}XrLjV8( delta 308 zcmZ3&^q*;hL^2CA0|SFlq{3++#a`m+>&pI^NrqR^^0{YOF;Gan#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8mE{Yye;9yo4IL$D%xG_w8 z!><26>=kccU;ik0kfn*~Pv?(wM-5W;FLq|!{_6Nm(crx0hNY`HHG{@cVrbKksK8>Dj+vXO!()z8!!OpT7`&9JXs^#CtF+K>+ zbw42F8(nJ_C(G2oFDIhI`~S=&p_AtyPkixLPgTe~DWM4f Dn>=<2 diff --git a/graphics/items/icons/fairy_gem.png b/graphics/items/icons/fairy_gem.png index 871f74426d8ea309c3738acf32c8ecdc47c5760e..5fe8f6ed99e3d8510df4847063e953ab6615a5ce 100644 GIT binary patch delta 177 zcmaFJ^oMbR1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1Jz`Ex;TbtOguZmo9}=E zhfAu&i@*6XF3DGS8>DW8|U+qb9g#~J(6yt5uN V>DI^n$OhWW;OXk;vd$@?2>?cgRgC}u delta 278 zcmeyv_>gIWL^2CA0|SFlq{3++#a`m+>&pI^nN?g!_+;eSX+R;u#y~cMSA(WJkYY)9^mSxl*x1kgCy{lc zqJ2GMlDE6d|E27ojsj&FOM?7@862M7NCR>zJY5_^D&{07EMQ6yVPRs_aQC=*Yd%Q*qf#AI=W05cYE329d5sg}~sOC;uoI`{TY4e>c3Gx@@W1Z7p#4z)thTQgC<*clX84Z^4g_>N1J!Kxba4#Pn7DM}X}%T% z4p&yLFK_?TUEBD>r+yq;UR8T7{u#sd8SE#F*6cY1^Z|pXtDnm{r-UW|t_XOp delta 347 zcmX@cw2XOzL^2CA0|SFlq{3++#a`m+>&pI^m5Gm?Z%&ucUZ9Y8iEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyag5JzX3_D&{079N?E=Wo3PkqbPjcg;BzK z=aHkff`=w%Fco>7JrL9*D|=G)-NIuDeMiplZT)oVL8!E&%*@HgL5G{d@78hzT`f+# z&CDrx6TQWEz3e)rEwAb0s<%?Xa*-rcQNU~ZXm=@9Gtdwc(L zrEH0qm6>(pR`vJrW(%j25A(dT-#2YF@R-4LH>vcy_zgd|QgH?LMO}@Bh5>37*WEf6 rFBP9YW!)`~&wXFCETpeqwqRgTS94)0P<*5f^a+EftDnm{r-UW|einl` diff --git a/graphics/items/icons/fighting_gem.png b/graphics/items/icons/fighting_gem.png index 7f4fc8b97d31d9a170ad6352ca32435e7d0ebc63..2293767794857c1e718e7b9e19411afc05feca50 100644 GIT binary patch delta 177 zcmaFJ^oMbR1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1Jz`Ex;TbtOguZmo9}=E zhfAu&i@*6XF3DGS8>DW8|U+qb9g#~J(6yt5uN V>DI^n$OhWW;OXk;vd$@?2>?cgRgC}u delta 278 zcmeyv_>gIWL^2CA0|SFlq{3++#a`m+>&pI^nN?hfZ&mz4f1r?fiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyaegRB@%N(oqKzyhWH$inS9|wg0iY=hg#zG3jwOC zqV64;X_mdKI;Vst0KT$S`v3p{ diff --git a/graphics/items/icons/fighting_memory.png b/graphics/items/icons/fighting_memory.png index ad21a2d078c4e665c575d9cb0dd5d7c5f7702240..f46e89d7333512312a6cebdb0249e2d792970dbf 100755 GIT binary patch delta 246 zcmZ3?e2{5^1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J!Ksba4#Pn7DM}MWMqA z94yTo#}+;N|9@M1=e1?EFQ=%dhugAkdpmzoTztU;3Dr9y8;X21cSil(H=ij#%(;?F z@R{a|iMu;@oX-i%;4;@*#1xag_++Aqu;_7f#=c(2 p@Qce!?z6Rh?DYRyx_18+;p3w0*UvD;T?IOx!PC{xWt~$(699AeaHs$P delta 344 zcmX@ew3vB&pI^m5Gm?qx9wW4xo^DiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyag*JY5_^D&{079N?E=Wo3PkqbMBi$|zxd zbMKu{!9x=>yvp)rbgmKn88nZDc2ImFN)kFBW5U%tg6Ds8j( nhj+~e?@zpG+Z<@y3kgTe~DWM4fldgZo diff --git a/graphics/items/icons/fire_gem.png b/graphics/items/icons/fire_gem.png index deb8979bd8eb153df3014897ff566b1e58280782..d6caa7d3d17b4867a275ef66772da51ddc13467d 100644 GIT binary patch delta 177 zcmaFJ^oMbR1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1Jz`Ex;TbtOguZmo9}=E zhfAu&i@*6XF3DGS8>DW8|U+qb9g#~J(6yt5uN V>DI^n$OhWW;OXk;vd$@?2>?cgRgC}u delta 278 zcmeyv_>gIWL^2CA0|SFlq{3++#a`m+>&pI^nN?hf!`X(V3MeFA;u=vBoS#-wo>-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+Tber;B4q#hm1X1xyJdEKH0V?jAR9-0%?8 zN=)HlIVYf*m@KXkV8-GtA)l#~7iNxGc=ic6_AwCCWCSSOapscFep_X|4LV&8O zsC!3dTBhF9rFVdQ&MBb@0LF_{`2YX_ diff --git a/graphics/items/icons/fire_memory.png b/graphics/items/icons/fire_memory.png index 33116aed1223ea6b9bd195ec18e47bc5fa1bf0cb..bc62b02c15e99a4cfdf38772b0e511d93d67084e 100755 GIT binary patch delta 246 zcmZ3+e2{5^1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J!Ksba4#Pn7DM}X`yBV z9%jR1d5>&<{NKM;hGU85bidL&vJ>1Rr`0>@@>e{~6`m_{F`HK)pwQ$%mhXlhwm%{d z6fc}jE;)SWfM)8h7HMHaM!lt%jwb2|r5>Mbuzm?w6=#0OM$;sr1l?+@qg^Wk9-oLi zUlbH-ocPM-E0;0%BlDk*KLYo;3f%MAI`@k7o|q>R%1exD7%uNvKhf@o)5`PWpH3uh p(iV%)tmEzZ*vtR*$C~|5c%S`c{~Y;xbt};E44$rjF6*2UngGdGb4LIG delta 347 zcmX@ew2XOzL^2CA0|SFlq{3++#a`m+>&pI^m5Gm?k;jx@2Ph<7;u=vBoS#-wo>-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+X|iPZ!6KiaE&%2lypeSy>b(70ZRRPUPZ&I1{an^LB{Ts5Z9;;T diff --git a/graphics/items/icons/fist_plate.png b/graphics/items/icons/fist_plate.png index 0142938d511cdc336851632b141a898d8c86f63a..7e6cb2b92d31e79e81e58c9989899f03676de6e2 100644 GIT binary patch delta 169 zcmaFN^o4PP1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1JxvZx;TbtOx!xjk?(*4 z2g_8^KmYr)`PVGkVq3b$P;s(^SLO1&0=*3Fg5ZTl^O)Dh%($$;zR delta 280 zcmeyu_?T&eL^2CA0|SFlq{3++#a`m+>&pI^NrqR^Waba9b3h^S64!{5;QX|b^2DN4 z26rEq06%wyveY64V?C3?)+G;tN;pai{M>;u#y~cMSA(WJkYY)9^mSxl*x1kgCy{lc zqJ2GMlDE6d|E27ojsj&FOM?7@862M7NCR@JJY5_^D(0kKILq6hz{8qw9!2~f1l)HLwkI&}^2fh^f~5f0{U0T-i>#55E~NZ2@N zIk8AMF)thTQgC<*clX84Z^4g_>N1JxvZx;TbtOx!xjk?(*4 z2g_8^KmYr)`PVGkVq3b$P;s(^SLO1&0=*3Fg5ZTl^O)Dh%($$;zR delta 280 zcmeyu_?T&eL^2CA0|SFlq{3++#a`m+>&pI^NrqQZUDnN804OA0;u=vBoS#-wo>-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+Tbur;B4q#hla&XL%bGcvur|9GEZ2!Kbi@ z`2~x>A-1Ati(Y4E9(B9F^8Ug-0g85+ng-rmr>@~WkR|&r!oj>P;9~TVn1sCC^uuI>? Y5M^cgtTQrE8R!fKPgg&ebxsLQ0PDA4>;M1& diff --git a/graphics/items/icons/float_stone.png b/graphics/items/icons/float_stone.png index 61f096fc368efcfd43f7c49a83cf057e7637fdc0..a421d553fbc9c2f5d7fc0b1e3de247d9ef9febe1 100644 GIT binary patch delta 176 zcmcb~^qX;l1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1Jz`Cx;TbtOguZmldr*m zhuM41)BpCz+Pq>P@U5$wc~WWV*8R^D;x;l?Xe2fFtbOM2eD=;$sdr>&2b?&poL$gv z)$`TJG=GO&<|qEZ9pbwy{A8c*sC0R&pI^Nk*KHDfE5g9H5YRiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyaevo-U3d6?2jk7T6_-h&XI$?crs8kdvC4 z?5g1&aq`5C8yreUSEMXi^X3uHV-3xjJ9aH=wp4O+^U~8(d?=uM>eQ)qdF$RK_!$Q5 z_V$u+S$5>cjU%QeYZ=aH`f?U>dN#jEPw+1;Rp8auZ-|QGW4ZECnc;t=2+NQ6Aq_yw O89ZJ6T-G@yGywptmt61w diff --git a/graphics/items/icons/flying_gem.png b/graphics/items/icons/flying_gem.png index 563e80f3bf057503429cc7386637f4e6b889de96..eb328c85ee90b3246583fbe29f5a0b31a080575f 100644 GIT binary patch delta 177 zcmaFJ^oMbR1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1Jz`Ex;TbtOguZmo9}=E zhfAu&i@*6XF3DGS8>DW8|U+qb9g#~J(6yt5uN V>DI^n$OhWW;OXk;vd$@?2>?cgRgC}u delta 278 zcmeyv_>gIWL^2CA0|SFlq{3++#a`m+>&pI^nN?g^sd3Jqw?HBB64!{5;QX|b^2DN4 z26rEq06%wyveY64V?C3?)+G;tN;pai{M>;u#y~cMSA(WJkYY)9^mSxl*x1kgCy{lc zqJ2GMlDE6d|E27ojsj&FOM?7@862M7NCR>zJY5_^D&{07EMQ6yVPRs_aQC=*Yd%Q*qf#AI=W05cYE329d5sg}~sOC;uoI`{TY4e>c3Gx@@W1Z7p#4z)thTQgC<*clX84Z^4g_>N1J!Kyba4#Pn7DM}L7~G6 z94^cm9Y<&U|9@LgC2ID!OPa^OyG@Ur_H_Qj8TvC+RZp6`ZqZuKJNZ*iM(k8P*C(iZN7;`PtyEXKh&-$uWaOVys4fl#JS;ZdtkiiNvDH` z?z<1IoU%x((`vii!c{u^ChNEKzw%zN)YrRnYE@JF&*~K` u&&e!{x^pOcS3GlS&7P^S=Jw5KOpgS?g60t89ZJ6T-G@yGywo7H+P!= delta 345 zcmV-f0jB=M0;B_w7-Iwj0000ISs=>*000McNliru;{^f^1~#pen_>U}02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L0004WQchCyTl-Ye3#witGe0vYf5e*GhWMI7e?*2xQ!D*R>YYeh?@BRZBAUU(#MDXt2 z`>#PpiMSC;Xy*~V_V%s00000NkvXXu0mjf@N$PW diff --git a/graphics/items/icons/focus_sash.png b/graphics/items/icons/focus_sash.png index e0df9798ef492f7d6b2e785b44f7aab2c8710365..a09d2d26bd5be2e67c45cebc6010d333fb81d775 100644 GIT binary patch delta 213 zcmeBRUcfX#f|G-pfq~)r%Cn~?R@>JLlmz(&GyF#d2LigCfol3aT^vI+CeEE0DAb_9 z;S$U9@Si%Lnu^Zy{vVUJFW!)yUC*_^_Py*)0Y+&?i#3~G%eeP6DhU_|e_-tJ2sEf% z%@i@UN#Ch?)vw>@+C3ugP2Y2^r~3RN+3((;o~5uId2aXPsfDA{>cg&lceVwz=6HM! z>q@xe^R&aTb?S0mrsAi@5r?Ne-(?W<>Ral2n}(U!%jYJnW#*OMxBn~9Z492SelF{r G5}E+~t7Po} delta 317 zcmZ3$)WJMKBAJDmfq_9NQsFd^VlVOZb!C6dB*Uwy_(k=dDo{wg#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8mDe0WR%Is++ZK}mHi*hE-U=g#4sQdZtKi7f(hYs`0Jiqhu4DW{Bx~x7~w>W*u zSiax(p`AaNaZMAA4=asvM7jtRG_BtrFsM`DM z1Z-OT^N{Mhr_R#piqp2vasRukd-k_g+n+t|y%qm_7W0ab+0lC$OHw6`nfCAS1G<&L M)78&qol`;+09UehPyhe` diff --git a/graphics/items/icons/full_incense.png b/graphics/items/icons/full_incense.png index 230927e085dcf775935ffc1a76478a1b5567d958..a44f6bffa8e9a17946003c42493ff1975492fe6c 100755 GIT binary patch delta 237 zcmbQqyn|_i1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1Jx||ba4#Pn7DPKx6ok) z9%t?A4o~j<-zVCpwq)|Tl3-n)#qIV79)A>P+`jGM%MH@I55zuH=H9w>SFUYbN9cm3 z4O3@mX}AZlADG<0y0zNYsKCr%nh}GibysAj;GC|ERKDCL%Q_=Dj9JevT@rY5X2uHf z&w5@1a|z$98FNoObBP}3 g>*uvUkI8>w($r^Tk(|@%26Qunr>mdKI;Vst0Q0SGK>z>% delta 334 zcmdnNG?RIPL^2CA0|SFlq{3++#a`m+>&pI^m5Engci#rr^FSf-64!{5;QX|b^2DN4 z26rEq06%wyveY64V?C3?)+G;tN;pai{M>;u#y~cMSA(WJkYY)9^mSxl*x1kgCy{lc zqJ2GMlDE6d|E27ojsj&FOM?7@862M7NCR>MHUV4D~uDxxjoFEWSYnFrf4POfF1dMwhjO-y|P42qXYdB_I; zST)mO!zz)KUC*|B3hmw!HZ|RksmLYGPn*3d;mpiFhrTZ&{u4H7&XabO5f@j;Ue?Xs zv3P5>`2^GA@9$g{7Kgu&+FJd6)z#ex`~)sBZ3@#3YN>Dw;N)OY%u5atVqsEUA)thTQgC<*clX84Z^4g_>N1Jz`Ex;TbtOguZmo9}=E zhfAu&i@*6XF3DGS8>DW8|U+qb9g#~J(6yt5uN V>DI^n$OhWW;OXk;vd$@?2>?cgRgC}u delta 278 zcmeyv_>gIWL^2CA0|SFlq{3++#a`m+>&pI^nN?g^Zr$gGETE8hiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyaegRB@%N(oqKzyhWH$inS9|wg0iY=hg#zG3jwOC zqV64;X_mdKI;Vst09$odo&W#< diff --git a/graphics/items/icons/ghost_memory.png b/graphics/items/icons/ghost_memory.png index 3041643aaae310df75027b50b583157979b80f50..2a9b4f65997b2cb8d01fc6e2ceca5070ad64b9ee 100755 GIT binary patch delta 247 zcmZ3=e28g+1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J!Kwba4#Pn7DM}UB1H# z9B$l7Qx|^wd%x^Ke9ZOPsrRQ^sxvh{{-J*1Q-h%Z>mJR96ODe{NAEgx-C*^+(eqKU zr+ov78=iC*z|a|LEieT5>AhK*94P!t`)r$xY)$h8@MddeM^6v=1AV(vHJMtf0N9gPvKy6*)l%|=z0cES3j3^P6*000McNliru;{^f^1}?t;12g~t02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L0004WQchC+>nTD7XJQD*mD7$-x3@$Ee@N1~&{kb&{;yZak~9MRCAY>5oAckliK86c#THbwC6 z-TSXWMvJ9cW=`9C@BSVTM>Kg#nbO|7U@Z(1nLxK#-~A1?lQE^d+;cWW6$9fopp4P! sgAhl{?DRC+eGujyncZ+Us;6-P015y_0FdujE&u=k07*qoM6N<$f{l!YKL7v# diff --git a/graphics/items/icons/gracidea.png b/graphics/items/icons/gracidea.png index 31bac3846cde562c1b5467f1b810c03f27d4dc78..fdbd8c8af00a677566419fd3ad0b182205879579 100755 GIT binary patch delta 273 zcmdnTe1~a*1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J#`Nba4#PnAjT>&39OV zXZB>X35EZEpKEiHzkS?@Gqfz}`Nr$7=QDh8VarLYNO@Ige0;6Isb$Tjh4c9ZoXWpH^C3}XU)t1FU z9YOt*000McNliru;{^f@9}$t?IYOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L0004WQchC8}|yK;;uq5y+M!Q?MzY?!CB4Bo4ij5`7cJ_ z4Y*#4&z1lxN`QGl5ROP8&fO^>9nTUH=WB;>rRSA^H1izMe@s+HusHPtFL$fMhJrFGI;c(V*>UE-hZ*JCzY~w7cMRT?N zrC`nuAf7tgR*H_iSr)k?i3x->yeu?R??iwFB|*jyG8qDgntVbB==&c(^#T$`E0+JV Ss=WXJ002ov22Mn-LSTYuo{kCt diff --git a/graphics/items/icons/grass_gem.png b/graphics/items/icons/grass_gem.png index df57119b27d3b6fe0d0d0049edfab9c492580b62..756a769cab2254c00ffe27353a6451c3ff4aaf4d 100644 GIT binary patch delta 177 zcmaFJ^oMbR1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1Jz`Ex;TbtOguZmo9}=E zhfAu&i@*6XF3DGS8>DW8|U+qb9g#~J(6yt5uN V>DI^n$OhWW;OXk;vd$@?2>?cgRgC}u delta 278 zcmeyv_>gIWL^2CA0|SFlq{3++#a`m+>&pI^nN?g^(qOviNuZE;iEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyaegRB@%N(oqKzyhWH$inS9|wg0iY=hg#zG3jwOC zqV64;X_mdKI;Vst0C>4ovj6}9 diff --git a/graphics/items/icons/grass_memory.png b/graphics/items/icons/grass_memory.png index 646568c412748023460c2d11430a035cb28fad9a..4ef16802d7f304a775ac8fd992021e4e96550863 100755 GIT binary patch delta 252 zcmZ3=e4J^51SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J!Kvba4#Pn7DM}MWGf2 z4p(L#mdpSC=Zoj)ZhxDaUYT{yP`@~KT0Pq@n}j7(IP$p?Tpvvl;y%ZAO|*T%Ne8(m z*Nz8|EPIT8R~l&_KCo?PprGjSt!5TGrOz^`e(<&UzW&)4k%<`-iv3yI*S=#*4vqI* zP&|L{-ouQ7p{JHujdV#^y)z4*}Q$iB}_Gfd) delta 346 zcmX@kw3K;*L^2CA0|SFlq{3++#a`m+>&pI^m5Gl{B~I&=7EnmM#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8m%t!rmY4ZKJ2@WzIvy>VQx>Zp5Dt)fl!{FZl9P--Q~G07Ex6j oJwL7LHF)o_zG-uyZ7(qB1P?mb7uY6T1A2tP)78&qol`;+0P+-tegFUf diff --git a/graphics/items/icons/green_apricorn.png b/graphics/items/icons/green_apricorn.png index dc821541bc81faf4287b45d7b1aa2307f0ad6ef0..da60f8544acb1172ca5f5a5fea44a82a524df734 100755 GIT binary patch delta 196 zcmeys)Xy|Qf|G-pfq~)r%Cn~?R@>JLlmz(&GyF#d2LigCfokeJT^vI+Ca#@$k?)8C z2g^~`jbH!&-!AlyYpY$EaD17O+lDFq&MC(?ec39Ml{)d8!{%_+Q02YqPG?pHgifoI z(JyKiV_|v!R!cC7wc~l1+Jh_YPBU08vS%>(-DEt?$HTnvNVP%i&xOWkAD*&T?w@xs p`S8P@($9UzekrH^54`_`>D&vJKOe0W}R;u=vBoS#-wo>-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+Tc9r;B4q#hl~>1u+9I11>Hu2TP|eH?4)8 z0&)thTQgC<*clX84Z^4g_>N1J%s;ba4#PnAkeeQRs*Q z2aBw-z>ojU;x3aVg16pzlg4s7=%0w&-a^|wQiAKbbPXqR*z+u!`@+V#BjIJa&C#hV z&EF@vU3ky`&ikculi-WrOCnulw8|Xo7>p0cC4F$+A`)7w6%-gF_-VGlq9qTklxmw+ zZJ%{?SMkGZ?j5rt`Cru7{Mt0(Nlo{p%M5aJw%2#A+VydY)_kUKvIYBU|IGQ+D*u)F YM;2?tg3{^Bfo^5+boFyt=akR{06fiW&;S4c delta 338 zcmdnMG?#gTL^2CA0|SFlq{3++#a`m+>&pI^NrqQZ+DOxUI#5Ww#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8mSZZ8U!18FP3k*TcKd_6cu%-}zydTGsI&3%ECZesWTU!ARgrD(}DNyJw%>k=I;v ir2fOh+x|D}FN?cx)3^Bjj%78_0}P(7elF{r5}E*P`GRTy diff --git a/graphics/items/icons/griseous_orb.png b/graphics/items/icons/griseous_orb.png index 5140ea3acde5081d0359d061c75956a6582af9da..e306e58661944a524c1f84d7ef2ce6bf26441690 100644 GIT binary patch delta 247 zcmZ3*e28g+1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J!Kwba4#PnAkfpn(wdz z4@>d~?%)5uzh&xW^3=LoKl5bL7MbJwon6*%x$;Y3!5O70@grxnvbMfyli8nbymlWa z*Y$JJSA7FqSj|{;#GMyTHWxg{!~(jD`!EA`1FYot8f%OkI~VRwv7x?%rgg)_A;SACyuo3e>*S;nb(JR41?K9HEP rX}VvqLP>qkn+Y#|KFEJ_yoTYdDm&-fn3O7@>lr*<{an^LB{Ts5R0?xn delta 351 zcmX@aw2FCxL^2CA0|SFlq{3++#a`m+>&pI^NrqQZ^y);Z2|yw764!{5;QX|b^2DN4 z26rEq06%wyveY64V?C3?)+G;tN;pai{M>;u#y~cMSA(WJkYY)9^mSxl*x1kgCy{lc zqJ2GMlDE6d|E27ojsj&FOM?7@862M7NCR>Xdb&7Ztbv^B9)j!%hb)CRKu2}h0Sub4C*#Mefms!gQ=mO@$5J|(6E4;tF9WK4sPCESf0;Pv}AYr`zTSVRaY1%C4RZJx4JxY zh8z10hUx3>?w&p?vq3lY&ZE0~t5;UCAIVkHvkuGWeI+nleM u-4xW9a=tP@maEy@)KuWF%*w{Zz@WOpdYke`n^{2LFnGH9xvX)thTQgC<*clX84Z^4g_>N1Jz`Ex;TbtOguZmo9}=E zhfAu&i@*6XF3DGS8>DW8|U+qb9g#~J(6yt5uN V>DI^n$OhWW;OXk;vd$@?2>?cgRgC}u delta 278 zcmeyv_>gIWL^2CA0|SFlq{3++#a`m+>&pI^nN?g^#7`}=1Slk4;u=vBoS#-wo>-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+Tber;B4q#hm1X1xyJdEKH0V?jAR9-0%?8 zN=)HlIVYf*m@KXkV8-GtA)l#~7iNxGc=ic6_AwCCWCSSOapscFep_X|4LV&8O zsC!3dTBhF9rFVdQ&MBb@03)4MS^xk5 diff --git a/graphics/items/icons/ground_memory.png b/graphics/items/icons/ground_memory.png index 0f9f31734df68fa62e50018d8e213aca67c17b7b..45ac4379ef3e5877d123d4b908b1336dc0029106 100755 GIT binary patch delta 246 zcmZ3&e2{5^1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J!Ksba4#Pn7DMJBi~^K z9+qStHgS)C|8KAJbu@Xq^p#xtlr>vrj@v7q7niX(HX)BI!s7UgtmleT6gRy})9__H zw}-`c((F0L1#5e!87Qw>bYSoNEfzfw=B52mJEHZHCAMkOQEASk4{ySkR%*?fI!F2X zPp#!aT^(t&_MGEN2-|&juY5=|-@)AH r2E1ODH@v=IKOix`V#WINzr5$|O=W-Xv`I1>=y(QCS3j3^P6*000McNliru;{^f^1{>&1#}@zq02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L0004WQchCVV2)I%Qd@bY@$Q3Q&eEXFX_I%~ zeF##uYE@XE%LsT&^Zkpm!Ir;QK rh@)jT%{1D55au13-EcOlr*QxPxl2Um+3b9*00000NkvXXu0mjf4LgXS diff --git a/graphics/items/icons/haban_berry.png b/graphics/items/icons/haban_berry.png index f413ea9e146a63b70d72f16e30dd4251358ed775..7171d2b07e04665177f7b9108da94f9d678f9b38 100755 GIT binary patch delta 223 zcmbQpyozap1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J%s*ba4#Pn7DT0X}-e> zJS>K56q(nozsa+Bd%#xjmmBrYoRe3yFXv75%up^>D^hUHy)0pi^lkhoSBfi=Nb{ S^Y4JJWbkzLb6Mw<&;$TX!D-I` delta 326 zcmZ3*G?96NL^2CA0|SFlq{3++#a`m+>&pI^m5Enfb@`Vyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyafAJY5_^D(19KaO7(;5OBRM9nrk$zsasJ zKL*JXU#Ctz(?|DOJF|s^cQWo>o4RaG=BzLK{g(gT@1@J1{Oqd6Tv?at8`LzzCSOaP zc35pqXp@coqJ*{5EnHfbuBr^)JhOupyhDmlN7UX@f3!^G#m4TbTmSanaQCpk_dPb) zFlYU}{`}{8HD6sF?!9EQ-?px|Y}Lc+vaL51tJ-#UCG29~t1{C}agN1oWBorT<@eht WPy2pn%^jel89ZJ6T-G@yGywp!<$Lo0 diff --git a/graphics/items/icons/heat_rock.png b/graphics/items/icons/heat_rock.png index 60eae816964f8b2eceee832da2ca518c10e11b5e..cbfa5985829daa9e757b23a6a5d2b277d2f9621c 100644 GIT binary patch delta 249 zcmdnQe1vI&1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J!Kyba4#Pn7DM}O|fPL z9v9x50-yfhzs)J5bL-p6&kaV`bDmlJ6LpOL8^o0x|JE*l``3AOg1$|j5CcwjggWzlh&(rV36it#h s8?-&oRsSg-Aj>Owv3U3XZGW$DKi&pI^NrqREU*q%RS3n{064!{5;QX|b^2DN4 z26rEq06%wyveY64V?C3?)+G;tN;pai{M>;u#y~cMSA(WJkYY)9^mSxl*x1kgCy{lc zqJ2GMlDE6d|E27ojsj&FOM?7@862M7NCR?Cdb&7 zY_@c2OW+h`oWbO#x>Ufx-NjQ-W5E-qXB}3WoLt%~t(wjX@_ObQ^9D5*X<036ZHuzx z;$pH)l9j#e>|8F(mX(??;l&FbKHj^VZ?IIRI6XTvbLqm1)zcb!lGiX4mdRT)88vRS zNltq;&p0#vz&b7c)i%X@be>O9oDn=PE^c0NRk(nMf7Q>8Tec|gE^lq>5z}TaD%vx> zt!ZgWQPHJy9c)thTQgC<*clX84Z^4g_>N1Jz`Ex;TbtOguZmo9}=E zhfAu&i@*6XF3DGS8>DW8|U+qb9g#~J(6yt5uN V>DI^n$OhWW;OXk;vd$@?2>?cgRgC}u delta 278 zcmeyv_>gIWL^2CA0|SFlq{3++#a`m+>&pI^nN?g^z|(teE>K9k#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8mLLPLYkF%s-<-E5{bE?&b_@;LwpX%Ould-L0MI`LoM<8g#cAm zQTL9_v`oFHPc;L&TY_Uwofb*d<0#VfZ`!HR;26TH$5_Pd#I)kH;LW=pLMluQ3ttIc UtkCMp2Reem)78&qol`;+0C?b4vj6}9 diff --git a/graphics/items/icons/ice_memory.png b/graphics/items/icons/ice_memory.png index c0f7cd76e8527420ce18cb2f1b452f3f3b174cca..5dad66f879b8442bd95a183292cec461cb7473b6 100755 GIT binary patch delta 241 zcmbQwyoYIm1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J$hdba4#Pn7DMJBi~^K z9+u77!oeJW{}*Rpb_ks1ebsiM9|O-$*Uny+EQ`ufz}D^8)QdoF!7 k|6{oCWAxp+*ZP%=XBV@5SpKe44(M(MPgg&ebxsLQ04L{h0RR91 delta 340 zcmdnPG@p5bL^2CA0|SFlq{3++#a`m+>&pI^m5Gl{q~i0fHlUDriEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyahGJY5_^D&{079N?E=Wo3PkqnIr0s?i^4 za`eWH7{Nn=-l2>|T?c}Cauxh`a?en{IZ-Sn=iR0(J=V(VcM7$?M%K z*X(oiqIsXK5Rq!xO9}r#i}XXt5o0b?Cdiu2;a_Tfe9)thTQgC<*clX84Z^4g_>N1J$haba4#Pn7DMJBU6h3 z2Xm{#!GHe`O0Nprz1!UKoJaEI+-g&!XZ&FfXZKA#AkC{(Y`Ey&tck%75>wRk*M&(} zad$o{ouuoeq$y$J;^XMI@L66!TY_NLTY=6A-NqLKxtGm5p_wparK;aOf5nAQ&czg| z{3>;f>%EhmyZ-!do6LfCzI(}LO6TMbi3ILBpRvu6v8+*HKD#W_*3fRj{&{6Qa-mm0 mNgVQfJ)g%uzvS$&pI^m5Eo!?7+U4!ayPM64!{5;QX|b^2DN4 z26rEq06%wyveY64V?C3?)+G;tN;pai{M>;u#y~cMSA(WJkYY)9^mSxl*x1kgCy{lc zqJ2GMlDE6d|E27ojsj&FOM?7@862M7NCR^Adb&7( pCz}H+l5*BCr8e)?;YfbW#PB&sr!SS?E(+)q22WQ%mvv4FO#ppjcqsq? diff --git a/graphics/items/icons/icicle_plate.png b/graphics/items/icons/icicle_plate.png index 2d3e27bbbac5016a69a9cd102859d359d225f5b6..7a74d45a55b764643a05ea7fa29567af6fb38c02 100644 GIT binary patch delta 169 zcmaFN^o4PP1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1JxvZx;TbtOx!xjk?(*4 z2g_8^KmYr)`PVGkVq3b$P;s(^SLO1&0=*3Fg5ZTl^O)Dh%($$;zR delta 280 zcmeyu_?T&eL^2CA0|SFlq{3++#a`m+>&pI^NrqRED`KX2Do{wg#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8mzopr0C>S+egFUf diff --git a/graphics/items/icons/icy_rock.png b/graphics/items/icons/icy_rock.png index 800b12ec87ab5935870339f21f7d634aa55bc100..56fe8cf4112941a8eb54204f209977f5a49a3f83 100644 GIT binary patch delta 240 zcmbQuyqjr)1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J$hZba4#PnAmzTTBzB8 zgEgR%MOfwc{k;67w@aq={i)>FXuka|!lk}wT1ZEvvE#WYA;r|IlQ>qcn&RTo%0A=5 z_cDfuN!#9UHQUAfh;tu@;XVER4(#qNXKWf3_pWzvmv4A?&o(BhvFgjrMfE;$4oVXy zCON1qy1>5d%DZ>F4Ng}w$i(b0ZRwl3LGlIDvE;+yH4P6qolhN2Q@8+Z! iYet>l55FH&pI^NrqRE@x1rBw?HBB64!{5;QX|b^2DN4 z26rEq06%wyveY64V?C3?)+G;tN;pai{M>;u#y~cMSA(WJkYY)9^mSxl*x1kgCy{lc zqJ2GMlDE6d|E27ojsj&FOM?7@862M7NCR>)thTQgC<*clX84Z^4g_>N1JxvZx;TbtOx!xjk?(*4 z2g_8^KmYr)`PVGkVq3b$P;s(^SLO1&0=*3Fg5ZTl^O)Dh%($$;zR delta 280 zcmeyu_?T&eL^2CA0|SFlq{3++#a`m+>&pI^NrqR!T=G?xDNsnf#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8mzopr0M_1N-v9sr diff --git a/graphics/items/icons/iron_ball.png b/graphics/items/icons/iron_ball.png index e1f82bde1d5f98b751a6fcea99e6425b145d3221..994641c8d320279f130a976edba412d07c964c3e 100644 GIT binary patch delta 177 zcmaFB^oMbR1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1Jz`Ex;TbtOx!!cQ|N#K z2TQ8p&;Q-c8A1zps1?5{6UlsgzG3+R53w_+49mkiyEz0?nN^&Rn+b5Q(t5pZG1C{5 zGcF(Z9d!KRF!jb7|2nQa8~pncb@sh?2KWb!3 Uc%oW2186UUr>mdKI;Vst0J9)cng9R* delta 277 zcmeyv_<(7GL^2CA0|SFlq{3++#a`m+>&pI^NrqR!@I&W$pa_F_iEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV~~2U22FV&#ggvm>&U>cv7h@-BI`s& z`+CMCZ+DmfOW8ji1`CTc_;1fE+pnj;Udq1wXUfKHd(+u3xbi7BUU@NHQesu=v0T=GgT2T3 zF791tp{TharK#!35#CA>mrKS>oG}M~)thTQgC<*clX84Z^4g_>N1JxvZx;TbtOx!xjk?(*4 z2g_8^KmYr)`PVGkVq3b$P;s(^SLO1&0=*3Fg5ZTl^O)Dh%($$;zR delta 280 zcmeyu_?T&eL^2CA0|SFlq{3++#a`m+>&pI^NrqQJ_esZOf1r?fiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyafqo-U3d6?0NAoaJp$;9*U;abUh62cNJLlmz(&GyF#d2LigCfof)Yx;TbtOk6tAo9~DM zk8|OPd?)WbkzLb6Mw<&;$T)m1(B{ delta 320 zcmZ3*)Xh9WBAJDmfq_9NQsFd^VlVOZb!C6d%EYUqV|zy+6DTBJ;u=vBoS#-wo>-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+X{*PZ!6KiaD+Q8@ZYtc-qcNS8NjtXSPlM zD7vIX>|M#)8CN1VoNJP^EBpFts@|pgQ`0}F*W0{bf8c+kf*r$&pm47LQ!M!t<~+4_ z=rB5d{N2rF}Z{2;T2CH4C)thTQgC<*clX84Z^4g_>N1J#`Oba4#Pn3y_=v9Be7 z!=IE)2R8lYo5W;ufop+IsT`zDX87KpYqA(T|;fCirmaP_x9>X z0=B2Nt!}^0@L|&~XgCan4_VtNHf0uHBlZn&b{oKiOmy@dc_xcNc=5+hd)b>Pk#`^%K2m_(~ z=V5#ao+s0NY<4XvwpR>fF0tklc-gn?mhR1YQ=8cJ_Fma+ulI`e&HZCn|Ns5{hjI00 Xwr2jhs}}(M#^CAd=d#X;DWM4f@Oyzb delta 370 zcmV-&0ge9P0=xr|7-Iwj0000ISs=>*000McNliru;{^f@EFnW}Y}5b%02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L0004WQchCb>! z3Kk-hw|g7BLtO=sa zI*-+@Fd&YMbmr<;=rJ$4cue99e2-o))|}>}Vo`9BGM@~5Ef>eNNOo^9UyIb67XyQ$ zO1b&iFtTKEZju#Xpe(xLd2Hx-y5FbgLsrwkTiQ5n?;qG5|L?Iws{5;6HsCh+{zjvW Q00000NkvXX1g=70g6O=Hm;e9( diff --git a/graphics/items/icons/kasib_berry.png b/graphics/items/icons/kasib_berry.png index c09fa20dec70f94d3dbbd8cb4645678a3c5539a0..a62c3e95cbc52b758b7b913a17307208e65cb6ca 100755 GIT binary patch delta 222 zcmbQtypm~x1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J%s%ba4#Pm^gKkqfn~> zhjTCMlYi>d8m?}O7oXpIdAfka?cCqX8~FFVpHb_feM^O5(JHa1?A#}djxW?o`*(=B z{TcW2xtU5cc6!|SS;;cxVwTsFQdXOLHcS_#Uwo2suH!s-cCnn-z1D`C6Yi}1sxkYg z?IBGOKRXizsgAR3=jNYcW%_+Y-|%zJQ_&yiij#lty?pDz(^bXI{puU8aIUpy&pI^m5EnJ?DvI}w}C?9C9V-A!TD(=<%vb9 z4DLQI0eH!I7)kK)`jfv`Wa4()<9M z#t*!<4s6$*WQrOe>=IBtzV70Z9WT~AJNw&s0>{VwU)E0d4{eL;bZ4}^wC4A9QHgM) zefwRESvTMC7d&XS$yxAPz<~nJLz{#w-g`97Y>H|9c6v{<1$MBcSpr% X&(h9(!LTj~=xhd0S3j3^P6JLlmz(&GyF#d2LigCfogg^T^vI+CT^YRD0D=D zgM~R+f{)(xcmV4f`J&vEST6p)O>*s6F@=p_FIk479YAVoW44$rjF6*2U FngFq^WI_M{ delta 318 zcmbQo)X6+SBAJDmfq_9NQsFd^VlVOZb!C6d%EYU~_ALG8exQ(eiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyae#JY5_^D&|b>-^hE&K*04eZ&EZ*!<`*R z(*<;Y9AR41aEOWH`$`|T4@@eNjZZh6?+XenxLW;d`Q`n~ekMyi@6p#;bK4^ZwCuLo_iW?# zr?aj&^KcbJr@mqIl3wY|bzlO=T*Z+f N;OXk;vd$@?2>@fQcH{s6 diff --git a/graphics/items/icons/kee_berry.png b/graphics/items/icons/kee_berry.png index 83749d1b834290f251a24847a7328cef4a855f3e..bbd6c53cf2eaf05e499b1ce50e9b8ad1ee93576f 100755 GIT binary patch delta 264 zcmdnbe3@y21SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1JxYzba4#Pm^gLfL%zcb z94+2UH6DEX*T0*2b?ju-+dmQy)y~n#xxIZshyN!z!waDki!@aQHrWLGTk@r;Evd1T z_+*70dk*h3t*SMA7w*=+@Vr*C*hyUYJEtFiWgN>a zmz6x+u6)jGn>9XeXgPRxQAJbYLcNPtM=iu|cd=BFEUfPxIXF1bT1;07-Iwj0000ISs=>*000McNliru;{^f^1`GB3*K+^>02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L0004WQchCmfS)rMgSEo!ZP-|lh{RGReE^*(Ya2F>;TF1kBob=%zPwcG zy<+Tl0K`{I83@K9*I``-%nOX>GK^%SExe|4T6KUvgyORwf6t)Tahm%$TPCI4@Nu!k z>DI0A17$H{(zTXP=M!15Ruva3(l{@eJDhM7r-buj&7{z&LbMPWxKT!!Y6q-*%}A#@ z0SgtC-3@G>7WnwG#>s8-bg3t#c8|R%1}@HEs1z_y)thTQgC<*clX84Z^4g_>N1Jz9Tba4#Pm^gQ$qu3Dz z4rgwsclA#cJ6`z2`iAYRQCwL&Z@adqm9>GhiLPw##AuKqRi>Iux571Mfw QPGn&4boFyt=akR{03af2IsgCw delta 325 zcmZ3%G=X`7L^2CA0|SFlq{3++#a`m+>&pI^NrqS6*e$X}04OA0;u=vBoS#-wo>-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+X|$PZ!6KiaE6te1)0}cv>e*2e93k{fbeg zieX{td7hVYKX?8Y^jXZzo&HAY?e*!EwVDU!KaJTqf8vWR&L{7rolHGwyxHqSRkLm3 z?-K?YoVKwg?WYu23}^5xVhm!mXxriYY?VT?Quunmr?K9;`se&Y&)i%2nQhYiJf~_o zhU*6p^*-DwnmUWeC2e2T>mU!=v)lO{<~Hekw?b diff --git a/graphics/items/icons/life_orb.png b/graphics/items/icons/life_orb.png index 9a9ed7c68272db9e6913f34583fa65b677706101..68aaa8e51adf602bcfdc39a1af3268fb49fbe7a6 100644 GIT binary patch delta 164 zcmX@b^qz5o1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J%TNx;TbtOx!!cP^iIx zgT%MX1XpAW~^ZVw2Hyg)z4*} HQ$iB}_|!{J delta 255 zcmaFQc#3I)L^2CA0|SFlq{3++#a`m+>&pI^NrqQmJJeLh4JagD;u=vBoS#-wo>-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+Tb*r;B4q#hl~>1z`g&F0KPNoxHrd4CYPP zv~lA^r4T38BRXeqa3~#JAvJ5-G`6Q4Gh1eeFPC(_!YQdfed%mfXUnvgnVG3KEHzGD y5@0jXTCUiW7Gmbz9NqOuCZv5)MPmp9L%p@Q;Da{vV|ReIF?hQAxvXJLlmz(&GyF#d2LigCfoiHfT^vI+ChiUJ6guL- z(Y52x|C5(9^p_c3Z<(#IDDHaugidx|)r4}@%yKRB%MbQ0$hziZbW2%@^+AttbYBnS z67@42FEpmPo(R!D$h&RvtEVc-oiQzhSPPd(GUJZZ0>%uRihGw~n0 m{^>1j+4Jk?{r&m%qW1P3Oh=V>6s-cfgTd3)&t;ucLK6TPo?d?d delta 287 zcmeBSdc`zBBAJDmfq_9NQsFd^VlVOZb!C6dB*QDOx~bRD5hx^H;u=vBoS#-wo>-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zCi68`?>!lvQAXA zuV+m1c6a%|l>O6Dpe$oakY6x^!?PP{Ku)8li(^Q|oVor71rHhUc$;N#aW5!gdOgYB z((FWKQ{1lq96R{fYaI1YPC8%2QLiL<&t~#%qslWOUbC`vSDiY3_vlg?XHNcOX@1KS zW@;}LK4dJeX~tGj%pU1?y|r+|3z4&7RkCu1+}dyZ%08~X9^-yDRjljmF2?n%Rx;jR f{_Q&V{zsh7_r*)zu8Ii*x`x5i)z4*}Q$iB}2yA6< diff --git a/graphics/items/icons/lucarionite.png b/graphics/items/icons/lucarionite.png index ea4955c8a0ce049d135b42f8f9e92691c877fc72..b429914872883fa1b29c5097578050b42cc242ff 100644 GIT binary patch delta 171 zcmX@h^o?)thTQgC<*clX84Z^4g_>N1J$H@x;TbtOgwwRo3BBE zhb7>b^U-_%_xO261Qe{@JZC!Rt)PE`PTNeoPkE($4X{0%@p65(I&pI^nTeT4H6$wJC{Ree#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8mLxJ3H(RYwcXU0e{lI;Lj9u}-F?J_*ZC zwy>==vg6qN#pi{R^o*rEP3co6%C;X_#=^iLa#>cA-DOVBbfAR{p00i_>zopr04oDk A!vFvP diff --git a/graphics/items/icons/luck_incense.png b/graphics/items/icons/luck_incense.png index 396ab2f613214054432e0b2c30cd9a8cc6643679..6a14050cf92518cd4b1c12a676a3e09ad87c2860 100755 GIT binary patch delta 232 zcmbQjyqRf&1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1Jx|@ba4#Pn7DP~ZN9?_ zJkGCs1Sb9a|Nq>S?B#y9PX7^T;Xf!Sb3C5K=2la9lg*8;DG_$NCY&wO+SVodwi}a?a@9I(zbq%nvzRMgvInSrmx&LD{rM5 z7c!_{@+n+7n{&~^wBrmx!gs^1*saq}FS~dlc-h{cDnhy~>?!rGOPbbA$~(V%-^0`9 b{}!05)Uz3=6&%?BbS{IZtDnm{r-UW|*C=ht delta 329 zcmdnYG=+JBL^2CA0|SFlq{3++#a`m+>&pI^m5Endr)X~5I-rnviEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyagrJzX3_D&{07C@>muDctZm)W=n@ZAC}2 zf{))Co5gEw1hpn=#KpyFuuTjS710*)7n#HH%!6$iC)YAhJr?QNCZ;|C2F1&yJY<7^ zteWYtVU9&j Wn9N{v6lwsvo59o7&t;ucLK6Tud2K2H diff --git a/graphics/items/icons/luminous_moss.png b/graphics/items/icons/luminous_moss.png index 6ee31c5e1b2e25f0bee21f6fcc51c3edf680537d..b15ba36d8e3cb40a002b264ba3823991aca7ed2b 100755 GIT binary patch delta 213 zcmZoJLlmz(&GyF#d2LigCfol3aT^vI+CeH1<$ah46 zgN2nvBw8z}x#uJZom0%=39!{h;@8H)EB^2cxUy^QK$1&fCp!LZ&>}p{M6W z<$q?DsR0)wcZi8O9y!xmq8Y-Y*kd|<=c15bULsn$qN=N8!X2&Vw^|0QY;L}-GRwMm z$9B&a%NUoKKM@s1wzp5L?EW!(?sr2|<6LY0-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+X{lPZ!6KiaE&%2e>6BS~@X#$Rw)tF-$UY zb4{^j;%RCsXk}_zx314XZt==hK^=-c!b_H|dd2ZHq(xP8rdnVBL@ybeLHFIZ+7-`+KvM7mnO$B})`DSKj_iDM44$QipdGltun1jXX`*SRd zpIJ^h99sVD%ucNtkFSNST@}gjxIi}{qSe+Rfq_9dLsi#9-#Q2ANCr<=KbLh*2~7YM CWoUu` diff --git a/graphics/items/icons/lustrous_orb.png b/graphics/items/icons/lustrous_orb.png index 08b452aba90db20f9785705e6bf8636b4bdec194..ab931ff4684920d676abcd03a3b0f9f6c6d098d7 100644 GIT binary patch delta 257 zcmX@be1>U)1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J&&Iba4#PnAke$qR?Rl z4wh~S!H)m`ciUbGnO(B%`;ONOFYbx^?=(eVk+t6(ewE^1L7n|E5)*3*ZdnwZ56CQh zdAdDuCy(K=l%Dk-GtO+`y0N2smzKtftOFfAT&(@AQ@t(1B&2dDSLo>N3^8tevDxX2 zV#bV>zhV{2gtzTjxud-C?A4r08V++z`d5GR{P4`gzF=mc$MvZ@R`Bf+U35uiX$On_ z_Sd<5s*UA*kJYD?zme`=&gwL4`SI2N|4GiPWcDcH{1CRPMhWN-22WQ%mvv4FO#n-= Bd!YaT delta 384 zcmV-`0e}9?0?GrB7-Iwj0000ISs=>*000McNliru;{qHF9~kQ8eNX@Z02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L0004WQchCOla0;NjEze{Qo?Q~Ar>9Y#wLa! zRb{5379AbN=0J6fCS@R*j^=V_0R~3*)V3nr2eD3IwL_zAXT>w0stjy>j~Q zLm=mPSI%0sa%T13jUb1{Zm*m%yZHHzN=0000)thTQgC<*clX84Z^4g_>N1J$&7x;TbtOk8@=o3Fuu zgC$^LK-ByC1lcIwACVF_XPk*Pn3np}&_&F@KK;vSv0 w+%oIQexpY}4*A`CRVMtYtUrB8J9pg-UP(5VLz|C$0y&$()78&qol`;+01v)kPyhe` delta 301 zcmbQv^n+=FL^2CA0|SFlq{3++#a`m+>&pI^m5EndQbo_H7bqlN;u=vBoS#-wo>-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+TcDr;B4q#hm1X1NVQX=A6`gsv6+;bInmTRe`=4t<_Ic6qa)&+0XLcx!KcG@CJihBKP#P$x0oW4)Zn| uUfAN)vAc1Ph=lYJ{uKbLh*2~7a@Txj3` diff --git a/graphics/items/icons/maranga_berry.png b/graphics/items/icons/maranga_berry.png index 2551c0167b24e40e13af93973161ad854d86142b..d56ce9643c4cf1fe3ac0032b969fc0f9f5b01649 100755 GIT binary patch delta 219 zcmbQpyo_mr1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1Jz9Rba4#PnAkfpn(wdz z56k8s8}Ix-vei*wLC7mB`!fk5hd=+3e{g7%*FkYnjWcD<35x>r(z+R3w;VTrH+l8F z@9)`^x&`;#5m#P*F)!)(>6=!YH0|fJom;8YXE^KlhGUKH&Ubv>`5*U$eOB0TZIQ7pJN`)vvr1W-`wMqR3H9x$rV3W9)0WGqn}65*D!QyGGAk9bXpE{ OA%mx@pUXO@geCySOKJ%K delta 326 zcmZ3+G?96NL^2CA0|SFlq{3++#a`m+>&pI^m5Gmy`L{y6BTz`Z#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eSz9H_H+M9WSyvJ zU(cB2?e6k_Df_3RKv~9;AirP+hi5m^fSeVcE{-7;b8;taog9&$h@s+OXVu@8p`YNpt*ug)!9`@|oki}C+*}qFF?7a6=qhO`c21dHu3_uRey=)rF5|njt=FVp zefsyIPG-5KPVKv|KW;hAUUd6)rt!k!Yw!ARvM`87^K?&V^xkxTqKJ)@MfC;o6e-20 UBF0NpfsSVIboFyt=akR{07#>E0RR91 diff --git a/graphics/items/icons/meadow_plate.png b/graphics/items/icons/meadow_plate.png index 5cec7fc16726e4e8acd23eda2d9134c1bd299d39..6571446bb5ff15f15491ff4a118dfc3a489e31f0 100644 GIT binary patch delta 169 zcmaFN^o4PP1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1JxvZx;TbtOx!xjk?(*4 z2g_8^KmYr)`PVGkVq3b$P;s(^SLO1&0=*3Fg5ZTl^O)Dh%($$;zR delta 280 zcmeyu_?T&eL^2CA0|SFlq{3++#a`m+>&pI^NrqQmh|6G#A5ciV#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8mzopr0567NGXMYp diff --git a/graphics/items/icons/metronome.png b/graphics/items/icons/metronome.png index 4aa57f95e0c3d5e8523f2bce2a25557b981cf0f8..4270fcaedaa7b76ef06feef2fa6647d1ea0a6979 100644 GIT binary patch delta 187 zcmaFD)W$SHf|G-pfq~)r%Cn~?R@>JLlmz(&GyF#d2LigCfoe)UT^vI+CN90;$#+13 zgEe43$BOUv1s87|X)L?=ua!GK#h^u=QQ&U%q9c6{A;OP2Wg1s)V*aMk{r$*-Jq+`Y zu5tZ%Yx_*LHM`F=$mXot+_`muPrB{~j-@I})&cuApJQF6T;iavZhdWi{)Nj72X#ZI f|5aMn(!Z0T)sdxXiG{u<&;<;hu6{1-oD!M2ZN`ppUXO@geCxr1zkn} diff --git a/graphics/items/icons/micle_berry.png b/graphics/items/icons/micle_berry.png index 74e011d0e84687d3fab85fb3ad8bf46b85a03dac..5e108e5a19bd028cbfda322e7d2bae73a8c3d4fb 100755 GIT binary patch delta 160 zcmcb@^qO&k1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1Jy)%x;TbtOx!xrk?(*4 z2MgoV|MBZCP0`^nw?2L|AwuOBrx}-SvSQ7P%q2&*ta{fnIo!7Sfnq~>kioL%?AqUZ z_Q`bEmg!$FWSFRS;MScAo=-Dlo*(vFx$^GbP0l+XkK DGeJtT delta 265 zcmaFOc!g<#L^2CA0|SFlq{3++#a`m+>&pI^m5EoI{hng|JD`wwiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyahEo-U3d6?3Nc-xX|7;Awuz)+Ai9qhSg! zhxCbmt2wq5{8(1`t7zw!<1_4)vbUe?`#FP0A>+ve?nx3>#WRmBoFcu)v*Fa?BT?>? z7;{5-*TvnmJ}viY)thTQgC<*clX84Z^4g_>N1JxvZx;TbtOx!xjk?(*4 z2g_8^KmYr)`PVGkVq3b$P;s(^SLO1&0=*3Fg5ZTl^O)Dh%($$;zR delta 280 zcmeyu_?T&eL^2CA0|SFlq{3++#a`m+>&pI^NrqRRNxZ#93n(OB;u=vBoS#-wo>-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+Tbur;B4q#hla&XL%bGcvur|9GEZ2!Kbi@ z`2~x>A-1Ati(Y4E9(B9F^8Ug-0g85+ng-rmr>@~WkR|&r!oj>P;9~TVn1sCC^uuI>? Y5M^cgtTQrE8R!fKPgg&ebxsLQ08YzcQvd(} diff --git a/graphics/items/icons/muscle_band.png b/graphics/items/icons/muscle_band.png index b374760a7121253f34a3ed229a554c914cabcdbb..1954f8a56bda97b2e9694d760c4ea2cedceaf765 100644 GIT binary patch delta 243 zcmZ3)ypL&u1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J$hcba4#PnAke$Hs4_d z9_QC8a%=wl|F6fHqsy9Ew?a#P4)@!_KjJab@iEd&riwd{E$}k+eT_oAyxnU3~e`MrmETiRi}^nj@C-kt@!)lXkeWsDb^`l{yX mffsSp*Pq*W;#+#f3+DQZELT45zd04?at2RVKbLh*2~7Yz_i%Lp delta 343 zcmdnTw1|0vL^2CA0|SFlq{3++#a`m+>&pI^NrqR>JVL+F11Kb3;u=vBoS#-wo>-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+X|SPZ!6KiaDtl9Qm3I1Xu%hz1SE0g7H8B zg99Ifrswpq+sqYgz7ac;L)RZ*HQC!Vy?BX;@0_c9Qa)MFRr#sikni8slSD6YQ95`za`**x`cM{S8qP zZU!q4MJA+ps!cy1XTrV1j3MEd=&Ff9zKn~D&Yfla(mLaBm-M&A^ABB`Ia^-3V^{V6 nIoJ3Z*mk_-kgDSsdd)thTQgC<*clX84Z^4g_>N1Jz`Ex;TbtOguZmo9}=E zhfAu&i@*6XF3DGS8>DW8|U+qb9g#~J(6yt5uN V>DI^n$OhWW;OXk;vd$@?2>?cgRgC}u delta 278 zcmeyv_>gIWL^2CA0|SFlq{3++#a`m+>&pI^nN?hv{nQMNRX`!}64!{5;QX|b^2DN4 z26rEq06%wyveY64V?C3?)+G;tN;pai{M>;u#y~cMSA(WJkYY)9^mSxl*x1kgCy{lc zqJ2GMlDE6d|E27ojsj&FOM?7@862M7NCR>zJY5_^D&{07EMQ6yVPRs_aQC=*Yd%Q*qf#AI=W05cYE329d5sg}~sOC;uoI`{TY4e>c3Gx@@W1Z7p#4zJLlmz(&GyF#d2LigCfoe)UT^vI+CLX^pTR`vLPW%VLF3ALY)7$9jMG`bRq@oL7BWb|JshqC!jEywKf0 fYCoORzsml-ih0h~tkuteE@1F<^>bP0l+XkK>x5SO delta 291 zcmZo;ddD$rc^V0u&N2ag8Vm&QB{TPb^Ah zaQATu@N-uvOD$3`)-x$=UGfm9grlUu&mAaZ3}iESHE7BMDVB6cUq=Rpjs4tz5?LoI z+SfBCdAqy(U&{XJC{UKMB*-tA!Qt7BG$5zd)5S5QV$RZjN3KH-Jg(~I1*aTro1*&z ze$3*YA^3gUqfHYMugM*9&0no5d6()thTQgC<*clX84Z^4g_>N1J%s;ba4#Pn7DP~LB7KZ zJkHs|v!48~ukdV`>Nj`G=^Bnn@@kBIkM)`4au=C?I5>^v(@dxQwe!=jNhi9$@n^JN zsMKSSY`;Lfk+Z5Q@@k>!f=-?VSvB%*neUdV7Uv(j>XeJ_KQ WIIDt{zEc6vtqh*7elF{r5}E*~(qzj3 delta 327 zcmdnMG>LhFL^2CA0|SFlq{3++#a`m+>&pI^m5Eo&kfY(Y8Bj>P#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8mt3!SSL0$PF^IXO8RToZ%DMNCEbM08k+Rb-r5S)GrnH}&#n6^e@RtPfyanOrpQ zW?WpH;boSTT~#YTp7ESz+%GT!kf;!W?RvPBzLbSXi0_wi{}3GBpZa;cqHnQfFXD?bR;g TxfJpQ=xPQ}S3j3^P6k$ diff --git a/graphics/items/icons/odd_keystone.png b/graphics/items/icons/odd_keystone.png index 8ef2d3cdb53688d349b5bfd6ec041ef49cac5b7b..8da9f26aa9f011bac82e6f0457a3b5ce8613049c 100755 GIT binary patch delta 214 zcmeBXUdS{-f|G-pfq~)r%Cn~?R@>JLlmz(&GyF#d2LigCfodjrx;TbtOk6whG~ZDL z4wt8fC;rzLvS+U?tt?ibc+^tKaLc#v9LBFsP8AHB+`QXbW!LZP9GpUHY|9ka-4(uA zy}hBPB`d9<#dXdhq3spXC%8YUXgm_=RQxurnx$Z$>CWm4Q!1Q%IE!SX$^%ut2)>VY zs`&g#B*Ixu?%uZj+=p^j?b`oWz>xXP9-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+X{*PZ!6KiaEU(y!j3(2(UdUV!pMYntgE& zuP6V7E61mWNo~({vTg9SIr!yHA5Tv2=11IrCQEibdM~t8B-M>|x7X>Cjrn&s+p6lM z$E;I!md!u>TlB|Vrp--rjZK7NdQ3PnepUJy1l{{m%G1gA;bJD+)A!<6N_jL7u=yNc zk-*Bd{q`Z3896_kE=ckv?7W@eY4yY6P};Ij_dZ@(@*p;D#ga+(_K%spC#a;doN}=T PI+wxI)z4*}Q$iB}Fza{O diff --git a/graphics/items/icons/old_gateau.png b/graphics/items/icons/old_gateau.png index 064c997a53bd06883611d753ec8e1dfa7e0e68a7..93edb8f97e3ee61b5275d0611c881dca609b9da0 100755 GIT binary patch delta 153 zcmX@b^n`JO1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1Jwk3x;TbtOguZmn(u%C z$5929mw)r`v>qy6(l_LIT{@gWb vt7W5On9~JmlLr}`e}dR6r2ppsZjv_gV3BV4w;>g1JcFmJAFIncr-UW|WhF*? delta 255 zcmaFDc#3I)L^2CA0|SFlq{3++#a`m+>&pI^m5EnN`m(jq1E7$2iEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyagJo-U3d6?2jk7H}nqurMiVxZjZA;8`fN zZsEd(2RjA&I3~zuP3usZ2*ivJ9aI%$RJLlmz(&GyF#d2LigCfoiHeT^vI+Chnc+DRw}C z!^ z$%ffyl|T1XYsKzeM{_Q9UE{c>@gs4HUz4S3T7$z1wh#U3r8=LUZ<-djRTpfeaeUHx3vIVCg!08%VgmH+?% delta 289 zcmeBXdc!n9BAJDmfq_9NQsFd^VlVOZb!C6d%EYTBwCedP7od=MiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyah2o-U3d6?2jk6vPdrLp>@aXP#RhXg7c)thTQgC<*clX84Z^4g_>N1Jz9Mba4#Pn7DPKr`TZw z4rg7q*}vyoH0|+Oa(8RgE9u13$$uO@YCpN2ebdS?Klq5x#lG`fJ=RS8blq!zqh00`)lQ zCI!6-Nda3+OFcJjR;aX@b9v^Zhx`Zfij@}|-rHLLb6I=_vk4FL3TxZNQ-F?R@O1Ta JS?83{1OR$QXhr}4 delta 308 zcmZ3;^q*;hL^2CA0|SFlq{3++#a`m+>&pI^m5Eo2Q=ut&1yD%5#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8mdsx+nE{@CR^i-kh@T(1m2@+W`{4x2xAimj$lrSNyfGB*G>4_*u2-eSwn8W2%m* z@4Jy1vVZ!@^r+Ca2K+M@+)`Z3BDL&Bf(`>SgOOD-?Nmo*)iT|sQo@hRArM%bP0l+XkK DhM95F diff --git a/graphics/items/icons/payapa_berry.png b/graphics/items/icons/payapa_berry.png index fe021c473ec4a2cd04b29db04798f2ec2b5038a5..fd9ac891aa3e000e1028076ada347ca9840cd91c 100755 GIT binary patch delta 218 zcmZo;Udl8JLlmz(&GyF#d2LigCfoi6Bx;TbtOzfQ$$ah46 z!^Jv__3hvHyBA$pwDshqFYVK3GQKJN6Mn$mzQxwDgELw*$t(XV=aV^)xEnfV78^(Z zj`0!{iuLkt`7(8eq=MQRu7rdc9{zT1Yj6JET6U@H9fRTe>#1%ne)eaX_c#dc3T3Xl zWY~Lb_tOLB4<#o|)O1u0yF9ZbH;%RM!Y_fxVOy%LcD_4azu_AHnQFG4vjNqYfDUBv MboFyt=akR{05JDwxBvhE delta 315 zcmZ3=)W$qPBAJDmfq_9NQsFd^VlVOZb!C6d%EYT_wWU6=7APcM;u=vBoS#-wo>-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+X|gPZ!6KiaEIx_VO|r^0f9h*@?NXNMxSz zfQ5MjlU1i(?5*q*r`gP;70hz`C#FjtlinGb6*x_ zCfF`3eEZ?h`Ql8aE~OcMC*9=&cBlvR7o^Nc@!kCKtC+%*4SQ?E5?i7@PdzBoamlrr z&80Q(w8IMlN7nUAZ!OC7SQUNi3t!sZpo3dK+unJfvFIK1tbMVb7Soo^Id>80QU*^~ KKbLh*2~7Z75P4_- diff --git a/graphics/items/icons/pink_apricorn.png b/graphics/items/icons/pink_apricorn.png index abcedcba49d70b5045f309260ee632dbd94e059a..817e0140c395634872a1188fd559564bb226a159 100755 GIT binary patch delta 196 zcmeys)Xy|Qf|G-pfq~)r%Cn~?R@>JLlmz(&GyF#d2LigCfokeJT^vI+Ca#@$k?)8C z2g^~`jbH!&-!AlyYpY$EaD17O+lDFq&MC(?ec39Ml{)d8!{%_+Q02YqPG?pHgifoI z(JyKiV_|v!R!cC7wc~l1+Jh_YPBU08vS%>(-DEt?$HTnvNVP%i&xOWkAD*&T?w@xs p`S8P@($9UzekrH^54`_`>D&vJKOe0WNo1X< zXkX8m_b7?W~xX?V{ZBI4Cdf-7QOICDli9e2-L`EZd$vRb42!wlN^}>CuG?7bY?#^i}WF zoFL5gY{m|W_CuB@k9iBu*|H^sB|SPSOydlLIon1P0e!Bd{t_vPoR%HzhZ=W9ODQr= kVftit$mU4H6U!u^V~e!n7N5!A19TIEr>mdKI;Vst0Caw0pa1{> diff --git a/graphics/items/icons/pink_nectar.png b/graphics/items/icons/pink_nectar.png index 21e88d3023f524f4db91aad886bfa76e86f7bb81..9fbe0f76b34f750ed9aa14d5de1f8ce4e5b7d6cf 100755 GIT binary patch delta 211 zcmey(G>>V51SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J(3;x;TbtOx!#1B;R2L z9@c}>0@MEgzhk#pCZcMMRgj*sg0gyxy->WKzsgTe~DWM4f DGZkAN delta 304 zcmbQo^qXmdL^2CA0|SFlq{3++#a`m+>&pI^m5EnV{d%SC5}=THiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyagTJY5_^D&{07CfG4`BYk&~07!tj(s zT3b_7`;bacOw5#pK|QP7yu6M%2J{tg*jTuNbIRltDXA=$=Mt7PSIuy=Nb*#Bx-KiL zQ^0SRoBQS{sTSqPdlxUhnQA6@W}@BYix)4MIu$D)Y1pk^4nNx@mRa^OVnA<>_f^DlijdV9@!gdQ32@aShOU44$rjF6*2UngB67Z2JLlmz(&GyF#d2LigCfokS>x;TbtOx!v#n(wdz z56k1D{ZIdizmwAB_5FM^ilbBVwnDMYf6mtxha?*A&o#KCyy=Icj-|_9wd9;*b7q!= zCB8Xy=dx$vDuzlaZBdi-;(qT9l`BKd52<-2OFVdQ&MBb@0MdhLtpET3 delta 318 zcmZ3>)X6+SBAJDmfq_9NQsFd^VlVOZb!C6d%EYTFlU8)40VpJ1;u=vBoS#-wo>-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+X{bPZ!6KiaE&%3alJlTnaZ%dG$3JY@6hr zQKj5+c1EJqGdpF8MFC564=;|9Jd{}C`7&dDhN%}z;SpOSD=n+0*n={i+xocppC*KM z_(Z3>yRQzE=s0|1is9ZxN;hnHQWzEoFWD6ouzF&Y)Qrn9Qc_Y^bP0l+XkKif?P{ diff --git a/graphics/items/icons/poison_gem.png b/graphics/items/icons/poison_gem.png index ab339eb718deafb709cadd530e61f3cad86dc403..8e78855276e955c7c10d03a7ab250c36c3c43e03 100644 GIT binary patch delta 177 zcmaFJ^oMbR1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1Jz`Ex;TbtOguZmo9}=E zhfAu&i@*6XF3DGS8>DW8|U+qb9g#~J(6yt5uN V>DI^n$OhWW;OXk;vd$@?2>?cgRgC}u delta 278 zcmeyv_>gIWL^2CA0|SFlq{3++#a`m+>&pI^nN?hvQTcc8e4vnciEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyaegRB@%N(oqKzyhWH$inS9|wg0iY=hg#zG3jwOC zqV64;X_mdKI;Vst0RPrjKmY&$ diff --git a/graphics/items/icons/poison_memory.png b/graphics/items/icons/poison_memory.png index e665d8176263237afa0dccbb8159920f8257edf4..270c8697dd9121f17659d8feadffd59aeed54fb3 100755 GIT binary patch delta 247 zcmZ3?e28g+1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J!Kwba4#Pn7DM}L7`>^ z9+%i89+4ye|KH9F(Ac`SWS9E$y$5*{BmZ$m?R%i`TB|DfK$_l)M>!jEKZ-1}l3b#9 z!dZf;|4L7X!1EY`7U^J9)qCH&4rb~w9{uP$;q&TAe2q^sdliz`{GNExJ$3VPfAY!{X=PLOx5!PgpN3b?Qte rm+1E=(YyAuP5;>G|MhER{Yl{+0qlp>MP&~IUC-d@>gTe~DWM4fH6?hW delta 344 zcmV-e0jK`L0;2*000McNliru;{^f^1vMYHnHvBA02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L0004WQchC+>nTD5BWM48=pVVp_<#<%yt9Lbq86&V=szPrB>WN=zWY9NE`-Mjxl21s<22MgZ4 zd;c}aXz_B@((t|a?(YF}ih|uc_TB|+VGvgZx<&i$Z?K(=!7eVQ(GXP(j9Y;+L8lKw q94)ie*mUJLlmz(&|3?F76*o-*s+r~K;uxYavGr15+a(#IF9h4)H&x2u_^;nEy-w!CiUtqZHzv%ArsO5)t zk@jS#o~+H`y>!e!p#GC6CeVF&e`mdKI;Vst0Oc%Yi~s-t delta 320 zcmZ3@)Xh9WBAJDmfq_9NQsFd^VlVOZb!C6bBQMOxSn-M>0VpJ1;u=vBoS#-wo>-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQK0O4PZ!6KiaE&%2N;?>a@2I$WL$T`ubA$yj;(%-pjN6NDXv zHv6A9(A6(xDYQv@XURQw6$&L-Ct4IRF!1D>?p708p8@ir Mr>mdKI;Vst00KU4f&c&j diff --git a/graphics/items/icons/power_anklet.png b/graphics/items/icons/power_anklet.png index 3a2091c8ee862346c780002b5a414f3a992016a7..be1982645b982242180700d53c7d6862a13cbe13 100755 GIT binary patch delta 236 zcmbQwyq#%+1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1Jx|^ba4#Pn7DM}L7^iG z9L`e%4*dWBP&G^TZrQg@KCcz^9ghb6Td5WKRk7P)z4ymfjoCLHs)ct2`z(aDefhZ$n$%omUx?RXjx3p4{`J=SkzmgEA+(0@CN3RxI3je{SB*WqwAlCj74c gG5gQsz45P@_l2_Q)&|^f0Xmt%)78&qol`;+02-=vjsO4v delta 340 zcmV-a0jvJE0-pnr7-Iwj0000ISs=>*000McNliru;{^f@DF^Hq9c%yq02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L0004WQchC(y~=nURc$#k6?5HR)j$m%(|@)1XvX2_tyGY?5~iIF(!QHe~) zIPUH+zzQNbvjL$2Sm2SM*9$~NsBN7K8D88YnC+7Jf=5f!A_*@ m_*q(1n)UTUR-6C*flY7sh&4&xqKgLr0000)thTQgC<*clX84Z^4g_>N1Jx|?ba4#Pn7DMJx6ok& z4(D8#o}K?&wV6HVF1zfz_0tQ*pVx2MzjFH8uFGW0ca(im?Gm;W{euxvf_FP+tc#Ro zcJ^FzYmrTd+Dec1eN$DG4^6aOzVL)(BE#hsnT|?I8=0r&UYZo<@`NvH+rm|569mKV zAFyeB%y-V$LE!jXHhrf9neE=Odz5TGe7gJEbDhVJn0S7D6PtH_GjrDKCEC9E(f|C* d`~UwIiJyPKX4+Jj{}t$922WQ%mvv4FO#peyZ(0BV delta 342 zcmdnWw2*m%L^2CA0|SFlq{3++#a`m+>&pI^m5Eow!a0jk04OA0;u=vBoS#-wo>-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+X{nPZ!6KiaE6tHu4=(5OI~CD>K_-$E0gZ zcK2^F`W#ii;0JT=u4tbR{4a9YAK&K+%Zb@@+4dm=Kf}NF)JUo7N!Q;h_Qqz{+UfY& z@$6mJ$F7lemrvDnx&o(u;Pv1S+e9u+Df#67CgbW8mO%F|W?}bi*@>?@otv)p&DJ(m zVvxtNzOlc9=};~KP8~=A#dlz$<8wO mot+zhygksh_5Z&Ev&6IcO;2XU1k3|^g2B_(&t;ucLK6UBnSi$d diff --git a/graphics/items/icons/power_belt.png b/graphics/items/icons/power_belt.png index e4273f85c649f5718c320ca4e86ef05514036ee4..456793fb99032e3298b6c562641cc25fea7c419f 100755 GIT binary patch delta 233 zcmbQkyoG6k1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1Jx|{ba4#Pn7DMJqu3Dz z4rkF7C;sZ&G%mW@mv1)NH~zD4h|W{_(56?@eUB8y9@1yo?O4QlAxg;X$R?qnDGQbv zvMjnO_Vh#Qgr1Oi6P62ZEgx=IUw`nnQ{h1D!gc;FN$h3OD_KH!DqCyZD`OEXJfQtT zSRy|mCn-(l_}Wv`SQuV2YUs}sl(DEeJ@HJ(Zw4!N|9uAU`qp1EDplWZW_{1u|6Bie byBExRD%orm9t9f!-OJ$V>gTe~DWM4f4gP5N delta 337 zcmV-X0j~bE0-OVo7-Iwj0000ISs=>*000McNliru;{^f@C@aU*K+XUF02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L0004WQchCa- zNEhGtH6G>+`@Tb$36yo)bYSoa2AFbN6gjwEc*Nd~V`R8wxJjE+2!sen%v1s) z44Vgbuz>R4Ks>?C@D#8xL&ylPu}YQpFV2y(QI-}Jmk45%b9R=SJj6lXka#;1*kL+a jmB9LVrOVa-{=lj?$RRa5U6?NE00000NkvXXu0mjf1Av0! diff --git a/graphics/items/icons/power_bracer.png b/graphics/items/icons/power_bracer.png index 54aa34844bd5283d773bcac0014076c6814cfe82..9d3d37781bfde21a49b2dffaf6445bd8007ed78a 100755 GIT binary patch delta 226 zcmbQpyq0N#1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J%s&ba4#Pn7DM}K|U5m z4rfu3XaDzCL@OM-cs6d^bkDfut{b=3UtxVEE_RXeWul7UCLgA5bBP4Dt{P4#5E!dv9WHRrMG)Ei4Kde%vt{nX{R>al@@qMZKW%!GTU z%55RjKkm5uMN^%pm73;VSRPrbsH>{xr0`+#sc|DN2~RgVsQl>2^v|NYG?96NL^2CA0|SFlq{3++#a`m+>&pI^m5EnF{#nA7YM_vKiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyafAJY5_^D(2KqFyw1C;Bl3mw$5X!m3zQO z@#rbG&zMAI7A*0~7sxxX^EY#E!1SuB__}R#1pev=ho(MT6qbAXO!KQ7@BD0gtbETc zyO5D|HF}auDT64zkR_K_P`hV V>*cf3J%Ns9@O1TaS?83{1ONkFdR+hj diff --git a/graphics/items/icons/power_herb.png b/graphics/items/icons/power_herb.png index 947996c4cdd69bff960934aced314188fc0dd52a..68225447fbc626274f583a5cecc3506828f9ce78 100644 GIT binary patch delta 181 zcmaFJ)W9@Bf|G-pfq~)r%Cn~?R@>JLlmz(&GyF#d2LigCfok$ST^vI+Chnc!&DUVS z!TR+2wBPX&3od%Bv{pX-aIfM+i#mCRFPajaGnYPO>n=Ri?XlV8{Z7NjHnXy_e0Eoc zh|a6~w4=Jpu5tTv5xxF(te>|ib#X6#_PFUO_jlJPoYT@5%r{lsReA5-(sSCgmx=$o aI%i1>vtYmF)&D@d89ZJ6T-G@yGywpy?^ryn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyaec``X~mu(c)hT#J{%3I3YJU~y7RH8AaKITBh^w|3_m0# V_uZ=2l><70!PC{xWt~$(69Bj_UO@l= diff --git a/graphics/items/icons/power_lens.png b/graphics/items/icons/power_lens.png index b18d9118603721027c2f2de4dec3010d3d6f5e47..742db4b4dfaa30c8830d59f29c94d7d49609f760 100755 GIT binary patch delta 244 zcmZ3(yq{@;1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J$haba4#PnAkcgQs}S( zk8`rj%?bDZ@7sF7;d0utU#DKUK4^XXL;qz}L3i6J+16^mTBTcD2k!WEZj&!t>nG@| z^zixz_Kyli%wd}Tk!~*jY_BxFv!982!X~oY<@lc1M`rAo+&pI^m5J9#;u#y~cMSA(WJkYY)9^mSxl*x1kgCy{lc zqJ2GMlDE6d|E27ojsj&FOM?7@862M7NCR>Xd%8G=RLn`eu$SwQfdIpUk|JNNEf3VV z-uY&w-+r~m!{>TXM!KNw{R4ZPcE5fg-J$<{?qA0b%YN^8TqJ(%pA*N$<$W_wE|~my znM9$sId5s`su{tFa%tubLB5=xY3msR)~v`*)-4Wu;8go~>sE^@2HsE6D%P_sZwcF! z-c#DrWl=m!sdvjYtw@D9eotwYM#Vd-t_&@+0ZuX-ydT~d?wbG^XJB!CAk?K1qBC#r>mdKI;Vst0P`k=U;qFB diff --git a/graphics/items/icons/power_weight.png b/graphics/items/icons/power_weight.png index 149679c387039ebf447780311c16a6602f172bca..221416007cf7e3238113e7ff7591677c9dd820a9 100755 GIT binary patch delta 228 zcmbQjyq;--1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J%s)ba4#Pn7DMJw^*wJ zkMly!rN84hE)3y&Rqc1CXZAnMr`@XpzBalp5XrlCfFUZPdSWO0eObd??(gfSU6r_Z z>yX3snL&$R9tv5;v3l3;i~e@I4H)yL%+5;iTExs|rg_*iwl^u@NAeua19?9(KU5lS z;*^)E>WSvHm6hsInjT{lY+-Qxsb1xzsX}uqWaBuh-pEz#-gV}Jb>IIAxBdUW^UFHv Wv2JWr+av&VDubu1pUXO@geCwgrD)** delta 329 zcmV-P0k;0H0+a)g7-Iwj0000ISs=>*000McNliru;{^f@G73A8s!IR>02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L0004WQchCs}}VDb(Am@LoYxN06~Gh2yS5Y*w~a(Sn%|o@*VvI;QyGi%qPw&q9&g> z;DMSkBis>%LZ#j*x3{B)Y^U7&t;mu{8F4RHti!;zMYOVHTkIw!CbUEaWSG)van|fx zAbtxA<0w}Z7e`42le_den0S{Q2lvo&m6Ibzk6LHtWho+_^bJ|`0}H=OLyh=hF!jv8 bKQPY|tidqR*N%Cq00000NkvXXu0mjf=plVv diff --git a/graphics/items/icons/prism_scale.png b/graphics/items/icons/prism_scale.png index 335816ddbcc430a99e947268e3d57f34c46ed87c..f992c3bd84fda8d5d85b254968ee2d816768dc10 100755 GIT binary patch delta 153 zcmX@g^n`JO1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1Jwk3x;TbtOgwwmT#P}H z!!=Np^LPA50WGKZe?Hx9UibBL?%f;xc?xeC+}1X)KiRh0_+-O9-*X3WRvrWDYG@ilJ)sNL>ol`;+0Md*}cK`qY delta 250 zcmaFDc$8^^L^2CA0|SFlq{3++#a`m+>&pI^m5JAg$<$k^5-22I;u=vBoS#-wo>-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+Tblr;B4q#hm1X1$F`=E*m7LP7$zCOjTB8 zoYAsr#WnQM+?9`OW=U1OXQnA%Wy sDkfo-M8xHo9_NR89K5a@G?^G;7YH$(YI)thTQgC<*clX84Z^4g_>N1J$&6x;TbtOq_c$l8;4^ zgXMyr=!D<#6&j{`opXI=*}vAzJO6oa!*rXc+KR5RE1rrwNltJncRaUr@=OlC7b$61 zbGRPd(~1ZD?+GTVWXKdd$hwW1@;ds<{#j1 v@LObP0l+XkKb^ct4 delta 306 zcmbQr^p|OZL^2CA0|SFlq{3++#a`m+>&pI^m5JBT%>GgNo1X< zXkX8m%mdOq> yo*e8ag7sN;F&|14&|$yS(-h#(p;Rrc&A^bZrndN%cUK?KfefCmelF{r5}E*Nmt&j& diff --git a/graphics/items/icons/psychic_gem.png b/graphics/items/icons/psychic_gem.png index 6b84f38daba8f5abc1199bdb7610e6a1b0287906..b73184955efb97dc67bdd20bfcd587f2028d2f3d 100644 GIT binary patch delta 177 zcmaFJ^oMbR1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1Jz`Ex;TbtOguZmo9}=E zhfAu&i@*6XF3DGS8>DW8|U+qb9g#~J(6yt5uN V>DI^n$OhWW;OXk;vd$@?2>?cgRgC}u delta 278 zcmeyv_>gIWL^2CA0|SFlq{3++#a`m+>&pI^nN?iKBK4`sHK34qiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyaegRB@%N(oqKzyhWH$inS9|wg0iY=hg#zG3jwOC zqV64;X_mdKI;Vst06qOyfB*mh diff --git a/graphics/items/icons/psychic_memory.png b/graphics/items/icons/psychic_memory.png index beda2c22df19697b1682d33e6ebb667f3f0edfc6..6a5aea79a7621d897c757a9d670fb72b0ac0efa1 100755 GIT binary patch delta 250 zcmZ3&e3WT|1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J!Ktba4#Pn7DM}MWMqA z94y6-${n-*|G(YTdu>_m%PH#V*000McNliru;{^f^2oG!(KI8xZ02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L0004WQchCg^jzPrB>WN=z)Ya@f~-Mjxl28f2vY!|$H z_x@{;(ULPQW_0eocYhC$O!Mi3 r5J$^wacSLs5au13-EcOlr*QxP@L5LIy-&$}00000NkvXXu0mjfRt|)? diff --git a/graphics/items/icons/pure_incense.png b/graphics/items/icons/pure_incense.png index 8657683b188233d2e360da0208f3e390d350ecf4..eb5345f014c98b99453ae88088bc33b9ede836f4 100755 GIT binary patch delta 233 zcmbQpyoG6k1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1Jx|{ba4#Pn7DPKw@`}$ z4{PngBTowd|MqhT*)nI63hsla2Tf=re~$oZkAPkSidjRQ#RZk(-@@b{z})mVVx07#iA(!X=+!MFGxKs4Z{O?bt b>mM+`mt=k8ZqMKbbT5OatDnm{r-UW|Vk2qJ delta 326 zcmdnOG?96NL^2CA0|SFlq{3++#a`m+>&pI^m5J9-aStQI380X8iEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyafAJY5_^D&{07C@>muDctZm)W=n@ZAC}2 zf{))Bi@j$o1hpn=#9FWJTO3b3%5-^In^uS_2&FI>#+0`d?e|psvyv^qc_k~fMd#nI)N5p3q}U51f#H; TIqvI#j%M(5^>bP0l+XkKdo5|J diff --git a/graphics/items/icons/purple_nectar.png b/graphics/items/icons/purple_nectar.png index 59111f1e4e40ea28ac8eee58cd0820e915a972e2..f792b5ff558e38a3f5f4b1438b5794f470508b5f 100755 GIT binary patch delta 211 zcmey(G>>V51SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J(3;x;TbtOx!#1B;R2L z9@c}>0@MEgzhk#pCZcMMRgj*sg0gyxy->WKzsgTe~DWM4f DGZkAN delta 304 zcmbQo^qXmdL^2CA0|SFlq{3++#a`m+>&pI^m5JBf@cWzXT0kN364!{5;QX|b^2DN4 z26rEq06%wyveY64V?C3?)+G;tN;pai{M>;u#y~cMSA(WJkYY)9^mSxl*x1kgCy{lc zqJ2GMlDE6d|E27ojsj&FOM?7@862M7NCR>vdAc};RLn_EP!Q%|V(dA)A}1$Dh2bfO zw6>siNbX`_f zr-0usH}}m^QZ34n_by(1Gu2G+%tX7(7cX8ibt+aq(y&{-%CBT!^Q>*(&)u~C9Oo>n yUiep diff --git a/graphics/items/icons/quick_powder.png b/graphics/items/icons/quick_powder.png index d83b0b506257bad81e85f36d7743592b50f943c2..fa56dcca7c26cfa6e86c5edabd62cdf9b04a0912 100644 GIT binary patch delta 221 zcmeBRUcod$f|G-pfq~)r%Cn~?R@>JLlmz(&GyF#d2LigCfoi6Ex;TbtOx!y0w2-qR zhjVL!!@vK{+~roX?-%bj%bO$9(Utti^HSBOt)hJx%YGu^W^4fTj+falbv|_ruqE?8;xFnoSx~v@=xL9nx6~gU$Tanu}CgAQ@jUs OBZH@_pUXO@geCy0uw(uJ delta 317 zcmZ3%)WJMKBAJDmfq_9NQsFd^VlVOZb!C6dB*QDGWvwYY5hx^H;u=vBoS#-wo>-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+X|=PZ!6KiaE&%3akcPTuL{byu1qLZRpxO zaS}twp%X`sMtBMy5;Q8}Euchxv0hPdumcFVQo+l;NtV+7J%H(N^e{#ptNwKTLRMnks^t^oRt8U3 KKbLh*2~7aG1Z-pg diff --git a/graphics/items/icons/rare_bone.png b/graphics/items/icons/rare_bone.png index 80b4af9d58c1da065daf944ab4f7c186a4593288..eb5665a351afee7a1cb598eb646d5231a107a867 100755 GIT binary patch delta 167 zcmX@j^oenT1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1JxvYx;TbtOk6wBQRsjH z2a~eLzyD7rZT@m0(?U;j(T;2Rp`p(hCMWZi736fJusdJl(M~j$c*bICXLx+!LtCdm zs_*KIzHdrDb?|O~S(LcC`$GA^!Udscb1Zu9d@T4{c0s?2;i9lL&pI^m5J9}sW|A{7od=MiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyafeo-U3d6?2jk6gXH|1#;X}omt#HPO>Pf zF3HMideG8#=&B)`sPC06>x?MJML%++Q8t{u60N(MySa{sOO;DvI0)Ur3Nj0 y3l**kv;;2mcxGg^TB-V|h2Y7_C+vJLlmz(&GyF#d2LigCfojSv9pqKY(9=%) hFeSb^e*YtF*#maW)>BIM76RSC;OXk;vd$@?2>?`_RM!9i delta 285 zcmeBRdcib7BAJDmfq_9NQsFd^VlVOZb!C6d%EW6f6&>K01r!o5ag8Vm&QB{TPb^Ah zaQATu@N-uvOD$3`)-x$=UGfm9grlUu&mAaZ3}iESHE7BMDVB6cUq=Rpjs4tz5?LoI z+SfBCdAqy(U&{XJC{UKMB*-tA!Qt7BG$5zm)5S5QVoq{`f-nac7uSIsJzieN+6?AR z=q}1wp%~(HRMXVNB!WR}p_mlcRHj!Rtc6U9GN}U6i~24e)thTQgC<*clX84Z^4g_>N1JxvZx;TbtOk8`>Td2W+ zgZYA!;D>+W+vH4f z;f^^1C%YIbTtCE$9$a^wW8G4gUGL1&XUDjlGTWFfcJgq4t%ay~Iwv!iM8?%tpnVLU Lu6{1-oD!M&pI^m5J9}D75=n1W-u4#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8mLC{cV?z7EQ_1o*_yyl_~-{OQs}*}p0p9d{oCee}^ua{C7BUa(_5UHx3v IIVCg!0I1VfssI20 diff --git a/graphics/items/icons/reaper_cloth.png b/graphics/items/icons/reaper_cloth.png index 73f0874426a2e9cef6d5497f6f95ebd7421aeb2c..f4f0bfdb487561474914bb47562d72b5a0aebf2e 100755 GIT binary patch delta 231 zcmbQpyoqUo1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1Jx|_ba4#Pm^gQ$qtFor z4wh7jPyf~5Hylftx_qhD^t>4h`aYIRHb}ScE?#*rLGGQP51UzYg^ybMf#3oun^kF7 z)C48J&53SMvvKFkI~qE3Yj5Mu;G*?wrgNwNGs$IP^*WjOKPH%Yqf1@xRj2&02}dnQ`tI09YE;OXk;vd$@?2>?SmYIpzu delta 326 zcmdnQG?96NL^2CA0|SFlq{3++#a`m+>&pI^m5JA!^Zq;jEkGgh64!{5;QX|b^2DN4 z26rEq06%wyveY64V?C3?)+G;tN;pai{M>;u#y~cMSA(WJkYY)9^mSxl*x1kgCy{lc zqJ2GMlDE6d|E27ojsj&FOM?7@862M7NCR?Kc)B=-RLrUEcN99Lz~eem*kb8j<)wG0 z&tT@*RxNGO5L@tH*`wKbhtcZ)&(!TZ1?pED`+DyXpCl@hc;!%5+e_XjXFqe#cACC9 zeZy?8LbIzA`&~@rO&^%4G+1uF%&NjrKc|3mLPXc&PY1OZ3Rv>J*vPPS?(yR;GdSW( zQ+;*_3AFoiKVo3K`!(mYHt&L8A1wMW25%{h;c@RSobFc@Xuri*>^%3~fBz<~wflWh W{>}xSmRCSWGkCiCxvXJLlmz(&GyF#d2LigCfokeJT^vI+Ca#@$k?)8C z2g^~`jbH!&-!AlyYpY$EaD17O+lDFq&MC(?ec39Ml{)d8!{%_+Q02YqPG?pHgifoI z(JyKiV_|v!R!cC7wc~l1+Jh_YPBU08vS%>(-DEt?$HTnvNVP%i&xOWkAD*&T?w@xs p`S8P@($9UzekrH^54`_`>D&vJKOe0WS(>TLm&bHA+K%XnAzeGwRr)3BGp~hX&Qi_aI km_C^uvN_W5#4-u!*dndC#b@&O0Nupk>FVdQ&MBb@08Rv9egFUf diff --git a/graphics/items/icons/red_card.png b/graphics/items/icons/red_card.png index 1d07d827fa80c2cf0d01dbc995375355ff3609ad..88c8bf0c171c3db52d2f8470152315e0386d21ec 100755 GIT binary patch delta 135 zcmdnabeVC21SbbG0|UeLm1j>)thO%}C<*clX84Z^4g_>N1JyWrx;TbtOx%0gkdHxu z$LV6&j{h^)x-GwCA(8q=f5zXr)fb~LizsA%lTc_heB$S|;N21yncu6OIk;|2`K`p+ dT(Uogoymsr<;=w&Qh}y1c)I$ztaD0e0st^qJ;DG0 delta 235 zcmcc2xSeT&L^2CA0|SFlq{3++#a`m+>&pI^m5JBPnBnJhcc74XiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y}^3$=luK|5El(M}e}8B|(0{3=Yq3qyag8o-U3d6?2jk6vPd<6bf5JCRR9kamX#6 zG-=W%#-_!O9`S@Pebn@T;ig_dYL9|h&taaV!yz*h3MPamUOkl1bB6IFkHmxu4;i-P dq#9mkh8s2l!QS49tAQpnc)I$ztaD0e0sy5MN~8b) diff --git a/graphics/items/icons/red_nectar.png b/graphics/items/icons/red_nectar.png index 1d2058dca1bb622d2c97a70e3b7ab59c096caebd..73710370e494c3f922bdac292f213323268e5fc6 100755 GIT binary patch delta 213 zcmeyvw18=X1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J(3iQ78&+;^|$R7>-;E*EM1b5=HTYXQLnO3W?qFubmzM{YkyP@pA8hOx{D8 zJszE@oHHLVT$bcu))P8c_>Ci|D`twOKkLE(R-U~qx=Z^M${o*Hu~yF$Tyk%f8Gk14 z(beDf?Ku@7SMy=pyCYIHuXk16-}Uv~@&3K-@Ap3zuVF~~$8tiLp*9uhHU>{uKbLh* G2~7ZQfno;$ delta 305 zcmZ3$^oMDJL^2CA0|SFlq{3++#a`m+>&pI^m5J9(r}yKlO+X>>64!{5;QX|b^2DN4 z26rEq06%wyveY64V?C3?)+G;tN;pai{M>;u#y~cMSA(WJkYY)9^mSxl*x1kgCy{lc zqJ2GMlDE6d|E27ojsj&FOM?7@862M7NCR>vd%8G=RLn_EP!Q%|V(dA)A}1$Dh2bfO zw6>sf+`z|Z1 zQ^2q7*_o4BnF4(w$Ir~1y!WzLlciC4`nfqq&ec~PI~d>Ro!e{q+WyLx;{5k}WB;?i zvY5I3{k`?}9K~DD{Qu9MxGpV0M5JYNCj*1JLlmz(&GyF#d2LigCfoh69T^vI+CN7=e$ag@2 zgC+LBqyOU_vF`rFHnU};wZ<8vhd#&J6e^-#x2f*F;Id+^^iKYL0@vcb cE_}CU41C1YY`0p%9B4m-r>mdKI;Vst0FRSW_W%F@ delta 278 zcmZo+ddM_EBAJDmfq_9NQsFd^VlVOZb!C6d%EW7?`b9TL3@9XC;u=vBoS#-wo>-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+Tber;B4q#hl~>1r7<;2^LOW9EFamEj=4L zwVDoVEX(M)pfoF@XM&KZKufVi>;xY%Grbm$rVXx}EhD^Q7-j}*FkE>Q!}oB8I2VWX z^aB>h+8jdr5}1$lTKCv4h&mvXo~+Tn@rH!P3C;H6Ge=KzFWkl)*;CN27_ozqVcjl~ V;DbGVc0flkc)I$ztaD0e0sw7sT73Wj diff --git a/graphics/items/icons/ring_target.png b/graphics/items/icons/ring_target.png index fae2b944bee351a510f90ce982908f1f5741e460..08b044df7667837eb804d118d611de763edf2987 100755 GIT binary patch delta 170 zcmX@b^p$af1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J$H>x;TbtOxzn7&DWs7 zlYGAFzp!PZI0FE*;loHPwL+U3=@{O+Om{~wDn&+*&A^iyKK;|!pM N44$rjF6*2UngBCwPO$(0 delta 255 zcmey$c#3I)L^2CA0|SFlq{3++#a`m+>&pI^m5J9(_KyCm4xo^DiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyagJo-U3d6?2jk6ofgL7<r_@vYbVP^PoFM5)fNz%wRBagL21uJN3VyD#{&Fz1x>0F>Iq&KwJOeK2J^MYO*v9M x%-fDTGdyGxol)$N7o6!*Wa=ZjsvhWxmNZF0`JTVxx)thTQgC<*clX84Z^4g_>N1Jz`Ex;TbtOguZmo9}=E zhfAu&i@*6XF3DGS8>DW8|U+qb9g#~J(6yt5uN V>DI^n$OhWW;OXk;vd$@?2>?cgRgC}u delta 278 zcmeyv_>gIWL^2CA0|SFlq{3++#a`m+>&pI^nN?iKBqzAyFHlIl#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8mLLPLYkF%s-<-E5{bE?&b_@;LwpX%Ould-L0MI`LoM<8g#cAm zQTL9_v`oFHPc;L&TY_Uwofb*d<0#VfZ`!HR;26TH$5_Pd#I)kH;LW=pLMluQ3ttIc UtkCMp2Reem)78&qol`;+02)thTQgC<*clX84Z^4g_>N1Jx|`ba4#Pn7B32k?*hq z&uZU{KmWzgFWj&#SpBV0I9FEBTZY@;#2NZ?7ny!oDC>G;IoIB;``(A<^H}fM&k!Sd z>!8%+dkr>{DGS2aXK|%77(Y@lnw)Q(Ho3?t>)_St%O|?*s?ZDXPHR%Cp8Y~no0Y5H z@=i!x6wC4bpAUC;R|p*5^`=X&Z`R8d3B3GaPb&qwS6GTy?i7~q72a`I-!1up+77#W d)6@Sj>aRG$(x&pI^m5J9(^wO84T|go664!{5;QX|b^2DN4 z26rEq06%wyveY64V?C3?)+G;tN;pai{M>;u#y~cMSA(WJkYY)9^mSxl*x1kgCy{lc zqJ2GMlDE6d|E27ojsj&FOM?7@862M7NCR@#dAc};RLq&$@5|R@Akf+)thTQgC<*clX84Z^4g_>N1J$hdba4#Pn7DM}ZK1;o z94^foLHa-cpMTqQ(JC{}>hAI4kQrYs{&7~y6+DozyeqQdNr%CebIunOm7bpsh-$KY zuKHr?ogY7Ayq2n-;n-|YkUdwdUGPmX@BNk=9Ont%A!3hVZj%Och; l{hhy{C*S7E>_LL^2CA0|SFlq{3++#a`m+>&pI^m5Gmo<5S^kcc74XiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyafwJzX3_D&{079N?E=Wo3PkqbU5`fldbD1P~-GAR$1o2k~6es0cgR--7LwH7yX z&fY9ueQ-{R@b*5_^aD{6M3jK4f6&1fWgz%&t;ucLK6VEU3r86 diff --git a/graphics/items/icons/rocky_helmet.png b/graphics/items/icons/rocky_helmet.png index 006a9f8aa4a1236a4117423c53524aece23dd9a5..72613a206e40be44b33c1add6c2a81ce1dfd97f7 100755 GIT binary patch delta 214 zcmZoJLlmz(&GyF#d2LigCfodjrx;TbtOxzpjEp$|Y zLz`>L@A*GeZz-*Ryl8b=OorVA$^OT|92=fSXV)%wc;Vk_e1iGY2Q$GBt4h}RUQ(Q~ zYSvEPaIV<74bP&qJAPF*9WQg;#NpN$=W;fTac1)gX+2YinAc8)C!bchwFo{?4&vzk zP?#j)wMa?$kNo1X< zXkX8m{J zr$*_0m!9a!MpaDt4#vmV@fem}487lVKK)+Hq95Xl=ZvrH`ooo5yhn4X+1bKa&&Mnu zB(_|AP&1)aiutngu6t?6Q*XxoGP`3LGyUumdKI;Vst E0L+eZ!2kdN diff --git a/graphics/items/icons/rose_incense.png b/graphics/items/icons/rose_incense.png index c6b6abcc360702f66e2e91dc8f8e50cbd30b8283..95bfc77e1f8e5b003f15054323de5d136e43a5f3 100755 GIT binary patch delta 236 zcmbQiyq#%+1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1Jx|^ba4#Pn7DPKx6ly< z4wuU;ydB@|-#08=7O5&&d($-#;3Uk@~ zhSk(KjqgFTe+lEgyXzDgGv6CEep$EEx@5)fb2)J-bKL#sXH*LBms(m-9nX{eB5Xt5 ez3KUX9Od11vDx=|RfGVY%;4$j=d#Wzp$P!M(`o1c delta 333 zcmdnaG=q79L^2CA0|SFlq{3++#a`m+>&pI^m5JAkVZUZuAW%rW#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8mM+yBEpOtcZsY2RFKhOhaA)t))T>(J@9zp9oFgl{yS%)l z*>YC8mBXAq)thTQgC<*clX84Z^4g_>N1J%s*ba4#Pn7DO>*pnr-W*?5brd9NU&$x5#-}eqrWV7oHkKD4pYMh+d=XuoSl;PX3BL|!P zgLAZeuVk9pbI(w+yFBCR9nTpL9Usnn&#x;gD6%s(c@9@u#S-s__k_xY5_L+i-tqL9 zdd@cXZ=s@>apdJdmQRyc{5jZq@_LuYQ{Ln?^JbjaW?#qs!|XOwh2Z|V{L?d7GA1;w RTmy6^gQu&X%Q~loCIB8HXD$E$ delta 325 zcmV-L0lNOG0+0ic7-Iwj0000ISs=>*000McNliru;{^f@H5V7xP*nf`02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L0004WQchC_Frv^FIMHs z(5j`yOK73JCO&`yb4fDuP3hwsvtr+a?ixGK@Ufae8y$t^S0Mm4wu_Qcs3+}=n7JYv zf_5>ClPBuIo?@~jq=1lwRp{y7pOb8B^r%GS%+^Sc-Lj^WU)1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J&&Iba4#Pm^gRhL7~G6 z94_3gJ3joEzvH^taAqd|(+51iQyeSz{^Ob$U9@!3rO!f7&dzZ0Iof}C?w+l@8(eY) zn(lI)6=7}qb&c<4Nkh*KwT1Q1G#Yj%Z}qz+AN&5f%A?5dGuT(>@@;v>%_1RqvvjkW z7fZtFH49XA5`*000McNliru;{^f@H4g;4$O8ZX02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L0004WQchC(Ew~M+NoWecMTI00000 LNkvXXu0mjfC{B@c diff --git a/graphics/items/icons/sachet.png b/graphics/items/icons/sachet.png index 32c566a91da29c1cc4e8dbb233428baef9659504..e1b2774086c6e69b4ec720b0a88a4fdd6d8dc192 100755 GIT binary patch delta 200 zcmey!G?{6F1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1JyKnx;TbtOq?1J&DCJQ z6FqC&=YQ&ET8HHRUI;qo5h0iT_A$eXLgUpE5!u#?6DKi5KKN8}X=7#c#1uC3xhVm& zTZ`RN0-4(G1(pbu$*?wxtcbOJ(z}{Hto*{%u*%wVtBc-=FEqJq$aVLHv0aDa=cO^% sU!FAB?7634O{KinD*J=~p8tQwk`%*Km6Q;973drWPgg&ebxsLQ07~Uu0{{R3 delta 294 zcmbQt^pR&pI^m5JAsoh!k?5GW*G;u=vBoS#-wo>-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+Tbgr;B4q#hly;j(mp{1Y9Nk9~^JnTET35 zqt^Knx5Q0z(RB|*ZMGdXI)YkJp)78&qol`;+07I&5uK)l5 diff --git a/graphics/items/icons/safety_goggles.png b/graphics/items/icons/safety_goggles.png index 7a1efab67adffd72893d7ab8383ab500014ac898..2381790f2a3b530bdeff0ae13f2fe4bd261e1865 100644 GIT binary patch delta 213 zcmZo-UcfX#f|G-pfq~)r%Cn~?R@>JLlmz(&GyF#d2LigCfol3aT^vI+ChnbhQs}S( zkMqWyoJs%w|G&m;- z9odC%XRi|V67XN~XQA*#@c`L#lXmQH%$oF&#Uk&44ZHKM1iz(@hL>3;gqH_B=s3G$ zmx9{ly$YsIVa65J53^%_9`SaIn{VjmX1q3jrTy>q?N!Y4ZnE&iO2*Csx{blp)z4*} HQ$iB}_CRDg delta 311 zcmZ3$)WkeNBAJDmfq_9NQsFd^VlVOZb!C6d%+9aN-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+X|QPZ!6KiaB%pH*zr<^0du1-*LgYU>!%F z>hZVp%8IOZ>}ha%wI-pQ_2uRtQ;xlwyZN8@zkY`wNoVdm9?5#ucS4-W<+hg=ME>SIRqXGV$!0&7^d^=0%vWOU)1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J&&Iba4#Pn3y{$TC7EZ z$9d_OiGSBuTsly3VP;LoGc%FK*T1rEd<{3d`)2ygqhHok8Lysmv7t)fFq6YG&ll|u z*XE?VF*ePS>AT6(Q8ufH!E7Nv>#e>$j=wqi^?%Of7YL{n*u<5)EIxtN-gaNVtYQ1L zD}r-;;}+a`l~eCJE$H&Iy>HXhD`eiOncV-Ls3UuhecB9;KkJUmFarI-;OXk;vd$@?2>{T# Bc;Em4 delta 363 zcmV-x0hIpC0=5H?7-Iwj0000ISs=>*000McNliru;{^f|1}dzsojCvi02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L0004WQchCv z42E5vpqzF^bP~KkwENUW+*?D=pgKKoBF=eY!H+$su=V%FpT0y+44^qw@XYDG{_pFH z<$9MzFqZjqhh%I_epBtu*zonXsdhp;nSrw^JLlmz(&GyF#d2LigCfogg@T^vI+CeFR+D0W1F zgZV-m)5m}6asturw~y{QY4m?9m)!CDj!z@IPe|V6xcV*O<$AOIhZj#5T%)jw+2yRy z;*0a53uaADTg*T6fRDDK==b%T%JpXkJc@IgKjHIB2D4AuE?fNUuD;$hRpsKh7r{z} zx$n5$_D983#s6zKmKv?yn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyae#JY5_^D(2MoJMuLdh`7AuU9zj-^>Xn8 z^BSJbu44Scc0{+$Am^o%%{JZKtF47$pFiDx;v4wKH*(tS^5tIFJ6SU4TQ%{_UG-H( zYi++viHATHOJx?Xp>b>ZZSJV22iFv^%50Wp3h?OuxJ-znbzQN|x&V)-2lZ-A3RVRR z&wBFs#U7r>(*HFJ&fl_TD2{uWxXWGsf2ZN5%uhCKzs}!S|8V~&CLSSG*2VJN@j%Bi Nc)I$ztaD0e0s!p+cO(D+ diff --git a/graphics/items/icons/shiny_charm.png b/graphics/items/icons/shiny_charm.png index 3829154cd5a3e2702d4039e89e8e4b59d205cdd4..fd2c97ac8361d12210aef41fb4167bdd51143d96 100644 GIT binary patch delta 199 zcmaFDG>K_~1SbbG0|UeLm1j>)thTQgC<*cl{*MOEDsGwrRMY6`;uxYav3HW85UV1G zbF1hqkvspl$^V!-Y3@xCu}U_P*w>Q-lJ-4O65e`0qal2f5Zk{135Rf%eT$V?Bn0@m zXFQ(CV14HM4*3Uyo_~}gkLj#=vP1Z&+oBWSUKvI`xBRPj`M2@sIhFmFS3kUJ{eZ_I s)OE}AlCX(eruJFoKGXll9QTDeWd+OaiTvDKfv#cjboFyt=akR{0D6U8@&Et; delta 281 zcmbQl^n_`GL^2CA0|SFlq{3++#a`m+>&pIwiJL)2G(BtHW1x_DiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e{(o-U3d6?0P0>k1z-;9+}EZnbQ#YvWv(M~1>Hj`=J&@aBAK zLAdb2{zn&*n^g8HFS`ExQjN$D{vckR7co;B{CFy@%cceSHuh>NM66*m32uH_`YC+s ze7;>DUL?QzwevRH))?=^jc3+YuvI;~`1=0T+AcZm(oglNOMkW>-X|Wh`VRlbKgkms b%)YDbvkg%JLlmz(&GyF#d2LigCfoi6Dx;TbtOx!xrk*V2$ zgC$k5;s5^v@zrK4Y`+BLo#V)vl={=(^Qv&$s$0ICIU$<61Y7&ro$ERbGVi>x)pA-| zsHev_za`@1nMa!i8k973wsJ03*j{?~$V4v#3$3X&!WOPeH@eS#zPxdwmhV}m`BHud z_f&Gees|D5@|~6Z?E8X_Z!eVjw+UTcGJW>aM{Mi%+D<+({rc~ParHY`v}WFyxejz8 NgQu&X%Q~loCIIeTWxfCa delta 315 zcmZ3+)W$qPBAJDmfq_9NQsFd^VlVOZb!C6d%EW78No1X< zXkX8mEHo!Mhtb$l*VfZh z^Q^!liLGBgZ81q*aeB_B)2FBKB+e@|G7DFVdQ I&MBb@0CJLOc>n+a diff --git a/graphics/items/icons/shock_drive.png b/graphics/items/icons/shock_drive.png index 2ac62f6cee29bb4137e30a8f4e05f5332049b938..99f8e512c412fae4d2aa5e2df0b4aa29586074ca 100644 GIT binary patch delta 183 zcmcb{)WkGFf|G-pfq~)r%Cn~?R@>JLlmz(&GyF#d2LigCfocjpT^vI+CZ3%TDAb_9 z;lg@t@BfL;7iOHYo1MA;i>>39t@B-6wngxM3+b~B*t_b;vWY>$>8-DB2K-qO`Tkr@ z>qFh13D*v0Y|)xtU~_1mgzAG;AA}NeEZ#AB{pdDjIoX+=;901Ac(c~gXTiq=^zZLD ce*Y=M)iS1e?Ems718ryUboFyt=akR{0Pfvc=>Px# delta 267 zcmZo-y2dm?BAJDmfq_9NQsFd^VlVOZb!C6dBqPpi6?P!&AW%rW#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8mN2q-XQlQD6bfbEn7SgY@c->#-TqQ_L)mwnsryPk9pA|qd{p$yxqF#$K${sn MUHx3vIVCg!0P96yWB>pF diff --git a/graphics/items/icons/shuca_berry.png b/graphics/items/icons/shuca_berry.png index cc99671876d928848bea243aef7f464857717cd4..f26a80f7ac0131e67f9c41972c0a8567c9a7101f 100755 GIT binary patch delta 200 zcmey!G?{6F1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1JyKnx;TbtOk6rKkngYp zk8`$H!KL5w6^^T&7KF?)ssAO&ex~q`HbeFPInSppm=-kuNO9J6uYj&Cx6&T8E6!6^ zl4J;3TKdR3iebj9Qp-uHth?k@cnumnvo9Yo_ww}Ce=nUk(Z?kGt*3s&;dq9_+j)AN tgMB6To&Br$#(n*^t?!Gz*Z&pI^m5J9xD{P4_D^N(h#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8m+=6D^#MF>&;DOj4es ztMTX&)8wQOuHxn*30Bv+Ax5tnzQ)thTQgC<*clX84Z^4g_>N1J#`Jba4#Pm^gQ$r`TZw z4(ILzY&HLx!yl;BzTB{K&t>z^k3a5T^7Ux*Dyck=V=d0d6#`G3?f)eGLfb>_!8Jx! zoj!%Y9qrrJ$nhy%ZvXX7dvauj@WT8=>jjOg%_WY#xS}k1w28N->C=HsX&a}qk3mav z6`6Ot_4zn0zwp0tu2%6B`K!#6#Vi|}H%qgZJWH8u_+4SynIP{>f$MK3?J|nI)aHLC z;q&orDx4MtAGWVMYIR-8bV|Nwv@Ls SixvUB#o+1c=d#Wzp$PzhwT6!X delta 376 zcmV-;0f+wE0>T537-Iwj0000ISs=>*000McNliru;{^f@G$Fxu^o;-j02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L0004WQchC@ z5C-t<8)W6YLpwKtO`X{gurnDj{i@fe(e|Q}v__HD&O&hW2Io`W82?m)thTQgC<*clX84Z^4g_>N1JxvZx;TbtOx!xjk?(*4 z2g_8^KmYr)`PVGkVq3b$P;s(^SLO1&0=*3Fg5ZTl^O)Dh%($$;zR delta 280 zcmeyu_?T&eL^2CA0|SFlq{3++#a`m+>&pI^NrqQW=F8*`4xo^DiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyafqo-U3d6?0NAoaJp$;9*U;abUh62cN)thTQgC<*clX84Z^4g_>N1J!Kuba4#PnAm%%o3B}c zhxNi&NAK1D{=Z+hHepWkNspchVry2bLxn_i@ByIU+N&irwLLFxB1 z(UXP0MNQB2O_N)cCB<)?JT*rAnvk`DMqc$+mYM^a+ru2+iWCSucISV5T36fY$;CSg rU!7Uz7nF&&>`&BK|M2_%f?o4a``C)hw?+m5ozLLu>gTe~DWM4f5X^Mh delta 352 zcmX@iw3>N>L^2CA0|SFlq{3++#a`m+>&pI^NrqQWI7MgbOrVf>iEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyagHJY5_^D&{079AJ}RooM0IZRCI$u^xv45}#85avB!B)QDJ_Pu2^#kT14X1v1&?@!-M@J8o?Y=%p9Lb1 z4ZCH5Ak;XWlc_T4s)OI}Q!`J;ILvvvyL@}m`Y20nQ=StOBQ1-su8K5HZ&hpZ(U>1+ zchoienbC%uPp3XD4vh(GiaonS=ETk?k5n1Trl(Xsy|Y_QOMq|jk1spR^_O!v%+-l2 u)#W_KxGTzl^&BIUqqquRvw{&j3qwzw+1x`edZ&QiVeoYIb6Mw<&;$UYntap% diff --git a/graphics/items/icons/snowball.png b/graphics/items/icons/snowball.png index 3ba834ae342a54ae3e9d55fe99740372fdff4a79..516b1cbd86e9e96a34c08d4a5e5a6cd944a8fd21 100755 GIT binary patch delta 167 zcmX@h^oenT1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1JxvYx;TbtOg!5cDAb_9 z;c}F<>s|c=j;)d_{zs+%sW{IX{k!tTDdBP^37@@12RlTZZCF2TS=a3xoO(FphuGc8 z5tAh*9X;!PSY<)HR@k;;o9n+~tz8}m=~Zk22WQ% Jmvv4FO#qH?OmzSN delta 258 zcmeywc$R5`L^2CA0|SFlq{3++#a`m+>&pI^m5J9x@@0vSFi=Rm#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8me}W_Rf_RU68XZ zAvyW6f=2sA$rFYxMOPYfl8smFN?OpfIhwg8m}!cEVQW!W@5Gd4Qr6b9m-sbE%}q+0 z#AZCJI5R72mC6}b)thTQgC<*clX84Z^4g_>N1JxvXx;TbtOx!xjk?(*4 z2TN)ApZ}Ay`PVGkVq3b$P;s(^SLO1&48ComyH=X?Jio9??3oG2rKW}!*NerD;>v=p zJ1vBSs+Gj|tACgv5x-Mq+RMF$!n%uCsu+Gb=G1gO7AWDg6c&pI^NrqRBbEaR;W1x_DiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyahQo-U3d6?0NA9OP|K;9(88$xzD7$;0r7 z$%v8VT}8rw!7TwB57xi3o+5AM>zu}O#%IT@$;@k}eC%Y^u{zdw)$B!=+3{uth8Yej z4UQTN@7kRbjIJo;EHj;Xt>(iPx2`XC&-Uh)thTQgC<*clX84Z^4g_>N1JxvZx;TbtOx!xjk?(*4 z2g_8^KmYr)`PVGkVq3b$P;s(^SLO1&0=*3Fg5ZTl^O)Dh%($$;zR delta 280 zcmeyu_?T&eL^2CA0|SFlq{3++#a`m+>&pI^NrqQh_GQfn1)z|4iEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyafqo-U3d6?0NAoaJp$;9*U;abUh62cN)thTQgC<*clX84Z^4g_>N1Jz`Cx;TbtOguZmo9}=E zhfC^@JO588NvxihJNeuvTjPece-*YA6*edzNbFEg7h5*hdd5fbEyXX^2-Wd)7GITl z=r%1Oke9jT=B`UB)0212wEQ?D=C_snp@R4oiyxo89AdLhzw(Vt*r$(&P5gIWL^2CA0|SFlq{3++#a`m+>&pI^nN?iKAlq)w6QGcIiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyaegRB@%N(oqKzyhWH$inS9|wg0iY=hg#zG3jwOC zqV64;X_)thTQgC<*clX84Z^4g_>N1J!Kuba4#Pn7DM}ZK1;o z94^h=F0WPp|KHArhmBB_V} zV8bhsFCBLcZdab&c|jzPML=TR){9TlRD?v2nFVdQ&MBb@0IzX&x&QzG delta 344 zcmX@iw3vB&pI^m5Gmo;m<1NQlOA{iEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyag*JY5_^D&{079N?E=Wo3PkqbMBg$|zxd zX73&s!9x=-uoTUid?2XD*TJu|P-=$q)rBTkk6Pw_cQini-NW7iHwUE zo+Mn}`~BT}#^OUhUg_`la$h^7Fp;Ok``g|73D%Onr%umZtGG%+!kjtvjGugqMO516 o-Jjnz8@xa9rfqYeZ7(q3VwN~n%>Ap-3-ktqr>mdKI;Vst0QBmHT>t<8 diff --git a/graphics/items/icons/sticky_barb.png b/graphics/items/icons/sticky_barb.png index 735d3a051f3575e680187ad33835449a4ce6944c..8147e8de74d12bde693981b3535185ebc5af3ed7 100644 GIT binary patch delta 172 zcmX@Z^qp~n1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J$H?x;TbtOx!!cn~y<} z$BFgT-}N?Y=liVLHAk_H_57s_&Hr56=dd&RG)#43kXUBI#+g#_Zj#F_MwW?ZPH#B2 zBqDR+^a^X~6`v~RGW=PkoMWByg5lW7N^Nd$efQ delta 257 zcmey)c!p_$L^2CA0|SFlq{3++#a`m+>&pI^NrqQhVx}0&dZ3VaiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyag}o-U3d6?5kHUF1EWz~NHJ93Z~pC6kl5 zLSm!Y%YUo4EED_tt@bXrWf8;bmPnrweDbUd_yx-?xkG z<9{oD>e%w~H>nmdKI;Vst0CB%q A4FCWD diff --git a/graphics/items/icons/stone_plate.png b/graphics/items/icons/stone_plate.png index 8af90a8a655d0a479dd16e4e9f414bf371dd5834..4aa9ba284898638a9231576d2bd67d1a85e2272f 100644 GIT binary patch delta 169 zcmaFN^o4PP1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1JxvZx;TbtOx!xjk?(*4 z2g_8^KmYr)`PVGkVq3b$P;s(^SLO1&0=*3Fg5ZTl^O)Dh%($$;zR delta 280 zcmeyu_?T&eL^2CA0|SFlq{3++#a`m+>&pI^NrqQhWWoZE7NC%LiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyafqo-U3d6?0NAoaJp$;9*U;abUh62cN)thTQgC<*clX84Z^4g_>N1Jy)%x;TbtOgwwRk*~pk z!zD09&pI^m5JAc^UL9wa-fiSiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyahco-U3d6?2jk7MLZ7h$I9AH5IkQ&Y98E zD|#SDO;}t!H91*X;`mL8&g7m4Gpv*ggPI)YsB~mzt#jBWdBlXRbV7*Ll*1uuNjYIG v#Z6T+BX=_O99|N~SIpbdeqbP0l+XkKkC;-G diff --git a/graphics/items/icons/tanga_berry.png b/graphics/items/icons/tanga_berry.png index 37f8e2465647f01a9a0419795c50ebef6ef45551..1c552fb6d6f578cfe702c276222c14cb925667c0 100755 GIT binary patch delta 235 zcmZ3$yp3ss1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1Jx|`ba4#Pn7DM}X}-e> zJS-oXeg6EHzhf#;u*l1{L_aVsf~ipRe|yKh_l_MiW*Uiwu4Ojfo~!1jqme7PC+zLs z)r@M4>u#-o-Q>yC`oOv5s9*Gos1Ct72mBdpIM*1~i!3{M_(=G-<+^^=$6F>@EITEb zw9QJXY3{kbbEUnM%eVx3Yo$zr7YbN!_MKBX&pI^m5JAcDOs@fKTt@##5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8mJLlmz(&GyF#d2LigCfoh68T^vI+ChnbJDRjVq zgE_aQ=E;A4zO*2gV|v0 zK(|D}>7|Sn<6bG5>}ERR{%gldp!E!%u6{1-oD!M<7`au5 delta 272 zcmZo>y3I5}BAJDmfq_9NQsFd^VlVOZb!C6dB*UxBFLksr11Kb3;u=vBoS#-wo>-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+Tbqr;B4q#hl~>1z`g&F0KPNoxHrd4CYPP zR2(r$Da2{-U5lJ30hg}8#fL3*cuxr$<(r%FnzpSFX4=%#>$_mihRlQK&Kb-+G4-I@ zv4tK+%Vu)esx8~BAmf(0pzgBD3R^8T2g?<)thTQgC<*clX84Z^4g_>N1JxvZx;TbtOx!xjk?(*4 z2g_8^KmYr)`PVGkVq3b$P;s(^SLO1&0=*3Fg5ZTl^O)Dh%($$;zR delta 280 zcmeyu_?T&eL^2CA0|SFlq{3++#a`m+>&pI^NrqRMTXuzOAy7!X#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8mzopr0Eob0j{pDw diff --git a/graphics/items/icons/wacan_berry.png b/graphics/items/icons/wacan_berry.png index af113c9b58ae3c126b0d02334e893ebd40b4659b..61e94c642749a4138325b56438b3f1de0fd55b42 100755 GIT binary patch delta 208 zcmZo-p3O8tf|G-pfq~)r%Cn~?R@>JLlmz(&GyF#d2LigCfoi%uT^vI+CN7;A$k(92 z_P?(pfWH_P^oxj1P0Wx$QpFhj-hr#d|ijy09GE*mHnGnomyIpxBsatpdx* zxuOR|=Skk3ETS+mMBq~BWC=#w&OqTKwL9x3_-NPN$Q3xHnPl_pciaJ)4Av8;-QN0n z1)SKiD84RN_HU4l+xdTf*0)-(9edx>|Ni%K=Gr=Dl_!kJeL!b1c)I$ztaD0e0suT7 BUT6RS delta 311 zcmbQu)WkeNBAJDmfq_9NQsFd^VlVOZb!C6d%EW7I#MP-h1t=t5;u=vBoS#-wo>-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+X|QPZ!6KiaD(lZ26iEcv>e*A6a5w9kHwF zDC2}l%nB~X;fqT8t{kiOzxQCt7U_BSmOoFwDVDU|;qMlcv-Sxamjp4rVrpL~?)2O) z^SN9C^XN7u0Ngk@XxGyc~wssj|=WCJ>tob+k5v7)A8u!4c&DSj`8<+?t~g% z=zToZP}6y$>|B#y3~w@Aax|t)og5~x&wQQxp?~_@eleU2k}kD;VOb4yC4;A{pUXO@ GgeCx1rgeS* diff --git a/graphics/items/icons/water_gem.png b/graphics/items/icons/water_gem.png index 79e0ca07f310c44b903e9bb08ac672581602f733..555d92ccca9b26a03b5981747b136c2fc568091d 100644 GIT binary patch delta 177 zcmaFJ^oMbR1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1Jz`Ex;TbtOguZmo9}=E zhfAu&i@*6XF3DGS8>DW8|U+qb9g#~J(6yt5uN V>DI^n$OhWW;OXk;vd$@?2>?cgRgC}u delta 278 zcmeyv_>gIWL^2CA0|SFlq{3++#a`m+>&pI^nN?g!r{4a-YM_vKiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyaegRB@%N(oqKzyhWH$inS9|wg0iY=hg#zG3jwOC zqV64;X_mdKI;Vst04I-DX#fBK diff --git a/graphics/items/icons/water_memory.png b/graphics/items/icons/water_memory.png index d7096f57cc1b3a5e23ca67229f934183d5a0bbc5..054c05d116189f0484d7a34c52fd61361052e9db 100755 GIT binary patch delta 245 zcmZ3;e1K_!1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J$heba4#Pn7DM}X}-e> zJS>|Hj|Is6{J;OL6O(JEUTCe8@uBRSx4-!>yv}^@sO494)(T;9r;MzpzwM4@3A8JS z&tzJEqc^$D!%H&QBze`cBTGYk{E`Jv@ZM*!jGtP{qV# z@ArIU+5D9copHJCldE8MN?!3*Q{{bkDbBT`zrUn531ONa4 delta 342 zcmV-c0jd7L0-*zt7-Iwj0000ISs=>*000McNliru;{^f^2Q@8$`OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L0004WQchCpQo4()@$Q3Q&dN!p;laD_ zJ_M;+wQBlAnca6`oJs-4xA(vt$(b_^85r-ryT1`+u##FJXoKwCyZ=B2h^3W>2;RMW z|24>H@p9AB@V)o$?*Vg)L)z2!-UVx65Gw_`#rp1Vu$_z{9Y7956$9f|piJ=TgAhl{ oY;|$neGujyncZ+Us;6-P0M*w-nHc$%DF6Tf07*qoM6N<$f;4f7Qvd(} diff --git a/graphics/items/icons/wave_incense.png b/graphics/items/icons/wave_incense.png index aec3fd05efd0cb8fd4a25429af26f80b1100e4f2..5fc560eb86b7eb4d93217076c0aa10a90958206f 100755 GIT binary patch delta 229 zcmbQhyn$(g1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J%s;ba4#Pn7DOfAm3pH z9_RGqoO}OwrfbONUiJKab8<(>ZbQbn_4^rYPPuT@Oc0)QdM)?WsNCrF;_a+k7z@f? zuzbJqg}>veg3#5iakhtUHB8(oEqKshVzH;;#HbG!E?@RginR$0_hXj~ysGwe%bm>& zdLEXpaeHMj#Vh*vr{gA7n>Lz+rN8658^NwP-D}>vBkqq`rvE-Fz&5?@^W)meWAYWu Yh8@h8tkoN)0Nu*q>FVdQ&MBb@0Ap}#s{jB1 delta 325 zcmdnMG=X`7L^2CA0|SFlq{3++#a`m+>&pI^m5J9_;io~+9iWhSiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyah0JzX3_D&|b>x8*xzz|(qr9>eARqF#yZ z8V2e`d;+Sk?uEIm5pB*tu+#HWkQ&>*gH`_Lt2Rx3!hh*(c>2y8Yj^3i{7VtFjk}`n z7%%L5RYrEmdKI;Vst0HZT}LI3~& diff --git a/graphics/items/icons/weakness_policy.png b/graphics/items/icons/weakness_policy.png index d8f0b45531de71a01ce8ead3c4921103ed38dbda..76d26e7e493c3990d69acdca886529b5c9782739 100755 GIT binary patch delta 153 zcmdnP^n`JO1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1Jwk3x;TbtOx!!sk?Vi~ z2a9m|*Z=-`Oi8?E7o0C2oZQTno&Em;_r2*(<%|ImtaqA>mRvVb+@beKdtu2rzn1!0 v28OGhN>}M@xaV+AYvQI`OLqS~9v+jT#?0lYp=$v&p25@AkJV+JQ$iB}r=mm( delta 241 zcmaFDxQA(iL^2CA0|SFlq{3++#a`m+>&pI^m5J9_+_CrjWuTCFiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyag>o-U3d6?2jk6xa>8oEjM>C@*1Q?NaF5 zIJuikK(g6V&Fk1Hw_{%C68eN)rgDk(t>PA#ptHCsD=J88&SI%0EKemIzi2q$dB(&h juw8Mt)KPmEMurPtC1)xZRg?pbXYh3Ob6Lmil+XkK>8MJB diff --git a/graphics/items/icons/whipped_dream.png b/graphics/items/icons/whipped_dream.png index 9cf9c959a708a05977703674671c5d0f84d567f8..0d3b4249844d480db9239bb8c1ed446ff9157d0d 100755 GIT binary patch delta 217 zcmeBRUcxj%f|G-pfq~)r%Cn~?R@>JLlmz(&GyF#d2LigCfodjux;TbtOq@C)P^ejf z$K`Iy*;9Y@@33rj?KaM}bGSd7w=wnS!Upy{GjoG_fnq+1+#;?!tM)l9Seq?*&&O{| z_w58pi`PPq7x>@x9CVQ0JH^^O@j;em)y9{(0$GaFl$7nyr@5*w$x!Lu=J=$4%i&v( zFKaKf3UO_}tQ~LU8*|L}*6*)>s}8HM7Vq54d4V^LzhCn2;<)P%Su|L*l{10vWAJqK Kb6Mw<&;$S-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+X|=PZ!6KiaE&%2N-&oJY*DIQ~DHz+$B6` zF6dI4b39|o5|(iFMN&(aFijR>Dw?uD#!X#Sp`fMU$ehNURP&B072O*rZSu69aX7;6 z=#3jUQmPaqLQ{8jZ|uCi#fZ^hxy|LH#qv_hElzBG7JVym!-{O?z^bj=Xp| z^X1damlfQ)eZ6PLnem=VJmWKa+O(M*pBp36W+@!vZ)%$Hu!)HwpIu3#@QIZx(5(!f Lu6{1-oD!M<_nmQ= diff --git a/graphics/items/icons/white_apricorn.png b/graphics/items/icons/white_apricorn.png index c2ea5617423746fbfb79a815b4c5e97dea5af256..976779af701941c3796abf24d07df566b74c503c 100755 GIT binary patch delta 190 zcmaFQ)X6kKf|G-pfq~)r%Cn~?R@>JLlmz(&GyF#d2LigCfodu|T^vI+Ca%30$k(92 z!yMoyIrVpZgxU+WPnp8?zb?5bES;~MG(YuavDlNCkk{Q+{#==hq+Gld9X~bo+XTca ze6aI*$EapAnNRhLonT4hcRtYr3#~W2Ss?l2$p3O5HQ9$U$y!Crk1lqvxVs_$R@LX` iTfdYt{|Eek!cy~zWnb!cy$wJ|FnGH9xvXyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyaf?o-U3d6?2jk6vPa;47j+s94wu>+_V;U z3dk)E+F3C%J42!6aZp~|J1Hryi9&_??1e%HWt=~Mnsgzc!)n2%Pe}^uJ`86H_03s} z4$PA9jp=cII49+C7>l~DuIRy;)20b>88F^%uZn&X5lZ{PS@m*uVf_KwgJQ$WX j?CCV%H&m$XlVD)*{;LtU@2JLlmz(&GyF#d2LigCfoh69T^vI+CN7=m$ag@2 zgQa^>(*OStxP-c0{q8>YG0S_h>mQ541I^|m#X3S3A5Puu`Q+wuR_ZBp@Iqf5Ij(1Z zFSwURO}w@&Xt!vRiu8W>4d*1zWg9D%bUqDYD2QLm`hV@_2NkL@4>Xr6Gxon%|0w%& d)?wSnHe&Nw?Bbm7yn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyagdo-U3d6?2jk4)9B`POxxlYicsETf8Yd zBSXRGkcx?}ZYYDAVA#b#F^qIBEHnRjN&v4h*F|8@caXbkObN*w3)_fMrr diff --git a/graphics/items/icons/wise_glasses.png b/graphics/items/icons/wise_glasses.png index a3982f18162821a55af23532574fcbdf4086c633..5500baa320f30db93b7bee3ec28f6bd19e1ac5f3 100644 GIT binary patch delta 173 zcmX@h^n-DN1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J$H^x;TbtOguZmo9}=E zhl^}L)qm;f_uX1kC+{-)tma?PV=p6MTFCm~CF_Kz!V9KEOq{uHRr5|WrX-dL#~q}U z{S>Og7iwwVW}H@G6gqQ~jKH^DOu_Gxf0XI0TJ!8!7DHoW+GWXS?E9?seeW{5th;M< Q6=)}er>mdKI;Vst0A#^UJpcdz delta 258 zcmeytc$R5`L^2CA0|SFlq{3++#a`m+>&pI^NrqRMEm_j?3{XhC#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8mDkl-4t>i%!DUQPFsqzpN0y4z!TL)78&qol`;+01U-X A4FCWD diff --git a/graphics/items/icons/x_special_defense.png b/graphics/items/icons/x_special_defense.png index 54a3e00fdfc4a7552ac0baeed26766786478932d..18dd6d5cc8ae220c01f04c905c25c17af36c8d02 100755 GIT binary patch delta 233 zcmbQmyoG6k1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1Jx|{ba4#Pn7DMpX`yBV z9_HkkNBaN&e{gE4iOS)n!FO+nN)=@PcV)0C)cCw$L3@_`F6pAp_jc#C-I;smjh@P( z;BM=qCXc3R8djYzIk}$Wo34A(52Z(MrW=YITiP+zXq+FVdQ&MBb@07r3cZU6uP delta 335 zcmdnOG>dtHL^2CA0|SFlq{3++#a`m+>&pI^m5JBLOyvKyGe9Bn64!{5;QX|b^2DN4 z26rEq06%wyveY64V?C3?)+G;tN;pai{M>;u#y~cMSA(WJkYY)9^mSxl*x1kgCy{lc zqJ2GMlDE6d|E27ojsj&FOM?7@862M7NCR>atbvx(BR_o3u>us3-+8G cu)+WsTwMA#0>>3Xfv#upboFyt=akR{0OHYatpET3 diff --git a/graphics/items/icons/yache_berry.png b/graphics/items/icons/yache_berry.png index 08bb40fcfbdf1599583ddc61db2e86a91e2ddcc3..1d53ed6338493c494e6f77d6b67fb95294275149 100755 GIT binary patch delta 223 zcmeBXUd1#)f|G-pfq~)r%Cn~?R@>JLlmz(&GyF#d2LigCfof)Yx;TbtOk6s#m+OcE zPjmQI`+fhp<1ZZw$!l)r<}tiKORPHfzvq*q`LS}62N-?}a=7mAxAk>7>vKH8H``pW zzo0yL0pH2D)n_;tU3jtSx1D1^yn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyagLJY5_^D(19aIL&*=fQRitS~Hu=LoT0y zt=s`>D?*;1Q?!q4u!>#qmF+_ALeG{eheO-_>rRwS`^!0X{RYjiTwg8!v##ClTiSVv zEjD<5U*e?sH_EQBirMhp*nWlfbfcq}|7v^lldb`d)IBI?Tgh#w*R_p49gTe~DWM4fgCuyw diff --git a/graphics/items/icons/yellow_apricorn.png b/graphics/items/icons/yellow_apricorn.png index 4dd12c5eb664d66cb2d48b1261561bb0cc5ae3f5..293b4054f216ddc444c2933a50c98efc2096fd31 100755 GIT binary patch delta 196 zcmeys)Xy|Qf|G-pfq~)r%Cn~?R@>JLlmz(&GyF#d2LigCfokeJT^vI+Ca#@$k?)8C z2g^~`jbH!&-!AlyYpY$EaD17O+lDFq&MC(?ec39Ml{)d8!{%_+Q02YqPG?pHgifoI z(JyKiV_|v!R!cC7wc~l1+Jh_YPBU08vS%>(-DEt?$HTnvNVP%i&xOWkAD*&T?w@xs p`S8P@($9UzekrH^54`_`>D&vJKOe0WE9Z*QT#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8m_b7?W~xX?V{ZBI4Cdf-7QOICDli9e2-L`EZd$vRb42!wlN^}>CuG?7bY?#^i}WF zoFL5gY{m|W_CuB@k9iBu*|H^sB|SPSOydlLIon1P0e!Bd{t_vPoR%HzhZ=W9ODQr= kVftit$mU4H6U!u^V~e!n7N5!A19TIEr>mdKI;Vst0Q~u4DF6Tf diff --git a/graphics/items/icons/yellow_nectar.png b/graphics/items/icons/yellow_nectar.png index fff8ae6977c5533c2c9cce09d1d608990bf6a6f6..c097f4092645398c6ecb3763af1efe9d7b286c61 100755 GIT binary patch delta 211 zcmey(G>>V51SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J(3;x;TbtOx!#1B;R2L z9@c}>0@MEgzhk#pCZcMMRgj*sg0gyxy->WKzsgTe~DWM4f DGZkAN delta 304 zcmbQo^qXmdL^2CA0|SFlq{3++#a`m+>&pI^m5J9#=Ddr%6i`UK#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8m1Nw?LY%E;CIc0K+lvEbWa|z3tt7bS_BzdYmU6+;B zDd4xu&3$u}REu)ty^9y$Of?fcGtuty#fz6ror;x@H0)Nd@+;ZbJZszcb2qI&$2rTY x*FJx@w^BNB-L$&zdCF(5^7J${6_^P!FzEbLJtmmdxCZDv22WQ%mvv4FO#nRWY#IOn diff --git a/graphics/items/icons/zap_plate.png b/graphics/items/icons/zap_plate.png index 80fed9a1e587e1b1dd7e13c78c74229019756f4c..3e355ca99592f43a5ae1f681ca22b359ab3ee3ad 100644 GIT binary patch delta 169 zcmaFN^o4PP1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1JxvZx;TbtOx!xjk?(*4 z2g_8^KmYr)`PVGkVq3b$P;s(^SLO1&0=*3Fg5ZTl^O)Dh%($$;zR delta 280 zcmeyu_?T&eL^2CA0|SFlq{3++#a`m+>&pI^NrqRMDW&A^RiKb~iEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyafqo-U3d6?0NAoaJp$;9*U;abUh62cNJLlmz(&GyF#d2LigCfoj@4T^vI+CT^W*$kd|1 z!_t|f^y@$SZWfnCBG>PTi5NRLdA#JGIFJ9{j598eZ&ZpjGfz+r-@3Bv$-GlL9pw&6 zv)wP0{!}DlGSU2rr_555-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+X{lPZ!6KiaE&%3UUTqKycuOlh>(ZZ2^4~ zCQUNzIlO{pNHuaM-Z4>DaNRpwkOv*c=_% zE{3jDG$=PVSm#yhR^SqoP{*({CX(SGYe1kx#A?2I7xo6R(H-vVak4Z0(*e-b#dbEMiYO9 zREUlnOGy}6h%5nhNSSaxrP~6AOGzjnxoDN^tB4wP%ghNrsOukx06}1I#Z_R)apm$X z;+8`(3FkGfCRrR41^I*pDfP3E6{rSOwY7k`n}81aKw74MRZI zey{PAtb^ZpqVHV~gazkItJ6COvLs&bAk-6R$q;N_ZMTGqTG-OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00G@eL_t(|ob8fJYU4ltZanoEe< z82Ua+Al^$LFc^a@kk2A08e&0dJp__7uyMgIV=~MS#@1ppB{_d3X^+Rv- zkCS4)R-SM2cmK+)xG7nfGH){zPq#v*Sk(fbWd(sc4^PG%f0rgFC3JNiOeu^fE}&YF zMB=4+%KXwC?S)pXS;v;FR6_3&a-pz5AP{t!Umnx!p`%xmBFEV;e(iL&eCU00Zu`ua z);y!QSV5pETJDLXuDfGQT+<4nu?jn1)T)OELUCmkm5{q|p!JmrR?fR4Y&}uPY}RUl zhk7on8XsCne@(KLK&5DPcHx86QaNVP=L+8zN&k&+W>pC75 zie^GstUGwb|KD$1BVsXKoQLK)bD@;3AM68LUx@-DpATw-*)&aWJT&d32OqH{^H7wS zur*;pp(wuG#vm?u?48?wJcKOpkmzTMHuA(|-9pzwe?q3kr5z{Zams8vLN+*ID9ysL zEsLhwA1veY@R@x8E(mCcrKb4u$+PBd{mMldF5To8C-EG|Nk_YYST^IGfB zHFq^2vNjT10;- zzEU6Y`wlEH7{T1X#50$m(M^?l&OMM_b9V7y06k`+-!lnt>W2nA1d~ZS0v>z@^HDKT z%`v_+5bBr_pVG|03IGHCPN8-%kOs(L5kU?M7|fTrV1ceD(O?oR2Oai}b{r2M5w*yO zv0T+R@KjVV06R2jm3+*r`tFG-!VyFp0I@I$vur zaH1PQIc#1p4Fk;QW!`D|_{}lh@>kX=~AtfOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00F^CL_t(|oVAoYa)U4shSg~%_d}e(QmbaQ zi3@7m7f8lcs@UOTbezHa5;0)oDr){+vEM!H2G}UJ@{CGSTaliJ>-j<`F0Oj>S@Ic0W;qP^@#!~r$A{XN{4iaoS}qn zKn~i44v~FLe@uOACFxa%qKWAs2pEe5jNL$Y7xLT1fL?)UKp=n)A|eV96Ltg58TZ#u z1^R;~rip=jq=^dy+L9}2L}2j!)CWm$?0@(r48?#%6Vp(o8>BJ=68LdFUc^5i&J0ju zIW3?{MKW_ItT>|R^-zJ6Tml_VD;o-~fnTf8f1TyFW|9KFYD6w1)2r@#^ZRcDKsT~a z`XJ=Ts(%0ql#Dch3`-g8MR}qQ&G5;C!kN;E=Pi|S?-gQ9TgqQ?zE}EEHudj^ iSruOBYWWxX&+7)>RvE$&yoz`L0000&+!1 zFE@7fEk7~Ki;bQAjRZszRq12d*xNVkqVB|^A0uPod1GS_mM7Y(p3R?&VBXl-Q?q|H zLv0|ymlE*2WNS~BlFUW)jS+xinBX81m^SvcDJfZqSQ^{UL1&{OgVCWD@nl!Nu&;bP zZE$Tgq1GxwzQzKyGZ-OHjB>pmZl9YnNhYg?jg--TBLR^^Brw9V1Hs}inPNf!)WcmIwtobYRVoT_dnhn}$CN6T)bY4`pooTSTNlwULm z7!kMOp9G)bAJ>vkBSiiC1Aessg14)WhpS}eE0000< KMNUMnLSTaQOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00G%aL_t(|ob8i8YAZ1i#?=`_nn#Y1Be?TD zMh~`drwPmfY)Ij=YzUgbKzs(*!MQ-N%V2P!GrVuKHayl&AYF>6@VDQ3{`^MLhVZ+7 z>au>&XxIIC#U#T+;r^PxOrXwdSzoC4;$wdSR4A3yN0LlJe{$iyfHNLt z>>Hb$;Tr(^>SGg@v2O{DF+Ti1ixf07M>Vg{Yg%->@MG;+oWVlYl>U99S{k9Bch>w_SWA8)Z4rh;5)C-01y zp)|(zL05F>!?Qhq%oRhcKHfsr40PC~k|aw@P~Rs6@~R&EpwIzB7vraCaWB&uJWhcd zo3Q}ZJn_CRdNk(MkvsSJqj}8I`GNW7NKhR#TBfDXex~$y;hO=U1`qYSfCd7#=nb4P zD)}7=F`us5$m0OASBR(c2(Q?`4c@=nNk`s$whHJeNW6KU-pzKOYrEFNw}&f$-<$o@ z-OKKC{r^)NzNfc$+iy?0xuO?qyWj6NU+9&L?dD7U-uegd0&ZT|;#j=^0000r@S3KxJED>RmnnUnDP}d96b_Fq{SZ7ph4g~*Ex+}O{A+>g;Uz>k{ zf;EGrr_mj$;4PzpTYqULC|Q=%$$o>J??r$gU9Th#^{D z>bE5d>IzcOv}|~#uOi6LBCKH?Zq1Vp+FYVMwA(0L4Q6_*9;*muhEeasgRT$yDgya# z7()WgQM>Cpfpr92PaBRAF7#CdG=2#Wd9p;;rn^Wx#XO=A3ZnYluN^N zmODfJa-VX3=H&|R5Abn002ovPDHLkV1g>( B+;ac` delta 533 zcmV+w0_y#g1l|OY7-Iwj0000V?qFvC000McNliru;{yZ%1vtQQ2OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00DwYL_t(|oXt})Zo@DP)E0#Qa{}Z81u|tZ zf_5)J>jSkl1X_ZK9Q?2P6_rTEb!<7!ST2VP@5~En8?!9-0>Fh{so;AM>@WUBM^@gA zFHP|3195In!p+%0d1ilMtH$6GulFwTP4%w4FrjUH@)0K7e_oHmVW)giq3;96NAWOV zT2x?e6L(BFE-o9l>49k75H|~!`qbaria7DlgB$gdG4_Is4MdmxEt2%X?zrAZem&l* zlRg$&%|?jP(5Wz>l^>yFuHPitZ6}6cA2YJvfn29|;QA03Yv`-uvkXA&BqKICBgpcA zhrGnihj4%Uf6(@rxe@)AAqy4fe3Dsw5xMm$6#V6iF{3)kk^V`fphCqtA4h^G9qEXy z3I!K@9wD773$2}VDvgY%a(AQ|M_(8@6^dZOxflT&R$;^Z$h|2?2%a;V5?@5OVe^_f6-;M0d7`W^F6Ex!oCz=t!$!oZV%Yr;{4VUHrz<*Xh XYt}d-?>x4w00000NkvXXu0mjfj78;t diff --git a/graphics/object_events/pics/berry_trees/kebia.png b/graphics/object_events/pics/berry_trees/kebia.png index 03efc73c1f5c69caac24335cac1abb1958e730fe..413ef9b4b43dc1db32a518b5b872d86358eb7469 100644 GIT binary patch delta 448 zcmV;x0YCoO1c?NY7zqdi0002m9*t&^dp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0004aNkl6A^{i+8kwrxM z{W*UrkAS3~UGdxewE=<&EQO(%8drR~sA%J?8UVC5O5_3G^CQChib@hQ1E(Om123nn`c41Eblu#27%RD0@=30al= zS=9zOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00DeSL_t(|ob8gaj)O1^hBI9x-p>Tx9tSb8 z#0l($lqWcK>QavODKAbqskGHe47Z#vi}Q)t|8E;1{?A`I(#iHGetJ)(HR(6WLo$>ip81%e7SThV|xa)G%CmzCMH z1ck)btVtDU2!oDRB*I{HRFm^AOaQiq#?w5I) z*c&3IUI@@&e=FQbH4UvO!Z_$~;0kj$M=M2`mT*bq$_kvB=8j?Ho|aD>c)r)8OB@rf z$2l#;>Z9k<-wmT*6yUfC_31p2NYkcJHwqDdWO0#|V$U>@iSLAhY}c7iQ?-lP#8MO;F6L!>+pcx3YrVV7 zUR%!e)A&U8%5tWk#)rENu+;#Q>MMPF($F;c29wqV|6t~oed+D4i>^BK=M7DR2{V5; z)yBkPVUR}-UGH~&)RD0BuLPsT&Iss>Yrpps-1oaqsFh(^8v zBXNIEYD`8u^NxJcLFn%PpnHah-z)GQy~>f%g1sWfenxNv5H#TtTHA?s2jAyKg|F)> zh=UC2&8b(9RY7ma5lJ{&Zi)kdwFSQL4ijN>L?5d>l$^bq)J9;>kYrsy8_Ev5i~8n2Gcm z9XZdW;uW{H@V?$#J474}MDzk7WZbY!t^4@0rHawee2R^zdFl#G(6$ zf_Ze1cXpN(Y>4}g9@kRxn-TF`Y5L=t3U4d-g3k1f^HmIw0|(OQ92UuY@Ra#W?k2bW o!Q3Clhn%(rkIY~4wf=Se0P5^1ZOV1ZP1_ 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 KMNUMnLSTZ!<=mG5 diff --git a/graphics/object_events/pics/berry_trees/shuca.png b/graphics/object_events/pics/berry_trees/shuca.png index 4e95bb4f6acfee44d6fb020108d23815aede5d6f..dec160ae674056aefcdf22b5c9d5a346d65d86f6 100644 GIT binary patch delta 479 zcmV<50U-YV1gHd%7zqdi0002m9*t&^dp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0004(NklD=M3JeUv~ef|e{{e`E)>Ll|2Fi9>6V9TX=FPNQs0(g?aw zo6UGAkdYw9wnd5KGdsxQ)>s0)N$NnhDQ`y5FOAO{`)-7hVhqCg%noKkN+=_eFL@|( zM~7xNN4U<^QUQM!75%OW>+4mYvvde=7%J3#?>7-xD{{TcRIzr4J6$~^>?up(5_rN~ zF{Pv>7e=fJJ9@_AsZ#;Rg!}%O$4KfjBF9WiLpNC8YIw(7aM~re_=4Ts_Xqx>{Q-7m VH+u8^tZ@JU002ovPDHLkV1naL;!*$r delta 565 zcmV-50?PfU1pWk&7-Iwj0000V?qFvC000McNliru;{yW~FgcUI$OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00E*&L_t(|ob6LRPs1<}^^nPPCkB2?kh-vR zgN<&C`3dZ{X9mXuGMjx;@^4zCN*<8tK!*MX?%9Qwrp?U2Mat{beZ0%vRfvE4nuX72y`Qkh?pf=8QfWY31KA2zzQC)$* z*5U?y#>3eMe~O^8WWR)CJIL)2UBC2;0lfdHb`%}$YD_arVv~U-x>Pz##5I=2S4#m{l!|FWm00000NkvXXu0mjf DOo8|4 diff --git a/graphics/object_events/pics/berry_trees/tanga.png b/graphics/object_events/pics/berry_trees/tanga.png index 28e86f6f4d98a5248ce093f7745594e8ee66deb6..0bba806bc4667b0b24b790f14ce81be9e76906ae 100644 GIT binary patch delta 526 zcmV+p0`dL11=j?S7zqdi0002m9*t&^dp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0005TNkl#(ChZ@VHaK5$j?Zb?woiQG6E6lc zKTWLorG6#iCy5pRLV;S@PbD8yV$CnqS(aB~`BO1s8WRiNRUTyX^rY)41;)gR56^$* z3YowL3lX3(c*%!KT4p9%qHn-qsA2)LXf?beLX+-h$+6#ZOLh_+#JMN(lI6Z_Xgb!d*1|$l(nt*+ec3hB z3*jDbo13lwq9Ca?Z2cOfnmlF@yz~WLkLY&>Q;&Ou9)%an^0@(|IZHzTM$_{ujKA)_2@e|84wIi8d{N7yn~?18?Fcg4>v! Q_W%F@07*qoM6N<$f)ZB%;{X5v delta 625 zcmV-%0*?LH1i1x}7-Iwj0000V?qFvC000McNliru;{yW~IS3P@a-jeK02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00G@eL_t(|ob8i6P9s4Og*!lM32_R@NfwC% z?52d>lWo>jlA{i`yCi~%;Rtq)&CV$t5PCC0J0Y<|FlX3THMWGt28oP-4*cd>_48H# zIQPB2>XJODm*alCeB|MyP(J1l6GEf4B$tr2_}Cu+l@LqJe?D*u9QeR%$$gqweF`yY z0403#*c%(~;SGRvWp6?}_Lg9bUc54TLcIi5QEf(EXTUJZ=t`^ub1b2W>??i&e^L;g4Wrp+z{kNu^)8?RgUxFL zWjv`t?}+nhchyE72avRa-<^khx)xdD|0j_@rX#OCtpa*763?E0TwJZ+SG(53+rt&W z@7d<(#m)MCef!jg_w?`i*JicT6>+ zZ}r=-w+y0`I)X`FIuQs}<=+rg(^~@KkRUb!zabE_KOJA`g$qR5S_gpe*ac#3dRl)< zIp;+wW+L@^HT=(|>}v$fEIBJ*5Y(FK_qww+#Nrv7-xWjVNg;ZppiOfqx-#y{Ph^?*wNONXiIgb#IrL6S?Md_e!jwA?&D;Qh> zFk9JO^hSW(2A8T)48Z~bA0Hcok*t4YfmB5BEJih2HTeZVALV-j_2pVMo0jc@t1rPq zx~PYaiv^Q<9%5ry0JKOKf>>H{Ndcstgn1k>HS`7$2Y@3T&=vr`g{p@f{o?>B(zk@x zwyoX(>^Lwz64^@;9O-3d6fE&tbDwd$4NH@$j}22%@ft5QU{^V0lrEyJt1qY_3*=y1d$M02Zo$!>@DV?+;_BfvN=F~YoNijHeEZOFwY;)o`tSl6?dbt z{@z0A>B;DgbI9%IGXk|s0|$NT;R3$vAHN{brsK_EIB?g;-wh?boetRVc?OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00K!#L_t(|ob8l7Z`wc@$MIlg?SZ+0Og&2s z-r!nCVzYdv9ovetDmHTGN0C?>RSHO5TLS6_2p%D2xiu24#Fy)HmNL{Ybg%lX|DXQP z>s_n$KPur6jB`MnVUQPR96CcJqIYKqf5`ffoJ+zPg!+s{f7=g1>1GQ@00Lnn;LsBS zz(rFIZw@xp)uK*a+>%0u8Ch;VRrQPY{asW5mp|9}Z4I#9+&@v&b-3Ja?yBRwSg#)n zV8EB_ycWp6@DwYg>MGAaXH_77;9&}iQ;6RzR286$G3YU-uxY}Yeb5keVw=duz(Y|5 zy!e$!i#8{me~X$~x?Y^58pawDPl#@{3n!CeLNuMxD3MY`)fyDngc2Rih~{DpWedkv zM&E*_*apW+D!?%Wk$ztRe5FT)J1-A{K7khLw-wy{N)b3#fOa2&XoJ83ECrqi|zygS=EtvKZb}%$YiZ-d$kqdo>bG*q{l)B^|}GLEcT2p4S+K* zE(L*xZ!gB_Lt&tJP!G7wx4^YOEDz}!*!%XMWISj9NY5^b`6IKd{cat$>);9uH>Ahv zep{EZUC%u7kuj{kO1Wp&!R*To!(R P00000NkvXXu0mjf)0R0h diff --git a/graphics/pokemon/alcremie/lemon_cream/front.png b/graphics/pokemon/alcremie/lemon_cream/front.png index b913e40be83ce0205be8e477426443efeb12128f..4fff85bc541af0d638890a80a876e4a600ff9295 100644 GIT binary patch delta 657 zcmV;C0&e}K2H6FW7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0006=Nkl6>+ zZ}r=-w+y0`I)X`FIuQs}<=+rg(^~@KkRUb!zabE_KOJA`g$qR5S_gpe*ac#3dRl)< zIp;+wW+L@^HT=(|>}v$fEIBJ*5Y(FK_qww+#Nrv7-xWjVNg;ZppiOfqx-#y{Ph^?*wNONXiIgb#IrL6S?Md_e!jwA?&D;Qh> zFk9JO^hSW(2A8T)48Z~bA0Hcok*t4YfmB5BEJih2HTeZVALV-j_2pVMo0jc@t1rPq zx~PYaiv^Q<9%5ry0JKOKf>>H{Ndcstgn1k>HS`7$2Y@3T&=vr`g{p@f{o?>B(zk@x zwyoX(>^Lwz64^@;9O-3d6fE&tbDwd$4NH@$j}22%@ft5QU{^V0lrEyJt1qY_3*=y1d$M02Zo$!>@DV?+;_BfvN=F~YoNijHeEZOFwY;)o`tSl6?dbt z{@z0A>B;DgbI9%IGXk|s0|$NT;R3$vAHN{brsK_EIB?g;-wh?boetRVc?OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00K!#L_t(|ob8l7Z`wc@$MIlg?SZ+0Og&2s z-r!nCVzYdv9ovetDmHTGN0C?>RSHO5TLS6_2p%D2xiu24#Fy)HmNL{Ybg%lX|DXQP z>s_n$KPur6jB`MnVUQPR96CcJqIYKqf5`ffoJ+zPg!+s{f7=g1>1GQ@00Lnn;LsBS zz(rFIZw@xp)uK*a+>%0u8Ch;VRrQPY{asW5mp|9}Z4I#9+&@v&b-3Ja?yBRwSg#)n zV8EB_ycWp6@DwYg>MGAaXH_77;9&}iQ;6RzR286$G3YU-uxY}Yeb5keVw=duz(Y|5 zy!e$!i#8{me~X$~x?Y^58pawDPl#@{3n!CeLNuMxD3MY`)fyDngc2Rih~{DpWedkv zM&E*_*apW+D!?%Wk$ztRe5FT)J1-A{K7khLw-wy{N)b3#fOa2&XoJ83ECrqi|zygS=EtvKZb}%$YiZ-d$kqdo>bG*q{l)B^|}GLEcT2p4S+K* zE(L*xZ!gB_Lt&tJP!G7wx4^YOEDz}!*!%XMWISj9NY5^b`6IKd{cat$>);9uH>Ahv zep{EZUC%u7kuj{kO1Wp&!R*To!(R P00000NkvXXu0mjf)`B_i diff --git a/graphics/pokemon/alcremie/matcha_cream/back.png b/graphics/pokemon/alcremie/matcha_cream/back.png index 8f93ef92ef5658067c721151d77c9f08554ee387..2ef7e2d3bdf0c7c38a5c600a65984c71c7499975 100644 GIT binary patch delta 585 zcmV-P0=E6@1(5}i7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z00062Nkl#rG5RAkOTl}3t)eG zCnVEL;06F7wPjX+eAf~+BL%o3p(0o=2fq`Yh+<>pi5@BM%Gq8sEa|VU5U?IxD z3F&?!%rj^N$ajbUkZTU=;?P(EVE1AO*%fj*&+9xR0*(5Y&@m+hiJ-MR07d{ITuXq7 zUN*LsLb3<|&sCfnC;)^jtYRY!di#ICXBFmnMAjSz1Aebx8z9n$fO1Rz-KVaGX$H6s zpgAD*0DTi0$S?u4gb2z_1dv7{m;joA3=WIhK-vsx0JI9|Xn`95q7hzJp;gezClTpM z4WN~(2bA}sQ-JR2Xev-HKPKo2*qX@Z^M?^lPq)+qssV3-4+QFpCy2p7J0gD~0x=^q zR|1t4H2_d`Q;+Q#09XT+VPc>b6@cyBo~;B`0P`?jyB^p7P3dO}fC`}Z0|MJVP0aqM zZCXYpAdUvGIw%H(FmEO&2;ew+IhLYu7g09~LM)JsenA|1L0bo{qCfqH@bIc%I=V>@ zfVzy;+%3Q<$8}xDDHkeoNrE*?fffLi6ky?oe1|vz?*aNab#PP%r4=dxZ!`GDH}>Nf Xzs(>#8w|Fp00000NkvXXu0mjf1eO7m delta 675 zcmV;U0$lx(1?vTn7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00Iw5L_t(|ob8mqj?+L8#*-rbS!^O9rMcAC zpmkEEz<9h8(iMqVUx8>GE&Ci46y|y)eEmt_w;;jYJ`^+S*xvOY=n*5uk@EfY?Kk7u z%x3>y%>$~NNj*4ksBWi-tB%CDe$@J8_2pqyUkGi9y9s?Je>K(V?&pMV4Y165%Af`y zswNBoNEg5+00|(pQVL)@s?Ql<2>}rAMl&p+DK19m7_>mBvxx|G#i7wpBTRPp265C~hJm3~_k zhdvOyfO;AMe_9=w)-Ru2fYl>#fmh$%40AUEI^lZlmi%TS?|xA+k< zLJnqc&Kn0ni+z<}Usl4v*m7r?u6b4DkbjOjMDl)b0q@@m)0ahBe5E#z6uA%JF^}b! z@)>oRH5kK30Qp#!<#U=!NU$kB02c7R%*lZk3N5%F@_+rUegg>V6*utjDO>;m002ov JPDHLkV1hzCAZY*q diff --git a/graphics/pokemon/alcremie/matcha_cream/front.png b/graphics/pokemon/alcremie/matcha_cream/front.png index 39c3ab855a7ebbc1c07ab2a63f8df455198fff58..7dfe1b3073b5a6509fb70c9bd8295f78c3117996 100644 GIT binary patch delta 657 zcmV;C0&e}K2H6FW7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0006=Nkl%6WuvEM=`HC`t!)b0k4HT*2T9 zfZ59KqBjEMHn>!cVh9!h`1sfujAVZ$3#1}~XECbLs>v?^`Y7KMs4v&5*|cmITzv@^ z(nURVTrHT?^AH=u0w71a5X73RODZ7wB+TQ8si8N3H~<{!fV=?kEmS?^=pP42mA)n9 zylw3UV8?;!k;q<(;7Bh++-q&V#rtv6ngPh3TO%Iq0Nj9n>O$AIhNPh$ybFIoLRBFG zaY*6zgg{;2QuBO5VCCbrJWjePK!zTGXr8DZl{N@%4)9fy=?PiOxrZN)Bqun276cGP zqjqWR2hcP7LEmomAc%y}Ixyr+V{b7B<-Vh>lg$C@TLTTIwdvaNgn9mW_AGSes<<1C z_4gJ^Pftc~oI`FupAjfu8aRDW4;S!V|M&%gHXUyU!-2a#{%$Dg?R3C?&s*SsK!fOb zQ4IYPfK~0;e$YpYEWdA}sjZn>H`5yu+rjDrylta*>`ZgacDo&33DQREwp0D6l*JWe r4|?1P?u6J^$RBEdaDF5I*k7@KdD|I|5I*Ww00000NkvXXu0mjf$<#eX delta 733 zcmV<30wVp{1*Ha%7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00K!#L_t(|ob8mmj@m#JhH+tO%M6&=h9+Z) z$_-3nZ9!vsjFK*i7)z08*cl(R^-7R*Sw-4FpOA$oSo{{Sp__-w8B1Hl7t%*L?f>aN z*O^x9e^kOD80UaC!yqrtICO?cMDNZJ{*d({IhTYp2=y6@f3_cj(#;l*00hEDz@bY7 zfQzOa-W+VGt5u!4x+8@QGqT=&sp=Qohx@1iEd$^^j>u|l_-B-tXvE4ov zz<{r}c`cBC<0)21)m5H<&8k5D$ioyArx3qcsVYEMW6)zvVbg>)`=BA{#5R$Qfrp|B zc=0Qd7Hv*Ae-|~gbiFu9HHIC2_-t35zWOI$`+2T zjJ^d;u?>!uRDeYYBK^4m_)ZrJcU~R@y#+1O9~-#&oFcHO0PQ{k(GG!+*eqYNQwbof zFXBW1-0V{Yngxf_B-$+a6-Oy-Kui=|8`Jv}a2PX&e@7Vw-IXe2FG+AJ0f8|iss==g zEVl2f1h{DMH0p#xU>Q@6fGGjS5Ps;)mv}LQE*~OaYGZl=LL++*+=~b?#+15nC5nlM zdW1<}YGkV%60}DI7u^X0vZ^ETehd+jkjYxv_G&A@J*lRrNf(6<>U9HfS?n2I8USZr zTnYjWZ(oelhr&SdpdN6UZ-HxnSRT?daP;jz$#~EJke*!<^GD`T``tS1(7_cLZb*;S z{kAS+hn{)jBV$;7mGa1}gE_KO!>B(5(w>r(O`~>YOQPPOKIi$1{;$Sw5$DxPj%KPQ P00000NkvXXu0mjfpawPD diff --git a/graphics/pokemon/alcremie/mint_cream/front.png b/graphics/pokemon/alcremie/mint_cream/front.png index 68d3b5a4c0287c9dc69a4bb1580b216ad44ca860..e019cb098ac39083c6be6f3cc7bfc8b35a87db71 100644 GIT binary patch delta 657 zcmV;C0&e}L2H6FW7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0006=Nkl!cVh9!h`1sfujAVZ$3#1}~XECbLs>v?^`Y7KMs4v&5*|cmITzv@^ z(nURVTr8N>^AH=u0-!~@5X91oO9~+EB+TQ8si8N3H~<{!fVKeeEmS?^=pP42k-jCg zwr%wWV8?;!k;q<(;7Bh++^coI#rttms{zQKTOuCp0Nj9n>O$Aoilm_)ybFIoLRBFG zaY*6zgg{+iQ}uj8VCCbrJWjePK!zTGXr8DZl{yG@4)9fy=?PhDt%o0uBqun276cGP zqjqWR2hcP7L0@n6Ac%y}Ixyr+V{b7B<-Vh>lg$C@TLTTIwdvaNgn9mW_AGSes<<1C z_4gJ^Pftc~oI`FupAo2C8aRDW4;S!V|M&%gHXUyU!-2a#{%$Dg?R3C?&s*SsK!xad zQ4IYPfK~0;e$YpYEWdA}sjZo6H`5yu+rjDrylta*>`ZgacDo&32~tPv)>Hkcl*JWe r4|?1P?u6J^$RBEdaDF5I*k7@Kpl}%2_jc6000000NkvXXu0mjf?EXKu delta 734 zcmV<40wMj`1*Qg&7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00K%$L_t(|ob8l7Z`wc@$MIlg?SZ)gW$9UB z@CMg95}V~S?bueFRk4vfKgz(+s8V3)*b;I?! z^Lp26{f|mG1mhggW*Fqf8HdggiRj%K!XL6eB@Fb|?Xa z^+lWrfSYZqK(k<1nnargKjJ8b6^My~Yh!wU0uE!wfAA=ypu19q>?H{fB_J?nMAd*u zk;V3Xl>iqF9!H%}2rOgD5iljd7{Yg*`3Wy((B(tqOKnUKKxky|fqM}l#+XtUu0%2M zP>(PPOpR=nLxT2*;G#Q0Kvs1m-j5+75;9pU+g@!2xF^;0H0iO>LA`DOE{i>*O9SA{ zi%UVEaN&z_`cN1s9@GOa^DS`g56eS(2KK)FCm9bK0MfHdV*beNYQI~D?K-#u!wu=N zy5H7iY}Yf7d}Iu(uTt)rbufE&Xc+Z}K-yE1vT4+=Y)RA`)aN{Z(f`%>4UNRm5$PC7 Q-~a#s07*qoM6N<$g5r=x1poj5 diff --git a/graphics/pokemon/alcremie/rainbow_swirl/back.png b/graphics/pokemon/alcremie/rainbow_swirl/back.png index e7f558454d9320a913d5757a44a270badd02f476..06abc68128d00a8a6f38ca5c9fe5b4a160f84f8e 100644 GIT binary patch delta 588 zcmV-S0<-<|1(XGl7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z00065Nkl`g!r@l25;}jqeqpl;qdy``4xIsemY)^i>0Lm6B>U}MSHmy^ zoCnYt5L$rTxCSB&05u_k{NMq&Q3wWrY9NBayf)xAL+Svv0y0|Q27su9msO}0)beq7 zdJ+SurD_5Bo^=9{J?%{eiuun3Edgs2>3n`OqUq_DT0k*iE%1gwP4O7f8K{3pgh!y1 zFr`!olvh*%K*dctwnqR+5-1E61Jx)1tmpPc(r+y#Xu^vOy+{o5=_a*tS-VxhSa#uNxV`7KlebBR099u7gz3-hM-PSk(_1 z-6RJoL02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00I|DL_t(|ob8jbj?+L8hLa-wS!^O9orK^8 zPH3G}DX=`Ygt#IW>njkAPs=vE1O4vySaudksC}mtsqq zPyhZio}JD9JH6aPMBNym zem$BpXaIcDFN2r`kVnOO#$MKH^Ty2@zguVpaVixOhjlDhe~-Y zng|BKW;_;sgc!#mpZzH#jbnUi>dU7w z5OzK*^}MQfe?uU)0eR~Ix;ikW9^TpjYerxLPe0ok=5_>h!u8rLhm-6g;9G#&oJ|1~ zMd04JpN#bxxfc*U5Hj3;E>4VS#<|-B~KoMT1#Sq}@whMeF zm@r`WAg?3`(E#)e;*DB4D{+N?CyciMvMO~}SJ3%6e?Mi67;q(>%`^byVUsbT>!qCS ze|^y3u#jg4ST?sq$sWkGK4_dyl#>Vu>8kgAEC|r;<|d}uxBC|saE`#Sy?$%TdU?P9 zy0gzXY>(}}kb~ap`@IFA#r9a9K32j&8`-nW&-t+`p?n{6h{WaA07v_KV*0wutB=%X zMv;dAJsxvYf2i-UE)uP|2M{-PUEk%ofCQW3BVYlq>XIC2q0oZ6A^+=d`VBQ!7~-Yp RNG|{Y002ovPDHLkV1jaVCn^8{ diff --git a/graphics/pokemon/alcremie/ruby_cream/front.png b/graphics/pokemon/alcremie/ruby_cream/front.png index 7196c7054bf2a69d073957e04cb1f239c94b7f90..3f59ec810787d6d577f0a389118594b5c63cf7fe 100644 GIT binary patch delta 658 zcmV;D0&V@N2HFLX7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0006>Nkl@9;RrH){dmreviRrxmr)%2EtI3$RTz;6h|>`%v6df@_*=G*}wJa&Otvz~vJ zQYmFoikV2gUJd_Ct@|1QGixcz7X;;O`n@bwRM|1NmYfa(CoR=Ri>?sN1I#@E2_<7&aAo`={N763WYg&@{kT~YzbCt)5(ObxvO!~x()2jm5SZ=vcTNB=lLs`M=( z=WS~@06Pv$k3{xT1V?%q;$Ca>E#8ll)(k-Q+#2y<2jB+uQy03vH6#u7;9Y+J5~>Oj zh(ijuCj{#HmYU}i0xKV{<#EzY0W$OeMDs-TsI)<7bAYdsOi##K&OQ8aBsszHvmk&V z8nsJfKY*Uu5Bhei2SFr+)`1~s8heX5DEA$0ooo(J-x_EztxeaCC(QH5vuB|zSH<0E ztiQKVdU`T?;~aAP`HVpM(!hR!dboh^`o}K_wCQ*=7!KU^@pnT>Z>IzHd)@;70~$of zi(=@X0IX`y_JclJWchs)O>NE8x|!aP*bY_~;B6bdV`rLUw%hISN{}{Mx1H)or7W%( sd(h)Xa3{pRLjF+ugYz5t$Nq}_0|Wpgcs`nPfB*mh07*qoM6N<$f{-{j@&Et; delta 737 zcmV<70v`R^1*ry*7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00K=(L_t(|ob8mmirYXGhOI(uo3Z6>%oG`w z!i7BvTNo8WBa%jt1P=s^ss$&FAxj{3vt5$43)gEuhP`n$PvM=B+2*`U&Iq=ME>0hE z+W+G}*O^x9e^kOD80UaC!yqrtICO?cMDNZJ{*d({IhTYpe+bPPi?$zvHq91}00hED zz@bwFfQzOa-U)2zt9hL|zafPTN3vLbsp=QYyW6M$EN-t#a6%_+oh=DG^dc?u@Q6gEv*vkw}ANo*5& z3Op25z>8mrf2?S8%(W*{|?ctUimT{yWEV`Au$Mv0Uns@9;nA(WWtNDLP# zlr0=v8GQ?eVjCPQsQ|MOMD}wH@SV;y?z}t*dJRToKi2T{IYVGp0or{8q7?!ku~|N4 zhY~W)gBWXgRI2wUf8a2t6pwNWrYm*GUXtKY0s^H* zR1b(0d2HWT32@QiVblqQz%nKr0aXH&B7E05P4Qv|T|Pv<)W+lhghuurxEB$klqz-M zN)!_h^$3%|M9Ee;Bp8nfF1lj`WK~DveF_ngkjq-x_G&A@J?W;WNoR!)`gH?vS?n2I z8UW{1b6g4n4PT7Yhr&SfpdN6UZ-GaDSRT?du=njh$#~EJke*!<^G9k|``tQh*TEGi zu1Js7{kAS+yPkUBBc)hB(5(w>r(O`~>YOQPPOKIi$1{;$Sw4wof_ Tk!PFg00000NkvXXu0mjfDy%lc diff --git a/graphics/pokemon/alcremie/salted_cream/front.png b/graphics/pokemon/alcremie/salted_cream/front.png index 08a75d2e8eb33146d4343a1a43edd6fea7a301e0..13cc028c444ad4c694e404c78b52bbebbc3f1ead 100644 GIT binary patch delta 657 zcmV;C0&e}J2H6FW7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0006=Nkl6>+ zZ}r=-w+y0`I)X`FIuQs}<=+rg(^~@KkRUb!zabE_KOJA`g$qR5S_gpe*ac#3dRl)< zIp;+wW+L@^HT=(|>}v$fEIBJ*5Y(FK_qww+#Nrv7-xWjVNg;ZppiOfqx-#y{Ph^?*wNONXiIgb#IrL6S?Md_e!jwA?&D;Qh> zFk9JO^hSW(2A8T)48Z~bA0Hcok*t4YfmB5BEJih2HTeZVALV-j_2pVMo0jc@t1rPq zx~PYaiv^Q<9%5ry0JKOKf>>H{Ndcstgn1k>HS`7$2Y@3T&=vr`g{p@f{o?>B(zk@x zwyoX(>^Lwz64^@;9O-3d6fE&tbDwd$4NH@$j}22%@ft5QU{^V0lrEyJt1qY_3*=y1d$M02Zo$!>@DV?+;_BfvN=F~YoNijHeEZOFwY;)o`tSl6?dbt z{@z0A>B;DgbI9%IGXk|s0|$NT;R3$vAHN{brsK_EIB?g;-wh?boetRVc?OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00Kx!L_t(|ob8moZ`wc@#_>Sr9+-j4)bnIE zxHb~rET3D+Q(JMW@YJXhNa@-JMEBqoQidDJofYY2jMPf-&-Fb^8R`$ZSAEy#r|12= zYqkDIB^-ir4(Kop^5Tp`cZ5Xv?hN6L*Z|^lNjQVRoU!P5e*tLIY~ct%AZP>}dO`rW zXv*Opz=pn>)v2>HdVdettRT#5-XbWg)rN)c9T(A*G8Ot>e8iv-FRj;)No z1w*k7j+In^V*n!kz5@74j~aJg9t3>?Bhqgxc>I+jaI65G0RrI?fsfcMKe1g2AZ#F_ zSO7e(Qw@gso6;mY%>NOEDXc(DG(0HP{}XT+Q;LTP)}LLwoTwX*HiR)BlbO;3{^3mx?92H>*TGrBYY&Y`#z z1RA~=Zf5|6f#!Za&}N#$81SD?5eeOC9| zwi(;>)jc08#pJ931p1cYq94ySB-h~>R-uaUH%Vo zatPqumUYQM=MWVI#9ZB30OtfTBnXI#7i-R#(+Cy>^2*hg%G+)t zm=Hqw82$4A#GOwgTiR@MNdW8W~x&t89DIS8T z1oeD}`99qO)L6n5K>Je`eM|Yx<+Izf>fr#;gc?O5rFUmSc=-{^>7*C0Uj3(^b07*qoM6N<$f)vR8*8l(j delta 631 zcmV--0*L+F1iuB47-Iwj00013M{Ml?000McNliru02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00HAkL_t(|ob8l7Z^AGTh7&3Vm)9r0KA9?Y;gte5?~^;ZZ4%m5~K z5Bp+4yIVqFzlO3B-Rum#`?3Ja*ZQ*Gg%I`FugQr(A;cWoYM}!XV7ZH|AAr+St7|!z zn=yG!#}DEJe=#tymMI{ZgOiLx0gko&J*GHcPs;*#to;8gpX>EQ+LRr}fqfx#JHmv`BeS$)!NsoKFWo)aX52*|h`V=3&e_?EYq@0=4OcNS}3Y(A@M#%GF zv-y%;Oa%xzk0c;I_J{9&ZcNdh^8-=mAY{eWRd{3xu-?k&PDHLkV1lrs4IBUf diff --git a/graphics/pokemon/ampharos/back.png b/graphics/pokemon/ampharos/back.png index 80fdc1f23d26a47ed0157ca797782ec58d7b8626..7cba18fe4780a7f8b8598a3e2ce2a690c67274bc 100644 GIT binary patch delta 490 zcmVt!QbYKU_mR?Y zO#p~Uz15qP?$eZl0I=%gI1*VqS=o9CRV97ES<6ojI8Ib2s2L2kG1i z=9Um}L=badJ+yF1-dMQM)msY=aRGmb%Xw?TtzQ6M{l@_2R(t@+<&XAO+yF|LXY%I( z^K>D15$3(DL)vLU4M-V?ZUFjw0_Er&dBhVs{>-PXbUm1Zl zz(K(CoI@T9>tj+b<7L98CtDXHX&eGX%6VJl_8>CXJyIPERNcV_((`Nczv@4d4mcO=>N`kV+K7EBz|4Gw^l5E`>@M@;Vsxn=)n# gCCmo=L-+5+FWc%9&=?erX8-^I07*qoM6N<$f~LOZ@&Et; delta 567 zcmV-70?7Td1b_vQ7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00E>)L_t(|oXwQKPQx$|#_NHlQ?DdaDHEYD z5FCk>;LDDMz3>1Ps>B8l&;?mMMW?FDEASp{c^91KPhE0xD#XAIS?=fDcfR{P8vVl< zZ+j9f)b^{NcEv^l1x!DA1d1my=qQ>H04zita4y8uf+T>Ef6ZeOM;vG%1Hln7jULmG z0$2)V9#aSq$u4A&lmG&#l zMgi&o$hQF?ODL6rQ{$Er;R1pJLI*%sW?}2)5bF<2~W*u|^XhbfTOEc*Lek1=~d;=DisCRqlXuJRb002ovPDHLk FV1fzrcIpY5*Phi~&TFH;)n1)>$T0fLjGun2#y zc(vg!z>J{h*{~@L7Xm^%SWpS57ZAMnjx2(X2lL(~15F4L&H_LcAl{=+PvR<NW)G z7l?(Gv^~^qOak{r>zbN)7Vujl4^V#z;MN@BNkENnf)Gc5^tf=6@kuC8S=T|}+IQ!6 z7L0h*m+%yzR^$hQinmX2;=?{{0C{I^9Us3W4t{)?~k9fX3>L>k@SMQ)Gxa7Th58ebQZA?oAAlrF* z7ZBxdfTtyJ(*d>re!fIk0V=P3iS7kz18#VWATPa>K>M7c?ahuiL=dZYO7N?1)gRj3 VAd3|+ypsR`002ovPDHLkV1mzj*iirg delta 573 zcmV-D0>b^M1cn8W7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00F8=L_t(|oZXbaZi6ro#u1X=BcciHUAj}s z9MKwfEBFCW&|0a{YkNbM@8`Sk{*Wm8pAjd?W>w!7MZQAB z+fpCa2-Go(Jfv4v#~gtaBC)y-`m9r@>qEjP(5chW1)HK)f26ChO$Vewo5DU;;Xa%N z=aa2b{|aywutw?ESO6ud(>>F~1=ztc#cg1b5yRpw^cu1^_%*E$x(h<_>HM zDcuku07Py{;S95mZL)-D7GPxmJFW@%Q;Mz$_-hnDPXXpsA~9>7ZPvFr16_u@${1kw zn9*}@QCE*0{cs=54Zv7jfGi9QW?BHQ23^_YD)1%*o#C_s{Pp+-F;x}~U=+3k00000 LNkvXXu0mjfCwT0q diff --git a/graphics/pokemon/basculin/blue_striped/back.png b/graphics/pokemon/basculin/blue_striped/back.png index fbe338ab816e7ad8dae30d92c4c7c87f7bdff413..9578c6665f90c7c46e20147d7119da6fc039b652 100644 GIT binary patch delta 557 zcmV+|0@D5E1@#1w7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0005xNklg|?o)UXLFAB{_H3 z2~hn0HbAY;d$P@7~u#2af>0I`;|}v;NB+nGlBh47-=Ak03qZV5JCrtGXMrZ z6B@uy!TvnJvbSb80B>x!i#6LBD4@FeSNRGsC}O(=v8!2bWc{kT%PRnO*Uel3hRB_N v2E>@pHQl%bV7}1ck9Ys+dGs0R(LdEMnztjjHrpGb00000NkvXXu0mjfG9vy) delta 669 zcmV;O0%HC31my*g7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00Id~L_t(|obA#-Z__{&0Pu4p1~xm6MSz7| zs07`T%NJ-kb~0QNDGMEPuree*m8k>Rf`txMMKWcoe4eTbRmuBu+&jm?F*qAr-e609 zKfQl4A;k-mE2u!x!IS4p{n)~l8HK6OT4ry0_e+DIO)?%#Qs~CfF>az}G zl~XvJ`wXKJyyV=1e$@^Q&fg%Yn30e==lsO;8kNA|Z-tcd-1{p*DYfsDp|s(>D*@9P ziDU8~R2)e;EeX3FC4rP-j1kFcsf69GHIyoj!_bQT5>DIRM}CaM3$3*wQK>`&_ixEK z)EG&s;(4irf4L#0uOht#OqELDm3`Kw8AwysiRZiIqk(I$e1@B3VsjrhzwUYr<+)3| zdSBqO^c2D3UR_4-^8#~;q85ltT&0U*k*X(ZmV*e-PaHA&=I3IQ#?9uJ9N5#kff!$` z*jA)k#h-F;gU6o^giw$H*42r=jXG*O<-!~;nuPU+uuN)l;3={9}7tc$kd<#J~d1`>SMSKL02H z2q!t<79=@vYzKe`1QXxpJ#V40v+d!4%>x*4z4XlhXWsMmrU|!-h*_;G00000NkvXXu0mjf D?E)(7 diff --git a/graphics/pokemon/basculin/blue_striped/icon.png b/graphics/pokemon/basculin/blue_striped/icon.png index f0450849a15c7b66345cd0a3f6fd08fda6801e8d..d84ec283fc60f82e19fd59f8faf4f0ba5222b797 100644 GIT binary patch delta 288 zcmX@d{EBIU1SbbG0|SFkK@2~-f zi|@<{4Zr{I*R{x8WFoNDc`2Xe>9}_r9H-rr*#0l1!}M8RO`qwrb+rb?atu>BH!N3j z2x6b(^p1Z$^McTa*@6+Zf(w-xbiQ}bSS9gBxKQ7*x`uz9`&dnd0O%u!N zTH;yw{#YOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L008nyL_t(|ob8gaP6IIvhVurN#gu{e4Op@# z&scSe)IJO&lF1WXbUM0T-9(v?=!Ik8;!H3j{>`7P*p5D>{$5g2N!H*TI1r#3S6mi7 zh56#N01F~N2>`feIyI0HwZ{!Wolu|YeBXdYJkHN!8(UEyf3M*t)|%WYTugg&3Bw$W zYaJiNA&f}^iZ^*1+~e5Yx^B|f|M@Wh3OZ0qD%~#^Q%w>*V3|!42El~8x2iioaF_iC zz6A0Iy$MrS!~F1apl?uCfh;}ln?V`99axOb5AVd%k7Xv30;z>9U8~&F&MayLM6Y9a idyKIcrq-%{7N1YKpo9Un4Dv<*0000lr;kr2?UomsCs>+ z%B#p0n|Y29dLXX?=P6`!2>{pvDbc({cAx-6-YtR(EVN|B1&}tMg%TrJ;1{Sxf&s2W zIG(6zfD_pFZ1|R_1z>;)&%7F-0{a>caP817$N&$3PJja#3%vkYSX}`1ft`gd7C-`7 znCF2&Ca|p|pbgLn+cXl|0PQ)fS+IWqx+iF!ge(|;IfQ}6H^UOL!&>M*F=wxjWtps1e_(OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00EduL_t(|oXyp-PQx%11<+cu)U|Odp^Uk% z*j*!Luqyrl#Lf?N>A=P>bU>q{it?fgC6F2XS3f@I2m+BkH22XcE970D6?!257CPz`1D?&FoIsub+Hj98J0`k&IWF__t5Ksls6u2e>h+i2J zLS-emloA}sb_fclH5{rO3}3ReL**?QAPWFh?2srxJ(;qa0pkt_a!!bmbq+|&l+uhD tIgmm~l%N^D$eRIF6vUKz`QPtfT|W^tqL8^*nw$Ut002ovPDHLkV1go$;En(Q diff --git a/graphics/pokemon/bidoof/anim_frontf.png b/graphics/pokemon/bidoof/anim_frontf.png index 9585a6015c3b703883e8ed77a6a9ea81c569483a..a62f24b7d2473b079e0d4f535456498c7b3b5790 100644 GIT binary patch delta 710 zcmV;%0y+KE28{-g7zqdi0001tU!Pc!dp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0007fNklTaf-`qAI|bW&kVy z-U4|4U=ie9Cm}8{W-z{L)EA)e8%=*8_A2z(>t!mi89;0cfb$plDlT*pA*Vx2K#Y>{ zN)e(|P z*W0 z69G3%oY`H0rqKRDRah)8QV~$8$o_%zH7=SJ=CRlm-9OkQ1{z8bm+UfGo=K2@ti`iu sxP=EJUQ1E?EJxSNo})WDI{qd80Itj%s+Wh2GjOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00MYPL_t(|ob8seZrd;rhABYWO*tNncBm*Q zo#l(;wTRu_rb8DViz3P#1hx7C1=_6{jDTa;zD0*@et-^rnBGZo9Pua*?b1R2A|Utc z?kBC_J0UuC`d3MLydI>`J62En0LhVh3@Jd~K151v0R6Thf8h*Zl)?yL?5|H@FK(E< z5d!P8X^SC*Tm%4Tkhd7{#U93+Qb53i%v}Ti`D8YuDj9Oa^T8RWA1q-+2HrqKkKsm( z>X9=82D~mmP^tE@i;BzhvfNB=Vcho{UKb^5b6tl7<%YPJd?mxDdw{qyIKO8I6GMiN z?=S=Ynj@9De-Y2i8*A^&O&!x?fSaL3-O?@N1lJ%m4DFBa*4|YggJOmt&8>YwJ^C=f zdg2-)7~|VCV+o1!8Pc(>r9o+>V&z_xR%>f<#1N}m6`EaC5KFW8Y0O*fuZt_i43SD+ z?shvFWBvpi@P7=gvfb|os_TIX*fro~Uu0i?ea3hhf8|?mnE_iEgRPCm?$LV9KdDQl zdNCc5#+%6V&DlE<$dKpX%hYXs)AtT)>z&SRojP^;k3?KNJh;LdL!pO8wTO#{hetIR z>CwjZCoc8^?{aY9BCZfV$AOE|2fYRt`#$nM=OXSGlC@}ZF=w~oa4}_vb-4)eik;y( z7jtHCf4B%sHlo2roZ=#AT7X7tz43vcW~ZKQy_h_UVVQ?wZH)u<>i=E}1_kk)oCR%ply&;CFi%=Vkm zr&o66+aD^&d`^hpZjEn$*qiKjZiH`tcoY)6ABuB~;G!dVr@z-9MXKp?ZCSVs00000 LNkvXXu0mjfBnx2c diff --git a/graphics/pokemon/bidoof/backf.png b/graphics/pokemon/bidoof/backf.png index 5f6bc7e8bc22d9ec4ea62fb4854f23dc90db43c8..a76560fe473c67e036868c20719a5b93a3de6802 100644 GIT binary patch delta 414 zcmV;P0b%~S1m^>g7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z00042Nkl+QFASCyqp(kfmAwFEiKTzDxuNGLau)X zoLqn*5`3m==1}C(Kxda;za{@2UwxMa2-*C#X&iD<^+_wVo)3k}PuK9`bBJ}2Dxw@6 z5PQdY6sRr5ZCpl8M`x-vh#hndxcb1mRzV$4vGq7R1!=P_1<91+EN~4#bP8B%NiC^0 zaFt_on*#wG8o$miOe?woM68Vf*b9G6u*MFprHUg5SKV2#3ZAisOrOl%jd6VIXtJZw2Hh7M;N^Y7r>p1N<=} zi5>&>9byAYSBZN8T0ZQw@&kqbPlNUNwu=b?U%!Kcga5)CmsJjm)dAh_000UA07*qo IM6N<$g6TK7+5i9m delta 497 zcmV1G)r|7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00CY}L_t(|ob8i4Zo@DPhULL~B*WcFK?kUa z+#^=N19Zv#k5KCEhuW?kLLdP`ex!c>Qj~hfJCxG5Kk5X(c1=Y7G3ffN$;lF~7hoa3 zs!40DltDyyuFn<`cp(D5g&`1=Pm;iO2uzX;Xr(Si`CK&^e`dxWmn|li?vB72m_s~X z7AXK9%gjk$B+O`lYzL9>-V@{r2aWR*XA5Ahtr`wnZgF{+Ck#X~8?hc?Vczy@*1OYm zFQ+aZLI-&H%)qk(TQs=?fwEV#A(u0_0c7b`t|BWNJ2t=QpvxUggF9S-+lb~5rMBA nAjh;Pxs3of_~*Uj-^VwICVL&|Hp2h_0000 diff --git a/graphics/pokemon/breloom/back.png b/graphics/pokemon/breloom/back.png index e8a71c9139e039411b464de33de11a78a73b752f..9616b079568c0069d0816b70faff015f73a06761 100644 GIT binary patch delta 633 zcmV-<0*3vo2Ehf87zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0006oNklAo_vL!~l)&E88u=VbS%6ZN-0C z03P)}YD$;@G!7*FEC7#LOUt7YuB*@hR@Ea!z(f^WKs441;C=+}0Y;eA4*~1?7~l{! z2!5g`dO@Hzf%ne<#@V(@7tR0}-T^R#@CFd|ZvdhX;j)e+K+-=2faxCsFzShB^gV(t zA29;}A7U^9WbY{+v;(;uTG%0Q2h)F9@Uk$tbb@69qN(FgB~S+-D>K8%(OquU>PA2# z2fz+o-lQ8h`CzltFoF!=J@y2EE&)LFegLo>wghzP_y#d@y?YR4eQ0)3s+QhkoaPcL z1d$JgHFZz|~q4eZ(?P6lW(KagmklLFA{HPrLfD3=iE*#_> z5mU=Zq<`!-fr(?UIxfVNRs`CL#!orX*XXr54urU|JQn&5Vc&I%u{S+E6UszNqOj)x zwd?y%JH=&qN`MMc|7rjdKVbpr?CSK@$97)Pi7^9AE&!CLGE{)kjEXF9I{8fQ`++lz>49;K22aqu?vsQUC_S z*42Rh$Fi;mK+grVwrcbaBVj3$*mdCqAor!J4ET{1y8JxyvUD T^77P%00000NkvXXu0mjf2!$#w delta 739 zcmV<90v!Fp1*-;-7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00K`*L_t(|oXwQIZrd;r$E`)EH`4+XbhHFy zmk6+Hx4uAxtajMasXYdkULk0g0s(?r-VKY{gCu;p-s$u~N3z_h=nVv<`|<97;%Dr+QQx}PU+%cK`i=!X&eWfe=MB!1qj314>suwz%A>F za40?JpR&7tpz@1NaxMFSn=1CVBuUafVA=xLeSll}1^87ayHzy6CP~$Wj5-+_Aj{Il zh3uZB{9Ax8vuu&}6k!9|ARv}mD#fo;8j(g zFbG7eGl0@Xf3D~6f%YVQ*sqQN#%uun#mF8#7KEzFAyf{4wVh3zI0(wSgB##5_+tn# zw|381e5vSi>0ub#72vcAu`>@=|KuHDZB7FcfXJ8^3xEukND1Q}G4@e3uhJNc&`mpm z?g*-6Uf>h4{ek|r45&SVDnodgeE9ruZ!}r4Z2)|he?nMLMQ&<9KW!<9;;54g&<0002ovPDHLkV1kcYJO=;( diff --git a/graphics/pokemon/budew/back.png b/graphics/pokemon/budew/back.png index 4c8478e2a8ffd18c4080c86107da1069bcf65bd2..33a92ba75c2ecc5578e9a233923fb5030300f61c 100644 GIT binary patch delta 411 zcmV;M0c8Hf1mpvd7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0003~Nkl6MTBBU26=0zCX1TwIh!DE2gZUI~%16zC)a7urH z3v5UN905)XSmGoJ!I#0wSSjB4k2e zU`o5dc!4OC{7``@?;_@TFSqh?lYn{F<@ZNm(_M5}R0O|7C10*HEla-u3B>;Pcp+Hm zJx)*pkdQ+33rH){@f<{;?sG`_N|1k(ke3pj6_5|UE>VQJL)cI4RD^+7C-6~t*|w1H z;9Efh>;%;V>wP!yc6?}7XaQ@h!Zoml&;)Ri_aWTd!#9An4P5NOufZ#B!g;W^cW_z3 zcC3FTbpM6_B=mnGj_*o+0GdyXwWk(#@Za8Np7|T|1NOcP265yp0000007(Z$PDHLk FV1k)T!e;;g delta 507 zcmVOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00C%8L_t(|obA&wPlPZO2XGAi06u7AOkA#E zbdbQ}c16fJur&I1C%=G+=f^N{baXO|PR8xR$cM6p+$qr4i-VKCwZHt|pN0m(-y3!4 zKWEXxE0~gUvGjmQMN%g8`GG7_KrC;Gb7sFGMZ^^$Dq9iEW$X2gGXOR4tOS90bms!f z00lfZLa$wye^DVq{~3V7)qm)Q)M zYZPA*ZqN%DcAP)Dz_)pxm6(FpJ)n7?f_!v-{P8vg;ZMQK45$%ko}3r48{W+CdekzW x2aI<(Ur)Xdgyrs>csFRY7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0005ZNklvriZvdJAAX4cdJ|uR*ZZ*loZ^L*Mr;V9{_h8DO^o#Wpun0CzHwmGZjqp$2dEcQe%B#+VF{+5oU`v3(Z+&GtROtICE9J6%L*gkM;2 z&Rtme4IrfnQ7pt5Q7+dG(u_csh2scF7cOEfyNJ&DGXhzCgrVXJ0LD7ci0-#|O!^Rx zumI4693$MNo=wH21#5dk)=vP$6#;*2Ayh!n0wBI)xUxWmVnH>)fP?`r0mXu9AVhro z6t4hG;QOc=$W5S{x9tFM6)@{*44wcIE02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00HnxL_t(|obA-HZlgdD08kK$qSG}-hW{{G zp+uL;%F?@FM3JAcCbz>5O+Iol0@{^cagt$J9m)&<+E6gCIZ zg!8@804{VuB1N`e=>Q8=ZN(phw6V!klZBXy1m_>RL*#JuBOL2I^9C?@2~-f zOYiQ6mWTiUZxc}WVw0ac`-#f3YPK^4Yi&c7f^H}C_;jq8_V342<6=e*e?_I5t6dh1 zaZJY;u#y~cMSA(WJkYY)9^mSxl*x1kgCy{lc zqJ2GMlDE6d|E27ojsj(8d%8G=RLn_EkVr5nW|I2<&Nt-W%-tGV7Vqb{h8k>NEbiK{ zdGX@K;*qC&<_XKnnqOqK3M^gl;-L+rn4?g|#lmMST?b~$9X39}#8Z6k#C%7yDT!{KbLh*2~7ag>25^; diff --git a/graphics/pokemon/castform/snowy/icon.png b/graphics/pokemon/castform/snowy/icon.png index 6ab5a1549150e1309d4ac2235e4dc175b7c34920..e8651ef4172f5295f0bfa2f858c6da06490c6f7c 100644 GIT binary patch delta 246 zcmeBXKFBmdf|G-pfq}s%pmol~YWsSDk|4j}|7hT>;-)D;H5)u#978-h-%dHmb=ZK% zIlHXWvG3pi{Pf+6Wv`q(#@D>@Ma13}hdA$T`!9TQC-04x1-o~v?VI79rNXfJUC}Zn ziTj#*ZYLT}h^3{5&q`yyogGuVaT&kM7QTjgT0%a%vzRY1X(V|CFdp@t;F!v(uHfUa zj-jzopr0O0j?1^@s6 delta 320 zcmV-G0l)si0*eEX7-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L006H^L_t(|ob8e^3d1lAMSTO~0~DR1$L#2> zf{y~xUQ9}_dg8t^o6 zm6}Y7Z=Qjrj00jVJ%^b4?nNF928 z143@=L}@x^^iGSVcdrUqcYQEa5hDU_{b^}4mqo_x0~5F4clE!Z4_wgB!8`${&coAk Sy3Ex80000;-)D;HOoC+978-h-%j!6V^!p6 zX6M{7``-U;>n)zGUBzxN>BO@64fZcT-w|MZ6Z&PJ;)TuCC2Lk4;B+x~sl{O0wMMD) zR(z2v>x0#{ogxP=wAl%`rtqwtHizkF+T5gVK@Ki$(wprvzD9N!_|48bQ79PSJ%#rl z$Bz1+av!R6H*Y;>U>q;_;hC{X&^bW_SNP$^>=$GKe9Tb$>+>GlW()} ggrXVDyieGF&g7F@e&Xp$pqm*yUHx3vIVCg!0HG9dq5uE@ delta 311 zcmdnN)WkeNBAJDmfq|iOLB?Dl#a`m+>&pIwgI$P;bz?+gJWxoy#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8mY1;3DH-c3dVe|9)+Z({pJ1gd-2utOC@G4 zkUe=^qFS}4=F3HcZMUz@?pV;!`zEP)DcjP`j@t|t{>)6|o4BR)Q$2gR706?ru6{1- HoD!M=H^1%U;S7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0005-Nklym>Y429KHgB14tA9oWjk&A`2`)g;KPIbo4`8WxYbXmUfjbR+e z@umWx2JHJIBUCWh8UkDhC}6JvD{jy{0%H)gmf0PttSY9TzGSWp3oKnT1jq9Y5V93aV8PGs9QhcOnA zg~t|B4VXZ8w3M+sDX1t}1`|NE5WWla5f3S z&H*`rXrm!a0Tsd4u>u3SRxbl%4dZ{sc7ZbkIR_^6a<(urAUV7u08I3f!)mKdxa947 z_R<1p+_-=c6a5l9S&}YGN$P#7=Y1mkcli_G`A`5t?zbf*z@Y%}R@=K0ssWK;`$qEc ze5wG6&>=h+uhI*lx1cj11n;{lXaRxXjj0K=$QIH&gyXr`6Ab($2fRM6lfhaOej-6~K$-{cEkZ=VRYu^Eq6Z`dcW==~ zS+Cqsu3hNH{ARi}?gI{|TZPDLr}Kfzz!OX6oLW!EIbcRO8c~zsASvYaxebJ26-RRd zU@Bdn?Et!iSqvaVdH>H(Y2YP_zXCqemxK=iLikkwjsFzCtaBjpKP?Gt00000NkvXX Hu0mjf>EZzt delta 660 zcmV;F0&D$&1>6OY7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00IC>L_t(|ob8jbYTQ5&h6P)w-ndv$>Ab)> z!yzH^7!GOOB(>Hm1{-&VpcJZ77?noF!J_LznpDBXafb@SHO7$s9wW2T>Wt17P5wD8?P%v41qaNLZ4`_Xf4p`B0!vN|O(Hh4+_0LxUpd`LI zT_K{dz(5^mkXqt(*Edc1o;2YDN=YT9G~K#skO72JWFTc?%)03*t=RYgb)Xi;)`mo3 z0>E}48v?qne+>aL&^E(Z_cO6L24bzPg_)|z+v9VfeM+hKx;e>9AE575vIpAKn`VRr zBzVxl2W-m3pz{C#Pp6bagZnWj%zXnIUvhoO2;V~h&Ek*|euRK9244iC+?f4AZGSQV zS?q~z9qNO{RLfwO&SLpIh2Q|Pc&bNz!9=hY`BODofB2Ic>-VF`MxbO3L{&d#RXyl& z!2(siC7`82UU5K_Rn_gTwg%e&b)Chos)i6{-`}w*VOQM_DWOkUfQUL9wgI*Uw^xAW z^TPfas)*tT1{mg%(!J<^;mwLkYA4#B0Nt&=-{j13fi-{#QhQw7z(@e3aDuKicibY) u0g<27CJ3OdR{{PmxD2lW;^hwia{U3@)Evl$gw_850000`+Oz`m3brC-7wJ9)d?gEjN+rKU=8!i7G zI=%Dd-L=;5^q(Hvyn+3MoWg#!`!6@jDDcnam;b6Ge%gAIRTR)C44$rjF6*2UngC49 Bbb9~* delta 330 zcmV-Q0k!_l0+j=h7-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L006m3L_t(|ob6IE4#F@D%n$rrv(T)b+V3D) z&>0bl7gQNKbfKkNB2j9ngc6sT0U>Vl**=}EGv>Y5zCp# zYNGW-qk$v?y~k1@rY*2D4wpb>8krA6>mz01$lUvS(Rty{TwLF3%AynRn9td3u+5&G z@(#9f?ikbrigSY7qzR!DDG;-JKA_WAwPVN31L2ME9atwNn;$yoZfL*7ApnfhR8vK7R z38@ue^hy*ApOk?|(-S~`a#9J4N)ns_OQ90jT=?QGA*5VB#JSYFvxI;Pe89S{3*S2f z%KCghSGog_hIbHX4uGbQJBQ5E;U0g*3hqJKJN# z(-){eCF}7l=Z6fS3V^L({|v5NZd`um?n7;GY$!yWks@+NI?!RB5zSsUBkx4aBG4y_ zuw~TOY3fmDfELu=WQm}6wR>puzyqjl^kWF%cgZoe03LgdKtq6xH4pZ&5Oja?xOsK% zr@D-?a~sq`a<2A0U|qcdO|%O_SfBj?nRmj|7jW@QfO8;T0(`$$UIYB|&=Pn@bWI~< zL|IhGyTR!$rR3JJ)KZGezm;vf1WF`_ev(dM}cU1Ux`1gdj@a>@Qcku0@@3-*n;l2Ui z1HPvpg72(I&b|WcrMQTo3rhM!yDsC0Bvh9lrMlJGstR z_->JAa;>DX!}lS>7#y`6@ZF~ieBbfk4jAzLGw@B!R&K$!6Fjd8NLxa}37&gGg>Q}W z!E>zuPQ|$S{cQ4XL&pEDqtlb0@x9}}9%ugzd(S5i4gC-L0&=M(*~=eIx&QzG07*qo IM6N<$f}NgqxBvhE delta 852 zcmV-a1FQU<2AcOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00O^BL_t(|ob8ssZ__{&fPEf1WXkorAThWX zE6}t8C0DxVhhSnt-Kz?@$!eh(Gl0|~9BWi5y-pPyMautyRQ>~4x*%m>Weo4m5sB>g zOc_8z%2Ohp@;<+J&rb54=dI%}1q*%yh%$gx9l(L%)m)A{f1p`qD&Ptjl`mAY1XE3T zsTSmmfU-4(;!3C%Qvl_{S4~%<3qT->1pt5&Y^&GZ@1g~4k0uj`&y-Satbi*a9vwm+ zcBv$G6KYM>=A3USw1F)l4qj@V#x>PJ8rTqnbN$wsxYxr0c92fAF=i5yz=e5dE{q9# z9UOS_@q;n&e;!l7V0Z7@?Cz8Rjn7{{HFhSa1mF$Eu{7gUlfWJ0;{24D!rL$dV_(#m z9yentQ@9VEPX7Cr<<-EohQtxXW9U*!6T-RZSxDJa^k?4=KKDJ|weIWXyeb0T81i;7bX&(gCpE zL#N1qgm_Xm?xm2oz%>OVHah(7mr~$G_>=(rWC2i*`xk)z@KyjSpY36o#AM!+!(%B= zVqyng|uEFng)C;cc8B53V~}x?9r=aDM=kLD$}yFg=dckH&pGcz^pt^ eokG{~@8Tz)TRn9cLIiaH0000Z)n0e6BFpmud_MS-rg2#=t34SiM!U<5x4h7d+k z4+6>e%~lcA8C1bj;u45Z1!w&Cf}jaZFQ6kqSp<*x?qz42BOt*dPG>k2q_WVE1pZ8b zw;~A`tsxJoHG?V`BluVhrdS9>1gd|B71&L_mtYh;5$HbshL$Sec48A}u7 zff7OR!wC7ocK{$r5xmm`g=a4Wz|isF_s(qvVT5R)H6I1?gLm*Ynbpg9mE#pb3M?T_OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00GiTL_t(|oZXeXYQr!Xg&j=s+IA@!D-R`` zL51Qu3SI+^34MzcD+s-YO%VUvR`;9Zq-(1ov2;G4|45OPqWIelH+OWhT_j43o01T+ zUC>w02-Q>qq_KRauaRtZ01hN2)}R3N?rN0s2^ZLBUV#B>e+N9shi;Gq*cli=Sva8M zqZ-jf2@a@j2rPBb0D6+$$^&l}I1ui~BoR8Qh6Xx0WG&F625d(z#m)nE@U?%| z#5vV716756#=02tYqrEK#0GME-jG3XRWaz93>UTfBWk^#${_T*Ahc-~bp7k8lT+W& z&GA(hWu`N`XyzW1Ko+0z3uE9fnLB?=|EB!_fVMXy(FDQA00000NkvXXu0mjf_2ByD diff --git a/graphics/pokemon/cinderace/back.png b/graphics/pokemon/cinderace/back.png index 701208e6729dd25a6ce2ade047ebe744f8a2ff7d..6af38da2b409fe38bd8c115a964c3cc5a5508755 100644 GIT binary patch delta 577 zcmV-H0>1tE1&IZa7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0005_NkllWHl&bV*MFNg0H9w1 zNJL%)U=$2-3_24+IL?D3#(NV2ou$D6wcmX|f)L?^(0MDsXB5JFA<{iS0XjhmdP{#o zduM@x??P}3cO%e&V4ba40fazkg_kPIx@k8PKKGLXou)uG<5~E4gl5@*CIFqLU~@iA z;Sew)3(Y)w1a61`?i8BQ^gAQHaP%-e@zMZV0CUIXud8-$qFMoSc$HQ{KN|x8VI5zD z4ruOBhYvIbz;-~}Psfl#Ed0mw@d`OyCIQ zBHrRzm@Pt1B41j^`n4uKGHM8{y!TL_=U+#QOnNk(@#r1+8?%4e;dXLR(}V-x~V1?cSG%O7iBIV2i*%U?q6 P00000NkvXXu0mjfMjHiq delta 689 zcmV;i0#5yj1^ES#7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00JFJL_t(|oXwT7j+`(QMS&*ON@Jjjw2{Wd zV*?5xVzZxky zy$@ufjUmL`m;fXQu$`3SxPmAc}%0w4izDhr?o<-&CU33iK*qlBN>lT{xo7tl!vU-zNf0L3~b5LA>-y@i%K z)s(;}+1kThuk1FiA)iP?{2buvwf9`;{D>Z^fZ~ z)4&q~c@RkG69BdUmUoF-z9A5+*9idNl1J)E{c@11Q`JkPp48V#s)IVjfq9a0lG8hY zq@Sdm)k7@gJPI+%tD2$!tkFh5K_47^_F)kZOwb?P5}Jq1d!)ZB&v)Bm@pugo7(sZI6xR6TZr z=RH!44F*h~0Z?^x7*GPH#|m1`&D1_Q4sOECxv74fs6gb2qQ)R=YxNm;SnzEGimV3O zTA$D-MYtS*z=%SuPXJWwTfneTE9QS)ncaD0CxjbIe~LVO`!PFS;v=+44^4=p5kK+dwn7{AiNtYy^Ad1LaHKhLW!zqA2#*_HU+xPIF z0Zzg}Id=gL2kSlKN5Dl3rIf=f1&aM83q=#rAAnNMJs^qU_?Bb6vd;iW$3@Tn_aD$J o{G9ODwHWCUaQBt@ll}GMKPtKy9ENbve*gdg07*qoM6N<$g06c$zyJUM delta 769 zcmV+c1OEKh1;_@F7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00L}DL_t(|oQ0InYZ^fm$7h#vm&)3*hg^d9(u;fOC4tcA4|2#QdTlGD{ueQU<}gAcJ!%huKncXZ zp|hsdVCN<8u)@5L-}h$beTT7?&|*>fjjt{*BE}t4QaLgYe^8crP5~N#6wo+O0MA2- zu|%E%G^jy2qP?g=lmPNo#|(JA3MNsZUUeGCy=@Zkwi~!3E08_b8i+gjYPeNp*zdZC zydG{<8OhYky(8pOAQn>#B!U6r0GtG5)j%P5k1Zcu$g0mlFC6(T?;B8g7Ju#geV>C9 zw}?$7JkM`Ge|7XZPR82%0%a=nJigzk#e!2rR{*#DwyPp>&GC%Ne z70`oVck!=G(CvO$B`j;Hs;7gGiZ<`+E$Khj6D!J=)(c>e00000NkvXXu0mjfw47H` diff --git a/graphics/pokemon/corsola/galarian/front.png b/graphics/pokemon/corsola/galarian/front.png index e9b4a7ded55f4b98d796ba362e5091133775c112..19d22f3b89ed6dbefa7dae171dc7245e9d9d6d1a 100644 GIT binary patch delta 509 zcmV(4m?<(&v(j6n5h`+%dw zAFIF9!jcz$126*i)@jLX0Ny1@sQ`NM3*e>|nU8?z^5=Y4!0o9K12`_j8a&>2qyk`bveR#+3S>sq z@LuBvAYobMJG>*I)pSj+ALb*%=>c52^hfmtZWI{iFaa1d00000NkvXXu0mjfiRa~! delta 611 zcmV-p0-XKE1gr&+7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00GcRL_t(|ob8dlPQx%1g>7Z&R5c+L6GKcM zpe3!KW2ouY0a3G4L3Tu?@UM=kL}#!>AAv_;Vq!#8N;{a9iFe>Sp$OTg9S}^MAyITb zpL=|R(7*m%_5vT1(vJb}>z84mGmF6Rc0AR__U8;~8UW%Df3GADgIO{ZvK&H)=Qi^; zdH_N}6#)7HkX6GqAi}3I89UztVI}K8NMHbibPJ2SC=Q?1*i+j#Dub zHJ>iY^B@BNJ6fYO3^KsfvA$ih+_rey%zdn_vfc^p6(Pp0ZdTFpY-Nna82Cc8qHYG* zT8}D|31S>Yf6{VDr~)qAZOe!#>Po;@{o+$O5}8_im)Q10wd9*PZ0EpuId1UbE zFTMd%$%G>1BNKpK@%kcv#LARkr~F(CDDT7Zi*ab0A^;`*1;D?4P4Cg6(r5sOL>d49002ovPDHLkV1jXe1w{Y= diff --git a/graphics/pokemon/cranidos/back.png b/graphics/pokemon/cranidos/back.png index 54947660c0ce521ffb068b928aa62dc2b6183604..39aacf0bad4e2bf263285a7f16daa87b332d7224 100644 GIT binary patch delta 659 zcmV;E0&M-j2HORY7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0006?Nkl_IAvb^M? z|K}EVMxf{rV`_xmkX`O1O>_f;zHN);{v#mrPcw2*=p00RrStRGll0Ih!{kO>#o zm%hM&z-m5x(Z9%1AJUHu7_u%eW2sXw9u8RNG9;ZGywE#mHAvhx4V(uAixIqQr{A|7 z=2JQx__haB!Z>q;=Cr9hz>I+L#|qQ*X?{!y*e?#}(`A5wPQ)Xu5YExJKo}6Dv4;fc zuHP{r=$uLO_EX$dFy0c5n0J4NGXbGogmR;<>yRIfvitNDEGva{@l8L~X9v=;B?Fni z^$Kk|oQ|=D0%-LU0=08>Uzk`B15o!lP!Acv0}OT0U80Zt%CIn t*7pl>pl<{Q)K#tk`uA`3HTsL+jQ^8mHSNyoZ&LsO002ovPDHLkV1hTvH5dQ@ delta 761 zcmVOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00Lx5L_t(|oYj;uYuiu|$2C~cRfIsjsu)^I z7G)}Q$ngBKXpqyspqe*yke|LlTMb#-A>afp#Tb&0(Bi2>J81O-VeTumLqAFHo~%@Q zPsyGGd%2(g_kZWR^SnnKO1*z5&G<$2lRc1EMfKxlk=>uqe~YTBisEEAKjH{nRKJSi z!(jfBE2RpIPx&C=mk4AW^N86s0{oP~RTgg*MQ%OBj{@%rAP~bI_-FxFVNfE#fPf53 zS%5c-!X*Ia37|4X(g)I2GyxC@0M7`@Ex;ciPe30?0*nvG<(Jz-&|_4A#z(%eO#~9s zAVi6nR1~*?e-wdPKt_xY<^Vn#{0}g20B=sf>KWM-_;n9(@CtJ}L>-_V%f8;*nx(8f3K*t0~sGUajOvu`; zK#OxHKkx=4(WGlp$^i$SCwSbxKnw{8T)cgw1`K*5L8~2WA=2fL{PZoR8H@YoN9}S< z#VKtpS?H;sD|TYIQ*#r@g6;t*n=uS?RQ3|03&{55U=Zs_NOLUmqAkF1EqCh<-~(5k zXxem}e{_MZ1!#b8>n=cRyic1xBCzX9%we0gA`3=9*>`~>LieZvggK&feTxkP`lc zRRC@nz`x!g=qUm~$_;^ky93ZuWH08t2i!3r04#rEfDuUcZX@9OuYuH)NH^EL^1y$; z6S#$62(rf=!Nx5BxEBZj+5te#x)%o|)F7l4K)m-(Y)sI~K(9<}Dh$*w{m?mpRsaqWEeP{XwNSl8 z(Ob^R(J27PFF8iFO(HwyF;x=~%>aKdfkn^8@%bw!0Gz+BF_ACiQ~{{Y?P6&NHQ3)_ zat~HZw0Ya&3&J*$I{891y8z@=$`Rn8o~#G?ShNI`QY1f6a;bWZ8ME(5eib%Amd6af z7*n(ZvZcWFEkLFpg~z5Z^IU=;He|?6=36~UUbDwR0J)U+EK49o!a#YEgady7tLC%x z1fb0CKhZNqLXnzAasy!19T?s*g2V#`{1g4(TaCymGy$MmT-#(|Ho*KIMy9;S;$zHb zTFqC@`WaxD$AMkg1H5ikepFLflfa*O)F7A(VSqL!H{^EgSAqsfVpnF*g!ijjVZPJx z=}VNgj*9EEX|ztSj1Rr~XoP=K9oY2Mxw?*jw?XyP$}eVf)4*9Nty%x2M>0de68DC;&C;7>{^)OJfUI zSN!sbm$hI3*B_73%Y`ezWz~Hn!2X|7AK{t(4dLV-xdYG=dKQ2n&~tzL6(E=RZ-B>y zX&CH(Kz`=K#Itl7{4OR`T(^GW+fwAy#9!yB3&9GOkt|iq8hZ%C$82Ez9Bb?$44;pR z_;`PM2$)&#k7E~r346fQp?~qUTmj)gUnYk!5TWn#KnT+)s~+DM0y9AwUPR9TuYnf> mMA}=-i()Xq59|Bc{{a;F-W@xw;nD5@0000OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00QnwL_t(|oQ0IlZrVT;g~##|Rbqypy)T9} z@xZbR8?)?!;OU-7VVmdZkCaE~BQ$%`<^kd;m6}}}XP z4w8U`-v=NlJU9a0xZ{ADrX5XTg!TX^x@rpd5sn$r5S(0BmE-VEv>&z9@p0zd3f%ZZJ{_)O!oArbPShk?-!>6Ec zjvWyye>pb}>nM&L7sweB5QwsMzcAQN_Hx3{&Gf8e_i6y}?KX3zP=Sccy~`!z(C&(j zxjczFcD{CRxI8fecHqp&;~~Y~cLx7GT)r&(pl?f40D=t2%J168UM0*#3mW%XMYtB& zt6w4D!KqQbZY0Q`9s!I*_b4#H1*%NZdc@U7f5?C&`46DRqw3XH3w#rjBRM|3{J^D7 zUN5Qy^xgNdN*t^nAVG`+|ABCP_hZ-1sJQ|$;)Tioa?R#j_O!_Jzn+MdV3 a7WRLptN9|#%mbqU0000~ diff --git a/graphics/pokemon/darmanitan/zen_mode/icon.png b/graphics/pokemon/darmanitan/zen_mode/icon.png index f9e8674785abe52d7588315cc2598e5e5c709762..b563d4f2ad130b8e70444e4333d01f3275c11c70 100644 GIT binary patch delta 248 zcmbQoe3)s11SbbG0|SFkKK3WkWTC0HbgsOMZTH5Cw2nzJl0v7JpYU`tcIt1Q z*B9dea|MBI ziwancj_aNlt5Lky#&M;u?0WUP=qvs!WE1Zx&g-|{BK7{wotsQQ`y6)3A7k42*Fe>_LL^2CA0|P_nf{eL9ioL|s*OmPVBO`}_^!&HNZa^XN64!{5;QX|b^2DN4 z26rEq06%wyveY64V?C3?)+G;tN;pai{M>;u#y~cMSA(WJkYY)9^mSxl*x1kgCy{lc zqJ2GMlDE6d|E27ojsj&FOM?7@862M7NCR@Vdb&7)+R0+0EEfJANC4TcPQ1voCu(#>?w?(FT zqBd=p^-Od>TFmHO=`dGU;>U#ZE1KD3d3W+GN#$;7xGA#Xd81q~W0O-gTe~DWM4fA`pQw diff --git a/graphics/pokemon/deerling/autumn/icon.png b/graphics/pokemon/deerling/autumn/icon.png index 7c14c05cb299a9dd6822788dc768658c2e244a00..4181194e1da1ea9c926c5e0cc99066168de2f24a 100644 GIT binary patch delta 305 zcmeyw{F`Zl1SbbG0|SFkKG|IEHw1zMXQB>yQDD z>-A-x_a^=SADzFu^QxM#W5B@;?HlK8+nzWl_xJVer{{mYdcHuLWBvgKgLL^ACJyP% z8Q$k79Lu?NW3ob@8N)M`j_#RK=RWE(hD=?de)qmOll;okL;dyI_TM^BtenKPEb$^| zF2mOETZ6S5ZC7=E2`uzraE$-{s3NLwtAxwZ$qb9bSB7ko(CF|CnV^1q(SvP!pGyX; zy)a{|YD408#uWS3<=N@a;^o)f|Lo4;^RHvmy`RdbtbQwt9C_2f!T!(1Hv3%;Vo9Hl z>rF6y@~~gH@yx%9c88=#YO)jV@P{|nOqbWI))$bC|G0h^(BBN6u6{1-oD!M<-GP?+ delta 424 zcmV;Z0ayO}0`dcp7-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L0096f zfDY7Y3wUps#?kYn9n zX2EtAmCOkPIy|06lC@STn8o3JXOy&|hCi%*Va#FkH(`hlgD}SPqZj7i{P+eqLxnF* Szd^bH0000J}IEHw1zMXQBtJ#3Z zRad)FP4(yh{daRqb!K-a8{A-HlRr{@>zGD*!svYLv7P-O9Y*H8Z0x9tkTjvw^5a`!y~0+*S+@~HhZ=>*5CMc>io`*8%w!EeVi8y z-(vZ7A~T?xsk&rsX-}6k6Gu^0_v1{-Ye@pK;Y?@Nc)wg^7{Ibo;J<(+$g9 zpRF-v6xr>s@LN+S_Vvuo`(pk-?-wZe*HKmb!TrkW@9r8L@B0nP|4A_26g(%t+TojT w-aiY0j_=3SS%m!m=uMEh!*AaBXPW%F>8`?RAt&EC0=>=P>FVdQ&MBb@0AAyZivR!s delta 433 zcmV;i0Z#t<0{a7y7-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00AFKL_t(|oYj)CYQr!PhV=&b02%Teg^VGP z4An!_9K;3teUhO|ClPGA7=j93IyI)xkU;Q|p;k#SBnGRt6Qq-;4jtOt^hx|W=|0B( za;e@L!X5-vs)H63ap?dr5|bwya#}?5n1KbCDDq=gnq0WgfAg8503VY;0frXbNo;^Q zQOV=RQ?*I83Gw>3xbPA2h0x7bH}l%$QKR}hg>Kk;^{N+ z;+vh<43t>3LzfxwuuMW`g#nq463%L)6fD!xTVoVAp;~^7U19Wo@-tzG4xKRC@uL;y b*ZlYf`QDzXE_dPE00000NkvXXu0mjf{^YRa diff --git a/graphics/pokemon/deerling/winter/icon.png b/graphics/pokemon/deerling/winter/icon.png index a7259c67e0c4a94168748f4aac414febcf3cc039..6528ea9711756c567f28352f32ca89afbb17a238 100644 GIT binary patch delta 303 zcmey){F7;d1SbbG0|SFkKD{IEHw1zMXQB>yQDD z>vgtS&s2Z@-~V;nY>8YWK^9S-YKhaC)zZgqZmZuL_HE7iGCrwh19rBCSvQ^tE$Hkr zdG}IsZMR1GMwO0*ybdayNxoA>pWm3qaK^`E(!2NEjr~{H6YGypmH+LM64EKXY~e-D zTBg!3l>yp~wyU<8xv45Lvee%5ev~PBElEJspXp58(jd>|1qy0`j`MQ5n{M~bOLe&F zRD5j~L)TsP34cYVt^0arzg^7!=luc&|2j6^`>A~D)n7rbL%)^ZSl9D3>a=`5t~bH- w$-{o(#)|qq&I*Qw!XEFW+gCg6JIybC>Wsi|f5z%hKwmR>y85}Sb4q9e0KUPF@c;k- delta 429 zcmV;e0aE_?0`~)u7-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00A3GL_t(|oYj)CPQx$|hW!RN@Bm1ugv0_O z9>SKlY3WiAm2%CJ44pbv>VV`Wc{NxXb!iNi8oI?=gd# zfYx+?ewy*NhuHB)|I>mo=x6A`CI>Ru9%N^O9+)3qSDs@pvf6k+9xADbh^J$gl)rZV zWFW`7zs!Q=KRU{p69#x3MuN3gDOkthU1yZAp@u(9ePPUgc9}3lhd~(Q`Oyn=H9x)q XcPWe|#$w+p00000NkvXXu0mjfyknG``7t38aF#1RWpzbPYXyz3_ix z*zyM4aamj500n|09{ZL0)21lZ3rgmRUkub6rBXO1#%9;ljNKN5y&qi zu=uveH>*EH&IK?96nDTAWbn>gk79p}y8&`9Ci^y<2(Tj1-v@bt7ocTcu3msl1UEoN z;0K6n2m*u=puN#21TpW|5b-65pz`IqyDI>x`{Pq))j&pmy8N$p1n6H>Spl)~L3dX0 zDgncA6FB&BhhLH$f{!M!ho1rr!7Tzad3Ym?-On26Dj2vOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00CS{L_t(|oYj=EQiDJch67I^@rF8?x$p+2 z$6T;AGlI4t{JoAdynuy|?ST?*+2yWP3Y!08_uJ)Qv-#Io63An7;|FvAh)wGUo(eCp zJtS!J)i_Fw0owc3Tn#yH&#QUg4}jUO05<<9Fc3SrfH7kSe=G4W7npLO7fYyXj)yn7 z!<5TCB2&zOq^TSLX93W22jDpbygYIRQA5&Ywge<;AGpb7#&6;SW|3fxi!fXL7eY>Z`r4cO1CUQ+l$x$+KRjPsiLATk?uMGm leh}y~`!^Sk?ccn<0l*3xpeBI(=l}o!07*qoM6N<$0fM!?%z*#^ diff --git a/graphics/pokemon/ditto/back.png b/graphics/pokemon/ditto/back.png index 9768f89a15b16edb29e1fa21d8e5fc6d57569087..5bea88a4aee69edcc02c04297dfa46dedb7ea2c1 100644 GIT binary patch delta 286 zcmdnQ{DNtM1SbbG0|Ud{?Tv3HR@>JLlmz(&|3?F76*o-*s=4mz;usRq`gY1ep~DIs zF3OWt|NlSk>M^;@jd6B#d-U&j)^e?0~Z5>r>mdKI;Vst0QupGB>(^b delta 359 zcmV-t0hs>i0OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L007oWL_t(|ob8f93d0}}MWvwok)~bGfVoE@ z2S@^D-3mECbN@w6AVg;jS$5;!{^$44s8Ur`f78wPN@?#;eSEoIA=tj`>+#;%b_O6< z_B}vniNKx!(T|5Cun?8*@CfjXK7DBgJZDVw7uw~fp<#sCdEyU3G!4o5RU%aVj33;BnY*X7b0Z{IiEtH595Co z@54*J5RKPDgnSAzca~S&;tJ5VZ9^gD>;TC}7Lw@-#F1b?X3JyNF|AKv8}4ZGfUH_1 zedPoI%)eoqM3@s%9 z2vdDlpMxuvIBK=~FGAZ`4z7EtG5}aZI<%GvXdoQx*QPhfS63z&0Kw%44P5d@h>#w@ zUH5qcBlF2T^Fv@C m@erOZ)VKVsS+i#SN&Nt%5*?gSGkwqi0000OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00F#7L_t(|obA)UPQpMO2k@GBojp@t;0&9K zX&D&|hl^csS6)oZBxzH`V ze!6BioQHCM-)a%3VuP0p*3ZR^EAY6xY5}3aH5;U2Zopj!hzT|rjXoN%wOhC~2!bFM z83JBCZf9MPIUXh_uz%TYt$evSfd{csAl&b4@UebIK)42G5_}h0AkT1`5yci!tO2hi zFI(Gy6){G~f61l>p_JwCX1Y3;lKF%5vj!YGAj4dihe0k3;P7o7$Gdp_V(hkrLu@7q z__NPz<@-MV4*+nzQ_Ly}P}yJxScu?=8|C2|)PPn_0BSK*;67BjEG+N_CjpDq2^?*J z-Tk2w!`_^m5v(DIPbpP1fP=3Nj#u4_$oAzZ|eX6002ovPDHLkV1m%#|HS|R diff --git a/graphics/pokemon/eevee/backf.png b/graphics/pokemon/eevee/backf.png index 7689d995b607d6faed2de20b80c8932cb78726dd..6c265361f5fb1e4d927f0c42fba9561239eaca1a 100644 GIT binary patch delta 543 zcmV+)0^t3)1?L2i7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0005jNkl9#K2|Mdrv?(=!$jsH3j z@egW1NQomftk5P;5CK@OO%X*7F~F|J2rP04YhZwsqRUw1v4Iay373Ad2n0`pBm{pj z>SF^27zuEq9Co&&*BlDL?ka0`o+yXb6`OwEMQQ<>1vueMNg0CJGEglT0%c9kR0Gpx zfTsFtq1-8TaaCZYzX^3kZ^Wj)5t!|^_0YW-DAxYVZDi z9z)Pd-_M!4nh(N4p7RZG49o#I>V1E}q=qEw++Y4BK=gUg2Y@IEweJF$AH@s+YT(G@ zE+v&4w?hPtz-r()j)w)4Yv7InB@7n$(whm(C8}WqbQTbg+=qIMM>&=sfp}6yF)`k~n^Z{-Teb;|h0*3_8 z!r1m@0@B?E+yn4%dWjLn5CSu?N##U8@uIm!_|of0l|q!QWNmocS>{l?-uB|Xi)toj zYMsLz_IWEumLy#e4H6hUtdYOD0(z_PmxCn6tMVbGXv;1 h+I=v-@y5T7AIFsuxh25ziU11$002ovPDHLkV1j}N{J8)C delta 624 zcmV-$0+0RY1h@r|7-Iwj00013M{Ml?000McNliruE98ZQOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00G=dL_t(|ob8m)Zlf>|#+?Z69SrJ9T!3gr zrJh`C?~AmnTtgen`xpfk4d-gB&GYoyms=Y{{3ocFNzzCqCdm#t7@fyTBd?5&~|IZS4R;Tmlh}eKC(I5Djs3fO{NIre&0& zQVGFP?GaCAIbx}Sp%tz7q&4s|g}K2=JSWP5%5l17q(3 z9im#;DjqG+JzoHveIL>4+ra_gx&ysuvbMmrjcJxZe=noxEzrFLfFfurbV-^~|JpIj z`Fz-qqm(H2QX36}O*x+-rO;%9fGpES10F&^se$RFvOxpZ;{FUQJ9$(Yp6uS*T~3!D z5^Lu;qcQ|qiPAmqHUyfqk6fS$fUHTKA>9z^@|6ZJk1u^({{gizmCF(Zu%Q3|002ov KPDHLk0$_sQe*?4t diff --git a/graphics/pokemon/elekid/back.png b/graphics/pokemon/elekid/back.png index 09028a7d9ffd3129fc0814b11fb2488c56c29e4e..c0b5f8cb79f573e2dd7ea1c7049b0b84e6d079ef 100644 GIT binary patch delta 580 zcmV-K0=xa?1&jrd7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0005|NklyCsV423PUQQ`gHciTd_C^)*4P4=WqIR`zYKsc z<=%fm5V`kA=@-#sJ*xv^0uXusl)wOl1Q2=kavu;_DgbJ|JON+@0R0jG2m&xKkHUX> zlp070ikD{wB<%`-=KyQ~z2S_!%36Qnx93+DCO$PS> zfU@4aQxD*O0SG=3U^zA+Cv(d{CX^Zi!O#Hl_M~o$5{6wu_E7Z=o^S-9bzSva@5H$0 zPylD(xcebY02@zF+jao3e+EQafE<78lZPmolyM(CDX@9y}m>Nkd!)}?#3t+f#|~! zP%H>QW`YC2hD{8Vv3f>AO1A~rsF{HVpaT?v^}$1=({tNq1}q1gN~_lNCM|z@n(OT$ zW7#XA+YN#MYtJPhBOso)7+&ZTz`Cs#PJ5i@>I~3Ql@>e$5S0{fo=A-Z^D zqGtRtZatol@=er#Xh}bY{FUod7IK<5tjApmq>H8qE?H)2&cW=D$zv2fhq#V97 So{GW%0000OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00Id~L_t(|obA-HZrd;r08qOChin!sAwWDC z?H8Er;*HK}u@@O4fdu}JAajNQ&6Xks0>Y~@bPQk*Eq|_eBqg!3)Sy7d++Yjh)A4wu zG#Y)x|3~uHIG?;R&U5_JL*rw<1O%EFgFqtCK20xJj#SQkf0}+E9LW9!(u`4>0q{vk zD3}-q(+V6&2LU*cK-L{Odo+(VC!Smhug9oxGs~+%ux|m~%&wvXop$DX#FCMUw zgW!U5KF3A|AiH3EiC{4qV|jU&LeofHXiwSNm?tq|2;^620K2`py>VB&U&fdp6IQK~ z^-Bcq_0@dux>1|eL>i3G)h}e4@lddJ?eHF zN%(I{BoK>@R&_%gfE6{f%Oq{QqAb#U}<$GIw!j(ex&5Qb$k_KcBDtX9NCG9~uDo z6{`avAq0Rg

    =RioHRIih2l@AbhwmqE3tSZ%H)5SeYAnob<{_qiKwY;l>G-r|Ex1 zmXOIj29dm?dq(v&+vTG~K&Hg7XPop($SxFw%cy!Uf(G~~p)q9nVA6X4AdOO*B}VfT zYF!_Ey>+1?G&hRpEW20cH-KIY3K%XZf^32n2)KOFDQgzdqB@$wYKq0%Ne zw@z?>a$$|ml_wWArOHcqJ1=5%5nT1yuceE?S|Q>9^5Oyoadlui*`cZL5K6)E8n2B& z<*p0D$hyW0V2&W^qk3yAvjFycfQgkBi78lgj67R}a>H5lenUODaF9O&q~m5%=ieKE5~j@?dOQSdk8wWQ1x=+*OFW+? j6JTdk}# delta 604 zcmV-i0;B!u1f>O#7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00GHKL_t(|ob8lLa^xTkhD~vS#wG`7#opTu z*$>U{1EkCMKTE{JHaMhaHH)c=R!!^U*8|C2_y3!?{RQX)Ak@!T1T@`;AN+~}&=XOc za1;T-z&JP3aZf`0*RX~c_lAFS>8I2amY1si;z=WXK1hoNe^gh)vVhx95(8Gc7b2Y5 z2%J}}*Gv>5Ebs*80uTURbpMkjSzs&y-8vuFnf2SIxNmT~iHUxIl;V5#0|pd;0B$6 zs!yp17L@r-{iTtj9N!F7OQMVE%s{z24dJ8}J_@#lfEHAX%F&SwAA1|%MpzXAAH%wXHv0QVr?!Nujs7{po!oaoFzxDh4tV+^(> z?!S(&>xxazzP6XZOK{ZqgOvTEK!VdWq*9A~ShuvC;ig+g37pf@w|7trZs|UQzJMkKOKg*lfhO|VqRu;BR{QYgft17c+IYq=nd=(9&WGvd zc&GPf6}H!V1FUpmw{?f(=SF^X1G0ZSIO(b5kgJb-X)I~5v z1u?6F<2)NjYe>HYs|Gqet)qA}73vgVXe39dJ{x?EzK|tDwzRhuj+*`9b~x%M2gb+RmJU00000NkvXXu0mjfGj8CL delta 569 zcmV-90>=H01cC*S7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00E{+L_t(|ob8jnZo)7Wg^kR_M6z^_7uHCo zu@DOqE>F<(1qj|DgCC?*Hlz-f(r%3D6VNy$7=&N(FITr%am0OA6Gr`(EaUvwo9rd){P z;=dHyUpoPrS}1nb*S4Um01%oG7i~kp(@hUIKo$T9=8}ocH9Yf6n3Sw54~g3p`NB?h zchFw1J>fw_f8S=?YB0h+V!ayn$GJCRUyo|igDpb922QH@rAPA@n_+;PlL&z8Wy+}f z3mR;M%Va)iRneX^7!gvMuSEsK;xziUQ^o?nPL^2CA0|P_nf{eL9ioL|s*OmPV2d999xZrfpi9jLo64!{5;QX|b^2DN4 z26rEq06%wyveY64V?C3?)+G;tN;pai{M>;u#y~cMSA(WJkYY)9^mSxl*x1kgCy{lc zqJ2GMlDE6d|E27ojsj(8dAc};RLn_Eka+aKUTXgRABXEhHlF`>aGCssPzhUJ-d^{x z&;FJsS58WJ^6sCzapOkYP4kYH9qXSEYETmvwWdGk7<*l~tw{7E`yD5aD(`;mKL2yH zi0FH(N5AeVYrm+F`n8DJ^W^@0eSQ1vQp*3^o?nPL^2CA0|P_nf{eL9ioL|s*OmPV2d982+qq70J)n?yiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}lJY5_^D&{07NIZIAFE#)EkHhsL8_$0`xJ-URsDv#qZ?AjU zXManRD<>s9dH2uVxN)QHrg=xpj`dFnHK+-TTGO9%jJ+=0RwVk7{f-kym3Kd`p8Gjk zMD+cs$FJ@wYira?{n{hrd2;`*PoH*KrIi1zkNd}Gd$qh?|DO9p;}8G;9%xW&(le+z ukkDDn_Rn2oI%$dP))$^7!$TOa?Ca(|w>u)>1y`Xp_dg?*-{5=OA{&4C0xBiT8tSP7N2Bny*)=Hue^-t~AlMGnS zWBO*F`wRE8Q}%3`kYPQAH>T?vbHC-HyG`$o=D6%v7g%O^yUL&CL1RYRhw8W~lNs_j zFvk<^Q!dl VDCLRGxBzr1gQu&X%Q~loCIBvFaf<)| delta 300 zcmV+{0n`4j0`~%t7-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L005gwL_t(|oMT`Z;^03TpWpbye^jy0_KU4P zAgeHXwR`t^WHtYkSFM_4jHHI&&e+)49$8PZo$(`N6%3!1iuIAr_`p9)55<=CA7=Wk zM|Q_2y~)o|RJ>DKr}rLNfzqp0kCc#<{L@oX(nB_t|NkSUK6j|T`<9ZA!e`+B_JILS y1YKbGfWZ>`4E&E!VxQpy!z@4al0-+9xmMeR5r)QCcrz;yW~T?OU^5$iAz}5N~k5tDz_xAZzy z-(1amg57uejwKoyqNmv653OyF$?7TVD)C>%{CCc~fP*=&{Tp^4y!hqB=e|9yDL-|U zKdlij%2!e9nkXxF-t>8fZC&WK(p&#$HK#vV^832m{C8dUD|>VQJnyu(HTjpHc#-$m U)0$3Gpi3D%UHx3vIVCg!00fb4KmY&$ delta 302 zcmV+}0nz@h0{H@v7-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L005myL_t(|oMT`Z;^03TpWpbye^jy0_KU4P zAgeHXwR`t^WHtYkSFM_4jHHI&&e+)49$8PZo$(`N6%3!1iuIAr_`p9)55<=CA7=Wk zM|Q`bbCaK;sCai~-MRP33eLP*_2vwcl7HvUoH=(6*bq|#`6zq_{%;=` z&_vJ$h7TAlvCqK&2qpFzJ}}JkLr)HF!!S7j02ZlsnT__4tN;K207*qoM6N<$f}+lR AYXATM diff --git a/graphics/pokemon/flareon/icon.png b/graphics/pokemon/flareon/icon.png index 96092e7eef01f9d6d04a8a5d863fc28a283b2f86..92f4dad5324497142193bd7794e9238098e7703f 100644 GIT binary patch delta 330 zcmeysJcW6J1SbbG0|SFkK*=~jLnwhreE8vP0qy^I8}@NEcj zN^4rln4-C)L*;tw&b5Y>tzinMH?+Uiyff{v*@VFOTjpYGf7Rb=w8>duuy+gFnVVk( zJy;E7S=TgNy>T$i*>~!%-D?_J#vbZ^*f z%=9Wed;RTFSN`S;8-5yaO?hlCYP)!MT~Pei`jX=6-{#tC?lGI~Cs!P}X~KcCna|G$Z~80Gg}?njZ^hpGtS;N@cb~FQxTRSjA#nWXhvN+u Z49(l6x&lQ$x&i}@!PC{xWt~$(698=OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L009(9L_t(|oYj-fN&_(vfb$0PFg-5XYacBl z?H)WW1@|F5$w2ot_7Zaq2(qv}q=a-#-AodLRgXHi`IyPi>9l;q~Sf_p!t^11V||F;+Mne_r%4fae8(L9g`Yw8t)j z8>!T`J#}3l*Ys*P(m{4TZ=%Na=!~RvE_>PHAX5&vMj}4SbVFE$6ChnmDCj@}3IopOvOxYF!q$F(-&RvCKGV QF8}}l07*qoM6N<$f^WU48~^|S diff --git a/graphics/pokemon/floette/blue_flower/icon.png b/graphics/pokemon/floette/blue_flower/icon.png index 734c6eb4aa8c2822c9c902a76d85901c725c82fa..aa2227c430a1c7dcd0a2ddc87c9cd40de76555db 100644 GIT binary patch delta 278 zcmZ3_{D5hK1SbbG0|SFkK|U`%VX44(J382_FJ$I2^cl8l7xlf1Udf{F!hK=kmIepU2L%E$Tem&h zFk$%>_n1HH%4>JMV>rp{$CTnf!_Fa2Xc^Ch?JX<6)_Y3$#HjG-38npxI%LE6yGK~t VCuiCppx+ogUHx3vIWZ+P0RR9(d`|!X delta 356 zcmV-q0h|8d0OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L007fTL_t(|oYj)Q4uUWc#`^|+2zE`Vj>2F_ z*jQi`UdG`jd=Tcm2NR$Jj?}?EO10D_^mQl{YY? zX+~POs`Ff(oG`$#C;(iGg=>)`5jaAvK$ABb00nNxc#w#Vc79FpZ6tQGa~n()ibkx7 zt0)$d3TzBSu*sW#z diff --git a/graphics/pokemon/floette/eternal_flower/back.png b/graphics/pokemon/floette/eternal_flower/back.png index edcf0ef2cc59d01e86d3dddf00ac2d794a3ef3e7..450120721173f75eafbfe064afe7f0ac7d75e33a 100644 GIT binary patch delta 596 zcmV-a0;~Ox2Al z0q{|Nf|+;9PcZYd@@%m3W8}Nm&x>vOK0z9LZ1}zoL_-W<;gbOyzFRP{0rmjVpc8Br zsG$n_cxcJ+nF8?P;c|{0Sj^6Mrcwx}RBOQNtZNs+&`hh|2ygWLQ7hjy7hCn_o$XB^PR3Tef zrmq>{Fr+0$+W)25g!4WlmHfPXzwbA4TMRBmU@7B*LR5q|{Hw>^ zg&+7f^Jo4T;kJc7$c1)c(Cam=djGcJGfd%9px3LzOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00J{fL_t(|oRyTnZrd;r#&tsxz<>eKHZxS{ zAgO%-MSTG?M27+$1c)61c#AZ*kCRNzDyxImFpJlSgNJtM)AT4=wnd8sa+B=)@w>Z^ ze>~3;;Dc|=b+HH+P5|;{;uN5axCK6~o$Ike=mscrkKoZ;e>b2jIEi;G0q2x7@^cqJ z@|fN`N|1tu-yK~-nMcXJqr$adapDpvc$B8ZA&^ILnobMoBLW3O0UHo%6SaT^@bC~} z1GS?2F zfZ%Ad36O9>^!Y-9bL}Arqlw|6Aj`D#=%)!BpCZ6QzIXL7IcFbN4?i?;ImQWitg7nC z0X%MBm1@i;&Vaf`U?)E8Ex=6G?Tcz@wy_YklB(8#f7sZ7R|K#LD*jc~R0RZ-Zek@i zs=Y*Jst>Heze%a2No)^*qGGiUB*yp=nAZc)h}9lCV&uqQ4Yd02oyhhc=&!~EWFOsj zm=bewH{>PNZo?(e4nVgZu$52ecVM1>l_#LDG3xO*=i4JdGh7R!DJ%Ks1o%`0#zQ!h z2&|6)S!8NwxQMp#-ab7&0x!NH(0Ig$g8%}Ci^1VH3Hluf$k;?&`TVQ@B0=*W0b|7K t%=JJ%`_Kf9Sz*|F-9`hAbli?N#(#>v2xHa>hJ^qC002ovPDHLkV1jLBF=7A! diff --git a/graphics/pokemon/floette/eternal_flower/front.png b/graphics/pokemon/floette/eternal_flower/front.png index 56d9a71669ec351c8832a2ef1d21b6012be3673b..5d0a8c7df71be00da6213d0ebc7b3212012bcae9 100644 GIT binary patch delta 638 zcmV-^0)hRf2F3-D7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0006tNkl+jfK?3`L28DB%D9ZgT;YaV$X}x|)Y+r{(N9xe!}pZUQjwe%B8$ zFiq3^oB%MPf%z4|p#BZPP!jJ50J06~YN%!E*F5*-S=M02P%&$+!@TUKj%aNkf{#V(pGPWuH5fCxpKlBfxTQ zrwo;bky`+GD?R{(P>cnSwfDv@U@m_IvC&8PbtMDF`zry*wU6){0zx28E0%gr-4*3G z2q7loK+~5}r4GSw8>E;J05Kd@Jw$xPe@P?*_)7|TSu`j33g6rCn->EFKo4Jnvbfdn zzGjdTTlhx!E)N*HYXLWe?`k@K0qna{o+NggK$HU5ozoDCJObF1-!NyV+pK?>UerX^ zV0{uq&YeM8fTSP~(*$fGM4}P^tD{Ro^Z=2QhX66g-8#Z)5Yk$-AE49#0W^iuO%xw+JO)Nx(QW2MzE02Q6*Zgj)0qtk5L0Y08s<5xXI`o>CXTnsG7;E6p!L9 zz5@F40-#TeEkOCV9%aCzv~6nZ2S68OfC85hF4S>-1K1uJI04=m;Jy4ne*oyw@)v+w z0s)Nw-*gzDXA6wi;go?#3oiipTwl?{FrfjgejIRAjR_BjDHHrl0NGjJ0r*zG(*KM2 Y0T5*vLdh!0^Z)<=07*qoM6N<$f@~lfpa1{> delta 735 zcmV<50wDdy1*Zm(7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00K)%L_t(|oVC?4Z`x200O0o|BqSyu4pag! z81)C3NA@5AQx;2cD|JJv7&^5RVa!yjPD~9OTP1J@*1*CP)f`fXMxFX!dhZ!G0iT_r z>P?pKd-v`hwh`h<0EoPh(rsF~pbWN`TLPp~xg~^jRelKqe{Cuu*)nGaG?gzznFZA@ zWe9YHbR~_%I9_f080kG0X_Q^fB@Hh=|jbDH3^)b z{vgtZ1}NnQzONJqgrxHYovPRdq+8HSwD1gQpLM$z%n&;1Y2XDxaMeu%sgqh&0v%~# z0Br(5=??d3f0+h6>V*!)_81YD7^paUzzjqAY64WxXT*#5ealWnn-SMHLu-@()oP@~ z_~zZ$$)SV?&}yVWZFzqS@i?>^S|=rnGiP%@y^|#38EotL`PE=N#kovgLFtu`b}4?@ zA%VNcJN9v(zorBnj2`bi-J!Jj_BsYQPt8xU2yvf)f8Sgl5%-sX_}#&M@FSHkQGN%P zA>!7-hrnmR20=J=#4uz5ZLt-?sUa@I-9xZQw^>3g%6xFiHzLyLvF zUKt@IMsgFa*F*_MED*5NdAj6ItKiToSea|KL}3t7uL;a$4uI{oW*XL z0A>mTakyB=Krru3VQ5L1eO{$Ae|yx=+->%!I0mz9&^KV3nWr8#$obf7AjbayXi5Vz z|F!fG1U_VTVL)*-%?H<$@i=SH1NfK;%v)HTO!AJ3V)Psk@aY*Kn9t*Xk3U}=&GoUZ R+NJ;i002ovPDHLkV1obDIgbCA_%wbH_um0Iu&}XSwaXR=1VmL#6U;%_J@dU7d+Z&kfp-3QfKD z!mGGjVL_U!aEI^qfPI&qaD4os^Ul9V?YQ5=)!OC98Ft=y-B7RHGo7oJbFMe|E3o6Dvu`SsL(SVgf0cxp^zPnN zT-MOKULstt^UCp>17Y3_$@S}Q-170y55OkZU~4(I2DE`~}qpDB!+yk{6W ulyM5P7EEn<*ly=3F-Jwp=Xb=RJB%HNMARQ?MK1z+n!(f6&t;ucLK6VsL5-6D delta 375 zcmV--0f_$i0>J~27-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L008AlL_t(|oZXVK3c@fHMe_$4+`DvFFi>={ zA0rs2X7g=v?o_ZKPCEEwPAM)i7*M)27HyknS3$uy1l~!)y~82o$K#B9-$7jPPI&>s z-xB9!ureK}97rATbw_9cx=QprEKU^-7ID~8{yg^3nPI5xrUZYg8)4;KF7fBhL=H%KsnwRi^2Vz5zG7^Di4NO zi$Iyx2gOBj!avRrgsJqqFttHiAz_{d?U67qgS1a=3_AH<-!X{FzCl&bAo7_(4-rtV VZs&k7JOBUy2>?k&PDHLkV1g$xkoo`s diff --git a/graphics/pokemon/floette/orange_flower/icon.png b/graphics/pokemon/floette/orange_flower/icon.png index 3c839277cd875207825aff982a98ac50b9086e88..07b6d9a09a4f32651032eaf3b46cd951803620c2 100644 GIT binary patch delta 278 zcmZ3_{D5hK1SbbG0|SFkK|U`%VX44(J382_FJ$I2^cl8l7xlf1Udf{F!hK=kmIepU2L%E$Tem&h zFk$%>_n1HH%4>JMV>rp{$CTnf!_Fa2Xc^Ch?JX<6)_Y3$#HjG-38npxI%LCmu}J9U VlOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L007fTL_t(|oYj)Q3WG2Z#`6Yw2=^9DJ64Ax zjxIV@U!riEeVD$NLQ}}(MVi5>u@<4ZxEA{7hCn{_b5 zW~7CyI?vU~2?HF90>HIcxE47Qfg{ukGoMq(#Bx4}fAXvCVh ziee$Dz{WrXn~XZY1tuwJIDQt%o(iU0X&KY-;iWfJxMRzVAW@z!jUj?{D5hK1SbbG0|SFkK#zfd zi+F6%mj{3T-!Hopl;LQ;UF?>G2h-=I5}~x7`8o{McMq3yD4n)$dVBO!MwNogp|ic$ zyBao}iL4A3SnbFp7TYcIq;S>OnX_E}vK>gz(5rM2iFSx}t`8NqTE#eZlTPgGpAHFu zyc0T>tjM}1rF%%tWYL{MLGy15F5hC1Nxr03(DyD{)7L5Q3PVXo(%KlI3M-DjsOXLJ z&hNfxx$%GO`d=lnjFY5un4U~DsBPGz;v=b$&l&vs|0Dy80wDIB@o{U*PUhzILShpx TJy{6!8-u5-pUXNYri3N{x=es6 delta 354 zcmV-o0iFKf0<8m(7-Iwj0001qplF={000McNliruwJ^02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L007ZRL_t(|oYj&&4uUWgfO~`9;W4>jLS1x# z8^BF;@Fuviu(-egcWRA^%PXOYV=IQlzOtJ5)1gVfyx-B#dQQ zlMpWBrjct8Mp(5ifDf^7Ya1khBg7Ik>5&6S@HO07A@21nbc63wu~AoF!K8`E1!?Ni zOehMNi$t`o>EvT%s*WzlkD@wJU@oy%8C^b+gQ4J#1v7%I@|@Bb0&Fo|oDQ=1;XgmW zAq#zYw zi!+a`*N1!mbIX_Um|ggCpY68Jme$`{U!&G-U9ZDXefLfohs`Oirnk$F1%7Eb|8m)~ zJ!vdz-o2vcoExQB7Q}7kNSwDkMt-61`TGnv3OZH!zo&3_bk=u!IJlcF2zci`ecnEK z7O_x<#xDY{A>NCt(}krbzT43uU40=_lcCShD*TDe)$Nns%@I&_XlJ{2O0%)O`N4{v zqOX7M$et?v`~KJX_v`8#jOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L007uYL_t(|oYj&|3c@fDg>!=(qI-qLjV{_7 zv^UX(M{!pQ-MDEN?Ky;@-oc0;wlJ*qyp0@(LQLJXN0>$+{*s>d4O0G|K=r3(AETjZ<|AIE=r zi)ecWFyak>DAiv@2>|dZAluh01>n9H0t^VnuT_hk0fs>Gvj~pM`{U>dNlMafs0c@W;40;R@5!H_laNnXweWP(sd;5{ynXC?yP zbFl!Xx>x`_E58U(Er&9trU6QTvMMI0vMyi)n2CUKbLB^bS(o^6h5}g3s-Q;%Z%4lM z54J{WX=5Y(@D~ePKnm{-0UJLhH|y>)nFRjjM-eF7GvMF|IzmDl0ADtO68L{2Dnj=A z^YGrwzX-<9fF=U3O_Zlk@q3X1gzyHiq=3A`Xt~HqfXGXm_&tMP4Iyt)!op?AgE>R` zf(Ygj-2=?@j2xygKna*P;e6WrcYsJ?fTH>f`Us}L4LGsBpaGc6?GP)#kuR{Xj6*=@ z4?ctgs|wXRzy>ht0fsBEj^jlE@U90K!sUY^27r#x0oWfdjc}e4qJ3?~%Z#D(A4dqh nqP$lEhu|)L{o?-9PXqk}OyeAvmRD4<00000NkvXXu0mjfgO>{f delta 696 zcmV;p0!RI!1%L*S7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00JaQL_t(|ob8moZrd;vg;@^;(N2VyfRiDx zi?_mCCxf_y;IXK8PimKTOfo8gQWGlt5Ge{n;FP^+Um)??#nqa2sh**iKl%l&C&-0i zLpq<%Jti+j$Wx6}G#ghVkR$p8qyU&f|EBYN#_)qGR~i0Hk4nHxW`D1PbYAK@l2uxVFG66D8P#XJ)M@ z>+}@BGFb!R77m~pISrWor12Pl7Qz58PAoOZr31nt&v08wahUCmWC&oML#mYDCcL^huYvlNK_4vI0GIBz=m1}cJ(9BlP`B89 zJf?QsO5ILuFNYa+|H|WC2N-6c&n`d! diff --git a/graphics/pokemon/florges/blue_flower/icon.png b/graphics/pokemon/florges/blue_flower/icon.png index d0dc98cb1f2f446f57492d90c7c43d35e6aff372..8a4743f4f56d416c7997d4a9ea6d3b8634445232 100644 GIT binary patch delta 407 zcmV;I0cie<1>gga7zqdi0000?P=%b4dp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0003`NklZ6ctt8IW^^0iI?iYS({L zN>_lYP|x|Pqhw4eG-ahuEGbJ}Lx9oMej=nSL{&^cgfUr>6aNvTBFr^J24w|_=LCso z{Bfa-XO&TI4z%7FIRGwr8~U(jlsE&_c@Xr$gzN?+IGAzO4G;@siF_W`0gr#d+Z0FNbPrOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00FN_L_t(|oVAj{irX*{hW!RZZ!MGt;(G$t z-F~*E7ahX-EC}}N#85WSJ4(D^Z(c0Dl_Ue-S5G9b3k#CF{)+sP~LW z|DB&V04nWL^?PWTDQ}?5yPRhQV?zKdNAk;toPOxAUThm*W33<>N-pDjt>Bjek4i*EEJxvl<*~uf zh?aA{kQRjFfA}D^wU5e!u=){bE0W}?=L!7d-sczSC*Tc2y`XrY=rt}Q0s308Ju|y9 zf?Y4C{aZ~VFsf>Clq2rKjQj5Mk^49V^AljQ%hpR!Ns{J1K&A*IA9IcSBChp{RK27D5TogBZrhg_ia$3irrd_I=aesVtk0&h-7kz00( Q7XSbN07*qoM6N<$g6eGiEC2ui diff --git a/graphics/pokemon/florges/orange_flower/icon.png b/graphics/pokemon/florges/orange_flower/icon.png index 5bcb76de35a1b90fe80377ac2fbcf9fb2121277d..a8239748c4d6ad5aac802b374c42de93bb4e1f5c 100644 GIT binary patch delta 406 zcmV;H0crk-1>XaZ7zqdi0000?P=%b4dp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0003_NklEJ7d zZUA?qUh6}LR!k{es#7N>&QjM9V04e48L0@-h+Tn#V5*}E|51wLm}@8u$_j+%1c^ud z(NM;V$|!3B(g$NFz>OS3Uoi|VGeDgOL0?SBY4E{D8Qc_Zu?g8?Fo3c1^E~*1Srm{F zsoOeHI|*J6W?c0EEW$*hd_LBNjKP0yTB0v{28s7AkFsA;=)2nun-0GLkY{;A9M}H7 z3G>D4oBYE+$UpE$|2R8#;~(RG?)_r`d;ho?#PAPyfBMJOAi94zCjVFr0{LxscL@LR z7lT0m=t)Ez-xx%9jo}~Ldu3rghI@nfxBl=0L|-GhP5kN_00000NkvXXu0jG}f-_#d A?*IS* delta 575 zcmV-F0>J&>1BeBX7-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00FE?L_t(|oVAj{YU3~vhW!S^7D{g$hzY&f zVBPI!Xo|?KeuqNQ&3eb}Sr%I#e3Gm<2%n^>;#k4SUbk})=woJV{r{gN|Eciq4%7gy zD2%k87}6`TwC~w7r#llt*2u%Qw{!vU)~f*<$!)%Xzt5^8e_k>kTc)NZ+iVT=XF*i> z&g%t$PPBbU0PJI&o(J zJ7l4_rJDuR{tFS!k>)7p9cIkE%oBKVZG4S$k{GCkitlw&oGQ$B>O92WBvV5%#&YtSf?mLWj4T1LLgqEwl^M#>XS)Mq+{ zmJ2vyM~0%SehqNZ4W4*fASdUYv$9Y##1Br!bArxbQ4Glsh4jVX?2bj9qaNUKk7Ahr z1Ge6cCb1jQF6N+K+P-DjX}(qz?I5OZ&t5_y$iUFGCqLJcR%N N002ovPDHLkV1hv={7wJ> diff --git a/graphics/pokemon/florges/white_flower/icon.png b/graphics/pokemon/florges/white_flower/icon.png index 06cccec6c513add045bfdadd1f765822ac69fb07..11b04c54e01956833135e209d72082540ef3f205 100644 GIT binary patch delta 396 zcmV;70dxNA1l9wP7zqdi0000?P=%b4dp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0003+NklJkzBsOA@Y0000OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00EClL_t(|oVAj%Zo?oDhW!So#CxpbwKB4A zhj-5-v@=GvXE27fa3zk3oOEq(K;qNg+5G=sRex0UatCxk2MQ}n&j=qR;54x_$J!Ne z>Gbt91>6CM$t=`q9-19|oz09%GhSMJHzMnfzY_+gq?3-SG~^jQDy0t6f=-H_q>k}fdC<{40~d8wz4W|* zU+(>XfqMbje;{%PN;Oi}SQY{(I`+mwFAL}=^Zj<=SU|AdNZxqr_nCCc`4Bk{yZIF` zGY{+tI)kmq0SbH{nZzJW_x*@eLW}0J^||E^R+@1cW_eoRt{a?rI}pd)&P`d6jOd-? zdP~p^tU39)2zy7HJAo`GyFlHOTDJcHmZEo6Xwh($ diff --git a/graphics/pokemon/florges/yellow_flower/icon.png b/graphics/pokemon/florges/yellow_flower/icon.png index c3a5716077b795d49389b0734484f9afcd7216af..8fab7804fce094ed707c41cafa7b6eda3523df16 100644 GIT binary patch delta 407 zcmV;I0cie;1>gga7zqdi0000?P=%b4dp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0003`NklWg?)l7?5*@0iI?iTGxM5 zN>_lYP|x|Pqh?GgG-ahuEGbJ}Lx9oMej=nSL{m&agfUr>6aNvTBFr^J24w|_=LCso z{Bfa-XO&Sd4wT*)IRGwr8~U(j)Hnmwc@Xr$gzN?+IGAzO4G;@siF_W`0gr#d+Z0FNbPr1s=1BwNZ7-Iwj0001qplF={000McNliru>K`Eqed}02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00FK^L_t(|oVAj{irX*{hW!RZuWe}{z9(Sa z?RV&+tMz`3*|78$!TKJA^$cC3n~{|ST`Z%i;#k2+uiZHa^f5EG{{K&s|5W&N2W|it z6b4?80{NXd-gTmqd}ktfZCLfIb9@Hy-l-lNCf$Ape=5}yf6s)BEn`!X^=1k5OGZ@q z&hHxlowlj|*;m5VH_+y7PP0OYeg-Q~^2>&tewca3Nu0@cycA(4OvsHA$Ldn->cn0F z>`;V~j<04=`wv7kC%#8E?J(!9XWIncY#Co;Eh7eMs^WVsqn85rnngt{Mdq2Mu_4T` zl2W>m7MQ2_e;~EBkIDnH<`EdnlH{r93H;;U=NFhK5DY@Ipt$20G_E57{@#eAaECgA zL#Kx0tK<{~GdXtt(TxtB+WyBTrrP)wLm;dGF%gMQw2jvekkN`1}AqM>MiOXz8#SE z(|^F)+p|gBik7oEXjzDdvpNO_LK27_JiWVzl%Wd8LNumBK9VZ2)^FMqsZq6&7Boy8yRTueI+g(R$P|=X|or z^ty3qcep-A>5wtOhh7@2I}!0!4;xEA9BVC{=dySO$54yvgtLb*^L3c??waN&(>X5D*(3zh zP+o~TG%DBZlUm3!o!u};(ZUVP7*hifnv|CiuwJNsR1?~B@~FULzyc_O^zaBBntoz%sT_((BYS)%h4+zHd7$ho@;a5Bg2-|5bmF9}y3k9}y1~KjOPc{K$BS{KyY$ z=SRXrOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00DYQL_t(|oW+u{Zi6rohIxXXNcSMYUR18> z2n*@hC{oM_Qqy=$9=1=A&@dVkVz%NM0tUKAy^Wvy&*$HtVce~xoPI-!Qw0!_j}0}V z=Z^k68KONBN+gkIHx_yG6}TYbyP67btD9wpFJY`&fF5q1f5LRyAru9@`e6>u1{rk4QFQ^Nc+Xg@fVp zW9{fo^@zfZkjjFl({K0q>dLB*9`zmQ3c zE*tS-kytS{@NpGnj{yvPTt&2Z)Z1!4;DKVcoA8m@ALnGkM{Kd`o_zcQW)Re?K}7Eh P00000NkvXXu0mjfs~_LP diff --git a/graphics/pokemon/furfrou/debutante_trim/icon.png b/graphics/pokemon/furfrou/debutante_trim/icon.png index 05d1c448a521ea20739779db636f7c4f47582867..04860b16d25e3e42f5910582a57e8ca2e129cf61 100644 GIT binary patch delta 384 zcmV-`0e}9|1j+-D7zqdi0000?P=%b4dp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0003wNklj(i`A=V-3mP^POz+WB9OLX>)gHPiOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00DMML_t(|oXwK4PQx$|hW!RNu!EFHj6}*w zh%U_=z&n71$O3N>IZHDjp?YZto~-SXE*H0{ki+1^sEOmUgSgF~e0RUCPl&%O;2-Bb zGK64{n07hZaf26x3Xc3W!A{L#}{f)>~ zBS0O2n{oKe&a?x|ev2h+FaxWqe#x;pV=8+LB_H~shmy|D6bJ(vd)00000 LNkvXXu0mjffv@CK diff --git a/graphics/pokemon/furfrou/diamond_trim/icon.png b/graphics/pokemon/furfrou/diamond_trim/icon.png index 50934adad7d499bde34256b70b77f7f3dd870617..f5ce645e4ee9c73436ee0e12601bf5d582a8ccb0 100644 GIT binary patch delta 419 zcmeys@`ibW1SbbG0|SFkK%!2P2i1gs$sVs4`_Mh_^Xk?rzn^6h`m-8K*Dg+& z9(<3-;`C071xCD@iDnwv+yU2@y?%4?%T>o_G1)4iFPy1!83XJ8UAygYeCNExHvt!2 zY9+p0IeQ`f(n9C_=x@i@T*+Rml-ZNeZL68F(!zN9dObBkcU)!(G|Cy-Y^RS)$ z$T@yyj^jXl9!zs{9Pd9IV|AV%%wRb5`7pzQ&xe@~eNcXI_*8!bzqWmnUCtklpBp|Y zKLH9%;5WB_(g-Bx{Q!zQJN)FhwEPa~^)&~!e|pHiut097D*rl8OJHm;c)I$ztaD0e F0syTc&Nl!6 delta 551 zcmV+?0@(fR1Mmcp7-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00ERqL_t(|oVAm`PQx$|#{CATwmVhL-l*K( zJPcCV+N~A~yaNmB0?*b&YPPdUq*N?t&e-|WvLT2n<^0Qcw(st%Qonrs)f(`MG&pnN z?K(k&n1}asT7O^!?LJC)Az&i$*+fv!N?eNsjEOn*%@dY5e|7L+b`ezjG62YwR* z{xi#k!t0KfdA_2{_XOPC5Vd57)eON%`LHPQS=@8pEMvO8QO6mzfGg0KjB&Rf}5HQ5*0@uKi~9dvgz$?ZbR|L zz4o^!aqp76vOIUI`P$g&ob`7!ubB3y$~`vU`hTiwU5bNBod^(zIJf|@N?i|6$C>_# zjDbH4g%q^x-I!dSx-&UEb!T&V2bKjz2Gc2>iJCQSrm#$A^#gOWVc# v+40!bP0l+XkK$5Xwz delta 529 zcmV+s0`C3Y1KI?T7-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00DkUL_t(|oW+wpZo@DPg>?fW$pH-5dkmX< zeVE>;Tb35+Xafy8CK_^&O(qi z8#4Kvfg%{5yW$Yj+5$}iBzY`8y5rQdI=&fs!ez>Mi`l4-CZR2jyu;0B@Tcu63vMw6 z2;G~dxqh@_f7Sno^QOTD^A5AYS9b|G$f$QkKhnx~1UwD>jJ3GQHxY)t5F~vX zcz|rT@d9{YpenT-oA$-N2LjtGX8k&hztyKhd{5N`3{)?VT&D{@=;MK}3qHPyh|Piz zaCBwE3qIH-OuXQO4Hi-~^TCY>OFrZW%H4{O8sj)!Bk>XM_iH|Gsax|wzstuD=++d4 Ti_>C~00000NkvXXu0mjfUY^~Y diff --git a/graphics/pokemon/furfrou/kabuki_trim/icon.png b/graphics/pokemon/furfrou/kabuki_trim/icon.png index da2a254b630f8bbf82f31e90812ee45dcab4081a..bc81044fb0343c887fc9863bdfdd097060b5ad60 100644 GIT binary patch delta 377 zcmV-<0fzp)1j7T67zqdi0000?P=%b4dp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0003pNkl2+O0-M-{%?!jf>?jHGXk;`i|eND__poK3aYzyQC&(9 z@sh0j1>te6U_k8yap*K_nOalIn)0qJ06SXKv2||*$g=c@} zakRb`YJ>A08`y_)5+s_XcYO(TlA4Ahb@%=h2e$xMXSTd@Oq7dK8akw+u$-de8j~nW zF5|?$!*)89Y!;(JQ|?^Ib{4y`;A_s8!1CHTgQ?wag2$W{?)mh_5W{PV^sFnD{N$kU zTv58B%v>3$#XG1oEIuo}tlz}Vm%U}xySV9Jc>k-b59CJ&keMGnKxTdn0GatQ0%YRH z1dxdzBR~dzh!5RAr{{-NKJ;;%`C-erMt)3u==rhW!e)HOkMiLG X>Z%>ix&A&y00000NkvXXu0mjfGOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00Ci1L_t(|oXwIwZo@DPg>?g>=mCNzdkloT zeV79A77qc;QO78{w0BE@1X(D>0z`BX>%@O?573qyA08=^`i%L#Q1$a1v3OK~ZpwoY zqzs6Y1u)hcZWic7D2U1mmmb94g+`QWYL;H4drYf}h?=z*f0DZZJANm-R3nzUCg~Cj z>kP!Q>tT{ZB?aA9{VN}=j%`3UjG~DhCB*eOnQId7kJI$<)GR1J;$|oTzG6BaSJOJz z1%}*(=>*WM@`Hz1jSI(J+Yz=pI{0*|OytoKx0TdhdF+u+K9(NF3IhsM&+iUw%{+d5 z%s&ZGo#!nKe=|kw438Fv+Rg|HMOo?H(gPEO>N;#P(*pyU6)NpAGd(a6qfpC-GXpS@ zFK^Ujegp>i^Hq{JIsgM43b9_%^}u|wOX;jDT>D`YX0eBd*^*{_&T-=7x_FU2`3w0v>m1Kx^Ld`Gybj(+)^g}!281F1fCu11b%FPz9+9<*WPiAU6-B~D>lX%g=sibU5rIF6_8a@6g;X={#Y6J{c zOc7gq)bdQy?N32Fndcwzm}IZr$`N<3u=Xg=M2lpJf^%vQ`0gBPcWv1ut#E0vg5JiO z>c{8b3USZ=x9bP0l+XkKryZ}H delta 507 zcmVR02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00C%8L_t(|oXwK4PQx$|hVuqDup+89dn0-i z5^5fXH-V)CQU@j$9tKvo9atEWRy0c&&c>EdkQyIO<2p$n0J!ab-~B$HzbN{>09O6n zVA4|zA|`Fh>~c)odLe27T@N=xp2aSos0gygXfIx!Fj7$^e^yP&tnSzYc0SD?qv5%Nu_xE&U0R8bJh+1#LF3LbW+%(VjUEFHw+ zWbd?!`f>6xfBz+zPjZ~}6lgv_q-;DMaHQeI6I3-XuJUI*Fb0`8l(^m09!bqs(^K9# zVOk4*YZ~zpr;d+%zjcVy8{<67++Pi3QZrN>`1mGiZNYKi1DMEMZaXkrPUwBv8Nb>L x_kytH!^*Ri)=A3;%yg1dmk-us`eQzR0C`L4%g3KK4S)au002ovPDHLkV1hv~(^UWf diff --git a/graphics/pokemon/furfrou/matron_trim/icon.png b/graphics/pokemon/furfrou/matron_trim/icon.png index b579007510fd7d197da2ad5bdd52714a7b19a1f3..6d379a8cae667df9e6b41cbc93c711be13c77e40 100644 GIT binary patch delta 381 zcmV-@0fPR;1jhrA7zqdi0000?P=%b4dp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0003tNkl5ki&UiX{P2_ZE3p6RaXwQ*_lX(vt$1b7Ft2 zO`D1c$4-i=U!<=UOu$i~fR%^ZkUju9b7-LxE8NWGD6*mU{Su)2Am^fHrmi(~eH2#s zX@m> z$Ped3W>nzEdYN(0z>kU#fgh;&5cqM&hc`b;K78_{ReT8iXeA#4KWaW){J71)3f delta 508 zcmVOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00C)9L_t(|oXwK4Zi6rohIxY%Sz85_>_O$m zMzCZ~AF@vnbvy*BG6p5jkdTe&Frrh5?3xxE=-#T{{OSI?ll?i)-yKk5dT%h8pf*7~ z2cvo-#HDXbBy}K~Sy0c3lIS#wxJ*<$`a&rK+%iRcQ1@?rf2!v7W)UjL_dS5iN35qp zPCbx}RaAkz+kOMsFjp8iSoKXEB|C6JI~csSEl^@?H>umC1EH`Ld0t?%z)Fn4v3V+w zrt5Wg$TLWi%CmGngenhZ&gE*N2M=9q& zo}X(e3?~R^e}~bahof40#c(hPO40zeAAJm5O?EsJV05VGC8anEtPZt1rvgLI>Hzc0 z`iy~q{nq&L{33k;(ld^65j8BdAN|~SW^Paoet_zL_R9KEt1QKs$9~X3J2v=H>wm`> y20y;QN{sxF`Rcl#_;L2j%o+QUdR+acAD_|U3O}Oo4ki@<0000VPi-*q<6Ru0}Z(&);?}9f$NTl$d}G$f+Ow-n8#!w&HzLZSq3ZyldGiblo5Zk z;cy)-e6f;UJ4?whJlI1l16DmZT=bish8v3Px~iI~sd9`|Hv=9D3-hT_Rm&_1!R|VT zwyy-IO3XqtVt3$KXL*>VghmIfeksli#I(~F` z_<|oD9~OQTKCJwph7U78s2%yvkHUwQ9}OR7eo)7Ug&!>+@MA*NALYXno--X~^pO>| P00000NkvXXu0mjf>87hN delta 506 zcmVOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00C!7L_t(|oW+tcZo@DPMRfzNomwPWI@PGT zq)T*|-lSQSB?junTCB4*p0db-1r*|9R&gBJ&R&F*_#u8#SXG3$B=fA$MJF8P9>NC94GNQFU}frhyKYhfsi+DD{7sX+iq1}{i~x^5pfktl`h zNYE%`RW!}l6Aq*bt#_H23!h$QV&bFn(ytsRKFGFx-|!~!0c>0Uewwx4G4(%3ocJK4 wgR(gBL6IO^XA>W+NoqUe102=%!F>Dyl#BdHc&>@U3;+NC07*qoM6N<$fia*_JQ+fxS^Tgw1Gg%&Ldd?AOXw%MUH$yvf24vwOx= zriO+Z@fpD%R64gk>T&T@sJ}kLh^0Ga-K;BuF*{GoC%jD#t?~c-;{WIJzs%j{J?E`H zC^IU3P-am2oXqa>#GT3I$#Fr3i9f-ZapI3c7KfBN8AgVg@{9r#O^WHeg=M4 z{J8kXzeah@qo?}2_@(W=?C$*eaio2!y!?*`e<~g{e|kKV|I6B%AFQ^*CzUo%Se~Q` Pj1dM;S3j3^P6OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00E;(L_t(|oV}92Zo)7S#`6XiuovMhorvOF zIyDc|M`2+=>d=X$eI1aDvUUhWr8BnWNL4E(cF)c~ml@Sd@WKE2st88-68GyJ#3>5A zZmTx@u!1zfM`SBtu^qs~Mpm}35YD$RDa8=k`8e#qGPzKZ>7AMrNP!u>KwgEALRr-M z-i(+Fi|W{|&O|AM7`i=HP;(OqB|vk)#9>SpAhF66gFs?NT`%QORnxOX$N3O(qDDrw z7=-31v2!~Xe>E3Xb43QH5wWD5-gwBE-&?ub-G7|kBkAuIv@Yt-Oa<)DuYL3E?>MiC zV~XICT`pMwLqe2WsUHzRe3(ZHBV4AAA66`73D(U04D@=lVlZ`r@y{Sh?*LQ$NsRY{ z#W@l*N2ObT&G%cFQZ)cm7jI8S&jUU#pN~cceEc8?NJa*H5Gy{6G$9{0HkVLnO2~LF zM?RVgvZ4(5zyUF$Y~CqgtPfYjsTEg%uHJp)c<(hxvQv7&bC>=0n)05XJ4 z?dp%8pwv!-VN;R;)E^0o&`Jk@_cs7T1Y0Rp8i2D6Lid;mj1iz_K%!Ycj6fj*m`?y- z6)FMF`5S;l(5uZ|gb*;yFs``DP_};|ni2xFUw?=z-gkdZqHJTNH&#ZQKv%6>+Es7~ z!R43gojf180-TFFjsWm7i4ddd!p(Dnsy`6IHguY8QyGY<6@p(0$itMNbzgsMSv->9 zi*?qPmjGMdhkA@t09OI>eV88Fh`9(Lf4KfCJPMEi4Pa?$Y3V=c2Z$*S;6M-D?qvV~ N002ovPDHLkV1k~!w-*2a delta 502 zcmV1HS~27-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00Co3L_t(|obAv(YQr!T2XLc?LPyy?fFppp1etvqMcg=qeItSwD zuK}VLf^QtrbhOUTfoxhLz8LtE(ZzJ!C4if5gPa05>L*hWfB8-gK#T4p92NGbw^A0A zycmGuRSRa=&kT?UAqq+ffE2}a1awV(u7OSpeGCAe(|b7Qya#jwg7EIZb~_>RfVPPS z0OQq~G0vIT;!doa0SIu(OrBujK(%oK&0#ZH^uQIV#HO1RBxLzg1Fdb5N{D6v{4(>k zFbf<6G=)oVe+B@T8P>usk|bHdrEA&rU;!_mbQOY-@w$H9H?B!IG)Ke&s1Y(%*Ka~f zI|oQMctV!X>a(r{-+S#AG0%AmN~IJ4Xq4o3C&Z&X0yut{tImD~+|I&vIR-g^wVOqT sPlYH|0@!-pKc;y&9vrylnqSNp^fP~r7x*3(000002uVdwM6N<$g3DjZ-~a#s diff --git a/graphics/pokemon/gastrodon/east_sea/icon.png b/graphics/pokemon/gastrodon/east_sea/icon.png index 4eec76873c861cf6d13517ce86a7d3a44bddafa8..33ba3c5c51be388b68d91e5ec3fa81e0d16f3a06 100644 GIT binary patch delta 329 zcmdnWGMRaT1SbbG0|SFkKa zU;G)td!_%wIulVV-VZyz9J)}jMB$cs)$GZ#wbvIo?r4*jlb&1OXUNuUaPs=9Zp9Y? zsq#zK?6TU_?!z4762`8Zc4$VifbP{zYNw{mnKtdz0SUdGE4{wHHqx+Oac+Zad(TY1 zIj83V(N!PC{xWt~$(69A?)n>_#k delta 491 zcmVOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00CJ^L_t(|oZXYLYQr!PhV=wJ1nKDbNm4K< zV_gFAnD%8dXtJNF&}_;O+Kgupb-_cd*t7u;ajtQxCD~6ywF&shb$I*GYSfoAPxsKtY=yI$d8s~thD?r|U3&KI@XM+bUnnETz^mmZk`ilu472bA6K4XtKoqM~vP9BojJKZ3FT`s!e0pN%7C0hV#w7`Gw z03x!hKhOa74K#WL4|@jM5d;&*!Tx0L>cbp0O-Asj?;A*ZOO$WL0=Do1l!u~~$E#%@ zrh2K*-ZT6F#d~H=q$}xmvusAaqy$K8Nk>RwLr}UTLjtPjlU?G$NQ^MdM(jHp$od{) z21WouF%SUuQSxNH^8I%Cl3w&uO@M#GNFpnOx!W^6A&np#D4Fud0Uae%LueyaMNp3q zT_&0BEVB4wA2<7K z8l>)fX2F}_2uOMD7&+0`?c7wjdc#CVhQx!L6EIzuP=o?vtj6rTizhR^z4@DVp36-gW;_6tI{8}*V}N}8$&tLB#tyDY?8=|BUOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00FQ`L_t(|ob8jrZi6rkh8fa0*AZkp5>&Fj z230P*m5S^PNX>if9rnPp34tV9y3=;5RaHp-uz&wHS@wwkj;8~_-F(@pb8{zuRH{36 zbrNV51xuF5+hHM8szk1V(j6p$9$-)az)})m4W0ldn{Ivqf4G4$0SF6-6p-5vf}2Ev z!fBi{-QUrOQwnuHWSPGF*n!4Cx6CuBF3gj}hOK$r8U7u7Kw1ZcG&em!SuT`sDJtM( z!icSO4`m0)bakMh!Jl)30)gF;9J^zYkw~!tYzGQ~(-DAWW*Sw!f8pX`(`gn7kQHn( zo3+~B&NeE(e@!WCCo@9p(h?WnW@+lxPK|?5dT?Ik_7JpOfvP8sC_aBLNs9zPk~N6Z=nzAufvf^fe%C1!s{ns} zTwRes*0eB$rc5n-9>Pz760r#A6)K?uUI~Rz0S8P3bRrf(vznGB20;yJ?uoexBAO9G z#7jk>%p*msLC-I|F4c96!gc|`EXQ@iT|Hm-CrTRy`qUApaa={v131sK0!gzXwg3w$ zp&D570TLBHZy+EG>iiB!{LQ)m%wKvU6WA%9&FMwf45M}w6FZv@76aO>=N2Bh@{W}0000< KMNUMnLSTXjyv#5F delta 574 zcmV-E0>S;A1cwEX7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00FB>L_t(|oYmCLZi6rk0AMDi_p&#r0jcM@ zNIjyGwj8H+Eqj2CCm3UAHmTWL&k27Wm~g8!U-Mx*A+h7!GsM#bh{FjHV{o>Yz!jWr zNi=}KCSnA;h;d^VF@~j82*ej7Y(SM3plc{CqW;2zJMVyEf50OwT(_w~Df~XzQfJ`0 z^9raT5MW~A)-?v8Nha%^}v2K;XM`QzjkzF`2 zg9c>TGv7iTf5ARuD|FyhvfJ#y+s_nG{6TG7u$%%APJuNGnrjhc$KlQGfrtfdjms#Y zr%8hb_WaLuoTLQL^XPYu0HGiEiiVjL=m{|fk_tr5VdPF$z#j!dj}OqVdjurPTv-B1 z@y@L4N2SLt0l@*Yu2WDCq9~$%eOWdD4CtkhiTb()P}jdeNSaL^);$oQZQRzN&nd74 zvIpcwwFwZKeO}ud5|=dEuuEXJ@u{wL3L2m7=T!pJCFT6)4)b5eFJA7T;x)mswg3PC M07*qoM6N<$g1EBo+5i9m diff --git a/graphics/pokemon/golett/back.png b/graphics/pokemon/golett/back.png index d3b7ad67e39258e22b1fccbc4a6a023bc9e8582c..5a2ae220887b83ad8691c3801703188ef8a9a8f6 100644 GIT binary patch delta 717 zcmV;;0y6!j2b2bo7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0007mNklb`#3`Jwvj$9}C|KF`PuY}gnm(H|efWUB%t{ur@+y3J>M+o6( z^633f5FrvE`S%IIr<6RIfVTl;fK2%PJp%85kIC;8@D3s*;62ziUM2vh1hfaR7s7u_ z2tW}hj(vaKgvd=_Ev%bh_YKflSTun}XzzmsT+pX90-6Q-;(GuB%zCxJpZ7%r0MG-H zCa3qf0NBdP0os*f;*x%woLhEM$3?(qZXk~E zE1{D992W6};2Z;F$W1?_Pkf+V*9U*abpe@h zlK}w~LViroO-XXf&k%IpJ2x1p0G#xeo&hA+lNGhgTyKB?h0y6+dQs|y$$hK@2Dl37 z^)0=gOrqz%4Wh3e1Q3ic>JhuqHURh~7(oDK4Wk~qxuju=HYlC~oZQBK z35}o(nN+e8U4v|5w}x^P#y!9~Xw>pw4k|`U?r1`iAVHT9!hFE~#~+PPv@<*~$Rktj00000NkvXXu0mjf|8Y$L delta 862 zcmV-k1EKts2Bim(7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00PNLL_t(|ob8jbYui8+#@!GIWNM&ZG8MIU z)S-hpn`A7chSJgY5%4I;MPnT*B+^a}$d8O!iU&i}smR(3It|?f&P`cL{+qt{&T;C< zare>_czHj6-*@l5t5p8Ev-$Qf^|n|~Y)WzdW-V|4qWOFse;^LJ!dnBhMeAHC=W*a& zO~gv6M@{y?g*pP>BgCGI04O3>*0)?30t^XQ8Dk>?0w88$g~=&cpw1q9WdoQ49Ks!y z1u!3Fq!7Lve<%SFID83I@Bog>zy_8ahklScK3Z`JmJnFOw%jbAs}7U^^g1dlYV9b1~5QQ#RN}& z?@?s{Eigci{#k+{P55&mAX5Z7HUQOAQ-oodoGkCCYVS!x&SbzfXRw)&9h3K+GAfHWhov;7} zxCdIIf7xK5iojgpG`0Yo$gb#F2?Dg{HNvP2-~$>-DGu>NiGi&4Es&WA;y6}50o4Vt zC9Cg~WNHP#_kG1rFt7l6Y+*<{VCpw2(DPdYs=L}+qy=r2?>kPcU?96aj7cd6*r<7i z5NJ+q>D2v^>^4PHaEMR2&Suny6itS0d_k{naO#+{Nea}7Db0c!L6dqZ2^dctd`NA1 zXaW3h#KXi^*DNp|F9BHrcA7Y>JK&3yJ=tSmn*qBIsrgt2Dv3tGZWP8qqJzN1dNl0Q oB*5+@#%MDz{>2iF%KyXXH$^!C9^qHB8vpC*2u0Nx7@GM1zdNYaN^3{Om(B7zxhDtcBxuaPE^oOu^45nC zHV8JPQWMTR6LtZCRCx-XXba%I1KI+Bb9(^C0IvsF%K&Tj07Kk@rwu?PB!D(=3?P3O zZ&MwI4;O0lInD*3%ezl0ROVeQH33~M6`;vS#QGd1z~QO`fCRWzg`2>#LL)#bg+_pI z7eI<0+6j&_*1+fA;a9QC7SXPkV00UMP9)O}S36OcjV^yI7pa`rfTmlW?RG1oL z1)#eCc0oY`a{jRM3iW>o&;rb~Lbrbd223k-J7B=H0`>$VU{axuKnO&@q=FDgU*TP0 zK)|kmQ25;h_VWoaqfkbGw|oN3DBxQ@0VWhKfXE+|ubi<0zUA|sG*&nPB=f%BibI9G z{t%9bKqd?o;_m=f=B>SM_K`vw|3lyjcvXnwGdBSW_1!R5z-OKt=m6dnh)g?Yf_V%1 z@l*isi+D5;gYyb^f&5&!USDGcDR6GEeSHkF${A#@2+!TA6H002ovPDHLk FV1fOV1ZP1_ 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 Eg6DqaasU7T diff --git a/graphics/pokemon/gourgeist/super/back.png b/graphics/pokemon/gourgeist/super/back.png index f669c4987f5bbbdfe7224049daa066ea52343dcb..3d6a97ef5fc37f03fb13d1e600a300e4b48aa80e 100644 GIT binary patch delta 487 zcmVNkl58z^1~ag8|kf0DAAf0*SCtc&?A`^3Qwu-h6&5L;ygaca&Eb+5uD0pn+=n z`u!&p$FF*UKrGACN&yG?IDi6JDG;gQ38Z683I#AZ$w332q3{uSR;G7@Tq$${OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00GTOL_t(|oR!tVO2aT1!0`^m(u1(dPQorZ zw99LV2p;why2G}k^kA6}Fng>+6bCyL1Zm!8(2GLe#pKJ^b!+pbm}`FI`=?{A=lyG) zg(Ei@$tra152Td)p#zK+kiFoC-VdtJ9&i)w+~Ah=fNS>Fe+NP*7+kVDC-C0;KrmAv zcK~mZK2$W8Yt9S+>5X!93IJkv?Do;KgwOV-puhm|j^%UE_QPfK5^=f#Kp* zLJeZ#9!U)t5dnbHz%+8r?3JdGZ^%jnA7rIzJkdrBH*WtnE`<%0vc=JTOt6= zp-~i`CBknmp@1b~Zh)SkfF&X^38@BRXo*0uHNX;)G!r!FM8IQ6@Bjrm5k5@71B#*7 zi7)^UDAjAO9ic&j2Z)_|&$S~oSm6O*Q}w27M<@_Way+0^Uxd6Jp+I_tK)tPH*pBd7 z^nm-~6}~AQzz-Al@L_BHeSDVJ6LuQNyjAJ*0qz%L0AX74%Jjg062bBhY3=S uZ4np0c)-*EnQu-b>ID4|8bH17PS+nZElV5uDV>}E0000Oo2I|E{5M_T z@b29T>EmwU`Kcaiu-v-Y3t9 zUuI#7gVEF|hGRA_3x-b7;&~RQj(vao!D5~%{3v)FJj?X~;tyUi1HWvThW6Nre|l+$ zJ^$;S>r?r0H2aDlm#a7Oqrd0ZtC#sPBkFqf27VBy*EsXz;R@XOF(4@OLleX@KVZ=0 zxbp*iP|a0>AAIs5<01GEe?IeJ*R6A6dg6m8VC5lYevC7EGe5on=jk0Zp`8v!vj6}9 M07*qoM6N<$f{aMe>;M1& delta 608 zcmV-m0-ycs1E~d&7-Iwj0001qplF={000McNliruZ02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00GTOL_t(|oYj-hi_<_9$LE^UBY02$11~A1 zfnr$|{{s(tlfsaLuz!OKE>jSvP=$^JbDu(UTUZNw5f%zz`!`fUx)HKd10`w8j`=au zP5Tdsj~w#8^YVRDtxv^De+yEe%)@VQOl1T-K-o3^ zu*d~ACtmLf1@r7wQcg`$8(w3f~m$}-!X~6@l`5QD)JqqKB=0f??>ekh`l3iA1--+ z^gjk13t6#l5OrZK(5f!Xv4lMz`SRE`4i_4r4Hw{H_r`1>gH=KxT}(cj!Whm9W7tf7 z<~R^57>0g%m9Tn*vCX~)U71!_3BNFQl9T99n^sr3a{7(Qu=m1BsM6Bm5T}PD|Y##H;l61Y9Hj!s%1s@sHrul1)j{+d5 u^C1;#8Ui4%`iFQ(lF-8yOE~^Z58^L%O86X?t-x3S0000nCtp5LlFNhi<*`4XNeKhwhD7I~%K7IQ1Qi=4+9%Fn# zNFlOdxd{c?nj$ni&0e!2R;0atud z_So+VN5XW6PWNR=&7vt`efSc86>yvr0RM=;3OLTg{t@9hUNztW@G-vpkI2ma8Bj}b z?!GP6KP`EEKq0jFkgUD=$$K6?U<2>&!{{&Nvpm4ueJAqqwg1&|Mu|W&av5b)SZK1K>*>{PXE`yTluSEnq6&RBr*cfcyB+ h?E?X(6a4h)y?zKDBLk2}hqnL#002ovPDHLkV1hXA@k{^! delta 610 zcmV-o0-gP|1giy*7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00GZQL_t(|ob8mcZo)7ShRFakK@<=h7Jd-W z!Avc((tY`hRlH?B^R+~q9 zcMj0Me$-1teG9O>26}rH5CQ;R12s)|nNsD>H$$BVA)`Wle<-Y@)iV_jx!?^jR&{;G zrX4mr=7I&lL@6l^g1LIdaj#T1V5}K)QcA3XdY~V^Uz9QrfOIdVB@pPwN@kJ(moie) zl`8u<;h2sHh>c57I-rnw0@r(`wK8J-JGSqR!D?v|Q@Kgg)767>7 zrC=lK;6KJVe{jG6kT6CbLx8wFgV8xdfX0N`&5#suB@kd3B46~|Gf+Sh#YR9oPr`+Gv|?wmtVyA;4zk6cy9v?FVl99KaUlgxex60ME|}d7T7E8q|Oc%$U$hA{og)&o3K-iG>Eh zgq@W=71qQ-OP{4x2IDkBJ;%5RVW{~XTabj2KjUIhEQ2r_11@=F6l)xTW-mnD@w{E`){Zg z(esqqQ`^aYW*`T|C1+3j`U-IArT?U-lRne{a9ym&3BdLiKy(}{7_dA66g7XWUF`_5 zLUzUa_U?B8fk093BVeL0yGXLIN)8vl*y)X0wV_b9>l$~F9n1i?Hb$|Ft9}{QK%Ibd z8NkCLYWL9^H#R_7v;lT-4ye32I*_h~Qk|L(YDfprl&cY74xsi`o)9zvpgVm+-1S*U z8c(mOy_&&Cg|zMG)jZNudYe0l1n_AL$C37Z!(6W!2=6mlLt+9O*c33)>q}ipU?c;! d2>8W6h(BPtEfvj%g%1D#002ovPDHLkV1oZ@5v~9L delta 668 zcmV;N0%QG`1>^;g7-Iwj00013M{Ml?000McNliru

    1~AQgPDqE7$-02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00Ia}L_t(|ob8n{j@vL0MI{K^n^Y5Ju?5MB zoyfrk2?8A=#g;DPPF0E&xqz{qrAno@TI2#Qd*+@uSTUl@k}^Kkfw zl%nXr{!VNaMKMFI?)Xg|v8+MW`I4WY!@S+>Ou9s%nW9@&f0aRUfv~#fQa4(wOhGoU zk;t3U3IKNX98g!l)(CJ-w~|O30$H}BB|wIN=4RI900;n6rIxHQHpz4fx-xJVP!iJ+ zoK_fCkX^S*>Kz4ypHo+YOJ$`J1Q1US#kh|O41SPp*v@zE#QR1#kP3-&A(7gYO@Wsi z;J$ePxFF*ye+J;(wIStQ!1Y}aAQ^pkS^|n0phBCaE)=H#tDY~L%@j~UPDvv+UXHPG z4cL#sm*&a)CDYZFU=m(~VOrrF0w)}^>;peT9ORft(fw+ruB7U|K2IaK{;fL^J&-Q} zt@j1@fwc564S-00dEoOsKs+A47Udl1=YYWD@p$;Oe>u1NXbHe35%_UIfZn?G4G_nJ za^?5g#a<5q|CEKhoGI{dn-QLQaIP#VFdhYfg_xp;wId=x!a4=O%fye_^-hmSJMsB& zXTdB0fsaYU42XkE?+HTzBc~F@Z5RECN~ShG9lG<9qxs>@4`jN44-%txZTou_eSFVp z0f8+@F58tb`}lR6(*hiyepdMs?quTacJY<)59$x_m4HZd69#?&0000lc<3)%St&^C$y%b+6c9*%9_(DjSK zDq{6n1#<#>_gM>^l`$$nCD5NHHWQV+3C3T9le1VDM))|u5C%ylKo4Ja52|6E7my1S zQA?nT9`B-}Dd+`=TYuFliUvO@2y=f}BD4gXte!v=pbBSx+xGqSdhJceo$#`XCh8Kw zH;Vl5&|6kg5b2bb;z;1uLgm(eu zyb7S3@Hk4|b|H!q*buXufe(VR+ktYp$lrwzNZs}@0pXHmRIa@ecW6QDPf z3LbD3sNqsD@8dmfbw2U_5&&&6gpdCt=*{qmFaCWZ^2v}+diQQ(Ch=;pCt{G-!gIwH z*fKl{vP}^CnEgGWb2oaQ23fY7^9MY)Uk9Nt1@BJL1&;z}9}o6H{*3%>q?~d$42Jk$ bf49B>AburL+Gsv%00000NkvXXu0mjfHJmfG delta 759 zcmVOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00Lr3L_t(|oYj-DirYXChP5bQuJcOUgphzY zdI0NIU<^6PN&|VFfD2WZX9&1joF{Oe;LcYZq)KU2T(#Gvww@s~E3ItHlKUIZ#qodo z|Jm8uAb5kt`E{L1sjmZ&%jq?JDj@$luD^?B0$?@{2$?Vhf7n8Xv%QR;52Vh$+S`e3Mkl61b&<1oHYK5 zXy6>wfS?3D0tA92a9A-oiOd5U^dP{R1P8zn5JHr+8RFucj1!Pc4-|bpN|4CpC?Il) zLC;D*zI4egtle=>w2|7G5uIHjmqfpQk-geJjfr;G92h zPl@J|KGn4&xR6rv?eE<&#VrczNN6WxeR$YBodLS857zDlot5L>Xk&KI9!Q;m#d2Y& zr@Sy`r*4HSivo920g=)WoyDs;o&MKqC;ROS4-e zFz@cN1@3LfK(xQb@REdThmVQL=SsRaQk>M0kogr!kuYZaD? zTq-{vEY39-$$~nJnfPy0tG#Eh_hK+<%*8ZGAOgo{u1y)Q1-j{0j!^M{Vy~{r?k&PDHLkV1oCGKfM3| diff --git a/graphics/pokemon/hoopa/back.png b/graphics/pokemon/hoopa/back.png index a3d76883c79d83054641860b7c511bf785cb5d8a..64912b3236171b5067403cac4e0ec022fced7c3f 100644 GIT binary patch delta 646 zcmV;10(t%12F?YL7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0006#NklF940M7gl$aLTR9RQ%)z=_`h>k$BL z`o^yx16TvVf{p0tZvboPubg$IXW)NV31D4c0eIF$K-`RY88A5xc+xe%>_pQ^5dk^? z@APK?C2*p+Ax;1o5lSA}ZL>}QOHfFA2+OIzjLk#Hd?4gJ2RPxR7*%usVvB^iWCGGF zzY$~();p!1^dS3ZhgvK<_{rBm++4{KFWx)IZOe4oUo{~Y}iwH<2g2J;)iHv)`p zgu|P`M(lAU%fm*yD!^t5VFdVyXPXJ67m&*sd@U8gV+43)GRXj~-5D|lTMYpYehbq8 z;?Gr%P(UGc0O6L3GXk~#!sv1cJ)qimfHebI<2nL7K?>-;K%7#!m0-PKyI&cVpjqkw zsE3pVA^`1J-ZfKYJmtQTRpNe9zx9x|Bh^lpRTaSmi!*+lnbk#&-(ohx6BnES1|iga gJrJ(=fBJ9w1IidG9bJB1fB*mh07*qoM6N<$f)gty2mk;8 delta 789 zcmV+w1M2+F1>6RZ7-Iwj00013M{Ml?000McNliru1702g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00MwXL_t(|oaL20kJ>;GhP?#^9cxP<+_6+C z&5DBj3NFY}4y8udx>|`I$?1ZkJH;ovuudn${EHMZx!RbcNMUO7+oW{z#3f%5MwDP;EmE|2>C8`o|GC})1}9~P TnNh0`00000NkvXXu0mjfM@mWy diff --git a/graphics/pokemon/hoopa/footprint.png b/graphics/pokemon/hoopa/footprint.png index b7c5cea6a78372d9d46a5f262fb1781a88fa4cff..90b2344967656ce2128ad6ff82d7ac0c743b7fba 100644 GIT binary patch delta 84 zcmdnTm^MMekAs;2$2dVEnUR@+fkD+aR|!b5mw5WRvOnbz=hVNStlxr x>MmrcF;OXk;vd$@?2>{duC?Eg; diff --git a/graphics/pokemon/hoopa/unbound/icon.png b/graphics/pokemon/hoopa/unbound/icon.png index ca3bd77644fb3c3a98e1712d97c1b70961206563..4c77ca1e2cc946804dd08876602e745a567f7d81 100644 GIT binary patch delta 448 zcmV;x0YCol1c?NY7zqdi0000?P=%b4dp~~=bW%=J0RR90|NsC0|NsC0|NsC0z)*`r z0004aNklzS#HBH3`8whECiY0-2b*6vPx|&_D9j8tqcT7X2dPT%eMW>0neje zkE4#3&(GL!_^Gvbz|d~#Bbx z9MDt~Rd?A{PY45znlwq|vo3>DMe?t;3SXtuqr@$A>!1TFr^8zZuk*55s%}70l`e!=s?|!dN=FuUrk4l?+jVa`Kb6AXuK|2MJ|Url z^>QX!x>m!%_UT{<_{g*~@RmiT(n5dfFpKyFBvOP!rdh!)BA&`@UYN*I<3V(>&{HvQ zK;5z0Y8nd1#|EdBJ{|C_*4j_tT4pn*8^g<&)1%()^FKa+6Cij7NbutUAdMe#2auB= zcK~VpcmPPu?Mnc;5@ZFCjvy<5^aL3JQU`)e02v7~0;Em^82~a9WCVyz1X(NqWLl~p q2T1VY5g;Fb3yz07fV_O)%!hZs{VPaclLkEi00000@?kE1n&fp7-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM?_*Pxg9(J0004WQchCe?#jaqHrXfur(0m4~RFE z7NoI|GSK%D@QxDQ2r6}RkvxN>S~P~Fa&yII6Vx2dp$zw$XG^{mh3!e^{E#o}&Ru9N zo(@NpUR^YyHS?8>CS{?#W|u^~#^`NRVz4zyXpY%#4c@KGj6=M?M*ar~e-)Y@6ad{d zS1h#$gN(3Te}kIMtiUzJQUXB*~3nf!Sbg2hai2 oM!Nu*nvW4M^)EuM(o6aH0{BF5J}9phQ~&?~07*qoM6N<$g0P9_B>(^b diff --git a/graphics/pokemon/jellicent/backf.png b/graphics/pokemon/jellicent/backf.png index 6471d3bacb0148bfa7e456bff33a6e36be0622e5..f6f0b060582a1863caca2cc7eb6bffa942df6ca4 100644 GIT binary patch delta 448 zcmV;x0YCof1c?NY7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0004aNklbEpdqQt7j2_?;JbTPC zL<Dw$via{YgeX9!4p0r&~T#P!+*z?E>5fLrz$;8(FDoc*i> zCLO~_r_nh8R=_a96=!bYmf$2~c&)>qiy#DzFr_ZRR0JdB8n6LoBdE$#6)+j0@k1Bh zJHp^n8(@WCoyW?5Lx5AF(FFhy|u@?$x$Qy{wZoJ&{{9Rs#N+8>Mb=tnFvH@B-~ qZO3tEyF`<%{Bl{Eo&D3N|I-i9!8GX)m&)4!0000OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00E6jL_t(|ob8mcZi6rohP~kD>OiE93^kN3 z1Duryuutrb#0w;r-?nEPjO_xI+BGKyMY%8E{Wv)od(|JRVw^Q6edrrGK2HdFd*V%= z09-#2)X4~r66G1dBqE-L{2kzkrxQ3JYB=r#P3RCo?6)iEe^7}FU1qVDqZ;aq_^9df zInVbUf_h8MRQIwi0ANUfIagGI?w|4x8;~ig4nt{hzC+bwI9AGDAI(E80|`!@mj=q8(s)GcFlDu})ELGJ)NbMuDWSwbykyI5~0000zio9lY4*Rg5a^+E=*2HaV`sMQudifp%J#4& zVgy%1uY}2d(#Gx2v9q2x}vE?_3Xmq89Fu#H$q5Lr# zB4(Ai1kzOLa1G$wrh6f^^K$(P_G9?1LX?Eg}({MRq&<^ZuHKxW9T0g{Zh z2#~P$I0IrJ9NZMRIxXuT2gDP_O%+3+gr8af0000$p`8E#02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L009k2L_t(|oYj&sj>8}jML7W+W*QfWJBIV^9&Ad{YTI2ufZD2$Iri#1^jBSA7;A>zA8(>IM4GgCY%>8Je+XRe@?TZ9V zZeMKsmV31iG0PK}qJ62)-WTl$9PB7faog~`R>q!UjcjW~Jpeoaw{xWP1&#m!002ov JPDHLkV1mTbtKt9v diff --git a/graphics/pokemon/jellicent/iconf.png b/graphics/pokemon/jellicent/iconf.png index a6abfa5ce5b425db7a686c8e11cb37bb858bb490..f9caf9f13f12b73915c21475a7ce9a3e5df51c10 100644 GIT binary patch delta 356 zcmV-q0h|8w1Fi#*7zqdi0000?P=%b4dp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0003UNkl@o3b_d0QocHBW$-uL%0P|Js#Epx@Hd3u|*P5UmWiN+UKk1I>R1 zz4yw{gta~sfqbCSx-eR@*%1gk0X~&8TJv7<UR9TJd00maGKMGy(ShgzkN zhyjTMq09`;YMn7Qe-qGJJ5LT{CL(*ZmgNKoOaBP44hzkeI02R%(<}0|L7--|{Ih~r zV)KW%U~}%T{fYf=0f`p^lIy<}klav}y?}5JwgSSP+6qWbX%>*n_Fxc@g**hMqXa~; zkOzjOP=SZ|LLRu)_w9GVN*=iUkL{1OJUqA$Z~qUqf)d%T+6rU<0000v delta 425 zcmV;a0apI51M>rr7-Iwj0001qplF={000McNliru

    4?H7A-o{RjX602g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM?_*Pxg9(J009?CL_t(|oZXVKPQx$|hW!L*(F|m(NCq~l z`XA~kd8STuK^Y>%ElHmai3Q2jy9s2kNlDx^nHVc>yH9sI`|cCs%0tfc);Ck2qAB=Z ztaCG_^jQMB7(u%$HTdP+BsUeGq8Py|R~;)t$=7|w&u`38e;!7t_`R#x0(}X!xOJ%!0YRC=59FxQ+x3xw1kM#c0`yH3r z06uu5Ytb?WKqwEkY$USK;z+LyC3k$ zx7=5Ac-FcjyCe4WNp;5eUllUHZ2YWsV6EJe5;?8<_3cfeajf+p-a9{aKAini$sy{C z(gx)x8|4p_zHHmB%j$clf;F+A>>>c-edY%1d#!XMobIiXzfwknr%?q+CwkH6s|0R5KGjqEG z+a9hO#*`xE9oijjz6Twx5`Vs2dQUVVxWVBg=P~_KoB1)D!x~B^l(Bqybhvm0o0aV6 z`n36pVhY+ej2RL#f(iDQPID-n{hlf6SZUpq+409KK~iX)ZPXuNC}i(tm?147b9(v9 RQ^4?L@O1TaS?83{1OWNzu#*4) delta 444 zcmV;t0Ym=31BL{U7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00AmVL_t(|ob8lBl7k==M6u)m8n^)8Ilw@B zfFyALGYyzT;X`nhs#)Y)uKL;CAS%RnJ~zYE*GFah00>=+kqBK2M`YK&0j)iUfoNIP zyApu7B*0(a=#FdxtZzFY#+!Hpw`Pf$PITFTxw(v_rCAWCe~~e`O?3}|wH)y)=IwFB zjZRaRi0zlzJoM+-NgOe${SvQC2ecyd@~78iI!tt(vUXrP=)S*o87oA-)In-5DpRND z@-x6--z^U)ZUASFrAFY+4N}In0JsjCcR<3r8d$VAfVEC2UWY#e43I(f7a?TrVGCe8G^|1>fht3@ug~*@z&!F5TG$Zc&*nS-Z2kZxiiveCszF@<0000=Mq3`8?_SORhK|9@Kvu^7h)r%yen%0nBsa~TOCe7pVESQhoq zb`H2}1gL#K8A z1K<*r_Rak}EdCx~^A;L0z!m_zk6C{XBu{#m9Uzq-mk~C}S#RnItO-`PJ~;}+b(zyL4^AUJn!U`hxSR@18h z634i%0Zs!b1R6#XaABm^Eg-T3iV%i+y$DQT1~hpmn2J#PV+v{!ZTlIe!AX%CAf%Mx(2A)I0?s7#3h@4k^Gl2BZ5uuIf zeGwBNMFOyX3=naaqbG0|qAH?7_KOa|LDF6!q002ovPDHLk FV1oX?FT(%; delta 786 zcmV+t1MU3g1=$9W7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00MnUL_t(|oW+zeYa1~X$EAQXWIEw+xz-en z<9>idTRH?6e}N9h>xshSXamKAxvpM>=4{^Tsl{1Zyj4TKK%is|T*l6wx&`_qU1CY+ z>s06)Y@grn{{Q!$-W?(TH3rdj9s|REa7ja8uTO@rgMYFRf1sxgK;p+f0Mr2Q568X- zRR}<#lmaWY7Xw169Fz@dMUGF$BOgc$B@0!DA-X5y(WPHPVQzgS@*RLwUPuc(TY4Uu zDtsc}0{gBp>Xl$6x`#DDl@jJF^GYxh-NVsx*`HW(#S)S-Q~g#%9wTtsnGqZv{<~l* z3ds#HotgUsfAgmhrUV42>AwwlS-v5J?Yv(p<3Oj088Q|R(7;l3=*$tIECm~JmCFH{ zmIhFa?IPrWOv<@EN8@0k2y7tfl;zA0nSpRNQf~W^kkE+(u#tq&TH{FsK#-$J;w_A` zk**)}Qyi3K6YxSjH)Gl^ZIoWG#pij_3cOouzA8f?fAA0-<7h?v2#e@x&d)ym1rSEP0#O?bB_bdyg2h1SAvUkB&T`T&(c|a0A_6>#LUs}ODIIB)jIIv9}`_rE`cKw2*f0s;qBRmH`xpa+u|4tUSl zbydlme;>X9zN0{-HJ~*D7a;&{w^Q4N-keueb&~`ZETKgR+(vC;nIMGo;QXOV^BBM} zqz;f9{*V?)l*jj&s67;H@IaaXFbCjafP1%vKqm0W>rr4n7O>A~-6#@_HS+a1R)!F4 zhk$EU=x=5(+VX_1wbl%$){-X#9|*0#x2DO#Bo#go(IXRtap3%GJMi!04;Vzo7Gkmc QZ~y=R07*qoM6N<$g6nEdOaK4? diff --git a/graphics/pokemon/keldeo/resolute/icon.png b/graphics/pokemon/keldeo/resolute/icon.png index 71709729027a31c7c4338ed387306cfe72f5758d..8da8ea26c8743a7733db62374d9a8f0a6d5a106a 100644 GIT binary patch delta 409 zcmV;K0cQTL1mXjb7zqdi0000?P=%b4dp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0003|Nkl!)t%Jyq7-lXAw_50t8{b0zeD^Zvb-e;Vv)&BzOFn z0VMVH2Y?KGhyWS+&;z9MprSm8<{&02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00B}-L_t(|oYm5?YQr!P24KCxZCU#a#bgWk z4Z3(YcoE(F2&F?q22&3K<1We2NAcoQKk9%l4e}er_t-Tz+S7tL>Kw5=47Mx7z3( z{K{X_mYdtBf;QMqMJATXarlsK_EMSxl=c|7J{24pf@m5OoPzZ-Wgt`~D0q%%DJoGd zDtj>CeXCj*=?n&c2=rdDb}5C?{xEGz(73P_QVrU z{H-V&U&;5^Yrl`6eFtFQ?-BseB<>RwQ0(g_fEg+5bQ8c_YbCNF&`mi4!?^VE^;my$ z=!xqj(CZZ>TzUi4I*dSA)7WShfE(>ae-0zql!gf8@+Q4^DmsJ#!mNrop!IHm;~)hv zSyhx!3I<^5PB@HEu%J;uv+3&-aB83)N+BOb0AMxLg)j<%-qf@OtGWppppj*vO3`m$ z2#U;M>tu64a~?GdX`_bgSyf_VXe572FEWcMrth8tKAfjuE=0l^c-A^+1%z`Pr_x${ z2%a_eZ~@^&5$Gfe4~`|^tFPO}HW6DD=?s(+oPt?BeiB(d)2T~PMiMZGU==-D8)5wd zbgjE$d%ED^8Ngim-nlA(3mbr`#q@6i9?vxPp;N&mVf}_FpZcomp#c0T4lsX$v;*fD z0E~km2e1boI&kQB1?YNY^hE(pkAMjnD2ezKZgz4Q;B>tMG6~@5F@Oc@;XZVln|HJ?hw#J`PdxF&6aQM=F)uzfC2wAo z&!(#2ZqD7#`pDP&mC764%o~4}>Oakb<$r`z(3H*ZxCFHS{QI8)?sr%M%VI|%|qR?%uJVCv&d zuX!gR9ETYO)D|I}f_qP=I|kapHP?p$&<}xULEd~x%VofBy$D@>fAfC~qLW~qA}y`J zH)xrz6M(kN7hQx45MBjBv%TD(Y7HQz07@8g4y>XyYI(h-0MEfZ1I^zD&~pUT0lnp_ zPXe^p*2b?bxm!s&0_;EEM5`dO0J6EmW|&Ko=$+xi5ln*$^KKa$@f5UiR(aj4mVw?2 z3lQ#J@zk>d!1R$py#02yr#e875xVqo0G>Jlwf3~$4rUn(Ak)apHSi=bfLJLN-T`Ix zAh>zKdMv?FqpX3T8)3Q+(}+&D&u>DB8qvSTbU?(s;5@;ugc;^0C-v@IthbE3ek(uS g>5l{P#QzXK0N0fy$${^HfdBvi07*qoM6N<$f*UffaR2}S delta 978 zcmV;@11OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00TTpL_t(|ob8ssZxcxr$0yQSX(*UwiB3>? zSh;YA{SWM}hRxcfxJb?d5#{*wSeEO1$Gh<)&V|e5#2KpfhbBy41saEm@0CUEYZs-8+BpYBNmI$H}5B(!O3vx5J;~;?t zTFn#NceU2H&-!m-p90nadI)S)=P?fwvE1l-4!!Y#eo@6-Mm}+5qZE4k zJw20SIcJ_+f9~=ig}dniCQ*k4F$A`*pFy!d)%sXHpHskrp21M-YC0YrQ4!X)ei>}s zd;QPXbVR1ewB~{jU!R>ywfiRl;0TgV2!pdz^%M_d$vmtczb1hFFOzF708;=A|2i~O z6Bc+WuL5vmXaEPGUkzb<+nB*a0Iv+%+q=OZ z4j@xcOj(w@J||0HaW<*GAutyq33xo1R8_m(Mu5)1gUt%<<48Jgzl@kf;IkUj{spx4 zSdF6^0KY_8>t}fPgIYj}PTlijiJzoc*~(V-TZ}uk!`j6TTkAF*#M)ws`5l)wxYE6N zyKp0me~1jw<^KYlRxtie;ai8-T>LHrLL?Du>=AIdZ_KJP!1s zd21-30ejP}b6ji_M}!9Io3UMd6O0g%z&0-Lf8)`yIy4U85dyQo0%R8+SnV+@l$x@55A*vP!r5BBLNTRkXgU!xqzYEe2jjnwIc_BJt#SK14ZAw2}U?9 zdUrp9eh9p2VxbBhOFrx!7cK!nO1zvB*)ne>YhQNDDaQ|1uR#lBT zr!|iC$AOd*CAAAc@ex@yu$p!3afNK}RstPS&O7|Zp zzynS^g3tu<$0!`Z4&dY+R6)8TKLrlu2&(W12m=srYi<5RpyyYh?;r}|ZLzPn-V?$A zHg*u#`xx+(;KvS5NKbmG%fOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00EUrL_t(|obA-HYQr!P24ENb068OQSBpM~ z73A7@HW@M}9=a6@4VeR0_ADI>X$C)Kb+T3UP9~vap*I=y`ShQRl_dZ5`?}MM=?NCI zKuIyJ%Y06xQp&=0vJd$TSms#{9*mSV006hg57f>0c!UH3e=!X^M(u?(we+191oDkxG-8-#Tf z8$LnuGz>&&KH_?yV#`KM2UcB6LBj!W5rLtjGpr+UA$v>_TKgqR4>l3_)Ofr?PlAMS zK#yMtbQ6a_e{cq0qKQHv_<$hxJOlz20K8%glCq(|wIC@u=y}TWM@9t3wz$wS80a}z z6Hpo3f`FtUppHSQ80Z;DZ-InNxih%O6<`pYlL)9Q0RKkeL4}}iV{ix=Ehr*T-30x( z$2|^VPQZcajS3mfNiJgW7QpdDZ%X@ay)%a}#5LeDIv(Gb-oB0000(c7 zi2xt#f%P#ia|8fO$@+N$z(OGi41oyriqQ`M76?N0AprZBumGYG4+5ai;)!@JhU$Nb zKq|EBz@y-KcnF6`vf>LsFJB`}1FTsP3?_^iJSE^OC-omuVe}_DC!tA?PB6l*BN_4l z)Ix1v4IZQufM)|WqPGMlz-T}K&Kk@F^neATdtYAwXo%?E)v|i~J}e1Sa9Y4?z>3}` zTvVVIyjyYr=;BIibk;CT(YAzpkUf83-RzKv&OzcS?HLfJ0IxZ$+g2?&#{dlg39#v= z^a8LcK>&)FSO`rIHJ)_)BY+W}PjH?HJ>Uyhmah{}*%q*&hF9GKzSjB2JGKU<^$)lS zXt(0s3cRELQ-JO`yW4{Mfcc+zJz&-Xx1i}l1(ckf2D(FC#1wl<9>Vxo!BT&6N?0-x z%5((<%g&LgfV}U&1G-g2X(fv4>HR>IH!N)Bnih|%or+Ne)aYUFr3u weJ3w?WuRv6N6^RK5%4hZv+S(zJ^bhR2B?uCw(+4L=>Px#07*qoM6N<$f~El+LI3~& delta 714 zcmV;*0yX`r1(F7k7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00K5iL_t(|oVC<3Z`wc<0AS-a3nrHxTc^ko z6ESqR@1dyaQ~`e=Lpr2WHnxf(Itee$<{?XeLBwRqObk&Z-_kDqJAG&SY$`v84(XFP z3BB*$duI+?*1Lx19m$KS^H$zw!E)ZGb3F$Wt`O7Zn9iRDf8)NzVFJ_7Bw!E(V;dlJ z1>J)I1mgh!3r~Z-OLPDL;auVhJn%%j1{Me0%QcwrB@G5bxX4%}7VQ>xv2_x07(lor z&S5hM^#BppfW;+o3JwueA?5=Dc)$#pQ7tUnoA<=e(h=L=EtfeOVAw+GamCI-|~Mz}0u`v7|w00Ca%j7^?)=DFN`( z72qOyWH6%uFI!wBC3;5?tTY*&2K# zs~5qJfL;l%IzjbgQFrORfO8D+e+1!CFzm?pSXc@Te@p6OAZTVN!m+Ug~LKyiN1sK<1NNas_DtCC-z?fAAS zVHYF#RbIv_f609rHxI?e*UP7oTzj&LSnY9bfD$bEjH_y7O^07*qoM6N<$f~2@G1poj5 diff --git a/graphics/pokemon/larvitar/back.png b/graphics/pokemon/larvitar/back.png index 1a05a964ad688d1bcbe6a00842e267b4b7c5d2c0..2facd5cb5e2f791bad917ea1622d177705749ea0 100644 GIT binary patch delta 454 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 VGMBsl-E{x}002ovPDHLkV1nVQC;k8c delta 712 zcmV;(0yq7`1&{`i7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00J~gL_t(|oW+!}j@vK{hCL`nAFBhc2AOWK zeL$xS7KL_pEOhG_WX^E%bc1m?>nTgpK1Y_FW+;jZ2yBF(`IFQyW!XPl>LKv-*MNBd z=tsbF{^$74>g^&vUtZ-|wFE#|mv-?T6QA4(pTPUq6xfHsfB&MVC7|%$cPVfP!M~7z za}|CIYd{47O6wdNeor+R7&`5oYXunf;vV=+4xkd?{0R7x0(uFo6e6JBOt4!5 zuu2dCxDT+he@mt#pa!uMA2gJuzO+XVES0qVGk z9M~glTG$Dot15PaB7@YGxJV>u+Hd-%Kqe|^YqbEZ!6(0uO3-M?17`F)1H4~-RD#ND u_Okgn^dQ&iq6B?A4K?2h3`9--|MeT@d9QOiFdsYs00008^yeAh30Sa~P%wcCbuJ-@PjfC6n|1G=>xJrO@ z5y60Ti2!(!0ECGWT?6p?od9%^Pym+*3ivsa4)~S8fWH$^*8m{+dRKkjAOa|auK|BI z08~T*UKOw)^e2YvM-gf`d|`qJsQrS_eMdYuK~5dp8UaC<3Ty%3Gso|XtP-da^4j+W zfs$>RqmLo{?!mTA2@njHz-jb50_$I|ZAu7H6IVun>K6c%Ot>D+hd>|$yyi}jDfEvG zDF3$xoC9nj1F$6+;C^2uA^@O9p_G3Bss8y~)j|irNXQ1P01cr~EG7kTe>_%zp5Rd+ z_23JD6S%D0g#69M>-7-8vcG~M_$j3rEczCZ2~w7|o*l3;0OlPY%P~UIc0lVMrub`(A(T2!5r&W4#>Ch%b{U>}LpQ#$(VA2Ij#V4bD?h zNo@>qtiK+R38=-0*d?LAfna~Vz*Q5hhd>@m7!%naAn~(Ye(F!5HyvPvM zJ3x~|cMisM*U81dLQP$6qZW-*06IZBxT=%ha<;8EU?3n;Y+MA;X&gk`8Y9)wen?WD^XaWBKbQv%TrYBz400000NkvXXu0mjf D2X;Vq delta 819 zcmV-31I+xG2Kok&7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00N##L_t(|oSl`ws@pIW#tph}Q0UYtlsg9` zqYNDkmhsXp7VgmP4qXe9IO$e;p(r%V?UvF9D1C)4fi8uYk_K}6SG2V~>kF95o~4p^^FR6~e$hC2^xv zH2~((vsznKF`yXRN7Z?w?UqXd^g7c{5t(hY(?+^Ez-${oNK1Q&&0~}egyu<5B;UC? zAiAc9Pyx_sT5nHTjJ9iZhZVG;Mp~Og1_WhoumXttTYvm`PRJI2?0Xo2%{~W&MZ$p< z5M%TRe9vM4e?Z^&#z2(72$uk^+O$yufrl4ap)vrHlIRhT`{VPwyb}qaBwWaG24Dxm zGL#De533wV5)hJb+ubEV5=K!J!o2^wx|`i?-r{i%;z@uBFcvsZz^7H20eBsmGSGre zz~|c>sHIh{Z6PLM{&@c^w+}ON*u=+fy#L$e{*rV&e`H89ul(Ulle>ovT?kp!{`IeS zGkb*wq;?VU^LCvBq1mP#2>^uQQIiEIs0)jEh`M_cWp!g{ip9U8Bn^i+Muw0&+K#mFrZH3PS@KG_1BL)_Y zsfwGpe{a`wfQ(-WP^nHkY*#e%!aKp8T1v37&fzsNOCv3OyTJ`^QU&8QXHb*V)=`2R znIh;3pfhew1u{+-N?iaHaw|>2OAWjG*l0Jl7Xwq>b!#|Qp+10`bcuu_yq0b4244^fyZj!|8=VyGB~zlZ-2GS&g8P3k0T+0^LqVf1AP1( zfYrudFpz6!s3CkLHuJ~>0_r0Inrb7+hsw_gDut4O3iXMF@-qMBUFtCITM%J+znOmz z0e7-lM6c$BQg#5ilT2IQ^)vvOQRFvLAvztB0$Li40I=8ZfD$2yeqCtO%hxwkN$Xk) zGcD_y7FYwrS%2Cs0$53g0Gz6e)AgM_GhXvJ}2l?MA zLGl6Fsd%h!^^}07&%x01i7{UPj zPQXTx$y%f205HTMpjE&TkOZVm3Ala-h$PDTs;`;DjnJzrv+x0sBsS|H-35QkU(W=htLZgEtf(-#=%gSkDXro@Rei^G?t>9Kb_?9|5ofPyt#XQBn=PN4G6&M+D`-a3QGW90Jb%(%ab4#Yo*Hj zI-CKVVWRd)Q$P}4c;&tWF#0$EqXmEW1%SXtuxZ@_IncQPtO5mxA$KF`XDd^NFTrM0!r`3!A+s5bm1zA z`p8`6FQ$0#w9PLC;HsEKuMgef*d8*cOQ={h7XU1BguTPDxtZ=k(UT)iWAFcB delta 931 zcmV;U16=(62I&Wo7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00Rw4L_t(|oW0b&PTNov0ANRU9>9jckcp^t zVWBeeVj&rELy)WvE^!mVgpyv6ygFP=iDD#)Be|?+qV5GFgWM-;cLQ2F*wwYHiT{403{r+e;S-|+nsFuuoH~3BSgqEJm4qpc* zmiUzZ_(&C=%&I;wzc!~2-w8ZfZ}@yFN{e&(7={mzBOZa(I*SPCHqP1-)W0R;^l=3I zXR8Z<6?E(*e=4k9J&{t1aR@N=fl@ovZy`fZ&JPrH*!s$()-je6NUw6?@Q4?N+n0&F zqbhPV2as`Ex@?hPEG54wrtl{OhKmG!nQ~r8!N7$AV75y`832gIHnu<1^Z_&V2oW3au72bGd_L>s(m6v)az zJ<^x4MrUT@#1-S34jBdNBGwG*&WDxHl@6U)e*xhsV61`66+YhU2~Tq==&u07bDv`Z z&jh@6plR;2hxdCJbSY+(2C0C$qhoLr$mYFZzbfQz0=oMb(98$83T&Q(pjipF@^{hA z8uKaE%T3nyc1!}e1YPxi%Pmi(Wtn^Uh>71?^Mb002ovPDHLk FV1jXppIiU{ diff --git a/graphics/pokemon/lycanroc/midnight/front.png b/graphics/pokemon/lycanroc/midnight/front.png index 1c4059d90327e505c82df2494ae9bfd2e5255fd2..2a792d2afbfcc47224428f54bdfa322315498bfc 100644 GIT binary patch delta 770 zcmV+d1O5D%2gwGI7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0008GNklAL>Ud^Udy zf@t5#$1|Oc!f%cT=6n4lVW6K&=NUj$7Mb56SxJPDAT*#}Wl zJ=Y#c3j*|GCsdVr)%@#8No&Vr;PHPT5<3F`^s>@w0O9g`0_f`uK)-(l0s22i3hM)5 z3|RGJR8!Ttr~p={$swI^4L~+3|Ng0-ew2mN5Ofhk*CU-#P7;8M$a*Lz44__)Kd`y( zh&m)Fz&~td1MlTXxIi=yG!5D0CX$ZO{OWtwo>zcuv4;lLY4se$yL3V44ByhIZv5sS-;219omEG z14hPs&>5hi>i}waziU7&hNYY$kT9We;S60M+cWV*d0NhFQWtLAUIT)q3J;{0 zyP1v5@l8)Y0dq?4mOEd@1_V{-60dnKlDekOWzmJdSAO27)WHDmxhX4Qo07*qoM6N<$f_V&J AEC2ui delta 849 zcmV-X1FrnZ2ABts7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00O*8L_t(|oUPT*YTGav0B{BC0Typ7yE?49 z^fE}$VZOM_7ti2aTG|IF^*#pbZLbi9pna7dHX9RAkD(Nz^PXp)lxB_PKf6q{P$$2B zf21!8WB+SSr~d!~XUQN45UXJ!NB|5}KtKxY6GF}?2VSG>e-Q!7IRO-?dkPU)2?u1= z2c&R0dO`%T{ci_4I|+nDtPyu*bO?bji#ll~3Gi@Hy+Z*yTYU!bNWUrl;pYgjh^fLt zZ4i_LUXGxc+YT~y2Wo{~Ah9`QrW6r?HrRDh(c469j1KUDUc9?}XJb$iI`*m*ziQM! z&m)%uJ3u_4e>pgv96i}GA(f@}a)gtwV9faXhAN<+TzglQmZBi32?jF zUvh1%FseCJ;d|yl1-YgW27D1x35#>AmIkyH3s`0|3MsA!icmQr&eJ&*wlfLC1GRx+Bszq|Ej7r>@vJmFhg zC>0^6`x@9GfXsrY6-|~m+^(}gtd*f0*-G8!x((sx8Ing%$- z4!}`re|)guR^^x_9(X=6>QPres7nvT7St$9IxK*CEzlbZv8Lx-ms11wY`+OiizcvL za~f!O(5Y+#_h^NUoMI1Pd&#U;jGid53&Hr?MHke3iQPcy|>W1qfUa2%Kis5*#_4u&MCvAGfO`8bRY zKDGAZYJ_0?l&*o7mr}es8ndQod=sQs<7o1V^{+IHCSf!H_#!%wh5+Mdi>UW|)Ggq{ b??10UpfPL&sY=}y00000NkvXXu0mjfa#?Ej diff --git a/graphics/pokemon/magearna/back.png b/graphics/pokemon/magearna/back.png index c66e5f3a8f33493fd99866ba35018b0c7434b240..e29c4ad6c5720e3d15eb45f184e8edb0f8f46b55 100644 GIT binary patch delta 589 zcmV-T0&vtjJtRzn zd(kjSB@DtG^hJXlov?4)-iMXDFd9Uc;I?gT{r;+5-Q|+toF)wYgjnYZnlSTM!Z3e9 z5iaxZ2{XX{R6qjYJfW7L;=oc#Knb`v@xFvrh1;X|C^cd;UcxSyPyy=B(D*X}`fvx( zmCHr-GXeT=p2N^jm!SNK0M{Gv9KsBM&^CJ-7y^zAxcHZgMucsRBf!YsA?^S(dxMw* z?(B>Z#smQPU@wfijupV`W^uEE)S-U>$&4``!RAk?F(MTLa)LaPbl7Sr=`jYbKGbU? zpb$cu1htc^2=hb0Y!^Qr-}wn3)&gKcus*~kT>UhQH-O+804?MTLP`a%{JD>efRMz? zR{*t>gQ=77IF1m@?%BMZKmgM1VsHxt82AYg57ILLhJeyeh6;K>nUNI`{9k_n^cHr2 zdb9vYAiIaKS^y6|`3ZoKb=E@<@%iQgsCHqTkH83M{e;K>qkl#)&tQ>_xhK3RfV!ba z;JX53TW$!!)B(z$k`dKv8hc2@9$^uKn+N$FDdYDA$cNEqgfA!gYvrF1SU!xDiSqjd zC-;$1|8-JodiI~Bbbj_D?Q%J{1gyJ=cli1IBqfAX|4{b;<@d;TMtD8$?OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00J^eL_t(|oaL0UZrd;rhUum97$Z+$_bkahq@Z?1%DxgI>73j-JARz415d45$Cw6K7mLd%PXn~_o(O>;?}z~CHiwH2>RBMg^ev`TB1E05*fAm{LaA6)co6eh-<{+ERDa_+` z+XHrI0H=Al2w<5-3|Rjg&{}#x#sNa4%(Y&5V6XdoM&@v0l@;REk6s#1hq8u;M3@+` zQl0>y-vGfA=&j)MC_r>0v4~ZGQPe~c?Gg8+Cq6}nKi~rXzMR0G+?r<*;41>pQQ$T01u20R&}n*aa+07*qoM6N<$g1G@N5dZ)H diff --git a/graphics/pokemon/magearna/front.png b/graphics/pokemon/magearna/front.png index 18e73e31a0e181ea333781fc91e3c7b1d320d831..20db67ab6ed5ad71c820303e1b0c44c686c436c4 100644 GIT binary patch delta 757 zcmVK_H?Cw z0B-k)x-!OoWe71sa#O^O9_mU|#PL~-m=3!p1lZRh?t~Dr(_a(b`ZwXM|1*I2Dg=L~ zGvTDamVZZ}xM2slmph^{P;$md>A?aS!Ey&lpAYm4lmLw56f_%z zrEtw)`m6+;&cdGo%mVAn61cur1yFyMxjr->V1*BLVRZ-Q%eV+>1lCEar};)S7qk&q zp9-WK;(iRN7{*IgLtS1t^Dou<58i@IUL5H=d7kO6-4DLtr*% z2oL;kVVm3aK&l%@q$W{k$$nBKTXB(3XP}3x!&tk=-ii-s&#J|8w=2!_8jvdwE9_l8 z+E49h!&0zWN)0`s_nh_zGY-_U>Y*M8Cp`=kC<4IlKs@w%%^Cw}05QHJsMj+)9wLmn z@J|M!U;FA`1AzU4a!$c;9xs0YV`(HvT@hlhA4&q%kW)}aupD;!p)|G{1pf(XuY#8$ z*=1n>VBc-aRTK6q)G~~02j6x_@x!SIv~9Nln;hnVZK3AETfJ?!7Y*JvA_rK+F|j2wfDmJ?X*!XAwtz774${4^1rNnl&$56_oeqp zU_nG?)hCZgFL@JsClm>sLa-C5YU{raqlY}(wQ?Wv%rfJDBiKqMc;E8j#q1@4>&9Vs nV`8ZP1bAluAF%MZ$8Yup;B_I`?|mC&00000NkvXXu0mjfSFUIR delta 867 zcmV-p1DyQ42C4^;7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00PcQL_t(|oUN3R6>N?D9P&Y-;ke(84>U(InkHnSugy z3NrYY*y9~|_|->D2DD)A^Yt&m4&-xC!Z5^{Wd6c?e`o;B0ZNF294fT2wD5toSQuse zIST+sod!`9VTgzYjg&tRsBOG%438+rB;%-^UP2hHC2FuGqTJ^PY=!qXJz)O$iK^}v2}ENPP$y|e6KJ< z%}Ifpe+jNps|aG8rBKri2WnSDHT=#oZB+g|MgT#UScHo}ZMXvMJP_ErQ-%wWRso_c zv52ZuwE(LC-GO=@04O=GQN}9t8$elZ&$R$>$?N4|l639IIMDX024!_C^ZSEAZizho ze%GK-w{Y6l27^H_cfHnMeanDBYP}@M0Z;fAbpo!HjZ7i{RG!%2xmJ>n6au+MsWC4( zU|-@%=FbCUop0TIG(FFG+!IAWiKD}d)iUiQ$zdG#L_^uxRB`y#P9hdSi6&{|xVKUb t*$Pqdh+54^JoSG7nfJc{1fA;GtDn(^AFPJo=HdVV002ovPDHLkV1l|_i|7CV diff --git a/graphics/pokemon/magearna/original_color/back.png b/graphics/pokemon/magearna/original_color/back.png index 7472bcbace6cdba176d4c6526324c88131e3e339..cf9c0e3236ea05912ee45e60ff7f9cc91cf92960 100644 GIT binary patch delta 595 zcmV-Z0<8U=2Ac(t7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0006CNklvDu3423tkOAwsC|Km0Z7XyOE>Cf$%PF0fg5g_aMdj0Fm1VuLq z)8JY(Oi~GhumnFvgB+c(F3Z}7mAfz+M3?Yh7HIvSvsN|BDdGLrgrT1iFi+5gnZJJ$ zh6##rT7OTN0oJ<$2!Qj1T7rr@kxFu$fNK-)O8^yaub&U58nGEK;dd^f0@Tc|@n?eT z!yQ0Zo*t@S2(Az3H4Ody=#-xb?mU64!OsBb+GeMLAz;gZlmB(nh_FBy0Y>%?aRr#! z8^j!NWfw$ZOaKmV?1fR!u>$1WEN*|1Pjx5&nK6XT+x(Oo0&*cP-Jpz+Hd_rPJp> z_^1Hxh8}^>3P`WzhTu&dp!}4Ks7}+^LrKRcw=kr6P<|s9U+Ss=IrlwgL@YNlzL)Vk zf6hcXK$$jkZwXKumr`l(xoAJSKl+j1a+d_GZ;`mu`hQ4-*x`7)TmzIpqSyry^?1Bm hL<9J#0yE$%^$VMgF9Sz3*j4}l002ovPDHLkV1kLA5rY5# delta 725 zcmV;`0xJER1)TOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00KctL_t(|oaL0UlG-p3hDBvcYp&o1Rm{CW zE(|Yl<2ML)+B7yZsi4Sd0yCLQ6=JGXIZ7%xrE=n2*c(e!fro(sZsNEm zoWS@&zt9=QXCib0(ZEdrcJBmCis2=IDK3FmZUq3QP5^5dKg%*5NeBrrkQhI@vk5c% zi>FZY1L&#oBWMDFM86Hex7c-{m-;cbKx)#P1dt-BeCQHeNNh{##7r*8tRIh~!RHHL z^3LwXBs~M)e@0b>IGNVF`B>G62AdkV&@JHtj&2ACXy}CS)Bz?<9lqr;t$-xqEg7r} zNi>k~`OA|Bn2RmX-V4s>LWu8P0Bj{?F0KFp>Z(*nB-%ad6f1R9N*#sR`gAh?p){a= zim$#VyP{N30igXAV5bZqi+uO&0rE|$D@e)u9-zC-e^(L#DGRw5ZQ$cNXQ)Yh6ykZg zY<%fl>;Pa0FaTcG>lUy%131myRRGKMeZcDP0O!mC%nuO4Sda6W1-86>W>^oeHl0Z3 zUs^IDTBo#!;}AYzMlAtAy8*Dk0(2qwUV!jAMc-EeMo|$9Z;yB;Eph7^0@2$w<=ANt z&bKc`X9w@|fK$!`v2pKuQ-R5{fIkU0BWF?-O#p^m9>ZWEixAi97`l1~C#((&O638E zS*k;$0v;9li=Ixjq_`{_z(NDF6BsjV8G3+E2>kW}|I+>dwQG%q)ENmq00000NkvXX Hu0mjfc(*VD diff --git a/graphics/pokemon/magearna/original_color/front.png b/graphics/pokemon/magearna/original_color/front.png index 4cc57d909e9b409770f39b82c95aa7bfe8750a97..afeb78daed2f647ad839d3932ae25c437377dd76 100644 GIT binary patch delta 763 zcmVYXb3Wo%b&SIe*e$6At}Bc-Q|K5afR< z1PSkiH~qEzJHkgZe*)ag4bd4srj+stFedMA#4{k8dR(p+Qw$vtJ#MDd(5Dn*Dy0xb zyP4A)fvId87vcm*COud<6;}Pmn_fTAFPuA|D1)Z;F}m#7X$tUSZbkDECu@)#KNuc7 z^ipUx2&C|l82Y4yGM$A#14JTxFNl8tS4weiAHoOC!L#K+9hfiU5=kS#PEtM1Z$!AD z8}XrafIiOyG>w^x8GW*o@%|)1H;{HSPiU=$iZtAG5=o<{rFW>oj&?TL5(v-dvrvak z0*dK32Ekw>G0@Rf1r?y}i8|t3*~&dYrJEVS>7oQtfO5nRHj$h54s~e+eYAg=wGc$$ z43!=KTi9^h^rgKxF}5V?S)zaI>~fh;V-yQF1nfoJWjmlPtBB?9t%T>$Yg>VGw=A}+ zNB2{2Z62Ry>)O#1`qlT((X9sw0Yd`+(DN`MIL4sV0B+aom^B8_0GvA_Xyci-2mLnY z!jB9%8~fU~0l;fOc~8M`9xs0YV`&V$o{Hek`k^F*7V-*50&;lL52dl!AlN6YuPRs> z)FmDP;MuIxp=!db3at#fr*DTP@lE4vt<0yf(-IqMy#*j}b)e$q=`I}VT5kspsWk)x z=))Aytu~AKw!=t{iZ}puHxWri=kV$U0$F5EPK}q<&`+Or~(5R>#4V zhkOK}SwIj@MD?3Rq(k0>-UwNz>n#Lyq^52EI*c}X!C3h^;zi<&|DAx9O0Z*Gb}wd! t1Zf>r%#Ddd{a=93?EeE6`F8ouz5pwWCtV2=PecF!002ovPDHLkV1l{BX{rDK delta 896 zcmV-`1AqL&2F3@F7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00QbsL_t(|oUN44PZL2D$9Flfdt~8+ZA{p$ z8Ur<9E%jnzLTBq8y6Vk@l%k0VEk?Fd6Eyx{+lvVY=l~v!2Vps_7lP9ZJ?Nn$hhCMx zK;nS|9M`v7LAyJX7~}M^neV6H_ukCBCkTwCC`xowRFuBce=k*4BZSzmYNG)m4(JFW zwJ!wpClHz(^}hzjkiUjP2B0Hj68IHX^Bj7%0cebz;~B`$-)ZE7dVSYk;-#RsY4c#j<;9S3a+xOIw8=jM zQaRafBoEqdopX?ayxcx)9t`ht%M_lCw5Uo3pK^g}>7EFT5^kBZ^<;yd|KS4011fayfAGrp_y&#UAO`JRBJTb-8l$ZU zAS#qnMQp`(_P>$}QLJ$L$7zGoR@|~I2w{DBYrrq)^4lzf1WM#k zr}q;kf5W0zS3%CD{NbV-3?QFL`9LOt#Du^crp$Hkg%hBi$`h4e^LNM4ob4|)D2I+kDWk|0>T1bx%TklXN>I{D*{+-ZO(jp z&?-C5rft_)kFvZZ!Q+?84%+}Mib4sVd&T$QjSy)Edc0_{U;S@@r~Vf}08t8U{R9C? W5>7P+eHhjN0000dPHC>(09Sxoz)_h!=UY zQ4ub(6wy@*cZpS~s}zo4Uhb6&i=oQAXZ%)#Xh0PLc%+$!*8ZJjzqD|2uGDANZ}BWILDo zalL{+MVq+;^POieZ=VAc_f_LN Qv;Y7A07*qoM6N<$g4Vdbh5!Hn delta 445 zcmV;u0Yd(~1BV2V7-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00ApWL_t(|oXwIkPQ)+}MSTKB)+&_Y42!jG zQf)&KDO$OqFiJBLP4+xAbX#&0E`c0dRK_SIWy~%}>#-{ekeJS2U*F%J$Jh@Cd?rkH znV~B@3)D4t9wc=^?kBAe_6{?R3u`t@U%N5!iU)%bcp9LH8<*oWXk5%nI;O;*4;l3Di(*ut{xtTH*yJfqLP+` zAY#9zf-SmU^|YxnmzHF(Q5olIBEWSkM6!vn5`iTXc(y9YHpN)J%U_tR#PQFvOJ;to z0mKGadNvUoPt0QtEst$aI4l>*Y=%Ss&vEz!&`P+i3#COX00000NkvXXu0mjf-`}nO diff --git a/graphics/pokemon/marshtomp/back.png b/graphics/pokemon/marshtomp/back.png index b04c6cc5cb6d34a3c5d5a6b430eca289d64ccb06..baa4e481b4c8145615246d5c8c23fe59bce9d0df 100644 GIT binary patch delta 569 zcmV-90>=I91%U;S7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0005-Nkl)#XsAfhki z2iG2fSWVFZcJxV3+W;i_HUJ{u1*kp(HucyyfRf%GfRg`x05txs2xCOwFF#j_42`euv@No_^`L_tGUVYg0Cdc2^dS?tev;N|Q$BWlDd5OT% zCcuZTLd_6MMsHu$5rN_)sS%4r^x-dAAG(Sg0a6=;%CrACW`Wb-#?%dh4xN7`%L^bJ zI*0)d@6_3PtxYC*LAcfc_{#$55a{5gD?;J$l#?u+BLW@b-Vg*JV-f@0IU>-Z!?Y08 z0MAK@`5qC-L?{Ha0|lsshEMlGyI~#x00000NkvXX Hu0mjfeRv5w delta 676 zcmV;V0$cro1?&Zo7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM?|Pl2sV-c00Iz6L_t(|oW+!}Zrd;rh9k}ya+Dt+qLjg- z!xyN8bAX^-3Zw!u1}HT3X$&t!`x5QS46Qc-eyAQ#luX$aJryNj*zo`9zyD4oZ*Km} z%2WYqU2A=p&`Z53;C>k(9a4ZGJqeVgrvRbB0Wx7A0VFH}e`Jsb^34^XgaKH}nCWW( ztBEdi8ZybtU6ybakVzoZ1Aw@&9|XUr0ui_I{UG@HiuCR+0gyr4bx{jJvRo1H(ti6B z0}c*A7h(JTXGFi8w>b%o6Vlx5epf1`J zdmPvES^W#(lQHN1ZdDV2aX_4a=SYRQMa+OKsUmNhNs+cQBA-QVzdyzga?2D4l!B`fWJD(NV#!wh_Ayq zg(?P%HW8pN`4rYDhEeg!R*Jd1hp1SbbG0|Ud{?Tv3HR@>JLlmz(&|3?F76*o;`U|^K+ba4!cXni~7Vc!u2 zj+W^gS!(}_#|5rF)|LML{?j>2W^a34!|Gx;e=!LBSKjqC+I+W;+Jn7+%fydKvs_Gg zzQp%XhTc2drn*~}hxa*3oNfN=?)3HZl|M`l#`)J4DMx+tsaFy^z}J{{jpbvV*9EC) zmaMX`(k(2J3>Mqh{CH41L)he?BvbgiFkXXShr1r6O+9jSoruP)=9Vwn43Erw8Lo$( zn#?3%$Z4Z$!mx))=#bKiV`m+B87vuHUu@-Hkv~CLqjJIR1FQ>K1>P(2UKGC8@Qp{T zr7MHQ;C4%0%u6Sam5$!ZHheQKUfy`~Yy837{hY}RY>lrX#TM`<79E=3U~_(#=+XX6 s27ZT`?01`D+$AJ){9gjSx__bm`N=|-5}PkB2Zkhrr>mdKI;Vst0GSD-ApigX delta 431 zcmV;g0Z{&_1Nj4x7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00A9IL_t(|ob8fLZi6rog~6L{<3{W&s}{;K z8gYR(J%EWuxksf6I6+{WjWf6H*lDm`oC~zP1wy=!H_tysv1--7mt<`o+oe1LfKdGe`fdsri+23glo{4di)7}gCmAZ4)9U>lN{kAbUNd9 z!8F#~f#@;^L8J#FHJ)lBAJJwGy@U$!q;4~+B_OxpzwCH~o+|`E-tTHhq(aC1?OyeV Z^$m{ln)|UL@$3Kq002ovPDHLkV1kNgv5f!# diff --git a/graphics/pokemon/mimikyu/busted/front.png b/graphics/pokemon/mimikyu/busted/front.png index c9c36c1f4eda069a6acc380acd062b7c52739582..09e78fac909396e7acd4d1b81f23d284b3fb5f7f 100644 GIT binary patch delta 415 zcmV;Q0bu^B1n2{h7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z00043Nkl$CX02NWT zMufS?0pC3!lg3g+5Kz}13SwP-uG~Yz9R50TutVg3`G^5V{Hoiu05&Ma&cke=DgoNz zKMvL*MC==#1JHF<48H<`VVVcQ39f&3#P0)IcEH#40^)$hZ(XbXXdJ$fXg$SBV7Q@7 z0mW0`O=$ntN65}>57}}V*bWAZS3o_>KaWE&J(KV?L$4v2ANQ9Z0M0|EgAwByWs7s} zMbYTe97JU&q(;E@hOzsLP9!sd$?ya1sN9S8i@9lj_3GdB0sC4B%1QM$7XS+Y002ov JPDHLkV1gh`!h!$* delta 480 zcmV<60U!S81F8g&7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00B-(L_t(|ob8jba)U4ohA~T55+9j419xQv z**rk(7XV849u0G^OPV*x%+lj+E76RyGj?eHRiE@rvK&PZ{d0-kow$T72uOe?6yHG* z5ESpU*Fzj8=gi(6eZXOQciJX}^OO+NtijqOE<7dVY{9vqe~x110l)$&@wEt;e+K{q zfjtmF9xeo6k6PP|2jZcZZG z*k-`gxLSE&a*LyRwSE_zgMh7s$*NDq0(4Gv4eF9b+{GygIj$K!RxTaaNCpj=?0F!T zaMQ>G#SJiKVdJ!DS~cLu^Yk$8M+9={JfB7>r*MR$G<<=GzFQ7RDIf65gu)N~t$qNe WQc{p8o+l#!0000;}i$wYh&c&x!h(wRf>!3;zsH%cmR;E>|xd`QR*d zYMFt;GKU$4kF^Emm(D&SQlFX{6Y1#sAZU(5uj&rxSBIwvx@Xk!pW9mKkl)R6{IK$L zcDwS1CHE^itnYl#RIpvDS`MI_i&I`Bv|K6qWMcpwf=-5{!k6rdZ4LB$LYUcND v;;{>1+4&OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L007QOL_t(|ob8gq4uUWYhIxa=vkLEjXQ*U3qg3HyWoM#oAxIDo-^l`HN+UmG}mLohhZgf x2z)4;^D#<8Q}jvc>;%)yvgH- z#|xt6UBa)h=PP04eI6+#SD@rpSo0^LtvPp~Yy+uSwyP1)N`O8OzUIc5^0&ab zpaOg~15$u7k9J*_fx2L8=~jZs6U~5mldS|D7zC}x4v+@SB`5&VAv^)<=zuy|w?G77 zK?iDOHvsKj{0b;_JO((M^)?6rK;D1HGvJ7uK)C{Hx5o<*CERcC12`(MCyQ=DTozgvH3WKmRQNJH8VR08Wb+ zzcg$>zSP$M<*QhY=Q~&s0QD-Bjv&$E oB#$xLhS-wgHKBgqe#gHVzm<0sRa!{givR!s07*qoM6N<$f{I$t*Z=?k delta 528 zcmV+r0`L8Y1la_T7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00DhTL_t(|oYmAzQo}F|2H==Q)`_94Yk{+e zzy;cHfM!tFX$E}%BM>`LBfruaR-m2xe^ONUQ51i*?qI(S?%UT*A=)+&0Kot&_#@la z6AzsgY{YZx3DI?(Kf-lr4|E*N9q;?qPjzI^5c9dG^H=9af4q5M8u3EsZwHPaCqDA< z)M7OsOVC{ppBgzh0H6b+nt&^f)KN&A!`!hu5da33jtL0e@5c;qF9?klf$I{2bqK(7 z7HFKVTjCk02$Z}-Y6g}iO5P!11v&y?muT_;92nOlsu&cK0cb)nb&NNFF`J+M(CSpzNmuK3KjmhCo;Z=C>hZU~Ykdz!+zI z$Lrh3J%P5&56C=Y9pFYpJDP!k(u6>HxfLEzkC!4WZw-Blavxvs&;g$ybrs&{a)Wp^~wv*B^eJ&KufNBB!pQ2KsAJpi?*fzv~BV9jdQj SsY?<70000JLlmz(&|3?F76*o;`U|{6-ba4!cXni~NAYY3D z4{Pm~2`~QFe+au08+^N~=vIrR^<<{5%O(;$vly)YPFZn$`IMmZJQEmqxka$Q(0o%@ z{~)(<#?D`V%qIMNP|3)Uy6}~yJx_;j9`75QD)CioHLuJvDCMjd*`j;++EMW+u8H@9 zI{t2G@S5jruW@DiG(+jeqGPsxxBhxB&{!n6jxpDrb&|f@pPf@2`os%aY8nby+;(!V z;bhq@uv_}fhwBUG#rn+un;pd}X1yV{Fs*5dJnNb0NmK5NM!aLX7C7P4UtgaTIaSU3 z`~i7ZZo)esbXv@0{lvXL)9%T_U%NMQJ0^Iqk!L>eGxWg>C$95J+5OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L009w6L_t(|obA#vZo)ti1yEML0F%f_DKkJ% z>?KmlI7?5#(p!)zd>=>R0x5jTED^yovv^4vDNOsH{$E)hjc)g653b|}7imyny29My zGzl`q^hWU;klM&xh4_{N8y9YH!@$x9;fDa^e(8@l@Fl?if86#do%?NlVZ`*gC)&jz zX9YwQRmcKeVF2=06sU>||-HLOB{Ab?<%0LKoya%`hi;FD@Q-|$C7kG!we9Ng}o+!qWy%X9TFgNXnD N002ovPDHLkV1kVwr}h8< diff --git a/graphics/pokemon/minior/core/blue/icon.png b/graphics/pokemon/minior/core/blue/icon.png index bda398288b55a912dd1e252310dbc5e3b3704a18..0dbb8fe0e71defefe344c7374e6e101dea9b67d3 100644 GIT binary patch delta 282 zcmdnb{Df(O1SbbG0|SFkK#zZb zYxh14kN5xozrB)@ym(gcA-Q8&iu&JGT)fY1i!EK%U~YMN5`$s3H$#B(CO(GlsE~4& zl=Bh3UP{GNE8Q9!N^|%Z?Z~`iZ*+3%PG*-$5B_pwFg)U}tTzu;zPGeKj;|y)f@z+4 z!*;=zEsL2}{>sZ=Bx|<8I_bDv{EVyr_ZXl4v+DoK_pg#?|H|m(|NHR${Uz6$pD*n9 zwe#6rAvVW<=hs8`g a8HE!0zMW~W_yzPIgQqK-pUXO@geCxSMTxHf delta 373 zcmV-*0gC?Q0>1;07-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L0084jL_t(|ob8f5YQsPfMs5P{Im)5u8EZU z$Ib$h0XSQ51Y$Cg+a>D~sbn7VpcvOC>IF$KzE}{vj$bQyf0x9s63q^2{v(*4(35BoxkFXyJ=0Aw4vT@Z1oU#4T$1k^F)^57M` zf{8T+!QKKdz1BT<4$OV1fJB%jRX<4KS&cB{kV2#K6c@FvFjT%z8)4{oh4}$C0DVht T&YBMZ0000<2SrXqu0mjfp0=9u diff --git a/graphics/pokemon/minior/core/front.png b/graphics/pokemon/minior/core/front.png index e9dba883a1ea69f5a43138b327e1b604d7a7202d..ab7e8961565a3b26418ef1106f30530a2c94d93c 100644 GIT binary patch delta 381 zcmbQja-4aB1SbbG0|Ud{?Tv3HR@>JLlmz(&|3?F76*o;`U|=-!ba4!cXni~NcHdzI z9v4G1y`TT(w_qr-BBPL}rO{qL(zdRrxVm4@oAe_j7x>GOSt$o;G{>X-v= z#Xs1kS2}Bcl77#GFXrF3+cjA?1qCmy&AYz$|Fl@nIUkra-uk@N&T#Z#IPm$}j+8I= zIJi6n0<@SN53i4ZtII6FRJm91*awRR=?txV{%|j_XOH0j#nfQOxL9?ioJiNayR&x~ zus1K*{r+L5Uy@z}6J1cVmq=MR&l${$TL)W#u@cW?)ndDafbWc_cz!xoZPh-2;zS+ YHgI$Ey82E?0fsY!r>mdKI;Vst00CsMWdHyG delta 458 zcmV;*0X6=|1C#`i7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00B5jL_t(|ob8iAPQx$|MIE^Zz=%|0JDu)J zeFEGuVhi%5bY0{dR6RkZT!00)Wt<>^$TV3ad{(E6>Ie`4D*pF2S5re@;y!g~RN zIAbp(ge9fe@T4~W+8)!;vdQ+vkJ%< z0`_mABuIvMT+2e7WSWiocP!+%Y)b*&N!xAvl%;kSAgix!EagIQle4}r79W?nlfME0 z?H;6j^v0_zX<@ao-uqJWI`HeG*8s2N&YJZ{Ux^1?yT9UOp8x;=07*qoM6N<$f(U)O ArT_o{ diff --git a/graphics/pokemon/minior/core/green/icon.png b/graphics/pokemon/minior/core/green/icon.png index 529e6052025d649b51f16f09966532dba9fa8379..dc36402deb0af8d08658cb0974b10bafd0528bd4 100644 GIT binary patch delta 281 zcmdnN{FrHi1SbbG0|SFkK^f9I8t6M{B}d*T|w(_KMt+=_k3>Tv+%$Ewc+x&uef{Hyx_0@zig|V4S#J( z)rofTUl!}xt1da0p8s;(ncutqh~rdw10J(aLLA(;E;!q+zHnS3Rb9ZRUWc_wUi1X- Zf_K~;U)|Sf0KLcH>FUSovd$@?2>@5pg7E+V delta 365 zcmV-z0h0dX0=NT^7-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L007)cL_t(|ob8gkZo@DPMg0f-2m@UMl;YY9 zRlNqNB8~|VOZUr*tPSjBt?J35ymcthp&Sn`A0STG{qdsP2F$xnpm$BA+%HcSkPN`V zf)n7gi9D`Jmq;b^kOsxLHc>Cgf^ly_3_5&-)z?=7v5<15L{V47#% zuwAfa>tZJ1pLzL z{69Z9$v^*kz`tt6yP5wgUL?Nkw^;Fsx$U4^98;pBY}JZ%(O(ja->@{j>|g5eVKLKA a#>_gNBx`%_$w2=xc)GIrxvX@Vz02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L007@fL_t(|ob8gUa>FnXMg0dmnh+NSn1pqd zMN8UmQ%$a5DzYN!x0Qu8u~A4>BWq<=(3yfPJahLkJE!aZdC_$P=I2dd@J*!L-VPR! z^uXSNGvK0$+%G|wNF{S0dd0Xl(IAL|@zsKybo^SuP9ndHe={>u;-h?+wVIf-1wOJg zmrX7!n%m1~9@__$*>65VrF+y`zxIU|U-nJI2?#cFzrf*Czf9+#5vXIxhdwEI1ruw` zf)@*t3|jZxI5Q8q0uo`CSp6VHVl~2$N6d}NlUvlb!ch5s+6Y5`E6fjp^JtA)LN4F{ P0000#zZb z>*}U`U;q8T@8@e~w(6$Fo5VF@pNjmQwmiwX9lD&WVluZr=LU|gEDT0zuNgWfxt6*+ zeD68AMa4*cZn_9Z%du|?U9*q26~Ud)76jFWt~$(69DTmhj{=1 delta 369 zcmV-%0gnFT0=ol{7-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L007@fL_t(|ob8f5Yr`-QhW!r?5s1eO9x@j7 z;Kug1qypWRq8jx6-cA{t*pRWRC+p;`Lm@+Ne0cAJ5P{Im%SzKN9E$I$|k z9ynNV23$6g`z7fTsbua`uNc=R8U$G|zFH82j$bR-N#-|ke`ZDq{4DQgtp?_3fzK?> zWs{4F=JxU#$Mykb_M4AT>Hcf2U;9FfFNdb#1SA`|U*K@6U#4@?4Ae2?Qy&z(f{8Up z!HWe!2CaK;9GQn$0f{h6u6~druo_{=BgaPN$t`MIVW@oXH^R{03iAUqx?SfX4?xlY P0000#zZb z>uNi#z5oAj51!oHn`OpTEwQ?F&z;Evx|X-guC8Rd_vDZ_la7-vV?)nPD~3fWfp-Nj z*d`n4cAoKkF3HNYaHDOI zaL-NPRv(wolihne%WfQa*CAV7lNk2@^EsW*tN$(Ex4J*~)nZkOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L007=eL_t(|ob8f5Yr`-QhW!r?kuio0UIRtF z@u2<9sYV?ssz<$lqI;l;JqD_JvQFMQ6f*S2hxa}>p00cFqU#3CPn*Etn@G8R94#Q} zfrABSz-1G;Uy?47O6ETGig9hCL68OGs|7LW__czaWPTH8e`bWh&+=~8YG95Q_{`E= zHo2&1ZZDs4Y#&f&zxfE2?!VUhwJ)^za%dV(K(dkh1rDeBWjZI#KpjIq^+CZam{@ZZ zyjT!q(7NZwk$H#}kO;Hn>IW$Ts}Y7ga%@zd+@iJ>hRXMTBMkkmFh8O&dJ!?0ed+)J O002ovPDHLk0$_p-3YC`t diff --git a/graphics/pokemon/minior/core/yellow/icon.png b/graphics/pokemon/minior/core/yellow/icon.png index 270115f6807b85284596a9f7fb53c775eebbbba1..b0cfaa1c3985f5d6014157fceda8787e255a6898 100644 GIT binary patch delta 281 zcmdnS{FrHi1SbbG0|SFkK- aIs887-L8dMYk=Nk@O1TKby??>&;$Ua_lKeY delta 363 zcmV-x0hIpZ0=5H?7-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L007!aL_t(|ob8gkZo@DPMg0eaka*5uWG+;4 zZjnk{Q>fPce{{&)#LisRlSO&!P#{A&9$Y>^oUVKDqU#3CPn*Etn@G8R94#Q}frABS zz-1G;Uy?47O6ETGig9hCL68OGs|7LW__czaWPTH8W`w}cee!PBYG95Q_{`E=Ho2&1 zZZDs4Y#&f&zxfE2?!VUhwJ)^za%dV(K(dkh1rDeBWjZI#KpjIq^+CZam{@ZZyjT!q z(7NZwk$H#}kO;Hn>IW$Ts}Y7ga%@zd+@iJ>hRXMTBMkkmFh4rGQlqdCqmlps002ov JPDHLkV1lZemK*>8 diff --git a/graphics/pokemon/minun/back.png b/graphics/pokemon/minun/back.png index 1e9d01ea3cd8039a67e104c792fa50e555301df2..f8b11aba90b7755feb790c7471b60c8af16b0802 100644 GIT binary patch delta 501 zcmV;Sri1~4Mvlz_0b&;SzQxfbg=JP3aQz>I*)op2{~vT(h^5nxWJFUNp8VPpX& zfGGjj1{y*L;Q_$Y1jvM_5B>>I0xkdtVg-;!`kTmyu*yIofB=ZtYa|5u2nfpw6a;&xV-vi8q z{{pNFX$~+{;sxj}qotH*7C4otp%jM}q{i)A@td&hhAV=l7u5hjeB^<5^r`*P1F=(! z(tzWb*vtcW^xD&^n0ZqkkC2#yrli^22rfX%d6NK7dkB;@Zvo!#+_dFzy02lPpI?)E z1^})F)NN!ZBmUc{p7Ziv9W}O7@>VGUg2!$N_F#QC;00000NkvXXu0mjfx4G_A delta 600 zcmV-e0;m1H1fd0x7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00G5GL_t(|oW+#8Zo)7Wh8mEBZ%}wHA6KpaYICA zNqhyUc4h%Lgqf)qcxlGF^(zH15!|+prSe!Si zLxcpeh#lbB2eicu3VHr;Tpd+OuL@xIA2ufK5AisqWlB^cc=%9)G zB#fj0XmrpTe+jVwIEXnY0I8FeTB&q60qigXYU@g;B~~XLD0TS6fOQ4H90Oi&0ni?| z0DJ5pU7&fFS|i5*1!xI;&HhjzFFVY3*fy&kjR#q`Xg(*SAk5AgGSpy@EDHj^OfulG zF)?e0*Y5=b*U~Esi?Iuz_T}xFz mwsasg4c9-a$EKxzKm7ycI`&+>>(0pl0000vHQL41_HZV;h9u|8b8bh`AW3JN)s1W*9*V|;(*ch3M!;CY4Mes+%os6u#2SOMP5;7R@4%D?kG8$xPe!Vr+EA`+{40&)ifgiy9#?`MLk0A(6?fEan( zoVN@x1Fst&t_#(wIn14cg4ESt+t1T`&$}=bd<-aFqj0Wg0LGB)v9X_C2&jJpr?QA6 z7)$|t0c63`@9$y(oIDO7kN;T%?EK>Mr@s?C0I93&EUHVs(;QHJ40H$R?Q?)EaJvXN zva_i1H`DYUst7Rlmk21Yz!x_kQ=e6E$N|Rwo4|Y2vA-@<-(rV2^K&C5Ki{);SJ}z> z4T7m(vQqk*IX<}MZ5tr@R{(!6myR5l{Aihr-pM}5jOTmm$}JyzqFhni=(hM1QuA9&r*lQf-00zRxi_Zn*4 zZKNrHNDrG2VRl3ERvw2Zxl{B!T3#%?-G_kePX`*U2w(l*`UeiyJlPQU0H(|U0000< KMNUMnLSTZSc02a~ delta 797 zcmV+&1LFMa1>^>h7-Iwj00013M{Ml?000McNliruZQTc1r*N02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00M|fL_t(|ob8mqj}k!?#}{r(ieshWDj3#8 zu7p@%#o-wDPB56<#*2T4W@$0EVG^zAb~_OZCf8aa#^O3SlQY}hjsE~<{|4Xu0A|2= ze}H}~-ur&$y|=q>u&n?3i?Ssn%;dNH%)OdHF}hNj&6!5WoXS z0F^f*2;!;m-zdL)gj@x*+!oKcL5~au1BD}OJF5zVaff7`|Az5(nP%y*A%(E(NdOYF zWCK8$rr#RFHIRdN#=N)u4L*PZ+)sa11%MQ=WX!2Xf1sg5o^$>tJ&sC^VOG?br^^}p zA^a$&e@!F^KN&>Pe{UCc3H$LSfB^`Dk ziej<)f2WC7K=km!YZ-{oYKNHWYO{od1@UuKlB>`+fN>kXT(?Ex*jTM=-TA=N&FUGJux0an~_2<(mV_O%eqXF$H2X1$- b-oLKj0rUjKAuBXB00000NkvXXu0mjfPwr;0 diff --git a/graphics/pokemon/necrozma/dawn_wings/back.png b/graphics/pokemon/necrozma/dawn_wings/back.png index 2c3fcb4002651f85f863294d6eabf37649089e4e..be258fb089c24503b54d36857cb82b0b9016054a 100644 GIT binary patch delta 776 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 Ef`MOZrT_o{ diff --git a/graphics/pokemon/necrozma/dawn_wings/icon.png b/graphics/pokemon/necrozma/dawn_wings/icon.png index 558ff60884d57e48f890db1701dce135b4e0cced..c5fde92c441b1124f506bf155fb9d0880ec434cc 100644 GIT binary patch delta 522 zcmV+l0`>jH1=9qO7zqdi0000?P=%b4dp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0005PNklu$p^2u4F9O(Dwo-v4dK#g4(A+WnZesA?l|3dS~P+kW%_Z{p|q zf&euBiU5(E%oRW`YQ!4TL~|V8McGUv?i&&J1Y;wdK(x>jus)DNXz(KYh{rXVwl|&nMb||l zwgBybkxv|L$1DNc|Mf7RCa`()`l5d+bVoIMTL({E``f)VVwe0XY<~6wa6%l>94AX& z9Ck!`tFHOcO*AND)jM-Xajxx$?m)0?C32#Y_Upf{B5d1X6bW(G-&f zG6AbVCc(7nuL8+}Sp_l+W);XRm{lNEFfmC*AiA~O1T*w71QG`6<2Ll*0s*=~wgGfK z#4^zg((5NZNE3wD9~bV?gRRsBQ4R9wAqiqJ$T-*##A1-VU%xGgFBDlQ_-rr^SpWb4 M07*qoM6N<$f~}P7hyVZp delta 637 zcmV-@0)qY11jPlA7-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00HSqL_t(|oTZdOs@pIShJAx!vTGI+$pyR! z6ujv>OK&4Xd0up5fvNEcdW{zdQ9EG&F^720LefYH0j~x(`BA&jNmk0(lpN`Qqu7^skTVU4Zheub(xt8|*Q*=36BE zj^u`eeF$5^3m+^;0ZP&*QkoA1p)^m(sPtg%6gvwe*`DJMrYhF3N+W+@j*MlW68GEy2id5MyS^>ODichI% z^#)9lgaph`v_3r|0do+N-+{4hWIeos1(=in7T5+r7GUftK9^{xn7fXDzno)DqCNIK zF=`WrFjvS!yqjph3l-uODi1|~HaOOT5UX$ixz>3_?%@;QeF_}?We^juegW(KWBmcX X<6sN754r6E00000NkvXXu0mjfvepr> diff --git a/graphics/pokemon/necrozma/dusk_mane/back.png b/graphics/pokemon/necrozma/dusk_mane/back.png index 1a1b9e07e124b9f9077afe0a3b117fc426458bf2..96621697c5d444e83d7512bd070ee4db9eb0669f 100644 GIT binary patch delta 964 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 diff --git a/graphics/pokemon/necrozma/dusk_mane/icon.png b/graphics/pokemon/necrozma/dusk_mane/icon.png index 90c74736eacfe8ba6c8e61a6fe7f6d8a00397b69..e0e4ef479e9e6ed81b8be8ff08ca391991ffd1c7 100644 GIT binary patch delta 412 zcmV;N0b~BJ1my#e7zqdi0000?P=%b4dp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z00040NklOCkrsO$~qY z-~fk4w$^~l(8vIRxEpZfayJl|V&uav+i)jU1Pa>`0#q9~&q*8+TfzL5<~ifB?H>fG zstlnPXc=M`_|gyVzxT6q93v<)Dr_$lmdTN$K^=i^wH@`VvRT9qyPp|lTkP3hKiS)nbki{ z#}|y>&xEXVVXholTAUU5ioIbucwXH7?C;RlY0PV+n8j1vWjWndqJNFIfxHdm&kW@7 z@4he)`N2RIe>fY+>JJA4x%7vFfn55-WFU|HAz#)Xz5xs#A!)N_;@SWJ000O{MNUMn GLSTaZYRSw1 delta 485 zcmV%ss402g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00C1;L_t(|ob8f3Zo@DPhIIo$2r||}nj3^l zS0jp^EYQ zboXXh&?f!Zw7@@oC!Ag$6B2-g+&wF@OfTiohJ=-agCyv`Q~&2vYS#Nqum zh;e{sb3Ede-Q;w?-x`Kjzm9)kegw>X{Rc3+FTmXSSb%x(F#&@QK5znN#m5ND>zWVu bw|sm8pe-Q7dAjRq00000NkvXXu0mjf=Ag{O diff --git a/graphics/pokemon/necrozma/ultra/back.png b/graphics/pokemon/necrozma/ultra/back.png index 798e1290f4be040a6e2a3513d472a72a761a1f92..1dcdc3835c094fcf1a5c78700af88858cfda9a80 100644 GIT binary patch delta 689 zcmV;i0#5zk2KWV#7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0007KNklyGUp2!)G+miYefJD}BCwQ4h&oE-k`ZrA4m@p2r09q_LK#*PWF z3w{B>3wH#-U+HD&008z2pdZ_P1C4zE`0g9Xw=u+^ZF2yRg9H>|2ap~h`Vl~fBKCg} z1w4kU-jDND!VSse(f5G2CAbI)av=bl96iOv6bsHX zWI=G3h4kAPvj(V!55^|}qI^<boXph^N(s*8w_Y{uDu7y$e^)1w$sr=50!Rd2 z8>m5n-4k#M;KMCp#K03Eglz){%L=#%xC$9Q0)kV$V`dj>3m*WIfYU6(qYB#qA)GpA z(aQpY5gfi^E(F*HFr5*gWw;5WgMS#HdY^Kr)-oO0ONbiPzB^+E8u)*R1evI< z_0qKsCCLF8y0`N=|*ji?8bqq~oD7%j_kB_o6T z{N=M_+2JdFV(_Ddl0M2^*a1i*HT9DUQ0(kYy>w!`03@+3*YluBK;*nBkB!Q$fv`Kf z^pcl8Yb&^IUF15tzUK?TZ0vtSeF5oUgCoHDOa>h5Ghp?=)r&`mwh71$p9s@yIRa9e zoq=m=v4Equd!;|d`urkTSTIGehmLOvc)h9TWl()Qvs#3=7~f3O2U5%fY>9?ofygW` z_)0$@oL-uNXjd#3q|x>pOR7MPfIWA7OlSV))lw!R&;5COaA!haJ# X)uXjc7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00M(aL_t(|oVCFDHs-)bEij^YC+yD;x?;fZHhX}4%zT~+w`LWUI2((DI2K?wc7{qE zAhz656bnc19A5Uq1EPZ*+2;jC}YKNU9w+7T(7?KVsE0CZI4CU+t=$lmq z!tOsKAWDTUs49qy;hj{6j33 zOo3nB4x=Wp3(%J-PB-WwtH)mi1&}oYZ*#SaDxTUEFfJ#JDcx%-luZx@bnnFfS-$}U WRN~?VhO2V`0000=y#Kz2Y1s&_NwJY8H>mkZtq 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 e{x<}^ga0pL5hYQAt-(bA0000Hlc} delta 553 zcmV+^0@nSp1o8xs7-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00EXsL_t(|oTZXMYQr!PMRkKY%s`gWJ-QVL zys2+dnhS`i8y_wZ@Wu!R4BBKm(#TP5N(s~}`!gDU{r`-4@kxhou)D8x6s#d@xSs;z z8#4BxOtU*V>=WxW`@!`A4r3Ss$^_^J^wTwZWCOV_CWmYMe~P2*8itYOgrzyYg)(ui z2Tg)GdRJbvLod6*Ji_&cqin}IL2Q-<&xxZ$%U1p}a4}}1x0K}CB0ORkTv{nrBZQ|p zUM`~nFx46%o)GM(Tl)ur z(jJF=#6jBM;UMid9D4hTLvMdn9D4f=ho9|N9JcnKI6!M(T2LIawlB7m;t;fbL#Ih` zaN52I4F^_d(oe&o#R44%s3`#QhC`-&ut$(fI|K(paqgf4#*`NRr1OG}eG8_3J1W|I2=9e{Y%(jDPyA^-5? zRX-uytj*9>LBBr_UN%%A%>BSwPfz?TEey@nbp+?eNB~?cwAM^>R7%%Op!*(<19KVM zcCL0Y>RTd8cwPXy>ryGeZE%=!0MGq%6Eh&)IdA7HL|=%xiiHq-c@Ho;A@6@BD?qG% z44G!Dm2wj=^sgLg#lh&sn;F2X1}wSNf;Qmy*I5a;nZzT@J-r-4D-+PW+xEpkx@u(t zX&MekzSG5~nwfe7cCduG5wZ?1ml4;U);NyP?%^6wFH!#;V?n4Vk*VJ!m^09Z1!0}3 z%j!>q_T%P?Fq^WE6rXS%vG-ncm(T_nveP;TLRkWrDwfI3@9ZARLa^p>JW~8q9ogYE z2OhxgGrzwM(D&%#$;br^TSR>Xzh>YAXaG2mCO4bmki*_T4WHPKKUnb)A2mNqXaE2J M07*qoM6N<$g1?R)M*si- delta 713 zcmV;)0yh1+1(61j7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00K2hL_t(|oXwTLj?^#^#)F&(xUntzOjd~U z94|t28zn$->@iQ5;-oVVaKJPzir3)rWAHfPqIh-d08o>m7s+ERzdyP|opRVo(43<3Ccv6LnC!3JI&26*)lyW}me07kdw z0G?MrMSz@iRVGAu;nGe|6Mjke+|oS$$?FX9x~wN!#MN_5Ofy6 z*Lj|Q!)}u@o59XujfvFz0&q^P7_up;#QBe~(#j%t^EoX*QbiwPjW6Tp%<8O(51Y#_ zv>>A1d%HdCz-LZ*Qq6C#$`BJy(cZ_`r|+`7O$d5Iu}+5D6Gb-lbBa zSS&d;TOx&x7wN(6bHI!Pq{nJZGKZZPe!Xy_hfT`$)EEKmw-Z4q!#e%eQKHL5R{44o vbB_FpX_L~+Wl&7~%y;b4LtFSxd9Ld(#f^!yKw>+b00000NkvXXu0mjfs3$l% diff --git a/graphics/pokemon/nidorino/back.png b/graphics/pokemon/nidorino/back.png index e5868c58e183f48a2175b7c85c90852bed76745c..a7078074e43c63e1853f424b2481b43c890494e9 100644 GIT binary patch delta 669 zcmV;O0%HA|2IK{h7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z00070Nklj}G=f^PsN{t-dXzzKIr02KiQqYM+^ zCWPWZcfSyzqcENTC42;kH(c2^jg?El#}usmC5VoY0nZ2}2q%cuV+4HO2X6uMy?GZh zZ-e&2Z70-I5C-jH?k8cH!g+*s+A;*|bN!1G!7AyiEwyD1 zL{#sE31BV78o!P`2JKfc5u{4dDg-0MUo65<%#TVc!)z4>e+YsLgQM7IF)nZ6AWm5I z5`;ma1_Ba5qAA-e3c$1-RlhI>;0UyAjKFbyi7!dPoXs#bNsD#ty!48IQJjC6!s}O# z1GhKY7DAJ`^1W&cn}73&p7z#Szm|<13P;(N?(n4lm(7SFi{o9UxNN~xudN>J&}d0J ziKA%?CqNr-j%e4b-V*8NzzWbOV1#_xuz#u@bZrTsWD5aRGa`gFKwsC>v!xz}XTbMS zm(ccc*}L_P+TcEIPdr$6o)>>Ykmr~H_O%f+g3yBnpl^iM<wQ#YEJUa-e%YttBt?w-B%~-d-*s@3k;O4A%=2()-I`Kh@sUHBbbwtEtX5IBNd;;R zIRKa|Ssv?kqxaXOL@m`Gkn~he!BD{6ch;Z%M*9a`_aL3zX;?M@000R9NkvXXu0mjf Ds#7{v delta 722 zcmV;@0xkXI1)2ts7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00KTqL_t(|oaK~DisLX8MQu#YqX-pL&n)A) z74aH+7bS_;&^;>x-cT)}N4?9s`r2^5QQLSw+eq}q-QIA zmSA32rKh6>th3J&zt{EZk3eTDLHxR|>*Z)eL_)y-*(HGVa%(}Wj+{n>91?K#2f)v# zA?T4d;9!FE_)ZrsE3ncbSA*9M60>c- zft-d(2wke$?8kCI!o7arqeo6MNuurx%p7rw*rPVJvrOK13E)6%<5w%$BF*XmvKz1x zC8io`Pf)F9fYoX18pE5L$&*6X_8*d9SyUw!jKAj?e`IgF{qZJ`@#9yBdCnf+43k&h ztjkFX;`Xd59{>5LmU1JS?>f%#aWSF%mRgr8z$tra2iGH{zo!i-7WABVrt$&M>YRp8 zfZ&Nu?2z#m5G-gm(TGIn{g2v9*Sp<*EEGjA9Z~qiLjhoD`yu}(fF)tVD(r!hV2T~X z!Qh4jWNVR!W`feSL7EiGHDfDoYJj5(q&R4afsNpivR!s07*qoM6N<$ Ef_Dx}zvjLFV?kLyiYPGEh zHy6ghX{4kt2GG~x48We}HQ${!g|u}OT>waHWOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00G}gL_t(|oZXX4lB*yThP{*v=veJMO<(~^ zm?vIbK#;Tlt=w~zr;r}>tS^;PB>-^#g;&dkSwVf2fG}nxkqElOe>PPGh=n9i$SMS-F@$iB zY;&b!j=`%0s7I|AOY;(tCmm*2%z~YDkR^a8fURa>9Jr#)aWHt0A{Da2-yC3{UH6BN zsSO8kD*){2D=WY*I8B!UJ^sMNBCH&!h_cV8=)%0kb8n;QqU%48TqeeOmZR*$U&eha zrwnPW;WVy4e+2q?p0y)RK;?)s13IFaBRkfH>%6@K(8`f?3ETa<1g<@*6o4#lPP_4| z6M?V~Je5bG^P8HlaR_B}`e2#DHLp#8<5qSfK*bvJ259em=xS~Oq|Jw}CRqb}a_Ipb zfVmw&p_l!buQ9-u0s3{hj3+bf8GMP#;)A7D$7BYXe*vT`El^+G)F?q8rRo*r;$jgA z&~`gOX`OY!vJB!*2$kHi*Cl-0eD?-!)er)xJH6uvz^HHEyM@pTP0Q543P%VH)TlXX zkTM5$Lhn!3nbYH{xJ@AtBLexOCD>!_7biZf)1I3g6MNs;^kN^Mx N07*qo1w^hwV1ker6VF|LfLNcE!RFD;gr*I$w02`83%r%Z(grCFJ{KS+ZZaXYP+Y7VC;-YkrXRD2i%&xh z(Joj6P5qz%o;oPbq0S%FBS;%<8fAa_HYOBB)nc002ovPDHLkV1mcI-sb=S delta 583 zcmV-N0=WIC1ds)g7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L000hjQchF<|NsC0|NsC0|NsC007byu$N&HV znn^@KRCt{2l)p~HFc8MwN?9^-jHDpmdc`rX~e0|#3N*;VR1qMRxg@Z6ZbV$X$2A}y zPC&FrK5S9n@erSJ0Eyj@1pX=xh}RPl4|{(C;{QU~QJ=Yt>}c^G)rELVcevF*>lcI# Ve73Zmd!GOR002ovPDHLkV1gLr_YeR8 diff --git a/graphics/pokemon/oricorio/pau/back.png b/graphics/pokemon/oricorio/pau/back.png index f2771b8b5147fe9efd7aa66266cd6b6c50dd01ff..7969b5019f8d571f2185f597bc8e101aa9d14ea9 100644 GIT binary patch delta 690 zcmV;j0!{t&2Kfb$7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0007LNkl0C$FrAa%k#0aSeW;G4EXC_E*^1!yLGKGPJUR{E}P@8mClV(=->ES z>kHBWK!?P4gg_BPmUmQ}XrBPbF(iLrW9@T~_L}VRK-kE@tz~hLh9E-wLB!9DKw1Mp zG`_t3fuSFC_RArN@2H3<%AJF~AvSjwC50~zQ|JTO9(_2By~1%HD`!s=d*@KL^tUm9 ziq5f?L%c&=BNB&WlL=Q1qUBRc@(eHuwqv1pX1#CQrFV7#5R#BBw|=AF(8YfTW-I+t z1st{!z65N43+R0~)V<4_NK{I?9}Xjcb(VCwN|MZAO=4pJf=soBIFF#$0!U{ICCIGD zFB!k3-j$CSK=JJE;dxGKpzxLlfR-7w2RH`|Yr`0eW64)A0(2oKw?QJcFjioS2Vvcr zMFlvyjQbJHDi{(Nkr-D3?*M;+At6m^^>cu$ZlW>uM15P`DDF$i*@G8zq{zd=0(6vf0W1Zwz zhhyvH!(b6W7#2i*?~GuKAP~t>Gx-#9!nhdwbusPy8fn6U$JfRP(rF$=?1sOmh1w(h Y0^FWAceyU8>P-Lu02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00NjvL_t(|ob8h_Yui8+$0e{K&?P5>Gj!64 zkhRvO5a^PWbM4d}T(BhQ7V4bV1}uqo%8(SN_RzIU_jo8BR1nBZXKU;S=-MTpq3@)N zeHWdV&V7Ty_y7Ihd-qPyF#bm^%v}?iyIWOe`D-o>^#u|-0a{ov^C7q zyd5yn20+KU0#$Yb(Q)g5@RKqSt^=jtsq~IbY5=mpFLcs!YJgc@Uie!UIjrB%sp=n1 zr!Wl-AQBwqXyxJ-X}{C72>P>m3nRxRq#Zs4$^@OqKV59|HsXf>0RXiu8##nmYRByT zXSD|#b#SNUf7;bOV#Ypv`=SufF(S}hr9%StX0iAq11H2Lu9$PeSjd5eT%~a$rik`H zW#{Lg0JxP?G%t8^vhA8UYVE`<)*`9}b4E-C|;&0(dOn?;s^Ec3;JzQ%`I zAVuzhH-uL{!%v605?A;jU}M7w&agigzpO~uX(FFpek6b zdXxL9=PDrnW>@Q1nLhyXvSaDf6M#G|_1R@$ww}0A1IqJM5LZ%yM@zYdlz*HVm2{(_ zwvfX5DSKlyyjO)s3r~Fa^~LG3vBwzv&b+=3KNv9d$K9Jm(PF2P{@Xp9gK3@V{Y(%NhT*^c+ZKXd z->O55c74SVr4If0?(s>7T<#c5eOmIy5MpbITmagid!!JP7m!rVjG=Sj1t14Vc^rRb zFhlR1MM{uPqZmB90~nZ1ZN}`@>w|^C5(7_@lVGWf&ooZt2Ox!cSr+EJu0$*O0fXq5 z8EWVS@{OLT6#9V&z^eyfgB&K55WWGJzAzVTj2qx_d(MgezLDp3*G~Y@*Z>;l8+pM3I0Ao2vX)BDRexjNqhGTb7ElT_ksrhUQE{! z5!F9{!3Xn00;jy(>|p*bM=g--*G&4UqO1IqvJ&AfJ`l5dzo8UIC86xR-zOmlUvo zyWeAwXgLaDGAFMfb+l z@jTk3#!Cn~5g!pm^>A|q=r;k-a~|#SDmH|tO}U>7TWvgYc^ziwsW)H{j6w3jb331HHHz Um$T?V{r~^~07*qoM6N<$g41s?r2qf` delta 757 zcmVOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00Ll1L_t(|oaL0ij@m#F#%&3t(1nFOfM?AE zV4EKBhLZw0Mcl1H3MH&xfIn@DNU@X@DXuvprMf0AuA+#-+J|j2Vw*{fAM-<1b-X0gsnvfH**aIA(uB!2{1Re_7b5s-Pwd8?vBnJy1eP zr2yXqcpl}gq34(Yi?q0iX1vxkbrD9f5V5!lOaNaB72K4eES9mDiFh3^(=jMx)(UiFF zjwRbrDCPh_e=t?w%c29Xb9(Y1cVZ5`4CvC{xkd80MW7qRg9PuQxa*2D;Ke>kl27yI z1(P!QU`12fJAYzWfRr1?n7TeDqp&`27l6$`X0b;y*F<0LKlYV$)bkzU#NprYpu|MV zpBfz-8*fkUg(q~-Bfi~DB$vDKwNA&z#rtTs6O(ARf6_VNz~Q`!NS#)?ktqu`(MaKG zrL!o<;yFgz99;eU7}tg(;?Xfh9BLoKtJR{hL}oFX`?{CUrhG_8i`MF@(eeG_4zYcBGq;QOpl#%Y5cmy{o{e5be{ zPqK$qe+Grui%@c?l4d})ov*S9=;0`UfQu>e4p^l_pos|7zzsEP%7%bI9UKqpo?FT% zP!_aJC_{=~hHg>DU{*IkDs;c=XBOk;@|Ibp_S&T1rs@4xb-B~)mGnuy5S1VIsotV= nOkHAkZ%jEdu&rzIpT-{`W7yY!<>MLv0000<2SrXqu0mjfFbrJO diff --git a/graphics/pokemon/oricorio/pau/icon.png b/graphics/pokemon/oricorio/pau/icon.png index a4ba46d2bafda8fd3f158f422d0100a0cb5a651b..c3353a92493b2fe4c14e911702fb41cca20510fe 100644 GIT binary patch delta 266 zcmX@Ye3fZ}1SbbG0|SFkK8f*;|(2~puW?0oV%|3(e zz?%HaqT3!XW)n${PTC+|aASt@fg7Gv6ZGzh&U>TvaW-dqaG5A`{NxL5+bwMbc{V?q zSj=`ZE9Tg=M-CCCo}ISGKZ>t*Te|N8SIWh!4Bm>K-rp7X7=D%8@;AtP)8gPw%k%$m zY_GTRZmBQn+FozMR`jX=mcye*x7iL&Zu~J>l=DlbLj6mA{-rj&{T`J)2|y1qc)I$z JtaD0e0suq*d-DJQ delta 378 zcmV-=0fqk60>lH57-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L008JoL_t(|oYj)C5`r)chIs;WkpU*XE4#h6 zyFL?Bo#dFzr0=K$n^$0vt%3t>*qqdC|9?rEzxO4{FBJfA-F2Ohjs7OY-9<*LwN|kK zXw;VNAk439>pX3CI`DLUp_62(|F@i5WR+4f8umi$ z;{SoPC1R#xf^`?-@Apg!$gWqEK`rr&jFvW;!!U4{B4G4cV z1jvP%z#1{WBw!Gc?1J*XAi}OU1YI?b0FtBWBPf(yj>t^6+wFe9s051K^acm z6u|T$sQ#xCZZ8NJy=bY39Y88zO~49Bi6=lxL4J^~`n(k|TB!#xrXOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00L-9L_t(|obA&+Zrd;v0ALw*(baNMXb#gr zt6f@A+9_>FCtV5zBI&I_5sPz7%ix+ZKrc`uV=mCKK(1iq5?zCwp^v0~D948PqHmF5 ze||sIV-Wn0e=s`zJz#LK51>6MG}@D*gLb9pgpql?R_K6`e{CQ_ad;gBy$Bsi$xdG; zPza&<^{dI11|ahn0%{vUrA(E`xtMK&Zmc24JNWZ=EjZ`m;`XKuGz6L$5Eqy=!8OKgwOak&0q7LrkI5GhHybsMxqv1eSQ_xtPk{}9001S@`wM*1P7&aU z8W2Jc>JZo#9Tq>C0{up+J98EH)&2*05Z#5zOL;+ z&Fd6CV4rJI-z5()&fhnn8f20;g7UPS0yTrcQhR`y3Ca}18q{RQGlgQMe9#jH$h-pP zs>CfIU05I~JJ(C1cY_&EmsF-|7Z5p3sLUNWbUpGGkPNOm+!A}(-Vhcr1BmGtZX_JT zumxa>e+*KXd&;3vh&RC|V6aj)l^sm>TdT7R+sl9-%GZ7Tf}Do9v35jA?n0 zq4T=C~WFunUL^((k86Y>1C9&^b^-9(ijwkLV^?PWfD00000NkvXXu0mjfY$ipk diff --git a/graphics/pokemon/oricorio/pom_pom/front.png b/graphics/pokemon/oricorio/pom_pom/front.png index 44deb56e8ed026a4dfccd54503b04ea825b5d22f..5ed6c71b5611f10070cd21cdd26a648510b8d109 100644 GIT binary patch delta 545 zcmV++0^a@I1?dEk7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0005lNkleK*#QL}^$AaXXG)hq3717nr|T3c`OZl?7cM0qd<&?KPH`wS*ihyX-OWEX#m zpsjOG^oWX9QqXSScW3d30ViPwAo{-mM9Iaush3L*DOh$Kn_* zJLv-fJ~ddcO^=`+5b~K|l$R-R9|6 z-gc_M?`}Y-*&PD5A)M)0-_&6Mkp6$MbPG`DFM0+jB2qm-Q-mHtQt-jcdmt17S?JNr z9J+b|NEy2N8qmbZ(iEnt1q5daAeA~H>{|?tAE(@z2$fy{QtuE*!MI^D0h05?LwgFz zE&|7(xd_R9Ix7N{0WpRLlCwz84Bw7ZzRVSZ#>lJGLr*UN$kb_K5g+`yLic~hSwce` zmI>nX`FK?Hp8VVfZq))pzyZCNMd!y~9MW%@JG{oNXaiu!j5BTgJj9$ct*1Ep3zs}E zOAim2zu+VQ2;c-w8(&foBbc%c@~@tR3N jtu;c1T5aX8eXOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00IF?L_t(|ob8moZrd;r$0g8%MoUKRS(gA@ zS+liTpe;H$M%Sis_QW+ciw1mar@}@@FEKjy5i$iC^BV2D^himR?3C)54m}tac=zM~ z?)Vi1|Ltik?AuS=_W?<2q3s#>f8r>*xxLEjJfhwx%~?e?ROI;uT6?aMcUPmzE7yie7*b_ zAIC$x`q8dzQziU(w-Nx-h+dTOD}drqBPKwTM(@%BF#w0QhS@%{e$bm&0&uugNeRUL zsZ}V4scZx)e*lUyK{e#A)r407AG!p_>Mdo?14EafT}2x}mHz?IwI>~F)D7THP3Bx_ zPL(!-b(Lf1;SqkrlpbwmV>w#+BmRpAR^~b_G=uAxlN}>%nMbczEzxqxViwv^PM6-WSLKDTu`T0+B@OTF$|Nkg%2;GeVK+bFXTu3N-700000NkvXXu0mjf5St-C diff --git a/graphics/pokemon/oricorio/pom_pom/icon.png b/graphics/pokemon/oricorio/pom_pom/icon.png index ead80b6a2385a6d3d1d6e543100faf5b733cddc6..9f83917ba16f8f41264ac54e3a4d235a7345b60a 100644 GIT binary patch delta 287 zcmX@d{E}&c1SbbG0|SFkKBaE-+ z_N(bOy!sa;rDt7GlRZ^<65ECh-D}PtB&J*OKKy4mXY!>4!TP(q`c-_Ywye>uGH5<= zBC%<)qvOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L008nyL_t(|oaK@|io#G7h2IV?*6G~CEW{#> zf?0-w3(!hPsR6-a3SSWsNg=1mS}eqf5HrP~Brw-lINtke1;N|BkMn-cdB>Qy9&*8N zVW?1mi*hN!57NY!k_r*p0?-*>5DMbapi0CUWj6KzA+XsIe>LC-h!2YuQu|NJcowZZ zwCDF-rJn;0-+tc#wYt?NwDxf^GfhI<3Z&hiN%HYNQ7Pta)|C_xgfCZTV0000(xZiX#ePs z5MqoWel19TN=c9}1-W!mASDx~m5`GyWFJDB6*7Q`Cd>n1m&Ro=B0x-&f&!Aeh_HX) zmw;Zr0wf^J1B(@b35dNw?K~5ZCC~tN77*mrF$;1AY=N53&IJe%36b?96o6qSUmA~y zq;4&uRN&7yK>j@wSOoOv??4GL${M`+QgsfjMu9Y@W&@rbT@=MQ*Nt@nd!&hW#$z^O zuEh(;Qc;hgBwO`_LO20yrIHSi(=&ge0D6G^B(-q*g#4ZYjfEXRcp)A0OGWsWa0r0s zeA>5!ab4G~XD9&Ddq{lA*B=GUcoYDvb&tTIFRQTj7xJL1`+YJ3lcrjHef5fotDB$U{C1+@9r%65yf-D&R)x+UBIQBPNaJRaoJB#?hfFV*=n z3)H9s3Ob|81@z)_2#0Xol3l@<-&uomM*j>vufe&5P6>aw31zOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00I(8L_t(|oSoD$YvV8!2XJ|@>DJWHJr3ON z6C`90^lRiec!_&UAi=VG;|-CwLLjoXn+x{^YPxpre9-T5l47@(^_0N9AD=OqT>ME61Um7wXy1yuJ--RBjgdlcl6>2p2l;pz8a2Rc7)iVlcU zG%rsBFkME~DM39iA)2Q7YYAAA6R6AsEq^L8NFi%koBlyfFyPq%r#ehl@cIDv&WN%D z$rpGP@9+1`o7E3xS9A&>0RH@V_JD~5Q1>PTADGKyf2J>1=mWaU&4Ww8uE+wy1s}&W z<^JG=WPPyw9}r!Nu#SN(X#wmF`~>;x0+3=QkR|#NB14W*RG*;UV?bZ%4sax*INkXc zxbIF>ceh>_uO1!1yZ6QbH^T-<#zi0pz{w~qfGp91>H`cj2B3BhT38A05?8eioQ%*; za1R>xI0gvp9AVuXkhK~8HN*D*#T0AT6pww-zp^dh!UMVt&YAB01Am+3X@9jlD*ylh M07*qoM6N<$g34_w)&Kwi diff --git a/graphics/pokemon/oricorio/sensu/front.png b/graphics/pokemon/oricorio/sensu/front.png index 470f684713af6c76e0985709bd731c2071a42529..5abc5e547ef17bbc42fd13e25574c2ccc40d1a89 100644 GIT binary patch delta 713 zcmV;)0yh2g29O4j7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0007iNklXwcJ6cQJOhxrYzsdE%jH>ThWD*sVL!cLt9EyL% z^tDz93gK4~j060wAp)zlYKUsqSp3H=5QI?#5En{Uhm?bfv~Hq22@7rcTF{U>qS*`Wu)@)}*zJ>gps;eO`vM9`!z%K|;#In~=W z1YlX$b%6tLJwE}c9svHw{Kx~XVBXit!twwx zTN~_;jkMc@Ip>7-u>;yofIS2wV34-}!2O3cBgiQSE#QJSa`aDaM5?cH)_(+;1I79% z2xoooiJt)=Y~5!7crfx2kTdomI#e>s5y1yQkDzT1J7dSdfhd44OYjaLk@bI^w*U?R zykm(x18j{@YJCQnj+-+*0?4tKmiK@k2t&E_y7vIB!&?Nz)DF1@c00000NkvXXu0mjfAjU|M delta 812 zcmV+{1JnGF2J;4x7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00NguL_t(|oXylRZ`wc<0ARD&5>qghqKe?QrX!a2WV~+l^TGvS1d{ZUI$>W5ZLur&}(&of9Y?p?38>z2>f0{)~dN3 zUR`_-JR-~r9mo|@f*QtQ4=4Uf7~wcyh{<_^afCQKL!5KYHC6DlBu2c(8P``yD-^UY zd8iFmD!U;HA_-#nRolgDoP~%n)qz4^koWLTygr{`lmDACp|A24e}7q_Xg<#{o%W#_-5 zLQsPG5q*s^peds2`0pf03IL5$22^~O2R3-#@r7Y!HO%rw*!AEPFN`PyNe)nnK^J2y zR&n~A=K%O}jufE5jdQ?lc``=xt_FMhH?YA!m6_?qe~<=8Ixs!M_0oVkXVw!K=0JlR zR=5Sw1X@wN1<)%M;j~)}RQmb*Cm`7Kuxw3ig3)|Kgx}@2~-f zOKv%1&yN59Z$H{H(dx;Gpsk^zPkJ9SvFyF}Pk%z-v%|J4l(HYjX*_7?d3a9O$tk75 zlxez$qn)LhqgBT;?+<#LDl9`PeO))0EnH+?nt1xq9L3YESL<(YF?Hmc;h6JtUcb-E zk0&gTe~DWM4fH}Zq{ delta 407 zcmV;I0cif-0^tLY7-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L009L_L_t(|oYj)CPQy?PMc*G--C$v0VyMK- z=QY!fRJ{ycS_$O?T8Zu;b?y+6->^{h$e5NWCS~C|D+q}<`d!=C_6gw+pIGYyL-p?d z+rD~biPYU~<#L9IdoxlT6BIQC29zQVuDP-719us{?Iv3m z3;*=l#JMyMk8$|Q6VzKauU&>}W_;T|YQ&NkIG!cBA{`<;KsgdumG$bea5x+aFk-TM zf&)el>VXl{Dc=CbCcwznJTMnNJTMnN{9b>;$0r*mvoRcuN8bPd002ovPDHLkV1nh2 Bq(T4y diff --git a/graphics/pokemon/persian/back.png b/graphics/pokemon/persian/back.png index ad7a9d4a65570554df47847bd50aa43238807490..1ec5e999399fa298052aa875930cf58b8de380ba 100644 GIT binary patch delta 593 zcmV-X0atDDqr8teH64#@QL`K{l2u>b(~ z9cF~D^st?0E=365A^?d<7DAPa?!6^6y$Fsh+T-axpz13?!0F!tfQ$gF3vuf4D*%5n zOX8o(DR&`_5pfwxuYCJv0;`qyP-q`5?R7?9|zQ=UNULJJ^n#oA+~IK&QMZUJ18 zUY$0x*49U&BLui20BeS&es%(oCoti4NvQXP>c|1Gf_SSwD06AG8h~p9hI*ocxO-)K ztxx~f2({V?pdDIEW-@&!;{@n-2B?3XpckW%3!sCw-_YukMo=4J=_g$DLaN8UnMN@0 z_Z9${i&|;3;Ov7t1Uwudpf0Cnie@1+A1A^x7>94Yj^8W+%e-0}AP6A@@C10m z8A1$@3~+`J0r&wBzq~v^GCwjN=OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00I9=L_t(|ob8moj+;Ob$6*Un@AO}$Rf1+Ci69#(L&X4Xj6MMGH)!9OA4ygdGrdcC)rIqyTM!5JO!Pz?}orpFnW{+@ya4kO6>OTxx#jPdze`5uha-{GmPo zYA>S>farOK?Jft5L5zz2cLsE!@oZJ>`yq~aE2BFChj9)*6|;c>qW%j&uV;HDdJc4a ti*onSB^)$D#YDPJG{+23voik)`vnKo`|KT}G&KMK002ovPDHLkV1l_}4(2Y9G)kz;y&<44~UV{s0E=`T`Z_B~(hjeque=H@;c}J~RIo8uz;% z%MWN4;BJD$knSxjU<&U1G4-@OVlZd~_X!+=ynX3W9P8kGfI@!P4b1}b`adb5T>ua8 zsi4hMRl#Tnr$Gd;)>!EvcL9@L8V_QnkXKV+@rUIlKfJ{k@^1v485)WQ1w_HmOTo;{ af6p&YZ3_Nu7+s+N0000OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00A*cL_t(|obA%lO~XJ82H+FY4dBvyCqWqi zxeJ`SK%MFckFWtR(J=vG4L0SRRFQ2$!XrYpR7KJMC3c;2?ppu0>bhRf5plPXuL;g0 z?0*zDw}`-XY?eXA&rj9l*9CAt=KxQ`vvXiN;KQ6l_;`1Ke|HKr2oeklG05DX4-&i$ zFL+RZ&QSp9a(|2x_^_W68eag9xi1$5Vw|Fh1qN~-)J|`>fG~oS1O%(V1Bns%n#hb$ z833?5DF7Oj`=qweegi6Zi3~8gOQ1j?^%uE?23>D}uja2bKHgmL7`$L|uTIAxXe9K+=nBC4iJuvU?;gz%E*~7~AOF t(*`g({Q{W7pj+_aGc)?n4REc$QD0B2UT%>xK>Ppz002ovPDHLkV1gGcu}A;_ diff --git a/graphics/pokemon/pichu/spiky_eared/icon.png b/graphics/pokemon/pichu/spiky_eared/icon.png index 93107b1d3a267fd815290910b14b5837dd9285c9..3a407bc6cb2d65825bb03b833d36d51ace2b4d4a 100644 GIT binary patch delta 237 zcmey)w1a7a1SbbG0|SFkK#zZj zGq!WXbFJNE2bB%!;i{;Bi^|A}wbZesz@MH)x3 zy9$rX`cGE(lqC!mulLIN{aDHP=9=mfhBjZfZ+)+{X?v5-QJfU?7jXFsRt epIH01$M3-{f%~yJxl4d;u#y~cMSA(WJkYY)9^mSxl*x1kgCy{lc zqJ2GMlDE6d|E27ojsj(8d%8G=RLprg$(oPJkjJH#@d+5cQbsde&C8gjkAv)eZHdOCulHxV^9nC-$>Oe*SO7U`3_AS z``9NeJv>|aw7~6D8H1eNjmI4yNUATkIE~c9fMk`k42OLjZdkLxbRq{vQ>LHj>?3Q%dGpf_&rY>gTe~DWM4f)qHSH diff --git a/graphics/pokemon/pikachu/alola_cap/back.png b/graphics/pokemon/pikachu/alola_cap/back.png index eb78995e333aaf29168c6e84ba0a5b0ead838c23..110eab45bfba7dfd36fd9921fe9535d41d4239c0 100644 GIT binary patch delta 561 zcmV-10?z&I1^EP!7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0005#Nkli*z^-75f0r`@po(XvgF{Mht)!u(A zcM)O~BCjCKWe9|W5Tg*ZK?nddq5+~v)C7pJ5Cma|9obL_D1fil5kRpL4Dgolf3N~_ z{~%D!zAgN4XCdQjUo)Yqt15IEePytwh==AFiL83Ou3}E@_ z_iw}OPoNqnAOUFA-$GFB7b63*#Pgley*YFOsQvP%7SsUpk zpW-0gw&ws8^)6h%O?m;iyluR{egQn;LH}BK0s!xl3wS4B0P=-A!97C?AaH@Z$4R{t zjh9Ukmd~>*f?E#~SZ}(n?gJex1)>Mr@M-lAiY7kKPY;rM00000NkvXXu0mjfNM{9- delta 677 zcmV;W0$Tm~1nmWo7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00I$7L_t(|ob8jpik(0d#wS=TSj8l;b!4kl zH;f^mP24Nw4e|^rFKjWaHv1Y2DFllPW2!YEco{)GZj;kEbHAV8`Ob`& zkpK09RVGRD?qB+Cnx;3&m%r(+q>fdF1Y`R7CN))V^{dB6f7VI^2c)kzK*a8UT#$&; zo2sf*oA+UhSs)QfUDgix%m4|JRJLwikNBi}01|C>{OAY^@JXg46p*-NZ?CC!IT+xl zP(;*ABD=0(*aEQ-3zv%y0mx{v1D4qkvdNH@lxp3cRJ;I)HO4@zQUgaD0Rbe`n#vs3 z;rL(x*%}sQe?e-s(a5LoJ}_&GMr~lCvc5g&Az-z*>h-3F0)7*Euo<023@ad7bB*RD z0Q|wMCqQ66nJID$Oabu0ehG!Mh+PB(p1zWh7}p30{Bpob)DD<>A8^E|9|MB{;E9nv z(HNjX08YdwbiA7P3Sb=V$fooFHRoIbg*ui^$>TV4e_8#&?g|)N!h9yicP5M=iH_Z= zh48z`4ri4^0y6U~M7sqhd)J(*r+~oW3}N|$V#ZM=^z<$~h*}Nd^kF-wwQxjt*yz%N zfgV#26X^K0jg1*o=9ogAC!%MJpFiBxNYQ00000 LNkvXXu0mjfUtKF< diff --git a/graphics/pokemon/pikachu/alola_cap/front.png b/graphics/pokemon/pikachu/alola_cap/front.png index 658157930e7862a5bc44dc0fa02ba4a61456dc40..2de876f500765d70c1a0dabcaa27b0b7256fbe20 100644 GIT binary patch delta 552 zcmV+@0@wY`1@Hur7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0005sNkl1z0DGM4#Lw zj~%%dte9Q$!WRmd|HyX?D={rnGT)8@<2xxZZ@L1Ox`h3GE_-riVBt_-)EGzIgcE-y zP~Ki)$^1A8o%kz*3P#a6d79u597ul?wEW+KAi|Rfo@&s)Rgg343briJL`DeIAP}VS zFX!rAun`{w2pY<;gM-(eBQsQ9tFVu+dn%-!B{@Z`DfC)0q@JgE;$z-~en;CIXr%)m ztqjs@z6oM2je7;W^LUoS;kp;Cg{uJDAY^|h!?l7T zUF3X702hO}Ka%z(Amm+m90B&_pSFM_lSw46LZ^2d(zN+n=EA28Zfs#25^V$7`Dr4N zGao%|)C%^i10&=8HE3GD4R0R}zuX2l6F^VryMu^7;q@xxS~3*R+X98xV;z0000OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00HqyL_t(|ob8mqj?+L8#uvE=+KLNLz$!<< zHI`f;+3r|f!Ig*?K#GM#c|{b_5ed;-0=ctDfw0|$h8TqMUC)7~S}S5! zI^I-ORdT@7Vy*PqXqw95%NT3^;- z7ng-|Ctq|!06Z*qWF9g!&X*VhA9oo6pP%E=-FApUj@|wp0m&B+NSp!kdp`6w#V`d3 zbF|+&SE3qge;*(Kq@jOW#9!(v_5p$%(p-#UK@bwvh zhFAhvKe<)Iwro8B5YsOR{Y6zq0LEHSyU*J`0dWMAj&kmcMJb}u`~6Y0Ghalph|m)> zYYBA-SOy(|_Apw*01|0_gBx)K9FYG3FwTI>kz2R3e^*KkGh3N?VC=^X3|C}Iz+jV% z39wHvJrMb^qZn{V_iUHlo)B6KI7AH-g4UR}exM>K0taM%2XGw0G_y%tp!Y!E&riw& zZc9d>2z(O~{)(G3b@2~4uz*O&Nm93StS{TfHkUTQO^MWXCh@g!2W4wWYX6;gcfU&~ f^0a?17hb;sJ9;-)D;HSaxL978-h-%h#6b=ZKz z^>EL#r7!;ff7`>GE4J}%F`}NWrzw!%~R)5?p^!GN` zqLwKg7s~erX9?7~te-_or_l1t>F58<3^gM&7tDnm{r-UW| D6k(C` delta 425 zcmV;a0apHi1M>rr7-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L009?CL_t(|oZXVKZi6rohW!Tj7I}a$Fm|X} zlZC${3{_#v5(#h3!*xY{3cOw-#grw&HEC?Xd!?#gto!ua@|`~+{`9h!sBTUxLQ2)A zY4>zURIOam?>$gy;{fII5xFWgfnIv>l{jFnl#e5{t?K5zf8fpsZXd~pb;&*;sQu&& zdn3bJMx8&Qq>vCM!w6hV00g|ep`4GHZUVay5M(7Z&@CD?JLvqp=+|WIZe0#Q0>uj0 z9_4yyq@yVc7XNgSjq0IZli~jPvoLgYdQ1j+VMrbCN(Esk{c$V^L$9d=3t_ICO4XV< z1lnYKV2oYRJK@%HhuqG>5aYRrorR$srFK6#3)2G?B4G}QgwaJTjK)fs-}d7hz+9le T5&`gl00000NkvXXu0mjfR)nxa diff --git a/graphics/pokemon/pikachu/belle/back.png b/graphics/pokemon/pikachu/belle/back.png index d90d9ba3b450eafd9a388a0d14d59114b769c7dd..b9b18756583ab813959c8d11798dfcf9324ea7f0 100644 GIT binary patch delta 766 zcmV;#uP)||8chyKvDdevv*s2`a(y?{zyVVr|DO}`ZpCB zia)Z*CR}g~P~@Mub52zv9Ks5P@Fl_AyFaBYYx%K$M-caR00dFbUjgJ`JrdSH@BV*1 z^6tl90a_jXgxjjf;T5p^Q&y{GmQqk55j_JGy3fD?M0G}pM}S(JoDe+#Zt@v5f&-2< zPzM|dlskXM73C^o)>9F+wkm56$eY~&AZSMj2LQEZ584Ad*%hj%nc4gZ_TZ;Rh$0HiGitd(t@iJSqR5>|gB6a0y~@pUI`E0r>x{S^QLW-*bk?izq@h}Z}K z$Q57(fz?}@j)1~I4uwE5?gU(f0)a7LJWg|RA;C>tt?IplMxc0Xal6Ni5 z^L)jaZG(N81hOv~12|&{fZnH(V)Gl~;9uzJ#frVo2)6n+|NQ9)XsHMLq|L8M5NolU zZ6E&0K4H!H1Yicq2!kG@cfeB0hr(SEUdFcoJ`MoEV>s1c-#$y!ny+dQ%!-$~bPQXK z-vE$j1$=Dzrt;|kA-s8cA=LJ#3NXa}VL>)6F9d3}>XN4_??JT0GoTokc)f^>@K^@S wL2I`=0RDOaEUo44{GQTl1zz<2jr*VJ4@lcamV~%Jp#T5?07*qoM6N<$f_E}xvH$=8 delta 883 zcmV-(1C0E|2Dt~27-Iwj00013M{Ml?000McNliruz02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00P}fL_t(|ob8l9Yui8=#x>N0ECw&h&`ctb zDg6v3oDf}13cd;xTXbkNC6ERw!VofaX`qVYe_yM{Rkj8@GJp3B$W@(m)(T`X+;t24}cF{^clIipWQA1H&H^!d506f z-c5nBc+3Ml_++ zt$Nst0|YebU2H-`vl#)+2-s=OdY%MKA&EjY@qEswdE1r-i@1#gb;d0f5^tThLC|&r^;?m*W)qG6sV$i zmnag(NDCi6CqT(YiJro7%;*Sd)r-^hc7f1Bei@Dd0l-C}Zu`k8mud-7=UqOA81o6$ zP+b+I<$s<>K6l)uwl6F2fFt? z0VV}snb4u@p3oulq8UW70ss^PKr#2dt`NcCV*x0^YsQIeF8cFm4Azza`%(H3W89#F zjY32T%ul(4qLsoJ4LImg9@wzvfdkm@D1RB~aG`~Q=7E2z-<}j&yp_WIqW}N^07*qo J1w^hwV1hk+gP{Nb diff --git a/graphics/pokemon/pikachu/belle/front.png b/graphics/pokemon/pikachu/belle/front.png index 7f521f287375056bb43e69858025b58fad6bedef..27e11f42eb53f9ade86693d7cd8c40bf8044e4a7 100644 GIT binary patch delta 737 zcmV<70v`Q@2dD;+7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0007)NklyGL$41{UwOGA?G`@ij(aY7f4R7m$XmVhF4zSxfK;VedDTI^4y?rv7fDnKm`ry4cPYEnJ zaiNTcfObt?4-oY70l=ogvSk2N^PYbOfW_#kdvKlwx*(phoXZiy@W7!T4xGDi(~SM! zk0ikEcj_ydX*fVTYYqg_)$TI%1XSgO*;D=mU=sW;N!-_!3|ZIJY9&CBkB=TO2fpHE z0bq6fc0B=%oaFZr902kAodD?$AUOeGX3-+2;~|ERzW}-(wV@9}dNW@7^wNJ$_|+32 z!oh@GzMoFY>BqH#!MLI7E_C}e+?3PP&=f)7REOMZRPltI1ij(?Qj(d)Fj2;^bb^1B z(<17|>M_hFtq;I7!Rmrc(1SP;lyyh|Q#%FF-g}rUQki)E#XuTcGYM!`WlLfhFri;8 zig_l9+yhQ!6V{xeHv+J*n$Ld=@I}9%ql&piNz#X|uan0cQs`O?{k+9cv4SjcCt8^! zU=vaI@Lu9j;7ro4FFF$f+y?+M3sdEvkRy~S0AEGB#OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00O8hmjCSTTmFJ64;36GZnVmqN(W{Okq&DToCr0LF@NGsO!CZTsW-<0P$%ZAmHI-i&8hr zUB*ExGKJtufJda>5=WjHa5d09CA)8_@8v-4Pk`bMb$$OmrA0|7fC5l4P!Ck^AcD@F zf4~uiGX)@Dzrvt?m8Q^{Y$1^?+81(#MHQ0fhd_1jPf87zqdi0000?P=%b4dp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0003rNkldBngCR9;!JL$R`E&xz#!bJDiVok-zTz2 zQRi9BgBTJ}F+mBlDuQN5&rhPrqJ;Wlr|#PSA`U|f<1ismPEbdL=ShF&@)!Zu0;D02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00C}EL_t(|oXwKKO2a@9hWiF{@ByUt;wi=M zC4wY}MDWyJI)ayY6Z#l72wNx=Y=!1hAEp<54NYZxnTDh}^pZ7!W|NI)#l7v%{QvCE ze67}R9@)IJNV@}Lwk9M$gkEy0IXX5(^<3!Wkw9gxjAD|7e{d{;a6o?Ebx+3<=!aK) zZPx@M$K*D+G&p8tVaWJex^5W?=((mJx&ze|k#79$Lj5Mip)FS4L{+5MnBBd2{Izsg zh_|C13YFOt-d7;9k8Wv+r*ms=&JLxe1&0pxgufiCHXt5pe#!kxXt!Cg22AE=qF_+* zu_xzkS|=!@91lOLfC1_|=G3kMlVa#_D_B%GpcitBPb#9&$tD|7@iD~v%?brCUz%(X zA6BV1E_a(4Pc&jP3Y6vioqZZya>a*yHfZ~|e0&2q6aUMSr#{fy00000NkvXXu0mjf DO|sQH diff --git a/graphics/pokemon/pikachu/cosplay/back.png b/graphics/pokemon/pikachu/cosplay/back.png index d01bdd1f0825f70c5375ad5ede81b62c0ac9d173..524417f1cba32181e44b21388f398d2aaa143aa0 100644 GIT binary patch delta 562 zcmV-20?qy81^NV#7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0005$NklgA%$9P90(x%NeXqcd&QF!WaoOlco(1xHqbkF3W%L(0#OL8nl(TLgh0qdo{&N+ z^+fPfXz_Wkvk*83Oo3t_7+m1!z&oCe048dD|6T=3I{sim`b=O)iaL<1sS-?<42bw`q3U)k3aDaO1$Q;Z9^nShxt?%st z)j}tQn;`q-B#?p6cwFd5vk>eKf+$n`@U z&wSYe9nS_z!EI#&g1>^ZrRaMa%=XEY+@%-=+XxR^K?@^6PvI=^u1<;|n%&ldh`*3C zetOx<36T09oxsASxfbs&<9z;d5qJ=mE~`(%3IGYf1(xo4sciyNSh*=e?Uf76juYOA z_ItSq3+rfyc3_^tOJ6I*aLyi~Wg*eRUH7kzZ=?Djo0qb;C;$Ke07*qoM6N<$g2Vj; AQvd(} delta 668 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 Q00000NkvXX1g=70g0sJn(f|Me diff --git a/graphics/pokemon/pikachu/hoenn_cap/back.png b/graphics/pokemon/pikachu/hoenn_cap/back.png index a00abae9209f668edfd9c283f8e15e894a2740e4..a257b1e99425a0b63dc42da7712aeff3b9739153 100644 GIT binary patch delta 559 zcmV+~0?_^D1@{Dy7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0005zNklX8E|eVAP4w-Vx&S~x@4($LRvzIu@czYN9BJM zA%sk%75KRffj|f$WP&dA9&tuAKop3&fFTru(BF6i8wx=M@YMzaDO7?1-V*)~cR=bF z0@V!MhdIyz$U_@LR06s4W<&yd1hFjHoJ4NEw*g|CTId23)D4*cZwZ7}Lb!nXHzR^_ zA4fn65JVBS8il?BEsOzDf69@50cn4EXa^92?C(GvmpR@x{imz`2Y4d95!QesC7>nH zJb?l@uOe6km;o~2XTTu90&*%7m?axL6@)DnS#_;CQ39$C(Keez1$RGLq*bAu(pkaa)Xd{1)<(a<$ zNFQVthAn!|?=FGvw`z4Okk|m4&sm9tcE2H*25z>}5cH|Q<>k9j-j87>Xq|qTBaBlN z!m&LCprCi50f+P%;970t`T7M|2`~Eh!W#g2mzKcl1PCBqXeBJqkOByo!0B;P??mHe xQ-tmFtVLMXiv-r2Zm4sBtw0;}VjF&~{s1|5JN;t$euw}7002ovPDHLkV1i*H1P}lK delta 670 zcmV;P0%8641m*>h7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00Ih0L_t(|ob8i8kDM?N#eI<|=+=s^fGW32 zr1V#&J5gM^O(aXer%BMQM9CHu<|?E^3PY80@t4c^FSfa)y(ZIOct75}v4N2P^@i0P zkH^pd(w~Z=cs&02oBmGfSWQe&s;?glQ%$Jf+~3nq8aSZ%e-Ho(egEZ(L{dDqZL8Wm z#4Q$qL?U%rJK!4yB*?L~_2hb_2i*gZ=*shVM_7Q*G96)n#I^i%$E?fA0M9}Z$smdH zE`uoqQXy6@7d-+{vU&%siy>r_scab2y4|UC1rS?|iM5Re&Nc!9NT@ZFIjqCkOz|vR z!>TMurfxJ+e?IuYqAhZD12dDQHzF0VS=8AUbo5<|P1pVAeAr zupG=3l?CPq_-em|+F7J70s=2TNlc7e1O$FLU?VaI%!3a&V$_$3!UXU_$)3m!kRt#G z;uAVv#s>vZj&>v{JwV1eS3s?{B`CQa7cOg<=xq&Se@Cd#r1;K^5hT&mTeT2=7un&W za!5dCUWDjEV76z?nYs#y94-)-KPYA#RYFhinlL- z1MAKLFn6-rT7WpjKoTD0-XR$RV2pL|A5|O0_rROgAA@=Tk#Pz^G5`Po07*qoM6N<$ Ef{Zg7U;qFB diff --git a/graphics/pokemon/pikachu/hoenn_cap/front.png b/graphics/pokemon/pikachu/hoenn_cap/front.png index 19bbcdfe60c649eb8f3e02c886c769eca1d5cd44..2c9749ee2e350d6e398b99433d648843289b5a23 100644 GIT binary patch delta 566 zcmV-60?GZ;1^xt(7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0005)Nkll(+U1Bdg7m(V zj`D>onh>N3MNI(2PwbMHj+_I$>`tZdH#pgU)K3UJHh5FbJd6ORsWf5kXk8&z8uUrWKr#0w8?=QX7rA0^EP~@~nr$ zbT6uf8$jAXpeMsr!ICd>91@U=fy^IC{StuWUG;JV(3XF00VV{6P^p5qHxu%<%^`_&r_0>|fOqtKm0=s1 z49{wTs^?=w{m9U4q7st%_&*{eZ~WXGk$=)Z@x(lS0Hb~+RoE-NQUCw|07*qoM6N<$ Ef`L8?q5uE@ delta 651 zcmV;60(AZU1k(kO7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00H+&L_t(|ob8mqj?+L8#y3bVwlqE@M1_L= z0LRK#T@`H+s7&F)_5<7lAmJM6PBK^JbfmCdqDbtx1Q+(c0Z+y3ZUEhSaxKk`qA1Dt z(>H$|#-8FoL>Pw8Uq7Y`APHz}HtI4FHspU}xVS>Ih^39Ao55ovl(9%uXLh)-7}v zWGv8*z*%$fcWoJM32m0qDFWac=Qr6A2S5SUA3$d%e^5CpqxR-iV8g^!mJXPQxdcTO zSs*Z(By$er6O0c;HTLKMhhk55+3yj-vw%a;5*B#Ic=Zz&fesWznDg5`8I{Uv>hE~|_@Ov4=X~FJ)fU@G z9=(Z*_j%Q>8U5*KTw!Xe6j#b9`Xu>-N>#PeUw$s$yUeRXj`Ul(C9IX4UnweCqqv78I#?D`fJ6^X(e!SIhz`wk%g>mB6 z{yGJo6FcQS9cJ};Fex^LPEb+EK5};TzdZT4o;4y>WmkGu1O3k6>FVdQ&MBb@0Po_9 A2mk;8 delta 423 zcmV;Y0a*V30`UWo7-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L009+AL_t(|oZXT=Zp0uEM!CV9AZJMt-0n91 zQrcD6ZnyJv$w^}=l98*-y0GPHAs`w5&_{|wgXZZQ1jAG6PcJ`YwcHPcMEZ}oC;DiG zITX`*0q&`ffJ(hY9^XBiK}~uA;RtSw_gXJ4b7Q!aAt$A~>x9MP9=K-R^P3RW6LhL73n6;|Er~y|9OW&qatWdZ(DA*o|Z4a7?W-L*0(;X!k#O< z*&dEu;T@y4XJbJiSJ!{&3j4JG#f3dYva_0@5XOJrmLr;&~PV?)HCH zSw)CZh_r$*mLU*!LX1Mt1|a~9hz5uvQ57J@Ob~<}c4R{#pa8yFLjc7>Fu+^F|G^AM z{hdH11NVUhS^zS%HbfzSJ9kEUK#$g*HIyPdR_mFEA|+>;Rq6_gCO-m)YJn^`~C{1zZuH2tII- z62KB@oInPSpdwfVngIj|BVZ6{0g}oDMxwt7erW`chOxJP{E zXZ{2reUMpbw&*&)vjn=|D(_aHZUbmMXE_qs{f1x~Fxg5&(5C|2%U2=4ALB@npT3zR zwo~kcWqS%hQSZVHEYb_W`rHF5sPj4oDaB1osRnfWQS-kCSpI z8ZVnHOrK|W1h*a}u-Mr@M-lAYXv}gv}P^^00000NkvXXu0mjfU%mLb delta 678 zcmV;X0$Kg}1nvcp7-Iwj00013M{Ml?000McNliru`XB%R02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00I(8L_t(|ob8h_j-4EVm1^_eZ!rrbBB{#?fX@t&AW3EF&i05;x(6W9X2*|~FaV!qIzj=7OZN7f8kfTg z{1l3adP!v0H4J+o7GmLY(IEgCEdpSfS3))!vXWA*o0Ezc0I|gwXjN+9Xd)nhgj!RX z!#EsoS3tIge??i4T5UA)>D~oqZPBO=OjOpFTRjA97FWIA^iaTWLJuaRwTNK@M7zGm z^&tSfv92dTU_Px=claxdIAxEW47&e{trr`hh(ZFt&ubOpMP=7(o&p zdr%AEc99*WaJcl#*zFdfTwn<-@FerC1&C7+a{nSjhp68Hqpv&vs5&Sf0xwp70CoT+&b_fzG5`Po M07*qoM6N<$f@g{u^8f$< diff --git a/graphics/pokemon/pikachu/kalos_cap/front.png b/graphics/pokemon/pikachu/kalos_cap/front.png index e03175dc41a6511498424a048777c723fe0abd00..b8d995d8794c64466511dafb165051512aea1a5a 100644 GIT binary patch delta 560 zcmV-00?+-{1^5Jz7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0005!Nkl1LNKW4(A6!jL|G`fiqx37Gwj{`@Tm@Hj+R_*^qe_WLm-~a3O!M zK7?)KIshWw;6+fU-gp%bFmc#<6=XPMK4~y+EXPYG7ua(^<s3Dm3V(n+%|EL97q-P{O^KDgd34O*}#9Bpky=^>_xzd ztRi3oi6D(dmZfs#6 zlyn2p_-O*7GoLJN)C-QQLq^KmYtXfRAJ#rvKHLU36Of)RcLxAI;rS}VRx&A`wFN5A y$B6opp}C1lNao}JtbFiub5tDuiT}no=J5mBV<$lHJ}ub*0000OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00H_*L_t(|ob8mqZ__{&#}8RZ(M>e`1)NHe z%3{e2vb~Y2I|18ASrRdN0B;sq!1fjiiF=;#gnfTh-`xdJ&#zfo`jwT$ z`F`|%-Lo0H(|^zr>cJsjpdQ5s{KeS|A>Q2P-xDvDI`hD6e@z1Ci}RHbGG^;d`Ed%& zAFsr*5+^cVmt|QH!10w3N*+C|eTGrhUiGT|b0H5?FX!#Z# z&=9}|0r+|fAR*=e)=zHKuqhf30L1tULVs2k5rDQ9RPOVpk3by3UOk`sY*w&n^nTZ~ zX5zCbW|8p(&YD9N0+un3F!nGSO#s~B{02AT2q+-`e*>5}11d*u-PT?yHcV_~=7F&r zGtg9#DFTB{GA2Mi!T3PreTy+*mu|@}+btrv7O;zIA_T56ZvB8oU<3-t{0^9L1YJ)i zZGp}MT{k@`54bHE0VB{&aQG`~&e+92U`GNhK_^Mw&XGQEYTH~|12rX7+v>#ELLHQ? oA*uX#Al}~oF5Q!d{X5aR1|jcE3o^UYm;e9(07*qoM6N<$g1@*J*8l(j diff --git a/graphics/pokemon/pikachu/kalos_cap/icon.png b/graphics/pokemon/pikachu/kalos_cap/icon.png index 1d224061e13183d42b86ad989168ba6f0d0e692b..0e93d93b74cb348ffe9967003679bd8519f65f4d 100644 GIT binary patch delta 314 zcmeyx+`>FTf|G-pfq}s%pmol~YWsSDk|4j}|7hT>;-)D;HJ?3Q978-h-%dHm)ndTo z!kzob(c|C${Boh)NwXs&ZXDLLP%oTkxb%Zp<)_S$(pclqOc&1{nmzB&o$I^eIhL9U zMSZ{9!M7k^IkEnRHp8`Ydj_qX&l7pmFN*z&T0OO6f`Vs$Vtt5Z_MiT{q8534(reLs0`6})u)OtB2B za~@-g>4S!pyVI36y_^5XY2TavNQKSzO%7`HE{#3^I+$ku5oDS4Gx=S5y^nU^KaZ~k zAKkSC*3|xT4r+|~yHP-m<9A1^!xHHf#R+zgo`wCt&adAvRp?Ip^1t!G0ATQR^>bP0 Hl+XkK{BM>5 delta 432 zcmV;h0Z;yf1NsAy7-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00ACJL_t(|oZXVKZi6rsMg0fwV=ScuQajYF z$-?ajQ_YqPmGDrh`KSyT@;kVriv*Mn7g}tC_exd0SnufC@_Rmv{pn?!sFtSza1e(qR0-l~xgd<%&gS`(hvH}{YR}FT1=< zi0`CQ+87sTLMLI424n4Xpq85&nGM2_!D9~_grN+Do_;b2(*qKbFh@kf=sXriV(DV9B{7g{LV162R=I5eeZAJPdNSL?F09K4e184+s&D=yQ-fQ3SwTf}!2k z#sfL;(VLUNb|?VE-b*z!gbke6addx#II5UyXf<>KBA_EAKxA+Y6(I;f>=hh10SH45 zst`iHQg9&wQxhkG7*?VNyt@kn6d)3uD;;UArviDuzIq?4g(rd3Q!mFV`5)a2YB6k@ z8d{qH9}TERun>j-Zp8^eBOpZwGF$=<0Sb}L?I28maenUwd?YgDd}HSMTjPIy1Zc+1 z#afn?{E9*0d^WknW|({#kvK3w0EOV88-J^F0aV(v1)wb0`#WC)ihk_Egx9>ky;RWD z-vCaFCx08sLKu|a0BCxYh0s{omB4*I%WnuLq>(^y*-4R*=Aidb2y^w7k5Iayr`+rw z1(0o~iYmx`{uWwIO>%-P f^08e2{IU23J_sIn7C%8000000NkvXXu0mjf)NmXB delta 766 zcmVOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00L=AL_t(|oYj-dZqq;%hR2E2HDfo3O{L_- zpil`Z#&Qr#5?7UAgA=CdGOH*RJE|yaE{Z1ViY}^JeF3DF2cQqY17yK2@4}gzZ-ej> z@vrQe&;R+)84n@(^MgP-EdjjRgXue;NRmZ~q230Mov`43Gnl zr{~swBaWeO0LE;<0sr`16A@!8y9O3sX`;p0A40gmkdTi}1d25p(AJfw%Grs^A^dnK z2+H(_>v^jLG<Nf6Zl&qoR{_J|W@oVxr&y?+pd8USt3T3>hCURn3RoXk%*N;UaOgQWlRs zed%f7DhB}K(NbDC3l7HNvIv0Brov*6XAV4_nUGT0AzCcfbJRitH|>%I0%$Q8(`2Uu zf!zNzeac0le$zaj4*130FH$9vCd)Lq_?`j8Y3Wrje+St60+102rPM%g?w$~v5P>!F z?*0KO5-P{RZYL1=@`{wC8bDyT1?YHcEG3DxU?+tp9!u~?FEUL`F>xUyXc&g8aRCq& z0x?nzbnzE2-5vxc2Wn612yYjwIH&|$1<1_p0)QElX9Yr*tPVnF-0BiZxlv)EGD@J! zg3=_Ve+8a|YeGU;*~crLh*40g_B+*m;!P5DV1Yzvb)R@)fF&Z0*airMZU`N9*nw?8 zoG=X7bMrqWHsDeO#xfwK;mer~biJ@O);->47q1A=960=OZCOx=JZ7fke@m@49GtE( wfY;o1a9o&V2Dkj9-3EnRhwHfw{4@Oq>U;u{5G^)R1ONa407*qoM6N<$f{ngGEC2ui diff --git a/graphics/pokemon/pikachu/libre/front.png b/graphics/pokemon/pikachu/libre/front.png index b83d135ace0c82412a3cc1568548a148a0003d1a..234ad40f955eabe6f1daa2cc6d1d7da6b38188a3 100644 GIT binary patch delta 585 zcmV-P0=E6{1(5}i7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z00062NklsoSUO-Gg0C2|`eU(v6>4{)&l@E}f0LV>L*?dpPElSm~ zB?>8F=T9yG!Fj_A^A-cX-T_=j1qZW`Bc&*U@)J>N?UwKUH4tx0$P!re*O$^Tm&>ve z5C~oY?=q2_G+fF_R}cQBH=6zuU4VZ@N@DI^8PXvGSRj2BbkQvLMH9ILSVbTorg{Ky zrG6@*B^voQgfjSjs&h*_wU%%_&!eYUzYwJdF>L@K9Gi*)@9owi*E6m?NeBwBgNNB; z*=;v~l+c&O;x}e-ERBDQpa6t+ z^^X$RzXllV0buJmTD7yS5}S=^7NBm%+uN0?k`0VMEd>V{yaMMf06m$oV{Gt}6qag5 zPw^7$jzUyT^S|C;=x`J60ZnF*q|F;t&Fsu^9wQEdtadHNW!E``b`{hq_nmS4>PguA ze!wJDB}n~)9|W2!K$QRD$38XECkvV|`+m}|PgC@8;?#2=Di4pxC!TIzA}{$r`si5S X_q7!mcqgQ$00000NkvXXu0mjf27nfH delta 679 zcmV;Y0$BZ#1@8rr7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00I+9L_t(|ob8mqYuiu|$DbnbtRGgLF;V;n z)F{HxE#`F*WH8DR=#a$+K~21108oGCSagLrztmL%-uxl)RNzQyjOHlF6{su->GrrfCl z`SeU(M=B}(_oeJqfVa_kaT(Q%3;kgptphJ7MKQ5EQ3 zs|_Il0)Q8bPnHRQI0#zRIzSmWu@!{{hj!zc>=H2PL7h8Jk(s%Un4`T+X(_uaQfqeoDf8YQIoAUM>B2AbF+!_w1hx0Z8 zzRPYxcuOF4c0Gu>Q|n@CyHr3MTEOYX5V4&eV`BhAx7r3BwQ(axY;M~IEHw1zMXQCui1dd z#js*$>c9W_+0&LS?5Tdu$T?qWZ=gcir)4i!+KUv#&aH5cH=Sm|zK(N6(tWvGQa72k zA_|qH4t!&sp?ba{?njcKN8ZU$&huRpy538#Xyb6$nej>Wf4#B6Miw6zk+Uiye-Auw znK`5SM3vW}t(j_fCRZ0bP0l+XkKFffu= delta 413 zcmV;O0b>6A0_Ove7-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L009e0L_t(|oZXVKPQx$|hW!SoNG;vy#>f&O zMigPSTcZr7TPqgWiXuhIMqjq=cs9gg%;C1+JF_#u4IX}dC;7KOrT*AZJkA65c%b_k zFyhOw;E@qORfHmd!GW_JMd8z9NMXK$h(P!wkitOWV6Y+}tNInOFhK`0YavXR-`0kNFx|45XO4w|QG4$v z#KJ(8mHUYnFT(U@{8VEiOciuUgqa0j5@C*hT*=@4Z9hH%c;cRE)N#;-00000NkvXX Hu0mjfN8GLQ diff --git a/graphics/pokemon/pikachu/original_cap/back.png b/graphics/pokemon/pikachu/original_cap/back.png index c60155b42dade6524f37b64930b8d43e6c5360c0..4f5d09e274c853c6f0bcf70281342ff953f1638e 100644 GIT binary patch delta 564 zcmV-40?YmQ1^fh%7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0005&Nkl21r+Zl~qTFUI6Je)X$wD(`an z58M5j%YS0D_H1kjNCX|=J;02N08t=n0)&tW0`I^f8xncJ0Pxj10w@%M0p1e+ z4^}|z7XpEN3vSpiV6`feC7cOaM*-p_UL1 zr1njZfIpo9NCAT=f?B=MRxk>EfY^T@bHra@Tps8FgdqDHaP`aVZ=3d0tN#Y>2u}nX zIB5_-6KI}522MXj&r9b^C1tmcG$md62NLhaXbrUQ= z9r2Z)`3r!?gUmv=Mfdq#B^dj)vTg+u8$k0p%aK6uR|M67#a1f9cq+iWd=v8fG0X(n z>AN{%KSd#I+hYI<<1SQSlRg1l);8|1p8-pF(7zU*0KmIs0@eu-K)jG8m}h7J2uxu2 zI4O6c^0LXo@_AMxnDrom_NE}~Y9C-J5Ixw2Z>xU=bWbwF+A<0N0000OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00JCIL_t(|ob8i8Zk<37##bpQEDm8IC5l`| zIYEvP2gyZ>rxYs`!5t!!_k?naSGm~02`oia6iGW!pf#c}J#)9fzu zk^6dizvXe}i*!j&sRnZEaRLyFjgA(% z1`gH&0!XMmf0aJ0!ohTLFH6IuBuJ?a8c9C7z^ElEb%24&*k9@a5&9`MsUQ;7D9T+bemi0LD>{tU@nqcy^fCB(k`BH7veeJv=Sj-lHn#!@@M;0NO`ZhY zm3Rb5La7Uk^#;fwb!v>~M}Wo!ri}znGF?i5IBra?FLJ98v@4+Z^Ugo22F16)v&BCd WkfWdPaL$wf0000K2HpW|i` z!l(Fs*0{$2pWsYBs$sco(Agi)V%P*JC8t37xx{@@1JmoeCQmk+z>^gv2N5VO;Szsn z0?)g_Ap}6A3%m+=a!!3&V&wTTbNG1`%nC>4vjyYMa@+(LI7s@H&l`?7G6>$Gdwk** z4GckW;|PHGiCyxtBj8~AS%l#GUg zwFo$oC;~Q+2z31BT)hfbz@0z>raBzp!gJ4o85+-3*v98Qm9%Gp4v||5qn1qC^NHn+xx2Chc?FPP1i6*Qy#m~LdDef!;kp;C zg_}UOfxu3NYXy^D;02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00IR`L_t(|ob8gmZqz^!#}^70r)>`I0Z=6F z34(ZlTa-}HM6yHy(pD~z?TRK3kZ221frNMgiaXIE7r1f56=1tOA+h5QH`x0O%rMH73fvWskKUn$lIyZ8iz%=Wr>{{ySk~VWAWB_`w=1P$l^R1DAaJbW z`02SZ=4U||u*LCNd~&eN5$LVXtFVi+*r|J+wL<{hj+ZFzGNYZ&O$gjyW(a(IVS4x4 z8WZGLZl55Ke|+))Hxqz=&4dGasaC*mulD)jRycEK0&C@$|3^LR)Wg?Ue*zi z5$vPqQ=QEU7L8u-de%&I7D*NvPvERMR3Ts);|OC9f1}X^zzxoCa3hX@0`lL0kr_}q za;vuXO0i)%1u_qe-I#%G1cIlSvvfUzrYXQ5cCM diff --git a/graphics/pokemon/pikachu/original_cap/icon.png b/graphics/pokemon/pikachu/original_cap/icon.png index 68179437b49d024652ff17d2fcaac6b91a61ec6e..6a356991e95aeeb213f16f84791837cbc90729b8 100644 GIT binary patch delta 311 zcmeyw+{ipZf|G-pfq}s%pmol~YWsSDk|4j}|7hT>;-)D;H6J`(978-h-%h#6by$JN zHFegHlz0FCzfF4OWxCSf#$mS8!7pun^R?$p`SB|AHNJB9EADnDFAqABoID=B(Y8 zqR}WKShYUgi}%p_7lMY;f=`cfNi3LtaN>>Y!Z)ooRMxah1gY3v+2`bTwxZAfqU!dB zb9o0DPulr=rp*8UT>9DJe-W&kejVma`PeRg;tjw4gro9)3KQ+8-T9fk(&D%BmBUBn z7dmYD_L85Iwdm_{H-#K+Gi9cUi4%Gqj&;or{u^s=!+7_Q(4nb3i#&k7XYh3Ob6Mw< G&;$UiQOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L009p>RBL5ykvbiK$zJEzpLWokcUf6><5hk*9Qrr{6}PPbfQ zZ&kd@Y^o+N}fO-Sm zh-N!9GT9Ubi+@_=vVJ;l$?ZpvC=AKPpdbuAdV@TO!qB@1ok+sWm$TGe5{5KOsSR@o zOx~B4G50|SI+`^1s9X|;7|$bI5{4=?#{XmzW&|`cVOnIum^v56U?a?L`|%B&S)iRw SR#X@O0000;-)D;HD5ek978-h-%h#6by$JN z_2`T*C!hTPUuL)~$XAQ!+Xlz?!8dKY1s^W?^5k;IiGAlLn0GKZ*!4O4)xFF<%TOZJ z%}L84m*M2@`3w*5oL9KC+oRA{aI>sq&zg_5{qhtMP?r~2%8iW7<02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00AFKL_t(|oZXVKPQx$|hW!Tj5FMBhQcuc; z7;x5h$D)KV7a_^_#l|A>JNe zhc(daiOZvJ+WiPF%!vn-$uV-}bMn%NR*rz)-!_SIPRemhe^-5QQst%&0p-i+!i0cu zsxm3|R!(>6b@qUQri8F5dZ4irAmHg4MciWR0qmxLASa=LdiFrOgU&u@@3pD%r_Ki; zfqVg6i()x6(yJ*7BmQZTTlHVtCAsj;pvNQ(`Op6`C$K6 bzwO62AIG2-S4|+E00000NkvXXu0mjf+)1%# diff --git a/graphics/pokemon/pikachu/ph_d/back.png b/graphics/pokemon/pikachu/ph_d/back.png index 568fbf91e726c61d36c3adf2dff04ab498a85e29..83ee2a559694773123d5b924f808cf058a935e90 100644 GIT binary patch delta 676 zcmV;V0$csn2I~co7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z00077Nklu%&A428!Ayd-4${*PPR+yVqLyOH)sRZCT+DCgrGbIZJ5zxCe= z@tGcsc}4(yNC13DV8Ani03Hz%fSv)+Tl{TmB97$Y)(AHmwfxpOJ6RRYG6EGrACbD5C*G6G^@ zwLtE2eA5!hW<>F@Bw&h4nLyctg#-X}jw0aCNGQ$rwGj~k&Y@;-Qqhe0h) za7}5n(E?zOV947uq0@^QCQ!H3A+CSDl%W#DeGgz0LfA}a01Lua0ys#bQWOEcCDeI} z84>~5u;{50&~h`G;LQXe3>iQPtmd$!nWLPvsi5omDnqO|`y@~6a$=IA5`Zl;|pgkp4dV0pz6U1o@oeP<8tPMDjZ zPM;XtwhN%SIa&uW*OxRzyy>ok02`or09d7$;!g?UngX`Fogghxf|&uf z_2(uJy&xDN+yXe~6d(_m0Hb4QA9&+(T@aQ4l#m-AJQ>h2%+*(D15gQHa8UFO1NpOQ znIP+}Z2%d;_y6KR&3XlN`h?({Z)G6sc`=WAC7`8$|IP4Y>l@O1Dc2CwWVEsX0000< KMNUMnLSTX+MK@Fc delta 782 zcmV+p1M&Rp1=R+S7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00MbQL_t(|oYj;;kJ3OC$EV%Ivr}jj4;pwN z2Tr)NAqywLXG5|VOVT|9cB_5>KY&U|&vGg^c9V_t6PSP=Jb2o(AHYxIOzV`H*4V55 z6B07-*WY{dNFn4ujoGLGYNr)|#VQn5t3qKxg~Eag1qb>Se*i3>{tYkyCbRM}z!7Lq zR;9Yh7^IIGRud4*fB~)Z)r?R+A!{Q>E5CAkep!P7Kk@n!n z(HsDpw5<=(VyA+j$ccB9QUKm#_2MXKajQ@Sf)I+d$CY|P))$I72arDxmLK5cRjx3^ z;O|M+WaKxgf93m^h|k|jfQrepYf-fQG+ux!2^b&@uif-J&FcP?qAOQV`RW)uUkZgi zm4IKzH$Ax^L7YWGVcUL&TykKw&H(_{Uvh;pwf)Xx0kka-Kd1n-aN-ifUv$vrLnFqA+6f17EPsn(0Wf#*dMfTk3|BSO9}KC)%TuAYgqf1!9hNNdBGt0`oRx*Od4Wwg3PC M07*qoM6N<$f>s$;0ssI2 diff --git a/graphics/pokemon/pikachu/ph_d/front.png b/graphics/pokemon/pikachu/ph_d/front.png index 0022376076b9fa7578ebf360ccc3fed39d19a4b3..75034ed9ded325a4cca2dedaaca6c605af0e1678 100644 GIT binary patch delta 687 zcmV;g0#Nym>Y424aAAc(&IUKxPcJ`l{U0XYx56BIM;jzd5$>>`> ze@SQnf_(}Afylu=LO{xQ96W$%zvHzR;5=2m64(f~8rSDta^8EQU{-%U zX=?LH7XW$*A;yUR0Evjdqc=c^4Sr@zo2(u&%Cp^NbLp%gHr;N{KPQx}xo_1HcJF8->rj2TU^76`Xk? z1jYgq!v{)w0YVt2GOY=5w1jDb2e^O9MkOSk=TY+#2moXS9OMLs#3-yA7eN9cV)HyN z9@QP=R7#<90ESE<$jppn);~mGf%!?zlHw9T7`S-T*GC2Dxec9|p9jTquee!{=eYN3qPiuNR`*srCx%{oWt1kTa`;FVpA@Un5{bP?^+Yb;Y V83TCM>DK@N002ovPDHLkV1jBVOAP=3 delta 775 zcmV+i1Ni**1OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00MGJL_t(|ob8moZ__{+#_gbHsf2t#>Mpl zR<$a;=dcLS>MF*#peYj8h$;X!OyoEYLJ}r~R0V)(Io(dzmf8&f1d+(*!wvx5ZAyh3 zNRs=UPxlVn6yH0UD$8%8NeWnuzHA@gwoI2kI-8D0M+jwr)uXBDnwAN`I4arH z+MR2NjO@wOOmt?hMkS|A586BbCQ-7ZC37YP)opWDf6%`>I5x`9{6^^30q)H=4B61{ zbJfBat*0BR#3L1paIUynKR(6>qCxrq(a^Jh_XLCuqw8T;1~>o*Qr+I?}F-EIH?002ovPDHLk FV1jy%P2m6l diff --git a/graphics/pokemon/pikachu/ph_d/icon.png b/graphics/pokemon/pikachu/ph_d/icon.png index b6bff421642c756eafe3bb33c0065ddc4b2a0ff7..50357beb5b1f2434835443e6a67a5b0c5b6dc80c 100644 GIT binary patch delta 331 zcmeywJe7HZ1SbbG0|SFkKRa$8sH*nYjVO3b5U?u?cLIk)%Q#S6aL^rYjnP?LfHYeYxKwWxc2 z9L&??B)4}O1UYQW?Vb5qCBb{%Vx>ECEwfKrKdWU=v16QJ{kVR@&clWVj2cRJ-Zeab z&=D-lAkwKi{BQ#`@m&_rT3bW`v=96&qU;<3-P$0 zc(3^UAa5f7%z3A;F7}?i{p0?9OJ3Q%dcTsxjdRHlXRal`oPRz%Du2shx&0D{E-+rl z`uW50R=F;FGslqn5>4|7%k6*22yOfIP;Y|rSBH8H`zNnouWbL~zW_E8q>}&u delta 424 zcmV;Z0ayN&1M&lq7-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L009|G*Fa)3ZGg+QP85gJ}m{H=juJvj&S z8UPJB;7gDYI4dqVQbNv3DJBsBsn7(Z{Z}PYm~2E$z!tF~f5Zg9)-(=d0*a~cdWRts zQ`7a9hL|hX9bbLOmFVs9rP}$B2*$Fj9!Tfkjpoo%t92@k_f(cz5OAtneJAz-JX4vs zaebPL@ALEikB7y%4qWyvgn@81C?Tvi0|;SY@ntgyAI z-dk_7FyLIZIs}jicv=G23SlPOzZr9j$&W>t_tMwd58%hXIvFkfsJn`O(~nQSl*3o~ SBMN8$0000!kE|NrgS1`;5*9z~j$89!91!d`5fi`&=hfBdyz zex}E1dPYEgNI-r_5Wq8n0v-_x0Gs#J@Ik*Iq2m4$!2 zVlr1h7MuaTvS8UR0|K49S zgzE`B=x03Gjs=hzl0!o{HsBUM0Vu<&RtckiCOA4$9if!_K)+_Nv(OP-L)ZbR0zP9M zhoPAO`wR-;^Rv6N_6R=6paOpOfM)NmgaLqf4cH?%=;jY$1wkG0IcwGfg7tsYke-}| zQt~^Ct`S)q7As3w4^0^&vyg!GJ^&jR0$O5PN^CUw6&zf?$x!AluSMzae@;xfwQugMtX*)O}OOe95k- z2yA~E;#RH(WVg*4R>YPhZRt)g26a9KB$-bdc}(-XGH&J%y7UGBPAQW2Ue`XUo6NYG zAEWeLUkIdq4AIjZlOdAuak?RR|5lX(Jiav)AtofErE^V~L~JT0ytQu8=og>Q0lg)o zl&rER+ek`hvoZ+5E>*!O!Rv1d?=joC*vPEaH|2V_aZbalyx5WIoF^f+$IIE$D7h)& z?QcpsHW^F9Vp5o*=IehByEc^(6PJwc^#5A?0g_rL(t*AR+W-In07*qoM6N<$f;wty A=>Px# delta 908 zcmV;719SYz2GR$R7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00Q<&L_t(|oYj@FPuoBg#$8m&6-#;+QYF&L zu@xy53>grL$kf6~rCBS3I<+vk0|SrKh`<_w)CC@7oeO!J|9BLnV+2paJEJL3X|Hs|WNsu-UPsZWU~_?3@`c2;0OmgSw*vsi?Bz}< zk&za2#|WJc0xUpTO$<47m^te2ml^^vXKos0oZe{P00OTm@ftyTU@!4=V;X3JG?ME|RnuMf1ID(^ zXYM)4bzC)z?mpQjO_%G8B?RtcQZ>zAXRRqpf6m=q8$C*VuWr+lX%<_KQ#)y%yZiXX z+XPXYb{w-&atejdCLN8vFwqZSLI8L@xXeJbaq i9_ZG3o%ZMV&+0cwoKNLwmj+b;0000V%wGXnI_0Xz&L{P-O|_W}~}5ORJ`1L~AgUuKes2>NpT+tn6*05ZT^2F!nS zM-Kpppi#3hv&k!>Ump;X#iEp2$>mOvK7Gy^1g7Fq_c-L|)d(dA4ODl%{2{k$oMxa= zwrL3qso0Yvd2YLTN)Q#Hb>Ri)0`nhwx&j2-0V%XCJiY20fNRU(WEYSC(!{JxZ3*_` zUB5NNuPKBw0`THv_vu$LhXH_@@jd{a5y+Qa-2lYXWB?Gz06wlOgU`E~zX2>{*oHs)^0##~!mdXZj`6j8 z1013GNTKUYic+9vEB2x8E!-^!UQP=)$V4WyiMQV1di~wb0ND2+|#2I$a}z7ZEXNgxur+tG`wwD vP?*{s0%i{1zgr{U0Q?pCNdJjXT*nu%?i<9uNv3ZA0000OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00Lu4L_t(|ob8l9Xxl&(#t&oASe^(GjVZ($ z+`)woE_ki!6)W!Snv5N)U^+ySqnsT>vKXXz2$Yc8qEm1}gbM|mVi#U1v~!kp_twEv zC>`9)Z1goC}i!<%9Y#c#N$s0vctn zIl#6t1k&7Le?Ej}r0V?yDkk;=gC6h2T!{Fw@h}~Pz{}n`H|XmN?TjB=i2Wqur^_pY z#BdM+TGp4II#Lt&MjS|E#DN&GE09OuAOyIRoLXEE4#0!203$GB0Ej*H{z9{pGXTKg zcW~3tzl*Q897wPpo+Ekygtg}IAwY>PsC1g+-wdqye-0l_pcCo)BT6$n?_Gz)U_GjH zprbwM?q81`9#|Ft`wf>>-RkwY!Q+U4Dzc|}hDYOuVS;FkI%*r*GyL4lS$x8Rkmf+M zwcS@A-+>9TD5O4k48?S?0SJjAiU%Ns!UrWHqmnsd*kNmIMaG zE_=nz7UQRrk|ofIR6F6D+iNkqXeuIrNDRO(TA+yA#2b;LlrgeHAurTPp?el)i=VEE q9VGU6cHQeP`Q=KYN#54d`VEig?>n+Y+Nl5l3IG5}MNUMnLSTZH$62@l diff --git a/graphics/pokemon/pikachu/pop_star/icon.png b/graphics/pokemon/pikachu/pop_star/icon.png index 04a399165b4aed8944166b15305d5a7f802f1ef4..c22ef85a4c1ccb8cbf74e7af0e73a0770c8c4fa8 100644 GIT binary patch delta 337 zcmV-X0j~ax1e*hp7zqdi0000?P=%b4dp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0003BNklH{i09Lk zdwf6nlK^I5C1A+F)jqQO*u$N9tw1#}X0!ruX9H_cl){`q9*^+C0eS=Gg*j^;f&G7& z043|ZO-7)_B}eRY>n9{dM1MQH9n=ZkqP$)l#AKcw9l&7*vF8-1+@!hLQR^v)Xj`b9 z!MQC{9ZqmlTq$Ffli=BC%eJgWXhfW65X(j9>H3T~%QnBMPyK@$E>hmayMFirkg^oYwYGDP00000NkvXXu0mjf&&Hx3 delta 450 zcmV;z0X_bk1B?Wa7-Iwj0001qplF={000McNliruG#xh%%M1Vj02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00A&bL_t(|oaK_SPQx%1MLlPz2S)yY0ffTj zB?HdFK$g4?8JYRvxR>mc;U zWb82tH>X3j(>*9h!$#PK4~0&Rk;O+K`EG5LHMTV&vV?}Je`G9F{8$hT9i`_-7Y$@@ zaZYJshXTZqbkt7OkVcSWm(VfvkhPs(Sw8W|Rk|9MFBhb7n-m-Nc`L75XOMT;i^wIe zxKJXr0fY{OOZMm)`0M6ym-`=vTU@kgE`$D!@Xzkv!u`qcfZ=CjiUj0gjj#nqp+Xb{ z_swL~im^iIRF#>4S!5;Om5@7Nlm?!H@qiilfV6eM3^d$pFb)`;LS6y$fYAWYuWSy? sHoTNRFuYnxF$ZQZLI(^w@?YlT8?o1~wztV(e*gdg07*qoM6N<$f*G{A(EtDd diff --git a/graphics/pokemon/pikachu/rock_star/back.png b/graphics/pokemon/pikachu/rock_star/back.png index 982fd0ba3e70b4b66fec3316d062b580de33e36f..fd86f4d59ce7f92f0bb577c4d356fa1d678c4bee 100644 GIT binary patch delta 693 zcmV;m0!sbt2K)t(7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0007ONklyE7;423N%L4&;i>rO9ptH4$!CiCZQCse;R<&YzC zfCKWnwrvUuI1w<$BWFa-XLCYca|a*`^dHbY$g{T^5x)YU0%$u5;Rx0Hx&7&y0N{l4 zOmT#(oxm0v0}wm~LiTwEV{Ae$V5@((xmRK zZ~~ARP$}#?DTb7_g)abMXw^{EuoIe;2N~s@2kMs8g;2AE9ZKQ*%f5pQg@jT-&Zv7i zLI;Rgs1!YR8IM6pw6=BZi;ZOv3?TMUWZo=K2pAD8B%2+U76H=)bI}5N1k`^jj9v8l z9s!)}uk>v#c#?N6=w83*>*E99wz>rd&+YgL6;t?fe~TOLLBSEgoA2ftPdd*`ufT7MLyBS be=dFiZdxdxND4Uu00000NkvXXu0mjfYF|1l delta 805 zcmV+=1KRxj1?&cp7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00NLnL_t(|oYj>*Yui8=$4~Z0k-$ z#|oia6rmxMLTsN2p*2)hZ}7KBOF@)u?NZ3p2oL%eeWAFZW(Z`ohk&6&qVLk@B%LHn zZZ($vjnA^4pa0Lx=`bPxsT#c+pgpPqR90i58Z{Ow)L5uce`A5bxCVgvi@yO1!0fPk z8z2YvXMQE#U9ej1~j0T zW}cz*&LvT7QA7?HY$OQE;~zG@TNdW|w z9BPvw+uT^_Y2HM)`jS4ZhRc<*!$}f32ptthL(@vQOC>e;P@xqvxx; z_DPv=qN23rjhv;@NeR6Opa&@v4tf`~M=FF)3-R0_uY>lb$8^I0)r<)hga-yA8cjC= z(h{Qr=!1TzBhsb%9u%MbCRX8gLk|(mL!++eeG6U|0Fl8AQHTumE)B!??>0`49UH`Y zGjPPmf6vFfg2%QC%Z;r$nyr~;_e zGF>VVd|fZjs{pjD&Jj?0>YaLT+ruq@X>~x#HyBmgq+qw)4A}CIpum71a`?a;dXn+JN_u> zDxWSI{)6C}0sM6Vzj%(vvw|$Y1fX-ybCppRSq;ns&pqY@zz4_+-&B?53?Bl3$j*PV zu$pNp>F!YXpQ1blW{xv0_4_PbEPXaEzf`d`uOeo(S5?y!*xU36ezXVQPwlITd@S}i( zHPLBi8NAgl;B`G63QREYT&p{zBE)|y?(;GwsN%Z`AmeYXx#s3OJSu|ufX^8%!eHhC z$t|~*TJq~M9K4g?+hH1{3q#Z&zIIPE z_`^Lp3{Qf{&r^8k{TCxixO5u%3H#vpQTakZ-u~Wez-A=e09VgEXFv@U3<-aKCaq8q zmITF7HziO4M4CQ>$3k|#>KMccg9hb-l+^sXs+TY~2QIL{U;uA^NfsrD>@C1=ypi+j z%O8gux?n>vd8(VI#94|d!2VI(cpVs*-5sz6IY8Jk(Pf+^76NpB-T(&Epy&X`-Yddw z@(Lye3GX1Pt>P#UFCCHmlYv+#UrlHo8~PEc$LyQU1ugxg&wR8{ORwU@M-N>U-1?xU z$MBuyRr}Bn8ErR{{MdX?5A<9Qo)gkI4=%*HF1+I%{}Nx6U>5({r9(sj0000OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00KuzL_t(|ob8lBYZ^fqhG)BiS7$|35}`X0 za%qcp)x=9dJ6?(xStlSKL({Vf?HW9V&^q8rjL`W3{Q*lO3e%J9aXlpG-AnUFI%|j} zyVFYPH7_j8?)&i0_sx7P08jcyDcb-o@!x>Hr3ADU*xRh1e<2x=Hy@TLk0ohJgA@Qz z#e*=$H3>irVO9#(Sz7>-jucWUsK(I&J!jGYV129@N5?1qA!AoH*^%^zmCDKS`{6lb z-oM8)nNKUg8r@N zHcXg%siza5Y(@Z(({5qv&Ay%6;R%IEfSwIc?|u%b&3R808QsHLj85-Re=(YKThfG> z$^K&aYM+j1hR;)G)Q{60YN0)g+Ef6NsgBc&AuA?3{R|!1$zl{xGBj%vl5J5sf{G!D zfSHT*ZJE_eQwsH@4A5%u$BcJv2oXxcs1LNf6HF1VBZOo=&|c&N9|e;Bt#;8y@_&)C z4FIAzJ*e;xJAn8ALg7FmdBA|r*G`;-)D;H9tLF978-h-%fGlYcb$( zJzB`j`RDijvW)C4x+P_s4JJ;V{NKwu>HfC8U)z};U7jGlPW^NTw*#Zvq539CUAEc2 zwhJs8cUdu?xIQ)JNHKfG9i}BZN(BKn>Cb*n2srO)Ykum}rTSe@eXMnh9{L~s*3)oB zIpXwmU6-v4_Y|My#4y?)wEKV5&Eck?vc7L8Z@X+ATku)+r;DvlaqG!m+VjTg$?K_~ z*mxah1l@U2zVFwKdsQ)|%|7W>zmq?PmNa!TN&Xf5Yw%N+N{nMF$tDU;3%Ie?I@W!{QSvM5n|YDBA}N O1_n=8KbLh*2~7aPo0|au delta 425 zcmV;a0apHs1M>rr7-Iwj0001qplF={000McNliruF97{MY)=3H02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L009?CL_t(|oaK^1YQr!PMRkM0+Bx7B`vAQ{ zZ{WL?u9S`O(gU&2;$;JN31pLiC3h))uX+SjLKcsapD%38P7ASJ3P()Ze>xV0e*?>I_mO%7o3MJv zGK;-q+T)BojmZcejy#L~h`!*VP2aqMff0C$k_(BF=Q#9=ggr|cCBfi=MML*O1!iZd z*i+Hpd3e~rDOj_U!1E%|FIj~E%m{9+5P*SiC%~+N(At7cwe`S2vPauC1Q@gMaS{QT z$pKXHI1q*SJ2^Q%yaOt1u4NW!GJ;*15yl)aJ?BGME|~mUM?D2*<%4ebxB0jM@7=eE TX8E|eVAP4w-Vx&S~x@4($LRvzIu@czYN9BJM zA%sk%75KRffj|f$WP&dA9&tuAKop3&fFTru(BF6i8wx=M@YMzaDO7?1-V*)~cR=bF z0@V!MhdIyz$U_@LR06s4W<&yd1hFjHoJ4NEw*g|CTId23)D4*cZwZ7}Lb!nXHzR^_ zA4fn65JVBS8il?BEsOzDf69@50cn4EXa^92?C(GvmpR@x{imz`2Y4d95!QesC7>nH zJb?l@uOe6km;o~2XTTu90&*%7m?axL6@)DnS#_;CQ39$C(Keez1$RGLq*bAu(pkaa)Xd{1)<(a<$ zNFQVthAn!|?=FGvw`z4Okk|m4&sm9tcE2H*25z>}5cH|Q<>k9j-j87>Xq|qTBaBlN z!m&LCprCi50f+P%;970t`T7M|2`~Eh!W#g2mzKcl1PCBqXeBJqkOByo!0B;P??mHe xQ-tmFtVLMXiv-r2Zm4sBtw0;}VjF&~{s1|5JN;t$euw}7002ovPDHLkV1i*H1P}lK delta 670 zcmV;P0%8641m*>h7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00Ih0L_t(|ob8i8kDM?N#eI<|=+=s^fGW32 zr1V#&J5gM^O(aXer%BMQM9CHu<|?E^3PY80@t4c^FSfa)y(ZIOct75}v4N2P^@i0P zkH^pd(w~Z=cs&02oBmGfSWQe&s;?glQ%$Jf+~3nq8aSZ%e-Ho(egEZ(L{dDqZL8Wm z#4Q$qL?U%rJK!4yB*?L~_2hb_2i*gZ=*shVM_7Q*G96)n#I^i%$E?fA0M9}Z$smdH zE`uoqQXy6@7d-+{vU&%siy>r_scab2y4|UC1rS?|iM5Re&Nc!9NT@ZFIjqCkOz|vR z!>TMurfxJ+e?IuYqAhZD12dDQHzF0VS=8AUbo5<|P1pVAeAr zupG=3l?CPq_-em|+F7J70s=2TNlc7e1O$FLU?VaI%!3a&V$_$3!UXU_$)3m!kRt#G z;uAVv#s>vZj&>v{JwV1eS3s?{B`CQa7cOg<=xq&Se@Cd#r1;K^5hT&mTeT2=7un&W za!5dCUWDjEV76z?nYs#y94-)-KPYA#RYFhinlL- z1MAKLFn6-rT7WpjKoTD0-XR$RV2pL|A5|O0_rROgAA@=Tk#Pz^G5`Po07*qoM6N<$ Ef>bdZegFUf diff --git a/graphics/pokemon/pikachu/sinnoh_cap/front.png b/graphics/pokemon/pikachu/sinnoh_cap/front.png index dc2712fdfa83bcb55b49357f8538635ec0cb4cac..91d91acc28c36e79858d2d9dfcd2ddafb94e328e 100644 GIT binary patch delta 566 zcmV-60?GZ;1^xt(7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0005)Nkll(+U1Bdg7m(V zj`D>onh>N3MNI(2PwbMHj+_I$>`tZdH#pgU)K3UJHh5FbJd6ORsWf5kXk8&z8uUrWKr#0w8?=QX7rA0^EP~@~nr$ zbT6uf8$jAXpeMsr!ICd>91@U=fy^IC{StuWUG;JV(3XF00VV{6P^p5qHxu%<%^`_&r_0>|fOqtKm0=s1 z49{wTs^?=w{m9U4q7st%_&*{eZ~WXGk$=)Z@x(lS0Hb~+RoE-NQUCw|07*qoM6N<$ Ef`L8?q5uE@ delta 651 zcmV;60(AZU1k(kO7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00H+&L_t(|ob8mqj?+L8#y3bVwlqE@M1_L= z0LRK#T@`H+s7&F)_5<7lAmJM6PBK^JbfmCdqDbtx1Q+(c0Z+y3ZUEhSaxKk`qA1Dt z(>H$|#-8FoL>Pw8Uq7Y`APHz}HtI4FHspU}xVS>Ih^39Ao55ovl(9%uXLh)-7}v zWGv8*z*%$fcWoJM32m0qDFWac=Qr6A2S5SUA3$d%e^5CpqxR-iV8g^!mJXPQxdcTO zSs*Z(By$er6O0c;HTLKMhhk55+3yj-vw%a;5*B#Ic=Zz&fesW;-)D;HSaxL978-h-%h#6b;y9n zmD^0#Y3I-X`%Qg!Z&ZzR_~3ZZuJgG>FxT=a|0};66!$TzoH}q|+sB8}_jZ4}o3JW} z&1Ux}O^)^9&DJ3qz2$X+6?zJLPR8!ATIa!fp}_XO8f(XmkM)J>49(ou1hHDp5n!O1V)c7CzfFe%|*5hQ5;N}_RVTFtZ2loM+e z)TIqnpX?D)c>e!0@AJcdH!yDeTfk`e_XFe3Z-?2Bd^yaj@~ZveI{CDt+4hHQ=KK<5 zbGc^stI5=WThq=q$u=Iej$uB~8Pt|8K}W80aBK+iLHy85}Sb4q9e E02j%W{Qv*} delta 424 zcmV;Z0ayNj1M&lq7-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L0090^R0;?gU%jH}7?Y#8bBe&_J~VVMM(j z8rj1Xm8gHZC>&}pd*b77&(lc4(5Lh~821r+Zl~qTFUI6Je)X$wDu3qk zAGUj!%YS0D_H1kj1 zd#7w8gpi210za1$flvq`B!Uj`9$-dBfG7|(0Ybr9b^C1tmcG$md62NLhaXbrUQ= z9r2Z)`3r!?gUmv=Mfdq#B^dj)vTg+u8$k0p%aK6uR|M67#a1f9cq+iWd=v8fG0X(n z>AN{%KSd#I+hYI<<1SQSlRg1l);8|1p8-pF(7zU*0KmIs0@eu-K)jG8m}h7J2uxu2 zI4O6c^0LXo@_AMxnDrom_NE}~Y9C-J5Ixw2Z>xU}OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00JCIL_t(|ob8i8Zk<37##bpQEDm8IC5l|; z2+0lNAh}5KlwySn`!YXA~;a`XMlU5h@h23a#cdN20|ewE;kJVkkD)cOrs%WkuJ$8)j)1NP5@%D(a|E; zz`7_~&D4lqy|`%B#fED{&3KD3a*UqW}* z<17)v0*KmNqj?DcADI0B2#iP5MQVY;13ud?A)6(_*#ZI&KZ#HDiv3I~QUIT-@YfjZFz*9JZA8w=Qu~!bAeB%$IR87qJ zZr!Mrn2Bb$o&!oS&~55wygYtweP!B|J_bKe(xJCsmijsTJW09R=2id!UM)bk$&-M) z5|02WLUn<$-T)b-PL1*W2++8|w2{C`rb`JB$BoJLMQ#;>b_Mi)-uXw>p!gPew)h7i WS)-r`;1SmV0000Alp`L(d3q!6-!>2+PBB^yqFCtsGbhFO0E znU*jKgerRwf^!ZK=>k910t624d45bBc3uS;_L)x_j2p}G5L{p<=~q5&IO514c!%!s ziB~i*IKh=80OBWh$;*zM3!KbOW#KbKnSaj@3|uytsb;?J1VcgOBhP2X-Pg({VHFDEvD{kAS-C#FJ%a?L@We2hfAiW7vD~)*txbc7TtcSyN zFKP=nfoubTo($6prhJj(E&;h1$o!GiF9As2m6s!cw*2!JU_wv{l~wTcW<#E~T+3Mb zoWX@H?1PeSAR0eSKy>7jrHy*Qc6G=|d3z1I*6+jGN7IMf;9>&O)8*~}z&ku&W!Oq4 z#k00R<@p#|34xtZ~WZcEC0lQ;~V4n0kG#Uh{)%iiU0rr07*qoM6N<$ Eg3|d4+W-In delta 665 zcmV;K0%raG1mOjc7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00IR`L_t(|ob8gmZqz^!#}^70r)@6B1E5IU z3oH?#phCPrBuf+^ZRG;lZYWMXK%y;3MS=1H6nCORa)BE+TmiPr6H<2E;Rbu3f!W>T zBkM_8nv71qJO6+CpN}2JZsR}1d_F(8f0HhRcz7bO*B`B3e+%*K>^l9<)78aeA&x9C zTT_5|vwDv?lw|8o`C$s&6YnloScQ`7vMh@!un@Keb-1iA5g>(j zpPw0HeinoQTO6OpCx^=%f!^x83cEOsox0aqI|RVpc!}aJGur9ggusJkhQOy+rgwi^ zV}cyZ?Gpr&f6pG^W&-eU`Ow)E!`>jw(R^)PiSbx@g8<+f-!#Vjh|i@r2y$@!a;#O| zeOCxLg8=xb&q1rV;DCkzHVD9%7XS(*2e5i_rG`z>cmP1+F9`KnSwsNZN>I7yRUH8t z!9IFE)!D3I(dhNAXU#-skz|qa1kRd66#|wqjxhEze;Q2y+~E8MH{u8=ApZ>*nE{m} zw`yxYDK;#pK<0t58#B;UktqU$O)@4xoVS3<`xZT5mu|@}+btrv7O;zI!UESAw|>AP z(18LnzXN6*LD!Q>TcGnm*G+HA18z%3KnJ=B4u680Gj{P8*pUEBP)Sm^bEM9j+BTQg zKurmwD{Xb+YoRX6){s>GJ8x;=AM$4XHt6^T<@k~Ye|bEW00000NkvXXu0mjf53w3a diff --git a/graphics/pokemon/pikachu/unova_cap/icon.png b/graphics/pokemon/pikachu/unova_cap/icon.png index 6d448092847230603facae126acd1b177055b160..1dbc18cfae63e36b50e6899f3ff7bb8de9c38a5e 100644 GIT binary patch delta 310 zcmey)+`v3Rf|G-pfq}s%pmol~YWsSDk|4j}|7hT>;-)D;HSaxL978-h-%h#6by$JN zwRKj9!pZ;t-zH62H_OD}#$mR-{!71`^m3>#RiEEB^Rd)M77lqKomT(4*V(z@O^WMT zwwrOztBvcld&rxypP^^#wT-QFS~tJ+c64Fo@JRYCxRT+K?n-Ok5`x7pqoPG5lrU(elo*E9H~^*8T-Mm(4E}ku2i& zSj5P@Xor8N#=H4{oc6uxk5$-h-{W9bAJMqx-v*|ee-c?9{Y-w{Yrjo2ynaX3jvt3b zJJ!_xYL01)`76l5QtG0hBruDOlf}sW&Yf5Pe?4S9lrQwfQla8B(DMwQu6{1-oD!M< Dc)OD} delta 429 zcmV;e0aE^e1NQ@v7-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00A3GL_t(|oZXVKYQr!PhV=&bFoLWdDzC}n zzoR{r+GNRCZ^=V+GW2aS74jI?dNovz2^6bJV#&7lLg_8yK7I-5^a=5&%eGNp92SJ6 zEDzV!)62VDRj%naBl!L}%CZ%ds@5lNpi?8DZS4-RR;h7IfB#xYxy!imfyx!@oP9vp zYR?HaMuoc!I(7grWL)H^>V^CufiYK^Uq}HxPt5*KZC?!cbK_ z%avyKf!_JDKW7Y$*Ma(q8>Ds;h8T|>>?91O$hG^)Ntg~O5DBwGB#h2tVKf%P{I(xI Xbfcn1$3*z0 zB#r2`j}rj0BV=2^Fbn{jU-Vl@1TzLC4u23P0G9Z$m;*qqA0Gp#3K$1qI>iYvHb}rN zKt_?4^it33aYo<{zUoZ^_h!qwq4eX|8= zB=YHySABrbe`NrY3F;4~?jCY$AOn9&a<2q!zx`^xtZgkA725Nu?Z-l&eLyBe54P~f zfwnILigbCj5W<&AlXZ&FCWItnu`rAf85o{_Do7@x=7i8aS$m$&iB3ZvY}77pD2RDk zRsvW_AZm-RJMB?+`sR)fX@kmAx&(0H<=yS%d%#d@sz2ZR3)U<|+a=(P?;a)qdYwiC k6(AXK;~$wFJ9fN@Kgc-}Lv%`2GXMYp07*qoM6N<$f-1SkCjbBd delta 518 zcmV+h0{Q)e1kVJJ7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00DDJL_t(|ob8iAZo)7SMUzO~*HOHv#3Hfc z6BrHB*o6Ms>DcGNb~sr&)6i%v;M3Oe5HTfm9c(y z6c7cp0MId@1^^l9zjV+=fee7J0Ftc%axH@_Vt}2ZE`npGf2G|+TNh;zKP>bDn+Z@qq(mWiDNN1t&m9H~AH84WbksOm&=JadPtQGrqi6ixy+CN07B#DikS zmN?~{aQo-5r+U4oBp9Ljph%reMabq;>uS0O{IN2GYH~Kl+)l>Os+_IbMtd{nLJZc; ze#oqk54PPHb2TIIy|^t3&3OR6@Y@ndZG-{9^Lk0181?V!2eQ|i=lne~X8-^I07*qo IM6N<$g2a;FEdT%j diff --git a/graphics/pokemon/pumpkaboo/large/back.png b/graphics/pokemon/pumpkaboo/large/back.png index 571144ecf9008fb639ec4c2c30bba23fe551e57e..e5deba0d7d62d0c148a8fbb691aa545ba9e58c87 100644 GIT binary patch delta 474 zcmV<00VV$H1fv9y7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0004!NklNXv49F<^=l<;gsDu0Qkbyu0y)BCWjX+L62H3LtAH6`4w|cA)w*=GUg+7&W zt%s2wq9IBI>BD$)a`y;Yy@%>*U#Wlb@nCvrI*?~7fo#ABfSA8CKrP9h`u<7v)EPJd zz8p{NnjrntU!&(&M+7dl-r?dOOZ{o27;H#Y=&OwbX-vgvT;XZesUE&}N3>Z;woAZ~OSuK;ahwcPfYU&j|4i-JvExDf0S?C$6Rb2qv`+v02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00EClL_t(|ob8iAZi6roMFFY%7{Q`a7r`KR`cns86vzPT2Y}*_0QJa&Dq;X_A&TIde<|HW0)j!Mq+|wo7=Sv- zIA|UMIJBIWY=RyO0D2S9gmeO=lo22kI~nbe4imybrZ83r;2x+0777ov-H$-td0@A} z?Y&+hOeJM|M^yC;pmp0@12y^yVjyl_IY$(OuKbXNp4Mo_1|^-2TD)$v^%W?w92-C} z9Qwb+6-ZI*f6;;xBSfjM=M8*}jRW~j@~ diff --git a/graphics/pokemon/pumpkaboo/small/back.png b/graphics/pokemon/pumpkaboo/small/back.png index 23283b1b30431015edb77358ebcf3eac98cb5515..5d7c21e3465d5cc220350e31899fad7acf675774 100644 GIT binary patch delta 437 zcmV;m0ZRVQ1pWh%7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0004PNklqD@6OyBmqC4H{SS_V1OUV z**V6vUgggFX#lgg;Mq+;v__b;pa#GX0Ac{ZLx6t*upENs0nq}@RDqBQ1{gO$Nuz%$ zWSRnaJpr)@5IMK{R1*IULgc&$#K&CJTRk82s7<&Vg6YxKXT~MrsQ0-ZTnPL*JzAotMh`R~ z=Va;xVEU#5$|Kd8=>y{WI05WlbOC>&m!D|cg4@Ehy#hMNlgRY>doJH@gyKQH_VTau z$GvN3C0InjymlPed^S)UrUDU!jgJP>Cbo5#%wk%W5EP;jbb0QjAekrzLLloZB9Tk1 zVOeY>sk*pga}ELfR+mh%<^f&a(8)JbqpF7M^#vO(L<2P-+SjQYfL(^!Km{S#41|e) f#2atC@h|ZQU{(>BE4zRu00000NkvXXu0mjf9+b?v delta 518 zcmV+h0{Q*^1J4AI7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00DDJL_t(|ob8mcZi6roh5;#ijqp$@16XG3 zR402N=e;=i#ky7EWzwyZ^9Jd=)Q6pvkk}ckN;%11?&H7zj)Nq5#Gi$#@8oyuGM3MF z0-}Hh038Fk1ZX4qMc?*OAOptl06Y#XdZ?m6!rLa?MOxY#e-Skla_<%mtJaXb?h;byi*oP~QXd(Ds#20orxGg8~6( zr@Rng6QJdDe}JmG@Bqb&j1#YZ1t{xK6%WI!L5W76-#gW`JJ-)~V0P>+Rp%Nh(P%+B zWr9dm<+_`gq~pWyR#`p|pM;QQrPXw^2m+lUT9d(;T-9{JTrz6W8-Mgezx1z zgIpSOFel(JTiw+D6<$2>WviI)`ED21f(ORy82&mQ81aAO2gQVyBjODpN&o-=07*qo IM6N<$f+v;VkN^Mx diff --git a/graphics/pokemon/pumpkaboo/super/back.png b/graphics/pokemon/pumpkaboo/super/back.png index f14291657eff9d422c2ea65b69849c1e3f02b425..85cc83e2c0cf730ee55dc22bc5779cb7dfafe145 100644 GIT binary patch delta 489 zcmV7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0004@NklFHjk1~X_yw=mg9rBzLRg_Q zhiwBd@HYixk`Loc5|aWJKPY%E34{|<7Nmd@dqKbqfY$^7EC@(&gav_=1JObk%mRN+ z7$9T|Yy!gu=m-hn2c}^IT6tX{;hVtlDv(Vtatmp=1tzfNJqR?)*T7psnt_Q7YQ7X< zT%bx|A_oc$2FCzs1;*w8#7;rUi9N?TYzqBKdFlxuskx5ww5NcjKQ1@?TNV9qkBcd~*DArkdIC0vev!jnMhx zI-UN2(fSkn87_(!ZC3+`fBCs3ss$92?vJ;h6;d0RT-d9Z f;fwCUga3d(TN4$G@g6X100000NkvXXu0mjfMjYkI delta 561 zcmV-10?z%i1o{M!7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00Ev!L_t(|ob8jbZi6roh5@yEj9{qLp|SAR zsZRFdocBVx7wZ;@mr1uu&Ku-mdNzhYiruwCPYOc$KmY#kY?9=^*6R-9`h6!w6hJBW zPZ2$Pmph07NIGBysDMhvB0?7hG63-lpm-eUl!^irvM!=se+a0G;2csCGF=t=EdZ3ecRItV0n9IM|b@LwZ&nq?9y;kV6WjlY`y_0k;D{81NMuBp-pm z9I|o*4%MojcN4I~*A*RMDk=33BF7m(^U${)lsN8C4aCj&wMDE3z4jja#hIr9TW?^S z?Q9H4_?iI}fBq+5xSAO>qk*zuc{{KY%W+C|=eMDnE>2oDZ8Zn#p`$4SN8Z2!aDKYn zOa{XaR#U>hvEh}E2{;zxh`=35ZJ%3gMhE5q?G`KHR_C1(xVeUOe=?VXxns*2!*;q_ zxy#smkcDQ)Pe#?Bu+6V$?bbdRCXn^UT#iR$PBVSDLyr20fYSn?K{dt$-ew8>*B_{FGitW#VF-It00000NkvXXu0mjfXI$(d diff --git a/graphics/pokemon/pyroar/icon.png b/graphics/pokemon/pyroar/icon.png index cd0b94401f9d5bba8e353d66b28b6847b960a580..e00595a15955b41156c947af7d7382c083a3c8b8 100644 GIT binary patch delta 419 zcmV;U0bKs81ndKl7zqdi0000?P=%b4dp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z00047NklVhf+Ih(N-)HpW|z#UbHG;{*Vc(zCu z!XK3H?mbgsOaSU~w&a0zx@z6O0;nvaHE&pfvX2%{1SZjUXQiI!bOnqDlU17E2uoWD zRO(>^KnD?X6=);w&WqJCBB3csMe2W$RI`KuEIS1AD?&^61;`mD$|dT2V$<7r3}jW# zP4aXu{n;^TpMh=bZ!n_b7;ZA2J2_8vGmv2r=fu@O>gANf5UvI?{Goj|kkUUG$n*7o zYamB@?+oM#d=2CveqkVsel?J*KWql_${$t(*@CAt{g1qk_%na_0fvz%q`42KYQg{j N002ovPDHLkV1nh#!6pCz delta 481 zcmV<70UrMB1FHm(7-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00B=)L_t(|oYj)Oa>6hSfc*w~qw+R%BU`hD z)nR~@cwhz%&MS53k&?mI&?A_^uK&U%o!W)FYO(H%B1g){*s}u0#JO}Df|xm_5;Co6 zL!oj*RWL?Se+mi(nn6hnTG(*(C$pXoK0zZI)a*{af?bIje>~L!rNht}d<%oJ779_2 zzXAMPMs$s=JkXBPSM9sHEAK~PHDs{Zl!e(Jlp0cr`6!E*OCy!)B7jzxUyGXif()>A z%k$-+?66Lw-KDKove#CP0Eenae7DtGzW21%=m9L33EZ0gbU;b$x=Ky?7LRaKHS8&k1lzhfx@?T@@!Dg|XVD znMPqW1sx{BP}E^2OweH_Ow?g2Ozb!nCW3z;Ow!>Y%)^gSn28@*m`6D0g_-L>fAZrS Xq3m0`$`o_K00000NkvXXu0mjf9zD)3 diff --git a/graphics/pokemon/relicanth/back.png b/graphics/pokemon/relicanth/back.png index cf4886a6b77dbdd67b83a1c6d0779ccc31d94627..678602343ae778bf2d80518731078f8ee9627e57 100644 GIT binary patch delta 540 zcmV+%0^|MZ1>^*f7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0005gNkl`(zIC1G?3l7tt4*@JK#t_K?gkR0m~t{&aPk3$L8Lo^BJ*9}3b z)n@{F09*lt4UtX(_%#N=m4IsJeZ81~9Uxo)iny;ogUS^37i4guAn2|%my>@DfiE^b zhn1JN7F=7HQEz|%KLw<+{`Y|20@?*Km>WO@6Of;u+{04Y-LiuEF`Y079l+K14`Y9U zlKa0~A}_$-R_yEh+vp^8OK=BB{$rNdByb&pnwb1M$JhII@|RA6)vJc?mBC-5c+?0E e@WvZ&EFXJTCfdH##h?HH000O{MNUMnLSTZM#rgUG delta 673 zcmV;S0$%;(1nC8k7-Iwj00013M{Ml?000McNlirui02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00Iq3L_t(|ob8jnYTHm0$K63tG}VZ7N$ER? zgFQrg2n%D=&!GgL!Nz@tLYBTj1InaQT8OEk!5|8k45k!9dxuUMVzOq;GxU61$+n~i z$dLbXuXTU-f4;6eod?}FJ^om2yRE>9{pog(>_r>!##-m$f5ojt62$g{0ub9LO<))X z@s$Dr#Oo&T0>YKE7y`6dcmNl0RRVD<00Cr@4sDw;yc2*h%1X8+2{MNMv;iG zre(ANqbPt#05MxPn&m+VfYS!MEfVxG}$5lSHb~Hl73BO)uP@Wf${eH{IUl0$}*i~ zOpHk%p$7+IFfZh`$!9!;joFxD5-2c`6pa{fjErfn!_qc|0%-ST%(QdUOe6yDG$3k(wzesyskes;H!MV9~Yb( zAeC)jAfFKk#xIBhIW+(~qAa-JECtP91!gc7fWx5ySRoe16r4{}P#RUBIi%qB$$Wn# zhz1pi8xB*j0(_{!1!o2Tz$9S%(b7K5;huI!@$LX$riK9nWd)DUB)mOPsg%mc zCi4BMhAs|pYDEbg_te8y7zAVL%94L=v0K5wRqL--R#?T9hhe6f>dJ);{b)^7) z6hLfYGRQ*F6Eq5_381@8<~lk8U=UEVm9&kBGF^2YLDwW`&b93|q$h#Bl40Nxhb}(} zXv(Pa2sSjxi2!Mg5A$u`=4^j%e^CRcl3X}j_rdi zm^y#kgdv4k!u8D0HPi=5up3PZX_d0UmT}K_MGp_YNl;5j71SfCn?MifRuK9GsNajb z91zM&n67wY{C^yIs|NHdIo~LdE>(fdt6*__db->KQ18UT>l^Jp1Hdvp@*#xo$)>oZ@b!-8hNX4VF~WTcs{D?igourk0nae9#Xn~gZm khqXZW$r~r(fBe$%0cE5anJXoQBLDyZ07*qoM6N<$f;+Jm5dZ)H delta 675 zcmV;U0$lx`1?vTn7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00Iw5L_t(|oZXbcj-xOPhN1HUn4z43QqHs; zX|5AuxDUd;7eQZO-(T7|3ABWwk#-L&Z4QLSpa0(uay{=~E&nHApZqn@Zkh*NfIn^n zz30V&KVG*y{3h|@Z-1l>0Q{!+VuG4BJR-m$iK%TifeP<^e?*j1_w^dUyy>Hn+N~l0 z5u0=*Dqed)r~m|I@EU-E<0(I|uGb!Lq(Q|Cx-!wNfZdT4APOStsw~6G1vrAJS|F-& zta2CFaV83mcbT%N(DB$4d#g(#s&ifE5>VfVYumFxr{hi$(fzK@gbLR+2bD{|5HLxi zCi9Yu5ZhP4eB6u&coV*x%|8p$r|`D8_EnnFZ(ue9cCcRQ2shmKND{@aRN^I zdA#-x02Yw?rkXapIY2o9nXZY3!x9hy7~q_xmRtgIQaZCj1rUkXKy|hPBADBZ%x|;H z>|zp5kBc(Zm1dWjCN6=u2EYObyga4PfGvUn=`9yne?S+ZfU1`EPhCuacmg0@eTx5m{RVpx*^S-Czxe5jrM41_z*fePxr|KqOh9CeNrY5B<-iHf%KW$Yvl+xBHa^qC&s z<5R#L3)MG~zhi;wux#KCKxCxjJAaEH07q;;=`RDoDL4*a1J?=(=Nq{sbjbvI`PF|k zkmbVRPvE#lK#^CyB9;kiz@^}8D1lW1s$4>ZA$_d_oCSz7gyX@8MFL!FK*krqW0BD4 z8$bwgp$=gN2sj=O0mS%@fY}yod!-a zkOia+qHrb#NIRCV2rwYDRTMqnjCz0fr_sBl)@4t|Kxix^K-ALwSb!tDV^4qHsp9mHJj5(MYfa~-EAUgG0 z5$bZVbBNkF^FSnZfziu5Ai^Jjj4(l**8$VI@OnLYrRAmE)?hnFFaU0V2jqWddiLUY za@5N7`mS}5miE~9-3i3une~9ps}1T1yu6rD%Ae%H<)%8(_ZCXw^%qGtbrY++-MLdj zM(B%mO7f!^+1zlt41`SwmTR=@8j$Mj`*_NZgz}&QHk~WpX@?$J1A(T5ytBCkp^lPP z-PqKuiL*Hs0|GEUr?X*AWWsH!PeZ14i@(m5HVsm}YXGUZbM*uvdRO%Cj)FpHDt2RYalXUcH{Aj|GN8`d-U bkMD_J)$11CID@v&00000NkvXXu0mjf-I+K- delta 731 zcmV<10wn#(1)~O#7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00KuzL_t(|oaK}~ZreZ*g}DUMYe}sFBrrfN zl>?ANwE-+{Yd{P=>QboSULjRZ;WR4UDmSoC5d?vdG8f1hGW$b{W=Oeo;Q<6edY|6R z?mRIFUaG?68DM_>9I%VN{p>8%*Ci2DHU|0CXX+gscOk zbRG032XMqjf7Fn9Ih0Bnf-RcL0Rr`|f{)%HU(tffgaF-O+5*iU{yHEp>~<}H7`K4d z@gL{!bd?7IZ)ih3AhEzob$~ECj2*Dk+J%mJy=;LhZGq|u0FZcq6Ob9e-*fB?2natI zU>5L{0PFx}Vro*5tgej#eZwX10fw-Z&u@f{+4~2%f26C{-KOXl7KqCqJfcsJkH@1K zXFEtq&eYA}jz`(|hvPlB)3g=39!XUEzN7bd$9s`cXnQg60E^6< z0M4{`Z4!F`kiG+@kuEsv>1`7kENTbPz)wT(iDg57{d1oC#oZVwtO+QR3&a{>90<5y zd`++MM;LP^rpAV#3VGBL1Kgf>V#rrp{{T_6!W7Teauomo N002ovPDHLkV1ngdH~atq diff --git a/graphics/pokemon/sawsbuck/autumn/back.png b/graphics/pokemon/sawsbuck/autumn/back.png index 029ddf1d6f18d29dd1749d9875e00e816fee1e89..3d32c819b4b69f291dd0314e91f082d1c63ec279 100644 GIT binary patch delta 730 zcmV<00ww*02cZU#7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0007zNkluByK{0$F6-{J^S>qc3mW1xGv3%|pbqia4=$8@W*Zk); z2O5B?Y6Lo(4t>*-VD$VX>kK`y37~%+2^!4xT~WU9YkfMqlO&)4Hhcu()0uFCz7V(; zm9fAy1(2Xe=Zp&>AaCMY2E0r@AaW$a=YwWaLo!+GT}{f#L5K_>+6V})rmE(|B?ovsl9pu%j(T+X;VpaD8KG157A@>&*L62CW4p7lOqaGz-^RN`Ne7ElKDX zfM;-=mheTbATpxltpe^1(6K^yA(H_Eu-CN#9G0Ie3(6~`)!P|F3qVQy;>G$G17#ZP z*Yan8o7eg$fV-asCI!bFa1+)*#PLcWPitU*2e1YRa9uADLk0-2zwt&e7!bg73!{O^ zfX5a_y%^vuP(0BeM=#HS{gI0plSIo2a6QwOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00OB=L_t(|oXwRzZrd;v$7yr)V#+#ztoQ(u z$reSD4x)I2ASVbQbnqbxcoAac6kZIqo0q`agP`cvwV85&UZL;tk@~RZdMziK|DPZK z?}IjDZgF;Dsp%ykbDQy5KnS}@BRYtW0G=6Rku+d2Fk{^ne`Ul{V@znKjL(C>=!h-4 zz)}RUvC9IXF?wuz5#}NwAmeIow{z3WYB?7R0+i7fSeT&eaumk|fDJ>p>4oVK%D5#% zzr#(`c<`rrqg$Gt0IDNrt!`^@0+==rZo)ypcc-;z^d%r)baml$*`DP=Cymgh$(zsF zkp~AT5Nt#ve^cd9Z^;D+=~P17`#^?+!K84f3D8R$$}ebgn}kAueOMX|{h%0H2od2p zVf%7UfRvJrL=$0#b;e=Q2~#(9&G_AYg0|?IT;jC?W+lT&*Hu*`Q12TbGdr+o9s9zo zs@mV(*VPujOU80r2;nkDU?XoJ5Exc%skqGycZX^xe;>DiZF4s21KOrAIe_{NfOX;; zpj*J+#-FQ-bT-DmYCE<(#A&y{g!IozQ@+>@+?3k^JXm1&_6r_@%QT{Py2&8m>Gz)m z5A74tHcOEZaP5G13BYs&#FeCcs32sadV6{QE>#wBs*f@uwVEo07G8>?P?9-7roPoZ zV4K+3e^}uWOaK9g4)6dcAr*pygIUsgtez0~k>HP#wgY3XST_mC0(6PLT49DWN27#E zJXXF?66>bmouvq92areTrKAHDI3QQvP$+4=cMLERc<2TMc9{SN)?j7ur)&_~3rVy~M(?-m*6k&-Mp-Y9MNY5I!$)6dRB3x$d)i$@w#lT_c z;~=&ta$m>Ay9Dg`2rfGywm2g%Z}?0$vS#_%oqYu44+}_LW)%=$`4^2LgP?0)~V yfGogSKsG;j5s)46CLlNZFst9_!xWHT)Q4|(s2>-6mTbQO0000OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L009rV?>;Q`-1^SsZJ+>uM!5D982 zcP$@JM0B5VpV<~Pl<^a}6r9o{g^BEnBkeY6m|OSKQDxG~1Bk))n+4b?y9S`38rIq5 zXJ1_p`-gRlI>NZe_QLen!Z=^NFyVhEVZu~KVbUMM1RX|U%(XB}KL%lb>Bl$q#Rd_5 SFMzZF0000&B*}k- zr+OM=8GR}5+C8uZrt^ycz*7{%0MY5IZUpy5eK{@DYqPQ;WxFP_0Bgb>aQnnu8O{KB zQMiVdP)%d_WE7e?xeGHnFV!A??#DWY=buZN5XqT0(ICk%hyYgi=(@XZk3dfNK)GO+9!D7rp*(a)>RdRbx- zqW5j?Lf|=GXSymSuXo7~OqktgJR|p<_`b3Xl8b%kW05;GBLK_k*kP$fve6TdEIcmP zFuhVG5ujWnUVlmMg9uEq1Yd`3gYf5|&yNvMMdaAn{viggzf6H=4w|n3lJb8)b}K?S zBLh_Z4j@EoX~cCsmCSm?Kr)qwwO(f5+KRXI6d1#KMd%N}?*{JHvHYGv-@lMz9CCk_U73A7xCX$1;6O(uvCo&a_WU?_nI1&}NU zV!n(jH?^_fM!J#43*8Q|Yn5;iIs>aGvF}3s5b(xT@V^0F55uQDq`Nt+88~|b`x>A( zK!B7M5JLwDu&;O+3^2fMVKfjkz-(dEvw_?N3X493R<3~EOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00Lb}L_t(|oXwKEZrd;vhAD2|bbA1abWkeG}n zSqDgbG!jE!l5p95BzA-ZNjD^-n8UEj~pF2QVY~(pjWz+9hB*Lkc3*4e-mHMX?w(;ldmPV`gu#xNqK$07uth z{ppnm>(%|=BdklmMH>Nu)n^~zHhNd@%hCsQ9qKpb>b^cl4z<$}C_NqxDps$rP=6V7 kqIFj{S3gEl{>SwUKqDn|X*o9{00000NkvXX1g=70f{UL%8~^|S diff --git a/graphics/pokemon/sawsbuck/summer/icon.png b/graphics/pokemon/sawsbuck/summer/icon.png index e699823cd691476598d98400f98287cd97876be8..6d46101dd17c933d89d6b51b1c5003fffb05340c 100644 GIT binary patch delta 315 zcmcb@+{!#bf|G-pfq}s%pmol~YWsSDk|4j}|7hT>;-)D;HD5ek978-h-%h#Bb=ZN! zMR{UFf>Y#xH(*>2F+e}?y-*I z44*}w?6S{Y!?Txf-mrd$so6oRjE!3tR$t~hLY zXyv|M^uVLfo@WBDF?_9^lT*a*u)UhiWZItlr-T1(D*rjZ|9ma;k{Q1Q6s~&z6;g1u zkzsb}wom7pkaB_DmdK II;Vst0A*N^aR2}S delta 394 zcmV;50d@X`1JnbM7-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L008(&L_t(|oXwK4N(3*%ZJcn8f3YT%#%QhTw-#)V zSQw##L8HBC2A)!{fON>c{jh`Tt9$!j>(at-jeH9e8<2&GagmX;Fj0P#2vbHx7}@cc o!ZbRZh2fvV9Q1x+{QdXf|G-pfq}s%pmol~YWsSDk|4j}|7hT>;-)D;HD5hl978-h--bByH5>3K zpVZ_y`v3piJ7Ox=mKEIKo9xCSI%)0|-xbrJ_A@=G_B8mgGF~M;2%q3Dct8x2)x)tyhMYZg&~Bv6U)h zs~@>~qi53ur75=pz52Oglx-||yWd;9uJGtT+;`zxkE8bS8(J<0H|H^4EXit+JuM-n z8r_im%l2H1x$E4zLk$^{;fxHOYgn?)XZw3-4G!|)?PxvS?Uz+3ZLxTz2^*4B*Z2$9+^>wH4>$*GaCxJo0;OXk; Jvd$@?2>@?@l1Bgl delta 390 zcmV;10eSw01JDDI7-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L008t!L_t(|oYj)CZp0uAhIxWor%sV7MGbqT z!&8^=j8P{q$-v5ox+@mmWV+z8q`0T7bn zqu^(qSuhH5Cr7OT$2`c>XHXxx@Or$MkUbI0(KgiQ7HVG(e{LsGTjr%L^mZED?uCE1 z+HqVcq%tUV(Qk@x3?eoiXL_&_QJJn_N4!UQCjKzU=opAnqF}JD#>Z4F)B}~yrbju{Pg7!e}DZyU{Yz{zyuyP14B2!w47)Ih7)bTq|x37 kW?q2_J3dxm7=Db8D|k?@su_npq5uE@07*qoM6N<$f^qqrSO5S3 diff --git a/graphics/pokemon/sealeo/back.png b/graphics/pokemon/sealeo/back.png index 162838a2c8b929c5b54f8b2afad1db7aa8b51ceb..84a89788b3f7e684c0e027859d78932991012797 100644 GIT binary patch delta 413 zcmX@X@{DJLlmz(&|3?F76*o;`U| z|LA+)7tVS{y^hazo$Pvv6&zdK*MBZ())c?MB6g1@DKJ#&Ce68zopr E0M~QBn*aa+ delta 511 zcmVOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00C@CL_t(|obA%VYQjJe2H?}(PPz4YYdIN#1cn zb*Z`nfcx6M5aOjqbcLuDED}d?4s^t+p3V$_hG`BU62nsOe_GDX0DuPP<{lMWFjVtk z45xZ5XD~#yfV>1$0Ngqd4Uf6f0lCDn16hWYE8LO^ACdqV^d)9PX#`0yHO0Sz{)Q$z zltA#jrT}_qmXdNrfS-`q0Z2gC11$sO#se&-pc$Lv>m^wsa38{giBe{Z1?h(#I7}3- zyh{Y3x8otif0goA=#+qY9JuQ68w&Jn`i{yagk#R_uS5V%V6U9}!U8wo?bs(NdS;f$ z2lV)FREkgvpxAl+*M7%zZ5XiY(zg6#aRm4Uc&0Jj&g zV01RYf?EgLg}woxcXwY^E1d4QgY=U-aH;>QALCog5oy(cK!yMS002ovPDHLkV1jDN B*C7A^ diff --git a/graphics/pokemon/shellos/east_sea/back.png b/graphics/pokemon/shellos/east_sea/back.png index 0613c7a58a6294b863a40e01c99ce639ea55eb56..2cb650a28c567ed3ec4d7cc99f4fa2d9f2a1555b 100644 GIT binary patch delta 504 zcmV53`Gr;PJ#db-@Pp`x@tlhUpCq4!;CSUV}Takwr_mnZwDhj zpy-V!L{}`hC=hp?Nfm;7ba2fDfvFL2=|6Fduhd;GK?o6{f*4uxI1DuBw@pGoR3dV3_ z=o8))H0I6YA}#gC;4KT*`KR=972{RVBP|)OJPailw}8`CP;$=onV?3mfYXhj=1TdQ zfXF)sx)Wdxp9$2Ez3m{khFY`RaJzp9x{(i30AH%Rqi#~b^Gk785>hyCqT+7;k^=a; zf}7#YFX0gIkuUDm+aI*IbS)mF8t&O3$*X z00i&63R)eh#goDS@KGb_D4_H(suS*+%v?v;MjALeokhHDJ^c u;jsc*Nz+my3qJ9?z;_ltNZ=d)JbnNGbRa;1gC}nQ000041hEB>7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00GrWL_t(|obA&wYui8+2XGC-1pFsi#iO4I2D@e*Y)k zo#%b5f3QaS{@vP~>I=9-p*06466<#nB%T1^#N?BRAijt|e}>-y9vBduhu87>jSR!j z0I>_s0u*r&(gJ{62lxT5tDiv+l8nnhKo10oVF0zb%BW9Z3Lzb~abT1T;L%nmK=p+K zivuXC=?PFyf1eo;9V6B!fN7dr1}HdyqAMBTAHmkLARjV{<~J8{9OBWo+>oBygTl72 zT>UUaSMhbs*f)5u?#aGE&DF*<)o#O!)_sH5=W$mJVCyy*+p4o`{NKn3#evRRyZVM8 z&1}sjbSrJsW$o#BYD)%;?EPMJ;cg@W{Dul;-)D;HP<{{978-h-%h#6b=ZKz zb+*gF_7{Ku@1L7iB0KkMZjYn>my^N06XxXZ{ydkVRCF(s!rpKOmnG6k9(EcGn=RQ5 zj2O6Q%ro5ND4_q=;a0-FN%I)?{OeWwDcA8#W=6v4YYftYmh}pJ3}-kWDt7xGGj+d&K0`b?0RCE{O`Y)#-b(`cR3W&y^yF`7K#-@!wf}ubzr#y)ymX zIr*pGj-QlIe|1OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00AmVL_t(|oZXVaO2a@9hVur4kgEuN00q4Y zMM$BCVlN4J2=-li+CxYmsx9R3Q}NK_76gSJs!7#_95iEcNOm^h1L%L7kNszsncwsN zny7GVes=-Q2QDbpITzAZsy7TjETB>yu)MUOL{@{Lb$p@Le}izuSRxfI>3~_B6&`os zKA6U;;HZ0KqHv$);i?1lIU1*%7&F_Y^0C5tYWp7j#2u{lU9u5_E3LQTjR4=TTI(~p z4?gO=w<7NC@L!AFlK8>}<-i4`<~d6jsr0a95eHT&aAjSTpaJ4cO(Uf mpdZEknfY|r+Y$Hb-}M8I%d6WKin`PQ0000^;aIFg`5HtXZ>W z&HAC3i283&^28~5lG77_=23_;rzZqLIwL7W2?Xi?XNtk}vRraPBS0xZ_Qpa4YoLD= z8;1|ZnxH^8wCDyxs$#S)cjvf|ti$0}R#`S?h z^Y}--&mM)ame{S7Fm~;K2q2a9!l?na>zVroz@jtQCR1mBC~i*%=Dr=aae#kbo|ycB zq7BqRg7_9NK;3*k#{k&B*#X7YbC5vAH@x0@E2iI;WCS1>zute+pX}m)4-kCW1^2T* zjYqe^(F#2a&YCrA)~s2x{&fXS^T*sXb9O_eh7ha&r)$!_l>!GK8dTjck1dJI&Tu6<=x#oy_xGh;Uw?w-fphplQvG}ySz8| z=EHnLgwqQQYe3D>4(?Hg?;Hqlb8jX)>Pu7`shRuN7g-$oXU-hfPIZ58HUjnGL)z3_ zs}CX|&u|n`#nJXFSJOr%h}mntd4I9^banYQdA1f@|M3$RmIG}x`L0!G!~yEl=CJxA zCeQ{ye_B)DXU+PL Z>JOjO8F+Xhks|;A002ovPDHLkV1n!(pSl15 delta 911 zcmV;A191G62h|6V7-Iwj0000OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM?{!*(FQ&M00Q|*L_t(|ob8q|Z`wc<$Il3N>HxOr)DFJG zv{JHgFGN&XqF^~4&yY(8SlSYkxk}>Bv`W82*M5YG=@_b1p72-bcj-HmRKh;fwXJwU z47?xre|K2?j*wmL>hCPCso$#m7UK<4>sA8}K$lQxR01vxf4Y&&dU=`wt1&+9GM9tY zX@(>V4q^rz00b^(NV3@BTgahpe}vOuc3l|L)g$&94FgOd_V_#&MS$TJfMOpzV|5;1Y({Y4O+0OieOqKI zoyyG>EbIdI{gxnOsTN`BtZI>?zfWCZtMNhv#Xhkbk5f6hYmIoel;2D3ye3(ejsVn3 zm4A!8TlWQ@d6+q#nlOCl{_d%)Ue_|o)#R~{drsbYV*i%a4D>*A)08sAP z4>(dv$dyWyq%?}WquDnNquS+3X?mi%}OiBG>T)gCv-0rwpUz<0KgK2rI7Ij>F zZYSvOdJr1`)c*rOND!A!0*9ao;5{Ty4-LQ>^`I;7)m=VILeAsqED>AO9Z{*Tz13w) lA)B#3*ga}(@9*mWu3sd^+7ZP+E5ZN(002ovPDHLkV1g>~lh^P&`+^^uz_#-q3$% zK?ng#g!sqBZwT~R5GueCWMA>u%II1U5&*UE`nPf-YV{*_tx@IL<{~Dm`I}rhd)jkKT{IYN{0A_cq3{XGObSWtLapuo};P>9o zwiCq)=Kcf-`S*a8;y92>{bLKX3mbnwmPI%O!1LWmI{*{_O8`2j319OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00I0-L_t(|ob8mcZrd;rhN*#>I@mJ&06Inw zAQIV)!bw+E4&6asBfUTny_W$_)aowsL-k0?5-G_E(6v3okfHzc-G6rk3Hcv?7ty-^ zvAP2sxKpBRS*J`mCB6g1AcRe^$;f)W02IJ15Q%s#gd_I8e?>sx37?ycZ-j7ue(gL9 z0DvYU6cd4wSm1pEh@Yqn^L2)g%`N~~#!%uLj@3kNJk;;xVZR#yu>VcCO=bXEHT#!l z1X82(#GtGP>ZbV^OB@UU0Z>)-ZU9o_0DRzxz^#!ehLj6a-h}~Z^(O0~(*h2RK>!@9 zQjfDLpx`_Jf6&1M057r?p;Bs94?vXqIy_nD`u8|X8UkDM?wgiB#thp4FkO| zDU$yENnc#8oaVu-`UE&@M^Hs=L%2Uwaj!RkbVx{Je@3=Ww*hhhXsIpIDV4Ed<35H%kT&YZ}EfR!uNbCj{qaDg4lU6^I3o`Fkr$U z03iYcWDtPJIs}L;>uSD`Vjp7$W*e}VkbuPo$R0d^DWoPYB_7i^=Nf$@C?du5a{C4q*=F5v!jsqkMN6Zstn`za> zES}TX9i+YM)rEYb#3t$fe95HzS*nio>K<-s{Kljs~ zM-O2C9C3kU9zBJ-$3`L(CMqz(GnVNl$o~`C2arWDK=c#!|55vuyZ!*nw+#`E9X!75 P00000NkvXXu0mjfAU(yl delta 503 zcmVOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00Cr4L_t(|oXyn1YJ@Nl24E3N&Jn5Cby(QG z#xA2?d$12sNcUXDHBV6bB&E=&Y@(6sA2o+wb}k;~V=_scMA5y5cn*NR2o$*f7xV!j zu0f#oK_38Sg&^Qv&wh-9iVUOr7Sj^6q>oHf7RO-5FHP()x(rGp;tl2 zrL>`#tM|16E-&Tdy6C3-P^4M`QqF}}LY(J7`X$67FH=4M$d^EJ8vt1dwED0QC;&40 z-UrFk4_wFz!508R@BttWf@KpKed19<6GRB&W_eH)VNfHp`5GRGh-@E;>k?P6iws-M z#%@;%L^S?XfB9MgVKyBfd2G+-u|UTc8^%S*Q`5!9f5xYW@xGBO1u93?zFzp z-(~s0%ycpX5*N^Bd&zi6W5CP^o1+P|=5twsm|VCWG_u+NCwoH{;!qJpgM%9b$Wt6# t6sb4+AR6z1!7enu4hZPzKQQ+kzgR(WR+kDV&j0`b2>?k&PDHLkV1hNo$}#`| diff --git a/graphics/pokemon/silvally/back.png b/graphics/pokemon/silvally/back.png index 3994f8bf209196cfe33c18d39d80b85c5bb80094..94c3826cbd699e2a83c48e877e26a50125604a3e 100644 GIT binary patch delta 568 zcmV-80>}N%1%L&R7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0005+NklXNtVMf2t7@439M0`aM#Qq2Y4Pt+Z5WqWxl;J4?4FNkzB}oyq3fOmPzVwz#jsX^?=<@?4@p z5xXfk0k{@<*oBG!>t#ux5pl5Dhbez{50DWUs=8n(u2A($06K+v6vx5>Ku5m&)aK7ZZdZToUCz^%S@B(s1` z2>d%s;Ck2&50L}}u+0&!bDWM;LeR0&qZR{-9CsL3=DmcIUL@Gne;S|!&OK}AVTDk#=cb>}P6F3{t{f$*PQniW^^SCe zg*J$?LF9_g1N8r?HPoEMETAOOQ%yn`lK|6qfNaaROYjF8Z5vSX5yRX70000OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00HtzL_t(|oQ;&hZsQ;jhKX|ETGI3Z;!4T2 z6;Pj7#@h#QM!qMKv&TrRjq>&#u(4wdN#~Z#rw`@_L&)!ny*vRnJN6h@W!V$SCd(d6 zP=ONu@lb(8ktSA-*ghk+>Iv~G9uc3LY+LbTAya_(!<4O(e=p?Br6iQEkXYH2UhaSe zVF%c;H-M3l3xz}A=z(w_%n=!rqoRlt@1vq<;>4tAnjkT@nJd1Ub2uy#@0`mdK-N>& z0pS{?ow}-o8Gu}uRz_0-j>N^fd7z7D`v|g~dlS66DM{^tI zH4adthr>t!({Uw$wZE^49Q>Cf{$5n{3#R@)pY|pS^f#)kntgWDF@gK?FsCLv-3}4O z5EBBY{q3-vV>}7yn#=i+Cj|ht(G6b!P9P`Azi%1p6ag4UjRL4>p_cs!QGg-< zd7nl6y>~lkT^8{h>9VXjB!SjGOrVp%TDYgHPA);!(GhtH5Dq{>$APsfv5gEKl#BsF gK@XJu7z;Mm4>rc<&ZO-;-v9sr07*qoM6N<$g5FgZ3IG5A diff --git a/graphics/pokemon/silvally/front.png b/graphics/pokemon/silvally/front.png index a0caf35b63e594f523bbb930b7e5390fc6e5edcd..01d9f14a9c39fbce7b507806004f79965f0d7ac8 100644 GIT binary patch delta 766 zcmVv#muEp6L@<6BQCSI@C-I8nd zJP!j*J*-daAw5x1kLZbPVR;0M%e@AT$QO464ajRf98~d0z8qr2T*ZGa z0P+m@qkWdl8eoWn@^F-tz#5GlJW(5f@y4l&164@tIXA*U8x%mEg@KDiQ>TPg5wD*z zcmP%hfVczk+ceWE2CyXlR)vEAfQ*!(0&M?7Q2n}Y9^E+cC;+=_XVVoRgdSkEVO-|< ziV(uP4bUsa^DK)3^w9-`cSo-Pk_dl*1#(RSk?PwSrgceSIdDw?dH)XW60ryfWWx|I z*l$9Be(nL5b%{co=+@n;$5;KlbO`Ih`C50dVYAr+^xBN=USb9y6BNPU`Yu7&GWiT} z}lwUD5;?#8XTG2<9dM05$`NP8Jd%CD8K0l*4-wc?3v=_}AyVTC0D&Z5#6) z0GF^HvBK*M(&*39Oz(83I5E0fePbr~t8?09j>C z|M`3Z-{pV{0NYzO&|L+vT@rNZRDDTu%%a+l83+LuLVq42#8m_V0u?YqvhWUwJ3Zz4 zTLGoE@V4k(S)9kHbdWwZ5uy5EhjGEE}(0^b=La-0r1SA8v(URQsg_EO; z;CvT&bRxDi!!Uj(NT0yAdu;x+Fhl_J1Awpre9T#17jSg8K4A_q4{f>ZI0R$(YyBrw zis+|FQ2mZ>_WHiFRQuO}scS)YeW35{kRWh-$Frj|00+hXyLqr&;UeFdh2RYF7P|UUGLg#K_%Ao)9OS9eonp>-q;$^z>(q$R76= wd*1xS`kv(|+quLw;5*PY`|q;a(=;ak2TK?zP|cZ%`~Uy|07*qoM6N<$g6t?~ivR!s delta 887 zcmV--1Bm>^2E7N67-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00QAjL_t(|oQ0FWYuiu|$5lKClcnx|5D^U7 zl0N^)u5;Zz79xpGqg-~~IA1?)O#pGovDWxQe=MMINU@{vo`Wt#ra-t{2 zau2-R_oMIKy*nF5CQ7ffnN++gSsQ`U8*6*>=hg-TMxR?7e+(GBReG)g1F-+26R=r# zoc(;g3o7<<^M0}jI$a%uT=r)Oz()ZtJHGTpY4?xzpG62Ms86-Q7;RodO=FdXpW#+v!=I zW|CsFUm9@Gqp0;N2~cpR+SI1F?6HbXr~6#v_wlU`e7hvkQD^hi;cRMkwP*QwqR!ri z3a|vw-_1Nh^c<+z04%EVFuUDJJv|y990H&kx518Qf4A?-9YYVV+5#Jzp3_$&98YQW z-PCTp3bhE}GK%VvSOXkJKtmn4ehDQ!4L(1UT*{lt{Cqb1n*!_zXbN8lsxg^!L`+q%)w&x< z0Qcqf_dB7>3ZP{VNav(;5k-pd2xxdH1;D~g-HxYw79Vm`G@Who=xyc<@DKg>-AVSYQe+m~OGKc{(N`T^WiLMYMpKD*PoL0cX z@WU`%a3iU`r8QApqA`j9Q$0kSB&(!LG>S^^qe*WNr!fdpbB>g*@_uZftTaG~l}7}{M!8ztPJe^`4^{VAi24Df>;M1& N2>?k&PDHLkV1jwygpmLM diff --git a/graphics/pokemon/sirfetchd/front.png b/graphics/pokemon/sirfetchd/front.png index a7ac2a974a3a32186422085a782c0260a5798856..3ae79de6e60402d54fc9dfa9ae834eae100b47e2 100644 GIT binary patch delta 837 zcmV-L1G@Z(2#W`h7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0008|Nklz3jm5QGD10)!;K|J!a=a|t+Z#^|p-+m7*!S|8OHh|}~*7-K%t zRk@w5d?)`-Z@<&e^LPILd;ORF|A+O?eO^Cm-Lklk_0aON$f>`zj|re2fTo{s5LADg z0nPtCfUf{|>hA#5g7zfA*bq2)sn&4Eb^6VtWn!}rb5JadBzUYfUkis1C z?|MlHZb^?VrL-u0-43F``ind3_bEE!)O4?(0F`z`>$LLsa+&L)6mh^(ScLJtTkhf&HmS58CU0J7GwxdbSNGyoP2@a=f^;PsIK z?%dG;#8?5=vJSEDBT!&??+U=xbx(w}E<(sMkT7(C0PnE6Yz3fqm5wj~;%wspK>l1G zl{^9U#`I(X1+-el*aNs2*T;Vpq93QO97{Tj1t6?LlyR7O0DIMQezv}R93m}mwqV4p zcvvw*A6c-hX9ye8)V=^jBIFbrq_M^UFgelueGTXPaD@xGscDeZPtrE%Mf{JzTe%7` z15lJ_eU)*I!>klrZS2AasjZLjQswvx+uW06XPfsLdfT@6_r`P8JFmGL_ldTl!N znp>ig<7JVrqqHF3=Jqk;g@@k&MbA`txlbq<+~SV?+#w%9K3u#bTzvKil+Z2K!p(5* P00000NkvXXu0mjfHJXr& delta 962 zcmV;z13mnU2Z#ue7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00S&ZL_t(|oW+yBPuoBg$BpDjsaTqZB^ezS z*odcW=juTONd%P=r%SiwT-4R%7`qfaL`wOw#9L67ct)s_3sWj}K+3{anSTH!6Q~_5 zx$n*f8k&Tu>Kp7R-_L#Dk9(G+sWF$Bt_eM}_>8WQnZPUMe;ETcJKG?s{&$1tW{~~2 z29=pD#I|De&8!ymdW_bD!OLlYPHWs?Ze?-?N)g}&(|`s7bzVVoG9c-cQD$;Lom>Q? zby^ibW-<_?b%T)^fQ}__0|X`(QK1+W0c0lu*aW5T>6XOrV-oOok5a?huj5ZSi*3Ak z3REphcdZ7ue~?uK?9WeI*xlQ;(4{SfgZK-uz_Ru!-R8n;HP?1}|WGHycPVif}n4fJkNuMe__ zgqGqKe@Cinhbg3Ho|XOL9p5INgVrM8Xek0(M0P%#sltqGt&3STb!_p7yv^}Q2T+5!T6UkazL z3*;Us0mvQ)OpVC00A%;nebA*6kpv(U86Rn}afMU3m*-tC0>X;Y-SD;_K8$m39B>}3 zRK8vRJfJWFX@2P45NS%tcosjv>#L~%L4%9YkKt4c kWS}$zm;r=&X2S)#6y$Act@MUN&dglbp)l(w@34RHSOmEOK+OKemN6kf&aSvqw{=ROB~(Lh1T?V( zIYc+;+GUX7+KmZb6=G0G3<;7S;v9bXk83^qMmOIQ&=*v<=QSpExCh091F-~<7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00C7=L_t(|ob8gaZi6rohE0_R;D9X2(p;qO zXPy(6I*aHgv2l7FydeV=^xot1jz5l@~FNBhMaKD+y1 zSrqwczl-HdwXpjOVV_L| z7>`QFKQN<7r@0RZ;ULIa<55J+mD5Owg7u5zD<>%t8N&U=y*q1$PkaVzAFTEFWkAps_skpgJ^e)jFgwy dFFf+!`39@Zi(f5c3gQ3&002ovPDHLkV1fo((iH#z diff --git a/graphics/pokemon/spheal/back.png b/graphics/pokemon/spheal/back.png index e859b980fd92e846f88df4fd4026307cd008b777..5c23636edef66c297f717948d6d993bcde060205 100644 GIT binary patch delta 319 zcmcb~+{rvaf|G-pfq`M}_Qp38tL^IrN`m}?|D%DkikqeY)%@^uaSVxQeLLy2P_qJ$ zYj2Cs)BpB6_V8vHTyPh^^9&!jYK!G+ItwoZnu zcA8t-0xZhdA`T08J8CZ2U~#zTdiaMXuVThyK~i!IT75e8aR~x?sz>VYb6hg}@XD?8 z^InH!iBFjdpJcgf;*>cLrOR-fx^l9nN8~jDB02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L008|-L_t(|obAvt5`sVs1yF6MT|h4&9DoTI z(2W+BjOk^@gLn!@kKmrtEDO596$=Xs`2`H*k+7Le#*F!Krs_jIfj2_A_bCF*f?w)# z#_bg%LJ=R1H@r)Jw5ADj2}Q205@+&b}$2t^CXn#BMA!DSH=T9Vqz^r185q0>6KM;9cJ`}OsQ0suaf zBO=hg9yPWJq+4`xEuI|2MQoGbvW?w0^KhzGE`uT!K3 zl`}QZ=m1dXa&p5QGBr^>)#G#n3@IofG@%iQVqe3M1pnRX)k6p9%h}r?SUVnre8T=0+8K13P5)c6@X1IHJIiJNw{sU8M4l=1YZ4(eo2TI3rSae@Q>Sn{91ei07w!%S&mBW00000NkvXXu0mjf D!ip9t delta 707 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 MNkvXX1g=70g5NFq2mk;8 diff --git a/graphics/pokemon/togetic/back.png b/graphics/pokemon/togetic/back.png index 755fcf5950429d8772919e69a78e35c2122c63f3..76312f9b82573b9f5f4f4b69fda3c5553ae36df2 100644 GIT binary patch delta 472 zcmV;}0Vn?I1fc|w7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0004yNklG^5!}dl4apdKAVuxvp>grvMK1-k%`? zARrFR1b}mq02I<5z-hp&d_YJ5XL=d{4I6cO?}S`7uBHsJNODI5VDkZ|14-(b3>JS7 zXPXr%a@Ils)Qvkqqh|q1$U15Dd=eC}(9=l>XOMK#=}CgRPZc0;2)Yu0Lx7#cq~EDU z8~`FAq+!-?0Ce)_fP4*qAHcVi8v<)Uo606&>bZ*qPI^=oQVV(^^Z@v(lGMhY38Mk) z7{;*1=Q_klm=aKWO^}I0y!wy@!R~*>B7t=YNPe{Ir1zrqW&RtFQlB!u4vqb;fG_}( z*$nV6XWv@rx102qqsQti7W#oSfamIM(l`=?`H30>(|$q>xR_R>cB9w?R>c8~}{b5K3-0{tiR=VXj1rXo0~X z|KAN66?^qwlKF2^yJVluSe37r!WTdnMtcX`>2t7v8+ib1oaQ(FD1HDryA(ixwl+)v O0000OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00E9kL_t(|oaK~lZo?o9hOu&ipu#;e0S7>M z2Z)OAf0db!q*-v1-_uZ4srAF_*I=X6|6Tea4)j0((ahiT4S=fxyIunsakf?F8i*tV zpxGZFA`4Iw0RCUklXH&aC<2ypG(>?)8WBL$MDG$uTm--re|!0h@CsPb^5&4Q0AK(y zH31ar9ffg%Tdi_3Mc<^dps32%Y*9stV5-vgL#0cG&B9s#jq-~b3m&49T8 z_9osf?iQd0J;g+=1yoOz2&IoNWJEI9TgDU z+4*!2sL9o{Dw(4EM7ni9k41Wk`SB`5b+Ukc50&!MGnk|9{TOHf%G=tX9@GX0pa{@m j?7k%ckAOIse|7x;zh$ea(f+#}00000NkvXXu0mjfD{|)v diff --git a/graphics/pokemon/tornadus/therian/icon.png b/graphics/pokemon/tornadus/therian/icon.png index dd6db6b5c04ac4ab1ce991b9a293abcd71ef6977..fea79288d249339e894faa064f1e41b2deb6215d 100644 GIT binary patch delta 406 zcmV;H0crk+1>XaZ7zqdi0000?P=%b4dp~~=bW%=J0RR90|NsC0|NsC0|NsC0z)*`r z0003_NklpgDV+e)Lg`F!?m}dp;9*Sdj_uF7XunQs9BYff`5NV zhTfFA#*|^8K3x>@XidBFGe)?l227~EH`aYyVFOp9Yt(Xj4;% z$9-ZW^3}xAS}a1HQ=qZ3Dl&&K#G2L3!oh&GV%?Le-Fg@}37%g<;{lyV7#eDNOU9(G zid&8jB^MBDV!YQfQaKmnPm5yLi_?E$@zJsDlcV_4cGPFvyZ%MJ-uVEKnI9*B%=|b4 zWah^SAPYZE09pC517zbz2FS*b1dz;+4Iqgh10YMpg&$=AWVz(dj}S;?1BV5W7-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L0004WQchCENtuyBPWVjDpU?QJZr z3xp?k?SYz;0O8dcqrzJ0P3qH8JcmEJSQmCN)-8bFi?GvqQF@LVQo(H_a)q0cv zU@1-|t&e`3RHRhCKdD~M3srFPs{jB1 M07*qoM6N<$f;PxnZrb%|xdNox^S0X*t?ouCMYftYhjs{}!yv_K=Lunu^2Idcf~1>t`H zJVj&Q=ZCfN901a)+S{WW72C%e}#~3sNO9hOJ zAb>^nVBwE5=ZV1PT^kxz0p$dQ81L*P6z@3HD&GBw1IUj>~O=I^Km2S=~s3hku zpZpPu+Qz|KkYAsY(Q zu=%{EPZI*FS~D7;-s$lA)M8vKaDR|=P}o*Q+ecoUDM!(TJiqglvV_^nHSg)PiVwN5xL)U!wr1%842x nPYjHN1At5}l=02~KJ)km4s$p@5P;Dc00000NkvXXu0mjfW5F{t delta 756 zcmVOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00Li0L_t(|ob8mqi`y_1$1}#f9BUWo)89LY%YW+gaxiwo(s_cXG{oR z8)i_9dGE7rgU!1Wc!1glD9?#@lnzkEUxCb?^7Gd<1VnZAx(wjF0z9bgMIbqQpeKNe zlaml9z#cIfe};fTk)u6Ql0k^#1V~QT!~lH`vqy5%>tm_)-iH=3##cF1qqN=wL5+w? zcBd{1cqo5|Yqhv<10Z&d2Jr_P zC1f@3*2nN(5wjlxoO7CPrsm;PnG{Xc0$r6sAqN&0OCgnG%_9n z;u~XZ24X=e)N!pEAW>(jx;6r)?KTUkLbaHxBGrA-XV){xbpRlMN~9)>2Xf|!2e-dD zy9EP;f7Iu+kpw)_7dgP}I{+0qU4&sCL5x86Djg6wK-<28Gy;)DZ+_wBX6O8}>002ov22Mn-LSTZnRYmXs diff --git a/graphics/pokemon/unfezant/icon.png b/graphics/pokemon/unfezant/icon.png index 8b61d1bfba1bb4a21b9ba9bdedea73de74eaf50d..785bd89a9b4c4a0f4394f951285fad83c605640c 100644 GIT binary patch delta 323 zcmcb_+{-*cf|G-pfq}s%pmol~YWsSDk|4j}|7hT>;-)D;HGe!^978-h-%j!5Yc}9< z%@)>F6#Db~{x-Q5iAODZw|rg8zS!HieAyd!ey7X>HT_hN1y6KXc9jNjuxL(BcH(L% z+9)g(b-<}4&2eIbrM6JtB8Kym&ua1nGGEzwCH2xPrUK>#_1AWt;9!xT9^H^O?YoCL zFV_p(YQLz4oo9`0#2K=?igH*N{9PaY%6QwH&Wq;~96rriq&U@sb60}7x?;~l(=%H) zDrG;PJR!a`NTKHM4UHX3ia#meS*XdRw2n}Dif|5us43;DHiZZnGvgS z#hj-$MOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L008z$L_t(|oYj&sP6IIzMSX+Oq)TOaFOW;P z&K`&DB4}dKOp#NB>(FouyrW35C^9%3F&SG_6bRh;>HB+ZJ?H+?l5P(vx1c-_G@;^s z*_#mT=P4yJ;ISkU(*u--iAt8N;OQ{sBBc9zRhW@lVPd_*2m_}m mjW8^oFan)08dt_Y_u~^g?xPf{Y7GDY0000#Fw!qB91Uu{Pk32YoUX}v6eY5`vfNO_K- z7zB+NaL^G{O(m8I;X)U*TJiDK2jfWqwLZm8LURJ)`X(4`gzm)Pw;R}U0z~RQ;<|tG zrz8+RC{bSp%IeE;)nk8IV5?SsPYp&~w4Aag2n~1bw6LhfZhE0o7p$!7YD1{{q zr$RvBE=eic$Z|ZGDsWoRu}QysVI!=>o($EE(Bxi|V^ORK_C2uJzlR?@B)FeBBl*}u zkEhCfeZ&9PZ1sG|d&n7AOa}zJt37{VGDb1RWKJ$2g8O-N0ba@L{g7nlk|o-4z8`|h z2^45($Ov{HuB}3bL+=tjK|ElBbYZI=2{K+A;E^D4m_8EZhzNKjh=v5c6C_r!UV4H^ ztZ>ep>B4+TvcbA!2~vYy-W)TM#fw$x36dq$(u-i40Uev3tsG0%58#3tyU`EL2B`o5 N002ovPDHLkV1lwf!X5ws delta 488 zcmVOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00CA>L_t(|oXwL>PQx$|g?)pOFW`zCAiY7k zjS-td(3dCk6txdQ0XOhA?XEJpwycpHhMe-RKV1NvbUFek*(3|lG3 zj62R}pz*!X#h|w95x5E$)lqNc1o+{zZq+KhTIZN=w4MN?Iy+*!E<(kGVztA# zK8s4f7NJSZWvyC90OmM*3Z7nItm%umX&wPZ7H17h1K90{pK!WCuA#InB54x%NKtOMF9GAGBH4Pet4Ls;F_|kIyQv;X)Nd51O?EXW7S2g z3n&gK-U6UX+%NJb0OvBS+eqO$m*u-A_9$K3?xG5bAaB;m4?=amjDf3N%kLC{%shZzxx#xQd+o7#Vz@%`QJ0(@!L|DBWRE{o{spYGB=Sp#TJ`WXQ_ z4_B+`AHAl??jW!P5%6-5?&$Z_z};UGr@;Nc*9G?+Y_+d+;Ps9y&OM_bL~a*%;H z=qb5_4BW#QbC40h0`4Fqhg!S{rXJwh^lgo`L3{v-9UG)GrK-sQ0000OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00C1;L_t(|oXwL>YQr!Ph35u?E}&2!z_~$s zoKkv$KrWC_sCTVJz&S|3cd@e)hOw${A`DWMq_U)zZcE?B=+m1K^J9QNlluV_pqfwU zKr67(ge?lU3PAGia1_M~mr82LN zB1GIVwm|VvzkG%0cTU`hdL4l6Xw^yK6#zSZ^d7`l`;tnL0C0UFN$%TNv7<&bl-8$7 zh`NnU0$WJ&oB&+XVk?>mtkP;~)24ZZE=h6mKrV#;FF)aYgY4k)vYb2W44^huUaB*7 zb^Xps#`DF3cVie69S_3aVjIEE7?lDNmxrf$3U;WvZiFfB&!8D&%FJUyw`A0f$?78U z6Y+HfuH*Ns@+ksq3+m-20i!L-W=L}!tdz;@eFw0V`|JmCeVGB<+s@_=Tw)5Y`|+)9 b@S8pXJ38$wI&vi400000NkvXXu0mjfsEW`k diff --git a/graphics/pokemon/vivillon/fancy/icon.png b/graphics/pokemon/vivillon/fancy/icon.png index 22fe6f1a0161bc2d18082de80cca10bfcddb8a3f..10d9a2e9b246969bada468eb7c8083bf5de23682 100644 GIT binary patch delta 435 zcmV;k0ZjhK1pEV#7zqdi0000?P=%b4dp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0004NNkl+7AqeG=?tBn&9;^X*J3;0REl4ls4 zLXa5)1{#7OONnDcXejaE@!0iXD8UC*ILK4%K_DD@g2D$X9%Ar4t}#&vNb!mzE-!yR zLIP3>aS(ue*)lxF+^4`&y||wmkQh_Ga!*i9PJPEjiOioJfdVH^aTK7$d7XU@;v6?Q z6JVC-Z78iWn=VOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00C=BL_t(|oXwLvZo)tihW7>|Utm#u0Mn;% z8fc*iD5=aPh@eV`a6>o+N|nD#?_Gdvq zfM6iZ35ZF-lvRNg`ns;X1RpS90K@({`y2vbFw*B5g$tk_e>MOBy4vQh*BAj&SHS$S z5irI1t2oTYCgUOqT98iG$ybVeA%h?gN23602bfiRI~G8`LB6(tGJX|DD+`ngG2gy8pi*IUU$`E9RhF?+ zArVBy%KJemk7h1VxyqEUfHt_`v>)Hv#(s+r>j~j~5HGp-IsgCw07*qoM6N<$f>aFH Ar2qf` diff --git a/graphics/pokemon/vivillon/garden/icon.png b/graphics/pokemon/vivillon/garden/icon.png index 03032ba4d85b8862e5c5169d01c1a55fca7fd1f2..868f8c7fe31af20ecc5bb0ed5ec1290d0d5a6d60 100644 GIT binary patch delta 409 zcmV;K0cQTF1mXjb7zqdi0000?P=%b4dp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0003|NklO0# zDju9FDa3OzYnycLg%qV&JBR9pP=C#xYq4p!Xq#}ZhhIE&aKCdR`LTsHepSZt3;&N% zRDbCAP!|cq1F9pp4I~JXF*qleCyH$rû}r?0000U$7-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00B%%L_t(|oXwLlQp7L}MSTN}FW?<=fN+DQ zQA&~~p@VI9D7n&JilKLK3L3>MPLW2&yGvplhL%B%C(mDBBTEtD&%*xzR)AfC=m zjw+aKxOQWfkOKh%0GmtpCF})&Bbx$nxBv(s*dQ%N;5}OCe^!BDrHq|A#3kcO$_;e4 z`}!;8_^wDz__6}lwAH4&M_hn>{pbg*V%5H+vh9*8zAp@QZ5=!IR98f4e@DXZu8xl+ zxEOGs065U*F?t4povo|WM+*piVsX-lJV5;a2ougXh>g$N3S*oz0JCfIR=uls=W{g~ zr(KZ1xQvOgaKUg3^$M!iIhz8)Q{icy0-HwbQA}}v%uz~dqXPW3Bt0gp3#492?IZA7 z-E7O}2$&1%heW|67v+OVJsLK{Q_`XLP?|RTL403kfZteiu7Cri;JhE-o=yA~pU*$p U*CwEZZU6uP07*qoM6N<$f`b{!9RL6T diff --git a/graphics/pokemon/vivillon/jungle/icon.png b/graphics/pokemon/vivillon/jungle/icon.png index 8d83dd4291218cfd3d5965b3cadd85dc832f3c7b..1a3249596c47875e141358689a23f8a7a28812ba 100644 GIT binary patch delta 396 zcmV;70dxMF1l9wP7zqdi0000?P=%b4dp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0003+NklqPitHW5Nnyn`aE@VQ3OPDAglC$IS*0iEcAT$gVA{@rtruzx4mLTJ8_|8G-|} zydXX~afitWPRh!~EJUk#e$Q3V5$<^ZCnsZ-RZwqYGAh_(sk+ex)BxyO?VYSA+(BRg zBH-&FG^%NIfzClmYQX2$07?q7)=fSi50>a=ln{kjy>&Qt2QW qpb6YTGKVUj1WONaZ8=-HmaGq5w;jEk4OKJ%0000OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00BQqL_t(|oXwNLQo|q+hIxaXyZ{~Z0O=dl zi|6{}(Mykon)DieD0(!zVrvNKcy-(h!^girv&*8?pN0GYK~cy%5*35uRYftRdh+MMiu^5qv3v|o^#ag?Ne-d)WUDIq%2F8A+#EXWW zVKU$Wy8%aw#gv=#>j=E`*<zYmcd`c2pbcD(G>6B~+ z?#QWO^ppXvV;9dhj|==Tc=f){4`S0afwO{S+hFj;=o0i9dRl=D`hM3HkI&p7hqCyes+@bm)GIkZrXnpV5+=ees5fRv zPvI6ZKY!@StzX*~fh?hMGBH6=aZw5hXn!$S+ z1W|`XUPJ2yAwY6Ac$b18X_1$w6J!M-vrdo|p<*_JAR7jBZ97|QZ4p1@r5X`-n(6WS P00000NkvXXu0mjfgN(=9 delta 484 zcmVOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00B}-L_t(|oXwLva>F1HhPlBGr5ilf0hGc` z(l|%(wM1i&JJU#Klbk{{D`cw>4I69+0m-DzWE%}1`(Sr}G4^LhKY(FimJ<-040F*7 zCgZQ|kOky`0RvF$XY|tyz^U0Q_?6`r;g`b|sc_n^d8$(Adj5c1&2G5196MMO8@= zhs0dbt5X7Ck88y-0%s;Oigaim0VOH!J}ft2|KI$Ea|Jm~d0Rwk$^cBZ$y+6RK0dxn zl3_l27Z}2tc2G6S-$EThWvy4LSOBVf;d$AD(@onBY>xWTSMJ3#haCRxFC5z;kuIRP zppX$zE8chICIaUQ?E1F^46Y~-I?d5I-5-(;iJ;Un`$4EHGvGd4>v9j+Lkb@H_%=57 an|%WN`s1Cx1a|ZQ0000lLSDyU zg3vq$I@l3d3njJ%;X*eQOZeFJ!4M%CuC(n_>?D*?E6m;m!6I}#nWZlY7B3ulpo)Q`=r z@l;vIH~c?VG5jH(A}6z;gG3IsjU-rlz`&MwE5?HO0qv(5Jo^v2ri}mq N002ovPDHLkV1g53#LfT! delta 490 zcmVOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00CG@L_t(|oXwLvZo@DPhIIo%7f?_gK)ykW z7+rddb}$z6(`AP6#eNX}#h@Zf<~RKP$zkad#Ul3H{v%0tko0#{3X6+LI z-fz-U*_X%bd^rc{hT|xKZWwbJ|oA}K>0aWeV0o~;M1& diff --git a/graphics/pokemon/vivillon/monsoon/icon.png b/graphics/pokemon/vivillon/monsoon/icon.png index 6430f1f1b7a9fad31ec8da751dc1b3d151fe9dbf..2eb6221ef4cb427ef2d392c005b7cbcd329607cc 100644 GIT binary patch delta 420 zcmV;V0bBl}1nmQm7zqdi0000?P=%b4dp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z00048Nkl1i?QeI$q z34+fU2rv+srzy4t;X;X9!6WLy5TO`OxcW2MgFv|U1i>3loN(!J)kGr*AL4lfg@1oe z0=!nUL8Fy8(&42HDPSm!XAUymcdOPBgn89xG4q3|&=HuRvUlY#W%pxf(iupN{NkAq z*rhNP67`r(6}Tk$5PtWNJ1I?~pUDSPlr<)#fl6<0XH_Vos654WIu<6?*m8?}L*`B}>qKPIsxpR(Vw5 z0wW<%1fTQSDy%0c1s5S41YrfeN)f&s#D@&(^Wz{$w&r$_>Du7iL1trNBe#R>v&}v4 zQp+73O*I^n#|nwz$1ODn$^1o}5R%x7sx${#WoQnv@PLLb-&T$#=M4w-837QuRyIEX O0000OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00BlxL_t(|oXwLxa>O7Eg>?fBTcyHd(xk$L zd;17`r*yf*=4`Mj;znk%YborH4J4B`6Ez+_o&-`N`Onh0Yp3mSbDt`LXktjeis01f9(VJMz)MrsRpg;het}h zXwp%CKHCRiM}u=_QnCScUc6IJ(|)SAWQ}>*0f;w_ygg;dLi%8-^cSf$uczE3VB=K@ z@JNkOlmUk|L|Zm3A(W!TRReV({QpQ3u3r$JrM4x~uNA;`8EdPu4BhR!7n!+B5}da& zQ9rh67l#adYP^I3%;K&G$6% z2;wndpdpB|OmS=oZJf#_zlaGHA zkWyl^V}Wp55YIWrl!hJ=aB@9!z~HF|C?+p`$DCP#B?bZ$yzr7B1es!L5)uLz1xdBm zQtEh2x=T`mG_pvk-mStKX#{0j{<{}0Z>6SIe1){2pvF z1^wFG9_=f+-F1kOg&yaVVvAusFs8$g-DF~Llb1|k+J>&kKy8tEo{y#Yxaf*%h zbN#2e%mgYPnU8&sLl2$eSl(Mjo>ZYHQM!Ye!8qOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00C-AL_t(|oXwN5PQx$|hW!Soynrk60O1YF zV#G$4MwF#Yl&y?`rCktem(H-1XGn37DlS)gQntqP~W1q>K~C=S(!kO1dleJ)Yj0Lq&Ne*i!xSrv~PAt1^m#8H#L zH0PPzM#5Aad0q#GA{u>_Y~DHYQba~WC)iE0VNYNKyyZuliBlsAX@Eh08b6v>DD~Hv zPv>pNg#2lac7Ge3-Cd5`Au;Xei|2(kwGcaf#1?3&WVNt|RwE!wVwc0*0QUc*-mvQ+ zy&|_QqM>pCf2iu#ZI!Bcvi};9VtZAmK+&uTd!eXrVPrtmE6ducV*~JP_i$;}qF0k7 zDOlC|C*OFUC)J<ip7zqdi0000?P=%b4dp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0004BNklbC)}WC(*coO07=u!n(idmBt<6QPeWCf#xZS`hk}buEAV zX+^x>rW$MUMZHrVqd!BSqVRpjfNJv)FN0|+cI72fybKH=5UpB7n4(WjYOPE`oqx@{ zq{VcvMYFF8FQioU9hv0lC8`vu`A79a7({Ar;M_0*M68T#uoOOcuzvEn3e&Ny@r<%x z-}L{rTfv9*9@?OOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00CA>L_t(|oXwL>YQr!Pg>{2LIe(cC5hZ*nHt;6N86)dd^0(9}t4{j_vjIvb-;@69lyF=Kxg^aEH1Hk^Ri zWSNgDnCyH#n#_;`1`I%%yZas%psMHdh&BZmPg?u}PD%2KQ3&hwlp;#G8 z=QN-ww=xci`PuWB065@!%P|6PCp*Y=XfpyzQd~7G4`Ba4<`>R4$oG`DMYNkT0MmHR zTcvS#zI{UydgHDVFv~OHzJ8u>p$b4L=WGg4T?@M^tjnd=+AtUQryn@yb_@!j4M%NU zd=@~_q1Z=2T0E6fMc{pbZGTFD@rA7VG{?sGx=cDG0@KO ed>b44Ej|Hr=H!eSDi{6$0000Kv zeq=yn_)uWqGE#RRTELEt?=uIQR2vM^!u0D@nZoY|CNNm+(F+W#MC?0DNVit#S|u%e zFmtd4uTB-{EohG>M+R151IJ-jJF=0(-6jUk4U51`TT%@cA8NMfsC&rC4D@3wdpxtO z2e2^47}2C z^eVW|G;~w+{zOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00CV|L_t(|oXwLxZi6rs$9;n*tGlCe06Ju0 zB1g!fvKXmK1{S=K!*uT*ARVw&J=}!BEOwow_@h zWKzTg6->%q&tsC10s;g;jQ8w&D1i3p&Kgw=VCD+|0O@Qve=bH~tyEC#76CDgNu_z^ zGae~j0T<2wE9LybkZHk-1(*)YPVOqvE`Xjc{U92?D4@?VuL|xzgV;WkIPBU`u|?MG zF|O~7;`yZvO(G_H7wZVX7FTPE0T?x@OBpxKA+V9fRYTGM^8dq4INcy4ZCaMKVoCr^ z^D!;e&h_E;fAl7!J~#=C%cxOoYIh5*2Te6=x2dHESYKbPTfZ)+W7myDhy9UfN~yYd z1=uHw-KfJ@0NDvy5rFO3rp$Q&#$?zJbp%F}<*kf8jz$izQH9n*K0G8pi0$)r49uJ9 mOsaq_#Nf6c-`Ylgi%&G==cz2mv#kIC002ovPDHLk0$_s8@zNOp diff --git a/graphics/pokemon/vivillon/river/icon.png b/graphics/pokemon/vivillon/river/icon.png index a7427d685e854d2e91d25e6d665bff8f5eeb5759..d33d8271c3751a739b961bfa0e0247bb377bf2f7 100644 GIT binary patch delta 410 zcmV;L0cHNB1mgpc7zqdi0000?P=%b4dp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0003}NklPtkoYwMHvfOo z?V;yn!*mgPye*KCIG-Nq@>m0^wM~EJs2~GCgAH5DO*LOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00Bu!L_t(|oXwN5Zo?oDhIxY%FF;g3fcpli zB4zK=IV0ZU4L18(aa6pWi7T0nD@kett-4md1^MH@JKgb{u|Es?0UQIjeE~7=SV$`H zE?zHFkx&8#3_!Mz>_@l<0FN#Q;Pnb10>`{QuZ4g}I#8Q{e+40|^IFO^u##$?#y3kNr995SlCKSyH^Z8~}Z%2`q#6tDX z4;g?ScSnv11n1pV RBl`dV002ovPDHLkV1g3^z$E|x diff --git a/graphics/pokemon/vivillon/sandstorm/icon.png b/graphics/pokemon/vivillon/sandstorm/icon.png index e90306872fe1cd403559b466f595d622bf0aa560..e5e0b987ebea774b762e8a73cedd061e034fe151 100644 GIT binary patch delta 405 zcmV;G0c!rF1l|LX7zqdi0000?P=%b4dp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0003^NklHBJ_R4JOn7;~B9_)`P;3ZUd% zgO~)(2)O79x|SBl2KZH}cfl}gAPkU>x7>9!8vx3E225rvp;MMwx0(pRe3tp#fs=nf z?TGmtQ-OB+h)#qaqXimH&Zh@Lo@>A~z3gA2fXD>U;KHR%DfO&LZH*|#4EgV!WUv~zH)%~hJA9QsAmALn_oN>y5Bj2{MgbpzFqd?oBls` zBl4l%L)dfK9uVxULN*o@No>x^EqZ^)^S!PDA0A7R*(xdD#1d2ikU&()0KSL2Rle^v zJZKRK;sKMS3%BY?5Lq0o&nH2!>c@~EJxg1BBuEbEogj1g+!dY#sn#HoAW{Ur?~)}* znI6t~f>eN4u>`3S%I~Hp$R-0q+up5OE5;AUNF2-65PQ@B0000OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00BrzL_t(|oXwL>YQr!Pg>{2L7jUQ#;NBqJ zbe;PNOnjMa41;|JIV*!0t8O;}p{bJ8mekU1>1>QXy?J7OEX1D${{U8i-A};6SrL*7 zoQ>ChDH2K`KmcI($bN(c=*M{WWOD!>Hvj-_w88Uc1kA04e|{H;P*uiyRBFq3lJWqk z`r#{OeXFSQs>clkO-DV)47CAyeV=B9>D8&B2HOM#PqiV_52<3NGY*v3w^Fn?r6!3` z8+FM5bacR1N+4KgKTdhmA_C4VZW>Vri2omP!sP}9!(~~_=n4SNk7cRsalC(bljSaf zWg8RWi18MNYy{AIn*(ZZ5Bu}JE@sqv5kBpYS*4WL?F!&$NqTWS=7 z5JF9HgEFv$x*6u&qYLvqWEC<)V=l!H!c$X#Fb5q<1$2;u`+j_DoA@n00gT!A4tiES Q3IG5A07*qoM6N<$f=J)J=>Px# diff --git a/graphics/pokemon/vivillon/savanna/icon.png b/graphics/pokemon/vivillon/savanna/icon.png index 2665f3456ddaf9b4eb7e9441b008969ab1432b30..37fc6570df34d5ac7bca82f81ab88202b96a363c 100644 GIT binary patch delta 413 zcmV;O0b>5M1m**f7zqdi0000?P=%b4dp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z00041Nkl8A;XPG9V0>k8v= zWl+uGp-o1Dc)$ed!mYX!MCNA$d?W~Z{A#WQnJu`)oggtmuLP-qg<~&0L4<}A56u#! zYpqE(*e+RuNI2r;n2{`AY|2QGETOhB1j`H<*z#`WSW<6|f*X<^VjCj>000R9NkvXX Hu0mjf%ig}m delta 489 zcmV7-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00CD?L_t(|oXwLvZi7G&hUW$&F0fWO0KS29 z3JN4Y&P9VyLxB_}6@?|c0LulE88#bHAd#J5TkIoI+9=bY{q~=KH4gy(EcgeIfYO|h zK}pb7g-TA>L+2&<01yz9{UiGk@&RxlX~1Sbozod0Vkx0df3n#KnM;XrF$+KoagqJ{ zU^1S9V1e<;q^Ng6Vm!qL=!#ZVn{N&@gW&v8x2L0hwT>uyiDLtR>#(J3k=crw#Bob* zeTvFF$!wEAhu3xC09?`{x1N(gDmi3s(4yEXm{a8eRKw0M zm4|$H{~D8Sd%Q`oo5w`yE}w2Ov!EP%=>j_59`4N)bn{kK9rSj88WjYA9E}2b8Bo=I z+OZ&sGl|3kuEg^ya)8z$)tABnoerbd#`W0i_Of*q`3yT%rr^ f`|+)9@LPNV+!pO+x$cg)00000NkvXXu0mjf)jrRF diff --git a/graphics/pokemon/vivillon/sun/icon.png b/graphics/pokemon/vivillon/sun/icon.png index 7b7974210f5df659b5131604942b88a27e62082a..0a8af5e68ffd56e6fd40c2166260c993111e1617 100644 GIT binary patch delta 411 zcmV;M0c8HI1mpvd7zqdi0000?P=%b4dp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0003~NklsvF}<0IJ@_ZUn;hNidie8ZH5DJ<$k|QUY9eel)}JoQHn~ zY4>F~jSLbzs-5-J0IOx}0mJmL?_5lREgl3495^&7!LfreQesh3s#}9-m!zE zt-_7eBC13AdoOAh#5#lwH)4C35O^4Dg3w~ChYubmxX+xC{Mtf~r^OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00B`+L_t(|oXwLva>6hWhW7?LzJQqc0Okgy zQ9?-rl%xW8p~IaytBe_UYem7h)5gG9k7UwjvW>@|{{7{B7~s!>e*g`r-5W9(4c4pB z=;8R%MhP(h1jOayk^Kn$0N9fb0rtfR5K(IAigGkUW~p(Ve~$vNLe#q3Ntf}IBokc8 z-I!uN1c|F$IbapdRJ~nF8bNaUtZMn{OtH!+TW@#nGk~kKrt_-w6*Gy$hQj&`$(OwJ zO#+*qm-7JNlqP}aAkaqlW!SU646LukCFr28y1O!N^5Z4V(}p3AkHQm6k|(!JhQCh zoBkiGX#OxiL(aHjIUq)@&0%K5$BBQ%oFYXPJkMhn_?2UDGVfCKAy9`~Wqy|+sLd<; zord3(BG;!f)o30}(HsO(Ap>3xGOR9hKMn%TZ_Vu>GA4+deLF}=0lOVUHM_ZSmY0KM z8JrMzkdjx}&Kv6vGIft&ypbuu0?k2Y4i&o@4zloorY(1Cu1(?x)(;!suFeihO8@`> M07*qoM6N<$f?lM$ivR!s delta 495 zcmVOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00CS{L_t(|oXwLhd0IZai z>GWQW5f4JlP^)eJ6>@%;Bs-;(5!iy#;*{-`8i6=o%35vRt7S~_KG72ZE~AR-EO!+% z$>o~-`p%@5tJF0KY*eYt1Gu1>R^)&+t+}Lr(|UyLrMPJzG=%?e{e;5}vNeZgG3zz} z*mj4oRPOYAe>kTk%^<;M91~?b-QQw90j)1xzp3d2=;`)wmrv_bABv)Z&h1Zq7D5=O zKzqkBzYv6IKYLRr}4@GYa=R8uO4V@6t8PP$J|y`?p4T)ag_xhgv&Sp_RSVH lRNw-AFzm;-w!v@q3FvR{ut8XfUH||907*qoM6N<$0fJwo(}4g0 diff --git a/graphics/pokemon/whiscash/back.png b/graphics/pokemon/whiscash/back.png index 8741f6e9ac109ae6820f40920cc05232b64331d6..07e3fb0f68647426aad382e7d614e73beb00c760 100644 GIT binary patch delta 537 zcmV+!0_OeH1>ppc7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0005dNkl!^7z|gem3h$H)CN)2zTz>X@rnp z=mGgs;WUjF`|}O&w0|_k=LQ-UIxB{;|J7zTLPWk1tboWgO;8jD@m%n<@Nx1;Sf_tr z=)?2UvGPHtXju&7PG32;0#i(!V1S^eJ%cnyvllR)-5}D!k+GpT2-qv66Q36AX&(h2 zV-{G2CT>Y*!zKWkd<$oR?3thPLJ(7OiS%&riOc)3@mY{tuyk;d=Tqg0`_va;5VB4& zi5vwME)2R0Qr-d%!x6LiyMk;BU4egB$U}^6d^OA*cS9*iUcbRRj$3RWWS&L1DL{n; z!I8(6F&6`A@D;yGEx_Z43K+tf&-iXA1!HN5jRAn){$V29(O3x93ba-@3MxJuh#=5< z5B?5PJ@HiY5ReO4mpSG=jN}5=gTRVad^X^@vy1Hp{3ehFJ&s?{_PB(BGOK?EUT>vB zF=}WCi1;MP>-c&xNK5Dl+B~jjH?4lM-!6bN>A*XJR)H)5QS%=O>^;FDTo>pH@WS9X z1YI5_OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00H<(L_t(|obA%TPvbBY2XL1(QpP&HO003| z9?HTKOZ-sH^y|{%5G2Rg^opg_eMl;ZjBZQP;;})&He<>EF-vov{SD_h*K)nbc zfn0)H1Bd+o%OD6`F$8#Vd2Sn+TwO-E8N+GVtQ824=N`x}Xm8 zp~wm8n{_~0FwOG^fcUO5!X@Ki?#Udcv0DZ<+c*+{sH@*qu-I-Kuav{f)N+dvIACl; zy;2Ul)gQkKe`XXO)BY*g{R)yTz6s#)77HiOU`$Bwr2^V)<}g;uiE*`ip8FDPXOvyb zoKk)86HX;S_JS505Q74Y1^_m5Ghpx`o^o(bcn%Xi2TOhrd!05bI*b(W42+F*1Ky*@Zr0))ORO8= zsUU)Y|cJ?YX*+BwI5n8_nP%4VF?A1hX zgLslZ%r|Eg5A);|u*v{D_X9A!&1P%@a9cZs1QY86F#et__q9{XW8(dY+q1AXV;P_* mio*Jg9z~Ba4$)`*7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0004?NklNRbT43A=xtpqA+`WY8{mLYdZ2$a80>u)KmgVe4YL9|9;mjI`O6uomr>1V4!9nW zN1z_P4UiB*j79*Apj+H*E2M#38zRxVJY$Fk(5MvvYWt!F*Z`a%u2HJ6u}}a>=QOPy zX&-S;U1cwEX7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00FB>L_t(|obA%FN&`U<2H<7EHqUUZO9F~b zX0Z`0_J$xtQyE{tcPQ)rQce_8ziaoib|TDEt&1T#VG zq-j)KQ3BZIJRNNtOk;rEj?y5`(*nqh#Q@x}1bQt7VUI?Ps1e+$4k35I$|5if(DHH( zpu{2KioqEDRosjzMZ_qBoH~IDV1OII<1knwoFfU1Jt10@(|?p73>okq5|KdMMg~nR zfhYhj0(7luv#ubRO-F;z3V%u=c=1NhblrV1ib8pj`l=leYYl z9r&CscnGU_2)pj*Brp4`>rA%y2m#Bh0Vhjh+V}UFKC$? zCh~x$3c0^wslv-vLPh~>s_-!uN`BP?rMJ1Qh^5->Q2$GVX3}SIwWL0(A{Wj6tyv(R z9L=h8p_1f`-of(WxjL8W`0g6ZB(EtDd diff --git a/graphics/pokemon/xerneas/back.png b/graphics/pokemon/xerneas/back.png index 30654685a9aa68df660096ea723b76225466e367..5f38d48dd36b1254066a07ff5e00277c72cb8209 100644 GIT binary patch delta 669 zcmV;O0%HBf2IK{h7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z00070Nkl^IC%2VRT|9| zxMwxo3&Sc&&|Ja00~FmY09vQ?Wd&G*1z0@{ZmQ1V0syaS?79GOnxO$K^}u=5g3W)R z0C>?Y^hpBMLIZFUK&MaDS%kADSb(mY-H;0=l*-Tm5IR+(*WE}l#ta6a3A7m&M$RWq z7y(8@OB<#VY!d(~0A^X5-Ec(-V;8M~fu#55Gc?JN0UUbL3k8S;o52ED{^HmRb8p%U z)6WJ#lLr()Z-5>pY=IG|1OX)H*y?{rK(c@tQBM^J05iaC^t=t|3Zk(<0QOb$r!hb8rsh9{p16aWyi+WkUSZ)Xmz>+}ZxGZ1$ zAT3J-1IYE)_B#tifDi-#)y2NNT9954K>(WIByTOC1&E8Yz5rqlj8RUg%nN@#|0+rB ze9R#KDS)~_;sS`?iwT(*>c{{ed9t1jm?<~yKvbDBP}vNim7SswTR?~zkb=-(nX31} zZ;v7oiY|$~nc2VrKm^|j^S>Cyz!tz3LRLkSfIkUQ3?$IjLMg2yaTpL!1`?r^Zb#%1 zt^l*aS|0w8KrM87T^`RPpZ|Zki%S4mSOenmi6R!p3?jafCqi!_CVBH3yC=AgKpW^i z;yq!pnfUfE$;%O^UGVr`n^#YTOA$HdXsRx{X zen-GZW&ahR+k`&=m~-??{g;I3OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00L@BL_t(|oV}CFj-xOTMGMKJY+G3Dmwry2Cy52eMA*_!NjytCO404 z36yadh@2{9v7;s+`Y`*fQ`6V1@PO>&wd;^tzV-qAX;eCae+(YNl811DAhpX zfT(QTu(iX?3_`}XiA=;^r;LlKPnjDaDQ6!RAbsfpNqOMjEXi6eVrg6&;PZgEohE94 zRF)#uy=Wjie@Mh!`A%;bf1>g(%#W2v0tQbb1VFn09%~B#$KFdf?|ER4$)kGI@q3;Qyq%g5all%$-o52p@NL#QCTcZNjga$PMeK_?3-cRYj0xWz} x{sGvizqDzu?fN?V!1Zb-`D29>{U6rAAKMYd5wj-Y1XTb4002ovPDHLkV1hL=PFnx~ diff --git a/graphics/pokemon/xerneas/front.png b/graphics/pokemon/xerneas/front.png index d219e463b93701b4354211829bc84210b9308993..357f3b4294afcae027cab5710590b6abdfe3e65a 100644 GIT binary patch delta 728 zcmV;}0w?{B2cHIz7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0007xNklPY+YxU>{)#u!8nKLT0^B&K_%+|+xpoW@x4PeM&<%HdEjTH>hadzOOi)=|frV}b znv}G)5PS$B;%~!|c92w~%{q=jhSyWh<=&vdbu7mLCIq#}1)spD z9|XW_fbuxJ5-$Y^Q1X`o3s5Hb8$ta{1Q-ZJ8h;%ioCR$f?6UzABU`y{Uv_^%UCtIk zq<_`$ay^RZct2?Z!HRel_hnOqh1(Mt3;d*iACxSV6Qh{jc zLpT3)Ems^Ly*$4APW%dd;wk-JE8T#mDG6VHGw0WZpD{WHwI-{ zU~|Q(01qF`0A3boRS1Bt3$P_Ip1d=G8j>xeNdd8KJav1#8~Aw@96c~Wt^%N?Ed-v7 zz+KR`R$ST!mDBxB_05pm8^Xb@3CgEn&G3t05YA73Cjcy&OEcZj)O80000< KMNUMnLSTZ%%v^^6 delta 839 zcmV-N1GxO3295`i7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00Oc}L_t(|oQ>7LPuoBg2k>{ul7(1eyQoqp z;-pk`OH7w$Ii;3R$^ryCRY!^si3wHsuHvug4=+x(776887+6UDxxRBq{5$PaVwC%S z{9b$)2>?|lzR3bK& z`i6nIL7^n9cW2%VxT>xO(#`e(j{Uh&0#df=p12OH_f$#es`=VmE*Z_rL_{W}q zY#X*)5hoR%f0!@(O}ky1|6D>pF?rt{xo&k1p$G-*hrH%~1RiInwm7fLK_B{F{|#RQ zy1_ToXSEZ++P(g?%Tlme$ce+8F1t=2Ve@+dv>0O-r|H7D0KjAiqwp#N?h8P3b^^V`yh92m=}f0*lR1%#YRnVWEwfDvBRR*271 z<{Rh=aEAM!Unzu-J|Ajsi)db*jLJOxwzTDq7WD@E5k9@n-m` R^`-y-002ovPDHLkV1hU+cg_F+ diff --git a/graphics/pokemon/xerneas/icon.png b/graphics/pokemon/xerneas/icon.png index f59ee416fa95623291e0229eef19fef615a5b3d7..31036c9ee11e4e1e55ecb75adbeb05630153bc3f 100644 GIT binary patch delta 361 zcmV-v0ha#N1hWH>7zqdi0000?P=%b4dp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0003ZNkl7F)ZQd${)(RV`BxU=9z_bMVyX(Z&U9_D+vSSAx-bj8E56kw}#p;~LMcbi-m^^v&% zNJxJ+HiQHsBJl|3tCWIg)gx&DR;>hbx=c?R9;z_fPVrIKDw{BON+5CISKT`~mp=%N zdvHAmc-!hGuJs3CD2>2|C1B{ip(IuB-BYv|fOZABPN3Zbo}xe2Lca<9HL$(X|80He z$5iFh=0`d}runfNAY*>q3=q%p9U$)=Agh0PA0X@XhxzaWA^RkSCYaLj00000NkvXX Hu0mjf`>n28 delta 524 zcmV+n0`vW|1JwkO7-Iwj0001qplF={000McNliru`02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00DVPL_t(|oYj)QYQr!P#`OkA_O^MEKA;T6 zUL|njXXzG!V$reSCS=PX%PL)BkgcBo%b|rrr)rVz<9v7D`A5hv4p;)+ZSm2Epsd3u zC^rbIEtEUqBR>(}DNY)B6qdMBdDW+&BAA7DZ3;USEjZ(ee~%AZjcpv`5#Q%V+NrOI zcpjxv&66~|&=}iUfc(PcZixwK_L*M-!HG!HBy=Mvtt|0Nj%N`%tf0=DeMX^2#Dq|AI`(sgPN?o<`wYGGO~Eehi)OM{)xUc$d;2FvXPvQy_DF z&>8;D!VklERCq#~V_uGC8o?vxulhLgfp{>UKA9Pyj-V8Im;oa2_M8hTePGo@si=Zk zTai4PfDe!?-P3R(j?ow^EObCkGqM5(YMgxqOilk49x$Qb4w&`%nU62IsxmsNs@!@2 O0000<%0l}1qVIkQEUNX zD=5*C*J7`Dcfi`zd_MD5wRwKLt3Z!JuoTDpir0f&93&>AfXsfEp*A z=n1^$Pk%rEZgvkndgkutc)QNf`M7+yZwwdXATO;_gbBF9Yf-zZCr|!iegG8c!4rvk S>OAKF0000OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00C}EL_t(|ob8lNYQr!Pg&mXwRJbPBh!~qd zx=HYaEV`^k&S7fM6?%_$rFC~bMlaE0bVl;8l-RpMA#eM>d3qx`Ns_z%k;KCiP%ja? zB|?}bVz)$y%^U%cB+ASXg-$_aGlVF$hEmTEYm_oAE>l84e@IZoh=Bcjm{BkxyK!p| zlSLFz1QT07ZY_>mf+PWCRO1zBZ9DZ7Ql#(56}eVZ>6;m z`A6S@S~fr57Cys^a=w%&O~L}c4k55cl6=%&PfAa zbOmBG-iz1ner77R(S71|3+0iGrdKVO{^0KVL;V6q6ECI(W@KJe00000NkvXXu0mjf DX7JH0 diff --git a/graphics/pokemon/zygarde/10_percent/icon.png b/graphics/pokemon/zygarde/10_percent/icon.png index 3d968a6b698f72dc28537462de56151147e500b4..222eb1b80a5a53ad9d015506ba4482133819abd1 100644 GIT binary patch delta 307 zcmdnT{FiBh1SbbG0|SFkKGU*&q{r<(KE<{%+Mwa3B z5+)hth%?G_@|9n5`oEo|;h3^TBvVv{dGl7Kjs4X;6^d_YC>m&@PlUm_LXR`enP=yL{7S3j3^P6OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L0081iL_t(|ob8e^4#OY}MY)0HAuAlBC#aOJ zMUk30m+0KPMrv0e5?OIgLP}ujP-Uto{Pe#u#zK4-ROL{E;265n0l}7zV0H>HB*IcA z`6fh?u?)?_g0YjRV(oTV6wnw{@#O952=X)%+rh6nAS*c2e_p4quP9w&!w1GKh69e%99qTa<0LESsU>*_J zMvH~7UszPcmsHQ;65p1 SX7K<3002ov22Mn-LSTX>JeG3+ diff --git a/graphics/pokemon/zygarde/complete/icon.png b/graphics/pokemon/zygarde/complete/icon.png index 8575e8d58d804fa5e6a345881dd1fbcb9268c4bf..663b98fd74fc782251a0cd6b406460310e1104f5 100644 GIT binary patch delta 464 zcmV;>0Wbd01epYo7zqdi0000?P=%b4dp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0004qNkl+qNHH_?9aM zwMHF?4_OjWh6L~cK!qVGadHhPGy9TN2?CCt!i>5kCPcMRd0&76gCn zG4oQ^fEPHlRvArP2y3y2z0nz94*xqbj{|l7DfpI z9NCXR-rzmAQb&#XUrqp`nM6LEp%1W)^LQhW243X9c>N1x`!fPT7RY6g$g@CV(vv`_ zha`}0kR%WSlR)~yo&qs{41vU!INPxE=l)232!kYnxIdB~xl02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00DGKL_t(|oaK@+YQ!)QMRkKg5Zq-#-Mz_El|4;MYkb_e@3h_0Fn+pN~M+zVBtUg z*aa9qw^X!>WSJ7$w6d3oDPv05$)c5mRFcC6p2nS&ui9eB_{4M=t7rDZL&iw=)DV%M z6vx^U9!d2rYSUcQNzdhsP8AZ%t~;LIW*{6;-x7N8em~4WSYnGa;L9Mu_g$0rt&JnG z8Ny*F@}*bff0tvMPVa%O7=R%H>l=seMXUf^+$A(*O;flT-=5EfyJzqDxAm`taZwnx z3ge Date: Fri, 24 Feb 2023 08:46:34 +0100 Subject: [PATCH 097/428] Basculegion female form --- graphics/pokemon/basculegion/female/back.png | Bin 633 -> 628 bytes graphics/pokemon/basculegion/female/front.png | Bin 928 -> 939 bytes .../pokemon/basculegion/female/normal.pal | 28 +++++++++--------- graphics/pokemon/basculegion/female/shiny.pal | 28 +++++++++--------- include/graphics.h | 16 +++++----- src/data/graphics/pokemon.h | 16 +++++----- .../pokemon_graphics/back_pic_coordinates.h | 2 +- src/data/pokemon_graphics/back_pic_table.h | 7 ++--- src/data/pokemon_graphics/front_pic_table.h | 7 ++--- src/data/pokemon_graphics/palette_table.h | 6 ++-- .../pokemon_graphics/shiny_palette_table.h | 5 ++-- src/pokemon_icon.c | 7 ++--- 12 files changed, 57 insertions(+), 65 deletions(-) diff --git a/graphics/pokemon/basculegion/female/back.png b/graphics/pokemon/basculegion/female/back.png index a652e2fa53525cb97b3484ca6d63b62320d56980..a1ce4263e250b63b02498d1a56e73369096fc024 100755 GIT binary patch delta 515 zcmV+e0{s2?1oQ-uEe8`c9xvW*VUaXae_~={5D*Y9TzISA;O6G$xA|hZt5D*e$J}K`FuFwDg00Cl4M@0Xn2lB-L00EduL_t(|ob8gaPQx$| zhMh2VD=Y}6(gnd($qX)nDIUU@A!6Yn=umZG!Wk|DQfZgCqEn~jF<7cd>C~xGfA3v5 zJ0%h{nXAtu@Sb z0kUt6I&MJ5L299HYlM<7fT9b?_Ii}uR8ak*DDvOJH`l;Fh-1>L=c$Z~rFvSS=+*NG zw##Aoglk2Dv&S>=5sT%^3fHj_f7(0V{pN{$Lo!x~;+=+c2BqOFc0O9hGYzOJJ5+CzS$*}ae!%$xffP= zv?WrIF->RhlL7IDgyYjnNRvqVce%x}#w4D9j+r|+HbP*3sSuG=B+!4IBj$7bWbAS@ zGE)xdOi$HDL|(3SfxBgND&fosLg5tr`@(YEc30aD`vPdQHJesDJ+J@(002ovPDHLk FV1g#*@I3$k delta 520 zcmV+j0{8v&1o;GzEe8xb88|~S0g*IPe=v+#5D*X$Kp=Ris6bFq=;W|qJSZSAIH=s< zAYeFPU|`_n;Gm?SC|r2p@aU3f!ju3200Cl4M@0Xn2lB-L00EszL_t(|ob8e^Yr;Sj z$B#@xpr1j6LZNgqiwG{|4M~UF0-5|QVj~>dL zF_iS(#Rghqzd-$u_xs&@k9)`1DW{xr%0J7Q-ux{9a8VPYcih+sF$lv*9FuBd&<&&x zDN&_it}Bo`YgBOqLJd+V{#qdvybBcJL3q%k;HCoKd7jt$EqrqU`j$Axn`$0O-|O&? zHmXfE4`AF`=N~xbB)A7Wgapy+f4sDD>KkFU=Z$Y3%Nr!4ji~NuNOxHnPFOZb(MAjC zEl5~rRyZ#kr0)fnJKq3zozH$YDEK6Sd;1FRD$i!j8T@LX6@XuN7goqKc2O2c_14xm zLZe?Vg#4i_pxZR~x1jTU#$-8GcjvMW9oqYj2b0OiebKMjG0000< KMNUMnLSTY+Na?o# diff --git a/graphics/pokemon/basculegion/female/front.png b/graphics/pokemon/basculegion/female/front.png index 19275b7697eab3f4e0bcd5c29f34584d474784a1..5b91d3a84c4564ecdc6ae9f9fd3ac67f871cb5d6 100755 GIT binary patch delta 829 zcmV-D1H$~E2df8=Ee8`cDVJl*Zjm%ne_~={5D*Y9TzISA;O6G$xA|hZt5D*e$J}K`FuFwDg00Cl4M@0Xn2lB-L00PfRL_t(|obA%RYui8+ z0Pu5^p;;2gU_4e)V{C9rOmq~LQYfd_a$s7BgXlj{O4cLxZDxETVmOxh)xT<9NA_nrK0XXskU4MOmK??dlI$o=_WPs|*?+4`|K2a-czK;Foc zS1)D@cxGY;N@mo;v8y)5o%N`IK9-}ioxzZXET6ENpzI7P{rDE{0Kvit zR4LnXA=eaKfzlm#Ae|B+)?fwY8gVtY1QWj=>e{VG7(WlA+zng$Tk{W;{Ry zgj^RvQ#H?E4%vvRKm`UKLFd)4aiLw|MN!YN3`8^RAL$|<1SU>IyMA}(KU@h zMRf>C>BI#uLFUdaD_5QCAt=tr$#S=gaT1Gwc?Y;Z|8V{SnR8HrE%`V&00000NkvXX Hu0mjfsGoD{ delta 818 zcmV-21I_%a2cQR#Ee8xYEZbg)Z;>=oe=v+#5D*X$Kp=Ris6bFq=;W|qJSZSAIH=s< zAYeFPU|`_n;Gm?SC|r2p@aU3f!ju3200Cl4M@0Xn2lB-L00P8GL_t(|obA%RYui8+ z0Pw>Ul3)-V&0-Hhz8FGkyWnQ)W^scrgQj}ul0PDg{{lmxOMTq(N>PcOB^rwHf07~g z;x%f9tcijfH1s;COO{UUJNZNY$k4Tr8-(Ef-iO|akmvKio~%84i_K$e4Gd<$g0VFw zUp}rD2<-k0c-npnlt!dK0RT3(SP_F@Fv{K}uUbem#P3ybcOBml3n$SIKKM$7Y!Cz* z9*DMMVo580@whfZa1G$SmgXBke?#=RwFd5igO-*gmZvoQS^10s0)?59XjXKU2fx<9 zw@@Q+W1*A_p3n;)VOD$cVHn=WfCNDBIC8BNSS~p^X*Avm0PbR3DbBe|#`Abo$8ZC~ zic+nFsld6NHi+u2X*xw96uy`O>2>}vaZImKnrmwTT5*@V@#MBFLN=#ye@r((8Q_>6 z35do?+|wqXwkh2K4?7@m?4(5$w_=P(`$++FSY)!J>5vw$AIXN$avN%s_yg_$L1qqG zT0VGCs0u}anhwh4kwXZZuAtt~p4gBp&t_{?wvkBVF9>zD3XpfA9MCFcXfMS}8|6J#!|7R% zWDo?s>@p}{R2bCE^iy!P+<;UV{^$8lDcNp0DX|PPxJ#P1vop}2UsDQdv_r_yBxZs> wSvy5VJN68W*5f3@Ad;fl1lUi2=kpKeFSjpr%tD>0wg3PC07*qoM6N<$g75}_!~g&Q diff --git a/graphics/pokemon/basculegion/female/normal.pal b/graphics/pokemon/basculegion/female/normal.pal index e67011cea27c..b5b76f062fa1 100755 --- a/graphics/pokemon/basculegion/female/normal.pal +++ b/graphics/pokemon/basculegion/female/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -48 140 88 +98 98 98 16 16 16 -16 64 32 -120 168 168 -64 80 80 -232 228 176 -96 60 40 -32 48 56 -168 220 224 -32 96 56 -96 96 96 -224 228 224 -160 164 160 -40 92 120 -224 240 232 +46 92 120 +171 222 224 +230 230 230 +227 242 239 +164 164 164 +122 168 175 +32 49 57 +65 82 82 +55 140 89 +21 64 34 +34 96 61 +16 16 18 +99 62 41 diff --git a/graphics/pokemon/basculegion/female/shiny.pal b/graphics/pokemon/basculegion/female/shiny.pal index 815fa8564fed..863a0f773e70 100755 --- a/graphics/pokemon/basculegion/female/shiny.pal +++ b/graphics/pokemon/basculegion/female/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -96 147 49 +98 98 98 16 16 16 -16 64 32 -164 152 77 -79 108 60 -232 228 176 -96 60 40 -32 48 56 -222 208 114 -79 108 60 -96 96 96 -224 228 224 -160 164 160 -115 99 68 -249 236 166 +112 96 64 +216 208 112 +230 230 230 +248 236 160 +164 164 164 +160 152 72 +32 49 57 +64 80 80 +96 144 48 +21 64 34 +72 108 56 +16 16 18 +99 62 41 diff --git a/include/graphics.h b/include/graphics.h index 2f6b4290d537..b81d9951ab5a 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -990,7 +990,6 @@ extern const u32 gMonFrontPic_Wyrdeer[]; extern const u32 gMonFrontPic_Kleavor[]; extern const u32 gMonFrontPic_Ursaluna[]; extern const u32 gMonFrontPic_Basculegion[]; -extern const u32 gMonFrontPic_BasculegionF[]; extern const u32 gMonFrontPic_Sneasler[]; extern const u32 gMonFrontPic_Overqwil[]; extern const u32 gMonFrontPic_Enamorus[]; @@ -1276,7 +1275,8 @@ extern const u32 gMonFrontPic_UrshifuRapidStrikeStyle[]; extern const u32 gMonFrontPic_ZarudeDada[]; extern const u32 gMonFrontPic_CalyrexIceRider[]; extern const u32 gMonFrontPic_CalyrexShadowRider[]; -//extern const u32 gMonFrontPic_EnamorusTherian[]; +extern const u32 gMonFrontPic_EnamorusTherian[]; +extern const u32 gMonFrontPic_BasculegionFemale[]; #endif extern const u32 gMonFrontPic_Egg[]; @@ -2204,7 +2204,6 @@ extern const u32 gMonBackPic_Wyrdeer[]; extern const u32 gMonBackPic_Kleavor[]; extern const u32 gMonBackPic_Ursaluna[]; extern const u32 gMonBackPic_Basculegion[]; -extern const u32 gMonBackPic_BasculegionF[]; extern const u32 gMonBackPic_Sneasler[]; extern const u32 gMonBackPic_Overqwil[]; extern const u32 gMonBackPic_Enamorus[]; @@ -2488,7 +2487,8 @@ extern const u32 gMonBackPic_UrshifuRapidStrikeStyle[]; extern const u32 gMonBackPic_ZarudeDada[]; extern const u32 gMonBackPic_CalyrexIceRider[]; extern const u32 gMonBackPic_CalyrexShadowRider[]; -//extern const u32 gMonBackPic_EnamorusTherian[]; +extern const u32 gMonBackPic_EnamorusTherian[]; +extern const u32 gMonBackPic_BasculegionFemale[]; #endif extern const u32 gMonPalette_CircledQuestionMark[]; @@ -3410,7 +3410,6 @@ extern const u32 gMonPalette_Wyrdeer[]; extern const u32 gMonPalette_Kleavor[]; extern const u32 gMonPalette_Ursaluna[]; extern const u32 gMonPalette_Basculegion[]; -extern const u32 gMonPalette_BasculegionF[]; extern const u32 gMonPalette_Sneasler[]; extern const u32 gMonPalette_Overqwil[]; extern const u32 gMonPalette_Enamorus[]; @@ -3720,7 +3719,8 @@ extern const u32 gMonPalette_UrshifuRapidStrikeStyle[]; extern const u32 gMonPalette_ZarudeDada[]; extern const u32 gMonPalette_CalyrexIceRider[]; extern const u32 gMonPalette_CalyrexShadowRider[]; -//extern const u32 gMonPalette_EnamorusTherian[]; +extern const u32 gMonPalette_EnamorusTherian[]; +extern const u32 gMonPalette_BasculegionFemale[]; #endif extern const u32 gMonPalette_Egg[]; @@ -4643,7 +4643,6 @@ extern const u32 gMonShinyPalette_Wyrdeer[]; extern const u32 gMonShinyPalette_Kleavor[]; extern const u32 gMonShinyPalette_Ursaluna[]; extern const u32 gMonShinyPalette_Basculegion[]; -extern const u32 gMonShinyPalette_BasculegionF[]; extern const u32 gMonShinyPalette_Sneasler[]; extern const u32 gMonShinyPalette_Overqwil[]; extern const u32 gMonShinyPalette_Enamorus[]; @@ -4948,6 +4947,7 @@ extern const u32 gMonShinyPalette_ZarudeDada[]; extern const u32 gMonShinyPalette_CalyrexIceRider[]; extern const u32 gMonShinyPalette_CalyrexShadowRider[]; extern const u32 gMonShinyPalette_EnamorusTherian[]; +extern const u32 gMonShinyPalette_BasculegionFemale[]; #endif extern const u8 gMonIcon_QuestionMark[]; @@ -5870,7 +5870,6 @@ extern const u8 gMonIcon_Wyrdeer[]; extern const u8 gMonIcon_Kleavor[]; extern const u8 gMonIcon_Ursaluna[]; extern const u8 gMonIcon_Basculegion[]; -extern const u8 gMonIcon_BasculegionF[]; extern const u8 gMonIcon_Sneasler[]; extern const u8 gMonIcon_Overqwil[]; extern const u8 gMonIcon_Enamorus[]; @@ -6168,6 +6167,7 @@ extern const u8 gMonIcon_ZarudeDada[]; extern const u8 gMonIcon_CalyrexIceRider[]; extern const u8 gMonIcon_CalyrexShadowRider[]; extern const u8 gMonIcon_EnamorusTherian[]; +extern const u8 gMonIcon_BasculegionFemale[]; #endif extern const u8 gMonIcon_Egg[]; diff --git a/src/data/graphics/pokemon.h b/src/data/graphics/pokemon.h index 41eb1265f887..20ecc500d62f 100644 --- a/src/data/graphics/pokemon.h +++ b/src/data/graphics/pokemon.h @@ -923,7 +923,6 @@ const u32 gMonFrontPic_Wyrdeer[] = INCBIN_U32("graphics/pokemon/wyrdeer/front.4b const u32 gMonFrontPic_Kleavor[] = INCBIN_U32("graphics/pokemon/kleavor/front.4bpp.lz"); const u32 gMonFrontPic_Ursaluna[] = INCBIN_U32("graphics/pokemon/ursaluna/front.4bpp.lz"); const u32 gMonFrontPic_Basculegion[] = INCBIN_U32("graphics/pokemon/basculegion/front.4bpp.lz"); -const u32 gMonFrontPic_BasculegionF[] = INCBIN_U32("graphics/pokemon/basculegion/female/front.4bpp.lz"); const u32 gMonFrontPic_Sneasler[] = INCBIN_U32("graphics/pokemon/sneasler/front.4bpp.lz"); const u32 gMonFrontPic_Overqwil[] = INCBIN_U32("graphics/pokemon/overqwil/front.4bpp.lz"); const u32 gMonFrontPic_Enamorus[] = INCBIN_U32("graphics/pokemon/enamorus/front.4bpp.lz"); @@ -1207,7 +1206,8 @@ const u32 gMonFrontPic_UrshifuRapidStrikeStyle[] = INCBIN_U32("graphics/pokemon/ const u32 gMonFrontPic_ZarudeDada[] = INCBIN_U32("graphics/pokemon/zarude/dada/front.4bpp.lz"); const u32 gMonFrontPic_CalyrexIceRider[] = INCBIN_U32("graphics/pokemon/calyrex/ice_rider/front.4bpp.lz"); const u32 gMonFrontPic_CalyrexShadowRider[] = INCBIN_U32("graphics/pokemon/calyrex/shadow_rider/front.4bpp.lz"); -//const u32 gMonFrontPic_EnamorusTherian[] = INCBIN_U32("graphics/pokemon/enamorus/therian/front.4bpp.lz"); +const u32 gMonFrontPic_EnamorusTherian[] = INCBIN_U32("graphics/pokemon/enamorus/therian/front.4bpp.lz"); +const u32 gMonFrontPic_BasculegionFemale[] = INCBIN_U32("graphics/pokemon/basculegion/female/front.4bpp.lz"); #endif const u32 gMonFrontPic_Egg[] = INCBIN_U32("graphics/pokemon/egg/anim_front.4bpp.lz"); @@ -2135,7 +2135,6 @@ const u32 gMonBackPic_Wyrdeer[] = INCBIN_U32("graphics/pokemon/wyrdeer/back.4bpp const u32 gMonBackPic_Kleavor[] = INCBIN_U32("graphics/pokemon/kleavor/back.4bpp.lz"); const u32 gMonBackPic_Ursaluna[] = INCBIN_U32("graphics/pokemon/ursaluna/back.4bpp.lz"); const u32 gMonBackPic_Basculegion[] = INCBIN_U32("graphics/pokemon/basculegion/back.4bpp.lz"); -const u32 gMonBackPic_BasculegionF[] = INCBIN_U32("graphics/pokemon/basculegion/female/back.4bpp.lz"); const u32 gMonBackPic_Sneasler[] = INCBIN_U32("graphics/pokemon/sneasler/back.4bpp.lz"); const u32 gMonBackPic_Overqwil[] = INCBIN_U32("graphics/pokemon/overqwil/back.4bpp.lz"); const u32 gMonBackPic_Enamorus[] = INCBIN_U32("graphics/pokemon/enamorus/back.4bpp.lz"); @@ -2419,7 +2418,8 @@ const u32 gMonBackPic_UrshifuRapidStrikeStyle[] = INCBIN_U32("graphics/pokemon/u const u32 gMonBackPic_ZarudeDada[] = INCBIN_U32("graphics/pokemon/zarude/dada/back.4bpp.lz"); const u32 gMonBackPic_CalyrexIceRider[] = INCBIN_U32("graphics/pokemon/calyrex/ice_rider/back.4bpp.lz"); const u32 gMonBackPic_CalyrexShadowRider[] = INCBIN_U32("graphics/pokemon/calyrex/shadow_rider/back.4bpp.lz"); -//const u32 gMonBackPic_EnamorusTherian[] = INCBIN_U32("graphics/pokemon/enamorus/therian/back.4bpp.lz"); +const u32 gMonBackPic_EnamorusTherian[] = INCBIN_U32("graphics/pokemon/enamorus/therian/back.4bpp.lz"); +const u32 gMonBackPic_BasculegionFemale[] = INCBIN_U32("graphics/pokemon/basculegion/female/back.4bpp.lz"); #endif const u32 gMonPalette_CircledQuestionMark[] = INCBIN_U32("graphics/pokemon/question_mark/circled/normal.gbapal.lz"); @@ -3341,7 +3341,6 @@ const u32 gMonPalette_Wyrdeer[] = INCBIN_U32("graphics/pokemon/wyrdeer/normal.gb const u32 gMonPalette_Kleavor[] = INCBIN_U32("graphics/pokemon/kleavor/normal.gbapal.lz"); const u32 gMonPalette_Ursaluna[] = INCBIN_U32("graphics/pokemon/ursaluna/normal.gbapal.lz"); const u32 gMonPalette_Basculegion[] = INCBIN_U32("graphics/pokemon/basculegion/normal.gbapal.lz"); -const u32 gMonPalette_BasculegionF[] = INCBIN_U32("graphics/pokemon/basculegion/female/normal.gbapal.lz"); const u32 gMonPalette_Sneasler[] = INCBIN_U32("graphics/pokemon/sneasler/normal.gbapal.lz"); const u32 gMonPalette_Overqwil[] = INCBIN_U32("graphics/pokemon/overqwil/normal.gbapal.lz"); const u32 gMonPalette_Enamorus[] = INCBIN_U32("graphics/pokemon/enamorus/normal.gbapal.lz"); @@ -3651,7 +3650,8 @@ const u32 gMonPalette_UrshifuRapidStrikeStyle[] = INCBIN_U32("graphics/pokemon/u const u32 gMonPalette_ZarudeDada[] = INCBIN_U32("graphics/pokemon/zarude/dada/normal.gbapal.lz"); const u32 gMonPalette_CalyrexIceRider[] = INCBIN_U32("graphics/pokemon/calyrex/ice_rider/normal.gbapal.lz"); const u32 gMonPalette_CalyrexShadowRider[] = INCBIN_U32("graphics/pokemon/calyrex/shadow_rider/normal.gbapal.lz"); -//const u32 gMonPalette_EnamorusTherian[] = INCBIN_U32("graphics/pokemon/enamorus/therian/normal.gbapal.lz"); +const u32 gMonPalette_EnamorusTherian[] = INCBIN_U32("graphics/pokemon/enamorus/therian/normal.gbapal.lz"); +const u32 gMonPalette_BasculegionFemale[] = INCBIN_U32("graphics/pokemon/basculegion/female/normal.gbapal.lz"); #endif const u32 gMonPalette_Egg[] = INCBIN_U32("graphics/pokemon/egg/normal.gbapal.lz"); @@ -4574,7 +4574,6 @@ const u32 gMonShinyPalette_Wyrdeer[] = INCBIN_U32("graphics/pokemon/wyrdeer/shin const u32 gMonShinyPalette_Kleavor[] = INCBIN_U32("graphics/pokemon/kleavor/shiny.gbapal.lz"); const u32 gMonShinyPalette_Ursaluna[] = INCBIN_U32("graphics/pokemon/ursaluna/shiny.gbapal.lz"); const u32 gMonShinyPalette_Basculegion[] = INCBIN_U32("graphics/pokemon/basculegion/shiny.gbapal.lz"); -const u32 gMonShinyPalette_BasculegionF[] = INCBIN_U32("graphics/pokemon/basculegion/female/shiny.gbapal.lz"); const u32 gMonShinyPalette_Sneasler[] = INCBIN_U32("graphics/pokemon/sneasler/shiny.gbapal.lz"); const u32 gMonShinyPalette_Overqwil[] = INCBIN_U32("graphics/pokemon/overqwil/shiny.gbapal.lz"); const u32 gMonShinyPalette_Enamorus[] = INCBIN_U32("graphics/pokemon/enamorus/shiny.gbapal.lz"); @@ -4879,6 +4878,7 @@ const u32 gMonShinyPalette_ZarudeDada[] = INCBIN_U32("graphics/pokemon/zarude/da const u32 gMonShinyPalette_CalyrexIceRider[] = INCBIN_U32("graphics/pokemon/calyrex/ice_rider/shiny.gbapal.lz"); const u32 gMonShinyPalette_CalyrexShadowRider[] = INCBIN_U32("graphics/pokemon/calyrex/shadow_rider/shiny.gbapal.lz"); const u32 gMonShinyPalette_EnamorusTherian[] = INCBIN_U32("graphics/pokemon/enamorus/therian/shiny.gbapal.lz"); +const u32 gMonShinyPalette_BasculegionFemale[] = INCBIN_U32("graphics/pokemon/basculegion/female/shiny.gbapal.lz"); #endif const u8 gMonIcon_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mark/icon.4bpp"); @@ -5801,7 +5801,6 @@ const u8 gMonIcon_Wyrdeer[] = INCBIN_U8("graphics/pokemon/wyrdeer/icon.4bpp"); const u8 gMonIcon_Kleavor[] = INCBIN_U8("graphics/pokemon/kleavor/icon.4bpp"); const u8 gMonIcon_Ursaluna[] = INCBIN_U8("graphics/pokemon/ursaluna/icon.4bpp"); const u8 gMonIcon_Basculegion[] = INCBIN_U8("graphics/pokemon/basculegion/icon.4bpp"); -const u8 gMonIcon_BasculegionF[] = INCBIN_U8("graphics/pokemon/basculegion/female/icon.4bpp"); const u8 gMonIcon_Sneasler[] = INCBIN_U8("graphics/pokemon/sneasler/icon.4bpp"); const u8 gMonIcon_Overqwil[] = INCBIN_U8("graphics/pokemon/overqwil/icon.4bpp"); const u8 gMonIcon_Enamorus[] = INCBIN_U8("graphics/pokemon/enamorus/icon.4bpp"); @@ -6099,6 +6098,7 @@ const u8 gMonIcon_ZarudeDada[] = INCBIN_U8("graphics/pokemon/zarude/dada/icon.4b const u8 gMonIcon_CalyrexIceRider[] = INCBIN_U8("graphics/pokemon/calyrex/ice_rider/icon.4bpp"); const u8 gMonIcon_CalyrexShadowRider[] = INCBIN_U8("graphics/pokemon/calyrex/shadow_rider/icon.4bpp"); const u8 gMonIcon_EnamorusTherian[] = INCBIN_U8("graphics/pokemon/enamorus/therian/icon.4bpp"); +const u8 gMonIcon_BasculegionFemale[] = INCBIN_U8("graphics/pokemon/basculegion/female/icon.4bpp"); #endif const u8 gMonIcon_Egg[] = INCBIN_U8("graphics/pokemon/egg/icon.4bpp"); diff --git a/src/data/pokemon_graphics/back_pic_coordinates.h b/src/data/pokemon_graphics/back_pic_coordinates.h index 8f9dd8ee8f81..39caae2daf62 100644 --- a/src/data/pokemon_graphics/back_pic_coordinates.h +++ b/src/data/pokemon_graphics/back_pic_coordinates.h @@ -1042,7 +1042,7 @@ const struct MonCoords gMonBackPicCoords[] = [SPECIES_ARCANINE_HISUIAN] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 3 }, [SPECIES_VOLTORB_HISUIAN] = { .size = MON_COORDS_SIZE(48, 32), .y_offset = 10 }, [SPECIES_ELECTRODE_HISUIAN] = { .size = MON_COORDS_SIZE(64, 40), .y_offset = 7 }, - [SPECIES_TYPHLOSION_HISUIAN] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 3 }, + [SPECIES_TYPHLOSION_HISUIAN] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 0 }, [SPECIES_QWILFISH_HISUIAN] = { .size = MON_COORDS_SIZE(56, 56), .y_offset = 6 }, [SPECIES_SNEASEL_HISUIAN] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 3 }, #if P_GEN_5_POKEMON == TRUE diff --git a/src/data/pokemon_graphics/back_pic_table.h b/src/data/pokemon_graphics/back_pic_table.h index 15c176c92219..78bcc2598e52 100644 --- a/src/data/pokemon_graphics/back_pic_table.h +++ b/src/data/pokemon_graphics/back_pic_table.h @@ -1331,7 +1331,9 @@ const struct CompressedSpriteSheet gMonBackPicTable[] = SPECIES_SPRITE(CALYREX_ICE_RIDER, gMonBackPic_CalyrexIceRider), SPECIES_SPRITE(CALYREX_SHADOW_RIDER, gMonBackPic_CalyrexShadowRider), - SPECIES_SPRITE(ENAMORUS_THERIAN, gMonBackPic_CircledQuestionMark), //gMonBackPic_EnamorusTherian), + SPECIES_SPRITE(ENAMORUS_THERIAN, gMonBackPic_EnamorusTherian), + + SPECIES_SPRITE(BASCULEGION_FEMALE, gMonBackPic_BasculegionFemale), #endif SPECIES_SPRITE(EGG, gMonFrontPic_Egg), }; @@ -1359,7 +1361,4 @@ const struct CompressedSpriteSheet gMonBackPicTableFemale[] = #if P_GEN_6_POKEMON == TRUE SPECIES_SPRITE(PYROAR, gMonBackPic_PyroarF), #endif -#if P_GEN_8_POKEMON == TRUE - SPECIES_SPRITE(BASCULEGION, gMonBackPic_BasculegionF), -#endif }; diff --git a/src/data/pokemon_graphics/front_pic_table.h b/src/data/pokemon_graphics/front_pic_table.h index ff9fa33169d7..411a2ba37925 100644 --- a/src/data/pokemon_graphics/front_pic_table.h +++ b/src/data/pokemon_graphics/front_pic_table.h @@ -1330,7 +1330,9 @@ const struct CompressedSpriteSheet gMonFrontPicTable[] = SPECIES_SPRITE(CALYREX_ICE_RIDER, gMonFrontPic_CalyrexIceRider), SPECIES_SPRITE(CALYREX_SHADOW_RIDER, gMonFrontPic_CalyrexShadowRider), - SPECIES_SPRITE(ENAMORUS_THERIAN, gMonFrontPic_CircledQuestionMark), //gMonFrontPic_EnamorusTherian), + SPECIES_SPRITE(ENAMORUS_THERIAN, gMonFrontPic_EnamorusTherian), + + SPECIES_SPRITE(BASCULEGION_FEMALE, gMonFrontPic_BasculegionFemale), #endif SPECIES_SPRITE(EGG, gMonFrontPic_Egg), }; @@ -1358,7 +1360,4 @@ const struct CompressedSpriteSheet gMonFrontPicTableFemale[] = #if P_GEN_6_POKEMON == TRUE SPECIES_SPRITE(PYROAR, gMonFrontPic_PyroarF), #endif -#if P_GEN_7_POKEMON == TRUE - SPECIES_SPRITE(BASCULEGION, gMonFrontPic_BasculegionF), -#endif }; diff --git a/src/data/pokemon_graphics/palette_table.h b/src/data/pokemon_graphics/palette_table.h index ee390c1e06bf..b47a74db40a4 100644 --- a/src/data/pokemon_graphics/palette_table.h +++ b/src/data/pokemon_graphics/palette_table.h @@ -1330,7 +1330,8 @@ const struct CompressedSpritePalette gMonPaletteTable[] = SPECIES_PAL(CALYREX_ICE_RIDER, gMonPalette_CalyrexIceRider), SPECIES_PAL(CALYREX_SHADOW_RIDER, gMonPalette_CalyrexShadowRider), - SPECIES_PAL(ENAMORUS_THERIAN, gMonPalette_CircledQuestionMark), // gMonPalette_EnamorusTherian), + SPECIES_PAL(ENAMORUS_THERIAN, gMonPalette_EnamorusTherian), + SPECIES_PAL(BASCULEGION_FEMALE, gMonPalette_BasculegionFemale), #endif SPECIES_PAL(EGG, gMonPalette_Egg), }; @@ -1358,7 +1359,4 @@ const struct CompressedSpritePalette gMonPaletteTableFemale[] = #if P_GEN_6_POKEMON == TRUE SPECIES_PAL(PYROAR, gMonPalette_Pyroar), #endif -#if P_GEN_8_POKEMON == TRUE - SPECIES_PAL(BASCULEGION, gMonPalette_BasculegionF), -#endif }; diff --git a/src/data/pokemon_graphics/shiny_palette_table.h b/src/data/pokemon_graphics/shiny_palette_table.h index 78ce1d23b1ec..350155646414 100644 --- a/src/data/pokemon_graphics/shiny_palette_table.h +++ b/src/data/pokemon_graphics/shiny_palette_table.h @@ -1330,6 +1330,8 @@ const struct CompressedSpritePalette gMonShinyPaletteTable[] = SPECIES_SHINY_PAL(CALYREX_SHADOW_RIDER, gMonShinyPalette_CalyrexShadowRider), SPECIES_SHINY_PAL(ENAMORUS_THERIAN, gMonShinyPalette_EnamorusTherian), + + SPECIES_SHINY_PAL(BASCULEGION_FEMALE, gMonShinyPalette_BasculegionFemale), #endif SPECIES_SHINY_PAL(EGG, gMonPalette_Egg), }; @@ -1357,7 +1359,4 @@ const struct CompressedSpritePalette gMonShinyPaletteTableFemale[] = #if P_GEN_6_POKEMON == TRUE SPECIES_SHINY_PAL(PYROAR, gMonShinyPalette_Pyroar), #endif -#if P_GEN_8_POKEMON == TRUE - SPECIES_SHINY_PAL(BASCULEGION, gMonShinyPalette_BasculegionF), -#endif }; diff --git a/src/pokemon_icon.c b/src/pokemon_icon.c index f8851d4e2058..f911f6e44e95 100644 --- a/src/pokemon_icon.c +++ b/src/pokemon_icon.c @@ -1293,7 +1293,7 @@ const u8 *const gMonIconTable[] = [SPECIES_CALYREX_ICE_RIDER] = gMonIcon_CalyrexIceRider, [SPECIES_CALYREX_SHADOW_RIDER] = gMonIcon_CalyrexShadowRider, [SPECIES_ENAMORUS_THERIAN] = gMonIcon_EnamorusTherian, - [SPECIES_BASCULEGION_FEMALE] = gMonIcon_BasculegionF, + [SPECIES_BASCULEGION_FEMALE] = gMonIcon_BasculegionFemale, #endif [SPECIES_EGG] = gMonIcon_Egg, }; @@ -1326,9 +1326,6 @@ const u8 *const gMonIconTableFemale[] = #if P_GEN_6_POKEMON == TRUE [SPECIES_PYROAR] = gMonIcon_PyroarF, #endif -#if P_GEN_8_POKEMON == TRUE - [SPECIES_BASCULEGION] = gMonIcon_Basculegion, -#endif }; const u8 gMonIconPaletteIndices[] = @@ -2543,7 +2540,7 @@ const u8 gMonIconPaletteIndices[] = [SPECIES_CALYREX_ICE_RIDER] = 0, [SPECIES_CALYREX_SHADOW_RIDER] = 0, [SPECIES_ENAMORUS_THERIAN] = 1, - [SPECIES_BASCULEGION_FEMALE] = 1, + [SPECIES_BASCULEGION_FEMALE] = 0, #endif [SPECIES_EGG] = 1, }; From 079ca8ab2925c572c96a7042f2ce6d275bb844ba Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Fri, 24 Feb 2023 07:53:02 -0300 Subject: [PATCH 098/428] Renamed MON_DATA_SPECIES2 to MON_DATA_SPECIES_OR_EGG for clarification --- include/pokemon.h | 2 +- src/battle_ai_script_commands.c | 4 +- src/battle_ai_switch_items.c | 20 +++++----- src/battle_controllers.c | 14 +++---- src/battle_main.c | 66 ++++++++++++++++----------------- src/battle_script_commands.c | 18 ++++----- src/battle_setup.c | 2 +- src/battle_tower.c | 2 +- src/battle_util.c | 16 ++++---- src/braille_puzzles.c | 4 +- src/dodrio_berry_picking.c | 2 +- src/field_poison.c | 2 +- src/field_specials.c | 8 ++-- src/frontier_util.c | 2 +- src/hall_of_fame.c | 2 +- src/menu_specialized.c | 2 +- src/mystery_event_script.c | 2 +- src/party_menu.c | 6 +-- src/pokeblock_feed.c | 6 +-- src/pokemon.c | 20 +++++----- src/pokemon_jump.c | 2 +- src/pokemon_storage_system.c | 20 +++++----- src/pokemon_summary_screen.c | 2 +- src/pokenav_conditions.c | 2 +- src/roulette.c | 2 +- src/script_pokemon_util.c | 2 +- src/trade.c | 14 +++---- src/union_room.c | 12 +++--- 28 files changed, 128 insertions(+), 128 deletions(-) diff --git a/include/pokemon.h b/include/pokemon.h index ab102000a39a..c84522746190 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -70,7 +70,7 @@ enum { MON_DATA_SPATK, MON_DATA_SPDEF, MON_DATA_MAIL, - MON_DATA_SPECIES2, + MON_DATA_SPECIES_OR_EGG, MON_DATA_IVS, MON_DATA_CHAMPION_RIBBON, MON_DATA_WINNING_RIBBON, diff --git a/src/battle_ai_script_commands.c b/src/battle_ai_script_commands.c index aacbe20ac4bd..2152be374ae5 100644 --- a/src/battle_ai_script_commands.c +++ b/src/battle_ai_script_commands.c @@ -1329,8 +1329,8 @@ static void Cmd_count_usable_party_mons(void) { if (i != battlerOnField1 && i != battlerOnField2 && GetMonData(&party[i], MON_DATA_HP) != 0 - && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_NONE - && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_EGG) + && GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) != SPECIES_NONE + && GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) != SPECIES_EGG) { AI_THINKING_STRUCT->funcResult++; } diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index 13cfb9bfdcbf..5789a3ff6f32 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -86,9 +86,9 @@ static bool8 ShouldSwitchIfWonderGuard(void) { if (GetMonData(&party[i], MON_DATA_HP) == 0) continue; - if (GetMonData(&party[i], MON_DATA_SPECIES2) == SPECIES_NONE) + if (GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) == SPECIES_NONE) continue; - if (GetMonData(&party[i], MON_DATA_SPECIES2) == SPECIES_EGG) + if (GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) == SPECIES_EGG) continue; if (i == gBattlerPartyIndexes[gActiveBattler]) continue; @@ -184,9 +184,9 @@ static bool8 FindMonThatAbsorbsOpponentsMove(void) if (GetMonData(&party[i], MON_DATA_HP) == 0) continue; - if (GetMonData(&party[i], MON_DATA_SPECIES2) == SPECIES_NONE) + if (GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) == SPECIES_NONE) continue; - if (GetMonData(&party[i], MON_DATA_SPECIES2) == SPECIES_EGG) + if (GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) == SPECIES_EGG) continue; if (i == gBattlerPartyIndexes[battlerIn1]) continue; @@ -382,9 +382,9 @@ static bool8 FindMonWithFlagsAndSuperEffective(u8 flags, u8 moduloPercent) if (GetMonData(&party[i], MON_DATA_HP) == 0) continue; - if (GetMonData(&party[i], MON_DATA_SPECIES2) == SPECIES_NONE) + if (GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) == SPECIES_NONE) continue; - if (GetMonData(&party[i], MON_DATA_SPECIES2) == SPECIES_EGG) + if (GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) == SPECIES_EGG) continue; if (i == gBattlerPartyIndexes[battlerIn1]) continue; @@ -488,9 +488,9 @@ static bool8 ShouldSwitch(void) { if (GetMonData(&party[i], MON_DATA_HP) == 0) continue; - if (GetMonData(&party[i], MON_DATA_SPECIES2) == SPECIES_NONE) + if (GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) == SPECIES_NONE) continue; - if (GetMonData(&party[i], MON_DATA_SPECIES2) == SPECIES_EGG) + if (GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) == SPECIES_EGG) continue; if (i == gBattlerPartyIndexes[battlerIn1]) continue; @@ -823,8 +823,8 @@ static bool8 ShouldUseItem(void) for (i = 0; i < PARTY_SIZE; i++) { if (GetMonData(&party[i], MON_DATA_HP) != 0 - && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_NONE - && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_EGG) + && GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) != SPECIES_NONE + && GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) != SPECIES_EGG) { validMons++; } diff --git a/src/battle_controllers.c b/src/battle_controllers.c index e5cfb3be68f9..b93e65fdc09d 100644 --- a/src/battle_controllers.c +++ b/src/battle_controllers.c @@ -592,8 +592,8 @@ static void SetBattlePartyIds(void) if (GET_BATTLER_SIDE2(i) == B_SIDE_PLAYER) { if (GetMonData(&gPlayerParty[j], MON_DATA_HP) != 0 - && GetMonData(&gPlayerParty[j], MON_DATA_SPECIES2) != SPECIES_NONE - && GetMonData(&gPlayerParty[j], MON_DATA_SPECIES2) != SPECIES_EGG + && GetMonData(&gPlayerParty[j], MON_DATA_SPECIES_OR_EGG) != SPECIES_NONE + && GetMonData(&gPlayerParty[j], MON_DATA_SPECIES_OR_EGG) != SPECIES_EGG && !GetMonData(&gPlayerParty[j], MON_DATA_IS_EGG)) { gBattlerPartyIndexes[i] = j; @@ -603,8 +603,8 @@ static void SetBattlePartyIds(void) else { if (GetMonData(&gEnemyParty[j], MON_DATA_HP) != 0 - && GetMonData(&gEnemyParty[j], MON_DATA_SPECIES2) != SPECIES_NONE - && GetMonData(&gEnemyParty[j], MON_DATA_SPECIES2) != SPECIES_EGG + && GetMonData(&gEnemyParty[j], MON_DATA_SPECIES_OR_EGG) != SPECIES_NONE + && GetMonData(&gEnemyParty[j], MON_DATA_SPECIES_OR_EGG) != SPECIES_EGG && !GetMonData(&gEnemyParty[j], MON_DATA_IS_EGG)) { gBattlerPartyIndexes[i] = j; @@ -618,7 +618,7 @@ static void SetBattlePartyIds(void) { if (GetMonData(&gPlayerParty[j], MON_DATA_HP) != 0 && GetMonData(&gPlayerParty[j], MON_DATA_SPECIES) != SPECIES_NONE // Probably a typo by Game Freak. The rest use SPECIES2. - && GetMonData(&gPlayerParty[j], MON_DATA_SPECIES2) != SPECIES_EGG + && GetMonData(&gPlayerParty[j], MON_DATA_SPECIES_OR_EGG) != SPECIES_EGG && !GetMonData(&gPlayerParty[j], MON_DATA_IS_EGG) && gBattlerPartyIndexes[i - 2] != j) { @@ -629,8 +629,8 @@ static void SetBattlePartyIds(void) else { if (GetMonData(&gEnemyParty[j], MON_DATA_HP) != 0 - && GetMonData(&gEnemyParty[j], MON_DATA_SPECIES2) != SPECIES_NONE - && GetMonData(&gEnemyParty[j], MON_DATA_SPECIES2) != SPECIES_EGG + && GetMonData(&gEnemyParty[j], MON_DATA_SPECIES_OR_EGG) != SPECIES_NONE + && GetMonData(&gEnemyParty[j], MON_DATA_SPECIES_OR_EGG) != SPECIES_EGG && !GetMonData(&gEnemyParty[j], MON_DATA_IS_EGG) && gBattlerPartyIndexes[i - 2] != j) { diff --git a/src/battle_main.c b/src/battle_main.c index 508cc400fd60..b8fea024ee66 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -712,33 +712,33 @@ static void CB2_InitBattleInternal(void) gBattleCommunication[MULTIUSE_STATE] = 0; } -#define BUFFER_PARTY_VS_SCREEN_STATUS(party, flags, i) \ - for ((i) = 0; (i) < PARTY_SIZE; (i)++) \ - { \ - u16 species = GetMonData(&(party)[(i)], MON_DATA_SPECIES2); \ - u16 hp = GetMonData(&(party)[(i)], MON_DATA_HP); \ - u32 status = GetMonData(&(party)[(i)], MON_DATA_STATUS); \ - \ - if (species == SPECIES_NONE) \ - continue; \ - \ - /* Is healthy mon? */ \ - if (species != SPECIES_EGG && hp != 0 && status == 0) \ - (flags) |= 1 << (i) * 2; \ - \ - if (species == SPECIES_NONE) /* Redundant */ \ - continue; \ - \ - /* Is Egg or statused? */ \ - if (hp != 0 && (species == SPECIES_EGG || status != 0)) \ - (flags) |= 2 << (i) * 2; \ - \ - if (species == SPECIES_NONE) /* Redundant */ \ - continue; \ - \ - /* Is fainted? */ \ - if (species != SPECIES_EGG && hp == 0) \ - (flags) |= 3 << (i) * 2; \ +#define BUFFER_PARTY_VS_SCREEN_STATUS(party, flags, i) \ + for ((i) = 0; (i) < PARTY_SIZE; (i)++) \ + { \ + u16 species = GetMonData(&(party)[(i)], MON_DATA_SPECIES_OR_EGG); \ + u16 hp = GetMonData(&(party)[(i)], MON_DATA_HP); \ + u32 status = GetMonData(&(party)[(i)], MON_DATA_STATUS); \ + \ + if (species == SPECIES_NONE) \ + continue; \ + \ + /* Is healthy mon? */ \ + if (species != SPECIES_EGG && hp != 0 && status == 0) \ + (flags) |= 1 << (i) * 2; \ + \ + if (species == SPECIES_NONE) /* Redundant */ \ + continue; \ + \ + /* Is Egg or statused? */ \ + if (hp != 0 && (species == SPECIES_EGG || status != 0)) \ + (flags) |= 2 << (i) * 2; \ + \ + if (species == SPECIES_NONE) /* Redundant */ \ + continue; \ + \ + /* Is fainted? */ \ + if (species != SPECIES_EGG && hp == 0) \ + (flags) |= 3 << (i) * 2; \ } // For Vs Screen at link battle start @@ -3502,8 +3502,8 @@ static void BattleIntroDrawPartySummaryScreens(void) { for (i = 0; i < PARTY_SIZE; i++) { - if (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2) == SPECIES_NONE - || GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2) == SPECIES_EGG) + if (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES_OR_EGG) == SPECIES_NONE + || GetMonData(&gEnemyParty[i], MON_DATA_SPECIES_OR_EGG) == SPECIES_EGG) { hpStatus[i].hp = HP_EMPTY_SLOT; hpStatus[i].status = 0; @@ -3520,8 +3520,8 @@ static void BattleIntroDrawPartySummaryScreens(void) for (i = 0; i < PARTY_SIZE; i++) { - if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == SPECIES_NONE - || GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == SPECIES_EGG) + if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG) == SPECIES_NONE + || GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG) == SPECIES_EGG) { hpStatus[i].hp = HP_EMPTY_SLOT; hpStatus[i].status = 0; @@ -3546,8 +3546,8 @@ static void BattleIntroDrawPartySummaryScreens(void) for (i = 0; i < PARTY_SIZE; i++) { - if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == SPECIES_NONE - || GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == SPECIES_EGG) + if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG) == SPECIES_NONE + || GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG) == SPECIES_EGG) { hpStatus[i].hp = HP_EMPTY_SLOT; hpStatus[i].status = 0; diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 2fcd195953c6..d12477bea8a5 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -5682,8 +5682,8 @@ static void Cmd_drawpartystatussummary(void) for (i = 0; i < PARTY_SIZE; i++) { - if (GetMonData(&party[i], MON_DATA_SPECIES2) == SPECIES_NONE - || GetMonData(&party[i], MON_DATA_SPECIES2) == SPECIES_EGG) + if (GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) == SPECIES_NONE + || GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) == SPECIES_EGG) { hpStatuses[i].hp = 0xFFFF; hpStatuses[i].status = 0; @@ -8331,7 +8331,7 @@ static void Cmd_healpartystatus(void) for (i = 0; i < PARTY_SIZE; i++) { - u16 species = GetMonData(&party[i], MON_DATA_SPECIES2); + u16 species = GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG); u8 abilityNum = GetMonData(&party[i], MON_DATA_ABILITY_NUM); if (species != SPECIES_NONE && species != SPECIES_EGG) @@ -8877,8 +8877,8 @@ static void Cmd_trydobeatup(void) for (;gBattleCommunication[0] < PARTY_SIZE; gBattleCommunication[0]++) { if (GetMonData(&party[gBattleCommunication[0]], MON_DATA_HP) - && GetMonData(&party[gBattleCommunication[0]], MON_DATA_SPECIES2) - && GetMonData(&party[gBattleCommunication[0]], MON_DATA_SPECIES2) != SPECIES_EGG + && GetMonData(&party[gBattleCommunication[0]], MON_DATA_SPECIES_OR_EGG) != SPECIES_NONE + && GetMonData(&party[gBattleCommunication[0]], MON_DATA_SPECIES_OR_EGG) != SPECIES_EGG && !GetMonData(&party[gBattleCommunication[0]], MON_DATA_STATUS)) break; } @@ -9396,9 +9396,9 @@ static void Cmd_assistattackselect(void) { if (monId == gBattlerPartyIndexes[gBattlerAttacker]) continue; - if (GetMonData(&party[monId], MON_DATA_SPECIES2) == SPECIES_NONE) + if (GetMonData(&party[monId], MON_DATA_SPECIES_OR_EGG) == SPECIES_NONE) continue; - if (GetMonData(&party[monId], MON_DATA_SPECIES2) == SPECIES_EGG) + if (GetMonData(&party[monId], MON_DATA_SPECIES_OR_EGG) == SPECIES_EGG) continue; for (moveId = 0; moveId < MAX_MON_MOVES; moveId++) @@ -9564,7 +9564,7 @@ static void Cmd_pickup(void) { for (i = 0; i < PARTY_SIZE; i++) { - species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); + species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG); heldItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); if (GetMonData(&gPlayerParty[i], MON_DATA_ABILITY_NUM)) @@ -9587,7 +9587,7 @@ static void Cmd_pickup(void) { for (i = 0; i < PARTY_SIZE; i++) { - species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); + species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG); heldItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); if (GetMonData(&gPlayerParty[i], MON_DATA_ABILITY_NUM)) diff --git a/src/battle_setup.c b/src/battle_setup.c index 2ba9429d3238..cc1ad70fed3b 100644 --- a/src/battle_setup.c +++ b/src/battle_setup.c @@ -724,7 +724,7 @@ static u16 GetSumOfPlayerPartyLevel(u8 numMons) for (i = 0; i < PARTY_SIZE; i++) { - u32 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); + u32 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG); if (species != SPECIES_EGG && species != SPECIES_NONE && GetMonData(&gPlayerParty[i], MON_DATA_HP) != 0) { diff --git a/src/battle_tower.c b/src/battle_tower.c index 1e134b8fa10f..8838b5f2d274 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -3271,7 +3271,7 @@ s32 GetHighestLevelInPlayerParty(void) for (i = 0; i < PARTY_SIZE; i++) { if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES, NULL) - && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL) != SPECIES_EGG) + && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG, NULL) != SPECIES_EGG) { s32 level = GetMonData(&gPlayerParty[i], MON_DATA_LEVEL, NULL); if (level > highestLevel) diff --git a/src/battle_util.c b/src/battle_util.c index bbf34ab31631..4bc1a4156fbd 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -2278,8 +2278,8 @@ bool8 HasNoMonsToSwitch(u8 battler, u8 partyIdBattlerOn1, u8 partyIdBattlerOn2) for (i = playerId * MULTI_PARTY_SIZE; i < playerId * MULTI_PARTY_SIZE + MULTI_PARTY_SIZE; i++) { if (GetMonData(&party[i], MON_DATA_HP) != 0 - && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_NONE - && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_EGG) + && GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) != SPECIES_NONE + && GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) != SPECIES_EGG) break; } return (i == playerId * MULTI_PARTY_SIZE + MULTI_PARTY_SIZE); @@ -2318,8 +2318,8 @@ bool8 HasNoMonsToSwitch(u8 battler, u8 partyIdBattlerOn1, u8 partyIdBattlerOn2) for (i = playerId * MULTI_PARTY_SIZE; i < playerId * MULTI_PARTY_SIZE + MULTI_PARTY_SIZE; i++) { if (GetMonData(&party[i], MON_DATA_HP) != 0 - && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_NONE - && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_EGG) + && GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) != SPECIES_NONE + && GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) != SPECIES_EGG) break; } return (i == playerId * MULTI_PARTY_SIZE + MULTI_PARTY_SIZE); @@ -2336,8 +2336,8 @@ bool8 HasNoMonsToSwitch(u8 battler, u8 partyIdBattlerOn1, u8 partyIdBattlerOn2) for (i = playerId; i < playerId + MULTI_PARTY_SIZE; i++) { if (GetMonData(&party[i], MON_DATA_HP) != 0 - && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_NONE - && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_EGG) + && GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) != SPECIES_NONE + && GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) != SPECIES_EGG) break; } return (i == playerId + 3); @@ -2365,8 +2365,8 @@ bool8 HasNoMonsToSwitch(u8 battler, u8 partyIdBattlerOn1, u8 partyIdBattlerOn2) for (i = 0; i < PARTY_SIZE; i++) { if (GetMonData(&party[i], MON_DATA_HP) != 0 - && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_NONE - && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_EGG + && GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) != SPECIES_NONE + && GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) != SPECIES_EGG && i != partyIdBattlerOn1 && i != partyIdBattlerOn2 && i != *(gBattleStruct->monToSwitchIntoId + flankId) && i != playerId[gBattleStruct->monToSwitchIntoId]) break; diff --git a/src/braille_puzzles.c b/src/braille_puzzles.c index 6b5d66d315c4..348742849535 100644 --- a/src/braille_puzzles.c +++ b/src/braille_puzzles.c @@ -93,11 +93,11 @@ bool8 CheckRelicanthWailord(void) { // Emerald change: why did they flip it? // First comes Wailord - if (GetMonData(&gPlayerParty[0], MON_DATA_SPECIES2, 0) == SPECIES_WAILORD) + if (GetMonData(&gPlayerParty[0], MON_DATA_SPECIES_OR_EGG, 0) == SPECIES_WAILORD) { CalculatePlayerPartyCount(); // Last comes Relicanth - if (GetMonData(&gPlayerParty[gPlayerPartyCount - 1], MON_DATA_SPECIES2, 0) == SPECIES_RELICANTH) + if (GetMonData(&gPlayerParty[gPlayerPartyCount - 1], MON_DATA_SPECIES_OR_EGG, 0) == SPECIES_RELICANTH) return TRUE; } return FALSE; diff --git a/src/dodrio_berry_picking.c b/src/dodrio_berry_picking.c index e23c04c1adf6..8d47595c8b55 100644 --- a/src/dodrio_berry_picking.c +++ b/src/dodrio_berry_picking.c @@ -2906,7 +2906,7 @@ void IsDodrioInParty(void) for (i = 0; i < PARTY_SIZE; i++) { if (GetMonData(&gPlayerParty[i], MON_DATA_SANITY_HAS_SPECIES) - && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == SPECIES_DODRIO) + && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG) == SPECIES_DODRIO) { gSpecialVar_Result = TRUE; return; diff --git a/src/field_poison.c b/src/field_poison.c index fcb47acdb8b2..f254a6d142e4 100644 --- a/src/field_poison.c +++ b/src/field_poison.c @@ -19,7 +19,7 @@ static bool32 IsMonValidSpecies(struct Pokemon *pokemon) { - u16 species = GetMonData(pokemon, MON_DATA_SPECIES2); + u16 species = GetMonData(pokemon, MON_DATA_SPECIES_OR_EGG); if (species == SPECIES_NONE || species == SPECIES_EGG) return FALSE; diff --git a/src/field_specials.c b/src/field_specials.c index 6251a4db7efc..38746c97a48a 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -1442,7 +1442,7 @@ bool8 IsStarterInParty(void) u8 partyCount = CalculatePlayerPartyCount(); for (i = 0; i < partyCount; i++) { - if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL) == starter) + if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG, NULL) == starter) return TRUE; } return FALSE; @@ -1535,8 +1535,8 @@ u8 GetLeadMonIndex(void) u8 partyCount = CalculatePlayerPartyCount(); for (i = 0; i < partyCount; i++) { - if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL) != SPECIES_EGG - && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL) != SPECIES_NONE) + if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG, NULL) != SPECIES_EGG + && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG, NULL) != SPECIES_NONE) return i; } return 0; @@ -1544,7 +1544,7 @@ u8 GetLeadMonIndex(void) u16 ScriptGetPartyMonSpecies(void) { - return GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_SPECIES2, NULL); + return GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_SPECIES_OR_EGG, NULL); } // Removed for Emerald diff --git a/src/frontier_util.c b/src/frontier_util.c index 4830f92117cc..8cd385e65397 100644 --- a/src/frontier_util.c +++ b/src/frontier_util.c @@ -2044,7 +2044,7 @@ static void CheckPartyIneligibility(void) numEligibleMons = 0; do { - u16 species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES2); + u16 species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES_OR_EGG); u16 heldItem = GetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM); u8 level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL); u16 hp = GetMonData(&gPlayerParty[monId], MON_DATA_HP); diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c index 18aa19cce27d..f4a4c96d7119 100644 --- a/src/hall_of_fame.c +++ b/src/hall_of_fame.c @@ -445,7 +445,7 @@ static void Task_Hof_InitMonData(u8 taskId) u8 nick[POKEMON_NAME_LENGTH + 2]; if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES)) { - sHofMonPtr->mon[i].species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); + sHofMonPtr->mon[i].species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG); sHofMonPtr->mon[i].tid = GetMonData(&gPlayerParty[i], MON_DATA_OT_ID); sHofMonPtr->mon[i].personality = GetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY); sHofMonPtr->mon[i].lvl = GetMonData(&gPlayerParty[i], MON_DATA_LEVEL); diff --git a/src/menu_specialized.c b/src/menu_specialized.c index e9317a8ebc53..8f25c3188f52 100644 --- a/src/menu_specialized.c +++ b/src/menu_specialized.c @@ -1072,7 +1072,7 @@ void GetConditionMenuMonGfx(void *tilesDst, void *palDst, u16 boxId, u16 monId, if (partyId != numMons) { - u16 species = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SPECIES2, NULL); + u16 species = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SPECIES_OR_EGG, NULL); u32 trainerId = GetBoxOrPartyMonData(boxId, monId, MON_DATA_OT_ID, NULL); u32 personality = GetBoxOrPartyMonData(boxId, monId, MON_DATA_PERSONALITY, NULL); diff --git a/src/mystery_event_script.c b/src/mystery_event_script.c index d1b514a173a6..124ababa45eb 100644 --- a/src/mystery_event_script.c +++ b/src/mystery_event_script.c @@ -319,7 +319,7 @@ bool8 MEScrCmd_givepokemon(struct ScriptContext *ctx) void *mailPtr = (void *)(data + sizeof(struct Pokemon)); pokemon = *(struct Pokemon *)pokemonPtr; - species = GetMonData(&pokemon, MON_DATA_SPECIES2); + species = GetMonData(&pokemon, MON_DATA_SPECIES_OR_EGG); if (species == SPECIES_EGG) StringCopyN(gStringVar1, gText_EggNickname, POKEMON_NAME_LENGTH + 1); diff --git a/src/party_menu.c b/src/party_menu.c index 7fbefb5b52c5..dce0a38e1087 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -3593,7 +3593,7 @@ static void CursorCb_Store(u8 taskId) // Register mon for the Trading Board in Union Room static void CursorCb_Register(u8 taskId) { - u16 species2 = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES2); + u16 species2 = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES_OR_EGG); u16 species = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES); u8 isEventLegal = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_EVENT_LEGAL); @@ -3620,7 +3620,7 @@ static void CursorCb_Register(u8 taskId) static void CursorCb_Trade1(u8 taskId) { - u16 species2 = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES2); + u16 species2 = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES_OR_EGG); u16 species = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES); u8 isEventLegal = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_EVENT_LEGAL); u32 stringId = GetUnionRoomTradeMessageId(*(struct RfuGameCompatibilityData *)GetHostRfuGameData(), gRfuPartnerCompatibilityData, species2, gUnionRoomOfferedSpecies, gUnionRoomRequestedMonType, species, isEventLegal); @@ -3934,7 +3934,7 @@ static void CreatePartyMonIconSprite(struct Pokemon *mon, struct PartyMenuBox *m if (IsMultiBattle() == TRUE && gMain.inBattle) handleDeoxys = (sMultiBattlePartnersPartyMask[slot] ^ handleDeoxys) ? TRUE : FALSE; - species2 = GetMonData(mon, MON_DATA_SPECIES2); + species2 = GetMonData(mon, MON_DATA_SPECIES_OR_EGG); CreatePartyMonIconSpriteParameterized(species2, GetMonData(mon, MON_DATA_PERSONALITY), menuBox, 1, handleDeoxys); UpdatePartyMonHPBar(menuBox->monSpriteId, mon); } diff --git a/src/pokeblock_feed.c b/src/pokeblock_feed.c index 7117be885679..a334038d8d81 100644 --- a/src/pokeblock_feed.c +++ b/src/pokeblock_feed.c @@ -725,14 +725,14 @@ static bool8 LoadMonAndSceneGfx(struct Pokemon *mon) { case 0: // Load mon gfx - species = GetMonData(mon, MON_DATA_SPECIES2); + species = GetMonData(mon, MON_DATA_SPECIES_OR_EGG); personality = GetMonData(mon, MON_DATA_PERSONALITY); HandleLoadSpecialPokePic_2(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites.ptr[B_POSITION_OPPONENT_LEFT], species, personality); sPokeblockFeed->loadGfxState++; break; case 1: // Load mon palette - species = GetMonData(mon, MON_DATA_SPECIES2); + species = GetMonData(mon, MON_DATA_SPECIES_OR_EGG); personality = GetMonData(mon, MON_DATA_PERSONALITY); trainerId = GetMonData(mon, MON_DATA_OT_ID); palette = GetMonSpritePalStructFromOtIdPersonality(species, trainerId, personality); @@ -907,7 +907,7 @@ static void Task_FadeOutPokeblockFeed(u8 taskId) static u8 CreateMonSprite(struct Pokemon *mon) { - u16 species = GetMonData(mon, MON_DATA_SPECIES2); + u16 species = GetMonData(mon, MON_DATA_SPECIES_OR_EGG); u8 spriteId = CreateSprite(&gMultiuseSpriteTemplate, MON_X, MON_Y, 2); sPokeblockFeed->species = species; diff --git a/src/pokemon.c b/src/pokemon.c index e8d334a6ac1f..94ca688d79f3 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -3960,7 +3960,7 @@ u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data) case MON_DATA_EVENT_LEGAL: retVal = substruct3->eventLegal; break; - case MON_DATA_SPECIES2: + case MON_DATA_SPECIES_OR_EGG: retVal = substruct0->species; if (substruct0->species && (substruct3->isEgg || boxMon->isBadEgg)) retVal = SPECIES_EGG; @@ -4087,7 +4087,7 @@ void SetMonData(struct Pokemon *mon, s32 field, const void *dataArg) case MON_DATA_MAIL: SET8(mon->mail); break; - case MON_DATA_SPECIES2: + case MON_DATA_SPECIES_OR_EGG: break; default: SetBoxMonData(&mon->box, field, data); @@ -4464,9 +4464,9 @@ u8 GetMonsStateToDoubles(void) for (i = 0; i < gPlayerPartyCount; i++) { - if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL) != SPECIES_EGG + if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG, NULL) != SPECIES_EGG && GetMonData(&gPlayerParty[i], MON_DATA_HP, NULL) != 0 - && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL) != SPECIES_NONE) + && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG, NULL) != SPECIES_NONE) aliveCount++; } @@ -4480,7 +4480,7 @@ u8 GetMonsStateToDoubles_2(void) for (i = 0; i < PARTY_SIZE; i++) { - u32 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL); + u32 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG, NULL); if (species != SPECIES_EGG && species != SPECIES_NONE && GetMonData(&gPlayerParty[i], MON_DATA_HP, NULL) != 0) aliveCount++; @@ -5872,7 +5872,7 @@ void AdjustFriendship(struct Pokemon *mon, u8 event) if (ShouldSkipFriendshipChange()) return; - species = GetMonData(mon, MON_DATA_SPECIES2, 0); + species = GetMonData(mon, MON_DATA_SPECIES_OR_EGG, 0); heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, 0); if (heldItem == ITEM_ENIGMA_BERRY) @@ -6183,7 +6183,7 @@ bool8 TryIncrementMonLevel(struct Pokemon *mon) u32 CanMonLearnTMHM(struct Pokemon *mon, u8 tm) { - u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0); + u16 species = GetMonData(mon, MON_DATA_SPECIES_OR_EGG, 0); if (species == SPECIES_EGG) { return 0; @@ -6273,7 +6273,7 @@ u8 GetNumberOfRelearnableMoves(struct Pokemon *mon) u16 learnedMoves[MAX_MON_MOVES]; u16 moves[MAX_LEVEL_UP_MOVES]; u8 numMoves = 0; - u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0); + u16 species = GetMonData(mon, MON_DATA_SPECIES_OR_EGG, 0); u8 level = GetMonData(mon, MON_DATA_LEVEL, 0); int i, j, k; @@ -6442,7 +6442,7 @@ static void Task_PlayMapChosenOrBattleBGM(u8 taskId) const u32 *GetMonFrontSpritePal(struct Pokemon *mon) { - u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0); + u16 species = GetMonData(mon, MON_DATA_SPECIES_OR_EGG, 0); u32 otId = GetMonData(mon, MON_DATA_OT_ID, 0); u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, 0); return GetMonSpritePalFromSpeciesAndPersonality(species, otId, personality); @@ -6464,7 +6464,7 @@ const u32 *GetMonSpritePalFromSpeciesAndPersonality(u16 species, u32 otId, u32 p const struct CompressedSpritePalette *GetMonSpritePalStruct(struct Pokemon *mon) { - u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0); + u16 species = GetMonData(mon, MON_DATA_SPECIES_OR_EGG, 0); u32 otId = GetMonData(mon, MON_DATA_OT_ID, 0); u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, 0); return GetMonSpritePalStructFromOtIdPersonality(species, otId, personality); diff --git a/src/pokemon_jump.c b/src/pokemon_jump.c index 963552d7dfa5..3a985a6d5945 100755 --- a/src/pokemon_jump.c +++ b/src/pokemon_jump.c @@ -2354,7 +2354,7 @@ void IsPokemonJumpSpeciesInParty(void) { if (GetMonData(&gPlayerParty[i], MON_DATA_SANITY_HAS_SPECIES)) { - u16 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); + u16 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG); if (IsSpeciesAllowedInPokemonJump(species)) { gSpecialVar_Result = TRUE; diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index c9855f9d5d6f..80d0605a0a11 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -4430,7 +4430,7 @@ static u8 GetMonIconPriorityByCursorPos(void) static void CreateMovingMonIcon(void) { u32 personality = GetMonData(&sStorage->movingMon, MON_DATA_PERSONALITY); - u16 species = GetMonData(&sStorage->movingMon, MON_DATA_SPECIES2); + u16 species = GetMonData(&sStorage->movingMon, MON_DATA_SPECIES_OR_EGG); u8 priority = GetMonIconPriorityByCursorPos(); sStorage->movingMonSprite = CreateMonIconSprite(species, personality, 0, 0, priority, 7); @@ -4452,7 +4452,7 @@ static void InitBoxMonSprites(u8 boxId) { for (j = 0; j < IN_BOX_COLUMNS; j++) { - species = GetBoxMonDataAt(boxId, boxPosition, MON_DATA_SPECIES2); + species = GetBoxMonDataAt(boxId, boxPosition, MON_DATA_SPECIES_OR_EGG); if (species != SPECIES_NONE) { personality = GetBoxMonDataAt(boxId, boxPosition, MON_DATA_PERSONALITY); @@ -4480,7 +4480,7 @@ static void InitBoxMonSprites(u8 boxId) static void CreateBoxMonIconAtPos(u8 boxPosition) { - u16 species = GetCurrentBoxMonData(boxPosition, MON_DATA_SPECIES2); + u16 species = GetCurrentBoxMonData(boxPosition, MON_DATA_SPECIES_OR_EGG); if (species != SPECIES_NONE) { @@ -4714,7 +4714,7 @@ static void GetIncomingBoxMonData(u8 boxId) { for (j = 0; j < IN_BOX_COLUMNS; j++) { - sStorage->boxSpecies[boxPosition] = GetBoxMonDataAt(boxId, boxPosition, MON_DATA_SPECIES2); + sStorage->boxSpecies[boxPosition] = GetBoxMonDataAt(boxId, boxPosition, MON_DATA_SPECIES_OR_EGG); if (sStorage->boxSpecies[boxPosition] != SPECIES_NONE) sStorage->boxPersonalities[boxPosition] = GetBoxMonDataAt(boxId, boxPosition, MON_DATA_PERSONALITY); boxPosition++; @@ -4742,14 +4742,14 @@ static void SetBoxMonIconObjMode(u8 boxPosition, u8 objMode) static void CreatePartyMonsSprites(bool8 visible) { u16 i, count; - u16 species = GetMonData(&gPlayerParty[0], MON_DATA_SPECIES2); + u16 species = GetMonData(&gPlayerParty[0], MON_DATA_SPECIES_OR_EGG); u32 personality = GetMonData(&gPlayerParty[0], MON_DATA_PERSONALITY); sStorage->partySprites[0] = CreateMonIconSprite(species, personality, 104, 64, 1, 12); count = 1; for (i = 1; i < PARTY_SIZE; i++) { - species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); + species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG); if (species != SPECIES_NONE) { personality = GetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY); @@ -6867,7 +6867,7 @@ static void SetDisplayMonData(void *pokemon, u8 mode) { struct Pokemon *mon = (struct Pokemon *)pokemon; - sStorage->displayMonSpecies = GetMonData(mon, MON_DATA_SPECIES2); + sStorage->displayMonSpecies = GetMonData(mon, MON_DATA_SPECIES_OR_EGG); if (sStorage->displayMonSpecies != SPECIES_NONE) { sanityIsBadEgg = GetMonData(mon, MON_DATA_SANITY_IS_BAD_EGG); @@ -6890,7 +6890,7 @@ static void SetDisplayMonData(void *pokemon, u8 mode) { struct BoxPokemon *boxMon = (struct BoxPokemon *)pokemon; - sStorage->displayMonSpecies = GetBoxMonData(pokemon, MON_DATA_SPECIES2); + sStorage->displayMonSpecies = GetBoxMonData(pokemon, MON_DATA_SPECIES_OR_EGG); if (sStorage->displayMonSpecies != SPECIES_NONE) { u32 otId = GetBoxMonData(boxMon, MON_DATA_OT_ID); @@ -8438,7 +8438,7 @@ static void MultiMove_DeselectRow(u8 row, u8 minColumn, u8 maxColumn) static void MultiMove_SetIconToBg(u8 x, u8 y) { u8 position = x + (IN_BOX_COLUMNS * y); - u16 species = GetCurrentBoxMonData(position, MON_DATA_SPECIES2); + u16 species = GetCurrentBoxMonData(position, MON_DATA_SPECIES_OR_EGG); u32 personality = GetCurrentBoxMonData(position, MON_DATA_PERSONALITY); if (species != SPECIES_NONE) @@ -8463,7 +8463,7 @@ static void MultiMove_SetIconToBg(u8 x, u8 y) static void MultiMove_ClearIconFromBg(u8 x, u8 y) { u8 position = x + (IN_BOX_COLUMNS * y); - u16 species = GetCurrentBoxMonData(position, MON_DATA_SPECIES2); + u16 species = GetCurrentBoxMonData(position, MON_DATA_SPECIES_OR_EGG); if (species != SPECIES_NONE) { diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index 1f6ccd2737c1..7b306016cebe 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -1384,7 +1384,7 @@ static bool8 ExtractMonDataToSummaryStruct(struct Pokemon *mon) { case 0: sum->species = GetMonData(mon, MON_DATA_SPECIES); - sum->species2 = GetMonData(mon, MON_DATA_SPECIES2); + sum->species2 = GetMonData(mon, MON_DATA_SPECIES_OR_EGG); sum->exp = GetMonData(mon, MON_DATA_EXP); sum->level = GetMonData(mon, MON_DATA_LEVEL); sum->abilityNum = GetMonData(mon, MON_DATA_ABILITY_NUM); diff --git a/src/pokenav_conditions.c b/src/pokenav_conditions.c index e0645bac0b6d..05f86cab2f7e 100644 --- a/src/pokenav_conditions.c +++ b/src/pokenav_conditions.c @@ -531,7 +531,7 @@ static void ConditionGraphDrawMonPic(s16 listId, u8 loadId) boxId = monListPtr->monData[listId].boxId; monId = monListPtr->monData[listId].monId; - species = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SPECIES2, NULL); + species = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SPECIES_OR_EGG, NULL); tid = GetBoxOrPartyMonData(boxId, monId, MON_DATA_OT_ID, NULL); personality = GetBoxOrPartyMonData(boxId, monId, MON_DATA_PERSONALITY, NULL); LoadSpecialPokePic(&gMonFrontPicTable[species], menu->monPicGfx[loadId], species, personality, TRUE); diff --git a/src/roulette.c b/src/roulette.c index 283cceebfe57..06561f7988a7 100644 --- a/src/roulette.c +++ b/src/roulette.c @@ -1144,7 +1144,7 @@ static void InitRouletteTableData(void) for (i = 0; i < PARTY_SIZE; i++) { - switch (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2)) + switch (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG)) { case SPECIES_SHROOMISH: sRoulette->partySpeciesFlags |= HAS_SHROOMISH; diff --git a/src/script_pokemon_util.c b/src/script_pokemon_util.c index ae7aa92dc809..6e5653884b23 100755 --- a/src/script_pokemon_util.c +++ b/src/script_pokemon_util.c @@ -118,7 +118,7 @@ static bool8 CheckPartyMonHasHeldItem(u16 item) for(i = 0; i < PARTY_SIZE; i++) { - u16 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); + u16 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG); if (species != SPECIES_NONE && species != SPECIES_EGG && GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM) == item) return TRUE; } diff --git a/src/trade.c b/src/trade.c index f8817421f279..ab19f5fee665 100644 --- a/src/trade.c +++ b/src/trade.c @@ -564,7 +564,7 @@ static void CB2_CreateTradeMenu(void) for (i = 0; i < sTradeMenu->partyCounts[TRADE_PLAYER]; i++) { struct Pokemon *mon = &gPlayerParty[i]; - sTradeMenu->partySpriteIds[TRADE_PLAYER][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2), + sTradeMenu->partySpriteIds[TRADE_PLAYER][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES_OR_EGG), SpriteCB_MonIcon, (sTradeMonSpriteCoords[i][0] * 8) + 14, (sTradeMonSpriteCoords[i][1] * 8) - 12, @@ -576,7 +576,7 @@ static void CB2_CreateTradeMenu(void) for (i = 0; i < sTradeMenu->partyCounts[TRADE_PARTNER]; i++) { struct Pokemon *mon = &gEnemyParty[i]; - sTradeMenu->partySpriteIds[TRADE_PARTNER][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2, NULL), + sTradeMenu->partySpriteIds[TRADE_PARTNER][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES_OR_EGG, NULL), SpriteCB_MonIcon, (sTradeMonSpriteCoords[i + PARTY_SIZE][0] * 8) + 14, (sTradeMonSpriteCoords[i + PARTY_SIZE][1] * 8) - 12, @@ -755,7 +755,7 @@ static void CB2_ReturnToTradeMenu(void) for (i = 0; i < sTradeMenu->partyCounts[TRADE_PLAYER]; i++) { struct Pokemon *mon = &gPlayerParty[i]; - sTradeMenu->partySpriteIds[TRADE_PLAYER][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2, NULL), + sTradeMenu->partySpriteIds[TRADE_PLAYER][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES_OR_EGG, NULL), SpriteCB_MonIcon, (sTradeMonSpriteCoords[i][0] * 8) + 14, (sTradeMonSpriteCoords[i][1] * 8) - 12, @@ -767,7 +767,7 @@ static void CB2_ReturnToTradeMenu(void) for (i = 0; i < sTradeMenu->partyCounts[TRADE_PARTNER]; i++) { struct Pokemon *mon = &gEnemyParty[i]; - sTradeMenu->partySpriteIds[TRADE_PARTNER][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2, NULL), + sTradeMenu->partySpriteIds[TRADE_PARTNER][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES_OR_EGG, NULL), SpriteCB_MonIcon, (sTradeMonSpriteCoords[i + PARTY_SIZE][0] * 8) + 14, (sTradeMonSpriteCoords[i + PARTY_SIZE][1] * 8) - 12, @@ -2395,7 +2395,7 @@ static u32 CanTradeSelectedMon(struct Pokemon *playerParty, int partyCount, int for (i = 0; i < partyCount; i++) { - species2[i] = GetMonData(&playerParty[i], MON_DATA_SPECIES2); + species2[i] = GetMonData(&playerParty[i], MON_DATA_SPECIES_OR_EGG); species[i] = GetMonData(&playerParty[i], MON_DATA_SPECIES); } @@ -2593,7 +2593,7 @@ int CanSpinTradeMon(struct Pokemon *mon, u16 monIdx) // Make Eggs not count for numMonsLeft for (i = 0; i < gPlayerPartyCount; i++) { - speciesArray[i] = GetMonData(&mon[i], MON_DATA_SPECIES2); + speciesArray[i] = GetMonData(&mon[i], MON_DATA_SPECIES_OR_EGG); if (speciesArray[i] == SPECIES_EGG) speciesArray[i] = SPECIES_NONE; } @@ -2803,7 +2803,7 @@ static void LoadTradeMonPic(u8 whichParty, u8 state) switch (state) { case 0: - species = GetMonData(mon, MON_DATA_SPECIES2); + species = GetMonData(mon, MON_DATA_SPECIES_OR_EGG); personality = GetMonData(mon, MON_DATA_PERSONALITY); if (whichParty == TRADE_PLAYER) diff --git a/src/union_room.c b/src/union_room.c index 082b7dec54b1..9160fc16ae41 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -4176,7 +4176,7 @@ static s32 IsRequestedTradeInPlayerParty(u32 type, u32 species) { for (i = 0; i < gPlayerPartyCount; i++) { - species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); + species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG); if (species == SPECIES_EGG) return UR_TRADE_MATCH; } @@ -4186,7 +4186,7 @@ static s32 IsRequestedTradeInPlayerParty(u32 type, u32 species) { for (i = 0; i < gPlayerPartyCount; i++) { - species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); + species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG); if (gSpeciesInfo[species].types[0] == type || gSpeciesInfo[species].types[1] == type) return UR_TRADE_MATCH; } @@ -4319,7 +4319,7 @@ static bool32 HasAtLeastTwoMonsOfLevel30OrLower(void) for (i = 0; i < gPlayerPartyCount; i++) { if (GetMonData(&gPlayerParty[i], MON_DATA_LEVEL) <= UNION_ROOM_MAX_LEVEL - && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) != SPECIES_EGG) + && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG) != SPECIES_EGG) count++; } @@ -4348,7 +4348,7 @@ void Script_ResetUnionRoomTrade(void) static bool32 RegisterTradeMonAndGetIsEgg(u32 monId, struct UnionRoomTrade *trade) { - trade->playerSpecies = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES2); + trade->playerSpecies = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES_OR_EGG); trade->playerLevel = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL); trade->playerPersonality = GetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY); if (trade->playerSpecies == SPECIES_EGG) @@ -4359,7 +4359,7 @@ static bool32 RegisterTradeMonAndGetIsEgg(u32 monId, struct UnionRoomTrade *trad static void RegisterTradeMon(u32 monId, struct UnionRoomTrade *trade) { - trade->species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES2); + trade->species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES_OR_EGG); trade->level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL); trade->personality = GetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY); } @@ -4390,7 +4390,7 @@ static u32 GetPartyPositionOfRegisteredMon(struct UnionRoomTrade *trade, u8 mult cur_personality = GetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY); if (cur_personality != personality) continue; - cur_species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); + cur_species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG); if (cur_species != species) continue; response = i; From bbefee6bd403973ce3f957c9e5d6df692793e4b6 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Fri, 24 Feb 2023 15:22:58 -0300 Subject: [PATCH 099/428] Use proper symbol styles for Hakamo-O and Kommo-O --- include/graphics.h | 20 +++++++++---------- sound/cry_tables.inc | 8 ++++---- sound/direct_sound_data.inc | 4 ++-- src/data/graphics/pokemon.h | 20 +++++++++---------- src/data/pokemon/level_up_learnset_pointers.h | 4 ++-- src/data/pokemon/level_up_learnsets.h | 4 ++-- src/data/pokemon/pokedex_entries.h | 4 ++-- src/data/pokemon/pokedex_text.h | 4 ++-- .../pokemon/teachable_learnset_pointers.h | 4 ++-- src/data/pokemon/teachable_learnsets.h | 4 ++-- src/data/pokemon_graphics/back_pic_table.h | 4 ++-- src/data/pokemon_graphics/front_pic_table.h | 4 ++-- src/data/pokemon_graphics/palette_table.h | 4 ++-- .../pokemon_graphics/shiny_palette_table.h | 4 ++-- src/pokemon_icon.c | 4 ++-- 15 files changed, 48 insertions(+), 48 deletions(-) diff --git a/include/graphics.h b/include/graphics.h index 55174442c56d..49ce74b2ec2c 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -868,8 +868,8 @@ extern const u32 gMonFrontPic_Bruxish[]; extern const u32 gMonFrontPic_Drampa[]; extern const u32 gMonFrontPic_Dhelmise[]; extern const u32 gMonFrontPic_Jangmoo[]; -extern const u32 gMonFrontPic_Hakamoo[]; -extern const u32 gMonFrontPic_Kommoo[]; +extern const u32 gMonFrontPic_HakamoO[]; +extern const u32 gMonFrontPic_KommoO[]; extern const u32 gMonFrontPic_TapuKoko[]; extern const u32 gMonFrontPic_TapuLele[]; extern const u32 gMonFrontPic_TapuBulu[]; @@ -2082,8 +2082,8 @@ extern const u32 gMonBackPic_Bruxish[]; extern const u32 gMonBackPic_Drampa[]; extern const u32 gMonBackPic_Dhelmise[]; extern const u32 gMonBackPic_Jangmoo[]; -extern const u32 gMonBackPic_Hakamoo[]; -extern const u32 gMonBackPic_Kommoo[]; +extern const u32 gMonBackPic_HakamoO[]; +extern const u32 gMonBackPic_KommoO[]; extern const u32 gMonBackPic_TapuKoko[]; extern const u32 gMonBackPic_TapuLele[]; extern const u32 gMonBackPic_TapuBulu[]; @@ -3288,8 +3288,8 @@ extern const u32 gMonPalette_Bruxish[]; extern const u32 gMonPalette_Drampa[]; extern const u32 gMonPalette_Dhelmise[]; extern const u32 gMonPalette_Jangmoo[]; -extern const u32 gMonPalette_Hakamoo[]; -extern const u32 gMonPalette_Kommoo[]; +extern const u32 gMonPalette_HakamoO[]; +extern const u32 gMonPalette_KommoO[]; extern const u32 gMonPalette_TapuKoko[]; extern const u32 gMonPalette_TapuLele[]; extern const u32 gMonPalette_TapuBulu[]; @@ -4521,8 +4521,8 @@ extern const u32 gMonShinyPalette_Bruxish[]; extern const u32 gMonShinyPalette_Drampa[]; extern const u32 gMonShinyPalette_Dhelmise[]; extern const u32 gMonShinyPalette_Jangmoo[]; -extern const u32 gMonShinyPalette_Hakamoo[]; -extern const u32 gMonShinyPalette_Kommoo[]; +extern const u32 gMonShinyPalette_HakamoO[]; +extern const u32 gMonShinyPalette_KommoO[]; extern const u32 gMonShinyPalette_TapuKoko[]; extern const u32 gMonShinyPalette_TapuLele[]; extern const u32 gMonShinyPalette_TapuBulu[]; @@ -5748,8 +5748,8 @@ extern const u8 gMonIcon_Bruxish[]; extern const u8 gMonIcon_Drampa[]; extern const u8 gMonIcon_Dhelmise[]; extern const u8 gMonIcon_Jangmoo[]; -extern const u8 gMonIcon_Hakamoo[]; -extern const u8 gMonIcon_Kommoo[]; +extern const u8 gMonIcon_HakamoO[]; +extern const u8 gMonIcon_KommoO[]; extern const u8 gMonIcon_TapuKoko[]; extern const u8 gMonIcon_TapuLele[]; extern const u8 gMonIcon_TapuBulu[]; diff --git a/sound/cry_tables.inc b/sound/cry_tables.inc index 7714cd00ec71..7b594750614a 100644 --- a/sound/cry_tables.inc +++ b/sound/cry_tables.inc @@ -1127,8 +1127,8 @@ gCryTable:: cry Cry_Drampa cry Cry_Dhelmise cry Cry_Jangmoo - cry Cry_Hakamoo - cry Cry_Kommoo + cry Cry_HakamoO + cry Cry_KommoO cry Cry_TapuKoko cry Cry_TapuLele cry Cry_TapuBulu @@ -3249,8 +3249,8 @@ gCryTable_Reverse:: cry_reverse Cry_Drampa cry_reverse Cry_Dhelmise cry_reverse Cry_Jangmoo - cry_reverse Cry_Hakamoo - cry_reverse Cry_Kommoo + cry_reverse Cry_HakamoO + cry_reverse Cry_KommoO cry_reverse Cry_TapuKoko cry_reverse Cry_TapuLele cry_reverse Cry_TapuBulu diff --git a/sound/direct_sound_data.inc b/sound/direct_sound_data.inc index fb4c6b44f6aa..74f5529d761e 100644 --- a/sound/direct_sound_data.inc +++ b/sound/direct_sound_data.inc @@ -3522,11 +3522,11 @@ Cry_Jangmoo:: .incbin "sound/direct_sound_samples/cries/jangmo_o.bin" .align 2 -Cry_Hakamoo:: +Cry_HakamoO:: .incbin "sound/direct_sound_samples/cries/hakamo_o.bin" .align 2 -Cry_Kommoo:: +Cry_KommoO:: .incbin "sound/direct_sound_samples/cries/kommo_o.bin" .align 2 diff --git a/src/data/graphics/pokemon.h b/src/data/graphics/pokemon.h index 385460228b96..a39f6f35ea82 100644 --- a/src/data/graphics/pokemon.h +++ b/src/data/graphics/pokemon.h @@ -801,8 +801,8 @@ const u32 gMonFrontPic_Bruxish[] = INCBIN_U32("graphics/pokemon/bruxish/front.4b const u32 gMonFrontPic_Drampa[] = INCBIN_U32("graphics/pokemon/drampa/front.4bpp.lz"); const u32 gMonFrontPic_Dhelmise[] = INCBIN_U32("graphics/pokemon/dhelmise/front.4bpp.lz"); const u32 gMonFrontPic_Jangmoo[] = INCBIN_U32("graphics/pokemon/jangmo_o/front.4bpp.lz"); -const u32 gMonFrontPic_Hakamoo[] = INCBIN_U32("graphics/pokemon/hakamo_o/front.4bpp.lz"); -const u32 gMonFrontPic_Kommoo[] = INCBIN_U32("graphics/pokemon/kommo_o/front.4bpp.lz"); +const u32 gMonFrontPic_HakamoO[] = INCBIN_U32("graphics/pokemon/hakamo_o/front.4bpp.lz"); +const u32 gMonFrontPic_KommoO[] = INCBIN_U32("graphics/pokemon/kommo_o/front.4bpp.lz"); const u32 gMonFrontPic_TapuKoko[] = INCBIN_U32("graphics/pokemon/tapu_koko/anim_front.4bpp.lz"); const u32 gMonFrontPic_TapuLele[] = INCBIN_U32("graphics/pokemon/tapu_lele/anim_front.4bpp.lz"); const u32 gMonFrontPic_TapuBulu[] = INCBIN_U32("graphics/pokemon/tapu_bulu/anim_front.4bpp.lz"); @@ -2013,8 +2013,8 @@ const u32 gMonBackPic_Bruxish[] = INCBIN_U32("graphics/pokemon/bruxish/back.4bpp const u32 gMonBackPic_Drampa[] = INCBIN_U32("graphics/pokemon/drampa/back.4bpp.lz"); const u32 gMonBackPic_Dhelmise[] = INCBIN_U32("graphics/pokemon/dhelmise/back.4bpp.lz"); const u32 gMonBackPic_Jangmoo[] = INCBIN_U32("graphics/pokemon/jangmo_o/back.4bpp.lz"); -const u32 gMonBackPic_Hakamoo[] = INCBIN_U32("graphics/pokemon/hakamo_o/back.4bpp.lz"); -const u32 gMonBackPic_Kommoo[] = INCBIN_U32("graphics/pokemon/kommo_o/back.4bpp.lz"); +const u32 gMonBackPic_HakamoO[] = INCBIN_U32("graphics/pokemon/hakamo_o/back.4bpp.lz"); +const u32 gMonBackPic_KommoO[] = INCBIN_U32("graphics/pokemon/kommo_o/back.4bpp.lz"); const u32 gMonBackPic_TapuKoko[] = INCBIN_U32("graphics/pokemon/tapu_koko/back.4bpp.lz"); const u32 gMonBackPic_TapuLele[] = INCBIN_U32("graphics/pokemon/tapu_lele/back.4bpp.lz"); const u32 gMonBackPic_TapuBulu[] = INCBIN_U32("graphics/pokemon/tapu_bulu/back.4bpp.lz"); @@ -3219,8 +3219,8 @@ const u32 gMonPalette_Bruxish[] = INCBIN_U32("graphics/pokemon/bruxish/normal.gb const u32 gMonPalette_Drampa[] = INCBIN_U32("graphics/pokemon/drampa/normal.gbapal.lz"); const u32 gMonPalette_Dhelmise[] = INCBIN_U32("graphics/pokemon/dhelmise/normal.gbapal.lz"); const u32 gMonPalette_Jangmoo[] = INCBIN_U32("graphics/pokemon/jangmo_o/normal.gbapal.lz"); -const u32 gMonPalette_Hakamoo[] = INCBIN_U32("graphics/pokemon/hakamo_o/normal.gbapal.lz"); -const u32 gMonPalette_Kommoo[] = INCBIN_U32("graphics/pokemon/kommo_o/normal.gbapal.lz"); +const u32 gMonPalette_HakamoO[] = INCBIN_U32("graphics/pokemon/hakamo_o/normal.gbapal.lz"); +const u32 gMonPalette_KommoO[] = INCBIN_U32("graphics/pokemon/kommo_o/normal.gbapal.lz"); const u32 gMonPalette_TapuKoko[] = INCBIN_U32("graphics/pokemon/tapu_koko/normal.gbapal.lz"); const u32 gMonPalette_TapuLele[] = INCBIN_U32("graphics/pokemon/tapu_lele/normal.gbapal.lz"); const u32 gMonPalette_TapuBulu[] = INCBIN_U32("graphics/pokemon/tapu_bulu/normal.gbapal.lz"); @@ -4452,8 +4452,8 @@ const u32 gMonShinyPalette_Bruxish[] = INCBIN_U32("graphics/pokemon/bruxish/shin const u32 gMonShinyPalette_Drampa[] = INCBIN_U32("graphics/pokemon/drampa/shiny.gbapal.lz"); const u32 gMonShinyPalette_Dhelmise[] = INCBIN_U32("graphics/pokemon/dhelmise/shiny.gbapal.lz"); const u32 gMonShinyPalette_Jangmoo[] = INCBIN_U32("graphics/pokemon/jangmo_o/shiny.gbapal.lz"); -const u32 gMonShinyPalette_Hakamoo[] = INCBIN_U32("graphics/pokemon/hakamo_o/shiny.gbapal.lz"); -const u32 gMonShinyPalette_Kommoo[] = INCBIN_U32("graphics/pokemon/kommo_o/shiny.gbapal.lz"); +const u32 gMonShinyPalette_HakamoO[] = INCBIN_U32("graphics/pokemon/hakamo_o/shiny.gbapal.lz"); +const u32 gMonShinyPalette_KommoO[] = INCBIN_U32("graphics/pokemon/kommo_o/shiny.gbapal.lz"); const u32 gMonShinyPalette_TapuKoko[] = INCBIN_U32("graphics/pokemon/tapu_koko/shiny.gbapal.lz"); const u32 gMonShinyPalette_TapuLele[] = INCBIN_U32("graphics/pokemon/tapu_lele/shiny.gbapal.lz"); const u32 gMonShinyPalette_TapuBulu[] = INCBIN_U32("graphics/pokemon/tapu_bulu/shiny.gbapal.lz"); @@ -5679,8 +5679,8 @@ const u8 gMonIcon_Bruxish[] = INCBIN_U8("graphics/pokemon/bruxish/icon.4bpp"); const u8 gMonIcon_Drampa[] = INCBIN_U8("graphics/pokemon/drampa/icon.4bpp"); const u8 gMonIcon_Dhelmise[] = INCBIN_U8("graphics/pokemon/dhelmise/icon.4bpp"); const u8 gMonIcon_Jangmoo[] = INCBIN_U8("graphics/pokemon/jangmo_o/icon.4bpp"); -const u8 gMonIcon_Hakamoo[] = INCBIN_U8("graphics/pokemon/hakamo_o/icon.4bpp"); -const u8 gMonIcon_Kommoo[] = INCBIN_U8("graphics/pokemon/kommo_o/icon.4bpp"); +const u8 gMonIcon_HakamoO[] = INCBIN_U8("graphics/pokemon/hakamo_o/icon.4bpp"); +const u8 gMonIcon_KommoO[] = INCBIN_U8("graphics/pokemon/kommo_o/icon.4bpp"); const u8 gMonIcon_TapuKoko[] = INCBIN_U8("graphics/pokemon/tapu_koko/icon.4bpp"); const u8 gMonIcon_TapuLele[] = INCBIN_U8("graphics/pokemon/tapu_lele/icon.4bpp"); const u8 gMonIcon_TapuBulu[] = INCBIN_U8("graphics/pokemon/tapu_bulu/icon.4bpp"); diff --git a/src/data/pokemon/level_up_learnset_pointers.h b/src/data/pokemon/level_up_learnset_pointers.h index 0ecfa59ccf68..d27399d3264e 100644 --- a/src/data/pokemon/level_up_learnset_pointers.h +++ b/src/data/pokemon/level_up_learnset_pointers.h @@ -790,8 +790,8 @@ const struct LevelUpMove *const gLevelUpLearnsets[NUM_SPECIES] = [SPECIES_DRAMPA] = sDrampaLevelUpLearnset, [SPECIES_DHELMISE] = sDhelmiseLevelUpLearnset, [SPECIES_JANGMO_O] = sJangmooLevelUpLearnset, - [SPECIES_HAKAMO_O] = sHakamooLevelUpLearnset, - [SPECIES_KOMMO_O] = sKommooLevelUpLearnset, + [SPECIES_HAKAMO_O] = sHakamoOLevelUpLearnset, + [SPECIES_KOMMO_O] = sKommoOLevelUpLearnset, [SPECIES_TAPU_KOKO] = sTapuKokoLevelUpLearnset, [SPECIES_TAPU_LELE] = sTapuLeleLevelUpLearnset, [SPECIES_TAPU_BULU] = sTapuBuluLevelUpLearnset, diff --git a/src/data/pokemon/level_up_learnsets.h b/src/data/pokemon/level_up_learnsets.h index f4ad3b566992..bb6d97be907e 100644 --- a/src/data/pokemon/level_up_learnsets.h +++ b/src/data/pokemon/level_up_learnsets.h @@ -15978,7 +15978,7 @@ static const struct LevelUpMove sJangmooLevelUpLearnset[] = { LEVEL_UP_END }; -static const struct LevelUpMove sHakamooLevelUpLearnset[] = { +static const struct LevelUpMove sHakamoOLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_SKY_UPPERCUT), LEVEL_UP_MOVE( 1, MOVE_SKY_UPPERCUT), LEVEL_UP_MOVE( 1, MOVE_AUTOTOMIZE), @@ -16003,7 +16003,7 @@ static const struct LevelUpMove sHakamooLevelUpLearnset[] = { LEVEL_UP_END }; -static const struct LevelUpMove sKommooLevelUpLearnset[] = { +static const struct LevelUpMove sKommoOLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_CLANGING_SCALES), LEVEL_UP_MOVE( 1, MOVE_CLANGING_SCALES), LEVEL_UP_MOVE( 1, MOVE_SKY_UPPERCUT), diff --git a/src/data/pokemon/pokedex_entries.h b/src/data/pokemon/pokedex_entries.h index 49253826005f..7952f44a3c3d 100644 --- a/src/data/pokemon/pokedex_entries.h +++ b/src/data/pokemon/pokedex_entries.h @@ -9408,7 +9408,7 @@ const struct PokedexEntry gPokedexEntries[] = .categoryName = _("Scaly"), .height = 12, .weight = 470, - .description = gHakamooPokedexText, + .description = gHakamoOPokedexText, .pokemonScale = 356, .pokemonOffset = 17, .trainerScale = 256, @@ -9420,7 +9420,7 @@ const struct PokedexEntry gPokedexEntries[] = .categoryName = _("Scaly"), .height = 16, .weight = 782, - .description = gKommooPokedexText, + .description = gKommoOPokedexText, .pokemonScale = 356, .pokemonOffset = 17, .trainerScale = 256, diff --git a/src/data/pokemon/pokedex_text.h b/src/data/pokemon/pokedex_text.h index 6048d2121576..a28bd184e3c2 100644 --- a/src/data/pokemon/pokedex_text.h +++ b/src/data/pokemon/pokedex_text.h @@ -4703,13 +4703,13 @@ const u8 gJangmooPokedexText[] = _( "tall mountains where Jangmo-o live. They\n" "grow little by little battling one another."); -const u8 gHakamooPokedexText[] = _( +const u8 gHakamoOPokedexText[] = _( "It sheds and regrows its scales on a\n" "continuous basis. The scales become\n" "harder each time they're regrown. Its\n" "scaly punches tear its foes to shreds."); -const u8 gKommooPokedexText[] = _( +const u8 gKommoOPokedexText[] = _( "Its rigid scales function as offense and\n" "defense. In the past, its scales were\n" "processed and used to make weapons\n" diff --git a/src/data/pokemon/teachable_learnset_pointers.h b/src/data/pokemon/teachable_learnset_pointers.h index 28998aae1a99..c8adc8668d3b 100644 --- a/src/data/pokemon/teachable_learnset_pointers.h +++ b/src/data/pokemon/teachable_learnset_pointers.h @@ -790,8 +790,8 @@ const u16 *const gTeachableLearnsets[NUM_SPECIES] = [SPECIES_DRAMPA] = sDrampaTeachableLearnset, [SPECIES_DHELMISE] = sDhelmiseTeachableLearnset, [SPECIES_JANGMO_O] = sJangmooTeachableLearnset, - [SPECIES_HAKAMO_O] = sHakamooTeachableLearnset, - [SPECIES_KOMMO_O] = sKommooTeachableLearnset, + [SPECIES_HAKAMO_O] = sHakamoOTeachableLearnset, + [SPECIES_KOMMO_O] = sKommoOTeachableLearnset, [SPECIES_TAPU_KOKO] = sTapuKokoTeachableLearnset, [SPECIES_TAPU_LELE] = sTapuLeleTeachableLearnset, [SPECIES_TAPU_BULU] = sTapuBuluTeachableLearnset, diff --git a/src/data/pokemon/teachable_learnsets.h b/src/data/pokemon/teachable_learnsets.h index 19b22d9b3d4b..2130b18a2ff1 100644 --- a/src/data/pokemon/teachable_learnsets.h +++ b/src/data/pokemon/teachable_learnsets.h @@ -29445,7 +29445,7 @@ static const u16 sJangmooTeachableLearnset[] = { MOVE_UNAVAILABLE, }; -static const u16 sHakamooTeachableLearnset[] = { +static const u16 sHakamoOTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_BRICK_BREAK, @@ -29475,7 +29475,7 @@ static const u16 sHakamooTeachableLearnset[] = { MOVE_UNAVAILABLE, }; -static const u16 sKommooTeachableLearnset[] = { +static const u16 sKommoOTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_BRICK_BREAK, diff --git a/src/data/pokemon_graphics/back_pic_table.h b/src/data/pokemon_graphics/back_pic_table.h index ebe0c316f84a..c018d89878c1 100644 --- a/src/data/pokemon_graphics/back_pic_table.h +++ b/src/data/pokemon_graphics/back_pic_table.h @@ -790,8 +790,8 @@ const struct CompressedSpriteSheet gMonBackPicTable[] = SPECIES_SPRITE(DRAMPA, gMonBackPic_Drampa), SPECIES_SPRITE(DHELMISE, gMonBackPic_Dhelmise), SPECIES_SPRITE(JANGMO_O, gMonBackPic_Jangmoo), - SPECIES_SPRITE(HAKAMO_O, gMonBackPic_Hakamoo), - SPECIES_SPRITE(KOMMO_O, gMonBackPic_Kommoo), + SPECIES_SPRITE(HAKAMO_O, gMonBackPic_HakamoO), + SPECIES_SPRITE(KOMMO_O, gMonBackPic_KommoO), SPECIES_SPRITE(TAPU_KOKO, gMonBackPic_TapuKoko), SPECIES_SPRITE(TAPU_LELE, gMonBackPic_TapuLele), SPECIES_SPRITE(TAPU_BULU, gMonBackPic_TapuBulu), diff --git a/src/data/pokemon_graphics/front_pic_table.h b/src/data/pokemon_graphics/front_pic_table.h index 24ebc78f3811..e346dd4a2fd9 100644 --- a/src/data/pokemon_graphics/front_pic_table.h +++ b/src/data/pokemon_graphics/front_pic_table.h @@ -790,8 +790,8 @@ const struct CompressedSpriteSheet gMonFrontPicTable[] = SPECIES_SPRITE(DRAMPA, gMonFrontPic_Drampa), SPECIES_SPRITE(DHELMISE, gMonFrontPic_Dhelmise), SPECIES_SPRITE(JANGMO_O, gMonFrontPic_Jangmoo), - SPECIES_SPRITE(HAKAMO_O, gMonFrontPic_Hakamoo), - SPECIES_SPRITE(KOMMO_O, gMonFrontPic_Kommoo), + SPECIES_SPRITE(HAKAMO_O, gMonFrontPic_HakamoO), + SPECIES_SPRITE(KOMMO_O, gMonFrontPic_KommoO), SPECIES_SPRITE(TAPU_KOKO, gMonFrontPic_TapuKoko), SPECIES_SPRITE(TAPU_LELE, gMonFrontPic_TapuLele), SPECIES_SPRITE(TAPU_BULU, gMonFrontPic_TapuBulu), diff --git a/src/data/pokemon_graphics/palette_table.h b/src/data/pokemon_graphics/palette_table.h index a8c986d7957b..49551333c07f 100644 --- a/src/data/pokemon_graphics/palette_table.h +++ b/src/data/pokemon_graphics/palette_table.h @@ -790,8 +790,8 @@ const struct CompressedSpritePalette gMonPaletteTable[] = SPECIES_PAL(DRAMPA, gMonPalette_Drampa), SPECIES_PAL(DHELMISE, gMonPalette_Dhelmise), SPECIES_PAL(JANGMO_O, gMonPalette_Jangmoo), - SPECIES_PAL(HAKAMO_O, gMonPalette_Hakamoo), - SPECIES_PAL(KOMMO_O, gMonPalette_Kommoo), + SPECIES_PAL(HAKAMO_O, gMonPalette_HakamoO), + SPECIES_PAL(KOMMO_O, gMonPalette_KommoO), SPECIES_PAL(TAPU_KOKO, gMonPalette_TapuKoko), SPECIES_PAL(TAPU_LELE, gMonPalette_TapuLele), SPECIES_PAL(TAPU_BULU, gMonPalette_TapuBulu), diff --git a/src/data/pokemon_graphics/shiny_palette_table.h b/src/data/pokemon_graphics/shiny_palette_table.h index 012a95cf1fb4..0a327b37e559 100644 --- a/src/data/pokemon_graphics/shiny_palette_table.h +++ b/src/data/pokemon_graphics/shiny_palette_table.h @@ -790,8 +790,8 @@ const struct CompressedSpritePalette gMonShinyPaletteTable[] = SPECIES_SHINY_PAL(DRAMPA, gMonShinyPalette_Drampa), SPECIES_SHINY_PAL(DHELMISE, gMonShinyPalette_Dhelmise), SPECIES_SHINY_PAL(JANGMO_O, gMonShinyPalette_Jangmoo), - SPECIES_SHINY_PAL(HAKAMO_O, gMonShinyPalette_Hakamoo), - SPECIES_SHINY_PAL(KOMMO_O, gMonShinyPalette_Kommoo), + SPECIES_SHINY_PAL(HAKAMO_O, gMonShinyPalette_HakamoO), + SPECIES_SHINY_PAL(KOMMO_O, gMonShinyPalette_KommoO), SPECIES_SHINY_PAL(TAPU_KOKO, gMonShinyPalette_TapuKoko), SPECIES_SHINY_PAL(TAPU_LELE, gMonShinyPalette_TapuLele), SPECIES_SHINY_PAL(TAPU_BULU, gMonShinyPalette_TapuBulu), diff --git a/src/pokemon_icon.c b/src/pokemon_icon.c index 0758ea37d3f4..85a69fa93401 100644 --- a/src/pokemon_icon.c +++ b/src/pokemon_icon.c @@ -816,8 +816,8 @@ const u8 *const gMonIconTable[] = [SPECIES_DRAMPA] = gMonIcon_Drampa, [SPECIES_DHELMISE] = gMonIcon_Dhelmise, [SPECIES_JANGMO_O] = gMonIcon_Jangmoo, - [SPECIES_HAKAMO_O] = gMonIcon_Hakamoo, - [SPECIES_KOMMO_O] = gMonIcon_Kommoo, + [SPECIES_HAKAMO_O] = gMonIcon_HakamoO, + [SPECIES_KOMMO_O] = gMonIcon_KommoO, [SPECIES_TAPU_KOKO] = gMonIcon_TapuKoko, [SPECIES_TAPU_LELE] = gMonIcon_TapuLele, [SPECIES_TAPU_BULU] = gMonIcon_TapuBulu, From 1e1686b69a7dfbac4480bdd62867d6c0ccc81548 Mon Sep 17 00:00:00 2001 From: Alex Date: Fri, 24 Feb 2023 23:38:23 +0100 Subject: [PATCH 100/428] Fixes #2414 --- src/battle_ai_main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index a626ef49a1f7..2d4d075282b0 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -2632,7 +2632,7 @@ static s16 AI_TryToFaint(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) if (CanIndexMoveFaintTarget(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex, 0) && gBattleMoves[move].effect != EFFECT_EXPLOSION) { // this move can faint the target - if (!WillAIStrikeFirst() || GetMovePriority(battlerAtk, move) > 0) + if (WillAIStrikeFirst() || GetMovePriority(battlerAtk, move) > 0) score += 4; // we go first or we're using priority move else score += 2; From ca81d7a0f921e52419f2309b6b452b53a62e31bd Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Fri, 24 Feb 2023 21:58:09 -0300 Subject: [PATCH 101/428] Forgot about Jangmo-o --- include/graphics.h | 10 +++++----- sound/cry_tables.inc | 4 ++-- sound/direct_sound_data.inc | 2 +- src/data/graphics/pokemon.h | 10 +++++----- src/data/pokemon/level_up_learnset_pointers.h | 2 +- src/data/pokemon/level_up_learnsets.h | 2 +- src/data/pokemon/pokedex_entries.h | 2 +- src/data/pokemon/pokedex_text.h | 2 +- src/data/pokemon/teachable_learnset_pointers.h | 2 +- src/data/pokemon/teachable_learnsets.h | 2 +- src/data/pokemon_graphics/back_pic_table.h | 2 +- src/data/pokemon_graphics/front_pic_table.h | 2 +- src/data/pokemon_graphics/palette_table.h | 2 +- src/data/pokemon_graphics/shiny_palette_table.h | 2 +- src/pokemon_icon.c | 2 +- 15 files changed, 24 insertions(+), 24 deletions(-) diff --git a/include/graphics.h b/include/graphics.h index 49ce74b2ec2c..443dc4ade5e6 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -867,7 +867,7 @@ extern const u32 gMonFrontPic_Mimikyu[]; extern const u32 gMonFrontPic_Bruxish[]; extern const u32 gMonFrontPic_Drampa[]; extern const u32 gMonFrontPic_Dhelmise[]; -extern const u32 gMonFrontPic_Jangmoo[]; +extern const u32 gMonFrontPic_JangmoO[]; extern const u32 gMonFrontPic_HakamoO[]; extern const u32 gMonFrontPic_KommoO[]; extern const u32 gMonFrontPic_TapuKoko[]; @@ -2081,7 +2081,7 @@ extern const u32 gMonBackPic_Mimikyu[]; extern const u32 gMonBackPic_Bruxish[]; extern const u32 gMonBackPic_Drampa[]; extern const u32 gMonBackPic_Dhelmise[]; -extern const u32 gMonBackPic_Jangmoo[]; +extern const u32 gMonBackPic_JangmoO[]; extern const u32 gMonBackPic_HakamoO[]; extern const u32 gMonBackPic_KommoO[]; extern const u32 gMonBackPic_TapuKoko[]; @@ -3287,7 +3287,7 @@ extern const u32 gMonPalette_Mimikyu[]; extern const u32 gMonPalette_Bruxish[]; extern const u32 gMonPalette_Drampa[]; extern const u32 gMonPalette_Dhelmise[]; -extern const u32 gMonPalette_Jangmoo[]; +extern const u32 gMonPalette_JangmoO[]; extern const u32 gMonPalette_HakamoO[]; extern const u32 gMonPalette_KommoO[]; extern const u32 gMonPalette_TapuKoko[]; @@ -4520,7 +4520,7 @@ extern const u32 gMonShinyPalette_Mimikyu[]; extern const u32 gMonShinyPalette_Bruxish[]; extern const u32 gMonShinyPalette_Drampa[]; extern const u32 gMonShinyPalette_Dhelmise[]; -extern const u32 gMonShinyPalette_Jangmoo[]; +extern const u32 gMonShinyPalette_JangmoO[]; extern const u32 gMonShinyPalette_HakamoO[]; extern const u32 gMonShinyPalette_KommoO[]; extern const u32 gMonShinyPalette_TapuKoko[]; @@ -5747,7 +5747,7 @@ extern const u8 gMonIcon_Mimikyu[]; extern const u8 gMonIcon_Bruxish[]; extern const u8 gMonIcon_Drampa[]; extern const u8 gMonIcon_Dhelmise[]; -extern const u8 gMonIcon_Jangmoo[]; +extern const u8 gMonIcon_JangmoO[]; extern const u8 gMonIcon_HakamoO[]; extern const u8 gMonIcon_KommoO[]; extern const u8 gMonIcon_TapuKoko[]; diff --git a/sound/cry_tables.inc b/sound/cry_tables.inc index 7b594750614a..c9da7e679f72 100644 --- a/sound/cry_tables.inc +++ b/sound/cry_tables.inc @@ -1126,7 +1126,7 @@ gCryTable:: cry Cry_Bruxish cry Cry_Drampa cry Cry_Dhelmise - cry Cry_Jangmoo + cry Cry_JangmoO cry Cry_HakamoO cry Cry_KommoO cry Cry_TapuKoko @@ -3248,7 +3248,7 @@ gCryTable_Reverse:: cry_reverse Cry_Bruxish cry_reverse Cry_Drampa cry_reverse Cry_Dhelmise - cry_reverse Cry_Jangmoo + cry_reverse Cry_JangmoO cry_reverse Cry_HakamoO cry_reverse Cry_KommoO cry_reverse Cry_TapuKoko diff --git a/sound/direct_sound_data.inc b/sound/direct_sound_data.inc index 74f5529d761e..611808d2366a 100644 --- a/sound/direct_sound_data.inc +++ b/sound/direct_sound_data.inc @@ -3518,7 +3518,7 @@ Cry_Dhelmise:: .incbin "sound/direct_sound_samples/cries/dhelmise.bin" .align 2 -Cry_Jangmoo:: +Cry_JangmoO:: .incbin "sound/direct_sound_samples/cries/jangmo_o.bin" .align 2 diff --git a/src/data/graphics/pokemon.h b/src/data/graphics/pokemon.h index a39f6f35ea82..314d081ea879 100644 --- a/src/data/graphics/pokemon.h +++ b/src/data/graphics/pokemon.h @@ -800,7 +800,7 @@ const u32 gMonFrontPic_Mimikyu[] = INCBIN_U32("graphics/pokemon/mimikyu/front.4b const u32 gMonFrontPic_Bruxish[] = INCBIN_U32("graphics/pokemon/bruxish/front.4bpp.lz"); const u32 gMonFrontPic_Drampa[] = INCBIN_U32("graphics/pokemon/drampa/front.4bpp.lz"); const u32 gMonFrontPic_Dhelmise[] = INCBIN_U32("graphics/pokemon/dhelmise/front.4bpp.lz"); -const u32 gMonFrontPic_Jangmoo[] = INCBIN_U32("graphics/pokemon/jangmo_o/front.4bpp.lz"); +const u32 gMonFrontPic_JangmoO[] = INCBIN_U32("graphics/pokemon/jangmo_o/front.4bpp.lz"); const u32 gMonFrontPic_HakamoO[] = INCBIN_U32("graphics/pokemon/hakamo_o/front.4bpp.lz"); const u32 gMonFrontPic_KommoO[] = INCBIN_U32("graphics/pokemon/kommo_o/front.4bpp.lz"); const u32 gMonFrontPic_TapuKoko[] = INCBIN_U32("graphics/pokemon/tapu_koko/anim_front.4bpp.lz"); @@ -2012,7 +2012,7 @@ const u32 gMonBackPic_Mimikyu[] = INCBIN_U32("graphics/pokemon/mimikyu/back.4bpp const u32 gMonBackPic_Bruxish[] = INCBIN_U32("graphics/pokemon/bruxish/back.4bpp.lz"); const u32 gMonBackPic_Drampa[] = INCBIN_U32("graphics/pokemon/drampa/back.4bpp.lz"); const u32 gMonBackPic_Dhelmise[] = INCBIN_U32("graphics/pokemon/dhelmise/back.4bpp.lz"); -const u32 gMonBackPic_Jangmoo[] = INCBIN_U32("graphics/pokemon/jangmo_o/back.4bpp.lz"); +const u32 gMonBackPic_JangmoO[] = INCBIN_U32("graphics/pokemon/jangmo_o/back.4bpp.lz"); const u32 gMonBackPic_HakamoO[] = INCBIN_U32("graphics/pokemon/hakamo_o/back.4bpp.lz"); const u32 gMonBackPic_KommoO[] = INCBIN_U32("graphics/pokemon/kommo_o/back.4bpp.lz"); const u32 gMonBackPic_TapuKoko[] = INCBIN_U32("graphics/pokemon/tapu_koko/back.4bpp.lz"); @@ -3218,7 +3218,7 @@ const u32 gMonPalette_Mimikyu[] = INCBIN_U32("graphics/pokemon/mimikyu/normal.gb const u32 gMonPalette_Bruxish[] = INCBIN_U32("graphics/pokemon/bruxish/normal.gbapal.lz"); const u32 gMonPalette_Drampa[] = INCBIN_U32("graphics/pokemon/drampa/normal.gbapal.lz"); const u32 gMonPalette_Dhelmise[] = INCBIN_U32("graphics/pokemon/dhelmise/normal.gbapal.lz"); -const u32 gMonPalette_Jangmoo[] = INCBIN_U32("graphics/pokemon/jangmo_o/normal.gbapal.lz"); +const u32 gMonPalette_JangmoO[] = INCBIN_U32("graphics/pokemon/jangmo_o/normal.gbapal.lz"); const u32 gMonPalette_HakamoO[] = INCBIN_U32("graphics/pokemon/hakamo_o/normal.gbapal.lz"); const u32 gMonPalette_KommoO[] = INCBIN_U32("graphics/pokemon/kommo_o/normal.gbapal.lz"); const u32 gMonPalette_TapuKoko[] = INCBIN_U32("graphics/pokemon/tapu_koko/normal.gbapal.lz"); @@ -4451,7 +4451,7 @@ const u32 gMonShinyPalette_Mimikyu[] = INCBIN_U32("graphics/pokemon/mimikyu/shin const u32 gMonShinyPalette_Bruxish[] = INCBIN_U32("graphics/pokemon/bruxish/shiny.gbapal.lz"); const u32 gMonShinyPalette_Drampa[] = INCBIN_U32("graphics/pokemon/drampa/shiny.gbapal.lz"); const u32 gMonShinyPalette_Dhelmise[] = INCBIN_U32("graphics/pokemon/dhelmise/shiny.gbapal.lz"); -const u32 gMonShinyPalette_Jangmoo[] = INCBIN_U32("graphics/pokemon/jangmo_o/shiny.gbapal.lz"); +const u32 gMonShinyPalette_JangmoO[] = INCBIN_U32("graphics/pokemon/jangmo_o/shiny.gbapal.lz"); const u32 gMonShinyPalette_HakamoO[] = INCBIN_U32("graphics/pokemon/hakamo_o/shiny.gbapal.lz"); const u32 gMonShinyPalette_KommoO[] = INCBIN_U32("graphics/pokemon/kommo_o/shiny.gbapal.lz"); const u32 gMonShinyPalette_TapuKoko[] = INCBIN_U32("graphics/pokemon/tapu_koko/shiny.gbapal.lz"); @@ -5678,7 +5678,7 @@ const u8 gMonIcon_Mimikyu[] = INCBIN_U8("graphics/pokemon/mimikyu/icon.4bpp"); const u8 gMonIcon_Bruxish[] = INCBIN_U8("graphics/pokemon/bruxish/icon.4bpp"); const u8 gMonIcon_Drampa[] = INCBIN_U8("graphics/pokemon/drampa/icon.4bpp"); const u8 gMonIcon_Dhelmise[] = INCBIN_U8("graphics/pokemon/dhelmise/icon.4bpp"); -const u8 gMonIcon_Jangmoo[] = INCBIN_U8("graphics/pokemon/jangmo_o/icon.4bpp"); +const u8 gMonIcon_JangmoO[] = INCBIN_U8("graphics/pokemon/jangmo_o/icon.4bpp"); const u8 gMonIcon_HakamoO[] = INCBIN_U8("graphics/pokemon/hakamo_o/icon.4bpp"); const u8 gMonIcon_KommoO[] = INCBIN_U8("graphics/pokemon/kommo_o/icon.4bpp"); const u8 gMonIcon_TapuKoko[] = INCBIN_U8("graphics/pokemon/tapu_koko/icon.4bpp"); diff --git a/src/data/pokemon/level_up_learnset_pointers.h b/src/data/pokemon/level_up_learnset_pointers.h index d27399d3264e..9fa91ee23261 100644 --- a/src/data/pokemon/level_up_learnset_pointers.h +++ b/src/data/pokemon/level_up_learnset_pointers.h @@ -789,7 +789,7 @@ const struct LevelUpMove *const gLevelUpLearnsets[NUM_SPECIES] = [SPECIES_BRUXISH] = sBruxishLevelUpLearnset, [SPECIES_DRAMPA] = sDrampaLevelUpLearnset, [SPECIES_DHELMISE] = sDhelmiseLevelUpLearnset, - [SPECIES_JANGMO_O] = sJangmooLevelUpLearnset, + [SPECIES_JANGMO_O] = sJangmoOLevelUpLearnset, [SPECIES_HAKAMO_O] = sHakamoOLevelUpLearnset, [SPECIES_KOMMO_O] = sKommoOLevelUpLearnset, [SPECIES_TAPU_KOKO] = sTapuKokoLevelUpLearnset, diff --git a/src/data/pokemon/level_up_learnsets.h b/src/data/pokemon/level_up_learnsets.h index bb6d97be907e..17af6b888869 100644 --- a/src/data/pokemon/level_up_learnsets.h +++ b/src/data/pokemon/level_up_learnsets.h @@ -15960,7 +15960,7 @@ static const struct LevelUpMove sDhelmiseLevelUpLearnset[] = { LEVEL_UP_END }; -static const struct LevelUpMove sJangmooLevelUpLearnset[] = { +static const struct LevelUpMove sJangmoOLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 5, MOVE_LEER), LEVEL_UP_MOVE( 9, MOVE_BIDE), diff --git a/src/data/pokemon/pokedex_entries.h b/src/data/pokemon/pokedex_entries.h index 7952f44a3c3d..83b58c1d160d 100644 --- a/src/data/pokemon/pokedex_entries.h +++ b/src/data/pokemon/pokedex_entries.h @@ -9396,7 +9396,7 @@ const struct PokedexEntry gPokedexEntries[] = .categoryName = _("Scaly"), .height = 6, .weight = 297, - .description = gJangmooPokedexText, + .description = gJangmoOPokedexText, .pokemonScale = 356, .pokemonOffset = 17, .trainerScale = 256, diff --git a/src/data/pokemon/pokedex_text.h b/src/data/pokemon/pokedex_text.h index a28bd184e3c2..5e28a204bea5 100644 --- a/src/data/pokemon/pokedex_text.h +++ b/src/data/pokemon/pokedex_text.h @@ -4697,7 +4697,7 @@ const u8 gDhelmisePokedexText[] = _( "It maintains itself with new infusions of\n" "seabed detritus and seaweed."); -const u8 gJangmooPokedexText[] = _( +const u8 gJangmoOPokedexText[] = _( "It expresses its feelings by smacking its\n" "scales. Metallic sounds echo through the\n" "tall mountains where Jangmo-o live. They\n" diff --git a/src/data/pokemon/teachable_learnset_pointers.h b/src/data/pokemon/teachable_learnset_pointers.h index c8adc8668d3b..31a39d516ece 100644 --- a/src/data/pokemon/teachable_learnset_pointers.h +++ b/src/data/pokemon/teachable_learnset_pointers.h @@ -789,7 +789,7 @@ const u16 *const gTeachableLearnsets[NUM_SPECIES] = [SPECIES_BRUXISH] = sBruxishTeachableLearnset, [SPECIES_DRAMPA] = sDrampaTeachableLearnset, [SPECIES_DHELMISE] = sDhelmiseTeachableLearnset, - [SPECIES_JANGMO_O] = sJangmooTeachableLearnset, + [SPECIES_JANGMO_O] = sJangmoOTeachableLearnset, [SPECIES_HAKAMO_O] = sHakamoOTeachableLearnset, [SPECIES_KOMMO_O] = sKommoOTeachableLearnset, [SPECIES_TAPU_KOKO] = sTapuKokoTeachableLearnset, diff --git a/src/data/pokemon/teachable_learnsets.h b/src/data/pokemon/teachable_learnsets.h index 2130b18a2ff1..6365af3b9723 100644 --- a/src/data/pokemon/teachable_learnsets.h +++ b/src/data/pokemon/teachable_learnsets.h @@ -29414,7 +29414,7 @@ static const u16 sDhelmiseTeachableLearnset[] = { MOVE_UNAVAILABLE, }; -static const u16 sJangmooTeachableLearnset[] = { +static const u16 sJangmoOTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_BRICK_BREAK, diff --git a/src/data/pokemon_graphics/back_pic_table.h b/src/data/pokemon_graphics/back_pic_table.h index c018d89878c1..29eaeceede37 100644 --- a/src/data/pokemon_graphics/back_pic_table.h +++ b/src/data/pokemon_graphics/back_pic_table.h @@ -789,7 +789,7 @@ const struct CompressedSpriteSheet gMonBackPicTable[] = SPECIES_SPRITE(BRUXISH, gMonBackPic_Bruxish), SPECIES_SPRITE(DRAMPA, gMonBackPic_Drampa), SPECIES_SPRITE(DHELMISE, gMonBackPic_Dhelmise), - SPECIES_SPRITE(JANGMO_O, gMonBackPic_Jangmoo), + SPECIES_SPRITE(JANGMO_O, gMonBackPic_JangmoO), SPECIES_SPRITE(HAKAMO_O, gMonBackPic_HakamoO), SPECIES_SPRITE(KOMMO_O, gMonBackPic_KommoO), SPECIES_SPRITE(TAPU_KOKO, gMonBackPic_TapuKoko), diff --git a/src/data/pokemon_graphics/front_pic_table.h b/src/data/pokemon_graphics/front_pic_table.h index e346dd4a2fd9..4530963af410 100644 --- a/src/data/pokemon_graphics/front_pic_table.h +++ b/src/data/pokemon_graphics/front_pic_table.h @@ -789,7 +789,7 @@ const struct CompressedSpriteSheet gMonFrontPicTable[] = SPECIES_SPRITE(BRUXISH, gMonFrontPic_Bruxish), SPECIES_SPRITE(DRAMPA, gMonFrontPic_Drampa), SPECIES_SPRITE(DHELMISE, gMonFrontPic_Dhelmise), - SPECIES_SPRITE(JANGMO_O, gMonFrontPic_Jangmoo), + SPECIES_SPRITE(JANGMO_O, gMonFrontPic_JangmoO), SPECIES_SPRITE(HAKAMO_O, gMonFrontPic_HakamoO), SPECIES_SPRITE(KOMMO_O, gMonFrontPic_KommoO), SPECIES_SPRITE(TAPU_KOKO, gMonFrontPic_TapuKoko), diff --git a/src/data/pokemon_graphics/palette_table.h b/src/data/pokemon_graphics/palette_table.h index 49551333c07f..7311dfd0b3a7 100644 --- a/src/data/pokemon_graphics/palette_table.h +++ b/src/data/pokemon_graphics/palette_table.h @@ -789,7 +789,7 @@ const struct CompressedSpritePalette gMonPaletteTable[] = SPECIES_PAL(BRUXISH, gMonPalette_Bruxish), SPECIES_PAL(DRAMPA, gMonPalette_Drampa), SPECIES_PAL(DHELMISE, gMonPalette_Dhelmise), - SPECIES_PAL(JANGMO_O, gMonPalette_Jangmoo), + SPECIES_PAL(JANGMO_O, gMonPalette_JangmoO), SPECIES_PAL(HAKAMO_O, gMonPalette_HakamoO), SPECIES_PAL(KOMMO_O, gMonPalette_KommoO), SPECIES_PAL(TAPU_KOKO, gMonPalette_TapuKoko), diff --git a/src/data/pokemon_graphics/shiny_palette_table.h b/src/data/pokemon_graphics/shiny_palette_table.h index 0a327b37e559..81bc45d4d9a9 100644 --- a/src/data/pokemon_graphics/shiny_palette_table.h +++ b/src/data/pokemon_graphics/shiny_palette_table.h @@ -789,7 +789,7 @@ const struct CompressedSpritePalette gMonShinyPaletteTable[] = SPECIES_SHINY_PAL(BRUXISH, gMonShinyPalette_Bruxish), SPECIES_SHINY_PAL(DRAMPA, gMonShinyPalette_Drampa), SPECIES_SHINY_PAL(DHELMISE, gMonShinyPalette_Dhelmise), - SPECIES_SHINY_PAL(JANGMO_O, gMonShinyPalette_Jangmoo), + SPECIES_SHINY_PAL(JANGMO_O, gMonShinyPalette_JangmoO), SPECIES_SHINY_PAL(HAKAMO_O, gMonShinyPalette_HakamoO), SPECIES_SHINY_PAL(KOMMO_O, gMonShinyPalette_KommoO), SPECIES_SHINY_PAL(TAPU_KOKO, gMonShinyPalette_TapuKoko), diff --git a/src/pokemon_icon.c b/src/pokemon_icon.c index 85a69fa93401..5e2e8a6562e7 100644 --- a/src/pokemon_icon.c +++ b/src/pokemon_icon.c @@ -815,7 +815,7 @@ const u8 *const gMonIconTable[] = [SPECIES_BRUXISH] = gMonIcon_Bruxish, [SPECIES_DRAMPA] = gMonIcon_Drampa, [SPECIES_DHELMISE] = gMonIcon_Dhelmise, - [SPECIES_JANGMO_O] = gMonIcon_Jangmoo, + [SPECIES_JANGMO_O] = gMonIcon_JangmoO, [SPECIES_HAKAMO_O] = gMonIcon_HakamoO, [SPECIES_KOMMO_O] = gMonIcon_KommoO, [SPECIES_TAPU_KOKO] = gMonIcon_TapuKoko, From fc5c93fd83efaf64129a32f52646d7922177e0a8 Mon Sep 17 00:00:00 2001 From: Alex Date: Sat, 25 Feb 2023 12:15:40 +0100 Subject: [PATCH 102/428] exclude status move type check --- src/battle_ai_util.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 4641ba2cdd77..8cb3d4660212 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -802,7 +802,16 @@ s32 AI_CalcDamage(u16 move, u8 battlerAtk, u8 battlerDef, u8 *typeEffectiveness, } else { - effectivenessMultiplier = CalcTypeEffectivenessMultiplier(move, moveType, battlerAtk, battlerDef, FALSE); + #if B_GLARE_GHOST == GEN_3 + else if (move == MOVE_GLARE || move == MOVE_THUNDER_WAVE) + effectivenessMultiplier = CalcTypeEffectivenessMultiplier(move, moveType, battlerAtk, battlerDef, FALSE); + else +# endif + if (move == MOVE_THUNDER_WAVE) + effectivenessMultiplier = CalcTypeEffectivenessMultiplier(move, moveType, battlerAtk, battlerDef, FALSE); + else + effectivenessMultiplier = UQ_4_12(1.0); + dmg = 0; } From df47312e329b9f9576036b4c7604f40e1c70d33a Mon Sep 17 00:00:00 2001 From: Alex Date: Sat, 25 Feb 2023 12:38:57 +0100 Subject: [PATCH 103/428] Fix move to battle_util.c --- src/battle_ai_util.c | 11 +---------- src/battle_util.c | 18 +++++++++++------- 2 files changed, 12 insertions(+), 17 deletions(-) diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 8cb3d4660212..4641ba2cdd77 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -802,16 +802,7 @@ s32 AI_CalcDamage(u16 move, u8 battlerAtk, u8 battlerDef, u8 *typeEffectiveness, } else { - #if B_GLARE_GHOST == GEN_3 - else if (move == MOVE_GLARE || move == MOVE_THUNDER_WAVE) - effectivenessMultiplier = CalcTypeEffectivenessMultiplier(move, moveType, battlerAtk, battlerDef, FALSE); - else -# endif - if (move == MOVE_THUNDER_WAVE) - effectivenessMultiplier = CalcTypeEffectivenessMultiplier(move, moveType, battlerAtk, battlerDef, FALSE); - else - effectivenessMultiplier = UQ_4_12(1.0); - + effectivenessMultiplier = CalcTypeEffectivenessMultiplier(move, moveType, battlerAtk, battlerDef, FALSE); dmg = 0; } diff --git a/src/battle_util.c b/src/battle_util.c index ccc7445b5260..0a00372c0dbe 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -9851,7 +9851,17 @@ static u16 CalcTypeEffectivenessMultiplierInternal(u16 move, u8 moveType, u8 bat && gBattleMons[battlerDef].type3 != gBattleMons[battlerDef].type1) MulByTypeEffectiveness(&modifier, move, moveType, battlerDef, gBattleMons[battlerDef].type3, battlerAtk, recordAbilities); - if (moveType == TYPE_GROUND && !IsBattlerGrounded2(battlerDef, TRUE) && !(gBattleMoves[move].flags & FLAG_DMG_UNGROUNDED_IGNORE_TYPE_IF_FLYING)) + if (gBattleMoves[move].split == SPLIT_STATUS && move != MOVE_THUNDER_WAVE) + { + modifier = UQ_4_12(1.0); + #if B_GLARE_GHOST <= GEN_3 + if (move == MOVE_GLARE && IS_BATTLER_OF_TYPE(battlerDef, TYPE_GHOST)) + { + modifier = UQ_4_12(0.0); + } + #endif + } + else if (moveType == TYPE_GROUND && !IsBattlerGrounded2(battlerDef, TRUE) && !(gBattleMoves[move].flags & FLAG_DMG_UNGROUNDED_IGNORE_TYPE_IF_FLYING)) { modifier = UQ_4_12(0.0); if (recordAbilities && defAbility == ABILITY_LEVITATE) @@ -9869,12 +9879,6 @@ static u16 CalcTypeEffectivenessMultiplierInternal(u16 move, u8 moveType, u8 bat modifier = UQ_4_12(0.0); } #endif -#if B_GLARE_GHOST >= GEN_4 - else if (move == MOVE_GLARE && IS_BATTLER_OF_TYPE(battlerDef, TYPE_GHOST)) - { - modifier = UQ_4_12(1.0); - } -#endif // Thousand Arrows ignores type modifiers for flying mons if (!IsBattlerGrounded(battlerDef) && (gBattleMoves[move].flags & FLAG_DMG_UNGROUNDED_IGNORE_TYPE_IF_FLYING) From 31ab56bceb00c12a54f02c520b057911de7c94ae Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sat, 25 Feb 2023 09:23:34 -0300 Subject: [PATCH 104/428] Fixed footprint symbol names. --- include/graphics.h | 6 +++--- src/data/graphics/pokemon.h | 6 +++--- src/data/pokemon_graphics/footprint_table.h | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/include/graphics.h b/include/graphics.h index 443dc4ade5e6..f00c72788437 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -6960,9 +6960,9 @@ extern const u8 gMonFootprint_Mimikyu[]; extern const u8 gMonFootprint_Bruxish[]; extern const u8 gMonFootprint_Drampa[]; extern const u8 gMonFootprint_Dhelmise[]; -extern const u8 gMonFootprint_Jangmo_o[]; -extern const u8 gMonFootprint_Hakamo_o[]; -extern const u8 gMonFootprint_Kommo_o[]; +extern const u8 gMonFootprint_JangmoO[]; +extern const u8 gMonFootprint_HakamoO[]; +extern const u8 gMonFootprint_KommoO[]; extern const u8 gMonFootprint_Tapu_Koko[]; extern const u8 gMonFootprint_Tapu_Lele[]; extern const u8 gMonFootprint_Tapu_Bulu[]; diff --git a/src/data/graphics/pokemon.h b/src/data/graphics/pokemon.h index 314d081ea879..1d670441692e 100644 --- a/src/data/graphics/pokemon.h +++ b/src/data/graphics/pokemon.h @@ -6891,9 +6891,9 @@ const u8 gMonFootprint_Mimikyu[] = INCBIN_U8("graphics/pokemon/mimikyu/footprint const u8 gMonFootprint_Bruxish[] = INCBIN_U8("graphics/pokemon/bruxish/footprint.1bpp"); const u8 gMonFootprint_Drampa[] = INCBIN_U8("graphics/pokemon/drampa/footprint.1bpp"); const u8 gMonFootprint_Dhelmise[] = INCBIN_U8("graphics/pokemon/dhelmise/footprint.1bpp"); -const u8 gMonFootprint_Jangmo_o[] = INCBIN_U8("graphics/pokemon/jangmo_o/footprint.1bpp"); -const u8 gMonFootprint_Hakamo_o[] = INCBIN_U8("graphics/pokemon/hakamo_o/footprint.1bpp"); -const u8 gMonFootprint_Kommo_o[] = INCBIN_U8("graphics/pokemon/kommo_o/footprint.1bpp"); +const u8 gMonFootprint_JangmoO[] = INCBIN_U8("graphics/pokemon/jangmo_o/footprint.1bpp"); +const u8 gMonFootprint_HakamoO[] = INCBIN_U8("graphics/pokemon/hakamo_o/footprint.1bpp"); +const u8 gMonFootprint_KommoO[] = INCBIN_U8("graphics/pokemon/kommo_o/footprint.1bpp"); const u8 gMonFootprint_Tapu_Koko[] = INCBIN_U8("graphics/pokemon/tapu_koko/footprint.1bpp"); const u8 gMonFootprint_Tapu_Lele[] = INCBIN_U8("graphics/pokemon/tapu_lele/footprint.1bpp"); const u8 gMonFootprint_Tapu_Bulu[] = INCBIN_U8("graphics/pokemon/tapu_bulu/footprint.1bpp"); diff --git a/src/data/pokemon_graphics/footprint_table.h b/src/data/pokemon_graphics/footprint_table.h index 2b0dd0a4f605..8e21b0604eaf 100644 --- a/src/data/pokemon_graphics/footprint_table.h +++ b/src/data/pokemon_graphics/footprint_table.h @@ -789,9 +789,9 @@ const u8 *const gMonFootprintTable[] = [SPECIES_BRUXISH] = gMonFootprint_Bruxish, [SPECIES_DRAMPA] = gMonFootprint_Drampa, [SPECIES_DHELMISE] = gMonFootprint_Dhelmise, - [SPECIES_JANGMO_O] = gMonFootprint_Jangmo_o, - [SPECIES_HAKAMO_O] = gMonFootprint_Hakamo_o, - [SPECIES_KOMMO_O] = gMonFootprint_Kommo_o, + [SPECIES_JANGMO_O] = gMonFootprint_JangmoO, + [SPECIES_HAKAMO_O] = gMonFootprint_HakamoO, + [SPECIES_KOMMO_O] = gMonFootprint_KommoO, [SPECIES_TAPU_KOKO] = gMonFootprint_Tapu_Koko, [SPECIES_TAPU_LELE] = gMonFootprint_Tapu_Lele, [SPECIES_TAPU_BULU] = gMonFootprint_Tapu_Bulu, From 7ea82820ec66bfb91a4171a51c1a94fc8721964e Mon Sep 17 00:00:00 2001 From: Alex Date: Sat, 25 Feb 2023 15:07:45 +0100 Subject: [PATCH 105/428] Consider nature power in AI_CalcDamage --- src/battle_ai_util.c | 4 ++++ src/data/battle_moves.h | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 4641ba2cdd77..a48c051acbe0 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -744,6 +744,10 @@ s32 AI_CalcDamage(u16 move, u8 battlerAtk, u8 battlerDef, u8 *typeEffectiveness, SetBattlerData(battlerDef); gBattleStruct->dynamicMoveType = 0; + + if (move == MOVE_NATURE_POWER) + move = GetNaturePowerMove(); + SetTypeBeforeUsingMove(move, battlerAtk); GET_MOVE_TYPE(move, moveType); diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index 82883fb8c9cc..50e10d414d8b 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -4847,7 +4847,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_NATURE_POWER] = { .effect = EFFECT_NATURE_POWER, - .power = 0, + .power = 1, .type = TYPE_NORMAL, .accuracy = 0, .pp = 20, From f249b58c01862fdf55a95dbb866a14d3c9b28388 Mon Sep 17 00:00:00 2001 From: Alex Date: Sat, 25 Feb 2023 15:24:31 +0100 Subject: [PATCH 106/428] fix style --- src/battle_ai_util.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index a48c051acbe0..22e88aac4c8e 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -746,7 +746,7 @@ s32 AI_CalcDamage(u16 move, u8 battlerAtk, u8 battlerDef, u8 *typeEffectiveness, gBattleStruct->dynamicMoveType = 0; if (move == MOVE_NATURE_POWER) - move = GetNaturePowerMove(); + move = GetNaturePowerMove(); SetTypeBeforeUsingMove(move, battlerAtk); GET_MOVE_TYPE(move, moveType); From d00c8902f9bc1a6a2dc16fc9005b04818ebcfe60 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sat, 25 Feb 2023 16:48:16 -0300 Subject: [PATCH 107/428] Whitelist instead of Blacklist for TOOLDIRS in Makefiles --- Makefile | 3 ++- make_tools.mk | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 88303e7f3945..50a7e0d255f8 100644 --- a/Makefile +++ b/Makefile @@ -134,7 +134,8 @@ JSONPROC := tools/jsonproc/jsonproc$(EXE) PERL := perl -TOOLDIRS := $(filter-out tools/agbcc tools/binutils,$(wildcard tools/*)) +# Inclusive list. If you don't want a tool to be built, don't add it here. +TOOLDIRS := tools/aif2pcm tools/bin2c tools/gbafix tools/gbagfx tools/jsonproc tools/mapjson tools/mid2agb tools/preproc tools/ramscrgen tools/rsfont tools/scaninc TOOLBASE = $(TOOLDIRS:tools/%=%) TOOLS = $(foreach tool,$(TOOLBASE),tools/$(tool)/$(tool)$(EXE)) diff --git a/make_tools.mk b/make_tools.mk index 697897a693a6..7e0baf89006e 100644 --- a/make_tools.mk +++ b/make_tools.mk @@ -1,7 +1,8 @@ MAKEFLAGS += --no-print-directory -TOOLDIRS := $(filter-out tools/agbcc tools/binutils,$(wildcard tools/*)) +# Inclusive list. If you don't want a tool to be built, don't add it here. +TOOLDIRS := tools/aif2pcm tools/bin2c tools/gbafix tools/gbagfx tools/jsonproc tools/mapjson tools/mid2agb tools/preproc tools/ramscrgen tools/rsfont tools/scaninc .PHONY: all $(TOOLDIRS) From f376b71f7c9c256858f350abf0a079d4b79afbda Mon Sep 17 00:00:00 2001 From: Zunawe Date: Sat, 25 Feb 2023 13:48:39 -0800 Subject: [PATCH 108/428] Fix wrong route in item flag name --- data/maps/Route110/map.json | 2 +- include/constants/flags.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/data/maps/Route110/map.json b/data/maps/Route110/map.json index 630b20bd3750..2b521641133a 100644 --- a/data/maps/Route110/map.json +++ b/data/maps/Route110/map.json @@ -288,7 +288,7 @@ "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", "script": "Route110_EventScript_ItemRareCandy", - "flag": "FLAG_ITEM_ROUTE_109_RARE_CANDY" + "flag": "FLAG_ITEM_ROUTE_110_RARE_CANDY" }, { "graphics_id": "OBJ_EVENT_GFX_CYCLING_TRIATHLETE_M", diff --git a/include/constants/flags.h b/include/constants/flags.h index 4bef779385ee..99a8377a7565 100644 --- a/include/constants/flags.h +++ b/include/constants/flags.h @@ -1051,7 +1051,7 @@ #define FLAG_ITEM_ROUTE_105_IRON 0x3EB #define FLAG_ITEM_ROUTE_106_PROTEIN 0x3EC #define FLAG_ITEM_ROUTE_109_PP_UP 0x3ED -#define FLAG_ITEM_ROUTE_109_RARE_CANDY 0x3EE +#define FLAG_ITEM_ROUTE_110_RARE_CANDY 0x3EE #define FLAG_ITEM_ROUTE_110_DIRE_HIT 0x3EF #define FLAG_ITEM_ROUTE_111_TM37 0x3F0 #define FLAG_ITEM_ROUTE_111_STARDUST 0x3F1 From 4bdca43dbd93b82ada5adede995be9197e8390dd Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 26 Feb 2023 12:51:35 +0100 Subject: [PATCH 109/428] refactor mega evolution indicator sprite --- data/battle_anim_scripts.s | 3 + data/battle_scripts_1.s | 13 +- include/battle_interface.h | 4 +- src/battle_anim.c | 43 ++-- src/battle_anim_sound_tasks.c | 5 + src/battle_gfx_sfx_util.c | 1 + src/battle_interface.c | 382 ++++++++++++++++------------------ src/battle_main.c | 11 +- src/battle_script_commands.c | 153 +++++++------- src/battle_util.c | 2 +- 10 files changed, 292 insertions(+), 325 deletions(-) diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index 75a831a33132..8a674fee7d6c 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -24860,6 +24860,7 @@ General_MegaEvolution: createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 16, 0, RGB_WHITEALPHA createvisualtask AnimTask_HorizontalShake, 5, 1, 5, 14 waitforvisualfinish + createvisualtask SoundTask_PlayNormalCry, 0 createsprite gMegaSymbolSpriteTemplate ANIM_ATTACKER, 2 waitforvisualfinish clearmonbg ANIM_ATK_PARTNER @@ -25005,6 +25006,7 @@ General_PrimalReversion_Alpha: createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 16, 0, RGB_WHITEALPHA createvisualtask AnimTask_HorizontalShake, 5, 1, 5, 14 waitforvisualfinish + createvisualtask SoundTask_PlayNormalCry, 0 createsprite gAlphaSymbolSpriteTemplate ANIM_ATTACKER, 2 waitforvisualfinish clearmonbg ANIM_ATK_PARTNER @@ -25031,6 +25033,7 @@ General_PrimalReversion_Omega: createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 16, 0, RGB_WHITEALPHA createvisualtask AnimTask_HorizontalShake, 5, 1, 5, 14 waitforvisualfinish + createvisualtask SoundTask_PlayNormalCry, 0 createsprite gOmegaSymbolSpriteTemplate ANIM_ATTACKER, 2 waitforvisualfinish clearmonbg ANIM_ATK_PARTNER diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 04b709f82630..3b6e2c5c22f0 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -7808,6 +7808,7 @@ BattleScript_FocusPunchSetUp:: BattleScript_MegaEvolution:: printstring STRINGID_MEGAEVOREACTING +BattleScript_MegaEvolutionAfeterString: waitmessage B_WAIT_TIME_LONG setbyte gIsCriticalHit, 0 handlemegaevo BS_ATTACKER, 0 @@ -7822,17 +7823,7 @@ BattleScript_MegaEvolution:: BattleScript_WishMegaEvolution:: printstring STRINGID_FERVENTWISHREACHED - waitmessage B_WAIT_TIME_LONG - setbyte gIsCriticalHit, 0 - handlemegaevo BS_ATTACKER, 0 - handlemegaevo BS_ATTACKER, 1 - playanimation BS_ATTACKER, B_ANIM_MEGA_EVOLUTION - waitanimation - handlemegaevo BS_ATTACKER, 2 - printstring STRINGID_MEGAEVOEVOLVED - waitmessage B_WAIT_TIME_LONG - switchinabilities BS_ATTACKER - end2 + goto BattleScript_MegaEvolutionAfeterString BattleScript_PrimalReversion:: printstring STRINGID_EMPTYSTRING3 diff --git a/include/battle_interface.h b/include/battle_interface.h index c82f2acc2ea7..3d49356e245b 100644 --- a/include/battle_interface.h +++ b/include/battle_interface.h @@ -77,7 +77,6 @@ enum }; u32 WhichBattleCoords(u32 battlerId); -u8 GetMegaIndicatorSpriteId(u32 healthboxSpriteId); u8 CreateBattlerHealthboxSprites(u8 battler); u8 CreateSafariPlayerHealthboxSprites(void); void SetBattleBarStruct(u8 battler, u8 healthboxSpriteId, s32 maxVal, s32 currVal, s32 receivedValue); @@ -94,8 +93,7 @@ void CreateMegaTriggerSprite(u8 battlerId, u8 palId); bool32 IsMegaTriggerSpriteActive(void); void HideMegaTriggerSprite(void); void DestroyMegaTriggerSprite(void); -u32 CreateMegaIndicatorSprite(u32 battlerId, u32 which); -void DestroyMegaIndicatorSprite(u32 healthboxSpriteId); +void MegaIndicator_LoadSpritesGfx(void); u8 CreatePartyStatusSummarySprites(u8 battler, struct HpAndStatus *partyInfo, bool8 skipPlayer, bool8 isBattleStart); void Task_HidePartyStatusSummary(u8 taskId); void UpdateHealthboxAttribute(u8 healthboxSpriteId, struct Pokemon *mon, u8 elementId); diff --git a/src/battle_anim.c b/src/battle_anim.c index a7faec1fda43..fd81152e1c8e 100644 --- a/src/battle_anim.c +++ b/src/battle_anim.c @@ -274,6 +274,7 @@ void LaunchBattleAnimation(u32 animType, u32 animId) case B_ANIM_DOOM_DESIRE_HIT: case B_ANIM_WISH_HEAL: case B_ANIM_MEGA_EVOLUTION: + case B_ANIM_PRIMAL_REVERSION: case B_ANIM_GULP_MISSILE: hideHpBoxes = TRUE; break; @@ -447,14 +448,14 @@ static u8 GetBattleAnimMoveTargets(u8 battlerArgIndex, u8 *targets) case MOVE_TARGET_FOES_AND_ALLY: targets[0] = gBattleAnimArgs[battlerArgIndex]; numTargets = 1; - + if (IsBattlerAlive(targets[0] ^ BIT_FLANK)) { targets[1] = targets[0] ^ BIT_FLANK; numTargets++; } - + if (IsBattlerAlive(gBattleAnimAttacker ^ BIT_FLANK)) { - targets[2] = gBattleAnimAttacker ^ BIT_FLANK; + targets[2] = gBattleAnimAttacker ^ BIT_FLANK; numTargets++; } break; @@ -463,14 +464,14 @@ static u8 GetBattleAnimMoveTargets(u8 battlerArgIndex, u8 *targets) numTargets = 1; break; } - + return numTargets; } static s16 GetSubpriorityForMoveAnim(u8 argVar) { s16 subpriority; - + if (argVar & ANIMSPRITE_IS_TARGET) { argVar ^= ANIMSPRITE_IS_TARGET; @@ -493,7 +494,7 @@ static s16 GetSubpriorityForMoveAnim(u8 argVar) if (subpriority < 3) subpriority = 3; - + return subpriority; } @@ -519,7 +520,7 @@ static void Cmd_createsprite(void) gBattleAnimArgs[i] = T1_READ_16(sBattleAnimScriptPtr); sBattleAnimScriptPtr += 2; } - + subpriority = GetSubpriorityForMoveAnim(argVar); CreateSpriteAndAnimate( @@ -536,22 +537,22 @@ static void CreateSpriteOnTargets(const struct SpriteTemplate *template, u8 argV u8 targets[MAX_BATTLERS_COUNT]; int ntargets; s16 subpriority; - + for (i = 0; i < argsCount; i++) { gBattleAnimArgs[i] = T1_READ_16(sBattleAnimScriptPtr); sBattleAnimScriptPtr += 2; } - + subpriority = GetSubpriorityForMoveAnim(argVar); - + ntargets = GetBattleAnimMoveTargets(battlerArgIndex, targets); - + for (i = 0; i < ntargets; i++) { - + if (overwriteAnimTgt) gBattleAnimArgs[battlerArgIndex] = targets[i]; - + CreateSpriteAndAnimate( template, GetBattlerSpriteCoord(targets[i], BATTLER_COORD_X_2), @@ -575,13 +576,13 @@ static void Cmd_createspriteontargets_onpos(void) argVar = sBattleAnimScriptPtr[0]; sBattleAnimScriptPtr++; - + battlerArgIndex = sBattleAnimScriptPtr[0]; sBattleAnimScriptPtr++; argsCount = sBattleAnimScriptPtr[0]; sBattleAnimScriptPtr++; - + CreateSpriteOnTargets(template, argVar, battlerArgIndex, argsCount, FALSE); } @@ -599,13 +600,13 @@ static void Cmd_createspriteontargets(void) argVar = sBattleAnimScriptPtr[0]; sBattleAnimScriptPtr++; - + battlerArgIndex = sBattleAnimScriptPtr[0]; sBattleAnimScriptPtr++; argsCount = sBattleAnimScriptPtr[0]; sBattleAnimScriptPtr++; - + CreateSpriteOnTargets(template, argVar, battlerArgIndex, argsCount, TRUE); } @@ -656,21 +657,21 @@ static void Cmd_createvisualtaskontargets(void) taskPriority = sBattleAnimScriptPtr[0]; sBattleAnimScriptPtr++; - + battlerArgIndex = sBattleAnimScriptPtr[0]; sBattleAnimScriptPtr++; numArgs = sBattleAnimScriptPtr[0]; sBattleAnimScriptPtr++; - + // copy task arguments for (i = 0; i < numArgs; i++) { gBattleAnimArgs[i] = T1_READ_16(sBattleAnimScriptPtr); sBattleAnimScriptPtr += 2; } - + numArgs = GetBattleAnimMoveTargets(battlerArgIndex, targets); - + for (i = 0; i < numArgs; i++) { gBattleAnimArgs[battlerArgIndex] = targets[i]; diff --git a/src/battle_anim_sound_tasks.c b/src/battle_anim_sound_tasks.c index d96a4cea467e..bd4638224f0e 100644 --- a/src/battle_anim_sound_tasks.c +++ b/src/battle_anim_sound_tasks.c @@ -283,6 +283,11 @@ void SoundTask_WaitForCry(u8 taskId) } } +void SoundTask_PlayNormalCry(u8 taskId) +{ + PlayCry_ByMode(gBattleMons[gBattleAnimAttacker].species, BattleAnimAdjustPanning(SOUND_PAN_ATTACKER), CRY_MODE_NORMAL); + gTasks[taskId].func = SoundTask_WaitForCry; +} #define tSpecies data[1] #define tPan data[2] diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index 389832fb20e2..bc541f0a013d 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -691,6 +691,7 @@ bool8 BattleLoadAllHealthBoxesGfx(u8 state) { LoadSpritePalette(&sSpritePalettes_HealthBoxHealthBar[0]); LoadSpritePalette(&sSpritePalettes_HealthBoxHealthBar[1]); + MegaIndicator_LoadSpritesGfx(); } else if (!IsDoubleBattle()) { diff --git a/src/battle_interface.c b/src/battle_interface.c index 9c0db8b07481..4d0eedc35b17 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -182,6 +182,11 @@ static void SpriteCB_StatusSummaryBalls_Exit(struct Sprite *); static void SpriteCB_StatusSummaryBalls_OnSwitchout(struct Sprite *); static void SpriteCb_MegaTrigger(struct Sprite *); +static void MegaIndicator_SetVisibilities(u32 healthboxId, bool32 invisible); +static void MegaIndicator_UpdateLevel(u32 healthboxId, u32 level); +static void MegaIndicator_CreateSprites(u32 battlerId, u32 healthboxSpriteId); +static void MegaIndicator_UpdateOamPriorities(u32 healthboxId, u32 oamPriority); +static void MegaIndicator_DestroySprites(u32 healthboxSpriteId); static void SpriteCb_MegaIndicator(struct Sprite *); static u8 GetStatusIconForBattlerId(u8, u8); @@ -660,90 +665,6 @@ static const struct SpriteTemplate sSpriteTemplate_MegaTrigger = .callback = SpriteCb_MegaTrigger }; -static const u8 sMegaIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/mega_indicator.4bpp"); -static const u16 sMegaIndicatorPal[] = INCBIN_U16("graphics/battle_interface/mega_indicator.gbapal"); - -static const struct SpriteSheet sSpriteSheet_MegaIndicator = -{ - sMegaIndicatorGfx, sizeof(sMegaIndicatorGfx), TAG_MEGA_INDICATOR_TILE -}; -static const struct SpritePalette sSpritePalette_MegaIndicator = -{ - sMegaIndicatorPal, TAG_MEGA_INDICATOR_PAL -}; - -static const u8 sAlphaIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/alpha_indicator.4bpp"); -static const u16 sAlphaIndicatorPal[] = INCBIN_U16("graphics/battle_interface/alpha_indicator.gbapal"); -static const u8 sOmegaIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/omega_indicator.4bpp"); -static const u16 sOmegaIndicatorPal[] = INCBIN_U16("graphics/battle_interface/omega_indicator.gbapal"); - -static const struct SpriteSheet sSpriteSheet_AlphaIndicator = -{ - sAlphaIndicatorGfx, sizeof(sAlphaIndicatorGfx), TAG_ALPHA_INDICATOR_TILE -}; -static const struct SpritePalette sSpritePalette_AlphaIndicator = -{ - sAlphaIndicatorPal, TAG_ALPHA_INDICATOR_PAL -}; -static const struct SpriteSheet sSpriteSheet_OmegaIndicator = -{ - sOmegaIndicatorGfx, sizeof(sOmegaIndicatorGfx), TAG_OMEGA_INDICATOR_TILE -}; -static const struct SpritePalette sSpritePalette_OmegaIndicator = -{ - sOmegaIndicatorPal, TAG_OMEGA_INDICATOR_PAL -}; - -static const struct OamData sOamData_MegaIndicator = -{ - .y = 0, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = SPRITE_SHAPE(16x16), - .x = 0, - .matrixNum = 0, - .size = SPRITE_SIZE(16x16), - .tileNum = 0, - .priority = 1, - .paletteNum = 0, - .affineParam = 0, -}; - -static const struct SpriteTemplate sSpriteTemplate_MegaIndicator = -{ - .tileTag = TAG_MEGA_INDICATOR_TILE, - .paletteTag = TAG_MEGA_INDICATOR_PAL, - .oam = &sOamData_MegaIndicator, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCb_MegaIndicator, -}; - -static const struct SpriteTemplate sSpriteTemplate_AlphaIndicator = -{ - .tileTag = TAG_ALPHA_INDICATOR_TILE, - .paletteTag = TAG_ALPHA_INDICATOR_PAL, - .oam = &sOamData_MegaIndicator, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCb_MegaIndicator, -}; - -static const struct SpriteTemplate sSpriteTemplate_OmegaIndicator = -{ - .tileTag = TAG_OMEGA_INDICATOR_TILE, - .paletteTag = TAG_OMEGA_INDICATOR_PAL, - .oam = &sOamData_MegaIndicator, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCb_MegaIndicator, -}; - // Because the healthbox is too large to fit into one sprite, it is divided into two sprites. // healthboxLeft or healthboxMain is the left part that is used as the 'main' sprite. // healthboxRight or healthboxOther is the right part of the healthbox. @@ -751,26 +672,18 @@ static const struct SpriteTemplate sSpriteTemplate_OmegaIndicator = // data fields for healthboxMain // oam.affineParam holds healthboxRight spriteId +#define hMain_MegaIndicatorIds data[3] // Mega, Alpha, Omega as u8 in data[3], data[3] + 1, data[4] #define hMain_HealthBarSpriteId data[5] #define hMain_Battler data[6] #define hMain_Data7 data[7] // data fields for healthboxRight #define hOther_HealthBoxSpriteId data[5] -#define hOther_IndicatorSpriteId data[6] // For Mega Evo // data fields for healthbar #define hBar_HealthBoxSpriteId data[5] #define hBar_Data6 data[6] -u8 GetMegaIndicatorSpriteId(u32 healthboxSpriteId) -{ - u8 spriteId = gSprites[healthboxSpriteId].oam.affineParam; - if (spriteId >= MAX_SPRITES) - return 0xFF; - return gSprites[spriteId].hOther_IndicatorSpriteId; -} - static void InitLastUsedBallAssets(void) { gBattleStruct->ballSpriteIds[0] = MAX_SPRITES; @@ -864,19 +777,13 @@ u8 CreateBattlerHealthboxSprites(u8 battlerId) gSprites[healthboxLeftSpriteId].invisible = TRUE; gSprites[healthboxRightSpriteId].invisible = TRUE; - gSprites[healthboxRightSpriteId].hOther_IndicatorSpriteId = 0xFF; healthBarSpritePtr->hBar_HealthBoxSpriteId = healthboxLeftSpriteId; healthBarSpritePtr->hBar_Data6 = data6; healthBarSpritePtr->invisible = TRUE; - // Create mega indicator sprite if is a mega evolved or a primal reverted mon. - if (gBattleStruct->mega.evolvedPartyIds[GetBattlerSide(battlerId)] & gBitTable[gBattlerPartyIndexes[battlerId]] - || gBattleStruct->mega.primalRevertedPartyIds[GetBattlerSide(battlerId)] & gBitTable[gBattlerPartyIndexes[battlerId]]) - { - megaIndicatorSpriteId = CreateMegaIndicatorSprite(battlerId, 0); - gSprites[megaIndicatorSpriteId].invisible = TRUE; - } + // Create mega indicator sprites. + MegaIndicator_CreateSprites(battlerId, healthboxLeftSpriteId); gBattleStruct->ballSpriteIds[0] = MAX_SPRITES; gBattleStruct->ballSpriteIds[1] = MAX_SPRITES; @@ -899,8 +806,6 @@ u8 CreateSafariPlayerHealthboxSprites(void) gSprites[healthboxLeftSpriteId].oam.affineParam = healthboxRightSpriteId; gSprites[healthboxRightSpriteId].hOther_HealthBoxSpriteId = healthboxLeftSpriteId; - gSprites[healthboxRightSpriteId].hOther_IndicatorSpriteId = 0xFF; - gSprites[healthboxRightSpriteId].callback = SpriteCB_HealthBoxOther; return healthboxLeftSpriteId; @@ -940,19 +845,12 @@ static void SpriteCB_HealthBar(struct Sprite *sprite) static void SpriteCB_HealthBoxOther(struct Sprite *sprite) { u8 healthboxMainSpriteId = sprite->hOther_HealthBoxSpriteId; - u8 megaSpriteId = sprite->hOther_IndicatorSpriteId; sprite->x = gSprites[healthboxMainSpriteId].x + 64; sprite->y = gSprites[healthboxMainSpriteId].y; sprite->x2 = gSprites[healthboxMainSpriteId].x2; sprite->y2 = gSprites[healthboxMainSpriteId].y2; - - if (megaSpriteId != 0xFF) - { - gSprites[megaSpriteId].x2 = sprite->x2; - gSprites[megaSpriteId].y2 = sprite->y2; - } } void SetBattleBarStruct(u8 battlerId, u8 healthboxSpriteId, s32 maxVal, s32 oldVal, s32 receivedValue) @@ -966,28 +864,18 @@ void SetBattleBarStruct(u8 battlerId, u8 healthboxSpriteId, s32 maxVal, s32 oldV void SetHealthboxSpriteInvisible(u8 healthboxSpriteId) { - DestroyMegaIndicatorSprite(healthboxSpriteId); gSprites[healthboxSpriteId].invisible = TRUE; gSprites[gSprites[healthboxSpriteId].hMain_HealthBarSpriteId].invisible = TRUE; gSprites[gSprites[healthboxSpriteId].oam.affineParam].invisible = TRUE; + MegaIndicator_SetVisibilities(healthboxSpriteId, TRUE); } void SetHealthboxSpriteVisible(u8 healthboxSpriteId) { - u8 battlerId = gSprites[healthboxSpriteId].hMain_Battler; - gSprites[healthboxSpriteId].invisible = FALSE; gSprites[gSprites[healthboxSpriteId].hMain_HealthBarSpriteId].invisible = FALSE; gSprites[gSprites[healthboxSpriteId].oam.affineParam].invisible = FALSE; - if (gBattleStruct->mega.evolvedPartyIds[GetBattlerSide(battlerId)] & gBitTable[gBattlerPartyIndexes[battlerId]] - || gBattleStruct->mega.primalRevertedPartyIds[GetBattlerSide(battlerId)] & gBitTable[gBattlerPartyIndexes[battlerId]]) - { - u8 spriteId = GetMegaIndicatorSpriteId(healthboxSpriteId); - if (spriteId != 0xFF) - gSprites[spriteId].invisible = FALSE; - else - CreateMegaIndicatorSprite(battlerId, 0); - } + MegaIndicator_SetVisibilities(healthboxSpriteId, FALSE); } static void UpdateSpritePos(u8 spriteId, s16 x, s16 y) @@ -998,7 +886,7 @@ static void UpdateSpritePos(u8 spriteId, s16 x, s16 y) void DestoryHealthboxSprite(u8 healthboxSpriteId) { - DestroyMegaIndicatorSprite(healthboxSpriteId); + MegaIndicator_DestroySprites(healthboxSpriteId); DestroySprite(&gSprites[gSprites[healthboxSpriteId].oam.affineParam]); DestroySprite(&gSprites[gSprites[healthboxSpriteId].hMain_HealthBarSpriteId]); DestroySprite(&gSprites[healthboxSpriteId]); @@ -1009,26 +897,19 @@ void DummyBattleInterfaceFunc(u8 healthboxSpriteId, bool8 isDoubleBattleBattlerO } -static void TryToggleHealboxVisibility(u8 priority, u8 healthboxLeftSpriteId, u8 healthboxRightSpriteId, u8 healthbarSpriteId, u8 indicatorSpriteId) +static void TryToggleHealboxVisibility(u32 priority, u32 healthboxLeftSpriteId, u32 healthboxRightSpriteId, u32 healthbarSpriteId) { - u8 spriteIds[4] = {healthboxLeftSpriteId, healthboxRightSpriteId, healthbarSpriteId, indicatorSpriteId}; - int i; + bool32 invisible = FALSE; - for (i = 0; i < NELEMS(spriteIds); i++) - { - if (spriteIds[i] == 0xFF) - continue; + if (priority == 0) // start of anim -> make invisible + invisible = TRUE; + else if (priority == 1) // end of anim -> make visible + invisible = FALSE; - switch (priority) - { - case 0: //start of anim -> make invisible - gSprites[spriteIds[i]].invisible = TRUE; - break; - case 1: //end of anim -> make visible - gSprites[spriteIds[i]].invisible = FALSE; - break; - } - } + gSprites[healthboxLeftSpriteId].invisible = invisible; + gSprites[healthboxRightSpriteId].invisible = invisible; + gSprites[healthbarSpriteId].invisible = invisible; + MegaIndicator_SetVisibilities(healthboxLeftSpriteId, invisible); } void UpdateOamPriorityInAllHealthboxes(u8 priority, bool32 hideHPBoxes) @@ -1040,17 +921,16 @@ void UpdateOamPriorityInAllHealthboxes(u8 priority, bool32 hideHPBoxes) u8 healthboxLeftSpriteId = gHealthboxSpriteIds[i]; u8 healthboxRightSpriteId = gSprites[gHealthboxSpriteIds[i]].oam.affineParam; u8 healthbarSpriteId = gSprites[gHealthboxSpriteIds[i]].hMain_HealthBarSpriteId; - u8 indicatorSpriteId = GetMegaIndicatorSpriteId(healthboxLeftSpriteId); gSprites[healthboxLeftSpriteId].oam.priority = priority; gSprites[healthboxRightSpriteId].oam.priority = priority; gSprites[healthbarSpriteId].oam.priority = priority; - if (indicatorSpriteId != 0xFF) - gSprites[indicatorSpriteId].oam.priority = priority; + + MegaIndicator_UpdateOamPriorities(healthboxLeftSpriteId, priority); #if B_HIDE_HEALTHBOX_IN_ANIMS if (hideHPBoxes && IsBattlerAlive(i)) - TryToggleHealboxVisibility(priority, healthboxLeftSpriteId, healthboxRightSpriteId, healthbarSpriteId, indicatorSpriteId); + TryToggleHealboxVisibility(priority, healthboxLeftSpriteId, healthboxRightSpriteId, healthbarSpriteId); #endif } } @@ -1109,6 +989,8 @@ static void UpdateLvlInHealthbox(u8 healthboxSpriteId, u8 lvl) { objVram = ConvertIntToDecimalStringN(text, lvl, STR_CONV_MODE_LEFT_ALIGN, 3); xPos = 5 * (3 - (objVram - (text + 2))) - 1; + MegaIndicator_UpdateLevel(healthboxSpriteId, lvl); + MegaIndicator_SetVisibilities(healthboxSpriteId, FALSE); } else { @@ -1119,7 +1001,6 @@ static void UpdateLvlInHealthbox(u8 healthboxSpriteId, u8 lvl) xPos = 5 * (3 - (objVram - (text + 2))); } - xPos = 5 * (3 - (objVram - (text + 2))); windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(text, xPos, 3, 2, &windowId); spriteTileNum = gSprites[healthboxSpriteId].oam.tileNum * TILE_SIZE_4BPP; @@ -1418,7 +1299,7 @@ void SwapHpBarsWithHpText(void) } } -// Mega Evolution gfx functions. +// Mega Evolution Trigger icon functions. void ChangeMegaTriggerSprite(u8 spriteId, u8 animId) { StartSpriteAnim(&gSprites[spriteId], animId); @@ -1543,6 +1424,65 @@ void DestroyMegaTriggerSprite(void) gBattleStruct->mega.triggerSpriteId = 0xFF; } +#undef tBattler +#undef tHide + +// Code for Mega Evolution (And Alpha/Omega) Trigger icon visible on the battler's healthbox. +enum +{ + INDICATOR_MEGA, + INDICATOR_ALPHA, + INDICATOR_OMEGA, + INDICATOR_COUNT, +}; + +static const u8 sMegaIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/mega_indicator.4bpp"); +static const u16 sMegaIndicatorPal[] = INCBIN_U16("graphics/battle_interface/mega_indicator.gbapal"); +static const u8 sAlphaIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/alpha_indicator.4bpp"); +static const u16 sAlphaIndicatorPal[] = INCBIN_U16("graphics/battle_interface/alpha_indicator.gbapal"); +static const u8 sOmegaIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/omega_indicator.4bpp"); +static const u16 sOmegaIndicatorPal[] = INCBIN_U16("graphics/battle_interface/omega_indicator.gbapal"); + +static const struct SpriteSheet sMegaIndicator_SpriteSheets[] = +{ + [INDICATOR_MEGA] = {sMegaIndicatorGfx, sizeof(sMegaIndicatorGfx), TAG_MEGA_INDICATOR_TILE}, + [INDICATOR_ALPHA] = {sAlphaIndicatorGfx, sizeof(sAlphaIndicatorGfx), TAG_ALPHA_INDICATOR_TILE}, + [INDICATOR_OMEGA] = {sOmegaIndicatorGfx, sizeof(sOmegaIndicatorGfx), TAG_OMEGA_INDICATOR_TILE}, + [INDICATOR_COUNT] = {0} +}; +static const struct SpritePalette sMegaIndicator_SpritePalettes[] = +{ + [INDICATOR_MEGA] = {sMegaIndicatorPal, TAG_MEGA_INDICATOR_PAL}, + [INDICATOR_ALPHA] = {sAlphaIndicatorPal, TAG_ALPHA_INDICATOR_PAL}, + [INDICATOR_OMEGA] = {sOmegaIndicatorPal, TAG_OMEGA_INDICATOR_PAL}, + [INDICATOR_COUNT] = {0} +}; + +static const struct OamData sOamData_MegaIndicator = +{ + .shape = SPRITE_SHAPE(16x16), + .size = SPRITE_SIZE(16x16), + .priority = 1, +}; + +static const struct SpriteTemplate sSpriteTemplate_MegaIndicator = +{ + .tileTag = TAG_MEGA_INDICATOR_TILE, + .paletteTag = TAG_MEGA_INDICATOR_PAL, + .oam = &sOamData_MegaIndicator, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCb_MegaIndicator, +}; + +static const u16 sMegaIndicatorTags[][2] = +{ + [INDICATOR_MEGA] = {TAG_MEGA_INDICATOR_TILE, TAG_MEGA_INDICATOR_PAL}, + [INDICATOR_ALPHA] = {TAG_ALPHA_INDICATOR_TILE, TAG_ALPHA_INDICATOR_PAL}, + [INDICATOR_OMEGA] = {TAG_OMEGA_INDICATOR_TILE, TAG_OMEGA_INDICATOR_PAL}, +}; + static const s8 sIndicatorPositions[][2] = { [B_POSITION_PLAYER_LEFT] = {52, -9}, @@ -1551,89 +1491,137 @@ static const s8 sIndicatorPositions[][2] = [B_POSITION_OPPONENT_RIGHT] = {44, -9}, }; -u32 CreateMegaIndicatorSprite(u32 battlerId, u32 which) +// for sprite data fields +#define tBattler data[0] +#define tType data[1] // Indicator type: mega, alpha, omega +#define tPosX data[2] +#define tLevelXDelta data[3] // X position depends whether level has 3, 2 or 1 digit + +void MegaIndicator_LoadSpritesGfx(void) { - u32 spriteId, position; - s16 x, y; + LoadSpriteSheets(sMegaIndicator_SpriteSheets); + LoadSpritePalettes(sMegaIndicator_SpritePalettes); +} - if (gBattleStruct->mega.evolvedPartyIds[GetBattlerSide(battlerId)] & gBitTable[gBattlerPartyIndexes[battlerId]]) +static bool32 MegaIndicator_ShouldBeInvisible(u32 battlerId, u32 indicatorType) +{ + u32 side = GetBattlerSide(battlerId); + if (indicatorType == INDICATOR_MEGA) { - LoadSpritePalette(&sSpritePalette_MegaIndicator); - LoadSpriteSheet(&sSpriteSheet_MegaIndicator); + if (gBattleStruct->mega.evolvedPartyIds[side] & gBitTable[gBattlerPartyIndexes[battlerId]]) + return FALSE; } - else if (gBattleStruct->mega.primalRevertedPartyIds[GetBattlerSide(battlerId)] & gBitTable[gBattlerPartyIndexes[battlerId]]) + else { - if (GET_BASE_SPECIES_ID(gBattleMons[battlerId].species) == SPECIES_GROUDON) + if (indicatorType == INDICATOR_ALPHA) { - LoadSpritePalette(&sSpritePalette_OmegaIndicator); - LoadSpriteSheet(&sSpriteSheet_OmegaIndicator); + if (gBattleMons[battlerId].species != SPECIES_KYOGRE_PRIMAL) + return TRUE; } - else if (GET_BASE_SPECIES_ID(gBattleMons[battlerId].species) == SPECIES_KYOGRE) + else if (indicatorType == INDICATOR_OMEGA) { - LoadSpritePalette(&sSpritePalette_AlphaIndicator); - LoadSpriteSheet(&sSpriteSheet_AlphaIndicator); + if (gBattleMons[battlerId].species != SPECIES_GROUDON_PRIMAL) + return TRUE; } + if (gBattleStruct->mega.primalRevertedPartyIds[side] & gBitTable[gBattlerPartyIndexes[battlerId]]) + return FALSE; } + return TRUE; +} - position = GetBattlerPosition(battlerId); - GetBattlerHealthboxCoords(battlerId, &x, &y); - - x += sIndicatorPositions[position][0]; - y += sIndicatorPositions[position][1]; +static u8 *MegaIndicator_GetSpriteIds(u32 healthboxSpriteId) +{ + u8 *spriteIds = (u8 *)(&gSprites[healthboxSpriteId].hMain_MegaIndicatorIds); + return spriteIds; +} - if (gBattleMons[battlerId].level >= 100) - x -= 4; - else if (gBattleMons[battlerId].level < 10) - x += 5; +void MegaIndicator_SetVisibilities(u32 healthboxId, bool32 invisible) +{ + u32 i; + u8 *spriteIds = MegaIndicator_GetSpriteIds(healthboxId); + u32 battlerId = gSprites[healthboxId].hMain_Battler; - if (gBattleStruct->mega.evolvedPartyIds[GetBattlerSide(battlerId)] & gBitTable[gBattlerPartyIndexes[battlerId]]) + for (i = 0; i < INDICATOR_COUNT; i++) { - spriteId = CreateSpriteAtEnd(&sSpriteTemplate_MegaIndicator, x, y, 0); - } - else if (gBattleStruct->mega.primalRevertedPartyIds[GetBattlerSide(battlerId)] & gBitTable[gBattlerPartyIndexes[battlerId]]) - { - if (GET_BASE_SPECIES_ID(gBattleMons[battlerId].species) == SPECIES_GROUDON) - spriteId = CreateSpriteAtEnd(&sSpriteTemplate_OmegaIndicator, x, y, 0); - else if (GET_BASE_SPECIES_ID(gBattleMons[battlerId].species) == SPECIES_KYOGRE) - spriteId = CreateSpriteAtEnd(&sSpriteTemplate_AlphaIndicator, x, y, 0); + if (invisible == TRUE) + gSprites[spriteIds[i]].invisible = TRUE; + else // Try visible. + gSprites[spriteIds[i]].invisible = MegaIndicator_ShouldBeInvisible(battlerId, i); } +} - gSprites[gSprites[gHealthboxSpriteIds[battlerId]].oam.affineParam].hOther_IndicatorSpriteId = spriteId; - gSprites[spriteId].tBattler = battlerId; - return spriteId; +static void MegaIndicator_UpdateOamPriorities(u32 healthboxId, u32 oamPriority) +{ + u32 i; + u8 *spriteIds = MegaIndicator_GetSpriteIds(healthboxId); + for (i = 0; i < INDICATOR_COUNT; i++) + gSprites[spriteIds[i]].oam.priority = oamPriority; } -void DestroyMegaIndicatorSprite(u32 healthboxSpriteId) +static void MegaIndicator_UpdateLevel(u32 healthboxId, u32 level) { u32 i; - s16 *spriteId = &gSprites[gSprites[healthboxSpriteId].oam.affineParam].hOther_IndicatorSpriteId; + s16 xDelta = 0; + u8 *spriteIds = MegaIndicator_GetSpriteIds(healthboxId); - if (*spriteId != 0xFF) - { - DestroySprite(&gSprites[*spriteId]); - *spriteId = 0xFF; - } + if (level >= 100) + xDelta -= 4; + else if (level < 10) + xDelta += 5; - for (i = 0; i < MAX_BATTLERS_COUNT; i++) - { - if (gSprites[gSprites[gHealthboxSpriteIds[i]].oam.affineParam].hOther_IndicatorSpriteId != 0xFF) - break; - } - // Free Sprite pal/tiles only if no indicator sprite is active for all battlers. - if (i == MAX_BATTLERS_COUNT) + for (i = 0; i < INDICATOR_COUNT; i++) + gSprites[spriteIds[i]].tLevelXDelta = xDelta; +} + +static void MegaIndicator_CreateSprites(u32 battlerId, u32 healthboxSpriteId) +{ + u32 position, i, level; + u8 *spriteIds; + s16 xHealthbox = 0, y = 0; + s32 x = 0; + + position = GetBattlerPosition(battlerId); + GetBattlerHealthboxCoords(battlerId, &xHealthbox, &y); + + x = sIndicatorPositions[position][0]; + y += sIndicatorPositions[position][1]; + + spriteIds = MegaIndicator_GetSpriteIds(healthboxSpriteId); + for (i = 0; i < INDICATOR_COUNT; i++) { - FreeSpritePaletteByTag(TAG_MEGA_INDICATOR_PAL); - FreeSpriteTilesByTag(TAG_MEGA_INDICATOR_TILE); + struct SpriteTemplate sprTemplate = sSpriteTemplate_MegaIndicator; + sprTemplate.tileTag = sMegaIndicatorTags[i][0]; + sprTemplate.paletteTag = sMegaIndicatorTags[i][1]; + spriteIds[i] = CreateSpriteAtEnd(&sprTemplate, 0, y, 0); + gSprites[spriteIds[i]].tType = i; + gSprites[spriteIds[i]].tBattler = battlerId; + gSprites[spriteIds[i]].tPosX = x; + gSprites[spriteIds[i]].invisible = TRUE; } } +static void MegaIndicator_DestroySprites(u32 healthboxSpriteId) +{ + u32 i; + u8 *spriteIds = MegaIndicator_GetSpriteIds(healthboxSpriteId); + + for (i = 0; i < INDICATOR_COUNT; i++) + DestroySprite(&gSprites[spriteIds[i]]); +} + static void SpriteCb_MegaIndicator(struct Sprite *sprite) { + u32 battlerId = sprite->tBattler; + sprite->x = gSprites[gHealthboxSpriteIds[battlerId]].x + sprite->tPosX + sprite->tLevelXDelta; + sprite->x2 = gSprites[gHealthboxSpriteIds[battlerId]].x2; + sprite->y2 = gSprites[gHealthboxSpriteIds[battlerId]].y2; } #undef tBattler -#undef tHide +#undef tType +#undef tPosX +#undef tLevelXDelta #define tBattler data[0] #define tSummaryBarSpriteId data[1] diff --git a/src/battle_main.c b/src/battle_main.c index 6588d3c5ee4b..0d8784781426 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -2878,10 +2878,6 @@ static void SpriteCB_BounceEffect(struct Sprite *sprite) gSprites[bouncerSpriteId].y2 = y; sprite->sSinIndex = (sprite->sSinIndex + sprite->sDelta) & 0xFF; - - bouncerSpriteId = GetMegaIndicatorSpriteId(sprite->sBouncerSpriteId); - if (sprite->sWhich == BOUNCE_HEALTHBOX && bouncerSpriteId != 0xFF) - gSprites[bouncerSpriteId].y2 = y; } #undef sSinIndex @@ -4886,11 +4882,8 @@ static void CheckMegaEvolutionBeforeTurn(void) if (gBattleStruct->mega.toEvolve & gBitTable[gActiveBattler] && !(gProtectStructs[gActiveBattler].noValidMoves)) { - struct Pokemon *mon; - if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT) - mon = &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]; - else - mon = &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]; + struct Pokemon *mon = GetBattlerPartyData(gActiveBattler); + gBattleStruct->mega.toEvolve &= ~(gBitTable[gActiveBattler]); gLastUsedItem = gBattleMons[gActiveBattler].item; if (GetWishMegaEvolutionSpecies(GetMonData(mon, MON_DATA_SPECIES), GetMonData(mon, MON_DATA_MOVE1), GetMonData(mon, MON_DATA_MOVE2), GetMonData(mon, MON_DATA_MOVE3), GetMonData(mon, MON_DATA_MOVE4))) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 3826a4751789..9ff014639339 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -8633,6 +8633,74 @@ static bool32 CourtChangeSwapSideStatuses(void) SWAP(sideTimerPlayer->stickyWebBattlerSide, sideTimerOpp->stickyWebBattlerSide, temp); } +static void HandleScriptMegaPrimal(u32 caseId, u32 battlerId, bool32 isMega) +{ + struct Pokemon *mon = GetBattlerPartyData(battlerId); + u32 position = GetBattlerPosition(battlerId); + u32 side = GET_BATTLER_SIDE(battlerId); + + // Change species. + if (caseId == 0) + { + u16 newSpecies; + if (isMega) + { + gBattleStruct->mega.evolvedSpecies[battlerId] = gBattleMons[battlerId].species; + if (position == B_POSITION_PLAYER_LEFT + || (position == B_POSITION_PLAYER_RIGHT && !(gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_INGAME_PARTNER)))) + { + gBattleStruct->mega.playerEvolvedSpecies = gBattleStruct->mega.evolvedSpecies[battlerId]; + } + //Checks regular Mega Evolution + newSpecies = GetMegaEvolutionSpecies(gBattleStruct->mega.evolvedSpecies[battlerId], gBattleMons[battlerId].item); + //Checks Wish Mega Evolution + if (newSpecies == SPECIES_NONE) + { + newSpecies = GetWishMegaEvolutionSpecies(gBattleStruct->mega.evolvedSpecies[battlerId], + gBattleMons[battlerId].moves[0], gBattleMons[battlerId].moves[1], gBattleMons[battlerId].moves[2], gBattleMons[battlerId].moves[3]); + } + } + else + { + gBattleStruct->mega.primalRevertedSpecies[battlerId] = gBattleMons[battlerId].species; + if (position == B_POSITION_PLAYER_LEFT + || (position == B_POSITION_PLAYER_RIGHT && !(gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_INGAME_PARTNER)))) + { + gBattleStruct->mega.playerPrimalRevertedSpecies = gBattleStruct->mega.primalRevertedSpecies[battlerId]; + } + // Checks Primal Reversion. + newSpecies = GetPrimalReversionSpecies(gBattleStruct->mega.primalRevertedSpecies[battlerId], gBattleMons[battlerId].item); + } + + gBattleMons[battlerId].species = newSpecies; + PREPARE_SPECIES_BUFFER(gBattleTextBuff1, gBattleMons[battlerId].species); + + BtlController_EmitSetMonData(BUFFER_A, REQUEST_SPECIES_BATTLE, gBitTable[gBattlerPartyIndexes[battlerId]], sizeof(gBattleMons[battlerId].species), &gBattleMons[battlerId].species); + MarkBattlerForControllerExec(battlerId); + } + // Change stats. + else if (caseId == 1) + { + RecalcBattlerStats(battlerId, mon); + if (isMega) + { + gBattleStruct->mega.alreadyEvolved[position] = TRUE; + gBattleStruct->mega.evolvedPartyIds[side] |= gBitTable[gBattlerPartyIndexes[battlerId]]; + } + else + { + gBattleStruct->mega.primalRevertedPartyIds[side] |= gBitTable[gBattlerPartyIndexes[battlerId]]; + } + } + // Update healthbox and elevation and play cry. + else + { + UpdateHealthboxAttribute(gHealthboxSpriteIds[battlerId], mon, HEALTHBOX_ALL); + if (side == B_SIDE_OPPONENT) + SetBattlerShadowSpriteCallback(battlerId, gBattleMons[battlerId].species); + } +} + static bool32 CanTeleport(u8 battlerId) { u8 side = GetBattlerSide(battlerId); @@ -9709,95 +9777,14 @@ static void Cmd_various(void) case VARIOUS_HANDLE_MEGA_EVO: { VARIOUS_ARGS(u8 case_); - - if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT) - mon = &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]; - else - mon = &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]; - - // Change species. - if (cmd->case_ == 0) - { - u16 megaSpecies; - gBattleStruct->mega.evolvedSpecies[gActiveBattler] = gBattleMons[gActiveBattler].species; - if (GetBattlerPosition(gActiveBattler) == B_POSITION_PLAYER_LEFT - || (GetBattlerPosition(gActiveBattler) == B_POSITION_PLAYER_RIGHT && !(gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_INGAME_PARTNER)))) - { - gBattleStruct->mega.playerEvolvedSpecies = gBattleStruct->mega.evolvedSpecies[gActiveBattler]; - } - //Checks regular Mega Evolution - megaSpecies = GetMegaEvolutionSpecies(gBattleStruct->mega.evolvedSpecies[gActiveBattler], gBattleMons[gActiveBattler].item); - //Checks Wish Mega Evolution - if (megaSpecies == SPECIES_NONE) - { - megaSpecies = GetWishMegaEvolutionSpecies(gBattleStruct->mega.evolvedSpecies[gActiveBattler], gBattleMons[gActiveBattler].moves[0], gBattleMons[gActiveBattler].moves[1], gBattleMons[gActiveBattler].moves[2], gBattleMons[gActiveBattler].moves[3]); - } - - gBattleMons[gActiveBattler].species = megaSpecies; - PREPARE_SPECIES_BUFFER(gBattleTextBuff1, gBattleMons[gActiveBattler].species); - - BtlController_EmitSetMonData(BUFFER_A, REQUEST_SPECIES_BATTLE, gBitTable[gBattlerPartyIndexes[gActiveBattler]], sizeof(gBattleMons[gActiveBattler].species), &gBattleMons[gActiveBattler].species); - MarkBattlerForControllerExec(gActiveBattler); - } - // Change stats. - else if (cmd->case_ == 1) - { - RecalcBattlerStats(gActiveBattler, mon); - gBattleStruct->mega.alreadyEvolved[GetBattlerPosition(gActiveBattler)] = TRUE; - gBattleStruct->mega.evolvedPartyIds[GetBattlerSide(gActiveBattler)] |= gBitTable[gBattlerPartyIndexes[gActiveBattler]]; - } - // Update healthbox and elevation. - else - { - UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], mon, HEALTHBOX_ALL); - CreateMegaIndicatorSprite(gActiveBattler, 0); - if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT) - SetBattlerShadowSpriteCallback(gActiveBattler, gBattleMons[gActiveBattler].species); - } + HandleScriptMegaPrimal(cmd->case_, gActiveBattler, TRUE); gBattlescriptCurrInstr = cmd->nextInstr; return; } case VARIOUS_HANDLE_PRIMAL_REVERSION: { VARIOUS_ARGS(u8 case_); - if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT) - mon = &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]; - else - mon = &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]; - - // Change species. - if (cmd->case_ == 0) - { - u16 primalSpecies; - gBattleStruct->mega.primalRevertedSpecies[gActiveBattler] = gBattleMons[gActiveBattler].species; - if (GetBattlerPosition(gActiveBattler) == B_POSITION_PLAYER_LEFT - || (GetBattlerPosition(gActiveBattler) == B_POSITION_PLAYER_RIGHT && !(gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_INGAME_PARTNER)))) - { - gBattleStruct->mega.playerPrimalRevertedSpecies = gBattleStruct->mega.primalRevertedSpecies[gActiveBattler]; - } - // Checks Primal Reversion - primalSpecies = GetPrimalReversionSpecies(gBattleStruct->mega.primalRevertedSpecies[gActiveBattler], gBattleMons[gActiveBattler].item); - - gBattleMons[gActiveBattler].species = primalSpecies; - PREPARE_SPECIES_BUFFER(gBattleTextBuff1, gBattleMons[gActiveBattler].species); - - BtlController_EmitSetMonData(BUFFER_A, REQUEST_SPECIES_BATTLE, gBitTable[gBattlerPartyIndexes[gActiveBattler]], sizeof(gBattleMons[gActiveBattler].species), &gBattleMons[gActiveBattler].species); - MarkBattlerForControllerExec(gActiveBattler); - } - // Change stats. - else if (cmd->case_ == 1) - { - RecalcBattlerStats(gActiveBattler, mon); - gBattleStruct->mega.primalRevertedPartyIds[GetBattlerSide(gActiveBattler)] |= gBitTable[gBattlerPartyIndexes[gActiveBattler]]; - } - // Update healthbox and elevation. - else - { - UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], mon, HEALTHBOX_ALL); - CreateMegaIndicatorSprite(gActiveBattler, 0); - if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT) - SetBattlerShadowSpriteCallback(gActiveBattler, gBattleMons[gActiveBattler].species); - } + HandleScriptMegaPrimal(cmd->case_, gActiveBattler, FALSE); gBattlescriptCurrInstr = cmd->nextInstr; return; } diff --git a/src/battle_util.c b/src/battle_util.c index ccc7445b5260..e70b9f04dc22 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -10141,7 +10141,7 @@ void UndoMegaEvolution(u32 monId) if (gBattleStruct->mega.evolvedPartyIds[B_SIDE_PLAYER] & gBitTable[monId]) { gBattleStruct->mega.evolvedPartyIds[B_SIDE_PLAYER] &= ~(gBitTable[monId]); - SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &gBattleStruct->mega.playerEvolvedSpecies); + SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &baseSpecies); CalculateMonStats(&gPlayerParty[monId]); } else if (gBattleStruct->mega.primalRevertedPartyIds[B_SIDE_PLAYER] & gBitTable[monId]) From 8143f57eb9d487e3e2285ce6ec839739451b4722 Mon Sep 17 00:00:00 2001 From: Jaizu Date: Sun, 26 Feb 2023 14:06:32 +0100 Subject: [PATCH 110/428] Fix sprite palettes up to Ampharos included --- graphics/pokemon/ampharos/anim_front.png | Bin 1115 -> 1128 bytes graphics/pokemon/ampharos/front.png | Bin 699 -> 684 bytes graphics/pokemon/ampharos/normal.pal | 28 +++++++++---------- graphics/pokemon/ariados/anim_front.png | Bin 1369 -> 1308 bytes graphics/pokemon/ariados/front.png | Bin 806 -> 794 bytes graphics/pokemon/ariados/normal.pal | 28 +++++++++---------- graphics/pokemon/bayleef/anim_front.png | Bin 1123 -> 1112 bytes graphics/pokemon/bayleef/front.png | Bin 700 -> 710 bytes graphics/pokemon/bayleef/normal.pal | 28 +++++++++---------- graphics/pokemon/chikorita/anim_front.png | Bin 880 -> 871 bytes graphics/pokemon/chikorita/front.png | Bin 517 -> 503 bytes graphics/pokemon/chikorita/normal.pal | 28 +++++++++---------- graphics/pokemon/chinchou/anim_front.png | Bin 1117 -> 1120 bytes graphics/pokemon/chinchou/front.png | Bin 656 -> 644 bytes graphics/pokemon/chinchou/normal.pal | 26 +++++++++--------- graphics/pokemon/cleffa/anim_front.png | Bin 600 -> 592 bytes graphics/pokemon/cleffa/front.png | Bin 415 -> 398 bytes graphics/pokemon/cleffa/normal.pal | 20 +++++++------- graphics/pokemon/crobat/anim_front.png | Bin 1121 -> 1125 bytes graphics/pokemon/crobat/front.png | Bin 690 -> 677 bytes graphics/pokemon/crobat/normal.pal | 26 +++++++++--------- graphics/pokemon/croconaw/anim_front.png | Bin 1152 -> 1054 bytes graphics/pokemon/croconaw/front.png | Bin 681 -> 668 bytes graphics/pokemon/croconaw/normal.pal | 28 +++++++++---------- graphics/pokemon/cyndaquil/anim_front.png | Bin 936 -> 887 bytes graphics/pokemon/cyndaquil/front.png | Bin 572 -> 540 bytes graphics/pokemon/cyndaquil/normal.pal | 26 +++++++++--------- graphics/pokemon/feraligatr/anim_front.png | Bin 1680 -> 1688 bytes graphics/pokemon/feraligatr/front.png | Bin 975 -> 982 bytes graphics/pokemon/feraligatr/normal.pal | 26 +++++++++--------- graphics/pokemon/flaaffy/anim_front.png | Bin 1125 -> 1127 bytes graphics/pokemon/flaaffy/front.png | Bin 669 -> 655 bytes graphics/pokemon/flaaffy/normal.pal | 28 +++++++++---------- graphics/pokemon/furret/anim_front.png | Bin 1058 -> 1124 bytes graphics/pokemon/furret/front.png | Bin 634 -> 658 bytes graphics/pokemon/furret/normal.pal | 26 +++++++++--------- graphics/pokemon/hoothoot/anim_front.png | Bin 825 -> 830 bytes graphics/pokemon/hoothoot/front.png | Bin 557 -> 548 bytes graphics/pokemon/hoothoot/normal.pal | 28 +++++++++---------- graphics/pokemon/igglybuff/anim_front.png | Bin 553 -> 579 bytes graphics/pokemon/igglybuff/front.png | Bin 392 -> 407 bytes graphics/pokemon/igglybuff/normal.pal | 20 +++++++------- graphics/pokemon/lanturn/anim_front.png | Bin 1145 -> 1097 bytes graphics/pokemon/lanturn/front.png | Bin 740 -> 680 bytes graphics/pokemon/lanturn/normal.pal | 30 ++++++++++----------- graphics/pokemon/ledian/anim_front.png | Bin 1291 -> 1326 bytes graphics/pokemon/ledian/front.png | Bin 736 -> 738 bytes graphics/pokemon/ledian/normal.pal | 24 ++++++++--------- graphics/pokemon/ledyba/anim_front.png | Bin 1222 -> 1218 bytes graphics/pokemon/ledyba/front.png | Bin 683 -> 674 bytes graphics/pokemon/ledyba/normal.pal | 28 +++++++++---------- graphics/pokemon/mareep/anim_front.png | Bin 975 -> 931 bytes graphics/pokemon/mareep/back.png | Bin 577 -> 520 bytes graphics/pokemon/mareep/front.png | Bin 619 -> 593 bytes graphics/pokemon/mareep/normal.pal | 28 +++++++++---------- graphics/pokemon/mareep/shiny.pal | 14 +++++----- graphics/pokemon/meganium/anim_front.png | Bin 1511 -> 1424 bytes graphics/pokemon/meganium/front.png | Bin 887 -> 852 bytes graphics/pokemon/meganium/normal.pal | 28 +++++++++---------- graphics/pokemon/natu/anim_front.png | Bin 610 -> 570 bytes graphics/pokemon/natu/front.png | Bin 412 -> 381 bytes graphics/pokemon/natu/normal.pal | 30 ++++++++++----------- graphics/pokemon/noctowl/anim_front.png | Bin 1159 -> 1143 bytes graphics/pokemon/noctowl/front.png | Bin 727 -> 702 bytes graphics/pokemon/noctowl/normal.pal | 28 +++++++++---------- graphics/pokemon/quilava/anim_front.png | Bin 1033 -> 984 bytes graphics/pokemon/quilava/back.png | Bin 775 -> 715 bytes graphics/pokemon/quilava/front.png | Bin 649 -> 599 bytes graphics/pokemon/quilava/normal.pal | 22 +++++++-------- graphics/pokemon/sentret/anim_front.png | Bin 948 -> 929 bytes graphics/pokemon/sentret/front.png | Bin 634 -> 597 bytes graphics/pokemon/sentret/normal.pal | 24 ++++++++--------- graphics/pokemon/spinarak/anim_front.png | Bin 727 -> 704 bytes graphics/pokemon/spinarak/front.png | Bin 536 -> 508 bytes graphics/pokemon/spinarak/normal.pal | 16 +++++------ graphics/pokemon/spinarak/shiny.pal | 2 +- graphics/pokemon/togepi/anim_front.png | Bin 672 -> 683 bytes graphics/pokemon/togepi/front.png | Bin 421 -> 421 bytes graphics/pokemon/togepi/normal.pal | 28 +++++++++---------- graphics/pokemon/togetic/anim_front.png | Bin 771 -> 720 bytes graphics/pokemon/togetic/front.png | Bin 464 -> 478 bytes graphics/pokemon/togetic/normal.pal | 20 +++++++------- graphics/pokemon/totodile/anim_front.png | Bin 790 -> 795 bytes graphics/pokemon/totodile/front.png | Bin 556 -> 538 bytes graphics/pokemon/totodile/normal.pal | 26 +++++++++--------- graphics/pokemon/totodile/shiny.pal | 2 +- graphics/pokemon/typhlosion/anim_front.png | Bin 1408 -> 1365 bytes graphics/pokemon/typhlosion/back.png | Bin 858 -> 817 bytes graphics/pokemon/typhlosion/normal.pal | 28 +++++++++---------- graphics/pokemon/xatu/anim_front.png | Bin 1059 -> 1042 bytes graphics/pokemon/xatu/front.png | Bin 610 -> 589 bytes graphics/pokemon/xatu/normal.pal | 28 +++++++++---------- 92 files changed, 386 insertions(+), 386 deletions(-) diff --git a/graphics/pokemon/ampharos/anim_front.png b/graphics/pokemon/ampharos/anim_front.png index 1b3930f64a134c42f1a17bb59405adff5039642d..4e71838b007865af7fa9ed4b3bf1d842546dc141 100644 GIT binary patch delta 1119 zcmV-l1fcud2lo1dVFz4bV%gt_L{%jCoS`WX0BM=Lb!rz%w z>Asvs`Tg-Mh<^-6aX~!0Ss3yNfHNm4S^g#%&*T)qALBs?A%X`0QhpaFQYq^7Y%Zn% zW2Xt6i`Fflk2DTJf0~R3*f)l=QHQt+P?PhuzyY|WWH)M%*S6V`fGD?01ia;Fh2vG| z*VX2Ps5Th&M+oPy;sNWnR^+~}9RT`%(;~4-Kyo7{dVgzSA*iRN+k@>@(Yvyk1DXq7 zhdy4Y+RHP5Y6F%eEC?S@Zbg#-_Nx%mXZ}s&hS^@gsR20y_91}ivp3i;Ho*b%zu z0@$zmB-e(d`5AW7V5Z;I#c>3rw2_k9hM9g>SNA)Ba>*`f=K89fAo^>7%NtN~i<=Cv zhviDdHGcuUo(~JA0FnCuE&*;EIEoBF`?25-z{M0X1!yYtH&v1WZn-)j%>@X+pn14FaqFt2l5MaEChEp zi`GsOq_;YfFNqleV$0X5=QKVA)lJ~je0m9gPk&q638*%>)ZZ+DJH-#j)~AE>-wG?; z$C*t{3<#PU{|^HKCddD1K+KN+q%0c{v*W)vAiV#;!~4Ye?^?HYjf3~h_%F@g^!Ok3 zGX9UxuI2bY4fsyrg8(e#lLmy=pUCo10qH6_$LNL zKOxEDV{&`rkbwaS+IH$(}@ z43IWpp*Yl22jD!u^X$#mK=}@-0a5_E41b8!0J#X@!hooq)*%C;0*I$FHz1ntaDGxZ zAX>L8oSL|X0nwaX&kjh#fM|w*g#*$uAet3I91!s@E)0lf2*Cjf2F8^E(GEczkdWzZ z1EO8!*a0aF41LyLlu33#n*KwN0RRa=4(&WyFI34GRpbt{FD@$d&1d$7$el&he+sg5US?G l@$|mi2|4hjGyLDohhI&(HHg4n5`h2!002ovPDHLkV1fjF1p5F0 delta 1106 zcmV-Y1g-n%2-^sd7=Hu<0000~l79t5rwVnf*wTf}{ukZb zp?m4OJ3FzRyNfzh;v`U{`||Gj-TB=Y%lfB5=n|m5T{8prR#U{$Vtv<*b{*H%0(-|t zZ0x&DEwKOoE$jI`eX6%#-?1QUYk|t^3&yq@(XI~YFdV0Js7(QZ^9~DWSGNLw|K%#i z&_&?Dc*K}zOn(6bv~<8o&Vv?MY0HjP1-O6u-#i0!F;r<%|@uL6d!$4DJ9^4)NUt^3P2pgaHs`3r+yq?htSR=$A`0z z5o0@X9B*JEb7bY>DvOWv0=NS{GUE0)mLV$qNQF2be}51__B6N0uMTJP%oe~9r#)&F z0Wm-3E5vcFN9Vh~a&ajF@cDB)1qzS$>@)w*kE~~d1l9`x5xm1#3+wzw0QU;O>QSCr ztOAg8)|gAPo?d0Up9m0Sr)HffEh~#0r~=0Gwz90Bhfqq)EzE zNJo`|H<^5+yosoL2mvaODp4+hdzLjoCj{loIe&t2Mk-rC6$_oNg%we>0OGT34cg!N zq{?yLg?q|w`ZQK2KM%2_2|tn{1;dc65R9rp4}@T>8uWk*Mqtu|y{jXm9$5PqC#+@A z1MAC)Sq~~p^nkZgt_RwyH`4DVg31|ePie+qfExlmitL?Mxu0b$tPMmf1g26ov*m+Ga7?KzdxnQVw zLlENLyKZX;u@yovJdLB!P~OdVkZ+VZL*dVm35LQ@1mMpMWWi7@ae2$Dx1lhU0#Fc6!ykO+pI?1|TUN8zb zZ#_MwdBG^$drl~;niq@$K-w-ps71jjBtczpo3tnxh0BN9Ew?Nf1%NnpEWv>HpMyl{ z2M+2(H1M%M9VALWAOe6?4|o8D!$d&_+^Y-(i6AqSb)`TMil($S;ex@NgzDH6XiH3_ zU|`ltM`@8%Fff8bAkYbFxzCI5XZ6&dXXYpb0=H`ZC9)_GIlYh%Ren(HK}&wN|2Mt( Y3%)DKK1$T4$p8QV07*qoM6N<$f*>gEod5s; diff --git a/graphics/pokemon/ampharos/front.png b/graphics/pokemon/ampharos/front.png index cc9711f87d9def90a2dc62fd6ab60e82bfbc47be..244dfecde3aec8bbaaf5d7c9101280dddc8501ef 100644 GIT binary patch delta 672 zcmV;R0$=^R1*`>-7=H)@0001;w}I>c0004VQb$4nuFf3k0000mP)t-sn9!gQ5D;2g zTK~lm&5IC&S~0~z0RQev|6&0D|No010IaO6=H}-AVgOnI0L4K7CHK{^0006iNkl5au#1hCeaLVyW( zi1o%G;sPlD#sS7Thu(XzUi9Mt7h-VU69Z@_plevyzz!gwMH&a7cR}>t8X$?pu>NBf zfM~)2H9|cEBPR6`iWhSL50vzi4t%08>;Sd$aR4-GJA48rkP4B~?@U$l%~{OvAJ2lq zUClx!4kl+GEilE}U;g z04}%-xy-c#K%YD95~~MP9kJ5K2n)e=T5=4+dZFjB*na|kHCPXQX{c7@4Z!>kSSq(5 zU0&{rz5?ubF4WKDq$ObSDd4n#oB{g~AnThG>^DJRK$~0|iOzxjZcpMhq|VP2NsoXB#&9-Q4we0K>_i(~S43mXP)L0L~jQxr_S-uqWdYaZfU?T5iPfDTi{8epl@f0>dBVBQ0ZR1{`;8D1n2=z^@=zE zAH8|5R|F*jY+I5;#y-<8+7RUZn^?(j7y;<_4zvw)%muE^Znet^@^m_qjKqcjW#xOQ z*EBvk^_Za5d^&{m=@=gZE*D&SzAOP(@ypNFw;3PK|7Sl8>>6STt$Hp10000kicTbdDz+l z2@Gw(Oy|)G9Dm6?BHDU%*aR`7$39WkACZ9F1`2?SseRa51upggY2FSz@S)!h;3(gx z(0;YMem}7~C1cWNr3Rue)^SpF5QV_$)C!E3kr3Y!%>G2?m-nwJ=chu50X4Ei4%S~Q zeab7~C(5XZ&0J`Sj=WL{<;7VV2GWCbA(bJ$J&VEsu6 z$o$GJf!fg?UCUp2WkVM=@T3MX#e19&$>(!p|CA@RBwiqvgqS(gu8oj}ge02$UqXdfM1_0O#0A?DX zeBq__CVwCf1{jVNAoJU_0k9ZQ1FJ&DT@#>>Hq}6=0Pin=L7HX>t&gx2$ec!iM*unf zvJ{A$fRu1cfCQQqB;iRwRX8>XNTMGjKK@k{K5M#AMi(%=z5M}liI{f?L(o^18B5U2 zss-pJX#6;5xTr|u3h0v2Wi4{VumV`bs~Rvly(lvExZA?HahpCA=H_=2dzSEj#&2Tt V;W2-!`>Ox|002ovPDHLkV1iE&I=}z` diff --git a/graphics/pokemon/ampharos/normal.pal b/graphics/pokemon/ampharos/normal.pal index dd9818d6b055..af1e4ae876ed 100644 --- a/graphics/pokemon/ampharos/normal.pal +++ b/graphics/pokemon/ampharos/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 16 16 16 -88 80 88 -248 192 16 -200 136 16 -128 88 48 -192 0 0 -248 232 72 -248 32 32 -248 248 248 -168 0 0 -176 176 176 -224 224 224 -248 176 160 -127 63 75 -198 121 121 +90 90 90 +255 197 16 +205 139 16 +131 90 49 +197 65 0 +255 238 74 +255 98 0 +255 255 255 +139 32 0 +172 172 172 +230 230 230 +255 98 0 +90 0 0 +197 65 0 diff --git a/graphics/pokemon/ariados/anim_front.png b/graphics/pokemon/ariados/anim_front.png index c579c4c01492c742a68b81840bb08cea41c441ac..024aa0bebf9e98b4c1e72e8d2397ee354c54a71d 100644 GIT binary patch delta 1301 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 N00>D%PDHLkV1gjBX^a2> delta 795 zcmV+$1LXXg2Brp(7=Hu<00013M{Ml?001yhOjJdf(4c5g82H#g0002Mut=C#z_@_m zU@(}7AOOfHIPget@Q9dbXlS^&xcK<^Pyhf&4~obD00OZ|L_t(YiS3jzZ__{&$1l2} zMd}ce46Hpn1Dl&?w{=^PV!IM64R&S}<+@g)VPPp`amLDvuYZhLuvexgEU0XaI(Hx} zl^8(kXW%(@l1pPLVnw{c^4S}X%F`#tPheV;7{l0b89Dr=|$Jc95){Lx-`FPlb!RUQ!G8d3za}JEJ{nm} zfk=S)eo??XEs}%l;qc29SPGaTG(Rj{@(w>Ou3slPM1L?bA;N`A-f?w%Jw`v)DFCg^ zQG-bmYi^U)p8)jY!~hiD5}_lNn;JW$0_ZZ)9|bkVLqNU}+bx9@J`UmtiAV_D_P80! z0=#7v_mcp+7@YtI3~mOpK>I|05#upo1x-=r0EXL;YE9cNCboNl`+ovB#|XQ|QB~TZ zR&D&azkeSmDPR?J#X|{8>I=%$6F}k?B?Lg}slglINNuJw%oxVwTY(wiTGMb}f-ZGV zO|4_8VB8a7Pe8>M!I4_tvSzJAJqLl#FJFjGLx63Hz+rW8s%>qS0~X!*eJO&U2w))) z*d)5gPcp!LgI{BRAcDJAn4Gk)TdatUnDtq$sees?OVNc^KmjzOJ1Dv{117=Hcai8C zS$*jtw(*+bP4=K^Ive{!^n}ndz&lRrGa1n|o9BCYO8)dJ8!kqeEu8|l=pRpOLnrcj z3Z#=acfIi0c>YFt%_%UQxm!QG`97cN;FYCBHXs}K2lJtx^Kes;2YGK4`5S=1D&U{8 ZKNQ5$@ov96lzRXG002ovPDHLkV1lC)Y^eYM diff --git a/graphics/pokemon/ariados/normal.pal b/graphics/pokemon/ariados/normal.pal index 5939c4fcbac3..66aaa7bdb48f 100644 --- a/graphics/pokemon/ariados/normal.pal +++ b/graphics/pokemon/ariados/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -104 80 24 -248 216 64 +106 82 24 +255 222 65 0 0 0 -192 176 72 -152 88 192 -184 128 224 -96 48 152 -136 32 0 -200 40 56 -240 72 112 -240 136 152 -104 104 104 -184 184 184 -248 248 248 -80 0 0 +197 180 74 +156 90 197 +189 131 230 +98 49 156 +139 32 0 +197 65 65 +255 90 74 +255 139 115 +106 106 106 +189 189 189 +255 255 255 +139 32 0 diff --git a/graphics/pokemon/bayleef/anim_front.png b/graphics/pokemon/bayleef/anim_front.png index 3b5b90f511e14e66622bbd863e9e024381f33986..05f44e73b544892b06fe09fada1bef2560e52d28 100644 GIT binary patch delta 1103 zcmV-V1hD(#2-paa7=H)@0001tU!Pb20004VQb$4nuFf3k0000mP)t-sn9!gpQV3Fe z2#dWjYMc-d5D=t;7-~`g_U207y($0y|NsAstT6!9i&A1@V#US9bt#JC000BlNklFz~?(#kZEVyIZdW*F4;v75PxX7Tz>-H!8n5IkzI<$qpK#?jK}lTs z&H^VqtwetZM9eVeF+nu|#$$+NI8^n<;2s!@O)-FE@MjEE?;rROC=EWwkbon>8G;1} z7;#0MaUsO7?0^6Ey~2zOMDQgwTsI*|qb^_}fPGtWCXGap(+}Gkrs`03(GK5}g(QNI zp*Xn{Af?1-DWuu01c*s&dN)IdpV*4o2UG`Ut^?Z4)d8nHZHz$Ik3cPLBn#ZSiJ;;m zooym8Uu)cu+2hud7!Ta2ZEpC5uLP)gCXm+bt#NqqA%ArQu*hfTJWyL-ngev0W%-dj z!jXU(My_OeM^rf9sfjKY<8Gu_`HMSZ!7sA9^@@@7@t5leq$r0Y@jjgV>l6etNE}Y^ z7!fOo}t zklxw|l7IYpnNRVV!`F3%0t6p&m$}B*Do6!=Ehw)nZ7y8bQ!?oCb)v~DaACmPEh*k& z>m&_M0o=pcu%1LAD~k((?Lc5ksgJzjuj|+2OTk0x3~vk26JV$q&E9Yi zY=I*Ia6Kvml&i{=#p*2Rx|}>n)+9b^wi*F{hky3I1R-Q!VaG-Q`@Y-u0j%p@HasM` zV)Me*$9i^F|G5&|@GI@$4%ip|*vCHhhwLM~{HwwX>mGB$3wsLPkTER0Jjot&lVUG> zOfVGLV_x^jvd6scQDqO+JthdEFsSY^8iUFn)4GSs9`m|~ZlY=3g9%jk=w%0cLy~88 z)_*^tjnJ=m^}{=uac&wrxC>X$;PrXYR~^M6e~$B$T1w-kJGXwe#vB=Ozw&tV(`xbJb`djjci{ZDV?#jGE6aK0O2 z_fE%4f|GvG1cWm2;ibTN)(?&X!tLyS(0>ok0z&M@k9Q1BKX@e|#B@LRRQ=$UfDkQ% zm+A+v1cYcAysCb177(Ikes21~lYpQT?A<=h`hgy$L-NW9dqcpdsXvUWom7H5d_TQs z0in+R#_5^Paynb6B=-a{zG6TnxQhXE&Ja%o`pJz8m~_L+(Ay-0!ytampuZ;9gh;}w zf-pkBH%-5=Q9=L=b>0VrVF^Ko|D^v_2fa&12?3wx^{gR`N(cu=))0Oq0sQw8!fz>F VJ9y?**0cZs002ovPDHLkV1jc?2w(sJ delta 1114 zcmV-g1f~1f2;&Hl7=Hu<0000c~G1~3!P8r&CL5TU&j7Ub9^+r+xJ6pi}Qn#+0D5?yTLh+OvIjc3lSs0 z4-EdW_7D8AagAU8edh9Lzny#-AKWGYT|H92i6R+t)aJ4e<1H3P)DpEx_aR z6e=5#BXIvbw`ZBZ0g&g1cEH0LzkKSb(}P2RWmhAn>R~qP0^Cd~)wvr}rB1-!2MSRj zaNB$w$bu=ZunY!vfC7|aX!df>t}5DYK6FeMZ%>5#)PE`%hq5OOJGvK(VXlEF5TR+y zxd=}*FySIH<>16O$q$u?O)H>{Yd}rt0vT5DeLAw>A5_xROCE<|ivER&rRnxyk+JA& zAQWkRvUe785by`!!y*jsQ=~NhpSZ+rHW~ z+91R=jDJ6bazcOt)j0l6h)L3)p_J)rjc2P-NissskLhP@mkPcmJ(Kq0K;~9O7FHJn<>L~6m%!n+OLXcjWw{DQT9r0@Y4vW zO;H0=8&J6tKk>^5c=T(6e^y5b7?Sj;xf&R;xqtCc-IThv2xaZ%xGKSE_-R1f(4eITH;sR!n& zYD)8BGPI}%CMN~$co|sK1J+logL1rGq4n6h*P$kAkGpCtg!)1I7k;XrdanUo>Ia;y zQM$w+`7ZEFKR`h98|Ka7zts;5oX(+$Q-3`?cbCxm0fIq)5sGj~~-=SOA&Lbp_LQ4lJ2f%>9u_4R|tXHR|kZMWbCy6(qm3BFwi>C@P2}%X_*_=IqsP g1cEfmk3VTY0g{gUKIWa5umAu607*qoM6N<$fc0004VQb$4nuFf3k0000mP)t-sn9!gpQV3Fe z2#dWjYMc-d5D=t;7-~`g_U207y($0y|NsAstT6!9i&A1@V#US9bt#JC0006+NklcE+!``cG;kq5kr~ z6|bK3Gc$96fyV`H0RYc=Q{$L_Ef!JGv`BA{f?+<$q{v7UwiJl*~AP{@M&8KNb z_|30TkbmKGnKJkIUInXQ>;;8q8*}--o|eH-)=5iVg&PCEZAnwhW0DNG2JjvZ<9-s2 ztU5OW-+^EeIY&P5_w_sDYr(UejNcaEOu)HgTK3*o@S;Gl6;1@?Xn`vMp&p%q>Z)>O zv5TeV7s(^>Ch^g;H3;yF{d0+OE?Vi}K|sfG_%r%|_Wh_0Phu;!IQCxFi`e#cSGMU} g+C>ie9sjrX4Yzq6HIOAH9{>OV07*qoM6N<$f*veAS^xk5 delta 688 zcmV;h0#E(M1-u227=Hu<00013M{Ml?001yhOjJdf(4Z(#2vB$kh`2Clm=F*U5U7AC zXixz7=%CoRaQOK6`0&WkH~`RyP+(wSz`($(swKGq00KuzL_t(YiPe?8irYXC$0dVK ztz}{2_IA+&NE?$rPvEoJSZ=Nhu{$@1rF1TY#*o(5%@YK!2!Estt!*|1>`$bIVbr&1D_e zjPX|=dVxxYm&xmFe8&JuBPoM8vz})ON$Do&ewKJQyRB!fz4YD!Y8I}cc9hRH8WsRh zxq;x;PKdbTVt=kCS6$qU6l|7IyMZ{b>yL#y#`-hBhwnLToxoRs_s=;TT|hy={d3{Y zviJgEpVw|6q#A#GyHaNeYk>M%BUbosx48xcJ4C!XjTPb}xck5^N&@cWcLC_){l zZh#$BW-6;nc`uO1t){-Tcmtz{+$xxBJ2JvV2bq}`Eq{>2MoS}CMnAT|LYYL$!Ovc? z4o8zo5y<8pfD2wAAwm@Kk%ee{v{ElsrgcvG-egwV9x5_3lNQh>?@snvAfJFJg$VYU zF$o;V#S+i_L^?I;-b65>B64W#63zk7#)<%yR|{>XKx02Ny*3zgOa7-&Ef_$+-tqS} zCCM*CWqd2>I!fUdAl} zLXsgjw*_Y2gLtUkY-V2Ys|D_V3w;Qle$vy`t|@G|t%3vc%YmLgIlpq9S?O2tkL?d8 Wd-<|t)QNEb0000a#3*ylTuh(>u&Ls zss|F)q@==286wDA3nGMS)UnWq;u7?9R)>0P!y};nLQSQO;Q_A1sTc&BE`z1tmvv7t zD&3=z^9i`01_T(J?NmR0Ho;J0Lc|Fe4E0a*70Sdjo@fPJ+cli&})76CKs-Ma>aA&3F6 z&5qV!-nY%Uj)kOQZyUHdmyyjQ4I9tGqMtbD#|hAsvb2=ea(#RN!W$vklTa(Cce()n zax@lH^%om3sngSw2Q~no8nmjN4#!>$`=N~h_I7|zF@NbD+rlNl4Fa45fa7-;asdGE zg|i-n07pkMWId4HvH=kM;>YpWL0D*k|56em+#LzwgJ?W^C!)^#c(aLscr7^<^34XP zLV6~)q;(ZIzxFbwf9k1!vO;tkQDbW8O@Nq{Vr0_vTV0GuYE^QJh!Ewf1RqKag11~3 z`4l6E?0=Xb->OPp(gTL#=X+2;{hnTn4@fmN!k_$+{!pL-FI133RTa$R)`K%T$T^9cYw$+0pJ6MRn# zAPpcTc(Db)r}3u*F9w_wd_Q38Yyl*|763i#;D2}gg>CjdCwM8qZ4RHk9|Mt(fm}BL zsf7e6xku6h07yY28^9Q=*m36t>uRmdv6(KEXeXHP`jDo{&-_=~IF~|Wo1gi~I|I@J zf^->71pvqkAvl&oTnrGL(6W;JE)1o;=%O+ZVl1CvQ&aXdACh6rg^*o{j%RZ;hVv*W zeN_tpNNC(k+6M>0 delta 869 zcmV-r1DgEj2Ji-u7=Hu<0000yMG zPAc*ODKfKnMTmrIZaGDN0##T~{_4q9_}H z0JKFD8`5L|Yq}*0*ec4*T6H2suCefUI&DP&f8A)^SH1kr47&fIe$E@&-$j8x>8-?)b0U==sghsym0O{`Z0>M*8Sz?vH<4>IAeiF5v1^R zzyjCjkq$ole2y;=fAaf=2fhRF?$@^!!2GLz!vQk@#sHjJ0Z73DZ$lkS?qa^rVQ@Fn zXgv2>&q75Bi*nw~r5YxagT=;3=F!s{~Qx2H=0S1_k;(ZD@h-1|Q;7IL_ z$nTIJU6?IX!nvk_8+iTF>;rMRpy6xBW6xw_&h3#M5Q>1+{_me_`TY;=#i%0$^{r!9cd z=1!dpu+c~oY_b_J!1fdVXjid-Ht$DyZ`Cb-jT~fP>q`NvUu>=L!+>D-n*qTNC{ijG z=7D41Wj^0QH}3brvQ1&jOkLTY<4{KmcGo zo?G;PcBfI-S_!6fNQzY4E9s%spX8^Hh0MBPfMrWumb#QCccR*JW0^pfEJ{{u#f~S=*Nx*X$ zqh5UL4c0004VQb$4nuFf3k0000mP)t-sz`*!oizz{3 z7=z|9YP2Z;002Q+7=x5j)%J_-|HZV;YQ@FH|NsADL0ZKrDeilFp`(M)0004XNkl5ju741@~_m~f=;|F&xbO>?k`O{A4p%KV}g^D#C@UVpDgkN$}iN^9M19;$jE z#Z68U4rPdJ-$oE2)W%(eITV+mhrK&%)P_euf5T1E#_#|wa}|R??J_7mHg!!fs?O2K zIRdWRfB<8cIIARed=UY_k*xjxrE^84e~35-z%)&+AbtyYT7#daOTy{;ZUyKeECF&S zKhR^|sa|J{sz&*emZATNr2apQDvF=_QkV_B)AURKa;O3OP z@7PExJ0mNAp#}2TOvb2@fa&sI2`9?_2B&?moSO>u0j!gu$`o#te zYPWjLzy{!|*{ing@a)a72X6tej{_Xd7wY_Jv5H*rgfQINcy f<(~i1qrcJ*XCW5~JXLB+00000NkvXXu0mjfrcvJs delta 503 zcmVT7=Hu<00013M{Ml?001yhOjJd{!1z#zAV6RkkkDXgut)#^0AOG^ zn3!1L=&11U(74EWz`(%x`1oKzSimSK=y-Ux70(?200EFmL_t(YiS5*}PQpMK2k?`m zkhm2S;%EvyKsla(VB(00M~qV!wQ+JGG))|cksggQ+Xo=Tdw&52)KM4X8}JJH0uFw6 zrPa{y%Ay6+n>0~=J7^}6@>}S9stSQuw641&5=Ez2>N(-K=J^Gvv z9krJ_V;y4DR)0V#x(D%Vz*srxLlkk&o$TR~0wV>6TCg2Ki#`vuU^a?)@aXA#JVE{O z*IWw400000JX)YJ000BtNklHc3N0e=GN=jXA<{!t5T0Pwvy zntj7aDd%Ar0wNMB0N{0Y^d)NuY3%;10RZsYPE+VID*(3CJ5Uplmleer(E-Ylegj|# z^A&&T;v+do-m4h^z;h=n`DOA1wrJ>7s7ruad6h+3=nqsTL3_Y?EQOP zCm^7+9e)iNbHC{t3u>rGuG3PB8GkOi=-BQp8(6< z_D2Akj@$+@hu~CDHChR5h0~G7vIA%ZEPe%37dC|Eqi_iII=qA+CCmpHVPOQRc6#C0 zPA0Vj{eMbm3>?5w4U_%Q6R07Kr+T^C9YQU55gi7g1}%bb=`an4b=M672$n#AA1s_t zKHhlwxxi{E=F9=RPbf}87_Jk{U0h#0q$O&&_}*9zx3?M}Ro34HSSYgr-qx?7JoeaQ zk3II-|7@^c>R(v^d!K!YkmsFv05W^{0ui>!3x83(I=-m%L;WBmxJwXy{WIMJgt+e} zuZ~cT^t+xNJ`A^{Y1;$p7ZSwt;nrB3c6f6Ebp8>Khg&j7IRSv}3dHGvAU%ZBPA`CM zK@SMp#d!U=B>}2r;^YGI0YF`-^$c(b)<$`aWDjs%&`!_*yGfS-TD=FbS=_rMXESi? z(SHFtg0-UWcM^RM*zf1wg=G47VZgGVwNumi1$+V6+D7iRVE zCpEuY&Zbx}$Ot7h`eCSD;Ddh(C^EAs3x6Rc1q?0VbPQH9_vQYWe8j@>7K)KLEg zp~=AcFf7ORGeDjP1j__uJxg~0;srybCT;iO0ytlVj#H1(ZaCnY6^>gDbcD5Xd`tM9 d{ISP;`wJozBS8h~8pZ$s002ovPDHLkV1gCV?wJ4p delta 1108 zcmV-a1grbt2;B&f7=Hu<0000}@jIJm&* z2q;(p004ksP*5ls_~?MxxG<2Q;IIGy0001fzMgvk00ZbrL_t(oh3(frZ`(!`0PrJ0 zfKsNMDM&8h05S!X9-4u=LiQp+MySF`v>4$5cJ0M=ap_P4vVRNox)_k`7?ulkC=df4 zG>)@(i&&w+q<8S$8LF?v#wu5)C!|Q$yQ2umo z1SnJ{L2<{q8GmJg4(|&v#14K8(m+SeyJ`%u{Y3Df35qB^z7xR3)^!S~kg^{SqawE z+|J}A2rEEci7EiaPUj)=$U%k1pq&7a-5u9%k^}Fbet$1o0OOWeoIv#peDRm(dE>P_ zAQP|R4$d~4-WZ{%L>uEbqV?uMA8%c4B4k>~>i*Vc$5U-5V9ta*%?7t4gT=LvYsUJ{t{s<2(Xa^;7EuQ-qlO1 zmjY@(0*gHH>Q|5sgNsG&!4Ex<7e_0)-vK>E@BrK!Ghx{g>*u zkK}o74Zn>4HKx`God#GL7BbEICK6@lF^_rtkAETiZ~lysY6z{)5Rz8c_5KW@)vN5) zK3$!2_@(tI%C6wU(QZ#WdZnCR1MWrqWE5%^M`&D zwN;8z6W0)@fXr?O9VeDh-1rptL9o~3#1b7G1Gx+2pi%Yj7_<|BZDTpO7pf;}u+z() z1b^T-20M-&oc|oi;k}AM$8lb_Boc1KIEjF0qU|_Nt1Lh?p~PK2W#CQO|1{u&L06Wi z0?9vF;b0|dR~$M)327fb2+n3Sm;g%9;&3})C@Hujr8PvYII2$qW^*4m@$7`4w)Rwkh z`k=E*c#Wc)0i~@C21+0Bdmrd}5ods8-Lf7w{=o0Zepe@CH~~uQY>XNWE}xM-mj9lO zIIXl;hHQ-LytsHo?lcIOc5ZM6$Pj))rQvOv)M10L4=4-x3}dY~_6=RvUB|h}0!=`D zfl#Fvd_Fk<3{IFZSbiD+bZ}0C_tpoma{vpK&mQbCvvc!NwAp_xGl7Eb{0bth&*bNk aiGKkr6DrRT0143m0000c0004VQb$4nuFf3k0000mP)t-sn9!hFbHyoA zlxn2r#gqX5%~F)j<_IZT0001kVp38m82|2r=Cmn$z2>w400000JX)YJ00064Nklg|DU@jpjHH1z5B8co|$%9JLhW>LVw`r=h378R0J{e@6AKe zZx|tnjN?eEYML3h?IJLjubFX!Q0x+?-7}->gkl$&s;406RsZV+dzuci{UU0qhBiWmOjt4IrKQ-vA|AT12@a zgp>kg9{{@AbAK*JLUeoV`B#8e#iXH0!mMjw3CGpcv9lJR0Cd3L0=oms7U#S5o!k&%9128G$oqs~`ckKW=At(<3paMuDQSsvo zKIy@q2Vk#^jFLM+%K1Ww#DcS|0+a#R-TtWIupCc#kp#0Op&riP0PETI#{sz$Ke-EIZ{002ovPDHLkV1j*)B-8)^ delta 643 zcmV-}0(||11&{@h7=Hu<00013M{Ml?001yhOjJdf(4bgwz$j3Vc$nC@m>}@jIJm&* z2q;(p004ksP*5ls_~?MxxG<2Q;IIGy0001fzMgvk00J9HL_t(YiS5)eYui8+0N{%; zNY0e23U(m@qYlc_L3z+-5j1dyCU`OELEL&t2c?TacA?j$V1FeIaS9y@4S49_v40?w zmISOR?GOT`i>CgOo-FGurRQ|%&>?RShu+6~Psg1Ixr=`tl$!Nh(*UqxF3dCZ_W0Y^ zut+dO?h~RNgSv~zx5v{}u%XJA5%GDt)D2$&8XXf=c^FZi&(=(blsLr0f>+ z6k@Mi<#W);0V;MUaviT5{|p9M0mP@WxJR`Ic=A1tzLF|c5?Zo#4PSf@GK8VUy6fts?Tgt09ufNTAKL!ffU0^Ma@`yH6W_! zubasP{1CkTx(XavF`Qxu5D*Z>iz)c{_|1cZ|D>dx0000000000A@I%!0005bNkl3{R>Rw|WBr86R;Ykp?A z65)PE#Kiz^sx$817j<(Juc4VMYro$YA#RL$kiOjSnGD$7FBk*9@Iz-K49|DL@Z&QA zmSySZ5^TYk6Y(V#Cg`dI=*iZVA(Cx*~;x|IcfDhg;mh&S40a1k=C8S!x zgdd*@uYNv8D}SZ>QMV@ERuLt%*0KSlEbEF+R`ODwTd!KY;&y9shYYq0@kOo`1rB=WhfAdr#nh(0>q545O#< zKVV%B>dWK58+xpOyaY_)|Dg9t{6FA(7XJ_UPUHWecjf)E1)N_7RRX>8~SC!XO9Bzd3gB<=p0|vW#4T*!jpw(~w zzo&Q2(mcDp6`)yq9|`*@K$`xM(2fMMMiVYU7{zagmW=iWM~9rGAnMZGRJypd5q~;rVxfbRLfXz^L$_*U z%^TFLK0+Ts@Bzfxck!nFnZB=C1VwTPcR9Z#-@RNoM~G6T{<13d0zlfEi3(tE6#zIs z;r-|uzH9f=8RutLvLo%o=|jr+OC=#O%(9FkjA?cW2b~;jDOZX+EK&;d%z=hH9&6E7-1KluBv4VGYWr;xsD1&xZUK-m zfG|INFHtiZm@89xp&nsC`@--BX?mynH;gYt`n{AYRe!3~zf^HOKw&+=rg~75P8SWn z9@NItvB1}Z+IShj0wS&+jI*Vu!=JAQadv^ai-LN9&Gld%?wjhtI^5ZMpwnLmYmnE2 z5xLR6x&I`sgO!!i2T_FwyuAU^rn9}8?_lR8Uzuz-wPi`YG?;o&4L@3tWBOb@SOYqG zTYi%Ultd=%A4&f+F8$}9>3_zhzoAq!AA$RT5Q)+Sp_y#6*U|{vH|n&{**P&Q+d-+{ Z);mLijbH)s@B;t<002ovPDHLkV1lBt3oHNt diff --git a/graphics/pokemon/cleffa/front.png b/graphics/pokemon/cleffa/front.png index a8d989f263c27bb07603e6760ac8a9c935f5da57..5b28503ac2ae9ff943ae30ed7f2d8ca5203e847d 100644 GIT binary patch delta 383 zcmV-_0f7FW1C9fb7=H)@0001;w}I>c0004VQb$4nuFf3k0000mP)t-sn9!i8P*DHX z&HtpN&4YttAQ*E>F`Qxu5D*Z>iz)c{_|1cZ|D>dx0000000000A@I%!0003DNkln7ok)NE_{C&y!N;s zrBtd%+lzQVMR-I|)hd9D<@rP<8$~gymLeFcaF2nGGzebFV8SneprZs7-Ubta3I4ni zXyaxUB82-S4?y7{?d*>g$Rz**Q~>8SR0E(EW8czhM*u6nY93Zk1;NbgkMsNTRA1Cq dtJV51{Q?XE2zS&8C1C&n002ovPDHLkV1h_es0;uA delta 401 zcmV;C0dD?|1D^ws7=Hu<00013M{Ml?001yhOjJdf(4eSLQ25Zu_@JQ3fPhdiC|EEc za7Z{15D=JvaQOK6_;678n0UZIKmY&$0001Kmk~%EFQwsedC%gw%lvBsV*vR<}aa z;2S_zj=&u_0T;sM-}ISGNDO(3vb>+2&sG@g)8{`Y8gu|IeisoS_B#O1&cnUAg-*rH ztwVi#!*ec9R!=U_KS~acMccNNh*#}3M#y)-E{U(i)?NVv;K5pJD6m+j*roA(Ma|Gu zA3ZW-g5VH%#(&rY@}O~rF>nvj82XrObMy*azWAF8TxJ2}BR_=FAuudX-!S1)Z)s5S z1HZl)PE}2BQNjaJAW=2_SCnazLLU1^Pe>5SuVgwS!QMBRO*=px04(|JRV~*v*vLex v(vL8wdlsv?b6a_F7w8#tKd(N0{wnX+yhq)H*SrJ(015yANkvXXu0mjfWkjgU diff --git a/graphics/pokemon/cleffa/normal.pal b/graphics/pokemon/cleffa/normal.pal index d6dafd7980d9..c4944c7c6634 100644 --- a/graphics/pokemon/cleffa/normal.pal +++ b/graphics/pokemon/cleffa/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 168 80 80 -248 208 200 -248 160 160 -200 128 128 -80 48 40 -88 48 32 -112 72 56 +255 213 205 +255 164 164 +205 131 131 +98 32 24 +115 74 49 +156 98 8 16 16 16 -152 128 112 +197 139 41 248 248 248 -248 112 80 -248 152 120 -192 64 64 +205 131 131 +255 164 164 +156 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/crobat/anim_front.png b/graphics/pokemon/crobat/anim_front.png index abf3b22be46eb2945cc395ee1587e422dc0951e8..9275d830942664f0889805238c7dbc8bdbf96d01 100644 GIT binary patch delta 1116 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 delta 678 zcmV;X0$Kf~1+oQ@7=Hu<00013M{Ml?001yhOjJdf(4b%#cz8&duz1K25D*AJXdq~i zpjgOAn7Gi80Qk@VumAvPXlS6Ip!oRs0002_3l9$f00KQpL_t(YiQSX2Zrd;rhL3`p zqMJn75ZWoC6lg0Tvw(*#a-bk<3z*&wBt%xJ0yuT>VtDS@F@G=7N61^`37R}ZkF+a` zlDHSW#iITX|NT6j0si?4LtvL~nNVIpv~Ut$%8L?6v~cU;4B*X{Pg{83cqmGMi~Y2P z(bxLvVK-%A^!w5Phbar}FXWwhyf}<3yi1Q4Ldx|CI7G?@$Rgr%DP?&)J{;)6n^{D} zi;a}`9kAokr+>cg*T&!uIv`c01?2Un2VjV}&a4)>HaKN809CCOvJsneMh)!j79P7@z0MLQS)*NfE)V$@#*J}Caxz9u*uiv`Gu)kwbKRwtM9L`PfDqYgvTNupI?3} zd$nw!$$uNB)XWViT}=|W058`7W3G(g#oC}|p$ni0G&!T0Lnka@x)N6p%2o!*=rllB z28JjdJtzX#6=O3XZov1eik5^;4V$33{`EFN+8hr`qMx! z+4X$XLr>vcJ{wt(E`X`k)zD%9ATh8QO|Ke!kstARXM-N)5ctpP5ArLTAtXf4_5c6? M07*qoM6N<$f|4jZ{Qv*} diff --git a/graphics/pokemon/crobat/normal.pal b/graphics/pokemon/crobat/normal.pal index c8b2897700ca..5db72c9cf364 100644 --- a/graphics/pokemon/crobat/normal.pal +++ b/graphics/pokemon/crobat/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -96 24 120 -120 72 152 -176 120 200 +90 41 115 +131 74 205 +205 139 246 16 16 16 -8 64 104 -32 104 144 -160 88 200 -72 152 184 -208 144 0 -248 208 0 -176 0 0 -104 104 104 -160 160 160 -248 248 248 +8 65 106 +32 106 148 +172 90 255 +74 156 189 +213 148 0 +255 213 0 +180 0 0 +106 106 106 +164 164 164 +255 255 255 0 0 0 diff --git a/graphics/pokemon/croconaw/anim_front.png b/graphics/pokemon/croconaw/anim_front.png index bdd5340fd5ed0cc33fbebc7fdbb627a874c59070..3fc9ff81f28730f3aedbf0549c0b431078ae8b48 100644 GIT binary patch delta 1045 zcmV+w1nT>M37!a$7=H)@0001tU!Pb20004VQb$4nuFf3k0000mP)t-sn9!h{5Fr1o zS`ZKr|4K^L7!V+0dmxLwYR%1y?&kmh|9b!c=0PBfVgT;6O8@_2=^P;y000A=NklwYa2%vEjfGCfYvyOq{(H>CrAhMp`PJ|4yBEEnGB>nRV zGr+YH30O~r%z)tcAb$g(XAYKBK=e-@L8?pY8bbr90~O#IK`QC-#Q_Z^>)y`d0+itZ z?Mx1A{$>F{DfGr!A1S)U4)h`LcMOn9A$@|eDZm84J%1o-E&`b39q^uj(6dowAIi|T zF}$Be(gzF^U?K!|0gt8-c5E&bwFby=u!bugAG~igBZY|~`g{}ud>%^zob;0)1UT@X zjuQ5vW}*)2fM5jhJWvRYu{V7<9Ky27b%dfQ(kAKzJAmeR1LQ^IuZ|FX4h(p|hLSpE z1#}rIp?}IVeWs%z93eM{A{oEEZmaiWfbgnU0DEr(EV_4I03=jEvZMk@7!434p>=>U zmk^>3g&)t2pnBU83vJ(rl!t*KmkdPJ<0O|q+0S^8+@T{#d_}P2l5Z|RwLUDQWM?A) zKl^3GgrN1c0f3*3-;!5%$LN6nc6sJqmtFRoc7L@Ht`@@8LbzH8Z2zH!fc5r#x`n_6 zI3&Knx?GUkcHu>&`n#0GO$678+b*f(2>+V63Bf%GH=vo!qO<&-Ei1q=26)j60DT(* zCV5UZD1A+kH1t`^Z)Y0?n!Gmvyqg;2u9{SjC-$_~-wYsm^j`fq71e5i-QPKy&G&WD zOMgm0_PiBB*1K}kYf{-e!0f_G)^{{g4Fg(8S!xbM%EojgbpWR(h#-ZK0YExE4VA!o z0kY&)Q`Lj2Uy?e#*V3g_f?)))Ue!}gCvqfY0a(iSrM56Q4{AE$K$6Ny3TVp`w8lf4 zdN@+Zb4Z!iu+RQzA@ma36v|qHYYU+RB!8yCl-fZ%5aLCtdTt=(aMVEPfKh)-6GGg# z)&Gq!4yHDJF2FLvIKou_n;Hn!+7xIDVKfjtwR4 z4B)ka;Q1GUq=DW*aP|-S7^cTP{ez{o5MG~l)%4mzus;4T!qr0fJ^KXWvquBRxDJ?9 P00000NkvXXu0mjf%xmHE delta 1143 zcmV--1c>{d2!IKY7=Hu<00006JA5D*aXP*}()I3Qqn zAc(kV$jFH3;Q09XcmM$4Kp<#P0LZvt_~3~37Ae{Q00aw3L_t(oh3%I?YvWcB$0Y>v zDUkK{3$*nIaCsZcO*Rf8&fb@jp0}7t>Y=3|@KXzGD1zr%Xn);9A=%KQVG9fU1?t># zYu!_zxg`f3eDd>Q58X?w&Pdr7q&H4!E_>*M5Xk&AGkS0I{{L9kySUbGiQ6CE6{zps z39v1@v1i?1@%TCd&L^w#*Sot9RsmfE_E!S9ZUqh=uL2(V{y~$C_v?>BfF28c{roV5 zqy-#MI{|>?n|~-wIN(_T@bH&$TQNW!#{g%)j@w)f>D z8HcdFiNIqc;f%M&lgVY;0(D^Ctfsp)*?gr_fDPt2T9ebW0$|?bd@`MObQ-f6(zn2& zxrepar_<@BzK9_)XCUBAYYzc)4{O(_)8F-60_~J*+JB10)^taw1jxvfhAca;#gZz3 zl2S&cVC^f*jjl3%F6qp?D&QXbI8H+3aRSOEdNfaPmA%P<05g<;kB@^K$Z{Z({c?}a z(Q^!BSwW=b(Y|N30Viq*@I!`GMrrx^`nsS8*%NOXKH_HG~jNDi-*L8cx4|Q-9j=lrjMAFnl{_jxd$*g1~(B{9VHM z*#GOlFZ(v2&a2+P1MJ4#fOS;grp+Vv`vh=uk>~%Y(Y?RF3fOIQ-&-N?b|W_kw*dPG zycckM)d3Lsd2fDVI{;Ah@q#7C%Szr7Tk{MUwfnSb{X0j5TN z8Gk|_FKxzyxXMRC+I+R`$4nDDS?0s$)%D9zmN?0egPY1%SZsNHf%8JUc{Ge z&L21hpxbcBcZu;iaQ?vBrUH6~05cNK4#snTz@50$(Q|YlinokHcrsSKAvY4fk8%OY zQ7|;8a8E$_g4D@$SL6Ep1V`pa0^+LVpnt;OBUMtKP-Gjcl(p zfG<0ccvV$%zs3Ix{=nSFkzRnPik6#*<{Him^g4Pm98~wg!D*z45}wwJ<)HeO4(V=g zf<}u>n`DvR0Ao=21H)FM@Tz#UAYeI@tt#Ne3O&x~4P?uKerl-U$Ufv2BSY~{O>j+k zVF75#08S2c^bCOuqq>us8x}ytffO|)3`yS21|tV>U6MgC`qjcf^eHYF|3C%;J<7QV z82@0kf(Q)+>mTwa^1n0w!E%(kxttgyfEL8~cKc0004VQb$4nuFf3k0000mP)t-sn9!h{5Fr1o zS`ZKr|4K^L7!V+0dmxLwYR%1y?&kmh|9b!c=0PBfVgT;6O8@_2=^P;y0006SNklu&5I41~i@V&?|D|JxqhTtd6j2GS$-Pu=cTsxlvAY=2Cq=`T9M{Z#+L?*iOw z{yl(8dIh*A5chHgfaMurhU#aB`6*ydfO&Zg$njIavMf*9(Ez0J$N-Z7h*k~4Fo3sh zrN!ic{22wPJ_UH^2LxU>V$+|;z5|lQpk9A8PMiraW`Wik%&<)uvp}oVj=4Z+C)><^ z6To&H$8IabV}DP8#q}c~c?&=&hYum=ApO|iQ1T$DURD=EfK_CyAwi-)PqcucN_ePV z2tffn?jXDYXk-s2A7T1aGw`XTLpc;cHjn@#8TjarZw7KJ^`7lu77#B3ax%5C^{WSf z7-hv)ze;yo+~}G0n;1Su(R*Bn0$l*wm?+O8ppjR=XMX~rPNP*l#7kdt_`HjvXW|CX z5LhkH-4sd^a}8~DS_N_$5+TWh{QA2l zyjrepMSlrhJsqphIe@?FGeF(<0j7L*z5qm+0lsGx*uW?Nwt-dwowGy`DHVM@6hhYb zU9l+Vo_)9i9kb*@Bt129`&a)R51So11Fx?LJ+tJ^0#ekpNQPY>0s8E>j0GX}?E^rc qT;GOQwbN-}{O$6|T7U6B;vbrmC2|t<8^8bn00{s|MNUMnLSTZOcP6m_ delta 669 zcmV;O0%HA~1*rv)7=Hu<00013M{Ml?001yhOjJdf(4c?-2>6JA5D*aXP*}()I3Qqn zAc(kV$jFH3;Q09XcmM$4Kp<#P0LZvt_~3~37Ae{Q00J~gL_t(YiPh9GZ__{&2XIH0 z(y3BvJ_3AzNLS*}K&z^udxf%BifVg8NS6Ez5?w4gkAbq$B7a6p-S`4HTeiwf9lEu{ z4ViKsI>18AJG*7D@7$paSc)>d-@X6k?m33>FFu`n>aE8Q1=h}kK+9-7*)bk9EbkC7 zUp4i&hTH2+U`XI)BcSJAFxqPZyN)yJYU_cu>miP{;O)tQhfxo8VC4%UM(=zt(t!^y z;`8rGKh}US41W=4XGvd|LHk3T_{_t74RBm)f$=FuObOW6H1Y7o27x`LFq1)&rkA{j z@ko7G-S!~e_$D~wQ_Xes(&?-On%{ArX4$6Tp|%6R0|)9otlmts>{48W7^yo*FcZQi zpx(pk?`if!ECA(6wN*!PJ;=5MmjHYl6kWD%*it5741WNArMU9OX!}>WI0t!Wb{({j z9U3Rbin;{Vh_Rd}yvlzSz@-iq@a)(vKwbbJg6ba4&nHyK^HT8YXs;Q4q=}j!e#$B3 zh*#HJ9VQosw@r?C^#rVKgJ!Wn5=>OUFjmg67ol?!FavrqKi@xm;)bI zjuB%IV}I&@ozouX;_$++0{KGF=OgX#C(uk(Z^EXcSAr#|fJv8Jf~6p^sNE$AkiZv0 z0$v9sC29kq5QXsqL%byK|F)gQ3#2XBj_#Ez`6x~LgYz*Sn|~;0mSt*c>iqgZh+#pk@*1V=%ivTVorY5vlG-frHh|Bp&9`OC2Kzc z8vVxDbzQA7b@2!PJ;1CYYfUxlZEG!{`mF`F(reo@;I58`wb_m(5Mig=@4G(gqK=16 za?Tk7(7n;W^?&+3$r+%VCLRUi^kg0Ox%Gd~>iTfKcx21>il| zQ9wSM?JY+^2;K!*1DJge_I&#*djUZ5<5q^%)*2cPlC(eyh#;q8wbIAy4LDSg_P|31 ztn1d$zygr|;VHnwlnK@}9AgHo;&%bvF5*Ad9{jf*cz@u~BLLh_@xbeqQG){b z$UZeSHGefV^)ECU+dl@B!9hwn-2;T2juN1IfKYF&^}-=~6u=R-`kPmhEF6C;pd-Mu z<&ggg&>Y}%Dy52TMp@3}f?y_W{BX;4nZKiSKY8AoKz# z{^PeI9S9hj9~?qE4-h`e|F75cvjM;yAWTjD34HBjE6vw3|AW}3){sy|i1iHi(Axk%3uzyKbt4lWz#$#whWNd{j z#c1f*EL~$Toa`agV9;}x(qfRExe&KsAs-?1-N{2E-6^G8zz-x0{~zz(Jq!MSP21FS zE(;&K7_fAwK-V4JDLn-cOC@4|os@_guxzcA0=ksZZQDYbIQUC(zU>eWAemRU+&!JF z0qm61-9xWhA%8+AwglMnJg-p|a=B?sPS{6)()XlHnr#kbo9s}o(*v?gTA}De9&d98 zRm!doNW0nYr@-SWKBImNaCO%1hka6R@j-I{0DL`bhhe{sjGY-2fg_klaR&jcW>)9G z@iYSHgde%?rgSf_Ym4cLWhWq-E0<+|=ZxBu5@?gGd(Sb*0+V?-wi zTWH))8X*1#Vi=%~hScHipU(#`xoN_k4}(s)jt7~5fi?j*Xlj$%Iv$XW`5FksfQD5| z^3<2Z)xFU1Zwgb_Ihj2c-Fc69HqZn2LZQ(~%g1hzGPH{~(u1v^?htqbmPm zO<=$H!Y2qw%Y>K%5lHg`FFzOuw}tt^?5?l z825>9F1tnXz{gjRr~y$I4^QL+!!Oo1^%som4{{G+UPy1Vf&c&j07*qoM6N<$f>45= AH2?qr diff --git a/graphics/pokemon/cyndaquil/front.png b/graphics/pokemon/cyndaquil/front.png index 448a51f8a91ce20152aaa0f05603df43fd0a9f49..b8b7e71aca85e21c3b6fe01c6fa111d6a792850d 100644 GIT binary patch delta 527 zcmV+q0`UF31e^qr7=H)@0001;w}I>c0004VQb$4nuFf3k0000mP)t-sn9!i!00945 z04Y*ZIbwTagPi}I01yxm|K0!?IZDN(YX9z}dtxBw&1$TytoZo&y#l1x0004+NklSZ3>n~~oeTKw z=9>Zm`R(Q}1>?M{w-SuM;W`DLV|V`$bn@Oq z2m!p`FMr^#1wL2+{0`4C_7<@70H~ zag@&z@+gP%OMeA1#@5VBLAIDcV&8F_#ea$_pqvZx2VtrLvs~euAZNijC>%7rXBEtl zsn{LRr&Qqc_%nPHVC8v~CBR-o$0At^tbi45D*{*_&j)a*pw1v;6NC^u8n_9pf4l{} zOw9nkV~tf1jHkjht^5bTfxqm)!Ve3MsJOJE?WXVgPk*u~k2p=jS}PmhCy@FX7rx|T z4pKo6uACe{O}q$LvMv;v0{aZuo0g3^!6uim5UZoDSlsf{Rr!n|`H`UD`euY1I^5j?f1EgpaH#I=I R&;S4c00>D%PDHLkV1iOD>~sJC delta 559 zcmV+~0?_@O1iS>07=Hu<00013M{Ml?001yhOjJdf(4g1=0Qfin5I9gUXnAs=6vq=BL~uy_2Dw2xDpFj!<)ol%(to8}2FWNb7^x{;O2`MO zOIHQqqEicjJi8SF#?FO)h<=39m)J$`&d!1l5)OVp{_ovO6y;RMTpB+5VL?-k16(y! zqxPRbG#SKvmDGq_&~&A?6;z?4>bi!Q7jX!5kwYN+H-z$A{hI=0y)1t+>d zDA~4cnFX#px__XpXWj^jsQmCW6llkqBvx4fjw@+ zckIFQLKp+Y^uj74_(f3~WdNVJ4l4}%2Dj=;aS8BHuz#=k5p$u7e9C4WjA(L;M!||8 zS+gaeVT!)h#D>IU%N4xh#!SKQHn|2*$pGg>p(zlaAy%r8Wh+Q1ZSY*l;(<~I9~KZL z^im*{2lyKMFkS)7L_$&NhX)Mct1aPGwqE9ACURlH*gd?lfvm-vZP*=Sa=~YFKV@t# xw_Bo5qi`D=C|Nq6s#sB7uYEl6I=8Mg}VgLXDD8((_000ISNklC)OT3`|fIkq~(Q$E_}3iH}fb`lFu0@X_pAl5JU9rhlnE=EnDT$NYfb2$sih zCd`lJXM&~X!+e)^i39~?zUA0#1}MR7!E_e>`bKDF7A2S!uMi7J%dZ;2B7@-uv5-cy zh6Ib@mtcnxDBDc}8({B~hSaRNwYE+GxFSRY+?+cGxU0CzK!Dt)`vj<9p>PkrAfV?g zc%m&Z%n>f39Dh5r}e zFL?Q9W>^Ek2>)EOfm<+PrNq!Bkf{LFXo1Bh8dK3@rF+xYPASl}l)8wK3|s1hLHo{V?A6M*Iu3=yi} z)p1@nz|4FJj3wo5lXX=VkcV;tOVRvD2)xG5;b^Ilb4#!RqHPL}brfug&S~8D;K!CgGV&4N2~V0VblI`y029b|;@6R14{xwML42tBpo
    X?*iEic zUc)aqU{}1xfh#+(Fnl3yp}7E7rOL)kVYp=oSP(P}R$hf#K=#yq0$B;rt3C8;wz0<^ z>|g{tNPVUZXw%0H-Sq@zD~SQS^?$&J?#U?%IkTRvo+Ui>EJna~yc2`%YCBqeQ4Bte zw;(10+ts|K9z#Kh50Y5`ju(O;gtW@Ll3-W!IR?=HEgiM3x^c2TU<6xc!0OFAH(nzd zfm?WA#2`Z$o(%uQ#>HC@WC7$7iQE7*1t6$oEj)60t5>X*cn~CjC?Rx30Dp-!ofLpV zL%^;GU=6SqXNFD0=!pQA2Dl8Le$x{HE)6h1*8dwGGZEkt!Ak?2uE>bD&rla3Dh+T!klWKJ^3M%$ z?m-~}KtshTOE)Y+P>2A{B7ZCUTDDVRKqdlkN*rC3Q4q=)k_a#)z!DllA4P!CuMAo1 z{XB6fPyEfHk1w15sOt)k{CdzyNJD}Zq-SrZBY)~BJUEiLJ0QS}AcN<O=5r*nCf}9fZ6b)d!z{ z*!`cigIp$sv3yX`4!qs>ZoKb7OFPJ`5$Na#W9?uH8*Qx$2xIMFiuyxKKp1ET(S)A_ e1o$rngg>kOVw3#6JA5D*aXP*@0PkU-Gr zD44j2==k{f_`txx__%O@SOECoh{(8L0002WpEgkd00tXLL_t(og{_ypZsSG}$0;zv zwWjPBIL8k_V=U4%&H-#O{UP*{x*(|tt`3Nc3kYiOf@^}nHh+7;2$WVxf^*UxQYE!r zL`ri=C%JJe=ovDzONk$%bxqc`ENlLpncbb;`B~HQ(a=6JTINRtr(2utjlGWwI{EuL z?I$G2EUk4xLug|s(G0Yl;2&V9&K6fl{@b!2$B}XAtQh(3{XD@!94rVyWMK`Sq^k_Dn z%qE$jm$DElo7J8z2MVGK-o5ZDieqKIpUWhp)aOxIp_Af%v9RTIqYKvOVI_@!7C1mC z58X7W3Zw!=pH?b9Ow-gV3z|&x0E83>amc!<^}J}u4_J@cf+F+;upsidS$v#FJPMLn z3PhZySATvng=Qaj5FiPJEhAX$b^1fWLDLU$^Wgj|M}Ndo=L0Mv9bxAZcEK{xP1qg4j;n!Vx^gEskfmW2$|hwk+`y0cUxH!z&Sp z$$wPVwiN~9^_306PV)27#LW`NO99rTAOY=QHgpoam4bzxi1bR>Hi&{i3s4Z_@x$V` zW2zo{UhRn*xT!*XMyF$LOW#tE@4BW-hx5f^eAgCnkYF5jtoK%ju zM|Ba)>Xp$eW;`3RFii;L^M&-4JrJt2v41cDOdTVX96Wh5Oz6<9vO+&4g)6oxdps$Mg{~QT>MZb*4 z7yxgggzVTEjare_^Lwu}WA~)7v%6a>z+!*i*maFoZR5p>al8$`kWI0sbK^K-j(>$c zkJa~Gba1mjyrv^}_J{)=z6I=T0Ic2tPBS(Piy!@IojtY^fnjX_^3C6av(u+Wt>DNo zoNL~O$aO!h6?ldLc+Uoyrdhk<_CCg-8;ouRqh>KtunpnNqK4PlU0=-R2nD0_*#{mW zZ_#Qu%DFag_6>M;;R%WpehBKk&OALa0R^c`MVH=a2sQwHC3Irh%3-@U-@QznG3CIH8?#RCBXL&Av4gwSNYXT%2&wonAY%7lPtB7cZc0XFr2 zhPSySgcSf}-5LA0>i-FNk`PuoEW5KU0!bKn8xkR`BCNWz0th0AG9j$GbC#i~62h`O z$Fd(%1SSa~--WC@n|kIz5kkI9tL~f$l%rxNSaxSiv4bRput-7Kh36@OA_TK|iK+K2 zR9vbELEEVwVPYi}LK4E7fPeAjP=rwZ7en>-OC>=n3wP{sSjn WM9kuFe69ch002ovP6b4+LSTXffg)P~ diff --git a/graphics/pokemon/feraligatr/front.png b/graphics/pokemon/feraligatr/front.png index dda82ea749535a0385fb313f01d0f1d50abfe8b3..ed0e53f63ec55d212dbe773d435257c93dca9bb8 100644 GIT binary patch delta 972 zcmV;-12g>32i6CW7=H)@0001;w}I>c0004VQb$4nuFf3k0000mP)t-sn9!hu00{q! zgAfo9_EK6YN{d>w_Bo5qi`D=C|Nq6s#sB7uYEl6I=8Mg}VgLXDD8((_000A2NklEr&)+Nz z&+%u#*c-!e7dsZfPBPpY*x&{XFnE|jk*{w=tGyUtFuh4UkfU++0HZdMyTl_cwk`pq z>&NWF0Yv;PBum!9xP6@PqwKW?cb3t^0*sI^~wSNgw^}a#Q2&iId;C5c6f8xAB zjuGoSH-Ncypg}TS0SZFp#Q-xfd&4P!Y(Hq)DlY)Ng^s`gbfTVZx>&;g&;u3#(V+p~ zb9NCkF)F~ipK}0xy`@XBVp$Q4#sHLh5`cCNUum41*P|flzGQNJ2f#_bUns)zCeM|6 zfKny&{(l?5DaqztXs3VZ-q^|Gmo9)nOEn+*0Kn=A<%BwV8@NmxsIjlXcu`JC=hZ0C zhgyJ_Xn7#`JqmWG_8?Xv1oPk+NQ583x77Bdg3d0KfkHueF_;KmKFBZ~p*S>@nV=gZ|_I00006JA5D*aXP*@0PkU-Gr zD44j2==k{f_`txx__%O@SOECoh{(8L0002WpEgkd00UY{L_t(YiG`HGZrer>hF4$( zUu`u{5cmNYj7eGrTtLz09)MX=DbN$Kqa1Q0s7Zoeioh}Nf`1V(S0jfu#~`tp_KuIy)Y zdk+kZlUN_}%YW!tkM{xN1TprVtNlQNF`};??*|Tke}Z%wV%8H~AO3h7NbIL7M0}); zd8QwATo{!Y%>Vk#Sy+RZ>62ZcU-G{QpTF=E69GEsFe%a5^MD^y{+@IJi-0z(%uJn3g7kPO*a3cVobw z=?YWs@)=A@^H5*XvVNw=dz!5+*IjQ`#EX!~g z=o=LSkOPQL&7=&Uwsro)Oie@*VM<_98>8P|juvfNh23z2uvVSI1(R1Z(bS|iAfXm>@ zttVfA3};qSinkFUDx$yzP>S1rc$v(m2zd?k*w1ht8J1(#jb#AXMJDdtjUYg32ms`? z5MN++RSoBJa>p?61@L}Jq24a%R=&$%p3MPe#DCOa?Cue`s*~Y%Ps(?)MbR+_z7dXn zUhMh10KQzgjZ(m43{7)Ngyez^CUmQLRQ zc~t1u2%d6@^VQdd^nM~GE8>FSSrg&(f>OF(y50_LO0O;=pr~l(qtC^nv+n@+BncoD z+<%xSz;6y%M+KD^6h%NSK&1@iJbv8#Q7+vh>+71-#ziIiS*GJAa=snVR9$(_;mvxz z_&cCHEjSJppxP!~0gHt!raYp&=!|$QeUZEFb}2^$d)c|HpOsH(WVC%#B1ZM%@b?U)hS4{xs2|C?7q n1$O~z=ns9k3-Gqhe4qUX0KTXU?VT3;00000NkvXXu0mjfxOB~f diff --git a/graphics/pokemon/feraligatr/normal.pal b/graphics/pokemon/feraligatr/normal.pal index 166ae9add605..3322ac24e3f3 100644 --- a/graphics/pokemon/feraligatr/normal.pal +++ b/graphics/pokemon/feraligatr/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -128 0 8 -248 136 128 +131 0 8 +255 139 131 16 16 16 -240 80 88 -8 104 144 -64 208 232 -40 152 184 -136 232 248 -248 248 248 -192 192 192 -248 184 112 -128 88 0 -248 224 136 -200 184 96 +246 82 90 +41 74 139 +90 180 246 +57 139 205 +139 213 255 +255 255 255 +197 197 197 +255 230 139 +106 82 0 +255 230 139 +205 189 98 0 0 0 diff --git a/graphics/pokemon/flaaffy/anim_front.png b/graphics/pokemon/flaaffy/anim_front.png index 0cc7d0439e647ec2a552f3c86ae2cdf1ab2bdb12..c09ccf4922e56a2824ee152d9e0f8af917cbc624 100644 GIT binary patch delta 1118 zcmV-k1fl!o2e#_R_~000B!Nkl0|T)LNqDiPqbXfN$3EwzlKW0PCX2MwD}Dtp(pfxC#F#V2Rus2qkBB0-EU;{%H**DeNl24p3_=!py;W zmTx5001bM*6q5HS21}u$dP5)f=iq+7{{~1&niik+P$rA*Qn|;+XL=xL z>f`->OrZD{T7q>A_Xn2nIH-sSk9+8q5O#og01z#H_nz2+r6laynCL3H1W7N3{}f#+y`r7nzF#_uidrA*Ld(rDp05SmQE~ZjTT^BGwSONeiFE*)F7mmc&1hjgN z%e^R}Z{7+J&$j_7G!bP;8TvCXz&-_&*u`io(Gs`-H$60_;kg!{9R%#jlkfZkn!`j3&jAI}_BJ}=vc>giW z@PsxZ=!RwnZbBKY!PfUX2MBHHh}FhBEfdtEKbZvbSm&)tgncF3$w)5uz5;$2-5InL zk`u7@cmP!N+u1iiK!4L_qp8hVMt6`s1B@(cSf{>0ulC;q0HG+Mw>Ikk$!Gs9h0z&l zdw&W0Pd@XVWoyv`O6Z>-z*h{1fVUajz~m{S28AG|Ht+uC-cRXM>My~nzcR|&TX&Eg zgctih5^$wJ={1Ew`vJrWeTZ)<;C;HXf{@l4TmdB0j}kh2RgQD)Vb1^q?Qq1@)ayL%q)9afOmGj%kSLjrI1eYkfulX^7pt#}>{<gqvL~?!}4dtZH6l(YXwGDs{X!XJTJRHiEH~(Mz45dqlCp{d>X$pJ)KUeHO zzr2-)L%GfWE1+I*->S8dFqe8o5BonSKG)nkbYW`v5`g3SMYa)yKY?9|_51348DAsE k^pXCyn`VCF8~<1Q2T9^E{+*&yz5oCK07*qoM6N<$fLD%daJ2vfKQ1l%s7Z7<*=^x++PkJA}cRwEQ`_;6Y$j934kK~E1Y32%OlMvG+ z_UCAU1|gdOmGKS@+a`om&<-}KR7itVupR(ZE5s&F4eQ{z#BNlG<9(q7)}g&a${w*W zKyCscVp~lmpnqQj`*cqUJn)F^LEhSbi~t>4ehyW(jsx{R_0H}-8+sm`asdE96Bnn;E9sSp>*Z>H5$Z&TZziE}?ZI4PYrzo$($pEFrN0T|s-)LNW#nb%tVA|N0j&*lH>JFg2sNdgxc zV7yVx)qk^VfHO8bJu2kktgeB#hde=nLiFPeqgrciKU*Kq-d&`FJ4C zlcC>Mj9uwuAUgoW17EQM&4|J%;xL#oM<%~_0vq^R0u%LIPvd#W-$4gnJj84foX;7H zVxAx$hIYsUO%FLAB6*$4^M~tHoIwUKIc2)Pi+^><;uhIonb$P7y1-4`#Q%=9+iT{k zyhZApWQBiNBcu-RXc;9yyqf@2Z44-N!&6y-U?t!U<5l@sy9h7>qMGW3`oky*cwl~( z7KLH}=<365VpkCLm%y(NBd=*;z(Br&(R1b_fDy}wG)|8BW3@ea!u#?CJmX?V4fwO} zC4W5BXYEtO9^9HG@I3LL-Eolz;z_C{TR!R^v^faHJ+sC<%&TpG%1jXdh58p`-D(i0 zZqYh&4w{$gE{MOWUPN^PSQNP}FVk*XrfN^RzPYdubbCt;NF&&gYrp}=O4o=zwfCht zp9XN7BI!{; z-KF{;b9eXb>9XN7qF8N8jcQU+?5a6obKt`CG^`xU-z$n?_Q%B~>tC z*^TB5pAn7U0RZ*@`!GV@XRH^a>aQJkgO%#9>35*Ez5=)}ziV(9sJdrMf6&I}VG-Zm iU7gq1M+)48I{pQvJDnI^wD)2F0000l diff --git a/graphics/pokemon/flaaffy/front.png b/graphics/pokemon/flaaffy/front.png index 373ff986f2920767332d5f33faeb46faacda9b0b..6bb2dc324a7812b07301a045d9643e3495c7925d 100644 GIT binary patch delta 642 zcmV-|0)73R1&;-g7=H)@0001;w}I>c0004VQb$4nuFf3k0000mP)t-sn9!iTz19E! z|ATXj-sbiY5D-dATHZlo|D>e#_R_~0006FNklQx z1v0%7wCn@o`f>nr2Zaf$E2lo^C?I8*f_`Q90ztw70RMJW0SxL@;^J~Z3X})|dgm4c zfIXvtF@syBR7xNQdJ%*#R+H^ zc1o`RetXc{rvj=1<_;4zYPSYDNLx_AguWAFA3vIdACQ&RhCV ceQKiq0gDzG8R2J%H2?qr07*qoM6N<$g38n-ApigX delta 657 zcmV;C0&e|}1)T+u7=Hu<00013M{Ml?001yhOjJdf(4ere(D?ZHfN+S&*zgb#5J*T^ z&|rA@u*mp`nE1%hh#)XPaHvp#z<|K`C_sqUe+KCQ00JmUL_t(YiS3iIZqrZ{hA*m2 z1}g$L;Q@SXb|7w~j@UO@SU}W31Y2n$X5<9Zk)d`rR0VUI4SxwKxhzE}kdP-}?Vgd5 z!V@6QO$burd&3L#$dmss=RfE84`Ua#UYD-^M+ciRYXh_mU|C?_&^GV^wh1cf9empc z07vU!gX4e?j?ROCTMpRZ?&uuc3fR5_u6I`nY>~YSB@fCvKrTTL*yTV87)zkeYf9jO z2ewCgx&BlGw10W&6?M7xEK=`jw0FCr0&YW8)kCt!*M&$c%@|7>zvLd`9)|Y(ot&ou!47WX(!S^P2kzPiJR!hbX`H@H0q&Q^i1;`I`!9m_Eyg}|H~YCu89aE-gK#9|B6fwNu5=&>qo!g4W+rixAO$l; zP4ZtH(E^VoFjD7woK9o>LJpWe;$jHIX&5FcW|}_++sB9*F=9`n8(iL>KBwXa3m}v! rGn%_Phech6`bM3xaC3u;($pV7?8{b$%JOpn015yANkvXXu0mjfj*u*Z diff --git a/graphics/pokemon/flaaffy/normal.pal b/graphics/pokemon/flaaffy/normal.pal index 9b678134244e..5dd45e400ea0 100644 --- a/graphics/pokemon/flaaffy/normal.pal +++ b/graphics/pokemon/flaaffy/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -176 176 208 -248 248 248 -128 112 136 -200 216 240 +189 189 213 +255 255 255 +131 115 139 +222 230 246 16 16 16 -72 72 88 -208 96 120 -248 176 200 -248 136 152 -248 200 208 -136 32 48 -64 112 168 -80 128 192 -128 192 248 -40 64 136 +74 74 90 +222 65 98 +255 164 164 +255 115 115 +255 189 189 +164 0 16 +82 131 197 +82 131 197 +131 197 255 +41 65 139 diff --git a/graphics/pokemon/furret/anim_front.png b/graphics/pokemon/furret/anim_front.png index bd0119c5684b6bc8201f0e1f0d8236bd14e8bba2..6e84d7410355a84dcc717919a421f2c1366a4539 100644 GIT binary patch delta 1115 zcmV-h1f=_-2;>Nm7=H)@0001tU!Pb20004VQb$4nuFf3k0000mP)t-sn9!h7DIn&> zN_#;$ARsBloI(HYl$>Hptb-~4|Hc3R|8sM5oB#m-lwx>5H~;_u`8TpK000BxNkl2^#<@wJ%;9e zN@)+-09cI};|>6b3LqsSmT&0=kO?9uM5Mi#1Xh7qk|(h}y*d#5pM5<8T$nBG=?`f2 zu&Y0^9wm4Zj9vXfk!baaWHBM)F(BXyK)Q4=mO)_e!eR_8XaE-0Ai()c!!bMq z6#ZThz_uJw1%M9F-BdlmPrvXYfPMm?0}ba#eGDdmqJL-euR*^QtMJ?b@^^d?0E8Qa z4Defo&F+M#TP%lQ4yg40#8*o6(>;@h1SqOP;zJB|9zp@|=theX&;i900VF$*^AKi- zJMeH@|K$ZSQ3XhRVGp+hVCR6os3s(zAWoFVQN-SXd>^ru>78yS)J!B^LeV4%696X^ zLO69EwSUTRvJwrDFMtAQ2{;EB0n2Pq#GIYDe4#G@zRH3>wzj%nH45@Y1K9J1-UyWo zE#gs<6L_whae_^n&PZZ+qL@{wMqC#?-c+zJCpvW$SATZ7uPAfcB_1^j6W7QbKOv zX>0A$_p!!SzAItYngbGd`@fcCEtFDXly-9Y1{XR}tPs<*m6LAK^APH+kV*+s632m_ z(3${kc|%~y|5-K+^;R17>B#JaCF(^~_pEso$L*P!0ln)rWL-%<1$*85sB2X5*^ z{eN8BQs{lLTSABvfHr8n^jQM>yxyx?4dAf1r~N9ttxU?;v=|(@5UL`n|Cxyg>okSX0d6J% z#DP*I%F^{O@l&TC0$d+$Nr9P+=n3FFZGYlfHs`WEJ_A(0f36Atq_Nw*#8+Rd_lJu- z-dA9`gK!RDs2>67z6J4AU$r0_2QJ;LF~Caa-hoR$Y*K?l-GL}W!CpTpVj&mrEdX2j zysM}LjYSy?m5yBQBuujm2;P9`)>GYzm;nxLAe0`8qI4^JBVzquZqh)o_JMaI6jT8A z4jwgQfOKbRD?$J|FV;-3EwjvxKyP^Rfaq~4fFmEBYk*uJxq~6!r$FU=(KjoA<#3Q+ hpv~y^vb%rZ{sR3!Ix!Iq>}3D|002ovPDHLkV1jig`6~bb delta 1049 zcmV+!1m^qX2%-p(7=Hu<00005GLG0)Pe&(WvoYZOJ10DoQFJCbrFT8uljK#?1y zAorPfCsKF6isFAXe!`u7wmfuXoLSI<1ZHI6v91ZGAN2tV}YRiEMRp5_qKD}9Prcu{Cb9L5m#RT z;3opPDy}{vuz#_jb3pmDUm?^n1#AZm#V`@jX`Lnl!xB2Jv!Z_z&|Cn9G`pk>1__YX>4C!- zNcMB3owFWTMPQu(bP#V}0qV;D9s&Z`kV8Ms(cvD!Cx7~@8J<)E(EeZyR*PXb4kK*tcn;6+%V4b#&Y2#_By(yZVU0lFXWC#L3{UqzZH?Vd2i^yD)^Pm&;Q zHqHaj?c_vMIz+JAZTcPo{dkj8WzA|O*h-334d zze#{%seg7XY^T?YSrgW+OhBoRk*o@2=4Sv2?Pcl~A_D4u)y$ghi=W3HE99kZ@Cd$WIS ze=4}LR$m1A*Zqq)JuU)_XOgW0z^g>_mHY%Ke1AvzRP(XJ!bZNNPPgTW=3{y_@J@Ro z(R|e&G!O03(qxfILoS;RL>NTnN*f$*a=L(p2AVL3*yk|2R7om`@TsS&uvHgpa+i3+53b&CxOKMc>mw(zuI<3sb&dG>?uZ`*H9j}q@| T4b;md00000NkvXXu0mjfd>+=u diff --git a/graphics/pokemon/furret/front.png b/graphics/pokemon/furret/front.png index bab4d95b6bcba4c421d01f93c445ed66ca1bffa7..4d7361e08b3487221742f694e1f356894eb4e869 100644 GIT binary patch delta 645 zcmV;00($-W1d;`i7=H)@0001;w}I>c0004VQb$4nuFf3k0000mP)t-sn9!h7DIn&> zN_#;$ARsBloI(HYl$>Hptb-~4|Hc3R|8sM5oB#m-lwx>5H~;_u`8TpK0006INklYXKXJVPTxiBI{Q;vMqWZ)1 zsL9i0MD+({s-+W?M1%n(vLa_0;Tr@NS<&B>5U&B>sd~>h0|cwUHv=G3%|Z}B5&}TB z945^|EC!ht9)AxbU@C--3ow*g{iYAn2U5Zk#15c7A4ENYngjZ_O9H6dvV2a!Xge3Q zSVG8nEC{#*P+2;dTM#(Au!%tg1K`PrT_M3|T)7Yi%r0z_0Ow507+wQ3eJlx3w;WLi zfC(_&R5QR&zw{=6egaSeP3K>84lV#qFXo@YycE0ie18S7Z#)P9!T`Ylev63JJ0X`X zW+}J^bb24jm6H8*H`0;-P1Q(ph+(NiY5<9DwHN^%&^%E9*YnsyxH{ZH!X5qB2O?7k zV7aiD+W~NLpgf8uu@^`hrF9l@cEIimnuH60G!#lWb)L1(@M0xa zfL#C$Fn$v78c+$?szDj8J8}6&-vDxzB_EEqyIxBc^ur3M2`WEZ-xt>OBa@htLY|>OBJE`_Pz*pOF fLEtw;f73nzN0}cF3JCJ*00000NkvXXu0mjfW`Pj; delta 621 zcmV-z0+Rib1^NV#7=Hu<00013M{Ml?001yhOjJdf(4bH#AkeUActAKHASl3?K;jtRJDz5ig96o0ULw%;WSq_9^x?N+}8S;(yLac3CS{b1ZZYQpo>V z^N&W75dUMy8+x&i^J>VDBQX4^56eL1f{r!ZWdOWq-Ky7&hYqFOb%>Z*pg`B5COx-6 z;V{Pc9MDC5m(j&15|zT&i~}J`Lj{6yS-_hbUVM)aIpEv_{JKE4h}Aa$_(?#niq%&F zS`Q`%l;^{i5P#R_HnN1zZv^b0np2__as?w_a(@(+n!0gJ0lsgtLRAB2=@WpD zA*G=~dEkbbc@6?tr=hW1cxJ%3kNqTTh+&n+o(-NU#r)(Kig%JBV_OWsrJJ3IwTT(L z!PYqf%xRd_xgIStGz>f@w{xwdg-~sXq??8A0zj8y1ez4kPZ3a2w+SFN`jIQaUIoIc z;{woVt!C8}>7gYPN)gbF`WKPLhCX(Gi01kYDk#TZb6C>#!uud&ju?xNn6%10Y@)vW zz)02FhKa#mdyGCVs(v9IUAqj3i)&8uPV9! zRiR`K3H0)tj{)1ir^EZtGG^Znf?nSsOKSb-0ciifumanpt5^M+P*(y5 zz%coF_B2IRmVY36VUlr10)ldYE1yci*kwWi2$0kSQxm|}=tA_U!28@pt-zKhh$HR4 z_ana2JesO8h|>jNoF-rqs@<9D099PXT25?1=|p1tCVRL+AuMT5q+~;gU=?B?y4zFR zh|hNP8VOrJ@zJO_Qz zlrRjQu&ME(f)lo|`Nx299K9c^y1()x_8AX9wng~+j6-qMvwfT&EddX@KeUOD zJASs5fPXpg>FMe{UsqRGSJ!`5r}y7L?-9O-Exk9ux3PAG?`k{H%cQ&Oh)dP%t^SBf zF2i?q0w3YKmfjP5ds^YUj@}b|D?2yA_mJQ_qVEddHT0g~8{oTz?*j5&ZfI?SZ?Cth zRq)M;>)2)Zo~CgN-;^)%eo8sR)w<;K%R8PPWfEX1@>?}D!9eT?v({YUmL{1*WB|2ujw;rAHvj^2y8=LdRs zmTR!-h2EVWZsq=;>Ak}Lj^5i7Tm!cr=v^AnbES724}jQ@Sm>Yzdm>T@9O#!`Ud;wB<5O)!!7^-002ovPDHLkV1gMfl@tH~ delta 814 zcmV+}1JV4x2Dt{17=Hu<0000CaaRE(U15o%fNO3bDF=}IbK>VE(YMk<}a;iUszsur(7 z%3zc)0P=)X7H{1^Oh^$ESv!SKkfH4tsCxD_5#W1G#|rUVjP!f-p6>uZCghm^F?1gw zNB5wz%CFMH2OpqCd9OvqfTpRO+Y2BoxWGxaRMk*Gl27xd*+f@hM80F1D#g#Eoa&gL zX!!!`Pg*Ll0e>1)5Fjth(4v&4+Q@)(?QL9DoNC+t(aq0-ol3l4p1Bi+ z-?-udH|UR=kaKUq84e^Dt7Lak#79u&CbpopfDsXD(Qv600E~v0$PRd{(a^$Mx1ZUA z03vd4&ws9`_D>x6^@Cc!>1Du(1R?!^gFNP#gUeyqUy`HT{{6(6V#PEW`8F4c|SnzPhyj2^Qk9yF_2cq?=3F(w6AoZzInA_ zjVwg&<#r|1Vsdwep4=Ir*R}y@dvbTadU7|SOn+KiK!|CP$^F79a=9xV^Tigx%${Su z?H1p7a<75eD{S9H-EaX{S?tmVFn14&$(;>w#R@#WqX<_w?eEt=BR1_X=m~kWKV*eH zd9=TgEeL@P`wROm`-`(_e{ufWU%}1l*`Mk~6yWwR)llHy>`$Zsb9(j<%0Bx?_Sl~c s>?fH$8wL!xx4-RsJ%~n*uLlR5KM>zMugXjW8vpa!X*Z=?k diff --git a/graphics/pokemon/hoothoot/front.png b/graphics/pokemon/hoothoot/front.png index 0cc0353801b46a3b5561242631a2a2ff14160725..8a89546b76fc5104f8ef9e89c1e6ae87abc30359 100644 GIT binary patch delta 535 zcmV+y0_gp%1f&Fz7=H)@0001;w}I>c0004VQb$4nuFf3k0000mP)t-sn9!gQ5D-B@ zL7Zwab4nOeF#x@bLCvIlYB3nSS}FEoG48CC-o2dv=EeX2|9g9Tpp~1+0004^NklCzh!eG3SG30+VM zCj$NX<|APLdpcczRtS3s9WMs~eP!JM%rS}#1Sq2>X1zf=5TGDfi~knL)$NZODgged z8hib$NbLl_e*jB*{ip$KTJuvcfte%6EQB!JLtuez_U?7R6Z#@x01+lz7NfbS zGlKYyNzwuWKz|!R+ow`6c9{_X0I5X?J%Gr;8_|%!Y%8KC;8ubtdHu~2UUeQr*BC^- z0fIUKP3U$F-2hiDWCw^t&syQ%`wtN?igKW!6h{bHgo5xf`^gYtnvAfh@le4I+gSWF zAf;qBbyff1uK*kIZuSL-r7?s(7Ho>i_x7}`BY>42s~2&7;C&&yTE delta 544 zcmV+*0^j|l1g!*+7=Hu<00013M{Ml?001yhOjJdf(4Y_y5I{gcm}oF~SWr+f0Jw-i z$e?&=Fc`R4DDYq~=%|p`xS06h!1(z1czAfs1Wl6w000SaNLh0L01m_e01m_fl`9S# z0004_Nkl9G!P``k&<>CT&Wz>PUw8{JBfA?N1NvHac1;>CKJ3?i`o}u5D z1E9rNUyJd9rV-|j0>KGB2wxTqO$b7AT&J`yJi!xslTrfWeH7D8`UJ&0Q9s-u=mlt4 z5&&J6u>k<-dw)SdrgEba#W7Ti9}za4u?96~A`8yY6O-h;>o^WzjtdNBd^?{`&OK1) zf-0%?=ToER9l-@>7eIP*+q)#7#oJ}1t`d7N@D@o_b# zufN`IR=zW@4*TVdj$6N&IOtcctopbETjYr@8>F84ozCOVIhE704 iQj)p>iy1uCpVkk7jGD8Ert(Sv0000{#R#E(azP=6@=6%f(S;#=c91CcZk zFsbI^tq~*Mlv_%LHWmhilX%9D>2t0 z084~G_zEJk&_0n};>{77B)u@q_~1g5n4QBz6<9QgT@Zf|yn8z`4~kRBntk$BM>rP2 zJD5no1wgsC&UNG@Y|1s6LZMJ76bgkx;X9N8@xKiS+<%-G10tHj;vbw0h~R(xUj3^9 z5j+3IU4z4bh&vF3oBd=!#2pAHI1Grm1F;?U?7Ov*9^DYAo><7UPKKn)VqXv1BWK*a1Ra#A-2(C8%5SZm`D2w zi5Eq86E8z3XF!m+_aGw4>wh&6^7g@IAe4PjC=`ARpAUu(_XF!iga7~l07*qoM6N<$ Ef|bSY7ytkO delta 540 zcmV+%0^|L|1gQj&7=Hu<00002v5kR0lMNbKJzy{^LR+*Oy378-P9A ztf1892I*HvgW0*?n^ng$;@WL=V2AAcTIKq!X%mA_Ug&o@nDp337={D52dXOvQ8j!Vo6cNDXl(+cD3Ofpml?3o!ts zc~s1h!ph3Z>YvLR3>l}b!9b6KUJV8|vs}0u49p&6m47lAa`Yi{b5JXTQBlmJ3~FUC zwg<$cxU)+6hX$DIYkWVCgIQIbA<-5wmt&buih2uaqTR+EZsJ-XEpEV63%ILm_z9-^ zcJV797}sAJSNs|b#G;T)D1(9<2q$a}2DX5l{_7^}8K!%$WKWrC`t!WIMlFuYu_PVS eyRovmrxhPoRDa+x@;0gf0000c0004VQb$4nuFf3k0000mP)t-sn9!h{7*hYu z)&H!$v{G{r5D?~roaQMIivR%s|Np%J0E++s000000000000000yUrHY0003MNkl*K?8 zWR4Rsn83MD@qc{;=k#<8ny^Ue!5iU)CR|rIehwBt+~*uhfVD={am0HWNT~o!?*bx9 z`-HgpW2$tM{6<**;zGkBKJBFroEa=`sy_&GdT(_el!>sb`sS-nI~QS2uu;Gaz~pmu nGeZd?(#`qQipqJ6&|dTL2QHP7Zop0o9)GX1Sfd+wgGo7W-9TU_0MUI+ z7V@!PAX4*AajFv$Y>OR^BB#mpSa0YD!?f*Ddg{Th(~-x4g&5f&9)MjxmG)T7nsrNm XX?Z{X9*zp)00000NkvXXu0mjf=U=5( diff --git a/graphics/pokemon/igglybuff/normal.pal b/graphics/pokemon/igglybuff/normal.pal index 4bf00fcd7991..c0e93f53e7f6 100644 --- a/graphics/pokemon/igglybuff/normal.pal +++ b/graphics/pokemon/igglybuff/normal.pal @@ -2,17 +2,17 @@ JASC-PAL 0100 16 152 208 160 -136 64 64 -248 200 208 -248 168 184 -200 104 96 +156 24 82 +255 205 213 +255 172 189 +180 82 115 16 16 16 -240 120 144 -224 40 16 -136 0 0 -248 248 248 -184 0 0 -128 0 0 +230 131 156 +230 41 16 +139 0 0 +255 255 255 +189 0 0 +139 0 0 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/lanturn/anim_front.png b/graphics/pokemon/lanturn/anim_front.png index 69166b66bc60f5aa0d7fbb583dadc1ea8ef7b994..b84c0a77fdddfbcb6fc80656a46ec76950d80724 100644 GIT binary patch delta 1088 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 KMNUMnLSTaB6G+7X diff --git a/graphics/pokemon/lanturn/normal.pal b/graphics/pokemon/lanturn/normal.pal index 792d90f29ee8..377916306e8c 100644 --- a/graphics/pokemon/lanturn/normal.pal +++ b/graphics/pokemon/lanturn/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -136 120 88 -248 216 96 -224 184 48 -88 112 192 -144 160 224 -176 136 32 -48 56 96 -120 152 216 -16 16 16 -248 248 248 -80 64 40 -184 192 232 -160 48 72 -232 96 88 -168 0 0 +123 98 74 +255 222 98 +230 180 82 +74 123 205 +123 172 238 +172 148 65 +41 49 115 +98 148 230 +0 0 0 +255 255 255 +65 49 16 +164 205 255 +164 49 74 +238 98 90 +164 49 74 diff --git a/graphics/pokemon/ledian/anim_front.png b/graphics/pokemon/ledian/anim_front.png index 57d90f93be59369c6608ef99074290869be8bce3..c866d2769f9d5680379729ddbdd52bf46e4c73cb 100644 GIT binary patch delta 1319 zcmV+?1=#wF3a$!}7=H)@0001tU!Pb20004VQb$4nuFf3k0000mP)t-sn9!gQ5D-#Q zQpGu1|AT{bAQ1mbK>!e1`1tq$YTmT8w4{3g&9pi8=5y86)lg7SN$_JA000E6Nklyn!=422_Wg~5h>|HrM4Bna7V42J2C&cxGcvm4HbY=6s_qdp#=_D>tpO?kQn zptRHX$3lDkg;-Rcwzs~-a!r2)a8n<0X5O>T16;!V^#vA5FTiI_2jpo|MCLvK(=<7NCvBPf^tJ|n1qj-)UK3aBBVhO(~o0P0-1K6D+x2YrC<;k}{ehkiJ77QdvPu0EpCD0l+Vc1;=k!C)qQ_P6PdCS?aQgugyef z09c9o4Ef<^dL`J89#ztDsSUkt>Gb_w@W#+DP9p=;w|#!EPv73~^a@xo6*eZtzDw`r z3h)RJ!+)mNPUuXW1X#L(K)(PYx)ysd^(nz13Tr++IY&&D=@Z9A3qqKMgG`<+DvdHaYE zwx)#VMVFt1<}%s?l<))4T*3PmkMGYi`s+7m2-g7*`s*;IKEQU>eI?wrKlk*X_GzDX zvE5#KH)|KSiyv1i4rc&o+=36@uX@3$ceF7^*Zp?-@;bPU6Yg;b7+#Ep$rX73SVMoB zUVnM&;bZ25E(Cygu30vHSdSAu;MMeQ1ljbpeLIQ(Q1{quzxEpDz~s1c90Pb)IoSbl zOS9Woy9WV?%13tB4Z{+bztX;A(gqmFZ0ne_1N8N7#o8Bb5ai1<#+<+Uc6NYY5KB6| zs%u+2pr&>-NZ-4S3z#!5QfaO_!QGh#llGU-L0|1P_B>;K# zV>0V*04Gp;76c2%iXVPCMe!h;b4C)8xvn-~fV&*imP6U}2B^twV|xUoy1~sGVPLCfmB!-glMyJh5241ZRF zLHz>nPnZ(?ZI^dT$>w^9UbE{hyWyDps_7Zowj5^A+$Ea@M=3-t42WW;(JBZHfSO;t z0wbpVu21L6>=l4?;8`BAaLt?Sy{}N%&vZs#JpLzOk*H7~nwAtrn0*1l+^3GfsT;dy zO4Kl@yaF%?CoT>?OuD^duOrKDwbU*dJ%D&`9)rZe^x-3 z^FcOX4TDhqRO$lwF07j%RS%*v^|&{;>3-IsqJ|lG^n^g3PGz<6adqhclvV$7;pwn{ zUJ-lz{6Crw`?qG@ohzS}f#otFHb&H9uf5(97j=V+u319g>DyljHvtd&r68Emji6I| d$fy1P?GN%qIe)C}HoO1;002ovPDHLkV1jaSZ(aZZ delta 1283 zcmV+e1^oK13X2Mm7=Hu<0000m=G(!N^b5#8pQZ0hO^U$$?D*f<(YBtswV_o5&OcxI;Vx>SaI$D!ZNsKwp*u)o0!dpwus|QS-bP z^-Vy-^Ck^SOMh$VxH%bZ0;qf7(+$9g8nOV&lmI6QaClM%Xm2Sr=<(~Hs9OSr_zZM* zS`IwH^3&Pra#{u~4=6o8pUp@K;GQG!_4%?!iqD&PPd@>}VXhauo_~>+5UxJ-yl;mJ zF!09_p_I&oa0lKIzOX`!deCYS65k0?_k8G_HL@MoX@8RiQ7rePkw0#B*x4v^?D~YU zc?*PS-PFlAVj(+wmytkV;j{$oT|mDpBDPp9TBA%2lPwl|wrv?e#v)p=4sT^^n5#|* zoQDPsFRvobok0ANIaM>{ferkN5AleCVdeoXz7J5WlxA z-~bO+_J4})tk>(m0tv)W=bW$C57|!cpu#%93UPc(UKIe^oVC~R5kS55egE&Ur+2bOiZ5qv8=(DjX|)m{8O4th z+l;Anod3T*pSAT6x5baG`9v$t1$jWv+XehPn&_jPuW7i6Gd8sdeQ=bs&J>`ji42bX zp??ZUdE?RebozxmgU_z(A%n&d-Y~EHzIl#a}{o~Umsddp47hfrZ z7ztV7@D#1T+nh6=11d1J8}x8CtGQ#7*?+vP0^KCx9KK#65Xq^m0K^;7Ne#V!`Nka! zlLyLM=tuq&I&IMD`BFqFumPR%w$~@U_PV1uN@a%y+_v@-=OtiqM+NYyOb*iA<9-jl zH4Ib%<^b3UaEloozalEIaMFMg$D&uuUsG*`5d_kFAo{NQ|I&G#uD}MYZSy* z(}Bv)eJj3}VT=}pPH7`HfROGTO?*kA>+G=5Xo*X_S0w;`n}ho+adqPsJ0G@UZdJ6s z-`#4X5YVt!f&8UYEwM&zHOKy^lc?AlO%!u;3c<-$Tr=XU@A002ovPDHLkV1o5|S$6;c diff --git a/graphics/pokemon/ledian/front.png b/graphics/pokemon/ledian/front.png index a51f2884e99b8fa29062792c998c641d05ceb518..cf066921cb6d1d2b0182c28a8aaba57fd342482f 100644 GIT binary patch delta 726 zcmV;{0xA9A1>yye7=H)@0001;w}I>c0004VQb$4nuFf3k0000mP)t-sn9!gQ5D-#Q zQpGu1|AT{bAQ1mbK>!e1`1tq$YTmT8w4{3g&9pi8=5y86)lg7SN$_JA0007DNkl77cFMkTQ#4bqN21VjE0n@g*fHy>R4%!GpE#c;yh_ zQY&t18L;9iklq@)wNr&e(MLd~ioChCrhHXiFNB<3G2tWSoC^%C9eCB2LSB?1fI=n) zF+S%20~uTEPQt9yf>;eyCk7XkP?W}0_FW%|##g&iEPp+Do&psehCzD>b~xb2`D&K} z9McpC_rM@vMI)#{WZ!oc=oiJ3($pmzk?i5NqExET+F{pnc+ ztjj*(?U7FRd(k^~zPXJ|On3YIoDX*o9eoIzZiTH$v1{Qu4uNN&IXrkw0z2`hz{*Vx z^n;*hH-9sb?RBPc33L(21wFf00xhI43i=ihX_3=ha8x1cAcJv&Trwg_IZ1-GH< z0@RJLy>xX!o<85aV1sQpI??-C*N{|g{8WIEa+LBzfR8Lz<;ItZzz$Op>hD%=AnOG$ z@)!I~jWWk5f5b6m>V)zE88P6rUdv!WJ-mzUcC&VcJHc0EYhr z(+(b^4k+6pa1{> delta 724 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 diff --git a/graphics/pokemon/ledyba/front.png b/graphics/pokemon/ledyba/front.png index 10e52bbc70c46ac677f73c31c836c7a0de690b4d..a34bf944a9993029d172aedde4bcec4a87bf95dc 100644 GIT binary patch delta 662 zcmV;H0%`rL1)>Fz7=H)@0001;w}I>c0004VQb$4nuFf3k0000mP)t-sn9!gQ5D;2Y zQfes}v_UcUS{VPFAl1#y|NsB2q@>lfd;jK~|Np(DdjM);v`R5^CHT6E0006YNklu&5I41{B2mdkF!`@iiOn}ki(iV#-k-&(yYoiFxyK!079Z+)vglWAg9cmUJ;vbKP_g>r-K)mXW;Qf69 z^RBM|@9yeDl-7X682Kh4MNZ9vn3&_eEGCW=q&5$Ij6{*-1|lK5Zvcg$09ZMU06<4L z0D2gL0Y(WJ`G07@dyIpA*ol|nTY;16HHA(IAq0j6XkqwVL+A1nm4OgALZSc}8G=y& zIF-L%FCe6rHZyRr7^w-oh^u-Kp3V^XT3hHN5J4k2YI+n-rCvTw{A5EGvd4WBDJ6@FuA*25cXcTUqZ_yq>R(`A zh*NQmpccw#jP(8JG*MZc({q4NN45ltV+e)~b(F=`LTeQ;MnD6*7w6$X4gDCM2*35V w;uzAP4S%_N3w>TH+_7B6oR{#J207*qoM6N<$f?nb!D*ylh delta 671 zcmV;Q0$}~31*-*+7=Hu<00013M{Ml?001yhOjJdf(4Y_y5Li%9Xeb!4KrrxF82FeV z(8$R6`1q)xpwO^*_~4lM__&~W0BB&aNHB2N4`mww00K5iL_t(YiS3j>Z`wc@#%+@& z8)raZP=f8K!gMM!EMzh{q^<=n-=OS{Dj7zjN?b>>5XLCmMSrNOvT@-P#ABwQDB=S& z72VVJ&TUoUe~~)pS?_o6^S;k}Izf0*Sm2p+QG14x`I(pmq(9;8>tKG2N=DjykudU*6E z1~{v>S%J5wMt@9{yGFi^Q1254t`!YvKHxgQMUkWKYE>VQH5)~yDUCiLCIjRT+E!E> z(zM+*P1JEtvblGWZ=%t?qzkjB0hsHBJtSRi9MWrVQHKyVPo_BLqhevf} z1qo?@#|Ncr&!hB9#)54HkGD-EJj$z0>fKOE>RH%2!++Qg0EVlkE-9sp3k$;5q!0ug z4iwpaQro+Qt-@%$4G7hVyv|xhLcl$l-@=0HOtt~Bym?&TUjT4N2$@?OWf+bMJeKI3 zaDno7AcvC_K#4AWV1J$Kgt8Q6HM^qA1qaTvs1lfhMQO{a*L2C}AavQ0@mLK7p?{@x zMY$d}*nhy=9^#;4|5&en1B?CjGz2)dyvY=~2Xi?u>%nD+Q^!sVdxVwXeOihWY*Lw} z1zmh1Jc-XwuofN@u$_Z%O~Rsl*jQ0H3A&?{Q_cC^y!Nx;jv{~xU^Xe!G=*}(#cBjF zoc%Et?ff_bkY;~ZEINZ>1R(tDTnRphpc4PO7a0AYegWKd$|rv>#kK$d002ovPDHLk FV1geCF)#oC diff --git a/graphics/pokemon/ledyba/normal.pal b/graphics/pokemon/ledyba/normal.pal index eb13383dae62..cb287fc017c1 100644 --- a/graphics/pokemon/ledyba/normal.pal +++ b/graphics/pokemon/ledyba/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 16 16 16 -88 80 80 -104 40 24 -176 64 48 -240 88 24 -248 152 32 -208 200 200 -248 248 248 -168 160 160 -208 176 120 -248 224 152 -248 248 184 -160 120 0 -104 96 176 -72 48 112 +90 82 82 +106 41 24 +180 65 49 +246 90 24 +255 156 32 +213 205 205 +255 255 255 +172 164 164 +213 180 123 +255 230 156 +255 255 189 +164 123 0 +106 98 180 +74 49 115 diff --git a/graphics/pokemon/mareep/anim_front.png b/graphics/pokemon/mareep/anim_front.png index 5c67de5094474dde0d3cbcce0331fcca58f21ae2..47961b201aa02804d11f34e5b7b99976d50ddb83 100644 GIT binary patch delta 921 zcmV;K17`fs2crj&7=H)@0001tU!Pb20004VQb$4nuFf3k0000mP)t-sn9!i+tN_iN zQvd(||K0$cVjvI@5dZ(Z?#**jQc|R(q_legQiHt!N|bY?_F|OY2Dknq0009aNkl2i$|9@MFmr3Fnk*qqyU36NHbtQ!CntyY&1XOK^v)>7^4ASN-&F48I4 z$Z?}%!`J}$FQnW;o7C$8@m2?tWaNXm{kY_i)qkU+ap9MEySyj2Ez7n=2dgYV*5LME z(ar{3fpgg)wm>rmMEC5#20v^-5DQ=fK%mff2ow$OvxS6S%C5CeS)-Y)d+_E zA<8Hc$A17|?cPW<$M5?dLf|206G`41y_5JnZ8FJ<*?p4CT76(b@WTd@w}#LM@h|0k z@kw=4jQ-Tr)YR0})PEE_bCA*CbY}a=0$L2QwiY^|RU=;<6hP|~Ak_Fi&^jjwPz`!O z>kUCDFsBQ&P6M`t$D%L4P<5dOWKo2v2K>i@*-gat%SSX9n(a z4~grm1i{)SHXVP^(RPKi1R5L!p(2QbKp5KS3TH(GQ3=9yAMG)0MVAS;{a)L?_DuPHWh$lhnVT=cY;4mVDCcaOzT7n=1qC$kM-WleU zAb%VOS?GeCcLbpr^y1$Vgmj`t1N;{U?Lc3*9L+p`V6e6b0=u z79r&<>2pOve-1`&Knhzc1sXd?hX@Y}!H5hcc=ZZyi6T(6pa?XCp@c9N&kiC%2;)ca vum|BF@mK#5LkP9rv8A7BB7~_ao&EspLlQH)LmG-w00000NkvXXu0mjf&6}Qu delta 965 zcmV;$13LVp2hRtP7=Hu<0000zF^)J2v000SaNLh0L01m_e01m_fl`9S# z0009;NklVF+4{QYQ=XdW(!taOB zI{t3d?ySyNwjZtrHn%r-R|B=pgO$MJT1^dTZeCe?a9f?X=<}TL)CKC4QiER&RDkAM z4CuIUJ$j`88h^CI01F6hqL@;nMRa!2#wP_(p9Ay+4ZbP>*Zp0>JtA_GTAdnmqWMt) zzzOqHyfKjrz=$V2ZPCd0)H9rP`F9waa*rB~4BE@jsCOf|g+8^S1|}S6*jNJEKBZx+ z030j<`sl1ndo6S1QQ8eL#$pfpR0c4rwQ1fPd6N^Yq%^Pu_g~HlR?zkbw5v zEc=-Z$HM{b7#O=!llqfcmLm`o+$*=&|3m{O?Wcu0C5>S2(kEt|bf z@Ox=U)_+6CBm`SIpvWT)N*92s$Rp%%g7si13$R;>i!kKZkw=wa2kwBW{yjo*dUfGB z*gG!CS5vrmgap$PK%er*bCs3>i16Bh^pJ!I;<6s+CzZ^&j&-c#KM2irSEm~^TtR5u zF~WRfRc^{agKusy3>LTUiM!F|4g&$1%Kf{7u752E1e{UXsXbZ-76bxhO53R|%hrNG z&@PmCymPP&{1FH?2$T^15*G!61EP#+Tp$h$4>FJ@%2*!+!mx87GSP-0V{HNg;n>iG z9opvJ(YvL*KKcLxLBKF*gd_9pOMe-daDf<(-yZ^i{mDQWqR9n<8wLX$V=Qjh_G>N> zV1F0@U|)1noq#~J$3wpx+6*v77b^s!PaHdnKrzH;oeM-lT#RkluhM?Dwm={*_=a{= z3!V$a)Zqf*s62@agpc|9XFFQqlMxdL2c8p1j4$PLKVa`n7=gs7Hh3!sK;-b2s5tx# zmaw_VVJB7r$b}p)KvHQ)h^k-Q1T$7|@IGpqu;gV6ACzqHI86yTj+4^;9>mEx($jK- n(8)PBk+OUdDotC*zY)Ix2ilIakHnta00000NkvXXu0mjfV%fJf diff --git a/graphics/pokemon/mareep/back.png b/graphics/pokemon/mareep/back.png index 027ad17ce9a04f577704bd21c77cd29ad8bae22e..c0d26a07b66d3bc2361f03f53cd6bc8648dd9814 100644 GIT binary patch delta 506 zcmVc0004VQb$4nuFf3k0000mP)t-sn9!iur~uGl zxcK<^@Yn#T7>E!M5ctUW=$P10P*9+tps08NFo?JiNRWWQ@KC7WX`O5{0004oNkluWq#*x2zno6$qbVha-J^0jq@3K&JGXXnWpTJ<;73_v{~92jSSZV3awM8GlN7-8s- wg9yg}y0%0AA({(_F5G3v+gJV4($e47FGI5)1b=3XvH$=807*qoM6N<$g46irt^fc4 delta 564 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 YJds^4sk3;)00000NkvXXt^-0~f{p);s{jB1 delta 1505 zcmV<71s?j43+D@v7=Hu<0000Wq)gACk=(DXe|-Yq2P{V z$kFRfkAcWp9RrD@JqG$G^X!SV$&vb2(knOAASb%oTG*_|i*y0&!`fc-b^plq(7ndNBt0beYoimHBHx zXj(1;lyb{-qkl>7Kng{_qLm`R7bQy9DwJ-|Lo?=Mrue)`>C!_=TZ+E46unX^E&_ewPY01Aoyoa4I&8w8Z5@bXDTQeU zfGZ9e0Ds@Q?&&lHWawt2w(q(2*&%MIJ@MFfLr;-u!pzqG_-ynEuJ&E6;Mw6KJCK+; zp3pQ{ik7B{<7v1LCS#Q??_7+uj~J_I+Vx}qc?eKpt8NX?#iCZ=Txg4V`6-l60{~y- zM+G4skHqLp8Bi?-3pEm=a4H;85WYW_dK~~h+<%S$^vRd1%&-9P&tC&@264I90BqrE z`QuY@6#NLc5&-K07@Qx!83u7%27(PS9pIvSo)23p1i+DWh7-8&PXON7wkK~&IFnoM z&>Q!$(kb7UmI4o@5o~52q-hf_pPf#fbS!q#sdtC|xK9W%B%n>m4sM0I;dlf1L*(NL z*MAHINY$`0o(yo#V}T3+l}e>v-rg~5aexW{sn?;l86X#_lIpE0T(2pr$q|UWBC5Sd z2ta@M-|dSZ;nD5CeSe*|%hg&0P`7!zTD`cjUG4SX$p9d4d%cU&)NcP#-{Mdh2%5(^AUAURq~1IUk8!Gxp$^fmx@(tsSLX(|j@A!vdQh8JP4FPC7=Hi`2()AEpC9izmUQvniL^UI|#InTz@%5hOGbqCZ&Tle)rUNW$|t{_)~B(fh%Tv1@It> z1Z=YJCvRLA``FTikhB{d1Z7*$snN$59z{g_0ow$RG69ofvD!$>gOie;(_%NFNU$-7 zT#WMCb=e<)a-w95V4M|1J_s#Vq2w z!~kF@0b3AX_+ z;fL=K!$yx13k2HCXC5O87+N!JR!uW7Arer%Ri0_{3@C?-Z1*00&1c%YQ{zz&0{-Eb z_c_%E?}%BJ4lgLX`maAbH`X46YmkO&cmGNS6t1SnKa76>6}uZifKC4f00000NkvXX Hu0mjfkzK5w diff --git a/graphics/pokemon/meganium/front.png b/graphics/pokemon/meganium/front.png index 2a813e11888ce778d4973a253000eac4cb6248b1..8d2d25f6c19d8617b843fc297877998dbcd61c16 100644 GIT binary patch delta 841 zcmV-P1GfD42Gjc0004VQb$4nuFf3k0000mP)t-s_`vx8-XLO1 z0OqU!YOFyJb1A+5dyC#N5D*am|Ns9vT6+*V_N1K6AUVy=&1!0DK8Rlp+2D&hTO{knD+ zj~L5pYPeXRAOxUl=Ohh5+^q)mmV;}E^&Y~n$RQ8{2oH=Q)*U&<(KzKjYQT`B4!F8)oau53jjjkoC`C@7WXVTQD%*&05FQ^3q1!oS90C; zPXJu10>a}IDnU51{fPS0MZMR8hEt~a#q5m1vH}~?dT{0My@@yd$a*cv3}M|fMZbdc2Pyk zmWa_ua1!ddA!2>(V!1F7TfQWRrb50f+ujUtCubaliz0Hf8zZ(7`eos>9yPey2JK&H zfRch15q~NjBL#RX;-v*^ps1qgy)MgoLx>!N(Me$Iplu&TpuSPQj30|19wpxOn@Z%L z-YzL;E5Yz29RNE^xpqL)4=hkT0l<)tM*+3V2No!P5vl_6Y2@lGDu6x!sccyL7{OT@ z0gjFU1N*04F={>O;xrqe5$di7Az^sX7291{ihnIAUXNnPy5;gqKeG0l!6UPpmbvdp1JTwAbN$Av67Tn@;*=?527o5qKp0!(!I0{~mh0vs72MEt>k zybsVSc^1%$5R_mg`veS%2ml58qc)o`ozZ8ze)vkDkSOf{TaNktp4&xCmXiO`_jE0z zyh6Qcd^I~ft7JN115fK=M7;5P>VY60WHNpDWq3<}6Bc?RDSaiZ-lpVz^33diO{+0) T`K0F>00000NkvXXu0mjfxe#@g delta 876 zcmV-y1C#vJ2KNS#7=Hu<00013M{Ml?001yhOjJeq!1(ysAYe!U;HUtYs8CR77|`g5 zxX@@25D@tI`1m+jcn~=7pqR)YILOGzXlQ8a+23{m00RO^L_t(YiG|cZYui8+0Pu5K zgTRv6iT6+5_`-bMQ(>q$)z8__8Gi5;6!rV41a|htXKp*6x?$R87r$D z1GSO&#_^5$4&B;!a$C^f-eURQ@9v)N-U%Up6GfERL`f=#XQ3~eRj2GEd zRzgyKGcJ+TMs@>!q`VX(9&K(sR@Hs9g}9J5BEYjfj1TwMwn2zuHU#q7J$zKd?_dff zZHf61c#+5Wb$=1#<{E6qTEr61YZw1^}BMO_r>cl*o@ zSK1bv_GDQu1wc!dPkAX+O19gFKXUMTLSKmkSt*%39uEw|hy-Z>#bU9t+dNgvQ9uA7 zS7j=Y+aC~2QjnFm3iOwepc)*6J`qayiUZgm<5z3-;BW2T!{2_RwX2jvKxi5*MOh7O zDc#=BAOP~v?XFT2+P$mL=fPXWEd84ZU|6wtj~*gniVsE{Qp&kJ z9R|*jO3sIaM-2Wj=)aqoPlK>k+`ecXiNF=0a||prLt%$6#EmAPBUOj|M)f+7MJd>3 z_n!1*;Ex1xWS!Jnke01c2dex;#zw@1=?-4ycRbxOy@3@Ht?Ajs7WZRWD;F?3NH4MWr z48!>4%q4fy&m{MzpECHk-nm)5x_LMaKB?#a0)nPJ5P!IWkp98z{JG1mXmc7=Hu<0000FnjF%a^_@LoZ~pTa{apsp5RyY^LTHeyM8(9HuV^ozZY}O#`@si@^y#K{Ba$W!)<%#1%lR!6z*CbQTVd z0Kzcg)6XueXmjp|Qi+(d*Z{Z+xDmquQI|pLQUY~hJZD6+*VQJ>RH)#&Yc^PU_t$*0 zz2nULDJyNgnE|}JO_}#aSghdf7a{>j6DmTkT)A@ny?-p-?-c0ncO1(&kOrH-G+-73 zpIIXMCzz9RCoE1Tw<$gf2+volDI4Jkc0N$m~aj;>EsNO() jr8bb1OV5j3xor9dE-0+xU7CV=00000NkvXXu0mjfvSJV; diff --git a/graphics/pokemon/natu/front.png b/graphics/pokemon/natu/front.png index c77e0f9bd7a5780f4ca098c22811ccf77ac5e580..ebf3bee930bad2d31cea062a4faa02d22d485b99 100644 GIT binary patch delta 366 zcmV-!0g?Wk1N{P!7=H)@0001;w}I>c0004VQb$4nuFf3k0000mP)t-s0I=wTDFF6b zTGc69N|Zq>5CbINY3TkFtG>FaS9Y!6 zn*N2PqjxQ>`NK|5|0BIU%_Gp#2WnT);Vq$(dN>c@)x(`#EEbDt9xzyJUM delta 398 zcmV;90dfBQ0-OVo7=Hu<00013M{Ml?001yhOjJbxu;_p&0Qgu~*eF;?kU%JCC~&wy zkk~*F5D^TJLIaHr@tDuz zmS!x7Pu{(}%q1-qw*t5F^76E_v<5;7GH}VWrlpsc0Ttk~gR?UY3Iedp&sseVssOtq zX0KYcGcBbf1gM}9Ye;p06vW&(7nV75hN1)(1suCq?Vgs`aU^ZlS_?rXY_@dl-rbg# zmg2c;t#Pv;Hh&`+I%cM&xwy<)wc~E1u?1FlhPVL1tlc||n{g=M04eC+J;Si01DhLw zpcSaVV>eD|h>Fn8MyxJ`07i?B1`gZ?@Lm*_5XNmh1H=8^8^%H!7jP@+=2Bm85QGghP0N0X`;Kg~q!-R@#;(ilWr#;(stu%(DEgs_~^hy#Z9# zzX8+)nE~^Jn%KaLHn3Xsp8!A?Af?CuORu~EXro2}O&_0s6To02zA*s$7Z~(VzcZlv zF~Dg6q;3XAJE0i>C{loUG7~ufSk6M90V70vx)H!-z*>x|GXUnCJqDHql>n_B09neR zHv;Q3bOTbO4S$d}WNUM-$kp^71NA`FKgwl*R{Q{<$AADf6n%wO7#s!|aBLW)`Rlq9 z<{;$(EHx7kUBGqQR*Jd00Z?V=OF-I=$PFpQ3E=qy8Ra8`SY2@D|>qZ1%w5gLQ+`RD|6gv>!T!NcI%WVs@d$}t*( ze~@Eg;o@_F%!dUaiNU)fKlL+9!UGT| zp3kOF@x;@4ImX#Xo1WLSp28=_PqO3M0gQ0#3+;D+n*f1ulRmWbof`lp^gh%%B&U8S z0Dm=b+x$Uy8(6;)hbFvrg3AJ6*3*9Cy*a@JsC95z(csEmh%2|m4y@9Zb@+wUP74V+ zyvy-G#CDI9uFI{T36*$az!|(fwPQ=l#J9 zKrayN{$TFz%Uq?006+iz>rutpnzz48jSw{000SaNLh0L01m_e01m_fl`9S# z000C1NklPiq@T7{&*)2%Vg-5Ee=GStE&_jIl<$K7ZLzc~o8O3Tr(Q4(POK za$1b5ZWcq^FA+jWFujx>+C#oWAi>8FDUMH*(t|01Lf_eylajpeh#q?A9QFM6{Ua^& zJYwwMoYyP#^}1VsHFpE+jc)y}6WHW)Cot!mdsC6)~y}rbOk%lvEe;DS|8S3yn5EeK^0FSqH z+=2?Si;lq9kdN8`2r0W*2gXXU-M-exQcA1?V;$&ys1)cuRA=voyeae3M|H3NXbJT2 z5xoA>p*$3DCin>6H@{q|lZ*7w7#v`4X7cLkuV*x{+kcVC_*wN(Q@|+h#XTk8>if9P zyy<8(=SJ&m0w`$}CZH!o2gWA$*VaiEP(biD*CR0?X1LKtC+1p+8Uf@ll%5Hn=&|?3 z5~vV8f?S_Q+d`mwtldNwxGwmBJlkh zx(3UPFu}F(k0_w@gE0$p=GTr0fR!i4m>npf2*45xk@>!#4hUjnCbAe-LpD(^cd!HFrf5O{ybrMFHXW1rSrfZu;}EAw)<4Uef8=B||+RfT`@k7pcf0!g~)A1vv#w1qXt! zm1=bwIbg7NCRFk8$it;Uv#>h3-LMO>7;e&^l+5F%DvXhqwo5z>*l1Fk&Hw-a diff --git a/graphics/pokemon/noctowl/front.png b/graphics/pokemon/noctowl/front.png index 6665234c049e535e1cdf21c8254b7062e5b05416..c646747b44a09fe7f1a239131143bafbd8081bd6 100644 GIT binary patch delta 690 zcmV;j0!{tb1-=E47=H)@0001;w}I>c0004VQb$4nuFf3k0000mP)t-sn9!iCdrD$K zG5_|ods<4~&00YzAk~y&5D*YzVq*XQ|HUyFoB#mD#l@6bIi!PX;F@LK0006!Nkl0;2HC8|}m^B8B`B!AQNTUGNz{rm(_p??CX zvlIaC6Y2~D4|;%_`fq?}2r$nd|Ibx<0`R6r0f#<+en-Gy6F(Rb|3(Hq)SnEvehlz3 zAgqgl(M326h%78oeKBVX0Cahk#td{q?r-k|2^r`etLr*IODPcp)1*$2qYsh73g|ll z`XZ+R)@TFlp?~zAOI6gNj~J*;UH?%b1GefHKqCeS*p&JzM`;Qe0HAG}*#5firX{f= zfTFw21sS}OH$ifMkC7-1YmxoC?AGcISe5^EG(*vF8om>*T)RF1yzh; zt!cTV2O+(G&5+ypj((JAy~vf55YsoMf6AF4M=6I0a(~&67V2{jS&){$0kI}N3?L5I z%XkvGd4^vG0t5muN5{Tyr#=i&`p~z5@kQtW`3o>?0f(^oF!SRMfGG%%6}bzro+B4g zu7Kf1uu#`mb zDE9+sqkn)&%@33Wh`CsU0A`U6hV}Pr5O5+mgKh#bgbrC$Hgmb=j=+ZnHWn1_1)PUT zskGk87@|>J@ZfMmqUa|3-kb+_=(a;mx!Nf?)kqZ|m+3?7X13M2EB;fcNc? z;iAT?4xTaHrw8a~rMQM}nHLZ14!}O+vRC%-`77)unrU09wRQ`@6$7RJeFHE(Q~tmD Y1JB|apKcbBZ2$lO07*qoM6N<$g0h%0CjbBd delta 715 zcmV;+0yO=;1=j_T7=Hu<00013M{Ml?001yhOjJdf(4eq*P+&kX@ZhL;SV-8okU%IP z$dGUl5D;KsVEFj>z%Uq?006+iz>rutpnzz48jSw{000SaNLh0L01m_e01m_fl`9S# z0006_NklljA6bJBAWks37S3s5>I_H{*DXNl}OMfPi2xnz!h!S&-7(7|I zP7w;mvO2)GV5urL1{S^pQV}B}AJ+9br4N z2o``of!?IO4S$@jlx&pkx{rfE>YBB0!rabK)Bo2Z1J4m)(T0o~dIImG5eS*kpsfLL z-p4i&QqtEwmhvg*9NR!hNADgAq5B@%C*LQu&bKu{`_|x14m>=9H8`K}A?OP62-cH# zYw_$N87hSX@-61;^Y;rgc+lbV=?8ZxO(2N8$P@fZo`2$fV$FhJNtKiv11L$+o$LPG zuz`>;d)jiIG814|+rAGYLxyXqAg@5`A5rf~tCy+Q~{yGB=K0%LI`76-_X4_Tt43a8PYyqPB(ziv1{kNEVW(XTJj4{<)?qH)p` xC)oI1mER`6K9ko4ASGu%NZAasHAT(;tKV+j^4uJA>WKgV002ovPDHLkV1jdfLW2MR diff --git a/graphics/pokemon/noctowl/normal.pal b/graphics/pokemon/noctowl/normal.pal index cf763b733f73..0e4e0b0775d9 100644 --- a/graphics/pokemon/noctowl/normal.pal +++ b/graphics/pokemon/noctowl/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -176 120 80 -96 64 48 -240 224 168 -120 88 72 -216 184 144 -64 40 32 -200 144 112 +172 123 74 +98 65 49 +255 246 180 +123 90 74 +222 205 90 +65 41 32 +213 148 98 16 16 16 -96 96 96 -248 248 248 -192 48 24 -152 0 0 -192 192 192 -144 88 56 -160 128 104 +98 98 98 +255 255 255 +197 49 24 +156 0 0 +197 197 197 +148 90 57 +164 131 106 diff --git a/graphics/pokemon/quilava/anim_front.png b/graphics/pokemon/quilava/anim_front.png index 1c2709eb4fa1be8d3d810c929e6ce19bee38a4df..e65df16880e20c1a5699d66bad855c8b9e2be742 100644 GIT binary patch delta 974 zcmV;<12O!G2-pXZ7=H)@0001tU!Pb20004VQb$4nuFf3k0000mP)t-sn9!i!00945 z0RPnh|C|6AVuLY3YC)W=5D*Zk008*-__Ul-|L&yb&1#EcAP_J(9L-F=000A4NklT0Kzf_z|2l(lxI1bLezTzA(laU0LofpdA7j%T#V3K z2S9?Tbdq~L6QW*g!iJ$Uv-faBXb1o_`18{M5KVO@+kY7x5ZWZY=mC*{rm-+ShDGzO zG{6tpbzNOFx%xpb#JV!JX>sxSs}OEZKe8`-Oaehv^WC1QZ{#cJo~^x?92Ay1W( zr9hn1M}Nn(v;elXS~sN+JyZU1t;a?*)4p4M=jlq@8kjA&QuetsFk8i_yJesO+1Si& zeE_(rshty^$=`bGt+(F#y}G+b$g;azfST!^064+j0YC~^mm&8Q0GtfvP5qLhr3&f$ zK7f;x&z@LQ({}_;1bue=2EYa|Ca*gH&Ymgy-G3pd8vWYr_=Sa}=j?a~piG+`?-07^ zcmuGDj=Fh6Cmt>|`{=0i4rJ~H#Tp$;_RVit*}i<@V2zF;z-53)ugL<3?aP4BL`Sxe zH&na`x@d$oyRV22$jw@=MvN%&kCTcrSrB0*I>odPjv3!+WduFqciZnH5GGcwI45Hy~gAyK`$7 w-|5>l?cAgI&kKZyfSIMuC&IfxcZWT!xsF~+ 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 diff --git a/graphics/pokemon/quilava/front.png b/graphics/pokemon/quilava/front.png index 061f319982b80c36d2c45c9e24433d121e596235..65c45aedd235d390f444350dd9d0795fa0fdb45d 100644 GIT binary patch delta 527 zcmV+q0`UEb1=j?S7#0Wv0001;w}I>c0004VQb$4nuFf3kks&^R0o6%FK~z|U?UKQA z!ypVqEkK|NnE(IWA^|owIH7fW>3C1cn0>5PEX$)u|5R|-e;1%`0^m0QO5O1*Q2Gx6 zZ|8#yP{v#W-mfT4FaGNQ9~v$It<|VS_y~~kIe;FP0D_+Y=%hgjpeo?92X+_0D1ZV! z0Q(p%25e*|Fq2`XI@<`fH@>ws+oeSrFH6O>`Pgk}ezwIhIO zD1!!dX~3X!NC!B#BMVmfrS^}k0H^b!!#>g0~E&|Is=Ln930vEeB!!gPu z)H>N60uXL309JO{QSEZng7_1F5Vs-|0QIi1y++9Xs*JFI)-s?#Oxfhwp9$i(mat*i z$~zaKyV*Yn;G;wt5RFoGayd2c1^fvfAr`(`T{b!89)<| RiZK8H002ovPDHLkV1lIk=i>kX delta 578 zcmV-I0=@m$1c?QZ7zqRe00013M{MnpE2$Wzu3H1Po`Qf-;kopWdJxqO92?3!yl_IpB6f+VT;Q7n}kwKd82P**Z zPJFN%1+X(?v0D``A?AFNN(;nCJYs+GAtQu%wgUp*h_6>!gR_`Nt^_^==R$nEIyR>R zxDpOa8Q*h5yanJgF=HOQ;znW1H>pCT2?&VU8Gj8x#C-Q3V>S_Dc4>&?nGi{0BN}2v zCu#bl1d?f)#mgBQVss&z|1gajwy4aiS|(;zX$owSh#}Dr=P50`|dKEYq}W&S|GdI=9p0HOSL)eq1MNL}l@ zYMh>r*2N9HTj-mn@;nCzH7lW^1-;E99mxaz62&<9~7dMgTxeHa`*|Qb3Og zLzWOA2AG5-T?h~emyS|S5dfq#bd+;Wfj)>XSqhYIIWhq)eo2ss20oeBx& zM<4;zzRTq#Um*a(34mB1$n?^>eZ_*VYU|$sK+d)n8o>pSyP&of28;_@a)=Q?`;RS{ zf^L8r><5UtY4T0=l86(q+BSri%+7Uqrml!O2p&L}+CYb%HF+67^aJWFu2k7tbLvTI zlL=rWFn@aidKZl9P62YH`L==quDVD7&b{;w@a{!A%Oe{D|7m!oU`r@)C6LvKqy6Yv z2s6TGA5+K-fS? zh*&_#pn$l5Sorw(pm0by7!b(FzyJUM0002I*f2!^00TcsL_t(oh3%F>YZE~f$7kDt zUUKj?kv4d-)gB5ST(**ide}AF#6@~&r3H^dn|n!Nva}aZ?tiAI&`2`r2QXdmAQdVU zPaX=oJqt>|i*Gi`$$3-tAP9YsT>ig(Z)bMq{U2k09&pQ`;cp_pMCz7PK)@~-0NZ5~ z04@b^8w!js%+bK~JOY~=B*0cTz~x)(G~m_OU0#1l14=Xkth$3GOaQMISaqA$k?^2u zNWj=sGu|};Q-94Ul1Bz$Hi}{?>Cb8Pp2i(1J2W5zX#gBnl3~|0oJiSMHFOmi%hePh)t@#25`V415D?k~2=uXjFL^771dM(C zK9H?ObfNjHUai(+O}l9|&=f(jA2Hy)^Yp2B0FAc%jswYt%|E zhnhnJl^F%(X@L98b9|qE2SoA?-Q|7@$jej1Dlv-D@duM`;q^Xs4SL>LiO*>u{p>hS zi3D=#$A9S1abSf2a`^aibO=Cgq)P8B$M30bpMz%9b>R4v1d6!AHrzP}Vkf;2fiA$= zE(OS5gv|v6)kwXpEg)cD2T&iAhpKM?kOz_%5okl6zBOK`5}3}T2LJ`rdE~zD)6f6I zuxM)^#&y?%)HUs<)kFW64{4x?{*FhFP#tE4Lx0!TK=%fGdXWUm zag1j_^LPD(P(BiJr`s%F8TaTd0v*8n1Lf`~*#x1x=DdHRyg38(=J;i7|6QRy_qlX1%pmkS zyC_`>bobYSa_5Rz`_{a=IwRegi>1unX`s=#%o32DtkzglI_>}baSdf+30e5L3!D$g z1X+@_VsL*20L}=PamH+?% diff --git a/graphics/pokemon/sentret/front.png b/graphics/pokemon/sentret/front.png index 6505891305bda2599251b2511082a2c025447952..bdc69648941c47262c1557b30932bea69cb23499 100644 GIT binary patch delta 584 zcmV-O0=ND81l0tP7=H)@0001;w}I>c0004VQb$4nuFf3k0000mP)t-sn9!g~F(5ez z0AfKg5D*ZwAVJ106a5wEHM!# z7=~me00!a7Ny-TkP)ePXoO1$dFfK(3lFy7Rg3#GPInNUjED#nrnR^MK;1HQ9V0|bmB4v}ZO;j0#WdA(lc)A3Buy5QBLYzuq?c<~aNt|)8bF3>&xxYoqJ2&%ih8QME? zF#g>jfwuPyg#T@55O0RAfb#Dl>2g@F>q1(L_@9iuM1NQzfpHEBjRBAVd+qi(*$5Ia zEdgOQNboj$jIfZq+xi~?+1=Kl6`TTl3uD W6&P$@hKD`?00005+K-fS? zh*&_#pn$l5Sorw(pm0by7!b(FzyJUM0002I*f2!^00IR`L_t(YiJjEHZ_`i^2k=Y# zq%IjaY^jZyKw>~*v0jlIb+J{GU@^4_Bt|6YUQx-h%EI=XPJak)44&`^A5eo329M>OMT!GY1AvWDb>ssZ zBV*`=2W%Nr5r4^#vopI>O^K#5pqxBFLysmmh$~rlO<5mdNw@A-tcEy`Vl%fPBd%i? z80O7uqPd;nngGxpT0r*8*?`4(@e>rz1`Osrf7ZMzgntGApT8_<{N`K+pFVu!Dx?WK zOcgfW=XYYJ@hyUKo#FGblx4Mu)`%!Bhi=f-SH>X0k?bNKl9|K>`)#l?FuLGD^wZ3C$D0006$Nkl1JU?!Jy06TwrbK2=l)2VkW34fA~zG*U-ALflo%$Ezr1?sMjt$++TC@e?*KRlfU?m^8eKwNQ z7?H!l1PFmBa6qJ@oZ+|xKX9V#mkvC}4b@i?oO9?odhI2!d0qM3Ibe&W_#A**8~I)l zkXE9k0S~!GM}G(xz~SUm3e5yaiT&)0+v5>scBpoTA#we{Wwa9@1(Fk3BKtAdE`HCx z+yF;363Pta{G*mHcKO2KJxK$;{qB-q28fVvkX#=CNkBdrIh-H~?HO{P8wV8e4-XK# zcAgX3Gvq#D1AGaH8o(2fE6|z11U|`|zxrpCp0olgmw%`;Lv67(pw|cF5^HIs&ejZb zrxWb^aeGu)e7@a&EcP`#1kkOeT}bWHOmdzg+(*KgeC*<_E|6f0rNB_5UV6 zkfn?R{C_Dw7;E4&KNtcKQ-dE20*DSj=l}@C2Tgv^0T8ky_xM38q2PlPe!z3B{GhSB z!AE`|E2D1z9RQ&jXZ%3de_5Y<%PZgGQ+`m^{|-JV0OEun)b)P=K%Db~y8gE(AOPY6 zKN#A*^CJ}>WPnil!NB^jPaOE50))5xb^^TOgDn$)Ftq+dHT?|`uHb`HfN)I)5KJc1 aHT?h_Cm3ylTUh@90000sF5HLs(C}3cS;4rB0U{J7V zV3?qASRlZ#7)VG+`1ttv;7G{8z>qK~_*h7_NalzD000SaNLh0L01m_e01m_fl`9S# z0006_NklljA6vywFm?A&7YGSZb#j-5OfD|1{K!0KZE*_Zcg{_z9MkLfv z(5;rTL|w3yg_bV>BNao`fmq7Y6^X$WbMg&bo@157XUB|4)c^6`|K7Xz?kxWZsZ{BI z7X>JdgJrQY2iV?$VA}TltnYaPr?b^ybv@5xPhS_O0Jt~geeYl}bPEk|}gav z0%=@!bd2*?00K^NOf<-LVa~Lq0?ugfknFJM8p*yaid{EJAa^m%MVz*lphj2DC36}9+dHe5wH(yekiJt;fDgipc#HB0t|&8PLy%cIm_~c zsr=Sx$P|7sv%gMcoHakdiXXB+KG@`k$ryYUFz}k!{1En_F<1MnZ}0=+fl3DnVEo|+ zEy064U~KS1f(KMNf;rpZhXOpnm0Ijzbm1iYkVMA=1dL^@OKB~mRpvY%09i&j47iEX x4Fz~WlMs!g+YNaoYt3l;i%v~{iC4Pw`VGg%&$VZ&?2!Nf002ovPDHLkV1nQ*NG1RP diff --git a/graphics/pokemon/spinarak/front.png b/graphics/pokemon/spinarak/front.png index 36c6e8f60d4b4a33635a1a1b1ef8f90ccdb5654b..7af7440985f29889d6015110b5256cb7cada0c6f 100644 GIT binary patch delta 494 zcmVc0004VQb$4nuFf3k0000mP)t-s0I=u~5D+j( z5D*X$h~O}&@L*7|XkeJ2gK80k?bNKl9|K>`)#l?FuLGD^wZ3C$D0004cNklXL7=-&KJKw94+*x1;wkh2Pc$Nn~eXp<08A4c(pQF*>e zpcq9W07;rE!y`htu~GQ7LEyBr`5M7{&jILdM1XnQuy+9V)WTN)TQ&)!5R^BOY=A@0 z=z<^s;1Y6(>DK zlyVl^y)XKkuNS1j3E6Y1|14y?2kAL44K{E|ZMEuYk6s&&Ma@QM`30~$y#uICbe6C4 ke(&S`n=h29si}XdAGb^lLxd8GQ2+n{07*qoM6N<$g3P+(EdT%j delta 523 zcmV+m0`&d-1DFJm7=Hu<00013M{Ml?001yhOjJbxu;>sF5HLs(C}3cS;4rB0U{J7V zV3?qASRlZ#7)VG+`1ttv;7G{8z>qK~_*h7_NalzD000SaNLh0L01m_e01m_fl`9S# z0004wNkl|N?c?6G^|in*K!x8~Ovt?0zoG3B_=8|DcH*2f z8xlf56Izp|He?c><7!8zyHf$Z4o>w3S_oQvw0?nG0e|B%!P*EYH7rI|ot*&)=&Chg z*PkLiB1;FgqeKnG=rKY5mxWd8%%`d=<dEq2mO{h@l2eh4L%6-lkrvLx| N07*qoLmvXF diff --git a/graphics/pokemon/spinarak/normal.pal b/graphics/pokemon/spinarak/normal.pal index 22db1c2ce942..ccdc73a40d28 100644 --- a/graphics/pokemon/spinarak/normal.pal +++ b/graphics/pokemon/spinarak/normal.pal @@ -4,16 +4,16 @@ JASC-PAL 0 176 232 16 16 16 48 72 16 -40 96 96 +16 16 16 136 224 48 168 240 96 80 176 104 96 152 160 -112 88 32 -192 176 24 -72 72 72 +131 106 41 +197 180 24 +106 106 115 248 248 248 -248 224 72 -200 192 192 -144 48 40 -248 88 72 +255 230 74 +189 197 197 +123 49 65 +238 90 90 diff --git a/graphics/pokemon/spinarak/shiny.pal b/graphics/pokemon/spinarak/shiny.pal index 970ece98de54..9c966c9e6e8d 100644 --- a/graphics/pokemon/spinarak/shiny.pal +++ b/graphics/pokemon/spinarak/shiny.pal @@ -4,7 +4,7 @@ JASC-PAL 168 224 24 16 16 16 40 56 104 -32 56 96 +16 16 16 136 176 232 176 216 248 104 128 184 diff --git a/graphics/pokemon/togepi/anim_front.png b/graphics/pokemon/togepi/anim_front.png index 07d7f05b89cf35d9cf06b55e00767d79941f5244..9fc22b9f843f554675efb964b4e4e90c6393301b 100644 GIT binary patch delta 671 zcmV;Q0$}~11*-*+7=H)@0001tU!Pb20004VQb$4nuFf3k0000mP)t-sn9!h%#W7;6C}2`0Fb?~jT9Z>T@?N) z%7%eIa**ETOMm1K4b8ySt*zPfysoR-NsItsaexu7QtG85kzM5Ogi+c6-~^!KGX1-M z5)AMm0ML6F(CesejN0+{83jy2AEWhK!MlWQydH0BaR3O9f3y+z+l74meJuD76?O*v zp;P?$@i`>MfJEbd+(*s!#&(8fjqsV9IqT|I%O9w%t$(ept*x!Ct^XqaVTFL;t5zZK z($731>mD*8_J?!xL5#dF?9p8)9=tvJtKQ|o8o=6v>G$}*)?SDQe~Dk)vA-aF-|phyjB20HK5Q zt`DKKQ7!yN`-6H~hfzkyn|D@7t0UE8yiItPb!sQ8_tdI!J* z@H(`N1mG;3PJdVm4bR}3ylNxKD1{)?J+6{EhKM`N68nh#PxwB1a2ep$1NJ}TB@SID z-J%*@5Bg7+_rtF(W*5up0LM5R#tROZ-`%c1E@vD-9`Sk3pUw}23?tj5m^$<{Y~|47R68y3(SU2~)9H-A__B!5u`SvThol`B`ST>qw| z&;|dH(o1O{JKGu0puS^!tqKclx1C)Z4%yL8;h?Q-;Ag)msv4ySiU%eGQ2wZSK=DB5 zfV#4}XFVs=qj}Z?FW^q1ND;^HL5T}FWI;{p9yU2ZDIIjw(PaXLJh3P}AVweFrmmnt zP)gFnc0004VQb$4nuFf3k0000mP)t-sn9!h%#W7;6C{0hk)&kgO;!X#Di9=AH4AUW1u}VbFip{&fLEbgpuWTeit-pEc)IX~0s_f- zCWgXGgajDB%o#wCG`;}_W!VkqRewQ{G{Zpj;iFr?7Y_mXgE3OH!Ydp2E0kOVK5~#= z`CDi%7V5xdqJOpe`fjZiKZy|mkSTCO%egdDjZBgIG>lva1aAmBF4O<{%ix0B0736z zK`*1!F-ph#J1V#geT>>a3Em})u{~_9aRCeuKkA6{ejy*ej|KiP<>>$)I>ir<-ywAe zq88_IA1(O@`x(|X!`+)X+3H`*57o}j&d%@o0*n|8_YiIOdRqVh002ovPDHLkV1f-9 Bw0i&m delta 407 zcmV;I0cifE1Em9y7=Hu<00013M{Ml?001yhOjJdf(4dfTSO5S3@aVwEuyAllNbu00 zs30Kt`1p8;kkHuJNPxiDaA?3lK(MgDFkq;1gAIoO00A&bL_t(YiS3gyOT$1IhA+YH zm1^i1j_M#-NUvnKNyJfWgsut6_X~v1**=J+Ykz_u(Nz%Q>VHotrRh*`lEzgiv|a|c ze3>2ctnb6U?{OSsH8uYjMOT`tUM2L7E^hrQLGT+hJZx47hGjy>8B#Th5CR}{ff8DM zLka;D<+TH+pn7T_u}v_haN>`~N?G*6>O z&hAj6wIkr=9e=YT#|ZJ5IN}U3e#M7u;S$360^>KFVB*^472WJ{8vjf_lFuP=i_LtB z@3>6zH6^TGp7zh1B_+s?e4pl$@(FTfR-|7kDX6PL*zTwX#<iBx&GH^(N6|cy{s-N>`)zlFD0(UrW(GV*n(QE(!002ovPDHLkV1iR{ BzuW)- diff --git a/graphics/pokemon/togepi/normal.pal b/graphics/pokemon/togepi/normal.pal index 0fb20049a461..3d6967dcac25 100644 --- a/graphics/pokemon/togepi/normal.pal +++ b/graphics/pokemon/togepi/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -144 112 88 +148 115 90 0 0 0 -240 232 192 -200 176 112 -112 72 72 -240 208 160 -168 32 32 -248 248 248 -120 136 144 -208 216 216 -72 128 192 -216 112 104 -192 64 64 -176 176 192 -48 96 168 +246 238 197 +205 156 115 +115 74 74 +246 213 164 +172 32 32 +255 255 255 +123 139 148 +213 222 222 +74 131 197 +222 115 106 +197 65 65 +180 180 197 +49 98 172 diff --git a/graphics/pokemon/togetic/anim_front.png b/graphics/pokemon/togetic/anim_front.png index 1079c2b014888720125726ee8bd7fef75f37be3f..c88c0e4d61ee613687dee1eb16870f3c32ad1ff2 100644 GIT binary patch delta 708 zcmV;#0z3VK2G9kN7=H)@0001tU!Pb20004VQb$4nuFf3k0000mP)t-sn9!hedxQV~ z{{R30ti`?6?(W_}IlUMNDU{|AV!hr$IlUMN000000000000000W3d{Q0006`NklgaHuL_?XI+k8Ne|Fe}ARy*zsc!Ey^oyz+9-- z%JAToO%EHW*!5~-|MIDzDm4t6s`C?x(JhE8vXa}NVtSE9gOE*|^rIkJn?UKABUC>O z;SqLMbdok8Vroz3)+&$@P;yn{NSJT zf^F!=L!PVPPx|AGEe$wygL?Y-c>~RR7^p)`A$hFWgCkqQX^Uw3NpB-6d|mS~%5mfm zHr>nSU|%`p1P(@)w^pw=UH&1Efgfwvr9YYq?3&<5l79z$PYDZPCygK#^E{XHa;*nF z(jkZ+5qQ9k9=!9%;KA(uL3r>mfVKq9 zV?mHzt%)B8Qzgnfc+FI&4+B2r4LW@o@F5EiXwnCcDo(e)6aeKs#oz-54+ecO_<;2O zoj%kHh6hF;3_sxTfG2){yMG?=0PgLcJ^d0J%hR$t)?@*%|H?kQY;8rrOr9glM4D-&1EiT~3Z5~2sV1YPue%GRW{9HsW zK5HZMNTu?_Y2luzuB{d@Ju7?7cR%?}%qCfgoCm|Ue=xzzz##AUzKegS5W|ojZ@D-PCHuwEFSu6T;pqDwEtAhI~A}sz96S? zjq>Kk`s5;DpyZfRF1RLj+S5<8*4;pT`VB7ul4H#cj9bu?_}DnjJ|ZB$9R?@@m2$aA z{V;w$6n}H)c~9Jb-qPvZXS3Y@<;yKBx|GiJ((u0vkW!h=_R@an2~iIo_b%#(bekhP z$RtIiY=g0E+CHbkYkf2i{%u0?mXE zj$Wc(U|>VfzeF$4P#7_o=i3eW5lxLu-OG8{cW^)9SlPEpFP`v0@hjbpM+_w0pZz7lKqh?0**`UL@rmU4}m_z!00Wbd01KtCW7=H)@0001;w}I>c0004VQb$4nuFf3k0000mP)t-sn9!hedxQV~ z{{R30ti`?6?(W_}IlUMNDU{|AV!hr$IlUMN000000000000000W3d{Q00048NklPxlo!B9$n_hX?Vzo#t=J#NV77^>8tq(d z=xG4NsRw4f^-Ce@T7ZDMA4qv0CZK|4V2vecb|TB?&GCC`vL1vRr3K*}A=UO`6?89;h> ziRji-s)iMP^ndjQnEqM4W1&FH>Cr_V89U4f|FfY-@r)j*LFhaG(mOZMVVAtu!C(6Q zsF5ZJ6QD=>?*mZx0)S8?Nk3cAZ;ZU)8Ca`T_cObkO08jMDL>>ijW%Al@f?FdOmXUe@(DuL4mw)6xHs-&Us=TKMRqid; znr>^*0SJh7Vah@Tb_`4seh>B21#sSi6)=+asxQ+LrQ5QHprRtQ!nZHxe$B#)|T^#jq=`}fhK?) z+9R$nHHSuOk%5N*GT<4&%N9Y(jGthAz0~uQ_)^95M_%)A7E?F8;v+WacS$$yZT@Nx zBm*3}PkOn^xi)SfqA2S(A}S4dlh_aPW3lc}o4p1=dpopAn*ku&bW|Kd(|J??7o*X? s%D&4k3c$4m^$vXP>JH%K(EsWB1{oqdE)waMqyPW_07*qoM6N<$g2NoedjJ3c diff --git a/graphics/pokemon/togetic/normal.pal b/graphics/pokemon/togetic/normal.pal index 0b17314592fb..951bc0f040e6 100644 --- a/graphics/pokemon/togetic/normal.pal +++ b/graphics/pokemon/togetic/normal.pal @@ -2,17 +2,17 @@ JASC-PAL 0100 16 152 208 160 -112 120 128 -248 248 248 +115 123 131 +255 255 255 0 0 0 -168 192 184 -208 232 232 -216 64 56 -184 24 8 -40 144 224 -16 96 184 -192 48 32 -136 16 16 +172 197 189 +213 238 238 +222 65 57 +189 24 8 +41 148 230 +16 98 189 +222 65 57 +189 24 8 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/totodile/anim_front.png b/graphics/pokemon/totodile/anim_front.png index 49e4fee75ad7f0ce5fcc5477e38bd98c3ab94b51..25e0a234e6d0854573fa83f9cf7ecfcbed86101d 100644 GIT binary patch delta 784 zcmV+r1MmEn2Ac+u7=H)@0001tU!Pb20004VQb$4nuFf3k0000mP)t-s(3rR}gT*mg zgKD(ql-2(b5D@?W|1nyFw6wH)7yz_NQq4gi=6idrgDL;TQn+YnIVFyW0007+Nkl5dmM*FUx}Dc8NftS0}DS0Sl=fp*6VVf_|?2tgW^CO1!C60jj_6LRbMGVtD}3 z4PDP|KLj8yl=PB5)DYH{58lfFSQbCL0gxOJ797CPOYWKPd^Af37XW_tpG*_NkMt?9 zE0CiOk?mcNA%BTrQ>icP=J5!DbDh;h(-gq>ZQu8eM?!GHB~z28wKtLPP4w22_KWGF z26bRRj$^l+^hj&U1Jlb@z@}FZu%A$DY^^443fQ!#&eK~v?SK-v-H&542hIT~v^8kj z_pLQ|;ItTAzhy91e0Fq}0X0N654K0j4@4v{MK*o!T7Tg}*d956nbl$MLvDme1%RSf z2YM6|f+8fYq+SvU3h2?1L9j@Y04LBzfSrW>|IiOY(gD<@x#AZ0^!91py0r}1;Cb^o!>41va|D>1psk= zcIKh7XG?r~k)54=0YLOe7}VE^^<3Hv%II5Sbjp2Qa|Fz3m0a8r; zIsO*`(l{Uh>|^|wYQjno3b3hHWAI|u>ds%S0}#`{-tPM1^wrAb1RR8z!-bHH0UZ#8 z@rUzQtHj_F``8}@r_#^f)6v<(kISau&{U-0GLo%$Uq?IczBS2Ao$>jxM*n3%@h*=000SaNLh0L01m_e01m_fl`9S# z0007vNkl!U-;?b=Ea8R>R%Wq%65^!G<=C3ai{2`dE+ zN)es`QP2b_&|4x(OM(0ZAU6oPJWD(P_YBNlKsNI1wFq=$SKi;vH#f8Le4f|De;RzJ zwOe-%eGXCLKEKm{1ORazpdb?34YW1rd#B*m5E}L-XXnRPS1thb%jx9B{_GQZ3_if# z;AV0W&)(1#N`Ij*PKHjP{TRRkXXlz$=wJ)L9G#p39Fu^G1XQ75M7~9iO~~-P3$Q<< z2nIUwy2co6_UxnF1n!za;vK!azC^%uI-Bie9!tF8^)!zFKbq|K4tq8KlIugP_J9Jm z9tJn_X|9*TG4ri{{CxgF=@N(jgaW+w;PvNc@W2A}$bW?yzI}?ocdM|y$@mb*M(Jf) z$~5ub6G@~}0OPVOfCt+%QiT~)*z<^wXuuyYmOrpjnsbwpWu}YeH=HMgoO3FLi0_Y~ z2Eg~=9Pc(*jesg4;`pcqV&0+@e0(nCft`h+dnqjuZ~;_)j5L)zU?!#C03#QbGz(jX z2AHZ!V}C*jM+$cPd#+T?-w1|p91=}5(ZpYhf5{(^%iCM?2Q;wq2lRGd^9M9=u<{4A z!n!}WBzE^7{(#!u>;51ncQ^Wj9J(f}a!|V){Xq`DMW}f&7XLbq0O;La*$vk0gkol zi*8(4d*A|C6vRDi545B;Sj2g@KmnEK=lW%YgG1`UmSS%#6}dXgk6R z;)cApd5~8A!E$t!2{ZULHc9R7#yq5hS!Kc`wE%|0!ZgvuPn#putVM$&YybcN07*qo JLc0004VQb$4nuFf3k0000mP)t-s(3rR}gT*mg zgKD(ql-2(b5D@?W|1nyFw6wH)7yz_NQq4gi=6idrgDL;TQn+YnIVFyW0004)Nklsx90aQ*2yg;z0_-I0`_n%O!2qaDbH_J8f#HQ3ck|B8U0`0AM*KlAtUqUE?!XXi z^RQC<0FX`2tXOm4N`AG_N5iBG`dWL;{<au&{U-0GLo%$Uq?IczBS2Ao$>jxM*n3%@h*=000SaNLh0L01m_e01m_fl`9S# z0004^Nkler5uJ~um`R@78{ZEMF{OgZOmdZ=h>S#y=QE`2? zu?ZlY251Dz6ay6lvv7c74`opA9-r;q-4y{a7rpN3O8U%};R5yMpnD#s*ZhROGUxlP zLZGq*Gmza?%*!fH&JQ+S} zlhM+*Il!qjuU?L@ngjgGm2KS~67ZQj%ug~d!q93n%6~FHj+_UkiLW)#$+8bfZ$4#R zgtZ@eJ&=pItiw~gGx<3 diff --git a/graphics/pokemon/totodile/normal.pal b/graphics/pokemon/totodile/normal.pal index bf7ef18aff0a..ce70fb2528c0 100644 --- a/graphics/pokemon/totodile/normal.pal +++ b/graphics/pokemon/totodile/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 208 152 184 -32 136 184 -40 88 128 -80 192 216 -152 224 248 +49 131 197 +49 90 131 +106 180 230 +148 213 255 16 16 16 -248 248 248 -64 64 72 -176 176 176 -120 24 0 -152 80 88 -200 64 32 -232 120 120 -144 128 32 -248 224 136 +255 255 255 +49 90 131 +180 180 180 +123 24 0 +180 74 82 +205 65 32 +230 123 123 +172 131 41 +255 197 82 184 104 104 diff --git a/graphics/pokemon/totodile/shiny.pal b/graphics/pokemon/totodile/shiny.pal index 6c3f512048ef..3bc0bc64c643 100644 --- a/graphics/pokemon/totodile/shiny.pal +++ b/graphics/pokemon/totodile/shiny.pal @@ -8,7 +8,7 @@ JASC-PAL 168 248 216 16 16 16 248 248 248 -56 56 56 +24 104 72 176 176 176 24 72 128 136 64 64 diff --git a/graphics/pokemon/typhlosion/anim_front.png b/graphics/pokemon/typhlosion/anim_front.png index a4f46ae24aad76de64828e89b401310bdc5d6cc0..bc4b7c45cccb7b1e341e1e6429808cb640a11c3f 100644 GIT binary patch delta 1358 zcmV-U1+n^o3)Kpc7=H)@0001tU!Pb20004VQb$4nuFf3k0000mP)t-sn9!i!0094D z0RP?q|C|6pT9gPNT0w)Pq>D=b?v!d$DG(44|NsBh#d81v03bnXTV6U&000EjNkl{I|9|@c_avaH8EdwBlY6|NF~aAg4S#d{fw}!i)teq;jD4qH zOoPF{m*tf{0n)6-tnc+CFqQx;pVylVuo$&nO_VQ&#}t6)vZ(xVIx@cxFVYoHlmy*-?-qv*>{ zl2b_bz1z*{{f%JyApnZ;D`I?zJ2@5IS^vVdb^CvYm7EdWs;E&P5{Tj5EbElkCb zqQ@}EN+HZ!Ktu@b!SLDw2hv93tA(jFlHPX!M!bmuu4f|=Uc})19pGQYaMN~#2@6kv z=zk6%7;w`B0pNWm4D=xB3nAzpL_kdgB4ma;C4WG%5Q3HmC4#vibU;a@Owa(QPy1O- zLLtx*-@lYZ_zgESxFn9FJsHmON~yak6mj}Ur09EcB!v1ZM7{jqOaP6brw0juAG_(p{c!^P?#?}$D&Th& z_kX9h3u4*+vSrXt$x^k@8v^X77MisUF^q|4PTH)`s;LG50qkNMKvqpQ5Gd>fuq$7) zW05eZ+Ij#M+k8pqaxuBkYQ`(T5&&mkmlVbeIqO#}vPc}8Ah}wZl4k=9px((^tDQmF z)c{z?zZycr7&=IRGMKUE>Tx23q&w2@jDMNg1Wl=WEWKV8-}^WFaV$q8*UPqt{>?^+ zj-lkxJ@#)B;%?%Ka8Byq)c#Aq3wj2A2*v&lBjO?|{;?#J`!}hLq^=-@LH{Q0MUenr z>E9q>9lcGU_HTfPUi&Nkn|wcs3<>ejzhOpyVFeJoCy)J`har8>w&(uMJfZe)XnzDr zEfe+_A$`>`hHDq6ACF&k?%y0C7=z;QaL;V+dCwN8e?#{sB+wKW0tCL7Y8K)k3&1yz zZZX^m>1wOxkpTy8gxCXW0kvEVp0<@naQSNIo(UeWM|uqTa&;?u^W7HCL9vs^)k3K_ zC-rv=FAMj}N)`(*E{E<)aBnLAYk%*cuEcBxZoLEl$^un9Qt3b4!?_?G_pzL-d{n$Y*{vSga80dm{v@iqkFH%7D z`$f&|gI!DkxL!@ogDcdZ1ds@U`!DCU^2e9C>d}H+ncn&a>Bn5|`qDno4o7CVspHSv z?!hm}ovdi#afXH=0%G4lKDpcW!PC(C20cRD1zO)AKc%z}27QA<_}}e=KmF8s1H`>C QbpQYW07*qoM6N<$f~Tv9c>n+a delta 1401 zcmV-<1%~?73V;ic7=Hu<0000^sfSHnukCs~c1%5d-+$$9 zne!Wj)ctO^dw>3Ok*`rI0w+iH4&=LM2ge9(5^B3rk&}Z?_x!Zm^?f8-lu|igKRfB3 zcMc#A1eS1=Ro2ga|JSnfJ;3{%-`>6#%#m zGEw(g|EGHnFaWYm5Q+LBR%dw$SRw3!E1uN`B%)ac^r?&CNN2gx?~gyu`Y{53@Vu+6 zBD%F`5RWHFP<&nf7%)D6Sd!*~Hvs|9e^m3tN~YG$B$KgkfA1e@MAW?L<-pax?N2oT z^1X{}v42B<|G5SaAi_i0k8-I z(5MP{m#w||P0e*&C-W}`e_(HJIUK-u4YxH|4*=Y@LmeF5jxNP^JeVUb z2R({w$P?T3?DlpGnwax7ciY=;fk(l4V}Dv|4a~=OYY$9{>uOUi1NOYVUC-OiMwY$| z4se6ghGw3lEwhIH=LP&=ywtY|M>1x=8ca}WfllvU@O(>ASXv6c8;?83PeGk;Aw8V^PT39x#XRRTp_|dmrH>6Fax>D z5Zr@daFfzK@O79Zj0^XG!{$iOHv`ce7)?+KgeDQvRO}l>1acll{AO5UMXbr6>!%7Z zKDpyGj-M*PvdJy#P$xS#F=7j?0(S>Oi;)Vb?m!3L$t`jq>=moIUpz{Cb#lX>E_%Ij zfrgJ#1?zWi9>6+V^W+{YByUBHm3M%cCkfipm3$g={(2TMw-2koBmlfa^#-(okO1%w z(jNj6OX2^rcgP75P`m>M=(rXZ5o;e%^I^GEpUDwNS%v=q3k?MsD);c000000NkvXX Hu0mjfo?VG_ diff --git a/graphics/pokemon/typhlosion/back.png b/graphics/pokemon/typhlosion/back.png index 3252c26e906c07fc71b9d726ec69b149ed3b09b9..81bcbd42b6d14f5aaf013c92cc2613fba8c4ae0e 100644 GIT binary patch delta 746 zcmVc0004VQb$4nuFf3kks&{SuSrBfR9J=G*4wtD zAPffJ1_H8-EZ+ZZCkbbz>Y857VOEFcgrX)00Z7}q8XG0mzDqyKo(@2J_)g9f&qQC ztpses0GPZ8Ns*L)Ea#2BdyFfO71r~^>|@>!LrJkLnnsT^Ge z(_1K$)PdjtK+s3v(@3-j?EuQwlQ(Ry4yaffD1QUx+I0yk=MRiPX&&{T?XsNmbmS2X z?{xr8j#@l_pIPmn?@sioKof9m0ZkvOttUkDLGqt$d`1B$VSZui1uF9=(~_egdHmKv zU4@>%8Gu~cOnzJcHvp#!7f0ynGd;4Cr#o_f^>ibR7FC&ZS3xPrlv&z0K=j8d_Yo0A150J075A zi=gYkng@-?7-(^Dl8>MAxon>va9(!evVU5IwP32#@+(2#^A}?ABkJbx<#rBF#&Y$w zTnLZEZ43Dpc(;W6yqkbU`dtIPg;oA`1ZQ9&yjcP7f$s}=ZeS1LvIAc>P*$+t0QU{l z5zq}uaGP&4jC9^cFM&El*~oEaJgi`7A+C*w28LfoF*f7xfR0QfeF9uqRwtf-bw1o) cS^rY~0a;y2C;7b&_y7O^07*qoM6N<$f<0kRJOBUy delta 787 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 diff --git a/graphics/pokemon/xatu/front.png b/graphics/pokemon/xatu/front.png index 93c7947632917c03109708c89b8efe36b6a13592..e90c44fadf83ad6e80182169700b909ca0bab413 100644 GIT binary patch delta 576 zcmV-G0>Ay@1kD7H7=H)@0001;w}I>c0004VQb$4nuFf3k0000mP)t-s0I=vvltGl$ zK`Ck}w2L5fy+QxIF^gIN5D*am|NoSflu}YsgDC*CF#yfY&F(n>0ir$x0005YNkl6YOcXzLcVmAb{OqMxV1D z5WM#h+sT;dORj{p@BIV;pa~8aIWIYL1TBCGyaKQsfNp~LL6Eha1Vs%8pe{uSx(E*d z6I6i1Ujan`TtYwL82|(_nh4<$fFH#Z&_#F&u!E z|8V*X@!y4`3H0|F6MdB1hf*+jGC*ob9d^D=!andN79KoFcf0|BO3MRKo1g%kgQxUB z0f-cT0yHH6a1B|w1Bw$~4wD;zH1?BmJK9E+ay8P>(Vn0zx26F=Oz3>B#{u!{2sDiy z4JZ1mXmc7=Hu<00013M{Ml?001yhOjJbxu;@sTK#hp0P*6~SC;+f90LaM5=r{mYM@p#x00HeuL_t(YiQUt&OT$1E2JjOL z2HU~23K?9Cbhn7mRXNn9gOx7M5*?*~!D$CiYU_M0b~Xq_2Y;cpqK*#ME)E?`T?5hs zaS@EfOIqpBdvz5bA1Y zKq+l;n@HfPZj5uzuQ=~KC20f%7U#kyRP$6fen9650Do2h%A#XabqNWITmsS3hXEmk z;{(NwK8PY^i9W#UmI06z#GVfZOZZ<|>@Fb6&j`!?MSp=q$UHj!paY=9t)i%iibIxk zbU%UMaU*UV;OEm^@39A_)&S6ykJtPlL=CF9KVV6HqFT?%N4~H=*w7!A>j9?D zdw(VaV@`h>GR)tBapa-FkOqV6=9k^31^f9yo!85r*J70AU%a|14|DDW{WRurmC*Y2 jS)qIm7VY6*z+anhmK7jnEFVYx00000NkvXXu0mjfxeW=o diff --git a/graphics/pokemon/xatu/normal.pal b/graphics/pokemon/xatu/normal.pal index eb20bf6aea89..05aeca9fc5f5 100644 --- a/graphics/pokemon/xatu/normal.pal +++ b/graphics/pokemon/xatu/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 0 176 232 -72 144 64 -144 208 64 -40 104 40 -176 136 32 -112 184 64 -248 184 48 -136 88 0 +74 148 65 +148 213 65 +41 106 41 +180 139 32 +115 189 65 +255 189 49 +139 90 0 16 16 16 -248 248 248 -144 144 144 -80 80 80 -128 40 0 -176 48 0 -200 200 200 -232 56 0 +255 255 255 +148 148 148 +82 82 82 +131 41 0 +180 49 0 +205 205 205 +238 57 0 From 8ccffa617aa0b335aca2a18225fa95bd5243033e Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 26 Feb 2023 19:47:44 +0100 Subject: [PATCH 111/428] fix createspriteontargets on electricy anim --- data/battle_anim_scripts.s | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index 75a831a33132..46c7d3fbcaa3 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -24206,21 +24206,21 @@ WaterBubblesEffectLong: ElectricityEffect: playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_TARGET ElectricityEffectNoSound: - createspriteontargets gElectricitySpriteTemplate, ANIM_TARGET, 2, 5, 0, 5, 0, ANIM_TARGET + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 5, 0, 5, 0, ANIM_TARGET delay 2 - createspriteontargets gElectricitySpriteTemplate, ANIM_TARGET, 2, -5, 10, 5, 1, ANIM_TARGET + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -5, 10, 5, 1, ANIM_TARGET delay 2 - createspriteontargets gElectricitySpriteTemplate, ANIM_TARGET, 2, 15, 20, 5, 2, ANIM_TARGET + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 15, 20, 5, 2, ANIM_TARGET delay 2 - createspriteontargets gElectricitySpriteTemplate, ANIM_TARGET, 2, -15, -10, 5, 0, ANIM_TARGET + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -15, -10, 5, 0, ANIM_TARGET delay 2 - createspriteontargets gElectricitySpriteTemplate, ANIM_TARGET, 2, 25, 0, 5, 1, ANIM_TARGET + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 25, 0, 5, 1, ANIM_TARGET delay 2 - createspriteontargets gElectricitySpriteTemplate, ANIM_TARGET, 2, -8, 8, 5, 2, ANIM_TARGET + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -8, 8, 5, 2, ANIM_TARGET delay 2 - createspriteontargets gElectricitySpriteTemplate, ANIM_TARGET, 2, 2, -8, 5, 0, ANIM_TARGET + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 2, -8, 5, 0, ANIM_TARGET delay 2 - createspriteontargets gElectricitySpriteTemplate, ANIM_TARGET, 2, -20, 15, 5, 1, ANIM_TARGET + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -20, 15, 5, 1, ANIM_TARGET return ElectricityEffect_OnTargets: From 41bf9ea63ce4ea5b348ab573fefbcd24d38517e2 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sun, 26 Feb 2023 18:43:15 -0300 Subject: [PATCH 112/428] Removed trailing whitespaces --- asm/macros/battle_anim_script.inc | 6 +- asm/macros/battle_script.inc | 8 +- data/battle_anim_scripts.s | 152 +++++++++--------- data/battle_scripts_1.s | 18 +-- src/battle_anim.c | 42 ++--- src/battle_anim_ice.c | 2 +- .../pokemon_graphics/back_pic_coordinates.h | 2 +- .../pokemon_graphics/front_pic_coordinates.h | 132 +++++++-------- .../pokemon_graphics/shiny_palette_table.h | 2 +- src/debug.c | 2 +- src/easy_chat.c | 4 +- src/event_object_movement.c | 2 +- src/expansion_intro.c | 4 +- src/field_specials.c | 4 +- src/frontier_util.c | 2 +- src/mini_printf.c | 16 +- src/rom_header_gf.c | 4 +- src/trade.c | 4 +- test/ability_insomnia.c | 6 +- test/ability_water_absorb.c | 4 +- 20 files changed, 208 insertions(+), 208 deletions(-) diff --git a/asm/macros/battle_anim_script.inc b/asm/macros/battle_anim_script.inc index 6ff38769068c..85320bd3b8b5 100644 --- a/asm/macros/battle_anim_script.inc +++ b/asm/macros/battle_anim_script.inc @@ -270,7 +270,7 @@ .macro stopsound .byte 0x2f .endm - + @ same as createvisualtask except takes in battlerargindex, which is the battle anim arg index of the battler to loop through .macro createvisualtaskontargets addr:req, priority:req, battlerargindex:req, argv:vararg .byte 0x30 @@ -282,7 +282,7 @@ .2byte \argv .Lcreatetask_\@_2: .endm - + @ same as createsprite except takes in battlerargindex, which is the battle anim arg index of the battler to loop through .macro createspriteontargets template:req, anim_battler:req, subpriority_offset:req, battlerargindex:req, argv:vararg .byte 0x31 @@ -298,7 +298,7 @@ .2byte \argv .Lsprite_\@_2: .endm - + @ does not overwrite gBattleAnimArgs[battlerargindex], some sprite templates are too dependent on the value (e.g. heal block) .macro createspriteontargets_onpos template:req, anim_battler:req, subpriority_offset:req, battlerargindex:req, argv:vararg .byte 0x32 diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index 66c60a7cf060..c96b5fdd2dfe 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -1299,7 +1299,7 @@ .byte 0xfe .4byte \failInstr .endm - + .macro callnative func:req .byte 0xff .4byte \func @@ -1317,7 +1317,7 @@ .2byte \holdEffect .4byte \jumpInstr .endm - + .macro jumpifmorethanhalfHP battler:req, jumpInstr:req callnative BS_JumpIfMoreThanHalfHP .byte \battler @@ -1328,7 +1328,7 @@ .macro cancelmultiturnmoves battler:req various \battler, VARIOUS_CANCEL_MULTI_TURN_MOVES .endm - + @ Stores Healing Wish effect. .macro storehealingwish battler:req various \battler, VARIOUS_STORE_HEALING_WISH @@ -1954,7 +1954,7 @@ .macro shellsidearmcheck various BS_ATTACKER, VARIOUS_SHELL_SIDE_ARM_CHECK .endm - + .macro jumpifrodaffected battler:req, jumpInstr:req various \battler, VARIOUS_JUMP_IF_ROD .4byte \jumpInstr diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index 46c7d3fbcaa3..cd011c0f4685 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -12036,168 +12036,168 @@ ShellTrapUnleash: monbg ANIM_TARGET waitplaysewithpan SE_M_REFLECT, SOUND_PAN_ATTACKER, 0x10 delay 0x6 - createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 + createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 + createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 + createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 + createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 + createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 + createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 + createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 + createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 + createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x0 - createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x0 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x2 - createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x4 - createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x4 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x2 - createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x8 - createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x8 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x2 - createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0xc - createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0xc + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x2 - createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x10 - createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x10 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x2 - createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x14 - createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x14 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x2 - createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x18 - createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x18 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 waitforvisualfinish call ShellTrapFireLaunch1 - createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0, 0x38, 0x4, 0x4, 0x1 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0, 0x38, 0x4, 0x4, 0x1 delay 0x3 - createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xfff6, 0x0, 0xfff6, 0x38, 0x4, 0x4, 0x1 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xfff6, 0x0, 0xfff6, 0x38, 0x4, 0x4, 0x1 delay 0x3 - createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xa, 0x0, 0xa, 0x38, 0xfffc, 0x3, 0x1 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xa, 0x0, 0xa, 0x38, 0xfffc, 0x3, 0x1 delay 0x3 - createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xffec, 0x0, 0xffec, 0x38, 0xfffc, 0x5, 0x1 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xffec, 0x0, 0xffec, 0x38, 0xfffc, 0x5, 0x1 delay 0x3 call ShellTrapFireLaunch2 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 delay 0x3 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 delay 0x3 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 delay 0x3 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 delay 0x3 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 delay 0x3 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 delay 0x3 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 delay 0x3 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 delay 0x3 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 delay 0x3 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 delay 0x3 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 delay 0x3 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 delay 0x3 waitforvisualfinish clearmonbg ANIM_TARGET end ShellTrapFireLaunch1: - createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0, 0x38, 0x4, 0x4, 0x1 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0, 0x38, 0x4, 0x4, 0x1 delay 0x3 - createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xfff6, 0x0, 0xfff6, 0x38, 0x4, 0x4, 0x1 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xfff6, 0x0, 0xfff6, 0x38, 0x4, 0x4, 0x1 delay 0x3 - createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xa, 0x0, 0xa, 0x38, 0xfffc, 0x3, 0x1 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xa, 0x0, 0xa, 0x38, 0xfffc, 0x3, 0x1 delay 0x3 - createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xffec, 0x0, 0xffec, 0x38, 0xfffc, 0x5, 0x1 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xffec, 0x0, 0xffec, 0x38, 0xfffc, 0x5, 0x1 delay 0x3 - createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xf, 0x0, 0xf, 0x38, 0x4, 0x4, 0x1 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xf, 0x0, 0xf, 0x38, 0x4, 0x4, 0x1 delay 0x3 - createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xffec, 0x0, 0xffec, 0x38, 0x4, 0x4, 0x1 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xffec, 0x0, 0xffec, 0x38, 0x4, 0x4, 0x1 delay 0x3 - createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0x14, 0x0, 0x14, 0x38, 0x4, 0x4, 0x1 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0x14, 0x0, 0x14, 0x38, 0x4, 0x4, 0x1 delay 0x3 return ShellTrapFireLaunch2: - createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0, 0x38, 0x4, 0x4, 0x1 - createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0, 0x38, 0x4, 0x4, 0x1 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x3 - createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xfff6, 0x0, 0xfff6, 0x38, 0x4, 0x4, 0x1 - createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xfff6, 0x0, 0xfff6, 0x38, 0x4, 0x4, 0x1 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x3 - createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xa, 0x0, 0xa, 0x38, 0xfffc, 0x3, 0x1 - createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xa, 0x0, 0xa, 0x38, 0xfffc, 0x3, 0x1 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x3 - createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xffec, 0x0, 0xffec, 0x38, 0xfffc, 0x5, 0x1 - createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xffec, 0x0, 0xffec, 0x38, 0xfffc, 0x5, 0x1 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x3 - createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xf, 0x0, 0xf, 0x38, 0x4, 0x4, 0x1 - createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xf, 0x0, 0xf, 0x38, 0x4, 0x4, 0x1 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x3 - createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xffec, 0x0, 0xffec, 0x38, 0x4, 0x4, 0x1 - createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xffec, 0x0, 0xffec, 0x38, 0x4, 0x4, 0x1 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x3 - createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0x14, 0x0, 0x14, 0x38, 0x4, 0x4, 0x1 - createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0x14, 0x0, 0x14, 0x38, 0x4, 0x4, 0x1 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x3 return @@ -14367,7 +14367,7 @@ Move_SCORCHING_SANDS:: Move_JUNGLE_HEALING:: goto Move_AROMATHERAPY - + Move_SILK_TRAP:: loadspritegfx ANIM_TAG_PROTECT loadspritegfx ANIM_TAG_SPIDER_WEB @@ -14376,11 +14376,11 @@ Move_SILK_TRAP:: createsprite gSpiderWebSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, FALSE waitforvisualfinish createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_PROTECT, 0, 10, 10, RGB_LIME_GREEN - monbg ANIM_ATK_PARTNER - waitplaysewithpan SE_M_REFLECT, SOUND_PAN_ATTACKER, 0x10 + monbg ANIM_ATK_PARTNER + waitplaysewithpan SE_M_REFLECT, SOUND_PAN_ATTACKER, 0x10 createsprite gProtectSpriteTemplate, ANIM_ATTACKER, 2, 24, 0, 90 waitforvisualfinish - clearmonbg ANIM_ATK_PARTNER + clearmonbg ANIM_ATK_PARTNER end Move_WICKED_BLOW:: diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 0d8f80f774ca..35d8db8ddf87 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -418,7 +418,7 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectTeatime @ EFFECT_TEATIME .4byte BattleScript_EffectAttackUpUserAlly @ EFFECT_ATTACK_UP_USER_ALLY .4byte BattleScript_EffectShellTrap @ EFFECT_SHELL_TRAP - + BattleScript_EffectAttackUpUserAlly: jumpifnoally BS_ATTACKER, BattleScript_EffectAttackUp attackcanceler @@ -461,7 +461,7 @@ BattleScript_EffectTeatime:: attackstring ppreduce jumpifteanoberry BattleScript_ButItFailed -@ at least one battler is affected +@ at least one battler is affected attackanimation waitanimation BattleScript_TeatimeLoop: @@ -561,7 +561,7 @@ BattleScript_AffectionBasedStatusHeal_Continue: BattleScript_ShellTrapSetUp:: printstring STRINGID_EMPTYSTRING3 waitmessage 0x1 - playanimation BS_ATTACKER, B_ANIM_SHELL_TRAP_SETUP, NULL + playanimation BS_ATTACKER, B_ANIM_SHELL_TRAP_SETUP, NULL printstring STRINGID_PREPARESHELLTRAP waitmessage B_WAIT_TIME_LONG end2 @@ -1428,7 +1428,7 @@ BattleScript_DoubleShockRemoveType:: printstring STRINGID_ATTACKERLOSTELECTRICTYPE waitmessage B_WAIT_TIME_LONG return - + BattleScript_EffectPurify: attackcanceler attackstring @@ -3342,7 +3342,7 @@ BattleScript_AbilityProtectsDoesntAffect: call BattleScript_AbilityProtectsDoesntAffectRet orhalfword gMoveResultFlags, MOVE_RESULT_FAILED goto BattleScript_MoveEnd - + BattleScript_InsomniaProtects: pause B_WAIT_TIME_SHORT call BattleScript_AbilityPopUp @@ -3435,7 +3435,7 @@ BattleScript_EffectFreezeHit:: BattleScript_EffectParalyzeHit:: setmoveeffect MOVE_EFFECT_PARALYSIS goto BattleScript_EffectHit - + BattleScript_EffectExplosion_AnimDmgRet: jumpifbyte CMP_NO_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_MISSED, BattleScript_ExplosionAnimRet call BattleScript_PreserveMissedBitDoMoveAnim @@ -4255,7 +4255,7 @@ BattleScript_BattleScript_EffectParalyzeNoTypeCalc: resultmessage waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd - + BattleScript_VoltAbsorbHeal: copybyte gBattlerAbility, gBattlerTarget tryhealquarterhealth BS_TARGET BattleScript_MonMadeMoveUseless @ Check if max hp @@ -7727,7 +7727,7 @@ BattleScript_GrudgeTakesPp:: printstring STRINGID_PKMNLOSTPPGRUDGE waitmessage B_WAIT_TIME_LONG return - + BattleScript_MagicCoatBounce:: attackstring ppreduce @@ -8009,7 +8009,7 @@ BattleScript_AftermathDmg:: waitmessage B_WAIT_TIME_LONG tryfaintmon BS_ATTACKER return - + BattleScript_DampPreventsAftermath:: pause B_WAIT_TIME_SHORT call BattleScript_AbilityPopUp diff --git a/src/battle_anim.c b/src/battle_anim.c index a7faec1fda43..724587588f76 100644 --- a/src/battle_anim.c +++ b/src/battle_anim.c @@ -447,14 +447,14 @@ static u8 GetBattleAnimMoveTargets(u8 battlerArgIndex, u8 *targets) case MOVE_TARGET_FOES_AND_ALLY: targets[0] = gBattleAnimArgs[battlerArgIndex]; numTargets = 1; - + if (IsBattlerAlive(targets[0] ^ BIT_FLANK)) { targets[1] = targets[0] ^ BIT_FLANK; numTargets++; } - + if (IsBattlerAlive(gBattleAnimAttacker ^ BIT_FLANK)) { - targets[2] = gBattleAnimAttacker ^ BIT_FLANK; + targets[2] = gBattleAnimAttacker ^ BIT_FLANK; numTargets++; } break; @@ -463,14 +463,14 @@ static u8 GetBattleAnimMoveTargets(u8 battlerArgIndex, u8 *targets) numTargets = 1; break; } - + return numTargets; } static s16 GetSubpriorityForMoveAnim(u8 argVar) { s16 subpriority; - + if (argVar & ANIMSPRITE_IS_TARGET) { argVar ^= ANIMSPRITE_IS_TARGET; @@ -493,7 +493,7 @@ static s16 GetSubpriorityForMoveAnim(u8 argVar) if (subpriority < 3) subpriority = 3; - + return subpriority; } @@ -519,7 +519,7 @@ static void Cmd_createsprite(void) gBattleAnimArgs[i] = T1_READ_16(sBattleAnimScriptPtr); sBattleAnimScriptPtr += 2; } - + subpriority = GetSubpriorityForMoveAnim(argVar); CreateSpriteAndAnimate( @@ -536,22 +536,22 @@ static void CreateSpriteOnTargets(const struct SpriteTemplate *template, u8 argV u8 targets[MAX_BATTLERS_COUNT]; int ntargets; s16 subpriority; - + for (i = 0; i < argsCount; i++) { gBattleAnimArgs[i] = T1_READ_16(sBattleAnimScriptPtr); sBattleAnimScriptPtr += 2; } - + subpriority = GetSubpriorityForMoveAnim(argVar); - + ntargets = GetBattleAnimMoveTargets(battlerArgIndex, targets); - + for (i = 0; i < ntargets; i++) { - + if (overwriteAnimTgt) gBattleAnimArgs[battlerArgIndex] = targets[i]; - + CreateSpriteAndAnimate( template, GetBattlerSpriteCoord(targets[i], BATTLER_COORD_X_2), @@ -575,13 +575,13 @@ static void Cmd_createspriteontargets_onpos(void) argVar = sBattleAnimScriptPtr[0]; sBattleAnimScriptPtr++; - + battlerArgIndex = sBattleAnimScriptPtr[0]; sBattleAnimScriptPtr++; argsCount = sBattleAnimScriptPtr[0]; sBattleAnimScriptPtr++; - + CreateSpriteOnTargets(template, argVar, battlerArgIndex, argsCount, FALSE); } @@ -599,13 +599,13 @@ static void Cmd_createspriteontargets(void) argVar = sBattleAnimScriptPtr[0]; sBattleAnimScriptPtr++; - + battlerArgIndex = sBattleAnimScriptPtr[0]; sBattleAnimScriptPtr++; argsCount = sBattleAnimScriptPtr[0]; sBattleAnimScriptPtr++; - + CreateSpriteOnTargets(template, argVar, battlerArgIndex, argsCount, TRUE); } @@ -656,21 +656,21 @@ static void Cmd_createvisualtaskontargets(void) taskPriority = sBattleAnimScriptPtr[0]; sBattleAnimScriptPtr++; - + battlerArgIndex = sBattleAnimScriptPtr[0]; sBattleAnimScriptPtr++; numArgs = sBattleAnimScriptPtr[0]; sBattleAnimScriptPtr++; - + // copy task arguments for (i = 0; i < numArgs; i++) { gBattleAnimArgs[i] = T1_READ_16(sBattleAnimScriptPtr); sBattleAnimScriptPtr += 2; } - + numArgs = GetBattleAnimMoveTargets(battlerArgIndex, targets); - + for (i = 0; i < numArgs; i++) { gBattleAnimArgs[battlerArgIndex] = targets[i]; diff --git a/src/battle_anim_ice.c b/src/battle_anim_ice.c index 44c1a4f22cc2..e6a5607b5aee 100644 --- a/src/battle_anim_ice.c +++ b/src/battle_anim_ice.c @@ -1289,7 +1289,7 @@ static void InitPoisonGasCloudAnim(struct Sprite *sprite) sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); - + #if B_UPDATED_MOVE_DATA >= GEN_5 { s16 x, y; diff --git a/src/data/pokemon_graphics/back_pic_coordinates.h b/src/data/pokemon_graphics/back_pic_coordinates.h index 8dbc2d2a98d9..5593e10a7990 100644 --- a/src/data/pokemon_graphics/back_pic_coordinates.h +++ b/src/data/pokemon_graphics/back_pic_coordinates.h @@ -518,7 +518,7 @@ const struct MonCoords gMonBackPicCoords[] = [SPECIES_DARKRAI] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_SHAYMIN] = { .size = MON_COORDS_SIZE(56, 40), .y_offset = 15 }, [SPECIES_ARCEUS] = ARCEUS_BACK_PIC_COORDS, -#endif +#endif #if P_GEN_5_POKEMON == TRUE [SPECIES_VICTINI] = { .size = MON_COORDS_SIZE(40, 64), .y_offset = 7 }, [SPECIES_SNIVY] = { .size = MON_COORDS_SIZE(56, 48), .y_offset = 11 }, diff --git a/src/data/pokemon_graphics/front_pic_coordinates.h b/src/data/pokemon_graphics/front_pic_coordinates.h index a484b85966f2..ca880e7efc6b 100644 --- a/src/data/pokemon_graphics/front_pic_coordinates.h +++ b/src/data/pokemon_graphics/front_pic_coordinates.h @@ -920,7 +920,7 @@ const struct MonCoords gMonFrontPicCoords[] = [SPECIES_OVERQWIL] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_ENAMORUS] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, #endif - // Megas + // Megas [SPECIES_VENUSAUR_MEGA] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 3 }, [SPECIES_CHARIZARD_MEGA_X] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_CHARIZARD_MEGA_Y] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, @@ -974,11 +974,11 @@ const struct MonCoords gMonFrontPicCoords[] = #if P_GEN_6_POKEMON == TRUE [SPECIES_DIANCIE_MEGA] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, #endif - // Special Mega + Primals + // Special Mega + Primals [SPECIES_RAYQUAZA_MEGA] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_KYOGRE_PRIMAL] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_GROUDON_PRIMAL] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, - // Alolan Forms + // Alolan Forms [SPECIES_RATTATA_ALOLAN] = { .size = MON_COORDS_SIZE(40, 48), .y_offset = 11 }, [SPECIES_RATICATE_ALOLAN] = { .size = MON_COORDS_SIZE(56, 48), .y_offset = 8 }, [SPECIES_RAICHU_ALOLAN] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, @@ -997,7 +997,7 @@ const struct MonCoords gMonFrontPicCoords[] = [SPECIES_MUK_ALOLAN] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 3 }, [SPECIES_EXEGGUTOR_ALOLAN] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_MAROWAK_ALOLAN] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 2 }, - // Galarian Forms + // Galarian Forms [SPECIES_MEOWTH_GALARIAN] = { .size = MON_COORDS_SIZE(48, 48), .y_offset = 9 }, [SPECIES_PONYTA_GALARIAN] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 8 }, [SPECIES_RAPIDASH_GALARIAN] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, @@ -1042,15 +1042,15 @@ const struct MonCoords gMonFrontPicCoords[] = #if P_GEN_7_POKEMON == TRUE [SPECIES_DECIDUEYE_HISUIAN] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, #endif - // Misc Forms - // Cosplay Pikachu + // Misc Forms + // Cosplay Pikachu [SPECIES_PIKACHU_COSPLAY] = { .size = MON_COORDS_SIZE(48, 48), .y_offset = 9 }, [SPECIES_PIKACHU_ROCK_STAR] = { .size = MON_COORDS_SIZE(48, 48), .y_offset = 9 }, [SPECIES_PIKACHU_BELLE] = { .size = MON_COORDS_SIZE(48, 48), .y_offset = 9 }, [SPECIES_PIKACHU_POP_STAR] = { .size = MON_COORDS_SIZE(48, 48), .y_offset = 9 }, [SPECIES_PIKACHU_PH_D] = { .size = MON_COORDS_SIZE(48, 48), .y_offset = 9 }, [SPECIES_PIKACHU_LIBRE] = { .size = MON_COORDS_SIZE(48, 48), .y_offset = 9 }, - // Cap Pikachu + // Cap Pikachu [SPECIES_PIKACHU_ORIGINAL_CAP] = { .size = MON_COORDS_SIZE(48, 48), .y_offset = 9 }, [SPECIES_PIKACHU_HOENN_CAP] = { .size = MON_COORDS_SIZE(48, 48), .y_offset = 9 }, [SPECIES_PIKACHU_SINNOH_CAP] = { .size = MON_COORDS_SIZE(48, 48), .y_offset = 9 }, @@ -1059,9 +1059,9 @@ const struct MonCoords gMonFrontPicCoords[] = [SPECIES_PIKACHU_ALOLA_CAP] = { .size = MON_COORDS_SIZE(48, 48), .y_offset = 9 }, [SPECIES_PIKACHU_PARTNER_CAP] = { .size = MON_COORDS_SIZE(48, 48), .y_offset = 9 }, [SPECIES_PIKACHU_WORLD_CAP] = { .size = MON_COORDS_SIZE(48, 48), .y_offset = 9 }, - // Pichu + // Pichu [SPECIES_PICHU_SPIKY_EARED] = { .size = MON_COORDS_SIZE(32, 40), .y_offset = 14 }, - // Unown + // Unown [SPECIES_UNOWN_B] = { .size = MON_COORDS_SIZE(24, 32), .y_offset = 16 }, [SPECIES_UNOWN_C] = { .size = MON_COORDS_SIZE(32, 32), .y_offset = 16 }, [SPECIES_UNOWN_D] = { .size = MON_COORDS_SIZE(32, 32), .y_offset = 16 }, @@ -1089,40 +1089,40 @@ const struct MonCoords gMonFrontPicCoords[] = [SPECIES_UNOWN_Z] = { .size = MON_COORDS_SIZE(24, 32), .y_offset = 16 }, [SPECIES_UNOWN_EMARK] = { .size = MON_COORDS_SIZE(24, 40), .y_offset = 15 }, [SPECIES_UNOWN_QMARK] = { .size = MON_COORDS_SIZE(24, 40), .y_offset = 13 }, - // Castform + // Castform [SPECIES_CASTFORM_SUNNY] = { .size = MON_COORDS_SIZE(40, 48), .y_offset = 9 }, [SPECIES_CASTFORM_RAINY] = { .size = MON_COORDS_SIZE(32, 48), .y_offset = 9 }, [SPECIES_CASTFORM_SNOWY] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 8 }, - // Deoxys + // Deoxys [SPECIES_DEOXYS_ATTACK] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_DEOXYS_DEFENSE] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 0 }, [SPECIES_DEOXYS_SPEED] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 1 }, #if P_GEN_4_POKEMON == TRUE - // Burmy + // Burmy [SPECIES_BURMY_SANDY_CLOAK] = { .size = MON_COORDS_SIZE(32, 56), .y_offset = 12 }, [SPECIES_BURMY_TRASH_CLOAK] = { .size = MON_COORDS_SIZE(32, 56), .y_offset = 8 }, - // Wormadam + // Wormadam [SPECIES_WORMADAM_SANDY_CLOAK] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 10 }, [SPECIES_WORMADAM_TRASH_CLOAK] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 10 }, - // Cherrim + // Cherrim [SPECIES_CHERRIM_SUNSHINE] = { .size = MON_COORDS_SIZE(48, 40), .y_offset = 12 }, - // Shellos + // Shellos [SPECIES_SHELLOS_EAST_SEA] = { .size = MON_COORDS_SIZE(40, 40), .y_offset = 14 }, - // Gastrodon + // Gastrodon [SPECIES_GASTRODON_EAST_SEA] = { .size = MON_COORDS_SIZE(56, 48), .y_offset = 8 }, - // Rotom + // Rotom [SPECIES_ROTOM_HEAT] = { .size = MON_COORDS_SIZE(56, 48), .y_offset = 10 }, [SPECIES_ROTOM_WASH] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 7 }, [SPECIES_ROTOM_FROST] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 4 }, [SPECIES_ROTOM_FAN] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 8 }, [SPECIES_ROTOM_MOW] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 12 }, - // Origin Forme + // Origin Forme [SPECIES_DIALGA_ORIGIN] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_PALKIA_ORIGIN] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_GIRATINA_ORIGIN] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, - // Shaymin + // Shaymin [SPECIES_SHAYMIN_SKY] = { .size = MON_COORDS_SIZE(56, 56), .y_offset = 7 }, - // Arceus + // Arceus [SPECIES_ARCEUS_FIGHTING] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_ARCEUS_FLYING] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_ARCEUS_POISON] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, @@ -1142,42 +1142,42 @@ const struct MonCoords gMonFrontPicCoords[] = [SPECIES_ARCEUS_FAIRY] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, #endif #if P_GEN_5_POKEMON == TRUE - // Basculin + // Basculin [SPECIES_BASCULIN_BLUE_STRIPED] = { .size = MON_COORDS_SIZE(56, 40), .y_offset = 16 }, [SPECIES_BASCULIN_WHITE_STRIPED] = { .size = MON_COORDS_SIZE(48, 40), .y_offset = 10 }, - // Darmanitan + // Darmanitan [SPECIES_DARMANITAN_ZEN_MODE] = { .size = MON_COORDS_SIZE(40, 40), .y_offset = 14 }, [SPECIES_DARMANITAN_ZEN_MODE_GALARIAN] = { .size = MON_COORDS_SIZE(48, 64), .y_offset = 2 }, - // Deerling + // Deerling [SPECIES_DEERLING_SUMMER] = { .size = MON_COORDS_SIZE(32, 48), .y_offset = 11 }, [SPECIES_DEERLING_AUTUMN] = { .size = MON_COORDS_SIZE(32, 48), .y_offset = 11 }, [SPECIES_DEERLING_WINTER] = { .size = MON_COORDS_SIZE(32, 48), .y_offset = 11 }, - // Sawsbuck + // Sawsbuck [SPECIES_SAWSBUCK_SUMMER] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_SAWSBUCK_AUTUMN] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_SAWSBUCK_WINTER] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 0 }, - // Therian Forms + // Therian Forms [SPECIES_TORNADUS_THERIAN] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_THUNDURUS_THERIAN] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 2 }, [SPECIES_LANDORUS_THERIAN] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, - // Kyurem + // Kyurem [SPECIES_KYUREM_WHITE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_KYUREM_BLACK] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, - // Keldeo + // Keldeo [SPECIES_KELDEO_RESOLUTE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 2 }, - // Meloetta + // Meloetta [SPECIES_MELOETTA_PIROUETTE] = { .size = MON_COORDS_SIZE(40, 64), .y_offset = 2 }, - // Genesect + // Genesect [SPECIES_GENESECT_DOUSE_DRIVE] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 0 }, [SPECIES_GENESECT_SHOCK_DRIVE] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 0 }, [SPECIES_GENESECT_BURN_DRIVE] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 0 }, [SPECIES_GENESECT_CHILL_DRIVE] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 0 }, #endif #if P_GEN_6_POKEMON == TRUE - // Greninja + // Greninja [SPECIES_GRENINJA_BATTLE_BOND] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 7 }, [SPECIES_GRENINJA_ASH] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, - // Vivillon + // Vivillon [SPECIES_VIVILLON_POLAR] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_VIVILLON_TUNDRA] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_VIVILLON_CONTINENTAL] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, @@ -1197,23 +1197,23 @@ const struct MonCoords gMonFrontPicCoords[] = [SPECIES_VIVILLON_JUNGLE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_VIVILLON_FANCY] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_VIVILLON_POKE_BALL] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, - // Flabébé + // Flabébé [SPECIES_FLABEBE_YELLOW_FLOWER] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 6 }, [SPECIES_FLABEBE_ORANGE_FLOWER] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 6 }, [SPECIES_FLABEBE_BLUE_FLOWER] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 6 }, [SPECIES_FLABEBE_WHITE_FLOWER] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 6 }, - // Floette + // Floette [SPECIES_FLOETTE_YELLOW_FLOWER] = { .size = MON_COORDS_SIZE(48, 64), .y_offset = 3 }, [SPECIES_FLOETTE_ORANGE_FLOWER] = { .size = MON_COORDS_SIZE(48, 64), .y_offset = 3 }, [SPECIES_FLOETTE_BLUE_FLOWER] = { .size = MON_COORDS_SIZE(48, 64), .y_offset = 3 }, [SPECIES_FLOETTE_WHITE_FLOWER] = { .size = MON_COORDS_SIZE(48, 64), .y_offset = 3 }, [SPECIES_FLOETTE_ETERNAL_FLOWER] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 3 }, - // Florges + // Florges [SPECIES_FLORGES_YELLOW_FLOWER] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_FLORGES_ORANGE_FLOWER] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_FLORGES_BLUE_FLOWER] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_FLORGES_WHITE_FLOWER] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, - // Furfrou + // Furfrou [SPECIES_FURFROU_HEART_TRIM] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 2 }, [SPECIES_FURFROU_STAR_TRIM] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 2 }, [SPECIES_FURFROU_DIAMOND_TRIM] = { .size = MON_COORDS_SIZE(48, 64), .y_offset = 2 }, @@ -1223,41 +1223,41 @@ const struct MonCoords gMonFrontPicCoords[] = [SPECIES_FURFROU_LA_REINE_TRIM] = { .size = MON_COORDS_SIZE(48, 64), .y_offset = 2 }, [SPECIES_FURFROU_KABUKI_TRIM] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 2 }, [SPECIES_FURFROU_PHARAOH_TRIM] = { .size = MON_COORDS_SIZE(48, 64), .y_offset = 2 }, - // Meowstic + // Meowstic [SPECIES_MEOWSTIC_FEMALE] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 2 }, - // Aegislash + // Aegislash [SPECIES_AEGISLASH_BLADE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, - // Pumpkaboo + // Pumpkaboo [SPECIES_PUMPKABOO_SMALL] = { .size = MON_COORDS_SIZE(40, 40), .y_offset = 15 }, [SPECIES_PUMPKABOO_LARGE] = { .size = MON_COORDS_SIZE(48, 48), .y_offset = 12 }, [SPECIES_PUMPKABOO_SUPER] = { .size = MON_COORDS_SIZE(48, 48), .y_offset = 10 }, - // Gourgeist + // Gourgeist [SPECIES_GOURGEIST_SMALL] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 5 }, [SPECIES_GOURGEIST_LARGE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 2 }, [SPECIES_GOURGEIST_SUPER] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, - // Xerneas + // Xerneas [SPECIES_XERNEAS_ACTIVE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, - // Zygarde + // Zygarde [SPECIES_ZYGARDE_10] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 2 }, [SPECIES_ZYGARDE_10_POWER_CONSTRUCT] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 2 }, [SPECIES_ZYGARDE_50_POWER_CONSTRUCT] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_ZYGARDE_COMPLETE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, - // Hoopa + // Hoopa [SPECIES_HOOPA_UNBOUND] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, #endif #if P_GEN_7_POKEMON == TRUE - // Oricorio + // Oricorio [SPECIES_ORICORIO_POM_POM] = { .size = MON_COORDS_SIZE(56, 56), .y_offset = 5 }, [SPECIES_ORICORIO_PAU] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 3 }, [SPECIES_ORICORIO_SENSU] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 4 }, - // Rockruff + // Rockruff [SPECIES_ROCKRUFF_OWN_TEMPO] = { .size = MON_COORDS_SIZE(40, 48), .y_offset = 11 }, - // Lycanroc + // Lycanroc [SPECIES_LYCANROC_MIDNIGHT] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 1 }, [SPECIES_LYCANROC_DUSK] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 3 }, - // Wishiwashi + // Wishiwashi [SPECIES_WISHIWASHI_SCHOOL] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 4 }, - // Silvally + // Silvally [SPECIES_SILVALLY_FIGHTING] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_SILVALLY_FLYING] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_SILVALLY_POISON] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, @@ -1275,7 +1275,7 @@ const struct MonCoords gMonFrontPicCoords[] = [SPECIES_SILVALLY_DRAGON] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_SILVALLY_DARK] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_SILVALLY_FAIRY] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, - // Minior + // Minior [SPECIES_MINIOR_METEOR_ORANGE] = { .size = MON_COORDS_SIZE(48, 40), .y_offset = 14 }, [SPECIES_MINIOR_METEOR_YELLOW] = { .size = MON_COORDS_SIZE(48, 40), .y_offset = 14 }, [SPECIES_MINIOR_METEOR_GREEN] = { .size = MON_COORDS_SIZE(48, 40), .y_offset = 14 }, @@ -1289,26 +1289,26 @@ const struct MonCoords gMonFrontPicCoords[] = [SPECIES_MINIOR_CORE_BLUE] = { .size = MON_COORDS_SIZE(48, 40), .y_offset = 14 }, [SPECIES_MINIOR_CORE_INDIGO] = { .size = MON_COORDS_SIZE(48, 40), .y_offset = 14 }, [SPECIES_MINIOR_CORE_VIOLET] = { .size = MON_COORDS_SIZE(48, 40), .y_offset = 14 }, - // Mimikyu + // Mimikyu [SPECIES_MIMIKYU_BUSTED] = { .size = MON_COORDS_SIZE(48, 40), .y_offset = 12 }, - // Necrozma + // Necrozma [SPECIES_NECROZMA_DUSK_MANE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_NECROZMA_DAWN_WINGS] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_NECROZMA_ULTRA] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, - // Magearna + // Magearna [SPECIES_MAGEARNA_ORIGINAL_COLOR] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 0 }, #endif #if P_GEN_8_POKEMON == TRUE - // Cramorant + // Cramorant [SPECIES_CRAMORANT_GULPING] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_CRAMORANT_GORGING] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, - // Toxtricity + // Toxtricity [SPECIES_TOXTRICITY_LOW_KEY] = { .size = MON_COORDS_SIZE(48, 64), .y_offset = 2 }, - // Sinistea + // Sinistea [SPECIES_SINISTEA_ANTIQUE] = { .size = MON_COORDS_SIZE(40, 32), .y_offset = 17 }, - // Polteageist + // Polteageist [SPECIES_POLTEAGEIST_ANTIQUE] = { .size = MON_COORDS_SIZE(48, 48), .y_offset = 11 }, - // Alcremie + // Alcremie [SPECIES_ALCREMIE_RUBY_CREAM] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, [SPECIES_ALCREMIE_MATCHA_CREAM] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, [SPECIES_ALCREMIE_MINT_CREAM] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, @@ -1317,28 +1317,28 @@ const struct MonCoords gMonFrontPicCoords[] = [SPECIES_ALCREMIE_RUBY_SWIRL] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, [SPECIES_ALCREMIE_CARAMEL_SWIRL] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, [SPECIES_ALCREMIE_RAINBOW_SWIRL] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, - // Eiscue + // Eiscue [SPECIES_EISCUE_NOICE_FACE] = { .size = MON_COORDS_SIZE(40, 64), .y_offset = 0 }, - // Indeedee + // Indeedee [SPECIES_INDEEDEE_FEMALE] = { .size = MON_COORDS_SIZE(40, 48), .y_offset = 9 }, - // Morpeko + // Morpeko [SPECIES_MORPEKO_HANGRY] = { .size = MON_COORDS_SIZE(32, 40), .y_offset = 14 }, - // Zacian + // Zacian [SPECIES_ZACIAN_CROWNED_SWORD] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, - // Zamazenta + // Zamazenta [SPECIES_ZAMAZENTA_CROWNED_SHIELD] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 0 }, - // Eternatus + // Eternatus [SPECIES_ETERNATUS_ETERNAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 3 }, - // Urshifu + // Urshifu [SPECIES_URSHIFU_RAPID_STRIKE_STYLE] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 0 }, - // Zarude + // Zarude [SPECIES_ZARUDE_DADA] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 2 }, - // Calyrex + // Calyrex [SPECIES_CALYREX_ICE_RIDER] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_CALYREX_SHADOW_RIDER] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_ENAMORUS_THERIAN] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, #endif - // Egg + // Egg [SPECIES_EGG] = { .size = MON_COORDS_SIZE(24, 24), .y_offset = 20 }, }; diff --git a/src/data/pokemon_graphics/shiny_palette_table.h b/src/data/pokemon_graphics/shiny_palette_table.h index 81bc45d4d9a9..5ad52f6dcbf9 100644 --- a/src/data/pokemon_graphics/shiny_palette_table.h +++ b/src/data/pokemon_graphics/shiny_palette_table.h @@ -1328,7 +1328,7 @@ const struct CompressedSpritePalette gMonShinyPaletteTable[] = SPECIES_SHINY_PAL(CALYREX_ICE_RIDER, gMonShinyPalette_CalyrexIceRider), SPECIES_SHINY_PAL(CALYREX_SHADOW_RIDER, gMonShinyPalette_CalyrexShadowRider), - + SPECIES_SHINY_PAL(ENAMORUS_THERIAN, gMonShinyPalette_CircledQuestionMark), //gMonShinyPalette_EnamorusTherian), #endif SPECIES_SHINY_PAL(EGG, gMonPalette_Egg), diff --git a/src/debug.c b/src/debug.c index 90081eb61714..301bae51df30 100644 --- a/src/debug.c +++ b/src/debug.c @@ -1255,7 +1255,7 @@ static void DebugAction_Util_Weather_SelectId(u8 taskId) if (gTasks[taskId].data[3] <= 15 || gTasks[taskId].data[3] >= 20) StringCopyPadded(gStringVar1, sWeatherNames[gTasks[taskId].data[3]], CHAR_SPACE, 30); else - StringCopyPadded(gStringVar1, sText_WeatherNotDefined, CHAR_SPACE, 30); + StringCopyPadded(gStringVar1, sText_WeatherNotDefined, CHAR_SPACE, 30); StringExpandPlaceholders(gStringVar4, sDebugText_Util_Weather_ID); AddTextPrinterParameterized(gTasks[taskId].data[2], 1, gStringVar4, 1, 1, 0, NULL); diff --git a/src/easy_chat.c b/src/easy_chat.c index d08ea4b33dbc..6595e0a108c5 100644 --- a/src/easy_chat.c +++ b/src/easy_chat.c @@ -230,7 +230,7 @@ enum { PALTAG_TRIANGLE_CURSOR, PALTAG_RECTANGLE_CURSOR, PALTAG_MISC_UI, - PALTAG_RS_INTERVIEW_FRAME, + PALTAG_RS_INTERVIEW_FRAME, }; enum { @@ -240,7 +240,7 @@ enum { GFXTAG_START_SELECT_BUTTONS, GFXTAG_MODE_WINDOW, GFXTAG_RS_INTERVIEW_FRAME, - GFXTAG_BUTTON_WINDOW, + GFXTAG_BUTTON_WINDOW, }; diff --git a/src/event_object_movement.c b/src/event_object_movement.c index ae48223c3a61..e1a02e3ee591 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -499,7 +499,7 @@ static const struct SpritePalette sObjectEventSpritePalettes[] = { {gObjectEventPal_RubySapphireBrendan, OBJ_EVENT_PAL_TAG_RS_BRENDAN}, {gObjectEventPal_RubySapphireMay, OBJ_EVENT_PAL_TAG_RS_MAY}, #ifdef BUGFIX - {NULL, OBJ_EVENT_PAL_TAG_NONE}, + {NULL, OBJ_EVENT_PAL_TAG_NONE}, #else {}, // BUG: FindObjectEventPaletteIndexByTag looks for OBJ_EVENT_PAL_TAG_NONE and not 0x0. // If it's looking for a tag that isn't in this table, the game locks in an infinite loop. diff --git a/src/expansion_intro.c b/src/expansion_intro.c index 8fdb7c1cb8bf..e37ea4b2e679 100644 --- a/src/expansion_intro.c +++ b/src/expansion_intro.c @@ -33,10 +33,10 @@ #define DIZZY_ANIM_SPEED 4 #define DIZZY_STARS_SPEED 12 -enum +enum { EXPANSION_INTRO_BG2, - EXPANSION_INTRO_BG3 + EXPANSION_INTRO_BG3 }; enum diff --git a/src/field_specials.c b/src/field_specials.c index 3ae01543c3a4..3996b739ac79 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -1015,7 +1015,7 @@ static void PCTurnOnEffect(struct Task *task) if (task->tTimer == 6) { task->tTimer = 0; - + // Get where the PC should be, depending on where the player is looking. playerDirection = GetPlayerFacingDirection(); switch (playerDirection) @@ -1037,7 +1037,7 @@ static void PCTurnOnEffect(struct Task *task) // Update map PCTurnOnEffect_SetMetatile(task->tIsScreenOn, dx, dy); DrawWholeMapView(); - + // Screen flickers 5 times. Odd number and starting with the // screen off means the animation ends with the screen on. task->tIsScreenOn ^= 1; diff --git a/src/frontier_util.c b/src/frontier_util.c index 1863aa622e91..0fe2c94ea033 100644 --- a/src/frontier_util.c +++ b/src/frontier_util.c @@ -497,7 +497,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][FRONTIER_PARTY_SIZ }, }; -static const u8 sBattlePointAwards[NUM_FRONTIER_FACILITIES][FRONTIER_MODE_COUNT][30] = +static const u8 sBattlePointAwards[NUM_FRONTIER_FACILITIES][FRONTIER_MODE_COUNT][30] = { /* facility, mode, tier */ [FRONTIER_FACILITY_TOWER] = /* Tier: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30 */ diff --git a/src/mini_printf.c b/src/mini_printf.c index d96a9379a147..9fb4ecfac9e5 100644 --- a/src/mini_printf.c +++ b/src/mini_printf.c @@ -41,7 +41,7 @@ #ifndef NDEBUG -struct mini_buff +struct mini_buff { char *buffer, *pbuffer; u32 buffer_len; @@ -95,9 +95,9 @@ static s32 _putsAscii(char *s, s32 len, void *buf) s32 i; struct mini_buff *b; - if (!buf) + if (!buf) return len; - + b = buf; p0 = b->buffer; @@ -118,9 +118,9 @@ static s32 _putsEncoded(char *s, s32 len, void *buf) s32 i; struct mini_buff *b; - if (!buf) + if (!buf) return len; - + b = buf; p0 = b->buffer; @@ -159,7 +159,7 @@ static s32 mini_itoa(s32 value, u32 radix, s32 uppercase, bool32 unsig, char *bu } /* This builds the string back to front ... */ - do + do { s32 digit = value % radix; *(pbuffer++) = (digit < 10 ? '0' + digit : (uppercase ? 'A' : 'a') + digit - 10); @@ -243,7 +243,7 @@ s32 mini_vpprintf(void* buf, const char *fmt, va_list va) { len = 1; len = _putsAscii(&ch, len, buf); - } else + } else { char pad_char = ' '; s32 pad_to = 0; @@ -270,7 +270,7 @@ s32 mini_vpprintf(void* buf, const char *fmt, va_list va) ch=*(fmt++); } - switch (ch) + switch (ch) { case 0: goto end; diff --git a/src/rom_header_gf.c b/src/rom_header_gf.c index 118cc5e27706..7b8822acc6ad 100644 --- a/src/rom_header_gf.c +++ b/src/rom_header_gf.c @@ -9,8 +9,8 @@ // The purpose of this struct is for outside applications to be // able to access parts of the ROM or its save file, like a public API. // In vanilla, it was used by Colosseum and XD to access pokemon graphics. -// -// If this struct is rearranged in any way, it defeats the purpose of +// +// If this struct is rearranged in any way, it defeats the purpose of // having it at all. Applications like PKHex or streaming HUDs may find // these values useful, so there's some potential benefit to keeping it. // If there's a compilation problem below, just comment out the assignment diff --git a/src/trade.c b/src/trade.c index 9186864fb37a..1f9e6888633f 100644 --- a/src/trade.c +++ b/src/trade.c @@ -1281,7 +1281,7 @@ static void Leader_HandleCommunication(void) if (sTradeMenu->playerSelectStatus == STATUS_READY && sTradeMenu->partnerSelectStatus == STATUS_READY) { - // Both players have selected a pokemon to trade + // Both players have selected a pokemon to trade sTradeMenu->callbackId = CB_SET_SELECTED_MONS; sTradeMenu->linkData[0] = LINKCMD_SET_MONS_TO_TRADE; sTradeMenu->linkData[1] = sTradeMenu->cursorPosition; @@ -1900,7 +1900,7 @@ static void DrawSelectedMonScreen(u8 whichParty) StoreSpriteCallbackInData6(&gSprites[sTradeMenu->partySpriteIds[selectedMonParty][partyIdx]], SpriteCB_MonIcon); sTradeMenu->drawSelectedMonState[whichParty]++; Trade_MoveSelectedMonToTarget(&gSprites[sTradeMenu->partySpriteIds[selectedMonParty][partyIdx]]); - + CopyToBgTilemapBufferRect_ChangePalette(1, sTradePartyBoxTilemap, whichParty * 15, 0, 15, 17, 0); CopyBgTilemapBufferToVram(1); CopyBgTilemapBufferToVram(0); diff --git a/test/ability_insomnia.c b/test/ability_insomnia.c index b9fe38753283..9398bd30abb0 100644 --- a/test/ability_insomnia.c +++ b/test/ability_insomnia.c @@ -11,7 +11,7 @@ SINGLE_BATTLE_TEST("Insomnia prevents sleep") TURN { MOVE(opponent, MOVE_SPORE); } } SCENE { ABILITY_POPUP(player, ABILITY_INSOMNIA); - NONE_OF { + NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_SPORE, opponent); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_SLP, player); STATUS_ICON(player, sleep: TRUE); @@ -31,7 +31,7 @@ SINGLE_BATTLE_TEST("Insomnia prevents yawn") TURN { } } SCENE { ABILITY_POPUP(player, ABILITY_INSOMNIA); - NONE_OF { + NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_YAWN, opponent); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_SLP, player); STATUS_ICON(player, sleep: TRUE); @@ -49,7 +49,7 @@ SINGLE_BATTLE_TEST("Insomnia prevents rest") TURN { MOVE(player, MOVE_REST); } } SCENE { ABILITY_POPUP(player, ABILITY_INSOMNIA); - NONE_OF { + NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_REST, player); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_SLP, player); STATUS_ICON(player, sleep: TRUE); diff --git a/test/ability_water_absorb.c b/test/ability_water_absorb.c index 1748ee7ff5d9..aaaa149acea6 100644 --- a/test/ability_water_absorb.c +++ b/test/ability_water_absorb.c @@ -78,10 +78,10 @@ SINGLE_BATTLE_TEST("Water Absorb prevents Items from activating") ABILITY_POPUP(player, ABILITY_WATER_ABSORB); HP_BAR(player, hp: TEST_MAX_HP / 4 + 1); MESSAGE("Poliwag restored HP using its Water Absorb!"); - NONE_OF { + NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); } - + } } From 44d2cc7232e2c64866edbc832f417608056496cf Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 27 Feb 2023 09:11:25 +0100 Subject: [PATCH 113/428] Fix bugs related to Trainer Slide messages (#2699) * start working on trainer slides * use cmd->nextInstr --- data/battle_scripts_2.s | 24 +++++++++++++++---- include/battle_message.h | 2 +- include/battle_scripts.h | 6 +++-- src/battle_main.c | 4 ++-- src/battle_message.c | 45 ++++++++++++++++++++++++++---------- src/battle_script_commands.c | 22 ++++++++++++------ 6 files changed, 74 insertions(+), 29 deletions(-) diff --git a/data/battle_scripts_2.s b/data/battle_scripts_2.s index 9b26cbd0d7d0..21a12d886177 100644 --- a/data/battle_scripts_2.s +++ b/data/battle_scripts_2.s @@ -192,16 +192,30 @@ BattleScript_ActionWallyThrow: waitmessage B_WAIT_TIME_LONG end2 -BattleScript_TrainerSlideMsgRet:: +BattleScript_TrainerASlideMsgRet:: handletrainerslidemsg BS_SCRIPTING, 0 - trainerslidein 1 + trainerslidein B_POSITION_OPPONENT_LEFT handletrainerslidemsg BS_SCRIPTING, 1 waitstate - trainerslideout 1 + trainerslideout B_POSITION_OPPONENT_LEFT + waitstate handletrainerslidemsg BS_SCRIPTING, 2 + return + +BattleScript_TrainerASlideMsgEnd2:: + call BattleScript_TrainerASlideMsgRet + end2 + +BattleScript_TrainerBSlideMsgRet:: + handletrainerslidemsg BS_SCRIPTING, 0 + trainerslidein B_POSITION_OPPONENT_RIGHT + handletrainerslidemsg BS_SCRIPTING, 1 waitstate + trainerslideout B_POSITION_OPPONENT_RIGHT + waitstate + handletrainerslidemsg BS_SCRIPTING, 2 return -BattleScript_TrainerSlideMsgEnd2:: - call BattleScript_TrainerSlideMsgRet +BattleScript_TrainerBSlideMsgEnd2:: + call BattleScript_TrainerBSlideMsgRet end2 diff --git a/include/battle_message.h b/include/battle_message.h index 9f6905abd358..19f8bc4cafb1 100644 --- a/include/battle_message.h +++ b/include/battle_message.h @@ -237,7 +237,7 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst); void BattlePutTextOnWindow(const u8 *text, u8 windowId); void SetPpNumbersPaletteInMoveSelection(void); u8 GetCurrentPpToMaxPpState(u8 currentPp, u8 maxPp); -bool32 ShouldDoTrainerSlide(u32 battlerId, u32 trainerId, u32 which); +u32 ShouldDoTrainerSlide(u32 battlerId, u32 which); // return 1 for TrainerA, 2 forTrainerB void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst); extern struct BattleMsgData *gBattleMsgDataPtr; diff --git a/include/battle_scripts.h b/include/battle_scripts.h index 8c6b074c188e..63c128ec5f34 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -295,8 +295,10 @@ extern const u8 BattleScript_MoveEffectClearSmog[]; extern const u8 BattleScript_SideStatusWoreOffReturn[]; extern const u8 BattleScript_MoveEffectSmackDown[]; extern const u8 BattleScript_MoveEffectFlameBurst[]; -extern const u8 BattleScript_TrainerSlideMsgRet[]; -extern const u8 BattleScript_TrainerSlideMsgEnd2[]; +extern const u8 BattleScript_TrainerASlideMsgRet[]; +extern const u8 BattleScript_TrainerASlideMsgEnd2[]; +extern const u8 BattleScript_TrainerBSlideMsgRet[]; +extern const u8 BattleScript_TrainerBSlideMsgEnd2[]; extern const u8 BattleScript_MoveEffectFeint[]; extern const u8 BattleScript_ProteanActivates[]; extern const u8 BattleScript_DazzlingProtected[]; diff --git a/src/battle_main.c b/src/battle_main.c index 6588d3c5ee4b..96b2e90a5e31 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -3866,8 +3866,8 @@ void BattleTurnPassed(void) BattleScriptExecute(BattleScript_PalacePrintFlavorText); else if (gBattleTypeFlags & BATTLE_TYPE_ARENA && gBattleStruct->arenaTurnCounter == 0) BattleScriptExecute(BattleScript_ArenaTurnBeginning); - else if (ShouldDoTrainerSlide(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), gTrainerBattleOpponent_A, TRAINER_SLIDE_LAST_LOW_HP)) - BattleScriptExecute(BattleScript_TrainerSlideMsgEnd2); + else if ((i = ShouldDoTrainerSlide(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), TRAINER_SLIDE_LAST_LOW_HP))) + BattleScriptExecute(i == 1 ? BattleScript_TrainerASlideMsgEnd2 : BattleScript_TrainerBSlideMsgEnd2); } u8 IsRunningFromBattleImpossible(void) diff --git a/src/battle_message.c b/src/battle_message.c index ec2527d84634..4e49e39f128e 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -3887,11 +3887,11 @@ static const struct TrainerSlide sTrainerSlides[] = */ }; -static u32 GetEnemyMonCount(bool32 onlyAlive) +static u32 GetEnemyMonCount(u32 firstId, u32 lastId, bool32 onlyAlive) { u32 i, count = 0; - for (i = 0; i < PARTY_SIZE; i++) + for (i = firstId; i < lastId; i++) { u32 species = GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2, NULL); if (species != SPECIES_NONE @@ -3911,12 +3911,33 @@ static bool32 IsBattlerHpLow(u32 battler) return FALSE; } -bool32 ShouldDoTrainerSlide(u32 battlerId, u32 trainerId, u32 which) +u32 ShouldDoTrainerSlide(u32 battlerId, u32 which) { - s32 i; + u32 i, firstId, lastId, trainerId, retValue = 1; if (!(gBattleTypeFlags & BATTLE_TYPE_TRAINER) || GetBattlerSide(battlerId) != B_SIDE_OPPONENT) - return FALSE; + return 0; + + // Two opponents support. + if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) + { + if (gBattlerPartyIndexes[battlerId] >= 3) + { + firstId = 3, lastId = PARTY_SIZE; + trainerId = gTrainerBattleOpponent_B; + retValue = 2; + } + else + { + firstId = 0, lastId = 3; + trainerId = gTrainerBattleOpponent_A; + } + } + else + { + firstId = 0, lastId = PARTY_SIZE; + trainerId = gTrainerBattleOpponent_A; + } for (i = 0; i < ARRAY_COUNT(sTrainerSlides); i++) { @@ -3926,28 +3947,28 @@ bool32 ShouldDoTrainerSlide(u32 battlerId, u32 trainerId, u32 which) switch (which) { case TRAINER_SLIDE_LAST_SWITCHIN: - if (sTrainerSlides[i].msgLastSwitchIn != NULL && GetEnemyMonCount(TRUE) == 1) + if (sTrainerSlides[i].msgLastSwitchIn != NULL && !CanBattlerSwitch(battlerId)) { gBattleStruct->trainerSlideMsg = sTrainerSlides[i].msgLastSwitchIn; - return TRUE; + return retValue; } break; case TRAINER_SLIDE_LAST_LOW_HP: if (sTrainerSlides[i].msgLastLowHp != NULL - && GetEnemyMonCount(TRUE) == 1 + && GetEnemyMonCount(firstId, lastId, TRUE) == 1 && IsBattlerHpLow(battlerId) && !gBattleStruct->trainerSlideLowHpMsgDone) { gBattleStruct->trainerSlideLowHpMsgDone = TRUE; gBattleStruct->trainerSlideMsg = sTrainerSlides[i].msgLastLowHp; - return TRUE; + return retValue; } break; case TRAINER_SLIDE_FIRST_DOWN: - if (sTrainerSlides[i].msgFirstDown != NULL && GetEnemyMonCount(TRUE) == GetEnemyMonCount(FALSE) - 1) + if (sTrainerSlides[i].msgFirstDown != NULL && GetEnemyMonCount(firstId, lastId, TRUE) == GetEnemyMonCount(firstId, lastId, FALSE) - 1) { gBattleStruct->trainerSlideMsg = sTrainerSlides[i].msgFirstDown; - return TRUE; + return retValue; } break; } @@ -3955,5 +3976,5 @@ bool32 ShouldDoTrainerSlide(u32 battlerId, u32 trainerId, u32 which) } } - return FALSE; + return 0; } diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 86db3c9948f4..84a28804f942 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -10109,7 +10109,8 @@ static void Cmd_various(void) VARIOUS_ARGS(u8 case_); if (cmd->case_ == 0) { - gBattleScripting.savedDmg = gBattlerSpriteIds[gActiveBattler]; + // Save sprite IDs, because trainer slide in will overwrite gBattlerSpriteIds variable. + gBattleScripting.savedDmg = (gBattlerSpriteIds[gActiveBattler] & 0xFF) | (gBattlerSpriteIds[BATTLE_PARTNER(gActiveBattler)] << 8); HideBattlerShadowSprite(gActiveBattler); } else if (cmd->case_ == 1) @@ -10119,12 +10120,19 @@ static void Cmd_various(void) } else { - gBattlerSpriteIds[gActiveBattler] = gBattleScripting.savedDmg; - if (gBattleMons[gActiveBattler].hp != 0) + gBattlerSpriteIds[BATTLE_PARTNER(gActiveBattler)] = gBattleScripting.savedDmg >> 8; + gBattlerSpriteIds[gActiveBattler] = gBattleScripting.savedDmg & 0xFF; + if (IsBattlerAlive(gActiveBattler)) { SetBattlerShadowSpriteCallback(gActiveBattler, gBattleMons[gActiveBattler].species); BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); } + i = BATTLE_PARTNER(gActiveBattler); + if (IsBattlerAlive(i)) + { + SetBattlerShadowSpriteCallback(i, gBattleMons[i].species); + BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[i]], i); + } } gBattlescriptCurrInstr = cmd->nextInstr; return; @@ -10132,11 +10140,11 @@ static void Cmd_various(void) case VARIOUS_TRY_TRAINER_SLIDE_MSG_FIRST_OFF: { VARIOUS_ARGS(); - if (ShouldDoTrainerSlide(gActiveBattler, gTrainerBattleOpponent_A, TRAINER_SLIDE_FIRST_DOWN)) + if ((i = ShouldDoTrainerSlide(gActiveBattler, TRAINER_SLIDE_FIRST_DOWN))) { gBattleScripting.battler = gActiveBattler; BattleScriptPush(cmd->nextInstr); - gBattlescriptCurrInstr = BattleScript_TrainerSlideMsgRet; + gBattlescriptCurrInstr = (i == 1 ? BattleScript_TrainerASlideMsgRet : BattleScript_TrainerBSlideMsgRet); return; } break; @@ -10144,11 +10152,11 @@ static void Cmd_various(void) case VARIOUS_TRY_TRAINER_SLIDE_MSG_LAST_ON: { VARIOUS_ARGS(); - if (ShouldDoTrainerSlide(gActiveBattler, gTrainerBattleOpponent_A, TRAINER_SLIDE_LAST_SWITCHIN)) + if ((i = ShouldDoTrainerSlide(gActiveBattler, TRAINER_SLIDE_LAST_SWITCHIN))) { gBattleScripting.battler = gActiveBattler; BattleScriptPush(cmd->nextInstr); - gBattlescriptCurrInstr = BattleScript_TrainerSlideMsgRet; + gBattlescriptCurrInstr = (i == 1 ? BattleScript_TrainerASlideMsgRet : BattleScript_TrainerBSlideMsgRet); return; } break; From 919fb184fef007829b1aa242c5776ace52a240fc Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 27 Feb 2023 09:12:52 +0100 Subject: [PATCH 114/428] AI knows how to handle Illusion (#2726) * AI knows how to handle Illusion --- include/battle.h | 1 + src/battle_ai_util.c | 66 ++++++++++++++++++++++++++++++++++++++------ src/battle_util.c | 28 +++++++++++++++---- 3 files changed, 80 insertions(+), 15 deletions(-) diff --git a/include/battle.h b/include/battle.h index 6110413667b5..1ae49b1a2c0c 100644 --- a/include/battle.h +++ b/include/battle.h @@ -252,6 +252,7 @@ struct AI_SavedBattleMon u16 moves[MAX_MON_MOVES]; u16 heldItem; u16 species; + u8 types[3]; }; struct AiPartyMon diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 22e88aac4c8e..495e2ea1db3d 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -538,23 +538,73 @@ void SaveBattlerData(u8 battlerId) AI_THINKING_STRUCT->saved[battlerId].species = gBattleMons[battlerId].species; for (i = 0; i < 4; i++) AI_THINKING_STRUCT->saved[battlerId].moves[i] = gBattleMons[battlerId].moves[i]; + AI_THINKING_STRUCT->saved[battlerId].types[0] = gBattleMons[battlerId].type1; + AI_THINKING_STRUCT->saved[battlerId].types[1] = gBattleMons[battlerId].type2; } } +static bool32 ShouldFailForIllusion(u16 illusionSpecies, u32 battlerId) +{ + u32 i, j; + + if (BATTLE_HISTORY->abilities[battlerId] == ABILITY_ILLUSION) + return FALSE; + + // Don't fall for Illusion if the mon used a move it cannot know. + for (i = 0; i < MAX_MON_MOVES; i++) + { + u16 move = BATTLE_HISTORY->usedMoves[battlerId][i]; + if (move == MOVE_NONE) + continue; + + for (j = 0; gLevelUpLearnsets[illusionSpecies][j].move != MOVE_UNAVAILABLE; j++) + { + if (gLevelUpLearnsets[illusionSpecies][j].move == move) + break; + } + // The used move is in the learnsets of the fake species. + if (gLevelUpLearnsets[illusionSpecies][j].move != MOVE_UNAVAILABLE) + continue; + + // The used move can be learned from Tm/Hm or Move Tutors. + if (CanLearnTeachableMove(illusionSpecies, move)) + continue; + + // 'Illegal move', AI won't fail for the illusion. + return FALSE; + } + + return TRUE; +} + void SetBattlerData(u8 battlerId) { if (!IsBattlerAIControlled(battlerId)) { - struct Pokemon *illusionMon; - u32 i; + u32 i, species, illusionSpecies; + + // Simulate Illusion + species = gBattleMons[battlerId].species; + illusionSpecies = GetIllusionMonSpecies(battlerId); + if (illusionSpecies != SPECIES_NONE && ShouldFailForIllusion(illusionSpecies, battlerId)) + { + // If the battler's type has not been changed, AI assumes the types of the illusion mon. + if (gBattleMons[battlerId].type1 == gSpeciesInfo[species].types[0] + && gBattleMons[battlerId].type2 == gSpeciesInfo[species].types[1]) + { + gBattleMons[battlerId].type1 = gSpeciesInfo[illusionSpecies].types[0]; + gBattleMons[battlerId].type2 = gSpeciesInfo[illusionSpecies].types[1]; + } + species = illusionSpecies; + } // Use the known battler's ability. if (BATTLE_HISTORY->abilities[battlerId] != ABILITY_NONE) gBattleMons[battlerId].ability = BATTLE_HISTORY->abilities[battlerId]; // Check if mon can only have one ability. - else if (gSpeciesInfo[gBattleMons[battlerId].species].abilities[1] == ABILITY_NONE - || gSpeciesInfo[gBattleMons[battlerId].species].abilities[1] == gSpeciesInfo[gBattleMons[battlerId].species].abilities[0]) - gBattleMons[battlerId].ability = gSpeciesInfo[gBattleMons[battlerId].species].abilities[0]; + else if (gSpeciesInfo[species].abilities[1] == ABILITY_NONE + || gSpeciesInfo[species].abilities[1] == gSpeciesInfo[species].abilities[0]) + gBattleMons[battlerId].ability = gSpeciesInfo[species].abilities[0]; // The ability is unknown. else gBattleMons[battlerId].ability = ABILITY_NONE; @@ -567,10 +617,6 @@ void SetBattlerData(u8 battlerId) if (BATTLE_HISTORY->usedMoves[battlerId][i] == 0) gBattleMons[battlerId].moves[i] = 0; } - - // Simulate Illusion - if ((illusionMon = GetIllusionMonPtr(battlerId)) != NULL) - gBattleMons[battlerId].species = GetMonData(illusionMon, MON_DATA_SPECIES2); } } @@ -585,6 +631,8 @@ void RestoreBattlerData(u8 battlerId) gBattleMons[battlerId].species = AI_THINKING_STRUCT->saved[battlerId].species; for (i = 0; i < 4; i++) gBattleMons[battlerId].moves[i] = AI_THINKING_STRUCT->saved[battlerId].moves[i]; + gBattleMons[battlerId].type1 = AI_THINKING_STRUCT->saved[battlerId].types[0]; + gBattleMons[battlerId].type2 = AI_THINKING_STRUCT->saved[battlerId].types[1]; } } diff --git a/src/battle_util.c b/src/battle_util.c index 0a00372c0dbe..e10c9dbcfa21 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -9817,6 +9817,18 @@ static void MulByTypeEffectiveness(u16 *modifier, u16 move, u8 moveType, u8 batt MulModifier(modifier, mod); } +static void TryNoticeIllusionInTypeEffectiveness(u32 move, u32 moveType, u32 battlerAtk, u32 battlerDef, u16 resultingModifier, u32 illusionSpecies) +{ + // Check if the type effectiveness would've been different if the pokemon really had the types as the disguise. + u16 presumedModifier = UQ_4_12(1.0); + MulByTypeEffectiveness(&presumedModifier, move, moveType, battlerDef, gSpeciesInfo[illusionSpecies].types[0], battlerAtk, FALSE); + if (gSpeciesInfo[illusionSpecies].types[1] != gSpeciesInfo[illusionSpecies].types[0]) + MulByTypeEffectiveness(&presumedModifier, move, moveType, battlerDef, gSpeciesInfo[illusionSpecies].types[1], battlerAtk, FALSE); + + if (presumedModifier != resultingModifier) + RecordAbilityBattle(battlerDef, ABILITY_ILLUSION); +} + static void UpdateMoveResultFlags(u16 modifier) { if (modifier == UQ_4_12(0.0)) @@ -9842,6 +9854,7 @@ static void UpdateMoveResultFlags(u16 modifier) static u16 CalcTypeEffectivenessMultiplierInternal(u16 move, u8 moveType, u8 battlerAtk, u8 battlerDef, bool32 recordAbilities, u16 modifier) { + u32 illusionSpecies; u16 defAbility = GetBattlerAbility(battlerDef); MulByTypeEffectiveness(&modifier, move, moveType, battlerDef, gBattleMons[battlerDef].type1, battlerAtk, recordAbilities); @@ -9851,15 +9864,18 @@ static u16 CalcTypeEffectivenessMultiplierInternal(u16 move, u8 moveType, u8 bat && gBattleMons[battlerDef].type3 != gBattleMons[battlerDef].type1) MulByTypeEffectiveness(&modifier, move, moveType, battlerDef, gBattleMons[battlerDef].type3, battlerAtk, recordAbilities); + if (recordAbilities && (illusionSpecies = GetIllusionMonSpecies(battlerDef))) + TryNoticeIllusionInTypeEffectiveness(move, moveType, battlerAtk, battlerDef, modifier, illusionSpecies); + if (gBattleMoves[move].split == SPLIT_STATUS && move != MOVE_THUNDER_WAVE) { modifier = UQ_4_12(1.0); - #if B_GLARE_GHOST <= GEN_3 - if (move == MOVE_GLARE && IS_BATTLER_OF_TYPE(battlerDef, TYPE_GHOST)) - { - modifier = UQ_4_12(0.0); - } - #endif + #if B_GLARE_GHOST <= GEN_3 + if (move == MOVE_GLARE && IS_BATTLER_OF_TYPE(battlerDef, TYPE_GHOST)) + { + modifier = UQ_4_12(0.0); + } + #endif } else if (moveType == TYPE_GROUND && !IsBattlerGrounded2(battlerDef, TRUE) && !(gBattleMoves[move].flags & FLAG_DMG_UNGROUNDED_IGNORE_TYPE_IF_FLYING)) { From e537be76eae85f21c6cdac20028f1070bdf3c877 Mon Sep 17 00:00:00 2001 From: AgustinGDLV <103095241+AgustinGDLV@users.noreply.github.com> Date: Mon, 27 Feb 2023 00:17:07 -0800 Subject: [PATCH 115/428] Z-moves bypass protection (#2730) --- data/battle_scripts_1.s | 5 +++++ include/battle_scripts.h | 1 + include/constants/battle_string_ids.h | 3 ++- src/battle_message.c | 2 ++ src/battle_script_commands.c | 8 ++++++++ src/battle_util.c | 16 ++++++++++++++-- 6 files changed, 32 insertions(+), 3 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 35d8db8ddf87..e8b751777bd1 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -10330,3 +10330,8 @@ BattleScript_PokemonCantUseTheMove:: printstring STRINGID_BUTPOKEMONCANTUSETHEMOVE waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd + +BattleScript_CouldntFullyProtect:: + printstring STRINGID_COULDNTFULLYPROTECT + waitmessage B_WAIT_TIME_LONG + return diff --git a/include/battle_scripts.h b/include/battle_scripts.h index 63c128ec5f34..0751ae809752 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -455,6 +455,7 @@ extern const u8 BattleScript_DampPreventsAftermath[]; extern const u8 BattleScript_HealingWishActivates[]; extern const u8 BattleScript_LunarDanceActivates[]; extern const u8 BattleScript_ShellTrapSetUp[]; +extern const u8 BattleScript_CouldntFullyProtect[]; // zmoves extern const u8 BattleScript_ZMoveActivateDamaging[]; diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index e561a9cb98f4..f3e702ec4694 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -641,8 +641,9 @@ #define STRINGID_PKMNSABILITYPREVENTSABILITY 639 #define STRINGID_PREPARESHELLTRAP 640 #define STRINGID_SHELLTRAPDIDNTWORK 641 +#define STRINGID_COULDNTFULLYPROTECT 642 -#define BATTLESTRINGS_COUNT 642 +#define BATTLESTRINGS_COUNT 643 // This is the string id that gBattleStringsTable starts with. // String ids before this (e.g. STRINGID_INTROMSG) are not in the table, diff --git a/src/battle_message.c b/src/battle_message.c index 4e49e39f128e..29580ded00f5 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -776,9 +776,11 @@ static const u8 sText_AbilityWeakenedSurroundingMonsStat[] = _("{B_ATK_NAME_WITH static const u8 sText_AttackerGainedStrengthFromTheFallen[] = _("{B_ATK_NAME_WITH_PREFIX} gained strength\nfrom the fallen!"); static const u8 sText_PrepareShellTrap[] = _("{B_ATK_NAME_WITH_PREFIX} set a shell trap!"); static const u8 sText_ShellTrapDidntWork[] = _("{B_ATK_NAME_WITH_PREFIX}'s shell trap didn't work!"); +static const u8 sText_CouldntFullyProtect[] = _("{B_DEF_NAME_WITH_PREFIX} couldn't fully protect\nitself and got hurt!"); const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = { + [STRINGID_COULDNTFULLYPROTECT - BATTLESTRINGS_TABLE_START] = sText_CouldntFullyProtect, [STRINGID_ATTACKERGAINEDSTRENGTHFROMTHEFALLEN - BATTLESTRINGS_TABLE_START] = sText_AttackerGainedStrengthFromTheFallen, [STRINGID_ABILITYWEAKENEDFSURROUNDINGMONSSTAT - BATTLESTRINGS_TABLE_START] = sText_AbilityWeakenedSurroundingMonsStat, [STRINGID_ELECTRICTERRAINACTIVATEDABILITY - BATTLESTRINGS_TABLE_START] = sText_ElectricTerrainActivatedAbility, diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 84a28804f942..2d9f6f6c1852 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -1591,6 +1591,14 @@ static void Cmd_attackcanceler(void) return; } + // Z-moves and Max Moves bypass protection, but deal reduced damage (factored in CalcFinalDmg) + if (gBattleStruct->zmove.active && IS_BATTLER_PROTECTED(gBattlerTarget)) + { + BattleScriptPush(cmd->nextInstr); + gBattlescriptCurrInstr = BattleScript_CouldntFullyProtect; + return; + } + for (i = 0; i < gBattlersCount; i++) { if ((gProtectStructs[gBattlerByTurnOrder[i]].stealMove) && gBattleMoves[gCurrentMove].flags & FLAG_SNATCH_AFFECTED) diff --git a/src/battle_util.c b/src/battle_util.c index e10c9dbcfa21..1625ff919c3f 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -8243,9 +8243,15 @@ bool32 IsBattlerProtected(u8 battlerId, u16 move) return FALSE; } - if (move == MOVE_TEATIME) + if (move == MOVE_TEATIME) { - return FALSE; + return FALSE; + } + + // Z-Moves and Max Moves bypass protection + if (gBattleStruct->zmove.active) + { + return FALSE; } // Protective Pads doesn't stop Unseen Fist from bypassing Protect effects, so IsMoveMakingContact() isn't used here. @@ -9632,6 +9638,12 @@ static u32 CalcFinalDmg(u32 dmg, u16 move, u8 battlerAtk, u8 battlerDef, u8 move MulModifier(&finalModifier, UQ_4_12(0.25)); } + // Z-Moves and Max Moves bypass Protect and do 25% of their original damage + if (gBattleStruct->zmove.active && IS_BATTLER_PROTECTED(battlerDef)) + { + MulModifier(&finalModifier, UQ_4_12(0.25)); + } + // attacker's abilities switch (abilityAtk) { From 468625ed1dc3c079710ec6c57d92a2d0f31e49eb Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 27 Feb 2023 10:32:45 +0100 Subject: [PATCH 116/428] fit long z-moves names on battle textbox --- src/battle_bg.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_bg.c b/src/battle_bg.c index e56884b55d27..0ed1eec2e787 100644 --- a/src/battle_bg.c +++ b/src/battle_bg.c @@ -185,7 +185,7 @@ static const struct WindowTemplate sStandardBattleWindowTemplates[] = .bg = 0, .tilemapLeft = 2, .tilemapTop = 55, - .width = 12, //for z move names + .width = 16, //for z move names .height = 2, .paletteNum = 5, .baseBlock = 0x0300, From 8a036e6007cdc8152a89b3ef211cb51fb759091e Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Mon, 27 Feb 2023 07:45:01 -0300 Subject: [PATCH 117/428] Made this build again --- src/battle_main.c | 10 +++++----- src/battle_message.c | 2 +- src/battle_script_commands.c | 8 ++++---- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/battle_main.c b/src/battle_main.c index 0f841a89be76..d144590d5943 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -3868,15 +3868,15 @@ void BattleTurnPassed(void) BattleScriptExecute(BattleScript_ArenaTurnBeginning); else if ((i = ShouldDoTrainerSlide(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), TRAINER_SLIDE_LAST_LOW_HP))) BattleScriptExecute(i == 1 ? BattleScript_TrainerASlideMsgEnd2 : BattleScript_TrainerBSlideMsgEnd2); - else if ((i = ShouldDoTrainerSlide(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), TRAINER_SLIDE_LAST_HALF_HP)) + else if ((i = ShouldDoTrainerSlide(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), TRAINER_SLIDE_LAST_HALF_HP))) BattleScriptExecute(i == 1 ? BattleScript_TrainerASlideMsgEnd2 : BattleScript_TrainerBSlideMsgEnd2); - else if ((i = ShouldDoTrainerSlide(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), TRAINER_SLIDE_FIRST_CRITICAL_HIT)) + else if ((i = ShouldDoTrainerSlide(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), TRAINER_SLIDE_FIRST_CRITICAL_HIT))) BattleScriptExecute(i == 1 ? BattleScript_TrainerASlideMsgEnd2 : BattleScript_TrainerBSlideMsgEnd2); - else if ((i = ShouldDoTrainerSlide(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), TRAINER_SLIDE_FIRST_SUPER_EFFECTIVE_HIT)) + else if ((i = ShouldDoTrainerSlide(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), TRAINER_SLIDE_FIRST_SUPER_EFFECTIVE_HIT))) BattleScriptExecute(i == 1 ? BattleScript_TrainerASlideMsgEnd2 : BattleScript_TrainerBSlideMsgEnd2); - else if ((i = ShouldDoTrainerSlide(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), TRAINER_SLIDE_FIRST_STAB_MOVE)) + else if ((i = ShouldDoTrainerSlide(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), TRAINER_SLIDE_FIRST_STAB_MOVE))) BattleScriptExecute(i == 1 ? BattleScript_TrainerASlideMsgEnd2 : BattleScript_TrainerBSlideMsgEnd2); - else if ((i = ShouldDoTrainerSlide(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), TRAINER_SLIDE_PLAYER_MON_UNAFFECTED)) + else if ((i = ShouldDoTrainerSlide(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), TRAINER_SLIDE_PLAYER_MON_UNAFFECTED))) BattleScriptExecute(i == 1 ? BattleScript_TrainerASlideMsgEnd2 : BattleScript_TrainerBSlideMsgEnd2); } diff --git a/src/battle_message.c b/src/battle_message.c index a9536d5a13bc..f321da46c023 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -3964,7 +3964,7 @@ u32 ShouldDoTrainerSlide(u32 battlerId, u32 which) case TRAINER_SLIDE_LAST_LOW_HP: if (sTrainerSlides[i].msgLastLowHp != NULL && GetEnemyMonCount(firstId, lastId, TRUE) == 1 - && IsBattlerHpLow(battlerId) + && gBattleMons[battlerId].hp <= (gBattleMons[battlerId].maxHP / 4) && !gBattleStruct->trainerSlideLowHpMsgDone) { gBattleStruct->trainerSlideLowHpMsgDone = TRUE; diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index e50aed2429c1..21e1d4d9c5c8 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -11170,11 +11170,11 @@ static void Cmd_various(void) case VARIOUS_TRY_TRAINER_SLIDE_MSG_Z_MOVE: { VARIOUS_ARGS(); - if (ShouldDoTrainerSlide(gActiveBattler, gTrainerBattleOpponent_A, TRAINER_SLIDE_Z_MOVE)) + if ((i = ShouldDoTrainerSlide(gActiveBattler, TRAINER_SLIDE_Z_MOVE))) { gBattleScripting.battler = gActiveBattler; BattleScriptPush(cmd->nextInstr); - gBattlescriptCurrInstr = BattleScript_TrainerSlideMsgRet; + gBattlescriptCurrInstr = (i == 1 ? BattleScript_TrainerASlideMsgRet : BattleScript_TrainerBSlideMsgRet); return; } break; @@ -11182,11 +11182,11 @@ static void Cmd_various(void) case VARIOUS_TRY_TRAINER_SLIDE_MSG_MEGA_EVOLUTION: { VARIOUS_ARGS(); - if (ShouldDoTrainerSlide(gActiveBattler, gTrainerBattleOpponent_A, TRAINER_SLIDE_MEGA_EVOLUTION)) + if ((i = ShouldDoTrainerSlide(gActiveBattler, TRAINER_SLIDE_MEGA_EVOLUTION))) { gBattleScripting.battler = gActiveBattler; BattleScriptPush(cmd->nextInstr); - gBattlescriptCurrInstr = BattleScript_TrainerSlideMsgRet; + gBattlescriptCurrInstr = (i == 1 ? BattleScript_TrainerASlideMsgRet : BattleScript_TrainerBSlideMsgRet); return; } break; From 3338a6b7861436dd664c349408cc8ba3f0c0a229 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 27 Feb 2023 12:31:29 +0100 Subject: [PATCH 118/428] add messages for stockpile effects wear off --- asm/macros/battle_script.inc | 6 ++++ data/battle_scripts_1.s | 15 +++++++++ include/battle_scripts.h | 1 + include/constants/battle.h | 3 +- include/constants/battle_string_ids.h | 3 +- src/battle_message.c | 2 ++ src/battle_script_commands.c | 46 +++++++++++++++++++++------ 7 files changed, 65 insertions(+), 11 deletions(-) diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index c96b5fdd2dfe..3419e2e56025 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -1317,6 +1317,12 @@ .2byte \holdEffect .4byte \jumpInstr .endm + + .macro dostockpilestatchangeswearoff, battler:req, statChangeInstr:req + callnative BS_DoStockpileStatChangesWearOff + .byte \battler + .4byte \statChangeInstr + .endm .macro jumpifmorethanhalfHP battler:req, jumpInstr:req callnative BS_JumpIfMoreThanHalfHP diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index e8b751777bd1..d7b597c53f98 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -5570,6 +5570,21 @@ BattleScript_EffectStockpileSpDef:: BattleScript_EffectStockpileEnd: stockpile 1 goto BattleScript_MoveEnd + +BattleScript_MoveEffectStockpileWoreOff:: + dostockpilestatchangeswearoff BS_ATTACKER, BattleScript_StockpileStatChangeDown + printstring STRINGID_STOCKPILEDEFFECTWOREOFF + waitmessage B_WAIT_TIME_SHORT + return + +BattleScript_StockpileStatChangeDown: + statbuffchange MOVE_EFFECT_AFFECTS_USER, BattleScript_StockpileStatChangeDown_Ret + setgraphicalstatchangevalues + playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + printfromtable gStatDownStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_StockpileStatChangeDown_Ret: + return BattleScript_EffectSpitUp:: attackcanceler diff --git a/include/battle_scripts.h b/include/battle_scripts.h index 0751ae809752..f2821af05922 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -456,6 +456,7 @@ extern const u8 BattleScript_HealingWishActivates[]; extern const u8 BattleScript_LunarDanceActivates[]; extern const u8 BattleScript_ShellTrapSetUp[]; extern const u8 BattleScript_CouldntFullyProtect[]; +extern const u8 BattleScript_MoveEffectStockpileWoreOff[]; // zmoves extern const u8 BattleScript_ZMoveActivateDamaging[]; diff --git a/include/constants/battle.h b/include/constants/battle.h index c24178cd08ad..b6eef0283052 100644 --- a/include/constants/battle.h +++ b/include/constants/battle.h @@ -372,8 +372,9 @@ #define MOVE_EFFECT_TRAP_BOTH 70 #define MOVE_EFFECT_DOUBLE_SHOCK 71 #define MOVE_EFFECT_ROUND 72 +#define MOVE_EFFECT_STOCKPILE_WORE_OFF 74 -#define NUM_MOVE_EFFECTS 73 +#define NUM_MOVE_EFFECTS 75 #define MOVE_EFFECT_AFFECTS_USER 0x4000 #define MOVE_EFFECT_CERTAIN 0x8000 diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index f3e702ec4694..1bd82023ed9c 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -642,8 +642,9 @@ #define STRINGID_PREPARESHELLTRAP 640 #define STRINGID_SHELLTRAPDIDNTWORK 641 #define STRINGID_COULDNTFULLYPROTECT 642 +#define STRINGID_STOCKPILEDEFFECTWOREOFF 643 -#define BATTLESTRINGS_COUNT 643 +#define BATTLESTRINGS_COUNT 644 // This is the string id that gBattleStringsTable starts with. // String ids before this (e.g. STRINGID_INTROMSG) are not in the table, diff --git a/src/battle_message.c b/src/battle_message.c index 29580ded00f5..74423781e1c9 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -777,9 +777,11 @@ static const u8 sText_AttackerGainedStrengthFromTheFallen[] = _("{B_ATK_NAME_WIT static const u8 sText_PrepareShellTrap[] = _("{B_ATK_NAME_WITH_PREFIX} set a shell trap!"); static const u8 sText_ShellTrapDidntWork[] = _("{B_ATK_NAME_WITH_PREFIX}'s shell trap didn't work!"); static const u8 sText_CouldntFullyProtect[] = _("{B_DEF_NAME_WITH_PREFIX} couldn't fully protect\nitself and got hurt!"); +static const u8 sText_StockpiledEffectWoreOff[] = _("{B_ATK_NAME_WITH_PREFIX}'s stockpiled\neffect wore off!"); const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = { + [STRINGID_STOCKPILEDEFFECTWOREOFF - BATTLESTRINGS_TABLE_START] = sText_StockpiledEffectWoreOff, [STRINGID_COULDNTFULLYPROTECT - BATTLESTRINGS_TABLE_START] = sText_CouldntFullyProtect, [STRINGID_ATTACKERGAINEDSTRENGTHFROMTHEFALLEN - BATTLESTRINGS_TABLE_START] = sText_AttackerGainedStrengthFromTheFallen, [STRINGID_ABILITYWEAKENEDFSURROUNDINGMONSSTAT - BATTLESTRINGS_TABLE_START] = sText_AbilityWeakenedSurroundingMonsStat, diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 2d9f6f6c1852..023548208e6c 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -2890,6 +2890,7 @@ void SetMoveEffect(bool32 primary, u32 certain) case MOVE_EFFECT_KNOCK_OFF: case MOVE_EFFECT_SMACK_DOWN: case MOVE_EFFECT_REMOVE_STATUS: + case MOVE_EFFECT_STOCKPILE_WORE_OFF: gBattleStruct->moveEffect2 = gBattleScripting.moveEffect; gBattlescriptCurrInstr++; return; @@ -5609,6 +5610,15 @@ static void Cmd_moveend(void) case MOVE_EFFECT_KNOCK_OFF: effect = TryKnockOffBattleScript(gBattlerTarget); break; + case MOVE_EFFECT_STOCKPILE_WORE_OFF: + if (gDisableStructs[gBattlerAttacker].stockpileCounter != 0) + { + gDisableStructs[gBattlerAttacker].stockpileCounter = 0; + effect = TRUE; + BattleScriptPush(gBattlescriptCurrInstr); + gBattlescriptCurrInstr = BattleScript_MoveEffectStockpileWoreOff; + } + break; case MOVE_EFFECT_SMACK_DOWN: if (!IsBattlerGrounded(gBattlerTarget) && IsBattlerAlive(gBattlerTarget)) { @@ -11651,10 +11661,7 @@ static void Cmd_stockpiletobasedamage(void) if (!(gSpecialStatuses[gBattlerAttacker].parentalBondState == PARENTAL_BOND_1ST_HIT && gBattleMons[gBattlerTarget].hp != 0)) { - gDisableStructs[gBattlerAttacker].stockpileCounter = 0; - // Restore stat changes from stockpile. - gBattleMons[gBattlerAttacker].statStages[STAT_DEF] -= gDisableStructs[gBattlerAttacker].stockpileDef; - gBattleMons[gBattlerAttacker].statStages[STAT_SPDEF] -= gDisableStructs[gBattlerAttacker].stockpileSpDef; + gBattleStruct->moveEffect2 = MOVE_EFFECT_STOCKPILE_WORE_OFF; } gBattlescriptCurrInstr = cmd->nextInstr; } @@ -11689,14 +11696,10 @@ static void Cmd_stockpiletohpheal(void) gBattleMoveDamage *= -1; gBattleScripting.animTurn = gDisableStructs[gBattlerAttacker].stockpileCounter; - gDisableStructs[gBattlerAttacker].stockpileCounter = 0; + gBattleStruct->moveEffect2 = MOVE_EFFECT_STOCKPILE_WORE_OFF; gBattlescriptCurrInstr = cmd->nextInstr; gBattlerTarget = gBattlerAttacker; } - - // Restore stat changes from stockpile. - gBattleMons[gBattlerAttacker].statStages[STAT_DEF] -= gDisableStructs[gBattlerAttacker].stockpileDef; - gBattleMons[gBattlerAttacker].statStages[STAT_SPDEF] -= gDisableStructs[gBattlerAttacker].stockpileSpDef; } } @@ -16136,6 +16139,31 @@ void BS_JumpIfHoldEffect(void) } } +void BS_DoStockpileStatChangesWearOff(void) +{ + NATIVE_ARGS(u8 battler, const u8 *statChangeInstr); + + u32 battler = GetBattlerForBattleScript(cmd->battler); + if (gDisableStructs[battler].stockpileDef != 0) + { + SET_STATCHANGER(STAT_DEF, abs(gDisableStructs[battler].stockpileDef), TRUE); + gDisableStructs[battler].stockpileDef = 0; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = cmd->statChangeInstr; + } + else if (gDisableStructs[battler].stockpileSpDef) + { + SET_STATCHANGER(STAT_SPDEF, abs(gDisableStructs[battler].stockpileSpDef), TRUE); + gDisableStructs[battler].stockpileSpDef = 0; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = cmd->statChangeInstr; + } + else + { + gBattlescriptCurrInstr = cmd->nextInstr; + } +} + static bool32 CriticalCapture(u32 odds) { #if B_CRITICAL_CAPTURE == TRUE From 5a745020eefe7e2ae9e25fada11e92800ced4374 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 27 Feb 2023 16:27:58 +0100 Subject: [PATCH 119/428] add tests for stockpile swallow spit up --- src/battle_message.c | 8 +- test/move_effect_stockpile.c | 252 +++++++++++++++++++++++++++++++++++ test/test_battle.h | 2 +- 3 files changed, 257 insertions(+), 5 deletions(-) create mode 100644 test/move_effect_stockpile.c diff --git a/src/battle_message.c b/src/battle_message.c index 74423781e1c9..997a6ae0993b 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -177,8 +177,8 @@ static const u8 sText_PkmnCausedUproar[] = _("{B_ATK_NAME_WITH_PREFIX} caused\na static const u8 sText_PkmnMakingUproar[] = _("{B_ATK_NAME_WITH_PREFIX} is making\nan UPROAR!"); static const u8 sText_PkmnCalmedDown[] = _("{B_ATK_NAME_WITH_PREFIX} calmed down."); static const u8 sText_PkmnCantSleepInUproar[] = _("But {B_DEF_NAME_WITH_PREFIX} can't\nsleep in an UPROAR!"); -static const u8 sText_PkmnStockpiled[] = _("{B_ATK_NAME_WITH_PREFIX} STOCKPILED\n{B_BUFF1}!"); -static const u8 sText_PkmnCantStockpile[] = _("{B_ATK_NAME_WITH_PREFIX} can't\nSTOCKPILE any more!"); +static const u8 sText_PkmnStockpiled[] = _("{B_ATK_NAME_WITH_PREFIX} stockpiled\n{B_BUFF1}!"); +static const u8 sText_PkmnCantStockpile[] = _("{B_ATK_NAME_WITH_PREFIX} can't\nstockpile any more!"); static const u8 sText_PkmnCantSleepInUproar2[] = _("But {B_DEF_NAME_WITH_PREFIX} can't\nsleep in an UPROAR!"); static const u8 sText_UproarKeptPkmnAwake[] = _("But the UPROAR kept\n{B_DEF_NAME_WITH_PREFIX} awake!"); static const u8 sText_PkmnStayedAwakeUsing[] = _("{B_DEF_NAME_WITH_PREFIX} stayed awake\nusing its {B_DEF_ABILITY}!"); @@ -360,8 +360,8 @@ static const u8 sText_SunlightFaded[] = _("The sunlight faded."); static const u8 sText_StartedHail[] = _("It started to hail!"); static const u8 sText_HailContinues[] = _("Hail continues to fall."); static const u8 sText_HailStopped[] = _("The hail stopped."); -static const u8 sText_FailedToSpitUp[] = _("But it failed to SPIT UP\na thing!"); -static const u8 sText_FailedToSwallow[] = _("But it failed to SWALLOW\na thing!"); +static const u8 sText_FailedToSpitUp[] = _("But it failed to spit up\na thing!"); +static const u8 sText_FailedToSwallow[] = _("But it failed to swallow\na thing!"); static const u8 sText_WindBecameHeatWave[] = _("The wind turned into a\nHEAT WAVE!"); static const u8 sText_StatChangesGone[] = _("All stat changes were\neliminated!"); static const u8 sText_CoinsScattered[] = _("Coins scattered everywhere!"); diff --git a/test/move_effect_stockpile.c b/test/move_effect_stockpile.c new file mode 100644 index 000000000000..1e62f766d7b3 --- /dev/null +++ b/test/move_effect_stockpile.c @@ -0,0 +1,252 @@ +#include "global.h" +#include "test_battle.h" + +// These tests cover all 3 effects: Stockpile, Spit up and Swallow. +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_STOCKPILE].effect == EFFECT_STOCKPILE); + ASSUME(gBattleMoves[MOVE_SWALLOW].effect == EFFECT_SWALLOW); + ASSUME(gBattleMoves[MOVE_SPIT_UP].effect == EFFECT_SPIT_UP); +} + +SINGLE_BATTLE_TEST("Stockpile's count can go up only to 3") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_STOCKPILE); } + TURN { MOVE(player, MOVE_STOCKPILE); } + TURN { MOVE(player, MOVE_STOCKPILE); } + TURN { MOVE(player, MOVE_STOCKPILE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_STOCKPILE, player); + MESSAGE("Wobbuffet stockpiled 1!"); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_STOCKPILE, player); + MESSAGE("Wobbuffet stockpiled 2!"); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_STOCKPILE, player); + MESSAGE("Wobbuffet stockpiled 3!"); + + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_STOCKPILE, player); + MESSAGE("Wobbuffet can't stockpile any more!"); + } +} + +#define MAX_HP_TEST 400 +SINGLE_BATTLE_TEST("Spit Up and Swallow don't work if used without Stockpile") +{ + u32 move; + PARAMETRIZE {move = MOVE_SWALLOW ;} + PARAMETRIZE {move = MOVE_SPIT_UP ;} + GIVEN { + PLAYER(SPECIES_WOBBUFFET) {HP(10), MaxHP(MAX_HP_TEST) ;} + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, move); } + TURN { MOVE(player, MOVE_STOCKPILE); } + TURN { MOVE(player, move); } + } SCENE { + NOT ANIMATION(ANIM_TYPE_MOVE, move, player); + if (move == MOVE_SWALLOW) + MESSAGE("But it failed to swallow a thing!"); + else + MESSAGE("But it failed to spit up a thing!"); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_STOCKPILE, player); + MESSAGE("Wobbuffet stockpiled 1!"); + + ANIMATION(ANIM_TYPE_MOVE, move, player); + if (move == MOVE_SPIT_UP) { + HP_BAR(opponent); + } + else { + HP_BAR(player); + } + } +} + +SINGLE_BATTLE_TEST("Spit Up's power raises depending on Stockpile's count", s16 damage) +{ + u8 count; + PARAMETRIZE { count = 1;} + PARAMETRIZE { count = 2;} + PARAMETRIZE { count = 3;} + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_STOCKPILE); } + if (count != 1){ + TURN { MOVE(player, MOVE_STOCKPILE); } + if (count == 3) { + TURN { MOVE(player, MOVE_STOCKPILE); } + } + } + TURN { MOVE(player, MOVE_SPIT_UP); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_STOCKPILE, player); + MESSAGE("Wobbuffet stockpiled 1!"); + if (count != 1) { + ANIMATION(ANIM_TYPE_MOVE, MOVE_STOCKPILE, player); + MESSAGE("Wobbuffet stockpiled 2!"); + if (count == 3) { + ANIMATION(ANIM_TYPE_MOVE, MOVE_STOCKPILE, player); + MESSAGE("Wobbuffet stockpiled 3!"); + } + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_SPIT_UP, player); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(2.0), results[1].damage); + EXPECT_MUL_EQ(results[0].damage, Q_4_12(3.0), results[2].damage); + } +} + +SINGLE_BATTLE_TEST("Swallow heals HP depending on Stockpile's count", s16 hpHeal) +{ + u8 count; + PARAMETRIZE { count = 1;} + PARAMETRIZE { count = 2;} + PARAMETRIZE { count = 3;} + GIVEN { + PLAYER(SPECIES_WOBBUFFET) {HP(1), MaxHP(MAX_HP_TEST); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_STOCKPILE); } + if (count != 1){ + TURN { MOVE(player, MOVE_STOCKPILE); } + if (count == 3) { + TURN { MOVE(player, MOVE_STOCKPILE); } + } + } + TURN { MOVE(player, MOVE_SWALLOW); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_STOCKPILE, player); + MESSAGE("Wobbuffet stockpiled 1!"); + if (count != 1) { + ANIMATION(ANIM_TYPE_MOVE, MOVE_STOCKPILE, player); + MESSAGE("Wobbuffet stockpiled 2!"); + if (count == 3) { + ANIMATION(ANIM_TYPE_MOVE, MOVE_STOCKPILE, player); + MESSAGE("Wobbuffet stockpiled 3!"); + } + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_SWALLOW, player); + HP_BAR(player, captureDamage: &results[i].hpHeal); + } FINALLY { + EXPECT_EQ(results[0].hpHeal, -(MAX_HP_TEST / 4)); + EXPECT_EQ(results[1].hpHeal, -(MAX_HP_TEST / 2)); + EXPECT_EQ(results[2].hpHeal, -(MAX_HP_TEST - 1)); + } +} + +SINGLE_BATTLE_TEST("Stockpile temporarily raises Def and Sp.Def", s16 dmgPyhsical, s16 dmgSpecial) +{ + u16 move; + PARAMETRIZE {move = MOVE_STOCKPILE;} + PARAMETRIZE {move = MOVE_CELEBRATE;} + GIVEN { + ASSUME(gBattleMoves[MOVE_TACKLE].split == SPLIT_PHYSICAL); + ASSUME(gBattleMoves[MOVE_GUST].split == SPLIT_SPECIAL); + PLAYER(SPECIES_WOBBUFFET) {Speed(2); } + OPPONENT(SPECIES_WOBBUFFET) {Speed(1); } + } WHEN { + TURN { MOVE(player, move); MOVE(opponent, MOVE_TACKLE); } + TURN { MOVE(opponent, MOVE_GUST); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, move, player); + if (move == MOVE_STOCKPILE) { + MESSAGE("Wobbuffet stockpiled 1!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Wobbuffet's defense rose!"); + MESSAGE("Wobbuffet's sp. defense rose!"); + } + + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + HP_BAR(player, captureDamage: &results[i].dmgPyhsical); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_GUST, opponent); + HP_BAR(player, captureDamage: &results[i].dmgSpecial); + } FINALLY { + EXPECT_MUL_EQ(results[0].dmgPyhsical, Q_4_12(1.5), results[1].dmgPyhsical); + EXPECT_MUL_EQ(results[0].dmgSpecial, Q_4_12(1.5), results[1].dmgSpecial); + } +} + +DOUBLE_BATTLE_TEST("Stockpile's Def and Sp.Def boost is lost after using Spit Up or Swallow", s16 dmgPyhsicalBefore, s16 dmgPhysicalAfter, s16 dmgSpecialBefore, s16 dmgSpecialAfter) +{ + u8 count; + u16 move; + PARAMETRIZE {count = 1, move = MOVE_SPIT_UP;} + PARAMETRIZE {count = 2, move = MOVE_SWALLOW;} + PARAMETRIZE {count = 3, move = MOVE_SPIT_UP;} + GIVEN { + ASSUME(gBattleMoves[MOVE_TACKLE].split == SPLIT_PHYSICAL); + ASSUME(gBattleMoves[MOVE_GUST].split == SPLIT_SPECIAL); + PLAYER(SPECIES_WOBBUFFET) {Speed(4); HP(MAX_HP_TEST - 1); MaxHP(MAX_HP_TEST); } + PLAYER(SPECIES_WOBBUFFET) {Speed(3); } + OPPONENT(SPECIES_WOBBUFFET) {Speed(2); } + OPPONENT(SPECIES_WOBBUFFET) {Speed(1); } + } WHEN { + TURN { MOVE(opponentLeft, MOVE_TACKLE, target:playerLeft, criticalHit:FALSE); MOVE(opponentRight, MOVE_GUST, criticalHit:FALSE, target:playerLeft);} + TURN { MOVE(playerLeft, MOVE_STOCKPILE);} + if (count != 1) { + TURN { MOVE(playerLeft, MOVE_STOCKPILE);} + if (count == 3) { + TURN { MOVE(playerLeft, MOVE_STOCKPILE);} + } + } + TURN { MOVE(playerLeft, move, target:opponentLeft); MOVE(opponentLeft, MOVE_TACKLE, target:playerLeft, criticalHit:FALSE); MOVE(opponentRight, MOVE_GUST, target:playerLeft, criticalHit:FALSE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentLeft); + HP_BAR(playerLeft, captureDamage: &results[i].dmgPyhsicalBefore); + ANIMATION(ANIM_TYPE_MOVE, MOVE_GUST, opponentRight); + HP_BAR(playerLeft, captureDamage: &results[i].dmgSpecialBefore); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_STOCKPILE, playerLeft); + if (count != 1) { + ANIMATION(ANIM_TYPE_MOVE, MOVE_STOCKPILE, playerLeft); + if (count == 3) { + ANIMATION(ANIM_TYPE_MOVE, MOVE_STOCKPILE, playerLeft); + } + } + ANIMATION(ANIM_TYPE_MOVE, move, playerLeft); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); + if (count == 1) { + MESSAGE("Wobbuffet's defense fell!"); + } + else if (count == 2) { + MESSAGE("Wobbuffet's defense harshly fell!"); + } + else { + MESSAGE("Wobbuffet's defense severely fell!"); + } + + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); + if (count == 1) { + MESSAGE("Wobbuffet's sp. defense fell!"); + } + else if (count == 2) { + MESSAGE("Wobbuffet's sp. defense harshly fell!"); + } + else { + MESSAGE("Wobbuffet's sp. defense severely fell!"); + } + MESSAGE("Wobbuffet's stockpiled effect wore off!"); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentLeft); + HP_BAR(playerLeft, captureDamage: &results[i].dmgPhysicalAfter); + ANIMATION(ANIM_TYPE_MOVE, MOVE_GUST, opponentRight); + HP_BAR(playerLeft, captureDamage: &results[i].dmgSpecialAfter); + } FINALLY { + EXPECT_MUL_EQ(results[0].dmgPyhsicalBefore, UQ_4_12(1.0), results[0].dmgPhysicalAfter); + EXPECT_MUL_EQ(results[0].dmgSpecialBefore, UQ_4_12(1.0), results[0].dmgSpecialAfter); + EXPECT_MUL_EQ(results[1].dmgPyhsicalBefore, UQ_4_12(1.0), results[1].dmgPhysicalAfter); + EXPECT_MUL_EQ(results[1].dmgSpecialBefore, UQ_4_12(1.0), results[1].dmgSpecialAfter); + EXPECT_MUL_EQ(results[2].dmgPyhsicalBefore, UQ_4_12(1.0), results[2].dmgPhysicalAfter); + EXPECT_MUL_EQ(results[2].dmgSpecialBefore, UQ_4_12(1.0), results[2].dmgSpecialAfter); + } +} + diff --git a/test/test_battle.h b/test/test_battle.h index 806e7947e1de..16918251b1c8 100644 --- a/test/test_battle.h +++ b/test/test_battle.h @@ -433,7 +433,7 @@ // NOTE: If the stack is too small the test runner will probably crash // or loop. #define BATTLE_TEST_STACK_SIZE 1024 -#define MAX_QUEUED_EVENTS 16 +#define MAX_QUEUED_EVENTS 25 enum { BATTLE_TEST_SINGLES, BATTLE_TEST_DOUBLES }; From 930a88b0e2b8d28b4b463d3050a31182d41b3e96 Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 27 Feb 2023 18:00:32 +0100 Subject: [PATCH 120/428] z status moves did not work properly --- src/battle_util.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/battle_util.c b/src/battle_util.c index 1625ff919c3f..8436cb5e25ea 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -1774,7 +1774,7 @@ u8 TrySetCantSelectMoveBattleScript(void) } } - if (!gBattleStruct->zmove.active && gDisableStructs[gActiveBattler].tauntTimer != 0 && IS_MOVE_STATUS(move)) + if (gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && gDisableStructs[gActiveBattler].tauntTimer != 0 && IS_MOVE_STATUS(move)) { gCurrentMove = move; if (gBattleTypeFlags & BATTLE_TYPE_PALACE) @@ -1789,7 +1789,7 @@ u8 TrySetCantSelectMoveBattleScript(void) } } - if (!gBattleStruct->zmove.active && gDisableStructs[gActiveBattler].throatChopTimer != 0 && gBattleMoves[move].flags & FLAG_SOUND) + if (gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && gDisableStructs[gActiveBattler].throatChopTimer != 0 && gBattleMoves[move].flags & FLAG_SOUND) { gCurrentMove = move; if (gBattleTypeFlags & BATTLE_TYPE_PALACE) @@ -1804,7 +1804,7 @@ u8 TrySetCantSelectMoveBattleScript(void) } } - if (!gBattleStruct->zmove.active && GetImprisonedMovesCount(gActiveBattler, move)) + if (gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && GetImprisonedMovesCount(gActiveBattler, move)) { gCurrentMove = move; if (gBattleTypeFlags & BATTLE_TYPE_PALACE) @@ -1819,7 +1819,7 @@ u8 TrySetCantSelectMoveBattleScript(void) } } - if (!gBattleStruct->zmove.active && IsGravityPreventingMove(move)) + if (gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && IsGravityPreventingMove(move)) { gCurrentMove = move; if (gBattleTypeFlags & BATTLE_TYPE_PALACE) @@ -1834,7 +1834,7 @@ u8 TrySetCantSelectMoveBattleScript(void) } } - if (!gBattleStruct->zmove.active && IsHealBlockPreventingMove(gActiveBattler, move)) + if (gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && IsHealBlockPreventingMove(gActiveBattler, move)) { gCurrentMove = move; if (gBattleTypeFlags & BATTLE_TYPE_PALACE) @@ -1849,7 +1849,7 @@ u8 TrySetCantSelectMoveBattleScript(void) } } - if (!gBattleStruct->zmove.active && IsBelchPreventingMove(gActiveBattler, move)) + if (gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && IsBelchPreventingMove(gActiveBattler, move)) { gCurrentMove = move; if (gBattleTypeFlags & BATTLE_TYPE_PALACE) @@ -3547,7 +3547,7 @@ u8 AtkCanceller_UnableToUseMove(void) gBattleStruct->atkCancellerTracker++; break; case CANCELLER_DISABLED: // disabled move - if (gDisableStructs[gBattlerAttacker].disabledMove == gCurrentMove && gDisableStructs[gBattlerAttacker].disabledMove != MOVE_NONE) + if (gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && gDisableStructs[gBattlerAttacker].disabledMove == gCurrentMove && gDisableStructs[gBattlerAttacker].disabledMove != MOVE_NONE) { gProtectStructs[gBattlerAttacker].usedDisabledMove = TRUE; gBattleScripting.battler = gBattlerAttacker; @@ -3559,7 +3559,7 @@ u8 AtkCanceller_UnableToUseMove(void) gBattleStruct->atkCancellerTracker++; break; case CANCELLER_HEAL_BLOCKED: - if (gStatuses3[gBattlerAttacker] & STATUS3_HEAL_BLOCK && IsHealBlockPreventingMove(gBattlerAttacker, gCurrentMove)) + if (gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && gStatuses3[gBattlerAttacker] & STATUS3_HEAL_BLOCK && IsHealBlockPreventingMove(gBattlerAttacker, gCurrentMove)) { gProtectStructs[gBattlerAttacker].usedHealBlockedMove = TRUE; gBattleScripting.battler = gBattlerAttacker; @@ -3583,7 +3583,7 @@ u8 AtkCanceller_UnableToUseMove(void) gBattleStruct->atkCancellerTracker++; break; case CANCELLER_TAUNTED: // taunt - if (gDisableStructs[gBattlerAttacker].tauntTimer && IS_MOVE_STATUS(gCurrentMove)) + if (gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && gDisableStructs[gBattlerAttacker].tauntTimer && IS_MOVE_STATUS(gCurrentMove)) { gProtectStructs[gBattlerAttacker].usedTauntedMove = TRUE; CancelMultiTurnMoves(gBattlerAttacker); @@ -3594,7 +3594,7 @@ u8 AtkCanceller_UnableToUseMove(void) gBattleStruct->atkCancellerTracker++; break; case CANCELLER_IMPRISONED: // imprisoned - if (GetImprisonedMovesCount(gBattlerAttacker, gCurrentMove)) + if (gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && GetImprisonedMovesCount(gBattlerAttacker, gCurrentMove)) { gProtectStructs[gBattlerAttacker].usedImprisonedMove = TRUE; CancelMultiTurnMoves(gBattlerAttacker); @@ -3758,7 +3758,7 @@ u8 AtkCanceller_UnableToUseMove(void) gBattleStruct->atkCancellerTracker++; break; case CANCELLER_THROAT_CHOP: - if (gDisableStructs[gBattlerAttacker].throatChopTimer && gBattleMoves[gCurrentMove].flags & FLAG_SOUND) + if (gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && gDisableStructs[gBattlerAttacker].throatChopTimer && gBattleMoves[gCurrentMove].flags & FLAG_SOUND) { gProtectStructs[gBattlerAttacker].usedThroatChopPreventedMove = TRUE; CancelMultiTurnMoves(gBattlerAttacker); From 1a2504d5ee460b28c7413f7cadb57dee7a88ae38 Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 27 Feb 2023 18:29:29 +0100 Subject: [PATCH 121/428] forgot disable --- src/battle_util.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_util.c b/src/battle_util.c index 8436cb5e25ea..721113b8b77a 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -1743,7 +1743,7 @@ u8 TrySetCantSelectMoveBattleScript(void) u32 holdEffect = GetBattlerHoldEffect(gActiveBattler, TRUE); u16 *choicedMove = &gBattleStruct->choicedMove[gActiveBattler]; - if (gDisableStructs[gActiveBattler].disabledMove == move && move != MOVE_NONE) + if (gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && gDisableStructs[gActiveBattler].disabledMove == move && move != MOVE_NONE) { gBattleScripting.battler = gActiveBattler; gCurrentMove = move; From 21ca6defa705132b6d8bb14501f42ddb9a27a75c Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 27 Feb 2023 18:39:17 +0100 Subject: [PATCH 122/428] forgot torment --- src/battle_util.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_util.c b/src/battle_util.c index 721113b8b77a..7a530197d58c 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -1759,7 +1759,7 @@ u8 TrySetCantSelectMoveBattleScript(void) } } - if (move == gLastMoves[gActiveBattler] && move != MOVE_STRUGGLE && (gBattleMons[gActiveBattler].status2 & STATUS2_TORMENT)) + if (gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && move == gLastMoves[gActiveBattler] && move != MOVE_STRUGGLE && (gBattleMons[gActiveBattler].status2 & STATUS2_TORMENT)) { CancelMultiTurnMoves(gActiveBattler); if (gBattleTypeFlags & BATTLE_TYPE_PALACE) From be8479371343528d67d203ab117ef9cc86a2c061 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Mon, 27 Feb 2023 12:47:35 -0500 Subject: [PATCH 123/428] Let scaninc/preproc ignore empty asm files --- tools/preproc/asm_file.cpp | 4 +++- tools/scaninc/asm_file.cpp | 7 ++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/tools/preproc/asm_file.cpp b/tools/preproc/asm_file.cpp index af16e232d319..04a7410e00bf 100644 --- a/tools/preproc/asm_file.cpp +++ b/tools/preproc/asm_file.cpp @@ -41,6 +41,8 @@ AsmFile::AsmFile(std::string filename) : m_filename(filename) if (m_size < 0) FATAL_ERROR("File size of \"%s\" is less than zero.\n", filename.c_str()); + else if (m_size == 0) + return; // Empty file m_buffer = new char[m_size + 1]; @@ -73,7 +75,7 @@ AsmFile::AsmFile(AsmFile&& other) : m_filename(std::move(other.m_filename)) AsmFile::~AsmFile() { - delete[] m_buffer; + if (m_size > 0) delete[] m_buffer; } // Removes comments to simplify further processing. diff --git a/tools/scaninc/asm_file.cpp b/tools/scaninc/asm_file.cpp index 109e604a224d..d2cc624ee592 100644 --- a/tools/scaninc/asm_file.cpp +++ b/tools/scaninc/asm_file.cpp @@ -36,6 +36,11 @@ AsmFile::AsmFile(std::string path) m_size = std::ftell(fp); + if (m_size < 0) + FATAL_ERROR("File size of \"%s\" is less than zero.\n", path.c_str()); + else if (m_size == 0) + return; // Empty file + m_buffer = new char[m_size]; std::rewind(fp); @@ -51,7 +56,7 @@ AsmFile::AsmFile(std::string path) AsmFile::~AsmFile() { - delete[] m_buffer; + if (m_size > 0) delete[] m_buffer; } IncDirectiveType AsmFile::ReadUntilIncDirective(std::string &path) From c92a65dc40977fc9ffafafb2a87c91b2981018f4 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 27 Feb 2023 21:09:02 +0100 Subject: [PATCH 124/428] Add config for stockpile raising def stats --- data/battle_scripts_1.s | 5 +++++ include/config/battle.h | 3 ++- test/move_effect_stockpile.c | 2 ++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index d7b597c53f98..eea0bccaca2e 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -5550,6 +5550,9 @@ BattleScript_EffectStockpile:: waitanimation printfromtable gStockpileUsedStringIds waitmessage B_WAIT_TIME_LONG + .if B_STOCKPILE_RAISES_DEFS < GEN_4 + goto BattleScript_EffectStockpileEnd + .endif jumpifmovehadnoeffect BattleScript_EffectStockpileEnd jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_DEF, MAX_STAT_STAGE, BattleScript_EffectStockpileDef jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_SPDEF, MAX_STAT_STAGE, BattleScript_EffectStockpileEnd @@ -5572,9 +5575,11 @@ BattleScript_EffectStockpileEnd: goto BattleScript_MoveEnd BattleScript_MoveEffectStockpileWoreOff:: + .if B_STOCKPILE_RAISES_DEFS >= GEN_4 dostockpilestatchangeswearoff BS_ATTACKER, BattleScript_StockpileStatChangeDown printstring STRINGID_STOCKPILEDEFFECTWOREOFF waitmessage B_WAIT_TIME_SHORT + .endif return BattleScript_StockpileStatChangeDown: diff --git a/include/config/battle.h b/include/config/battle.h index a8f4a3e8b4bd..8fdf596cc36e 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -96,7 +96,8 @@ #define B_DARK_VOID_FAIL GEN_LATEST // In Gen7+, only Darkrai can use Dark Void. #define B_BURN_HIT_THAW GEN_LATEST // In Gen6+, damaging moves with a chance of burn will thaw the target, regardless if they're fire-type moves or not. #define B_HEALING_WISH_SWITCH GEN_LATEST // In Gen5+, the mon receiving Healing Wish is sent out at the end of the turn. - // Additionally, in gen8+ the Healing Wish's effect will be stored until the user switches into a statused or hurt mon. + // Additionally, in gen8+ the Healing Wish's effect will be stored until the user switches into a statused or hurt mon +#define B_STOCKPILE_RAISES_DEFS GEN_LATEST // In Gen4+, Stockpile also raises Defense and Sp.Defense stats. Once Spit Up / Swallow is used, these stat changes are lost. // Ability settings #define B_EXPANDED_ABILITY_NAMES TRUE // If TRUE, ability names are increased from 12 characters to 16 characters. diff --git a/test/move_effect_stockpile.c b/test/move_effect_stockpile.c index 1e62f766d7b3..0530355efbe5 100644 --- a/test/move_effect_stockpile.c +++ b/test/move_effect_stockpile.c @@ -148,6 +148,7 @@ SINGLE_BATTLE_TEST("Stockpile temporarily raises Def and Sp.Def", s16 dmgPyhsica PARAMETRIZE {move = MOVE_STOCKPILE;} PARAMETRIZE {move = MOVE_CELEBRATE;} GIVEN { + ASSUME(B_STOCKPILE_RAISES_DEFS >= GEN_4); ASSUME(gBattleMoves[MOVE_TACKLE].split == SPLIT_PHYSICAL); ASSUME(gBattleMoves[MOVE_GUST].split == SPLIT_SPECIAL); PLAYER(SPECIES_WOBBUFFET) {Speed(2); } @@ -183,6 +184,7 @@ DOUBLE_BATTLE_TEST("Stockpile's Def and Sp.Def boost is lost after using Spit Up PARAMETRIZE {count = 2, move = MOVE_SWALLOW;} PARAMETRIZE {count = 3, move = MOVE_SPIT_UP;} GIVEN { + ASSUME(B_STOCKPILE_RAISES_DEFS >= GEN_4); ASSUME(gBattleMoves[MOVE_TACKLE].split == SPLIT_PHYSICAL); ASSUME(gBattleMoves[MOVE_GUST].split == SPLIT_SPECIAL); PLAYER(SPECIES_WOBBUFFET) {Speed(4); HP(MAX_HP_TEST - 1); MaxHP(MAX_HP_TEST); } From 501cff84b946d78d26819f9fac4a9783f768a995 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Mon, 27 Feb 2023 18:09:54 -0300 Subject: [PATCH 125/428] Removed unused single-frame front pics --- graphics/pokemon/abomasnow/front.png | Bin 1055 -> 0 bytes graphics/pokemon/abra/front.png | Bin 635 -> 0 bytes graphics/pokemon/absol/front.png | Bin 903 -> 0 bytes graphics/pokemon/accelgor/front.png | Bin 681 -> 0 bytes graphics/pokemon/aegislash/blade/front.png | Bin 914 -> 0 bytes graphics/pokemon/aegislash/front.png | Bin 882 -> 0 bytes graphics/pokemon/aerodactyl/front.png | Bin 905 -> 0 bytes graphics/pokemon/aggron/front.png | Bin 1131 -> 0 bytes graphics/pokemon/aipom/front.png | Bin 628 -> 0 bytes graphics/pokemon/alakazam/front.png | Bin 932 -> 0 bytes graphics/pokemon/alomomola/front.png | Bin 588 -> 0 bytes graphics/pokemon/altaria/front.png | Bin 786 -> 0 bytes graphics/pokemon/amaura/front.png | Bin 519 -> 0 bytes graphics/pokemon/ambipom/front.png | Bin 970 -> 0 bytes graphics/pokemon/amoonguss/front.png | Bin 752 -> 0 bytes graphics/pokemon/ampharos/front.png | Bin 684 -> 0 bytes graphics/pokemon/anorith/front.png | Bin 669 -> 0 bytes graphics/pokemon/arbok/front.png | Bin 800 -> 0 bytes graphics/pokemon/arcanine/front.png | Bin 1107 -> 0 bytes graphics/pokemon/arceus/front.png | Bin 1079 -> 0 bytes graphics/pokemon/archen/front.png | Bin 645 -> 0 bytes graphics/pokemon/archeops/front.png | Bin 1091 -> 0 bytes graphics/pokemon/ariados/front.png | Bin 794 -> 0 bytes graphics/pokemon/armaldo/front.png | Bin 1121 -> 0 bytes graphics/pokemon/aromatisse/front.png | Bin 765 -> 0 bytes graphics/pokemon/aron/front.png | Bin 466 -> 0 bytes graphics/pokemon/articuno/front.png | Bin 1038 -> 0 bytes graphics/pokemon/audino/front.png | Bin 633 -> 0 bytes graphics/pokemon/aurorus/front.png | Bin 900 -> 0 bytes graphics/pokemon/avalugg/front.png | Bin 837 -> 0 bytes graphics/pokemon/axew/front.png | Bin 511 -> 0 bytes graphics/pokemon/azelf/front.png | Bin 643 -> 0 bytes graphics/pokemon/azumarill/front.png | Bin 664 -> 0 bytes graphics/pokemon/azurill/front.png | Bin 525 -> 0 bytes graphics/pokemon/bagon/front.png | Bin 525 -> 0 bytes graphics/pokemon/baltoy/front.png | Bin 472 -> 0 bytes graphics/pokemon/banette/front.png | Bin 701 -> 0 bytes graphics/pokemon/barbaracle/front.png | Bin 1215 -> 0 bytes graphics/pokemon/barboach/front.png | Bin 479 -> 0 bytes graphics/pokemon/basculin/front.png | Bin 588 -> 0 bytes graphics/pokemon/bastiodon/front.png | Bin 864 -> 0 bytes graphics/pokemon/bayleef/front.png | Bin 710 -> 0 bytes graphics/pokemon/beartic/front.png | Bin 858 -> 0 bytes graphics/pokemon/beautifly/front.png | Bin 833 -> 0 bytes graphics/pokemon/beedrill/front.png | Bin 840 -> 0 bytes graphics/pokemon/beheeyem/front.png | Bin 667 -> 0 bytes graphics/pokemon/beldum/front.png | Bin 488 -> 0 bytes graphics/pokemon/bellossom/front.png | Bin 518 -> 0 bytes graphics/pokemon/bellsprout/front.png | Bin 479 -> 0 bytes graphics/pokemon/bergmite/front.png | Bin 502 -> 0 bytes graphics/pokemon/bibarel/front.png | Bin 669 -> 0 bytes graphics/pokemon/bidoof/front.png | Bin 518 -> 0 bytes graphics/pokemon/binacle/front.png | Bin 726 -> 0 bytes graphics/pokemon/bisharp/front.png | Bin 894 -> 0 bytes graphics/pokemon/blastoise/front.png | Bin 988 -> 0 bytes graphics/pokemon/blaziken/front.png | Bin 888 -> 0 bytes graphics/pokemon/blissey/front.png | Bin 797 -> 0 bytes graphics/pokemon/blitzle/front.png | Bin 569 -> 0 bytes graphics/pokemon/boldore/front.png | Bin 686 -> 0 bytes graphics/pokemon/bonsly/front.png | Bin 479 -> 0 bytes graphics/pokemon/bouffalant/front.png | Bin 803 -> 0 bytes graphics/pokemon/braixen/front.png | Bin 745 -> 0 bytes graphics/pokemon/braviary/front.png | Bin 973 -> 0 bytes graphics/pokemon/breloom/front.png | Bin 789 -> 0 bytes graphics/pokemon/bronzong/front.png | Bin 859 -> 0 bytes graphics/pokemon/bronzor/front.png | Bin 434 -> 0 bytes graphics/pokemon/budew/front.png | Bin 439 -> 0 bytes graphics/pokemon/buizel/front.png | Bin 613 -> 0 bytes graphics/pokemon/bulbasaur/front.png | Bin 519 -> 0 bytes graphics/pokemon/buneary/front.png | Bin 522 -> 0 bytes graphics/pokemon/bunnelby/front.png | Bin 654 -> 0 bytes graphics/pokemon/burmy/front.png | Bin 488 -> 0 bytes graphics/pokemon/burmy/sandy_cloak/front.png | Bin 454 -> 0 bytes graphics/pokemon/burmy/trash_cloak/front.png | Bin 508 -> 0 bytes graphics/pokemon/butterfree/front.png | Bin 790 -> 0 bytes graphics/pokemon/cacnea/front.png | Bin 642 -> 0 bytes graphics/pokemon/cacturne/front.png | Bin 837 -> 0 bytes graphics/pokemon/camerupt/front.png | Bin 918 -> 0 bytes graphics/pokemon/carbink/front.png | Bin 616 -> 0 bytes graphics/pokemon/carnivine/front.png | Bin 788 -> 0 bytes graphics/pokemon/carracosta/front.png | Bin 920 -> 0 bytes graphics/pokemon/carvanha/front.png | Bin 666 -> 0 bytes graphics/pokemon/cascoon/front.png | Bin 554 -> 0 bytes graphics/pokemon/caterpie/front.png | Bin 496 -> 0 bytes graphics/pokemon/celebi/front.png | Bin 510 -> 0 bytes graphics/pokemon/chandelure/front.png | Bin 673 -> 0 bytes graphics/pokemon/chansey/front.png | Bin 591 -> 0 bytes graphics/pokemon/charizard/front.png | Bin 1007 -> 0 bytes graphics/pokemon/charmander/front.png | Bin 577 -> 0 bytes graphics/pokemon/charmeleon/front.png | Bin 758 -> 0 bytes graphics/pokemon/chatot/front.png | Bin 552 -> 0 bytes graphics/pokemon/cherubi/front.png | Bin 432 -> 0 bytes graphics/pokemon/chesnaught/front.png | Bin 1048 -> 0 bytes graphics/pokemon/chespin/front.png | Bin 575 -> 0 bytes graphics/pokemon/chikorita/front.png | Bin 503 -> 0 bytes graphics/pokemon/chimchar/front.png | Bin 611 -> 0 bytes graphics/pokemon/chimecho/front.png | Bin 482 -> 0 bytes graphics/pokemon/chinchou/front.png | Bin 644 -> 0 bytes graphics/pokemon/chingling/front.png | Bin 447 -> 0 bytes graphics/pokemon/cinccino/front.png | Bin 769 -> 0 bytes graphics/pokemon/clamperl/front.png | Bin 645 -> 0 bytes graphics/pokemon/clauncher/front.png | Bin 604 -> 0 bytes graphics/pokemon/clawitzer/front.png | Bin 956 -> 0 bytes graphics/pokemon/claydol/front.png | Bin 934 -> 0 bytes graphics/pokemon/clefable/front.png | Bin 639 -> 0 bytes graphics/pokemon/clefairy/front.png | Bin 528 -> 0 bytes graphics/pokemon/cleffa/front.png | Bin 398 -> 0 bytes graphics/pokemon/cloyster/front.png | Bin 861 -> 0 bytes graphics/pokemon/cobalion/front.png | Bin 877 -> 0 bytes graphics/pokemon/cofagrigus/front.png | Bin 981 -> 0 bytes graphics/pokemon/combee/front.png | Bin 491 -> 0 bytes graphics/pokemon/combusken/front.png | Bin 721 -> 0 bytes graphics/pokemon/conkeldurr/front.png | Bin 915 -> 0 bytes graphics/pokemon/corphish/front.png | Bin 744 -> 0 bytes graphics/pokemon/corsola/front.png | Bin 575 -> 0 bytes graphics/pokemon/cottonee/front.png | Bin 480 -> 0 bytes graphics/pokemon/cradily/front.png | Bin 860 -> 0 bytes graphics/pokemon/cranidos/front.png | Bin 579 -> 0 bytes graphics/pokemon/crawdaunt/front.png | Bin 989 -> 0 bytes graphics/pokemon/cresselia/front.png | Bin 838 -> 0 bytes graphics/pokemon/croagunk/front.png | Bin 597 -> 0 bytes graphics/pokemon/crobat/front.png | Bin 677 -> 0 bytes graphics/pokemon/croconaw/front.png | Bin 668 -> 0 bytes graphics/pokemon/crustle/front.png | Bin 841 -> 0 bytes graphics/pokemon/cryogonal/front.png | Bin 1100 -> 0 bytes graphics/pokemon/cubchoo/front.png | Bin 521 -> 0 bytes graphics/pokemon/cubone/front.png | Bin 495 -> 0 bytes graphics/pokemon/cyndaquil/front.png | Bin 540 -> 0 bytes graphics/pokemon/darkrai/front.png | Bin 786 -> 0 bytes graphics/pokemon/darmanitan/front.png | Bin 822 -> 0 bytes graphics/pokemon/darmanitan/zen_mode/front.png | Bin 572 -> 0 bytes graphics/pokemon/darumaka/front.png | Bin 529 -> 0 bytes graphics/pokemon/dedenne/front.png | Bin 637 -> 0 bytes graphics/pokemon/deerling/front.png | Bin 525 -> 0 bytes graphics/pokemon/deino/front.png | Bin 520 -> 0 bytes graphics/pokemon/delcatty/front.png | Bin 747 -> 0 bytes graphics/pokemon/delibird/front.png | Bin 717 -> 0 bytes graphics/pokemon/delphox/front.png | Bin 1009 -> 0 bytes graphics/pokemon/deoxys/attack/front.png | Bin 936 -> 0 bytes graphics/pokemon/deoxys/defense/front.png | Bin 822 -> 0 bytes graphics/pokemon/deoxys/front.png | Bin 877 -> 0 bytes graphics/pokemon/deoxys/speed/front.png | Bin 925 -> 0 bytes graphics/pokemon/dewgong/front.png | Bin 643 -> 0 bytes graphics/pokemon/dewott/front.png | Bin 575 -> 0 bytes graphics/pokemon/dialga/front.png | Bin 1149 -> 0 bytes graphics/pokemon/diancie/front.png | Bin 812 -> 0 bytes graphics/pokemon/diggersby/front.png | Bin 839 -> 0 bytes graphics/pokemon/diglett/front.png | Bin 371 -> 0 bytes graphics/pokemon/ditto/front.png | Bin 343 -> 0 bytes graphics/pokemon/dodrio/front.png | Bin 944 -> 0 bytes graphics/pokemon/doduo/front.png | Bin 603 -> 0 bytes graphics/pokemon/donphan/front.png | Bin 878 -> 0 bytes graphics/pokemon/doublade/front.png | Bin 904 -> 0 bytes graphics/pokemon/dragalge/front.png | Bin 850 -> 0 bytes graphics/pokemon/dragonair/front.png | Bin 727 -> 0 bytes graphics/pokemon/dragonite/front.png | Bin 974 -> 0 bytes graphics/pokemon/drapion/front.png | Bin 1069 -> 0 bytes graphics/pokemon/dratini/front.png | Bin 476 -> 0 bytes graphics/pokemon/drifblim/front.png | Bin 753 -> 0 bytes graphics/pokemon/drifloon/front.png | Bin 460 -> 0 bytes graphics/pokemon/drilbur/front.png | Bin 672 -> 0 bytes graphics/pokemon/drowzee/front.png | Bin 632 -> 0 bytes graphics/pokemon/druddigon/front.png | Bin 960 -> 0 bytes graphics/pokemon/ducklett/front.png | Bin 497 -> 0 bytes graphics/pokemon/dugtrio/front.png | Bin 587 -> 0 bytes graphics/pokemon/dunsparce/front.png | Bin 624 -> 0 bytes graphics/pokemon/duosion/front.png | Bin 498 -> 0 bytes graphics/pokemon/durant/front.png | Bin 526 -> 0 bytes graphics/pokemon/dusclops/front.png | Bin 857 -> 0 bytes graphics/pokemon/dusknoir/front.png | Bin 907 -> 0 bytes graphics/pokemon/duskull/front.png | Bin 509 -> 0 bytes graphics/pokemon/dustox/front.png | Bin 799 -> 0 bytes graphics/pokemon/dwebble/front.png | Bin 524 -> 0 bytes graphics/pokemon/eelektrik/front.png | Bin 684 -> 0 bytes graphics/pokemon/eelektross/front.png | Bin 942 -> 0 bytes graphics/pokemon/eevee/front.png | Bin 535 -> 0 bytes graphics/pokemon/egg/front.png | Bin 318 -> 0 bytes graphics/pokemon/ekans/front.png | Bin 593 -> 0 bytes graphics/pokemon/electabuzz/front.png | Bin 830 -> 0 bytes graphics/pokemon/electivire/front.png | Bin 1066 -> 0 bytes graphics/pokemon/electrike/front.png | Bin 551 -> 0 bytes graphics/pokemon/electrode/front.png | Bin 472 -> 0 bytes graphics/pokemon/elekid/front.png | Bin 609 -> 0 bytes graphics/pokemon/elgyem/front.png | Bin 506 -> 0 bytes graphics/pokemon/emboar/front.png | Bin 1166 -> 0 bytes graphics/pokemon/emolga/front.png | Bin 648 -> 0 bytes graphics/pokemon/empoleon/front.png | Bin 867 -> 0 bytes graphics/pokemon/entei/front.png | Bin 1022 -> 0 bytes graphics/pokemon/escavalier/front.png | Bin 840 -> 0 bytes graphics/pokemon/espeon/front.png | Bin 616 -> 0 bytes graphics/pokemon/espurr/front.png | Bin 492 -> 0 bytes graphics/pokemon/excadrill/front.png | Bin 905 -> 0 bytes graphics/pokemon/exeggcute/front.png | Bin 636 -> 0 bytes graphics/pokemon/exeggutor/front.png | Bin 916 -> 0 bytes graphics/pokemon/exploud/front.png | Bin 1135 -> 0 bytes graphics/pokemon/farfetchd/front.png | Bin 752 -> 0 bytes graphics/pokemon/fearow/front.png | Bin 1025 -> 0 bytes graphics/pokemon/feebas/front.png | Bin 592 -> 0 bytes graphics/pokemon/fennekin/front.png | Bin 655 -> 0 bytes graphics/pokemon/feraligatr/front.png | Bin 982 -> 0 bytes graphics/pokemon/ferroseed/front.png | Bin 470 -> 0 bytes graphics/pokemon/ferrothorn/front.png | Bin 895 -> 0 bytes graphics/pokemon/finneon/front.png | Bin 469 -> 0 bytes graphics/pokemon/flaaffy/front.png | Bin 655 -> 0 bytes graphics/pokemon/flabebe/front.png | Bin 760 -> 0 bytes graphics/pokemon/flareon/front.png | Bin 726 -> 0 bytes graphics/pokemon/fletchinder/front.png | Bin 663 -> 0 bytes graphics/pokemon/fletchling/front.png | Bin 423 -> 0 bytes graphics/pokemon/floatzel/front.png | Bin 873 -> 0 bytes graphics/pokemon/floette/front.png | Bin 624 -> 0 bytes graphics/pokemon/florges/front.png | Bin 947 -> 0 bytes graphics/pokemon/flygon/front.png | Bin 949 -> 0 bytes graphics/pokemon/foongus/front.png | Bin 389 -> 0 bytes graphics/pokemon/forretress/front.png | Bin 824 -> 0 bytes graphics/pokemon/fraxure/front.png | Bin 778 -> 0 bytes graphics/pokemon/frillish/front.png | Bin 645 -> 0 bytes graphics/pokemon/froakie/front.png | Bin 561 -> 0 bytes graphics/pokemon/frogadier/front.png | Bin 699 -> 0 bytes graphics/pokemon/froslass/front.png | Bin 658 -> 0 bytes graphics/pokemon/furfrou/dandy_trim/front.png | Bin 732 -> 0 bytes .../pokemon/furfrou/debutante_trim/front.png | Bin 760 -> 0 bytes graphics/pokemon/furfrou/diamond_trim/front.png | Bin 740 -> 0 bytes graphics/pokemon/furfrou/front.png | Bin 751 -> 0 bytes graphics/pokemon/furfrou/heart_trim/front.png | Bin 785 -> 0 bytes graphics/pokemon/furfrou/kabuki_trim/front.png | Bin 787 -> 0 bytes graphics/pokemon/furfrou/la_reine_trim/front.png | Bin 716 -> 0 bytes graphics/pokemon/furfrou/matron_trim/front.png | Bin 728 -> 0 bytes graphics/pokemon/furfrou/pharaoh_trim/front.png | Bin 742 -> 0 bytes graphics/pokemon/furfrou/star_trim/front.png | Bin 790 -> 0 bytes graphics/pokemon/furret/front.png | Bin 658 -> 0 bytes graphics/pokemon/gabite/front.png | Bin 866 -> 0 bytes graphics/pokemon/gallade/front.png | Bin 767 -> 0 bytes graphics/pokemon/galvantula/front.png | Bin 759 -> 0 bytes graphics/pokemon/garbodor/front.png | Bin 1047 -> 0 bytes graphics/pokemon/garchomp/front.png | Bin 1024 -> 0 bytes graphics/pokemon/gardevoir/front.png | Bin 740 -> 0 bytes graphics/pokemon/gastly/front.png | Bin 601 -> 0 bytes graphics/pokemon/gastrodon/east_sea/front.png | Bin 637 -> 0 bytes graphics/pokemon/gastrodon/front.png | Bin 614 -> 0 bytes graphics/pokemon/genesect/front.png | Bin 828 -> 0 bytes graphics/pokemon/gengar/front.png | Bin 702 -> 0 bytes graphics/pokemon/geodude/front.png | Bin 510 -> 0 bytes graphics/pokemon/gible/front.png | Bin 630 -> 0 bytes graphics/pokemon/gigalith/front.png | Bin 925 -> 0 bytes graphics/pokemon/girafarig/front.png | Bin 833 -> 0 bytes graphics/pokemon/giratina/front.png | Bin 1271 -> 0 bytes graphics/pokemon/giratina/origin/front.png | Bin 1283 -> 0 bytes graphics/pokemon/glaceon/front.png | Bin 602 -> 0 bytes graphics/pokemon/glalie/front.png | Bin 879 -> 0 bytes graphics/pokemon/glameow/front.png | Bin 729 -> 0 bytes graphics/pokemon/gligar/front.png | Bin 851 -> 0 bytes graphics/pokemon/gliscor/front.png | Bin 940 -> 0 bytes graphics/pokemon/gloom/front.png | Bin 657 -> 0 bytes graphics/pokemon/gogoat/front.png | Bin 1032 -> 0 bytes graphics/pokemon/golbat/front.png | Bin 782 -> 0 bytes graphics/pokemon/goldeen/front.png | Bin 710 -> 0 bytes graphics/pokemon/golduck/front.png | Bin 756 -> 0 bytes graphics/pokemon/golem/front.png | Bin 886 -> 0 bytes graphics/pokemon/golett/front.png | Bin 804 -> 0 bytes graphics/pokemon/golurk/front.png | Bin 1142 -> 0 bytes graphics/pokemon/goodra/front.png | Bin 856 -> 0 bytes graphics/pokemon/goomy/front.png | Bin 439 -> 0 bytes graphics/pokemon/gorebyss/front.png | Bin 646 -> 0 bytes graphics/pokemon/gothita/front.png | Bin 495 -> 0 bytes graphics/pokemon/gothitelle/front.png | Bin 873 -> 0 bytes graphics/pokemon/gothorita/front.png | Bin 648 -> 0 bytes graphics/pokemon/gourgeist/front.png | Bin 861 -> 0 bytes graphics/pokemon/gourgeist/large/front.png | Bin 982 -> 0 bytes graphics/pokemon/gourgeist/small/front.png | Bin 909 -> 0 bytes graphics/pokemon/gourgeist/super/front.png | Bin 988 -> 0 bytes graphics/pokemon/granbull/front.png | Bin 791 -> 0 bytes graphics/pokemon/graveler/front.png | Bin 747 -> 0 bytes graphics/pokemon/greninja/ash/front.png | Bin 791 -> 0 bytes graphics/pokemon/greninja/front.png | Bin 899 -> 0 bytes graphics/pokemon/grimer/front.png | Bin 665 -> 0 bytes graphics/pokemon/grotle/front.png | Bin 922 -> 0 bytes graphics/pokemon/groudon/front.png | Bin 1228 -> 0 bytes graphics/pokemon/grovyle/front.png | Bin 876 -> 0 bytes graphics/pokemon/growlithe/front.png | Bin 631 -> 0 bytes graphics/pokemon/grumpig/front.png | Bin 896 -> 0 bytes graphics/pokemon/gulpin/front.png | Bin 416 -> 0 bytes graphics/pokemon/gurdurr/front.png | Bin 844 -> 0 bytes graphics/pokemon/gyarados/front.png | Bin 1211 -> 0 bytes graphics/pokemon/happiny/front.png | Bin 470 -> 0 bytes graphics/pokemon/hariyama/front.png | Bin 911 -> 0 bytes graphics/pokemon/haunter/front.png | Bin 589 -> 0 bytes graphics/pokemon/hawlucha/front.png | Bin 792 -> 0 bytes graphics/pokemon/haxorus/front.png | Bin 979 -> 0 bytes graphics/pokemon/heatmor/front.png | Bin 887 -> 0 bytes graphics/pokemon/heatran/front.png | Bin 938 -> 0 bytes graphics/pokemon/heliolisk/front.png | Bin 596 -> 0 bytes graphics/pokemon/helioptile/front.png | Bin 519 -> 0 bytes graphics/pokemon/heracross/front.png | Bin 724 -> 0 bytes graphics/pokemon/herdier/front.png | Bin 678 -> 0 bytes graphics/pokemon/hippopotas/front.png | Bin 554 -> 0 bytes graphics/pokemon/hippowdon/front.png | Bin 944 -> 0 bytes graphics/pokemon/hitmonchan/front.png | Bin 730 -> 0 bytes graphics/pokemon/hitmonlee/front.png | Bin 666 -> 0 bytes graphics/pokemon/hitmontop/front.png | Bin 817 -> 0 bytes graphics/pokemon/ho_oh/front.png | Bin 1280 -> 0 bytes graphics/pokemon/honchkrow/front.png | Bin 811 -> 0 bytes graphics/pokemon/honedge/front.png | Bin 699 -> 0 bytes graphics/pokemon/hoopa/front.png | Bin 768 -> 0 bytes graphics/pokemon/hoopa/unbound/front.png | Bin 1287 -> 0 bytes graphics/pokemon/hoothoot/front.png | Bin 548 -> 0 bytes graphics/pokemon/hoppip/front.png | Bin 529 -> 0 bytes graphics/pokemon/horsea/front.png | Bin 452 -> 0 bytes graphics/pokemon/houndoom/front.png | Bin 866 -> 0 bytes graphics/pokemon/houndour/front.png | Bin 570 -> 0 bytes graphics/pokemon/huntail/front.png | Bin 934 -> 0 bytes graphics/pokemon/hydreigon/front.png | Bin 1074 -> 0 bytes graphics/pokemon/hypno/front.png | Bin 821 -> 0 bytes graphics/pokemon/igglybuff/front.png | Bin 407 -> 0 bytes graphics/pokemon/illumise/front.png | Bin 646 -> 0 bytes graphics/pokemon/infernape/front.png | Bin 943 -> 0 bytes graphics/pokemon/inkay/front.png | Bin 579 -> 0 bytes graphics/pokemon/ivysaur/front.png | Bin 737 -> 0 bytes graphics/pokemon/jellicent/front.png | Bin 807 -> 0 bytes graphics/pokemon/jigglypuff/front.png | Bin 478 -> 0 bytes graphics/pokemon/jirachi/front.png | Bin 625 -> 0 bytes graphics/pokemon/jolteon/front.png | Bin 651 -> 0 bytes graphics/pokemon/joltik/front.png | Bin 403 -> 0 bytes graphics/pokemon/jumpluff/front.png | Bin 698 -> 0 bytes graphics/pokemon/jynx/front.png | Bin 724 -> 0 bytes graphics/pokemon/kabuto/front.png | Bin 445 -> 0 bytes graphics/pokemon/kabutops/front.png | Bin 834 -> 0 bytes graphics/pokemon/kadabra/front.png | Bin 917 -> 0 bytes graphics/pokemon/kakuna/front.png | Bin 451 -> 0 bytes graphics/pokemon/kangaskhan/front.png | Bin 974 -> 0 bytes graphics/pokemon/karrablast/front.png | Bin 506 -> 0 bytes graphics/pokemon/kecleon/front.png | Bin 722 -> 0 bytes graphics/pokemon/keldeo/front.png | Bin 778 -> 0 bytes graphics/pokemon/kingdra/front.png | Bin 788 -> 0 bytes graphics/pokemon/kingler/front.png | Bin 805 -> 0 bytes graphics/pokemon/kirlia/front.png | Bin 528 -> 0 bytes graphics/pokemon/klang/front.png | Bin 796 -> 0 bytes graphics/pokemon/klefki/front.png | Bin 712 -> 0 bytes graphics/pokemon/klink/front.png | Bin 516 -> 0 bytes graphics/pokemon/klinklang/front.png | Bin 1034 -> 0 bytes graphics/pokemon/koffing/front.png | Bin 657 -> 0 bytes graphics/pokemon/krabby/front.png | Bin 652 -> 0 bytes graphics/pokemon/kricketot/front.png | Bin 564 -> 0 bytes graphics/pokemon/kricketune/front.png | Bin 772 -> 0 bytes graphics/pokemon/krokorok/front.png | Bin 741 -> 0 bytes graphics/pokemon/krookodile/front.png | Bin 1152 -> 0 bytes graphics/pokemon/kyogre/front.png | Bin 1029 -> 0 bytes graphics/pokemon/kyurem/black/front.png | Bin 1228 -> 0 bytes graphics/pokemon/kyurem/front.png | Bin 949 -> 0 bytes graphics/pokemon/kyurem/white/front.png | Bin 1260 -> 0 bytes graphics/pokemon/lairon/front.png | Bin 877 -> 0 bytes graphics/pokemon/lampent/front.png | Bin 508 -> 0 bytes graphics/pokemon/landorus/front.png | Bin 1025 -> 0 bytes graphics/pokemon/landorus/therian/front.png | Bin 1053 -> 0 bytes graphics/pokemon/lanturn/front.png | Bin 680 -> 0 bytes graphics/pokemon/lapras/front.png | Bin 779 -> 0 bytes graphics/pokemon/larvesta/front.png | Bin 541 -> 0 bytes graphics/pokemon/larvitar/front.png | Bin 454 -> 0 bytes graphics/pokemon/latias/front.png | Bin 752 -> 0 bytes graphics/pokemon/latios/front.png | Bin 942 -> 0 bytes graphics/pokemon/leafeon/front.png | Bin 737 -> 0 bytes graphics/pokemon/leavanny/front.png | Bin 671 -> 0 bytes graphics/pokemon/ledian/front.png | Bin 738 -> 0 bytes graphics/pokemon/ledyba/front.png | Bin 674 -> 0 bytes graphics/pokemon/lickilicky/front.png | Bin 741 -> 0 bytes graphics/pokemon/lickitung/front.png | Bin 787 -> 0 bytes graphics/pokemon/liepard/front.png | Bin 783 -> 0 bytes graphics/pokemon/lileep/front.png | Bin 677 -> 0 bytes graphics/pokemon/lilligant/front.png | Bin 887 -> 0 bytes graphics/pokemon/lillipup/front.png | Bin 524 -> 0 bytes graphics/pokemon/linoone/front.png | Bin 617 -> 0 bytes graphics/pokemon/litleo/front.png | Bin 577 -> 0 bytes graphics/pokemon/litwick/front.png | Bin 394 -> 0 bytes graphics/pokemon/lombre/front.png | Bin 618 -> 0 bytes graphics/pokemon/lopunny/front.png | Bin 783 -> 0 bytes graphics/pokemon/lotad/front.png | Bin 492 -> 0 bytes graphics/pokemon/loudred/front.png | Bin 937 -> 0 bytes graphics/pokemon/lucario/front.png | Bin 671 -> 0 bytes graphics/pokemon/ludicolo/front.png | Bin 1035 -> 0 bytes graphics/pokemon/lugia/front.png | Bin 946 -> 0 bytes graphics/pokemon/lumineon/front.png | Bin 650 -> 0 bytes graphics/pokemon/lunatone/front.png | Bin 585 -> 0 bytes graphics/pokemon/luvdisc/front.png | Bin 334 -> 0 bytes graphics/pokemon/luxio/front.png | Bin 676 -> 0 bytes graphics/pokemon/luxray/front.png | Bin 832 -> 0 bytes graphics/pokemon/machamp/front.png | Bin 1013 -> 0 bytes graphics/pokemon/machoke/front.png | Bin 787 -> 0 bytes graphics/pokemon/machop/front.png | Bin 568 -> 0 bytes graphics/pokemon/magby/front.png | Bin 477 -> 0 bytes graphics/pokemon/magcargo/front.png | Bin 915 -> 0 bytes graphics/pokemon/magikarp/front.png | Bin 676 -> 0 bytes graphics/pokemon/magmar/front.png | Bin 919 -> 0 bytes graphics/pokemon/magmortar/front.png | Bin 1087 -> 0 bytes graphics/pokemon/magnemite/front.png | Bin 417 -> 0 bytes graphics/pokemon/magneton/front.png | Bin 850 -> 0 bytes graphics/pokemon/magnezone/front.png | Bin 869 -> 0 bytes graphics/pokemon/makuhita/front.png | Bin 615 -> 0 bytes graphics/pokemon/malamar/front.png | Bin 979 -> 0 bytes graphics/pokemon/mamoswine/front.png | Bin 1036 -> 0 bytes graphics/pokemon/manaphy/front.png | Bin 545 -> 0 bytes graphics/pokemon/mandibuzz/front.png | Bin 859 -> 0 bytes graphics/pokemon/manectric/front.png | Bin 789 -> 0 bytes graphics/pokemon/mankey/front.png | Bin 620 -> 0 bytes graphics/pokemon/mantine/front.png | Bin 636 -> 0 bytes graphics/pokemon/mantyke/front.png | Bin 545 -> 0 bytes graphics/pokemon/maractus/front.png | Bin 885 -> 0 bytes graphics/pokemon/mareep/front.png | Bin 593 -> 0 bytes graphics/pokemon/marill/front.png | Bin 547 -> 0 bytes graphics/pokemon/marowak/front.png | Bin 610 -> 0 bytes graphics/pokemon/marshadow/front.png | Bin 627 -> 0 bytes graphics/pokemon/marshtomp/front.png | Bin 665 -> 0 bytes graphics/pokemon/masquerain/front.png | Bin 791 -> 0 bytes graphics/pokemon/mawile/front.png | Bin 764 -> 0 bytes graphics/pokemon/medicham/front.png | Bin 658 -> 0 bytes graphics/pokemon/meditite/front.png | Bin 602 -> 0 bytes graphics/pokemon/meganium/front.png | Bin 852 -> 0 bytes graphics/pokemon/meloetta/front.png | Bin 626 -> 0 bytes graphics/pokemon/meowstic/female/front.png | Bin 668 -> 0 bytes graphics/pokemon/meowstic/front.png | Bin 729 -> 0 bytes graphics/pokemon/meowth/front.png | Bin 620 -> 0 bytes graphics/pokemon/mesprit/front.png | Bin 690 -> 0 bytes graphics/pokemon/metagross/front.png | Bin 904 -> 0 bytes graphics/pokemon/metang/front.png | Bin 816 -> 0 bytes graphics/pokemon/metapod/front.png | Bin 412 -> 0 bytes graphics/pokemon/mew/front.png | Bin 525 -> 0 bytes graphics/pokemon/mewtwo/front.png | Bin 847 -> 0 bytes graphics/pokemon/mienfoo/front.png | Bin 563 -> 0 bytes graphics/pokemon/mienshao/front.png | Bin 781 -> 0 bytes graphics/pokemon/mightyena/front.png | Bin 820 -> 0 bytes graphics/pokemon/milotic/front.png | Bin 936 -> 0 bytes graphics/pokemon/miltank/front.png | Bin 771 -> 0 bytes graphics/pokemon/mime_jr/front.png | Bin 564 -> 0 bytes graphics/pokemon/minccino/front.png | Bin 613 -> 0 bytes graphics/pokemon/minun/front.png | Bin 454 -> 0 bytes graphics/pokemon/misdreavus/front.png | Bin 587 -> 0 bytes graphics/pokemon/mismagius/front.png | Bin 727 -> 0 bytes graphics/pokemon/moltres/front.png | Bin 869 -> 0 bytes graphics/pokemon/monferno/front.png | Bin 777 -> 0 bytes graphics/pokemon/mothim/front.png | Bin 716 -> 0 bytes graphics/pokemon/mr_mime/front.png | Bin 780 -> 0 bytes graphics/pokemon/mudkip/front.png | Bin 539 -> 0 bytes graphics/pokemon/muk/front.png | Bin 738 -> 0 bytes graphics/pokemon/munchlax/front.png | Bin 575 -> 0 bytes graphics/pokemon/munna/front.png | Bin 430 -> 0 bytes graphics/pokemon/murkrow/front.png | Bin 529 -> 0 bytes graphics/pokemon/musharna/front.png | Bin 636 -> 0 bytes graphics/pokemon/natu/front.png | Bin 381 -> 0 bytes graphics/pokemon/nidoking/front.png | Bin 1016 -> 0 bytes graphics/pokemon/nidoqueen/front.png | Bin 859 -> 0 bytes graphics/pokemon/nidoran_f/front.png | Bin 489 -> 0 bytes graphics/pokemon/nidoran_m/front.png | Bin 519 -> 0 bytes graphics/pokemon/nidorina/front.png | Bin 663 -> 0 bytes graphics/pokemon/nidorino/front.png | Bin 691 -> 0 bytes graphics/pokemon/nincada/front.png | Bin 563 -> 0 bytes graphics/pokemon/ninetales/front.png | Bin 874 -> 0 bytes graphics/pokemon/ninjask/front.png | Bin 791 -> 0 bytes graphics/pokemon/noctowl/front.png | Bin 702 -> 0 bytes graphics/pokemon/noibat/front.png | Bin 687 -> 0 bytes graphics/pokemon/noivern/front.png | Bin 972 -> 0 bytes graphics/pokemon/nosepass/front.png | Bin 516 -> 0 bytes graphics/pokemon/numel/front.png | Bin 541 -> 0 bytes graphics/pokemon/nuzleaf/front.png | Bin 661 -> 0 bytes graphics/pokemon/octillery/front.png | Bin 645 -> 0 bytes graphics/pokemon/oddish/front.png | Bin 454 -> 0 bytes graphics/pokemon/omanyte/front.png | Bin 497 -> 0 bytes graphics/pokemon/omastar/front.png | Bin 863 -> 0 bytes graphics/pokemon/onix/front.png | Bin 832 -> 0 bytes graphics/pokemon/oshawott/front.png | Bin 469 -> 0 bytes graphics/pokemon/pachirisu/front.png | Bin 531 -> 0 bytes graphics/pokemon/palkia/front.png | Bin 1243 -> 0 bytes graphics/pokemon/palpitoad/front.png | Bin 630 -> 0 bytes graphics/pokemon/pancham/front.png | Bin 491 -> 0 bytes graphics/pokemon/pangoro/front.png | Bin 895 -> 0 bytes graphics/pokemon/panpour/front.png | Bin 650 -> 0 bytes graphics/pokemon/pansage/front.png | Bin 625 -> 0 bytes graphics/pokemon/pansear/front.png | Bin 591 -> 0 bytes graphics/pokemon/paras/front.png | Bin 582 -> 0 bytes graphics/pokemon/parasect/front.png | Bin 659 -> 0 bytes graphics/pokemon/patrat/front.png | Bin 600 -> 0 bytes graphics/pokemon/pawniard/front.png | Bin 584 -> 0 bytes graphics/pokemon/pelipper/front.png | Bin 774 -> 0 bytes graphics/pokemon/persian/front.png | Bin 769 -> 0 bytes graphics/pokemon/petilil/front.png | Bin 468 -> 0 bytes graphics/pokemon/phanpy/front.png | Bin 461 -> 0 bytes graphics/pokemon/phantump/front.png | Bin 570 -> 0 bytes graphics/pokemon/phione/front.png | Bin 510 -> 0 bytes graphics/pokemon/pichu/front.png | Bin 445 -> 0 bytes graphics/pokemon/pidgeot/front.png | Bin 949 -> 0 bytes graphics/pokemon/pidgeotto/front.png | Bin 694 -> 0 bytes graphics/pokemon/pidgey/front.png | Bin 549 -> 0 bytes graphics/pokemon/pidove/front.png | Bin 483 -> 0 bytes graphics/pokemon/pignite/front.png | Bin 745 -> 0 bytes graphics/pokemon/pikachu/front.png | Bin 587 -> 0 bytes graphics/pokemon/piloswine/front.png | Bin 624 -> 0 bytes graphics/pokemon/pineco/front.png | Bin 544 -> 0 bytes graphics/pokemon/pinsir/front.png | Bin 851 -> 0 bytes graphics/pokemon/piplup/front.png | Bin 491 -> 0 bytes graphics/pokemon/plusle/front.png | Bin 487 -> 0 bytes graphics/pokemon/politoed/front.png | Bin 720 -> 0 bytes graphics/pokemon/poliwag/front.png | Bin 540 -> 0 bytes graphics/pokemon/poliwhirl/front.png | Bin 715 -> 0 bytes graphics/pokemon/poliwrath/front.png | Bin 779 -> 0 bytes graphics/pokemon/ponyta/front.png | Bin 658 -> 0 bytes graphics/pokemon/poochyena/front.png | Bin 563 -> 0 bytes graphics/pokemon/porygon/front.png | Bin 490 -> 0 bytes graphics/pokemon/porygon2/front.png | Bin 480 -> 0 bytes graphics/pokemon/porygon_z/front.png | Bin 564 -> 0 bytes graphics/pokemon/primeape/front.png | Bin 823 -> 0 bytes graphics/pokemon/prinplup/front.png | Bin 665 -> 0 bytes graphics/pokemon/probopass/front.png | Bin 842 -> 0 bytes graphics/pokemon/psyduck/front.png | Bin 495 -> 0 bytes graphics/pokemon/pumpkaboo/front.png | Bin 586 -> 0 bytes graphics/pokemon/pumpkaboo/large/front.png | Bin 607 -> 0 bytes graphics/pokemon/pumpkaboo/small/front.png | Bin 554 -> 0 bytes graphics/pokemon/pumpkaboo/super/front.png | Bin 634 -> 0 bytes graphics/pokemon/pupitar/front.png | Bin 509 -> 0 bytes graphics/pokemon/purrloin/front.png | Bin 529 -> 0 bytes graphics/pokemon/purugly/front.png | Bin 942 -> 0 bytes graphics/pokemon/pyroar/front.png | Bin 1049 -> 0 bytes graphics/pokemon/quagsire/front.png | Bin 621 -> 0 bytes graphics/pokemon/question_mark/circled/front.png | Bin 397 -> 0 bytes graphics/pokemon/question_mark/double/front.png | Bin 306 -> 0 bytes graphics/pokemon/quilava/front.png | Bin 599 -> 0 bytes graphics/pokemon/quilladin/front.png | Bin 710 -> 0 bytes graphics/pokemon/qwilfish/front.png | Bin 537 -> 0 bytes graphics/pokemon/raichu/front.png | Bin 805 -> 0 bytes graphics/pokemon/raikou/front.png | Bin 968 -> 0 bytes graphics/pokemon/ralts/front.png | Bin 445 -> 0 bytes graphics/pokemon/rampardos/front.png | Bin 1006 -> 0 bytes graphics/pokemon/rapidash/front.png | Bin 1012 -> 0 bytes graphics/pokemon/raticate/front.png | Bin 718 -> 0 bytes graphics/pokemon/rattata/front.png | Bin 528 -> 0 bytes graphics/pokemon/rayquaza/front.png | Bin 1030 -> 0 bytes graphics/pokemon/regice/front.png | Bin 919 -> 0 bytes graphics/pokemon/regigigas/front.png | Bin 1198 -> 0 bytes graphics/pokemon/regirock/front.png | Bin 1049 -> 0 bytes graphics/pokemon/registeel/front.png | Bin 899 -> 0 bytes graphics/pokemon/relicanth/front.png | Bin 742 -> 0 bytes graphics/pokemon/remoraid/front.png | Bin 568 -> 0 bytes graphics/pokemon/reshiram/front.png | Bin 1053 -> 0 bytes graphics/pokemon/reuniclus/front.png | Bin 720 -> 0 bytes graphics/pokemon/rhydon/front.png | Bin 976 -> 0 bytes graphics/pokemon/rhyhorn/front.png | Bin 681 -> 0 bytes graphics/pokemon/rhyperior/front.png | Bin 1213 -> 0 bytes graphics/pokemon/riolu/front.png | Bin 537 -> 0 bytes graphics/pokemon/roggenrola/front.png | Bin 387 -> 0 bytes graphics/pokemon/roselia/front.png | Bin 680 -> 0 bytes graphics/pokemon/roserade/front.png | Bin 672 -> 0 bytes graphics/pokemon/rotom/fan/front.png | Bin 699 -> 0 bytes graphics/pokemon/rotom/front.png | Bin 457 -> 0 bytes graphics/pokemon/rotom/frost/front.png | Bin 691 -> 0 bytes graphics/pokemon/rotom/heat/front.png | Bin 644 -> 0 bytes graphics/pokemon/rotom/mow/front.png | Bin 672 -> 0 bytes graphics/pokemon/rotom/wash/front.png | Bin 756 -> 0 bytes graphics/pokemon/rufflet/front.png | Bin 608 -> 0 bytes graphics/pokemon/sableye/front.png | Bin 606 -> 0 bytes graphics/pokemon/salamence/front.png | Bin 1073 -> 0 bytes graphics/pokemon/samurott/front.png | Bin 992 -> 0 bytes graphics/pokemon/sandile/front.png | Bin 480 -> 0 bytes graphics/pokemon/sandshrew/front.png | Bin 582 -> 0 bytes graphics/pokemon/sandslash/front.png | Bin 792 -> 0 bytes graphics/pokemon/sawk/front.png | Bin 835 -> 0 bytes graphics/pokemon/sawsbuck/front.png | Bin 728 -> 0 bytes graphics/pokemon/scatterbug/front.png | Bin 428 -> 0 bytes graphics/pokemon/sceptile/front.png | Bin 936 -> 0 bytes graphics/pokemon/scizor/front.png | Bin 958 -> 0 bytes graphics/pokemon/scolipede/front.png | Bin 954 -> 0 bytes graphics/pokemon/scrafty/front.png | Bin 719 -> 0 bytes graphics/pokemon/scraggy/front.png | Bin 502 -> 0 bytes graphics/pokemon/scyther/front.png | Bin 758 -> 0 bytes graphics/pokemon/seadra/front.png | Bin 607 -> 0 bytes graphics/pokemon/seaking/front.png | Bin 883 -> 0 bytes graphics/pokemon/sealeo/front.png | Bin 717 -> 0 bytes graphics/pokemon/seedot/front.png | Bin 449 -> 0 bytes graphics/pokemon/seel/front.png | Bin 622 -> 0 bytes graphics/pokemon/seismitoad/front.png | Bin 977 -> 0 bytes graphics/pokemon/sentret/front.png | Bin 597 -> 0 bytes graphics/pokemon/serperior/front.png | Bin 902 -> 0 bytes graphics/pokemon/servine/front.png | Bin 562 -> 0 bytes graphics/pokemon/seviper/front.png | Bin 835 -> 0 bytes graphics/pokemon/sewaddle/front.png | Bin 482 -> 0 bytes graphics/pokemon/sharpedo/front.png | Bin 695 -> 0 bytes graphics/pokemon/shaymin/front.png | Bin 502 -> 0 bytes graphics/pokemon/shaymin/sky/front.png | Bin 722 -> 0 bytes graphics/pokemon/shedinja/front.png | Bin 668 -> 0 bytes graphics/pokemon/shelgon/front.png | Bin 627 -> 0 bytes graphics/pokemon/shellder/front.png | Bin 514 -> 0 bytes graphics/pokemon/shellos/east_sea/front.png | Bin 507 -> 0 bytes graphics/pokemon/shellos/front.png | Bin 469 -> 0 bytes graphics/pokemon/shelmet/front.png | Bin 537 -> 0 bytes graphics/pokemon/shieldon/front.png | Bin 502 -> 0 bytes graphics/pokemon/shiftry/front.png | Bin 918 -> 0 bytes graphics/pokemon/shinx/front.png | Bin 523 -> 0 bytes graphics/pokemon/shroomish/front.png | Bin 450 -> 0 bytes graphics/pokemon/shuckle/front.png | Bin 598 -> 0 bytes graphics/pokemon/shuppet/front.png | Bin 472 -> 0 bytes graphics/pokemon/sigilyph/front.png | Bin 905 -> 0 bytes graphics/pokemon/silcoon/front.png | Bin 533 -> 0 bytes graphics/pokemon/simipour/front.png | Bin 829 -> 0 bytes graphics/pokemon/simisage/front.png | Bin 922 -> 0 bytes graphics/pokemon/simisear/front.png | Bin 873 -> 0 bytes graphics/pokemon/skarmory/front.png | Bin 952 -> 0 bytes graphics/pokemon/skiddo/front.png | Bin 625 -> 0 bytes graphics/pokemon/skiploom/front.png | Bin 463 -> 0 bytes graphics/pokemon/skitty/front.png | Bin 607 -> 0 bytes graphics/pokemon/skorupi/front.png | Bin 664 -> 0 bytes graphics/pokemon/skrelp/front.png | Bin 563 -> 0 bytes graphics/pokemon/skuntank/front.png | Bin 838 -> 0 bytes graphics/pokemon/slaking/front.png | Bin 969 -> 0 bytes graphics/pokemon/slakoth/front.png | Bin 567 -> 0 bytes graphics/pokemon/sliggoo/front.png | Bin 568 -> 0 bytes graphics/pokemon/slowbro/front.png | Bin 894 -> 0 bytes graphics/pokemon/slowking/front.png | Bin 845 -> 0 bytes graphics/pokemon/slowpoke/front.png | Bin 534 -> 0 bytes graphics/pokemon/slugma/front.png | Bin 470 -> 0 bytes graphics/pokemon/slurpuff/front.png | Bin 620 -> 0 bytes graphics/pokemon/smeargle/front.png | Bin 717 -> 0 bytes graphics/pokemon/smoochum/front.png | Bin 483 -> 0 bytes graphics/pokemon/sneasel/front.png | Bin 677 -> 0 bytes graphics/pokemon/snivy/front.png | Bin 487 -> 0 bytes graphics/pokemon/snorlax/front.png | Bin 799 -> 0 bytes graphics/pokemon/snorunt/front.png | Bin 509 -> 0 bytes graphics/pokemon/snover/front.png | Bin 694 -> 0 bytes graphics/pokemon/snubbull/front.png | Bin 594 -> 0 bytes graphics/pokemon/solosis/front.png | Bin 413 -> 0 bytes graphics/pokemon/solrock/front.png | Bin 922 -> 0 bytes graphics/pokemon/spearow/front.png | Bin 561 -> 0 bytes graphics/pokemon/spewpa/front.png | Bin 497 -> 0 bytes graphics/pokemon/spheal/front.png | Bin 476 -> 0 bytes graphics/pokemon/spinarak/front.png | Bin 508 -> 0 bytes graphics/pokemon/spinda/front.png | Bin 624 -> 0 bytes graphics/pokemon/spiritomb/front.png | Bin 766 -> 0 bytes graphics/pokemon/spoink/front.png | Bin 486 -> 0 bytes graphics/pokemon/spritzee/front.png | Bin 549 -> 0 bytes graphics/pokemon/squirtle/front.png | Bin 528 -> 0 bytes graphics/pokemon/stantler/front.png | Bin 806 -> 0 bytes graphics/pokemon/staraptor/front.png | Bin 781 -> 0 bytes graphics/pokemon/staravia/front.png | Bin 590 -> 0 bytes graphics/pokemon/starly/front.png | Bin 532 -> 0 bytes graphics/pokemon/starmie/front.png | Bin 831 -> 0 bytes graphics/pokemon/staryu/front.png | Bin 588 -> 0 bytes graphics/pokemon/steelix/front.png | Bin 1016 -> 0 bytes graphics/pokemon/stoutland/front.png | Bin 1000 -> 0 bytes graphics/pokemon/stunfisk/front.png | Bin 586 -> 0 bytes graphics/pokemon/stunky/front.png | Bin 579 -> 0 bytes graphics/pokemon/sudowoodo/front.png | Bin 651 -> 0 bytes graphics/pokemon/suicune/front.png | Bin 1061 -> 0 bytes graphics/pokemon/sunflora/front.png | Bin 652 -> 0 bytes graphics/pokemon/sunkern/front.png | Bin 402 -> 0 bytes graphics/pokemon/surskit/front.png | Bin 428 -> 0 bytes graphics/pokemon/swablu/front.png | Bin 519 -> 0 bytes graphics/pokemon/swadloon/front.png | Bin 510 -> 0 bytes graphics/pokemon/swalot/front.png | Bin 696 -> 0 bytes graphics/pokemon/swampert/front.png | Bin 933 -> 0 bytes graphics/pokemon/swanna/front.png | Bin 673 -> 0 bytes graphics/pokemon/swellow/front.png | Bin 731 -> 0 bytes graphics/pokemon/swinub/front.png | Bin 370 -> 0 bytes graphics/pokemon/swirlix/front.png | Bin 534 -> 0 bytes graphics/pokemon/swoobat/front.png | Bin 889 -> 0 bytes graphics/pokemon/sylveon/front.png | Bin 769 -> 0 bytes graphics/pokemon/taillow/front.png | Bin 522 -> 0 bytes graphics/pokemon/talonflame/front.png | Bin 1002 -> 0 bytes graphics/pokemon/tangela/front.png | Bin 642 -> 0 bytes graphics/pokemon/tangrowth/front.png | Bin 967 -> 0 bytes graphics/pokemon/tapu_bulu/front.png | Bin 932 -> 0 bytes graphics/pokemon/tapu_fini/front.png | Bin 939 -> 0 bytes graphics/pokemon/tapu_koko/front.png | Bin 1101 -> 0 bytes graphics/pokemon/tapu_lele/front.png | Bin 845 -> 0 bytes graphics/pokemon/tauros/front.png | Bin 842 -> 0 bytes graphics/pokemon/teddiursa/front.png | Bin 508 -> 0 bytes graphics/pokemon/tentacool/front.png | Bin 634 -> 0 bytes graphics/pokemon/tentacruel/front.png | Bin 927 -> 0 bytes graphics/pokemon/tepig/front.png | Bin 487 -> 0 bytes graphics/pokemon/terrakion/front.png | Bin 960 -> 0 bytes graphics/pokemon/throh/front.png | Bin 793 -> 0 bytes graphics/pokemon/thundurus/front.png | Bin 1035 -> 0 bytes graphics/pokemon/thundurus/therian/front.png | Bin 1061 -> 0 bytes graphics/pokemon/timburr/front.png | Bin 576 -> 0 bytes graphics/pokemon/tirtouga/front.png | Bin 540 -> 0 bytes graphics/pokemon/togekiss/front.png | Bin 636 -> 0 bytes graphics/pokemon/togepi/front.png | Bin 421 -> 0 bytes graphics/pokemon/togetic/front.png | Bin 478 -> 0 bytes graphics/pokemon/torchic/front.png | Bin 464 -> 0 bytes graphics/pokemon/torkoal/front.png | Bin 1043 -> 0 bytes graphics/pokemon/tornadus/front.png | Bin 1004 -> 0 bytes graphics/pokemon/tornadus/therian/front.png | Bin 997 -> 0 bytes graphics/pokemon/torterra/front.png | Bin 1119 -> 0 bytes graphics/pokemon/totodile/front.png | Bin 538 -> 0 bytes graphics/pokemon/toxicroak/front.png | Bin 794 -> 0 bytes graphics/pokemon/tranquill/front.png | Bin 612 -> 0 bytes graphics/pokemon/trapinch/front.png | Bin 433 -> 0 bytes graphics/pokemon/treecko/front.png | Bin 607 -> 0 bytes graphics/pokemon/trevenant/front.png | Bin 969 -> 0 bytes graphics/pokemon/tropius/front.png | Bin 968 -> 0 bytes graphics/pokemon/trubbish/front.png | Bin 490 -> 0 bytes graphics/pokemon/turtwig/front.png | Bin 552 -> 0 bytes graphics/pokemon/tympole/front.png | Bin 449 -> 0 bytes graphics/pokemon/tynamo/front.png | Bin 353 -> 0 bytes graphics/pokemon/typhlosion/front.png | Bin 813 -> 0 bytes graphics/pokemon/tyranitar/front.png | Bin 874 -> 0 bytes graphics/pokemon/tyrantrum/front.png | Bin 1032 -> 0 bytes graphics/pokemon/tyrogue/front.png | Bin 537 -> 0 bytes graphics/pokemon/tyrunt/front.png | Bin 672 -> 0 bytes graphics/pokemon/umbreon/front.png | Bin 533 -> 0 bytes graphics/pokemon/unfezant/front.png | Bin 840 -> 0 bytes graphics/pokemon/unown/b/front.png | Bin 355 -> 0 bytes graphics/pokemon/unown/c/front.png | Bin 395 -> 0 bytes graphics/pokemon/unown/d/front.png | Bin 352 -> 0 bytes graphics/pokemon/unown/e/front.png | Bin 325 -> 0 bytes .../pokemon/unown/exclamation_mark/front.png | Bin 294 -> 0 bytes graphics/pokemon/unown/f/front.png | Bin 364 -> 0 bytes graphics/pokemon/unown/front.png | Bin 337 -> 0 bytes graphics/pokemon/unown/g/front.png | Bin 359 -> 0 bytes graphics/pokemon/unown/h/front.png | Bin 424 -> 0 bytes graphics/pokemon/unown/i/front.png | Bin 305 -> 0 bytes graphics/pokemon/unown/j/front.png | Bin 334 -> 0 bytes graphics/pokemon/unown/k/front.png | Bin 347 -> 0 bytes graphics/pokemon/unown/l/front.png | Bin 315 -> 0 bytes graphics/pokemon/unown/m/front.png | Bin 414 -> 0 bytes graphics/pokemon/unown/n/front.png | Bin 379 -> 0 bytes graphics/pokemon/unown/o/front.png | Bin 417 -> 0 bytes graphics/pokemon/unown/p/front.png | Bin 312 -> 0 bytes graphics/pokemon/unown/q/front.png | Bin 320 -> 0 bytes graphics/pokemon/unown/question_mark/front.png | Bin 332 -> 0 bytes graphics/pokemon/unown/r/front.png | Bin 313 -> 0 bytes graphics/pokemon/unown/s/front.png | Bin 363 -> 0 bytes graphics/pokemon/unown/t/front.png | Bin 316 -> 0 bytes graphics/pokemon/unown/u/front.png | Bin 391 -> 0 bytes graphics/pokemon/unown/v/front.png | Bin 349 -> 0 bytes graphics/pokemon/unown/w/front.png | Bin 355 -> 0 bytes graphics/pokemon/unown/x/front.png | Bin 337 -> 0 bytes graphics/pokemon/unown/y/front.png | Bin 347 -> 0 bytes graphics/pokemon/unown/z/front.png | Bin 324 -> 0 bytes graphics/pokemon/ursaring/front.png | Bin 918 -> 0 bytes graphics/pokemon/uxie/front.png | Bin 611 -> 0 bytes graphics/pokemon/vanillish/front.png | Bin 606 -> 0 bytes graphics/pokemon/vanillite/front.png | Bin 440 -> 0 bytes graphics/pokemon/vanilluxe/front.png | Bin 826 -> 0 bytes graphics/pokemon/vaporeon/front.png | Bin 695 -> 0 bytes graphics/pokemon/venipede/front.png | Bin 505 -> 0 bytes graphics/pokemon/venomoth/front.png | Bin 736 -> 0 bytes graphics/pokemon/venonat/front.png | Bin 610 -> 0 bytes graphics/pokemon/venusaur/front.png | Bin 1187 -> 0 bytes graphics/pokemon/vespiquen/front.png | Bin 809 -> 0 bytes graphics/pokemon/vibrava/front.png | Bin 679 -> 0 bytes graphics/pokemon/victini/front.png | Bin 552 -> 0 bytes graphics/pokemon/victreebel/front.png | Bin 801 -> 0 bytes graphics/pokemon/vigoroth/front.png | Bin 787 -> 0 bytes graphics/pokemon/vileplume/front.png | Bin 704 -> 0 bytes graphics/pokemon/virizion/front.png | Bin 745 -> 0 bytes graphics/pokemon/vivillon/archipelago/front.png | Bin 1025 -> 0 bytes graphics/pokemon/vivillon/continental/front.png | Bin 1004 -> 0 bytes graphics/pokemon/vivillon/elegant/front.png | Bin 1035 -> 0 bytes graphics/pokemon/vivillon/fancy/front.png | Bin 1080 -> 0 bytes graphics/pokemon/vivillon/front.png | Bin 953 -> 0 bytes graphics/pokemon/vivillon/garden/front.png | Bin 1010 -> 0 bytes graphics/pokemon/vivillon/high_plains/front.png | Bin 971 -> 0 bytes graphics/pokemon/vivillon/jungle/front.png | Bin 923 -> 0 bytes graphics/pokemon/vivillon/marine/front.png | Bin 996 -> 0 bytes graphics/pokemon/vivillon/meadow/front.png | Bin 1017 -> 0 bytes graphics/pokemon/vivillon/modern/front.png | Bin 1049 -> 0 bytes graphics/pokemon/vivillon/monsoon/front.png | Bin 909 -> 0 bytes graphics/pokemon/vivillon/ocean/front.png | Bin 1050 -> 0 bytes graphics/pokemon/vivillon/poke_ball/front.png | Bin 1029 -> 0 bytes graphics/pokemon/vivillon/polar/front.png | Bin 976 -> 0 bytes graphics/pokemon/vivillon/river/front.png | Bin 941 -> 0 bytes graphics/pokemon/vivillon/sandstorm/front.png | Bin 958 -> 0 bytes graphics/pokemon/vivillon/savanna/front.png | Bin 1025 -> 0 bytes graphics/pokemon/vivillon/sun/front.png | Bin 1019 -> 0 bytes graphics/pokemon/vivillon/tundra/front.png | Bin 947 -> 0 bytes graphics/pokemon/volbeat/front.png | Bin 746 -> 0 bytes graphics/pokemon/volcanion/front.png | Bin 1042 -> 0 bytes graphics/pokemon/volcarona/front.png | Bin 927 -> 0 bytes graphics/pokemon/voltorb/front.png | Bin 380 -> 0 bytes graphics/pokemon/vullaby/front.png | Bin 673 -> 0 bytes graphics/pokemon/vulpix/front.png | Bin 633 -> 0 bytes graphics/pokemon/wailmer/front.png | Bin 619 -> 0 bytes graphics/pokemon/wailord/front.png | Bin 776 -> 0 bytes graphics/pokemon/walrein/front.png | Bin 954 -> 0 bytes graphics/pokemon/wartortle/front.png | Bin 780 -> 0 bytes graphics/pokemon/watchog/front.png | Bin 668 -> 0 bytes graphics/pokemon/weavile/front.png | Bin 743 -> 0 bytes graphics/pokemon/weedle/front.png | Bin 451 -> 0 bytes graphics/pokemon/weepinbell/front.png | Bin 594 -> 0 bytes graphics/pokemon/weezing/front.png | Bin 934 -> 0 bytes graphics/pokemon/whimsicott/front.png | Bin 706 -> 0 bytes graphics/pokemon/whirlipede/front.png | Bin 671 -> 0 bytes graphics/pokemon/whiscash/front.png | Bin 815 -> 0 bytes graphics/pokemon/whismur/front.png | Bin 509 -> 0 bytes graphics/pokemon/wigglytuff/front.png | Bin 670 -> 0 bytes graphics/pokemon/wingull/front.png | Bin 468 -> 0 bytes graphics/pokemon/wobbuffet/front.png | Bin 653 -> 0 bytes graphics/pokemon/woobat/front.png | Bin 541 -> 0 bytes graphics/pokemon/wooper/front.png | Bin 475 -> 0 bytes graphics/pokemon/wormadam/front.png | Bin 561 -> 0 bytes graphics/pokemon/wormadam/sandy_cloak/front.png | Bin 586 -> 0 bytes graphics/pokemon/wormadam/trash_cloak/front.png | Bin 532 -> 0 bytes graphics/pokemon/wurmple/front.png | Bin 595 -> 0 bytes graphics/pokemon/wynaut/front.png | Bin 489 -> 0 bytes graphics/pokemon/xatu/front.png | Bin 589 -> 0 bytes graphics/pokemon/xerneas/active/front.png | Bin 931 -> 0 bytes graphics/pokemon/yamask/front.png | Bin 440 -> 0 bytes graphics/pokemon/yanma/front.png | Bin 681 -> 0 bytes graphics/pokemon/yanmega/front.png | Bin 779 -> 0 bytes graphics/pokemon/yveltal/front.png | Bin 1154 -> 0 bytes graphics/pokemon/zangoose/front.png | Bin 767 -> 0 bytes graphics/pokemon/zapdos/front.png | Bin 910 -> 0 bytes graphics/pokemon/zebstrika/front.png | Bin 864 -> 0 bytes graphics/pokemon/zekrom/front.png | Bin 1055 -> 0 bytes graphics/pokemon/zigzagoon/front.png | Bin 651 -> 0 bytes graphics/pokemon/zoroark/front.png | Bin 862 -> 0 bytes graphics/pokemon/zorua/front.png | Bin 547 -> 0 bytes graphics/pokemon/zubat/front.png | Bin 557 -> 0 bytes graphics/pokemon/zweilous/front.png | Bin 778 -> 0 bytes graphics/pokemon/zygarde/10_percent/front.png | Bin 776 -> 0 bytes graphics/pokemon/zygarde/complete/front.png | Bin 1259 -> 0 bytes graphics/pokemon/zygarde/front.png | Bin 1030 -> 0 bytes 816 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 graphics/pokemon/abomasnow/front.png delete mode 100644 graphics/pokemon/abra/front.png delete mode 100644 graphics/pokemon/absol/front.png delete mode 100644 graphics/pokemon/accelgor/front.png delete mode 100644 graphics/pokemon/aegislash/blade/front.png delete mode 100644 graphics/pokemon/aegislash/front.png delete mode 100644 graphics/pokemon/aerodactyl/front.png delete mode 100644 graphics/pokemon/aggron/front.png delete mode 100644 graphics/pokemon/aipom/front.png delete mode 100644 graphics/pokemon/alakazam/front.png delete mode 100644 graphics/pokemon/alomomola/front.png delete mode 100644 graphics/pokemon/altaria/front.png delete mode 100644 graphics/pokemon/amaura/front.png delete mode 100644 graphics/pokemon/ambipom/front.png delete mode 100644 graphics/pokemon/amoonguss/front.png delete mode 100644 graphics/pokemon/ampharos/front.png delete mode 100644 graphics/pokemon/anorith/front.png delete mode 100644 graphics/pokemon/arbok/front.png delete mode 100644 graphics/pokemon/arcanine/front.png delete mode 100644 graphics/pokemon/arceus/front.png delete mode 100644 graphics/pokemon/archen/front.png delete mode 100644 graphics/pokemon/archeops/front.png delete mode 100644 graphics/pokemon/ariados/front.png delete mode 100644 graphics/pokemon/armaldo/front.png delete mode 100644 graphics/pokemon/aromatisse/front.png delete mode 100644 graphics/pokemon/aron/front.png delete mode 100644 graphics/pokemon/articuno/front.png delete mode 100644 graphics/pokemon/audino/front.png delete mode 100644 graphics/pokemon/aurorus/front.png delete mode 100644 graphics/pokemon/avalugg/front.png delete mode 100644 graphics/pokemon/axew/front.png delete mode 100644 graphics/pokemon/azelf/front.png delete mode 100644 graphics/pokemon/azumarill/front.png delete mode 100644 graphics/pokemon/azurill/front.png delete mode 100644 graphics/pokemon/bagon/front.png delete mode 100644 graphics/pokemon/baltoy/front.png delete mode 100644 graphics/pokemon/banette/front.png delete mode 100644 graphics/pokemon/barbaracle/front.png delete mode 100644 graphics/pokemon/barboach/front.png delete mode 100644 graphics/pokemon/basculin/front.png delete mode 100644 graphics/pokemon/bastiodon/front.png delete mode 100644 graphics/pokemon/bayleef/front.png delete mode 100644 graphics/pokemon/beartic/front.png delete mode 100644 graphics/pokemon/beautifly/front.png delete mode 100644 graphics/pokemon/beedrill/front.png delete mode 100644 graphics/pokemon/beheeyem/front.png delete mode 100644 graphics/pokemon/beldum/front.png delete mode 100644 graphics/pokemon/bellossom/front.png delete mode 100644 graphics/pokemon/bellsprout/front.png delete mode 100644 graphics/pokemon/bergmite/front.png delete mode 100644 graphics/pokemon/bibarel/front.png delete mode 100644 graphics/pokemon/bidoof/front.png delete mode 100644 graphics/pokemon/binacle/front.png delete mode 100644 graphics/pokemon/bisharp/front.png delete mode 100644 graphics/pokemon/blastoise/front.png delete mode 100644 graphics/pokemon/blaziken/front.png delete mode 100644 graphics/pokemon/blissey/front.png delete mode 100644 graphics/pokemon/blitzle/front.png delete mode 100644 graphics/pokemon/boldore/front.png delete mode 100644 graphics/pokemon/bonsly/front.png delete mode 100644 graphics/pokemon/bouffalant/front.png delete mode 100644 graphics/pokemon/braixen/front.png delete mode 100644 graphics/pokemon/braviary/front.png delete mode 100644 graphics/pokemon/breloom/front.png delete mode 100644 graphics/pokemon/bronzong/front.png delete mode 100644 graphics/pokemon/bronzor/front.png delete mode 100644 graphics/pokemon/budew/front.png delete mode 100644 graphics/pokemon/buizel/front.png delete mode 100644 graphics/pokemon/bulbasaur/front.png delete mode 100644 graphics/pokemon/buneary/front.png delete mode 100644 graphics/pokemon/bunnelby/front.png delete mode 100644 graphics/pokemon/burmy/front.png delete mode 100644 graphics/pokemon/burmy/sandy_cloak/front.png delete mode 100644 graphics/pokemon/burmy/trash_cloak/front.png delete mode 100644 graphics/pokemon/butterfree/front.png delete mode 100644 graphics/pokemon/cacnea/front.png delete mode 100644 graphics/pokemon/cacturne/front.png delete mode 100644 graphics/pokemon/camerupt/front.png delete mode 100644 graphics/pokemon/carbink/front.png delete mode 100644 graphics/pokemon/carnivine/front.png delete mode 100644 graphics/pokemon/carracosta/front.png delete mode 100644 graphics/pokemon/carvanha/front.png delete mode 100644 graphics/pokemon/cascoon/front.png delete mode 100644 graphics/pokemon/caterpie/front.png delete mode 100644 graphics/pokemon/celebi/front.png delete mode 100644 graphics/pokemon/chandelure/front.png delete mode 100644 graphics/pokemon/chansey/front.png delete mode 100644 graphics/pokemon/charizard/front.png delete mode 100644 graphics/pokemon/charmander/front.png delete mode 100644 graphics/pokemon/charmeleon/front.png delete mode 100644 graphics/pokemon/chatot/front.png delete mode 100644 graphics/pokemon/cherubi/front.png delete mode 100644 graphics/pokemon/chesnaught/front.png delete mode 100644 graphics/pokemon/chespin/front.png delete mode 100644 graphics/pokemon/chikorita/front.png delete mode 100644 graphics/pokemon/chimchar/front.png delete mode 100644 graphics/pokemon/chimecho/front.png delete mode 100644 graphics/pokemon/chinchou/front.png delete mode 100644 graphics/pokemon/chingling/front.png delete mode 100644 graphics/pokemon/cinccino/front.png delete mode 100644 graphics/pokemon/clamperl/front.png delete mode 100644 graphics/pokemon/clauncher/front.png delete mode 100644 graphics/pokemon/clawitzer/front.png delete mode 100644 graphics/pokemon/claydol/front.png delete mode 100644 graphics/pokemon/clefable/front.png delete mode 100644 graphics/pokemon/clefairy/front.png delete mode 100644 graphics/pokemon/cleffa/front.png delete mode 100644 graphics/pokemon/cloyster/front.png delete mode 100644 graphics/pokemon/cobalion/front.png delete mode 100644 graphics/pokemon/cofagrigus/front.png delete mode 100644 graphics/pokemon/combee/front.png delete mode 100644 graphics/pokemon/combusken/front.png delete mode 100644 graphics/pokemon/conkeldurr/front.png delete mode 100644 graphics/pokemon/corphish/front.png delete mode 100644 graphics/pokemon/corsola/front.png delete mode 100644 graphics/pokemon/cottonee/front.png delete mode 100644 graphics/pokemon/cradily/front.png delete mode 100644 graphics/pokemon/cranidos/front.png delete mode 100644 graphics/pokemon/crawdaunt/front.png delete mode 100644 graphics/pokemon/cresselia/front.png delete mode 100644 graphics/pokemon/croagunk/front.png delete mode 100644 graphics/pokemon/crobat/front.png delete mode 100644 graphics/pokemon/croconaw/front.png delete mode 100644 graphics/pokemon/crustle/front.png delete mode 100644 graphics/pokemon/cryogonal/front.png delete mode 100644 graphics/pokemon/cubchoo/front.png delete mode 100644 graphics/pokemon/cubone/front.png delete mode 100644 graphics/pokemon/cyndaquil/front.png delete mode 100644 graphics/pokemon/darkrai/front.png delete mode 100644 graphics/pokemon/darmanitan/front.png delete mode 100644 graphics/pokemon/darmanitan/zen_mode/front.png delete mode 100644 graphics/pokemon/darumaka/front.png delete mode 100644 graphics/pokemon/dedenne/front.png delete mode 100644 graphics/pokemon/deerling/front.png delete mode 100644 graphics/pokemon/deino/front.png delete mode 100644 graphics/pokemon/delcatty/front.png delete mode 100644 graphics/pokemon/delibird/front.png delete mode 100644 graphics/pokemon/delphox/front.png delete mode 100644 graphics/pokemon/deoxys/attack/front.png delete mode 100644 graphics/pokemon/deoxys/defense/front.png delete mode 100644 graphics/pokemon/deoxys/front.png delete mode 100644 graphics/pokemon/deoxys/speed/front.png delete mode 100644 graphics/pokemon/dewgong/front.png delete mode 100644 graphics/pokemon/dewott/front.png delete mode 100644 graphics/pokemon/dialga/front.png delete mode 100644 graphics/pokemon/diancie/front.png delete mode 100644 graphics/pokemon/diggersby/front.png delete mode 100644 graphics/pokemon/diglett/front.png delete mode 100644 graphics/pokemon/ditto/front.png delete mode 100644 graphics/pokemon/dodrio/front.png delete mode 100644 graphics/pokemon/doduo/front.png delete mode 100644 graphics/pokemon/donphan/front.png delete mode 100644 graphics/pokemon/doublade/front.png delete mode 100644 graphics/pokemon/dragalge/front.png delete mode 100644 graphics/pokemon/dragonair/front.png delete mode 100644 graphics/pokemon/dragonite/front.png delete mode 100644 graphics/pokemon/drapion/front.png delete mode 100644 graphics/pokemon/dratini/front.png delete mode 100644 graphics/pokemon/drifblim/front.png delete mode 100644 graphics/pokemon/drifloon/front.png delete mode 100644 graphics/pokemon/drilbur/front.png delete mode 100644 graphics/pokemon/drowzee/front.png delete mode 100644 graphics/pokemon/druddigon/front.png delete mode 100644 graphics/pokemon/ducklett/front.png delete mode 100644 graphics/pokemon/dugtrio/front.png delete mode 100644 graphics/pokemon/dunsparce/front.png delete mode 100644 graphics/pokemon/duosion/front.png delete mode 100644 graphics/pokemon/durant/front.png delete mode 100644 graphics/pokemon/dusclops/front.png delete mode 100644 graphics/pokemon/dusknoir/front.png delete mode 100644 graphics/pokemon/duskull/front.png delete mode 100644 graphics/pokemon/dustox/front.png delete mode 100644 graphics/pokemon/dwebble/front.png delete mode 100644 graphics/pokemon/eelektrik/front.png delete mode 100644 graphics/pokemon/eelektross/front.png delete mode 100644 graphics/pokemon/eevee/front.png delete mode 100644 graphics/pokemon/egg/front.png delete mode 100644 graphics/pokemon/ekans/front.png delete mode 100644 graphics/pokemon/electabuzz/front.png delete mode 100644 graphics/pokemon/electivire/front.png delete mode 100644 graphics/pokemon/electrike/front.png delete mode 100644 graphics/pokemon/electrode/front.png delete mode 100644 graphics/pokemon/elekid/front.png delete mode 100644 graphics/pokemon/elgyem/front.png delete mode 100644 graphics/pokemon/emboar/front.png delete mode 100644 graphics/pokemon/emolga/front.png delete mode 100644 graphics/pokemon/empoleon/front.png delete mode 100644 graphics/pokemon/entei/front.png delete mode 100644 graphics/pokemon/escavalier/front.png delete mode 100644 graphics/pokemon/espeon/front.png delete mode 100644 graphics/pokemon/espurr/front.png delete mode 100644 graphics/pokemon/excadrill/front.png delete mode 100644 graphics/pokemon/exeggcute/front.png delete mode 100644 graphics/pokemon/exeggutor/front.png delete mode 100644 graphics/pokemon/exploud/front.png delete mode 100644 graphics/pokemon/farfetchd/front.png delete mode 100644 graphics/pokemon/fearow/front.png delete mode 100644 graphics/pokemon/feebas/front.png delete mode 100644 graphics/pokemon/fennekin/front.png delete mode 100644 graphics/pokemon/feraligatr/front.png delete mode 100644 graphics/pokemon/ferroseed/front.png delete mode 100644 graphics/pokemon/ferrothorn/front.png delete mode 100644 graphics/pokemon/finneon/front.png delete mode 100644 graphics/pokemon/flaaffy/front.png delete mode 100644 graphics/pokemon/flabebe/front.png delete mode 100644 graphics/pokemon/flareon/front.png delete mode 100644 graphics/pokemon/fletchinder/front.png delete mode 100644 graphics/pokemon/fletchling/front.png delete mode 100644 graphics/pokemon/floatzel/front.png delete mode 100644 graphics/pokemon/floette/front.png delete mode 100644 graphics/pokemon/florges/front.png delete mode 100644 graphics/pokemon/flygon/front.png delete mode 100644 graphics/pokemon/foongus/front.png delete mode 100644 graphics/pokemon/forretress/front.png delete mode 100644 graphics/pokemon/fraxure/front.png delete mode 100644 graphics/pokemon/frillish/front.png delete mode 100644 graphics/pokemon/froakie/front.png delete mode 100644 graphics/pokemon/frogadier/front.png delete mode 100644 graphics/pokemon/froslass/front.png delete mode 100644 graphics/pokemon/furfrou/dandy_trim/front.png delete mode 100644 graphics/pokemon/furfrou/debutante_trim/front.png delete mode 100644 graphics/pokemon/furfrou/diamond_trim/front.png delete mode 100644 graphics/pokemon/furfrou/front.png delete mode 100644 graphics/pokemon/furfrou/heart_trim/front.png delete mode 100644 graphics/pokemon/furfrou/kabuki_trim/front.png delete mode 100644 graphics/pokemon/furfrou/la_reine_trim/front.png delete mode 100644 graphics/pokemon/furfrou/matron_trim/front.png delete mode 100644 graphics/pokemon/furfrou/pharaoh_trim/front.png delete mode 100644 graphics/pokemon/furfrou/star_trim/front.png delete mode 100644 graphics/pokemon/furret/front.png delete mode 100644 graphics/pokemon/gabite/front.png delete mode 100644 graphics/pokemon/gallade/front.png delete mode 100644 graphics/pokemon/galvantula/front.png delete mode 100644 graphics/pokemon/garbodor/front.png delete mode 100644 graphics/pokemon/garchomp/front.png delete mode 100644 graphics/pokemon/gardevoir/front.png delete mode 100644 graphics/pokemon/gastly/front.png delete mode 100644 graphics/pokemon/gastrodon/east_sea/front.png delete mode 100644 graphics/pokemon/gastrodon/front.png delete mode 100644 graphics/pokemon/genesect/front.png delete mode 100644 graphics/pokemon/gengar/front.png delete mode 100644 graphics/pokemon/geodude/front.png delete mode 100644 graphics/pokemon/gible/front.png delete mode 100644 graphics/pokemon/gigalith/front.png delete mode 100644 graphics/pokemon/girafarig/front.png delete mode 100644 graphics/pokemon/giratina/front.png delete mode 100644 graphics/pokemon/giratina/origin/front.png delete mode 100644 graphics/pokemon/glaceon/front.png delete mode 100644 graphics/pokemon/glalie/front.png delete mode 100644 graphics/pokemon/glameow/front.png delete mode 100644 graphics/pokemon/gligar/front.png delete mode 100644 graphics/pokemon/gliscor/front.png delete mode 100644 graphics/pokemon/gloom/front.png delete mode 100644 graphics/pokemon/gogoat/front.png delete mode 100644 graphics/pokemon/golbat/front.png delete mode 100644 graphics/pokemon/goldeen/front.png delete mode 100644 graphics/pokemon/golduck/front.png delete mode 100644 graphics/pokemon/golem/front.png delete mode 100644 graphics/pokemon/golett/front.png delete mode 100644 graphics/pokemon/golurk/front.png delete mode 100644 graphics/pokemon/goodra/front.png delete mode 100644 graphics/pokemon/goomy/front.png delete mode 100644 graphics/pokemon/gorebyss/front.png delete mode 100644 graphics/pokemon/gothita/front.png delete mode 100644 graphics/pokemon/gothitelle/front.png delete mode 100644 graphics/pokemon/gothorita/front.png delete mode 100644 graphics/pokemon/gourgeist/front.png delete mode 100644 graphics/pokemon/gourgeist/large/front.png delete mode 100644 graphics/pokemon/gourgeist/small/front.png delete mode 100644 graphics/pokemon/gourgeist/super/front.png delete mode 100644 graphics/pokemon/granbull/front.png delete mode 100644 graphics/pokemon/graveler/front.png delete mode 100644 graphics/pokemon/greninja/ash/front.png delete mode 100644 graphics/pokemon/greninja/front.png delete mode 100644 graphics/pokemon/grimer/front.png delete mode 100644 graphics/pokemon/grotle/front.png delete mode 100644 graphics/pokemon/groudon/front.png delete mode 100644 graphics/pokemon/grovyle/front.png delete mode 100644 graphics/pokemon/growlithe/front.png delete mode 100644 graphics/pokemon/grumpig/front.png delete mode 100644 graphics/pokemon/gulpin/front.png delete mode 100644 graphics/pokemon/gurdurr/front.png delete mode 100644 graphics/pokemon/gyarados/front.png delete mode 100644 graphics/pokemon/happiny/front.png delete mode 100644 graphics/pokemon/hariyama/front.png delete mode 100644 graphics/pokemon/haunter/front.png delete mode 100644 graphics/pokemon/hawlucha/front.png delete mode 100644 graphics/pokemon/haxorus/front.png delete mode 100644 graphics/pokemon/heatmor/front.png delete mode 100644 graphics/pokemon/heatran/front.png delete mode 100644 graphics/pokemon/heliolisk/front.png delete mode 100644 graphics/pokemon/helioptile/front.png delete mode 100644 graphics/pokemon/heracross/front.png delete mode 100644 graphics/pokemon/herdier/front.png delete mode 100644 graphics/pokemon/hippopotas/front.png delete mode 100644 graphics/pokemon/hippowdon/front.png delete mode 100644 graphics/pokemon/hitmonchan/front.png delete mode 100644 graphics/pokemon/hitmonlee/front.png delete mode 100644 graphics/pokemon/hitmontop/front.png delete mode 100644 graphics/pokemon/ho_oh/front.png delete mode 100644 graphics/pokemon/honchkrow/front.png delete mode 100644 graphics/pokemon/honedge/front.png delete mode 100644 graphics/pokemon/hoopa/front.png delete mode 100644 graphics/pokemon/hoopa/unbound/front.png delete mode 100644 graphics/pokemon/hoothoot/front.png delete mode 100644 graphics/pokemon/hoppip/front.png delete mode 100644 graphics/pokemon/horsea/front.png delete mode 100644 graphics/pokemon/houndoom/front.png delete mode 100644 graphics/pokemon/houndour/front.png delete mode 100644 graphics/pokemon/huntail/front.png delete mode 100644 graphics/pokemon/hydreigon/front.png delete mode 100644 graphics/pokemon/hypno/front.png delete mode 100644 graphics/pokemon/igglybuff/front.png delete mode 100644 graphics/pokemon/illumise/front.png delete mode 100644 graphics/pokemon/infernape/front.png delete mode 100644 graphics/pokemon/inkay/front.png delete mode 100644 graphics/pokemon/ivysaur/front.png delete mode 100644 graphics/pokemon/jellicent/front.png delete mode 100644 graphics/pokemon/jigglypuff/front.png delete mode 100644 graphics/pokemon/jirachi/front.png delete mode 100644 graphics/pokemon/jolteon/front.png delete mode 100644 graphics/pokemon/joltik/front.png delete mode 100644 graphics/pokemon/jumpluff/front.png delete mode 100644 graphics/pokemon/jynx/front.png delete mode 100644 graphics/pokemon/kabuto/front.png delete mode 100644 graphics/pokemon/kabutops/front.png delete mode 100644 graphics/pokemon/kadabra/front.png delete mode 100644 graphics/pokemon/kakuna/front.png delete mode 100644 graphics/pokemon/kangaskhan/front.png delete mode 100644 graphics/pokemon/karrablast/front.png delete mode 100644 graphics/pokemon/kecleon/front.png delete mode 100644 graphics/pokemon/keldeo/front.png delete mode 100644 graphics/pokemon/kingdra/front.png delete mode 100644 graphics/pokemon/kingler/front.png delete mode 100644 graphics/pokemon/kirlia/front.png delete mode 100644 graphics/pokemon/klang/front.png delete mode 100644 graphics/pokemon/klefki/front.png delete mode 100644 graphics/pokemon/klink/front.png delete mode 100644 graphics/pokemon/klinklang/front.png delete mode 100644 graphics/pokemon/koffing/front.png delete mode 100644 graphics/pokemon/krabby/front.png delete mode 100644 graphics/pokemon/kricketot/front.png delete mode 100644 graphics/pokemon/kricketune/front.png delete mode 100644 graphics/pokemon/krokorok/front.png delete mode 100644 graphics/pokemon/krookodile/front.png delete mode 100644 graphics/pokemon/kyogre/front.png delete mode 100644 graphics/pokemon/kyurem/black/front.png delete mode 100644 graphics/pokemon/kyurem/front.png delete mode 100644 graphics/pokemon/kyurem/white/front.png delete mode 100644 graphics/pokemon/lairon/front.png delete mode 100644 graphics/pokemon/lampent/front.png delete mode 100644 graphics/pokemon/landorus/front.png delete mode 100644 graphics/pokemon/landorus/therian/front.png delete mode 100644 graphics/pokemon/lanturn/front.png delete mode 100644 graphics/pokemon/lapras/front.png delete mode 100644 graphics/pokemon/larvesta/front.png delete mode 100644 graphics/pokemon/larvitar/front.png delete mode 100644 graphics/pokemon/latias/front.png delete mode 100644 graphics/pokemon/latios/front.png delete mode 100644 graphics/pokemon/leafeon/front.png delete mode 100644 graphics/pokemon/leavanny/front.png delete mode 100644 graphics/pokemon/ledian/front.png delete mode 100644 graphics/pokemon/ledyba/front.png delete mode 100644 graphics/pokemon/lickilicky/front.png delete mode 100644 graphics/pokemon/lickitung/front.png delete mode 100644 graphics/pokemon/liepard/front.png delete mode 100644 graphics/pokemon/lileep/front.png delete mode 100644 graphics/pokemon/lilligant/front.png delete mode 100644 graphics/pokemon/lillipup/front.png delete mode 100644 graphics/pokemon/linoone/front.png delete mode 100644 graphics/pokemon/litleo/front.png delete mode 100644 graphics/pokemon/litwick/front.png delete mode 100644 graphics/pokemon/lombre/front.png delete mode 100644 graphics/pokemon/lopunny/front.png delete mode 100644 graphics/pokemon/lotad/front.png delete mode 100644 graphics/pokemon/loudred/front.png delete mode 100644 graphics/pokemon/lucario/front.png delete mode 100644 graphics/pokemon/ludicolo/front.png delete mode 100644 graphics/pokemon/lugia/front.png delete mode 100644 graphics/pokemon/lumineon/front.png delete mode 100644 graphics/pokemon/lunatone/front.png delete mode 100644 graphics/pokemon/luvdisc/front.png delete mode 100644 graphics/pokemon/luxio/front.png delete mode 100644 graphics/pokemon/luxray/front.png delete mode 100644 graphics/pokemon/machamp/front.png delete mode 100644 graphics/pokemon/machoke/front.png delete mode 100644 graphics/pokemon/machop/front.png delete mode 100644 graphics/pokemon/magby/front.png delete mode 100644 graphics/pokemon/magcargo/front.png delete mode 100644 graphics/pokemon/magikarp/front.png delete mode 100644 graphics/pokemon/magmar/front.png delete mode 100644 graphics/pokemon/magmortar/front.png delete mode 100644 graphics/pokemon/magnemite/front.png delete mode 100644 graphics/pokemon/magneton/front.png delete mode 100644 graphics/pokemon/magnezone/front.png delete mode 100644 graphics/pokemon/makuhita/front.png delete mode 100644 graphics/pokemon/malamar/front.png delete mode 100644 graphics/pokemon/mamoswine/front.png delete mode 100644 graphics/pokemon/manaphy/front.png delete mode 100644 graphics/pokemon/mandibuzz/front.png delete mode 100644 graphics/pokemon/manectric/front.png delete mode 100644 graphics/pokemon/mankey/front.png delete mode 100644 graphics/pokemon/mantine/front.png delete mode 100644 graphics/pokemon/mantyke/front.png delete mode 100644 graphics/pokemon/maractus/front.png delete mode 100644 graphics/pokemon/mareep/front.png delete mode 100644 graphics/pokemon/marill/front.png delete mode 100644 graphics/pokemon/marowak/front.png delete mode 100644 graphics/pokemon/marshadow/front.png delete mode 100644 graphics/pokemon/marshtomp/front.png delete mode 100644 graphics/pokemon/masquerain/front.png delete mode 100644 graphics/pokemon/mawile/front.png delete mode 100644 graphics/pokemon/medicham/front.png delete mode 100644 graphics/pokemon/meditite/front.png delete mode 100644 graphics/pokemon/meganium/front.png delete mode 100644 graphics/pokemon/meloetta/front.png delete mode 100644 graphics/pokemon/meowstic/female/front.png delete mode 100644 graphics/pokemon/meowstic/front.png delete mode 100644 graphics/pokemon/meowth/front.png delete mode 100644 graphics/pokemon/mesprit/front.png delete mode 100644 graphics/pokemon/metagross/front.png delete mode 100644 graphics/pokemon/metang/front.png delete mode 100644 graphics/pokemon/metapod/front.png delete mode 100644 graphics/pokemon/mew/front.png delete mode 100644 graphics/pokemon/mewtwo/front.png delete mode 100644 graphics/pokemon/mienfoo/front.png delete mode 100644 graphics/pokemon/mienshao/front.png delete mode 100644 graphics/pokemon/mightyena/front.png delete mode 100644 graphics/pokemon/milotic/front.png delete mode 100644 graphics/pokemon/miltank/front.png delete mode 100644 graphics/pokemon/mime_jr/front.png delete mode 100644 graphics/pokemon/minccino/front.png delete mode 100644 graphics/pokemon/minun/front.png delete mode 100644 graphics/pokemon/misdreavus/front.png delete mode 100644 graphics/pokemon/mismagius/front.png delete mode 100644 graphics/pokemon/moltres/front.png delete mode 100644 graphics/pokemon/monferno/front.png delete mode 100644 graphics/pokemon/mothim/front.png delete mode 100644 graphics/pokemon/mr_mime/front.png delete mode 100644 graphics/pokemon/mudkip/front.png delete mode 100644 graphics/pokemon/muk/front.png delete mode 100644 graphics/pokemon/munchlax/front.png delete mode 100644 graphics/pokemon/munna/front.png delete mode 100644 graphics/pokemon/murkrow/front.png delete mode 100644 graphics/pokemon/musharna/front.png delete mode 100644 graphics/pokemon/natu/front.png delete mode 100644 graphics/pokemon/nidoking/front.png delete mode 100644 graphics/pokemon/nidoqueen/front.png delete mode 100644 graphics/pokemon/nidoran_f/front.png delete mode 100644 graphics/pokemon/nidoran_m/front.png delete mode 100644 graphics/pokemon/nidorina/front.png delete mode 100644 graphics/pokemon/nidorino/front.png delete mode 100644 graphics/pokemon/nincada/front.png delete mode 100644 graphics/pokemon/ninetales/front.png delete mode 100644 graphics/pokemon/ninjask/front.png delete mode 100644 graphics/pokemon/noctowl/front.png delete mode 100644 graphics/pokemon/noibat/front.png delete mode 100644 graphics/pokemon/noivern/front.png delete mode 100644 graphics/pokemon/nosepass/front.png delete mode 100644 graphics/pokemon/numel/front.png delete mode 100644 graphics/pokemon/nuzleaf/front.png delete mode 100644 graphics/pokemon/octillery/front.png delete mode 100644 graphics/pokemon/oddish/front.png delete mode 100644 graphics/pokemon/omanyte/front.png delete mode 100644 graphics/pokemon/omastar/front.png delete mode 100644 graphics/pokemon/onix/front.png delete mode 100644 graphics/pokemon/oshawott/front.png delete mode 100644 graphics/pokemon/pachirisu/front.png delete mode 100644 graphics/pokemon/palkia/front.png delete mode 100644 graphics/pokemon/palpitoad/front.png delete mode 100644 graphics/pokemon/pancham/front.png delete mode 100644 graphics/pokemon/pangoro/front.png delete mode 100644 graphics/pokemon/panpour/front.png delete mode 100644 graphics/pokemon/pansage/front.png delete mode 100644 graphics/pokemon/pansear/front.png delete mode 100644 graphics/pokemon/paras/front.png delete mode 100644 graphics/pokemon/parasect/front.png delete mode 100644 graphics/pokemon/patrat/front.png delete mode 100644 graphics/pokemon/pawniard/front.png delete mode 100644 graphics/pokemon/pelipper/front.png delete mode 100644 graphics/pokemon/persian/front.png delete mode 100644 graphics/pokemon/petilil/front.png delete mode 100644 graphics/pokemon/phanpy/front.png delete mode 100644 graphics/pokemon/phantump/front.png delete mode 100644 graphics/pokemon/phione/front.png delete mode 100644 graphics/pokemon/pichu/front.png delete mode 100644 graphics/pokemon/pidgeot/front.png delete mode 100644 graphics/pokemon/pidgeotto/front.png delete mode 100644 graphics/pokemon/pidgey/front.png delete mode 100644 graphics/pokemon/pidove/front.png delete mode 100644 graphics/pokemon/pignite/front.png delete mode 100644 graphics/pokemon/pikachu/front.png delete mode 100644 graphics/pokemon/piloswine/front.png delete mode 100644 graphics/pokemon/pineco/front.png delete mode 100644 graphics/pokemon/pinsir/front.png delete mode 100644 graphics/pokemon/piplup/front.png delete mode 100644 graphics/pokemon/plusle/front.png delete mode 100644 graphics/pokemon/politoed/front.png delete mode 100644 graphics/pokemon/poliwag/front.png delete mode 100644 graphics/pokemon/poliwhirl/front.png delete mode 100644 graphics/pokemon/poliwrath/front.png delete mode 100644 graphics/pokemon/ponyta/front.png delete mode 100644 graphics/pokemon/poochyena/front.png delete mode 100644 graphics/pokemon/porygon/front.png delete mode 100644 graphics/pokemon/porygon2/front.png delete mode 100644 graphics/pokemon/porygon_z/front.png delete mode 100644 graphics/pokemon/primeape/front.png delete mode 100644 graphics/pokemon/prinplup/front.png delete mode 100644 graphics/pokemon/probopass/front.png delete mode 100644 graphics/pokemon/psyduck/front.png delete mode 100644 graphics/pokemon/pumpkaboo/front.png delete mode 100644 graphics/pokemon/pumpkaboo/large/front.png delete mode 100644 graphics/pokemon/pumpkaboo/small/front.png delete mode 100644 graphics/pokemon/pumpkaboo/super/front.png delete mode 100644 graphics/pokemon/pupitar/front.png delete mode 100644 graphics/pokemon/purrloin/front.png delete mode 100644 graphics/pokemon/purugly/front.png delete mode 100644 graphics/pokemon/pyroar/front.png delete mode 100644 graphics/pokemon/quagsire/front.png delete mode 100644 graphics/pokemon/question_mark/circled/front.png delete mode 100644 graphics/pokemon/question_mark/double/front.png delete mode 100644 graphics/pokemon/quilava/front.png delete mode 100644 graphics/pokemon/quilladin/front.png delete mode 100644 graphics/pokemon/qwilfish/front.png delete mode 100644 graphics/pokemon/raichu/front.png delete mode 100644 graphics/pokemon/raikou/front.png delete mode 100644 graphics/pokemon/ralts/front.png delete mode 100644 graphics/pokemon/rampardos/front.png delete mode 100644 graphics/pokemon/rapidash/front.png delete mode 100644 graphics/pokemon/raticate/front.png delete mode 100644 graphics/pokemon/rattata/front.png delete mode 100644 graphics/pokemon/rayquaza/front.png delete mode 100644 graphics/pokemon/regice/front.png delete mode 100644 graphics/pokemon/regigigas/front.png delete mode 100644 graphics/pokemon/regirock/front.png delete mode 100644 graphics/pokemon/registeel/front.png delete mode 100644 graphics/pokemon/relicanth/front.png delete mode 100644 graphics/pokemon/remoraid/front.png delete mode 100644 graphics/pokemon/reshiram/front.png delete mode 100644 graphics/pokemon/reuniclus/front.png delete mode 100644 graphics/pokemon/rhydon/front.png delete mode 100644 graphics/pokemon/rhyhorn/front.png delete mode 100644 graphics/pokemon/rhyperior/front.png delete mode 100644 graphics/pokemon/riolu/front.png delete mode 100644 graphics/pokemon/roggenrola/front.png delete mode 100644 graphics/pokemon/roselia/front.png delete mode 100644 graphics/pokemon/roserade/front.png delete mode 100644 graphics/pokemon/rotom/fan/front.png delete mode 100644 graphics/pokemon/rotom/front.png delete mode 100644 graphics/pokemon/rotom/frost/front.png delete mode 100644 graphics/pokemon/rotom/heat/front.png delete mode 100644 graphics/pokemon/rotom/mow/front.png delete mode 100644 graphics/pokemon/rotom/wash/front.png delete mode 100644 graphics/pokemon/rufflet/front.png delete mode 100644 graphics/pokemon/sableye/front.png delete mode 100644 graphics/pokemon/salamence/front.png delete mode 100644 graphics/pokemon/samurott/front.png delete mode 100644 graphics/pokemon/sandile/front.png delete mode 100644 graphics/pokemon/sandshrew/front.png delete mode 100644 graphics/pokemon/sandslash/front.png delete mode 100644 graphics/pokemon/sawk/front.png delete mode 100644 graphics/pokemon/sawsbuck/front.png delete mode 100644 graphics/pokemon/scatterbug/front.png delete mode 100644 graphics/pokemon/sceptile/front.png delete mode 100644 graphics/pokemon/scizor/front.png delete mode 100644 graphics/pokemon/scolipede/front.png delete mode 100644 graphics/pokemon/scrafty/front.png delete mode 100644 graphics/pokemon/scraggy/front.png delete mode 100644 graphics/pokemon/scyther/front.png delete mode 100644 graphics/pokemon/seadra/front.png delete mode 100644 graphics/pokemon/seaking/front.png delete mode 100644 graphics/pokemon/sealeo/front.png delete mode 100644 graphics/pokemon/seedot/front.png delete mode 100644 graphics/pokemon/seel/front.png delete mode 100644 graphics/pokemon/seismitoad/front.png delete mode 100644 graphics/pokemon/sentret/front.png delete mode 100644 graphics/pokemon/serperior/front.png delete mode 100644 graphics/pokemon/servine/front.png delete mode 100644 graphics/pokemon/seviper/front.png delete mode 100644 graphics/pokemon/sewaddle/front.png delete mode 100644 graphics/pokemon/sharpedo/front.png delete mode 100644 graphics/pokemon/shaymin/front.png delete mode 100644 graphics/pokemon/shaymin/sky/front.png delete mode 100644 graphics/pokemon/shedinja/front.png delete mode 100644 graphics/pokemon/shelgon/front.png delete mode 100644 graphics/pokemon/shellder/front.png delete mode 100644 graphics/pokemon/shellos/east_sea/front.png delete mode 100644 graphics/pokemon/shellos/front.png delete mode 100644 graphics/pokemon/shelmet/front.png delete mode 100644 graphics/pokemon/shieldon/front.png delete mode 100644 graphics/pokemon/shiftry/front.png delete mode 100644 graphics/pokemon/shinx/front.png delete mode 100644 graphics/pokemon/shroomish/front.png delete mode 100644 graphics/pokemon/shuckle/front.png delete mode 100644 graphics/pokemon/shuppet/front.png delete mode 100644 graphics/pokemon/sigilyph/front.png delete mode 100644 graphics/pokemon/silcoon/front.png delete mode 100644 graphics/pokemon/simipour/front.png delete mode 100644 graphics/pokemon/simisage/front.png delete mode 100644 graphics/pokemon/simisear/front.png delete mode 100644 graphics/pokemon/skarmory/front.png delete mode 100644 graphics/pokemon/skiddo/front.png delete mode 100644 graphics/pokemon/skiploom/front.png delete mode 100644 graphics/pokemon/skitty/front.png delete mode 100644 graphics/pokemon/skorupi/front.png delete mode 100644 graphics/pokemon/skrelp/front.png delete mode 100644 graphics/pokemon/skuntank/front.png delete mode 100644 graphics/pokemon/slaking/front.png delete mode 100644 graphics/pokemon/slakoth/front.png delete mode 100644 graphics/pokemon/sliggoo/front.png delete mode 100644 graphics/pokemon/slowbro/front.png delete mode 100644 graphics/pokemon/slowking/front.png delete mode 100644 graphics/pokemon/slowpoke/front.png delete mode 100644 graphics/pokemon/slugma/front.png delete mode 100644 graphics/pokemon/slurpuff/front.png delete mode 100644 graphics/pokemon/smeargle/front.png delete mode 100644 graphics/pokemon/smoochum/front.png delete mode 100644 graphics/pokemon/sneasel/front.png delete mode 100644 graphics/pokemon/snivy/front.png delete mode 100644 graphics/pokemon/snorlax/front.png delete mode 100644 graphics/pokemon/snorunt/front.png delete mode 100644 graphics/pokemon/snover/front.png delete mode 100644 graphics/pokemon/snubbull/front.png delete mode 100644 graphics/pokemon/solosis/front.png delete mode 100644 graphics/pokemon/solrock/front.png delete mode 100644 graphics/pokemon/spearow/front.png delete mode 100644 graphics/pokemon/spewpa/front.png delete mode 100644 graphics/pokemon/spheal/front.png delete mode 100644 graphics/pokemon/spinarak/front.png delete mode 100644 graphics/pokemon/spinda/front.png delete mode 100644 graphics/pokemon/spiritomb/front.png delete mode 100644 graphics/pokemon/spoink/front.png delete mode 100644 graphics/pokemon/spritzee/front.png delete mode 100644 graphics/pokemon/squirtle/front.png delete mode 100644 graphics/pokemon/stantler/front.png delete mode 100644 graphics/pokemon/staraptor/front.png delete mode 100644 graphics/pokemon/staravia/front.png delete mode 100644 graphics/pokemon/starly/front.png delete mode 100644 graphics/pokemon/starmie/front.png delete mode 100644 graphics/pokemon/staryu/front.png delete mode 100644 graphics/pokemon/steelix/front.png delete mode 100644 graphics/pokemon/stoutland/front.png delete mode 100644 graphics/pokemon/stunfisk/front.png delete mode 100644 graphics/pokemon/stunky/front.png delete mode 100644 graphics/pokemon/sudowoodo/front.png delete mode 100644 graphics/pokemon/suicune/front.png delete mode 100644 graphics/pokemon/sunflora/front.png delete mode 100644 graphics/pokemon/sunkern/front.png delete mode 100644 graphics/pokemon/surskit/front.png delete mode 100644 graphics/pokemon/swablu/front.png delete mode 100644 graphics/pokemon/swadloon/front.png delete mode 100644 graphics/pokemon/swalot/front.png delete mode 100644 graphics/pokemon/swampert/front.png delete mode 100644 graphics/pokemon/swanna/front.png delete mode 100644 graphics/pokemon/swellow/front.png delete mode 100644 graphics/pokemon/swinub/front.png delete mode 100644 graphics/pokemon/swirlix/front.png delete mode 100644 graphics/pokemon/swoobat/front.png delete mode 100644 graphics/pokemon/sylveon/front.png delete mode 100644 graphics/pokemon/taillow/front.png delete mode 100644 graphics/pokemon/talonflame/front.png delete mode 100644 graphics/pokemon/tangela/front.png delete mode 100644 graphics/pokemon/tangrowth/front.png delete mode 100644 graphics/pokemon/tapu_bulu/front.png delete mode 100644 graphics/pokemon/tapu_fini/front.png delete mode 100644 graphics/pokemon/tapu_koko/front.png delete mode 100644 graphics/pokemon/tapu_lele/front.png delete mode 100644 graphics/pokemon/tauros/front.png delete mode 100644 graphics/pokemon/teddiursa/front.png delete mode 100644 graphics/pokemon/tentacool/front.png delete mode 100644 graphics/pokemon/tentacruel/front.png delete mode 100644 graphics/pokemon/tepig/front.png delete mode 100644 graphics/pokemon/terrakion/front.png delete mode 100644 graphics/pokemon/throh/front.png delete mode 100644 graphics/pokemon/thundurus/front.png delete mode 100644 graphics/pokemon/thundurus/therian/front.png delete mode 100644 graphics/pokemon/timburr/front.png delete mode 100644 graphics/pokemon/tirtouga/front.png delete mode 100644 graphics/pokemon/togekiss/front.png delete mode 100644 graphics/pokemon/togepi/front.png delete mode 100644 graphics/pokemon/togetic/front.png delete mode 100644 graphics/pokemon/torchic/front.png delete mode 100644 graphics/pokemon/torkoal/front.png delete mode 100644 graphics/pokemon/tornadus/front.png delete mode 100644 graphics/pokemon/tornadus/therian/front.png delete mode 100644 graphics/pokemon/torterra/front.png delete mode 100644 graphics/pokemon/totodile/front.png delete mode 100644 graphics/pokemon/toxicroak/front.png delete mode 100644 graphics/pokemon/tranquill/front.png delete mode 100644 graphics/pokemon/trapinch/front.png delete mode 100644 graphics/pokemon/treecko/front.png delete mode 100644 graphics/pokemon/trevenant/front.png delete mode 100644 graphics/pokemon/tropius/front.png delete mode 100644 graphics/pokemon/trubbish/front.png delete mode 100644 graphics/pokemon/turtwig/front.png delete mode 100644 graphics/pokemon/tympole/front.png delete mode 100644 graphics/pokemon/tynamo/front.png delete mode 100644 graphics/pokemon/typhlosion/front.png delete mode 100644 graphics/pokemon/tyranitar/front.png delete mode 100644 graphics/pokemon/tyrantrum/front.png delete mode 100644 graphics/pokemon/tyrogue/front.png delete mode 100644 graphics/pokemon/tyrunt/front.png delete mode 100644 graphics/pokemon/umbreon/front.png delete mode 100644 graphics/pokemon/unfezant/front.png delete mode 100644 graphics/pokemon/unown/b/front.png delete mode 100644 graphics/pokemon/unown/c/front.png delete mode 100644 graphics/pokemon/unown/d/front.png delete mode 100644 graphics/pokemon/unown/e/front.png delete mode 100644 graphics/pokemon/unown/exclamation_mark/front.png delete mode 100644 graphics/pokemon/unown/f/front.png delete mode 100644 graphics/pokemon/unown/front.png delete mode 100644 graphics/pokemon/unown/g/front.png delete mode 100644 graphics/pokemon/unown/h/front.png delete mode 100644 graphics/pokemon/unown/i/front.png delete mode 100644 graphics/pokemon/unown/j/front.png delete mode 100644 graphics/pokemon/unown/k/front.png delete mode 100644 graphics/pokemon/unown/l/front.png delete mode 100644 graphics/pokemon/unown/m/front.png delete mode 100644 graphics/pokemon/unown/n/front.png delete mode 100644 graphics/pokemon/unown/o/front.png delete mode 100644 graphics/pokemon/unown/p/front.png delete mode 100644 graphics/pokemon/unown/q/front.png delete mode 100644 graphics/pokemon/unown/question_mark/front.png delete mode 100644 graphics/pokemon/unown/r/front.png delete mode 100644 graphics/pokemon/unown/s/front.png delete mode 100644 graphics/pokemon/unown/t/front.png delete mode 100644 graphics/pokemon/unown/u/front.png delete mode 100644 graphics/pokemon/unown/v/front.png delete mode 100644 graphics/pokemon/unown/w/front.png delete mode 100644 graphics/pokemon/unown/x/front.png delete mode 100644 graphics/pokemon/unown/y/front.png delete mode 100644 graphics/pokemon/unown/z/front.png delete mode 100644 graphics/pokemon/ursaring/front.png delete mode 100644 graphics/pokemon/uxie/front.png delete mode 100644 graphics/pokemon/vanillish/front.png delete mode 100644 graphics/pokemon/vanillite/front.png delete mode 100644 graphics/pokemon/vanilluxe/front.png delete mode 100644 graphics/pokemon/vaporeon/front.png delete mode 100644 graphics/pokemon/venipede/front.png delete mode 100644 graphics/pokemon/venomoth/front.png delete mode 100644 graphics/pokemon/venonat/front.png delete mode 100644 graphics/pokemon/venusaur/front.png delete mode 100644 graphics/pokemon/vespiquen/front.png delete mode 100644 graphics/pokemon/vibrava/front.png delete mode 100644 graphics/pokemon/victini/front.png delete mode 100644 graphics/pokemon/victreebel/front.png delete mode 100644 graphics/pokemon/vigoroth/front.png delete mode 100644 graphics/pokemon/vileplume/front.png delete mode 100644 graphics/pokemon/virizion/front.png delete mode 100644 graphics/pokemon/vivillon/archipelago/front.png delete mode 100644 graphics/pokemon/vivillon/continental/front.png delete mode 100644 graphics/pokemon/vivillon/elegant/front.png delete mode 100644 graphics/pokemon/vivillon/fancy/front.png delete mode 100644 graphics/pokemon/vivillon/front.png delete mode 100644 graphics/pokemon/vivillon/garden/front.png delete mode 100644 graphics/pokemon/vivillon/high_plains/front.png delete mode 100644 graphics/pokemon/vivillon/jungle/front.png delete mode 100644 graphics/pokemon/vivillon/marine/front.png delete mode 100644 graphics/pokemon/vivillon/meadow/front.png delete mode 100644 graphics/pokemon/vivillon/modern/front.png delete mode 100644 graphics/pokemon/vivillon/monsoon/front.png delete mode 100644 graphics/pokemon/vivillon/ocean/front.png delete mode 100644 graphics/pokemon/vivillon/poke_ball/front.png delete mode 100644 graphics/pokemon/vivillon/polar/front.png delete mode 100644 graphics/pokemon/vivillon/river/front.png delete mode 100644 graphics/pokemon/vivillon/sandstorm/front.png delete mode 100644 graphics/pokemon/vivillon/savanna/front.png delete mode 100644 graphics/pokemon/vivillon/sun/front.png delete mode 100644 graphics/pokemon/vivillon/tundra/front.png delete mode 100644 graphics/pokemon/volbeat/front.png delete mode 100644 graphics/pokemon/volcanion/front.png delete mode 100644 graphics/pokemon/volcarona/front.png delete mode 100644 graphics/pokemon/voltorb/front.png delete mode 100644 graphics/pokemon/vullaby/front.png delete mode 100644 graphics/pokemon/vulpix/front.png delete mode 100644 graphics/pokemon/wailmer/front.png delete mode 100644 graphics/pokemon/wailord/front.png delete mode 100644 graphics/pokemon/walrein/front.png delete mode 100644 graphics/pokemon/wartortle/front.png delete mode 100644 graphics/pokemon/watchog/front.png delete mode 100644 graphics/pokemon/weavile/front.png delete mode 100644 graphics/pokemon/weedle/front.png delete mode 100644 graphics/pokemon/weepinbell/front.png delete mode 100644 graphics/pokemon/weezing/front.png delete mode 100644 graphics/pokemon/whimsicott/front.png delete mode 100644 graphics/pokemon/whirlipede/front.png delete mode 100644 graphics/pokemon/whiscash/front.png delete mode 100644 graphics/pokemon/whismur/front.png delete mode 100644 graphics/pokemon/wigglytuff/front.png delete mode 100644 graphics/pokemon/wingull/front.png delete mode 100644 graphics/pokemon/wobbuffet/front.png delete mode 100644 graphics/pokemon/woobat/front.png delete mode 100644 graphics/pokemon/wooper/front.png delete mode 100644 graphics/pokemon/wormadam/front.png delete mode 100644 graphics/pokemon/wormadam/sandy_cloak/front.png delete mode 100644 graphics/pokemon/wormadam/trash_cloak/front.png delete mode 100644 graphics/pokemon/wurmple/front.png delete mode 100644 graphics/pokemon/wynaut/front.png delete mode 100644 graphics/pokemon/xatu/front.png delete mode 100644 graphics/pokemon/xerneas/active/front.png delete mode 100644 graphics/pokemon/yamask/front.png delete mode 100644 graphics/pokemon/yanma/front.png delete mode 100644 graphics/pokemon/yanmega/front.png delete mode 100644 graphics/pokemon/yveltal/front.png delete mode 100644 graphics/pokemon/zangoose/front.png delete mode 100644 graphics/pokemon/zapdos/front.png delete mode 100644 graphics/pokemon/zebstrika/front.png delete mode 100644 graphics/pokemon/zekrom/front.png delete mode 100644 graphics/pokemon/zigzagoon/front.png delete mode 100644 graphics/pokemon/zoroark/front.png delete mode 100644 graphics/pokemon/zorua/front.png delete mode 100644 graphics/pokemon/zubat/front.png delete mode 100644 graphics/pokemon/zweilous/front.png delete mode 100644 graphics/pokemon/zygarde/10_percent/front.png delete mode 100644 graphics/pokemon/zygarde/complete/front.png delete mode 100644 graphics/pokemon/zygarde/front.png diff --git a/graphics/pokemon/abomasnow/front.png b/graphics/pokemon/abomasnow/front.png deleted file mode 100644 index eec72b6476714d1e0606024f2a509c454a32b482..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1055 zcmV+)1mOFLP)9o#F_PvKqI(3uc+H zNi2dMfE6fXS9wH0>Wi!c1cl%SvJ`88x1Wj7fLIz}5(EJOjLd(*x`B6(luf0zv`=Tr zjF>s(`_qFe-aUSM0M!FJ%N|G?c>H%=eEItAL1DyBz^nrp!sF||*KePm6jo+iZ~}zR zCc*pr&#<|F!YYXdz`{s6R{8#kGX3+PJi(|_kAP{7U>8yhqrU2Z&;r&<uwNS}b}}CU39fY?jqyO} zipyb=8jw(Q0EH?bmU0*)=DU)#2Ln*3YgLUxI4sZ09atX)>|u}bs0{j;Wev&#YL7cv zjT}&n^EDOEB(bB0*EB%Rgb$u%O!wCUbzM?NFq$msviQ*n0BMg=m!_Z*J(if?Kc<}X zW09!S01eH8FSxzl-vb7s$#*k9^}YWA$OFzjSER!fUY_hPbrN&eb&n2M12@6Zej8}u z&UH`EU%LCZJ)qQ0@X7#O@DqSR(8XvPx|N8#J68xdIsw7}dUzFGd&Kr`lml*s2<)&E zE5uc+0q@kX3j!{?3!;HHZ98{|?}&>(^fq$b8X$GsmXGF|eIUSnL)y0eK*8N##$)d= zT^2gHTQqf2IopWRN#z49hdZSiym-9{>Mi9ai-MMr+ zemc&9MkDol9XazeF$S1O`Lgq>W#RF3oC8&5&ii~gqy2oGgbow+FgbbdT|HdOp8@P7 Z{s%K!sBYKLaJv8i002ovPDHLkV1ip1;79-f diff --git a/graphics/pokemon/abra/front.png b/graphics/pokemon/abra/front.png deleted file mode 100644 index 0880fbb48e8abee9b1f5371d6cb5c0da7731d493..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 635 zcmV->0)+jEP)Px#Fi=cXMVQc_SU3oHU>N`ADOx!Q&AlM@_N1tY7_5US5D*Z9VhGT%P_Uqw00000 z0000003H!9f&c&k`AI}UR9J=WR?%|9FbE5_2`2mh|DA-BwAs>b9iI&mxdJO9ffT8=w)B2dDnpAX9&?JIR*PLD3h+8-394y*1n@n9pAKL|pK}5z z;jn*C3IKr~2vld!5lm8#1d=7NBVM&637(Hof*~gXCny`<^%_C-1K#ok>H{ApcsdJk zF*1QSwJWV?vS+~DTdodQ5omyUCfvREG)3#~DBziJUpgYk(12OM0C4kV;kPBlKu~MW z$Ks9eAWBJqapqJ`WCKMyk!}Y0I0~@oLL3AwI;t&F{)abv?l>F)NgSnABy#x&37hA! z1UE{lK_HKYkoO!|DNp#dmn_bqYfI_dq83|^>caZvji95Vv30=X^C^X~Uu1X{t3?7L zu|EdOkT67@FtFvY7_aeJ1Pb`I*3E_b#Bkz-(6qRBVzp9?ufs{l{kUuR>ix`1QfOF* zRaDd91O^O#QkU zm5xz&F2M_Hb}tsr65mDxCv>KDl zahLE8CqSWX_!k7z?^eNb{^%YA>wl%1xf`~^_d(zR&)+RX$|~{_oXBgiJMQ>Ud;`Bc V5mG14{Br;R002ovPDHLkV1n`m6GH$1 diff --git a/graphics/pokemon/absol/front.png b/graphics/pokemon/absol/front.png deleted file mode 100644 index 0026dd2744c458f2bada1dacfaeaaae48c600665..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 903 zcmV;219<$2P)Px#1ZP1_K>z@;j|==^1poj5Fi=cXMVQc_Fi3D1AUJ4vut->d5D*Z6kg)jp_*h_g zsIcJ3;P`krIM6si;E0d_000000C3OUCIA2c32;bRa{vGi!vFvd!vV){sAK>D0^mtR zK~zY`&6K}y(?Ar*uaS(hUeX8wOXDO+MJ(yLVovK0l^9%t3#^dm7`z9a!PjNppMu9gD(k{UINqTjp?iD4q3Ngvjxh9bT;ry($r^G@u9 zR!qV6rc#WWMppo84p=Dyek5s8skSE#YW7(v$^nK6P+9`YPTTC$XQ6)(1Bymzg-BMg z=jw|Pn1j(nL}}5?Y&0G+F;G9u0jx93Q=!?>+4^}mSD$nMzzj>FR5E_@>6faOK3*VT z_sANcc>eNGfBt)W4F2@WD|(-^?RVcXrnjhWgAd}nE3SqafQz!GAF@^m^lZ6liwHt& zYr4)VHrN1Ttk_^x!o76QkLr5MMj(J-y6kEap(9+Xw>XS_2)H#{_9QX0YxX&Z03!tW zsTjl0Bx#sfW$=B>079bQ%~s09MuKlI0Dv5z2+@x`3t+ej2x9*v2N3ft27*Xrl3z8` zO#oiR-#nniz&Nms7${_bu?dqf1>Z9WeoWV>W<;=v3t$uiPM78Zcn@9#C@^uH-YS4` zZA^b00mW+vEeCM8o}jp8gx$*lU%*$O6IgH;0z|R0fIIhz&Hd3#EC#;gthA#j<_6)! z8r_P~TEG>3H5B&DWE{N}0EhA%SHbd9Ky{wJHDm#Cfsd9odL55rfp$x8((U0ChcLvs zf>%upRN5_`07~;Q3M3ElPAEp3lVpLn9>Giogcr#!6DVspyE8)qGE0HCV0|wgkm#Pd zSuJ9f*A7y_x)9$$y659)C#k={j-h^BT?OQX3e8=p9`W1-lbTZE{8fYS%>cTT2KkE_ dIA~~qz*t~_xVXsp`1k+-00000u>SKj0006s zNkl7$U_)=bLBYB^#%Fe2mrj9UB3aCh-dGz zF2vGi@sa$6c$f$a&|d<47W6auejZrC8omm0fyeW}kNXXXX8;Gzr|d7+6mbb-a4o>M zHAQ#;_s#;Wo}wy(JBH2_1G(J;QM3^TfDRxP?mt(beu4o!7`Jqdm^Ur%-H90jc*|gj z*ccE{4FND}J!eTkdIEf)&h@c@(Hn>UlL5Rr+>Nef?K@Dd4(#f^d1~JP5>qo=rKg8> zF5H0deQI%w7$iEAMn4*`4NdsvH-~tnFx6UORb1V}E~qS6EU*fxY8 z@t3(uZ|lxIPJcq(igD#czx*i{su_**P-~5G6T<~(?oE-bcVR)cgG5(VG$H0@nX2Sz zqKj>#=d)u`xSee14 zk+&_KDYei#MluMiZ`qXz2m?BVs{KBl8iobuvP3Ju0#31l&I5LO!v9_q!R7$IZS#{2>=UMCj-CM0!S`{%^<-I_! P00000NkvXXu0mjfHoh}U diff --git a/graphics/pokemon/aegislash/blade/front.png b/graphics/pokemon/aegislash/blade/front.png deleted file mode 100644 index 288bdf5eb07bb229b95896e4759cf4ed60d100a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 914 zcmV;D18w|?P)Px#1ZP1_K>z@;j|==^1poj5Fi=cXMVQc_NH{R);D8Vi5cv4`kbqFIpjapD0_#ac zK~zY`rPaT0+CUTsa3c>{W2Z8U6A8CKM=KX%N}UdoI&@8%4&59p7j-OF^HRy4GQ@0M zs?ssaP^nwj4wWnhmSaF2Sh%6e7|DM_-}wg+FfhamhWq$^-`&9>&0m|+>Z|nhvEa#C zV3@0cx(3LH>%i+ZKs`Eg9|synbv4*q14?g?YVVeJsYtSsfYOp3Q#a*mm7bZBx}=C& zkqIFUv$Sk2)UCZk!#F0p%fPPs3;{jctt|yrjG*qRTMXoV$7f|Klg4?Tb{WPAgZ=5Y9AZ7X}yI2 z@zVOGC@p+;17I#B3zct9P7r|4dH+F3UJ=3ZZxeXLIUmD=0y&`W?FQ#VMHz6uxsZ^8 z0H0PXiq3~K2{Yiw7$7n#MrC_iVlpWKf)P%ktr~{I|IW7{fW=3^eL$dYkIe#LZ;yfz z9~vS=DF7}Xjs{rcq7GEgGqA@Qpq4Sjw*n4>MbHwUjum_x=Nc3M%^s_U&LG0Y;1Fb8 zS~K7P7g1-d7mPu)QUnac)gx;(f}jsUF)&;U1^|BFW9c44x0CJFPt6vfE=GZQdImm+ z;Wsm1r{SqVfrHN&vsnf%uP?82;EolgJisr5&dSOZK*vm%fx29yWn80n9ojWzOUfc3 zOo2w-fkp!{1KbR%_Y&{|w|4^Q!B7CdZ`7!kf#x+_CIBZvsXbOK2L2Y_I%x}16BAN! zLn(Dx)MI_N?@+2wK$wD-0MyodzTeZR=CCwDYIbv=(WFElz}Bde7m&NnP8fc{n>YcE z-3P)n9M1~KVe=~NUQNKxT|^keMal}Kpeewge+jt9@d(HBGhzZHB7hSUiP#bAP0o-h zNHTU}tc>U7^rxGGP6nJfoPx#1ZP1_K>z@;j|==^1poj5Fi=cXMVQc_NH{R);D8Vi5cv4`kbqFIpjapD0?SE6 zK~zY`rIj&j+dve@Wp2nCDMf)06@0BtN5wCW;?(XC=+HGS9lFUP7rHeS?JaT_E$VCv z_879c-=IUmWbh&nMuV2zP%?BV=ri=41c@bE@{n7E^?rW;_x|s6rxe$=QoU-=9t%9# z2vD;c&^7?%bQAD;1E8IqIgbO{v{4NlZUAcU&YJJbt5g+2Q=nEdF>RYP8tmLuw2~xR zod7`Ftd)78?Hry``W9McKudd$06T9rOMwPTFsJXV2gs3aeQt7qCaec6*WoXM3+^(@ zT^9%L!k6!Fe(*L}9M%YM*CcHO+z%$P_^L?y?&Zhvg?o*(<(ex3GV96L=4Jaj%eNws zVz^Gs`-DXSWy=f0c@`;%WC^w|Lmr0vd^zVmAphqrX50(+!%xbph=u&tROOsc)!SKC zH8%?>JZ(1&<3(SUDKPF9s&uE+n|Yx|>-#q{UTA~xuBLn6{?1#rUcZs?qT4Xl>IjGf zoz~}8K|qd|Oesom(V~ck@IQ)(L#768Y= zG7xlibOCTHa9c+J0N>?+o^}z29G#pWF(VoW!7@Og6ZBM^)C^}4-mC$FA@q#F%o76~ zSFESN7#^G;NFNA}E_kzq#|s3803$yK^kOdq27I7KBdOpo84&=)UOW)qoC|#HjB+K& ztrqyZT!_dKLU1lRW7*~s&_Q1A$0H_&n3%_kNb1q;SO;vnNm%M-82^y-E2|OcI^hNm2p) z{==Ro|0=E=NYv!6yacI{BzMXNp!!aGRh>Yl*l_PE#R?VWKaZa^mB7k;-~a#s07*qo IM6N<$f{(d>WdHyG diff --git a/graphics/pokemon/aerodactyl/front.png b/graphics/pokemon/aerodactyl/front.png deleted file mode 100644 index 36181a6c2647821628baa8a187460d60ceb4522b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 905 zcmV;419tq0P)Px#Fi=cXMVQc_b7F%*F=D;F-kgi9b5fL)V$H0B-VhKF`1tt9$jC8sDT5$E%{fZu zi=0R}P+abmL;wH-2T4RhR9J=WmfMn}FbqVoY(Ow1|Npt$EnzT3BxL4wwNqP_m_E_n zblsmVrSvy|-hB%Jh{5$MAS@JeC?mTuJeAz&uN;sp?B?W7{~BP2D9G_R zbH3bs&lX2+h?3{Rt5DisW|y@g-_D!~}DII~Q|*UMh@0JkFk%5Zny_#r2bo zjU4qwtGX983t~W^aCMpzM^`*CTLyM@pzL^Gh!7z2&ujn&Azlr3;d`~MJTnpfNjCcG zfYeF-eYsS3_E0T=UE1b?k*qsE$dNw+jKbem_9Fho^@aMkauxvDvlfIHMbe`F_K@%C z=>iaVR+nXAs~EszGXFp6JKveQJOF?T=>+)bfD`c8LPH9;g==B%IN$_@{$T_H_PMwR z=-4F7~4X8)~|;jMAnkC*SI@}PbZb0Agyalb%p6%O7+QktI6 z<+)58W^T6@AnR~>x%{3x)h5je>KT2&a_lLv=H{&p^IzZ0E`S{{&8WdNbM}wx$@Ffk zlC)%zX>*ezbVWyIC(FTs(gHjli$>a;RIPVv#{APZoU#%2?0G_xHh?`epN2MG2ON`c zNzv{|@Z@qCr8D5P2`R^4gOqJq%9<+sf91Ybo|z=~r6cNedhLY!h2BTcv9#f=>RSBu zlU@Lv5q_@})g!OL-I3Zf(gNiEOjeDct91V)7cbG5fJ2|+J+-@d|GOrLFPRmfhqnLT fh`PSm{#*ACzvCQxV@xm!00000NkvXXu0mjfS3#;J diff --git a/graphics/pokemon/aggron/front.png b/graphics/pokemon/aggron/front.png deleted file mode 100644 index 0d59202cac6fe3b5e7960ab4637955b5c40884a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1131 zcmV-x1eE)UP)NU=R=x`1tt9$jG3esHmu@Xu$Z0h=^!tXi!i{pfEt-P*A|g$N&HU0yY6Z00009 za7bBm000ie000ie0hKEb8vpZS9P)qXc9uA;j7few^TB^19a-%;&uSJ%YXO1XBokdJG^U zV|)f%z;ByQYJtExp9LJ=@R0c}WWbn5=SL!@AyH{T;ryQ(NfNTjr1M z4sz|1gU+9vhxsLi$i{Qo22RPIzTE;=#O+ud02ho;-V!i>lF~*djbV&d{h>Mq;7*tpG6PS80!c0!_7%YXTZE zx->;0=-~0)Q&`|es;Cr7y}CHHQwC_>JwHE%q%l^ba^3`7JB6+>KR^FR8X;Elp`1&I zb-NNc%%2~V0?bB9Q7+KvgHpNr27c$H(I{Andt=Pucw@+tA~!~ZR6=fKyXEGygSLWb zU^JIXNjYe((An29$pk=vvQ*VZRdx;=F4lkdPkm64D9iamQ7PdU7$kWEFxs#&0dxp} zxB?|-ufW;jgH~Tyyaj}knnWlyEcP+Z?lX$cP;UW=gNnkm009O~m}?;WJ!+OxwWNLx z;fjiYVXg(xL7h;~B{qS@m~t#~5X-WxP>%7}O@+FVrsjx2k-KvOmZ;(|i7P}j`>CSV z0BLed0zPUb8Fe3YB$j61@xJZ4TQ17-4+21QFxn>7UN9`@|CV#Af(ozE#1`1~y!Lc9 z8odCT94PBT@9MBsvmQkRlvS)$WjjYc7N%d0KHW2_YW*!po2Sr>_S|n__`cm0V1FVymLxecA7&2G(?m) zQV$GFI!dm@!TQlM(Ckv}=;JC@6wodV3|Pab5i0-y002ovPDHLkV1lRt2P6Oh diff --git a/graphics/pokemon/aipom/front.png b/graphics/pokemon/aipom/front.png deleted file mode 100644 index 227584fcba5155b39b249447cd50654ddb926ee1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 628 zcmV-)0*n2LP)%N6(~`Jp=R)^mx5VcL$UBwd}>HlmRTqyo1T|;>EppOTCvDPadoT z;xzvB8S(OX!4bW6AKXrSbcA?*zBtL>b}Rsd@t3cNAC4C%+qMcO;$S&Je74jb9@>0> z+xo|3@=xXEFA!&E@FcR!)!&&q4rA; z+$=vOffddGGMtkESOY`+Mgntfnq!*k5a9dB{M^(hf!`9XfNh~~igDZHaZ`s}v_uHi z(gy2Vo|nJmlGFTWKwA%iqQ?PHRoC=N);?l!-4I}Q0`Yl6z^Vp{hJ;@Ly)qkBksF@| zhFF$`o>ydn3`e7~Y*^c2k>>By49OBKWq4+=hEuS7W-!_}Pe{`k?D`2sdW+0xHSPx#Fi=cXMVQc_a99Zc?kUy15D*X$|MskdVhB<(2-UPww1X*FSXlV@_^`03*x1-$ zU|3Kv2=q0UPXGV|B1uF+R9J=Gm)n}_AP9wnk~m51`@im9EHH=Gw3(T!*|})@sp}UI zAsvSQ^bz?jApMdcDPIxp87C=a?ay42UjV&@lCQwePwtr@-O+0kp4JM+UIyO*&WkC( zZ$JRBT*Sg2^7{sO5VE+i$-kqg36jQfr1JX)5McTsd|Pk1==$-XzYmy7$vOR4KTTir zEOa5I9{{E=JkkPp)R%HcU*_5LXMkh_%<~-t0JEeXzzFk4LerlJt|#CFVOgeWp4DB> zn_eA|J`$F-f-p^L3SCM=wPTRv(BXC9VLCpccr(hfb0$({&${{DcfLgsnoWen2$N^yN zmEb@@X?6wJ0)x0meKDB zdqFw96z{jvzTf;`@D}BtS(d{L323rnrC_-Run}din)$p?SwwKc__`wC^}-ggo$~^o zW?K=#_%(pH&p6#+FTFB$TAS7}Z5)3d31poux z3kJLsd;~NCAj(=mf?{Sa5)tqtl$2813PutrFe?oilEIA1Dg?gMPa+zgOLbK`KqBZ+ zJ18v>Tj&r41KI)Sn>?3yU|y zIx8GVPa#MQ`iuY(%OW1)UJ}<#Y zsH?c|L@m{onp#nd0SxkfcYiN*_o|#%0Py|KgV&qEux*0yjHoI(;?Pa8RJz_u9WbaU z{UL(!7qYWh{v5<^nwu;HGD^<|a+hOdGlMX&Uo{!T_!b6g!XX*~VDDfHP?O-7*RK87 a0sjF#_MWw|1T;hd0000e%4xM**=wiD87jD*y zL2l%9Q!CubbmkaZK{?ZTw`$NhMtM(&G|CX**eLfrPaI>EX|BAzhceYj7y=lZw0nK` zs7JbM(m7A=bEyn66Z5&ZZxYtE_h~*q^Tt~M4;{RddcaBA-vYcLy;q-M*{Bb{d+j=4 zdC47b_@N$n_f`6>lUY5`SW5Y8>2KLh6Zu0)|4*&XUa8;C?R~w0r6!IrKI3(1coGPx zS_4Rc4qPy0f-DX2oB$D`7ZqJ;E#VOp0O0lkqRRbJ#&Y2#K(vxUR8GM)TFFI=5+IV& z2Mqlc&^0asKh+Cxo~&3HlpHLb0raz2#3cu&S2ACaR&K3zSO9`DU_nSv zpyaSg;13X?reyc zD>32x%R!E4r`rzS-cuVdHv+#J+~KbaIb`wdxcKtk@FUS5yFwfn2ztGvX;-OBeqbZP zh$vWCN?lCpfN`7Lo{BL$64e83mW~|QE}cbg^_#JtToc!3$H$j7D>v8Fe}(LmY)6%` QfdBvi07*qoM6N<$f-Y`fxc~qF diff --git a/graphics/pokemon/amaura/front.png b/graphics/pokemon/amaura/front.png deleted file mode 100644 index c9dbac51806a800a2b1ce0c2e8dbc076c0e1bd21..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 519 zcmV+i0{H!jP)C(lJZJKokJrH-xt93n7S32_?HdN*$YW z28=j{bZn{|c5^BH0TJ9q3Ki{uhwfnW+Wjn~j~JE-}q=X3AzJdP8W5jO)=7LJXl4z03mCEiD=MAxhD~lE92P z1%aRjUG5lV2akjevdDD+~!gBCKejIf=<(m_Y@U(nb;!X8lU2OcP8 z?cgayUJ&s0eT?Y&h5@by{s@%uxJ7-Rc!H5Ke~&HrjA=1~cvIl}nOgOEaQya;ZfF6x zjL~nK@-T1%4cds2u>d&k5YNu600009 za7bBm000ie000ie0hKEb8vp=%n7*9}+vTu+mV8(Sj@3 ztuhe@6~P2K1Y%%l+SL*U*^by;6a#QeOkzxdZ}p=aPX2j{SDk6gqdWDwqsWSZcVQ)GW)&CC3JE z?LJt@^^lHAU{@>5E5zj>QK4D0=8I0pZ;w+8ID|n9QLa?#7{Kp#{q}4Dh({z+7%&$F zq=(kIcAE?aNggT_fvX0D0>Pzifu+C{dnzw@pL>LzET5KK*pP7 zvkHhc@EX>C5<+<@0#~SXtdAw|UZ0w7r$|QEVS;c%`GpGa&hTVD{e6&U8bE^=01|)T ze*pN^I*@O-W0P@%MWEF};0%E~Wp^~Q03L-F|MU2psc_T&W!q&R0CsZL`8>oPWETGq zFaSu1=6?76A5z-=Uj*36&*S62U!TZK+DkkKX1IiZIzRsnd0t&|Zvnu+%{{1&%k5#_ zw?2@*lZ>#W8)uMbD!2p$eLYF_(M(FfC>vnJl!TcW6__d(dM}4x=yas>KqTXAZjS|~ z!M=*%_CRE6Vk$FLDWC@3QzP!FB8+F{Hj}|TPiP)d9+17^ONY8`FP~OCMeM7rrkc z&)sEdG+F|ahP6*N!|UKxx8-t}oD6CKeH5#cyhOnOX`KX1^m|giR?7sG8pC2Q&udB~ saJeBx@o`uhUZS)C%T2`YYBMY2A5ZsmC&DIe)&Kwi07*qoM6N<$f+t|B4gdfE diff --git a/graphics/pokemon/amoonguss/front.png b/graphics/pokemon/amoonguss/front.png deleted file mode 100644 index baec9f8dda240cbdce4ba40bd6f665a4e1e9f638..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 752 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 diff --git a/graphics/pokemon/archen/front.png b/graphics/pokemon/archen/front.png deleted file mode 100644 index ebd166254a3791fd74ebc35ab5afa33edaed5e81..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 645 zcmV;00($+4P)XxLClFo5uoKtKQh0N~)@n3$+AP?$J4I8Z<+xR6lr$Y1~f00000AY3z%0006I zNklT4iYaBiqq8?TF594sZ*EqC}t-c(xI3T z(AJOOp*YY;Ll+H^yn2c5yYxnEF3md#>7L&`&wH;VgkI`@Ep5<0tdq0LLxg4$ zgI*rm&xkjn6$=c!qIXP2*v)mt0&Zy)aEVK-AfO+9Z=ciW`=WFOtO9!Xyq(qzknXw$ zxw*DW;8@Ca12iVY(`WOr1Tb|!)(z0q2%t9%!*UhBHyQ>An^VSq0UF0f(*U6nV@xJ! z>csr~j6zlHZX^x>7y8tZ{hDJ3YC85GgQAbuuEvo=ETiF$gU4W_QV4OajzNaC8LRT5 zNC8+UmOnCyPMW~?osdAcM@XD(QJl>k>WpQltccF+Jjmjs#uKzYT7+g-o&{`(u#jVYpy8Y5 zG;rX-)vLE0C!dpDKB4XZlw--vIQq1@2MF6e6wFM{>ty8(!Z2(Nyv$LTuP108!k^>{ f_!s@9{>l0Y&>z>6RWPCn00000NkvXXu0mjfpkgA0 diff --git a/graphics/pokemon/archeops/front.png b/graphics/pokemon/archeops/front.png deleted file mode 100644 index bbbf6e3a24f99a8d0bcf740d4f16d608d655b611..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1091 zcmV-J1ibr+P)ygfxyrK?^zcq4mCa)7MBf91)(~W;LbR`0{H4wLy>MGDM?q zjxR4ID;MQ$evyD8aVi6&EB0yqYBzCn!0M;9OP4I45@?F9iSpfUvv#t)*|?j}sRNkr zXU9mizUjStx3*ITo-Vw_+-o3(k(~%JwEklCt0l=<37KNZsKFR0olK*q$*yI|&NQom z`4ws~u*(}Z=n80B-*sKf&W^!cFp9K^ybYx*B8BUkS&0VAFY`QGQnZZ0E!so|4~}_W zV_{*wIPE#57ArA?YzHs^fa^|=01Bw_$pV0*iuUjf;7F{%5mJGD7=_>*8FGz<(RfUU z`$)))UDXVR=;@@FI-(VRxc$yYM7Wn+ySiAJ zSb_DR8z})w_%rZXB>Q`LIZr1w1iUZ0`VCXb-+%D8u=6*_G4ni1otdZ; z=y!Pim%o8vYuc+7bxdqfC&E|Cp_`2xc>ba30|(nB?)QkM-*6Wo@Nihy@{`~nuGSnk zgXN0SA9Mrq<-?lK2U@RxFL0(!(@;qV3P3T>*AKwVnwgCjLwprH0eE)Eyu2{cuBN&0 za)7_(PJ-DPy@W*5s)^T+{`wSi5vtTE5OFA==j_}j$#d-P44w`WoT~0@S~!^X`X`#W)gf1wBuF`A4#{A=XinR+es|Db{t3Oc#`_Dgo%@OEZZ_f zWT=xfuK-?X!*6}ba?#RV@ysiLJyS)kQ*~Sww*#C3sG6n@xTz(pXJ112R5io_-U`*K z&@GQT3!R94?fl*XP#cOb0WJ{0pC``&!;9eyX^d;`rTza`{0oV+eI7|VPx#Fi=cXMVQc_YEl^g-a!BW0L8RQoLa@bgXUr}oQog;#X&*;T1x+mb82d8y}iBv z|No010PJxlz5oCMm`OxIR9J=WmeF$SAPhu}1qK{D|NpsnSAy71ASIKhI}^RMX}!m* zML?$MSHF5w?pyu*CBe<|E#M8o4Y+#;7;*ra!AtPo51 zL_djV-Z|&h3PAsf9xWs9yxv#_@IDBfd;)N{TB>)l<~&XiTG&_s@B{R#q+x<=ZY}_n zn0^(JzX&1~;IR(QjpBl@-z@M9w<*TUyuKV+2-XOb-2-i@8IfK4J!)OH`yfg%-ce+zuq9 z-kuf-5;;O5MN|^Pi=;-lp-9Rpz_goO#I9m&5A$9c&@^+Ivx=%H>%u&Dxv(VLR z0Nw&TT8CWYV+E$%o+Q!J#_C8Jd;3!zD*$5))oj>$|e0`AZz!oSa@AUo>$(6D-w}(-jV|JWWq1#9$Ok8 z8wB|C1rWo1Rb|FliY}k6q?#uIKXJNV3AzHVu!(dLf@FW@}1=Jzf_t$Ybte-`4esH_rv6m3R z-T>$d*rhMs?+NGu7cxNm)_Np{avb)rSv5o>Tl2qu>|3-**Wu`QoG$uXz|{5jtN*wD Y0h3%DfRC8XYXATM07*qoM6N<$f^2JN^8f$< diff --git a/graphics/pokemon/armaldo/front.png b/graphics/pokemon/armaldo/front.png deleted file mode 100644 index 2ab629340582eed5407715f2b897b56c76e28a30..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1121 zcmV-n1fKheP)05Nr_k;Jo z_wMdd)BgW3472p#)rzq)V4Wes;l5U3hAabY%0AkC%t6#19QVoqI#?GEj{uzR;J91n zOh0}$Ipdob&b@nfPzrqUY;w-02&}J_RX`KnZ_YQTuN}jHQeD&O*XLUo;PP8^P5Zch z1^_A`w*fWc1GvgU;O<{#K!sVBQb9z_JClo2Vx6JhhzNN&otA9ml}7gzG-9v4F?jj9 zM4z60$RUnnZ+Cq9Q%QoY>0{qRUBqF346kl_&?j$?=3Xq^IQkI=(;F`D0*s%}M?xtt zg7I%RT~4Nbcr@Qu2*i9mc$u|RM@lb%&FR}0o%z$A5(xDF$lI+SV0X-7z4>O`i9W9i zHHzC5e*Pi#p!=p)gM-54#<;V?SPOv&`ngNp=T`s{DZp9?kkemtmvv#*tO9`gK?X3_ z3rT-4$$D8AyjJH$Bl|DB_8x1AmH=bp^f=q5?u(NG*qXi>iyho08_gE&&q&?|-EW`l z7R$~4^F&~U(M*Vt#6_R#?U8RTTiHyK9VTX6DIi{0IRCcGSIul%$y_9JDrHc$mMNTW z(I+qgSR?5q+?Fh$uuM_QUs=VLT|?R==`3sn9#G!Mfr`w5Jtlk9u#HYR zDsq_qR#;0)07;si1rRB>p<2|akJ*=sZaI_Lo$gbiq1<`sxm0FVN+W^##dLsAN` zFf|<$kc>mU8$#&K_Gb%WcNL`^W~T1Qo{<7N>Jmcm;)r#U*p@J)#A*UHR6eeB)R(}Q zvpAG&NUK)!(nurohmNV{3F_bo zb7D+jIQ7Fr?!FIbuogIq=pYQEO07emyVpkg2WSh@h63Ezxe%0I1Kia3vYrcIkoQOO zo$uw)UHL*g!>e6p@!hfWNp%I-QmSh+9WTU_qveM{=O=ivuk9kWx7zbBPVgta0bGUt n1YmIMcO?xROZ9)#|7-jW4NY_bf|jV800000NkvXXu0mjfzkm$V diff --git a/graphics/pokemon/aromatisse/front.png b/graphics/pokemon/aromatisse/front.png deleted file mode 100644 index 3fcd8c4f6ce9e8a8ed8e8fc142e45eed1b4597da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 765 zcmVPx#1ZP1_K>z@;j|==^1poj5Fi=cXMVQc_h%ji-ILJs4IQYn50001xcu3&r@R+E; zC^$e^APDFv82I@3xL|njh^TNlNTk~WLjV8(32;bRa{vGi!vFvd!vV){sAK>D0#->x zK~zY`&6F{3(@+q{U0L2agBjRz&SP$D!Pp@~XFG6;qSP7s6{^Y=E2^m2GeG7F#NMTR z1jfqaYle!^uT#cE+;igK_`Sf|OPtv6e)<3J{4RE$RKT<5g_%FVPV?f>B%;P*6k06Y z{{y_LnL|FcTJ%H5WyTeb+qD62`=S8|)1iARD(^_F&n*BZ6~JGw`<=unq1#8{Bax4> z-|d45;4xw+<|70+1{;8<=%WsJ2^PS`ZFD#vm~FBIzxjweHUY=u90M`N7ZE%sQ(z#% zvonnIIM1Whra+^2xz2K2P6LaAGaCNT+0Wn4M^j6Q41B%$mgg7Ox1%p<;FuEN%}$1& z@(;hpqbUHH8qu5C3FQ?)sqH>QVm2N!@N>)-wk}*8*8qW~iv#dq-3)WOy1ub@ji%DX90W>WHK>o*z6+&fSAd`=mJB2aTYQb3ku7?M0hm7 z2|*?!3=9SS+dRZ-AXG^j$mV7Vp;GGiM5$8V=^7Hl;Ye+w?4gi`MHH@TK=ruEHsGSz z=2h{6ftH8Y1WJ+yu)s+JkS4Ht-vE{suv^568Ui+;X%I^bko^VjgcZ2o0+AK)q*^17 zC2xdW8f|#;UMkHzKJeVEfyIu6UMZQG*T8(o!;_mRWy)JQmy9f$7Q8gyASpkmSg$p6 zyhJs?Q^^2PYqMxw26v|cb6(bUENg(wq1HaSj)Fac!Xeuegb6OKr~rGUTx*grkn90G vApUI%`|=DVN%grGpbh5yJIHxj;W&Q)6sU?$$WW@(00000NkvXXu0mjfuzXkF diff --git a/graphics/pokemon/aron/front.png b/graphics/pokemon/aron/front.png deleted file mode 100644 index 72b0da8ec8602a6495225f164be4d29294e60e3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 466 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*BKWU1Vm(9xNxIm!VC)w zj~_pN2nYxyBqSJQ%*fdBBOoB5pkjiB1xPOhIQ{A70J1m>JR*x382FBWFymBhK4}I9 zMh{OH#}JRsx0g2N9dh7dd*Iw_!eDn5j5DM%hhHNr?Z#s=I+~ zatr;#)z@A*dVOn9Yk2*~zZ=(F*}Cp)yQ#$Ad-ARpAzB~5J#X0(%DC3{uk<@%UgqNW zjH`QoPhnU4)+j0%@Q*>R!REk@sVi*~43a18J|(gs)!~oRG2x_nk6Hi73lvY9%W%wA z;WD%4(Tdw&IT^Gbv)__s?6R12?}bB{Ip2X@d-vy|LwwR0EU z5W2G7)_~^WvyGiNBn}bWwl|^&83cSd( z-?rc4<1(h0^2n3rU+>Rv-F%08->OOdzm_{`-rxGqy_QM3Gye6RqX{;kAoq0jb6Mw< G&;$UFTEF7} diff --git a/graphics/pokemon/articuno/front.png b/graphics/pokemon/articuno/front.png deleted file mode 100644 index 71b411a3806c3b9cf5693270a8fe4dab43026943..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1038 zcmV+p1o8WcP)Px#Fi=cXMVQc_AX1!^#s4XDy?dnp5D*XuFi;?fu$0CB`1ts^C^%X<7_^jgi)vEH z;P}AE$j7YVhX4Qrj7da6R9J=Gmg{n(Fbstew&bLS^!?vx~{)x1X@?>fZs9#g}AO;2NNibfEL0qWU(-WYIqw! zji;E#m=*&bb6NX4nf zp?N^3dc_fRwm>2R0QE`#<^eXhh8_Tkq8gP_3;5{46`+OEqbMXvB7CTOy9e~vwao`_ zDK~-Deu2?vD0EYGiJ1>AVxnFuWp=0o1LT}fXUGe-|}8eMd(-W&Q! z59O=~A2e=4vtTy1Xl+plG02kloY^IUYApu9h0BJwatc&;sYASPxd3om%h)1JbAV>N zSgB)Hr%W#TAV?kbWuRWWz|6H-ZAJy?ECw&MD*i=qW*!Vd@ZCm%{-raDy0JQrhjQU{u*Mk8N{NBu5VKl$%+i!4y5fB!>eQcnKwSq0? zII;m=4{`au+5nLiLWZ%>y{ZYfha+^_3Ja2H32gxCfSY4$6ZBD~98eVSfLsBS>Tx;w z!u0BmMpjV{0AZTF@>El?GurroNeY1Y27uWa@mO&K@F^YO1Ya`%L2mhB%rGFN>3;@@ z%2S^Z%s_xphf}D8Nf0sk4-a6r8?+34d20YRr_+pQbwkQ{rb?Jp!4<&F^8U3^qN73P zA-n|GD?=R!I;BWv1{A>6w`PK72MO+7fNXzGkWiAl7rl6?^xfhB#O#Ey-rDh@7r6jb z@AXzUQ+Ws{N64VYNvgB+FyFbz&4OO-4lqJ0d(qV16{LVt;JjzA7Y&AVmnD@KkwR{Z zEN-f26gRHeSY;kng47oegHwgLlZ=NeH-C7`xp{6*+wEfqq&5>gY5P`lrz|wI^LE&*(5LD@0_b^9UhsFiy?my}aoz+U?*6Ci5BB&Yyr&{KqW}N^07*qo IM6N<$f`*RZwg3PC diff --git a/graphics/pokemon/audino/front.png b/graphics/pokemon/audino/front.png deleted file mode 100644 index 5aad0eb990cb18921e998f01e1d5f89fa678edc1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 633 zcmV-<0*3vGP)KlRs~pKp4ia3IpmCkgCqSC%0<~Lpo%z zDuOI;wftJhTP<@%*`f|!5i!vX+4BjEqD=W7`BHrkjm#GO{wI!Rs09A&@mR>6==6~q?@0C{;t+6FbC0#_+0Sf|foij@(pnxAm zIAz(KI$DZBwFm0D!ol$nYp|h`8YJ7Fp#Z0009I zNkl0!*fgF8EuMM^t^cuH?z)r0h5mvR zF)9on3WJsYjdcW?vl-MsBZr>6Pm+_`vD*m}2fdHJ_thskgb-qo{|vj6|FEn#0mE|L zPA%Z5Y0L3m1-eq-^}NG30I7Rkw^lcB-cY*NHLRK%HUhTN54*NoC2(=aP`YP1uIpB8 z5bzysfR7r0I2YeO@K3r%?MB`u)63hv70|5$gZZ7{qwBmtwcD-xyWai7@LU0|RgJK7 z*PFfn3FkUyjm1tc;*U8{7t+{|0Qlt!@G9FhTnYeJ;q|NgwD(|4A@J5fwZt(1)c~Gp zO)G7W^C+)yV7b+8;IcUK*BM{*md~`uZa;gj+vN!aOj{IyLVyPFVW2{KaVBa25s)Tj z>OREFg#>KeLcxOi_>mrt7t@8h4^|mqP1aBz{Yk&m)o1iGz68w*hPSzxgBHkwlz6f0ZTZme=VuXfPI29eEn+v z9Td<)hsEy>ar#1tujQPefh8;+4y=BZrfDdOzyMedOyIo#BUPh7G?E<1=#&P71kzMq z&o$8)CkW=LlDG>{Ve^r{v6U`k|O1UV~IhD;M!V1CaP|WS;2(FTxP?Z+= z6|&Waznj}MQcajfc_pk6&ek0}HO;mJ#^ZRZ@<}8V>jLOunlw#d{5i{fNC1WaLh!<& zU#O4xpEOmh~nUl)%vn*edH}BrUPorxIvG z5-_q^Kpc}C*g`TW>%H1Z#Un@4im%X!6 zpY;72$o7*I{%qovl9EsBMT~I|;Izi~{TErL_(}uB_Q@~!8T;P#*J?D%fqMW4pGkGn zS1%C_`AYf{q+{&Ku3=ZF=SM(6%28saSmst|!3jz_b*!F@&c}GR0VE%mZ#g>b5K!k3 z4JDUZ0b~V`iAq~0gry3W93?4;*}lClFk&`EN=70P!+4KCZkL#53$z%4%9(o_ ztdvvlDUQWe%A*ie1m#9RSQ1#yQkWW7>{la@Zy^?I5=b9IVX8T*xl&H06eHj{K+*_- ziiV+5jb2vieP)y_C zSrUG}{dGZ?cbW=D4(9^!JQUJX2qvx`??MH(no*?_Fn}cyjhrI=r=h;O{Xy-r6^*7N zN5{ax17`uLIU&HqJw$QAY0=fX974tluOA*LFVD2L>`K@E1p5*DI=K^Us;c3A%W&j5A=Ss}C|F=PI6xo}5D<8va9C(q$N&KN`1r7}&|m-nfY5Nz=%A30XfQZ9DP7FL00009 za7bBm000ie000ie0hKEb8vpK)Ui&(Fc1ddSR!HslQuB$5>@&Fk=(MB zibzc?28fXA%NTWVJa(mHSGK-IS0uV+WegiD>e6;Bc4wbE!qAg4-KV?XmSWF4)!)_C zkv{1@xIxfz0}`>GdqBqxNOS}QQOgAgjk+#Cf{u>B&{L2girB~jbid1bI3P^-V?6=` zEyh?J(ou|UFdzhIV}R&BEm9B|nCJynLNjrRf;bej#Wi3VD;h$woKp<=pzCq@hE6a* z+`P_1fowPcI$MAXKte@!Yd^)=eP#pV_7F4& z`TWy-kDx?iUZi|N+esh5K4LSeKL+nF31A@0XkD+QF!y0y03ee(Qvf9h>xf*b4ejwt zZUJ(8h}>sNrsl%<9yteBN>u;_SN5FSQUkp~p#YSU3iLNcRupO{^$>|f@I0=jdz}OQ z_x!5Zd;SiYZ$MeBy>po2k5rl-)RAY-s8jvN`UMB5hsKOzB31wZ002ovPDHLkV1h9+ B(a`_^ diff --git a/graphics/pokemon/azelf/front.png b/graphics/pokemon/azelf/front.png deleted file mode 100644 index 67d155bbf05858848b02e0717b11f0c69162ca0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 643 zcmV-}0(||6P)&aFD2oKtMo15KLo!0006G zNklfbrq`{JRJGG!TqGZhIh2w`hUh!O_ds;ywfH z9DK_2VZt^MJo>Sn4<8l@*F<=h=km$r$wgnjpngqcuN3NZcT&8f?4 zXRj1dLzpO`4CvLG?9qjPMxg?Lm1UXu7K|6=HQxl$rJmS|vYG+YBqG-b0=P+BM%2dHDW ztWsEHMg_IV+`xsnSuz%zi!me7Y`nueJUW1}5StO~lI!vk9icE|fQ}d;C(shJJtX(N ziEtN{<KRwWZrX17=CceR_j7W!8yKz8VJ24V4FpIkpMGXUFV%`15G_a;l d|E%)wqhFiH`v-&k+w=ec002ovPDHLkV1oSaCd&W- diff --git a/graphics/pokemon/azumarill/front.png b/graphics/pokemon/azumarill/front.png deleted file mode 100644 index 6513b5f21158679d520762f5df4977250c2d7530..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 664 zcmV;J0%!e+P)@KF;BdJ35D*ZU00_t^0O(KvP_Xd$`1q(WAb7~==zw^@z|h#>_)xIWg+-F100009 za7bBm000ie000ie0hKEb8vpY0AwmX0N^;l5vSvTk_Uk4C#;4VLZo8=6J(t_peaItWk@x%kE+RL0bu*+q_gHC z1SEBpmZf=K3;|5!S~pD`FjY4V7?1ig0#%(eV!EqaR;093kAI!O80ZRXut zfdLX7^b@{)?7CmuCwPA92g$sPeBAEpr|V}ZB7lo0=U!0$BH;XGFpHgpwh0+cYqh^t zz7ya&;T4BBcm7AHZND;IU1?o|2M8cSpQQ;W6C&(D{uC1csn%xI)*`7rAaie8O{?xB y)v!0t8cV}-czLP${sfK=62QpxF2@aIoO;_%J|N000000000000000`Pjt80004) zNklXidA+2^4hF!f{CO?nnwyiZ0+v zDm)exx;nsA04`|GjwHQTiE=8Basd9jIUrRnpl#q|t>0+%St_$mUE4rO85zJ#p*7n; zlR{<20VF2B?|X6;L`{!6(7u(m>Q*5DLs0im>BX_RQU=%t zVg}Y2p;GN3xu0R9NsNt>z@EU!Z++)~0o)dF`9jD(akziig$Gu2)?euh>2hXHb23a% P00000NkvXXu0mjfF{SxfN)Ug=-_-xU)_zHf=P&>0004) zNklU8MrUky>+5bOxbqRHc{)0fhmS7^#N@@@qmzdhblFQLq9{las4?eO(EXVc7+US_0PtQM z(e6>!1Y1mOZqAR%po^#yWf#w1G5K2kEtJ|zl2J^?NAtQ$o>irIRs>4lsyK*f)B?Z` zWLjLt9OuE5BU={cVaDsw?twalJm(&NV$jQ{Yvzm=s6@rHz)S*MV$S3#!#M)AkNll^ z#f(ZU*ZC83=mKxaGPhs_K**QLYuw`;gDg#7?Tdkc9pxxZ$BtnHWRz0z3V~V_*#6b= z0?s04W3%d_3xJx=i`Q`sXHinWdymQBe_gRApX>&skEI(_Pr-+=S&sDshj*q$htK_S P00000NkvXXu0mjfM}qut diff --git a/graphics/pokemon/baltoy/front.png b/graphics/pokemon/baltoy/front.png deleted file mode 100644 index c1bdd8e9060fbfebad9a6fd83e852b125567e586..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 472 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*BKWU2nYxy1Oz;Iuwupp zj{^r18X6K7C^+13NchlD0aS$s0w#4yFfcGCd%8G=cyzvSTx;RCNrl_ks=Y6I^dcD5~eswh{M{pBe~p~R(@bL|DL9`ghk85CJUA6e-(L~y)X zC10JePK0;O=aPM=zjwWP__eOg@_laXA#UdLzvn3Lil6K-rQZIl;5xCZ44W6-eZHmt z zx0GqhN^{4Zovoc^TCAJiE<3B^Bk#>HTlCvqvGfaWo4bVEtKaBIpMDZyu>q;i|WrbJK-c)I$z JtaD0e0s!`^$2$N3 diff --git a/graphics/pokemon/banette/front.png b/graphics/pokemon/banette/front.png deleted file mode 100644 index 48a48753ec095bba1390349f14fa0b724006b2ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 701 zcmV;u0z&<80Ok=4Zc-%~KS3n+PKqPxWL(f?OYL|6?!UJ>LY`oB1_yxN0ieUf0|Nf!fPgQe z{{n_wh>1J^1Y8dGhY81t9Ywk$j&tOQ;qPFsHgj5NT#c__>(9nO0`M;BvQyqO4d zUe@@pa7vc!IXKLR0uZ8li}CM|$)3J)VU za1{WJTeF<^J(Zu2K02Zm7=22VMecolCxi_~4FsmD1p9(O&<6OYAJ9m6`u4jk0Bu5Z zb$X-z81EwZ{7ozs&~E}mDYQj6PM4|zcG{@%JT2nK-O}!0UWoc?buO}eo2~DDuWyzS zNfaQ$8gX%109b(#s)3pln#=SmTc;`5synIj4Iq-om@e{2$dmds9sD08+LODFaZSL& zrcvg^!&@mO>lIuqDTxJakd!M;>lF|Pz)Jwaq+ID3m{+SHyjYEA@-RZ|hdoNfC=gk0 z6`;<8Ar15ec9axAP<)Ro0#x5W?IVCFMBNSPUOSZ*s9rHWU$qL+QP$mFI~5a@HGq73 zzmZjisREK6aFyrxIM|AW#cXW_0Tg?Eo97v+1&yS(f`DZ4d5*CmM#O5-BuM*w{l}0f z0UhkPx#1ZP1_K>z@;j|==^1poj5Fi=cXMVQc_U~o{-=&%qF5TLk_Fdz_kU@%xnAn1Tl zuuv$Nps@J(_<(?bP>86=*yt!&c#*H_cmMzZ32;bRa{vGi!vFvd!vV){sAK>D1Qdb=TnguCJ2Oh@+pD^-4bKRY+-L;Y;aw2AHYX!pjCVjX8B!n?>B=rZ{pyzE80Qe$}wt(^4v>i!1eVP93Mb8R=I!3T( zEnhx2F#uXt%j(teh`K?n2=L1q$mmCQBLMCUdz%22z6C(hidrEn4ims{&!fOK20&7* zvqsS(XRu=8uYPhOkvB1M^ODlA8pJS!!mQJ`Q9!j?okCJ=+&7GS>_FyvgpgPbBq(w8 z6uJBT?q}@u^HPs?x>8I`n;d+4)uZ$pI}f*?H>tZ*L>3|4_Eqb<4#af);XQghYsXBe9mLp(Phl%N=Df^Gl*H=6Y`KVy!21bX%)!d2*T!$QCKA`!cJrvb6nhs8 zdGmbY#-?j8RO6gBMX4&s-1kOku@E;otQ?7tatwHHG?0x8x#s$tOT0a0t8xy%pA%a{N$oL6&SV33eunu&y21 z#!YzTliBzdT=2(30Z2y|xd6yEeq8~TvB)|M)46c7s0l#Uv-@ZFp^L|pipaxkj#zLf zO;4o&IIK2SK~;Q)D*n98JU;*~b?B9HwpMUfF+KmDK^#5CeD_Z=FTiGK3Y%u8Qo0C% zQkZL$tpT8Kdeu3lA`^i0!iT3EK!4RT>vpNyl)ejq5v5_GL<5$y>t1H!7VRPrfD)xa zuamT@6a#E{@`ynUR@sG)4#VEsMF_np5hPOGZU(PA_LsO>!g#8RA)6c?RF*5)GIfXqh8yyw|zYW<@I=9 z321}X_&VGLT$NxysAmgDdw`AtI-yR$Pr)v5vj)Z(?*XE=sz|8 z*E;TB4cR=&61LK8>spzaGd3SiV`-DHY_V`W6L`kC5G4R)kN}(hh;Fg5wxNp$IrId) zgHjBO8Q%n=LC$#>`$C9iyo3^Bu{0bI;f_a&p3oYJawJG@oaq7r&sXLv<{KPt{(~Bz z9zdPTDclxc<`EkLX^!{=!YaTblQ!a{dT$X@ScD${ko*Az)q4q4_WQ4S!2YD;)-Nc) VcVM9k{0#sA002ovPDHLkV1n(5%q9Q; diff --git a/graphics/pokemon/basculin/front.png b/graphics/pokemon/basculin/front.png deleted file mode 100644 index ac3f6ded33d072854c411366f815e21aea2346fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 588 zcmV-S0<-;zP)BjE6vt1d*>#ejxLNFz(n2%kp1*+8mqL>c&0u|iLga5ysgT8!yt)+1 zlcqoxx08kp$*loH`=xScl~{^pX>B2Y(DeV^dw;!q5@XN$e`R<0y(7kk9e`n4fRP=v z0nQ7s{Wic2K*G4UJE;#a8XX6%0APSSfxU@<5#o54KMAAgvp^g&(d=4z3*N z4hdhSf9RIz#|)3fK^3q-9$ZAT@2i);X-S$8KD_?)X!nEwJPD`$e3h<&ZvsG0H-HNe z;QKJ?XCE)mG_ddhoHy|XuslFK;W5$m{gRdo5A}^4@taBn50O*xigHDC<>5Op;&zod z)zRpu38>)`fXdA9dv<8g&tym4P=={&OMWWt4&BfNl^lHmt}NQ=+`<_ zsy@rVz%tJ$Cr!wwfR!s%b|F%#;BZ*5I-rbhO%3f|5BUBQfN@pom-h8#GHYvLO5)C( zM{N9d_`WGna5E{{xcC<5W;zz4gtotc75LI`{Y`kT+>Tf);lQBHHyhXiFt-b^I{at- an|c7KCb6SKP)oA_0000aCjgnFu<5t_|SN0U_c-sAh0+{`1tq$0000000000dt9vs00009 za7bBm000ie000ie0hKEb8vpKl)rD&P!Pu*$?e>${oGKdypRq|q%ZBz z$xfbW)a^AshE8?WScokW!lhfJNIck>=twGxP-Zs%Iqvz@X?~b8BXL8c=05&@@6LB| zod2;H@Rxk889okdH(xluBmXS6%{wlW7`kD#SdH^ej439=z_3*%03b4ag$e9)u`U4~ zWtBm22z=ec#fKOocxxUpE`{=|08_-ASoI(awFqDpa5ZA)S*Qfa1N4{`M&@s_*5(}8 z`CudxtN?b5g{o@Wj0>U^Knk@C)O9h2s}VUw83|psR{%RFng*5d4iv+9(Ss>FLJQ>iP>s-k zkjOH)f0PccC$7l;FT zp7V@0uCKL4VudoaCLjdWcuGQh8TeYiw*U>sZlBu#0}PB6&oZq)T930CSYV@(OH-l{ zf`}#&Hxn|N?Bdi~3>x`cQ=SB`Kwj&cn2huZez!oELyrKzxg)QiNhwqK#1cJ*7%y!X z-6rhcp$hnqFV}l8?K3sOz8))9?tf4G&jKoameu=BlF_fx7oslZ4MU>7Ywcv=WgMM-Qa-$|1%cXw*o3FG-Cq0RmzI0>YwZ-)jpmErE?r#G73V+yWpo$=q$xt%sl2@ qw0L6$SPHk>;_{Kak$F7-55{jCUIV%;860K+0000xpGAS diff --git a/graphics/pokemon/bayleef/front.png b/graphics/pokemon/bayleef/front.png deleted file mode 100644 index 864172795c4c0f8ad9a17b90ce0a3012e3c3e512..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 710 zcmV;%0y+JOP)Px#Fi=cXMVQc_DN+bhdkBlYF>0I;5D*ZggBWU30QTle-n}XR|NsC0i>xsK)r(SM zVq(R`#dRr);s5{wL`g(JR9J=WRtaw7Fbs^OQZ(Jv|9@^d)Mf7?4y6JMEKnlIVPuBG zL!=&$U;9TEnk`~uO6eoQ0?`Z@kkqU&#OS6tgJH2*a54OWP8tYJ1o1ZcE+!``cG;kq5kr~6|bK3Gc$96fyV`H0RYc=Q{$~wi3A48U`{HkC6mCVNm;I#DtYV9S;H<&Cwf2G!1ehpk&Y7dC;+* zh5$Xx=6)uRbR_`8%u2RyoCvHamm~2yobq=K z0t^;MFuaNwqmi`5UNfLyAUnV}DC~L^iw0pN!_xXX3hZ-DgAqhHCMqHbKq+Op&8Xc6 zVyNQDX6qmjd%w-6X-4?XuThZUbD1*t_+AC8VC)5jXB%_*zMhuBP}WIHUWFS2zimlV z%VUxZxCZbZ4�jjjTF10^fmP5jjUb@b~pQ<7>gQoQ&TV;7q`|V_Np!SMZ`huoX@O zB$@h0)nvo#3ti~VznaxPlw;6XsgarpXx_Wh_0Phu;! sIQCxFi`e#cSGMU}+C>ie9sjrX4Yzq6HIOAH9{>OV07*qoM6N<$g2j_N)c^nh diff --git a/graphics/pokemon/beartic/front.png b/graphics/pokemon/beartic/front.png deleted file mode 100644 index 18d3083c2f21dd9f25b4a1a3ca46a00fe9377a85..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 858 zcmV-g1Eu_lP)5kS_y#319$1m<6B!6p+lH$B=xZB4*D+NFTRL04oc4IRVT&f$#A3 z_v-=>yZ4JbP5|wM9)84*fUXFPn*)*M)%W7u7kBLdJTyyG<-P`pAfVA;WeL^I5Q=T- z7Z2{2bC+HNtrD3R_}FW#fva<80ya(C62Sv}TUzZm-o78tlw?=!QY5F@_2&)%>)N;ETploE^`S~iCa&FaO+YpA1on0%qChG5p1LZ0Vmd~o*S$iWv($a_d>z$w)9-mkB4wZ2ApXR4| z#KHq$bW!gVaK1JRAL-LU`Er}nO568XuROqI1+bQ&KgD_neG0>6?O8*_{&VWsDzGsf zDQnzo(LB)$A@+}rrp5YmnkORWgLm~mFcIQ2z|_kQsgE8Q>eqnaOMqw{o|6y|XFZTj z0XAL&LWmPs28#5i(XkOB+*B~t2HnPc0JIWv256fwQyD@S)G&040I;{fuupp1ka6Yn zs~I4rmnfx@ay1R8)Z1evg>OcU0Qw6UnXI^!)(=&Tysqvh5!ZZ^C;?(M1<)qX6Uvr? z909Bbu*)_y!UOtNZuF*X53ng9tR;Ft4*<52nzy&?4c!H|Im_Gilm@b1PLo~Z6gP6Y k*39BO5Cr)q==AQzKX2p8rf0FOWdHyG07*qoM6N<$f>Y3O`v3p{ diff --git a/graphics/pokemon/beautifly/front.png b/graphics/pokemon/beautifly/front.png deleted file mode 100644 index 41d5bc0ca9fd9ac44c64ab9b68384d0b6c68b43b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 833 zcmV-H1HSx;P)`rg!pc5Qto(p;Rl3 zxq{IOc_8v3x641xMd0p{s9DDdlYRXoQ8X`5-+AQ?X6 z0IvynG$EF>-T^o?dDZFxR-_TQ`1zQC13OY_)F4%0vW~#H0owLdy1!ZP6+jIc7CxMB zU5i<5+u8t4v>3X50Kl0S_Jo+(!9FqC)Z@VEiT!H~gCR0dvt;TuTlSt})7d*W5DdP-ffolUeyRK0mQ2b9|tRl~l3JK+_() zd?$A&V1#JRANW74WoGu7`B~`{tif)57@DoI;SQL%`+58ye-pm}e?czPY5L(>00000 LNkvXXu0mjft4)Rv diff --git a/graphics/pokemon/beedrill/front.png b/graphics/pokemon/beedrill/front.png deleted file mode 100644 index e1f22b5a7df5112be77fb053b151371b1eba8d90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 840 zcmV-O1GoH%P)Px#Fi=cXMVQc_i+hy4ti}KT{}>n;-p%$>T6=>^0Oph+|MsN+%}SgA2-O%d|CDO9 zVi4%y`0Kw0-~a#u#z{m$R9J=Wm+N-oFbsr|J+XsB^Zt+9kz^%-C6_IG&i<)Sfi`$P zk1i4PcKcobV~NNoJ0<0uE+UZf>rRzteOx2x_9ui&vp-!TAlYHd-iEeAE^^l^$qXYEegh6A7Xh_&IkfHJnNB~5fkTiz0H4*vw3Kc@0eJb; zwV{(AZDji^lTl@;1f%srwc3qSRC&P*Y8%R=+1I8JtL_c z1<}i%hxfG)#E{~1A$BT3Ay!nr)c1fuNa#ykudS$sC68^FU`bo^5-4qLhSTfFrW|(x z&ooUWx*JWx+|$qwEIbp+N>D#tPr^kD(G3xhmWC-*!bJ-mA-Dc@pN_IN-pbh$tw?0020!AmGRVN@}SY0006e zNklyy>8nu5XWgKT8s`>l0JZsG6QI;Ny$aVlIH{{I=FEN6fMv}D)a&^puRv+ z?LmiROh%8H62C&%JVBB7=uzz?lWMo3w-NW_ef~+t{yQ5b$*_MPV2Fq$z!WE8fc$WX z%WwisK#nF1xCrNns}QjNH^7vDU=g|m5P29FK?ShjLqH8s&oJ1=C>2sv1mLp(z(sjd z(jY=@jD)UhNq`Ol<)Q{rX$S$P5)~|{l|T)VuK5REflg-u0P3_9C8RO{?9m(?0HGXz z1hgdJq|6EM=P)JJupo-e*XW+$l%R$V@P*Ko=m44n@O(D}DOyOb7w*2zjR!DJaL%5t z@kQZDk()-Tys_#KmCw)S&)cuqwCyJ~_wPGCZQnHQ7oyPm{EVs3ZA%e8s(_y{+aNX# zdJFiSWvvj4%izOdY;5iN_-Y8a%<=f!Ko0iqo^Q{w2*!wC-eiDP>j2&Z9-V)@m6>#smOHwQ*KWzQL50Wc{gou1<`zoh7cY2Ac!ak zm?sAVlF4QIIP)DumAu6SM&-+00009 za7bBm000ie000ie0hKEb8vpK(y>m%Fc1dd5RnHs*X>LWJ3IIZ8l87y zawS6WBsiF@lg8&+!F9C z-JdxDppqfdcQp!0iF0>RBO(A?C4k0#B|#xg=20X-#`fBkB4C~Xd2pAY0xnYkXRg|S z#WHn9!@L;4gc1~U#N>14W}_$=;1&6)DD2HcqYZiFVIC6&KXzMHlec}SxNpELS=mAg^5vJ<)ACA>)>6et$~?**t%K90FrX e?AspeAJi8QgIb-LTB!*D0000N diff --git a/graphics/pokemon/bellossom/front.png b/graphics/pokemon/bellossom/front.png deleted file mode 100644 index c0b1a0e3d349ad0ca1e83ca22ce6a76bd6a32e29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 518 zcmV+h0{Q)kP)VuSQ{EgJv|Dxyu|*vSI`$b5?h zI5UA6%$rt~4=Nr)p#2TyRGuffG@M1JLn(ouw1Z5U;GKO|ri z^DvmvN0$_!0(hUX^2e8oj{#5(7}FS=;X2Tv$`~6nHh%+3m?u2xaRh;m9x#6aK5;8_ zgr@HMQzKyWX(JSf3-I3bxM~8xTYxqP`B0EIJb%)`1_y;^*p0R|*PocUrTdzzhOV)$ z`dSXx#~g%iDTsou6>!y^2ms)ZRupoXj0&ZH%0&NzmhqSI4Qhm(ygdC9>;M1&07*qo IM6N<$f>f>Fe*gdg diff --git a/graphics/pokemon/bellsprout/front.png b/graphics/pokemon/bellsprout/front.png deleted file mode 100644 index 492c8b29f84e579956baf1ef4e328b429fe53d27..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 479 zcmV<50U-W~P)Px#Fi=cXMVQc_lxji$|NsB)q*^%u=DmaX`1lYI5Rhm`jO* zou)f??))7mxq?3)-g`$@{vlyQuo)^Z0-M2k-+3P_2Ir4h1nvtbJ_HO45DUznU=y^} z5rawK&g~lnDTNn&n4f1>oHHh1o|As_i$oViGp1S~ugpRMOF0ip- z+t@&m)e*7eN|(#$iHKp_7#2uA7qHSAep!pLfO-BIN3siC8GXDa5Cs|koGG>&*+;*%31}A- zgSsEQG4Rny>NY^VSPV@;dj6%jD~5Qy6w3?c6ME!@(2sG|^L@ZTZwEfq!<{?-F5g+! V6l#AzCnNv>002ovPDHLkV1gMF diff --git a/graphics/pokemon/bergmite/front.png b/graphics/pokemon/bergmite/front.png deleted file mode 100644 index 8526648893b707672a5416d98855aa32246126ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 502 zcmVKl0QzvFc`%>SfZ;f7RJ0}h&t98GLk?zDDjSTY7eJhV(nI02LPE-yWCf{D%H&_Z_xwFGcGRC0?*gLp zF2L__a4tIlkreF?vK`=#RAIZrX*&=LPpL+aG~EM1BM^x+l5PtS3mHiy%@#4>0ZH>c zIe-{m^EJ3vjc5a0Yhpc`7m)-N;n|d&t}Ic(VFahA@KOybzzt_~jyO~(;Yb^EMgu5) zz^Up8DIf*>5)igfvM`SRi;%$T(QcdSBfCg3ye3wS+q5ZDrTIYs1XA^U+4;n9W63EP?LPq%_qa4^IXLnO$vaIOQz-_^L s*865uFfziAPBi)ZFHJknkNUs*1`{x0%0DD=RR91007*qoM6N<$f=vF@#sB~S diff --git a/graphics/pokemon/bibarel/front.png b/graphics/pokemon/bibarel/front.png deleted file mode 100644 index 1963eb81a15eb27c87f86af86bef21cb8688af3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 669 zcmV;O0%HA%P)vXnf53%*2IiEvhAan~~nsWL#5 zzy*Rx6jCV_=PuyX2myss3sHaKU2(3^G4Tpfi0hgG)8_BbeIQ~0%et;V^14i}u%rqZ z+O>TefQbq$P}!#r0HxhfZyVr|cVLA?PpwBtEO2XpbVi(ikEH(ryx^$?A`8rE&kj*v z0%ZoABh|KrvOc&#WB{|4oMO)3;c(=hT$8rZ^aSu)>!Ysgi34PSXrjhNs;!PLATnzY zAZr2rrv;|8Gk}Z|b7^WgO$5PgE6q%5xJw{Rqz%lb9iXicLL-@2D^T<+M9@{yOW+5b z1VQElCc}U-K<6jU?Q5gvrs&1_-#f*XTAG`p7iXZW_~MYr%`_?H%LceOB1RmO=52$- z{dh1s(19i$v?obV@{AIBfZ#l9G^gFrfqk~)oByo8jJgo)m@6$V00000NkvXXu0mjf D^6n{O diff --git a/graphics/pokemon/bidoof/front.png b/graphics/pokemon/bidoof/front.png deleted file mode 100644 index 299e487496b35074c4c259ab5ea37f2c5c7ee895..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 518 zcmV+h0{Q)kP)_?fcWUR`1tr(Kq%-~NXWQ=$iTpWfPer100000C3yzh0004z zNklqq#FNWFJ&P`+S3z+EG!8A9z`YjyX z_y7)m82?x7atB>p9Qqa#-jDZx_Xij|>7>8P_mBHdjNUOn3W4Z|A0P(O?jgQU0SLQ> zxCM~K$bh`vpW+}JC@vWzznFFaE>h+IL!=!5J=mjqQ(X{rkeLb4?X#lLt_D)c&11M2 zQv3cKnFb&%!22zi&Gwhn+9efSR(INJIBQWsHL9x3c#S-42QC&BX|rrff?pf{Wc;Fm z#~l#t0i%P9vDCoBEp?!`neoJ|II31k?W#>vvjxCvph#=IWtw0DOkkki-;~pF diff --git a/graphics/pokemon/binacle/front.png b/graphics/pokemon/binacle/front.png deleted file mode 100644 index c3d184282424c553acd14b445be04204af3118d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 726 zcmV;{0xA88P)Px#1ZP1_K>z@;j|==^1poj5Fi=cXMVQc_U~o{NxR4MK5YXtbNH8Gyh%l&NAb4mv zSV$=N`1rW6sL0spP>84~Sa_JAu>Sj=L;wH)32;bRa{vGi!vFvd!vV){sAK>D0xwBK zK~zY`?bI=A+dvct@Dn0?O%QXH?P z1k|yFe1OvJ>amkgOCXbV9ZI)?`py?hEuC%XR_Hq;8}qyWyJuvPf3}P}>wvWmRPEKE z`gg!^)Z3;6-txwVZyUZIR6GSd1xm9T+iIKZRV64-Vz&JGSFZ0$u-L_L>_0%=uUdw` z5P*$|+ro=s6L-H}t61(LAXVR<18iKc)wegTox&WZ0y4OMw--cl%_;)VM}Q|YgRnCQ zyC?0!3~pk-3AA7+$rC*W}nhi72JjRIVo2YJFDOT zKnKjWqk=b*3pmn&_%?VWNiOU)Akl)WmzTtG9CDZ>?}!d0$yNKyG<5)$gC`R<{S5Hz z;}Q@fU|#`1`{y?SVlfl!2H;o=8qgDrP1pp%Ctbh~5R5Z6V>i85OcU`q$NdN<(}|d| z?`5zzWBE_UWD~4w4M_7e&js!l-o(dr{c@a8bBH%pZoD0E)y%JU<6S? zN>UI{+m_k1O`1bWCIl*okPW@%QV0q35XgqTiiNQDXd!ex2<`S_R!=>-+k=pv+CM<> z;G0Q`k$KVYVMutNeLv>CnIU9SckhgUED&7xmd1pYz=2z-iO!bEqb-;c@ z2u)>{WCqk0rVeaBBx~ut6&WDeMgX?Gw36ENdZx^v?O;GAv+Q}^5k#uk3)301RRYEQ(rD2Q~m0#1RL82~pMo zDpFT*{4LL6BZRO!8bGY=t@!-s#ZUnZX%}_2q8GnR(w_zp?w+Ot((?8#QFJO=5{>%Y zNhUB`UNawvs?gds>-FmSNBPHIuQ1@kv^3!MvDe!h4qkct15P;9q=kS+q=%T@^hE7;>5SKZfCnf8_fLppzf71T0rM2|UaBeSHHYKnKIMD2ku> zeZ32Y1Hjw`DMV4kk90ef1OvA9nY&+kez&396~M!xEu^{}14ObES$3Io7=+i@Bvh=O zv(<7wygn=MB4-9dfbRq=g~OU7&h-$60|QVbMluj$fTTc-HVh#QNFm@HDH4E=sJK;_ zm+(3YFb^bKab0uX7MDU)uri6Y*j+F$?VW%-Xqm+7th(lpaxVO0p=A=b*lv?qR{F%D z%qkLsS=l6MzT*e5k$f}`e{06db|{?O1I{+)0S2Z=CJ zt6wKH_Ya^UEwnWy1<(T(oKFRek~+|II#5)Tz#7=~B{fr4K(;syV56JQ_#Z&a$b&YK z0)WVKBxT>cbj(KIU2rf03vL5 U2QzyUR{#J207*qoM6N<$f_wgiLI3~& diff --git a/graphics/pokemon/blastoise/front.png b/graphics/pokemon/blastoise/front.png deleted file mode 100644 index 0419463d831cd9a62caa1dad906739d0a06c4f22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 988 zcmV<210(#2P)Px#Fi=cXMfkw@AY!ZtIbxKo=30x*N=ixq007O+)mk|il$4Z)}mwJ6ZT_ZF+4uhtYz5v+p97IJ1nkWG|=PwABTsd@8$uxVfEN&)2 z*o+S3@hXa9uu#`pN}g;m+XF=N2s?M7{QN*@R70PqsR0C`Kc9_Y<0Sz4Ah>>-9ME2S zAYAGz3GTn^wPn9#YpE0h(xtwbM`7XrXd3#-%ESUPhiappW-#;?goxi7V3@4J8$~;a zWj!xIL4QGk5Bi^==i{LQgCH37&OEkbf+WMYG?I`a02ss81I5sgiVD9(LOCrX!O8m5 z7%|8ZK!T{Dp?fZyz%}q9Z%=SR=H<5wB#diArwOdoT!_~*(2+42^vj~HobHW4Pk`Fy z0HY0IGJbLMVZ}(o64pCH-78cBfaXDpd|RHl%gB+|bjpm(jWBx^`Eo{}0OSqe1&nQ) zUB3}*Bg`{jPpJlA3jsw~XAxQ~^)!3{@Tr0@q8f_H#HL?9%VJ>_Qk@ek?h{OXhgt{N z&Dm_B&sN)7!8FbZn9Zg9GRPa5V_daUaY>6 zE(xw*Pf)FO32|@3;(89FYrr-=v25lM*Ea$FpPODT63LDFdW2XPMi;hGB3FbM6T36W z=AFeXbHGUqk)7cNU@^z^3xL`|ALH~U1l#EW*m4*V_JMq!Lo=0~UaYnhwn6H%^rjK4 z-v)=sl=w}@N8k!L9jGgy-6z-M$NB(GqrTYX70&_9_6^7Fz3E{W1nmSnHmvn5VB}t3 z5+ByyeA+F3DsZ=79t;jZ>^+XNZn4`-ax!_f)0H;|3o?aaAkk^czw4zJ0q|#l@^b1Q zAKd4EyT{uFu19`H{$BrRw>`h*eDZ_h)QRlU?|u~R33qA!H|-Dho-q2w-JUoA0000< KMNUMnLSTYCZ_E_{ diff --git a/graphics/pokemon/blaziken/front.png b/graphics/pokemon/blaziken/front.png deleted file mode 100644 index 5336ff9b32db68f59e18fee8538437f0b4ffa6f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 888 zcmV-;1Bd*HP)5WujIkbq$DU|{%wVBp}eU{FYaC@A>YU?_Od;Gj^ThKoke?izaJQPedjL57OD8a;a1B z8Io>|EvPffpuuZ~P>-!!lrdEdaiK1iLqbElb}{}EHWW&FVDO~H8M>#W9gQKqlbpzj z?((L?_w)a~CkcQ%wW0%INdRC=djO<$?7psV9f(2Bb<>aWmKeNp-#Iyqg%R4Wo8Eoi z!&@%|V5Mp7HBRan*MuP5{B9p(VH3Hz_w@%2sEX#4_nN;nC%0J^MNj}U2)l2wDB{#t z3mChtswm>4YTGH=~Hw_cNxF3)957(X5GCnMNW_+LeQ)FIVqrk-_ zr(spg8ylDL7{$q_5ai#GpRE#Jch0QJ2AT#jFul$Jkb4+^84b$re0WvKLG)I^77DCAEECI>%JOom;il#YE-B zKuZmQ!%GMQpy7l)R3T990s{?BLMEduO!i2{w+gAMr^qz(X$uzBDwYXRCi zpo40V(__v+%F=-ZZ5whT7|68g3y{KblRz25EX=d-(72iR9w0C~3_lABhFmbrk`X)6 z9)#0FAtX!2H(7KTlRaYaWOz=pBR&X!RtD#bQxXt81pPsDTCVHxp8R8= z&jCtw9|g}CxYt8^Mq7;M(f?-sK1oDK1QCJ|h{5>!u0UYENL9{5kX%I4Z}thNOzaUi zi@;a}0E$5JQQg*Tz*{3OrB4PFjIV^?dOn(w(E}}jqATPIJpgDep3;ArtunJ-6TY7S O0000t zkx)AEz6M0Be>S=};B-f}h1+M~+~`O2O9*vhH^D$(4Hh~_X4M(>6E9WjqZp{?$PxJw{elRiBQXaIm&cRgS3rO<FUvhKQZf&&)EI1EV{Be?`2SVp#`tb*U$P9<{EqUOYF;v!HUu+LXr`V$3^J>{NlLk}93F0rpIK0uaOa zVYS&ZWS2>^Y3eI+_-BftTe}ovy^P{g7x|4-3wH&Sv@@f+?l>J?LDpp}Ng2KfxbbG4 zu3Kqz`HJ3X1%c$)du6>3y&%|e2z$lh1His?+@KBnF9WXR00000NkvXXu0mjfDo$$5 diff --git a/graphics/pokemon/blitzle/front.png b/graphics/pokemon/blitzle/front.png deleted file mode 100644 index 8eb3033d290a05df2509099286b5d44831bd92c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 569 zcmV-90>=G`P)b@6|IP5{fmCOWl+ZfQ&bv@MH? zMhE~Bh}IxrODv+B(TMn?EYT*xd3hG?f&rfYA^E+fPNteGT^HXKt+NKhO0b4 z7Q&MVrrbW%*(`*m2&#s^r}C5DrwmqO2!8solq*a+OzxWI^(_P^025|>W5&(EM*)>^ zW-xH$=Y<4nSMf28@10&sK;8T?4Du!lW?MkjHGI(dtBL}eMG`E&fV553BhYiYaS6~{ zI(?Z03uP{p+Pf0L=wk&u&Fn%3PL0;xGZMl(HtF!&z)r?r_Jx65LScnb00000NkvXX Hu0mjfWCZe_ diff --git a/graphics/pokemon/boldore/front.png b/graphics/pokemon/boldore/front.png deleted file mode 100644 index d5fef1c2fb1adb273549bf5325674d6653be663a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 686 zcmV;f0#W^mP)cS5ctSI000000000000000rX_OD0006x zNkl87-7!g@Eh}K>PrE z=@s?T9(!zGuH#Tb5}>Gu-qu1W&U~I3kHE5C)_+>gnfQh4{T;aO?Ku#f4%T~Cjf<}J z>hlROTy4Q}bs|B!?nPXvhE99OfnJWIC=ho#JxmezGB6NPSA^5$=1kpbPOv|Og1#EcH97Pd_X|_40KDtVGtVv1Q{uVtZgPQ^&kTj9EeIae7qx7@=lL{gy3lE zK$e2%02Eb9b`Z25p{2(ZFM@F@bKu~lWLwYVB=tLbhyVp9-OXtW=&~=@EA|I~WI3>b zFa&nem-h?S8qZ{QW2L+tfB{z9qs%6H#^&WBptF_Gc;8Moh08iDUCe? z_AOwIX)@pKnsMCs>?+Vnl6Q>2bVUXQU`;W{cJNs6!PYp(+8Wnj@t+_DQ@9bdz0(dufS1NNB;FY8~|Z&dP@ U^fL$9LjV8(07*qoM6N<$g2+uI{Qv*} diff --git a/graphics/pokemon/bonsly/front.png b/graphics/pokemon/bonsly/front.png deleted file mode 100644 index 328a0b031557350796c9484731e133777bed74fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 479 zcmV<50U-W~P)3f0000000000&@H0-0004M zNkl!LzBM}(B`-QX=eZ5ah$XMq#&^Sm(kctxRWS~Fa86Jdf?Uu#L?Ia%wiD+++ZsH z0|eZw=jXZNdVe(ylF_zf~$Vj=`LJyeCEnpR>Pb~S%iFl-f`j(^c`&s=g^e_D*;|C zKx4LsmzDur^WJg$gn|7*0EQ9$=JmcCq zYW@7hoVTDVuVk|!q6Ps@%503pR22X!A-F76fpYqVF59*(DhSj{S41`b>`e878{`o^ zQPmL8D$m3(&~N%m+8kVO81O|DE@rVH^ZAaNFv!3Px#Fi=cXMVQc_F)1KQK`{UT07@|!lxi_*N-3O!TK3hP|HVrG_RXw|DLFYoYHD+w zq@=y1do%4XmH+?(p-DtRR9J=Wmg{zdAP|Jbfd!41_kY{&1(YU=Ci&U!IZaWVk6~HR zuKSPwXoYhw|9q(K``&)g0r*5-LNDGTu%H51)4f5cN3SUG95*L$KoAchgd2zxxr7kH z72#aY9=-;sg^O&q05*v>z%^3vn{do&t80Kic5(%9u4LgufURWUnmSpIb3iWWOkh17 z*OcY(nIoHncceCrK+Nz5dsH3*UVXsDlp-@Q3<&&B=7D4Ys>bJTq~!22fn-6$K#3s) zc)nBsrC@4iN;m5dlAlHn(jG3W5lXm7Z}t+|H(8hvPUvFH)I7;wEQBy^-8M z0zhXV0CoUzQ}jv@8jCU5b1&uWat;bWFJb`{cbwGR^_)ZJ5Ut}eaBCpaCE3nvXK*AU zBcQGXsR1VFm{Bb7Qx9Fpy$Zx3-(|U41TUj273Fe3%YgIDYQoFGK*U`S{*lO%-iF=? zuwN60gQLX?a}#74VTVXlsyGK7?#JqRX0Y^rpN8 zplP0`X^ zlg;V8 zh|mUTf7CqdpLjs6mj~MKc~IQP;I{y0WU2?EEztk~002ovPDHLkV1jA@ZxH|h diff --git a/graphics/pokemon/braixen/front.png b/graphics/pokemon/braixen/front.png deleted file mode 100644 index bb090c9d17130421d7a70441ec0f921e9f45f453..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 745 zcmVl&H6ae5uCkDh4T$-ti4-a88Tqd8x>Pt zjinGm?%fJa0W(d#PK4YCgiCqJ4aO1xvDZNhZWkD1>ds3*cC(0n8tk14-4P#4j^*bI z$C`0g)Np$8|JXF*9P0}(8O1Dn!da9JVA!VCBAmEyv$Q4u|r2Oy}0p!k6pOu=~ z8ayJmQ9M6^`ZL|U{D>7O3N=;BWVkX`0Nx74d8G7B!n63#R#sQBTR;STp{V-=EKy=n|hqsfR!uFc3lW0c( ztUeB)#yY-rA+YBSz@{Kh^8o3@iP8Y;kOIAfPZX5D*YRFd$G+aG;QA;NalU$f#gYAgHLYFfd5Cm=NgDSQuca9S=K&000A6 zNklK2q*(aRk~!rCt78%(h(7K ze?S!prbbaZL`}N%Phj+tiV4NZ!c-{?Rd#w`|H3A2nnMD?``ml)&UYa6h>?9zO=Xry z=HGKONYNeuvSb}8B%^4lWF$*SLjanh$y%~rFk1r1%S1^6gx+L2S|UUduk5`LS8pKz zG?FLs`oiK|-7@L{uoeeWGU&`;7J?EYMI(9?kclbu2J-+Yp^>K%B1KH*>Y^lMV3Low zkPAWshSpsm4}i8FF%bSR8cnbj86@5!Rq%B;0xT8)xe(}<``xur@?Fjd!$6-@&(-16~EI8AKq2Apz&sq8&jGB3uGvoYSL=i0VLuK)6k& z8GSqo0GT;pnI@cu$n(K?4ZFuCOb9D_BPT41dUO|zxwx|T=}FEnF@I8#+3h!jgJY4Q z1_`18od@i#@a@4sl)!7*OlS~k&=bJH=TZx2WrD+sktOuXe7k?t?uv^DzYqZ6 zwH3RF9?Lz+BPj> zOoN=IPQIgPLg%~$r^L4HAy$i6(EnR`ioxQ+yx7% z{diw~*W-ssvi)J0&J7I$PiNUaiezS~sPKTQU9MrY2|5J|P$5wq&|fl{ODoR4k2c3P$1 z{6Dva7E;wYrOQ@{T4R>r0Lwi$^yOBm@o{1$IEZ16B^~L;s5)uVM4;r|_p~#T5_Kfz vyC2RdSr55${b3-z`yaq)Jgf&*9zFg7V3TszoGV|-00000NkvXXu0mjf@yoJ@ diff --git a/graphics/pokemon/breloom/front.png b/graphics/pokemon/breloom/front.png deleted file mode 100644 index ebfe14335fd80493d91b4c76d8bf455fbee50c52..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 789 zcmV+w1M2*VP)%{dnXmNGYNfy|> zg-9PI-u|BJW`Uf<8hl-*vUWcHnVsGJt!bYcmi6UaTDK@2TW9h^ioq(W(b<0Okw0FU!570NOlx5n{o49sB?C&25nKp;y-*wDeX z9ThMaB}SZD2oQ%-=X4xf6aZ^9({$HyPg;<%EN2?vhdLdz&T&aVhVHV6#lO__K$gg> zpM;GdQ+pWfWRpCXAIdq$iJC7YvE^waJy3vMnF%QYJZ-kk+cgGTAxeRxT6_Q-rHMyz zz-e#FL$hv{ZNL<75dwfjBdG#!z;;4JuxXmx9ov8p4)YN3p;_Oz0V8CDPF{}RZ>CKJ zQM7>Trz?Ek%fr{(RlU9!hgOA~V2Z%x{^532ol-82Ex-tadG-Dw@bNwjav_ebNg7X6 zrvfGqQ)iK9_(qgnf60008! zNklzv2Nl(5QYtsA7B>nDY+}y3AS|Z?jY%nHq-`Xi9}}u+aygQAzz*#x-wT? z%CnRd+oidR=9)C{P&aE6FvQSj3MBM@^Uv(gELhfu3t)%!O1l#t(isoxgXRJM_E}J` zeLtY9i4Z}(ya+TaZ6(BBpwjMoB9HS@gBpxGD*#G?78nhYKFV9T$n-woKETG7=t3W$ zC0Mh(Ng+5i5SS2MEJ04d0Mg=Qq1q+4c>z>`g;v#AsPWl56Kb*xjnEz#K=j7#7hAwTfOJ5_3?$q5}n{7hyOLFDOsz|E%hJDE8mU@#8f z0S%+y-6u0JKyfk>Z~88`1Nh%-twnIB6}o%hQwFmWYqF$@Ts;3KhM=-PdTv~Z?JK;BAG7j}4ryfoH9!~fRB4AMo0-OoyDvI^f=2dGP&h&nh1@U@<<0czhA8zAYyL{W$HzXYs@ zUFA8DJ#mxnTrC%|*6T@C8P6R|dj!PJ^~-V#I8M3wGUTSXVqYJw|IK6lWNjRDngNlz zT14#e=ogjnw}H%V5Ucs}<>B!LvnC50%kys|REsaK2}4cysCNM4H`3nn^DCnRrfIPP zU17eYRqf4}<^r-PJ}a7|8)m@OLahL46+>b+w^8bt;wD^cJ7kt%YsAbTl~#GkRr>ya l6-fr}zVy6bc~Jha@gG_F2dcwaM6mz>002ovPDHLkV1nu-eKG(5 diff --git a/graphics/pokemon/bronzor/front.png b/graphics/pokemon/bronzor/front.png deleted file mode 100644 index 71a928cc3b4eb57eb080293c7aa092c0e10a6acc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 434 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*BKWU2v~S%G%S#asBlI6o;(2RME|%GLtz7v*TEdSz3|4Eha^^2Ryq+!nY?LSKgtbhjO&cAR9k1)V-2S|t z_pE^z6Gw&=n}ge>Od(x0DTjxZPdwTtRv3S-o2Sb7Yr)L5DyQO{HVJ&;kqQ>sEuFBT zfzM|CoXgXhrnTGNoBlL9Zu;E^aW!D$z9Pn1X>+q`i zmZWD`t;_d=8|0(5B#A7Ww4&5wYnw@u>_Lu5Zsl#BauYdprDD9>(Xcz z-MqtxkA1DabXob0#QMn@bC)M3|L+c5`+3UVd$XL*#QneY=J(oXZ@%;2-Cf7feAw%n T_xrcAK*8(j>gTe~DWM4fPIt4| diff --git a/graphics/pokemon/budew/front.png b/graphics/pokemon/budew/front.png deleted file mode 100644 index 09a81838ad521b7139b39e69d9172dc17e84892c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 439 zcmV;o0Z9IdP)rkPr|MI9Mon&{&Xw0Ql%=;J7#-P)IO%U`UW~pvZXGcz^%^00000(3CI70003( zNklT8qs!y5NOw^JfzM@1jY&!XKw}W7*(p|@C6B9 z0RFkUJMVR_%3bgAefL?G9p|cltQz~p_e75bm=K*I84z|mT?+68^92zx5+W2K0fe3} z#4Ryn6m!p~fC)g{3|k}s&+!-sTn;b*;;QNlBA@`LZ~YnJ*CP%w5m2)gARztOI3Skf zFi*B47@`3%-%Gj0OL9o0l&?I-BKS<+TVjIUgPo8jaw8caHS6%WkrsG|CI&p&0crMu z0h5>MK1nmRj@jiBgW{xiE2R!O1{}K)V)sQKoAG;McxNs)*E!K#}R@q{+88!RsEkc^W(J5xz~la8af$nyMB|V= zz}_OpgC%0n2t4}bPl2ciWR3I182Hq@CFBCn&J+hgf5GAEfl^#>WrqM*#n@jxh`VNdMcl5Lljwg$naj@jlr)0UR>L6s=r~vWWIgYs`$Vt$q%W3Oq1iV0;bGGDr)Swv&gUyO#=b3;v+FxqReH=87E546|}0 zxyoEXhX|b0(qpal4oG0zwV{egKo`iN61DNFO2JnnIt5zZ4jw4QIK{LDIFLw?*pL`VNH~y?fat(5aByJIu&4kq`1ttvXkef)5Xi{LzVcSI0004! zNkl>OK`Sl9-wDcaBxU_ zFW}H@Lcys|kVmj%9Q8{P9PXl%gV6u_|K+>y4q{om?DFT?`>k(~>T=)r4jX>6UD;m* zLB~0(2G|FI?|24acgq1maCz)^jDTNvXPD{mDF~dSa{~}FArdtdTj1*>I2QuA5=jYK zhAkr@CcqP=(vuSCXWZfd5L?i3TAmqjkpKe6@jY#c`fx6A$(xT6gigx@>R9MkC{Q*EoD3pMK>Bopw8d@=env~K6 z>S+m7+O~_LF!a`VOxxBd#_5C@f4v$Zmc3fNn7Z#&e7wuQ$R}NMz((YrPQm~H002ov JPDHLkV1fcf<@f*q diff --git a/graphics/pokemon/buneary/front.png b/graphics/pokemon/buneary/front.png deleted file mode 100644 index efb01359d430686eef174527feb68c84ec0fd73f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 522 zcmV+l0`>igP)Kls!(vKoEr;$ubQEwiSA>A-%m4v?=^k zPz8D7HZjUZqC(d|r-KvX=*)%&z>H1lN7`%8_&13;utWF*#E zej+8LI?WR?fg}O(cK|UWPPJCjkdaoo2#l0cQUU>qI+Fk|9Eann1gro+2DS%);C0t7 zeh9pw2za-@0Bl6x3-(V%G4(3;nPC42&{QyIt69@7VFj@c-Bta0C|MzK57AZ`ltcw3hm>oZVYr*B4Asz z5>X7Rgkr(_w968JtEO+E46{ku&N%>@gidXMi|}njeyR*RW3^0mp63%5`25wSic25` zYS5_wMAW7*5uR9@NOf|?#B}Ke4|Fs^mkGc!%N94W6k!Z~y#Fs&AI(&0&kY^^$^ZZW M07*qoM6N<$g7?VM)c^nh diff --git a/graphics/pokemon/bunnelby/front.png b/graphics/pokemon/bunnelby/front.png deleted file mode 100644 index d307c4ff339e397a4f9fdd1f4e51012b9694ad68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 654 zcmV;90&)F`P)Px#1ZP1_K>z@;j|==^1poj5Fi=cXMVQc_NGK4Xa5!*KAOHXWI5;@4u&8)IQ1F0| zh=_Q|z`*$U_)sVi00000000000Pv%<@c;k-32;bRa{vGi!vFvd!vV){sAK>D0q03X zK~zY`)zv>w+%OaX@E0lBNmAI8>leu7gv1uWoMd$=Lo5X*)ZF7v>?imFy>!NjV)Y|* zg#kVtwz*@-<(V!WYA=!f%X|Kp82(A|4nFCQ5+{g~bQ112hr6&|n&?^#!-i@00irb9 z13K)kElN$@1G??&_HknB5QG|R8{^!R0q~M(lIAn>804cMjd!gSNOa?|1vmOBoDF9= zHE&^U0N%vM_+$TABAno^H}BgA3{hO-1uzmHpRyB+}$A8jKGyx;6+Fk?ept}SRr zfyuqxr~<@o^K&GF4Y6$A!Fm(`N7XzOP%WF$3;;e?{VxeszZnl;#YRHVKS%&d^s+2_ zRRAqoTqrVtEbb<0&gKHX;c-_qJ zp0WH+fH@*_&eQL3p}SX%93xtQR0a?nuY?Y;paApP>l0%InF8RPo#*+C?)NkEiN=oI zJex#W>WBcBhmwcfbsiRavsDq4BtU^&)%0$NRfW7mPA!$+c0zUnFQ{|t%d(#9)vl>w za*1|3$RSvuPd2#{T+I#m;Q-u#M-uo-a@DFw`bOf4u?t0i-Yh%OeHHzG$YcEz_u>;e o0z1_g%G7lrz+7J;{AUH=4IMb8qS!f~0RR9107*qoM6N<$f}F?}k^lez diff --git a/graphics/pokemon/burmy/front.png b/graphics/pokemon/burmy/front.png deleted file mode 100644 index 20e449da87023f317b15367182a1bed485d385ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 488 zcmVP)Px#Fi=cXMVQc_DJd~pT3R_dL4$*P5D*YCN;!L+N>Xz{|J6#Iiz$n0N@7Ymz?f(N z000000AYRq&j0`cW=TXrR9J=WmO*yIFbG5~p+PwI{m)wl#rq(ZHSe{}WYL zLB&S^Nv&rjzuI6vZUK(+=>@53<+oZ>Yg{R)iJO(?8@ZJ3&LgBRe*S%EKu>n*FFbE!@E z05?L;k2HbBBJnQ=0!_WaT{!*a0hrS#qCVCHAWRfW2_t&`sN#2k8ZB%(Rl~>#Lgo!? z1)>P%HZ~;H#aKdS*GO&2{850#k4AdU5@25y3-A%7Tfk$g4rJ0`HlB+Bog^b$Rc($n(Chjjsk!1f8+UTY#ItV}QpN;NiqMzAOJF ez468yKgJ)>QVk14g6d2F0000Px#Fi=cXMVQc_DJe08gnK$VLRwl{5D*ZAb7R)Ub7N9ct(0^B)=Hd=DPwDEgp7>v z*pL7K0Co9!vH$=9L`g(JR9J=WmBE(7AP7aHAWEYD|GNdP?Q~WHta>JIe{WvEnB%zf z4M{1;=a>KxV}gVb;*SInGhjw60UmP36cD5!FC)a@F-R#UK%HU0fH{Yjkb=C95FoOH zqs;hukS_@X74#HpyoMytCy8GmaFr1HcxsiEXRg#7yuxx7)D^p-DXu#Jb{Uk%wFK}9 z=)AHvI4{%+Y&FR4uA&9X`K(Y)%WRBi0Ud%g@Ck%1^BB5#nIS1U1+)ZgF~|;>SZUV7 zIH$-KLtD=z;=04!j1}HlYcy5B{)s;ge-_{vy?(~l;J1JmZ#awiQ_#E8wk_bG{qD6( z9kW1AqGZ+Yql1|j0r3vZ0%Q{$MWNpNOJn4xK;C|=_S(mKHOmxWyynM_-%}w5d42Nq w-xc2RTxR{#J207*qoM6N<$g8Y)j&j0`b diff --git a/graphics/pokemon/burmy/trash_cloak/front.png b/graphics/pokemon/burmy/trash_cloak/front.png deleted file mode 100644 index 39004627d58c86ade363eca822cd7d42837a1fe0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 508 zcmVCl(9|%K@f)b0_U}2;tO2v0StE%G}j12 zVtEO)-z0&HVpvZiV=h@{S$A zi36yC1Ms@82=N&Y)T15`G^0~~LwJ?(05tdwqTvAQ9mhFzLSQp^p`)b-F<(ODdCvN^ z1kPEY837y8YmMS5cUeaYD_k%mCTKM!{V^`%3qw#N0$e80RfsPHP+$@Qv=N6C@cfp* z`kLMmllX$4k_dhKpnO9)Jo|E0mzk|p317CZu3c+mgyr2 zh*T=2(vLO;^o^zUEZq_j{Lf8gHQN#c{9QJfTi}lPb^M+1a|2`yAjC~I6g8rQu&d>m y?6_A@4J6Uwdrj$=b9O}LFZd_MJVFltzv>H*2b_BARaB7x0000Px#Fi=cXMVQc_0000nF;ZGebAyAu?(Y9{VywNr=H_C9Vlg@YoU|}7P~I^yQhUW} zz0L6W_`V=PJpcd#lu1NER9J=Wmf4o0FbqVa#ViT%|DQW5$p!;Xpr_B7mx&&7dP!ZE zOETv1_||_=^jkguk{~|?5bXq;0lEhwMl}F*&kC`!Cfx{ST?5~8K%695t%M9PBRBP$ zf*|EDdn5M@D03nFP!9m)R!J+sSx-?deS+FP!UEMkN(m8mX-gdu#3IlFqbfzZ|CV@0 zo|7C~gA64A>K4uhD!Ibw5fF>}CvrR*Smgq_$3T|dtR37T&({pu)Y$%U2z)6Q+qzYT zpRXxP%m54fA+SD_9aJG+8L$zW*-sG~2}iL5%@4&312F7E2nW_kQr4^%lTGurJzC_G<;_(LIS9xCO8fp`Qb=_ybk$?%w_y7O^`I9pa0006F zNkl1gK4Yg=M!cqO-U(DNa={py$tEmD5dw=E!+e3Qpk%P>vb@l{g} zu)bxQed{hU`f`9;lUvieLo{xrzN&Zeiz9qAR9yyCZsx!TsB4p%EnR|kgCAX-U97d4 zEw7>bWZlK-_g@;auW|r>PB6V#*U%4SetGoaTvQmq1i1_-vl0GLnun});6GY~pES(! z6!J{%@UZuuT8HeD&~vE3&{<5Wp0~Q~%iG;WEM%*~LZe9;QhUs{#;P zBwTDE3d;6zRdUSd0ncZkVmca*GafO-in{|eOwoth0!2HL1@~fzFvsd1$Z?WzrP_&x z_RwFBy@6Yc^g7OWiPzJ&^MKIz{IfIQA@{gK!;1R=IREDQTfp-?E=n9LM0H&BcR<;3 zxj2(H7Qi58x=0#89mYF=vRcd(qIWhcgq|l1Dx%8vQ2`G?A#I4gC2!jsfYkV3ErZQB z!+{l#4cpng&<;Ns8^dA%P`w8j9CXxpw@IJgZYPc&`lPLI7p)!{$@@aYzed6J-b#8a cPWlh@8)LrHxxuZae*gdg07*qoM6N<$f`9oT1ONa4 diff --git a/graphics/pokemon/cacturne/front.png b/graphics/pokemon/cacturne/front.png deleted file mode 100644 index 0e7587f6f71cfb7e9cc51fe314d8b02999be9282..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 837 zcmV-L1G@Z)P)Px#Fi=cXMF6nqAW{Gj5D<&KVq&yvN^=k~lu{UKAWEcCq}6kaYB^F;QufUNd!%B$ z?t^G(XsAn`4FCWF!%0LzR9J}}A6>v@`@!tPz1*XZ}(Hp_}`HmOh?*YWw4n%GMCV$5Vv&(>A z3Dg(BPlVY!8@>>(AY_vl12)8fKSd^){qvasVFNf1p;u1{aLhhO{j&!+J^~BsDS?xL zVuAA=fmtQz-hcxsi7<6~a2WKQU_Vbh>kfpEi3@!&9wa0SxNkmCExO@&s+nui`^SfR zy_!oJ0%nW;>;DU{_zM86MKc|c81;HZYT5#HqA7@%4PZtFF!@3V66u3+{bnjRLE|ac z(6!|+o8dHV(nRP0latfxtsLH4Bo4KQ=kMG*w-95UZAzhIMBis4zd^m)!g+!nEHPRL z(jK@rcf%P<_wETI`e4f1iXlv@R=aef@)ZHzfJ*Z;eOGtvQR29agmo};NH7fvECtFb ztP?nQpPO9G$4y=g4@-ukWoQ1bD$RS+s?!LIjqq;RiP6Rev93WKvg@KQi|Yv)n|`wu z(dc6%&jCz&w-KUPPe4WR&)5NS#N$c@!jgJg2E>|8$aC`^(E{?DCX=c3Nxy`ymaxv= znb5spC73knmwheb2w=!#KaDA4J~$fiem%R5^(AAD^2v$GWqSgOw?7U8sI_D*;n`0= zYpzMBtDaFiKMp#6$@!{h>iJ7uZ9e2~ymnbEiOKVyy>8nu5XU7z2r^c(vvm=rxKoFSNjqe*T_VzCpjI>%NL<6#R3NA!GVLme zMEU@(^8|s{0?m-AL;3_=vl$uv3_X&vY{O3G_6%4M|G)d-@hHRi*UYwU{dh|Ea8Pd= zCdRh?VvBBiZp#bmhKUez{cV7Q!PhtT5-hnbKmx9T1Y$4P7GW<*pa|DQNf%?(d+6N!NFiZvBn(s@F&DMsJX>=sP3B!3edJ0ENBbdDggS z6lrq}FdHAC1vWxqMmZf`q@1k*^n~{cRO>n@WRyyTiq#ZD8qq9s_Y>deR2!q>Y$4|W zM}4x10xyvGY*7xu+DbcPL<-gE-;_=^HS&%WNmdO-(E z?+N_IS2sBn0fCFVTPzDDra}Rh zYy@06u$Sb$Ujo-EyaJRt3V5A-0D!}}Y40UqdJ1sw9RLJlOo*)jvXPFkP+?PrntQ7R z5QWkL)c zOGmJfvgphp+7bMARIs#c1d)1O4M#{dV2J_fWN~o_AuR~303hU`MYA;RSC_X#=8yf3 zJXtwfD#XdG^Eh7x=JT2QOvqcWhJbWtr22eV0H}NR07*qoM6N<$f=C>g-~a#s diff --git a/graphics/pokemon/carbink/front.png b/graphics/pokemon/carbink/front.png deleted file mode 100644 index 31db1394a04c4605e4c1251a5ebf14cc470a2613..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 616 zcmV-u0+;=XP)Px#1ZP1_K>z@;j|==^1poj5Fi=cXMVQc_5D*YJKv-yCh={1j`1tsUfS|zO_!wBI zpqR)2p!j%*uvozG*x1D0l`T` zK~zY`?UTQ5+b|G^X{DPN(?QaqODYBKY@PqWgMp%A(FbTRMQe0Oh#s`J0f+8}Jr)L1 z@BzAH^3cFT&^O3Z1kMuZT|!Ek!jp#1{sH3heLRXsQtYw|AK7Ww4~tN{Hh4DQ`g)`Syd1;)EzLWY-ti2ct5Fi7|wfvOCfy8xhqQLi83Fm{NWYfku!c!%yILcC}A9#%Q|>V_F3Os2Sfbnvzx@@QgVSkf&PMG^jHq^+HL{$=WT z@h=b#$=a1S-mkpSXM~9}hIs3iDhl`+2rbgy05@0wYdfJp7 diff --git a/graphics/pokemon/carnivine/front.png b/graphics/pokemon/carnivine/front.png deleted file mode 100644 index 2d26ac90484e7a138ab95f414b790075cbb49da8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 788 zcmV+v1MB>WP)0|5)00009 za7bBm000ie000ie0hKEb8vpKls#+PKp4j_gCO22A-ADq@kJtZzGg6< z93G|dW-E6%j!UN`yP@VhrbDpk6yk<(cnUNWJOzvgb5jOyqFcA*8}vi;xpQ7^t5cUk z{ve<2|4+}`okYls{y#0bs8`v(>#L6^G|0PNxWMOy)4-~gTuppvv3~@GsLvQ;J^YA0(7Pi ze@fUCQ0D;UnJSzDPRJkyfL+P`S)VwePd$tRUTs%Of4&PRThU0ILAi*WFLZ_tLv5)|v*efQpMw+wI* zUGj2cRK5308+T~Dy@Cn6w-?bD$ZIviLy=R8v0)Kcn}e4VKk-(M0rDRwO{Im{VT|<| zQ>776B!>j};Q7YCPJd~I7Gv66!z$Skxf9~laKKO&H|h22O;c+lLpE z5k_a%tLbezX&P^As0}RG8MC3fn$|t8xwmQB9GME38Zu@ZYUti@jK${qdL+`{>Es(k zmMD#tCHi{YLtgcm8j(*wCyk09IXz~j&P)nr3H+t2#1Z`ba|No7z`smc2sE`)NEG{8 zW4tauZ-Fn45Eb{kEwC*NqwS2lydwS6cby}WJnoty?tId1LESw)mz|{ZWZwnOMojl; zxeZYRb`vR&o*k-(gv$dCVWUctgkmqf)O526hJSYo>|j(Yy_m?n^B`U_q%4>I#`7QCgNDgH}S%mlxE}c5M+}@+3MIpv|40SWf~q+Sav*C)$ zM@WF6dW6n>upUbB-Ok#fS|oxW{{LLaqekPud#tnf_nW|&r#}pK0tkdiHQ~egQJ^~! ziIbuLw4`@r-wcJ}|c|OUY2+ z0b1yBpYI4@JM*$4+y|(D!P%BTgzqN3)dU`UOb9*1s^3$kp6>LAZ{Lh%;6&fB8Y2X_*A`Jke4Od0q$x*h&zmR9zMu!NfvnM z#IQ<3bgL|qqy`iovtaU#UduwL`6f!!Czeh*6XS?+&Y3G&Pl-qa^)L&4%o~9icSix| z5gWxrUID~g0az0=<2?2Z#wJ-D^H>8(4H#|(G$x#X(rXmSvP=VCNqvEhnT_F?eDWu* zmH{835vEB=GNr+-WT@h?xF|SK@IXlTfPkR5(BNozEuB^X0006d zNklljA6aZjb9x`;XQ4$dtGa!V7g02p!2pPRw;mmAVcMBbmq7bVpED^GY zE|ygxcR=cx>n|XpBglir!q6YUP+;IU@Ltj?6hAvN;tg5emwWHtoln#Lx6rqNTRr^k zRf8tx^lo*9XC|tk8aVDYFxGmyQw#LKZ~`4GX)^*yZjYNXXk)L9ISJbCuJk& zf(zc4LIP++#5kIQbJvkVKrWnCfUzT`FzE_wAf@!N!ngu70R%O`+66Gi7N~Kxg_{9z z_m~#Gl0=hj(Mh0#EXy9pG;p)T@jC$0$fJQu9L&QKLX?}>IliM#{Z&3oJ+Hitol~XG zI#+=6a*5@MQcIO(dnjyT4$Fl)J5h`DNgYsXG3%ySqXcyGgTi<>?4CoB)U-^^vNma} z<=_1Y`5zyL-_9plVp-g`qc4YpuStt@JhjbE494Z?-o?fHhfmqz zAht0t*o~bsHoDAz$d8H`BeIG6U=*JV zAS*HF)QuV<00Lk_90dSx|C3w;YSK^xw!U9riTPU+Xz*1PE5IVMgl2f_3KJvZCbdz6FT-IsLQo8%15-uSS$bf&c&j07*qoM6N<$f-pHR Awg3PC diff --git a/graphics/pokemon/cascoon/front.png b/graphics/pokemon/cascoon/front.png deleted file mode 100644 index 54081095cc1deb0a0233ffc294993765e17e75d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 554 zcmV+_0@eMAP)Klud5JFc5|FbAcG8UQ-LAc1MMqeUeEI zKrnl|!BV$9LRY9)=qbA9avg_|#tsmvYaUWicpvZ07!=RD>#mFP=YyMYegVh_H?I>w zxVh93|9vaH418Q|Sf7BtBNPs>T(v{M+$V&X0JkBi4dE9r6adz%P>e=c)+RUwA;cDn z*loZFvGPJ*3ZpFn7y%e@_Jsh*GxHf4V#$`AeJsf#LSGMo0EasR7_m@3(ah>tK%XEu zmQbziArb`kt-TWkK$R$a&_F@C>jL(`5pWg>GUx(?s1a}ryhT;kq6dnq8UY*-*eu&6 zcmZ!Nki@`+c=~LQffto@fkyydZVrbB^bu&rK!dwIe;s1{IibiZ>l9I82OLj;)Xo-R zs&oeV`|;SI4U%eY9rQZYib}}z_m2jALx46wqTWZGC7J?7C)E;PiZLWfm(Li+1={3l zyizSCjyPi+qTw7&8n?aBQ~!+Ft1x3LgV=wB0g=c?Nvf{-I0uV!=Hxnxvs*68uc8T{ sxmn;@kAN$HoEjpZ0KC~0aMwTe3mnFKW-vkq!TPx#Fi=cXMVQc_dpSz~dqMxSIsZXHAbU!z_CWvu02o?9YSl3@tU>nfi`Bh@dxJ_y z$SCmWh*r%*X8-^JZb?KzR9J=WmBE&SFbGABnm`Eo|KFVlQIE@@yN>U)UG-jpkak(V zeEIU_my=R@$FJL(-l)>PLXeTP?fYXxDJg9b&;!9RppzXubDYnGU|3h+RI9`d0)fSF zM50~fQp}JXZ>?$6Aaw`^-$^wl$X<7HzP8?pf+cXhr4c<5h;5OK7KnOSz&6I3S=^v1 zLZPE%E+)VNh$#f28ZmG!;wWku!GT5uRIP=KN7LXl$zkYyO5g`683J+~pBSd`Sc@sc zc&?!qm{jT^(8(I^d zxGn*vp?p?0I|Nh>ntTkDuj{}(Spvq0mtAJ^9@MV`V>bgA%Symqf(2{A%FNes%<&DU z2Hv^=kGln4W;1{86Au*d*lut;zqz}VpU_}H+(Sorw(*yxaGaDcF|xWE7a+u^;70004r zNklUGFkJg~GyDQLkDAmW&zIQP#G(#^S3>`-3N zp>&YmHz=W#gR9_VKY<|l8N8(HyJXa%Z@A_Cc<&`I7l3{I+px-cpq5vHH8Rszz>c!= z#akHF4Y_V|^gI~4bdLisDR2Xp>kdfJ^L8CHAbaRkqPoCX7P$5-mQQwh1F-p9yyhu*B>~u# zcpc%#IpUHA5X8E=l%J6i=<2ewX(@VJDR`FsxUEdzR7-=71}}y@wDkyQ{mZRs1hDaG zDet9flzwPXm?$OXc3Jw4-)YfQIu;jSQxkw;TP^$-f4VVE0d`ZZFmfEz-EgW^rG*aa zRXE^ah>zomssu9%aEUlVR=0g9P%Z447|T&8Og9f;ECv>18KA&iCWP=!yVQRMQ5lMw zs2IViXn=IHdPsdVGe8=4F39;u0mz*EKK?9z0f7a0C)k8Z2><{907*qoM6N<$g5vSy Avh;J^|uIxbT!6 zf8+xwcqIo2CYXF=y~+qno&!>M}hmE$FReiQEP$Z0+1a6PB*#p$qjs& zJOEh-451sOW3O(6ZOVf0PK%cYNRxF*LuL%{xD5Ti7wg#Y^I&2BmkkO zI|%vHReSHXp76!wrK#!+czrhuKACPr1B~ez@|OgBHTBv8W*MSvoQoDv0QGjq7o0E5 zyYN*pJ!=7mf_-dvTke2OTQ)%YjbwmHt=Pwt1FEU1|Kzg10w0p=Bem?Kl1QdtgW~r!Olr}4aj8rLtJnY{JUOgZ70Z@?I=3r?7rUe1E(-x4W zR6+)TWbCQ17FNMpNI~ut^?>$3`nZ~}Ly`ozYp(ww?Uqc@c%YiTktG>Z)QzDmZ4rpf z%uN6`TG5$%fNPSLcJpguctwDjzaUBk|Ak$frQ5NUSy#N68s$<$t=d0`^jk#oC^qPD zYy~=iZqW)aM05ZPdu(U2yVbn3M03u10`8OfJjo(Njs)CQgj8DvseSDNjtT09LK>ot-z?I%S69!a1B-pBbs^=Kv9b|FZr9yxOI*YZ7_s00000NkvXX Hu0mjfU1=^z diff --git a/graphics/pokemon/chansey/front.png b/graphics/pokemon/chansey/front.png deleted file mode 100644 index 4dd2e2fe277c4fa97cf22d424880f6c735a28520..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 591 zcmV-V0Px#Fi=cXMVQc_=6i#SK|%lK=Ks~+i$Ou|dwcezocQ?o5D*ZHK|%JUw5+6ab81TF z-n{?-016DnX8-^J%}GQ-R9J=WmFseZAPh!@8YD%1|HoYt!bJq6+rNG@9e28(V+d|o zmN#$SOhjqQ*R)bUD@A?f@U+h=QGZr2o_L=L0|4~-2?H2oqC>BZ3=N(n!M1JOce>vO z%uX5P=@hz=Z^yN~Jam!-l(ORA%SCGFDIoJowbswy_`gl+gqwjCe)UT3l#8wmzDXND zt6>Q1&pZ{ZOPKz#MMEus)B)YxLK2W8Y?f&(L3)5#LS;Y5KyK6OKr|q>AD`9$((RT5 z5TWx576t>!(cI3G_w`@5)PE_DpAx9lxNOk!zCn-A0u|qf(%>AT3B79Lbq7>ZMS*j^ zRb9LiP!Fy`7t-f1EvO%#_({RK?)!dU!MtGKt+o5nC}2)NxV7hb-1#X%;JqLj+&6+V z3*4L_8jkZ6J{a63qv@OlDMy75`9(Xo(vP+fK*c*8p0}D`SCb9?b1m?5ra$0CV5A88 zPx#Fi=cXMVQc_=s+NVFc|Ql5a_U2_~2;GQb7<95blF12tZIEaFEEz$oTm90D$=J z-h1w}S{KMs&Hw-dZAnByR9Ju>x8(zOR_A; zvP{Q1zx?@F*H!-h53n`>(N|)dzTO&vety0o*z|S1{oYC#a)tSGJ^Ol2FaS6ua&PoL z8uG~^{WXGKLrRH7n{>QD5V7jju7nT(MW}`35PioN0jX9ODFLWHJg5Z#S%<-92shXO zX5cq=f|9H6GL#`{o#yUYa1uFUsO+;)$ z)1LtM5uoAcTnWv>t<5+9MhmhzIX8kwrv&;Kkb6K7N===UXnAa3ioOTPS0_NR*aJEX zZh+_rP%;gBGzYi=VlNfpB(4j~klIJJ*z~dv4*>)~OO6>!N6-^61F$eqzmh3pyuD0_l}T7 ze3C>IfD)pkoB&Elbwp37h)CeQq!#%ex#Gaw`T|FjtL$!0QrMbZ8pac)Pr(P2AqJ+ z9)7r5V16C}*eR-F0!S7kVMEAI1{Po5lJuAnB##?eNqewI19eArfg>R5QW8~9+ADpc z=Nw?k4E-CxvqwDZ1E9BQDa1>?1B?&|eK!J2W$D)@^;oo0-`}()Xx>6Aqd>YrvN(`#vpor0T^$8_8Z57z}JK}&3`BrLV6p+ zCTE82>2L;?s(uZSzPN3)O`Ib1ZyW&oh8>g5u36aM5wJ{4Mei;fZ~HsIOLIGD-|1fg d+Vv*x{sPnANiW%&oW%eD002ovPDHLkV1ht2y4C;y diff --git a/graphics/pokemon/charmander/front.png b/graphics/pokemon/charmander/front.png deleted file mode 100644 index eb0a9590d997ad1972569ca6df798dcc42e722bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 577 zcmV-H0>1r;P)Kl)p~HFc8Lrr3?*|9Wqv`-G!w{!4$Cr zJ0Y^@k^v#LGp|s@3$T@`Yw6OpeFm0-IvNQv<7eQUq@X%>gqRrm4gI70x&h#D;O+tCW5C})qYCIlk{@7f5^YF8Xav9X#)8Jo1O)7|ha-A&=5nU-ZK;5n2|yjC)Y?*3;6MYV zuhDrmUIIl8WN|Ng1K_m;+BN{<>Z1Tyz7Ru91Mj*C#BBCQu`aQMWiqfv(*p3OQWCb= zg^e{=)e0%^NU4Ds)*>z5O?kHfaDt^J0RV9(B?Z4^a%D5W4~EDjg@tD?ElXT`1}t+4 zAIu&HKzoH^%ZQ2+h1uG+8RqKk=Wi8t-XXpa`PXoG??_Qfh?<*jtH0|D|BQmCgt?59 P00000NkvXXu0mjfSg-s? diff --git a/graphics/pokemon/charmeleon/front.png b/graphics/pokemon/charmeleon/front.png deleted file mode 100644 index bdbd577e223dc1dafe79c248e29923195ab60363..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 758 zcmVCl)Y}#P!z`xi6v*m$qSH#2S|GR01>g> z0SPhW+JHb}uup^l$%8)#OR`k7%neQ1BN|?SH|Ug^EoEV?x_~-{bL|jcf2c)bgR@*+ z|9|&<-E$4_ui5RJfaXm=<*(v*{sg)v1WBw@xpUp=Dq}kx*fK_5X9SSg+H4hkSUAt* zy@GBQXcN$>vg+?z6f5VV#kvh9doj_?5VxB3j1GZ?PEP`wT5CsRQnP$SbR|$5 z!DO>n(XkMFGSJf60Hc|aL=F+j$MZA=t={NT2I>jAdXnRd$TS@Z(C*%2Q2QKU?3k*& z|K)=<+ya%lw%cd$e$K5pHv(Rcjw~DXqgh-SJrK$Ou5NNUnU(Ezj|Zz0AR>9M@}>J$JqzNC%5 zS`Eqok7jwJpYvV`Fr-ovef7;K0F(reg#J1Pf?|v@bszC8cCh+h0;oT^iLaK=V&F?Igz;7<2=tY5)KL07*qoM6N<$f*`n4j{pDw diff --git a/graphics/pokemon/chatot/front.png b/graphics/pokemon/chatot/front.png deleted file mode 100644 index 41d53718e40c13f920c10f42b2e692c821bf50ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 552 zcmV+@0@wYCP){kjNk~cqm}7pok#w&_Ezy5C8xG^cvp800009 za7bBm000ie000ie0hKEb8vpK(=kuNKoke?yV?)XcNUF?g=ZNZpkZTZ z$w4#`l1k5=MEU_-bR}`%D>N>|xELoBwoXPybTCc^23LoE2CoETQhH@Fao}yu|JV24 zU4f8I{oA7J05jG!u$^_Fv<_hY42D?B6%t_X5N1h{(}E(Gz)^$B0$7T-0Ssnsxhg=n zZ7eaX<~J08*>)9~DLkEJ0*VK=9N!cMX(+&=ngXDac?z}!-GaymH6eKRj)>(`#8zKG zW=?i5P!zD#3M$zbO)syQR{)S5JOvmI{3e)z5)6m#PA>tTV#M%z0CK|b3T8?i4O{>o z1V4v>^mXd)IhT1&>?JKIFee4dXMwDK55kdrVpS^zG|`np2rmpD6R`5hH6ib~n*#_6 zUwAeDI1D3$0^-UC(ZosFf0y}9w10~hPwz+w*C*|dP&SC7F|NkRLFeqTY)D diff --git a/graphics/pokemon/cherubi/front.png b/graphics/pokemon/cherubi/front.png deleted file mode 100644 index 75b735e577a52abc12330650baf50d8562f71a44..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 432 zcmV;h0Z;ykP)Px#Fi=cXMVQc_Ide*L%~~-*Qc|Q!L6kud5D;oPN~}R@-eQA;F;YP>G5?FK|Ns90 z000000Dk#~b^rhYE=fc|R9J=WlslrsAPfYp2=oEx{?~mHCXTyEyq1ld6f-Oc`#5%X zc6LGm%fIlK1#p>v%?tx#R&?`jKrFQ;73C`^Sd0Bku~xv&q2>*MNS_h~CZDQcq2h|- zx%d^smHNq|pjIM6%nPOgh^~K>7975Ep&O$t?+lDf$jm8>J>HxE5Qs%pCB8miKx0Ax zIuN>Q#=vq8zBOYE>fL?4Yj78==Xt8*9v6sS4T2TK1u}W>-9^+k!9f8V2MKh!>&6kt670000 diff --git a/graphics/pokemon/chesnaught/front.png b/graphics/pokemon/chesnaught/front.png deleted file mode 100644 index 5e2191810666df6fa503c6b6459e53712e4252c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1048 zcmV+z1n2vSP)Px#1ZP1_K>z@;j|==^1poj5Fi=cXMF6nqa9}tP5D@6tn6RK|_y9;?ATTJXAaFn+ z`0(hsxUl&6_-J5YI3NfZcn}yk7)j)R&j0`b32;bRa{vGi!vFvd!vV){sAK>D193@2 zK~zY`y_CO;+ej40$I}OAY{Rwkv-T`cuoroJ%QaV6n&#Stb^7GIffOkWS#>tJ5*%(0 zuFw)#P`APm$bVt8mD8Ajnr%!P?UKf%S>@?Ryq09P%rp{upZUJ;)69G17p~ItLtokB zE7cFhyL*5rN|c1M4-_Oy)qQ|83KCV(B^e-=C^42gV$N zmq-XSkQImk!Gx6fFpv282O~m{q`EoNs%S9LJvw_GNfZSTF!X5Ka1cqD zLKq|uG;o{fHDigMkOhF&W55{3fRsuB(9J)wM&lyRQ7Z@#R#R$O9$Ty1cP(JjZbwVmLS-p5`qIX#GFHunYB* z!5iyh0J!!mQS}er+w0}E^GY1O8A0>CDzl|h34DIzd2nhTS#5uHfdFK3sMS*ss9J8Cvg=$Pl2m))g85!4GYowIJM_{rYe+Lhm<6vWr&|d4xvL@R}5)JRm51a7o z!gC2&_#F)Nzt~#VI0d$ot##)(OHU!ZX-&9`Kd2o^Shq=%hm93}aGW{1qOQd~PwiKH za2|F^LMwEf#ifg{%Q@h`s@Du4t*f6&%3F*(3orWZu*A6MM%R%qq9k{51$cy)^Q3H! z#2h432wlWU?$N^c|5}dcCWe78=dO&~o;y(z1Yn^}Juf*|+T%+X`exKr)N`()9Mt9r zqylvTT$O!nAKU<*+p#8uu6cWv3Y4&W4SFxec_SB*nyKAkbbB@(8FRz2`X3L;}z$3hu5A-t(lTnVF0itaZA7 z@hD3Hx@#Gl84^^oN)E`b-FGC}(*QfHP-i=Zg8&thJp#oM_00E$tR+C7vEqnY&t{){ z{RF5Tn6uC9wf(u5oEtTL-_Oq|8cm$^TJ%=P)P8|dO9bnr9yE)|jHu7cp!KNmRi|M7qC-6fW_&_BucegWKhfL$vAMhvUXc&r41 znhhQUVqi9?p$HoSTF@cC3V_OVfq@Gh8wi?_13?+lBfxX30R&Kly%P1dd)fe1Be31W z0|4mi0?G(?=a78r61eUV8Ub_}V=JI7pd#GeGbyvQ0imXVlAGMfOT;va^nksa4J9HD zeIsy-S9pu)N1-0rd%Q=ar!WCYdvlEKjX6N;`Sq!_F}yGUR#K!Ki%c4URV;OLVVJ^N z!UWYajcG9~IM3)D!f^I`oBEKHCDO=`>bfDI!Q3Kq!T5?PV@->hBu>M|=UM>;49`Ki&_(Px#Fi=cXMZm!LVv8w3Vi<$wF>16a0000%S{Q?rQq}g0?*GNK&1%KP#sB~RVnJHP zDJkxId!eI)&;S4dbxA})R9J=WmFbSdAPj^H37BxC@Bg-I15IjMtG4a%?9H$TZvn86102od_v{EwfWHaw5&+ik z8+HKz=fd6(LV%|y85Tc~-?9Oa^Ww+xbAnJ9fqyB9kY^V{{vevbK8ffHp-eUfP{xv1 tVVP{O71B3xONvpDyq)Eq|Iwqr(hp}L7YaO8YDxeA002ovPDHLkV1jkE-dq3x diff --git a/graphics/pokemon/chimchar/front.png b/graphics/pokemon/chimchar/front.png deleted file mode 100644 index 1a0e606a875800d070872c5ba861a693630224f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 611 zcmV-p0-XJcP)U~u3_An4doBL$@Y00009 za7bBm000ie000ie0hKEb8vpKlreA9KorL>STP&Y#VxSg%8k36=S!sGBL1r33C_PYvy}bsdN99 zb;JAV{r`G?XF~3DD>ZHc?saYe!nV84gd6aLa9bGQmD^%VFjtEPWi04B>Mdpz;Q$w+ zX9%=~wlrMSUR=>qsNCVJnWW?%E|`hBPiQY0)&qM z0p_|3Mh9|wWCa$d8fy5WOT9pVj{y49>Ad>9m{>zjR|fdHS{Bpq2=L1U__7b*8uq@ zz+XG@4&d2j6JU+>$dcVbV9o~^K)irb6X6^M;y}iGWWD}}gz#8@#N+4R&W{nG5s|cv zf)~dZhzIWwxgXKs^3o1?p&7=kP3g-Ey9GBl;-PL0=-dBRz(gcly_^qPk=;QabiAG3 z6CU;Kcgxo>_E@;hw^?ZYUiXXYh{Uwtg_v3azbF#o#VNoH0aQNrb5&IJOzm1jWC)S7l1%Y*7xMrB002ovPDHLkV1hKEd@3lb^u<`J8zvj z0j)b%#zilYN#|Xj^AH5QT+Z{D!@r5BltV_q0eXZSkPd9?noF0f^;iL5DZyPRfwY3a zBPpFBIH~~9DwVl2!>mjR2pEXXp{6ECOnw6=dLfh#Px#Fi=cXMVQc_T64uIQj}_>=Eal%|IJdA&E^OxS^xk5gJM!rDH#9mgXXj;d%fng z0000006bctF#rGp0!c(cR9J=WmQk~#APj|XA~C_@{{Nr5C!kgYTfO_T51yHJT07@! z5<=kT=h378R0J{e@6AKeZx|tnjN?eEYML3h?IJLjubFX!Q0x+?-7}->gkl$&s;406 zRsZV+dzuci{UU0qhBi zWmOjt4IrKQ-vA|AT12@agp>kg9{{@Ab1p|hbbIXiSAbT) eJbLu#oBjecxDhjJT)jR30000Px#Fi=cXMVQc_YB@2iQZeRYQq|S=q@>LN003fAO8?bby_`z_=9GhKO8@`=00000 z0000002iZ0<^TWzJxN4CR9J=Wl-q8^APfa#12zu(|KD4iP14XxZBKZr#CeFck!E~> z?6$3}to#}xn!`Dz2?OOkB_IyLz+(eZDw#;={w5(yk;G2038FgW1(G@t_SVGs~= ztOXEI%K0`!tRT)sequ&J_FRHKklzgcyI?CWD1(3r;a!mU6vRB4nGoLB=zA--ZVGxY zLm(<%RXSg=`rRPaqkf{^3(mVityYWm!Sj2}dU-YGC%oCd*PiCP5V(A+`|EWWDvmpU z7gR<0KK*|2)gW3`t$qnIgPKhXzVX!%gP2&=k%t7Eh*X&oxZym$lQ--j)!MPU6IWBH zhi2B=u|4r0J?Ke^pp4bALNgh$R3md!H)CKkW$C>ibCf{1 zJwSl`%HA<{Y*7xnhX!o;-skQ}z9$LsTGyMS!x!S~-?!26QAZ78iXW}@DC$WcNYoj{ z4>x)O9uWX25{`vf>i}`P07cFi2sS$89e_(5j_AwjZ6I(VD$(Nt@U-HWfMh?QT#rqM zY0?2?xd!^&U&;>f;XC&rU_ihZ1|~kBo&h!g+6CtGvdkIK4oEt{_e*MWOnGf=V#B@_Tx9>80J%_``qu?K{3U7WH_`8_BqWqlyfFgtliz-f=2 zEo$LcXmt9>z{z`1Wnnvj$nNy&o`A;(+Ji-Zk3v|~E9woa2bfvx0zqn*1z$#?^D$!6 z(KBpJ0{j74AufG=G^8wy$m%2c%bHNa@E= z`aq6c(W{*;q(Tm$oEa@si%lGiJb?5lGGs*pWr|HL0y@yMA(l?WZTjvR*XPz^OvG>t z+{CU8135WH0F6VqwKTw(3k(|uDo_R)5Zj>$2^dgI0>G3&Zo6c=_1wmzMbtx_@<_{U z4K!OItjVPe%~JBa#XbQ+y)#uyL4XnAQcAuDH&NEKCL(0>4#vhz$06MmCAW3@Pv(VE zPNkfLraRNLQqCGvkG<-1ow4*w`^10r*Sh`z9BdF#=@JN=00000NkvXXu0mjfWX4fJ diff --git a/graphics/pokemon/clamperl/front.png b/graphics/pokemon/clamperl/front.png deleted file mode 100644 index dab2d9881d398721004ea079608d459c81721767..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 645 zcmV;00($+4P)4NLX-~(CB!W_^7D3*!YmZ_y7O^2`FcF0006I zNklljA6bJB2l!5idVJ{{QvvsI*D33G}EUw}p6*`0@7t|3fcV#fbbyZIw z5#R%u8<-e~?h~M9MatsLB@*`;IM))SXEz%XL;s`SFYn#E$R^}E|7W1SwYg5|-A(n1 z>r!Zwig^{V7#lzX4QQ7B9KiB$0C3X*)uxcDL2V0>0l3U51Gn6Pp@2Vx9*)a^HR(`> zh+`MA<21}IeL~+uHo`o+4&2t)tv<%TQGn96-eC=NoNcB9VvW`Wn;Z=r8mRZyXL#sq zpkl6f$i|E=gAVg9gIyh<7QbBrx*<-dZ*%ZW2NU%$;!`1J@575lG*HV#^m%@!1P@9M zsl@Y;e{$zSh!08DLIKYk2RjptBF>M6h`3yZ*wL5RX?1xL@n||#EQx}`J=J<$|1gPG zoJSc~ksA5dQilD|x@suJ1+M?H}?x z%&-d$GErwQEC6QuKnwSj3uCN44co43l-CKlM{NLV*RQIR8l`~uL4WDihtLM8Vc7xy fh)u=o{Nwxv2%Yeb6H8b~00000NkvXXu0mjf%5)== diff --git a/graphics/pokemon/clauncher/front.png b/graphics/pokemon/clauncher/front.png deleted file mode 100644 index ade9f6518cd4eee7dcf205ea8e3067cd9a41a9f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 604 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 ZegM+EDV{HN^O*nu002ovPDHLkV1f;T6JP)U diff --git a/graphics/pokemon/clefairy/front.png b/graphics/pokemon/clefairy/front.png deleted file mode 100644 index 4e959bd4ee1661acb40f00ad356e9af4f2159404..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 528 zcmV+r0`L8aP)Px#Fi=cXMVQc_oKjNedwc)Yy>m)AS}`D;gL4oN5dW;Kl$4bJ|NrhmIh2%?usA3H z0000001HTVg#Z8nj!8s8R9J=WmD^&2APhhaktIO;|G&Fja9-+4Tpwp1>ZP7TND!y# zjyvwSBNPDe37!%nURTT-#-j(Uf8;#o^ZX?-rwI@@hHUpm5fI3e88K}HNhZ^I8Vkgb zl~ObT@NzB&;jam-i0nsZ9iJja$eH`FdO)&Y7J=|#LF#!g0=dH={CEZ`FkV-H^F4z^ zu>@rKaUYx&abBmO8RW>i^2&E=IYlmNkdD4L6f>n1P|d`^R`G82Q`FR z?8(-e4o+0bFTEGQ!!G`2xw!;p!ci4yD|ns>MvHlG*zstB0WXH#EY?W6E(t#{ zXaXrBfL{b07n~Y6EI2o?2{^*5;HY5dAtrDGA81QJc9po`H7LlN0bVV{gWc$m0vsKq zcll%z;()XY!nhhr=?MIZm(8)3{uL2JQQbAcwD}0heyX}_{81MArrmMJe~xe1MG@Wc STVEjn0000k44ofy`glX(f`7zFr)xX!q+ zU`0T{|Ep*JFIjT7xj9KeqS(uDP7;TJfWXmi%^yF000n_kbAal>K=H#l4xl+ao-U3d z5v^~hob5ZTz|->DzF^zi-}~QH%_)g~+A{laoQ;=*)0yRrJlmsJU(MPY=Hhbw&zT}t z!8*1_N)1=vNPm~Od}xi3PIGpM|!`QQy$?c429XIm^{a=m}{~o4yHiig(IK2K?cAWsj36X!|3q!c{ zYU(BSeA^+vG-Q?g?d}SDSC@dRS`9rJ1&dik z?y(6sa{k*Rl<_!COsVC!3ctfcg|~0|MNgmdKI;Vst0EPx#Fi=cXMVQc_ds2hdz3!}gy-FZb5D*Z>#l=BELHPLil$4ZWVq#J$T7z1oYC(gf zd%bvIuqFZdegFUh+et)0R9J=8m+5xmFbstwTP6z)@Bg@?-Ofzxko4E6r!5D#A6M3r zFinpF;F&JuDdVr?DL)6O{IQ70EWgm}DDD-m9(67;RtYAU z1p{!2`aQ`B(_7}(yb)ug;3Q(QvJr*=eggw23PrV`dIIp%S9%7N@|KX60@r6fD~*u> zmm9%m%9LQ8_qP!n12#bNpPvedsmx8=|1;p&8X&y^mO`iCgetBJFZ2m&3E04{dIm57 z%t1bv3qXp*fKMF2M*&1g&0wC$jX(gdz_K`CVL&vrm7-Hev!DP&EM@r!z%~>xq4Zh_ z1Hi_^#9MPv08qmZdJzmjsmCEGz*1mse;Oo3A$S*kZkp_gmy@1iA?>jj=y(WeZvjkAyA zzVD@|fy4+LR#7*nEfhlRA}_vIWu1(6n(r>QFxyHho7cbqBL|HILoj7sbruaU^*5SY zkfWM;E7LD+Rr_H>tMW+gCMn}cTyS$0NV2x1UL{j+Xi6Q6lsMa z0CP*=et5+wYh2vzqBJD91?t;6Nz@V0-2Dv+ny(h!0i1lni(3Uv!mc6E-fsEn6}$rQ zT-fcx0Z^LPhx$oY8$uUw9lAWwieZ2|Ulc&Tm<0gu0;CZpzgU+^EZj4YFdlH~ba}t` nO(&Wa>>gk+z!&jc`M<;;R}3JN3>kC)00000NkvXXu0mjfOviQ7 diff --git a/graphics/pokemon/cobalion/front.png b/graphics/pokemon/cobalion/front.png deleted file mode 100644 index c57b709d3636a42cad563edf9610e031d3f1e311..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 877 zcmV-z1CsoSP)SWr+<7^tvlXlVHO_=vE;FnEZ-*yvzjV7R!rG50?X0008` zNklrqz4vpX`0C?a#~Z9C^cXAf&>j%C=|kh)g_iBLk1g6 zUcp6*#KTc=xFtieOIj!dL%}aNWN>J1>LLzi$kw6py-Ta!cfI?D`?&Z2@!tP?_q}86 zzZGWwOIaW&?yW~q3un9&MCMVCc_*OcO3cRwIZz^g7Nc<%;eHk)afSN;k>~vYb>pOlx^Y?w-7?+rsu|wj>LHsgJy)-_>_+ksonQml$1}IS{75k$LtLMr&cRGW9$7RDS?>)phl>C2K#DRdk&ZX0J`}~7y;pMF>RV>Ljr0l z=V3KtStpjm#a{qa{)qFmMeF}#Akb`5jn^Dk=8*Ig$1$)^gW)Bxn9n1iNsVlt|FkP` zzKr{Z)pqDCa5fqZFM#>*96+*_auN?l=c5E{^V!>E0^oV;K>D-~M*{>f{TxK zYMrqw0D!j?N{oTvRY3J(Cm;Z>U&Y1GBVc==OfrxdmmuJ)o#{Ty%qtviUhEwhCK*N6)TBA@P|CT zELkBSfC2$8EEmwVLjimyu~XT!3&^ffNPA|FT*%m6ll~wf<2^=DNRv=D8e0-jHjK3% zJqsk{jAB75ffC+xd=?+0FqzfvO1Cytpui-?C2xNKLydJ3Cy7B@00000NkvXXu0mjf DcG`vk diff --git a/graphics/pokemon/cofagrigus/front.png b/graphics/pokemon/cofagrigus/front.png deleted file mode 100644 index c48dbdaa4450b74da6ee670dbd748fd0bf482f35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 981 zcmV;`11kK9P)kXn6Se`1rUmuz)aVSRnW?AebOPczAfQxUc{K00000&Le$!000AE zNkl!twDjbcp@eRjR(AP8O1G4VX-n+N&tva0!1fBnnCje1D7VtO#mJtEnRY3s2 z0|N7l{(!K60I9-ey&4F>E+Rlh-C-3XXaE}KHBed)j$YbuMuEAb*Bu~rnhuf>6#pcQ z0q~W{bkt4ul^iHw01OaVz(vsAqpVa(!b*Wdo8=k}k?tO2mL~}-HQE>u=FVh6z$?UD zn-KQ7A%#t+18cgAh|#Fmga~*OUA{tIXcgmF?~am_Dg^H`A;P>6;~UKJqJNMkW!|je z03pK|H?ksD>qoo2G6!!9EfAgJv?!)ykjcSWnS_3NTuiYsQsZp47{kr_AT2qMDm!Z# z*y#56iv{LOSUaA4N`^*6&^Si!_J?Y#Tx{RM8cq@iQ~?Yy2w@A=a$C}7navcn7x{*O z?d3NGx8Eh=WkQ?T0LCs-55n7RfaQ-E@z4RjY2~ChT;2lQP=G}D7^pRx|8kP`)$<#G zXEa{{j30OPOdoj*p3$zDB{pdwL#__n!@i9Qi&3H<{&LJ6-fd_2^WS-^vU`HP#0|Fkj z4NzsIccLCX1&CN(9_rpZ3pBOzRIn3{rw*u3y_YHC)Lb@;rgPLHV$6`Q3J}m1BFIb& zy0UAqOWaq=A_%y?sx@@l07#r&8>SX1d=2zut00L*m8N&H93YI!DFfgGbsx1N2>3V) z!OPNVrS)pyD&!REqvKjoz&la!DzlZ)HtWD&gPTCi?^BQ!+aGKaCS5SaX#=*;TD4BH zRcQdz%x%~90IPB_$yRx%sz&Vg#CjXEBKw?X)|8@>)-+qvF!_*T>AAM*cdp>+*K~?m z3BIjGvt@FUF0i~R=PO|g2&ye(PnG2yR?Dze#rhb+CQrjvseB)R{eBtQGUVx8wY=y7 zC^e}$ap=o_3?cacw#*MedqBH3>pqQY}`P%00000NkvXXu0mjf D)_cGt diff --git a/graphics/pokemon/combee/front.png b/graphics/pokemon/combee/front.png deleted file mode 100644 index 4c1368df4b8c7bc2facd1810f0220bc70ecf35b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 491 zcmV@c8g>0BBeM_|OQbfB@h)IIvhC$dD-TaEJf^00000IUKZh0004Y zNkl{~fzT~npj9~PJ=%hL01`Uuh1jz(C`!*5 zMGh0pmztnbWI%&BeuDf=Fs1>{k)W$>BC`0_<T1;K z6Pq@k)O6hm*t9k9?Ey@fe*#huVAA%_VADpRyTd8%2~^!1*tA7mdtzwP7Q5Q>@ft$j h_VL$%y5-+>*DsG7qY}`N<}CmK002ovPDHLkV1mk9(SiT~ diff --git a/graphics/pokemon/combusken/front.png b/graphics/pokemon/combusken/front.png deleted file mode 100644 index 2c2b6a5a1b2eaef7e8a3ed57d9129deabb8804a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 721 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 QF#rGn07*qoM6N<$g6@NO3;+NC diff --git a/graphics/pokemon/croagunk/front.png b/graphics/pokemon/croagunk/front.png deleted file mode 100644 index 6725ae39e7f7c010b23ad53d92b14d535ded68f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 597 zcmV-b0;>IqP)C>HB%U(d?`}?@5nQd(!iy4&1==6Da|5 zCn3@_1yb$;4hcB1gsa4hw`uyS8c$s%_D2MaznoQ&@g??0(-g)ZFDqBZyH6B9zO(?J zF)|i7{aj5Jd`43F82}=DTk#nYY&H4*W5H&GptNu2OBt%GNMn|r)ISUXWt^6EafZ76>_-qrNm?h-DM2sBgm0*Ha zAFdo-hI7&TtpgBJi5tYbuDy*iE(0?q)};2PWt*Tu1<&r*>u%Hij;Ff-)&_#(Kby^_ zZLf`azvCNYiXdvOe&zH&@DI%S%IH1+4f%h4+y&~gS(-p({ndilm~zlWebLkftsR}0 zR1jZ$H9G(m@D2gAlo0{TAs~*HWgzU`RC)^xn-E%i7NFZtK+)9PiHq0$vW1WrEB;49 ztMB#eOXYZlGU%U@{od1vv%W+q73Yi6Aoh;H8COCSg_&DJ#3iyBT5o%g>v}kae-+2E jWA7ib^#6XRPvUhCN3E7(HlyFl00000NkvXXu0mjfPx#Fi=cXMVQc_S}AjbO3lrS_7D&d2tjHfYLu*6|4N*_)sz7L)c~{r0BUM#q@<+( z|Nj6009v1OH2?qtBS}O-R9J=WmeG2HAPh#yPmtAizW?JciHNi!g1gzp^6g@?J*R&p zrgQGUepMvp0NkbFy(dTB-%&tmPi!Vp+`%Qk@-9rH21LU{Fy2jHV}^_;UJYOUhKx^{ zS3$P{8$M0EU+pvKSs8D55nvUFA;zYFJjnRTip$q50we;6&v-Qyd^iZS3Hdn}aHO4o z50C_qCK>@4F=qZlkPPw$Gz=*CP!-5WG$K$$2=xw>r1P~1@LL4=&F%`9JX^i-dB8M+^?=Ni1=t!mpliw1kRwb%Y#2H(%yi`D=VrXoQFHe#UwNINbH~l5Yus=BGw@&JdYC z<^8;dkR~28Uhy$MAoDZGn<3(RS-zqBfpkX<@nWDT{Ia~_TBE$4+M)@PVHmgDF6m({ z#MYue7wjcRLf6Dctsk9uv=;T5AV-j8aw7t50!bqHa0DTg$~9_GmP-LQzpm=M4pZjc zPy|Z1oxyDR?f{oapRpRDQ;~w_za>9yeRVl#>-%`QYo`$Ef^8{w3MyfFKu~YB z&p?eQhxIO88JZI#CwghP7&%ik4VM$g7tck<$WnWpZmhrm`V;j74bKu2gfj=700000 LNkvXXu0mjf@8>3; diff --git a/graphics/pokemon/croconaw/front.png b/graphics/pokemon/croconaw/front.png deleted file mode 100644 index 22ea63306b4b3372df2d4094e11a074a9f0578e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 668 zcmV;N0%QG&P)Px#Fi=cXMVQc_oDd-YtXdEd5dTU_)ff;UVtXKqy=u+Pi|*$C|Nnac0Omm;i(&xo zv`YW~V(AV$+|;z5|lQpk9A8PMiraW`Wik z%&<)uvp}oVj=4Z+C)><^6To&H$8IabV^4s^^&=p83qUA`4WyMy%N_Sh_=$ZAK7(PbPdt8SCT>#pcD9<9GkypTH0-;W$ zRXxN@Uvl`oi=t=Z2G9^#EzsQ-VxwXq<|u%Gn;JT~KJ?t=iNp=X^x>`r^ggx$*ytM{ z0=RK6SBZK^lc<6!fI9)Y57I(c?nTeHDNN2@N2H5ZIYgDv50E{cL0UxpRD|gRE8uet zZFE`%av2gK$%Fj*yC%F^u5CpLT|FJE&pCj<>N7yy_W`DScD?{am;t_L6xhHh0Jecv z0iCl%5GfUXJQPCK_g%3l=bnAI0v)sDLL@yka{E{R9S@rwIRme+2tBjp%>q)?v`B_s z9|8L8w~PfL_3Z;dpIqODSGCh=VEpa!$y$H$KjI&nlO=Kz^c%nc0000tK7-%RM=zvK0xOn*Z_&7K?xKJ=SFdzT`00000JhiIH0008i zNklyzi-n(6vtgf784TBCdrf`ZvFtw;ju%DQzXQ2R(fP{heDdEOC=&B)V0#7 z3Ono!NUXpD8?wS+q*zs?4$c3xLAdlYouK7Ep1Oq*1Mt0C*K3EgEK0dy85E2`h_+Oz2r> zSxKS^2|!KChG-%bIl?OH*+f`KB4(NjK=VK?UfrcIQGhw5wOxi1c&H9|y-b48zzyBs zwM1kqRh1%$NBbh!I>H;R0DE5Xemovyur;m$da;lOU=4`1MhJ|@V9KE0vKLnx?T!th zfJbp%qsJ`)n0KrLa+fcmr9CVlbL^Qih|`h8kpb#;>dNC2z_Dt|+CD7+8v)tY+q%x1 zffoWel0a)rHE`p&i~|_JA@xqs{Yb)N^KmxpSFIwd+ep~7z)D-nZX{JhDrF2H!QfSz~Gzsv@Hhb5+DY6een_JK0QmCPd_Je zFqIaOH4r-Qr}?D+obiiyII06XmpGO8zvr|5*U8)El^FRX^bN2K{VP5l9-N#N2PcOm zbdboQ+QeP4bzThFaF)%o5=R|AT?4N3=u2_NXENaPX@U+_`<4wpe4v1))0sQAd(_+X&ufY9hbXz(CFpa1{>AaWMd000Bm zNklb%?EsUszC)+z3br zrn5!Z2bD2G;oQYEBxoxl0@RRQ05v>U0o){U<68eAvqw?lQ4#{gTkvD&xp!xG-koD? zZp0qU&&&hq+eCpeP0tzXtz5( z0!lN$0&H}v_d7ljjiLwi<1Iw9wB2WtrVka`4?SU(vu~Bnj7j zqvJ!`l8y)977ZNH3z@1qlUp!Xom~&pYLZYvCY?;>zt3W`FbEwm! zM1%l9bsEnDl#gny9AvF_yzv8_%zz9xV#%>t{y%XIDH4dEQR?s4arZ-YN_rpNIL$T`k>Tm5G2wtjTC{KHfb1gC2y#OrEH zDchMN8Jusp&;7$k1dKm5Fk-1VB94MU>hV`_zB~RrBM=V63j*}~lYd4{^TlV3Dv-p* z+3qFqscVQYI4400zsuc^1mH!hYk)*tlhGWW)VIqoz91!0=@x-Eav){^+iIY(y;YWS z#qWgx6+^JtwBBre@1RdW&pq)qP$1wHh?sE+a84)LH=6HyTfXm$bO=y6jZ4QYI4T6h zukbvKLrnuIdupi#*Ew!yKGYzsdMm>5yfT=)wXZ!TE&-P>XB64t-4<=4SulXhiRV&N zO99WQoW1PJkNEh!PM$NvI8R<#3iwmxAV*_-6r7QqcO|WC!Iy^v&3+oSR0M+O$0QN9R-7Vk;LF038cb~4YvTp0kvekH4KeH zKq7)9g0X&0G??!CsjSX{l9~tNle4+JmbU=Wy+@bOIeg_v{Fg#BrT+umwZy*_$!4+K S5|%9h0000p8 diff --git a/graphics/pokemon/cubchoo/front.png b/graphics/pokemon/cubchoo/front.png deleted file mode 100644 index 82e5e9194ea2062abce68141c5cb14dd57e3e93b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 521 zcmV+k0`~ohP)KlQB!fP!xsJ5QA%K7dLGx+KPj@RUE5* zU;|yGpg*8!XF>YJNhL#y9W&&Tj%p#lpn)tx1`BU;?|<>7El%%tb?I5pmwV2Ac~8^U zT8mV{T4CyCt*`}U8rX%R4FEeNU_`CfL9W@Wj7LVT$N8jVTTXN+R$}P-?9O#!=(}9XA!5p(o z3Dg4{h?DHu`<(L*JGRumX4EB@uUet^e0A>w$+700T2D00000 LNkvXXu0mjf857*t diff --git a/graphics/pokemon/cubone/front.png b/graphics/pokemon/cubone/front.png deleted file mode 100644 index ddf94b1a049d519acfd95edb6ff569b729a47b63..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 495 zcmVPx#Fi=cXMVQc_i-T(T`1mO)DaFOrQc^jTYFfpdN>Vux$f$_$(6Hd(=l}o!00000 z0000008M$}{{R31ZAnByR9J=WmCLe(APhteO+xVhKlmnquUV+k&0W}4GgeXbp@R{o z>C>lA|64>?0~h|3Xm24KKoF1`qhZ{hatP2Pq=89szX67QDC%E|Sp6>mIcNLh$9@2r zUIZX1MV=5A0E)>08R6IHVktn65DY;}07WVs2dot+8i1p_umU6@w*d4gfNvc@{Hy>% z9%6a|AnTyq8qwkhw}6%wY!54dDAon!D_iZJ03r-%#BSnVyDe`1CJiFE*@anF1rfG^ zke%CpB|;GEK>v))S8FwZ(Mq`;!Y3D>U&=gJmji9^=BwE3<{wf_NOB9n%<6W>)D=*z z5l(x-Y~x|gqe)u~nK$8ldG9^$Zf`yvWk?9n&)?L8j(ymbAg2UcPViBumY!e`YV}4q zkKh;Bc5t>Wv@Xy(bP1Te{B6ei3GDnA037Z=9Q@k+SAgS@F)S{<<)41q1P6;Fg2ys` lZuFKV0+^!nKYjZ2Qh&Tx4i0!oBtZZG002ovPDHLkV1kB1(0%{_ diff --git a/graphics/pokemon/cyndaquil/front.png b/graphics/pokemon/cyndaquil/front.png deleted file mode 100644 index b8b7e71aca85e21c3b6fe01c6fa111d6a792850d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 540 zcmV+%0^|LOP)Px#Fi=cXMVQc_-T(mqS^z0hQaNIKVuPIjoB$9I5dYo)7&%JCq-y`}q_`L$8)&Kwjnn^@KR9J=Wl-rhrAPhxC0>Oao|Nrge0%{*d!LHRO&+26!+?$Z3 zGfhvPJo#N*`*x>~oeTKw=9>Zm`R(Q}1>?M{w-SuM;W`DLV|V`$bn@Oq2m!p`FMr^#1wL2+{0`4C_7<@70H~ag@&z@+gP%O9e5;*33&mwwOR--*KD8e~K!goD1>?VX6YN zT;ZD_XTdor95lRV70i&S*d5TPRN(XYGkgce*ja3kgr@}O?{0G2+zwE%m4-1Z{xU{0}rtkVsvM7%@ zO~P6$8{a38`WY9#dWqEP{g0kIUk$-iEu4z!dz0-mQa_vZ)BO3j${W9sfGh1RSMYJO|Q2VqP3d zi16FEXi*e*R}n~iY2ky!tUzEH1#I*-0eFkRa`3ZxR0tmL5E$yI-1Y(iV249MM?gn` z0RV3Yz(EiwmLXW`y^qZa<2^oqMF0dfD-{fG!jTL0P^`mHR>}``mI%Og)fI$41PuEz z@V(}t2s0#LnsDy&?zVCXXyZ=-r<0Eee7#>+&dK~3NPzy=2>keSU;gqdDg99dwv>5Q zWMBS%sCNbdK%>10LI`2GGP1LyKb9Z@=0N}ixVCvTo|^_5 z9w0zV5wgpT{p_$knxiAaXdS-373a2=JI3_rLcI#tf8YEw<%YrYCb}sdU5OOq@JPCI zdL59Kif5ucGR{1!)9e(_#M-gY8(kUm58v$^DD+ciU z7GnxHcm%dK*JiAoB#y6_UggQ?`&|r))%;wQj=coX*3Rnpz~m7Z>MwEr11}ZgNqJ9b QjsO4v07*qoM6N<$g2PrFzx006LfNQj7-=%8pwNKo+b@K87)VEY<80008P zNklBbocBOwymYN>hpzFRpo1r$@|HX`hd8*=lSt}UQQKbK}Arzyj(!Py~DdVFQ#mRd@iv4nH0OH3${3Th%iNMX4TC z74Qne3_>YYl^w7PnYFmUCr|-pP!0i&7niGMG_-A)I3ghdY=CsktY({&&6A7&6kYF28s(V%}z{%0k z5Y^$)1=eCfdz2*C>0%w~2y2~0;?XQH9!{X;W34xVyd;|t5B)>mpY(iOi{s4{P=n^j zp&uEJ+kon6N&uSZ=DUCE-%b#OC zQ$et7HX!#2KwupOu9Y1Zq%(5=R6OkY3H`sZU)a@=xv{Tj>i_@%07*qoM6N<$f~D1O Aj{pDw diff --git a/graphics/pokemon/darmanitan/zen_mode/front.png b/graphics/pokemon/darmanitan/zen_mode/front.png deleted file mode 100644 index 84ace43cf9455006bf9cd505934625ec44bbed2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 572 zcmV-C0>k}@P)Px#Fi=cXMVQc_AW~vdoUD6NDXeNK=A>c(002Q+VzkxnN=j0koTTvZ@Hu;nd!)Sp z000000NhP@|Nq_2EU1^JIngFfnm8X!(=gAz z!cEhoN00u80`(hrr0yW*dFt*vh?M4(6OHq{Bd!1>&pBs!=L}RzcL*tGiBYnn; z;YkcvFb3xz+eJbrHinPDPE(Ld0K@k*!iGQw>i$|k5u{bnqW3m5gzo?t^)mn| z)c5iai3fL`1FHQ1P}eB{MF^T+WAx7(pl;F=K$U_{`qt67VTuQ53TO8TUBt=g4QC$K z##m&mg5HP9Ea)YsxMZY-T>*f?!`pWUj6Dcbpy4~9z${~LQb5O)-o`11#(o`m@vJHh zs#@MPl>fww$7#Xe)|ZjP6@agO#jDUSAa7fnyx@z9D9@h!OGKR`$T!yjD0pHsQ(eDvtiU+W7xEg1+<-s4gL0000< KMNUMnLSTZ;Gy7!# diff --git a/graphics/pokemon/darumaka/front.png b/graphics/pokemon/darumaka/front.png deleted file mode 100644 index 92a3645d24ef1d2018c8c07bdc07e15702d210dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 529 zcmV+s0`C2ZP)u%vz*d-D5~2Ea;}TNXFJ? zoks|EHi4{Fs=z)>W><5;nccL3_%~Dh-}%pF2s!GX>g1G^a)C;-0Oz>?RG=l_%$Tbk zP|A!kpa}(L7onArVRQki=mNChOfk(#nGgzvJMMPjA|2(RIt+<uGvnS8RZmH=I{Nf79a-Q z`%H6%eTXcU{y-m)D45!L0ZB$cnV%hy48l2|AtFe T5j{6(00000NkvXXu0mjfR+Hul diff --git a/graphics/pokemon/dedenne/front.png b/graphics/pokemon/dedenne/front.png deleted file mode 100644 index 05e9403c50888e0a1ec15b7328cadbe7f5130278..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 637 zcmV-@0)qXCP)Px#1ZP1_K>z@;j|==^1poj5Fi=cXMVQc_FfcGsP*4yM5V){_`1rtJFc5f981S%I zuy`=|$cXs(`1o)D000000000003$k#I{*Lx32;bRa{vGi!vFvd!vV){sAK>D0oF-G zK~zY`?b1PO)Ibym@Rtpw*PY20D_(XcUc60`g6BdO^eANL2Po{e;8mL(w@Q5@z0}oq z^9>|lK)iYpAs?zQ*=)Pn%z75=9|GaMU*60lfyeysVMAbaZO2*Hm=sLXwGFrwE6Anf zK^(~~;XF@dGr|!`A{4lh?5^S@$x&0`Bf3*SLJYe=zX_TF6WsuCyZdk^I`tc%b=m-k zq*Q(2j`ZrL24Vxiq1L`Pou2G#owR_r}X z*xUm^n3ZLTIFIA?BP!~Ez0W00Ks4cf+3kP~>j9Jxo$^ES18QC`3HUJXbsgB7|0M9N zR$;)m#Xt($+ZJ-i=lq>rq*!XSp66y&HhL(4XV&H?7sU0eY7QL!m{UQK4Tmtcv062@ARVq;|qxsj6z5YwzKqZ61bUclL P00000NkvXXu0mjf$nD=V diff --git a/graphics/pokemon/deino/front.png b/graphics/pokemon/deino/front.png deleted file mode 100644 index 835771003ab15169476863b41754cb55257842c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 520 zcmV+j0{8uiP)N;LC00009 za7bBm000ie000ie0hKEb8vpKl(A03Fc5|vS?t*93*?-wOKOLNmBuVg zs8yN=sOruriu?dbh(~}Gv2|mFm*dhRv78;LbAM&K&;NgScFWjBXDPX!0Aw*?026>z z@j8b%z;!$U>rp@mfGk!A)FRg3s7R0c2taU=9P(wP<3R4hM)009Kg7NOyC+1&p)v426D(`JdZtA zZtou{KsKk}hT0D_VCoXI24#Fl1FY+tzSqj5XrT7B_kGx&uiN-6vq`K$k~arUenm_t%pp@-FB696nw}J{R1PotWfBnq$7~q4yCZ$ z*k52$s&oH@{R10ehJyZ=JxQdIl)8sq#@@joeLs5d`=n=t{-bETs`d~HyT;mcfs+<$ zC&oHXke65hX%QRnLJPp8Zvq~p;lKfi4YbM3F+s>XqXL@__JLiBUd$M?DxenV*v8dUj!(dZgm={J*y9t(xLVTdZqwxhHZdq{hZQNR`42ZXjV$2MI`kC0A(SLS;qu$ zu(<6}S`@{#wh(uiZ(bHY`1t**IA?h#{9rE@%hW+9e;Q{<>$Id7iiv=^p=-D za(=J3JvR1D5AQjb0Da>8O4sy#3&3>5zb?6qQtxE81wbyI_&r~rKfj~8|j~0a8C$ZBlak z33+oVe!_5PgRTPRCJ@isAQd0rOEUdaEG!E+kw4c_D90{Wo!(dpAcmmz)nFfsE7ZIx zoF^k1|xMTYD-|TS@Jd9fe`ymXg~mPnl$SG zluIB_@T))x;;I&?F8Cb8ybiz>=TdCG0+e#l@LvOH!4r5BgljGep(WQx>k^=4S*L7G d)E@n}@dsjk?d3|erkMZ$002ovPDHLkV1fapPe=d& diff --git a/graphics/pokemon/delibird/front.png b/graphics/pokemon/delibird/front.png deleted file mode 100644 index a0eaf79af0feac6d4c076141a10e6356419e29af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 717 zcmV;;0y6!HP)Q_$00000rRtv@00075 zNkl8nu6oqNSt(OcAabTo5}C;zY>T$ypAJRq2Pj~uOO^tHxzt++ zIq1+KgOm0FVs2@)F@p!UUYspRCcaBa%5Ex(LLVS!uwb4~_uNYo0^qUf`TqcGFMY~K ztziN@P!j8950np}5jX^vSbyS`9f*t(uqj`3paV?>O1l=cTp$5xEKq`0Y6!r?*q8v} zv!^72N~R34+!==><=f^aVJ8gzLLZbNbkhQ6UzR|sfT_c66Skc3V*%j6jl5bx1?R0` z?3Q^*sROG8YtVLz{4(;Iu;n1jd{iO=A$RKg$oC4yC?R)7V;@D;kj6#>9G zr}5Nou|(l}dB8$5I%SOE1*kL}FAr2$()})gWB_~w^FZ}epQTC`z5|DPMs+N&jIe*Q zK-`*PZZ{_3t|aP=^6^J2B2Eqra(>RlL)n(8p?my`CpoIehQELRbi zygeM`8u$xb3E_UjdECN)kcnQQ&jfKzl(70;=ztXYM~y5{Qo!oL zkG^GriUNK}VvX^dL`PGNXbS%<{z}MF{=-M{$vg`HjJxzAUZ&S@7N1b6l>p$J(u*&f z#2%fWnurw?75J^;qg@1xNl*B%10^FD?200000NkvXXu0mjfcf>t9 diff --git a/graphics/pokemon/delphox/front.png b/graphics/pokemon/delphox/front.png deleted file mode 100644 index 939b538c44a1573cca5b8566c3e9a134fb1acd8e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1009 zcmVPx#1ZP1_K>z@;j|==^1poj5Fi=cXMVQc_XdnOp007`X5MWp+urLt#*g(LjF!=cR zFc1*9z{v3M@Q`RYNKjCKARxFnFnZiAbN~PV32;bRa{vGi!vFvd!vV){sAK>D14>Cm zK~zY`b(B45+dve@FR~YJQB&{7>xXejoTi6ECzDd6Lb@eYOU8U~$!v^8#!_h2PQjrB z(;!2ZrW874YrJI(Wb&RxnY2jY&5PA{vUEDx@f*Z_{OCee;ye zy;S#e5-3ulk-S0mg-sP;DX>XP)Y#Qom8t@JayVyhT2J|F#!UK4BvCvFYC@e4$rXJhmqyQnH097*qKFdpD zn#K1m1hyi8#twE0=%yI~RRKVp;@)ABW0WQ5^&Lz=?vos|Qx6S3^2WEFEs8oO0_7xmtqie**YQ!J)vEYDRNSs7o%>6;gb{|m z%lQFs;MfhqP)aN>U5DcsK#T9U8h{5@!f=>KK>xNI?c?1HzENu8kM~hwBy$6}5rinv z7{DbD7t&f(&}0}D5P@?6ka8G=ZVI@!=-D|Iz`Jv69hV9S3?!iWfPhHb*zaAH1mFy^ zfR9;;tP$vq0oqk^Afga1&huOV;*YmU1`rayD}ZLNcOJDwLCH}ZNE8-(y~{B$(H3nG zl{I#~tKOwcW`vYPd}!4JwK3A85wt0lVmXjB`G0dG6wQ9?ohC->|= zm<1qlaDtCl0&HeIP6cvQW2_ciM6YD}x5`7Sfk1Fyivj<~HU-U93Us;xRyn*6f*9}| z@G2@W?1q3v99ME2o?48qAmSK#F`<@I?xuj_s~uIC0vs>T7Fxt;Hjkcly*uZUf zvZ(|SjPM?g-=W|yFHd!y7Dn5lgYOT%PSWr-ScyM4qFsN8KZj$It00009 za7bBm000ie000ie0hKEb8vpY3w~A ziYW4ND{_(C9Kwi{2(uy&km5QL#mG|ndxA)Lfjq&9($`TYMVdTEW_N8c96q+du>12j zv$Nk0gzOD!lIMqg0yqm!02D4yM1b}wzzd&`05XPU9j9nWJ40ZWRVPE+tvDWfelV=b zl(x_3aSYI@&BHnWEP=Ros|xtm8P*99y1I);KfL-{(O)0q?@eYMTe8&b3vth{{UZ^m z4Il|B?!{378yHhW>yx-VCIGC-894Z@HRDGB+d~)dKoQO87~soK9w66oz0!5Apn0Nzx=nT=P^H2kE z==d7I27`8`3`51P1at+{rGB0vpiZ9m5xB(^iV~-ZPT>sVq6;>#&BW$vQ~*X&ZlVN8 zA6`$g6&{jWxJdL_*;x$RV+DCp^f6n#L`@r6JlvYk#u#Fu4w156qK$(+aBD3Gx?`?) z`O3f1z)H+_{f{!1EcBm)Wf~f|5Mp=V6hMm?R$&3mcJ7vdC@;)Fo1r%=t*MgeCWC3Q zX|CVt&Z-U4>1K^-dy!?k8BrBLAS739F`ra`y$&k@+U9(@&8j=I4uPW51+X9CDd5cZ zd$`kG?gOoT0pj$eY_%{4e*)SGRs{%;0rkJ10tW)5aWK&&b>lz5=*N^?o}DrP0000< KMNUMnLSTZjPntpi diff --git a/graphics/pokemon/deoxys/defense/front.png b/graphics/pokemon/deoxys/defense/front.png deleted file mode 100644 index 2e21b5592ed67884c07fba7e788961df3bbc1e56..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 822 zcmV-61Ihe}P)@scw$KKlIK!Xd{UJvG8sD(6@?(~%Hq0k8-}h!}T09;B@Jt!RgQ)0~EhOwi-me&|JKj<{#8l^CS9maqD5?E(Oz}Hz2 zfB#0OwN|wmsG3&Lr&(kO^ANOx?Kc$wct2G=2evFSi^>ELrIXgu3~UW(s>tRc2+#~I zp=a_8XMi$ZHzh^zEU$D7Aqa3OTsQ|0V^auSC5X@kL4}sNI}M>TB2 AV*mgE diff --git a/graphics/pokemon/deoxys/front.png b/graphics/pokemon/deoxys/front.png deleted file mode 100644 index 5c2c25314e5974d55901245fd5cb54e771f1bc48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 877 zcmV-z1CsoSP)`^gV6Ye%82I@3z`)ROIEYwKPo2#eCilwwuTF=Iih9Gn~^ncGj&Z{ekL(|49*OR}Y#tb0HI-~Zlw zIx$vX@SJrn7>Lfe^%CW%3wS#~*(LGp-6=|V->LyUrOu>4w}r6q%|t2rqK9q^@Opf% z)F%LRT2chgxw`lb0BryZzg>O)C?L$*0Csbwa|l|)1pGWBv- zcCe$?)+;x0(QB0m@&SVHLYqW@KL}ShtX|DDy$z-xGvxv|xqI8Wz-2 zf_Qk)oL-G+%=|haNA`q(aJ_ygBtU;mcB-RA9_aXE{xI1)T#l6IRpXX-(!dd zP*XZ`O%D9 zUUn3?mgsm;c=A*n2X1H_9bI@QiFs-OFpASNbR`72e=<1)EXd;Y3nJB*`&$LC3J@J% z)5MFA@h6464v3g6pxN31wfDz!;sVPN*rurWg5~`bcfdxW-c4q0fKAfvF}-T9$b)--E*n=-oIc%tmia+I)&LfH1E^V`jXJ=o5Dnlm-`*@6 zAg==Ul-{Kzcc4623G|cc4v5CHSfw5Tr7y1utdvrdC4_q*Gu<^gW@VAC)kJexdV9ch zmj>Hbr3}~F?B+GVR*PAz_IYUNo`8Gs1v$L=N(_34ZyoTO`CgIZ&UmSI^Yd`1{3yR00000NkvXXu0mjf D@e-1B diff --git a/graphics/pokemon/deoxys/speed/front.png b/graphics/pokemon/deoxys/speed/front.png deleted file mode 100644 index 776d0083b368ff1aebddbb6d15272028bc5a553e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 925 zcmV;O17iG%P)o_sh00009 za7bBm000ie000ie0hKEb8vp$hxURlSrNEMG6CDXe?SG z70IeD^-?Bscy&W^0rf1Q#>oxvIbddi9kH>c(oL5Qd5XUa@6N7cI}U;y;`rY0{_nl> zdk>-iT&;Hd??9*LQcBG~$7==%={;wZdT1CnyCAS!#zu5F@tr1yG6{%eY&Z?*Rg(r~ z0U%FCY{XdH=!Gs=aA$$wyg5+5U=YOXn9bd00C5OmG>>mwx8Do^vGC{dyY7p901yCt z`??=M6MruI{ONuGODQkOug7}vx6DwjI~ z?VfAa@ge4sR=jR+wcWuH=e+Blsx;Z~`teqG&_1;4H@#<3DnwYfAKNnyrE)yrQSzxO z(dzVX%#)h*_(h~{KdTDRIS%b{Dft8m5vA|H>#$-s=N(^i4^a;*o!ovYXVD^7-{+>{ zha*oYp_XMA9sAjwB@2LX7J(32sEUAn@h1!j5BZBI(v>W`$5udkL#W2sb7T}HWe2T+ zy&ykEJ~Q>|U8Pl^5I}fgiEEXL32hKSXlekqgczsnsw#kd4}P$*%X0u`iy*8B7!O7w zfNFG?0LanV!zH5Z66|9t;kM^zTB!o)S^+e?$^q%;KHq)Br|+L@8```{fuBI!My>jD#~u$&pBthf+b#D8Ki0l15{W@EGiy z=wtksfwz^wl}PVT3m{A4AWH6wQV~j*fb1bs$6X zu6&79zuf}RKe`xFnG2zH@1iJ1XrI*r diff --git a/graphics/pokemon/dewgong/front.png b/graphics/pokemon/dewgong/front.png deleted file mode 100644 index 62201eaab32d338c8693b0bba2a83deced6a3d87..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 643 zcmV-}0(||6P)v97j2!#WPoA-a>ikFCru5LP=`lFj!Jzoz9 z#=KsCH2@$#@sXOGb3%adJST`s1|rG>n4jsx@bV|PIU^_l{Sp9<^aJ43z>8c*I5eR3 z32hKkPi1y2t*oj3V6i^LPjEl9l#JGi(H<8f%iGUaY5}~ z=KCzddY;#SkSSTPLg1nliLOfkutdO&Ao4J7t7XHrp@o-b^@ln@kPtVp#K zCxC8%-Y;kl*vGv4S<|l z9RD*u1SCj&y$i6)Y+D?Lw@&vHJ(*t*xUcUbNW}u17CiL^AQlU`22e_;uM1B!8Ymha z0~7|dYSH&8gfht^Abi(=R!4%-rD+ljLhzNYxZ#0GKOWgw*c_%6pe7>s2&YwJ1rz{9 zl=p2G>R?-630P4SQ>q9)8npEpATiDeK1Vp$mlP=i>w3rz>>G|2F}D_)JWPLUFlI3~ zIHrLx0Z1=bI<`T?d)_U;FjNT&v3pJA!st8n;GW3|!t@l7Ap!FRAY%#wPk%D@h^O+1 d(EI$K#t-bG8#6#Ykh%Z>002ovPDHLkV1oF527CYj diff --git a/graphics/pokemon/dewott/front.png b/graphics/pokemon/dewott/front.png deleted file mode 100644 index d8665e601ea57d98d92054123df29532a567f439..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 575 zcmV-F0>J%=P)Px#Fi=cXMVQc_FT1_uyr0 z<+?uh2h8Eu0sfG13JAfU5u6XFfFlna+j|5+)hzbzoiu`|t9?fRMg{}?Pa`550ptz= zuX-UEW03Msla)nJq}6wm5Q4Fi6iG7RB2X;E`oU^cS~4+Y(Yq{oGj#=b+i&vPNi%UR8F-OAvnl525PC>g#NwM z+62H(Nb+-LV5$2-5DK3k1c@h?+V*{5LgNcd2V`*dGg@uU0H}2&L4(j|lCo^)p|w_# zQhu?N(jGvv-uS+5nBr~y#nPu7VXb%dN?7tflKN&>KM9y~KoH`JO+V$L)zM^WD7|oq zb+64~0I*^W^J}(;fie2=r$e&eooDO5S0=Ux61S544*uR6F8kQOv2U%u5Sq@WBFF#$ N002ovPDHLkV1lbg`Ktf` diff --git a/graphics/pokemon/dialga/front.png b/graphics/pokemon/dialga/front.png deleted file mode 100644 index e4a6172ace570da0bdb9e8e884e53da964f314a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1149 zcmV-@1cLjCP)t~mGq8#7 z9O@xL59mDrG0{%nyGKAnJ3;jD>w5%tKI{9>?*vr+s56Z!cLPN0B)>+z$(;hYaC7y> zYu^KO67j}QzQ3~rORhxMpKe*eo9QkhH&_5LGBfoDwe^*PUFWjDJCBZntbnlrkcD4d z&Eu}mo@NDT2C#*g??pb#b};DS=33bm;+uZ-Fzw)iKo&4~KO!^*R2^aJXXLCn(*B@d z2JRZrpo0YPC(9dQ6n+i>vsS7^Q>i=}IR17yAtb#p?_Z8A{qYLWC4l1K#1Y%P>+|AWv!9>7`50KfDdr?Tucbob=q7BfG6eSFzT@rW<92FiLPT8V^XHH zdAKoM*3KAfk8;?M03fz$1 zRfjwUOD4ewV*yB)27t_^)uB1;w^&O92vCxP$A&$@4>On80KzT^wA>VHfOJa6@G7XmkgA`Do(71-* zO99bICN0@QDYnDZW_d5hc&}CfKt>kA4i)*>OaXN-!u#K8ofW`CyT}I@86f}FUwHpr zZvmW4S-@e8GaXR=pPwM01;CO^7Fg9~2Vs-xnm z0Ty(|#8mVc806trUE$pEF+Kty5!bN7!NoREOgPUG++!W_`;XU)jIv9BZJPj~<6XNW zZl=P7l(zxpIpku)IV##Ekz8Frg_hlH59Ne|DNEM?6Jjj5atc63qA=y4sOUw&N)UE{ zEZ%jr6gc>Ku_}9kLD&*_R!aeez2>JNSmYG|X5u#ha@x@* P00000NkvXXu0mjf(Xtk! diff --git a/graphics/pokemon/diancie/front.png b/graphics/pokemon/diancie/front.png deleted file mode 100644 index c99768d64a410514e06b425d78d49dc5edf2c54a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 812 zcmV+{1JnG8P)JFGmNi@zp~dZHRZ*k_(uCx!d~uT&Re)Cm zAeW(*=P3c?J~vE4GPKIt>PEP%j^F2SHP8Vm)_QvO;UHk_Sg7&{jXsx7Ul%TzJy7S- z=*y!|FAEorr*;6~?LO;#4SJTc4KM}|I{Sv#!m1i7Zuia+8c0XN>y^ z+*C=FP4d`f%oZqt^9qTCVUg0umM5kNK@sj`8)I3`Kga~!6SYeNqG*_GqZI1 z3y4e9z~RZ=)GSS*%?S)1F^Q%{=69F1v^9z5-xJuRl^Ad^pNHYBL95?x!mIfY+-$^v zlMupB(qbgw<7z%6aRne|=yo`Xd`X0}cnx0fHuTrSSrlC(AZEiDkg}N&>$lmpQCA?yhamux7}%XZo4p3Rm-#RRAc7tVaewT@WC>hPGy??^H`3yb@~4o6z7PNi z@hYcLa9Q^xoN?|D^$nDQf$N9>05huvWN-(o0dSCcm+?ca^l%pfwqx@{V-?Wmj$v%6 zfPUA7p>MbOVVV|{MRJ!z^!c$x)Q#way^JHG0bE!u!-)^m?<(CTaHIiJc9*RLkn1pe z0qBmqzubrC>3|?u00TWR9!LjIcZZ=h&kJ~OtQCN%^t}F9F90#_d-@U=CIGAwfI53C q1^xk8b5=XRPFD-SPXCg>A3p(@TsUf3e}X*#0000Px#1ZP1_K>z@;j|==^1poj5Fi=cXMVQc_P)JCKhD0-#Am zK~zY`&6K}y(?Ar*59t!tIsqiQ0z`u56!}{m85zr z?l!m4*K5J=N_a(@2L>1hor*+5a_}wC))tg;-rM9S{-6MQzV;Y)@P8>W0siv66%faM zUkRv^3W+9^`n(^~FX%y;eqtqJ*bwM{?1#pokU#;9O^eju6D?-eJB5G+0zIQ4{?Stz z_`SOT6MBY+x>=0pQzb!l{uAypdGeZb4}rmyN3a1PU^Y+QwOd&m0p0sELf&FF1(@o5 zBO-Ls?z9jHPL)ey0El5`_9rLuv;QJ{TpS(j7~n#Lc4{cbUO{rMiv&Ngz^s`1X`H}U zNaAx$4$v5@q^Ms45iX>Z6BuJs?ZioF0Bi^3VGPM)8L6^$OgmVmUW^O?X8@-WlmMiv z4JBcK#)+v3Al?8JQZz1a4?R-PWd$GtQaLK~!vQWOdr|>NIRtf5y+9SustVOO?6vUJ ze7+x9V01T6)k)&dD;ylas?EJ6->-3?{z10rW!d+>?Q|Pxjt`dE)75Ip->6xo_kcM4 zkgX8-Auo<3P6NVi0OsDe-@Cg%@%&;Opdj~v>$Qp-b$-Pqs+Itt^Xn_sf!Nl^>rw#D z7PW)5a1KcWmlcb@0XMb4{Q5S}*SB>RO_=8@uIh>`fV>unETARMh@;O6kc=EaQ+~{U z$vl@4zCXkj!>$}NDZ6-W_uK$0!wpc(c#kv|IsqaW>xK&3s{xRRLvl1`g4Bh&XEc>{ z0_xQa)t9YCL71-z0yC!sO-%;hcsD_d=lIb`XHE-yQ$-z6N(muC@_z&&e*hVlSV<-6 RYUKa`002ovPDHLkV1gxgY$*T$ diff --git a/graphics/pokemon/diglett/front.png b/graphics/pokemon/diglett/front.png deleted file mode 100644 index 4e527ef5e57cc120bf97a36500e1c35fdaec2dca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 371 zcmV-(0gV2MP)Px#Fi=cXMVQc_q*_|uoLa?mL0T~w|Ns9G5D?WlN^<}h|E!e%YFdMPO0=wVT2dh9 z=Cl9+04Gq+U;qFB@kvBMR9J=WkV_83APfZyPMwc!?tk1qL)5fgfg^RrNQv0YVElMY zCX>nJUnJ*_o^vKjOVrP~28d#XMETkLU?CAP+-EefPz!K$gryCCE3mHHM$sj}-}e1D z&O+iy-~cPf1GKH+PJkFRKNxs39^mw)j|M~-&SeAPfrO}X`o=`Gy8z$p$7l9xZ@{b+ zP9G6d*chR&Af+InHF8!wAS@<51yQ%%FUnT8;q&8u?4c`Ad|vg8Vsp5e1$X1jolh{o zmOW#*Qxv~?5bM%g0-x3`NHuX5>-VoguzLJ!U{r4jJKq!1ugnd3GMP*UcmcgT3*-!c R!~6gM002ovPDHLkV1mxao~-}? diff --git a/graphics/pokemon/ditto/front.png b/graphics/pokemon/ditto/front.png deleted file mode 100644 index 73603b303d3ad01124fc8ca7f9bf2c726ac2e7f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 343 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*BKWU9H@9OBVxmk6F(j- z_z)p60VuN}j0E#~Hba4#v=zKfTP^ig3z%@B-!+EY7vq~>8pJ3h5 zXvA#VD|6ttxY`;6#hWuOIn`}7{{8L0yg<_BW%60|1%}3VZcpTgAT#YI*sB&KtJ(dA=#T9RGsX X;IZD7np;&bKw;qN>gTe~DWM4fDR_Ry diff --git a/graphics/pokemon/dodrio/front.png b/graphics/pokemon/dodrio/front.png deleted file mode 100644 index 5184438f49858fdc28492891fe8828135e7fcc6a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 944 zcmV;h15f;kP)Px#Fi=cXMVQc_K|w(f5DIjT+6b^hJB#8tSA9(;j_Yr_W zfKORD$Mvedsq3;_A&}_M`A$t530$(1L z&`*xywcd+!M~^M3dyi*0=TCyT(8`8C2qYO22>b6!tuY~=5ky`=-~|Ie5oc=PQl=TR z-}SaQBI}q#0s)_MiQyd#0g#qLg;p!wod9RhChEM+a$CTu3b+X zBmOJ=R4NSuA3{>N_HGlh1>n9YgQYVbsgVji;0W6jKmhL}D$@xV!{P^?Qcc{!z$607 zc(BfP77AGptCo6?wL0$!c){zEG_vWOM1$fJt><`qU-JzHY$JKjrEIER_C<08smU`L zf!0e2qQPr(34_*bPi<=PrKcuN=9^JiqNBceEek7m_3bnWMb2FJgMfY3nIPe6OWPMH z)(x}7u5MGlCV);__`sjFcprId$AWYW-eIhoegXIUgq|E+9h^(z>Qq&Qiqe=0*-&XH99c}SyE)p`P*CRT*4zjS1wOSss4vrcZ6P18SJi63i6 SipR460000&W_Gn*+zW@_lpq{t@%1jC8yP`|2bMC(L z#zJ@=1x>UAe0KvFDT8(G1Q7W+CDaEH{5x&jn;=GA`+(>cP~rwk4^T8XW96E&D2is6 z;vI1SBUSD8O--WSVX*zVFKeh_v)}x9AK3oNQ}VTMRiD2Lz;>0B``1!6o&7pb1it(G pZ?E0fo8&4_y#Sslp+5betUpu;iqDB9bTI$`002ovPDHLkV1g6V3(f!l diff --git a/graphics/pokemon/donphan/front.png b/graphics/pokemon/donphan/front.png deleted file mode 100644 index cb344b85bc2ed9283384bfc2f2abea1e3d456835..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 878 zcmV-!1CjiRP)KlfP@*P!PwJfah?w-yXeM%^b`50~9NJ zr1}&LaSQ>yAhHD-5i%4CrJ_?Q#KzE4=oGv+89HY(EfhL*P&#GEP{kBNrzX9VEhWwm z=-46OMWFk8X2LJ~gd*RMFY0&{>MBGY&Qc?>wFc73P0Nfh{^65u4Do~V4DFnAVK@>*$EdcaX zxJ^W{UcDBVMheX9Py~Tt7%F8zEl(k({Uik}xv24?G2n2uLOC zJQDSWCelDo6TRRTxdfd@sdGP+q)A<1ZlkR5S%FGL&k=!B8X(5^oZ}wCIE|o zqoXiW^pZw~8Q>tY2VU>6x0xdZyv~PBDQJ(p!=3P&4wRn((_8|?X4rjpc>`z<8Td5< zHo|Tz{(YVSih7()mbCp8;83G6kq41E373kt&1syPekiD ziPIiBs-sk8DK!DHKuhKb&+jO|74uSuf$}MVl~0SE6niQlB8_j!z?Et}-v_Nidn~KGEt>)n2D}1&~p? z%Ne;DMXz7Gc$a)nhWR+Dgd;{T37gdEGJTTw`99G469BFBz)ai=;vrxEDx8`DFdFT} zY0^7B({4&ac4@pwPS5ccpc#3_Lb7)|JfVr=5Bewl1$qKDi!xuY7XSbN07*qoM6N<$ Eg46|jK>z>% diff --git a/graphics/pokemon/doublade/front.png b/graphics/pokemon/doublade/front.png deleted file mode 100644 index b2bd15029f5600b0480fbcddfac7e1f1a5a5de16..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 904 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 diff --git a/graphics/pokemon/drapion/front.png b/graphics/pokemon/drapion/front.png deleted file mode 100644 index 57734a284423ba73e38257bce16c15facd4b7c08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1069 zcmV+|1k(G7P)Px#Fi=cXMVQc_N-<)4L3I|fd9H09X zSP+mVVWz;Z#g0NmRCft^kL-$1xCH_s7hrgnWm!~Jh)M~3dL*zT4+6)F3#jYLx-7w< zU~~MV0!fKI?Q{^(3^NJJYF~r{|3rYm3HR_x7-AaLq)C?~fnV)LPR|5n5{&`kLIfKA(!IT|5mb6AK=_UY& zb+A@#IYToWkU_vMg%@S}IvE7`jlgofF%-zFNLz+71KBTQs+QH9?Z=>q=P1Bawh{DR zonYOokGZ#AEvs)^d3nE?^^k$c*q#BZ6((5MnH+;d7QZtH-bO<;TU_CktY-o@XF3tQ z7-_e>>Y#XYt$FAl0zhDwf*>X5Ubhe|FD6WqlIC{?N$tG_#Sq}O83#&pZ2}s5KHW(< zYi1=X;1IDNVxpa3o+-}yLkKK9zJTmD7jgC($M<@T`u{Q3vir5BE?kh0{6-U_wld6s^$yC!TA0nc0-Ma?1jGaU0CzQrW|Ab`!{txxti{v8cGN9}%ihi4zDm&P^MmN4$+i~j-2 nLu0;f^Ys%y`v>E9{nzUckLe#bC;-i}00000NkvXXu0mjfFly|L diff --git a/graphics/pokemon/dratini/front.png b/graphics/pokemon/dratini/front.png deleted file mode 100644 index ee6f3bc450170fc04c5994386d5ff7c8bc39eb9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 476 zcmV<20VDp2P)^vp;!p3DL<@oWo6F0Kh@WeH~?^9*`10z%eT z@uA#pLxLrr&KWZin`*8on(>oG|AU zLH&08wGxO-0|8JUf3MmJ2R;Cxqv=I(D;SV;i0D3MKotNNJ(^?@0|JfLsi{5_Te0wf zpw&#%%#lZkI{@bdABX{+6GDJfA2|1diF*YYkq6N3pdzIc$R1Hv?zRCQ$kwzZLJOw( z^HkJy3yjFV=Q=O1Y|p_=mNGR9kW#qSLckf3{by2>5A+(ax}0fbsfH>A2P{@I7E^o(sI=a=RCzD>qZL)~eeQRN=bt0007f zNkl#{q2Z;Fs6uv-^3{{n6sDw>Ac&pD=hblwj4Ad|+^27u} znZkfrk}(oeoH0_RD3Czgz!#Hhe8R3*HVC(XJbld-)*8x=LCRUfCGuAAf~-TAr~0X zA0lM355_j25PLPI037lrvk$Q99dSlU2FI2HBvFTI85tlRV-47?Oaz2{;wAaXIe%-g zETAxleB>SCopTnkd8Q9QWO2?HEykEH1CY<6UtBanK;nQ%2MP?^5Z8rZS~00I0g@t(5=DhQwkBPf9B8$sKg-@v8Dtf;w?2!|;| zfgKP}ub4l_f7lH;{tPLd+yjGa{##s^%jGS&0gS8gfezOan9^(Euk z$VwO{Vn^iJ)7P8SzP;zMsDD`5$Bd`l*rd078n<1r;Er45tJThK7(cJiz)CV0}5c z!jN$&g_P5Yh_Hx6lu8IO$9$!Y%G*oKKhst#v><MU zbU*-k3;_Fes&#Q1s243jU!>@isqO%_MXgIDA+1b8L+mrHpl^HQDP7?Wd;XM~VWdA;w1v)6CZq{R*Hu&Nm*Q>xYba zv%vzO9e^9?5rBhzZ_E7-t8njexr>M~h9Hms2lWlb#Au2R2xWKx0000TK-hZsP7KeS=KNl(*=S0%}H*Q?zq#Fks#1pX5<6A+NQox6Mb?{nGjPrUATx3ub8( zOk9v=^@vU~bs~D6SC8l^DRcP9LvFZ1$MVV`H=_xoL{1t#$PH>@PP|10B~WB;QeQzk8umd z%mot!r`(7nMzAp;a&BulhhU9snCi)q*1$Ov&SZy0s8kivyD~ucnRG$K5v=>CykOhH zf{m1Y2him_P-|f9!`*f!R@nFD%6%!R6rcd2;oW^c6A}RX-~tlq5DdSBf0##y^^76*8yQaLIm=-@L^=y5DZ97lm@H-^hjf0-I98-GQzdZ2}-5ZZ9TvU z1LTR;WqTiwQYC1;r%&+kJ_cxD?fnDH-`FXO);XhY_xq3 zVW6u1Nx28$eAZ^jO0@&3tib+Dz*h4fs$v+xf)@Z`I6`{9Z_wlbR^~0CEVO?C&59nL z>}wQ8tA|z)iYI$Z(c@$LtSPJhgs2dEHt}b#f9b#0f7NeeXz_)|kP?6Z0000BjE7>3V6MQdf#p__e1)@*%I)u91HYsg?c$Ou8k7_MuGtBNjKvUu;5 zxm)uO+A)DHN0!Xp3|`9phI}X6vZVXcKhVA)A@n|a@BL0fjQy9Pj{6eN7U$0b5O8h{ zAz-Xa6K)S+cru-^&PUo8Vi}yAT~Dmh#UJcK{0nhX9cQ;LUMxbJKek;F$mV%hxgbup$6U8{oRw z0V1G)0aOa~VODTU6BhyxkH(lCx9kW$Ko|BvW1}qLGCqLlyMLwqak6LuY_xRsWVb(8 zJ0Mwv4S;)GkM7<6C~Le*k|b^hTnO;e%s>BD280Nttv%onWoeehz9vk7`PfR|&35~M zm;ENduJm(W0u^9<4jzQDo(}eF7=SZ`_~4TO))*dN1_dx)145%D%7&W4lmPDb=Ba$7 zJ}72OfOp!H60d%lz)U`#qW4?wWVW2ihRls<`f~CY;Ez5TCG5(7kR&j>Zv@EuHc+$x z)oxj+`WO$20OsoGDhk-nRb6esQ7wW1)b^8h<}`q7pz>U)P3dpi{x0H@*?C^(Yz?5O zVjaE6gbFyUYf}}nIH_Wb51YBsVYN!q!&Aj{niw6NJg-t6cpp*!>Z5A#KcXiDwL~oy SU8}JG0000|vdjE##wi96_8uv(cs{3qos0 zB^k1nlAwui<7>m|H8ylSOR(Ac?sQ@p=;C3K zZ(7OU!pZA(AFi?Cpg~gC^0AgbS>WWg0I0fiHbp>}f?i7C|LKWZK)x7{$2VLJ^GVdo zOZ}FRt9G=YjpT`|v#IjI1xxQndROY*P>rhN2CcS%`&A9Tf5v^ElXdJBql9zZV8R}j z+G?~pLGb-6IoJ<9ZYU-|!Qqf=7Y-=g)waW{@p~q?CYeMv`?#)N<=l~>W*Ob>+wd!X|UB&)aB zESW+LEKs2f)Az#lrn*=6MyC$$GhLWeTPOS+QkfTQGBM`bWU;`gyjS7%s1V_kzt;Q$ zF3LmnOa*}N)B1FX^U)<#>I~ew+_O(N5P&oGOQq+>`Ka<{!+hO_TY(V_*YO3W7>e_| i2{`A_-msI@#0000Kl(A03Fc5}gOBEn70I5K1p=ry&lw8XL z5TmXYkwFz(q6t^_dZd{!*s<^xtpa#X+#s|I{&$ zymi)#Q!l_F?)x3G@YbIphM^xgg^MF^3jjzW4-gsv3ctZ1^Bj~-0iLHlI_KUcz-%gL z;OwD-*^{7Co|n2B2tnS}{+rf%?g31_8odZQLtV*b*%V_kLQvQBT-?wZjhL`!U>>4r zfsi)gHX;M^wpm+b{YFj#yxA6zg#8?d9__@8(~Nvf04%gXX1=`R?vS+79JV{-UQM3j z<2umwb0c{lNlOv n*pMH3;eTan`O7P`)1T=Z4=ZCSHKBj100000NkvXXu0mjfCYIS5 diff --git a/graphics/pokemon/dugtrio/front.png b/graphics/pokemon/dugtrio/front.png deleted file mode 100644 index 60051cd79ce76bc8be534bf57e7ead61df87563b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 587 zcmV-R0<`^!P)Px#Fi=cXMVQc_q*_|uoLX8j7{zlz|Ns9G5D;?!82_x4|7u#*IZA_jO0=wVT2dh9 z=Cl9+01HOdC;$Kf$w@>(R9J=Wl<9JVFbsroEaZTX_kY~#u(?`n*ZI{cnvgJo{k#%h zrs=7t{zDn559BW?YX|kOQZPhd{j3KJ5g34Sz!1O!WB|Yr!HUi~2cH1k`@Og^faq~u zmSvS53=RR@x~}d6060X{76t)ZnO^{O`ws(j|AVy`eJ>#Ie|~P}DDMUAdM21nZ7f$e zV1`04Mcx@}3z9v&0BlJ$wECdQu{Z+&i+(PE)+7W#`N1Q=YA9!!OdCM?Dce8yKz;40 zZdf3I+w((ri(WI`3*h{e7BYY{UB=P|z!o0`uz}rE58$|gtpMn?a4=N`oC&;tjlLI( zspgKxE8vg_^;FkSXioa?fQA8&IYE1dP5>g-2|l1X7n)P5V+a+3_bH)?@d7BR<_lE- zhLl2xDa8|@0Fkul>4w`b=pq%l@W{)l4p}EBw0Ml3KKCYk@N|_ABp<9pS<}-GNeSS! z;_VP<_2AV;Qpc=`ye$9lr=bt3muavUQ8R!~#T)%`JH;tCPyjKgjO2P6xVd{d6Z|yM zy-DV&?nN(OJkQ!L*ox<@%?25qoFYHGShIgNQWlp-P@CJG30X^q=dpj`pGm{or=I## Z^#$G+8MAqT2}u9|002ovPDHLkV1fq#0fqno diff --git a/graphics/pokemon/dunsparce/front.png b/graphics/pokemon/dunsparce/front.png deleted file mode 100644 index 660f5e1a11566baddbafa076ef4efae86c36d38e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 624 zcmV-$0+0QPP)WaXn?37AOHXWQN2L00005| zNkl>&z70|Tj25P3-vD3IV3DIZcK6r)6GlY<|S zMD$?kTB9^$SBaG3mI})$%tVTk4$OaH?)W%v_i`@NFxBeb=VsoS9jy>|@&CgeqdVTc zVxTq#a8z@>IDwol1RN!y5U9!G5{{H|(E?iOv80q|m8k5zzBx|-C>sb;U;~)2f%eUL za}mJua2qHqXyyU&C#BS~5Orv-m`zl6+n?AzEXZk>O-@=}R`%KlrKi}{ASJ-ODJQ`G z8WEi&#F7n&x8bVRy2r$V2aofBeMGKsMEX1A0FLY4=K|E#bn>IMWqELGd_QhO6X~O$ z+rdW@aAguxjfnr>4lKZtS24vVp9Mki!2nLL0ojNKtnY4QfojxAQ*eUNH|B7b0^XA^ zJD=Zx0jypEv)ExE48tve<=c8`=3OVz5j!62aRJD#Q}soXfu|Uu2M=RCyA0JX#ubon z0uLdHL3Rqmq(ZNyb<~F@>$GkFiN&sN>A61Cfhe0mIB*4MpMjUGo7+?$(Ip_?$AE8b z+k+ueZ1S5Vm_PSTncEm59!nn69Odqs5F^B%oaJ@tL+-m$Mne1pk66#yW{&3rw*Koc z4`3<(QSg74W8xfa|7jJUM*gdR$}!Q)X)gnOE!IW3_*uM*F>wJ5S;cV4Pumj!0000< KMNUMnLSTY6*d0Cq diff --git a/graphics/pokemon/duosion/front.png b/graphics/pokemon/duosion/front.png deleted file mode 100644 index acf0c1c0d2393e56406f59733872270ad43d6240..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 498 zcmVZrE5Jhdt7Xak~9*{^{kW*V|Z-B-rTp|`JB^GR-E^RtrAca$>@#*q+ z7b_CX(z@|f7XNwvpWT7g>QVQqC|Z=)5z!K{j)@it=t)kr4>o|lt8z+1z=mkYT!(>@ z66S->gB~N$g#d*K3f3l+(&|J8x(qzg=Le0o74$W|oWH0jj3a~=F`dsyVAv7DpfMZ@ zeq;8;tOd@<&e#LsPHJI+egrD1MM;#gb3o+*plzyuVCn&&H@o*=zIjXl7r`{wZ*Chn zg@EJbhfVK+NeBnje7!UlXk`FXAOnCy07x1>;@^#32oa!H}t-X%UM!@g=6xjITjJJ~3UU`LFr)fk_sB#&A%}A)= o7sL^%S}D1KC6o$_kGgmL0SF0+<;mK&%>V!Z07*qoM6N<$f^$FF#sB~S diff --git a/graphics/pokemon/durant/front.png b/graphics/pokemon/durant/front.png deleted file mode 100644 index 0320e654f912e30c09566fdb2342aeb7e4d7bb8e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 526 zcmV+p0`dKcP)=6*oJb>C)R4nsP>3_z(PRoGvRG zQ@UKZ^+}N<`}53uBLiG?(SOuPJ_C&LJTXGV#W_GlV15p;mBQ&?&V&cJnuZlBKa!`6 z1PzeMKzQxPc*3gC4q&Ubw5aif)h77H1MgYdQa68EePJAAp5M1R^BUXWPQ%K2^*{d|9*j9)$i)6H97k_;kqg8V?#~-Z;`ZlkW zatS~m)y-%7Zo@_3TOERIk`lC8y%~Sltk!ELa$nkUJp{yZM8-^Qx#rH1+kG=h3$YY= zKDBeb@2DeJxa*_?bGxW(hhE%i8G)ut3UnG58E06*9Yx?Rr5(B(EEiz00OBpV@6_B6 zGq_KPWt?Rp8ZXFsF$Ci74)LL%pNO^lkCw;h)WL3o*mrmWM04aqu)o^3<^hd|!vN{N z&-FW~09bc|jbUIq06iv-Cn22c@5D`hEa?u{j^v;4Un|2iN?*f87yX-l0>5imN0<`P QZ~y=R07*qoM6N<$f?!VN1^@s6 diff --git a/graphics/pokemon/dusclops/front.png b/graphics/pokemon/dusclops/front.png deleted file mode 100644 index 58a0d15abb07718ae40f168c417d8081bcd03de3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 857 zcmV-f1E&0mP)ljA6t=14N=(#hg2Y6Q#z;&s@B}?6r^J?-I8EjQMqzL;yt2v`(9dKSRv9;$j zr~_<2V{c_p0~jeaMOj0jC^D?37#l#E%qs~pl2FHarN*{8M%3q7Ql&9cr(X<3rHN5` z`Tc@SV3mpd^y}3(0_X}8_Q~bT>;5N|V1>p5b@}u9>a$L9v&)?)YRQnI-qbLg<&#tY z#|t_|@}9jZ=Npezl78eDRLNYjS0#~#pekyrL!xt(ZhNqHb8Ye3^g(M)-x-E&(Of53 zP-dcvpl&cBf;B)qR@rYrS^x&C3StoB+$4|aMo6QvLg5O*njncGjVBq(WSzp@ftKY+ zx-i)gQN{_K<4+2^#r?pFWll+n^B8jsS19a=cRU!I-E)K-H33;$^locmhuvn>iPJNH z7!hLnN=Asla+Wf?-7xZ*H=;h#UeV%R%tJy9tj1Dici)Y=ZtMQYTzc7Q@O{X^Wz4hN z1;F7==FyJB3^CDBC*q9(22I9TD45Z3e9BTB7Vm}te&ol2MT_(^02f+@uvGxm!Qh}5 zaUg@FK>(VG4eBk84zFlMDnk#VuBj5xCia1DS8H#^FSz8|Kj6*_b-klyR}oCZ_s>!3Su2+|gV<&?`1d(`jq$Q@wW3<>z46Gy|iH{}>Mx_22( zIS&A+2^~Td6?8}Q@RWzPD-Vgo3fwLLF+mK0-kCe_I_Hq?7#s=$&{{T!;^5!TGSuhA zx|Klr1P-ati~1=58kR^1$ws9Y0LrVR1Tv98tH3zyLnB5Uo^V6~cv(7hL>ePNq=n2N zb=;G2)z72^VuX?;*2>CCk3*q)(e=VWHX60#B)RK{IPA)A{%I^a0`zfK0I1!q^Kfmp zRRA23$O-@f5Umftd@(^u41Y+2V+_|vUzKW+5DXrZty(0~9F+#!mI_6Rg|!_Qm0HMh zDtB1GO$(!6K)V3NEQ{>CEEUVCHh`~)R2nFC3yx#sc32^>sdcyBwNC^@sH&m-wT9(v h-cV~Hs{H@``U$r=f@pdyQM~{F002ovPDHLkV1i3flp_ED diff --git a/graphics/pokemon/duskull/front.png b/graphics/pokemon/duskull/front.png deleted file mode 100644 index 33903c773d5e80cd9982a349b77c8b351fd58b24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 509 zcmV^fPioa2nhK2;MmZpu&|Jjh;ZoO!1zcIurN^gU?BMT_y`CH`cO^}0004q zNklb;z6o#W9AHY~u)r~-5PfP|@lmir{uMrn8QpTXj%GxU+l%=dhy+hZY zqCHHX9T*zN&d9=B|Ih#bKgaRB``l>g#I29k0|v_>;5iwH@RRib@k+-|odndi$B2iN z(if}FmkD(NJW+aR?J&|heXv#tl6d1x2xg*mS@>fiBq-qB0xS@aDkPis1402RWFvb+ z&|oK}#G4EriyjXmS^zWHQ$bCFoK=F9g<1rCj1>P($copx1g!%)Hi+#`9ysU{*psrT z>i~^h#Zc=-@j4jqSj<3Ht1rl8%GeYc&i`MzkM8@^4+2G~-UKs%Xxo&hUj$0Vv;lM~ z%ok1h@vVR`4Do#2T_QX0_Ay||BiCbm^sUG%09-S*07T^SfCg2{|1souG$+JtvbmI4TG{-9t^Jv!dwgLMCzfRxdC++dn)&dE* z=n>fd9stMr)&ynXb35Q+Q_mXE_He29x#|1?jum^6AvCGN00000NkvXXu0mjfxK!rf diff --git a/graphics/pokemon/dustox/front.png b/graphics/pokemon/dustox/front.png deleted file mode 100644 index 356320c18db15ad3323b7c1a7a7afb47fb37cb4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 799 zcmV+)1K|9LP)9s|c!01#C|D4f$UxvYK=^oo@M5uS00009 za7bBm000ie000ie0hKEb8vpKlf6&dKp4i2)Ksd}fuu%aAreQjS6EIn zwIZ0#`8taEAUw{>%!i`-ryoCM%b=4t526{naVL-{!p+kkPQiMF>jg|DhGmy|) zsoD-*cqQAip5MLC^ZI;-@lbzWQ`5fzQVahGOcC;YGEm4&1|H3)RwhRvJsOcY0y2!yothZIz!db= zHMN*GbUmGj0-TP1YrsLen^%HTmon7>4JaKu1Bkb1ryfn>)pY>4cSa~sHEYZDnB9o< zrg5+6naa^~>+TvA&`15}LzYm#UacuQCx}A-7hUIQ;y7^f6mK-{kYemLosHgXV@xF` dXb<(@>j!_8icCAN-9i8W002ovPDHLkV1hEiV)Fn1 diff --git a/graphics/pokemon/dwebble/front.png b/graphics/pokemon/dwebble/front.png deleted file mode 100644 index 560295f560f1baab156c0775db2a5aac90c951d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 524 zcmV+n0`vWeP)R~;e@&uY2jHx zKc);5wD4^aPTa&dWdUy1|LymgpBUg_9y31v0SSwZCEUeooG#|NeXk>o1b4X_2a7pH z(7i*z+Djl9rpuQxrL2oDWdbsRBE=Lu0FS{X3^0YV=71n>?x1bpq#&Rw%hREu3H-d$ zfa@a>7-u?c2Ouig@&=>^cppFsNcQ+xcx2k1&{-GND}p_Ui3Wpq!0z~oJBZC1Kt3ld z2}}S|DK$NQU_=syZP3AV#ZQ2HG|XDS#r4!9-@*|z@TdhSHLE2wNnU6IQ7d`)+EfVS z#G}TJq%Ku{8182ZgdEzyRPb7cL8T`=nG-a~^35m!sP~*2M`}=zj&uhA+s!br1Q53% zt|U2#T++Z2paIG7)5!ddjw}JX+YE~G5%1ahr%f{Ap6}{G7rWQ`_w@~uPMZyv2NQi5QZ5eg}O>gJX>+{05%KHvcn)5ETDra6xj;cEb1;D0@wyR#sSr? z4Xk^Bc(6KWh%;(vkvvq7bc3`aC8Oxn8?@ZV|Ni6gM95!+>oqF#JCu5rfKRDkC4mB4 zfEEJnstQ{HiYBUnCIbGee*@4&6;PvXx48`n!U}*i-JlvcM&N{VUJ4A{;80-j*Y-RY zvDn1ON^tQUHsXc&Jw_(L;y(zZ8z;F&Vtl8w_#G61DZsT5*?Nij4{H-}AO(m;_OQ&B z3K;Q14QB>Q;{I`s8sl3Nm|mVHke=W7*Bck-H-#G0etrg!p@PoGD+7pf2Jq$EqZSyA zR=fzXJWAkm_HZkNTaRO21RTbqA21)IMW42Dq6QGL{&$#*m3T{O>&OJir<|Q4AjBT) zy89O3B9B-)*F&gjpl}apBFg2J81@>31p9nt0NBTwjE6nXD+3%UB?}Kc+NillrUi^$ z#t1oR(Xi%PJpPKBNBuCcd3*v|)bFV#N(3~}b;||t3aHzy5Wo)U9txOG_E~}*cZ3+0 z=5fO*K8JDv{E5_sI3eVvoJ{NjEnNWLa4KztPdj?4W(gz!A8kNgt)&CW0@q++22yDNP4pNl;7YuQNdjRJ2xv!*$(i%`-2~vP;b9ji zjU^b4^NoZHLqG$Zsl1ez%)A9cx*peC#TYY>ZzS|m*^@dL5+#S92xhJQ-^Wk1YvM?< Sts>w60000&i zFhBqxFd$%XaInY_5Ey`PK)|SY*suWj&;aPzpxAIwm@p84fPnb;_y7O^DPedN0009y zNklBjU5XTjRJay=^D!Qa4wMjC|7o{phKs${RrN?HTn#_J3YyE0{sA`H^|Sv-}~SH-8MtJiCX<{ zdEo#+{SG4T7YoSa7U4Yi%DfOPvbmDqIS{<4I37uOgak{r@E4a?Pdq2DfS>-7KvTFu zE@1Ki%_WI7h-6>{po|9i1>tzZd{N;7< zW0atyNLdHy83F6T0km{{j`})QjJ(oCiva3V~ z+{Mgvc|D^oheEj0vXyYb+bHsOzXWhUjTZta(aeczU;vx*f^=-WDHjY84I(qN)MPJb z3Ft5pR@G1$pq@97Oc6j0ZEh*Nv_TH6(S+pVPC&p7ZEi;d@U{jNfUOv?X-5<1qRjvg zEwHUB0#3l50JUn{Y#87j0zDk40kqD*Ckt3X8-OaDf*YbvGGJqE2KKc+b_xK!;j@># z?(o@j;Pd2@Us?cohyz#0D?^*q-kH$jSo@^~v|OtTy3;*;&+zxzT*s3Yfd8)$XvHy2 z*DQNEzWB&3j||}D0N@)>Bc9E*z6wmA5|ei~aeDX8;TiS4qxEdgz=%#k+ufr<#y3EK zjqIa&e%Yh6PkGUu9^W|S9a}ilGGE{b&9K5M-d+0Fq&Sj_30DmV>O{cf`D)&> zL((`olqyogleU=M1}qtdQp&K40KOygE`WCEf%8hAb{5;FRh0eRh9_21eX Q#sB~S07*qoM6N<$f{|3Mr2qf` diff --git a/graphics/pokemon/eevee/front.png b/graphics/pokemon/eevee/front.png deleted file mode 100644 index 1773de2aaf1a830a9ecc350a66e13aca756faef5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 535 zcmV+y0_gpTP)Px#Fi=cXMVQc_rDIBSN=nw8N&o-=QZXS?F(JL2d*;QI`1tt$=B?nkcwk6400000 z000000Of#QssI21l}SWFR9J=WmO+w)FbG8jLDGHy1J4IytJMpM&SIuY%1tlc%O}Cu z)AZC+f4t}>&okfS>9#;_8JHlDdjWo3Ktso(ya??CL^KpgNtR_3fJO}pb^(ANewPGW z2bc)pV>}ESkL-tjssa}6>pMRhU?QEJT-P5C;C;`&bqxMO1MH{f3XUA~;kovDB;QMw zSQ56@YDxA2B~oA3>1MT7uz_0<=V3JGivjetGi3k4mj&4OWW(cv$RAZQ$dUqmNl)Mc zD;so{+{H-Z0$fknKdTF{cnFY$h?_uQ{!|S)g|G;P0DKlQkkuk^OyL|n7F`W!q%a9) z;&}2$0r+!)y_>O6$2pGw(?mf49tJQ`edl>I@TtK0cT^m`Pe8a5KjnRDJD&!Bgts~u z=$Albgoi;_9<;?7bVI3w3=w$7S6T(c)tgPNzr1XH1SEJV-;CP#j=*adNF8^B`1k~y zf+2d!Z=-Q<<8$E9L1HzpL*(l Z)(@jy4EQ&;2+aTh002ovPDHLkV1n7!=k@>q diff --git a/graphics/pokemon/egg/front.png b/graphics/pokemon/egg/front.png deleted file mode 100644 index d9680a899240ddd41b41d025ed624401a51ac500..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 318 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*Cqd_IC^((*-I%m;JQH;0C-Mt$6j(bPu@F5d?7oCY zs)gI&cui}=M8@7srCO(k&|b+7j-O{;LsP^8nS5q9o>=r$_><~2o+(V)(Irdy7fn>n y-_U4s@kzALA6LoS>z3CFmDb+6zw`6&8b-l)*484MnWcdKVDNPHb6Mw<&;$THS$h=# diff --git a/graphics/pokemon/ekans/front.png b/graphics/pokemon/ekans/front.png deleted file mode 100644 index ebfd623efaf5edc526ab425e5bcb83c63f877edd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 593 zcmV-X0Px#Fi=cXMVQc_S`bR4N{jBK)y-nGdogOXdolmjY7h_*=B!$r5CB+6FvUR__H#=3 z;Ftga0Ll|o$N&HV&q+i*d%39wHOY2Vop`1`S4F{ zzg~|XJ^E7w-M1&2rYYy!2uhOy6mid=yZ;`6G62k+QqJi*fe2sbQl%u-WdKdAA7-vq z8iOEL{ZqE+OOtXB;Kj=+vH25UBM4_UH&JqN9t4T7M67i4JaO#Z2iS)YD1&4G_~XACf@FOIuz$%xS|kT0 zz)oKxh~<4QemRIr06;nq@Vg4hm;woH2wN$` z--vX;H-tpS6FW^OvUES&g78X;b~pgQO110}Kl}&+1O#vj@TID2%^!pL?Wbr3V*zvm zu2cWK5d^eTfTU~)Tm_SDX?ssGKP4mBb?F<@2^PT_KzxSsLHLujj*$eI+L2(B*$7n# z`1Nb8uhY$~()Zw|JHjEG`J#IV fxov**=wI~%Dy|V6piFqw00000NkvXXu0mjfSIhf6 diff --git a/graphics/pokemon/electabuzz/front.png b/graphics/pokemon/electabuzz/front.png deleted file mode 100644 index 0459ecb3bc4175abaaba404b6bedb5e22524a487..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 830 zcmV-E1Ht@>P)?00000Pj$vQ0008X zNklk5q!A0ZUl@0Xi5>OW`HXN z@NL$h5e#U=QIkl(5~>v5!4we`05EEuvew|R3Nxl0vsQczAQ>8C3;0I>ChdS> z--;kW?EtKM_2-!icy`z_p8<3eNOoI|uKqp`P^48?p;28hNw^Dq{%r<@SlcRs#81-Q zS+!}uRi*z?0#zNdxFHTG>>P=4Old>;`@`^!rR4sXEJ=anE!Njw%y637f<*5jkqr~hX42Z2NGe(zfLU1$p8QV07*qo IM6N<$f)nC*_5c6? diff --git a/graphics/pokemon/electivire/front.png b/graphics/pokemon/electivire/front.png deleted file mode 100644 index 41bf884b5e4b025fd7fcc7ea8c916d4bd0543575..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1066 zcmV+_1l9YAP)BOF*-3~2)PID&u? zXm?O??UB}?)$q!|HZj>Eb=ovJxX#s)`y29RBzY}+bICLs&-=~y-n{w7jQy|i;eW(G z{qlo5R^Qt%I^RCJ3;6hpaX0hfp8clZ4SBF`({7Oumv)? zZUfN}c!_H-O;hIm_)>SdZN%wPd8oZi%3OI(t`E2N04sI2oD#9FaLo>K_&qSnmFY6W!ZDiVMVgBTHYEEjoP(Tost7F{8bfKQoX zstC2ra?t?VA!WAG^c9MFTC>Cen=>Pm!qlvJxMX5TV7EBpt@UvfEqFKOKV51%45Ln)4*Kr!|d#; zQYtzEN+WM34)@);rhmJmb5Mo#ekq~1l^+44_5ynVB|bj_$gWAh$xTiVn$Q8!?*Y@T zVi5nc*d*3gc38skNJN74-u2~2)BZmkpKVy07*qoM6N<$f?`nj4gdfE diff --git a/graphics/pokemon/electrike/front.png b/graphics/pokemon/electrike/front.png deleted file mode 100644 index 3e2b74a7522a869551d63530df2185e39b0b713f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 551 zcmV+?0@(eDP)8nu6oqLh+5-atJkyIuqLknSX(wLBQ-J~^!(`2%%t7Q_XsrxXdjuGH zg{T{#6zV~tG}i#`xdTmkxu&&cP(s1lSL03*HvOa8Y9&MON9=&}!t#(XND$K0zv z&GitV-mnCiY<*m=QT5NT zTDQccB7cFM27rOJq;tvyx&Yih>Q?76`;{5+q5y+S+GKc7(dOfyqy^d=SBvh|dlH{s zfqTek5&-ef-=NcO3rP0?pEn@=da|HqrP%?ZrBTcziS`>QmI0_Cz~&(0CR56%Xvxl= zLLidtn#vUGA{;)lP__ZEf<=@dVl2Z17MBfZ8mT`?cWXol%w5}g?2NDVUpr7@z%SZm pc)-^#Q$M6{0x#Td_(A`R{sNr&o^_7A7Lot}002ovPDHLkV1nC-0^k44ofy`glX(f`7zFr)xX!q+ zASx(m$(%Xw-o5+r|AO0wM=JS@J-Vmt)#qSqXDCpx zOk|z#LQtNS@A3VJnH5Sx`?v2;Og-_CxiRLyorZ#BPFto>VN*KuGQ%**>7O2Y6g=j4 zJha&H*ycw2d!77h3(VHMn-_Y{Uh~-p=Z#`tOyh1^$rx= Mp00i_>zopr0A=pRrT_o{ diff --git a/graphics/pokemon/elekid/front.png b/graphics/pokemon/elekid/front.png deleted file mode 100644 index dc1c694b23e029d416f39ce67a3f56206463031f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 609 zcmV-n0-pVeP)ljA6vxj|oux}GJ4-#KW`PZ!rK)DS`c)|PauGgNkfkh$84*SK7Dxzn z4)%g4tdgOymb2sq7QPtx1pMZcsk*Pl5BcBDj|H);p zfrv~E|I|f<93Tv6P@sj!i2D~yF3thAkdyx!F>Z0n_9gXcy(>EXbk9QPBk$IbBA4Y{ z{(Y}}RlQUC7`MoeG!9Ml71m00000NkvXXu0mjf?#U6h diff --git a/graphics/pokemon/elgyem/front.png b/graphics/pokemon/elgyem/front.png deleted file mode 100644 index f1a930f82a6d58834030f5d25d0e6676cfa4ea89..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 506 zcmVPx#Fi=cXMfjkwAX-v6b5dfIgQU&95D*YSK|yM2a}ZJ~|Ns9WoDh2{Da`-?=FI?V zVh{iT0BC3-5C8xHcu7P-R9J=Wl}nPtFbG5q0!gu*-2b?N#?H)Y%8=cZS*Xg3eri6# z%W}sZcl;gXQI~TQk1~QGm)2U1aOj1Npx**2gi{}Y0^tJ)Lb?nj@|}ebppTjb8a?#A z9~N>1f>LDQbb@37AV6+_bcoEmXvesiYuy=LI3~&07*qoM6N<$f;v^%rvLx| diff --git a/graphics/pokemon/emboar/front.png b/graphics/pokemon/emboar/front.png deleted file mode 100644 index 009ecfd4de552705d199f24de6e74dbb79b5ccde..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1166 zcmV;91abR`P)>+7S zMNw2TIH`KbsqAgZ!3bYM4ow-5XxT$BzGP3nIE7#qgIEjFLJg)?-;*8NA>Q=Vfs7~f ze)GL=X5L6q{;#$)XKn%h$nCf^2hf+4oHd5@_W%X}88i=Api4PcR1~9_jpqX>z%oFa z2b2tpWEmE8I!9uGQiE9vLJ)r+@aQXmU_|em1liAwbxsUcT$n4M>(sFLHe=QfX1H$> zW{pP(xZmn@V~zv>?g8Jn&6@UNL*54<@8=h#ReS&9x01g3>wS|5G=981sMi{xCFkq{ zrt7OMZRfiHMlX+NT^6zX@CBvSd|u;1gSgaYJmhTbcPo^x?rGwOUD$&JZYrQ6AS(1F zEvTJoW~9T4gwx?RPPsFkgzwdYZT)voDXhb z?HCZ=v%h(za7IgDWR!q^9YI|fm_5gs$DX|9ydpQw^o?UGPc;re$gHA=fXZyb;woQd(fbiIsMs~TTZRQEAv=w2D0S^IZBxDg{ zXv;9Ld(J3ejeadt`3PnOPG$X1au(2O9stiyqAtW^*=1HN&!+%fe|uGlJHC{m$Dofq zTZUbAi8%rYX6VvZA1Wc@`T0ICHIA325@tmSGbqO)u zavf42paxzbRJb}QO~y<=O$EVL4Nl4=D_RjSNWe@FFO!%8 zh&u|3`?!~O$DgaKt0DRHMj$c$j<_V9(0+PD$h8B^T>G+P@7L*KL{w| g;y(c8uBV6Eza9<@&wbM?TmS$707*qoM6N<$f(=v?NdN!< diff --git a/graphics/pokemon/emolga/front.png b/graphics/pokemon/emolga/front.png deleted file mode 100644 index 23a5856b4bef2654a799e0fe0c4ae6414e21e120..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 648 zcmV;30(bq1P)Kk}+@7KorNHfQ{!cmLL8)dW$HRJ=?iz`8zgYtKxY?{={n68MKr}nJ^HN2t^@=A% z)vKp3N&&$D){oC8B@PB?V~fuI0#rNLI!{U*0NR0%gryAt0z{%gqqG5dTU$hgizx)f z(jnFZ`d}yR23Rz#@%G`cHLw8J$FNw{c8Esx*6YH9b!#GLIA9=%=}%MEEdy{yJ`?ho z0Vn^wjo5Gl3+V6=^ollRZIm@Y#K3P9z&O5`%}771e&R-8elCU!GxTZpd44l}5)<8> zMc{he!45_A-p=Opo99QIrqUB|1rya`1c*a*`ECB?Hl--Z~QVdMY{Sj79@cn?NOH+>Gu>r24 zPzVV&a40FSHwMt%dpc|=b+?xjeFL=Rq7D_M)L{;cjKw|Kcq{-bZe~xZ zU=JNlSud+#8kv i*{D(etZQBWSib=|wYI_m(a}r*0000mV diff --git a/graphics/pokemon/empoleon/front.png b/graphics/pokemon/empoleon/front.png deleted file mode 100644 index 3b3dff0bc2880fe9d356d8d47ecf12ad7ae299ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 867 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 V-Zz>?m7V|q002ovPDHLkV1i5(js*Y! diff --git a/graphics/pokemon/finneon/front.png b/graphics/pokemon/finneon/front.png deleted file mode 100644 index 635dcfc7e99aa3b2930da6db46a9f5a903aa0b08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 469 zcmV;`0V@89P)K)3Hv&Fc1b{S622?-~nA(p7RD;+8-%@EMlzsU%w3#~D5{8`fJfkMxTGC@?ut-v$Z}u*J6#&aF7;>Y>P&wG zV|;iNhnTUObWDOthyiJ;NFZ{B0YHO!u0~S`$$pR*ia!F7I|Q3T2`IN7@S2H8SL6%? zYnbVsACy|((Mz5O0<_+dfIV+|P|=6#L8-S+z~f zT4`EqEky1edEH8j;P4r_56SDs*cSw1rYTSlAR|UF+4U0;EQvcx*$3Dn3y3=|h5!Wa zHskhK1@#_yXZrpjPhtWXQzQ6VPo9Vs%#iRtfz%zb=rABj-hc%7^X5AVuf@~@ewLtk zLM+(>O^u6b^`uZ$bt$giE{e$`i6)uLIpebXt00000 LNkvXXu0mjfn(V-( diff --git a/graphics/pokemon/flaaffy/front.png b/graphics/pokemon/flaaffy/front.png deleted file mode 100644 index 6bb2dc324a7812b07301a045d9643e3495c7925d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 655 zcmV;A0&x9_P)Px#Fi=cXMVQc_y}i}{|Nnz?i{9q;5D*YbN?P7QV*jM1|8sNyy}hIW5K@E1QiH{V z#s4Wmi^l8+L;wH+4M{{nR9J=WmeF?OFbG5~A%rls`~QEtfTcJ|TSshOLwlS)bnY1j zOuHQx1v0%7wCn@o`f>nr2Zaf$E2lo^C?I8*f_`Q90ztw70RMJW z0SxL@;^J~Z3X})|dgm4cfIXvtF@syBR7xNQdlR$gBja6@vhF{fb}A8VO-2 zf;&KKOoE6hxXTMja{#N}jzWp9VsZ;j)9d{&8?g$wAylvM6$WLVv+G&_c$ z03C}A!u48;t}mr=lKg1~%-A5j+NzO%f&Nsz`4Su^X7HIoBRThs;5#%90w5FVX?~$ z8ZFJ}skNbRY{$h3Xcu-$uK<3~+ouAm0_F}AHEOp8I!Iekz~o_*)~sL04wKRIvc-OgM3Pkm~l{sD^?7#ZPbi8TNK002ovPDHLkV1ljMBq;y@ diff --git a/graphics/pokemon/flabebe/front.png b/graphics/pokemon/flabebe/front.png deleted file mode 100644 index 835047c90f34308caf654d24ecd2ae16e076a112..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 760 zcmVTwAs8;M;Tv&`hW)vI5D>vm=V_&adA73B1*qK`*RX_j$00Cl4M@0Xn2lB-L00JCI zL_t(|ob8h_Yui8+$4@Ae2NO92&DN4t<-jHu0hdZ?*I+%<-9&VCHRv1U3j_+@S~?V@ zEJ2$uo3}(;XDNZsQa^!7-<@fRPj~8E=o`d6{eSQM-f7&=E9&7TV0 zvNXg2gi|sYUIN&Ts|Ju5ECJwR$pPP&i2#Y$j&*TtVTS`BU@8IUy!gcVI6SdkA88pt z3xL2%>}5iIz7E?CFb@DNXmrVSdC~yplm;_i8}SFofJrGK?`9lX&=CSNk@%BmUk#{d8^eUaw>TTbh%U*zpR1^sB4bN-xX3 z)QDH^B+b3`=k}BtV>$a0uO?pZF}7|uU>M#lS}@exKrh8$`E7D~oim1O$)k5u6!@Ou z=kUCB%I=E$eFF93fw63yB=H)j!SsHwL9qkY*!vsmcRY970IwAf9l&)Y6o8n4DfvG|eRKRTXjX_|E>Bc<;${bI6w-@PrQ!C2a=qi)^BYBJMM%@pgwz#j z$}XT^^-Dd_G*A7qF28Hbe?C`FbzS~Yo`UHAxUK5CdERP0&dRcG9=CcA^Q=URu3eZE qfzGocHSN|(-E~UB0000Px#Fi=cXMVQc_b6P?F&6NM{q;nt`#iVKg007=fIix{B|8rUZ008*-_y7O^00000 z000000Cvjj#{d8VR7pfZR9J=WmEn>jAqa#6gQ(f}f8T4sF(#`{uJUuk)o$I?+8+&~ z-frLct3mWBfIlW29}=!Dh-~$g4&CeX9>BZ@NS*+wB@e>33DExrpl{TRr{maIF#Qw& zL`%E@pnFq*Nq{&KogXVecKs8el%`4eVWNO-{1fH!q_5KTJytC!24D&UCFHdVzXIT6 z>cRb^RSqb%m|Ufbi}+NdjKuR{^a^Z+braUBs@`ki<2g7bn%5xFBGkZQ$xVN66+Gn7 zuUbHDg)*anrY|Y+poToH2o$9nptSU6U;uB0fE9K=z*g%nfplY`X|(76VUR}qsd zCM%M1um8FOl%;0VtLYm6h_ilFuxJ5?M>V~*AkKB_1cTUrXzn3bvLve5|LSU_S4>2h zU>+(5UT>6D|O1A|{0eYVy#ioSSpuz-9o)N9|5&dg*_ezS*x~?}}QtaVO|= zPIh%`f{3bgk@u)VM>E%s; zo?W-A;b8!cx$dBCRbQld*@kj-e+p(Wf13YKv$pe%Z~TGy2mC!7L{(uCxc~qF07*qo IM6N<$f_3RrbN~PV diff --git a/graphics/pokemon/fletchinder/front.png b/graphics/pokemon/fletchinder/front.png deleted file mode 100644 index 86ff4500f007ba1fe0c8ef6e0549335f17f91ee2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 663 zcmV;I0%-k-P)}0SKMx#WTZShfAFDx zvODGdF4kLT8Dlh>_2%Kz%@{c}03lwk7O_s*>X;JjsImoe7abCLlLC&1t4-AD{5I(1 zTHVydLMhHw<#G3v9Qr}4n{r{EQbSv*7x?}(7kupZdY|+u!C;^}JVS4y z__0!xF=Dg-1rarXVS9cse4^B7G?Iv~d%fVZCLrI1;en$5WHOB<(hdy6Ff2{fXiD|1 zfhbYv0&N1sbX}L^A@x2ZgZUNv@f+~;9mpjKTwAwm;Ah zwQ3TG2ykvz0C`I(!2}#w#3w-ul){0TvjbQ~rpy2-U7d1(td(nPqMMVZth=t{WvXKDPgC{Q{?^{{roy*`WXc002ovPDHLkV1mAUECK)k diff --git a/graphics/pokemon/fletchling/front.png b/graphics/pokemon/fletchling/front.png deleted file mode 100644 index 53713836d0348d40d31c3cdc1d42ead807b0bf71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 423 zcmV;Y0a*TtP)FxYYCyF%=_44YfSQ9v{Vn}n3kUf{Jw z>M$LPeL81B#tOr^N_?Am<#EXh2Um-`Mkq2yIG>8)EWan=GL!O!=%MRVZd0haYnoY5k&9-p)S--wL(_H%}DQLZ&2y zOb#etMIvRbb@jmI0H=DjlDb~&^&>CDnlQ1c-Y!@HDX+}Zm=1wTRL0b?sXLYeV?)$o z=h8GrcMQ$EojE`b+rKPe4(vaDVXt!^{f*in*bb3PKoxrYD*SK|-9pbF@(uukV?HxH R6tn;U002ovPDHLkV1htfwAcUu diff --git a/graphics/pokemon/floatzel/front.png b/graphics/pokemon/floatzel/front.png deleted file mode 100644 index 6ff6ec1362133fd969fdb0bdf502a676af8c6ddc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 873 zcmV-v1D5=WP)sP$?3!vUf+Sgd#7MN;~1LqrJcv={p<487Jw|-jFDM zzkC1xd-rnIw12)yJ}w2o=I7AexL86ME_6Si1MEf@i-A3I$j{sTrNG+|UhLqw<;>>(VhIcZ5iKu{ z>wqr%&nJi{*dt(C+q`ZPVQ|j31#idkw_1YHXe>Ft^YxfH3jl2!k!#w3?}=kJC?t4Q zgXDc94z>x{%uVWOs-t!N6LHKhPeeyJGYObD!jS?DQ^bRI+&L1HZXC}!r+QH-b}dVO zO~OHZ*%A1OJc2EOv0@?3(ql1*uMiJo2~hY(&5)#7@`LQ3BAyWtP=cFGEn`T;HFb~x zsldQ~pCx_;NK%bU;E-wvn2SlG0&A({je868fH5yi(p2@B{-!=k;7lqo?ho@v4?vdr z5-2US8`PNWT9HWThf#W*GDq%7lJAcMRb&)h$UQo;@+4KukODG+Y*PV{i3&ghlt2Nf zxpZWv3YE%;YT8OT4U{(OS5Q3}cX+-l=4Dr6qhSm|{ zs4@{o^aW8K@|kRPLw_yAI!@Gqh?>RUMxMpg*BK=c>Og3_k3ck=wixS&b_M7Gf&^f5 z9?j`IJpfx#khh;*0Np5>&2r%RmI^e%rko@L8&MQZSswuWDj@fh4Bapb0r?=0(>=Hm z1*8BK1#KV7Wie;!1TH}Jw%flgfjh=}RHo}z6g1-v+`WTw<{{FwHR^UJ|WEuiz0005| zNklBjU5C`yAL@~xo6#NO)egMH!slnD@B*>b@fi77JhLWjZuyzd+bnH@V z)fCYoLzg0J(inL%9#ZK(LcT-qy~J5`_uNvdNpL^i```Ilh`)Pm+gyL;IA(F~IL_HA z@Wyn$5vcPO2;Bt>90YH}cgsr_%&{H@%S*C{1|dGd;x*ml96ui`AQ+&Es>R&4Bpm{a z7wZtaaNEQdlXR_`&|&D7kMd{cIzM^&~V%REN}4!X-hv3QRyuqE!%?&X^>L z>JX3F5J_?ozfa>i2k?w24x|^_Oa?Lh7J2&jlJu@cmZ#o^ok4>yKMRjdfMB|PFo9v= z?;i4dGstrI!Gqfl5ZtpNKja8}Xl-)HQMvf^1mKRUmlYh2fV%W00304Az%L&T#GM{t zy_1g>z}|<~F z-S!BGDG)%})Gt%_BBZV*i|=*6@{&>Axq`d!e*hv4a<+~c72q3aAhLe|IHd;6-}-3? z1Yg+{8VonN8DvG4af3dCTNYTVHEzp6Xq0009% zNklpXhjSLX;5lCM2R$bRKD*;M-# zLRd*>q+0*9k*FGMucYhxvugdcwn@M+^^$&aqQ5f?qgL4<@IhSa`svB>7XXa9vj#9O zE=PL(y=xm|0M3g2J)PV7=;*ob+734OcTr;NR^y{YftfYHGrbLd$Ss2JRv-F!uX zYK@g?HD{rn6MA467ocz1AYjxE%hbquXf`38kLnuqtwEp^Oxhvs#wwt^>Ainrnjz#= zIOt9u5RUSvvNyZEy9@8-%>NC8rfCKffgbc(-}igdV9ey~E;neDM?k`Sea{caFok{| z;4xs!1~jBU{R>~L+*txtBmhN#N%@nFV2*~&hTtv$(rK}zM$ljGfr=DpH)M)9og#oi zU~&{a;DGa-gK!o}+h;_|01lGhWCA?>b56*2Sl=YP!mGI<#u=4&4cmh8t1t{=Ag=%d z-c(uWtM0?e1SQ&^ml-f3?fVKV>;;nnO3)k-p8E0U$Q_3Bg@PNNwrE z>x%8jJm1oXlFbLx+}?(2MsjCgi*TL01Rk34Tf1FgPIm$nfn6RHn!}v{{s+n;@E;B4 V+e@1&1{weW002ovPDHLkV1jNAtK0wp diff --git a/graphics/pokemon/flygon/front.png b/graphics/pokemon/flygon/front.png deleted file mode 100644 index 64b9467a5d940deca28502570c1604415c535f1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 949 zcmV;m14{gfP)8|FHM3G2@o8yq)_4bgfmTrMk2(*Jl zE)hyW68ey2>Cn(Aa6@uD>fS9hQwoPEb`jD3e&?OuCDC^1Z+PCl@8|t~-}mn%Xr;;>FAtDp>q$JVQl>AA#NJ9~fiFzzDBVpW$D6*7H$TFHp19Ds6DkkHg zJ0>EI&#kTs0@5NMOI0W1usS^H+7?*|99Pg(_}|S64HP6bT)TQVjZ+sR96&IkJs6pnvI&w=LEH zpwm6}S0&e84UwI-Sc@IA0t@&OCHGZ)w?ete8aoY61Hg<62-_W!@378}HE8(>@xr^s zbejknt4Ggz=Be-Ui&vg$0;y)YE4dX)pUK5XUT=R4Ktyv5)?kb95qQ$^X7SJmgyb9^ zr3?V;?p#E9Edb;lKtiC=M*X*3^euKMzU~7S+GKDY4FDt>vm78UcNxztT+i7TQE#D~ zh;+NSpTDGqF6Wtee9g8m0)W^=6J~1wSBz(*qC97R3>+DOn-*MvJRWhLhDr~br~U+l zRoU~>4R&IdOJQy^gufl~l(=$HZtgz^ByZs|nG^A;TTLI+6m&JVv(=%ug}rIY>_ z1fFu62_gO!Xr|EXWT1x|ooh}6M7X|0z-B@em^mFtbJ+j1H3f*I+-5=uluQT4)W63c X!$8{N`wcQ&00000NkvXXu0mjfBVn~d diff --git a/graphics/pokemon/foongus/front.png b/graphics/pokemon/foongus/front.png deleted file mode 100644 index 0d584f1da7cfe669405c4f1cc6c5a5d70e8ee044..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 389 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 diff --git a/graphics/pokemon/frogadier/front.png b/graphics/pokemon/frogadier/front.png deleted file mode 100644 index e99089269e5be79871b6d1537f59659df0108738..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 699 zcmV;s0!00ZP)Px#1ZP1_K>z@;j|==^1poj5Fi=cXMVQc_5Fj`Z5D*ABZ~$PSFsR^2NJub%p!oRs zAXsqt=xD&ez>tuT000000000006G#z>%32;bRa{vGi!vFvd!vV){sAK>D0u)I^ zK~zY`?Ub==+dve?r5ij~u}lhC)Rz`Hah6EhI@$M1z?%(6$W}TOgD1O~+Z!+knwqKV z=F+L7C?Rm3JY=c=sJ@f!fRwwvL+%Ehc)$0(@9rJvy^Q~G_)+x#cpZ2&(&j2r@- z0zrsr;<AT+?uHv*PcBFr)rH$PT9QEF)e0?e@Ze!fZxuoh`^#9{aRSDHMi+yeMi0f(>y z^ry%wfcW!wJH60aPrh0JQo!NrYSz>GUa6)8yM2FaBv8(^UQZwLXTYBdxDxZ;8sN=| zj=Wag>8UBP5I_ZDxfs#Co0N44pmQDr8Pw&1mZRXL4tQMvlWqWj3Ta&4t}?;(Ujj%D zViET11XKAVo#DMEe{B1>0mOboBA-$hGytt(yWM1%MGc!11Dp=b&&75_?S&fP%Nh{* zS*oKt07~Vhtb`eOELGD65cPB!%R}YKQa4LP3}Pw2?15fck9(atDGMRx(T-rves#vo z9O1P*p4lIO&iJe--U&IA(n|P(;>Dem$C3yqP=N8d5Ecpl`pksMTr8=THVb#K+ZT%+ zK(XH!qY{=!q5}mSfFrP2=#zzgUM%O&;~7t$00t5oHG)f;a1efrfP-4RrC!r~N}^sj h6@bz7UWRjc-ana2w7;Yz%SiwL002ovPDHLkV1hO-E7|}6 diff --git a/graphics/pokemon/froslass/front.png b/graphics/pokemon/froslass/front.png deleted file mode 100644 index 28597b4285f6d5f10ec8dc1a0f27a888f0c89ba0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 658 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 diff --git a/graphics/pokemon/furfrou/heart_trim/front.png b/graphics/pokemon/furfrou/heart_trim/front.png deleted file mode 100644 index 17b2f3dbb6a62d5fd646114bbf3bdc790661b38d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 785 zcmV+s1Md8ZP)Hq)$C#6EE00009 za7bBm000ie000ie0hKEb8vp76U>RKii+3GZalZ)px&sO4`IQ~Gb>joO7lWb?CT}^< ze1LuIh2V*IlPs<_l}m9O`N5_+G@l3v;Vn@d8l_t7MS2k^1h@ea3*oC#)JipgKNm&n z1#F|5_P9l`jlCe)Ykhw_7MMY#1gbByY6xri_4{ujvaN`5moxQvP~Xl=ggL z=rIlopGuvjxc^~kNsARapoV~f#JC~g8gVxUL;!Zrprm*+1V&_BS|ePe*msP#!5G|N z6>;l;#x;CQ%$_=sx_41(Jxp*0@*a#DDvgL7_|R3?|KaKL46G9BMbQW3 z7?|~nJCON-G&ocz5JvceU<7C~9C)1v3qHRBL>BU7KDlhb%~THnwtP7P%#97uyU4)q z_+osObb#Z55t%hKAme*t(T|=G(gEDZ5X1@H9tj->+z5eDBf`|pT?cj^5JY%E^`I*; z25e1(+3jIX#U=n_F^#4)_-1)Jond-H0FhxI%(g!_!xTX2p~wuK8{Z|s3aXF)^8dLR z0t1*GXuz!X0&DOOkFU7^s)rmw&Tu1GV;Z07CqU2!tokXda++eMbq&=+nU}h5bv*@D zt?RvdB%r5r;}U3%_d=aB2U;(vRa3VZ-A`th8maXY-U=E)I~{JC-jXV)Mnl;GOlmNE z0r~)d!1bY=04YuT)!IAEfE`CYE`eX?E)8_r(@GZr==7uwr!@ZWU$XuI^-);k_Oe!O P00000NkvXXu0mjfOeIu! diff --git a/graphics/pokemon/furfrou/kabuki_trim/front.png b/graphics/pokemon/furfrou/kabuki_trim/front.png deleted file mode 100644 index c1efac1c0827c4ecaf699609c110eff56dceb06a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 787 zcmV+u1MK{XP)cnFvnz)pX_ZT%gLSa}Z~vLyosr}G z&zLP1i#M<7OV0Uf@ru6Q62T{lKiQBaXRucvqko!rC8Rs7Eu%5IaAdSlg zCM}jcMTrNj_fxE@DUqhJhuQ$ z5Kw;ZGBXQsAmH}&s{^E@tC#&M<(&}n5wY8azFOJ0kXv^{uN&_LsLLKOuc+7P^(WIU zlCHJJ-bonXBjT|GC_~w=a{iO%>f-dc@w#)+(JPYqs=rGn z?zl)eKYE-#6IV(p=${jNqN9f6^~N*PH_{!}J_+#NK5^fC11^U;rSO6Ct@&A}j{vS! zw*xE_9(F*NVH)tZlK=#yfze%hf-&KQ{2Z$ZfC;m9=;z6x6_(CC5Dd5L~I;VX4}s$_A(+kh;&J;-HFy%^?diMF7k4G_zP_ zv`p$oVk(W41)x>AG_AT*QIU>vPzhPlC_OHb+7Ue3C8(k(v7v1!MJYx(k~UJN-2;de zzzAS%`>bLB0+JS5qK80|JS!4nasbfuFan+ZxBxInP(T0x00000=vonV00009 za7bBm000ie000ie0hKEb8vp{eumfbw5*q@1*&NM#9!Al5zcNa~JJ z^p;~1$Fs3`oN&Gv5ivI-EGE1k=OK_B0j~lRWPEIjY4MaH02)y|18LK$O`C zUJqWg= zc#_&yO%3Z|j&!{ta8{X$tLc9? zK9#0>&n~tGD7We(dzZ=^D(kK33NSmbdU#H03KsOWaw8;nPgK`rI*s}N-X0000BMsjp(Lm&L^QeUc@DjDgBAVEAh^0f=aor^Is|opdaua1gX}nbxr}MgU&y&QA`D zXpFeZz`5?>>G7m*t&;*^wB7e#Kk)fP09CZzx1Zg;b7BQS@bK9Afe21cpj_JnoyhY& zL7n9vK(H_^fUu2k!0yiCK3~Sn*wywgfU-A`=Mvx>-*Wvt^LAXL#bLgH(6`4h*TUSr z1GEN@LEQsiMCCy?Ea4TnNw9ebzJ?L7%-5KY%VHLNM1zgM9rFea$z_4g9|Lt&1Nhu! zf;b2*o|R^3rJDCPH?EnsCAKoxaI><*@NNt0F|M7 z?ht*&vAw`caDauR9$z@+>Jwu zw!?!|4Qo_wdoENz;U6RD;Ue&NAI81vA-IHb7cI{F3Hkqj8NUI|!55|rG{q$V0000< KMNUMnLSTXokxQ5W diff --git a/graphics/pokemon/furfrou/pharaoh_trim/front.png b/graphics/pokemon/furfrou/pharaoh_trim/front.png deleted file mode 100644 index 987c7a7a448e3a59738dfe37a2307d83fd5ba396..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 742 zcmV*v!$jprDv~cVQnsU?G3R5D*X-T8S87c>n+ZxBxInP(T0x00000e@2@x00009 za7bBm000ie000ie0hKEb8vpwF2#~BMgv5P}8bsv9 z@6dKI02`QgQ%Oq&pO-01x(k7JrgQM$vzL zCbQY>B1jlxH{tT;J=IxShU!zfGk^twkg~>>u~is|>JIT!2*i>AV+H0x(6t2E9R@-#@-p1h_Y4tU!PHt_kn~OgCrX=~M8fqj7-fyq5~H?#~81wnyd2`ucly_Bs3uDFmNS*nk(p!0xK>wc28EVdqy zybe(#Zp-rs+yNc_1=P+6aSzr*$e23N2iE%MuvMZsA0etAS5hWv)-TU=Bi+WTTLM=Z zt)IC8gpj2Rkk)1=3)(QcC9dT|cbUEo+!C~3RAN^g zmW=yAq%2Ut75AS%H8TKs81Pv_9Yu$a^UO2G6d%hZ%PC8txZ5v1z*3lPG#%@9oCTQy zD|2V&*m~x%rDz|_62&&A2ebrIlTKxdXQMGFLc8PkQ15YHj6={-z=J*YF(Mtk(XHO- z8mXhCETKk#5s2vqLIFUa(V$7YplOcyp!J^K0ARE`1VCSaL3{6PDwHQZUWdNm{rR7s YKNaRAtJsF5VE_OC07*qoM6N<$f=)+8zW@LL diff --git a/graphics/pokemon/furfrou/star_trim/front.png b/graphics/pokemon/furfrou/star_trim/front.png deleted file mode 100644 index a953143214b1aaeedefef69ed84b92a9415ed82a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 790 zcmV+x1L^#UP)*bop9prDv~cVQ-1W`fr3NrssiV0cJSK)3)f|NsB#>goUh00000GdSvK00009 za7bBm000ie000ie0hKEb8vpv2V9qC#s0)UV*8$**s0#qW zmtUd3`0+0(uSDk)<*ifk8v^$;*pS}Vxe3_xrjBaKz8XJc8(O_bPa z{Z1>$m0U%W>`n(dKTAo4M3hK`x;8K8b0G^UWz_~4y>Af$Yeh(jX9K!X2^CzwS?sYQ+@bJA3 z=0v}#w*K-6`fG}I}HJ< zD8QaK7;YRuQ^bLUeZlo033D+3;0oZFDJ0gpZ)IMZ zx-s=FplVYu_1*)f>`lcbfH7#gI%ffBqCl+=bpzG6PCo?0Ss#7R0%%MG5U%tY(3Mm+ zel&YI7^-J>L;yk^${Rok+iactiU_DU=za>k&O;b#=}0Mq(B5HyW4agO@Be501*hgC UD%79(4*&oF07*qoM6N<$g4O9(kpKVy diff --git a/graphics/pokemon/furret/front.png b/graphics/pokemon/furret/front.png deleted file mode 100644 index 4d7361e08b3487221742f694e1f356894eb4e869..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 658 zcmV;D0&V??P)Px#Fi=cXMVQc_QYj$j#Y%fYIUpb@#hgL^?v$KjO00t^|Nq7R|NnDybDRJG|CC~Q zKsW#Z0QonvFaQ7o5J^NqR9J=WmfLQ_APk0MQ(>v<YX zKXJVPTxiBI{Q;vMqWZ)1sL9i0MD+({s-+W?M1%n(vLa_0;Tr@NS<&B>5U&B>sd~>h z0|cwUHv=G3%|Z}B5&}TB945^|EC!ht9uFg6Duj&-FqB&TrVr8wQo<6%4xm0CL_L9; z1Nyd00;t=vd``eHq)$07*qoM6N<$f`pq7pa1{> diff --git a/graphics/pokemon/gabite/front.png b/graphics/pokemon/gabite/front.png deleted file mode 100644 index 3495a5f183fe837246694cd5b75e17596fe537d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 866 zcmV-o1D*VdP)5_P0H`oX`1ttPSSWCKfWXMm(PY1k0008* zNkl8*3!JWM$LQ;giCwGtt0ojluWxUcN3Y&IMiy`J$ znLi-Zm(3!B%V+Pi>dE?0K;*Yu&$WPsb5jI(ywzGv0iJ6S zQ8WT7QA6|<0L?65(zi$zkXo2?)CV~Q)&`f-=vkPiEDUpi=}ss>2n4PKyke&&`)0b3wdT%vH9xbCmE&!`4$vlp*6c6*|e;tbqY~MZ#w!yfB^vc9#sgOjyARk5Cjx^ zqz^s05p7pP1AVv0D#L;#f9UgCKa}jDQn|wbioRWt%ST zljbDv2Enobny7Qdm}#l~(@o092Q)HH!&(N&dbgKA3dA1GRM6N2dSMngzXE^*-{l}U zmn;idk5XVuV7;sIlg^*{(>Hy57%veJRdME02rd?~0+$v6Ey`~r&h+c_QufyZoIkG> zd^xMGq*+UWm3g7@tpx5cQ~LhX#!6j#cVzmOPDon19|T!Q3||Y~)hW9mV6ZlH*Yj8% z(hv|uz&tx1|5#Rm7w+%7Zeov)w@qp?Pe?hohqCtck!~ZydNl0E-J1XpI(F|SiTAq~ szf9e~a16+sDkyib!Y;D$m-N5HZ@E75g(0hmjQ{`u07*qoM6N<$f+iM+8UO$Q diff --git a/graphics/pokemon/gallade/front.png b/graphics/pokemon/gallade/front.png deleted file mode 100644 index 93f2001594b438eb847c4eb390adb631b65c806e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 767 zcmVFhrT$ zW=j`e*kGwITPGJw2(ikf*5<$DUauZw{9PJ!c>1)#!uAd48jDyX8ux(Xb-W?(U2MsQtw z&zu7RcJXLLnP&zSMyt@kb>{CGb4Wl&Ck#i|46ua#QC|XT0dfyjOXsA*G>*$2h_TlH**wiKVMxG96?@LE; zQ=1i9257i%+d}Y(0bmm-NMmpiN5%{iNOAv7Yi3G-&l`2>wCs>l!Gmx44v;zqacV`N zDvu4NeXnd36<(LD0G4qUo<2vUO^t&cNxEgpx`q|rI-5$rL z0>K7Iy9|=pahz!~1*mxj5Qs~;OOwurse1G3AQ0}6-R|F3Twe*nfH=aYM$q&ffq002ovPDHLkV1i2pS^59~ diff --git a/graphics/pokemon/galvantula/front.png b/graphics/pokemon/galvantula/front.png deleted file mode 100644 index 980ca86f9fa5ad20203bf364c96be5a5b932adb2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 759 zcmV5Q}D`Xv=(D-N-^ z6?IakQlU!8h{{l9Waz)uch2u%8i|>=+27B7-@Etjj*zE#RM2HW`Pnj{v<#T$FpB|u zEUefC@=B@fSiAoN?6PC$fTp|(0H^FYxlpUF6#)eG7mbDjZ07->5kk^9AT@L{-GUsb z10Olvd{r;DTLQ(3M$R%Ja&$;VoF` z5XLn4$j%@h><=ojK`EPa=m5NBxCI9MBEESI9$l!h1EJCZ+JZwh0ZvN`B_#GWtjLbeceYUG}$siJswY8~Z-C z1Aq0>X#yeK%l`GB?}Hoj*1Fa3)G;BN%^#BlDn-A~1}bh32<`*as&od3G-e|4dmnXD z&pRr{b*d5s51?imZ-Ng8!@)p|Kd;?M3938s&N>O&rMzu;u>6UIs+g%`$cP5*VcWv6 znQ>7cP28_@ToZ9J0?;$T&oBOXpllQEc;qSo(s5GmZB8amao4UptS%jHD~s67_4f2= zSWYLOkyaNz=+3o-U002ovPDHLkV1iXXT<`z@ diff --git a/graphics/pokemon/garbodor/front.png b/graphics/pokemon/garbodor/front.png deleted file mode 100644 index 959931034f843f8eeec976f0f9394ff78f9a9365..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1047 zcmV+y1nB#TP)kxVX4*aB%qe_@Ibzly4TU000A` zNklt-P=({q4sy0_uWUBK=Q04k|1aPI+zBbX#|VS~G4!i3?df2;up&>M8_17M<~ zd}jB?BdFgcY8XSuqFobu;~#ba3=F(C1h5*wf!)1pfB^Xu9b-0b?@7b<<|>Fz5#V#^ zPk3b~%5Rj4RLDf#k@Gi)d?!f5kdacVr4~Y}fLA|L35}Ofe}-Qe1>E{f&*H1hLWqD0 zPDJkDi)+Jh*wu=#@NyXnMUfQzx7&Z4P>nTkv0eS~X{o}G%S8d$tZT4|=}7DH<-7IA z8}-}vrU0<^pO6FFGa-b!czILw!I}W=mGS75sf%|D4Q&4^0tX3D3eQxy{QYwCL1C=w zluD}CL%djc-F!kd!X&rbC1p`a*}Go9njP~;y2P@To2X_DaUI9~*`Xx^6#88OGSUCq8&s0Jh~pKXa!dJm z$J9wF&=`&q6KoYXIJa6k(ABOMkOP~Q$@zDvl*%UnFj{|qfiJ_&dd1}B63Wy90Q(tQ z2~cR;JzkLkXut-0A3dNIynwvvYGp%`jD#+DIq)>Cm5H__g^L*Nry`QG+^$ z03^%O^g)KAzS*p)n$I8u&LK?`)0LrXnDKiYH0%I9v;v6aq6w)9bmb}6s9kq35jMi9 z(hBx7ud>Hy$F;wg6r!kE-Suj zh~k)IjZ|I6Z#q518ggrXQY3^x)gI66;J@#q^8&G_WdtRR#YGfF=krW&>QjPmOIg)GM8w RciI2|002ovPDHLkV1ghR^N;`l diff --git a/graphics/pokemon/garchomp/front.png b/graphics/pokemon/garchomp/front.png deleted file mode 100644 index e84e0270ff8000ef2b083ef22a3742da60323484..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1024 zcmV+b1poVqP)1gh5XbjeDb_ZKWzo8cD1s8&TdlPDs4X5K(m{PW7)MbGTL_MVf(R+O z92AjgOoKp?0tq|;A4M8hr=-n05G6_j4YHZtbDXu$FpBK>=6C;@otc{>WYhvq{$8hvOkFC0Ais5lF5LKmH|xw$X3xB()+&e2^ zZ8zo|5(jj$&4woIWe3)ao|U-ZXV|D1+m$RjAlIg$S!Uq)clz7`!T=8Vpq(t+r9y(v z0nP}il>kNHvfnHZDId6w`>U<^Wiz-G{FVJ!l<8AWq(JO&s$!8pupOU6+Y&B%=yW5}ziE&;Z~ za)@W6Xjx|V0UraJc)tZ6MNtBoOzch=2ePM|xFVwa7Qh$|2;9O7Tna4P!?VB&B=BJa z1YSiM8D0Stiw)eZDW2OHCP9w}xKyQtIDz=U#z4S+jR7&p#74q%n2=spLSl~8J^n!cd@$G%(mV4xp~f z6pw);7fU0wQha_;OV?|~>+aJ&xiXPL;p%IR0+uh=C3?A1T3rHD7NFX#*tA?P_$L&< z1gHaexr5WTTQFK6G~CLmQy3`LQZ!V+^ja uv!5+YdNo}Ei}~Vzfj4Yx;>*pmf%`8$rf!+l!^W%t0000h*C`bSR000002`OoW0007S zNklB^aB;qXjj|^piotZ~1~Xpu@-;_j%%KdH@)BKId~s17wFjPh)4;4!VPp zcX_kU5*=7vjJ$WZYiOYZ-GKIP_nEfE!U^b`o04l=VBe>&zVLhPF0k!bugi31=>VEr zmYrM^SJMF^=63JHy#XN1mcM3}{x;E!^ml|Z?K*n=y(ySs{l({>e^!=$0swbEY^L2L z)Ze?+5Y25P=ppP9-FoN!H|IOt3DpQ<4Ie82n6?Q*2z92*LQKd&JbgWcLNQzv@-Gm6 z^Obf2i%uBA>lD?(X?zuM0Sv;!8VF&ZpT|O7K)9~~h{p55avk$M|9BKF2igE_g}0oi zCJ_D?tT{LJz?lGs2%Lrhw)%+hlK}id4{{0gQ-oIvq#A)Uq5%Aaw1cWw!fM5NS;lQ7 zEPC?)zh+QX96xIm8-%qe#UsUH1xJS-I1d7~anD*#h0!L&|of~pJeRYW9eyk`~V6Y)L;XfG@qGw7fJNKM=FTl^1C Wnjanq;+Sjz0000Px#Fi=cXMVQc_)vV3El(dUtgE=WV5D*Y^N@|N@gK$V_|NsBADG=ULInb!U*x1;# zDG=ULISm-5lmGw$*GWV{R9J=WmD_TIFbqVIEs>}f`u~4hNtTVB1VPI5jmarjC$O&N%@*WC;PqtG@D2^;k;;X#PRZy*T1WByvC+^Y7Mg z?s=ZEF;WA>Ls|Ve-&9H{h`JlEr}7DaH%8|1ptN=hwQv)3X2!X@_ji3O#zNajoDL%_| zQWJ^A0Sw|Nt^snL#O=F-c8F?dkpc9V?P5;xAU6O?4PLmmP%eSYUm^tc8z9-nHGtLt zb}0B+9d)qGiMp(hpgpulsRDLhZ#v|u60mF{5`OVF9SWeg*T1X;TE2Oad*iYYvIF*C zuqA?wBT4DYk4h-H9tQ_r(Ctu`y0M*S^+DYCJEENBL~Hj__zXQGhPTS$d#{8i|0%%q nuDuYZ$?a!!)_>{JrNjCKwIUDk*bXW|00000NkvXXu0mjfq(}>t diff --git a/graphics/pokemon/gastrodon/east_sea/front.png b/graphics/pokemon/gastrodon/east_sea/front.png deleted file mode 100644 index ca68f56d3a0b65dc0fd43276966901c84ff05e98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 637 zcmV-@0)qXCP)u zIwlYh5I>VeGiWb!x_&V+DWH%z_~39*NH}w1V*mgDXn3e-u=rR|c&Io~CUrX30006A zNklfCB%1Zc@125sBonWBXkK}=tBS2e? z#9U=3minibpw8=6y>@1RNXhwZ;&~Mqo^pk5gt3$z70ck*3P_nK+2J)(tVY!O`4SOd zgGvzZ800`#$`n-`B^cWr%v&(QEuvIbEo!F*=+9R`1 diff --git a/graphics/pokemon/gastrodon/front.png b/graphics/pokemon/gastrodon/front.png deleted file mode 100644 index b28352aed30e883bca01d2f6ac8210dda9fcd714..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 614 zcmV-s0-61ZP)Wq_}FkzNH}m{VEFj>s9=!zh`?w#P^dUid_`rV0005; zNkl&up~VDCl@JwxX^L+PjRatfVgllDDY4qus|UA`1o*eZ~y=R#Ey}Q0008V zNkl9v~~73wPY=DAF(^t%kytbhlw9rGwQ|&k;;pCXSK%@$?_7NHJY2RNE0X*_{ zKdzGK@^TJX?)3g8J%9b?^3@D*z5^~A=Bul>k)Cbs6rvzvelY`_4#RLGfZ~#B#SyU@ zre#rCswiqm#;2oxog-?df~u%xirEf>=!iyu86wGr;SM#Tt3ZfQPYnZrV$9Ly2nDra z8ID+Vu(=_hNvi;myu<=2gbK$}f()WdTqNr=_!XqkqBpKCsX@b5^q^T-Naei#AaSgg zws4>?oP?+K?N_4Q&e_Vyo3#G;!x7*Fr2Cw&5b5^r&H|ckn{*Ph*e^0I326Q6+jo%N z^({C^Y_$)3veH{~_eH8VXFW7TiVpg8>&hDc_}v-1+)zVJNe6w(KI60B?7P=V4XnV? zL53vZ-#@+17RqM0ZZp|!(8y8d95mJE@7jXuU=l(wqtaRiX_V|bkAM`c!A^U>7;zl7 zp`IH=@d6+i$q)sA!k5ry9Rjy0)u9Px#Fi=cXMVQc_T1uR>i@gvK5R`MYN-0WvVx<3CTK|-ky{x_e_Wx>Pd*0RFs1OiH zC`bSR0A2_E8UO$SJV``BR9J=Wmf?2fAP9wnK$6Mq`#C;%c)M9>33R7kVt%s`aCL)LcgdyWe{ZNFKFX`_-pb%I_pK6V)9~dxz4oys# z$odf=2$Y@Jmor2^1T3CA-RO0R3V^$ST=SM-23&~LBVY=^g8@Xk0Tgo&05t%*JrV6c z+#on%e#A((1{{Ex*O}V3w0Ro>eFkQZ{B_lVEMo5VJzAFIC!Wwz*b|hz;3fM85 z0Nw(?m4&CCVy`m^U~|HL>J6}VTS^HiW>w~sfXymkYXcF_9mNVzv)ezX0rRT@VE0r5 zjCHT&$58-`gHugL!s|pZ^ZUs9HD>VGh!&RWc(aEj4*<*o>~L3+>g?n7$Mn+xOZGOM zf4q_E8O#8PkJEw|1ZDw#s<8v2o|S~;h_e3(Auc&ZydIh0~neJOE{Fr!O|d1t(UZkOIFkwTLX6R&)m}3XO6+} zBk}`)7mwvds8PN3=PsIl#AEZsUQ|;KAioXkv1NbH0PJAJrrtcSUu@Px#Fi=cXMVQc_YHCtJIWfi6thBV8oRotQ5D?AY&Hw-ZI4C%X5D@5qcmMzZ00000 z000000FJ!r;{X5wd`Uz>R9J=Wl5LNKFbISf3h4j;#m7MFOY519ez;sxvdJ3lJRKN5 zpINhJ&HAGvB7P+=BIP-Oit9z*07U2o!LPR@A zJiLYD7Q6!#9-!|5jDUKCGh4(b&S_u#SopTBvgE+Z7=EdcKIb zrsZ*2G@hHZ)HvLv3=x3Pve5*@plC5d3bxp~#>d*p1ptUobt#?`ghs37#cKkvgSC}W z-v$>;npSMz03zCSV}v~+)i~GmopJkBpLpD40b@>G`@a!(bl3SEBB!Fyn+a diff --git a/graphics/pokemon/gible/front.png b/graphics/pokemon/gible/front.png deleted file mode 100644 index d3d5b48739a328bb39c6034ac93c25ba00106ccb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 630 zcmV-+0*U>JP)`6pHR7i>KR545BKos5qx4%rrV;!4|PE5ULL3$ZYj{RjtIZhphPnXH1zBzs!>Re|^M zeeZj3URtepyb<2KI(%rXvuF;%2M8JsqGkeH1!%PJjR31>Sb;#)6N~^L))K5hh_c=x znnU<6hbDp*Ad9ZMynsGf;F`PsZEv+8gwk`Fa3~yTP#k2H!2o6s!N&xknp8kAa}Y_A zI2I~Uek}w5h#*^~jWP5rAygb-CE1rP|7F-VO1}dz7$PU9B<*@pDT+cOd^sG(%MpZs zPPec$FAvrC4)lK?$7YnN0w3d2kJy6{)_*`BQ7Y=Sv=JtVV4(+xikH%SctBu9RStqOzm^T_< zd5ikac%-8G^4Q5JyE;15n(CNVauPmK3pW$3(GnbwKej#U=>w%mtAn78ZfDuG*7x@` zc;Rqhusy!s(R%u~LxXY)a0mzpm@qKlFfbq}Kqxq9Kv0ONfEd`gSQr=}fPjEVNJszx000002@_&>0009h zNkl^%(B6>Eb^=fMD&A-D;c_Kt&* zE^@8QhNamFkO5qzS#liQtaF_JH0%_Z0N9HGpt2&*r}gRth||2V#_9n;voaM${iYfO z$xo@MqaO!>n|w!SwS4nh`w2O=+3xi>boS{F)30gFN5>NC(n~t4zAva803@7-!d7zx z4Wq~A2(wV~$@Gh4IRHG(DdWo!ft1GpOXfbypo#&a<6u(r+YFX41iTMc^IKj3tRXxG zMjzAlJYFw5Ai9I@?E3aVoi$M71W-1DIIqTpZN_o*6+Yc_o%$9Iz^3*bmgB=eXZjj? zPzj>)7mnHjfkRLc3H^BwRyHI`yl~_WsB}z4D3xArK;UTV(=8yB>C}_H6zX~dDg?|_-g|ef!l*;0L9C%rd`-pU;h4E3%D^R2yrW}TCgsv$7yZr7Cf2-0F{@&8uK%P zw!}-^Jj)T_(X{rnM_erx7U!6I9eCF6E>=8#A#Q@@k8c6)Ho(W5W$f-jJ4V0}z;j#O z-i8R29%CK1lTZ3Za6;bp8Dn13ffPZ3y(fnE@eliyT1IKufwGAa)Ho;S81Dht*V>~= zfIyywXGL8++;>sZ&wzvCMIdmqom?jQSz{k?Tl#o6Km!HS2@l##$qOpr(j0;)UNOAd z$qqEQ=uKvD)o_=4jqCyO{8V-zH~^V1Wwv>NnA+kQ_FbUucD$27VkJi3WZOPX;+1-?x7NmVHxRDc?<#00000NkvXXu0mjfqH~)A diff --git a/graphics/pokemon/girafarig/front.png b/graphics/pokemon/girafarig/front.png deleted file mode 100644 index 2a43c76e5d49a97cf97ae7ff9fff4acdc777c20d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 833 zcmV-H1HSx;P)#I5?PiK+upl_{d<$XpopVSV%ZH5D*ZMcxYfyP>66?LSa_&00009 za7bBm000ie000ie0hKEb8vp3u^f1rbRovIv6h#;_@Yde|=B8fa$0o0#nMENF3N z^Ra1XCiq|uoB8d$_hx4|2n{1W8mgExu0}%{x^W{K%2+g3qM=T)dJoO7&Pah4Sq(E5 z_#d$HP@hp_F89DN^y|6Dig^vM-8OC-*WiUhXjnH`WB@i4OXMSvh1z=sc*O5_vTrR{ z0p=LEd*@5dQ_Q1z26}qo!o1^5UmY68r^8aE5&zO6q<;}K8L%cI84@6N40I#oeTIs) z9WQY5rusbw_l?XcKxN0B0?&?5r@P3qU4mb`;|w%BSvwv~z(S3KJnYv-B1I{|K@95F zJAlm+?2mVf0ZNx|O@R+($d{}8<9j$*UY=Bhep|J_8@NpAq|Fu+aR#(dZ#>Uqp#8~4 z_>?x|1(^8bY7rQ3gzpK@MJq!PP97(9FVAxT@Ub!KvnR|WR00SNtld3y#YIUOD8Lr4 z(sJv2C}}G|=p0zvR?Yn?mcRkfE`W33G?f6Vj8qBf`6@u^&uX^|q$dFyn}>jQ1HOo< z0$U-_uxh?CC2d9<#mnfjB1j-EQ5XT>RT9Zo7dEFra6Xs`g0nLTfZ_;{fS#X=ISO!u zOA(+^h`@Zw!6wEEkTCI41YT253N(zH-`LxQsW;$2c;F1!34o^#JJ9UN_Ak#zfNi(U z543;b%#WiOgMk#}*I6r-=&iDSNe$D$O-Z^y#dVb6DOe6ENWiED00000 LNkvXXu0mjfDkf-O diff --git a/graphics/pokemon/giratina/front.png b/graphics/pokemon/giratina/front.png deleted file mode 100644 index d0004746a901659eb1b29bee797ca54814604cc3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1271 zcmV8V#*?jE_G;2T=sA1d%OBr6WYg$c{}g7 z?`z&j(-I4srZFuPBYa43b0*TX6#s;=2uN;gT6TT3OMCB;`VQxO1mw_|t%T|w+)O9# z&!kZ=bG{n^S)*Rh+N3dto9P5!M8ga#7j_BMW}oKauxK0W1e9pAbf1yV%8Yj>ECwtrC~_9B9T~+K4XOmz|!+Y zY3@i_ktFsAC{yf_uHBR8JMzJ&WFLw?8+|tg(#eYT)GB=~Wy=?y76U?k0b6n2JbU@i z+CW}f{c+%^Ke*m56%g2e_40)rv?~2+W@8}53u$e*|H2!zR$5jpt`_OHIrXj5M7t;b z%G&^2#AwOt2J=quR*b*a-%255O}j^mI;`3^>?3dKq}*)dssna&JznJ4g<0G@Dwn@h zho)?9u(w07+`#UY%R1VJ;xrD7_0`(o;~-cvKl6n(-ivpdu`}@?2&5E3Fcv2gsohXr zW8Me6&=kU(1Xv^>k>Vk+R?S0+^TpNEVfB=y$?pOu0Gqr^?>QW&*Sz4Wc2n+$ql)dN zEEDhV(z5i_c20sIfF4ei6ZpW@%8|B%rralubHKEm8P9sv=4?S(Elr5R_JA zvE}zC{TY=>OKvD{bH0G%=3ApnsZCBZyqBUXQ}<~ct!I&Wu0Fog;ZkKEzUKT3?9yEk z-QR}0r%fd(^OR%IW(PR>kq2|n{Rk#vj^+Nqk`Om3_dK3eI zatz+!)T+i~SjGU*xe0tjz_n5izzOWtbpUu6%d!Eyi~^yY1jnqGaaHFgKtg5*9y^eM zo~~3Z$?FN=g8K&m!zT{hdP4)p`Bwl9x6R;K&m1!qi*PG|BP7b#n3-a%u?OuvM~?wB ztP`HawR^1E%fK?=E`uIRp~31uhk(;j6utqN=A$Vv2Yb4r8GGZp?F_&k(C=3*2K1Ig zKsk!O?g9PWr3ru^^>n)ZN_BLIfVM0BNelz1Yzm<$0;miqsT-9s@UBFnO)fAKJPSkq z=*pG_-q=C5C~a_=PBEC{8gj=6Lp*mUeV83yZh}&DuXWw|MYe__1D=X?@;SL}KHKs< z?@HvILt`Vax+>p}0f(~YU;L0;4bG+f3Eb|1>K;@!#`byVdyHvy>UHDlZ0KVN-CQ1l z$^iYKG@&-o-%$UoN*Utyg0YIny^Uy54+P z_q;l|B%s#!rj2Y>q!@Q4`Q5j^Y2C|Bx`bj1vpIP;Z3KiDw`*G??~yy1^_x~-`)~0~ hfB*mNnC3J)?O)#JTRCNaGynhq002ovPDHLkV1nP}UJU>M diff --git a/graphics/pokemon/giratina/origin/front.png b/graphics/pokemon/giratina/origin/front.png deleted file mode 100644 index 14f631d09516f79c2b2ccca5360bb3b54f274bf7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1283 zcmV+e1^oJnP)zI9LHxCO=%CyyxG+(u53E5i8&}08q>R(7kcTou0}6isFC_Q4r)oD zJH<-HOBjZF@KW>`53kt=J?y1DL?|mo4-WMz3kxeO^fnL=wTLkNy?GgvSo=AYU>f2j&FsJjMF*DiZ0-0bqdQ zZGZu8&52ozG;!6Xp<{gQ*38Rj_5TH?P}{4~3y3&L9%7Jn(z*dPdKckLE;kjKb@AM# zp~~=3Is#NMmjO_-mDsMgBfgi*Wr*#j zIIn}{D7y0{|JzeO^zB2>dn9lOoSl*rE&Aj0R3oOLL7{9a3D10mvh~fJn`} zTrE{Ouz%9vtkT)t zxSul?TUz}K0dVBH?EUx;!MH!!-uW4;RvrovdIW%H&x|S3*9Rt3AubWwPS0illmi>AyFk1YlzYbQvBr=vm-!JDV-h{z=Q-S zqvaX$_|?x)2PVc{eWEF;FbqG)wLLJ3j^NF8i}P~4!refEp|Sw{hU?LIgTWr2=jB6U zlP)>{JQGpQ-vTI(5XEwQ@zsY#r>_ zXz61IlUFB~E{z)l=X(f}2tdcF=8KJklzUc?D&Tuz~sX>|FMgm6!r}m tgLH749S%wg^Z94N?dHhIqaf&c{a@vT0J%D>Y?1%~002ovPDHLkV1kGfQ!D@g diff --git a/graphics/pokemon/glaceon/front.png b/graphics/pokemon/glaceon/front.png deleted file mode 100644 index 463bd723d766ffd99143fe67958a55bac4ca43eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 602 zcmV-g0;T6)5b%CEPTs42-#({z z3JHb`-A;YV5cL1?Y|Mj@cT}U#H-P8g0?}kJry<+`3o*RL=95_70LAbcHvtW6aW@R~ zFd!Q>OaA_w_JBM~rgj%I@IN}&SjZ_XCu9TwOP9c178p$gNF>rB)V_)VLXf3oz>-cr zu64B+ONdL2BIq{A5$I|Txz;uFyA4RLbgAp__pB^g;K)gyYo)bdSlpEpDhpkg`QiuX zt{A~lmZdBl+kXSUKr%J}J_vw76k%UZD8SwCqk8NIEBF!~mFtXO>nnf(wY%Cw>jpXp zh^~P&=j$<_M@(hSW!?h$foDurL3)w5fI5&(s4F->=-6BWop>>VRq6&~t=ACa>x!DR z2kb4_3oviOg6H#s^~(X``bEIXygte90w`k+pne(wk$FlT0I$}73P+nkd^))mf}jl& z@7|aOY}pngYz3`@#BS@j4e;ee?djSkWaI5{4_FbN7Qe~~#h(Qp0v6gl=u9W|cKMaii|N58u11i6iGXUji@&Et;07*qoM6N<$g3_K1K>z>% diff --git a/graphics/pokemon/glalie/front.png b/graphics/pokemon/glalie/front.png deleted file mode 100644 index cb6ecd4925a34cd36622b88fe6ea818f5718b28d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 879 zcmV-#1CacQP)LaxL~;GpxF5M`1k+-00000JvHes00009 za7bBm000ie000ie0hKEb8vpCl`&7-KorOAfq{*8)QKII-VsQKE+mm) zVIau|z(`KAwo=Y81}Q#gOpx(qWN1Rz7)x1L;TupkR8<}NUHZ-m;0rZNDEAmz$b#PjxzC45x9Ojcfi^;#8)CC``9 zQiHem4XBj2(g3T}8KVu}1=!@Aw;^Av(G*~^e7(vts?Gw={SK>CN-u{%ptN4E)4+Fu zZJ>Z4tX`wAl>*AxBa6y}H4*_7gj5H^_`p~t!}~LVjs2~_U zJ)CwxAYWym114iO4}s0jkY^Oq9%n!c0iFO11t4v~FdP^uU}FZrYe1YLKnha;lBKl> zRKR^u9s>c5&*)J*<}wO!?s;4(_}mYH?CoektoBY<5conseoty9lD*MXfeR6mimd}9 zv>6y!oP+ySoDtx^qC^%6)4#x|T0SYj^iRdh@{0&fOe|KR-ne)*cWz z+Je>eIn8)PZeT1#^Wx_E;Szxp*wFz_f8@?FBYKSjP&|@RtR-dh{-;|9r$BR8c$qfa zvKeYQ*ufWaZ^c4Vb=e4SMWU+#<|zlTG2np$Ho1(1YiP@g+pIN65+X$&wJ4i=g_+Kd zl-U9;s!3A_=l)qLOIr>K+uIcD7*gnxl{w(Rk^Sx6U18%KF>2|}0fq&VBJj(R5d}Mx za~=_(k`^8xe?uq_prBvbX^#_0$?-8bp^UsxE_e;wvZpf0$`<-u^qMy9_zZzDCc)@} zIud}ySfv233_KadVaVvn})|2a+6=M34Xg002ovPDHLk FV1kbqhpGSo diff --git a/graphics/pokemon/glameow/front.png b/graphics/pokemon/glameow/front.png deleted file mode 100644 index bd72d82c12a503ded65d93cc813a42f4f6cc2dba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 729 zcmV;~0w(>5P)Kls%8rFc`;e52&LZq(p3q@9NCd7u`)r z2#Niua=JAc+%h(m@{~6Tfv%*SSXdza0zk#i&<#ETU*IIZ2~X0hP+tr)5+0J_|MT+^2rm98OMN%tZe8BHt#ul@ZVPs#wN6|vgb*I;!{mWe7kva$hX<57=?{}6%{z4} z8qZOBnw~lgNc=D;BI(G{8=??E=x5zJ_4I%UD2NU8o^OEzJrE-ZiEl;l@_h4Wx*8ZX zK#dKYv?gx!lSQgz#Hrbju{YG`Nc85@llnqpDdNHkL08AKs(J;mSYAY!3)nI0x`HQb zfLXnohlIuuS-`Ze->=tSV9@|nL2kzYx9ZClSgz)g!a`aAi5G9zYjiP2K#j_X`&O&s zhcSlm=v}$|WR$@?d@Bt#jsak~DqnxhGl@M7EP&=803NSC!+4%I-l?4i%U9oypMJf9 zLQ2{8Q&~~I_@VWk?^jZ_O~8KI?No1Y44>u3L(Qjuj?RRK00000 LNkvXXu0mjf98E)R diff --git a/graphics/pokemon/gligar/front.png b/graphics/pokemon/gligar/front.png deleted file mode 100644 index 5164cb452bf52872c5ac24ce0b9264bed1618667..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 851 zcmV-Z1FZasP)Px#Fi=cXMVQc_QYm8Il*JGb5Y1wwq)LNIT66#Z|E#^mAakT3L31&by^AR^izzY1 zbBh1~0L!+%*Z=?m(Md!>R9J=Wm+7*kAPj{&oJ2*fe*edvETFXQ*3RFXs;TOWoR2^j znAhviZW;ZrKD7iQ0)ASPQUf6UD>3a76urBqO3?gHEc<$2iM|VvFcnf3rI zxAYCcel#NHg{yiw4hn2Cz5vWVc-2|$xu<@Ct)wisKOD76+)J7S9{Ex~F5 zIxZ^!i&h;W#2&!atQxk*r#evR6(B`x|GK^p!U|yi0<0f>j|p7`sJ`#X-8#`*1gqSp zqVK!1hrt0Be)t}3;%+sPAA*NjW2BewKzU|~lZwR0)MiDIwJJ7k~c0fAesvWu;@TswQHw=g&9m_e77l1rL z86ef^+BDCz?#4GJCZDG1f?!j!Df(`nO+OolLqAQIfS8l@EPw)t1YPu}1kHt*ld~QL zz32CPF8N2f0?@SotzOSv4{98BvJ&X6HdD!PB}_ifX>rib89$R6l8FES002ovPDHLkV1mHtg}VR% diff --git a/graphics/pokemon/gliscor/front.png b/graphics/pokemon/gliscor/front.png deleted file mode 100644 index 24be70580480b18caa07f602122521bc036a26a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 940 zcmV;d15^BoP)`76vbnv0H+aa^iTd zkQ>P^lG5}OnC3IMQ>n(X3smIM#`Jq??(B|&*oA?7he#DY^)iryvr>f`BMId_vE^zH<=<*T6rY1@9x;F17dCObjo^uhxyCm^r4wN4R#{s^)u#a>f69s0B44=aF7*ruTagXDn1 zG!(ah1;F(1epTD{4-on83mGHVjf)FhFNh$nMn>0ve*OCG1(e9`mlGZ^e;9(+E;}(Y0~e#dF(9BlKl_|g57E`>@!P?66W7LG8?eAy zZI1LYm6|dbO+&1;u}c715MtX5AC(7oG#R9HtfdIv!mU=1ngiR8-^Z0%0lbCTdp$Pv zq^EDSy$vw4#bZoPCU3a)sQc|N1Hsi$VfNE>$}QOWx()EhD!~WS2^uQF8epqAzycpk zLeN(WVi^c}A<7K*Ux_kxRorqXy5-Omp*+U@@E1hx?!mUVWX4(vyu~7|%hUr~%R0D1 zX)tzx6_0D*416JW+~n`DKvSi^#6m)IArg{bSZd_k2IouadRXO{T1*O8G;YDb)xlVybkES^FKqtpEGSF~MJ$M7qh@>Ft z^V10_MY;*SQh+?JiYTOc1jHyZRWu9{E#oxDsC2{H|0h6$ zMd!{il@P5_eWG(9UblUgC{VvqjlQSTO*G5ZU5iMl@6z4)-f8e3Uw;D$q#UhwZR1%0 O0000Px#Fi=cXMVQc_SSSF4IT+1zN~}^j5D*amy+QwT0PyIz#d9f(IT%W6dk`^7dxNC3 zTE(2C&ABm7YXATO4@pEpR9J=Wl-ZJ{AP__mO##L6|NnMs1H2u2#h$kb^T935LsnVn z+^biwdNh#!$?m-$e}~|u$u5WSIbj$k(lB7211QB)!Z5{=2?#9sADvh(jSI^;ObQU= z5HNU&b9n8_K2zebESM&(z)s|koTt1O&H+mZ><NMA1i08$cy*8(_s)Hr_h9%?@WNG^WNhyobdD-n1i zNsJGd6_ls63=yQ0l0d4j{&ZbI>G8rvfGySpwl+XI^%J1@rH?5MmRh7Y)}d2>1@J7* zsdTakV&{h`EvJ62TsgB4XtA{s09#yYJNFX+u1o{DS+L5%m+BAm^+sZ}4hdY|RztvG zir{?L1Pef%yph&VZ5fdA?f_hf0LalOd`ls9w|)gki}EJX1+zg<3~;y@!vmoOC|Z#} z310!u8K6aH1keEYeg>@hkE&7>K!lC}1R#IjW84Lj*8||rpL3QqH9?F5$p=73`IMgt zBq9*Q66AbeeCZ#o?wn(eQT>!F_b|8sIF#1yTiokdmNLFew;SqLjOJEmR~g2!N!V>K zIdHgsKn-DAQM28BgCBspmmm46A8T3mHvkzYGh%%f-RUrI1%TRwe!u+)N&r#cARYj1 rO`v;-n&mUH{0^P~?vbxv{df8cqqiYpc?|%g00000NkvXXu0mjfrj{0> diff --git a/graphics/pokemon/gogoat/front.png b/graphics/pokemon/gogoat/front.png deleted file mode 100644 index 3653876d55beeec646ae4eb57d539e962178ad54..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1032 zcmV+j1o!)iP)Px#1ZP1_K>z@;j|==^1poj5Fi=cXMF6nqARr(B001~RH~=URNFV?Jpip=~5CCvE zsEAnj`1rWExQH+y$f#&g2msJH7-72X)&Kwi32;bRa{vGi!vFvd!vV){sAK>D17S%- zK~zY`y_LOd+dvq`6%mmwH1x+wuxt$( zPiQwK)=LK&py2!wU>;*nY0ypeOQnO%%)q`a1Q4KINWzs$4Zk**(Dnteb@HAuuS99! zmJR?N8bOeHbUdS4BoE^Flz9QAw8jIv*KFXg)T6_CxDRJBIrUn2)$eoO?>0H7i;ybo z5n{#f$Z4xW#eKXPP~bf97dvNqhW#wQ|M6fni9O z_nD|V=X(<1ygQ5Ik227!*KhW<1^44P9*+StxHXsq^2QsafbH>d1s9TY>-)F6F?Y88hwL(igi7nF_3{Xx?z?1=ezO{s+s*a#-fg{#XJs!%yLhyKOLQ50C#)ll> z-2iF2jaUXY*z*L~oQ})h95~7Y@%T`DUtaz!r~irRR0fXX(MSlKe?2d=q_KJZ`$rBK zra<{D9;Lu1*&!aXB*G8;d3=}vU!`@}oWgJ;W9PtBes^45%^+icmJgM`YV&&bThG|* z<#&eqYxYUc*x4<>&70Px#Fi=cXMVQc_VuQ^&IeP#A0IbdbTCDD@Qmm9Ydtwk$&1$q_Vq(?R)&Kwh00000 z0000001WpYtpET5j7da6R9J=Wmg{cAAPj|Ly8&|P`@imdg*3O)sedNTn^cwLd>C^u z9ftq-LIB6_gvc=r^x*gf0})0JVgjNt#*Yw)ECwW!FO*Oj{RoiBS(M1WQ%cDYpU7E6 zF(d>RBg-Eq-|D*wFjn~~AaQN)2s}N6{8isaV11Qe0qzK|`aK}0 zcLd<#Z}esVd_%YbZ1p#Q1m^^JlyVQ4^e^R$6p)ut?f|Nvrd%#E7?5jF-eh2UJk>K` z%u2AS@;(98r?OuFHXO({loY8R0IKIrFa=;$wG=>dpDgmZz5)0Xq-&K*&^0h2pAcj$ zW!6st5TW!eoEib#N;&TVGLVHnHNaG~(`jI&5MEM5-s)8@wQ+zPT#b1~>zywEL&R3* zT;)vCvoJ3-Gh&=)TK51emmqQw$j+kGMpM9LUZwTHIxjc|L2EEYB--{gs!vds%w1pG z{s{g_suwd?z@Z`dxL8Ts{%er=paFJzCIley?9V`e-#`oiwLuW_UOx}H9&TQ zstd3645%Fgq2@q(71t+sfT3&w^En{pJ3#BL8-fD1DO~CWpppXs9H7tg4Z!`)uL&Rs z@;gcZ`jqGf(1Pb}DJTHy;h`P?Tfe1%2I!J~5kTJtcvrf(c1{5+9RL{Z?K)x#WWZwQ zQ2{zGj(7u*j%Kd{Ee=>1Apcznklh11m7k}@YRE0MBLQ)c_Ky+NK-!kvMzy=X3sGy$ z+<{?3A$0B~`io&=cQN%PUKpY|Ksn+55~kE0}*vsdH?_b M07*qoM6N<$g44E5zyJUM diff --git a/graphics/pokemon/goldeen/front.png b/graphics/pokemon/goldeen/front.png deleted file mode 100644 index 4f4b6db93922b9ac262e679c861adf5b1a3762d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 710 zcmV;%0y+JOP)B?ES=qSRheTo6MeF4Gx-J9vy%s&@yW-$knLcZTU_d9>6Vcf(u4zv0X zz@p0435e?d1+-g4RK5I?5@fQ2%X4VpUgtuerFITPWRvX|B%yVeH#8taBCiNoFMzjq#7{~-JiXP1SF#v!4y?DVq7|ZaC1;b2t0krBCIlMI<%V!M0tgHfQ z?DkZF0J7PH0hC(x6=FTz^{dq?h~b_F+8b!-lT{#n84hIC0x-=c++*bH`h`0r0Qtsp zwx`*MUEU<(0`M`RrUc>ja{vvs`S0eGWPOmloyNNL~R$#B;QU%wjUcq=zT-vy1Dl2aB-}+`L-N?VD-5SB3`z+ z#yhXSYrylP=j5?k(XtTBF4nlWqplzuby?)1{N>qv4Bf8#bpDg`u&5D`*IxxtyvzL) zoqgQXDW(AMh%3VtAn*!+g;nKB`2>h9Sm44HX2m3oL}*uc?ey( sNzSlX=9w^^xGb*F4dbfQH*wA54;lmEP4&!QmjD0&07*qoM6N<$f}@~SUjP6A diff --git a/graphics/pokemon/golduck/front.png b/graphics/pokemon/golduck/front.png deleted file mode 100644 index e670ad751977d62ea6cf1ae5bc4979070fe012c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 756 zcmVPx#Fi=cXMVQc_F;Z%atkn<@5PN&H-WVAF|Nn~s0ROD4)z#H=Y7qbbq@<)d)zxZ? z005xa_j^XX~dTsteN@=c;xXlHM;!Hp#%F()E0Q0_xbv##sLejSM zoE7*Sv6G7~07@e%&!~eZ;GhSx|NROjsCZ2Z!&$&_WBB~7NlF(HDgpg~S4?G~z`So% zztZIb?{RX~@Arh}gIb6WW%iOvV?8@Korx0xO9%m-u5j_*MYss4dSgPC=7qx|wM$S* zTml|j&@LT}kmN^>2~PwN6Yse}4MFZ%y&ak1bJ)#yk5mMufj!6Y&N20MrdmF(AsHad&h;D{nycG)G2f3c-UVOV4+ksF9 z^$i}+_`312XHM&O4EY>i2;lDSMo>$Yr$S-q+cIwg)2j11Kd@2nLm%cb)O-bF&nhnb zkZu|AJrb~tv%?UuORc{rP;$Nxa++_$kBc$z>fYwK(3Pm~l!7MC}O m;{?9QP#R401Xy4HR(u1!q7^?gO_%uq0000Px#Fi=cXMVQc_K}rydltE%@Ahf+=5D*Y^b94Xy|5{2A&CSi#v|5~tQuf}9v;YAA zQc|cO0Ol)k761SO^hrcPR9J=Wmfe=>APj{CObOtbzW>`!b`oeiwy1aK!ps_NyVxK3 zrQU8|``QZ&A>coZyYQJj#uUO`OqG81$?hppyt@%4yMB{kJKrgab%bBMMKJk21tmZk zV~8IR6o3pkA;HK9=>)Kd{nd*sB>7TA2M8gZ0VwCpyaQlYPlF*uE@sXIqGv+MTn8aY z#$&h-Lpg%hQ1yU66S&suPRLr>WCxI2zY9_ICj@G(c7%1zP9Fy?3iuoVf+4(wJHR0v zN=XS%X+Vycg%P~rdI!n+w6&x7poH)jKw5|@nXuiGx{Bh(Js=YR(jQNHZd3{q*@6|@ zYUW)u0?0)iJt-s-(8xZ8pj{&Y!2lQ|g-ysB;z*F-Rm=cTH2p&ib38!#?S`;`=VsuzMdI`sdt1E9}- zgA~jFfw)=nn05fl$h0OwQqV5-2%@P<-2eG8Jxd5A@~8=IT=GP(ZOJ`&sI>~#+Llqa zs?S{5Oi9}RddPXZ7rLl{>d^;7y|PA-dr%*i&Yr*+O-i#AC;_Vpv#EM@+W_9@*Mz%-ny5( zWe`B>fc6^DwmGuQ5j?SwFlTzI;Ap(i^KO#p=8hQ0#;mV62mH~iDZ%EK`hZ^mi1vD> z?RmeXC;UNQ@ao!5l5(ocaa+{va6I(J~HV%6aa9iie#x1D6m&9a#Aso=S!QRQ(|>uXzXiH#T3*_XqOO^*aK52 z_|y$WsPYgAQ8kg`PAnihd!-~39Z(1U7oOb;)gNJCM7+f(zn`Ap+0Q2k|Kl&?{=Fp$ zNeV9+c#@XQs*>DW3s$*QkgXJ1quIpOiniBC0aYl-%@D|prGPAfLczB4*a*XDCqPA0 z3Z1;w7FL2hvr_;m*j8Q;@47 z(MIV&ITa|kKy$zu5E}16R02@Pl>rz;Uj|l3Ee*l`uFo>8FT&VJYGU1)M|>pf40Tgq3_SJL?${F2JJC(>Yr~x?FjR;iICfk5QECh_UGO^ z0N3+pqm8v3F z0zAWfP7|Dxpvef=($rUf zSa=XnU?_Nq5D*Y3c!+?&$XKAD_~@XxsBqZGkZ3>vz?e{&a3}x(00000)v@>K000C5 zNklHuA5WrsvYBCCx5};&^Wt&8Y4lD}|?ZQM-G&li_KzuY(cQ7j+1$84t zy`iH4K~=|0nF|n|0~Y9^kMp?6uzA1E@dNYwKt{*aI{yYrU<*)a z-O<;zmE$k3#&z0v00MUlsFr1s6QwDHh>$IT7(!t00%jTYI!I|U?m_^t1=!t=J?7o^&b2|fW3_{g^3rZ%YQZP3a_m9C!?t-0HbkF zkK=eT9urW8X@BI3ZK4`g+&G-4%jEBhB>@n^akqJBnEjD=`Q0)}7NoZx$c#k0nXF!W zmz8;vE^kqx((YIQR#j@8@~?P7!MvFm?VX;0yaH z-s9lq>)*=IO>bDsk>cX*)YKnN`aSpo0rmHnCO+Tu8>X(VK|S&`h8o%alk67e5fm7V!mlqwg_-sGVS3=rRMf9Dvg^>K=e2 zBHl$H;y&QNw!(8QHceL<`ZXTZbm|?sPk>78v<7g;N4EsDa7!4X%i4GZIs<(@5g{R5 z0^AJ|uvv3QY%C}bJkP+^X}d-a$UNEdZ-=$qp+`RKH9*zXcBxJ=TR1sXR|YwuL`GpK zj_n*6FquvS+QLB}a_%&1VN;ftYRFz{M6nP)Px#1ZP1_K>z@;j|==^1poj5Fi=cXMF6nq5D*YpKv=-2$mr1Mh-i>durS!*==k{f zXkd^)I9QN?$e6HD(BP0*XfOZ(06y};!TD0*I zA^}s!CJP?`vvdtr*GlC(^xd74vz;@jxB1@B@15_TnQ0F97z;zz)*K&V79zF^9{@Ix z+HOk%ibF?&{!^eOMFf!02oSn<;P&bLKE(m-H3)K7rVC zTfmddOCiK;I>xOb&%1pGH=E$uOg2Gam;;7URiH{5l!)VeZM@=dFTbet&y~p8P9NzVC)z{V{YnDbHzBRdQ62cSA;ai;HXEaESzIsS$P)tw zz?+-K_=;`@y;%t|c$lk!RW@%iKQaL354RMLATgr2D}G*=fWMeOzmYqLPU{k^|1RbW zkUiYV0N*8t1YF*@U{d|4KM>#H-Q8oZh~nAWNjcDs_qEh)xq^L1LjQ4 z6OG}kiMthW=;;(S(AiN3V|=Jm&=iI=`xW3~3DixPCSfR-uQxIYO7LATr#w1P1#Y(i z|?^hD&--%2y((zba2*E2$ss31TPyvm& z{O1919+Wi#F{;Pqts{4!!?^<7atAH8s1z}?v}n=o+kw06cIvx*Iff|m9tDgqhV8e2 iW!p%e01h`(z}P>%Z8>8@1>Q>l0000*6(=Gb zA_RaSfFWRmK}N!a865{4EFx}9n6V%t0jL}THhn(m1!Qp+ctjR6Fz_7#VaBQ2e9{aI zjJlpKjv*eMZ!d1lJ7gfh_8?-FgpuHP&MH6cYe_dIUtnJ`VNVH5=Mw!1Z#+Es_ydkc zyUT4(S3giB-ln(qh^J@U|Ht1|T`t!Cd#Pexw9x2(#bd^b4+8I=oDdK-Z+zq^<>&EJ zv}!}bqfGuAqA6MiLcwLMET4Javu^N3o5>47}&CQsR0 z*FRjklFU$XA*U+9?Cdx31Mku~v_A3cYB$V$9mRiwKeX=M!qRiKrdw4H9x1)X`(QTH zM(MQhn};=C=mSGFv)0006J zNklFv}rVNec?v?bii<;#UsklleqT(A$BzK7n z{Q^n0EU882R*Ae)Me3*OamP{q+%Z>WgXhQdJa_MbVf?!na-44c#mMa<(3ZPDg$`nC zXL2wCu(by6{%Fd8nGWcCFq!Uv)&jWzlh-FS#4W&Da=-(4MGT+PMH7fgk-*LUHjqdl z;J5RjnQ%))1$G^!T2&VDEOm%WpnCP5rLF;@cdje+qnmh5 z6hK($aQLJKK7#}vZ{l_Yi9$GrA31=}uCLn$X2wPZA35NEQgobWOgI*Rq5z-e<(|(w zER;WuD1(dBF9J~MY?gRD-sK7EUt0yxRls9^SD%odw~NzIYhVo7oG$l5tpNuxW_qAD zKv^*d?5hnVfGK^cO9-40aNtm?+{d9eWB*nE#5VkaswK*1WjAx6s5yL7d1$sR(A(Ne gZ3~lh-To)nADZOS%qMl(qW}N^07*qoM6N<$f-3qixc~qF diff --git a/graphics/pokemon/gothita/front.png b/graphics/pokemon/gothita/front.png deleted file mode 100644 index e7052bf8d077101fb360afdaac8ea4849411e2a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 495 zcmVkTpZX?Bk}{_NbOc7Jc+T&@PgD0Rk%_+F%aks zOJ|m@UHb{`ztq5LCu=Kl*L!r|%kxzTx#*v&;*>#)3f>1yoQ;$ z)xdU^8UeD#&E0f~*?zaO0qK6f#_WB!FatTR-Zg;RgC!wX^N+(4zXmf)AE?^A&G7N( zvu_2|CRZ<9SymvVue4sjEoacG<%%n{;5J_qE8t2b)&x@N0dRBS&b}*-rLY1Om+6GW z*r$^yYhUXTp|SKQajzZ5jN5k002ovPDHLkV1ikc+e-id diff --git a/graphics/pokemon/gothitelle/front.png b/graphics/pokemon/gothitelle/front.png deleted file mode 100644 index 7178f82fbdc37beede783e323a69c7aefa4edca5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 873 zcmV-v1D5=WP)8S%5XaZ7>CcV~wP#}>R6cL)h%PAi(Vp#WKy={47IiGIAXKSN=@BGl zDrAY8N8lZhcm&>oS?{5ozcR)7qf7;$oZkWXoM$-#Eae9`^F+$=p5LkfVn^5w0Ab7%OeO9BibMjg zvjqhDv8J6A4I#kQe!O}eKN1{o#oC`Jf7O z5o}T<>_#PceQP&0wxqOFjf{WzatW84Yn$1sj2*)8uuC3_r$4_PTwGLpkWN*aJGCj` z;~3+~=c_kgf4!U9*kk~^8^O8nU=6{huIml>YTB(?s4N)3r_bx(^(`Y5I@3f`0Wi{! zzuy^-K+U@&16HYK!~eK`Q&e|h3;|*DXR1R7Ub1QfTR(C1jH$h|4Z4r!cV>v0CXL>( zl$pi+w8&ONE^SnnujF~R!4^<0<+*ncP)J$5bjN`t%A-7l@f;b$kI60E@r3~E3q3i*)zAAhK)=~!GNAh~F7vV+jlPJ&f423xQw5k0rfg544Jcw}J z8U0w_^Z~Vr9GDV<7JP7D2uGbf6oT+x6WRpoG~GRVI`&X#i^l*u7vcngbPR|}ahj_W zZzP8iX`Qf-5#UT#vP{&<3H&i9HQAVx-3j?7xy=FK6R{S?CpOL&2&8T)|qeM4&HU*N8sf zc7OzOy@t2}_#%q}NFeG|fUQmu$_UOi0$XU;2moNSM2G+bu{#1Jc^BA~O91WM9_P{{ zVA>`^fYKx2ysr-c%D(|9vX+T3x%R#?Md>}o6wX1n0d~MprL`i!6pH3q*4ZbmjZ;s6 zrXkkprXA-Lswja!G(e^0egIrlH-)^YIu&^Nmk^i1b^s>v(;uj6#<~w+3)Be%xBjg| z!nvpmaOa$mxBm3emC})V029tF?@RBFpRX;&dlgVlEFZpj^Kiej2-|)F#w}aC{&u?g z{&i!y9LAZnjGGVVcX(og=z)}r`03M+yPFN#;{%J-%802~zs_f}C(Chwzj(ZB?5Tbq zsn=D+uJWJ9oYvxb4?GBg*R^;L&1IIu42=vdF8~+AZ8EnH4Hzga3*G4QvQ}{sL+Y%m zM*$|vIK`VLOFxqTLU3VqB)pu6qYdr_{RyTNfU3<@deSr493kIN0}1Q^@`)`pCPC1% zn@*twJ+6A%1s{749bu3B$YpE05OOX7rr19P*x_aDh(8U?d!!ok9+;};fpET04KVK^ ioI8m|V){D$+xiXIZg z69%ndNNrm#H7XJRz>|zZD{wS0?}}mo0053%yGN~}dbt@UdF}LT%A1xEnm`Vs8d8hnKh9 zz34kssm=k_dEQKt(md*~McC+Zg9jzDR*0Qj~#3xGjOATpE$ zT%rJ_z=^Xq|961Wfr8M}J7j%^4DdpUg776^LZ2Z#ayn20+K)v52msEsMGDZ{vV;Yd zMOuSN90}Nv#L3TV1eA#cC?pYi05Sv`HR)MMpHTP}#M50kziv(9Q*+E1)}~lLrD_0!~>Df|5=i(ER{$EfwV~?*Ndy6FV?# zZEyvUV*qjorTYL_rd=ZEV4wid9Hg|Y_?!&Qwf?yk=Z`uKV-P2I`(K{+FGZXmRvOyC zIvn=<{bK_F)%(>TM*_gbRF~Ib4MaOhF4`i0kYfvB{p7qYL_EU*8G?fs6fLG*RC+_8OEBnf=)1GyNY=Sf`oOlN_tE$J?%fX~^bcX= zr|)m3Gb3l~S% z4MvAV3h+#KpkXovY;sN$62=SGV9mXO00WQB7DBw0kjOKLrfkwPxH#HO<_5tf;UeV9 zUzW}1;3C)YVznDYW(<8ruTVP9~=r$VuznIkMC*H5}@qh$}ei) zR=_*D-nsHI*4Yn%gHGoXPb3uZK>}EB;se0Lj$g-#SxW&0x*mq#{6bw1OPe28826M%3+pBfB|A4#A(34q0Wq0(b58r0;I_}01lo3iMeZ10uw?+J|o~&OBLb(a4RK5loo*9=vq!mrMe(d zP6H;Z9YP7!iwXd10Z7;))hqLu9ka8Fbx{HLwE!e+A(B-#j#-VJIE#HDfi5USV?d47 znr{I3B7yjnlrz9#%`=?ESOJ_k?F`_V0Fd@?D3TL0+ZOE>oUiS60PXBS&!}gy4J? zzVr&nXh&_3k2uQf0eBv9E)UAwq?1lJ{8UUlX8$Ap0Gr!=82$^X-~a#s07*qoM6N<$ Ef^>eC`~Uy| diff --git a/graphics/pokemon/gourgeist/small/front.png b/graphics/pokemon/gourgeist/small/front.png deleted file mode 100644 index b3b659bdf10398e65ec7c3f0c76dc0c784a824d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 909 zcmV;819JR{P)YDQA%sc$>PQg#tZ2HTCH0o39vU8ZF^-Q4YqOp2E4JMR#GcG!3IjE zY}g0Te!GzZOSm;X5!b)o%*^<#vXvaGA|J1&ht#%>>9K3a^(eiIr72L^!IenOpje*j zTrJ`Xu+I61)l@`{x$ON`9Ke{p4ilGndQ1)t5UMNwwotx4GLhkke)Cw;FI5=ZWpNo? z(nlq@{PS~Ydt8=}P#ZvxyR4v%(6P<-&f2@u^lPxzJ8NU3C;-4-uXl>Eu_f=9DgZv6 zRxsWz0QlV+_fN5d4LNAz9edyZ(Ke2;bczzL>^S?r&s%C+3brBnx9|Jn8Oeaku!DX9 zIF}CquRybf?g03{Tm(E61HUX4@Qz%AbF(J>|hY}&)GMM2DtU%?$6+nZ1cEmS4 zECAL#00O|wM+h)$-4`R=lSRZcD8v+?3X7Q8n;8SGPW%pBP9y+U@MbNI&UfewN;Mjm z^8t=hwJ7|&>QG{aK_=j^DMqM5x_L3CRL_CNA#2siiA892GUxyZQ$wh%(eRL_UxWfg zT^eM;AroM3@(n-)OXNYb0XKRs5@6h+W*&Gh0IfSB^eJqj8+OwG?RcsHW}S*h^&k(_ z$8fHTCj62CfXp_LD}Y|L$Rz~GfOyl(!{Cxkv|9gC53)BZE@c=*5BpzV_Qzq6eHPb1 zKbiFV{XrRk^yAX?AObMTZz2K1@F@y7#4AsC!?v&9AFVbRwkqQO@uK{%NUR+P71)T>u#h7i@dJaCcxv9O;^N53aB)3 z{T^_)A-%o7n{sI4@}mi`C!gO}O2D{-rY8a-TFN9VxYU@8eCa>0D7?Vs$-tzpoAal`!R6T>s{do2?=}@0M?rX0I;YRG;!*!DL~2HilXm9si_AFcwx_d z7e#f<0<8y>?|A@RF;oaNfGM1RM^SVm)HHy9j6L)VfJi?DSVLg^L;&@N09Z^C_%^Kr zU>&s42sj%o{|6u|8Vv;?gFNBOMQDG962vx=OemVElLn01*<^ti%W) zPeln%O(P*|u$-!_aYaaUw16W4VUhuaL)(DFvl~(Y6GC_~C(y1}YQzEHPDt=r5jYkf zrR7v)st*!X74Tbh5lX0E)&N)!LBi%rulxggK+kK|WewcdLy)jJPgQBsgBH~2EDgB; z`k)Z2K#PunuL4NUG{6G%(OF6)z@Q5`pyLBTx_xU5nm|DZ?1pm%|XEUj#t&1sdRyho|F56ky7XFVz&de{GvHvH6zBj(fli$84%IyB$EN5)W7aAYz&k7KjS)4lyD%L$tX8FNc9N#>6TxOY%V=iK_&m zOyfRqhDjc0Ut|=8A2AKJ=mJa^c{u<2Fj>8QkSP>PU8tqsNtHtu-9MK14p0<*AP?2f zOq5J0L)HaYKmfpXNmb-fteMt+s~O8dx+(#4D7#_>gqUb8sUDDe02o31?&js?`AQR6 z&<0&caDZI9NX{(RKW&UfFbwfS+mOP~W| z_OFSl+|*rNoVij!eli7#uyr~wnTb;bw|3j@x{LG;o`#V8P}VAiTc`X?#L|M zIP2*_geiTt6Ps0RpB+AcUEl4mU0+53V_03aAem9Dnhrog*y3$^=DR&q-DW zl~-Gr!5)=yYWc~xd|d;(DggnEXV~?POrN$@0=oy5#kv6Mtvg}`^n>Q3O{HTxppUQ} z~J#I?PAIAOg;c>^l^m*4943UBtcJNX08 zBM`F_!0C3t#3OPMLZli1Ll9vbC?<0{ee;NT8PB43+=@002ovPDHLkV1h8sTTB1| diff --git a/graphics/pokemon/graveler/front.png b/graphics/pokemon/graveler/front.png deleted file mode 100644 index c6dcfbe9fb7b7489397522e7a582694c3992d415..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 747 zcmVPx#Fi=cXMVQc_N$pTgP}q(L$7!GTBq2wsrEJ+3pDMWMo0$dJ_t zBHu0ET?7z7_tF8MuLUu8lwR`r3Rr+8C52}_#&}*aplcvk9Jfuubd}^e8hXKiY@8cd zRCwW?f23&pgCH?@aDagbafD6KR%C9O=c;D-8malO-3LT;h6oIl1nla_z~sT~A)xPR zb9gE+SgLUtEXTuhe6mi(3SKfIIiZ-XQx?m4pd62p82#>vd-+n)3zSI(*omc0YMSO$ z?rUAdT?XBt!z`7oZldb>iFY4z(+Lfh;Xdrvj39#!;{lDaxrgJzm-0;A8`vTqj~E2N zlYrTni>o&Bm+rv>Etw!5xS}kN+zG11tWlebq337TAcfHZ)GGkowKO@BF!ccDiNJ=) zlsl&h?7nTaVXa`vY1dUq0MMr<$A?b@G%+8VS81II3I=?!8?9%A^X^qf#JvR}AQlaMr1EJd{PQE#8U{z7;(8{I!MWCkJ zPE$h|QKTp_#y?nwJ!fpaG;QapTvjo dJMMThz5#xF6oTdDHje-R002ovPDHLkV1nX>Q@Q{E diff --git a/graphics/pokemon/greninja/ash/front.png b/graphics/pokemon/greninja/ash/front.png deleted file mode 100644 index a76b97dca9c8d1ec1a1daf35188dd5402ad19382..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 791 zcmV+y1L*vTP)zzi-n(6vt1#<_`#Cr}mv7lA$8H=PGF$iWJ{kQBjqZq2NEj9^S@~PLbHU zUV!0BXILSPe9Q43!RP12}--N4f4hHb4S2+eb!MP1gb#0~{RZ2FwO% zgHAinGc?({6%eO`6FV?CrpQzNXwOO4Y+bbDxJ4S+K67mV z_Xlx|El=TaWCgr-{N-Hvx`yp-TNCU>JML`Twj zwmb~>PprUspS6j}xard~3-IP$E(d{h)5KB(s}*uE6kr{-wkUKdM3P!hbxjjz2d^O#Nrgr2 z;NWdfG$J9w6Wgz0;?<2Hl9J%xLkA1Pl^f9@*^1cu>QWM*aK2JK(b9lm&T6ux!>lA! zcG;o`WRtPmIvt`9(}GyZvN44c%}eYoUY-UKG$<<-z2+y+Y8x>a#B=aIELPYc6soeNE zz9@4rcdaZE&DuOV8kkHjC@cV{1fs=AI#2-AT$(e-#frO)2qqI<@G`K>hI))9gk5L5 zdK&T}Kp3DR1KYg{0Z>#Lu$2q59c3lJ(A3#hJu(ALE002ovPDHLkV1jTVYKZ^< diff --git a/graphics/pokemon/greninja/front.png b/graphics/pokemon/greninja/front.png deleted file mode 100644 index 81faac3bf777b024020ac73d06ae80483078bbe8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 899 zcmV-}1AP36P)Px#1ZP1_K>z@;j|==^1poj5Fi=cXMVQc_7$8_EIDilk5J*5c`0&s$P|#4g=txLN zkdTo0`1rt3V0bV%kcfErc#r@90EdY{VgLXD32;bRa{vGi!vFvd!vV){sAK>D0^CVN zK~zY`-ITFU+dve?ZJ8lM2JT!Pr7DB(BoCb&U+W4Go#Lru>XE@Vdg@wb$jVevHab-D z2wkYvPT5Mu!d9wCh}nNZkpG6hvrX_>NxO549lzgw-}f%hHXhqD*Z%`huen(pdP@a( z^LQMQa~71s_H8RY$G^`{vqIuEjU;ypnypLPg(*; zhaHQJF~pOH7M^D3haDgQ@*2-zTKy(To}KF+0%AzRNd8h11c2vcT>}DO0O7vB>lr52 zk#OS{U?~B@!V%w{nnYWqltZF&C}h0_ zBna$;(QY~ATsFa464pr!EX~8wH3Ig1at8Ou+Q0gWz|PNbbXWS~{wZ0c=+8XTHFiS4W6NEl`#hvp_}#*2^n3IjnN=Y2&5@u4VLY zSn7Z!y@i0+FNbeceJ&9&K^qDspr~q1Z*lm{qzzzcexOBI2uOr``MJ;`e1hh)rw+96~$5F;@d%NhI*bhaM zKo{>uy%-20v(MbFw@DaKN4DxFzyQ#7@h3|;pluK8rasqaz-qN=QUGB|&C~FO-?U*8 zmwY7MPoLzkZW{@fkoTvqp4lW+MElruWfp)OK-y^va6a)X)x2M*s9RW4R;_e$J>F#) Ze*uNXAgXQTI`sem002ovPDHLkV1g24i>&|v diff --git a/graphics/pokemon/grimer/front.png b/graphics/pokemon/grimer/front.png deleted file mode 100644 index b99fbb299c7cbd84b0b5624ab9e0f5aa57e3c677..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 665 zcmV;K0%rY*P)Px#Fi=cXMVQc_oNAojtlnZdd+y%uw2QP55D_-7==U-(&(;Ok9XAm@=nDy3X+0)R6CD6gCJ0fF$*erTis&=iDg@0eV>WF-BB z*CC{Y3KfB*=|n&*-;`?t87~!*?4f)!yEq@^C$R=iB;Sa2#Z?Z;+7vcM;IIED3f#56d7dW~|x{@>YT$0<018 zu#Tkraz@N2BrJ7-^r7m*X0}2>?&)AG6F`e$6oBR+ppXC(ut!dS3l>jF8#uEtlF;=;Pr2`aj$R+@E3e-1`dJU?EjQ60#d_G`B?*qL8Iq%QGl$GwvBWO zF(3QG^)PxDK*>Rx*iX_6U@Z$ej?#+*)?w35G{B)i*1d-ZX*d#lzV;Dd$-oD^k4^o}-iwz0=P(6c)hYW>@ zgx|w&642=8&xj7ty7w23tVXw!T*s~OsXg8>x!w}@i1KykfrcKCTNrHLJpLHKVk_Gv z(hP*S9MpPwT|3d#E+VhkGO>f*YoF6@-1rVZPJtH_+ZO+K00000NkvXXu0mjf{0%9y diff --git a/graphics/pokemon/grotle/front.png b/graphics/pokemon/grotle/front.png deleted file mode 100644 index f52ebe6d63a3c0f8c2940eb19a212b2aaaf41974..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 922 zcmV;L17-Y)P)5(i*swt8&_HO2NT|SIkf>Pr`1sJ!(2$UjgSF#T0009e zNkl&W4&->o_1mV7}f&6V> zk&qSS-m56xR;3|$igCH9O2vP4Q4=*qn_w!^G^Nm=GN5YkS(CDYsExr>DD)dJKvPjJ zrD$1k4A^9d2r4*>D5t2*304wNShc3AD693BD#?j15Cfo3l$FF7fE2!qfu27&JSwO? z3$YK-m_NEsU@ON*$WQ_L&|I9)Ohi;nIv_AG%+feWB6Opv34_#_h|ojB!HO!XEQ|Ri z=2TQPWSY1-3AGT#+C>Qq1tGJF%huW?YZV;CJ|HCx)l6(+GM*bpy_MXk6k4d`G9h?= zx&(xjg^7hEVAb&=A;c`t>k^vC=}1oi!sCWxds}3^Y!SDlFHbwVA!J^1z+l5!WdP_E z;yT#DwqaH|z_PL9K?KtcYu&LiFmE_uVbk{Tr5@~9>j2m`2V^RntDaZs=}+knt^we1 zgJxcP-Y3r`podX2qNeTOn$2yt+3>vYTcpf%0HQt9uHiYZ1(SF%1F0}Qiatkl$Hc}q zKSZSgIwni|G0^JJJtN2`0K)WoYydz==}5q}Fj#eo3;L2A15F0Bea>LD?BWXOzE_UI zX4Gs_N;^e9!L~}K>F>TVSG9JG3<3eM9g3WfL#s{^bXXWgl$4* zqp0O~d;r=!kPcz^4)w_zn^O+_u&;^KEVNGLVRwd2F%kFyr9lFC2BXP@l>8X*^TR2qbSv&Mmk`p9K4riim9K#J2bcpg@4`+H zJC0rguT~Deae(E)R@bip3g`U%{P3r711x&*!>+~M?nkWv(DcR8pPMN%cmvKV1{Ock zuY|yb(2Ly7$(*j79>im_e-r*3eg}F-(LFkh3o;GNZpS~swc!Kv1j23sZo<0f$9Dng w!|us3(f_Lp=@;FLUw7z0=x0-R>GyX11(rf~Kx1PdRR91007*qoM6N<$f;z~r-2eap diff --git a/graphics/pokemon/groudon/front.png b/graphics/pokemon/groudon/front.png deleted file mode 100644 index 56e10fbccb11f5020853f9b9a127b644d0f7d1b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1228 zcmV;-1T*`IP)k9@6vyEWi85I7!30EvQ(YWvb?DI7xS2uM4|R--U#1TDrF41&Zl0Ms zZ*!F6o&V{DwUvGKC5m=#L(!!^L0 zic;72X$P85OKiMs*7XY2fp5T*#73o}S4*V`pAhP(hwvD9(KJ;9PR*~* zc!zH(kHfss^?m2`)a(s^)I@ryJ_@t>N`DQ%f))e=jiVah`Y*A$r&54zZ5)Ks8P&uS zqOB5}$KO(Gn^JiI;~}qu0=%{Ys4c3&8BZ;N#KGXxpUIxiuSlq-A`M3oebx5mh&vzt zM5(pXJc=UqdgoJo?R%0J1ko`Fko8#h<|+srJ>b2g_S@9&CtjAqv}-j?E%tayY3qpO0K0QByY>CPcY!(V z8R)eGis*I})g@UIvwwz3mYpwQk{_sHofr;L2mo-d4Eyz6iiCYjS)F~k!NoH+smDb8Y`1$?Us0WuYF974Dgor8CK_AV&naQ#1}-@wyL(YGG|zxcOAQp?+PFg+Xl{FnWN>=d1>yRy;B~|XgXe&oA{!KU qqP6?Xlwk*q{LGgc7hae9pZ@|O56LW>9SouX0000?vtkO=VTXm~I<$T&b)a5(T#U;qFBHOk7R7i>4l)sMJKoG_kY4@6Ivc@lf;RVc6q_pv3 zPRbQ7Fhojg)<}1y@m`VAfQ!_T@&b|a0@rX#7b(&?DNlKVD8-$hA+x}N|8Ue%rm*nL zZ@+KM&Mrd#UoamP?ynnd~G8NOyEPE(=l)H4NZ!!RiA6f?R0Ilz` z?;>~s@YUly%a&7r`|crJY!Yub@-ABn;i;CwIl?6asies@cx<{LGANc28HFn0US~hH zfGf*WHx%v^^5d&4Tc|d%JMz5}Fn0$DBFn4%F?C@mE)sV+F9FeLkorVi=J~J1jW?L3 z=_D!wI2!nA>IPo{NFY%weX4L#C%nl3#6{-i^gtbiAHrO{*#r954n=Xw5=j#e_T zbgm!jTANW*M_jzy0Ny098q8$&GoTqAn=x46D}~3|D6mk|WKCmd(lB(p+it3zffn-o zA%TKsvcA#T0UVfCSK+r%kJU&t43qVYX9;D}Q!nQsjDGwe6u`Si-`MZBX7&~E;Wq$J zLZ}s1->{!OP^0xqYa?`aty*{r;dp5s1TD~go0|*@-z(sol$%!!>-EE*1(`D${{&zx zVHEmM>2^>dG)n<@d7deNt6}Pw0GPj(jA0xy7d~Wj)!-5Uv64cp0SEzLim)rdScrwc zUh6^%xL>MO2vqiRL6}lq%s|0t)d}J!aD7qwb^$=wXw^+fYANC( z(UnKtgp9!hh}5RK13*=ROybSS#c4t*=2~I5w=oIi$l89d^wgMC?rRbZqwQfDr{Nsc zgIMlv#UvU>M*!$<2at#y2liSK4o(7yBkMHq&&6MhPx#Fi=cXMVQc_b7CO>_N2wEVh|7z-pzZ(Qc`m{5dXAN?u$xuVjya2YFJo!`1tVH z*wCmj5J5(8>Hq)%^+`lQR9J=WmFsT9APj};;!9|jzW?Ly*pP(m0$C^R$CR_FimH5v zV*~E(cInckzZSWEgWp{*TNM1fMM}rlcHS+@Sv(~}j&I7zAP5X=7;xgdBTBtP; zkzO0xtX~<(T@oz5578Jj3$g6H&^caQv>AxRckV#kX#zF0h;Fa4>|z;zf-eTuLUrU&%I5_R(FW(?3K$=(LxUTl z8*1koq1eqcQgGlS2P}nu7cm$IJTc1RJ##s6}V0H*f$|;OVKmHNsw(Ev>|eR zvVIey4@`CZ`1Gus=~JvYU`zWB$Du}XFHyJO;q^F-A{?fokCwe`vvUS1=4TmAIyY6@ zi3FHQ_)RJuOmUNU1IAX2T7X4JDSkYVzwo*n#NU92sGK7z1`WZ3qr4WW7~R4glVseq zR`U}@S|I*^W`-Q)37^k3CI6VOChLP|v0>LcP7AUu%gg*N8a}!@moEJmy#qIsG_ RFY^EZ002ovPDHLkV1ja8CL;g< diff --git a/graphics/pokemon/grumpig/front.png b/graphics/pokemon/grumpig/front.png deleted file mode 100644 index c5b65ca3b3c48ab5f34063511da0f0ee18b2ccfc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 896 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 diff --git a/graphics/pokemon/happiny/front.png b/graphics/pokemon/happiny/front.png deleted file mode 100644 index 547c652edfee125a90c695a327cbb47e6d2bcd99..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 470 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*BKWUEQqK$(6QjhfeQix z0tF5cH!@}{2&nk+*m5E;CEpzq4Sz?kUi;uzx5`F8Tgyh8>8ZNehooVc=% zTNsq|=!f)#P7ON7HSv<{)w%|!b;hBppIJ2c16IBY{?>Ek+3u;W^&dXf@BCf6&*h@) z^WZzXC;gT267*pF(j3CTFomUrp-O3j)5O%E7CVtF6(%iVYk>_SfAegG{$`}5+8dTB z|D4-+aOsoppFMdG1utD0#=!dexRl5fh8&-zdwCD=8L3w`M7Q(#I93BG2`{HT5(zu> zI0c<}cx$G7&ldCOQG8#Ka!}5&_Ktvq<<(M-iZ6GMcb76+aWiuATDF=`U(T|nQSM}4 zT;hW}{4XAvv79M4Ioer#-{GGki-nTf{&(y5W!}DU>CD{Q{o;}D&+Yssz_jb#lD~}c zPTPOjFp3!pG=7s@{-iFkc?a*$x+@(wB(f()zELj@x!htM&^hz_#ZUEapK>%5@@6uz zT=~kiF>a%1T3K-D)Q3jDrikcQ)}}|hgg)iJxBtbSU+mLPx#Fi=cXMVQc_0002)oMMAYG1Y@wv}#h-w1f8M#pczdIYDZRYEoiil>h(#tb0oT z)qB;XVvZ9Epa1{^4M{{nR9Jo(VF_ z2|(YD(=>lU01+y{fmc01Ao(PO2Y?N20H**5Axs%C-q%5u-hY&!fF+oLiS#jqJAwi} zHGuWIfxvM~FoZc_eK9ce@Q;LHC%CLPfXQQgXa_hM&1T?sEaVa{3Ro5)#4*Nr z56E5MX)C}27!?2`B>+zV@5Db(8=}pk=((L4P}=EYyU`BR%8d|~5CsrmiUNokfVyTc z06O;oQwWRc89+72-H2MO4gv^);($bCVTt1Zhi72q6vP5bp`C4>Cj<>G`UzrSdHflF zW?oI>XzLnnqFk525Cu>c%R;hQhaV-2C`;B`xQkg46HMUgCjw;oD77>LcYB@zrpTdc zGzukA4Dr;_$ zTiIKj?a2Ndus4Kb3$WEu6Qq020Owp&&jzsKo&9sza;n|uLl2Edf{w}i6S(;FRsD;@O=Xm1YLK*}9i^cRHVL1PBC z($ec@+CJd47%M=|g0*mA0n(8`fP(=BK!EI{CIEkXA}nn?)c^^AT7D+bZ(BVRY5*f7 z%E!wbHl2(u@ja&|G{jCB1FUrxeL(0Zpnw4IEugolLpUJxi_{}roJyfVB>UU}TpcQ4 z*C}Pd(6OM2UY%+P5DEi^BVdL6|BDRxdXs;ngY1M|d<)=aL)fqQQ0#;{E=wTY$}Wyo zImGpK3q;?kYa_qE^`170gZmdxmQc?PzIq%RY#r)3iEjvU3uHZ?Nv{YrIw|c;du_o( lZ$JJ6q3*Fa1n57J{{nX!K{YDjZw>$e002ovPDHLkV1hxbiJkxe diff --git a/graphics/pokemon/haunter/front.png b/graphics/pokemon/haunter/front.png deleted file mode 100644 index f9434ad095ad2c88f29060a08ec237a7cdecf9e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 589 zcmV-T0%-j5QWEr1Ec{D;F#>0jARYvn2O60`T(g|>~n^=aGxyVZPVQd2&VE= zS*6Ne3Gd_e>zP)mOZ~R4zR@SMzXFl|rpFI}`PUJ&{yGE!gC2p+&w;Xkg2<16Tdi-< z+EgAO(mqk20EnItfQ`O^p#fYGfKnb1^_f95?*L?dHZmYU_W(76ae~RbiO}d8#s(_r z0n+`MK{o{AhV?T80a|?qpBS{jh64gD#tsuG8$bd=46$=V0G|YqfB**AWq?c{8PF1- ztJ6L~eXCj5)^z&7fdSFCoxT{xyo*Gyw=NOGJ|%fpCc$%Z0U&G%b>Vj%9^q3#iaH+mtxb<2)0f>QaPDm!T`% z!%n`>RaRydVj|ZD{C^0lUA1@n{fm50Umybo1Av}71#Z7StPk&$F*ZDe%UtG*lyzQq zrQ+TCKxMjX$nvZza>Z#aA~ki%+xqa@Tmu7+5GN#}H8h}?9^ z-9?A~h#7Dz-`t!tyh&!X3TBlTt!3a+K9S>~Es*5lXv^88ZxYf`6hnZVPIs1mh9lro b|Fk{;N7R7u?e=0c00000NkvXXu0mjfR4D_^ diff --git a/graphics/pokemon/hawlucha/front.png b/graphics/pokemon/hawlucha/front.png deleted file mode 100644 index 5293bee35719bfc4952414b555c3f9fbbf5a6fa0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 792 zcmV+z1LypSP)Px#1ZP1_K>z@;j|==^1poj5Fi=cXMVQc_ct{xNh$s*c5V&XOI5=1s7?>z1xVXsp`1ojOcq7{Jg8%>k32;bRa{vGi!vFvd!vV){sAK>D0&z)1 zK~zY`<&-gR+CUhF9o@jdkO04c6CJu)IpF|F>CmP>Al65vs8ie?QnOTwocsWmr0T}f zO5GwdTnLK9W_LsCK-`I?sstUfAz`*|kbZY|h@)WV2jp9x3_C#wX^9Yco zYmWi>#D0b*E3D*cKC_k#JmQhf(?lRgGp`wo?_)%oOG-d#0j#6|bQ|8k(PR6mooBE| z3rPUfXf7M?VFT3ijrCU#JK={Ru$ODDF9}ild?_6Ofo3xs0QVMyoL)&_7hvakrod$g zBBDB*r7tLv>Z1gu+X~n^i2&q#*E`3j!x;YnaHfEA6xek8!o_ELwB7E>R9EQ5q5Ruz~nxfML>I6Nee`kzii#$Bs7-2T?XCr@L#Qa@Ve>$1YFeOs1UIBY?mFvs9A+ z{gzt}d<$Nk#{pXTH~=QU<2(X@43Fb3ky7xpl;QyLwGmZX0c$6<%Z(QA9*hr#I= zz|r@`b$Ae*$uEJ|1-Lv^<7l)6qwZ&0AaHW!K3u^9cj6G3UOfmB#wH5Kqm$*y0pL!4 z%W*OC)77t(b-%|%;R*=^>FWB5-79nS)<@L8v_~#Dv zoMgs3=b>YKGd5;PZP*qNOTawNIz0k<`J=Ev*8n?ajs;unAU}I-?%rtWscvncck&3~u{l+H0y%2SeIL&K?1PlrK=nT{>Hf zDiC2v1s}~fkjP6kBBzs=RRD9skoIou-%teYmrpN3TnC)f+eg#?QjKMgK%19D(Y zV2suT?oc;&A)u2&ATuR`vssKH{2eT@8 zG86(pv`gRtY^qx+c&qnJ(9zumydnV4A6GLjzhQgOekouMXWvybiojikcF4T1*X>a? zqBh!`J@0*VUK|7z*E;*ioP(g~ihu6u{{gM-?LQ#}m|4dX)T00Z002ovPDHLkV1gkd BuMhwL diff --git a/graphics/pokemon/heatmor/front.png b/graphics/pokemon/heatmor/front.png deleted file mode 100644 index 0b912da48b18b563633ec83cb318df9c21b7b944..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 887 zcmV--1Bm>IP)9-K={Bw`1tq$003YZ5TJ-iU>Fbp0000000000gUjkf00095 zNklls;9RV1ms* zTB1i5B*Z|+bf_Z#bDZ6@^>d*+5;w$(?&G`fef{n+_CFf2$GIz>N_PMv6t6k|bDq)w z;SeWpz}){^9-xcUV-L*7z%CDwlyc$0qY`^?2Ov&~h?;~4;XQ!!MdUS_v?%icpa&7( zZxn!+ot=hR34pBwHdvo;0dp!(aeM)h)}sZ^myZx~vg!rKRAcOgnGS@{KPj6N(Ibr# z@i4TS8WYyaI5*!e5#<$PssSV_DY=xJf*O24g(*)oU{pN~-WOAehlpz20Cq!V2iF)c zkAC7<=|Hs8l8bA^Q#`r!Lc1=aHQGG`Q6QCw&r%qv8ek-Mz%V8wCC-#m_+9f-l`pu1 zuTvUxjtYEF9cg(7a>3kSMG7!J$$)y~nurS+p|TTWMmEN0WDNMK*28lky12wNF_tj_ z3y3^WRviFP-e?jq0%kb%qVCx9Lju}YyAB!Hp)Uf~TE?W(yF?sAn6UP*yeea?x`*JW zIeoC@oB&@sM41Wup+x0CcC+Yu87H7OD^JwwTy`g(MS$1=vbQ+ooXqW^oN-*;$TN3f z-UG(w{6+?*s(`rzmh8#xX22hS-a?)ad^=&!dNZ3GSjb{s3@p~J0owtmH-?i1S)?|_ zwkT}HuEY-L_X^iGeb&ZF=?Jbj>%zD4SCkJbAJ+Y?;y#UCu7pBdXN9kFk-GQ5I$?@x z(Mf`6j?Pw5T8KT|L{Sf8F>vD&C1Qf&usMzIOH784_?AZ=heMaS}L<4efLh zFRX(NxHR4nG2q(Cr90w1Eev-z9XBrvIBu$#4n$Ozo4%bBFz$ex$ N002ovPDHLkV1kjxjM4xA diff --git a/graphics/pokemon/heatran/front.png b/graphics/pokemon/heatran/front.png deleted file mode 100644 index e446b445dc128c846a8a49b98196e58e6a329b85..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 938 zcmV;b16BNqP)Kl+SAuK@`VRNiNcZ+ZGBz3z;kwN-lN+ zrqV;ZS*#3O5HtxCFaDZ9=tWukV9BYyBxid_j%|l54C}$OAX=9OhWQV~gJ;3N!8hBa zCb6kUJ@^jJ%e*p5uX-cK?0G}468&mW;JW9==PA|8pa1LP2 zmk#LV78!1Ua;e>!0#qA41GKxH%lF9eUZV~m+8x|t^*10>sW#s85CI%vHNSkaF(KEW zR)1gbLlBoK4Ug{x<3N>z4?P|LH1Ql30C_dO$4-wwhtR0V0AwLQ5oX$zTPXJdDXgPo z+M1lw-2%|4^)QU!C|~LxOeV2qS|O08%JdRIhlws+EKI638CCig3sH}@kFdLoQIet_ z)vu8y551%94|0Aj$(k<02vPCux8IqJzHGk>=1bi-bdJ*HKwgZIffe@T>rJheetd(M zw6#igndY*;fSNvh!L2}qj zH_PW`Ga>g$ixk8FD0TK(1+N3Y*WhB$r#X5%JMXskhrkJ*nw{}pm2bTUkBJ;XlhVQc z{S}q$as3(9r*@wQHSRO%#SXC$Xm=c<2Efw-Xq$m#Ae8iUOh^J0wTu!Vvs-|E97~Zb zPivRhRF^tM8J#Cl>#HaP&l8%(+SOQd3+w#zK~XA|Ou3^}Bq5H`9G3xfe3w6^7r^5% zQd%+(&CeG;&iF31nNqQN(J}}kshB`_>^Cm%S;(88m9I`s*y(*xkTC z84sI*Ur54EYZWP}HmwD*V6KxHyxK6gR}iuyQkjQz{ZvIlY>vF%DwiNZoI&7%Z*QbcQw?5` z(RS1Yah)PKx$`#x(sf7MQ?pX!@y@t}MIV!##$^LI1V14pC&Q-sJ*nds4j~pn0K{+F zc{!v22#rrRT4`swj)P87lQDW+T&1V3^Tssyfdlwg>UgxP4gR(I32DS|vF>T7od5s; M07*qoM6N<$f=WoHeEW0MG*v&j7s= zYLN!i_GuAK5CCjbKm`_W+fC9zygtVPa{VsE`HPAJS=$Pw5&$`E+jjTi;y`xV?sf?S zAkKEF1gMQtiG*JRF#JP(RH^Tc3d21l!exH#LvC*2*F_vKwf0_AKLHuW(Pw1i+7seE z0`wL$c0W8rH&0Qy9&kh8u5-B3A%S6lQJ^c+1Cybi*9N9t+xjL3XalNd_9nD|0FO(f z3!}Sq6j*W7Fw@L>VAvz&AqIbkalAf(}Z$_j7+phWb%DS#-zWP%&y zx(MNn*?aC0ofy3gz!(OK>ckkk^f0j67%U*HG3*lcR_huEn6+V%bE9npV4XF!4YsdP z53JljBLFRWfHL$JNLV@d<2kh0U+@aOXehtzU!^zz-#SkLqYA$3{)#F3r$W8=``+Yw i9qDpk3rf?#pVueq?whUG{Bza-0000!lvI6-A0X`wF6+2ddlt)BJC@5%XXk55(;m3^thJpz{e*D<6!r{k@gp3G@jtv)p zY@jkA5Y&2a2BbI(JR*x382Ao@Fyrz36)8Z=5&(u)eb+KUzAfy~ufyX=qM~fQ#StC*Msk3gu)NOMcmLx>lDdz)d`vJTC#fC?ED;8FQBEr+v&t;uc GLK6TMaoXkp diff --git a/graphics/pokemon/heracross/front.png b/graphics/pokemon/heracross/front.png deleted file mode 100644 index db9b244da3e65ed0fbe5970769990db04fc66f8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 724 zcmV;_0xSKAP)MGbDJD1HE`r0#m%WP!=dlkf()G!M{g-k`fjHB0W= z#qAUH?Fw3QY}XQ3H;CX$E-E4sSPK8KCJL4|j;4Ap+bZ1Mj{BU^<6EgC8I7(9Hq1MRUVp z9Qo-bwm2A(zMAsOt3A--daB!dzc1u>NY}n5L_n|5iSYIC#%5q3;Ux0#VaD8;&7>oWGXajI`SjaKVfIR>K z=Z1_sBH2&H2%u#tz^g(rKtl{!L(r#G%?M}&T_~b%Jc-mz#z8IYfQopyo!bG)UM0$W zDXO~Zf)YD`3U1hV<46R`lEB%DUmgH%YBH42|KKNyP8+iayvS0lhZ-dG&s6{@tH>Br z`7R8$By?kqo2Nwb51)jBRTR=E63~yp)BD}t6Zn*dBC-JV*>W?SVmqV)ez_xn|4qrF zPxruLh@=c(4Zs$jpnT8VtX;O72& zDas-FXxjO+p**paes7|Hgg<@k^Ruh@0w9+c03j~{FZLG=SEI?e`0>a90000uq diff --git a/graphics/pokemon/herdier/front.png b/graphics/pokemon/herdier/front.png deleted file mode 100644 index b28db7c3197174a8d54414651628b27b1f3f89fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 678 zcmV;X0$KfuP)c3hTE`j`cx_ zZ2?~aBC&5_RJAyW0=aSZdckkK=Nq`#oPNpwa-_k?)nqROB^+86O2pcCcr6J zMG6C#OYES#Nd&eHkQsBn)Qzs33Q2)E3Iv{7-(n$tTPdfDRjrjV z4SyMIah}O zkr9m-l%lPscy)V3MU?wkMa6vT_W~Z}WMPeHcO3#e3-ld_o{$Z&pmP%UG)W=^W_Z@U zr_!fAfG3#rDE>KpMf_-f2>79pv;86Fys1`mMWV2;_VX;gkuM_T7X>5FnvE#l9RL6T M07*qoM6N<$g4U-gC;$Ke diff --git a/graphics/pokemon/hippopotas/front.png b/graphics/pokemon/hippopotas/front.png deleted file mode 100644 index ea6fc85848c6b101d49702664ed30148ab0e0da2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 554 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 diff --git a/graphics/pokemon/ho_oh/front.png b/graphics/pokemon/ho_oh/front.png deleted file mode 100644 index 4c32adca93bfa19ab055712cb41f5fe02e41a873..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1280 zcmV+b1^@bqP)6fwdKP?3yYC^D23*veRNpbB0AMXcx+wXQ|4QL0obc+r-az(tt>ofx3(<-@iTQW}>HozhhWR)gwl1wUe5 zB&1xnY*=wXrzRA^Ip$YF%A_7vO&X~X)UXVulBr1IJ3Bg6W55RtK&6xfDiQ=MdrZQo zaX@V=+qjgj!O5i*Rv{`OP-z-@Tx{f+3tLsF5C{~mxfPK`>j#_oWq6`%yY7Xt!oc0@StMrkYPVg+=& z0U&D{7`4gOVO&^TT^^P&7=Q$p0eoOi)-wu)M%ASV!5Iio%@8QDq2ucxG9yrM7(%xv zI3q_lsj0V7R$|vrOksx0!Ep+MXMLwX))81+z#`$;OyY7C!YH^{Yv@^jZ2t--1QJ*R zUdooMGE8X!Qmm;}WRG0cL{x5v8o@~^t?AT4GVRnr-3KWcCw@(VMmYCY2mTn@T z4CvS-K&u*UBQZ^az8V;7Fc3&q4+2Nv&v1GOnq1ufMiz@Y-TfVXu7`0Ap+eh`aVZx9 zyd+|sOebi!7{o1vkgOXb8-{QZ2^SsP+fPY%;Sr!FBv364i<#>|Z)DP^wnsA3Cv1FK z0%}2m`t{-RjhsE2{CGF{F~ogTC?MU!V($6s_#592Mw6%7_nCjF@Bdwp(e4ABYes-| zXW-f@y`P!C@_m07k#CAp^CU7rg5%mY=>KRw2jC1nNJ;6Q8_B?Vw*3p}|7sqjAUGp6 zZ4$k$>)z-$5O_2XQv8*a$m~UIiaGu})jC)L&12HDN4+>Oqa9++!xGKjWZH9`7{NpS z%MJkN0K5TLTzBkrqauE`ejs0-&tE}?`Ps~U@x*op(G305gRc(`eYWQFm%Z5uM@THg z*md2`#aoDI4ezT*x% zlMVmk&2%~?{#ng)XRWxz;o~o!bFKeuZ+g-rq_*x3ul|hywp;tdt?^{t^(HfSdQ3QP z=)aD-Fyy@+)y?v@W<-ZE^Yg&QJXjM=trdE2H=$ct{p_uMZE1!1%+66B{+|YPn@k q5XT+9=J=SG9JzM2%jSSz?*9k>u`y~%GmUNl0000%Q>qxc_DH{Sc&?qLE$(SUyK73TZzO<6tUXV;qb%i$M+9( z7ahVdddtp-$KOB2x}=h>A3%dBst+$NPL5#f7x#;LdJ8Nviq5~C4~L(VL_o=aSh)p! z#V+0^*ettDC`|-NJWmE&$&a*^X_A118KF{#ox{u9Br(md#WM8sjq6nS-NvGa8LfwZ3GkECDuF0V6o;_slh1#rIM@ImjFw zpNbt3g(;zwl6=hoUS?nmC0YVY@8!KPz?GLdaFqE5MEzMe*Yp*VpRAd!l#neKL=@zJ z%WpKWZved!uEe#y&0tM z9M6e`)g=^sYVy0;PgysRkvzSpqWw_UHhORp_ZIxW=@@_}uvp&$0zPoBS|{}0C)BzgJcaGa?<%0vxdZ6Fm`p2E98C$GjJGQRf*suK p9CWLJG!JyDip&U~J`VhQ@dvkH^PKN{JmmlY002ovPDHLkV1n|Qe>eaD diff --git a/graphics/pokemon/honedge/front.png b/graphics/pokemon/honedge/front.png deleted file mode 100644 index 923e4563dc171229584c9efbef954eef845f1fa6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 699 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 diff --git a/graphics/pokemon/hoothoot/front.png b/graphics/pokemon/hoothoot/front.png deleted file mode 100644 index 8a89546b76fc5104f8ef9e89c1e6ae87abc30359..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 548 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 IM6N<$g1QX?00009 za7bBm000ie000ie0hKEb8vpTg?!Eipdp1IMXv!iWn_mD(tBU~r{(r_$OzU>1Y$M6Uw0MMG9Xr816K+7$yGFewh*9mx%3fT?Aa2Grj zyL%Hrvl9M*F&5VID2vy%qJ0g-5nP9HYaIfxT5yA^n2l>v4txRljeHj4Tp0Q{Qg;~> zTlnly!gw_YfNZA$4r>7bM38qH)db-1#RA|lHV%wj5fVxOas}uMUK>abxkR8GtC`Kt1USIL+5>vu<&szVb01FuY2z5fz^`_^NI>b1&&S*VBi-!o}q|qci6sW;`IrT5r9X_JhR^s@G}{9HU&T#mt;856RrDL?Gw@` z5m4#91WAVPX`BMOr+z1;ozj^An!T=x+b7*5AU!(27+sF8v}=GryyVLv`=d1CR-mdD z0Tnj0K?yb(U5!Rtmd11NL?|oXK<%85#^bL)FHH_`xxh&5m)1U9jK_bzz5R`sBgH7l zk|;N6t^X8&{=2MRtO;k*%K^Mee*HZoCZ@&OO{V}%Y`|+1v^VVfyc>C@fQBt}CvW)&ezxSW_-WY`R!i1pvYmff8 zzBMSlPtc;1-u$TCC#d7F_?K~y*w#5Bl+yIJZYPY@&OoR6SkF7*Ds6!0Izk*GU(|9t z&Qa?jV*auTfkT~@;)q5Mp&z=N5SD(toN$CQVvvpj47#mv_vorrWInD%7(7xVMfZw&dIFS8_W(oTG&`%oWXJX~*a11yl{dq;fpG(Unz{T?`7wYGpz_wL z^L-6)-caiG1{lcMkrka%gl@-juCkr$Mi2u;N_JZ=My98al~UdnZ%7rV2-xz^Kcd$a zRvrK<`(i5Ru?dEu@=@!sQgs0Qx*_H7G12^TSV^w|zo8b@@$DAy^XJ9teYY>w!l=LD z9bZlofKgvt-k0(}WTD sDy_nIfTEq=2^ePda{TtfTYuvJ0U7r-2Q<0voUTAI{I2<^B}WN3cGZ~hTMzGd06D( zbzUkA3RBQj54(8SL)f|Gwv%@LFZ;dsl1xn6!w!SJOUiqne1E^Zyj0Wv%b_n#S~1nd zTAi>y19LI}a)8n;37i!fkN|xyTVDt(TM~HBML+^9J1IHibQi+CE%9T%vSgZRf(4e! zcw~RP-n=VlVwj0Yf~-5a-@-2Ptr$4X?nZ)CH&@ z5VySg@#XmZI0fub#*1Bdu!I2ZSyC+@C4jLZ=avHY&WQMOL(d0~kJ9I45$E3!^iXV$ zC{^J2CIK4^OK@&t5{k`J0dNz_{eH3)B@$o>&V9z%u1we#Z$vvG*;bU^a4CF0CUJa9 zTe-7c=4xF3isPtBNIM6HW3fKIzKcgE)rYH6-10FW-yt|DT1N17D8TLA#i$r)-ettE zFQeOw!6fhkqRWV#9Ts+=sS|a0hC49{;IVNTn+8}i4*nA8EF0}&fTw0^1cFS=6#;Rc z+-XGwm{vp=-z|^^ZB2;KlRuXRrNx`ID84#z9|~FsS`Nr*ql2QETQ^uMP_5N>5aa_4 zQMf05(82%(L<=Qa7@*!nH3d)dBFJ{9Lwy?b3W1ufQx+WLK-MGH=pcAl!tfvi_@R(00000NkvXXu0mjfZDVa7 diff --git a/graphics/pokemon/igglybuff/front.png b/graphics/pokemon/igglybuff/front.png deleted file mode 100644 index eb39d1f7385aedfa658ec0a31212321843c81a2e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 407 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`7zFr)xX!q+ zV2(u4|Fc*Bui3jLs8~Qi;92vWXPN@t3=IGO|KH2N0AwJ8-RH!v0nHKhba4!cXni}y zyXde1k27=K)L;L;>#A7KtPtO{`W%Ox{zsNci{$#(0>OVJhWgLl8S@!t2rMXg|I>NF zm-f|Lf_ALXOue<{aP#ulKesbHyD)vtMb?J&^Kw}dR&{dPo0d7a>}4uDr()6C9ngE= zn=nJ2`U0N~J`ZgJJX}n=9QxEb7uXxGm1BH4Z}Yzs%llndxENfPVeygnoL6`5)9c5F zOH%rT4Q3qJ>Ho2o<@uKqo>?0_ULKTw*s2y2Zc)c4W`F0oj90@}w=0E5swF*EGWfh_ zQu6xUvg2p+s*=fn+#>!xayqPJ_jW1Y97&zLRrVakRr#fIQ#v=S{`G9NpS5_R--f^g sJO`c>ml(V2AJX1w?tSCdty@~J#FsR(H?6&+!wm{BPgg&ebxsLQ00<$gO#lD@ diff --git a/graphics/pokemon/illumise/front.png b/graphics/pokemon/illumise/front.png deleted file mode 100644 index f91f5c93559b903990ad5703719e9e48ae3050b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 646 zcmV;10(t$3P)=c9}IXDoGgPjGju-VMl5Dtqglr($Aq`5kA5`)F%%@tyKuL^lT-n@Bl5W0wejujLB zf9X#B(O=U53$P=74NH`u=TPrlaQA>xsLd9ebSu!|fd-7q7DU21e8wXdRDh27Aq?KX7^(c? z?T8MNNqiuU3@P1{Sj>0=)~~^yScpVQ5Fm_ekZAxi zvbY4i&;hhrRrqoaSjJ+(_jB-)708$BMPy_MUQ>lz$ z;uY|ukTG!88YS5*n!B#zy5qYwz%V!^N~Bo57T`6g$cmKsY6cj5E+xq8Jz@=T|L$2c g%2Yezi})Y$8~*kcksTdY0{{R307*qoM6N<$f-grb0{{R3 diff --git a/graphics/pokemon/infernape/front.png b/graphics/pokemon/infernape/front.png deleted file mode 100644 index 6bb4d332cfde23a8762d73969106e2386018ed97..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 943 zcmV;g15o^lP)cn}Z}fLI8?m>}RdK=6o2IB=l&*ifKgK;Vd2xWL$OaDe#u_<$%dW|*@A0009z zNklouUHArV{;#wx-8kL*CG2o|K z7THZ426p+^$|jITXg9kD8MKI!NcMJcr}{J-iy=!TE;CEcl4JAMNzuhZ}X{(REyU_LK&5)bS`c!A)bkfEW#}C&efQTG<1t(IC1<=W>Z+p*@^lCq(m1%0+LAbFK4;Mric_(P+dz z9p0Lxx_3}8nvb-e8PDa0hmRv(0CfHq+;}b@jc)Y-j&`HDj@>0C2v_Tl`UeQxWrC}7 Rv!wt4002ovPDHLkV1lv3w#@(l diff --git a/graphics/pokemon/inkay/front.png b/graphics/pokemon/inkay/front.png deleted file mode 100644 index 2fca9044a22afd2c171f47f953303d16ff62347a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 579 zcmV-J0=)f+P)Px#1ZP1_K>z@;j|==^1poj5Fi=cXMVQc_NKjb#`1k+-0N~)@fPjeDfS|BYfcWs3 za41kPn7{xiIN*q=7-*0HNMHZ}0Dpw*^8f$<32;bRa{vGi!vFvd!vV){sAK>D0h~!h zK~zY`?UOM}!$1_rFN928nkEj?sh19d2(jr@=urEtdmtdVr&$Zq=q@JTprmwh^hu!L zR>G0~l2b<*4oZB~ewv9r-0Os94vypd@UWpvdh|A_$^N zg*yr!eLs$;6$-6AjiW8_AX2!IA4k(M2ZC4xTu0+L48yx9oCdL=hH?^qC8`4MlVpqR z*H9n~lR09N%)|gOuM(q$*l>;$F`zV`tj=s=S?8F{gpIf{jLzcCGCDoX9a{+Kop565 z91wj^?X=;XE#4ar?WID%ZKibnJWr{GY2K~xt$VbI42!Te2YxCvj}B`18J4T?eMU8x zLY=H|h4_M)vL)$)zKfW^|HEtxWXvWiT+kh&7`ft9D$5Wz>onUGuew0#&PjECud)r} zSC;dKu3&!pC9q*-8&yF!iy9orNoD#RSW3oUt+7|hex7V;%YoXG9P)2N$OnJKv!U;* Rwr>Cc002ovPDHLkV1kcA{A~aL diff --git a/graphics/pokemon/ivysaur/front.png b/graphics/pokemon/ivysaur/front.png deleted file mode 100644 index 4259abad05e7481895ac50a342185ba248aca0ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 737 zcmV<70v`Q|P)P!kvb73cMW+Sw^89*6yDN+C!ksnOV$oq{b;gC2U9nGnf~3-RNC+>Hr;zHP|m<$u?NbbtPi}Fpts^rTrHGET=9# zqy%m|9#83j8i#K+XDIC6uv|jGZ4rcKGo1f=IHnAnHGJs$eAD1TT`E|Vl2};K@B^{+ zIS*@@*q`$aF$pt?nHa|q<ok$qm-2ynadztC^qztfiCX8mIVG-6x?Q!``v3D z3;YGCNJw;vFp+Ae8oN&lc@)hfJAU#Xlq1IBb58^>^tsA??-^-*DVN@Vt+VwHZOdKy Tn+Ol000000NkvXXu0mjfsPaM9 diff --git a/graphics/pokemon/jellicent/front.png b/graphics/pokemon/jellicent/front.png deleted file mode 100644 index 584c7f09b8e7d26607caad88b0750007c8138a47..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 807 zcmV+?1K9kDP)JNR7i=%l}(S@Fc5|vMeLc66x7}@>aO;dk^tHx z#mio|V$*2bQ~5CJkqt0a|3LRzR;=V>4^@9b|6gb91VS3ZtsMy)c^=PeEB0%~{&850 zl?#Dt&1$*@dAsemog%>M``(~X!tuokK%4+0wTB@2;mI8qxq>A3XI_q zB7pT2({d{2xkTy9H$Y$rYdMF!b%c+PuolBPP((QeKm#TZ@aC^?Rsxg&8RsGDXNeGC z(SUtiea~zmghl5kCRQuvD06e{Cc{ zTBE9Zkcrg+@RBM>nFj8adfF>osx3&hAsrdy0ZOR=e_PDsztAYC&F+h|RUF}(+HDBy z`+Q*gS$EF?<@11Nl@7iKF5{ui5x~AwIk9Q&c470AKwb&H2Uyz>n>4rKZWh!1?^(=-WGh5K12wV9cYj=BJ$$Z)NWe63x1-9m!i2Br0_&6Cyj` z5ih8SBm&pliamnn>CO_@a7%>Om2%=G7GgP~Y&z#Ugw-tzWOanhOq$bLLc{7~Uqw&Q zhb&l6IEjqk&!}7}Tp0kl>-eNQ{CpxMZ_Q@`=3!+V%}3`mz&pWZ4FQgqM4#M11L%B0 zUz<@VAR2e&10N*U=uVpemFNO=-0*?`0P!~RVo|*aTZ=>jQ&1T<0hTvVHbf-!Mr{x6 z(;u7>AkXpg-hk_O2=L85w2B~L!RiuAT!3ri!dEyk2HJvlG)167z%s(6_h^3N?YIo| z&hZVpUwzylfcb+CTM(i9g#yc~l^KzRmyu002ovPDHLkV1ieXYK{N^ diff --git a/graphics/pokemon/jigglypuff/front.png b/graphics/pokemon/jigglypuff/front.png deleted file mode 100644 index af3a2d78bdab6149e53ab4d1687e7d03537efada..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 478 zcmV<40U`d0P)Px#Fi=cXMVQc_q!1wgtfc01gAfo9b3qvY|NnDh-a#>(l!O1xz5l2X0O&w400000 z000000F~o8JOBUzTuDShR9J=Wl*y9AAPhv&!jk;|2S*ZM4|b&x>K1t2D9&FyUO>=A=^I@F#>89A#>Xf%o!ZoElfRx z=ay6Q9a=V9bm``A)Awj4TX1HrD&-j%cz?Y2-t#^n^sIj+Lc8k*d)Ez^jCZy$ZWcW5 zY;cpzx&UJYK-U=tTTVLxi_KTF<3kW)zMXvF#{h$jn0Z?RXWF{O*dVBZDAEzOst31= z8RvXF)DUkLPzQwy2sFez>DNF201txpMwW@Y2Y{fB`bm#FYhGeSu{lf&Lc{})HNfi$#cX(aA&XR4k=q8a zgYY0Kw^CkuR_M%E_bnq34$tpDOIdELkS?bmH2{D4?MXg;{R9Av)CQ1)Gg)oF2pfQj z4nWA4vJj~o9R=`4h@AFfHM2&i)z9@VFA;8iZ4g+0Rc&Qa2(hlJ@6Ec&uFud#A;nG# zkbG<)CS&Ycou6kCru5-S3E5`~LmCH+*uHQwaB@@bWJ$*1L2{i}BNax!e34zr!pl9; zQ@J=Gu!`e2{&AH(I!=+so?8beI=DYH2zh)eU?-Dd0y^p#4k7!>ae`FoqmcuK^3oR8oR+{ylxrYkakVa`Y-eww2HTjRYvRg00000 LNkvXXu0mjfHW3zI diff --git a/graphics/pokemon/jolteon/front.png b/graphics/pokemon/jolteon/front.png deleted file mode 100644 index 92ee1f72cc673b2341bf3026d73fd0ef33d00280..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 651 zcmV;60(AX}P)Px#Fi=cXMVQc_5D*YrN)XMgO00`Hn0P?{|BL_LQb-7Z`1trzQc}gm#ejf_00000 z0000009KY2X#fBM2}wjjR9J=WmTj}*APj{)gfxZz|NnbWLf_nRTe$9yUyN3rPS3+h z2;k%Kjc@#~z?=Fc?-7!`2cZ75fPZfwXH5e{*Pj46=ZP^0fbMdN6Ko_U5TK?Hy4Gx# zfH6G*Nli2v)C`#C(XImZCW&K*{7K(Mf>AG_pF@9?6kUKcO+;8WPfyu=$y~e;N z%?ZZ2aQSv$U=Cn`djWQq6EJx$Dt28{6mxw_UIji`>pHwllk17Swg9i8rQ+Wlu`W>p zh)xa=vh~_Rnj?G6$-nBt7oxXp^2^;_>S69(y!`Biv@E4C2X86keb?VCRfz4uCzpi= zLf#_u>hX6%PSFJZq-4-RDXlImRF#FeGQp*gVntK#4jSU{HAOWql8B0}!?&pQq$fe{ zIvO~Jk9gAS?Si0?bKm5pa2{#lD1qJX4OEtW>>#k2_PL?CdjdtJX$!@rvY)(>Rs!y} z?8-5Vi%Xlqs0iy81mC0XiU9U+)B6=_N>p1VakrSa9Na|pRM6xbz|gTP!JRJ-scyj+ z<3Z@y)Tm{~;77cpWJ3gsYV07PmK}gtX&qa9B)OGd&VUD```lfte*$2;-FeEuPJq=w z0D4a;#JX8?{)GWQUL@+?l-Q`<24dI1^R%I_58AV$F90ex$J&_?#{qX?{CRUAF!tBx l1z^PTYr>%AZ+zpE@dJTe64!@3agP81002ovPDHLkV1jd8F+TtR diff --git a/graphics/pokemon/joltik/front.png b/graphics/pokemon/joltik/front.png deleted file mode 100644 index 845a9a104745c001d66d3b5a48607dde98f0ad82..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 403 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*BKWU6a;X5xZxlmAaG&@ z2ZupILr1`k8!r+v9vDO%SkS-$REP|ws%!Q!Ffht_x;Tb-biSRmG3&5_KwIjaH{T-l z7sPv|d4Idmw<*+XyMRZ=b*B%)UpT!MRC_MSzg@gXM8~xF;Qs|r?f!nh@9Cry_2v9j zQKjFT{apQAcf|=*bz0TNA6(Gv$IKQUs@brt>XMSWDWjI)jWk zl)2AeEb6Fx!tcW#2WDol-Aw-6_f>id??s+Xci#9*lwHWEIimF1Fov(f(&%Axf9Z=h z_6I*o+NLU=(M@?hPx8R^ndXwrMLWKJ=ZLA8ta#~h-{IcieeV)tBnuVp`5!-^e1W0N zF5`A<+mD^9l1(q42S2&QUFZ8&+f~g)Y-85i6DBX6u7q+JG1cU_hF#ve{p<2d?u$Lg qzdQ|}Z}?#QyY1!;f5bLq1UlLCCL8d{`Tx8O3OP?#KbLh*2~7aa%&ArY diff --git a/graphics/pokemon/jumpluff/front.png b/graphics/pokemon/jumpluff/front.png deleted file mode 100644 index 3a092274185d94c979f57a6639ac9532fcafcfe2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 698 zcmV;r0!96aP)!cXKEngBy9J^;??RK(O2df;p@##l z;U2(i3SWhiyaCD!Ttj~kfnatW+c{@9v=mH{Ncq3a?9R?V2>pZMdB^o22u8>BkPsRl zAwo7ujuGCA$pi>-;R2$G4njrWuH(lBfD|J;F<>>|sDW#M#&%%XWN_RgssLz(7`TBX zfeemo3<&^?=?sn%oS6hvH~}CC;lfqoQA~)@UDw1S);i_f0eDdy6G{c87mmk>gb7y# zokGMya1pow^kf>noJPK*07P&8_T6>p))D%6J)gd@RCWO-&xJlX-CpoET98|f`E4r>Ny2vam(w?O{Ec#Jf|jbY9{ z6>WmdxHM^NAioCmd#Yu6US**58t~B2pFty3kpU*%Tu!GyfCt4={%=sG1>jA{>d zx4=eLv4q|Vs!iAd(0BO%;!4UAR~|jwhNo!?x-50`;RxLX^;s9t7yUdA5BE}Stp@{R gjsAn7`yYReKk-8tfTAcU#{d8T07*qoM6N<$g7Y{xSpWb4 diff --git a/graphics/pokemon/jynx/front.png b/graphics/pokemon/jynx/front.png deleted file mode 100644 index 430f9ad28ff536742eee4a8b0a2284ab91fdec8f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 724 zcmV;_0xSKAP)Px#Fi=cXMVQc_i(*Ru=2G6QG5_|x0001DL4&kv-o3re`1tttF{vO`sP&qQ&3tjHRRGV-o`7 z?e^18@8#Ti_#%857+Z%g;s?_Z%4ekd2(H9<@ARYZ&BZ!#`|&m5W=9`bb&YkJ^e)odNOUV0t?A<} z!B)}HrqBWup!PFFUznBAn-);(1J;1=c9*i5*veV-UZf+?+O)O+ClXPT9FjI(mXvM( zH6IxLL%d0B2T4E@8}xq9IRm&7&jU#50|mfX8X|z%TnMkr=Y3!qN>5!vShz^8m`W&b zM#vusnx;}vW2@^i2uPyL*)D!ftT?cL7osV2=4*UgqIdhIf$Nsyw_kSl<%AEgvt;xUVi8Z zg=!oJY3@VmWgPEWj;`qXpLg=K)!?gmmE9wkZjzsV`d)tn%qjin0S!|C0000 z7&}2mI_6#K#0-_}uvf|rmgW0={|&!kv}*OgWfF36&L^EN>ytBnmr`~$jvIaYTmi4M z2Ew}OG1_I!X9G_QIJC#4`i{;wDV?2wYckRRoxeb$2@vxufOBy~t{P!7HV{A`5ND#9 z;WGH*vjh0E0gokgw~t~-;BYrre8X6N+l$DlN)+pStpV;=w&+=1_VJSrunyj&PKIY_0bxu|@Ag)= nQI(NP!){#sxZ!83Rww-e3kYs+utI;v00000NkvXXu0mjfIKH}9 diff --git a/graphics/pokemon/kabutops/front.png b/graphics/pokemon/kabutops/front.png deleted file mode 100644 index d89cb33cae9c607b9f9e5be277672408aac85d28..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 834 zcmV-I1HJr-P))ozg>eTw+&-pb z3_U`6#{dJHCc$`QI`x2o4K8EHwYv5GhQ<)%Es`J1#<6zZN*#$p~HE)_1_> z<3cU`SPNKB)47b6wLm$&OSY^pv5RKJR(EvwoYn#Cjxm-Bq`A1^)2RY0w&DPbD9RS$ z4fkFpc0kC+i;(Y!@4iB;LdbayOJ1Gi)V^+@oU5DsJ? z>j8}rn~+hOjon?wYN>arPwXKcrKOIn3l-3MrtLtQ!Be790gxR89pS+}26$cGVnCtn zVXHve#}(*nzBPY|f9-oB1HSFHHoBp4|5wGiGyuI-t2oihJ;!E0zE)XW8BZ zlc*>jsOR`B$+L_e+*3W|K#sf-idiwuvb0KQVN$GJ1Z@HM^pF@ALf_V6iHj($5IR2! zF4_YK(W&wg(2}fN5Et7=oyq`$ynKx5xVi`}@{w!IcPIfF;IN#8hvqE*H`;rOhop1JMPx#Fi=cXMVQc_i*pcSN(le%Db>9Q5D*aNIVoB>2&8i<*x1IN>Dx4=C%IISJMN~_x&A!1cCaZ9)wcL zr-;5cB_MoISpgp+`cf>*nnjg?fJP|S1nRSl^dgIm4e&7`06Nw|om1}ups&?jiy=@H zpHz$4G`W77-j@Wn)p4v75xJc$c)G1CKpn<$wh19n0(f>GQsYN@*I8DFc^GCh*ES1G zCYk`IVIj2Vh{VTr_GOS^tDldA!UYgKAK65{LnMFP!2s9iY<-yoF`SrA5X{CIZo#(f zTMt7vvFWI{(0e-7Z4W|kZkPJ;dO}DJkV?7#O+YbY-tuaL=QM$G1Ym%8)0;<+`T&%c zc@orPg2*Pd7*}a$f2Mt@(Tx>Vrk*RNOU(h`PLg&2mEJLLHe@c>s2U zHZk3bDoD#x7K@tlzILhuyeEWZfUg6gMu4qzfHpvf-K~vmS?Yie(TU}NAF=~@@{EJC z)&v8VwcPECQw3W=SU8!`D)V#zK#%jnnIixMI+kb-OqobXPcGQjVQH}ykdl3ofP&rt z3OxWx;(c|j>C_nkURqu?;*qzd6x52kijAo$g%9ZYR{{YphwnaJAyZpe9x)*Tpl<-B zOA=M1#vXwS$-6u1Z38Ix9UBt`>9%^>J5MEo!6yyigcgrPGYFeGjzXaS23GLCwc zXF&XM1i*zysjX$_E#wy$+W}rn`pFG#Y?BQD8v<~xC&4yU5G3qCJ#Pg0Zc4K`?U`Wu z&_6vq)uYV3yAk?YgS8R}u$C(9IF(o7C5`sYGYRPl@F-q8KfOceLm3EJH(};`9`*fO zWz`Sb3UPOY34?ffTe5+JBp>!#K+6@uWq7~J>rt!zlN+0j-z}SaiCQ2a^*g>J00000NkvXXu0mjfzJ8TB diff --git a/graphics/pokemon/kakuna/front.png b/graphics/pokemon/kakuna/front.png deleted file mode 100644 index 0115ad4f9f6d07c6c4a9794bbcd122da7fb0191e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 451 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`7zFr)xX!q+ z;NFs;E!7O)u6q6dcD6f;ATlk7srr@*0)nP z3LQ4!aORfi`2Al#CS`JrwbQbDtt-3ZSj4`3t$MX``M(7ni}Ox+2E@9YI4+?Oz`gN_ zdgGS0@eOPb!{r$^Ni{r;j^BR3@c-ue@>S6r9{<{M-cp)jIm?fSoHJAp+`fF^cftG% z#heS~iQW0A{lv6Z;G9^Qz|Lz2lnUN4UNK2GWcxVb)SN7%$wd=FA}(59*)=&t>4iX0 zNxs|6Bez6&&xK}0{b&&0_DJNgMdS_so?9%-fAuJ7DW2y$3QM2CBdslrg(4sNMOvoSEiIhe`bjO0;h4m4wgg7c7rY9b n+xN|HiTPx#Fi=cXMVQc_Qb7=EYEp}oV*me??$w+S5D@tI_{hk}y_9p5b85X97~ZUd-n7+} zYKxFyXsHF|7XSbQOi4sRR9J=GmhG0~AP9!VMvQct`@h`fL)0Xi>7MgCrF;8jiK%=}g#AZ^Lyk?m#jl)est0jbGjgew1D zAA;&*wX~^x(8q`&B0c~iIsj19fA$}9M*ieA!2`fOBa}h}h~p;yN?@NN$NbK$7Xl$u zMnHT5&<~4v*WUQvO9ylUQhWl?&rdlS&?N*YF-PDqMglYWW3LO`^b8pE4A{BS=$zRc zcL%7BP4Z`Y!kz*J+G0Fb)uCl;y6 zBzYc!{{V{rs{@L8b0?j^MO43`enCLrnJ@r~tyc)*$W|d0=$wv3wAxqz0BY$Vj&YcC zOU50bdC8e154wZ3bWQ;1Ut}(ZGEye!d-=w5%r4diDfb#c@Syak2zb%!U$P<`0z01s zaDw@$IRx-Rgqje~3tlgj76RzD=^E@Nf^#h7>A4<7C)A_EiQH1P3j)o;0^s_snjzY| zhpP~105pAtfSpgy!1^K_w%r1d3_61Bh(GB&fTJudx2EKTdPzL?2Gl*1HOkWq^Xv8b z9G4It0lMAtu(9J82lDxRE+ITOXwNY6&$k2c_}~@r96|$a8y?5O{@UYEldF#+8uDw z8-VTrvb90F$WtZsmJM|`ukPz$&~|QXcarL901!L_X4U~x1(T_h7f>gYDFNyVwFGDe z0AC~h0=RW0H!SUHpXh5xYZK25(EHGh0I6Q>UjTG8f)j&8-?{^=0KwXsu0!T+R(SN5 z0v|ERZq5~;hC!zFP>_a~tM?&{r;L=WSKT)I-ORk)N0*k222P+0m@ly6357Lo|5@#1_(Ab wEGGaI*{)&E28`cL@~B}>z5fm7pY#*^1H0}!xFkivT>t<807*qoM6N<$f-`8ong9R* diff --git a/graphics/pokemon/karrablast/front.png b/graphics/pokemon/karrablast/front.png deleted file mode 100644 index 4d2edf923b3091b60ff54f16add2a2f72fe20032..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 506 zcmVA>t5D;+C_$VkiP*7Mvkf^Yj82H#2z)%4A`1o*OAOHXWV?@Gz0004n zNklTT7m)5@t|{%gmx1`p1K#mfFKEU zaj-PtEOzz-)NU>0GkC4*y(c(1^bJ{lKi>b{&$DSJLp+;C7z`52Q6HI8s7dq@lRV0_m@M88f6>AS)YV@fcb^aJsJI`)YS!|A^w zrqgFiu$?$W>`y`;v>BzYgOTgSK@55!yoDbTSgyaKKid@A# wS}0=2buTcYxcXtMPsj*AeYiJlQ~$cY0a>(_h07*qoM6N<$g4WR8P5=M^ diff --git a/graphics/pokemon/kecleon/front.png b/graphics/pokemon/kecleon/front.png deleted file mode 100644 index 2674a0d165ed6c03ccfe3ef1e4fe86e96d6d1bfb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 722 zcmV;@0xkWCP)0&bA|^Ns8!-`_CJ4chVpLb1P;~8nQO^}a)!M=*MPfjZ za`De1OZK%YDfPmX)S!#5e}$>i7Yq|p=jIa%+u z){k)~Hvw)G-)nu>|I+KAI;lA@<^7{l9}U18cHuZ`_?a0Jh~2zm%-QUV!~g&xCA)Z) zWCs0(xcZcu3`!z|(&4A{vMQj*TpjdUF(J2*mppT#bHqt&lO1O z>Yoc1N1-ox2>P@*et_q*zhprw;b~D^7xMZTUXS481)!W`Hk-<+_d3f3&AH&q!0*{K z^UhnDNb*$p2#|jjo%7b2Y{2Ij;6paAI~%f*_$bg2xk$5}4S6VpFZ|_hHUwN&;5D-* zrI3LE38>H+xOA9u`QB~#&3WOW*GvPM1_)4@x1p?NN(1!Ty?Gn#vUxH?o7J3u7lKEK zH!pZ;q#cHsOzc{KSN1R9R#&|WSoQi!1F*1H>;LNd1EG=F;Z<`|0ssI207*qoM6N<$ Ef_Cy(jQ{`u diff --git a/graphics/pokemon/keldeo/front.png b/graphics/pokemon/keldeo/front.png deleted file mode 100644 index ffc17bf57c7058114ac9c5a6a76e67c1fea68987..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 778 zcmV+l1NHogP)E`sDWoQ3DWMHPqrqI&F+&mA zVi4v+CP7WADR>D%H)$zBFBv-Y19a<<_6vlxcd{v*EV*mx10L-6cklDO@0}6)|776V z^#{&hfQ9Xuy^VP~|F{ZpFfklTX{Cijwq$*qRCO@u(iTt20)3Q_kGUZ`t@u>|>w95hc4kkcpN{e;T!$J2Hqfb1l0^}#gW^h~zoUWP)qw7jo6gZ=TzVQpM_2$Iaw&Z6+>g9QA{e@n#DrarqGpdERoy#*LRxeJoCrPf zcxz3W5<|m;Rsg~vv5BS}aL)j7f@qe>wwxSeL=0JHRHV=+SuP~$n6g)+&!*qWG#x4L z2oUQ1$gE_1>oo!iKFU$#QG*kQODQoe0JB$}^dutzy$^AKcw>IWrvtn4I?cwEqVSH* zxA2aDH(zPc@~=J8B6(A{aKH5bHgM8n&}s)7A`0*TBuv)_?Oe!fBjcy(v;cH3J<^MH zqzHLNL}v)KgnX}S0^ZKEZ!Av5v>Nc9bP;0;0s2uspRl-}O{xv(utto>iR$(t6!~`t zUuV>(0;Fbnx#s|MX?~9Nk0H?o;3ozH!M7ScVPh# zho*)9Fv}V<^l3M#1&4>(JXqdf)2DpN z>K0e4RXpsO4HKfS?Cah7S@kG`>ouvS!)_Oog;F+vuU5Yhz%36&6R=(_0YKS32G3g> zk$PBL>|TD7PA1LIHO1U)L}6kh_|;}Br~xsS7+kz;g-|V%&?3^^71SoQ5mY{cuUY_3 z%h?6@KY)NvZcEAnQ0D;u9MJXK07b{Hyv3Gs;0(Zx-r_))80=@JtVp!$)%pV#XR_C} S)NiQ(0000Px#Fi=cXMVQc_gDD9Ai&C^&N)Qkb_Qi`zF(BTooO4nTT0t@Y_THpwLI3~%y}jlD z000000H1-x#Q*>Tqe(pUy>I;@>EHt9QZ*pxsv_umyl{2cVJSYlAF4$MSk5VJSEP6eUn9c?HB0O5`0t z_JB+v&dyhcC5-!W03=}#$OPuI8GyhfAogtlYjxsc&S$};s2Crv&tg3VasWx$cgzq( zRc5p1!)dL6L<3Oh_4={3W5=adUHTmWOA3&%mPH$Kv85l2i`TMR0@;B$JZCMQF$c&7 za2{F#VC3+=P`+Ps;Jpm10cHi^{O}7(pb-d)*Aw1Tj-V*Rauf%M>B|YAZURb&-ZZ7) z*)iK^0DO{|1+fiBf>x~^$y%+2rio`4$bP^A+tPcqg12+H?L+H*Aec2FV%+E#*T4?i zTI6u?cf|>|p{acUAk*~gk1gTS0hVJkr{zko7J;ash-Wb2;qwHTj0*<T4RX z9Xlgv_rWom99@;@MfbsxJpSOj;zk#rDb;#@uw*$=HrG3bNa*0f#r=1}!PbF`+58tu jedAx7$27k2jnCo_I$Ilmu+8pP00000NkvXXu0mjfHH~z= diff --git a/graphics/pokemon/kirlia/front.png b/graphics/pokemon/kirlia/front.png deleted file mode 100644 index c1858f76971590e650dab20b2524e36da013ecad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 528 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 E04=)K3;+NC diff --git a/graphics/pokemon/klinklang/front.png b/graphics/pokemon/klinklang/front.png deleted file mode 100644 index f49e126ee4215a2398c7d7e6c4775d0d3d24e1f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1034 zcmV+l1oiugP)GT~(mSu6~2M?~X@Vvf2db)HfUnz8~Mc|CaT?6PtP7 z{_fYVL+6c5S>L8DpIt;09us>C>^LlqWlYjhJu|uK~8>M1We-L+c7) z&ZZA|44{FV1jq&fdv3Jl#Pe_AKEl2MJj-egp?w9!+38(?ICEG5u8a;#=Jjj0lcY^5lyd1HQ?q1|HK84 zy=@>a%6(is&~Ft0`MfSSazUD44bUAYl>E>sf#hH&N+6?}5-{`{9&49A@Y!q@kPlD3 ze}~wlq8Bys%TUDu0dIYLcAo$G4wG;Put|URbq&v_`J4CH2iDsKFYHGl@; z=w+mV?=Y1*Ouo*v0j8(;^ym5e03+%NU&^+%CCxERV|@A(dC-s}>dc|DrDs)nG&RL) z^fa()D--=_xm>W5 z=Hss}SL`CdzK-#PbxWd7dS~zU;EQiAS09%PkM!BNeNiU8tTx9IS*;k#foO?2#&Vbi;*u#?2<{+~S_2 zYDH%4psj(-v20MQ@HX~o|8TCh-AJ3&`3^8?+u$|fu!fmW0F7;LsQkhbz?6p9g|I5R zH2-QbRLCepNKMyglT?7~c@#NKwyOr8lfMa?hPW4Gh@xXz1kiqC`;6;wYB*>c6R5_M zW>L_#XM&lCsE>;~0{vb{BFZ;h@Ot581qb|I`86)tfoNM5Av8eER}uAc1tjWuvE7hX zfz`D(RoeD-b;*$T|E4t(;3w5&CH=Ji^MLi48~%g*4N6de1#!LzP5=M^07*qoM6N<$ Ef^C88O8@`> diff --git a/graphics/pokemon/koffing/front.png b/graphics/pokemon/koffing/front.png deleted file mode 100644 index 621724a6ed01f6dcf9008ac5731fcd73048265aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 657 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 Xw{jV{n@N#>00000NkvXXu0mjfoXto= diff --git a/graphics/pokemon/krookodile/front.png b/graphics/pokemon/krookodile/front.png deleted file mode 100644 index 3654e8360b16890dcc189050ea433f7c4497c3dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1152 zcmV-`1b_R9P)idrl0`J=#g+fmK*VtptQ?4^24Im4N*Ny|dSzmIEgv(E~l<-_SR9 zGB#NrLSpR)X-d-mIUho-kG{7CMK^aeSP=*w&qNl;n8Stkg0|ahqu!4ff z-nYD`pZQlgczu)tE(DREIPX)#=v^waALBngs>yjxuaOgIlo8+>ayF9?Vh=N-OA z`E_WNPr3kzfy$Qf>t6`0(c*to_KT1J>`(j9sGS61kTwLr3v6_ExzewPJhEYb@*C8x z=_pJaIZj zoTs3b9vri3v&3e4vzkF26%R+76IyjSLD#{LlZs8!~-f?A{t)v$RzeG=np|_T!`@Wj4iEVGjCr0uVVL{kw$ob~B*TmJHXx z0KG;BHMr+LLer&$<#MjiB?C1dy~uOK;XU6#uj$Hw4J6evAo7GSHVN>JIEBtSj1Dsm1ihZb3fVG0rgZXascDFCq1>%m(zfV;FYQksqG0fqC2 zuk(5*K(*Eon>i@;DgRbv;GO`jkh;kMvy|#XHbYX8?M=E=YhdQlfIrLqEC{y+=#xhw*Ub}-4}p11Yq7zYIMCDiGR=J_u_rQbEagl66Z&2CCO8sL}$ zwQiC}{3-?5hfPxepMr-OFf&Bhy)*g8_+^sKVP+`NNxjMo#PJN60u~m)qXy|5KFeo7 z{I`&g?=%o1D1zi}UO!If@F)z>ADSe-GieQk5QQe_JM=Lw#9>VDL%vTojpF!a5kPu@ zOcylxF8-8*+neXWZO?$7{S+`gj-jX07L!NC`U_w_R)^H-t;%Ww)D0-5V>i8-N;g;1 zH5>VrU24;~@F8Gqp!4~I)Av$G0W3Xvusk_ET>zGp+wZqWv(fl;@_}k7Rsh>4R}=aU z&tiZ2VLDO8JYxrEd~xPs~v5v&A?V9gG&=dJ-1>Q2Y<~zA;iL S{E7zv0000`T7U~ninSfKcT$oRO((D=wOb-_%g000A! zNkl7`)MxeW#N8#IS5+miO6Lq9>^jO19`SROFOen0*H|MxV~ z5JE`JBAXT^%^lLHW@?Vr+%cR@z+Q8gI(xOPDx$f|7;Ep|v=SqYfm@-gS( zi%OvLWjN&cVU++6heCwIi)vsxyhiBas1g`r$}r?sHE=D&coV?IH6Mn&R{^vJs!cu( zHUKy%J_H3MYXBqG3Z4QI@#7j`5)7{cm?Dq}zU;L;HoFUBI30oYSOic2tUMLN<(?1# z)*^s@{+G$S=Vb|(13>@r2$n#HzoI1*gSi3L7O(_N7*NJbCX@{T&cb`31ChyJ+3%SI zu;?J5Lz;1qxWFT;oHOXVX`22jC+e5%nK6{>gt+WD)$3=b0N({^F=F1wFj=}>H|&VC z;@FSOh;)~onEB;gtu(zjGNhDN2ZI)!n8&}}{+`|hpcm&!@{=oVKkD-Hyp!Yf_V#vJ zhqFY8ulfvptHZ6XN@}JWDC)^VfFA+)(vHC%Jl6s#S`-3_82M7RFod+BXI`8ufg4O# zIGhQPd={(# zR5-(J1%BpVTEu860n#4j7Kf^Sa-e`r9{#NcWKcEd`du-?eJz6?C)uap{khr<^$f3> zimM_hEaW!`(9&Kxyc>D1lW`6l9<}Z4pZO1Cb%$fPUu6V|EV~nU8zy;CKZ#H>s(q-&B*rr8>iT>>pDLpjVSIqM zYX6fNwbfizNBFdhQNOWzfj73_VR~Yqgr{dR73lQxj}=jWtG`ep2Xt32v$v}pxuHEM zfUz2G8Ca(21os)PVDi6_6@Z6tB&=ey`)f`a`;DH%)$|mFoSg>>`c~p1-^GFeFOYZp>9H-q+6V+N02*jCHx^PulAu=!FDpIv+RM zRRE#XcASq$W5a=Lp#B!2m30(pZ@9d$(O>@oJ`wRxnD;k~00000NkvXXu0mjfGezgp diff --git a/graphics/pokemon/kyurem/black/front.png b/graphics/pokemon/kyurem/black/front.png deleted file mode 100644 index 45b31238fde4f2c76b7a94a90ce637033bae15a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1228 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 DbM}%5 diff --git a/graphics/pokemon/lampent/front.png b/graphics/pokemon/lampent/front.png deleted file mode 100644 index 2d249ae93ec961349e0c569d9ec10e56514ecc4e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 508 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 JPDHLkV1n55R!sl^ diff --git a/graphics/pokemon/larvesta/front.png b/graphics/pokemon/larvesta/front.png deleted file mode 100644 index b2e83baacfcf46ea64be0fcf5c3702c0ee668709..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 541 zcmV+&0^21SyDdg1O)UI@_WS`D8=wvv2MDaFUm$f`VA6Vix#rcnJ!+ z&iFl;?o%71;cIY+Y#rk}ch%d~hCQ-F75RSA<>yF+D|=`=p^5^-7a2h6o;@0kgTjWy zF2BULWrX&fsWWyaKLuGGlmLo&P86g`VL?Dj?vs$yg+WM7QFfj2B(Mo-i?Oajy2Q~B zr_Nh&Q*;x}W{D7TVmLGWu7@~{Vbpu1HtWoDojC{74soDo^;{<{E_mlzav!2g^(8ze fvXe{cI{!Xj!n3hw>Qzv100000NkvXXu0mjf-MZ%# diff --git a/graphics/pokemon/larvitar/front.png b/graphics/pokemon/larvitar/front.png deleted file mode 100644 index 1974d284314bd45bad1a0d274be972a18982eda0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 454 zcmV;%0XhDOP)+QW&)Map%h(EV++e*&~EJ2B@t0{3&fb;5kZw z`X`EKso>-`5!M>LQZcB&EsGs0jQU`S{aj)$2SngOj_2{`*qQEy&e w`C*jp7mM6m)KCN#>TOrm`L5~-?s0AW0mQgRWfa$iiU0rr07*qoM6N<$g3oWfumAu6 diff --git a/graphics/pokemon/latias/front.png b/graphics/pokemon/latias/front.png deleted file mode 100644 index cb84e81c036c18199f12d3eb8d040f117ca5fa8a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 752 zcmVKlfQ4%KorLvS+X+XCPH0v%|JIRXG{iu zD9KBAKu8%FDvZviY^2Ir9wO0`>{CZnfz-J|mDQ1z36K!~2pcPG<(+@DjxT{f0N!9r z_dfc3-#sUW@xN--y73oa%fW|j{~55!&gO)kjs4N)oK~0E1Yoie=#nX5-_aU=@v=BS zL_kkqqIkb}7iVVxn!u99k@aRb%Q6^gf}j*UCy=p&Gi}5qDo1$MhxZ@8X@Hf=BEotF zrxzc;Xfp;f@%D4z@HBgQ?{jlTE0R)_m(11x?LbQ3xdPae<}JghoIr)eCjgB_Tf7Ru zVkdjF0kngfz%VJiRf<|hSQlU^L0w_-^P1qAxH<~rRRNZ(fa+_sH380%EAk&DqfLS3 zR0>6eJXsZ3EOh)z0rpKE9h|QSLLLiIDaPZGEmg5vI^{gW&z1xIKESpDR_~a`GGTsU z0GMikL5FxGDgzQpJtB`87QmSFY<$gR*jSSyUUvZqc|>fb&;TU5F7|tb^bwpT8eo|2 zfFLj?WCVNKqE+4Ax^+Z)Kzb8^P*NQ*AEwa}v8SYied*~6^YQX$)Q8U4RS`{qv3-Ls ze{cq)fvX}sf3?peVZ;69cgetY8Iyw1`V{#0=hE#wke8Brp-^jOSl2+nc_gW0UjCvy zmJ0CDa*VNMZFi(l#-Ya%z_lkH3y(Qpl!LTB?a+K^^J^&(J`GdMotGD+<(4oIj5L zgc}mu?@!P3yyy31gvKjZK#SKs0W6^MIrfuLQ|n6=UdvRU{0~T#SX!$s7Zw7Q``c=v zh|_`HogJ(ev6cqNpFZqhyZ{({aer*9YpFoy^Bd}Npp^zFuc*IQ#HqkDWy5v+1wc`u z)EXJzZRxP0Cu87*Gqf36v!W?j;!X0wA;x*@5f(lUpGX0hobkAtb>z5*I=VeQ$;f z36`?{XlCGz6V4Nnxq|S$uww#0ZP@MbO2!iEWzq zL>#AMoluVhx(U;e*6+g!aNI$*4?3GDBAGLZbt(8K$5uz?1APn~Xj@YNjpH())mr6% zWVg*WvQT76x`Z+>#l)L!DdD@opGlS&mZb7{75~0VFCzZwwQd*HnMG9nAIE}Pw%}mj QLjV8(07*qoM6N<$f(zxF>;M1& diff --git a/graphics/pokemon/leafeon/front.png b/graphics/pokemon/leafeon/front.png deleted file mode 100644 index 7ea19f1b55a0fe58620711f430e802ace9f7babb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 737 zcmV<70v`Q|P)D{FgPd}U{FAasCekmn9#6rfM`ItkYMQe_&_*7+^EN)0007P zNklf#glL<0MF_6%44~7Wpn7bez1PNin`~iQ3)sxH2W;-6drcTrQK3(-zRkHx+@!#P% z_Sw1^D;}+W+7b2APi`Mz3E`g!a8VaQ@q*_8u=dG;(b=#2CBXG;V6JfTLo`NXgSE+D$Sp>C+{k?)fFa;+HUJKnta=CIW_>BNlvH*qI-zz%pWB zb8iF~CqO!d6s^wG#>Hq0u_1B3N?l4sUYulWb8>$z-9pK6e4d1s2C4;sZHD_j)xt5v z#Rq||NjZwMV{vCXeTR7U&3Na&O{O(a92DH{JW^cNj^c%oDv(1W%D|^yPu9|%x1A?+ zlM)~nEdWFZ>V2)JvhCR^x=9wWT1o)xUzLuPg}E;caL7QP4wWnuvidQOH%rN#)$_C3+JIk`q zE9!fDu$%+OWMj*u!-ecvFJ$+g32>8qVJ5(`Ek9qz?!E!=xV(NA0L?nqG?178){?3E zaPT8J2n@tfvaWWbwInkE!^xWZ)@50C%^3__Nu1riE=>HAga6&EaW0a&PXm2yDB+;9 zCjwyEjLGE7=X#NB)@1To^fZhDm@osc4ntb?jTsX#v>58@%=jJvOi$@N{vCe-CS$}6 T4D;W+00000NkvXXu0mjfRcKS= diff --git a/graphics/pokemon/leavanny/front.png b/graphics/pokemon/leavanny/front.png deleted file mode 100644 index fe45f277dbfdaea2307aa89bf95b3f24e6b6b686..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 671 zcmV;Q0$}}#P)a7ZYaPyhe`?1t)w0006i zNklnW#cd9ul0@AmD&DhYrMs z2WO*mn_vRq0XP6Gcprm}0o#mB`g991yHFa7pcycB>G^q^nXIJ)wYc zARU%vDXF~_4*2ru0l|jaD^V{$Z@}Xe|AL4-k9wU_mgQZvq*B!7bg-89rOYIeLNs87 zmnzESjQK-%VB5D*7M#DOMgC-4cyo)>cs$Lj$)ok1D?%ACW8}qs;ffF}H;IR}n=K0F zz^*t2SLC-#Ca`PA`@qRQknDTn_k#c5{y*gIygRw9Z@K^g002ovPDHLk FV1l0gHG=>E diff --git a/graphics/pokemon/ledian/front.png b/graphics/pokemon/ledian/front.png deleted file mode 100644 index cf066921cb6d1d2b0182c28a8aaba57fd342482f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 738 zcmV<80v-K{P)Px#Fi=cXMVQc_5D*YjQc}e^TK|KCb084^NH_U3cd z)zwf?P)YD(7XSbPU`a$lR9J=Wm(g*l5k454GH%2t(wj>jXB2x zB;($0fAOn9bP*4i1QZ5-Jr^4J6S)8nkGp=!77cFABEAE=b!3MdCF9)3&*QH$j!4}<;bSp}@iKH=?=PWOA!J9fUgjZ92;`}~{_cMlzX2%2t%tx2(K;W-Y0 zXP`MecuWF2@utAaO%3#epl3HTknMG*aS3!0$OS#SR{|}hFbet>5NVOqTyRt(4O6In zS3NsSaJC3uum!iF>H^e_u)TD3L7qO}ykLWEH#*V#S=W$MZTwV#k#dysLx7JgR^`T* ziNFq15$f+&ZXoLgFY*`sO^&medN=C>`8ZuEcs0%iY>!hpUKDjV*uJx@6rUdv!WJ-m zzUcC&VcJHc0EYhr(+(b^4Px#Fi=cXMVQc_5D*YrQc`Lu7_>n#_F5SKoFLWB&Hw-ZtfZvXw0r;Nod5s5qglWAg9cmUJ z;vbKP_g>r-K)mXW;Qf69^RBM|@9yeDl-7X682Kh4MNZ9vn3&_eEGCW=q&5$Ij6{*- z1|lK5Zvcg$09ZMU06<4L0D2gL0Y(WJ`Dnm8iCmA_suAf%QyGjOmNsR_J@t9lTg&Jg%oTj(PYK_fV7dK6Bj zUgowC255p+b}{^alk59iXYT6QDIye62Tx z0-k38m`EdEXGu@rLb4j*d2T`UU|a-2HyN}|$Jqe;CbIp8_wP~d>1z^r+go_o3VZEo z?6p7vmqDPSd-w@37gD$e=nckLSdCI6mNMaThR`2Zo&01&7P7~E6DcK&imswq z26uHS2%{Ug66#-IUx-t2ji46FXpHpz=rmDToYQlFPe--{iem_d4Rw^o)k13(Fh)QF zyBFu-Kn?vEoe016w&EDlpbdYytxFs^&0Xq;|9^k$TmP;80k=38>Gs3DR{#J207*qo IM6N<$g2$pG{{R30 diff --git a/graphics/pokemon/lickilicky/front.png b/graphics/pokemon/lickilicky/front.png deleted file mode 100644 index e9905f1a650d7b7ace29c108b50a1aed8068ad69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 741 zcmV8l26vuHTqb!wrDRiqUPHcB;2CQa_ggJq!s93(VsxlNrd4N{vF3AIs zy_L+)5Whm_Y;^3FEtwhe0`%N#j6X29s?;MPA^(3qAAjFtS1SKG4E9W`KRL$sdmV7x za`9YOpw&V|O^Q0{%+de>-Cy^*hXF=_V`%`B0Bq>SkTvjJLl~{U5YNd63j1IJOJz80 zMdPbfEj;9=Vaq1H8U4yr7;%1nutvQ*osMIuyat~yZWhyt?4k@XKZc8&Fbsc8ywVKj zJl4ZycU%S>C3+ahIrpqe_3yHU{W0fZ80(?30*b&_AH?O#-#$*3 z(W~U_b+qJy;!@e*TiDG5X!D>a0in)y8}l_LWQ~KT3Yg*c)MbGxjXptfngSHLIjS`X z@LNZSmJog!P%#?vTF=Fvc)LAx`9b5Yr058@J1zr)q_l9c&8#w@^AM+S6EuJ7CfL8H zi}#pD4xp9kuU%ZPH2|q=J_)j`kFqJA$6qnN<5J;@OZnSw_rnCR(g8eb&t@#WpTa+R zl!$6V>M$w*=Bv#H;0<-5WJ=I1EZ~4`R6Hsj2DMr)f$ZYN=wzo;2TpN=eR7r$ApySZ zZMa-~yUIDEX1&aF%1)|YEIwfQi}Y>&uK_g~`= Xky|?S4)R9800000NkvXXu0mjfL>^U6 diff --git a/graphics/pokemon/lickitung/front.png b/graphics/pokemon/lickitung/front.png deleted file mode 100644 index 6a7177e793ccb251f5b040f67439a0c1137b5a4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 787 zcmV+u1MK{XP)20007> zNkll&X5XTLjoGC9hm9j)&w@R{9vd@)ZU;y9H4jE9Dp?j4N(4}+h<#j-U zILlMMK+^ULfb#_i-ontuJ0GKW&jxHrvUREYWS)@!KmK>`?s$grfBl736Z^E+ou_m_ z>@|(L3(Y5WCSDJ~e^h^Q@rjB4vGoM-G6%5LhDT%6VgmYCh_;Miw5T+WXRryt5XNE)Xg3bfwiyY1M1U*QCEEb@Dluh z01DUJuQ&vK&&Hl|oY)USf`R~hl_U{drAT)iutVrT7zS9fsMD`Rhh^s!Tp%C-2+9@~ zfCrZjd1!zhT0yCv^u`CJek7AqmSWy4D8(@8g}R>pOpTpc2+K;Q2Y=l>oEQ zZ{cJGP>fO%({!HezGThKw@ngzcjSdnv2HD$BwkykuHGWd!&ofY;5yq>tr%A*g_nR+w!~4wQ`4;YGh~!F*4{ctS5HoqC5W5 z65>>Ur8an0XBYTl&H6vq$Ck-AvwVWh0KiG(uR&j@*=i7T3cAw!XxEdvbQ8mBrjWb4A% z7zw?BEpx|C{SZ|a!oYXwz4PI6woAvH5a4^i_y50pcRt2maqzeQ0lFbS4p;z33C_C! z|8{9{kOI7;9-1(j9dbE_1jky_Ac8Om{6eA?4pls^#ATVjl5l~501g2Ql)I&YIPd~c zSXn}$%6#&0!G#F=t^sH{0$QNPBr=+y0jmT)-WoMp+QO1GD4;(x9Lgem0y4<@69Vi5 zMlZvc-zV7sCbR39y;&TJv}u7>M}D2apg+604L>ZFh6yDrO}VR+&%drYE-wtg>XdG9 z^Yrr*rY|^b1iH|l{+O=Q1)eo4yoVW15%DoK;>_RcT}@;Z?}Bb=(Bhm~!CrvbUs2#r z@Nzd>Ea<+^EM27{ZL$(naP#(o|wK>MtFy@FABss`q7UVf3nAZTr zEJ;*qLZ8GuKXPnQP8Q;Fr5<+5(BW;^E@IznS=^80o>+M zQpn35(7)VV#ucu*iAtYi7AYYU7$bH`oVEoYsgw#}3kAdialLz%TD4A%gaj}aV)xAX zC9Sgp*b+#RSnTMiUp8z88xt^+aeCbd;FVUMUC70cnF4r9w@U@^+o1a|-+7+${qtU@kymXp$lYgA^#(C1xUVfaL;F0tZMU zLcOd!TN4QlH(2hHH|!R{c$_}Ut1RB<|NrOrK*;|&AIgdz{}`{ys;~PXEFh>5oyH5{ zg+f$|fEc3F6F{>7AdGns+TT5Z=+c5>0O~>YB)|#`0{a%V9uyjdM~DG@;v?Wgfj`npircb{Jr>5G_ESjaJ> zT7BX%x@w>-3FK0p*jf!pONAs#YLWgJc?q*Mmd>IP)KmE6aY}1g@qwUAfW}5ViML0t_y4gPuZyC>{Nd!ONkYp5xpL6UmJNs^iTt&`A%MzTwYtRo&0=KokJR z6)Y80N#&J@60!wC!bMeWaBop(pj5$^+h~uw3#hS$^SFEwub_i9DS9Z6E0rQP<6IEc zt@9fGgp1{JhYKQC1OUdx%H>CHJVv$mwNf5e@kNExhe%{d>F+GGW&xBJ>O^EuZcg!qBpZ$f-Bc4l|xpIeuv32FKgSfn3=9%OEI zXS3N~(HjH-X%pxojTh>>v)iobjZhF+A0R$1s7f6rCDF4TXFcRflGi-!_GoI)@IEd>#dM`8057G$Spqn%Iz*gH!ALH6g$ z2=0<4m|wgAwqZ2=;8a|OmMmqo{0YwJ1F+YE;R+ZBYOo4aq>nWKtWJK^S_SjpRC~3R zQSx|?OW>b;oxqbnz6awa*z^I9I;&uk_8k|1>D2M=fk!6}34jv-(PXa8vsLC?fF>mO!p0^S_DS|9)b N002ovPDHLkV1lHVi`oDH diff --git a/graphics/pokemon/lillipup/front.png b/graphics/pokemon/lillipup/front.png deleted file mode 100644 index 50bf52ed1565cda9f666ddde029c283ffde1ea77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 524 zcmV+n0`vWeP)y zJOBd=6ALRt#WS$*0+o0I+!i)p8IcgbE|Wj|w;eO~ufHg#`U4>3Pk{O^;b_u9MPDTx zp<)VizLj8>XkfchK=IA5cu$PXoKGf`xM1RRkkHQ25eU;|_h z2o#WJf@*;knMB~kKv4)y5jk)$h$IFwa*7II9G`(ikv&u}JX3lYkUgNs9I302j58;_ zoaO@v3&2)xF97aM$~_A(dcB6-=O;)IpqR#J`~o`Kl09z|K@f)56xoKt4tEMt8W?|^XfL>+ zJTmsCpy7N=D8ULB(XGv%*WfgfknG<8zXA!AA}Q15PcgG+gMC1#L7wJL^StxE`z6G- zw)J0Et+5LLf5A=slf>i4T4#vx;CJH#fVTFPVgJ;w@WSpI$-bLO$u+%oCRbNcjzc6Azlt2^D%#9j&3q+9srygQA^wD zqcL;|C6>sM=UA6+2;eBb$@YgYOFSEkHKO?x#?WcjTWz|4lWkwb{E9d0?Mb$uF zIx)Liz79H|DyJ5i+&ufWziu-7c6J*lg}a?^>tCqvJD{Pgr3=Dq00000NkvXXu0mjf Dd!iT& diff --git a/graphics/pokemon/litleo/front.png b/graphics/pokemon/litleo/front.png deleted file mode 100644 index c34e0b74b2162d0e9df126965363034cb17bccfc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 577 zcmV-H0>1r;P)Px#1ZP1_K>z@;j|==^1poj5Fi=cXMVQc_cmM!kNGRY?KU5sKsYEc z0000W7#Q&Q@c8)f`1tq$000000MZ&pB>(^b32;bRa{vGi!vFvd!vV){sAK>D0h&of zK~zY`?bFRl!$1%R@G-acB=iMpNd%8!p$||tNUy<_TD&Rv0HPCnu5?;2K`80=U1PHJkMHeXt&!FnXKHk{UgSjyf>Di}m| zE_VXXSt?S9V%ZCUbJ0p6;hVN^g-gs@;x08Z^MVP!wuBI7f-HBzToSGsbYn?lVnGx1gCXMM1G4Y~m@{}r69&FcH7XuzQ#`2>BG*)JpIlw9uuwPL zIJcXN&2oaHEvvi)NL-L?HWQrbZB=O7`O*P9o?*KCTF}&w+y6S_w%lHV)*j4F*MxJy!N)deo0K6*>uP|Ff6MX>m+|(C@x_SX` z7Gz>hv<8?XE2#8?>ZcwAjpKnMg#aDDh%m5X#5;oz!@l@9|0qo}8gV~9uR+sTG~hYSQMQPOfooT6QGt7OfYr()6yo3$DRSxR?Pfw zcEoze)FXQztWbSw+#>0%ufeb8tao5tx~8;b;$!jLt&%ggi7eu%^NnA)_m+Z1$p0RZ j>k}V;xBc??{hqqK*6`-F1xNpE2ZffWtDnm{r-UW|>G7b{ diff --git a/graphics/pokemon/lombre/front.png b/graphics/pokemon/lombre/front.png deleted file mode 100644 index 022c1c0081be6a20ac525d8c0ab603d1bfd9c8be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 618 zcmV-w0+s!VP)Px#Fi=cXMfku7K~f+9003%>Ig6}0tkq)w|Nn!FoJy2pd%c{LF+t5iV*hiLtlqQ$ z0000000}5Lp#T5@=t)FDR9J=WmC=rcAPhve11O;W|L^X!MK8PAT;V4B<~$fpm_sSG z{rYDJ*$4bqb5;SDUeOEz8sU}07`k8v{3M(RRfzprhWtMeoqyc!2=oNO zoSk>Ete!#Z3P8^DfKtl3ELfIxl@9=GsZ|MNkR`JxAYt40S`YV^AkzTs)J6nFz_h;s zwym0fJ^&+Zng)tBFq=aoxZC#U^AiGcDLIQcXPS_6u{w&OWCcu~B4_hx8z|+-Jj5{* zLoRxIz@ZH(>Q%xX!~VmU!y1|b*wZEmr=RnsbwnNn$1uU-x24gWsO7 zLDPTwQ))9&ufqVhS7FuD%0{%Kw!Wfyz;Rzs`~&J$b~Z}fU=0of6^Zu$=oR>Ek&6&; zU(*Z#EduPdp9M-g0dEMXL}U-3GMfEt=038WQ0qGaa{!MLb;o}0rU6s~kh;Ak=;jXK z>uVud1oHRdbGt2uKNe^(J1jTTL*{~dM4#CoJ^F8b13f(xiX)AwMF0Q*07*qoM6N<$ Eg5z)png9R* diff --git a/graphics/pokemon/lopunny/front.png b/graphics/pokemon/lopunny/front.png deleted file mode 100644 index 44e188d0fd9cfa3fdbc5f559bb936fa4f7444214..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 783 zcmV+q1MvKbP)gS?000009 za7bBm000ie000ie0hKEb8vprurOE=U}(Q;AWJ@B*bsDB>A7Bk@+u+ATQg+8kj{(e9W3|95vh zLi}IV`5Um~2s^NxHoy*Lc-jVpGM0%Wy4&UmFqK&*rPBqojRmtHg zuw&XwvI!IeL}Lgm?(b!?;0TDu5HmT?Bs&~lGGMyvnN*p4)=e%bLOd`yNclu^C8-Ad z`w|Si*8AVnF?*c6H#o%a7*Izkj5$PZ08TzI@bvL3fCy8%=P^?>%4D+mk>0=%6>WNS zhUYN&iHOR%(GvcqM+dkbp~8ij0899Ay$%B(o*C%yBlSlCM04)9n~GQqp)>Xi7^-vb*a{f00XkTp3cY>@z*QYs>6HT_%E=Mm zDuuNWEB$BhBBzHzB?nMY&0~wS{8B|_Gg(EcPzNj)r|}?KL@E`QTN=`a0u=>)nYtc2 zp7crYQ|${}l?vl)3sI)XKvhm%K%c-7p-iNQhns+PyU?>{l4l6FO9Qa9Rl=>0ZY5aD z;O7YG72Q9(dOIO?hC7;({t3y3~>=KA|s9m}`tiOeD zh0BUI^5>@qrMs#p_)`nSP?pwPu4zWtJY1rrVF;GMC8p8yHXuiu&x@9EenJd1jmc7i zmh+}LTb4z6c9f# N002ovPDHLkV1h(TQmg;~ diff --git a/graphics/pokemon/lotad/front.png b/graphics/pokemon/lotad/front.png deleted file mode 100644 index efc92a04b84328ee9c2d7fab535ca26d42bbfcf8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 492 zcmV-3!lF{zknh*(<=U>m4dj~F;C?GhZIPcdoC z3hWzGLNaIqQKE=)8vp?yLF^71z+SQp@FNefTiE`rp|(L&2T<&#{2?l^OHClUWk1g} z0|cpanhd15y)113K=(e96R|)d7t7 zL4>C+z=YOC!9Mhy2|VOLXPE^QfHA%fV)nurpl7TuJpT6Ules=JOL>8}+2hUo(g$CL zov-S1KCk`Kmq3W;s+vw881U6w!Trbd&PKfSCa4MC!ot9~4G^LnUoFmrH{wcL=ZiIN iP5cV1`8jO#-}Mb2ByHwvRxrf?0000{ diff --git a/graphics/pokemon/loudred/front.png b/graphics/pokemon/loudred/front.png deleted file mode 100644 index 29c1e1bafdcb6dd11ff83c5bab146d50b1dba71e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 937 zcmV;a16KTrP)riEA?-|>{24$+$6NB&W_wL`jhobx+*#cOz0X%#3XBgAd ze#Ul-kwSi!uO(xWi8-;7!+NYmXAn!#p)FGIAeRIRWMg5DOb$i2p2)Gq>_dSiC!!C# z$Hf0Z zbss~Na-~9n?2+6_KywYQF9DUaTm>gLZ)QHp?cK=t8x&hZFhW4jI#8Rm1~+u2*q#oL z+70q(fMy6dV4$+y8jKbs_ag$_003A5niIro_BwMhpD(bFV+oiXz+M7XbOT^6f)M@o z*tKg)nR8gSsg{YYDQ|y?g*Z8#cmK3U6uh40To32as1TsJ?K!3Jx&p@|nVvQznxrdr z(`|ReeaE{$Tuh{auK==M0JGgWL0r%;0-%-v;79@(0a@C?c(KeF=!g>u=m_x?q}V}< zNoOHE&l56&j&*>Q%|sW__B(S=%Bf6IQ!%mG8Y=e9{Osb~JG<}#V0|as)8mUk&Nl<< zg9JS9?9+ok(#>_C*}D^3e{p7;E2mBF;K2TC0&G?<)A|-n}FcLX#P4b?|Qura*`M8 z@;%7UbPbAYSy6K?Y-n@2G=W)@wb*H(Wr7=;iKS?%8npg5V`pI0Qo&Y$D;tNs@RSQC z>;CB8CnufKj>@rr4e1EqDj@xL;vcp!K13DKT9{qN;3l>;^{69q-O00000 LNkvXXu0mjfKKtTBT_~77}NI)R4uwbAtFaQ7mmLv}c0006i zNkl=u>=4*fl_Rk9A(w0fDRsxbEovz^ef!A-13fVEvP~LU=E#0XG#w#Hx(gF+VmR z&4hS}N|z8j=ZtCp5rkEp3cz4Sce6IpM6pQ&(jnK*90KugK%F308u&{ z46curLQHZ1h1Fh%4BmY~P(Btc3}A;T2?(Ap1C*A`MLY%|K)Zz)TuRdl%5yxlRS9r+ zthNK~pUT9DO99rftb21x$Hl6q|N8#%Hnu5bg}(dkB8#v}rSs(G^CF!YdqH@9BXFn*FRt3*($@YU7VqCr!QL^pb^0~KO&Q8Z|V7zm;D7+g%^k}^ao z(%jPaf~P{$3@Zm5E`i~`89Hf~yh#*lBLbMa-LPnjHvz7FX|$n%hK{-O7TTuSUAaIR zKo;iiEddF#mw%OT8dmeMdRQ`^2b$p$AmPs4*#soj$6o`U`Q~ioz^Bu21u%z7Wh%ut zGl-(uDg-Ts(yCBvei%*H(@y_K7n`x%-*rB+W_SM0^B3MqpPDM4_M`v+002ovPDHLk FV1j{ZE4=^! diff --git a/graphics/pokemon/ludicolo/front.png b/graphics/pokemon/ludicolo/front.png deleted file mode 100644 index 98ac42818610b18b2b6f8fefe79a93c2c1708be0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1035 zcmV+m1oZofP)u++nqSe_ba_G?Bj>MFTfEg~ukg@St0`x@+q0SvKq*SO=<%v@rgy-lG6huIY`29AeSKD)uAt>mv zK%fq~`g@!1`U8&>pdeMDsN1^_cdl+e{f@o)VPs&VwzK;XX*Zwf0B5q|- zECY?g%qjig62mHI)4oB@vkN2uv_~l$xgL2^meb^rm@Kd#G}1owk%;%dTqGwqbD4w2ge@O=|{<ct<+9tuLI zByA@Xgx=i-0qjIC?~R0JhbQfn5Hy+G!rn99d1q-_Ee`L>VH>c}f`?GU#~o1}f)wjG`3l0eLA*x~mFuWZ}5w<2B4!}Dc? ztph^R0NW0>t?*O?&H?ap@CY#WG45l8M1dacyP0F0;zc-EEJ5Y_PH7EN9)@>s6+j)j z05ovI=9L6gI*|^&fs~b-x#OF;Cv{=#1ckKt+41@4)I4}efEq?&uDz_8bHD^MO_m75 zs^UP4iy<3vFJB_m4y^J9j(Y_>Bk8aFs8X*Z{@KAVO%Cwmh@H9%c*-;ufWI~mgayyx zak0kXb1ihp=KZ)wVX;HGz4CV>0rzEjKr7^7k_qY0=s(v`z!-O|j9LHy002ovPDHLk FV1iF5@#+8o diff --git a/graphics/pokemon/lugia/front.png b/graphics/pokemon/lugia/front.png deleted file mode 100644 index 124a6f626ee8360b526d14ebabfc2a68b3567a28..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 946 zcmV;j15NyiP)tZ*?(H-paz~0eW1prNQe=mfTC;=YuI)E#Hb_ft2 zl%7c-fGZT#$_>%SGy`lO)M{Nsv&iFG2EbYF1IaAH1wi)z#WCzMHgXo>e^( z5wy4Dyp3`R07{9*JOThB`1vNYPeX{=kXyHah!EztL;*nKVT@*x_;UsT?m=f>F&%^Q zA-^nu1YuJMl+DAeJd(s9o&ngE0y*Faz`U4yj3tqX5WD9fpaOFvfibjU2eV{EDH}(q z0d;6m9kuu(dn8|d1b}}^TzC*d<|LjC_0UlWAtgXBzX`yGnUCFbc{X|pTmx`12LKM< z=b;c#8<7CALEtX{%#)aAkNxyq7|iBSCr$|@C-L^xG8G1=^P~b?Q~PB+hA!JCJ#T{x)DbuIk>er^lZKaJMLDuw6s-=`j_g1n$L@NmT)1$NeQT<7cQpZ-!)510cpqNOu1| zuOA*BhHw=~?MDmC4c)Js%?1>f(1-4z{iUzo0yKX2PG5XC7Dne9Tg*Mx~EWVXM6-LpDJ5arcYl?%EB0V1Jmr*`d-?){{_ z6ZMyr+c|^>$@jy1@5mE{c;{=m=$_Paw!Yc5Ptw4`D+kL@o9&_l%-*d_4Vw*|+PCPT zx_0Yl0Kop$1*FChl2Nj#E+&A+5_TtX5l~11liYHRBM*s)&ucm%LO=x$wH^&TuxIuWRi0nm-ZGy?b80W3fkP6YW-V=)MjhXX{%4zL2`F%225 z9RQt;GQy=R)$gya9bPc$VG=C(bJt=wZ0XLexv2J=e{rKg35I_>DqWa-< z|K>?Z!`?|8S7%7oHy^m-03{SJas3*lU(o};Y=J!r>Q+@o`@rp%B_PF`meGY<7q_(i zWtHubh*y)&0tYyj3Geksv-cbVKH)#VEpP_!J`n+(FnoWrKnR|IkXr(N(zF-NY0m)J zfl@XAY55Lx78wIsf*N4w3kY#X7CF*SgHbbeA^B2!1bk977juA!3}Bf*#Uk_v(n>@* znj&tr{E2G_EEJ~;E&)O+(_EeIS2X~s$(|dD*$h0l8GPo4)qGuqsrN}bfT7)b{s$1i ka`qI4^+BvI#C!MaFDXjCa?rzK^#A|>07*qoM6N<$f?k*w`v3p{ diff --git a/graphics/pokemon/lunatone/front.png b/graphics/pokemon/lunatone/front.png deleted file mode 100644 index 279f1578d141d168444aee9d4a1009b9799e2341..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 585 zcmV-P0=E5$P)mLi5VkfE%- zAp=-c6~PuQV3KCG68_(g`ppmt9xJrg6(bllLnK((SW4*$V+4%)_l*oz%OE8BeE?+| zz_Q5Q3;F^k#uyF?28TfJ8GkQQSi|u=XlMczRr(4PRC=Zee+7O7z*?=H0pw26IRaqI zGv{0fkOUw{pzHu7#?a`y1zm(pueB}Q+s5Z;1F^)3nS8eX*g7n;1;oQJ(ZapbKs?N< ziRbT|&&^W{NQNnnT>2Y$;IRdqIPV3~Kvd6LN=&h%fJlol1G!l5wyP)VntF^ra~yN5 z9>_)|W8e-L7V}twqB<$^5-~v$W z!-NeF3T7NA=rHhD@#Du2jff8qR^0f|Z~!O;0qfp69tN^*db&7*W1YBUY|l zmb6;udC~nDSEF8}A7gmKvVd2?DzRmqu2Nh}OVx{HZ3b;-S%yvC8S@R8j))#>m~nt9 z_I*BQL5;_IgEa-a)E#bnBz!w`_}ibf@DuZ{C<}djaBCua-_99xG#I`unYO>f|9tbD zL)J~H(*n9bh%(5WILLgw$-;>t^h|;yW9Q`H*+(v};(D?ljA6vq$gj53lANWfHwDH}}~U^4V8B zm#uAL)wjaZFTl6pyYSpl)jnIv0ArtI$-e*Z{_lTJXF_i4pQ^tN*m<%AxMTMF_cjBj zxe?eg&Bt2|23Biza`Q^rVBFG;sQ$G-p6I~c5A`oPjD>w65=06ydMDsGsHIzSgQ zLbI%~$AB8|%99GnCYu0qm}OPW-n3qm(adUPq^ARjD;?g>^U(v#m=G$!svXID`VnH(AyjV=5Eiwe z)&YV05>IQr~zs)%&<(yk>An=9o6&FcT*qwk7%)y*1vGOVJ=wXJGzRbX`j)8pX< z!%>AQSoYMa1qf4)mN*PXJh{M5dIqCB8=kKhUz*Rn`6nH4<>L8zy7&)`7;8=1E!E$( z{o&|)`-sGwFR$O^v2K55e0_sxDHmP94f*<{t3$1rb{lW&zttaU(a?M#i?9p;0000< KMNUMnLSTYQ<1`ci diff --git a/graphics/pokemon/luxray/front.png b/graphics/pokemon/luxray/front.png deleted file mode 100644 index 12381ea362b6c942c9f806bd753eb250e88885f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 832 zcmV-G1Hb%?uKNJwy~I8Xop00000`gJvk0008Z zNkl$Syri%HDQPU=H+B zT1Ex^0^3K}j_o0ZeyBakO)STzg`FniIOP5OfA9VEEJFU@wejQ;VCxZJW5Cz{5^?zH zRtI1oTF(y#qD`hPbStRL*)Uwd}`xpJWh(37?vdl)k=1IEQE$M0ty6}%~rrM z>LsQrVd4P|4dAsXtQ1*M0H@FZG<+v5AWI^kUQG^GlwhF)um&hgKmpqiC~RU91gz=> zbV{_(AQGig8oQ$dz`$aI0A_x!l#p2u0I3JwIwzG>5x{C65U?JYJ2zFTahou`0ssNy zoI8&Jnt&lK;HkTa0E}Bsq7>$AymP5mB{XrY)vBT_?b-ObTLKx8U{=X=J}Zg|93BmJ zmKhY)CaShVpoGI8F9Se%$_$OVL15?=u+2-KA>oRdmR}@CptL_P<})tF_62fnN-Ses~>0`Z?^UZ1Sn`*QTcYV&Jje2%s~6eslF?vdIX5fh4t^J zs1UgB1!mr4E_V@FbW>23SKLpc%n+!0fo;wp=M;faHSGbu9Am48=!fV9q#8d%VE-6@ z30a+Xa>)0UH*5a|k)xDW-6GT*JlRO{`6HpDYqIF%pjmh(u~^96HQDR{@*tSU?DQU3 z%R$vF4R=)7yAzwYmu(JyfKM?FOF?wJC0000< KMNUMnLSTZ~h-E|o diff --git a/graphics/pokemon/machamp/front.png b/graphics/pokemon/machamp/front.png deleted file mode 100644 index 205ae86402254b9862bb2201efa9ea6833b6454b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1013 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 T8JNsl00000NkvXXu0mjf;?&Yi diff --git a/graphics/pokemon/magcargo/front.png b/graphics/pokemon/magcargo/front.png deleted file mode 100644 index dda50c3f80f23a906ff1867ea641302192c4c9de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 915 zcmV;E18n?>P)|$AOK)!kT^hC5D*Y}h_J|LD5$W=plDe5fN=PLaF8GX23{Dq0009X zNklyF>l*O6vycR3WQ90G!D3>11}JeC4)g3$XtH`Qvg#BamPm*;9$TgNiTuu zpvNf!_YXBTel8xErwck9Gnb0rtZ!Af9(j z7_@s<5PxD;sOJ~0gJUbNd&Ni!eUMzF{3p_t+14qOD z;OKzf;qQ5V`Qg179RAb-RIPC`sK7DJ0) zy?99gJENOSFbRAEwFI<3y=S23L51Ax@Nk^y=cHiBFMq6R2u?N5UUqhevS zfmx*sUeX?AA-%Wd=nhbggb+f}9&gL>*Z9r`_1snkyiD0*y6{I20K!thvQqkYba%c6 zs%E+Rx$V&XmGqhDyRZUibdFoVZ+}<1IGs6Wr8D7}{TAWYTQk#Qur9Ot1L+7+D=t*i z={hyh24LurTo;?Iw&BelYvY*%jZ&=~6ts%cQg>oFQ7WmvJi+Pn5~{s?-H57AGBOgu p?@?Dq^aH8D`Px#Fi=cXMVQc_dty@f*eJa@Iq+Z@`1trzQeumXq=NuK_?Tb-0079y(Eprb|K`QG zI5@zlaIeJCeE{Quu}CD}A-A&BJOKD5hv*ZtK`u9RK{TwWyn1HcOe?cV`UCZYBX@N6F{#_RHY8_C4m0HPSc2pa&(5kTka z4M0%80ygyhaE9;+p!&Xq03fi}7eLGclv#`O4Z`&i0Mj^*#0JQj8X^o(`DjY372y$- zLja9LIoA&S%?P+ir34(T@=9oJz(9$#K<+;~hbthn0t9t9#tJ~YU;wMAwrU-!%#PlFI0AHLTT}A8xu9wtn6LSS9fyn?} zHy|AQ)&9c?KS$y`tDbKFrjL|9jg`PEvNt1eRNnv?xRovpOChRnfYOQmJJ%Rl&N;A! zid#@?LE^^*1FQ=jq2q!-=ffd>`Y$_aq^)zpPF?o^aSQ4Gs{Px#Fi=cXMVQc_#d{EYQZfJTO6I*W|Mt!QN-+=+5NaSG%@9HVi(+D8V)*#@|INL{ z#l`=NVuZ^W`v3p~6-h)vR9J=WmeIPSAPj^RC<#LC`@ikZBw%gN*7|uacezknnV%#i zz%>1Dr`tSV)P>QB;c(zbKn&qm00>Qq*HuC?K}VoHeM?RHUbLOgFVUDd;M+8@&u z3j%~0KG^#rA?KV@<~zv+z@!R-J<_q*y^%Gz2}Bb=~7*0y$nKI;8`e?SUqaYw$& zMd~U|J3vUd+vM5S;WHtQ`PaH~;U~JQj|Tydhh+f`IIv(4#AZ{=o=Md74)_v*I4p2` z2`KPHV1@Po?)7!Q*rt!2&>a@)nZhbvj-?Efd!|$6TGdy5>_({620e{{BZ{pcKr31$ z#yMDcvNnbOnJ=!NIzn259vT=y01%Z;*bnZV0)Sy}1`ID?G$Q~{l*!itD%lAZQ5d(= z8z6RoC#?}|tf>Ia-Vclm-J>(_gj~!3!GaUOUI%y{u%GCJEz@gRaNpYqSqk&PJ=g=X zrZl3E-;%-zdDx)75tZDdxCfvbk(+^7WCbSI(a%W?4PsG0w=mE=R`bh}l(riJJQIYyqnuYqD`!Dsz zmE=+`gOJ~2zb9aJY`-1gZY~gTbXP+dH-3n>PKa*25oWH-As~)ho!v>IYdV3ol#WkG zF-0%~;;mOXMRvV#{dWLE7sA*ilB=v)@A#Gyo+^K*9biu13>YT7$VO)lC-j|Q0|!7{ z9jr8t4yPx tDY%r)mh>ZlpX#BLXR_(iwfrA$e*ldFC4Z8;Yy|)S002ovPDHLkV1kl8q7wiB diff --git a/graphics/pokemon/magmortar/front.png b/graphics/pokemon/magmortar/front.png deleted file mode 100644 index 38f46e85e5c66a2a6847a8ef38c64fe2169ffc5d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1087 zcmV-F1i<@=P)>#JNQYv!DvXrh6OHaYLRnKKveC&1qhQ2qler4OdgCz7m`hLGNni)m; zu=Gd&@iN;dr3d>~^*CaS5M6#sM)>^)0EDPf1Pro?-#=rmb}l5VEgu5(f)ny7baq&) zlg*$q)`E9xTLTO7Jpzw&)1W+IP=^|II1n2b7PDA82OJ?#(;S;~Zj^_NSymnZ4@~9I z21*QfvcQtA!?gn+wKW<6{F1ej3`+$JHWq9J`2iOKqD3Xl|j~oa>e-p6JlfjeIf!|(+*&|(8_r(-jbXuzh^65uqFFtWe^E|YMY2p~Yl z=E6gzT?8})>Rma8Q;gCxV+p&?DFU+}`rge`Okki90MR+2sIU_t#bnm^U@71rH*n=2 zk1Gog8vroTrXJSQvWzm=_I@#oj}{>Y2q?!A_*wQjl|Xd?G#a$FQj35aY?H0MZEqF> ziamgzMC)EuFrRy-Y4*dJ8HZ5eCuaakO$nSO0GJ@~M`U4B6xa?CSdZsYO7xKkLq`Ii zgw0At%tu+k39)8d=s^3;k+{C~vlg@&0T^JbDa1%wy^S3fzyb8{#t5v9G$E9_N|=B5H|rO`=3wm4LwEMn{Vq_)4y93R?;e7aH}odSJWvfxw6U z;($i<%CqBR(TL1gxT~4C=UH2+I-!-Q`_vcv&mCJRN65{%;$PVN;+)X)2 zEjJUZ^TvH3UvJ)h{SO~K0Ep4=@5KXss2|;j`^x`(|1ZvM=F&>e??(Ut002ovPDHLk FV1mKN@jd_m diff --git a/graphics/pokemon/magnemite/front.png b/graphics/pokemon/magnemite/front.png deleted file mode 100644 index b1e7dad9f0eb921d1b21a3205ff9e46ee6cb153c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 417 zcmV;S0bc%zP)Px#Fi=cXMVQc_i;Iii|K`=z)ly1I5D*YKF){y(O70i{i?pP))xBDSVp7faDTA!2 zsHp${|CVNGo&W#=A4x<(R9J=Wl+kj8APhxCa&bd+`TxJ&1k_1gQ$BDU0x1o#ybApDRA;Xfa24n$K?5_{1n2}* z30{Xz^VI{n@~uJp;W30lk#ony{O)8e-Qj&n@lE?$v3Px#Fi=cXMVQc_Qc6lWF){y(N)Qkb?ic`zi;Ggt_SMzZDTA!g(9lX^O0?CzgPffB z`1q)(sMc|JKL7v%&`Cr=R9J=Wmfd!&APj{~jG#pH{ol6v0o3UnaoVf1R&&wLIPQ;~ z5Te8I7k}~Z0D#}f5ytW709l)+F$6lkeIBT`aH$7y$GK(NhwhP!Cbf@z(kJ#Zh_a#SqYg3biK;4 zR|O{!@XFh^nTZT=$Ybmf3=oQbOX?xpC6k93qnC-Ayia03L?f1>XJ2C@Q(0jvN^ zp~SLu>!^s5!L~^XIcKZ{fc`#M$QGDBtp>>Cb$lvUfLX{zZ-iSpEZ4879h5~cwR3>v zb+$ae31W1%dX19ActegX};sRXGaaT2LQU1cktPb_E@B zyP#c;8n62?ji6;k2kLV$)z@AZ zz}hsK<})Bu(TkOFI;NY@8UTF=wKXq#BT%X2bRLhzzFy~CMxpjFpUf~j0DL1}3yH>% zzgf?4f zKc1DgL>+wv@ZiPj#e=*IHvJC(qMr`Ee*Y9ONzi59eWVw`^x$pqp71;Q cU;KaZ1)St3y~H0_*hU-_~2L&5D>Vquy}ZIC@3(f$l!pWu+Zq}NN9-oKtRACAW+EgBx;=000009 za7bBm000ie000ie0hKEb8vpKlD}&cVI0O^IZAKnBGiB2RpL@Xc}q~w+{?3)tpP$<0DY(=>qSsh9`wM3HmPEJm41sAh*6XN^h zE-75RjxIh!xXbgo=lQ&I zH)K7FC(zpLk_wnFlRCzne;gATS_NRbn368Zk{V&bNxjXzPUKrfNE}duQ00?%rR_@K zbFs-qJ_6HKOKP@=D;&%Is;UvLi_ zf9C7y!6GvD8_o@&e*AD#J^csDQ2Gj{HZ^dd{e}T%4q;CMO*xiSPXh~H5U@trfQoQV zKGB2^zD2+>_ZSo5rmeH$%G|L6zW;)zqPf7mhKSzg;@Ky-rGVm(_Ylq*pZg-8NgLov z`$Z5mWb(PH=o#N@bTSq5Wr4-^=YnWU;|tUQ$I_PpUAi3t_EB5vOdliF;}?1Z4Y5Y6 zAplrg6NooOPawS}Ux;1mM!-~^bCq&|5Hf4@8=^xg9sym({1ZuVKJq27Jpw>M-m{aV zQ)9~wwptxELbM2*N!Dh2ftK80zu$FsDp$A~o&sf6mYru>LaK#be!sBAkv3{ vJF#ITdvKW;Ac3EW0jeW0Kpi95|M&U>@nV_YA55jV00000NkvXXu0mjf^=XdZ diff --git a/graphics/pokemon/makuhita/front.png b/graphics/pokemon/makuhita/front.png deleted file mode 100644 index 438ac8283e94c12a875cdaa905acba2263c3903d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 615 zcmV-t0+{`YP)L5UrJ1=A$4HtyN>20j!6J zk5yFx$9iCe8&x%KfIus$O}hXlE&$|0$bApsm=%IR3ZNMfd!17;94GL8diYBO;vCtckJBqF zSwsidIX1Cx#WSHd>sdpT_7;UYBLL@SmSX6cS{5*R^Q871x0ozTsA2@Lfa0y!Fhb={j3EH{e8AECcxDVP%Z$9%(JQi+z~MF#rt`W z9g=3?gn)vM11l^7Gaz8gxf?!EICO0f`fdPV2L@QO1$YMFIgAXz9I$Aiyti$@`} ztnKCVz+xXbax7i}w998kQGcEQX}8%XPUy#s^Wwd*w99Wuh~8+0yei_SAFUM?R9fKU zcv5J@>usM$k1F6unlb97upE-W5PCtkJ4WF@8V`euw?S+4c)0!Wd%rB(lsDwSBPbRlD^4qVhF?$nbIa|KzlB_UCp5jYRoLXE31cIfq;&5!sD z?Hf+^z0ZB$_dVeQAvF^Iszvsvk+l3Zz7WthX4rh7umubG2T-)e%OVeudyrfVY?Gq( zAVrFcOloEF%1jaRYHl)tv?SSvv;_2M5v^cVNPcGz@8hMb{UPpn=0wDz{LU!ZG zi~{*GDU*V4v$$)%$t%;+_KFfHZ^}kV@eSFCbU~m3Ad^rkJgij+0Y*;pd9C(=B$WIC zJxr#K(|Nm0Y6q0o_Z0`QM-LOn^%q~#H7cWyRG?m?YpeC;wP!Sl_u&eZ9@(qQ-zaXc zV*HGqsS*$AXU6rF)%}kzF}F*YQTk~s3>+~F>G&XRuXmSIrOcUH-PgTHie+mC}iDdz}Zi=`9 zFcAPc(#zyaO=3i;bq3%4O`K z1Yi)(O>Q)?&>T(GKw_8^zu`c3ApVTcb!P%n!pRAFfKOTjU?w0Xu5&_;P4}+EIMKZ) zAivOze-g$!@pgSb4-%Q+i(2=X7@=tBOUD6VWZmX{cjM4ZW-}b1* B#AE;f diff --git a/graphics/pokemon/mamoswine/front.png b/graphics/pokemon/mamoswine/front.png deleted file mode 100644 index 2b7945603019e5b461fffe52296d18ffcc83d93b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1036 zcmV+n1oQieP)`Xayc<`O>m04 zl?VYB4kpic%U)$+VMu)(k!u}-E5j;GE|nX>x{}Vi7>}LUg}{X?r(O`j^%+cRA4ts= z5p2FUD_MU|b{X=7mYI3K`Mx)^GwV42!}vr9@zJ!al&WlhFpsnZv-ttS=GW+^P@A8w z1Zq{zBS5UoV=nRs`$Vo7UanROU*W{s$5#g720{S(?^1*G2&iGD?R#juh%PfpKL~cF#1UR;I4WsgGE@*fDQu@HDC6F;Pw-t}V)*TVqU4_`dLbDSHGxcJLqKktx{lS;F&0u}6_%2VqTTK!w*Jyz7;U zF`V(1ft;(@vS7?<%{mnAjM+yd$0tm53N=L6ZmI=l_qU8!<)VLj_po-tY|*cHqB6VQ zz6;=X(Rp)|C=i;5##s*Rr!xn1E&&T-;bnnEv5(FF&*NXq2%URKdydJ00053 zNkl~4M8VJFT@#A#0@FAm@xYVAT_M$S8#Lk za~Kytk?++A*V3|Uc#h^ zS5B7`jL4JL+RSA}^qHQK$CLA7fKEo~5P>!eeVeZm4e-Rrl(yIhTGuxkm~@A%XZum6 z#TBcD!2Cf2Pp?bT^8vCz1BBfQx+yT&kPz|!4oT3LG{Y*~kbV(R^Dc%i)^K;l974g( z^#Fj~<1#Cs(PvUept%n?Nc^ae=rmU&0;E3p@#pwC`7ZdNEjjQyQfhyi2W&6B?7Zvu z3w$I39bxfC7;$8QuMstuix1i?u~VH~e&*w6-|*q(|j00000NkvXXu0mjfkhk&B diff --git a/graphics/pokemon/mandibuzz/front.png b/graphics/pokemon/mandibuzz/front.png deleted file mode 100644 index acd99e1e3042c7f33eaf590aebbd31ca2d33204c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 859 zcmV-h1El%o2>1#6Di@>Pk9qfTL8_H{txRa z-vtzrM^TGMCr0_ohiKXibY^oYdlK$o)c|zV{VYi=Iq3y=S=OLGaA$v!jO6tMfYEw} zhhm_q3M?6XPoLnhsuu(2{2=`u;4IQKrT2}1lRgDFi_4TPt10LPNPEHU^(A`n`z8QA zmO&6)q6OFA0-QzwJ-WdJi(FQKb&Vyk4+pz}S%P}{%(shp0eJB?#yq9!HK5cBu)hYD zf7olF!};OE21x!Ezyh`a4IKKCAxV<-IZ2q>0?IB+8%Wl{RJ`2<<#E|XxYlPiAOlwD z{S5#$V3nZ@^dp!jSjGZWr3TH;GJt6mF-TOhn6ID?^>K9`Tn1x!bqMCz7P|iar zWemG^aiAyxPENom5**jIGEx0}8pgvxAsU7|r~(XuoEgKxu^61Y$6~K)!IV7>m2t{& zoeI|wW(6RM*%?!Ys|>-6&mfK}E1Q6d@eCPE?FqIgbi=JyNmLQ=sABgq7CLdOMbg8P z=zRsZ=NY)aiO71cI)2(U5{Wr0e-| zq>aZuG%Pvl=o*z)SL$8gm-Sg`M8|i@Hr&dMNS8JeFIBjZ<4AJ^ z9U@Jdz(9apBUPFdMyi}4v(%6IXA;SF!u$B%?9S}UF#ciLHM%*d0s6IoSDj(XdSFxw zbSw0|zV!U6GRFi|mPr6q0eeF!{i-tSfnyE8%Rv8_YLoyk7SSJPfN5Sg`IIGQ7?KLelb{0j6>pdmCNsfZHrEmJ(b6(AWUhESq6UdGhL;0H1HG z++Sug`f`Y$A3vmkHm3LCO7HLvmp2r#227*9nx_N2^Shrv6ao4mT*GMEQH;+S430>S z-9w?bY5E2WY&OG`MMEhyMR6jufeBqEZKl#iTwR8@7~Lo5#MXeN5GOmpiWU)~26~2Q zK-ZCWIK#9B;~eo50gf#k*LURU411Vu7;l~FO^iS^dmvBI9i$?Xz3NuL$=MW|B9H@D zc5)pjfGm8(X>&+`%p2&_z5)LYB09-*RGRI)a}vB=#3 zrZ#JZ_Zkp|3((#HP6FhwkhOI{Y-*rz$HI+1!^FWWBrv{4XcrE6UdbI~s*?cG^b&#q zMz)nlI7Va=x6V(Kp3I{{2rgPmT{m8zbJ9EMf!YE%C%`aWzQCToDSt5QHsjCO2WS_@Ytk5vLFyVsdeXW|k-yk8K|fR3$! zl8AmVY6LEfsQyr`iU7S4o=<(IVVqLeixH-x*IW<6ggq_Gjv-PHaP-j|af2N^J@SHX zeSLg*w~Qa4ON~7!>iRR@`lAqh`cb0mnKIt~`u&}kikn5&Un*oxu)6>6|5$$klcD5X TjNVxr00000NkvXXu0mjf0FGce diff --git a/graphics/pokemon/mankey/front.png b/graphics/pokemon/mankey/front.png deleted file mode 100644 index 576a813eb7e2c2f7ed78d70077a1e7230d531b72..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 620 zcmV-y0+aoTP)Px#Fi=cXMVQc_b3p*!q;n7u5XEy!_TIGBtep7x`1p8ev_UcMb7JmuV(zqy_`s<6 z=-_BbFfjv#bpQYX>PbXFR9J=WmfLcqFbqU#T2|Ie{{MR;$u^j5VVs$~Y!!N#npEhc zyO?Ep?6Jpw+W@?$U)S{=gzL@tvR*@gszRkK$&hH~*Ws$h}QDD4fOE{TGl8!xwpf;gk2J15zXT_{qel-66JcO*{XHY%Mroiwcy|= zSP3IVJJXIbt){q-r-#Oe%{-bL*cbamBxSU|a2V=|_J%obd}0~p(A5KZVYSNL%J{p% z%2GxVWw{1=e?#_H%jzl7MN;=uIT%MJfFR0GuwdE&ji-V z`@wIIGoU6h7~X&F9AvyO$CEP?(aaqf0^YKByg&BXe_~&6{SKR~A{1Z%0000)8N0&)h7A>nfW}nJ?|e6N`qNFY}6?0m|uBc=6S74U>k` zYo&iY816>;GJ$JLhYxb-@Oc)49d#>jZ5=Oj3ABMD0%>=agQ?5B?WCemI*#FFw>tvp zbJkVJbF&jfwuo_WuK~;+Z?QlDwH{;J%Der|SJa>P2N~Pcl=d6-a3|%>XEaCVB0x#$ z!XiKUjRpiIeSSUKAR_njm%2*lCfynC11W#vU-*40y$g*KPN!Q_d^(*zF7!YCdi(*; W4Af8N%nDTi0000Kl(9|%K@f)b5_1Wii*gTe=6nDnJq-=r zB1?S~%mwU7U;anN5B z9Pja~m*qe;t~W{xT%750K)$(rR5GIEgzA7FZVuYV9~V zWr1kz>#MllVF8ywvyk|R)SaX*a7~5|Xj(hvd=bjj73lJ|1$t8S{l17~Uq>~sA4uDN zPkMZ^Rbqiiv0J9)Xc!TonwndY=(q9w7Pa>7C_|jw<0x?eQz9$~Ac#aciUCZ43v1uN z%b3dujWPLzfM>YIgv(eFFwYU;4iLE#Lt}9Mw#*zbW=d2Dn7n^xHp2F~Q-Yc(re7b_ zB;_DC>Cof|G-&>cHiIjXyEWufdvb%oBmQc{Eo-nb7qh~4vHMQ#x=B--xS%eWm)>&E z11)tnL&eu(#7IE`lq{`e6GiP*`5JWwooN_DFi98Eq;Qa> z5|zT4B~ql+T$WA=Ke~47AJumz5Wqg3WrX}be((EzzB`11kqCLV91*Nw~RWaG=sOZiub=03xI^)R5j2D0icvu0_bud0NPlW{wz5vH5ltavbh43$=kI8 zcmc4eL+J^z)(WH+e>-jG-l>tb63J9{Zd>c04IGED6&DeFzGFWT1wQ1D*|jOY)N!h8 zr;%o$Y`w$zfUg1(f^o_$mSQ7f?bD+n=d)^J3D7TL!h1jbIUn8b%BMzbumC>l=VeG$ z2NI)TGmW}8=D|;6VFK?^vq-=4k!jJIaY#$3q%`7mIKq+q<&DSu!^Y7i3ujhohD z77^VCD%{OcYJVW4Zl?>pRy5`!H2e*>pm*oiE>hbff9rOEc5-EMa5D!|ddsk#u2+M# zaPsevIxRW|z;fq+&hlixAeaQCi{o6C_i~0Ydg}2_M_c4V^WuL@xma>`gH}23?J=|j zSV(K4_NRO)Z`YkR9S^#^znC?owtP!k-Oj=V!04f}1Uv_GWE31&Rn=iL1VF6qG%h>` z2)h#s#67kv+Oo`rwhBz(b{y0dLJaaUzy9i2M6)mh))kyTLYqMCaW5xlQ04tDZx@0a zH^%)ut@c}$aXUob(Dn1Q0bi{W0>pSv?l|fk%R+V#n1~*HBOAo~b%FpBGxKbwB;;^m z!h;zyGy_UO;JpwYY`5r4Y9$Dm6EU6KBS#6aE76QkQSJ`XcY*UohUUqiGdYgyPyk75 z+K_`;*A4~H47j6T_%BZh2!2gZ!H^1o<-ku}A(|TiKh%Kc=hYq1gvq?Rz|<8};aw^7 z@iF&X{8kfFF1#*x)f(UoY-$~@ED_@zcC@y7%r1vEV5-y;5MtmzlyW>@FO3B;00000 LNkvXXu0mjf?(T$S diff --git a/graphics/pokemon/mareep/front.png b/graphics/pokemon/mareep/front.png deleted file mode 100644 index 0ab5b071fd3e0641b92924b3413aeab39f901b1b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 593 zcmV-X0Px#Fi=cXMVQc_=BxnCoKpY)|Nq_qoMIpl5D@?Wz3$C(Qc_Z+q@=Wa08)d!07{f| zr1oNz-Uhe+A^-pZ&q+ih) zhtutLyL9Ov$~ijcpC%v9`294wGX&?IbDqBk1O>Pe070(=KjNoZ^@0dI?4M^jv=+?( zWS0h*DeQ>o;=uG4K{P}~1nVVk>7T0Sh~Ak1pMEH415304pbr3=;Dt>k7B_{D2+l_n zU>p8U2#hVX`1k8O5cD%4#wqLp0FWnvzz|_eg`~5z0g>Y&3V{p(B9(_J2nO;2AgV5a zBiFIQf_cLLjwrem1_0r=z^y{5>UF@l>dZQfQ&!qNRzg$%8#TC?AB^itiR0q^vJ`?C z1Lzsz`cSO^AVG``P%5yj0rS)d0Nep!DggkXK%D!8%mpxUVvZO|?eyh`Hq$F1rxJh} zEkH-V0#fb(@Js0Q^3giNg&&IQ8@$NA#Bp-uRB1N_pnBgr*;6@{UB`Bw+Q9<1Ag>G_1bn24gEpX zRb+UG!rtD98~$}&bIw>|Ky-L-^?vcUZPQIQ?CzU%*Y+1C=QIq^xx0nG@PEWP@h{cQ fu=&0N6+X@PGgi5D@tI_~78^I6y$i$k+e?00000-J*$$00055 zNkl*XNh_&(kC1po6qxOdd6MtoLgTPdLVj=XA6{(C}hB zqK4-tTEGnh7fYBBMq0o~vOWR^Txb1M*Tcw0SsI2RWTRoE1qPFcQ-Bx-k7Iuia0f!! zWOA!r<80WIfO|jgi#t;(e_a4@N*k|cyQvU{8KB$jfg9%{wzg+gfm-VwfvaZ#VH_dQ zRDo#|po;)t?Eu=~2^2=C-}v0YAV+QAonEx*{T8^$CTdC1DCpi~(C?H}}y^$S?YmA|3nlNSI0002ovPDHLkV1hsr@Ra}n diff --git a/graphics/pokemon/marowak/front.png b/graphics/pokemon/marowak/front.png deleted file mode 100644 index 8d9488612deb8571afa385a18a4849255f4ada2a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 610 zcmV-o0-gPdP)Px#Fi=cXMVQc_i;HUb`1lYI5XHsKQc5}C;OJUG5XGEIlxkAouz0YLh0c~ zY^BSx7f3A=1x^Zo4(xs6%utp#lVv|% zbO7{&J_Af20*CWUX#tq!WB}D`y0CMp4FISR%K8pF%Rd9CSkU&i)4LMt0|4l-9HKOb zZlLSG1>h$-osj@OH)rVEx7x4q3%}6xdHw79-2wsPVShxQ0VM#{{Tl#J0Xl04Y7>YU zV+90LF={AI>_7pKs$&I6Sr>@-bY@orv}AouRc|_r)CGXV7n90Uta8a>zLT>ZppG=i z08yvBiM15>Zv>A9Hg(*#Z5;tDh$Zs4m3kpuj07Kmjc)+>u~tH=0L{Zyy#P{{r+5Pp zWC90FDc=N#18~v6J_7eJrJXQvf~5!1!W7HzVSvrC7#qUXwytwT1(uCb0KUGCJOaoc wO8oq`Jh}W4h)1H^r*7__nQ^D||Mgev8$zWSmzAd|nE(I)07*qoM6N<$f`bGLz5oCK diff --git a/graphics/pokemon/marshadow/front.png b/graphics/pokemon/marshadow/front.png deleted file mode 100644 index 14a1503bdaa42d76c8b5765fd3d38085d448185e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 627 zcmV-(0*w8MP)6+<@T#6@+Bl1$F4YaWBx+;sj_8FdD=S=9at$mho@^ zc&eJk`xHBN9Ao~XE-ruZubT73b<^B!!QE)URns(EbFphR;1R&BxmJDigb??a4|)!E zx9SXFo_21hXRvPZV4PFkz5r#di@E}AlC}Y-E>2xf3b0w2)54jVyDAV^I588Ju?qN! zzX4tpfQpMRO>H#_Ngc>N(qztktOHhx&n)s%&B3zsut(>VQ_v_g{2=1%g`gnO zbI1Zt0rGoJ@)|Y3hkTGph83uu!iV7`Q9chE5W=t*kq-d%O4>B+7oGsnT=R|1!wGfx zJWjC=m=KQu-WH`5*aC%I+mX~;YiVso@=3e3ltA<=CDlq<{!w4A1Ax&pTIpIX2^VH3 z_-Q%fpt35}1C&!l_@rb2(L}P&M*Tuzv?!H2Xp?1#3xIkm!%53nfMrquOCvfVo{|R0 zj2k7-%G^LM2v}I?Xb7;-@bHK*kU$Wqu+WGwP{3e#p)Eiy0006c zNklBjE6aZjZWYCbIQvQG>TVOC5RR06hHJrK>de<^7t1iXKA%IO-wQcHu0i3!T#@ML^MnY-ds@|)k=z`)3oGS2Y z#7fbt07s+I2POd>t3mpH#5O6^AYykL&{x(l*mVcNtrTi-cZJ}(Bf*UdEWgPTR~>rB zf2f)$^7#XchU}J3#8d%}#auiv+2m^>3T1{O{~0kx$wY|!Ue&`fe~f`->s2nq{JXNt z$F*FmoKM7D1@tn$Uh*ZsS0C-u68z@Vs+0em;@48yV!7Hf{@Ja(plu*B1ps83sz4jy z?FNK&pBPCW;LTSA1VE0Q*t>Du#XdQo%@DLpkOkZEERu5=)7h8e32Zkh#rFGb7&11{ z>G>pIfUW5XCCT=wFfLO}aAVLjoC9D0#US2l!bsUL>S>+?`6AHF7btdS?p>xAj_px7 z>ji0a9n3M<*@Tq!Oe>UtFQDna#7DcI>Ak~S8`72F5}fScU%hEsEuc%zr!jnN+Iv8A zT(br6iSq&=@D;%I-4K8jMGSGE`i0P&7R70h3*2Jf6xksUP?^`KQ+(X3pJv0dFo700000NkvXXu0mjf7bQHn diff --git a/graphics/pokemon/masquerain/front.png b/graphics/pokemon/masquerain/front.png deleted file mode 100644 index 853e08a17202b2f4bc7d1fb01bd4273ea5888360..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 791 zcmV+y1L*vTP)f@O*x>m1@E}-lutBjE6vrhz2t3tl(!CcYOBd0Dno=(n&-ws1(g#STBV)jj!>zW^BD!`6 zM?G{YgiNKLO0u*Xg2{cTzIU=5OG>S!?Hi2H`}zO>zo$FP`YZLQqi-Mldw}`70k<3I z@aO_;)&aN-#ydmo1H^v>2Ivqcv3Rq2BkO%Mx5tSP=hYkMQ#~F6E`;Lbhi#9P383s}$pBoQZhe%=Ng*8p}@2bLS)EHMr?00HZijyl~42oY=n>ky8r z!t^g=1O_D_9sn-$4+2bvFfl+GVqO7P`38uR@IGY)^z#jX-zp@DufB08f&Qfd!ia!9 z3L(;{1Qvc7U=2)ZUm(Up#PsaUOW-Z_^H@M&fKb3VO-XI8lt#cgF@Qk89JT!f!1Hix za-~)p7j>4F4haMU0(uh|9|w#Le<-zB6xJXVQJ%jSA`wA36Zb+~yNd>>P}ts)C=0~# zdMo^J!VZSmR}1~q4WR5N5JuHrIp@Ap0xt8suoM88Zk--$M1a!27z48zh}J_?H7i^K zis#IO6bMS{cQ$+BdBARnI70ap;%r7n6bN??rJi|W@YL+{tqkuEGAO;{*` zLvGc9?;bqmXn{ky>@Z^6eFra`gZUX|Al=6}_jX@qT3S7g{byRY@3A8_mb6Bi`bDdc ze>Wv(^jow9db%n()Oz+xO4%Uz$g~T7cTIJJWCQ7O>~l1FNBvu(Pa7gKBj%O_a2|SW z1;MYRhx+bX7upa_iI;Q|d<=O@QnD?9fT9(1pN3jxw3dd00jNfLrLv|8oi^@QfKnGY zQ_W9x?-xwK=SD=Qb}~5neQWN)Y7n~tB$^&A;-Ukvco*=0>o;ZV VPCGYZ@;v|m002ovPDHLkV1lTdTBHB~ diff --git a/graphics/pokemon/mawile/front.png b/graphics/pokemon/mawile/front.png deleted file mode 100644 index 9f8bddbfd53915e1ce767f77c44014e36deae1a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 764 zcmVKl)rA&KoG{gqDtrWUW9WwPP%n0PN`T= z69l5Ltn`NqUI01uQLuJ-G+7HFC89XHpg7S{@DA?%5)lm*&%mthyYru1kf<}I=jU&} znVnt3c#QuDO3jDTgmMrM5M&f^7vL~43Id;pAPx!y7~Ek8B}O$M4ocKOC|C^uyy#cB zj1T}pbd4v#`NHf0QS{z#0K(p4L*16GOAWXJ3}zY(D5cPKqk%|!G#Tb7exW_!V-#KK zE~)2KdBf;-Y{}?KYJhRxjFYqhGM5+?fC^u0aoTR;c?FBHj!$ev*D!5b8*K6(ZsE3P(B1)@dx*b+6sTB-pm*P zj(GDOeNr!kMyFh&wg(sGBg1qgbtICyhJacq~E$ z)-sd*vuY}w(-7^;M9L(;8TP=%&tovjJGs)Uk>mpbM@)|e@i>1ftGLPx#Fi=cXMVQc_gF#9V5D?8;bLMl4?wq7jK}z1<-iw2atfZ{P#l`mCgYLarv`Sk4 z|No?ODNa}*I{*Lz5J^NqR9J=97xyc&RQO*wDl0*aSV3V^1tjTuPhKzx?= zi5uSmCsw?61MnuQa_0Rz8lK_v0a9N8zU7 zcuE|bRO6mO#u^|7?WY?8oysv*LeU3O4sRiApU7t5qGR?JFSAruFU1D^J%OfRyhm{1 zRlvr33_k=f-Y1Y2i0wJh(FNm%s(dq$+^f|spxOnb0;<#m!!Q0+OHn~36Vz@P|8h`6 zX}BbC^5X)~JM_O9s5njpzVR(2DMv2>bG#`uXhNXZ=tXci`GxHsz7)efQ(kX1xQU+{ syPqaLTQL4k^IHa!0!d*~uzV`O7j^j;3U1T7F8}}l07*qoM6N<$fKls#_~K@f(|*SNO#6eJ3C%&l`kDtlH) z1X0|11Pu*Q{y@M=ZPF~cbTpAD;{wgOa}#CLxv`v7>C;h@CN=+owL`#>ch5*P6nVA9 zO7q;j^P#;UxYz%xTD$@f`3fNFtZ-1O+CwO;1RB`Iyn<+;1(cttAu4;w+lZJ0NaRUj z6Ih2C;7RcZ@T3rb0nAEJL>V|8lHY)Ej#DJJO=MkkY@~*A4%iCFUY1jYN@m+_r0iWp zS;GaisA*(0^S)r9RikWu_8?k|3SxZjub zc*oAECwt9|^7?*yxL82>Y!X6v`QiJw*Si!0#0O<@vudaTmw->fReNuiN zFV+A&MBNYZ(KS*t(0cHa$9Ee6=<-($c0|ooPkE5TQll{Cp#exA8hcp|&xn-IjMXWF zbDOqVfCFPDzVKX6hts2qa1g#=9=PmpB^7hm|9tEEqn)*SpndVe97jZNjL~kFVxmV9 zs5man$O&w4xxTXtP@H=KPCC!=g!#-3gd04{#U?Y4+%*JYDg|zG>0HE3A2LC;S2bx1 o_}>06lidIJxDojM@AZ%R3F7^Ntw5JJH~;_u07*qoM6N<$f=#gyDgXcg diff --git a/graphics/pokemon/meganium/front.png b/graphics/pokemon/meganium/front.png deleted file mode 100644 index 8d2d25f6c19d8617b843fc297877998dbcd61c16..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 852 zcmV-a1FQUrP)Px#Fi=cXMfkw@|K1>CN&x1p0BWp35OXQL|9gwxF%S?C|NsC0Ia+%VIrgNS%^*3= z&CP0RYCec(hX4Qq(n&-?R9Jlp+2D&hTO{knD+j~L5pYPeXRAOxUl=Ohh5+^q)mmV;}E^&Y~n$RQ8{2oH=Q z)*U&<(KzKjYQT`B4!F8 z)oaj9!s8SwK~GN|5bN^vyof6MrHHbX?0(orjq)3yl+*z? zk8;zeRQZ{KQVR67Zv1M1qGPl2lu}^qay9-C;>*UJ+ynY z0ZOrc)=Pk6Q1W(BMa!0m(MNC+>bW6eee7bnFc4e5B!{L#zAW3`3~(oB9E6J^adP9gDgwaW0>!58PMWDV> zzKkD>A08#%^_xoMpWZGhXDh+*Bpm=dOSyJH(+@0AJORLvk4FKu%Lf)Hei5ny@@eGi zEGmFL0I6(P`xwDl8Uc=u00aA{T`_7s>EbjSpb_e>2O(j2&=uQVSc)wuUXNnPy5;gq zKeG0l!6UPpmbvdp1JTwAbN$Av67Tn@;*=?527o5qKp0!(!I z0{~mh0vs72MEt>kybsVSc^1%$5R_mg`veS%2ml58qc)o`ozZ8ze)vkDkSOf{TaNkt zp4&xCmXiO`_jE0zyuE3BH9I`3WIAC3PwQbsyzzVLfgm1aGJW`EcuRj17J4EneI=~k ersRF{%KfDjN6U|?WKa4>kVSjh00K!|ww`0&8Mz%am|kdTnrc!;o2U|3L46Hl%90005~ zNklG{du_sxvW*j4>g9%H<%&-;u8aSPyx z_`d+3wF7-F(|q0n^!VHuV<&=vYw~$!?%RMJ*?kP~C3|iI_*9o~PGO;JPWkXjSpY1w zO(W?3T-GNO$ZZQRTSG0yB$3;<}qG+oxv#KfGwM`An2S5d^?Rg3!%R!|do; zAd+pL&Y*ebge=Qv!(A%Jkg=)95IE@Dmcj9+684~X=grp}e7 zOsv=NP6*V<&NT(B@fJSfC=k#(-v+J$RC|GFcB+&n&eHiRlR6TE1WhV+Mp&5K9YZ8# z(o9M{A^_(E-iA`fEJY7bsgUF2*ufXz#VC4P`)F)*p^%gN?!X4nhO)pq$BhvgBe1dq zEZlYVD;n6poDBks{5m%P%M=YH>@T3TWvY3H^?+6GpPSxgjVp z*JoDw-6{Dh-amhOaav|q_8~E`#uwf90++rK5L~Lbs(EoxRJPE=`%6A{vP?gl$HP-T zQ}%kkspNx(-$onCn|`cSDR|Q>8EN{-z~R?Hi7>65hck@@8SK8bJrsHMEihqvqfo!} zvJHD~I5ijYdswaM{@BxePR;U}){HA=+gCA|EG^+vF)(1SxfNbeAfE1K;3lK+uu=3~ zT7`M`u3%~22UB)cZ2QMh*71sE8^f~M+Z+95_sQm_`rX&ax?1I+bu?;;Q`X$Aj$1Ep zHMuEO-F>yB{yBs3RLSFq_Br)^IJ(9s|JV)2b2f&_+&AQ(iXKR<^)y`HU>e7ebX{+z zcs+AK#k2YL>|#3aj<5c>pLxlzbcWPF@4rdQH!tYZt-kdbl!`oE{an^LB{Ts5VK);3 diff --git a/graphics/pokemon/meowstic/front.png b/graphics/pokemon/meowstic/front.png deleted file mode 100644 index 5ec230fb75f93d7377f845cd16be3c08234e3180..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 729 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 diff --git a/graphics/pokemon/mew/front.png b/graphics/pokemon/mew/front.png deleted file mode 100644 index 9451dacfab1ffc3f852763cbac98b2f79b578f5f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 525 zcmV+o0`mQdP)Px#Fi=cXMVQc_v|^P1)$Zd&9BUOvAC$Zi_DN^0x!n?aP;1t488vanos+eQR!mUPoO-RfH_QD%v+k35MR zgp8|Nnt>4<#y18%0>WAc`ho)3A%Gx=(9Ceo$yo&@a0oR2HF~tW45~cNZ(DJv2r~uZ zTw@V{Tte#CY7hVb3IYTY^mFTHWyJhRyGeR@s|gJt;rJN~u=W~9*lK_Y7%tjq;UWHV zOQ!+2cJUYBoB;k7-Ht#foa^FbXPx#Fi=cXMVQc_gL|Cb)#f=lQnaka0002)=I&}SoRmSm@bK`oO71xzQrOto`1tq$ z000000NzG1Y5)KN%}GQ-R9JR}z zEI@1E!@~9LlpVB#Isnl1rqFbH49p{d?nDLc0B{TOEiCF{Am1Ppen&V!CLV9ts51a4 zALt=p5Z(%S^P#gDss-40mQV0<7snYt)i(g#HwC=7>Vu8XO=LZbz5$3*n9chT4jUsv zV<*w$Q7-Wis+LHLy}iRRMac_UrT`QW{0w_n20?A zttN|m%^XcXJfR)HB)sn^`3tBPs#*@w2^I#nZ6QnnGKVZU z2xS$$s#pPabKRNBwvE6DmS9Dk=c5$_0$wFf2KdHpttvhVo=*!vC9p?ooQNf()&R)_ z2gusRPZ@9$767(X_Bc3g3K+}kV4=v;0w6Pnx;R?Mx=#zP*K)BWqyf+p>`s9Jjz9~- zhlN-QORj2QfOtVj<#jx(8=m2CrQG3e88dV8#yz;0#>;jgf3u#@ Zk3WD#7+l$6I0OIy002ovPDHLkV1g8|c(nik diff --git a/graphics/pokemon/mienfoo/front.png b/graphics/pokemon/mienfoo/front.png deleted file mode 100644 index 51cc46adaf42308fae9ad08095554331839c03dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 563 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 BTIT=& diff --git a/graphics/pokemon/mime_jr/front.png b/graphics/pokemon/mime_jr/front.png deleted file mode 100644 index c3519f6c9f08502d9db0e6024088ecb6934099b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 564 zcmV-40?Yl0P)|mToM#J&W#y zZjRQ)>FNX-xk93F;Ri?&o*}b#6N#C<8i{G=yP4UaTOrDm5eGqH&yIeC3Rr8u|76p~bP!k;C~MC=;9AJU z*SF~@H>5QFbDOgH!!58B$S{ADj*|_zc%6@`iHL1#Ov20J_OWdMrK4J4S06dAj=0t>N@X5h2FBuV4Q2f=< z&s>>_h(cIj0rZ7*pj=J&z#)GLG1b_O0G+0KgldV!rLL&8cFyPDV7Bln=7~Cu)k1|{ zFKLY8PH7v8zVH7xF-gk~@SGaM z@@D|!ZST{yL9t;afK@7~gdMm^o8^%;Mn5c$0k0YIEf#0CV7k!H;3ZaCfpc zg->_FF@E+3mRYKyQ=*n-e^LrT0RUZ$wVze=s-u#yiy=z?!V^TJaaU8Q^?#~r`?eQB z34qYA9(V-m+Eq}uEKvFo+zLpJs^oaL|6+dtv?hcL0003| zNklToQ5QUAL13;P!)c63jz=EtA;x4*vIv{qHszhR4RXIS8K!P;4?ck8A zRXt{vU1q`G`c-JdR)TfP>MlS&!)7>H-BIB$;QZi6_(&5vYIg#9HwUQR zb9iGC2-1ldfYhA;#?WqE$i0>8PevE{;hcb-Se}x)hlT~_O9BqibR4jN8XyH^fmwY5 zSiTw#kPp!BzQ{(mi)3_cje0?@$xLlXN6uzD%pD?Xu7Z#V4FMg$vWpWmeah;_4hzw- z-ffiXsjaq9;c>+S+X|}o$TV51xNkbLI%P@(Bf$13)fzGP%$jy)K`yX95Buqk2zJ!N w&J1Pi1y+eDJQZj;klCIDXK3P2dW&nuH!Z1OmUHHDivR!s07*qoM6N<$f-P#p_5c6? diff --git a/graphics/pokemon/misdreavus/front.png b/graphics/pokemon/misdreavus/front.png deleted file mode 100644 index b46d709a969478c04b9dfe3ef0d66aed737159d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 587 zcmV-R0<`^!P)5ZGX#U>HD1fS?#CKrl#PIADOdkT9SqSm@wj*g$~z`1o)TFaQ7m3GJb20005j zNklzCiJD+VI1gf~CI z`u6u_<;(K0eO#@yOxeq_M3iJ}} zbAEgC$MD4&F8ki+{M!vDaFc+ymj4fpJ}8MIsxQWO{+~E5kd@N~gy06I3rMJ&evJPl Z?f`N;p;kCM5-I=y002ovPDHLkV1fkM3p4-# diff --git a/graphics/pokemon/mismagius/front.png b/graphics/pokemon/mismagius/front.png deleted file mode 100644 index 5d68e8b7042b806674a8c0e03635cf3c4780a88d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 727 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 KMNUMnLSTZ&VOYNa diff --git a/graphics/pokemon/mudkip/front.png b/graphics/pokemon/mudkip/front.png deleted file mode 100644 index 7c83c421f11535c1377fbb68356aeb3649b69a10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 539 zcmV+$0_6RPP)%o;P|LmAn1TF_^3em`1n{zKmY&$`1>Vu00009 za7bBm000ie000ie0hKEb8vpK)W1){KokdXNT@MPTmg4p+d-Ucad4zu z2RBUG#t0f6IQ$^)c znN6)}A(WoWHNB9QXKP?qRsuy8Oi1eyg62v9Om#KTSO&8H0a{AF97unFTr2_>s8A0# zxkY;ma%{*dfF{Hhr8luWw`<72%Mu4H0*#TO2%r`cz|qJs1mK(C9R{&|l^g@fq)9o6`KG6002ovPDHLkV1i^w=1Kqn diff --git a/graphics/pokemon/muk/front.png b/graphics/pokemon/muk/front.png deleted file mode 100644 index 4bb6d0a84e86390a753c097924079f877a59fef3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 738 zcmV<80v-K{P)Px#Fi=cXMVQc_drE`mz3#=N&7^y*S}}7F5D@tI_^hIxzNVL1@#2>{*5KkpL|-y~2cz#~8+7~(y`+b%pIz@)zk zfL;YG)GnH=GAP0B47Dg>$;e(XkbcYlkZ$#L&O z3-z0!r!L>PP=l1ww_I%zxu2#&peRL4M``8SAQC{BCxGA7%4D_mRGD zK~S0;5r{n8*9AAWp#XR#J-|aS`Kcy==*yTNPr&O3z!hq>oW!a7R)AzxYJDa7dA2eFv@xm59YBki z<);s>HDffkX2A9kO#mG+zIc(R<>at-qD&6Rlj8oB!zZL-b)Ke1Y;^(Wq2aL0ukoQjCqS4NyT!@gxNvSU3_;x*(kvPlc zJmB=Usqqwo<88`L=y4)*KlwO*g+RDJg!$(M9K_>WhxzLph>|C{8RWvY_aMi=v2cO3 z1Ub>GJQcESsgy=tF{w>!w9``a6UH{dOYe<^q`W;{I@}D_Isu!<9{dFUwg2C~00EO6 Uc2MDDa{vGU07*qoM6N<$f>MT2rvLx| diff --git a/graphics/pokemon/munchlax/front.png b/graphics/pokemon/munchlax/front.png deleted file mode 100644 index 243df8dd060aab539d3a4c4e33656ffd307fd74f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 575 zcmV-F0>J%=P)8nu6oq9&FK{V!NGDrN0%xR-?G~A&n1EpvnF0Zsi@-zHxbV=`1(a+p zGK5988u@vI#7|(rd8b}F>0*)UkReMhKtRy_z;iBn7zFS2Ce>&KK~e`qY0yNg29Vt# zL{_5!)shf(0I~tPexL~m)BzC?gJt|4p(F!-mkbR40}!~j{T_?L0$!ICK77P{3JrxNi<2w&+NcP#(A3zz)orN;C?&p!84HhGR1Rp{|8d($y5j&a~~Ku zHNs5drRFZ1i^s`J`_KL)hN@(0cse~;_xC3^C%1Ve5#h=A#YMh;6XP$BV+J-g^utw| z^BJkTMOiLpq&Fo(W6HU`jypcgtC`L>#|W>N=5h^~)zZwW62ajU1AJlk*Q*tO3B3u7 z_;=i<_D2ikN%gwegw`YuVk@Du$_6}#&O)6v#mJY*e_W`2nR~C-)n9jji~J>R5u^YB N002ovPDHLkV1k^22j~C* diff --git a/graphics/pokemon/munna/front.png b/graphics/pokemon/munna/front.png deleted file mode 100644 index 3abe09025e01385e9a86d094d9f4049822acc72b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 430 zcmV;f0a5;mP)CR{vKA;OvwS5n>7_e5~aqI_Pxe0V3yT zx4wY#z6Qo>!2+^ZmJXP6et@L|GBx8O0t&Dta6I7vSss8)O`be}3s40Em=+Ed)Qkms zE`R`4G@A(UsI1^7A+0H;Z&VW3#u`QT9Zg`_e_kODHg9zh(}M*rHcMNI1zrf){sE+0 zyYsXOg!wB0_-+G|hA%>_0i!+c7(mGW%KDc@_l5YdGY-e7}6({Yjf;$M|z04*{w^2;c$0xnECt>X=uq{wXDg#4$I-XL;E@ z5hRWspy0GKtOV6Vz+pXs4#=Uht z!0bwGQh`hW18qwVb0AGcmh=gR1&p&!5s@TJ`UEgsI=81np86&eDdSnA`8+6a^ehxW zDRq~q+i-XN5@u4iP-4vR(1{A$R}f4v!pA#+hLenhhDvh@qd+E51`(&b8VkhXq)u+{ z)FTtZjJ?nCy74#L4{2;1QwmJqKmGOgNopI?GBLq-M0|g^iP+}-+RqysCuK*wz$v12yf1sP;QRP55lz^qTZFxi<@uwE8x0mT z>>`9bpM_krvSddUve+b@Emt(t*HmJ?{sO@xS8>QW|M< THi`e(00000NkvXXu0mjfsqEjZ diff --git a/graphics/pokemon/musharna/front.png b/graphics/pokemon/musharna/front.png deleted file mode 100644 index 75addd0950be8f58fb27292dfe858d8207d8ceb8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 636 zcmV-?0)zdDP)zy>8nu5XVgf_S8YAp>ap@6`VH+QRoe_I!GWV@zw%8cMnpoUEJyg>e)*c z?Vb8iy*r8$B~fa(qG!O%|Hu2{9kp2e69br2Ri=!YAt2X~8RGN%rrQ3Vg3f@ zfZX?JItLQ-HpvZHB0^~L#m15i5CU}L;Nr@9+av&TunfAjkm zH;B(I@V;LLC$L0B=aMe`jFE%Gm(EAzLP>?}fb1}KL9^O8NCT=%u@8h8l%e#%>-c>L zDDJcFfUeLc20LINL~zgZz$iMCgE3<$=c|0rh!308F;3 zs!PPr)sX;lat;xAV*TDde$^G*)Ba3Ay>3TRo^Otkn|DGSO9tM?d%;gE(E2n0Fc7bW z@=s_39B<)gUB|l_w%0((`u5GQMcLEC3qn^?mgRPlurOBB2J^3=CuToofBMw@@Aexy W+5Y~Fn{cxL0000Px#Fi=cXMF6nqgDC*^T3Xd9T1u2bDQYQmy+M@KK`ALIgJK~6-YM0rDgXcfQc_aQ z&CQgQlyNiNlK=n!`$>5CbINY3TkFtG>fuq+CY)!$;)00000NkvXXu0mjfN&TmC diff --git a/graphics/pokemon/nidoking/front.png b/graphics/pokemon/nidoking/front.png deleted file mode 100644 index e230190a25ff5c311112ac3f09ccf4f6d59f5f93..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1016 zcmVPx#Fi=cXMVQc_S}AJYl=cu15Y=<;q*9bAdz1i5VnLL}|NsBR#iXnd0CRI%=0P#$ z=GExv*mnLk=>Px&c1c7*R9J=Wmf4b{FbqYJWhKGwA^-okqbteAVQHxDnzvC^QdxWt z+F_dh+oh4e)9s_%9}`2KGhge|2Z8;p4qK!!Z`Y<@Jq7 z8Fv8c=|Es{`9qEF04COh$uou*07B2_GYHpJSOJAb48`E~;MkXIF$!7%G65tGanDJtp zEjBv~0#nn($@ST;&5Vz%SLRu*1Y*}$cGeN<3eE0-sG7_*v}b__rGTLI`ap;v0!~Jd z#AVj7oj}L$2T1)1c#|>tQBsCY{Pis2%)(fCR+bh9e6aZ;R%DI;cPP8Bh*^ZnudjXigW>wd^0eCvZj+)~DXm89j zXYZB_1mu78TT!FvPwq9!@gt*f8cZ!!Xhz3rS=hW=$i9`*3Fe%5iSj(##x)lNfTI6O zY(4!@mt~fJq!491mVbxq?+@Pvpp_GEOcf-vm04x?vHTzu1>89PgU;$ZogV5%R4gu``39uQSsSOH>*IMxpUK{vQucU}Y7Zt%B5z273+ z;9#27#EQ?|0Sn{&9y?5)-;g~k$baa+le-J69%f@m+3t#;{~Q`dClKQ?1H?A_4$vl; zwr<8PS}q7KKX?!!f9lvqx3kk{7{95>d=%Y1!*h<{0cRiGZG_kp659GFaPx#Fi=cXMVQc_VvDR=w9PR}N)Qkby{uYuS}Ai{DV){b(9qEM`1rl7TIS7*?&hR$ zC@AQFcuKkOKL7v%*-1n}R9J=OR@;{1Fbu=7NJ(4%|997y+zKruoHI|GhZ%;c6kC?< z-fsWNAvsfzzk-7t9>?3W%o(lVKs1gQg22o{A&MsXV-_#>8Ud8*e!s^^gb4z20s;cx zmt_%#83I;3ffyRVvSfxy0?{A@1T3=zip}sJ2_BC}hKrV!U?KyA!+{4dp&_&gB3_O` zOM$5x2t&cM*TYE0@i!=#6`t6^3ZI}58SQ$+b*%v)3@4#wF#L+OW}sq>mN9q$!8%BL zz+5@5Vzq#txNU`DSb|nQxqjO+!vuj114A2p+u$J#<8KB)M*l(}6(=+}Y9U3{(W#{7 zwe$pl7$j)*?~G(t8dQP>Uz|__aDt%-nByLsnRIMPjc;^37$f*ckpm2BYTSWL?zGwgy02#-d9Xm6LR4#^Gbk(9)3X} zfvvUitZ=I4rlCj)fXWwg26N#~|My`S?voF#_8<25%cH!jd-=l-Jdt*uEk z{5jb0N|2K{UQ)l8pC1Tpfv3dpYqW~^ZNqBkrLz>_?+5ZTeO}R*0@bEYUl^{bJvMv` l;S&RLEI$(5eg^*a`3KeT8bYqTg|q+w002ovPDHLkV1g6Shx7md diff --git a/graphics/pokemon/nidoran_f/front.png b/graphics/pokemon/nidoran_f/front.png deleted file mode 100644 index d47802a0da7a2ef8a3b34df66b962b49f1ae56b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 489 zcmVPx#Fi=cXMVQc_bAzl}L4&NU&DGWaG;Om%i{=mz5cv4`y)jDe?*IQ%LEhfp00000 z0000009I9CApigYXGugsR9J=WmBDhuFbG7=f{l{;|G&2&Q0z_*7Sl@)+DRs{C;JQt z$hIvlEiL_b5&ix)FKomNH``03j35TH6G#AY5l{n!U;r^jhhUxo9zqxsA+v-Z0ALX6 z5zx(#DC#W1f6vqb`*9q*->CR|)uF24?}QS7{ow3vfFo4PU{jVj{Tra-hfoqkdJ6l_ ztOWq2nH{sco3-MHj0C7thJAV>F#Jutr%Ait+IprF{q$bpZ?6DE2--iM{cjlw;Pur$ zEp2U~G<6WF_*BqZ@fr#^Wdh*2a@H=^z=)ymhl!Df==Ib-&3s9p%V2)XB0{$eVycig zER4r8`iW_4h+U9HxDuJGf;R4_<{8i}0h&993?pN|`TeTU(73s2tk@bLUEvH$X`<5I z&EWW_r~r}x!svjaKXb6A__UBxErLusnn-P!s05(%q%#+RgW#8?6jXDKQET>SXlbk6 f^#|+H(o#j=bf^jbsY~z+00000NkvXXu0mjf(2w2h diff --git a/graphics/pokemon/nidoran_m/front.png b/graphics/pokemon/nidoran_m/front.png deleted file mode 100644 index 3b1084e3dcf6daa14838b1b49cbc6796825781ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 519 zcmV+i0{H!jP)Px#Fi=cXMVQc_y<)}YoYi7MY7h_*?!E2+VnG0;bIr}o|7ueI|Nq`WDX1VkjFF(BmU_pBmv#;v}K!_P!3ABo=E90f*+0U-x(8FbT&4}Dj7;qbi z(u4?riUVd>r3oTb{AM63egotPr2qkNmb&*{0Z8T`)o%yF{JRP18c6jkq5CHQdMZ@_ z4*}%c0HRJ90!aIR0-Q0EK{1QU02^_$)kw*a6aB?;gL z@IIIyLg|&DWn{Jtxci0jee~&XiVH<~|JAOk2PNk(O?11IH}N2HMHHA~B;}|$LU~eE z1jkB{ud@LnjARvbm|`bB&T1^BNKZo~fCqJePx#Fi=cXMVZp1T9mZK=I%LKVh|7zi^a_tIdeB(ut zgM$D70J+Bo*8l(l6-h)vR9J=Wmg{bVFbsup>=csr{hxQfB?MN$X#Xax3Jsd`aePVE zX?o&`C%y#e1-8$2_ow=Vygt!Jp3>&Q6#%!(MIP4+Af-&>1HR8U4CKro7eLeVgCGKI zxdAYt=wGk((S;g1K$oMWGru_IAV3P3I{=fuUL#foRww{96ySQX5F>~j%!BEdWxi#B zg^-hVE~SO_90~|^0sX~FV1VftO(E7s8UWbzbJ&0YnqIr{n$1A4gqp+#poDM*Rljw> z1nz^)F$Sv$qufS{Y${`Y=s3xRCH?x$`mG|q;JXxTdYLWT z9(bXrPn+YyfII*soBdh!CBUnPpZ8~|qgVp#&^Z8i4RCd@1@<}|98fqCh}I&uYIOZk zPvi&_8K+CN{3Zao{;;Xqe6r=WrGN;4g9SQ0r-{%PBk5I#0@fr*^~V4$HHXX~JKwJ2W`uFq-V?84{r-7K#HL=ab}?R-uATv+yF{>@YFzc>*yy7dd5k0 zAOJWu!0i`xucjv~qy`W>Cj(8T?>J0yBZW^6u&Ji=jorWG4sbUMQlZt0PGj(Zl<`ZV zCIx`irjPS=5dSg)BCjTp*k=HQ0Y;FJRLJfS?gP+r?zs5RrAgn~OV)XDz(kd5?E>bZ xW^;!yuBVEXdG!upPb=l7gD;FfsGs=P@dJr^61Cp1_a6WN002ovPDHLkV1lUCF9!es diff --git a/graphics/pokemon/nidorino/front.png b/graphics/pokemon/nidorino/front.png deleted file mode 100644 index 16b304216e80830c08f2c4d27401629e61721ad5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 691 zcmV;k0!;mhP)Px#Fi=cXMVQc_S~+6PgWeDj5az7zlv=a^lwwNFr1<#wfPjF&z`&4Lu&5{~=zw?t z0000009ubQp#T5^F-b&0R9J=WmTiyYAPj^%I8Ji>{~vrF+o5C|NKgH;Iu&hJEn*(V zFOWVS-|-#4asVIdi~I%vULbD=hEj^Wy1?=g09dYljR55gFuCjB$qw~JPXKPu2@!o4 zV2HLf!{k7u-T^e>(MV2uBS29aJ(BRx<5g z69>hy5b-tDKGsWupS69`oFvA=lm%mLLr9_tf1w${v~I@5UB?W9=XQgnfLf|BnB9 Z`~|4Q5y-0pA{qby002ovPDHLkV1oHCIFJAU diff --git a/graphics/pokemon/nincada/front.png b/graphics/pokemon/nincada/front.png deleted file mode 100644 index 1c408a81d25693c63d6d75665bfc5692ba834f95..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 563 zcmV-30?hr1P)%B00009 za7bBm000ie000ie0hKEb8vpK)3Hj!Ko|hv7y^Q1DaAdWk{+p5G~^9R zEV>!;0EY5g?NpFdbPHk+?F+a`haip)MeGCU&?2}eg^V5U4J_WNNn4FN3;7{|yZ^iY z?mrSi$RdmX9CONFVDk@+!IkT6w34k+~*pJ%s& zICx(wc6)INaZE@2V$3odl!o+kzL@MG(n#Z1Yx0TpaSWthvd5~jkbpHB#p@=ZqzF7$ z;jeyNKq&4cK>V2FKprRGG(t(AvE$D#e?=Bq2yg1=oTf<8vswTE002ovPDHLkV1nfM B^s)c| diff --git a/graphics/pokemon/ninetales/front.png b/graphics/pokemon/ninetales/front.png deleted file mode 100644 index 4c14bd887c11c95cbfd950b44cb5dc663a3208f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 874 zcmV-w1C{)VP)Px#Fi=cXMVQc_&74YuVi@-3dk_#1=EYL95CH%G|Nm+!|Ew|pln|&80000000000 z000000BTW5KmY&&=t)FDR9J=Gm)myZAPhw{|Aqb1PEj7I@6~PD_wSD&bDp{ zvTgtUApV(*%D(`p$?T@c=W0_qz;8a(huZYaaYw>Fp6Xp)h)Wwn^_xeCs-u$nen$@s zVVGWqL8&*F;_{6HT=?+LE+0s@4%mA}8#I&$v#tumUZ*A?K28VXsJ|iz5vu`+Ni{rB z+^F&lAi5x6rkY$d5G;aQLp(BJlbB}!mlcKW!59cP*=(~wh&MyX#z;W8bFo70+3OVm zGe(2{%^#xQ3qxJW3u*Y9tZh#Y*-TA@&DU>rIBQOHoeGP%$=E73u z;n51Pq>?xQ>A+{sWub)uRj(E{2MC-%M)hpKY=T$~k$U-Isx*KT{BqD@p-oXh;#jIa z0Fj8Q*P6ZYl8)Pk}j0AC_8`P*Bb)O! z4~rxA@!E*$tTdtT)|Ui{S+V-sG@*k!0vOgU0K~12wJ^93))Xf9J&Q|1wDSRgOsMkF z288(@(4v6<;DDamk)G zs;=H4dhHnNYA=>c03&SC1{ZzMcS}559i*!TsE5V!X{Ps0e4%#$h7tH}VKNJBBo6Y~5glT$>3$)c>OK7w{S#_KBArF8}}l07*qoM6N<$f-7&1 Au>b%7 diff --git a/graphics/pokemon/ninjask/front.png b/graphics/pokemon/ninjask/front.png deleted file mode 100644 index f7c0d20dc49d02c23ee8f5db8632a7cfe7fa91b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 791 zcmV+y1L*vTP)0001(AV9z{P}ne7sIahrI5>b{K-k#O_|RbBs7N?CICyw?L|Dv90007_ zNkls)XqV;e#{gk*H4qHLN(6bP6OEhw~T$W-;6B*!N;O{Q*n)7^bPz3+Wbf^bu# znh>u6X2~_gEcq89=SRS$MCu_SDm&=W9MA(d)pm|e zvu#=I_bY7Co5mOrQn~$sW13%AoeCh(3Kngs0!PdboK6RUUSFLhk|iI>9Y;V9h8G?I8^-7GjM70M+HX3-0>%FW*0p0m3sKLqM4Uu3I|a zqIBEibs=5v4aln5s69sjJKm)$P!rlW_NT2qcqK^i}tfm6LXCZSSX4#x9r@ZJE_q13*oM2B3 zUP`iClI3CXeKxKO3%lV=`yIq2kiKU}CxD*aAN~d4`}pX(AU2ag0zOT~Ojhw4;Lgca4h(>+^_%)n^#@jC V38GR57vlf`002ovPDHLkV1mnCU6TL+ diff --git a/graphics/pokemon/noctowl/front.png b/graphics/pokemon/noctowl/front.png deleted file mode 100644 index c646747b44a09fe7f1a239131143bafbd8081bd6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 702 zcmV;v0zv(WP)Px#Fi=cXMVQc_tb0mgK{5aKw0l}g-pyJ;DInF9Vh|7zVq#+d|Nq4?7@PnA#l^*x zS~;YHYT%k>-2earJV``BR9J<*mVu6=FbqUVaEt{a`TxJY83$V0Tj^rZo+YYPweuKf z+$7WVTUGNz{rm(_p??CXvlIaC6Y2~D4|;%_`fq?}2r$nd|Ibx<0`R6r0f#<+en-Gy z6F(Rb|3(Hq)SnEvehlz3Agqgl(M326h%78oeKBVX0Cahk#td{q?r-k|2^r`etLr*I zODPcp)1*$2qYsh73g|ll`XZ+R)@TFlq4b_hRn(!67^qEM|4|_Ww(1u^BL)cAl=>=1 zX$lwsplzDi{<`j_C9xuasTMt3?V%% zEUJqx{81#=#|*dyRg7V+X}O~ZA-#XiklXlJAm%9$WXDTfGh*^d_L za}HUMmcIe9CO!-x4%f?g61jPXUj_mM0x(C%zHX;J3{d*ew}J6R=m7Z(Fl+&bu=p_Z z;|_o+2#*!H3$UIe7g4T&;YG0PAdsN0&w1Pe-M?e(fGhz3B1k<2)q{{D4oFCVNO}Qs z$iYbvr#K8iF@z3TR5o+D z=8nLJ1vVBG?ggBONvX8n${3khy^csPKlfVfCdK**rjP&inKcmVkL`1sfWC@>%x7!Uve00000{@qVc00009 za7bBm000ie000ie0hKEb8vpKk};3kFcim)yksm9s7sd^5FIVvCC9)5 zXH*7;a*34;-H}S2($6Xd8yj;Ekf<5*7*W?yk`4$VH{W+$ ztPxy_zX@k6V6A|jeDZmy%3<61lyElL{in}^F6qk$&M9(oLT0BPN@ueiPnqC6fe`sj zWt+V=#8En9#U1CoNXnmp6E>-cV^24g&Sr_9a9NHh_U|=7HU|qQXF7^7EMO!{KVdJx z$NY~0Txg3elyaY@!^)7HSO6fbiK{@#=}O~-cmTt%$8+FHr#MKLGNl+4;Hm4t@Osh< zrK^Sq!w~eUbADZz=|8^lAf<=Z`E^#0EWW53=*!9w!CtB&Q~OZrQ=}_9fYa4JU6oe7 z8WfPyZh(-#uG&@;PJ(b)2VgZVMO_Mv}mpY(|+H?M^@f+mw VtEV%N6mI|k002ovPDHLkV1j3JGm`)S diff --git a/graphics/pokemon/noivern/front.png b/graphics/pokemon/noivern/front.png deleted file mode 100644 index 252a56fb46cdf760d026aa1f6841015f064b70c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 972 zcmV;-12g=IP)|LTWs400009 za7bBm000ie000ie0hKEb8vp?1f(k_=Hxiw7) zMAv^HR|h(jH@F~oeIA^-eUr(Sbg1w@2!ud91x>|tD_Xi4Oa{>{WXV=2n%>@b&Xt@f zQB-*Fu0crmem>{uNY@tPKMt>b$x(bT?Lab+?Z87N91mN8ho~Hht-wLVP$C3vKpGhA zA;fPZ)dG64KQM6|%g2FZ;?Wp;@xi1WOok>th(|3z_D1p8j9OB>XD}HJ2^|a{DRSf3 zf(fH|+y-963?{J*PsB-mk^Izx(GVAt$q>WkAIln;R>0XF$~Sp$ETf&}=`9GwMzRK3 zfLX9FF%yIG#)ztHR!G=8cQ z49ql{S#T`7+xhj*FM8Mv3I-h{aFI~@5Me#qt7k=V z!x@Z^{WUnk?q+_Craxa6rzg9d0tP0kz?8tgw@G)%xfa5+CCzq?U!0QUYHL!h3q@)PI6)uY#M33I^CXfn%Z<5-Hksdq(48Dfq z43NKWBjD3pKy!Q4#h1x0e8hcER$$-ONZ^RC5qs~Fd)xq&0U(}MU?e01Dss-?B9R1W)57%A^oSzGe+iypVBd_x3%=yjmr3#g zO>e}T-GW&O(lu~x!R7@4TF0lev;tcgh2=|bZ`sf^-|4e-Uha+bTU zP;NMv+RklMLPnZEwG9vJ;C#SM6OO(Q$_!%jVs@@MhO%J3-k@vX=~rpG#UOkLY%B*O z0_O~T0Efj_-`6~B2(@j2>sRe?bm(V`JOm0-HQ;mEr}ZT$j>;OUnQE*< z+@%$858Q?jVmn_b(HKE^7jdB*zy(xylWqgJ*`M{FS-0_<8-#hik44ofy`glX(f`7zFr)xX!q+ zz%gi!p`lmzl4nWPd)Ms!29%j&=yfkB=>L={|Ff#2Bou%maKQ0-?p2^UO`a}}ArY-_ zr+QC1Y{22deC$NwyZZYNm5*AiT$xoVwz)7rDDq1&vrv^y-rZfTT{C|2=Pf$wa$Ue> zQ%g$hbHV)W>=C}jEk1UC)D$mq+IxTX7WY#K`}yrLgHYJNZ-*HsU7J<3>W5)N1B1y~J$4-%?+e@BI;T68Ff(qMmiKWCoiKfGWiHG*-RPxy{uo*PHTKzRFgFS-by-IS!^wxKZTi6`3Kg`nP zd@IAi5}@JK!&Sw=@nBx#g}Q%k41qib9LMDh9qxEB6#RItYSLgF;2-_wb%P~O zLk#nisMGA7>lm%vyqI>hKUZKbI604F?#u^kqyI0H=k^k~7tC?V85A|1u6{1-oD!M< DbXm;A diff --git a/graphics/pokemon/numel/front.png b/graphics/pokemon/numel/front.png deleted file mode 100644 index 2df10f3c71b999185564e115ae7276745dbc37b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 541 zcmV+&0^|r5aKK>j@SxDpkofrc(8$K)3Hv%Ko|$`mIP)_8jQHWwG58D@FRe*e!PK5U}OZYc?QN^Fs*?BL^v}{5CpVHQ^R6Gi^Teh#PcTJydE^; zYwiZaggRQw<%0$QB}xdiR_uIJ6$`lqnBy>Pt<%RjK(qA1Nx)pV4DeveFuQA1D1=w!bd&u@fZzg zz)1inz>PEmTgpO5qy?{qDXQ1g4y1fD0k;S~bO7$8oa~2hm8S(gsXV|5oh#Q>bYP?u zeZZ00G3^>U;P-aD!MtL}}4}dO*?klCIb_}}qLLB`~IELB> fMo`oKpOg6kGUAnO3gntv00000NkvXXu0mjfm@@45 diff --git a/graphics/pokemon/nuzleaf/front.png b/graphics/pokemon/nuzleaf/front.png deleted file mode 100644 index 173398f528181a8cb3734170bf570f0b94f30e71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 661 zcmV;G0&4wKls}G}KorI&1qnrpSV=B`PY_u-z)C&< z%@`wA+lAON+71l~TWn)7GO3A1;s6n@ZHQhCUZhdFTp?B3l~U#nt|DffKFTW)()XM1 z{h0@Z{0~!1CV$bL=|y7VIL_<>@x+Bk)o=%x75?4lxSFc@y#8hh$ zl4l85Cn=q20ssBSJy4gN5ls%i*h2${fgoq_&$t$wuR@4}sR4V{m#B-+nzKV#-=z@U zA}aNO%@;qUXm4(Qidd`fD!+^RlHMACUA6Z&$6gfQ`cenjRaN_G@Ii>8mpZ@##lR(L#$s%70*|wAGvAa2#E^RBiWjWr$TIwYrM_Y z1oR^OgzF&R834cRA9@5rX~^M=Vilo5X#y6aY%h-P8rS zmU7#Lk+Dr;QBJ5d4~lSgiIgr4vdv+*#f;tSfh=um+(#R~Fg-vaP(Pmxv>Q8=IIKYq vb#D9zsmL2hObc~3S^}e&0F~;Z{*T6Qn*8aWQZFW?00000NkvXXu0mjf8Uh@p diff --git a/graphics/pokemon/octillery/front.png b/graphics/pokemon/octillery/front.png deleted file mode 100644 index 2fc250c8d162fe3ab2428eec8693df4a8be72f72..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 645 zcmV;00($+4P)Klg(<|Koo_?f}m}cMD5lLXtFkA(As#q zuZLb~9f7WrU63mc^Z|;WAke%(sh_gmJdD0D4?htgi^27I9_iv8o*XRzaW`-oCgV8|rrg zMC=Y0U%vn9n>qwEEdT?@<8uQr?INli0iYg_zcC8}D)RvTe8w)|AcPkHZbd>65U%rt zlu#6*K?)HMA^>$A+?5bnI{-5RROm?|Siu+w2}E+q9TF!?@8o zZ9{gpG28?N`0G}G8jUK}J<=rNmir{2&31ZqHcjXJ++yw%EKSL|aICmbDCZ*Qz0!;K f-s|H1KYRWFuLa8)na3pc00000NkvXXu0mjfWL_7P diff --git a/graphics/pokemon/oddish/front.png b/graphics/pokemon/oddish/front.png deleted file mode 100644 index 3ced8e7058e74ec08341b45a37e0302add1a0834..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 454 zcmV;%0XhDOP)Px#Fi=cXMfkwLi>xt9S|FU&O2y`T5D*YrYJ+o>q?EM9?m00jIZCozdDfMz00000 z000000J}6%i~s-uL`g(JR9J=Wl*x_*Aq+&ZjZMP;fADyLUT%iDj5JhQiqcBGc9ls= zIXXJ}Hv+)l*$FDHBLK#GCA-##(C3D~>V>dO03sux`ztc@A^=Gdp#A{FJyYV@p56f% z0Rn)QBNN1?21K>%iyS~$80}`N2&|+C!~j?q%3`-Cn*@6*83881{1$*Se$PM@F)je- z{o0>Juz4o{bcx9oj1kC3zANzg^-L!j@pZfb9QFZA6LfRrDYO6&Ffb`XbUwTHk2I7l z!aXb^S|F?@7zmMOQpQDC`dg5X$`NCR{2FinAShz_=Pd0BXvs790Px#Fi=cXMVQc_Vp1`ffN194gT<_K|L(;A002R1tT{o0V!ie`oXz<7_`txxXlQ7d z;P3zd0K&5xE&u=lZ%IT!R9J=WmCd$;APj^Xq!Up4{;zwJ!P>t~;^uCcV-IffF%yEl z-KM6drh<~8i`Au+W#|$@q}FN-;Y&>;WVyQz14clyz8n%+e1CgV1S!M7ee7SP8ZkqV zSH16F0HgqC0Fwi(S|AC6EX%Wl)d*lSkN^|{cmj5mho3|USx)&Z903Z#2l3Sc(7s!^ z;-L5eI#CjU@|^%|K{ o!PNI`{FGY}>}s;aaP%YvXMS0%U*Su|Z_x z>IP^bas&W00000NkvXXu0mjfd0N)Q diff --git a/graphics/pokemon/omastar/front.png b/graphics/pokemon/omastar/front.png deleted file mode 100644 index 87796c37d5891e67a96bf51572e769063a99bcf4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 863 zcmV-l1EBngP)`1trhKtQMf00000laenY0008& zNklB;YV12rz$H@N0lN~Y9iPwRbp^qN)@31 zTZE$Iu`-0dEvhn+C5obUX#a@*1Nj?zXB(O-4((j^h7)@C;qLpr_Z*A;v$6Jvx{_X1 z#DA|__TzwRBEVMxY)xUjwgRxy0IPv&mc=uVYm8gmX|VKTB9!F5Rby6znHfEjNw)W3 zoe`0abfRRE%#RIT%|!vptQi1Sf;&+SS~+I8Zi6wNh;*v#&Yh!7W?A~PNS5FC$0G7ezP^d`bzbwcfXDV#I%x}ratdpHVa}RvB7}qT3~~2430XZDFEEv6{MsFKmvkA z(1R!(p^BN?bn5zR1W44>z6WUXyi+L2{+l1JJCZaZ-;=Y&rZjOjl85;Y76$O~ne<0= zaMED0so_LURquoR6*DqPVCX^4?7TPf3jici+Ths*JPuugt$Ll3l!yKSAd0)E<9nL` pyCe@6TUp-HZ=pie&;Rk)@e_#CA)>GXQ3n73002ovPDHLkV1j&`m2&_9 diff --git a/graphics/pokemon/onix/front.png b/graphics/pokemon/onix/front.png deleted file mode 100644 index 6cba5adc4d0dce3beb59c4be97b0ab98a1e62ca2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 832 zcmV-G1Hb%Px#Fi=cXMVQc_Qc6mLdwcfo?!C0M5D*aF)z$d;`1ttv00000000000000000000 z000000Q?Pl0ynF|>#D-8gwG1swfv|Wn;XoQQj zfMG_u=TvI|?K*%+*Q7(v02|_j0n-NkLFkda({@Hc1B4OiggqesNxu&Y#q%KKUk3pC z%&gS;rV~ib)>ljxc)h7{X0ZT-+XB$$MdmOArU41Sz60gW zBM>5C*x1xuw9NLY*L~1;Fg_j$un{8Gt3?v+Vi4>Aow;hrqX4^H;|ONPWa_o_Y2hK0 zKMQckcFyS&FmoA2WeAZ!pCWd^p#VXXM_QB*;mKM&M9xo)5S@!CSmX+zHk1qG!63J= zVtKBButRWp!ON~yuaOn_yn-Df!aCQW4xD-m^hF5<)j~!i26^!hfb9g}%MzYj%u=BP z2&aB^0vI3yl7R$_EErKqR;L)_jAzXQCif8No?00&w^z?ZB%fX6YrU<2k9vP>{uK}3 z>TMd0DM0| zuK@!zk6$j}zOj~@+(~?$>z4-bEGSL<_9wP{B~%9X6kO+h*N-}*y7z$YKS3t|`5@og zmc9ps|8`ID_?fW)yviM^OmAlc)LAmC6@Q@Lz>fmh>PXVW{UjaLhoXox-mCIQ>D12W znEP!9wngZoO>Tq_v$;v_`uS#Zp?6Px#Fi=cXMVQc_N=izLi=6-e|1m*oN@}brK~ew!0E=2N#gr+<#myjEVky1FAe5Yo zS~2+GkQB5OApigYQ%OWYR9J=WmC=&IAPhw%0n$Qg|Nn0{3AEGI-G{3$K5(@i$MGCP z!1#E~%*=d!g5?96*h23(Vx&&Cj0m0!V2&vPhVa5OrzDWz#SsC4 z^EZRPq=*SbZ_5$_U$Tg;Kn2UXs$$5Pu@-PBTEKD>6j0!6559!rH$tN=3@LsVQ<&;rgH!njmMSOI3ZzFSjkg>$&`$%XTFACg=y6wk$9IGp8P$kC8;E$sl zAow2vHdj@!y1?7eMB9>51Pr3s*#g}Lkr;I_BZF0%ZNlz&Gu(m+Zs`JWBW?!C=q6gr zQ_ceyU?5+7vRKhxJvp<3h5~l~G+e6|RlQNdpRSpineWaIn?Mn|CaU8U00000 LNkvXXu0mjfX*$Ki diff --git a/graphics/pokemon/pachirisu/front.png b/graphics/pokemon/pachirisu/front.png deleted file mode 100644 index 7d60cf8dfb55a9274df4bd7a1781a1c822e07b6c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 531 zcmV+u0_^>XP)*RTBU`3iO>~lSnYS~uvoQ9D!#D=4=8*zW51L1S;aFfZgEoe(K&uV_*oH>~ z3tWIxkIb7nXmv^8TL9oVBrv%G;F2@=+|4U^)e`E6!Th1h_xPv+3|rmcj3aP3#z^n6 z16Y9PQ2{W;uZ^Hnfct~sVn_lDx~EnSioB3h4LC#i38W5M9e@$QZP`IoK)Z)WogEN; z9hjVBrq?aObt2RK0)Ek%m*89o9Yi~zegm249m22xK@MW6cQAtmP8O9w%w?+G!Fk!a^-W}x^_?dxD=K=t-+XdD*^+?8@`H=*#`7u{ zD5EjJqubcKqyTGVQf{OI2Rksf824ApK@Et;p~zx#1Z?3yCL*W>_@W^W@<0JT#x2Kk zN#t>e{GYg_3NSXqMaTu6Kau@a<(2n3;442x0S#v16bDV{5{3P)k(74#x;P|k(*pQH*z-ZWrP>?t{IPmEB`1ttvP(Tn65csgDVTIAJ000DL zNklOtw&KqLiw1q+J!*+8lRFr8OD=Z|K29X>FxcS~nB`=?R1`Y2b-c zsWcJAA%>ueA8^bshaEJxK(J$!R5imLKE^jP5fk2r+1;&o@Cm+tMjRqEy$IB1=-|qpz z7^`qz!xT2q(Axex9yTC*0%*6VSqmb#PEt_n=aPVw)%b zeOD8$2-t8-=Kei!7c8!T+{b^;?`g?B%~U1a74zTyhZbFwvP~=eQA zPhRGyiFf1)o-8w=qzsa-@!9MUgDEA&7C z&^mp0Ry0k~gc=}#rUp_HYi1AtU?RCn~*HEDFB?~7_bSo;8=SKs8M22JAbC)IP#dZ!!y6w_o^NoiadN( zcLUesCr}%ZQS zOQc&*T?CBJ{NtqvnDmeR-wtI@lQFPO(9$>lvAY`WTReDnIBE%ac!gYl()Y(#<112X zmsaW@$OoXOy=|r52WaxO|JwiK?QzhMQ|{`!0HqRE_#d2=>LP=iFF61J002ovPDHLk FV1hbpICB61 diff --git a/graphics/pokemon/palpitoad/front.png b/graphics/pokemon/palpitoad/front.png deleted file mode 100644 index 05b2a8b24cdc03546f4f0bd2e58e7a1f2f01c3b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 630 zcmV-+0*U>JP)O-v{4rJUPMSB z5O0(6swHJ0kel)#SPa${v5k$8?zG#0g;sH#og{kt=1#D%%D36#efYi^W*z4;{}Pwn zoIdwxjZ6a`rL(LAaJb?JAs);CEY}? z{t1c=Ug?_(eFRvv0ahLkxh{CBL5rdtZlgJPM-IsCYBlM=G6uOubNi8eo3_Jt62L8b z51q1D>cQc0`cWPx0V^(G;Ffx8M5)vF2XVmsg#rRj0_$ItS{m{AwH4%JP^TwfKYa%c z*b`ik@2x5I;ki<K(!EZ@Fc1guL~7KPH0n^POB_Mx=A?E- zYSr=pI2kh0DCZR#VwaDNhu|4thYooFUW>#PV!3OP7+~nF|6k7Ma~$Vbe^mY<&^!4h zaN}^VaD5SmdqF6oy)FDm2ocWbbm~c)3+T&pGEXqDAP!|p0g2cXyXuo5IRHHT1|b8k z#7{wVP0#Rk!iWcJ3#K^ccx=}v)9;MJ`RyHGSlptFKu{Ia0 z2q&}LP`Mw0oI0(XswReFC}4adjGzlUM)%002ovPDHLkV1l$-$Wj0R diff --git a/graphics/pokemon/pangoro/front.png b/graphics/pokemon/pangoro/front.png deleted file mode 100644 index 9de90108a402c6a6135a170e616f2b1075f26d62..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 895 zcmV-_1AzRAP);(0O;u8xUirQARs_MNN8wq7)TfZplB#CFi22XKtM?N`1k+-00000_^RZw0009D zNkl8nu5XY5)K;W%#yYwv#+TIH(89cd&PXcT$fkO)5E)mckpm~6HE)a_X zm|08ZRUH~VRF9Hu)0UO#$PeQ& zH8up0%th}+55^#w**;U*Ah4ozOegC>zdbg})q8$5$Qo-C9*+rbc_Unzg0^v)ju zM!9IRyyF7^Q7s@CyXptBct!Voo(6Em{o^@bKG1KUX%wXrmVM;qR~`dUIz=GQA?^XU zFF|HXJx^qcL?3W&pMw;@y-y^@h~j=CFF&PJj~;oZ7C<{dwv#uKjoP_FZnwjcjrti0oP6o^Z-fHxsX8CKk9E6G7ih4+ygYlCJXW z>^qzIn1K*tc>t6WTv_+6FW&wrai|JGr^Yi{5+f+Wf4ctL0ZQykz$rLIfc>Vb>$+R< z^&1rL;rmG-+*JDto8CRbrg(?CumJ4$9;{E*rl>aKASu-KU3==k{f$e>tIP*C{DcyLf4pm;a{0000000000tD;&Z0006N zNkl-82RGZ)&n?Rnf5446O)`3JwbwUHWW&H%@YWh znsE-Qp%A1#fuE`)i9#%CeJJ#n|3R>t-_GamGWM?jB14=uU%37W zN1@NFQGjm+Q3y@IbK|>;u;x+Znn!?D0L%CRAc$Qrh?)TX<4f`I`72Rvz$chT{3d?J z?NZ$P1cbGj>!pYI5%Ej>43wi=8@Vo{$hwZ75P!t?a7_{FXTq9?79hSN#-Yeq<3JVhCjizH8(uoD_cvlZEPKX}6aI)7cacdJAH?XBp4Q`lK{NC`@n(`LCS kAeHrRnA30ZyZ&8&0DtPh*stTF@Bjb+07*qoM6N<$f-{XP^8f$< diff --git a/graphics/pokemon/pansage/front.png b/graphics/pokemon/pansage/front.png deleted file mode 100644 index 63e3125ca28d1bcf1665fb93dfb0f1f2cb6a840d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 625 zcmV-%0*?KOP)8S%5XaZ1r8s{`wDz74A#@V5z0w6y**l4-P39z|q~Lc7b6j7K}-j*u~w zJK_Oo`Bsk*1ndKZHV;RqEB&!pxIp=by8rFs}3cJkKWv1AwA$6J#8uoEv}~0&S2(>2QD%5y~cg`kwMP0yt5{2v{`1 z_5$GX*Ef(9jTp^J1LvOso;-YAz`f?o0KD2e|MF68HLx%Mi9FqV_qJVbAAE$OF#(Vr zY!LC&1_c3Pv~gFS)`%@W|9~fE0J0jpYl84uVW>cxgc%;+bS(jkvvHRs?-3sV_)ZQd z(omtVQsd1vqIyAtG#HTPYJH`Ynk3^*{1&IM;>^`?!^Sl+U-QfUms7eUq@!by!)o3G zMKT1w;U&AjRvnFl>Gcn<;N7Y|>X6qf-fAKYhd_&0h?R@W$VH4akPQKf{|dHPF*hB~ zg2q%u><;3p2Ut9s1=lZ!s1Z17n;;qjeRKMMKRY78$xLy&J*09@Kwty>1YkO=Jj=R* zQdfzyscl^jy$tjKd7kb5hazIJ>1zKGJ(DaE=JJ2#`n%(|`e*tH43drr<%Rk%00000 LNkvXXu0mjfVr3Y? diff --git a/graphics/pokemon/pansear/front.png b/graphics/pokemon/pansear/front.png deleted file mode 100644 index c7dc3a5b8fce7b6cf8df00c696370411f03d924b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 591 zcmV-V0zKRg8@(cK(#!FTH*;5byjk7-O1%b4aL@BFad?lr9ib z4glJQuz=f60-|9LBqb_g+yIb9G@&eSZ>SSvbJ27CRA+HTz||=*(4Trh7!4-RD+@@o zMtt#z&R~9rIC)ypIPWWLn0biH3g_1g5E*WofNoVG8|3N@7foBUUA`iHtAe19ev)h- z_4^jp3yI-FBM_{WI;$Vo1LPF6zj|9-)OF2ykb?FPq+3l@T`$!Dr+IMXZ+Dk#+fa)_ zmD??Lfei=V%x1f7>`3>*y2u44tFKKcV^;xr08#msn>TP$f6MK4S&gIA1^S5VobT6$ z5Z=x)kOxW1_kALgGV_KJa(fdUs}mS$tr~`9tEbe%WE3mky|ZY@`YnH{m?KE{E?w*S dEB$YOVV~ZFi8fJ!xrzV)002ovPDHLkV1oC&_-X(E diff --git a/graphics/pokemon/paras/front.png b/graphics/pokemon/paras/front.png deleted file mode 100644 index b79705ba548699a526d14d45553bafbe9f678247..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 582 zcmV-M0=fN(P)Px#Fi=cXMVQc_y+J`@DJk}9YQ?l5|J70u5D;)k7&$2r=7TB!_W!hEApfjlT3TAo z&CR5w&5C_=+5i9n#7RU!R9J=Wl-qK{APhvoc7znb{{O%2t{|CYTD!QNPG78CCIRn} zR>%(FiYudK&+{@(uPgD4{&u^~^KE$+;lOc3oE@+{0bBrK9yP^uOc_ zo^(u}OWp4Gy0#j;hg6ReGP2eUHXDZp)0m)zYAvNb{6EZkq zQ`OM?djYtF+C2cbsSgC;p58X?g*^%g55gWm)%Qc&*N5JodJ+yM0oQ(J(-@nZQwQwT z&k*~(nS3B}*Yp2r!29$Z0>11HrXanppLj4fJxBYb=3Rey`+OhckHRaixZP)F9yaA0006W zNkl#)Dj$YN(nl!+6qzJ#xU(+{oIRyN9ef|~Q$YC389wpX8 zz>V2<=xP`MGaRE8$4hd+NuT};igQHdzLbzdAfj$eWeJnmkd z;_?&-VX=~_EW?p<*?lu%rr*kMhwn9GW7`EXb5!!j;g@CV*mb568VlV0e7rk60+*G} zt_Nt%;VDKY2T0Akl4yaw1t0@cJPFNHV-!CHj;O%(g8`ij#1)_u^d0ad;J;Rx)q}W5 z4C@2H6C{-22ABMy5G` z=mP=A6(~123wD8vqfOXdsG4?wsJjR)-~nrHr93HAGmOyGT2)VW8R*WN+;`t+XetM9 t3UCh4+v_d#vrR~x+ zxTEP9(F}zyJ}8(%3dNp6I|LnpK&C+cgFsG-hDz3X4TOA0eLwf!-S^#zkO$pk!4hlL zaBaXq2pw{GA;pOdwsaQw)=WGdXFtaCrOl)cIyQ$Klm8$^1;Ycz@bPcq6}c` z`N3y-{9*8A{tKfcA;gcvatPhy(f&XAdpMUVMk|-%=ha0S=*zvoZ)Gk8T%B)RloRtd zr92h;nV+@@Ir2KCLny$K^0D}St$>q`Yk&1wC2|A$@{gFDsRA4@aG6t`2?H*ZZ!%ry zU?O_Vs`!Kg@HaAb0Tkf-3k9+gU~xX10%S9RMSwCuIh)NgOliSag!w`$Vv05~8Z|y4 zotIe*C+gBU^?;EBDF(!`mjDt21L^_t{_P%sX*v*ZuKX#OmIk1p za>}A?X$q*YbKf*Iugif#{=z6L0B8W!qT#wr0P0w(IcHj+S3FBra~X1@S3GPQYfeFn m@4cP+U%-E0-Fi0000Bh_u-FbK-M1I&`Z`!@mnq;x;67YjwFhRSs$pAeLO4giZz?$!SF%vG z%#!ELCi;c~{#Fl`*+g$whzML74hpAY#2}fU3YpL>C{Y0`Qh0{z=(P ziVY6XsZRrpFCeZdNSeD}zSLsl@?a+74&)+V@byS6_8t2n7(IC15%fDB04@f>HO^YR z>JBj)X*%Vb=A5S>KquRzfGqqPkHu|KQ7tkJmI(eZzL_L|*zyDya2Ruz)Z`IHq;?3-y{2l)2t9k}u Wz=IYvojm&h0000=x}g=`1tsUKrr~&NWge7@USrW_^8N0P?)g5D#!hA0007! zNklZCGnwgKvg z75P@H1K^YrwH5-DcHJ^yuhnW(jBc64@!R%00Z_jLc-93*jw=BDGYr^ZNNK4{>y3TU zw})i{n$|q9iEXn|0qy##&sYVp6MpLvyFVz-#_`>C7@>z=5wIJ_p@_wlF;)QVK0L~N zH0I=r6?k}f!X(F-hkP0o03$Nyd_c8?;f(s^1!EsJz>mdUAd`fU<~&4z(w;ip$=&2J91${kl7p21 z?I~+EnXINEiAVzKu2}c{C*WfRz-MO?xJjoW2Yf}~?9ae?84&UDcQkQ)ey9MCS>U#h zz`e2}nR(zdE&zW~3M}}-9#Vg*tfo57h~GoN1`-8s=Pv<$@h^S^AV888K#9)Eg#=I_ zpVtfzq=YnnxYa+cv6aZ!v|zhuDsco3seFy<)#<;F-@#DOf^lAD3jhEB07*qoM6N<$ Eg7n&F;s5{u diff --git a/graphics/pokemon/persian/front.png b/graphics/pokemon/persian/front.png deleted file mode 100644 index 650de8dd74ede69c1dc0f0f07498644c8767b6f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 769 zcmV+c1OEJpP)$R5 z3`63VUx*MM2{6B3ZSdLo>-f-h!O zCWxU#dSwF=c~Sw;K&F6$Rk)%e7Qc2+XSYq$Jodc~dot=G z!8Ry=K<&s1tto(AP#!&9!f35I2Qn$Ai1cGM6j85n!^?dGh{n%?L2m^haQ& z1lyVjC|S1GqZt8NSHjb`HCiD+kk0LC~qI%28lnsAMUaIo0NH|=i?7XNq>i}n;aIaW&meK`8Djd`(bv5D*ZUxJY1lFu>?|$jG?(`1rVpka#dSu+U%t00000000009XaB40004B zNklZrE5JlG#qBhtUVBrF=9KeRfIK8pk6d}lEB%8T_6KyVlwDx5);FNqU zrAgyy|KtBZ>MZ?sAl%zpt-Mxa0z^nfP; z5K0D8UL};HO&pmp5D8x<2nZtvW-1&{;0(ExezZ{jxItec&iqJuDjnB_qg1BySSes2 zM6S{xUnq@q;pFi$&9Tlz(Ud0`z*Dz$pcB?zmd`}kqG5H)!lgTKMizYnO=UFHFwhdr zXxdK(3RuFWw&SmDgEAaC+L~Ubflgc7LEvz_T6<*x?O7ae*4}J)-hnNO{Q!Jb2yk}h z+Zt0>AVG-D));fC@IlPdt+}i>P6hI#nJ)*0000< KMNUMnLSTYf(8qWH diff --git a/graphics/pokemon/phanpy/front.png b/graphics/pokemon/phanpy/front.png deleted file mode 100644 index 22ef3096316086bc6ae74781c54bd76c1c09260f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 461 zcmV;;0W$uHP)0Ju0X@Muu@`1okJxQK{|(9qDR5CG^vFaQ7mm^~YO00044 zNkl{k=@B^q zkkvPoixYqa3%VyTX2FY36M{{>zv1R=MbQRs?Ja@e-Q+= zEk6ihWFJAo0I)XH&A{>}{z|!Lz{nRpx2@>)VWn2GxQyeQz=0KobEOhh0NEbnyDMjj zK{zB3GY5Xic-A6PyoZUP`&3h2Oi_?GzZ5Nfi`TrS+R4n2Nq`#n%Bg%M^r}o zxIbT2184M2z(g+rU3B`NHcS%TP{@HLs#wzh!F6?m2aYnEDY*9fJ7iwhSDz*y5ReN^ zKQLhb(-Y#RGu1pH+z;~{XdW$R|2_Zv%%;4lQ-|^k5KVw#kpUyG00000NkvXXu0mjf D3%$k0 diff --git a/graphics/pokemon/phantump/front.png b/graphics/pokemon/phantump/front.png deleted file mode 100644 index 2471e23010c679bb1e3f8a557efcca54fff167ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 570 zcmV-A0>%A_P)Kls$^VKorN5!onu3%C>?}v``S%>9+6; z8pyy}Y$4=%?LCp{jLd z@QHxj@Ud(K2a{i^9-&z=tYYybcN diff --git a/graphics/pokemon/phione/front.png b/graphics/pokemon/phione/front.png deleted file mode 100644 index 10f7d01b52033ef34cf40479c9fdaf111cf1fe0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 510 zcmV4*d!jAw8G{)$e zn}{}`YQt~AH37;d{3{0fg#kcJY+wzT?^Xs8OKS&mMJ;#B0&R@D&E;BVF)p!OESJ)(#EtwsF{)C1t006YK!3-DpHR&7N{zjc761*l53 z;i^?VAh1q`z^b7wo^`WpJ{^XL7yx)Ojg@W>D4I4rnrspP29|FPwI<{km{9}{*>bo{ zC1YUun(-WYz@n;32Ve@|@1*oZhN>O`LZup@Bm=73Q|LQelzj`|n+0o~td@sdtq`2YX_07*qoM6N<$f{O^; Avj6}9 diff --git a/graphics/pokemon/pichu/front.png b/graphics/pokemon/pichu/front.png deleted file mode 100644 index f8974c37b8ee6028b2c23b0a65e330522bee7198..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 445 zcmV;u0Yd(XP)Px#Fi=cXMVQc_ARsYPK|!Q@2*s=r_U2N9S}FGKlwwK{l#6@r=FR4Nl#3uBy(uXG z0000009}o6+5i9nJ4r-AR9J=WmBF^dAP7VyB9bQM|3CKu#x~s*J$)<3O*V7SAVN}F zT3Y(804Dw0Hb+pv6v6!SfC+;7vz{pc>iHx9eBT)ZAl@UWIZ%^Tpn!J-Xm=6;;0@62 zaX_n~*$o!}cm;^iaitW!)bG0j@b)J#yD9=OM9!I1`q}&?_OOU*t!5*FkpNU`y$FQ| z0+1TIzw`hR0Ly;&h66A>qGFhmsv2BtwAXs(u&2Kv=CzefB$|97J=h_M(`1`iDCv0Bly*PFcQ^p5p2V}=>hxFentU_ z8GSLc?}efL&etB&T2c}j0Q6BpR{s_!+yEjI1ox*A0_zL#XP_k*Anf-kv^JJT2>M_D nQqY|`@RmPGbN;2JrT@_%{xAw2ysM>l00000NkvXXu0mjfKl;2e diff --git a/graphics/pokemon/pidgeot/front.png b/graphics/pokemon/pidgeot/front.png deleted file mode 100644 index 0efed3108f9805f243d2791258ca2787ba309540..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 949 zcmV;m14{gfP)Px#Fi=cXMVQc_S~)2Y5D=_;T60oL=Coq}=8O37c=(ub?qWfUIUv3|NsBy zq@2Bbdx*Wn`v3p~Gf6~2R9J<@mhG0KAPk0^5UhgA{on283q)-l+y2_C@=s3syyOD z0Zh07U^$1X$>fCkANNw|nBDy6ke(G|t2bkU}r+y2BK(P{7{S4z%1Mmo_l?xzjdar>2 z02Av)oH(9O#6tpJL$prZGH?P;wmgd`4q+Ig1BA|kxUT`HQI|KhMM@*?E!gcs4^TZX zUl&IX{*d|8p@Iqs*qcE7ZPmL7G0DFv=bZ2WAZ=po+lD>BJdR;ZlL&M}g^JY-j-%lrs5Q+~xgbL6h5~xi9&PsYKo%K=# z74#gNzFXb1SHcSyrJbwZGQe&I)FFs&*IN_#)@UBo1gK_z-uz<;(e5o~0Brt|?;-EW zrQQ*P2j~$DX1vZ!lw&6#Fp8*|V8^d3v5aX8s-ua!{2)6*X$=%iW8G*-1L3{6f1zpGP;f3XQaKH(Z@2?M?zo)ZQgG&h3IZu)RWyKpV7*?G?Cr1Uy z987sbWPSjguBI8q#`Z3fu~su-eNw`P;8(zjfa+xF&u$@g@8Jn#o9NkIFRv%71GEnP z&7YE63G#dq`D^_=qb*&4ui7mibhQ!0#+O^+&4@EBu&gU|^&qSAl&ADQ`#ulgpQXrc zz5S78_Wb%&Z#zOWauNIF^xbyZkL}A3-P85-)m!TJ-B*N90+;zG04~e?Qvx5=`+wsf XN+u|9!^cPx#Fi=cXMVQc_doduzF)8k1K_DO?kU&U-QZe}W_(3TkczA&StaH`X-mH6C=Dk|~ z=8LR*TAAFy%K!iZG)Y83R9J=WmdjGZFbqX2Tcfxnvj6{Y(ZgXuI^o~jq(bRDqWIDr3c7%3jsF! zCmig2q}248djpmP_~XH?oB(p7PA?X0M(Vm1*b5I|0R9@SpA=A39z5c~u1v(c9OxNx zofx6%C7bgiKPf<<7$1fM#Y| c{~x~;pMm-#=_)B}a{vGU07*qoM6N<$f_d{RAOHXW diff --git a/graphics/pokemon/pidgey/front.png b/graphics/pokemon/pidgey/front.png deleted file mode 100644 index 44cddf449b25a9b0a47dd971d9680db209c4bd3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 549 zcmV+=0^0qFP)Px#Fi=cXMVQc_fJiXSgIc6wTBKrH=DlJN5D@?FoPdCUy(u8LxVZnUbNKl9?qWgB zgIYi!5Exq;eE%_APht?n1PT${{L@x4BfW(;Yz@2-!f7nwd$OB zitRY}=+UG9FOh%rdkNbJbuM^M#I8RI{nTy>jp+82(iTCJRbcjry#f+Kh{+UX2LS?N zlq?dd4Z?98d~z;85N!F+Q&4b$gs=lR&st+Zh7mRZIB7IO2W*@p-L(e$`vBR>z&--~ z>;n2X0LtSxu?^|xIjpA8)Cs)%U|JrDmR^cJjG6LdEbn`|fFb_@cyPajFopO4A~!-; zAPGHAm>|3p*f9Ga1i2?l&@VrS>gDEPNYAj6AVnK%BLopP#bg9@=eYD0yl;nwsRR!E ztyR&lCfzR5^UR&1WiUvzhE!{2>D#F#o%6E@*0004Q zNklrT95nG(Ug&o}ODJ*b6cQm}Xy0!q9FT?ZRL?PG0Hk5~t{mFm@-T*%R z{tfa8uj8VB+p|oO`8dSA0U~>o>KzmL9FUvishLp)%>eB=8e?W>AuvRH)+WG&0Le1q zm05DeoRI$o0IDToNCTDufEdGSrSCa^HGXV5y>LzaY$39Z#+wctjC^|=>bG&U%E9ZUH07zU6pRt;)|@SZRbf| zrN)2FM5BizOThSeJknhraH40eJKZ~$aH6Q((NFh$6BQll{J!QM?E-O%HhY1r@i+QI Z{Q%VgkW=002ovPDHLkV1iY7(`Enw diff --git a/graphics/pokemon/pignite/front.png b/graphics/pokemon/pignite/front.png deleted file mode 100644 index 39c020d57d6c0b5c6c4fc62480ec6ef281b4a797..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 745 zcmVDERpJz^I_OSTN{tD0nz1=)gFzh$wJi5Xe9{I3OTMNJuz1H~;_uG|GIb0007X zNkl8l26vus8kQgeii!H*36`wY=s#pkW`T|IuK{Cvaw! z1R(2w0LbtvaH0uHGWfdy6Tqom5U^`BEi&ig3Y^PFD(II&K?VR_pp3`z{IYp2niN4b zGSG|(>8P@>0_!H=?P zHG5yMqa!Y-<3oTEpf<{nDq_E3(O!sHCIHn`Xc?&2fFjJuAXGGK<_M|DF4C})fYLQ< z*yo%Wi>4tWI%{UMyBNlGs1Ow(i5Gy&2K_YRr_MTi;Ks2HiuiF$Qc(>7*Kw7!yyVXJ z!2Q%Vc+yrm+kT?-69JB$=Iq?VeI4;u$C6X5K#H|y6Y6} zbfDzex(VJM@T5earLnzQf$C1(34rghVEyJ-1YnD?EW>KyE+*jn-m?}|*HOTk?YeuI zReS<|vgc}`9Rk_2i4RcsW)t7XinpzayU@&cf?VMJ`A0ER`Boon)vw$&m)mR!`{0puJ@d~!L9 zzQ0I58gT9_IhQi7*1-{=l>wP`-pRv<=1>h;B b|L@~B6zTG_YMuAc00000NkvXXu0mjfk1tpB diff --git a/graphics/pokemon/pikachu/front.png b/graphics/pokemon/pikachu/front.png deleted file mode 100644 index 9a320c28660762bfa26544b95942c82083d7bcc7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 587 zcmV-R0<`^!P)Px#Fi=cXMVQc_0000fDJf$y2vSm7_q`#UQULenQr?sR|M#W;|NrJ%Ld78&s4x)V zP&fbp0KA(8A^-pZ$w@>(R9J=WmeFE^FbGAZ2%)vz|9|d)m_)Nqv2JhPhia|&gb+wG z43{qbli;lXc9QT1fO7=(p9kQZ=lVDb80iN<-QzgMB7>2rBe>fX15gKGrX&6eV3S>v z>VSV3Pyx(xzu!|5w>tsCOQQfWyAz6<-NM=D?#nVjy`YXsX`==*C z=iesaL^>wFURq3vo+<~d{M&%1)v^L!tk(vhV*ui>F9Rrn4B+>zu(ooL->m=>4CS`3 z%lCpzsDACucE4{gfQ2+n^4Ib+yvfRt8#Pnr_;8@T~ygiy;m_FLtz(i)u0 zrWC&!L81U?PH78o{vg3;!1W_}5>P})Ft)GD3P56gt$x8^3V`R}a{!z-29fZt3}y5h zidO)0kN{@N{|7K%y&b{?v+%r(T>KtE3;?UX_eJpaLyp!lQSVO&+Mu*zaZ~YA{LsSm zPQemrA#{otfe{R$b)&*h{D{JJ$pCe8muLxPzm*X#a_;AiV>19;e^=zWvn#|;Ho(|~V6X>RA@5Sju*H(>^Z_bxF5fTGCnd7uyvX4O!O0v^8oQS#b4no{6m3pp zNC)yW)&dGJFvU3WWJqCf3U?xNU@;6#5l|HY41s@nJC;2SRk{Bov4N+7o;AGg3IMNr zR?vV|LazY!NxU+^%q(Gav|CERo&<x8cQ9UnDaD7+~H9jwi9Qz*q<49>BW5?+3>Q ziFK4CV63yvWHnn`Ks%@D!UD&!lF#lG2o*pEI5WW91YrlH&w;E3m&Q3zwfUso3zvG9 zW4$9&cNWrE-7A0F58^pwl*xYuQedfrQ2kUpo~ipCr&unN8DPQ`;FEVW_ENl(z|}yo z*-YLe&bL?c1p`FV%-E;cL{}HLx7&OZCLwV-&kaCal7A}8k0>f2AV?GlMLNLMMOl_# z-2I)*)$p~q-8s3gny=;0@4u^k-sarpo%=aL=tI@~C_n$Is=8_O=^|QpC%{#G_vYc@ zZFQ&{Ux6jp_Bj%VJ;5SCe-4k0zwj4RE(*Qlp+TzLjf9A2d>I(W5Z!-6LLhvvz>e?q zSc#ijI8K3O1w?RkZUIO9ZRF>5-4sL+J61xK5<)nmbxcn0000< KMNUMnLSTX^h8g|< diff --git a/graphics/pokemon/pineco/front.png b/graphics/pokemon/pineco/front.png deleted file mode 100644 index eec63a8ec7b1f1ee7d503c8a2a48644a5412759e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 544 zcmV+*0^j|KP)e zuPx9eLpW%#e*E)&G}Lu(@miz*8*sS!Phb~QH^LPNL4o_!-=Q~&-5GDXaPRjgL2m&e z>h}$4?N_`yUUy0bm1Y=f@|e^z`L{y*1`#_;ZX$;cGhjDPH2lAR-2E z`j(b(1=gBB>j4r63on*vC@A)<4R5SixR zfq{@WqFfbF7G4@aq>7X3fygRN3v~+X<*04EHDlKkf?n!Dl+e&QA?OU0VA6B+mI@b0 zv$@upso6zOvQZw176?Q$8Y%`&bedhY$kzB!ognYj2@rPcU~E&JV5iA0EY{CZE9iLD ziQM}90wnyLmC#+pM&u>7*-_Rhr^6LsV9$i!&GBU3s~6z50OGApy@Yg<=T-jn$PC$5 i@b5rpy$o;hO5zt9kzkX6T6wzw0000Px#Fi=cXMVQc_NR9J=WmD_gfAPhupjFE`=|L?7CU~H3^o;;q?)vT5<+oM6? zW%)10x_$`=+n0o}G2t5<4A|B$T!bxdf|y-?TNr{^*!DTXFtFbN!eCZv*ry0#Tr5wA z@Ew4ECM;N7am5R<(v<|qXBWNYeQrYEPn|= z33C-Vz*f`C^$jp}976?A&aS6Srk^mt7IxQDwm~UjCfs+N(hI?!p9n+`NdU~DNdVtS z4oC?^4{5g`aE`z&pnBX{sxrjv1cEses{@KFeITJQ<_IJYEE#w-05Pv1@!%!;@qYLY zq!c+p_hH*2E(F4VJp)PtI6RP$tPI{(j`x$^0Km`JUlH=qKrIL=9{@<1yaF{4SzVX` z3XmCD^wt8ZKM9dK2NE9wiM|y%1R!beb7K6^=D-1m{0#uzyg4{!z*TH5l$6QJ%3eO3(#wc#Cb@?)_ej$FIRxLmOTXqC;?+lgt|beUWCxh%K-G| zkd6)sicA`SPEF(n#6N(PVYd)~8PH%Mz``#KSfI<}Xv203tIn?wb5@U~J}8;%K>h}* zMF9GH0JShVUS#up(e{VR%H}wT=ji|}M|h`R102qW#9BEfN0+vh=eGci!6cEU3(~WX zv73k30Cau7P!C{Sl(M-r=-*{vdm`;1E6#+=LS>$9c@ZfE=Fs4~+gcdCNx`t=FQ*3m dyYz3oA3yw+EPbL|i17db002ovPDHLkV1kd9aH9YK diff --git a/graphics/pokemon/piplup/front.png b/graphics/pokemon/piplup/front.png deleted file mode 100644 index c2ce15cdc70eeb8cf38d8117884722002a56b599..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 491 zcmVK(y>m$P!tB>;zTqNtJQ%C2pV-QFMwVj z0OJ{8F(ldsonYW74*F$dmQn!-f$9X5#Z4eMx0{sbYMmk@(b(XeY-RtaoSJFMY{0;s`bcooOM%B0&U>mP$vZVGxzcw h4m9_dhUxs_`2nk5eeD)mYFYpQ002ovPDHLkV1lso(GLIs diff --git a/graphics/pokemon/plusle/front.png b/graphics/pokemon/plusle/front.png deleted file mode 100644 index 87b7612197d766969babdbc34287602584d3d0c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 487 zcmVb;@5Jfj=MNJ?F2y0Mkyr#Fz5=WsU3`9y3kr?{OcuzpY0XRbLkb*1Z zP?@!HmHnimV;W2TZ~uJF>$E5UAVyS`1sQ~Va0WXJ2tE) zF<_n)1jc&?9yJ;i1BSLlL&CrpJ-?Hh`mZ!sLZ6ev_CwvoDCCe1Ki@VVMF{BA3j<>f zLl|ohb_LhT7n_OA;>0N1cZR3EfP)eV8!!;p&-`!7)MhkauS6#V7BbB!o97}xfLmy~ zS>G$rq6X4s7mb^NnYHQC|9l;=A#3v@fq+O^H>L~s#Xu2@1fJ&}?nWkXTh4+32^)xi d#7mvEegVtnU1IKVf5-p;002ovPDHLkV1g&w%n<+p diff --git a/graphics/pokemon/politoed/front.png b/graphics/pokemon/politoed/front.png deleted file mode 100644 index 74d705c1060bd2c88165e23bbc3c96ce65dc4f1b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 720 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 diff --git a/graphics/pokemon/porygon2/front.png b/graphics/pokemon/porygon2/front.png deleted file mode 100644 index 84f153fc72d92573717016b144537b88324e0a57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 480 zcmV<60U!Q}P)KlCe(1Fc5}awTnA(Wui>E2nm%1s2E_j zs*f|mAu;d$N(1Q!(eO!9XuKtpvSYkcLJqKAbYYa8Vj~pn~ouo z8#q}l7?4EI_Kpnvto?w#>T|} diff --git a/graphics/pokemon/porygon_z/front.png b/graphics/pokemon/porygon_z/front.png deleted file mode 100644 index 1f39bffa578bd617790219864248489ae494aee2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 564 zcmV-40?Yl0P)JR1~6);%cyv+#rQFFhv@{6dUX`;0|nO zDld@2bVkUMIf0->NbMPXvk@`bnb}&ua=st$&&)T3{7X3*e$K080FVI`)-zfZN?9Fh zX21d4Xgi*9MrXMWu&?(Qyvr+q4Sfj@BmlZKg5VxD>+tlbnS%D3;SInJJ1uK~QC|!X zVejpIyrgd73n2zj>UI;r;^`8SII2x160jbc*J*-9@xkgx(jw|9fSk*iyT;C4n^1*OyQ$~HjgkeL!D1ZKBxlh3TF6R)fd1~%KE>N>>@5yGfpL6LA<(pAkT5vJ0pN{ z4FK__U)1}A%E)MPKNWM09V8JbUTSuXmf6oMvM{4|1`w*!^t(YMlxg`926|xfEeyAD zOAEh;vBPbn9~%MuKgJPcqKpN|iO?o`Dw^T{S$zQyGOS9DnNT+X0000Px#Fi=cXMVQc_S}_2eYHH1kS^xk5VoD(Y=CnaULFT=jdwYBT|JDDLTKM?*y-G3v zlv?1hh&?9-@&Et=wMj%lR9J=Wmg{!oAPj^J3^Km;{U3LA!=^S)y3W}@d#bdJ<7Pg@ zNPvgoH~zy2A$+8cDW%7R5RwHR>Rle=b3n8}&JXlpVPJIthD;qo9$scPLdOPVd?GrM z@QX|+I=OzG#tE@bAkZ9%$}ZH4JkLY|5UVrpR2a zS`p)Sg68HPR=wwt_$9#r42}@bPATX*;jb6L3vm6^M^sDQdL?&vi1}GfXhA%hHT7;A~ z4oPKl0IA+v`3l%~s!G_tIJS*bHYZv_yv_i}9)YSi1XZyG*DrKx0PMSrXRvKw5X6QC z;N`zIK}fom6cE5W5${D}0V52skKZ>g*aGJ^9!Gt%(Kcn2LmzJlb|wjdo7`6Ao-j%q zvD3h6;9edmfMKN{H|@6P9 z->{AF#R0t&`~kpDAIFxY$1wl^002ovPDHLkV1mLG BZ<_!B diff --git a/graphics/pokemon/prinplup/front.png b/graphics/pokemon/prinplup/front.png deleted file mode 100644 index a4b84554dda4a949e7ddba65c714ea0e76bdb8cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 665 zcmV;K0%rY*P)3e_y7O^TL|Ws0006c zNklljA6bEpFFg3_3;%gwpPK3zTiY?qZRC40G+YzVeGW>sj@114aF#ff5ZCUIq>q<~V zLbX@a06ToMx0D@h+~fuDBQ-#`V8_+~yh_5F4xl)SYPhNagXE?Cc;}`Xr0fj_Py^g( zSm+QO6)>zSvKpxlAcSuxYEb!zF?yu~XBJ-70rTvMUDtw>HG6HO8PZHz_&$p@V7IkZ zr=S7wq6$FNz=IG1LP9m*DbWDaodM$O3lP$S=h6aKIq8uQB%s41ZsLga_+MF=BnMGU z2E+r25CuX)_G7|0;KyAQVgjEKHsC)FAlUyhmsj%hk%XlYO9g=FLm70UZ(kW>-}?dt z$y^E1A?zgCCl0b>0iX=vHJby)9^#OpKb`}$2rA;<1dPpQ7`h^-M+FdyOP-C{Y)u^3 zqcq+tfJ>hH?}n$@tb${hUQo=J4gq$%$@o_e&VQ7ih$RZY`&~Lb5ksD4bZ-&dpp<%D zO5bLmCzGFY(1#q1_;wyI<^uQvBw5P0kqlgV;L@vA>R=eY;rYG}@JH73yCQr)rF~g$ zxFC)}FScoNEC;T^!G&YoV{*XPHl6ZY*s32i<++Kc{4;*tdf48Oe(z0;aSkxL^I%;9 zo?58g%!jFM);49}?#AEVrt8XHaMMxD_Ft?&BhnC6Tt4!U00000NkvXXu0mjfK+ZA0 diff --git a/graphics/pokemon/probopass/front.png b/graphics/pokemon/probopass/front.png deleted file mode 100644 index 21916b3762d0a38d5a2aa2203cce1e1d10f32e69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 842 zcmV-Q1GW5#P)aeI&sZgmJ zW?_w8qDbj0N5yGV0<4_{wj9_W9ddxb;!u?azjLsy*dfzq;RSOlrwvohn&CJzfI*&_ zHhz`d+-aAt2qBkO?+9t-8z@bJP9=QXS`t`dkwUD}VfOtXeBD?C1ak!Z1SsA4 zoe;1SU@jJZGVRiI=$u6W!$ISy5m;%*!8=ZK2jId3NOBY-gDMMwK+OA?Aq5Vc#ttB) z0YE!3utLDZHe{fGe=C0=IxovPrI8vY;}QVyG~l3O(L^_)ECmd^Xp_##XuW0}AGNin1V&?`Z69}A7dCIj2-fhh zf{8bZ9S#R;u5_WE7CbyYt~`I1)JO&!p6G(Rk3XkUcWI3$8?GTlg{QMwQll~0Y&L6z z6y+X;z+HOS204)cV(ZjkI@7lo0VM^*DZZw0l_M0UhyZ=N4L;bcLkQzh4f-Wz5I#Tv zTUm2=tN?fW5;J7^YuPK22IK4Px#Fi=cXMVQc_dwY8j5D=7F5ay&(|J6$W=A_=VQvd(|gIWOp?!ETji}>ic00000 z000000G4~qqW}N_ZAnByR9J=WmfMcQAPhuP8`ePo|9{t)Ktj?7yS(g5nW{Ibb21p4 zblV<1`Y(EcJ(mEm0$}q}00Audg#fQ;2IR+vCXEm*0wzoV*@PIi3xMrEtd5BLv-&$B z#|Y}rrvyR>ECN#kqC5*TcvGmqlujTPUq7%60h9tefl&-Y{*?TF0hCf}Rlj^8@K-?r z?5nM{Y5@$80{|veYK^ESTY_y%fKb(6>CNllBBmgqN__RV_9oCs0l=pAE(7di;Uj$T zF95{P6CDD;8~}A+Q{qlaP5{jTL}+i$D)J=t>(2o9Kmw2ncK=Rr19)^zX;Q#{=&%P) zlr!Lj@SkckU?ALptA8N$PVpVU5GXz6AbbSmzLnnrj$UvT0@KHBaQpR0y0w7}l=}{M z>A)T!aC^Hpu?BGa^&Gv;fxnUMK%EdEa8b7Zz&L?*Uc{%fVUBI>R lCb$8mvWx%p9zFWw`UOH@62tfx@{j-k002ovPDHLkV1iZ9)vW*k diff --git a/graphics/pokemon/pumpkaboo/front.png b/graphics/pokemon/pumpkaboo/front.png deleted file mode 100644 index d55ed24ab8b504719dec2008610f6b7c9d6da705..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 586 zcmV-Q0=4~#P)9fKJO`Tegd6G;wuU4EzH#CAAnFq9U_Xfy~TS z;7es4d;>4dFwkaqu@!wHBKPFpci$w6j&qp9l9MpNaTe5D0D=}A=mjmf7Ag!V9bST~ ze|Bie%7FQq7OqI-et?g-=nHm_CH{2>z8?;k6n>h&O>T-RpLRTDARkZJMi0$y?gq%nGI+Bvw8F{Wym` Y-_yv9<(Tg~m;e9(07*qoM6N<$g0(;P1ONa4 diff --git a/graphics/pokemon/pumpkaboo/large/front.png b/graphics/pokemon/pumpkaboo/large/front.png deleted file mode 100644 index d3df6bca4b8d953114997a3bf0f2d9d2125fc2be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 607 zcmV-l0-*hgP)t;KBF#zw>`Vu+yI?Od5WG!I8Hf0f5(n0i<3FrnvM2Qu&8q z@|PJRK?b3liQvK%nHyl86QbN>5D@voVxoO$vhV=VFwGqDx>OkN@u5*My$RJlp#b?kAa$`pG1=Us8dj!OlVs1_+Ux0si+I@Di9eK zmVGpz?hPOiRTr(m0Tv^GQ^YYkfbqZp8IA`9;?M@n^Fs0r@A3gYJAkDWILY&CoW59o z5zh1eD60T%2g*es3!E(SrM7hlg4Qbmdj39h0p(0jwJzW69ZU~BB*2_@17k5AR*b`d tEK0M+meU{z65Sxovg!@7Id=Mo`T%1-nHJQVm{|Y-002ovPDHLkV1i7T^GE;y diff --git a/graphics/pokemon/pumpkaboo/small/front.png b/graphics/pokemon/pumpkaboo/small/front.png deleted file mode 100644 index 8f22eea38907007f7cd88b1b630f0e0ca0f04600..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 554 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|e_7YEDSN13DvH~h*#cJi6Kq2uG z*NBqf{Irtt#G+INcOMs^F$!g=MGD4xCWWm_9s-qcloa^617(bXYzD6eO?e>2lJ4m1 z$iT3%pZiZDE0Avx;1l9H^U@L^Q&N~MH(JlrM#@x6@XzU_?^{&=|Nr0Pq`g1i>wQHni ze0hECQw^(|8>PJY7&Ol{Rq^lOVi&l{=y1xJK`l^3!$i)1ZC^pw10Pdb{{5d9!%XDR1RCYb^O&X*_FS-#7iIpfHG?YG`}vF@3xolo!` zFt&Q`-@o?Fi>XEhe`dbgb||NLe_H#}wz*orv)=1<2;9xw7W+oK<@KrLlet3NzH_w? zUh87;n|bARx9|m3#-ycJR#kmw$WB;Oy0X^6@j#4t>$-b$9rkK3y>RvL-RH+RU7qi* zvAzB^>0(90!E(Q!uVeG3y<3`m`^-*!CjRR2*VsJj6QO{eYyfYX8^;IyCu+HQbH z{0Jb9Ou>&d=`(FW?2HfBC{jB>qn4)ZZD_!ErAb-min_9*5Mh?kvH}DcIJbkKZjYiS z1i1sa#~yHK(D74V0t|;0f^@YG?b{F@pscRf+XtFw_$~zK(5((k?5~y-Dn4GGOBE_d zhd|hd{Swu)B{&?G5S@e7^6eZ&6>+jdpjITb>rWF=C2%43{4t1TtD0w#!;a_$zpq$L zK*+cKv+>ZdALk<0t;PaaET``VU_3;Cy-5*EBXA+J3BV1C(gI9V1kgRrEI^)QJnYNY zBt>9u1U8(>*<VA16nM$fZ0G>q@{_)04>y45Cm2Ov}kClF?U?fy65}_o$3$u18AwS UkEkwci~s-t07*qoM6N<$f?P5FwEzGB diff --git a/graphics/pokemon/pupitar/front.png b/graphics/pokemon/pupitar/front.png deleted file mode 100644 index cc7fda7150e1edbd28e48a8f4d1b7385ac29bf92..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 509 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*B=WuI7Czk2nej$apS^` z7ZnqBtXQ$)$B!QyK+3Uz`4!7r85kHlJY5_^JUZV_Hmqtk;Aw4q|61;`MR9y72?Y)m{7i#p{{&?5YK+W4w?1) z>g%1HrZmXbyIUAeFyJ`Q>3r<*^{EY0T7=YRx9@OV%y3*Xor|$I+2KXt!voevH>Z1r z%!ui(k(?r=x8%fiMaR_)#%@d}dKrG31_&8Aum$birpdzSQ&9W!=C&^{ES$Lf*jA;@ zG_ZKNH|5ZV^RojQ7Crsn=ygRZK-YH8hevX%Vh;cIMwYTIGGaaXQQ;uN3ei=^E{I%e r{&o7K;T67_3-q#%xmGnzpSMc>_}A<%wHT)7ps4b6^>bP0l+XkKu$R@= diff --git a/graphics/pokemon/purrloin/front.png b/graphics/pokemon/purrloin/front.png deleted file mode 100644 index 0d329d15c920d849c9f031e401f6f8f398437e18..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 529 zcmV+s0`C2ZP)*V; zHdw^MmvWDwj<6S;aqQSCll}7Vf4iG=oJ0I6+>;YvMgw=V}iU)#jvvTuxZBcOC4RFJ@S$;M*d70G%@>$mc4WPx& zT5Nz4Ill~|noeWf(y|6KCZzEv?%*_FG3OiudDrgo+>^Go9JMT%)4v6HmT*_&`8VsGxB8;9$te*qE5OD6kR70009y zNklfSd|n>XFoYhOL&$@i1*^L>AWNYcF- z^86h@WHCgbP#sAv2Fp353$-NcBA}q7TnDC`_;JD4A$z;U9A4Uf3Auu&15RTcS_c^~ zRki_YMHB^qbVa`fWS2fvN?NnoG^$`$I3Q+_!FW^QdZPig)xQ8r3D({<7_bbVKUOMx zw`L(Nz*?-a+yux|y1KuY#ThFMWU$Th!NF7dX`cXSq#yw11ju7d5BE!8#H(f~<);1w zVEF)>^vinyONES(LMd(jWFaVyo>B^6I7&B@5kqYLdf1|euO4{-nJ;%UAXvy-KbSuQjk$e@7-eiK`fedbwQN zI@9W;FatUrl|$NF*S+c!ve8Sp*JoO-P^$a7Dyck;BWtef_DPQ*!Y*1-g>H(I@^x6%ecEKPh!A^`@W`sd3rA$ch1=h&!cp%4J*NINz z^#~~j0GW_oB&jG)tn%)V19FcDua@RTVx8;Bv2TvXgMj{k9$EZ>-moJNee>ja9I#-k z(DGU#Ns1DWm50LsfR0Px#1ZP1_K>z@;j|==^1poj5Fi=cXMVQc_uz(D19C}3 zK~zY`ebqm28c7rY@G*s_pvf34ifa-SJ^)%-DXuzcSFUY5+Lj7Px7G#5fTioq@&yj| z&Z$>kyGWB*f|XJt!$|oUQKY+1aF%@U&Ft(B@t=`w%)H;eH-8?O;Mig6rBr`So*pHK zDOPZ_OR2%3r?#oJ!NRz;370X`3MaoK&EK0#wC& zVHjRyq7TymoT|rh4UGVP^+F+p5vKqe+h8{o@RyihV4PO=NQoohoYzU|z=s4A_2_Wk zR$#y0;GUxZuQ!@LBnT9sQC$8+P90c2f?q!K6W47y`@!zym0sQ`E^h!hRTn|Ja$T1@ z3S=8BCrbsIRd>|-Rmu+@#BD$psRAI*Td9=&mZQNm$UrJJaNgZ)q`aCr8jzs@Wf_ou z1%Z@u6KTK!%pQSDx%sF8Y?IKLRe~NN_(#tEjbc>+K@?;O zI1Ux~Q{8mBj#bCNtUQN<)SwNQ)$O(QQ3nQGUCFfu?x52NJE0BU!t5wHk54oh&cm>G zVXo7F!zBLQ0$~QIPz?*SEzx&0@DvE!d4p%*z;g~VfN@MAwgL2#O5sQ0Q~|m&fWu=B zf&&Xg?Q;X5=hf4?h6ex^F}>?b3qVIAz#4q0fxMMLzDj6Wd>CtZ2w+^w)CRgdq~P3- zqIo!-ZvoOc(i>IV+wd|4=Nyl7M2#EjB$(~G1eGHB2p_T01Xh}U;unk zdjx8yjO}M&ug(;Ju?~s?1%OeDdebdHAOTY~juaS(GY#Ur1_}!VbgV!USVEXpvf3Et zmjIF^F7_!pea;))KV`Ku1SpcENI|FugNZl`$G14MT>k{R3gA6yK$crz-1*Yy4WIN1 zKo&L_Ew8)B@Uc}OcnT~MaV+o~Hk>S<02J$C6ZfX!B&$%~+NOE4dpVyOAT2P;fxKH~ zdF}fwzyM}7SlTTk%$DgFGh6=l^*(P(x{(on z6vr^SHakim^2+c(sW=89vhT%j4-eMopanDPF9`3_|_~UXAhg T-Y5w%00000NkvXXu0mjfj@`zC diff --git a/graphics/pokemon/quagsire/front.png b/graphics/pokemon/quagsire/front.png deleted file mode 100644 index 41b4ad26b3e70f96865adeb67edf624da708091d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 621 zcmV-z0+RiSP)Fp!`aSZHWih+uf2s1N|?KrjFR000004{}y&0005_ zNklL^>)?egPMG z%9~v;-mzl`i3;ha$Xc17Xa4iCj-vn1gp_Be{D6q769g0m5&0w$-`y8$BGeS13m0KB zM2tV2AM=S2@eO*L0A{UshX@a+05Z6I8}SRk94)lUA={4uN_zz`0f3Y#`Lhy0jR6Ue z!x)p&3BT+c!*)22w}(d(y$Zf~K|dt}F89Ne6Vbd-LuJ-gSSY(FOhi^{Tw$j{tX+cwpidVTfY49-x(;eZd#eI4`$_)#aRB%r*M~;n)8DGD-#Z{iP8^!FssSnn zbeGqcQPscce4YXztDo(06@c<1MVlk5+;J7ED4_+kkKpSG01Z>S067QP=ZN1dGC!Ft z0F;AUIm{5rIVa{m1M9TT?Tw;uh_nvBpz{zw&=-vUw{IA;rM=!-j42QbCAOlIR-GB_ zzEL!WvldWPMBnQOirYS=kg5@YVs-_m${hQHB_=uP|9TK00000NkvXX Hu0mjf1;-C* diff --git a/graphics/pokemon/question_mark/circled/front.png b/graphics/pokemon/question_mark/circled/front.png deleted file mode 100644 index 3056402db40adabac5a463995c694bdec359e5e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 397 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*Ewg;0-5;1*|TTYtXcE_ z|9_yeICobOAjMb`2mt|oEJ={|6P7}nZ)+$yZ7C;wLe_1WcN>s>Eq*PGXAsnHz&s= z7>nt%PWamtz-;#UYEdR!~X{G;Kp7JM4 PKq2bs>gTe~DWM4fhQyg8 diff --git a/graphics/pokemon/question_mark/double/front.png b/graphics/pokemon/question_mark/double/front.png deleted file mode 100644 index f23b08476d7b80a2d518d7bbfe8d39337e9c05c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 306 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ipSBC!#|Ns97@*pITfgh~g zVlW|5)h~ zwmNN1nC}hA{B!4a75@`=EPZ8sPidO(K5O=UEcZS)9zFE$8p}VSgRf@nf4_pe>AF++ TzSo}mAg_A5`njxgN@xNA$02mt diff --git a/graphics/pokemon/quilava/front.png b/graphics/pokemon/quilava/front.png deleted file mode 100644 index 65c45aedd235d390f444350dd9d0795fa0fdb45d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 599 zcmV-d0;v6oP)Px#Fi=cXMVQc_*Z=_dSOECY0Qi^yC}?OXKwvnCkPr|Mr~m-?`1r7xQ26Me;K*o* zU?31MIPKyl;Q#;u)k#D_R9J=WlEHGrAPht;K%fbj|Nq<~0X8-`p>=!dcu&cgeXLe2 z%cDpCRB+dS7octe;5PtD-SI0>`VRqb=YtGT##{p4uP99~{_6lA8ZH2>)u=`I2$1nP zfF70rf}a5Bq(KRwD&VpQb{D`XfC4@M`xq?<>H@U*2LQfY0CfyF^dWx)VEPFvT@vOL z3!LkKZ3BIP`fU@GVY-B72cWehfN3a$26bt`pmRtEIJYAUR{5p%>&!2}e7_2S=%R1)>j)VdiyEely$|KY|*&PB9ZY=;-cG*$wa@2zO6Mzu6A`<}huCcvF z$o{H~u+}o5Kup=>*`EpGx0bMB*vdR+=n)nefDT`;27u`HRJ!e;Ls(b*>Ie`5x+cPS z4U5fJS%4S$5Q1+Im5N!E1=zGP26j&~grx>KyV*Yn;G;wt5RFo lGayd2c1^fvfAr`(`T{b!89)<|iZK8H002ovPDHLkV1h&;0Ehqp diff --git a/graphics/pokemon/quilladin/front.png b/graphics/pokemon/quilladin/front.png deleted file mode 100644 index 4a6264fa475ebdd23b7c7ab11f229d277ed5a2e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 710 zcmV;%0y+JOP)Px#1ZP1_K>z@;j|==^1poj5Fi=cXMF6nqkSGB7SU3<65GWW3a6lj^PzaE~IADMv zNGK5KsDQY5Xt=nzNH{QHU|{(8_&|Mqg8%>k32;bRa{vGi!vFvd!vV){sAK>D0v}04 zK~zY`?b0!8+dvct@GA-$OYN~+Rmd!IIJRsP53L8!;)c*AgdhzaI>hJ<9Tk%EtQ7pn z=yvFN3<<=7X2?`X@&WP<3f?ky={rdzI{TCk?U*+h>E2KOck+om*FV;a+F$zhw@-t* zY7a?R1ehEsc$U-k24d)Lt>SdOzEltCEjfKX?h2jm@sO$7tacU^r?8zJXG z-`!)){mmVl^HIFCX{*UO@B2g6Y&0Xp!X*YVWDQ1{qALNp7_u+h%*VbVAQyecm>-%0 zvUgLUeI9aQOtAUKuNWZZxe&q>VMp^RW1UpaT4oS_zL_`tAGdRfz%(QL)NMD~-QJy? zR)Jo7Dtnc{jxM*_a<)}~*a$jLgY^EjoZbJvlcxv{cUHlN`Wq=PZ{%5mfJdv~L;)$! z0KpOG%Mk&G3&8$2fK~>UB7%r}X*!qR(+dUEnQIaF5godu;M3I4pxu9bqTU zO8wImKdVR!h(`GCN}N*c3lC?EN;8nF^_Wtsp2w?1-$ck`$U8;htqx*O2f|BQ`;UDq z@gT`&4;}y{-s6c{0N`3eOvGR!#*=KuPgs<|6}=*)C15guF=T+!E-e9D*ylh07*qoM6N<$g3JCgr2qf` diff --git a/graphics/pokemon/qwilfish/front.png b/graphics/pokemon/qwilfish/front.png deleted file mode 100644 index 6fd19c1346fb4ebbfaf77cb1d12f956811ba3a4d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 537 zcmV+!0_OdRP)- z#crH~sh#W*5?0|e_)6(wAIEB&Kyk|v z#3FE2AQm86Dj>YT3lu%d0s;tB-vJNA4iI>|00 diff --git a/graphics/pokemon/raichu/front.png b/graphics/pokemon/raichu/front.png deleted file mode 100644 index 3b50a2318422a2a7ae6e515085215e694581bde7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 805 zcmV+=1KRwFP)Px#Fi=cXMVQc_S}7@uVh{iT0CPbx|GfZ|K|%lCTK23d-g`0s?$y0oF})ZF|J7Pz zVrn@#LBPDADgXciqe(SG4j-TX+Kj=k{^qb!NpkG9P2EY-2rw7eR;|}5sNNTfkK=U;2D4lI9Whc!a#Wq{VdCE#09DS`q36hLBz3<9P4n;tN-V4U;Ow<*Z`Avc|1YysUW*SFG# zm@&gzU049gAUvN>AkKn^_%H*UEkMd$0MDd%P61}H1O%WKu(Ve;5p^9^uYffK03(xo zL|B=CYYV{OYZrLHx&~{~G91-Qa%cbsV`yfv_pFz4MjUQ1xGI4MRSSWmB?Oy3nn4Ca zIHCXuPJqmb!yV3KKu{aG$Uph|PQayD=nP~)v>yO0r33&! z0I*&FFO4BVq={fpfRL+bSt}dl>$ML6>W_F)THga=X+z!?X@9+Eb1V}=y&nw$u@->_ zgz}qgB8>%GYS>osH6zI7Dger!(9PvJfLHT7pr1+mq^BhHvRg{SLsP?V0J1A?8|xq( z@&J47-aZ2;Ax5wvk z?HnN8$g%MZ7{cvG2S6sA9u?9l{dW8K7;!qN<2QhX&y--g*}^;~-hcXen`~e>ub-a2 j49V;70m~OF;Gc^>4ACUF>6uU600000NkvXXu0mjfo-knh diff --git a/graphics/pokemon/raikou/front.png b/graphics/pokemon/raikou/front.png deleted file mode 100644 index b729a2c3758fd8ee464e87072d00c51a0e640148..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 968 zcmV;(12_DMP)LP$+2l`1qippb!uc(9qDB(D=Xr0Qks2(3mKQU=aA|kXTq?Om(ku000A1 zNkl}SZEkvGAXFZGdWZ2W%j|NiekMndT4Jf?Z< zS7MOox^4H$b;G%GYWmxWZQC8c1k^7a=kgn19|igaP*K3EgZao{#Gy>}ohYEQ4`7!B zgbiI+0Tl&Q-|Wr64UaO?(7=h^0fE>1GcXx7286hSngY%%ovLmBwl`yVEpxf+qHL%N;SkxQR;icm^znUt9 z4ouM|n?<(ad^#ZSKP(AxJX@c0vzXAF7ZVaXpy|gjnLAzu^cB(jT?4TOj4<&SNfH`d zc&Z9Eb~!YY!YWPFiR+H*^>omX!?^~+!bCG+&14=px9*wj=?T00Y=-l~0~rmHWaPT; zL=x5ok=J$w03#V{6PWRlJ4|BN^`u<4mOz|$JIdS~7bXnOtTAQoU?T5VWJTYB#w(a^ z#Hd*S4r9TTF{lec$eO-0tK&!mVXWh<`+5D6=TZtG)-6FOo20y^03$Zy0*Eg8ObLhu z0B1sE1%P86H%8CER;*ep0^n*qQ0)*=kyXyeoad@tv=(QgB^ILrB#j|Iv;(*T$UP7% zfW+M>^g(_2UBTjfCWvUcZ-D?4!*C8ehDlrir<(`>5YPBl+yN*UPMSVu;cf)pfW!O)I~A+)7V;4Q!-{57B`Hcd{POe!BdkANF2CUH z;l2d?`}FiEe8R1WAT5N0000xNtCdK(O$Th~S9G$l#ce!0_<+c!;ooC`kBtkkCkQOs`-e0003< zNklbW-Y0`&`HWkC_VCd?AxevhdQoew3 z?Q-7Yz(UH05{PcRTTM*g!tnp)&$~MzPV+x!IvGCBl*t``-V0|Y7aWlD3w+v23y{+s zS5_b~&o>+pmr`Ek-E1cem`NG*;LQU1JWse^Z2SSdsE6_VY~>FtBx=oo`}1HZD6C*t zD2&HJmOTggPGyKVzGa%dW=g4)2WfJn3gp2u#wB8mEO4)X0dorBLJ4V%YZx!+01-U` z+;X`P;ofMXlFfx1eHvZz1-&rr0zaa*#=@&BYeCyowiUhB7^(blyaVe?Y%LwZsb7+BG}18U!2 zRU(8FD)6Ozc|$_=rohlo$Gf_;U|>5CP5E+i^Ey^4xCKAVz&=pEHHvqCpWK`(TcV4} zF}cpw)vSp>gy5r}{d`i1z&Vt0-vTLT07QzTGa=qgbbd-D&Sh+Os?9(TA~4uF6R0V2 z)vHlnJtv^5yc$4MAn(NAMtUlmeMH+zO_3lQf-Z3HT)xoLfZj3U$lmUusv=Ay#62aC zW}rxs;st?bmG41%!?CFj^c-L|1FQlAC?~m5YFOd_plWJLIBXi4;3h@4Nk-}xjzH8O@OX8AF`0+xJ&Ev+#?`4 zW@a|OVfJV7HGvGNJ00b}o{4iMdsxna8|jQ?4AQFoD3@_Fy-4l=$K@EX5SRtI&gFMI z*HLlE{{@cAXd?(BeWZu_?LPCK>=q+l1`Drgm^zWZ(1yUyyX!VCgZdzKy2JP)(r@KE znwku`SttN1a8oAZNEe-kF0&Pooxb8m{}xB%aWu?D)<6BV%Y_))M*slbQYkE(X;*pG#1WmwJ+M7k~=@&{J-@kYoTi&z&J-yul zVlRPp6^un$K8;x$3uLD~<-$bo-VEaj{(fZhfn2LL! c@_!uv04#O)wr51PQ~&?~07*qoM6N<$g4t5j?EnA( diff --git a/graphics/pokemon/rapidash/front.png b/graphics/pokemon/rapidash/front.png deleted file mode 100644 index d0fb296f50a22ab2cdfb6c369e74e346cfd49742..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1012 zcmVPx#Fi=cXMVQc_|C|`+VkzDb5dYp%i&8QF=EV>Y5XF>g?!}9!NI=EK#sB~R_@J0` zdxJqrQipzA2LJ#Aa!Eu%R9JV4K-8ZFbi2JqRIP z*bw$3hW{JMe`XoKk*BDiza=CYFM&jn3nU-EoC)BC5mP?BoI;uiDM2kmKTnMNMUm=b zByvbRg?tYv6o^E{g%iZd)|@=2@}c_cJWye(loA#B5I|M}{$Vl5Y?REVn;1k{<&9bz zixj)40OU0$q{SXy16X1}0PjZ7CMBeoWkfhRKa~bGiCzFo$eMB}#A^NzT`eFI5FID6XgL3)~Tl<6_@(#$@$2FOAT}7gNHMI?Pj<1SqvS3hj6J*=w^F7uyC-gdM56>E<+#f?0Qs%NV3|Z_@ex;>z)PG zZwM!|?Erj9!EQ!@JHQFY5JnZC-@&mYIo$O^I4@$@j9LR|HF2#Sz+zClrwt*UJPCxH zWpj@JC2#&GAj-U8JBlLp|Gs{p$* zUERGt3jkVJ6zvF9fKA7^L*8GyKQh*-^ehkj`S4m1s(<)fW7%(4f2>$@D3n@HyKQ6KW0000Px#Fi=cXMVQc_lu{7IgHr#^oDdKYYB>PKlsTkxDc-b7w6wJU|NnzpDfafH?#**^ zb91DFG4J8K(*OVhOi4sRR9J=Wmf>!LFbsrAxFkRtc>lNE*$JU*1Eo}&CT*5F^+)gX z`8-0p?!W$4nOqmu*4RGRH3ZdG+6%>AK$t2rrYGcW!hKIc*sDpbe)=At5&BLxRsCAiM{XMnY5LU8i&&U@EzU|s{L3r@WOw>q%mJ0utrZG@~$}5yZ9crf)xsF%p1jnnq-TMvzck^F4xN01F8-2|)Fb zMO1qNELQyvfMYBeX8|B(54oq@X)NSrwgOs&oC4-~99IhrAS!?lI*&3#0Q5X-#>j@q z7RF+Mp=1Pk(pW)qoVFcsyK#ZWIIk8WxY{V2)w2|G*XrfI*M2L;6qzGO80Q*eDsf1j zkS=m9K>N)e6Y?U2uPx#Fi=cXMVQc_i%N^MbG_A+)k-Nr5D*Z}tYYrow9U=Uq;m-7T66#Z|D+f>VoC^F zT3P@A097xS%m4rZj!8s8R9J=WmBDhuAPhtSOTwx{|NnEl5>8_G;HWUulXb}06ZWx4 zLQd(9JMM@^wwTeEWhrGGks*fzAO-=nEKnC3CQyL`s6n7nLa`K39w%58h!_MOBP2$+ zm6>WLCyZKn5oRsqc?+|E{4aphy*XdR5a84=b`1`M5WpIbQ=b8-yySx@2LL2ujqfu6 zWfQ!Ug29ud$UAJ#{+X4PrZ~|WgR8TZA!MgcEcD=Ue;o#*GU{!Cv zWKUKHv{!mWuK_MRuHfT1v48b%Q`sx}C&e$lR<1K20^}^xIG2by`5kxM5sx3=W(mc} SZQW`B0000t7o;w7FyODDmeI$0e z|Nnq9;wORDQ){PNr$b28ItMuqP6D2_)5S@h^#i3_{l>sy?W?_Rx}fyHh#J#gxd#jf zb2lQrv1}KE$JGvSY(z}CuCsO(4yQHXVB$i=IrMa3as9Lg3`FMwJZ|w1I#DM6FEwCQ z^ZU1)fR3J{5(hOPHh-5DmrqAeQhV_z-2z>Jzo4q#5U~HkNWW$z zb(BNa|I(FbV0?UB)JY=47^o<@tB$w-T|Ad-J`C%+@ls}H8FvAEkTc+f-w9~H9^!KQ zzA1BK0RS2&)ZCWK^wA{2lb?(SiG5vTL{c5L#{#snbbafZPja1z)7ly7NZPa$&mhc%vG z)Z4XZF$emDxTG%8+W{uvdvzS`^7=C2APrtoHs9_oW;x!<-d8R>ANjpB;M8gIy+!dW z=19ai8Ti-{qN;x91zG&Lw=f>=XispgOT-R9QShRAtpm)we-Vp#Lop=bzs>d|q0SkzIx{Dkb0S@)T!(Q!r z7%G4+Q7LsUf&+jV@*d=BdMtH5zGDAzv2xl#5Qfjd&@UK~q%x9?)ryrxl1ethNsI7;OB)%H))2U~j*|?}K$(>~ft z0sd%tA_t`mKq075z>TPYxm)KJ;E6nijUAv!)O8e4LUi+$snbYXn02Dpzn*}m?1G!l zS7$_T{;UA}ARR~vo?K5_s>SbMsJZMAX0bs-je*)@>L@fctIn)Pm z$Zc2y7Tjm-x%N1=6i`UzMKMsorKuX0 z?Bh%Xm+XF-0KuNT7}db^3%bs|c`002ovPDHLkV1lGSnyml; diff --git a/graphics/pokemon/regigigas/front.png b/graphics/pokemon/regigigas/front.png deleted file mode 100644 index 7cb87a1ccf84c0edce841872b40978a9c2f01656..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1198 zcmV;f1X25mP)`8beZ zh*Uq82B>MS9Q#KRkc$C2-nCf9vHZ;2<{6}oB`kg>IoiXpghTm0k2GfQY3_c%z$)4tYd#i{5%2l zaC;#z_@~dLUE)`S2qHb%SINO|fA{NPvi;NdhwK-ENRBl-5de3gTSoUls2k{j0oW1< z5t}u6M*`~I$29FD8&cP^(2Dk`b$NpHoW&Yk79v3zrFmX5!V**23c-0#cevkjBmjMY zHZS|jVUqwD4bM1NRcMwi97tg5Dj{^$u^@LpWgfJizZr0qQB#F7KqV8p-{UB|8TgeK zuluP@c6s&s@{7V_I2yW;KsntxbM~|Oz;~Yia0tNpb$1Y6K}uI;A5CF-}NJJ4(IO3so30%wVBH}B_j+g*un!{Mu{7_ao0AN%G z;LRj~7?!&M?>H#D7)!y?z!zmwTs)W7Vt{29|Bjxa{N{~r(8jyh9IAhMlS;9 z0KmhWbJc{3v2t!no`*I}hxpHqfG6^}*iD1mja+e&^CKpwLk#Uk$roqNa(EQ}wZKeK z@hw?<&JSS)5je|7tP)JlThfC6Y}SLUin3@~)(~zTW0gRei$!o?O^&D~c-L--*emxz zo3Yk(ip?4gJC;DPFIr5@0e?Wk81P6|=*P)dl3iH$VoNM+h|>*`nF9Sj8=kJu0k^&u zr}#9pJN~RbWC8}}QfTh!2E3n>In_r3e}dzHe1CCfJhX*3VC4SX5=qbVBr#rN0b>|& zcW1zMq_0nTP0q;7fLb+LV>}0bQd|IL+gPYpLw#Zk-fa!L^FSt(k;r1bjQ2cu8_$>WM${H+mSPp(4ZPR*A0Za^Y~G+#g8%>k M07*qoM6N<$f|ZLZ$^ZZW diff --git a/graphics/pokemon/regirock/front.png b/graphics/pokemon/regirock/front.png deleted file mode 100644 index 4ba1f41d8005d14bd317c6f117e05b737596ecc9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1049 zcmV+!1m^pRP)OjxP^eF$YCJW?;Tp#}g7)U9j!fLS-r@x=0<@Ec#x4B%-5I8%(*q3NI7Z<%Cmk)V1@3NO} ze_x_|?z%6ulv-wU#;)881R4@h0|3iU|19(D%dzv!b+OQfM2o#~{~SDg`U_I%<5$nz zK4U>sqRWC#Z>Zy3%Scbo+!f$&flF`Th08o%=C`AJ3K^I)*Z~0N@k0)u@_RAwbg)x= zuuTyJ*rlop0RF~l_B=1xnmh?SXfv+c8gQ_P24Dn(e`}xwK)l8bJAg@t<2oLIh3Zx{ zG%S$e?Jyc+c=@d(#2RR{+Ezmujmz&JJ6(3ERKhNy$mYQ|_$f?Uj3E>OMNhooN;MS1 z836KKxdsx0Qd=ckk21D*0L##`h4LGKoB%Lh1F2=kS;3Qr1@50B@C^Y0p{Bek#MXnY zCn-gs{K%L{F;s9)twsi0S*H

    4iWGaBrl=#)FwhKKMf5QKdBy%6Pi*aO6`33GJ_C zxll?dj=h!g{RX&;N}5_kWM4~2P+34=w)Sw8kIP5stEti(bRZBgV(qUL?q-l1eJOzk zYJgDRUiDf@aQ6r|&5lqT1?ax2fupK^1X`Y`Y7o@}U(ed}Dgn-*#KF8lAS-}Dxet^U z3#%$Y0RXaQ&l{+;C>Av!W4KH(!$_+N2m#;%?zROq!n^|l-5f<)Ps_(NG4)BU5Ndo4 znGrMu0b``Keg^|I^#p-z4&M;~0us{39nK+a8m0j4TLHGNFL37xMIk-4U|3NdNDPd?J=8o^77A)`UjbUI0JLqS z9J*|^H^68G5TR$hI+)O7N(`ZOs;*BAQXtn&dU~3i4(5i6Cfs$prH$l?oB zS%dB2K122_Fa^m&<1J&wcjcz#iuPM!l{t*r3S+Ou z^A58ttIj!le-Pvctl_$D`RbMr4hfYr8{;GHd7KXpCNRF2bb8Gc4WP>F#hoGqaixZ%e5K|sR~hk;qk?oxSZ$Qo17zPc6ny-WgL7RI;v z!|(YkAn#R$aXp_sr(oI-v5w3d5@eR}`*_I!HRJ@6HYEVOzy@dn0Xv~K-70||^aX5z zkN~xr05}5xXH%rs7ggb$$RY>?d%zS^ac`|a0AK*TWH+h=JqU6Ve4)4lwh?Ey8i5HZ zpyVci9cOo11E_-|pZ6k(cl9lx*l=b_FkZ+wfyLJ2wu_EwMD93_>lBA$rLzt6_{?FQ z7zcF-U1bNnbm9g$#v0)Iooo@yI9}8WAOThhMM{|g%gDu&)Ka%2fjn$ku*B+VTeK7y zbhG2G!BTdIe`!t!+ekqZ?o%O!Mo4gNgNleq;FP!|>^SOIPPJin#{ zDsB+o9#NN0(OrY`GjM4Ymx!mqb|eXtYWmMO*&b>iG8XYs%~Yd-ReJx&5zatFi6ITk(Hx Z`~^HPa_UXBDD(gT002ovPDHLkV1k&1nvk#J~u0007U zNkll&H6vyqsS(q?Is#F&4lp#tNIJqivhkgVHbY2i6hYBB{^3aK?Yfy@= z5>gi!Jk=n)I9bS;Y?TsG$=$o;GxR+hwVVMnbgO!Um-oB>|Nq{zt!e-2DITfo^ld(1 z)}9>!N>;u@m6eYGwS0x%5P@zUFtoH2&&dOvJmAD*9}&390i>h#JSn~$0wi4SNhuF# z000i}0XRL7QKk-if#@p&SE;}y-D#w7?;!Bm?|Gw!ytH?K>sv=FJj!>U8nR9SSndGK zDa;?`T8TSrbwbV_gve}c&X{EqLa_rvZbTN) z0bmxbGXNNHp%99N{sQW?w!J_L@UTNwKsOgq@5DDT3S1HzWgIHkl(9}6$Llns9jOlb z-J2CFZ|VS?4}=O-g8LN<;`ql;1PFO0)F$+ol@(E?>x~BheHW+fY!6CrvLLP3EzzICRbO4T5wKDUkZ=Y= zc75TiKy6rVF&kz{+!;69Cba@;Z(Q%yN7wty}ILe9DIAZCunGrKZy z5dohQ_@Fzp{+=Hg5Ox%pWSIcjT_;343V0Jgc;h>I>>>Dt*0xiC@2PJfeDZ_!|L3pH YFFDx__#FZT!~g&Q07*qoM6N<$f{yt(e*gdg diff --git a/graphics/pokemon/remoraid/front.png b/graphics/pokemon/remoraid/front.png deleted file mode 100644 index 8cf4b866415b743d92a6bfc73dab67388a92017e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 568 zcmV-80>}M{P)KlRZnrKp4l*P8qr+6-%AUff{s*8H75i zfqsGumO8i?l)99Nj}(Vi(6qh`9TY=wPz2jUM~k9^2pvQxCms4-yrd#EcWoEl`X3(1 z{eO90@>~!aXrMpPkj$Scoe!~T&X3G@CYVn0z(U7aY;2ha0Au#5g1Z76M!H;@0o%tk zlW#k27)E-_0kD${IN^X{=F0$iD99>`CERd{p$)^BbK}4e8JF~g_Z05n<~?0+R2cx8 zqH10vTtPbf+^<&x01CC)+a<1tqt-`awMucapZ+QhDu7q0%fC6iB z`{fj5tVVgD+TiXF(S<6D=k@+clfvgO-t#*}1U1tf#na}S#0J6`Ml#b*`#uFxB zz*9usnQB<1E8uT2dP}T(F@O#h{n%VNe&8-dTf29Dd^KISTaBV0qh`hxkNK@AS?dj; zrg`u6^3f~Fc4_jb2H}6LUwR{gYa1f^0I1my5Zvp5{#Rclz>x8&0s?{n0000xF%?J782VggKx`POuIyCKfp)&?gFLFRW4p+Y8wg(kI}0Ogv@#|LsY zSK^`dPMXRHk%6Qp*Fve*n^=+AJwU#l`gV+#HXj$O&i?q#RiQ z3^~7#0QhV|B@&TjoQ&Ja01R{u8acW!4>^(mWIO!!%;J*fsXcslJ~a^y5s}Cfs?j{( z;4^)%rb&8i!Z#yMga88}jq{)TD#N=@INfMbOHFh4nsBcc-$U+BYd0{U2= z0DtHy5A{8yW-Wob)I+bAI8gHJ1KOrpZQtpg9yB$3oDorH?L_#ERt`#Wxr|p0gXhd z!s?+4GzGEwc^5|^4y5xARLd?8*CUAVcxh7>m+^@FRX{%kw57x~fElj+jB;kKXYf`! z)%b|Lu7PyxHhk0k2f!>ZL;K^i*Kn@EIFSc{N?g%ka==lRK2rC6dJ&J6tn#oo8Sixu z7e8sV4V?`Cja*9o7MDfLGT~X$q&Ot<>OFjd1~RDI__D@HOxb{wSDic&#+d($Uz~pd XPQxQs!HCts00000NkvXXu0mjfNEGTs diff --git a/graphics/pokemon/reuniclus/front.png b/graphics/pokemon/reuniclus/front.png deleted file mode 100644 index d189c0bf4002b433052e5954d3e187790c7d7ffa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 720 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 diff --git a/graphics/pokemon/rotom/front.png b/graphics/pokemon/rotom/front.png deleted file mode 100644 index f6141a7097e2c4ca822cc8847810b2def68c1425..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 457 zcmV;)0XF`LP)d~?K>KMPfAkk#;Ns>{J#4lM?-=y8R@5TdEUI&2 zzamFN5diNnF9PIrsUv%4DUkJdUIcg#4D17jI?EGI0_+g(E#zDp$eAT@ZvpdGfVEx; zdl%(>+G(BH(J65K-Rc;itedfOPr;vDax?|(YSVWAfYS?&-hl+r4<03Ba?^({5DTdw zca!QZX69LQl$c;@PDIRSSwhqus)aQ_*GcOa5qCtzSR$wf00000NkvXXu0mjfxr)Ve diff --git a/graphics/pokemon/rotom/frost/front.png b/graphics/pokemon/rotom/frost/front.png deleted file mode 100644 index d94fd9376bb13d38e6bf56b5f1f01ddf15108e82..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 691 zcmV;k0!;mhP) zBCgD&N;U>*tsf>})F3thBp8$W1ZaHId{yIl2H$+ zY@sxUg@B*LIpzC7QXpW8az2bsa_y*}2ND;+R`oNbpHbu*ilu=A5b>_Mf2kpV|B~Vm zFpUQi{!pa=UY`Iw{z;(>09%Fi4Zv30*8_mlZvIP~$N4#e z0&;I@*_yY%_7Z@I5Ln&Vz4c4s0n9*v1u(=2@XtXO37=mHs3D$!1iJY=0`|p?;z;WN ztzy`*GvJ&D*fnejTjR)0d88TkFa`m?({La-N1$;X{A2cjo>IbM0x*>++fAJ!ICKDq zz~$lu8U#fT!cOD=2x~A`9_MmZoH}x#=2cftI z!iky#bWl3+Ne$m1SBLYWvl&p8?kCld(4jsDu-|r9Rdolpmlx{z)tLwR{{u4*u*xOC z);jI-{T+7x7^S}_@w&`)GP$zhh?fWLBY~TA`c;6-c=QIVnePhYY6v;|S>Z!0fBSA7 Z{{X)XEU*JJ2KWE~002ovPDHLkV1nh3FlGP% diff --git a/graphics/pokemon/rotom/heat/front.png b/graphics/pokemon/rotom/heat/front.png deleted file mode 100644 index 59878b8bb889d26c7e471cd6d39b13d1a3ab08b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 644 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 diff --git a/graphics/pokemon/samurott/front.png b/graphics/pokemon/samurott/front.png deleted file mode 100644 index ceef8bab9da288484d2db4c46e647b0604d711e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 992 zcmV<610Vc}P)-000AP zNklB2SBW`qhE)FRLIR7m?6X&llFoTs{%l=GYy;^4SXY( z#DzSoJV;MDZSf>A!iT@l*aZj>YrBMsOaXdF$-oGb0oHv&Xq&c*y+b93;;W0!-ET>f z^gT*x{h8Zi2Wpm(QZX4M31gn;f}63M1urHi>p$7p#u4aLF^=B(YuEk`;-|2<-Orcpw_lLtF=0QAF z5iJG$723{#OAIkFngwEQB?UOvXZ$%JPBnQYX+EFzj{#XBo|>=tmyjWHg3IJ}AFCbP zFOLBspfDrvkm^Pi1dTATd3cn18SH2J?02@~#qGWqAP1JxEY`}~R4cJ<( zZd@8l67?2`7Wo+fTS=t^paKMeY=5TEw8<7UKO&QVfU2Gkz;JjeXbwOnu5b8u29yxS z7Q>AR5?dsT<)YpQd8)JUgA z^W9asthrscs|<%B!qkKFb&OqgK(YAT?Pi|wisDDBuw`aRH4RES(fkKa-=N_1CyVR= O0000k44ofy`glX(f`7zFr)xX!q+ zpu5;mK|$f(-sT`n0U$U!C(6;$Ys;3sK|x7pi>rYOk%8OWf(oEHah@)YArY-_r`*nC zGURc&-uL#vzyIvz$2eI6rd|kps@a^d^Ua(d{YMttK;U1bQvIgYQm3lHbczLWyn=)PgI>V1p;h2FdlUqv4*az62BfoExX8SDG&4X>FQ zB4e7&=J<#t6gRMB3)tv$a<%#0e{01q(S6)gA%^`yqk__Xp6{Ft+)mZ&9S-HO#FRW$ zSL}CDb+M36_-U!kP;ic6PS~%{9wze|-2`)!|HpK}(3Z2b=f$^m@~2}AkN->j z@$+kR!{KN}<_EpMKYYFYX+?#J{HdQC?a#;lN)2JNxzHUrcu@xo?Y>yZM4b N-qY33Wt~$(69D~0&8PqX diff --git a/graphics/pokemon/sandshrew/front.png b/graphics/pokemon/sandshrew/front.png deleted file mode 100644 index a3a6ea88f65adce03e2650c87627521f1c334c23..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 582 zcmV-M0=fN(P)Px#Fi=cXMVQc_gJKZw-Vn{bv=9&w&9nfpfDq{D$PhSq`1trJc*yA3$bf)=$jHcZ zN*DkD08p}U+W-Io#7RU!R9J=WmBDTUAq+$@jA04n|9`h0gW6O*>^iyhuvVp1Rp(*G zgOk!-cir`mOXNd+&O(Z8P?#sh2u8{LNc;^^fJ&|`BJ8Jz0ix;+XsxQ!Gzdtd*#Sy~ zv^N0R4p#3%Nq9r=r<)H3&>C-G>xp;|fMWv`sBaK(blPwFqXPs4=V*ZH4jACD7HYHy z!DBmcJPwrjC8Qn8fp!4JQWbBZ(Ex3&jZ)yD4gtXMQSN&2QPzl$sAyYWVDBoLCYXB| z>v;IPiUNG_W4K&&H}FF^-7gHEMUVpkJk<4dl9JDwf$sp&fKCJQYGAv_znt9$iYX{# z*vEQJRdxp=e4wXx0FC+~UDkC(%?t?FBd>D?5NZYs(+-9&7Zs@O3A%CGfY~HvEP`2C zeGUfo+vtS`xQjQyvQYPCtKP|l3;05^8Ek!#yrS$aTyY@zcfukR2Yhd~dhuB@2#moh zW^uhITuro1?S&v7LpBdi=YpO&;J)JOWe?)vxj1+|+F U=X<^-%m4rY07*qoM6N<$f_W|kkN^Mx diff --git a/graphics/pokemon/sandslash/front.png b/graphics/pokemon/sandslash/front.png deleted file mode 100644 index bbbf311b5e0ff2f0ea202578bbbd907c45846469..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 792 zcmV+z1LypSP)Px#Fi=cXMVQc_N;wd$gE0^g5R`iWi((kntRPxS0QS`&|NsAsi;LdXw8+TNFfd3` zQc?f_0Q1@1D*yljmPtfGR9J=Wmfd!%AP`1Pz7dpA-v4pW{DG1xvB}N32+P`(<=)H; zgUvL3$9J5J+wT4rf4}J++YFDt@FL(l3t;&DzOxMnnP8rb0skm|RX~A(nFUY^e8m{w z5(vZh7?uTp;X}YY-%$m^yWmnCU4R9%@ce;C5W&Sdnt(A0gLzqBKHqS$4CDbQ)dHAp z8+1cnWI-N)32Fe&&k(ux)VYRt;SO7tSRfe*W(5%*FSdjNv&vB*$2A)XXf|4686>eR zkwMb^d*)}2WyrgL;-dA_l2(2j;{X;8otzI9)5%iVJsbQ69|0Q~&W6VE$RlR2+}7eOjOmVuVcaCEjaft6r+ z$lx-1V*~w04(gDa0M?R~pD*#m)vGw)%mA%wk00|Sr!lST>bxm@V`HnqX&=eyVS`6s z+~7P5te{fOW4;swKfrtwG z69jqELTic`E#KJlTs~~Pg~0EqoTEyx9Zp|{cH3|K>aVe>2~e_3iv-*8_I36F7%x?* zn-r}GMdl?yO$2tlcX4_E!so2KPsPv+)}%qlN_TuQp4Z-bgsYUAAyq+$;eclW=g{|; zRM|twDoCLhbWcP0zOD4Z;)0Za37#J3H_>z;2&Jf?G~NZjPQ$_R@SQ59WKOU)NRSR1 zypVQAI6}xA1Bm>u!8^Uf?cbXMERe5TQ2sS6JO{ly6|nDWlSI)Uz*AoGhKIaOKez9I z&(@T*&$os2(g0cBMmH_hm+L|ZhjoUWYq?(X=iV&Iy)T$P7kEc}62gaq)>7Z`zm0#B WN+g4LY?f;P00004)W2?ujOlg1O!J;eBr!f39a>;)X|%P_W2~-`$6!=nJp47yxk4z9_P2 z8n=4@lHX|+^gFsPL7s7!>fw~1+~%U%qHp$K2)P8u^im&j_p2x>EwH8cEM(;QuZ%}w zIAz>1L{ThTU_vI=&i=eepBO(52P{Ik$VFNOZ9|o}0Qj`aBZNNuG?w6%eRw1uMK0)5 z#^cK_hn2x;Udd=tPl6fp1mhPhmcS7C5*R{=!drk0K!i%L%-Amg7{WmqK+Js!M0KJ{ zKA+F?1%M1W1mqQ|arc~|$O!R>N)RtVu9IBh0WP$p@RDlbs(((Q3vHZ>?|)*V;%T+ z58sM!wyD-Yi>k)5E2XwZS~bwuNV`>ur7CSi^i4um7q}`Y-CBR?$6rp84yu7t>8$_& N002ovPDHLkV1jE3Y)JqB diff --git a/graphics/pokemon/sawsbuck/front.png b/graphics/pokemon/sawsbuck/front.png deleted file mode 100644 index 71aed05e3793945e555329916397fa3bf6f51d38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 728 zcmV;}0w?{6P)&c&rKEDOgA>7{J}EPHbQ$tNg`T!Qgbvvw#>LTT9|5`q z=XvjJAS93gk0R;F;)1Rs^#NvA6;=3f`vL|zsW-pDJuS1}X-i;M!+ zBc%a=>@CYA!)rM}DHS9dxO<%;1&cEANa^r3P`uJtf48N3rN$~St-#$I?6`=_^{&w% z_e~Dtk;idV&M{W&A z{=Uer8fsv24|ag3>MIHh*lbofM*Be4)j+=40%8wfowPgCz)E&}C~QEMYCy^?lMq_~ zo~2D~jU)4H09uHdw*Hke9;bF-s&}A+qBpbV5Ijcj4z5Axx&r8~a6Y#HO%$dNfU*GZ zQNT^)8&L)14}j%NH9&v>jtvXY*x<8w2&@orM;1U~UIXB}B8QgG&>e{;Iv;C^+m3ZN zMPM$Df8yMB?wZ5eoeT2;(?BZBjTOM$e7e=iW4rR7@Nd9Q_rC#U%oa4Y%en~w0000< KMNUMnLSTYa@<`|a diff --git a/graphics/pokemon/scatterbug/front.png b/graphics/pokemon/scatterbug/front.png deleted file mode 100644 index 0a8f680cac85b8b56d3e2af68e6ee87f17abb11b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 428 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*BKWU6ciKyc|U&q*s)`W zf`URsKtM%BMSzFKg98;30s;_mpaKY3EIaWf0|TSEr;B5VN9Wr~8~s`w1lrO&rM&m< zWj}B8cRbm*p5-bthy17F!?|X;+s{v4!tm{fNouB5<}2L> z?sdYkoI(+d)2AMr#B#^~b7uA#PtO_WS1zgIW(bQ|*v4?dN!q>9d+z7;pP7p%BrNKi Relrggn4YeFF6*2UngCbqw7~!X diff --git a/graphics/pokemon/sceptile/front.png b/graphics/pokemon/sceptile/front.png deleted file mode 100644 index f49aef7653b9e032b84a877c288dd317a5b49ceb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 936 zcmV;Z16TZsP)A{5XhJa=-@!WARy>SIB-}fD1b0Xs7M%KC;$KeQpwrn0009s zNklvkEn-k=^#TVh zG#mil5BT!}0OtJ}PLv;#eqeq&2pllyP@F*A3pnf`x?T*F5Qnp$H$VChVPN{RJFtg< zm;q%`FEEQGr3=IkV5Q4-p>;G1Y7_lM1u!zmrhkjW&4d9VXm9bxn zs~)c)d6O~5A2RHfx!;aaijQDQekF<)dB#O61NdM043U#S&=N}mIkCSZ2)LQYcgKotKCUW zC?vxS21CD%j?6<&103bYUfB2^JQX6C%6Y5J4udeIGTHxvnZl;EXtK&DC;bm{H?xk5>JmKnyD>^(k@%Ytplgo2n2oVJ+rv{)^RcSSt$G#9!i13&-03BD= z$44!Msdf{Yj+C}Uif-IrjYBPm5Q(~oP~pC~sH#UK#!Eei5KUWBnTZy7+y^j(npl%k zHy2cStMT8p-s>g>$wxGGMbrSxwbp9t_|3@Yc|>WBImXLsr3Ih?%#x;(Jc2T(36YEBas~B-&`$NbGQv#oSo!O^)k$+PIrR%*}-C znVo90n)&g6{}p|V%vs^}|NIod3myysBq@??5Wu^kTVpqg=KcrApGNA9kV|R+0000< KMNUMnLSTYc#jE`Q diff --git a/graphics/pokemon/scizor/front.png b/graphics/pokemon/scizor/front.png deleted file mode 100644 index f872c488b4e721442038d8c373acba6473f9a990..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 958 zcmV;v13~F*3pURa)9D{#kJoiZnrOC7>AlOA&yo@>f`y0hvyWy(F?$nj@bGa&40cXGc zWm1;itxm{u`~I$26?cqtb(#eoy9nXBCC*&rG!qvAW;p~9bA*)*0=v7h8E6{g0PNF3l)#?n+5$xfKw`r2-r5qPX*er={N=5lXldrJ^W+fbXxaBY$!e@}R9<6$PF+dx>iBA83Yn zO-=#)JfxgWADOnC4FIL21zhyiwBl?AuX|_sO6?OYQ=YDKGFzF>JA@M`xd#x0X|>C@ z+W`ID61Itg=FZ7%o$scP5hld4l{l6!DuJsiU%$nx3R_1H<%_5)zFJpn^f@Nb;3n9k zkxu4ny^EI?SPtxwfv33XRelQ_3TXgDRM&w{c^6}Vo&XVU64ef;b^nK*@l#(lqkT8H zP0wN&WnCcTLo4eBpkBtD#eS|d5)%th4;a;hsqvWjAe-Oc?;>V#XB*T?5qcPDmyeRl-J`%?i+ gv|qR1v;RlyU-S0Q^>)7mMz$mvBU~`QX{3kmf(9FH$+#- zDxOjb&ECB1#qD96f!qr9SJ>#5djJ1>8U`U$MNb5M@dSXO z@dVMb_Eldrkm~PiLAwp?b@w^weUC@`095lEt?@n$De(1P6NvU|UROEa1K93paQVX? z4Sxvmi+BFj;!U{{_Cf&L8&t(#Q8^LJscDY@z6CQX1=vg4Bha070eEQ(W>M0j5e&e0 zN&);DUqE#R1LN$wuoO5)Q;;z|g>nEP1>o1ko9Su)$7cB)3Yc$iKFkdN6)Oj((7Ac{ zVFLZ1_`Do2uirg?YmYjVmzy|Th?~XIuTuB|po!1d+R|MEnB@Sz`9m45^=aRCzAz_2 zD$^6{gSRtzP&^`JqOVVUa4K1*T?CZ2UOO>-o&nD`Vpo}q3$E7~yxLi?hiN@~CQg`; z_gAEmIf!L1Wv8fCL-D?qTf;#rcIjn+($vJV?|T_w$$yINW{MYF6RH8dVcvogX8>lQ zxb+Qq=z!~KE!fRe^Fpz7``&7sxpevKbM$i#Aku=?=G%-C`xDhw{M`^((S-QB{xC$q zZ3=eX-+4q6A;b&_OV@iu2#+Zk!`u)Dp%8z{kIhL19mx}XH3u-f+z^3OATahq-n@bi zg)@=@Igd@LV8e+y40xmT}W;xUt_$M_Z z>>#oOs?x$zTM`yK7ByUB9FB&Q^qgfO0T~qH)j!M_U-srN|NV^e@c{IA%wj{09W||=EwTARU!2td9;ZQ5GK_qIYep&;p2}5;2=ziwVvq7f0gtr;q*5T@Q|cE7Wm`+ zlJRlzDq-^OA>?p@@OFM&ysfZ+Z9@#uEgu3&*=i`QC}N10+^(JU`y cz~dMH2StoBG8xEOAOHXW07*qoM6N<$f~v%}5&!@I diff --git a/graphics/pokemon/scrafty/front.png b/graphics/pokemon/scrafty/front.png deleted file mode 100644 index 642dcb9665196eb2f02473c5d5329db9fa3a39d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 719 zcmV;=0xj00009 za7bBm000ie000ie0hKEb8vp|&e}K%{Dg-QH za{qxjH3@hU`qZ%yq>PzdF3`0@OVcF1~Ol z`iz7$;xZ#J^q51Y$01`3yC{=YnxqI|km)^}-cMYKzOBW2x>&ms1uQ9*)LLVJD=VoM zpl}$e3_FI*RlX&cSBOO?CZ19$W6!;2AOS{{8eRD7LBuH0;Y zl~TVjrGC@^Q_8d=R0XJ7^HO)CQbI=CjmmOO z*$1M90!_8n0Q1YLscry}SVTDwxD8GbVA#KV0pKdQM*z3~8UQhIQQ&$UOrDLvD42|t zJH&vCGXTa7H+VpSFbqGQ{NND*Xr#4{!*`C3(gQ%RVsuc1F2GNc8Riqh6VM!gEFhv} zX7UN?CT5?sw*dPU%Wy>SqpB58O(*y|u#zS2)A*!r%`_fCm(|K*>fsUIcfF>k-4qAj z0N~w}a%6{93V`=H7piy|bjcaBweBbcDDkW{m#M_M)5&`!gjBv=l)-e2VGEl$%-#eX=@aVMLi#O2S-~{~ stjs>^D;7Px#Fi=cXMF6nqKv)>K;BXKS5QunC_~_7x$Z+7$s92at(CFy+`1qi($Y^MA=-9B} z(5L_a0MSfzNB{r=bV)=(R9J=0mf@D8APhzgQ9$JM{U3MpCD2hT6vsVh*Xa+b+-nj7 zooV{dFM7&5e#p}!0l9hkrvmU70vaytm4JwxA2g5`{%8=|`FWmi3hMlVFT;Eh%)to3 zo#3N<4PfD50y6xzAQS=k-qpaS8&=NbUr;*kPy zHE@iy6O1hYc5OA_dh>%VsC*HqL#HMr0xA$2A4YR{my=t0sza`O z<68i`uS|eyPCtgO;FFJN9ur6?;9s2-4gxEHGH-;jn2rD2Ao%13&v_p;F*UL{31}td zb53dhN@|yZ+)hB)RP4Oq+m_CPRtP@=@YpxtQ`!sqA?zXmUistN^g?*gR2=a`kdL!` zyPfM%r<*?K!k-1MyCKRHE&e56PyLR7O7L3$3xRjNEu}Lo`GV)Ozz&GmJ67`h;iIE1|O+&Dq3;${9Jd+Y^ o-}vtJSTNB;{x1j~^1rzL0Hrk^j!6fYuK)l507*qoM6N<$f(2Ajvj6}9 diff --git a/graphics/pokemon/seadra/front.png b/graphics/pokemon/seadra/front.png deleted file mode 100644 index c782ae3e151642170b4546469722a45c756e14e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 607 zcmV-l0-*hgP)Px#Fi=cXMVQc_YJ;3gYJ;rR?hp_VgRISaVj%zjtoZo&-o;WdIADON$N&HU00000 z000000M39rSpWb5-AP12R9J=Wmf4QOAPfMpaZLFCA6_3ENxE%-Jgl^;RW)jx8EiwK zA$;SX2jDXt;v)gXXaYpn)awi{0>r9`k*4{mnDTa=;=KUuSuF9fWU*<`To<76+lH#3 z;O`5(j;E-B@rENYR{?)Eoq5MM#ku0?b1^2c8Em+WPlXr!h7Y8quAtrF65??D zjz=k4`Hjv3t0Ud>D$oRw_AZdoEk^i28_Dpv9}++SKul?f4`C-=0aUu@0_kNQ~#1;3az^&ts&2F`jw!>MaW~@Jn0;_UL-z5=sNsR%S2a82OqJ3h3)zK2Xjo zc#CJImx@#%2K$~;PT6_X0880OjbCV^bnW{uoLB|MmdG{U&~B(abLQOG1O9br+f;{&u zW9jX1xL>xlVFP7-$<08QA9&E<*$V%1H;v7t8hrX!|0VP_Ja?{^0Pu5h)zJ1OTq^?l z#)L~L95%+K6l53ClL28h1*iuCE((;Z5?B@ZiL}8J0XBZNi8TXbm!`2b4;L3wfgd~! teJfslmPx#Fi=cXMVQc_dxML;z0LOa|58#~5D*am-o3>^DU>l7=5s;zlw#iA=2}`}q&Y$V z#m)A6TB6Pd$p8QX@kvBMR9J=Wmg#b90FeO_mmNK6E63 zy)1w6Uxah+cY5#rPYKS|tFr#*fIwjk0>mr9efA{)W<*V31US3GCxTZ*Bmj(n%n$d3 z7z%*^gN3617T}dYfQud=%E{vC3Lv>A5&Hy09|52PTnf^p5IO+qffInx14chBpe3*# z^xXoK;N}3bQj6e27Zvc;Hx@A^uspdInc(!mMb89Adk9$bOjuW_1a9TNf6_0} zX#y16N`<80P9!Bf07wd=Uy;slj9`G}!TSBa0vstNG`%|x7f?M=9`Zc^uKGpQlz5PV zb(?uu8Gz8}y`KS)%ccMbjtht8fqVfn!58@rU^53+`D7j#S^(bPSUAsh5Nw-~(6EpR1} zCkd>GbbZp((|H#_ewqw~_dPptHG-m3wD3}s*wZ`KD(of}A>lnf7I z2e1dikivPMdV0%4ET8N~R;LQc50n8=$J9nrMi^-olzX9dFmFU`0b+rRho<8Lj{$lY zBup8QpJ7n{m;jWpvt86E2|#UKt^!<#(FO1p89;Aa%AwOw9ncSHRuCHiN(U4n+GzPl z`MT<Abs!kbTDrT;99s=uO(;@D)-bs_W&R}5zhC}@yqfk zGvq!4WX;mult1_YF-&cDfo2dV&6ha1Q^#=>fH1&Jxh3vJe@8e(M}z{%|ML+Z;yit~ zWoSXgn(Yx`=eB_^&7TQ9PBw`L+YwW|w#pPeB{!ZGM;3Qwze3~gON>iE2mlaK-Zh5j!l@ej(}B>GxqyZitE002ov JPDHLkV1kXffdK#j diff --git a/graphics/pokemon/sealeo/front.png b/graphics/pokemon/sealeo/front.png deleted file mode 100644 index 87d8fdb2fc3d391cfb4245eefd337591b21d5eeb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 717 zcmV;;0y6!HP)yij`m^>f(@0@enKJyZXb{2TyO=95fxqUKpyk~6eMm9*en0jA*|EF)A3@6?g zb{PBi%f(wm zLdOgqR{JA#xg$oH{?+jufsU!ytGrILosRx60(FUtLB#=)G@zONssvHAh=G|5vP_yp z1IS)nC5lpFMr2A!mB^6WjSmcn5+GKuuo?-l$O6^wI>0RE2~f?~E71zLPKbPc1qA*q z%_yv13M}F|NQgkQ00fCaz<`>MKt6%vgT!FLBJN{|SOk8jEg&$j%}bug<7Er;Fz&I? z0(a+0aC1!c^%l6gmfYox9fG>nLQ4Uu#_C~mNUD}k;0bhSuNHjtCM$^ZjH7n@z7UnjLtRQB+5r{aeq^K|-s#Y9iRR8VbG!L?O8T4oTzOdp7e z>T)JpiJGJoC*?AKP?SBjL2tMQmZ%&=&wvY00000NkvXXu0mjf0F_MZ diff --git a/graphics/pokemon/seedot/front.png b/graphics/pokemon/seedot/front.png deleted file mode 100644 index 2ffd8d6668c8f53b136031e66210d39e0e55c698..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 449 zcmV;y0Y3hTP)Px#Fi=cXMVQc_Qc_BLb7}wp0IaO6)z#H8F)4#$TD`1;tdw)!y_Em%y;3=@+qAeAV_q`9}AB7c*4gRbIy@A4bj?9R>O`0+;v@9OMt^~K=G5$R)*IQ zjaxlnbs7NWS-|MQ*+fkF87sqOhK`vMIR?_| zE%b=<76^}WC8||)spd$YuQi@;y_DX;+9H)r@pTgf*aW&@C$%z@PY{a?7Q51i;QRMT zrP$eBbOT8h2pp3{P5CwrCeJK&fK9*Pyw_ r9)ju?{K_z#{70~##{>S&n}3lXNj(iUu9wwK00000NkvXXu0mjfEfBy+ diff --git a/graphics/pokemon/seel/front.png b/graphics/pokemon/seel/front.png deleted file mode 100644 index d2cc2bc3148af8a7517bd4162fced70776194900..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 622 zcmV-!0+IcRP)Px#Fi=cXMVQc_K~jU1oV4cV_SMbq5D*af`1mQTq-t6aw3I>i=Dmn8Akc7F_^7DJ zuz&yn0Hp{^3jhEC>`6pHR9J=Wmg|y(APj|@gRuzp{a<&JaMS9xU}yHvHqLacdcK?p z5^lF|eB+OUB*s+$l8oRaFo*!$Bq0cLIfh(V(#a5$tIp3j~vA!bXl>0;=ZO z0r%?B08_SOHT43rUPe;nU}pO#us#5#krN$5^?FIulZ;6hz#dQKa?;BsP0xJ>43Hmf z0N3k37g0{8GKHx-{WhTEaN#?uMg}MFN&b%rbv|ALpv~t?gpK?P06Tr171z>V037s# zH5~O0BNpgHKLQ|kAjq09P(xi!wgv_WqzlJU-(3R~0493U_X4Du={ic<$#(i)fGvG_ zB{#%`AwX)QwG(hj-wUAH4-(071N4kS8^GFGxXXatzgaWDjB36(c@Kboy88Cz;4Gv$ zj{)dy0dU2x0PYze9b`&FAT`iS187T!Ulw0Z?+P&Mnm%;|I@>8({)F%$gvEJbEK88X zqX2ZTL}Z(dLvv~~R`nrxW|5~bLV5>N4jlFeZNB;dgccwp?DfA{unm9!W(qMTCwi^` zHblt}I%%-PscCbdd8WrB`l$K@VB1}6JkW~{%>sz)8rMgRWB_B!dzYVrc-f)lxpjT4 z5^`qx?LDTmH}H%ofUuWW$lFhnrG_EMMbUpjR{#J207*qo IM6N<$f^GB<^#A|> diff --git a/graphics/pokemon/seismitoad/front.png b/graphics/pokemon/seismitoad/front.png deleted file mode 100644 index e87b7a4a047529ab2453d964cde3d01911a28263..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 977 zcmV;?11|iDP)?f>R-GOEZ8tk}?vvRfCFHgcNzZ zC=NGQg1qU?CwsmDtoBRn9`>}~WuJHK#&!rjaM)LhBIo(}{XY}O`Ty*ukk{%P0~LUf z^5!>yZFQ{mk3#Pce_0Q_Iu5jcu188eS*zdZLDy#tsI@L`NNoW5^DOjAi#t3V=bP_Se8}?=8gv>kK5PVwGv#`(Y7}S(hHs$9>gb0Y3cw z*(@%{B``*{D=y+ci0Jap?pO-SKXE&5tpLzz@z1-z1Od?d>gQ%VHf9XapZ|WQoMLoT z_GBZ*_AF=M@(azMk#}b6-K#qoJbh?`Q1ZLVy$(De*_w+@)qOx0(4*UGm{L--Bbiiy z9PMP32%*$4^oay?j~3NXHub2xC3a9;7>Yx95(3>YrXo6BFWL%WeIb9M(oDWsrV+uR zVA~0$EcK~hn;P0+I-#}u(pHR_yF}R);2M+40yqj@8rH+f6jj%O6J>$Hk*2BGGv^Py z8sMAsw-;PPI8cvu&J|>Rx;U6uz+M2r+EBm5+>G%qg3&?QtCmTfU{C_808$F{{-a6J z$Jk7rKrI2yKzxByGUPfp0)2pvQ~4i>P7Wcyf;s17`4Afxv(VM%p=b}+gBu@(60x1B`=Fs*MhtZbl zFah00Nb_Xk6+7uA_9IN%vG;>@V2to1x44U#bK4uCUlN55yIN`2I@$_v@oU2RpEUvN zXeaEOY*xOD?`Z`T#(;@Lfutrw#3s<<9FUAfrv7=@PaC@9Uiox!03CM?0LPQ+2_c%m zbT%_-Rz3S@OCtl^7Fj*-Xr+i2&Amlb{nkRo4ZzLkXlQlIw^BcCRw>&4qV`J*#jX%# zLraS(^7F*`wjrJyUkCUA^7I;j<9+p?@}2e{SIWh7?^Rr*00000NkvXXu0mjfGHu4Z diff --git a/graphics/pokemon/sentret/front.png b/graphics/pokemon/sentret/front.png deleted file mode 100644 index bdc69648941c47262c1557b30932bea69cb23499..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 597 zcmV-b0;>IqP)Px#Fi=cXMVQc_N--cg2moS1F%S?Cv>-v=K}w5SLCvIty@Oi+|No?ON;w!1&CSIC z000000OEgp(EtDe(@8`@R9J<@mdlpJAP5D6V9+-G|Gztck4&H5#JiYb106a5wEHM!#7=~me00!a7Ny-TkP)ePXoO1$dFfK(3lFy7Rg3#GPInNUj zED#nrnR^MK;1HQ9V0m-Pm|^yWSXN*5aU0009K zNkl7{*5^<`x>g)Gibf4?RmLd+TWn{Q_@fTM(C$NplIdkYxW9PwNt- zmpv#9LXV4h=uue){0993r3Yb&9v0>^^qn!;ipkPj>3a~J=Qq#$gyMk^w6|*FY;~&>b|O56f{*u0)nf|A+>`{x%W{cmP~j7XS^yJZ*Id&bZK6 z1L$PkqAT!A02k8idDgDOiU0{A%b+>nvu_1mq(Mw{iRj=kR>&xzgHI9m(K$i`wkbr! z{i3a6gc3-5g#ZpAu8dJlu>%6S*ttv^q*6t8)w|;MLjlYD1`3LR`i-l%E>PcCrq7n-Vo3u@=%`aq0oS(uI*$7_%W5E?@ih&EN=@m; zS3vUxP9LCVH6{xLmNYNH&m>SY*%*faCsyNNLC6IcTR9M10SyG$7#FTBv!wto{R452 z!Is#-lmM1-ZP^mg4xtQI$7%TsB$}q+O8pvIH*EgegGnH1HA@L)+La_Re c%Ky541IU2G9_W+4#Q*>R07*qoM6N<$f({{!(*OVf diff --git a/graphics/pokemon/servine/front.png b/graphics/pokemon/servine/front.png deleted file mode 100644 index ab5a141b957c5a46f590c2132e9ca5299ed00b00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 562 zcmV-20?qx2P)s0005K zNklxII_lY{gLvD zY!J9klQ&3p%{k<)GR}6pp4mP>xcWclmt_5lqOT|w9|7zUK%I%MF}VaN3t+xo3h_V^ z)^J*m00=-0@Us+vs~Xye3KAYDuU{U}vcPQX{=9C{E;(R8_xgcw=(smAKcK>~3+hD<;jYs4}E$}zEWF}(%x9zZI=7?``* zd1Lo`thWTzkf_r8*e$8*`-ie=5Z5%q`K2;`;vwh;s>XjJJTc^(gH;aA&|vLh?maCa zaR>Y8u%Q{~{Y|*13G;)U>VOzN)kbC_f~pllzw_zeP54A~PwV%-ow9bCJ+=5Il~4B? z8^I@l9+H1Y0F)v&Kj^@vh_^c}4j4m(J$`9@0AVM4iM7Yh)6I{0001RSdd^C7^pxvpm5;OP)PXr_)u7I7C#rq0008c zNklBjE6aZkk8fv^LmTBlHmDC*ysm~+_b_W$1Lg`}gLCF|{y0#dc3NqN1 z+g#gpRsdTM@!LYcTfq`i>fp+NU$fWllS7R}bk!33)8DKt+hS^;?gC-O`7m-tIiOMr*AJDDbw zff@HHfcpoq9dMA-GGHuA2z*#4wMx>{!RktZ%K@rrY{iplXqw_M@H+@2-7?tN?34BQ zwL$Gvbmj*8Y(MEudyRoI`{8;#Zer2p{SfvnZnX3l0CZ~&$LkX&-}Y>THb28Lns91FlP8PMV)4J-jpGF&=sHpP%lP%g6~1UR^opg!wDjv*8j&4+I#sE0lP3_Vs-@I(N$9nO5-#z26I31DD~CO*}}{Vo)Vv0-`$ zE;y$7WCtCE`wp}T06`EgL_K*7@|RtQcgY8w@#IE;EyvlDaU5SUlfa1+BtRxf7WyNP z>%}wzEd9Gs`NJw{E`e$@IjZVwcvd2ocva)9(M&hP4uEGir0BCaDIy&qyO^GWswYdN zOqE(ioP#cU2~e>RRAH-AwbSW diff --git a/graphics/pokemon/sewaddle/front.png b/graphics/pokemon/sewaddle/front.png deleted file mode 100644 index 7f01fe90c945c5b2670552c6b4f1af1b97d1637f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 482 zcmV<80UiE{P)9@*_}DP``1nXjNZ^17kWd)N$k6zxNB{r;nu17H0004P zNkl2zX0RA ztk%VZ!KB7rl70fegm0Pej@ihQbb5Y$pQpV)gdFuxMV$jc0M3ccXAnVX8^WNEh=m9w zL=gZt0s^E2l&J?pua8gHTmcnX0D=BsYys+MPtqHX9jF$d5T|kK647ljZBGi5)K`rW zgPzdFF!0qlQ}-ib=)vGBNtIHWF#HQKNRk8rRo4S9902MNC;JGM^|%h8Fs=N|S2Lk6 z*{I%DcPoV@Lygae;|gf5X1HdW1O~(A^g92@{2BD60l3Zcw-ghkE&&(YnZKUBFB2hk z1FF@Y&UcGNSq9nxgm_W+;pO?f+y$Y2&rwf0Wm)dlfoV@x#OeC`Q6I1;T;5(TKQG*t z5h1n9r=P87o8nu6on~3-peR{fKo}i*1FQx!HFd!fn6Z3bb$tSmlkmL4%Q1~aDT>h z@B`!tT2J!U80ereO9#D6FKNe6^g|ZtT@2`aNpWKLK(G^({b8t4jy%5S9xN7+Np@0NNls9s!p+fb>uY#Cih-XmgSd z+8&HR{BJ-1XcbYnSy=hgu> zR64y|poT@=!%pYvTuw2NdJ`}g*EEJ3C|z0{hEJlP5MIa@V(<73(#7pjsD7C^qjl*g z7vktR?w*0KLN5~%IGID>V>mgEK_x-q?Fn01&mags#~8$%D_w}Aunfqna`lCP37>FB zEfMaHuz#p<2)Iiyn(!_W-j>+8y!$2f9s))Qo^swr&K))IE{@J(4e%;kAuT42hdIh0 zj{8%^--|_-Wow+M&w1Wwh*&!Gw>ZsIZBWYjedVlJ=YAzugyA?>RRdVE9{tRc;?M0C z>DPeHd9<3oFN%xhEfJfVPFW<$RZ)aD%kQ*7xLN1HO?|UV4DCoG6DA5 d0IKkTFlfKp2KUT}YU0*_F9uyiIJy(Ey z^7;Sl9sB|K)t#|Z_K8>C(N9Pf&rw$FdW0y%%K%EG>JvSl-PBjN(+<1oeo3XZCVt9R z4Q#-$+0Z4n0-}NKSSq%H^_Hq|vw@(ci!3`*$2#q#9%e=1!XfRp25Jpr`QHW3c|Zdi zihFFTSQu_#U+mag0ENvuW{CnKYYuR}`DRffKQn>u=7B|P5i|P+fM;A0 son0}JkwbA1uLdA8bA{{*^T`K(08Yk}7^7U}rT_o{07*qoM6N<$f*$nQOaK4? diff --git a/graphics/pokemon/shaymin/sky/front.png b/graphics/pokemon/shaymin/sky/front.png deleted file mode 100644 index 190c4ebf69b367f2dc7014729ec18d6942452580..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 722 zcmV;@0xkWCP)Kl(BBpP!xtQQJkp*Nkr(Fq@v8ph0Yan zVvnK3u?L1rP))^v1afmcb*Sv*Or5Ay^%Zym-l6Hp6jw}4D9^yT*G`(^YbsX684^qX zcmMzR_}Gm7ufMJb5AOj=o#s6NUlZk?mUzp%sZ_R(HRsy|@TLJoSTJB^)7;-{-=YOsnHU<3qTK1)Df#&8DV z*9$lmZ0qVu15~mZM`CN9B-h{bfEth$PNkkCi)D^DBE1LLS2~r*S=fO?k-mH0006f zNkl2Hv=CyNNn-Yk=J&x6r%ybtMbJtEtfFkk-EEdF@uU zPl67nv|4pGX+)>xTYl&1l>=qK*CXp%MxByRZNQ0U*O`twtNFVN>1(3=LQKnJm}wO!-70JzqI0>qKVnpTbD@ep5)@rf1@plHb_@t9&X z2&EMK0qnQv1v$VcOk}=L4(x0Esb|smK5!VN?b_Ex0kJmkJ{#2uIq0 zqjaibV`iEnprjy<4G?F@PByHh6zE#Tv3v$>~`%;uGV z16K�H5`%0iq@dY~bsdI zbqV-ucUQNGsULv)@Gw*L1G1iG`v6?V_5siO2mJ=Si1p~WGsKAi0000A9*ad00009 za7bBm000ie000ie0hKEb8vpKlfQ1;Fc61bEnUk{=p0eBow!}(qaHvM zy=9310NphZMY^>>8h8v)q;Jr@gIw?dx+FvAK0t>&O^=c-G(5|my5&56pYL}^p9h2I z`d`IPj&OiOMwEau=Cohn9J$eb_yx-vE?5ueDfd_!^J?#SG6QZjVt`^F*T6ABA_mAW zX@8SukSX180Gbi&(kIB416_nKfJ3Uw2CG7l1dv`}4W2QsPKm(rGfh38^F2dEh?i~r z%yY=7kpIhJ8f2U-m#vVu9N6@!Amvtww;X~o(`mdI;*MFltOjV}P~&UoZq9GbuAXj*YmTgQXJ5bc2@&Wk=Qcn1JZ^ar3Z))9 z=LDFUAF&YONky{A#TvInI%jM}|6Q^GSP1AF0bgoW8pz{LAXht){slTgS5&|^G)33I zh8gSczJuO17!l#66Q0OIB)-8;A-|`>=la6~8ncPDQVibwA;QE~zXn2H zJmTSDzY*CY68B7uWy* diff --git a/graphics/pokemon/shellder/front.png b/graphics/pokemon/shellder/front.png deleted file mode 100644 index 4c3e7f5228d021233186feb939e525ee0ea7a032..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 514 zcmV+d0{#7oP)V1R&-`1tsE5HP@CXy~Z00000000000000008Ez?j0P5`M> zfG?L>9!++YE=45%!c)xWZ)RkB-X)j(Rp3}E0O0Ib+O^KW z$9gsdn7b4K6H-b58Ho180VEg&caj+pQ*;8+$?-UCcU@P+rjHDSE$osFgrV$3rXNeh z%vMxl^R6@xHYGL?hOJKAItT(3^S&);0c3FBVM`2M`-qz+AS#5g$76bE3z`b&M8o5q zJ$nN`nCGv=QGyL<0}1wD^uiEX#1rN=(Dl*-@K#`mqHd4qGf)tXv`!+-8WzAwQwCD4 z3(P^;XL{bqj7SSzDA5Rn-LI0Sqk+^A9G_d&Y5YN?H4W5o5Lky+W1!V)L!$-p20mDT zAH(ftyIm3iG#<=VKLL!^`;r034d4ik%g=HTkYff;z*{r0%N3Gv1J@;Ihl0E(X)R!K zWq>c5@H&nk_6)o`Tcb;z6b9fRSzQnkQ1t|y0Hp_@s*zAhhXSu8-7C}sM7{t+L{}J`tYwI^ zbg4wh%2v~fsUkf9s&ap2)m;XImwyabA*{c20uQz}B-#!XTHQTOgR>k|| zqM<>lZsUNA02)n7&us(fFo50_*tThpHUJEU&^G}B;0A5x_e>KAxXf=4)gG6IGq{W~ zJ*MBnfi+U#QGq){|7^&Zf3NzcfG1$S{+}B9mQMF(>ZGO#st42fIC!`|0<5_U9#vp$ z=#x+-P!-dCHGnh}F`t8blc=w9cE~8_TtsfrnW$dMUk)><5PZ1^#*?I+ahM`gXqLSv zK|m*II75L&9QnCWf_nfFzNyp^pzq8>4^t_2Q2;R4poM|2qKMx>7e{x{U>EH{f(BFy z1;TyA00l&WB2F}TMlMQ$k9|Z25E#H#f$ucT76wppWRc6&QY6_D1q_@o8&>hM($x)DL$Yuu`^$UF!e<002ovPDHLkV1lp`-@pI> diff --git a/graphics/pokemon/shellos/front.png b/graphics/pokemon/shellos/front.png deleted file mode 100644 index 0d1be14f6a0774f045f5b6fae2378b87b502aefc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 469 zcmV;`0V@89P)=6=#bqmDc$UnGao|; zE!kYX7I9S^oD}3fgD=!E?`Dzy*ZbxD9~U^rw)vmg5gqIKeiMA__dySWrm%r_5OiI- zrR@iSf9}#PZ6AU&G37AkSEoH=p zjSEVY<+6wxqmTluuU~U1hCl+YpK>WhEZC3$MlTBqPJA$`2fM~B3V;?I65!pK&j-A5 zFCw-;@HInlLR=>{YykDgI0BPZ9WbsPu>ms_a(q_{a0l~|uoousku_{Pp|*Rtt%|C;KI|00000 LNkvXXu0mjfMV-V8 diff --git a/graphics/pokemon/shelmet/front.png b/graphics/pokemon/shelmet/front.png deleted file mode 100644 index e881e714955f296daaba99a8a8186451e02b3c35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 537 zcmV+!0_OdRP)KkTFgIK@^6^unktuq6c7LV`tEHdt7Iz zXjt~eP}q@4XiZ2s0#^_zD6n7)3rlMoaT8-=OJno~9>6!VV6wZz9zgxu|C{f;%XvC@lu8z@e!Lj5X6h<&4oEfYKa5T2iozOUNnb ztjd^e0Hp7X#^d9Fx!598&nzKjpD_mll)F_s4=9CTsJKGnq>3}rKsizh;f#jr1NB;v z1#aRQD*8SHK)^YNEYOY@R!dIihk6DG@N&Q-u?A7(Ukuf%q6?4)tav#ilPH?26#zm6 z(s$UM#>>S+gbLL|=w*Rvtb)Xw>LG+I(0+;#c)smji!~5t4%sX#$z7-)gO>yJo^gEt z@p&l{pqT^ktMT&a{WTQOH3 z(jV~r2BNNO?T7t*Pb{CU?ZyF$;QEFg!lvI6-A0X`wFGcGLfaBxUSNDvSZn9$L1;=~CB1%)3MIvNT*4$MgS@#9B;hk=F$ z2my5fL1&&9$R^GLkH}&M2EM}}%y>M1MGDX|e@_?35Rc<;FK_faY#_jvAg-LIm&ZQi zgJ@^#!p`W69V?GWS~Wc~*Qjm1uy%#_qCUs0J%^5QAGl?HSTCvT@uuzOuD|x*nX5Zf z=5+!0gFEw;H#MriFVMD8;1HO=Z^J8K_+d*26SKv)Xvd1Z%xjG`rt|NXT&r+{dC@wT z_tO-AF>Y=DBmO{lf&3fBlllhVAFwU&uRhSpB)wTcaaR$uD$5eB?u03p>$O66Pf`r_ zzr*@0%ws0Q;n{z#GVc03bBeIoq1buP^)ImOEo3~|1#c<2+^1t z+xA}Ic1@u9L5;~-pHAL9*5n&&>K1Thon`W$)S|r+S9}lTS1NtERdV6h#-_+5?u}xp znMLLbPHT=>>G{TF?k!;`3KP-J`X`=jyEgX0P7Ss%zO!>?gz6dm-lx80xpsA$`hsV5 o)-Ovk_urboL1J>UY?k0B=IHE%9^PP=37~NIboFyt=akR{0O!=nL;wH) diff --git a/graphics/pokemon/shiftry/front.png b/graphics/pokemon/shiftry/front.png deleted file mode 100644 index 15e263cb9436c689f44568b896e2203dbea3c9ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 918 zcmV;H18Mw;P)l^;DB&wfLK5<7x&2|00009 za7bBm000ie000ie0hKEb8vpKlfP@*KorMiB4@4@8yD;jJqV(ki#-_9 zL5fdyoOr3xp`}Bh!CWP=EhA6rzOOL!M7B$_J8S}6xXuy z1G<(zI3e!)(R<(bc#@?5@i&op;B79HXX07nr}-=`k8`PI6%6^rfL@p^MLHS{f>gmp9zmcVA({A zrKr2=dTo~kak#8I-FOYT{l%-5?|_%OQ;fIKYIXKcr+}k7WS&@TyYBgEI@HO5V>o1< zXuHP%XLtVqwbb~CMQzG;*F8BEzz=?Uj+JL@H1DzMd2p#mdSgP4m}3tZi`#@yD)(5A z5XM+8#Q_$dl_XV|?-O>NV!0gknLmo_(!#sf{&?^LGD;C;m+@J0BR{R&IQ^@^CJ2~} z#!c|Z;;TwNcT8WnY_&XZ3MAF^noh(3CaXZ z%5@lRv&Skh|7OHs4VyatSoO}gqPn!u9el_6#;9SKaD(a{k4GyClr{Jj9GD{$A(K+N z?s<6sV%CKCr{w1(>x@tc3_Ir@{^a%}M8eWj7-uq^*bpi9w=MvP5D5!sF~)lsBUA~1 zK6G79OaTQ406%*{jVs(QRb3v_6sxKORBT%uLgorLaqPaAAV;Pt4B!BO%^g($mmF|k zeJF}ut4=*2WN-OV07*qoM6N<$g0usrjsO4v diff --git a/graphics/pokemon/shinx/front.png b/graphics/pokemon/shinx/front.png deleted file mode 100644 index f6d437c6e55fbc78b977e3de2bb952ce7b86d6d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 523 zcmV+m0`&cfP)7KSoq*r`1ttXNKlYCP)JB%Ffc&iXm|hs00000!j^VK0004& zNklhaB>EsqSHQf|h6ImXH<3Q85ZNz+;Xu3l2J7*AdNh zT8VZfcM8|r8o6wd0XTigE69c4$urSkKfS(VdRkJe{>nXL480jC)y zN!$mbO;o&#Gzmvh$Zaauq|v4LAu5peE}g3ar7dN5b3#8AQJybFw0iBV`b zNSJ8aOSy0!hANoP)W{@s>n`h~$?Vu5*mONTNiSL(I;2u{4?N_*=Lc3AYiAHF&1V1r N002ovPDHLkV1kZ_=JNmm diff --git a/graphics/pokemon/shroomish/front.png b/graphics/pokemon/shroomish/front.png deleted file mode 100644 index 0a438920462943138371d6a8745eb70c7ac15f8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 450 zcmV;z0X_bSP)(O@Lhv2arMDt>`Td4Pz)>dNG;1CyV! z=l(AkFWIVm0x#cBclVtx2rjzl99?_e@G63>4`3O?>dpf^V1?)dVnl3xE#iiIfv5!F zDCYgu0ldUYJ`(_lh1(A|()z%6og27;PwkYmMA-0z^bR;nggl`wV8VbaXH*7ADJ!%& zoMTc(2KL*?8GtgTcE+RJyVe=e5>gNZNGaXG;hx;>JaGJ4!;t_?CcyWaXvjS-Cqx3j zg!r@^-A$D1KLEBPfa!ky1KbiZy4?!0GVg)vtaE_%^zvd+FLcke?z06!0x=z@h_!~2 zfYv^>5QPKCPSm3Aa?R`4>7wE$t4|H^S_y2;)DHqt7*(NAN{L68Z;P10`evB%gIK+o s!5H_!eRNS>VgFemu;HcwFZwrn184kh-~vy(8UO$Q07*qoM6N<$g6;vyJOBUy diff --git a/graphics/pokemon/shuckle/front.png b/graphics/pokemon/shuckle/front.png deleted file mode 100644 index 0b00c414d1de82ecb83de636a838d6381ba836d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 598 zcmV-c0;&CpP)BjE6bEn>ta$B z$S9lMUQ>LZL&Xi~yX4Lk9IMiKDRgL`2ZR1UPVebXGK~NAHwpmsx#N(YCV%BP&IR$> z!C(*i8gTBM6LQs>cgRToi2MEofL36VeL;Jd1C_hbK4>W80KjeqW(X1JfMKc}G!Mcs z&<9Hk)F^r&M>zpTe*m=a)-Uk-6!5gU9P^DX@7`MOJ8X{^NePgYZKAs@cL=@s2OocE z1b0u@6hk}Ci^r@POuo?)k>y1dH=Vm~CN}glV=P@&<3=$3{%}K?5|6h{_vlV3-Q4`l zXDpqSO~4eCicLD7aO0ZsV z_Jyx&OUPF)NN|^n?Rr@)zDiJQLT;jKV^VJUlG5rE=Xdok(E@uIXMDZ8$0Sq0+c$Qo zz_)vQfB~|}iut`@;Ce@Q2_epTQANJ3KnU_pegT5Ox7@et2}Iz=liAQ$;4n((QhuGT zaL#$0S)`AVXQD-39Gs5)e#r&TQeMPzWHOZ3hDQf$A}BP&*|f(xv#KBmjD0&07*qoM6N<$f?)&{)&Kwi diff --git a/graphics/pokemon/shuppet/front.png b/graphics/pokemon/shuppet/front.png deleted file mode 100644 index e2633121a5cc09e2135eca624d35e64ef1d70b20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 472 zcmV;}0Vn>6P)9U zrXkFlHS0@77|burnD8IKm>@tJ5g15A0CIjvs6Ya#dw}Ls1XXV2qojopDZ2?=4xl#T z+)Ew7RmeU;^1Z--Ly#R>S`RfY`TIabBJ>C`bwEVk1Qo0R=J))%s$c{-ko)|j6c!Y) z>?QFt=lO9S>G4+-0EjW?Ujjfm1zy1oks2T;X#(&N5Vq$NsR%%10|EmZpMy5A19Ar1 z01Ll?RRJv-ArMaiu;neY0C`@Tl?7BnPLk|Efc@d4cr=K1AaDb1eMvuA<`_q(@*u~{wtO8Q|4fSOPAjuRz@}@;NfsCJo`F^d!JK?#Wn^5mFfBXVe z!hZZmzTT#X;>=e-K3XAvK0tf5#{J#kenGbDZ@=M2{wv&n$IqHI%Tq5CdJ0hM4{RX- O0000YENqaCjfkmRsPez`oo#+Oae7NEe?R`d?|Z(B8Jn~Ug~B8`|3iq%1U>U} zSqPr4L-F&nF(|x9^{>hb85HNo=E!?BQC&0zKvZ!|Ax|k0-G|sIS{VOkl~QQhqyR;^ zB<5oRbbOIlF0u@UT>t?K4u1}Ks?K0mMq|K_LMb;=bX?;|ad`7i#$&)~s#p&%?Pd(P zS#MRy`$$+KVmAb$8d>Fgs#dwzsWuVYVFn#qfNA1c_e8iRJlZ+}>hv^3@3K&sLfm%)+YqOxUCMC1FiMn z-brvlJExf>ki+HGrS1j2)=irL-Aw4Z31{82ldIFSE?sJTd{>dZ#wN6Mztz?K8{Nc_ zPKno?d;=Y?CbA@A^SQQB$N}k{=mbHxu>65MPJgwd49|0*V6a@#}(Yn=X{b6GU1!geiyH4x8e{P%6CkJI4PZ-_>!{PAO9G+yzs3{x{hJ(`( z7{6}uZPSL^n>0Ot%VF+2!*t-9<-hryjg0vLp#ALob)Kd(mOG#`qnvc&fc|N`@Svvw zj=O8QDtR^^D=41;e{TX%Qrz0kP5>+il#^9yDgO%;Bfv`sDxL!iQ(i3%n5}G8Kvce_ ze#`dPx8CO_0*m{vb8>xuc{d$c$;rKanFbv4mn$H5(;W^Q(;O-c?!RFpE6*Ze!WTQk f7@r74>q&)w8|@ILwi4E<00000NkvXXu0mjfQOA+J diff --git a/graphics/pokemon/silcoon/front.png b/graphics/pokemon/silcoon/front.png deleted file mode 100644 index e6f2a614cd4e08aebd48e30c5d1efcc8aa0149c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 533 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*BKWU1SC{+%vkZ_!-oSG z9ta2stk|((gM`J8fC``zOu$sjR}B>9EbxddW?X?_wfUqO7#O=fT^vI^I^SMC z>v!0Ihv7j<(7P>X-%Z%Yf5Affxyia6+g>ZZ<;mc0IAZ+amdf9m+gdU_6n30B{&V$P zOHRe@KjwR^Ykc%>yTg{NOpB)O;|?p`;%eP^Ry5$)0j^snk6WJnj?$R+rbxx`Lj z@q?!v0jv!?hn_lS&CaXPtCkOVu+5Gk>&CuiRm}(G*gUvrFmKcijbPf$>Jj40AkVb)f@K$n_YWkOu`o4JKt+tiG~A*w#k*3su~LfChV@|%8_C4IN$wdOT(_Za$PC*YsbD6 z)O{?=IQTemh2yP~l^c{h4aFA}F1YXUy|(S26vx*6haY}OyTBN(!0=7awzeScb#%g? zJ+?aKH!q2}e>l3?W0h_3?}K5Amj&jePWqUY@6WI?eX8Ue)-Rtktg`ON94l$ztK)Bb z9J1{C)=d#Wzp$Py=x8S<~ diff --git a/graphics/pokemon/simipour/front.png b/graphics/pokemon/simipour/front.png deleted file mode 100644 index 3ea50454c9d743cf5be73d06af52e1bef4ad9911..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 829 zcmV-D1H$}?P)uDcsRho!1%~`P*6}fI5==nAefk#^_A%o0008W zNkl5!X_izesHo&0 z$k>3vTdKw8z-vp!E*-igxP!w3{S7_Irl9BN?(Hoy+(-BQzPr=2qWp(pJT|uelJ2!2 zXv2D<1z-U5TGpC;11Q==MQeyAY@1L;B+aXS3&J*pMiXE|3iRmRI5Z(J;{&O}vOYl2 zlmc7uCpw-?qXfLA$yGo#Hf?}SO7_}PfSlW5P`yrGrkdAS9;@357uLREC;FrNQS=m2X0S=D|`0*3RXRj*Y zWnF?ajv=@hyhHr@{T$+b&ld+~#%74a>;VUFZy=%qb$}@D757cx z8O}1~@1akfsO1ZEv%C+{q!`cK@h@P^s0r{1pWxns85J36P!~G~UQL1O;#NeN;Mf#2cEjb2}P+o|`d5 z!alg@B6eUay&Vl+>-Qkcni`!e4(2R9zaE?pEDd5N0Q#Mxb#Z)Y`$PZvhQe5)tcHfT zyZo&5l+MuDRs|#7e7SPgye!ZLQ*feLCeTKQ3&5bCfp8J1(4rcFACW?%T)cKHEDhr& zz`&WgDpe}g1f!g~^=QnT1n(DLhz#hWlU{Pm@QDyFBb}Bh=%SluNG`~+SU^WKBgABm zd1={zz`1(2&w$|shhvkOn0C`G9~Pv__s^EB;C z?m~`Br|H323yYku1rD>&jz^iJLx>KouhJ0GJ zK+CQsGZ~ONd1h5)j$BrPF}L!j@nr0*`^#9=a+&-T|8V>U1MV()LC7fD00000NkvXX Hu0mjfwHJoL diff --git a/graphics/pokemon/simisage/front.png b/graphics/pokemon/simisage/front.png deleted file mode 100644 index 22e5dff398f11828fb0b8a2e03e0d628ed3986e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 922 zcmV;L17-Y)P)g50F0$wCC{f0id*iY9pir+Eh3oYXKfPAa7COWr(dZU6s~~?EpRi@CC44*NIl(5V5yiW%Tr$!^1Wpeum$_&h;Gd{M{`owHDUpNzCpMyrWC&?+u0X zYs^*-+lc%pZ7oiJ)*{0FaoGf1M4y|$oj32b^REIj*NFZH2V9LnqaIrzY!k!^+o4`F3AK;}jMGNEI0_97P$GMQzov*Y<9A(~8y z=(P(iRgSV*h_$^VIwJdX2fa)oHbv}AY#N&VFq@qXehJ-(_i*Jlc8)`C_H2Br(xE#j zVhPO*I~1}HSF=71Qu9|~I}pXt=%v5=WDtH~uHVciUmIg$4KS~g*N9X^7wMI`etY?^ zG1o(_%N#R+=}8@-dqkB;N9Lc)@2*E9fO!51^=S!sn9!?Or*PHnSEFGX+Uc@2bm?UF zc>#d!QCx5aeX6?PGIPu@sit*^N8O`ICv>$~n+xL#Me^h{IbQ(LbGqm;wmZE80K0Vh z_vx~XD1uJGL~jmM9XIeoajMSik?6=s0h1j%cub;F4hVoH)vMc9MZ(^YERq9tprZLI z40c&^dN)(RLe`0tl6j;sPz&I;k9CwR&m)wJMd#@?FI#MwvR*=)0J|TSOUR}UHZ1{( zwS^l2w+0IUuxXU1H>?Ngc732juu0;35ljA6vxk}3|%7Gv6(6)`)tvo(7}1Pv5@l>33aRL4?w9LC=(r878ZmW z0aII4DT=z5i2)M{qQeVo)QPFG`dxUJ7>MJfo#B*3@%?}IzjyDwO9=S~htaq}x83Uj zyLF9dnKu9^8UXB?{lPUX;4YyH0174pA6()u2-JWU;7fQg2haifxEukbs(=NdNdf#2 z+DNr=La&%Mmr+x1-IA9~dp%wA?I#m6}tI&T0T zc6T%#ZfWYcb;ZV*N1L+^_zEvlu-Det*m8vob)ai4jhRNszWK~C^p_F>9 zR8M`ee|Lo}<(rO1N{`W?-I(Z6ShDCgGj-8dS3R*ZiLVA`8TfR0(Yw0povrL|PYgs! zUpn7?b=kwg4$k)`z*HvW1G1DPANLqzYX|2^f_qpE|8EEqxJf%mpvAi+(SXFV_(cr$ zpSlakAqtnh{^5R-?CJgokro!s&$`BDx0AfYQ+`Emo7g-G^V};EkYkDM7F|u=Bk(Or z_Fqs~K590zqW|xyz*_csAXu&wb*IAuuchv$Sy~jVnPsYZjBV(Sfs|n>faU2AzX0la znlTn|Rv)K2B{YaUXes~C1)+@T53*4JMhn{>TN`GsdhPx|Av1LK8ONgn$N^V_55kCw z`{9;>h(iP$krc!pueWBKW<1S-3r~)}i5Z;)lZ~Ye^f|e#0G^EWd|Ni8loq~cLLjv5 z;H-3{kVpkp0ObZ_p458;nyLbA4F!vU8emumhza0Sf~@Jx85$5{O3waj8@jECBe3wO zdQ!}WpcCa11GAxlHZx~+ZPCDc&gE?+Dp?}rEQmlL@Mttl=lGL)zdz7dB~ahhh*fn$ zGrYEFY~-2B=jep24fA6y&^5N;FM-W7{!hj)cGdmJ`g4=;00000NkvXXu0mjf2U3rG diff --git a/graphics/pokemon/skarmory/front.png b/graphics/pokemon/skarmory/front.png deleted file mode 100644 index 719acd0f8f7cf9df0ba62eeabaeb8c3d6785300a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 952 zcmV;p14sOcP)PVS#ka*})^&nY`Fx(%|C}Qv4rBk;`9V@j-*QW1ma3F>>QjY{)O~Sc>-bMBitq*LP4ObP&v((G=4R=VBp)L@e- z!1Jl^`4E6o%2&GYj*pL~2CRwzpgt`^bPIH|`(_OK>)4ri2U{+802$vLW|^`* z;@C6=6zGFKyVWnhvkEt>?UAgRCK&Wvkg;>C8$a4CK<)DgXeoUV^|(5WfIq*X2V=wl zNOPqN9{zpxBpO_Ujns4d901(xv_vOrQJ(EiZbrl#vLPFLX0yZ9g^*Ix{o(9jE1-Hv zN*J?JZdJluN*T-nh|9`zvIpnNKAchfSjy47j`DH@C%JjZ$(aQ`f%Dc zZ=0PjNLk46Ne}vsl*tlkJ05_-wOhZrN&vC0|0)KC_cK`|2DYFSzgb%f7-5uG%Yj+! a0qZY?_#MlZ9*VR80000I52QnNPsvf06-uBxL5#iIH0Jo`1tr(U}(r#5I8tMA=4ts0005} zNklBjE6vs~_5HAMZU{fodq%TmcFVIlgOQt~11Tqz*N1)j|1Pob<<;|O( zHgDF^4jMWo8MMadp<^6(@YJoJA@7uCNOYI6L+PJG9K4_Y|98hd#{TPXD|}b4&2;h`+*<&W`NwO8ialj*xUFJ=`Jh=Iwg)HYq18BBz~nFMFW61vU==7 z0szSn-dlko0Rq6a0mlI6>ia0M0gO6OYAH@j8!#k;d!DfbDa&q8{%ga-K?*lb6jn*Ee*^ z72*PMf;r+#pvNg-xz<(8Q*35ZrE5JlInwhXr1T+3ZqEc93Sfd6PQy}XY+MvU%71{&|7zY#gMNo0YY*S zI1LD@Fam^BRZ~EfVESU7XhKC?z^GUU)RU>QN)yX~HBbf`po6V}7PzubC~OTHhKXIE z3cm{wpb-e#FX~JQ0LYFRen-`tld>BS`a6+be^#%5uODewvaBk2zD@uD002ovPDHLk FV1jO9#+Cp8 diff --git a/graphics/pokemon/skitty/front.png b/graphics/pokemon/skitty/front.png deleted file mode 100644 index 2a7321c2682322f996b8b430cbbbe476c563d53e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 607 zcmV-l0-*hgP)-rF$ZmsSVY3T0BTm2Us<{{8nx0B`l*m$mr{@UH&~(C$O)ul{V)>NZc& z{;q{Z!1kX%0|=Er0~i+MaO^%G#-ApZ3xN;o7BG>nPiZ; zii2W;KoI4GJth+5vy|eZ0TX8nMTDW&r_yun6C%F=fOq!mM5aWCMDa2K*dQWV+Wbo< zRgYrT&mMtU3E2CYQeM;LwF1%?z~QC3ECelNcI6u2dkL^Vt61k5V4I&x&iO#j>jA5?tK{Ag zjbKYThcdt&rH}X;NUA`m!$hKlyn)2N7>U9_mP|vunou31J6=HCYjR3KlQC=CP!PwTd0Ipl+l8hb?O^B_@?Nc& zc5tghuGKB2;5GPhYUxyLbd-!HplpE(gSu8r^#Pp0-a0BDs^_-GlCj*WLm@YaKe``x z|GSffxR3ulYK^}EZFMkjL9=sGnQaKmGcVh3E33DJhj>v9H0xFnV)NbXAaHRNRRQw6 zHAj3OMfED+YQ%sW%_^rji>?7cRZl4&KVblLznV}nz!0ZUNeDY0&I6+A8bWrF01p5b z8o+VkMXhc@QCfz#U7SO}kS+qvVqds`I9!}Px#1ZP1_K>z@;j|==^1poj5Fi=cXMUcptFc=UxNJx-KIB>w|5D*YxFd$f%xR6+g z=rBOQc(`CdU;qFB000000000005vyZGynhq32;bRa{vGi!vFvd!vV){sAK>D0gOpR zK~zY`?UTK3!Y~lWZKPz$63Zf@Of*7bPEX_k5D(xEPEos*M#&RUb!K2;XJBMNLhjP8 z@NzvHDpkVgwL^Q7li~lnPy5)v{gUz2{qmdwWa0GbR1pDSeAWpdmKNxs{_6M7zyd?m z{Q+ulz=+ag)S*h$#XD704$)g;n|^?!yV%Z5rkE@V;AXRZ zG~LUqxi%qI+s*or#=7=RJNaP8gPxh$ssiYGfaCkgn6=T-vi6ViXpGrwjosp`%jat# zdNO-gdtz{yzF{YqhnAR~ANY~14g>ro??OQ5*2qylp!MNfe>Yl8NCMZYzk69sCp0ig zK0`n!AMmAmpw^$Yco2v*p~rwj?sXYy7T`jKfI`sAYpsH^ML^IYv~Js!2QQx`002ovPDHLkV1g;7 B^$q|4 diff --git a/graphics/pokemon/skuntank/front.png b/graphics/pokemon/skuntank/front.png deleted file mode 100644 index d188535e26b79e0fb0a81d85769b75f938cd16ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 838 zcmV-M1G)T(P)z}|IlNT3^L+toP8a1U-sphF0* zZb;n>oj6_r7#QG(N|z6BWscA_KoxLQ72DqHEd$`F0`qX#W|Pn8g&qanl8DU)(iD;(y)K684d_<#0)&3b?nnYdtN?d+ z%YglNM2u$Toy5a4!iP{cB1hW)@^MrgJuep;B@w>rlP~2Evc}b$7gygG*E*sEr-oKF9R)d%9pO=G`R(kx&&}0)6JFv?P#Z02SzJEYurgWeWZ8`u`e#0I59}RCW@5 Qwg3PC07*qoM6N<$g24!Fm;e9( diff --git a/graphics/pokemon/slaking/front.png b/graphics/pokemon/slaking/front.png deleted file mode 100644 index bc7ed93b02e70ea3e7acd55545de545d269df203..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 969 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 XxtSy-gPT|k00000NkvXXu0mjfjG=!4 diff --git a/graphics/pokemon/slowpoke/front.png b/graphics/pokemon/slowpoke/front.png deleted file mode 100644 index aa53f9c5550040cfb8c171a5d45073bf8d27b396..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 534 zcmV+x0_pvUP)#xR#J(E1qIgwUaz8!)N~xRc1~)Sx1VI%uMS z!enqkK7rKl3Xmw2l^$k2P)Y zBm$5@-_eT6n*v*X z*L7c5i_s+YWEdhyw*z2^zB^`Y3J57cQvvWK0JnoBrrPn=AmVu}fbY)PA`r|YF>*&p z^gd>QbuZSSMxyhG{*UuIIf%-Ud`>L%T<+QnMX zLW;*({lYLq&uKNeRI2+eSlpIc^=g?f{xu0MhNF7lTa_i-58~Xf`*0fRhtlj7z*_%P Yzp?+C9JOq7g#Z8m07*qoM6N<$f=)&Dp#T5? diff --git a/graphics/pokemon/slugma/front.png b/graphics/pokemon/slugma/front.png deleted file mode 100644 index a64ce0042ae898f2eb5bcc96f35a86f21eae6adf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 470 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*BKWUoG_56kYM;Rp+G=D z;Dv|7hk}eBFDicg`0-)~2ao|&hzuN)v=bN@7!y5R978-h-%hg4J8ZzyntGU><1L4y z*=c(Xqhl@KECMG+_I1iFc)@t-=v&@R&yFo^>RWWJ>_qg>m$v^rRxbbN60rQWBwyx& zL&=xwLvN+vyDT&kO**_;RwaN8NI568KPN?yZ?(Kl@shU?q z9oO7E;qcBP!Kda=($hN`lN|WgYbMMI37)FCAVhYZqM_?rD=r6RrBgcu7ff7twE2+p zu8BTei*2X4nOXAAS~0iD`^ut=^B9@pjS4$T8srXHa#Z<69%o2ep!olV36n@eP44Z< zEE>z5JNV|ao$}z{lM^xf!!1vB?U>jNKLek3=30x_|G8p+fq&~YSO17T6Apj^-_zC4 JWt~$(696Pt$+G|e diff --git a/graphics/pokemon/slurpuff/front.png b/graphics/pokemon/slurpuff/front.png deleted file mode 100644 index fab831b363cad9bc410d54d4b28dd278887a855d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 620 zcmV-y0+aoTP)+>=@7dIbMQY=Zel)EAfG0d~5;S0|I^v(Es(? z3Uuy&BfuV-0Y(;WfJ?gH0ys$cP8&ecZ7$M!d>7E{VA%oce9jy7@P&1`lt~j2Cay10 zPZ|h2Nxt8ZjA5)JOwKVgC#ZxW#Z@4z0S1o}SY831-||S^LkMaxjdx`VsRLq(cTx&~ z2#Hk6MNlK`@)mX2MMUCxUL}eag}6fiZX>yf=sed8jJI3Z0}OA)x3S*H3CJ@T-YGSr zb6W9;iVpUL#gA-n0I;Y9yv1IP^--ZR!Ft2L_P$W7)h;X{ zThdyZ}xAAodJZ{E|Do zd|m>}WSOEc!e?zKPQjDt8Lh`*8qN$Q5W&fsEX?|U9e)9aZzC|f?j-C00000Kl)aAAKoEd^^2tgQgbzgOOyWoUuTxRko>VDvPO|g}DebjsQ)R^i@C<41bR92%Xm|rUYIZhQ#J?xeAu)}A=G*z7 zHH`oAmvZ*<8Q`MdrnT)?FlfS+tn~zg|Yul$jI@?d%J-tw+`<$mM+qO@m z?Cj-1l8J1rh}RLaDj+49uyhd-!@DBTm0P*fK7`iKLhG&sNV$U>P56kxDl|-Snnd>? zFMk6+eu^dMetDq2%1a6Q=Zo(i=M2igHwiNTX)@KX^2BuyJAetJSEho9tBauyISDF4 zw^HR=nQA)7kXoHY39XJ{1mZMP!&+kErYX)A=Lsl#6Jm>YmKmfeopOiDL`uF2v09Kh zg34pU5l9#oHqeTLRZ7M3z}Fp_7=CdBh3R7&PR@tXS`99S%2s(r72yuNc&ZY0NM}{{ z%T(PQMk_tmwE)e7Gc_Wme^j5@uv{+!MhoK_ajrrLU{tOrP3<}n??QI{C0GKKJx~os z7(0Owf-VA4(JQkHkzWzDdYwt8_d96NtF|VBT+CVRMP>qb=8sgw>R25U#b{2OZ9YAW zt5ZWF#8N-qF+4O~mRi;c`inNe6rv%Ge^h<}er2JpyQHB{00000NkvXXu0mjfH6=Rv diff --git a/graphics/pokemon/smoochum/front.png b/graphics/pokemon/smoochum/front.png deleted file mode 100644 index 6f492748097e0725172a990d9b6bb61314eadaa1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 483 zcmV<90UZ8`P)!sNtH*VHpPI=qS<4T3f=}@ItUxa(=#b=XE(fjQeH6TFEX8W z9tP#7^n$cI7iovT#^sBjE6vv;?pvfQ!gV*ZN*ukzM*+Z8aLDzyfo!f3Ty1Jd@1m_BJCu5Sm zknfOAh0=P6I|Y+PhHfo5{w{rz?IiY{<__(fg#N$#zkBcA9l-zi>tR_${^{L)X;v6^ zC0(b@-ST=!+(!x^+UjnXgsKcQ^1K)5Pn^0c1Nc$EdC~;iv5DJF6#(i;w1`azX(%e| zToeF*>s09as}0~iA&yY!pudkXK|AUlHx&6XvUfp}h=8A2N*UlypU2sih^GudC_MCQ zp7bB*r<@`%zFErvkNMF!7jXg9=Gjk)*mQvpDB2tI)lvdZeDpx15-<`E^+AyVfm<1X z(^99YWfHO_d^L>NbJpYC|wkP<6tT0RhJ6xp9CZOHB$n2VWi3z>feq(RL{4%2GpMw00000 LNkvXXu0mjf>k>Uc diff --git a/graphics/pokemon/snivy/front.png b/graphics/pokemon/snivy/front.png deleted file mode 100644 index 040a32f832c3ce6c628d8451c544fccf816fcca6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 487 zcmVIW+lrP6RhTBN!!&S$)DQ$7MR);% zMG&yO!Bs;@dICeAf!P+v>>&|!RFnVf%-rq@v8{hwS~u%+fH)+yUgsnNz=HO<>q4MK zKJb5c&UFJV6ygB(3AiAbB95-E?=FKg5b@~w;Wh}S9z4AeFuozX1c94xU=2Ux{Qj|< z&~FJ0P^WDohZjL0#^?b>O%d^%W&}owkTHRT{gN!lxgj9I1I-9k%vbLcvAS zTt9+{E>&_I(qC-=00$Hv_eDjZ^ng9g>Od?bNP9ex?MW5;V~hh} zFUL=Mv=Uk+zrrqJ7^!cI^NLW7|E+%K$xGrzt%uMTm%1i_6098J$&xQJ> d!M6Uez5q1?VOnys5vBkD002ovPDHLkV1f&g&r$#Y diff --git a/graphics/pokemon/snorlax/front.png b/graphics/pokemon/snorlax/front.png deleted file mode 100644 index 62b04645a55826dc89b3802dfe5876f794dec7b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 799 zcmV+)1K|9LP)Px#Fi=cXMVQc_5D*9uIYCm3tT9@95II3}q`l_FtoG);`1ts6aB!q^Qufuo$jHcI zK_Cz?I246>RsaA3ok>JNR9J=Om+N+{APj|PBQ&B6@Bg?b;U;pMW9MhnuGL!EA3K=D z>Ff130{Bj^HvNd_v^kM^On}xq1%lo=GU2}gqUX>_&+(7|O+lu!J`*m$y0&o%bHpr=#jsd0 zK$R36{6k$9U=?75F*Oi1QGV1(M1a(mF>?o!!BG%<3qX9n0|yy7ID!P=ZL?l?4%oIu z_~Q+5P<4vpJJ%Of3$SK0(N;Xfko;kBGf?VNc549Af(9jr!yd$rk^_>bz}gmWMt^aV`rVDYGwF{h{< zkz)rPqpzZrV4ffVOGCJr#2wKlPzdRaLLItGzF$LO-q@&ak4mvV$#ENCt-lCu4Yq`t zJ`>b@G6e!?3Q*ajni8-wP?9i<>DbMIfd#XgCa)#H#ikU(uk^t}d}B@t9|7hofFtz* z@JW9GCIq;Z{!4%h-L=jEGzUce3?PLe-!vs8{VWHW((=Nj86oHq2t4pc01NvDXiRWX zZ{ki=kb#tJnq|eK`nTGT9D?l{heOlHU2!KKu14MtGY1v??Rs<+D1Vp{88n(>!`{i}as dv2yt9_y?1nHg>$pYWDyD002ovPDHLkV1ftzVyyrG diff --git a/graphics/pokemon/snorunt/front.png b/graphics/pokemon/snorunt/front.png deleted file mode 100644 index 02c9560981d5d32fb1de0dd2a1aa4ec9933d11c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 509 zcmVv9G z@Dqr8L6DA4HlIN8f{u6Rs?ayw@_xzx_ueInvaNqxtzY^Lt0M<=t0xCE3;NQ8ZUFmI zz$UshLu-@3?Z^O<5M3hCIE*k3B^eESfj6=Yjii_pN1UNWh*;>m;)EKINT^H!aT*Ah zSt}ru5CX7bPGKD!^iX~LLL`o^fA_>F3d}6@kR3u@vuWI0#S#mSf?s=U+X)d^O zmEF`bNm7bM$lbQVhPbUZ>s(}M*k%4%ZK~HaCcwK6<76?bf%jF+wNx!TntfDn$@Pka zT;SLt<-?54rdAmwBR(! zyb*gI4me{Dz=VXRqW~P8yQt>S1fS*%0Mq0288HAKYoN#PGs0tv7ki#B`X+ZU^ZHE> zQTXSaEi*;&=l7z%lF*5wjO#-v(f>KN^%v_4f;*Jkis^E~00000NkvXXu0mjf-S6nU diff --git a/graphics/pokemon/snover/front.png b/graphics/pokemon/snover/front.png deleted file mode 100644 index 9dff7b2a51dddb8cef84a11b9ccd10e6cc4a8599..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 694 zcmV;n0!jUeP);0006( zNkll&H6vrLOLKT~F=o}LG0OS=_VoJyrStSdQlR6?589qSeW5H#7RNeBV^WgvQ{{MHrXTx}_|5Rree*x_4lXB$@KAiN2OK5dY zgwWO%wC)Bc8bE+vJrv%%hlG|5eV{k5fypR0Ky?q4M#ek$0C>3ps_2mc3u8LVHXBoD?v*=c*>qz-~elnG~3K zjCZpH$6tDQ4jY<~0ezJ*VKYuLz~s&n+pG>zQ~*@~_Qe-|{z16U=ir*OiU58JN-;wL zKKHXjaPIs7a7nd~UBZCUM*n8=ld;*1rxsI=H3t|G(!kAD&8k$o0F1FQNdZE--zgo! zpz@_dZY`@;C*-RF#)rEwJCsrw3_jjk=Y$}H29$n#eqCrjY+OUlI-jG*`#aPhUfyZ_ z6K&u)^(zQjI99K96_efrTv`^!6?MZXXMnmaN=Z>S$^gGIphfFN*)Z17J^;n3#0nq7 z1l31ePxL|u#4-kGs}&W;7VBP0`3NDdKs+4-;vK38OM8F z4{SrUNH8D@HX7Y9*Fwfg6blhXTEOU`br6amO2kSRkphtl5W*Sjh_c9Q)pMr4h6q3B zda&V(eBxgi$X!aTS6k`mfMAR80CwID2K1VhC c-|AoMH@18J);(6;cmMzZ07*qoM6N<$g3&iA6aWAK diff --git a/graphics/pokemon/snubbull/front.png b/graphics/pokemon/snubbull/front.png deleted file mode 100644 index fa6456d891f20ea2a5d0ba06377e094ecccb955c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 594 zcmV-Y06STG2Q%KDwRlhhfjc zt}gY%(Tkh2T(PSFr5GXhR4Vw4?Qp9Tpgfd_6%nPq4CuzVU(y)L7$(LHi1jr6$A?7m zTVqa`$RKvg0}DXr8qfox^38gU3F$uo7+|O@x7Gk873~^RwJumk9bkl4xi;pt(aAON zcb2{wsN!Q~PIjrtH4-}Nw#qBM4%P)Si-&mBP^;^a04t35GkRc<|9O;NG`m>6cJs>1q@t(C^0(qH4Rie`~hy?ChSwx!fIn?sJJHx`A1o1W)31=7z3+vsbW!h{KePC z48TYd78qtQBetyI(y3n54>8Kw@3Ml{RaI>@FW4Enft_H5;QG_%N;nypDCny?7cORP zk4Y){=3M&Yn-`i2Ls!Thw=ud>fiVh`7jkYWieg{f(sGC$kSTghKF_?L00000NkvXX Hu0mjfN}#d? diff --git a/graphics/pokemon/solrock/front.png b/graphics/pokemon/solrock/front.png deleted file mode 100644 index 24336f16be3a02cfa3dd28718b3d4c54a23c57b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 922 zcmV;L17-Y)P)s{-0b_@_r3Ssw~MCDJd3kSp$Adpl|bUP0Ah21 zczzzRZx!bNY%Z`Jv5fH;upSb1=AABr>%Ud8I&cp5Myq30B{QlGW8bg%Y)6I~|C)|=!0uj$* z>dyML*?#jyDJg?S-f_J8j2pUCNx_?EM0k1l+fzUC7oc#b?kkJwae^fn1&mL%)t*{+)Z?8pl?wdk`23}X5R5r7b8WF( zP-?4dDl-UzaRoXl3C>tC1y$|b-U7|+x<4K&Mb2G5CqLh13Xs1 zxR)FN>y++-75*fkWjsjH{Y^Zj?lY7+=9Ge_XFQzxUd-e#RF8m%=ClG7N>GOu`#|db zF96y&4D@~K@M>aJ_0GQiOqnun83<1i&AJI~_V#Ix0N}vDO%WTU15I>YYVFFfWv5!-Y0w;-gZ;bvC7+rgR7F4JFb2Rw64qH-y}P3oaZ%?%JUw z8-5$h&wy;TS~Wsk3Y(aHArQt}FwQWu9se>2YDI0`U zNeMc-OwhTot7|JOt=2F;@)42e$xI5TVx)70VYq>fDHpNJ>Ykw!7fx2gx=wmwi{Mfy z*9Rvyk-PSrtiX9TOz6Bg%$2Y!Z~as;>6Qv%iRV&~%{kPSa!bckNwgQBe_(XirqRHX zZ5tyX8x==;!wXL5>@UF49y=V=1bY>gW9dk^hr_DVc_SJq4*^YIiv&)@^Bt+_Q2;s- w|Nbx0@bMe~jEYkJ4?s)KNued?0cbYEAG`b&1okf?pa1{>07*qoM6N<$f@z4V(f|Me diff --git a/graphics/pokemon/spearow/front.png b/graphics/pokemon/spearow/front.png deleted file mode 100644 index 052422e9ad18f9010f8043c388c4ea2757ab8d71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 561 zcmV-10?z%3P)Px#Fi=cXMVQc_oKhIYY9MMs81Af60002)QcA2rO6JwH|NsC0)y@B;i^a5@dnqZ4 zdtzczN*M^^SpWb5uSrBfR9J=WmD_HGAP_|vaAt}K{Quu}&!DGm(&QiyeW{Zu(XbX< zE-{3so_gv}ifFVktqL|X#JH^rq6y-*%)5ZLRY8i#z7YfzBk_s>V@JDiTj7Vn9WjQ4 zTH`%JwC}mSn0(@ijgCCUiv(4DMNp0Wk>~Ls`!043MdE$e%z2&l}SM@Xa1i8!neFPSjSLBeo0`4`d)y2Z(*;}#HWHW z1v;?~WG5G02M&Ze89prt$rcQKM*(XVp>gXx#ajqU#4kbbFmP)(1QsK49Xvo7yqVp} z=T~6og9B}Bw|1WQlWU`T@a}EnJ}&@loln%VV=CqYd=!Iq*1c*V&{{>vrz|J}Ryzjual(7)A@Wm#}p?weOah^k*J^|=&56_Z|B4UTaT zA!4gnQXmeH+YVy#KwrYqK_15zrnd=MAPNvU+5-<;eG<46UK+*rAS?m+Y28aO4*P*4 z$tL(o0f6x6E;;-F_rC#10oNd$3<%DGv`Yi^5Hr9Qq3n`RS?N@xB$bvpmtCL$=t${H zDIr@PDWK7CJ2!4-N?#4B9+-M+CqyHp~;wEDe@Sv6wq9SP{Yih&M1Ioj)MFZ^z?0B0zd)i z3u>GNz*fMBh+(#KV+~L_E35srPfg3$8*+CFv^RnAc2K6bwA}@`n>OqOHFE^m2y(Mc nPRq)a7~GKR4zGq)a?kz)P+divYueRcs}l*jH(Xa1d#)_< z*ZJCN(7PT?#)WUv4t<}#clY-8cG>0MVjXU-??cBzJU4@GuL%GS8bOo!BXBJ+i5ffe zePC`23{z~#f!l3CuNt%&&200q7qsU@$_|Pq_*sk>If>Qc{TeDL)b+ zk_R3Mv8VIA{~rPKtv_DKQVzaOZ3NEz=gv#QD1|1L=3b|tU;Os+v3V9>e+7) zU|VSse*;Nih=IE9MqIYYWC4b#f>|O-q?8=kwz{i^NMlLKsKb(g)}WESP32dX=pky0 zpbwmiD=A;mo3y#Qh7!f{MP_qP{rSf-IG18>uIHiKK5qo|XbYe*o9ny$Sv~>Iz^g>% SP^5eS0000ebCPx#Fi=cXMF6nq5D*YBNDvSZ5QyL~sPJG=uxMbIpo3~D#k3e|YIFGb`2Xfgy~V|Q zF+uKHT5SWU^8f$=dPzhXL7=-&KJKw94+*x1;wkh2Pc z$Nn~eXp<08A4c(pQF*>epcq9W07;rE!y`htu~GQ7LEyBr`5M7{&jILdM1XnQuy+9V z)WTN)TQ&)!5R^BOY=A@0=z<^s;1Y6|9{KYVFFj-<0=vwMyi`3W)l1jS>Q&8;(WI yMrZj2usgj2s7-X1uk(KIKlQECeKoEsjx`N6+Isf3EX}uO+q^puhM}1HkD)a!5J$VIK z0rY)yRizt^h)d{ z^`Dzk>cMYvus~`7uZ8(BdWCCsI0VMHyaS%!eo>(@S$tQPH<+FQmgQTm#OolyelBID z!k1v|n^GUnoXVs$6V|t32gbUW_Ya{N2Z`Xfa;)9o0Cv{ESHA%Nh|imh<9j0j0000< KMNUMnLSTYn_Zy4= diff --git a/graphics/pokemon/spiritomb/front.png b/graphics/pokemon/spiritomb/front.png deleted file mode 100644 index bcfd704f636359310eab9bc8bf74217c8e3c4077..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 766 zcmV4H*FrZ7m?&f$?I2nv%HP&dPq@sYVOt_ZM`c(MT$Ne#$UO9?1}V*{jI zjO9Yff*^*v0Mba>QSXG}DfAeilPBq0`U{Gg)d2U8JRHQ~=wqLRijmX+54o3On8d+o zG^v2HnJ(~y#8p6ou(9oy5h=x>l={m<+W} zi$X)w$_j9$Oac+9Q-$6uPxoe!%e$IUPN`mGUom#^*#_;Go$deaCz$n$)aUoP_e wuJN2Dir67Q65|D*e;@BSrx@P)KlCe(1KoCR^DN>|db>RzgMv7={QqdsD z45#%xFcJhIh_d=G`|K&@ch+KOD^)CF+rMK(ZJ c!bymJ0Jd15A=ddq&Hw-a07*qoM6N<$f(km$h5!Hn diff --git a/graphics/pokemon/spritzee/front.png b/graphics/pokemon/spritzee/front.png deleted file mode 100644 index 76f1554b856c93a4879421687fe7ea1adeaa758d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 549 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|e#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6-A0X`wFGcGJBu<-cMu>vTtBcbBKiw_GnoY1gvc%dQj2=)jtDSQ{^ z^l`89$jY~2Ja8wPLE$rlqboyI7K=xreS!&B#cUbo4BmZQIvp!K1*;x8b#R<=R1%7M z%`5248MN1&C1uKqsjdF^G}c|e(((F*(R6*a#%a>K+LNa^>FIv>rRk}+K-bUg;K~=f zu5Hx0C#SPvO8dId+5;A$a((6tLjQ6xR?al4VK!A2c*MsbD7NXwJui>!_aFEgOycz3 zh`7&ETu>q3uqNZ%?!IFYD=xiz_1x%ed(N#lcC*q}-xu_?Nwrn*RqwqRmH3t6hFU^e zqs00He|NgDriMr<`K=SJGJpPLD~I>4rj4qmDpk9m9D64jH#I?1ZjJWFX`iJR%;|T2 z))Rd_`Hbkby!XdFrzZL=k*Sd0v#fWu;`v)v#f39lPx#Fi=cXMVQc_TAZXQbAzi9DdwzN|J7<@ zDFD@!QqrsuH2?qsj!8s8R9J=Wl|greFbIT&4H`|f|Nq~XA*60kCF!NF&)LHseDehu ziOcfn(W5^uQZfI+{!*nhi*P$MMc~^%Md0-2pCPb2X%fKH{Tc-RM+q#w0$Ep3WE8M@ z2_mvGO#s9JS@Jdo$lk&>2jH&=bIu!$1LTGI`xt2gutg%M7|k1q98 z!B1m;B>+(h{Fq|{%H_{OX=)0^%&5W$avT@z;oZjh)`J2nb`pR-o(SOv=oIR;0?@CS z&;@k^%IN^H+X-Dn28tQBF`|Y;0dm=gMiDW1KIqEP)BjE6vs~-3Y0FrC>i8J2iat{B6*OZC8vn&{q+9-|GU#M)|B^%{k!(N{|9)% zaraJ&klXL2kzl;vbRxPP$dQctX>J$Au?z4t=V@0WaL`SnXp}faddT>5Ss)rkQ7@7G z`@kf?--uZtNm2^fTkzbpim-h;awI0ftB>afum)YgpNw9AFaYl@3dW6@dkv&qsL2Te zNAKn&aC(p{8{+7bVrCxqB~&WqsR8o2;?e~WN$q1U)p;t4N`rA#bq+9jH`Rj#~i69s&%$*QKx8Z2IW&g)ZBcaSoWG)`#stN8|dcC8eqQr`9^AwrQtO zzW<^1xGe&D{POnZ4iLg6)Qt*D(MSjYiV!LmEA!8*Fc9HJ2@y5`CI$lFLTKG*o=6O^ zq5urK6deF0YGS4w*EPPo0q6iV^!P8ZhAXWJiA*%WxAhtU;@ZnLq1Kf#xUNI(&Xhmh z{AyYN=!`fPUIQ3HYwFl!JHQsPX*_(g*@ku!G$8bHYk_Cm%na0NP+6d=5twOWOv8E^ zTyB5k9&EQI1zaqH!oR#Vz^$U@I9sAGe*jS4jzy-Ij!WMjCLeb(76AgT%W+^@RCS+= zfQQ2UK;p*+z<_ve`iXEq5MLPC4E@LWdMq3bZoAG9;1+N-#&d%qVEl3dm>R&xUEnC@ zyAsUa3><;j0xcim0|Q_JpBRL#;fnE>ho%#8Xf1Hf_NL0jr2#HJ7uL)44K3j>nsokr kP6N|vu}jo)*}2dE00^)CQ4!1DVE_OC07*qoM6N<$g2Z5SUjP6A diff --git a/graphics/pokemon/staraptor/front.png b/graphics/pokemon/staraptor/front.png deleted file mode 100644 index dbb5a2f9592fff6632c8d5fdc1cafddf06a7bfae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 781 zcmV+o1M>WdP)D{cn}Z}SWsA)KtS+NKu|bHn1G0ISYWWQu=x1+ct9ZdkSMrd00000+B)1(0007* zNkl*bD!Sd3viT;MZvs@#qI!&c-k>UICz3<*T$(r_G>j5s-@xEae z>V{DWlt8Z*0s8kPZbv$JjXRy~#J|N`O*x?_GY5auSne>*aiU8Q&w|MFKON0jWCr7;TQ+H%?9=r8_)_OsSdYodB!OK z3^Uen*#)lDQmaMbnVeEv0#KgCUF_pD0QMoZ>6E^Z0JBD%U*J?q1oki_*rvS({1G1x zGe8^kEiiCNW0<~Oi0S}fymcTWpZn=!)}n-;=JM!^};XgovT}$ycSWo!m+4r$T*1NIW;y06Mx~#_=3}MDyGx*75S&Dz@auW_6cC zAfF#ca~Khd?xT}sjsvm$_3_~G!?*HAxtT9Kh>r^YAOR|t|8e~WKqNE}MA)XI00000 LNkvXXu0mjf@GxID diff --git a/graphics/pokemon/staravia/front.png b/graphics/pokemon/staravia/front.png deleted file mode 100644 index bd7c8ab4f143f7d5146230b68703d1c3b00bed91..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 590 zcmV-U0d@gKp=2fU^qB9_*g&y0000000000#4bMd0005m zNklyYv3%n3_zij+;4LZ zCG|eHhA4d=AVeaO(;4cyEQ#fLzyt6cz(!{PG6U?C0w~e|8x25uqYyX)ohim1RB_Q} z0Dm&S5Dh#p0U_YVclx-2q91<*{pqDH{BkvK;RzV&0HEH9#k|3->OZt@UK&tQU9NOH z^b|dg0EB$d7zk{s!$G8|M^k+@#Uv$ET2FWgJRITtE6lRmYi%Qd1x&Gz;Tg}{uxm2y9;}lReZuH=nrt{qznOHalM~FwW|jpOhHz- zecDz^DbqPG0tYD`v~Df7-8ll09OQa8ZB<>PZhYh?2wkf_YGZmJ*8Hbmd%zrw>Eb7p zt~aQgZUCaaFQgg#P4b9Sf&S;U@II{6f0NBdIFZ!J<64M=`;*k!qv(jdNgW;L|K7?i zIk`#bbiBG-T$kj2kw~GE%hgX&vgNPe@iipKFR0jJ{G*6l2-^#`WJLlXw0wHG{8fp} cEBc#^f61D+g57(w@&Et;07*qoM6N<$f}!aG;s5{u diff --git a/graphics/pokemon/starly/front.png b/graphics/pokemon/starly/front.png deleted file mode 100644 index c188a7ff5a011a0d28d4f529f18e72f012a3f8b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 532 zcmV+v0_**WP)_|Vwcct{xVfH<&ND5#j2a9CJyU|{%AKmY&$wv+Rp0004> zNklt91bTtk}9En3& ziGy*ICOX_-fqVZK-@<0^+R>QsB%PjLpXa^1UJYZd|0UoHJ##4-`PT^0)#P`3=!m0FANRC8t?&3k9kK+S94qV~%qI)*cQM zUS(za0*>R{0g!#cdHy$G@rUDACkOyi8iauaXT|fw3w$5Nu6RAvz#s!F$vHc#g&GXA zVF3Z4P?d6?3D0PxiKOKQnG-1`r-~0Ros(?TuSzPV$EhkICr5Z1@&kQnsuRQ#;GEY$ zabD&!VJN*8`l`!e*6c4Ku07rY1j4>y5N>}CZJY1nRw!?eX<@tPaZZ6K8c>OVK-IPX zhy)G%rp`8!PcznL?EOs#Y>l61_uEHf#V)SIT$WF|?o8+7iQ`k4Otip?($BcoU+V{R WU4Jbr6jdGo0000M diff --git a/graphics/pokemon/starmie/front.png b/graphics/pokemon/starmie/front.png deleted file mode 100644 index b3c4861d73012c520b25e74ffed7987a7cfa61e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 831 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 diff --git a/graphics/pokemon/stunky/front.png b/graphics/pokemon/stunky/front.png deleted file mode 100644 index da228e831ad1709448d32fd0d693aa6ded82d2d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 579 zcmV-J0=)f+P)KQ!z`!KopKQ#I-M}6r9p)s!&{#4=jj_ zwsCN5b9EIY6`WcFc6Jb4rAuAi>Q8Xa4D_r1G&mh~UM9Yoc* zgYX9&UKK6?r&7R2*rW;)*j3tPcuyxf5u>wL2X`%+gJ0>m7u83==n zpnwvWiN_Y=XsC-wlZ`|&AzGOzX&~_urFv%EzSG%zO6dY9G@{#*2Byw%~45SMttntv1`8I8~cKEoXzVd^@HZoy!g?hB1 zUn>&&OVs;%3k(h{>n4gj%Q^MkHL4FQCvo&}{B%_ zmS{Gb-msQU50006O zNklljA6vxje)w5ms7AE)TA<9PGENo7m89bmm_3OZZB8Ig61THHBIBN!k z$5dvqntp+NgAROv4on&0JMhkF5V6n6jyTCa%m1JM_ujjwGh_dUVOY)%;OWarmb#|Fe{FOyw)Y)ae20Bu>%8MG{ zky&TFnCdCn57DTPNAiI3*cVI6Dq{M!+tnIHWwzg5VfT0F%C$NuS{&IDvls$+(G#8QnZwEYcddxb_=> zrJX%MtR3vn*V6{T^(N3>0-Tb+o##z}9nNT{N&*~q@!{FmNgIe=7w!r0wf|KyY62W0 zgohd+|MONBj2%D~7cp&u7?{7=zDa7}>;9P(EzHLBB z#NVO){%_#Tk7x^^2v{21X$?>WFx#?%m=ln6pDs%Le1I5@hsPuEYZ+s;1;BTRSbg)m z05K#T-*y5VU4=+cH{fuEt`wa?kiwwHbP*8w?fcW_M&=3%q;P}|s*tod3Jh&}~000B9 zNkl098vgmQXx5f#;$GUp$kO*c^S-Y}@))82 zZfK?5eXKkG(xupXO*$O3!!VE@`yspB0<;!5oG<`FFMw;1 z3d5@`j&#D*q1FR-A%O4<`GO2X3G4+jf~A9l??E;2+P);=R0?#n2;kr|PnH?;#ZdtJ z&yWX6aH%39GA8GRUD5YK20$m+14o1%A;2<$Ox%-cz*9N^&~gvR!5UCrq43H8c+zF? zP}9|S*lBwgK?YFEb%`(ULQI!w7;AS}_u@Q1B(^_^LP@i?qnGI-k~^pi;6c-7as&L<@G;SLT0h9VyR$twV882}zRKo)B$`3eB+ zW{nE9^8gev0o^>1yA8w5)(gWd>|}tJ2dZi(*TA=WqH^T`?5bh~0OK=&mIJ<35de6+ z5l|73-q@UL8=zWVXKY|+4d;M++lTYVh!7>)($@QIr#M#nKmGIX?7-M-{a+pbL-+fKR5kR42zgiu z$Uq1&_A7uRKajBl0yU%oAqEIU(^w2HNFo+dS47&m&`CQ&x0R9&1n3lTMIB`;zKWQ`eVgX7R=Nz9NB!zHXhF%PX@u5mQ1x5(Cp} znHB;aaX#D!-Xee@ucTREN&=7w1ZkSipMhW>@Fx9F&GhGwnVC=MQFg}(0^euJT#FCX z96SU*r^ze{v>sE}l4){KLaXOF zT7>K_V|jj0=uZGhuw`+R1MK#Rr@~q!-awIqwVU0ZL9qc8?t8EU3s7vz7CmsqSMKA^ zMcIO51X!^QV4Kw)Ve=B<^Y!d<@v66amhySuIIpIazGwzRj|0}1pBD7ecBzaS)m9dP%{ mH#-{eLjH2#e-5wpSN#Sp#?%@U#aFBV0000-_+X)sAW(2Y zLqI?v!NcIk4~7j33@)4iGJZrfGG9`&4d%x`EnB(x} uowxw!otT)A+Vq0E+{sSn)~ToF|75Lw5PqiJv*s=+$UI&BT-G@yGywpGxu>K6 diff --git a/graphics/pokemon/surskit/front.png b/graphics/pokemon/surskit/front.png deleted file mode 100644 index 32508e31f5b0e7edfbd2c81fef656a087f199c2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 428 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*BKWUZ0KP4a3MoLK;Xs# zhKd9Og@}xf3okrYT=?$*)P5N>Ae;t3{qW`5QwfAu`R7!K~ury65yVbH|io2su;Img8 z6FPp(_{n-FUisW6>-@8;Gy;;Qt>2UIw}JH;_cxaVX0>{!iyY$umb>V?9Jy@law%uu zQagobv&*?dyiR*Ev|Ux-DJbSMWkr_g%`f4%1V7j4G`vwyJeapX#qW$q$kx@4TmC0R zGoDH8UG-D>Vwd@we{9A*4QdCPJT$N6afc-<%$v1VuSVh`)8F87k%wAa7SwL@{_Z$? zc^!X=#p3@=_ZgfVGWcJ3@f=uCbUmoG;f4I-^}Y{2#j-KHziK1h;UxS2*)OJ}e?wGb SVz+pM0@Ksg&t;ucLK6VMsjqba diff --git a/graphics/pokemon/swablu/front.png b/graphics/pokemon/swablu/front.png deleted file mode 100644 index b7d58d06b0e3444f00abde73e375eeffadfff4aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 519 zcmV+i0{H!jP)pvHF*0k4}!5ZDNIZZO{NTTAMAwWG*d zG7QOS+inx$@Zf5jkNIKGVvX;Ljx)=Ao=nY?9a(_6lqSO|8r)Ujx?nC-nc_>wH~w@L z_#-!yS}CaoO}(Dtq7vaMB^3fS#={0K3%aBv%Rs+mobwP14KOYP3N-M-$4E3>sVh<_ z5edK;D_Y0${<0fR%|MvB9>W7z0KD~Z_|}jkkYT5iuj`1J0WL7O$M7zd%43j=N=E{$ zBW2EY04CrDr~(VYIx3qOAk{p;BPkC7!1ydK64HqP$VKH#;FcSnz!T>uQpTExybO54 zgF&|=@PDL27{5G%k$9$E?Ni@NHb*Gr&_ce+1F`87GAMv+llO~H97FijdTz*9L}?SL zhQ&Wz_M_+lkDd(}#UEsue_9L3?R%e$Mz(XQg`VSV@%Q@g`Ud6Ln#M`84Eq28002ov JPDHLkV1gN_>hu5r diff --git a/graphics/pokemon/swadloon/front.png b/graphics/pokemon/swadloon/front.png deleted file mode 100644 index 1b7f74db5f76317ef68573fba81cb06e7b1f29b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 510 zcmVg@G^+O5FU5ub^(;r;*_uxU3396Xwf1uib zpzYS(KdN{5i`F~r=Hg2T3EvOz-W|a(&ULD4S7eU3>b^cNvPuA=y$AX=y#IhYR097v z@Q#DZUBCq#2URCYfr9H-h?>a78d}i^AONVCB7mOE!P2y-0d$K7v8F{r*T9a|J85OK z7{SL_Jw+=ECGc&Ws6irt_!6B_GEtval5*++$saQ{X!KJ)^GH5@mY}NwcbpS0>Xs_c zs?ooH|K#)Ka-ji1Kl~Q2zpk!Ac^KD+pf{6XzFN#Q0B+u1KI9lwg2QbHz^D9+a~E`= zE4T2p&XoXMPFxRkKzwX)U{`A3@A96b1VFcdvA->vL$d@JV^;J#AH^mMwrhx-*;wuo zjc_~=Pn~Vd28h;h|2`s)naKvZ$u?ypCh4#YP-LC_VUvpnm}TjH2^&es2Bed_YhWRU zmnC4-h+&YnxRF8-BZ`bB*$+`J*CACu__h($07*qoM6N<$f&`G= AQ~&?~ diff --git a/graphics/pokemon/swalot/front.png b/graphics/pokemon/swalot/front.png deleted file mode 100644 index 6ae76a4f36d82c8a36ca452ba9d1848f6feec993..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 696 zcmV;p0!RIcP)5U09&oZ4m4M?6l}hK&Qn(076Hv!$PyTerAZu;Br2l03|iM?gWm$UCw=oD2I;(EZS4fmbA`*06$wSvbYUo zS9Hg`g`Z|w(gyT|VU;vXlBaeQyU?BmIWezsGqts!wsvq=xToex+7#Hi!eFvZuAS~Vyu({#DZ5_yqqTo~H9N-pC z-9i8lyaNX|z^iWYxez_Z#p7lNK-d9bz9Rj13DmCiQ#k`gSdPF;ewn(H7dNES_@aU5 z(Z@PG8$E*ib-B&q4J^y5_n>S~s>W~vI|tbA4d75>Z{-kn0iM|Gc_Ya{2CQl`z|&Sb zMAUE?@d4zVbbiC5!wlO9Mveb3c|39bPZ_e#SY7XZ0h>ucuT?q=#UwWWG&uqX2q@FGcYH0000# diff --git a/graphics/pokemon/swampert/front.png b/graphics/pokemon/swampert/front.png deleted file mode 100644 index 7a86a418d8d1222701f62e80b12f0afc27386f7d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 933 zcmV;W16urvP)*!2?-KY^u5ka|Exa>5xYOe9W#Aa*X5a;WSa zIi-F94!i=qLDO5Mp3;g#k5KUdD4kh5iBlr(Rrg|GKhMt2OoCzjPs*5qRdVzr11ll}WlllOf!oL@sbAG8q_<$;xhp!>i zOx6OEfZ!aJT7ZV@E^B7GQUU>y-hr<53MiX^ghQDfsX?wUT$Z2?lj>0BXX@ zA_RlDk4@h9w`a3j5)nY$kE3}CgE2Leehz#%n9b@z*tc7Vy*RkY3Q7G#0>w|jU^9s{ zz#tx`0gmFRkH_3o0zaQeN!+(Pw=`jKr1#rMSs~40$QS(m%o$ZWw>Q{}f-_DGyA-ZV zr(IF~;jum%N4WFrlt36W@UcUJFWf;Y#zBovAiyt$Itl+6n|y$=L5Weds$qo3Pfs2C zWnTl^!w%n(Lebya0(*T1Hiru?OH0t^n|UVkBJhxQw8US+8f-v?c1k9m&_nDzS$5h{ zo&>N7ZU}zUFk2_&Eh(hbqWOV@;BRshM61hze5j(ZEG10Z_hC6w!sbsl0~ow00000NkvXX Hu0mjf{%frv diff --git a/graphics/pokemon/swanna/front.png b/graphics/pokemon/swanna/front.png deleted file mode 100644 index e1b58cf394ce4378e7ef09e7f983f5e34b79e456..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 673 zcmV;S0$%-zP)Px#Fi=cXMVQc_l$@+uYJ>m({{R30w8hn8VuSB{oH#&O_V!Awq+&sHtYVb3q|NR* zN@{9qL2NK*8~^|UA4x<(R9J=0mJ5!;FbqU%$F5SE=KjasaXu|{p(LraS_>qQn3u6r zY){jF4B}~Gz5{T~PHq6$u^R`#yJ!ON7=x9C6j{KC3>1P{RiJmozfO`vIq#iR;hd1h~~z{sZ7nUrRy5074`KJAm<2w?Ef7 z8Gpqi17xh4k%&IWjldfxq(A&{rQBr0_e#=9T3zE(6#<7ghT&I zy(~i5LeX#QlL>CrPqY>QK=H_E9y~6QuwOp*HAmn+G%5!i$a50^f|FCH1sD zeVq?U?)@Za1$kuysqSsuFdMvueK0~@w<@D=UJ418C8~>8&x9-zFTYlwZvEtM0%R26 zMXZ$K=OKcJ4goo01b}+a_VzN*euw}@#?1Yfcd~Lr{1@>98bKA&hdZj?00000NkvXX Hu0mjfLmMqH diff --git a/graphics/pokemon/swellow/front.png b/graphics/pokemon/swellow/front.png deleted file mode 100644 index 32345b406635d8163814cabcf580523b5edd426f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 731 zcmV<10wn#3P)Px#Fi=cXMVQc_DJfFLT63H+QbAgKDM4alAUO~a5K=)P|NsBAwAJ3EG3K;llv)rm zF*#aVT4nbo2mk;ASxH1eR9J=WmeF#9AP_}^%kEWE?f?I6cL4MoLzZ!T zijeW*eZLVhWWgcJ`26~ME+WoR5U?qnHMSc-2Fij_Yk5AGMTpG6S{8$=v6RrU8Njlb zWfT)IJN=xyDbxuN6pJayN|<389O?nk4$*L$4J14W7>C9(?1k&IVKMa7{0(};;0M##?zYAajQv_ZOHJ=4nyc)WKmjVn!;wytKikkpVVgP12 z8+1}j{z9NTN)n))1eblv`zG%x@?OF^KzJyVqu?F+CT|zWcp~dU#J3~`A0D!102aG@ zh#`^Zy&Q6Y4zCZs-JdA-5eL3l(T-2^y9AXpEKKgv%UjNb)PZO!5aol6>l4>IY589k6Y9@dy9_ N002ovPDHLkV1lYkLeu~N diff --git a/graphics/pokemon/swinub/front.png b/graphics/pokemon/swinub/front.png deleted file mode 100644 index ec191500981b5874ca047e5f823234adb928a092..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 370 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`7zFr)xX!q+ zz|oLnPIXqXm!W`wz}Y#~mYNLTy60>uuAUMV1yqFwd@riV0fjzzx;TbJw7#8kny=Y_ zhvlPH;e-G6JIdy5aay%7$bX*m%T%$=d^ynqERF&e3(o~h=P)doBKKnFt4KzdcWwfo zE{GcDsZO|8_VdguW^nBb8R%;)2;7tIt%)hkty_@9fE}1>_5Qte|w(+~k zvJ$Sq;4jDJ?*BCEozOVb)4l#f?Ci+f{AB_x2k%!fzKY_Q=Cv;@9~2y(u6{1-oD!M< DSuB_& diff --git a/graphics/pokemon/swirlix/front.png b/graphics/pokemon/swirlix/front.png deleted file mode 100644 index fb40d972f9e3dcf801c080ad8abc1682140d3de7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 534 zcmV+x0_pvUP)Px#1ZP1_K>z@;j|==^1poj5Fi=cXMVQc_kbs!@@bIX3i1@(J@Yvw!sJIvy7|_Vb z`1ttfKzQ(wppY;?00000000000PS~Lw*UYD32;bRa{vGi!vFvd!vV){sAK>D0dGk} zK~zY`?bE+%!cY_j@EbZfE0ku6NXYZhs zlb{dPb8du6b86>;2Qz&?az1Yob(+&0nQHZq9N?&MfF=y(@GNZ70)R`cn<8lGF2yyt z(z+|&KJe^tuQ4KfyVHk9rPo7SwyCnl5)} zY^VbtSBxd#><^l1t{Id{I(g9_>QA2lC>(?fX+ZxoFso%6y8@`>K^j1iZkO9f%p}0~ zHz^R9Vpi^;rcu%1dbvVGR{*ovK8Sd?`2`?9N+0crEAU{%l7~Rpz#!YFn3Z1#8iVs< zjcd%E62-)V%nZ9j@!M(-Mhq@=OSeQ24ibZCCIoK86%}I?|C07d{BXXznB)0r{_809 Y1wb&4E!|L%LI3~&07*qoM6N<$f+%9&D*ylh diff --git a/graphics/pokemon/swoobat/front.png b/graphics/pokemon/swoobat/front.png deleted file mode 100644 index 7a4ccae93c5750ecec244b06e9f078cd7ecdb1b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 889 zcmV-<1BU#GP)WBU6(p7G3Nqz9|^m4u%*y1Uhu;+#z$o0k4L-cPGg@ zNp?H-fx&n0r|*03Njd>AE1)qm73RI_U-O#h*)a;I0cHZ2-V}lhRF(gEf(y9nB1`a# zCJy1Mm=jR81mLFfVn^+ADJvlaRF9>sLyx^dl^7FxDdv-BLox= zF&Jnj3XYeS5TjKc5QJ6!O97tJrw$QvOx44TON`bI6rp%z0bK$R88*1H6_sG7CMhKl zcnqN1I{+k?O<^Iy}V3nt@IEg zpuE}LM7Q?^z&b(x#L&u{e4KsbF$azrV;^(C#-acoToJND8OwVty!&ts;my9kOja0c z=JEylX8#gC99|((qsOe12hI-4i`RoMzbx)>Jf#FsXb^aL<3Qq2%4^6=oKb@q$RbGO z1GJhGIHwfu5Fb)u5G;key^9H;qb8*dxIiV)BDTyAMi*%f9_PFO0qE=C?rpcyO@M$& zf}OJtV^;0Su=jfi^q~qce!ZA7I}NPbXk6*rKvyi#D&zJX=(K#a{B|^|jOw- diff --git a/graphics/pokemon/sylveon/front.png b/graphics/pokemon/sylveon/front.png deleted file mode 100644 index dbed2310832654d64317777522c96b36bf6f8b09..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 769 zcmV+c1OEJpP)4)iG<^Koke?Q?!UoRRfXn6bx|*T?7ZU zBjr=rxZu^r0(VOcz1Uq$J=ntO64P1_b*L+-;kKe7QE&9p5`TdX`7XVaWv7-d>R9N3 z2lM~w?%lnUjnMx!bhKB>%N6qUxSk6xjvHnkFv{&(?h?f}PNQ*@0~W-o_Z|>bEa}*zBn6EJzoj!**?V3502Y z6c^q(Ez&oU!aGyj1-doY3*aBN2*sjQr@mW*Le33x2{(FSj8mOShB%)~Mo16L_~0{_ zNAJxD!FVLV7$B1?igP)Px#Fi=cXMVQc_F-m({YMhigQq59xASqH15D>k+&Hw-ZIXN+;b209{V&;?(Qc5Xs zh_C&tH8%d zbsOo^B9I{d6>Cb7=>lLw9;|uWykLZI0Wcf(6uE4oQX^avaDON7f?yX3q!jrb0W|pE z20<1nC1+44Fr7UysRWA105ky0gT^2H6M#pR_tnp=?I@3CzW@%2zxA`ju$l7!U7-Vn zU=I+wKgh!FAT$@x{T#x}{tKW9xbDRaK;cv^y+>eXy0-QNkVXKtrkI{BQ0o3P5(p;0 z>_I&J3ec&b=h}9*!5Sf^)CtrGu+0XEklOMmKoCl>%@&E!72`oL)qh5K*#&TmfOz;X z1oL=AY)bl#6H(8&X-wll#4DoSR&0ROF>=_eL6;u-az;RwldQIO1WFrg?H@}SGMo3Z zqrQ?lRbcFZkx)=qMcxZjxpPNjfdaN2+l?FggLNEjFxn4qXoKp^<|_^5b*m^`{J00009 za7bBm000ie000ie0hKEb8vp4%0|YngKiN&`$PQ ziqvE<;YvhOmi$1d8wxy@Yy_MkV~beRGF8gf1*B{&73xqS!E!?)MXC~st$#@0-GMQw ziPSeCeLw!b?|XNgreQ5>PuDYhfuJ+So&a=~CL}2VC#r{#E!$H-gasocK`E7h<+uxU zTXxVa%YNMBn7lxpSQ7`!^yc+A)KNFlLI^QR6Z1g4P&uTc9N9tu8*_RQ4wOzb1vus$ zaNev)-8Sg50_-`5r4}~W^r>S_rc6+~l$S4v*kfKsKK>bq>hOu<>m z04ET-lQPtXbtt8v8d#iH=w^+on(Qx&fUr1{9dHD{rkH6m9bNO; zD7yksJuAvCOMrlwQY<0>0D*c_0!0v879AWjI6_?j#j^ZezzA}Pkbwj$&9WB;95V!n z9!1y{KpZNYzDkf<4g-}Y?4C`48YVEO2QlqYgt9My0;rpSN1YCxkB$aq-}le}4u!ut zJ*Y{=i`b#gm|g&p5ob&hOhAGZ#TEd=q`PQ<8O54iFGhkCORW}^anxfF2DMF0nDSyT zyPYX;jz9&Vj_W#dlr=$uSx6 z1c8BJCk-3lhBfuNU>&iKd+%ZD!14b?X`1v{e`>MU$^FTyDK9u5iaoe}*6;VH8Lr;6 zr9nel46D?)_fZZEv<&&}KEQ{jxT$}2@via)oDK!xCL?rB z+hMF~QG?@IM?da6ripL2K_6Y$P!Cf)Wid)46KG=$vEeNS#+{pdTMC(UREOu?m)G}q z^5@-Ul!39fb#*0#@lF0NDuI#Sy8Vg3xO;sc8IkFi_Pyw|ri>yg?LK(e$-e!u0MK*a z5ZHG!>+J==7zJI+W%A#nf!I4~t+%5?;vDNr$Sn$~Pp;5-L5G=B;)YjclwX| Y3mQ2^R3jIZtpET307*qoM6N<$g73?`Gynhq diff --git a/graphics/pokemon/tangela/front.png b/graphics/pokemon/tangela/front.png deleted file mode 100644 index 6115b5b62d4f661ad48897f43e1daf9ac8a78abf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 642 zcmV-|0)737P)Px#Fi=cXMVQc_L3@;x)%IGX%^*Qi5D*YjQc|?EwD|b=b15mTDM9~(gWgJN00000 z0000005wusvj6}B07*naR9J=Wl-+iNFbsn+vCB{U{?9v0He{!xBy4AQ_=c8NUu;Fm zFx++5UH@Hz`ip!VODUqi)fei$^b%t0S*Y~do}CnLJN~JKTBzkpBRUpkAF(zmTO(a= zuw&Ra;#qX>K+#eMfq*ime@aS}I9ECl3e||FX=71mrIo@rO@MG&jq#x$xingcHyuMz zU(7Vdae#j&q)EV(E)_Ud6=EXswJ`+TmjIw`$=(SAxzz&0%f%x?+p>|x+>`(u?uMlM zx*q`!p0pY&2f&p>0N9xUmwPE6HI$JoOmqNXUztJIJ*IiGt(c3PfVaevez$?kx_%DA z#HZ`gqS0OZq>n@FgF9eGh29BF2ewnd{3Is;*8563fX{gc=!u#>#MXNY^CL#s0sa#C zXaF*@?wX~E(<4Wq{oKH_GikB$##xniriq*Z+2ZdffaqWgALGOM;W>*fLiMYI~&5eT)X;GK3>VECZBHG`3;T{nQl(M*)DVk)g8`v1FtJBpA>0 z2GF=x8UP$78yNk_KZLyBqMPOb0{sx%$!k&A03!fqLk?yB$8y7r=3A$_*0QekDk>e` zy~!5`ELOX~w=4SR^YvQS6>f5E2RLHs2fR=KL_rT`cM}1qO*?>Z`lonLoGljtZRA~d c-Swls0Kzj7Wn3>eM*si-07*qoM6N<$f>_xbApigX diff --git a/graphics/pokemon/tangrowth/front.png b/graphics/pokemon/tangrowth/front.png deleted file mode 100644 index ae389e74a8e42e3867f46cce8b4176faca856582..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 967 zcmV;&133JNP)c>%C{<65u zu5ZSG>Aih_lP%Nb2r#9cxXH5ln1|{8R`btkIv+D2x4SJ@^V=~4lbyB9Vzhu{4ZRej zax#Tpt;Y34L6>jn)8cJCnK0{bFwuWx7z|9;cKh0lItS1wN3`1e?=lqJA0jJu8!l1v zB{AWu4{zqu5!Pz}r#biQ%~38RpFL27r|u)GvJxSNiU86_Cy4*i za_a;W06pZG1YjDX^3Hk3P1v!kB7jyQL$LU1??WS6M4-W?1aQCM^#}I*{l3wy1t2c~ zJ++(Ce(=u#{;G|2EXYK+MI@{Q@bdEae%~FOb)I4XAxsZEf9{?Eup^>60%ifwI|udU z<#T%ka{Ukywb@GF@>AC#NC0YGG%=9mD6R}Z_k2K+suJA9CeTO+!1=EGCv-t^)4B^_ zg17*1S!j8SUIU;whcphyOn;G~(~Y_WFhOXxkU>`t<03haT~2Vk=A5g3?67sz#A7)L zQT=I@!j_#Ovx*3@D>+(Juxuy>yxp9|3T8;74WuI={{~bTCklXW%E$xZS4&(~Av{SU zRT8zlih$Nul8T~$PEwn2T{;3VGGT_ODv*IRq0Wj74>_bH!8L^ii>BaQF*WJ}FdiQ| zAdo^sNk%3_FebG;0?1zDGRQvc-Y)Q(H9%l`ZbNrY2LD3*4cl_r90F-5Z zzN_@=`VPRM^o;>s6PNyO{GMt3iVUFZ`Hsqyki=%FGPW82<0`rXK{WOnYTV+ z0IVLjEr?Kh!xE#fC~paF^#w!-k#|QHP`1|YS zVr0{-=abd#&&nNzEU#whBn-=6sb%yRKn@{GM7Yq!j!a+sK7!_nm>gYHt}&YUV4>%@5kQ$&d}tJ~ ziTm#9b{IGi7ZaR?*TkKbhQAN3EG`fR6PR_xISZ|omdprI!jNVXXoZ%dfVaW=36pUk zPEXQnfZjs5JmRHv0Pxe~`hMsP&2D=9Y(D^GJ_LMd)S+ATQk#?x)6(mj%aT!@$}>(k zXx;b)z& z&08~awv6MTY|%8slR2-^2)+ZlNotXKn7lxDlQh(axr`~LwOC+g&dj)Pj!r3U!~#uN zs92yu8?iuQI-TCenlx(FctDT$2yu85D*zJeGi(w63j76!c^*cs))w&q0000lFhCFx5EvLB zSU7-?!1x$QfLMUINLWbt`1p{Jh%mUQI51!U006a{svZCU00Cl4M@0Xn2lB-L00PfR zL_t(|oV}DmZxTTi$9EGr-c<8~zcLM&udG9}uH_x*EOW3#n29!*~E)-_I zFO_EXLXph=l5>AQU>686fhPG?#4Zvd#B2#GaBpmY?g)8kn1U47IYECWl!>wB1Gzf;3-&Ygg^<>En_K!h#033E}?V{1wzHR)_SGuYZQpom@+<@xQ;*h zhy$-4T(Hi>CH~|T148xsf{ubo0svwnC&F>_e04PF0H9q2*lc9LVUUpfbP;g%w)S<9 zHl2EiiN<)S-#_+_1L(!-0R|inwf^qKgSJjEAlK-rw$}CCUNAZLk$YMjQVrW@01P_k zXtVROaBtYG-<2x(M`^>R7a1rHYeY%oPnNK889yE7BfuR0X&6#JWNtR^=qwC-*9P{ z`~6rBeLo4+NY<7gnp?=;7)jY1zDax!fP>|^9TCG~k-foFxQxm^jtwH0W>EDlop_pQ%uAsv>r7;9-G&I8V5{dfJh1Ryk#*4`mWrsvieSoHIPMSt;2F@^s3b3NtBzb zkO9PL0Z`pe5H;QTgj7xe;NKPl?YKv)ZH+yODey$@Q=VWCb84ZY8z+1_K?n9H5OQ!3 zp?U@+6t);{5dc_!)pQRsT(@$R@=YPcA|09y;|?>uP|yAjti%5pKL9NR4mPGSW%U36 N002ovPDHLkV1km|l0*Oi diff --git a/graphics/pokemon/tapu_koko/front.png b/graphics/pokemon/tapu_koko/front.png deleted file mode 100644 index d6a5fd655ab76cb75f2c56c074ec438d93b743af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1101 zcmV-T1hV^yP)_)0C+ek z@OU7wP!J#>7)V%1I5;r)`1p{Jh%mUQpm-<%004f)A}s&_00Cl4M@0Xn2lB-L00VJJ zL_t(|oTb#UZ`(!`2VfF{0F4qs6md5`vqsE`Hsz>s(m~XvP&pMy#ALS7V~mbMOd&xA z#~CEmi>04m^hWzoT}`@9gH6 z0k+Du)&frE@jM9}$h4cL;I4*hHj3*466p@*OE5x7>FW&+siDu6>h8^Emq4#3C- zz$#EhBNvc@%;s|k;v%5Z|5&lQtW)Xt8UA2v5%6a53pCTe38~(==*#7U??%3#v5PC!Nl*(K}^B8vz73EvBnT0H^xlKEVR7 zq6;>hc?dL6FY z&XXQ~rz3Ee=e{9I69o4f#`uVwhcg#}4WkTj{Sd)-_vrW^X(zM+!4Zs>ugF)UG@b^Q5J0YX#x*tmb2T$9{jnD z%Upu{v$O}UJ+Y#?fUEGs*xk;62jLI6iuUf^&|v;op=D382hk5_BRd23->bNaVO?nj!Q~E~g+GryF9S-y@-V)f64LrJ zkXbxUX=3|1;PGTQtRr}bp#MgcoIoR4K=`(ufXBx#_bSfwCh@%-VCwvtJtfK>J*M>8 zoSqPkCry$E!BkEQ+K_MF%n zGyfTbV7LH{o?}@BH|-!e#R{g5z$yy(1dId}UDbmisbK1dCW6%llTk@QSMMSicZ)!> z3kYN^F*XZoEP(t}ZkU6;BETebkMV;5Spm2iC9}(vZv*Q`j0rSV%x9Fvwtt z`1tsckcbcv5Xd-C_-KHLC^#Sx7%;e~pg?E<008WrJT3qL00Cl4M@0Xn2lB-L00MDI zL_t(|oYj=SZ__{&$DPem8JZvil~}kmQlxg`+%`n8)K1lmjeMd5O9eO#jF2!em^N)4 z(+*WK_!1V>rG6)*!hrCF2`||@^3U-4V?goQ%)H6+`}q5P@9sTo+J6{@`G4d~5AuQA z>y=!If@_jo;LeM6lIKy_un5WXFsR8$jz^)qVG`EL_9$8I^L0|$$`n{!b+L==B8)~C zgSE1X(4ThP%XrJG89=AK0K9nDZNJN~I9!k*WOUN$dTQXSSekrWilCSQ%)!qKTK+A7 z`)UCxL_q5w1;pOmL@6-&a!j8bOBsg}&J_aVxlb3AUc^#x31-^im4lyfQMIFuJsZLKeQs5y>T5P{Ln}adQ%DCeZrWR2F|qm)ThA+ z`a4Voh%+sz(JSC(B@K*V66#06px6gEXjP0^Kns9-r7C>`it4QUZq!i3|ah*nieQLS5oDab!1`Vi^7+aKH2NNMsjq6B&Q7|2+Nx XEJO3-%rv2I00000NkvXXu0mjfYSwT+ diff --git a/graphics/pokemon/tauros/front.png b/graphics/pokemon/tauros/front.png deleted file mode 100644 index 0d47d8939b133e0eaa00535af7854f326e7dc845..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 842 zcmV-Q1GW5#P)Px#Fi=cXMVQc_IXOydYJ&g(07^M2i)vD0N->LKAl{@(tc!Ea&EA}xtWr4;=EZxo zgE9E{_}bGgzyJUO$Vo&&R9J=WmfMo!Dhx#ff>)h(rqVEX;>B=uj=wzh~NbWtaV!{MK54*|{z%Nb>VBWTZU;@N3U>^g3_s?7Q zbbQx}9H4#am&MDZSQe)%C<~*vfYbrXi^;D<@KiJ^y$~o1 zU-c1oOXvXdW|0B4F7Nlk1O?CuxNHG?2iOOIl}zx#uavr!fwpNG>>Yyt0~O%PxQA7P z0BONeDPy1^lKyG{r5nJB9$-)JH(iGY2zwVj;Ni@>ktet8mf#J1pYUM7=oFt-Xt#oAVDR2~e*-vc66v$_QtG1hL)Ws+XIqgj)+KCrDugP{JL6FFG#^ z-5|h61AKCr05%3dov)C#ZD2qw3<11eSMedxIbsiJBAirFGSDZareTNNy?D~ki=aOF zQMqE6J_gL5$;^a4Kuh)UY7WsD;Qp9hB|$(%U^xWrx`s2D-6TbzGXNqSKS-%5ufDS2 zvtJpZ(6`;~H+EZ&d6+HuFTRi!un)6^%P-`faFgv_$Vc{%fN!&%0RAA`fAL%V2d~X3 Uo3XS}Gynhq07*qoM6N<$g8x~0-2eap diff --git a/graphics/pokemon/teddiursa/front.png b/graphics/pokemon/teddiursa/front.png deleted file mode 100644 index 9412d0c7f3a6195e7c88e6eaa80ee350411fc42e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 508 zcmVPx#Fi=cXMVQc_YC#yZVj%y6Io@+I5D*am|Nri+Quz4z|K_A>YJ0S_z24s500000 z000000Kd_ZP5=M_dPzh_(T zSe8eR9(_z8ddH4Mgtrku#q~l+WP;%@_#;#hA%3sn5@Gy6A%X?~b^xnpC@n2QU^9vZ zaTV1n)tes?Ljbv*0ubx!s>MSwB87^OKY}Ev=B@H|lp_R=L{P%;i|Q4CA;7|X0Zf6G z74uuytCv3lKq16%00ZE9^iZX@m)6An(7-dm7)vNb~5?K zik88(XD`dd&OjQ$c5>_!jTPHPuK<|4bsUE9Q91~75y%+ot76Z!63%;D8>l4xbOH!8 z&(@Ns;q+TSTV@{^0O_#XGTKrV7~v{TzpQ@&(u6t1)1L%vL}VsoK;o4!{9go()Z_{F y?17YL)`p3(?U0Px#Fi=cXMVQc_AX0;B5DcbG3D?%K!iY_(?=TR9J=WmFte{APj_SN-lN?y#L#tu}#u+S89NNdsJ51I<0AmQDProcvj2HbhO^&qtB9}+8Itrk|(x0lhg2$>~;6o&hb zP89ZugO>vY4#JHaQV$?urb{a^lFBUY?oWMf2n0!^UQEX1O{f#sXw=*4&9YBTy?Rd{ zZO(ZC?)539N+7I%7E=-ldjjs|`@TCuSS0cm^>eUovayxmh5&gMDa8p0_Vf|X5nsg3 zmmxt9Wj2DKVsaF4vozeD>o8yzrAW1q9pL#BuHAGCNGWT(KrdtpT@0%qfBFQd7IMxy ze*yqk%_A=Qq^uzTCT&cZl#Jy=7oA(d9+Q!6JyOaVm`IAFp=&#(x_B0F=%f U4s_dl`2YX_07*qoM6N<$g3Uk?j{pDw diff --git a/graphics/pokemon/tentacruel/front.png b/graphics/pokemon/tentacruel/front.png deleted file mode 100644 index 52e70a7343ea6d14010c9a70c97f7d61ee5b8aae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 927 zcmV;Q17Q4#P)Px#Fi=cXMVQc_AX0;a&E|s;5NfpML6ocz5D@l3QvbcI|NsBADInF=)lyO*w5)T3 zgF)uiq|M!$LI3~*9Z5t%R9J=WmD!T&FbqT^94kQV@c(~%yIao25@4q8+o-07Eb3!z zcDnA*{Xaluo%-yZb4*}k1%b5`TDumEyJ0_U*nWb{&p5V_&R)Q0E zxI6;R?#iG0A>~#EA(AUBe~E~?Sq@b?bH%xr4$EQ4>PWv>Vk%21sWi)TU7i9w=ez;r z#5LFZkcZEU5Ex~+E{nE{O%QfOAVXyg#H_QqEV%_?N6mB=Y#bf^Gp%Yijt!BQVjlI9 zE`IURv>p~4fdfy0c=I^WcU`F@jBL6g7{6SIRP=8LIrPQ17W%MK-Xpx$GKD+BUyP5+ z1bd5c=%)~z@(QSp2gES}0YHqO$?cRw!@nsA9TA5Fr@j_g)*Omz|vGA+}prQ|Kix5xrrF2}NAVP~%NO}|&uhiNa+Yk(R zKkC&(08r%(z_B$d=_IXfxFaZjO(9mpYXL&vaVAvV65~NVV0%IYpbFs1yA6P%E)vHp zbwPl#1w;VI-D{w_tiyxt5}?!mQWUpVLEQO0V44&H0kQkB)U0Rc-RMV-$IPw(#ut&b z5Zd`M2jHPMUkNPk9#DJ*Aa@;}z5w`-bA`991-nrYp>n=lRb)1CghdUxeW=&!4=oU& zY7ccH6wbn&L;zeX&I9lW=(N*njL8ktpxIpr^Zs2XC?V diff --git a/graphics/pokemon/tepig/front.png b/graphics/pokemon/tepig/front.png deleted file mode 100644 index 0e706ecadc998edc44eb62f521ff059c04da3710..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 487 zcmVFfbq>XgDaaSUBKlD9AuKka#HYfJperK=}Chz^I_0NI(Dp000003*Cj300009 za7bBm000ie000ie0hKEb8vpK)Ui&(Fc1b{JM9A`DHTFYaa9Q#mee32 zrbeVx9UI~ykAbL^y<;~}GTfTcJ5!$k@lx1HVCmVJSWs`W^nbd$BvuGH)!!8D1HRkS zfc1iakO8+$P+%|*tbl4{1{3Zx%N~^Ti1h%~z%qe04XnVoPH2H=&bc?T=c@gr$%lz4 zXVZl~J{61Od~l_~b*axQ6zmz}EC(H(7s!*`%iZKK2hc4jw&{bcZ@xYoKwa!&&14;h z9{_4bK-qEb>}4HXcECYam`S;7!JF$KD>#YVu{2aW00b`5U{!3VP#tm&-U9^0FU1-_ z=o~8Sdp^Eu&=m%T#a1O{3sUULcsjqZ043rshcvJ0n(CC>l=002ovPDHLkV1h|W#m)c# diff --git a/graphics/pokemon/terrakion/front.png b/graphics/pokemon/terrakion/front.png deleted file mode 100644 index 53b731785005c1557fa9b07e57ab482e2704338d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 960 zcmV;x13&zUP)gM3EvmE{&z>t_sJ*Y3^9#wG3g4H6fWU zu*DTuru24hQVbja4{5G2bNK^;QiNg9uhBndsE(uJ)z z_+uUZD=UEK65DMf+%rPwfCLiXcf4Gp_O=k%M>S1=Muwl4g_9%hiTx9 zB?mjK&5yPTsPO_o9)ZATjW9U?h5$bT&#t9Ip=+2}5m*xSSvT~7T;Lc0Lw?+_OTcGQ zI>7dUm4J>TyQl!|Bu#Oflz$5F5^x~tr%vuc0i67yCA7one-gc`JFE)?c?6vNc}2i+ z4zw*+4}As=aYlek`N_oXao+o&fjt6P=X69)#ROnp1Dy8h#5jj2?EL)xFPa6laDw?O zeqMAL5|G3{5fJ7rXn{45(5RDNJ}ET}bqgf$F$ZWH76N8`sMMT**lX~k$prFU5Jam^4vD1oGlq#kH*EM#dE+g0lqmP z<#j&?#uuX@0qgTW5-X7RQc71pIX<1%@n2k2KuuiU$eRjiO1p+uit!UbtnTH5lv4sk zbBf2F3nA<$z~wh7AMSIYRi~sv1Jw{?ES?FGt)>;wLO$(-uF=!dtBh7< zeoJLbkhTGkxg~%t%jFtSxYQL1$neQ6yfLeKFmaj%(8`uAlCG^Je66e;;y7|WYnQ|{ zFmH%8@OYPj7KnCHYl@d!pVhKbsAcMw=dMJT>J}Pk;R2OrWs`X1ZhIQA`oAkzkjIN4 zSa0*op_(sSQw{v4+@82JUIv5IF99nWAgx!Hzf!ZWVr5$?z7wDTB3v{Jy(XUDStf0h zfa1MurGqpLnp3@M1_0VK*a5Js3h5vy=pd~Rpzy2;JaHvWYJ&i7Hox=JJ_5n!PlpvD i;Q!O7#jL9Rcj7xgXMBS1*m(5-0000jkd6bEoDEM*NOxXQ>wD67Shq~2O_f_My(8?~E-`@mZg6HcBhVP~vt z*}An-zh~c}Cg!X*QPnlK+3&~y-8-K#jJNgL>R7J;8~XnPtizA~^-KN18&g2%@Nd8b zH-Ib4cK08&o^~FjLF&4&2RaUbB|bC}LFxn8d)uJ8?;lT;=w{%9bFI(O@xf2QttPhw z#wmaoYW1!SDShiEnBN*zePz47Tm!L9snq1S!bDUxW<9*s0>;oJKv+!*B!F0GfR9go zNI@uok5xfnp?4UU58$8jdj$#wicISekHh5twB$hp=2&B`4VmEhnkOY^)B@vrA?qc! zK{v-9$Ou)yrgAY`i_bPhP&6vMUDI>ZZ{1f%eNqz(!vl1mwB0mTCG z3_=0$j=(gOa-{`a){70!+;HZ&Hwvs6)9T%tCdcy3V{leh3K;r|8<0lAF?z9Cl*`a>Vk%X#!BTN3^}TSQ4OJ=84k;pxo|&3Glwg(4-3Ff+wvp?&y|$dX#;0%aban6j5?M zZ|!nUceOVpfb?J}RGEwR7#8^U$#7+yBZ)Agazb_a+=Dg=a5C&GfU}Z-sAL=1u15)x zVbYYCMdgLSDb>Yui@+N=?z(RbByRu(5fHlsvoF58!Z_Fp5?Pc->Ksd{9rhi)Dh||W zB8+C7v5UDR-U23ps!WDbhLOqp14$9QYX2{pVW=aLD|1G`B*1lG7zgSnK)UB9GfcTb zA>wQgSOk8zJ%7?|;DFTzU#~13n5jQHVox8=(Ez~&z X!%Y62kSkO#00000NkvXXu0mjfpX+N) diff --git a/graphics/pokemon/thundurus/front.png b/graphics/pokemon/thundurus/front.png deleted file mode 100644 index b8ff39958f1fb3b069fae0fef04b37783d4d8809..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1035 zcmV+m1oZofP)w>Wv_p%3XT~F*=K7dIYC}#Wxgy*~D9ogAvY;B-}kq+-q@1N%x&sf&~TZOV^ zRlWu|Zn=OeUx6GH6p$AdP*8l<1kXOOMVYsOQ7XTmO0ORlgc-AbS zbooaZh#Y|atTQl#YZ&9`utxFM-W}%D2Np0yapA* zTphZ+agO`}j`Bu;^$j2V;2@vi;OH7)^w&dB!pDJ4a>5ns)~mPgAVcF&L~#KRr}8lJ zj}eMT!T^L2QY9DKhwtBkinVyeCRt#iHcF`tY!=ix_9B&NBoAa(AgVuB~&7oR+A7u8N{5O&3MyHA(~>Y zUonR@Vl&R^69c&HzqkUXjKPzh8Yw>ZPnPhKlkRvlWmDE2?g7tEms`#1XKdPux!|-N znn3z0w#U;ciTO~sk_C#pmWrGY2p{udn|BT1CjBFQ-{9kzQ~f!gb&M(GwuPDgS_72V zvk6LTwb8^a&Y^xA5XucH*IP3INQI!Z%?BNs1I)w-Mx+`LkJai+1?{C;LV_U$n}C2> z#9|{dEr6Lz%WecqA;;YRfHPddxPUtX5QfB~2dDTI(f^7--12D4A z-Y{Um-;*yQNO7snv~1oXHtTD^lC6y2E79s{z#^c|Kd-@Xkg?Uv2(@bUb`4dmzbT*b z0r-*utWpcy5<+kM@{EGs;FJMqJB3p6TL;|*DaY}7WgmF`n-=T+u^XR%$0OfCA?X{t zvb6=^fU0_MPP&edelmdKLIWF=StejDBmna);D-h;Uae1QSE0xGY z04&#fK1C?~pT19t&`2<8h*lqn^==#!C@DgOAbomzl8!UqFJTkAN(ds9zEm5z*7JIv zd63yye?%Uc`GD^q1vTu#)s#s=^d*7=h)alT7`dU7Nda3DnA(q060EPJ z`}=KfnF1uS2(fFx=AHPKT?hp002ovPDHLk FV1jVH+>!tQ diff --git a/graphics/pokemon/thundurus/therian/front.png b/graphics/pokemon/thundurus/therian/front.png deleted file mode 100644 index 4d1543d595ce76b6037201d9af990a5ac67b13fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1061 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 P00000NkvXXu0mjfZy2;w diff --git a/graphics/pokemon/togetic/front.png b/graphics/pokemon/togetic/front.png deleted file mode 100644 index b1a9db4df50e7ad709f5a308bf65395745bc20fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 478 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`7zFr)xX!q+ zpt!pE|Ns9$fi*|>UVZoOo}=Yn2@cIE&jgb8LfAklI7r?oH5F)1jHioZNJQ(~X{XmU z8}PV%s%%EHYWE)Cc}}H z>}h+xdMmz)YG~Lc?@=kQw#-M(+`)41Z)b;-V$1$&y3AwUaP}1E>irB~c@!C{m=DcN z+mkKe$GgN;RPoN;Jcq?gdA%I19o}!cGPfye)np~r^AoICO*e}=oRU2g=jbjV=}=YP z`Qlpesy5NuFJD<_{EOV1ywKtF%ZsjZlGbN9{%>CB{;@}Hh2snB|Cg-IFCwkaxf_;t2`}LDn9^Wal zO|_Nf!Llh03mCln9W)vq25hWU+mM@3uCPav!T-w%7dh5~)K9mv?cee{{9qS0WbcEP)D=i-ViQXYfKg_8bxym!9?i@}C0)LU!}#vG+RiAVhP6a~wD*Fb;{!83J6U zHyk7VF88}Yz**n0!6o{DF+Fi82n=?V`3^+@jk7VOeei~!%Cih9P`QwKMk6p6%}l|( zR}`%{hroSNJT@SM3a-0=*sOqd3fiD6k~Rmw6(L@dEBIULaik0=wZYtA2bY{t z3jVt;ZvflJ8iea}FNA>Q3vuhYF$hSSOErxzz?`H?sTe6BR;mlI_dv`j8ogqGe9gZ< z(Squy9L-^HR@Uovg&Y}G?{$qGX@=%-h!nKO#Pi+!VV45=>Fl2_Mh_U&& zd1_p`HpU1W4#KFI0*>QQa5#*a0F=il3s{@9jEp4#gc7ha2N+tkDVP#@bhpiGRIAH@ zYICRRCdKar?n@cSZ{Qt%jA>H1`Yr9@w`NneI|3D5w23hUg_U=UmAsfGXf}6Rvh`Si zYm>7ike|ZrB&%MD*1nVat~DT1r3a4!c5#EzcW{qXi&{3!l`bJlq72-sjhZ}S z1rP*PYPfatk2)I+RG409fovQ|A9fXM;6$Bv6~wz@J550Ffs{wEi5loa6%T4G0Q7Qty5ZAQE29#c{N%(49)l#jNHBo%a3=NR>I&W}fq!41#!HpIwmdbP7xG?~Z*SPLg9ucCFsWv%CJ% zSA*~rh1%(x&%joA;-arp;GX;=3?mS=Tl~t`(+KNcdtbBkIgJoo_oVtn-nPYzR{*XabNo_!2x0>q_PQM&r)y`x65!!-b&C(hWOuXTKW zK85v#JhyIJY)>C9E;_-tcL1qftnSrI%K-b)dHiS@U`4hSEd~Au`xh=nUVY++{WSmp N002ovPDHLkV1nn= diff --git a/graphics/pokemon/tornadus/front.png b/graphics/pokemon/tornadus/front.png deleted file mode 100644 index b121301ddf99a460d3f2f0ffe6c9932652869452..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1004 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 diff --git a/graphics/pokemon/totodile/front.png b/graphics/pokemon/totodile/front.png deleted file mode 100644 index d8ecc06a1ceef9e0264f6aff95b00a5fcb936689..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 538 zcmV+#0_FXQP)Px#Fi=cXMbMbIF@wc1T7zn|=9Ja{5D*am|Nk*sgS51?dl&$;N>a^1Am)2}tb-~4 z#ZtIvXgMX0hyVZqm`OxIR9J=Wmdkd-APht;31Nf5|Nptw1KM;aSoCz^N#a%JdL*Pc z$MNdbtA8#4H~?|iPLvV=5drV{Q%Xp#EdmX{hS;eB5~&{{XV{9M_m%gVbG}aEqFM#0 z|EfYb0dG+pKy;w{IoBotiLm6C_Mw(=p4_-D10W?oya|vV5H1A3;g{YsU)-{_gBJjP z_8-!Q@Etw{b_ep9Lu9+^F$588F3rL&uSW2ULh`3CbPHfr#Xz$mZ`|CtL{SjsZ+IhrLg`5$+WL zidzHpF-QoCkh+3?X(TA1kBuAzt0V|;0&N29B<%asKMBDAs7-UnH$Z{mg&KGB&dpt5 zUYJJwK`^X8XJzid5Nz|XQv3jrP0p-XbKpvTwa`byqzn35d(8g2A(L*$-k%K@t{uUv cSFiqFUkV%zPrc_UrT_o{07*qoM6N<$g2O}b-T(jq diff --git a/graphics/pokemon/toxicroak/front.png b/graphics/pokemon/toxicroak/front.png deleted file mode 100644 index 27acc59b7794da48d4842af4294b5392d667f5dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 794 zcmV+#1LgdQP)OP*|8aIIyt5`1trZI8gYQpm=zQwaG~S0007| zNklyF>ljQ5Xapod5MI?*?3{HpXI@kGB{TcWlcUn9qWKfNDNg!0unO|thnm% zykVw1iKS~RF(9UNY4?5r76#T1<({1;jqNroyd|;k=X-bm|GQ^d|IgZax&;u)7DC__ zLf{r+$K6JR$V9LOc$BDt#|W4-g#S>HlPQPOLmWQH>4WuR%Q41KDc-a6sXOFU$oOKtvuAv6F%oe~p==q$$H0qloT6+YJ*19YNxNIng z1kr}xf6;&zy7l~o8&j0mxQ)r% zi;JI)o8f&=gy8&qPV4DKJ-~KVD!m*PV-;$MKL-m#YHNg1h?6d)3SX{0~ zC{`hQR_0;?^5%?p0w?q0B3J?QGUSI0%#t!-t_JM885{6PVvlQpN5bYGM?^8px&kVg zv3Pu%>XBi`t}O9f`F8^}P@~Lr6v50kdWp+x$GURLRhNTu6qsZpaI#un5x~fkdM)Iz z5{(`ZH2OaQZgE(xy=*pClyK6v|LbB1k_d_OGx5yo9>b7hV?d3gxUYi6kf9F$-1 z$XUjt?mZ)<4wL3H;Yt;CZxJB_h?;*GtK$B7YBj^%#$^TFduY9+)UxlcyPxaP@ISZy Y0&nWgH&{MQBme*a07*qoM6N<$f@5fN-~a#s diff --git a/graphics/pokemon/tranquill/front.png b/graphics/pokemon/tranquill/front.png deleted file mode 100644 index 2294a1f13ea1a36cb474f13ac3748001f0f25a73..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 612 zcmV-q0-ODbP)lk3KMe{q%gw(d;b9TEc^lB`=K`2i5ZxxK4nSXNB%m`HX;97t-aEBg0}*%`9|PC zz(PA{f(>8{VA~~vD$4>CUI8(5x(Bv|c%#b)7U050Z*cr`F{1Gj9CUgYSN#Q`&E4&G zddXEkVt;<|w7k99?d*F$fCiRl?&$yMZZTL@GOEbSB85=9~6iU&rq6rPWNM@zu&&OEdM#O?XR{%SxQbHqi4zBY{P?k8#e#;01_uWNph9FYFLliw1_nkOPZ!4!kIuJ~4E>l51zdYY%tLDC zxL!HUY4-T-<{J|=u1Dn`VVzLKRJFv_%d1P|4#U$aH%_)?rMbF0*8QIU?|X&Y%I<%w z*EP)c{J%|Q_msaklOz3v^nN~Njy!q&u9CWdr{Kb6uHTMwgkRRMOLDswY0nv8-u6M3 zv%`dSM^5U2V^M56l~H>wz6stnRJ^vO?roId302KRsSOh&6y`84>SEpUQ+5IuhfTw0 zt$>2Msusyw5pPBVwc8HIE(_eqZI1BilnZ9KOs@7m!=S#1{O9*Zz3VJlj7Bul7D> zbpQHbdv*BMLOq6~*S~$f5V*QJvE$pX0*~XWXBHgNwD1sLcgTe~DWM4f2{gD! diff --git a/graphics/pokemon/treecko/front.png b/graphics/pokemon/treecko/front.png deleted file mode 100644 index 6869c279b36de87f8d1a7794317b27ea372be434..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 607 zcmV-l0-*hgP)K)3I*bFc1b{l0&utqCmAP#YjkMz+M7B zfYeiWDLy|z3gitscWBYIQ_)wDy9DrL_X%1JMRun__EK+Pm6DMFHYKK8hxR7H|EJ^W zBop$#{!Vds>ala_$Z3|JObZu4aD!l$zC?7KVZg-`AVEaO8378+pACbf00Vq}mJWlD znB{Ly-wh670KWS4;`K0io8kQP*`)(aasJ_I08oz*agKQP9$G-HmlmXiUQ7|^mmLt+ zzT(28W=jZZ`@$jLKyjL>Oj=07BC^EEj1zVWhY^ zm_Y$>kIr%^np>i;Qr=T-x2b&`OyRX^);X9 zrrBOm*z3&0SzkwZSCVB{@=7_p(?)v}(IgV0YZ%t_%a1wUlR@Zf{ zwLTn@A_tHx0;Rk9Wq~3}%zq++@lIGL(0C>i$pnlyYGQJG4e=~42op(qBbicmPM8V` t66X-~WDi6dfDX{LLFY$l>Z$x+t>0=Fr{u&jEGPf~002ovPDHLkV1k582ciG~ diff --git a/graphics/pokemon/trevenant/front.png b/graphics/pokemon/trevenant/front.png deleted file mode 100644 index 5dae0e09a4ed029ada37552459a6aea962331cb9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 969 zcmV;)12+7LP)8nu5XWf{9kiKpQNVx~(j7ZE7DOalzlQEA1!xQy9-;^66BH<96fLL( z5=@}z3-k@T*=@m z^qkOlaQ6P7kPZUpuitb4o1U{ov`LG77MoHOqQ*E^}G1l0erD* zcAbj_-*Z0eLjU@^eQ$m2m^V$ciSJ#jST%|42Rn4oh?Cz&O+gepnaeBKsNcK|7ukh2*A z*cAj~brH5Ls3Yu_?SK-2+yfc`xZoY|wcc*L6@+!k<{bdClyEWc#^&>%;!|t6IXeKc z$x7+d@oQWBE;ja>sG&lesuE*$QxfExqNqE7SO+flc3e7l*b7X(b*a6cGe_EcfxDet zBehO5GP(k63#9ot;Clt|KcH6l?HV_D7_B^zf{c{1!9#|EUInU7BQRCwDrN5j*mUg_ zcoCJtbw3sA9~P(q-L|&oJxE})t#Z~^1!z>_21y#}qq|CA8 zt+*P~aPg(;$B=;2t1vs2C16~jY(G)z%Uh|8dLLjcsj{FK;{aH45-TMK0OBRIwW(Bc z093EqsG$QWs>D{bzkVGoX~&CHmMVLhk$V6>YNWaaD*Ts?0D+}wt`O**d;iy>XvVNa(mY`1okxXovs+08ltEZNbmz000A1 zNkl-LaF+;hWlSiMF7DWK&~p27!lJqppmq76{>`VcUG37 zX<>C72=r5wds1<60-RdMBBbBX>StV?ChyL;XC?vtt{!0*Fi#jHO8AgNOC92C51u zpaKAC@qX7YOd>H&oycGeCDNZyDC}X^boOx3MgsCnBTu8|Y=w-l}x0(__ z4yJi#eAcePHm8#>&y{wTNDP69NK%x zX3Pi>SgdGuP-o1GVuLjb+3uhkg93rfR@mymj=2S>!r(H1G4BNd-OKnVI`dF3o*+m+ z(cKv(U=Kld$fhUVOB0z8%> z@QB`ekmFTKb2c8M+)xP>1z>ubQYBQ64<;Hxz^TVgun{hXpVWI3lx|5+3J#v%A^h8uBiZh9oWvb9+EQC&zFF= z!Lo)H7?oS>q79%haq|(Dk3haC+g-4Mc?7TJHXpFjCGfZ)U|L$m-7Z>ydw93P)Xeet q;l1sU=TwyY_%She`}4}UD*Ol8yfgaip%gLz00008;<_a-%BLfcr z8&AM%u<#7rB_NU3P6rkwdQy`{|L5=S?0MVzleM!6INIL?oc~bvf!&UYGm80opY{mjLGqloJ5X z9w~H-ygTioqWe3>7ctrYeII;H-JvHJ| zKsZ(o;9L!k)rAO^9bh3>!KG4Tpcb8I4cLwG3e!n16^Elx>*!_`*;{IyuuE%TKE2JC zD}u#RYh7%C`Ap_{E-S#@OCBRJ)mfI|Tc70l{aY1yG(^Oj4E>H-Jek)@i)UlzF&d~O zlg50!o1b$sBTdwiTG9ac-7*hVz>}Wz@hnz6iwKyv=BroH*L0TQsQ8o~Te~b)F4iQV gw&dE;ZT*}21pMh+r_{RfNdN!<07*qoM6N<$f>Q?3Gynhq diff --git a/graphics/pokemon/turtwig/front.png b/graphics/pokemon/turtwig/front.png deleted file mode 100644 index 59d3efa89d4049db933e0086b39eaea5a9b4f4f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 552 zcmV+@0@wYCP)(*_}Ea$s6hDm_y7O^_JF%p00009 za7bBm000ie000ie0hKEb8vpK)Gk0F|dP6 zK7mEDi-o)36B`m*0(_VA3F$!KCCX{D&H3BaA+Ut@PMP0qhT&pX>DbWFtxf8NaoHyX zI#|1NCjqbLHmLvu(ZcywoL5~!2sAM>xxY%O5IF$E!mLt8DRs^ufK1b*w8ch3z%zFo zvHU;)7X~R2P*=Pz0dGOz(+%1e;DEv)!)U)yWS{n1BEP061WXU|?X7SV(Y?z-YMm7#J7;0000000000h+#qh0003@ zNkl_>2D z;kr3k$bADpl`o=D=*u|^`LF*U@4XyhtVxr)oN#{X>RW*jp+mIJuV5(RS|OsF7%EZI zKPwpKg9xVLj_mz@G*&QK;E0d}g^or5FzAB_18Ts#g8Mm&IZQj6IKx9A5sa=O(OMs$ z;k{i#93hbKs#QsW7{=8NIdt@e-5l@8@eL}mhK}0R0X4%9nFPv~1n|NcK)hH(5`@MO zfbkww874V`CjziVihY{Ck44ofy`glX(f`7zFr)xX!q+ zV9VaKbCzs*_y2!&^ArgQg|qjbo%LdvqQLO~S@r*`4BwigHtaY7R1N`L_M2V+S@%6% z977^n-%h^C*W|$C`tsDb|Npb6H_n)maPY`-xv7Rns^9pWHZk?RY;yKLgTs;dM^8R9 zYgkE|JLI)9UfFOuU`AtiYtJTAF%{#dW)?cFe*()SF4z~`)0TL&{lLBh3};zGna`N$ zA5qa;Pn6^_+?njt;%iQ{ne uTP-oso!?zHOg?|;>=Spx^N&F;-e1XhD1*(=GV6mE$kU##elF{r5}E+u`kOWY diff --git a/graphics/pokemon/typhlosion/front.png b/graphics/pokemon/typhlosion/front.png deleted file mode 100644 index 79830374f872756485eed722907fe413da29f0c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 813 zcmV+|1JeA7P)k6vl^z5yG2{qZ|N7JphmkG&w;U4Jhg+ZA5wk@ChnmSX5m^@_?*L zT|rz+beG^}U-bl}$l?~=WHEhjFv0VueVaslKY#Cg?+qbJRd)Z-17a;&FtlOUD^1A| z+Wv^M1bD{fNM|*hw7D+WD^K*^j6o2n=jm1x{Yz}y<%4ek<@3y0=PZ**unrnAC9)ePTBd9 z0o1~%1i--zJsu8|CFgShCU8|fWqo=-$_NQ1kZw$XBs1(fpJ2#zC778qA!JMvG??bO z5SB5>T`2DnKj!%-AAnYm0ym*&9wx_J^9xhl2@y7&0{!;PAmU0ik5Eh`eH;{x8q6~1fFlHzN zUjWGd14QT`G9^asiEBMFHAP*~Ej=`V8{(p|0!d+p#CoBvav872FYS<6xY{1V(icc*_nt>n rh0pWfD&T5~()7{#^7kJsm-6plw2$;HXPV4%00000NkvXXu0mjf?|p2h diff --git a/graphics/pokemon/tyranitar/front.png b/graphics/pokemon/tyranitar/front.png deleted file mode 100644 index 2032b956afb69dfc2cad3ba8906b4862e220a206..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 874 zcmV-w1C{)VP)_ER&T&ok1K1nJ@YG$SI3HF}P8PO)mqG-n>Wt@WXD$GRWTqA}iRv{fTk=j@$Nv4!) zB=9t2>^pc+nI9{qGOW=Mc$hlR)cB{Xycn}hj5f>4lm_czecUWd-j27s1| zgNN0>pkYJjn07~jd{BVIO*lgCi`};TT1(dhf{B8?+8w_yi%TSM5CPE0J?G61V0LjP zjCyzXxLmGoYckear=AYzHJ75SPaamQ)$-QBpJiTTpSFP5=4>9p0F$-#z7!Xi!{$%T zUsymLjBOG3@$6~{pp!^|Q&@+t6~mrMDT9XqFg{QWm#CGA3W&;BH%t@Nt`(g`1+A6O zsv!kB&XI`(2wpR1LqKg@Kl``~Gv<7#!NmO)hG?rCrHFrTdRwqEY7M~4dkzS>NhH;^ z?Qd)z)e4R#0EluPW+P*r@4YM0?=?Eez8&*!}DF_w83me@1~&lcNsQjA}_j$jkU z(=J!n_RUo?xx_htTpV5O0kF6(#l)3ABA6uq0ksp`1S--ny8r+H07*qoM6N<$g7#U8 A7XSbN diff --git a/graphics/pokemon/tyrantrum/front.png b/graphics/pokemon/tyrantrum/front.png deleted file mode 100644 index 3aa035a52133f8733fb49229fbe5e507a1ffc0d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1032 zcmV+j1o!)iP)Fz>$asjrz`)p$n4nl-bqG9y00009 za7bBm000ie000ie0hKEb8vpjAc|LL^9@!#E=Rr#Z|qi$ z#|^wFQZ(=9|9kVs{|Q1Dp`f3H-uWq@`~Ybo1$Ta=0go4ewi3`3d<%E9_DZ0wV;yUF z70^VU07A!jYXj|$(Au61Xa4<0&?JTdm3T z4?42_8h|w2G{_+t@ac^1`@UQOsnFo;>9dHx=PBK*18SnZGB@Lh&+qWW^6M4Y8Rv{c zys`hi68P|6BGP;Uz&sfHHbkYud@j-%40r--LT0TC<764HJ9FFQh_D;9x{*Vcv znn!Au@tC*APmTm&jpaN-aa-Tk+o0^(0;uJYe*L%YC))sgCjEf={^FwqDBDnX>>tt3 zAOL{>Tq4%|BIxd85GZ!}yb7$3k0?A(UHYXEAcRN&eMl+ws7DB;zMO?Pppe*oXgScq zkTCXp4RF>E9$B7u09>Cj7M`zfTvYHz$m%sbDxx2oj9MwRoCHkXiCeBmYQhhgC4wSImw;k?byQlW}n5Ez-^bTf3xk=ulayyj3p^EFk2c~ z)6F~U-yps|9&m=Sne<<>rIDeg(?mB4;Ap^KYGAZtqL;_gbda)H0{skJ4n_lDXK523 zk=7Ex|9k!LCjJYX0b@aBkk_#Jry%ad;oqE}gehayJMG%ZNw)yJ=xhR`N+khwobm2m z0X&V)SSA4JQaqmUz`iTGOpd{YER_V%L;$u8T_zI_pH#k8p)TtRTi+|4E(-{N7r-x3 z;ndo-EF7E)z`hT6NhY@l0E5*+;#YA9wF(GDuuS#^A%0zP@vE@jak?cC)~rz!VF77? z?RKuLa9*TyPF@M9=gqAKqB0Y$0?;K;_b)hcLyHSQjl(#a)%O{jCXU35KE*LM@k~lL zZhv|G$+#hQvG_D?_cuvZqM7Fpa;My8&tbhq;4Uga{=m)M5@_bmYu5=}ry}42;Vxj3 z9n^3OAa|E*hyjZbYYmr>d_hk0m4DRWrqfROh4>EA)tyKlre6?KoCWDS8|1ruyJ~`w$sOB4uCxe zfH;m&3JMar-~h>4H~Px#1ZP1_K>z@;j|==^1poj5Fi=cXMVQc_h(G`U008iS7$_JJh*&^CKtND1DERpJ z$jHdBkZ8cbz=()|pjcqokeC1f01y`g4*&oF32;bRa{vGi!vFvd!vV){sAK>D0r^Qp zK~zY`?UKE2+b|S`89`9iw(bL{L}f~?msWXzG$5e@o=WhBfTzG{R2%6K7*+{%^iU|P z1~+;DFByw&>SSc(LzPsz$olEjp+L?=;e5R3-YcR<{ik|1=srP5Z-@M&H)!-%Aol5L zFEEN<#4!bNiqbydU3>yG6W*o=pdU^cz?y|Uz;h7B2VhYTz>F^_1I9Or`FwilyI}nH zn@nbWBh4ryzhNI=Cluf;&jSIxfb_z&)EGEhCo+@c+dSX_kTmyQ3XKw9ZFeFJZ-VI$ z80Q<)3vVRc?F^BOqw-}{1z}DEw15O4o0o;KKpB{h8wtlVVOMaD$r~eSq4W!%46r{D>Om+ZXx!jh4!aj1@dFLL+<+8-~ zEiPe^L>Ck}qkiZa!CI%z`0000Ml(=dU=+{%y~&L+=$GK)(Y3>Hu!(@-Xl~B>-oY>z}=X}LP zgH>Dy)kR1FiT4YzNmUCTw&53$jV11IYdOyocWi*F+ACvg+^ELo=a2ERv)aUou?Ekl z!>9{uWKx$}Mtn{HXclz|XtQ26-xA5CN<0008h zNklE=+UTL)ec5(J~lMASTVDIeb#d&V8J)DV;SRIY1%HZvA%%tcJ^DTNWs~bdtoFVtvRV>z+zI6kRwtKwst& z57)%2zb`3POF-1t37y3FGA_HmjvfwygL)jqIla}|v?Yl$^1Zz@+ryul=vSZI`=5yPp zA>X2)x#F)!PX{;zUdM&ljfJwm;^ynvo%@O1TaS?83{1OQfYlsW(a diff --git a/graphics/pokemon/unown/c/front.png b/graphics/pokemon/unown/c/front.png deleted file mode 100644 index c5ef1c457f71fa62d9010a780eeb70cc67a8c564..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 395 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*RyBW{Ac(NLHF+6`~UyH zfPlb~B}^rO=;JR|c zj&L14fv{VBN##7^8|KO#ENIwJaJy%5hBlja>7Qu1`e%p5A6?N5<7IGr&MNr1K_gRE zNNWx2f#hvG0bf6_JAOz~$7yR)YqHKNy;VwX+LGP#qstn%>GZU6EoI%iT%lV|VQcC1 zwTzJ`Zp{wN-}cHT*4FJ|RYP>hjd#atF81gd2v1o4{^u*B68AHKOLN{O#LP2hPB0PR z{IHhaqv!G`8OFUc`WXH!RTchxsqa$a!Wq$T=5fzo>(1hFC;ifIuV1T6AHPz_UZSN? z#I}Vc^2avuriph}U-18tfAD@??!;*m8wCO`x5j>SZ821M@SfpC`Agjc@{E_{7?#^b Z^B1^QHdn<2YXU=v!PC{xWt~$(696~_tk(bl diff --git a/graphics/pokemon/unown/d/front.png b/graphics/pokemon/unown/d/front.png deleted file mode 100644 index c39b26120dd75fe6ff2c9a97d45b8eb956967f80..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 352 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*RyBW{Ac(NLHF+6`~UyH zfPlb~B}ZMynFW=M25!`~UpUm07xO*Q#)Pca17YLo)==^-6h=SG2o%M-F?dEY@Sv-~H+_|{?W8F*%`~x;Tb-biSQz$alzq$JIFW z)ZT!HOq|-z*{aoomX3wr1U}??&X~;~B>DMzjqUCGeL=CYyH#esV7m8J(I7p+!_lR| z@xJmwA*n~*ZF|{t109&XY)?<%_{gcq3@wfeoP1S4-C|kM9wDw(3KH&XZ5}s= zG*9ngsNb<7o+tj?K9_^11q0a*+OK}cGyTOYrz&PmrSOV(_mg)5y~E(?>gTe~DWM4f DNUVpb diff --git a/graphics/pokemon/unown/exclamation_mark/front.png b/graphics/pokemon/unown/exclamation_mark/front.png deleted file mode 100644 index 86f329f92f6cf8aa0aadc048d4f3311ede6a28e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 294 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*RyBW{Ac(NLHF+6`~UyH zfPlb~B}czHw&Kjjf36nnTD!V9wn+~>9|c4YXK^d-xo`pq%sPSzhPI!Wd?6O;tszdo&ag>|nU-+_p?3m;G8E?wAt z&})N>!;9z71H`X%v~M*xa-F$BUM*gH*Cx)+H|yLFOl%O^$Xs)OQt{*F32uL%?ElHY Y!{=MPW~pl#-? z4{>Z?7^A}3Y;MOgzhhZvedud$?nR5O?u)YjZ}|HD`~9zdi%y*S75enjhvzMOn%nrq z`3$afOmhs#6+f$RYT^7;*G!klXw9YD9_&$=Rxn5Pj`ot<3%jQ|{S98(?R02ChvQ?{ z%=`~E1%=Mle1Z?(NOcQXv?)zI=JaJ_8tbjFu+^qFTo@ITS?=mL<%kFfSd{)-=eckD z$HgDYTfJ?!8{|owt1#Riny(R&pXVa1v|U>%9zzrceFaANSWkg*)-p-lafaGkCiCxvXkrG$9CEm!!>=NlJxcz|fhuBM@ddI`b|L@1P?D%qg(tF_q+5N0m)l6U1 z8&a-2H25`kFiLVI3r>7D(^kV^_KLu+g6>q?2BGS$nx*HNi{_nj5C0y?ztduC=2Z5K zjb70#8+6@M6szhEP2l{n!#C+#LBL9u!-3pfJ>PYGdwTwT&68>pTk9=-*uhyM!Cr#h zXrGL@bw;z6_+u`{_w8k;m=7*#aBiJ8RcgTe~DWM4fC+CeU diff --git a/graphics/pokemon/unown/g/front.png b/graphics/pokemon/unown/g/front.png deleted file mode 100644 index 4f665124ad75e417bf0ace92ab8cdbcf4b30c3b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 359 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*RyBW{Ac(NLHF+6`~UyH zfPlb~B}xmvF#qGy9d9)+ niFYw-Gp#8KejvzRC+Yu6I3c^L@cnV1hZ#Iw{an^LB{Ts5OVXO2 diff --git a/graphics/pokemon/unown/h/front.png b/graphics/pokemon/unown/h/front.png deleted file mode 100644 index f8ab66963baecebfe44700f3f7b026c8efb8c610..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 424 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*RyBW{Ac(NLHF+6`~UyH zfPlb~B} z@x#W|-U^G|1@bJ!l(M8ZTvYZD-T$<&tD}uya^sJT&$^vPl1yqZC&<74wa&Ju(0K04 zjL*lf>zes2YlzBy&3ygFja>%I?yX!C;i3@#pLL?&5~KTf#fl0Peob)>`#r(n&HN?r_^VGoyXba{bD^_6BHm2DdP_TH&td2LdpI-rLs!MlJ<1rl zsdOfj!t0yT{p$rE+-uW$F@g8Sty!G$!Aut69qmGb3k2Bi8$^q=Fv@@D7e6ZZ_7d-x k|J^4Ti;@}^{=dd9Snl|>@YC9Apwk&VUHx3vIVCg!0H|w)Jpcdz diff --git a/graphics/pokemon/unown/j/front.png b/graphics/pokemon/unown/j/front.png deleted file mode 100644 index 4c1f4ed2e7e9197af9358b2a4fe4cc798206f686..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 334 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*RyBW{Ac(NLHF+6`~UyH zfPlb~B}W4!eYZ|-;(Yy;t>4O0cQ{kg)K~1^f@T4RU1sX% zG&{B&u+ct{y^i6%hofr3p#?`L$bCK$zvq|O%p+3gm6r1EzjEbD$VK+On}S!**weWM P=r0COS3j3^P6-+GZ#foFzWd6+lL!v%)RCLQ}}$X{^7FHB!! z{(s@ea*Hn=+xFKb;>&@Oe*Z_(ViEJMG_P2B$cn?SR!Qi!(21KO>fhT#C%?73CHHk* ctm|GzHnoU%HzQ4s0X@m!>FVdQ&MBb@02x!6ApigX diff --git a/graphics/pokemon/unown/l/front.png b/graphics/pokemon/unown/l/front.png deleted file mode 100644 index 6bb837167d2b6abb6a823155e817e4eabc8831d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 315 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*RyBW{Ac(NLHF+6`~UyH zfPlb~B}`7?`xW{V_FHDtaaVtkQBO!f3LMwJO7NeiCa@XAcL`zmOc6MpE=)(fuAEv&QR tc?I^Y;hJ-$ayru=d6fl1Gtcx}GEB^L|EbyJngjF%gQu&X%Q~loCIH;Zgwy~4 diff --git a/graphics/pokemon/unown/m/front.png b/graphics/pokemon/unown/m/front.png deleted file mode 100644 index 981c7f801cef39c3ded6b338630cd2aaf95fb083..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 414 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*RyBW{Ac(NLHF+6`~UyH zfPlb~B}3_G+1T8sP^wzYeWkSM?<5h~g3LZ}Vu=oF*y~RFP zW_ujmdyeg)@j2VxLgB>i>CGFC%yA2xBCy(#9Txrh{vmqlH!wntDaBjv{p>IaE6;)0XYzpm^Tbd1O=0~wG zI_?uFvR4k-8(^HaNsQ^&jDCan33|sC%(-?vGFR~XT?tdunys&nJ>0NptANy@wXx!d v?A|5s>63i4`l-W_djGHDI}0AV{$QPB*e`wJeZ@gwpfPy5`njxgN@xNAbd0@T diff --git a/graphics/pokemon/unown/n/front.png b/graphics/pokemon/unown/n/front.png deleted file mode 100644 index cff797db4228f772b217d70ddc33c0798571e5fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 379 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*RyBW{Ac(NLHF+6`~UyH zfPlb~B}>b=CmoI2tW6dcwe{o*d`H{zV-nUG;T*1}cKlqsx?Ot^+>ai?&5x-)^?Cb9@ zY^|GLzWkwjU0}nVL(<`5@yvOgPmCNU6?-yUDEljK2x(wxpbJwB;%kTn)P%v_D9Et5lC|n3cGB z$3&(xN15b{PR{(ho2}>Gmxv{2U6PhF7|rKsF-ZPsdf?QWV@D=d@kT^XSAMcIHG^w| z?Yv%BJC{3ZyO^KsJ|T7J)scN{HJUB8_afH5n!aU~bNjyq^JJdn9xCrJ`~nOF22WQ% Jmvv4FO#q&SsI&k8 diff --git a/graphics/pokemon/unown/o/front.png b/graphics/pokemon/unown/o/front.png deleted file mode 100644 index 8b8e81295940d22f7179edabbbf62cc84b0302db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 417 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*RyBW{Ac(NLHF+6`~UyH zfPlb~B}YnhwMwK^O-`VL5b)nhrejYWT@>Vexr?>c7pXeuRmcQ{Bpr{r|T3qDA`F4j2d zYSO(s8&Al6V#~Qwu+isFhiK@b%c2Ra(`@XUU$8IcyvFr$^Sbz`#q3Xhe*OHV_Q9Fg z?AI9`GLJ54FmCu}dG>wSBJK;@O)AS8%<3i@CeOOT@MTg2gJc)I$ztaD0e0sv3{y9NLN diff --git a/graphics/pokemon/unown/p/front.png b/graphics/pokemon/unown/p/front.png deleted file mode 100644 index 99a7c98e23c354edcf868a958be7b666a9b5664f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 312 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*RyBW{Ac(NLHF+6`~UyH zfPlb~B}4^>bP0l+XkKN{Nbz diff --git a/graphics/pokemon/unown/q/front.png b/graphics/pokemon/unown/q/front.png deleted file mode 100644 index fe94c27fa08183942bb46d2893bbaa72b646e458..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 320 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*RyBW{Ac(NLHF+6`~UyH zfPlb~B}wLOmE&SR@{iy0E+*0MzSh%5JQ;K=t} zZn?m9PRRc!{}-yVB**&r9`}iC$aQU7_WS*`pg=#z=o>o>)t)aAf3Hz2ckIQb;Jjm% ybs;wUUxughDg|u&$-G6yS|t4D!e!5HR5IFd`OXbr?Jf=U34^DrpUXO@geCybbci(o diff --git a/graphics/pokemon/unown/question_mark/front.png b/graphics/pokemon/unown/question_mark/front.png deleted file mode 100644 index ee0ad284ccda57aa62780dc10d723dc50b5abf51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 332 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*RyBW{Ac(NLHF+6`~UyH zfPlb~B}=jzuCRPj^mV*<-(U+okBmf>fx$KXO*!sOPMiCdq3FDY5? z{O*kym*!Pd+j@QvmJPzU7cAI!^_BAc2OFd|ayYALEIqd2knzeEuAeQB@7gg~A6EP` s)xWhTm-AgVWAvd7CM|x?zwcq#{noQ#p3urdpcfcCUHx3vIVCg!07UYM@&Et; diff --git a/graphics/pokemon/unown/s/front.png b/graphics/pokemon/unown/s/front.png deleted file mode 100644 index a144e27f539a01b6a017e2b8076c6c970aaaaa57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 363 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*RyBW{Ac(NLHF+6`~UyH zfPlb~B}tE-TIK6%-$gH@aEy6N!??sUV+eL1cC=0c1@odve zJAT8UBly7HlD!?vTP$olZ~mOndLkuG?^t(9a*VrHR+o6&#yv&0C6#AiPnx>;`cv-y r)9eprZ|EP3)IX-8v*(EUKcW4c_tPU1|G)7DdYZx0)z4*}Q$iB}%~vw4yv$htyu;11%s!npUXO@geCyq!-;|b diff --git a/graphics/pokemon/unown/u/front.png b/graphics/pokemon/unown/u/front.png deleted file mode 100644 index 39503f01c9d708ab1604482d8515d73c33b738b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 391 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*RyBW{Ac(NLHF+6`~UyH zfPlb~B}i?ouH`aUP#2UPlUy!<9sQUGRr*G=3`EpE7>U!wZ2CLLp>7VZ`UhemI^{&5+1>F2R zCcbBP3bcwT-gcTI#dh1lC1(4C<)I5x6`8+JpLxpFYHQ0^t3G{8=l<6dp0B*UqrP^( z!tIw5pTAm`PCTyNBPr3nhyNdiH;OULlDRZH)`%^f>BuW()zv%OYAmiT zc`%hjVUk})+5V@U6W^|VbZXL)EqRK822G7ScKE3H@r4{*DDrNGanXkyW%<+mT_R=e zCo6TNYNA_YCm&z>P5A;xXv`}4L)=Gq==ADOjea(7>rTPVSy^XvSr@#je|07P1s~(B W>f(ZcJRV@^FnGH9xvX#T) diff --git a/graphics/pokemon/unown/v/front.png b/graphics/pokemon/unown/v/front.png deleted file mode 100644 index f014289bdb84662f320e827118a5de202c2a75e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 349 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*RyBW{Ac(NLHF+6`~UyH zfPlb~B}SaY4@)A*U29Fbg}a8}pj$BxfG16D13s8^N1X6f7*boqPeeEnP1 zJr~Yy^m-xQt1cuL+PH+-(xPYKyA3}-*G_-M)+(@WIj>LKOZkJ3QV*{2nEW~T^jZg@ zryd8mCb+O97z@O>o!P_Sd8VVOVN*%A-jYQ|HEfb8OZ+fCNwRFmidHbh0vqUU46MppOsM*Wq;nG-GHHIa2GE-fp00i_>zopr0BhiwrT_o{ diff --git a/graphics/pokemon/unown/w/front.png b/graphics/pokemon/unown/w/front.png deleted file mode 100644 index 829804ebfcad4dc7f422be86b7bdfec7b7d46e9a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 355 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*RyBW{Ac(NLHF+6`~UyH zfPlb~B}N;z%4J%eUp?Q&9K0j^vB)g;HlSx2JYD@<);T3K0RS?)plkpD diff --git a/graphics/pokemon/unown/x/front.png b/graphics/pokemon/unown/x/front.png deleted file mode 100644 index 053e2ee08ca6b256fadc55cf69fc3229b746c057..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 337 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*RyBW{Ac(NLHF+6`~UyH zfPlb~B}t5@%9@E&8n0Ix-ufzwe3EH}TUDv98olXEgTe~DWM4f?Yxu2 diff --git a/graphics/pokemon/unown/y/front.png b/graphics/pokemon/unown/y/front.png deleted file mode 100644 index d8f40e27edfe2f09c1d4e3d038f0c39dd0759201..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 347 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 Ef{p2b%>V!Z diff --git a/graphics/pokemon/vaporeon/front.png b/graphics/pokemon/vaporeon/front.png deleted file mode 100644 index 1ab0c7e466eba15458f1cbd985be244368eabf23..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 695 zcmV;o0!aOdP)Px#Fi=cXMVQc_5K3YYbCkWTT54h-i;Ig85D@?W|NrKs&CShP#pZ+F|3RF+QV?@{ z2r1Q4bETbcSO5S5HAzH4R9J=WmeG#lFbqY<33Xd1%>4h~?!9&bWhI()SF3%&8qk1x zPHe|%`TF|AC#FK=FZq;j|B+ub<*dt}^Q)#!*Hu;fSBHPcIQdKg6dg|~jSLct0Nl|C$McW?)w4-8k)C>mfp5Z#lA)Yg3tvy2z66iasvhh)=cD6 zf&n=A*)6>x)h($&01hGQ`20wqitH?xH>Myt&lb>&$Wmx1r5M}5c3zlC7{p3RctK#! zU#P&lpjsj@7k04%&p_Aed|D}BQC9``NI~y+wTd*Z7|06*>;VL&R9zM*<^`%tZ-KWF zJPq?Fk!RSjF4}-URDfCD=kac+-`^@`&My}QVX&Vc;=cZJji&%bKk%#T(||hy4rFBi z5OAue?(@6{;FiMI>h=2$i1=ho32;l%;2~)HCuNdHmOO^WB;e`&lQJprn~>oU8t7VU zU%$4Yn!$ON&7(4$5u4#3c;jJ^5MWDfT)-<{{au9uA4z^138GVRaWKj*%<RQp3+TqD)h9~ dpZLT-h+hcXA7ATT9rgeK002ovPDHLkV1m%DL{R_$ diff --git a/graphics/pokemon/venipede/front.png b/graphics/pokemon/venipede/front.png deleted file mode 100644 index ebabe585ceb1fc96c90da3618977218f353b707c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 505 zcmVkiZxT0&a@ z;BgQT7%=1sKvs!5cdh6eumAzdbP1u>5&>$?2$7e}F(^b;r0RT6jq|Z!7viE>1zFhv z+v@^2Lx}(d4mycsQ|E8yh0ZCofJih**&K_d;gbbTAiyRmOWCSuj=d9KBOo9?`%L<) zqWCamC1aYK8BolR_4<=(w3V{^KH*ELZ02(9a(Cc= vdk@{Stz9-`qw_PDt%mJiZm|5MNf&(s^onQ)|7l_}00000NkvXXu0mjf=wZ(S diff --git a/graphics/pokemon/venomoth/front.png b/graphics/pokemon/venomoth/front.png deleted file mode 100644 index 895d4aeb97f62c46447127a7e12495ad1695af82..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 736 zcmV<60w4W}P)Px#Fi=cXMVQc_a9DVpi@o;V|JAJC5D*a6tlnZubMD3eoQu8q`1q{F#bQ!9q=S3K ztc&2_;Fhs?ga7~nUP(kjR9J=Wmg|CaAPKIvqos zLV6qvDjlOB(Yqf&Zw%@ANau7M*5QU>V-UeEfkV0o@Mjppc>*W62_yx1tFI~S1-kr} zj&3x>+TcA&&$faVkISWh&?Xrv!B7Q>>hcxun^MY3LA~@81NdaKq-Ocm3x8EJRYBYc zd@oeKZGv7d0=a}h3|@hc5;uDsY^Su*535!MtdMgR_#}+Sh>l|2>Yy7_Y5@NrPeXaU z(M-?E+KdXFwit- z6UjM%SA1cM;!qH20w{)wvYZNEo?)c}C%hU6WY(h?G<|!7$MqJ7r;l98!D`6xq-bbV z%`(aT1Qvr7k!Tz#6U!`_<0{fnw50000Px#Fi=cXMVQc_dwYBT|Nqt1)esO6VoH09YNS#S5VS#B|5{rAth6yHQgcBm?!BD7 zlxmQO$hdj0eEf6*vC&(=rN2_2m!iyfKL8Bt%6>@uK~XUG`9330Mm^vwE&1G&DGLV3xG2S z&g=-lGcmRZKzJ4~ZqoowLm?Z+{0wY*(@hB=Jnp?fsW$?<6O_x@AA|u0HNb>}(Jj0z zJx;>mG@p3WM&OJ=_;BDY%iA4em}j%JF3)(3k>QI+Z0Z40N{RO5>e|cepk-Mo85jAw zQp_Ghq$MpWf$@B~kQp+UCqPV^Km`(JVOwnI1SU$d2_mpC=lx`tASNx{M84JliNM`V zjGDlRNQtViK1Ghi1>8Q=2pUHPsEvFw@Cif|qsGP~4v{`rJl~HzA3Dg#PT&|3WIfUX z#C;&2?|}^na)gCR4PZRtG0{(kA_7HKAYY=9z6510us=I+TwLXtgtD&dZ}6(;E!ehF z|NbV+o>^qW1;Ixg&n!d5Ba}CW>gU^5=kf73L8#gWVn&}tF@JI$m^sQvDY48gM5WdP> wwr0a^!#Gf}KrhP#J@336r{|6RTmPbd0BU;}7cSO+H2?qr07*qoM6N<$f{_0bQ~&?~ diff --git a/graphics/pokemon/venusaur/front.png b/graphics/pokemon/venusaur/front.png deleted file mode 100644 index 0d21e669d9a6f4898ba752fb256616c2602a85cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1187 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 R%?khk002ovPDHLkV1jCOVy^%I diff --git a/graphics/pokemon/vileplume/front.png b/graphics/pokemon/vileplume/front.png deleted file mode 100644 index 4b0663612b371bd813cdb5be8f98c27356e0d9f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 704 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 diff --git a/graphics/pokemon/vivillon/fancy/front.png b/graphics/pokemon/vivillon/fancy/front.png deleted file mode 100644 index ad26aa4798f4fd2ca655f89f5574d8404b93b69c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1080 zcmV-81jqY{P) zkaCa>0~z`Olyo?-n~)4dfx_yGE3i{iz(ByIUOee@6etk5&)ty_O-Jd$f~k9c{NHnY zk!8&uC35L4RU8%ic2J_U_CEmz%vuNo%o3FuIrTK4L}#>8cT8bcD`m#gGqIP2Hw7T5 zWz9Hm2mt0}(Um&87|{SP+eL}i*~N$kz!XpyiV9nt7NN~`zGg6f)VgKHxB1;px`tJ`#`)bV`pCCREe$pVcOkpTmF5OF8_7T&!F_;E zdOI5(^!i$S?_2NeV1Rdxiza}pL5aex#R34%H~G59^cockd~KWSou;4xKXBX!V;uw~ z+5mp9`6Z~G+W6;V3n15?@q3Ip8q}j_kt0JG8GtLuW%+T$qoKZE70RM0Vq+N&ra*=` zmjllq3~x#)7gDe!O;0qy{9YWhmt!1yYXLjYvcZ zeUX7-gp)E{(4dX@iR$6Sw+i$qOfXfXu|eKlN`Dq>*cB4tJ86Xtv( zUOEN{$`lB(2|ojp{h1_51`;ZzSp$JyL5AZWlT{6D%0%)-EX^9dmcJD0x|DwbZqr9l zPvDM>HMo5F^mIHnb@>#S1{DpI2nUnN$w^;R1w4m-inq91X9_5BG?`3#wXu#m%N8nt0m%bw0s#s&_np`R z&t1v)sK7je)ngr(0RF&{^S~wqXOk&dIlqDecrjPa+#Z5LfLcREqz|bMC;*Hg@OgSX yk9AUfq|^gf%^e4Yx{kEVA}WzswVpF9Ns0000@`1ttH*x-nmpa1{>U|2BVz<79gc$kQQ2nYzkxVX3&P-sv%g)cLa0009- zNkl5_&rA_ft;OBy8ZK~f;{2FU}Y%FOH@KHHeAeAeyGZ@+JLcFu8DkDSOq62;;9j{`a1 zFaAfs0IQ5pz*u-IbV^nr=dVa5D4W2lRMtS*otVqkLjnMHCrXqb5`bnZ?Ui6zB0vW} zO`-(N2OaJKUoJ_Y1C)J{<`67Npa3YF0t1T@1hkHff+Gkp5;=VG)&UNWtcT-Cuo7P6 z$J#T53EEAki(wVWqX}3G+2obk@MsX1-dxDtacRxIbUm(P+0(X?1PfP9v%V* z=y)^(Nb&->6nQFS^%x|kgc2_PB5VZ>isE=31OzRK^QtZzz??x^pok9qE?aM#8DJkW z0KY0ehXDec!5l!EWr{}5noI@YYX(qMD+AmM)UygGp|%((!5-dJRYILD2L4p05(WrB zODyzpU0ML9CdVE$T{Kz4U=N>@3rGQ&K(z}>V-k@8(C$RS3{X?8dEXWS0bF)4KWR!` zbX+Qwnqc*-=rP!i0y^Wq$;++qA- z6u4*m8(^AP$L(aa5l;@S!mfxIaMuAsb@CLlchb@x3a-~j!i%%>RB=nEm9-wGNy%Z6EH64Ds>!_bV{JmHQGc(rg{ zFl1P1M{{vdw0c$eS*ROALOTOsDF~>Cr+4F_AtW@SC14Uhy}cPChoiFyv`8TQJN-B$ zkj~mDWPnX9Ca%Bw^6iYR!V19aEFiEpxIF%J^?Ar%cpG8?z$9wEm<~)Kuxmsn2Um0` ziCVmC0d#2019;_Bs@-!pwgL;lCf!vSMtR3I0wA&gCqV?Q4LRP(=12gy)jO8sb`tY| zD@ekWpMl1_0|6vq)<(+$mjxC8lo06!yBio6i!DVBSIE4_3vrf6H@W@gI5+N$ bp1uA9iK9b+xK*2O00000NkvXXu0mjfm>`^o diff --git a/graphics/pokemon/vivillon/garden/front.png b/graphics/pokemon/vivillon/garden/front.png deleted file mode 100644 index bcdc18e854edb163f6e6b259d67d4c01b31df695..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1010 zcmVUuy_E7U;qFBXizxdz<8L*Xuvoqn23P*`1ruMxDZe%_EPII000Ah zNklrh_ka-G{g^~+# zaXe(}*e=N$Bu;?KT4xA>0`cO7yZ?j?F}!u}dv`~fvaFP_0r9<$-|yY==s2sd8e988 z7cVdPF;EMF=Klx`uqp@zCc<0c;Z{%!R*VupG>uiG+z~zdB+l~SHh~cKNmTT16No3J z+G~krMTiMOIYdh=D=1+O1Y${XH>LB5BWU2JLIc*|FanIChX0g%7cgS0 z%y2v*M4}a5>eSXXfP#CX+++l{VN?bB5Q(k%POug(BZ*1zN9z3a8U+b}7({k2YuIj~ zq6z>&q)vp%@DSJ%eHdN?eFT2nRg|%&HxdWJ5-ME$OEnPXrz*Mz25%7<8311t3Gy%M zy`GX1gxWg=%9sODoGTon1o|q^@u|la=m7NLxl(El4AiI3eagUY>fA{ng1s;5R0+=l zyGkVyWf*`2dHyLsVWmN-4>=a&2O8+20P@dy&UC~y;5g%p{1mGO=pYMwN&dI6fM_e^ z$vbp0qy{nWGywKXK(HKF2@;1$2^doUAgKU?QHe4T=s-vJ!2&J;Nds$W-kGka9TG&C zvK`^eN)f=VhIkujh>eZ&a}vaTtu%nw+LoY+;Z9MUogHF}aEy5p(CL}9^eqwNq9~@# z1P*i`a0H(KPw3mY1KCk=o;8zUVhVVm@ZCEu6Q(dsULFbI1uJN?R0D23GzvJz&oNlHHwQhI+0SUgt#o{q|5G&V1ij6&@3<3gwDS1-)mN#3 zh-Yc#Q_Sd^FvfnlWOU(OwXH3oq-z=+cJ&YSbdhimRgC4af9}@}@NP3*=!fb9mVN)5 z-|iZKZ&rXwT?6~_`08jzM1nv&tpZ$~NZFA0FVAMOE#-67TLKgc@YrWmJ*lY~KJQ zylXE4b2GXU3iZPRe**-K*dy>C5jeVosob#50(0;b;<}9 z0GFZS(HtPbLIMFag{l4CTM|$Pt<)Y;TEa~L6|8*0ZXNsV=8>WU=U0AbH~LypKIBf8 g`}*Ks)7L-$1L_-iswg~1y#N3J07*qoM6N<$f(>HDZ~y=R diff --git a/graphics/pokemon/vivillon/high_plains/front.png b/graphics/pokemon/vivillon/high_plains/front.png deleted file mode 100644 index d8bae72c4ee9b8d98c1331c295cf5a5930a72500..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 971 zcmV;+12p`JP)47n$Y40=fJm4S7ytkOXizxdz<8L5fCvZ(`1tt1xVR9oNch+g<1*!Y000A4 zNkl z^VWX^4w%&l1+GOj!xMW!gU^VPY`Vg%D086wo0w(yHUWTt6BX%g0@$h4(ITwgBGA<; z8hjBtw|2M&xSCR62iWAS%CI!0KmlkU!2**C0^qeX1dITuXyE_6?*QF(-y?_=ctw;2 zjpYj16V)b1J@ASOpblLjHvMrv-T<%olm&N=QSb)mNg8VlG`J9`(7QFjpb@kJ+ap3i z0~m7yY#?CQK?jN(nI@nRKt+gu8D0egn(BBQ1T0}$!cR<*6|}Cv7$D zo$cSVQ)5hiR=j(d$CcqF%PbJy1(3)ab%dWIUzYZqV$dx2pHW|FVb|3@H*br(1ZWXM zyQ&9aUphb@eLw#u9k7vSwNEjpr_UIB^pnwpvwGQDo|i)@<$xbZdbZ2o<3#x3ihy?W zv>6jnmKT?GBHVv*MS^F|AI;Pe7k{4Bfc}C7Qh9WKcwh+x*0OP+l*3rw|9NtN+)$RI zNnliNmr{P@A2H=~9FN3Wvkr(+S(ftE*C)p|VtFwEFfqa&^6>NWmxCcL5+evU1q|Dq z@xl9&6e9#`8A2v7MEN`aMS$-x4q(bFEc|MPIRPk`1jLA9X7fSl1cKE83h{yn`t3c| zNl?p304YY7R)+%;i~%9DiV6@Y80$d50ut`GeK94V9t?l>m(&U-08}vH4>(-FI-9&w tbm5w{aXwMEit44XKV7#M_lCY1{soa>n`*1K{m%dZ002ovPDHLkV1jJLtPB7E diff --git a/graphics/pokemon/vivillon/jungle/front.png b/graphics/pokemon/vivillon/jungle/front.png deleted file mode 100644 index 1ab8f99eacb156b2a39aec96438eec9c6f1711a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 923 zcmV;M17!S(P)5)V$iM&q0BBG+;J|p8h=2$P2>AH;z__@O5I~?{AW%3Uc^**s0009f zNkl1%-3<}*h*bb%8qsJ~iHhWK!6W4A!kq|}t>Gz(VB+J^}I;{J`EH+2H40MF(|3{#K zU4c-bLpVD;t`T&^j#T)Op4gR22V%3*d0xQ*%t}=F&k0~sshtC8D>z0FRT2jfJsV*I zh_I!=2yi4=mBXN==phiB6co@@^b#Z-ZLk;tTG7ETp&f}pG%+zOCj^kX?5WimDgXr> zstP$ArgByXa1Rhsn)*2V*p~^xpHu7Ah1!Ee0hXe#lH~Yj3QqtuqD04V1frnRGysL9 zC_o2Fg#-wv2`Oy+qza%VbQ}Z>s3=l`uK``g&;Wgmp!%bPVr+m2YJlpJvTFcNHE06l z^l26=5mo|lYCuf;(7;CE*A1wMy9#hCfgchu7c8t48sJ9YhoAvqdI5*X#vpi|)e1j> z3ILY|k_eMX2~ZJySpy_GrVn5-+178N`;(RfZz2IZHX3VPtY+c^D!ST2E7eOFr z7@-Y3mTs{8GW<&W+@loQz};9dF(;s;6zVzHjFKqt^II`Lqj`$Z0v^kXjq_73&A3!wzc#6k~r2ux11WAdzl#4M8=SZs{gq x*T(F21f%e3{k$=+mQ{=FtUa$T?v~zm{{iD4SCot}gD?O9002ovPDHLkV1m8yjrjlo diff --git a/graphics/pokemon/vivillon/marine/front.png b/graphics/pokemon/vivillon/marine/front.png deleted file mode 100644 index 5ec8a8c465931bb0c2829dfe7c2d83d8c198ae47..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 996 zcmVh9K%0!bKl~|mV;sH?S zPN-ezjA$1&)Cwt{+J(guV;AUu&`O=?M&Em9gOd0qEU|n7Vexu5nkK#E5p2X9@ z^|T9<&Vh-iar~@16+S+W58G77yKtNkfiiADBJhvC&d#2m%9$ScWWu+JfK7KHgK7X9 z$4T=2?9J*Sc-%Thptq+}rda?k96e8xjdJ_m>|~K{bUdgf##NQC)Yet1bb8hLy`;TC}3pqcsgQaW>x%6ohcGkF`H$ zL?OJ}0PI7B6NX8rfElekKp_wSMQdAF$0qX`2`C8sg;-`e&;oscX`zIB4Uj;e0|Asm zuWfom0^~uRrY|YAFbJT8m0hq|z`8Z~N}MW6MGCRX{esOQ;o5z2Na&VJ@ S&R)9!0000Xizxdz<4mQuz1+e`1tskh=9PjxL8n76uDXs000Ao zNkl-cXBeYL!5Y7& zilb;>4-{;>@*e>Wj50z2ZBZPd!xDjlJtB%TqYI;=jBz*FiCLzu65u@9i4yKr0(>Er zE>`)lgo6%t8luXFC1%m#0k=KQ2W&v~%O)otOtI7f)e3Ez_8aLjf0M13-$D^pI zki0=VvH(s!>_dAL5oihRkpRS_Yn#)B(m~e!M8d?sP&Y{;7(xSqnzuBd9qI{CAqTD( zni+sLkB$WF_CD8iDg_kj zE`(R>ZNpL=|2TfJJm@ji21cOQ)2UKu&t2PrM{yj#I$MU1ZJwNTnE>_TJl=Q)(Pn%U zoe2Ps>j)LRd&9KoGJL*x(0{oZM~6`pU_Ve1DrNO%J0-<0gNzR2m$#xC3_elYeA)^X zV3r)((1ZTgIgYacb_r;^R+M~=I*hI#yIehG_v4!Z^bqjfxwLMW9fp0c?eyi=&(rS` z0V&%o3Nv5Dh(;HGjP9J^4~}i)EL&D8j-=7G*Bj~sJjfH~bMSF_wR}{rYG7|J%+(z@ zz~#yEuku1e18gn>bV>?%BDYRAH;4!jm=3c5gT9m#^7hH`hFp;H8Ms3Lpn!aH{$@kU zss_qAU=eB)^67^^?=e7o!U2{CEH=N#8gldP**jE_E#@$0KiUwLZo6Z9z#vJTp<+m9juR3e zz@d@@Esz6D3nk_+020VK5I`yP+PXU=Kpxa-@<^$L%K%DP=>?l5tXr3#6iQrdqR-K# nx{^pYnVsRfdbt1Se;@w>`lpcY-6M?q00000NkvXXu0mjfU#q*c diff --git a/graphics/pokemon/vivillon/modern/front.png b/graphics/pokemon/vivillon/modern/front.png deleted file mode 100644 index 2bf593a485494b5f1eb57d0af76ad7c4c958623b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1049 zcmV+!1m^pRP)7*duuPgEIGE9_~28Z2VZmT_hwe|%8Js#hMD(%`+eWe&Ztyc zJj!b6JzWgfe?L(6{nh^wu)rcC2v`euflfUaDEkYdG`4JGQIrpKJAV>cK7E&f*7=i= z*m{?MZcU`!x}KM)!@-|~Xz11)undPO;OjYwa#t+WB*VPK3TdtL2mtDH5-S9WT%n|( zpf@dyfAK9pBGRpiN6Cd8*=-L?{@tvKcyba(YbboGclj z%40r;Bl}IU*!TSo@k^#LLKvXN>(b_L`q~0*f6o+ZJaS-C=45F4!=G|MfBu;P0)z+! z7|E(PP?CA1egV&}@ks-@bi*E&_>& zu(p6J0FOb8###2)s|YJ&$v6*kdZM~E2?FLpmSsO)4!LLglF<{u)nCdQvhiVd9$yYk z0F!YQ-@fFirU4M_@nIIfje915L|FCAnT;yiR(kQ6e_SVvE7i-xq%dW}c`xEL_D{Mx>Pb__dOORk3YU zRstFOepEFRx<5-e5hW-OymL=kpnIoCINx{Z9?G8gkEf~@(02+zv}}N0aCC8aAjA;B zPFMumv=;=`;G@^C4g#1wngeioAP_vedUg`vL)a)ebdh0j0OQ zdN(-y?al8{2>NS|vAEkhMD;CrDG4C0;z`dIDE0{CU^;5~YmP7L6< zI|o#7$FZ3qZn*3MeqB@%kPrYUk=gAsO8D=-5%3KH8>Km=wS1VBu( zwI8~30^$J)ogY$pg_{5*l>Q>0FQcz+9w|9+USS^J=o^X2Lryf`HwX8czMlRE@d26D Ti|Zf700000NkvXXu0mjfz%Al( diff --git a/graphics/pokemon/vivillon/monsoon/front.png b/graphics/pokemon/vivillon/monsoon/front.png deleted file mode 100644 index 5dc6429009ff96b7a43a963a95a3454c8d044b18..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 909 zcmV;819JR{P)BjE6vw54=$hwB0^2QA7dsu2B_Urx$t93YGLfOd85Cj_$3q}f*A_zO zLK@JR5;Ay;hd{Zh0dHEnCH)5NXXv|kCt0%N^sqs9_q*T!-T7q0SlmoldS(_|jXe*T zjCubNC}2?#3RFaGfoE9@Otzqu)`pr`RLTp!tyf|#Z=Vuyu2-UB<0%2(%GI@HKCf8D z1eO=k;#+fojR^(7_?*JzG6M1%<`pR5T$dnEY)(OdHW+{g?kgC-GS}Rc5qXADlejwe zz%bjo1m5ELA=f1DmjRiuTbu-VE7;$b@W;S-d9D+VIR^qv2C~D;fD-sX88v3h9%X32 z)&h{1&SW0&Tw&oSAb^$>fKse0Kqbf(903m#0MvkA0^|ZR5TG}O849p-LD?XO*5zy< zH@U_6MahsWd=2o;7T-&KdsH@DpyGImfLGf%kfzWWT}hxrHSDE)H?{);U>$6z0N32F zr?Mu;!VnW=tEXS5!01}`eFThvfLj7U0U-h-?9;jcfhIIX8L(Z zf#Kb%hoowHZT%mz0 z2netcph0nn?+|Mb=^3{Qk$#O1MtC-|^&kKK$=m|S=jBe7Avyg0_%k8kF0TB!$-Bcs zl)ibOBafoFe;uoy$kt(@OAmu@L3RFpDu?^d!~q3d_REBIFd)EjemUSO;KV5bVS|7; zIehGOi9i5?GC*E8dHrzTO)%s%NoIhX^b!Th89VDHNSvk!IJ1D8eE9P2Tt>MFj4A-! z3}i;{Q~PsQ?P3-f(JmRVjslY8s$7Gmfhe8=aTRFjQO}B=2Gjv30scZ-0c8M-(14Kx zak)kbkfKjIEvNu^C8|JNO`toY6I8~GKxRMzSR|MMPys3dpWPT{5|pA?6qasuMUgME j!uff_h@$DBHGTXC^RH*N#jE7m00000NkvXXu0mjfgE*0_ diff --git a/graphics/pokemon/vivillon/ocean/front.png b/graphics/pokemon/vivillon/ocean/front.png deleted file mode 100644 index fcdcf11a7bfb18176d7c8091c5a5886d0870c2a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1050 zcmV+#1m*jQP)OEO3kG~(NaPI$)fB|MTf`Dn^&Csb^feN2tCAex5v#iXC&{o3B(z^tN zu$7Pq-z6ZHOKINw9e| zG!pZv^T8bwKqQeHp$00v+sBu2AR&QB=pG)I^iB7$0CfN&1YIZwc~k3=go{tA4@o6a z^PT|&3HC|C)t@=JrYoZ49!z)`bdx07y%RtSz=#35!g!KP7Pw|w;v@zjm_l-uvZ*td z7=f;oS1quC$s*RX0EUPVRkSRianvnopq})k?Bg<4waFoeejgG&85 zq$?XDbkPKlbHnCKKq3GWt9Wcu4T!|#C3zTdTpX3$5Aoyy2t4guU5GF8Jpb`15Or}=w&NJLT_u1$ra6&?Y%|}tSq6ne?9z3X<%=E?8l9j>-?*7_sPWTT)A;sVGa3^{ykNl);LkA zbtrLA-KlC&{qo({qlEi?p~DN+->TdYFPgVTfWg@nqr82%xn+nKudk=0fL6GyK793P zOYvs}6#ghsEB;n0QtHa_l`W;jx(2EvfCu1NQ$20{a|hMfO#-Yyk9D>A?b{X&s>Zs}950~qn(vc)&I@2Z2$2Y_;QyIuS~4%CVpcaiXqT(=Dqot45L2fX4> zoTHQCh8{p-4IM@Sm{=@ukPgKjv{g|+V8kNfdqFb24cjRXF82Lfuvn{Q0) zhu2dA)PpU?u>st8#h(Ho!O9DE&s=8{9gM_(MYPW*@>-%SatG6S$H}sjpnJ0Y7kP2q UZL4SB^#A|>07*qoM6N<$g7dHNp8x;= diff --git a/graphics/pokemon/vivillon/poke_ball/front.png b/graphics/pokemon/vivillon/poke_ball/front.png deleted file mode 100644 index c474cf54c2498e987cf412bfe398c2846c2546d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1029 zcmV+g1p51lP)l*O6vxShU43UsfT^koUtATDqoHy70qmYWfF0kUrJyu$NE{c))U_Sb zu}A<99OWUyb+U#mgob+X#KjuYLAbG<0)K}7-;tC>%SsOtNZ$M1|NZaXJI~uZe6jU~ zD2Ajj13ppoKLQ1?DG>yU6mo;kb}8V~1}lwcMPQQ^U;S9Fln+ZZlqy$3;`@gL)L|tp zAFFkVZDgRz#I8DcFvAicwI+cKNFgc@>kah#vd5m!!v2ZYx}mBH0nmj+1vC*q(p4qIt^hD#_?OuG>Q@M)0Gj$_-~gYV zD}3k*c*{U~ex&s-et3?&0Yb}4CCSV~uch`!bO#q$D4&)LB+O}9z_9U>XnUj_6|`aa@lTnLb6KstcS zs&$mo9pD7?zBn!bwf}?G)WoJ85KbY$3Ie-`yfKLah?anX2}m615=aFD$IzVwNaCAG zn}LJo5=aFA817BH*a2n=pH004&NWU8Q^sro2u*1Iba5^AhBQhqOmOvLrJVFO!kT4gm zJkQ6`yoXoX<+i031A>7U)C(_?)BHM#<}d>Qjd~d2?7e`2lSArF&FAWE?Y>jr&aEBO2v7Wo9@XP*2Kt{`*R8oF%Rr3?Ud`qN zpxgSlWeEV$Z13X=Flu8BrtR77>Fb-mb126oEP)Si1Y}`@MUzVp)qvjn(g1#o_R~ zfg0!je*_v>6odjD;VkgDMo{AmO7Yh9!lF`Y5SyLO?FtXT>_kO$n*ds++F5~lg@*~e zEMf)b6_judaF|nI0<3dZ)-bO?0mP;R1g-0`vmj&Uj*Lk#ULP#F%F zSq#t}-T+OB0#L1}QzIumyq!pdZTv|rYq^I48Z8Y_Q=pv%8qjA54d7#fx(wAht^qBm z0 zbG(d~M))U$)?hX9sKiLu#d(5&YPGA1SX;Ze2vHF0bH)mAR=^NZt0>OT`#?pRMn1(y z+y;D->H)~xdf1UROZV@P+4i_{OJo&mUz&)%|4qo5n^>=x;M8Z61N-r_gZ zceZaj-#tn9i=AfbwnyesutWhirsryA4_`;VDil3}n5E`5>W84E8&|)67cK#9If9^E zM@1;N2oQUJuYL*zWSyyhZYhmEW9;E2qk(tH% zfz$meVZW6l0ve4!jX)9kM82*7{iYn92@#0BtKDryATUg(fm{ez+`l~EMov7-yR$%+ z)50M?+$QivF6FRM0hXl94_xv5+mmBKQTeHqohrbj?47w{_h|JiopTvWkZcARhuYb2ma#J$0dE=nTebIvV+QeJoCKoyfe|V);F8Ao>;}^@}~it^YA|c z4Xg`<0v*C#%W4*906&s}4>8@7z0A?pDx~l|mP^;YzEGvAB!0RMBu&kg6 zj{t`y1xA3FvpR=m1qwi#6cn(iAOKu#uowYaVdHPhM8H#+7?w*zUG~(n!y0hwEH%(= z0xAX0V{@H6tQGH5>-jMXMmSF5wp0LJEAIGE11C6@Cm=y4pkh!c36P)8fQ=jlpi0rA zLdIE$^A&_cjhDMqH$q2+Mw$_>0fyqtsncIs1#U7Z)_ zDFUk0o=Re8=i(wkfz;=e3UE7Mi0(mAoS*lAk}`#Si&xxhLrnxlQS`$EB2$`}za+pl zr96XdSX^Xb(#;LPL%e&-F@=IWIUE+*WfpDZdPatUdb2%K`TR7yEDm2~o*bF0V5tHe zkIGK%2wxxHR(;+E$ujd9_3(8n>F)K0oxGO>!?UnF+d!Bzy2yT5YGK`%c%7j zW3R6mH5{c2pYyYKlY1dVpAYb_D97WQ`On$;I3{2>xClHAjDIy9&ZnsYg5X;ac^bI= z+W>l72$UicN7usv5(;=o=Yer4Jn`b{d?2Fz6+nf+oe(jPG0RN?s)t|!m`sHD(moMl zznm@s41wG7et5k7c_7O27DpAE2d3lc0$P!57 P00000NkvXXu0mjf3<01_ diff --git a/graphics/pokemon/vivillon/sandstorm/front.png b/graphics/pokemon/vivillon/sandstorm/front.png deleted file mode 100644 index 7c9158050a637f9812c66b81533b12b79d4ad81c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 958 zcmV;v13~p_362Mli_Lg8)5nu#fC$R*x z3W_iWILs(80<3aY=P;{40Z5yI2BsARfM*OXMu1T`_-)$=@bebwhTZSfjo^3VD^w$Ai@Z`o9KOv0V8MvQt!h6 zK`m$kG!)Y;RwAhd;57hAF$@3@n6bENK!t2;z=y6`AasZUXC@$y8X$lU!etT%764`x z0d!pqg4bDnK;R^S8UPf&yvwDK+3NfhD?IRds%z0VQP%`3jFXdk!@bR#i2K z5{PYSR{0YGJX^{$$akxYJW9Hy1$cyK-*RoCpiK65tNb#L7fLfCqfp=3%vQcU$uFzD zr@1dr?NP8)1FlbHr?!u;BVX2i)d$IP`x<2lC@o#T{`0%?g}(EBi0gS&Bv^fHV*l6m z4`G1b#GhMEEn|#5yJFPvDV=(qAG{t3Yy-YSKjO`3>fh1LzTV*YdUz4~niv&f)8T&F z9@20a{tRP76o(%hK-SSfEcUN=cMMS+_R<-^7mu&bcaT%V8K5^5Di-2^A7GXp)!!&o zFKhy;SW|tm@%`m7`DX#9ibEyD?$Po$+UFrgP;3%-H0+CYp7BAw3B?*YxJ+#qL$RL6 z7N7`|K&Mv}w9&|QtY8{Y1u8~uEb!uuC<>)m6QCrvkr>edEdDLDpphd1q$oa9-@#uJ zOaLxpN{s=W?@dM^po4@tV(d)|C$NJ6o3k*>;bzSoS%$f6yrtI&!^_KqF&@? gv-A4m-qN?-e=OTGO28Mf!TD_rxb z%h(DAd|o~P)ZCXzbOBhwfGj}D)+DzJpf9bUOTGm{tB@m(rcQm|3Lbacg#p_X^H@{> zRikw(72_VJ5r{EWuP^fj*~08x0G9uINK)q>$M?G> z@Z+wOdz?6OQU)R$m*+s(+vOpR8~|(v#0$X1jg*GK#M`r0+Gjz;S#YOB3ZO~S5`B5| z=IJR5ta4}pzuCd{i7*u1&hwL#7o5N>WgnOXWQ>`bB)5drD62d(oj_X$A zL*ouBv>wu}3V^NP!DssT?C8)ELu#i>!1wy=k0*!v&U5r>85lp)`n7m{sP&D9258Iy zp+*&dy#3*g*3VT!i-1SrI9B@Tuh!o%jN<_jdGi3NbT>loMYfs0Thu8LX^*AFQMqfzgBBx z;5v~W|6+6s+ZcQEfa_r$p`Mt&*`@gm4B!_cv||Un#(4qffP#ukY6J@a6kd72Zh*MA vc%`5?pTzxaA#N1qBzL+THy8JUzUcl3L#cXx(gbBY00000NkvXXu0mjft;6Uf diff --git a/graphics/pokemon/vivillon/sun/front.png b/graphics/pokemon/vivillon/sun/front.png deleted file mode 100644 index 532b4a019137250b45a0f0a331e1daa373f2a33b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1019 zcmV3KX=tyAjfG_|60PyHYXizxdz<8L5fCvZ(xF|^Y`1ruMxR4l7<6u2=000Aq zNkl$#`1ZJ+m!j6};y2^k{q{oV6C_a0C7y!BT{-TFcm zS2y@F&oe>0_MR$!(R10*1HBpAUuCOl3hR*7l$g+KtfY$X)NW?b@=wBM? z?mfLK5y2s7LTu{vMu*QppjRZ|01MS*Sd|!R(z=cS;NFVFFr!3wor0%=&8(K_;O~}o z$cWO$!|Q6`R-&7G9TDCriD;;sCIcWR(EuYRimB;@+6)1dBJoG=ef1Io<71+TlFR~~ zAj$B+4e$zp6@ahx=muJzc(wpWr3gS)Hnf99%Hv~^@bSq39Lp4v5CUvw)JXXDv%#E+ z040*LiwGnV<7Hq*OMsU9*m^i%#5_VL+W;gum1>Sf@{CKuN|J|5KrA5~00HL50K#3D zLEO+;F1IZZjb|(uh1OykppS&srOY)zBMYQd0~rYBgohmaFxjAZXzNh}XlOByIX#ZO z+yXSV^#wp7Mr7^V03z8YPBYi)f#=(hB07s`ce<5F(&d@#CtX%^sB0x4&G6SzB}Ms0h9mO%mx7fcIDb{!@Kd1Nu=@_x#)10p{rMt2agfD${WJG%9sF#HG~T zPf97d4X>Z~4xbua)8MxU@_os_|In`YEbzX6-oJ1_oA96PUoytG`XBp7B$)ThUzdPM z&j@f~j;;<4-&(+!y}Sj?;jv@B`E+(@LeS+3fJvD8B6x9VOvsXGufGiJW7dxO>-CSX zB;p7T^A?~0%-9^f-1_qn=nM{X)duD`EhoVwn0_s<^yt)RwUohE+TgUD6we({LSnBC z^vq}?SF8ClZ)tI4KV-!002ovPDHLkV1j$D;er4F diff --git a/graphics/pokemon/vivillon/tundra/front.png b/graphics/pokemon/vivillon/tundra/front.png deleted file mode 100644 index 36239fbe94120a237889e08894be4bd8ce9cb894..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 947 zcmV;k15EshP)Dw0EamRMt~+~c@Fam6hNd?kU&{M0NBc4Fangq#Q#+t0e0W%7=}$lsjy?i zbaS9C@(M{HECMnGA)5L+c{f*ljE#FIDCprhnDinEnEa{09lJSjihvkH1f4O+7&aFo z0ubF>pe|4VvJ|US$Vm@}6M+f~|6;><-9rJjwgM<4==8oQK%F7bfQu1iH<0JJ0hFK! zMDiR8@Nz*Bps5zE#>PsJ3*cn|h$w~v06aC$oTPh&VD!_yK z7&>Cy@-zTjO5s6hVGw-I;ynW00CE6oFrg_-A|@c5i~(r<28e1x5CEG9crwM7F12e| z9J>(~7oq^#gZ0>>6hoC4=P?4Z)HRvJ#>R9SpdeD`j3i*MfhNLsnx38Yfs)dNe2!P# ze*!t-q-i>EFQBDM)8r2cuyrYWkc`r4;$DP81Kh>CH!P-aMg)hWG}%vn)bT;dEv_Tq zZ2!Iny2*ZeSWVt^dTOG&-b^!-fi zIYmHZwC(NZXQw*H62KHNI$8fT)Hw=P0x*ef-sb~#hzx;34i*!X<#y80zz#;31!R_( zr)!y7PzGcSe-#T{kpjVr03~ri1YJM{*GW*wkpNU==MCzcStbQDfW??V;=2X}3T7e@ zP(?yrG4{#=ih&BDHkndT0#Lz(zF@10>#Y2w=)pOKeo|VOihPsRpI?^`_m;lx{sVIz Vc_WSpzZd`j002ovPDHLkV1gzinCSoj diff --git a/graphics/pokemon/volbeat/front.png b/graphics/pokemon/volbeat/front.png deleted file mode 100644 index e4f17ee4d1544356a8b010c25631284f0befad35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 746 zcmV6q0007Y zNklo(1KP=<2X1D1 zgGka$2^fgjT6jHNTxu>;hnCiNsgt3+xYf;Fq{QcvI-Gsd?)pFotcY+`y!IwGZ_idz`#s(V@}F#U&>uk+d@D~Eb=3{{q#t_7q1$Gq+K^L>WmP* zNRB|bs~f~!CYh}ycqyU62k>g?f!l@85}@<7C(lcD^gxn};N$5y4-d5-bfGed8R{n= zDo-FT|9}Sii_Bz*oK1qaK7bwmu>EZapxc#i61%MblKVei<0;V%3Bha4;8dVtubZtg&DN+h_J5;OpwsP>3eS8W78blm5I= zrTHorlax!@V#F5Uwlz^;IHS90Y&sPGHHG_Wk4ACF?+6%QI1!NZ#)dTs{Hg3!{~5*= c4gSme4a7bgp-e|}fdBvi07*qoM6N<$g27u^C;$Ke diff --git a/graphics/pokemon/volcanion/front.png b/graphics/pokemon/volcanion/front.png deleted file mode 100644 index 2a35f607d3950e57134c5df044b3eba0b7dc6d50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1042 zcmV+t1nv8YP)Gnsz=$yTs6e=IDERpJ_jD~T00009 za7bBm000ie000ie0hKEb8vpze-E{Bdm4xpCM2b{v?8E->408sjDcVubYPU}F|D zM%?m$BqB!E2m~B&_;)c$F%BDnWSXiB!yMzR3Gjx~6g^C)IbsuFs-*>xA`TjWjw-IY z;PlHIQmmy)e}9Qy`E;rSW|EV7824PIg74@R(qW#0v@+A9e{>PfFi(bg(Y~2Cs5Dh` z$*`>KkZokB1jbs<`76VVRiQOLZ)hO{b;(CaS_jlJ*LRGmhNu!CPH0$M z2gsa6B|sc;BI*(fb6%D}hfLM?1C8)uT2$C3v@XH44be$+45A4pFUd!z4n(%aFh%Am zAfZgP3MNLje40jH7YU#;o(2$MZF|uh3J&RDiMmD_6>~hiJt+Xt20;MOx*`E4FF@)p zs0M@EZ;D;prf)m{ruq4*$CR-N$Wtdkm>CXG%Gjn{W2mK2L-1>B|dLAxh zkDQ;+?;QDl4{n``4ct28Z@=!3oOuGW@6UJR`zKQL&n^TDwmxz$Wt^yD`V5!}t-WP$Q%?cQ~SAcL1#3j)B=a7hO zwx|M@uG66?hrhD2a<~A5#j=)vv{@xKtS9eDW+f}G0PC55)Pw3yvt;=es5pdW3Hi*I zwWDS+<}!D-%8=5iKkfErdlNG4``JUf=tp07SwfC`Dn$GtE!pODNz^56p0DvFNoTAHb0C_JLe>j@4g>@-+OoGCrJ-@gkrIk|H^UX z(F1TOju7_DBS>EH>nP=2Aqzx^pdf(ooJb4Z8$rZCXw^Ge2FyIkzX0qt@B?xj6URbv z3?>r~u(5?#Q4Ah10GLoeAZ79x3s;hY2$?M!_X8x45xfzR-+d+Vls?NEtB>HW10zhrC2q{^YRTTh~uv%6UBGi3Au7SDAKbLXV>YcDa z3X)W5Jmu<#^D=p2^{msNffQ{#y5Q$u^LW4CJB1Jg`H7P9MgLYNS*vRqIfkK>1vwN` zN*Su<6BdjEp))3X^*F1oB`AHd54w4V-OY^6_4Qhkp>%mWD-5ij*lAJf^qz;;S+m7z zduRK?px?D%A2-F3)LbGAaFeqJ2bFh)1sn%=&g_-YkuYNd*s*%>1H^pCxU=dc8gVZG zW8nXZ3WM%3n+*{p;yk@=@b}=*1&5wlnE^H7k(&Uz#YGqqp*7L#iZrt@=#CSjZ6zG;}#9HzPy6~tzz+wUKlrr9x%CtEo`av&4~tW6#MI!1+wH(1tt z+It&A!!S5iP2-SPSUtI@LnQ@UeXepk0$|_(+TwLc-rVX(y1qL$e%k{`PxI-K*Y*{q zoEGe>!g#RcN=DucDd#F3-_XPRL9-nI!k4zV^aXo-b2t3S+ciHxe%-=%rQ5oFHw2*N z|M(^H;}%lb9jW&H{Q%KGcL0YgNTFcce};qa&`(`#pYHMbF`64C;pseHTW&i341 zUG#>CYEo36tti6LYv3~PJUJ^_&96&RF}U<##$VQ2VUNwfj&lG2002ovPDHLkV1mCB Bp%DN8 diff --git a/graphics/pokemon/voltorb/front.png b/graphics/pokemon/voltorb/front.png deleted file mode 100644 index ad4385d1bb1d5b7ae22ed66641ee99f6479e6e6b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 380 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`7zFr)xX!q+ zKtMpCSwP^bq2vD`g?EmI|C^)!ubBhn-n)8r%bLAEe*B0C27v`&fz&Tg z7srr@*0)m~g_;$3TooBbi~j#M6WDNdlSjc-&3d=;_dhwc&aGXuX3ZbZnzK5*3=$R= z&lx%%^4t=gze8i*$FRfZ`NlmJ-3ve5-gZ{H;b-mr{k&d|x&|T|+69dp6{J|MOFC#T z5boK=Fv}se;UHhrngePb3w;;X1}|;!ENHP}YnbBa7{*z_RQF(lAtzH|m&{w9Z*SR)qU-#OrvhG|KW540OxMeeR_hkRB zJN}jFd1{{1@|0&c6)r1#<=;6Z-mLQ6avtwbvCjt|=y$E$e6sv_^W%>FVdQ&MBb@0PbR*m;e9( diff --git a/graphics/pokemon/vullaby/front.png b/graphics/pokemon/vullaby/front.png deleted file mode 100644 index a24b2aafbef5cbf1828ddc99e859496c2520b3bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 673 zcmV;S0$%-zP)$S@dycyMS~Sg@dg=;**$P&jByv2PkN6vn~HTB*KMRh4w$d?ghzm2$S)2&N8c_kc|2RxNwgKO%ErayQ5n zZ}n=j+=^Mq2>dU7zCilOKSbTky-ga}w9AYb4B@R|$! zJoaaxPnU1cE}!*%OO2!9kIBV%F_4~+_C)lV5dH4hmmt&bc+hHhy$*6b9(2c2%1VoR z1d8m+3Fs9LbsRHtBa7G~LcSc_-%>N4gF2Zktf+t+p$(T5J*ksIL7b17NmxX_xb*#t|`h<+WVt zj|RBmJqGpY-KdbhdVof2F#H0)hoe{3 z08y>tdTNb4w-h4EjfYgDF|D>h#rSBZhzEGU;JEu1>YuIOPrTFCuZTuW00000NkvXX Hu0mjfPx#Fi=cXMVQc_b07f!lv>_%DZNT55D*Y^F#x@DTIQ5$tXc@odny0_|Dbqqr~m-= zy?X!v09VHb(f|Mf_en%SR9J=WmEo>}FbqZ+TicBrdH=_~U)v2)nSlPeH=zkcjOVQF zIvj>8uDIe4M?icSQLORS5E7P7;3236 zTNj2H_YBO84#aT`nrx^7=Oe{k0gDLI*A9RNuR=Ah1nr?G0H4M&MeR0o&Y9U#4;8I^ z+7=K?z|zJODV|NiO4bClL&&W!(Bc&ru5>Ad(!B!DW1Dw_c8?_A@hS)po$MHh8R;d; zYkt!2s^Gp8y&5Qo6%WBQO{5zV(gWXZBRE`S8<0g9I3*XfEOf{_DNtRTeoUae<2Dpk zVix4HkwW8jGy-C0KC`BrK03$EoP@1br5IgJZ?_{ zpNP)-W?*@ar5>`8+!5GY>BZp*X+yn^cYNPrl=Xj)SH(QP2-s^pf}7w~!AHooq17?Z zbY4L07|zAq1g8xq$TTy_Cn*T~*(55(XG#vWZwVlFxNsf{7XLs{?9HxxDLjzAolgl! z3Niphh3$S?0Kg%g9V%x92IFdvYPx#Fi=cXMVQc_F-mh{oXtvuv@u$gATde+006YT#qQOlYGO+N|NsB)&4Y`aoQq=3 zw1WTu03?=20{{R4=}AOER9J=WmEDqqAPj|CP!B-VRh!NnDefJ-P(+F1#696O5`)vu8fam=caa_fd z1OZ@}D4rugoS6^*2ZD1D4FN9zc;On90XE$LTSF;V0|oSo3&Vhw(gfkm4*BIocxyo~8z$Yzkz-Cr7R}Km}P_1Jz}NQ1p-A5dXC5z@Bw=CuX0rF zQ>^ufRk6SbGt&T$XhPr=oh#!V98vce*db{7D6X3wl>MP+EPNH4uzC zbr~pifHvWr#(b_a4CnT0gn;XG4l4j%a-N>-0<<16He$n%G~#eICMMU7x$7j7h{3}- zg$vrXKsbihLYyb3Hwj~W+(W?6S-s@~DpLxsIQ$26^W4vA-!#gg-x8AG-_%S8E5JSB z`La~%(%q|BJ%)1;B^rRkZwGXB@KtC7DiEdZ-~bbZFg9Nq8bFUc*i+^v@CJk&2^Yc+ zP`ZfTfRLZY^|-VCHsWQVlcUmnLq-T?2{5<~4G8&FX1PIcp>Rf(ZRq5|J+!v*FkiNL z9*I9$P^w@#h+%DzSD6yUP!jX9X_2=exvttyp#BE;w-k_Gqy`x9bQRElo;DPrj&kJV!K_> zLWPt>^*tNy9Xl&*$h+NYhx2reLg&@hyW#yEyIpEguZjRq)u_B=BLr?t+NIRvIT9b( zZDaNB#=cxj+vv}4c;)sFI!Ru~#aTL64R555hSl>y!wlL+^Tc0ovDrtBUffsN?645Uvmy*}tomr@j4hf*Oz0&E??vgi}o2!)8r6zFg9 zLx};PY%b$p)joiMIoj--r6J&s$Dd%sv+Um6ASS~)J3ZRM5()v zN)%;05!ICMs=Shz0qS!@9npm@bRG$F3e-^6bjTP8MdUPeKG~(w@J)OvIxd<}Lywh0 zFxw@j>XTn*e5Lz=J3Ia~94vuM-^@>I0@I=B%@LRo0>s5!z;JM$Q7xDcpjT{oehDoy cuZO(&2XgC^7+HA3vj6}907*qoM6N<$f;W%6)c^nh diff --git a/graphics/pokemon/wartortle/front.png b/graphics/pokemon/wartortle/front.png deleted file mode 100644 index 4768f5f480668d42d69855295f741a7cd6607db6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 780 zcmV+n1M~ceP)Px#Fi=cXMVZp1i>&tl|NjsW5WU6bDM4ytd&Sl6_N>MKYDyTCVq&a|VlhEV-o=Z^ zFaV2MAklTk4*&oHib+I4R9J=Wmg#cBFbsq%OR{s6$@{-;cV!0>2sz5XPSwIN8SiIZ zmh<)XZ-3B4KGdhAA7KHo7lPoap9bU?0OayYePf>NnGpI909W<$1n^X#mkSQqnm}YJ z+zE^ycF6(ny6*P?TLVx*1aP{D zL2y~<;R0<5kb{HeE-QP|ixhO`9>O0r5dLIR7kbEHCBFwKx*){RGM?H!fb38OD@z_tJsHOCouq;DMKXKQM>K>+^qMjvSONK0Lh z)PH|N-v}rTKSqE6k+xh=ljuAG#<7R~cDv004}el{IV!nDsLQB_vZww|h?G!I2jJ^w zD`BNqKqzmwnV|7lLl1x#%UgG_&H+3F5KnE#(4z*d=T zZCwG(5v&&L6#(v5KzzNp&DN7KC}V&2i|-0&iuji5FVKJcL-qsg#vJG-+zDs^0000< KMNUMnLSTYuuV4)T diff --git a/graphics/pokemon/watchog/front.png b/graphics/pokemon/watchog/front.png deleted file mode 100644 index 82cfc39e58bd6be940a80909a4bcc8c9cc5e9e2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 668 zcmV;N0%QG&P)EZjn74VR`tp0s+~= zV}J+8L%Rgz5U!j8JUc;PG7VfE$8b6xMhNI-csGjUlkqVN8fPQfY>r>x-{6p7GEwS7 z^JN%!gtJeA=V!V4cyERa;YJjgPM&;M7#1|Xe7(D;RN2Cf5jl&ggLU-@Y|*1ZIZ z)Hj?31B4+j@;BvX9vI-lT$Ui@fGj^O55b)7 zLiQy@QWv71&_MK8@}@=*7IfXpveim2mZHxrq?M-G-$k~xG}FTUv`S%VW(eT`%NayG zfGSa+1HD&eeUN$#u+mLDW{k$es+<7}pcH=q3KncqFk`#~2@B?1fN-mG6u5;J!hQQIC5!{|6ka#b z#zWo-cz|cTZ8CSwItE@w?3KC+e%>{+ti+c3|KuMWuIbPGVM1O20000?P)@vjPiU93ccMEvKsCQAspON9`j z;Fq5hO&U+(SV$mT@|D^N+O&uRhe9O7;q;cPK!eC`1`!f3UN1jr>XQe}3^MVhWvf(;R1!FY4A zVpyl9*Cu1kF!Ov97%aNhT?QFrnKw+Kz6_;Gp36*B1(+yMU_!m|r9mNJ=2<1MF&+Zs z7UatEh2{;uFVXC0gNho@wm^5f`@WX(_SN@deHT=m!nxNkR_(+T7Tt+tpRBAth Z_zPlL`RX8+NY4NO002ovPDHLkV1nkvO;!K^ diff --git a/graphics/pokemon/weedle/front.png b/graphics/pokemon/weedle/front.png deleted file mode 100644 index 12182258f850b6d598bd0e0a0cf3e3b135cd4c45..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 451 zcmV;!0X+VRP)Px#Fi=cXMVQc_i;I;1|NmNAV#US9lv)VxtU=9l5NbIH|K@ub7#N%>Al_P1?wpJN z-pv320BTKM^8f$=K}keGR9J=Wl)oiW zEiEnmZ+*V?hxl{AmxMipPfBUp9|IJLW)WNgOwbg8iTBG-Bs2cwV7~msegYpRy5$B4 z(bMlQL4wj#tX_b|=4>GL12SaR266*57l?ZUen2_Tvy|NZ-XUtK%H8iBK_k>DFi!zC z)hxod{C-1pyXfmC#<4Y_tpZhkU*$NuXhgM9UW6D1d&>Flf}Rd6ihYQX&tinEuQ3h- zkR`mp;H!@w;=Ydokfjx18063i*t3KFD@vOL_QUN-u8Uo3V2grOu%44h5>Aeb)sqAT z>lud&OBn}9k-Lf7hkdg;3P2FTHBM=al+|&*5fl${utM-+(|FFm+Ca_L1xm4rc55SE5l70XH002ovPDHLkV1g>>$bbL< diff --git a/graphics/pokemon/weepinbell/front.png b/graphics/pokemon/weepinbell/front.png deleted file mode 100644 index 20b61b8d5f6fa5a27f03d155209eabb54882fb5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 594 zcmV-Y0Px#Fi=cXMF6nq2wE{YtXiDjgJMcCqlL;0zuLBfV)?n@t=0;&Hpt- z-EEpTZ{D2582cm8TJs~&wg&wDrh z)dH^NACvxh&q3^aPh6%Nz&Phx{xyxvo&=BH*KRNZ62pDx63~0_zIKD!ci1!FGr%*{ z0pu3IEhmV=(>}NeIQIb<&S~E+eMrR>0Bzg&l$;PI1E~EaK8|3FYc+=gSp{$yaNlPj z-r*~Ofg}t71AG8_gS3AI;6RiBegQB8+y2Q8Z6qKAe3U^hihd%_Zi9(}1srmp&%&2- z09WP=AO(5=9|3*?c^2v0n!XCl`V=5Jzy`Q@Dp?pM3dk}9SZ?qw(1dZ4Bm!iKX@HGz z0fc$dgedSC;s!Rr)n|5?rb6(Ve1B8y)c{kG;I}{$`0ou6h{8@#Ky$gm*e4}s%7Uo} z!Yuu9B<|0LBV2zp(LB!)80BgmfvBz@0a?O01_9O)nnc`xGweoC0i`EryQ|9@@(AS_ zD!&uT5kd((>1Tin;88!HfoD(vANH3Up*yTv+zyauD5Y-iM}j=a^Y~3W3i2k%F~00` g!gsU3dGn9+2i`#=K$bzK&j0`b07*qoM6N<$f+O7nFaQ7m diff --git a/graphics/pokemon/weezing/front.png b/graphics/pokemon/weezing/front.png deleted file mode 100644 index d165c84785869db9626733fb8f75c1bf2d14947b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 934 zcmV;X16lluP)Px#Fi=cXMF6nq#np@U?v%x}DT7*zy^GCaF?*zHwAG~E5D*am|Np(cy{x2CtfW$$ zQexF}gAbIC?f?J-BuPX;R9JPb6(m!}0v zrfD3r#KZ5OgS9V>9}zC+fM4`b^f$m)c|8E;uS|iZAkTSjU!VJFU46l9Vtw8T_q49% z2FUvB>m9(oVc_fc48wdgkjj4efpwpo7WW9gDTm#c{#32CHfWByYE(prfSjjmB8UgauVG?_g zFajPNCj-U~QnAs-CUQ_B$WIaDdGOyxdenWRrKg?8h9g!!jw1p32CRRp4-TT}c@I~F zQ*s#Tt!zje)fJbC3P@PTpaANg(zrJftoON~;{sCTac{cLRYdDXuI8|VvgxF3-g4=| z`%R^aQNz}sq4z%|mU$(5Z`&^V3NTGEB``Sez5J|x|7oy(qgVix2rve)QCXU`WRCX= zKqvt6L#PLk#W^S+0!!AT?qsr44qyO?nz$W&ObNb$nnAEW^a(tDB1bxP*OcD7gAC}F zA=)7nNT&W&f{wo#urBx{Ne(@L4W7#6aTvg5I!%@V0CZ-7g5@m!)j^eq=wdaAJ-t~> zD>wR(){WyqP8QI_2~+gpld`s;`yPMNvjxhCpB%CeEByz8f}KfdJ+ zy%~?*Y3_YveIj%i`6e_Z_^n;PuiRe)OJNKscl5-$y#OO~Wd-}1^XlI6rw@9+a{9%; zPx#Fi=cXMVQc_tdv@6T0!RC&Be5f5D*X;N*F4m_9L=4YzvON*;R2OIN;r0aAJT)Jg^Fu)-mNyH04it~a zgH7n^L_CM!zI!zHb0mDiM-84TZ=-*#niQ&lwuPL5)@J8D=h7*xz;}i~NwzEL#ZFmV z7^;GQ2~usbPqv(jDub4HU4YsjzqA#(B$bt;3zbb9Xb;;2F)W)w8jrrxbfL~WAb}{eFSU^BfFfceMC@64Xc;KiI`1k;jIB=iC84~?2MZWknu(tf}>-kTaHZXDp~c=V1jG*AJYRnf>Fq=QUC z62<_~sqE&5js{tlYK1;xqRKv9KSujDNHJWi`;09$&m8% zrXjkhG@D(#9plLw0A*-0+W_3>W6YwE0rlBfJA-cJ+BmP$LE4WPXue(pdQm1E%(5}! za5DdX$S!B#waQ28hJ%zFy=$k3-^_F$0@H%iQVNd`F#%=w=f>DiMId@Wr4$-g(Vkm7 zKd{pq20SXAn6n0oU2E;WEmV`g7*jIg@qP*Lg@K#urR0!Jo+%F&g__Q1jBWrLJh;1+ z1?Tz7rJ7Y;xZu59-fK_*R{)Ee5jJY?cKHKT0p}o#x*0b+aQDlAW<*2n{C0Qt?!mw| zw102@#9tq8ega5nFFU#(5U!D|o31eR`pSr5`6(W2`~l@cnfpqNqO<@2002ovPDHLk FV1jPtDp&vj diff --git a/graphics/pokemon/whiscash/front.png b/graphics/pokemon/whiscash/front.png deleted file mode 100644 index d62e69f3c3aaa361ee7c891423015213bb6b1253..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 815 zcmV+~1JL}5P)HV%7{(99NLD8tGgNH3s1hhk+*47750?5? z8CUDe{3;=iz04P*OI7)7xVq$De%*l@_qUlO%9z~rk)wb%<9sOa3c>Xoe#u4>*yjCq zfY7>)NLBxz>b_)`ph=_0T`zzQ=Id1b7BGbvZ%==t_mvRk>_t4G{_qAMTWHd6wNt!^F94t&<^KF6O}Gq7 z_b|p!KGx!RN-32QD~Io-Df&duFX?V=afjcTw4UIH;jXvSFODQf^={z|i<^eVlEoA{F%du=oJ25OjB*Ex`; z3htm42mrvTZth&xxpK~=}Xgg}^H6JzI`zhb#& z!AoKLBB!a=1no@e@xd(fr#t|QcEZkB1LEz359Z+Z4!WG56B^QP(rFlaV})W;+I&Eh zB%yQ8gCmQC;$@m|n~=5+!Zy#eWm(oL&^cg6CXd#-((Olc2{gM&a$X#j_k1|Q5opWu z1h6`kO%%ZKU}%nT#R7SK;UhED`%dXZtcZCe{YRX)hO%yPHpClzDn*e19v=1@=vHk; t(Re8U^FA-m<-a8wUJe-1a{o@Z={Hg~Ah{u>$@BmK002ovPDHLkV1fXTeOv$l diff --git a/graphics/pokemon/whismur/front.png b/graphics/pokemon/whismur/front.png deleted file mode 100644 index 3a4c69d47bea97b1cb29267672a887fdd18d0d74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 509 zcmV_aPY|R000000000000000Pf=uX0004q zNklWm2&HS{G9O-1h@K+br(gm{U`>Q6A|Ybz@tB(BW~gu@KOj-ZL*~|08xul z%>fibcFc~`Pr<7J)xPib5XAXZSWsFJ);JZR?iZEpEI_RI_&5esQU~;OY_TYc@o{u) zDfc>nGHA6GyVd9&t(0_l>LU)2*M&YYKa3)Xg5V+H0}w*&Mqp4(>FeMv8jw4HI_dyO z+gbzR0HJw-u3Q!#0M}}z{;Jz4Xka~nm6TXIhHPME+FFs6(goJ4GtYw&d*=wIHz;xh zgfPrt-{V?6bBIO8lvS?HGT=mX1}{h>$S)V=2ka|eo=-6>6F1P`p-JOBgZT3um9-5c3HQ=Xr^`@jVe9nmvF z5K6@7`x?=)O+(o=XmRTaFydf-5r6+yf4hDFHo<{$Oqz;X00000NkvXXu0mjf#!1)? diff --git a/graphics/pokemon/wigglytuff/front.png b/graphics/pokemon/wigglytuff/front.png deleted file mode 100644 index 5f5ee7e91801dace18d21d092adb4cdb4ee23446..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 670 zcmV;P0%84$P)Px#Fi=cXMVQc_i$OvE|NnDybLQUW5D*amtiASol+9{l|K80~q>CV0VwB#^b3qv9 zF);uD0A0M?LjV8*97#k$R9J=Wmg{c9Fbsups4s0d-v4puO9B~bsjL2*b|fUIdcOFQ zINWZ3O#m1DrCcMx{UQOTiv*bP8bJZq2%3Tth%OKq5s66Z&#krsY(5U50k8r<=sg&< zN-^ybkTnNOLJ2^w?o|;gRr?`O3&EBr=>TBFxmcB^{URZ=hagb>)bjNQ7N7b*0BRBh z4FDoyuX{jv?5_l<1rRMH7zNt$$n$5vcLE6MDTq(l@63F-OVr;3&{L_)tMJGl<>Kb& zU}<7^wDV!sy4=?p+s0kS&oLe*~5~kvfh?zX950IRp^RBLICC zri!3%jeaE{CaZ|N2`F_lB!)WjE}+iXL%=j``KO8VfB|8TvVa>-RlWHIIKCSqgbif@ zuMoBXnagP>gtUK;koRvBau@rP00RKvjGgr|m(DGazT4Ga{}`wVFl2w!(gi@ShvsEK zv*!Uc96OAGc8<`OyfM>FbZrEcZ^Jt=eG1Ys{p+`W0H`4wi#Po7X8-^I07*qoM6N<$ Ef+#vCF8}}l diff --git a/graphics/pokemon/wingull/front.png b/graphics/pokemon/wingull/front.png deleted file mode 100644 index dc5fe2e80aa5f955bf24b635d77b4baf98e9216e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 468 zcmV;_0W1EAP)&?C2@pUlbFt3$^%sNUI5h2RhP~%l}G4S zRwiK0L*Yv$CdXMA7-}g}B!BvC-~B$Nj`5#DpLGDkv;%OUWgr5OiVU==Kq}&ZBA*Hc zkn-M71PKK1{alc6V*)Cn&uF>ua-Vkj1oEgBD-b0P1W9b@JDE(Gkphvb4QQhtW`52S z*oV6~8$g`<8CwO{u!gKG5biJ8K8kSYDJHl&=MomM(y}E^w~)q= zW5K7@_HFl?(ZyoP=RYoX^)~@nTzzr*-b&XmqnsK*%_{V?vGpgV6CyZZZ*FR96B+=K zHTnMf-I6nC07uux5cc;kcvN1LAR!Wsgh(_J(7h=FK@zkG!Y)O4>-{67?LK!4%1b_{ zRcg%BE@7X8`LGoFq)AMRa}Gs_kl!{UI^MR(6*53~-vJ!sZ{r92I#AIVirhp10000< KMNUMnLSTZYG|5c> diff --git a/graphics/pokemon/wobbuffet/front.png b/graphics/pokemon/wobbuffet/front.png deleted file mode 100644 index a8efd17ef78e378797e6bc36293753931c27531a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 653 zcmV;80&@L{P)*CP=J7d`1tt1z`y_i00000v1AHL0006Q zNklyQS?ScFZfAyfk@y25d&0fGmM7N0ss^c(+YsE zLjYI))rV>uB2pa?uRc~10RHa0BS0g$3I$S250DcQ{>k{7p8&OLQYy3FbM<}FvC)I} z(r*hWcn~NB0=z}2n9k5ZVa9XB_!Q6`Fc=1iWiCL}DGDy?Bj1MrH3MUAZaQ%U*#S1@ zCd|X&&uR&DDACD~9aSY_^M*v1S3uX5Bd`KKM2tW&0P)tmvW%z!-gieKT;LkOi722x z-k(lizkmgj?Fe85gZlP_YAukgz%G)G0Ddn4Ie`g*z7wD#0B$W%H<7sBx&bBvi5x#^ zE`(Ywa9)+@hibuyF=7X~}h#&cbOT>>awhWw!={(ZAB zkXnBZpsBVgT?c_^L#<@T#iIx8tS>t*p8AJbKvwwN_kH7)&|+9&@vHy)=Nur~Pi2M0 z%eNmd=YVY~|N3|R_uoG~K$l3d0(t8Df6v}Ah)o~|1fIQ9*p`P!6#CwTXroIUghYhz zCsYH1W}$tF;+!tsyY^JDT)U+R0*QUf9O&*9EE n%mTz*jhH#*DAB&|zeW8AyYkZN(3_)X00000NkvXXu0mjfG}0I| diff --git a/graphics/pokemon/woobat/front.png b/graphics/pokemon/woobat/front.png deleted file mode 100644 index 793607dc895f1ae8c555e8809ae6759e7fc0bdfb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 541 zcmV+&0^dK!`|CG_Si@0004~ zNklvCXD@fMfceGP<7~hO!#);DFL)(q0mYjmuylv+2qt*0i%XUP9Pfv*#gZEaA44vC zE8CCe4-4^(w8N?H%{cyU4ISTwyF#F4GL$)kF%(7+`Tc427lsTVm=pu>yfQao3jn&s z5int&n>G4phQ!|HW-S^3D+I7bz=R*1@kz@DxKNK7G6VqqiF^)7di3q$3Aa5ITPB4& fI3O3@tFHP7;R%Gd%gkvw00000NkvXXu0mjfK78lV diff --git a/graphics/pokemon/wooper/front.png b/graphics/pokemon/wooper/front.png deleted file mode 100644 index ad14f25b21eb0954f869e912b0550e50fde9dac7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 475 zcmV<10VMv3P)7SXH7<=pY{M^b z>rg^W8QJ7V`CeseZ*_9(S>ABIckX>B51>}9e^TQwyJZ6yQeIa8En5NTF31~J0bP6K zx-QWJOZ0>-`j0t49tT80PxO_)Pylfe&2C3H_ahxZgaGX#U|x1R&hjJo)r`hf5qQ05 zzL3As_DIbr17;`&UVdH2B)XHL#DE+P=or;Wue9Z}MZR<1p}lIZ$^h(XveUjZTQLBH z3Lr1bvXo{)Aebeg3=CJ>oX8WZ&AQSSns+22~ilu902A9QO2Nwkn9xMMh zK*}TsOx}lsJT5g?VFNfP^7Sc)yl*^FMrwLm@$bN()1DGYrxpJWtUL1e^9+%GCY2w7 zhc6r>;*`cLFi}O_WVPx#Fi=cXMVQc_5D*YrT3R_dL34X*IZ{C>F*!>Z(;+*qhk!g%u9Bq!B!6e<&I2y-_Nod8 zaybY>Kyvsy0{7e7=X|J~4p0ON+o#Sb^I;#{m+ zic}MOZ>p^UT;G~!@aTacL~wLu2Y8MS!Ae~Pt>O9M z@HJ^TrfSEu@t{mkHB;c4#!T-SZ;oYM@Lb@WVN2yew+vp0FSJppJzh`naFa=zRk zI7D!BW@iR0B~2BvyMS6!v#XDgLuu~;VBs06dK>$FLkP+-enaxp0!C+4&tt&_9Cu*a zYLIa1ZS;Pdqo6X}-w_bY6hM~wKMbGx)UVVRe)<)6K5fgp00000NkvXXu0mjf&}8nS diff --git a/graphics/pokemon/wormadam/sandy_cloak/front.png b/graphics/pokemon/wormadam/sandy_cloak/front.png deleted file mode 100644 index 5d08516fddb4c74b9d4a85ad79029b8a2954f336..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 586 zcmV-Q0=4~#P)Px#Fi=cXMVQc_5D*YrT3R_dL34X*IWaM$ds<>jIjod(|NsAsN;%cVb7E3b?sHOu zb7BAh05`@C761SN$Vo&&R9J=Wm+6j!FbsriLck<}_kY}-vD0Js2LZB&R;r~|h-N-} z>~QpUd&kd*NT+`21IX~l0O&(!0im~tq0_=R_5wOR^g8I@NBBRvNdj7gku`cwW=)Q09hQMY$ZCg@50in0me#T1wqsSZ05cTp+2RYRcZwTa*8uu z-)KX@%Cx48_0vRk2o$G;uNb{ayM&@St?QZ$FnR8r(}T$-H%f3oHod9g$4{9F?uUIn z@~z1L;&K31FUkmw%|t-1UA*gwG(8B-*M;JW4TPtjNcAWUJqX3*&#BZq~-2TmS$707*qoM6N<$g7?h>^8f$< diff --git a/graphics/pokemon/wormadam/trash_cloak/front.png b/graphics/pokemon/wormadam/trash_cloak/front.png deleted file mode 100644 index a15ba6b90670d4895d2c1904e996465bbbe6e542..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 532 zcmV+v0_**WP)Px#Fi=cXMVQc_5D*YrT3R_dL34X*QaMV+TAYJQb9+i!v}$|*|NrikoB#j-00000 z00000090*;5C8xHl1W5CR9J=Wm5px0APj_aAqE`Y|9y8hB;BMbp`dNj6bn^NmHRj! zKV6ome!hT7{W=H0`o{q3!=!;Qn_-x2VcTW_lReCKFu#xf2Via|E@5sNh0EwYh{%vW z@-P`dVjS`zF*ra{8U&aDh9HuLIzZTXmYjfhZ$^feux?u=tVk)z8;r!zm|t)}s2&(Y z>_k*KxCd98-*aFL_G=e{GsO(Wy02b)jX~83_p4!gzFn}R0%uJR1Rkrn(+zI&ra17k31ZY#M4Bg47 z;al^Ae@;$t17rFH;)KBls)HIq9wQ*18(Uv#YzqzQmv%#q%b$Ac7wZGW WBomvY+;ZRm0000A@n diff --git a/graphics/pokemon/wurmple/front.png b/graphics/pokemon/wurmple/front.png deleted file mode 100644 index bad155a3def5ea2e55429424386b655b61aed1e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 595 zcmV-Z0<8UsP)(R7i>K(mzWBF%$ssNVOt#dA)YgEv>j3gNshq zb8zb+QR-1}X?vrJ*nWX(cc)%Q>2e+AhBJ#G4nlEr5UiU+!QN*usR-Jn*TF#tAKY-f zA9;Tgg#P1?2299L;pHEKI%3PK=fe9qiLyD(gDA0 zfjl6V-E&5V7y{0S0I_8vfU+;w^*Wpr0J>u2vb$vk*a7Fk6#x*t0UJg|0W$^8Z66?M zrG$dj(Yz3hac)5_1AsHIr~-tD?7<|EGD!;SE_K}#Jy4L}j-dgudGAtWb8-?+)OVA( zU-P;a$R^T3%VG*BzBJo|X9|=UtA1ZMMY!KAzRFeE+z)RwJ+cL_ZF7>Qybv($%Ov79 zf-9Tfg002ovPDHLkV1n+*07w7; diff --git a/graphics/pokemon/wynaut/front.png b/graphics/pokemon/wynaut/front.png deleted file mode 100644 index 197d67fdf8d4ea0f20e751a59a8941e9c64ae31d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 489 zcmVw_002msxS%jVcqlm7SYUv7c*w}W000000000000000!HxVxOA=obGnl2Q14yih?Q=5tUw05SqlhQRXz00Jp80K`y=2UsDt zOFo5g0HNYLsU2vQVnJLF0QeMB5-k9m;%+`mkUCv)b*64o5SYaeU}hoU#f`G&L7BU^ z>A`$dQ7L+Rc=(HuEqn(9vSmG#u;hTXyT|DcO2vU@v(Go(c-=t4fW3=X0@inauLyK+ zhrMKgnBk;5_NN023OPCSecxf@AEhYP&5^)62U0Xh;v}(Zy&I9DCXqV(L~&KpzSt*2MdTlsD=>6Y8H;OUj8xmp+1IMHG;bRl7v8NBNd=8||L4j7 fRV;sWi@%Of#K?WQWUNi^00000NkvXXu0mjf?3>UD diff --git a/graphics/pokemon/xatu/front.png b/graphics/pokemon/xatu/front.png deleted file mode 100644 index e90c44fadf83ad6e80182169700b909ca0bab413..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 589 zcmV-T0Px#Fi=cXMF6nqN|ZsA)j=t0DYT0qbG=t^xtJfZ`fy%wS)foTSJ7#KSa3s2M7zqMq{mYdcd-*&^FKHLnJ*x?CZL0v$I6x zNeMXp07wl62^=W^+e)-8)qltt6=0htMBf^_Q2|8O80Sv+fS&=a^ng2ok{-|!DCZFZ zkucEDDGdQYsKV7y1fq*D5`kL4Km=?eSb4^w2mzbWqKhDuI1(X{bI!_-P=uh25PaMd z>}j{Yl%kIyfZbq5pR*niy!R2?$(ZO%u7tGj{R9D^2@V%IFFA7rEr1EU0eD@Ff-=JV|%F z0f0)&15lfw0GxxT^gscK6n_FVB>->@S-1m=6J8FJ8-O(SlW{xRMwD_j($LYKpe(nh z0YFUXe6Gg<@#_dQjU5jm@4772W9E!cF?RdqEzq_Om-~)~yA$!U@A#%*bM%Jz4g4P9 bqhIv}aBv~caCXlo00000NkvXXu0mjft)%zU diff --git a/graphics/pokemon/xerneas/active/front.png b/graphics/pokemon/xerneas/active/front.png deleted file mode 100644 index b291e10f4f7db3b443707f267746388812aaed88..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 931 zcmV;U16=%xP)H z002NhKqe+8fOc71i{#9`kN@nlHZo#FTA_DOPw$^k|5a6=U%vpN=>PvBNhEu?00009 za7bBm000ie000ie0hKEb8vpwJvu!oZM^gPX|YzK$wKVTZ! zcI+@D>aEHH%Wc&x)q%pWBq9i#8c8p*3f;?P^f0Ql{R_IQr{Tf#pa)OlQ5c^6Jx`au zBT-0kJ>|G%1L;&-dQnsHdWv-Ac zvb+fRD1ehH>GnRG)d*-|Yx^7_YtYIFVE$JH0btdHoY~Cw;cX5)Z{Zia0;pyCUp-@J zfW6Hwh&;xd@A#ES;b$q^vz#bH%j<&px&^Zq7OwIE>2_))0vyjR`6>ntw~zARr>oz7YBd^!RrI@DagJbmxDhH3P^ zbrw)^Nc4|snvUtXbSXvV1gLuzhthNz8o1y*Em!L0SvsmOZm^BTAfDa?aKKnTWFufM zkwcX=o(1;kdG2-`@Q$n|8>di=1J>3}kJ;lCinpe9>@mjdi5e5Y7U+9p16|c(A@0$7 zcs#B_Rf!ZYSw3!zYfuYBN%W*X28yai<1r8lCV+yPNMaHQRTW~yb-5V<;U@s5%jDmj z%#Pr`%O{{~QwA~z>I}-1BVgJ==8F_?AlQS+!$b<)J!C9w$aWcp$Dr%6ofWW<*~|_D zMr2zTW4Z_#mg*2LRt}i1DWJ!?zyY5FjYldalA>$zF3_g!H(^2FsRd}EM3Z}y9#)%n z7#0&Pibn3kN&pSa@fM_R?Oa_C-U3jV39RXBu*kYLD@LxMXnH}>=?nlrE@*T|qx2ep zU=EPnEI@}E+% z4WW;6Ob0{+NkouV({`oeb3iCkEe*IaVVnA&kT~`D_zUea+-)JUAP4{e002ovPDHLk FV1n`kpJD(2 diff --git a/graphics/pokemon/yamask/front.png b/graphics/pokemon/yamask/front.png deleted file mode 100644 index 28a564b55b48a6375a08a05dfffffba672d96990..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 440 zcmV;p0Z0CcP)lmtr zNM>??WHw;tY5w;gA;hyDw;<#D3FbVJC^Y;Cg;=l_5ZMt4-T_nqI1K`J2L=cVuSZ6M zfL&c5wt=AVb`PlQ<2GPt4-Akjw_vv6!VJ{gfCQQW5DOy7763p)83Clt!=o&TC}R@J z1Zxu9se$rOB7xO_991S{snhf5G@4@Wua;ub+JaEao7jLwyazD&ulR_ak5g zO;;t#p}XF}gaAyIex3VI$mn2UDD3z7P<8=6cir0z`~^eH%N2Y>0CLO2Me*Lg@6 zPF>Yj0a%Dg9^U(Y1_GfYfqMVa56%4QTx=uqyC0@D()b6aX&RYr3$Z_SBm3*^D}Dg& iGv<9=QSZ-socaaUd_m%r1+b6+0000aP!JFhz(6?oh+sHaD5%g-V3;t_@PKG|fJjJChTvjs0006s zNkl(C)$>fnu9SzM_S^xZ)bEP^J0o<^K^sbC_5cO4 zhbWM8dLMAMI###LOj-bRSwe2W%Sre|M@S-so(V#3B2;q{J|SrVP@R8&(nPZDBz+=! zP|82innVM7mQGWWeZ;P+LPw;xcn`1#iMj42f<3~%0b>yGJpX1|qq zfYsS7M9lSAHw=H(nLX&+UJ^Kt9VLog&v>|ErdR9L8B4ZMk-BhVrHvl0y6w6VZD*X# zm>L6ks)h?^+lC$t&B0K^9RT!D7Aqir6o5@B@HUTBCE5W9MUTWg=zq~4;r+J(YuTBjE7=~rs#zIpiQ}B{OX98}aU^|P)4rxu+;2Yd2lX6{xp|zEEiPV66 zh-wK*T@QtJDMHv|A)t2X7VOhtvN%rk5Aq{=Cp&R1o!y~J={KG9KKFj_r;{WI|4GRY zR_iH6T}`9_SV^R01ps+f0-#c2g$3KM0Cgn*)MXYaI$@duKmmDfduAO0)Z!^G9$*{G zjF17G5xWbzS`>sdBk~VnEt1y`e$&-#k*y-43z@~*!5tt+(@mo>0(Pmz?i{!W)LDe6 z${Uap&#Anp8SKW^4tsn66mJ{q5W>@sXb(++t$HWYH|HZ!qTZ&m#enc_8u7!EXAoBPi^}EMJ{kI$kjW?)CN0v1Zy#=k z{tx9ndGf`@Ng#E6<=dxVf>K;{s_7gP_HbYLM~_kwG3sncrk5h)1mK&QVGxK-r?;aCdX3`+yK9{q{Y zn;_b&3Hc6vLn2>M6o(%I3%#+Hc;6NgV}346>hA&Z5Bk4XzW^(13$t(SMq>Z~002ov JPDHLkV1mg`TVVhI diff --git a/graphics/pokemon/yveltal/front.png b/graphics/pokemon/yveltal/front.png deleted file mode 100644 index 7a259c51397e8038c25f2adc304acd0acc900bf5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1154 zcmV-|1bzF7P)Px#1ZP1_K>z@;j|==^1poj5Fi=cXMVQc_ARs7kaBwgD1KUYN zK~zY`eU;5_B1aI%yOTL_qG)JOoXavY571jJue7JZ-SWrY24x-q4eGlkOM`qHVaa1| zXb)NTM6{8NxaO9;LLMsB4Y3)_ZXd9j|8J_Q>kGC$oE@CxUGuw0o8KWHy<+vN$ZP?0GxM&(ZXn>rj>rg zu^x+*JPW&Zf$eSlQED-Mf-jG10-C!E(AyaLsCGHz!d@?z%UbGNE!|MtV8Qmmhfnw7 zLY+MA0OcllRhC4Y0XR1fLC69%0iRW&Z>2M~rqj#e-0c9;y@$^V3LLtL_Ij0PUf%&| zKh)ksMb~xarmhitxg=Q$Uu0g`2q1)j!}E#$QX!Cs->kI;1(k?T7)SNAT*MS38K^L> zfogR!ttf>$WMAM_y%1MY565~b5UY$z8P|7~2ueaK5y_mkGL@5?&#DGB%JZxiu(n2} zA(xgJGDg6!e~Sl8cOYPt!?ai6~64@Y0NGhL&AX!ShT|Aqr~|_W^+vEwe0w z9Ml6P>VaCRy9ZdiYh2S4arN>3-UEB%@OmPpYVqm5T-)OS@6O^{q^svYjXnf6trf+h zj0ad`5KR-{bv&oi;k5_6eh3U8J7xUiX07IbXs=srPW@n%$E((JIaTX>(zV4ypp%vJ z=dzr>&mJicX>=GP|LLTxAIrP-Agki%G?cJ;pmlfsc$cmRr=9F5&^vvI%9MSBd9Obw z(YyghZ7K%)7T3L#ec)w}@bF)YG706J?Ye-@B{b}`s4t(VtGy@Yyg{rLdAQ$y65%;) zR&29j|9j|VF92_QfX4UhW?G#R(jo&D^ye>c`vEn|FNoi35pOo@SzHPIY1IHYz%N8h zD@CJC-J52fJ)N=t0AMdc Uy@MBuZ~y=R07*qoM6N<$f_|$S`v3p{ diff --git a/graphics/pokemon/zangoose/front.png b/graphics/pokemon/zangoose/front.png deleted file mode 100644 index d9640b8428d216f95090af1e53eac7eb79ae7399..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 767 zcmVPx#Fi=cXMVQc_iDKRlx zVq%MwlrE5CasU7VeMv+?R9J=Wm*JADAPj{i5Xh~l@Bg-Y60m9&TefrmZKgZhZaH5L zA%@vu_={#Z`cm(|1GujN{*@5=fX?#)5JTz$IPaNvieCLIAf!&c?qCB1=;IfF5L34S z12`u#nEl@wKpDIjF@3)Q{^v`WyxV~GVU0&hoMJyAfAI77#|b?2;2)GhC1R$)58GwPAAeXaExw30bqb%EzrA(huVu5 z2(1DNI4sv$c8x{s3?$wa%JUkS_r4+}%}P zCLkIwmtp9u1=gcYI}6wPl=OuGv<_3IU`l&^j=0)}PUUZJ_)vJXG9;pRb2(O}d9QhP_ z!plr+k_!hLfZbUS02VCM)B@<<>sJjxPyn?pY$0VJp9st|JT@&H09OP;0|7vv0a#85 zlHo(ZP)Z;|2mP~B?*VIaL0i$d2YeW^mymP=>c#X_=rHyj0J{~&-A)bAK@iN;Px#Fi=cXMVQc_oO=-e=A=?N5C8xG)vO2z5D@>>LHPLi|GjGVlo-Wo7?_AK-rnA5 zXlSD_Fe!FReE+OGbadvn%0RbYRF zBp|oj|Mo9i`c*$kfBc*^4BY?&>hCtsZEPp>$CP(~vpdnE^Q=^L0v@IPj*`Z06S^8r zsSy;T+we4*19F~ha3Fj4ygCf;+O%j^8gv*>teFeZFgW0DY3OrGHc{`*28{!ZLa`(P zSUE90r}BBI&bI1<0F9svq-0PB0MB$FC5dRl0qTY7LGO-QAWXQR0MHfu<11Hc2#d+8 zrs=jgiI$8`VIbp`t(0S=fJ5ITnZ3|=f^qU`dyansSAd<=M(g^S2~_DFS?q-|e!B)n zqvcZ_u_rW7`*JO5KI&&LJ~z)zCu9)XaNXo5J=3|_NXQ_xick_VB4X> zUQkATKI%tp3hOyy;upLvjtRg)zn`3YXxjQibT6ox@G0*jfSC^7!+q50s7J}%rPNM4 z#()sna}puppj*Kom*nA09)vxEULQRHBu5%l?nNr2iphb{lit!f4~^jjDMhG_45*GC zoND06AfOh>UE1tg>K2(VWl)BllJ`arKs^D-_)w37WpIEswl3n5fYZcOZc$o1!?fz5hyaKk4EC=pTIr531z3U|Hwl*#RI1q%ee!)dM^b zp!WrZA$mnX{h$I7fyYQd)ibdo_vMNpwE}=25*RrDtpHT^Ew4_J(JJPzWN;1Qkrx80 zC>ziF_+Z#VH2~_H)r&y{1odXQsKp2(hxXGp_5<=$99`ZMaE@UB7qPl3+=CPWfYfMt zz9qEqpbmqO7zJbbDYiFzW%+1B>C;{1ft2D*tV>(|RTNf$@;0!YJ^(yF*onKP@POP7 zF{J;Ky*$|ZWgZX0ZwPT`v3Ak;p5V7N-cRDoLN|nWqK^r}`x3SBxs*6hC4Wx9wF6%R z-pNwKWNxC%y)fz}?qu$V`X_3>mhF~7Jvlb%EWEFN4G><5{g|Bn?Mvf&IVW%X^X;4E kzwqQI`x$WiRsSEbKNvG49CUT@TmS$707*qoM6N<$f@LtQ>i_@% diff --git a/graphics/pokemon/zebstrika/front.png b/graphics/pokemon/zebstrika/front.png deleted file mode 100644 index 8d097028270e0d2b6d69cf5e677a0be0eb1241cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 864 zcmV-m1E2hfP)>nC;K zs2#XkaNOp#;NY}O5W^LK5~>Q^rXmHP)?GVGTOL^oq<^3xXR+cN%%8=crF7a=!F zHZ}p~7LCBtXdB@?2{U?Y^YP3%dp!a-y0$nK0>*VCSO@9j*bye$1sV@c$}pDE2Ef?D z(NYBh;R$H%R)BYCZcB@p5PC}hHu5a%fM?gzmf(i~?L3PV2PL!m- zjRlzdd*8(5py}sI`6;6Z5_hbz21Adv2t77^?&k!?Qmsod9L|?uKJ@+pa}d+6*Z}kU z;Q|=Lz5k6#ge>9f9UJD+-to8J?|3&ESudVY;gJy@D<=+rgW?l#_tHU z&e)U2TLdOJU@%2>zVnpw&)B6YCq6^qcL8;2`5!O{=~uxjL0Si>xV7MH1#qMILj{PJ zptS>f1bPGp#a=L+)3G|E6q3c&o<;CC*njxA9~kVO(bMqE(2{oEPMpT2kSwqMJOwn4 q8Ivrp_Wz^4f2@5y;~CrcUi=G92=nK|WBVQe0000okfE+9(TkclRgt(!RU7u8cl}e?<;eVbdfFC}7{q$)cL5uhSpr3#HeV>kq`h)!y zzYd$7rz6ojyLd(Y(>7|M)ik_cK%8*${9_axzuHs;)4#!I3Ap|uXd^e&NY*(=(7Eu8yDHhB?l7bViWW3sN2bzSE{>;aZ z)4+SmS@25*G=bG07v8g+iHpJ>V9YBFyFHgNSFzKb1$8Zd7NFlXNKsRBZ^I%;(tMJ7j>XJ)RlJb;x_nKtJ&rqdPFO0-4Vp zr@QNbeN1M~g|!0%1A|y*PWM18hw$3XG~G5r9&)qEz&zv=HVEKy=5}2OQ9$x(Z~i0~ zo4fJjWgx1yL$u`M{&-<=wyG)5aGcu*fEE@Z>-Q_ww}sF?&2?+bJsC->}a Z%D+SzHT5m0#=8Ij002ovPDHLkV1o8W=Oq9D diff --git a/graphics/pokemon/zigzagoon/front.png b/graphics/pokemon/zigzagoon/front.png deleted file mode 100644 index da1a3a6ad88d3c9e7595b63de6c71a5851e192eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 651 zcmV;60(AX}P)Px#Fi=cXMVQc_b7EQm006zLoaWxmw495Sdum!zNmN(7y;9ZpaFwzVP%TB?8e5!j0RSC;%FC9Ni&Q}%K&bHCdEIp(73o+M z-ni6SUBHYW?}}NGXI)SrMGA+k;umHWov+nO)}9Oh3PMB+ox4o68oXa&<;xB(6rhHX ziN5``3;2aq^Y8HfI0P}8t|3!GBaKw^3LE@X_g#2IiN{|OA_3J1Q^AjuRvD(?3V~Nk z=Tt!$v*6tVJ*10~Lif;zOeZJxW{5i#kd0`LF;002ovPDHLkV1l*{FUSA@ diff --git a/graphics/pokemon/zoroark/front.png b/graphics/pokemon/zoroark/front.png deleted file mode 100644 index 365e9ca96cbdd73aa84fe05e5cf3fdcc54977086..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 862 zcmV-k1EKthP)dnX2NzcF0N@$M zERZtn@dKUonnzN~%QolE0pP>6lw%ojSBlU3fZ46o@nzyl8SNpCCOIH)+H{HFV?~Eo zl7Kl#In)&A@1e{j6Dj2U{82{N8i+XOCBG~JuI2gDW3FGy8@KGIbw|tdyRYrM4;iqE z84UvF>&Zg~KqQ11UzCA+8BK8-XS%EPD$$lx{En1Bc-$dC%mkDGM`E(TQz1sJ90wItnTOb906tn8Gjm{PvoqY)_O*$C*AeK1&;)-?cKwML|dD}Z4# z8*Cc02jF!OSq(6Z7WDLc;0#H}S_uk|>pj5m_0yBiFs#S`OKx+WU+b}`02Zt z+U$TVkgV^oGTe$gaVHr#W4L;&eQz28^a1FPm=@^+K~<3PkLeCOo*MKH)t>MdPOxb1{#fy(_KJMG4+-9 zB;M#}yM8sah04nSY?}27I)P$Mw#op5Whr)#=pZ3ox2%EK(1ce$;!5SeJ2_ym>Jjd$ z+zoRB)WTHD{DxtY?)?~U0fVLKYHtR$ea=>@`Wef5Q1P#CbV`1trRfPgSCKmY&$000000000000000PC5bg00055 zNkld295JhP~>{l`pxD|sOK>4DO(hkYpRtiZK?gGU;gHI4(Z?Fg0DyPg) z*=kAJRl1A{0h-4@^JfS#_8ngmKdu4o<@9EA1!!tfL1`Zj4}jtfPz$6z-ns&^pFnO9%gN4 zL;iL{UE;ZC3i3B?LkD)aPm*V3e5SAh(0 zSZGk~mTda9VAAO?g`wRMptUDYd0=;5;I-CcHKfz377TyROHYKM)ukJwZ}@$VPTk0C zy0JPx#Fi=cXMVQc_5D*Y!d$qmJ|BSWoNMd$qMvoO2;s)^ol8|Nqd?&|_m`00000 z000000PmO4E&u=lt4TybR9J=WmeG=fFbGAJKt=2SfA3x(nmF4kK38V?(CRrMgd`n? zC!YAp7%dX-5#l3j59rcBR7yDtz;Y?fVv)hQ=Z$85y}(YBrf>|^;f%o@o)UcEJr9~H zo#L5~0^x?|`GY|9KHm&TVCSy{J>LW+%|o!`P|0nChi^RyBUx(nL&_&~XDe>(Bq+ z4KPsYkCaU$4GosQ+)lyUNkB(IL%+i@h;7~FjW?th^y8l2i)cc;v5dXJuR=NiF$azrL2kfg*Z02NqM`BpHWI!%AMU v_8{%BzXD%MzB#T8XDgOm&nKRE;uqr&snZX{sxsLK00000NkvXXu0mjfN5AyZ diff --git a/graphics/pokemon/zweilous/front.png b/graphics/pokemon/zweilous/front.png deleted file mode 100644 index d6e4b809d91fa1717047f752fe22f3312f7195f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 778 zcmV+l1NHogP)fRNrrpdyg-Vaz(9(0 zK?)zhjj!P*x5-f2kExaIB26+C#rO2y<8bJC|4{L_2;u2p6Vm+}W;0j*sCBIv2)Yus*tfDY zwE}=RJ+X0g4jHpa7~8f|s$7slECPz7TTmRHH;l+Bup9ta{@UF3waQ>5Y(^+3=!BTi zUbYlfS6j8%X?dVPDEplyxlnv?v!8N*?IfDnA7a9Q46H+{oMy0yqKFXbu#7{bs64kg zbx=k$P5^nd@(#-vL=eNk&Ej+=WJ?ODqQxv8&`pA!mF)wYI@n?5vAybKR>9(!j_o;k zxP!w6wQs1J^$7Vuuq~1o^Ag*VW%FW)v6ju8M2nf7*ECj@S>GPw{k8fj3)`prOLKjG zAaQKW*(1FTiDwTqc4a*!T$-Eu{-Ks-@$nZug6<$@Z#sSUpi5mpcAB1nUQHZyuXX*Y z)B4MOrpb5cu!v52$Reu*i!A=l}o!07*qo IM6N<$f*by3MF0Q* diff --git a/graphics/pokemon/zygarde/10_percent/front.png b/graphics/pokemon/zygarde/10_percent/front.png deleted file mode 100644 index f475e6cff3df0f42e8fdcc2b029c494caac1821d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 776 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≈{`l1PtD`EMie+c{rTXisy$UTmZS@CL zt46V3*_n2Bg>5+sa7HQD&aarIc^weVVhtDs?6oAq7cdKEU$ky@t<^%x*>-F8z!f%c z2k_aUL}PAOh9a~NS~uK8N5BFXq}J^}4+;Tuca+4+EDQnP2v9sa0T@$J2!%H#ln!<^*Q_0bq7O>r$BdouU}c#$PpDO72e^M~Qo6utwY`EQ#}jbzro&v_)hHpq*G- z7YA)o;jKI2U#GgZ?vwzA*}Cm%ze~i9w}r9)0Fe_cfii%E{r~^~07*qoM6N<$g7n$M AI{*Lx From 31595086030e959578124b2db97bb49ecd061ba5 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 27 Feb 2023 23:08:54 +0100 Subject: [PATCH 126/428] fix dex size inaccuraccies --- src/data/pokemon/pokedex_entries.h | 2729 ++++++++++++++-------------- 1 file changed, 1360 insertions(+), 1369 deletions(-) diff --git a/src/data/pokemon/pokedex_entries.h b/src/data/pokemon/pokedex_entries.h index 83b58c1d160d..0b01a836c459 100644 --- a/src/data/pokemon/pokedex_entries.h +++ b/src/data/pokemon/pokedex_entries.h @@ -4644,15 +4644,14 @@ const struct PokedexEntry gPokedexEntries[] = .trainerOffset = 2, }, -#if P_GEN_4_POKEMON == TRUE [NATIONAL_DEX_TURTWIG] = { .categoryName = _("Tiny Leaf"), .height = 4, .weight = 102, .description = gTurtwigPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -4663,8 +4662,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 11, .weight = 970, .description = gGrotlePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 320, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -4675,10 +4674,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 22, .weight = 3100, .description = gTorterraPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 348, + .trainerOffset = 6, }, [NATIONAL_DEX_CHIMCHAR] = @@ -4687,8 +4686,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 62, .description = gChimcharPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -4699,8 +4698,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 9, .weight = 220, .description = gMonfernoPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 338, + .pokemonOffset = 8, .trainerScale = 256, .trainerOffset = 0, }, @@ -4711,8 +4710,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 12, .weight = 550, .description = gInfernapePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 282, + .pokemonOffset = 4, .trainerScale = 256, .trainerOffset = 0, }, @@ -4723,8 +4722,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 52, .description = gPiplupPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -4735,9 +4734,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 8, .weight = 230, .description = gPrinplupPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 366, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -4747,10 +4746,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 17, .weight = 845, .description = gEmpoleonPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 259, + .pokemonOffset = 0, + .trainerScale = 290, + .trainerOffset = 1, }, [NATIONAL_DEX_STARLY] = @@ -4759,8 +4758,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 20, .description = gStarlyPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -4771,8 +4770,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 155, .description = gStaraviaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -4783,8 +4782,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 12, .weight = 249, .description = gStaraptorPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 282, + .pokemonOffset = 4, .trainerScale = 256, .trainerOffset = 0, }, @@ -4795,8 +4794,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 200, .description = gBidoofPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -4807,9 +4806,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 315, .description = gBibarelPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -4819,8 +4818,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 22, .description = gKricketotPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -4831,9 +4830,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 255, .description = gKricketunePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -4843,8 +4842,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 95, .description = gShinxPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -4855,8 +4854,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 9, .weight = 305, .description = gLuxioPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 338, + .pokemonOffset = 8, .trainerScale = 256, .trainerOffset = 0, }, @@ -4867,9 +4866,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 14, .weight = 420, .description = gLuxrayPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 265, + .pokemonOffset = 2, + .trainerScale = 262, .trainerOffset = 0, }, @@ -4879,8 +4878,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 2, .weight = 12, .description = gBudewPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 682, + .pokemonOffset = 24, .trainerScale = 256, .trainerOffset = 0, }, @@ -4891,8 +4890,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 9, .weight = 145, .description = gRoseradePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 338, + .pokemonOffset = 8, .trainerScale = 256, .trainerOffset = 0, }, @@ -4903,8 +4902,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 9, .weight = 315, .description = gCranidosPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 338, + .pokemonOffset = 8, .trainerScale = 256, .trainerOffset = 0, }, @@ -4915,10 +4914,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 16, .weight = 1025, .description = gRampardosPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 259, + .pokemonOffset = 1, + .trainerScale = 296, + .trainerOffset = 1, }, [NATIONAL_DEX_SHIELDON] = @@ -4927,8 +4926,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 570, .description = gShieldonPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -4939,8 +4938,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 13, .weight = 1495, .description = gBastiodonPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 272, + .pokemonOffset = 3, .trainerScale = 256, .trainerOffset = 0, }, @@ -4951,8 +4950,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 2, .weight = 34, .description = gBurmyPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 682, + .pokemonOffset = 24, .trainerScale = 256, .trainerOffset = 0, }, @@ -4963,8 +4962,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 65, .description = gWormadamPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -4975,8 +4974,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 9, .weight = 233, .description = gMothimPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 338, + .pokemonOffset = 8, .trainerScale = 256, .trainerOffset = 0, }, @@ -4987,8 +4986,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 55, .description = gCombeePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -4999,8 +4998,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 12, .weight = 385, .description = gVespiquenPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 282, + .pokemonOffset = 4, .trainerScale = 256, .trainerOffset = 0, }, @@ -5011,8 +5010,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 39, .description = gPachirisuPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -5023,8 +5022,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 7, .weight = 295, .description = gBuizelPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 365, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -5035,8 +5034,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 11, .weight = 335, .description = gFloatzelPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 320, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -5047,8 +5046,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 33, .description = gCherubiPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -5059,8 +5058,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 93, .description = gCherrimPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -5071,8 +5070,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 63, .description = gShellosPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -5083,8 +5082,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 9, .weight = 299, .description = gGastrodonPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 338, + .pokemonOffset = 8, .trainerScale = 256, .trainerOffset = 0, }, @@ -5095,8 +5094,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 12, .weight = 203, .description = gAmbipomPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 282, + .pokemonOffset = 4, .trainerScale = 256, .trainerOffset = 0, }, @@ -5107,8 +5106,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 12, .description = gDrifloonPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -5119,8 +5118,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 12, .weight = 150, .description = gDrifblimPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 282, + .pokemonOffset = 4, .trainerScale = 256, .trainerOffset = 0, }, @@ -5131,8 +5130,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 55, .description = gBunearyPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -5143,8 +5142,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 12, .weight = 333, .description = gLopunnyPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 282, + .pokemonOffset = 4, .trainerScale = 256, .trainerOffset = 0, }, @@ -5155,8 +5154,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 9, .weight = 44, .description = gMismagiusPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 338, + .pokemonOffset = 8, .trainerScale = 256, .trainerOffset = 0, }, @@ -5167,8 +5166,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 9, .weight = 273, .description = gHonchkrowPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 338, + .pokemonOffset = 8, .trainerScale = 256, .trainerOffset = 0, }, @@ -5179,8 +5178,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 39, .description = gGlameowPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -5191,9 +5190,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 438, .description = gPuruglyPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -5203,8 +5202,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 2, .weight = 6, .description = gChinglingPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 682, + .pokemonOffset = 24, .trainerScale = 256, .trainerOffset = 0, }, @@ -5215,8 +5214,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 192, .description = gStunkyPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -5227,9 +5226,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 380, .description = gSkuntankPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -5239,8 +5238,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 605, .description = gBronzorPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -5251,8 +5250,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 13, .weight = 1870, .description = gBronzongPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 272, + .pokemonOffset = 3, .trainerScale = 256, .trainerOffset = 0, }, @@ -5263,8 +5262,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 150, .description = gBonslyPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -5275,8 +5274,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 130, .description = gMimeJrPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -5287,8 +5286,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 244, .description = gHappinyPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -5299,8 +5298,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 19, .description = gChatotPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -5311,9 +5310,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 1080, .description = gSpiritombPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -5323,8 +5322,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 7, .weight = 205, .description = gGiblePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 365, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -5335,9 +5334,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 14, .weight = 560, .description = gGabitePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 265, + .pokemonOffset = 2, + .trainerScale = 262, .trainerOffset = 0, }, @@ -5347,10 +5346,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 19, .weight = 950, .description = gGarchompPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 1, + .trainerScale = 326, + .trainerOffset = 4, }, [NATIONAL_DEX_MUNCHLAX] = @@ -5359,8 +5358,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 1050, .description = gMunchlaxPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -5371,8 +5370,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 7, .weight = 202, .description = gRioluPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 365, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -5383,8 +5382,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 12, .weight = 540, .description = gLucarioPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 282, + .pokemonOffset = 4, .trainerScale = 256, .trainerOffset = 0, }, @@ -5395,9 +5394,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 8, .weight = 495, .description = gHippopotasPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 366, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -5407,10 +5406,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 20, .weight = 3000, .description = gHippowdonPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 261, + .pokemonOffset = 1, + .trainerScale = 334, + .trainerOffset = 4, }, [NATIONAL_DEX_SKORUPI] = @@ -5419,9 +5418,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 8, .weight = 120, .description = gSkorupiPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 366, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -5431,8 +5430,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 13, .weight = 615, .description = gDrapionPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 272, + .pokemonOffset = 3, .trainerScale = 256, .trainerOffset = 0, }, @@ -5443,8 +5442,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 7, .weight = 230, .description = gCroagunkPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 365, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -5455,8 +5454,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 13, .weight = 444, .description = gToxicroakPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 272, + .pokemonOffset = 3, .trainerScale = 256, .trainerOffset = 0, }, @@ -5467,9 +5466,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 14, .weight = 270, .description = gCarnivinePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 265, + .pokemonOffset = 2, + .trainerScale = 262, .trainerOffset = 0, }, @@ -5479,8 +5478,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 70, .description = gFinneonPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -5491,8 +5490,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 12, .weight = 240, .description = gLumineonPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 282, + .pokemonOffset = 4, .trainerScale = 256, .trainerOffset = 0, }, @@ -5503,9 +5502,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 650, .description = gMantykePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -5515,9 +5514,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 505, .description = gSnoverPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -5527,10 +5526,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 22, .weight = 1355, .description = gAbomasnowPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 348, + .trainerOffset = 6, }, [NATIONAL_DEX_WEAVILE] = @@ -5539,8 +5538,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 11, .weight = 340, .description = gWeavilePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 320, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -5551,8 +5550,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 12, .weight = 1800, .description = gMagnezonePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 282, + .pokemonOffset = 4, .trainerScale = 256, .trainerOffset = 0, }, @@ -5563,10 +5562,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 17, .weight = 1400, .description = gLickilickyPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 259, + .pokemonOffset = 0, + .trainerScale = 290, + .trainerOffset = 1, }, [NATIONAL_DEX_RHYPERIOR] = @@ -5575,10 +5574,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 24, .weight = 2828, .description = gRhyperiorPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 3, + .trainerScale = 369, + .trainerOffset = 7, }, [NATIONAL_DEX_TANGROWTH] = @@ -5587,10 +5586,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 20, .weight = 1286, .description = gTangrowthPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 261, + .pokemonOffset = 1, + .trainerScale = 334, + .trainerOffset = 4, }, [NATIONAL_DEX_ELECTIVIRE] = @@ -5599,10 +5598,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 18, .weight = 1386, .description = gElectivirePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 267, + .pokemonOffset = 2, + .trainerScale = 286, + .trainerOffset = 1, }, [NATIONAL_DEX_MAGMORTAR] = @@ -5611,10 +5610,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 16, .weight = 680, .description = gMagmortarPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 259, + .pokemonOffset = 1, + .trainerScale = 296, + .trainerOffset = 1, }, [NATIONAL_DEX_TOGEKISS] = @@ -5623,9 +5622,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 15, .weight = 380, .description = gTogekissPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 268, + .pokemonOffset = 2, + .trainerScale = 271, .trainerOffset = 0, }, @@ -5635,10 +5634,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 19, .weight = 515, .description = gYanmegaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 1, + .trainerScale = 326, + .trainerOffset = 4, }, [NATIONAL_DEX_LEAFEON] = @@ -5647,9 +5646,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 255, .description = gLeafeonPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -5659,9 +5658,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 8, .weight = 259, .description = gGlaceonPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 366, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -5671,10 +5670,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 20, .weight = 425, .description = gGliscorPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 261, + .pokemonOffset = 1, + .trainerScale = 334, + .trainerOffset = 4, }, [NATIONAL_DEX_MAMOSWINE] = @@ -5683,10 +5682,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 25, .weight = 2910, .description = gMamoswinePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 257, + .pokemonOffset = 10, + .trainerScale = 423, + .trainerOffset = 8, }, [NATIONAL_DEX_PORYGON_Z] = @@ -5695,8 +5694,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 9, .weight = 340, .description = gPorygonZPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 338, + .pokemonOffset = 8, .trainerScale = 256, .trainerOffset = 0, }, @@ -5707,10 +5706,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 16, .weight = 520, .description = gGalladePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 259, + .pokemonOffset = 1, + .trainerScale = 296, + .trainerOffset = 1, }, [NATIONAL_DEX_PROBOPASS] = @@ -5719,9 +5718,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 14, .weight = 3400, .description = gProbopassPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 265, + .pokemonOffset = 2, + .trainerScale = 262, .trainerOffset = 0, }, @@ -5731,10 +5730,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 22, .weight = 1066, .description = gDusknoirPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 348, + .trainerOffset = 6, }, [NATIONAL_DEX_FROSLASS] = @@ -5743,8 +5742,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 13, .weight = 266, .description = gFroslassPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 272, + .pokemonOffset = 3, .trainerScale = 256, .trainerOffset = 0, }, @@ -5755,8 +5754,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 3, .description = gRotomPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -5767,8 +5766,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 3, .description = gUxiePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -5779,8 +5778,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 3, .description = gMespritPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -5791,8 +5790,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 3, .description = gAzelfPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -5803,10 +5802,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 54, .weight = 6830, .description = gDialgaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 721, + .trainerOffset = 19, }, [NATIONAL_DEX_PALKIA] = @@ -5815,10 +5814,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 42, .weight = 3360, .description = gPalkiaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 411, + .trainerOffset = 5, }, [NATIONAL_DEX_HEATRAN] = @@ -5827,10 +5826,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 17, .weight = 4300, .description = gHeatranPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 259, + .pokemonOffset = 0, + .trainerScale = 290, + .trainerOffset = 1, }, [NATIONAL_DEX_REGIGIGAS] = @@ -5839,10 +5838,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 37, .weight = 4200, .description = gRegigigasPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 610, + .trainerOffset = 17, }, [NATIONAL_DEX_GIRATINA] = @@ -5851,10 +5850,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 45, .weight = 7500, .description = gGiratinaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 614, + .trainerOffset = 13, }, [NATIONAL_DEX_CRESSELIA] = @@ -5863,9 +5862,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 15, .weight = 856, .description = gCresseliaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 268, + .pokemonOffset = 2, + .trainerScale = 271, .trainerOffset = 0, }, @@ -5875,8 +5874,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 31, .description = gPhionePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -5887,8 +5886,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 14, .description = gManaphyPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -5899,9 +5898,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 15, .weight = 505, .description = gDarkraiPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 268, + .pokemonOffset = 2, + .trainerScale = 271, .trainerOffset = 0, }, @@ -5911,8 +5910,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 2, .weight = 21, .description = gShayminPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 682, + .pokemonOffset = 24, .trainerScale = 256, .trainerOffset = 0, }, @@ -5923,22 +5922,20 @@ const struct PokedexEntry gPokedexEntries[] = .height = 32, .weight = 3200, .description = gArceusPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 405, + .trainerOffset = 8, }, -#endif -#if P_GEN_5_POKEMON == TRUE [NATIONAL_DEX_VICTINI] = { .categoryName = _("Victory"), .height = 4, .weight = 40, .description = gVictiniPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -5949,8 +5946,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 81, .description = gSnivyPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -5961,9 +5958,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 8, .weight = 160, .description = gServinePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 366, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -5973,10 +5970,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 33, .weight = 630, .description = gSerperiorPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 405, + .trainerOffset = 8, }, [NATIONAL_DEX_TEPIG] = @@ -5985,8 +5982,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 99, .description = gTepigPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -5997,9 +5994,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 555, .description = gPignitePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -6009,10 +6006,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 16, .weight = 1500, .description = gEmboarPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 259, + .pokemonOffset = 1, + .trainerScale = 296, + .trainerOffset = 1, }, [NATIONAL_DEX_OSHAWOTT] = @@ -6021,8 +6018,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 59, .description = gOshawottPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -6033,9 +6030,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 8, .weight = 245, .description = gDewottPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 366, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -6045,9 +6042,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 15, .weight = 946, .description = gSamurottPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 268, + .pokemonOffset = 2, + .trainerScale = 271, .trainerOffset = 0, }, @@ -6057,8 +6054,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 116, .description = gPatratPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -6069,8 +6066,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 11, .weight = 270, .description = gWatchogPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 320, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -6081,8 +6078,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 41, .description = gLillipupPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -6093,8 +6090,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 9, .weight = 147, .description = gHerdierPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 338, + .pokemonOffset = 8, .trainerScale = 256, .trainerOffset = 0, }, @@ -6105,8 +6102,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 12, .weight = 610, .description = gStoutlandPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 282, + .pokemonOffset = 4, .trainerScale = 256, .trainerOffset = 0, }, @@ -6117,8 +6114,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 101, .description = gPurrloinPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -6129,8 +6126,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 11, .weight = 375, .description = gLiepardPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 320, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -6141,8 +6138,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 105, .description = gPansagePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -6153,8 +6150,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 11, .weight = 305, .description = gSimisagePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 320, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -6165,8 +6162,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 110, .description = gPansearPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -6177,9 +6174,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 280, .description = gSimisearPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -6189,8 +6186,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 135, .description = gPanpourPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -6201,9 +6198,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 290, .description = gSimipourPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -6213,8 +6210,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 233, .description = gMunnaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -6225,8 +6222,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 11, .weight = 605, .description = gMusharnaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 320, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -6237,8 +6234,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 21, .description = gPidovePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -6249,8 +6246,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 150, .description = gTranquillPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -6261,8 +6258,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 12, .weight = 290, .description = gUnfezantPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 282, + .pokemonOffset = 4, .trainerScale = 256, .trainerOffset = 0, }, @@ -6273,9 +6270,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 8, .weight = 298, .description = gBlitzlePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 366, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -6285,10 +6282,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 16, .weight = 795, .description = gZebstrikaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 259, + .pokemonOffset = 1, + .trainerScale = 296, + .trainerOffset = 1, }, [NATIONAL_DEX_ROGGENROLA] = @@ -6297,8 +6294,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 180, .description = gRoggenrolaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -6309,8 +6306,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 9, .weight = 1020, .description = gBoldorePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 338, + .pokemonOffset = 8, .trainerScale = 256, .trainerOffset = 0, }, @@ -6321,10 +6318,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 17, .weight = 2600, .description = gGigalithPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 259, + .pokemonOffset = 0, + .trainerScale = 290, + .trainerOffset = 1, }, [NATIONAL_DEX_WOOBAT] = @@ -6333,8 +6330,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 21, .description = gWoobatPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -6345,8 +6342,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 9, .weight = 105, .description = gSwoobatPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 338, + .pokemonOffset = 8, .trainerScale = 256, .trainerOffset = 0, }, @@ -6357,8 +6354,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 85, .description = gDrilburPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -6369,8 +6366,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 7, .weight = 404, .description = gExcadrillPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 365, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -6381,8 +6378,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 11, .weight = 310, .description = gAudinoPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 320, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -6393,8 +6390,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 125, .description = gTimburrPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -6405,8 +6402,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 12, .weight = 400, .description = gGurdurrPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 282, + .pokemonOffset = 4, .trainerScale = 256, .trainerOffset = 0, }, @@ -6417,9 +6414,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 14, .weight = 870, .description = gConkeldurrPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 265, + .pokemonOffset = 2, + .trainerScale = 262, .trainerOffset = 0, }, @@ -6429,8 +6426,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 45, .description = gTympolePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -6441,9 +6438,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 8, .weight = 170, .description = gPalpitoadPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 366, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -6453,9 +6450,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 15, .weight = 620, .description = gSeismitoadPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 268, + .pokemonOffset = 2, + .trainerScale = 271, .trainerOffset = 0, }, @@ -6465,8 +6462,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 13, .weight = 555, .description = gThrohPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 272, + .pokemonOffset = 3, .trainerScale = 256, .trainerOffset = 0, }, @@ -6477,9 +6474,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 14, .weight = 510, .description = gSawkPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 265, + .pokemonOffset = 2, + .trainerScale = 262, .trainerOffset = 0, }, @@ -6489,8 +6486,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 25, .description = gSewaddlePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -6501,8 +6498,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 73, .description = gSwadloonPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -6513,8 +6510,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 12, .weight = 205, .description = gLeavannyPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 282, + .pokemonOffset = 4, .trainerScale = 256, .trainerOffset = 0, }, @@ -6525,8 +6522,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 53, .description = gVenipedePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -6537,8 +6534,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 12, .weight = 585, .description = gWhirlipedePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 282, + .pokemonOffset = 4, .trainerScale = 256, .trainerOffset = 0, }, @@ -6549,10 +6546,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 25, .weight = 2005, .description = gScolipedePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 257, + .pokemonOffset = 10, + .trainerScale = 423, + .trainerOffset = 8, }, [NATIONAL_DEX_COTTONEE] = @@ -6561,8 +6558,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 6, .description = gCottoneePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -6573,8 +6570,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 7, .weight = 66, .description = gWhimsicottPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 365, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -6585,8 +6582,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 66, .description = gPetililPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -6597,8 +6594,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 11, .weight = 163, .description = gLilligantPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 320, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -6609,9 +6606,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 180, .description = gBasculinPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -6621,8 +6618,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 7, .weight = 152, .description = gSandilePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 365, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -6633,9 +6630,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 334, .description = gKrokorokPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -6645,9 +6642,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 15, .weight = 963, .description = gKrookodilePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 268, + .pokemonOffset = 2, + .trainerScale = 271, .trainerOffset = 0, }, @@ -6657,8 +6654,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 375, .description = gDarumakaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -6669,8 +6666,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 13, .weight = 929, .description = gDarmanitanPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 272, + .pokemonOffset = 3, .trainerScale = 256, .trainerOffset = 0, }, @@ -6681,9 +6678,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 280, .description = gMaractusPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -6693,8 +6690,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 145, .description = gDwebblePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -6705,9 +6702,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 14, .weight = 2000, .description = gCrustlePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 265, + .pokemonOffset = 2, + .trainerScale = 262, .trainerOffset = 0, }, @@ -6717,8 +6714,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 118, .description = gScraggyPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -6729,9 +6726,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 11, .weight = 300, .description = gScraftyPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 320, + .pokemonOffset = 7, + .trainerScale = 256, .trainerOffset = 0, }, @@ -6741,9 +6738,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 14, .weight = 140, .description = gSigilyphPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 265, + .pokemonOffset = 2, + .trainerScale = 262, .trainerOffset = 0, }, @@ -6753,8 +6750,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 15, .description = gYamaskPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -6765,10 +6762,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 17, .weight = 765, .description = gCofagrigusPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 259, + .pokemonOffset = 0, + .trainerScale = 290, + .trainerOffset = 1, }, [NATIONAL_DEX_TIRTOUGA] = @@ -6777,8 +6774,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 7, .weight = 165, .description = gTirtougaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 365, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -6789,8 +6786,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 12, .weight = 810, .description = gCarracostaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 282, + .pokemonOffset = 4, .trainerScale = 256, .trainerOffset = 0, }, @@ -6801,8 +6798,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 95, .description = gArchenPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -6813,9 +6810,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 14, .weight = 320, .description = gArcheopsPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 265, + .pokemonOffset = 2, + .trainerScale = 262, .trainerOffset = 0, }, @@ -6825,8 +6822,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 310, .description = gTrubbishPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -6837,10 +6834,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 19, .weight = 1073, .description = gGarbodorPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 1, + .trainerScale = 326, + .trainerOffset = 4, }, [NATIONAL_DEX_ZORUA] = @@ -6849,8 +6846,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 7, .weight = 125, .description = gZoruaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 365, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -6861,10 +6858,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 16, .weight = 811, .description = gZoroarkPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 259, + .pokemonOffset = 1, + .trainerScale = 296, + .trainerOffset = 1, }, [NATIONAL_DEX_MINCCINO] = @@ -6873,8 +6870,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 58, .description = gMinccinoPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -6885,8 +6882,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 75, .description = gCinccinoPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -6897,8 +6894,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 58, .description = gGothitaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -6909,8 +6906,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 7, .weight = 180, .description = gGothoritaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 365, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -6921,9 +6918,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 15, .weight = 440, .description = gGothitellePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 268, + .pokemonOffset = 2, + .trainerScale = 271, .trainerOffset = 0, }, @@ -6933,8 +6930,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 10, .description = gSolosisPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -6945,8 +6942,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 80, .description = gDuosionPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -6957,9 +6954,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 201, .description = gReuniclusPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -6969,8 +6966,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 55, .description = gDucklettPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -6981,8 +6978,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 13, .weight = 242, .description = gSwannaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 272, + .pokemonOffset = 3, .trainerScale = 256, .trainerOffset = 0, }, @@ -6993,8 +6990,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 57, .description = gVanillitePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -7005,8 +7002,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 11, .weight = 410, .description = gVanillishPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 320, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -7017,8 +7014,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 13, .weight = 575, .description = gVanilluxePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 272, + .pokemonOffset = 3, .trainerScale = 256, .trainerOffset = 0, }, @@ -7029,8 +7026,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 195, .description = gDeerlingPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -7041,10 +7038,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 19, .weight = 925, .description = gSawsbuckPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 1, + .trainerScale = 326, + .trainerOffset = 4, }, [NATIONAL_DEX_EMOLGA] = @@ -7053,8 +7050,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 50, .description = gEmolgaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -7065,8 +7062,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 59, .description = gKarrablastPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -7077,9 +7074,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 330, .description = gEscavalierPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -7089,8 +7086,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 2, .weight = 10, .description = gFoongusPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 682, + .pokemonOffset = 24, .trainerScale = 256, .trainerOffset = 0, }, @@ -7101,8 +7098,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 105, .description = gAmoongussPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -7113,8 +7110,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 12, .weight = 330, .description = gFrillishPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 282, + .pokemonOffset = 4, .trainerScale = 256, .trainerOffset = 0, }, @@ -7125,10 +7122,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 22, .weight = 1350, .description = gJellicentPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 348, + .trainerOffset = 6, }, [NATIONAL_DEX_ALOMOMOLA] = @@ -7137,8 +7134,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 12, .weight = 316, .description = gAlomomolaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 282, + .pokemonOffset = 4, .trainerScale = 256, .trainerOffset = 0, }, @@ -7149,8 +7146,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 1, .weight = 6, .description = gJoltikPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 682, + .pokemonOffset = 24, .trainerScale = 256, .trainerOffset = 0, }, @@ -7161,9 +7158,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 8, .weight = 143, .description = gGalvantulaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 366, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -7173,8 +7170,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 188, .description = gFerroseedPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -7185,9 +7182,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 1100, .description = gFerrothornPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -7197,8 +7194,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 210, .description = gKlinkPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -7209,8 +7206,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 510, .description = gKlangPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -7221,8 +7218,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 810, .description = gKlinklangPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -7233,8 +7230,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 2, .weight = 3, .description = gTynamoPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 682, + .pokemonOffset = 24, .trainerScale = 256, .trainerOffset = 0, }, @@ -7245,8 +7242,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 12, .weight = 220, .description = gEelektrikPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 282, + .pokemonOffset = 4, .trainerScale = 256, .trainerOffset = 0, }, @@ -7257,10 +7254,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 21, .weight = 805, .description = gEelektrossPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 365, + .trainerOffset = 7, }, [NATIONAL_DEX_ELGYEM] = @@ -7269,8 +7266,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 90, .description = gElgyemPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -7281,9 +7278,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 345, .description = gBeheeyemPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -7293,8 +7290,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 31, .description = gLitwickPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -7305,8 +7302,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 130, .description = gLampentPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -7317,9 +7314,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 343, .description = gChandelurePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -7329,8 +7326,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 180, .description = gAxewPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -7341,9 +7338,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 360, .description = gFraxurePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -7353,10 +7350,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 18, .weight = 1055, .description = gHaxorusPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 267, + .pokemonOffset = 2, + .trainerScale = 286, + .trainerOffset = 1, }, [NATIONAL_DEX_CUBCHOO] = @@ -7365,8 +7362,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 85, .description = gCubchooPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -7377,10 +7374,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 26, .weight = 2600, .description = gBearticPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 266, + .pokemonOffset = 8, + .trainerScale = 339, + .trainerOffset = 4, }, [NATIONAL_DEX_CRYOGONAL] = @@ -7389,8 +7386,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 11, .weight = 1480, .description = gCryogonalPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 320, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -7401,8 +7398,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 77, .description = gShelmetPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -7413,9 +7410,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 8, .weight = 253, .description = gAccelgorPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 366, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -7425,8 +7422,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 7, .weight = 110, .description = gStunfiskPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 365, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -7437,9 +7434,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 9, .weight = 200, .description = gMienfooPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 338, + .pokemonOffset = 8, + .trainerScale = 256, .trainerOffset = 0, }, @@ -7449,9 +7446,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 14, .weight = 355, .description = gMienshaoPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 265, + .pokemonOffset = 2, + .trainerScale = 262, .trainerOffset = 0, }, @@ -7461,10 +7458,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 16, .weight = 1390, .description = gDruddigonPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 259, + .pokemonOffset = 1, + .trainerScale = 296, + .trainerOffset = 1, }, [NATIONAL_DEX_GOLETT] = @@ -7473,9 +7470,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 920, .description = gGolettPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -7485,8 +7482,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 28, .weight = 3300, .description = gGolurkPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 275, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -7497,8 +7494,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 102, .description = gPawniardPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -7509,10 +7506,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 16, .weight = 700, .description = gBisharpPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 259, + .pokemonOffset = 1, + .trainerScale = 296, + .trainerOffset = 1, }, [NATIONAL_DEX_BOUFFALANT] = @@ -7521,10 +7518,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 16, .weight = 946, .description = gBouffalantPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 259, + .pokemonOffset = 1, + .trainerScale = 296, + .trainerOffset = 1, }, [NATIONAL_DEX_RUFFLET] = @@ -7533,8 +7530,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 105, .description = gRuffletPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -7545,9 +7542,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 15, .weight = 410, .description = gBraviaryPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 268, + .pokemonOffset = 2, + .trainerScale = 271, .trainerOffset = 0, }, @@ -7557,8 +7554,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 90, .description = gVullabyPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -7569,8 +7566,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 12, .weight = 395, .description = gMandibuzzPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 282, + .pokemonOffset = 4, .trainerScale = 256, .trainerOffset = 0, }, @@ -7581,9 +7578,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 14, .weight = 580, .description = gHeatmorPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 265, + .pokemonOffset = 2, + .trainerScale = 262, .trainerOffset = 0, }, @@ -7593,8 +7590,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 330, .description = gDurantPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -7605,9 +7602,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 8, .weight = 173, .description = gDeinoPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 366, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -7617,9 +7614,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 14, .weight = 500, .description = gZweilousPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 265, + .pokemonOffset = 2, + .trainerScale = 262, .trainerOffset = 0, }, @@ -7629,10 +7626,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 18, .weight = 1600, .description = gHydreigonPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 267, + .pokemonOffset = 2, + .trainerScale = 286, + .trainerOffset = 1, }, [NATIONAL_DEX_LARVESTA] = @@ -7641,8 +7638,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 11, .weight = 288, .description = gLarvestaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 320, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -7653,10 +7650,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 16, .weight = 460, .description = gVolcaronaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 259, + .pokemonOffset = 1, + .trainerScale = 296, + .trainerOffset = 1, }, [NATIONAL_DEX_COBALION] = @@ -7665,10 +7662,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 21, .weight = 2500, .description = gCobalionPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 365, + .trainerOffset = 7, }, [NATIONAL_DEX_TERRAKION] = @@ -7677,10 +7674,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 19, .weight = 2600, .description = gTerrakionPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 1, + .trainerScale = 326, + .trainerOffset = 4, }, [NATIONAL_DEX_VIRIZION] = @@ -7689,10 +7686,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 20, .weight = 2000, .description = gVirizionPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 261, + .pokemonOffset = 1, + .trainerScale = 334, + .trainerOffset = 4, }, [NATIONAL_DEX_TORNADUS] = @@ -7701,9 +7698,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 15, .weight = 630, .description = gTornadusPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 268, + .pokemonOffset = 2, + .trainerScale = 271, .trainerOffset = 0, }, @@ -7713,9 +7710,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 15, .weight = 610, .description = gThundurusPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 268, + .pokemonOffset = 2, + .trainerScale = 271, .trainerOffset = 0, }, @@ -7725,10 +7722,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 32, .weight = 3300, .description = gReshiramPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 405, + .trainerOffset = 8, }, [NATIONAL_DEX_ZEKROM] = @@ -7737,8 +7734,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 29, .weight = 3450, .description = gZekromPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 275, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -7749,9 +7746,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 15, .weight = 680, .description = gLandorusPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 268, + .pokemonOffset = 2, + .trainerScale = 271, .trainerOffset = 0, }, @@ -7761,8 +7758,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 30, .weight = 3250, .description = gKyuremPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 275, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -7773,9 +7770,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 14, .weight = 485, .description = gKeldeoPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 265, + .pokemonOffset = 2, + .trainerScale = 262, .trainerOffset = 0, }, @@ -7785,8 +7782,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 65, .description = gMeloettaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -7797,22 +7794,20 @@ const struct PokedexEntry gPokedexEntries[] = .height = 15, .weight = 825, .description = gGenesectPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 268, + .pokemonOffset = 2, + .trainerScale = 271, .trainerOffset = 0, }, -#endif -#if P_GEN_6_POKEMON == TRUE [NATIONAL_DEX_CHESPIN] = { .categoryName = _("Spiny Nut"), .height = 4, .weight = 90, .description = gChespinPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -7823,8 +7818,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 7, .weight = 290, .description = gQuilladinPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 365, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -7835,10 +7830,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 16, .weight = 900, .description = gChesnaughtPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 259, + .pokemonOffset = 1, + .trainerScale = 296, + .trainerOffset = 1, }, [NATIONAL_DEX_FENNEKIN] = @@ -7847,8 +7842,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 94, .description = gFennekinPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -7859,9 +7854,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 145, .description = gBraixenPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -7871,9 +7866,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 15, .weight = 390, .description = gDelphoxPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 268, + .pokemonOffset = 2, + .trainerScale = 271, .trainerOffset = 0, }, @@ -7883,8 +7878,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 70, .description = gFroakiePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -7895,8 +7890,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 109, .description = gFrogadierPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -7907,9 +7902,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 15, .weight = 400, .description = gGreninjaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 268, + .pokemonOffset = 2, + .trainerScale = 271, .trainerOffset = 0, }, @@ -7919,8 +7914,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 50, .description = gBunnelbyPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -7931,9 +7926,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 424, .description = gDiggersbyPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -7943,8 +7938,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 17, .description = gFletchlingPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -7955,8 +7950,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 7, .weight = 160, .description = gFletchinderPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 365, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -7967,8 +7962,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 12, .weight = 245, .description = gTalonflamePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 282, + .pokemonOffset = 4, .trainerScale = 256, .trainerOffset = 0, }, @@ -7979,8 +7974,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 25, .description = gScatterbugPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -7991,8 +7986,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 84, .description = gSpewpaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -8003,8 +7998,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 12, .weight = 170, .description = gVivillonPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 282, + .pokemonOffset = 4, .trainerScale = 256, .trainerOffset = 0, }, @@ -8015,8 +8010,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 135, .description = gLitleoPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -8027,9 +8022,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 15, .weight = 815, .description = gPyroarPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 268, + .pokemonOffset = 2, + .trainerScale = 271, .trainerOffset = 0, }, @@ -8039,8 +8034,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 1, .weight = 1, .description = gFlabebePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 682, + .pokemonOffset = 24, .trainerScale = 256, .trainerOffset = 0, }, @@ -8051,8 +8046,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 2, .weight = 9, .description = gFloettePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 682, + .pokemonOffset = 24, .trainerScale = 256, .trainerOffset = 0, }, @@ -8063,8 +8058,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 11, .weight = 100, .description = gFlorgesPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 320, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -8075,8 +8070,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 9, .weight = 310, .description = gSkiddoPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 338, + .pokemonOffset = 8, .trainerScale = 256, .trainerOffset = 0, }, @@ -8087,20 +8082,20 @@ const struct PokedexEntry gPokedexEntries[] = .height = 17, .weight = 910, .description = gGogoatPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, - }, - - [NATIONAL_DEX_PANCHAM] = + .pokemonScale = 259, + .pokemonOffset = 0, + .trainerScale = 290, + .trainerOffset = 1, + }, + + [NATIONAL_DEX_PANCHAM] = { .categoryName = _("Playful"), .height = 6, .weight = 80, .description = gPanchamPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -8111,10 +8106,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 21, .weight = 1360, .description = gPangoroPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 365, + .trainerOffset = 7, }, [NATIONAL_DEX_FURFROU] = @@ -8123,8 +8118,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 12, .weight = 280, .description = gFurfrouPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 282, + .pokemonOffset = 4, .trainerScale = 256, .trainerOffset = 0, }, @@ -8135,8 +8130,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 35, .description = gEspurrPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -8147,8 +8142,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 85, .description = gMeowsticPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -8159,9 +8154,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 8, .weight = 20, .description = gHonedgePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 366, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -8171,9 +8166,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 8, .weight = 45, .description = gDoubladePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 366, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -8183,10 +8178,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 17, .weight = 530, .description = gAegislashPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 259, + .pokemonOffset = 0, + .trainerScale = 290, + .trainerOffset = 1, }, [NATIONAL_DEX_SPRITZEE] = @@ -8195,8 +8190,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 2, .weight = 5, .description = gSpritzeePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 682, + .pokemonOffset = 24, .trainerScale = 256, .trainerOffset = 0, }, @@ -8207,9 +8202,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 8, .weight = 155, .description = gAromatissePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 366, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -8219,8 +8214,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 35, .description = gSwirlixPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -8231,9 +8226,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 8, .weight = 50, .description = gSlurpuffPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 366, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -8243,8 +8238,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 35, .description = gInkayPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -8255,9 +8250,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 15, .weight = 470, .description = gMalamarPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 268, + .pokemonOffset = 2, + .trainerScale = 271, .trainerOffset = 0, }, @@ -8267,8 +8262,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 310, .description = gBinaclePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -8279,8 +8274,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 13, .weight = 960, .description = gBarbaraclePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 272, + .pokemonOffset = 3, .trainerScale = 256, .trainerOffset = 0, }, @@ -8291,8 +8286,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 73, .description = gSkrelpPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -8303,10 +8298,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 18, .weight = 815, .description = gDragalgePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 267, + .pokemonOffset = 2, + .trainerScale = 286, + .trainerOffset = 1, }, [NATIONAL_DEX_CLAUNCHER] = @@ -8315,8 +8310,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 83, .description = gClauncherPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -8327,8 +8322,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 13, .weight = 353, .description = gClawitzerPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 272, + .pokemonOffset = 3, .trainerScale = 256, .trainerOffset = 0, }, @@ -8339,8 +8334,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 60, .description = gHelioptilePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -8351,9 +8346,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 210, .description = gHelioliskPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -8363,9 +8358,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 8, .weight = 260, .description = gTyruntPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 366, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -8375,10 +8370,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 25, .weight = 2700, .description = gTyrantrumPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 257, + .pokemonOffset = 10, + .trainerScale = 423, + .trainerOffset = 8, }, [NATIONAL_DEX_AMAURA] = @@ -8387,8 +8382,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 13, .weight = 252, .description = gAmauraPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 272, + .pokemonOffset = 3, .trainerScale = 256, .trainerOffset = 0, }, @@ -8399,8 +8394,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 27, .weight = 2250, .description = gAurorusPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 275, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -8411,9 +8406,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 235, .description = gSylveonPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -8423,9 +8418,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 8, .weight = 215, .description = gHawluchaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 366, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -8435,8 +8430,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 2, .weight = 22, .description = gDedennePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 682, + .pokemonOffset = 24, .trainerScale = 256, .trainerOffset = 0, }, @@ -8447,8 +8442,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 57, .description = gCarbinkPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -8459,8 +8454,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 28, .description = gGoomyPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -8471,9 +8466,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 8, .weight = 175, .description = gSliggooPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 366, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -8483,10 +8478,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 20, .weight = 1505, .description = gGoodraPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 261, + .pokemonOffset = 1, + .trainerScale = 334, + .trainerOffset = 4, }, [NATIONAL_DEX_KLEFKI] = @@ -8495,8 +8490,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 2, .weight = 30, .description = gKlefkiPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 682, + .pokemonOffset = 24, .trainerScale = 256, .trainerOffset = 0, }, @@ -8507,8 +8502,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 70, .description = gPhantumpPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -8519,9 +8514,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 15, .weight = 710, .description = gTrevenantPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 268, + .pokemonOffset = 2, + .trainerScale = 271, .trainerOffset = 0, }, @@ -8531,8 +8526,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 50, .description = gPumpkabooPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -8543,8 +8538,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 9, .weight = 125, .description = gGourgeistPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 338, + .pokemonOffset = 8, .trainerScale = 256, .trainerOffset = 0, }, @@ -8555,9 +8550,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 995, .description = gBergmitePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -8567,10 +8562,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 20, .weight = 5050, .description = gAvaluggPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 261, + .pokemonOffset = 1, + .trainerScale = 334, + .trainerOffset = 4, }, [NATIONAL_DEX_NOIBAT] = @@ -8579,8 +8574,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 80, .description = gNoibatPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -8591,9 +8586,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 15, .weight = 850, .description = gNoivernPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 268, + .pokemonOffset = 2, + .trainerScale = 271, .trainerOffset = 0, }, @@ -8603,8 +8598,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 30, .weight = 2150, .description = gXerneasPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 275, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -8615,10 +8610,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 58, .weight = 2030, .description = gYveltalPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 360, + .trainerOffset = 7, }, [NATIONAL_DEX_ZYGARDE] = @@ -8627,10 +8622,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 50, .weight = 3050, .description = gZygardePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 721, + .trainerOffset = 19, }, [NATIONAL_DEX_DIANCIE] = @@ -8639,8 +8634,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 7, .weight = 88, .description = gDianciePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 365, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -8651,8 +8646,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 90, .description = gHoopaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -8663,22 +8658,20 @@ const struct PokedexEntry gPokedexEntries[] = .height = 17, .weight = 1950, .description = gVolcanionPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 259, + .pokemonOffset = 0, + .trainerScale = 290, + .trainerOffset = 1, }, -#endif -#if P_GEN_7_POKEMON == TRUE [NATIONAL_DEX_ROWLET] = { .categoryName = _("Grass Quill"), .height = 3, .weight = 15, .description = gRowletPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -8689,8 +8682,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 7, .weight = 160, .description = gDartrixPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 365, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -8701,10 +8694,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 16, .weight = 366, .description = gDecidueyePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 259, + .pokemonOffset = 1, + .trainerScale = 296, + .trainerOffset = 1, }, [NATIONAL_DEX_LITTEN] = @@ -8713,8 +8706,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 43, .description = gLittenPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -8725,8 +8718,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 7, .weight = 250, .description = gTorracatPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 365, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -8737,10 +8730,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 18, .weight = 830, .description = gIncineroarPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 267, + .pokemonOffset = 2, + .trainerScale = 286, + .trainerOffset = 1, }, [NATIONAL_DEX_POPPLIO] = @@ -8749,8 +8742,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 75, .description = gPopplioPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -8761,8 +8754,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 175, .description = gBrionnePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -8773,10 +8766,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 18, .weight = 440, .description = gPrimarinaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 267, + .pokemonOffset = 2, + .trainerScale = 286, + .trainerOffset = 1, }, [NATIONAL_DEX_PIKIPEK] = @@ -8785,8 +8778,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 12, .description = gPikipekPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -8797,8 +8790,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 148, .description = gTrumbeakPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -8809,8 +8802,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 11, .weight = 260, .description = gToucannonPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 320, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -8821,8 +8814,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 60, .description = gYungoosPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -8833,8 +8826,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 7, .weight = 142, .description = gGumshoosPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 365, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -8845,8 +8838,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 44, .description = gGrubbinPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -8857,8 +8850,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 105, .description = gCharjabugPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -8869,9 +8862,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 15, .weight = 450, .description = gVikavoltPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 268, + .pokemonOffset = 2, + .trainerScale = 271, .trainerOffset = 0, }, @@ -8881,8 +8874,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 70, .description = gCrabrawlerPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -8893,10 +8886,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 17, .weight = 1800, .description = gCrabominablePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 259, + .pokemonOffset = 0, + .trainerScale = 290, + .trainerOffset = 1, }, [NATIONAL_DEX_ORICORIO] = @@ -8905,8 +8898,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 34, .description = gOricorioPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -8917,8 +8910,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 1, .weight = 2, .description = gCutieflyPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 682, + .pokemonOffset = 24, .trainerScale = 256, .trainerOffset = 0, }, @@ -8929,8 +8922,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 2, .weight = 5, .description = gRibombeePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 682, + .pokemonOffset = 24, .trainerScale = 256, .trainerOffset = 0, }, @@ -8941,8 +8934,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 92, .description = gRockruffPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -8953,9 +8946,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 8, .weight = 250, .description = gLycanrocPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 366, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -8965,8 +8958,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 2, .weight = 3, .description = gWishiwashiPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 682, + .pokemonOffset = 24, .trainerScale = 256, .trainerOffset = 0, }, @@ -8977,8 +8970,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 80, .description = gMareaniePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -8989,8 +8982,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 7, .weight = 145, .description = gToxapexPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 365, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -9001,9 +8994,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 1100, .description = gMudbrayPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -9013,10 +9006,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 25, .weight = 9200, .description = gMudsdalePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 257, + .pokemonOffset = 10, + .trainerScale = 423, + .trainerOffset = 8, }, [NATIONAL_DEX_DEWPIDER] = @@ -9025,8 +9018,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 40, .description = gDewpiderPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -9037,10 +9030,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 18, .weight = 820, .description = gAraquanidPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 267, + .pokemonOffset = 2, + .trainerScale = 286, + .trainerOffset = 1, }, [NATIONAL_DEX_FOMANTIS] = @@ -9049,8 +9042,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 15, .description = gFomantisPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -9061,8 +9054,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 9, .weight = 185, .description = gLurantisPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 338, + .pokemonOffset = 8, .trainerScale = 256, .trainerOffset = 0, }, @@ -9073,8 +9066,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 2, .weight = 15, .description = gMorelullPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 682, + .pokemonOffset = 24, .trainerScale = 256, .trainerOffset = 0, }, @@ -9085,9 +9078,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 115, .description = gShiinoticPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -9097,8 +9090,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 48, .description = gSalanditPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -9109,8 +9102,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 12, .weight = 222, .description = gSalazzlePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 282, + .pokemonOffset = 4, .trainerScale = 256, .trainerOffset = 0, }, @@ -9121,8 +9114,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 68, .description = gStuffulPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -9133,10 +9126,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 21, .weight = 1350, .description = gBewearPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 365, + .trainerOffset = 7, }, [NATIONAL_DEX_BOUNSWEET] = @@ -9145,8 +9138,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 32, .description = gBounsweetPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -9157,8 +9150,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 7, .weight = 82, .description = gSteeneePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 365, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -9169,8 +9162,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 12, .weight = 214, .description = gTsareenaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 282, + .pokemonOffset = 4, .trainerScale = 256, .trainerOffset = 0, }, @@ -9181,8 +9174,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 1, .weight = 3, .description = gComfeyPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 682, + .pokemonOffset = 24, .trainerScale = 256, .trainerOffset = 0, }, @@ -9193,9 +9186,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 15, .weight = 760, .description = gOranguruPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 268, + .pokemonOffset = 2, + .trainerScale = 271, .trainerOffset = 0, }, @@ -9205,10 +9198,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 20, .weight = 828, .description = gPassimianPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 261, + .pokemonOffset = 1, + .trainerScale = 334, + .trainerOffset = 4, }, [NATIONAL_DEX_WIMPOD] = @@ -9217,8 +9210,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 120, .description = gWimpodPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -9229,10 +9222,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 20, .weight = 1080, .description = gGolisopodPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 261, + .pokemonOffset = 1, + .trainerScale = 334, + .trainerOffset = 4, }, [NATIONAL_DEX_SANDYGAST] = @@ -9241,8 +9234,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 700, .description = gSandygastPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -9253,8 +9246,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 13, .weight = 2500, .description = gPalossandPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 272, + .pokemonOffset = 3, .trainerScale = 256, .trainerOffset = 0, }, @@ -9265,8 +9258,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 12, .description = gPyukumukuPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -9277,10 +9270,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 19, .weight = 1205, .description = gTypeNullPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 1, + .trainerScale = 326, + .trainerOffset = 4, }, [NATIONAL_DEX_SILVALLY] = @@ -9289,10 +9282,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 23, .weight = 1005, .description = gSilvallyPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 342, + .trainerOffset = 7, }, [NATIONAL_DEX_MINIOR] = @@ -9301,8 +9294,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 400, .description = gMiniorPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -9313,8 +9306,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 199, .description = gKomalaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -9325,10 +9318,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 20, .weight = 2120, .description = gTurtonatorPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 261, + .pokemonOffset = 1, + .trainerScale = 334, + .trainerOffset = 4, }, [NATIONAL_DEX_TOGEDEMARU] = @@ -9337,8 +9330,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 33, .description = gTogedemaruPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -9349,8 +9342,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 2, .weight = 7, .description = gMimikyuPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 682, + .pokemonOffset = 24, .trainerScale = 256, .trainerOffset = 0, }, @@ -9361,8 +9354,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 9, .weight = 190, .description = gBruxishPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 338, + .pokemonOffset = 8, .trainerScale = 256, .trainerOffset = 0, }, @@ -9373,8 +9366,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 30, .weight = 1850, .description = gDrampaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 275, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -9385,10 +9378,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 39, .weight = 2100, .description = gDhelmisePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 510, + .trainerOffset = 11, }, [NATIONAL_DEX_JANGMO_O] = @@ -9397,8 +9390,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 297, .description = gJangmoOPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -9409,8 +9402,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 12, .weight = 470, .description = gHakamoOPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 282, + .pokemonOffset = 4, .trainerScale = 256, .trainerOffset = 0, }, @@ -9421,10 +9414,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 16, .weight = 782, .description = gKommoOPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 259, + .pokemonOffset = 1, + .trainerScale = 296, + .trainerOffset = 1, }, [NATIONAL_DEX_TAPU_KOKO] = @@ -9433,11 +9426,11 @@ const struct PokedexEntry gPokedexEntries[] = .height = 18, .weight = 205, .description = gTapuKokoPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, - }, + .pokemonScale = 267, + .pokemonOffset = 2, + .trainerScale = 286, + .trainerOffset = 1, + }, [NATIONAL_DEX_TAPU_LELE] = { @@ -9445,8 +9438,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 12, .weight = 186, .description = gTapuLelePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 282, + .pokemonOffset = 4, .trainerScale = 256, .trainerOffset = 0, }, @@ -9457,10 +9450,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 19, .weight = 455, .description = gTapuBuluPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 1, + .trainerScale = 326, + .trainerOffset = 4, }, [NATIONAL_DEX_TAPU_FINI] = @@ -9469,8 +9462,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 13, .weight = 212, .description = gTapuFiniPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 272, + .pokemonOffset = 3, .trainerScale = 256, .trainerOffset = 0, }, @@ -9481,8 +9474,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 2, .weight = 1, .description = gCosmogPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 682, + .pokemonOffset = 24, .trainerScale = 256, .trainerOffset = 0, }, @@ -9493,8 +9486,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 1, .weight = 9999, .description = gCosmoemPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 682, + .pokemonOffset = 24, .trainerScale = 256, .trainerOffset = 0, }, @@ -9505,10 +9498,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 34, .weight = 2300, .description = gSolgaleoPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 405, + .trainerOffset = 8, }, [NATIONAL_DEX_LUNALA] = @@ -9517,10 +9510,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 40, .weight = 1200, .description = gLunalaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 411, + .trainerOffset = 5, }, [NATIONAL_DEX_NIHILEGO] = @@ -9529,8 +9522,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 12, .weight = 555, .description = gNihilegoPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 282, + .pokemonOffset = 4, .trainerScale = 256, .trainerOffset = 0, }, @@ -9541,10 +9534,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 24, .weight = 3336, .description = gBuzzwolePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 3, + .trainerScale = 369, + .trainerOffset = 7, }, [NATIONAL_DEX_PHEROMOSA] = @@ -9553,10 +9546,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 18, .weight = 250, .description = gPheromosaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 267, + .pokemonOffset = 2, + .trainerScale = 286, + .trainerOffset = 1, }, [NATIONAL_DEX_XURKITREE] = @@ -9565,10 +9558,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 38, .weight = 1000, .description = gXurkitreePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 610, + .trainerOffset = 17, }, [NATIONAL_DEX_CELESTEELA] = @@ -9577,10 +9570,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 92, .weight = 9999, .description = gCelesteelaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 516, + .trainerOffset = 13, }, [NATIONAL_DEX_KARTANA] = @@ -9589,8 +9582,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 1, .description = gKartanaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -9601,10 +9594,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 55, .weight = 8880, .description = gGuzzlordPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 721, + .trainerOffset = 19, }, [NATIONAL_DEX_NECROZMA] = @@ -9613,10 +9606,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 24, .weight = 2300, .description = gNecrozmaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 3, + .trainerScale = 369, + .trainerOffset = 7, }, [NATIONAL_DEX_MAGEARNA] = @@ -9625,9 +9618,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 805, .description = gMagearnaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -9637,8 +9630,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 7, .weight = 222, .description = gMarshadowPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 365, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -9649,8 +9642,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 18, .description = gPoipolePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -9661,10 +9654,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 36, .weight = 1500, .description = gNaganadelPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 405, + .trainerOffset = 8, }, [NATIONAL_DEX_STAKATAKA] = @@ -9673,10 +9666,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 55, .weight = 8200, .description = gStakatakaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 721, + .trainerOffset = 19, }, [NATIONAL_DEX_BLACEPHALON] = @@ -9685,10 +9678,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 18, .weight = 130, .description = gBlacephalonPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 267, + .pokemonOffset = 2, + .trainerScale = 286, + .trainerOffset = 1, }, [NATIONAL_DEX_ZERAORA] = @@ -9697,9 +9690,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 15, .weight = 445, .description = gZeraoraPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 268, + .pokemonOffset = 2, + .trainerScale = 271, .trainerOffset = 0, }, @@ -9709,8 +9702,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 2, .weight = 80, .description = gMeltanPokedexText, - .pokemonScale = 640, - .pokemonOffset = 23, + .pokemonScale = 682, + .pokemonOffset = 24, .trainerScale = 256, .trainerOffset = 0, }, @@ -9721,22 +9714,20 @@ const struct PokedexEntry gPokedexEntries[] = .height = 25, .weight = 800, .description = gMelmetalPokedexText, - .pokemonScale = 255, - .pokemonOffset = 1, - .trainerScale = 387, - .trainerOffset = 2, + .pokemonScale = 257, + .pokemonOffset = 10, + .trainerScale = 423, + .trainerOffset = 8, }, -#endif -#if P_GEN_8_POKEMON == TRUE [NATIONAL_DEX_GROOKEY] = { .categoryName = _("Chimp"), .height = 3, .weight = 50, .description = gGrookeyPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -9747,8 +9738,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 7, .weight = 140, .description = gThwackeyPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 365, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -9759,10 +9750,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 21, .weight = 900, .description = gRillaboomPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 365, + .trainerOffset = 7, }, [NATIONAL_DEX_SCORBUNNY] = @@ -9771,8 +9762,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 45, .description = gScorbunnyPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -9783,8 +9774,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 90, .description = gRabootPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -9795,9 +9786,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 14, .weight = 330, .description = gCinderacePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 265, + .pokemonOffset = 2, + .trainerScale = 262, .trainerOffset = 0, }, @@ -9807,8 +9798,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 40, .description = gSobblePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -9819,8 +9810,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 7, .weight = 115, .description = gDrizzilePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 365, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -9831,10 +9822,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 19, .weight = 452, .description = gInteleonPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 1, + .trainerScale = 326, + .trainerOffset = 4, }, [NATIONAL_DEX_SKWOVET] = @@ -9843,8 +9834,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 25, .description = gSkwovetPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -9855,8 +9846,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 60, .description = gGreedentPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -9867,8 +9858,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 2, .weight = 18, .description = gRookideePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 682, + .pokemonOffset = 24, .trainerScale = 256, .trainerOffset = 0, }, @@ -9879,9 +9870,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 8, .weight = 160, .description = gCorvisquirePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 366, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -9891,10 +9882,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 22, .weight = 750, .description = gCorviknightPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 348, + .trainerOffset = 6, }, [NATIONAL_DEX_BLIPBUG] = @@ -9903,8 +9894,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 80, .description = gBlipbugPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -9915,8 +9906,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 195, .description = gDottlerPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -9927,8 +9918,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 408, .description = gOrbeetlePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -9939,8 +9930,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 89, .description = gNickitPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -9951,8 +9942,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 12, .weight = 199, .description = gThievulPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 282, + .pokemonOffset = 4, .trainerScale = 256, .trainerOffset = 0, }, @@ -9963,8 +9954,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 22, .description = gGossifleurPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -9975,8 +9966,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 25, .description = gEldegossPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -9987,8 +9978,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 60, .description = gWoolooPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -9999,8 +9990,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 13, .weight = 430, .description = gDubwoolPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 272, + .pokemonOffset = 3, .trainerScale = 256, .trainerOffset = 0, }, @@ -10011,8 +10002,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 85, .description = gChewtlePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -10023,9 +10014,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 1155, .description = gDrednawPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -10035,8 +10026,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 135, .description = gYamperPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -10047,9 +10038,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 340, .description = gBoltundPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -10059,8 +10050,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 120, .description = gRolycolyPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -10071,8 +10062,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 11, .weight = 780, .description = gCarkolPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 320, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -10083,8 +10074,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 28, .weight = 3105, .description = gCoalossalPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 275, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -10095,8 +10086,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 2, .weight = 5, .description = gApplinPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 682, + .pokemonOffset = 24, .trainerScale = 256, .trainerOffset = 0, }, @@ -10107,8 +10098,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 10, .description = gFlapplePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -10119,8 +10110,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 130, .description = gAppletunPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -10131,10 +10122,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 22, .weight = 76, .description = gSilicobraPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 348, + .trainerOffset = 6, }, [NATIONAL_DEX_SANDACONDA] = @@ -10143,10 +10134,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 38, .weight = 655, .description = gSandacondaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 610, + .trainerOffset = 17, }, [NATIONAL_DEX_CRAMORANT] = @@ -10155,9 +10146,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 8, .weight = 180, .description = gCramorantPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 366, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -10167,8 +10158,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 10, .description = gArrokudaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -10179,8 +10170,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 13, .weight = 300, .description = gBarraskewdaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 272, + .pokemonOffset = 3, .trainerScale = 256, .trainerOffset = 0, }, @@ -10191,8 +10182,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 110, .description = gToxelPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -10203,10 +10194,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 16, .weight = 400, .description = gToxtricityPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 259, + .pokemonOffset = 1, + .trainerScale = 296, + .trainerOffset = 1, }, [NATIONAL_DEX_SIZZLIPEDE] = @@ -10215,8 +10206,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 7, .weight = 10, .description = gSizzlipedePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 365, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -10227,8 +10218,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 30, .weight = 1200, .description = gCentiskorchPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 275, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -10239,8 +10230,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 40, .description = gClobbopusPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -10251,10 +10242,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 16, .weight = 390, .description = gGrapploctPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 259, + .pokemonOffset = 1, + .trainerScale = 296, + .trainerOffset = 1, }, [NATIONAL_DEX_SINISTEA] = @@ -10263,8 +10254,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 1, .weight = 2, .description = gSinisteaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 682, + .pokemonOffset = 24, .trainerScale = 256, .trainerOffset = 0, }, @@ -10275,8 +10266,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 2, .weight = 4, .description = gPolteageistPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 682, + .pokemonOffset = 24, .trainerScale = 256, .trainerOffset = 0, }, @@ -10287,8 +10278,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 34, .description = gHatennaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -10299,8 +10290,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 48, .description = gHattremPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -10311,10 +10302,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 21, .weight = 51, .description = gHatterenePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 365, + .trainerOffset = 7, }, [NATIONAL_DEX_IMPIDIMP] = @@ -10323,8 +10314,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 55, .description = gImpidimpPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -10335,9 +10326,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 8, .weight = 125, .description = gMorgremPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 366, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -10347,9 +10338,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 15, .weight = 610, .description = gGrimmsnarlPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 268, + .pokemonOffset = 2, + .trainerScale = 271, .trainerOffset = 0, }, @@ -10359,10 +10350,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 16, .weight = 460, .description = gObstagoonPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 259, + .pokemonOffset = 1, + .trainerScale = 296, + .trainerOffset = 1, }, [NATIONAL_DEX_PERRSERKER] = @@ -10371,9 +10362,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 8, .weight = 280, .description = gPerrserkerPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 366, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -10383,9 +10374,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 4, .description = gCursolaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -10395,9 +10386,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 8, .weight = 1170, .description = gSirfetchdPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 366, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -10407,9 +10398,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 15, .weight = 582, .description = gMrRimePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 268, + .pokemonOffset = 2, + .trainerScale = 271, .trainerOffset = 0, }, @@ -10419,10 +10410,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 16, .weight = 666, .description = gRunerigusPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 259, + .pokemonOffset = 1, + .trainerScale = 296, + .trainerOffset = 1, }, [NATIONAL_DEX_MILCERY] = @@ -10431,8 +10422,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 2, .weight = 3, .description = gMilceryPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 682, + .pokemonOffset = 24, .trainerScale = 256, .trainerOffset = 0, }, @@ -10443,8 +10434,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 5, .description = gAlcremiePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -10455,8 +10446,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 30, .weight = 620, .description = gFalinksPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 275, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -10467,8 +10458,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 10, .description = gPincurchinPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -10479,8 +10470,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 38, .description = gSnomPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -10491,8 +10482,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 13, .weight = 420, .description = gFrosmothPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 272, + .pokemonOffset = 3, .trainerScale = 256, .trainerOffset = 0, }, @@ -10503,10 +10494,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 25, .weight = 5200, .description = gStonjournerPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 257, + .pokemonOffset = 10, + .trainerScale = 423, + .trainerOffset = 8, }, [NATIONAL_DEX_EISCUE] = @@ -10515,9 +10506,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 14, .weight = 890, .description = gEiscuePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 265, + .pokemonOffset = 2, + .trainerScale = 262, .trainerOffset = 0, }, @@ -10527,8 +10518,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 9, .weight = 280, .description = gIndeedeePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 338, + .pokemonOffset = 8, .trainerScale = 256, .trainerOffset = 0, }, @@ -10539,8 +10530,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 30, .description = gMorpekoPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -10551,8 +10542,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 12, .weight = 1000, .description = gCufantPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 282, + .pokemonOffset = 4, .trainerScale = 256, .trainerOffset = 0, }, @@ -10563,8 +10554,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 30, .weight = 6500, .description = gCopperajahPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 275, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -10575,10 +10566,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 18, .weight = 1900, .description = gDracozoltPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 267, + .pokemonOffset = 2, + .trainerScale = 286, + .trainerOffset = 1, }, [NATIONAL_DEX_ARCTOZOLT] = @@ -10587,10 +10578,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 23, .weight = 1500, .description = gArctozoltPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 342, + .trainerOffset = 7, }, [NATIONAL_DEX_DRACOVISH] = @@ -10599,10 +10590,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 23, .weight = 2150, .description = gDracovishPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 342, + .trainerOffset = 7, }, [NATIONAL_DEX_ARCTOVISH] = @@ -10611,10 +10602,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 20, .weight = 1750, .description = gArctovishPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 261, + .pokemonOffset = 1, + .trainerScale = 334, + .trainerOffset = 4, }, [NATIONAL_DEX_DURALUDON] = @@ -10623,10 +10614,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 18, .weight = 400, .description = gDuraludonPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 267, + .pokemonOffset = 2, + .trainerScale = 286, + .trainerOffset = 1, }, [NATIONAL_DEX_DREEPY] = @@ -10635,8 +10626,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 20, .description = gDreepyPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -10647,9 +10638,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 14, .weight = 110, .description = gDrakloakPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 265, + .pokemonOffset = 2, + .trainerScale = 262, .trainerOffset = 0, }, @@ -10659,8 +10650,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 30, .weight = 500, .description = gDragapultPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 275, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -10671,8 +10662,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 28, .weight = 1100, .description = gZacianPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 275, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -10683,8 +10674,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 29, .weight = 2100, .description = gZamazentaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 275, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -10695,10 +10686,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 200, .weight = 9500, .description = gEternatusPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 1352, + .trainerOffset = 18, }, [NATIONAL_DEX_KUBFU] = @@ -10707,8 +10698,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 120, .description = gKubfuPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -10719,10 +10710,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 19, .weight = 1050, .description = gUrshifuPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 1, + .trainerScale = 326, + .trainerOffset = 4, }, [NATIONAL_DEX_ZARUDE] = @@ -10731,10 +10722,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 18, .weight = 700, .description = gZarudePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 267, + .pokemonOffset = 2, + .trainerScale = 286, + .trainerOffset = 1, }, [NATIONAL_DEX_REGIELEKI] = @@ -10743,8 +10734,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 12, .weight = 1450, .description = gRegielekiPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 282, + .pokemonOffset = 4, .trainerScale = 256, .trainerOffset = 0, }, @@ -10755,10 +10746,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 21, .weight = 2000, .description = gRegidragoPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 365, + .trainerOffset = 7, }, [NATIONAL_DEX_GLASTRIER] = @@ -10767,10 +10758,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 22, .weight = 8000, .description = gGlastrierPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 348, + .trainerOffset = 6, }, [NATIONAL_DEX_SPECTRIER] = @@ -10779,10 +10770,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 20, .weight = 445, .description = gSpectrierPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 261, + .pokemonOffset = 1, + .trainerScale = 334, + .trainerOffset = 4, }, [NATIONAL_DEX_CALYREX] = @@ -10791,8 +10782,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 11, .weight = 77, .description = gCalyrexPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 320, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -10803,10 +10794,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 18, .weight = 951, .description = gWyrdeerPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 267, + .pokemonOffset = 2, + .trainerScale = 286, + .trainerOffset = 1, }, [NATIONAL_DEX_KLEAVOR] = @@ -10815,10 +10806,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 18, .weight = 890, .description = gKleavorPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 267, + .pokemonOffset = 2, + .trainerScale = 286, + .trainerOffset = 1, }, [NATIONAL_DEX_URSALUNA] = @@ -10827,10 +10818,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 24, .weight = 2900, .description = gUrsalunaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 3, + .trainerScale = 369, + .trainerOffset = 7, }, [NATIONAL_DEX_BASCULEGION] = @@ -10839,8 +10830,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 30, .weight = 1100, .description = gBasculegionPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 275, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -10851,8 +10842,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 13, .weight = 430, .description = gSneaslerPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 272, + .pokemonOffset = 3, .trainerScale = 256, .trainerOffset = 0, }, @@ -10863,10 +10854,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 25, .weight = 605, .description = gOverqwilPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 257, + .pokemonOffset = 10, + .trainerScale = 423, + .trainerOffset = 8, }, [NATIONAL_DEX_ENAMORUS] = @@ -10875,10 +10866,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 16, .weight = 480, .description = gEnamorusPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 259, + .pokemonOffset = 1, + .trainerScale = 296, + .trainerOffset = 1, }, -#endif + }; From 90021f3be614cf9dbf800bfcd50b39840258cf94 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Mon, 27 Feb 2023 23:49:43 -0300 Subject: [PATCH 127/428] Removed zMovePower field in gBattleMoves in favor of a function. --- include/battle_z_move.h | 1 + include/pokemon.h | 1 - src/battle_util.c | 3 +- src/battle_z_move.c | 44 +- src/data/battle_moves.h | 930 ---------------------------------------- 5 files changed, 46 insertions(+), 933 deletions(-) diff --git a/include/battle_z_move.h b/include/battle_z_move.h index 94a9c3568cf0..a87109fcb733 100644 --- a/include/battle_z_move.h +++ b/include/battle_z_move.h @@ -26,5 +26,6 @@ const u8 *GetZMoveName(u16 move); void SetZEffect(void); bool32 IsZMoveUsable(u8 battlerId, u16 moveIndex); void GetUsableZMoves(u8 battlerId, u16 *moves); +u16 GetZMovePower(u16 move); #endif // GUARD_BATTLE_Z_MOVE_H \ No newline at end of file diff --git a/include/pokemon.h b/include/pokemon.h index 05b9d1ac9a29..6d27d30c0c47 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -339,7 +339,6 @@ struct BattleMove u32 flags; u8 split; u8 argument; - u8 zMovePower; u8 zMoveEffect; }; diff --git a/src/battle_util.c b/src/battle_util.c index 1625ff919c3f..3507ce15a6b8 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -7,6 +7,7 @@ #include "battle_controllers.h" #include "battle_interface.h" #include "battle_setup.h" +#include "battle_z_move.h" #include "party_menu.h" #include "pokemon.h" #include "international_string_util.h" @@ -8532,7 +8533,7 @@ static u16 CalcMoveBasePower(u16 move, u8 battlerAtk, u8 battlerDef) u32 weight, hpFraction, speed; if (gBattleStruct->zmove.active) - return gBattleMoves[gBattleStruct->zmove.baseMoves[battlerAtk]].zMovePower; + return GetZMovePower(gBattleStruct->zmove.baseMoves[battlerAtk]); switch (gBattleMoves[move].effect) { diff --git a/src/battle_z_move.c b/src/battle_z_move.c index 536080aa96c5..9c9c5e0fa331 100644 --- a/src/battle_z_move.c +++ b/src/battle_z_move.c @@ -535,7 +535,7 @@ bool32 MoveSelectionDisplayZMove(u16 zmove) static void ZMoveSelectionDisplayPower(u16 move, u16 zMove) { u8 *txtPtr; - u16 power = gBattleMoves[move].zMovePower; + u16 power = GetZMovePower(move); if (zMove >= MOVE_CATASTROPIKA) power = gBattleMoves[zMove].power; @@ -698,3 +698,45 @@ static bool32 AreStatsMaxed(u8 battlerId, u8 n) return TRUE; } +u16 GetZMovePower(u16 move) +{ + if (gBattleMoves[move].split == SPLIT_STATUS) + return 0; + if (gBattleMoves[move].effect == EFFECT_OHKO) + return 180; + + switch (move) + { + case MOVE_MEGA_DRAIN: return 120; + case MOVE_CORE_ENFORCER: return 140; + case MOVE_WEATHER_BALL: return 160; + case MOVE_HEX: return 160; + case MOVE_FLYING_PRESS: return 170; + case MOVE_GEAR_GRIND: return 180; + case MOVE_V_CREATE: return 220; + default: + { + if (gBattleMoves[move].power >= 140) + return 200; + else if (gBattleMoves[move].power >= 130) + return 195; + else if (gBattleMoves[move].power >= 120) + return 190; + else if (gBattleMoves[move].power >= 110) + return 185; + else if (gBattleMoves[move].power >= 100) + return 180; + else if (gBattleMoves[move].power >= 90) + return 175; + else if (gBattleMoves[move].power >= 80) + return 160; + else if (gBattleMoves[move].power >= 70) + return 140; + else if (gBattleMoves[move].power >= 60) + return 120; + else + return 100; + } + } +} + diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index 50e10d414d8b..c5375dc34b7e 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -26,7 +26,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -42,7 +41,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -58,7 +56,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -74,7 +71,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -90,7 +86,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -106,7 +101,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -122,7 +116,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_IRON_FIST_BOOST | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -138,7 +131,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_IRON_FIST_BOOST | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -154,7 +146,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_IRON_FIST_BOOST | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -170,7 +161,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -186,7 +176,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -202,7 +191,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -222,7 +210,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_BOTH, .priority = 0, .split = SPLIT_SPECIAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -242,7 +229,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED | FLAG_DANCE, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -258,7 +244,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SLICING_MOVE, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -274,7 +259,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DMG_2X_IN_AIR | FLAG_WIND_MOVE, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -290,7 +274,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -314,7 +297,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = -6, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, @@ -322,10 +304,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_4 .power = 90, - .zMovePower = 175, #else .power = 70, - .zMovePower = 140, #endif .effect = EFFECT_SEMI_INVULNERABLE, .type = TYPE_FLYING, @@ -355,7 +335,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -371,7 +350,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -395,7 +373,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -411,7 +388,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_DMG_MINIMIZE, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -427,7 +403,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_TWO_STRIKES, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -443,7 +418,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 190, .zMoveEffect = Z_EFFECT_NONE, }, @@ -452,15 +426,12 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = #if B_UPDATED_MOVE_DATA >= GEN_5 .power = 100, .pp = 10, - .zMovePower = 180, #elif B_UPDATED_MOVE_DATA == GEN_4 .power = 85, .pp = 25, - .zMovePower = 160, #else .power = 70, .pp = 25, - .zMovePower = 140, #endif .effect = EFFECT_RECOIL_IF_MISS, .type = TYPE_FIGHTING, @@ -489,7 +460,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -505,7 +475,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_EVSN_UP_1, }, @@ -521,7 +490,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -537,7 +505,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -553,7 +520,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -569,7 +535,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -593,7 +558,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -613,7 +577,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -633,7 +596,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -649,7 +611,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_RECKLESS_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -658,11 +619,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = #if B_UPDATED_MOVE_DATA >= GEN_5 .power = 120, .pp = 10, - .zMovePower = 190, #else .power = 90, .pp = 20, - .zMovePower = 175, #endif .effect = EFFECT_RAMPAGE, .type = TYPE_NORMAL, @@ -687,7 +646,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_RECKLESS_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 190, .zMoveEffect = Z_EFFECT_NONE, }, @@ -703,7 +661,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ATK_UP_1, }, @@ -719,7 +676,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -735,7 +691,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_TWO_STRIKES, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -756,7 +711,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -772,7 +726,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ATK_UP_1, }, @@ -788,7 +741,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_STRONG_JAW_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -804,7 +756,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -828,7 +779,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = -6, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -844,7 +794,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, }, @@ -860,7 +809,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, }, @@ -876,7 +824,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -900,7 +847,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -920,7 +866,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -936,7 +881,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -956,7 +900,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -972,7 +915,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RECOVER_HP, }, @@ -988,7 +930,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -996,10 +937,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 110, - .zMovePower = 185, #else .power = 120, - .zMovePower = 190, #endif .effect = EFFECT_HIT, .type = TYPE_WATER, @@ -1033,7 +972,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DMG_UNDERWATER, .split = SPLIT_SPECIAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -1053,7 +991,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -1061,10 +998,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 110, - .zMovePower = 185, #else .power = 120, - .zMovePower = 190, #endif .effect = EFFECT_FREEZE_HIT, .type = TYPE_ICE, @@ -1090,7 +1025,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -1106,7 +1040,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -1122,7 +1055,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -1138,7 +1070,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 200, .zMoveEffect = Z_EFFECT_NONE, }, @@ -1154,7 +1085,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -1170,7 +1100,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -1190,7 +1119,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_RECKLESS_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -1206,7 +1134,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -1228,7 +1155,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_DEPENDS, .priority = -5, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -1244,7 +1170,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -1260,7 +1185,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -1280,7 +1204,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -1300,7 +1223,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -1316,7 +1238,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -1340,7 +1261,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, @@ -1356,7 +1276,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT | FLAG_SLICING_MOVE, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -1372,7 +1291,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 190, .zMoveEffect = Z_EFFECT_NONE, }, @@ -1388,7 +1306,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_POWDER, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -1404,7 +1321,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_POWDER, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, @@ -1420,7 +1336,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_POWDER, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, }, @@ -1429,15 +1344,12 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = #if B_UPDATED_MOVE_DATA >= GEN_5 .power = 120, .pp = 10, - .zMovePower = 190, #elif B_UPDATED_MOVE_DATA == GEN_4 .power = 90, .pp = 20, - .zMovePower = 175, #else .power = 70, .pp = 20, - .zMovePower = 140, #endif .effect = EFFECT_RAMPAGE, .type = TYPE_GRASS, @@ -1466,7 +1378,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, }, @@ -1482,7 +1393,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -1503,7 +1413,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -1520,7 +1429,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -1540,7 +1448,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -1560,7 +1467,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, @@ -1568,10 +1474,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 110, - .zMovePower = 185, #else .power = 120, - .zMovePower = 190, #endif .effect = EFFECT_THUNDER, .type = TYPE_ELECTRIC, @@ -1597,7 +1501,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -1613,7 +1516,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DMG_UNDERGROUND, .split = SPLIT_PHYSICAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -1629,7 +1531,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_DMG_UNDERGROUND, .split = SPLIT_PHYSICAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -1637,10 +1538,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_4 .power = 80, - .zMovePower = 160, #else .power = 60, - .zMovePower = 120, #endif .effect = EFFECT_SEMI_INVULNERABLE, .type = TYPE_GROUND, @@ -1670,7 +1569,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -1686,7 +1584,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -1702,7 +1599,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -1718,7 +1614,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, }, @@ -1734,7 +1629,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ATK_UP_1, }, @@ -1750,7 +1644,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -1766,7 +1659,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 1, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -1782,7 +1674,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -1798,7 +1689,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = -6, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RECOVER_HP, }, @@ -1814,7 +1704,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -1830,7 +1719,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ACC_UP_1, }, @@ -1846,7 +1734,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ATK_UP_1, }, @@ -1862,7 +1749,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -1884,7 +1770,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -1900,7 +1785,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -1920,7 +1804,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -1936,7 +1819,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_EVSN_UP_1, }, @@ -1952,7 +1834,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, @@ -1968,7 +1849,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -1984,7 +1864,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ACC_UP_1, }, @@ -2004,7 +1883,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -2020,7 +1898,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, @@ -2036,7 +1913,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RECOVER_HP, }, @@ -2052,7 +1928,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -2068,7 +1943,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ACC_UP_1, }, @@ -2089,7 +1963,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_USER, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -2105,7 +1978,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_NONE, }, @@ -2121,7 +1993,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ATK_UP_2, }, @@ -2137,7 +2008,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 200, .zMoveEffect = Z_EFFECT_NONE, }, @@ -2153,7 +2023,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC, .split = SPLIT_PHYSICAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -2173,7 +2042,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -2193,7 +2061,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -2209,7 +2076,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -2225,7 +2091,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -2233,10 +2098,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 110, - .zMovePower = 185, #else .power = 120, - .zMovePower = 190, #endif .effect = EFFECT_BURN_HIT, .type = TYPE_FIRE, @@ -2270,7 +2133,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -2291,7 +2153,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -2307,7 +2168,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -2316,11 +2176,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 130, .pp = 10, - .zMovePower = 195, #else .power = 100, .pp = 15, - .zMovePower = 180, #endif .effect = EFFECT_SKULL_BASH, .type = TYPE_NORMAL, @@ -2345,7 +2203,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -2361,7 +2218,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -2377,7 +2233,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -2397,7 +2252,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_EVSN_UP_1, }, @@ -2417,7 +2271,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -2426,15 +2279,12 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = #if B_UPDATED_MOVE_DATA >= GEN_5 .power = 130, .pp = 10, - .zMovePower = 195, #elif B_UPDATED_MOVE_DATA == GEN_4 .power = 100, .pp = 20, - .zMovePower = 180, #else .power = 85, .pp = 20, - .zMovePower = 60, #endif .effect = EFFECT_RECOIL_IF_MISS, .type = TYPE_FIGHTING, @@ -2465,7 +2315,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, @@ -2481,7 +2330,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -2505,7 +2353,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -2521,7 +2368,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -2530,11 +2376,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = #if B_UPDATED_MOVE_DATA >= GEN_7 .power = 80, .pp = 10, - .zMovePower = 160, #else .power = 20, .pp = 15, - .zMovePower = 100, #endif .effect = EFFECT_ABSORB, .type = TYPE_BUG, @@ -2559,7 +2403,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, }, @@ -2580,7 +2423,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_PHYSICAL, .argument = MOVE_EFFECT_FLINCH, - .zMovePower = 200, .zMoveEffect = Z_EFFECT_NONE, }, @@ -2596,7 +2438,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RECOVER_HP, }, @@ -2616,7 +2457,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -2632,7 +2472,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_IRON_FIST_BOOST | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -2648,7 +2487,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_POWDER, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -2668,7 +2506,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_EVSN_UP_1, }, @@ -2688,7 +2525,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -2704,7 +2540,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ATK_UP_3, }, @@ -2724,7 +2559,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -2733,15 +2567,12 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 100, .accuracy = 90, - .zMovePower = 180, #elif B_UPDATED_MOVE_DATA == GEN_5 .power = 90, .accuracy = 90, - .zMovePower = 175, #else .power = 90, .accuracy = 85, - .zMovePower = 175, #endif .effect = EFFECT_HIT, .type = TYPE_WATER, @@ -2766,7 +2597,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 200, .zMoveEffect = Z_EFFECT_NONE, }, @@ -2782,7 +2612,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -2798,7 +2627,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_TWO_STRIKES, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -2818,7 +2646,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -2834,7 +2661,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -2850,7 +2676,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_STRONG_JAW_BOOST | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -2866,7 +2691,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ATK_UP_1, }, @@ -2886,7 +2710,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_USER, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1, }, @@ -2902,7 +2725,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -2918,7 +2740,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -2934,7 +2755,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT | FLAG_SLICING_MOVE, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -2950,7 +2770,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -2972,7 +2791,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -2988,7 +2806,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1, }, @@ -3004,7 +2821,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -3013,11 +2829,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 60, .pp = 25, - .zMovePower = 120, #else .power = 40, .pp = 10, - .zMovePower = 100, #endif .effect = EFFECT_THIEF, .type = TYPE_DARK, @@ -3046,7 +2860,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -3066,7 +2879,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, @@ -3086,7 +2898,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, @@ -3102,7 +2913,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_THAW_USER, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -3126,7 +2936,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -3146,7 +2955,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_CURSE, }, @@ -3162,7 +2970,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -3178,7 +2985,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RECOVER_HP, }, @@ -3194,7 +3000,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT, .split = SPLIT_SPECIAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -3218,7 +3023,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_POWDER, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -3234,7 +3038,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -3254,7 +3057,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RECOVER_HP, }, @@ -3270,7 +3072,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -3290,7 +3091,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_USER, .flags = FLAG_PROTECTION_MOVE, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -3306,7 +3106,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 1, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -3326,7 +3125,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, }, @@ -3346,7 +3144,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -3366,7 +3163,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, @@ -3382,7 +3178,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RECOVER_HP, }, @@ -3398,7 +3193,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_BALLISTIC, .split = SPLIT_SPECIAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -3414,7 +3208,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -3430,7 +3223,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_BALLISTIC | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -3450,7 +3242,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_OPPONENTS_FIELD, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -3458,10 +3249,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_4 .power = 120, - .zMovePower = 190, #else .power = 100, - .zMovePower = 180, #endif .effect = EFFECT_PARALYZE_HIT, .type = TYPE_ELECTRIC, @@ -3495,7 +3284,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_BOOST_CRITS, }, @@ -3511,7 +3299,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_FOLLOW_ME, }, @@ -3527,7 +3314,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SOUND, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -3543,7 +3329,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_WIND_MOVE, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -3563,7 +3348,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_USER, .flags = FLAG_PROTECTION_MOVE, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_EVSN_UP_1, }, @@ -3583,7 +3367,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -3603,7 +3386,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, }, @@ -3612,15 +3394,12 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = #if B_UPDATED_MOVE_DATA >= GEN_5 .power = 120, .pp = 10, - .zMovePower = 190, #elif B_UPDATED_MOVE_DATA == GEN_4 .power = 120, .pp = 15, - .zMovePower = 190, #else .power = 90, .pp = 15, - .zMovePower = 175, #endif .effect = EFFECT_RAMPAGE, .type = TYPE_DRAGON, @@ -3645,7 +3424,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_WIND_MOVE, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, }, @@ -3654,15 +3432,12 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = #if B_UPDATED_MOVE_DATA >= GEN_5 .power = 75, .pp = 10, - .zMovePower = 140, #elif B_UPDATED_MOVE_DATA == GEN_4 .power = 60, .pp = 10, - .zMovePower = 120, #else .power = 60, .pp = 5, - .zMovePower = 120, #endif .effect = EFFECT_ABSORB, .type = TYPE_GRASS, @@ -3691,7 +3466,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_USER, .flags = FLAG_PROTECTION_MOVE, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -3711,7 +3485,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -3727,7 +3500,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -3743,7 +3515,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -3763,7 +3534,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -3783,7 +3553,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -3799,7 +3568,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -3821,7 +3589,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SLICING_MOVE, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -3837,7 +3604,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -3857,7 +3623,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, @@ -3873,7 +3638,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -3889,7 +3653,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_BOOST_CRITS, }, @@ -3909,7 +3672,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_USER, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RECOVER_HP, }, @@ -3925,7 +3687,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -3941,7 +3702,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -3957,7 +3717,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -3973,7 +3732,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, }, @@ -3989,7 +3747,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -4005,7 +3762,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_THAW_USER, .split = SPLIT_PHYSICAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -4021,7 +3777,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DMG_UNDERGROUND, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -4037,7 +3792,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_IRON_FIST_BOOST | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -4053,7 +3807,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 190, .zMoveEffect = Z_EFFECT_NONE, }, @@ -4069,7 +3822,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -4085,7 +3837,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -4105,7 +3856,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, }, @@ -4121,7 +3871,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -4141,7 +3890,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -4161,7 +3909,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ACC_UP_1, }, @@ -4177,7 +3924,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -4193,7 +3939,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -4209,7 +3954,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = -1, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -4225,7 +3969,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -4241,7 +3984,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -4261,7 +4003,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -4281,7 +4022,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -4297,7 +4037,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT, .split = SPLIT_PHYSICAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -4317,7 +4056,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_BOTH, .priority = 0, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -4333,7 +4071,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, }, @@ -4349,7 +4086,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, }, @@ -4369,7 +4105,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_STRONG_JAW_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -4391,7 +4126,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_DEPENDS, .priority = -5, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -4411,7 +4145,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RECOVER_HP, }, @@ -4431,7 +4164,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -4451,7 +4183,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_SPECIAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -4467,7 +4198,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_BALLISTIC, .split = SPLIT_SPECIAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -4477,17 +4207,14 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .power = 120, .accuracy = 100, .pp = 10, - .zMovePower = 190, #elif B_UPDATED_MOVE_DATA == GEN_5 .power = 100, .accuracy = 100, .pp = 10, - .zMovePower = 180, #else .power = 80, .accuracy = 90, .pp = 15, - .zMovePower = 160, #endif .effect = EFFECT_FUTURE_SIGHT, .type = TYPE_PSYCHIC, @@ -4515,7 +4242,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -4536,7 +4262,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DMG_UNDERWATER, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -4556,7 +4281,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -4580,7 +4304,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -4588,10 +4311,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_5 .power = 90, - .zMovePower = 175, #else .power = 50, - .zMovePower = 100, #endif .effect = EFFECT_UPROAR, .type = TYPE_NORMAL, @@ -4621,7 +4342,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RECOVER_HP, }, @@ -4641,7 +4361,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -4657,7 +4376,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -4665,10 +4383,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 95, - .zMovePower = 175, #else .power = 100, - .zMovePower = 180, #endif .effect = EFFECT_BURN_HIT, .type = TYPE_FIRE, @@ -4694,7 +4410,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, }, @@ -4714,7 +4429,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -4730,7 +4444,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, @@ -4750,7 +4463,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ATK_UP_1, }, @@ -4766,7 +4478,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESTORE_REPLACEMENT_HP, }, @@ -4782,7 +4493,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -4798,7 +4508,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = -3, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_IRON_FIST_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 200, .zMoveEffect = Z_EFFECT_NONE, }, @@ -4806,10 +4515,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 70, - .zMovePower = 140, #else .power = 60, - .zMovePower = 120, #endif .effect = EFFECT_SMELLINGSALT, .type = TYPE_NORMAL, @@ -4840,7 +4547,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_USER, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -4856,7 +4562,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_NONE, }, @@ -4872,7 +4577,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, @@ -4894,7 +4598,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ATK_UP_1, }, @@ -4914,7 +4617,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 5, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -4930,7 +4632,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_2, }, @@ -4946,7 +4647,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, }, @@ -4966,7 +4666,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_USER, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, @@ -4982,7 +4681,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_NONE, }, @@ -4998,7 +4696,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, @@ -5014,7 +4711,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 190, .zMoveEffect = Z_EFFECT_NONE, }, @@ -5030,7 +4726,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 4, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPDEF_UP_2, }, @@ -5050,7 +4745,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_USER, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_2, }, @@ -5066,7 +4760,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = -4, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -5082,7 +4775,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -5098,7 +4790,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, }, @@ -5106,10 +4797,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 65, - .zMovePower = 120, #else .power = 20, - .zMovePower = 100, #endif .effect = EFFECT_KNOCK_OFF, .type = TYPE_DARK, @@ -5135,7 +4824,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -5151,7 +4839,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 200, .zMoveEffect = Z_EFFECT_NONE, }, @@ -5167,7 +4854,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, }, @@ -5187,7 +4873,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_USER, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPDEF_UP_2, }, @@ -5203,7 +4888,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RECOVER_HP, }, @@ -5219,7 +4903,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_FOLLOW_ME, }, @@ -5235,7 +4918,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 4, .flags = FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_2, }, @@ -5251,7 +4933,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -5259,10 +4940,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_4 .power = 80, - .zMovePower = 160, #else .power = 60, - .zMovePower = 120, #endif .effect = EFFECT_SEMI_INVULNERABLE, .type = TYPE_WATER, @@ -5288,7 +4967,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -5304,7 +4982,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_EVSN_UP_1, }, @@ -5324,7 +5001,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -5340,7 +5016,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -5356,7 +5031,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_BALLISTIC | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -5372,7 +5046,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_DANCE, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -5392,7 +5065,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_FOES_AND_ALLY, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, @@ -5408,7 +5080,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_HIGH_CRIT | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -5424,7 +5095,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, @@ -5440,7 +5110,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -5460,7 +5129,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -5480,7 +5148,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -5496,7 +5163,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND, .split = SPLIT_SPECIAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -5516,7 +5182,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_STRONG_JAW_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -5532,7 +5197,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -5548,7 +5212,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 200, .zMoveEffect = Z_EFFECT_NONE, }, @@ -5564,7 +5227,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 200, .zMoveEffect = Z_EFFECT_NONE, }, @@ -5573,11 +5235,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 90, .accuracy = 90, - .zMovePower = 175, #else .power = 100, .accuracy = 85, - .zMovePower = 180, #endif .effect = EFFECT_ATTACK_UP_HIT, .type = TYPE_STEEL, @@ -5606,7 +5266,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -5622,7 +5281,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC, .split = SPLIT_SPECIAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -5638,7 +5296,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RECOVER_HP, }, @@ -5654,7 +5311,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, @@ -5662,10 +5318,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 60, - .zMovePower = 120, #else .power = 55, - .zMovePower = 100, #endif .effect = EFFECT_HIT, .type = TYPE_FLYING, @@ -5684,15 +5338,12 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 130, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, - .zMovePower = 195, #elif B_UPDATED_MOVE_DATA == GEN_4 || B_UPDATED_MOVE_DATA == GEN_5 .power = 140, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, - .zMovePower = 200, #else .power = 140, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, - .zMovePower = 200, #endif .effect = EFFECT_OVERHEAT, .type = TYPE_FIRE, @@ -5725,7 +5376,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ATK_UP_1, }, @@ -5735,12 +5385,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .power = 60, .accuracy = 95, .pp = 15, - .zMovePower = 120, #else .power = 50, .accuracy = 80, .pp = 10, - .zMovePower = 100, #endif .effect = EFFECT_SPEED_DOWN_HIT, .type = TYPE_ROCK, @@ -5764,7 +5412,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -5780,7 +5427,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, @@ -5796,7 +5442,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, }, @@ -5812,7 +5457,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -5828,7 +5472,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, @@ -5844,7 +5487,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 200, .zMoveEffect = Z_EFFECT_NONE, }, @@ -5860,7 +5502,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -5876,7 +5517,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -5900,7 +5540,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_SPECIAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -5916,7 +5555,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST | FLAG_DMG_IN_AIR, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -5937,7 +5575,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -5953,7 +5590,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -5973,7 +5609,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -5993,7 +5628,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -6009,7 +5643,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SLICING_MOVE, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -6029,7 +5662,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -6045,7 +5677,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -6065,7 +5696,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -6086,7 +5716,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_USER, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ATK_UP_1, }, @@ -6102,7 +5731,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -6118,7 +5746,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 200, .zMoveEffect = Z_EFFECT_NONE, }, @@ -6134,7 +5761,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ATK_UP_1, }, @@ -6151,7 +5777,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, .argument = MOVE_EFFECT_PARALYSIS, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -6167,7 +5792,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -6183,7 +5807,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -6193,22 +5816,18 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .power = 60, .pp = 25, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, - .zMovePower = 120, #elif B_UPDATED_MOVE_DATA == GEN_5 .power = 60, .pp = 40, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, - .zMovePower = 120, #elif B_UPDATED_MOVE_DATA == GEN_4 .power = 40, .pp = 40, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, - .zMovePower = 100, #else .power = 40, .pp = 40, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, - .zMovePower = 100, #endif .effect = EFFECT_THIEF, .type = TYPE_NORMAL, @@ -6237,7 +5856,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_RECKLESS_BOOST | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 190, .zMoveEffect = Z_EFFECT_NONE, }, @@ -6253,7 +5871,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -6269,7 +5886,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, @@ -6285,7 +5901,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -6293,10 +5908,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_4 .power = 90, - .zMovePower = 175, #else .power = 70, - .zMovePower = 140, #endif .effect = EFFECT_HIT, .type = TYPE_GRASS, @@ -6322,7 +5935,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED | FLAG_DANCE, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -6346,7 +5958,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -6362,7 +5973,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -6378,7 +5988,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_MEGA_LAUNCHER_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -6387,11 +5996,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = #if B_UPDATED_MOVE_DATA >= GEN_5 .power = 140, .accuracy = 100, - .zMovePower = 200, #else .power = 120, .accuracy = 85, - .zMovePower = 190, #endif .effect = EFFECT_FUTURE_SIGHT, .type = TYPE_STEEL, @@ -6416,7 +6023,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 200, .zMoveEffect = Z_EFFECT_NONE, }, @@ -6436,7 +6042,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -6452,7 +6057,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, @@ -6472,7 +6076,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, @@ -6480,10 +6083,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 70, - .zMovePower = 140, #else .power = 60, - .zMovePower = 120, #endif .effect = EFFECT_WAKE_UP_SLAP, .type = TYPE_FIGHTING, @@ -6510,7 +6111,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -6526,7 +6126,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -6546,7 +6145,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_USER, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_NONE, }, @@ -6562,7 +6160,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -6578,7 +6175,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -6602,7 +6198,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 2, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -6618,7 +6213,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -6638,7 +6232,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED | FLAG_WIND_MOVE, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_BOOST_CRITS, }, @@ -6658,7 +6251,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_USER | MOVE_TARGET_ALLY, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_BOOST_CRITS, }, @@ -6693,7 +6285,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -6709,7 +6300,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 190, .zMoveEffect = Z_EFFECT_NONE, }, @@ -6725,7 +6315,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -6733,10 +6322,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 60, - .zMovePower = 120, #else .power = 50, - .zMovePower = 100, #endif .effect = EFFECT_ASSURANCE, .type = TYPE_DARK, @@ -6766,7 +6353,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, @@ -6782,7 +6368,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -6802,7 +6387,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPATK_UP_2, }, @@ -6836,7 +6420,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_BOTH, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPATK_UP_2, }, @@ -6870,7 +6453,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_USER, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ATK_UP_1, }, @@ -6886,7 +6468,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, }, @@ -6906,7 +6487,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_USER, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_EVSN_UP_1, }, @@ -6922,7 +6502,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_2, }, @@ -6938,7 +6517,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ACC_UP_1, }, @@ -6954,7 +6532,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, }, @@ -6970,7 +6547,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, }, @@ -6986,7 +6562,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -6994,10 +6569,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_5 .power = 140, - .zMovePower = 200, #else .power = 130, - .zMovePower = 195, #endif .effect = EFFECT_LAST_RESORT, .type = TYPE_NORMAL, @@ -7023,7 +6596,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, }, @@ -7031,10 +6603,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_7 .power = 70, - .zMovePower = 140, #else .power = 80, - .zMovePower = 160, #endif .effect = EFFECT_SUCKER_PUNCH, .type = TYPE_DARK, @@ -7064,7 +6634,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_OPPONENTS_FIELD, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -7080,7 +6649,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_BOOST_CRITS, }, @@ -7100,7 +6668,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_USER, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -7120,7 +6687,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_USER, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_EVSN_UP_1, }, @@ -7137,7 +6703,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_RECKLESS_BOOST | FLAG_THAW_USER, .split = SPLIT_PHYSICAL, .argument = STATUS1_BURN, - .zMovePower = 190, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7153,7 +6718,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7161,10 +6725,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 80, - .zMovePower = 160, #else .power = 90, - .zMovePower = 175, #endif .effect = EFFECT_HIT, .type = TYPE_FIGHTING, @@ -7190,7 +6752,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -7206,7 +6767,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7226,7 +6786,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_SPECIAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7242,7 +6801,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT | FLAG_SLICING_MOVE, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7258,7 +6816,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7274,7 +6831,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7298,7 +6854,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_SPECIAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7314,7 +6869,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SLICING_MOVE, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7330,7 +6884,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SOUND | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7338,10 +6891,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 85, - .zMovePower = 160, #else .power = 90, - .zMovePower = 175, #endif .effect = EFFECT_HIT, .type = TYPE_DRAGON, @@ -7373,7 +6924,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7381,10 +6931,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 80, - .zMovePower = 160, #else .power = 70, - .zMovePower = 140, #endif .effect = EFFECT_HIT, .type = TYPE_ROCK, @@ -7403,11 +6951,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = #if B_UPDATED_MOVE_DATA >= GEN_5 .power = 75, .pp = 10, - .zMovePower = 140, #else .power = 60, .pp = 5, - .zMovePower = 120, #endif .effect = EFFECT_ABSORB, .type = TYPE_FIGHTING, @@ -7432,7 +6978,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 1, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7448,7 +6993,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_BALLISTIC, .split = SPLIT_SPECIAL, - .zMovePower = 190, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7456,10 +7000,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 90, - .zMovePower = 175, #else .power = 80, - .zMovePower = 160, #endif .effect = EFFECT_SPECIAL_DEFENSE_DOWN_HIT, .type = TYPE_GRASS, @@ -7485,7 +7027,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_RECKLESS_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 190, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7501,7 +7042,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7517,7 +7057,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_2, }, @@ -7533,7 +7072,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 200, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7549,7 +7087,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -7565,7 +7102,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 1, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7581,7 +7117,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = -4, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7597,7 +7132,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 1, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7613,7 +7147,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7634,7 +7167,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_PHYSICAL, .argument = STATUS1_PARALYSIS, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7655,7 +7187,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_PHYSICAL, .argument = STATUS1_FREEZE, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7676,7 +7207,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_PHYSICAL, .argument = STATUS1_BURN, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7692,7 +7222,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 1, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7708,7 +7237,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_BALLISTIC, .split = SPLIT_SPECIAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7724,7 +7252,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT | FLAG_SLICING_MOVE, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7740,7 +7267,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7756,7 +7282,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7772,7 +7297,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7788,7 +7312,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7808,7 +7331,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ACC_UP_1, }, @@ -7824,7 +7346,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = -7, .flags = FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ACC_UP_1, }, @@ -7832,10 +7353,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 130, - .zMovePower = 195, #else .power = 140, - .zMovePower = 200, #endif .effect = EFFECT_OVERHEAT, .type = TYPE_DRAGON, @@ -7861,7 +7380,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7877,7 +7395,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7885,10 +7402,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 130, - .zMovePower = 195, #else .power = 140, - .zMovePower = 200, #endif .effect = EFFECT_OVERHEAT, .type = TYPE_GRASS, @@ -7914,7 +7429,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 190, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7930,7 +7444,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC, .split = SPLIT_PHYSICAL, - .zMovePower = 200, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7946,7 +7459,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT | FLAG_SHEER_FORCE_BOOST | FLAG_SLICING_MOVE, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7966,7 +7478,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 190, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7986,7 +7497,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8002,7 +7512,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8018,7 +7527,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT, .split = SPLIT_PHYSICAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8034,7 +7542,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPDEF_UP_2, }, @@ -8054,7 +7561,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_OPPONENTS_FIELD, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -8070,7 +7576,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8096,7 +7601,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_SPECIAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8113,7 +7617,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, .argument = HOLD_EFFECT_PLATE, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8129,7 +7632,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8145,7 +7647,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8161,7 +7662,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_RECKLESS_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 190, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8177,7 +7677,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 1, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8193,7 +7692,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT, .split = SPLIT_PHYSICAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8209,7 +7707,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -8225,7 +7722,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -8241,7 +7737,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_RECKLESS_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 200, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8257,7 +7752,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_TWO_STRIKES, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8273,7 +7767,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 200, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8289,7 +7782,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT, .split = SPLIT_SPECIAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8309,7 +7801,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_USER, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8325,7 +7816,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 190, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8334,15 +7824,12 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 100, .accuracy = 75, - .zMovePower = 180, #elif B_UPDATED_MOVE_DATA == GEN_5 .power = 120, .accuracy = 75, - .zMovePower = 190, #else .power = 120, .accuracy = 70, - .zMovePower = 190, #endif .effect = EFFECT_TRAP, .type = TYPE_FIRE, @@ -8371,7 +7858,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -8387,7 +7873,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 190, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8403,7 +7888,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8423,7 +7907,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, - .zMovePower = 190, .zMoveEffect = Z_EFFECT_NONE, .argument = MOVE_EFFECT_FEINT, }, @@ -8440,7 +7923,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ATK_UP_1, }, @@ -8457,7 +7939,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .flags = FLAG_PROTECTION_MOVE | FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, .argument = TRUE, // Protects the whole side. - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -8473,7 +7954,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, }, @@ -8489,7 +7969,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, }, @@ -8509,7 +7988,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_ALL_BATTLERS, .flags = FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, @@ -8525,7 +8003,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8541,7 +8018,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8557,7 +8033,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -8577,7 +8052,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_USER, .flags = FLAG_POWDER, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -8593,7 +8067,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, @@ -8613,7 +8086,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_ALL_BATTLERS, .flags = FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, @@ -8629,7 +8101,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DMG_IN_AIR, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8637,10 +8108,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 60, - .zMovePower = 120, #else .power = 40, - .zMovePower = 100, #endif .effect = EFFECT_ALWAYS_CRIT, .type = TYPE_FIGHTING, @@ -8666,7 +8135,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8682,7 +8150,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8698,7 +8165,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED | FLAG_DANCE, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -8718,7 +8184,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8727,11 +8192,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 120, .pp = 10, - .zMovePower = 190, #else .power = 70, .pp = 15, - .zMovePower = 140, #endif .effect = EFFECT_SYNCHRONOISE, .type = TYPE_PSYCHIC, @@ -8756,7 +8219,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC, .split = SPLIT_SPECIAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8772,7 +8234,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, @@ -8788,7 +8249,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8804,7 +8264,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -8824,7 +8283,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8840,7 +8298,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8856,7 +8313,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8872,7 +8328,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, @@ -8888,7 +8343,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, @@ -8904,7 +8358,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, }, @@ -8920,7 +8373,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SOUND, .split = SPLIT_SPECIAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8936,7 +8388,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SOUND, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8952,7 +8403,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_STAT_STAGES_IGNORED, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8968,7 +8418,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8984,7 +8433,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9001,7 +8449,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .flags = FLAG_PROTECTION_MOVE | FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, .argument = TRUE, // Protects the whole side. - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -9021,7 +8468,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_USER, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_2, }, @@ -9037,7 +8483,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_THAW_USER, .split = SPLIT_SPECIAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9053,7 +8498,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -9069,7 +8513,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MEGA_LAUNCHER_BOOST, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -9089,7 +8532,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9105,7 +8547,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9121,7 +8562,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -9137,7 +8577,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = -6, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9145,10 +8584,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 60, - .zMovePower = 120, #else .power = 30, - .zMovePower = 100, #endif .effect = EFFECT_INCINERATE, .type = TYPE_FIRE, @@ -9174,7 +8611,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, }, @@ -9190,7 +8626,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9206,7 +8641,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, @@ -9222,7 +8656,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9238,7 +8671,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9258,7 +8690,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_2, }, @@ -9274,7 +8705,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9282,10 +8712,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 80, - .zMovePower = 160, #else .power = 50, - .zMovePower = 100, #endif .effect = EFFECT_PLEDGE, .type = TYPE_WATER, @@ -9303,10 +8731,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 80, - .zMovePower = 160, #else .power = 50, - .zMovePower = 100, #endif .effect = EFFECT_PLEDGE, .type = TYPE_FIRE, @@ -9324,10 +8750,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 80, - .zMovePower = 160, #else .power = 50, - .zMovePower = 100, #endif .effect = EFFECT_PLEDGE, .type = TYPE_GRASS, @@ -9353,7 +8777,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9373,7 +8796,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9389,7 +8811,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9397,10 +8818,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 60, - .zMovePower = 120, #else .power = 40, - .zMovePower = 100, #endif .effect = EFFECT_ALWAYS_CRIT, .type = TYPE_ICE, @@ -9426,7 +8845,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = -6, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9442,7 +8860,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ATK_UP_1, }, @@ -9458,7 +8875,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9474,7 +8890,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_RECKLESS_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9490,7 +8905,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9506,7 +8920,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_TWO_STRIKES, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9522,7 +8935,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9538,7 +8950,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9558,7 +8969,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_STAT_STAGES_IGNORED | FLAG_SLICING_MOVE, .split = SPLIT_PHYSICAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9574,7 +8984,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_SLICING_MOVE, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9594,7 +9003,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9610,7 +9018,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9626,7 +9033,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_PHYSICAL, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_DMG_MINIMIZE, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9642,7 +9048,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -9658,7 +9063,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9674,7 +9078,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9690,7 +9093,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9698,10 +9100,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 110, - .zMovePower = 185, #else .power = 120, - .zMovePower = 190, #endif .effect = EFFECT_HURRICANE, .type = TYPE_FLYING, @@ -9727,7 +9127,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_RECKLESS_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 190, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9743,7 +9142,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_TWO_STRIKES, .split = SPLIT_PHYSICAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9759,7 +9157,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9767,10 +9164,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 120, - .zMovePower = 190, #else .power = 85, - .zMovePower = 160, #endif .effect = EFFECT_CHANGE_TYPE_ON_ITEM, .type = TYPE_NORMAL, @@ -9797,7 +9192,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, .argument = STATUS1_SLEEP, }, @@ -9814,7 +9208,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9830,7 +9223,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9846,7 +9238,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 195, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9862,7 +9253,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 195, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9878,7 +9268,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DANCE | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9895,7 +9284,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, .argument = MOVE_EFFECT_PARALYSIS, - .zMovePower = 200, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9912,7 +9300,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, .argument = MOVE_EFFECT_BURN, - .zMovePower = 200, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9928,7 +9315,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_SOUND, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9944,7 +9330,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9960,7 +9345,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 220, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9976,7 +9360,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_THAW_USER, .split = SPLIT_SPECIAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9992,7 +9375,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -10013,7 +9395,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DMG_MINIMIZE, .split = SPLIT_PHYSICAL, .argument = TYPE_FLYING, - .zMovePower = 170, .zMoveEffect = Z_EFFECT_NONE, }, @@ -10030,7 +9411,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, .argument = TRUE, // Protects the whole side. - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -10046,7 +9426,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 190, .zMoveEffect = Z_EFFECT_NONE, }, @@ -10062,7 +9441,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ATK_UP_1, }, @@ -10078,7 +9456,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAGIC_COAT_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, }, @@ -10098,7 +9475,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -10119,7 +9495,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_PHYSICAL, .argument = MOVE_EFFECT_FEINT, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -10136,7 +9511,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, .argument = TYPE_GHOST, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1, }, @@ -10152,7 +9526,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -10168,7 +9541,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 1, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, @@ -10176,10 +9548,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_7 .power = 65, - .zMovePower = 120, #else .power = 50, - .zMovePower = 100, #endif .effect = EFFECT_ABSORB, .type = TYPE_ELECTRIC, @@ -10206,7 +9576,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, .argument = TYPE_GRASS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1, }, @@ -10222,7 +9591,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_WIND_MOVE, .split = SPLIT_PHYSICAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -10238,7 +9606,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -10254,7 +9621,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SOUND, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -10270,7 +9636,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESTORE_REPLACEMENT_HP, }, @@ -10290,7 +9655,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ATK_UP_1, }, @@ -10307,7 +9671,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, .argument = 75, // restores 75% HP instead of 50% HP - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -10325,7 +9688,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .flags = 0, .split = SPLIT_STATUS, .argument = TRUE, // Protects the whole side. - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, @@ -10341,7 +9703,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -10357,7 +9718,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -10373,7 +9733,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, @@ -10389,7 +9748,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, @@ -10405,7 +9763,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -10421,7 +9778,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_WIND_MOVE, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -10437,7 +9793,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -10453,7 +9808,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SOUND, .split = SPLIT_SPECIAL, - .zMovePower = 200, .zMoveEffect = Z_EFFECT_NONE, }, @@ -10469,7 +9823,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -10485,7 +9838,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 4, .flags = FLAG_PROTECTION_MOVE, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -10501,7 +9853,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -10517,7 +9868,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, @@ -10537,7 +9887,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -10553,7 +9902,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_THAW_USER, .split = SPLIT_SPECIAL, - .zMovePower = 185, .zMoveEffect = Z_EFFECT_NONE, }, @@ -10569,7 +9917,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -10589,7 +9936,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 1, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -10598,10 +9944,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_7 .power = 75, - .zMovePower = 140, #else .power = 65, - .zMovePower = 120, #endif .effect = EFFECT_SPECIAL_ATTACK_DOWN_HIT, .type = TYPE_FIRE, @@ -10627,7 +9971,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 4, .flags = FLAG_PROTECTION_MOVE, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -10643,7 +9986,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPDEF_UP_2, }, @@ -10659,7 +10001,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, @@ -10675,7 +10016,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -10691,7 +10031,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 1, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_POWDER, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPDEF_UP_2, }, @@ -10707,7 +10046,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1, }, @@ -10723,7 +10061,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, @@ -10739,7 +10076,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1, }, @@ -10755,7 +10091,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, }, @@ -10771,7 +10106,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -10787,7 +10121,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1, }, @@ -10803,7 +10136,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1, }, @@ -10819,7 +10151,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 1, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -10835,7 +10166,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -10851,7 +10181,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -10867,7 +10196,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -10883,7 +10211,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -10900,7 +10227,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, .argument = 75, // restores 75% HP instead of 50% HP - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -10916,7 +10242,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DMG_IN_AIR | FLAG_DMG_UNGROUNDED_IGNORE_TYPE_IF_FLYING, .split = SPLIT_PHYSICAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -10932,7 +10257,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -10948,7 +10272,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -10964,7 +10287,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_RECKLESS_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 200, .zMoveEffect = Z_EFFECT_NONE, }, @@ -10980,7 +10302,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_MEGA_LAUNCHER_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 185, .zMoveEffect = Z_EFFECT_NONE, }, @@ -10996,7 +10317,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 190, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11012,7 +10332,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 190, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11046,7 +10365,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -11062,7 +10380,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 2, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11078,7 +10395,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 4, .flags = FLAG_PROTECTION_MOVE, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -11094,7 +10410,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11110,7 +10425,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_STAT_STAGES_IGNORED, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11127,7 +10441,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SOUND | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, .argument = STATUS1_BURN, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11143,7 +10456,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11159,7 +10471,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -11175,7 +10486,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11191,7 +10501,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -11207,7 +10516,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SLICING_MOVE, .split = SPLIT_PHYSICAL, - .zMovePower = 190, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11223,7 +10531,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11239,7 +10546,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 3, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, @@ -11255,7 +10561,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, }, @@ -11271,7 +10576,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ATK_UP_1, }, @@ -11287,7 +10591,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, @@ -11303,7 +10606,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11319,7 +10621,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC, .split = SPLIT_SPECIAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11335,7 +10636,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11351,7 +10651,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, @@ -11367,7 +10666,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11383,7 +10681,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11399,7 +10696,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11415,7 +10711,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_THAW_USER, .split = SPLIT_SPECIAL, - .zMovePower = 195, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11431,7 +10726,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, }, @@ -11447,7 +10741,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11463,7 +10756,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1, }, @@ -11479,7 +10771,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DANCE, .split = SPLIT_SPECIAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11495,7 +10786,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11511,7 +10801,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11527,7 +10816,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, @@ -11543,7 +10831,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = -3, .flags = FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC, .split = SPLIT_PHYSICAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11559,7 +10846,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SOUND, .split = SPLIT_SPECIAL, - .zMovePower = 185, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11575,7 +10861,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11591,7 +10876,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11607,7 +10891,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, }, @@ -11623,7 +10906,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = -3, .flags = FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 200, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11639,7 +10921,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 195, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11655,7 +10936,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_STRONG_JAW_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11671,7 +10951,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11687,7 +10966,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11703,7 +10981,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 1, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11719,7 +10996,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11735,7 +11011,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 200, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11751,7 +11026,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11767,7 +11041,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_TARGET_ABILITY_IGNORED, .split = SPLIT_PHYSICAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11783,7 +11056,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_TARGET_ABILITY_IGNORED, .split = SPLIT_SPECIAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11799,7 +11071,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -11815,7 +11086,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11831,7 +11101,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11839,10 +11108,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_8 .power = 120, - .zMovePower = 190, #else .power = 90, - .zMovePower = 175, #endif .effect = EFFECT_CHANGE_TYPE_ON_ITEM, .type = TYPE_NORMAL, @@ -11869,7 +11136,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 200, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11885,7 +11151,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11901,7 +11166,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_TARGET_ABILITY_IGNORED, .split = SPLIT_SPECIAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11912,13 +11176,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .effect = EFFECT_EVASION_UP_HIT, .pp = 10, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, - .zMovePower = 160, #else .effect = EFFECT_ALWAYS_CRIT, .power = 50, .pp = 15, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, - .zMovePower = 100, #endif .type = TYPE_ELECTRIC, .accuracy = 100, @@ -11945,7 +11207,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_BOTH, .priority = 0, .split = SPLIT_SPECIAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11965,7 +11226,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11985,7 +11245,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_SPECIAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11996,12 +11255,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .pp = 20, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .argument = 100, // restores 100% HP instead of 50% HP - .zMovePower = 120, #else .power = 90, .pp = 15, .flags = FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, - .zMovePower = 175, #endif .effect = EFFECT_ABSORB, .type = TYPE_WATER, @@ -12019,12 +11276,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .power = 60, .pp = 20, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, - .zMovePower = 120, #else .power = 90, .pp = 15, .flags = FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, - .zMovePower = 175, #endif .effect = EFFECT_PARALYZE_HIT, .type = TYPE_ELECTRIC, @@ -12042,12 +11297,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .power = 60, .pp = 20, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_THAW_USER, - .zMovePower = 120, #else .power = 90, .pp = 15, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_THAW_USER, - .zMovePower = 175, #endif .effect = EFFECT_BURN_HIT, .type = TYPE_FIRE, @@ -12065,12 +11318,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .power = 80, .accuracy = 95, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, - .zMovePower = 160, #else .power = 90, .accuracy = 100, .flags = FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, - .zMovePower = 175, #endif .effect = EFFECT_GLITZY_GLOW, .type = TYPE_PSYCHIC, @@ -12088,12 +11339,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .power = 80, .accuracy = 95, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, - .zMovePower = 160, #else .power = 90, .accuracy = 100, .flags = FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, - .zMovePower = 175, #endif .effect = EFFECT_BADDY_BAD, .type = TYPE_DARK, @@ -12112,13 +11361,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .accuracy = 90, .pp = 10, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, - .zMovePower = 180, #else .power = 90, .accuracy = 100, .pp = 15, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, - .zMovePower = 175, #endif .effect = EFFECT_SAPPY_SEED, .type = TYPE_GRASS, @@ -12136,13 +11383,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .accuracy = 90, .pp = 10, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, - .zMovePower = 180, #else .power = 90, .accuracy = 100, .pp = 15, .flags = FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, - .zMovePower = 175, #endif .effect = EFFECT_FREEZY_FROST, .type = TYPE_ICE, @@ -12160,13 +11405,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .accuracy = 85, .pp = 5, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, - .zMovePower = 190, #else .power = 90, .accuracy = 100, .pp = 15, .flags = FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, - .zMovePower = 175, #endif .effect = EFFECT_SPARKLY_SWIRL, .type = TYPE_FAIRY, @@ -12193,7 +11436,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12213,7 +11455,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12229,7 +11470,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12245,7 +11485,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT, .split = SPLIT_SPECIAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12261,7 +11500,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_STRONG_JAW_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12277,7 +11515,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12293,7 +11530,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12309,7 +11545,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12326,7 +11561,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_POWDER, .split = SPLIT_STATUS, .argument = TYPE_PSYCHIC, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12342,7 +11576,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_TWO_STRIKES, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12358,7 +11591,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12374,7 +11606,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12390,7 +11621,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12406,7 +11636,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_STRONG_JAW_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12422,7 +11651,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12438,7 +11666,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED | FLAG_SOUND, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12454,7 +11681,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12470,7 +11696,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12486,7 +11711,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12502,7 +11726,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12518,7 +11741,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC | FLAG_SHEER_FORCE_BOOST | FLAG_THAW_USER, .split = SPLIT_PHYSICAL, - .zMovePower = 190, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12534,7 +11756,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SLICING_MOVE, .split = SPLIT_PHYSICAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12550,7 +11771,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12566,7 +11786,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 185, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12582,7 +11801,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12598,7 +11816,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12614,7 +11831,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SOUND, .split = SPLIT_SPECIAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12630,7 +11846,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12646,7 +11861,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12662,7 +11876,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12678,7 +11891,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12694,7 +11906,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12710,7 +11921,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 4, .flags = FLAG_PROTECTION_MOVE, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12726,7 +11936,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12742,7 +11951,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 200, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12758,7 +11966,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 200, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12774,7 +11981,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 200, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12790,7 +11996,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12806,7 +12011,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 195, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12822,7 +12026,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12838,7 +12041,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 190, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12854,7 +12056,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12870,7 +12071,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12890,7 +12090,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12906,7 +12105,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12922,7 +12120,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_MEGA_LAUNCHER_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12938,7 +12135,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12954,7 +12150,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12970,7 +12165,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12986,7 +12180,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 185, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13002,7 +12195,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13018,7 +12210,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13034,7 +12225,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13050,7 +12240,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13066,7 +12255,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_TWO_STRIKES, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13082,7 +12270,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_THAW_USER, .split = SPLIT_SPECIAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13097,7 +12284,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_USER, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13117,7 +12303,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13133,7 +12318,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13149,7 +12333,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13165,7 +12348,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 200, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13181,7 +12363,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13197,7 +12378,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13213,7 +12393,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13233,7 +12412,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 195, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13249,7 +12427,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 190, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13265,7 +12442,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_SOUND, .split = SPLIT_SPECIAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13285,7 +12461,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13301,7 +12476,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13317,7 +12491,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13333,7 +12506,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_SLICING_MOVE, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13353,7 +12525,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_WIND_MOVE, .split = SPLIT_SPECIAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13369,7 +12540,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13389,7 +12559,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13409,7 +12578,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13429,7 +12597,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 190, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13445,7 +12612,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13461,7 +12627,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED | FLAG_DANCE, .split = SPLIT_STATUS, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13481,7 +12646,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13497,7 +12661,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13517,7 +12680,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13537,7 +12699,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13553,7 +12714,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13573,7 +12733,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13589,7 +12748,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13605,7 +12763,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_SLICING_MOVE, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13626,7 +12783,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_WIND_MOVE, .split = SPLIT_SPECIAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13647,7 +12803,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_WIND_MOVE, .split = SPLIT_SPECIAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13668,7 +12823,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_WIND_MOVE, .split = SPLIT_SPECIAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13684,7 +12838,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13700,7 +12853,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13716,7 +12868,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13732,7 +12883,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 4, .flags = FLAG_PROTECTION_MOVE, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_NONE }, @@ -13748,7 +12898,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 190, .zMoveEffect = Z_EFFECT_NONE }, @@ -13764,7 +12913,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE }, @@ -13780,7 +12928,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE }, @@ -13796,7 +12943,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE }, @@ -13812,7 +12958,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 1, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, // The datamine master sheet mentions uncopiable by Metronome but that sounds odd? not yet implemented }, @@ -13829,7 +12974,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_NONE, // The datamine master sheet mentions uncopiable by Metronome but that sounds odd? not yet implemented }, @@ -13846,7 +12990,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE }, @@ -13862,7 +13005,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, // | FLAG_SLICING_MOVE, .split = SPLIT_PHYSICAL, - .zMovePower = 40, .zMoveEffect = Z_EFFECT_NONE, //Supposedly uncallable by Metronome? (if so, needs implementation) }, @@ -13879,7 +13021,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, .argument = 1, // Remove the active field terrain if there is one. }, @@ -13896,7 +13037,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 190, .zMoveEffect = Z_EFFECT_NONE }, @@ -13912,7 +13052,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_NONE, // Uncallable by Metronome (to be implemented) }, @@ -13929,7 +13068,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 80, .zMoveEffect = Z_EFFECT_NONE, // Supposedly uncallable by Metronome, but dubious }, @@ -13946,7 +13084,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13962,7 +13099,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 60, .zMoveEffect = Z_EFFECT_NONE }, @@ -13978,7 +13114,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, // TO VERIFY .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_NONE, // Supposedly uncallable by Metronome (unimplemented) }, @@ -13995,7 +13130,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RECOVER_HP, // Supposedly uncallable by Metronome (unimplemented) }, @@ -14012,7 +13146,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, // | FLAG_SLICING_MOVE, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -14028,7 +13161,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -14044,7 +13176,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SOUND | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -14060,7 +13191,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DANCE | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -14076,7 +13206,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, // TO VERIFY .split = SPLIT_PHYSICAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, // Uncallable by Metronome (to be implemented) }, @@ -14093,7 +13222,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 190, .zMoveEffect = Z_EFFECT_NONE, // Uncallable by Metronome (to be implemented) }, @@ -14110,7 +13238,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, // Uncallable by Metronome (to be implemented) }, @@ -14127,7 +13254,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, // Uncallable by Metronome (to be implemented) }, @@ -14144,7 +13270,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, // Uncallable by Metronome (to be implemented) }, @@ -14161,7 +13286,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, // Uncallable by Metronome (to be implemented) }, @@ -14178,7 +13302,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, // Supposedly uncallable by Metronome? (to be implemented) }, @@ -14195,7 +13318,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_NONE, // Supposedly uncallable by Metronome? (to be implemented) }, @@ -14212,7 +13334,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, // Currently an exact copy of Hail until we figure out what to do with it }, @@ -14229,7 +13350,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -14245,7 +13365,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -14261,7 +13380,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -14277,7 +13395,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -14293,7 +13410,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_TWO_STRIKES, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -14309,7 +13425,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_IRON_FIST_BOOST | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -14325,7 +13440,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 190, .zMoveEffect = Z_EFFECT_NONE, }, @@ -14341,7 +13455,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, // | FLAG_SLICING_MOVE, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -14357,7 +13470,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 190, .zMoveEffect = Z_EFFECT_NONE }, @@ -14373,7 +13485,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 200, .zMoveEffect = Z_EFFECT_NONE, }, @@ -14404,7 +13515,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT, // | FLAG_SLICING_MOVE, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -14420,7 +13530,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE }, @@ -14436,7 +13545,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE }, @@ -14452,7 +13560,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE }, @@ -14468,7 +13575,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE }, @@ -14484,7 +13590,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE }, @@ -14500,7 +13605,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_PHYSICAL, //determined from move type .zMoveEffect = 0 }, @@ -14515,7 +13619,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = 0 }, @@ -14530,7 +13633,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = 0 }, @@ -14545,7 +13647,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = 0 }, @@ -14560,7 +13661,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = 0 }, @@ -14575,7 +13675,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = 0 }, @@ -14590,7 +13689,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = 0 }, @@ -14605,7 +13703,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = 0 }, @@ -14620,7 +13717,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = 0 }, @@ -14635,7 +13731,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = 0 }, @@ -14650,7 +13745,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = 0 }, @@ -14665,7 +13759,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = 0 }, @@ -14680,7 +13773,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = 0 }, @@ -14695,7 +13787,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = 0 }, @@ -14710,7 +13801,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = 0 }, @@ -14725,7 +13815,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = 0 }, @@ -14740,7 +13829,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = 0 }, @@ -14755,7 +13843,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = 0 }, @@ -14770,7 +13857,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = 0 }, @@ -14785,7 +13871,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_HIGH_CRIT, - .zMovePower = 0, .split = SPLIT_SPECIAL, .zMoveEffect = 0 }, @@ -14800,7 +13885,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_SPECIAL, .zMoveEffect = 0 }, @@ -14815,7 +13899,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_USER, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_STATUS, .zMoveEffect = 0 }, @@ -14830,7 +13913,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = 0 }, @@ -14845,7 +13927,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_SPECIAL, .argument = 0, // Set Psychic Terrain. If there's a different field terrain active, overwrite it. .zMoveEffect = 0 @@ -14861,7 +13942,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = 0 }, @@ -14876,7 +13956,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = 0 }, @@ -14891,7 +13970,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_SPECIAL, .zMoveEffect = 0 }, @@ -14906,7 +13984,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_PHYSICAL, .argument = 1, // Remove the active field terrain if there is one. .zMoveEffect = 0 @@ -14922,7 +13999,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = 0 }, @@ -14937,7 +14013,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_BOTH, .priority = 0, .flags = FLAG_SOUND, - .zMovePower = 0, .split = SPLIT_SPECIAL, .zMoveEffect = 0 }, @@ -14952,7 +14027,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_SPECIAL, .zMoveEffect = 0 }, @@ -14967,7 +14041,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = 0 }, @@ -14982,7 +14055,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_SPECIAL, .zMoveEffect = 0 }, @@ -14997,7 +14069,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_SPECIAL, .zMoveEffect = 0 }, @@ -15012,7 +14083,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = 0 }, From 3b27b602fd520b2fbcdff0b35ee1ac6db4e4b134 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Tue, 28 Feb 2023 00:09:43 -0300 Subject: [PATCH 128/428] End of file --- include/battle_z_move.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/battle_z_move.h b/include/battle_z_move.h index a87109fcb733..44ed434549b2 100644 --- a/include/battle_z_move.h +++ b/include/battle_z_move.h @@ -28,4 +28,4 @@ bool32 IsZMoveUsable(u8 battlerId, u16 moveIndex); void GetUsableZMoves(u8 battlerId, u16 *moves); u16 GetZMovePower(u16 move); -#endif // GUARD_BATTLE_Z_MOVE_H \ No newline at end of file +#endif // GUARD_BATTLE_Z_MOVE_H From cc2778b8bb79c8168b9114a8e9a9409e498efc95 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 28 Feb 2023 10:08:31 +0100 Subject: [PATCH 129/428] some touches --- src/data/pokemon/pokedex_entries.h | 218 ++++++++++++++--------------- 1 file changed, 109 insertions(+), 109 deletions(-) diff --git a/src/data/pokemon/pokedex_entries.h b/src/data/pokemon/pokedex_entries.h index 0b01a836c459..5f63df64e164 100644 --- a/src/data/pokemon/pokedex_entries.h +++ b/src/data/pokemon/pokedex_entries.h @@ -4651,7 +4651,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 102, .description = gTurtwigPokedexText, .pokemonScale = 491, - .pokemonOffset = 12, + .pokemonOffset = 20, .trainerScale = 256, .trainerOffset = 0, }, @@ -4663,7 +4663,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 970, .description = gGrotlePokedexText, .pokemonScale = 320, - .pokemonOffset = 7, + .pokemonOffset = 9, .trainerScale = 256, .trainerOffset = 0, }, @@ -4687,7 +4687,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 62, .description = gChimcharPokedexText, .pokemonScale = 432, - .pokemonOffset = 13, + .pokemonOffset = 15, .trainerScale = 256, .trainerOffset = 0, }, @@ -4699,7 +4699,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 220, .description = gMonfernoPokedexText, .pokemonScale = 338, - .pokemonOffset = 8, + .pokemonOffset = 9, .trainerScale = 256, .trainerOffset = 0, }, @@ -4711,7 +4711,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 550, .description = gInfernapePokedexText, .pokemonScale = 282, - .pokemonOffset = 4, + .pokemonOffset = 3, .trainerScale = 256, .trainerOffset = 0, }, @@ -4723,7 +4723,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 52, .description = gPiplupPokedexText, .pokemonScale = 491, - .pokemonOffset = 12, + .pokemonOffset = 17, .trainerScale = 256, .trainerOffset = 0, }, @@ -4735,7 +4735,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 230, .description = gPrinplupPokedexText, .pokemonScale = 366, - .pokemonOffset = 7, + .pokemonOffset = 10, .trainerScale = 257, .trainerOffset = 0, }, @@ -4795,7 +4795,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 200, .description = gBidoofPokedexText, .pokemonScale = 432, - .pokemonOffset = 13, + .pokemonOffset = 16, .trainerScale = 256, .trainerOffset = 0, }, @@ -4807,7 +4807,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 315, .description = gBibarelPokedexText, .pokemonScale = 305, - .pokemonOffset = 7, + .pokemonOffset = 8, .trainerScale = 257, .trainerOffset = 0, }, @@ -4819,7 +4819,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 22, .description = gKricketotPokedexText, .pokemonScale = 530, - .pokemonOffset = 13, + .pokemonOffset = 17, .trainerScale = 256, .trainerOffset = 0, }, @@ -4831,7 +4831,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 255, .description = gKricketunePokedexText, .pokemonScale = 305, - .pokemonOffset = 7, + .pokemonOffset = 8, .trainerScale = 257, .trainerOffset = 0, }, @@ -4843,7 +4843,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 95, .description = gShinxPokedexText, .pokemonScale = 432, - .pokemonOffset = 13, + .pokemonOffset = 17, .trainerScale = 256, .trainerOffset = 0, }, @@ -4855,7 +4855,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 305, .description = gLuxioPokedexText, .pokemonScale = 338, - .pokemonOffset = 8, + .pokemonOffset = 10, .trainerScale = 256, .trainerOffset = 0, }, @@ -4891,7 +4891,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 145, .description = gRoseradePokedexText, .pokemonScale = 338, - .pokemonOffset = 8, + .pokemonOffset = 10, .trainerScale = 256, .trainerOffset = 0, }, @@ -4903,7 +4903,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 315, .description = gCranidosPokedexText, .pokemonScale = 338, - .pokemonOffset = 8, + .pokemonOffset = 10, .trainerScale = 256, .trainerOffset = 0, }, @@ -4927,7 +4927,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 570, .description = gShieldonPokedexText, .pokemonScale = 432, - .pokemonOffset = 13, + .pokemonOffset = 16, .trainerScale = 256, .trainerOffset = 0, }, @@ -4939,7 +4939,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 1495, .description = gBastiodonPokedexText, .pokemonScale = 272, - .pokemonOffset = 3, + .pokemonOffset = 4, .trainerScale = 256, .trainerOffset = 0, }, @@ -5011,7 +5011,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 39, .description = gPachirisuPokedexText, .pokemonScale = 491, - .pokemonOffset = 12, + .pokemonOffset = 16, .trainerScale = 256, .trainerOffset = 0, }, @@ -5095,7 +5095,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 203, .description = gAmbipomPokedexText, .pokemonScale = 282, - .pokemonOffset = 4, + .pokemonOffset = 3, .trainerScale = 256, .trainerOffset = 0, }, @@ -5131,7 +5131,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 55, .description = gBunearyPokedexText, .pokemonScale = 491, - .pokemonOffset = 12, + .pokemonOffset = 16, .trainerScale = 256, .trainerOffset = 0, }, @@ -5215,7 +5215,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 192, .description = gStunkyPokedexText, .pokemonScale = 491, - .pokemonOffset = 12, + .pokemonOffset = 17, .trainerScale = 256, .trainerOffset = 0, }, @@ -5227,7 +5227,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 380, .description = gSkuntankPokedexText, .pokemonScale = 305, - .pokemonOffset = 7, + .pokemonOffset = 9, .trainerScale = 257, .trainerOffset = 0, }, @@ -5275,7 +5275,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 130, .description = gMimeJrPokedexText, .pokemonScale = 422, - .pokemonOffset = 12, + .pokemonOffset = 14, .trainerScale = 256, .trainerOffset = 0, }, @@ -5287,7 +5287,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 244, .description = gHappinyPokedexText, .pokemonScale = 422, - .pokemonOffset = 12, + .pokemonOffset = 15, .trainerScale = 256, .trainerOffset = 0, }, @@ -5299,7 +5299,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 19, .description = gChatotPokedexText, .pokemonScale = 432, - .pokemonOffset = 13, + .pokemonOffset = 15, .trainerScale = 256, .trainerOffset = 0, }, @@ -5359,7 +5359,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 1050, .description = gMunchlaxPokedexText, .pokemonScale = 422, - .pokemonOffset = 12, + .pokemonOffset = 14, .trainerScale = 256, .trainerOffset = 0, }, @@ -5371,7 +5371,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 202, .description = gRioluPokedexText, .pokemonScale = 365, - .pokemonOffset = 12, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -5395,7 +5395,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 495, .description = gHippopotasPokedexText, .pokemonScale = 366, - .pokemonOffset = 7, + .pokemonOffset = 11, .trainerScale = 257, .trainerOffset = 0, }, @@ -5407,7 +5407,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 3000, .description = gHippowdonPokedexText, .pokemonScale = 261, - .pokemonOffset = 1, + .pokemonOffset = 2, .trainerScale = 334, .trainerOffset = 4, }, @@ -5419,7 +5419,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 120, .description = gSkorupiPokedexText, .pokemonScale = 366, - .pokemonOffset = 7, + .pokemonOffset = 12, .trainerScale = 257, .trainerOffset = 0, }, @@ -5431,7 +5431,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 615, .description = gDrapionPokedexText, .pokemonScale = 272, - .pokemonOffset = 3, + .pokemonOffset = 5, .trainerScale = 256, .trainerOffset = 0, }, @@ -5647,7 +5647,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 255, .description = gLeafeonPokedexText, .pokemonScale = 305, - .pokemonOffset = 7, + .pokemonOffset = 8, .trainerScale = 257, .trainerOffset = 0, }, @@ -5659,7 +5659,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 259, .description = gGlaceonPokedexText, .pokemonScale = 366, - .pokemonOffset = 7, + .pokemonOffset = 10, .trainerScale = 257, .trainerOffset = 0, }, @@ -5683,7 +5683,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 2910, .description = gMamoswinePokedexText, .pokemonScale = 257, - .pokemonOffset = 10, + .pokemonOffset = 6, .trainerScale = 423, .trainerOffset = 8, }, @@ -5816,8 +5816,8 @@ const struct PokedexEntry gPokedexEntries[] = .description = gPalkiaPokedexText, .pokemonScale = 256, .pokemonOffset = 0, - .trainerScale = 411, - .trainerOffset = 5, + .trainerScale = 650, + .trainerOffset = 16, }, [NATIONAL_DEX_HEATRAN] = @@ -5827,7 +5827,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 4300, .description = gHeatranPokedexText, .pokemonScale = 259, - .pokemonOffset = 0, + .pokemonOffset = 1, .trainerScale = 290, .trainerOffset = 1, }, @@ -5839,7 +5839,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 4200, .description = gRegigigasPokedexText, .pokemonScale = 256, - .pokemonOffset = 0, + .pokemonOffset = 2, .trainerScale = 610, .trainerOffset = 17, }, @@ -5924,8 +5924,8 @@ const struct PokedexEntry gPokedexEntries[] = .description = gArceusPokedexText, .pokemonScale = 256, .pokemonOffset = 0, - .trainerScale = 405, - .trainerOffset = 8, + .trainerScale = 495, + .trainerOffset = 10, }, [NATIONAL_DEX_VICTINI] = @@ -5935,7 +5935,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 40, .description = gVictiniPokedexText, .pokemonScale = 491, - .pokemonOffset = 12, + .pokemonOffset = 16, .trainerScale = 256, .trainerOffset = 0, }, @@ -5947,7 +5947,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 81, .description = gSnivyPokedexText, .pokemonScale = 422, - .pokemonOffset = 12, + .pokemonOffset = 15, .trainerScale = 256, .trainerOffset = 0, }, @@ -5959,7 +5959,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 160, .description = gServinePokedexText, .pokemonScale = 366, - .pokemonOffset = 7, + .pokemonOffset = 9, .trainerScale = 257, .trainerOffset = 0, }, @@ -5983,7 +5983,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 99, .description = gTepigPokedexText, .pokemonScale = 432, - .pokemonOffset = 13, + .pokemonOffset = 15, .trainerScale = 256, .trainerOffset = 0, }, @@ -5995,7 +5995,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 555, .description = gPignitePokedexText, .pokemonScale = 305, - .pokemonOffset = 7, + .pokemonOffset = 8, .trainerScale = 257, .trainerOffset = 0, }, @@ -6019,7 +6019,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 59, .description = gOshawottPokedexText, .pokemonScale = 432, - .pokemonOffset = 13, + .pokemonOffset = 15, .trainerScale = 256, .trainerOffset = 0, }, @@ -6031,7 +6031,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 245, .description = gDewottPokedexText, .pokemonScale = 366, - .pokemonOffset = 7, + .pokemonOffset = 9, .trainerScale = 257, .trainerOffset = 0, }, @@ -6055,7 +6055,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 116, .description = gPatratPokedexText, .pokemonScale = 432, - .pokemonOffset = 13, + .pokemonOffset = 14, .trainerScale = 256, .trainerOffset = 0, }, @@ -6079,7 +6079,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 41, .description = gLillipupPokedexText, .pokemonScale = 491, - .pokemonOffset = 12, + .pokemonOffset = 15, .trainerScale = 256, .trainerOffset = 0, }, @@ -6091,7 +6091,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 147, .description = gHerdierPokedexText, .pokemonScale = 338, - .pokemonOffset = 8, + .pokemonOffset = 9, .trainerScale = 256, .trainerOffset = 0, }, @@ -6115,7 +6115,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 101, .description = gPurrloinPokedexText, .pokemonScale = 491, - .pokemonOffset = 12, + .pokemonOffset = 15, .trainerScale = 256, .trainerOffset = 0, }, @@ -6211,7 +6211,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 233, .description = gMunnaPokedexText, .pokemonScale = 422, - .pokemonOffset = 12, + .pokemonOffset = 15, .trainerScale = 256, .trainerOffset = 0, }, @@ -6271,7 +6271,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 298, .description = gBlitzlePokedexText, .pokemonScale = 366, - .pokemonOffset = 7, + .pokemonOffset = 8, .trainerScale = 257, .trainerOffset = 0, }, @@ -6295,7 +6295,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 180, .description = gRoggenrolaPokedexText, .pokemonScale = 491, - .pokemonOffset = 12, + .pokemonOffset = 16, .trainerScale = 256, .trainerOffset = 0, }, @@ -6391,7 +6391,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 125, .description = gTimburrPokedexText, .pokemonScale = 422, - .pokemonOffset = 12, + .pokemonOffset = 14, .trainerScale = 256, .trainerOffset = 0, }, @@ -6403,7 +6403,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 400, .description = gGurdurrPokedexText, .pokemonScale = 282, - .pokemonOffset = 4, + .pokemonOffset = 3, .trainerScale = 256, .trainerOffset = 0, }, @@ -6415,7 +6415,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 870, .description = gConkeldurrPokedexText, .pokemonScale = 265, - .pokemonOffset = 2, + .pokemonOffset = 3, .trainerScale = 262, .trainerOffset = 0, }, @@ -6427,7 +6427,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 45, .description = gTympolePokedexText, .pokemonScale = 432, - .pokemonOffset = 13, + .pokemonOffset = 15, .trainerScale = 256, .trainerOffset = 0, }, @@ -6439,7 +6439,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 170, .description = gPalpitoadPokedexText, .pokemonScale = 366, - .pokemonOffset = 7, + .pokemonOffset = 10, .trainerScale = 257, .trainerOffset = 0, }, @@ -6463,7 +6463,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 555, .description = gThrohPokedexText, .pokemonScale = 272, - .pokemonOffset = 3, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -6475,7 +6475,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 510, .description = gSawkPokedexText, .pokemonScale = 265, - .pokemonOffset = 2, + .pokemonOffset = 4, .trainerScale = 262, .trainerOffset = 0, }, @@ -6487,7 +6487,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 25, .description = gSewaddlePokedexText, .pokemonScale = 530, - .pokemonOffset = 13, + .pokemonOffset = 15, .trainerScale = 256, .trainerOffset = 0, }, @@ -6499,7 +6499,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 73, .description = gSwadloonPokedexText, .pokemonScale = 432, - .pokemonOffset = 13, + .pokemonOffset = 15, .trainerScale = 256, .trainerOffset = 0, }, @@ -6511,7 +6511,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 205, .description = gLeavannyPokedexText, .pokemonScale = 282, - .pokemonOffset = 4, + .pokemonOffset = 3, .trainerScale = 256, .trainerOffset = 0, }, @@ -6523,7 +6523,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 53, .description = gVenipedePokedexText, .pokemonScale = 491, - .pokemonOffset = 12, + .pokemonOffset = 16, .trainerScale = 256, .trainerOffset = 0, }, @@ -6535,7 +6535,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 585, .description = gWhirlipedePokedexText, .pokemonScale = 282, - .pokemonOffset = 4, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -6547,7 +6547,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 2005, .description = gScolipedePokedexText, .pokemonScale = 257, - .pokemonOffset = 10, + .pokemonOffset = 2, .trainerScale = 423, .trainerOffset = 8, }, @@ -6559,7 +6559,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 6, .description = gCottoneePokedexText, .pokemonScale = 530, - .pokemonOffset = 13, + .pokemonOffset = 15, .trainerScale = 256, .trainerOffset = 0, }, @@ -6606,7 +6606,7 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 180, .description = gBasculinPokedexText, - .pokemonScale = 305, + .pokemonScale = 316, .pokemonOffset = 7, .trainerScale = 257, .trainerOffset = 0, @@ -6619,7 +6619,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 152, .description = gSandilePokedexText, .pokemonScale = 365, - .pokemonOffset = 12, + .pokemonOffset = 14, .trainerScale = 256, .trainerOffset = 0, }, @@ -6655,7 +6655,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 375, .description = gDarumakaPokedexText, .pokemonScale = 422, - .pokemonOffset = 12, + .pokemonOffset = 14, .trainerScale = 256, .trainerOffset = 0, }, @@ -6679,7 +6679,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 280, .description = gMaractusPokedexText, .pokemonScale = 305, - .pokemonOffset = 7, + .pokemonOffset = 6, .trainerScale = 257, .trainerOffset = 0, }, @@ -6691,7 +6691,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 145, .description = gDwebblePokedexText, .pokemonScale = 530, - .pokemonOffset = 13, + .pokemonOffset = 15, .trainerScale = 256, .trainerOffset = 0, }, @@ -6715,7 +6715,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 118, .description = gScraggyPokedexText, .pokemonScale = 422, - .pokemonOffset = 12, + .pokemonOffset = 14, .trainerScale = 256, .trainerOffset = 0, }, @@ -6823,7 +6823,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 310, .description = gTrubbishPokedexText, .pokemonScale = 422, - .pokemonOffset = 12, + .pokemonOffset = 14, .trainerScale = 256, .trainerOffset = 0, }, @@ -6895,7 +6895,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 58, .description = gGothitaPokedexText, .pokemonScale = 491, - .pokemonOffset = 12, + .pokemonOffset = 14, .trainerScale = 256, .trainerOffset = 0, }, @@ -6967,7 +6967,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 55, .description = gDucklettPokedexText, .pokemonScale = 432, - .pokemonOffset = 13, + .pokemonOffset = 14, .trainerScale = 256, .trainerOffset = 0, }, @@ -7027,7 +7027,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 195, .description = gDeerlingPokedexText, .pokemonScale = 422, - .pokemonOffset = 12, + .pokemonOffset = 14, .trainerScale = 256, .trainerOffset = 0, }, @@ -7063,7 +7063,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 59, .description = gKarrablastPokedexText, .pokemonScale = 432, - .pokemonOffset = 13, + .pokemonOffset = 15, .trainerScale = 256, .trainerOffset = 0, }, @@ -7099,7 +7099,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 105, .description = gAmoongussPokedexText, .pokemonScale = 422, - .pokemonOffset = 12, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -7159,7 +7159,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 143, .description = gGalvantulaPokedexText, .pokemonScale = 366, - .pokemonOffset = 7, + .pokemonOffset = 10, .trainerScale = 257, .trainerOffset = 0, }, @@ -7171,7 +7171,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 188, .description = gFerroseedPokedexText, .pokemonScale = 422, - .pokemonOffset = 12, + .pokemonOffset = 14, .trainerScale = 256, .trainerOffset = 0, }, @@ -7195,7 +7195,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 210, .description = gKlinkPokedexText, .pokemonScale = 530, - .pokemonOffset = 13, + .pokemonOffset = 15, .trainerScale = 256, .trainerOffset = 0, }, @@ -7255,7 +7255,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 805, .description = gEelektrossPokedexText, .pokemonScale = 256, - .pokemonOffset = 0, + .pokemonOffset = 1, .trainerScale = 365, .trainerOffset = 7, }, @@ -7327,7 +7327,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 180, .description = gAxewPokedexText, .pokemonScale = 422, - .pokemonOffset = 12, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -7363,7 +7363,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 85, .description = gCubchooPokedexText, .pokemonScale = 432, - .pokemonOffset = 13, + .pokemonOffset = 15, .trainerScale = 256, .trainerOffset = 0, }, @@ -7375,8 +7375,8 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 2600, .description = gBearticPokedexText, .pokemonScale = 266, - .pokemonOffset = 8, - .trainerScale = 339, + .pokemonOffset = 3, + .trainerScale = 399, .trainerOffset = 4, }, @@ -7399,7 +7399,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 77, .description = gShelmetPokedexText, .pokemonScale = 491, - .pokemonOffset = 12, + .pokemonOffset = 15, .trainerScale = 256, .trainerOffset = 0, }, @@ -7411,7 +7411,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 253, .description = gAccelgorPokedexText, .pokemonScale = 366, - .pokemonOffset = 7, + .pokemonOffset = 9, .trainerScale = 257, .trainerOffset = 0, }, @@ -7423,7 +7423,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 110, .description = gStunfiskPokedexText, .pokemonScale = 365, - .pokemonOffset = 12, + .pokemonOffset = 14, .trainerScale = 256, .trainerOffset = 0, }, @@ -7435,7 +7435,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 200, .description = gMienfooPokedexText, .pokemonScale = 338, - .pokemonOffset = 8, + .pokemonOffset = 10, .trainerScale = 256, .trainerOffset = 0, }, @@ -7483,8 +7483,8 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 3300, .description = gGolurkPokedexText, .pokemonScale = 275, - .pokemonOffset = 7, - .trainerScale = 256, + .pokemonOffset = 3, + .trainerScale = 300, .trainerOffset = 0, }, @@ -7495,7 +7495,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 102, .description = gPawniardPokedexText, .pokemonScale = 432, - .pokemonOffset = 13, + .pokemonOffset = 15, .trainerScale = 256, .trainerOffset = 0, }, @@ -7591,7 +7591,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 330, .description = gDurantPokedexText, .pokemonScale = 530, - .pokemonOffset = 13, + .pokemonOffset = 19, .trainerScale = 256, .trainerOffset = 0, }, @@ -7603,7 +7603,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 173, .description = gDeinoPokedexText, .pokemonScale = 366, - .pokemonOffset = 7, + .pokemonOffset = 12, .trainerScale = 257, .trainerOffset = 0, }, @@ -7615,7 +7615,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 500, .description = gZweilousPokedexText, .pokemonScale = 265, - .pokemonOffset = 2, + .pokemonOffset = 3, .trainerScale = 262, .trainerOffset = 0, }, @@ -7639,7 +7639,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 288, .description = gLarvestaPokedexText, .pokemonScale = 320, - .pokemonOffset = 7, + .pokemonOffset = 10, .trainerScale = 256, .trainerOffset = 0, }, @@ -7676,7 +7676,7 @@ const struct PokedexEntry gPokedexEntries[] = .description = gTerrakionPokedexText, .pokemonScale = 256, .pokemonOffset = 1, - .trainerScale = 326, + .trainerScale = 336, .trainerOffset = 4, }, @@ -7688,7 +7688,7 @@ const struct PokedexEntry gPokedexEntries[] = .description = gVirizionPokedexText, .pokemonScale = 261, .pokemonOffset = 1, - .trainerScale = 334, + .trainerScale = 344, .trainerOffset = 4, }, @@ -7724,7 +7724,7 @@ const struct PokedexEntry gPokedexEntries[] = .description = gReshiramPokedexText, .pokemonScale = 256, .pokemonOffset = 0, - .trainerScale = 405, + .trainerScale = 445, .trainerOffset = 8, }, @@ -7735,9 +7735,9 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 3450, .description = gZekromPokedexText, .pokemonScale = 275, - .pokemonOffset = 7, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonOffset = 2, + .trainerScale = 412, + .trainerOffset = 10, }, [NATIONAL_DEX_LANDORUS] = @@ -7760,7 +7760,7 @@ const struct PokedexEntry gPokedexEntries[] = .description = gKyuremPokedexText, .pokemonScale = 275, .pokemonOffset = 7, - .trainerScale = 256, + .trainerScale = 356, .trainerOffset = 0, }, @@ -10686,10 +10686,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 200, .weight = 9500, .description = gEternatusPokedexText, - .pokemonScale = 256, + .pokemonScale = 230, .pokemonOffset = 0, - .trainerScale = 1352, - .trainerOffset = 18, + .trainerScale = 4852, + .trainerOffset = 20, }, [NATIONAL_DEX_KUBFU] = From 9d1e31ab39a429b3da831155da70a47cbbb533c4 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 28 Feb 2023 10:12:50 +0100 Subject: [PATCH 130/428] accidentally removed ifs --- src/data/pokemon/pokedex_entries.h | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/data/pokemon/pokedex_entries.h b/src/data/pokemon/pokedex_entries.h index 5f63df64e164..7c1d08e8edac 100644 --- a/src/data/pokemon/pokedex_entries.h +++ b/src/data/pokemon/pokedex_entries.h @@ -4643,7 +4643,7 @@ const struct PokedexEntry gPokedexEntries[] = .trainerScale = 290, .trainerOffset = 2, }, - +#if P_GEN_4_POKEMON == TRUE [NATIONAL_DEX_TURTWIG] = { .categoryName = _("Tiny Leaf"), @@ -5927,7 +5927,9 @@ const struct PokedexEntry gPokedexEntries[] = .trainerScale = 495, .trainerOffset = 10, }, +#endif +#if P_GEN_5_POKEMON == TRUE [NATIONAL_DEX_VICTINI] = { .categoryName = _("Victory"), @@ -7799,7 +7801,9 @@ const struct PokedexEntry gPokedexEntries[] = .trainerScale = 271, .trainerOffset = 0, }, +#endif +#if P_GEN_6_POKEMON == TRUE [NATIONAL_DEX_CHESPIN] = { .categoryName = _("Spiny Nut"), @@ -8663,7 +8667,9 @@ const struct PokedexEntry gPokedexEntries[] = .trainerScale = 290, .trainerOffset = 1, }, +#endif +#if P_GEN_7_POKEMON == TRUE [NATIONAL_DEX_ROWLET] = { .categoryName = _("Grass Quill"), @@ -9719,7 +9725,9 @@ const struct PokedexEntry gPokedexEntries[] = .trainerScale = 423, .trainerOffset = 8, }, +#endif +#if P_GEN_8_POKEMON == TRUE [NATIONAL_DEX_GROOKEY] = { .categoryName = _("Chimp"), From 1fb2560f7b805eede5845b0ad7c8377700508420 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 28 Feb 2023 10:14:16 +0100 Subject: [PATCH 131/428] newline --- src/data/pokemon/pokedex_entries.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/data/pokemon/pokedex_entries.h b/src/data/pokemon/pokedex_entries.h index 7c1d08e8edac..a10b0eab6750 100644 --- a/src/data/pokemon/pokedex_entries.h +++ b/src/data/pokemon/pokedex_entries.h @@ -4643,6 +4643,7 @@ const struct PokedexEntry gPokedexEntries[] = .trainerScale = 290, .trainerOffset = 2, }, + #if P_GEN_4_POKEMON == TRUE [NATIONAL_DEX_TURTWIG] = { From 12db276a717dfafbd795dbc6bd6ff5adc3f020d2 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 28 Feb 2023 10:36:11 +0100 Subject: [PATCH 132/428] fix endif --- src/data/pokemon/pokedex_entries.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/pokemon/pokedex_entries.h b/src/data/pokemon/pokedex_entries.h index a10b0eab6750..56af95f1b711 100644 --- a/src/data/pokemon/pokedex_entries.h +++ b/src/data/pokemon/pokedex_entries.h @@ -10880,5 +10880,5 @@ const struct PokedexEntry gPokedexEntries[] = .trainerScale = 296, .trainerOffset = 1, }, - +#endif }; From fe74dd938b3a6a4547d9f3fbc1fdd6b7396b16c6 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Wed, 1 Mar 2023 04:00:19 -0300 Subject: [PATCH 133/428] Small corrections --- data/battle_scripts_1.s | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 70730d2a904c..2556d60e1600 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -417,7 +417,7 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectVictoryDance @ EFFECT_VICTORY_DANCE .4byte BattleScript_EffectTeatime @ EFFECT_TEATIME .4byte BattleScript_EffectAttackUpUserAlly @ EFFECT_ATTACK_UP_USER_ALLY - .4byte BattleScript_EffectShellTrap @ EFFECT_SHELL_TRAP + .4byte BattleScript_EffectShellTrap @ EFFECT_SHELL_TRAP .4byte BattleScript_EffectCeaselessEdge @ EFFECT_CEASELESS_EDGE .4byte BattleScript_EffectDireClaw @ EFFECT_DIRE_CLAW .4byte BattleScript_EffectStoneAxe @ EFFECT_STONE_AXE @@ -524,7 +524,7 @@ BattleScript_EffectAttackUpUserAlly_AllyAnim: playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG - goto BattleScript_EffectAttackUpUserAlly_Ends + goto BattleScript_EffectAttackUpUserAlly_End BattleScript_EffectTeatime:: attackcanceler From fe735f9700262fe0baf103ba77af83c9cf6c59f7 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Wed, 1 Mar 2023 20:03:27 -0300 Subject: [PATCH 134/428] Applied review suggestions -Merged EFFECT_CEASELESS_EDGE and EFFECT_STONE_AXE into EFFECT_HIT_SET_ENTRY_HAZARD -Updated gDmgHazardsStringIds and relevant battle scripts. Can't say that I like it at all. String tables are stupid imo. -Coupled Barb Barrage's effect in CalcMoveBasePower with Venoshock's --- data/battle_scripts_1.s | 36 ++++--------------------- include/constants/battle_move_effects.h | 7 +++-- include/constants/battle_string_ids.h | 6 +++++ src/battle_ai_main.c | 5 ++-- src/battle_message.c | 5 +++- src/battle_script_commands.c | 6 +++-- src/battle_util.c | 5 +--- src/data/battle_moves.h | 6 +++-- 8 files changed, 29 insertions(+), 47 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 2556d60e1600..425834b7e3c6 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -418,39 +418,13 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectTeatime @ EFFECT_TEATIME .4byte BattleScript_EffectAttackUpUserAlly @ EFFECT_ATTACK_UP_USER_ALLY .4byte BattleScript_EffectShellTrap @ EFFECT_SHELL_TRAP - .4byte BattleScript_EffectCeaselessEdge @ EFFECT_CEASELESS_EDGE + .4byte BattleScript_EffectHitSetEntryHazard @ EFFECT_HIT_SET_ENTRY_HAZARD .4byte BattleScript_EffectDireClaw @ EFFECT_DIRE_CLAW - .4byte BattleScript_EffectStoneAxe @ EFFECT_STONE_AXE .4byte BattleScript_EffectBarbBarrage @ EFFECT_BARB_BARRAGE -BattleScript_EffectStoneAxe:: - attackcanceler - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - attackstring - ppreduce - critcalc - damagecalc - adjustdamage - attackanimation - waitanimation - effectivenesssound - hitanimation BS_TARGET - waitstate - healthbarupdate BS_TARGET - datahpupdate BS_TARGET - critmessage - waitmessage B_WAIT_TIME_LONG - resultmessage - waitmessage B_WAIT_TIME_LONG - tryfaintmon BS_TARGET - setmoveeffect MOVE_EFFECT_STEALTH_ROCK - seteffectprimary - moveendall - end - BattleScript_StealthRockActivates:: setstealthrock BattleScript_MoveEnd - printstring STRINGID_POINTEDSTONESFLOAT + printfromtable gDmgHazardsStringIds waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd @@ -458,7 +432,7 @@ BattleScript_EffectDireClaw:: setmoveeffect MOVE_EFFECT_DIRE_CLAW goto BattleScript_EffectHit -BattleScript_EffectCeaselessEdge:: +BattleScript_EffectHitSetEntryHazard:: attackcanceler accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE attackstring @@ -478,14 +452,14 @@ BattleScript_EffectCeaselessEdge:: resultmessage waitmessage B_WAIT_TIME_LONG tryfaintmon BS_TARGET - setmoveeffect MOVE_EFFECT_SPIKES + argumenttomoveeffect seteffectprimary moveendall end BattleScript_SpikesActivate:: trysetspikes BattleScript_MoveEnd - printstring STRINGID_SPIKESSCATTERED + printfromtable gDmgHazardsStringIds waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h index 0adee76c936d..ad589211ca50 100644 --- a/include/constants/battle_move_effects.h +++ b/include/constants/battle_move_effects.h @@ -399,11 +399,10 @@ #define EFFECT_TEATIME 393 #define EFFECT_ATTACK_UP_USER_ALLY 394 // Howl 8th Gen #define EFFECT_SHELL_TRAP 395 -#define EFFECT_CEASELESS_EDGE 396 +#define EFFECT_HIT_SET_ENTRY_HAZARD 396 #define EFFECT_DIRE_CLAW 397 -#define EFFECT_STONE_AXE 398 -#define EFFECT_BARB_BARRAGE 399 +#define EFFECT_BARB_BARRAGE 398 -#define NUM_BATTLE_MOVE_EFFECTS 400 +#define NUM_BATTLE_MOVE_EFFECTS 399 #endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index f3e702ec4694..01065e047f5a 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -921,4 +921,10 @@ #define B_MSG_Z_STAT_UP 5 #define B_MSG_Z_HP_TRAP 6 +// gDmgHazardsStringIds +#define B_MSG_PKMNHURTBYSPIKES 0 +#define B_MSG_STEALTHROCKDMG 1 +#define B_MSG_POINTEDSTONESFLOAT 2 +#define B_MSG_SPIKESSCATTERED 3 + #endif // GUARD_CONSTANTS_BATTLE_STRING_IDS_H diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index bbc1660fac0a..f61dc49a8240 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -3872,9 +3872,8 @@ static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) break; case EFFECT_SPIKES: - case EFFECT_CEASELESS_EDGE: + case EFFECT_HIT_SET_ENTRY_HAZARD: case EFFECT_STEALTH_ROCK: - case EFFECT_STONE_AXE: case EFFECT_STICKY_WEB: case EFFECT_TOXIC_SPIKES: if (AI_DATA->abilities[battlerDef] == ABILITY_MAGIC_BOUNCE || CountUsablePartyMons(battlerDef) == 0) @@ -4910,7 +4909,7 @@ static s16 AI_SetupFirstTurn(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) case EFFECT_HAIL: case EFFECT_GEOMANCY: case EFFECT_VICTORY_DANCE: - case EFFECT_STONE_AXE: + case EFFECT_HIT_SET_ENTRY_HAZARD: score += 2; break; default: diff --git a/src/battle_message.c b/src/battle_message.c index 29580ded00f5..99f88f53b73a 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -1462,7 +1462,10 @@ const u16 gHealingWishStringIds[] = const u16 gDmgHazardsStringIds[] = { - STRINGID_PKMNHURTBYSPIKES, STRINGID_STEALTHROCKDMG + [B_MSG_PKMNHURTBYSPIKES] = STRINGID_PKMNHURTBYSPIKES, + [B_MSG_STEALTHROCKDMG] = STRINGID_STEALTHROCKDMG, + [B_MSG_POINTEDSTONESFLOAT] = STRINGID_POINTEDSTONESFLOAT, + [B_MSG_SPIKESSCATTERED] = STRINGID_SPIKESSCATTERED }; const u16 gSwitchInAbilityStringIds[] = diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index a445786ced15..0799cf2f34dc 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -3768,6 +3768,7 @@ void SetMoveEffect(bool32 primary, u32 certain) case MOVE_EFFECT_STEALTH_ROCK: if (!(gSideStatuses[GetBattlerSide(gEffectBattler)] & SIDE_STATUS_STEALTH_ROCK)) { + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_POINTEDSTONESFLOAT; BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_StealthRockActivates; } @@ -3775,6 +3776,7 @@ void SetMoveEffect(bool32 primary, u32 certain) case MOVE_EFFECT_SPIKES: if (!(gSideStatuses[GetBattlerSide(gEffectBattler)] & SIDE_STATUS_SPIKES)) { + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SPIKESSCATTERED; BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_SpikesActivate; } @@ -7045,7 +7047,7 @@ static void Cmd_switchineffects(void) gBattleMoveDamage = 1; gSideStatuses[GetBattlerSide(gActiveBattler)] |= SIDE_STATUS_SPIKES_DAMAGED; - SetDmgHazardsBattlescript(gActiveBattler, 0); + SetDmgHazardsBattlescript(gActiveBattler, B_MSG_PKMNHURTBYSPIKES); } else if (!(gSideStatuses[GetBattlerSide(gActiveBattler)] & SIDE_STATUS_STEALTH_ROCK_DAMAGED) && (gSideStatuses[GetBattlerSide(gActiveBattler)] & SIDE_STATUS_STEALTH_ROCK) @@ -7056,7 +7058,7 @@ static void Cmd_switchineffects(void) gBattleMoveDamage = GetStealthHazardDamage(gBattleMoves[MOVE_STEALTH_ROCK].type, gActiveBattler); if (gBattleMoveDamage != 0) - SetDmgHazardsBattlescript(gActiveBattler, 1); + SetDmgHazardsBattlescript(gActiveBattler, B_MSG_STEALTHROCKDMG); } else if (!(gSideStatuses[GetBattlerSide(gActiveBattler)] & SIDE_STATUS_TOXIC_SPIKES_DAMAGED) && (gSideStatuses[GetBattlerSide(gActiveBattler)] & SIDE_STATUS_TOXIC_SPIKES) diff --git a/src/battle_util.c b/src/battle_util.c index a94467085612..9b3a39406ca2 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -8761,10 +8761,6 @@ static u16 CalcMoveBasePower(u16 move, u8 battlerAtk, u8 battlerDef) basePower = CalcBeatUpPower(); #endif break; - case EFFECT_BARB_BARRAGE: - if (gBattleMons[battlerDef].status1 & STATUS1_PSN_ANY) - basePower *= 2; - break; } // Move-specific base power changes @@ -9130,6 +9126,7 @@ static u32 CalcMoveBasePowerAfterModifiers(u16 move, u8 battlerAtk, u8 battlerDe if (gBattleMons[battlerDef].hp <= (gBattleMons[battlerDef].maxHP / 2)) MulModifier(&modifier, UQ_4_12(2.0)); break; + case EFFECT_BARB_BARRAGE: case EFFECT_VENOSHOCK: if (gBattleMons[battlerDef].status1 & STATUS1_PSN_ANY) MulModifier(&modifier, UQ_4_12(2.0)); diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index cc4e322f211c..530dacd13293 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -13323,7 +13323,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_STONE_AXE] = { - .effect = EFFECT_STONE_AXE, + .effect = EFFECT_HIT_SET_ENTRY_HAZARD, .power = 65, .type = TYPE_ROCK, .accuracy = 90, @@ -13335,6 +13335,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_PHYSICAL, .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, + .argument = MOVE_EFFECT_STEALTH_ROCK, }, [MOVE_SPRINGTIDE_STORM] = @@ -13599,7 +13600,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_CEASELESS_EDGE] = { - .effect = EFFECT_CEASELESS_EDGE, + .effect = EFFECT_HIT_SET_ENTRY_HAZARD, .power = 65, .type = TYPE_DARK, .accuracy = 90, @@ -13611,6 +13612,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_PHYSICAL, .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, + .argument = MOVE_EFFECT_SPIKES, }, [MOVE_BLEAKWIND_STORM] = From ff15856820bd30e9820e8fb5a46b093e39f47a0d Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Thu, 2 Mar 2023 06:14:42 -0300 Subject: [PATCH 135/428] Added yet another trainer slide condition Now a trainer NPC can also say something before the first turn of a battle starts for good. --- include/battle.h | 1 + include/battle_message.h | 1 + src/battle_main.c | 3 +++ src/battle_message.c | 10 ++++++++++ 4 files changed, 15 insertions(+) diff --git a/include/battle.h b/include/battle.h index 3c2b6ed19731..f3b788037ef5 100644 --- a/include/battle.h +++ b/include/battle.h @@ -669,6 +669,7 @@ struct BattleStruct u8 trainerSlidePlayerMonUnaffectedMsgState:2; bool8 trainerSlideMegaEvolutionMsgDone:1; bool8 trainerSlideZMoveMsgDone:1; + bool8 trainerSlideBeforeFirstTurnMsgDone:1; }; #define F_DYNAMIC_TYPE_1 (1 << 6) diff --git a/include/battle_message.h b/include/battle_message.h index de60d6d026b0..93bb63022b43 100644 --- a/include/battle_message.h +++ b/include/battle_message.h @@ -236,6 +236,7 @@ enum TRAINER_SLIDE_PLAYER_MON_UNAFFECTED, TRAINER_SLIDE_MEGA_EVOLUTION, TRAINER_SLIDE_Z_MOVE, + TRAINER_SLIDE_BEFORE_FIRST_TURN, }; void BufferStringBattle(u16 stringID); diff --git a/src/battle_main.c b/src/battle_main.c index d144590d5943..a93bef7ac634 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -3776,6 +3776,9 @@ static void TryDoEventsBeforeFirstTurn(void) StopCryAndClearCrySongs(); BattleScriptExecute(BattleScript_ArenaTurnBeginning); } + + if ((i = ShouldDoTrainerSlide(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), TRAINER_SLIDE_BEFORE_FIRST_TURN))) + BattleScriptExecute(i == 1 ? BattleScript_TrainerASlideMsgEnd2 : BattleScript_TrainerBSlideMsgEnd2); } static void HandleEndTurn_ContinueBattle(void) diff --git a/src/battle_message.c b/src/battle_message.c index f321da46c023..ed430e9f8c63 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -3881,6 +3881,7 @@ struct TrainerSlide const u8 *msgPlayerMonUnaffected; const u8 *msgMegaEvolution; const u8 *msgZMove; + const u8 *msgBeforeFirstTurn; }; static const struct TrainerSlide sTrainerSlides[] = @@ -3899,6 +3900,7 @@ static const struct TrainerSlide sTrainerSlides[] = .msgPlayerMonUnaffected = sText_ButNoEffect, .msgMegaEvolution = sText_PowderExplodes, .msgZMove = sText_Electromagnetism, + .msgBeforeFirstTurn = sText_GravityIntensified, }, */ }; @@ -4044,6 +4046,14 @@ u32 ShouldDoTrainerSlide(u32 battlerId, u32 which) return TRUE; } break; + case TRAINER_SLIDE_BEFORE_FIRST_TURN: + if (sTrainerSlides[i].msgBeforeFirstTurn != NULL && !gBattleStruct->trainerSlideBeforeFirstTurnMsgDone) + { + gBattleStruct->trainerSlideBeforeFirstTurnMsgDone = TRUE; + gBattleStruct->trainerSlideMsg = sTrainerSlides[i].msgBeforeFirstTurn; + return TRUE; + } + break; } break; } From 58b408cbbf0760ff34e5136777f42e11014decd2 Mon Sep 17 00:00:00 2001 From: Alex Date: Thu, 2 Mar 2023 17:04:24 +0100 Subject: [PATCH 136/428] some new sprites --- graphics/pokemon/arcanine/hisuian/back.png | Bin 902 -> 923 bytes graphics/pokemon/arcanine/hisuian/front.png | Bin 1137 -> 1138 bytes graphics/pokemon/arcanine/hisuian/normal.pal | 20 +- graphics/pokemon/arcanine/hisuian/shiny.pal | 20 +- graphics/pokemon/avalugg/hisuian/back.png | Bin 528 -> 654 bytes graphics/pokemon/avalugg/hisuian/front.png | Bin 809 -> 947 bytes graphics/pokemon/avalugg/hisuian/normal.pal | 26 +- graphics/pokemon/avalugg/hisuian/shiny.pal | 28 +- graphics/pokemon/braviary/hisuian/back.png | Bin 786 -> 1616 bytes graphics/pokemon/braviary/hisuian/front.png | Bin 978 -> 1831 bytes graphics/pokemon/braviary/hisuian/normal.pal | 266 ++++++++++++++++- graphics/pokemon/braviary/hisuian/shiny.pal | 272 ++++++++++++++++-- graphics/pokemon/goodra/hisuian/back.png | Bin 882 -> 931 bytes graphics/pokemon/goodra/hisuian/front.png | Bin 924 -> 995 bytes graphics/pokemon/goodra/hisuian/normal.pal | 30 +- graphics/pokemon/goodra/hisuian/shiny.pal | 28 +- graphics/pokemon/growlithe/hisuian/back.png | Bin 678 -> 799 bytes graphics/pokemon/growlithe/hisuian/front.png | Bin 701 -> 775 bytes graphics/pokemon/growlithe/hisuian/normal.pal | 28 +- graphics/pokemon/growlithe/hisuian/shiny.pal | 28 +- graphics/pokemon/sliggoo/hisuian/back.png | Bin 606 -> 600 bytes graphics/pokemon/sliggoo/hisuian/front.png | Bin 659 -> 667 bytes graphics/pokemon/sliggoo/hisuian/normal.pal | 30 +- graphics/pokemon/sliggoo/hisuian/shiny.pal | 32 +-- graphics/pokemon/sneasel/hisuian/back.png | Bin 591 -> 744 bytes graphics/pokemon/sneasel/hisuian/front.png | Bin 682 -> 783 bytes graphics/pokemon/sneasel/hisuian/normal.pal | 28 +- graphics/pokemon/sneasel/hisuian/shiny.pal | 28 +- graphics/pokemon/typhlosion/hisuian/back.png | Bin 932 -> 888 bytes graphics/pokemon/typhlosion/hisuian/front.png | Bin 872 -> 995 bytes .../typhlosion/hisuian/front_shiny.png | Bin 0 -> 996 bytes .../pokemon/typhlosion/hisuian/normal.pal | 28 +- graphics/pokemon/typhlosion/hisuian/pal.pal | 19 ++ graphics/pokemon/typhlosion/hisuian/shiny.pal | 28 +- .../pokemon_graphics/back_pic_coordinates.h | 6 +- 35 files changed, 722 insertions(+), 223 deletions(-) mode change 100644 => 100755 graphics/pokemon/arcanine/hisuian/back.png mode change 100644 => 100755 graphics/pokemon/arcanine/hisuian/front.png mode change 100644 => 100755 graphics/pokemon/arcanine/hisuian/normal.pal mode change 100644 => 100755 graphics/pokemon/arcanine/hisuian/shiny.pal mode change 100644 => 100755 graphics/pokemon/avalugg/hisuian/back.png mode change 100644 => 100755 graphics/pokemon/avalugg/hisuian/front.png mode change 100644 => 100755 graphics/pokemon/avalugg/hisuian/normal.pal mode change 100644 => 100755 graphics/pokemon/avalugg/hisuian/shiny.pal mode change 100644 => 100755 graphics/pokemon/braviary/hisuian/back.png mode change 100644 => 100755 graphics/pokemon/braviary/hisuian/front.png mode change 100644 => 100755 graphics/pokemon/braviary/hisuian/normal.pal mode change 100644 => 100755 graphics/pokemon/braviary/hisuian/shiny.pal mode change 100644 => 100755 graphics/pokemon/goodra/hisuian/back.png mode change 100644 => 100755 graphics/pokemon/goodra/hisuian/front.png mode change 100644 => 100755 graphics/pokemon/goodra/hisuian/normal.pal mode change 100644 => 100755 graphics/pokemon/goodra/hisuian/shiny.pal mode change 100644 => 100755 graphics/pokemon/growlithe/hisuian/back.png mode change 100644 => 100755 graphics/pokemon/growlithe/hisuian/front.png mode change 100644 => 100755 graphics/pokemon/growlithe/hisuian/normal.pal mode change 100644 => 100755 graphics/pokemon/growlithe/hisuian/shiny.pal mode change 100644 => 100755 graphics/pokemon/sliggoo/hisuian/back.png mode change 100644 => 100755 graphics/pokemon/sliggoo/hisuian/front.png mode change 100644 => 100755 graphics/pokemon/sliggoo/hisuian/normal.pal mode change 100644 => 100755 graphics/pokemon/sliggoo/hisuian/shiny.pal mode change 100644 => 100755 graphics/pokemon/sneasel/hisuian/back.png mode change 100644 => 100755 graphics/pokemon/sneasel/hisuian/front.png mode change 100644 => 100755 graphics/pokemon/sneasel/hisuian/normal.pal mode change 100644 => 100755 graphics/pokemon/sneasel/hisuian/shiny.pal mode change 100644 => 100755 graphics/pokemon/typhlosion/hisuian/front.png create mode 100755 graphics/pokemon/typhlosion/hisuian/front_shiny.png mode change 100644 => 100755 graphics/pokemon/typhlosion/hisuian/normal.pal create mode 100755 graphics/pokemon/typhlosion/hisuian/pal.pal mode change 100644 => 100755 graphics/pokemon/typhlosion/hisuian/shiny.pal diff --git a/graphics/pokemon/arcanine/hisuian/back.png b/graphics/pokemon/arcanine/hisuian/back.png old mode 100644 new mode 100755 index a6fdca501ad80a47b717c7e55e47b0349eae3292..cf835c6f1d0334647fdd6486341e21299602906e GIT binary patch delta 900 zcmV-~1AF|22b%|wB!35VNliru=K}%{EDMi=#@YY?02g#cSaefwW^{L9a%BKVOhiyl zM<8}(av(DOV1ZP1_K>z@;j|==^1poj5 zFi=cXMVQc_AS@_=jDQdj5Kv@bT0s!!xGCqjDYbq8xU{hN_<#5S000000000000000 z006Pb!AJlA00Cl4M@0Xn2lB-L00O^BL_t(|oVAoaZ`&{sh9#&&M^Pe*tUPnbXhlqc zZYFsMGzLu?bPW&)`5Qs(fNTG8k4NgmZj1~;xlqzQy3dy^iqrMwpD!n?*?k(&p9bKA z7#TQE8Hh2;Gk<}05m4uW_}Ksm`2o;qA>6x3l&~v}g9bpI0bJJ*K+8CL1^|f(*wpU; z#x@gx8}%*#8X1tN;Kaq(KtQtq0Eb^kz}pxifCtAJ=f27Zs> zl^UQi*)Pfde79W#A-uq{F2`{UKl>GM9bTHnuA_qksDD)@RbabLc6=ZQ2M4Pd)g4=8 z%#lioDcz%6C()A$J?2FzUDLL1Rz>gDOu$8SfPPz)VsU}C#|5|}_{X-mf{7?~-$OQA zw1;qyp31D;L^O&gkpXvcK;#rVm&ew~*^V?TCDAfaNtSU@X_@}b04U+J2$G9Rn`Da1 z@I-R#4u9E2g%M~m13c3@*Pj7uQk(nWqbfAkHUTMy!M>mRT-)y4BO0Qq9_PYO`QQxicNqR_Nb!QJt%@U8L+)*d*0=+cbmw*IpRq6W=h!# zdhgH-=u8BLCusX^&M~DWNDhJk`qMBVZ7~B}{kQRv+~9`gKrv)Ic}LBsBTs5HNl}AS z?tKKn@6X{iRTEw8RlH4)fHn}oU!q>1Fka@V5|^xHwh3N!*zU0PcQWU avi<^a>L!N9J^3C000003Emnj885y!g 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 P00000NkvXXu0mjfaw<`S;@&fj(=XcLJ zUr4F6&_e%2Mq2Efggh7f9Vh}!a!jHEz#u3<1FN}|>Gm!G^oBGKFbQ_tt_BRA2M}xv zdO_95RenG3M~GDbheoO)2Z#=_LjXPmRRNrD&mM4y@&bT}P!%u-7(0mj&{!iBB;eif znUzKbu_mDWC4UrPaC?(GQwPfT$8NW=HCi7j;D&AT+sS!UsHP!&r_ zvz17NapGsJ`l-@?fm;Q{r@mBB59{@2#;!S2vTWT^RryWj`_LL{fO&VUZ)=F@hWJGL s0o3Dgn5yR<+c+8%gPb2`p@jOV1ZP1_K>z@;j|==^1poj5 zFi=cXMVQc_P+(}V;P8mBzz`4+XjDMx^!QLbFi0#Qka%ElaDQ;PytwG-=#WGp@VH0- z002i6@mBx<00Cl4M@0Xn2lB-L00P%ZL_t(|ob8jbPuoBg#vRE+#Aed8TcwzgJvlc* zlp#&dQZj%9_;kq{kkz^3WR`ANBof)M%>4mfQZKBSr3wRTZnVVYq5nzWokK~0WJl^7 z{r%o|-+On~w15Bgwkv0>lnrAYHCE{drnzA)A##Rcn45$kWWC;8B&I4t$ZHlkvjS30 z5@7KPv2OO^cycI-jhBby3^1sG_KB!^F-h^D(w7#JKnM}yJnx6}g)Ac+0EM5OZ&q9+ ztq*I8DB}eO{Qz_qPS{Wh_G@LEEo9J%S8>gXim)jWn}0srgw3e;&7DOs%a~Dewg^yY z^Sp1F-tif6{P~pf64dnAEH}%Y005iLr+DwWePBKS(YfsK5d3UHpXSH`U_yeDQS9{s z9$Zo4fZfSI;K#n(uk?$sUyJjAhh5mCH|MZss2!BZp#*xI5k|q`Y0{qsFfdDnBHHQ% z3LvxrgMXjSfblPR#iau5|6+LM^B%_VV0H&yszR)d#dROHTc{dn>-PTQo)0){JDQ%R z0~I0?G0affukQUZ#_??=29Od?*U33in~0_W^b3WLdj^Vr$2UR@dlJYK+s}ab8gzuJ zhJ~Za=dlp?JOIUKu&NmVx`mO|+7|UAAp{x*p?{kMnE;k2SnXNH=LH18~(Thx?od@&KHr61bD^R6h?Hn|n?01t-M8aBFv} zO{by9{CNQ45@?MwUCUE&IQ1HfgzTJsvOUg|?r0I1ul9EyBy@DL6tGhkJ`kEL1^mPd z)AkBLhgGMxvpj>A=ix5H%XLi~4D^-y+ZL<8#dKAKFSk>MF`k=@C=eDZ*>|>_Hn%66qDx9t<;52RO_k zL1DARmQsf(ypIe3rAM0pIcQ;8w5Wr!4{zRY02#vKbi@#vF}myHsp|8n0R=GyrC>N~ z4HzRO72d^X$bY=8Yg`+gt^rNLm>MJO2n^0O7_0!0BL~P3^+khW56$348Thh9>Luoy z`-BwJT<=340nG+j0y%~SNGV&)*0|T#xnb}!7Ah|RoS;ccUY6Dj1PoN!0B{#0Mt(63 z>aoK;0M9Esj$vM0t`;B)rL|C z&o49g0S;A~yHUsEabeWgbOZ+5;C-O-?W7Xj*3vzX0f zm79Exju9BefUUv(OaSWis+gsjT^zB%BEs$?0QQVWKx#Uj;O{^m9 zFU&#$d~{vQ|2@DvuokaH?#kT+7~$ZSuSbBt`oEb2t{BXv`OPH0{d?~f&KOp%p{=d~9)0=YPmf^fP Q01E&B07*qoM6N<$f;@(F3;+NC diff --git a/graphics/pokemon/avalugg/hisuian/normal.pal b/graphics/pokemon/avalugg/hisuian/normal.pal old mode 100644 new mode 100755 index 8055ef92abc8..f64e40434d18 --- a/graphics/pokemon/avalugg/hisuian/normal.pal +++ b/graphics/pokemon/avalugg/hisuian/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -88 168 208 -80 112 144 -184 240 248 -104 80 64 -128 208 240 -248 248 248 -80 40 24 -8 8 8 +80 96 104 +176 224 240 +136 176 192 +16 16 16 +104 84 64 +232 244 248 +80 60 48 +72 44 32 144 120 96 -144 64 32 -200 200 216 -144 152 168 -248 192 0 -88 56 56 +112 112 112 +184 188 184 +232 232 232 +144 68 32 +240 184 72 0 0 0 diff --git a/graphics/pokemon/avalugg/hisuian/shiny.pal b/graphics/pokemon/avalugg/hisuian/shiny.pal old mode 100644 new mode 100755 index 9e547358cc6a..9fd2d0e1809f --- a/graphics/pokemon/avalugg/hisuian/shiny.pal +++ b/graphics/pokemon/avalugg/hisuian/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -112 152 208 -80 96 168 -184 232 248 -200 160 144 -128 192 240 -248 248 248 -112 80 72 -8 8 8 -232 192 176 -248 176 24 -248 176 120 -248 136 88 -248 176 24 -160 128 120 +80 96 104 +176 224 240 +136 176 192 +16 16 16 +104 84 64 +232 244 248 +80 60 48 +72 44 32 +144 120 96 +112 112 112 +184 188 184 +249 131 79 +164 100 16 +240 184 72 0 0 0 diff --git a/graphics/pokemon/braviary/hisuian/back.png b/graphics/pokemon/braviary/hisuian/back.png old mode 100644 new mode 100755 index e314179b2b445519449d874662f40ce28d50c66f..211a5a04693bc752860fd9cdb55050a2fe0df53d GIT binary patch literal 1616 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!*h@TpUD=;AGx3@jo)8F*2MURo zxJHx&=ckpFCl;kLxcj&OjZr8|EmAPnGbwCc@(`$mqolyk9VlZAWHWd*XvzaAmUKs7 zM+SzC{oH>NSs56Z83KGlTxVQZAOHsLPWHN*Y6d0_QQ;ZJTW(gp`uy_WpLM@~C)iKB zu)yu}_3nfKg$GX_fXo{OqaiR{Lg1vU>lC107?Zr+UH&g+|8$grfoX}Si(^Q|oVQbN zZ(6J%;QCU`L{07a|NURC#4ueJmkKZ}e3rXvll&E@@0;>h6wB9M5k6pl>kLP8oZsd9 zGftXqnE3SRCEw|nIZ~K!hsZr~U~!t0yx`_0hsTPCJlU>Y-`?aYkS=k9mB(2v=HB$h z?laWvV*Hc@64)QySpHIm>D#|&Z&?d->@^%Wp8H($R=DDsz+CTC)k{sW)zaA>e8Mi% z>%K7L7`Vv<6>n#lu+wCHq5lT;1HY|Yeycp2b5gJS57)UvmpX3T*)CzQbk1qDHlgHA zXRh+M88fMzH9Z<9w1@q(Mf0=3c5D7arRUDhC|^54ca7Aid2-iU1=xhwx!hn-c)orU z-djF;>G22Qu#;$N(}=zk=q#*rU2+Y$p$dRlI}ztYd`(QApj z64ycx1U1fkar)A`6`T*scI%#=RnT+c;HO}*y4v329lGCtZ%RwJ-FfYP%;#99GtM04 z*SID+e~>btR?jrq!I^R6lIx+PY~+#~QZp?TuFdm@=X#GqQes@pEsPPt1nQ+z2O! zX-b>wFCR7&Vs!BBWRPn7cFE{~FE7u7RLO_ZG-n@L9b2OE?LXd6YmK}fCH|#vTHU9O5<^@+4GFVOWiGAJ9%h1g9tB$wp z`{uWqpOgFKni>8G9ynR&lD#a+Vol&8{wMY946pb(y>(x>)I}-eaIjT8m$&3Pc*0Zc zm|@5v!2^FHoibHerU=dbl)=3_VBW`9?y4Ab-n-iF~h0tQvGlCOn^pu BmSX?_ delta 774 zcmV+h1Nr>W43Y+r7=Hu<00013M{Ml?001yhOjJdf(4ZI?7zhXmKtMPsC?GgEKu}m% zFtFHo=;q`? zXGz(TOy&Z~g57`o^JjKQ$N7K$#UthH@4!qgr2J8@x80dii=^JA&x5m{N@@AEQto_c za$hi*B(f6e`|gkn0h8}qC-Q}U(dXO;AOvGlYkfd8Iy~Uq>OzD{0%`97O?n*>pb9x7 zgS&ORMV)OquYZsM$c3hJw_dN>PCL&_qUn|XB7~YE=6bbWL(lV8(IkHc(kufpdG~rn zdVXJI+yXM5LC$nCW$ibln@!7REP+tXmw0`tC(L_$@{s4hjkzx}79ryWL;&gZGUypt z7-Jraj39g%XxIZt#Ft-Jg@JjbIZ}<`FoZ#x5}>Ev$A6Oz444I8kq(D=t~7N3m)lPl z1_o}InXcm;S%9C*X}nm{7*ain1{>&uu7k&6d{}s33QHthqRnVv^2Y&QXEY}Uk8jjz ztg~g7!X=4%#vPc4R(YH7pPyq)3!P;dHIhW1P1!*Sa4Dy@OBm2yM5tjXpglI_6a@&N zN8c7eS%1M{eVVmYG=i)&KnOd;^19(cbGC%G1{9+81T?IJwXg@k=<39M-nk>JT!=1J zu}{f(gu|R&13~v4%eVkYzuH||CJ2zB2(85p>0M{{uyW%N6rV8ZY)^MOTRKE~JUK;$L*1qn!lSjlxvtPbKz|E75s0(Vb(Ic_fO!Bsxj%p%q8kV% zJomJ+Kv^URE=F|*)Tkfyjz_fy4Ih7?<70@fb+^8w`x7}cIGjv*Cu z)`mAuTdcri!nmqBd*}cE*Q4|%H#A+Cx7T*w*04DzQ-nU0&iZ#;;n{h^v;5B;9OW-e zNaoJH*y@-!VfPvqMPpt`6XPA(Jl6LEy7Z#CS|1|t#XF1b;Z|%;W!|w}%Bc~RVBT;FnDp~8Gq&T`D~gQzNxHcRRinLndwzPf8#F|t49Bml$rrA&37?!}e@oeBBpIaX4 z9QQ6WFI;|nS&;&RZw<%96|?tpl$vQSd?C8|)9Z=yCv!D-PEqs<+7!x^Sa7mML2}~u zT%VKT6ECR>6&IgZuGU(rnffDY2}6AR{tvdv!AFdCOue_cv3lFxThp|!+G{*(-M@9p zXWqTd;>yJu1z}8DJd*d;JfC^}{rl8s`izNB8Taw$sfzqqDf{kY^*>&we)G*|!gwk@ z0{^_2+bsD0``3ML2aT)KZ~gFTXwc7c3fT-%Bi8C5!`S}{$jQ%{w2g(_bh5lLdVUzktKZCuFj}wn=T=%MJ>g2^a+BSFm*jQGiP7%5G z#;RL!()sSc843ytf24|ikMtcVk}Qpl5n7-g5Mj-7R@1|6`iE4PiWArTA51uP;Kb=4 z3WA#@GMP>$>|MQeI;X(aYnvCHwEvZVi|w)L`bqV&+q~)xk~-{#1rD8O*^~SCCI9mL Vc;;F4A7w!0i>Irf%Q~loCIBx7_&xvt delta 968 zcmV;(12_Dq4$=pZ7=Hu<00013M{Ml?001yhOjJdf(4c5oPzVSJ=;+|Mu&6jVKu}m% zm_VqgV7MSCD3F-AP`IF|7#Q&Q_~5`uxPUma8T7>f00Uh~L_t(YiH(%MYui8+$0gCF zn;nTlmsmMRhAc7iJL4`LWL;W1R?Qi*w8h{9&!$Asv4ain(0`gHkiVdTY|W6+{sCP| z|A%BN1&4Sm6x?@rQmh|o>07M3_qp%)y?2rg<3FS7mbT1FHV?M|t;{pDidlCB;Imy4 zz^s{W+O7$I0dyI*YnL2U7Fx>1gpIO*1neAO77%*{*igqOy9D?-pwtEesB3E=1X`>T z`zio#39tc+OMii|?0|qaMiwAc4kRl;wMhbik3(Bsm}x6OwoyremK^|fR|cRpuzL+u zeH$zBD>ndUL#dGf)K-UlKche)>0YiFo|m;|0l7{A8iabsPkTti)d1^)PbH&oWCgVJ zlCe72+QdyAv}7d#2+kyg3_yYMX8?hAlmfn=j3aRf+kYae1L)a02!vFZP1S5Ew0lDI zNpiMBwfb#JhmF~#*NEV1O+e!gzAK(E(oqdRDOBaw8Fsv9eBk07F{c+fWo=S_G z5;0E3oqx%wGr@QRbzLA|m56bE9#6&(re8iEk7)go7MNuO%y^1Gd_I{@M#`Zl_Ob?s z_4wrDWIR1N{yc{6E|&s*BNxu=2xct#yhwZIAz)%K_LtF_YszIu9yyMILq=jr_7XInTz z!(3Pk`GaHR909S309(rt#6kgbKsd%xV*dVj2kyb8 zSVUfgpC#D{vH+>ot`|JIE26>m_GKj1t&NNaF`CQeVn(d~+N^f5_@LCS)nBJvArKjc zOPaOXFe>(_2EM$%C+D$T9!7k#I3@{HT|p(;Tzcf_{VfvKKp(QMh(WN;GLXFO)-{5; qFCzt#JufQfa^c-_I2UE}f5jh|J~46wuumTV0000OV1ZP1_K>z@;j|==^1poj5 zFi=cXMVQc_jcYQvi$~X{WMxnz5D*YpL|DM6$mrDQh-{EVHh&fP{P_6z_&_{ZZex>> zgvfEV>{I{%00Cl4M@0Xn2lB-L00PHJL_t(|oSl?0Z__{+h7YN>l+nf&bK3raHh-W& zMwJ*USHeMTLBbas37C9eQmKs1W$V%;-Ya$NU*Q+P0&AIAkidN3-PyS~P6ocJahvzK z_kHhr4P*Z|bAQgWEt1PQXY-|$6W+dbB;}NJd<@&xFHpHwx|E^?AYG>T4KS9on@s~+ zdyVb@L~Ldh+Cb?@6dM4U&z5qm0l04J9i1?p8VkYP^%R%d30XT#Zc;Sqtda_9U&zV; zAY10lO=V3`J&{T>kK;G^;8O%(JX-+(w<)b3fN+q=Ab)4C0pv|pVG5IIi9o)9$xE33CQTkt7I2jKl3f={#GY z0V^oM$qJlgL4ZT=()v`+(1774M1<>+E;51U&IocO+yr+skMOjokfVV0F8v;dC$y2_>3YN zKyX;;y_18ZGyEI~PPgd2W6wt--`}p|9G$HJdrwz-uj?t|g$?u%HvlhuWf}OE-t){@ z$A55PC!AD3Q0tCoCmdIRS8wyeYpH;QG*jxSD#c2?yx`G+sZ#qy31qA)35{7*PsOS0jrfwDm jy5sp{0|=^@efAHjtf(08z+>wG0000~xsu delta 859 zcmV-h1El<;2l57xB!4haOjJdf(4c@|aM-}mcxX5X2ng`-@W`-OsF2BSV2PpKSFoP=76a!8!uy5ts)2URDZ+7U5@-a=(Ak} lR(!?`25EUt?gaHS@CV-9eAEM%-AMod002ovPDHLkV1nGTi7NmA diff --git a/graphics/pokemon/goodra/hisuian/front.png b/graphics/pokemon/goodra/hisuian/front.png old mode 100644 new mode 100755 index edd5e3c3abd5da6cdb9062eeb198351cab4f4b2b..1b53bfacf35c94104a2deaee0c196deaa464f67c GIT binary patch delta 973 zcmV;;12X)a2jd5jB!35VNliru=K}%`0W$G!ehL5p02g#cSaefwW^{L9a%BKVOhiyl zM<8}(av(DOV1ZP1_K>z@;j|==^1poj5 zFi=cXMVQc_h?Jj%dJfop zNx%aH!-%R<(X2KhdUtaKC=r^?J)*l1ZmBJl2%B@h?gBul1{4t*);ZR>4_j(|7$Lwm z);WieO#=Oy&9@yFA_V>@NPD=U&D{_KJj>>=Sq69)L4U;8SZy509y)Zv1vm0OGG_Zj zKr02wB!1tqf&2NAa2x{Vg4vcIDc68A^>;X=(5!PTM1+0;QQ-B{y zau8pgVt=*`T`Ns65ttI3#c^_(T%RS^vIjsqg9P^knC&OMtDECl1lYskUPo?I04f2Q z?IkxoLi&m5A$OSpGXrEUu2dy}PW~uNBn?Uzv$x$8=cJE4g5iUttZELy46EQbB8Dg; z@JZ1LfIW%`W~e~y_ca0^tYMD@N{vDG+KQ8^zkg4XpZIR40{g2#)ExxZ2%?TGQ_*3r zT>zIO_zmDguqy8m44|z7=#kS;5)5zvJemcJfE@%F5ZU-JFv1W4#--8$5MV%n=MN)f zePl)#f<6X-$MH|l#QOa&v~^s7r4&StFWz7==6=(Nl}#+|1byuA)_?-Eln!KJ?-PO@ zYJcD{!XB8vzZ{<^pt0C~3xB!4haOjJbxu;_qbaM-}mh=_;?2ng`-@W{x>sFtr*!CBZ1R5h-n+9-k);0=vNHOjDD!~|nPDDau8;vV%$Iw1<86%pu)f zAf@@FDMCun+LH?Rj(p}9m48E8gbDrK-hwQ5roWkTM^OXR4dJ+ZOF zLAAPvB8&T2o377DHdQo@cR*0xv#hdrRQIRgm6UcIRo62^P{rlzeh?I=n^0sG)KU&N zhci@P6H;Ffj)UnCGT_hT4gukLQacrZ#1GMR^K^L17=PZ!x*trZl+w`;4SaLM@DZ$k zki-%+4o+*{aUAe-hTPi;@XT7!@k?M4)Q<9sbm);~p(T+@%UxR?_e_Fzn&AjpQcsJM6xsJsyF= znPI#afSKK7?7rLpz7Mb6G7=-CNP{u7(Om}!~_qUCMlT0H3P za|GRPV-;W<^M&5Vm5^WPVxINL#pM`;;*4$tej~uQkx^(N5Jp&lr+q$Tjp1qPM(6Ch zm*@b%0o!C>BXE9mB6d&#?pPFf-1+U!c_?-e0aOr(9T3oFl)vYfxbo#BQ9zRE2wX)V zOnw&NfZj6JAJ`+1D8TP7#Xk@Fwu?hnW(wfl#2$D%2R3!V3BS!0z?+9XP+%q6oR>$D zdp82vxp_Y4OPn6T{5-zSDYY!@)SREk$DUezSm%KPX)SN@PaFTW%#W=oFWJsRGmI;Z b;6KM7{_(H7a9UX000000NkvXXu0mjfgc+s$ diff --git a/graphics/pokemon/goodra/hisuian/normal.pal b/graphics/pokemon/goodra/hisuian/normal.pal old mode 100644 new mode 100755 index 28da385cb049..846d1b0e29b3 --- a/graphics/pokemon/goodra/hisuian/normal.pal +++ b/graphics/pokemon/goodra/hisuian/normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -0 176 232 -128 96 112 -216 192 208 -136 136 136 -8 8 8 -240 240 240 -200 200 200 -168 152 168 -64 64 64 -176 176 176 -96 96 104 -136 104 168 -64 56 88 -168 152 192 -232 208 232 +152 208 160 +136 148 168 +192 204 224 +224 228 240 +80 96 112 16 16 16 +88 68 88 +192 168 200 +232 212 232 +136 108 144 +48 64 72 +248 252 248 +248 248 248 +64 60 88 +104 96 144 +144 132 200 diff --git a/graphics/pokemon/goodra/hisuian/shiny.pal b/graphics/pokemon/goodra/hisuian/shiny.pal old mode 100644 new mode 100755 index 73fd87e714ae..93612e407bd8 --- a/graphics/pokemon/goodra/hisuian/shiny.pal +++ b/graphics/pokemon/goodra/hisuian/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -128 96 112 -216 192 208 -120 104 56 -8 8 8 -240 240 240 -200 176 88 -168 152 168 -56 40 32 -160 136 72 -80 64 40 -136 104 168 -64 56 88 -168 152 192 -232 208 232 +141 107 50 +184 139 71 +215 166 100 +101 80 35 16 16 16 +88 68 88 +192 168 200 +232 212 232 +136 108 144 +68 54 21 +248 252 248 +248 248 248 +64 60 88 +110 99 147 +144 132 200 diff --git a/graphics/pokemon/growlithe/hisuian/back.png b/graphics/pokemon/growlithe/hisuian/back.png old mode 100644 new mode 100755 index 0ed279c6a54ab7fb6befb65c3c4eb30501480927..16dcaefc38463471f85b7b092cf95fbc715f0252 GIT binary patch delta 776 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 LNkvXXu0mjf;#Wb* diff --git a/graphics/pokemon/growlithe/hisuian/normal.pal b/graphics/pokemon/growlithe/hisuian/normal.pal old mode 100644 new mode 100755 index e6d97462b50b..da791d1d648f --- a/graphics/pokemon/growlithe/hisuian/normal.pal +++ b/graphics/pokemon/growlithe/hisuian/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -88 72 88 -200 192 184 +88 72 64 +240 232 224 +208 208 200 +168 156 144 16 16 16 -120 104 128 -104 16 8 -248 80 48 -184 32 32 -160 144 160 -112 96 32 -208 128 112 -184 152 120 -224 200 160 -72 72 72 -0 0 0 -16 0 0 +184 176 168 +184 64 56 +120 48 8 +208 104 64 +112 84 56 +48 60 64 +192 160 120 +248 252 240 +232 208 176 +216 220 208 diff --git a/graphics/pokemon/growlithe/hisuian/shiny.pal b/graphics/pokemon/growlithe/hisuian/shiny.pal old mode 100644 new mode 100755 index 3406fee673c5..e61a65a7a813 --- a/graphics/pokemon/growlithe/hisuian/shiny.pal +++ b/graphics/pokemon/growlithe/hisuian/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -112 104 96 -232 232 232 +88 72 64 +240 232 224 +208 208 200 +168 156 144 16 16 16 -160 152 144 -88 72 40 -232 184 128 -168 136 48 -208 200 192 -112 96 32 -208 128 112 -184 152 120 -224 200 160 -72 72 72 -0 0 0 -16 0 0 +184 176 168 +189 110 57 +120 48 8 +226 163 52 +112 84 56 +48 60 64 +192 160 120 +248 252 240 +232 208 176 +216 220 208 diff --git a/graphics/pokemon/sliggoo/hisuian/back.png b/graphics/pokemon/sliggoo/hisuian/back.png old mode 100644 new mode 100755 index ad4289b1b2c32ac4f7d7c5aabd3d94b49b89608b..276ac9915232a77b9df4f2faaab7e3694d4001ee GIT binary patch delta 575 zcmV-F0>J&=1lROV1ZP1_K>z@;j|==^1poj5 zFi=cXMVQc_Wl3DcqQwvp5bfISka&oOd`GIQV1{8nNK8nznSW=<$jE?Pn5cljSTJA! z000@C+Gqd(00Cl4M@0Xn2lB-L00DeSL_t(|oTZd8Qo}G1MWxXNERzd(ZBhrDf;K@1 zpy2>egqjAol(s8oXb30p_>@R%S#iRyJemCVzx}(GR}$g^Nv(Af^HXC?79m!~DI-0b zErbgI04hRTM}H?0P(*~p$}Fj>3do3AX;lK`|0AlAaHYx;8-l=a?5;?_r=U|(Jv@;| z0pYu|Jtl_-rtp#l)Y1?bE)xf6uE$2Cxeby#x=R374B%=30cOqsa9^q*v#WCx0W!CC zxdoWj#I+p}(ih&h3q}KS^39GusML&`WeIXdS%6o;0Dn6O1PPRI)OHCVFW?2h9t!Ft z1F)`Na9pg_! zu)gmRd#(}SUIzs1#z%pByjM%WBk#*%0Z`^zKqIi_&!HTzHuonELA3qT4PJdqAm77W z{o(7}?>L52wWoyo#kvMHvhC*_ciA8G&q N002ovPDHLkV1iyq@DTt2 delta 581 zcmV-L0=oU!1l|OYB!4haOjJea;IM#TaPaW(*uc=Jn5YN{2zY2XNSIK_uvj=KAXvyy zpomDQn7}|dScqt-Xkch>WtA!b00HSqL_t(YiItQ)PQySDhLa)%g+&rlAyIf;(^y;y40)(W^=vZ#+SI%{izG5}P0sJp@$=m<*~T@jrIDj&F%02an4 zraO)J9vNeWdJFrIzdOlr9{?N7S|j0m2!L9>28{QqphVa0>bPBtngD*S zg9NHw>QFfyV40q@0SdF^WimzvrM{cQ_0l~;5UIymz<*&CUQpeF3*LUke*z(JY}-{b zh6ivGm^h$rB@oYf4siSjfK$ZZ(*v$aV07>Iuo?v5@PvVWS_^O-q9zLT9ysMQrS~Nei1bE=19H;Zjem~JTy&AtcL)JY<%DkS-~<@ T5;0aL00000NkvXXu0mjfB6#}; diff --git a/graphics/pokemon/sliggoo/hisuian/front.png b/graphics/pokemon/sliggoo/hisuian/front.png old mode 100644 new mode 100755 index 81322c48564d49365fa00d0417a205436082451f..3b9edc41cfba4c1c9a185f25ff35616f10150b9f GIT binary patch delta 642 zcmV-|0)73H1)BwsB!35VNliru=K}%`2o&<6K)wI~02g#cSaefwW^{L9a%BKVOhiyl zM<8}(av(DOV1ZP1_K>z@;j|==^1poj5 zFi=cXMVQc_U`SZNpui9i5a`(Gka&ndY+zuVkbr=INK8nmsDG%)$jE?Pn5cljSTJA! z0090QSJeOj00Cl4M@0Xn2lB-L00F;AL_t(|oaK};Zo)7Wh7(mCx-}7W>QX1_Oq&Hp zf{E0fo}dU0(18Q6m<*j`qzzMTJ6mX9x7$&u>dcbdVsapdWHl+jV<2@J+npY3i&s|FWI-m)!_u)b_u7)%i z4ROF6126#qo8#9&@Pq*YG&pkU_!$G#D$v0gokFeCBY&+2`go5jqd%adns3L3y$U8Z zn`Jhse~Zmf5F|hIP0|+KkPX0K6Rob0MzfPG!s!Av6mx5Sf%~+T&4fpaEd8k}|iLi=w6)@CATe`_%v> zthQU3%6pH85{NYbI*=Q=;~@&{US*bkMr8s!0z#3cGoGb9TowjQn_{((0VoY(b_}%D zr==yG+u|vgim2McFAA(J*Pm~uGvWNU=A;qgd cvVXX~0g;pKxGAvaB>(^b07*qoM6N<$f)-c>EC2ui delta 634 zcmV-=0)_pX1(OAkB!4haOjJea;IM#TaPaW(*uc=Jn5YN{2#AP?NSIK_$jCrIKv>97 zu&}VGn7}|dScqt-Xkci?+%swb00JIKL_t(YiS3g=Yui8=#^oV}Y!!;3g)UVHbah^d zEL}upx+cUYWcr6LK5R^;42EtgB)maOJ6Onset~`fqjGc#-GAin1=CLu@)`P`&Tb^- z&d{wxA27yxe)l|g?^%}hUw<$A;by<(KHUsDZlL@%cn^TX(g(MzZvbC?fp=&Cx+=$O zZ)%_bU+>=m`T_#VYR4F0^+E|8gZ>DVy(fXzp0QyK1g3@-^eEi%O$`zVY#X{pfELq? zpl7~O2ljUXdVi)pQpXF|g-*Bu*e3vtW3a5Y0*r&S+TiZ`bk`Aor*D|Z@b+6LplZKc|9U?T|{PwA%8WHvLs0~0G_j*So)VkA@aQ1 zv5i!Lc;g9;FpkB;Q1f=B`5aSf2oUyq&_*U(V_ZzOODJSmFe+J9C0q}nk#5#Pwa zS@@JTmvcU^{=c{Aw^$axZkLPiDPO4x@a5v|?d#&_+OKYb&dK>n(P!*U5$OSXd~y>_ z+2=c;{))*CCYSw)v;k#ADW(sgh(FOvQ>&>uao?{KI-dx})R3l3>#rD+(f(KU8|l{; UJwg0beE0x$i~1n32jB!35VNliru=K}%`6*sS{UC;mk02g#cSaefwW^{L9a%BKVOhiyl zM<8}(av(DOV1ZP1_K>z@;j|==^1poj5 zFi=cXMVQc_9Ehk*YH3JFNDvSZ-rh%f#o5f8C@3IEb(NL4ynnz{OKU(nQ1JBlcU&>+ z$y6+>Pj>(S00Cl4M@0Xn2lB-L00In2L_t(|oVAp(YQr!PhCLYCA><*1AvMj=7bt{s z5DaeeDjf{k;x$7jZ=zZI0;O9#gp#F1W4mVvWNVf{HmfJePAx~VvQ(4dKK=jsPIsPn z>7gzlbrGp}a(@8_7vPXUpk3lh2(fkn69;ghtrEKfZ3niL(pC=%v`Y9F0j(ZGmxL2g z9*N6iGSJ_g+ax5Rftby#CP*Y5&N(m^*wYx%_>(bU8Lq=GE4}!0VF%d$$zcIqf^?e17HD2?F6rBXwOk(RIV@|1NDrrgQK@SE7#_I+XbJzL2K2o;Q0@*R2@@zzJZcVV zd1#6F7&m%_Ksj@MWfBZb;5c)d=z|eg%cC58e}%WrR$o!7wu|<7#<^DYe6=tExqA{^ z3?X~LAc;BYH%vxUN<=tUIe#O7Jv9irfsvGm^xOujr?pyA-0~YhiAc|FQ1-NdbyX+q z#00iURL=cEKZ{;ktgAZ7^#`CA2N^C@$0(s`p-D>Cm4Asjln)Jth3Y94;ztOTNLRKh zIleYXQQ3!{B*uGP2LKrSJ;$+nen_Mu**6>aALkbwa57!WzDnN!0000qbO zv`{F4$au(Lw~nShMhtp|LLMgx1T=T;tMp2C5+}ZvGE_@`?tiCqu6*S~$gPXo0N+OV z$(;>|ZGc4r0JFp>Ns`b4#GVoGeV-a79^%*nP)dy+3NT8zHvvYE(k5XAv`1j`@QUVp znqm@)Xn;zrQ4=5nCrwi>M25HVL8})bxTqNp5CVI}8tOwpD%4_Z2ypUaeEn_pOB-)YXczn6+CE6 ztHVa_wm?h~Km|~+*+|L0q+DE?jG`!10TdiyH{Rs0+8vMUOr0~&PY8< z?->YW?Myu$c8-w5Dg!5aOksO1s26r5eAT1=zYO(E=Q&uOA6cmsCbjZjd3x&bJ35A9 zdq~>6yDwbDvCHR*D38HAQfCO-yHe`N=Q@~;$^2jI4*?_9vv9#{*Z=?k07*qoM6N<$ Ef-F(_%K!iX diff --git a/graphics/pokemon/sneasel/hisuian/front.png b/graphics/pokemon/sneasel/hisuian/front.png old mode 100644 new mode 100755 index 75e3872b15cc67b231ff9c701bcebf9c90cc710c..75f42547e2b1d43d8313f4d26c65fda59fd786d4 GIT binary patch delta 759 zcmV8F~a}=02g#cSaefwW^{L9a%BKVOhiyl zM<8}(av(DOV1ZP1_K>z@;j|==^1poj5 zFi=cXMVQc_z=#N#n8-*-NDvSZz$kF|+<0(IpeP_n*x2y6ynn!WY@k$1fbjJAP&9au zY`9O$HckKl00Cl4M@0Xn2lB-L00J{fL_t(|ob8k`ixWW<#~--G70cE_8W|QLl1?i@ zSi(r|^zQr&eglhx>2{kdf@`&;84|FuQMf`-xiDMAWl=+h2$vK#ffNVZ?ZR;oY%QR86o6S*CDAWfVTWCx_!6ORs{b_d~DFc z{xo1LPHU)fX{ayb^nDn|xKG{OCmTa22@#*ni-$_k+dfa}lK?`VGX-ZZ^wS3G zup1$Sp_oE86MB>K>k*1iJx6NARYy~8-sFdz^XB(pYQO&3yCHI(pg8?piTR*5gg)Ig z$cro09e>{c61Kl#xmT2K7|0E#f_5;3&%^EqM|QGl-~=KNq9ex>-e%pF<4cd;Cg2xU zrQ2;eh*stkJj~b6$~no(e6ZERxmo7tfw*1=j>Wv3$^yvM&I)h6MuQx~3W(e+*LJpX zvYbX$9hKB??yR*0Ad$mB4PW24RYG0r$h3~DsBot^K|6FvT)>IDUAI+s{ZD|s3n;g7 zM-z+k$yNZK)002ovPDHLkV1n|aT;Koz delta 658 zcmV;D0&V?|2C4;+B!4haOjJdf(4cr&uuw2)pm^9gC_tE)pb!uc*x2B>xWIs5prCj- z=)f>oIC${z_;`4D=r}+KFeHHh00K2hL_t(YiPe<9Z`wc<$6d?1xdw?j28kUmQdTM% zP^-`>M~KwH6mv8ZQJ27_dr~oU4!VkeAWHs%WF<&MZ$#PXRDZE$tGZR{^N(~m?%X*y z*qHB!@B8}QJ1pzvE;pAczjA3cOSkiszRuP?x|0EvXpvU*l2eNeXfdBRM5rG`236Os z7%C)y=eh;GP8h3M_U;=u7Z@Ti=KFTDTQKNW-xoqO&O(!Jg{X_cDKi0NBoC1ow@n6b zkL2`dDwxsXSbu)MlG8II;7ECWB@ZtcGt?kb-YunMMj)KYTPfwd9|Lx=xT65AN9 zF2dNsuTwXt5buA>9fGEvq`1sDLdl)!UCVyE5^{ILusX;0+?{N`NLTo?pd4n z=+>6)U(Ntf9KwPJ7Ab8FHW~V`4~zqkf7(^w0*Sc~fPZ@O^ik6a4s(EoMtIhJK76j-z?m)j4I8Eo=A|K#dAELY`PJ?J{;T`B|l&RRO;obQL3mstN zY2A%JIA5@tnu#h^X>yz$Apy6$rUG7xCXIK5z>#BLRl@6~{|5-*&~_&0YKC4Vtve8c zHNwtBjepT~({Gw$!~^o_LIsFheg=5djqPT33u%TiUhAx}1&|;GqI=(TG7uOgfbn=X z$FUt_8v`(i0jvM>hruER$hxHmNK(SGP9C)Y!8RoV(Hk_e&xYFZa-M{_0nuu$o*rvi s2J6P!^!f?VI9X*Sz{UTgzu@&3=G?%g93`~O01E&B07*qoM6N<$f@HBcF#rGn diff --git a/graphics/pokemon/sneasel/hisuian/normal.pal b/graphics/pokemon/sneasel/hisuian/normal.pal old mode 100644 new mode 100755 index 2e28acaaca50..47e254a81b62 --- a/graphics/pokemon/sneasel/hisuian/normal.pal +++ b/graphics/pokemon/sneasel/hisuian/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -120 88 176 -80 48 104 -160 120 216 -56 40 64 -152 152 160 +192 136 8 +152 152 200 +72 72 72 16 16 16 -216 216 224 -184 184 192 -128 96 160 -160 120 56 -232 192 48 -88 56 120 -240 240 248 -120 120 120 -232 56 64 +192 40 112 +248 220 120 +112 76 160 +40 32 72 +216 216 240 +184 188 192 +120 108 160 +84 74 128 +240 244 248 +80 52 120 +144 108 184 diff --git a/graphics/pokemon/sneasel/hisuian/shiny.pal b/graphics/pokemon/sneasel/hisuian/shiny.pal old mode 100644 new mode 100755 index b57227c93023..7d598844947f --- a/graphics/pokemon/sneasel/hisuian/shiny.pal +++ b/graphics/pokemon/sneasel/hisuian/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -248 144 40 -168 72 16 -248 200 80 -32 24 32 -64 88 80 +28 136 168 +77 106 105 +72 72 72 16 16 16 -112 160 120 -88 128 104 -80 72 88 -64 112 224 -136 160 240 -48 40 48 -240 240 248 -120 120 120 -72 176 96 +222 222 71 +121 197 217 +204 155 40 +40 32 72 +117 149 149 +184 188 192 +84 75 107 +64 58 80 +240 244 248 +119 92 49 +235 201 84 diff --git a/graphics/pokemon/typhlosion/hisuian/back.png b/graphics/pokemon/typhlosion/hisuian/back.png index 0b491b9feb63b7b854ecaf0324510e41acd4dcd0..8e808ecf6b0e65d2105f4c86d3c87e1f8904fb6c 100755 GIT binary patch delta 779 zcmV+m1N8i)2lxh%D+vPv3LY15ISdbxG*W+{9LU)`=HN__+BP;pS(qpsNPuXlAwh7Y zi%S3h{}2!m)x~pYP$&QZ00000GNggJ00001VoOIv0Eh)0NB{r=oJmAMRCt`dl)rA< zFc8M2t$-JkO#%U)c+%D>s>Uvs_yQehq(z5jG5i`H0?_E3fpEO#0hBfgTxjl4R0e;t zbSPTCOYf*Z7Gujphu)yU_tW>?eWdJp|G9>Te`f4BzyNB(7d;99!=r%5K^zDCTA~+d zBz)*u0|DFW2mA&&GK8p`;$pTNu!0x2YN#j9;1=5TFOk=dx=30HLC1``#T4a(ZS%`l?pch7| z4^Li0BpIe%0}+Nn!24UZX|sqVttsU=l`=XH5in+T`#^v_6hA~j5|Bxm;2Z)0vwgF% zDGcc;)35>1rUGutGADl|5Xd3|tW79!RkKB6liRx>7)6n^K!S%7EX?oXS80LQ0579V z?f{A$0b`bbaywuOQPKf23($WMrl^9H7y%7eH6@*DEZRN-32l&cfHX`ISQfjK@W%?E z*U=$Cg(7cb#P`Px>qOQ*xQ1w6uRO+Qnu^J$oUen9du;(dZ#3Mmn8Pcr9U^uCpSOTM zsrth6yNJKm9U{X!I`X)q(E&8WJI9tD@Ae0?4xr~O(7F4MH_*@P4$gPGz@yuJcdb7s zy(3`XY%jiKUN3Nk$N2Mp+&?4Tl-0fCFnH#Gz@66*&`r6?9pG^vcyfUCKJerC5~eJR zUSLsuQe9$yO9DECyToE;Ez0tH(E}_^O_<^^V7{8B+%*2N{sObni2gVuErb97002ov JPDHLkV1mlVS7-nL delta 824 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 S7Io490000 Date: Thu, 2 Mar 2023 17:27:45 +0100 Subject: [PATCH 137/428] leftover --- graphics/pokemon/braviary/hisuian/back.png | Bin 1616 -> 835 bytes graphics/pokemon/braviary/hisuian/front.png | Bin 1831 -> 1069 bytes graphics/pokemon/braviary/hisuian/normal.pal | 262 +----------------- graphics/pokemon/braviary/hisuian/shiny.pal | 262 +----------------- .../typhlosion/hisuian/front_shiny.png | Bin 996 -> 0 bytes 5 files changed, 22 insertions(+), 502 deletions(-) delete mode 100755 graphics/pokemon/typhlosion/hisuian/front_shiny.png diff --git a/graphics/pokemon/braviary/hisuian/back.png b/graphics/pokemon/braviary/hisuian/back.png index 211a5a04693bc752860fd9cdb55050a2fe0df53d..ff280fff64c57159cc3350a813897500359c18d2 100755 GIT binary patch delta 754 zcmVDfNl_nmw!MYXgW&hV(6z(2M-#0WGnbH+>>m{QWE+BN*@6S-p~L4 z|2^4GlK&MI$^X&=Y!VL1#m)IP5gY(o0TpkY@-24p=e9&Jf@w?ER*qq!45<5o9)(+kenN+cj|T5{unD zk^ri)-;N&lax)Jl5<*+EChxJq-y)Qt)}-(fy9E+a3UfCXqHYI?h1}iG!oIcwoVs1E z}E`00c&FWjIGv-bvAqQGaw-Pl;D=RnP;;vK?dEg%8tr< zBKvgvGBY`TvFviF1`N#BYI(j&yPg-l0y>6;%Ac*cu_O&?D<1gy|aMpxBVo&2LJx1GQeG+&;}s{|D8^a#hqQY2U-)Nwm_Pu z9-uCQInJWi4oC;U4`D?3VD)&l2SDO&5Yj>j6vpcD3Kd{#0e=D`P*bf6V}&8pbaHKh zNP;S8Yc&8ld3hvLbj@s=*f}1aMCCWSgE|QeBoOK(Xu&CWi*qQ79V(R3yN=?f}b!hHlwG zw{Mz#44{Ci154OT_or+?!;wH(0Q-c75sEVIW0WKkfaOsi^F|TXao-RD0-?j+9c+Nm k@~3N?1qA0B8U5?^0^m%T=g_71_y7O^07*qoM6N<$f@>>BmH+?% literal 1616 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!*h@TpUD=;AGx3@jo)8F*2MURo zxJHx&=ckpFCl;kLxcj&OjZr8|EmAPnGbwCc@(`$mqolyk9VlZAWHWd*XvzaAmUKs7 zM+SzC{oH>NSs56Z83KGlTxVQZAOHsLPWHN*Y6d0_QQ;ZJTW(gp`uy_WpLM@~C)iKB zu)yu}_3nfKg$GX_fXo{OqaiR{Lg1vU>lC107?Zr+UH&g+|8$grfoX}Si(^Q|oVQbN zZ(6J%;QCU`L{07a|NURC#4ueJmkKZ}e3rXvll&E@@0;>h6wB9M5k6pl>kLP8oZsd9 zGftXqnE3SRCEw|nIZ~K!hsZr~U~!t0yx`_0hsTPCJlU>Y-`?aYkS=k9mB(2v=HB$h z?laWvV*Hc@64)QySpHIm>D#|&Z&?d->@^%Wp8H($R=DDsz+CTC)k{sW)zaA>e8Mi% z>%K7L7`Vv<6>n#lu+wCHq5lT;1HY|Yeycp2b5gJS57)UvmpX3T*)CzQbk1qDHlgHA zXRh+M88fMzH9Z<9w1@q(Mf0=3c5D7arRUDhC|^54ca7Aid2-iU1=xhwx!hn-c)orU z-djF;>G22Qu#;$N(}=zk=q#*rU2+Y$p$dRlI}ztYd`(QApj z64ycx1U1fkar)A`6`T*scI%#=RnT+c;HO}*y4v329lGCtZ%RwJ-FfYP%;#99GtM04 z*SID+e~>btR?jrq!I^R6lIx+PY~+#~QZp?TuFdm@=X#GqQes@pEsPPt1nQ+z2O! zX-b>wFCR7&Vs!BBWRPn7cFE{~FE7u7RLO_ZG-n@L9b2OE?LXd6YmK}fCH|#vTHU9O5<^@+4GFVOWiGAJ9%h1g9tB$wp z`{uWqpOgFKni>8G9ynR&lD#a+Vol&8{wMY946pb(y>(x>)I}-eaIjT8m$&3Pc*0Zc zm|@5v!2^FHoibHerU=dbl)=3_VBW`9?y4Ab-n-iF~h0tQvGlCOn^pu BmSX?_ diff --git a/graphics/pokemon/braviary/hisuian/front.png b/graphics/pokemon/braviary/hisuian/front.png index 866ffcb069e701318a22686cdaf2146916e4c319..299793975e549661d34ac356df2ead3ebaa1217f 100755 GIT binary patch delta 990 zcmV<410npU4y_1~7#sux00013M{Ml?000McNliru=K}%|5i7}mO5u?-Nq+z^P)t-s zn9!iOoDfjFpkPoS5D*ZMJfNU3FzD1+keImS=HRGgxG*$8Xk1XZu&7v6XaE2J)RP4k z00001VoOIv0Eh)0NB{r>QAtEWRCt_)ls{|RKp4gkq6{Tkj0GLKWeVwJQraO9&gnrY zjx-buwV~bGy)=-$Q$N6ExPQc2N(JShP^gxoR%GxZIB(a%L^su&s6IpAJN=K{^u>;S zd477HyZ5~Wq5sz$|4X?pJ`#%Ujf_poS4o8C5{HZaI!6t9j2h-tzqfSs-Z3G*3a)L5M|mKu{zfGKRg`hObGCY=Cf4CV${ zYDTBD0<=EEf||urGc!gPxD((D!3qGX3nZ*6+yFkCDcm+t%`VGQU4WIxte1Wbv=T&X zt=0iyPEoGGKwY;1Ux`iz0I9sS1y;6S6bXxUplYrrR7zEfyL)WrC)hkqX0EygkY+l9 zCM+p{I$_@Eww?IUN`F_#0$3VgcHIomxcVuTMS>r72~nB4vYc*Q5_RjvOuNz)<_RnR zCeEWMB7{_pn;D&{#Kq<^#yQlgK0tAOOkWfhpo2l4g}AlD>f~Yp7ua7KgIY()ucmXZ z4v4x2D7lDeHZmu$|w+yC}X@9`jbR6hw%$9L1+JYAOdEC-9F!4F(VBwFha-)Z*LNpP4I=SGx`+TBEc9q9ke`fAu2|VZ1V7klq z1Epjh=c~*M30zNTtte)-z0di_51;q>OG$KtNO&rhGDtbi7o6|z?eTG{JPp8<7Oo*w zInC#g@IDy(%72x5ivautU;%enCB|a=(`z2QV*Wys81yiTen3VF`ka{KZV%rC$MGK~ zNu+B8Z@mf7t8Sb;o*c)^nM9+gtoZ_n`k%qp`ThRGl}ib-Dq@}jARFM^8DL8y%c>$= z={A4L=*junz(EM3m_*^o03o*E7_tV2j)o78KnsZh5Px#hMP;#dW=?Z(-Ul&6RsmQl zb*l_gVDEaK29THQpNL4SJ#=(3`qp=%2qP=YMq&M2UDnDYy(3U8au|D^M@!(TbI^ML zyFYpBbT3p{UO4Ox;4mkLLvoa7>j1QI*n5O_GLK~a{OdZP&oLO`os}2N(a%9hH5tdd_CO<_7p~VC&m|fTGWLMRX1R0*y?sC?7u}&;S4c M07*qoM6N<$g7DzPYXATM literal 1831 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!*h@TpUD=;AGx3`8rRVx91BJv( zTq8w`x7}cIGjv*Cu z)`mAuTdcri!nmqBd*}cE*Q4|%H#A+Cx7T*w*04DzQ-nU0&iZ#;;n{h^v;5B;9OW-e zNaoJH*y@-!VfPvqMPpt`6XPA(Jl6LEy7Z#CS|1|t#XF1b;Z|%;W!|w}%Bc~RVBT;FnDp~8Gq&T`D~gQzNxHcRRinLndwzPf8#F|t49Bml$rrA&37?!}e@oeBBpIaX4 z9QQ6WFI;|nS&;&RZw<%96|?tpl$vQSd?C8|)9Z=yCv!D-PEqs<+7!x^Sa7mML2}~u zT%VKT6ECR>6&IgZuGU(rnffDY2}6AR{tvdv!AFdCOue_cv3lFxThp|!+G{*(-M@9p zXWqTd;>yJu1z}8DJd*d;JfC^}{rl8s`izNB8Taw$sfzqqDf{kY^*>&we)G*|!gwk@ z0{^_2+bsD0``3ML2aT)KZ~gFTXwc7c3fT-%Bi8C5!`S}{$jQ%{w2g(_bh5lLdVUzktKZCuFj}wn=T=%MJ>g2^a+BSFm*jQGiP7%5G z#;RL!()sSc843ytf24|ikMtcVk}Qpl5n7-g5Mj-7R@1|6`iE4PiWArTA51uP;Kb=4 z3WA#@GMP>$>|MQeI;X(aYnvCHwEvZVi|w)L`bqV&+q~)xk~-{#1rD8O*^~SCCI9mL Vc;;F4A7w!0i>Irf%Q~loCIBx7_&xvt diff --git a/graphics/pokemon/braviary/hisuian/normal.pal b/graphics/pokemon/braviary/hisuian/normal.pal index 39a94fb7ffc0..eb38d4ca3e63 100755 --- a/graphics/pokemon/braviary/hisuian/normal.pal +++ b/graphics/pokemon/braviary/hisuian/normal.pal @@ -1,259 +1,19 @@ JASC-PAL 0100 -256 +16 152 208 160 -104 92 80 +184 156 16 +80 188 160 +96 80 32 16 16 16 -232 232 224 -184 176 168 -48 52 64 -88 84 104 144 60 160 -168 100 184 -80 188 160 -144 152 184 160 48 48 -184 156 16 232 212 88 -96 80 32 -224 228 224 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 +144 152 184 +228 230 224 +168 100 184 +48 52 64 +104 92 80 +184 176 168 +88 84 104 0 0 0 diff --git a/graphics/pokemon/braviary/hisuian/shiny.pal b/graphics/pokemon/braviary/hisuian/shiny.pal index 84e987d34157..99c13ba68dea 100755 --- a/graphics/pokemon/braviary/hisuian/shiny.pal +++ b/graphics/pokemon/braviary/hisuian/shiny.pal @@ -1,259 +1,19 @@ JASC-PAL 0100 -256 +16 152 208 160 +208 160 70 +233 254 252 +103 74 27 16 16 16 -16 16 16 -71 66 63 -45 41 38 -48 52 64 -90 87 104 51 180 217 -122 234 243 -233 254 252 -174 251 251 96 63 150 -208 160 70 243 215 139 -96 80 32 -224 228 224 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 +174 251 251 +71 66 63 +122 234 243 +48 52 64 +30 28 26 +45 41 38 +88 84 104 0 0 0 diff --git a/graphics/pokemon/typhlosion/hisuian/front_shiny.png b/graphics/pokemon/typhlosion/hisuian/front_shiny.png deleted file mode 100755 index e5cf7e835d00b49d6090902be7ddc23caf0b279b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 996 zcmVF< z2@@mcWjL+?000+sMObuGZ)S9NVRB^vM@&RePDdbiWpW@hE;Mn4q~QPn00?w&PDe*f zL^A*Y002sWDIWj;00d`2O+f$vv5yP=^Bm&4 zj)}0Qfw5B|o=?h^nLjIIfl|8f`(@ut0YhEm6y<0T1Q&JRhY48ZpiJ1R<_>>c z4TPXN1L&FXX^AXXKp^xQUA8Dg4{XZ7IlWxylop`{QMNn)pvC$7CE#LgssO#a=A6#~ z;ZY4aIOp_G04GA<0}HOwAQv3n?&mp=D4zjf!IaNrj`Ggu5$BIb5q(Ubm^dzS3`fwu z0~a8-=@Pyt$Aq>x@BV4=v{Il#%C2m4tJ4L!^8xg>Er4B2)IH*96320W)aGr6(l-^m zx_;{87~YJj^|I~SbdT7_`v29d7tS{yW?)KBH9A7Y;_jYjha!ufPA?RF&&DVGX#-Fg zzuO@;9r3PsY~)8Wz~O1ExyUOzzsmpx6-Zn3HUm-A%(M_DqwwS0>u7KZL|q2P zJUzHK@vOs80IXg=T>{%e4xf7{h9*gp2%yoBkN3UMQ*;V?@*RM~V>zw+xjrX;#9vrL z-lHE4ZV|%Q_T?}8>)p;9 S7Io490000 Date: Thu, 2 Mar 2023 18:04:12 +0100 Subject: [PATCH 138/428] small braviary sprite fix --- graphics/pokemon/braviary/hisuian/back.png | Bin 835 -> 11612 bytes graphics/pokemon/braviary/hisuian/front.png | Bin 1069 -> 15390 bytes graphics/pokemon/braviary/hisuian/icon.png | Bin graphics/pokemon/braviary/hisuian/normal.pal | 2 +- graphics/pokemon/braviary/hisuian/shiny.pal | 2 +- 5 files changed, 2 insertions(+), 2 deletions(-) mode change 100644 => 100755 graphics/pokemon/braviary/hisuian/icon.png diff --git a/graphics/pokemon/braviary/hisuian/back.png b/graphics/pokemon/braviary/hisuian/back.png index ff280fff64c57159cc3350a813897500359c18d2..947bc46aeb3bf10ab616a52ddc1f17892e0fb01f 100755 GIT binary patch literal 11612 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 Date: Sun, 5 Mar 2023 17:17:39 -0300 Subject: [PATCH 139/428] Review changes --- charmap.txt | 2 +- data/maps/Route111/scripts.inc | 2 +- include/constants/songs.h | 4 ++-- src/overworld.c | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/charmap.txt b/charmap.txt index 8c886bdf0c10..477448c9c5fe 100644 --- a/charmap.txt +++ b/charmap.txt @@ -795,7 +795,7 @@ MUS_LITTLEROOT = 95 01 MUS_MT_CHIMNEY = 96 01 MUS_ENCOUNTER_FEMALE = 97 01 MUS_LILYCOVE = 98 01 -MUS_ROUTE111_DESERT = 99 01 +MUS_DESERT = 99 01 MUS_HELP = 9A 01 MUS_UNDERWATER = 9B 01 MUS_VICTORY_TRAINER = 9C 01 diff --git a/data/maps/Route111/scripts.inc b/data/maps/Route111/scripts.inc index 44372da37d91..7335d0e1cea6 100644 --- a/data/maps/Route111/scripts.inc +++ b/data/maps/Route111/scripts.inc @@ -260,7 +260,7 @@ Route111_EventScript_SunTrigger:: Route111_EventScript_SandstormTrigger:: setweather WEATHER_SANDSTORM - fadenewbgm MUS_ROUTE111_DESERT + fadenewbgm MUS_DESERT doweather end diff --git a/include/constants/songs.h b/include/constants/songs.h index ffa5c3df0b34..ab6ddd62bc8c 100644 --- a/include/constants/songs.h +++ b/include/constants/songs.h @@ -337,7 +337,7 @@ #define MUS_MT_CHIMNEY 406 // MUS_TOZAN // Also used in Desert Underpass, Mirage Tower, Seafloor Cavern and Sky Pillar. #define MUS_ENCOUNTER_FEMALE 407 // MUS_GIRLEYE #define MUS_LILYCOVE 408 // MUS_MINAMO // Also used in Pacifidlog Town and the Diving Treasure Hunter's house. -#define MUS_ROUTE111_DESERT 409 // MUS_ASHROAD +#define MUS_DESERT 409 // MUS_ASHROAD #define MUS_HELP 410 // MUS_EVENT0 #define MUS_UNDERWATER 411 // MUS_DEEPDEEP #define MUS_VICTORY_TRAINER 412 // MUS_KACHI1 @@ -372,7 +372,7 @@ #define MUS_ENCOUNTER_MAGMA 441 // MUS_MGM0 #define MUS_INTRO_BATTLE 442 // MUS_T_BATTLE #define MUS_ABNORMAL_WEATHER 443 // MUS_OOAME // Replaces MUS_WEATHER_KYOGRE from R/S. -#define MUS_WEATHER_GROUDON 444 // MUS_HIDERI // Unused from R/S. +#define MUS_WEATHER_GROUDON 444 // MUS_HIDERI // Unused, from R/S. #define MUS_SOOTOPOLIS 445 // MUS_RUNECITY #define MUS_CONTEST_RESULTS 446 // MUS_CON_K #define MUS_HALL_OF_FAME_ROOM 447 // MUS_EIKOU_R diff --git a/src/overworld.c b/src/overworld.c index c9258e05e8f4..4f7cccdffb65 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -1104,7 +1104,7 @@ u16 GetCurrLocationDefaultMusic(void) if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(ROUTE111) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROUTE111) && GetSavedWeather() == WEATHER_SANDSTORM) - return MUS_ROUTE111_DESERT; + return MUS_DESERT; music = GetLocationMusic(&gSaveBlock1Ptr->location); if (music != MUS_ROUTE118) From b3ffc9d1c4fc54aa747661328aaaedc9846c6617 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada D'Ottone Date: Mon, 6 Mar 2023 05:29:34 -0300 Subject: [PATCH 140/428] Set link tutorial as complete when using Cheat Start (#2802) --- data/scripts/debug.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/scripts/debug.inc b/data/scripts/debug.inc index 9463164ac259..191fe69327a5 100644 --- a/data/scripts/debug.inc +++ b/data/scripts/debug.inc @@ -21,7 +21,7 @@ Debug_CheatStart:: setflag FLAG_SYS_POKEDEX_GET special SetUnlockedPokedexFlags setflag FLAG_RECEIVED_POKEDEX_FROM_BIRCH - setvar VAR_CABLE_CLUB_TUTORIAL_STATE, 1 + setvar VAR_CABLE_CLUB_TUTORIAL_STATE, 2 setflag FLAG_SYS_NATIONAL_DEX special EnableNationalPokedex setflag FLAG_RECEIVED_RUNNING_SHOES From d3d99c3f8c2b9e1a1dd45e8fcf6e4e56d8a3a65c Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 6 Mar 2023 15:22:28 +0100 Subject: [PATCH 141/428] alpha omega indicator sprites use the same palete --- graphics/battle_interface/alpha_indicator.png | Bin 266 -> 211 bytes graphics/battle_interface/omega_indicator.png | Bin 271 -> 209 bytes include/battle_interface.h | 3 +-- src/battle_interface.c | 11 +++++------ 4 files changed, 6 insertions(+), 8 deletions(-) diff --git a/graphics/battle_interface/alpha_indicator.png b/graphics/battle_interface/alpha_indicator.png index 0e302576b6aced8d385e93eee3a2919ea2e4d1c3..84cfee2cf1364598c2acd71ee78d8777d7389959 100644 GIT binary patch delta 165 zcmeBTy39C1LYIS?fq_9omp>RtF%}28J29*~C-V}>F$nMpasAK0@W3nU&8wVQx&~hs zwM=YN%-vV8?hjDf+|$J|L}KdMo}Ii51{}|4}nTJN(%hkfilKGHiK7#raX{hNq6*h zWMJ6X&;2Kn705RT@CkAK&%mHie?!1~&W;BkI(9q&3gZVW>MkqO6D zAV<&B#WAE}PIAHmF@cb#3q8l0_!8PSb#D}yk*JZ;aV$X0q-{l-QCO2kT0j#A14Dl= V^X1G4%?}`pJYD@<);T3K0RZ%8M?wGq diff --git a/graphics/battle_interface/omega_indicator.png b/graphics/battle_interface/omega_indicator.png index c56d51c151e6c578e4a8935a7cf6bd4efaceb009..8e21007a800ba1102177d9205420dc248aa5fd4f 100644 GIT binary patch literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~g8-ip*Z&L* z54^J8yvmuSYw%@Ji$eVk0q;3G9(?H7@c^g<6YMKk_Xj9y>gnPbA~E&snVo_R1{};u#y~cMSA(WJkYY)9^mSxl*x1kgCy{lc zp7_K-(TNFcKok?~*I58mz?kIi?(%;r`=_Hoj*H^Swn`zfJ?SGkCiCxvX Date: Mon, 6 Mar 2023 20:35:08 +0100 Subject: [PATCH 142/428] Add tests for Defog and fix Defog battle strings (#2737) * start working on defog tests * defog tests + improve terrain end battlescripts * newline --- data/battle_scripts_1.s | 52 ++-- include/battle_scripts.h | 10 +- include/config/battle.h | 3 +- include/constants/battle_string_ids.h | 17 +- src/battle_message.c | 15 +- src/battle_script_commands.c | 70 +++-- src/battle_util.c | 53 ++-- test/move_effect_defog.c | 375 ++++++++++++++++++++++++++ 8 files changed, 500 insertions(+), 95 deletions(-) create mode 100644 test/move_effect_defog.c diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 9ea346cc63b9..0a3a4f264c54 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -1265,7 +1265,7 @@ BattleScript_EffectRemoveTerrain: resultmessage waitmessage B_WAIT_TIME_LONG removeterrain - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 4, BattleScript_MoveEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_TERRAINENDS_COUNT, BattleScript_MoveEnd printfromtable gTerrainEndingStringIds waitmessage B_WAIT_TIME_LONG playanimation BS_ATTACKER, B_ANIM_RESTORE_BG @@ -6899,29 +6899,17 @@ BattleScript_MagicRoomEnds:: printstring STRINGID_MAGICROOMENDS waitmessage B_WAIT_TIME_LONG end2 - -BattleScript_ElectricTerrainEnds:: - printstring STRINGID_ELECTRICTERRAINENDS - waitmessage B_WAIT_TIME_LONG - playanimation BS_ATTACKER, B_ANIM_RESTORE_BG - end2 - -BattleScript_MistyTerrainEnds:: - printstring STRINGID_MISTYTERRAINENDS - waitmessage B_WAIT_TIME_LONG - playanimation BS_ATTACKER, B_ANIM_RESTORE_BG - end2 - -BattleScript_GrassyTerrainEnds:: - printstring STRINGID_GRASSYTERRAINENDS - waitmessage B_WAIT_TIME_LONG - playanimation BS_ATTACKER, B_ANIM_RESTORE_BG - end2 - -BattleScript_PsychicTerrainEnds:: - printstring STRINGID_PSYCHICTERRAINENDS + +BattleScript_GrassyTerrainEnds: + setbyte cMULTISTRING_CHOOSER, B_MSG_TERRAINENDS_GRASS +BattleScript_TerrainEnds_Ret:: + printfromtable gTerrainEndingStringIds waitmessage B_WAIT_TIME_LONG playanimation BS_ATTACKER, B_ANIM_RESTORE_BG + return + +BattleScript_TerrainEnds:: + call BattleScript_TerrainEnds_Ret end2 BattleScript_MudSportEnds:: @@ -7465,6 +7453,26 @@ BattleScript_StealthRockFree:: printstring STRINGID_PKMNBLEWAWAYSTEALTHROCK waitmessage B_WAIT_TIME_LONG return + +BattleScript_SpikesDefog:: + printstring STRINGID_SPIKESDISAPPEAREDFROMTEAM + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_ToxicSpikesDefog:: + printstring STRINGID_TOXICSPIKESDISAPPEAREDFROMTEAM + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_StickyWebDefog:: + printstring STRINGID_STICKYWEBDISAPPEAREDFROMTEAM + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_StealthRockDefog:: + printstring STRINGID_STEALTHROCKDISAPPEAREDFROMTEAM + waitmessage B_WAIT_TIME_LONG + return BattleScript_MonTookFutureAttack:: printstring STRINGID_PKMNTOOKATTACK diff --git a/include/battle_scripts.h b/include/battle_scripts.h index f2821af05922..6ffaa327892b 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -246,10 +246,8 @@ extern const u8 BattleScript_TailwindEnds[]; extern const u8 BattleScript_TrickRoomEnds[]; extern const u8 BattleScript_WonderRoomEnds[]; extern const u8 BattleScript_MagicRoomEnds[]; -extern const u8 BattleScript_ElectricTerrainEnds[]; -extern const u8 BattleScript_MistyTerrainEnds[]; -extern const u8 BattleScript_GrassyTerrainEnds[]; -extern const u8 BattleScript_PsychicTerrainEnds[]; +extern const u8 BattleScript_TerrainEnds[]; +extern const u8 BattleScript_TerrainEnds_Ret[]; extern const u8 BattleScript_MudSportEnds[]; extern const u8 BattleScript_WaterSportEnds[]; extern const u8 BattleScript_SturdiedMsg[]; @@ -287,6 +285,10 @@ extern const u8 BattleScript_SelectingNotAllowedMoveHealBlockInPalace[]; extern const u8 BattleScript_ToxicSpikesFree[]; extern const u8 BattleScript_StickyWebFree[]; extern const u8 BattleScript_StealthRockFree[]; +extern const u8 BattleScript_SpikesDefog[]; +extern const u8 BattleScript_ToxicSpikesDefog[]; +extern const u8 BattleScript_StickyWebDefog[]; +extern const u8 BattleScript_StealthRockDefog[]; extern const u8 BattleScript_MegaEvolution[]; extern const u8 BattleScript_WishMegaEvolution[]; extern const u8 BattleScript_MoveEffectRecoilWithStatus[]; diff --git a/include/config/battle.h b/include/config/battle.h index 8fdf596cc36e..4a3d6382fbcd 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -96,7 +96,8 @@ #define B_DARK_VOID_FAIL GEN_LATEST // In Gen7+, only Darkrai can use Dark Void. #define B_BURN_HIT_THAW GEN_LATEST // In Gen6+, damaging moves with a chance of burn will thaw the target, regardless if they're fire-type moves or not. #define B_HEALING_WISH_SWITCH GEN_LATEST // In Gen5+, the mon receiving Healing Wish is sent out at the end of the turn. - // Additionally, in gen8+ the Healing Wish's effect will be stored until the user switches into a statused or hurt mon + // Additionally, in gen8+ the Healing Wish's effect will be stored until the user switches into a statused or hurt mon. +#define B_DEFOG_CLEARS_TERRAIN GEN_LATEST // In Gen8+, Defog also clears active Terrain. #define B_STOCKPILE_RAISES_DEFS GEN_LATEST // In Gen4+, Stockpile also raises Defense and Sp.Defense stats. Once Spit Up / Swallow is used, these stat changes are lost. // Ability settings diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index 1bd82023ed9c..43e4ea574e44 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -641,10 +641,14 @@ #define STRINGID_PKMNSABILITYPREVENTSABILITY 639 #define STRINGID_PREPARESHELLTRAP 640 #define STRINGID_SHELLTRAPDIDNTWORK 641 -#define STRINGID_COULDNTFULLYPROTECT 642 -#define STRINGID_STOCKPILEDEFFECTWOREOFF 643 +#define STRINGID_SPIKESDISAPPEAREDFROMTEAM 642 +#define STRINGID_TOXICSPIKESDISAPPEAREDFROMTEAM 643 +#define STRINGID_STICKYWEBDISAPPEAREDFROMTEAM 644 +#define STRINGID_STEALTHROCKDISAPPEAREDFROMTEAM 645 +#define STRINGID_COULDNTFULLYPROTECT 646 +#define STRINGID_STOCKPILEDEFFECTWOREOFF 647 -#define BATTLESTRINGS_COUNT 644 +#define BATTLESTRINGS_COUNT 648 // This is the string id that gBattleStringsTable starts with. // String ids before this (e.g. STRINGID_INTROMSG) are not in the table, @@ -901,6 +905,13 @@ #define B_MSG_TERRAINPREVENTS_ELECTRIC 1 #define B_MSG_TERRAINPREVENTS_PSYCHIC 2 +// gTerrainEndingStringIds +#define B_MSG_TERRAINENDS_MISTY 0 +#define B_MSG_TERRAINENDS_ELECTRIC 1 +#define B_MSG_TERRAINENDS_PSYCHIC 2 +#define B_MSG_TERRAINENDS_GRASS 3 +#define B_MSG_TERRAINENDS_COUNT 4 + // gWrappedStringIds #define B_MSG_WRAPPED_BIND 0 #define B_MSG_WRAPPED_WRAP 1 diff --git a/src/battle_message.c b/src/battle_message.c index abf9bf705aa7..cf57247bf875 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -631,6 +631,10 @@ static const u8 sText_NotDoneYet[] = _("This move effect is not done yet!\p"); static const u8 sText_PkmnBlewAwayToxicSpikes[] = _("{B_ATK_NAME_WITH_PREFIX} blew away\nToxic Spikes!"); static const u8 sText_PkmnBlewAwayStickyWeb[] = _("{B_ATK_NAME_WITH_PREFIX} blew away\nSticky Web!"); static const u8 sText_PkmnBlewAwayStealthRock[] = _("{B_ATK_NAME_WITH_PREFIX} blew away\nStealth Rock!"); +static const u8 sText_SpikesDisappearedFromTeam[] = _("The spikes disappeared from\nthe ground around {B_ATK_TEAM2} team!"); +static const u8 sText_ToxicSpikesDisappearedFromTeam[] = _("The poison spikes disappeared from\nthe ground around {B_ATK_TEAM2} team!"); +static const u8 sText_StealthRockDisappearedFromTeam[] = _("The pointed stones disappeared\nfrom around {B_ATK_TEAM2} team!"); +static const u8 sText_StickyWebDisappearedFromTeam[] = _("The sticky web has disappeared from\nthe ground around {B_ATK_TEAM2} team!"); static const u8 sText_StickyWebUsed[] = _("A sticky web spreads out on the\nground around {B_DEF_TEAM2} team!"); static const u8 sText_QuashSuccess[] = _("The opposing {B_DEF_NAME_WITH_PREFIX}'s\nmove was postponed!"); static const u8 sText_IonDelugeOn[] = _("A deluge of ions showers\nthe battlefield!"); @@ -1369,6 +1373,10 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_PKMNBLEWAWAYTOXICSPIKES - BATTLESTRINGS_TABLE_START] = sText_PkmnBlewAwayToxicSpikes, [STRINGID_PKMNBLEWAWAYSTICKYWEB - BATTLESTRINGS_TABLE_START] = sText_PkmnBlewAwayStickyWeb, [STRINGID_PKMNBLEWAWAYSTEALTHROCK - BATTLESTRINGS_TABLE_START] = sText_PkmnBlewAwayStealthRock, + [STRINGID_SPIKESDISAPPEAREDFROMTEAM - BATTLESTRINGS_TABLE_START] = sText_SpikesDisappearedFromTeam, + [STRINGID_TOXICSPIKESDISAPPEAREDFROMTEAM - BATTLESTRINGS_TABLE_START] = sText_ToxicSpikesDisappearedFromTeam, + [STRINGID_STEALTHROCKDISAPPEAREDFROMTEAM - BATTLESTRINGS_TABLE_START] = sText_StealthRockDisappearedFromTeam, + [STRINGID_STICKYWEBDISAPPEAREDFROMTEAM - BATTLESTRINGS_TABLE_START] = sText_StickyWebDisappearedFromTeam, [STRINGID_IONDELUGEON - BATTLESTRINGS_TABLE_START] = sText_IonDelugeOn, [STRINGID_TOPSYTURVYSWITCHEDSTATS - BATTLESTRINGS_TABLE_START] = sText_TopsyTurvySwitchedStats, [STRINGID_TERRAINBECOMESMISTY - BATTLESTRINGS_TABLE_START] = sText_TerrainBecomesMisty, @@ -1440,9 +1448,12 @@ const u16 gTerrainStringIds[] = STRINGID_TERRAINBECOMESMISTY, STRINGID_TERRAINBECOMESGRASSY, STRINGID_TERRAINBECOMESELECTRIC, STRINGID_TERRAINBECOMESPSYCHIC, STRINGID_TERRAINREMOVED, }; -const u16 gTerrainEndingStringIds[] = +const u16 gTerrainEndingStringIds[B_MSG_TERRAINENDS_COUNT] = { - STRINGID_MISTYTERRAINENDS, STRINGID_GRASSYTERRAINENDS, STRINGID_ELECTRICTERRAINENDS, STRINGID_PSYCHICTERRAINENDS + [B_MSG_TERRAINENDS_MISTY] = STRINGID_MISTYTERRAINENDS, + [B_MSG_TERRAINENDS_ELECTRIC] = STRINGID_ELECTRICTERRAINENDS, + [B_MSG_TERRAINENDS_PSYCHIC] = STRINGID_PSYCHICTERRAINENDS, + [B_MSG_TERRAINENDS_GRASS] = STRINGID_GRASSYTERRAINENDS, }; const u16 gTerrainPreventsStringIds[] = diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 1ea353f3c276..a5b7656bf512 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -8412,6 +8412,30 @@ bool32 CanUseLastResort(u8 battlerId) return (knownMovesCount >= 2 && usedMovesCount >= knownMovesCount - 1); } +static void RemoveAllTerrains(void) +{ + gFieldTimers.terrainTimer = 0; + switch (gFieldStatuses & STATUS_FIELD_TERRAIN_ANY) + { + case STATUS_FIELD_MISTY_TERRAIN: + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAINENDS_MISTY; + break; + case STATUS_FIELD_GRASSY_TERRAIN: + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAINENDS_GRASS; + break; + case STATUS_FIELD_ELECTRIC_TERRAIN: + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAINENDS_ELECTRIC; + break; + case STATUS_FIELD_PSYCHIC_TERRAIN: + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAINENDS_PSYCHIC; + break; + default: + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAINENDS_COUNT; // failsafe + break; + } + gFieldStatuses &= ~STATUS_FIELD_TERRAIN_ANY; // remove the terrain +} + #define DEFOG_CLEAR(status, structField, battlescript, move)\ { \ if (*sideStatuses & status) \ @@ -8429,7 +8453,7 @@ bool32 CanUseLastResort(u8 battlerId) } \ } -static bool32 ClearDefogHazards(u8 battlerAtk, bool32 clear) +static bool32 TryDefogClear(u8 battlerAtk, bool32 clear) { s32 i; for (i = 0; i < 2; i++) @@ -8437,7 +8461,7 @@ static bool32 ClearDefogHazards(u8 battlerAtk, bool32 clear) struct SideTimer *sideTimer = &gSideTimers[i]; u32 *sideStatuses = &gSideStatuses[i]; - gBattlerAttacker = i; + gBattlerAttacker = i; // For correct battle string. Ally's / Foe's if (GetBattlerSide(battlerAtk) != i) { DEFOG_CLEAR(SIDE_STATUS_REFLECT, reflectTimer, BattleScript_SideStatusWoreOffReturn, MOVE_REFLECT); @@ -8446,10 +8470,19 @@ static bool32 ClearDefogHazards(u8 battlerAtk, bool32 clear) DEFOG_CLEAR(SIDE_STATUS_AURORA_VEIL, auroraVeilTimer, BattleScript_SideStatusWoreOffReturn, MOVE_AURORA_VEIL); DEFOG_CLEAR(SIDE_STATUS_SAFEGUARD, safeguardTimer, BattleScript_SideStatusWoreOffReturn, MOVE_SAFEGUARD); } - DEFOG_CLEAR(SIDE_STATUS_SPIKES, spikesAmount, BattleScript_SpikesFree, 0); - DEFOG_CLEAR(SIDE_STATUS_STEALTH_ROCK, stealthRockAmount, BattleScript_StealthRockFree, 0); - DEFOG_CLEAR(SIDE_STATUS_TOXIC_SPIKES, toxicSpikesAmount, BattleScript_ToxicSpikesFree, 0); - DEFOG_CLEAR(SIDE_STATUS_STICKY_WEB, stickyWebAmount, BattleScript_StickyWebFree, 0); + DEFOG_CLEAR(SIDE_STATUS_SPIKES, spikesAmount, BattleScript_SpikesDefog, 0); + DEFOG_CLEAR(SIDE_STATUS_STEALTH_ROCK, stealthRockAmount, BattleScript_StealthRockDefog, 0); + DEFOG_CLEAR(SIDE_STATUS_TOXIC_SPIKES, toxicSpikesAmount, BattleScript_ToxicSpikesDefog, 0); + DEFOG_CLEAR(SIDE_STATUS_STICKY_WEB, stickyWebAmount, BattleScript_StickyWebDefog, 0); + #if B_DEFOG_CLEARS_TERRAIN >= GEN_8 + if (gFieldStatuses & STATUS_FIELD_TERRAIN_ANY) + { + RemoveAllTerrains(); + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_TerrainEnds_Ret; + return TRUE; + } + #endif // B_DEFOG_CLEARS_TERRAIN } return FALSE; @@ -9992,14 +10025,14 @@ static void Cmd_various(void) VARIOUS_ARGS(bool8 clear, const u8 *failInstr); if (cmd->clear) // Clear { - if (ClearDefogHazards(gEffectBattler, TRUE)) + if (TryDefogClear(gEffectBattler, TRUE)) return; else gBattlescriptCurrInstr = cmd->nextInstr; } else { - if (ClearDefogHazards(gActiveBattler, FALSE)) + if (TryDefogClear(gActiveBattler, FALSE)) gBattlescriptCurrInstr = cmd->nextInstr; else gBattlescriptCurrInstr = cmd->failInstr; @@ -10424,26 +10457,7 @@ static void Cmd_various(void) case VARIOUS_REMOVE_TERRAIN: { VARIOUS_ARGS(); - gFieldTimers.terrainTimer = 0; - switch (gFieldStatuses & STATUS_FIELD_TERRAIN_ANY) - { - case STATUS_FIELD_MISTY_TERRAIN: - gBattleCommunication[MULTISTRING_CHOOSER] = 0; - break; - case STATUS_FIELD_GRASSY_TERRAIN: - gBattleCommunication[MULTISTRING_CHOOSER] = 1; - break; - case STATUS_FIELD_ELECTRIC_TERRAIN: - gBattleCommunication[MULTISTRING_CHOOSER] = 2; - break; - case STATUS_FIELD_PSYCHIC_TERRAIN: - gBattleCommunication[MULTISTRING_CHOOSER] = 3; - break; - default: - gBattleCommunication[MULTISTRING_CHOOSER] = 4; // failsafe - break; - } - gFieldStatuses &= ~STATUS_FIELD_TERRAIN_ANY; // remove the terrain + RemoveAllTerrains(); break; } case VARIOUS_JUMP_IF_UNDER_200: diff --git a/src/battle_util.c b/src/battle_util.c index d7f3a767ba83..e82f6c87fea0 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -2126,6 +2126,20 @@ enum ENDTURN_FIELD_COUNT, }; +static bool32 TryEndTerrain(u32 terrainFlag, u32 stringTableId) +{ + if (gFieldStatuses & terrainFlag + && (!(gFieldStatuses & STATUS_FIELD_TERRAIN_PERMANENT) && --gFieldTimers.terrainTimer == 0)) + { + gFieldStatuses &= ~terrainFlag; + TryToRevertMimicry(); + gBattleCommunication[MULTISTRING_CHOOSER] = stringTableId; + BattleScriptExecute(BattleScript_TerrainEnds); + return TRUE; + } + return FALSE; +} + u8 DoFieldEndTurnEffects(void) { u8 effect = 0; @@ -2477,50 +2491,19 @@ u8 DoFieldEndTurnEffects(void) gBattleStruct->turnCountersTracker++; break; case ENDTURN_ELECTRIC_TERRAIN: - if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN - && (!(gFieldStatuses & STATUS_FIELD_TERRAIN_PERMANENT) && --gFieldTimers.terrainTimer == 0)) - { - gFieldStatuses &= ~(STATUS_FIELD_ELECTRIC_TERRAIN | STATUS_FIELD_TERRAIN_PERMANENT); - TryToRevertMimicry(); - BattleScriptExecute(BattleScript_ElectricTerrainEnds); - effect++; - } + effect = TryEndTerrain(STATUS_FIELD_ELECTRIC_TERRAIN, B_MSG_TERRAINENDS_ELECTRIC); gBattleStruct->turnCountersTracker++; break; case ENDTURN_MISTY_TERRAIN: - if (gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN - && (!(gFieldStatuses & STATUS_FIELD_TERRAIN_PERMANENT) && --gFieldTimers.terrainTimer == 0)) - { - gFieldStatuses &= ~STATUS_FIELD_MISTY_TERRAIN; - TryToRevertMimicry(); - BattleScriptExecute(BattleScript_MistyTerrainEnds); - effect++; - } + effect = TryEndTerrain(STATUS_FIELD_MISTY_TERRAIN, B_MSG_TERRAINENDS_MISTY); gBattleStruct->turnCountersTracker++; break; case ENDTURN_GRASSY_TERRAIN: - if (gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN) - { - if (!(gFieldStatuses & STATUS_FIELD_TERRAIN_PERMANENT) - && (gFieldTimers.terrainTimer == 0 || --gFieldTimers.terrainTimer == 0)) - { - gFieldStatuses &= ~STATUS_FIELD_GRASSY_TERRAIN; - TryToRevertMimicry(); - } - BattleScriptExecute(BattleScript_GrassyTerrainHeals); - effect++; - } + effect = TryEndTerrain(STATUS_FIELD_GRASSY_TERRAIN, B_MSG_TERRAINENDS_GRASS); gBattleStruct->turnCountersTracker++; break; case ENDTURN_PSYCHIC_TERRAIN: - if (gFieldStatuses & STATUS_FIELD_PSYCHIC_TERRAIN - && (!(gFieldStatuses & STATUS_FIELD_TERRAIN_PERMANENT) && --gFieldTimers.terrainTimer == 0)) - { - gFieldStatuses &= ~STATUS_FIELD_PSYCHIC_TERRAIN; - TryToRevertMimicry(); - BattleScriptExecute(BattleScript_PsychicTerrainEnds); - effect++; - } + effect = TryEndTerrain(STATUS_FIELD_PSYCHIC_TERRAIN, B_MSG_TERRAINENDS_PSYCHIC); gBattleStruct->turnCountersTracker++; break; case ENDTURN_WATER_SPORT: diff --git a/test/move_effect_defog.c b/test/move_effect_defog.c new file mode 100644 index 000000000000..d877899bb541 --- /dev/null +++ b/test/move_effect_defog.c @@ -0,0 +1,375 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_DEFOG].effect == EFFECT_DEFOG); + ASSUME(gBattleMoves[MOVE_REFLECT].effect == EFFECT_REFLECT); + ASSUME(gBattleMoves[MOVE_LIGHT_SCREEN].effect == EFFECT_LIGHT_SCREEN); + ASSUME(gBattleMoves[MOVE_MIST].effect == EFFECT_MIST); + ASSUME(gBattleMoves[MOVE_SAFEGUARD].effect == EFFECT_SAFEGUARD); + ASSUME(gBattleMoves[MOVE_AURORA_VEIL].effect == EFFECT_AURORA_VEIL); + ASSUME(gBattleMoves[MOVE_STEALTH_ROCK].effect == EFFECT_STEALTH_ROCK); + ASSUME(gBattleMoves[MOVE_SPIKES].effect == EFFECT_SPIKES); + ASSUME(gBattleMoves[MOVE_TOXIC_SPIKES].effect == EFFECT_TOXIC_SPIKES); + ASSUME(gBattleMoves[MOVE_STICKY_WEB].effect == EFFECT_STICKY_WEB); + ASSUME(gBattleMoves[MOVE_TOXIC].effect == EFFECT_TOXIC); + ASSUME(gBattleMoves[MOVE_SCREECH].effect == EFFECT_DEFENSE_DOWN_2); + ASSUME(gBattleMoves[MOVE_TACKLE].split == SPLIT_PHYSICAL); + ASSUME(gBattleMoves[MOVE_GUST].split == SPLIT_SPECIAL); +} + +SINGLE_BATTLE_TEST("Defog lowers evasiveness by 1") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_DEFOG); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DEFOG, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Wobbuffet's evasiveness fell!"); + } +} + +SINGLE_BATTLE_TEST("Defog does not lower evasiveness if target behind Substitute") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) {Speed(4); } + OPPONENT(SPECIES_WOBBUFFET) {Speed(5); } + } WHEN { + TURN { MOVE(opponent, MOVE_SUBSTITUTE); MOVE(player, MOVE_DEFOG); } + } SCENE { + MESSAGE("Foe Wobbuffet used Substitute!"); + MESSAGE("But it failed!"); + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DEFOG, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Wobbuffet's evasiveness fell!"); + } + } +} + +DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Reflect and Light Screen from opponent's side", s16 damagePhysical, s16 damageSpecial) +{ + u16 move; + + PARAMETRIZE { move = MOVE_DEFOG; } + PARAMETRIZE { move = MOVE_CELEBRATE; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET) {Speed(4); } + PLAYER(SPECIES_WOBBUFFET) {Speed(3); } + OPPONENT(SPECIES_WOBBUFFET) {Speed(2); } + OPPONENT(SPECIES_WOBBUFFET) {Speed(1); } + } WHEN { + TURN { MOVE(opponentLeft, MOVE_REFLECT); MOVE(opponentRight, MOVE_LIGHT_SCREEN); } + TURN { MOVE(playerLeft, move, target:opponentLeft); } + TURN { MOVE(playerLeft, MOVE_TACKLE, target:opponentLeft); MOVE(playerRight, MOVE_GUST, target:opponentRight); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_REFLECT, opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_LIGHT_SCREEN, opponentRight); + ANIMATION(ANIM_TYPE_MOVE, move, playerLeft); + if (move == MOVE_DEFOG) { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); + MESSAGE("Foe Wobbuffet's evasiveness fell!"); + MESSAGE("Foe's Reflect wore off!"); + MESSAGE("Foe's Light Screen wore off!"); + } + MESSAGE("Wobbuffet used Tackle!"); + HP_BAR(opponentLeft, captureDamage: &results[i].damagePhysical); + MESSAGE("Wobbuffet used Gust!"); + HP_BAR(opponentRight, captureDamage: &results[i].damageSpecial); + } FINALLY { + EXPECT_MUL_EQ(results[1].damagePhysical, Q_4_12(1.5), results[0].damagePhysical); + EXPECT_MUL_EQ(results[1].damageSpecial, Q_4_12(1.5), results[0].damageSpecial); + } +} + +DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Mist and Safeguard from opponent's side") +{ + u16 move; + + PARAMETRIZE { move = MOVE_DEFOG; } + PARAMETRIZE { move = MOVE_CELEBRATE; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET) {Speed(4); } + PLAYER(SPECIES_WOBBUFFET) {Speed(3); } + OPPONENT(SPECIES_WOBBUFFET) {Speed(2); } + OPPONENT(SPECIES_WOBBUFFET) {Speed(1); } + } WHEN { + TURN { MOVE(opponentLeft, MOVE_MIST); MOVE(opponentRight, MOVE_SAFEGUARD); } + TURN { MOVE(playerLeft, move, target:opponentLeft); } + TURN { MOVE(playerLeft, MOVE_SCREECH, target:opponentLeft); MOVE(playerRight, MOVE_TOXIC, target:opponentRight); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_MIST, opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SAFEGUARD, opponentRight); + if (move == MOVE_DEFOG) { + MESSAGE("Foe Wobbuffet is protected by MIST!"); + ANIMATION(ANIM_TYPE_MOVE, move, playerLeft); + MESSAGE("Foe's Mist wore off!"); + MESSAGE("Foe's Safeguard wore off!"); + } + MESSAGE("Wobbuffet used Screech!"); + if (move == MOVE_DEFOG) { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SCREECH, playerLeft); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); + } + else { + MESSAGE("Foe Wobbuffet is protected by MIST!"); + NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); + } + MESSAGE("Wobbuffet used Toxic!"); + if (move == MOVE_DEFOG) { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC, playerRight); + STATUS_ICON(opponentRight, badPoison: TRUE); + } + else { + MESSAGE("Foe Wobbuffet's party is protected by SAFEGUARD!"); + NOT STATUS_ICON(opponentRight, badPoison: TRUE); + } + } +} + +DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Stealth Rock and Sticky Web from player's side") +{ + u16 move; + + PARAMETRIZE { move = MOVE_DEFOG; } + PARAMETRIZE { move = MOVE_CELEBRATE; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET) {Speed(4); } + PLAYER(SPECIES_WOBBUFFET) {Speed(3); } + PLAYER(SPECIES_WOBBUFFET) {Speed(3); } + OPPONENT(SPECIES_WOBBUFFET) {Speed(2); } + OPPONENT(SPECIES_WOBBUFFET) {Speed(1); } + } WHEN { + TURN { MOVE(opponentLeft, MOVE_STEALTH_ROCK); MOVE(opponentRight, MOVE_STICKY_WEB); } + TURN { MOVE(playerLeft, move, target:opponentLeft); } + TURN { SWITCH(playerLeft, 2); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_STEALTH_ROCK, opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, opponentRight); + ANIMATION(ANIM_TYPE_MOVE, move, playerLeft); + if (move == MOVE_DEFOG) { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); + MESSAGE("Foe Wobbuffet's evasiveness fell!"); + MESSAGE("The pointed stones disappeared from around your team!"); + MESSAGE("The sticky web has disappeared from the ground around your team!"); + } + // Switch happens + MESSAGE("Wobbuffet, that's enough! Come back!"); + MESSAGE("Go! Wobbuffet!"); + if (move != MOVE_DEFOG) { + HP_BAR(playerLeft); + MESSAGE("Pointed stones dug into Wobbuffet!"); + MESSAGE("Wobbuffet was caught in a Sticky Web!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); + MESSAGE("Wobbuffet's speed fell!"); + } + else { + NONE_OF { + HP_BAR(playerLeft); + MESSAGE("Pointed stones dug into Wobbuffet!"); + MESSAGE("Wobbuffet was caught in a Sticky Web!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); + MESSAGE("Wobbuffet's speed fell!"); + } + } + } +} + +SINGLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Spikes from player's side") +{ + u16 move; + + PARAMETRIZE { move = MOVE_DEFOG; } + PARAMETRIZE { move = MOVE_CELEBRATE; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET) {Speed(2); } + PLAYER(SPECIES_WOBBUFFET) {Speed(2); } + OPPONENT(SPECIES_WOBBUFFET) {Speed(5); } + } WHEN { + TURN { MOVE(opponent, MOVE_SPIKES); MOVE(player, move); } + TURN { SWITCH(player, 1); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SPIKES, opponent); + ANIMATION(ANIM_TYPE_MOVE, move, player); + if (move == MOVE_DEFOG) { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Wobbuffet's evasiveness fell!"); + MESSAGE("The spikes disappeared from the ground around your team!"); + } + // Switch happens + MESSAGE("Wobbuffet, that's enough! Come back!"); + MESSAGE("Go! Wobbuffet!"); + if (move != MOVE_DEFOG) { + HP_BAR(player); + MESSAGE("Wobbuffet is hurt by spikes!"); + } + else { + NONE_OF { + HP_BAR(player); + MESSAGE("Wobbuffet is hurt by spikes!"); + } + } + } +} + +SINGLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes terrain") +{ + u16 move; + + PARAMETRIZE { move = MOVE_PSYCHIC_TERRAIN; } + PARAMETRIZE { move = MOVE_ELECTRIC_TERRAIN; } + PARAMETRIZE { move = MOVE_MISTY_TERRAIN; } + PARAMETRIZE { move = MOVE_GRASSY_TERRAIN; } + GIVEN { + ASSUME(B_DEFOG_CLEARS_TERRAIN >= GEN_8); + PLAYER(SPECIES_WOBBUFFET) {Speed(50); } + OPPONENT(SPECIES_WOBBUFFET) {Speed(5); } + } WHEN { + TURN { MOVE(player, move); MOVE(opponent, MOVE_DEFOG); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, move, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_DEFOG, opponent); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Wobbuffet's evasiveness fell!"); + if (move == MOVE_PSYCHIC_TERRAIN) { + MESSAGE("The weirdness disappeared from the battlefield."); + } + else if (move == MOVE_ELECTRIC_TERRAIN) { + MESSAGE("The electricity disappeared from the battlefield."); + } + else if (move == MOVE_MISTY_TERRAIN) { + MESSAGE("The mist disappeared from the battlefield."); + } + else if (move == MOVE_GRASSY_TERRAIN) { + MESSAGE("The grass disappeared from the battlefield."); + } + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_RESTORE_BG, player); + } +} + +SINGLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Toxic Spikes from opponent's side") +{ + u16 move; + + PARAMETRIZE { move = MOVE_DEFOG; } + PARAMETRIZE { move = MOVE_CELEBRATE; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET) {Speed(5); } + OPPONENT(SPECIES_WOBBUFFET) {Speed(2); } + OPPONENT(SPECIES_WOBBUFFET) {Speed(2); } + } WHEN { + TURN { MOVE(player, MOVE_TOXIC_SPIKES); MOVE(opponent, move); } + TURN { SWITCH(opponent, 1); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC_SPIKES, player); + ANIMATION(ANIM_TYPE_MOVE, move, opponent); + if (move == MOVE_DEFOG) { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Wobbuffet's evasiveness fell!"); + MESSAGE("The poison spikes disappeared from the ground around the opposing team!"); + } + // Switch happens + MESSAGE("2 sent out Wobbuffet!"); + if (move != MOVE_DEFOG) { + MESSAGE("Foe Wobbuffet was poisoned!"); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); + STATUS_ICON(opponent, poison: TRUE); + } + else { + NONE_OF { + MESSAGE("Foe Wobbuffet was poisoned!"); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); + STATUS_ICON(opponent, poison: TRUE); + } + } + } +} + +DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Aurora Veil from player's side", s16 damagePhysical, s16 damageSpecial) +{ + u16 move; + + PARAMETRIZE { move = MOVE_DEFOG; } + PARAMETRIZE { move = MOVE_CELEBRATE; } + GIVEN { + ASSUME(gBattleMoves[MOVE_HAIL].effect == EFFECT_HAIL); + ASSUME(gSpeciesInfo[SPECIES_GLALIE].types[0] == TYPE_ICE); + PLAYER(SPECIES_GLALIE) {Speed(4); } + PLAYER(SPECIES_GLALIE) {Speed(3); } + OPPONENT(SPECIES_GLALIE) {Speed(2); } + OPPONENT(SPECIES_GLALIE) {Speed(1); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_HAIL); MOVE(playerRight, MOVE_AURORA_VEIL); } + TURN { MOVE(opponentLeft, move, target:playerLeft); } + TURN { MOVE(opponentLeft, MOVE_TACKLE, target:playerLeft); MOVE(opponentRight, MOVE_GUST, target:playerRight); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_HAIL, playerLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_AURORA_VEIL, playerRight); + ANIMATION(ANIM_TYPE_MOVE, move, opponentLeft); + if (move == MOVE_DEFOG) { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); + MESSAGE("Glalie's evasiveness fell!"); + MESSAGE("Ally's Aurora Veil wore off!"); + } + MESSAGE("Foe Glalie used Tackle!"); + HP_BAR(playerLeft, captureDamage: &results[i].damagePhysical); + MESSAGE("Foe Glalie used Gust!"); + HP_BAR(playerRight, captureDamage: &results[i].damageSpecial); + } FINALLY { + EXPECT_MUL_EQ(results[1].damagePhysical, Q_4_12(1.5), results[0].damagePhysical); + EXPECT_MUL_EQ(results[1].damageSpecial, Q_4_12(1.5), results[0].damageSpecial); + } +} + +DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes everything it can") +{ + bool32 defogTurn = FALSE; + GIVEN { + ASSUME(gBattleMoves[MOVE_HAIL].effect == EFFECT_HAIL); + ASSUME(gSpeciesInfo[SPECIES_GLALIE].types[0] == TYPE_ICE); + PLAYER(SPECIES_GLALIE) {Speed(4); } + PLAYER(SPECIES_GLALIE) {Speed(3); } + PLAYER(SPECIES_GLALIE) {Speed(12); } + PLAYER(SPECIES_GLALIE) {Speed(3); } + OPPONENT(SPECIES_GLALIE) {Speed(2); } + OPPONENT(SPECIES_GLALIE) {Speed(1); } + OPPONENT(SPECIES_GLALIE) {Speed(1); } + OPPONENT(SPECIES_GLALIE) {Speed(1); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_STICKY_WEB); MOVE(playerRight, MOVE_SPIKES); MOVE(opponentLeft, MOVE_STICKY_WEB); MOVE(opponentRight, MOVE_SPIKES); } + TURN { SWITCH(playerLeft, 2); SWITCH(playerRight, 3); SWITCH(opponentLeft, 2); SWITCH(opponentRight, 3);} + TURN { MOVE(playerLeft, MOVE_TOXIC_SPIKES); MOVE(playerRight, MOVE_STEALTH_ROCK); MOVE(opponentLeft, MOVE_TOXIC_SPIKES); MOVE(opponentRight, MOVE_STEALTH_ROCK); } + TURN { MOVE(playerLeft, MOVE_HAIL); MOVE(playerRight, MOVE_AURORA_VEIL); MOVE(opponentLeft, MOVE_AURORA_VEIL); MOVE(opponentRight, MOVE_STEALTH_ROCK); } + TURN { MOVE(playerLeft, MOVE_REFLECT); MOVE(playerRight, MOVE_LIGHT_SCREEN); MOVE(opponentLeft, MOVE_REFLECT); MOVE(opponentRight, MOVE_LIGHT_SCREEN); } + TURN { MOVE(playerLeft, MOVE_MIST); MOVE(playerRight, MOVE_SAFEGUARD); MOVE(opponentLeft, MOVE_MIST); MOVE(opponentRight, MOVE_SAFEGUARD); } + TURN { defogTurn = TRUE ; MOVE(opponentRight, MOVE_DEFOG, target:playerLeft);} + } SCENE { + if (defogTurn == TRUE) + { + MESSAGE("Foe Glalie used Defog!"); + MESSAGE("Glalie is protected by MIST!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_DEFOG, opponentRight); + // Player side + MESSAGE("Ally's Reflect wore off!"); + MESSAGE("Ally's Light Screen wore off!"); + MESSAGE("Ally's Mist wore off!"); + MESSAGE("Ally's Aurora Veil wore off!"); + MESSAGE("Ally's Safeguard wore off!"); + + MESSAGE("The spikes disappeared from the ground around your team!"); + MESSAGE("The pointed stones disappeared from around your team!"); + MESSAGE("The poison spikes disappeared from the ground around your team!"); + MESSAGE("The sticky web has disappeared from the ground around your team!"); + + // Opponent side + MESSAGE("The spikes disappeared from the ground around the opposing team!"); + MESSAGE("The pointed stones disappeared from around the opposing team!"); + MESSAGE("The poison spikes disappeared from the ground around the opposing team!"); + MESSAGE("The sticky web has disappeared from the ground around the opposing team!"); + } + } +} From e055456b7eae91bb22995bf8ba6ea722531af96c Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 7 Mar 2023 09:34:26 +0100 Subject: [PATCH 143/428] Fix Protean / Libero when AI calculates Damage (#2714) * Fix Protean / Libero when AI calculates Damage * fix ai changing types when calculating dmg --- include/battle_script_commands.h | 1 + src/battle_ai_util.c | 10 ++++++---- src/battle_script_commands.c | 19 ++++++++++++++----- 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/include/battle_script_commands.h b/include/battle_script_commands.h index c3d6831e956d..d65728628916 100644 --- a/include/battle_script_commands.h +++ b/include/battle_script_commands.h @@ -44,6 +44,7 @@ u16 GetSecretPowerMoveEffect(void); void StealTargetItem(u8 battlerStealer, u8 battlerItem); u8 GetCatchingBattler(void); u32 GetHighestStatId(u32 battlerId); +bool32 ProteanTryChangeType(u32 battler, u32 ability, u32 move, u32 moveType); bool32 DoSwitchInAbilitiesItems(u32 battlerId); extern void (* const gBattleScriptingCommandsTable[])(void); diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 523d9229f4de..a9e3ed3e0bd0 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -538,9 +538,10 @@ void SaveBattlerData(u8 battlerId) AI_THINKING_STRUCT->saved[battlerId].species = gBattleMons[battlerId].species; for (i = 0; i < 4; i++) AI_THINKING_STRUCT->saved[battlerId].moves[i] = gBattleMons[battlerId].moves[i]; - AI_THINKING_STRUCT->saved[battlerId].types[0] = gBattleMons[battlerId].type1; - AI_THINKING_STRUCT->saved[battlerId].types[1] = gBattleMons[battlerId].type2; } + // Save and restore types even for AI controlled battlers in case it gets changed during move evaluation process. + AI_THINKING_STRUCT->saved[battlerId].types[0] = gBattleMons[battlerId].type1; + AI_THINKING_STRUCT->saved[battlerId].types[1] = gBattleMons[battlerId].type2; } static bool32 ShouldFailForIllusion(u16 illusionSpecies, u32 battlerId) @@ -631,9 +632,9 @@ void RestoreBattlerData(u8 battlerId) gBattleMons[battlerId].species = AI_THINKING_STRUCT->saved[battlerId].species; for (i = 0; i < 4; i++) gBattleMons[battlerId].moves[i] = AI_THINKING_STRUCT->saved[battlerId].moves[i]; - gBattleMons[battlerId].type1 = AI_THINKING_STRUCT->saved[battlerId].types[0]; - gBattleMons[battlerId].type2 = AI_THINKING_STRUCT->saved[battlerId].types[1]; } + gBattleMons[battlerId].type1 = AI_THINKING_STRUCT->saved[battlerId].types[0]; + gBattleMons[battlerId].type2 = AI_THINKING_STRUCT->saved[battlerId].types[1]; } u32 GetHealthPercentage(u8 battlerId) @@ -801,6 +802,7 @@ s32 AI_CalcDamage(u16 move, u8 battlerAtk, u8 battlerDef, u8 *typeEffectiveness, if (gBattleMoves[move].power) { + ProteanTryChangeType(battlerAtk, AI_DATA->abilities[battlerAtk], move, moveType); critChance = GetInverseCritChance(battlerAtk, battlerDef, move); normalDmg = CalculateMoveDamageAndEffectiveness(move, battlerAtk, battlerDef, moveType, &effectivenessMultiplier); critDmg = CalculateMoveDamage(move, battlerAtk, battlerDef, moveType, 0, TRUE, FALSE, FALSE); diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index a5b7656bf512..40a7598de169 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -1443,6 +1443,19 @@ static bool32 TryAegiFormChange(void) return TRUE; } +bool32 ProteanTryChangeType(u32 battler, u32 ability, u32 move, u32 moveType) +{ + if ((ability == ABILITY_PROTEAN || ability == ABILITY_LIBERO) + && (gBattleMons[battler].type1 != moveType || gBattleMons[battler].type2 != moveType + || (gBattleMons[battler].type3 != moveType && gBattleMons[battler].type3 != TYPE_MYSTERY)) + && move != MOVE_STRUGGLE) + { + SET_BATTLER_TYPE(gBattlerAttacker, moveType); + return TRUE; + } + return FALSE; +} + static void Cmd_attackcanceler(void) { CMD_ARGS(); @@ -1499,13 +1512,9 @@ static void Cmd_attackcanceler(void) } // Check Protean activation. - if ((attackerAbility == ABILITY_PROTEAN || attackerAbility == ABILITY_LIBERO) - && (gBattleMons[gBattlerAttacker].type1 != moveType || gBattleMons[gBattlerAttacker].type2 != moveType || - (gBattleMons[gBattlerAttacker].type3 != moveType && gBattleMons[gBattlerAttacker].type3 != TYPE_MYSTERY)) - && gCurrentMove != MOVE_STRUGGLE) + if (ProteanTryChangeType(gBattlerAttacker, attackerAbility, gCurrentMove, moveType)) { PREPARE_TYPE_BUFFER(gBattleTextBuff1, moveType); - SET_BATTLER_TYPE(gBattlerAttacker, moveType); gBattlerAbility = gBattlerAttacker; BattleScriptPushCursor(); PrepareStringBattle(STRINGID_EMPTYSTRING3, gBattlerAttacker); From 318666e21d84bce7badcb107fe2cb76c91aaec71 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 7 Mar 2023 12:20:36 +0100 Subject: [PATCH 144/428] debug minor touches to give item max quantity and map number display --- src/debug.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/debug.c b/src/debug.c index 5c14dbfb0f01..170105042021 100644 --- a/src/debug.c +++ b/src/debug.c @@ -147,7 +147,7 @@ enum { //Sound #define DEBUG_NUMBER_DIGITS_VARIABLES 5 #define DEBUG_NUMBER_DIGITS_VARIABLE_VALUE 5 #define DEBUG_NUMBER_DIGITS_ITEMS 4 -#define DEBUG_NUMBER_DIGITS_ITEM_QUANTITY 2 +#define DEBUG_NUMBER_DIGITS_ITEM_QUANTITY 3 #define DEBUG_NUMBER_ICON_X 210 #define DEBUG_NUMBER_ICON_Y 50 @@ -1015,8 +1015,8 @@ static void DebugAction_Util_Warp_SelectMapGroup(u8 taskId) gTasks[taskId].data[3] = 0; gTasks[taskId].data[4] = 0; - ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, 2); - ConvertIntToDecimalStringN(gStringVar2, MAP_GROUP_COUNT[gTasks[taskId].data[5]] - 1, STR_CONV_MODE_LEADING_ZEROS, 2); + ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, (MAP_GROUP_COUNT[gTasks[taskId].data[5]] - 1 >= 100) ? 3 : 2); + ConvertIntToDecimalStringN(gStringVar2, MAP_GROUP_COUNT[gTasks[taskId].data[5]] - 1, STR_CONV_MODE_LEADING_ZEROS, (MAP_GROUP_COUNT[gTasks[taskId].data[5]] - 1 >= 100) ? 3 : 2); StringExpandPlaceholders(gStringVar1, sDebugText_Util_WarpToMap_SelMax); GetMapName(gStringVar2, Overworld_GetMapHeaderByGroupAndId(gTasks[taskId].data[5], gTasks[taskId].data[3])->regionMapSectionId, 0); StringCopy(gStringVar3, gText_DigitIndicator[gTasks[taskId].data[4]]); @@ -1061,8 +1061,8 @@ static void DebugAction_Util_Warp_SelectMap(u8 taskId) gTasks[taskId].data[4] += 1; } - ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, 2); - ConvertIntToDecimalStringN(gStringVar2, MAP_GROUP_COUNT[gTasks[taskId].data[5]] - 1, STR_CONV_MODE_LEADING_ZEROS, 2); + ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, (max_value >= 100) ? 3 : 2); + ConvertIntToDecimalStringN(gStringVar2, MAP_GROUP_COUNT[gTasks[taskId].data[5]] - 1, STR_CONV_MODE_LEADING_ZEROS, (max_value >= 100) ? 3 : 2); StringExpandPlaceholders(gStringVar1, sDebugText_Util_WarpToMap_SelMax); GetMapName(gStringVar2, Overworld_GetMapHeaderByGroupAndId(gTasks[taskId].data[5], gTasks[taskId].data[3])->regionMapSectionId, 0); StringCopy(gStringVar3, gText_DigitIndicator[gTasks[taskId].data[4]]); @@ -1905,15 +1905,18 @@ static void DebugAction_Give_Item_SelectId(u8 taskId) } static void DebugAction_Give_Item_SelectQuantity(u8 taskId) { + u32 itemId = gTasks[taskId].data[5]; + if (JOY_NEW(DPAD_ANY)) { PlaySE(SE_SELECT); if (JOY_NEW(DPAD_UP)) { + u32 maxCapacity = (ItemId_GetPocket(itemId) - 1 == BERRIES_POCKET) ? MAX_BERRY_CAPACITY : MAX_BAG_ITEM_CAPACITY; gTasks[taskId].data[3] += sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] >= 100) - gTasks[taskId].data[3] = 99; + if (gTasks[taskId].data[3] > maxCapacity) + gTasks[taskId].data[3] = maxCapacity; } if (JOY_NEW(DPAD_DOWN)) { @@ -1947,7 +1950,7 @@ static void DebugAction_Give_Item_SelectQuantity(u8 taskId) DestroySprite(&gSprites[gTasks[taskId].data[6]]); //Destroy item icon PlaySE(MUS_OBTAIN_ITEM); - AddBagItem(gTasks[taskId].data[5], gTasks[taskId].data[3]); + AddBagItem(itemId, gTasks[taskId].data[3]); DebugAction_DestroyExtraWindow(taskId); } else if (JOY_NEW(B_BUTTON)) From 46bdd21e7a9c96f4dbad84f775daef920a4d58ca Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Tue, 7 Mar 2023 11:39:47 -0300 Subject: [PATCH 145/428] Cleaned up stray comment --- src/battle_script_commands.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index e8b23d43f9a9..360cef12522a 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -8670,7 +8670,6 @@ static bool32 CourtChangeSwapSideStatuses(void) SWAP(sideTimerPlayer->stickyWebBattlerSide, sideTimerOpp->stickyWebBattlerSide, temp); } -//cmd->case_, gActiveBattler, TRUE static void HandleScriptMegaPrimal(u32 caseId, u32 battlerId, bool32 isMega) { struct Pokemon *mon = GetBattlerPartyData(battlerId); From f6089a00578ca9e5779f30b4b64f94349f9234e3 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 7 Mar 2023 22:34:57 +0100 Subject: [PATCH 146/428] Mega Evolution after switching and based on speed --- data/battle_scripts_1.s | 8 +-- data/scripts/debug.inc | 1 + include/battle.h | 3 +- include/battle_util.h | 1 - src/battle_main.c | 133 +++++++++++++++++++++---------------- src/battle_util.c | 5 +- src/data/trainer_parties.h | 16 ++--- test/mega_evolution.c | 38 +++++++++++ 8 files changed, 133 insertions(+), 72 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 8b93edb78a56..ef4a739a5409 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -561,7 +561,7 @@ BattleScript_ShellTrapSetUp:: playanimation BS_ATTACKER, B_ANIM_SHELL_TRAP_SETUP, NULL printstring STRINGID_PREPARESHELLTRAP waitmessage B_WAIT_TIME_LONG - end2 + end3 BattleScript_EffectShellTrap:: attackcanceler @@ -635,7 +635,7 @@ BattleScript_BeakBlastSetUp:: playanimation BS_ATTACKER, B_ANIM_BEAK_BLAST_SETUP, NULL printstring STRINGID_HEATUPBEAK waitmessage B_WAIT_TIME_LONG - end2 + end3 BattleScript_BeakBlastBurn:: setbyte cMULTISTRING_CHOOSER, 0 @@ -7825,7 +7825,7 @@ BattleScript_FocusPunchSetUp:: playanimation BS_ATTACKER, B_ANIM_FOCUS_PUNCH_SETUP printstring STRINGID_PKMNTIGHTENINGFOCUS waitmessage B_WAIT_TIME_LONG - end2 + end3 BattleScript_MegaEvolution:: printstring STRINGID_MEGAEVOREACTING @@ -7840,7 +7840,7 @@ BattleScript_MegaEvolutionAfeterString: printstring STRINGID_MEGAEVOEVOLVED waitmessage B_WAIT_TIME_LONG switchinabilities BS_ATTACKER - end2 + end3 BattleScript_WishMegaEvolution:: printstring STRINGID_FERVENTWISHREACHED diff --git a/data/scripts/debug.inc b/data/scripts/debug.inc index 191fe69327a5..a6f68b1f7035 100644 --- a/data/scripts/debug.inc +++ b/data/scripts/debug.inc @@ -55,6 +55,7 @@ Debug_FlagsNotSetMessage_Text: .string "'include/constants/overworld{UNDERSCORE}config.h'!$" Debug_Script_1:: + multi_fixed_2_vs_2 TRAINER_ROXANNE_2, Debug_FlagsNotSetMessage_Text, TRAINER_ROXANNE_3, Debug_FlagsNotSetMessage_Text, TRAINER_ROXANNE_4, 0 end Debug_Script_2:: diff --git a/include/battle.h b/include/battle.h index 83b552e7e11b..1ff9ed8ceff1 100644 --- a/include/battle.h +++ b/include/battle.h @@ -535,7 +535,7 @@ struct BattleStruct u8 dynamicMoveType; u8 wrappedBy[MAX_BATTLERS_COUNT]; u16 assistPossibleMoves[PARTY_SIZE * MAX_MON_MOVES]; // Each of mons can know max 4 moves. - u8 focusPunchBattlerId; + u8 focusPunchBattlers; // as bits u8 battlerPreventingSwitchout; u8 moneyMultiplier:6; u8 moneyMultiplierItem:1; @@ -656,6 +656,7 @@ struct BattleStruct u8 attackerBeforeBounce:2; u8 beatUpSlot:3; bool8 hitSwitchTargetFailed:1; + bool8 effectsBeforeUsingMoveDone:1; // Mega Evo and Focus Punch/Shell Trap effects. u8 targetsDone[MAX_BATTLERS_COUNT]; // Each battler as a bit. u16 overwrittenAbilities[MAX_BATTLERS_COUNT]; // abilities overwritten during battle (keep separate from battle history in case of switching) bool8 allowedToChangeFormInWeather[PARTY_SIZE][2]; // For each party member and side, used by Ice Face. diff --git a/include/battle_util.h b/include/battle_util.h index 0661081e43b8..327ca35ac2bf 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -195,7 +195,6 @@ bool32 IsHealBlockPreventingMove(u32 battler, u32 move); bool32 HasEnoughHpToEatBerry(u32 battlerId, u32 hpFraction, u32 itemId); bool32 IsPartnerMonFromSameTrainer(u8 battlerId); u8 GetSplitBasedOnStats(u8 battlerId); -void SortBattlersBySpeed(u8 *battlers, bool8 slowToFast); bool32 TestSheerForceFlag(u8 battler, u16 move); void TryRestoreStolenItems(void); bool32 CanStealItem(u8 battlerStealing, u8 battlerItem, u16 item); diff --git a/src/battle_main.c b/src/battle_main.c index 9ea3b66446ec..4a9910e70ea8 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -4773,9 +4773,6 @@ static void SetActionsAndBattlersTurnOrder(void) turnOrderId++; } } - gBattleMainFunc = CheckMegaEvolutionBeforeTurn; - gBattleStruct->mega.battlerId = 0; - return; } else { @@ -4821,8 +4818,8 @@ static void SetActionsAndBattlersTurnOrder(void) } } } - gBattleMainFunc = CheckMegaEvolutionBeforeTurn; - gBattleStruct->mega.battlerId = 0; + gBattleMainFunc = CheckQuickClaw_CustapBerryActivation; + gBattleStruct->quickClawBattlerId = 0; } static void TurnValuesCleanUp(bool8 var0) @@ -4871,92 +4868,104 @@ void SpecialStatusesClear(void) memset(&gSpecialStatuses, 0, sizeof(gSpecialStatuses)); } -static void CheckMegaEvolutionBeforeTurn(void) +static void PopulateArrayWithBattlers(u8 *battlers) { - if (!(gHitMarker & HITMARKER_RUN)) + u32 i; + for (i = 0; i < gBattlersCount; i++) + battlers[i] = i; +} + +static bool32 TryDoMegaEvosBeforeMoves(void) +{ + if (!(gHitMarker & HITMARKER_RUN) && gBattleStruct->mega.toEvolve) { - while (gBattleStruct->mega.battlerId < gBattlersCount) + u32 i; + struct Pokemon *mon; + u8 megaOrder[MAX_BATTLERS_COUNT]; + + PopulateArrayWithBattlers(megaOrder); + SortBattlersBySpeed(megaOrder, FALSE); + for (i = 0; i < gBattlersCount; i++) { - gActiveBattler = gBattlerAttacker = gBattleStruct->mega.battlerId; - gBattleStruct->mega.battlerId++; - if (gBattleStruct->mega.toEvolve & gBitTable[gActiveBattler] - && !(gProtectStructs[gActiveBattler].noValidMoves)) + if (gBattleStruct->mega.toEvolve & gBitTable[megaOrder[i]] + && !(gProtectStructs[megaOrder[i]].noValidMoves)) { - struct Pokemon *mon = GetBattlerPartyData(gActiveBattler); - + gActiveBattler = gBattlerAttacker = megaOrder[i]; gBattleStruct->mega.toEvolve &= ~(gBitTable[gActiveBattler]); gLastUsedItem = gBattleMons[gActiveBattler].item; + mon = GetBattlerPartyData(gActiveBattler); if (GetWishMegaEvolutionSpecies(GetMonData(mon, MON_DATA_SPECIES), GetMonData(mon, MON_DATA_MOVE1), GetMonData(mon, MON_DATA_MOVE2), GetMonData(mon, MON_DATA_MOVE3), GetMonData(mon, MON_DATA_MOVE4))) BattleScriptExecute(BattleScript_WishMegaEvolution); else BattleScriptExecute(BattleScript_MegaEvolution); - return; + return TRUE; } } } - #if B_MEGA_EVO_TURN_ORDER <= GEN_6 - gBattleMainFunc = CheckChosenMoveForEffectsBeforeTurnStarts; - gBattleStruct->focusPunchBattlerId = 0; - #else - gBattleMainFunc = TryChangeTurnOrder; // This will just do nothing if no mon has mega evolved + #if B_MEGA_EVO_TURN_ORDER >= GEN_7 + TryChangeTurnOrder(); // This will just do nothing if no mon has mega evolved. #endif + return FALSE; } -// In gen7, priority and speed are recalculated during the turn in which a pokemon mega evolves -static void TryChangeTurnOrder(void) -{ - s32 i, j; - for (i = 0; i < gBattlersCount - 1; i++) - { - for (j = i + 1; j < gBattlersCount; j++) - { - u8 battler1 = gBattlerByTurnOrder[i]; - u8 battler2 = gBattlerByTurnOrder[j]; - if (gActionsByTurnOrder[i] == B_ACTION_USE_MOVE - && gActionsByTurnOrder[j] == B_ACTION_USE_MOVE) - { - if (GetWhoStrikesFirst(battler1, battler2, FALSE)) - SwapTurnOrder(i, j); - } - } - } - gBattleMainFunc = CheckChosenMoveForEffectsBeforeTurnStarts; - gBattleStruct->focusPunchBattlerId = 0; -} - -static void CheckChosenMoveForEffectsBeforeTurnStarts(void) +static bool32 TryDoMoveEffectsBeforeMoves(void) { - u32 i; - if (!(gHitMarker & HITMARKER_RUN)) { - while (gBattleStruct->focusPunchBattlerId < gBattlersCount) + u32 i; + struct Pokemon *mon; + u8 battlers[MAX_BATTLERS_COUNT]; + + PopulateArrayWithBattlers(battlers); + SortBattlersBySpeed(battlers, FALSE); + for (i = 0; i < gBattlersCount; i++) { - gActiveBattler = gBattlerAttacker = gBattleStruct->focusPunchBattlerId; - gBattleStruct->focusPunchBattlerId++; - if (!(gBattleMons[gActiveBattler].status1 & STATUS1_SLEEP) - && !(gDisableStructs[gBattlerAttacker].truantCounter) - && !(gProtectStructs[gActiveBattler].noValidMoves)) + if (!(gBattleStruct->focusPunchBattlers & gBitTable[battlers[i]]) + && !(gBattleMons[battlers[i]].status1 & STATUS1_SLEEP) + && !(gDisableStructs[battlers[i]].truantCounter) + && !(gProtectStructs[battlers[i]].noValidMoves)) { + gBattleStruct->focusPunchBattlers |= gBitTable[battlers[i]]; + gActiveBattler = gBattlerAttacker = battlers[i]; switch (gChosenMoveByBattler[gActiveBattler]) { case MOVE_FOCUS_PUNCH: BattleScriptExecute(BattleScript_FocusPunchSetUp); - return; + return TRUE; case MOVE_BEAK_BLAST: BattleScriptExecute(BattleScript_BeakBlastSetUp); - return; + return TRUE; case MOVE_SHELL_TRAP: BattleScriptExecute(BattleScript_ShellTrapSetUp); - return; + return TRUE; } } } } - gBattleMainFunc = CheckQuickClaw_CustapBerryActivation; - gBattleStruct->quickClawBattlerId = 0; + return FALSE; +} + +// In gen7, priority and speed are recalculated during the turn in which a pokemon mega evolves +static void TryChangeTurnOrder(void) +{ + u32 i, j; + for (i = 0; i < gBattlersCount - 1; i++) + { + for (j = i + 1; j < gBattlersCount; j++) + { + u32 battler1 = gBattlerByTurnOrder[i]; + u32 battler2 = gBattlerByTurnOrder[j]; + + if (gActionsByTurnOrder[i] == B_ACTION_USE_MOVE + && gActionsByTurnOrder[j] == B_ACTION_USE_MOVE) + { + if (GetWhoStrikesFirst(battler1, battler2, FALSE)) + SwapTurnOrder(i, j); + } + } + } } static void CheckQuickClaw_CustapBerryActivation(void) @@ -5011,6 +5020,8 @@ static void CheckQuickClaw_CustapBerryActivation(void) gCurrentTurnActionNumber = 0; gCurrentActionFuncId = gActionsByTurnOrder[0]; gBattleStruct->dynamicMoveType = 0; + gBattleStruct->effectsBeforeUsingMoveDone = FALSE; + gBattleStruct->focusPunchBattlers = 0; for (i = 0; i < MAX_BATTLERS_COUNT; i++) { gBattleStruct->ateBoost[i] = FALSE; @@ -5029,6 +5040,16 @@ static void RunTurnActionsFunctions(void) if (gBattleOutcome != 0) gCurrentActionFuncId = B_ACTION_FINISHED; + // Mega Evolve / Focus Punch-like moves after switching, items, running, but before using a move. + if (gCurrentActionFuncId == B_ACTION_USE_MOVE && !gBattleStruct->effectsBeforeUsingMoveDone) + { + if (TryDoMegaEvosBeforeMoves()) + return; + else if (TryDoMoveEffectsBeforeMoves()) + return; + gBattleStruct->effectsBeforeUsingMoveDone = TRUE; + } + *(&gBattleStruct->savedTurnActionNumber) = gCurrentTurnActionNumber; sTurnActionsFuncsTable[gCurrentActionFuncId](); diff --git a/src/battle_util.c b/src/battle_util.c index 9520e761f797..e70973325104 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -1674,7 +1674,8 @@ void BattleScriptPushCursor(void) void BattleScriptPop(void) { - gBattlescriptCurrInstr = gBattleResources->battleScriptsStack->ptr[--gBattleResources->battleScriptsStack->size]; + if (gBattleResources->battleScriptsStack->size != 0) + gBattlescriptCurrInstr = gBattleResources->battleScriptsStack->ptr[--gBattleResources->battleScriptsStack->size]; } static bool32 IsGravityPreventingMove(u32 move) @@ -10567,7 +10568,7 @@ bool32 IsEntrainmentTargetOrSimpleBeamBannedAbility(u16 ability) void SortBattlersBySpeed(u8 *battlers, bool8 slowToFast) { int i, j, currSpeed, currBattler; - u16 speeds[4] = {0}; + u16 speeds[MAX_BATTLERS_COUNT] = {0}; for (i = 0; i < gBattlersCount; i++) speeds[i] = GetBattlerTotalSpeedStat(battlers[i]); diff --git a/src/data/trainer_parties.h b/src/data/trainer_parties.h index 1759120b7f3c..b4f617579970 100644 --- a/src/data/trainer_parties.h +++ b/src/data/trainer_parties.h @@ -10301,9 +10301,9 @@ static const struct TrainerMonNoItemDefaultMoves sParty_MayRustboroTorchic[] = { static const struct TrainerMonItemCustomMoves sParty_Roxanne2[] = { { .iv = 255, - .lvl = 32, - .species = SPECIES_GOLEM, - .heldItem = ITEM_NONE, + .lvl = 5, + .species = SPECIES_AMPHAROS, + .heldItem = ITEM_AMPHAROSITE, .moves = {MOVE_PROTECT, MOVE_ROLLOUT, MOVE_MAGNITUDE, MOVE_EXPLOSION} }, { @@ -10333,8 +10333,8 @@ static const struct TrainerMonItemCustomMoves sParty_Roxanne3[] = { { .iv = 255, .lvl = 37, - .species = SPECIES_OMANYTE, - .heldItem = ITEM_NONE, + .species = SPECIES_MANECTRIC, + .heldItem = ITEM_MANECTITE, .moves = {MOVE_PROTECT, MOVE_ICE_BEAM, MOVE_ROCK_SLIDE, MOVE_SURF} }, { @@ -10370,9 +10370,9 @@ static const struct TrainerMonItemCustomMoves sParty_Roxanne3[] = { static const struct TrainerMonItemCustomMoves sParty_Roxanne4[] = { { .iv = 255, - .lvl = 42, - .species = SPECIES_OMASTAR, - .heldItem = ITEM_NONE, + .lvl = 100, + .species = SPECIES_GARDEVOIR, + .heldItem = ITEM_GARDEVOIRITE, .moves = {MOVE_PROTECT, MOVE_ICE_BEAM, MOVE_ROCK_SLIDE, MOVE_SURF} }, { diff --git a/test/mega_evolution.c b/test/mega_evolution.c index 13e9cd5b22a6..49861daaa8f3 100644 --- a/test/mega_evolution.c +++ b/test/mega_evolution.c @@ -17,6 +17,44 @@ SINGLE_BATTLE_TEST("Venusaur can Mega Evolve holding Venusaurite") } } +DOUBLE_BATTLE_TEST("Mega Evolution's order is determined by Speed - opponent faster") +{ + GIVEN { + PLAYER(SPECIES_VENUSAUR) { Item(ITEM_VENUSAURITE); Speed(1); } + PLAYER(SPECIES_WOBBUFFET) { Speed(3);} + OPPONENT(SPECIES_GARDEVOIR) { Item(ITEM_GARDEVOIRITE); Speed(3);} + OPPONENT(SPECIES_WOBBUFFET) { Speed(4);} + } WHEN { + TURN { MOVE(opponentLeft, MOVE_CELEBRATE, megaEvolve: TRUE); MOVE(playerLeft, MOVE_CELEBRATE, megaEvolve: TRUE); } + } SCENE { + MESSAGE("Foe Gardevoir's Gardevoirite is reacting to 's Mega Ring!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, opponentLeft); + MESSAGE("Foe Gardevoir has Mega Evolved into Mega Gardevoir!"); + MESSAGE("Venusaur's Venusaurite is reacting to 1's Mega Ring!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, playerLeft); + MESSAGE("Venusaur has Mega Evolved into Mega Venusaur!"); + } +} + +DOUBLE_BATTLE_TEST("Mega Evolution's order is determined by Speed - player faster") +{ + GIVEN { + PLAYER(SPECIES_VENUSAUR) { Item(ITEM_VENUSAURITE); Speed(5); } + PLAYER(SPECIES_WOBBUFFET) { Speed(3);} + OPPONENT(SPECIES_GARDEVOIR) { Item(ITEM_GARDEVOIRITE); Speed(2);} + OPPONENT(SPECIES_WOBBUFFET) { Speed(4);} + } WHEN { + TURN { MOVE(opponentLeft, MOVE_CELEBRATE, megaEvolve: TRUE); MOVE(playerLeft, MOVE_CELEBRATE, megaEvolve: TRUE); } + } SCENE { + MESSAGE("Venusaur's Venusaurite is reacting to 1's Mega Ring!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, playerLeft); + MESSAGE("Venusaur has Mega Evolved into Mega Venusaur!"); + MESSAGE("Foe Gardevoir's Gardevoirite is reacting to 's Mega Ring!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, opponentLeft); + MESSAGE("Foe Gardevoir has Mega Evolved into Mega Gardevoir!"); + } +} + SINGLE_BATTLE_TEST("Rayquaza can Mega Evolve knowing Dragon Ascent") { GIVEN { From fdebc994d23be0dedfa64f54fe2bf01c46e0acbe Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Tue, 7 Mar 2023 19:14:38 -0300 Subject: [PATCH 147/428] Updated Supreme Overlord's effect's code --- include/battle.h | 1 + src/battle_util.c | 48 ++++++++++++++++++++++++----------------------- 2 files changed, 26 insertions(+), 23 deletions(-) diff --git a/include/battle.h b/include/battle.h index 83b552e7e11b..a43fc65cdf5a 100644 --- a/include/battle.h +++ b/include/battle.h @@ -662,6 +662,7 @@ struct BattleStruct u8 battleBondTransformed[NUM_BATTLE_SIDES]; // Bitfield for each party. u8 storedHealingWish:4; // Each battler as a bit. u8 storedLunarDance:4; // Each battler as a bit. + u16 supremeOverlordModifier[MAX_BATTLERS_COUNT]; }; #define F_DYNAMIC_TYPE_1 (1 << 6) diff --git a/src/battle_util.c b/src/battle_util.c index 9520e761f797..4b50bc704515 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -62,6 +62,7 @@ static u8 GetFlingPowerFromItemId(u16 itemId); static void SetRandomMultiHitCounter(); static u32 GetBattlerItemHoldEffectParam(u8 battlerId, u16 item); static u16 GetInverseTypeMultiplier(u16 multiplier); +static u16 GetSupremeOverlordModifier(u8 battlerId); extern const u8 *const gBattleScriptsForMoveEffects[]; extern const u8 *const gBattlescriptsForRunningByItem[]; @@ -4319,6 +4320,28 @@ bool8 ChangeTypeBasedOnTerrain(u8 battlerId) return TRUE; } +// Supreme Overlord adds a damage boost for each fainted ally. +// The first ally adds a x1.2 boost, and subsequent allies add an extra x0.1 boost each. +static u16 GetSupremeOverlordModifier(u8 battlerId) +{ + u32 i; + u8 side = GetBattlerSide(battlerId); + struct Pokemon *party = (side == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty; + u16 modifier = UQ_4_12(1.0); + bool8 appliedFirstBoost = FALSE; + + for (i = 0; i < PARTY_SIZE; i++) + { + if (GetMonData(&party[i], MON_DATA_SPECIES) != SPECIES_NONE + && !GetMonData(&party[i], MON_DATA_IS_EGG) + && GetMonData(&party[i], MON_DATA_HP) == 0) + modifier += (!appliedFirstBoost) ? UQ_4_12(0.2) : UQ_4_12(0.1); + appliedFirstBoost = TRUE; + } + + return modifier; +} + u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 moveArg) { u8 effect = 0; @@ -4867,6 +4890,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move if (!gSpecialStatuses[battler].switchInAbilityDone && CountUsablePartyMons(battler) < PARTY_SIZE) { gSpecialStatuses[battler].switchInAbilityDone = TRUE; + gBattleStruct->supremeOverlordModifier[battler] = GetSupremeOverlordModifier(battler); BattleScriptPushCursorAndCallback(BattleScript_SupremeOverlordActivates); effect++; } @@ -8761,28 +8785,6 @@ static u16 CalcMoveBasePower(u16 move, u8 battlerAtk, u8 battlerDef) return basePower; } -// Supreme Overlord adds a damage boost for each fainted ally. -// The first ally adds a x1.2 boost, and subsequent allies add an extra x0.1 boost each. -static u16 GetSupremeOverlordModifier(u8 battlerId) -{ - u32 i; - u8 side = GetBattlerSide(battlerId); - struct Pokemon *party = (side == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty; - u16 modifier = UQ_4_12(1.0); - bool8 appliedFirstBoost = FALSE; - - for (i = 0; i < PARTY_SIZE; i++) - { - if (GetMonData(&party[i], MON_DATA_SPECIES) != SPECIES_NONE - && !GetMonData(&party[i], MON_DATA_IS_EGG) - && GetMonData(&party[i], MON_DATA_HP) == 0) - modifier += (!appliedFirstBoost) ? UQ_4_12(0.2) : UQ_4_12(0.1); - appliedFirstBoost = TRUE; - } - - return modifier; -} - static u32 CalcMoveBasePowerAfterModifiers(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, bool32 updateFlags) { u32 i; @@ -8932,7 +8934,7 @@ static u32 CalcMoveBasePowerAfterModifiers(u16 move, u8 battlerAtk, u8 battlerDe MulModifier(&modifier, UQ_4_12(1.5)); break; case ABILITY_SUPREME_OVERLORD: - MulModifier(&modifier, GetSupremeOverlordModifier(battlerAtk)); + MulModifier(&modifier, gBattleStruct->supremeOverlordModifier[battlerAtk]); break; } From eb49e28e6cb9c57d03d5a5d952735a0d4c57fe7b Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Wed, 8 Mar 2023 08:26:33 -0300 Subject: [PATCH 148/428] Renamed TEST_RESULT_SKIP to TEST_RESULT_ASSUMPTION_FAIL --- test/test.h | 4 ++-- test/test_runner.c | 8 ++++---- test/test_runner_battle.c | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/test/test.h b/test/test.h index c69a4fa925d1..27475bb48e40 100644 --- a/test/test.h +++ b/test/test.h @@ -9,7 +9,7 @@ enum TestResult { TEST_RESULT_FAIL, TEST_RESULT_PASS, - TEST_RESULT_SKIP, + TEST_RESULT_ASSUMPTION_FAIL, TEST_RESULT_INVALID, TEST_RESULT_ERROR, TEST_RESULT_TIMEOUT, @@ -77,7 +77,7 @@ s32 MgbaPrintf_(const char *fmt, ...); do \ { \ if (!(c)) \ - Test_ExitWithResult(TEST_RESULT_SKIP, "%s:%d: ASSUME failed", gTestRunnerState.test->filename, __LINE__); \ + Test_ExitWithResult(TEST_RESULT_ASSUMPTION_FAIL, "%s:%d: ASSUME failed", gTestRunnerState.test->filename, __LINE__); \ } while (0) #define EXPECT(c) \ diff --git a/test/test_runner.c b/test/test_runner.c index eb5d12c77893..9d33301f9d49 100644 --- a/test/test_runner.c +++ b/test/test_runner.c @@ -121,7 +121,7 @@ void CB2_TestRunner(void) // NOTE: Assumes that the compiler interns __FILE__. if (gTestRunnerState.skipFilename == gTestRunnerState.test->filename) { - gTestRunnerState.result = TEST_RESULT_SKIP; + gTestRunnerState.result = TEST_RESULT_ASSUMPTION_FAIL; } else { @@ -157,7 +157,7 @@ void CB2_TestRunner(void) color = "\e[32m"; MgbaPrintf_(":N%s", gTestRunnerState.test->name); } - else if (gTestRunnerState.result != TEST_RESULT_SKIP || gTestRunnerSkipIsFail) + else if (gTestRunnerState.result != TEST_RESULT_ASSUMPTION_FAIL || gTestRunnerSkipIsFail) { gTestRunnerState.exitCode = 1; color = "\e[31m"; @@ -187,7 +187,7 @@ void CB2_TestRunner(void) } break; case TEST_RESULT_PASS: result = "PASS"; break; - case TEST_RESULT_SKIP: + case TEST_RESULT_ASSUMPTION_FAIL: result = "ASSUMPTION_FAIL"; color = "\e[33m"; break; @@ -199,7 +199,7 @@ void CB2_TestRunner(void) if (gTestRunnerState.result == TEST_RESULT_PASS) MgbaPrintf_(":P%s%s\e[0m", color, result); - else if (gTestRunnerState.result == TEST_RESULT_SKIP) + else if (gTestRunnerState.result == TEST_RESULT_ASSUMPTION_FAIL) MgbaPrintf_(":A%s%s\e[0m", color, result); else if (gTestRunnerState.expectedResult == gTestRunnerState.result) MgbaPrintf_(":K%s%s\e[0m", color, result); diff --git a/test/test_runner_battle.c b/test/test_runner_battle.c index e40ed3e50b88..ec7ba275c2c2 100644 --- a/test/test_runner_battle.c +++ b/test/test_runner_battle.c @@ -720,7 +720,7 @@ static void CB2_BattleTest_NextTrial(void) case TEST_RESULT_PASS: STATE->observedPasses++; break; - case TEST_RESULT_SKIP: + case TEST_RESULT_ASSUMPTION_FAIL: STATE->skippedTrials++; if (STATE->skippedTrials > STATE->trials / 4) Test_ExitWithResult(TEST_RESULT_INVALID, "25%% of the trials were SKIPed"); From 24d8d3fbee471d51d119658765fa1ccbf9a35687 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Wed, 8 Mar 2023 09:09:48 -0300 Subject: [PATCH 149/428] Updated switch format --- test/test_runner.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/test/test_runner.c b/test/test_runner.c index 9d33301f9d49..c8bd0f3a92de 100644 --- a/test/test_runner.c +++ b/test/test_runner.c @@ -186,15 +186,25 @@ void CB2_TestRunner(void) result = "FAIL"; } break; - case TEST_RESULT_PASS: result = "PASS"; break; + case TEST_RESULT_PASS: + result = "PASS"; + break; case TEST_RESULT_ASSUMPTION_FAIL: result = "ASSUMPTION_FAIL"; color = "\e[33m"; break; - case TEST_RESULT_INVALID: result = "INVALID"; break; - case TEST_RESULT_ERROR: result = "ERROR"; break; - case TEST_RESULT_TIMEOUT: result = "TIMEOUT"; break; - default: result = "UNKNOWN"; break; + case TEST_RESULT_INVALID: + result = "INVALID"; + break; + case TEST_RESULT_ERROR: + result = "ERROR"; + break; + case TEST_RESULT_TIMEOUT: + result = "TIMEOUT"; + break; + default: + result = "UNKNOWN"; + break; } if (gTestRunnerState.result == TEST_RESULT_PASS) From 51c8edd8255532727a57022ebc98a570815ed5fb Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Wed, 8 Mar 2023 13:22:53 +0100 Subject: [PATCH 150/428] Add tests for Mega Evo, Focus Punch, Beak Blast --- src/battle_message.c | 6 +- src/battle_script_commands.c | 3 + src/data/trainer_parties.h | 22 +++---- test/mega_evolution.c | 49 ++++++++++++++ test/move_effect_beak_blast.c | 113 +++++++++++++++++++++++++++++++++ test/move_effect_focus_punch.c | 76 ++++++++++++++++++++++ 6 files changed, 257 insertions(+), 12 deletions(-) create mode 100644 test/move_effect_beak_blast.c create mode 100644 test/move_effect_focus_punch.c diff --git a/src/battle_message.c b/src/battle_message.c index cf57247bf875..705fdc326403 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -3027,7 +3027,11 @@ static const u8 *BattleStringGetPlayerName(u8 *text, u8 battlerId) toCpy = gSaveBlock2Ptr->playerName; break; case B_POSITION_PLAYER_RIGHT: - if (gBattleTypeFlags & BATTLE_TYPE_LINK && gBattleTypeFlags & (BATTLE_TYPE_RECORDED | BATTLE_TYPE_MULTI)) + if ((gBattleTypeFlags & BATTLE_TYPE_RECORDED) && !(gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_INGAME_PARTNER))) + { + toCpy = gLinkPlayers[0].name; + } + else if ((gBattleTypeFlags & BATTLE_TYPE_LINK) && gBattleTypeFlags & (BATTLE_TYPE_RECORDED | BATTLE_TYPE_MULTI)) { toCpy = gLinkPlayers[2].name; } diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 126ca06fd11e..caad6393c30a 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -5464,6 +5464,9 @@ static void Cmd_moveend(void) { gProtectStructs[gBattlerAttacker].touchedProtectLike = FALSE; gBattleMons[gBattlerAttacker].status1 = STATUS1_BURN; + gActiveBattler = gBattlerAttacker; + BtlController_EmitSetMonData(BUFFER_A, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gActiveBattler].status1), &gBattleMons[gActiveBattler].status1); + MarkBattlerForControllerExec(gActiveBattler); BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_BeakBlastBurn; effect = 1; diff --git a/src/data/trainer_parties.h b/src/data/trainer_parties.h index b4f617579970..76c3b6ca43e0 100644 --- a/src/data/trainer_parties.h +++ b/src/data/trainer_parties.h @@ -10301,31 +10301,31 @@ static const struct TrainerMonNoItemDefaultMoves sParty_MayRustboroTorchic[] = { static const struct TrainerMonItemCustomMoves sParty_Roxanne2[] = { { .iv = 255, - .lvl = 5, - .species = SPECIES_AMPHAROS, - .heldItem = ITEM_AMPHAROSITE, - .moves = {MOVE_PROTECT, MOVE_ROLLOUT, MOVE_MAGNITUDE, MOVE_EXPLOSION} + .lvl = 100, + .species = SPECIES_BEEDRILL, + .heldItem = 0, + .moves = {MOVE_FLING} }, { .iv = 255, - .lvl = 35, + .lvl = 100, .species = SPECIES_KABUTO, .heldItem = ITEM_SITRUS_BERRY, .moves = {MOVE_SWORDS_DANCE, MOVE_ICE_BEAM, MOVE_SURF, MOVE_ROCK_SLIDE} }, { .iv = 255, - .lvl = 35, - .species = SPECIES_ONIX, + .lvl = 100, + .species = SPECIES_THUNDURUS, .heldItem = ITEM_NONE, - .moves = {MOVE_IRON_TAIL, MOVE_EXPLOSION, MOVE_ROAR, MOVE_ROCK_SLIDE} + .moves = {MOVE_THUNDER, MOVE_EXPLOSION, MOVE_ROAR, MOVE_ROCK_SLIDE} }, { .iv = 255, - .lvl = 37, - .species = SPECIES_NOSEPASS, + .lvl = 99, + .species = SPECIES_SABLEYE, .heldItem = ITEM_SITRUS_BERRY, - .moves = {MOVE_DOUBLE_TEAM, MOVE_EXPLOSION, MOVE_PROTECT, MOVE_ROCK_SLIDE} + .moves = {MOVE_DOUBLE_TEAM, MOVE_EXPLOSION, MOVE_DARK_PULSE, MOVE_IRON_HEAD} } }; diff --git a/test/mega_evolution.c b/test/mega_evolution.c index 49861daaa8f3..8d6af1d21d85 100644 --- a/test/mega_evolution.c +++ b/test/mega_evolution.c @@ -104,3 +104,52 @@ SINGLE_BATTLE_TEST("Abilities replaced by Mega Evolution do not affect turn orde ASSUME(player->speed == 45); } } + +DOUBLE_BATTLE_TEST("Mega Evolution happens after switching, but before Focus Punch-like Moves") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_FOCUS_PUNCH].effect == EFFECT_FOCUS_PUNCH); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_VENUSAUR) { Item(ITEM_VENUSAURITE);} + OPPONENT(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { SWITCH(opponentRight, 2); MOVE(playerRight, MOVE_FOCUS_PUNCH, megaEvolve: TRUE, target:opponentLeft); MOVE(playerLeft, MOVE_FOCUS_PUNCH, target:opponentLeft); } + TURN {}; + } SCENE { + MESSAGE("2 withdrew Wobbuffet!"); + MESSAGE("2 sent out Wobbuffet!"); + + MESSAGE("Venusaur's Venusaurite is reacting to 1's Mega Ring!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, playerRight); + MESSAGE("Venusaur has Mega Evolved into Mega Venusaur!"); + + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FOCUS_PUNCH_SETUP, playerRight); + MESSAGE("Venusaur is tightening its focus!"); + + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FOCUS_PUNCH_SETUP, playerLeft); + MESSAGE("Wobbuffet is tightening its focus!"); + } +} + +SINGLE_BATTLE_TEST("Regular Mega Evolution and Fervent Wish Mega Evolution can happen on the same turn") +{ + GIVEN { + PLAYER(SPECIES_RAYQUAZA) { Moves(MOVE_DRAGON_ASCENT, MOVE_CELEBRATE); Speed(3);} + OPPONENT(SPECIES_GARDEVOIR) { Item(ITEM_GARDEVOIRITE); Speed(2);} + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE, megaEvolve: TRUE); MOVE(opponent, MOVE_CELEBRATE, megaEvolve: TRUE); } + } SCENE { + MESSAGE("1's fervent wish has reached Rayquaza!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, player); + MESSAGE("Rayquaza has Mega Evolved into Mega Rayquaza!"); + + MESSAGE("Foe Gardevoir's Gardevoirite is reacting to 's Mega Ring!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, opponent); + MESSAGE("Foe Gardevoir has Mega Evolved into Mega Gardevoir!"); + } THEN { + EXPECT_EQ(player->species, SPECIES_RAYQUAZA_MEGA); + EXPECT_EQ(opponent->species, SPECIES_GARDEVOIR_MEGA); + } +} diff --git a/test/move_effect_beak_blast.c b/test/move_effect_beak_blast.c new file mode 100644 index 000000000000..448eb6973fa7 --- /dev/null +++ b/test/move_effect_beak_blast.c @@ -0,0 +1,113 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_BEAK_BLAST].effect == EFFECT_BEAK_BLAST); +} + +DOUBLE_BATTLE_TEST("Beak Blast's charging message is shown before other moves are used") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_BEAK_BLAST].priority < 0); + PLAYER(SPECIES_WYNAUT) {Speed(10); } + PLAYER(SPECIES_WOBBUFFET) {Speed(5); } + OPPONENT(SPECIES_WOBBUFFET) {Speed(2); } + OPPONENT(SPECIES_WOBBUFFET) {Speed(3); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_BEAK_BLAST, target:opponentLeft); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_BEAK_BLAST_SETUP, playerLeft); + MESSAGE("Wynaut started heating up its beak!"); + + MESSAGE("Wobbuffet used Celebrate!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, playerRight); + MESSAGE("Foe Wobbuffet used Celebrate!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponentRight); + MESSAGE("Foe Wobbuffet used Celebrate!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponentLeft); + + MESSAGE("Wynaut used Beak Blast!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_BEAK_BLAST, playerLeft); + HP_BAR(opponentLeft); + } +} + +DOUBLE_BATTLE_TEST("Beak Blast burns all who make contact with the pokemon") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_BEAK_BLAST].priority < 0); + ASSUME(gBattleMoves[MOVE_TACKLE].flags & FLAG_MAKES_CONTACT); + PLAYER(SPECIES_WYNAUT) {Speed(10); } + PLAYER(SPECIES_WOBBUFFET) {Speed(5); } + OPPONENT(SPECIES_WOBBUFFET) {Speed(3); } + OPPONENT(SPECIES_WOBBUFFET) {Speed(2); } + } WHEN { + TURN { MOVE(opponentLeft, MOVE_TACKLE, target:playerLeft); MOVE(opponentRight, MOVE_TACKLE, target:playerLeft); MOVE(playerLeft, MOVE_BEAK_BLAST, target:opponentLeft); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_BEAK_BLAST_SETUP, playerLeft); + MESSAGE("Wynaut started heating up its beak!"); + + MESSAGE("Wobbuffet used Celebrate!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, playerRight); + + MESSAGE("Foe Wobbuffet used Tackle!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentLeft); + HP_BAR(playerLeft); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, opponentLeft); + MESSAGE("Foe Wobbuffet was burned!"); + STATUS_ICON(opponentLeft, burn: TRUE); + + MESSAGE("Foe Wobbuffet used Tackle!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentRight); + HP_BAR(playerLeft); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, opponentRight); + MESSAGE("Foe Wobbuffet was burned!"); + STATUS_ICON(opponentRight, burn: TRUE); + + MESSAGE("Wynaut used Beak Blast!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_BEAK_BLAST, playerLeft); + HP_BAR(opponentLeft); + } +} + +SINGLE_BATTLE_TEST("Beak Blast burns only when contact moves are used") +{ + u32 move; + bool32 burn; + PARAMETRIZE { move = MOVE_TACKLE; burn = TRUE; } + PARAMETRIZE { move = MOVE_WATER_GUN; burn = FALSE; } + PARAMETRIZE { move = MOVE_LEER; burn = FALSE; } + + GIVEN { + ASSUME(gBattleMoves[MOVE_TACKLE].flags & FLAG_MAKES_CONTACT); + ASSUME(!(gBattleMoves[MOVE_WATER_GUN].flags & FLAG_MAKES_CONTACT)); + ASSUME(!(gBattleMoves[MOVE_LEER].flags & FLAG_MAKES_CONTACT)); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_BEAK_BLAST); MOVE(opponent, move); } + TURN {} + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_BEAK_BLAST_SETUP, player); + MESSAGE("Wobbuffet started heating up its beak!"); + ANIMATION(ANIM_TYPE_MOVE, move, opponent); + + if (burn) { + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, opponent); + MESSAGE("Foe Wobbuffet was burned!"); + STATUS_ICON(opponent, burn: TRUE); + } + else { + NONE_OF { + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, opponent); + MESSAGE("Foe Wobbuffet was burned!"); + STATUS_ICON(opponent, burn: TRUE); + } + } + + MESSAGE("Wobbuffet used Beak Blast!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_BEAK_BLAST, player); + HP_BAR(opponent); + } +} diff --git a/test/move_effect_focus_punch.c b/test/move_effect_focus_punch.c new file mode 100644 index 000000000000..62c500300186 --- /dev/null +++ b/test/move_effect_focus_punch.c @@ -0,0 +1,76 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_FOCUS_PUNCH].effect == EFFECT_FOCUS_PUNCH); +} + +SINGLE_BATTLE_TEST("Focus Punch activates only if not damaged") +{ + u32 move; + bool32 activate; + PARAMETRIZE { move = MOVE_TACKLE; activate = FALSE; } + PARAMETRIZE { move = MOVE_WATER_GUN; activate = FALSE; } + PARAMETRIZE { move = MOVE_LEER; activate = TRUE; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_FOCUS_PUNCH); MOVE(opponent, move); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FOCUS_PUNCH_SETUP, player); + MESSAGE("Wobbuffet is tightening its focus!"); + ANIMATION(ANIM_TYPE_MOVE, move, opponent); + + if (activate) { + MESSAGE("Wobbuffet used Focus Punch!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FOCUS_PUNCH, player); + HP_BAR(opponent); + } else { + MESSAGE("Wobbuffet lost its focus and couldn't move!"); + NONE_OF { + MESSAGE("Wobbuffet used Focus Punch!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FOCUS_PUNCH, player); + HP_BAR(opponent); + } + } + } +} + +DOUBLE_BATTLE_TEST("Focus Punch activation is based on Speed") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) {Speed(2) ;} + PLAYER(SPECIES_WYNAUT) {Speed(3) ;} + OPPONENT(SPECIES_WOBBUFFET) {Speed(1) ;} + OPPONENT(SPECIES_WYNAUT) {Speed(5) ;} + } WHEN { + TURN { MOVE(opponentRight, MOVE_FOCUS_PUNCH, target:playerLeft); MOVE(playerRight, MOVE_FOCUS_PUNCH, target:opponentLeft); MOVE(playerLeft, MOVE_FOCUS_PUNCH, target:opponentLeft); MOVE(opponentLeft, MOVE_FOCUS_PUNCH, target:playerLeft); } + } + SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FOCUS_PUNCH_SETUP, opponentRight); + MESSAGE("Foe Wynaut is tightening its focus!"); + + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FOCUS_PUNCH_SETUP, playerRight); + MESSAGE("Wynaut is tightening its focus!"); + + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FOCUS_PUNCH_SETUP, playerLeft); + MESSAGE("Wobbuffet is tightening its focus!"); + + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FOCUS_PUNCH_SETUP, opponentLeft); + MESSAGE("Foe Wobbuffet is tightening its focus!"); + + MESSAGE("Foe Wynaut used Focus Punch!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FOCUS_PUNCH, opponentRight); + HP_BAR(playerLeft); + + MESSAGE("Wynaut used Focus Punch!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FOCUS_PUNCH, playerRight); + HP_BAR(opponentLeft); + + MESSAGE("Wobbuffet lost its focus and couldn't move!"); + MESSAGE("Foe Wobbuffet lost its focus and couldn't move!"); + } +} From bf4735e87c613599b299986fc8e64b120e35a111 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Wed, 8 Mar 2023 13:41:08 +0100 Subject: [PATCH 151/428] remove test changes --- data/scripts/debug.inc | 1 - src/data/trainer_parties.h | 32 ++++++++++++++++---------------- 2 files changed, 16 insertions(+), 17 deletions(-) diff --git a/data/scripts/debug.inc b/data/scripts/debug.inc index a6f68b1f7035..191fe69327a5 100644 --- a/data/scripts/debug.inc +++ b/data/scripts/debug.inc @@ -55,7 +55,6 @@ Debug_FlagsNotSetMessage_Text: .string "'include/constants/overworld{UNDERSCORE}config.h'!$" Debug_Script_1:: - multi_fixed_2_vs_2 TRAINER_ROXANNE_2, Debug_FlagsNotSetMessage_Text, TRAINER_ROXANNE_3, Debug_FlagsNotSetMessage_Text, TRAINER_ROXANNE_4, 0 end Debug_Script_2:: diff --git a/src/data/trainer_parties.h b/src/data/trainer_parties.h index 76c3b6ca43e0..1759120b7f3c 100644 --- a/src/data/trainer_parties.h +++ b/src/data/trainer_parties.h @@ -10301,31 +10301,31 @@ static const struct TrainerMonNoItemDefaultMoves sParty_MayRustboroTorchic[] = { static const struct TrainerMonItemCustomMoves sParty_Roxanne2[] = { { .iv = 255, - .lvl = 100, - .species = SPECIES_BEEDRILL, - .heldItem = 0, - .moves = {MOVE_FLING} + .lvl = 32, + .species = SPECIES_GOLEM, + .heldItem = ITEM_NONE, + .moves = {MOVE_PROTECT, MOVE_ROLLOUT, MOVE_MAGNITUDE, MOVE_EXPLOSION} }, { .iv = 255, - .lvl = 100, + .lvl = 35, .species = SPECIES_KABUTO, .heldItem = ITEM_SITRUS_BERRY, .moves = {MOVE_SWORDS_DANCE, MOVE_ICE_BEAM, MOVE_SURF, MOVE_ROCK_SLIDE} }, { .iv = 255, - .lvl = 100, - .species = SPECIES_THUNDURUS, + .lvl = 35, + .species = SPECIES_ONIX, .heldItem = ITEM_NONE, - .moves = {MOVE_THUNDER, MOVE_EXPLOSION, MOVE_ROAR, MOVE_ROCK_SLIDE} + .moves = {MOVE_IRON_TAIL, MOVE_EXPLOSION, MOVE_ROAR, MOVE_ROCK_SLIDE} }, { .iv = 255, - .lvl = 99, - .species = SPECIES_SABLEYE, + .lvl = 37, + .species = SPECIES_NOSEPASS, .heldItem = ITEM_SITRUS_BERRY, - .moves = {MOVE_DOUBLE_TEAM, MOVE_EXPLOSION, MOVE_DARK_PULSE, MOVE_IRON_HEAD} + .moves = {MOVE_DOUBLE_TEAM, MOVE_EXPLOSION, MOVE_PROTECT, MOVE_ROCK_SLIDE} } }; @@ -10333,8 +10333,8 @@ static const struct TrainerMonItemCustomMoves sParty_Roxanne3[] = { { .iv = 255, .lvl = 37, - .species = SPECIES_MANECTRIC, - .heldItem = ITEM_MANECTITE, + .species = SPECIES_OMANYTE, + .heldItem = ITEM_NONE, .moves = {MOVE_PROTECT, MOVE_ICE_BEAM, MOVE_ROCK_SLIDE, MOVE_SURF} }, { @@ -10370,9 +10370,9 @@ static const struct TrainerMonItemCustomMoves sParty_Roxanne3[] = { static const struct TrainerMonItemCustomMoves sParty_Roxanne4[] = { { .iv = 255, - .lvl = 100, - .species = SPECIES_GARDEVOIR, - .heldItem = ITEM_GARDEVOIRITE, + .lvl = 42, + .species = SPECIES_OMASTAR, + .heldItem = ITEM_NONE, .moves = {MOVE_PROTECT, MOVE_ICE_BEAM, MOVE_ROCK_SLIDE, MOVE_SURF} }, { From 1553be1e7d946d1ecadb6c55a7c9a54a382381f8 Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Wed, 8 Mar 2023 15:46:14 +0100 Subject: [PATCH 152/428] Update overworld_config.h reference in the debug system --- data/scripts/debug.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/scripts/debug.inc b/data/scripts/debug.inc index 191fe69327a5..a158cc2f4700 100644 --- a/data/scripts/debug.inc +++ b/data/scripts/debug.inc @@ -52,7 +52,7 @@ Debug_FlagsNotSetMessage:: Debug_FlagsNotSetMessage_Text: .string "Feature unavailable!\n" .string "Please define a usable flag in:\l" - .string "'include/constants/overworld{UNDERSCORE}config.h'!$" + .string "'include/config/overworld.h'!$" Debug_Script_1:: end From c3674d6c1725caa65f5a36343293eaae5f4f483e Mon Sep 17 00:00:00 2001 From: Alex Date: Wed, 8 Mar 2023 17:23:44 +0100 Subject: [PATCH 153/428] Wrong score for Work Up and Growth --- src/battle_ai_main.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 2d4d075282b0..0badf92ddf9f 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -1117,10 +1117,11 @@ static s16 AI_CheckBadMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) break; case EFFECT_GROWTH: case EFFECT_ATTACK_SPATK_UP: // work up - if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_ATK) || !HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL)) + if ((!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_ATK) && !BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_SPATK)) + || (!HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL) && !HasMoveWithSplit(battlerAtk, SPLIT_SPECIAL))) score -= 10; - else if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_SPATK) || !HasMoveWithSplit(battlerAtk, SPLIT_SPECIAL)) - score -= 8; + // else if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_SPATK) || !HasMoveWithSplit(battlerAtk, SPLIT_SPECIAL)) + // score -= 8; break; case EFFECT_ROTOTILLER: if (isDoubleBattle) From 59a0def706a260dde608f0889d20be8cfe1941d1 Mon Sep 17 00:00:00 2001 From: Alex Date: Wed, 8 Mar 2023 17:30:07 +0100 Subject: [PATCH 154/428] delete leftover --- src/battle_ai_main.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 0badf92ddf9f..e1dbd2a6f4cb 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -1120,8 +1120,6 @@ static s16 AI_CheckBadMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) if ((!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_ATK) && !BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_SPATK)) || (!HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL) && !HasMoveWithSplit(battlerAtk, SPLIT_SPECIAL))) score -= 10; - // else if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_SPATK) || !HasMoveWithSplit(battlerAtk, SPLIT_SPECIAL)) - // score -= 8; break; case EFFECT_ROTOTILLER: if (isDoubleBattle) From dbf757be886736e6a0f8f813cc8c0a544124a287 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Wed, 8 Mar 2023 11:07:44 -0500 Subject: [PATCH 155/428] Treat map data as const --- include/field_control_avatar.h | 2 +- include/fieldmap.h | 4 ++-- include/global.fieldmap.h | 22 +++++++++++----------- src/event_object_movement.c | 24 ++++++++++++------------ src/field_control_avatar.c | 24 ++++++++++++------------ src/fieldmap.c | 32 ++++++++++++++++---------------- src/item_use.c | 6 +++--- src/overworld.c | 6 +++--- src/trainer_hill.c | 3 ++- 9 files changed, 62 insertions(+), 61 deletions(-) diff --git a/include/field_control_avatar.h b/include/field_control_avatar.h index e02fcd5afe0c..b259eb53c1b6 100644 --- a/include/field_control_avatar.h +++ b/include/field_control_avatar.h @@ -32,7 +32,7 @@ bool8 TryDoDiveWarp(struct MapPosition *position, u16 b); int SetCableClubWarp(void); u8 TrySetDiveWarp(void); const u8 *GetInteractedLinkPlayerScript(struct MapPosition *position, u8 metatileBehavior, u8 direction); -u8 *GetCoordEventScriptAtMapPosition(struct MapPosition *position); +const u8 *GetCoordEventScriptAtMapPosition(struct MapPosition *position); void ClearPoisonStepCounter(void); #endif // GUARD_FIELDCONTROLAVATAR_H diff --git a/include/fieldmap.h b/include/fieldmap.h index f2dbefae860f..47072bd1be08 100644 --- a/include/fieldmap.h +++ b/include/fieldmap.h @@ -48,8 +48,8 @@ void LoadSecondaryTilesetPalette(struct MapLayout const *mapLayout); void CopySecondaryTilesetToVramUsingHeap(struct MapLayout const *mapLayout); void CopyPrimaryTilesetToVram(const struct MapLayout *); void CopySecondaryTilesetToVram(const struct MapLayout *); -struct MapHeader const *const GetMapHeaderFromConnection(struct MapConnection *connection); -struct MapConnection *GetMapConnectionAtPos(s16 x, s16 y); +const struct MapHeader *const GetMapHeaderFromConnection(const struct MapConnection *connection); +const struct MapConnection *GetMapConnectionAtPos(s16 x, s16 y); void MapGridSetMetatileImpassabilityAt(int x, int y, bool32 impassable); // field_region_map.c diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h index d8fea5b23c4d..7461929c3a5c 100644 --- a/include/global.fieldmap.h +++ b/include/global.fieldmap.h @@ -50,10 +50,10 @@ struct MapLayout { /*0x00*/ s32 width; /*0x04*/ s32 height; - /*0x08*/ u16 *border; - /*0x0C*/ u16 *map; - /*0x10*/ struct Tileset *primaryTileset; - /*0x14*/ struct Tileset *secondaryTileset; + /*0x08*/ const u16 *border; + /*0x0C*/ const u16 *map; + /*0x10*/ const struct Tileset *primaryTileset; + /*0x14*/ const struct Tileset *secondaryTileset; }; struct BackupMapLayout @@ -98,7 +98,7 @@ struct CoordEvent u8 elevation; u16 trigger; u16 index; - u8 *script; + const u8 *script; }; struct BgEvent @@ -107,7 +107,7 @@ struct BgEvent u8 elevation; u8 kind; // The "kind" field determines how to access bgUnion union below. union { - u8 *script; + const u8 *script; struct { u16 item; u16 hiddenItemId; @@ -122,10 +122,10 @@ struct MapEvents u8 warpCount; u8 coordEventCount; u8 bgEventCount; - struct ObjectEventTemplate *objectEvents; - struct WarpEvent *warps; - struct CoordEvent *coordEvents; - struct BgEvent *bgEvents; + const struct ObjectEventTemplate *objectEvents; + const struct WarpEvent *warps; + const struct CoordEvent *coordEvents; + const struct BgEvent *bgEvents; }; struct MapConnection @@ -139,7 +139,7 @@ struct MapConnection struct MapConnections { s32 count; - struct MapConnection *connections; + const struct MapConnection *connections; }; struct MapHeader diff --git a/src/event_object_movement.c b/src/event_object_movement.c index be0c4ce26dfa..3025e0849a8c 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -131,9 +131,9 @@ static void SetObjectEventDynamicGraphicsId(struct ObjectEvent *); static void RemoveObjectEventInternal(struct ObjectEvent *); static u16 GetObjectEventFlagIdByObjectEventId(u8); static void UpdateObjectEventVisibility(struct ObjectEvent *, struct Sprite *); -static void MakeSpriteTemplateFromObjectEventTemplate(struct ObjectEventTemplate *, struct SpriteTemplate *, const struct SubspriteTable **); +static void MakeSpriteTemplateFromObjectEventTemplate(const struct ObjectEventTemplate *, struct SpriteTemplate *, const struct SubspriteTable **); static void GetObjectEventMovingCameraOffset(s16 *, s16 *); -static struct ObjectEventTemplate *GetObjectEventTemplateByLocalIdAndMap(u8, u8, u8); +static const struct ObjectEventTemplate *GetObjectEventTemplateByLocalIdAndMap(u8, u8, u8); static void LoadObjectEventPalette(u16); static void RemoveObjectEventIfOutsideView(struct ObjectEvent *); static void SpawnObjectEventOnReturnToField(u8, s16, s16); @@ -147,7 +147,7 @@ static void SpriteCB_CameraObject(struct Sprite *); static void CameraObject_0(struct Sprite *); static void CameraObject_1(struct Sprite *); static void CameraObject_2(struct Sprite *); -static struct ObjectEventTemplate *FindObjectEventTemplateByLocalId(u8, struct ObjectEventTemplate *, u8); +static const struct ObjectEventTemplate *FindObjectEventTemplateByLocalId(u8, const struct ObjectEventTemplate *, u8); static void ClearObjectEventMovement(struct ObjectEvent *, struct Sprite *); static void ObjectEventSetSingleMovement(struct ObjectEvent *, struct Sprite *, u8); static void SetSpriteDataForNormalStep(struct Sprite *, u8, u8); @@ -1267,7 +1267,7 @@ static u8 GetObjectEventIdByLocalId(u8 localId) return OBJECT_EVENTS_COUNT; } -static u8 InitObjectEventStateFromTemplate(struct ObjectEventTemplate *template, u8 mapNum, u8 mapGroup) +static u8 InitObjectEventStateFromTemplate(const struct ObjectEventTemplate *template, u8 mapNum, u8 mapGroup) { struct ObjectEvent *objectEvent; u8 objectEventId; @@ -1398,7 +1398,7 @@ void RemoveAllObjectEventsExceptPlayer(void) } } -static u8 TrySetupObjectEventSprite(struct ObjectEventTemplate *objectEventTemplate, struct SpriteTemplate *spriteTemplate, u8 mapNum, u8 mapGroup, s16 cameraX, s16 cameraY) +static u8 TrySetupObjectEventSprite(const struct ObjectEventTemplate *objectEventTemplate, struct SpriteTemplate *spriteTemplate, u8 mapNum, u8 mapGroup, s16 cameraX, s16 cameraY) { u8 spriteId; u8 paletteSlot; @@ -1458,7 +1458,7 @@ static u8 TrySetupObjectEventSprite(struct ObjectEventTemplate *objectEventTempl return objectEventId; } -static u8 TrySpawnObjectEventTemplate(struct ObjectEventTemplate *objectEventTemplate, u8 mapNum, u8 mapGroup, s16 cameraX, s16 cameraY) +static u8 TrySpawnObjectEventTemplate(const struct ObjectEventTemplate *objectEventTemplate, u8 mapNum, u8 mapGroup, s16 cameraX, s16 cameraY) { u8 objectEventId; struct SpriteTemplate spriteTemplate; @@ -1512,7 +1512,7 @@ u8 SpawnSpecialObjectEventParameterized(u8 graphicsId, u8 movementBehavior, u8 l u8 TrySpawnObjectEvent(u8 localId, u8 mapNum, u8 mapGroup) { - struct ObjectEventTemplate *objectEventTemplate; + const struct ObjectEventTemplate *objectEventTemplate; s16 cameraX, cameraY; objectEventTemplate = GetObjectEventTemplateByLocalIdAndMap(localId, mapNum, mapGroup); @@ -1542,7 +1542,7 @@ static void CopyObjectGraphicsInfoToSpriteTemplate_WithMovementType(u16 graphics CopyObjectGraphicsInfoToSpriteTemplate(graphicsId, sMovementTypeCallbacks[movementType], spriteTemplate, subspriteTables); } -static void MakeSpriteTemplateFromObjectEventTemplate(struct ObjectEventTemplate *objectEventTemplate, struct SpriteTemplate *spriteTemplate, const struct SubspriteTable **subspriteTables) +static void MakeSpriteTemplateFromObjectEventTemplate(const struct ObjectEventTemplate *objectEventTemplate, struct SpriteTemplate *spriteTemplate, const struct SubspriteTable **subspriteTables) { CopyObjectGraphicsInfoToSpriteTemplate_WithMovementType(objectEventTemplate->graphicsId, objectEventTemplate->movementType, spriteTemplate, subspriteTables); } @@ -2374,7 +2374,7 @@ const u8 *GetObjectEventScriptPointerByObjectEventId(u8 objectEventId) static u16 GetObjectEventFlagIdByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup) { - struct ObjectEventTemplate *obj = GetObjectEventTemplateByLocalIdAndMap(localId, mapNum, mapGroup); + const struct ObjectEventTemplate *obj = GetObjectEventTemplateByLocalIdAndMap(localId, mapNum, mapGroup); #ifdef UBFIX // BUG: The function may return NULL, and attempting to read from NULL may freeze the game using modern compilers. if (obj == NULL) @@ -2421,9 +2421,9 @@ u8 GetObjectEventBerryTreeId(u8 objectEventId) return gObjectEvents[objectEventId].trainerRange_berryTreeId; } -static struct ObjectEventTemplate *GetObjectEventTemplateByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup) +static const struct ObjectEventTemplate *GetObjectEventTemplateByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup) { - struct ObjectEventTemplate *templates; + const struct ObjectEventTemplate *templates; const struct MapHeader *mapHeader; u8 count; @@ -2441,7 +2441,7 @@ static struct ObjectEventTemplate *GetObjectEventTemplateByLocalIdAndMap(u8 loca return FindObjectEventTemplateByLocalId(localId, templates, count); } -static struct ObjectEventTemplate *FindObjectEventTemplateByLocalId(u8 localId, struct ObjectEventTemplate *templates, u8 count) +static const struct ObjectEventTemplate *FindObjectEventTemplateByLocalId(u8 localId, const struct ObjectEventTemplate *templates, u8 count) { u8 i; diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index 9c526f0f723b..3a0c97e8cf65 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -60,8 +60,8 @@ static s8 GetWarpEventAtMapPosition(struct MapHeader *, struct MapPosition *); static void SetupWarp(struct MapHeader *, s8, struct MapPosition *); static bool8 TryDoorWarp(struct MapPosition *, u16, u8); static s8 GetWarpEventAtPosition(struct MapHeader *, u16, u16, u8); -static u8 *GetCoordEventScriptAtPosition(struct MapHeader *, u16, u16, u8); -static struct BgEvent *GetBackgroundEventAtPosition(struct MapHeader *, u16, u16, u8); +static const u8 *GetCoordEventScriptAtPosition(struct MapHeader *, u16, u16, u8); +static const struct BgEvent *GetBackgroundEventAtPosition(struct MapHeader *, u16, u16, u8); static bool8 TryStartCoordEventScript(struct MapPosition *); static bool8 TryStartWarpEventScript(struct MapPosition *, u16); static bool8 TryStartMiscWalkingScripts(u16); @@ -315,7 +315,7 @@ static const u8 *GetInteractedObjectEventScript(struct MapPosition *position, u8 static const u8 *GetInteractedBackgroundEventScript(struct MapPosition *position, u8 metatileBehavior, u8 direction) { - struct BgEvent *bgEvent = GetBackgroundEventAtPosition(&gMapHeader, position->x - MAP_OFFSET, position->y - MAP_OFFSET, position->elevation); + const struct BgEvent *bgEvent = GetBackgroundEventAtPosition(&gMapHeader, position->x - MAP_OFFSET, position->y - MAP_OFFSET, position->elevation); if (bgEvent == NULL) return NULL; @@ -497,7 +497,7 @@ static bool8 TryStartStepBasedScript(struct MapPosition *position, u16 metatileB static bool8 TryStartCoordEventScript(struct MapPosition *position) { - u8 *script = GetCoordEventScriptAtPosition(&gMapHeader, position->x - MAP_OFFSET, position->y - MAP_OFFSET, position->elevation); + const u8 *script = GetCoordEventScriptAtPosition(&gMapHeader, position->x - MAP_OFFSET, position->y - MAP_OFFSET, position->elevation); if (script == NULL) return FALSE; @@ -861,7 +861,7 @@ static bool8 TryDoorWarp(struct MapPosition *position, u16 metatileBehavior, u8 static s8 GetWarpEventAtPosition(struct MapHeader *mapHeader, u16 x, u16 y, u8 elevation) { s32 i; - struct WarpEvent *warpEvent = mapHeader->events->warps; + const struct WarpEvent *warpEvent = mapHeader->events->warps; u8 warpCount = mapHeader->events->warpCount; for (i = 0; i < warpCount; i++, warpEvent++) @@ -875,7 +875,7 @@ static s8 GetWarpEventAtPosition(struct MapHeader *mapHeader, u16 x, u16 y, u8 e return WARP_ID_NONE; } -static u8 *TryRunCoordEventScript(struct CoordEvent *coordEvent) +static const u8 *TryRunCoordEventScript(const struct CoordEvent *coordEvent) { if (coordEvent != NULL) { @@ -895,10 +895,10 @@ static u8 *TryRunCoordEventScript(struct CoordEvent *coordEvent) return NULL; } -static u8 *GetCoordEventScriptAtPosition(struct MapHeader *mapHeader, u16 x, u16 y, u8 elevation) +static const u8 *GetCoordEventScriptAtPosition(struct MapHeader *mapHeader, u16 x, u16 y, u8 elevation) { s32 i; - struct CoordEvent *coordEvents = mapHeader->events->coordEvents; + const struct CoordEvent *coordEvents = mapHeader->events->coordEvents; u8 coordEventCount = mapHeader->events->coordEventCount; for (i = 0; i < coordEventCount; i++) @@ -907,7 +907,7 @@ static u8 *GetCoordEventScriptAtPosition(struct MapHeader *mapHeader, u16 x, u16 { if (coordEvents[i].elevation == elevation || coordEvents[i].elevation == 0) { - u8 *script = TryRunCoordEventScript(&coordEvents[i]); + const u8 *script = TryRunCoordEventScript(&coordEvents[i]); if (script != NULL) return script; } @@ -916,15 +916,15 @@ static u8 *GetCoordEventScriptAtPosition(struct MapHeader *mapHeader, u16 x, u16 return NULL; } -u8 *GetCoordEventScriptAtMapPosition(struct MapPosition *position) +const u8 *GetCoordEventScriptAtMapPosition(struct MapPosition *position) { return GetCoordEventScriptAtPosition(&gMapHeader, position->x - MAP_OFFSET, position->y - MAP_OFFSET, position->elevation); } -static struct BgEvent *GetBackgroundEventAtPosition(struct MapHeader *mapHeader, u16 x, u16 y, u8 elevation) +static const struct BgEvent *GetBackgroundEventAtPosition(struct MapHeader *mapHeader, u16 x, u16 y, u8 elevation) { u8 i; - struct BgEvent *bgEvents = mapHeader->events->bgEvents; + const struct BgEvent *bgEvents = mapHeader->events->bgEvents; u8 bgEventCount = mapHeader->events->bgEventCount; for (i = 0; i < bgEventCount; i++) diff --git a/src/fieldmap.c b/src/fieldmap.c index 89d6b602c2e4..df4db47b5319 100644 --- a/src/fieldmap.c +++ b/src/fieldmap.c @@ -36,7 +36,7 @@ struct BackupMapLayout gBackupMapLayout; static const struct ConnectionFlags sDummyConnectionFlags = {0}; static void InitMapLayoutData(struct MapHeader *mapHeader); -static void InitBackupMapLayoutData(u16 *map, u16 width, u16 height); +static void InitBackupMapLayoutData(const u16 *map, u16 width, u16 height); static void FillSouthConnection(struct MapHeader const *mapHeader, struct MapHeader const *connectedMapHeader, s32 offset); static void FillNorthConnection(struct MapHeader const *mapHeader, struct MapHeader const *connectedMapHeader, s32 offset); static void FillWestConnection(struct MapHeader const *mapHeader, struct MapHeader const *connectedMapHeader, s32 offset); @@ -44,14 +44,14 @@ static void FillEastConnection(struct MapHeader const *mapHeader, struct MapHead static void InitBackupMapLayoutConnections(struct MapHeader *mapHeader); static void LoadSavedMapView(void); static bool8 SkipCopyingMetatileFromSavedMap(u16 *mapBlock, u16 mapWidth, u8 yMode); -static struct MapConnection *GetIncomingConnection(u8 direction, int x, int y); -static bool8 IsPosInIncomingConnectingMap(u8 direction, int x, int y, struct MapConnection *connection); +static const struct MapConnection *GetIncomingConnection(u8 direction, int x, int y); +static bool8 IsPosInIncomingConnectingMap(u8 direction, int x, int y, const struct MapConnection *connection); static bool8 IsCoordInIncomingConnectingMap(int coord, int srcMax, int destMax, int offset); #define GetBorderBlockAt(x, y)({ \ u16 block; \ int i; \ - u16 *border = gMapHeader.mapLayout->border; \ + const u16 *border = gMapHeader.mapLayout->border; /* Unused, they read it again below */ \ \ i = (x + 1) & 1; \ i += ((y + 1) & 1) * 2; \ @@ -63,7 +63,7 @@ static bool8 IsCoordInIncomingConnectingMap(int coord, int srcMax, int destMax, #define GetMapGridBlockAt(x, y) (AreCoordsWithinMapGridBounds(x, y) ? gBackupMapLayout.map[x + gBackupMapLayout.width * y] : GetBorderBlockAt(x, y)) -struct MapHeader const *const GetMapHeaderFromConnection(struct MapConnection *connection) +const struct MapHeader *const GetMapHeaderFromConnection(const struct MapConnection *connection) { return Overworld_GetMapHeaderByGroupAndId(connection->mapGroup, connection->mapNum); } @@ -116,7 +116,7 @@ static void InitMapLayoutData(struct MapHeader *mapHeader) } } -static void InitBackupMapLayoutData(u16 *map, u16 width, u16 height) +static void InitBackupMapLayoutData(const u16 *map, u16 width, u16 height) { u16 *dest; int y; @@ -133,7 +133,7 @@ static void InitBackupMapLayoutData(u16 *map, u16 width, u16 height) static void InitBackupMapLayoutConnections(struct MapHeader *mapHeader) { int count; - struct MapConnection *connection; + const struct MapConnection *connection; int i; if (mapHeader->connections) @@ -171,7 +171,7 @@ static void InitBackupMapLayoutConnections(struct MapHeader *mapHeader) static void FillConnection(int x, int y, struct MapHeader const *connectedMapHeader, int x2, int y2, int width, int height) { int i; - u16 *src; + const u16 *src; u16 *dest; int mapWidth; @@ -619,7 +619,7 @@ bool32 CanCameraMoveInDirection(int direction) return TRUE; } -static void SetPositionFromConnection(struct MapConnection *connection, int direction, int x, int y) +static void SetPositionFromConnection(const struct MapConnection *connection, int direction, int x, int y) { struct MapHeader const *mapHeader; mapHeader = GetMapHeaderFromConnection(connection); @@ -647,7 +647,7 @@ static void SetPositionFromConnection(struct MapConnection *connection, int dire bool8 CameraMove(int x, int y) { int direction; - struct MapConnection *connection; + const struct MapConnection *connection; int old_x, old_y; gCamera.active = FALSE; direction = GetPostCameraMoveMapBorderId(x, y); @@ -675,11 +675,11 @@ bool8 CameraMove(int x, int y) return gCamera.active; } -static struct MapConnection *GetIncomingConnection(u8 direction, int x, int y) +static const struct MapConnection *GetIncomingConnection(u8 direction, int x, int y) { int count; int i; - struct MapConnection *connection; + const struct MapConnection *connection; const struct MapConnections *connections = gMapHeader.connections; #ifdef UBFIX // UB: Multiple possible null dereferences @@ -696,7 +696,7 @@ static struct MapConnection *GetIncomingConnection(u8 direction, int x, int y) return NULL; } -static bool8 IsPosInIncomingConnectingMap(u8 direction, int x, int y, struct MapConnection *connection) +static bool8 IsPosInIncomingConnectingMap(u8 direction, int x, int y, const struct MapConnection *connection) { struct MapHeader const *mapHeader; mapHeader = GetMapHeaderFromConnection(connection); @@ -737,7 +737,7 @@ static int IsCoordInConnectingMap(int coord, int max) return FALSE; } -static int IsPosInConnectingMap(struct MapConnection *connection, int x, int y) +static int IsPosInConnectingMap(const struct MapConnection *connection, int x, int y) { struct MapHeader const *mapHeader; mapHeader = GetMapHeaderFromConnection(connection); @@ -753,10 +753,10 @@ static int IsPosInConnectingMap(struct MapConnection *connection, int x, int y) return FALSE; } -struct MapConnection *GetMapConnectionAtPos(s16 x, s16 y) +const struct MapConnection *GetMapConnectionAtPos(s16 x, s16 y) { int count; - struct MapConnection *connection; + const struct MapConnection *connection; int i; u8 direction; if (!gMapHeader.connections) diff --git a/src/item_use.c b/src/item_use.c index 41e888496807..8a02827176a4 100755 --- a/src/item_use.c +++ b/src/item_use.c @@ -375,7 +375,7 @@ static bool8 ItemfinderCheckForHiddenItems(const struct MapEvents *events, u8 ta static bool8 IsHiddenItemPresentAtCoords(const struct MapEvents *events, s16 x, s16 y) { u8 bgEventCount = events->bgEventCount; - struct BgEvent *bgEvent = events->bgEvents; + const struct BgEvent *bgEvent = events->bgEvents; int i; for (i = 0; i < bgEventCount; i++) @@ -391,7 +391,7 @@ static bool8 IsHiddenItemPresentAtCoords(const struct MapEvents *events, s16 x, return FALSE; } -static bool8 IsHiddenItemPresentInConnection(struct MapConnection *connection, int x, int y) +static bool8 IsHiddenItemPresentInConnection(const struct MapConnection *connection, int x, int y) { u16 localX, localY; @@ -456,7 +456,7 @@ static void CheckForHiddenItemsInMapConnection(u8 taskId) || var2 > y || y >= height) { - struct MapConnection *conn = GetMapConnectionAtPos(x, y); + const struct MapConnection *conn = GetMapConnectionAtPos(x, y); if (conn && IsHiddenItemPresentInConnection(conn, x, y) == TRUE) SetDistanceOfClosestHiddenItem(taskId, x - playerX, y - playerY); } diff --git a/src/overworld.c b/src/overworld.c index 4f7cccdffb65..70b102fd28fd 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -156,7 +156,7 @@ static void InitMenuBasedScript(const u8 *); static void LoadCableClubPlayer(s32, s32, struct CableClubPlayer *); static bool32 IsCableClubPlayerUnfrozen(struct CableClubPlayer *); static bool32 CanCableClubPlayerPressStart(struct CableClubPlayer *); -static u8 *TryGetTileEventScript(struct CableClubPlayer *); +static const u8 *TryGetTileEventScript(struct CableClubPlayer *); static bool32 PlayerIsAtSouthExit(struct CableClubPlayer *); static const u8 *TryInteractWithPlayer(struct CableClubPlayer *); static u16 KeyInterCB_DeferToRecvQueue(u32); @@ -482,7 +482,7 @@ void LoadObjEventTemplatesFromHeader(void) void LoadSaveblockObjEventScripts(void) { - struct ObjectEventTemplate *mapHeaderObjTemplates = gMapHeader.events->objectEvents; + const struct ObjectEventTemplate *mapHeaderObjTemplates = gMapHeader.events->objectEvents; struct ObjectEventTemplate *savObjTemplates = gSaveBlock1Ptr->objectEventTemplates; s32 i; @@ -2714,7 +2714,7 @@ static bool32 CanCableClubPlayerPressStart(struct CableClubPlayer *player) return FALSE; } -static u8 *TryGetTileEventScript(struct CableClubPlayer *player) +static const u8 *TryGetTileEventScript(struct CableClubPlayer *player) { if (player->movementMode != MOVEMENT_MODE_SCRIPTED) return FACING_NONE; diff --git a/src/trainer_hill.c b/src/trainer_hill.c index 528ee18a48f1..a74270ec7770 100644 --- a/src/trainer_hill.c +++ b/src/trainer_hill.c @@ -685,7 +685,8 @@ static u16 GetMetatileForFloor(u8 floorId, u32 x, u32 y, u32 floorWidth) // floo void GenerateTrainerHillFloorLayout(u16 *mapArg) { s32 y, x; - u16 *src, *dst; + const u16 *src; + u16 *dst; u8 mapId = GetCurrentTrainerHillMapId(); if (mapId == TRAINER_HILL_ENTRANCE) From 27e342d7a64797d9648accff8c588a60570b76f8 Mon Sep 17 00:00:00 2001 From: Alex Date: Wed, 8 Mar 2023 19:25:26 +0100 Subject: [PATCH 156/428] Use function HasDamagingMove to avoid looping --- src/battle_ai_main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index e1dbd2a6f4cb..4e39f61bfe46 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -1118,7 +1118,7 @@ static s16 AI_CheckBadMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) case EFFECT_GROWTH: case EFFECT_ATTACK_SPATK_UP: // work up if ((!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_ATK) && !BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_SPATK)) - || (!HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL) && !HasMoveWithSplit(battlerAtk, SPLIT_SPECIAL))) + || (!HasDamagingMove(battlerAtk))) score -= 10; break; case EFFECT_ROTOTILLER: From f06c040bca900ba7dae167e5bd9bde9c2c9d9802 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Wed, 8 Mar 2023 01:51:51 -0300 Subject: [PATCH 157/428] Updated the debug menu -Updated the text string used by Debug_FlagsNotSetMessage. -Renamed Debug_FlagsNotSetMessage to Debug_FlagsNotSetOverworldConfigMessage. -Added an equivalent for the battle config file called Debug_FlagsNotSetBattleConfigMessage, -DEBUG_FLAG_NO_COLLISION -> OW_FLAG_NO_COLLISION -And moved it to include/config/overworld.h, because at the end of the day it's still an overworld flag just like the other 2 already in that file. -Corrected miswritten preproc config in DebugAction_Flags_CatchingOnOff. -Updated the comment that describes the effect of DEBUG_OVERWORLD_MENU reducing the number of characters a tiny bit and fixing a typo. --- data/scripts/debug.inc | 21 +++++++++++++++++---- include/config/debug.h | 7 +------ include/config/overworld.h | 1 + src/debug.c | 21 +++++++++++---------- src/event_object_movement.c | 4 ++-- 5 files changed, 32 insertions(+), 22 deletions(-) diff --git a/data/scripts/debug.inc b/data/scripts/debug.inc index 191fe69327a5..92e9062a3963 100644 --- a/data/scripts/debug.inc +++ b/data/scripts/debug.inc @@ -41,18 +41,31 @@ Debug_CheatStart:: release end -Debug_FlagsNotSetMessage:: +Debug_FlagsNotSetOverworldConfigMessage:: lockall - message Debug_FlagsNotSetMessage_Text + message Debug_FlagsNotSetOverworldConfigMessage_Text waitmessage waitbuttonpress releaseall end -Debug_FlagsNotSetMessage_Text: +Debug_FlagsNotSetOverworldConfigMessage_Text: .string "Feature unavailable!\n" .string "Please define a usable flag in:\l" - .string "'include/constants/overworld{UNDERSCORE}config.h'!$" + .string "'include/config/overworld.h'!$" + +Debug_FlagsNotSetBattleConfigMessage:: + lockall + message Debug_FlagsNotSetBattleConfigMessage_Text + waitmessage + waitbuttonpress + releaseall + end + +Debug_FlagsNotSetBattleConfigMessage_Text: + .string "Feature unavailable!\n" + .string "Please define a usable flag in:\l" + .string "'include/config/battle.h'!$" Debug_Script_1:: end diff --git a/include/config/debug.h b/include/config/debug.h index b427fcb5137b..43d74380183a 100644 --- a/include/config/debug.h +++ b/include/config/debug.h @@ -2,16 +2,11 @@ #define GUARD_CONFIG_DEBUG_H // Overworld Debug -#define DEBUG_OVERWORLD_MENU TRUE // Enables a overworld debug menu for changing flags, variables, giving pokemon and more, accessed by holding R and pressing START while in the overworld by default. +#define DEBUG_OVERWORLD_MENU TRUE // Enables an overworld debug menu to change flags, variables, giving pokemon and more, accessed by holding R and pressing START while in the overworld by default. #define DEBUG_OVERWORLD_HELD_KEYS (R_BUTTON) // The keys required to be held to open the debug menu. #define DEBUG_OVERWORLD_TRIGGER_EVENT pressedStartButton // The event that opens the menu when holding the key(s) defined in DEBUG_OVERWORLD_HELD_KEYS. #define DEBUG_OVERWORLD_IN_MENU FALSE // Replaces the overworld debug menu button combination with a start menu entry (above Pokédex). -// Debug Flags -// To use the following debug features, replace the 0s with the flag ID you're assigning it to. -// Eg: Replace with FLAG_UNUSED_0x264 so you can use that flag to toggle the feature. -#define DEBUG_FLAG_NO_COLLISION 0 // If this flag is set, the debug function in the Utility submenu to disable player collision can be used. - // Battle Debug Menu #define DEBUG_BATTLE_MENU TRUE // If set to TRUE, enables a debug menu to use in battles by pressing the Select button. diff --git a/include/config/overworld.h b/include/config/overworld.h index fb438431b326..7831858d277d 100644 --- a/include/config/overworld.h +++ b/include/config/overworld.h @@ -9,5 +9,6 @@ // Eg: Replace with FLAG_UNUSED_0x264 so you can use that flag to toggle the feature. #define OW_FLAG_NO_ENCOUNTER 0 // If this flag is set, wild encounters will be disabled. #define OW_FLAG_NO_TRAINER_SEE 0 // If this flag is set, trainers will not battle the player unless they're talked to. +#define OW_FLAG_NO_COLLISION 0 // If this flag is set, the player will be able to walk over tiles with collision. Mainly intended for debugging purposes. #endif // GUARD_CONFIG_OVERWORLD_H diff --git a/src/debug.c b/src/debug.c index 5c14dbfb0f01..2bd89504fa41 100644 --- a/src/debug.c +++ b/src/debug.c @@ -275,7 +275,8 @@ static void DebugAction_Sound_MUS_SelectId(u8 taskId); static void DebugTask_HandleMenuInput(u8 taskId, void (*HandleInput)(u8)); static void DebugAction_OpenSubMenu(u8 taskId, struct ListMenuTemplate LMtemplate); -extern u8 Debug_FlagsNotSetMessage[]; +extern u8 Debug_FlagsNotSetOverworldConfigMessage[]; +extern u8 Debug_FlagsNotSetBattleConfigMessage[]; extern u8 Debug_Script_1[]; extern u8 Debug_Script_2[]; extern u8 Debug_Script_3[]; @@ -1556,16 +1557,16 @@ static void DebugAction_Flags_ToggleFrontierPass(u8 taskId) } static void DebugAction_Flags_CollisionOnOff(u8 taskId) { -#if DEBUG_FLAG_NO_COLLISION == 0 +#if OW_FLAG_NO_COLLISION == 0 Debug_DestroyMenu_Full(taskId); LockPlayerFieldControls(); - ScriptContext_SetupScript(Debug_FlagsNotSetMessage); + ScriptContext_SetupScript(Debug_FlagsNotSetOverworldConfigMessage); #else - if (FlagGet(DEBUG_FLAG_NO_COLLISION)) + if (FlagGet(OW_FLAG_NO_COLLISION)) PlaySE(SE_PC_OFF); else PlaySE(SE_PC_LOGIN); - FlagToggle(DEBUG_FLAG_NO_COLLISION); + FlagToggle(OW_FLAG_NO_COLLISION); #endif } static void DebugAction_Flags_EncounterOnOff(u8 taskId) @@ -1573,7 +1574,7 @@ static void DebugAction_Flags_EncounterOnOff(u8 taskId) #if OW_FLAG_NO_ENCOUNTER == 0 Debug_DestroyMenu_Full(taskId); LockPlayerFieldControls(); - ScriptContext_SetupScript(Debug_FlagsNotSetMessage); + ScriptContext_SetupScript(Debug_FlagsNotSetOverworldConfigMessage); #else if (FlagGet(OW_FLAG_NO_ENCOUNTER)) PlaySE(SE_PC_OFF); @@ -1587,7 +1588,7 @@ static void DebugAction_Flags_TrainerSeeOnOff(u8 taskId) #if OW_FLAG_NO_TRAINER_SEE == 0 Debug_DestroyMenu_Full(taskId); LockPlayerFieldControls(); - ScriptContext_SetupScript(Debug_FlagsNotSetMessage); + ScriptContext_SetupScript(Debug_FlagsNotSetOverworldConfigMessage); #else if (FlagGet(OW_FLAG_NO_TRAINER_SEE)) PlaySE(SE_PC_OFF); @@ -1601,7 +1602,7 @@ static void DebugAction_Flags_BagUseOnOff(u8 taskId) #if B_FLAG_NO_BAG_USE == 0 Debug_DestroyMenu_Full(taskId); LockPlayerFieldControls(); - ScriptContext_SetupScript(Debug_FlagsNotSetMessage); + ScriptContext_SetupScript(Debug_FlagsNotSetBattleConfigMessage); #else if (FlagGet(B_FLAG_NO_BAG_USE)) PlaySE(SE_PC_OFF); @@ -1612,10 +1613,10 @@ static void DebugAction_Flags_BagUseOnOff(u8 taskId) } static void DebugAction_Flags_CatchingOnOff(u8 taskId) { -#if B_FLAG_NO_CATCHING_USE == 0 +#if B_FLAG_NO_CATCHING == 0 Debug_DestroyMenu_Full(taskId); LockPlayerFieldControls(); - ScriptContext_SetupScript(Debug_FlagsNotSetMessage); + ScriptContext_SetupScript(Debug_FlagsNotSetBattleConfigMessage); #else if (FlagGet(B_FLAG_NO_CATCHING)) PlaySE(SE_PC_OFF); diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 9b8cc1ac356e..ccb6143bc2c6 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -4654,8 +4654,8 @@ u8 GetCollisionAtCoords(struct ObjectEvent *objectEvent, s16 x, s16 y, u32 dir) { u8 direction = dir; -#if DEBUG_FLAG_NO_COLLISION != 0 - if (FlagGet(DEBUG_FLAG_NO_COLLISION)) +#if OW_FLAG_NO_COLLISION != 0 + if (FlagGet(OW_FLAG_NO_COLLISION)) return COLLISION_NONE; #endif From ff7686482f40c2bb074f40c2f847ab8b8fefea20 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Wed, 8 Mar 2023 15:56:16 -0300 Subject: [PATCH 158/428] Updated PokeStorageSys related debug functions --- src/debug.c | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/src/debug.c b/src/debug.c index 2bd89504fa41..3e68c09bfb5c 100644 --- a/src/debug.c +++ b/src/debug.c @@ -85,6 +85,7 @@ enum { // Util DEBUG_UTIL_MENU_ITEM_TRAINER_NAME, DEBUG_UTIL_MENU_ITEM_TRAINER_GENDER, DEBUG_UTIL_MENU_ITEM_TRAINER_ID, + DEBUG_UTIL_MENU_ITEM_CLEAR_BOXES, }; enum { // Scripts DEBUG_UTIL_MENU_ITEM_SCRIPT_1, @@ -224,6 +225,7 @@ static void DebugAction_Util_WatchCredits(u8 taskId); static void DebugAction_Util_Trainer_Name(u8 taskId); static void DebugAction_Util_Trainer_Gender(u8 taskId); static void DebugAction_Util_Trainer_Id(u8 taskId); +static void DebugAction_Util_Clear_Boxes(u8 taskId); static void DebugAction_Flags_Flags(u8 taskId); static void DebugAction_Flags_FlagsSelect(u8 taskId); @@ -330,6 +332,7 @@ static const u8 sDebugText_Util_WatchCredits[] = _("Watch Credits"); static const u8 sDebugText_Util_Trainer_Name[] = _("Trainer name"); static const u8 sDebugText_Util_Trainer_Gender[] = _("Toggle T. Gender"); static const u8 sDebugText_Util_Trainer_Id[] = _("New Trainer Id"); +static const u8 sDebugText_Util_Clear_Boxes[] = _("Clear Storage Boxes"); // Flags Menu static const u8 sDebugText_Flags_Flags[] = _("Set Flag XXXX"); static const u8 sDebugText_Flags_SetPokedexFlags[] = _("All Pokédex Flags"); @@ -451,6 +454,7 @@ static const struct ListMenuItem sDebugMenu_Items_Utilities[] = [DEBUG_UTIL_MENU_ITEM_TRAINER_NAME] = {sDebugText_Util_Trainer_Name, DEBUG_UTIL_MENU_ITEM_TRAINER_NAME}, [DEBUG_UTIL_MENU_ITEM_TRAINER_GENDER] = {sDebugText_Util_Trainer_Gender, DEBUG_UTIL_MENU_ITEM_TRAINER_GENDER}, [DEBUG_UTIL_MENU_ITEM_TRAINER_ID] = {sDebugText_Util_Trainer_Id, DEBUG_UTIL_MENU_ITEM_TRAINER_ID}, + [DEBUG_UTIL_MENU_ITEM_CLEAR_BOXES] = {sDebugText_Util_Clear_Boxes, DEBUG_UTIL_MENU_ITEM_CLEAR_BOXES}, }; static const struct ListMenuItem sDebugMenu_Items_Scripts[] = { @@ -530,6 +534,7 @@ static void (*const sDebugMenu_Actions_Utilities[])(u8) = [DEBUG_UTIL_MENU_ITEM_TRAINER_NAME] = DebugAction_Util_Trainer_Name, [DEBUG_UTIL_MENU_ITEM_TRAINER_GENDER] = DebugAction_Util_Trainer_Gender, [DEBUG_UTIL_MENU_ITEM_TRAINER_ID] = DebugAction_Util_Trainer_Id, + [DEBUG_UTIL_MENU_ITEM_CLEAR_BOXES] = DebugAction_Util_Clear_Boxes, }; static void (*const sDebugMenu_Actions_Scripts[])(u8) = { @@ -1316,6 +1321,12 @@ static void DebugAction_Util_Trainer_Id(u8 taskId) Debug_DestroyMenu_Full(taskId); ScriptContext_Enable(); } +static void DebugAction_Util_Clear_Boxes(u8 taskId) +{ + ResetPokemonStorageSystem(); + Debug_DestroyMenu_Full(taskId); + ScriptContext_Enable(); +} // ******************************* // Actions Scripts @@ -2179,7 +2190,7 @@ static void DebugAction_Give_Pokemon_SelectLevel(u8 taskId) { PlaySE(MUS_LEVEL_UP); ScriptGiveMon(sDebugMonData->mon_speciesId, gTasks[taskId].data[3], ITEM_NONE, 0,0,0); - //Set flag for user convenience + // Set flag for user convenience FlagSet(FLAG_SYS_POKEMON_GET); Free(sDebugMonData); //Frees EWRAM of MonData Struct DebugAction_DestroyExtraWindow(taskId); @@ -2735,7 +2746,7 @@ static void DebugAction_Give_Pokemon_ComplexCreateMon(u8 taskId) //https://githu break; } - //Set flag for user convenience + // Set flag for user convenience FlagSet(FLAG_SYS_POKEMON_GET); Free(sDebugMonData); //Frees EWRAM of MonData Struct @@ -2767,11 +2778,12 @@ static void DebugAction_Give_FillPC(u8 taskId) //Credit: Sierraffinity int boxId, boxPosition; u32 personality; struct BoxPokemon boxMon; + u16 species = SPECIES_BULBASAUR; personality = Random32(); CreateBoxMon(&boxMon, - SPECIES_DEOXYS, + species, 100, 32, personality, @@ -2786,9 +2798,16 @@ static void DebugAction_Give_FillPC(u8 taskId) //Credit: Sierraffinity if (!GetBoxMonData(&gPokemonStoragePtr->boxes[boxId][boxPosition], MON_DATA_SANITY_HAS_SPECIES)) { gPokemonStoragePtr->boxes[boxId][boxPosition] = boxMon; + SetBoxMonData(&gPokemonStoragePtr->boxes[boxId][boxPosition], MON_DATA_SPECIES, &species); + GetSetPokedexFlag(species, FLAG_SET_SEEN); + GetSetPokedexFlag(species, FLAG_SET_CAUGHT); + species++; } } } + + // Set flag for user convenience + FlagSet(FLAG_SYS_POKEMON_GET); } static void DebugAction_Give_CHEAT(u8 taskId) From d695c76881d10423427b6b82856b43fd99036618 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Wed, 8 Mar 2023 22:11:28 +0100 Subject: [PATCH 159/428] test for assist and removed assist array from battle struct --- include/battle.h | 1 - src/battle_script_commands.c | 47 ++++++++++++++++++++---------------- test/move_effect_assist.c | 22 +++++++++++++++++ test/test_runner_battle.c | 1 + 4 files changed, 49 insertions(+), 22 deletions(-) create mode 100644 test/move_effect_assist.c diff --git a/include/battle.h b/include/battle.h index a43fc65cdf5a..491273b80bc4 100644 --- a/include/battle.h +++ b/include/battle.h @@ -534,7 +534,6 @@ struct BattleStruct u8 wildVictorySong; u8 dynamicMoveType; u8 wrappedBy[MAX_BATTLERS_COUNT]; - u16 assistPossibleMoves[PARTY_SIZE * MAX_MON_MOVES]; // Each of mons can know max 4 moves. u8 focusPunchBattlerId; u8 battlerPreventingSwitchout; u8 moneyMultiplier:6; diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 126ca06fd11e..bd1b248b2a74 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -23,6 +23,7 @@ #include "main.h" #include "palette.h" #include "money.h" +#include "malloc.h" #include "bg.h" #include "string_util.h" #include "pokemon_icon.h" @@ -14766,38 +14767,40 @@ static void Cmd_assistattackselect(void) s32 chooseableMovesNo = 0; struct Pokemon *party; s32 monId, moveId; - u16 *validMoves = gBattleStruct->assistPossibleMoves; + u16 *validMoves = Alloc(sizeof(u16) * PARTY_SIZE * MAX_MON_MOVES); - if (GET_BATTLER_SIDE(gBattlerAttacker) != B_SIDE_PLAYER) - party = gEnemyParty; - else - party = gPlayerParty; - - for (monId = 0; monId < PARTY_SIZE; monId++) + if (validMoves != NULL) { - if (monId == gBattlerPartyIndexes[gBattlerAttacker]) - continue; - if (GetMonData(&party[monId], MON_DATA_SPECIES_OR_EGG) == SPECIES_NONE) - continue; - if (GetMonData(&party[monId], MON_DATA_SPECIES_OR_EGG) == SPECIES_EGG) - continue; + if (GET_BATTLER_SIDE(gBattlerAttacker) != B_SIDE_PLAYER) + party = gEnemyParty; + else + party = gPlayerParty; - for (moveId = 0; moveId < MAX_MON_MOVES; moveId++) + for (monId = 0; monId < PARTY_SIZE; monId++) { - s32 i = 0; - u16 move = GetMonData(&party[monId], MON_DATA_MOVE1 + moveId); - - if (sForbiddenMoves[move] & FORBIDDEN_ASSIST) + if (monId == gBattlerPartyIndexes[gBattlerAttacker]) + continue; + if (GetMonData(&party[monId], MON_DATA_SPECIES_OR_EGG) == SPECIES_NONE) + continue; + if (GetMonData(&party[monId], MON_DATA_SPECIES_OR_EGG) == SPECIES_EGG) continue; - validMoves[chooseableMovesNo] = move; - chooseableMovesNo++; + for (moveId = 0; moveId < MAX_MON_MOVES; moveId++) + { + u16 move = GetMonData(&party[monId], MON_DATA_MOVE1 + moveId); + + if (sForbiddenMoves[move] & FORBIDDEN_ASSIST) + continue; + + validMoves[chooseableMovesNo++] = move; + } } } + if (chooseableMovesNo) { gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED; - gCalledMove = validMoves[((Random() & 0xFF) * chooseableMovesNo) >> 8]; + gCalledMove = validMoves[Random() % chooseableMovesNo]; gBattlerTarget = GetMoveTarget(gCalledMove, NO_TARGET_OVERRIDE); gBattlescriptCurrInstr = cmd->nextInstr; } @@ -14805,6 +14808,8 @@ static void Cmd_assistattackselect(void) { gBattlescriptCurrInstr = cmd->failInstr; } + + TRY_FREE_AND_SET_NULL(validMoves); } static void Cmd_trysetmagiccoat(void) diff --git a/test/move_effect_assist.c b/test/move_effect_assist.c new file mode 100644 index 000000000000..e95d84654fca --- /dev/null +++ b/test/move_effect_assist.c @@ -0,0 +1,22 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_ASSIST].effect == EFFECT_ASSIST); +} + +SINGLE_BATTLE_TEST("Assist fails if there are no valid moves to choose from") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) {Moves(MOVE_ASSIST, MOVE_CELEBRATE, MOVE_METRONOME, MOVE_ME_FIRST); } + PLAYER(SPECIES_WOBBUFFET) {Moves(MOVE_ASSIST, MOVE_ENDURE, MOVE_DRAGON_TAIL, MOVE_SPOTLIGHT); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_ASSIST); } + } SCENE { + MESSAGE("Wobbuffet used Assist!"); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_ASSIST, player); + MESSAGE("But it failed!"); + } +} diff --git a/test/test_runner_battle.c b/test/test_runner_battle.c index ec7ba275c2c2..f4b8aa4fdfd5 100644 --- a/test/test_runner_battle.c +++ b/test/test_runner_battle.c @@ -1227,6 +1227,7 @@ void Move(u32 sourceLine, struct BattlePokemon *battler, struct MoveContext ctx) const struct BattleMove *move = &gBattleMoves[moveId]; if (move->target == MOVE_TARGET_RANDOM || move->target == MOVE_TARGET_BOTH + || move->target == MOVE_TARGET_DEPENDS || move->target == MOVE_TARGET_FOES_AND_ALLY || move->target == MOVE_TARGET_OPPONENTS_FIELD || move->target == MOVE_TARGET_ALL_BATTLERS) From 35645fe01c507bda54d6176157ac742856424f0f Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Wed, 8 Mar 2023 23:00:25 +0100 Subject: [PATCH 160/428] electrify works on all move types (#2817) --- src/battle_ai_main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 2d4d075282b0..b31fc9ce627d 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -4641,7 +4641,7 @@ static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) score += 2; // Give target more weaknesses break; case EFFECT_ELECTRIFY: - if (predictedMove != MOVE_NONE && gBattleMoves[predictedMove].type == TYPE_NORMAL + if (predictedMove != MOVE_NONE && (AI_DATA->abilities[battlerAtk] == ABILITY_VOLT_ABSORB || AI_DATA->abilities[battlerAtk] == ABILITY_MOTOR_DRIVE || AI_DATA->abilities[battlerAtk] == ABILITY_LIGHTNING_ROD)) From eead8e8e61e53b72eb530bec8c9ec3908dcad849 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Thu, 9 Mar 2023 09:49:50 +0100 Subject: [PATCH 161/428] Tests work with new pokemon disabled --- src/battle_message.c | 2 +- test/ability_intimidate.c | 28 ++++++++++++++-------------- test/ability_pastel_veil.c | 4 ++-- test/ability_stench.c | 4 ++-- test/hold_effect_red_card.c | 2 ++ test/mega_evolution.c | 6 +++--- test/move_effect_hit_escape.c | 2 ++ 7 files changed, 26 insertions(+), 22 deletions(-) diff --git a/src/battle_message.c b/src/battle_message.c index cf57247bf875..77ab90438a02 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -284,7 +284,7 @@ static const u8 sText_PkmnPreventsPoisoningWith[] = _("{B_EFF_NAME_WITH_PREFIX}' static const u8 sText_PkmnPreventsConfusionWith[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nprevents confusion!"); static const u8 sText_PkmnRaisedFirePowerWith[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nraised its FIRE power!"); static const u8 sText_PkmnAnchorsItselfWith[] = _("{B_DEF_NAME_WITH_PREFIX} anchors\nitself with {B_DEF_ABILITY}!"); -static const u8 sText_PkmnCutsAttackWith[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\ncuts {B_DEF_NAME_WITH_PREFIX}'s ATTACK!"); +static const u8 sText_PkmnCutsAttackWith[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\ncuts {B_DEF_NAME_WITH_PREFIX}'s attack!"); static const u8 sText_PkmnPreventsStatLossWith[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nprevents stat loss!"); static const u8 sText_PkmnHurtsWith[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt by\n{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1}!"); static const u8 sText_PkmnTraced[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} TRACED\n{B_BUFF1}'s {B_BUFF2}!"); diff --git a/test/ability_intimidate.c b/test/ability_intimidate.c index f978b80ab0aa..08d8d606e4d4 100644 --- a/test/ability_intimidate.c +++ b/test/ability_intimidate.c @@ -10,11 +10,11 @@ SINGLE_BATTLE_TEST("Intimidate (opponent) lowers player's attack after switch ou { u32 ability; PARAMETRIZE { ability = ABILITY_INTIMIDATE; } - PARAMETRIZE { ability = ABILITY_RECKLESS; } + PARAMETRIZE { ability = ABILITY_SHED_SKIN; } GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_STARAPTOR) { Ability(ability); }; + OPPONENT(SPECIES_ARBOK) { Ability(ability); }; } WHEN { TURN { SWITCH(opponent, 1); } TURN { MOVE(player, MOVE_TACKLE); } @@ -23,7 +23,7 @@ SINGLE_BATTLE_TEST("Intimidate (opponent) lowers player's attack after switch ou { ABILITY_POPUP(opponent, ABILITY_INTIMIDATE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - MESSAGE("Foe Staraptor's Intimidate cuts Wobbuffet's ATTACK!"); + MESSAGE("Foe Arbok's Intimidate cuts Wobbuffet's attack!"); } HP_BAR(opponent, captureDamage: &results[i].damage); } FINALLY { @@ -35,11 +35,11 @@ SINGLE_BATTLE_TEST("Intimidate (opponent) lowers player's attack after KO", s16 { u32 ability; PARAMETRIZE { ability = ABILITY_INTIMIDATE; } - PARAMETRIZE { ability = ABILITY_RECKLESS; } + PARAMETRIZE { ability = ABILITY_SHED_SKIN; } GIVEN { PLAYER(SPECIES_WOBBUFFET) { Speed(2); }; OPPONENT(SPECIES_WOBBUFFET) { HP(1); Speed(1); }; - OPPONENT(SPECIES_STARAPTOR) { Ability(ability); Speed(1); }; + OPPONENT(SPECIES_ARBOK) { Ability(ability); Speed(1); }; } WHEN { TURN { MOVE(player, MOVE_TACKLE); SEND_OUT(opponent, 1); } TURN { MOVE(player, MOVE_TACKLE); } @@ -49,7 +49,7 @@ SINGLE_BATTLE_TEST("Intimidate (opponent) lowers player's attack after KO", s16 { ABILITY_POPUP(opponent, ABILITY_INTIMIDATE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - MESSAGE("Foe Staraptor's Intimidate cuts Wobbuffet's ATTACK!"); + MESSAGE("Foe Arbok's Intimidate cuts Wobbuffet's attack!"); } HP_BAR(opponent, captureDamage: &results[i].damage); } FINALLY { @@ -63,11 +63,11 @@ DOUBLE_BATTLE_TEST("Intimidate doesn't activate on an empty field in a double ba ASSUME(gBattleMoves[MOVE_EXPLOSION].effect == EFFECT_EXPLOSION); PLAYER(SPECIES_WOBBUFFET) { }; PLAYER(SPECIES_WOBBUFFET) { HP(1); }; - PLAYER(SPECIES_STARAVIA) { Ability(ABILITY_INTIMIDATE); }; + PLAYER(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); }; PLAYER(SPECIES_ABRA); OPPONENT(SPECIES_WOBBUFFET) { HP(1); }; OPPONENT(SPECIES_WOBBUFFET) { HP(1); }; - OPPONENT(SPECIES_STARAPTOR) { Ability(ABILITY_INTIMIDATE); }; + OPPONENT(SPECIES_ARBOK) { Ability(ABILITY_INTIMIDATE); }; OPPONENT(SPECIES_WYNAUT); } WHEN { TURN { MOVE(playerLeft, MOVE_EXPLOSION); SEND_OUT(playerLeft, 2); SEND_OUT(opponentLeft, 2); SEND_OUT(playerRight, 3); SEND_OUT(opponentRight, 3); } @@ -77,21 +77,21 @@ DOUBLE_BATTLE_TEST("Intimidate doesn't activate on an empty field in a double ba ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, playerLeft); // Everyone faints. - MESSAGE("Go! Staravia!"); - MESSAGE("2 sent out Staraptor!"); + MESSAGE("Go! Ekans!"); + MESSAGE("2 sent out Arbok!"); MESSAGE("Go! Abra!"); MESSAGE("2 sent out Wynaut!"); ABILITY_POPUP(playerLeft, ABILITY_INTIMIDATE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); - MESSAGE("Staravia's Intimidate cuts Foe Staraptor's ATTACK!"); + MESSAGE("Ekans's Intimidate cuts Foe Arbok's attack!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); - MESSAGE("Staravia's Intimidate cuts Foe Wynaut's ATTACK!"); + MESSAGE("Ekans's Intimidate cuts Foe Wynaut's attack!"); ABILITY_POPUP(opponentLeft, ABILITY_INTIMIDATE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); - MESSAGE("Foe Staraptor's Intimidate cuts Staravia's ATTACK!"); + MESSAGE("Foe Arbok's Intimidate cuts Ekans's attack!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); - MESSAGE("Foe Staraptor's Intimidate cuts Abra's ATTACK!"); + MESSAGE("Foe Arbok's Intimidate cuts Abra's attack!"); } } diff --git a/test/ability_pastel_veil.c b/test/ability_pastel_veil.c index 5d7a8f020353..ddc0806198ed 100644 --- a/test/ability_pastel_veil.c +++ b/test/ability_pastel_veil.c @@ -35,7 +35,7 @@ SINGLE_BATTLE_TEST("Pastel Veil immediately cures Mold Breaker poison") { GIVEN { ASSUME(gBattleMoves[MOVE_TOXIC].effect == EFFECT_TOXIC); - PLAYER(SPECIES_DRILBUR) { Ability(ABILITY_MOLD_BREAKER); } + PLAYER(SPECIES_PINSIR) { Ability(ABILITY_MOLD_BREAKER); } OPPONENT(SPECIES_PONYTA_GALARIAN) { Ability(ABILITY_PASTEL_VEIL); } } WHEN { TURN { MOVE(player, MOVE_TOXIC); } @@ -52,7 +52,7 @@ DOUBLE_BATTLE_TEST("Pastel Veil does not cure Mold Breaker poison on partner") { GIVEN { ASSUME(gBattleMoves[MOVE_TOXIC].effect == EFFECT_TOXIC); - PLAYER(SPECIES_DRILBUR) { Ability(ABILITY_MOLD_BREAKER); } + PLAYER(SPECIES_PINSIR) { Ability(ABILITY_MOLD_BREAKER); } PLAYER(SPECIES_WYNAUT); OPPONENT(SPECIES_PONYTA_GALARIAN) { Ability(ABILITY_PASTEL_VEIL); } OPPONENT(SPECIES_WYNAUT); diff --git a/test/ability_stench.c b/test/ability_stench.c index 7285ee768c61..18d9097680ed 100644 --- a/test/ability_stench.c +++ b/test/ability_stench.c @@ -6,7 +6,7 @@ SINGLE_BATTLE_TEST("Stench has a 10% chance to flinch") PASSES_RANDOMLY(1,10); GIVEN { ASSUME(gBattleMoves[MOVE_TACKLE].power > 0); - PLAYER(SPECIES_STUNKY) { Ability(ABILITY_STENCH); }; + PLAYER(SPECIES_GRIMER) { Ability(ABILITY_STENCH); }; OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_TACKLE); MOVE(opponent, MOVE_CELEBRATE); } @@ -22,7 +22,7 @@ SINGLE_BATTLE_TEST("Stench does not stack with King's Rock") ASSUME(gItems[ITEM_KINGS_ROCK].holdEffect == HOLD_EFFECT_FLINCH); ASSUME(gBattleMoves[MOVE_TACKLE].power > 0); - PLAYER(SPECIES_STUNKY) { Ability(ABILITY_STENCH); Item(ITEM_KINGS_ROCK); }; + PLAYER(SPECIES_GRIMER) { Ability(ABILITY_STENCH); Item(ITEM_KINGS_ROCK); }; OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_TACKLE); MOVE(opponent, MOVE_CELEBRATE); } diff --git a/test/hold_effect_red_card.c b/test/hold_effect_red_card.c index c32c489d5a39..882007cfd470 100644 --- a/test/hold_effect_red_card.c +++ b/test/hold_effect_red_card.c @@ -184,6 +184,7 @@ SINGLE_BATTLE_TEST("Red Card does not activate if stolen by Magician") PARAMETRIZE { item = ITEM_POTION; activate = TRUE; } GIVEN { + ASSUME(P_GEN_6_POKEMON == TRUE); PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_RED_CARD); } OPPONENT(SPECIES_FENNEKIN) { Ability(ABILITY_MAGICIAN); Item(item); } OPPONENT(SPECIES_WYNAUT); @@ -360,6 +361,7 @@ SINGLE_BATTLE_TEST("Red Card does not activate if attacker's Sheer Force applied SINGLE_BATTLE_TEST("Red Card activates before Emergency Exit") { GIVEN { + ASSUME(P_GEN_7_POKEMON == TRUE); PLAYER(SPECIES_GOLISOPOD) { MaxHP(100); HP(51); Item(ITEM_RED_CARD); } PLAYER(SPECIES_WIMPOD); OPPONENT(SPECIES_WOBBUFFET); diff --git a/test/mega_evolution.c b/test/mega_evolution.c index 13e9cd5b22a6..7080e85a3c89 100644 --- a/test/mega_evolution.c +++ b/test/mega_evolution.c @@ -37,15 +37,15 @@ SINGLE_BATTLE_TEST("Mega Evolution affects turn order") { GIVEN { ASSUME(B_MEGA_EVO_TURN_ORDER); - PLAYER(SPECIES_DIANCIE) { Item(ITEM_DIANCITE); Speed(105); } + PLAYER(SPECIES_GARDEVOIR) { Item(ITEM_GARDEVOIRITE); Speed(105); } OPPONENT(SPECIES_WOBBUFFET) { Speed(106); } } WHEN { TURN { MOVE(player, MOVE_CELEBRATE, megaEvolve: TRUE); } } SCENE { - MESSAGE("Diancie used Celebrate!"); + MESSAGE("Gardevoir used Celebrate!"); MESSAGE("Foe Wobbuffet used Celebrate!"); } THEN { - ASSUME(player->speed == 225); + ASSUME(player->speed == 205); } } diff --git a/test/move_effect_hit_escape.c b/test/move_effect_hit_escape.c index cc34db2e280b..fb5ff2dd5459 100644 --- a/test/move_effect_hit_escape.c +++ b/test/move_effect_hit_escape.c @@ -65,6 +65,7 @@ SINGLE_BATTLE_TEST("U-turn does not switch the user out if replacements fainted" SINGLE_BATTLE_TEST("U-turn does not switch the user out if Wimp Out activates") { GIVEN { + ASSUME(P_GEN_7_POKEMON == TRUE); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WYNAUT); OPPONENT(SPECIES_WIMPOD) { MaxHP(100); HP(51); Ability(ABILITY_WIMP_OUT); } @@ -82,6 +83,7 @@ SINGLE_BATTLE_TEST("U-turn does not switch the user out if Wimp Out activates") SINGLE_BATTLE_TEST("U-turn switches the user out if Wimp Out fails to activate") { GIVEN { + ASSUME(P_GEN_7_POKEMON == TRUE); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WYNAUT); OPPONENT(SPECIES_WIMPOD) { MaxHP(100); HP(51); Ability(ABILITY_WIMP_OUT); } From 9358265954b80410d1f9c6617c79108e68f47f32 Mon Sep 17 00:00:00 2001 From: Alex Date: Thu, 9 Mar 2023 09:52:27 +0100 Subject: [PATCH 162/428] electrify ai speed check --- src/battle_ai_main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 2d4d075282b0..e4edf4581435 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -2447,7 +2447,7 @@ static s16 AI_CheckBadMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) } break; case EFFECT_ELECTRIFY: - if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER + if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER //|| GetMoveTypeSpecial(battlerDef, predictedMove) == TYPE_ELECTRIC // Move will already be electric type || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, AI_DATA->partnerMove)) score -= 10; From 6f13e4cfc5fd7670d4c2d5165ff96c952c0e3622 Mon Sep 17 00:00:00 2001 From: ghoulslash <41651341+ghoulslash@users.noreply.github.com> Date: Fri, 10 Mar 2023 14:52:22 -0500 Subject: [PATCH 163/428] word-align battle_interface u8 array gfx (#2812) Co-authored-by: ghoulslash --- src/battle_interface.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/battle_interface.c b/src/battle_interface.c index a793320f6a63..35c0e60c63b3 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -607,7 +607,7 @@ static const struct WindowTemplate sHealthboxWindowTemplate = { .baseBlock = 0 }; -static const u8 sMegaTriggerGfx[] = INCBIN_U8("graphics/battle_interface/mega_trigger.4bpp"); +static const u8 ALIGNED(4) sMegaTriggerGfx[] = INCBIN_U8("graphics/battle_interface/mega_trigger.4bpp"); static const u16 sMegaTriggerPal[] = INCBIN_U16("graphics/battle_interface/mega_trigger.gbapal"); static const struct SpriteSheet sSpriteSheet_MegaTrigger = @@ -1436,10 +1436,10 @@ enum INDICATOR_COUNT, }; -static const u8 sMegaIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/mega_indicator.4bpp"); +static const u8 ALIGNED(4) sMegaIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/mega_indicator.4bpp"); static const u16 sMegaIndicatorPal[] = INCBIN_U16("graphics/battle_interface/mega_indicator.gbapal"); -static const u8 sAlphaIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/alpha_indicator.4bpp"); -static const u8 sOmegaIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/omega_indicator.4bpp"); +static const u8 ALIGNED(4) sAlphaIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/alpha_indicator.4bpp"); +static const u8 ALIGNED(4) sOmegaIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/omega_indicator.4bpp"); static const u16 sAlphaOmegaIndicatorPal[] = INCBIN_U16("graphics/battle_interface/alpha_indicator.gbapal"); static const struct SpriteSheet sMegaIndicator_SpriteSheets[] = @@ -2775,7 +2775,7 @@ static void SafariTextIntoHealthboxObject(void *dest, u8 *windowTileData, u32 wi #define tSpriteId1 data[6] #define tSpriteId2 data[7] -static const u8 sAbilityPopUpGfx[] = INCBIN_U8("graphics/battle_interface/ability_pop_up.4bpp"); +static const u8 ALIGNED(4) sAbilityPopUpGfx[] = INCBIN_U8("graphics/battle_interface/ability_pop_up.4bpp"); static const u16 sAbilityPopUpPalette[] = INCBIN_U16("graphics/battle_interface/ability_pop_up.gbapal"); static const struct SpriteSheet sSpriteSheet_AbilityPopUp = @@ -3234,9 +3234,9 @@ static const struct SpriteTemplate sSpriteTemplate_LastUsedBallWindow = }; #if B_LAST_USED_BALL_BUTTON == R_BUTTON - static const u8 sLastUsedBallWindowGfx[] = INCBIN_U8("graphics/battle_interface/last_used_ball_r.4bpp"); + static const u8 ALIGNED(4) sLastUsedBallWindowGfx[] = INCBIN_U8("graphics/battle_interface/last_used_ball_r.4bpp"); #else - static const u8 sLastUsedBallWindowGfx[] = INCBIN_U8("graphics/battle_interface/last_used_ball_l.4bpp"); + static const u8 ALIGNED(4) sLastUsedBallWindowGfx[] = INCBIN_U8("graphics/battle_interface/last_used_ball_l.4bpp"); #endif static const struct SpriteSheet sSpriteSheet_LastUsedBallWindow = { From 7ce68994ec3f05c305f1800c490b429b3923d4f4 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sun, 12 Mar 2023 02:32:09 -0300 Subject: [PATCH 164/428] Made Mega Evolution properly use TryBattleFormChange --- data/battle_scripts_1.s | 3 +- src/battle_script_commands.c | 20 ++---- src/battle_util.c | 63 +++++++++++------- src/data/pokemon/form_change_tables.h | 94 --------------------------- src/pokemon.c | 1 - 5 files changed, 45 insertions(+), 136 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 8bba9328659f..e8b45cc3d38f 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -7833,10 +7833,9 @@ BattleScript_MegaEvolutionAfeterString: waitmessage B_WAIT_TIME_LONG setbyte gIsCriticalHit, 0 handlemegaevo BS_ATTACKER, 0 - handlemegaevo BS_ATTACKER, 1 playanimation BS_ATTACKER, B_ANIM_MEGA_EVOLUTION waitanimation - handlemegaevo BS_ATTACKER, 2 + handlemegaevo BS_ATTACKER, 1 printstring STRINGID_MEGAEVOEVOLVED waitmessage B_WAIT_TIME_LONG switchinabilities BS_ATTACKER diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 360cef12522a..48677225743c 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -8679,37 +8679,27 @@ static void HandleScriptMegaPrimal(u32 caseId, u32 battlerId, bool32 isMega) // Change species. if (caseId == 0) { - u16 newSpecies; if (isMega) { - //Checks regular Mega Evolution - newSpecies = GetBattleFormChangeTargetSpecies(battlerId, FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM); - //Checks Wish Mega Evolution - if (newSpecies == SPECIES_NONE) - newSpecies = GetBattleFormChangeTargetSpecies(battlerId, FORM_CHANGE_BATTLE_MEGA_EVOLUTION_MOVE); + if (!TryBattleFormChange(battlerId, FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM)) + TryBattleFormChange(battlerId, FORM_CHANGE_BATTLE_MEGA_EVOLUTION_MOVE); } else - newSpecies = GetBattleFormChangeTargetSpecies(battlerId, FORM_CHANGE_BATTLE_PRIMAL_REVERSION); + TryBattleFormChange(battlerId, FORM_CHANGE_BATTLE_PRIMAL_REVERSION); - gBattleMons[battlerId].species = newSpecies; PREPARE_SPECIES_BUFFER(gBattleTextBuff1, gBattleMons[battlerId].species); BtlController_EmitSetMonData(BUFFER_A, REQUEST_SPECIES_BATTLE, gBitTable[gBattlerPartyIndexes[battlerId]], sizeof(gBattleMons[battlerId].species), &gBattleMons[battlerId].species); MarkBattlerForControllerExec(battlerId); } - // Change stats. - else if (caseId == 1) - { - RecalcBattlerStats(battlerId, mon); - if (isMega) - gBattleStruct->mega.alreadyEvolved[position] = TRUE; - } // Update healthbox and elevation and play cry. else { UpdateHealthboxAttribute(gHealthboxSpriteIds[battlerId], mon, HEALTHBOX_ALL); if (side == B_SIDE_OPPONENT) SetBattlerShadowSpriteCallback(battlerId, gBattleMons[battlerId].species); + if (isMega) + gBattleStruct->mega.alreadyEvolved[position] = TRUE; } } diff --git a/src/battle_util.c b/src/battle_util.c index 9a8954fd5f44..aba70e377fa1 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -10071,11 +10071,17 @@ bool32 CanMegaEvolve(u8 battlerId) bool32 IsBattlerMegaEvolved(u8 battlerId) { + // While Transform does copy stats and visuals, it shouldn't be counted as true Mega Evolution. + if (gBattleMons[battlerId].status2 & STATUS2_TRANSFORMED) + return FALSE; return (gSpeciesInfo[gBattleMons[battlerId].species].flags & SPECIES_FLAG_MEGA_EVOLUTION); } bool32 IsBattlerPrimalReverted(u8 battlerId) { + // While Transform does copy stats and visuals, it shouldn't be counted as true Primal Revesion. + if (gBattleMons[battlerId].status2 & STATUS2_TRANSFORMED) + return FALSE; return (gSpeciesInfo[gBattleMons[battlerId].species].flags & SPECIES_FLAG_PRIMAL_REVERSION); } @@ -10145,6 +10151,18 @@ u16 GetBattleFormChangeTargetSpecies(u8 battlerId, u16 method) return targetSpecies; } +bool32 CanBattlerFormChange(u8 battlerId, u16 method) +{ + // Can't change form if transformed. + if (gBattleMons[battlerId].status2 & STATUS2_TRANSFORMED) + return FALSE; + // Mega Evolved Pokémon should always revert to normal upon fainting or ending the battle. + if (IsBattlerMegaEvolved(battlerId) + && (method == FORM_CHANGE_FAINT || method == FORM_CHANGE_END_BATTLE)) + return TRUE; + return DoesSpeciesHaveFormChangeMethod(gBattleMons[battlerId].species, method); +} + bool32 TryBattleFormChange(u8 battlerId, u16 method) { u8 monId = gBattlerPartyIndexes[battlerId]; @@ -10152,14 +10170,12 @@ bool32 TryBattleFormChange(u8 battlerId, u16 method) struct Pokemon *party = (side == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty; u16 targetSpecies; - // Can't change form if transformed. - if (gBattleMons[battlerId].status2 & STATUS2_TRANSFORMED) - return FALSE; - - if (!DoesSpeciesHaveFormChangeMethod(gBattleMons[battlerId].species, method)) + if (!CanBattlerFormChange(battlerId, method)) return FALSE; targetSpecies = GetBattleFormChangeTargetSpecies(battlerId, method); + if (targetSpecies == SPECIES_NONE) + targetSpecies = GetFormChangeTargetSpecies(&party[monId], method, 0); if (targetSpecies != SPECIES_NONE) { // Saves the original species on the first form change for the player. @@ -10172,27 +10188,26 @@ bool32 TryBattleFormChange(u8 battlerId, u16 method) RecalcBattlerStats(battlerId, &party[monId]); return TRUE; } - - targetSpecies = GetFormChangeTargetSpecies(&party[monId], method, 0); - if (targetSpecies != SPECIES_NONE) + else if (gBattleStruct->changedSpecies[monId] != SPECIES_NONE) { - // Saves the original species on the first form change for the player. - if (side == B_SIDE_PLAYER && gBattleStruct->changedSpecies[monId] == SPECIES_NONE) - gBattleStruct->changedSpecies[monId] = targetSpecies; + bool8 restoreSpecies = FALSE; - TryToSetBattleFormChangeMoves(&party[monId], method); - SetMonData(&party[monId], MON_DATA_SPECIES, &targetSpecies); - gBattleMons[battlerId].species = targetSpecies; - RecalcBattlerStats(battlerId, &party[monId]); - return TRUE; - } - else if ((method == FORM_CHANGE_END_BATTLE || method == FORM_CHANGE_FAINT) - && gBattleStruct->changedSpecies[monId] != SPECIES_NONE) - { - TryToSetBattleFormChangeMoves(&party[monId], method); - SetMonData(&party[monId], MON_DATA_SPECIES, &gBattleStruct->changedSpecies[monId]); - RecalcBattlerStats(battlerId, &party[monId]); - return TRUE; + // Mega Evolved Pokémon should always revert to normal upon fainting or ending the battle, so no need to add it to the form change tables. + if (IsBattlerMegaEvolved(battlerId) && (method == FORM_CHANGE_FAINT || method == FORM_CHANGE_END_BATTLE)) + restoreSpecies = TRUE; + + // Unlike Megas, Primal Reversion isn't canceled on fainting. + else if (IsBattlerPrimalReverted(battlerId) && (method == FORM_CHANGE_END_BATTLE)) + restoreSpecies = TRUE; + + if (restoreSpecies) + { + // Reverts the original species + TryToSetBattleFormChangeMoves(&party[monId], method); + SetMonData(&party[monId], MON_DATA_SPECIES, &gBattleStruct->changedSpecies[monId]); + RecalcBattlerStats(battlerId, &party[monId]); + return TRUE; + } } return FALSE; diff --git a/src/data/pokemon/form_change_tables.h b/src/data/pokemon/form_change_tables.h index 5050b488b731..9787d2a9bfe1 100644 --- a/src/data/pokemon/form_change_tables.h +++ b/src/data/pokemon/form_change_tables.h @@ -1,287 +1,207 @@ static const struct FormChange sVenusaurFormChangeTable[] = { {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_VENUSAUR_MEGA, ITEM_VENUSAURITE}, - {FORM_CHANGE_FAINT, SPECIES_VENUSAUR}, - {FORM_CHANGE_END_BATTLE, SPECIES_VENUSAUR}, {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sCharizardFormChangeTable[] = { {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_CHARIZARD_MEGA_X, ITEM_CHARIZARDITE_X}, {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_CHARIZARD_MEGA_Y, ITEM_CHARIZARDITE_Y}, - {FORM_CHANGE_FAINT, SPECIES_CHARIZARD}, - {FORM_CHANGE_END_BATTLE, SPECIES_CHARIZARD}, {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sBlastoiseFormChangeTable[] = { {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_BLASTOISE_MEGA, ITEM_BLASTOISINITE}, - {FORM_CHANGE_FAINT, SPECIES_BLASTOISE}, - {FORM_CHANGE_END_BATTLE, SPECIES_BLASTOISE}, {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sBeedrillFormChangeTable[] = { {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_BEEDRILL_MEGA, ITEM_BEEDRILLITE}, - {FORM_CHANGE_FAINT, SPECIES_BEEDRILL}, - {FORM_CHANGE_END_BATTLE, SPECIES_BEEDRILL}, {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sPidgeotFormChangeTable[] = { {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_PIDGEOT_MEGA, ITEM_PIDGEOTITE}, - {FORM_CHANGE_FAINT, SPECIES_PIDGEOT}, - {FORM_CHANGE_END_BATTLE, SPECIES_PIDGEOT}, {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sAlakazamFormChangeTable[] = { {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_ALAKAZAM_MEGA, ITEM_ALAKAZITE}, - {FORM_CHANGE_FAINT, SPECIES_ALAKAZAM}, - {FORM_CHANGE_END_BATTLE, SPECIES_ALAKAZAM}, {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sSlowbroFormChangeTable[] = { {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_SLOWBRO_MEGA, ITEM_SLOWBRONITE}, - {FORM_CHANGE_FAINT, SPECIES_SLOWBRO}, - {FORM_CHANGE_END_BATTLE, SPECIES_SLOWBRO}, {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sGengarFormChangeTable[] = { {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_GENGAR_MEGA, ITEM_GENGARITE}, - {FORM_CHANGE_FAINT, SPECIES_GENGAR}, - {FORM_CHANGE_END_BATTLE, SPECIES_GENGAR}, {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sKangaskhanFormChangeTable[] = { {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_KANGASKHAN_MEGA, ITEM_KANGASKHANITE}, - {FORM_CHANGE_FAINT, SPECIES_KANGASKHAN}, - {FORM_CHANGE_END_BATTLE, SPECIES_KANGASKHAN}, {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sPinsirFormChangeTable[] = { {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_PINSIR_MEGA, ITEM_PINSIRITE}, - {FORM_CHANGE_FAINT, SPECIES_PINSIR}, - {FORM_CHANGE_END_BATTLE, SPECIES_PINSIR}, {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sGyaradosFormChangeTable[] = { {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_GYARADOS_MEGA, ITEM_GYARADOSITE}, - {FORM_CHANGE_FAINT, SPECIES_GYARADOS}, - {FORM_CHANGE_END_BATTLE, SPECIES_GYARADOS}, {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sAerodactylFormChangeTable[] = { {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_AERODACTYL_MEGA, ITEM_AERODACTYLITE}, - {FORM_CHANGE_FAINT, SPECIES_AERODACTYL}, - {FORM_CHANGE_END_BATTLE, SPECIES_AERODACTYL}, {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sMewtwoFormChangeTable[] = { {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_MEWTWO_MEGA_X, ITEM_MEWTWONITE_X}, {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_MEWTWO_MEGA_Y, ITEM_MEWTWONITE_Y}, - {FORM_CHANGE_FAINT, SPECIES_MEWTWO}, - {FORM_CHANGE_END_BATTLE, SPECIES_MEWTWO}, {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sAmpharosFormChangeTable[] = { {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_AMPHAROS_MEGA, ITEM_AMPHAROSITE}, - {FORM_CHANGE_FAINT, SPECIES_AMPHAROS}, - {FORM_CHANGE_END_BATTLE, SPECIES_AMPHAROS}, {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sSteelixFormChangeTable[] = { {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_STEELIX_MEGA, ITEM_STEELIXITE}, - {FORM_CHANGE_FAINT, SPECIES_STEELIX}, - {FORM_CHANGE_END_BATTLE, SPECIES_STEELIX}, {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sScizorFormChangeTable[] = { {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_SCIZOR_MEGA, ITEM_SCIZORITE}, - {FORM_CHANGE_FAINT, SPECIES_SCIZOR}, - {FORM_CHANGE_END_BATTLE, SPECIES_SCIZOR}, {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sHeracrossFormChangeTable[] = { {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_HERACROSS_MEGA, ITEM_HERACRONITE}, - {FORM_CHANGE_FAINT, SPECIES_HERACROSS}, - {FORM_CHANGE_END_BATTLE, SPECIES_HERACROSS}, {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sHoundoomFormChangeTable[] = { {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_HOUNDOOM_MEGA, ITEM_HOUNDOOMINITE}, - {FORM_CHANGE_FAINT, SPECIES_HOUNDOOM}, - {FORM_CHANGE_END_BATTLE, SPECIES_HOUNDOOM}, {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sTyranitarFormChangeTable[] = { {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_TYRANITAR_MEGA, ITEM_TYRANITARITE}, - {FORM_CHANGE_FAINT, SPECIES_TYRANITAR}, - {FORM_CHANGE_END_BATTLE, SPECIES_TYRANITAR}, {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sSceptileFormChangeTable[] = { {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_SCEPTILE_MEGA, ITEM_SCEPTILITE}, - {FORM_CHANGE_FAINT, SPECIES_SCEPTILE}, - {FORM_CHANGE_END_BATTLE, SPECIES_SCEPTILE}, {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sBlazikenFormChangeTable[] = { {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_BLAZIKEN_MEGA, ITEM_BLAZIKENITE}, - {FORM_CHANGE_FAINT, SPECIES_BLAZIKEN}, - {FORM_CHANGE_END_BATTLE, SPECIES_BLAZIKEN}, {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sSwampertFormChangeTable[] = { {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_SWAMPERT_MEGA, ITEM_SWAMPERTITE}, - {FORM_CHANGE_FAINT, SPECIES_SWAMPERT}, - {FORM_CHANGE_END_BATTLE, SPECIES_SWAMPERT}, {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sSableyeFormChangeTable[] = { {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_SABLEYE_MEGA, ITEM_SABLENITE}, - {FORM_CHANGE_FAINT, SPECIES_SABLEYE}, - {FORM_CHANGE_END_BATTLE, SPECIES_SABLEYE}, {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sSharpedoFormChangeTable[] = { {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_SHARPEDO_MEGA, ITEM_SHARPEDONITE}, - {FORM_CHANGE_FAINT, SPECIES_SHARPEDO}, - {FORM_CHANGE_END_BATTLE, SPECIES_SHARPEDO}, {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sManectricFormChangeTable[] = { {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_MANECTRIC_MEGA, ITEM_MANECTITE}, - {FORM_CHANGE_FAINT, SPECIES_MANECTRIC}, - {FORM_CHANGE_END_BATTLE, SPECIES_MANECTRIC}, {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sCameruptFormChangeTable[] = { {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_CAMERUPT_MEGA, ITEM_CAMERUPTITE}, - {FORM_CHANGE_FAINT, SPECIES_CAMERUPT}, - {FORM_CHANGE_END_BATTLE, SPECIES_CAMERUPT}, {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sGlalieFormChangeTable[] = { {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_GLALIE_MEGA, ITEM_GLALITITE}, - {FORM_CHANGE_FAINT, SPECIES_GLALIE}, - {FORM_CHANGE_END_BATTLE, SPECIES_GLALIE}, {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sMawileFormChangeTable[] = { {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_MAWILE_MEGA, ITEM_MAWILITE}, - {FORM_CHANGE_FAINT, SPECIES_MAWILE}, - {FORM_CHANGE_END_BATTLE, SPECIES_MAWILE}, {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sMedichamFormChangeTable[] = { {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_MEDICHAM_MEGA, ITEM_MEDICHAMITE}, - {FORM_CHANGE_FAINT, SPECIES_MEDICHAM}, - {FORM_CHANGE_END_BATTLE, SPECIES_MEDICHAM}, {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sAltariaFormChangeTable[] = { {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_ALTARIA_MEGA, ITEM_ALTARIANITE}, - {FORM_CHANGE_FAINT, SPECIES_ALTARIA}, - {FORM_CHANGE_END_BATTLE, SPECIES_ALTARIA}, {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sAbsolFormChangeTable[] = { {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_ABSOL_MEGA, ITEM_ABSOLITE}, - {FORM_CHANGE_FAINT, SPECIES_ABSOL}, - {FORM_CHANGE_END_BATTLE, SPECIES_ABSOL}, {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sBanetteFormChangeTable[] = { {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_BANETTE_MEGA, ITEM_BANETTITE}, - {FORM_CHANGE_FAINT, SPECIES_BANETTE}, - {FORM_CHANGE_END_BATTLE, SPECIES_BANETTE}, {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sAggronFormChangeTable[] = { {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_AGGRON_MEGA, ITEM_AGGRONITE}, - {FORM_CHANGE_FAINT, SPECIES_AGGRON}, - {FORM_CHANGE_END_BATTLE, SPECIES_AGGRON}, {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sGardevoirFormChangeTable[] = { {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_GARDEVOIR_MEGA, ITEM_GARDEVOIRITE}, - {FORM_CHANGE_FAINT, SPECIES_GARDEVOIR}, - {FORM_CHANGE_END_BATTLE, SPECIES_GARDEVOIR}, {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sSalamenceFormChangeTable[] = { {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_SALAMENCE_MEGA, ITEM_SALAMENCITE}, - {FORM_CHANGE_FAINT, SPECIES_SALAMENCE}, - {FORM_CHANGE_END_BATTLE, SPECIES_SALAMENCE}, {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sMetagrossFormChangeTable[] = { {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_METAGROSS_MEGA, ITEM_METAGROSSITE}, - {FORM_CHANGE_FAINT, SPECIES_METAGROSS}, - {FORM_CHANGE_END_BATTLE, SPECIES_METAGROSS}, {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sLatiasFormChangeTable[] = { {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_LATIAS_MEGA, ITEM_LATIASITE}, - {FORM_CHANGE_FAINT, SPECIES_LATIAS}, - {FORM_CHANGE_END_BATTLE, SPECIES_LATIAS}, {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sLatiosFormChangeTable[] = { {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_LATIOS_MEGA, ITEM_LATIOSITE}, - {FORM_CHANGE_FAINT, SPECIES_LATIOS}, - {FORM_CHANGE_END_BATTLE, SPECIES_LATIOS}, {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sKyogreFormChangeTable[] = { {FORM_CHANGE_BATTLE_PRIMAL_REVERSION, SPECIES_KYOGRE_PRIMAL, ITEM_BLUE_ORB}, - {FORM_CHANGE_END_BATTLE, SPECIES_KYOGRE}, {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sGroudonFormChangeTable[] = { {FORM_CHANGE_BATTLE_PRIMAL_REVERSION, SPECIES_GROUDON_PRIMAL, ITEM_RED_ORB}, - {FORM_CHANGE_END_BATTLE, SPECIES_GROUDON}, {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sRayquazaFormChangeTable[] = { {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_MOVE, SPECIES_RAYQUAZA_MEGA, MOVE_DRAGON_ASCENT}, - {FORM_CHANGE_FAINT, SPECIES_RAYQUAZA}, - {FORM_CHANGE_END_BATTLE, SPECIES_RAYQUAZA}, {FORM_CHANGE_TERMINATOR}, }; @@ -300,36 +220,26 @@ static const struct FormChange sBurmyFormChangeTable[] = { static const struct FormChange sLopunnyFormChangeTable[] = { {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_LOPUNNY_MEGA, ITEM_LOPUNNITE}, - {FORM_CHANGE_FAINT, SPECIES_LOPUNNY}, - {FORM_CHANGE_END_BATTLE, SPECIES_LOPUNNY}, {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sGarchompFormChangeTable[] = { {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_GARCHOMP_MEGA, ITEM_GARCHOMPITE}, - {FORM_CHANGE_FAINT, SPECIES_GARCHOMP}, - {FORM_CHANGE_END_BATTLE, SPECIES_GARCHOMP}, {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sLucarioFormChangeTable[] = { {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_LUCARIO_MEGA, ITEM_LUCARIONITE}, - {FORM_CHANGE_FAINT, SPECIES_LUCARIO}, - {FORM_CHANGE_END_BATTLE, SPECIES_LUCARIO}, {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sAbomasnowFormChangeTable[] = { {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_ABOMASNOW_MEGA, ITEM_ABOMASITE}, - {FORM_CHANGE_FAINT, SPECIES_ABOMASNOW}, - {FORM_CHANGE_END_BATTLE, SPECIES_ABOMASNOW}, {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sGalladeFormChangeTable[] = { {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_GALLADE_MEGA, ITEM_GALLADITE}, - {FORM_CHANGE_FAINT, SPECIES_GALLADE}, - {FORM_CHANGE_END_BATTLE, SPECIES_GALLADE}, {FORM_CHANGE_TERMINATOR}, }; @@ -388,8 +298,6 @@ static const struct FormChange sArceusFormChangeTable[] = { #if P_GEN_5_POKEMON == TRUE static const struct FormChange sAudinoFormChangeTable[] = { {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_AUDINO_MEGA, ITEM_AUDINITE}, - {FORM_CHANGE_FAINT, SPECIES_AUDINO}, - {FORM_CHANGE_END_BATTLE, SPECIES_AUDINO}, {FORM_CHANGE_TERMINATOR}, }; @@ -478,8 +386,6 @@ static const struct FormChange sZygardePowerConstructFormChangeTable[] = { static const struct FormChange sDiancieFormChangeTable[] = { {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_DIANCIE_MEGA, ITEM_DIANCITE}, - {FORM_CHANGE_FAINT, SPECIES_DIANCIE}, - {FORM_CHANGE_END_BATTLE, SPECIES_DIANCIE}, {FORM_CHANGE_TERMINATOR}, }; diff --git a/src/pokemon.c b/src/pokemon.c index f01e72dcdb28..e11014120afa 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -8659,7 +8659,6 @@ bool32 ShouldShowFemaleDifferences(u16 species, u32 personality) return (gSpeciesInfo[species].flags & SPECIES_FLAG_GENDER_DIFFERENCE) && GetGenderFromSpeciesAndPersonality(species, personality) == MON_FEMALE; } -// Returns species that it transformed into. If it didn't, returns SPECIES_NONE. bool32 TryFormChange(u32 monId, u32 side, u16 method) { struct Pokemon *party = (side == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty; From c46e70ca8215831038c8312baf7caf3a29f323dd Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sun, 12 Mar 2023 02:38:27 -0300 Subject: [PATCH 165/428] Forgot about Primal Reversion --- src/battle_util.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/battle_util.c b/src/battle_util.c index aba70e377fa1..f4aa344b5d82 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -10157,8 +10157,9 @@ bool32 CanBattlerFormChange(u8 battlerId, u16 method) if (gBattleMons[battlerId].status2 & STATUS2_TRANSFORMED) return FALSE; // Mega Evolved Pokémon should always revert to normal upon fainting or ending the battle. - if (IsBattlerMegaEvolved(battlerId) - && (method == FORM_CHANGE_FAINT || method == FORM_CHANGE_END_BATTLE)) + if (IsBattlerMegaEvolved(battlerId) && (method == FORM_CHANGE_FAINT || method == FORM_CHANGE_END_BATTLE)) + return TRUE; + else if (IsBattlerPrimalReverted(battlerId) && (method == FORM_CHANGE_END_BATTLE)) return TRUE; return DoesSpeciesHaveFormChangeMethod(gBattleMons[battlerId].species, method); } From a101476d5187243b1d9c7a22d44d9fc60bbd7481 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sun, 12 Mar 2023 17:01:53 -0300 Subject: [PATCH 166/428] Hunger Switch test --- test/ability_hunger_switch.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 test/ability_hunger_switch.c diff --git a/test/ability_hunger_switch.c b/test/ability_hunger_switch.c new file mode 100644 index 000000000000..8ae31392993b --- /dev/null +++ b/test/ability_hunger_switch.c @@ -0,0 +1,25 @@ +#include "global.h" +#include "test_battle.h" + +SINGLE_BATTLE_TEST("Hunger Switch switches Morpeko's forms at the end of the turn") +{ + u16 species; + PARAMETRIZE { species = SPECIES_MORPEKO; } + PARAMETRIZE { species = SPECIES_MORPEKO_HANGRY; } + GIVEN { + ASSUME(P_GEN_8_POKEMON == TRUE); + PLAYER(species) { Moves(MOVE_CELEBRATE); Speed(2); }; + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE); Speed(1); }; + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE); } + } SCENE { + MESSAGE("Morpeko used Celebrate!"); + MESSAGE("Foe Wobbuffet used Celebrate!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); + } THEN { + if (species == SPECIES_MORPEKO) + EXPECT_EQ(player->species, SPECIES_MORPEKO_HANGRY); + else + EXPECT_EQ(player->species, SPECIES_MORPEKO); + } +} From a8c930945805f3b4237be57ef320d0e416ed792a Mon Sep 17 00:00:00 2001 From: Eduardo Quezada D'Ottone Date: Mon, 13 Mar 2023 05:07:29 -0300 Subject: [PATCH 167/428] Fixed Wring Out's power (#2824) Fixes #2823 --- src/data/battle_moves.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index c5375dc34b7e..dc18893de24a 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -6426,7 +6426,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_WRING_OUT] = { .effect = EFFECT_WRING_OUT, - .power = 0, + .power = 1, .type = TYPE_NORMAL, .accuracy = 100, .pp = 5, From 59d5f078d272a9f9089982224d5976909819ec49 Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 13 Mar 2023 17:44:25 +0100 Subject: [PATCH 168/428] samurott shiny.pal --- graphics/pokemon/samurott/shiny.pal | 19 ------------------- 1 file changed, 19 deletions(-) delete mode 100755 graphics/pokemon/samurott/shiny.pal diff --git a/graphics/pokemon/samurott/shiny.pal b/graphics/pokemon/samurott/shiny.pal deleted file mode 100755 index 5f67484f12f6..000000000000 --- a/graphics/pokemon/samurott/shiny.pal +++ /dev/null @@ -1,19 +0,0 @@ -JASC-PAL -0100 -16 -152 208 160 -16 16 16 -120 64 48 -216 152 128 -240 184 152 -176 104 80 -72 72 72 -248 248 248 -192 184 128 -40 40 64 -32 64 104 -208 80 96 -216 216 176 -120 120 80 -24 24 40 -0 0 0 From f3810465e80d017da1fe8caa5914ff01dd1a3b29 Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 13 Mar 2023 17:46:52 +0100 Subject: [PATCH 169/428] samurott shiny.pal v2 --- graphics/pokemon/samurott/shiny.pal | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 graphics/pokemon/samurott/shiny.pal diff --git a/graphics/pokemon/samurott/shiny.pal b/graphics/pokemon/samurott/shiny.pal new file mode 100644 index 000000000000..5f67484f12f6 --- /dev/null +++ b/graphics/pokemon/samurott/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +16 16 16 +120 64 48 +216 152 128 +240 184 152 +176 104 80 +72 72 72 +248 248 248 +192 184 128 +40 40 64 +32 64 104 +208 80 96 +216 216 176 +120 120 80 +24 24 40 +0 0 0 From 0c380862d61a9c4eccd9ed4915e12db6e7ca4310 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Mon, 13 Mar 2023 15:37:46 -0400 Subject: [PATCH 170/428] Document the trendy saying word group --- data/scripts/mauville_man.inc | 10 ++-- data/specials.inc | 4 +- include/constants/easy_chat.h | 2 +- include/constants/flags.h | 2 +- include/easy_chat.h | 4 +- include/global.h | 6 +-- src/easy_chat.c | 97 +++++++++++++++++++++-------------- src/mauville_old_man.c | 19 +++---- src/mystery_event_script.c | 2 +- 9 files changed, 83 insertions(+), 63 deletions(-) diff --git a/data/scripts/mauville_man.inc b/data/scripts/mauville_man.inc index eda3505bf4a9..a336360436a4 100644 --- a/data/scripts/mauville_man.inc +++ b/data/scripts/mauville_man.inc @@ -64,9 +64,9 @@ MauvilleCity_PokemonCenter_1F_EventScript_DeclineWritingLyrics:: MauvilleCity_PokemonCenter_1F_EventScript_Hipster:: lock faceplayer - setflag FLAG_SYS_HIPSTER_MEET + setflag FLAG_UNLOCKED_TRENDY_SAYINGS msgbox MauvilleCity_PokemonCenter_1F_Text_TeachWhatsHipAndHappening, MSGBOX_DEFAULT - special GetHipsterSpokenFlag + special HasHipsterTaughtWord goto_if_eq VAR_RESULT, FALSE, MauvilleCity_PokemonCenter_1F_EventScript_TryTeachWord msgbox MauvilleCity_PokemonCenter_1F_Text_IAlreadyTaughtYou, MSGBOX_DEFAULT release @@ -80,8 +80,8 @@ MauvilleCity_PokemonCenter_1F_EventScript_TryTeachWord:: end MauvilleCity_PokemonCenter_1F_EventScript_TeachWord:: - msgbox MauvilleCity_PokemonCenter_1F_Text_HaveYouHeardOfPhrase, MSGBOX_DEFAULT - special SetHipsterSpokenFlag + msgbox MauvilleCity_PokemonCenter_1F_Text_HaveYouHeardOfWord, MSGBOX_DEFAULT + special SetHipsterTaughtWord release end @@ -969,7 +969,7 @@ MauvilleCity_PokemonCenter_1F_Text_IveGotNothingNewToTeach: .string "what's hip and happening.\p" .string "I've got nothing new to teach you!$" -MauvilleCity_PokemonCenter_1F_Text_HaveYouHeardOfPhrase: +MauvilleCity_PokemonCenter_1F_Text_HaveYouHeardOfWord: .string "Hey, have you heard about\n" .string "“{STR_VAR_1}”?\p" .string "What's it mean? Well…\n" diff --git a/data/specials.inc b/data/specials.inc index a0dbde86836e..52b539a80511 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -111,8 +111,8 @@ gSpecials:: def_special Script_GetCurrentMauvilleMan def_special HasBardSongBeenChanged def_special SaveBardSongLyrics - def_special GetHipsterSpokenFlag - def_special SetHipsterSpokenFlag + def_special HasHipsterTaughtWord + def_special SetHipsterTaughtWord def_special HipsterTryTeachWord def_special PlayBardSong def_special SetMauvilleOldManObjEventGfx diff --git a/include/constants/easy_chat.h b/include/constants/easy_chat.h index b5875b88149e..b1f38941fc8f 100644 --- a/include/constants/easy_chat.h +++ b/include/constants/easy_chat.h @@ -1095,7 +1095,7 @@ #define EC_WORD_OLD ((EC_GROUP_TRENDY_SAYING << EC_MASK_BITS) | 30) #define EC_WORD_YOUNG ((EC_GROUP_TRENDY_SAYING << EC_MASK_BITS) | 31) #define EC_WORD_UGLY ((EC_GROUP_TRENDY_SAYING << EC_MASK_BITS) | 32) -#define NUM_ADDITIONAL_PHRASES 33 +#define NUM_TRENDY_SAYINGS 33 // Special Berry Masters Wife phrases #define NOT_SPECIAL_PHRASE 0 diff --git a/include/constants/flags.h b/include/constants/flags.h index 99a8377a7565..377f18107dbc 100644 --- a/include/constants/flags.h +++ b/include/constants/flags.h @@ -1348,7 +1348,7 @@ #define FLAG_UNUSED_0x863 (SYSTEM_FLAGS + 0x3) // Unused Flag #define FLAG_SYS_GAME_CLEAR (SYSTEM_FLAGS + 0x4) #define FLAG_SYS_CHAT_USED (SYSTEM_FLAGS + 0x5) -#define FLAG_SYS_HIPSTER_MEET (SYSTEM_FLAGS + 0x6) +#define FLAG_UNLOCKED_TRENDY_SAYINGS (SYSTEM_FLAGS + 0x6) // Badges #define FLAG_BADGE01_GET (SYSTEM_FLAGS + 0x7) diff --git a/include/easy_chat.h b/include/easy_chat.h index c9ef4428f786..4bcc7389cd82 100644 --- a/include/easy_chat.h +++ b/include/easy_chat.h @@ -128,11 +128,11 @@ void InitializeEasyChatWordArray(u16 *words, u16 length); u8 *ConvertEasyChatWordsToString(u8 *dest, const u16 *src, u16 columns, u16 rows); bool8 IsBardWordInvalid(u16 word); u16 GetRandomEasyChatWordFromGroup(u16 group); -u16 GetNewHipsterPhraseToTeach(void); +u16 UnlockRandomTrendySaying(void); u16 EasyChat_GetNumWordsInGroup(u8); u16 GetRandomEasyChatWordFromUnlockedGroup(u16); void DoEasyChatScreen(u8 type, u16 *words, MainCallback callback, u8 displayedPersonType); void InitQuestionnaireWords(void); -void UnlockAdditionalPhrase(u8 additionalPhraseId); +void UnlockTrendySaying(u8 wordIndex); #endif // GUARD_EASYCHAT_H diff --git a/include/global.h b/include/global.h index e0ff9f0c2359..9396a95f7a54 100644 --- a/include/global.h +++ b/include/global.h @@ -133,7 +133,7 @@ // values that don't appear in the Pokedex. NATIONAL_DEX_COUNT does not include these values. #define NUM_DEX_FLAG_BYTES ROUND_BITS_TO_BYTES(NUM_SPECIES) #define NUM_FLAG_BYTES ROUND_BITS_TO_BYTES(FLAGS_COUNT) -#define NUM_ADDITIONAL_PHRASE_BYTES ROUND_BITS_TO_BYTES(NUM_ADDITIONAL_PHRASES) +#define NUM_TRENDY_SAYING_BYTES ROUND_BITS_TO_BYTES(NUM_TRENDY_SAYINGS) // This produces an error at compile-time if expr is zero. // It looks like file.c:line: size of array `id' is negative @@ -673,7 +673,7 @@ struct MauvilleManGiddy struct MauvilleManHipster { u8 id; - bool8 alreadySpoken; + bool8 taughtWord; u8 language; }; @@ -1031,7 +1031,7 @@ struct SaveBlock1 /*0x2BC8*/ u16 easyChatBattleWon[EASY_CHAT_BATTLE_WORDS_COUNT]; /*0x2BD4*/ u16 easyChatBattleLost[EASY_CHAT_BATTLE_WORDS_COUNT]; /*0x2BE0*/ struct Mail mail[MAIL_COUNT]; - /*0x2E20*/ u8 additionalPhrases[NUM_ADDITIONAL_PHRASE_BYTES]; // bitfield for 33 additional phrases in easy chat system + /*0x2E20*/ u8 unlockedTrendySayings[NUM_TRENDY_SAYING_BYTES]; // Bitfield for unlockable Easy Chat words in EC_GROUP_TRENDY_SAYING /*0x2E25*/ //u8 padding5[3]; /*0x2E28*/ OldMan oldMan; /*0x2e64*/ struct DewfordTrend dewfordTrends[SAVED_TRENDS_COUNT]; diff --git a/src/easy_chat.c b/src/easy_chat.c index d08ea4b33dbc..35ba633cf4c1 100644 --- a/src/easy_chat.c +++ b/src/easy_chat.c @@ -5109,7 +5109,7 @@ static bool8 IsEasyChatGroupUnlocked(u8 groupId) switch (groupId) { case EC_GROUP_TRENDY_SAYING: - return FlagGet(FLAG_SYS_HIPSTER_MEET); + return FlagGet(FLAG_UNLOCKED_TRENDY_SAYINGS); case EC_GROUP_EVENTS: case EC_GROUP_MOVE_1: case EC_GROUP_MOVE_2: @@ -5425,80 +5425,99 @@ void BufferDeepLinkPhrase(void) CopyEasyChatWord(gStringVar2, easyChatWord); } -static bool8 IsAdditionalPhraseUnlocked(u8 additionalPhraseId) +/* + ### Trendy Sayings + + Not to be confused with Dewford Town's "trendy phrase". + + This is a group of easy chat words (EC_GROUP_TRENDY_SAYING) that are normally inaccessible. + They can be unlocked either through Mystery Event (where they're referred to as "rare" words) + or from the "Hipster" variety of the Mauville Old Man. The Hipster can unlock one word each + time he is received via record mixing (and once if he is the player's default Old Man). + + Which words have been unlocked is saved in the unlockedTrendySayings bitfield in SaveBlock1 + + Unlocked trendy saying words are only accessible if the flag FLAG_UNLOCKED_TRENDY_SAYINGS is set. + It's set any time the player talks to the Hipster, but is not apparently set by Mystery Event, + meaning trendy saying words unlocked via Mystery Event may not be available until the player has + talked to the Hipster. +*/ +static bool8 IsTrendySayingUnlocked(u8 wordIndex) { - int byteOffset = additionalPhraseId / 8; - int shift = additionalPhraseId % 8; - return (gSaveBlock1Ptr->additionalPhrases[byteOffset] >> shift) & 1; + int byteOffset = wordIndex / 8; + int shift = wordIndex % 8; + return (gSaveBlock1Ptr->unlockedTrendySayings[byteOffset] >> shift) & 1; } -void UnlockAdditionalPhrase(u8 additionalPhraseId) +void UnlockTrendySaying(u8 wordIndex) { - if (additionalPhraseId < NUM_ADDITIONAL_PHRASES) + if (wordIndex < NUM_TRENDY_SAYINGS) { - int byteOffset = additionalPhraseId / 8; - int shift = additionalPhraseId % 8; - gSaveBlock1Ptr->additionalPhrases[byteOffset] |= 1 << shift; + int byteOffset = wordIndex / 8; + int shift = wordIndex % 8; + gSaveBlock1Ptr->unlockedTrendySayings[byteOffset] |= 1 << shift; } } -static u8 GetNumAdditionalPhrasesUnlocked(void) +static u8 GetNumTrendySayingsUnlocked(void) { u8 i; - u8 numAdditionalPhrasesUnlocked; + u8 numUnlocked; - for (i = 0, numAdditionalPhrasesUnlocked = 0; i < NUM_ADDITIONAL_PHRASES; i++) + for (i = 0, numUnlocked = 0; i < NUM_TRENDY_SAYINGS; i++) { - if (IsAdditionalPhraseUnlocked(i)) - numAdditionalPhrasesUnlocked++; + if (IsTrendySayingUnlocked(i)) + numUnlocked++; } - return numAdditionalPhrasesUnlocked; + return numUnlocked; } -u16 GetNewHipsterPhraseToTeach(void) +u16 UnlockRandomTrendySaying(void) { u16 i; - u16 additionalPhraseId; - u8 numAdditionalPhrasesUnlocked = GetNumAdditionalPhrasesUnlocked(); - if (numAdditionalPhrasesUnlocked == NUM_ADDITIONAL_PHRASES) + u16 numToSkip; + u8 numUnlocked = GetNumTrendySayingsUnlocked(); + if (numUnlocked == NUM_TRENDY_SAYINGS) return EC_EMPTY_WORD; - additionalPhraseId = Random() % (NUM_ADDITIONAL_PHRASES - numAdditionalPhrasesUnlocked); - for (i = 0; i < NUM_ADDITIONAL_PHRASES; i++) + numToSkip = Random() % (NUM_TRENDY_SAYINGS - numUnlocked); + for (i = 0; i < NUM_TRENDY_SAYINGS; i++) { - if (!IsAdditionalPhraseUnlocked(i)) + if (!IsTrendySayingUnlocked(i)) { - if (additionalPhraseId) + if (numToSkip) { - additionalPhraseId--; + // Skip the first n locked words, as determined by the Random call above. + numToSkip--; } else { - UnlockAdditionalPhrase(i); + UnlockTrendySaying(i); return EC_WORD(EC_GROUP_TRENDY_SAYING, i); } } } + // Would only be reached if there are no new words to teach, which is handled at the start. return EC_EMPTY_WORD; } // Unused -u16 GetRandomTaughtHipsterPhrase(void) +static u16 GetRandomUnlockedTrendySaying(void) { u16 i; - u16 additionalPhraseId = GetNumAdditionalPhrasesUnlocked(); - if (additionalPhraseId == 0) + u16 n = GetNumTrendySayingsUnlocked(); + if (n == 0) return EC_EMPTY_WORD; - additionalPhraseId = Random() % additionalPhraseId; - for (i = 0; i < NUM_ADDITIONAL_PHRASES; i++) + n = Random() % n; + for (i = 0; i < NUM_TRENDY_SAYINGS; i++) { - if (IsAdditionalPhraseUnlocked(i)) + if (IsTrendySayingUnlocked(i)) { - if (additionalPhraseId) - additionalPhraseId--; + if (n) + n--; else return EC_WORD(EC_GROUP_TRENDY_SAYING, i); } @@ -5569,10 +5588,10 @@ void InitEasyChatPhrases(void) // Mauville old man data is corrupted, which is initialized directly after // this function is called when starting a new game. for (i = 0; i < 64; i++) - gSaveBlock1Ptr->additionalPhrases[i] = 0; + gSaveBlock1Ptr->unlockedTrendySayings[i] = 0; #else - for (i = 0; i < ARRAY_COUNT(gSaveBlock1Ptr->additionalPhrases); i++) - gSaveBlock1Ptr->additionalPhrases[i] = 0; + for (i = 0; i < ARRAY_COUNT(gSaveBlock1Ptr->unlockedTrendySayings); i++) + gSaveBlock1Ptr->unlockedTrendySayings[i] = 0; #endif } @@ -5611,7 +5630,7 @@ static void SetUnlockedEasyChatGroups(void) sWordData->unlockedGroupIds[sWordData->numUnlockedGroups++] = EC_GROUP_MOVE_2; } - if (FlagGet(FLAG_SYS_HIPSTER_MEET)) + if (FlagGet(FLAG_UNLOCKED_TRENDY_SAYINGS)) sWordData->unlockedGroupIds[sWordData->numUnlockedGroups++] = EC_GROUP_TRENDY_SAYING; if (IsNationalPokedexEnabled()) @@ -5800,7 +5819,7 @@ static bool8 IsEasyChatIndexAndGroupUnlocked(u16 wordIndex, u8 groupId) case EC_GROUP_MOVE_2: return TRUE; case EC_GROUP_TRENDY_SAYING: - return IsAdditionalPhraseUnlocked(wordIndex); + return IsTrendySayingUnlocked(wordIndex); default: return gEasyChatGroups[groupId].wordData.words[wordIndex].enabled; } diff --git a/src/mauville_old_man.c b/src/mauville_old_man.c index 689dcf6a1640..6075bd5d95a7 100644 --- a/src/mauville_old_man.c +++ b/src/mauville_old_man.c @@ -88,7 +88,7 @@ static void SetupHipster(void) struct MauvilleManHipster *hipster = &gSaveBlock1Ptr->oldMan.hipster; hipster->id = MAUVILLE_MAN_HIPSTER; - hipster->alreadySpoken = FALSE; + hipster->taughtWord = FALSE; hipster->language = gGameLanguage; } @@ -225,27 +225,28 @@ void PlayBardSong(void) ScriptContext_Stop(); } -void GetHipsterSpokenFlag(void) +void HasHipsterTaughtWord(void) { - gSpecialVar_Result = (&gSaveBlock1Ptr->oldMan.hipster)->alreadySpoken; + gSpecialVar_Result = (&gSaveBlock1Ptr->oldMan.hipster)->taughtWord; } -void SetHipsterSpokenFlag(void) +void SetHipsterTaughtWord(void) { - (&gSaveBlock1Ptr->oldMan.hipster)->alreadySpoken = TRUE; + (&gSaveBlock1Ptr->oldMan.hipster)->taughtWord = TRUE; } void HipsterTryTeachWord(void) { - u16 phrase = GetNewHipsterPhraseToTeach(); + u16 word = UnlockRandomTrendySaying(); - if (phrase == EC_EMPTY_WORD) + if (word == EC_EMPTY_WORD) { + // All words already unlocked gSpecialVar_Result = FALSE; } else { - CopyEasyChatWord(gStringVar1, phrase); + CopyEasyChatWord(gStringVar1, word); gSpecialVar_Result = TRUE; } } @@ -369,7 +370,7 @@ static void ResetBardFlag(void) static void ResetHipsterFlag(void) { - (&gSaveBlock1Ptr->oldMan.hipster)->alreadySpoken = FALSE; + (&gSaveBlock1Ptr->oldMan.hipster)->taughtWord = FALSE; } static void ResetTraderFlag(void) diff --git a/src/mystery_event_script.c b/src/mystery_event_script.c index 124ababa45eb..b146bbab3983 100644 --- a/src/mystery_event_script.c +++ b/src/mystery_event_script.c @@ -293,7 +293,7 @@ bool8 MEScrCmd_givenationaldex(struct ScriptContext *ctx) bool8 MEScrCmd_addrareword(struct ScriptContext *ctx) { - UnlockAdditionalPhrase(ScriptReadByte(ctx)); + UnlockTrendySaying(ScriptReadByte(ctx)); StringExpandPlaceholders(gStringVar4, gText_MysteryEventRareWord); ctx->mStatus = MEVENT_STATUS_SUCCESS; return FALSE; From 0a9ab96390706326c3eda11059095e7298ea88d4 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Tue, 14 Mar 2023 08:54:49 -0300 Subject: [PATCH 171/428] Added STANDARD_FRIENDSHIP constant to allow easier custom adjustments --- include/constants/pokemon.h | 3 + src/data/pokemon/species_info.h | 652 ++++++++++++++++---------------- 2 files changed, 329 insertions(+), 326 deletions(-) diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h index 716d5adf9d14..e515378d4c23 100644 --- a/include/constants/pokemon.h +++ b/include/constants/pokemon.h @@ -190,6 +190,9 @@ #define FRIENDSHIP_200_TO_254 5 #define FRIENDSHIP_MAX 6 +// Friendship value that the majority of species use. This was changed in Generation 8 to 50. +#define STANDARD_FRIENDSHIP 70 + #define MAX_FRIENDSHIP 255 #define MAX_SHEEN 255 #define MAX_CONDITION 255 diff --git a/src/data/pokemon/species_info.h b/src/data/pokemon/species_info.h index 344852baf57f..2ef0629b52e0 100644 --- a/src/data/pokemon/species_info.h +++ b/src/data/pokemon/species_info.h @@ -57,7 +57,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_GRASS }, .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, @@ -87,7 +87,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_GRASS }, .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, @@ -117,7 +117,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_GRASS }, .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, @@ -147,7 +147,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_DRAGON }, .abilities = {ABILITY_BLAZE, ABILITY_NONE}, @@ -177,7 +177,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_DRAGON }, .abilities = {ABILITY_BLAZE, ABILITY_NONE}, @@ -207,7 +207,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_DRAGON }, .abilities = {ABILITY_BLAZE, ABILITY_NONE}, @@ -237,7 +237,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_TORRENT, ABILITY_NONE}, @@ -267,7 +267,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_TORRENT, ABILITY_NONE}, @@ -297,7 +297,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_TORRENT, ABILITY_NONE}, @@ -327,7 +327,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SHIELD_DUST, ABILITY_NONE}, @@ -357,7 +357,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SHED_SKIN, ABILITY_NONE}, @@ -387,7 +387,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_SILVER_POWDER, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_COMPOUND_EYES, ABILITY_NONE}, @@ -417,7 +417,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SHIELD_DUST, ABILITY_NONE}, @@ -447,7 +447,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SHED_SKIN, ABILITY_NONE}, @@ -477,7 +477,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_POISON_BARB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SWARM, ABILITY_NONE}, @@ -507,7 +507,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING }, .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE}, @@ -537,7 +537,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING }, .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE}, @@ -567,7 +567,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING }, .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE}, @@ -597,7 +597,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_RUN_AWAY, ABILITY_GUTS}, @@ -627,7 +627,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_RUN_AWAY, ABILITY_GUTS}, @@ -657,7 +657,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING }, .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE}, @@ -687,7 +687,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_SHARP_BEAK, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING }, .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE}, @@ -717,7 +717,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_DRAGON }, .abilities = {ABILITY_INTIMIDATE, ABILITY_SHED_SKIN}, @@ -747,7 +747,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_DRAGON }, .abilities = {ABILITY_INTIMIDATE, ABILITY_SHED_SKIN}, @@ -777,7 +777,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_LIGHT_BALL, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 10, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FAIRY }, .abilities = {ABILITY_STATIC, ABILITY_NONE}, @@ -807,7 +807,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_ORAN_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 10, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FAIRY }, .abilities = {ABILITY_STATIC, ABILITY_NONE}, @@ -837,7 +837,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_QUICK_CLAW, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_SAND_VEIL, ABILITY_NONE}, @@ -867,7 +867,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_QUICK_CLAW, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_SAND_VEIL, ABILITY_NONE}, @@ -897,7 +897,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_FEMALE, .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_FIELD }, .abilities = {ABILITY_POISON_POINT, ABILITY_NONE}, @@ -927,7 +927,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_FEMALE, .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, .abilities = {ABILITY_POISON_POINT, ABILITY_NONE}, @@ -957,7 +957,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_FEMALE, .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, .abilities = {ABILITY_POISON_POINT, ABILITY_NONE}, @@ -987,7 +987,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_MALE, .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_FIELD }, .abilities = {ABILITY_POISON_POINT, ABILITY_NONE}, @@ -1017,7 +1017,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_MALE, .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_FIELD }, .abilities = {ABILITY_POISON_POINT, ABILITY_NONE}, @@ -1047,7 +1047,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_MALE, .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_FIELD }, .abilities = {ABILITY_POISON_POINT, ABILITY_NONE}, @@ -1137,7 +1137,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_RAWST_BERRY, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_FLASH_FIRE, ABILITY_NONE}, @@ -1167,7 +1167,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_RAWST_BERRY, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_FLASH_FIRE, ABILITY_NONE}, @@ -1197,7 +1197,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 10, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_FAIRY }, .abilities = {ABILITY_CUTE_CHARM, ABILITY_NONE}, @@ -1227,7 +1227,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 10, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_FAIRY }, .abilities = {ABILITY_CUTE_CHARM, ABILITY_NONE}, @@ -1257,7 +1257,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING }, .abilities = {ABILITY_INNER_FOCUS, ABILITY_NONE}, @@ -1287,7 +1287,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING }, .abilities = {ABILITY_INNER_FOCUS, ABILITY_NONE}, @@ -1317,7 +1317,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS }, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, @@ -1347,7 +1347,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS }, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, @@ -1377,7 +1377,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS }, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, @@ -1407,7 +1407,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_BIG_MUSHROOM, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_GRASS }, .abilities = {ABILITY_EFFECT_SPORE, ABILITY_NONE}, @@ -1437,7 +1437,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_BIG_MUSHROOM, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_GRASS }, .abilities = {ABILITY_EFFECT_SPORE, ABILITY_NONE}, @@ -1467,7 +1467,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_COMPOUND_EYES, ABILITY_NONE}, @@ -1497,7 +1497,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SHIELD_DUST, ABILITY_NONE}, @@ -1527,7 +1527,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_SAND_VEIL, ABILITY_ARENA_TRAP}, @@ -1557,7 +1557,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_SAND_VEIL, ABILITY_ARENA_TRAP}, @@ -1587,7 +1587,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_PICKUP, ABILITY_NONE}, @@ -1617,7 +1617,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_LIMBER, ABILITY_NONE}, @@ -1647,7 +1647,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FIELD }, .abilities = {ABILITY_DAMP, ABILITY_CLOUD_NINE}, @@ -1677,7 +1677,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FIELD }, .abilities = {ABILITY_DAMP, ABILITY_CLOUD_NINE}, @@ -1707,7 +1707,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_VITAL_SPIRIT, ABILITY_NONE}, @@ -1737,7 +1737,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_VITAL_SPIRIT, ABILITY_NONE}, @@ -1767,7 +1767,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_RAWST_BERRY, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_INTIMIDATE, ABILITY_FLASH_FIRE}, @@ -1797,7 +1797,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_RAWST_BERRY, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_INTIMIDATE, ABILITY_FLASH_FIRE}, @@ -1827,7 +1827,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_WATER_ABSORB, ABILITY_DAMP}, @@ -1857,7 +1857,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_KINGS_ROCK, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_WATER_ABSORB, ABILITY_DAMP}, @@ -1887,7 +1887,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_KINGS_ROCK, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_WATER_ABSORB, ABILITY_DAMP}, @@ -1917,7 +1917,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_TWISTED_SPOON, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_SYNCHRONIZE, ABILITY_INNER_FOCUS}, @@ -1947,7 +1947,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_TWISTED_SPOON, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_SYNCHRONIZE, ABILITY_INNER_FOCUS}, @@ -1977,7 +1977,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_TWISTED_SPOON, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_SYNCHRONIZE, ABILITY_INNER_FOCUS}, @@ -2007,7 +2007,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_GUTS, ABILITY_NONE}, @@ -2037,7 +2037,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_GUTS, ABILITY_NONE}, @@ -2067,7 +2067,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_GUTS, ABILITY_NONE}, @@ -2097,7 +2097,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS }, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, @@ -2127,7 +2127,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS }, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, @@ -2157,7 +2157,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS }, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, @@ -2187,7 +2187,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_WATER_3, EGG_GROUP_WATER_3 }, .abilities = {ABILITY_CLEAR_BODY, ABILITY_LIQUID_OOZE}, @@ -2217,7 +2217,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_WATER_3, EGG_GROUP_WATER_3 }, .abilities = {ABILITY_CLEAR_BODY, ABILITY_LIQUID_OOZE}, @@ -2247,7 +2247,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_EVERSTONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL }, .abilities = {ABILITY_ROCK_HEAD, ABILITY_STURDY}, @@ -2277,7 +2277,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_EVERSTONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL }, .abilities = {ABILITY_ROCK_HEAD, ABILITY_STURDY}, @@ -2307,7 +2307,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_EVERSTONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL }, .abilities = {ABILITY_ROCK_HEAD, ABILITY_STURDY}, @@ -2337,7 +2337,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_RUN_AWAY, ABILITY_FLASH_FIRE}, @@ -2367,7 +2367,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_RUN_AWAY, ABILITY_FLASH_FIRE}, @@ -2397,7 +2397,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_KINGS_ROCK, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_OBLIVIOUS, ABILITY_OWN_TEMPO}, @@ -2427,7 +2427,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_KINGS_ROCK, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_OBLIVIOUS, ABILITY_OWN_TEMPO}, @@ -2457,7 +2457,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_METAL_COAT, .genderRatio = MON_GENDERLESS, .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL }, .abilities = {ABILITY_MAGNET_PULL, ABILITY_STURDY}, @@ -2487,7 +2487,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_METAL_COAT, .genderRatio = MON_GENDERLESS, .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL }, .abilities = {ABILITY_MAGNET_PULL, ABILITY_STURDY}, @@ -2517,7 +2517,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_STICK, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FIELD }, .abilities = {ABILITY_KEEN_EYE, ABILITY_INNER_FOCUS}, @@ -2547,7 +2547,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_SHARP_BEAK, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING }, .abilities = {ABILITY_RUN_AWAY, ABILITY_EARLY_BIRD}, @@ -2577,7 +2577,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_SHARP_BEAK, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING }, .abilities = {ABILITY_RUN_AWAY, ABILITY_EARLY_BIRD}, @@ -2607,7 +2607,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FIELD }, .abilities = {ABILITY_THICK_FAT, ABILITY_NONE}, @@ -2637,7 +2637,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FIELD }, .abilities = {ABILITY_THICK_FAT, ABILITY_NONE}, @@ -2667,7 +2667,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NUGGET, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS }, .abilities = {ABILITY_STENCH, ABILITY_STICKY_HOLD}, @@ -2697,7 +2697,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NUGGET, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS }, .abilities = {ABILITY_STENCH, ABILITY_STICKY_HOLD}, @@ -2727,7 +2727,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_BIG_PEARL, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_WATER_3, EGG_GROUP_WATER_3 }, .abilities = {ABILITY_SHELL_ARMOR, ABILITY_NONE}, @@ -2757,7 +2757,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_BIG_PEARL, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_WATER_3, EGG_GROUP_WATER_3 }, .abilities = {ABILITY_SHELL_ARMOR, ABILITY_NONE}, @@ -2787,7 +2787,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS }, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, @@ -2817,7 +2817,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS }, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, @@ -2847,7 +2847,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS }, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, @@ -2877,7 +2877,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL }, .abilities = {ABILITY_ROCK_HEAD, ABILITY_STURDY}, @@ -2907,7 +2907,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_INSOMNIA, ABILITY_NONE}, @@ -2937,7 +2937,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_INSOMNIA, ABILITY_NONE}, @@ -2967,7 +2967,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_3, EGG_GROUP_WATER_3 }, .abilities = {ABILITY_HYPER_CUTTER, ABILITY_SHELL_ARMOR}, @@ -2997,7 +2997,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_3, EGG_GROUP_WATER_3 }, .abilities = {ABILITY_HYPER_CUTTER, ABILITY_SHELL_ARMOR}, @@ -3027,7 +3027,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL }, .abilities = {ABILITY_SOUNDPROOF, ABILITY_STATIC}, @@ -3057,7 +3057,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL }, .abilities = {ABILITY_SOUNDPROOF, ABILITY_STATIC}, @@ -3087,7 +3087,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS }, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, @@ -3117,7 +3117,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS }, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, @@ -3147,7 +3147,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_THICK_CLUB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_MONSTER }, .abilities = {ABILITY_ROCK_HEAD, ABILITY_LIGHTNING_ROD}, @@ -3177,7 +3177,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_THICK_CLUB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_MONSTER }, .abilities = {ABILITY_ROCK_HEAD, ABILITY_LIGHTNING_ROD}, @@ -3207,7 +3207,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_MALE, .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_LIMBER, ABILITY_NONE}, @@ -3237,7 +3237,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_MALE, .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE}, @@ -3267,7 +3267,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_MONSTER }, .abilities = {ABILITY_OWN_TEMPO, ABILITY_OBLIVIOUS}, @@ -3297,7 +3297,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_SMOKE_BALL, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS }, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, @@ -3327,7 +3327,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_SMOKE_BALL, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS }, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, @@ -3357,7 +3357,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_FIELD }, .abilities = {ABILITY_LIGHTNING_ROD, ABILITY_ROCK_HEAD}, @@ -3387,7 +3387,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_FIELD }, .abilities = {ABILITY_LIGHTNING_ROD, ABILITY_ROCK_HEAD}, @@ -3447,7 +3447,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS }, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, @@ -3477,7 +3477,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_FEMALE, .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_MONSTER }, .abilities = {ABILITY_EARLY_BIRD, ABILITY_NONE}, @@ -3507,7 +3507,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_DRAGON_SCALE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_DRAGON }, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE}, @@ -3537,7 +3537,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_DRAGON_SCALE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_DRAGON }, .abilities = {ABILITY_POISON_POINT, ABILITY_NONE}, @@ -3567,7 +3567,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2 }, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_WATER_VEIL}, @@ -3597,7 +3597,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2 }, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_WATER_VEIL}, @@ -3627,7 +3627,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_STAR_PIECE, .genderRatio = MON_GENDERLESS, .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_WATER_3, EGG_GROUP_WATER_3 }, .abilities = {ABILITY_ILLUMINATE, ABILITY_NATURAL_CURE}, @@ -3657,7 +3657,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_STAR_PIECE, .genderRatio = MON_GENDERLESS, .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_WATER_3, EGG_GROUP_WATER_3 }, .abilities = {ABILITY_ILLUMINATE, ABILITY_NATURAL_CURE}, @@ -3687,7 +3687,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_LEPPA_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_SOUNDPROOF, ABILITY_NONE}, @@ -3717,7 +3717,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SWARM, ABILITY_NONE}, @@ -3747,7 +3747,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_ASPEAR_BERRY, .genderRatio = MON_FEMALE, .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_OBLIVIOUS, ABILITY_NONE}, @@ -3777,7 +3777,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_STATIC, ABILITY_NONE}, @@ -3807,7 +3807,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_RAWST_BERRY, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_FLAME_BODY, ABILITY_NONE}, @@ -3837,7 +3837,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_HYPER_CUTTER, ABILITY_NONE}, @@ -3867,7 +3867,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_MALE, .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE}, @@ -3897,7 +3897,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 5, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_DRAGON }, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE}, @@ -3927,7 +3927,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 5, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_DRAGON }, .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE}, @@ -3957,7 +3957,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 40, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_WATER_ABSORB, ABILITY_SHELL_ARMOR}, @@ -3987,7 +3987,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_METAL_POWDER, .genderRatio = MON_GENDERLESS, .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_DITTO, EGG_GROUP_DITTO }, .abilities = {ABILITY_LIMBER, ABILITY_NONE}, @@ -4017,7 +4017,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 35, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_RUN_AWAY, ABILITY_NONE}, @@ -4047,7 +4047,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 35, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_WATER_ABSORB, ABILITY_NONE}, @@ -4077,7 +4077,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 35, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_VOLT_ABSORB, ABILITY_NONE}, @@ -4107,7 +4107,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 35, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_FLASH_FIRE, ABILITY_NONE}, @@ -4137,7 +4137,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL }, .abilities = {ABILITY_TRACE, ABILITY_NONE}, @@ -4167,7 +4167,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 30, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_3 }, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_SHELL_ARMOR}, @@ -4197,7 +4197,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 30, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_3 }, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_SHELL_ARMOR}, @@ -4227,7 +4227,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 30, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_3 }, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_BATTLE_ARMOR}, @@ -4257,7 +4257,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 30, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_3 }, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_BATTLE_ARMOR}, @@ -4287,7 +4287,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 35, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING }, .abilities = {ABILITY_ROCK_HEAD, ABILITY_PRESSURE}, @@ -4317,7 +4317,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_LEFTOVERS, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 40, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_MONSTER }, .abilities = {ABILITY_IMMUNITY, ABILITY_THICK_FAT}, @@ -4587,7 +4587,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_GRASS }, .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, @@ -4617,7 +4617,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_GRASS }, .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, @@ -4647,7 +4647,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_GRASS }, .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, @@ -4677,7 +4677,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_BLAZE, ABILITY_NONE}, @@ -4707,7 +4707,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_BLAZE, ABILITY_NONE}, @@ -4737,7 +4737,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_BLAZE, ABILITY_NONE}, @@ -4767,7 +4767,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_TORRENT, ABILITY_NONE}, @@ -4797,7 +4797,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_TORRENT, ABILITY_NONE}, @@ -4827,7 +4827,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_TORRENT, ABILITY_NONE}, @@ -4857,7 +4857,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_ORAN_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_RUN_AWAY, ABILITY_KEEN_EYE}, @@ -4887,7 +4887,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_SITRUS_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_RUN_AWAY, ABILITY_KEEN_EYE}, @@ -4917,7 +4917,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING }, .abilities = {ABILITY_INSOMNIA, ABILITY_KEEN_EYE}, @@ -4947,7 +4947,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING }, .abilities = {ABILITY_INSOMNIA, ABILITY_KEEN_EYE}, @@ -4977,7 +4977,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SWARM, ABILITY_EARLY_BIRD}, @@ -5007,7 +5007,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SWARM, ABILITY_EARLY_BIRD}, @@ -5037,7 +5037,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SWARM, ABILITY_INSOMNIA}, @@ -5067,7 +5067,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SWARM, ABILITY_INSOMNIA}, @@ -5097,7 +5097,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING }, .abilities = {ABILITY_INNER_FOCUS, ABILITY_NONE}, @@ -5127,7 +5127,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_YELLOW_SHARD, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2 }, .abilities = {ABILITY_VOLT_ABSORB, ABILITY_ILLUMINATE}, @@ -5157,7 +5157,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_YELLOW_SHARD, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2 }, .abilities = {ABILITY_VOLT_ABSORB, ABILITY_ILLUMINATE}, @@ -5187,7 +5187,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_ORAN_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 10, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, .abilities = {ABILITY_STATIC, ABILITY_NONE}, @@ -5247,7 +5247,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 10, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, .abilities = {ABILITY_CUTE_CHARM, ABILITY_NONE}, @@ -5277,7 +5277,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 10, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, .abilities = {ABILITY_HUSTLE, ABILITY_SERENE_GRACE}, @@ -5307,7 +5307,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 10, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FAIRY }, .abilities = {ABILITY_HUSTLE, ABILITY_SERENE_GRACE}, @@ -5337,7 +5337,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING }, .abilities = {ABILITY_SYNCHRONIZE, ABILITY_EARLY_BIRD}, @@ -5367,7 +5367,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING }, .abilities = {ABILITY_SYNCHRONIZE, ABILITY_EARLY_BIRD}, @@ -5397,7 +5397,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_FIELD }, .abilities = {ABILITY_STATIC, ABILITY_NONE}, @@ -5427,7 +5427,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_FIELD }, .abilities = {ABILITY_STATIC, ABILITY_NONE}, @@ -5457,7 +5457,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_FIELD }, .abilities = {ABILITY_STATIC, ABILITY_NONE}, @@ -5487,7 +5487,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS }, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, @@ -5517,7 +5517,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 10, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FAIRY }, .abilities = {ABILITY_THICK_FAT, ABILITY_HUGE_POWER}, @@ -5547,7 +5547,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 10, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FAIRY }, .abilities = {ABILITY_THICK_FAT, ABILITY_HUGE_POWER}, @@ -5577,7 +5577,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL }, .abilities = {ABILITY_STURDY, ABILITY_ROCK_HEAD}, @@ -5607,7 +5607,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_KINGS_ROCK, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_WATER_ABSORB, ABILITY_DAMP}, @@ -5637,7 +5637,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_GRASS }, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, @@ -5667,7 +5667,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_GRASS }, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, @@ -5697,7 +5697,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_GRASS }, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, @@ -5727,7 +5727,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_RUN_AWAY, ABILITY_PICKUP}, @@ -5757,7 +5757,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS }, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, @@ -5787,7 +5787,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS }, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, @@ -5817,7 +5817,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SPEED_BOOST, ABILITY_COMPOUND_EYES}, @@ -5847,7 +5847,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FIELD }, .abilities = {ABILITY_DAMP, ABILITY_WATER_ABSORB}, @@ -5877,7 +5877,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FIELD }, .abilities = {ABILITY_DAMP, ABILITY_WATER_ABSORB}, @@ -5907,7 +5907,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 35, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_SYNCHRONIZE, ABILITY_NONE}, @@ -5997,7 +5997,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_KINGS_ROCK, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_OBLIVIOUS, ABILITY_OWN_TEMPO}, @@ -6057,7 +6057,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 40, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, @@ -6087,7 +6087,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS }, .abilities = {ABILITY_SHADOW_TAG, ABILITY_NONE}, @@ -6117,7 +6117,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_PERSIM_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_INNER_FOCUS, ABILITY_EARLY_BIRD}, @@ -6147,7 +6147,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_STURDY, ABILITY_NONE}, @@ -6177,7 +6177,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_STURDY, ABILITY_NONE}, @@ -6207,7 +6207,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_SERENE_GRACE, ABILITY_RUN_AWAY}, @@ -6237,7 +6237,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_HYPER_CUTTER, ABILITY_SAND_VEIL}, @@ -6267,7 +6267,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_METAL_COAT, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL }, .abilities = {ABILITY_ROCK_HEAD, ABILITY_STURDY}, @@ -6297,7 +6297,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FAIRY }, .abilities = {ABILITY_INTIMIDATE, ABILITY_RUN_AWAY}, @@ -6327,7 +6327,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FAIRY }, .abilities = {ABILITY_INTIMIDATE, ABILITY_INTIMIDATE}, @@ -6357,7 +6357,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2 }, .abilities = {ABILITY_POISON_POINT, ABILITY_SWIFT_SWIM}, @@ -6387,7 +6387,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SWARM, ABILITY_NONE}, @@ -6417,7 +6417,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_ORAN_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_STURDY, ABILITY_NONE}, @@ -6447,7 +6447,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SWARM, ABILITY_GUTS}, @@ -6507,7 +6507,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_PICKUP, ABILITY_NONE}, @@ -6537,7 +6537,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_GUTS, ABILITY_NONE}, @@ -6567,7 +6567,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS }, .abilities = {ABILITY_MAGMA_ARMOR, ABILITY_FLAME_BODY}, @@ -6597,7 +6597,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS }, .abilities = {ABILITY_MAGMA_ARMOR, ABILITY_FLAME_BODY}, @@ -6627,7 +6627,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_OBLIVIOUS, ABILITY_NONE}, @@ -6657,7 +6657,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_OBLIVIOUS, ABILITY_NONE}, @@ -6687,7 +6687,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_RED_SHARD, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_3 }, .abilities = {ABILITY_HUSTLE, ABILITY_NATURAL_CURE}, @@ -6717,7 +6717,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_2 }, .abilities = {ABILITY_HUSTLE, ABILITY_NONE}, @@ -6747,7 +6747,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_2 }, .abilities = {ABILITY_SUCTION_CUPS, ABILITY_NONE}, @@ -6777,7 +6777,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FIELD }, .abilities = {ABILITY_VITAL_SPIRIT, ABILITY_HUSTLE}, @@ -6807,7 +6807,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_WATER_ABSORB}, @@ -6837,7 +6837,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING }, .abilities = {ABILITY_KEEN_EYE, ABILITY_STURDY}, @@ -6927,7 +6927,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_DRAGON_SCALE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_DRAGON }, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE}, @@ -6957,7 +6957,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_PICKUP, ABILITY_NONE}, @@ -6987,7 +6987,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_STURDY, ABILITY_NONE}, @@ -7017,7 +7017,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL }, .abilities = {ABILITY_TRACE, ABILITY_NONE}, @@ -7047,7 +7047,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE}, @@ -7077,7 +7077,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_OWN_TEMPO, ABILITY_NONE}, @@ -7107,7 +7107,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_MALE, .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, .abilities = {ABILITY_GUTS, ABILITY_NONE}, @@ -7137,7 +7137,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_MALE, .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE}, @@ -7167,7 +7167,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_ASPEAR_BERRY, .genderRatio = MON_FEMALE, .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, .abilities = {ABILITY_OBLIVIOUS, ABILITY_NONE}, @@ -7197,7 +7197,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, .abilities = {ABILITY_STATIC, ABILITY_NONE}, @@ -7227,7 +7227,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_RAWST_BERRY, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, .abilities = {ABILITY_FLAME_BODY, ABILITY_NONE}, @@ -7257,7 +7257,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_MOOMOO_MILK, .genderRatio = MON_FEMALE, .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_THICK_FAT, ABILITY_NONE}, @@ -7637,7 +7637,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_DRAGON }, .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, @@ -7667,7 +7667,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_DRAGON }, .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, @@ -7697,7 +7697,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_DRAGON }, .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, @@ -7727,7 +7727,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_BLAZE, ABILITY_NONE}, @@ -7757,7 +7757,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_BLAZE, ABILITY_NONE}, @@ -7787,7 +7787,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_BLAZE, ABILITY_NONE}, @@ -7817,7 +7817,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_TORRENT, ABILITY_NONE}, @@ -7847,7 +7847,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_TORRENT, ABILITY_NONE}, @@ -7877,7 +7877,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_TORRENT, ABILITY_NONE}, @@ -7907,7 +7907,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_PECHA_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_RUN_AWAY, ABILITY_NONE}, @@ -7937,7 +7937,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_PECHA_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE}, @@ -7967,7 +7967,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_ORAN_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_PICKUP, ABILITY_NONE}, @@ -7997,7 +7997,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_SITRUS_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_PICKUP, ABILITY_NONE}, @@ -8027,7 +8027,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SHIELD_DUST, ABILITY_NONE}, @@ -8057,7 +8057,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SHED_SKIN, ABILITY_NONE}, @@ -8087,7 +8087,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_SILVER_POWDER, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SWARM, ABILITY_NONE}, @@ -8117,7 +8117,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SHED_SKIN, ABILITY_NONE}, @@ -8147,7 +8147,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_SILVER_POWDER, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SHIELD_DUST, ABILITY_NONE}, @@ -8177,7 +8177,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_GRASS }, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_RAIN_DISH}, @@ -8207,7 +8207,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_GRASS }, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_RAIN_DISH}, @@ -8237,7 +8237,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_GRASS }, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_RAIN_DISH}, @@ -8267,7 +8267,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_GRASS }, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_EARLY_BIRD}, @@ -8297,7 +8297,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_GRASS }, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_EARLY_BIRD}, @@ -8327,7 +8327,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_GRASS }, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_EARLY_BIRD}, @@ -8357,7 +8357,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_ERRATIC, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_COMPOUND_EYES, ABILITY_NONE}, @@ -8387,7 +8387,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_ERRATIC, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SPEED_BOOST, ABILITY_NONE}, @@ -8417,7 +8417,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_ERRATIC, .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL }, .abilities = {ABILITY_WONDER_GUARD, ABILITY_NONE}, @@ -8447,7 +8447,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING }, .abilities = {ABILITY_GUTS, ABILITY_NONE}, @@ -8477,7 +8477,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING }, .abilities = {ABILITY_GUTS, ABILITY_NONE}, @@ -8507,7 +8507,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FLUCTUATING, .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_GRASS }, .abilities = {ABILITY_EFFECT_SPORE, ABILITY_NONE}, @@ -8537,7 +8537,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FLUCTUATING, .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_GRASS }, .abilities = {ABILITY_EFFECT_SPORE, ABILITY_NONE}, @@ -8567,7 +8567,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_CHESTO_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_OWN_TEMPO, ABILITY_NONE}, @@ -8597,7 +8597,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FLYING }, .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE}, @@ -8627,7 +8627,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FLYING }, .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE}, @@ -8657,7 +8657,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_BUG }, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE}, @@ -8687,7 +8687,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_SILVER_POWDER, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_BUG }, .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE}, @@ -8717,7 +8717,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 40, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FLUCTUATING, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_WATER_2 }, .abilities = {ABILITY_WATER_VEIL, ABILITY_OBLIVIOUS}, @@ -8747,7 +8747,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 40, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FLUCTUATING, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_WATER_2 }, .abilities = {ABILITY_WATER_VEIL, ABILITY_OBLIVIOUS}, @@ -8777,7 +8777,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_LEPPA_BERRY, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FAIRY }, .abilities = {ABILITY_CUTE_CHARM, ABILITY_NONE}, @@ -8807,7 +8807,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_LEPPA_BERRY, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FAIRY }, .abilities = {ABILITY_CUTE_CHARM, ABILITY_NONE}, @@ -8837,7 +8837,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_PERSIM_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_COLOR_CHANGE, ABILITY_NONE}, @@ -8867,7 +8867,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL }, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, @@ -8897,7 +8897,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL }, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, @@ -8927,7 +8927,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL }, .abilities = {ABILITY_STURDY, ABILITY_MAGNET_PULL}, @@ -8957,7 +8957,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_WHITE_SMOKE, ABILITY_NONE}, @@ -9017,7 +9017,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2 }, .abilities = {ABILITY_OBLIVIOUS, ABILITY_NONE}, @@ -9047,7 +9047,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2 }, .abilities = {ABILITY_OBLIVIOUS, ABILITY_NONE}, @@ -9077,7 +9077,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2 }, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE}, @@ -9107,7 +9107,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FLUCTUATING, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_3 }, .abilities = {ABILITY_HYPER_CUTTER, ABILITY_SHELL_ARMOR}, @@ -9137,7 +9137,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FLUCTUATING, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_3 }, .abilities = {ABILITY_HYPER_CUTTER, ABILITY_SHELL_ARMOR}, @@ -9167,7 +9167,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_ERRATIC, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_DRAGON }, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE}, @@ -9197,7 +9197,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_ERRATIC, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_DRAGON }, .abilities = {ABILITY_MARVEL_SCALE, ABILITY_NONE}, @@ -9287,7 +9287,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_SOFT_SAND, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_HYPER_CUTTER, ABILITY_ARENA_TRAP}, @@ -9317,7 +9317,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_LEVITATE, ABILITY_LEVITATE}, @@ -9347,7 +9347,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_LEVITATE, ABILITY_LEVITATE}, @@ -9377,7 +9377,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FLUCTUATING, .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_THICK_FAT, ABILITY_GUTS}, @@ -9407,7 +9407,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_KINGS_ROCK, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FLUCTUATING, .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_THICK_FAT, ABILITY_GUTS}, @@ -9437,7 +9437,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_STATIC, ABILITY_LIGHTNING_ROD}, @@ -9467,7 +9467,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_STATIC, ABILITY_LIGHTNING_ROD}, @@ -9497,7 +9497,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_RAWST_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_OBLIVIOUS, ABILITY_NONE}, @@ -9527,7 +9527,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_RAWST_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_MAGMA_ARMOR, ABILITY_NONE}, @@ -9557,7 +9557,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FIELD }, .abilities = {ABILITY_THICK_FAT, ABILITY_NONE}, @@ -9587,7 +9587,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FIELD }, .abilities = {ABILITY_THICK_FAT, ABILITY_NONE}, @@ -9617,7 +9617,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FIELD }, .abilities = {ABILITY_THICK_FAT, ABILITY_NONE}, @@ -9707,7 +9707,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_MINERAL }, .abilities = {ABILITY_INNER_FOCUS, ABILITY_NONE}, @@ -9737,7 +9737,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NEVER_MELT_ICE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_MINERAL }, .abilities = {ABILITY_INNER_FOCUS, ABILITY_NONE}, @@ -9767,7 +9767,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_MOON_STONE, .genderRatio = MON_GENDERLESS, .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL }, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, @@ -9797,7 +9797,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_SUN_STONE, .genderRatio = MON_GENDERLESS, .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL }, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, @@ -9827,7 +9827,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 10, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, .abilities = {ABILITY_THICK_FAT, ABILITY_HUGE_POWER}, @@ -9857,7 +9857,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_THICK_FAT, ABILITY_OWN_TEMPO}, @@ -9887,7 +9887,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_THICK_FAT, ABILITY_OWN_TEMPO}, @@ -9917,7 +9917,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_FAIRY }, .abilities = {ABILITY_PLUS, ABILITY_NONE}, @@ -9947,7 +9947,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_FAIRY }, .abilities = {ABILITY_MINUS, ABILITY_NONE}, @@ -9977,7 +9977,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FAIRY }, .abilities = {ABILITY_HYPER_CUTTER, ABILITY_INTIMIDATE}, @@ -10007,7 +10007,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_PURE_POWER, ABILITY_NONE}, @@ -10037,7 +10037,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_PURE_POWER, ABILITY_NONE}, @@ -10067,7 +10067,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_ERRATIC, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_DRAGON }, .abilities = {ABILITY_NATURAL_CURE, ABILITY_NONE}, @@ -10097,7 +10097,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_ERRATIC, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_DRAGON }, .abilities = {ABILITY_NATURAL_CURE, ABILITY_NONE}, @@ -10127,7 +10127,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, .abilities = {ABILITY_SHADOW_TAG, ABILITY_NONE}, @@ -10217,7 +10217,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_POISON_BARB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_GRASS }, .abilities = {ABILITY_NATURAL_CURE, ABILITY_POISON_POINT}, @@ -10247,7 +10247,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_TRUANT, ABILITY_NONE}, @@ -10277,7 +10277,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_VITAL_SPIRIT, ABILITY_NONE}, @@ -10307,7 +10307,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_TRUANT, ABILITY_NONE}, @@ -10337,7 +10337,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_BIG_PEARL, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FLUCTUATING, .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS }, .abilities = {ABILITY_LIQUID_OOZE, ABILITY_STICKY_HOLD}, @@ -10367,7 +10367,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_BIG_PEARL, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FLUCTUATING, .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS }, .abilities = {ABILITY_LIQUID_OOZE, ABILITY_STICKY_HOLD}, @@ -10397,7 +10397,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_GRASS }, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, @@ -10427,7 +10427,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_CHESTO_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_FIELD }, .abilities = {ABILITY_SOUNDPROOF, ABILITY_NONE}, @@ -10457,7 +10457,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_CHESTO_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_FIELD }, .abilities = {ABILITY_SOUNDPROOF, ABILITY_NONE}, @@ -10487,7 +10487,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_CHESTO_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_FIELD }, .abilities = {ABILITY_SOUNDPROOF, ABILITY_NONE}, @@ -10517,7 +10517,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_BLUE_SHARD, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_ERRATIC, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_SHELL_ARMOR, ABILITY_NONE}, @@ -10547,7 +10547,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_ERRATIC, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE}, @@ -10577,7 +10577,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_ERRATIC, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE}, @@ -10697,7 +10697,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FLUCTUATING, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_DRAGON }, .abilities = {ABILITY_SHED_SKIN, ABILITY_NONE}, @@ -10727,7 +10727,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_ERRATIC, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_IMMUNITY, ABILITY_NONE}, @@ -10757,7 +10757,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_GREEN_SHARD, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 40, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_2 }, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_ROCK_HEAD}, @@ -10877,7 +10877,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_MYSTIC_WATER, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_AMORPHOUS }, .abilities = {ABILITY_FORECAST, ABILITY_NONE}, @@ -10907,7 +10907,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_MALE, .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_ERRATIC, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_ILLUMINATE, ABILITY_SWARM}, @@ -10937,7 +10937,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_FEMALE, .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FLUCTUATING, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_OBLIVIOUS, ABILITY_NONE}, @@ -10967,7 +10967,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 30, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_ERRATIC, .eggGroups = { EGG_GROUP_WATER_3, EGG_GROUP_WATER_3 }, .abilities = {ABILITY_SUCTION_CUPS, ABILITY_NONE}, @@ -10997,7 +10997,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 30, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_ERRATIC, .eggGroups = { EGG_GROUP_WATER_3, EGG_GROUP_WATER_3 }, .abilities = {ABILITY_SUCTION_CUPS, ABILITY_NONE}, @@ -11027,7 +11027,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 30, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_ERRATIC, .eggGroups = { EGG_GROUP_WATER_3, EGG_GROUP_WATER_3 }, .abilities = {ABILITY_BATTLE_ARMOR, ABILITY_NONE}, @@ -11057,7 +11057,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 30, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_ERRATIC, .eggGroups = { EGG_GROUP_WATER_3, EGG_GROUP_WATER_3 }, .abilities = {ABILITY_BATTLE_ARMOR, ABILITY_NONE}, @@ -11657,7 +11657,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS }, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, From 0dfb60f2e462f2980cab20697a46db8fa3102c47 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Tue, 14 Mar 2023 11:07:26 -0300 Subject: [PATCH 172/428] Removed uneeded parameters --- test/ability_hunger_switch.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/ability_hunger_switch.c b/test/ability_hunger_switch.c index 8ae31392993b..9250ae85a510 100644 --- a/test/ability_hunger_switch.c +++ b/test/ability_hunger_switch.c @@ -8,8 +8,8 @@ SINGLE_BATTLE_TEST("Hunger Switch switches Morpeko's forms at the end of the tur PARAMETRIZE { species = SPECIES_MORPEKO_HANGRY; } GIVEN { ASSUME(P_GEN_8_POKEMON == TRUE); - PLAYER(species) { Moves(MOVE_CELEBRATE); Speed(2); }; - OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE); Speed(1); }; + PLAYER(species) { Speed(2); }; + OPPONENT(SPECIES_WOBBUFFET) { Speed(1); }; } WHEN { TURN { MOVE(player, MOVE_CELEBRATE); } } SCENE { From aefd3189456da25904b0e39a6ca2a5f63c1a3505 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Tue, 14 Mar 2023 11:43:52 -0300 Subject: [PATCH 173/428] Applied review suggestions and expanded usage of activateAfterFaint in Cmd_setmoveeffect --- data/battle_scripts_1.s | 25 ++----------------------- include/battle_scripts.h | 2 +- src/battle_script_commands.c | 13 ++++++------- src/data/battle_moves.h | 4 ++-- 4 files changed, 11 insertions(+), 33 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 425834b7e3c6..4c61e5e69bba 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -433,31 +433,10 @@ BattleScript_EffectDireClaw:: goto BattleScript_EffectHit BattleScript_EffectHitSetEntryHazard:: - attackcanceler - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - attackstring - ppreduce - critcalc - damagecalc - adjustdamage - attackanimation - waitanimation - effectivenesssound - hitanimation BS_TARGET - waitstate - healthbarupdate BS_TARGET - datahpupdate BS_TARGET - critmessage - waitmessage B_WAIT_TIME_LONG - resultmessage - waitmessage B_WAIT_TIME_LONG - tryfaintmon BS_TARGET argumenttomoveeffect - seteffectprimary - moveendall - end + goto BattleScript_EffectHit -BattleScript_SpikesActivate:: +BattleScript_SpikesActivates:: trysetspikes BattleScript_MoveEnd printfromtable gDmgHazardsStringIds waitmessage B_WAIT_TIME_LONG diff --git a/include/battle_scripts.h b/include/battle_scripts.h index c4b15d9f1b8c..c6cbddcd350e 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -457,7 +457,7 @@ extern const u8 BattleScript_LunarDanceActivates[]; extern const u8 BattleScript_ShellTrapSetUp[]; extern const u8 BattleScript_CouldntFullyProtect[]; extern const u8 BattleScript_StealthRockActivates[]; -extern const u8 BattleScript_SpikesActivate[]; +extern const u8 BattleScript_SpikesActivates[]; // zmoves extern const u8 BattleScript_ZMoveActivateDamaging[]; diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 0799cf2f34dc..15a72c7e8b2a 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -2896,6 +2896,9 @@ void SetMoveEffect(bool32 primary, u32 certain) return; case MOVE_EFFECT_STEALTH_ROCK: case MOVE_EFFECT_SPIKES: + case MOVE_EFFECT_PAYDAY: + case MOVE_EFFECT_STEAL_ITEM: + case MOVE_EFFECT_BUG_BITE: activateAfterFaint = TRUE; break; } @@ -2938,11 +2941,7 @@ void SetMoveEffect(bool32 primary, u32 certain) if (TestSheerForceFlag(gBattlerAttacker, gCurrentMove) && affectsUser != MOVE_EFFECT_AFFECTS_USER) INCREMENT_RESET_RETURN - if (gBattleMons[gEffectBattler].hp == 0 - && !activateAfterFaint - && gBattleScripting.moveEffect != MOVE_EFFECT_PAYDAY - && gBattleScripting.moveEffect != MOVE_EFFECT_STEAL_ITEM - && gBattleScripting.moveEffect != MOVE_EFFECT_BUG_BITE) + if (gBattleMons[gEffectBattler].hp == 0 && !activateAfterFaint) INCREMENT_RESET_RETURN if (DoesSubstituteBlockMove(gBattlerAttacker, gEffectBattler, gCurrentMove) && affectsUser != MOVE_EFFECT_AFFECTS_USER) @@ -3761,7 +3760,7 @@ void SetMoveEffect(bool32 primary, u32 certain) if (!gBattleMons[gEffectBattler].status1) { static const u8 sDireClawEffects[] = { MOVE_EFFECT_POISON, MOVE_EFFECT_PARALYSIS, MOVE_EFFECT_SLEEP }; - gBattleScripting.moveEffect = sDireClawEffects[Random() % 3]; + gBattleScripting.moveEffect = sDireClawEffects[Random() % ARRAY_COUNT(sDireClawEffects)]; SetMoveEffect(TRUE, 0); } break; @@ -3778,7 +3777,7 @@ void SetMoveEffect(bool32 primary, u32 certain) { gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SPIKESSCATTERED; BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_SpikesActivate; + gBattlescriptCurrInstr = BattleScript_SpikesActivates; } break; } diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index 530dacd13293..22eb7ca1a4bc 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -13328,7 +13328,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .type = TYPE_ROCK, .accuracy = 90, .pp = 15, - .secondaryEffectChance = 0, + .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_SLICING_MOVE, @@ -13605,7 +13605,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .type = TYPE_DARK, .accuracy = 90, .pp = 15, - .secondaryEffectChance = 0, + .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_SLICING_MOVE, From 66c63ee4589a481777a9be4631d4ab3ed7100b25 Mon Sep 17 00:00:00 2001 From: Alex Date: Tue, 14 Mar 2023 18:23:50 +0100 Subject: [PATCH 174/428] hisuian sprite fixes --- graphics/pokemon/avalugg/hisuian/back.png | Bin 654 -> 677 bytes graphics/pokemon/avalugg/hisuian/front.png | Bin 947 -> 947 bytes graphics/pokemon/avalugg/hisuian/shiny.pal | 6 ++--- graphics/pokemon/qwilfish/hisuian/back.png | Bin 606 -> 693 bytes graphics/pokemon/qwilfish/hisuian/front.png | Bin 571 -> 664 bytes graphics/pokemon/qwilfish/hisuian/normal.pal | 20 +++++++------- graphics/pokemon/qwilfish/hisuian/shiny.pal | 26 +++++++++---------- graphics/pokemon/samurott/hisuian/back.png | Bin 873 -> 867 bytes graphics/pokemon/samurott/hisuian/front.png | Bin 1140 -> 1140 bytes graphics/pokemon/samurott/hisuian/shiny.pal | 14 +++++----- 10 files changed, 33 insertions(+), 33 deletions(-) mode change 100644 => 100755 graphics/pokemon/qwilfish/hisuian/back.png mode change 100644 => 100755 graphics/pokemon/qwilfish/hisuian/front.png mode change 100644 => 100755 graphics/pokemon/qwilfish/hisuian/normal.pal mode change 100644 => 100755 graphics/pokemon/qwilfish/hisuian/shiny.pal diff --git a/graphics/pokemon/avalugg/hisuian/back.png b/graphics/pokemon/avalugg/hisuian/back.png index 321daa41fd6fa9d0521f1b581800791dac5d0b47..6bf621584946214562c1c2c72dc6c7fd1993d532 100755 GIT binary patch delta 539 zcmV+$0_6RU1*HX$EC>z}6c|9v3O$iDZGV+18r4rV`GZf8L?H0ENB{r;@7h}<00001 zVoOIv|D^}=#Q*>S$w@>(RCt{2lD&@FKoo^{MP6VSvIWIT3>N)xM=sD7IOA2cP8F@D zAYBZ)MN+27izJHDtwa}7ao^W6aix~WeFojE8DRblpz9g|X^aNBXauB>fq_xg;OwD)?xP3S zygH(DcL#p!0$)=>*ERqxju-%_S6Kr^AaxCdw;j#lH;0Y5{ zpaD38PCv@v>Hr8u7zV6QR}ipgz0nVxLJ9ob2BbX>ZBM8D%PDHLkV1n9U@qPdR delta 515 zcmV+e0{s1@1&#%fEC>P+0yfK*XR47jZGUiZaJam<`GZfSWDxMUNB{r;$`A(100001 zVoOIv|D^}=#Q*>SvPnciRCt{2ld*2wFcd`-I6pws$>sp21@H7DIN5+zDkw5|C;|>1 zIz%?!mZ?L3q(zYLQAY_#tBm9jw6njVPcp4Ij+H5+?|P5!dzT_lPL4Y21C-3(_kVl* zeLzZ>`;89!+DM<*Dh~S$`mP;ddIiwWTLEdU0qI%+sWG-N-2!ixJk=P%6%Q-s`Qx77 zxxiZ*&~F1e95Dt^UtJ48J~aSn0`>rgm>OVg+5p8XfQ>Nif$Tju9bUJTh{!CkfAK+} z!!+W+eu2yN4)E)xKkY{Y&Tr)9x_^5J=#B_jadjitfBF0^aK;1;FaVrEZ#Z`_*#i=h zBrzM(5yb4%U|Ql5YT#)b;0GMKkx(ThV-b1U7bm;_%6kSN)mZs*EQEOh9z#R^n-d_r z$`_>=&V7csBs-hTLc=9v6k&|=uJ|+bKG#)1rk6EvL3t>|X9A|=`Em=;pl}K}t^8C( z3!|#L?sB^8E~`oeAOu`3z6YQnqVA~iZWaPiMArTQQ@xfNsE;zkI|_g>!P9_y@ diff --git a/graphics/pokemon/avalugg/hisuian/front.png b/graphics/pokemon/avalugg/hisuian/front.png index bab3f63c8a2793caae7861fd44cbb7a54bad6bb4..58201f335fc75d591ef262f1bab114b36c8b0d95 100755 GIT binary patch delta 19 acmdnYzL|Z34hNqgm&T?LR=X`vKoCV1M diff --git a/graphics/pokemon/avalugg/hisuian/shiny.pal b/graphics/pokemon/avalugg/hisuian/shiny.pal index 9fd2d0e1809f..b3492268318f 100755 --- a/graphics/pokemon/avalugg/hisuian/shiny.pal +++ b/graphics/pokemon/avalugg/hisuian/shiny.pal @@ -11,9 +11,9 @@ JASC-PAL 80 60 48 72 44 32 144 120 96 -112 112 112 -184 188 184 +149 41 26 +213 79 53 249 131 79 -164 100 16 +144 68 32 240 184 72 0 0 0 diff --git a/graphics/pokemon/qwilfish/hisuian/back.png b/graphics/pokemon/qwilfish/hisuian/back.png old mode 100644 new mode 100755 index 48a01e06f23fa0eb379da21b5aa51d1e2357a45e..7504a692af0edd5661ae94fc0aba8c4b43646e3e GIT binary patch delta 669 zcmV;O0%HB%1hoZ_B!35VNliru=K~H80~}PE#K-^u02g#cSaefwW^{L9a%BKVOhiyl zM<8}(av(DOV1ZP1_K>z@;j|==^1poj5 zFi=cXMVQc_SVX{pT<{PO5P*P?C@e6jsJK`}z?g_oxU`VS$bZnNtf=_>_*hUV00000 z000mc^2`7L00Cl4M@0Xn2lB-L00G%aL_t(|ob8jnZo)7Wg;Sx74DBNzu}5-1X(gsy zBE*DL3>9lB10x+Wbt08+hfFLmbb>PYX^`ju1MgDX3BfT=r0$#n0{8Q|e~x9{^dH%j zmd8hol@g;Z0DtS17_cz_{FDG2K#YQ7i_y4)h)@DR2LYmXAZcEQyaBLGo_1U4>!t1pJ<5E8(6(*~d0HK=+;_eLr6(;U*o`!oM0Pp?%dsGmxE7p{&Y$*nS4TA%~G6 z>M(6OeD_~4Rhmkzp;8Nd4>NuCf$CijF9w3(_2dDId?<1JgOXZB!4haOjJdf(4Z(VfOv4w5D*YxSh&#O@Q8?*P*7l~xX`Geh`6|@ zxWK?*U{Lt@_{hMx0000*d?Yyl00HSqL_t(YiS5%rZ__{&0B~0~uw+Q8B4(<5fS?B# zMPe!yof$6ajOnwzb)YdF8G6t;Qj&+fF%j`0DlsL>hw9zMc7OfOf0&VYi~qcz-+Onq zgW!KWMVelB=arguiDydV)vN>DT;g|q)luRG6C(Ysy~8CE(K>1e)7SvQ)*eD9v_#bH zz>E;nx}$;tX397$ZXER+08&zd<2ul~0*+4myoSISFCa+G0FW8c#-AM~BgiWgtXT#?+-XpPK9ln3#fc$ta)indQ z15p^c{8S=JobeuLUxx-efu2SfnxV&o!JsT*gehWP$eq%0j9{Tkf5@c*O<2aDR@T!Q@p_*>m8K$aiD z1G}FE*jSQnJn}9N(H8gNyoA2{v(+qm>); diff --git a/graphics/pokemon/qwilfish/hisuian/front.png b/graphics/pokemon/qwilfish/hisuian/front.png old mode 100644 new mode 100755 index a32988cf7d8f3966b9e70ec7d74474650d0a5321..0de50b78609064ee4c8645dfb3a5af315870741e GIT binary patch delta 639 zcmV-_0)YLy1egVoB!35VNliru=K~H7I~Uaz%Zva302g#cSaefwW^{L9a%BKVOhiyl zM<8}(av(DOV1ZP1_K>z@;j|==^1poj5 zFi=cXMVQc_cpzZ#M9>fr5I8tMC@e5gRA9I?n3#xAxU`UPbbo-Ttf=_>_*hUV00000 z008U-vU30c00Cl4M@0Xn2lB-L00F#7L_t(|obA#vOT$1E2k;9qW56id*@(J01doai zg3wFUO)wWhUDWhdyJ^u5x~Xs(T%?qo;Ap{&egwtMK@h|aei!f3I$XWdFVO#x<^8z# z?&S~~W|%%P27iGuPbyDWa^z>kou*xdDBV=Rf)G|%IRk3A5?BDf3g)O4fk<3%J!2e2 zNeaplW*zc6lq)r(P_vFXZ>}l;%6T0EsD*VeJR(VYsPtHjs#z;1hyI!uHJ;XcKoPPm zlQTf*m#m<1PgG#hY6k!b$(FT|lIvzk0T~s5ia}#SHh;r}^TxHhu$`8uXC2_LGtN_@ zf~Zw(RUh*n#Ak#tqI5u(yk!^on1+Oulmm>33%RFYTY{kCm>8=K#%AWD0D|)Kxc~sC z4(f?{HvbmHu=_qMLB(}PdqwfGD8OD0!nGRitt0#3P5h`=0b+8qrFk-TbJm$GzrUPA z%-HS!I(S0ueRm4nIe?Tgrh9blJE!mkz_~bpU1@;*P(NvNF2Tyrrw$|-%ev_Bp&J3& zyc4E9U(S%SB(G~Hlz?IU%~+D^`pXWfSe}Vj60V;B+1=$X^#gw~2LZG^2$+2?G0ZS| ZegQ3zsg*c=Uf=)#002ovPDHLkV1goZ5=sC7 delta 546 zcmV+-0^R+X1-k^0B!4haOjJdf(4crAVDLcD5D*Z!FqnXVfIvVBL__(l;0002iCy*Wh00G8HL_t(YiS3iIOXFY|#y<&M7KcVevNl&ZMX2&E z`~mh^LU?{W-}k;xBE(EHMQbjV1bj^b(n&yOB>{lF>44gjwmHTBQfs@-B|G*QHH+9@ z(B&JUI)`CbO9{Koz2*vp3K?AnXM(4yx zkMCRW?1Uq}V}FAI@QPSNUWZ!RF41uqP$~_m05pmykqx)>`yC+GTmUFT8QU^920*?8 zvdBQKwT39=p>TaEJNCp8O}7PnN%sX%k@}^HDTK2A2ia$NtD5HgBIepWPM~^=5uNC7nhA_r1c8@eplEU5bd9KO33Wi2XWI5ZrtO z2HpQJx*+OB*g^!sV8s5Ai25;KrDFO0KKqs*L<3BaKcuc{^c%z&GZTM3_`D}2Pv@(%>V!Z07*qoM6N<$f-30%W&i*H diff --git a/graphics/pokemon/qwilfish/hisuian/normal.pal b/graphics/pokemon/qwilfish/hisuian/normal.pal old mode 100644 new mode 100755 index b1a2bcd32b35..91f73ab4d420 --- a/graphics/pokemon/qwilfish/hisuian/normal.pal +++ b/graphics/pokemon/qwilfish/hisuian/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 120 32 96 -240 64 208 +240 68 208 16 16 16 -184 48 152 -128 128 128 -64 64 72 -40 40 48 -88 88 96 +56 56 64 +40 44 48 +80 84 96 +184 52 152 152 136 80 -176 160 120 -184 192 192 +184 180 144 +112 116 128 +168 172 168 +248 252 248 88 80 40 -248 248 248 -184 176 144 +0 0 0 0 0 0 diff --git a/graphics/pokemon/qwilfish/hisuian/shiny.pal b/graphics/pokemon/qwilfish/hisuian/shiny.pal old mode 100644 new mode 100755 index 79d490248c92..06729e52ae5f --- a/graphics/pokemon/qwilfish/hisuian/shiny.pal +++ b/graphics/pokemon/qwilfish/hisuian/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -40 48 128 -120 112 208 +88 68 192 +128 92 240 16 16 16 -96 88 184 -208 224 240 -136 136 152 -80 80 96 -168 184 208 -168 160 136 -184 184 168 -184 192 192 -96 96 80 -248 248 248 -200 192 184 +128 128 144 +40 44 48 +168 168 184 +88 68 192 +152 136 80 +184 180 144 +200 200 208 +168 172 168 +248 252 248 +88 80 40 +0 0 0 0 0 0 diff --git a/graphics/pokemon/samurott/hisuian/back.png b/graphics/pokemon/samurott/hisuian/back.png index 337925fd25c3b7dc4c649f2bac01070c232faf9c..36ed737d3e1c07b6e7b35e13ee8706df90da7855 100755 GIT binary patch delta 754 zcmVz|96DULtLBk3Re#8=m`F%S`26^&bYKt=5a8V4Sa5J4SeVdI zU>FoIz{JQLIAExpr~m)}*JKDA00001VoOIv|D^}=#Q*>The%~*ReEe*HJ_{JP0cYLNZ4l?A9wJ~* z0NWM-VgqoN)?+}JJ7jHu0$@^JV!BYWM*(NG2Hk%EkTC$~=i%CxD@Xb*2LvV_q41lq zOBwhXdkBC^$Xi%@6-eFI3qbEB5PzY+Y3m3Ok7_8Xwb1PZa9IGL;Z~apwdO6|f%a6& zRZe6=x5p5edxH{lb($sQBN6~Ms9u>9G~%zz2qNmzHrb}W_<+DV-*?VlylxuDzSdw kKz&UOU_4wES^q1qKRj^=DL=97mjD0&07*qoM6N<$f`MvN7XSbN delta 760 zcmVP#IUdnwxR;SMRe#Q{n@C7V`26^(bzu+?5aQnASa5J5TAX=k zc^DKhz{JQQI%BGzssI20t9@H600001VoOIv0Eh)0NB{r=jY&j7RCt{2k}+%BKorLX zrWyn-m_jE_2e*a>g-qUTGI=n9xX{7Kc5|VjxuH-Wc+kfvWGJ{$BGBNW&@6#Kkbls0 zbD)Ek6wBbkeTKews$@wfl#;FVA;d}l-@X64ch4~X$$0W7U@~|#KpzDRnt-*a=_ZI1 zQY|9z{t^JO23RxWAt1~X>;M!1UF9iM_be3NgMc+(7)#;r0Av8b@o~5?#oQ8pX6yh% zmr!_y-lhO?V`BdrgR0R6=r-tKE=T-AZ#Js~69yB15eA{6rTs)r@; zgn7)>J#|4et3cqp+Clp--Mv+_O@SgMptw8QEE;F@SA^^pKt@I(jzsI_7Jq=c@)~m> zQv!(2)`!=Cm8UMF|MlF%Sh{u4jx1bzL|R-igK%h$4jvR|I2JCZODolBtZg6TxxL$`Z+FYIkMA zrbY$O@h#Ws<}(0t+eY-z@qd+~PDa_j>~-QQU@+8wP6!57S-T0eju;+vmFwyffNtEa z00#*jGKL4xcRp>)xZkM&t==t`8HT?HW^6+fsvfOA0-H;Amfto2vKPs1iUWE30)+GQ zPLF&zmH_k*y=?+10m#xc)eZ3wi2J2Os{`L{UILj0WUl}m)X}2=&SgCZe%NuOcRTnY zBk Date: Tue, 14 Mar 2023 15:38:18 -0300 Subject: [PATCH 175/428] Changed definitions of string conversion IDE macros to allow their use in compound literals without IDE errors --- include/global.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/global.h b/include/global.h index e0ff9f0c2359..9d73afabb09c 100644 --- a/include/global.h +++ b/include/global.h @@ -27,8 +27,8 @@ /// IDE support #if defined(__APPLE__) || defined(__CYGWIN__) || defined(__INTELLISENSE__) // We define these when using certain IDEs to fool preproc -#define _(x) (x) -#define __(x) (x) +#define _(x) {x} +#define __(x) {x} #define INCBIN(...) {0} #define INCBIN_U8 INCBIN #define INCBIN_U16 INCBIN From 509ff4c7e0d31fb18f76dc7af3c9702095eb20fe Mon Sep 17 00:00:00 2001 From: Martin Griffin Date: Fri, 3 Feb 2023 11:21:08 +0000 Subject: [PATCH 176/428] Generic TEST that executes a function --- test/test.h | 23 +++++++++++++++++++++++ test/test_battle.h | 2 ++ test/test_runner.c | 41 ++++++++++++++++++++++++++++++++++++++--- 3 files changed, 63 insertions(+), 3 deletions(-) diff --git a/test/test.h b/test/test.h index 27475bb48e40..764443302f30 100644 --- a/test/test.h +++ b/test/test.h @@ -53,6 +53,16 @@ extern const u8 gTestRunnerI; extern const char gTestRunnerArgv[256]; extern const struct TestRunner gAssumptionsRunner; + +struct FunctionTestRunnerState +{ + u8 parameters; + u8 runParameter; +}; + +extern const struct TestRunner gFunctionTestRunner; +extern struct FunctionTestRunnerState *gFunctionTestRunnerState; + extern struct TestRunnerState gTestRunnerState; void CB2_TestRunner(void); @@ -62,6 +72,17 @@ void Test_ExitWithResult(enum TestResult, const char *fmt, ...); s32 MgbaPrintf_(const char *fmt, ...); +#define TEST(_name) \ + static void CAT(Test, __LINE__)(void); \ + __attribute__((section(".tests"))) static const struct Test CAT(sTest, __LINE__) = \ + { \ + .name = _name, \ + .filename = __FILE__, \ + .runner = &gFunctionTestRunner, \ + .data = (void *)CAT(Test, __LINE__), \ + }; \ + static void CAT(Test, __LINE__)(void) + #define ASSUMPTIONS \ static void Assumptions(void); \ __attribute__((section(".tests"))) static const struct Test sAssumptions = \ @@ -138,4 +159,6 @@ s32 MgbaPrintf_(const char *fmt, ...); #define KNOWN_FAILING \ Test_ExpectedResult(TEST_RESULT_FAIL) +#define PARAMETRIZE if (gFunctionTestRunnerState->parameters++ == gFunctionTestRunnerState->runParameter) + #endif diff --git a/test/test_battle.h b/test/test_battle.h index 16918251b1c8..a447102f32cb 100644 --- a/test/test_battle.h +++ b/test/test_battle.h @@ -639,6 +639,8 @@ extern struct BattleTestRunnerState *gBattleTestRunnerState; /* Parametrize */ +#undef PARAMETRIZE // Override test/test.h's implementation. + #define PARAMETRIZE if (gBattleTestRunnerState->parametersCount++ == i) /* Randomly */ diff --git a/test/test_runner.c b/test/test_runner.c index f2d4d5de3f58..e3d286c55a01 100644 --- a/test/test_runner.c +++ b/test/test_runner.c @@ -4,6 +4,7 @@ #include "gpu_regs.h" #include "main.h" #include "malloc.h" +#include "random.h" #include "test.h" #include "test_runner.h" @@ -12,6 +13,7 @@ void CB2_TestRunner(void); EWRAM_DATA struct TestRunnerState gTestRunnerState; +EWRAM_DATA struct FunctionTestRunnerState *gFunctionTestRunnerState; void TestRunner_Battle(const struct Test *); @@ -230,6 +232,38 @@ void Test_ExpectedResult(enum TestResult result) gTestRunnerState.expectedResult = result; } +static void FunctionTest_SetUp(void *data) +{ + (void)data; + gFunctionTestRunnerState = AllocZeroed(sizeof(*gFunctionTestRunnerState)); + SeedRng(0); +} + +static void FunctionTest_Run(void *data) +{ + void (*function)(void) = data; + do + { + if (gFunctionTestRunnerState->parameters) + MgbaPrintf_(":N%s %d/%d", gTestRunnerState.test->name, gFunctionTestRunnerState->runParameter + 1, gFunctionTestRunnerState->parameters); + gFunctionTestRunnerState->parameters = 0; + function(); + } while (++gFunctionTestRunnerState->runParameter < gFunctionTestRunnerState->parameters); +} + +static void FunctionTest_TearDown(void *data) +{ + (void)data; + FREE_AND_SET_NULL(gFunctionTestRunnerState); +} + +const struct TestRunner gFunctionTestRunner = +{ + .setUp = FunctionTest_SetUp, + .run = FunctionTest_Run, + .tearDown = FunctionTest_TearDown, +}; + static void Assumptions_Run(void *data) { void (*function)(void) = data; @@ -288,11 +322,12 @@ static void Intr_Timer2(void) void Test_ExitWithResult(enum TestResult result, const char *fmt, ...) { + bool32 handled = FALSE; gTestRunnerState.result = result; ReinitCallbacks(); - if (gTestRunnerState.test->runner->handleExitWithResult - && !gTestRunnerState.test->runner->handleExitWithResult(gTestRunnerState.test->data, result) - && gTestRunnerState.result != gTestRunnerState.expectedResult) + if (gTestRunnerState.test->runner->handleExitWithResult) + handled = gTestRunnerState.test->runner->handleExitWithResult(gTestRunnerState.test->data, result); + if (!handled && gTestRunnerState.result != gTestRunnerState.expectedResult) { va_list va; va_start(va, fmt); From 89deda04164c90197f309bc2b2a4bf54a5b34270 Mon Sep 17 00:00:00 2001 From: Martin Griffin Date: Mon, 20 Feb 2023 20:06:01 +0000 Subject: [PATCH 177/428] Allow tests to override specific RNG calls --- include/random.h | 63 +++++++ src/battle_script_commands.c | 53 +++--- src/battle_util.c | 24 +-- src/random.c | 24 +++ test/ability_compound_eyes.c | 4 +- test/ability_cute_charm.c | 3 - test/ability_sand_veil.c | 2 +- test/ability_stench.c | 5 +- test/hold_effect_red_card.c | 4 +- test/move.c | 26 ++- test/move_effect_accuracy_down.c | 2 +- test/move_effect_evasion_up.c | 2 +- test/move_effect_hit_switch_target.c | 5 +- test/move_effect_rampage.c | 6 +- test/move_effect_roar.c | 4 +- test/move_effect_sleep.c | 21 ++- test/random.c | 81 +++++++++ test/status1.c | 7 +- test/test_battle.h | 68 ++++++-- test/test_runner_battle.c | 245 ++++++++++++++++----------- 20 files changed, 473 insertions(+), 176 deletions(-) create mode 100644 test/random.c diff --git a/include/random.h b/include/random.h index 6bf61de6c6e6..60c718348c63 100644 --- a/include/random.h +++ b/include/random.h @@ -20,4 +20,67 @@ u16 Random2(void); void SeedRng(u16 seed); void SeedRng2(u16 seed); +/* Structured random number generator. + * Instead of the caller converting bits from Random() to a meaningful + * value, the caller provides metadata that is used to return the + * meaningful value directly. This allows code to interpret the random + * call, for example, battle tests know what the domain of a random call + * is, and can exhaustively test it. + * + * RandomTag identifies the purpose of the value. + * + * RandomUniform(tag, lo, hi) returns a number from lo to hi inclusive. + * + * RandomPercentage(tag, t) returns FALSE with probability (1-t)/100, + * and TRUE with probability t/100. + * + * RandomWeighted(tag, w0, w1, ... wN) returns a number from 0 to N + * inclusive. The return value is proportional to the weights, e.g. + * RandomWeighted(..., 1, 1) returns 50% 0s and 50% 1s. + * RandomWeighted(..., 2, 1) returns 2/3 0s and 1/3 1s. */ + +enum RandomTag +{ + RNG_NONE, + RNG_ACCURACY, + RNG_CONFUSION, + RNG_CRITICAL_HIT, + RNG_CUTE_CHARM, + RNG_DAMAGE_MODIFIER, + RNG_FLAME_BODY, + RNG_FORCE_RANDOM_SWITCH, + RNG_FROZEN, + RNG_HOLD_EFFECT_FLINCH, + RNG_INFATUATION, + RNG_PARALYSIS, + RNG_POISON_POINT, + RNG_RAMPAGE_TURNS, + RNG_SECONDARY_EFFECT, + RNG_SLEEP_TURNS, + RNG_SPEED_TIE, + RNG_STATIC, + RNG_STENCH, +}; + +#define RandomWeighted(tag, ...) \ + ({ \ + const u8 weights[] = { __VA_ARGS__ }; \ + u32 sum, i; \ + for (i = 0, sum = 0; i < ARRAY_COUNT(weights); i++) \ + sum += weights[i]; \ + RandomWeightedArray(tag, sum, ARRAY_COUNT(weights), weights); \ + }) + +#define RandomPercentage(tag, t) \ + ({ \ + const u8 weights[] = { 100 - t, t }; \ + RandomWeightedArray(tag, 100, ARRAY_COUNT(weights), weights); \ + }) + +u32 RandomUniform(enum RandomTag, u32 lo, u32 hi); +u32 RandomWeightedArray(enum RandomTag, u32 sum, u32 n, const u8 *weights); + +u32 RandomUniformDefault(enum RandomTag, u32 lo, u32 hi); +u32 RandomWeightedArrayDefault(enum RandomTag, u32 sum, u32 n, const u8 *weights); + #endif // GUARD_RANDOM_H diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 126ca06fd11e..e0ef56184201 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -1917,15 +1917,25 @@ static void Cmd_accuracycheck(void) } else { + u32 accuracy; + GET_MOVE_TYPE(move, type); if (JumpIfMoveAffectedByProtect(move)) return; if (AccuracyCalcHelper(move)) return; - // final calculation - if ((Random() % 100 + 1) > GetTotalAccuracy(gBattlerAttacker, gBattlerTarget, move, GetBattlerAbility(gBattlerAttacker), GetBattlerAbility(gBattlerTarget), - GetBattlerHoldEffect(gBattlerAttacker, TRUE), GetBattlerHoldEffect(gBattlerTarget, TRUE))) + accuracy = GetTotalAccuracy( + gBattlerAttacker, + gBattlerTarget, + move, + GetBattlerAbility(gBattlerAttacker), + GetBattlerAbility(gBattlerTarget), + GetBattlerHoldEffect(gBattlerAttacker, TRUE), + GetBattlerHoldEffect(gBattlerTarget, TRUE) + ); + + if (!RandomPercentage(RNG_ACCURACY, accuracy)) { gMoveResultFlags |= MOVE_RESULT_MISSED; if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_BLUNDER_POLICY) @@ -2104,10 +2114,8 @@ static void Cmd_critcalc(void) gIsCriticalHit = FALSE; else if (critChance == -2) gIsCriticalHit = TRUE; - else if (Random() % sCriticalHitChance[critChance] == 0) - gIsCriticalHit = TRUE; else - gIsCriticalHit = FALSE; + gIsCriticalHit = RandomWeighted(RNG_CRITICAL_HIT, sCriticalHitChance[critChance] - 1, 1); // Counter for EVO_CRITICAL_HITS. partySlot = gBattlerPartyIndexes[gBattlerAttacker]; @@ -3153,9 +3161,9 @@ void SetMoveEffect(bool32 primary, u32 certain) if (sStatusFlagsForMoveEffects[gBattleScripting.moveEffect] == STATUS1_SLEEP) #if B_SLEEP_TURNS >= GEN_5 - gBattleMons[gEffectBattler].status1 |= ((Random() % 3) + 2); + gBattleMons[gEffectBattler].status1 |= STATUS1_SLEEP_TURN(1 + RandomUniform(RNG_SLEEP_TURNS, 1, 3)); #else - gBattleMons[gEffectBattler].status1 |= ((Random() % 4) + 3); + gBattleMons[gEffectBattler].status1 |= STATUS1_SLEEP_TURN(1 + RandomUniform(RNG_SLEEP_TURNS, 2, 5)); #endif else gBattleMons[gEffectBattler].status1 |= sStatusFlagsForMoveEffects[gBattleScripting.moveEffect]; @@ -3558,7 +3566,7 @@ void SetMoveEffect(bool32 primary, u32 certain) { gBattleMons[gEffectBattler].status2 |= STATUS2_MULTIPLETURNS; gLockedMoves[gEffectBattler] = gCurrentMove; - gBattleMons[gEffectBattler].status2 |= STATUS2_LOCK_CONFUSE_TURN((Random() & 1) + 2); // thrash for 2-3 turns + gBattleMons[gEffectBattler].status2 |= STATUS2_LOCK_CONFUSE_TURN(RandomUniform(RNG_RAMPAGE_TURNS, 2, 3)); } break; case MOVE_EFFECT_SP_ATK_TWO_DOWN: // Overheat @@ -3779,20 +3787,23 @@ static void Cmd_seteffectwithchance(void) else percentChance = gBattleMoves[gCurrentMove].secondaryEffectChance; - if (gBattleScripting.moveEffect & MOVE_EFFECT_CERTAIN - && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)) - { - gBattleScripting.moveEffect &= ~MOVE_EFFECT_CERTAIN; - SetMoveEffect(FALSE, MOVE_EFFECT_CERTAIN); - } - else if (Random() % 100 < percentChance - && gBattleScripting.moveEffect - && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)) + if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + && gBattleScripting.moveEffect) { - if (percentChance >= 100) + if (gBattleScripting.moveEffect & MOVE_EFFECT_CERTAIN + || percentChance >= 100) + { + gBattleScripting.moveEffect &= ~MOVE_EFFECT_CERTAIN; SetMoveEffect(FALSE, MOVE_EFFECT_CERTAIN); - else + } + else if (RandomPercentage(RNG_SECONDARY_EFFECT, percentChance)) + { SetMoveEffect(FALSE, 0); + } + else + { + gBattlescriptCurrInstr = cmd->nextInstr; + } } else { @@ -12343,7 +12354,7 @@ static void Cmd_forcerandomswitch(void) *(gBattleStruct->battlerPartyIndexes + gBattlerTarget) = gBattlerPartyIndexes[gBattlerTarget]; gBattlescriptCurrInstr = BattleScript_RoarSuccessSwitch; gBattleStruct->forcedSwitch |= gBitTable[gBattlerTarget]; - *(gBattleStruct->monToSwitchIntoId + gBattlerTarget) = validMons[Random() % validMonsCount]; + *(gBattleStruct->monToSwitchIntoId + gBattlerTarget) = validMons[RandomUniform(RNG_FORCE_RANDOM_SWITCH, 0, validMonsCount - 1)]; if (!IsMultiBattle()) SwitchPartyOrder(gBattlerTarget); diff --git a/src/battle_util.c b/src/battle_util.c index 4b50bc704515..e5b037acf65d 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -3479,7 +3479,7 @@ u8 AtkCanceller_UnableToUseMove(void) case CANCELLER_FROZEN: // check being frozen if (gBattleMons[gBattlerAttacker].status1 & STATUS1_FREEZE && !(gBattleMoves[gCurrentMove].flags & FLAG_THAW_USER)) { - if (Random() % 5) + if (!RandomPercentage(RNG_FROZEN, 20)) { gBattlescriptCurrInstr = BattleScript_MoveUsedIsFrozen; gHitMarker |= HITMARKER_NO_ATTACKSTRING; @@ -3597,9 +3597,9 @@ u8 AtkCanceller_UnableToUseMove(void) { // confusion dmg #if B_CONFUSION_SELF_DMG_CHANCE >= GEN_7 - if (Random() % 3 == 0) + if (RandomWeighted(RNG_CONFUSION, 2, 1)) #else - if (Random() % 2 == 0) + if (RandomWeighted(RNG_CONFUSION, 1, 1)) #endif { gBattleCommunication[MULTISTRING_CHOOSER] = TRUE; @@ -3625,7 +3625,7 @@ u8 AtkCanceller_UnableToUseMove(void) gBattleStruct->atkCancellerTracker++; break; case CANCELLER_PARALYSED: // paralysis - if ((gBattleMons[gBattlerAttacker].status1 & STATUS1_PARALYSIS) && (Random() % 4) == 0) + if ((gBattleMons[gBattlerAttacker].status1 & STATUS1_PARALYSIS) && !RandomPercentage(RNG_PARALYSIS, 75)) { gProtectStructs[gBattlerAttacker].prlzImmobility = TRUE; // This is removed in FRLG and Emerald for some reason @@ -3640,7 +3640,7 @@ u8 AtkCanceller_UnableToUseMove(void) if (gBattleMons[gBattlerAttacker].status2 & STATUS2_INFATUATION) { gBattleScripting.battler = CountTrailingZeroBits((gBattleMons[gBattlerAttacker].status2 & STATUS2_INFATUATION) >> 0x10); - if (Random() & 1) + if (!RandomPercentage(RNG_INFATUATION, 50)) { BattleScriptPushCursor(); } @@ -5645,7 +5645,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move && TARGET_TURN_DAMAGED && CanBePoisoned(gBattlerTarget, gBattlerAttacker) && IsMoveMakingContact(move, gBattlerAttacker) - && (Random() % 3) == 0) + && RandomWeighted(RNG_POISON_POINT, 2, 1)) { gBattleScripting.moveEffect = MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_POISON; PREPARE_ABILITY_BUFFER(gBattleTextBuff1, gLastUsedAbility); @@ -5663,7 +5663,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move && TARGET_TURN_DAMAGED && CanBeParalyzed(gBattlerAttacker) && IsMoveMakingContact(move, gBattlerAttacker) - && (Random() % 3) == 0) + && RandomWeighted(RNG_STATIC, 2, 1)) { gBattleScripting.moveEffect = MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_PARALYSIS; BattleScriptPushCursor(); @@ -5679,7 +5679,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move && (IsMoveMakingContact(move, gBattlerAttacker)) && TARGET_TURN_DAMAGED && CanBeBurned(gBattlerAttacker) - && (Random() % 3) == 0) + && RandomWeighted(RNG_FLAME_BODY, 2, 1)) { gBattleScripting.moveEffect = MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_BURN; BattleScriptPushCursor(); @@ -5695,7 +5695,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move && (IsMoveMakingContact(move, gBattlerAttacker)) && TARGET_TURN_DAMAGED && gBattleMons[gBattlerTarget].hp != 0 - && (Random() % 3) == 0 + && RandomWeighted(RNG_CUTE_CHARM, 2, 1) && GetBattlerAbility(gBattlerAttacker) != ABILITY_OBLIVIOUS && !IsAbilityOnSide(gBattlerAttacker, ABILITY_AROMA_VEIL) && GetGenderFromSpeciesAndPersonality(speciesAtk, pidAtk) != GetGenderFromSpeciesAndPersonality(speciesDef, pidDef) @@ -5915,7 +5915,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) && gBattleMons[gBattlerTarget].hp != 0 && !gProtectStructs[gBattlerAttacker].confusionSelfDmg - && (Random() % 10) == 0 + && RandomWeighted(RNG_STENCH, 9, 1) && !IS_MOVE_STATUS(move) && !sMovesNotAffectedByStench[gCurrentMove]) { @@ -7635,7 +7635,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn) if (gBattleMoveDamage != 0 // Need to have done damage && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) && TARGET_TURN_DAMAGED - && (Random() % 100) < atkHoldEffectParam + && RandomPercentage(RNG_HOLD_EFFECT_FLINCH, atkHoldEffectParam) && gBattleMoves[gCurrentMove].flags & FLAG_KINGS_ROCK_AFFECTED && gBattleMons[gBattlerTarget].hp) { @@ -9752,7 +9752,7 @@ static s32 DoMoveDamageCalc(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, // Add a random factor. if (randomFactor) { - dmg *= 100 - (Random() % 16); + dmg *= 100 - RandomUniform(RNG_DAMAGE_MODIFIER, 0, 15); dmg /= 100; } diff --git a/src/random.c b/src/random.c index de923fba6383..e59b5638764d 100644 --- a/src/random.c +++ b/src/random.c @@ -31,3 +31,27 @@ u16 Random2(void) gRng2Value = ISO_RANDOMIZE1(gRng2Value); return gRng2Value >> 16; } + +__attribute__((weak, alias("RandomUniformDefault"))) +u32 RandomUniform(enum RandomTag tag, u32 lo, u32 hi); + +__attribute__((weak, alias("RandomWeightedArrayDefault"))) +u32 RandomWeightedArray(enum RandomTag tag, u32 sum, u32 n, const u8 *weights); + +u32 RandomUniformDefault(enum RandomTag tag, u32 lo, u32 hi) +{ + return lo + (((hi - lo) * Random()) >> 16); +} + +u32 RandomWeightedArrayDefault(enum RandomTag tag, u32 sum, u32 n, const u8 *weights) +{ + s32 i, targetSum; + targetSum = (sum * Random()) >> 16; + for (i = 0; i < n - 1; i++) + { + targetSum -= weights[i]; + if (targetSum < 0) + return i; + } + return n - 1; +} diff --git a/test/ability_compound_eyes.c b/test/ability_compound_eyes.c index 97ab84dd2739..bbe718176a7c 100644 --- a/test/ability_compound_eyes.c +++ b/test/ability_compound_eyes.c @@ -3,7 +3,7 @@ SINGLE_BATTLE_TEST("Compound Eyes raises accuracy") { - PASSES_RANDOMLY(91, 100); + PASSES_RANDOMLY(91, 100, RNG_ACCURACY); GIVEN { ASSUME(gBattleMoves[MOVE_THUNDER].accuracy == 70); PLAYER(SPECIES_BUTTERFREE) { Ability(ABILITY_COMPOUND_EYES); }; @@ -22,7 +22,7 @@ SINGLE_BATTLE_TEST("Compound Eyes raises accuracy") SINGLE_BATTLE_TEST("Compound Eyes does not affect OHKO moves") { KNOWN_FAILING; - PASSES_RANDOMLY(30, 100); + PASSES_RANDOMLY(30, 100, RNG_ACCURACY); GIVEN { ASSUME(gBattleMoves[MOVE_FISSURE].accuracy == 30); ASSUME(gBattleMoves[MOVE_FISSURE].effect == EFFECT_OHKO); diff --git a/test/ability_cute_charm.c b/test/ability_cute_charm.c index 5e089efdf26d..ccf5c490b3f7 100644 --- a/test/ability_cute_charm.c +++ b/test/ability_cute_charm.c @@ -1,9 +1,6 @@ #include "global.h" #include "test_battle.h" -// TODO: Currently PASSES_RANDOMLY is incapable of testing Cute Charm -// because it only activates 33% of the time, but we only want to -// measure the 50% of the time that the infatuation prevents our move. SINGLE_BATTLE_TEST("Cute Charm inflicts infatuation on contact") { u32 move; diff --git a/test/ability_sand_veil.c b/test/ability_sand_veil.c index 5d2325140d13..5514f27c0e90 100644 --- a/test/ability_sand_veil.c +++ b/test/ability_sand_veil.c @@ -16,7 +16,7 @@ SINGLE_BATTLE_TEST("Sand Veil prevents damage from sandstorm") SINGLE_BATTLE_TEST("Sand Veil reduces accuracy during sandstorm") { - PASSES_RANDOMLY(4,5); + PASSES_RANDOMLY(4, 5, RNG_ACCURACY); GIVEN { ASSUME(gBattleMoves[MOVE_POUND].accuracy == 100); PLAYER(SPECIES_SANDSHREW) { Ability(ABILITY_SAND_VEIL); }; diff --git a/test/ability_stench.c b/test/ability_stench.c index 18d9097680ed..fb76ebc07ee3 100644 --- a/test/ability_stench.c +++ b/test/ability_stench.c @@ -3,7 +3,7 @@ SINGLE_BATTLE_TEST("Stench has a 10% chance to flinch") { - PASSES_RANDOMLY(1,10); + PASSES_RANDOMLY(1, 10, RNG_STENCH); GIVEN { ASSUME(gBattleMoves[MOVE_TACKLE].power > 0); PLAYER(SPECIES_GRIMER) { Ability(ABILITY_STENCH); }; @@ -17,7 +17,8 @@ SINGLE_BATTLE_TEST("Stench has a 10% chance to flinch") SINGLE_BATTLE_TEST("Stench does not stack with King's Rock") { - PASSES_RANDOMLY(1,10); + KNOWN_FAILING; + PASSES_RANDOMLY(1, 10, RNG_STENCH); GIVEN { ASSUME(gItems[ITEM_KINGS_ROCK].holdEffect == HOLD_EFFECT_FLINCH); ASSUME(gBattleMoves[MOVE_TACKLE].power > 0); diff --git a/test/hold_effect_red_card.c b/test/hold_effect_red_card.c index 882007cfd470..0a8bb3460cba 100644 --- a/test/hold_effect_red_card.c +++ b/test/hold_effect_red_card.c @@ -8,7 +8,7 @@ ASSUMPTIONS SINGLE_BATTLE_TEST("Red Card switches the attacker with a random non-fainted replacement") { - PASSES_RANDOMLY(1, 2); + PASSES_RANDOMLY(1, 2, RNG_FORCE_RANDOM_SWITCH); GIVEN { PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_RED_CARD); } OPPONENT(SPECIES_WOBBUFFET); @@ -27,7 +27,7 @@ SINGLE_BATTLE_TEST("Red Card switches the attacker with a random non-fainted rep DOUBLE_BATTLE_TEST("Red Card switches the target with a random non-battler, non-fainted replacement") { - PASSES_RANDOMLY(1, 2); + PASSES_RANDOMLY(1, 2, RNG_FORCE_RANDOM_SWITCH); GIVEN { PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_RED_CARD); } PLAYER(SPECIES_WYNAUT); diff --git a/test/move.c b/test/move.c index d7e759f27a54..9ad336330f27 100644 --- a/test/move.c +++ b/test/move.c @@ -10,7 +10,7 @@ SINGLE_BATTLE_TEST("Accuracy controls the proportion of misses") PARAMETRIZE { move = MOVE_RAZOR_LEAF; } PARAMETRIZE { move = MOVE_SCRATCH; } ASSUME(0 < gBattleMoves[move].accuracy && gBattleMoves[move].accuracy <= 100); - PASSES_RANDOMLY(gBattleMoves[move].accuracy, 100); + PASSES_RANDOMLY(gBattleMoves[move].accuracy, 100, RNG_ACCURACY); GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); @@ -27,10 +27,9 @@ SINGLE_BATTLE_TEST("Secondary Effect Chance controls the proportion of secondary PARAMETRIZE { move = MOVE_THUNDER_SHOCK; } PARAMETRIZE { move = MOVE_DISCHARGE; } PARAMETRIZE { move = MOVE_NUZZLE; } - ASSUME(gBattleMoves[move].accuracy == 100); ASSUME(gBattleMoves[move].effect == EFFECT_PARALYZE_HIT); ASSUME(0 < gBattleMoves[move].secondaryEffectChance && gBattleMoves[move].secondaryEffectChance <= 100); - PASSES_RANDOMLY(gBattleMoves[move].secondaryEffectChance, 100); + PASSES_RANDOMLY(gBattleMoves[move].secondaryEffectChance, 100, RNG_SECONDARY_EFFECT); GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); @@ -70,6 +69,7 @@ SINGLE_BATTLE_TEST("Turn order is determined by speed if priority ties") SINGLE_BATTLE_TEST("Turn order is determined randomly if priority and speed tie") { + KNOWN_FAILING; // The algorithm is significantly biased. PASSES_RANDOMLY(1, 2); GIVEN { PLAYER(SPECIES_WOBBUFFET) { Speed(1); } @@ -85,15 +85,29 @@ SINGLE_BATTLE_TEST("Turn order is determined randomly if priority and speed tie" SINGLE_BATTLE_TEST("Critical hits occur at a 1/24 rate") { ASSUME(B_CRIT_CHANCE >= GEN_7); - ASSUME(gBattleMoves[MOVE_SCRATCH].accuracy == 100); - PASSES_RANDOMLY(100 / 24, 100); + PASSES_RANDOMLY(1, 24, RNG_CRITICAL_HIT); GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_SCRATCH); } } SCENE { - MESSAGE("It's a critical hit!"); + MESSAGE("A critical hit!"); + } +} + +SINGLE_BATTLE_TEST("Slash's critical hits occur at a 1/8 rate") +{ + ASSUME(B_CRIT_CHANCE >= GEN_7); + ASSUME(gBattleMoves[MOVE_SLASH].flags & FLAG_HIGH_CRIT); + PASSES_RANDOMLY(1, 8, RNG_CRITICAL_HIT); + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_SLASH); } + } SCENE { + MESSAGE("A critical hit!"); } } diff --git a/test/move_effect_accuracy_down.c b/test/move_effect_accuracy_down.c index 2a90d8ea25d1..a6a79d8db6fb 100644 --- a/test/move_effect_accuracy_down.c +++ b/test/move_effect_accuracy_down.c @@ -9,7 +9,7 @@ ASSUMPTIONS SINGLE_BATTLE_TEST("Sand Attack lowers Accuracy") { ASSUME(gBattleMoves[MOVE_SCRATCH].accuracy == 100); - PASSES_RANDOMLY(gBattleMoves[MOVE_SCRATCH].accuracy * 3 / 4, 100); + PASSES_RANDOMLY(gBattleMoves[MOVE_SCRATCH].accuracy * 3 / 4, 100, RNG_ACCURACY); GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); diff --git a/test/move_effect_evasion_up.c b/test/move_effect_evasion_up.c index d14d15334465..4a4e99db72cf 100644 --- a/test/move_effect_evasion_up.c +++ b/test/move_effect_evasion_up.c @@ -9,7 +9,7 @@ ASSUMPTIONS SINGLE_BATTLE_TEST("Double Team raises Evasion") { ASSUME(gBattleMoves[MOVE_SCRATCH].accuracy == 100); - PASSES_RANDOMLY(gBattleMoves[MOVE_SCRATCH].accuracy * 3 / 4, 100); + PASSES_RANDOMLY(gBattleMoves[MOVE_SCRATCH].accuracy * 3 / 4, 100, RNG_ACCURACY); GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); diff --git a/test/move_effect_hit_switch_target.c b/test/move_effect_hit_switch_target.c index 9c50a4e4c071..5af3062a4f02 100644 --- a/test/move_effect_hit_switch_target.c +++ b/test/move_effect_hit_switch_target.c @@ -9,8 +9,7 @@ ASSUMPTIONS SINGLE_BATTLE_TEST("Dragon Tail switches the target with a random non-fainted replacement") { - KNOWN_FAILING; // Only 18/50. Waiting for an improved PASSES_RANDOMLY. - PASSES_RANDOMLY(90 * 1, 100 * 2); + PASSES_RANDOMLY(1, 2, RNG_FORCE_RANDOM_SWITCH); GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); @@ -27,7 +26,7 @@ SINGLE_BATTLE_TEST("Dragon Tail switches the target with a random non-fainted re DOUBLE_BATTLE_TEST("Dragon Tail switches the target with a random non-battler, non-fainted replacement") { - PASSES_RANDOMLY(90 * 1, 100 * 2); + PASSES_RANDOMLY(1, 2, RNG_FORCE_RANDOM_SWITCH); GIVEN { PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WYNAUT); diff --git a/test/move_effect_rampage.c b/test/move_effect_rampage.c index a3afebf6bac7..aa4a002fb117 100644 --- a/test/move_effect_rampage.c +++ b/test/move_effect_rampage.c @@ -8,7 +8,7 @@ ASSUMPTIONS SINGLE_BATTLE_TEST("Thrash lasts for 2 or 3 turns") { - PASSES_RANDOMLY(1, 2); + PASSES_RANDOMLY(1, 2, RNG_RAMPAGE_TURNS); GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); @@ -26,7 +26,6 @@ SINGLE_BATTLE_TEST("Thrash lasts for 2 or 3 turns") SINGLE_BATTLE_TEST("Thrash confuses the user after it finishes") { GIVEN { - RNGSeed(0x00000000); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -45,7 +44,6 @@ SINGLE_BATTLE_TEST("Thrash does not confuse the user if it is canceled on turn 1 { GIVEN { ASSUME(B_RAMPAGE_CANCELLING >= GEN_5); - RNGSeed(0x00000000); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -61,7 +59,6 @@ SINGLE_BATTLE_TEST("Thrash does not confuse the user if it is canceled on turn 2 { GIVEN { ASSUME(B_RAMPAGE_CANCELLING >= GEN_5); - RNGSeed(0x00000000); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -78,7 +75,6 @@ SINGLE_BATTLE_TEST("Thrash confuses the user if it is canceled on turn 3 of 3") KNOWN_FAILING; GIVEN { ASSUME(B_RAMPAGE_CANCELLING >= GEN_5); - RNGSeed(0x00000000); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { diff --git a/test/move_effect_roar.c b/test/move_effect_roar.c index 2d4eadda8578..99256b298614 100644 --- a/test/move_effect_roar.c +++ b/test/move_effect_roar.c @@ -8,7 +8,7 @@ ASSUMPTIONS SINGLE_BATTLE_TEST("Roar switches the target with a random non-fainted replacement") { - PASSES_RANDOMLY(1, 2); + PASSES_RANDOMLY(1, 2, RNG_FORCE_RANDOM_SWITCH); GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); @@ -25,7 +25,7 @@ SINGLE_BATTLE_TEST("Roar switches the target with a random non-fainted replaceme DOUBLE_BATTLE_TEST("Roar switches the target with a random non-battler, non-fainted replacement") { - PASSES_RANDOMLY(1, 2); + PASSES_RANDOMLY(1, 2, RNG_FORCE_RANDOM_SWITCH); GIVEN { PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WYNAUT); diff --git a/test/move_effect_sleep.c b/test/move_effect_sleep.c index c80faf4bdf92..c34e1248eea7 100644 --- a/test/move_effect_sleep.c +++ b/test/move_effect_sleep.c @@ -6,16 +6,33 @@ ASSUMPTIONS ASSUME(gBattleMoves[MOVE_HYPNOSIS].effect == EFFECT_SLEEP); } -SINGLE_BATTLE_TEST("Hypnosis inflicts sleep") +SINGLE_BATTLE_TEST("Hypnosis inflicts 1-3 turns of sleep") { + u32 turns, count; + ASSUME(B_SLEEP_TURNS >= GEN_5); + PARAMETRIZE { turns = 1; } + PARAMETRIZE { turns = 2; } + PARAMETRIZE { turns = 3; } + PASSES_RANDOMLY(1, 3, RNG_SLEEP_TURNS); GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_HYPNOSIS); } + TURN { MOVE(player, MOVE_HYPNOSIS); MOVE(opponent, MOVE_CELEBRATE); } + for (count = 0; count < turns; ++count) + TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_HYPNOSIS, player); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_SLP, opponent); + MESSAGE("Foe Wobbuffet fell asleep!"); STATUS_ICON(opponent, sleep: TRUE); + for (count = 0; count < turns; ++count) + { + if (count < turns - 1) + MESSAGE("Foe Wobbuffet is fast asleep."); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_SLP, opponent); + } + MESSAGE("Foe Wobbuffet woke up!"); + STATUS_ICON(opponent, none: TRUE); } } diff --git a/test/random.c b/test/random.c new file mode 100644 index 000000000000..abaf4a4f821b --- /dev/null +++ b/test/random.c @@ -0,0 +1,81 @@ +#include "global.h" +#include "test.h" +#include "random.h" + +TEST("RandomUniform generates lo..hi") +{ + u32 lo, hi, i; + PARAMETRIZE { lo = 0; hi = 1; } + PARAMETRIZE { lo = 0; hi = 2; } + PARAMETRIZE { lo = 0; hi = 3; } + PARAMETRIZE { lo = 2; hi = 4; } + for (i = 0; i < 1024; i++) + { + u32 r = RandomUniformDefault(RNG_NONE, lo, hi); + EXPECT(lo <= r && r <= hi); + } +} + +TEST("RandomWeighted generates 0..n-1") +{ + u32 n, sum, i; + static const u8 ws[8] = { 1, 1, 1, 1, 1, 1, 1, 1 }; + PARAMETRIZE { n = 1; } + PARAMETRIZE { n = 2; } + PARAMETRIZE { n = 3; } + PARAMETRIZE { n = 4; } + ASSUME(n <= ARRAY_COUNT(ws)); + for (i = 0, sum = 0; i < n; i++) + sum += ws[i]; + for (i = 0; i < 1024; i++) + { + u32 r = RandomWeightedArrayDefault(RNG_NONE, sum, n, ws); + EXPECT(0 <= r && r < n); + } +} + +TEST("RandomUniform generates uniform distribution") +{ + u32 i, error; + u16 distribution[4]; + + memset(distribution, 0, sizeof(distribution)); + for (i = 0; i < 4096; i++) + { + u32 r = RandomUniformDefault(RNG_NONE, 0, ARRAY_COUNT(distribution)); + EXPECT(0 <= r && r < ARRAY_COUNT(distribution)); + distribution[r]++; + } + + error = 0; + for (i = 0; i < ARRAY_COUNT(distribution); i++) + error += abs(UQ_4_12(0.25) - distribution[i]); + + EXPECT_LT(error, UQ_4_12(0.025)); +} + +TEST("RandomWeighted generates distribution in proportion to the weights") +{ + u32 i, sum, error; + static const u8 ws[4] = { 1, 2, 2, 3 }; + u16 distribution[ARRAY_COUNT(ws)]; + + for (i = 0, sum = 0; i < ARRAY_COUNT(ws); i++) + sum += ws[i]; + + memset(distribution, 0, sizeof(distribution)); + for (i = 0; i < 4096; i++) + { + u32 r = RandomWeightedArrayDefault(RNG_NONE, sum, ARRAY_COUNT(ws), ws); + EXPECT(0 <= r && r < ARRAY_COUNT(ws)); + distribution[r]++; + } + + error = 0; + error += abs(UQ_4_12(0.125) - distribution[0]); + error += abs(UQ_4_12(0.250) - distribution[1]); + error += abs(UQ_4_12(0.250) - distribution[2]); + error += abs(UQ_4_12(0.375) - distribution[3]); + + EXPECT_LT(error, UQ_4_12(0.025)); +} diff --git a/test/status1.c b/test/status1.c index 63a9cd041411..f4d3c7d94495 100644 --- a/test/status1.c +++ b/test/status1.c @@ -72,7 +72,7 @@ SINGLE_BATTLE_TEST("Burn reduces attack by 50%", s16 damage) SINGLE_BATTLE_TEST("Freeze has a 20% chance of being thawed") { - PASSES_RANDOMLY(20, 100); + PASSES_RANDOMLY(20, 100, RNG_FROZEN); GIVEN { PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_FREEZE); } OPPONENT(SPECIES_WOBBUFFET); @@ -90,9 +90,8 @@ SINGLE_BATTLE_TEST("Freeze is thawed by opponent's Fire-type attacks") PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_FREEZE); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_EMBER); } + TURN { MOVE(opponent, MOVE_EMBER); MOVE(player, MOVE_CELEBRATE); } } SCENE { - MESSAGE("Wobbuffet is frozen solid!"); MESSAGE("Foe Wobbuffet used Ember!"); MESSAGE("Wobbuffet was defrosted!"); STATUS_ICON(player, none: TRUE); @@ -145,7 +144,7 @@ SINGLE_BATTLE_TEST("Paralysis reduces speed by 50%") SINGLE_BATTLE_TEST("Paralysis has a 25% chance of skipping the turn") { - PASSES_RANDOMLY(25, 100); + PASSES_RANDOMLY(25, 100, RNG_PARALYSIS); GIVEN { PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_PARALYSIS); } OPPONENT(SPECIES_WOBBUFFET); diff --git a/test/test_battle.h b/test/test_battle.h index a447102f32cb..8c554216e53a 100644 --- a/test/test_battle.h +++ b/test/test_battle.h @@ -65,8 +65,9 @@ * single turn. MOVE causes the player to use Stun Spore and adds the * move to the Pokémon's moveset if an explicit Moves was not specified. * Pokémon that are not mentioned in a TURN use Celebrate. - * The test runner attempts to rig the RNG so that the first move used - * in a turn does not miss and activates its secondary effects (if any). + * The test runner rigs the RNG so that unless otherwise specified, + * moves always hit, never critical hit, always activate their secondary + * effects, and always roll the same damage modifier. * * SCENE describes the player-visible output of the battle. In this case * ANIMATION checks that the Stun Spore animation played, MESSAGE checks @@ -228,12 +229,35 @@ * } * } * - * PASSES_RANDOMLY(successes, trials) - * Checks that the test passes approximately successes/trials. Used for - * testing RNG-based attacks, e.g.: + * PASSES_RANDOMLY(successes, trials, [tag]) + * Checks that the test passes successes/trials. If tag is provided, the + * test is run for each value that the tag can produce. For example, to + * check that Paralysis causes the turn to be skipped 25/100 times, we + * can write the following test that passes only if the Pokémon is fully + * paralyzed and specify that we expect it to pass 25/100 times when + * RNG_PARALYSIS varies: + * SINGLE_BATTLE_TEST("Paralysis has a 25% chance of skipping the turn") + * { + * PASSES_RANDOMLY(25, 100, RNG_PARALYSIS); + * GIVEN { + * PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_PARALYSIS); } + * OPPONENT(SPECIES_WOBBUFFET); + * } WHEN { + * TURN { MOVE(player, MOVE_CELEBRATE); } + * } SCENE { + * MESSAGE("Wobbuffet is paralyzed! It can't move!"); + * } + * } + * All BattleRandom calls involving tag will return the same number, so + * this cannot be used to have two moves independently hit or miss, for + * example. + * + * If the tag is not provided, runs the test 50 times and computes an + * approximate pass ratio. * PASSES_RANDOMLY(gBattleMoves[move].accuracy, 100); - * Note that PASSES_RANDOMLY makes the tests run very slowly and should - * be avoided where possible. + * Note that this mode of PASSES_RANDOMLY makes the tests run very + * slowly and should be avoided where possible. If the mechanic you are + * testing is missing its tag, you should add it. * * GIVEN * Contains the initial state of the parties before the battle. @@ -419,6 +443,7 @@ #include "battle_anim.h" #include "data.h" #include "item.h" +#include "random.h" #include "recorded_battle.h" #include "test.h" #include "util.h" @@ -433,6 +458,7 @@ // NOTE: If the stack is too small the test runner will probably crash // or loop. #define BATTLE_TEST_STACK_SIZE 1024 +#define MAX_TURNS 16 #define MAX_QUEUED_EVENTS 25 enum { BATTLE_TEST_SINGLES, BATTLE_TEST_DOUBLES }; @@ -512,6 +538,13 @@ struct QueuedEvent } as; }; +struct BattlerTurn +{ + u8 hit:2; + u8 criticalHit:2; + u8 secondaryEffect:2; +}; + struct BattleTestData { u8 stack[BATTLE_TEST_STACK_SIZE]; @@ -533,14 +566,13 @@ struct BattleTestData u8 turns; u8 actionBattlers; u8 moveBattlers; - bool8 hasRNGActions:1; struct RecordedBattleSave recordedBattle; u8 battleRecordTypes[MAX_BATTLERS_COUNT][BATTLER_RECORD_SIZE]; u8 battleRecordSourceLineOffsets[MAX_BATTLERS_COUNT][BATTLER_RECORD_SIZE]; u16 recordIndexes[MAX_BATTLERS_COUNT]; + struct BattlerTurn battleRecordTurns[MAX_TURNS][MAX_BATTLERS_COUNT]; u8 lastActionTurn; - u8 nextRNGTurn; u8 queuedEventsCount; u8 queueGroupType; @@ -555,11 +587,12 @@ struct BattleTestRunnerState u8 parametersCount; // Valid only in BattleTest_Setup. u8 parameters; u8 runParameter; + u16 rngTag; u8 trials; - u8 expectedPasses; - u8 observedPasses; - u8 skippedTrials; u8 runTrial; + u16 expectedRatio; + u16 observedRatio; + u16 trialRatio; bool8 runRandomly:1; bool8 runGiven:1; bool8 runWhen:1; @@ -645,9 +678,14 @@ extern struct BattleTestRunnerState *gBattleTestRunnerState; /* Randomly */ -#define PASSES_RANDOMLY(passes, trials) for (; gBattleTestRunnerState->runRandomly; gBattleTestRunnerState->runRandomly = FALSE) Randomly(__LINE__, passes, trials) +#define PASSES_RANDOMLY(passes, trials, ...) for (; gBattleTestRunnerState->runRandomly; gBattleTestRunnerState->runRandomly = FALSE) Randomly(__LINE__, passes, trials, (struct RandomlyContext) { __VA_ARGS__ }) + +struct RandomlyContext +{ + u16 tag; +}; -void Randomly(u32 sourceLine, u32 passes, u32 trials); +void Randomly(u32 sourceLine, u32 passes, u32 trials, struct RandomlyContext); /* Given */ @@ -721,6 +759,8 @@ struct MoveContext u16 explicitHit:1; u16 criticalHit:1; u16 explicitCriticalHit:1; + u16 secondaryEffect:1; + u16 explicitSecondaryEffect:1; u16 megaEvolve:1; u16 explicitMegaEvolve:1; // TODO: u8 zMove:1; diff --git a/test/test_runner_battle.c b/test/test_runner_battle.c index ec7ba275c2c2..0c3c23063523 100644 --- a/test/test_runner_battle.c +++ b/test/test_runner_battle.c @@ -15,26 +15,10 @@ #define STATE gBattleTestRunnerState #define DATA gBattleTestRunnerState->data -/* RNG seeds for controlling the first move of the turn. - * Found via brute force. */ - -/* Default seed, triggers most things. - * The 1st roll % 100 is <= 29, to make 30%+ accuracycheck pass. - * The 2nd roll is not a critical hit at the regular crit stage. - * The 3rd roll is consumed by damagecalc. - * The 4th roll is consumed by adjustdamage. - * The 5th roll % 100 is <= 9, to make 10%+ seteffectwithchance pass - * and % 3 is == 0, to make Poison Point and other 1/3s pass. */ -#define RNG_SEED_DEFAULT 0x000002BE - -/* Causes the first attack to critical hit if B_CRIT_CHANCE >= GEN_6. - * The 2nd roll % 24 == 0 to be a critical hit at any stage. - * The other rolls match RNG_SEED_DEFAULT. */ -#define RNG_SEED_CRITICAL_HIT 0x0000A9F4 - -/* Causes the first attack to miss if possible. - * The 1st roll % 100 is 99, to make 99%- accuracycheck fail. */ -#define RNG_SEED_MISS 0x00000074 +#define RNG_SEED_DEFAULT 0x00000000 + +#undef Q_4_12 +#define Q_4_12(n) (s32)((n) * 4096) EWRAM_DATA struct BattleTestRunnerState *gBattleTestRunnerState = NULL; @@ -129,12 +113,13 @@ static u32 BattleTest_EstimateCost(void *data) if (!STATE) return 0; STATE->runRandomly = TRUE; - DATA.recordedBattle.rngSeed = RNG_SEED_DEFAULT; InvokeTestFunction(test); cost = 1; if (STATE->parametersCount != 0) cost *= STATE->parametersCount; - if (STATE->trials != 0) + if (STATE->trials == 1) + cost *= 3; + else if (STATE->trials > 1) cost *= STATE->trials; FREE_AND_SET_NULL(STATE); return cost; @@ -162,6 +147,28 @@ static void BattleTest_SetUp(void *data) } } +static void PrintTestName(void) +{ + if (STATE->trials && STATE->parameters) + { + if (STATE->trials == 1) + MgbaPrintf_(":N%s %d/%d (%d/?)", gTestRunnerState.test->name, STATE->runParameter + 1, STATE->parameters, STATE->runTrial + 1); + else + MgbaPrintf_(":N%s %d/%d (%d/%d)", gTestRunnerState.test->name, STATE->runParameter + 1, STATE->parameters, STATE->runTrial + 1, STATE->trials); + } + else if (STATE->trials) + { + if (STATE->trials == 1) + MgbaPrintf_(":N%s (%d/?)", gTestRunnerState.test->name, STATE->runTrial + 1); + else + MgbaPrintf_(":N%s (%d/%d)", gTestRunnerState.test->name, STATE->runTrial + 1, STATE->trials); + } + else if (STATE->parameters) + { + MgbaPrintf_(":N%s %d/%d", gTestRunnerState.test->name, STATE->runParameter + 1, STATE->parameters); + } +} + // This does not take into account priority, statuses, or any other // modifiers. static void SetImplicitSpeeds(void) @@ -280,12 +287,82 @@ static void BattleTest_Run(void *data) STATE->checkProgressTrial = 0; STATE->checkProgressTurn = 0; - if (STATE->trials && STATE->parameters) - MgbaPrintf_(":N%s %d/%d (%d/%d)", gTestRunnerState.test->name, STATE->runParameter + 1, STATE->parameters, STATE->runTrial + 1, STATE->trials); - else if (STATE->trials) - MgbaPrintf_(":N%s (%d/%d)", gTestRunnerState.test->name, STATE->runTrial + 1, STATE->trials); - else if (STATE->parameters) - MgbaPrintf_(":N%s %d/%d", gTestRunnerState.test->name, STATE->runParameter + 1, STATE->parameters); + PrintTestName(); +} + +u32 RandomUniform(enum RandomTag tag, u32 lo, u32 hi) +{ + if (tag == STATE->rngTag) + { + u32 n = hi - lo + 1; + if (STATE->trials == 1) + { + STATE->trials = n; + PrintTestName(); + } + else if (STATE->trials != n) + { + Test_ExitWithResult(TEST_RESULT_ERROR, "RandomUniform called with inconsistent trials %d and %d", STATE->trials, n); + } + STATE->trialRatio = Q_4_12(1) / n; + return STATE->runTrial + lo; + } + + return hi; +} + +u32 RandomWeightedArray(enum RandomTag tag, u32 sum, u32 n, const u8 *weights) +{ + const struct BattlerTurn *turn = NULL; + u32 default_ = n-1; + + if (gCurrentTurnActionNumber < gBattlersCount) + { + u32 battlerId = gBattlerByTurnOrder[gCurrentTurnActionNumber]; + turn = &DATA.battleRecordTurns[gBattleResults.battleTurnCounter][battlerId]; + } + + switch (tag) + { + case RNG_ACCURACY: + ASSUME(n == 2); + if (turn && turn->hit) + return turn->hit - 1; + default_ = TRUE; + break; + + case RNG_CRITICAL_HIT: + ASSUME(n == 2); + if (turn && turn->criticalHit) + return turn->criticalHit - 1; + default_ = FALSE; + break; + + case RNG_SECONDARY_EFFECT: + ASSUME(n == 2); + if (turn && turn->secondaryEffect) + return turn->secondaryEffect - 1; + default_ = TRUE; + break; + } + + if (tag == STATE->rngTag) + { + if (STATE->trials == 1) + { + STATE->trials = n; + PrintTestName(); + } + else if (STATE->trials != n) + { + Test_ExitWithResult(TEST_RESULT_ERROR, "RandomWeighted called with inconsistent trials %d and %d", STATE->trials, n); + } + // TODO: Detect inconsistent sum. + STATE->trialRatio = Q_4_12(weights[STATE->runTrial]) / sum; + return STATE->runTrial; + } + + return default_; } static s32 TryAbilityPopUp(s32 i, s32 n, u32 battlerId, u32 ability) @@ -711,42 +788,36 @@ static void CB2_BattleTest_NextTrial(void) SetMainCallback2(CB2_BattleTest_NextParameter); + switch (gTestRunnerState.result) + { + case TEST_RESULT_FAIL: + break; + case TEST_RESULT_PASS: + STATE->observedRatio += STATE->trialRatio; + break; + default: + return; + } + if (STATE->rngTag) + STATE->trialRatio = 0; + if (++STATE->runTrial < STATE->trials) { - switch (gTestRunnerState.result) - { - case TEST_RESULT_FAIL: - break; - case TEST_RESULT_PASS: - STATE->observedPasses++; - break; - case TEST_RESULT_ASSUMPTION_FAIL: - STATE->skippedTrials++; - if (STATE->skippedTrials > STATE->trials / 4) - Test_ExitWithResult(TEST_RESULT_INVALID, "25%% of the trials were SKIPed"); - break; - default: - return; - } - if (STATE->parameters) - MgbaPrintf_(":N%s %d/%d (%d/%d)", gTestRunnerState.test->name, STATE->runParameter + 1, STATE->parameters, STATE->runTrial + 1, STATE->trials); - else - MgbaPrintf_(":N%s (%d/%d)", gTestRunnerState.test->name, STATE->runTrial + 1, STATE->trials); - gTestRunnerState.result = TEST_RESULT_PASS; + PrintTestName(); + gTestRunnerState.result = TEST_RESULT_PASS; DATA.recordedBattle.rngSeed = ISO_RANDOMIZE1(STATE->runTrial); DATA.queuedEvent = 0; DATA.lastActionTurn = 0; - DATA.nextRNGTurn = 0; SetVariablesForRecordedBattle(&DATA.recordedBattle); SetMainCallback2(CB2_InitBattle); } else { - // This is a tolerance of +/- 4%. - if (abs(STATE->observedPasses - STATE->expectedPasses) <= 2) + // This is a tolerance of +/- ~2%. + if (abs(STATE->observedRatio - STATE->expectedRatio) <= Q_4_12(0.02)) gTestRunnerState.result = TEST_RESULT_PASS; else - Test_ExitWithResult(TEST_RESULT_FAIL, "Expected %d/%d passes, observed %d/%d", STATE->expectedPasses, STATE->trials, STATE->observedPasses, STATE->trials); + Test_ExitWithResult(TEST_RESULT_FAIL, "Expected %q passes/successes, observed %q", STATE->expectedRatio, STATE->observedRatio); } } @@ -773,7 +844,8 @@ static bool32 BattleTest_CheckProgress(void *data) static bool32 BattleTest_HandleExitWithResult(void *data, enum TestResult result) { - if (result != TEST_RESULT_INVALID + if (result != TEST_RESULT_ASSUMPTION_FAIL + && result != TEST_RESULT_INVALID && result != TEST_RESULT_ERROR && result != TEST_RESULT_TIMEOUT && STATE->runTrial < STATE->trials) @@ -787,16 +859,25 @@ static bool32 BattleTest_HandleExitWithResult(void *data, enum TestResult result } } -void Randomly(u32 sourceLine, u32 passes, u32 trials) +void Randomly(u32 sourceLine, u32 passes, u32 trials, struct RandomlyContext ctx) { - INVALID_IF(DATA.recordedBattle.rngSeed != RNG_SEED_DEFAULT, "RNG seed already set"); - // This is a precision of 2%. - STATE->trials = 50; - STATE->expectedPasses = STATE->trials * passes / trials; - STATE->observedPasses = 0; - STATE->skippedTrials = 0; + INVALID_IF(passes > trials, "%d passes specified, but only %d trials", passes, trials); + STATE->rngTag = ctx.tag; STATE->runTrial = 0; - DATA.recordedBattle.rngSeed = 0; + STATE->expectedRatio = Q_4_12(passes) / trials; + STATE->observedRatio = 0; + if (STATE->rngTag) + { + STATE->trials = 1; + STATE->trialRatio = Q_4_12(1); + } + else + { + INVALID_IF(DATA.recordedBattle.rngSeed != RNG_SEED_DEFAULT, "RNG seed already set"); + STATE->trials = 50; + STATE->trialRatio = Q_4_12(1) / STATE->trials; + DATA.recordedBattle.rngSeed = 0; + } } void RNGSeed_(u32 sourceLine, u32 seed) @@ -1037,16 +1118,6 @@ static void PushBattlerAction(u32 sourceLine, s32 battlerId, u32 actionType, u32 void BattleTest_CheckBattleRecordActionType(u32 battlerId, u32 recordIndex, u32 actionType) { - // TODO: Support explicit seeds for each turn? - if (DATA.nextRNGTurn == gBattleResults.battleTurnCounter - && (DATA.recordedBattle.rngSeed == RNG_SEED_DEFAULT - || DATA.recordedBattle.rngSeed == RNG_SEED_CRITICAL_HIT - || DATA.recordedBattle.rngSeed == RNG_SEED_MISS)) - { - gRngValue = DATA.recordedBattle.rngSeed; - DATA.nextRNGTurn++; - } - // An illegal move choice will cause the battle to request a new // move slot and target. This detects the move slot. if (actionType == RECORDED_MOVE_SLOT @@ -1122,10 +1193,11 @@ void BattleTest_CheckBattleRecordActionType(u32 battlerId, u32 recordIndex, u32 void OpenTurn(u32 sourceLine) { INVALID_IF(DATA.turnState != TURN_CLOSED, "Nested TURN"); + if (DATA.turns == MAX_TURNS) + Test_ExitWithResult(TEST_RESULT_ERROR, "%s:%d: TURN exceeds MAX_TURNS", gTestRunnerState.test->filename, sourceLine); DATA.turnState = TURN_OPEN; DATA.actionBattlers = 0x00; DATA.moveBattlers = 0x00; - DATA.hasRNGActions = FALSE; } static void SetSlowerThan(s32 battlerId) @@ -1253,21 +1325,12 @@ void Move(u32 sourceLine, struct BattlePokemon *battler, struct MoveContext ctx) } } - if (ctx.explicitHit && !ctx.hit) - { - if (DATA.hasRNGActions != 0) - Test_ExitWithResult(TEST_RESULT_ERROR, "%s:%d: hit only supported on the first move", gTestRunnerState.test->filename, sourceLine); - INVALID_IF(DATA.recordedBattle.rngSeed != RNG_SEED_DEFAULT, "RNG seed already set"); - DATA.recordedBattle.rngSeed = RNG_SEED_MISS; - } - - if (ctx.explicitCriticalHit && ctx.criticalHit) - { - if (DATA.hasRNGActions != 0) - Test_ExitWithResult(TEST_RESULT_ERROR, "%s:%d: criticalHit only supported on the first move", gTestRunnerState.test->filename, sourceLine); - INVALID_IF(DATA.recordedBattle.rngSeed != RNG_SEED_DEFAULT, "RNG seed already set"); - DATA.recordedBattle.rngSeed = RNG_SEED_CRITICAL_HIT; - } + if (ctx.explicitHit) + DATA.battleRecordTurns[DATA.turns][battlerId].hit = 1 + ctx.hit; + if (ctx.explicitCriticalHit) + DATA.battleRecordTurns[DATA.turns][battlerId].criticalHit = 1 + ctx.criticalHit; + if (ctx.explicitSecondaryEffect) + DATA.battleRecordTurns[DATA.turns][battlerId].secondaryEffect = 1 + ctx.secondaryEffect; if (!(DATA.actionBattlers & (1 << battlerId))) { @@ -1288,14 +1351,6 @@ void Move(u32 sourceLine, struct BattlePokemon *battler, struct MoveContext ctx) DATA.actionBattlers |= 1 << battlerId; DATA.moveBattlers |= 1 << battlerId; } - - // WARNING: Approximation. The move could still cause the RNG to - // advance. - if (gBattleMoves[moveId].accuracy != 0 - || gBattleMoves[moveId].split != SPLIT_STATUS) - { - DATA.hasRNGActions = TRUE; - } } void ForcedMove(u32 sourceLine, struct BattlePokemon *battler) From f4e8389779da1d3a16c524dade408c9072a14ecd Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Thu, 16 Mar 2023 17:58:39 -0300 Subject: [PATCH 178/428] Added Psyblade and Hydro Steam --- data/battle_anim_scripts.s | 4 ++++ data/battle_scripts_1.s | 4 +++- include/constants/battle_move_effects.h | 4 +++- include/constants/moves.h | 4 +++- src/battle_util.c | 6 ++++- src/data/battle_moves.h | 30 +++++++++++++++++++++++++ src/data/contest_moves.h | 4 ++++ src/data/text/move_descriptions.h | 10 +++++++++ src/data/text/move_names.h | 4 ++++ 9 files changed, 66 insertions(+), 4 deletions(-) diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index 4663fdcafd32..cca8706cbc04 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -854,6 +854,8 @@ gBattleAnims_Moves:: .4byte Move_NOXIOUS_TORQUE .4byte Move_COMBAT_TORQUE .4byte Move_MAGICAL_TORQUE + .4byte Move_PSYBLADE + .4byte Move_HYDRO_STEAM @@@@ Z MOVES .4byte Move_BREAKNECK_BLITZ .4byte Move_ALL_OUT_PUMMELING @@ -14464,6 +14466,8 @@ Move_WICKED_TORQUE:: Move_NOXIOUS_TORQUE:: Move_COMBAT_TORQUE:: Move_MAGICAL_TORQUE:: +Move_PSYBLADE:: +Move_HYDRO_STEAM:: end @to do @@@@@@@@@@@@@@@@@@@@@@@ GEN 1-3 @@@@@@@@@@@@@@@@@@@@@@@ diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 8b93edb78a56..52c13529437d 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -417,7 +417,9 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectVictoryDance @ EFFECT_VICTORY_DANCE .4byte BattleScript_EffectTeatime @ EFFECT_TEATIME .4byte BattleScript_EffectAttackUpUserAlly @ EFFECT_ATTACK_UP_USER_ALLY - .4byte BattleScript_EffectShellTrap @ EFFECT_SHELL_TRAP + .4byte BattleScript_EffectShellTrap @ EFFECT_SHELL_TRAP + .4byte BattleScript_EffectHit @ EFFECT_PSYBLADE + .4byte BattleScript_EffectHit @ EFFECT_HYDRO_STEAM BattleScript_EffectAttackUpUserAlly: jumpifnoally BS_ATTACKER, BattleScript_EffectAttackUp diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h index 061271dd56e4..c374ce43668f 100644 --- a/include/constants/battle_move_effects.h +++ b/include/constants/battle_move_effects.h @@ -399,7 +399,9 @@ #define EFFECT_TEATIME 393 #define EFFECT_ATTACK_UP_USER_ALLY 394 // Howl 8th Gen #define EFFECT_SHELL_TRAP 395 +#define EFFECT_PSYBLADE 396 +#define EFFECT_HYDRO_STEAM 397 -#define NUM_BATTLE_MOVE_EFFECTS 396 +#define NUM_BATTLE_MOVE_EFFECTS 398 #endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H diff --git a/include/constants/moves.h b/include/constants/moves.h index 20cb32c54596..dd00aacb4568 100644 --- a/include/constants/moves.h +++ b/include/constants/moves.h @@ -858,8 +858,10 @@ #define MOVE_NOXIOUS_TORQUE 824 #define MOVE_COMBAT_TORQUE 825 #define MOVE_MAGICAL_TORQUE 826 +#define MOVE_PSYBLADE 827 +#define MOVE_HYDRO_STEAM 828 -#define MOVES_COUNT_GEN9 827 +#define MOVES_COUNT_GEN9 829 #define MOVES_COUNT MOVES_COUNT_GEN9 diff --git a/src/battle_util.c b/src/battle_util.c index 4b50bc704515..fcfec90c2ba7 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -8769,6 +8769,10 @@ static u16 CalcMoveBasePower(u16 move, u8 battlerAtk, u8 battlerDef) basePower = CalcBeatUpPower(); #endif break; + case EFFECT_PSYBLADE: + if (IsBattlerTerrainAffected(gBattlerAttacker, STATUS_FIELD_ELECTRIC_TERRAIN)) + MulModifier(&basePower, UQ_4_12(1.5)); + break; } // Move-specific base power changes @@ -9586,7 +9590,7 @@ static u32 CalcFinalDmg(u32 dmg, u16 move, u8 battlerAtk, u8 battlerDef, u8 move } else if (IsBattlerWeatherAffected(battlerAtk, B_WEATHER_SUN)) { - if (moveType == TYPE_FIRE) + if (moveType == TYPE_FIRE || gBattleMoves[move].effect == EFFECT_HYDRO_STEAM) dmg = ApplyModifier(UQ_4_12(1.5), dmg); else if (moveType == TYPE_WATER) dmg = ApplyModifier(UQ_4_12(0.5), dmg); diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index dc18893de24a..7ce5a669e641 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -13593,6 +13593,36 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .zMoveEffect = Z_EFFECT_NONE }, + [MOVE_PSYBLADE] = + { + .effect = EFFECT_PSYBLADE, + .power = 80, + .type = TYPE_PSYCHIC, + .accuracy = 100, + .pp = 15, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SLICING_MOVE, + .split = SPLIT_PHYSICAL, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_HYDRO_STEAM] = + { + .effect = EFFECT_HYDRO_STEAM, + .power = 80, + .type = TYPE_WATER, + .accuracy = 100, + .pp = 15, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMoveEffect = Z_EFFECT_NONE, + }, + // Z-Moves [MOVE_BREAKNECK_BLITZ] = { diff --git a/src/data/contest_moves.h b/src/data/contest_moves.h index 2de44b348636..3d633a2562b8 100644 --- a/src/data/contest_moves.h +++ b/src/data/contest_moves.h @@ -6062,6 +6062,10 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = [MOVE_COMBAT_TORQUE] = {0}, // TODO [MOVE_MAGICAL_TORQUE] = {0}, // TODO + + [MOVE_PSYBLADE] = {0}, // TODO + + [MOVE_HYDRO_STEAM] = {0}, // TODO }; const struct ContestEffect gContestEffects[] = diff --git a/src/data/text/move_descriptions.h b/src/data/text/move_descriptions.h index 7000759f75ab..c2b7e0b234bf 100644 --- a/src/data/text/move_descriptions.h +++ b/src/data/text/move_descriptions.h @@ -3236,6 +3236,14 @@ static const u8 sCombatTorqueDescription[] = _( static const u8 sMagicalTorqueDescription[] = _( "---"); +static const u8 sPsybladeDescription[] = _( + "This move's power increases\n" + "when on Electric Terrain."); + +static const u8 sHydroSteamDescription[] = _( + "This move's power increases\n" + "under harsh sunlight."); + const u8 gNotDoneYetDescription[] = _( "This move can't be used. Its\n" "effect is in development."); @@ -4073,4 +4081,6 @@ const u8 *const gMoveDescriptionPointers[MOVES_COUNT - 1] = [MOVE_NOXIOUS_TORQUE - 1] = sNoxiousTorqueDescription, [MOVE_COMBAT_TORQUE - 1] = sCombatTorqueDescription, [MOVE_MAGICAL_TORQUE - 1] = sMagicalTorqueDescription, + [MOVE_PSYBLADE - 1] = sPsybladeDescription, + [MOVE_HYDRO_STEAM - 1] = sHydroSteamDescription, }; diff --git a/src/data/text/move_names.h b/src/data/text/move_names.h index 221d3db73d25..85d406dcab26 100644 --- a/src/data/text/move_names.h +++ b/src/data/text/move_names.h @@ -829,6 +829,8 @@ const u8 gMoveNames[MOVES_COUNT][MOVE_NAME_LENGTH + 1] = [MOVE_NOXIOUS_TORQUE] = _("Noxious Torque"), [MOVE_COMBAT_TORQUE] = _("Combat Torque"), [MOVE_MAGICAL_TORQUE] = _("Magical Torque"), + [MOVE_PSYBLADE] = _("Psyblade"), + [MOVE_HYDRO_STEAM] = _("Hydro Steam"), }; #else // 12 letters @@ -1661,6 +1663,8 @@ const u8 gMoveNames[MOVES_COUNT][MOVE_NAME_LENGTH + 1] = [MOVE_NOXIOUS_TORQUE] = _("NoxiusTorque"), [MOVE_COMBAT_TORQUE] = _("CombatTorque"), [MOVE_MAGICAL_TORQUE] = _("MagiclTorque"), + [MOVE_PSYBLADE] = _("Psyblade"), + [MOVE_HYDRO_STEAM] = _("Hydro Steam"), }; #endif From bef5d98b88cef4138fe83adad0b572f0893f6661 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sat, 18 Mar 2023 09:47:54 -0300 Subject: [PATCH 179/428] =?UTF-8?q?Fixed=20Pok=C3=A9mon=20fainting=20in=20?= =?UTF-8?q?the=20Overworld=20that=20don't=20have=20that=20specific=20form?= =?UTF-8?q?=20change=20entry?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pokemon.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pokemon.c b/src/pokemon.c index e11014120afa..62e1891ab64d 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -8670,7 +8670,7 @@ bool32 TryFormChange(u32 monId, u32 side, u16 method) targetSpecies = GetFormChangeTargetSpecies(&party[monId], method, 0); - if (targetSpecies == SPECIES_NONE) + if (targetSpecies == SPECIES_NONE && gBattleStruct != NULL) targetSpecies = gBattleStruct->changedSpecies[monId]; if (targetSpecies != SPECIES_NONE) From 372c6a1afa1836ffb0595a6767fccbc034e5e80c Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Sun, 19 Mar 2023 20:55:39 +0100 Subject: [PATCH 180/428] Add new item variables and defines --- include/constants/hold_effects.h | 1 + include/constants/items.h | 35 +++- src/data/item_icon_table.h | 29 +++ src/data/items.h | 331 +++++++++++++++++++++++++++++- src/data/text/item_descriptions.h | 60 ++++++ 5 files changed, 453 insertions(+), 3 deletions(-) diff --git a/include/constants/hold_effects.h b/include/constants/hold_effects.h index cd4256632162..5fc268cb05ba 100644 --- a/include/constants/hold_effects.h +++ b/include/constants/hold_effects.h @@ -159,6 +159,7 @@ #define HOLD_EFFECT_PUNCHING_GLOVE 178 #define HOLD_EFFECT_COVERT_CLOAK 179 #define HOLD_EFFECT_LOADED_DICE 180 +#define HOLD_EFFECT_BOOSTER_ENERGY 181 // Not implemented. #define HOLD_EFFECT_CHOICE(holdEffect)((holdEffect == HOLD_EFFECT_CHOICE_BAND || holdEffect == HOLD_EFFECT_CHOICE_SCARF || holdEffect == HOLD_EFFECT_CHOICE_SPECS)) diff --git a/include/constants/items.h b/include/constants/items.h index 1cb2803f37e0..f64790b3823d 100644 --- a/include/constants/items.h +++ b/include/constants/items.h @@ -928,13 +928,44 @@ #define ITEM_RUBY 756 #define ITEM_SAPPHIRE 757 +// GEN IX ITEMS #define ITEM_ABILITY_SHIELD 758 #define ITEM_CLEAR_AMULET 759 #define ITEM_PUNCHING_GLOVE 760 #define ITEM_COVERT_CLOAK 761 #define ITEM_LOADED_DICE 762 - -#define ITEMS_COUNT 763 +#define ITEM_AUSPICIOUS_ARMOR 763 +#define ITEM_BOOSTER_ENERGY 764 +#define ITEM_BIG_BAMBOO_SHOOT 765 +#define ITEM_GIMMIGHOUL_COIN 766 +#define ITEM_LEADERS_CREST 767 +#define ITEM_MALICIOUS_ARMOR 768 +#define ITEM_MIRROR_HERB 769 +#define ITEM_SCROLL_OF_DARKNESS 770 +#define ITEM_SCROLL_OF_WATERS 771 +#define ITEM_TERA_ORB 772 +#define ITEM_TINY_BAMBOO_SHOOT 773 + +#define ITEM_BUG_TERA_SHARD 774 +#define ITEM_DARK_TERA_SHARD 775 +#define ITEM_DRAGON_TERA_SHARD 776 +#define ITEM_ELECTRIC_TERA_SHARD 777 +#define ITEM_FAIRY_TERA_SHARD 778 +#define ITEM_FIGHTING_TERA_SHARD 779 +#define ITEM_FIRE_TERA_SHARD 780 +#define ITEM_FLYING_TERA_SHARD 781 +#define ITEM_GHOST_TERA_SHARD 782 +#define ITEM_GRASS_TERA_SHARD 783 +#define ITEM_GROUND_TERA_SHARD 784 +#define ITEM_ICE_TERA_SHARD 785 +#define ITEM_NORMAL_TERA_SHARD 786 +#define ITEM_POISON_TERA_SHARD 787 +#define ITEM_PSYCHIC_TERA_SHARD 788 +#define ITEM_ROCK_TERA_SHARD 789 +#define ITEM_STEEL_TERA_SHARD 790 +#define ITEM_WATER_TERA_SHARD 791 + +#define ITEMS_COUNT 792 #define ITEM_FIELD_ARROW ITEMS_COUNT // A special item id associated with "Cancel"/"Exit" etc. in a list of items or decorations diff --git a/src/data/item_icon_table.h b/src/data/item_icon_table.h index 0107b71ab712..0dbec3f856d0 100644 --- a/src/data/item_icon_table.h +++ b/src/data/item_icon_table.h @@ -808,6 +808,35 @@ const u32 *const gItemIconTable[ITEMS_COUNT + 1][2] = [ITEM_PUNCHING_GLOVE] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_PunchingGlove, gItemIconPalette_PunchingGlove}, [ITEM_COVERT_CLOAK] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_CovertCloak, gItemIconPalette_CovertCloak}, [ITEM_LOADED_DICE] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_LoadedDice, gItemIconPalette_LoadedDice}, + [ITEM_AUSPICIOUS_ARMOR] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_AuspiciousArmor, gItemIconPalette_AuspiciousArmor}, + [ITEM_BOOSTER_ENERGY] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_BoosterEnergy, gItemIconPalette_BoosterEnergy}, + [ITEM_BIG_BAMBOO_SHOOT] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_BigBambooShoot, gItemIconPalette_BigBambooShoot}, + [ITEM_GIMMIGHOUL_COIN] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_GimmighoulCoin, gItemIconPalette_GimmighoulCoin}, + [ITEM_LEADERS_CREST] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_LeadersCrest, gItemIconPalette_LeadersCrest}, + [ITEM_MALICIOUS_ARMOR] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_MaliciousArmor, gItemIconPalette_MaliciousArmor}, + [ITEM_MIRROR_HERB] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_MirrorHerb, gItemIconPalette_MirrorHerb}, + [ITEM_SCROLL_OF_DARKNESS] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_ScrollOfDarkness, gItemIconPalette_ScrollOfDarkness}, + [ITEM_SCROLL_OF_WATERS] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_ScrollOfWaters, gItemIconPalette_ScrollOfWaters}, + [ITEM_TERA_ORB] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_TeraOrb, gItemIconPalette_TeraOrb}, + [ITEM_TINY_BAMBOO_SHOOT] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_TinyBambooShoot, gItemIconPalette_TinyBambooShoot}, + [ITEM_BUG_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_BugTeraShard, gItemIconPalette_BugTeraShard}, + [ITEM_DARK_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_DarkTeraShard, gItemIconPalette_DarkTeraShard}, + [ITEM_DRAGON_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_DragonTeraShard, gItemIconPalette_DragonTeraShard}, + [ITEM_ELECTRIC_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_ElectricTeraShard, gItemIconPalette_ElectricTeraShard}, + [ITEM_FAIRY_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_FairyTeraShard, gItemIconPalette_FairyTeraShard}, + [ITEM_FIGHTING_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_FightingTeraShard, gItemIconPalette_FightingTeraShard}, + [ITEM_FIRE_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_FireTeraShard, gItemIconPalette_FireTeraShard}, + [ITEM_FLYING_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_FlyingTeraShard, gItemIconPalette_FlyingTeraShard}, + [ITEM_GHOST_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_GhostTeraShard, gItemIconPalette_GhostTeraShard}, + [ITEM_GRASS_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_GrassTeraShard, gItemIconPalette_GrassTeraShard}, + [ITEM_GROUND_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_GroundTeraShard, gItemIconPalette_GroundTeraShard}, + [ITEM_ICE_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_IceTeraShard, gItemIconPalette_IceTeraShard}, + [ITEM_NORMAL_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_NormalTeraShard, gItemIconPalette_NormalTeraShard}, + [ITEM_POISON_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_PoisonTeraShard, gItemIconPalette_PoisonTeraShard}, + [ITEM_PSYCHIC_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_PsychicTeraShard, gItemIconPalette_PsychicTeraShard}, + [ITEM_ROCK_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_RockTeraShard, gItemIconPalette_RockTeraShard}, + [ITEM_STEEL_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_SteelTeraShard, gItemIconPalette_SteelTeraShard}, + [ITEM_WATER_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_WaterTeraShard, gItemIconPalette_WaterTeraShard}, // Return to field arrow [ITEMS_COUNT] = {gItemIcon_ReturnToFieldArrow, gItemIconPalette_ReturnToFieldArrow}, }; diff --git a/src/data/items.h b/src/data/items.h index 63446913ec83..a4e311338bb5 100644 --- a/src/data/items.h +++ b/src/data/items.h @@ -9907,7 +9907,6 @@ const struct Item gItems[] = [ITEM_LOADED_DICE] = { - //YellwApricorn .name = _("Loaded Dice"), .itemId = ITEM_LOADED_DICE, .price = 20000, @@ -9918,4 +9917,334 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_CannotUse, .flingPower = 30, }, + + [ITEM_AUSPICIOUS_ARMOR] = + { + .name = _("AuspciousArmr"), + .itemId = ITEM_AUSPICIOUS_ARMOR, + .price = 3000, + .description = sAuspiciousArmorDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone, + .flingPower = 30, + }, + + [ITEM_BOOSTER_ENERGY] = + { + .name = _("BoosterEnergy"), + .itemId = ITEM_BOOSTER_ENERGY, + .price = 0, + .holdEffect = HOLD_EFFECT_BOOSTER_ENERGY, + .description = sBoosterEnergyDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_BIG_BAMBOO_SHOOT] = + { + .name = _("BigBmbooShoot"), + .itemId = ITEM_BIG_BAMBOO_SHOOT, + .price = 3000, + .description = sBigBambooShootDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_GIMMIGHOUL_COIN] = + { + .name = _("GimighoulCoin"), + .itemId = ITEM_GIMMIGHOUL_COIN, + .price = 400, + .description = sGimmighoulCoinDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_LEADERS_CREST] = + { + .name = _("Leader'sCrest"), + .itemId = ITEM_LEADERS_CREST, + .price = 3000, + .description = sLeadersCrestDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_MALICIOUS_ARMOR] = + { + .name = _("MaliciousArmr"), + .itemId = ITEM_MALICIOUS_ARMOR, + .price = 3000, + .description = sMaliciousArmorDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone, + .flingPower = 30, + }, + + [ITEM_MIRROR_HERB] = + { + .name = _("Mirror Herb"), + .itemId = ITEM_MIRROR_HERB, + .price = 30000, + .holdEffect = HOLD_EFFECT_MIRROR_HERB, + .description = sMirrorHerbDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_SCROLL_OF_DARKNESS] = + { + .name = _("ScrllOfDrknss"), + .itemId = ITEM_SCROLL_OF_DARKNESS, + .price = 0, + .description = sScrollOfDarknessDesc, + .importance = 1, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone, + }, + + [ITEM_SCROLL_OF_WATERS] = + { + .name = _("ScrollOfWatrs"), + .itemId = ITEM_SCROLL_OF_WATERS, + .price = 0, + .description = sScrollOfWatersDesc, + .importance = 1, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone, + }, + + [ITEM_TERA_ORB] = + { + .name = _("Tera Orb"), + .itemId = ITEM_TERA_ORB, + .price = 0, + .description = sTeraOrbDesc, + .importance = 1, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_TINY_BAMBOO_SHOOT] = + { + .name = _("TinyBmbooShot"), + .itemId = ITEM_TINY_BAMBOO_SHOOT, + .price = 750, + .description = sTinyBambooShootDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_BUG_TERA_SHARD] = + { + .name = _("Bug TeraShard"), + .itemId = ITEM_BUG_TERA_SHARD, + .price = 0, + .description = sTeraShardDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_DARK_TERA_SHARD] = + { + .name = _("DarkTeraShard"), + .itemId = ITEM_DARK_TERA_SHARD, + .price = 0, + .description = sTeraShardDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_DRAGON_TERA_SHARD] = + { + .name = _("DragnTeraShrd"), + .itemId = ITEM_DRAGON_TERA_SHARD, + .price = 0, + .description = sTeraShardDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_ELECTRIC_TERA_SHARD] = + { + .name = _("EltrcTeraShrd"), + .itemId = ITEM_ELECTRIC_TERA_SHARD, + .price = 0, + .description = sTeraShardDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_FAIRY_TERA_SHARD] = + { + .name = _("FairyTeraShrd"), + .itemId = ITEM_FAIRY_TERA_SHARD, + .price = 0, + .description = sTeraShardDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_FIGHTING_TERA_SHARD] = + { + .name = _("FghtngTerShrd"), + .itemId = ITEM_FIGHTING_TERA_SHARD, + .price = 0, + .description = sTeraShardDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_FIRE_TERA_SHARD] = + { + .name = _("FireTeraShard"), + .itemId = ITEM_FIRE_TERA_SHARD, + .price = 0, + .description = sTeraShardDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_FLYING_TERA_SHARD] = + { + .name = _("FlyngTeraShrd"), + .itemId = ITEM_FLYING_TERA_SHARD, + .price = 0, + .description = sTeraShardDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_GHOST_TERA_SHARD] = + { + .name = _("GhostTeraShrd"), + .itemId = ITEM_GHOST_TERA_SHARD, + .price = 0, + .description = sTeraShardDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_GRASS_TERA_SHARD] = + { + .name = _("GrassTeraShrd"), + .itemId = ITEM_GRASS_TERA_SHARD, + .price = 0, + .description = sTeraShardDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_GROUND_TERA_SHARD] = + { + .name = _("GrondTeraShrd"), + .itemId = ITEM_GROUND_TERA_SHARD, + .price = 0, + .description = sTeraShardDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_ICE_TERA_SHARD] = + { + .name = _("Ice TeraShard"), + .itemId = ITEM_ICE_TERA_SHARD, + .price = 0, + .description = sTeraShardDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_NORMAL_TERA_SHARD] = + { + .name = _("NormlTeraShrd"), + .itemId = ITEM_NORMAL_TERA_SHARD, + .price = 0, + .description = sTeraShardDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_POISON_TERA_SHARD] = + { + .name = _("PoisnTeraShrd"), + .itemId = ITEM_POISON_TERA_SHARD, + .price = 0, + .description = sTeraShardDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_PSYCHIC_TERA_SHARD] = + { + .name = _("PschcTeraShrd"), + .itemId = ITEM_PSYCHIC_TERA_SHARD, + .price = 0, + .description = sTeraShardDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_ROCK_TERA_SHARD] = + { + .name = _("RockTeraShard"), + .itemId = ITEM_ROCK_TERA_SHARD, + .price = 0, + .description = sTeraShardDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_STEEL_TERA_SHARD] = + { + .name = _("SteelTeraShrd"), + .itemId = ITEM_STEEL_TERA_SHARD, + .price = 0, + .description = sTeraShardDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_WATER_TERA_SHARD] = + { + .name = _("WaterTeraShrd"), + .itemId = ITEM_WATER_TERA_SHARD, + .price = 0, + .description = sTeraShardDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, }; diff --git a/src/data/text/item_descriptions.h b/src/data/text/item_descriptions.h index e815d8ae1fc4..cee413aa5141 100644 --- a/src/data/text/item_descriptions.h +++ b/src/data/text/item_descriptions.h @@ -3817,3 +3817,63 @@ static const u8 sLoadedDiceDesc[] = _( "Rolls high numbers.\n" "Multihit strikes\n" "hit more times."); + +static const u8 sAuspiciousArmorDesc[] = _( + "Armor inhabited by\n" + "auspicious wishes.\n" + "Causes evolution."); + +static const u8 sBoosterEnergyDesc[] = _( + "Encapsuled energy\n" + "ups Pokémon with\n" + "certain Abilities."); + +static const u8 sBigBambooShootDesc[] = _( + "A large and rare\n" + "bamboo shoot. Best\n" + "sold to gourmands."); + +static const u8 sGimmighoulCoinDesc[] = _( + "Gimmighoul hoard\n" + "and treasure these\n" + "curious coins."); + +static const u8 sLeadersCrestDesc[] = _( + "A shard of an old\n" + "blade of some sort.\n" + "Held by Bisharp."); + +static const u8 sMaliciousArmorDesc[] = _( + "Armor inhabited by\n" + "malicious will.\n" + "Causes evolution."); + +static const u8 sMirrorHerbDesc[] = _( + "Mirrors an enemy's\n" + "stat increases\n" + "but only once."); + +static const u8 sScrollOfDarknessDesc[] = _( + "A peculiar scroll\n" + "with secrets of\n" + "the dark path."); + +static const u8 sScrollOfWatersDesc[] = _( + "A peculiar scroll\n" + "with secrets of\n" + "the water path."); + +static const u8 sTeraOrbDesc[] = _( + "Energy charges can\n" + "be used to cause\n" + "Terastallization."); + +static const u8 sTinyBambooShootDesc[] = _( + "A small and rare\n" + "bamboo shoot. Best\n" + "sold to gourmands."); + +static const u8 sTeraShardDesc[] = _( + "These shards may\n" + "form when a Tera\n" + "Pokémon faints."); From d480fc90f2edd085da8e1ba7fd983fa8c57d2b0c Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Sun, 19 Mar 2023 21:21:43 +0100 Subject: [PATCH 181/428] Fix Scrolls type --- src/data/items.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/data/items.h b/src/data/items.h index a4e311338bb5..982375f3eef4 100644 --- a/src/data/items.h +++ b/src/data/items.h @@ -10010,7 +10010,7 @@ const struct Item gItems[] = .description = sScrollOfDarknessDesc, .importance = 1, .pocket = POCKET_KEY_ITEMS, - .type = ITEM_USE_BAG_MENU, + .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone, }, @@ -10022,7 +10022,7 @@ const struct Item gItems[] = .description = sScrollOfWatersDesc, .importance = 1, .pocket = POCKET_KEY_ITEMS, - .type = ITEM_USE_BAG_MENU, + .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone, }, From 47b4e6095d53bca527fc740119564f8eabb8cded Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sun, 19 Mar 2023 21:59:51 -0300 Subject: [PATCH 182/428] Undo Timburr and Stunfisk friendships, as they don't change --- src/data/pokemon/species_info.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/data/pokemon/species_info.h b/src/data/pokemon/species_info.h index 5de73a21ac61..7b60f1b1a602 100644 --- a/src/data/pokemon/species_info.h +++ b/src/data/pokemon/species_info.h @@ -13034,7 +13034,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .evYield_Attack = 1, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, + .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_GUTS, ABILITY_SHEER_FORCE, ABILITY_IRON_FIST}, @@ -14987,7 +14987,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_SOFT_SAND, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, + .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_AMORPHOUS}, .abilities = {ABILITY_STATIC, ABILITY_LIMBER, ABILITY_SAND_VEIL}, From 170ff2f422b80c7a1fcd70777d8d120c029d00e2 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Tue, 21 Mar 2023 10:41:37 +0100 Subject: [PATCH 183/428] Tests for Eject Button (#2843) * eject button tests + 1 intim test Add KNOWN_FAILING Eject Button Tests = 1 Intim Test * Update test/ability_intimidate.c * Update test/ability_intimidate.c * Update test/hold_effect_eject_button.c * Update test/hold_effect_eject_button.c * Update test/hold_effect_eject_button.c * Update test/hold_effect_eject_button.c * Update test/hold_effect_eject_button.c * Update test/hold_effect_eject_button.c * Update test/ability_intimidate.c Eject Button Tests Eject Button Tests * Update test/hold_effect_eject_button.c Co-authored-by: Philipp AUER --------- Co-authored-by: Philipp AUER --- test/ability_intimidate.c | 28 +++++ test/hold_effect_eject_button.c | 189 ++++++++++++++++++++++++++++++++ 2 files changed, 217 insertions(+) create mode 100644 test/hold_effect_eject_button.c diff --git a/test/ability_intimidate.c b/test/ability_intimidate.c index 08d8d606e4d4..347c0bc71259 100644 --- a/test/ability_intimidate.c +++ b/test/ability_intimidate.c @@ -95,3 +95,31 @@ DOUBLE_BATTLE_TEST("Intimidate doesn't activate on an empty field in a double ba MESSAGE("Foe Arbok's Intimidate cuts Abra's attack!"); } } + +SINGLE_BATTLE_TEST("Intimidate and Eject Button force the opponent to Attack") +{ + KNOWN_FAILING; // Issue #2837 + GIVEN { + ASSUME(gItems[ITEM_EJECT_BUTTON].holdEffect == HOLD_EFFECT_EJECT_BUTTON); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_EJECT_BUTTON); }; + OPPONENT(SPECIES_HITMONTOP) { Moves(MOVE_TACKLE); }; + } WHEN { + TURN { + MOVE(player, MOVE_QUICK_ATTACK); + MOVE(opponent, MOVE_TACKLE); + SEND_OUT(opponent, 1); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_ATTACK, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); + MESSAGE("Foe Wobbuffet is switched out with the Eject Button!"); + MESSAGE("2 sent out Hitmontop!"); + ABILITY_POPUP(opponent, ABILITY_INTIMIDATE); + MESSAGE("Foe Hitmontop's Intimidate cuts Wobbuffet's attack!"); + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + MESSAGE("Foe Hitmontop used Tackle!"); + } + } +} diff --git a/test/hold_effect_eject_button.c b/test/hold_effect_eject_button.c new file mode 100644 index 000000000000..0d28d7bf04ca --- /dev/null +++ b/test/hold_effect_eject_button.c @@ -0,0 +1,189 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gItems[ITEM_EJECT_BUTTON].holdEffect == HOLD_EFFECT_EJECT_BUTTON); +} + +SINGLE_BATTLE_TEST("Eject Button is not triggered when there is nothing to switch in") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_EJECT_BUTTON); }; + OPPONENT(SPECIES_WOBBUFFET) { HP(0); }; + } WHEN { + TURN { + MOVE(player, MOVE_QUICK_ATTACK); + MOVE(opponent, MOVE_TACKLE); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_ATTACK, player); + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); + MESSAGE("Foe Wobbuffet is switched out with the Eject Button!"); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + } +} + +SINGLE_BATTLE_TEST("Eject Button is not activated by a Sheer Force boosted move") +{ + GIVEN { + PLAYER(SPECIES_NIDOKING) { Ability(ABILITY_SHEER_FORCE); }; + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_EJECT_BUTTON); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { + MOVE(player, MOVE_FLAMETHROWER); + MOVE(opponent, MOVE_TACKLE); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FLAMETHROWER, player); + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); + MESSAGE("Foe Wobbuffet is switched out with the Eject Button!"); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + } +} + +SINGLE_BATTLE_TEST("Eject Button will not activate under Substitute") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_RAICHU) { Item(ITEM_EJECT_BUTTON); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { + MOVE(opponent, MOVE_SUBSTITUTE); + MOVE(player, MOVE_TACKLE); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SUBSTITUTE, opponent); + MESSAGE("Foe Raichu made a SUBSTITUTE!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + MESSAGE("The SUBSTITUTE took damage for Foe Raichu!"); + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); + MESSAGE("Foe Raichu is switched out with the Eject Button!"); + } + } +} + +SINGLE_BATTLE_TEST("Eject Button is not blocked by trapping abilities or moves") +{ + GIVEN { + PLAYER(SPECIES_DUGTRIO) { Ability(ABILITY_ARENA_TRAP); }; + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_EJECT_BUTTON); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { + MOVE(player, MOVE_TACKLE); + SEND_OUT(opponent, 1); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); + MESSAGE("Foe Wobbuffet is switched out with the Eject Button!"); + MESSAGE("2 sent out Wobbuffet!"); + } +} + +SINGLE_BATTLE_TEST("Eject Button is not triggered after the mon loses Eject Button") +{ + GIVEN { + PLAYER(SPECIES_RAICHU); + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_EJECT_BUTTON); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { + MOVE(player, MOVE_KNOCK_OFF); + MOVE(opponent, MOVE_TACKLE); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_KNOCK_OFF, player); + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); + MESSAGE("Foe Wobbuffet is switched out with the Eject Button!"); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + } +} + +SINGLE_BATTLE_TEST("Eject Button is not triggered after given to player by Picketpocket") +{ + GIVEN { + PLAYER(SPECIES_REGIELEKI) { Item(ITEM_EJECT_BUTTON); }; + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_SNEASEL) { Ability(ABILITY_PICKPOCKET); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { + MOVE(player, MOVE_TACKLE); + MOVE(opponent, MOVE_TACKLE); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + ABILITY_POPUP(opponent, ABILITY_PICKPOCKET); + MESSAGE("Foe Sneasel stole Regieleki's Eject Button!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + } +} + +SINGLE_BATTLE_TEST("Eject Button has no chance to activate after Dragon Tail") +{ + GIVEN { + PLAYER(SPECIES_KOMMO_O); + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_EJECT_BUTTON); }; + OPPONENT(SPECIES_CHANSEY); + } WHEN { + TURN { + MOVE(player, MOVE_DRAGON_TAIL); + MOVE(opponent, MOVE_TACKLE); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_TAIL, player); + MESSAGE("Foe Chansey was dragged out!"); + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); + MESSAGE("Foe Chansey is switched out with the Eject Button!"); + } + } +} + +SINGLE_BATTLE_TEST("Eject Button prevents Volt Switch / U-Turn from activating") +{ + GIVEN { + PLAYER(SPECIES_MANECTRIC); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_EJECT_BUTTON); }; + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { + MOVE(player, MOVE_VOLT_SWITCH); + SEND_OUT(opponent, 1); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_VOLT_SWITCH, player); + MESSAGE("Foe Wobbuffet is switched out with the Eject Button!"); + } +} + +SINGLE_BATTLE_TEST("Eject Button is activated before Emergency Exit") +{ + GIVEN { + PLAYER(SPECIES_LATIAS); + OPPONENT(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); Item(ITEM_EJECT_BUTTON); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { + MOVE(player, MOVE_THUNDERBOLT); + SEND_OUT(opponent, 1); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDERBOLT, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); + MESSAGE("Foe Golisopod is switched out with the Eject Button!"); + } +} From 3bd680cab9b5992fa7aa2337fb0c50e8f66df15f Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Tue, 21 Mar 2023 13:36:45 -0400 Subject: [PATCH 184/428] fix GetBattleAnimMoveTargets for non-player gBattleAnimAttacker --- src/battle_anim.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/battle_anim.c b/src/battle_anim.c index fd81152e1c8e..984f7b0a9dc6 100644 --- a/src/battle_anim.c +++ b/src/battle_anim.c @@ -440,22 +440,22 @@ static u8 GetBattleAnimMoveTargets(u8 battlerArgIndex, u8 *targets) case MOVE_TARGET_BOTH: targets[0] = gBattleAnimArgs[battlerArgIndex]; numTargets = 1; - if (IsBattlerAlive(targets[0] ^ BIT_FLANK)) { - targets[1] = targets[0] ^ BIT_FLANK; - numTargets++; + if (IsBattlerAlive(BATTLE_PARTNER(targets[0])) { + targets[1] = BATTLE_PARTNER(targets[0]); + numTargets = 2; } break; case MOVE_TARGET_FOES_AND_ALLY: targets[0] = gBattleAnimArgs[battlerArgIndex]; numTargets = 1; - if (IsBattlerAlive(targets[0] ^ BIT_FLANK)) { - targets[1] = targets[0] ^ BIT_FLANK; + if (IsBattlerAlive(BATTLE_PARTNER(targets[0]))) { + targets[1] = BATTLE_PARTNER(targets[0]); numTargets++; } - - if (IsBattlerAlive(gBattleAnimAttacker ^ BIT_FLANK)) { - targets[2] = gBattleAnimAttacker ^ BIT_FLANK; + + if (IsBattlerAlive(BATTLE_PARTNER(BATTLE_OPPOSITE(targets[0])))) { + targets[2] = BATTLE_PARTNER(BATTLE_OPPOSITE(targets[0])); numTargets++; } break; From 1adc6b761e19a716d42ccf76d68a8996ae89a3a5 Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Tue, 21 Mar 2023 13:38:24 -0400 Subject: [PATCH 185/428] remove random space --- src/battle_anim.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_anim.c b/src/battle_anim.c index 984f7b0a9dc6..0c688f20bb04 100644 --- a/src/battle_anim.c +++ b/src/battle_anim.c @@ -453,7 +453,7 @@ static u8 GetBattleAnimMoveTargets(u8 battlerArgIndex, u8 *targets) targets[1] = BATTLE_PARTNER(targets[0]); numTargets++; } - + if (IsBattlerAlive(BATTLE_PARTNER(BATTLE_OPPOSITE(targets[0])))) { targets[2] = BATTLE_PARTNER(BATTLE_OPPOSITE(targets[0])); numTargets++; From c61797bc38e5cdb60393b19b987b96e4075d3bb2 Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Tue, 21 Mar 2023 14:31:09 -0400 Subject: [PATCH 186/428] styling and syntax fix --- src/battle_anim.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/battle_anim.c b/src/battle_anim.c index 0c688f20bb04..4191fe7aa117 100644 --- a/src/battle_anim.c +++ b/src/battle_anim.c @@ -440,7 +440,8 @@ static u8 GetBattleAnimMoveTargets(u8 battlerArgIndex, u8 *targets) case MOVE_TARGET_BOTH: targets[0] = gBattleAnimArgs[battlerArgIndex]; numTargets = 1; - if (IsBattlerAlive(BATTLE_PARTNER(targets[0])) { + if (IsBattlerAlive(BATTLE_PARTNER(targets[0]))) + { targets[1] = BATTLE_PARTNER(targets[0]); numTargets = 2; } @@ -448,13 +449,14 @@ static u8 GetBattleAnimMoveTargets(u8 battlerArgIndex, u8 *targets) case MOVE_TARGET_FOES_AND_ALLY: targets[0] = gBattleAnimArgs[battlerArgIndex]; numTargets = 1; - - if (IsBattlerAlive(BATTLE_PARTNER(targets[0]))) { + if (IsBattlerAlive(BATTLE_PARTNER(targets[0]))) + { targets[1] = BATTLE_PARTNER(targets[0]); numTargets++; } - if (IsBattlerAlive(BATTLE_PARTNER(BATTLE_OPPOSITE(targets[0])))) { + if (IsBattlerAlive(BATTLE_PARTNER(BATTLE_OPPOSITE(targets[0])))) + { targets[2] = BATTLE_PARTNER(BATTLE_OPPOSITE(targets[0])); numTargets++; } From 9ec31c61bfdfe01803a83f152b962ae324b8df69 Mon Sep 17 00:00:00 2001 From: May8th1995 <69943962+May8th1995@users.noreply.github.com> Date: Tue, 21 Mar 2023 19:12:46 +0000 Subject: [PATCH 187/428] Fixes weirdly set value for eject buttons etc (#2846) * Fixes weirdly set value for eject buttons etc * Remove known fialing from fixed test --------- Co-authored-by: tennis --- data/battle_scripts_1.s | 1 + test/ability_intimidate.c | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 52c13529437d..a32e9a4ec8a8 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -8654,6 +8654,7 @@ BattleScript_IntimidateLoopIncrement: addbyte gBattlerTarget, 1 jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_IntimidateLoop BattleScript_IntimidateEnd: + copybyte sBATTLER, gBattlerAttacker destroyabilitypopup pause B_WAIT_TIME_MED end3 diff --git a/test/ability_intimidate.c b/test/ability_intimidate.c index 347c0bc71259..0318435e0b7b 100644 --- a/test/ability_intimidate.c +++ b/test/ability_intimidate.c @@ -98,7 +98,6 @@ DOUBLE_BATTLE_TEST("Intimidate doesn't activate on an empty field in a double ba SINGLE_BATTLE_TEST("Intimidate and Eject Button force the opponent to Attack") { - KNOWN_FAILING; // Issue #2837 GIVEN { ASSUME(gItems[ITEM_EJECT_BUTTON].holdEffect == HOLD_EFFECT_EJECT_BUTTON); PLAYER(SPECIES_WOBBUFFET); From 74ec59cace57d0036512688aaf39bac2647fc8a4 Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Tue, 21 Mar 2023 18:11:49 -0400 Subject: [PATCH 188/428] add sAnimHideHpBoxes to fix healthbox reappearing from e.g. B_ANIM_SWITCH_OUT_OPPONENT_MON --- src/battle_anim.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/battle_anim.c b/src/battle_anim.c index fd81152e1c8e..de9a97ce2823 100644 --- a/src/battle_anim.c +++ b/src/battle_anim.c @@ -119,6 +119,7 @@ EWRAM_DATA u8 gBattleAnimAttacker = 0; EWRAM_DATA u8 gBattleAnimTarget = 0; EWRAM_DATA u16 gAnimBattlerSpecies[MAX_BATTLERS_COUNT] = {0}; EWRAM_DATA u8 gAnimCustomPanning = 0; +EWRAM_DATA static bool8 sAnimHideHpBoxes = FALSE; #include "data/battle_anim.h" @@ -232,7 +233,6 @@ void LaunchBattleAnimation(u32 animType, u32 animId) { s32 i; const u8 *const *animsTable; - bool32 hideHpBoxes; if (gTestRunnerEnabled) { @@ -261,7 +261,7 @@ void LaunchBattleAnimation(u32 animType, u32 animId) break; } - hideHpBoxes = !(animType == ANIM_TYPE_MOVE && animId == MOVE_TRANSFORM); + sAnimHideHpBoxes = !(animType == ANIM_TYPE_MOVE && animId == MOVE_TRANSFORM); if (animType != ANIM_TYPE_MOVE) { switch (animId) @@ -276,10 +276,10 @@ void LaunchBattleAnimation(u32 animType, u32 animId) case B_ANIM_MEGA_EVOLUTION: case B_ANIM_PRIMAL_REVERSION: case B_ANIM_GULP_MISSILE: - hideHpBoxes = TRUE; + sAnimHideHpBoxes = TRUE; break; default: - hideHpBoxes = FALSE; + sAnimHideHpBoxes = FALSE; break; } } @@ -287,7 +287,7 @@ void LaunchBattleAnimation(u32 animType, u32 animId) if (!IsContest()) { InitPrioritiesForVisibleBattlers(); - UpdateOamPriorityInAllHealthboxes(0, hideHpBoxes); + UpdateOamPriorityInAllHealthboxes(0, sAnimHideHpBoxes); for (i = 0; i < MAX_BATTLERS_COUNT; i++) { if (GetBattlerSide(i) != B_SIDE_PLAYER) @@ -762,7 +762,8 @@ static void Cmd_end(void) if (!IsContest()) { InitPrioritiesForVisibleBattlers(); - UpdateOamPriorityInAllHealthboxes(1, TRUE); + UpdateOamPriorityInAllHealthboxes(1, sAnimHideHpBoxes); + sAnimHideHpBoxes = FALSE; } gAnimScriptActive = FALSE; } From 168ed1cc55468863107edda6af375284a7cd133a Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Wed, 22 Mar 2023 07:33:13 -0300 Subject: [PATCH 189/428] Xerneas/Zacian/Zamazenta form change tests --- test/form_change.c | 81 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 test/form_change.c diff --git a/test/form_change.c b/test/form_change.c new file mode 100644 index 000000000000..8d761bb12d33 --- /dev/null +++ b/test/form_change.c @@ -0,0 +1,81 @@ +#include "global.h" +#include "test_battle.h" + +SINGLE_BATTLE_TEST("Xerneas changes into Active Form upon battle start") +{ + GIVEN { + ASSUME(P_GEN_6_POKEMON == TRUE); + PLAYER(SPECIES_XERNEAS); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE); } + } THEN { + EXPECT_EQ(player->species, SPECIES_XERNEAS_ACTIVE); + } +} + +SINGLE_BATTLE_TEST("Zacian changes into its Crowned Form when holding the Rusted Sword upon battle start") +{ + u16 item; + PARAMETRIZE { item = ITEM_NONE; } + PARAMETRIZE { item = ITEM_RUSTED_SWORD; } + GIVEN { + ASSUME(P_GEN_8_POKEMON == TRUE); + PLAYER(SPECIES_ZACIAN) { Item(item); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE); } + } THEN { + if (item == ITEM_NONE) + EXPECT_EQ(player->species, SPECIES_ZACIAN); + else + EXPECT_EQ(player->species, SPECIES_ZACIAN_CROWNED_SWORD); + } +} + +SINGLE_BATTLE_TEST("Zacian's Iron Head becomes Behemoth Blade upon form change") +{ + GIVEN { + ASSUME(P_GEN_8_POKEMON == TRUE); + PLAYER(SPECIES_ZACIAN) { Item(ITEM_RUSTED_SWORD); Moves(MOVE_IRON_HEAD, MOVE_CELEBRATE); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE); } + } THEN { + ASSUME(player->species == SPECIES_ZACIAN_CROWNED_SWORD); // Assumes form change worked. + EXPECT_EQ(player->moves[0], MOVE_BEHEMOTH_BLADE); + } +} + +SINGLE_BATTLE_TEST("Zamazenta changes into its Crowned Form when holding the Rusted Shield upon battle start") +{ + u16 item; + PARAMETRIZE { item = ITEM_NONE; } + PARAMETRIZE { item = ITEM_RUSTED_SHIELD; } + GIVEN { + ASSUME(P_GEN_8_POKEMON == TRUE); + PLAYER(SPECIES_ZAMAZENTA) { Item(item); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE); } + } THEN { + if (item == ITEM_NONE) + EXPECT_EQ(player->species, SPECIES_ZAMAZENTA); + else + EXPECT_EQ(player->species, SPECIES_ZAMAZENTA_CROWNED_SHIELD); + } +} + +SINGLE_BATTLE_TEST("Zamazenta's Iron Head becomes Behemoth Bash upon form change") +{ + GIVEN { + ASSUME(P_GEN_8_POKEMON == TRUE); + PLAYER(SPECIES_ZAMAZENTA) { Item(ITEM_RUSTED_SHIELD); Moves(MOVE_IRON_HEAD, MOVE_CELEBRATE); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE); } + } THEN { + ASSUME(player->species == SPECIES_ZAMAZENTA_CROWNED_SHIELD); // Assumes form change worked. + EXPECT_EQ(player->moves[0], MOVE_BEHEMOTH_BASH); + } +} From 358180946d60e5acc6fd5a95bb95f39232b93382 Mon Sep 17 00:00:00 2001 From: tennis Date: Wed, 22 Mar 2023 11:42:32 +0000 Subject: [PATCH 190/428] Fix Intimidate targetting dead sides and false postpones --- data/battle_scripts_1.s | 1 + src/battle_script_commands.c | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index a32e9a4ec8a8..2754b5d7aebe 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -8627,6 +8627,7 @@ BattleScript_IntimidateActivates:: BattleScript_IntimidateLoop: jumpifbyteequal gBattlerTarget, gBattlerAttacker, BattleScript_IntimidateLoopIncrement jumpiftargetally BattleScript_IntimidateLoopIncrement + jumpifabsent BS_TARGET, BattleScript_IntimidateLoopIncrement jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_IntimidateLoopIncrement jumpifholdeffect BS_TARGET, HOLD_EFFECT_CLEAR_AMULET, BattleScript_IntimidatePrevented_Item jumpifability BS_TARGET, ABILITY_CLEAR_BODY, BattleScript_IntimidatePrevented diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 126ca06fd11e..7949dbae83f9 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -6973,9 +6973,9 @@ bool32 ShouldPostponeSwitchInAbilities(u32 battlerId) // Checks for double battle, so abilities like Intimidate wait until all battlers are switched-in before activating. if (IsDoubleBattle()) { - if (aliveOpposing1 && !aliveOpposing2 && !HasNoMonsToSwitch(BATTLE_OPPOSITE(battlerId), PARTY_SIZE, PARTY_SIZE)) + if (aliveOpposing1 && !aliveOpposing2 && !HasNoMonsToSwitch(BATTLE_PARTNER(BATTLE_OPPOSITE(battlerId)), PARTY_SIZE, PARTY_SIZE)) return TRUE; - if (!aliveOpposing1 && aliveOpposing2 && !HasNoMonsToSwitch(BATTLE_PARTNER(BATTLE_OPPOSITE(battlerId)), PARTY_SIZE, PARTY_SIZE)) + if (!aliveOpposing1 && aliveOpposing2 && !HasNoMonsToSwitch(BATTLE_OPPOSITE(battlerId), PARTY_SIZE, PARTY_SIZE)) return TRUE; } From 4541cc3319454410db2dc5f298546117357960c3 Mon Sep 17 00:00:00 2001 From: CallmeEchoo Date: Wed, 22 Mar 2023 22:30:24 +0100 Subject: [PATCH 191/428] add check for Gorilla Tactics knock off shouldnt reset choicedMove when the pokemon has the Gorilla Tactics ability --- src/battle_script_commands.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 126ca06fd11e..0038844ac805 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -5330,7 +5330,8 @@ static bool32 TryKnockOffBattleScript(u32 battlerDef) gLastUsedItem = gBattleMons[battlerDef].item; gBattleMons[battlerDef].item = 0; - gBattleStruct->choicedMove[battlerDef] = 0; + if (gBattleMons[battlerDef].ability != ABILITY_GORILLA_TACTICS) + gBattleStruct->choicedMove[battlerDef] = 0; gWishFutureKnock.knockedOffMons[side] |= gBitTable[gBattlerPartyIndexes[battlerDef]]; CheckSetUnburden(battlerDef); From 299911139a56e36460fb54d0784cf55ca9d947d8 Mon Sep 17 00:00:00 2001 From: tennis Date: Wed, 22 Mar 2023 22:25:20 +0000 Subject: [PATCH 192/428] Add test for intimidate on empty slot --- test/ability_intimidate.c | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/test/ability_intimidate.c b/test/ability_intimidate.c index 0318435e0b7b..a891f9af87e6 100644 --- a/test/ability_intimidate.c +++ b/test/ability_intimidate.c @@ -122,3 +122,40 @@ SINGLE_BATTLE_TEST("Intimidate and Eject Button force the opponent to Attack") } } } + +DOUBLE_BATTLE_TEST("Intimidate activates on an empty slot") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_CROAGUNK); + PLAYER(SPECIES_WYNAUT); + PLAYER(SPECIES_HITMONTOP) { Ability(ABILITY_INTIMIDATE); }; + OPPONENT(SPECIES_RALTS); + OPPONENT(SPECIES_AZURILL); + } WHEN { + TURN { + SWITCH(playerLeft, 2); + MOVE(playerRight, MOVE_GUNK_SHOT, target: opponentLeft); + MOVE(opponentRight, MOVE_SPLASH); + } + TURN { + SWITCH(playerLeft, 3); + MOVE(playerRight, MOVE_SPLASH); + } + + + } SCENE { + MESSAGE("Wobbuffet, that's enough! Come back!"); + MESSAGE("Go! Wynaut!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_GUNK_SHOT, playerRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SPLASH, opponentRight); + MESSAGE("Wynaut, that's enough! Come back!"); + MESSAGE("Go! Hitmontop!"); + ABILITY_POPUP(playerLeft, ABILITY_INTIMIDATE); + NONE_OF { + MESSAGE("Hitmontop's Intimidate cuts Foe Ralts's attack!"); + } + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); + MESSAGE("Hitmontop's Intimidate cuts Foe Azurill's attack!"); + } +} From 03f6fe635f856f6f87798bbe5651daf23e919e40 Mon Sep 17 00:00:00 2001 From: AgustinGDLV <103095241+AgustinGDLV@users.noreply.github.com> Date: Thu, 23 Mar 2023 01:50:44 -0700 Subject: [PATCH 193/428] changed CanBeConfused to actually check its argument (#2855) --- src/battle_util.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/battle_util.c b/src/battle_util.c index fcfec90c2ba7..bcdc13080ac8 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -6546,8 +6546,8 @@ bool32 CanBeFrozen(u8 battlerId) bool32 CanBeConfused(u8 battlerId) { - if (GetBattlerAbility(gEffectBattler) == ABILITY_OWN_TEMPO - || gBattleMons[gEffectBattler].status2 & STATUS2_CONFUSION + if (GetBattlerAbility(battlerId) == ABILITY_OWN_TEMPO + || gBattleMons[battlerId].status2 & STATUS2_CONFUSION || IsBattlerTerrainAffected(battlerId, STATUS_FIELD_MISTY_TERRAIN)) return FALSE; return TRUE; From 023cc4d38dc144f13cd76baeded914f3b01fe709 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada D'Ottone Date: Thu, 23 Mar 2023 05:58:26 -0300 Subject: [PATCH 194/428] Fixed erroneous uses of non e-reader Enigma Berries (#2839) --- src/battle_util.c | 6 +++--- src/battle_z_move.c | 2 +- src/pokemon.c | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/battle_util.c b/src/battle_util.c index bcdc13080ac8..3e8f94bf695b 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -8194,7 +8194,7 @@ u32 GetBattlerHoldEffect(u8 battlerId, bool32 checkNegating) return gBattleStruct->debugHoldEffects[battlerId]; else #endif - if (gBattleMons[battlerId].item == ITEM_ENIGMA_BERRY) + if (gBattleMons[battlerId].item == ITEM_ENIGMA_BERRY_E_READER) return gEnigmaBerries[battlerId].holdEffect; else return ItemId_GetHoldEffect(gBattleMons[battlerId].item); @@ -8203,7 +8203,7 @@ u32 GetBattlerHoldEffect(u8 battlerId, bool32 checkNegating) // static u32 GetBattlerItemHoldEffectParam(u8 battlerId, u16 item) { - if (item == ITEM_ENIGMA_BERRY) + if (item == ITEM_ENIGMA_BERRY_E_READER) return gEnigmaBerries[battlerId].holdEffectParam; else return ItemId_GetHoldEffectParam(item); @@ -8211,7 +8211,7 @@ static u32 GetBattlerItemHoldEffectParam(u8 battlerId, u16 item) u32 GetBattlerHoldEffectParam(u8 battlerId) { - if (gBattleMons[battlerId].item == ITEM_ENIGMA_BERRY) + if (gBattleMons[battlerId].item == ITEM_ENIGMA_BERRY_E_READER) return gEnigmaBerries[battlerId].holdEffectParam; else return ItemId_GetHoldEffectParam(gBattleMons[battlerId].item); diff --git a/src/battle_z_move.c b/src/battle_z_move.c index 9c9c5e0fa331..104a44daa595 100644 --- a/src/battle_z_move.c +++ b/src/battle_z_move.c @@ -199,7 +199,7 @@ bool32 IsViableZMove(u8 battlerId, u16 move) holdEffect = gBattleStruct->debugHoldEffects[battlerId]; else #endif - if (item == ITEM_ENIGMA_BERRY) + if (item == ITEM_ENIGMA_BERRY_E_READER) return FALSE; // HoldEffect = gEnigmaBerries[battlerId].holdEffect; else holdEffect = ItemId_GetHoldEffect(item); diff --git a/src/pokemon.c b/src/pokemon.c index 8087b9621c06..4250d3244afe 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -6543,7 +6543,7 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 mode, u16 evolutionItem, s partnerSpecies = GetMonData(tradePartner, MON_DATA_SPECIES, 0); partnerHeldItem = GetMonData(tradePartner, MON_DATA_HELD_ITEM, 0); - if (partnerHeldItem == ITEM_ENIGMA_BERRY) + if (partnerHeldItem == ITEM_ENIGMA_BERRY_E_READER) partnerHoldEffect = gSaveBlock1Ptr->enigmaBerry.holdEffect; else partnerHoldEffect = ItemId_GetHoldEffect(partnerHeldItem); @@ -7213,7 +7213,7 @@ void MonGainEVs(struct Pokemon *mon, u16 defeatedSpecies) u8 bonus; heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, 0); - if (heldItem == ITEM_ENIGMA_BERRY) + if (heldItem == ITEM_ENIGMA_BERRY_E_READER) { if (gMain.inBattle) holdEffect = gEnigmaBerries[0].holdEffect; From 2658fe32c20d338cf5073a407353d028a449fdd5 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada D'Ottone Date: Thu, 23 Mar 2023 06:02:32 -0300 Subject: [PATCH 195/428] Removed ITEM_HAS_EFFECT (#2840) --- include/constants/items.h | 3 - include/pokemon.h | 3 +- src/battle_ai_switch_items.c | 4 +- src/data/pokemon/item_effects.h | 208 ++++++++++++++++---------------- src/party_menu.c | 17 +-- src/pokemon.c | 12 +- 6 files changed, 123 insertions(+), 124 deletions(-) diff --git a/include/constants/items.h b/include/constants/items.h index 1cb2803f37e0..a5a3c95e2e96 100644 --- a/include/constants/items.h +++ b/include/constants/items.h @@ -1001,7 +1001,4 @@ #define ITEM_B_USE_MEDICINE 1 #define ITEM_B_USE_OTHER 2 -// Check if the item is one that can be used on a Pokemon. -#define ITEM_HAS_EFFECT(item) ((item) >= ITEM_POTION && (item) <= LAST_BERRY_INDEX) - #endif // GUARD_CONSTANTS_ITEMS_H diff --git a/include/pokemon.h b/include/pokemon.h index cbfd194c6710..581677cae716 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -2,6 +2,7 @@ #define GUARD_POKEMON_H #include "sprite.h" +#include "constants/items.h" #include "constants/region_map_sections.h" #include "constants/map_groups.h" @@ -401,7 +402,7 @@ extern const struct BattleMove gBattleMoves[]; extern const u8 gFacilityClassToPicIndex[]; extern const u8 gFacilityClassToTrainerClass[]; extern const struct SpeciesInfo gSpeciesInfo[]; -extern const u8 *const gItemEffectTable[]; +extern const u8 *const gItemEffectTable[ITEMS_COUNT]; extern const u32 gExperienceTables[][MAX_LEVEL + 1]; extern const struct LevelUpMove *const gLevelUpLearnsets[]; extern const u16 *const gTeachableLearnsets[]; diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index e8512affa206..d1272d67d79b 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -1085,13 +1085,13 @@ static bool8 ShouldUseItem(void) item = gBattleResources->battleHistory->trainerItems[i]; if (item == ITEM_NONE) continue; - if (gItemEffectTable[item - ITEM_POTION] == NULL) + if (gItemEffectTable[item] == NULL) continue; if (item == ITEM_ENIGMA_BERRY_E_READER) itemEffects = gSaveBlock1Ptr->enigmaBerry.itemEffect; else - itemEffects = gItemEffectTable[item - ITEM_POTION]; + itemEffects = gItemEffectTable[item]; *(gBattleStruct->AI_itemType + gActiveBattler / 2) = GetAI_ItemType(item, itemEffects); diff --git a/src/data/pokemon/item_effects.h b/src/data/pokemon/item_effects.h index 2651b4daf77a..8323801d5487 100644 --- a/src/data/pokemon/item_effects.h +++ b/src/data/pokemon/item_effects.h @@ -447,128 +447,128 @@ const u8 gItemEffect_TamatoBerry[10] = { EV_BERRY_FRIENDSHIP_CHANGE, }; -const u8 *const gItemEffectTable[] = +const u8 *const gItemEffectTable[ITEMS_COUNT] = { // Medicine - [ITEM_POTION - ITEM_POTION] = gItemEffect_Potion, - [ITEM_SUPER_POTION - ITEM_POTION] = gItemEffect_SuperPotion, - [ITEM_HYPER_POTION - ITEM_POTION] = gItemEffect_HyperPotion, - [ITEM_MAX_POTION - ITEM_POTION] = gItemEffect_MaxPotion, - [ITEM_FULL_RESTORE - ITEM_POTION] = gItemEffect_FullRestore, - [ITEM_REVIVE - ITEM_POTION] = gItemEffect_Revive, - [ITEM_MAX_REVIVE - ITEM_POTION] = gItemEffect_MaxRevive, - [ITEM_FRESH_WATER - ITEM_POTION] = gItemEffect_FreshWater, - [ITEM_SODA_POP - ITEM_POTION] = gItemEffect_SodaPop, - [ITEM_LEMONADE - ITEM_POTION] = gItemEffect_Lemonade, - [ITEM_MOOMOO_MILK - ITEM_POTION] = gItemEffect_MoomooMilk, - [ITEM_ENERGY_POWDER - ITEM_POTION] = gItemEffect_EnergyPowder, - [ITEM_ENERGY_ROOT - ITEM_POTION] = gItemEffect_EnergyRoot, - [ITEM_HEAL_POWDER - ITEM_POTION] = gItemEffect_HealPowder, - [ITEM_REVIVAL_HERB - ITEM_POTION] = gItemEffect_RevivalHerb, - [ITEM_ANTIDOTE - ITEM_POTION] = gItemEffect_Antidote, - [ITEM_PARALYZE_HEAL - ITEM_POTION] = gItemEffect_ParalyzeHeal, - [ITEM_BURN_HEAL - ITEM_POTION] = gItemEffect_BurnHeal, - [ITEM_ICE_HEAL - ITEM_POTION] = gItemEffect_IceHeal, - [ITEM_AWAKENING - ITEM_POTION] = gItemEffect_Awakening, - [ITEM_FULL_HEAL - ITEM_POTION] = gItemEffect_FullHeal, - [ITEM_ETHER - ITEM_POTION] = gItemEffect_Ether, - [ITEM_MAX_ETHER - ITEM_POTION] = gItemEffect_MaxEther, - [ITEM_ELIXIR - ITEM_POTION] = gItemEffect_Elixir, - [ITEM_MAX_ELIXIR - ITEM_POTION] = gItemEffect_MaxElixir, - [ITEM_BERRY_JUICE - ITEM_POTION] = gItemEffect_BerryJuice, - [ITEM_SACRED_ASH - ITEM_POTION] = gItemEffect_SacredAsh, - [ITEM_SWEET_HEART - ITEM_POTION] = gItemEffect_Potion, - [ITEM_MAX_HONEY - ITEM_POTION] = gItemEffect_MaxRevive, + [ITEM_POTION] = gItemEffect_Potion, + [ITEM_SUPER_POTION] = gItemEffect_SuperPotion, + [ITEM_HYPER_POTION] = gItemEffect_HyperPotion, + [ITEM_MAX_POTION] = gItemEffect_MaxPotion, + [ITEM_FULL_RESTORE] = gItemEffect_FullRestore, + [ITEM_REVIVE] = gItemEffect_Revive, + [ITEM_MAX_REVIVE] = gItemEffect_MaxRevive, + [ITEM_FRESH_WATER] = gItemEffect_FreshWater, + [ITEM_SODA_POP] = gItemEffect_SodaPop, + [ITEM_LEMONADE] = gItemEffect_Lemonade, + [ITEM_MOOMOO_MILK] = gItemEffect_MoomooMilk, + [ITEM_ENERGY_POWDER] = gItemEffect_EnergyPowder, + [ITEM_ENERGY_ROOT] = gItemEffect_EnergyRoot, + [ITEM_HEAL_POWDER] = gItemEffect_HealPowder, + [ITEM_REVIVAL_HERB] = gItemEffect_RevivalHerb, + [ITEM_ANTIDOTE] = gItemEffect_Antidote, + [ITEM_PARALYZE_HEAL] = gItemEffect_ParalyzeHeal, + [ITEM_BURN_HEAL] = gItemEffect_BurnHeal, + [ITEM_ICE_HEAL] = gItemEffect_IceHeal, + [ITEM_AWAKENING] = gItemEffect_Awakening, + [ITEM_FULL_HEAL] = gItemEffect_FullHeal, + [ITEM_ETHER] = gItemEffect_Ether, + [ITEM_MAX_ETHER] = gItemEffect_MaxEther, + [ITEM_ELIXIR] = gItemEffect_Elixir, + [ITEM_MAX_ELIXIR] = gItemEffect_MaxElixir, + [ITEM_BERRY_JUICE] = gItemEffect_BerryJuice, + [ITEM_SACRED_ASH] = gItemEffect_SacredAsh, + [ITEM_SWEET_HEART] = gItemEffect_Potion, + [ITEM_MAX_HONEY] = gItemEffect_MaxRevive, // Regional Specialties - [ITEM_PEWTER_CRUNCHIES - ITEM_POTION] = gItemEffect_FullHeal, - [ITEM_RAGE_CANDY_BAR - ITEM_POTION] = gItemEffect_FullHeal, - [ITEM_LAVA_COOKIE - ITEM_POTION] = gItemEffect_FullHeal, - [ITEM_OLD_GATEAU - ITEM_POTION] = gItemEffect_FullHeal, - [ITEM_CASTELIACONE - ITEM_POTION] = gItemEffect_FullHeal, - [ITEM_LUMIOSE_GALETTE - ITEM_POTION] = gItemEffect_FullHeal, - [ITEM_SHALOUR_SABLE - ITEM_POTION] = gItemEffect_FullHeal, - [ITEM_BIG_MALASADA - ITEM_POTION] = gItemEffect_FullHeal, + [ITEM_PEWTER_CRUNCHIES] = gItemEffect_FullHeal, + [ITEM_RAGE_CANDY_BAR] = gItemEffect_FullHeal, + [ITEM_LAVA_COOKIE] = gItemEffect_FullHeal, + [ITEM_OLD_GATEAU] = gItemEffect_FullHeal, + [ITEM_CASTELIACONE] = gItemEffect_FullHeal, + [ITEM_LUMIOSE_GALETTE] = gItemEffect_FullHeal, + [ITEM_SHALOUR_SABLE] = gItemEffect_FullHeal, + [ITEM_BIG_MALASADA] = gItemEffect_FullHeal, // Vitamins - [ITEM_HP_UP - ITEM_POTION] = gItemEffect_HPUp, - [ITEM_PROTEIN - ITEM_POTION] = gItemEffect_Protein, - [ITEM_IRON - ITEM_POTION] = gItemEffect_Iron, - [ITEM_CALCIUM - ITEM_POTION] = gItemEffect_Calcium, - [ITEM_ZINC - ITEM_POTION] = gItemEffect_Zinc, - [ITEM_CARBOS - ITEM_POTION] = gItemEffect_Carbos, - [ITEM_PP_UP - ITEM_POTION] = gItemEffect_PPUp, - [ITEM_PP_MAX - ITEM_POTION] = gItemEffect_PPMax, + [ITEM_HP_UP] = gItemEffect_HPUp, + [ITEM_PROTEIN] = gItemEffect_Protein, + [ITEM_IRON] = gItemEffect_Iron, + [ITEM_CALCIUM] = gItemEffect_Calcium, + [ITEM_ZINC] = gItemEffect_Zinc, + [ITEM_CARBOS] = gItemEffect_Carbos, + [ITEM_PP_UP] = gItemEffect_PPUp, + [ITEM_PP_MAX] = gItemEffect_PPMax, // EV Feathers - [ITEM_HEALTH_FEATHER - ITEM_POTION] = gItemEffect_HpFeather, - [ITEM_MUSCLE_FEATHER - ITEM_POTION] = gItemEffect_AtkFeather, - [ITEM_RESIST_FEATHER - ITEM_POTION] = gItemEffect_DefFeather, - [ITEM_GENIUS_FEATHER - ITEM_POTION] = gItemEffect_SpatkFeather, - [ITEM_CLEVER_FEATHER - ITEM_POTION] = gItemEffect_SpdefFeather, - [ITEM_SWIFT_FEATHER - ITEM_POTION] = gItemEffect_SpeedFeather, + [ITEM_HEALTH_FEATHER] = gItemEffect_HpFeather, + [ITEM_MUSCLE_FEATHER] = gItemEffect_AtkFeather, + [ITEM_RESIST_FEATHER] = gItemEffect_DefFeather, + [ITEM_GENIUS_FEATHER] = gItemEffect_SpatkFeather, + [ITEM_CLEVER_FEATHER] = gItemEffect_SpdefFeather, + [ITEM_SWIFT_FEATHER] = gItemEffect_SpeedFeather, // Candy - [ITEM_RARE_CANDY - ITEM_POTION] = gItemEffect_RareCandy, - [ITEM_EXP_CANDY_XS - ITEM_POTION] = gItemEffect_RareCandy, - [ITEM_EXP_CANDY_S - ITEM_POTION] = gItemEffect_RareCandy, - [ITEM_EXP_CANDY_M - ITEM_POTION] = gItemEffect_RareCandy, - [ITEM_EXP_CANDY_L - ITEM_POTION] = gItemEffect_RareCandy, - [ITEM_EXP_CANDY_XL - ITEM_POTION] = gItemEffect_RareCandy, - //[ITEM_DYNAMAX_CANDY - ITEM_POTION] = gItemEffect_DynamaxCandy, // Todo + [ITEM_RARE_CANDY] = gItemEffect_RareCandy, + [ITEM_EXP_CANDY_XS] = gItemEffect_RareCandy, + [ITEM_EXP_CANDY_S] = gItemEffect_RareCandy, + [ITEM_EXP_CANDY_M] = gItemEffect_RareCandy, + [ITEM_EXP_CANDY_L] = gItemEffect_RareCandy, + [ITEM_EXP_CANDY_XL] = gItemEffect_RareCandy, + //[ITEM_DYNAMAX_CANDY] = gItemEffect_DynamaxCandy, // Todo // Medicinal Flutes - [ITEM_BLUE_FLUTE - ITEM_POTION] = gItemEffect_BlueFlute, - [ITEM_YELLOW_FLUTE - ITEM_POTION] = gItemEffect_YellowFlute, - [ITEM_RED_FLUTE - ITEM_POTION] = gItemEffect_RedFlute, + [ITEM_BLUE_FLUTE] = gItemEffect_BlueFlute, + [ITEM_YELLOW_FLUTE] = gItemEffect_YellowFlute, + [ITEM_RED_FLUTE] = gItemEffect_RedFlute, // X Items - [ITEM_X_ATTACK - ITEM_POTION] = gItemEffect_XAttack, - [ITEM_X_DEFENSE - ITEM_POTION] = gItemEffect_XDefense, - [ITEM_X_SPEED - ITEM_POTION] = gItemEffect_XSpeed, - [ITEM_X_ACCURACY - ITEM_POTION] = gItemEffect_XAccuracy, - [ITEM_X_SP_ATK - ITEM_POTION] = gItemEffect_XSpecialAttack, - [ITEM_X_SP_DEF - ITEM_POTION] = gItemEffect_XSpecialDefense, + [ITEM_X_ATTACK] = gItemEffect_XAttack, + [ITEM_X_DEFENSE] = gItemEffect_XDefense, + [ITEM_X_SPEED] = gItemEffect_XSpeed, + [ITEM_X_ACCURACY] = gItemEffect_XAccuracy, + [ITEM_X_SP_ATK] = gItemEffect_XSpecialAttack, + [ITEM_X_SP_DEF] = gItemEffect_XSpecialDefense, - [ITEM_DIRE_HIT - ITEM_POTION] = gItemEffect_DireHit, - [ITEM_GUARD_SPEC - ITEM_POTION] = gItemEffect_GuardSpec, + [ITEM_DIRE_HIT] = gItemEffect_DireHit, + [ITEM_GUARD_SPEC] = gItemEffect_GuardSpec, - //[ITEM_MAX_MUSHROOMS - ITEM_POTION] = gItemEffect_MaxMushrooms, // Todo + //[ITEM_MAX_MUSHROOMS] = gItemEffect_MaxMushrooms, // Todo // Evolution Items - [ITEM_FIRE_STONE - ITEM_POTION] = gItemEffect_EvoItem, - [ITEM_WATER_STONE - ITEM_POTION] = gItemEffect_EvoItem, - [ITEM_THUNDER_STONE - ITEM_POTION] = gItemEffect_EvoItem, - [ITEM_LEAF_STONE - ITEM_POTION] = gItemEffect_EvoItem, - [ITEM_ICE_STONE - ITEM_POTION] = gItemEffect_EvoItem, - [ITEM_SUN_STONE - ITEM_POTION] = gItemEffect_EvoItem, - [ITEM_MOON_STONE - ITEM_POTION] = gItemEffect_EvoItem, - [ITEM_SHINY_STONE - ITEM_POTION] = gItemEffect_EvoItem, - [ITEM_DUSK_STONE - ITEM_POTION] = gItemEffect_EvoItem, - [ITEM_DAWN_STONE - ITEM_POTION] = gItemEffect_EvoItem, - [ITEM_SWEET_APPLE - ITEM_POTION] = gItemEffect_EvoItem, - [ITEM_TART_APPLE - ITEM_POTION] = gItemEffect_EvoItem, - [ITEM_CRACKED_POT - ITEM_POTION] = gItemEffect_EvoItem, - [ITEM_CHIPPED_POT - ITEM_POTION] = gItemEffect_EvoItem, - [ITEM_GALARICA_CUFF - ITEM_POTION] = gItemEffect_EvoItem, - [ITEM_GALARICA_WREATH - ITEM_POTION] = gItemEffect_EvoItem, + [ITEM_FIRE_STONE] = gItemEffect_EvoItem, + [ITEM_WATER_STONE] = gItemEffect_EvoItem, + [ITEM_THUNDER_STONE] = gItemEffect_EvoItem, + [ITEM_LEAF_STONE] = gItemEffect_EvoItem, + [ITEM_ICE_STONE] = gItemEffect_EvoItem, + [ITEM_SUN_STONE] = gItemEffect_EvoItem, + [ITEM_MOON_STONE] = gItemEffect_EvoItem, + [ITEM_SHINY_STONE] = gItemEffect_EvoItem, + [ITEM_DUSK_STONE] = gItemEffect_EvoItem, + [ITEM_DAWN_STONE] = gItemEffect_EvoItem, + [ITEM_SWEET_APPLE] = gItemEffect_EvoItem, + [ITEM_TART_APPLE] = gItemEffect_EvoItem, + [ITEM_CRACKED_POT] = gItemEffect_EvoItem, + [ITEM_CHIPPED_POT] = gItemEffect_EvoItem, + [ITEM_GALARICA_CUFF] = gItemEffect_EvoItem, + [ITEM_GALARICA_WREATH] = gItemEffect_EvoItem, // Berries - [ITEM_CHERI_BERRY - ITEM_POTION] = gItemEffect_CheriBerry, - [ITEM_CHESTO_BERRY - ITEM_POTION] = gItemEffect_ChestoBerry, - [ITEM_PECHA_BERRY - ITEM_POTION] = gItemEffect_PechaBerry, - [ITEM_RAWST_BERRY - ITEM_POTION] = gItemEffect_RawstBerry, - [ITEM_ASPEAR_BERRY - ITEM_POTION] = gItemEffect_AspearBerry, - [ITEM_LEPPA_BERRY - ITEM_POTION] = gItemEffect_LeppaBerry, - [ITEM_ORAN_BERRY - ITEM_POTION] = gItemEffect_OranBerry, - [ITEM_PERSIM_BERRY - ITEM_POTION] = gItemEffect_PersimBerry, - [ITEM_LUM_BERRY - ITEM_POTION] = gItemEffect_FullHeal, - [ITEM_SITRUS_BERRY - ITEM_POTION] = gItemEffect_SitrusBerry, - [ITEM_POMEG_BERRY - ITEM_POTION] = gItemEffect_PomegBerry, - [ITEM_KELPSY_BERRY - ITEM_POTION] = gItemEffect_KelpsyBerry, - [ITEM_QUALOT_BERRY - ITEM_POTION] = gItemEffect_QualotBerry, - [ITEM_HONDEW_BERRY - ITEM_POTION] = gItemEffect_HondewBerry, - [ITEM_GREPA_BERRY - ITEM_POTION] = gItemEffect_GrepaBerry, - [ITEM_TAMATO_BERRY - ITEM_POTION] = gItemEffect_TamatoBerry, - [LAST_BERRY_INDEX - ITEM_POTION] = NULL, + [ITEM_CHERI_BERRY] = gItemEffect_CheriBerry, + [ITEM_CHESTO_BERRY] = gItemEffect_ChestoBerry, + [ITEM_PECHA_BERRY] = gItemEffect_PechaBerry, + [ITEM_RAWST_BERRY] = gItemEffect_RawstBerry, + [ITEM_ASPEAR_BERRY] = gItemEffect_AspearBerry, + [ITEM_LEPPA_BERRY] = gItemEffect_LeppaBerry, + [ITEM_ORAN_BERRY] = gItemEffect_OranBerry, + [ITEM_PERSIM_BERRY] = gItemEffect_PersimBerry, + [ITEM_LUM_BERRY] = gItemEffect_FullHeal, + [ITEM_SITRUS_BERRY] = gItemEffect_SitrusBerry, + [ITEM_POMEG_BERRY] = gItemEffect_PomegBerry, + [ITEM_KELPSY_BERRY] = gItemEffect_KelpsyBerry, + [ITEM_QUALOT_BERRY] = gItemEffect_QualotBerry, + [ITEM_HONDEW_BERRY] = gItemEffect_HondewBerry, + [ITEM_GREPA_BERRY] = gItemEffect_GrepaBerry, + [ITEM_TAMATO_BERRY] = gItemEffect_TamatoBerry, + [LAST_BERRY_INDEX] = NULL, }; diff --git a/src/party_menu.c b/src/party_menu.c index 9a04f4c50329..6964fa0c5968 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -4287,7 +4287,10 @@ static bool8 IsHPRecoveryItem(u16 item) if (item == ITEM_ENIGMA_BERRY_E_READER) effect = gSaveBlock1Ptr->enigmaBerry.itemEffect; else - effect = gItemEffectTable[item - ITEM_POTION]; + effect = gItemEffectTable[item]; + + if (effect == NULL) + return FALSE; if (effect[4] & ITEM4_HEAL_HP) return TRUE; @@ -4798,9 +4801,9 @@ void ItemUseCB_PPRecovery(u8 taskId, TaskFunc task) if (item == ITEM_ENIGMA_BERRY_E_READER) effect = gSaveBlock1Ptr->enigmaBerry.itemEffect; else - effect = gItemEffectTable[item - ITEM_POTION]; + effect = gItemEffectTable[item]; - if (!(effect[4] & ITEM4_HEAL_PP_ONE)) + if (effect == NULL || !(effect[4] & ITEM4_HEAL_PP_ONE)) { gPartyMenu.data1 = 0; TryUsePPItem(taskId); @@ -5673,14 +5676,14 @@ u8 GetItemEffectType(u16 item) const u8 *itemEffect; u32 statusCure; - if (!ITEM_HAS_EFFECT(item)) - return ITEM_EFFECT_NONE; - // Read the item's effect properties. if (item == ITEM_ENIGMA_BERRY_E_READER) itemEffect = gSaveBlock1Ptr->enigmaBerry.itemEffect; else - itemEffect = gItemEffectTable[item - ITEM_POTION]; + itemEffect = gItemEffectTable[item]; + + if (itemEffect == NULL) + return ITEM_EFFECT_NONE; if ((itemEffect[0] & ITEM0_DIRE_HIT) || itemEffect[1] || (itemEffect[3] & ITEM3_GUARD_SPEC)) return ITEM_EFFECT_X_ITEM; diff --git a/src/pokemon.c b/src/pokemon.c index 4250d3244afe..f9f7d811dbf0 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -5770,9 +5770,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov } // Skip using the item if it won't do anything - if (!ITEM_HAS_EFFECT(item)) - return TRUE; - if (gItemEffectTable[item - ITEM_POTION] == NULL && item != ITEM_ENIGMA_BERRY_E_READER) + if (gItemEffectTable[item] == NULL && item != ITEM_ENIGMA_BERRY_E_READER) return TRUE; // Get item effect @@ -5785,7 +5783,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov } else { - itemEffect = gItemEffectTable[item - ITEM_POTION]; + itemEffect = gItemEffectTable[item]; } // Do item effect @@ -6339,9 +6337,9 @@ u8 GetItemEffectParamOffset(u16 itemId, u8 effectByte, u8 effectBit) offset = ITEM_EFFECT_ARG_START; - temp = gItemEffectTable[itemId - ITEM_POTION]; + temp = gItemEffectTable[itemId]; - if (!temp && itemId != ITEM_ENIGMA_BERRY_E_READER) + if (temp != NULL && !temp && itemId != ITEM_ENIGMA_BERRY_E_READER) return 0; if (itemId == ITEM_ENIGMA_BERRY_E_READER) @@ -6469,7 +6467,7 @@ u8 *UseStatIncreaseItem(u16 itemId) } else { - itemEffect = gItemEffectTable[itemId - ITEM_POTION]; + itemEffect = gItemEffectTable[itemId]; } gPotentialItemEffectBattler = gBattlerInMenuId; From 8cf357a37ba4c57efd638a1bd22e24a3e31a649e Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Thu, 23 Mar 2023 12:29:04 +0100 Subject: [PATCH 196/428] tests for dire claw ceaseless edge barb barrage --- src/battle_message.c | 2 +- src/battle_script_commands.c | 2 +- test/move_effect_barb_barrage.c | 43 +++++++ test/move_effect_dire_claw.c | 138 +++++++++++++++++++++ test/move_effect_hit_set_entry_hazardss.c | 117 ++++++++++++++++++ test/move_effect_spikes.c | 8 +- test/move_effect_tri_attack.c | 144 ++++++++++++++++++++++ test/move_effect_venoshock.c | 27 ++++ 8 files changed, 475 insertions(+), 6 deletions(-) create mode 100644 test/move_effect_barb_barrage.c create mode 100644 test/move_effect_dire_claw.c create mode 100644 test/move_effect_hit_set_entry_hazardss.c create mode 100644 test/move_effect_tri_attack.c create mode 100644 test/move_effect_venoshock.c diff --git a/src/battle_message.c b/src/battle_message.c index 562680f8970e..2ecfac0c7d10 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -209,7 +209,7 @@ static const u8 sText_PkmnFellIntoNightmare[] = _("{B_DEF_NAME_WITH_PREFIX} fell static const u8 sText_PkmnLockedInNightmare[] = _("{B_ATK_NAME_WITH_PREFIX} is locked\nin a NIGHTMARE!"); static const u8 sText_PkmnLaidCurse[] = _("{B_ATK_NAME_WITH_PREFIX} cut its own HP and\nlaid a CURSE on {B_DEF_NAME_WITH_PREFIX}!"); static const u8 sText_PkmnAfflictedByCurse[] = _("{B_ATK_NAME_WITH_PREFIX} is afflicted\nby the CURSE!"); -static const u8 sText_SpikesScattered[] = _("Spikes were scattered all around\nthe opponent's side!"); +static const u8 sText_SpikesScattered[] = _("Spikes were scattered all around\n{B_DEF_TEAM2} team!"); static const u8 sText_PkmnHurtBySpikes[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is hurt\nby spikes!"); static const u8 sText_PkmnIdentified[] = _("{B_ATK_NAME_WITH_PREFIX} identified\n{B_DEF_NAME_WITH_PREFIX}!"); static const u8 sText_PkmnPerishCountFell[] = _("{B_ATK_NAME_WITH_PREFIX}'s PERISH count\nfell to {B_BUFF1}!"); diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index bd444e04ec51..34257d896b12 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -3783,7 +3783,7 @@ void SetMoveEffect(bool32 primary, u32 certain) } break; case MOVE_EFFECT_SPIKES: - if (!(gSideStatuses[GetBattlerSide(gEffectBattler)] & SIDE_STATUS_SPIKES)) + if (gSideTimers[GetBattlerSide(gEffectBattler)].spikesAmount < 3) { gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SPIKESSCATTERED; BattleScriptPush(gBattlescriptCurrInstr + 1); diff --git a/test/move_effect_barb_barrage.c b/test/move_effect_barb_barrage.c new file mode 100644 index 000000000000..9d9c2cc84350 --- /dev/null +++ b/test/move_effect_barb_barrage.c @@ -0,0 +1,43 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + //ASSUME(gBattleMoves[MOVE_BARB_BARRAGE].effect == EFFECT_BARB_BARRAGE); +} + +SINGLE_BATTLE_TEST("Barb Barrage inflicts poison") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_BARB_BARRAGE); } + TURN {} + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_BARB_BARRAGE, player); + HP_BAR(opponent); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); + STATUS_ICON(opponent, poison: TRUE); + } +} + +SINGLE_BATTLE_TEST("Barb Barrage's power doubles if the target is poisoned/badly poisoned", s16 damage) +{ + u32 status1; + PARAMETRIZE { status1 = 0; } + PARAMETRIZE { status1 = STATUS1_POISON; } + PARAMETRIZE { status1 = STATUS1_TOXIC_POISON; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) {Status1(status1);} + } WHEN { + TURN { MOVE(player, MOVE_BARB_BARRAGE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_BARB_BARRAGE, player); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(2.0), results[1].damage); + EXPECT_MUL_EQ(results[0].damage, Q_4_12(2.0), results[2].damage); + } +} diff --git a/test/move_effect_dire_claw.c b/test/move_effect_dire_claw.c new file mode 100644 index 000000000000..a5270ce3fb70 --- /dev/null +++ b/test/move_effect_dire_claw.c @@ -0,0 +1,138 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_DIRE_CLAW].effect == EFFECT_DIRE_CLAW); +} + +// found by brute-force +#define RNG_SLEEP 0xcb0 +#define RNG_POISON 0x2BE +#define RNG_PARALYSIS 5 + +SINGLE_BATTLE_TEST("Dire Claw can inflict poison, paralysis or sleep") +{ + u8 statusAnim; + u32 rng; + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PSN; rng = RNG_POISON; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_SLP; rng = RNG_SLEEP; } + GIVEN { + RNGSeed(rng); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_DIRE_CLAW); } + TURN {} + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DIRE_CLAW, player); + HP_BAR(opponent); + ANIMATION(ANIM_TYPE_STATUS, statusAnim, opponent); + if (statusAnim == B_ANIM_STATUS_PRZ) { + STATUS_ICON(opponent, paralysis: TRUE); + } + else if (statusAnim == B_ANIM_STATUS_SLP) { + STATUS_ICON(opponent, sleep: TRUE); + } + else if (statusAnim == B_ANIM_STATUS_PSN) { + STATUS_ICON(opponent, poison: TRUE); + } + } +} + +SINGLE_BATTLE_TEST("Dire Claw cannot poison/paralyze poison/electric types respectively") +{ + u8 statusAnim; + u16 species; + u32 rng; + #if B_PARALYZE_ELECTRIC >= GEN_6 + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; species = SPECIES_RAICHU; } + #endif // B_PARALYZE_ELECTRIC + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PSN; rng = RNG_POISON; species = SPECIES_ARBOK;} + GIVEN { + RNGSeed(rng); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(species); + } WHEN { + TURN { MOVE(player, MOVE_DIRE_CLAW); } + TURN {} + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DIRE_CLAW, player); + HP_BAR(opponent); + NOT ANIMATION(ANIM_TYPE_STATUS, statusAnim, opponent); + if (statusAnim == B_ANIM_STATUS_PRZ) { + NOT STATUS_ICON(opponent, paralysis: TRUE); + } + else if (statusAnim == B_ANIM_STATUS_PSN) { + NOT STATUS_ICON(opponent, poison: TRUE); + } + } +} + +SINGLE_BATTLE_TEST("Dire Claw cannot poison/paralyze/cause to fall asleep pokemon with abilities preventing respective statuses") +{ + u8 statusAnim; + u16 species, ability; + u32 rng; + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; species = SPECIES_RAICHU; ability = ABILITY_LIGHTNING_ROD; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; species = SPECIES_JOLTEON; ability = ABILITY_VOLT_ABSORB; } + #if P_GEN_4_POKEMON == TRUE + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; species = SPECIES_ELECTIVIRE; ability = ABILITY_MOTOR_DRIVE; } + #endif // P_GEN_4_POKEMON + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PSN; rng = RNG_POISON; species = SPECIES_ZANGOOSE; ability = ABILITY_IMMUNITY; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_SLP; rng = RNG_SLEEP; species = SPECIES_VIGOROTH; ability = ABILITY_VITAL_SPIRIT; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_SLP; rng = RNG_SLEEP; species = SPECIES_HYPNO; ability = ABILITY_INSOMNIA; } + + GIVEN { + RNGSeed(rng); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(species) {Ability(ability);} + } WHEN { + TURN { MOVE(player, MOVE_DIRE_CLAW); } + TURN {} + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DIRE_CLAW, player); + HP_BAR(opponent); + NOT ANIMATION(ANIM_TYPE_STATUS, statusAnim, opponent); + if (statusAnim == B_ANIM_STATUS_PRZ) { + NOT STATUS_ICON(opponent, paralysis: TRUE); + } + else if (statusAnim == B_ANIM_STATUS_SLP) { + NOT STATUS_ICON(opponent, sleep: TRUE); + } + else if (statusAnim == B_ANIM_STATUS_PSN) { + NOT STATUS_ICON(opponent, poison: TRUE); + } + } +} + +SINGLE_BATTLE_TEST("Dire Claw cannot poison/paralyze/cause to fall asleep a mon which is already statused") +{ + u8 statusAnim; + u32 rng; + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PSN; rng = RNG_POISON; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_SLP; rng = RNG_SLEEP; } + GIVEN { + RNGSeed(rng); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) {Status1(STATUS1_BURN);} + } WHEN { + TURN { MOVE(player, MOVE_DIRE_CLAW); } + TURN {} + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DIRE_CLAW, player); + HP_BAR(opponent); + NOT ANIMATION(ANIM_TYPE_STATUS, statusAnim, opponent); + if (statusAnim == B_ANIM_STATUS_PRZ) { + NOT STATUS_ICON(opponent, paralysis: TRUE); + } + else if (statusAnim == B_ANIM_STATUS_SLP) { + NOT STATUS_ICON(opponent, sleep: TRUE); + } + else if (statusAnim == B_ANIM_STATUS_PSN) { + NOT STATUS_ICON(opponent, poison: TRUE); + } + } +} diff --git a/test/move_effect_hit_set_entry_hazardss.c b/test/move_effect_hit_set_entry_hazardss.c new file mode 100644 index 000000000000..4e9761aac3ad --- /dev/null +++ b/test/move_effect_hit_set_entry_hazardss.c @@ -0,0 +1,117 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_STONE_AXE].effect == EFFECT_HIT_SET_ENTRY_HAZARD); + ASSUME(gBattleMoves[MOVE_CEASELESS_EDGE].effect == EFFECT_HIT_SET_ENTRY_HAZARD); +} + +SINGLE_BATTLE_TEST("Stone Axe / Ceaseless Edge set up hazards after hitting the target") +{ + u16 move; + PARAMETRIZE {move = MOVE_STONE_AXE; } + PARAMETRIZE {move = MOVE_CEASELESS_EDGE; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, move); } + TURN { SWITCH(opponent, 1); } + } SCENE { + s32 maxHP = GetMonData(&OPPONENT_PARTY[1], MON_DATA_MAX_HP); + ANIMATION(ANIM_TYPE_MOVE, move, player); + HP_BAR(opponent); + if (move == MOVE_CEASELESS_EDGE) { + MESSAGE("Spikes were scattered all around the opposing team!"); + } + else { + MESSAGE("Pointed stones float in the air around the opposing team!"); + } + MESSAGE("2 sent out Wobbuffet!"); + if (move == MOVE_CEASELESS_EDGE) { + HP_BAR(opponent, damage: maxHP / 8); + MESSAGE("Foe Wobbuffet is hurt by spikes!"); + } + else { + HP_BAR(opponent, damage: maxHP / 8); + MESSAGE("Pointed stones dug into Foe Wobbuffet!"); + } + } +} + +SINGLE_BATTLE_TEST("Ceaseless Edge can set up to 3 layers of Spikes") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(player, MOVE_CEASELESS_EDGE); } + TURN { MOVE(player, MOVE_CEASELESS_EDGE); } + TURN { MOVE(player, MOVE_CEASELESS_EDGE); } + TURN { MOVE(player, MOVE_CEASELESS_EDGE); } + TURN { SWITCH(opponent, 1); } + } SCENE { + s32 maxHP = GetMonData(&OPPONENT_PARTY[1], MON_DATA_MAX_HP); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_CEASELESS_EDGE, player); + HP_BAR(opponent); + MESSAGE("Spikes were scattered all around the opposing team!"); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_CEASELESS_EDGE, player); + HP_BAR(opponent); + MESSAGE("Spikes were scattered all around the opposing team!"); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_CEASELESS_EDGE, player); + HP_BAR(opponent); + MESSAGE("Spikes were scattered all around the opposing team!"); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_CEASELESS_EDGE, player); + HP_BAR(opponent); + NOT MESSAGE("Spikes were scattered all around the opposing team!"); + + MESSAGE("2 sent out Wynaut!"); + HP_BAR(opponent, damage: maxHP / 4); + MESSAGE("Foe Wynaut is hurt by spikes!"); + } +} + +SINGLE_BATTLE_TEST("Stone Axe can set up pointed stones only once") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(player, MOVE_STONE_AXE); } + TURN { MOVE(player, MOVE_STONE_AXE); } + TURN { MOVE(player, MOVE_STONE_AXE); } + TURN { MOVE(player, MOVE_STONE_AXE); } + TURN { SWITCH(opponent, 1); } + } SCENE { + s32 maxHP = GetMonData(&OPPONENT_PARTY[1], MON_DATA_MAX_HP); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_STONE_AXE, player); + HP_BAR(opponent); + MESSAGE("Pointed stones float in the air around the opposing team!"); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_STONE_AXE, player); + HP_BAR(opponent); + NOT MESSAGE("Pointed stones float in the air around the opposing team!"); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_STONE_AXE, player); + HP_BAR(opponent); + NOT MESSAGE("Pointed stones float in the air around the opposing team!"); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_STONE_AXE, player); + HP_BAR(opponent); + NOT MESSAGE("Pointed stones float in the air around the opposing team!"); + + MESSAGE("2 sent out Wynaut!"); + HP_BAR(opponent, damage: maxHP / 8); + MESSAGE("Pointed stones dug into Foe Wynaut!"); + } +} + diff --git a/test/move_effect_spikes.c b/test/move_effect_spikes.c index 33b0bad4b99e..0c84a5fb1e8c 100644 --- a/test/move_effect_spikes.c +++ b/test/move_effect_spikes.c @@ -28,7 +28,7 @@ SINGLE_BATTLE_TEST("Spikes damage on switch in") s32 maxHP = GetMonData(&OPPONENT_PARTY[1], MON_DATA_MAX_HP); for (count = 0; count < layers; ++count) { ANIMATION(ANIM_TYPE_MOVE, MOVE_SPIKES, player); - MESSAGE("Spikes were scattered all around the opponent's side!"); + MESSAGE("Spikes were scattered all around the opposing team!"); } MESSAGE("2 sent out Wynaut!"); HP_BAR(opponent, damage: maxHP / divisor); @@ -51,11 +51,11 @@ SINGLE_BATTLE_TEST("Spikes fails after 3 layers") } SCENE { s32 maxHP = GetMonData(&OPPONENT_PARTY[1], MON_DATA_MAX_HP); ANIMATION(ANIM_TYPE_MOVE, MOVE_SPIKES, player); - MESSAGE("Spikes were scattered all around the opponent's side!"); + MESSAGE("Spikes were scattered all around the opposing team!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SPIKES, player); - MESSAGE("Spikes were scattered all around the opponent's side!"); + MESSAGE("Spikes were scattered all around the opposing team!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SPIKES, player); - MESSAGE("Spikes were scattered all around the opponent's side!"); + MESSAGE("Spikes were scattered all around the opposing team!"); MESSAGE("Wobbuffet used Spikes!"); MESSAGE("But it failed!"); MESSAGE("2 sent out Wynaut!"); diff --git a/test/move_effect_tri_attack.c b/test/move_effect_tri_attack.c new file mode 100644 index 000000000000..31627ef2d147 --- /dev/null +++ b/test/move_effect_tri_attack.c @@ -0,0 +1,144 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_TRI_ATTACK].effect == EFFECT_TRI_ATTACK); +} + +// found by brute-force +#define RNG_PARALYSIS 0xcb0 +#define RNG_BURN 0x2BE +#define RNG_FREEZE 5 + +SINGLE_BATTLE_TEST("Tri Attack can inflict paralysis, burn or freeze") +{ + u8 statusAnim; + u32 rng; + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_BRN; rng = RNG_BURN; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_FRZ; rng = RNG_FREEZE; } + GIVEN { + RNGSeed(rng); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_TRI_ATTACK); } + TURN {} + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TRI_ATTACK, player); + HP_BAR(opponent); + ANIMATION(ANIM_TYPE_STATUS, statusAnim, opponent); + if (statusAnim == B_ANIM_STATUS_BRN) { + STATUS_ICON(opponent, burn: TRUE); + } + else if (statusAnim == B_ANIM_STATUS_FRZ) { + STATUS_ICON(opponent, freeze: TRUE); + } + else if (statusAnim == B_ANIM_STATUS_PRZ) { + STATUS_ICON(opponent, paralysis: TRUE); + } + } +} + +SINGLE_BATTLE_TEST("Tri Attack cannot paralyze/burn/freeze electric/fire/ice types respectively") +{ + u8 statusAnim; + u16 species; + u32 rng; + #if B_PARALYZE_ELECTRIC >= GEN_6 + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; species = SPECIES_RAICHU;} + #endif // B_PARALYZE_ELECTRIC + PARAMETRIZE { statusAnim = B_ANIM_STATUS_BRN; rng = RNG_BURN; species = SPECIES_ARCANINE; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_FRZ; rng = RNG_FREEZE; species = SPECIES_GLALIE; } + GIVEN { + RNGSeed(rng); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(species); + } WHEN { + TURN { MOVE(player, MOVE_TRI_ATTACK); } + TURN {} + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TRI_ATTACK, player); + HP_BAR(opponent); + NOT ANIMATION(ANIM_TYPE_STATUS, statusAnim, opponent); + if (statusAnim == B_ANIM_STATUS_BRN) { + NOT STATUS_ICON(opponent, burn: TRUE); + } + else if (statusAnim == B_ANIM_STATUS_FRZ) { + NOT STATUS_ICON(opponent, freeze: TRUE); + } + else if (statusAnim == B_ANIM_STATUS_PRZ) { + NOT STATUS_ICON(opponent, paralysis: TRUE); + } + } +} + +SINGLE_BATTLE_TEST("Tri Attack cannot paralyze/burn/freeze pokemon with abilities preventing respective statuses") +{ + u8 statusAnim; + u16 species, ability; + u32 rng; + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; species = SPECIES_RAICHU; ability = ABILITY_LIGHTNING_ROD; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; species = SPECIES_JOLTEON; ability = ABILITY_VOLT_ABSORB; } + #if P_GEN_4_POKEMON == TRUE + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; species = SPECIES_ELECTIVIRE; ability = ABILITY_MOTOR_DRIVE; } + #endif // P_GEN_4_POKEMON + #if P_GEN_7_POKEMON == TRUE + PARAMETRIZE { statusAnim = B_ANIM_STATUS_BRN; rng = RNG_BURN; species = SPECIES_DEWPIDER; ability = ABILITY_WATER_BUBBLE; } + #endif // P_GEN_7_POKEMON + PARAMETRIZE { statusAnim = B_ANIM_STATUS_BRN; rng = RNG_BURN; species = SPECIES_SEAKING; ability = ABILITY_WATER_VEIL; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_FRZ; rng = RNG_FREEZE; species = SPECIES_CAMERUPT; ability = ABILITY_MAGMA_ARMOR; } + + GIVEN { + RNGSeed(rng); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(species) {Ability(ability);} + } WHEN { + TURN { MOVE(player, MOVE_TRI_ATTACK); } + TURN {} + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TRI_ATTACK, player); + HP_BAR(opponent); + NOT ANIMATION(ANIM_TYPE_STATUS, statusAnim, opponent); + if (statusAnim == B_ANIM_STATUS_BRN) { + NOT STATUS_ICON(opponent, burn: TRUE); + } + else if (statusAnim == B_ANIM_STATUS_FRZ) { + NOT STATUS_ICON(opponent, freeze: TRUE); + } + else if (statusAnim == B_ANIM_STATUS_PRZ) { + NOT STATUS_ICON(opponent, paralysis: TRUE); + } + } +} + +SINGLE_BATTLE_TEST("Tri Attack cannot paralyze/burn/freeze a mon which is already statused") +{ + u8 statusAnim; + u32 rng; + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_BRN; rng = RNG_BURN; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_FRZ; rng = RNG_FREEZE; } + GIVEN { + RNGSeed(rng); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) {Status1(STATUS1_SLEEP);} + } WHEN { + TURN { MOVE(player, MOVE_TRI_ATTACK); } + TURN {} + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TRI_ATTACK, player); + HP_BAR(opponent); + NOT ANIMATION(ANIM_TYPE_STATUS, statusAnim, opponent); + if (statusAnim == B_ANIM_STATUS_BRN) { + NOT STATUS_ICON(opponent, burn: TRUE); + } + else if (statusAnim == B_ANIM_STATUS_FRZ) { + NOT STATUS_ICON(opponent, freeze: TRUE); + } + else if (statusAnim == B_ANIM_STATUS_PRZ) { + NOT STATUS_ICON(opponent, paralysis: TRUE); + } + } +} diff --git a/test/move_effect_venoshock.c b/test/move_effect_venoshock.c new file mode 100644 index 000000000000..876f611c9376 --- /dev/null +++ b/test/move_effect_venoshock.c @@ -0,0 +1,27 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_VENOSHOCK].effect == EFFECT_VENOSHOCK); +} + +SINGLE_BATTLE_TEST("Venoshock's power doubles if the target is poisoned/badly poisoned", s16 damage) +{ + u32 status1; + PARAMETRIZE { status1 = 0; } + PARAMETRIZE { status1 = STATUS1_POISON; } + PARAMETRIZE { status1 = STATUS1_TOXIC_POISON; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) {Status1(status1);} + } WHEN { + TURN { MOVE(player, MOVE_VENOSHOCK); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_VENOSHOCK, player); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(2.0), results[1].damage); + EXPECT_MUL_EQ(results[0].damage, Q_4_12(2.0), results[2].damage); + } +} From f15fb1540fe60d4f791cb537406cbd5f3ecdba0a Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Thu, 23 Mar 2023 23:16:08 +0100 Subject: [PATCH 197/428] Allow Kubfu evolution with Scroll items --- src/data/pokemon/evolution.h | 4 +- src/data/pokemon/item_effects.h | 210 ++++++++++++++++---------------- src/party_menu.c | 3 +- 3 files changed, 112 insertions(+), 105 deletions(-) diff --git a/src/data/pokemon/evolution.h b/src/data/pokemon/evolution.h index 4f09867a6c32..b76e83a7304a 100644 --- a/src/data/pokemon/evolution.h +++ b/src/data/pokemon/evolution.h @@ -542,7 +542,9 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] = [SPECIES_DREEPY] = {{EVO_LEVEL, 50, SPECIES_DRAKLOAK}}, [SPECIES_DRAKLOAK] = {{EVO_LEVEL, 60, SPECIES_DRAGAPULT}}, [SPECIES_KUBFU] = {{EVO_DARK_SCROLL, 0, SPECIES_URSHIFU}, - {EVO_WATER_SCROLL, 0, SPECIES_URSHIFU_RAPID_STRIKE_STYLE}}, + {EVO_ITEM, ITEM_SCROLL_OF_DARKNESS, SPECIES_URSHIFU}, + {EVO_WATER_SCROLL, 0, SPECIES_URSHIFU_RAPID_STRIKE_STYLE}, + {EVO_ITEM, ITEM_SCROLL_OF_WATERS, SPECIES_URSHIFU_RAPID_STRIKE_STYLE}}, #endif [SPECIES_RATTATA_ALOLAN] = {{EVO_LEVEL_NIGHT, 20, SPECIES_RATICATE_ALOLAN}}, [SPECIES_SANDSHREW_ALOLAN] = {{EVO_ITEM, ITEM_ICE_STONE, SPECIES_SANDSLASH_ALOLAN}}, diff --git a/src/data/pokemon/item_effects.h b/src/data/pokemon/item_effects.h index 8323801d5487..607f57814017 100644 --- a/src/data/pokemon/item_effects.h +++ b/src/data/pokemon/item_effects.h @@ -450,125 +450,129 @@ const u8 gItemEffect_TamatoBerry[10] = { const u8 *const gItemEffectTable[ITEMS_COUNT] = { // Medicine - [ITEM_POTION] = gItemEffect_Potion, - [ITEM_SUPER_POTION] = gItemEffect_SuperPotion, - [ITEM_HYPER_POTION] = gItemEffect_HyperPotion, - [ITEM_MAX_POTION] = gItemEffect_MaxPotion, - [ITEM_FULL_RESTORE] = gItemEffect_FullRestore, - [ITEM_REVIVE] = gItemEffect_Revive, - [ITEM_MAX_REVIVE] = gItemEffect_MaxRevive, - [ITEM_FRESH_WATER] = gItemEffect_FreshWater, - [ITEM_SODA_POP] = gItemEffect_SodaPop, - [ITEM_LEMONADE] = gItemEffect_Lemonade, - [ITEM_MOOMOO_MILK] = gItemEffect_MoomooMilk, - [ITEM_ENERGY_POWDER] = gItemEffect_EnergyPowder, - [ITEM_ENERGY_ROOT] = gItemEffect_EnergyRoot, - [ITEM_HEAL_POWDER] = gItemEffect_HealPowder, - [ITEM_REVIVAL_HERB] = gItemEffect_RevivalHerb, - [ITEM_ANTIDOTE] = gItemEffect_Antidote, - [ITEM_PARALYZE_HEAL] = gItemEffect_ParalyzeHeal, - [ITEM_BURN_HEAL] = gItemEffect_BurnHeal, - [ITEM_ICE_HEAL] = gItemEffect_IceHeal, - [ITEM_AWAKENING] = gItemEffect_Awakening, - [ITEM_FULL_HEAL] = gItemEffect_FullHeal, - [ITEM_ETHER] = gItemEffect_Ether, - [ITEM_MAX_ETHER] = gItemEffect_MaxEther, - [ITEM_ELIXIR] = gItemEffect_Elixir, - [ITEM_MAX_ELIXIR] = gItemEffect_MaxElixir, - [ITEM_BERRY_JUICE] = gItemEffect_BerryJuice, - [ITEM_SACRED_ASH] = gItemEffect_SacredAsh, - [ITEM_SWEET_HEART] = gItemEffect_Potion, - [ITEM_MAX_HONEY] = gItemEffect_MaxRevive, + [ITEM_POTION] = gItemEffect_Potion, + [ITEM_SUPER_POTION] = gItemEffect_SuperPotion, + [ITEM_HYPER_POTION] = gItemEffect_HyperPotion, + [ITEM_MAX_POTION] = gItemEffect_MaxPotion, + [ITEM_FULL_RESTORE] = gItemEffect_FullRestore, + [ITEM_REVIVE] = gItemEffect_Revive, + [ITEM_MAX_REVIVE] = gItemEffect_MaxRevive, + [ITEM_FRESH_WATER] = gItemEffect_FreshWater, + [ITEM_SODA_POP] = gItemEffect_SodaPop, + [ITEM_LEMONADE] = gItemEffect_Lemonade, + [ITEM_MOOMOO_MILK] = gItemEffect_MoomooMilk, + [ITEM_ENERGY_POWDER] = gItemEffect_EnergyPowder, + [ITEM_ENERGY_ROOT] = gItemEffect_EnergyRoot, + [ITEM_HEAL_POWDER] = gItemEffect_HealPowder, + [ITEM_REVIVAL_HERB] = gItemEffect_RevivalHerb, + [ITEM_ANTIDOTE] = gItemEffect_Antidote, + [ITEM_PARALYZE_HEAL] = gItemEffect_ParalyzeHeal, + [ITEM_BURN_HEAL] = gItemEffect_BurnHeal, + [ITEM_ICE_HEAL] = gItemEffect_IceHeal, + [ITEM_AWAKENING] = gItemEffect_Awakening, + [ITEM_FULL_HEAL] = gItemEffect_FullHeal, + [ITEM_ETHER] = gItemEffect_Ether, + [ITEM_MAX_ETHER] = gItemEffect_MaxEther, + [ITEM_ELIXIR] = gItemEffect_Elixir, + [ITEM_MAX_ELIXIR] = gItemEffect_MaxElixir, + [ITEM_BERRY_JUICE] = gItemEffect_BerryJuice, + [ITEM_SACRED_ASH] = gItemEffect_SacredAsh, + [ITEM_SWEET_HEART] = gItemEffect_Potion, + [ITEM_MAX_HONEY] = gItemEffect_MaxRevive, // Regional Specialties - [ITEM_PEWTER_CRUNCHIES] = gItemEffect_FullHeal, - [ITEM_RAGE_CANDY_BAR] = gItemEffect_FullHeal, - [ITEM_LAVA_COOKIE] = gItemEffect_FullHeal, - [ITEM_OLD_GATEAU] = gItemEffect_FullHeal, - [ITEM_CASTELIACONE] = gItemEffect_FullHeal, - [ITEM_LUMIOSE_GALETTE] = gItemEffect_FullHeal, - [ITEM_SHALOUR_SABLE] = gItemEffect_FullHeal, - [ITEM_BIG_MALASADA] = gItemEffect_FullHeal, + [ITEM_PEWTER_CRUNCHIES] = gItemEffect_FullHeal, + [ITEM_RAGE_CANDY_BAR] = gItemEffect_FullHeal, + [ITEM_LAVA_COOKIE] = gItemEffect_FullHeal, + [ITEM_OLD_GATEAU] = gItemEffect_FullHeal, + [ITEM_CASTELIACONE] = gItemEffect_FullHeal, + [ITEM_LUMIOSE_GALETTE] = gItemEffect_FullHeal, + [ITEM_SHALOUR_SABLE] = gItemEffect_FullHeal, + [ITEM_BIG_MALASADA] = gItemEffect_FullHeal, // Vitamins - [ITEM_HP_UP] = gItemEffect_HPUp, - [ITEM_PROTEIN] = gItemEffect_Protein, - [ITEM_IRON] = gItemEffect_Iron, - [ITEM_CALCIUM] = gItemEffect_Calcium, - [ITEM_ZINC] = gItemEffect_Zinc, - [ITEM_CARBOS] = gItemEffect_Carbos, - [ITEM_PP_UP] = gItemEffect_PPUp, - [ITEM_PP_MAX] = gItemEffect_PPMax, + [ITEM_HP_UP] = gItemEffect_HPUp, + [ITEM_PROTEIN] = gItemEffect_Protein, + [ITEM_IRON] = gItemEffect_Iron, + [ITEM_CALCIUM] = gItemEffect_Calcium, + [ITEM_ZINC] = gItemEffect_Zinc, + [ITEM_CARBOS] = gItemEffect_Carbos, + [ITEM_PP_UP] = gItemEffect_PPUp, + [ITEM_PP_MAX] = gItemEffect_PPMax, // EV Feathers - [ITEM_HEALTH_FEATHER] = gItemEffect_HpFeather, - [ITEM_MUSCLE_FEATHER] = gItemEffect_AtkFeather, - [ITEM_RESIST_FEATHER] = gItemEffect_DefFeather, - [ITEM_GENIUS_FEATHER] = gItemEffect_SpatkFeather, - [ITEM_CLEVER_FEATHER] = gItemEffect_SpdefFeather, - [ITEM_SWIFT_FEATHER] = gItemEffect_SpeedFeather, + [ITEM_HEALTH_FEATHER] = gItemEffect_HpFeather, + [ITEM_MUSCLE_FEATHER] = gItemEffect_AtkFeather, + [ITEM_RESIST_FEATHER] = gItemEffect_DefFeather, + [ITEM_GENIUS_FEATHER] = gItemEffect_SpatkFeather, + [ITEM_CLEVER_FEATHER] = gItemEffect_SpdefFeather, + [ITEM_SWIFT_FEATHER] = gItemEffect_SpeedFeather, // Candy - [ITEM_RARE_CANDY] = gItemEffect_RareCandy, - [ITEM_EXP_CANDY_XS] = gItemEffect_RareCandy, - [ITEM_EXP_CANDY_S] = gItemEffect_RareCandy, - [ITEM_EXP_CANDY_M] = gItemEffect_RareCandy, - [ITEM_EXP_CANDY_L] = gItemEffect_RareCandy, - [ITEM_EXP_CANDY_XL] = gItemEffect_RareCandy, - //[ITEM_DYNAMAX_CANDY] = gItemEffect_DynamaxCandy, // Todo + [ITEM_RARE_CANDY] = gItemEffect_RareCandy, + [ITEM_EXP_CANDY_XS] = gItemEffect_RareCandy, + [ITEM_EXP_CANDY_S] = gItemEffect_RareCandy, + [ITEM_EXP_CANDY_M] = gItemEffect_RareCandy, + [ITEM_EXP_CANDY_L] = gItemEffect_RareCandy, + [ITEM_EXP_CANDY_XL] = gItemEffect_RareCandy, + //[ITEM_DYNAMAX_CANDY] = gItemEffect_DynamaxCandy, // Todo // Medicinal Flutes - [ITEM_BLUE_FLUTE] = gItemEffect_BlueFlute, - [ITEM_YELLOW_FLUTE] = gItemEffect_YellowFlute, - [ITEM_RED_FLUTE] = gItemEffect_RedFlute, + [ITEM_BLUE_FLUTE] = gItemEffect_BlueFlute, + [ITEM_YELLOW_FLUTE] = gItemEffect_YellowFlute, + [ITEM_RED_FLUTE] = gItemEffect_RedFlute, // X Items - [ITEM_X_ATTACK] = gItemEffect_XAttack, - [ITEM_X_DEFENSE] = gItemEffect_XDefense, - [ITEM_X_SPEED] = gItemEffect_XSpeed, - [ITEM_X_ACCURACY] = gItemEffect_XAccuracy, - [ITEM_X_SP_ATK] = gItemEffect_XSpecialAttack, - [ITEM_X_SP_DEF] = gItemEffect_XSpecialDefense, + [ITEM_X_ATTACK] = gItemEffect_XAttack, + [ITEM_X_DEFENSE] = gItemEffect_XDefense, + [ITEM_X_SPEED] = gItemEffect_XSpeed, + [ITEM_X_ACCURACY] = gItemEffect_XAccuracy, + [ITEM_X_SP_ATK] = gItemEffect_XSpecialAttack, + [ITEM_X_SP_DEF] = gItemEffect_XSpecialDefense, - [ITEM_DIRE_HIT] = gItemEffect_DireHit, - [ITEM_GUARD_SPEC] = gItemEffect_GuardSpec, + [ITEM_DIRE_HIT] = gItemEffect_DireHit, + [ITEM_GUARD_SPEC] = gItemEffect_GuardSpec, - //[ITEM_MAX_MUSHROOMS] = gItemEffect_MaxMushrooms, // Todo + //[ITEM_MAX_MUSHROOMS] = gItemEffect_MaxMushrooms, // Todo // Evolution Items - [ITEM_FIRE_STONE] = gItemEffect_EvoItem, - [ITEM_WATER_STONE] = gItemEffect_EvoItem, - [ITEM_THUNDER_STONE] = gItemEffect_EvoItem, - [ITEM_LEAF_STONE] = gItemEffect_EvoItem, - [ITEM_ICE_STONE] = gItemEffect_EvoItem, - [ITEM_SUN_STONE] = gItemEffect_EvoItem, - [ITEM_MOON_STONE] = gItemEffect_EvoItem, - [ITEM_SHINY_STONE] = gItemEffect_EvoItem, - [ITEM_DUSK_STONE] = gItemEffect_EvoItem, - [ITEM_DAWN_STONE] = gItemEffect_EvoItem, - [ITEM_SWEET_APPLE] = gItemEffect_EvoItem, - [ITEM_TART_APPLE] = gItemEffect_EvoItem, - [ITEM_CRACKED_POT] = gItemEffect_EvoItem, - [ITEM_CHIPPED_POT] = gItemEffect_EvoItem, - [ITEM_GALARICA_CUFF] = gItemEffect_EvoItem, - [ITEM_GALARICA_WREATH] = gItemEffect_EvoItem, + [ITEM_FIRE_STONE] = gItemEffect_EvoItem, + [ITEM_WATER_STONE] = gItemEffect_EvoItem, + [ITEM_THUNDER_STONE] = gItemEffect_EvoItem, + [ITEM_LEAF_STONE] = gItemEffect_EvoItem, + [ITEM_ICE_STONE] = gItemEffect_EvoItem, + [ITEM_SUN_STONE] = gItemEffect_EvoItem, + [ITEM_MOON_STONE] = gItemEffect_EvoItem, + [ITEM_SHINY_STONE] = gItemEffect_EvoItem, + [ITEM_DUSK_STONE] = gItemEffect_EvoItem, + [ITEM_DAWN_STONE] = gItemEffect_EvoItem, + [ITEM_SWEET_APPLE] = gItemEffect_EvoItem, + [ITEM_TART_APPLE] = gItemEffect_EvoItem, + [ITEM_CRACKED_POT] = gItemEffect_EvoItem, + [ITEM_CHIPPED_POT] = gItemEffect_EvoItem, + [ITEM_GALARICA_CUFF] = gItemEffect_EvoItem, + [ITEM_GALARICA_WREATH] = gItemEffect_EvoItem, + [ITEM_AUSPICIOUS_ARMOR] = gItemEffect_EvoItem, + [ITEM_MALICIOUS_ARMOR] = gItemEffect_EvoItem, + [ITEM_SCROLL_OF_DARKNESS] = gItemEffect_EvoItem, + [ITEM_SCROLL_OF_WATERS] = gItemEffect_EvoItem, // Berries - [ITEM_CHERI_BERRY] = gItemEffect_CheriBerry, - [ITEM_CHESTO_BERRY] = gItemEffect_ChestoBerry, - [ITEM_PECHA_BERRY] = gItemEffect_PechaBerry, - [ITEM_RAWST_BERRY] = gItemEffect_RawstBerry, - [ITEM_ASPEAR_BERRY] = gItemEffect_AspearBerry, - [ITEM_LEPPA_BERRY] = gItemEffect_LeppaBerry, - [ITEM_ORAN_BERRY] = gItemEffect_OranBerry, - [ITEM_PERSIM_BERRY] = gItemEffect_PersimBerry, - [ITEM_LUM_BERRY] = gItemEffect_FullHeal, - [ITEM_SITRUS_BERRY] = gItemEffect_SitrusBerry, - [ITEM_POMEG_BERRY] = gItemEffect_PomegBerry, - [ITEM_KELPSY_BERRY] = gItemEffect_KelpsyBerry, - [ITEM_QUALOT_BERRY] = gItemEffect_QualotBerry, - [ITEM_HONDEW_BERRY] = gItemEffect_HondewBerry, - [ITEM_GREPA_BERRY] = gItemEffect_GrepaBerry, - [ITEM_TAMATO_BERRY] = gItemEffect_TamatoBerry, - [LAST_BERRY_INDEX] = NULL, + [ITEM_CHERI_BERRY] = gItemEffect_CheriBerry, + [ITEM_CHESTO_BERRY] = gItemEffect_ChestoBerry, + [ITEM_PECHA_BERRY] = gItemEffect_PechaBerry, + [ITEM_RAWST_BERRY] = gItemEffect_RawstBerry, + [ITEM_ASPEAR_BERRY] = gItemEffect_AspearBerry, + [ITEM_LEPPA_BERRY] = gItemEffect_LeppaBerry, + [ITEM_ORAN_BERRY] = gItemEffect_OranBerry, + [ITEM_PERSIM_BERRY] = gItemEffect_PersimBerry, + [ITEM_LUM_BERRY] = gItemEffect_FullHeal, + [ITEM_SITRUS_BERRY] = gItemEffect_SitrusBerry, + [ITEM_POMEG_BERRY] = gItemEffect_PomegBerry, + [ITEM_KELPSY_BERRY] = gItemEffect_KelpsyBerry, + [ITEM_QUALOT_BERRY] = gItemEffect_QualotBerry, + [ITEM_HONDEW_BERRY] = gItemEffect_HondewBerry, + [ITEM_GREPA_BERRY] = gItemEffect_GrepaBerry, + [ITEM_TAMATO_BERRY] = gItemEffect_TamatoBerry, + [LAST_BERRY_INDEX] = NULL, }; diff --git a/src/party_menu.c b/src/party_menu.c index 6964fa0c5968..9185657a78b6 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -5516,7 +5516,8 @@ void ItemUseCB_EvolutionStone(u8 taskId, TaskFunc task) } else { - RemoveBagItem(gSpecialVar_ItemId, 1); + if (ItemId_GetPocket(gSpecialVar_ItemId) != POCKET_KEY_ITEMS) + RemoveBagItem(gSpecialVar_ItemId, 1); FreePartyPointers(); } } From e601719c911b7c21421c36c69089a9f379e2704d Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Fri, 24 Mar 2023 00:04:08 +0100 Subject: [PATCH 198/428] Add new PLA form change items --- include/constants/items.h | 6 +++- src/data/item_icon_table.h | 3 ++ src/data/items.h | 36 +++++++++++++++++++ src/data/pokemon/form_change_table_pointers.h | 4 +++ src/data/pokemon/form_change_tables.h | 14 +++++++- src/data/text/item_descriptions.h | 15 ++++++++ 6 files changed, 76 insertions(+), 2 deletions(-) diff --git a/include/constants/items.h b/include/constants/items.h index d7d32537627d..2d186601b6a3 100644 --- a/include/constants/items.h +++ b/include/constants/items.h @@ -965,7 +965,11 @@ #define ITEM_STEEL_TERA_SHARD 790 #define ITEM_WATER_TERA_SHARD 791 -#define ITEMS_COUNT 792 +#define ITEM_ADAMANT_CRYSTAL 792 +#define ITEM_GRISEOUS_CORE 793 +#define ITEM_LUSTROUS_GLOBE 794 + +#define ITEMS_COUNT 795 #define ITEM_FIELD_ARROW ITEMS_COUNT // A special item id associated with "Cancel"/"Exit" etc. in a list of items or decorations diff --git a/src/data/item_icon_table.h b/src/data/item_icon_table.h index 0dbec3f856d0..a0c27ea72ae9 100644 --- a/src/data/item_icon_table.h +++ b/src/data/item_icon_table.h @@ -837,6 +837,9 @@ const u32 *const gItemIconTable[ITEMS_COUNT + 1][2] = [ITEM_ROCK_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_RockTeraShard, gItemIconPalette_RockTeraShard}, [ITEM_STEEL_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_SteelTeraShard, gItemIconPalette_SteelTeraShard}, [ITEM_WATER_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_WaterTeraShard, gItemIconPalette_WaterTeraShard}, + [ITEM_ADAMANT_CRYSTAL] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_AdamantCrystal, gItemIconPalette_AdamantCrystal}, + [ITEM_GRISEOUS_CORE] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_GriseousCore, gItemIconPalette_GriseousCore}, + [ITEM_LUSTROUS_GLOBE] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_LustrousGlobe, gItemIconPalette_LustrousGlobe}, // Return to field arrow [ITEMS_COUNT] = {gItemIcon_ReturnToFieldArrow, gItemIconPalette_ReturnToFieldArrow}, }; diff --git a/src/data/items.h b/src/data/items.h index 982375f3eef4..82e41901c91a 100644 --- a/src/data/items.h +++ b/src/data/items.h @@ -10247,4 +10247,40 @@ const struct Item gItems[] = .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, }, + + [ITEM_ADAMANT_CRYSTAL] = + { + .name = _("AdamantCrystl"), + .itemId = ITEM_ADAMANT_CRYSTAL, + .price = 0, + .description = sAdamantCrystalDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 60, + }, + + [ITEM_GRISEOUS_CORE] = + { + .name = _("Griseous Core"), + .itemId = ITEM_GRISEOUS_CORE, + .price = 0, + .description = sGriseousCoreDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 60, + }, + + [ITEM_LUSTROUS_GLOBE] = + { + .name = _("LustrousGlobe"), + .itemId = ITEM_LUSTROUS_GLOBE, + .price = 0, + .description = sLustrousGlobeDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 60, + }, }; diff --git a/src/data/pokemon/form_change_table_pointers.h b/src/data/pokemon/form_change_table_pointers.h index 90be7112b699..62afeb2e052e 100644 --- a/src/data/pokemon/form_change_table_pointers.h +++ b/src/data/pokemon/form_change_table_pointers.h @@ -1,6 +1,10 @@ const struct FormChange *const gFormChangeTablePointers[NUM_SPECIES] = { #if P_GEN_4_POKEMON == TRUE + [SPECIES_DIALGA] = sDialgaFormChangeTable, + [SPECIES_DIALGA_ORIGIN] = sDialgaFormChangeTable, + [SPECIES_PALKIA] = sPalkiaFormChangeTable, + [SPECIES_PALKIA_ORIGIN] = sPalkiaFormChangeTable, [SPECIES_GIRATINA] = sGiratinaFormChangeTable, [SPECIES_GIRATINA_ORIGIN] = sGiratinaFormChangeTable, [SPECIES_SHAYMIN] = sShayminFormChangeTable, diff --git a/src/data/pokemon/form_change_tables.h b/src/data/pokemon/form_change_tables.h index 94da0add3636..723bda4b2ded 100644 --- a/src/data/pokemon/form_change_tables.h +++ b/src/data/pokemon/form_change_tables.h @@ -44,9 +44,21 @@ #define NIGHT 2 #if P_GEN_4_POKEMON == TRUE +static const struct FormChange sDialgaFormChangeTable[] = { + {FORM_ITEM_HOLD, SPECIES_DIALGA, ITEM_NONE}, + {FORM_ITEM_HOLD, SPECIES_DIALGA_ORIGIN, ITEM_ADAMANT_CRYSTAL}, + {FORM_CHANGE_END}, +}; + +static const struct FormChange sPalkiaFormChangeTable[] = { + {FORM_ITEM_HOLD, SPECIES_PALKIA, ITEM_NONE}, + {FORM_ITEM_HOLD, SPECIES_PALKIA_ORIGIN, ITEM_LUSTROUS_GLOBE}, + {FORM_CHANGE_END}, +}; + static const struct FormChange sGiratinaFormChangeTable[] = { {FORM_ITEM_HOLD, SPECIES_GIRATINA, ITEM_NONE}, - {FORM_ITEM_HOLD, SPECIES_GIRATINA_ORIGIN, ITEM_GRISEOUS_ORB}, + {FORM_ITEM_HOLD, SPECIES_GIRATINA_ORIGIN, ITEM_GRISEOUS_CORE}, {FORM_CHANGE_END}, }; diff --git a/src/data/text/item_descriptions.h b/src/data/text/item_descriptions.h index cee413aa5141..da15f001c8b4 100644 --- a/src/data/text/item_descriptions.h +++ b/src/data/text/item_descriptions.h @@ -3877,3 +3877,18 @@ static const u8 sTeraShardDesc[] = _( "These shards may\n" "form when a Tera\n" "Pokémon faints."); + +static const u8 sAdamantCrystalDesc[] = _( + "A large, glowing gem\n" + "that lets Dialga\n" + "change form."); + +static const u8 sGriseousCoreDesc[] = _( + "A large, glowing gem\n" + "that lets Giratina\n" + "change form."); + +static const u8 sLustrousGlobeDesc[] = _( + "A large, glowing gem\n" + "that lets Palkia\n" + "change form."); From cd6d71cd01118ecab1405ddf28ce8dc4b00a51fb Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Fri, 24 Mar 2023 00:50:06 +0100 Subject: [PATCH 199/428] Add most of the new item icons (Clear Amulet & Shards missing) --- .../items/icon_palettes/ability_shield.pal | 19 ++++++ .../items/icon_palettes/adamant_crystal.pal | 19 ++++++ .../items/icon_palettes/auspicious_armor.pal | 19 ++++++ .../items/icon_palettes/big_bamboo_shoot.pal | 19 ++++++ .../items/icon_palettes/booster_energy.pal | 19 ++++++ graphics/items/icon_palettes/covert_cloak.pal | 19 ++++++ .../items/icon_palettes/gimmighoul_coin.pal | 19 ++++++ .../items/icon_palettes/griseous_core.pal | 19 ++++++ .../items/icon_palettes/leaders_crest.pal | 19 ++++++ graphics/items/icon_palettes/loaded_dice.pal | 19 ++++++ .../items/icon_palettes/lustrous_globe.pal | 19 ++++++ .../items/icon_palettes/malicious_armor.pal | 19 ++++++ graphics/items/icon_palettes/mirror_herb.pal | 19 ++++++ .../items/icon_palettes/punching_glove.pal | 19 ++++++ .../icon_palettes/scroll_of_darkness.pal | 19 ++++++ .../items/icon_palettes/scroll_of_waters.pal | 19 ++++++ graphics/items/icon_palettes/tera_orb.pal | 19 ++++++ .../items/icon_palettes/tiny_bamboo_shoot.pal | 19 ++++++ graphics/items/icons/ability_shield.png | Bin 0 -> 692 bytes graphics/items/icons/adamant_crystal.png | Bin 0 -> 735 bytes graphics/items/icons/auspicious_armor.png | Bin 0 -> 710 bytes graphics/items/icons/big_bamboo_shoot.png | Bin 0 -> 300 bytes graphics/items/icons/booster_energy.png | Bin 0 -> 309 bytes graphics/items/icons/covert_cloak.png | Bin 0 -> 308 bytes graphics/items/icons/gimmighoul_coin.png | Bin 0 -> 270 bytes graphics/items/icons/griseous_core.png | Bin 0 -> 724 bytes graphics/items/icons/leaders_crest.png | Bin 0 -> 276 bytes graphics/items/icons/loaded_dice.png | Bin 0 -> 307 bytes graphics/items/icons/lustrous_globe.png | Bin 0 -> 750 bytes graphics/items/icons/malicious_armor.png | Bin 0 -> 690 bytes graphics/items/icons/mirror_herb.png | Bin 0 -> 331 bytes graphics/items/icons/punching_glove.png | Bin 0 -> 682 bytes graphics/items/icons/scroll_of_darkness.png | Bin 0 -> 264 bytes graphics/items/icons/scroll_of_waters.png | Bin 0 -> 264 bytes graphics/items/icons/tera_orb.png | Bin 0 -> 327 bytes graphics/items/icons/tiny_bamboo_shoot.png | Bin 0 -> 249 bytes include/graphics.h | 39 ++++++++++++ src/data/graphics/items.h | 60 +++++++++++++++--- src/data/item_icon_table.h | 36 +++++------ 39 files changed, 451 insertions(+), 26 deletions(-) create mode 100644 graphics/items/icon_palettes/ability_shield.pal create mode 100644 graphics/items/icon_palettes/adamant_crystal.pal create mode 100644 graphics/items/icon_palettes/auspicious_armor.pal create mode 100644 graphics/items/icon_palettes/big_bamboo_shoot.pal create mode 100644 graphics/items/icon_palettes/booster_energy.pal create mode 100644 graphics/items/icon_palettes/covert_cloak.pal create mode 100644 graphics/items/icon_palettes/gimmighoul_coin.pal create mode 100644 graphics/items/icon_palettes/griseous_core.pal create mode 100644 graphics/items/icon_palettes/leaders_crest.pal create mode 100644 graphics/items/icon_palettes/loaded_dice.pal create mode 100644 graphics/items/icon_palettes/lustrous_globe.pal create mode 100644 graphics/items/icon_palettes/malicious_armor.pal create mode 100644 graphics/items/icon_palettes/mirror_herb.pal create mode 100644 graphics/items/icon_palettes/punching_glove.pal create mode 100644 graphics/items/icon_palettes/scroll_of_darkness.pal create mode 100644 graphics/items/icon_palettes/scroll_of_waters.pal create mode 100644 graphics/items/icon_palettes/tera_orb.pal create mode 100644 graphics/items/icon_palettes/tiny_bamboo_shoot.pal create mode 100644 graphics/items/icons/ability_shield.png create mode 100644 graphics/items/icons/adamant_crystal.png create mode 100644 graphics/items/icons/auspicious_armor.png create mode 100644 graphics/items/icons/big_bamboo_shoot.png create mode 100644 graphics/items/icons/booster_energy.png create mode 100644 graphics/items/icons/covert_cloak.png create mode 100644 graphics/items/icons/gimmighoul_coin.png create mode 100644 graphics/items/icons/griseous_core.png create mode 100644 graphics/items/icons/leaders_crest.png create mode 100644 graphics/items/icons/loaded_dice.png create mode 100644 graphics/items/icons/lustrous_globe.png create mode 100644 graphics/items/icons/malicious_armor.png create mode 100644 graphics/items/icons/mirror_herb.png create mode 100644 graphics/items/icons/punching_glove.png create mode 100644 graphics/items/icons/scroll_of_darkness.png create mode 100644 graphics/items/icons/scroll_of_waters.png create mode 100644 graphics/items/icons/tera_orb.png create mode 100644 graphics/items/icons/tiny_bamboo_shoot.png diff --git a/graphics/items/icon_palettes/ability_shield.pal b/graphics/items/icon_palettes/ability_shield.pal new file mode 100644 index 000000000000..d11016b32c43 --- /dev/null +++ b/graphics/items/icon_palettes/ability_shield.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 255 +248 200 240 +224 176 232 +200 144 224 +240 224 248 +176 120 216 +77 146 186 +105 179 221 +238 246 246 +222 222 222 +197 197 197 +161 161 161 +48 48 48 +255 255 255 +0 0 0 diff --git a/graphics/items/icon_palettes/adamant_crystal.pal b/graphics/items/icon_palettes/adamant_crystal.pal new file mode 100644 index 000000000000..738ff049810e --- /dev/null +++ b/graphics/items/icon_palettes/adamant_crystal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 255 +184 208 248 +168 200 248 +81 123 173 +128 168 216 +200 232 248 +224 248 248 +248 248 248 +104 104 104 +48 48 48 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/auspicious_armor.pal b/graphics/items/icon_palettes/auspicious_armor.pal new file mode 100644 index 000000000000..9d0c8e444c42 --- /dev/null +++ b/graphics/items/icon_palettes/auspicious_armor.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 255 +160 144 32 +192 176 56 +224 208 88 +128 112 32 +72 56 24 +224 80 80 +176 88 88 +120 72 72 +48 48 48 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/big_bamboo_shoot.pal b/graphics/items/icon_palettes/big_bamboo_shoot.pal new file mode 100644 index 000000000000..28ab4fe69972 --- /dev/null +++ b/graphics/items/icon_palettes/big_bamboo_shoot.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +189 202 71 +121 168 43 +120 167 42 +163 126 74 +116 101 78 +79 66 46 +115 77 43 +180 133 94 +233 176 96 +241 241 193 +183 170 147 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/booster_energy.pal b/graphics/items/icon_palettes/booster_energy.pal new file mode 100644 index 000000000000..21dc17ba2fbb --- /dev/null +++ b/graphics/items/icon_palettes/booster_energy.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +111 45 22 +0 0 0 +190 91 13 +255 139 1 +255 255 255 +255 231 10 +251 42 6 +154 157 151 +193 161 19 +234 238 234 +122 111 115 +74 67 68 +90 185 248 +78 86 255 +111 52 255 diff --git a/graphics/items/icon_palettes/covert_cloak.pal b/graphics/items/icon_palettes/covert_cloak.pal new file mode 100644 index 000000000000..06491d2ada43 --- /dev/null +++ b/graphics/items/icon_palettes/covert_cloak.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +54 52 72 +101 120 143 +103 139 163 +84 105 130 +74 75 101 +90 108 136 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/gimmighoul_coin.pal b/graphics/items/icon_palettes/gimmighoul_coin.pal new file mode 100644 index 000000000000..555a04dbe303 --- /dev/null +++ b/graphics/items/icon_palettes/gimmighoul_coin.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +180 124 35 +115 66 13 +255 249 234 +224 159 27 +255 226 121 +255 200 59 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/griseous_core.pal b/graphics/items/icon_palettes/griseous_core.pal new file mode 100644 index 000000000000..05980782c65f --- /dev/null +++ b/graphics/items/icon_palettes/griseous_core.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 255 +206 181 41 +222 198 57 +247 231 140 +156 132 33 +189 156 41 +123 99 33 +49 49 49 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/leaders_crest.pal b/graphics/items/icon_palettes/leaders_crest.pal new file mode 100644 index 000000000000..1f60ee2204f5 --- /dev/null +++ b/graphics/items/icon_palettes/leaders_crest.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +188 143 70 +131 85 43 +186 181 176 +80 74 71 +239 185 78 +138 128 128 +220 217 215 +250 225 159 +246 205 93 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/loaded_dice.pal b/graphics/items/icon_palettes/loaded_dice.pal new file mode 100644 index 000000000000..16624b9e9e60 --- /dev/null +++ b/graphics/items/icon_palettes/loaded_dice.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +48 52 78 +127 216 17 +0 0 0 +192 240 140 +128 217 18 +90 137 46 +129 218 19 +88 135 48 +107 182 17 +128 217 18 +93 144 44 +89 136 47 +255 255 255 +127 216 19 +48 38 64 diff --git a/graphics/items/icon_palettes/lustrous_globe.pal b/graphics/items/icon_palettes/lustrous_globe.pal new file mode 100644 index 000000000000..b62730a16139 --- /dev/null +++ b/graphics/items/icon_palettes/lustrous_globe.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 255 +248 216 232 +198 159 217 +210 171 229 +224 192 240 +210 192 240 +160 192 232 +144 200 232 +160 216 240 +128 216 224 +208 240 240 +248 240 240 +248 248 248 +80 80 80 +48 48 48 diff --git a/graphics/items/icon_palettes/malicious_armor.pal b/graphics/items/icon_palettes/malicious_armor.pal new file mode 100644 index 000000000000..1ef3efe89ecf --- /dev/null +++ b/graphics/items/icon_palettes/malicious_armor.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 255 +66 66 99 +90 90 132 +115 115 156 +90 115 230 +132 140 181 +125 147 246 +48 48 48 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/mirror_herb.pal b/graphics/items/icon_palettes/mirror_herb.pal new file mode 100644 index 000000000000..b4ad3f972646 --- /dev/null +++ b/graphics/items/icon_palettes/mirror_herb.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +39 194 168 +124 228 211 +19 101 84 +187 228 77 +238 250 169 +234 244 124 +24 152 108 +126 106 28 +173 171 15 +43 138 128 +127 175 55 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/punching_glove.pal b/graphics/items/icon_palettes/punching_glove.pal new file mode 100644 index 000000000000..f21cb39ec565 --- /dev/null +++ b/graphics/items/icon_palettes/punching_glove.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 255 +255 212 0 +200 56 32 +248 64 48 +232 232 232 +48 48 48 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/scroll_of_darkness.pal b/graphics/items/icon_palettes/scroll_of_darkness.pal new file mode 100644 index 000000000000..1b66d85e00d6 --- /dev/null +++ b/graphics/items/icon_palettes/scroll_of_darkness.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +130 116 116 +86 86 86 +54 41 49 +104 78 86 +56 56 56 +141 105 41 +223 191 65 +242 241 242 +184 172 179 +186 140 57 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/scroll_of_waters.pal b/graphics/items/icon_palettes/scroll_of_waters.pal new file mode 100644 index 000000000000..41a94976f012 --- /dev/null +++ b/graphics/items/icon_palettes/scroll_of_waters.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +118 109 109 +143 130 127 +101 77 83 +73 68 68 +122 108 104 +141 105 41 +223 191 65 +242 241 242 +184 172 179 +186 140 57 +102 78 84 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/tera_orb.pal b/graphics/items/icon_palettes/tera_orb.pal new file mode 100644 index 000000000000..78b3689f9d05 --- /dev/null +++ b/graphics/items/icon_palettes/tera_orb.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +81 41 75 +98 61 92 +66 72 65 +51 4 43 +201 185 199 +110 86 106 +84 73 92 +32 41 34 +255 255 255 +71 50 92 +64 71 94 +139 165 201 +183 191 209 +0 0 0 diff --git a/graphics/items/icon_palettes/tiny_bamboo_shoot.pal b/graphics/items/icon_palettes/tiny_bamboo_shoot.pal new file mode 100644 index 000000000000..1172befa6c59 --- /dev/null +++ b/graphics/items/icon_palettes/tiny_bamboo_shoot.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +111 167 43 +179 192 68 +107 144 66 +84 116 48 +68 93 37 +124 137 52 +168 87 80 +168 116 111 +241 241 193 +168 87 80 +183 170 147 +121 52 57 +0 0 0 +0 0 0 diff --git a/graphics/items/icons/ability_shield.png b/graphics/items/icons/ability_shield.png new file mode 100644 index 0000000000000000000000000000000000000000..de7354d71f8ab38c4042d94cfad8b58b856dc5f2 GIT binary patch literal 692 zcmV;l0!#ggP)EX>4Tx04R}tkv&MmKpe$i(@I4u4t5ZA$j~}j5EXHhDi*;)X)CnqU~=gfG-*gu zTpR`0f`cE6RR0!X5l%$?&0I>U5saWpZjz4D+QAQK9P8i>4rtTK|Hf* z>74h8!>lYR#OK8023?T&k?XR{Z=6dG3p_JyWYhD+VPdh=#c~(3vY`@B6Gs$PqkJLf zvch?bvs$gQ_C5IvLj`Rm!*!aYNMH#`q#!~@9TikzAx5i4iitGs$36VRjz2{%nOqex zax9<*6_Voz|AXJ%n#HL}Hz^bcdR}b%BMJm}fmXw|zmILZbprUGfh(=!uQh?$PtqG5 zEph}5Yy%h99ZlW?E_Z;TCtWfmNAlAYibdf4jJ_!k4Bi5LYi@7teVjf3S?X%}1~@nb z#!8gE?(y#4?%w`A)9&vFlVWnTjs1QK0000mP)t-s00030|Nr>N@ZhlM$dKUh;P|k3 z*iDkUX|vt#_V(W1-o?emp`oELFfjlB{{R30f`gsi0000GbW%=J0RR90|NsC0|NsC0 z|NsC0z)*`r0001!Nkl8f8U5zc zlZ8E!NQqx7-RP-z+M?uzA6lc2s23cMnUkR#m}&(K$w2i8$sh(tGeMH`(+%uUYZLaM z=*X~NcXYPi1UZ4-ng9m-D<*)S0+imz83rTxKqU1(!3az4Z4x5aKE!kDT|D=G{oIHC a_q+k9MhXH6sl^!p0000fQS8WW2&PqdmRCNqX=2;|!TkpJ`Unud?RrDvnWg}+IW^2rVL;u+U;U;n%pM-e+KMKTt7o)AiVUcQ4<(y+1wb?_Y*1CPn8WH}?qvW5^)DC&U#< z|NsAg$Aup&PW%Y0UfZzZ#)%g{9{d1-jEoEe0|THePz@ZUCdg+2IRYg?e!(D}$lyRg zw=+;~v!{z=h{nXN6L0e!R^V~g?oj;rzy5>Fi$i8_6ZN~Vn0+eLoAUZsw1LtI{a*#& z0~f^1kw37vIpxQk4;SY(6ss8)GG73yk)hf%1JM;eJ}Ybc+V+Rw`b-1mnIFD7dk5G*jj5|=hnD-^J$(E+wkN%E{_o;1+N_fq?Iu?Ay=-&c<7l%v^W~iH zorl-xXdZcf=+_n zW&LEcuwXgnHD&L+kMHiiyZ6ub^1Ju!laq?J^!}{_MU+8+Plzj!{{R2~f(Z%-Hds8k z5YbSe;9(*0ARu5vL_~#$hk=0sP!^~L4zd;t_5(QrB|(0{Af3qIKtQ)MP;RNGi(`n! z#HE23g$^rly!I5B_5c3^*0P zU#>Q+uaZTQD!GDu72M<7jVC@c;t_oKROLg*lHI#LhAr@2A9N)&Zr!Sf0av6`6`xG0 zDbn1>mO6LVRAasD2MXWje*d~b+-QGTSXY{0S#re7z?mD3a+>0J<5hFKk{>ng6EZ!% jvFq#c3Z1tF$nMpaRt&q zu=kXE92{GIfQeYLl=#=YE-@bTlp?W-n3lmW?8&QGrbDS?t8zhH*{ z|Ns93Vi<`2dRzx6*XQZt7@{$;b<%CVW&}?|IAO7FBX7?4=UHQz*=Ese_mu|%~ zYH!fx*cR@pu-7}`MYTSMj%Vn?jjO}fI5ux&$czp=Y3gC4^~tnfOSti~5{G;~+rlje zm0jAL)HLURu|7EUO8dhnEJnT`H!hs>%)_eb*bgte<8S}f%;zgQB3PGY)7NJlYFo4K d;j8)`ubFlCu)NHY>l6oh!PC{xWt~$(699KKc>w?b literal 0 HcmV?d00001 diff --git a/graphics/items/icons/booster_energy.png b/graphics/items/icons/booster_energy.png new file mode 100644 index 0000000000000000000000000000000000000000..df583a2508d4e908ff8c32664f65480c4da30528 GIT binary patch literal 309 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbMaAF%}28J29*~C-V}>F$nMpaRt)( zx?(_bUo`LkZpQyW@SN+n7Tc`3(+@5be)aBERerITvrE*@AAVu~^G*IU*UvKmsum~- z@(X4FsYU_^0=k`na??Fs978lF_D=E?J8Zz=tlM^r(`4WO+~(aZVyT*Y`Q0jd{&Owx zOWWY_c*6>Y7@3-o=TC0+M7S<9P=49{;>?aB{av}b?4Mmd_lHY_wf)Y0x9yDA;`Of{ zpRP%HAaRS~+ncrb7@k$<>pR$-IQM}kV9kfmMh7~!@=sF$nMpaRt&q zU}oZxTG5~0y*MPZ$;&%6DyIV?j!C{d_dE_LDo_&S7tHV<6&wiYb_U8#^K@|x(U_P! zDUgpvk;8eZ^T&VY_ngXv*m8U1Yc;htg-!N+tz>hl^}t>EV~%HHyN^g3+)$ll=aQzv zEjmL`+uoCB!~X<+g-^dE7=FLfS3Z*>U)KNl~s zV^~wB!f?CRc!6*PlXQVft)oeTsC7e|0<+`awYT4_`#sImo^7ey^0VjpSBo>x>7OsG P3G$PttDnm{r-UW|j&*9# literal 0 HcmV?d00001 diff --git a/graphics/items/icons/gimmighoul_coin.png b/graphics/items/icons/gimmighoul_coin.png new file mode 100644 index 0000000000000000000000000000000000000000..b161cf12ac37b2e9eaa9beeb36382e8e3e97d9e4 GIT binary patch literal 270 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbMaAF%}28J29*~C-V}>F$nMpaRt&_ zYLttec>n)=^A)n z2SpDka5ziz6#nm(UQ_#u!FHt6`zyLClZz{=(PSIF}1I-uJVTbg@^6O{5H=%z@p<_8|%G)m**9O`N2sqTYv4@ dE&pkIDRYD()2!=@=KTY?+0)g}Wt~$(695QOXPN*2 literal 0 HcmV?d00001 diff --git a/graphics/items/icons/griseous_core.png b/graphics/items/icons/griseous_core.png new file mode 100644 index 0000000000000000000000000000000000000000..08748fe7bba170faebb029c29aa9fc4b8046143e GIT binary patch literal 724 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbQ|Pfw4c+**PE}BfliSI3vG6!PD7U zp`a)~Ei)&Tfk9(p?L=FT!wxb>fQS8WW2&PqdmRCNqX=2;|!TkpJ`Unud?RrDvnWg}+IW^2rVL;u+U;U;n%pM-e+KMKTt7o)AiVUcQ4<(y+1wb?_Y*1CPn8WH}?qvW5^)DC&U#< z|NsC0+*Zwd$1J};@0ru0xOa|bb+V$Np&?KlD2oQl0xWg|g#=21{DMI`k->q0ZfBs} z3Qrfu5RHjTCpropHsD|mZf^Pa|B+I9)NbD@En~Zg*B%aikJqn?uX+`i{;99y;{)-P zlS0@Q#GJ0#Q0m7pWtz9!#EB*=c^6zwNP8{4LW;r7rTOz@@e>A$?#)d198OpSZV$Nd zX_m^J8DH)67tIiSDwG(z{9fn2Z|C*OA}u tXl*c?-tNWQ?yd{<+VQvDYTf$vUs;$V*>)OpRnGx=(bLt>Wt~$(6995%J!Sv^ literal 0 HcmV?d00001 diff --git a/graphics/items/icons/leaders_crest.png b/graphics/items/icons/leaders_crest.png new file mode 100644 index 0000000000000000000000000000000000000000..b105fcd29d95d1ff1f2c240fea023c8001e9db50 GIT binary patch literal 276 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbMaAF%}28J29*~C-V}>F$nMpaRt&q zu&3XxIaGVs)(rt(?(cW{bu~2Hxq1E9!};IN#zGXp$se5`4+1#?B|(0{4F6HVfq-sj zpj?@!i(`n!#I1prOa~M=9tU0dZ@**V;=~+RSs{-AmwyqfqS(Lt&R9MBsPBrI;YW6K zTFOqW6mCsA9;9X9V&WCLA$j8@#`7sluP@$sFD^gf_1;82MLmn-O6*%p8q~{Mrm20B uJZ_#kU0->^y$42O2~y2_lwUnqe~sDVE7Pe4Cr literal 0 HcmV?d00001 diff --git a/graphics/items/icons/loaded_dice.png b/graphics/items/icons/loaded_dice.png new file mode 100644 index 0000000000000000000000000000000000000000..1295450928df350a450cc87ab127f5248959175e GIT binary patch literal 307 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbMaAF%}28J29*~C-V}>F$nMpaRt#P ze)Ts5fs6wmdKzvDMRn>m-V%;zH^|;52;|02(24BO|NsAg{S9FQH3!|-_8=PsN`m}? z8Gxey|A7bywKK{18BlJjr;B5V#>Bl74)PsQ;Bax32zKiE|9^Y;me4zo<-To=OZ#+S z+m!!~-Rt-0^|i4&a4&4!tT53$#>In6`yJZ?ZqJVi=Zazug~eRh&KcLr^O;jwJ11q| zrfvrn?KLh@o+ZWFZ(U6k1qO+6Kl3EAAL;D1FQMlpyWq9QZ2M0zm;*YR}^4`1&hJj?yupCc&e4F-4w z;yI@2Ch-Pwbko#0?-PeuNtB7ti6?ZrAn_yDC5PWQ7j5?P%#fZ*%@c=+g<=Ow9n4C) zLOeqpmKBxqy;+B4&Rd+7N{zMd$zK@At1D@)(;Pt@OGqFI0TOB`qXH8VT2)dEq-a0p z;vcsCNpeZ#Dua<@0aYjvZ9n)Q{O;B$OiwvUff&&JVp$(!fPWWg)-CJ%*s_`@fbSW& zQrrG&1DO3Jz24TsM?n8JaB8-Vo z(+40!T`k`L2Zz9Tk+Roa-rdvL+rMX8{rv#cG;+>avyKt~001yhOjJbx00960|M=MG z#-G{JtL5Op@Y2BWpup&m$mpQh@POFh(D3m1@bLKf_)t(#FfcGLRPaau000nlQchC< z|NsC0|NsC0|NsC0|NsBMP>VwV006>CL_t(2k%f{`4#OY}Lnj)uKq1`!wljpbw9_>I zRPw_KBz?X9$*fUkPrD&hDxlp^Lk%&?wn?aHi%&aI6SdXPlp~RY80hbH&q^hd0Gk1% z%*F#~Ch-UZ1V=*SCh&*_AS+vFPGnI43FejHhtr<)J;11Sfu4xyI>975{R?EoVNc&d zZ%)N{+CZ^+-J#?kHlHsXP3Wr*e`BB>BROk`obU4?`q?fPD(iR;a`XG5iX#bSU6il3 gP|wx={u#dY0duGe>o^(Lg8%>k07*qoM6N<$f=vBdUH||9 literal 0 HcmV?d00001 diff --git a/graphics/items/icons/malicious_armor.png b/graphics/items/icons/malicious_armor.png new file mode 100644 index 0000000000000000000000000000000000000000..931850013a6d012fc4855aba69ff7a0cffe928c0 GIT binary patch literal 690 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbQ|Pfw3ji**U<|*;%2WC_gPTCzXLg zV`A+@TaUvIGDqVtd%0@yl?jxdxL_42AX+#@OYERiruLRs2}Li(O)@=#Vq{paH#N(5 zhq8;O$I8aAI(}e2a`B|+MOUvs@j)4aj}I2w-@99VXD@S0+SHY42}}W|r#;jkCF$+g zVv83%#KF{&=hnD-^J$(E+wkN%E{_o;1+N_fq?Iu?Ay=-&c<7l%v^W~iH zorl-xXdZcf=+_n zW&LEcuwXgnHD&L+kMHiiyZ6ub^1Ju!laq?J^!}{_MU+8+Plzj!{{R2KlT&h3R7-L3 zoT%bwEj?RnCx0_AFaU}JWzm4S>z6k`A%T)0zhIC~WN;v$+ZiY~(bL5-L}TLG07s$2 z4ji`vw}1LCE`H`p&KuL1Ne&JrYo{|h_MdE5Wa2n}XrWlXOAu$d$$Pf_6_(MO&67_Q z-Q!C6;nJcS|3~0J{-?a?iF2++vOUfh(pvp7IXjb8p*? zJ)Mg>PRwaD5WTmJ*;(VpUZ;5OOFPaNpSoHoSNpf>e`qat{LiHmdK II;Vst0PmeHtpET3 literal 0 HcmV?d00001 diff --git a/graphics/items/icons/mirror_herb.png b/graphics/items/icons/mirror_herb.png new file mode 100644 index 0000000000000000000000000000000000000000..e792bad8294cd25b4411e62c7e9f5de1b7f1fc0f GIT binary patch literal 331 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbMaAF%}28J29*~C-V}>F$nMpaRt&q zpnhmY&6CT*sUf?c_`dtK^3|6bi5WR{Su$%^^J{lC)UP*(CH_Ji$Ht1!&MgubxT~`)h%xZ_GNrUbe{&XRG0n9Wl|ET^@PL?34o{K5-J*l?*|`y7 zXI^Bt%(<9n4!5C{g!;M6869Q zreJ;e64QQ-??#SW#3ojsaGhTqXm|BxCZpWFUk~~3T$L_QVl~d=hnD-^J$(E+wkN%E{_o;1+N_fq?Iu?Ay=-&c<7l%v^W~iH zorl-xXdZcf=+_n zW&LEcuwXgnHD&L+kMHiiyZ6ub^1Ju!laq?J^!}{_MU+8+Plzj!{tpCK7*1Fy{BSUM z@#2MnfdNneD2^4#Eh{(#ln^Kh@(Tv*1nGu?0|DL6K)Fs&7sn8diLDbG`Hm=XI8PV* z`QP78z)!tmXWGq4b}J0#Ki_|)bo0?8ZBx>c7d>JY`0-lh)zt$zRl?j&JR6rUS-Jd# z#OLHoyf!H*%;DYrTNd4Lkh|y5_xc;7irAd5zjM?$>&;J`HrvlsxApH0uP*u9iK=t! uwZt;aMO)r{PoFFxeqaAv*!&mlD}FI#|6?h?YGU&gF$nMpaRt&q z&{R?q78YivX_(;`W?^B`o2hw!zvHKmpLVR-ysO6&q6R{`f39i;vII(k{DK+&qk;ng z-OfO{EKe855RHjzCwlT7FyLT*><}^O|NrePtF+H8462oBK6>ev{2|80!R(79jx^4A zIh%R5^%kjpubErTTOzLg+O3?;x6P(z(w`F_Og;M)rW?;Q)BGMVD_P;QeR+b+f<1Sm k1Mjsr?N2DE`}5R2*6=dprNWffA0W4Ry85}Sb4q9e030c3F$nMpaRt&q zP?nq9-&CLK8|>-gQk9d@o2hw!zvHKmpLVR-ysO7D%`XI^3`ow5no$F!1WJPZf*Jm! zf&&5F&Oo^=PZ!4!jfra~dh#7G;9!325Hach|LrTQw9hRJs+DOzdg+$@A;!hQ?29Ch zG|qTAn|ZeN7O8!&nOn_UBCh?~t(?ub&8BA3pA#QUJ^K`<8_zS-{2nkXS>dyNd4kM> nJ$Iu6@3lAWPbjGS^VB`o@G|42!j#q@Am@3y`njxgN@xNAvm$E` literal 0 HcmV?d00001 diff --git a/graphics/items/icons/tera_orb.png b/graphics/items/icons/tera_orb.png new file mode 100644 index 0000000000000000000000000000000000000000..03ecb8e82c2d5267de84291cc4d4e79e2f12bf98 GIT binary patch literal 327 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbMaAF%}28J29*~C-V}>F$nMpaRt&q z5UA;$WEeNIW(5J~yWRmhr~lXIZH`!LWw)&|VTQ0!-sLas zCoeFEE&h_n`{o>@xI5R=&q3}l_Uv1eJu}zS-Cr_7D(3I1cdIOzo<*AST#o8Ds>pj2 z?G*a@_=L2`1%B%i9FmKdsI!@}UD+pn@#N0RiBI;r-`>4wu>)`0)E^ICZaB6{uVeol zah4M^GkY(8zRG;Ebz#Tr(rdoe`+;3BNh5rlN)=R8>KIJaCKu0rpy85}S Ib4q9e05-0R6aWAK literal 0 HcmV?d00001 diff --git a/graphics/items/icons/tiny_bamboo_shoot.png b/graphics/items/icons/tiny_bamboo_shoot.png new file mode 100644 index 0000000000000000000000000000000000000000..6b24c7e383e46234a138381d7fa8b30383a2b5e3 GIT binary patch literal 249 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbMaAF%}28J29*~C-V}>F$nMpaRt&q zkiT4e^8uIa2~Hs;1}?FxHJv6a!UI;61u3d46@@1yb}qQYP+aJ@X;% zBin-OOt;o#7slkf-O&xM-EmLgeAC}_$2*%9?55u=cvP&rUhl^CnK>P@&o?|}5xnwq b!ThI;%bqgsYv+=T2RX*m)z4*}Q$iB}thHwP literal 0 HcmV?d00001 diff --git a/include/graphics.h b/include/graphics.h index 8b1e0c3a2dba..7cf9030349bb 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -8834,6 +8834,45 @@ extern const u32 gItemIcon_Gem[]; extern const u32 gItemIconPalette_Ruby[]; extern const u32 gItemIconPalette_Sapphire[]; +// GEN IX ITEMS +extern const u32 gItemIcon_AbilityShield[]; +extern const u32 gItemIconPalette_AbilityShield[]; +extern const u32 gItemIcon_AuspiciousArmor[]; +extern const u32 gItemIconPalette_AuspiciousArmor[]; +extern const u32 gItemIcon_BigBambooShoot[]; +extern const u32 gItemIconPalette_BigBambooShoot[]; +extern const u32 gItemIcon_BoosterEnergy[]; +extern const u32 gItemIconPalette_BoosterEnergy[]; +extern const u32 gItemIcon_CovertCloak[]; +extern const u32 gItemIconPalette_CovertCloak[]; +extern const u32 gItemIcon_GimmighoulCoin[]; +extern const u32 gItemIconPalette_GimmighoulCoin[]; +extern const u32 gItemIcon_LeadersCrest[]; +extern const u32 gItemIconPalette_LeadersCrest[]; +extern const u32 gItemIcon_LoadedDice[]; +extern const u32 gItemIconPalette_LoadedDice[]; +extern const u32 gItemIcon_MaliciousArmor[]; +extern const u32 gItemIconPalette_MaliciousArmor[]; +extern const u32 gItemIcon_MirrorHerb[]; +extern const u32 gItemIconPalette_MirrorHerb[]; +extern const u32 gItemIcon_PunchingGlove[]; +extern const u32 gItemIconPalette_PunchingGlove[]; +extern const u32 gItemIcon_ScrollOfDarkness[]; +extern const u32 gItemIconPalette_ScrollOfDarkness[]; +extern const u32 gItemIcon_ScrollOfWaters[]; +extern const u32 gItemIconPalette_ScrollOfWaters[]; +extern const u32 gItemIcon_TeraOrb[]; +extern const u32 gItemIconPalette_TeraOrb[]; +extern const u32 gItemIcon_TinyBambooShoot[]; +extern const u32 gItemIconPalette_TinyBambooShoot[]; + +extern const u32 gItemIcon_AdamantCrystal[]; +extern const u32 gItemIconPalette_AdamantCrystal[]; +extern const u32 gItemIcon_GriseousCore[]; +extern const u32 gItemIconPalette_GriseousCore[]; +extern const u32 gItemIcon_LustrousGlobe[]; +extern const u32 gItemIconPalette_LustrousGlobe[]; + extern const u32 gItemIcon_ReturnToFieldArrow[]; extern const u32 gItemIconPalette_ReturnToFieldArrow[]; diff --git a/src/data/graphics/items.h b/src/data/graphics/items.h index 35ce13db259e..ce4ecf6082da 100644 --- a/src/data/graphics/items.h +++ b/src/data/graphics/items.h @@ -1931,17 +1931,61 @@ const u32 gItemIconPalette_Ruby[] = INCBIN_U32("graphics/items/icon_palettes/rub const u32 gItemIconPalette_Sapphire[] = INCBIN_U32("graphics/items/icon_palettes/sapphire.gbapal.lz"); -//const u32 gItemIcon_AbilityShield[] = INCBIN_U32("graphics/items/icons/ability_shield.4bpp.lz"); -//const u32 gItemIconPalette_AbilityShield[] = INCBIN_U32("graphics/items/icon_palettes/ability_shield.gbapal.lz"); +const u32 gItemIcon_AbilityShield[] = INCBIN_U32("graphics/items/icons/ability_shield.4bpp.lz"); +const u32 gItemIconPalette_AbilityShield[] = INCBIN_U32("graphics/items/icon_palettes/ability_shield.gbapal.lz"); //const u32 gItemIcon_ClearAmulet[] = INCBIN_U32("graphics/items/icons/clear_amulet.4bpp.lz"); //const u32 gItemIconPalette_ClearAmulet[] = INCBIN_U32("graphics/items/icon_palettes/clear_amulet.gbapal.lz"); -//const u32 gItemIcon_PunchingGlove[] = INCBIN_U32("graphics/items/icons/punching_glove.4bpp.lz"); -//const u32 gItemIconPalette_PunchingGlove[] = INCBIN_U32("graphics/items/icon_palettes/punching_glove.gbapal.lz"); +const u32 gItemIcon_PunchingGlove[] = INCBIN_U32("graphics/items/icons/punching_glove.4bpp.lz"); +const u32 gItemIconPalette_PunchingGlove[] = INCBIN_U32("graphics/items/icon_palettes/punching_glove.gbapal.lz"); -//const u32 gItemIcon_CovertCloak[] = INCBIN_U32("graphics/items/icons/covert_cloak.4bpp.lz"); -//const u32 gItemIconPalette_CovertCloak[] = INCBIN_U32("graphics/items/icon_palettes/covert_cloak.gbapal.lz"); +const u32 gItemIcon_CovertCloak[] = INCBIN_U32("graphics/items/icons/covert_cloak.4bpp.lz"); +const u32 gItemIconPalette_CovertCloak[] = INCBIN_U32("graphics/items/icon_palettes/covert_cloak.gbapal.lz"); -//const u32 gItemIcon_LoadedDice[] = INCBIN_U32("graphics/items/icons/loaded_dice.4bpp.lz"); -//const u32 gItemIconPalette_LoadedDice[] = INCBIN_U32("graphics/items/icon_palettes/loaded_dice.gbapal.lz"); +const u32 gItemIcon_LoadedDice[] = INCBIN_U32("graphics/items/icons/loaded_dice.4bpp.lz"); +const u32 gItemIconPalette_LoadedDice[] = INCBIN_U32("graphics/items/icon_palettes/loaded_dice.gbapal.lz"); + +const u32 gItemIcon_AuspiciousArmor[] = INCBIN_U32("graphics/items/icons/auspicious_armor.4bpp.lz"); +const u32 gItemIconPalette_AuspiciousArmor[] = INCBIN_U32("graphics/items/icon_palettes/auspicious_armor.gbapal.lz"); + +const u32 gItemIcon_BigBambooShoot[] = INCBIN_U32("graphics/items/icons/big_bamboo_shoot.4bpp.lz"); +const u32 gItemIconPalette_BigBambooShoot[] = INCBIN_U32("graphics/items/icon_palettes/big_bamboo_shoot.gbapal.lz"); + +const u32 gItemIcon_BoosterEnergy[] = INCBIN_U32("graphics/items/icons/booster_energy.4bpp.lz"); +const u32 gItemIconPalette_BoosterEnergy[] = INCBIN_U32("graphics/items/icon_palettes/booster_energy.gbapal.lz"); + +const u32 gItemIcon_GimmighoulCoin[] = INCBIN_U32("graphics/items/icons/gimmighoul_coin.4bpp.lz"); +const u32 gItemIconPalette_GimmighoulCoin[] = INCBIN_U32("graphics/items/icon_palettes/gimmighoul_coin.gbapal.lz"); + +const u32 gItemIcon_LeadersCrest[] = INCBIN_U32("graphics/items/icons/leaders_crest.4bpp.lz"); +const u32 gItemIconPalette_LeadersCrest[] = INCBIN_U32("graphics/items/icon_palettes/leaders_crest.gbapal.lz"); + +const u32 gItemIcon_MaliciousArmor[] = INCBIN_U32("graphics/items/icons/malicious_armor.4bpp.lz"); +const u32 gItemIconPalette_MaliciousArmor[] = INCBIN_U32("graphics/items/icon_palettes/malicious_armor.gbapal.lz"); + +const u32 gItemIcon_MirrorHerb[] = INCBIN_U32("graphics/items/icons/mirror_herb.4bpp.lz"); +const u32 gItemIconPalette_MirrorHerb[] = INCBIN_U32("graphics/items/icon_palettes/mirror_herb.gbapal.lz"); + +const u32 gItemIcon_ScrollOfDarkness[] = INCBIN_U32("graphics/items/icons/scroll_of_darkness.4bpp.lz"); +const u32 gItemIconPalette_ScrollOfDarkness[] = INCBIN_U32("graphics/items/icon_palettes/scroll_of_darkness.gbapal.lz"); + +const u32 gItemIcon_ScrollOfWaters[] = INCBIN_U32("graphics/items/icons/scroll_of_waters.4bpp.lz"); +const u32 gItemIconPalette_ScrollOfWaters[] = INCBIN_U32("graphics/items/icon_palettes/scroll_of_waters.gbapal.lz"); + +const u32 gItemIcon_TeraOrb[] = INCBIN_U32("graphics/items/icons/tera_orb.4bpp.lz"); +const u32 gItemIconPalette_TeraOrb[] = INCBIN_U32("graphics/items/icon_palettes/tera_orb.gbapal.lz"); + +const u32 gItemIcon_TinyBambooShoot[] = INCBIN_U32("graphics/items/icons/tiny_bamboo_shoot.4bpp.lz"); +const u32 gItemIconPalette_TinyBambooShoot[] = INCBIN_U32("graphics/items/icon_palettes/tiny_bamboo_shoot.gbapal.lz"); + +// Tera Shards here + +const u32 gItemIcon_AdamantCrystal[] = INCBIN_U32("graphics/items/icons/adamant_crystal.4bpp.lz"); +const u32 gItemIconPalette_AdamantCrystal[] = INCBIN_U32("graphics/items/icon_palettes/adamant_crystal.gbapal.lz"); + +const u32 gItemIcon_GriseousCore[] = INCBIN_U32("graphics/items/icons/griseous_core.4bpp.lz"); +const u32 gItemIconPalette_GriseousCore[] = INCBIN_U32("graphics/items/icon_palettes/griseous_core.gbapal.lz"); + +const u32 gItemIcon_LustrousGlobe[] = INCBIN_U32("graphics/items/icons/lustrous_globe.4bpp.lz"); +const u32 gItemIconPalette_LustrousGlobe[] = INCBIN_U32("graphics/items/icon_palettes/lustrous_globe.gbapal.lz"); diff --git a/src/data/item_icon_table.h b/src/data/item_icon_table.h index a0c27ea72ae9..9e4b567775c4 100644 --- a/src/data/item_icon_table.h +++ b/src/data/item_icon_table.h @@ -803,22 +803,22 @@ const u32 *const gItemIconTable[ITEMS_COUNT + 1][2] = [ITEM_TEA] = {gItemIcon_Tea, gItemIconPalette_Tea}, [ITEM_RUBY] = {gItemIcon_Gem, gItemIconPalette_Ruby}, [ITEM_SAPPHIRE] = {gItemIcon_Gem, gItemIconPalette_Sapphire}, - [ITEM_ABILITY_SHIELD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_AbilityShield, gItemIconPalette_AbilityShield}, + [ITEM_ABILITY_SHIELD] = {gItemIcon_AbilityShield, gItemIconPalette_AbilityShield}, [ITEM_CLEAR_AMULET] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_ClearAmulet, gItemIconPalette_ClearAmulet}, - [ITEM_PUNCHING_GLOVE] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_PunchingGlove, gItemIconPalette_PunchingGlove}, - [ITEM_COVERT_CLOAK] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_CovertCloak, gItemIconPalette_CovertCloak}, - [ITEM_LOADED_DICE] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_LoadedDice, gItemIconPalette_LoadedDice}, - [ITEM_AUSPICIOUS_ARMOR] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_AuspiciousArmor, gItemIconPalette_AuspiciousArmor}, - [ITEM_BOOSTER_ENERGY] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_BoosterEnergy, gItemIconPalette_BoosterEnergy}, - [ITEM_BIG_BAMBOO_SHOOT] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_BigBambooShoot, gItemIconPalette_BigBambooShoot}, - [ITEM_GIMMIGHOUL_COIN] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_GimmighoulCoin, gItemIconPalette_GimmighoulCoin}, - [ITEM_LEADERS_CREST] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_LeadersCrest, gItemIconPalette_LeadersCrest}, - [ITEM_MALICIOUS_ARMOR] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_MaliciousArmor, gItemIconPalette_MaliciousArmor}, - [ITEM_MIRROR_HERB] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_MirrorHerb, gItemIconPalette_MirrorHerb}, - [ITEM_SCROLL_OF_DARKNESS] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_ScrollOfDarkness, gItemIconPalette_ScrollOfDarkness}, - [ITEM_SCROLL_OF_WATERS] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_ScrollOfWaters, gItemIconPalette_ScrollOfWaters}, - [ITEM_TERA_ORB] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_TeraOrb, gItemIconPalette_TeraOrb}, - [ITEM_TINY_BAMBOO_SHOOT] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_TinyBambooShoot, gItemIconPalette_TinyBambooShoot}, + [ITEM_PUNCHING_GLOVE] = {gItemIcon_PunchingGlove, gItemIconPalette_PunchingGlove}, + [ITEM_COVERT_CLOAK] = {gItemIcon_CovertCloak, gItemIconPalette_CovertCloak}, + [ITEM_LOADED_DICE] = {gItemIcon_LoadedDice, gItemIconPalette_LoadedDice}, + [ITEM_AUSPICIOUS_ARMOR] = {gItemIcon_AuspiciousArmor, gItemIconPalette_AuspiciousArmor}, + [ITEM_BOOSTER_ENERGY] = {gItemIcon_BoosterEnergy, gItemIconPalette_BoosterEnergy}, + [ITEM_BIG_BAMBOO_SHOOT] = {gItemIcon_BigBambooShoot, gItemIconPalette_BigBambooShoot}, + [ITEM_GIMMIGHOUL_COIN] = {gItemIcon_GimmighoulCoin, gItemIconPalette_GimmighoulCoin}, + [ITEM_LEADERS_CREST] = {gItemIcon_LeadersCrest, gItemIconPalette_LeadersCrest}, + [ITEM_MALICIOUS_ARMOR] = {gItemIcon_MaliciousArmor, gItemIconPalette_MaliciousArmor}, + [ITEM_MIRROR_HERB] = {gItemIcon_MirrorHerb, gItemIconPalette_MirrorHerb}, + [ITEM_SCROLL_OF_DARKNESS] = {gItemIcon_ScrollOfDarkness, gItemIconPalette_ScrollOfDarkness}, + [ITEM_SCROLL_OF_WATERS] = {gItemIcon_ScrollOfWaters, gItemIconPalette_ScrollOfWaters}, + [ITEM_TERA_ORB] = {gItemIcon_TeraOrb, gItemIconPalette_TeraOrb}, + [ITEM_TINY_BAMBOO_SHOOT] = {gItemIcon_TinyBambooShoot, gItemIconPalette_TinyBambooShoot}, [ITEM_BUG_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_BugTeraShard, gItemIconPalette_BugTeraShard}, [ITEM_DARK_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_DarkTeraShard, gItemIconPalette_DarkTeraShard}, [ITEM_DRAGON_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_DragonTeraShard, gItemIconPalette_DragonTeraShard}, @@ -837,9 +837,9 @@ const u32 *const gItemIconTable[ITEMS_COUNT + 1][2] = [ITEM_ROCK_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_RockTeraShard, gItemIconPalette_RockTeraShard}, [ITEM_STEEL_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_SteelTeraShard, gItemIconPalette_SteelTeraShard}, [ITEM_WATER_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_WaterTeraShard, gItemIconPalette_WaterTeraShard}, - [ITEM_ADAMANT_CRYSTAL] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_AdamantCrystal, gItemIconPalette_AdamantCrystal}, - [ITEM_GRISEOUS_CORE] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_GriseousCore, gItemIconPalette_GriseousCore}, - [ITEM_LUSTROUS_GLOBE] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_LustrousGlobe, gItemIconPalette_LustrousGlobe}, + [ITEM_ADAMANT_CRYSTAL] = {gItemIcon_AdamantCrystal, gItemIconPalette_AdamantCrystal}, + [ITEM_GRISEOUS_CORE] = {gItemIcon_GriseousCore, gItemIconPalette_GriseousCore}, + [ITEM_LUSTROUS_GLOBE] = {gItemIcon_LustrousGlobe, gItemIconPalette_LustrousGlobe}, // Return to field arrow [ITEMS_COUNT] = {gItemIcon_ReturnToFieldArrow, gItemIconPalette_ReturnToFieldArrow}, }; From 1da65c40517a64a4ef0695b27d3aa3d26ecb2e9f Mon Sep 17 00:00:00 2001 From: Eduardo Quezada D'Ottone Date: Thu, 23 Mar 2023 22:33:47 -0300 Subject: [PATCH 200/428] Fixed Grassy Terrain not healing --- src/battle_util.c | 32 +++++++++++++++++++++----------- test/terrain_grassy.c | 16 ++++++++++++++++ 2 files changed, 37 insertions(+), 11 deletions(-) create mode 100644 test/terrain_grassy.c diff --git a/src/battle_util.c b/src/battle_util.c index 3e8f94bf695b..cfb1d577b512 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -2127,15 +2127,25 @@ enum ENDTURN_FIELD_COUNT, }; -static bool32 TryEndTerrain(u32 terrainFlag, u32 stringTableId) +static bool32 EndTurnTerrain(u32 terrainFlag, u32 stringTableId) { - if (gFieldStatuses & terrainFlag - && (!(gFieldStatuses & STATUS_FIELD_TERRAIN_PERMANENT) && --gFieldTimers.terrainTimer == 0)) + if (gFieldStatuses & terrainFlag) { - gFieldStatuses &= ~terrainFlag; - TryToRevertMimicry(); - gBattleCommunication[MULTISTRING_CHOOSER] = stringTableId; - BattleScriptExecute(BattleScript_TerrainEnds); + if (!(gFieldStatuses & STATUS_FIELD_TERRAIN_PERMANENT) && --gFieldTimers.terrainTimer == 0) + { + gFieldStatuses &= ~terrainFlag; + TryToRevertMimicry(); + + if (terrainFlag != STATUS_FIELD_GRASSY_TERRAIN) + { + gBattleCommunication[MULTISTRING_CHOOSER] = stringTableId; + BattleScriptExecute(BattleScript_TerrainEnds); + } + } + if (terrainFlag == STATUS_FIELD_GRASSY_TERRAIN) + { + BattleScriptExecute(BattleScript_GrassyTerrainHeals); + } return TRUE; } return FALSE; @@ -2492,19 +2502,19 @@ u8 DoFieldEndTurnEffects(void) gBattleStruct->turnCountersTracker++; break; case ENDTURN_ELECTRIC_TERRAIN: - effect = TryEndTerrain(STATUS_FIELD_ELECTRIC_TERRAIN, B_MSG_TERRAINENDS_ELECTRIC); + effect += EndTurnTerrain(STATUS_FIELD_ELECTRIC_TERRAIN, B_MSG_TERRAINENDS_ELECTRIC); gBattleStruct->turnCountersTracker++; break; case ENDTURN_MISTY_TERRAIN: - effect = TryEndTerrain(STATUS_FIELD_MISTY_TERRAIN, B_MSG_TERRAINENDS_MISTY); + effect += EndTurnTerrain(STATUS_FIELD_MISTY_TERRAIN, B_MSG_TERRAINENDS_MISTY); gBattleStruct->turnCountersTracker++; break; case ENDTURN_GRASSY_TERRAIN: - effect = TryEndTerrain(STATUS_FIELD_GRASSY_TERRAIN, B_MSG_TERRAINENDS_GRASS); + effect += EndTurnTerrain(STATUS_FIELD_GRASSY_TERRAIN, B_MSG_TERRAINENDS_GRASS); gBattleStruct->turnCountersTracker++; break; case ENDTURN_PSYCHIC_TERRAIN: - effect = TryEndTerrain(STATUS_FIELD_PSYCHIC_TERRAIN, B_MSG_TERRAINENDS_PSYCHIC); + effect += EndTurnTerrain(STATUS_FIELD_PSYCHIC_TERRAIN, B_MSG_TERRAINENDS_PSYCHIC); gBattleStruct->turnCountersTracker++; break; case ENDTURN_WATER_SPORT: diff --git a/test/terrain_grassy.c b/test/terrain_grassy.c new file mode 100644 index 000000000000..6b3a93234e33 --- /dev/null +++ b/test/terrain_grassy.c @@ -0,0 +1,16 @@ +#include "global.h" +#include "test_battle.h" + +SINGLE_BATTLE_TEST("Grassy Terrain recovers 1/16th HP at end of turn") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { MaxHP(100); HP(1); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_GRASSY_TERRAIN); } + } SCENE { + s32 maxHP = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP); + MESSAGE("Wobbuffet is healed by the grassy terrain!"); + HP_BAR(player, damage: -maxHP / 16); + } +} From c922ff69b91ace7dd00eb2303b18b01e4f59120a Mon Sep 17 00:00:00 2001 From: Eduardo Quezada D'Ottone Date: Thu, 23 Mar 2023 22:34:08 -0300 Subject: [PATCH 201/428] Added To-Do test results --- test/terrain_grassy.c | 3 +++ test/test.h | 7 +++++++ test/test_battle.h | 9 +++++++++ test/test_runner.c | 6 ++++++ tools/mgba-rom-test-hydra/main.c | 8 ++++++++ 5 files changed, 33 insertions(+) diff --git a/test/terrain_grassy.c b/test/terrain_grassy.c index 6b3a93234e33..77f8a99271cc 100644 --- a/test/terrain_grassy.c +++ b/test/terrain_grassy.c @@ -14,3 +14,6 @@ SINGLE_BATTLE_TEST("Grassy Terrain recovers 1/16th HP at end of turn") HP_BAR(player, damage: -maxHP / 16); } } + +TO_DO_BATTLE_TEST("Grassy Terrain increases power of Grass-type moves by 30/50 percent") +TO_DO_BATTLE_TEST("Grassy Terrain decreases power of Earthquake, Magnitude and Bulldoze by 50 percent") diff --git a/test/test.h b/test/test.h index 27475bb48e40..a05e42a04686 100644 --- a/test/test.h +++ b/test/test.h @@ -13,6 +13,7 @@ enum TestResult TEST_RESULT_INVALID, TEST_RESULT_ERROR, TEST_RESULT_TIMEOUT, + TEST_RESULT_TODO, }; struct TestRunner @@ -138,4 +139,10 @@ s32 MgbaPrintf_(const char *fmt, ...); #define KNOWN_FAILING \ Test_ExpectedResult(TEST_RESULT_FAIL) +#define TO_DO \ + Test_ExpectedResult(TEST_RESULT_TODO) + +#define EXPECT_TO_DO \ + Test_ExitWithResult(TEST_RESULT_TODO, "%s:%d: EXPECT_TO_DO", gTestRunnerState.test->filename, __LINE__) + #endif diff --git a/test/test_battle.h b/test/test_battle.h index 16918251b1c8..1e97229bdc90 100644 --- a/test/test_battle.h +++ b/test/test_battle.h @@ -601,6 +601,15 @@ extern struct BattleTestRunnerState *gBattleTestRunnerState; /* Test */ +#define TO_DO_BATTLE_TEST(_name) \ + SINGLE_BATTLE_TEST("TODO: " _name) \ + { \ + TO_DO; \ + GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } \ + WHEN { TURN { } } \ + THEN { EXPECT_TO_DO; } \ + } + #define SINGLE_BATTLE_TEST(_name, ...) \ struct CAT(Result, __LINE__) { MEMBERS(__VA_ARGS__) }; \ static void CAT(Test, __LINE__)(struct CAT(Result, __LINE__) *, u32, struct BattlePokemon *, struct BattlePokemon *); \ diff --git a/test/test_runner.c b/test/test_runner.c index f2d4d5de3f58..1d3f14aadd2f 100644 --- a/test/test_runner.c +++ b/test/test_runner.c @@ -193,6 +193,10 @@ void CB2_TestRunner(void) result = "ASSUMPTION_FAIL"; color = "\e[33m"; break; + case TEST_RESULT_TODO: + result = "TO_DO"; + color = "\e[33m"; + break; case TEST_RESULT_INVALID: result = "INVALID"; break; @@ -211,6 +215,8 @@ void CB2_TestRunner(void) MgbaPrintf_(":P%s%s\e[0m", color, result); else if (gTestRunnerState.result == TEST_RESULT_ASSUMPTION_FAIL) MgbaPrintf_(":A%s%s\e[0m", color, result); + else if (gTestRunnerState.result == TEST_RESULT_TODO) + MgbaPrintf_(":T%s%s\e[0m", color, result); else if (gTestRunnerState.expectedResult == gTestRunnerState.result) MgbaPrintf_(":K%s%s\e[0m", color, result); else diff --git a/tools/mgba-rom-test-hydra/main.c b/tools/mgba-rom-test-hydra/main.c index f506d0428d31..8705225b8579 100644 --- a/tools/mgba-rom-test-hydra/main.c +++ b/tools/mgba-rom-test-hydra/main.c @@ -44,6 +44,7 @@ struct Runner char *output_buffer; int passes; int knownFails; + int todos; int assumptionFails; int fails; int results; @@ -87,6 +88,9 @@ static void handle_read(struct Runner *runner) case 'K': runner->knownFails++; goto add_to_results; + case 'T': + runner->todos++; + goto add_to_results; case 'A': runner->assumptionFails++; goto add_to_results; @@ -427,6 +431,7 @@ int main(int argc, char *argv[]) int exit_code = 0; int passes = 0; int knownFails = 0; + int todos = 0; int assumptionFails = 0; int fails = 0; int results = 0; @@ -444,6 +449,7 @@ int main(int argc, char *argv[]) exit_code = WEXITSTATUS(wstatus); passes += runners[i].passes; knownFails += runners[i].knownFails; + todos += runners[i].todos; assumptionFails += runners[i].assumptionFails; fails += runners[i].fails; results += runners[i].results; @@ -459,6 +465,8 @@ int main(int argc, char *argv[]) fprintf(stdout, "- Tests \e[32mPASSED\e[0m: %d\n", passes); if (knownFails > 0) fprintf(stdout, "- Tests \e[33mKNOWN_FAILING\e[0m: %d\n", knownFails); + if (todos > 0) + fprintf(stdout, "- Tests \e[33mTO_DO\e[0m: %d\n", todos); if (fails > 0) fprintf(stdout, "- Tests \e[31mFAILED\e[0m : %d\n", fails); if (assumptionFails > 0) From 492422b6bd268178aa687ca017fe44d67a399546 Mon Sep 17 00:00:00 2001 From: Zunawe Date: Thu, 23 Mar 2023 21:47:26 -0700 Subject: [PATCH 202/428] Fix scanner item flag name --- data/maps/AbandonedShip_CaptainsOffice/scripts.inc | 2 +- data/maps/AbandonedShip_HiddenFloorRooms/map.json | 2 +- include/constants/flags.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/data/maps/AbandonedShip_CaptainsOffice/scripts.inc b/data/maps/AbandonedShip_CaptainsOffice/scripts.inc index 7c59fec9676c..78fdc6434a87 100644 --- a/data/maps/AbandonedShip_CaptainsOffice/scripts.inc +++ b/data/maps/AbandonedShip_CaptainsOffice/scripts.inc @@ -7,7 +7,7 @@ AbandonedShip_CaptainsOffice_EventScript_CaptSternAide:: goto_if_set FLAG_EXCHANGED_SCANNER, AbandonedShip_CaptainsOffice_EventScript_ThisIsSSCactus checkitem ITEM_SCANNER goto_if_eq VAR_RESULT, TRUE, AbandonedShip_CaptainsOffice_EventScript_CanYouDeliverScanner - goto_if_set FLAG_ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_4_SCANNER, AbandonedShip_CaptainsOffice_EventScript_ThisIsSSCactus + goto_if_set FLAG_ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_2_SCANNER, AbandonedShip_CaptainsOffice_EventScript_ThisIsSSCactus msgbox AbandonedShip_CaptainsOffice_Text_NoSuccessFindingScanner, MSGBOX_DEFAULT release end diff --git a/data/maps/AbandonedShip_HiddenFloorRooms/map.json b/data/maps/AbandonedShip_HiddenFloorRooms/map.json index 9c480a1c9247..e808250f47ca 100644 --- a/data/maps/AbandonedShip_HiddenFloorRooms/map.json +++ b/data/maps/AbandonedShip_HiddenFloorRooms/map.json @@ -38,7 +38,7 @@ "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", "script": "AbandonedShip_HiddenFloorRooms_EventScript_ItemScanner", - "flag": "FLAG_ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_4_SCANNER" + "flag": "FLAG_ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_2_SCANNER" }, { "graphics_id": "OBJ_EVENT_GFX_ITEM_BALL", diff --git a/include/constants/flags.h b/include/constants/flags.h index 99a8377a7565..ed5dd5c68b55 100644 --- a/include/constants/flags.h +++ b/include/constants/flags.h @@ -1123,7 +1123,7 @@ #define FLAG_ITEM_NEW_MAUVILLE_ULTRA_BALL 0x433 #define FLAG_ITEM_NEW_MAUVILLE_ESCAPE_ROPE 0x434 #define FLAG_ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_6_LUXURY_BALL 0x435 -#define FLAG_ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_4_SCANNER 0x436 +#define FLAG_ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_2_SCANNER 0x436 #define FLAG_ITEM_SCORCHED_SLAB_TM11 0x437 #define FLAG_ITEM_METEOR_FALLS_B1F_2R_TM02 0x438 #define FLAG_ITEM_SHOAL_CAVE_ENTRANCE_BIG_PEARL 0x439 From c08df20166cb8103e599d306b47f1c73579f95c7 Mon Sep 17 00:00:00 2001 From: Martin Griffin Date: Fri, 24 Mar 2023 10:17:57 +0000 Subject: [PATCH 203/428] Fix "Too many different moves" detection --- test/test_runner_battle.c | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/test/test_runner_battle.c b/test/test_runner_battle.c index 0c3c23063523..b1a94b14ecbe 100644 --- a/test/test_runner_battle.c +++ b/test/test_runner_battle.c @@ -1106,6 +1106,31 @@ void Status1_(u32 sourceLine, u32 status1) SetMonData(DATA.currentMon, MON_DATA_STATUS, &status1); } +static const char *const sBattlerIdentifiersSingles[] = +{ + "player", + "opponent", +}; + +static const char *const sBattlerIdentifiersDoubles[] = +{ + "playerLeft", + "opponentLeft", + "playerRight", + "opponentRight", +}; + +static const char *BattlerIdentifier(s32 battlerId) +{ + const struct BattleTest *test = gTestRunnerState.test->data; + switch (test->type) + { + case BATTLE_TEST_SINGLES: return sBattlerIdentifiersSingles[battlerId]; + case BATTLE_TEST_DOUBLES: return sBattlerIdentifiersDoubles[battlerId]; + } + return ""; +} + static void PushBattlerAction(u32 sourceLine, s32 battlerId, u32 actionType, u32 byte) { u32 recordIndex = DATA.recordIndexes[battlerId]++; @@ -1267,7 +1292,6 @@ void Move(u32 sourceLine, struct BattlePokemon *battler, struct MoveContext ctx) else if (moveId == MOVE_NONE) { INVALID_IF(DATA.explicitMoves[battlerId & BIT_SIDE] & (1 << DATA.currentMonIndexes[battlerId]), "Missing explicit %S", gMoveNames[ctx.move]); - INVALID_IF(i == MAX_MON_MOVES, "Too many different moves"); SetMonData(mon, MON_DATA_MOVE1 + i, &ctx.move); SetMonData(DATA.currentMon, MON_DATA_PP1 + i, &gBattleMoves[ctx.move].pp); moveSlot = i; @@ -1275,6 +1299,7 @@ void Move(u32 sourceLine, struct BattlePokemon *battler, struct MoveContext ctx) break; } } + INVALID_IF(i == MAX_MON_MOVES, "Too many different moves for %s", BattlerIdentifier(battlerId)); } else if (ctx.explicitMoveSlot) { From efc9bad8427c91a4a577facd4d2b56614245d742 Mon Sep 17 00:00:00 2001 From: Martin Griffin Date: Fri, 24 Mar 2023 10:21:38 +0000 Subject: [PATCH 204/428] Fix Defog "Too many moves" --- test/move_effect_defog.c | 47 ++++++++++++++++++---------------------- 1 file changed, 21 insertions(+), 26 deletions(-) diff --git a/test/move_effect_defog.c b/test/move_effect_defog.c index d877899bb541..e9e55d57fed2 100644 --- a/test/move_effect_defog.c +++ b/test/move_effect_defog.c @@ -327,7 +327,6 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Aurora Veil from p DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes everything it can") { - bool32 defogTurn = FALSE; GIVEN { ASSUME(gBattleMoves[MOVE_HAIL].effect == EFFECT_HAIL); ASSUME(gSpeciesInfo[SPECIES_GLALIE].types[0] == TYPE_ICE); @@ -343,33 +342,29 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes everything it can" TURN { MOVE(playerLeft, MOVE_STICKY_WEB); MOVE(playerRight, MOVE_SPIKES); MOVE(opponentLeft, MOVE_STICKY_WEB); MOVE(opponentRight, MOVE_SPIKES); } TURN { SWITCH(playerLeft, 2); SWITCH(playerRight, 3); SWITCH(opponentLeft, 2); SWITCH(opponentRight, 3);} TURN { MOVE(playerLeft, MOVE_TOXIC_SPIKES); MOVE(playerRight, MOVE_STEALTH_ROCK); MOVE(opponentLeft, MOVE_TOXIC_SPIKES); MOVE(opponentRight, MOVE_STEALTH_ROCK); } - TURN { MOVE(playerLeft, MOVE_HAIL); MOVE(playerRight, MOVE_AURORA_VEIL); MOVE(opponentLeft, MOVE_AURORA_VEIL); MOVE(opponentRight, MOVE_STEALTH_ROCK); } - TURN { MOVE(playerLeft, MOVE_REFLECT); MOVE(playerRight, MOVE_LIGHT_SCREEN); MOVE(opponentLeft, MOVE_REFLECT); MOVE(opponentRight, MOVE_LIGHT_SCREEN); } - TURN { MOVE(playerLeft, MOVE_MIST); MOVE(playerRight, MOVE_SAFEGUARD); MOVE(opponentLeft, MOVE_MIST); MOVE(opponentRight, MOVE_SAFEGUARD); } - TURN { defogTurn = TRUE ; MOVE(opponentRight, MOVE_DEFOG, target:playerLeft);} + TURN { MOVE(playerLeft, MOVE_HAIL); MOVE(playerRight, MOVE_AURORA_VEIL); MOVE(opponentLeft, MOVE_AURORA_VEIL); MOVE(opponentRight, MOVE_LIGHT_SCREEN); } + TURN { MOVE(playerLeft, MOVE_REFLECT); MOVE(playerRight, MOVE_LIGHT_SCREEN); MOVE(opponentLeft, MOVE_REFLECT); MOVE(opponentRight, MOVE_SAFEGUARD); } + TURN { MOVE(playerLeft, MOVE_MIST); MOVE(playerRight, MOVE_SAFEGUARD); MOVE(opponentLeft, MOVE_MIST); MOVE(opponentRight, MOVE_DEFOG, target: playerLeft); } } SCENE { - if (defogTurn == TRUE) - { - MESSAGE("Foe Glalie used Defog!"); - MESSAGE("Glalie is protected by MIST!"); - ANIMATION(ANIM_TYPE_MOVE, MOVE_DEFOG, opponentRight); - // Player side - MESSAGE("Ally's Reflect wore off!"); - MESSAGE("Ally's Light Screen wore off!"); - MESSAGE("Ally's Mist wore off!"); - MESSAGE("Ally's Aurora Veil wore off!"); - MESSAGE("Ally's Safeguard wore off!"); + MESSAGE("Foe Glalie used Defog!"); + MESSAGE("Glalie is protected by MIST!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_DEFOG, opponentRight); + // Player side + MESSAGE("Ally's Reflect wore off!"); + MESSAGE("Ally's Light Screen wore off!"); + MESSAGE("Ally's Mist wore off!"); + MESSAGE("Ally's Aurora Veil wore off!"); + MESSAGE("Ally's Safeguard wore off!"); - MESSAGE("The spikes disappeared from the ground around your team!"); - MESSAGE("The pointed stones disappeared from around your team!"); - MESSAGE("The poison spikes disappeared from the ground around your team!"); - MESSAGE("The sticky web has disappeared from the ground around your team!"); + MESSAGE("The spikes disappeared from the ground around your team!"); + MESSAGE("The pointed stones disappeared from around your team!"); + MESSAGE("The poison spikes disappeared from the ground around your team!"); + MESSAGE("The sticky web has disappeared from the ground around your team!"); - // Opponent side - MESSAGE("The spikes disappeared from the ground around the opposing team!"); - MESSAGE("The pointed stones disappeared from around the opposing team!"); - MESSAGE("The poison spikes disappeared from the ground around the opposing team!"); - MESSAGE("The sticky web has disappeared from the ground around the opposing team!"); - } + // Opponent side + MESSAGE("The spikes disappeared from the ground around the opposing team!"); + MESSAGE("The pointed stones disappeared from around the opposing team!"); + MESSAGE("The poison spikes disappeared from the ground around the opposing team!"); + MESSAGE("The sticky web has disappeared from the ground around the opposing team!"); } } From 52011804b96fb57f12f2871721ead16dc5ff8baa Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Fri, 24 Mar 2023 09:36:33 -0300 Subject: [PATCH 205/428] Level command now also sets experience to avoid losing level upon form changes --- test/test_runner_battle.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/test_runner_battle.c b/test/test_runner_battle.c index ec7ba275c2c2..524525c132aa 100644 --- a/test/test_runner_battle.c +++ b/test/test_runner_battle.c @@ -933,9 +933,11 @@ void Ability_(u32 sourceLine, u32 ability) void Level_(u32 sourceLine, u32 level) { // TODO: Preserve any explicitly-set stats. + u32 species = GetMonData(DATA.currentMon, MON_DATA_SPECIES); INVALID_IF(!DATA.currentMon, "Level outside of PLAYER/OPPONENT"); INVALID_IF(level == 0 || level > MAX_LEVEL, "Illegal level: %d", level); SetMonData(DATA.currentMon, MON_DATA_LEVEL, &level); + SetMonData(DATA.currentMon, MON_DATA_EXP, &gExperienceTables[gSpeciesInfo[species].growthRate][level]); } void MaxHP_(u32 sourceLine, u32 maxHP) From 498f4a2c972941bd271e3487007eb6a919e15584 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Fri, 24 Mar 2023 10:04:38 -0300 Subject: [PATCH 206/428] Schooling and Zen Mode tests --- test/ability_schooling.c | 111 ++++++++++++++++++++++++++++++++++++++ test/ability_zen_mode.c | 93 ++++++++++++++++++++++++++++++++ test/test_runner_battle.c | 1 + 3 files changed, 205 insertions(+) create mode 100644 test/ability_schooling.c create mode 100644 test/ability_zen_mode.c diff --git a/test/ability_schooling.c b/test/ability_schooling.c new file mode 100644 index 000000000000..03a5303f0a69 --- /dev/null +++ b/test/ability_schooling.c @@ -0,0 +1,111 @@ +#include "global.h" +#include "test_battle.h" + +SINGLE_BATTLE_TEST("Schooling switches Level 20+ Wishiwashi's form when HP is 25-percent or less at the end of the turn") +{ + u16 level; + PARAMETRIZE { level = 19; } + PARAMETRIZE { level = 20; } + + GIVEN { + ASSUME(P_GEN_7_POKEMON == TRUE); + ASSUME(gSpeciesInfo[SPECIES_WISHIWASHI].baseHP == gSpeciesInfo[SPECIES_WISHIWASHI_SCHOOL].baseHP); + PLAYER(SPECIES_WISHIWASHI) + { + Level(level); + HP(GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP) / 2); + Ability(ABILITY_SCHOOLING); + }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_SUPER_FANG); } + } SCENE { + if (level >= 20) + { + ABILITY_POPUP(player, ABILITY_SCHOOLING); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); + } + MESSAGE("Wishiwashi used Celebrate!"); + MESSAGE("Foe Wobbuffet used Super Fang!"); + HP_BAR(player); + if (level >= 20) + { + ABILITY_POPUP(player, ABILITY_SCHOOLING); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); + } + } THEN { + EXPECT_EQ(player->species, SPECIES_WISHIWASHI); + } +} + +SINGLE_BATTLE_TEST("Schooling switches Level 20+ Wishiwashi's form when HP is over 25-percent before the first turn") +{ + u16 level; + bool32 overQuarterHP; + PARAMETRIZE { level = 19; overQuarterHP = FALSE; } + PARAMETRIZE { level = 20; overQuarterHP = FALSE; } + PARAMETRIZE { level = 19; overQuarterHP = TRUE; } + PARAMETRIZE { level = 20; overQuarterHP = TRUE; } + + GIVEN { + ASSUME(P_GEN_7_POKEMON == TRUE); + ASSUME(gSpeciesInfo[SPECIES_WISHIWASHI].baseHP == gSpeciesInfo[SPECIES_WISHIWASHI_SCHOOL].baseHP); + PLAYER(SPECIES_WISHIWASHI) + { + Level(level); + HP(GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP) / (overQuarterHP ? 2 : 4)); + Ability(ABILITY_SCHOOLING); + }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + } SCENE { + if (level >= 20 && overQuarterHP) + { + ABILITY_POPUP(player, ABILITY_SCHOOLING); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); + } + MESSAGE("Wishiwashi used Celebrate!"); + MESSAGE("Foe Wobbuffet used Celebrate!"); + } THEN { + if (level >= 20 && overQuarterHP) + EXPECT_EQ(player->species, SPECIES_WISHIWASHI_SCHOOL); + else + EXPECT_EQ(player->species, SPECIES_WISHIWASHI); + } +} + +SINGLE_BATTLE_TEST("Schooling switches Level 20+ Wishiwashi's form when HP is healed above 25-percent") +{ + u16 level; + PARAMETRIZE { level = 19; } + PARAMETRIZE { level = 20; } + + GIVEN { + ASSUME(P_GEN_7_POKEMON == TRUE); + ASSUME(gSpeciesInfo[SPECIES_WISHIWASHI].baseHP == gSpeciesInfo[SPECIES_WISHIWASHI_SCHOOL].baseHP); + PLAYER(SPECIES_WISHIWASHI) + { + Level(level); + HP(GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP) / 4); + Ability(ABILITY_SCHOOLING); + }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_HEAL_PULSE); } + } SCENE { + MESSAGE("Wishiwashi used Celebrate!"); + MESSAGE("Foe Wobbuffet used Heal Pulse!"); + HP_BAR(player); + if (level >= 20) + { + ABILITY_POPUP(player, ABILITY_SCHOOLING); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); + } + } THEN { + if (level >= 20) + EXPECT_EQ(player->species, SPECIES_WISHIWASHI_SCHOOL); + else + EXPECT_EQ(player->species, SPECIES_WISHIWASHI); + } +} diff --git a/test/ability_zen_mode.c b/test/ability_zen_mode.c new file mode 100644 index 000000000000..acf0ba291d97 --- /dev/null +++ b/test/ability_zen_mode.c @@ -0,0 +1,93 @@ +#include "global.h" +#include "test_battle.h" + +SINGLE_BATTLE_TEST("Zen Mode switches Darmanitan's form when HP is half or less at the end of the turn") +{ + u16 standardSpecies, zenSpecies; + PARAMETRIZE { standardSpecies = SPECIES_DARMANITAN; zenSpecies = SPECIES_DARMANITAN_ZEN_MODE; } + PARAMETRIZE { standardSpecies = SPECIES_DARMANITAN_GALARIAN; zenSpecies = SPECIES_DARMANITAN_ZEN_MODE_GALARIAN; } + + GIVEN { + ASSUME(P_GEN_5_POKEMON == TRUE); + ASSUME(gSpeciesInfo[standardSpecies].baseHP == 105); + ASSUME(gSpeciesInfo[zenSpecies].baseHP == 105); + PLAYER(standardSpecies) + { + Ability(ABILITY_ZEN_MODE); + HP((GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP) / 2) + 1); + }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_TACKLE); } + } SCENE { + MESSAGE("Darmanitan used Celebrate!"); + MESSAGE("Foe Wobbuffet used Tackle!"); + HP_BAR(player); + ABILITY_POPUP(player, ABILITY_ZEN_MODE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); + } THEN { + ASSUME(player->hp <= player->maxHP / 2); + EXPECT_EQ(player->species, zenSpecies); + } +} + +SINGLE_BATTLE_TEST("Zen Mode switches Darmanitan's form when HP is half or less before the first turn") +{ + u16 standardSpecies, zenSpecies; + PARAMETRIZE { standardSpecies = SPECIES_DARMANITAN; zenSpecies = SPECIES_DARMANITAN_ZEN_MODE; } + PARAMETRIZE { standardSpecies = SPECIES_DARMANITAN_GALARIAN; zenSpecies = SPECIES_DARMANITAN_ZEN_MODE_GALARIAN; } + + GIVEN { + ASSUME(P_GEN_5_POKEMON == TRUE); + ASSUME(gSpeciesInfo[standardSpecies].baseHP == 105); + ASSUME(gSpeciesInfo[zenSpecies].baseHP == 105); + PLAYER(standardSpecies) + { + Ability(ABILITY_ZEN_MODE); + HP(GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP) / 2); + }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + } SCENE { + ABILITY_POPUP(player, ABILITY_ZEN_MODE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); + MESSAGE("Darmanitan used Celebrate!"); + MESSAGE("Foe Wobbuffet used Celebrate!"); + } THEN { + EXPECT_LE(player->hp, player->maxHP / 2); + EXPECT_EQ(player->species, zenSpecies); + } +} + +SINGLE_BATTLE_TEST("Zen Mode switches Darmanitan's form when HP is healed above half") +{ + u16 standardSpecies, zenSpecies; + PARAMETRIZE { standardSpecies = SPECIES_DARMANITAN; zenSpecies = SPECIES_DARMANITAN_ZEN_MODE; } + PARAMETRIZE { standardSpecies = SPECIES_DARMANITAN_GALARIAN; zenSpecies = SPECIES_DARMANITAN_ZEN_MODE_GALARIAN; } + + GIVEN { + ASSUME(P_GEN_5_POKEMON == TRUE); + ASSUME(gSpeciesInfo[standardSpecies].baseHP == 105); + ASSUME(gSpeciesInfo[zenSpecies].baseHP == 105); + PLAYER(standardSpecies) + { + Ability(ABILITY_ZEN_MODE); + HP(GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP) / 2); + }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_HEAL_PULSE); } + } SCENE { + ABILITY_POPUP(player, ABILITY_ZEN_MODE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); + MESSAGE("Darmanitan used Celebrate!"); + MESSAGE("Foe Wobbuffet used Heal Pulse!"); + HP_BAR(player); + ABILITY_POPUP(player, ABILITY_ZEN_MODE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); + } THEN { + EXPECT_GT(player->hp, player->maxHP / 2); + EXPECT_EQ(player->species, standardSpecies); + } +} diff --git a/test/test_runner_battle.c b/test/test_runner_battle.c index 524525c132aa..e96a6ea7b30a 100644 --- a/test/test_runner_battle.c +++ b/test/test_runner_battle.c @@ -938,6 +938,7 @@ void Level_(u32 sourceLine, u32 level) INVALID_IF(level == 0 || level > MAX_LEVEL, "Illegal level: %d", level); SetMonData(DATA.currentMon, MON_DATA_LEVEL, &level); SetMonData(DATA.currentMon, MON_DATA_EXP, &gExperienceTables[gSpeciesInfo[species].growthRate][level]); + CalculateMonStats(DATA.currentMon); } void MaxHP_(u32 sourceLine, u32 maxHP) From c383c995f1413091846b9140155ca8426d759ce3 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Fri, 24 Mar 2023 10:12:09 -0300 Subject: [PATCH 207/428] Applied review changes --- src/battle_util.c | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/src/battle_util.c b/src/battle_util.c index cfb1d577b512..e8adc8a11287 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -2135,17 +2135,14 @@ static bool32 EndTurnTerrain(u32 terrainFlag, u32 stringTableId) { gFieldStatuses &= ~terrainFlag; TryToRevertMimicry(); - - if (terrainFlag != STATUS_FIELD_GRASSY_TERRAIN) + if (!(terrainFlag & STATUS_FIELD_GRASSY_TERRAIN)) { gBattleCommunication[MULTISTRING_CHOOSER] = stringTableId; BattleScriptExecute(BattleScript_TerrainEnds); } } - if (terrainFlag == STATUS_FIELD_GRASSY_TERRAIN) - { + if (terrainFlag & STATUS_FIELD_GRASSY_TERRAIN) BattleScriptExecute(BattleScript_GrassyTerrainHeals); - } return TRUE; } return FALSE; @@ -2502,19 +2499,19 @@ u8 DoFieldEndTurnEffects(void) gBattleStruct->turnCountersTracker++; break; case ENDTURN_ELECTRIC_TERRAIN: - effect += EndTurnTerrain(STATUS_FIELD_ELECTRIC_TERRAIN, B_MSG_TERRAINENDS_ELECTRIC); + effect = EndTurnTerrain(STATUS_FIELD_ELECTRIC_TERRAIN, B_MSG_TERRAINENDS_ELECTRIC); gBattleStruct->turnCountersTracker++; break; case ENDTURN_MISTY_TERRAIN: - effect += EndTurnTerrain(STATUS_FIELD_MISTY_TERRAIN, B_MSG_TERRAINENDS_MISTY); + effect = EndTurnTerrain(STATUS_FIELD_MISTY_TERRAIN, B_MSG_TERRAINENDS_MISTY); gBattleStruct->turnCountersTracker++; break; case ENDTURN_GRASSY_TERRAIN: - effect += EndTurnTerrain(STATUS_FIELD_GRASSY_TERRAIN, B_MSG_TERRAINENDS_GRASS); + effect = EndTurnTerrain(STATUS_FIELD_GRASSY_TERRAIN, B_MSG_TERRAINENDS_GRASS); gBattleStruct->turnCountersTracker++; break; case ENDTURN_PSYCHIC_TERRAIN: - effect += EndTurnTerrain(STATUS_FIELD_PSYCHIC_TERRAIN, B_MSG_TERRAINENDS_PSYCHIC); + effect = EndTurnTerrain(STATUS_FIELD_PSYCHIC_TERRAIN, B_MSG_TERRAINENDS_PSYCHIC); gBattleStruct->turnCountersTracker++; break; case ENDTURN_WATER_SPORT: From fad11981a58ad3a5d2299533da0c29ec38a461e9 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Fri, 24 Mar 2023 11:03:34 -0300 Subject: [PATCH 208/428] Tests for form change on switch out and fainting --- test/ability_zen_mode.c | 10 +++++----- test/form_change.c | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 5 deletions(-) diff --git a/test/ability_zen_mode.c b/test/ability_zen_mode.c index acf0ba291d97..f18f6d6595f0 100644 --- a/test/ability_zen_mode.c +++ b/test/ability_zen_mode.c @@ -20,11 +20,11 @@ SINGLE_BATTLE_TEST("Zen Mode switches Darmanitan's form when HP is half or less } WHEN { TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_TACKLE); } } SCENE { - MESSAGE("Darmanitan used Celebrate!"); - MESSAGE("Foe Wobbuffet used Tackle!"); - HP_BAR(player); - ABILITY_POPUP(player, ABILITY_ZEN_MODE); - ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); + MESSAGE("Darmanitan used Celebrate!"); + MESSAGE("Foe Wobbuffet used Tackle!"); + HP_BAR(player); + ABILITY_POPUP(player, ABILITY_ZEN_MODE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); } THEN { ASSUME(player->hp <= player->maxHP / 2); EXPECT_EQ(player->species, zenSpecies); diff --git a/test/form_change.c b/test/form_change.c index 8d761bb12d33..74ba2b75f7f5 100644 --- a/test/form_change.c +++ b/test/form_change.c @@ -79,3 +79,41 @@ SINGLE_BATTLE_TEST("Zamazenta's Iron Head becomes Behemoth Bash upon form change EXPECT_EQ(player->moves[0], MOVE_BEHEMOTH_BASH); } } + +SINGLE_BATTLE_TEST("Aegislash reverts to Shield Form upon switching out") +{ + GIVEN { + ASSUME(P_GEN_6_POKEMON == TRUE); + PLAYER(SPECIES_AEGISLASH); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_TACKLE); } + TURN { SWITCH(player, 1); } + TURN { SWITCH(player, 0); } + } SCENE { + ABILITY_POPUP(player, ABILITY_STANCE_CHANGE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); + MESSAGE("Aegislash used Tackle!"); + MESSAGE("Foe Wobbuffet used Celebrate!"); + } THEN { + EXPECT_EQ(player->species, SPECIES_AEGISLASH); + } +} + +SINGLE_BATTLE_TEST("Aegislash reverts to Shield Form upon fainting") +{ + GIVEN { + ASSUME(P_GEN_6_POKEMON == TRUE); + PLAYER(SPECIES_AEGISLASH) { HP(1); }; + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_GUST); SEND_OUT(player, 1);} + } SCENE { + MESSAGE("Foe Wobbuffet used Gust!"); + MESSAGE("Aegislash fainted!"); + } THEN { + EXPECT_EQ(GetMonData(&PLAYER_PARTY[0], MON_DATA_SPECIES), SPECIES_AEGISLASH); + } +} From 2c3db747027aab2346b57058115c50814619562f Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Fri, 24 Mar 2023 10:36:10 -0400 Subject: [PATCH 209/428] fix base power calcs using battler addresses --- src/battle_util.c | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/battle_util.c b/src/battle_util.c index 7bf090a73b8d..8338d104592f 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -8602,7 +8602,7 @@ static u16 CalcMoveBasePower(u16 move, u8 battlerAtk, u8 battlerDef) basePower *= 2; break; case EFFECT_PURSUIT: - if (gActionsByTurnOrder[GetBattlerTurnOrderNum(gBattlerTarget)] == B_ACTION_SWITCH) + if (gActionsByTurnOrder[GetBattlerTurnOrderNum(battlerDef)] == B_ACTION_SWITCH) basePower *= 2; break; case EFFECT_NATURAL_GIFT: @@ -8736,12 +8736,12 @@ static u16 CalcMoveBasePower(u16 move, u8 battlerAtk, u8 battlerDef) #if B_HIDDEN_POWER_DMG < GEN_6 u8 powerBits; - powerBits = ((gBattleMons[gBattlerAttacker].hpIV & 2) >> 1) - | ((gBattleMons[gBattlerAttacker].attackIV & 2) << 0) - | ((gBattleMons[gBattlerAttacker].defenseIV & 2) << 1) - | ((gBattleMons[gBattlerAttacker].speedIV & 2) << 2) - | ((gBattleMons[gBattlerAttacker].spAttackIV & 2) << 3) - | ((gBattleMons[gBattlerAttacker].spDefenseIV & 2) << 4); + powerBits = ((gBattleMons[battlerAtk].hpIV & 2) >> 1) + | ((gBattleMons[battlerAtk].attackIV & 2) << 0) + | ((gBattleMons[battlerAtk].defenseIV & 2) << 1) + | ((gBattleMons[battlerAtk].speedIV & 2) << 2) + | ((gBattleMons[battlerAtk].spAttackIV & 2) << 3) + | ((gBattleMons[battlerAtk].spDefenseIV & 2) << 4); basePower = (40 * powerBits) / 63 + 30; #endif @@ -8753,15 +8753,15 @@ static u16 CalcMoveBasePower(u16 move, u8 battlerAtk, u8 battlerDef) break; case EFFECT_TERRAIN_PULSE: if ((gFieldStatuses & STATUS_FIELD_TERRAIN_ANY) - && IsBattlerGrounded(gBattlerAttacker)) + && IsBattlerGrounded(battlerAtk)) basePower *= 2; break; case EFFECT_EXPANDING_FORCE: - if (IsBattlerTerrainAffected(gBattlerAttacker, STATUS_FIELD_PSYCHIC_TERRAIN)) + if (IsBattlerTerrainAffected(battlerAtk, STATUS_FIELD_PSYCHIC_TERRAIN)) MulModifier(&basePower, UQ_4_12(1.5)); break; case EFFECT_RISING_VOLTAGE: - if (IsBattlerTerrainAffected(gBattlerTarget, STATUS_FIELD_ELECTRIC_TERRAIN)) + if (IsBattlerTerrainAffected(battlerDef, STATUS_FIELD_ELECTRIC_TERRAIN)) basePower *= 2; break; case EFFECT_BEAT_UP: @@ -8770,7 +8770,7 @@ static u16 CalcMoveBasePower(u16 move, u8 battlerAtk, u8 battlerDef) #endif break; case EFFECT_PSYBLADE: - if (IsBattlerTerrainAffected(gBattlerAttacker, STATUS_FIELD_ELECTRIC_TERRAIN)) + if (IsBattlerTerrainAffected(battlerAtk, STATUS_FIELD_ELECTRIC_TERRAIN)) MulModifier(&basePower, UQ_4_12(1.5)); break; } @@ -9611,7 +9611,7 @@ static u32 CalcFinalDmg(u32 dmg, u16 move, u8 battlerAtk, u8 battlerDef, u8 move || (gSideStatuses[defSide] & SIDE_STATUS_AURORA_VEIL)) && abilityAtk != ABILITY_INFILTRATOR && !(isCrit) - && !gProtectStructs[gBattlerAttacker].confusionSelfDmg) + && !gProtectStructs[battlerAtk].confusionSelfDmg) { if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) MulModifier(&finalModifier, UQ_4_12(0.66)); @@ -9620,7 +9620,7 @@ static u32 CalcFinalDmg(u32 dmg, u16 move, u8 battlerAtk, u8 battlerDef, u8 move } // Parental Bond Second Strike - if (gSpecialStatuses[gBattlerAttacker].parentalBondState == PARENTAL_BOND_2ND_HIT) + if (gSpecialStatuses[battlerAtk].parentalBondState == PARENTAL_BOND_2ND_HIT) { if (B_PARENTAL_BOND_DMG < GEN_7) MulModifier(&finalModifier, UQ_4_12(0.5)); From b9447f88fc3a30b78206bca459b60bdc831f461a Mon Sep 17 00:00:00 2001 From: sbird Date: Fri, 24 Mar 2023 15:41:18 +0100 Subject: [PATCH 210/428] fix compound eyes ohko test --- src/battle_script_commands.c | 2 +- test/ability_compound_eyes.c | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 283adb54a9c4..9ace33bf0990 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -12562,7 +12562,7 @@ static void Cmd_tryKO(void) if (gCurrentMove == MOVE_SHEER_COLD && !IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_ICE)) odds -= 10; #endif - if (Random() % 100 + 1 < odds && gBattleMons[gBattlerAttacker].level >= gBattleMons[gBattlerTarget].level) + if (RandomPercentage(RNG_ACCURACY, odds) && gBattleMons[gBattlerAttacker].level >= gBattleMons[gBattlerTarget].level) lands = TRUE; } diff --git a/test/ability_compound_eyes.c b/test/ability_compound_eyes.c index bbe718176a7c..d90604d5c31f 100644 --- a/test/ability_compound_eyes.c +++ b/test/ability_compound_eyes.c @@ -21,12 +21,11 @@ SINGLE_BATTLE_TEST("Compound Eyes raises accuracy") // than we expect. SINGLE_BATTLE_TEST("Compound Eyes does not affect OHKO moves") { - KNOWN_FAILING; PASSES_RANDOMLY(30, 100, RNG_ACCURACY); GIVEN { ASSUME(gBattleMoves[MOVE_FISSURE].accuracy == 30); ASSUME(gBattleMoves[MOVE_FISSURE].effect == EFFECT_OHKO); - PLAYER(SPECIES_BUTTERFREE) { Ability(ABILITY_TINTED_LENS); }; + PLAYER(SPECIES_BUTTERFREE) { Ability(ABILITY_COMPOUND_EYES); }; OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_FISSURE); } From aea5d79aa2965e88fc69ef483f7f2c87b02dfc28 Mon Sep 17 00:00:00 2001 From: sbird Date: Thu, 23 Feb 2023 23:14:14 +0100 Subject: [PATCH 211/428] [trainer_parties] implement fully customizable npc trainer parties fix nature related bug, fix hash generation, add tests --- include/battle_main.h | 4 + include/constants/trainers.h | 9 +- include/data.h | 42 +++++-- include/global.h | 3 + src/battle_main.c | 217 +++++++++++++++++++++++++++-------- src/data.c | 1 + test/trainer_control.c | 140 ++++++++++++++++++++++ 7 files changed, 356 insertions(+), 60 deletions(-) create mode 100644 test/trainer_control.c diff --git a/include/battle_main.h b/include/battle_main.h index df59dcae3419..8d1aad454eb5 100644 --- a/include/battle_main.h +++ b/include/battle_main.h @@ -1,6 +1,9 @@ #ifndef GUARD_BATTLE_MAIN_H #define GUARD_BATTLE_MAIN_H +#include "pokemon.h" +#include "data.h" + struct TrainerMoney { u8 classId; @@ -66,6 +69,7 @@ bool8 TryRunFromBattle(u8 battlerId); void SpecialStatusesClear(void); void SetTypeBeforeUsingMove(u16 move, u8 battlerAtk); bool32 IsWildMonSmart(void); +u8 CreateNPCTrainerPartyFromTrainer(struct Pokemon *party, const struct Trainer *trainer, bool32 firstTrainer, u32 battleTypeFlags); extern struct MultiPartnerMenuPokemon gMultiPartnerParty[MULTI_PARTY_SIZE]; diff --git a/include/constants/trainers.h b/include/constants/trainers.h index 39ca2a2b8658..25660ac073d6 100644 --- a/include/constants/trainers.h +++ b/include/constants/trainers.h @@ -374,7 +374,12 @@ // All trainer parties specify the IV, level, and species for each Pokémon in the // party. Some trainer parties also specify held items and custom moves for each // Pokémon. -#define F_TRAINER_PARTY_CUSTOM_MOVESET (1 << 0) -#define F_TRAINER_PARTY_HELD_ITEM (1 << 1) +#define F_TRAINER_PARTY_CUSTOM_MOVESET (1 << 0) +#define F_TRAINER_PARTY_HELD_ITEM (1 << 1) +#define F_TRAINER_PARTY_EVERYTHING_CUSTOMIZED (1 << 3) + +// Trainer party defines +#define TRAINER_MON_MALE 1 +#define TRAINER_MON_FEMALE 2 #endif // GUARD_TRAINERS_H diff --git a/include/data.h b/include/data.h index 79f6a3715a47..6e41ac703a44 100644 --- a/include/data.h +++ b/include/data.h @@ -31,6 +31,26 @@ struct MonCoords #define MON_COORDS_SIZE(width, height)(DIV_ROUND_UP(width, 8) << 4 | DIV_ROUND_UP(height, 8)) #define GET_MON_COORDS_WIDTH(size)((size >> 4) * 8) #define GET_MON_COORDS_HEIGHT(size)((size & 0xF) * 8) +#define TRAINER_PARTY_IVS(hp, atk, def, speed, spatk, spdef) (hp | (atk << 5) | (def << 10) | (speed << 15) | (spatk << 20) | (spdef << 25)) +#define TRAINER_PARTY_EVS(hp, atk, def, speed, spatk, spdef) ((const u8[6]){hp,atk,def,spatk,spdef,speed}) +#define TRAINER_PARTY_NATURE(nature) (nature+1) + +struct TrainerMonCustomized +{ + const u8 *nickname; + const u8 *ev; + u32 iv; + u16 moves[4]; + u16 species; + u16 heldItem; + u16 ability; + u8 lvl; + u8 ball; + u8 friendship; + u8 nature : 5; + bool8 gender : 2; + bool8 isShiny : 1; +}; struct TrainerMonNoItemDefaultMoves { @@ -68,6 +88,7 @@ struct TrainerMonItemCustomMoves #define NO_ITEM_CUSTOM_MOVES(party) { .NoItemCustomMoves = party }, .partySize = ARRAY_COUNT(party), .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET #define ITEM_DEFAULT_MOVES(party) { .ItemDefaultMoves = party }, .partySize = ARRAY_COUNT(party), .partyFlags = F_TRAINER_PARTY_HELD_ITEM #define ITEM_CUSTOM_MOVES(party) { .ItemCustomMoves = party }, .partySize = ARRAY_COUNT(party), .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET | F_TRAINER_PARTY_HELD_ITEM +#define EVERYTHING_CUSTOMIZED(party) { .EverythingCustomized = party}, .partySize = ARRAY_COUNT(party), .partyFlags = F_TRAINER_PARTY_EVERYTHING_CUSTOMIZED union TrainerMonPtr { @@ -75,20 +96,21 @@ union TrainerMonPtr const struct TrainerMonNoItemCustomMoves *NoItemCustomMoves; const struct TrainerMonItemDefaultMoves *ItemDefaultMoves; const struct TrainerMonItemCustomMoves *ItemCustomMoves; + const struct TrainerMonCustomized *EverythingCustomized; }; struct Trainer { - /*0x00*/ u8 partyFlags; - /*0x01*/ u8 trainerClass; - /*0x02*/ u8 encounterMusic_gender; // last bit is gender - /*0x03*/ u8 trainerPic; - /*0x04*/ u8 trainerName[TRAINER_NAME_LENGTH + 1]; - /*0x10*/ u16 items[MAX_TRAINER_ITEMS]; - /*0x18*/ bool8 doubleBattle; - /*0x1C*/ u32 aiFlags; - /*0x20*/ u8 partySize; - /*0x24*/ union TrainerMonPtr party; + /*0x00*/ u32 aiFlags; + /*0x04*/ union TrainerMonPtr party; + /*0x08*/ u16 items[MAX_TRAINER_ITEMS]; + /*0x10*/ u8 trainerClass; + /*0x11*/ u8 encounterMusic_gender; // last bit is gender + /*0x12*/ u8 trainerPic; + /*0x13*/ u8 trainerName[TRAINER_NAME_LENGTH + 1]; + /*0x1E*/ bool8 doubleBattle:1; + u8 partyFlags:7; + /*0x1F*/ u8 partySize; }; #define TRAINER_ENCOUNTER_MUSIC(trainer)((gTrainers[trainer].encounterMusic_gender & 0x7F)) diff --git a/include/global.h b/include/global.h index 4b3e90bfac51..f7d166bb5b0f 100644 --- a/include/global.h +++ b/include/global.h @@ -147,6 +147,9 @@ #define CAT(a, b) CAT_(a, b) #define CAT_(a, b) a ## b +// Converts a string to a compound literal, essentially making it a pointer to const u8 +#define COMPOUND_STRING(str) (const u8[]) _(str) + // This produces an error at compile-time if expr is zero. // It looks like file.c:line: size of array `id' is negative #define STATIC_ASSERT(expr, id) typedef char id[(expr) ? 1 : -1]; diff --git a/src/battle_main.c b/src/battle_main.c index 9ea3b66446ec..efbf1b8195c1 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -118,6 +118,10 @@ static void HandleEndTurn_FinishBattle(void); static void SpriteCB_UnusedBattleInit(struct Sprite *sprite); static void SpriteCB_UnusedBattleInit_Main(struct Sprite *sprite); static void TrySpecialEvolution(void); +static u32 Crc32B (const u8 *data, u32 size); +static u32 GeneratePartyHash(const struct Trainer *trainer, u32 i); +static void ModifyPersonalityForNature(u32 *personality, u32 newNature); +static u32 GeneratePersonalityForGender(u32 gender, u32 species); EWRAM_DATA u16 gBattle_BG0_X = 0; EWRAM_DATA u16 gBattle_BG0_Y = 0; @@ -1869,72 +1873,129 @@ static void SpriteCB_UnusedBattleInit_Main(struct Sprite *sprite) } } -static u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum, bool8 firstTrainer) +static u32 Crc32B (const u8 *data, u32 size) +{ + s32 i, j; + u32 byte, crc, mask; + + i = 0; + crc = 0xFFFFFFFF; + for (i = 0; i < size; ++i) + { + byte = data[i]; + crc = crc ^ byte; + for (j = 7; j >= 0; --j) + { + mask = -(crc & 1); + crc = (crc >> 1) ^ (0xEDB88320 & mask); + } + } + return ~crc; +} + +static u32 GeneratePartyHash(const struct Trainer *trainer, u32 i) +{ + const u8 *buffer; + u32 n; + if (trainer->partyFlags == 0) + { + buffer = (const u8 *) &trainer->party.NoItemDefaultMoves[i]; + n = sizeof(*trainer->party.NoItemDefaultMoves); + } + else if (trainer->partyFlags == F_TRAINER_PARTY_CUSTOM_MOVESET) + { + buffer = (const u8 *) &trainer->party.NoItemCustomMoves[i]; + n = sizeof(*trainer->party.NoItemCustomMoves); + } + else if (trainer->partyFlags == F_TRAINER_PARTY_HELD_ITEM) + { + buffer = (const u8 *) &trainer->party.ItemDefaultMoves[i]; + n = sizeof(*trainer->party.ItemDefaultMoves); + } + else if (trainer->partyFlags == (F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET)) + { + buffer = (const u8 *) &trainer->party.ItemCustomMoves[i]; + n = sizeof(*trainer->party.ItemCustomMoves); + } + else if (trainer->partyFlags == F_TRAINER_PARTY_EVERYTHING_CUSTOMIZED) + { + buffer = (const u8 *) &trainer->party.EverythingCustomized[i]; + n = sizeof(*trainer->party.EverythingCustomized); + } + return Crc32B(buffer, n); +} + +static void ModifyPersonalityForNature(u32 *personality, u32 newNature) +{ + u32 nature = GetNatureFromPersonality(*personality); + s32 diff = abs(nature - newNature); + s32 sign = (nature > newNature) ? 1 : -1; + if (diff > NUM_NATURES / 2) + { + diff = NUM_NATURES - diff; + sign *= -1; + } + *personality -= (diff * sign); +} + +static u32 GeneratePersonalityForGender(u32 gender, u32 species) +{ + const struct SpeciesInfo *speciesInfo = &gSpeciesInfo[species]; + if (gender == MON_MALE) + return ((255 - speciesInfo->genderRatio) / 2) + speciesInfo->genderRatio; + else + return speciesInfo->genderRatio / 2; +} + +u8 CreateNPCTrainerPartyFromTrainer(struct Pokemon *party, const struct Trainer *trainer, bool32 firstTrainer, u32 battleTypeFlags) { - u32 nameHash = 0; u32 personalityValue; u8 fixedIV; s32 i, j; u8 monsCount; - u16 ball; - - if (trainerNum == TRAINER_SECRET_BASE) - return 0; - - if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && !(gBattleTypeFlags & (BATTLE_TYPE_FRONTIER + s32 ball = -1; + if (battleTypeFlags & BATTLE_TYPE_TRAINER && !(battleTypeFlags & (BATTLE_TYPE_FRONTIER | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_TRAINER_HILL))) { if (firstTrainer == TRUE) ZeroEnemyPartyMons(); - if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) + if (battleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) { - if (gTrainers[trainerNum].partySize > PARTY_SIZE / 2) + if (trainer->partySize > PARTY_SIZE / 2) monsCount = PARTY_SIZE / 2; else - monsCount = gTrainers[trainerNum].partySize; + monsCount = trainer->partySize; } else { - monsCount = gTrainers[trainerNum].partySize; + monsCount = trainer->partySize; } for (i = 0; i < monsCount; i++) { - - if (gTrainers[trainerNum].doubleBattle == TRUE) + u32 personalityHash = GeneratePartyHash(trainer, i); + if (trainer->doubleBattle == TRUE) personalityValue = 0x80; - else if (gTrainers[trainerNum].encounterMusic_gender & F_TRAINER_FEMALE) + else if (trainer->encounterMusic_gender & F_TRAINER_FEMALE) personalityValue = 0x78; // Use personality more likely to result in a female Pokémon else personalityValue = 0x88; // Use personality more likely to result in a male Pokémon - for (j = 0; gTrainers[trainerNum].trainerName[j] != EOS; j++) - nameHash += gTrainers[trainerNum].trainerName[j]; - - switch (gTrainers[trainerNum].partyFlags) + personalityValue += personalityHash << 8; + switch (trainer->partyFlags) { case 0: { - const struct TrainerMonNoItemDefaultMoves *partyData = gTrainers[trainerNum].party.NoItemDefaultMoves; - - for (j = 0; gSpeciesNames[partyData[i].species][j] != EOS; j++) - nameHash += gSpeciesNames[partyData[i].species][j]; - - personalityValue += nameHash << 8; + const struct TrainerMonNoItemDefaultMoves *partyData = trainer->party.NoItemDefaultMoves; fixedIV = partyData[i].iv * MAX_PER_STAT_IVS / 255; CreateMon(&party[i], partyData[i].species, partyData[i].lvl, fixedIV, TRUE, personalityValue, OT_ID_RANDOM_NO_SHINY, 0); break; } case F_TRAINER_PARTY_CUSTOM_MOVESET: { - const struct TrainerMonNoItemCustomMoves *partyData = gTrainers[trainerNum].party.NoItemCustomMoves; - - for (j = 0; gSpeciesNames[partyData[i].species][j] != EOS; j++) - nameHash += gSpeciesNames[partyData[i].species][j]; - - personalityValue += nameHash << 8; + const struct TrainerMonNoItemCustomMoves *partyData = trainer->party.NoItemCustomMoves; fixedIV = partyData[i].iv * MAX_PER_STAT_IVS / 255; CreateMon(&party[i], partyData[i].species, partyData[i].lvl, fixedIV, TRUE, personalityValue, OT_ID_RANDOM_NO_SHINY, 0); @@ -1947,12 +2008,7 @@ static u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum, bool8 fir } case F_TRAINER_PARTY_HELD_ITEM: { - const struct TrainerMonItemDefaultMoves *partyData = gTrainers[trainerNum].party.ItemDefaultMoves; - - for (j = 0; gSpeciesNames[partyData[i].species][j] != EOS; j++) - nameHash += gSpeciesNames[partyData[i].species][j]; - - personalityValue += nameHash << 8; + const struct TrainerMonItemDefaultMoves *partyData = trainer->party.ItemDefaultMoves; fixedIV = partyData[i].iv * MAX_PER_STAT_IVS / 255; CreateMon(&party[i], partyData[i].species, partyData[i].lvl, fixedIV, TRUE, personalityValue, OT_ID_RANDOM_NO_SHINY, 0); @@ -1961,12 +2017,7 @@ static u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum, bool8 fir } case F_TRAINER_PARTY_CUSTOM_MOVESET | F_TRAINER_PARTY_HELD_ITEM: { - const struct TrainerMonItemCustomMoves *partyData = gTrainers[trainerNum].party.ItemCustomMoves; - - for (j = 0; gSpeciesNames[partyData[i].species][j] != EOS; j++) - nameHash += gSpeciesNames[partyData[i].species][j]; - - personalityValue += nameHash << 8; + const struct TrainerMonItemCustomMoves *partyData = trainer->party.ItemCustomMoves; fixedIV = partyData[i].iv * MAX_PER_STAT_IVS / 255; CreateMon(&party[i], partyData[i].species, partyData[i].lvl, fixedIV, TRUE, personalityValue, OT_ID_RANDOM_NO_SHINY, 0); @@ -1979,18 +2030,88 @@ static u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum, bool8 fir } break; } + case F_TRAINER_PARTY_EVERYTHING_CUSTOMIZED: + { + const struct TrainerMonCustomized *partyData = trainer->party.EverythingCustomized; + u32 otIdType = OT_ID_RANDOM_NO_SHINY; + u32 fixedOtId = 0; + if (partyData[i].gender == TRAINER_MON_MALE) + personalityValue = (personalityValue & 0xFFFFFF00) | GeneratePersonalityForGender(MON_MALE, partyData[i].species); + else if (partyData[i].gender == TRAINER_MON_FEMALE) + personalityValue = (personalityValue & 0xFFFFFF00) | GeneratePersonalityForGender(MON_FEMALE, partyData[i].species); + if (partyData[i].nature != 0) + ModifyPersonalityForNature(&personalityValue, partyData[i].nature - 1); + if (partyData[i].isShiny) + { + otIdType = OT_ID_PRESET; + fixedOtId = HIHALF(personalityValue) ^ LOHALF(personalityValue); + } + CreateMon(&party[i], partyData[i].species, partyData[i].lvl, 0, TRUE, personalityValue, otIdType, fixedOtId); + SetMonData(&party[i], MON_DATA_HELD_ITEM, &partyData[i].heldItem); + + // TODO: Figure out a default strategy when moves are not set, to generate a good moveset + for (j = 0; j < MAX_MON_MOVES; ++j) + { + SetMonData(&party[i], MON_DATA_MOVE1 + j, &partyData[i].moves[j]); + SetMonData(&party[i], MON_DATA_PP1 + j, &gBattleMoves[partyData[i].moves[j]].pp); + } + SetMonData(&party[i], MON_DATA_IVS, &(partyData[i].iv)); + if (partyData[i].ev != NULL) + { + SetMonData(&party[i], MON_DATA_HP_EV, &(partyData[i].ev[0])); + SetMonData(&party[i], MON_DATA_ATK_EV, &(partyData[i].ev[1])); + SetMonData(&party[i], MON_DATA_DEF_EV, &(partyData[i].ev[2])); + SetMonData(&party[i], MON_DATA_SPATK_EV, &(partyData[i].ev[3])); + SetMonData(&party[i], MON_DATA_SPDEF_EV, &(partyData[i].ev[4])); + SetMonData(&party[i], MON_DATA_SPEED_EV, &(partyData[i].ev[5])); + } + if (partyData[i].ability != ABILITY_NONE) + { + const struct SpeciesInfo *speciesInfo = &gSpeciesInfo[partyData[i].species]; + u32 maxAbilities = ARRAY_COUNT(speciesInfo->abilities); + for (j = 0; j < maxAbilities; ++j) + { + if (speciesInfo->abilities[j] == partyData[i].ability) + break; + } + if (j < maxAbilities) + SetMonData(&party[i], MON_DATA_ABILITY_NUM, &j); + } + SetMonData(&party[i], MON_DATA_FRIENDSHIP, &(partyData[i].friendship)); + if (partyData[i].ball != ITEM_NONE) + { + ball = partyData[i].ball; + SetMonData(&party[i], MON_DATA_POKEBALL, &ball); + } + if (partyData[i].nickname != NULL) + { + SetMonData(&party[i], MON_DATA_NICKNAME, partyData[i].nickname); + } + CalculateMonStats(&party[i]); + } } #if B_TRAINER_CLASS_POKE_BALLS >= GEN_7 - ball = (sTrainerBallTable[gTrainers[trainerNum].trainerClass]) ? sTrainerBallTable[gTrainers[trainerNum].trainerClass] : ITEM_POKE_BALL; - SetMonData(&party[i], MON_DATA_POKEBALL, &ball); + if (ball == -1) + { + ball = (sTrainerBallTable[trainer->trainerClass]) ? sTrainerBallTable[trainer->trainerClass] : ITEM_POKE_BALL; + SetMonData(&party[i], MON_DATA_POKEBALL, &ball); + } #endif } - - gBattleTypeFlags |= gTrainers[trainerNum].doubleBattle; } - return gTrainers[trainerNum].partySize; + return trainer->partySize; +} + +static u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum, bool8 firstTrainer) +{ + u8 retVal; + if (trainerNum == TRAINER_SECRET_BASE) + return 0; + retVal = CreateNPCTrainerPartyFromTrainer(party, &gTrainers[trainerNum], firstTrainer, gBattleTypeFlags); + + gBattleTypeFlags |= gTrainers[trainerNum].doubleBattle; } void VBlankCB_Battle(void) diff --git a/src/data.c b/src/data.c index 08b2c96e0529..1ced9ce81d18 100644 --- a/src/data.c +++ b/src/data.c @@ -3,6 +3,7 @@ #include "battle.h" #include "data.h" #include "graphics.h" +#include "constants/abilities.h" #include "constants/items.h" #include "constants/moves.h" #include "constants/trainers.h" diff --git a/test/trainer_control.c b/test/trainer_control.c new file mode 100644 index 000000000000..30794220765d --- /dev/null +++ b/test/trainer_control.c @@ -0,0 +1,140 @@ +#include "global.h" +#include "test.h" +#include "battle.h" +#include "battle_main.h" +#include "data.h" +#include "malloc.h" +#include "string_util.h" +#include "constants/item.h" +#include "constants/abilities.h" +#include "constants/trainers.h" +#include "constants/battle.h" + + +static const struct TrainerMonCustomized sTestParty1[] = +{ + { + .species = SPECIES_WOBBUFFET, + .ball = ITEM_MASTER_BALL, + .ability = ABILITY_TELEPATHY, + .friendship = 42, + .gender = TRAINER_MON_FEMALE, + .heldItem = ITEM_ASSAULT_VEST, + .isShiny = TRUE, + .iv = TRAINER_PARTY_IVS(25,26,27,28,29,30), + .ev = TRAINER_PARTY_EVS(252, 0, 0, 252, 4, 0), + .lvl = 67, + .moves = {MOVE_AIR_SLASH, MOVE_BARRIER, MOVE_SOLAR_BEAM, MOVE_EXPLOSION}, + .nature = TRAINER_PARTY_NATURE(NATURE_HASTY), + .nickname = COMPOUND_STRING("Bubbles") + }, + { + .species = SPECIES_WOBBUFFET, + .ability = ABILITY_SHADOW_TAG, + .lvl = 5, + }, +}; + +static const struct TrainerMonNoItemDefaultMoves sTestParty2[] = +{ + { + .species = SPECIES_WOBBUFFET, + .lvl = 5, + }, + { + .species = SPECIES_WOBBUFFET, + .lvl = 6, + } +}; + +static const struct Trainer sTestTrainer1 = +{ + .trainerName = _("Test1"), + .party = EVERYTHING_CUSTOMIZED(sTestParty1), +}; + +static const struct Trainer sTestTrainer2 = +{ + .trainerName = _("Test2"), + .party = NO_ITEM_DEFAULT_MOVES(sTestParty2), +}; + +TEST("CreateNPCTrainerPartyForTrainer generates customized Pokémon") +{ + struct Pokemon *testParty = Alloc(6 * sizeof(struct Pokemon)); + u8 nickBuffer[20]; + CreateNPCTrainerPartyFromTrainer(testParty, &sTestTrainer1, TRUE, BATTLE_TYPE_TRAINER); + EXPECT(IsMonShiny(&testParty[0])); + EXPECT(!IsMonShiny(&testParty[1])); + + EXPECT(GetMonData(&testParty[0], MON_DATA_POKEBALL, 0) == ITEM_MASTER_BALL); + EXPECT(GetMonData(&testParty[1], MON_DATA_POKEBALL, 0) == ITEM_POKE_BALL); + + EXPECT(GetMonData(&testParty[0], MON_DATA_SPECIES, 0) == SPECIES_WOBBUFFET); + EXPECT(GetMonData(&testParty[1], MON_DATA_SPECIES, 0) == SPECIES_WOBBUFFET); + + EXPECT(GetMonAbility(&testParty[0]) == ABILITY_TELEPATHY); + EXPECT(GetMonAbility(&testParty[1]) == ABILITY_SHADOW_TAG); + + EXPECT(GetMonData(&testParty[0], MON_DATA_FRIENDSHIP, 0) == 42); + EXPECT(GetMonData(&testParty[1], MON_DATA_FRIENDSHIP, 0) == 0); + + EXPECT(GetMonData(&testParty[0], MON_DATA_HELD_ITEM, 0) == ITEM_ASSAULT_VEST); + EXPECT(GetMonData(&testParty[1], MON_DATA_HELD_ITEM, 0) == ITEM_NONE); + + EXPECT(GetMonData(&testParty[0], MON_DATA_HP_IV, 0) == 25); + EXPECT(GetMonData(&testParty[0], MON_DATA_ATK_IV, 0) == 26); + EXPECT(GetMonData(&testParty[0], MON_DATA_DEF_IV, 0) == 27); + EXPECT(GetMonData(&testParty[0], MON_DATA_SPEED_IV, 0) == 28); + EXPECT(GetMonData(&testParty[0], MON_DATA_SPATK_IV, 0) == 29); + EXPECT(GetMonData(&testParty[0], MON_DATA_SPDEF_IV, 0) == 30); + + EXPECT(GetMonData(&testParty[1], MON_DATA_HP_IV, 0) == 0); + EXPECT(GetMonData(&testParty[1], MON_DATA_ATK_IV, 0) == 0); + EXPECT(GetMonData(&testParty[1], MON_DATA_DEF_IV, 0) == 0); + EXPECT(GetMonData(&testParty[1], MON_DATA_SPEED_IV, 0) == 0); + EXPECT(GetMonData(&testParty[1], MON_DATA_SPATK_IV, 0) == 0); + EXPECT(GetMonData(&testParty[1], MON_DATA_SPDEF_IV, 0) == 0); + + EXPECT(GetMonData(&testParty[0], MON_DATA_HP_EV, 0) == 252); + EXPECT(GetMonData(&testParty[0], MON_DATA_ATK_EV, 0) == 0); + EXPECT(GetMonData(&testParty[0], MON_DATA_DEF_EV, 0) == 0); + EXPECT(GetMonData(&testParty[0], MON_DATA_SPEED_EV, 0) == 252); + EXPECT(GetMonData(&testParty[0], MON_DATA_SPATK_EV, 0) == 4); + EXPECT(GetMonData(&testParty[0], MON_DATA_SPDEF_EV, 0) == 0); + + EXPECT(GetMonData(&testParty[1], MON_DATA_HP_EV, 0) == 0); + EXPECT(GetMonData(&testParty[1], MON_DATA_ATK_EV, 0) == 0); + EXPECT(GetMonData(&testParty[1], MON_DATA_DEF_EV, 0) == 0); + EXPECT(GetMonData(&testParty[1], MON_DATA_SPEED_EV, 0) == 0); + EXPECT(GetMonData(&testParty[1], MON_DATA_SPATK_EV, 0) == 0); + EXPECT(GetMonData(&testParty[1], MON_DATA_SPDEF_EV, 0) == 0); + + EXPECT(GetMonData(&testParty[0], MON_DATA_LEVEL, 0) == 67); + EXPECT(GetMonData(&testParty[1], MON_DATA_LEVEL, 0) == 5); + + EXPECT(GetMonData(&testParty[0], MON_DATA_MOVE1, 0) == MOVE_AIR_SLASH); + EXPECT(GetMonData(&testParty[0], MON_DATA_MOVE2, 0) == MOVE_BARRIER); + EXPECT(GetMonData(&testParty[0], MON_DATA_MOVE3, 0) == MOVE_SOLAR_BEAM); + EXPECT(GetMonData(&testParty[0], MON_DATA_MOVE4, 0) == MOVE_EXPLOSION); + + GetMonData(&testParty[0], MON_DATA_NICKNAME, nickBuffer); + EXPECT(StringCompare(nickBuffer, COMPOUND_STRING("Bubbles")) == 0); + + GetMonData(&testParty[1], MON_DATA_NICKNAME, nickBuffer); + EXPECT(StringCompare(nickBuffer, COMPOUND_STRING("Wobbuffet")) == 0); + + EXPECT(GetGenderFromSpeciesAndPersonality(GetMonData(&testParty[0], MON_DATA_SPECIES, 0), testParty[0].box.personality) == MON_FEMALE); + + EXPECT(GetNature(&testParty[0]) == NATURE_HASTY); + + Free(testParty); +} + +TEST("CreateNPCTrainerPartyForTrainer generates different personalities for different mons") +{ + struct Pokemon *testParty = Alloc(6 * sizeof(struct Pokemon)); + CreateNPCTrainerPartyFromTrainer(testParty, &sTestTrainer2, TRUE, BATTLE_TYPE_TRAINER); + EXPECT(testParty[0].box.personality != testParty[1].box.personality); + Free(testParty); +} From 4b43f3eb9df60e42758666411fcf8ed79c5890f6 Mon Sep 17 00:00:00 2001 From: Alex Date: Sun, 26 Mar 2023 21:10:51 +0200 Subject: [PATCH 212/428] add cases for everything customized --- src/battle_script_commands.c | 6 +++++ src/battle_setup.c | 8 ++++++ src/battle_tower.c | 49 ++++++++++++++++++++++++++++++++++++ src/match_call.c | 3 +++ 4 files changed, 66 insertions(+) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index c50d801b1871..b1ce7f964bb4 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -7504,6 +7504,12 @@ static u32 GetTrainerMoneyToGive(u16 trainerId) lastMonLevel = party[gTrainers[trainerId].partySize - 1].lvl; } break; + case F_TRAINER_PARTY_EVERYTHING_CUSTOMIZED: + { + const struct TrainerMonCustomized *party = gTrainers[trainerId].party.EverythingCustomized; + lastMonLevel = party[gTrainers[trainerId].partySize - 1].lvl; + } + break; } for (; gTrainerMoneyTable[i].classId != 0xFF; i++) diff --git a/src/battle_setup.c b/src/battle_setup.c index 220edd394a37..2b8e63e76683 100644 --- a/src/battle_setup.c +++ b/src/battle_setup.c @@ -798,6 +798,14 @@ static u8 GetSumOfEnemyPartyLevel(u16 opponentId, u8 numMons) sum += party[i].lvl; } break; + case F_TRAINER_PARTY_EVERYTHING_CUSTOMIZED: + { + const struct TrainerMonCustomized *party; + party = gTrainers[opponentId].party.EverythingCustomized; + for (i = 0; i < count; i++) + sum += party[i].lvl; + } + break; } return sum; diff --git a/src/battle_tower.c b/src/battle_tower.c index 930075656188..a4758b93046e 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -23,6 +23,7 @@ #include "field_message_box.h" #include "tv.h" #include "battle_factory.h" +#include "constants/abilities.h" #include "constants/apprentice.h" #include "constants/battle_dome.h" #include "constants/battle_frontier.h" @@ -3007,6 +3008,7 @@ static void FillPartnerParty(u16 trainerId) u16 monId; u32 otID; u8 trainerName[(PLAYER_NAME_LENGTH * 3) + 1]; + s32 ball = -1; SetFacilityPtrsGetLevel(); if (trainerId == TRAINER_STEVEN_PARTNER) @@ -3098,6 +3100,53 @@ static void FillPartnerParty(u16 trainerId) } break; } + case F_TRAINER_PARTY_EVERYTHING_CUSTOMIZED: + { + const struct TrainerMonCustomized *partyData = gTrainers[trainerId - TRAINER_CUSTOM_PARTNER].party.EverythingCustomized; + + CreateMon(&gPlayerParty[i], partyData[i].species, partyData[i].lvl, 0, TRUE, j, TRUE, otID); + SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &partyData[i].heldItem); + + // TODO: Figure out a default strategy when moves are not set, to generate a good moveset + for (j = 0; j < MAX_MON_MOVES; ++j) + { + SetMonData(&gPlayerParty[i], MON_DATA_MOVE1 + j, &partyData[i].moves[j]); + SetMonData(&gPlayerParty[i], MON_DATA_PP1 + j, &gBattleMoves[partyData[i].moves[j]].pp); + } + SetMonData(&gPlayerParty[i], MON_DATA_IVS, &(partyData[i].iv)); + if (partyData[i].ev != NULL) + { + SetMonData(&gPlayerParty[i], MON_DATA_HP_EV, &(partyData[i].ev[0])); + SetMonData(&gPlayerParty[i], MON_DATA_ATK_EV, &(partyData[i].ev[1])); + SetMonData(&gPlayerParty[i], MON_DATA_DEF_EV, &(partyData[i].ev[2])); + SetMonData(&gPlayerParty[i], MON_DATA_SPATK_EV, &(partyData[i].ev[3])); + SetMonData(&gPlayerParty[i], MON_DATA_SPDEF_EV, &(partyData[i].ev[4])); + SetMonData(&gPlayerParty[i], MON_DATA_SPEED_EV, &(partyData[i].ev[5])); + } + if (partyData[i].ability != ABILITY_NONE) + { + const struct SpeciesInfo *speciesInfo = &gSpeciesInfo[partyData[i].species]; + u32 maxAbilities = ARRAY_COUNT(speciesInfo->abilities); + for (j = 0; j < maxAbilities; ++j) + { + if (speciesInfo->abilities[j] == partyData[i].ability) + break; + } + if (j < maxAbilities) + SetMonData(&gPlayerParty[i], MON_DATA_ABILITY_NUM, &j); + } + SetMonData(&gPlayerParty[i], MON_DATA_FRIENDSHIP, &(partyData[i].friendship)); + if (partyData[i].ball != ITEM_NONE) + { + ball = partyData[i].ball; + SetMonData(&gPlayerParty[i], MON_DATA_POKEBALL, &ball); + } + if (partyData[i].nickname != NULL) + { + SetMonData(&gPlayerParty[i], MON_DATA_NICKNAME, partyData[i].nickname); + } + CalculateMonStats(&gPlayerParty[i]); + } } StringCopy(trainerName, gTrainers[trainerId - TRAINER_CUSTOM_PARTNER].trainerName); diff --git a/src/match_call.c b/src/match_call.c index a9d18b3477a0..c3378040e3e2 100644 --- a/src/match_call.c +++ b/src/match_call.c @@ -1812,6 +1812,9 @@ static void PopulateSpeciesFromTrainerParty(int matchCallId, u8 *destStr) case F_TRAINER_PARTY_CUSTOM_MOVESET | F_TRAINER_PARTY_HELD_ITEM: speciesName = gSpeciesNames[party.ItemCustomMoves[monId].species]; break; + case F_TRAINER_PARTY_EVERYTHING_CUSTOMIZED: + speciesName = gSpeciesNames[party.EverythingCustomized[monId].species]; + break; } StringCopy(destStr, speciesName); From 0b8285737a7434c8d48d05e623105fea2e8186cf Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Mon, 27 Mar 2023 09:19:48 -0300 Subject: [PATCH 213/428] Fixed Comatose AI checks --- include/battle_ai_util.h | 1 + src/battle_ai_main.c | 8 ++++---- src/battle_ai_util.c | 5 +++++ 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/include/battle_ai_util.h b/include/battle_ai_util.h index 11eba7b6618f..892736b54e55 100644 --- a/include/battle_ai_util.h +++ b/include/battle_ai_util.h @@ -144,6 +144,7 @@ bool32 AnyPartyMemberStatused(u8 battlerId, bool32 checkSoundproof); u32 ShouldTryToFlinch(u8 battlerAtk, u8 battlerDef, u16 atkAbility, u16 defAbility, u16 move); bool32 ShouldTrap(u8 battlerAtk, u8 battlerDef, u16 move); bool32 IsWakeupTurn(u8 battler); +bool32 AI_IsBattlerAsleepOrComatose(u8 battlerId); // partner logic u16 GetAllyChosenMove(u8 battlerId); diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 19eedb41ccf1..a359358b924c 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -974,7 +974,7 @@ static s16 AI_CheckBadMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) } break; case EFFECT_DREAM_EATER: - if (!(gBattleMons[battlerDef].status1 & STATUS1_SLEEP) || AI_DATA->abilities[battlerDef] == ABILITY_COMATOSE) + if (!AI_IsBattlerAsleepOrComatose(battlerDef)) score -= 8; else if (effectiveness == AI_EFFECTIVENESS_x0) score -= 10; @@ -1453,7 +1453,7 @@ static s16 AI_CheckBadMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) break; case EFFECT_SNORE: case EFFECT_SLEEP_TALK: - if (IsWakeupTurn(battlerAtk) || (!(gBattleMons[battlerAtk].status1 & STATUS1_SLEEP) || AI_DATA->abilities[battlerAtk] != ABILITY_COMATOSE)) + if (IsWakeupTurn(battlerAtk) || !AI_IsBattlerAsleepOrComatose(battlerAtk)) score -= 10; // if mon will wake up, is not asleep, or is not comatose break; case EFFECT_MEAN_LOOK: @@ -1463,7 +1463,7 @@ static s16 AI_CheckBadMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) case EFFECT_NIGHTMARE: if (gBattleMons[battlerDef].status2 & STATUS2_NIGHTMARE) score -= 10; - else if (!(gBattleMons[battlerDef].status1 & STATUS1_SLEEP) || AI_DATA->abilities[battlerDef] == ABILITY_COMATOSE) + else if (!AI_IsBattlerAsleepOrComatose(battlerDef)) score -= 8; else if (DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, AI_DATA->partnerMove)) score -= 10; @@ -3780,7 +3780,7 @@ static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) case EFFECT_NIGHTMARE: if (AI_DATA->abilities[battlerDef] != ABILITY_MAGIC_GUARD && !(gBattleMons[battlerDef].status2 & STATUS2_NIGHTMARE) - && (AI_DATA->abilities[battlerDef] == ABILITY_COMATOSE || gBattleMons[battlerDef].status1 & STATUS1_SLEEP)) + && AI_IsBattlerAsleepOrComatose(battlerDef)) { score += 5; if (IsBattlerTrapped(battlerDef, TRUE)) diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index a9e3ed3e0bd0..7b8fb046380b 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -3749,3 +3749,8 @@ bool32 ShouldUseZMove(u8 battlerAtk, u8 battlerDef, u16 chosenMove) return FALSE; } + +bool32 AI_IsBattlerAsleepOrComatose(u8 battlerId) +{ + return (gBattleMons[battlerId].status1 & STATUS1_SLEEP) || AI_DATA->abilities[battlerId] == ABILITY_COMATOSE; +} From 2fba07c501df6e9434ffe53f18aa67385078aa06 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Mon, 27 Mar 2023 11:30:38 -0300 Subject: [PATCH 214/428] Added KNOWN_FAILING to Dire Claw and Tri Attack's force-bruted RNG failing tests --- test/move_effect_dire_claw.c | 1 + test/move_effect_tri_attack.c | 1 + 2 files changed, 2 insertions(+) diff --git a/test/move_effect_dire_claw.c b/test/move_effect_dire_claw.c index a5270ce3fb70..f02555df3036 100644 --- a/test/move_effect_dire_claw.c +++ b/test/move_effect_dire_claw.c @@ -15,6 +15,7 @@ SINGLE_BATTLE_TEST("Dire Claw can inflict poison, paralysis or sleep") { u8 statusAnim; u32 rng; + KNOWN_FAILING; PARAMETRIZE { statusAnim = B_ANIM_STATUS_PSN; rng = RNG_POISON; } PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; } PARAMETRIZE { statusAnim = B_ANIM_STATUS_SLP; rng = RNG_SLEEP; } diff --git a/test/move_effect_tri_attack.c b/test/move_effect_tri_attack.c index 31627ef2d147..9bfacdb985ea 100644 --- a/test/move_effect_tri_attack.c +++ b/test/move_effect_tri_attack.c @@ -15,6 +15,7 @@ SINGLE_BATTLE_TEST("Tri Attack can inflict paralysis, burn or freeze") { u8 statusAnim; u32 rng; + KNOWN_FAILING; PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; } PARAMETRIZE { statusAnim = B_ANIM_STATUS_BRN; rng = RNG_BURN; } PARAMETRIZE { statusAnim = B_ANIM_STATUS_FRZ; rng = RNG_FREEZE; } From f6a924a7917008e2e1e0a9201c78aaa91884f81f Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Mon, 27 Mar 2023 11:49:50 -0300 Subject: [PATCH 215/428] Fixed instances of gSideTimers not using side constants --- src/battle_script_commands.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 3376f9db6000..28bf60c39b3b 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -3923,14 +3923,14 @@ static void Cmd_tryfaintmon(void) if (gBattleResults.playerFaintCounter < 255) gBattleResults.playerFaintCounter++; AdjustFriendshipOnBattleFaint(gActiveBattler); - gSideTimers[0].retaliateTimer = 2; + gSideTimers[B_SIDE_PLAYER].retaliateTimer = 2; } else { if (gBattleResults.opponentFaintCounter < 255) gBattleResults.opponentFaintCounter++; gBattleResults.lastOpponentSpecies = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES, NULL); - gSideTimers[1].retaliateTimer = 2; + gSideTimers[B_SIDE_OPPONENT].retaliateTimer = 2; } if ((gHitMarker & HITMARKER_DESTINYBOND) && gBattleMons[gBattlerAttacker].hp != 0) { From 7b306b61473f2fa31b676769c7fb66fbf6bb7d2d Mon Sep 17 00:00:00 2001 From: Martin Griffin Date: Mon, 27 Mar 2023 17:32:16 +0100 Subject: [PATCH 216/428] RandomElement for structured RNG Converts Tri Attack and Dire Claw to use structured RNG. --- include/random.h | 16 ++++- src/battle_script_commands.c | 5 +- src/random.c | 10 +++- test/move_effect_dire_claw.c | 46 ++++++-------- test/move_effect_tri_attack.c | 48 ++++++--------- test/random.c | 33 +++++++++- test/test_battle.h | 16 ++++- test/test_runner_battle.c | 109 +++++++++++++++++++++++++++------- 8 files changed, 199 insertions(+), 84 deletions(-) diff --git a/include/random.h b/include/random.h index 60c718348c63..fd340c26db37 100644 --- a/include/random.h +++ b/include/random.h @@ -29,7 +29,12 @@ void SeedRng2(u16 seed); * * RandomTag identifies the purpose of the value. * - * RandomUniform(tag, lo, hi) returns a number from lo to hi inclusive. + * RandomUniform(tag, lo, hi) returns a number from lo to hi inclusive + * with uniform probability. + * + * RandomElement(tag, array) returns an element in array with uniform + * probability. The array must be known at compile-time (e.g. a global + * const array). * * RandomPercentage(tag, t) returns FALSE with probability (1-t)/100, * and TRUE with probability t/100. @@ -47,6 +52,7 @@ enum RandomTag RNG_CRITICAL_HIT, RNG_CUTE_CHARM, RNG_DAMAGE_MODIFIER, + RNG_DIRE_CLAW, RNG_FLAME_BODY, RNG_FORCE_RANDOM_SWITCH, RNG_FROZEN, @@ -60,6 +66,7 @@ enum RandomTag RNG_SPEED_TIE, RNG_STATIC, RNG_STENCH, + RNG_TRI_ATTACK, }; #define RandomWeighted(tag, ...) \ @@ -77,10 +84,17 @@ enum RandomTag RandomWeightedArray(tag, 100, ARRAY_COUNT(weights), weights); \ }) +#define RandomElement(tag, array) \ + ({ \ + *(typeof((array)[0]) *)RandomElementArray(tag, array, sizeof((array)[0]), ARRAY_COUNT(array)); \ + }) + u32 RandomUniform(enum RandomTag, u32 lo, u32 hi); u32 RandomWeightedArray(enum RandomTag, u32 sum, u32 n, const u8 *weights); +const void *RandomElementArray(enum RandomTag, const void *array, size_t size, size_t count); u32 RandomUniformDefault(enum RandomTag, u32 lo, u32 hi); u32 RandomWeightedArrayDefault(enum RandomTag, u32 sum, u32 n, const u8 *weights); +const void *RandomElementArrayDefault(enum RandomTag, const void *array, size_t size, size_t count); #endif // GUARD_RANDOM_H diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 3376f9db6000..62dcbf44728d 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -3318,7 +3318,8 @@ void SetMoveEffect(bool32 primary, u32 certain) } else { - gBattleScripting.moveEffect = Random() % 3 + 3; + static const u8 sTriAttackEffects[] = { MOVE_EFFECT_BURN, MOVE_EFFECT_FREEZE, MOVE_EFFECT_PARALYSIS }; + gBattleScripting.moveEffect = RandomElement(RNG_TRI_ATTACK, sTriAttackEffects); SetMoveEffect(FALSE, 0); } break; @@ -3779,7 +3780,7 @@ void SetMoveEffect(bool32 primary, u32 certain) if (!gBattleMons[gEffectBattler].status1) { static const u8 sDireClawEffects[] = { MOVE_EFFECT_POISON, MOVE_EFFECT_PARALYSIS, MOVE_EFFECT_SLEEP }; - gBattleScripting.moveEffect = sDireClawEffects[Random() % ARRAY_COUNT(sDireClawEffects)]; + gBattleScripting.moveEffect = RandomElement(RNG_DIRE_CLAW, sDireClawEffects); SetMoveEffect(TRUE, 0); } break; diff --git a/src/random.c b/src/random.c index e59b5638764d..14983e7764cc 100644 --- a/src/random.c +++ b/src/random.c @@ -38,9 +38,12 @@ u32 RandomUniform(enum RandomTag tag, u32 lo, u32 hi); __attribute__((weak, alias("RandomWeightedArrayDefault"))) u32 RandomWeightedArray(enum RandomTag tag, u32 sum, u32 n, const u8 *weights); +__attribute__((weak, alias("RandomElementArrayDefault"))) +const void *RandomElementArray(enum RandomTag tag, const void *array, size_t size, size_t count); + u32 RandomUniformDefault(enum RandomTag tag, u32 lo, u32 hi) { - return lo + (((hi - lo) * Random()) >> 16); + return lo + (((hi - lo + 1) * Random()) >> 16); } u32 RandomWeightedArrayDefault(enum RandomTag tag, u32 sum, u32 n, const u8 *weights) @@ -55,3 +58,8 @@ u32 RandomWeightedArrayDefault(enum RandomTag tag, u32 sum, u32 n, const u8 *wei } return n - 1; } + +const void *RandomElementArrayDefault(enum RandomTag tag, const void *array, size_t size, size_t count) +{ + return (const u8 *)array + size * RandomUniformDefault(tag, 0, count - 1); +} diff --git a/test/move_effect_dire_claw.c b/test/move_effect_dire_claw.c index f02555df3036..2212c3cb0ec8 100644 --- a/test/move_effect_dire_claw.c +++ b/test/move_effect_dire_claw.c @@ -6,21 +6,14 @@ ASSUMPTIONS ASSUME(gBattleMoves[MOVE_DIRE_CLAW].effect == EFFECT_DIRE_CLAW); } -// found by brute-force -#define RNG_SLEEP 0xcb0 -#define RNG_POISON 0x2BE -#define RNG_PARALYSIS 5 - SINGLE_BATTLE_TEST("Dire Claw can inflict poison, paralysis or sleep") { u8 statusAnim; - u32 rng; - KNOWN_FAILING; - PARAMETRIZE { statusAnim = B_ANIM_STATUS_PSN; rng = RNG_POISON; } - PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; } - PARAMETRIZE { statusAnim = B_ANIM_STATUS_SLP; rng = RNG_SLEEP; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PSN; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_SLP; } + PASSES_RANDOMLY(1, 3, RNG_DIRE_CLAW); GIVEN { - RNGSeed(rng); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -48,15 +41,14 @@ SINGLE_BATTLE_TEST("Dire Claw cannot poison/paralyze poison/electric types respe u16 species; u32 rng; #if B_PARALYZE_ELECTRIC >= GEN_6 - PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; species = SPECIES_RAICHU; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = MOVE_EFFECT_PARALYSIS; species = SPECIES_RAICHU; } #endif // B_PARALYZE_ELECTRIC - PARAMETRIZE { statusAnim = B_ANIM_STATUS_PSN; rng = RNG_POISON; species = SPECIES_ARBOK;} + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PSN; rng = MOVE_EFFECT_POISON; species = SPECIES_ARBOK;} GIVEN { - RNGSeed(rng); PLAYER(SPECIES_WOBBUFFET); OPPONENT(species); } WHEN { - TURN { MOVE(player, MOVE_DIRE_CLAW); } + TURN { MOVE(player, MOVE_DIRE_CLAW, WITH_RNG(RNG_DIRE_CLAW, rng)); } TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_DIRE_CLAW, player); @@ -76,21 +68,20 @@ SINGLE_BATTLE_TEST("Dire Claw cannot poison/paralyze/cause to fall asleep pokemo u8 statusAnim; u16 species, ability; u32 rng; - PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; species = SPECIES_RAICHU; ability = ABILITY_LIGHTNING_ROD; } - PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; species = SPECIES_JOLTEON; ability = ABILITY_VOLT_ABSORB; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = MOVE_EFFECT_PARALYSIS; species = SPECIES_RAICHU; ability = ABILITY_LIGHTNING_ROD; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = MOVE_EFFECT_PARALYSIS; species = SPECIES_JOLTEON; ability = ABILITY_VOLT_ABSORB; } #if P_GEN_4_POKEMON == TRUE - PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; species = SPECIES_ELECTIVIRE; ability = ABILITY_MOTOR_DRIVE; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = MOVE_EFFECT_PARALYSIS; species = SPECIES_ELECTIVIRE; ability = ABILITY_MOTOR_DRIVE; } #endif // P_GEN_4_POKEMON - PARAMETRIZE { statusAnim = B_ANIM_STATUS_PSN; rng = RNG_POISON; species = SPECIES_ZANGOOSE; ability = ABILITY_IMMUNITY; } - PARAMETRIZE { statusAnim = B_ANIM_STATUS_SLP; rng = RNG_SLEEP; species = SPECIES_VIGOROTH; ability = ABILITY_VITAL_SPIRIT; } - PARAMETRIZE { statusAnim = B_ANIM_STATUS_SLP; rng = RNG_SLEEP; species = SPECIES_HYPNO; ability = ABILITY_INSOMNIA; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PSN; rng = MOVE_EFFECT_POISON; species = SPECIES_ZANGOOSE; ability = ABILITY_IMMUNITY; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_SLP; rng = MOVE_EFFECT_SLEEP; species = SPECIES_VIGOROTH; ability = ABILITY_VITAL_SPIRIT; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_SLP; rng = MOVE_EFFECT_SLEEP; species = SPECIES_HYPNO; ability = ABILITY_INSOMNIA; } GIVEN { - RNGSeed(rng); PLAYER(SPECIES_WOBBUFFET); OPPONENT(species) {Ability(ability);} } WHEN { - TURN { MOVE(player, MOVE_DIRE_CLAW); } + TURN { MOVE(player, MOVE_DIRE_CLAW, WITH_RNG(RNG_DIRE_CLAW, rng)); } TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_DIRE_CLAW, player); @@ -112,15 +103,14 @@ SINGLE_BATTLE_TEST("Dire Claw cannot poison/paralyze/cause to fall asleep a mon { u8 statusAnim; u32 rng; - PARAMETRIZE { statusAnim = B_ANIM_STATUS_PSN; rng = RNG_POISON; } - PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; } - PARAMETRIZE { statusAnim = B_ANIM_STATUS_SLP; rng = RNG_SLEEP; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PSN; rng = MOVE_EFFECT_POISON; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = MOVE_EFFECT_PARALYSIS; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_SLP; rng = MOVE_EFFECT_SLEEP; } GIVEN { - RNGSeed(rng); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET) {Status1(STATUS1_BURN);} } WHEN { - TURN { MOVE(player, MOVE_DIRE_CLAW); } + TURN { MOVE(player, MOVE_DIRE_CLAW, WITH_RNG(RNG_DIRE_CLAW, rng)); } TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_DIRE_CLAW, player); diff --git a/test/move_effect_tri_attack.c b/test/move_effect_tri_attack.c index 9bfacdb985ea..c3fbfaacebf5 100644 --- a/test/move_effect_tri_attack.c +++ b/test/move_effect_tri_attack.c @@ -6,21 +6,14 @@ ASSUMPTIONS ASSUME(gBattleMoves[MOVE_TRI_ATTACK].effect == EFFECT_TRI_ATTACK); } -// found by brute-force -#define RNG_PARALYSIS 0xcb0 -#define RNG_BURN 0x2BE -#define RNG_FREEZE 5 - SINGLE_BATTLE_TEST("Tri Attack can inflict paralysis, burn or freeze") { u8 statusAnim; - u32 rng; - KNOWN_FAILING; - PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; } - PARAMETRIZE { statusAnim = B_ANIM_STATUS_BRN; rng = RNG_BURN; } - PARAMETRIZE { statusAnim = B_ANIM_STATUS_FRZ; rng = RNG_FREEZE; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_BRN; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_FRZ; } + PASSES_RANDOMLY(1, 3, RNG_TRI_ATTACK); GIVEN { - RNGSeed(rng); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -48,16 +41,15 @@ SINGLE_BATTLE_TEST("Tri Attack cannot paralyze/burn/freeze electric/fire/ice typ u16 species; u32 rng; #if B_PARALYZE_ELECTRIC >= GEN_6 - PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; species = SPECIES_RAICHU;} + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = MOVE_EFFECT_PARALYSIS; species = SPECIES_RAICHU;} #endif // B_PARALYZE_ELECTRIC - PARAMETRIZE { statusAnim = B_ANIM_STATUS_BRN; rng = RNG_BURN; species = SPECIES_ARCANINE; } - PARAMETRIZE { statusAnim = B_ANIM_STATUS_FRZ; rng = RNG_FREEZE; species = SPECIES_GLALIE; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_BRN; rng = MOVE_EFFECT_BURN; species = SPECIES_ARCANINE; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_FRZ; rng = MOVE_EFFECT_FREEZE; species = SPECIES_GLALIE; } GIVEN { - RNGSeed(rng); PLAYER(SPECIES_WOBBUFFET); OPPONENT(species); } WHEN { - TURN { MOVE(player, MOVE_TRI_ATTACK); } + TURN { MOVE(player, MOVE_TRI_ATTACK, WITH_RNG(RNG_TRI_ATTACK, rng)); } TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TRI_ATTACK, player); @@ -80,23 +72,22 @@ SINGLE_BATTLE_TEST("Tri Attack cannot paralyze/burn/freeze pokemon with abilitie u8 statusAnim; u16 species, ability; u32 rng; - PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; species = SPECIES_RAICHU; ability = ABILITY_LIGHTNING_ROD; } - PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; species = SPECIES_JOLTEON; ability = ABILITY_VOLT_ABSORB; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = MOVE_EFFECT_PARALYSIS; species = SPECIES_RAICHU; ability = ABILITY_LIGHTNING_ROD; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = MOVE_EFFECT_PARALYSIS; species = SPECIES_JOLTEON; ability = ABILITY_VOLT_ABSORB; } #if P_GEN_4_POKEMON == TRUE - PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; species = SPECIES_ELECTIVIRE; ability = ABILITY_MOTOR_DRIVE; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = MOVE_EFFECT_PARALYSIS; species = SPECIES_ELECTIVIRE; ability = ABILITY_MOTOR_DRIVE; } #endif // P_GEN_4_POKEMON #if P_GEN_7_POKEMON == TRUE - PARAMETRIZE { statusAnim = B_ANIM_STATUS_BRN; rng = RNG_BURN; species = SPECIES_DEWPIDER; ability = ABILITY_WATER_BUBBLE; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_BRN; rng = MOVE_EFFECT_BURN; species = SPECIES_DEWPIDER; ability = ABILITY_WATER_BUBBLE; } #endif // P_GEN_7_POKEMON - PARAMETRIZE { statusAnim = B_ANIM_STATUS_BRN; rng = RNG_BURN; species = SPECIES_SEAKING; ability = ABILITY_WATER_VEIL; } - PARAMETRIZE { statusAnim = B_ANIM_STATUS_FRZ; rng = RNG_FREEZE; species = SPECIES_CAMERUPT; ability = ABILITY_MAGMA_ARMOR; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_BRN; rng = MOVE_EFFECT_BURN; species = SPECIES_SEAKING; ability = ABILITY_WATER_VEIL; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_FRZ; rng = MOVE_EFFECT_FREEZE; species = SPECIES_CAMERUPT; ability = ABILITY_MAGMA_ARMOR; } GIVEN { - RNGSeed(rng); PLAYER(SPECIES_WOBBUFFET); OPPONENT(species) {Ability(ability);} } WHEN { - TURN { MOVE(player, MOVE_TRI_ATTACK); } + TURN { MOVE(player, MOVE_TRI_ATTACK, WITH_RNG(RNG_TRI_ATTACK, rng)); } TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TRI_ATTACK, player); @@ -118,15 +109,14 @@ SINGLE_BATTLE_TEST("Tri Attack cannot paralyze/burn/freeze a mon which is alread { u8 statusAnim; u32 rng; - PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; } - PARAMETRIZE { statusAnim = B_ANIM_STATUS_BRN; rng = RNG_BURN; } - PARAMETRIZE { statusAnim = B_ANIM_STATUS_FRZ; rng = RNG_FREEZE; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = MOVE_EFFECT_PARALYSIS; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_BRN; rng = MOVE_EFFECT_BURN; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_FRZ; rng = MOVE_EFFECT_FREEZE; } GIVEN { - RNGSeed(rng); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET) {Status1(STATUS1_SLEEP);} } WHEN { - TURN { MOVE(player, MOVE_TRI_ATTACK); } + TURN { MOVE(player, MOVE_TRI_ATTACK, WITH_RNG(RNG_TRI_ATTACK, rng)); } TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TRI_ATTACK, player); diff --git a/test/random.c b/test/random.c index abaf4a4f821b..39f587c062b6 100644 --- a/test/random.c +++ b/test/random.c @@ -34,6 +34,17 @@ TEST("RandomWeighted generates 0..n-1") } } +TEST("RandomElement generates an element") +{ + u32 i; + static const u8 es[4] = { 1, 2, 4, 8 }; + for (i = 0; i < 1024; i++) + { + u32 e = *(const u8 *)RandomElementArrayDefault(RNG_NONE, es, sizeof(es[0]), ARRAY_COUNT(es)); + EXPECT(e == 1 || e == 2 || e == 4 || e == 8); + } +} + TEST("RandomUniform generates uniform distribution") { u32 i, error; @@ -42,7 +53,7 @@ TEST("RandomUniform generates uniform distribution") memset(distribution, 0, sizeof(distribution)); for (i = 0; i < 4096; i++) { - u32 r = RandomUniformDefault(RNG_NONE, 0, ARRAY_COUNT(distribution)); + u32 r = RandomUniformDefault(RNG_NONE, 0, ARRAY_COUNT(distribution) - 1); EXPECT(0 <= r && r < ARRAY_COUNT(distribution)); distribution[r]++; } @@ -79,3 +90,23 @@ TEST("RandomWeighted generates distribution in proportion to the weights") EXPECT_LT(error, UQ_4_12(0.025)); } + +TEST("RandomElement generates a uniform distribution") +{ + u32 i, error; + static const u8 es[4] = { 1, 2, 4, 8 }; + u16 distribution[9]; + + memset(distribution, 0, sizeof(distribution)); + for (i = 0; i < 4096; i++) + { + u32 e = *(const u8 *)RandomElementArrayDefault(RNG_NONE, es, sizeof(es[0]), ARRAY_COUNT(es)); + distribution[e]++; + } + + error = 0; + for (i = 0; i < ARRAY_COUNT(es); i++) + error += abs(UQ_4_12(0.25) - distribution[es[i]]); + + EXPECT_LT(error, UQ_4_12(0.025)); +} diff --git a/test/test_battle.h b/test/test_battle.h index 0e0464254f9a..60d0dc33cc8d 100644 --- a/test/test_battle.h +++ b/test/test_battle.h @@ -303,13 +303,14 @@ * The inference process is naive, if your test contains anything that * modifies the speed of a battler you should specify them explicitly. * - * MOVE(battler, move | moveSlot:, [megaEvolve:], [hit:], [criticalHit:], [target:], [allowed:]) + * MOVE(battler, move | moveSlot:, [megaEvolve:], [hit:], [criticalHit:], [target:], [allowed:], [WITH_RNG(tag, value]) * Used when the battler chooses Fight. Either the move ID or move slot * must be specified. megaEvolve: TRUE causes the battler to Mega Evolve * if able, hit: FALSE causes the move to miss, criticalHit: TRUE causes * the move to land a critical hit, target: is used in double battles to * choose the target (when necessary), and allowed: FALSE is used to - * reject an illegal move e.g. a Disabled one. + * reject an illegal move e.g. a Disabled one. WITH_RNG allows the move + * to specify an explicit outcome for an RNG tag. * MOVE(playerLeft, MOVE_TACKLE, target: opponentRight); * If the battler does not have an explicit Moves specified the moveset * will be populated based on the MOVEs it uses. @@ -538,11 +539,18 @@ struct QueuedEvent } as; }; +struct TurnRNG +{ + u16 tag; + u16 value; +}; + struct BattlerTurn { u8 hit:2; u8 criticalHit:2; u8 secondaryEffect:2; + struct TurnRNG rng; }; struct BattleTestData @@ -758,6 +766,8 @@ enum { TURN_CLOSED, TURN_OPEN, TURN_CLOSING }; #define SKIP_TURN(battler) SkipTurn(__LINE__, battler) #define SEND_OUT(battler, partyIndex) SendOut(__LINE__, battler, partyIndex) +#define WITH_RNG(tag, value) rng: ((struct TurnRNG) { tag, value }) + struct MoveContext { u16 move; @@ -777,6 +787,8 @@ struct MoveContext u16 explicitAllowed:1; struct BattlePokemon *target; bool8 explicitTarget; + struct TurnRNG rng; + bool8 explicitRNG; }; void OpenTurn(u32 sourceLine); diff --git a/test/test_runner_battle.c b/test/test_runner_battle.c index d869bf2e51bb..1b03341a455b 100644 --- a/test/test_runner_battle.c +++ b/test/test_runner_battle.c @@ -292,6 +292,20 @@ static void BattleTest_Run(void *data) u32 RandomUniform(enum RandomTag tag, u32 lo, u32 hi) { + const struct BattlerTurn *turn = NULL; + u32 default_ = hi; + + if (gCurrentTurnActionNumber < gBattlersCount) + { + u32 battlerId = gBattlerByTurnOrder[gCurrentTurnActionNumber]; + turn = &DATA.battleRecordTurns[gBattleResults.battleTurnCounter][battlerId]; + } + + if (turn && turn->rng.tag == tag) + { + default_ = turn->rng.value; + } + if (tag == STATE->rngTag) { u32 n = hi - lo + 1; @@ -308,7 +322,7 @@ u32 RandomUniform(enum RandomTag tag, u32 lo, u32 hi) return STATE->runTrial + lo; } - return hi; + return default_; } u32 RandomWeightedArray(enum RandomTag tag, u32 sum, u32 n, const u8 *weights) @@ -322,28 +336,35 @@ u32 RandomWeightedArray(enum RandomTag tag, u32 sum, u32 n, const u8 *weights) turn = &DATA.battleRecordTurns[gBattleResults.battleTurnCounter][battlerId]; } - switch (tag) + if (turn && turn->rng.tag == tag) { - case RNG_ACCURACY: - ASSUME(n == 2); - if (turn && turn->hit) - return turn->hit - 1; - default_ = TRUE; - break; + default_ = turn->rng.value; + } + else + { + switch (tag) + { + case RNG_ACCURACY: + ASSUME(n == 2); + if (turn && turn->hit) + return turn->hit - 1; + default_ = TRUE; + break; - case RNG_CRITICAL_HIT: - ASSUME(n == 2); - if (turn && turn->criticalHit) - return turn->criticalHit - 1; - default_ = FALSE; - break; + case RNG_CRITICAL_HIT: + ASSUME(n == 2); + if (turn && turn->criticalHit) + return turn->criticalHit - 1; + default_ = FALSE; + break; - case RNG_SECONDARY_EFFECT: - ASSUME(n == 2); - if (turn && turn->secondaryEffect) - return turn->secondaryEffect - 1; - default_ = TRUE; - break; + case RNG_SECONDARY_EFFECT: + ASSUME(n == 2); + if (turn && turn->secondaryEffect) + return turn->secondaryEffect - 1; + default_ = TRUE; + break; + } } if (tag == STATE->rngTag) @@ -365,6 +386,52 @@ u32 RandomWeightedArray(enum RandomTag tag, u32 sum, u32 n, const u8 *weights) return default_; } +const void *RandomElementArray(enum RandomTag tag, const void *array, size_t size, size_t count) +{ + const struct BattlerTurn *turn = NULL; + u32 index = count-1; + + if (gCurrentTurnActionNumber < gBattlersCount) + { + u32 battlerId = gBattlerByTurnOrder[gCurrentTurnActionNumber]; + turn = &DATA.battleRecordTurns[gBattleResults.battleTurnCounter][battlerId]; + } + + if (turn && turn->rng.tag == tag) + { + u32 element; + for (index = 0; index < count; index++) + { + memcpy(&element, (const u8 *)array + size * index, size); + if (element == turn->rng.value) + break; + } + if (index == count) + { + // TODO: Incorporate the line number. + const char *filename = gTestRunnerState.test->filename; + Test_ExitWithResult(TEST_RESULT_ERROR, "%s: RandomElement illegal value requested: %d", filename, turn->rng.value); + } + } + + if (tag == STATE->rngTag) + { + if (STATE->trials == 1) + { + STATE->trials = count; + PrintTestName(); + } + else if (STATE->trials != count) + { + Test_ExitWithResult(TEST_RESULT_ERROR, "RandomElement called with inconsistent trials %d and %d", STATE->trials, count); + } + STATE->trialRatio = Q_4_12(1) / count; + index = STATE->runTrial; + } + + return (const u8 *)array + size * index; +} + static s32 TryAbilityPopUp(s32 i, s32 n, u32 battlerId, u32 ability) { struct QueuedAbilityEvent *event; @@ -1357,6 +1424,8 @@ void Move(u32 sourceLine, struct BattlePokemon *battler, struct MoveContext ctx) DATA.battleRecordTurns[DATA.turns][battlerId].criticalHit = 1 + ctx.criticalHit; if (ctx.explicitSecondaryEffect) DATA.battleRecordTurns[DATA.turns][battlerId].secondaryEffect = 1 + ctx.secondaryEffect; + if (ctx.explicitRNG) + DATA.battleRecordTurns[DATA.turns][battlerId].rng = ctx.rng; if (!(DATA.actionBattlers & (1 << battlerId))) { From 2017bee3f8efc1c0d37175cf913bf8a593519b97 Mon Sep 17 00:00:00 2001 From: AgustinGDLV Date: Mon, 27 Mar 2023 11:35:23 -0700 Subject: [PATCH 217/428] fixed Castform + Cherrim --- data/battle_scripts_1.s | 60 ++++++------------- include/battle_scripts.h | 3 - include/config/battle.h | 1 + include/constants/battle.h | 1 + include/constants/battle_script_commands.h | 7 +-- include/constants/form_change_types.h | 6 +- src/battle_script_commands.c | 36 +++-------- src/battle_util.c | 26 ++++++-- src/data/pokemon/form_change_table_pointers.h | 4 ++ src/data/pokemon/form_change_tables.h | 22 +++++++ 10 files changed, 82 insertions(+), 84 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index b8740cb6b447..e07ecdb728bb 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -5156,7 +5156,7 @@ BattleScript_MoveWeatherChange:: waitanimation printfromtable gMoveWeatherChangeStringIds waitmessage B_WAIT_TIME_LONG - call BattleScript_WeatherFormChanges + call BattleScript_ActivateWeatherAbilities goto BattleScript_MoveEnd BattleScript_EffectSunnyDay:: @@ -6860,7 +6860,7 @@ BattleScript_OverworldWeatherStarts:: printfromtable gWeatherStartsStringIds waitmessage B_WAIT_TIME_LONG playanimation_var BS_ATTACKER, sB_ANIM_ARG1 - call BattleScript_WeatherFormChanges + call BattleScript_ActivateWeatherAbilities end3 BattleScript_OverworldTerrain:: @@ -8413,7 +8413,7 @@ BattleScript_DrizzleActivates:: printstring STRINGID_PKMNMADEITRAIN waitstate playanimation BS_BATTLER_0, B_ANIM_RAIN_CONTINUES - call BattleScript_WeatherFormChanges + call BattleScript_ActivateWeatherAbilities end3 BattleScript_AbilityRaisesDefenderStat:: @@ -8575,7 +8575,7 @@ BattleScript_SandstreamActivates:: printstring STRINGID_PKMNSXWHIPPEDUPSANDSTORM waitstate playanimation BS_BATTLER_0, B_ANIM_SANDSTORM_CONTINUES - call BattleScript_WeatherFormChanges + call BattleScript_ActivateWeatherAbilities end3 BattleScript_SandSpitActivates:: @@ -8584,7 +8584,7 @@ BattleScript_SandSpitActivates:: printstring STRINGID_ASANDSTORMKICKEDUP waitstate playanimation BS_BATTLER_0, B_ANIM_SANDSTORM_CONTINUES - call BattleScript_WeatherFormChanges + call BattleScript_ActivateWeatherAbilities return BattleScript_ShedSkinActivates:: @@ -8594,37 +8594,15 @@ BattleScript_ShedSkinActivates:: updatestatusicon BS_ATTACKER end3 -BattleScript_WeatherFormChanges:: - setbyte sBATTLER, 0 -BattleScript_WeatherFormChangesLoop:: - tryweatherformdatachange - activateweatherchangeabilities BS_SCRIPTING - addbyte sBATTLER, 1 - jumpifbytenotequal sBATTLER, gBattlersCount, BattleScript_WeatherFormChangesLoop - return - -BattleScript_WeatherFormChange:: - call BattleScript_DoWeatherFormChange - end3 - -BattleScript_DoWeatherFormChange:: - copybyte gBattlerAbility, sBATTLER -.if B_WEATHER_FORMS >= GEN_5 - jumpifspecies BS_SCRIPTING, SPECIES_CASTFORM, BattleScript_DoWeatherFormChange_ForecastCheck -BattleScript_DoWeatherFormChange_FlowerGiftCheck: - jumpifability BS_SCRIPTING, ABILITY_FLOWER_GIFT, BattleScript_DoWeatherFormChange_PopUp - goto BattleScript_DoWeatherFormChange_AfterPopUp -.endif -BattleScript_DoWeatherFormChange_ForecastCheck: - jumpifability BS_SCRIPTING, ABILITY_FORECAST, BattleScript_DoWeatherFormChange_PopUp - goto BattleScript_DoWeatherFormChange_AfterPopUp -BattleScript_DoWeatherFormChange_PopUp: - call BattleScript_AbilityPopUp -BattleScript_DoWeatherFormChange_AfterPopUp: - doweatherformchangeanimation - waitstate - printstring STRINGID_PKMNTRANSFORMED - waitmessage B_WAIT_TIME_LONG +BattleScript_ActivateWeatherAbilities: + copybyte sBATTLER, gBattlerAttacker + setbyte gBattlerAttacker, 0 +BattleScript_ActivateWeatherAbilities_Loop: + activateweatherchangeabilities BS_ATTACKER +BattleScript_ActivateWeatherAbilities_Increment: + addbyte gBattlerAttacker, 1 + jumpifbytenotequal gBattlerAttacker, gBattlersCount, BattleScript_ActivateWeatherAbilities_Loop + copybyte gBattlerAttacker, sBATTLER return BattleScript_TryAdrenalineOrb: @@ -8719,7 +8697,7 @@ BattleScript_DroughtActivates:: printstring STRINGID_PKMNSXINTENSIFIEDSUN waitstate playanimation BS_BATTLER_0, B_ANIM_SUN_CONTINUES - call BattleScript_WeatherFormChanges + call BattleScript_ActivateWeatherAbilities end3 BattleScript_DesolateLandActivates:: @@ -8728,7 +8706,7 @@ BattleScript_DesolateLandActivates:: printstring STRINGID_EXTREMELYHARSHSUNLIGHT waitstate playanimation BS_BATTLER_0, B_ANIM_SUN_CONTINUES - call BattleScript_WeatherFormChanges + call BattleScript_ActivateWeatherAbilities end3 BattleScript_DesolateLandEvaporatesWaterTypeMoves:: @@ -8748,7 +8726,7 @@ BattleScript_PrimordialSeaActivates:: printstring STRINGID_HEAVYRAIN waitstate playanimation BS_BATTLER_0, B_ANIM_RAIN_CONTINUES - call BattleScript_WeatherFormChanges + call BattleScript_ActivateWeatherAbilities end3 BattleScript_PrimordialSeaFizzlesOutFireTypeMoves:: @@ -8825,7 +8803,7 @@ BattleScript_SnowWarningActivates:: printstring STRINGID_SNOWWARNINGHAIL waitstate playanimation BS_BATTLER_0, B_ANIM_HAIL_CONTINUES - call BattleScript_WeatherFormChanges + call BattleScript_ActivateWeatherAbilities end3 BattleScript_TerrainSeedLoop: @@ -10002,7 +9980,7 @@ BattleScript_AnnounceAirLockCloudNine:: call BattleScript_AbilityPopUp printstring STRINGID_AIRLOCKACTIVATES waitmessage B_WAIT_TIME_LONG - call BattleScript_WeatherFormChanges + call BattleScript_ActivateWeatherAbilities end3 BattleScript_QuickClawActivation:: diff --git a/include/battle_scripts.h b/include/battle_scripts.h index c78fcafe48c8..b6a28448856c 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -149,9 +149,6 @@ extern const u8 BattleScript_TraceActivatesEnd3[]; extern const u8 BattleScript_RainDishActivates[]; extern const u8 BattleScript_SandstreamActivates[]; extern const u8 BattleScript_ShedSkinActivates[]; -extern const u8 BattleScript_WeatherFormChanges[]; -extern const u8 BattleScript_WeatherFormChangesLoop[]; -extern const u8 BattleScript_WeatherFormChange[]; extern const u8 BattleScript_IntimidateActivates[]; extern const u8 BattleScript_DroughtActivates[]; extern const u8 BattleScript_TookAttack[]; diff --git a/include/config/battle.h b/include/config/battle.h index 4a3d6382fbcd..173f57ac3d53 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -99,6 +99,7 @@ // Additionally, in gen8+ the Healing Wish's effect will be stored until the user switches into a statused or hurt mon. #define B_DEFOG_CLEARS_TERRAIN GEN_LATEST // In Gen8+, Defog also clears active Terrain. #define B_STOCKPILE_RAISES_DEFS GEN_LATEST // In Gen4+, Stockpile also raises Defense and Sp.Defense stats. Once Spit Up / Swallow is used, these stat changes are lost. +#define B_TRANSFORM_FORM_CHANGES GEN_LATEST // In Gen5+, Transformed Pokemon cannot change forms. // Ability settings #define B_EXPANDED_ABILITY_NAMES TRUE // If TRUE, ability names are increased from 12 characters to 16 characters. diff --git a/include/constants/battle.h b/include/constants/battle.h index 61c3776c6c42..5d5dca20a25d 100644 --- a/include/constants/battle.h +++ b/include/constants/battle.h @@ -269,6 +269,7 @@ #define MOVE_RESULT_NO_EFFECT (MOVE_RESULT_MISSED | MOVE_RESULT_DOESNT_AFFECT_FOE | MOVE_RESULT_FAILED) // Battle Weather flags +#define B_WEATHER_NONE 0 #define B_WEATHER_RAIN_TEMPORARY (1 << 0) #define B_WEATHER_RAIN_DOWNPOUR (1 << 1) // unused #define B_WEATHER_RAIN_PERMANENT (1 << 2) diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h index 26064bcfb1b8..b8a68909888b 100644 --- a/include/constants/battle_script_commands.h +++ b/include/constants/battle_script_commands.h @@ -332,10 +332,9 @@ #define MOVEEND_PICKPOCKET 30 #define MOVEEND_DANCER 31 #define MOVEEND_EMERGENCY_EXIT 32 -#define MOVEEND_WEATHER_FORM 33 -#define MOVEEND_SYMBIOSIS 34 -#define MOVEEND_CLEAR_BITS 35 -#define MOVEEND_COUNT 36 +#define MOVEEND_SYMBIOSIS 33 +#define MOVEEND_CLEAR_BITS 34 +#define MOVEEND_COUNT 35 // switch cases #define B_SWITCH_NORMAL 0 diff --git a/include/constants/form_change_types.h b/include/constants/form_change_types.h index 4e60904aa613..651bcf7888c7 100644 --- a/include/constants/form_change_types.h +++ b/include/constants/form_change_types.h @@ -87,8 +87,12 @@ // param1: item to hold. #define FORM_CHANGE_BATTLE_PRIMAL_REVERSION 13 +// Form change that activates when a specific weather is set during battle. +// param1: weather to check +#define FORM_CHANGE_BATTLE_WEATHER 14 + // Form change that activates automatically when the turn ends. // param1: ability to check. -#define FORM_CHANGE_BATTLE_TURN_END 14 +#define FORM_CHANGE_BATTLE_TURN_END 15 #endif // GUARD_CONSTANTS_FORM_CHANGE_TYPES_H diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 51d71e34742a..c1df49b4a89a 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -6216,28 +6216,6 @@ static void Cmd_moveend(void) } gBattleScripting.moveendState++; break; - case MOVEEND_WEATHER_FORM: - for (i = 0; i < MAX_BATTLERS_COUNT; i++) - { - switch (gBattleMons[i].species) - { - case SPECIES_CASTFORM: - case SPECIES_CASTFORM_RAINY: - case SPECIES_CASTFORM_SNOWY: - case SPECIES_CASTFORM_SUNNY: - case SPECIES_CHERRIM: - case SPECIES_CHERRIM_SUNSHINE: - effect = TryWeatherFormChange(i); - if (effect) - { - BattleScriptPushCursorAndCallback(BattleScript_WeatherFormChange); - gBattleScripting.battler = i; - gBattleStruct->formToChangeInto = effect - 1; - } - } - } - gBattleScripting.moveendState++; - break; case MOVEEND_SYMBIOSIS: for (i = 0; i < gBattlersCount; i++) { @@ -15080,13 +15058,13 @@ static void Cmd_tryweatherformdatachange(void) u8 form; - gBattlescriptCurrInstr = cmd->nextInstr; - form = TryWeatherFormChange(gBattleScripting.battler); - if (form) - { - BattleScriptPushCursorAndCallback(BattleScript_WeatherFormChange); - *(&gBattleStruct->formToChangeInto) = form - 1; - } + // gBattlescriptCurrInstr = cmd->nextInstr; + // form = TryWeatherFormChange(gBattleScripting.battler); + // if (form) + // { + // BattleScriptPushCursorAndCallback(BattleScript_WeatherFormChange); + // *(&gBattleStruct->formToChangeInto) = form - 1; + // } } // Water and Mud Sport diff --git a/src/battle_util.c b/src/battle_util.c index c6a59acf5b63..3f85d298a0ac 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -2564,7 +2564,15 @@ u8 DoFieldEndTurnEffects(void) gBattleStruct->turnCountersTracker++; break; case ENDTURN_WEATHER_FORM: - AbilityBattleEffects(ABILITYEFFECT_ON_WEATHER, 0, 0, 0, 0); + for (i = 0; i < gBattlersCount; ++i) + { + // This breaks Eiscue right now, because Eiscue doesn't use FORM_CHANGE_BATTLE_WEATHER. + if(TryBattleFormChange(i, FORM_CHANGE_BATTLE_WEATHER)) + { + BattleScriptPushCursorAndCallback(BattleScript_BattlerFormChangeWithStringEnd3); + effect++; + } + } gBattleStruct->turnCountersTracker++; break; case ENDTURN_STATUS_HEAL: @@ -6155,11 +6163,11 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move #else TRY_WEATHER_FORM: #endif - effect = TryWeatherFormChange(battler); - if (effect != 0) + if (IsBattlerWeatherAffected(battler, gBattleWeather) + && TryBattleFormChange(battler, FORM_CHANGE_BATTLE_WEATHER)) { - BattleScriptPushCursorAndCallback(BattleScript_WeatherFormChange); - *(&gBattleStruct->formToChangeInto) = effect - 1; + BattleScriptPushCursorAndCallback(BattleScript_BattlerFormChangeWithStringEnd3); + effect++; } break; case ABILITY_ICE_FACE: @@ -10153,6 +10161,11 @@ u16 GetBattleFormChangeTargetSpecies(u8 battlerId, u16 method) } } break; + case FORM_CHANGE_BATTLE_WEATHER: + if (gBattleWeather & formChanges[i].param1 + || (gBattleWeather == B_WEATHER_NONE && formChanges[i].param1 == B_WEATHER_NONE)) + targetSpecies = formChanges[i].targetSpecies; + break; case FORM_CHANGE_BATTLE_TURN_END: if (formChanges[i].param1 == GetBattlerAbility(battlerId)) targetSpecies = formChanges[i].targetSpecies; @@ -10168,7 +10181,8 @@ u16 GetBattleFormChangeTargetSpecies(u8 battlerId, u16 method) bool32 CanBattlerFormChange(u8 battlerId, u16 method) { // Can't change form if transformed. - if (gBattleMons[battlerId].status2 & STATUS2_TRANSFORMED) + if (gBattleMons[battlerId].status2 & STATUS2_TRANSFORMED + && B_TRANSFORM_FORM_CHANGES >= GEN_5) return FALSE; // Mega Evolved Pokémon should always revert to normal upon fainting or ending the battle. if (IsBattlerMegaEvolved(battlerId) && (method == FORM_CHANGE_FAINT || method == FORM_CHANGE_END_BATTLE)) diff --git a/src/data/pokemon/form_change_table_pointers.h b/src/data/pokemon/form_change_table_pointers.h index 83f68d70c0c1..daeaa9cbbe89 100644 --- a/src/data/pokemon/form_change_table_pointers.h +++ b/src/data/pokemon/form_change_table_pointers.h @@ -64,6 +64,10 @@ const struct FormChange *const gFormChangeTablePointers[NUM_SPECIES] = [SPECIES_ALTARIA_MEGA] = sAltariaFormChangeTable, [SPECIES_ABSOL] = sAbsolFormChangeTable, [SPECIES_ABSOL_MEGA] = sAbsolFormChangeTable, + [SPECIES_CASTFORM] = sCastformFormChangeTable, + [SPECIES_CASTFORM_SUNNY] = sCastformFormChangeTable, + [SPECIES_CASTFORM_RAINY] = sCastformFormChangeTable, + [SPECIES_CASTFORM_SNOWY] = sCastformFormChangeTable, [SPECIES_BANETTE] = sBanetteFormChangeTable, [SPECIES_BANETTE_MEGA] = sBanetteFormChangeTable, [SPECIES_AGGRON] = sAggronFormChangeTable, diff --git a/src/data/pokemon/form_change_tables.h b/src/data/pokemon/form_change_tables.h index afe54f6322c1..c4ade7b9a8ff 100644 --- a/src/data/pokemon/form_change_tables.h +++ b/src/data/pokemon/form_change_tables.h @@ -155,6 +155,18 @@ static const struct FormChange sAbsolFormChangeTable[] = { {FORM_CHANGE_TERMINATOR}, }; +static const struct FormChange sCastformFormChangeTable[] = { + {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CASTFORM_SUNNY, B_WEATHER_SUN}, + {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CASTFORM_RAINY, B_WEATHER_RAIN}, + {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CASTFORM_SNOWY, B_WEATHER_HAIL}, + {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CASTFORM, ~(B_WEATHER_SUN | B_WEATHER_RAIN | B_WEATHER_HAIL)}, + {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CASTFORM, B_WEATHER_NONE}, + {FORM_CHANGE_BATTLE_SWITCH, SPECIES_CASTFORM}, + {FORM_CHANGE_FAINT, SPECIES_CASTFORM}, + {FORM_CHANGE_END_BATTLE, SPECIES_CASTFORM}, + {FORM_CHANGE_TERMINATOR}, +}; + static const struct FormChange sBanetteFormChangeTable[] = { {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_BANETTE_MEGA, ITEM_BANETTITE}, {FORM_CHANGE_TERMINATOR}, @@ -218,6 +230,16 @@ static const struct FormChange sBurmyFormChangeTable[] = { {FORM_CHANGE_TERMINATOR}, }; +static const struct FormChange sCherrimFormChangeTable[] = { + {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CHERRIM_SUNSHINE, B_WEATHER_SUN}, + {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CHERRIM, ~B_WEATHER_SUN}, + {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CHERRIM, B_WEATHER_NONE}, + {FORM_CHANGE_BATTLE_SWITCH, SPECIES_CHERRIM}, + {FORM_CHANGE_FAINT, SPECIES_CHERRIM}, + {FORM_CHANGE_END_BATTLE, SPECIES_CHERRIM}, + {FORM_CHANGE_TERMINATOR}, +}; + static const struct FormChange sLopunnyFormChangeTable[] = { {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_LOPUNNY_MEGA, ITEM_LOPUNNITE}, {FORM_CHANGE_TERMINATOR}, From b856cb3e624652e5fb4b75d598359c84cd3f5764 Mon Sep 17 00:00:00 2001 From: AgustinGDLV Date: Mon, 27 Mar 2023 12:05:06 -0700 Subject: [PATCH 218/428] fixed Eiscue + multiple weather form changes at once (probably) --- src/battle_util.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/battle_util.c b/src/battle_util.c index 3f85d298a0ac..9e85f3ce39aa 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -2566,14 +2566,14 @@ u8 DoFieldEndTurnEffects(void) case ENDTURN_WEATHER_FORM: for (i = 0; i < gBattlersCount; ++i) { - // This breaks Eiscue right now, because Eiscue doesn't use FORM_CHANGE_BATTLE_WEATHER. - if(TryBattleFormChange(i, FORM_CHANGE_BATTLE_WEATHER)) + if (AbilityBattleEffects(ABILITYEFFECT_ON_WEATHER, i, 0, 0, 0)) { - BattleScriptPushCursorAndCallback(BattleScript_BattlerFormChangeWithStringEnd3); effect++; + break; } } - gBattleStruct->turnCountersTracker++; + if (effect == 0) + gBattleStruct->turnCountersTracker++; break; case ENDTURN_STATUS_HEAL: for (gBattlerAttacker = 0; gBattlerAttacker < gBattlersCount; gBattlerAttacker++) @@ -6163,7 +6163,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move #else TRY_WEATHER_FORM: #endif - if (IsBattlerWeatherAffected(battler, gBattleWeather) + if ((IsBattlerWeatherAffected(battler, gBattleWeather) || gBattleWeather == B_WEATHER_NONE) && TryBattleFormChange(battler, FORM_CHANGE_BATTLE_WEATHER)) { BattleScriptPushCursorAndCallback(BattleScript_BattlerFormChangeWithStringEnd3); From 00d695ac2b313c5a887d20aad4618f350725713c Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Tue, 28 Mar 2023 10:38:48 -0400 Subject: [PATCH 219/428] add AI_FLAG_OMNISCIENT --- include/battle.h | 4 ++-- include/battle_ai_util.h | 1 + include/constants/battle_ai.h | 1 + src/battle_ai_main.c | 13 +++++++++++++ src/battle_ai_util.c | 19 ++++++++++++++----- src/battle_debug.c | 4 ++-- src/battle_main.c | 4 ++-- 7 files changed, 35 insertions(+), 11 deletions(-) diff --git a/include/battle.h b/include/battle.h index 491273b80bc4..19f9df13d8f6 100644 --- a/include/battle.h +++ b/include/battle.h @@ -272,8 +272,8 @@ struct AiPartyMon struct AIPartyData // Opposing battlers - party mons. { - struct AiPartyMon mons[2][PARTY_SIZE]; // 2 parties(player, opponent). Used to save information on opposing party. - u8 count[2]; + struct AiPartyMon mons[NUM_BATTLE_SIDES][PARTY_SIZE]; // 2 parties(player, opponent). Used to save information on opposing party. + u8 count[NUM_BATTLE_SIDES]; }; struct AiLogicData diff --git a/include/battle_ai_util.h b/include/battle_ai_util.h index 11eba7b6618f..95f6619c5ecc 100644 --- a/include/battle_ai_util.h +++ b/include/battle_ai_util.h @@ -9,6 +9,7 @@ bool32 AI_RandLessThan(u8 val); void RecordLastUsedMoveByTarget(void); +bool32 BattlerHasAi(u32 battlerId); bool32 IsBattlerAIControlled(u32 battlerId); void ClearBattlerMoveHistory(u8 battlerId); void RecordLastUsedMoveBy(u32 battlerId, u32 move); diff --git a/include/constants/battle_ai.h b/include/constants/battle_ai.h index 1cfb9cd4dc71..1316054cd1b4 100644 --- a/include/constants/battle_ai.h +++ b/include/constants/battle_ai.h @@ -57,6 +57,7 @@ #define AI_FLAG_SCREENER (1 << 14) // AI prefers screening effects like reflect, mist, etc. TODO unfinished #define AI_FLAG_SMART_SWITCHING (1 << 15) // AI includes a lot more switching checks #define AI_FLAG_ACE_POKEMON (1 << 16) // AI has an Ace Pokemon. The last Pokemon in the party will not be used until it's the last one remaining. +#define AI_FLAG_OMNISCIENT (1 << 17) // AI has full knowledge of player moves, abilities, hold items // 'other' ai logic flags #define AI_FLAG_ROAMING (1 << 29) diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 19eedb41ccf1..6e308003adc8 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -257,6 +257,8 @@ static void CopyBattlerDataToAIParty(u32 bPosition, u32 side) void Ai_InitPartyStruct(void) { u32 i; + bool32 isOmniscient = (AI_THINKING_STRUCT->aiFlags & AI_FLAG_OMNISCIENT); + struct Pokemon *mon; AI_PARTY->count[B_SIDE_PLAYER] = gPlayerPartyCount; AI_PARTY->count[B_SIDE_OPPONENT] = gEnemyPartyCount; @@ -278,6 +280,17 @@ void Ai_InitPartyStruct(void) { if (GetMonData(&gPlayerParty[i], MON_DATA_HP) == 0) AI_PARTY->mons[B_SIDE_PLAYER][i].isFainted = TRUE; + + if (isOmniscient) + { + u32 j; + mon = &gPlayerParty[i]; + AI_PARTY->mons[B_SIDE_PLAYER][i].item = GetMonData(mon, MON_DATA_HELD_ITEM); + AI_PARTY->mons[B_SIDE_PLAYER][i].heldEffect = ItemId_GetHoldEffect(AI_PARTY->mons[B_SIDE_PLAYER][i].item); + AI_PARTY->mons[B_SIDE_PLAYER][i].ability = GetMonAbility(mon); + for (j = 0; j < MAX_MON_MOVES; j++) + AI_PARTY->mons[B_SIDE_PLAYER][i].moves[j] = GetMonData(mon, MON_DATA_MOVE1 + j); + } } } diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index a9e3ed3e0bd0..93586626e26d 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -457,7 +457,7 @@ void RecordLastUsedMoveByTarget(void) RecordKnownMove(gBattlerTarget, gLastMoves[gBattlerTarget]); } -bool32 IsBattlerAIControlled(u32 battlerId) +bool32 BattlerHasAi(u32 battlerId) { switch (GetBattlerPosition(battlerId)) { @@ -473,6 +473,14 @@ bool32 IsBattlerAIControlled(u32 battlerId) } } +bool32 IsBattlerAIControlled(u32 battlerId) +{ + if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_OMNISCIENT) + return TRUE; + + return BattlerHasAi(battlerId); +} + void ClearBattlerMoveHistory(u8 battlerId) { memset(BATTLE_HISTORY->usedMoves[battlerId], 0, sizeof(BATTLE_HISTORY->usedMoves[battlerId])); @@ -1230,8 +1238,9 @@ s32 AI_GetAbility(u32 battlerId) if (knownAbility == ABILITY_NONE) return knownAbility; - if (BATTLE_HISTORY->abilities[battlerId] != ABILITY_NONE) - return BATTLE_HISTORY->abilities[battlerId]; + if (AI_PARTY->mons[GetBattlerSide(battlerId)][gBattlerPartyIndexes[battlerId]].ability != ABILITY_NONE) { + return AI_PARTY->mons[GetBattlerSide(battlerId)][gBattlerPartyIndexes[battlerId]].ability; + } // Abilities that prevent fleeing - treat as always known if (knownAbility == ABILITY_SHADOW_TAG || knownAbility == ABILITY_MAGNET_PULL || knownAbility == ABILITY_ARENA_TRAP) @@ -1257,10 +1266,10 @@ u16 AI_GetHoldEffect(u32 battlerId) u32 holdEffect; if (!IsBattlerAIControlled(battlerId)) - holdEffect = BATTLE_HISTORY->itemEffects[battlerId]; + holdEffect = AI_PARTY->mons[GetBattlerSide(battlerId)][gBattlerPartyIndexes[battlerId]].heldEffect; else holdEffect = GetBattlerHoldEffect(battlerId, FALSE); - + if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_NEGATE_UNAWARE) return holdEffect; diff --git a/src/battle_debug.c b/src/battle_debug.c index 027be03a452a..1d690caaa02c 100644 --- a/src/battle_debug.c +++ b/src/battle_debug.c @@ -774,7 +774,7 @@ static void Task_ShowAiPoints(u8 taskId) // Swap battler if it's player mon data->aiBattlerId = data->battlerId; - while (!IsBattlerAIControlled(data->aiBattlerId)) + while (!BattlerHasAi(data->aiBattlerId)) { if (++data->aiBattlerId >= gBattlersCount) data->aiBattlerId = 0; @@ -931,7 +931,7 @@ static void Task_ShowAiKnowledge(u8 taskId) // Swap battler if it's player mon data->aiBattlerId = data->battlerId; - while (!IsBattlerAIControlled(data->aiBattlerId)) + while (!BattlerHasAi(data->aiBattlerId)) { if (++data->aiBattlerId >= gBattlersCount) data->aiBattlerId = 0; diff --git a/src/battle_main.c b/src/battle_main.c index efbf1b8195c1..8e0dc6d878f2 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -3859,7 +3859,7 @@ static void TryDoEventsBeforeFirstTurn(void) gChosenActionByBattler[i] = B_ACTION_NONE; gChosenMoveByBattler[i] = MOVE_NONE; // Record party slots of player's mons that appeared in battle - if (!IsBattlerAIControlled(i)) + if (!BattlerHasAi(i)) gBattleStruct->appearedInBattle |= gBitTable[gBattlerPartyIndexes[i]]; } TurnValuesCleanUp(FALSE); @@ -4096,7 +4096,7 @@ static void HandleTurnActionSelectionState(void) // Do AI score computations here so we can use them in AI_TrySwitchOrUseItem if ((gBattleTypeFlags & BATTLE_TYPE_HAS_AI || IsWildMonSmart()) - && (IsBattlerAIControlled(gActiveBattler) && !(gBattleTypeFlags & BATTLE_TYPE_PALACE))) { + && (BattlerHasAi(gActiveBattler) && !(gBattleTypeFlags & BATTLE_TYPE_PALACE))) { gBattleStruct->aiMoveOrAction[gActiveBattler] = ComputeBattleAiScores(gActiveBattler); } break; From 10ef3e83483c08cc5f62a1f7f0469aafdfa4f7b8 Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Tue, 28 Mar 2023 10:58:44 -0400 Subject: [PATCH 220/428] style fixes --- src/battle_ai_util.c | 5 ++--- src/battle_main.c | 3 ++- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 93586626e26d..51f4ef0467a0 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -1238,9 +1238,8 @@ s32 AI_GetAbility(u32 battlerId) if (knownAbility == ABILITY_NONE) return knownAbility; - if (AI_PARTY->mons[GetBattlerSide(battlerId)][gBattlerPartyIndexes[battlerId]].ability != ABILITY_NONE) { + if (AI_PARTY->mons[GetBattlerSide(battlerId)][gBattlerPartyIndexes[battlerId]].ability != ABILITY_NONE) return AI_PARTY->mons[GetBattlerSide(battlerId)][gBattlerPartyIndexes[battlerId]].ability; - } // Abilities that prevent fleeing - treat as always known if (knownAbility == ABILITY_SHADOW_TAG || knownAbility == ABILITY_MAGNET_PULL || knownAbility == ABILITY_ARENA_TRAP) @@ -1269,7 +1268,7 @@ u16 AI_GetHoldEffect(u32 battlerId) holdEffect = AI_PARTY->mons[GetBattlerSide(battlerId)][gBattlerPartyIndexes[battlerId]].heldEffect; else holdEffect = GetBattlerHoldEffect(battlerId, FALSE); - + if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_NEGATE_UNAWARE) return holdEffect; diff --git a/src/battle_main.c b/src/battle_main.c index 8e0dc6d878f2..81755285259f 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -4096,7 +4096,8 @@ static void HandleTurnActionSelectionState(void) // Do AI score computations here so we can use them in AI_TrySwitchOrUseItem if ((gBattleTypeFlags & BATTLE_TYPE_HAS_AI || IsWildMonSmart()) - && (BattlerHasAi(gActiveBattler) && !(gBattleTypeFlags & BATTLE_TYPE_PALACE))) { + && (BattlerHasAi(gActiveBattler) && !(gBattleTypeFlags & BATTLE_TYPE_PALACE))) + { gBattleStruct->aiMoveOrAction[gActiveBattler] = ComputeBattleAiScores(gActiveBattler); } break; From afc4b4cdee2d5596a6262084bd795281f887d7b9 Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Tue, 28 Mar 2023 15:07:37 -0400 Subject: [PATCH 221/428] add mirror herb --- data/battle_scripts_1.s | 29 ++++++++++++++++++++++----- include/battle.h | 1 + include/battle_scripts.h | 2 ++ include/constants/battle_string_ids.h | 3 ++- src/battle_message.c | 2 ++ src/battle_script_commands.c | 14 +++++++++++++ src/battle_util.c | 26 ++++++++++++++++++++++++ 7 files changed, 71 insertions(+), 6 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 200a04461085..c8bd5373583d 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -9980,23 +9980,42 @@ BattleScript_PrintPlayerForfeitedLinkBattle:: end2 BattleScript_TotemFlaredToLife:: - playanimation BS_ATTACKER, B_ANIM_TOTEM_FLARE + playanimation BS_ATTACKER, B_ANIM_TOTEM_FLARE, NULL printstring STRINGID_AURAFLAREDTOLIFE waitmessage B_WAIT_TIME_LONG - goto BattleScript_ApplyTotemVarBoost + call BattleScript_ApplyTotemVarBoost + end2 + +@ remove the mirror herb, do totem loop +BattleScript_MirrorHerbCopyStatChangeEnd2:: + call BattleScript_MirrorHerbCopyStatChange + end2 + +BattleScript_MirrorHerbCopyStatChange:: + playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT, NULL + printstring STRINGID_MIRRORHERBCOPIED + waitmessage B_WAIT_TIME_LONG + removeitem BS_SCRIPTING + call BattleScript_TotemVar_Ret + copybyte gBattlerAttacker, sSAVED_BATTLER @ restore the original attacker just to be safe + return BattleScript_TotemVar:: + call BattleScript_TotemVar_Ret + end2 + +BattleScript_TotemVar_Ret:: gettotemboost BattleScript_ApplyTotemVarBoost BattleScript_TotemVarEnd: - end2 + return BattleScript_ApplyTotemVarBoost: statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_TotemVarEnd setgraphicalstatchangevalues playanimation BS_SCRIPTING, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 -BattleScript_TotemVarPrintStatMsg: printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG - goto BattleScript_TotemVar @loop until stats bitfield is empty + goto BattleScript_TotemVar_Ret @loop until stats bitfield is empty + BattleScript_AnnounceAirLockCloudNine:: call BattleScript_AbilityPopUp diff --git a/include/battle.h b/include/battle.h index 491273b80bc4..f1818d583c32 100644 --- a/include/battle.h +++ b/include/battle.h @@ -145,6 +145,7 @@ struct ProtectStruct u16 quash:1; u16 shellTrap:1; u16 silkTrapped:1; + u16 eatMirrorHerb:1; u32 physicalDmg; u32 specialDmg; u8 physicalBattlerId; diff --git a/include/battle_scripts.h b/include/battle_scripts.h index c78fcafe48c8..248f281196a0 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -1,6 +1,8 @@ #ifndef GUARD_BATTLE_SCRIPTS_H #define GUARD_BATTLE_SCRIPTS_H +extern const u8 BattleScript_MirrorHerbCopyStatChange[]; +extern const u8 BattleScript_MirrorHerbCopyStatChangeEnd2[]; extern const u8 BattleScript_NotAffected[]; extern const u8 BattleScript_HitFromCritCalc[]; extern const u8 BattleScript_MoveEnd[]; diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index b94176334086..4051a3a6d152 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -647,8 +647,9 @@ #define STRINGID_STEALTHROCKDISAPPEAREDFROMTEAM 645 #define STRINGID_COULDNTFULLYPROTECT 646 #define STRINGID_STOCKPILEDEFFECTWOREOFF 647 +#define STRINGID_MIRRORHERBCOPIED 648 -#define BATTLESTRINGS_COUNT 648 +#define BATTLESTRINGS_COUNT 649 // This is the string id that gBattleStringsTable starts with. // String ids before this (e.g. STRINGID_INTROMSG) are not in the table, diff --git a/src/battle_message.c b/src/battle_message.c index 2ecfac0c7d10..9ab40cd4e95d 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -782,9 +782,11 @@ static const u8 sText_PrepareShellTrap[] = _("{B_ATK_NAME_WITH_PREFIX} set a she static const u8 sText_ShellTrapDidntWork[] = _("{B_ATK_NAME_WITH_PREFIX}'s shell trap didn't work!"); static const u8 sText_CouldntFullyProtect[] = _("{B_DEF_NAME_WITH_PREFIX} couldn't fully protect\nitself and got hurt!"); static const u8 sText_StockpiledEffectWoreOff[] = _("{B_ATK_NAME_WITH_PREFIX}'s stockpiled\neffect wore off!"); +static const u8 sText_MirrorHerbCopied[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s used its {B_LAST_ITEM}\nto mirror its opponent's stat changes!"); const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = { + [STRINGID_MIRRORHERBCOPIED - BATTLESTRINGS_TABLE_START] = sText_MirrorHerbCopied, [STRINGID_STOCKPILEDEFFECTWOREOFF - BATTLESTRINGS_TABLE_START] = sText_StockpiledEffectWoreOff, [STRINGID_COULDNTFULLYPROTECT - BATTLESTRINGS_TABLE_START] = sText_CouldntFullyProtect, [STRINGID_ATTACKERGAINEDSTRENGTHFROMTHEFALLEN - BATTLESTRINGS_TABLE_START] = sText_AttackerGainedStrengthFromTheFallen, diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 28bf60c39b3b..72a332af98ff 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -12080,6 +12080,20 @@ static u32 ChangeStatBuffs(s8 statValue, u32 statId, u32 flags, const u8 *BS_ptr { gBattleCommunication[MULTISTRING_CHOOSER] = (gBattlerTarget == gActiveBattler); gProtectStructs[gActiveBattler].statRaised = TRUE; + + // check mirror herb + for (index = 0; index < gBattlersCount; index++) + { + if (GetBattlerSide(index) == GetBattlerSide(gActiveBattler)) + continue; // Only triggers on opposing side + if (GetBattlerHoldEffect(index, TRUE) == HOLD_EFFECT_MIRROR_HERB + && gBattleMons[index].statStages[statId] < MAX_STAT_STAGE) + { + gProtectStructs[index].eatMirrorHerb = 1; + gTotemBoosts[index].stats |= (1 << (statId - 1)); // -1 to start at atk + gTotemBoosts[index].statChanges[statId - 1] = statValue; + } + } } } diff --git a/src/battle_util.c b/src/battle_util.c index dea28b5d8367..e92ccfdbdc93 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -6877,6 +6877,26 @@ static bool32 GetMentalHerbEffect(u8 battlerId) return ret; } +static u8 TryConsumeMirrorHerb(u8 battlerId, bool32 execute) +{ + u8 effect = 0; + + if (gProtectStructs[battlerId].eatMirrorHerb) { + gLastUsedItem = gBattleMons[battlerId].item; + gBattleScripting.savedBattler = gBattlerAttacker; + gBattleScripting.battler = gBattlerAttacker = battlerId; + gProtectStructs[battlerId].eatMirrorHerb = 0; + if (execute) { + BattleScriptExecute(BattleScript_MirrorHerbCopyStatChangeEnd2); + } else { + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_MirrorHerbCopyStatChange; + } + effect = ITEM_STATS_CHANGE; + } + return effect; +} + static u8 ItemEffectMoveEnd(u32 battlerId, u16 holdEffect) { u8 effect = 0; @@ -7058,6 +7078,9 @@ static u8 ItemEffectMoveEnd(u32 battlerId, u16 holdEffect) effect = ITEM_EFFECT_OTHER; } break; + case HOLD_EFFECT_MIRROR_HERB: + effect = TryConsumeMirrorHerb(battlerId, FALSE); + break; } return effect; @@ -7580,6 +7603,9 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn) if (!moveTurn) effect = TrySetMicleBerry(battlerId, gLastUsedItem, TRUE); break; + case HOLD_EFFECT_MIRROR_HERB: + effect = TryConsumeMirrorHerb(battlerId, TRUE); + break; } if (effect != 0) From f8bbcdfe73bafea1fa8db869e4fcdfe4c492c948 Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Tue, 28 Mar 2023 15:12:54 -0400 Subject: [PATCH 222/428] minor fix to mirror herb message --- src/battle_message.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_message.c b/src/battle_message.c index 9ab40cd4e95d..140b8b3c47ec 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -782,7 +782,7 @@ static const u8 sText_PrepareShellTrap[] = _("{B_ATK_NAME_WITH_PREFIX} set a she static const u8 sText_ShellTrapDidntWork[] = _("{B_ATK_NAME_WITH_PREFIX}'s shell trap didn't work!"); static const u8 sText_CouldntFullyProtect[] = _("{B_DEF_NAME_WITH_PREFIX} couldn't fully protect\nitself and got hurt!"); static const u8 sText_StockpiledEffectWoreOff[] = _("{B_ATK_NAME_WITH_PREFIX}'s stockpiled\neffect wore off!"); -static const u8 sText_MirrorHerbCopied[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s used its {B_LAST_ITEM}\nto mirror its opponent's stat changes!"); +static const u8 sText_MirrorHerbCopied[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} used its {B_LAST_ITEM}\nto mirror its opponent's stat changes!"); const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = { From 686d42709a6281c5baed0e5a6d8aad34b6b642a5 Mon Sep 17 00:00:00 2001 From: PSF Date: Tue, 28 Mar 2023 15:50:58 -0700 Subject: [PATCH 223/428] Added documentation on resetting battle flags and vars Added Overworld_ResetBattleFlagsAndVars to Overworld_ResetStateAfterWhiteOut --- include/config/battle.h | 2 ++ src/overworld.c | 21 ++++++++++++++++++--- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/include/config/battle.h b/include/config/battle.h index 4a3d6382fbcd..c6bca6de89f7 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -143,6 +143,7 @@ // Flag settings // To use the following features in scripting, replace the 0s with the flag ID you're assigning it to. // Eg: Replace with FLAG_UNUSED_0x264 so you can use that flag to toggle the feature. +// Once these features are turned on within the game, they will remain on until they are explcitily turned off or until the player whites out. This can be turned off by disabling Overworld_ResetBattleFlagsAndVars. #define B_FLAG_INVERSE_BATTLE 0 // If this flag is set, the battle's type effectiveness are inversed. For example, fire is super effective against water. #define B_FLAG_FORCE_DOUBLE_WILD 0 // If this flag is set, all land and surfing wild battles will be double battles. #define B_SMART_WILD_AI_FLAG 0 // If not 0, you can set this flag in a script to enable smart wild pokemon @@ -152,6 +153,7 @@ // Var Settings // To use the following features in scripting, replace the 0s with the var ID you're assigning it to. // Eg: Replace with VAR_UNUSED_0x40F7 so you can use VAR_TERRAIN for that feature. +// Once these features are turned on within the game, they will remain on until they are explcitily turned off or until the player whites out. This can be turned off by disabling Overworld_ResetBattleFlagsAndVars. #define VAR_TERRAIN 0 // If this var has a value, assigning a STATUS_FIELD_xx_TERRAIN to it before battle causes the battle to start with that terrain active #define B_VAR_WILD_AI_FLAGS 0 // If not 0, you can use this var to add to default wild AI flags. NOT usable with flags above (1 << 15) diff --git a/src/overworld.c b/src/overworld.c index 6b63a60d5b93..9fabe3ed9053 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -401,6 +401,23 @@ void Overworld_ResetStateAfterDigEscRope(void) FlagClear(FLAG_SYS_USE_FLASH); } +void Overworld_ResetBattleFlagsAndVars(void) +{ +#if VAR_TERRAIN != 0 + VarSet(VAR_TERRAIN, 0); +#endif + +#if B_VAR_WILD_AI_FLAGS != 0 + VarSet(B_VAR_WILD_AI_FLAGS,0); +#endif + + FlagClear(B_FLAG_INVERSE_BATTLE); + FlagClear(B_FLAG_FORCE_DOUBLE_WILD); + FlagClear(B_SMART_WILD_AI_FLAG); + FlagClear(B_FLAG_NO_BAG_USE); + FlagClear(B_FLAG_NO_CATCHING); +} + static void Overworld_ResetStateAfterWhiteOut(void) { ResetInitialPlayerAvatarState(); @@ -409,9 +426,7 @@ static void Overworld_ResetStateAfterWhiteOut(void) FlagClear(FLAG_SYS_SAFARI_MODE); FlagClear(FLAG_SYS_USE_STRENGTH); FlagClear(FLAG_SYS_USE_FLASH); -#if VAR_TERRAIN != 0 - VarSet(VAR_TERRAIN, 0); -#endif + Overworld_ResetBattleFlagsAndVars(); // If you were defeated by Kyogre/Groudon and the step counter has // maxed out, end the abnormal weather. if (VarGet(VAR_SHOULD_END_ABNORMAL_WEATHER) == 1) From 6a7466c92982bb63f98554857f0ce48cf1347c2b Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Wed, 29 Mar 2023 11:11:07 -0700 Subject: [PATCH 224/428] =?UTF-8?q?Added=20B=5FDOUBLE=5FWILD=5FREQUIRE=5F2?= =?UTF-8?q?=5FMONS=20to=20allow=20use=20of=20B=5FDOUBLE=5FWILD=5FCHANCE=20?= =?UTF-8?q?even=20when=20there=20is=20only=20one=20Pok=C3=A9mon=20in=20the?= =?UTF-8?q?=20party?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/config/battle.h | 1 + src/wild_encounter.c | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/include/config/battle.h b/include/config/battle.h index 4a3d6382fbcd..66d4b92aa343 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -183,6 +183,7 @@ // Other settings #define B_DOUBLE_WILD_CHANCE 0 // % chance of encountering two Pokémon in a Wild Encounter. +#define B_DOUBLE_WILD_REQUIRE_2_MONS FALSE // If set to TRUE, when the player only has one Pokémon in the party, randomly generated wild battles will always be a Single battle, regardless of the number used in B_DOUBLE_WILD_CHANCE. #define B_MULTI_BATTLE_WHITEOUT GEN_LATEST // In Gen4+, multi battles end when the Player and also their Partner don't have any more Pokémon to fight. #define B_EVOLUTION_AFTER_WHITEOUT GEN_LATEST // In Gen6+, Pokemon that qualify for evolution after battle will evolve even if the player loses. #define B_WILD_NATURAL_ENEMIES TRUE // If set to TRUE, certain wild mon species will attack other species when partnered in double wild battles (eg. Zangoose vs Seviper) diff --git a/src/wild_encounter.c b/src/wild_encounter.c index d228b87a143a..ef668c3a1c8b 100644 --- a/src/wild_encounter.c +++ b/src/wild_encounter.c @@ -1097,7 +1097,11 @@ static void ApplyCleanseTagEncounterRateMod(u32 *encRate) bool8 TryDoDoubleWildBattle(void) { +#if B_DOUBLE_WILD_REQUIRE_2_MONS == TRUE if (GetSafariZoneFlag() || GetMonsStateToDoubles() != PLAYER_HAS_TWO_USABLE_MONS) +#else + if (GetSafariZoneFlag()) +#endif return FALSE; #if B_FLAG_FORCE_DOUBLE_WILD != 0 else if (FlagGet(B_FLAG_FORCE_DOUBLE_WILD)) From 24df9823e8f1c20e723b2b9b8b2ab01ee84db379 Mon Sep 17 00:00:00 2001 From: PSF Date: Thu, 30 Mar 2023 06:35:38 -0700 Subject: [PATCH 225/428] In response to PR discussion, added new preproc config for developers to toggle Overworld_ResetBattleFlagsAndVars --- include/config/battle.h | 5 +++-- src/overworld.c | 18 +++++++++++------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/include/config/battle.h b/include/config/battle.h index c6bca6de89f7..77e0e0f4d99b 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -143,7 +143,6 @@ // Flag settings // To use the following features in scripting, replace the 0s with the flag ID you're assigning it to. // Eg: Replace with FLAG_UNUSED_0x264 so you can use that flag to toggle the feature. -// Once these features are turned on within the game, they will remain on until they are explcitily turned off or until the player whites out. This can be turned off by disabling Overworld_ResetBattleFlagsAndVars. #define B_FLAG_INVERSE_BATTLE 0 // If this flag is set, the battle's type effectiveness are inversed. For example, fire is super effective against water. #define B_FLAG_FORCE_DOUBLE_WILD 0 // If this flag is set, all land and surfing wild battles will be double battles. #define B_SMART_WILD_AI_FLAG 0 // If not 0, you can set this flag in a script to enable smart wild pokemon @@ -153,10 +152,12 @@ // Var Settings // To use the following features in scripting, replace the 0s with the var ID you're assigning it to. // Eg: Replace with VAR_UNUSED_0x40F7 so you can use VAR_TERRAIN for that feature. -// Once these features are turned on within the game, they will remain on until they are explcitily turned off or until the player whites out. This can be turned off by disabling Overworld_ResetBattleFlagsAndVars. #define VAR_TERRAIN 0 // If this var has a value, assigning a STATUS_FIELD_xx_TERRAIN to it before battle causes the battle to start with that terrain active #define B_VAR_WILD_AI_FLAGS 0 // If not 0, you can use this var to add to default wild AI flags. NOT usable with flags above (1 << 15) +//Flag and Var settings +#define B_RESET_FLAGS_VARS_AFTER_WHITEOUT TRUE // If set to TRUE, Flag and Var settings (B_FLAG_INVERSE_BATTLE,B_FLAG_FORCE_DOUBLE_WILD,B_SMART_WILD_AI_FLAG,B_FLAG_NO_BAG_USE,B_FLAG_NO_CATCHING,B_VAR_WILD_AI_FLAGS, and VAR_TERRAIN) will be reset when the player whites out. + // Terrain settings #define B_TERRAIN_BG_CHANGE TRUE // If set to TRUE, terrain moves permanently change the default battle background until the effect fades. #define B_THUNDERSTORM_TERRAIN TRUE // If TRUE, overworld Thunderstorm generates Rain and Electric Terrain as in Gen 8. diff --git a/src/overworld.c b/src/overworld.c index 9fabe3ed9053..3af1cfd6d83b 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -401,15 +401,16 @@ void Overworld_ResetStateAfterDigEscRope(void) FlagClear(FLAG_SYS_USE_FLASH); } -void Overworld_ResetBattleFlagsAndVars(void) +#if B_RESET_FLAGS_VARS_AFTER_WHITEOUT == TRUE + void Overworld_ResetBattleFlagsAndVars(void) { -#if VAR_TERRAIN != 0 - VarSet(VAR_TERRAIN, 0); -#endif + #if VAR_TERRAIN != 0 + VarSet(VAR_TERRAIN, 0); + #endif -#if B_VAR_WILD_AI_FLAGS != 0 - VarSet(B_VAR_WILD_AI_FLAGS,0); -#endif + #if B_VAR_WILD_AI_FLAGS != 0 + VarSet(B_VAR_WILD_AI_FLAGS,0); + #endif FlagClear(B_FLAG_INVERSE_BATTLE); FlagClear(B_FLAG_FORCE_DOUBLE_WILD); @@ -417,6 +418,7 @@ void Overworld_ResetBattleFlagsAndVars(void) FlagClear(B_FLAG_NO_BAG_USE); FlagClear(B_FLAG_NO_CATCHING); } +#endif static void Overworld_ResetStateAfterWhiteOut(void) { @@ -426,7 +428,9 @@ static void Overworld_ResetStateAfterWhiteOut(void) FlagClear(FLAG_SYS_SAFARI_MODE); FlagClear(FLAG_SYS_USE_STRENGTH); FlagClear(FLAG_SYS_USE_FLASH); +#if B_RESET_FLAGS_VARS_AFTER_WHITEOUT == TRUE Overworld_ResetBattleFlagsAndVars(); +#endif // If you were defeated by Kyogre/Groudon and the step counter has // maxed out, end the abnormal weather. if (VarGet(VAR_SHOULD_END_ABNORMAL_WEATHER) == 1) From 4b859ff1e47b482d578f37d5cba7815a86a3ded9 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Fri, 31 Mar 2023 00:44:22 -0400 Subject: [PATCH 226/428] Use tilemap file for cable car pylons --- .../cable_car/{pylons.bin => pylon_pole.bin} | 0 graphics/cable_car/pylon_top.bin | Bin 0 -> 20 bytes src/cable_car.c | 65 ++++++++---------- 3 files changed, 27 insertions(+), 38 deletions(-) rename graphics/cable_car/{pylons.bin => pylon_pole.bin} (100%) create mode 100755 graphics/cable_car/pylon_top.bin diff --git a/graphics/cable_car/pylons.bin b/graphics/cable_car/pylon_pole.bin similarity index 100% rename from graphics/cable_car/pylons.bin rename to graphics/cable_car/pylon_pole.bin diff --git a/graphics/cable_car/pylon_top.bin b/graphics/cable_car/pylon_top.bin new file mode 100755 index 0000000000000000000000000000000000000000..44b20744d4383964fb62e47f513541fbc6ad594e GIT binary patch literal 20 bcmZQDU^HMdU^ZYeU^QSfU^n0};4}aL6dnQ& literal 0 HcmV?d00001 diff --git a/src/cable_car.c b/src/cable_car.c index 4eb4c3080492..7d18df7b7f36 100644 --- a/src/cable_car.c +++ b/src/cable_car.c @@ -27,9 +27,11 @@ #define STATE_END 0xFF -#define TAG_CABLE_CAR 1 -#define TAG_DOOR 2 -#define TAG_CABLE 3 +enum { + TAG_CABLE_CAR = 1, + TAG_DOOR, + TAG_CABLE, +}; struct CableCar { @@ -62,8 +64,8 @@ struct CableCar u16 *groundTilemap; u16 *treesTilemap; u16 *bgMountainsTilemap; - const u16 *pylonHookTilemapEntries; - u8 *pylonStemTilemap; + const u16 *pylonTopTilemap; + u16 *pylonPoleTilemap; }; static EWRAM_DATA struct CableCar *sCableCar = NULL; @@ -129,24 +131,11 @@ static const struct BgTemplate sBgTemplates[4] = { }, }; -static const u8 sGround_Tilemap[] = INCBIN_U8("graphics/cable_car/ground.bin.lz"); -static const u8 sTrees_Tilemap[] = INCBIN_U8("graphics/cable_car/trees.bin.lz"); -static const u8 sBgMountains_Tilemap[] = INCBIN_U8("graphics/cable_car/bg_mountains.bin.lz"); - -static const u16 sPylonHook_TilemapEntries[] = { - 0x3000, - 0x3001, - 0x3002, - 0x3003, - 0x3004, - 0x3005, - 0x3006, - 0x3007, - 0x3008, - 0x3009, -}; - -static const u8 sPylonStems_Tilemap[] = INCBIN_U8("graphics/cable_car/pylons.bin.lz"); +static const u16 sGround_Tilemap[] = INCBIN_U16("graphics/cable_car/ground.bin.lz"); +static const u16 sTrees_Tilemap[] = INCBIN_U16("graphics/cable_car/trees.bin.lz"); +static const u16 sBgMountains_Tilemap[] = INCBIN_U16("graphics/cable_car/bg_mountains.bin.lz"); +static const u16 sPylonTop_Tilemap[] = INCBIN_U16("graphics/cable_car/pylon_top.bin"); +static const u16 sPylonPole_Tilemap[] = INCBIN_U16("graphics/cable_car/pylon_pole.bin.lz"); static const struct CompressedSpriteSheet sSpriteSheets[] = { { gCableCar_Gfx, 0x800, TAG_CABLE_CAR }, @@ -299,8 +288,8 @@ static void CB2_LoadCableCar(void) sCableCar->groundTilemap = malloc_and_decompress(sGround_Tilemap, &sizeOut); sCableCar->treesTilemap = malloc_and_decompress(sTrees_Tilemap, &sizeOut); sCableCar->bgMountainsTilemap = malloc_and_decompress(sBgMountains_Tilemap, &sizeOut); - sCableCar->pylonStemTilemap = malloc_and_decompress(sPylonStems_Tilemap, &sizeOut); - sCableCar->pylonHookTilemapEntries = sPylonHook_TilemapEntries; + sCableCar->pylonPoleTilemap = malloc_and_decompress(sPylonPole_Tilemap, &sizeOut); + sCableCar->pylonTopTilemap = sPylonTop_Tilemap; DecompressAndCopyTileDataToVram(0, gCableCarBg_Gfx, 0, 0, 0); gMain.state++; break; @@ -335,8 +324,8 @@ static void CB2_LoadCableCar(void) case 6: CopyToBgTilemapBufferRect_ChangePalette(1, sCableCar->treesTilemap, 0, 17, 32, 15, 17); CopyToBgTilemapBufferRect_ChangePalette(2, sCableCar->bgMountainsTilemap, 0, 0, 30, 20, 17); - CopyToBgTilemapBufferRect_ChangePalette(3, sCableCar->pylonHookTilemapEntries, 0, 0, 5, 2, 17); - CopyToBgTilemapBufferRect_ChangePalette(3, sCableCar->pylonStemTilemap, 0, 2, 2, 20, 17); + CopyToBgTilemapBufferRect_ChangePalette(3, sCableCar->pylonTopTilemap, 0, 0, 5, 2, 17); + CopyToBgTilemapBufferRect_ChangePalette(3, sCableCar->pylonPoleTilemap, 0, 2, 2, 20, 17); gMain.state++; break; case 7: @@ -404,8 +393,8 @@ static void CB2_EndCableCar(void) UnsetBgTilemapBuffer(2); UnsetBgTilemapBuffer(3); ResetBgsAndClearDma3BusyFlags(0); - sCableCar->pylonHookTilemapEntries = NULL; - FREE_AND_SET_NULL(sCableCar->pylonStemTilemap); + sCableCar->pylonTopTilemap = NULL; + FREE_AND_SET_NULL(sCableCar->pylonPoleTilemap); FREE_AND_SET_NULL(sCableCar->bgMountainsTilemap); FREE_AND_SET_NULL(sCableCar->treesTilemap); FREE_AND_SET_NULL(sCableCar->groundTilemap); @@ -514,8 +503,8 @@ static void Task_AnimateBgGoingUp(u8 taskId) FillBgTilemapBufferRect(3, 0, 2, 0, 1, 2, 17); break; case 16: - CopyToBgTilemapBufferRect_ChangePalette(3, sCableCar->pylonHookTilemapEntries, 0, 0, 5, 2, 17); - CopyToBgTilemapBufferRect_ChangePalette(3, sCableCar->pylonStemTilemap, 0, 2, 2, 30, 17); + CopyToBgTilemapBufferRect_ChangePalette(3, sCableCar->pylonTopTilemap, 0, 0, 5, 2, 17); + CopyToBgTilemapBufferRect_ChangePalette(3, sCableCar->pylonPoleTilemap, 0, 2, 2, 30, 17); sCableCar->bg3VerticalOffset = 64; break; } @@ -542,7 +531,7 @@ static void Task_AnimateBgGoingDown(u8 taskId) switch (sCableCar->bg3HorizontalOffset) { case 176: - CopyToBgTilemapBufferRect_ChangePalette(3, sCableCar->pylonStemTilemap, 0, 2, 2, 30, 17); + CopyToBgTilemapBufferRect_ChangePalette(3, sCableCar->pylonPoleTilemap, 0, 2, 2, 30, 17); break; case 16: FillBgTilemapBufferRect(3, 0, 2, 0, 3, 2, 17); @@ -550,14 +539,14 @@ static void Task_AnimateBgGoingDown(u8 taskId) sCableCar->bg3VerticalOffset = 192; break; case 32: - FillBgTilemapBufferRect(3, sCableCar->pylonHookTilemapEntries[2], 2, 0, 1, 1, 17); - FillBgTilemapBufferRect(3, sCableCar->pylonHookTilemapEntries[3], 3, 0, 1, 1, 17); - FillBgTilemapBufferRect(3, sCableCar->pylonHookTilemapEntries[7], 2, 1, 1, 1, 17); - FillBgTilemapBufferRect(3, sCableCar->pylonHookTilemapEntries[8], 3, 1, 1, 1, 17); + FillBgTilemapBufferRect(3, sCableCar->pylonTopTilemap[2], 2, 0, 1, 1, 17); + FillBgTilemapBufferRect(3, sCableCar->pylonTopTilemap[3], 3, 0, 1, 1, 17); + FillBgTilemapBufferRect(3, sCableCar->pylonTopTilemap[7], 2, 1, 1, 1, 17); + FillBgTilemapBufferRect(3, sCableCar->pylonTopTilemap[8], 3, 1, 1, 1, 17); break; case 40: - FillBgTilemapBufferRect(3, sCableCar->pylonHookTilemapEntries[4], 4, 0, 1, 1, 17); - FillBgTilemapBufferRect(3, sCableCar->pylonHookTilemapEntries[9], 4, 1, 1, 1, 17); + FillBgTilemapBufferRect(3, sCableCar->pylonTopTilemap[4], 4, 0, 1, 1, 17); + FillBgTilemapBufferRect(3, sCableCar->pylonTopTilemap[9], 4, 1, 1, 1, 17); break; } } From 57396026b2f212bbc7c2fa04d230311738d9f8ef Mon Sep 17 00:00:00 2001 From: GriffinR Date: Fri, 31 Mar 2023 14:57:51 -0400 Subject: [PATCH 227/428] Replace NUM_TEXT_PRINTERS with WINDOWS_MAX --- gflib/text.c | 6 +++--- gflib/text.h | 2 -- gflib/window.c | 2 -- gflib/window.h | 2 ++ src/contest.c | 2 +- 5 files changed, 6 insertions(+), 8 deletions(-) diff --git a/gflib/text.c b/gflib/text.c index 86dca38291fe..1bded26b5a52 100644 --- a/gflib/text.c +++ b/gflib/text.c @@ -36,7 +36,7 @@ static u32 GetGlyphWidth_Narrow(u16, bool32); static u32 GetGlyphWidth_SmallNarrow(u16, bool32); static EWRAM_DATA struct TextPrinter sTempTextPrinter = {0}; -static EWRAM_DATA struct TextPrinter sTextPrinters[NUM_TEXT_PRINTERS] = {0}; +static EWRAM_DATA struct TextPrinter sTextPrinters[WINDOWS_MAX] = {0}; static u16 sFontHalfRowLookupTable[0x51]; static u16 sLastTextBgColor; @@ -244,7 +244,7 @@ static void SetFontsPointer(const struct FontInfo *fonts) void DeactivateAllTextPrinters(void) { int printer; - for (printer = 0; printer < NUM_TEXT_PRINTERS; ++printer) + for (printer = 0; printer < WINDOWS_MAX; ++printer) sTextPrinters[printer].active = FALSE; } @@ -322,7 +322,7 @@ void RunTextPrinters(void) if (!gDisableTextPrinters) { - for (i = 0; i < NUM_TEXT_PRINTERS; ++i) + for (i = 0; i < WINDOWS_MAX; ++i) { if (sTextPrinters[i].active) { diff --git a/gflib/text.h b/gflib/text.h index a88cb990e18f..ff13efa9a82a 100644 --- a/gflib/text.h +++ b/gflib/text.h @@ -3,8 +3,6 @@ #include "characters.h" -#define NUM_TEXT_PRINTERS 32 - // Given as a text speed when all the text should be // loaded at once but not copied to vram yet. #define TEXT_SKIP_DRAW 0xFF diff --git a/gflib/window.c b/gflib/window.c index 1621a08842b7..76e863f10ea8 100644 --- a/gflib/window.c +++ b/gflib/window.c @@ -9,8 +9,6 @@ u8 gTransparentTileNumber; void *gWindowBgTilemapBuffers[NUM_BACKGROUNDS]; extern u32 gWindowTileAutoAllocEnabled; -#define WINDOWS_MAX 32 - EWRAM_DATA struct Window gWindows[WINDOWS_MAX] = {0}; EWRAM_DATA static struct Window* sWindowPtr = NULL; EWRAM_DATA static u16 sWindowSize = 0; diff --git a/gflib/window.h b/gflib/window.h index 0000dd864df3..0f2dff2a8aea 100644 --- a/gflib/window.h +++ b/gflib/window.h @@ -1,6 +1,8 @@ #ifndef GUARD_WINDOW_H #define GUARD_WINDOW_H +#define WINDOWS_MAX 32 + #define PIXEL_FILL(num) ((num) | ((num) << 4)) enum { diff --git a/src/contest.c b/src/contest.c index 2c0f66f6bd91..8a1847f11179 100644 --- a/src/contest.c +++ b/src/contest.c @@ -5503,7 +5503,7 @@ static void ContestBG_FillBoxWithTile(u8 bg, u16 firstTileNum, u8 x, u8 y, u8 wi static bool32 Contest_RunTextPrinters(void) { RunTextPrinters(); - return IsTextPrinterActive(4); + return IsTextPrinterActive(WIN_GENERAL_TEXT); } static void Contest_SetBgCopyFlags(u32 flagIndex) From 83ef5a229de4aede0beb81270b807c65b2b6f0c9 Mon Sep 17 00:00:00 2001 From: Jaizu Date: Fri, 31 Mar 2023 20:26:19 +0200 Subject: [PATCH 228/428] =?UTF-8?q?Center=20gen=201=20pok=C3=A9mon=20icons?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- graphics/pokemon/aerodactyl/icon.png | Bin 403 -> 431 bytes graphics/pokemon/alakazam/icon.png | Bin 492 -> 512 bytes graphics/pokemon/articuno/icon.png | Bin 386 -> 406 bytes graphics/pokemon/bellsprout/icon.png | Bin 311 -> 296 bytes graphics/pokemon/butterfree/icon.png | Bin 413 -> 430 bytes graphics/pokemon/cloyster/icon.png | Bin 454 -> 418 bytes graphics/pokemon/dodrio/icon.png | Bin 492 -> 452 bytes graphics/pokemon/dragonite/icon.png | Bin 407 -> 412 bytes graphics/pokemon/exeggutor/icon.png | Bin 376 -> 385 bytes graphics/pokemon/gastly/icon.png | Bin 400 -> 389 bytes graphics/pokemon/gyarados/icon.png | Bin 608 -> 563 bytes graphics/pokemon/haunter/icon.png | Bin 482 -> 405 bytes graphics/pokemon/hypno/icon.png | Bin 424 -> 443 bytes graphics/pokemon/kingler/icon.png | Bin 496 -> 461 bytes graphics/pokemon/koffing/icon.png | Bin 463 -> 476 bytes graphics/pokemon/krabby/icon.png | Bin 468 -> 407 bytes graphics/pokemon/magnemite/icon.png | Bin 313 -> 319 bytes graphics/pokemon/magneton/icon.png | Bin 360 -> 387 bytes graphics/pokemon/marowak/icon.png | Bin 330 -> 351 bytes graphics/pokemon/meowth/icon.png | Bin 348 -> 362 bytes graphics/pokemon/mew/icon.png | Bin 338 -> 348 bytes graphics/pokemon/mewtwo/icon.png | Bin 401 -> 403 bytes graphics/pokemon/moltres/icon.png | Bin 428 -> 457 bytes graphics/pokemon/muk/icon.png | Bin 475 -> 458 bytes graphics/pokemon/nidoking/icon.png | Bin 426 -> 457 bytes graphics/pokemon/oddish/icon.png | Bin 311 -> 327 bytes graphics/pokemon/onix/icon.png | Bin 492 -> 436 bytes graphics/pokemon/paras/icon.png | Bin 396 -> 377 bytes graphics/pokemon/parasect/icon.png | Bin 388 -> 386 bytes graphics/pokemon/rapidash/icon.png | Bin 520 -> 526 bytes graphics/pokemon/sandslash/icon.png | Bin 429 -> 448 bytes graphics/pokemon/shellder/icon.png | Bin 311 -> 338 bytes graphics/pokemon/snorlax/icon.png | Bin 381 -> 386 bytes graphics/pokemon/tauros/icon.png | Bin 436 -> 414 bytes graphics/pokemon/tentacool/icon.png | Bin 355 -> 360 bytes graphics/pokemon/tentacruel/icon.png | Bin 432 -> 428 bytes graphics/pokemon/victini/icon.png | Bin 346 -> 358 bytes graphics/pokemon/vileplume/icon.png | Bin 399 -> 392 bytes graphics/pokemon/voltorb/icon.png | Bin 230 -> 244 bytes graphics/pokemon/weezing/icon.png | Bin 493 -> 503 bytes 40 files changed, 0 insertions(+), 0 deletions(-) diff --git a/graphics/pokemon/aerodactyl/icon.png b/graphics/pokemon/aerodactyl/icon.png index e354dbb0dcaaaa9cac8a26df89d4e138167a71d8..58c96d57c7fce6c6433c4cc58f8525ab2236e04f 100644 GIT binary patch delta 357 zcmV-r0h<1k1Fr*+7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SElET{R7i>KRKc!; zFbpH%fJCSG|NnMQ7;4iNxa{d&7Kv%pZjv_G%kqnxz!NSHj3)v_?inz#8KJHXB>NraH>@ zR_~VE)m{+^C%puJLAbpH+~MM=pV-)QN!$IXQQwO@0p4|YmrRX)X9IqY=(-;S@oirP zW*3tLwr$%H7ds^^SUmxWrdKKSn5RxZhNX^h=GwHT)wPNS6P{A6f@Q=;U7p13BeSar!wh7|2Kd zR5uBs;NC#|B%yBDF{art4|QM5|GeL8`B&mS{_S`Jl$8|TD$z^c00000NkvXXu0mjf DHBY5s delta 329 zcmV-P0k;0H1Cs-g7zqRe0001qplF?uE`tvdE)?mI1yx!H! z^%}sY1X%e=@wCiw9cn$p7_)emVM7gB1=h-ruZ|JX0Qj0yLWqqcq6$+&RjUcPbt8Yu zF*M$^vG~^aSJ{E~Rh!D4`)k^OTC=XZu1{C>t!5hP3tw`Z=7qcqH_Lr~J{{(v=oLPW zC)hN9dp0oJBH(6H^j^MRI1cu2{J+Of#6%9I7~xQe5e|wARX-*Q-ff5Rb$ bzsKPYqRF+jd!m|200000NkvXXu0mjf@TQh| diff --git a/graphics/pokemon/alakazam/icon.png b/graphics/pokemon/alakazam/icon.png index 6d136899d988ee651e5227763a1d5217fc442a78..e823e94cd36a740de8d352f1e5a02f75810ab1ee 100644 GIT binary patch delta 439 zcmV;o0Z9Jr1AqjO7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{Sen~_@R7i>4luM4p zAPhu1K_YnLy8msb%7jm560+_=O1Ff|Ha7TuK3}zfH-WtJfA zJ=F-bD>qw35fuml&)Xs>08ru%)b8TSsFt^8K(4JMs1&t@b)a4E+%~z%{Wxa9-un3MN|+Z1yuq}Ne- zvH#2U^#IW;T>&JqL+W3Q1GD>=7|rLQCRSyB4))0o_fs( h3D$hTB0a2002ovPDHLkV1kQ<#5Di_ delta 419 zcmV;U0bKro1ndKl7zqRe0001qplF?uE5dr5C?FcASX3@q~rlo z1(s$>-i9%3Wn?uA43R3lz^f&S)WTxBAOT){wN3K@>e_g)~wM<7AQatb+Fqxjx1;)>Cg#0PoRt`rN52fxaEO4)9a_2?T0NWIS!FzTvmUS zGLnXoO=j~&kkIUnkS^plaMwEECU`%vlkV!SQRalC=pQO?uY;FG8RrDQH=okm>Mkvo zsf<(qvf@WiS3p3y=+g`@tBRTm2(T9*WOiOw1)BRIF*{T_!!Am1w+2+S3y0v z7q#LVG)bAzuJvuTO&fxU!0xluooasp_ZgT~3z?4s09TF24+#6|lTBajx$7BV*aVE4 zFUDY$yB>o9>*E28<}e1+A{&7*9C`yrF<)LepaFB<3}7sWM=KRLc&- zFbJzuSfw4{|NnM8QbI^NX@_Y$l-`D892R@q?)q{u^ZPy!1Y&_@%6-HM!T^*2B#?1@ z?kj^pLKG`~R-gbtE%xcs6-Z(*3hf(*$QK99)lslS zs5Iw5x&TCfvA0Hl(Qbo83kWgsZpRy_An0+>bGPd@4jd759OSz^=TyKR>v0m<_Nb%$ zn=6v>Qj2}x^}qE|Kx}hH3<2Sj~BvVYV};eA*m!v3~J&w&gp==N_HuQI#+V>tz|Ps?Gv ewEy)_KdKjKycKSuv3f%Q0000NHz#11)Y= zEtEMzE(}cypn!H20mAmW%cRLf4dchN(9fsT9}J+2P($g*E<@VJflC3M$Kh}o6;)fN z!};!^q=N_s*#p6*=}--kEntI|WX-o$scy6<_x{;XpNb-@so}F66$i@}cNXG?82x{t zyfnXr=}>aMJ615u_wD2B?%9*12X*_5SfE>$@aQ!WTe2w9ZSUbSK`QG1#bq9K4B(KEZ**`6YB5 zdaOMS9L#CC9S2VpqX+{BCY4s!fx{$hN`%KMslDOQ-}}KZe-+;uRkU;wSo=c&0000< KMNUMnLSTYa8jFMg diff --git a/graphics/pokemon/bellsprout/icon.png b/graphics/pokemon/bellsprout/icon.png index 59ae8d037ed7e014f2dbe322d03e4fb411ec1fdc..ff6ca2c33716e1c4a6f249f313c9a099e2a2f3e4 100644 GIT binary patch delta 221 zcmV<303!dl0;mFz7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{Srb$FWR7i>Kl)(-H zAq+%0K$jZR`TxJQWkDlQG@djv374JO3C!Vzu=R_AYUy88i$w7?;kL9ua1zyLM)Ct_ z0a48x%ufJON__&S&wx;j@k;cZfR?iPHV0`#e^un1h3zY3z8K^CD>5)_jt{^RutQiW zQJ@t3>+|A`qv`$9(e&Jow;*?Y3JgU7x|9d0FuGvxGeA04`@+p2dZK_sbvw=A)%NNC mIF!p6d|Z$tWQ#d`J0EZF)pk#lEc%Q90000Kl*?{J zAq+!#NGK90`TxJI1DRU}0$o(IYO@?0V+QUC;jfLzkA|~jXtxM+Tz8UTkeKccNp}MR zjs}%AAX$~Y%w!PBImN|+C9FH(cgUE4q4c3c0m^f*}-)2@&fVf^gE&xQM$U*vtH%PtLCh^B&gL82|lc~V>D8&74Luc z`pzj-xyR97-a2IzwoA`&zuP%%%z8q=^UIZ^0-5giCq~oF{tv#PGGv~B?%0w;^hS9yyB6-upoh9 le++@SU?UKltB{1 zAP4}9dV`Vw|F(eEM8TwoPA@H2Hh>uS@%YCS%r|*}H;4&YO9~(aA88^-FmXqikqAS8 zv=J91#HFDGaTP!^jJV|G^OSUiMj)?wEg^_91V*g=?U1bsAt0<1fSyrC1RDi{5$p)n zLKa|yx+cU)^N_WF1nU~+F492KnR9MEXxUT;QqG`2(4-T!Z=$-p9VPmzTpp@iU&^VK z0Dn`uDJk3+;Qc_HLZLh0_7VJYd|VK|VEboA+Ueo-{#!cG zg8^GT3_Ip)Wa-@NDpU0Z1ivvM68E5+= delta 380 zcmV-?0fYXc1I7c87zqRe0001qplF?uE zdw{4?c3t$WUK0hewk6Kct}ARJ?>x%yq=_MR4iHx6F@Fs6zYvdGnC+$NW+a&lk>f#9 zIDbkCqs9a#a%fxuWV(KDuM&Vxq}^c0g0wPdy>(-OkZHAq*A{tixQ41~tVqg)1bBZt z0-5L(W7}w#HFS*ei8R$$BEu+?m0d~S|!ktH{; zKk$1B0L1XY7i({)$OZ0eI#~3(*=Xe)+_~}iCGX=fuTYm;qk#X!pvlrie29Hr06gSp zo$~?&Z(&Ou7E7L>9kLAqixnyBatCNAEH*VenSZJXhBa9N6JjK8TQuQ?&2~-hayHv| zyU)R8@V)U>(VP>*O^dfzP^OZ8!@BiV35+sBi(7zBR-_M;L2_RD>12W3G%!N+b8u(I aW&HsaY4WVL_x7X!0000Kl);XJ zFbqVAA~{kHp8x;b^*Du?;2`Z~FI&?Jsu{*k3hy}nT>;~})fEQ{PVd7CRiG4C&>BBk zKmkKc)n*PX2Gf-p7SgrTgEioz7j$}p0T30a8C>^9+WTdIiWQof_{)Q=NuL2jXPu3j z>Cu2{y6}K?0_;kEr*6yg07d25WQ?$>H{RJ=JsZ&>2s(h;!Xy$6%sfmNIxt2NZyNu^ z${tp9aTHAb48btla+o8FVa`)+7TY(K{K4>6>XjNe0=R8k19#eVzeo+dow{xe=cYU! zx0peFw}#6k`-E$jZ*A*0{KxC*g3jhEB07*qoM6N<$f@J%rWdHyG delta 419 zcmV;U0bKsX1MCBk7zqRe0001qplF?uE7&WQTtt zkf!)^0g1i$GKfFE*G_hPOpb*@TL%O$;h?F&z5*ucYK?CIC?-!%LhsmB5TQenK2L{? zZQ(4@fIK^Kcs~rC)X6yBH+u_qc)46wAXCg`4LAw{tq&DkENh^zf)Lk0B99xOsDA(t zpXOhT9^-bEszY200~gup!;dhk!%ly!`4I-D`R2#j|-?xPb3>ZlHd9Py=?sedhkR4uiy0J3mU*1Dpep7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S8c9S!R7i>Kl)(CEIaHl4%?FdE28z=as2C>#pgF~^4bCh;t=Zq0{~z6LTEx+ zT3GIya1{iRs8-7n9YKr$RLP!Y%$`7LPzhU(c_COAKm_bS&SeCcLGxq~YhH302!23| zIN7JQFxka8 zte6FutA+bYXYiwx4kSi8KJ~3Z3K<;g@=X9M9U@Hq*#K929}%Y7#(DSTfGB!l(pY~z z9+nQ?+0}(KXGd`$w~coq{bj&aMy_cd9d{KXMQjNKBr+A6=s{FC$anind_U#^VA(Xa zmOPJt$@{jTQw-Qj*%U-WdL@+UOtgNrd2bEdxjdUKK!IDISqHe*0o7Iq7=P1Y6>&On zd=Re#?_*@q0cjT^P6wTJZ>T0Hd zr?7y!Y6p|`pal(o%nFJ!nFSVZ?V+Apyk={q8M?I=4#ASvI)~&w$^Y~%p_;7eN3Ao` zD}%wa>Kgwj*L6CK)Pmh<;V#(@o6qMiizS$fmMy>8N7+*U#}Q|zv;@d6gqZ+2Aq)Yr zBFqHHf-na_Qo=j|k`U$vkoeBL10*8MCqP1nivR@U6d;!u<-;8*S{R|o?cLG<0000< KMNUMnLSTY3Ux_*Z delta 303 zcmV+~0nq+|1NZ`v7zqRe0001qplF?uEzl09kzF%U*|gE>NuVO*ur zw%*3RLRyz@0y#t~;ov<)szrtC5P>eS&4NJ+mIz{v$958|PfObTOgA6%B#n4N{A6+2 zd0G}haI_>30mys;fmto}83nmM4Fb zu^eh3$RyniZGIWqwX*HnUW0?xx6|ignX!*gxKgqKLitm&K!gB+NGkMb9IHcwQQG7N#`l zEKFh0MHn>bLl{6lg#m-Ugn^0Q5r!MwSeQTe;{^T`&r>@VKmC+8v zAP7YpdGiwe|Gyn*rxmbEmcA?*4_h+MEDD|;$3MOc;J_!~E{OpJAi&JZ$TtE&(^Z07 z1P_9wi$q5}P`RZW66Vv$E8%OXl&%27t|CA_)2R^#K&6t4B8jL2dKOn8$v<-;joiyz zS72G96snR>Iobz*AiKy7$UzCM%%X%=5CifM`Bk#KSpeDzNsxTHLwFO~EQ*eC5Yq8_ zGcjXMZl~%WKNQai#FNt>u|QUTY=(OJ!{3V4AHlU+{o!k{{;+okfj=x@{b2=T{m}$6 z>+t?ybC}*AZl~5C7O?&ZfawoLU=Z!q=?~t#Eqb#nwiAOIIVR5vxFptG<6S z>_WFioy#>a&}C7*Xr!V^wIqNINI&Hg20maHteAy|>m1|+PI2}jLQc{A`LMHpeclr$ z?+h#&ZGgZZSn3Vz!oYIoc;tUFm?j!kd2G0k(@iBE z^i~CYOPy*Gcnx6IsY^zcMpn8g5&$whUg;`i=hpE%qAAiL#w9qh5}tlAQW$vd=51kq Y0fs#1kjArV*8l(j07*qoM6N<$f>UFR-T(jq diff --git a/graphics/pokemon/gyarados/icon.png b/graphics/pokemon/gyarados/icon.png index 889943b04f4be2d2e1b2a6d23462f79502bebac1..41ccb5aee2ad3bc30c2eb1562c50f6fac21413b8 100644 GIT binary patch delta 490 zcmV1hWK?7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{Su}MThR7i>4lu>hp zAPj^ZF`aM+$^ZYi-2~L2)J~^w$IRV>`Pc+ycUeAhss2(=>l30XX-z)>wh{XiBF zuqyyq4?s}#dd?t!qye=aM@A8=ZMM}Pp6?7Dsz_$eia+%hi{@}z715MUfN@6ep`gz? z4)+Bh+nW?0LN(I?D3x67d?>A}unb#h)K*WL z#DF5SZRE4Y25cj}Kmf32gx$Q+2)y2cCpe%@<0FMHZZo`plLPpky*%6qJQZW7bdfuMGQzEj@_0L%U2ncuJLqIfpw}6;xgn*dZzxlrfM7jdO{}vE(6Bzwp z=EUItkSsee_+KswvrPRT6XxdsWf>D@x%&T>FjxP#A!5Q@{qI0Xn4AC2jiY@>{}VJq z!i@f>%>qP8VgQW(-}6Cf1YYU%|0Q9Z==L^un~xz9LeAfNx3?!m%aGfh=mBj0xAKpd g+x`E1_y6esZ>fDG)0R-u)Bpeg07*qoM6N<$g2F)RjQ{`u delta 536 zcmV+z0_Xj+1mFaa7zqRe0001qplF?uEy_^a;K)FTAmoYz+$uQv+VraGO%(+tl7N%Xd$5Z_?JY4A@bF919KtX{WH#m1sObc| z%@15Ih=jOluUluQNG}~`k(a(ts>%yG7K=?dX zLNjn5(Dh6S2nMM`v*+M0!9P#x|13DZMm`=A7Q7t|07N1mS$B_X0N74G1kCo>R{amE zXr&+fy=0ZDB93&hReixO3pF8$E(6$v#*a5;)){1K!qDi#EINZk9i|KK2GxJTAOUH< zz|!V}K|%*F7E62LtAjz$-v)@^9vRRY1XKA0Ikgk&3@W*pQ!LZiZw&%+CUd%y=a+u# z0}$NC*;V5QJ?p@`Se3Cn7$nLfbKRLc&- zAPi&WR#5!^f4e*>R84!FHZAI*!cO8um{NW(@PzjV#uEX(x0C@m0l4OXA;vYFvU1TH z1)+Dr&J7`i!RY$GGy_#5^nlNTQ3LZrXS`Je43oOfV=5Ikd?}(^koJ5=TW!m@qK^kF znnD$|DuL)o*V^2F(aLUh)1MQrlwI~I>Xs>lpj+fFJ9hnSh^Yi=0%+$#ioYZdk%g=v zNYyB2l(7Y}j$i}=J8jw%#X{uVH76HC(si!-0|Ltw4E$aZ&usZq$z7&K&mWBmR9 zasMkd_rKXc_kY;GB>q3_U#|T>*+23Buz%|RVgJeh{s4?BMTC#s|M37!iwYlkqCWuT dD)5C5z#Bz}C5#iMsign_002ovPDHLkV1nuLnpFS* delta 409 zcmV;K0cQS{1L6aa7zqRe0001qplF?uEVUj32Kd3Umj`AqgxTr*N6+eod3?7$r&ytl)>f67+s)q$*U} zl~j9CVqF#rU@2ad#l=pxj9+SVnY@y;N21w7a(SEsD6(|^)WxZogT-m#o_y}zhx`#} z4>OG@km;whnAu8Tuuh#b_eDmfdSib9Q9lR!;jEzde{6lVbg1l>kIz=?pnZo?8Zxal z4AD%boF2mWCXTi^IL2(d-eC6YhB$y;UcK<(zB=X_mLPFTi~}UQCehHjAr7v4rycLT zH`2!eE|h!AgLSbuxLRtKltGTe zFbG8>kPzPR?|<8V>@>AwyIIXASwWCDY!dOO4$)`Gsb;K z!1H0oeGO#pB)nKz7F!b}0kahV*Ehkt1;M}DCeFji3?SSs!>R;y0w8h5(TF*N)FO?& zVi69#g&D6ESUV_x8=+mx!AC-nC(If(@-9RI@A};cFh~BN5=@XOK0R#7zqRe0001qplF?uE4=xu97rE z5Gz1U3sDN;U^tI}0TBEcHP!%tbOEH|HlnMXOd4U@;UaG7)pcM8nX4RkmtJA+K+QhW^ra|a24kaSTI?+F zB?;-tcUG1i2oiQOc3sD#g%EmRcG&3WDAhH@3mQ)ZA>EK6_!RFe*xVVZLTy4Y~^>rxw;AFU&9<#u_A@FngK#6l)MV wVXnEFYkEShFsA?}Kg3+(;_gR$?Z5f)10Ue(SR1mX{Qv*}07*qoM6N<$g3^MVO8@`> diff --git a/graphics/pokemon/kingler/icon.png b/graphics/pokemon/kingler/icon.png index 34a72990600a16081c6ed9d6f3d700db1c1eaa70..3f9d0b8b78e41ed6730b3c0b2149a71e4a70d614 100644 GIT binary patch delta 387 zcmV-}0et@O1I+`F7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SOG!jQR7i>Clu>WP zAPj_qknjVN@BjbX`pig(OT6u+(lpenQGGcZu)pK@M+>&ncoUIK0TKOae5Zpn3<2yJ zUQ(!_@k1q4#%~lfWszn@ft4H*VG5cw3o>QM0`(O1w(u}pT~NEK=T=53yB`Z`t&CTm zmskR-?kUUyC@!#nD(qC^$pRg{^6ys72<{a2N`dX7G986?g@rpRH^YSym#Yp77uy;Y zym+r8DEP=E_U)qrx}bzQN}VOx%WZWyjS3xj?v`!aL*9ElO4Y2%;MbFOA=9*Px-d78 z%@$&@S@>_Rk52zSKBxb9z{8yW1P^oi_jtIb{|OIs`XBLPFsDDkgSGlE@eum;4G$Xc zCg7oMdUnObW-TeOK=c&5T*fcQ4{mMAb_4hF=^spQ!1TvVGL9{)e3{_BZs|6nm}1$=BBe3=bz z6ZjYu04c~Cn9(VYq<9g|82C(JOVpTz(OdB$mxs+Bcgw2 zDk0V5c|>n7TsoGvVLS~Ek;-(<=(T1nL&kq z%6Xq!*D1i3$_k!M+f%fqOj0DU-0>~Unp!(vO7Hi}-EEt3e~;b&Zy(6E9W`!8D%W2{ z{KCV{0<2Ov6I4hnlu1U@6Hp(Zq=tW4@O>DUTG0fshS+7Mpt=Xek}jQb0Nn<-AhF~H zg09t&uISL^9K%fx77gCZOfXF~`ugaQ7Nxc)edJ8TOiG9N>9A_*XxG9Obt zRcsOC*2sGO! z(qiQQ|Mn1+Rt%V_wljdE4x7?9{uBUUPws=h9>)RW38oK*_YX<{I3~u8AT9KL zD$y$^BA;+k1TW>0(UPemRXr4vJ?AaV`qbJr;g;Ox=^wNIJ}i9W>`j-V~dW(1F? zElqv>laSl1EU=d?{LngG=!K^~^CAIw5q@=|FVY1X3&C6_$qz?!}c1>jj1w300000NkvXXu0mjfCw05z delta 384 zcmV-`0e}A71J47H7zqRe0001qplF?uE<}Ggjm?s=PQx$|hHv!dH-Q00M&5}5Bs|(v z*LY&@01x0O89Ff3A}_(zR3(A|RgPrtY{yPAu);}glHdRN&i5JM{{)ltCjg{~g3|b+ zDqy;b22C$0NUcQ?n80Tga76$g(n3@K#*X$%4gk;l1}&ei=(x@X|uo&&!>}VN(#8`_S&>% z9-IEon3zLyboE>{`rM1?y#@Vnk>>PC$n?V|c;zzv zSVn>yC;F+byBw``L_ZyfA6~pC`so@L`qK>fiavI_q%UDjAMbvkKNBK-ky9dBwH)G7 e2#%ccd;9>x{^J5E(!ebM0000KRLcqj zF$mlsn1kT_|KE0WTk_a!pip{gJ+zBXMq_l2<8N;mfPGwR-6BxoI{_3SOX{lBZ6t0hX}@bph1v`#^KCDpW!$`d99v8Jg!Oi6QtEAfCytk&zUNU(k?|% z7^-AtaV{>#(z~*MVJ==tA<2_f^>I4ff|R*T*)@@|br1`mMn}~7Wl_`^j~@n^Ndn=+ z>*Y8E1w&Hu52ajRhrBGoiWz*3fTd+qWjSR?JL&dA*pI{CK4`zS{at*y{Y@V3w*Ms$ zi|scX;KVJ8nPIWWCEq&{5UZ+&aBA^%4WN%Ynu~x(9%s9^fSJl%ThzBrp`v`n^ z1i%j^zMHlTNWt70vEL=YOz8?d1;EC$O~iVhQUZ&hDqDe=cq(?rf>_b~xdF6}`?G(Y z+aZ?#QN8C}0GnCvzUcAPJ8lE(^7G*~aID*iWkRSOVQkRkLUV#sP!EO>G*brA0vh}v zn!fDcUJ&J*(m(I}3Kl7qUFdxg5aT+#I&Sy4+^0YBAU-tW0L1hNyg1n79QI$Q09Y99 zc9+F($I{hjY3DX8S^@B!GISPFLhyFkFl4Hh6+vSPs8!|dikN9~2~s$Twa?rY_1(== zzWNP@Vh^~Ip3{>6vP~GSO^@G`!=fBe99Y}p4a>w%xofMnCdO_Hazx{+(e!;c{RQhU o8Sw6pD5Z?>*B>#i@xS@w7sJ!jh|T2NQUCw|07*qoM6N<$f?ILFpa1{> diff --git a/graphics/pokemon/magnemite/icon.png b/graphics/pokemon/magnemite/icon.png index ffefd1a45b9e50bda43a7f8ef42018efe54016e6..95b81cae03d1139804566a9bb7958ef968c43edd 100644 GIT binary patch delta 244 zcmV1)~7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{Sy-7qtR7i>Kl)(4lmNMit{5TP|yZ6N`3 z%pVE}4^ZTsTgy&#?fqIUAm>h4j;+eevLige28P~XK{7(3ZCVugLBlzRnveV2)54_YnxRtm2zRbL^*|gqf@c6U4#H8N@t%)gU+B-A=g^{ zM>*56?*IS*07*qoM6N<$g3~T;B>(^b diff --git a/graphics/pokemon/magneton/icon.png b/graphics/pokemon/magneton/icon.png index 733049b1d68e18c9e21b0d5547e5bd3a5c813311..bde234ea113243d3d81d3323ca319a2a0107b0d4 100644 GIT binary patch delta 314 zcmV-A0mc640)qpP7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&^R0Rc%wK~zYI?UTWd z!ypVq14t+bnEC&|-LausTAWs@_O|h}oli}}a#1I(=&+?`mqNdN!< M07*qoM6N<$g6YzX;{X5v delta 287 zcmV+)0pR|F1Ly*f7zqRe0001qplF?uEFbqX`0u#PKjGmwa z*BUuXPT*^F%b~IgU9y&LlP(=e2@`fZ_F+ib+MMJ2mP zu<{pcc@cs5c1d+{oVKiSuvXv%1bQc@WAk002ovPDHLkV1iWqf`$M9 diff --git a/graphics/pokemon/marowak/icon.png b/graphics/pokemon/marowak/icon.png index a9738970562aeb62305736aa6dfcce3095e92da2..af56d377c599bc95cf1c497a0ffb7f02baa7ae42 100644 GIT binary patch delta 276 zcmV+v0qg$C0^b6V7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S-AP12R7i>Kl)Vna zFbITgkYMB9|7{C)nxr;y)uqZ1hAe!X`BAQvCw>gzOTH4842Z~hO&BqnO0MJp8#DV$ zoGEz^k?xTxv=_FZOu!C-G%sphp*o2&O$=2HfWVc!O;s5Q(|Do^`#vCS`U%7gm81Gy zKMKSeqqs&|=S?|t0OB|Yi|RauC($6U)*yx{(3b~TH0pqfOh6;VJQ*rB_K3DVnE1g0 zNV-7(ddMs=u=zD7wI^;IkAajs8c4G9!$7qCyCbq2$ig4m39kHMH;_wz*bHRl52vR7 a?hh|V_lLx zE01C5)^2!%x0Xn-K?G9Sa8ue4Le~xz-fW#?$GRZ+qu^Z*A#1-N;><^eI%5qRYETO0 z=qLykns5Zfk;zk6nBx~99dPL)OzIx&IzVNVj-i|i+ccM$=KulB+e-OYd;118!+-w0gT&bnfPUTcXqgry0m|o@w^}Dm7f3@$! z9wiPZOyvtR(dx${%Kl)(yv zKnz4J9wa7Y{{L?~iO_13RoYVz1_W{5PO`f=({$JOg)3cg3IT@66&Nva0|>Zx1ed`@ z9%e2*z}2#@qNG}Ygb7Or25jLT4rWTA8I%T45u0beK()HS`B`U>(9NU})Qx~~Bh*Ej zE+j(cL)|}#*eD%-xIC%?TyKKVQ$RI{gQo7egLZ`YZm!wGs=m48eR&*3t4j`HCl@~G zzAwMfN%*;b*PqlKAU_01O^{=NbU)A`K-z!+mREpOAOggfcYu@x*#}4lL>(axdkc^Z lh~~I5ALxzYh5lcJi;h=00dA~!UeD5{AAjkd*exqC=|C2ESl3yU&pRab`2SK>-$rIdo|g*SDRn; zuJz)9nJk_6x(8-4>pw8zFuTS0yah%8RqpE+7)XNt0t1xdFQ{u>w8?!TLxg;)o}Z5^ XY}nJ{D3}!;00000NkvXXu0mjfjgNr; diff --git a/graphics/pokemon/mew/icon.png b/graphics/pokemon/mew/icon.png index 6e7175f437391b2c2f68c247c255b6d98b14f822..d4b6ec9a72cec9ce5587d7f7bab8d189a3f7f338 100644 GIT binary patch delta 273 zcmV+s0q*|N0^9CR9gxJ zF$fzdltsbZ|F-L+^MI-cnDIBM#Egb56a8{a9;&;|%ax>u&bmWlq@ z)%t6wfVD}+fVWw2%@cy(C<}8m*hJg}PDKVoL^*L48GgQ6^EnJb{cRVie9~u|ch~#v z-xH)?KkVPcgKyEs!?LECsvh0@4DI7zqRe0001qplF?uEuvn$F zlh>gZ@FQ#9skjVW`nh*gH|FHJDo<<&L*nZY@%#-i-(Dn0hqLjcEBc{)W~4|G;COQ( zpe&=#sYj2%m~t>isOvfhh|XXWswvNy7Ba7eC{Al^sO?(bb7M4H`j`3zFs+fB76nH9 zy5!D&p^5{O17_rYw!m!Tbm_7IX5&d5Fq$!t1x7Q_15;`Dz(DyqFdzMX)kGcCi2e diff --git a/graphics/pokemon/mewtwo/icon.png b/graphics/pokemon/mewtwo/icon.png index 8463a04ddc33cc2efa1a315acb06bf6d7796a9d8..b0dc901658c6931d8024affbf60ab2706eabfcf2 100644 GIT binary patch delta 329 zcmV-P0k-~;1Cs-g7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S5lKWrR7i>KluHi7 zFbG6bvBk{&Z(G1gQ=4(BNR_%NQoNZlpM<<^`^WtNKInos7jZ)$03>bh*4crFi1?F& z>#Z1EQ#le)y+6gKk4Q`a}FzO za60l{j(ZV!ZN$o8VwZ+((cwS78u$1?`~yD-K?Z&>f(-m11R40j2r}@4|NaL*j3egc z#{wWHKcI^gogX_u2ti_<-vCnPm;h1a{n00000NkvXXu0mjflH`fR delta 327 zcmV-N0l5B?1Caxe7zqRe0001qplF?uEVAQ3;_9oi+e!c5V=Lm z+ap@C6jz_NNW0{S+_E@WcNnsL6om#cGPW^e%pWeuCqUV7+gL$)Vax_>4}=R|+JW8` zU_jU6Hcf%p0NgY+S=<}YfR@eKHBX@WWXs(gdZnPfL!1EEf;F0|cM4l4jrB4Ra*2QB zOjWQ(L`F{9NI5(?TyG=Cv7xie=oI4SkQnl{SB&z3ee7g?`#1yLAZWe_IC=n}U%Y@}kf-pO2Y`LK z#xMy39@orql8mAkVIcJoeh8ywx-c`4I(Q0GRgkAJvq75|VYEsU=0k)T;s&m97UtLe Z_y#ix&7cm(M)Lpw002ovPDHLkV1j2Uk<0)9 diff --git a/graphics/pokemon/moltres/icon.png b/graphics/pokemon/moltres/icon.png index 99affaa0b2cab8d2e31db51e44d34582ad672bd0..70de8545068fbd265d59066d42e2e26097e9eb46 100644 GIT binary patch delta 383 zcmV-_0f7Fj1IYuB7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SM@d9MR7i>Kl);X} zFbG5=)xaSV{Quu}7$-8eBlXh5YE>Vq1||bWc^t>@eDTDmyv2hkq6jo7DwZ`6qUz9$ z_mH$ZK!F$}8HnJosabV|LLmv*G91dsNdQTjXck9ar~IvO)OGxAG+VEPJOrLf@u#_j zXQLy(c^s@vg|S_K-2`aSo3!38s(Gw^x;Gqmv7DSvlSl)!|7tKlor7C1dY;|_0=6e< zVzmbHXBLPtm&pYA;3;zvDS`dcPodxWHz$cYX1?cq;#@aCEMKH2t>$+$DW2$7z(5|l zB9i_}4%zL5U;BfGb%F2$1(ayx!aqtE_t%^FD)A34iuI;m&i#;;=(A0N?=$Zkch^-0 z{$f|V%PcPZQzMpWPNN<8_gmXir{YgC;TJRB1OE=M*Il{b-%FMSvEknpql>4xU~_(0 d0e@&gyaCvL7G<@!U=siU002ovPDHLkV1k*%u{i($ delta 354 zcmV-o0iFKI1FQp(7zqRe0001qplF?uE&kbe)1dfUmqRMRnq>vwLMr@}ZZ z?}*|J!DnpDso1f${a3-c%j?gA_if@}wRF_YxLD}3=`)PrpjRL zWIY8OC=nE_ebYD{6}n>b&4l&)&Gb%?FhGr1goMLMt0x=)&c^1QMI0=I-R4;n4g^A` zcQX!Q+1K=L#vzne_6dhDbbMsPfs0oli2X|Z07kXH_q}!S<^TWy07*qoM6N<$f=-sN Ay#N3J diff --git a/graphics/pokemon/muk/icon.png b/graphics/pokemon/muk/icon.png index f56a9b367d8b0ec0c44fe6487af47ec60467a042..3168d1be464250b28d69e8506147a8f2fad78528 100644 GIT binary patch delta 384 zcmV-`0e}A61Ih!C7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SNJ&INR7i>Cl))0i zAP7WbV^28j|Nm`4NFr#`bEiA)C9JR-^S13z1<_-*iEb^R=DKm9eRqhM9}SwKEDb%r z{?;Qrz9%K3)>JX(CN4-(?qiCT;-@p7TQIxy*_Mk7?yGIAKfz++go8^5%pZj9<%~u!pnELAFb+R?cy(jV0SMf*s zaXfg+J3MUX2G@9q0GaU+0J6Zt0w8Hd1jvMk3=lg|!~r8;Kn^}2P8a~bFf0pbKPLX1bneHqNUA_R`> ej)}5asrLtb%_xS8SA1^(0000at()CL-XlhArYtmEq;IP z363{S5fa+|=^Y`~Qe!R>kM0)iUe7Hw~ zu+t}zLXdG-xuB*8lHL)(YBQz{7R85p6Y4zU7*Dkv~+yHi&M#x*sK z0+adRa~}eX@ByqI8JLleu@qB)8TlBu6&0AU13x}dU@{+tsI~wjXJ0I264VA1Ky=}P v2YLCM0V$Q8AoQZ10Wo<6aSg~7{{qMlmZexmK~?Dk00000NkvXXu0mjfgdnUb diff --git a/graphics/pokemon/nidoking/icon.png b/graphics/pokemon/nidoking/icon.png index 377cb6672e543b7717395bd6c426d7e5f679d98b..93d0b5f80e5f8735ebd30285daf5fa0f9dbb4719 100644 GIT binary patch delta 383 zcmV-_0f7Fh1IYuB7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SM@d9MR7i>Kl);X} zFbG7g;G96r|Nm_V>^M$prN^$+jZ{lD4+dyDrTowXd;;_&Rxlcn5!edQN+LplnJh-g7uFR=inxC^!|M-Cz;>k7j0<@(#M<{J- z!(b2FezA#LB!x<;f;uY#SJWmD#{(_q6~7B1=W77#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S#Ysd#R7i>Kl(7!O zFbG6F0F%r8|KApHYjxn6ZFdV#nD5)V|hO@u4rP?5euI4-U# z{pS_X^40rAtU&q_O=yqsQ>;V;JgSKFb7T`KSNjSxq*#!L>7C$&ZiXR7n)YUx!ByTP@KuE%$ z0AYa*kORdQKo|!%Ko}r4K>9I$0U&q>kWAn!`EUnFzYhue`adfG0000%bI3rn5vqTh0n||AiVkMv-6`z^mC=e3N3TXCFB>F=cYJFu#7k9aYDM_ zJIx3rj1G2`#&;>H0ZClI8F4;9Vu{D3cL2?Hx7Rbg5Ln=q3#D2eYeQibUu m@e~I7uL#5M!jS4G{dfQ=W`Ao>!^-^t00007#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SGD$>1R7i>4l))0i zAP7W*xwHTOw`Gw~G^U+)dTE?VbYxkTn73_z)bK9e-Y9-3z*-3D0-!aM0JF~K72esP zd52jbiikH?XmzoWFyaCB(tVKmA!uNjitaNA)NOrrM1NSoCpjfP6oHr%*HIh-Zw&Dz z9N449!q?o@W5P0j@J&mP+mdSQ?|US(a5;=UGMxqzr$=~&K)f#IC|Mh%Hg>7vXDKI# zrXEMU7KJJIWt`?o62H>(`rlszf+l>DLK z>R#WX-IX7MXvvQPnXmbgJHO&b!NZat2Oci?@x;RgKMEd6&it71aOOw+JsN@)KT!Cv z;K#^^B|q?rA50neF!7@U0we7UKl&M`Ke+H?B49aI4u1`Z2av5A{cVe_-T(jq07*qo IM6N<$g7{3Sg8%>k delta 419 zcmV;U0bKsH1MCBk7zqRe0001qplF?uEV1b)Zs0|{v9R$8t@0EE>zv2l^{NWp(| zPt0a)NXyc-)K3qmrTKT%P`TeZxdq}D!kP^nj#{!XnpcEHl0E{29g@x-atQ0b^&ybz z9s#Ykj~nXV&dh#9rfz9Yq_M>lT(6PYeDj~#((yLxZ^B~BFQ0bHx?YsfcapT0DB7<)DATSGjuhKoS3u5N^ob3sku78-^%0hlkrCHw*!T z9%<}j*KKUyk-Iwx$%f{S)SRCmK}H+YxN$uH>^wXXTlepV>RXMbEcnpDM|hrmr~}lZ z*U3lAYYIMS@QT$@~A`)`k!PCG^-F;v7B3n>LJdZ~dnL?E5*#9f2d}oHqngN-^yKQ9?Av zZ4}@DGb6`k6rE!x(tchMD6@uWR$Vm%KwzsvlqmD*-rD3nNQpTm>Lig52q1mF`bv-; zpqn%Y6dB*&;%Nte6ha9>G7w;k1V|t%t3cxt1zJ?00!%9$I@bEeE`G`LFrn=~E-d?R zMtI+MKjz@lCN&VFc63D3Fdbg*#k@( z4H_;Q=|H6d7asGm_-RHAHdGX_R~bsAfyGiITWTeH`BSGpzrl7=KtBD>vhO~CKVKpi z;BvG)@Z5ZIVBS7B_%^+bc~{(!KJK!AuMU^yWsOAAUJYB5fH)CpLi29Zr5;G#I~9M^ z<-8`juPVe8Aab;im5+D@ojyhP=#^`ih^VayPe{^X0@JxI$fH!2cky3N;@H z+-WF45%^aXi^qv($HDO0@W|P0ISA`w(-}ix!c2bT!pweT!YqDd!YqF1n=p$X{wB=q zN7U=G1C4%Eg!1YK_QDyO`URCy VqXB;aeKY_7002ovPDHLkV1igdl&}B* diff --git a/graphics/pokemon/parasect/icon.png b/graphics/pokemon/parasect/icon.png index c6aaff12d702bcb696d4ad28da9d4bb66d1e60ed..27b8e098932cb01dc43e5ad5b3c40b8c3f88f186 100644 GIT binary patch delta 312 zcmV-80muG?1A+sP7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S07*naR7i>Klx+*c zAPj`diUuO&{{O$-MQu0h%V4m5YCcHeE@z7RY};Mm6C z5FqUc%r5|`fVdFkc#x7YaWG;QGm?vxJJ%M=0$cyP5;0(ZE|j_g>5?&%Na(9hj3bpC|6bpgBF=>S5twcUCa3|J4%-QsphjSD zTl2;6Is$W#sJq06kA)eLCqBlX4rnG^#s`!-=R*XS^D!pnD-(a{7sQXlAG(A-_y7O^ M07*qoM6N<$f?~UrBLDyZ diff --git a/graphics/pokemon/rapidash/icon.png b/graphics/pokemon/rapidash/icon.png index 92dae70a64c0d8911ff899508ecea3a5fdda41b3..a15a0a18a2071cf16601f0011371b49237184d64 100644 GIT binary patch delta 453 zcmV;$0XqJO1dard7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{Sj7da6R7i>Kl)-Yt zAPhvEAqQnZ+W-ICY9+A2vD039=~Rapvk!q}vfK9O0@ybD2&kEULwJBAJ9EYvh;+b| znK0=Te7zHx-ZASc@gqE_k<4+P-S{TpL(y>|69g*vcBMikD%B)(Y=LTAUj@vWM`2(b z0kv9X8lQ1l0*6e0H6$UP8k$S7)QD0`Db*2AUPMZp!~{xd#YjjA^aPM-o~AKTq`F99 z;?uQ;T$#eAuYp`Wcb6ofz1A(y0}~#$l(ve)2A}Mvc(_HE*1@* v{b9Qb5*ptm>ytmc+0&$Vf4Dc0U-E}9tPvv;er#0=00000NkvXXu0mjfnwHN2 delta 447 zcmV;w0YLta1c(HX7zqRe0001qplF?uE^6BHKi@dsO4;rhSWwS8C)FWO0q@dtff$a|J>)h@6OT>;O|xs z#Z>6(Y$^~$1)<9dYiO7jstlABD(sQw_LEt$US1|d>j$z1D{>OyE6#@c_5 zD=kQ7O30e>Rij8JDdonLhP=EU}}sS7ewej$*;&^q_|F0gi1tiGdt%;X+aHe;0c10a0PF3yWRg zRFYKyP3E%dx@3Ao8{Cbt0V4;(&?fXD!@OkN3U^?Dp{OriL6KWO3k)Z!8F(3hX?g?9 zxJzeX#u0pAOdB7Vzz%W-rW|TUU<@CH_0SfdmX9hQOf@hMhK~(%ZPR|>gS#tVS0f+Z p>5=UVl^1*<_hQS( diff --git a/graphics/pokemon/sandslash/icon.png b/graphics/pokemon/sandslash/icon.png index a1d72a1ba7cb5d5908ba16b215d57bd361baa682..18970df1555ddbd1c641c6d501a9eed6e61c0155 100644 GIT binary patch delta 374 zcmV-+0g3*t1Hc227#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SK1oDDR7i>Kl);X} zAPhtkkdV1}{{L^+12h8TWOsY$sg`J@%mmv|zvKAEJAq#$6h45!2eFq>GXSOB7$~W& zNT&hSHb8}$f+P^FRZ%Nc#ljn!UcqH*ki=fsDqUw0#pM9MwGftA(0><0SHXqWjPAN- zXjW0G8f;+SYBs}v*xywNay+ZAhtTTLEKXX0I$L#6fVPD@j><4l^9 z41L)F<2X+;kkQ+Ws0NF>=1Ekln=rch2e6ML%fRu(+h)s6@**5S1STFg^^zxcMLaV1iDV2R<}{Jn&%<=KhbxY99H(V*km9AAI>5 U^#NHlpa1{>07*qoM6N<$f`#Lw0uMebswRzi636$dbO)b3Sp^Dpi=qmPikUF`A88iHmCoMAVE zunrIgsB??MYdzW__qdPi*!G;KfC<&AmYIX0kb8rV^*FNrGaOGnLGi4tE zOtXl5aG+16_i<1%aiFE~ zKD;0i*Pv$h;RS7d=>4?uLA{_22U>n@eK7N@k8jj_=z%BYx^e&j002ovPDHLkV1ko> BplbjC diff --git a/graphics/pokemon/shellder/icon.png b/graphics/pokemon/shellder/icon.png index 8d74f82624c8a138908183308884952431f237a4..8ffeb3edfa95cf44487ddbfd4c8f2cf5cf4b5787 100644 GIT binary patch delta 263 zcmV+i0r>v60@4DI7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S&`Cr=R7i>KQ(X^) zAPjTyfdt6<|NrfELo~-Y?(IGj7bTMxXw`1pT|ZaA*_`bYUP_y1)7!u(@a62JOc|<> zT19~A9#Eo$IaGl6h*!sJC+R@ouIiVOIAByk1*T6ZkjwcHWCFWVB`J2wRHPAfhn-SJ z1*WDGbq88R5GnnLU(bC*yJ9vpTNux3sMQdVrJLTkee>XR7fh14Q5_t7MwxNE;aamX$0^dfEE8!m)3z#I;`zchj{(7 m4)sxoc>R+OaUn+?eqA5UCd2+*X_OZL0000KltB)K zFbG6V3X2B9-2b*8S`#a6{VR8}F=3vxD9mwuu?^slPLBjYM2P1aLlqHbz=$&tuRtIz z*dqam6slK1lwl@hy|lLjsgSHYP;i!yYY5H2shdaW8HjAx3$wXy=?YyIMTrJ1>jMxv z-%f}x29=SZ5r8*;1?WH!-2v~)FQpw(CCY#+Y5}Nvhcp2}XfI)<7EF2rBBdr?OY#*u z(X#zhVbWWpF((#3s>7>U@foQe0qjN&4X}raMANtOv7gj0mhqlHw9JD)Tori<~ delta 307 zcmV-30nGk_1N{P!7zqRe0001qplF?uEW*S z@V)tvvO0?hbW-B9gvHWKD4<^=<=rn0uIF#s{x>dwAB_=))$ zgGDTjDHZ^>#f+#36MiqWnN}WOGlb7Pw@HMM=Vcmc|9DP%0lfZ%zf(W-gPYWkQHR)% zQHQ74k5Px%k4XpmrUR~ZNc_0y5ON=Ni4MV!s}BFhk1y*92zSmY-+2H4002ovPDHLk FV1n(pkwE|e diff --git a/graphics/pokemon/tauros/icon.png b/graphics/pokemon/tauros/icon.png index 08975b0bcedd9bfada576131ab88bf1dc730800b..de4bdd330d435f7d221310649a61c4b74b9f2a4f 100644 GIT binary patch delta 340 zcmV-a0jvJB1D*qr7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S97#k$R7i>Kl);k3 zAP7X`C~&j?|8Ex@ErT#QZ0%*MhC>eF0TR=FUElb10Q;E(4fBx|V-}|kfbx2`zi=d0 zT4NF(sEVNXZuyFL3*3gF5}}g_3?QSAV}huQ1qREwO`eN&(FW2<10oz&z-Yj|R%)JJVR)PFk6ss6-ay!sIx#;M=_ zTfjMtS3ghnJ0m>QFF`$C{n0?Y`V)U}>d*aQtDiX);8uS#?hhAm%V!b=uLFGY2XhcS m_=7dghwnoy?gQYsKaC$Ip%hSF?r+op00007zqRe0001qplF?uE5dr5Pcp!;_Y5?0TE z)6Ds2itl{_j6olZkg+krIw(Jd)l9qJ9GiCgLfA~Zp(>Fa>4d=r18@{J$o6~=x z9pdqE*CGLk^38YBq9U*>HmYiK0xjmU3Z*2_pmaP?jU0;rSDZH*2sGu#6~qMm2Z3T! zvk)8JP{nJ%5G;Z3yiS&2^*e8Cfm_8UoDAwWMhHy?!B%&r2)ASqMA-?eFw$huvb3ddp3mqVKY$c4p^k4e%1HrSa$7<9mbpQYW07*qo IM6N<$g6;&Ry#N3J diff --git a/graphics/pokemon/tentacool/icon.png b/graphics/pokemon/tentacool/icon.png index 5870f50b8ec9a40b8028accc708279f61ae62ee6..64a9ef364532259daefb064464b3ce3eea6c9226 100644 GIT binary patch delta 285 zcmV+&0pkAS0_Xye7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S=1D|BR7i>Kl*tOi zFbqV!fRGnF|Npm@RX3zTwl6I`G$spV9wXUg6;qvilT}{kMxi>_loCTOgFs6nBXT!; zBZecusm9ogyaVujAq*nvL0=7o@V+-DPtkn?Ut3VILk&X9ZMHbRqWR@7p#`@@u#f6g zE`-q5|6Uk7UzlwA`1f_E`^V`%h)KFn#3bDZFiZEdX^|%B)&YW7W?@8Ehl5|mALpa7 jEUtb#VmBV#XUD?>{(}_$QAcD~00000NkvXXu0mjf7h`%= delta 281 zcmV+!0p|Yb0^F$%&!5X=vjyx`y-pbyaZ zq_FW9a>7Ac1#1y4ECfGblj0yx$z6nyh-5uuVm8~@2DdqGnAu%sHV8&uXxV?C4G_30 zGvGW9CXJR9c$(ru0Z^uxMMMK9y^0nDs24hoj+Q7&qaWvO%qao3C&4qywC^0aOM{)k+`~=tSx=)ip&IirPAheb4v6S_}>GN@h{urpz_S zWyVBu%0%4gQPh8=-)v6PZzweV2B7Ktg8@g=chaASf4&VM48`yqu-OQH-$#zfD00F$ fxnuw^Nn0<;2)MMuG%&CL0000Kl--WR zAP9x4CI&6xy#Lz{PKV*=M&I!dK^!D5r8gykTbwccL>g`a;de_mOyR# znd&A9Af}T6XRX2$0%{3zt`=FC2Lg;MK{g`g%*1^sAOlDP`3mM4V2}tE2Ws_fJy4X8 zWL2=!?GVJ04bb*~vFfc2(=D`@RTtvol6C4Iq`wIu2&hoe(9I#}E8-hKj1mJ-5>m45 z2r&+Nu%(yfx^Ex8I-=NOFD~#3(l@EqE7>i~R?8Z|oliZ!GqAfA{)o|Dk+A6fE}NxPP$!L>xcBul;BH z+L7G;y4&rK+28)EU3xpVeLr>H%g3=jzW6h|0Np|%9Hgt1DF6Tf07*qoM6N<$f`zcA A9{>OV delta 358 zcmV-s0h#`+1F!>-7zqRe0001qplF?uE1pw6o!2R;T*uBK7cb6 zI&{fxG-UBLYzTO5LLoyT6bI6+LrFU$FR! z&D~^@>rl}Nuz1to4X*(m4^9EIkr3kV;I3J;F%Yk%Yt)T5I%Tn_vN%BGmm5 zZAA=XqhfRl3Jel*Z@5f-Xt|rX-1AcJb#U8nbpV~|(6gIqb%^}-TOHiQ1YQTX`~fMe zL+JddkKm{S`E64T@roGmfE{!oMRDD!jFCEPnf)opH;7ChcY&$GX8-^I07*qoM6N<$ Ef|aKl*4>1X=v{g)Njl&my7EC{#@nPZD@1$05ShA=ur)9(mLFHz z>~+FY2pd?yhJiYDQFH-s*cJ18rz{1hP)f`?%zW>K;+C`x4G8oXr9k+*I;QJPO`V%SXx;=)}VqJHv#(@XGJ=b$`qSV{^f* zQiy{0%?|l0UMqIDFpLp0)Yb#0x23#fe8MC4nGWm6b8u*fm8;e h;fG?wKIR0XJOFJ54y7i`LJ9x?002ovPDHLkV1imZc4Ytn delta 271 zcmV+q0r39j0@?zQ7zqRe0001qplF?uEtfb+sMOKTH~Ja+d4*cX63{l|Gg0up7DXHcG21=d`^a#F_~|G6z?wHe!c&0Q0TO|F z77SW|4c!D>1FYzfORznrbYkRkt*LO{Ll#$55X~SPhpZr)NF72}5K^mQ2Lu>3V(Ds4d8ZQtT zC)3GwlEX002ovPDHLkV1h1Ud5Hi3 diff --git a/graphics/pokemon/vileplume/icon.png b/graphics/pokemon/vileplume/icon.png index a3cb2b0b59a050075baa9bf7fcb1d65c6edd5092..3dcf11ce3912894ffc6924c219ac0521c7b60985 100644 GIT binary patch delta 318 zcmV-E0m1%{1Be5V7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S21!IgR7i>KR9z2* zAPgfx793{#|Nr(nP@{ZZa=F~g*#{)FbZ*f)_n?Iqj7d&JiKV9j>3t#zK_vOawL~ca z;F*J9?>*lX%FF^RO9;ziJK~!{K{Jd^f*s7T-YvYHT9Hy9aa)2jAw|f(DuI&TB(h%z z=x#yzkcAIW-KUy=hIS!!$7!RC^I=mg81b8cq>%u=+a|X36}qnAGGbhN7I-l!0zA43 zXkxw}11;oG{dg7*< Qi~s-t07*qoM6N<$f&wy$Pyhe` delta 325 zcmV-L0lNN(1CIlc7zqRe0001qplF?uEbEG@rFn!5fevSI2SWx4lC5|Ud5Ka8PPrHgCTR;-BVF4f? zqCZv4+)mo!S{~W;tK?=zl^hh2sr3t9WmRll??{x+Qlj~z6=)?Xr9zPvM6A@BvMPVU z(Na`Nqm+#8M2B&)Q5O<1x0X3#iG4i`*|@{J7ju_P@F~dN0l>oR#SU(LL9jl4*5EAX zrPjK>bAo7JwchEa_sB`tu-9&c@At4^F9rbfdAh>h<>xS8g@S0K|5?G(g#pG};hOB00000NkvXXu0mjfn=P5M diff --git a/graphics/pokemon/voltorb/icon.png b/graphics/pokemon/voltorb/icon.png index 551dbf281c4b9ff65c99f66baf812fdd2050fc82..f0113355b0b81df695a1c5886fb6b1819baa5a22 100644 GIT binary patch delta 169 zcmV;a09OCz0rUZo7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{Sa!Eu%R7i>KlR*l= zFbD*Tf(HY;|Nm_@>7@{JEfnWEV~~VgSMysK9JTxKI-!r@X68jfdjhk4!I)isA5ahq zbwTCyKoxifgycEfASaco;bp%B)&eMeEFnlliXaMAk=o}~Pknxkqi&iv{k!{jf6fg# XdkVt@hYAh=00008NkvXXu0mjfdtpLU delta 155 zcmV;M0A&C40pDE8T__^_t9PYk zeLxcU1{6rkM;6Fhh9bbPmzI~7mWI&7Z=d!o?-{bd`n30t((;f5o~79vr#(Wl=HIil zw0HVQwtUum_f82}fZy0iNeS6u4F8ps&^?339|dS&H1=r-0B5;bM>N2xnE(I)07(Z$ JPDHLkV1jQwM4RM~FC zFbK5bNM>UP{{L^w5wF2<(@K4)v`DK>V1hZulhQ{Tzz^})t3y2W{mgMT=urRJF9DoO zo{4CEg!zeDtBUc)?-H=TS{c#;f-16K-4Ye65rCJQ0UG6Bj)?AV)N-b*Pp(9XTW-ma zIgZ!?)|ddYoUf&SNVtyp3ux2NvwSMeU>;rQ@L)U7%7)sYLXfWU7=Z9RkK@RAFba7} zd;s{NllT$0%sFu9sZ@f#70X1WGyzouu#wxAj7(7D9wmw8b@Sg`MuY~y|nqg(}mb8ti--w-XFxQ7=lGoQGi}`Tb+7Ls z`Hg@B_s#i%Ll`~W05I(aI#bsP)Jz<_FgZG;bQci4z5gp9J^r1548U4ItcPa-;d}Kg zAd=!qKvW*?0+QnOSO`d@%tAoo{{A8$rUza?IN?OXARwdnJK$o>f~6DXCV^Pokm33Q YI8-JoNgC1(*Z=?k07*qoM6N<$f)v8cTmS$7 delta 420 zcmV;V0bBm}1MLHl7zqRe0001qplF?uEKb05eFQ8#WaJd@l{&SXQx~N}BE=FtADEDI=n%z&1;60<@8^TDYku-< z&efSxDpicjcrglm5OKU5)Zw2CxK8+Ni*QWz*1K5Ii@tH*R<;RqVR{^E0H~wT;<$gQ zz``o->2VDG2Y5H#Ie}+-g`&z{3Zf!j*b@*Sf8&htBcA zzk2?9d%1fx-@Yc-SVMQ+O>1VR#{J}c_ozE*AJ9CRCu zO7XCp+q(7I$21Es{M0e&$9S=_m^y!%Vy47=j5&qOGGV-#kZrCM?CRg2Gs2Z;YB~5U zmxCfn=EMg@sDfq5qEM=150dtcO(HNv3~_V|8I-{ O0000 Date: Sat, 1 Apr 2023 07:34:59 +0200 Subject: [PATCH 229/428] Forgot to fix Venusaur --- graphics/pokemon/venusaur/icon.png | Bin 493 -> 489 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/graphics/pokemon/venusaur/icon.png b/graphics/pokemon/venusaur/icon.png index c841ddde4fe57b5833b98dbe10868839264c683b..ce3b2290ac95bbb4a77df21b7ad9513739f06424 100644 GIT binary patch delta 415 zcmV;Q0bu^^1L*^h7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SXGugsR7i>Kl;Mtp zAP|JR6@pC{=KbIHW&o{J+T7*Rf8D56W*jz1zsu!YlLDXO1r)nN^rTea%p}96UN|M$r5# zaMMbJVKs0!loCUKFv`@K_SED3jueqc0aOEV{dZ-h)+qmuYv^VAo@bh*-E5`X$KR6eDU)~zt?fP&1y08IczLxrT z3LvitQu)yVG9yUk#{(c|f}nxn4L~pgBn^9R0+4h92%6pjLV}zCLLpUvlx>GT933DU zy;1)pK=2WOU<#1(FMybrkq^%RIrCuz$b=6^fV|?v{(1h)haU-yCp!A$RptNy002ov JPDHLkV1mvdzz6^U delta 420 zcmV;V0bBm*1MLHl7zqRe0001qplF?uENVj`1Gcmbn> zYZnu`mNY4IALFplj<6W#F8T~k4z~$$?oAo%(!s$=QmMHOCSZT>1qyW1PR6_O@t%ejD&5SI6Xtv z=xl2kIbe&ya4=E<7H-Xq@jTiL98(5nj3Hw)%6YVLk`gdJe;jkpBh_>_XY3)&_=3kV zS3UDL3DU0ozXvajg;z5kcNXWD#pHh%^E1X}1vjh70o5*l;!(XH0LcgE?Ip{~Zubyq zfc7sAq%iGKK|$*J4bcOV!cb5@FQt_dh8p0}p)h(SOzBihm=Z`~Y}rr>L!uT2zKc7x z+9INa0jBRq3WH;WK_g83gD{ Date: Sat, 1 Apr 2023 07:35:18 +0200 Subject: [PATCH 230/428] Fix gen 2 icons --- graphics/pokemon/aipom/icon.png | Bin 380 -> 407 bytes graphics/pokemon/ariados/icon.png | Bin 389 -> 421 bytes graphics/pokemon/azumarill/icon.png | Bin 417 -> 419 bytes graphics/pokemon/chikorita/icon.png | Bin 314 -> 326 bytes graphics/pokemon/corsola/icon.png | Bin 315 -> 346 bytes graphics/pokemon/crobat/icon.png | Bin 391 -> 404 bytes graphics/pokemon/donphan/icon.png | Bin 479 -> 401 bytes graphics/pokemon/entei/icon.png | Bin 488 -> 461 bytes graphics/pokemon/espeon/icon.png | Bin 348 -> 382 bytes graphics/pokemon/feraligatr/icon.png | Bin 469 -> 492 bytes graphics/pokemon/hitmontop/icon.png | Bin 473 -> 463 bytes graphics/pokemon/ho_oh/icon.png | Bin 558 -> 539 bytes graphics/pokemon/hoppip/icon.png | Bin 342 -> 366 bytes graphics/pokemon/kingdra/icon.png | Bin 402 -> 349 bytes graphics/pokemon/lugia/icon.png | Bin 517 -> 523 bytes graphics/pokemon/meganium/icon.png | Bin 431 -> 425 bytes graphics/pokemon/pichu/icon.png | Bin 266 -> 288 bytes graphics/pokemon/politoed/icon.png | Bin 399 -> 398 bytes graphics/pokemon/raikou/icon.png | Bin 572 -> 489 bytes graphics/pokemon/sentret/icon.png | Bin 320 -> 336 bytes graphics/pokemon/slowking/icon.png | Bin 401 -> 402 bytes graphics/pokemon/steelix/icon.png | Bin 442 -> 483 bytes graphics/pokemon/suicune/icon.png | Bin 538 -> 533 bytes graphics/pokemon/typhlosion/icon.png | Bin 441 -> 446 bytes graphics/pokemon/tyranitar/icon.png | Bin 458 -> 431 bytes 25 files changed, 0 insertions(+), 0 deletions(-) diff --git a/graphics/pokemon/aipom/icon.png b/graphics/pokemon/aipom/icon.png index 43822f098048c30c6d76abcbe6506c6ca28f80a9..294ab74eb43d491423a0017e5a39e4e63d0ead98 100644 GIT binary patch delta 333 zcmV-T0kZ!50+$1j7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S6-h)vR7i>Kl)-Mq zFbG7WbZfa}9 zv=Y>#Yk^>`HUV}POmz?pk|&^|p;x360GTlnn@Ru@0JkA<5+MSy3J1W<9>_O9q6i6i zNB~PRZNy`Z;82KvllNW4gE-z_PuGO~J94k_6b9b=sWbGO76YBOGv<131ZDv2slgFV z=r{pzuh++ZZ3ox?ygeB24%MgrO8rawUx;r10qFK0fNuW*==PsJwAud{ywU7`WJv8P zb=tr3AqMR!b=rUJ5-R5yJtUU>-3wr0-%_OPugm;Mjl3@`5y_YKe`Ukvr=`NQ|J!qO f$+ipe1Nra;Y!4V2<&_w<00000NkvXXu0mjfnZ}rj delta 306 zcmV-20nPrG1N;Jz7zqRe0001qplF?uEb>!3;^{5KBkK^^>JMs z7>I^0;gY_ihygyp0{nJryhu+F?ZE_F0QcUEOrbczBdKsK zd*HRuRZmtO`cLtzI;0#?hYX?)8AKg2h&trDQHMO4r~~*Undl&!ffmW`Iv5!~qmIgm z4x@nW&P5Kl);X} zAPhvSf(cwa|Npl;4oM1&DN?ms^$;JDsxz6G7~bP?*C&OQE(^!nkmKn9JTG#_A&VPE zgTg9%x@AH%rKI^x8seF(s^aQm(Ho$V@koP%;p$x20b)D)9Y78~ zOaTI;1`dFD4YU9;J`ATqI)IFh4j`2eGk|z}=mB!^p*`L@4L~M*cmc%a15f@15SI_+ t#|03d52!g6AX7eE1exuMb6tPThad8=7f>!Itjqua002ovPDHLkV1m}^lIQ>c delta 315 zcmV-B0mS~L1BC;S7zqRe0001qplF?uE3G@Oo^q|uBZN_ahf;=1Pc;)^RGM0clx5}j~@yHt-cHF z-MJ55Pg`H@J0JPvHQ-_tJ z%Pi^?BO*Bk(SFfAwNa5b+>e&_VbA~d`~nzK0hrFm3=FMGbYKvGNsAGTc3@;Z2V-n9 z12g#;!1O*`;K2AkdN7`k*B*@LV~-~@7|#cFMF@PvDp(0V+tC+3-T^ZE%8iZ4)c^nh N002ovPDHLkV1nsWk$3KmBEg~ zAPhtimLe;)Jpcc<#RO6eF}>_zrCm!^5i>D1bzW2YV*$*INf$v|aNyv}aXVMXVG87k z4X-Z-In3}nf*LFZ`azL_u}ffmi0%?djkp3b)hy9XS_X<8MLti#U~s<)Y5}LTK$@-` ztRy5d7~txy1`DcxUwRpMXb9zS6U&FW9l^d~Wg^pK0^?OTeDR zl7Vr_xs+(?GMcv4bX(5{d`#g;-tFjK|Bs)Gh%kLWAdC$$wuGs#%oZSMg!#Pyu_@jG z#NNX#K&oK?$Vw0g5Pcv>8UUhC1W67cJ%J<02oOatY^d`%1CZSJ{a_3L$@ia=zbX%q rg&@EHkY|FV1`yd0#2!=q0+1=*kN_D%rCf2*00000NkvXXu0mjf5d)8j delta 343 zcmV-d0jU0?1EB+u7zqRe0001qplF?uEVlBg0~4OaM0!$u|86k|fCEJV(Y82>a0mi;+uHUZEk6Bw(>49@B(BRQLDMyzK8xd$ z<+j^t%>?TVBjYU*^OB5N>#JhQ(lcYRe5s52w^a}{FFPk_LM{n{9xGsY|Led2Rls;t z0pm>shT<()fswO?)E9smrDsak5tu_6sUZpxn2{7jf+8@F^T%}j5txVhEeQ!2Mav8h pzyR=?R)9GZFl1ZAml~KK>l%Q67#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S#7RU!R7i>Kl+6;t zFbISb`RTz4y#L#ZNv%C((ea>mrhDBl6w+OkB~D8tNO%i?77_?(^w1WH&wx2%h|#9lbQI??L||gm5~hK$_N$%( z_j_1>1pqE}wJU*IF5LsEl0Aq@$y*piP3=>Erg!!qEq8hB|L1;rQNIUB*5L?{#Q$P| zfW6uR1Wd9E5EKwwfXoA8A0YGFc6kQK95`-1+yIf(3zGOF4`BcR002ovPDHLkV1gwP BY#jgq delta 239 zcmViY;P)?An z6;eIYE{Rt*j>b{o1at(16h=Y_L%%a3F@QHe+26ALmHPS6@hbB`gCK#3S}ZWsiJnJ) zjzYnWgOCi&j19WkJ1fABH;XNT1Fx0>cs@1`$J`CGKTRsyrYWWe+0i;r1R!u)1;Jab zPI(1D$9g@8WmF}vq10@y{yAbSa_YnZG*R(gancN0k!w?&Fd0S`d}tVa+{-W?=DZEl pgKjnqU8ag`7+fY~!vOfYKb}}9V72%=#>4;s002ovPDHLkV1nWtV|V}n diff --git a/graphics/pokemon/corsola/icon.png b/graphics/pokemon/corsola/icon.png index 9fb51a0b146038411c78300dc5d07de33ba9d74f..e5ebe6c08d6adf125e0e9ee9cbca9637b13c16a7 100644 GIT binary patch delta 271 zcmV+q0r3920@?zQ7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S*hxe|R7i>KR6z>E zFbr!5^k4_;|G%A_l(uV}48{%{s}Ai!ilsQ9Wx4Tb;1#c!N&q#PDWIYUA1NW)6m&u! zC+0)nR4r0UkbrwyeLVL-!D!dCw?YJqqM#(0TH^5(PN=VBDE=G2J7W9i zF*p7J-_kG*!-i=EGH94nfeaevTp-o0Pk9uGEAsPx@B$f<+n7231|CZz V6_bnuHY5N5002ovPDHLkV1kn2aM}O> delta 240 zcmVr9LId5U(y?0GCRw=Eu)i(wbrLkx!LqbQpc5(D^Oq=t`Zy*XY-i^^u#Y$k} z1}3S7q6{MIVxL4HMeUJ|aCr#RQXbJ!05Nj$k55Y}Sw9>vFnc?0J%(wfVA$Ge-;Br^@Z)o+04{&P zwgGSNuQU5`=Lom^hZp=BD&^=t?+~T&i6J7MJARP27k6YVsquKV%t!&N0@7^VWByBk zrq23WMg1->>UVkE)UT2JlGU#vry;A~4X{&IzYgWoRMcO01ms73YIYFJ>a(wgG1(5u zq~7lT&UU~nk*~{S+aePU{r=ZE?I$Gt!g5JSPpO%|VWJQ9tM~@rL&kZ+e=Xqv0000< KMNUMnLSTZAl#Kl)(~% zAPhtWE;%^a|Nq-&69iGQGo7|4_oU>JkihJ+Jo-p5-G()1oiZM#Gz|!9T4=I>6G++# zUt(G$iU?E(f=IILf#@dei=?Q|ogOm{gw;nSJS^)f7=czi!W0fgh*&)3gtZbCfOkTK zVec{!i4-V^?h*BW8zO=VlfhFn6~enzsmdf`snX^ z9HcwQ`Yi{Mdk1lUc;g_=A0`gc`#d>_xPy#M>>b4Y0hj(J!1%R4bO)LGLvxV1Kjh!| Z!wa`uAvdSamec?M002ovPDHLkV1fesk*ELw delta 406 zcmV;H0crk`1K$IX7zqRe0001qplF?uEb>!3`KndK{EYLU}rNCS&$QIq6D(&kjZ(>U?%{6pUE%)sD9?;KgA()$t8_gZKCY%ZVXEqMA*b0 zU>LvZYl)?|$MZ?{wp>1R9%JM2b0vxSrnu&p8snSz@vs6<}Y zG0{|sAUWy$S*jm|_ncrH;>C>>%-J}f{iq6w zZWC`>fJ+891qpdWB+d<}Q3s5W*rSgOgJeH!0Ei<<@gp9L=XAJVvPl`JFl&E^)(v8- zADFrCE&N!1{D`~s;zw3UR(|CFVC~2D7k+#LH-8%dYcN+j00000NkvXXu0jG}g1yVS A$p8QV diff --git a/graphics/pokemon/entei/icon.png b/graphics/pokemon/entei/icon.png index b7707797f0cb9261e12a1af310cac50f0e75d636..eeb80f46047d49d661461cd800c4b0e3bec4d48b 100644 GIT binary patch delta 387 zcmV-}0et@G1I+`F7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SOG!jQR7i>Kl-;g_ zFbsp2R4SB<`2F8@ZrVZ#Fddz1Dv&1Gb$&Fy&*wei0QGrPKPbS~OgBENrC{5jNU1&- zeJy1L=u0Un-w=YTmr_ldROzq~0$117pvu?0%49*Rs@ldbD4Q~ft>Dm^D@f)JG5%(T z>SWMG{eHDT#Dp1tbDz+hd7%~nB{2~TF91?eY h02T~@ynOfvAHGXM9ABY#P;3AI002ovPDHLkV1k>1t#kkY delta 415 zcmV;Q0bu^k1Ly;g7zqRe0001qplF?uEn= zu!N^B5f8ujC5VnJso{t?8qYJVEQ?j5M$xHvX!KHuar?}bD=V_ce{Tv zh~n*Y%8ScZI;0bvSDSyNVsR#yU zP_;Dn?4Fmgm|zN!^OU_+Fc)^ad?tTbdj22&?9<55G2sKnjVj#6xk9wWw1du)IiOf`!_iCbV?)O9?CZzKR6!2J zAPDTHo^}ZQ|F;Y1c13Btbdw&+p=q1}M%3B1CoT?I;aD&P6GOs+yn2FRLL`yU7^0z& z5XX{Mq9uB&lR^o0L7^=Zd9PMC^NCx;KMZ6bOa?L&qJd1L(Lm}Y?yHUl;xFyoK-w#mV+(_U zh&w=6U@(xH8WfBMk_;*sNcJ?Nfn>A1)IiSsL3P~HA3i!0Dj5Vsq)-(|K3c+s$S6cJQBMEARvw-nLm0`#o zuu~629yrgyNG#`@hd#M!xEyHc_Qr^tIsmW3flgigmU#lgoqEepjicE@=(x9x8n}G~ zBPU3Lt|X4P^y6K)y+9RRAU3UnMYY&E;B49GQg9=$wh+9y>9x%?XIw0?-!4tfzt#u9 zl&Zi~Ap=vT0!%bZQUykJ4NSmUsK9_rKd%B4<7A5hObeEPY4Hj$E$X|#Ecwv!yL`L= X&Ar$}EUn=}00000NkvXXu0mjf$&q}P diff --git a/graphics/pokemon/feraligatr/icon.png b/graphics/pokemon/feraligatr/icon.png index 2fe3556a84094255dacedc86769420f89d31c720..74aca6aea47a50f18c8729bcb8e37dec026c5b5b 100644 GIT binary patch delta 419 zcmV;U0bKso1MCBk7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SYDq*vR7i>Klu>Vk zFbsq%45?IX-~a!&J3BzrCd)KwPuuc<5O>(l1-{$ucP)IS@0feA7nIX6a?;?{fUNc| z!wVN`uf6n!J@n#;TQ8p(T=gt9bWo=w4TBOMdRSmKG^m@poQ{F6rh1ok4F|drAZDVt z>$a`RTla_+Z2=K~zA9@PY9l;@jhHx}DD^EQ7E!~sS#Th-8V2a83Yl+A?=S=O$@t-WB3g3Xu)FRkIQ#Uxw?7f1y67DgB>3^563@jgvD zn8L9W?e!%#!@YX8>c2Ypf(2Nqn{&*8Bh!zQ${sTL#sT4fUgtkSf8u{-{R1QoKLwEb z!A}4ZggF56LXZO>DlI_TWD_8&k0i_!Af*KeWvPU@0K(id+6s{E5%1@Jc>?4lNCn76 zmwA}yz delta 395 zcmV;60d)TC1JwhN7zqRe0001qplF?uEj?ft9zR&(INut`}#hV2TroR-K$+6_F($hn*0s^~8b@-tyPUcNhOW@3#(d zgIXykh@#87I@E!xZ5bX}a49Lwcd7y#t-@RdCvYo;;4R#W6n7Ea4x}bn@nzKmhZz1V|-T{2X2`iL$ zDn#~4R}JtY<)zRSR{}`~z_Y1rMQ&Ep6SqYy_az?!bFYvPce5E6Y77d9S53q1dTkcG z=st;EW+D!>kYJY~Zzo)4S!pXgB)WH*gze?eN8fi|1JV22^RK{w3uX=m4C#k6V75IN zRaI&L18W)>FcllXz@rvqz*HgjU~bo1P!FcadoV`O0LB2(&qKNq%r}q$jIY6r>$DCS pGSOfh9|u}q`oLxG_(1%rk1uw;NuW8Js+a%(002ovPDHLkV1i}>uH^s# diff --git a/graphics/pokemon/hitmontop/icon.png b/graphics/pokemon/hitmontop/icon.png index a2af3bd2484a06eacafced25d2941540a84f1751..7f8d63f91561d6e163204d912b3c7cfdaea7c560 100644 GIT binary patch delta 389 zcmV;00eb$~1J47H7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SO-V#SR7i>KmF>>M zAP9w*8sLWs-2dGUP^(sKw>R(4nQZCGk&o8%?DhJs|6lSHPp3k31%eFHqztf1B%_>{ z830y=P)otAlC+jlh2In;Ris5B?1?oKX_28*zZARAs0t$gISiGFGLwcG2{N?6p1d31fJsH5{=^4EHb)Ezv8nazL|I7BGKo3d-4Py59UMsw?0{4*gy7v zxBtffgZ(%D9~`sue+R_I{|yj}|Ic^@gxPoWf8SpLQ8{yD8C!d7fZ)sCMi2*tI7?=K zH-dPPfDnx!1rQ4%PJ&Eju)}%86kr9|F zlzc%V!v!LW5CA{cJHyj3720qS^DqvVa9*9)E>V|t1mbF{zs7v4=WiW=d_L(Ab%(^S zcG3X~mMqAm1E}J~H;rq9wE6IYfE;_*Sp>}nmH=uB09I_2=mZdfRq0x_%j?&BEqm(g zMUd~;ZK45#APr+B8S;X3aZ?zPqQrUEKzGDVhPbr2Uj=SaDKv`?+6iJ2cP97%B6hx< t3t}pMtb#!fF?_@6e2_4-mxBDmj~|*$*qLG?0=)nL002ovPDHLkV1k~jw%h;! diff --git a/graphics/pokemon/ho_oh/icon.png b/graphics/pokemon/ho_oh/icon.png index 7a7ce8af61360888a36885de5b855797a87c890f..315683cc5e8ef1b1d46983b419bc998ef7fcad88 100644 GIT binary patch delta 466 zcmV;@0WJQn1e*kq7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SnMp)JR7i>4l-+K_ zAPhze&WenLzxRLJ+585Ql3i>!ORH3sPrewEt+XBAW--T?)Yn*0R;l0Y-2P zknjbr<<$47EkD33kV^b|y>+1*qxDn*NUx969kk03L{cE#_~i4tXF!*ZR(L7;DRn*av%h-QBUvKw_i)U;;5 zzM_3X;7C>fVZR}v4FHX(`gi-60f4T5wZGQ~Q1#FDn>5RSK-WJ57=n()H~q(am<2!U zU&_mXSoF6s{CU94`X{fK&jV)FAD8;1|7!nL|LgEC=l`q!H|laC8>S6{^Z)<=07*qo IM6N<$f|fGg0RR91 delta 485 zcmV-7zqRe0001qplF?uE5I0D+i!~oqf=ROrc2`BSnU_16w zqeRpX^};IHj&?q!)%b^n>%nkr_!_m^@p*z-)DQ4G3BXGZANp%du(}Bdwc5*iKrJ#@Bt1RM;qKE*^h$Um~Ppr_IL9;}v- z_AZcJeprl0Nh95VNC2b}|7HF3MK0cvK}`Z)J#Q4A<)q~RSLQ_X0F^n?*fGWgXd@7Q zuuT&Q7sM;CPzNARgD?cReWuvuXzJJ|5yn7kjXDJ8!Wp9vRrJB*Iz(ercMMTYOc%Hg zkv$$U6h;+4;5yi`55geeIz;@Ns`0&I9W`6pHR7i>Kl(7zj zFbqT)65C?%{r}(Amw;Lt2bK<~!b2tG=R2p6Tb8GOT40?5RpcCyDxVsI9z@<6(TwLK z5);(eY4WAuTccD?0fp^hCu#)I-C}y&c_YB-0LL@I=+cjq9vKSS$B%pdm%xmSn^_9L zR_oXtXV=jQWv71I7SiJRh19}dOJ4nlvmNmH@3C2?d#N=M=0fNM#U0(D6k^I0=Yx#AX q0Ll7?0Lc4icOi+f!*^);sUa)~|o^r)je6hlAOz!DKdos;6WTl8zE^WM71- ziolw(cuQ*K;AYCD7Sql_xVP`Bz_p@MyTuHSrqGs>Idq(}zlu)oJ$pQ+GaL|c=md8N zXBMMw%L4X(+7Qz1AY?o=W1 z&fyj;;4$zC_s9=SBh8s-nGloZ&()0#k<%r56V2ZNp@vT!msB~j36;|C)$u2vs46t( zx$aw!+9WGXLnKmikWH$ZBBnBvLA6yIice^5ab0Z?!qQs$BOW)20tYLDYXm#K8$BgZ z1CK6e%m4NDs`L*CYx+meLr*__9`^L}=i#6JjTL6&^w-g-_|tU1E&e)MiHiR?-uS@$ Z-vQg=6O3ITXTAUc002ovPDHLkV1j2>ddL6( delta 329 zcmV-P0k;0#0+Iue7zqRe0001qplF?uErQ$b3^KoFcC^dHs-2!{bz>g>tDI`&wx53Fd$vMv@&~9;;F%4L(w#*8oZhwvqt8MjSS=WD< z;e^4!Cj~_49!^4>9~pY8v!UQtV%2ZX_}n$R;*>jEUDXS|6IiZFDtV9RWf|m#Ui-!f zK&^>V5r*_7{sW+iQM($0Vp5Y!>xnFig?aEo0e5MTQ}K8digbZ^!+VU_?Re%0tNW^( z32HlkjdNEh?39Kn9$$AMO4u)QV3#$6_uI$IDDocbej~2`yErsD4hOk3h>9?=R0PN$ b^aFeVBNn46KRlAbJ zAPh@P6)GUtWvg^dN*N6kg%6 zuYBlO5vt8%gHxZzihy!%2(qtk?SvK??6U<8mY?F9SzCu%Y8`TP5iIl21uNW>QoZV# zQ77oXi=!|^HKz`Lz5++zGN%qE!&$;~l2@iiVqnLsoLE)P4R=8T(i9NrLjh3g7T_10p^86!r?$2_GlSAGV~+p77zbNv!UuNmM;X z+T3!flT~b`9~!4r6MF_6!54`r$eS5o@c;3P0j%qY{v?@yy=Uw=y1T>P6F#}y?L9H> z?zZPC-}#5T@3wik`S|F)lBW#mQZF! zI3?VD7MeBSZp`kUB>KCa+>Oi_-`U-RkQ+*Jcbc@06l%@gXmK_tNAnr(ZvDjnD7n`) so_vXA&^mfO$KkD_g+PB|W&uq7hWt+lb=fG%l&Wf6b`L^d1@|_*?M9!% zSbP(G8q0H{uSQN2eKnBG^i_;{PXB|8G|uU-8E?ue^fl8rz*ywLdK+cc4mG9(kkH?{ zu@5|0Nc7tzkaWO6-=@wWkq7!Z2}59_KL{Q!Wn%i)$)-0&5}3Z-avpBNGWjUuY-R0O mAd_1zI#Vu-Ae46{!ht_m3gfJY!Qd7E0000R7i={l);X} zAPhvS7z`!K%>V!G+N7z9V$#FzN-c+6{J>+9yxZ-o7Wt;$8m}NWD|ToO?9g@nDgoJW z86mZM(ll=YZAop-CZX4pA(E$fn;?;=xzAgi|eX-hjJODoc`IMEFdkgr$dag^Mje%AwbON-E+}b1K zsfFF)R!Z4=Mym%I5~>Fj5#$h1h}}^Ftd0oCM!*Ni;If0A(gTl{lB`~dK-8IoZVL<#@^002ovPDHLkV1meqnVSFr delta 357 zcmV-r0h<1)1Fr*+7zqRe0001qplF?uE;SA;`<5U&b{!0muP9ryj(+p}quw_oR7A71dcG-FJUY{qOCB*kF7Aok4S*9?*wu4cRzjr`qtGUiV$N200000NkvXXu0mjf DX!WE< diff --git a/graphics/pokemon/pichu/icon.png b/graphics/pokemon/pichu/icon.png index 5e3de4b990dd7ebd579fc7e16967388d62b3ed2b..d29fa7fb4a5774895e43e3791ebff8b16c4344af 100644 GIT binary patch delta 213 zcmV;`04o2A0-yqr7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{So=HSOR7i>Kl)(yy zFbsnQ57Op$dH=U{9UFKs_97@h%QfHDwH;ZOsmDcTKuHLegrMP`AOQB)T!Iy_uqbQQ z8o?M$0SEPvF|s{wUpZP4Zy>i#1GFCyzNo=^o_!L6aMG<|qS4}RZH%f$ zv+ovGD|q%PvTrps^(UGE()~{bh}y~s5SbsR08xV&0U|fwrkt$wg?u;wLA4K;vDh$% P00000NkvXXu0mjfI2=^% delta 191 zcmV;w06_ns0*V5V7zqRe0001qplF?uE}M002ovPDHLkV1h#-PqF|2 diff --git a/graphics/pokemon/politoed/icon.png b/graphics/pokemon/politoed/icon.png index 8ea308aa35561da41df3bbb6a96292d8734c5beb..ffc6a38a4862c5af1e2b0eb16ab7a97faf349094 100644 GIT binary patch delta 324 zcmV-K0lWT>1C9fb7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S3`s;mR7i>Kl(DkJ zAP7Y>226o+|Nn0nG+Ql@ZfD-SrAP{nf+n2f_=f?Y&bQVo0!mrVt01JkQ46?k2 zO%T~Vd74!vA(U5tsO=LH>NO0oW}_`&E18WTPHuv9kg!mvxXGbT*fYCqBL@5+oPLe{ zD;SY~^1D=(ze`oX<8=IDk8hc;1+onCpqPdyKm2Wh;6Whfk6sGI{Lz;{=3D~#oIUdg zVa_>Z8{%`i-5qel{qW z(2cgC;iQd2VYKZ+3q?Xu)CPj;F`IJX0}(TB`NVUB*DQe;kMWk>vB2*!%c#m=c6xuu zgjElhPfPGq`}Ip+=(!hELRLew_ET*N09C;(b^ZW&!-iClUl>-z)@QRx$`WN-loQ_l zt0vOHW897{1PgGnB;1*c3E|Jz9LJHZlmI5`npg<2U9b2 z5SdNi-|jV3gN2e^zJdA5SE1GsWY94q)bD}O##gfr7+4HL-AC_%3HWG=Qt&}^Kt6r} XtcRuKF!eK#00000NkvXXu0mjfn-rF` diff --git a/graphics/pokemon/raikou/icon.png b/graphics/pokemon/raikou/icon.png index fb0d48a5fd4a85560d166f6b4798e6f14022e100..77cc29d7e9f273f9fa110e59ebefca17e72ea8bd 100644 GIT binary patch delta 415 zcmV;Q0bu^T1nC2i7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SXGugsR7i>Kl;Li} zAPj_q4HAsV_x^7?+msfkDE&EUo29C1?>IXIzT^0#1$@xY^UeX)?;JSM)gT+k=xq7@ z+;ssn%!6*~dj!BF=IPSUE@p}rBtX<7I;3Wpp&%xtq#h#jA$2{nI$klLG|Kc2nTZ69h&q&Csf3ZFTi>YeS z0X=$-m~-(!5?gPcvGlo(LMdxk)3w}n*#-#dV@YZi&7MQQgP~So2y8mv9Z;pk;R{sJ z;PI9~O#CwFi}H@}>HQzws5L-;TWp=f`%sq|J(t?;X^ee-HwNo_d*bowLi|^#U&W6j zp1F5^M1U;(I0rwD2#^gw7J#h$fb*m2@mv71@h4;wsO?&*)?;T!I1AAJqmEGPf~002ov JPDHLkV1g?G!nyze delta 499 zcmV1H1%~7zqRe0001qplF?uEbBTsNMuqqROhnJ%C>e|b7A0ALRS~*MHZ4bbfTFkE zkN?O!-bX_IX@DFFDjw!2#J~b^B+|F#AnN#RDO@DAil0sb6sC=j(W8n%3r1sYaixD$ zTpm4;QJh^zB9=S<&<#u}rL|ZV?(VhoV78`v{Dsxz=4I=(LYY%zVIgHfIxjuHt@uKV zANHCBT$Wg3>-c2++!h ze|J+Bf`kv($42?RtXMmHZn?)~cjBZXGt*1uP&kQ$f_6EjuImN5+sQX`)! zA&_Wb@|G7PTA_^xU;ro7xW^^(q{V1)?WAUz+@xMbg**KZgl p$*)H5cX>Gyl63S(ar|fB#$QG765Ki18?XQX002ovPDHLkV1oV~;Ise$ diff --git a/graphics/pokemon/sentret/icon.png b/graphics/pokemon/sentret/icon.png index 9a8040833beebacffdd0943654e2254839a3a85f..e95d75ccd41ee47c49b7d235e0371f4c8ced1ed8 100644 GIT binary patch delta 261 zcmV+g0s8*H0?-1G7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S&PhZ;R7i>Kl)(xE zAq+$nA%;Cn{{L^A*sZ-dku4P3(p=}ENp^ju{9c)D@;V5P*->p`oVa5z0>xlF_nWPE z#ldojp$EYLL3hAZbxjyNf;s@K=k%yG9fjo~Cas;s8t@tB8KeslCp;FmC?}+MVRHuI zn?jPutY8hyOY)y&#_|hdS9F5WVy#FBtMMt30P28dfW#8BCS#GCA$JewUuS)SVTM3b z1r334!)yeCD*{>H@DvEq!v%pbU00000 LNkvXXu0mjfdvI-t delta 245 zcmVA>07zqRe0001qplF?uEGc4!kgYsuxBq_J%Nn{jnccCa;afY#@4600000NkvXXu0mjfCZuI_ diff --git a/graphics/pokemon/slowking/icon.png b/graphics/pokemon/slowking/icon.png index c4d5bdbe7aaea3f343ee08fd1519be6600424d68..8527e8982de133801ba193d3ff892fafabecbecf 100644 GIT binary patch delta 328 zcmV-O0k{5<1Cj%f7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S5J^NqR7i>KluHi6 zFbqT+=d*Am&;4)9*rk9}r-&UAxN5qX7spPT*|uK{#B-q+2;VgVn<^$bz*s_c|C%l%0zCm@?8r9}{?_HS%tBoYk zh)k}N>*6V#z{pE~lmSly)UhB21#o1cNDn1Caxe7zqRe0001qplF?uE`Kpum=@#jSH2|ojR40+w|$~kbXYK{<5sK zqccnw(-DF5n;`(~_3^bK_ZQo8z90=rQyV_R2quQlO+uDjIp_15M*wxrXNCagG$wzB zY-PR_mkE7`T)7Gv1|fU12!mh3kez%G#zjBi zVGu^7L=Tmr+M!*KLCI4 Z$0yk{#oQP6d}ROt002ovPDHLkV1hQBl#~Df diff --git a/graphics/pokemon/steelix/icon.png b/graphics/pokemon/steelix/icon.png index 2cceec69a9d8d9c226c867af9b9af1f441ef2c62..defe78d7d6f53947f5eb7f13cd17b0a6bfac85e1 100644 GIT binary patch delta 409 zcmV;K0cQTX1LFgb7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SVM#C;w=qAF#4iw)=X`r-mU=&fOA6}lVHY;8d$mN$i2xm%MO zVZgP}xy+b`e~{}&Y=wX1VWMsk8e$(;fw6VCvr?x$^hCllKYHy99m@qX^Q<11Oyq z&$E|5p;W1Uk<}@&A8)kuVE@WWwBd00Aa_BFqI4Ya7DoneKNY z%mt7sKqgEE$dWJ_AWy<1fIJEF4v=@kh#(0di7JAibA5FmR4+eHvSyt1Gyi{%wQ`B2>Nzu?0!&{7-D_kEce00000NkvXXu0mjf DU8c7* delta 368 zcmV-$0gwLU1G)o{7zqRe0001qplF?uE9^;yXB#>jIBIST(8$+H_@0MO4fx0Lj_l%MKI_?1y-U02sMGVYmsG5M@ z#A=q7EnmTeQsq4I%0|*^K>nm)3)Th0s>;MOgIg?dcOGPVW@IPb0-702MV zqsjS3Tp-OaB{@@oE!Sn(OWWl0T#-zeYKkG8Y8(U}GIW7)t9Z+n#(!bAOv4$PDAQaa zPp4J7Jd$Ute15?`j+=5&L%>MhkAZ}o!+*v17{%}a O0000Cl-;s} zFbITe2seia@Bg-4h$cjB@6Xguwasq$$;kJ5{oG}^&L59DGlyiY$%DgK3mYVB`~F}s zu5OT~vbWY9IaAlG?E+nJ+mS8BaXkV+k$%H>KMgRmMgWnJTMLWL{fdw4u`aFKBpaY_ zsy#B2i>l;K%ymD12H%Q$%t}cucnQ1_9+8;XE2g9q>85{Fy$ZuWJZaI37NP>3xYioF z=KSQl;NaMaK+tQ=5e!vOoCAU>)mm`NA$lKGUH21512u;@jshw|N1@)>#eqJ(6a?X8 z-L3}zZ0d zNc?O;Dq$N7#oofq5d|b8wfZonn2mBVItIG5 zEm*}5F%3r_Z~*K*oS=)d7bi^mZuKRP!iXj>ZWE~r?^)(IYkzth(}lr(&~82M&e3!h z+-aTUCE%+cxOqtO;c;g_klh;Ck{dr5K{&qkqcQ_Duj$8MueAr>gBia^00000NkvXX Hu0mjf6lB@9 diff --git a/graphics/pokemon/typhlosion/icon.png b/graphics/pokemon/typhlosion/icon.png index b69680648cb83e16a1c3ab8fb2803ec140136840..e5e5ea51c1b5912ac01717d9c2470cfc44b1e6c1 100644 GIT binary patch delta 372 zcmV-)0gL{*1HJ>07#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SJV``BR7i>Cl-sU^ zFbGA>oSIZx*#G~x2dJ8{rJ9-7A^OCUi`um;zZrPSXC*MD;DAH3$8#3FV*r5U%vl*3 znrL0D8j0BQLk+B!c7`%(nV~?kyi-h>hx}rhEp7Ks3hQnZ9lIgVg~S~OPMV;I4z z%im^zE|F6TDj>gqibpO|BB0hPQjX{dSQ@CC6Fy2`0`QO69!Egz+}=RR@Qb5Ww=NhK zaX=?IW=Juy)!Lv^Q_w`$02*OSMML;1&TMx-ufLJ|zZ;YHaBcSEar*}FAc#W_Q$c6~ ztoKY1i)C0q6Tk#QcJRmz(w&T5Aff^xH^{ZfyFiGEnY$)a7lCL#JpZRan#M-p5Quwj z7~x$YZjkS5P3HDsN=yfTm*P>8!FtBRqxY6uSQUadD$!R}kGP^Th6#Z!w zoij`$Zk=IjP!L+DIt08IO6*)s!H6d+-P#nG;H1PXOKc+;Vp-xQd2$_aghM=??>v7% zJi9&@!j_bX713C^w&m#Jm`H2~K0_Z7-P|rbkasU+BDO%@S2LnDEo~Pr;FD-c6pX+C z;-v?W8<4-n9>}%%$70}9-lai#>;SA-N|M14IpRvL+JlB_)|os|cNHA{gMjW)7Z6@l z7xfncRxDaz`uGt7-e>AEeYLNvg?U?6*-kXu{SoGB^PrlVMwq!N53$BQ{TeSfiSrj1`dSbT9{R9+eVmKRKb>n zFbI=Zz{B|9|NnLqb$3QfJC{Am(O?K^n`L>bugsjoX0rysz{ecGH6n)`sip#s80kn; zBS)&14HRHajxkjS8YCM@q^8Iq$Wj?-$VML|EUeO*sgOrpOp77ZuE!9OEbyi&<_;SI zD*6rzFyCITw)?Sv;}_c@D>wI-<9ASy0j6JVPv5r9v4W^zAy^+*T+>mC4!{~%HgZm}71b1;@+#}CZ*V)zNtolZLc-E$On+{I#r@q&d zAK&r=&uW?<$E#V_JwK$-naqcEJ*Q~l1xU~QATE{6cYXjw-rvRD_P_j~+GUa-Mxe?M z`^^vJSeYN#hw;_=|9toXOF$K=1B64K00000NkvXXu0mjf D{d}i1 delta 384 zcmV-`0e}9l1Ih!C7zqRe0001qplF?uE;f5fRlg>OqB<#?V*-&hdp*lg9~$D3^cZ z7|74-ZDo`jDxmYbJ@-7EwGTklyln+C3%U;gyTiMlJ(H_?m%G#((^1KIFZfHtjCSlu z!x(Wc5pS#=$Dp_&(^EVm3kt=Q?!G!El6?qRq(WwG_8%5K9Fs5=05v3vS0^6}z*kts zUBYdtHliUQ_c~Xn2q`Z+jAE00000j(SW From 01a12d81c78df92f38fba3b721b1e969cafa7526 Mon Sep 17 00:00:00 2001 From: Jaizu Date: Sat, 1 Apr 2023 07:48:53 +0200 Subject: [PATCH 231/428] Fix gen 3 icons --- graphics/pokemon/absol/icon.png | Bin 359 -> 382 bytes graphics/pokemon/aggron/icon.png | Bin 450 -> 489 bytes graphics/pokemon/altaria/icon.png | Bin 432 -> 417 bytes graphics/pokemon/armaldo/icon.png | Bin 398 -> 424 bytes graphics/pokemon/beldum/icon.png | Bin 256 -> 277 bytes graphics/pokemon/cacturne/icon.png | Bin 307 -> 328 bytes graphics/pokemon/castform/icon.png | Bin 242 -> 255 bytes graphics/pokemon/chimecho/icon.png | Bin 282 -> 271 bytes graphics/pokemon/combusken/icon.png | Bin 367 -> 371 bytes graphics/pokemon/exploud/icon.png | Bin 411 -> 421 bytes graphics/pokemon/flygon/icon.png | Bin 432 -> 451 bytes graphics/pokemon/groudon/icon.png | Bin 414 -> 437 bytes graphics/pokemon/huntail/icon.png | Bin 378 -> 391 bytes graphics/pokemon/lairon/icon.png | Bin 377 -> 392 bytes graphics/pokemon/latias/icon.png | Bin 360 -> 368 bytes graphics/pokemon/latios/icon.png | Bin 371 -> 379 bytes graphics/pokemon/lileep/icon.png | Bin 353 -> 371 bytes graphics/pokemon/manectric/icon.png | Bin 309 -> 339 bytes graphics/pokemon/mawile/icon.png | Bin 424 -> 410 bytes graphics/pokemon/medicham/icon.png | Bin 320 -> 336 bytes graphics/pokemon/metang/icon.png | Bin 420 -> 416 bytes graphics/pokemon/milotic/icon.png | Bin 495 -> 478 bytes graphics/pokemon/pelipper/icon.png | Bin 391 -> 406 bytes graphics/pokemon/salamence/icon.png | Bin 410 -> 420 bytes graphics/pokemon/seviper/icon.png | Bin 375 -> 397 bytes graphics/pokemon/sharpedo/icon.png | Bin 353 -> 366 bytes graphics/pokemon/shiftry/icon.png | Bin 438 -> 459 bytes graphics/pokemon/slakoth/icon.png | Bin 349 -> 364 bytes graphics/pokemon/solrock/icon.png | Bin 293 -> 307 bytes graphics/pokemon/swablu/icon.png | Bin 320 -> 336 bytes graphics/pokemon/swalot/icon.png | Bin 293 -> 311 bytes graphics/pokemon/tropius/icon.png | Bin 426 -> 442 bytes graphics/pokemon/wailord/icon.png | Bin 362 -> 360 bytes graphics/pokemon/wynaut/icon.png | Bin 397 -> 353 bytes graphics/pokemon/zangoose/icon.png | Bin 430 -> 412 bytes 35 files changed, 0 insertions(+), 0 deletions(-) diff --git a/graphics/pokemon/absol/icon.png b/graphics/pokemon/absol/icon.png index 681d98d1d9ee147ce1156b4d82d37364ec483805..d58d208a7bd322beb9e549793c41994940842ec9 100644 GIT binary patch delta 308 zcmV-40n7g90{#M!7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S{7FPXR7i>Kl+6yq zFbIPikb1=L|F*+nKTV+NZJV^Ehpw`R32DD=`?UpNEw{EZP`=Vr$ypzI@WjzzfT}(% zQ$?6j_9ZA2-JsgKJ=s?`yH$G1WzkppqgPNw1fT{a#-O!$`Op~&%3oDck z=DIE|CXx&rW!GJQle$9eQhFIqELmVN2jQvES!6s6{<|=^(skhwQR)5PQM`IR%qV!T z5m9x3*h|sf!PR=9g#osFwd?Tzn%4UPG8{_=$V89?kf~$>NI{qpAm@evNFqo9kdYwY z2#}HwM}TlQ#pnG3NGC{fcz1xD^WhGV1s@o{<^w*$ha0LBC>14yeVn=g0000V>>3`TteE9!otdJce! z_rq;^?{@YHW27!|lk(598ddd*BJBx!%sfP^O5yY6pK% zlvp|t*piy7t#8CTlXxZ50yzOl1!%0H6{MakbWAn%Er6Rrv>sY+M?S$$v0gqW5LXxr zr$6&g>i5FrM5-{LX{QQPGAzP0gR(FqIE2BiIhKUk^6AeMrt>2SBh8N_40e8;!VG?# j!i;{1PJZB1{rCnvMYHcGBn(Rc000R9NkvXXu0mjfvp0f2 diff --git a/graphics/pokemon/aggron/icon.png b/graphics/pokemon/aggron/icon.png index 5410a384f66a11a93a0fd673bf3011fba516e237..3eaa0605429f37a3e12194d559d8ac7ee5835fff 100644 GIT binary patch delta 415 zcmV;Q0bu^Z1L*^h7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SXGugsR7i>Klv|d= zAPhreGyUm@z5m^gBtnV_(=!VQr_Wf(kC1yD&l)Q;_13T437TiNhM+foZ50-XS>y7Z z!iOS~in}Bc){D73?s<~d5so6<>D7vY+nB)2U2(VBqKDn==Y8L&=BZ&13K(%H)R|oZT$MrzA{0rR;%p%Mc21;qgOVVaRxQv8irL^S z2Zho+I1W@z@j7leST-a~R)T+ZoF)NVZ2TQol5k$S$}DL^TntcJ$QXBw+oPmFAJ(@r zjyub76ay%NM-u}2FkG7$=amxUiP@drQSRnMtzO^a&-!zIJpj4f{|%7$43L>1CqUja zKo){f@h*Zw5MD#rA&l`zO$7N62C+ErM=>B_^h|}FgwdawL5d3?oiO46zkC1y002ov JPDHLkV1jOLw6_2N delta 376 zcmV-;0f+wS1HuE47zqRe0001qplF?uERdMw}RrVNVne(V?3#wEc>xdv`?3`+m@$R!4SQ$%+m>zN}AX@!JXJ=v;sA zvzEtkJ){LI<^y0IbaPCU0NSqToqK(B;7PpiwrV~ zv%qb((!YQaL9~NWxCwgjF#_;f^d5+h7%x1~4n}+km`FD;;zP0cDCrS|`1k|niH{#P W=JXOj^Ebr+0000Kl)fJb400rkd(7 zG!qfdw_z+|UdSXgSQF2WTcS(TnLp6+QhIP)-fGoh5Uqg)dR6R@x`AkMcmg7{2qo|k zIfz`~aie3Y0s|?3Vyr)isx3PCHh4IeB39jiB-m%97eAw8*>k=$cN>H{)_UR@nGBW(COcehfe=y zJUr-6#>0vJcs!iwPw;=zALD-7zqRe0001qplF?uEWrrY`=u z!5GaUgX%&hF&w6s+KqVAI!Yd07Y}79tBwGOW9*0!00*^zyq2J)}3HWcclE24mO#lD@07*qoM6N<$ Eg89y=U;qFB diff --git a/graphics/pokemon/armaldo/icon.png b/graphics/pokemon/armaldo/icon.png index 5dba6557dfd99f42185a3475fa7890203035ed36..1277dbbbe0eeeafab82fbcdfe199d901c8640db0 100644 GIT binary patch delta 350 zcmV-k0iphm1E>R#7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SCP_p=R7i>Kl+A9# zKnR5GEJ(XPFz^4ioxzdX{mJG~_0(|4A&gulN0e4?Y!2ESZI7;z_0RGIESmr5EeU^_G9S-$&Z><95S}V|$wtA1Nd1eW?vD&f( zIM1j+HATx3n9T5h-&Xm&`mh8&X)B${bP>_Q)XKcuDRREr_!}@(DSkF!N4hd?!a^RX z=nb$NABq~RoNuG{Bjn_)sy?}~Q6SAj=EBpyuU`5+Jur+ns^nJ{UMi?5=4JbZZa>aX z{4)M6K&JB_0WzQe2#^JfdVq}QfAj#sc>WVWhV!2Qf;rDU6iVAm wVTl_clR|qFA8vqb`QUp#2q1et;1Brl1-P9W1cPm{Qvd(}07*qoM6N<$g1*?Gz5oCK delta 324 zcmV-K0lWUF1C9fb7zqRe0001qplF?uE-%O;WdsO5AO$if7^~hNfs=Qf${)#)g33Np6V)#t66`i zgk843YlD|D{bNf&=i#^&JzKf+-@4~-Ed}T zUH-g|kEzlRa>gP6N}%*r5fBK+_r@!*tdu5g3DvB+^=ckyZq>i5-v*O72$;k{z$6X= zCUF?Ruy9CVgoA)#BLgMo1Pxcx5YRB?Pa6xpTrGkz6u~4P9DUetK5*e9@WO}wfsZdY WW7TG6iTiE<0000KlQ9m( zFbG4-!W8WL-?k>opF)_cuXu{;7elCco~sXvQtQVUqa!FktRZMpL{mmB2oQ3zvjrZ3 z*2_f++Cg}5QYsfI30SYPO4NytOUXkCa8!2^1D)?fPJLQ zNorPl0V{tZoCD7(CYyhFVEg*Z;16jeKqWU;LmE^Olf~H~;_u07*qoM6N<$ Ef>!xdTmS$7 delta 181 zcmV;m080Or0)PUL7zqRe0001qplF?uE=>YOI(%^ymxAQo1gAZwq#?zUm|+8&$ww2??D3q)FG*eV@Tp-A3^JMgme)* zHQ>rc_PHP)Sg3>LmeYZ0JwaVw>?&hEGqyR1GjIpK_`rTny;UFxNgmdh%>pKUPjeyZ ji<`^*s{Zfr!FPBAu?m|lP^s{a00000NkvXXu0mjf>!47O diff --git a/graphics/pokemon/cacturne/icon.png b/graphics/pokemon/cacturne/icon.png index fd1bb1d5fef7ac0963c678a67a2ebc54143c0411..8dd74b291de3ba24b86975590a9f2f23ee92edb2 100644 GIT binary patch delta 253 zcmV}c87#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S#z{m$R7i>KlsgW? zFbqRI$U`%T_rGmLxkV8`l&36djBI?M^>H}HEf03O^#she#73Xq5r75YH37=httR5` zkQN|_@inmQq;@gqN2=@wl(0_afK*>NRHI-U?ng5Tu!K&J%DmY{E{d~&7$x=TlcywD zAySn@)IbB5M3~H64^VG3TA&sS(N!3hhq%FQSu~SEmeD;+aNF&>&0Rm|36MVt5NrY@ z=hOuV>=YnXm!|+x|NqQUod-Hm;y+onf5tn+1dD33UsWl7KC*{<u+a{q QMgRZ+07*qoM6N<$f>IqpjQ{`u diff --git a/graphics/pokemon/chimecho/icon.png b/graphics/pokemon/chimecho/icon.png index f5480bc356735faec3595cb18fc51559907b11b3..d4d6b644855a35c3824edb6c48602090f8d41492 100644 GIT binary patch delta 196 zcmV;#06YJh0*?Za7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SjY&j7R7i>Kl)(zX zAPhs5*o)Nm|NnOF*x1EZ*l7a;ddaia2rXsnjZ`)F8?}rupE5!rRzVOE3P40`4+v#k z;whmZ_k2ZwS0@Jd0O0CPa5v4HFrrrOV+6j($fhyB;6`*Ac6R;(QsN9N{Vps3CoG2S y9dIH{!ihM^hgd};u}EU;BiaMxPXlC6kU$4pDht($A3YfW0000KltB`M zFbG8xC9uoC|7}Z1#;PH-n|9GDI&OFpQ0Ardn*kuoCWr(8MDr5VfUwxTBEV88$SYB( zN^k;-M)Z1*Wdr3cfbtq3&FdI0fEHDOT>+X2R3e>ExL6qn*ct)uO;Vi*Z0(5W95nq7 z99^~ogK@^>VyD!9fy{GO=3-syM6}-lFxwz{X*<|A2T-Cfgc4JMPN1!nZJm?PxpfX% zZsiyZHAj2hzFMC8yH|?y|FHNAL_00008NkvXXu0mjf5^H?A delta 293 zcmV+=0owla0`CHl7zqRe0001qplF?uEzKCKi@yupE17~#QN-SjlOSOqf)4L zW$j~7T34x>YtqCCh5>aZ0GTTI20SV7hIAVN<_<4gD_v=~I@H-ZjG>3sCI{?Ez=D7M zFvjvd#~WG$39yl>YnlSbo=8HVM|`0)Xc8JZDpK{$go00000NkvXXu0mjfeCUL8 diff --git a/graphics/pokemon/exploud/icon.png b/graphics/pokemon/exploud/icon.png index f803aecaba4454021e3dd855ead8ce245332fbf3..3cb142dde2afcdf4c9b5a440a7e9c5c73e685f72 100644 GIT binary patch delta 347 zcmV-h0i^z$1Em9y7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SBS}O-R7i>KR9%n5 zAPk#?BNZg@|NplahkgL-`gBisOSM+3UB?8H*X!>E$!C1a`GG;UoE{j=+#Jsz)6nQ} z-uOX;t(jTiw*+o51%h-(IB^5J<%z}v^?MVxWMb(!V6x(v>|Uw36G{n@oV+5Ap9EhZ z^nGC`Y?&@I6Z|!QiGTqL2L{~q&Lf3ailX1RLbq+APzDitb`kVnk5+4?mkBM_J1IaC zRUvgW9Q7I`c0z-KqrzTRClrt734(xSM_jo?$N+6t2oa<@5*7i5uToR7o?00000NkvXXu0mjfDwmpC diff --git a/graphics/pokemon/flygon/icon.png b/graphics/pokemon/flygon/icon.png index 10788b2253f8662bd11c6dcecee0d9b9806a1e9b..f0c4e165ad0abe88a8650002f43c6e025399f79a 100644 GIT binary patch delta 377 zcmV-<0fzpt1H%K57#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SK}keGR7i>KltGq+ zFbG6_uR&%5b^qHAkf;Q8cC%|-blUnMh*I13jfVhmte#ae3=!x1eAfrS0R-0zNMcBV+0)lDUMQl{d-_u!uk~4vUJUL{pVZp{EzdXpFOH#n z>vT?KHIVKwIT+PIdMeLQ3?x7N)nQN##N}PEI!rYXNK77B7Kf<@l6nBE!(0Y(0*l36 z1~T+`rggec14$r!qD}8%AmI<`BizUPG!V_=?!ac#KvK?i%TNr&r-%MD5T>tz^!k4R XSMD5N-7zqRe0001qplF?uEArWj zjxb-0DJx4XCECr9C3YQc>j)~7{oTG??qsp;D`Z&MevF-nG}v8I@n8rN|1m%$V3zQf zfmsRihJjgd5uSk|?UO|j7|_+22x3xTMpaEr5Ca46!AJx}V4}fgAObTgWtK%pU`BPY zLoy%$LzjaAxpX!I(-^xMF98^`Fv!2a4EO*{@l?S40)J=pXj+Z*SO5S307*qoM6N<$ Ef?vO(Z2$lO diff --git a/graphics/pokemon/groudon/icon.png b/graphics/pokemon/groudon/icon.png index 1c237537b6e80268033616117c154b238987cf41..69326145ca14df7079d5b2fd4884aca7ccb0b988 100644 GIT binary patch delta 363 zcmV-x0hIop1GNK?7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SGf6~2R7i>KRKa$G zFbpI1>fG%A|JzC;9V-NS*n8Ur=N2i7?0}Z#uB}Sz0`FR%2w8Q)sSqJ5a!#p%gV6hg zG8_~xiSRslsnB{r!_(alPFBL>D?3rE4!08qF6d#^h>Ng|2GTU(fU1cA`rBx#S@V{_ zNJzBfBqY~hu$l;e#Z7vN)T-g3wU$7Mb6!SI!IB$K4jHP@NGfO?;;>`lED@3|Kuwq6 zytx>*;;`wo$fH(8jT{Qb3$TGnCSFdj@;c8ROjfW1oRdUiVyqyR#W<3A^E z{2U;jNq@6v*XBB+IQ{;p^P1oZ13qm3;D?*8@Vl<+4v^(a{{p0bA0TxI5axpdgpMZx zqQFpqaOlQgbQd5o0^~a%b^*eCP=IXtun!PZfPBaYCCFdr!xM;9Bz2R}+P(k)002ov JPDHLkV1nCoryu|T delta 340 zcmV-a0jvJC1D*qr7zqRe0001qplF?uEbkfsv7$QeD~6?eTbQ#mCOrl!t2v}KKf?0I0vt?q}Eng8%0trih4-u4zYiI z8y&;l!^sax&jmHjoFm}ihtN#9>$)xqZaA1E>6JUem8BIV4ea1`6H3WoD<-YAjR|wO zC+t4kl3DR&jp^je53ef_0BRR2H$7<>;5R$y?7z+l>d2^@h@$f^|>7lB#$Sb-sP mIWK%*1tyc}Eg$$vK0W}U7&xn8e>2|z0000T7#0Wv0000?P=%ZT0004VQb$4nuFf3kks(BXNQv!KL9&BT28dR{ZW1v>UT(KvT^4W-Z7AZ50s~YL%E!_ZJFc3U5h@z^3!7)FrhM6te}3#2@xKGfpBraE>NtD=0000< KMNUMnLSTaK%ZDle delta 299 zcmV+`0o4A71Ns7x7zqRe0001qplF?uE<}Ggjn$H|Zo?oDhIxZ~n{=t#hp_}pgNI0F zvE+x#;DxxGw<|*=cRGwzDJ*el-2{yL0#87IEp}$O}%C2_N>n zqcMA%Nq6>CW;ZFr_0+3ui(_yRneZ#BhOH|&_KynI)4BjASD@h&kB{;I28;dO5`jsM x2uwO70+UiU0w(+c297f@w0zZ!!>|`M4&SJl>^qAptQ7zN002ovPDHLkV1o5zi-Z6G diff --git a/graphics/pokemon/lairon/icon.png b/graphics/pokemon/lairon/icon.png index 24bea9dfdc19b75eda89cf7eab1160c64b737ec0..27cb6edaa3edc97fb4879a499c624b6cf7e6129d 100644 GIT binary patch delta 318 zcmV-E0m1(H0*C{U7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S21!IgR7i>KRLc&- zAPk$6?y^Jt|9?9N_5#9oowOmLR@gCw);^v7<68&W=MJPhbJn;3Hw)9O7{ZML;W-xu zX#zxWhhx>CmPIhh2o`(RP<`UoFcQqSL7)*LEV}>#gorPM$P;L(<06C}13>~=Zz(Sv z=F=A0TiaNLv0g=g_Ndk4u-rflai%Wv2nWxWr*n$Um4GIkt?JsA52p4JL8+s-=YH3% ziXOiG+z;YA{6BtWeEJW1EbIfMxu4qrxw(HEAP@KN0_4U0Wq=IsuL5LnKZ^hv+>ata z2KS=~kjeeXPUir5y1&OmEN$G}j}{A|D<-?n_=Xd7A6``3Bh!OOm QNdN!<07*qoM6N<$f=n5bbN~PV delta 303 zcmV+~0nq-41Nj1w7zqRe0001qplF?uEb^l5JmR}Xx60onfO0`LNm7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S?ny*JR7i>Kl)(9w3EuziffQF4vdSG^rJ51cgN3OYucK6u8 z&3#a?&QvzY#W`PA<(qLS*ynORomYKW|B8Rdr}6Iuv-oevP)y_B{~%`Z&*@ypKXEs> sZ}G4BH=Yc;_>cIox#E9V{XYIrI?xmpZJVDo00000NkvWtM6N<$g2Wh&pa1{> delta 286 zcmV+(0pb4e0_Xye7zqRe0001qplF?uE_YWyJR_H+o z1^pC5AeJnfIgYMU7ivPAZI2+iA`dQD%N*bJd3CSnin>)p_G5l zP0U;`O=+Zov%Ja}%0NN2)lK)gt>;v)ck6^HA}*O06@^7wLdH6UfR z+*RfFId*-IOo~FXa4Kz9!vvVAP6qoM>mwcPjX(zrybe|vuLA)!)d6HL%%}rM`~OY{ kP|OPBbQojuzdF1Cj&rAgQhtX!000UA07*qoM6N<$f}(DB?*IS* diff --git a/graphics/pokemon/latios/icon.png b/graphics/pokemon/latios/icon.png index 95590eb52d691e35fa7589f62be39556394a1423..d63fb4710ea47b6b753866887a8244a9edbe6765 100644 GIT binary patch delta 305 zcmV-10nYyO0{a4x7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S`AI}UR7i>KRLc&7 zKnOID7)ToC|NpkIt6jPeo1VN#^q@1sfXr^&6MqMAfyGU{WPq@N*8~t5z}yj9NvN`o zxSY?hm*_xfxL4Zd;00000NkvXXu0mjf DxTcXS delta 297 zcmV+^0oMNe0`mfp7zqRe0001qplF?uEjok>or|C2$rgY&TmZ< zTwqD9-QJIv<~ej_0ajIZ(&tsSKpfA#ai1xEKmLG&j|2x_5pnS52@W2Zh=X7UOvGUr v_lN@<|EMDl=V96&2QWHL!Qo*4Ar2KE6b-iBKvW{~00000NkvXXu0mjfO^$(g diff --git a/graphics/pokemon/lileep/icon.png b/graphics/pokemon/lileep/icon.png index 0f3132ed4324b7ba57a130578d50298868ff7684..034453bf99a581d3296221cf8b69cebb7edf5866 100644 GIT binary patch delta 297 zcmV+^0oMNE0`mfp7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S@kvBMR7i>Kl)(}#3EuI^rHxrRYZzribB}T?tmVJKm`1! z@01M;gY8D7_i0dnr{l0=ILmTfvbSIYDMdJr=#JKyvCzE^6`rjF0pZ|d&JU}2>bL4} zm^uPvcX@AsgqL>&NN{RQr_1-pe0Tu`)fMJ^$>K)<00008NkvXXu0mjfpyGl~ delta 279 zcmV+y0qFko0^tIX7zqRe0001qplF?uE`OdZu6fZ>@sswQBn`58>Wq(Qu(ypSfPKu~_FKv2F6 d0r)B(FB)9Ax(fW5l>h($07*qoM6LruV1h=-ev<$I diff --git a/graphics/pokemon/manectric/icon.png b/graphics/pokemon/manectric/icon.png index 5379bbafa1a5816567134eeee8a9cec1564b2420..5d7f3e95085295a66da64031dfa1d0b694f7661b 100644 GIT binary patch delta 264 zcmV+j0r&p30@DJJ7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S(Md!>R7i>Kl(7!O zAPhvK23H;|?*IR`XCP4p4lEry;4GEyaW*#faqJiZSm+{i0+MC`XfOjHS<;mw;z0ER zU;#mZdL<&D88kpg0!0-T0+t&AuBti!fvWZd0ezq9IdY;!-&EJne3~bM8MN;yn`jKy zsY+e=^@N$KpQmnT-qT?$K)FaR1`>{qiF0lSA;HpJZYjcXRH9rm94o8vEAq!{=+kXc zl0O*mAlS>v!{k8{i)Xod*gJj`dx7i)@(t7lg2%B{0`*@U=-$r%+z%g^%M?*AMLQz^ O0000C^u&>rVA)GOy))-*aC@&KR6%mY zFbE6D#dti{|9@LBb~2&hnI76+mc49NG7+q$2&K^3$+uCQM}xwp(+M~!M!-e#rCe1&#{j8FYfw-d^rsg= z^iKt&l<>y2^vqy?1T%~sUD_1mc!*=-g+0UYHgOq~-|razf-O&nlrcJWr*JI}g0l|l zT0GCX59zVFSiR#7zqRe0001qplF?uEB&9- zQCDt%19VM5dkN4m5LT{dlf>!RDk+DK0j8OoZTMLY-P&D48G949DSIIgOedP_RW98 z1iFeVh{%J__pA|!=8tH7ha%eI;wpF`4f4}K;s%awZb^9 z;LO~5#qDZ}KgRlR7o^p`Q%k}=EOY?Lpfu*ZTl&F2S0k2Z7+f&SwcwoUIdU5!gL)H5 zw%IDU-_^(1v~~6al)Rv6o)D&DzE(<)hWbwtMlg81Ni2*NDF^WABiUTZ)_x#Zn*FF? w2;77bDfI~)y&eiO`jLgXuECGRjDF$AH{YYAwF{lytpET307*qoM6N<$f=#`tF#rGn diff --git a/graphics/pokemon/medicham/icon.png b/graphics/pokemon/medicham/icon.png index 9e4bbc27cd9c616db92cf7c00ad1f3646cc1e121..79883928382f12697a7bf1a61a362e78390a600c 100644 GIT binary patch delta 261 zcmV+g0s8*H0?-1G7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S&PhZ;R7i>Kl(7!O zFbG5=2n-(J|Npj!ld7o#v|TDy4HDBmgADd9%b$k(3w?~9@S!c>*6NN1)&P(ZWeFUY zNfdzVEFfhG06JwY31UUCmR+2g&6&zs1;9*X<+Oc-Uf(j(YaK@;nK$wb7zKhJfgqC> zZbH0@Z?{R?2(2+>ZLqnnDibKTA*w63Athj{hJ8r0aEt-#=$?!(^{DPlGJ;c;E8d99 zKz_hL=AUQ`WOtC=KvKXC29iQg29kfThk@h{b1;y?VZLS{ANs=${ZJ6B-nDU}00000 LNkvXXu0mjf*uiay delta 245 zcmVA>07zqRe0001qplF?uExpBhc?P z=!sN>cSN!%R79?BCGf8HG85+I+LJtjS!XrCbjIphOk^L>0$aHsY_Q1YmANLiOOavm znF2mdmW-JwbDlb4aSfC!r-vyvlq=9|eXi#Zmr}nFgX(NZEh1nz20ya?R+#&*Xkj4X vK^Os!4`Bovg~3=DVbCayH0U#7-uB}L1*nB&s4Sd$00000NkvXXu0mjf^SEfF diff --git a/graphics/pokemon/metang/icon.png b/graphics/pokemon/metang/icon.png index 3916b65310dcfb481570e48999f2224376698704..8d27afff4f3f024b87a3046a24b7bb1bce7105d5 100644 GIT binary patch delta 342 zcmV-c0jd6^1E2$t7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S9!W$&R7i>KlfjOI zFbqWNMB7KnKjbMNTc6V*-r%-k&X6GaGtxYvd_PC!?gqn`~ zLabTaMqv{3M{5j-i&t<3;mLqv59%1~NX#X8=_LXAR&)5W@49d#=BL8~uB#zw}P^m)@!V(mT~Z^v?7(f9bvIe@0gQN4+ogpN}%? ozv?~df1&rN|E1oC{{KzyABol-SrbkFW&i*H07*qoM6N<$g7YM$bN~PV delta 346 zcmV-g0j2(+1Ed3x7zqRe0001qplF?uEV%HdKV9EmD*Z7r63`W=k<0RB}W%};j(0gY+?AUN?x6r$SC z7@S2alrWJyahVpW5Um01ro6c&@zw~cGE>qk5?|&kkUW!0GGCP&@Jp}urBbR6mmYt- zRXhr>T9ucVw*{QKA&NiVWgR}z(nA=XnyYTU1KWG1W*$srL5uk|D{oSf=~nd{fSzl8 zW?i2cfIVl7FirL^Mk0cdiQ`fLM!_tAag$pCoZ{93FkI{_fC&D2{i*}GI#iAhSh+e# zTL-vvTLKl-rJj zFbqVInu}zmp8x;b`Vt^c!b7FiKGmhr%7bl&XjSA}y6C?{9 zh%=f2MK6-D8fmBiGpM+kI;AL58(k8Qx!RMcLi;DTbSP0h{C!9p9V0%Zg^sDgJS`mb zbSZ!-mSy8M6xgEEF2@q+Ci~Ad|BHW$zXwRf!wQfM9wI<AoAf0Kzsl$;~}c)5IO_^0000(S)peRr|#CVy}>fS;Qr(1W9$!CWZ>3o zFbrB$ZxtN7wDWf*jBVP-9FPDz=}_=dc$a#NjWVHUUUWPi46jyO?V#`8s1rzg(&&FJ zUhI^FJE@+nWAJ`FiexiN8Bt(?mwgu6dmHhL7c>mW=F?8)+-12;UE6Tr4ocb)ZLIB3 z6dRy1pi%wK8h+pd?YLUKm)68kJ{r25I*qbX4hluCaF!AU6M3OBGz z58Dp{=sfdbl^Y&32})-^h7Gx1Pni$h=YZtGhgl-5i4SuNG7=xF6j${Hsk;&%=YBR~ Q4FCWD07*qoM6N<$g1a}gkpKVy diff --git a/graphics/pokemon/pelipper/icon.png b/graphics/pokemon/pelipper/icon.png index 43ae7c2760806e5b7a62b62e721aa0c4937f5644..49debae7177426b50540d81b8ad7e7846d70283b 100644 GIT binary patch delta 332 zcmV-S0ki&x1C|4j7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S6iGxuR7i>KRLc&- zFbL~HI?+r0|9?9IeFTzb(zHoC)IIcI*M$T;O*ei56pZM3o^!rb7@bnOQivcY5?ou9 z&j-8+2$Ti}%tBvSl=hZ|8KgzTUIAVV{8R<`PLyUnq$e96S~X5!Wl(z-;KEB8B9JnW zI5;fWtJFHt8d!yYya}keF>r-PY$7U(MSG=KPeCHNw&o{g5RAt7X;13nLsZBFU{aZWmKr~?GZZf0Q1a0E!1$}n}R*aO7oIus-8b_59NX7~iC z0wifZ1Udvr+J%hCvX8m?*gO~Q9eMp6Hz`u%7#xX5nh3wVy*d(KzrQ+r0Z~= ehrFh5ZvPAKY!sn-xZkG$0000b^l5JmR{nIbnZ2e8Cw zYox@z8(gPbrQ1WSv|=mT<%TIOTN~jf6Kog+E|NN#?tk%N{QVAxKQ=&A>&MWIr4e+~ zR)!X+s>n-&RRmsVQ5pUsL=ho!W=14FLpSH#6%o@raC4UE9Z|M9@p(EMiFp&Sr}KYe z6izl73(;~n7AL;cJ9jt1P;7wN=2_;|{ASG9=fyu(V>;@b(S5k%OY671`$#l`9&#p? z(vP(PJN<9wXJCLBm~`sVQ3Qs%=)jD$0`sJYR5PGjfeE#9snZ4wB9|J05!kX$z{vDS z21eDu6h;IF_rP4Rsev)F*#ToX!N4gPpT9Q(V@+8=(B7ASe+349X_e<2#XPQ#u5eU@ P00000NkvXXu0mjfISGvt diff --git a/graphics/pokemon/salamence/icon.png b/graphics/pokemon/salamence/icon.png index 16cdf981f4926a7fcc1de42ea6db07a4eefafc98..74b4ae776abf62bd8932e146f73a39b7d084fc95 100644 GIT binary patch delta 346 zcmV-g0j2($1Ed3x7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SB1uF+R7i>Kl+mt( zFbqRkD@6&4;{X5K>$FhHCN^DZZ^I7*;j=Ueo0sL*{{-sN$`7F$^h!b-kw`eOQfCC( z2o?!|xtHyhsQ3Wwq~@N8OQ7*5V^f1yn$w*46+W(d{KSzm)zy zNkrckpIMn&#J&>FyAxMGL2SUaP_4cNu8ZILitYe82M9hn1_(X`$dM0IfUK*Oo(<=G sIR2WY^Z>cc2i|E5koWlz@w@r(2X0O#d0zv)&;S4c07*qoM6N<$f`03ka{vGU delta 336 zcmV-W0k8g~1DXSn7zqRe0001qplF?uER|oE3z?SfUCpzb|E~QS)-E{SM09sCrNkK zShVyzQ*9HXRDurOK%noErB62D);DY(LfO513JAJ})433{Ug|9OVEsM6v}E{3`-tM4 zp**n^tKzZCWVc$mEc|^+5HNh{@@YH-2L1o0rX);07KX>dct1K}qHD3E_ruRnT%@~! iAHdp<{dhf0&W|54S4oiKltFI9 zAPhxgb%U|wfB)OgHxmX7$yBP;MXPak@xvGk-f?{5Hv{+%sFwuLSEB9&lfroZhin9j zidYAN$N;qPGw}gr0xfU70D)Wrs`iCyisNh)k_(7gt>y}%5>zJO1l(OUdSR!9q|HE$ z5vZyQG|tK@?ipZz)65f)HVqyp_t1(ke@3id2UVl5hC~rhJDf$>tDS&j%O9^illulw zpdB^xdVL+xMnRz5T^Ft`z`N@-ZpMIW0VR()(GCVliq z^6Q`U(e$wTVb(_pV)4VQ4^`RyF!bT*&p-KL(#PqK)el1=AGdz!`ndN))5kyd!vjOD V7RotH21Wn?002ovPDHLkV1oG}lLG(% delta 301 zcmV+|0n+}B1NQ=u7zqRe0001qplF?uEZt~5I|9GFq$@z)<@a% zQAO@RD=j@KH~(?0IMFKRa2^nbbJ#f~F9nC>v3`7lr zDKDM>|J$8H$VM(@lifGB8e^QXr6ru>cxV6{U3>#1e`nYy$k}x;!KOl9W`MPiVvy-1 zC;_6TGbRoiRNgUjXp$IHq^hbjLt<2!k8!0)F(pf`iyGiZOF*5kW3MQ`CF;m_OW!Nb zP%MfIf>{-uB{YM5m(>}j1zJJ~HY%Ih*rrY5vY=_PUpOhViiXvO+B$%+)Z3OihGyFs z{_$Bn8X(vKq}28RVg?@|Ja0Zg@Oyw@)b9Z4nw#L#BSAWVOle#Ja`^x;eRcjD kVb*-8gz*4U*LGjv3*r$J8c63G*#H0l07*qoM6N<$f+je4CjbBd delta 273 zcmV+s0q*|p0^tIX7zqRe0001qplF?uE<}Ggjm?rV3c^4TMRS9>Lk^(ef~8%+0~oNj z$Vn8wO}2F#b2mXTO$-UjZnY+mWU~XJl{(#g=I{JjUJ!h>EbB=!L1%9S+LugFY(gtG zVY~@jl2M0I5R>U#0nTKOXv;;T^EO(dxH%z?n;tI8Jz68h=n;(-t`b8O0(Pl97|4B2 zp&5`qw03)HAr@J7gdIHfEXTgNl7fKwS9S`aLkj zfoc3cFr+vzh67_i2BzOL0E13(!1Sgb7&&-4VB9$^FdGI;GMV~;2i diff --git a/graphics/pokemon/shiftry/icon.png b/graphics/pokemon/shiftry/icon.png index 14b4bdab6ab77fef9955db78c56ac63f9cbb6908..3d2be13a6852587ce145da424e68055b05aea63d 100644 GIT binary patch delta 385 zcmV-{0e=3r1Iq)D7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SNl8ROR7i>KRMC#Z zAPidq1nnjH|GzyO+6}tG-Rnt zmmrJ?GY`F?95^?qp{g^Z%R@gUH{x=^bME^m5m#586_D`Qf8#Il?+xU@mj?3M|K31gj_KVP2u5vdAk5zyNE?Km zfpmqPf%F;UIratubTW`ngW=c?2119~8A#3?@UfYGHIO`gvet;Jf!zATU?An*Bi;tG fynDYG$OZZVIAI$m;pI8u00000NkvXXu0mjf{S~w| delta 364 zcmV-y0h9jA1GWQ@7zqRe0001qplF?uEbsT(VRgu+abAsWOD|^kDTxB6tf{+!i#?} z$(LdQ3tfrHG^lqLAJklu38*{9&d@MP$D+>+Rm^U5)v~Zd9J>9!=Zx`9 zPm-42qCxtb9)TZ7{z3eOFk~al)L~d9j6MHG7(DsH&}<`&J)19#&DaQIpMEP$!<;Y{ z%)%Ha3}WC5lNIj#)GWf}ZhGs-BFxHPbXFR7i>KR6z>E zFbpdV$dH5e|KH9|mo{;dj$HXahYj@?Sz_Tc|O@}3rv8wnu}@DOiS=HPJ6FVso?v<>;#%o1*L_CIjp}6><+aA z;vhDJAZJ%}Te(VqWMi2!N_W@TRyswtYpC*Er)?!R0m``bISrr2OShv%{=tJU5PqkT z9)I+X$7TO@KD_O}&WCFMRX&{dU*tn$|7kw7_MhiNV}E!&#C+)NKZ%Fl{+Mm8vHvt4 og8e7)u!Zk6iH9iv!2b|0;ztt7x(>cD00000NkvXXu0mh|f~g6I9smFU delta 274 zcmV+t0qy?m0^I_T7zqRe0001qplF?uE5m z?lPU-ZEizB!KIKWD8fic;|{NhXV4@iq5^k$`i_61*EHWXpsQ!$B}vQ_8;CC|2HGe( z#=ODw=r$u0W&#-CJcWeB!9gEnV3eMD?~ydH&1i4Z46bN^kZz^N8F@k$OJt%KI$nO* z>&){wp6&-yMQZcT=`e|%)NWgL`aV3<_gLDiAB4Al)(;NoQU~*cVhz%)!@`e0(_!I< znhsL?@zkOA!*!_qa2+Z?Tn8M=8E_qhLuunWSe;NJvkscLD-qWL(r%>#wCm4~Yw)T0 Y2M{cy3}ioYx&QzG07*qoM6N<$f^*Y+ng9R* diff --git a/graphics/pokemon/solrock/icon.png b/graphics/pokemon/solrock/icon.png index 4a0410cb55d9afd00e0f985a84ea7bedf5bcdfd3..07a416c283246b82975a468c69a7bf27924f185a 100644 GIT binary patch delta 232 zcmVKlQ|N_ zFbG4#3`>XZf7{5o`yuu(Q&=qznZ;b!Q7i1?wjp2(0u|R+01QD@7C;dd2O4YuqXfKG z0+ld{KzaQJD=|u9`Y>QJ{lh#WNi>~c_)}>{qHSav7!}esF>3dKBVES0x>r~ME!=&S z)YX}cr6*^J=OeR64-zi@v>`PKN%qq(bnc+`VX7TbeUv>GE1%z?AHxK;e{u&L{i}2S ipE>_>IOqS(^S=SoY7gW9A5hi+0000<^TXR;HGLlNEI+_TH)F}r5fj2+>eCJyR_-ut;kL@0qLV~d90>lty2^1;- z3Jff5;5I0S%14!3g4MZ;&Xc2{p&OmZFECbaG&j$_u{MJ_*ThKU`{|%JLY*_Vm#0RT z3(Cn(*Fag3##k%r&0;2)?~yG4pK0`w=htA-GlF~A3BGm_=9tJ06w0G U<5S@u{Qv*}07*qoM6N<$g8B+wZ2$lO diff --git a/graphics/pokemon/swablu/icon.png b/graphics/pokemon/swablu/icon.png index c1aa25e996421e92170246dfeb4833486e3a8b7e..46be1f4033f1585999dd75f3f8680e96850c0187 100644 GIT binary patch delta 261 zcmV+g0s8*H0?-1G7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S&PhZ;R7i>KlsgW? zFbqQ-aZvz+y8mq}scmW?mNRt85U!;4G3?jcqdUs%!dJCr%4}D&-WPRD*{vu+G7{x+ zLWJH#S)6wt@cunVICo+Cs_%s9xeR3!0~8+M#E&7}hk6$lV>H9IK|6u>MzaKVb>AgL z!pEdQ>V!v(QA4U^z_HQF|6co}M}O*yAMNwwRs>1HtN@aPSv5++6dvQP*8mBE3;>z> zG5};wm;oSj!VCbZ2=fC-vE%`enhpVw;0LPj9RNuNm5H49c7%BWb(IU{H_d7_00000 LNkvXXu0mjfDlc%V delta 245 zcmVA>07zqRe0001qplF?uE!LbD6z zmI_i|uq10AD%e*DW^s_T&?Q6R#0d7TlZ%7kjeq_mH+(|;_^5FeWG9dX*rDg8d`A+< zBven2V-?WSg3)L1`{h|#L2kWA_pV$wQ+@Kc<&qqro-YGk^ssGXlSnchEr1E6lC5FZ zu&0+WfuTY9EAT)j@t=zQ8O6qYD@!$P_R{(5`@? vf(n>Go-JS)k8CRdT2UAQ8n&y{UljBJz%pYq8hqHC00000NkvXXu0mjf>i1_Y diff --git a/graphics/pokemon/swalot/icon.png b/graphics/pokemon/swalot/icon.png index 3611b27feea1fd75ad4cee5839fa44005d0ed6f9..09f7162d2a3399f4659bcc50c7a391cc9861267a 100644 GIT binary patch delta 236 zcmVKl+6mn zAPj_sp4^1w{oi);qp%RiUKY9w&LM}+r%79#){Y*MnzlBZFcNkkH$Ecn0Oc6rLWFj+ ziTMQp?ex)N4R{OcfY2_v!yu?^p-SXK8p$kFfo6cqT8a5mcW_sN@G6DScp5}hDNSsM z1hTHDNXHiYz{Q_SZ{lm=A9rJWVvhbt=kkB!^5<7VfZw})I*fRj>44*5rUQ mW;)<_h>%&1>Br?a^WhD)br{LC*g|>$0000 zWsg`8g?ZrXv!SQt}Q;1h;~UNfzOe$Wizo~mK4+TTX0 z0ql1nAFh91SFu4TTHxTU2YmEU8@exk*JGO?@z8@+n3{O#fpZf-q^fhOYrpm54L*O+ Ur#U^KBLDyZ07*qoM6N<$g31nD*8l(j diff --git a/graphics/pokemon/tropius/icon.png b/graphics/pokemon/tropius/icon.png index 647767ca3de1b28329db67c794779eed76fb908e..9e7b61b531a138941fd2398b1c0ca04525a639f0 100644 GIT binary patch delta 368 zcmV-$0gwKw1G)o{7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SI7vi7R7i>Kl)(90L*ht8_>FW z#UEe>REQcuMr`l7XTlP zn76$sksT_z>nqDn!AYzd=%~X-dP}_fc>ZhqJIw4bX)G{LJIpEGJIvWYP7X5}$k|~Q z2GTps+CZAa+!=^F%$JOI&;$QaX26E{S_JKdF>}#OD^oJ*vb|9??h;h;Y O0000DxTHBye|DwxrDK%cA@r}MG@#wavCvGOGtqKl*1*h}==}rzKiEAj!%qKUx7|;6Tlzz}YwJG| jhW^SSQ-8gS|E~WFL{uA(?SW=X00000NkvXXu0mjf7nXzQ delta 288 zcmV+*0pI@U0_p;g7zqRe0001qplF?uEt)S8lfX6cx1}ce#E4_}jbf_mPX(Pe)j1gWNtXFi+c0C$OET+ z6sAAjce?G}gCU(*0Muz7H2A>yI8@I5H4e`05QoNf{t}0+`>=I?SlkcXxgX+SAD+Zv m87;)&W$lXM;3oY?9KK-K^x!41Ghhq=0000*Q%z2WKn$H5^a7usw{u}) zxEG1ufqkKI^R1}Ftw9(ztUA<^2y}4iM!Oi&m;Sy!LikgrG4}zx91*PVGawcerG)AF8G|PP(%YF;4gbP^%qew_7|*BU zw>6*i!Jg1HBpIjP7n;!PW66&nfF#$4*saIv004We+Gz(=a3REMD`Ha;%pys4!BB)- zQ9Q{u8dz?6EQ{2+KL9>n?D)&*)@Lv>eH;<%sG13;xePI7au_%!zwdPA2st6Y(8m|~ WLf$zUu8wX10000V71Dpep7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S8c9S!R7i>Kl)-Am zFbqU(39_KT=>Pw=BPCgOWxJuYr?R?*d6peHd98iw=jC^~+z?N|=b+00xZ4WoVB)sO zn|D>^auxgOE2s1km@5!2S;cJR;-B3qT_FFpF5?q2!!G z9MLrT2V2JKTx7d{WbS&G4f24^sI=+i_tbnxI`Xdr`CxmfY7=+vpzri1iZ_v4t5Kec*i zPm`a3Mqo5RpD+k|Dsj#L=~W(31aK(x-orrc52QMuS1>_$Ya%qGxoh(P4U26`HTkOit> zU{zeapy9?l9VvwX)nrng)0s#epxvJT$)YY8-9Z*WaUZ5mdc`2@$QAoSeb6#TCnm`D z9Qk5E;lJVt5En2Jtrf=O4;OwSSeQ`74=l`>Eq)+j=GBjzFuN~5Heu-MM{>KNB50lr zu Date: Sat, 1 Apr 2023 08:02:14 +0200 Subject: [PATCH 232/428] Fix gen 4 icons --- graphics/pokemon/arceus/icon.png | Bin 397 -> 423 bytes graphics/pokemon/azelf/icon.png | Bin 429 -> 425 bytes graphics/pokemon/chatot/icon.png | Bin 384 -> 337 bytes graphics/pokemon/cherrim/icon.png | Bin 266 -> 280 bytes graphics/pokemon/cresselia/icon.png | Bin 474 -> 482 bytes graphics/pokemon/darkrai/icon.png | Bin 474 -> 481 bytes graphics/pokemon/dialga/icon.png | Bin 450 -> 480 bytes graphics/pokemon/drifblim/icon.png | Bin 389 -> 381 bytes graphics/pokemon/empoleon/icon.png | Bin 368 -> 384 bytes graphics/pokemon/froslass/icon.png | Bin 366 -> 376 bytes graphics/pokemon/gallade/icon.png | Bin 360 -> 378 bytes graphics/pokemon/giratina/icon.png | Bin 442 -> 465 bytes graphics/pokemon/gliscor/icon.png | Bin 458 -> 492 bytes graphics/pokemon/infernape/icon.png | Bin 510 -> 518 bytes graphics/pokemon/leafeon/icon.png | Bin 399 -> 408 bytes graphics/pokemon/luxray/icon.png | Bin 449 -> 462 bytes graphics/pokemon/manaphy/icon.png | Bin 351 -> 373 bytes graphics/pokemon/mesprit/icon.png | Bin 455 -> 441 bytes graphics/pokemon/mismagius/icon.png | Bin 379 -> 399 bytes graphics/pokemon/monferno/icon.png | Bin 435 -> 446 bytes graphics/pokemon/mothim/icon.png | Bin 425 -> 435 bytes graphics/pokemon/palkia/icon.png | Bin 437 -> 461 bytes graphics/pokemon/phione/icon.png | Bin 332 -> 345 bytes graphics/pokemon/probopass/icon.png | Bin 399 -> 408 bytes graphics/pokemon/rotom/icon.png | Bin 387 -> 395 bytes graphics/pokemon/staraptor/icon.png | Bin 446 -> 432 bytes graphics/pokemon/staravia/icon.png | Bin 388 -> 381 bytes graphics/pokemon/wormadam/icon.png | Bin 374 -> 374 bytes graphics/pokemon/wormadam/sandy_cloak/icon.png | Bin 423 -> 385 bytes graphics/pokemon/wormadam/trash_cloak/icon.png | Bin 406 -> 370 bytes 30 files changed, 0 insertions(+), 0 deletions(-) diff --git a/graphics/pokemon/arceus/icon.png b/graphics/pokemon/arceus/icon.png index 155bfc35bdb7bea870e2a37805ea174d55befe79..6141c35e8c926a862374753d37273d70b7660e5a 100644 GIT binary patch delta 349 zcmV-j0iynm1E&L!7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SB}qgKlu>WP zFbISTEDsy_U-0N}Z)B(Y<+q;PO z07stg68r=pnCJdD=|@8@4KQ?+A4`|qbAOK=m0l|~0|qM*e&{*^`PDS_$8ljrY}I6X zZ05{EKLzk70C&}Y2(twI3=sBi?D*N>kC%@PV@l9-mx#IogT*wkU=-k--9p4+%Shpp zkdUGRttwX!00h~x23qyH5mZT92CGh#6XnpFgHA+H0-TRS_y>-_Kqd=JNQm~^2=nLw zz28sNZO%_l~ zIg-Ep?33+}v0p6GcXPZ2 zfGcleM~#aK7|lpv<$;K>Fg^%SU_0zd-RB9fVCY4N1(N+qW3L)*Y51g7k#qsr^?-jh zuM&9=Qp7D*8a8U#x3b`6D~|h1ruYcr>dbkWmhv?AZb@;JlIM{-OehqJoD1$wOcdfg zJLbzN62@6s%4e4_CP+^64|NShvl^rQM!k&*Sj>#j?OMLOB@M-ahC|*=U}u+W0tWz6 zx1Xzv{tf_pQ2nJaeR;yTj!qc+VvH~O!cgbQjW9`<_z%J~cfuSzKL%mEOKyJR#~0)_ VR7i>Kl)-KT zF$hF0IbGoug8%>94kpbOgI7KDQZ?kZGaihCUTgoa6m=^TYU^-$Z+OZyHij>K7x2>E zkX)BO9h!2K&hgCwf1Foo^dlG!64qciPMcsLXAlBT82Cz=Um$-xx;ezIBz*7{qVssy zM@Il6)B?`X#7=g9=*)1KUzx)w_Rxdn+1ch)US?GlAr^lq5+tmSX5Wa_-ytO+*>tgk zf`HtC1y`Wyutv#XePNkrr3mm_`X%QK)&GtR{A?O2b?;)YEc?AtnyY!U+x7~#tN*Sa z)t>^$jlMz50+6(_D?k!rR)8eL6adMHSpbp{69Li+#4G?l$%qL6sS$Glq(n>rNQIaM xAks2}B0#Duya2K%hyz3|VM7pcPX8`JJ^@~tAMfcw(W3wW002ovPDHLkV1k;=mDB(L delta 355 zcmV-p0i6D+1FZv)7zqRe0001qplF?uEPtw^d_O2eUD#fcWO8wyz+0}@CS62dr zT5kmog54P|g5Mg#3@9dkTP%PQJ)p0n@MyXu+@n5W!%v1558zop9~$k@e2|YrPq%*u ztt}5=bu zMp{>9DwxAi4xd>Q>3bR7CKE6{j#Y|c8SCH$c8B<{@7I8-43`;Dgb0kv8E0S=TS-C$ z#`E3ayR;-= zRtgtj#IFB?f&k3yHUz0Tklt4zv7oJT1}{~;z8_>x40>!3e)RwV002ovPDHLkV1l88 Bl%4

    ua1JMGI7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&^R0MAK8K~zYI?Uca| zgdhw=g$gkwO#lCHx9ys^K*8I_gFSGWM>`74w!P&S-|2zZ2#2sn6cA*tBM5>8paU3l zf^9cX0NKkn-ghY?a5Wzov#$W3_+THV1H?A0*GmSnE+8QWmz;};#H4_TLx&%Lh@$fq zT;%uI2omUU0M6NFEXF8=1DJ8squbzQVu*-1rohG(b*ZPl*19-r^^x{;bLDQXlod+QcpLx# delta 311 zcmV-70m%N*0)PXM7zqRe0001qplF?uE@l08nuFc5`(gONEvEJ7b7 z+$SfXqo<=tk#lUvEmF{MB39a1TBX?+8^j82;UPlVtj9e_Q=d<~RvZcuE1YQItryz?AMnT4S2?>)^O6fJX6ILp|CK*2gnAzI08E+OvNE z&fcz5=ry*TtH%pCc0g$_KoMgo@tkh{el?5&(002K$9~?wiCgC`506R)d-ZQ3KZQ(2 zNM~gJO(Q@wT0U7Y450~=iU}YNUL`K1fUI5@_{lFt1PwSp3zxD}x9{N^=4CLoz59Th zHq0rocVBDY6VDQx*nyvb;igXPz!4*5HKv=;bya2lI2?Y{AK$>%ob>NwqtO5W002ov JPDHLkV1ispi*5h_ diff --git a/graphics/pokemon/cherrim/icon.png b/graphics/pokemon/cherrim/icon.png index 145074d7a3b26085ad1fb7b7b06110a2c24805b2..6915d775b4e5d11b6dae57ad782bb3b2f6695dd7 100644 GIT binary patch delta 205 zcmV;;05boI0+<4j7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SmPtfGR7i>Kl(7oH zFbG651r6By|G%x8c8j{SLm;=lhb9Qu+R1N0#()Ni4UEwtu>f>8VnK9;k60^UWeP=t zEmM$!&mp`rOaRE9z>xqZQbUEnAdgPT1qy_UH&8L4;C6}2ar6gQ{1%)Teds++Tk|Vb&InGXe3Nu}&B(DvBSw3+!ScJ!^6($`mW9f8z=t4;^#JhBIhEHGe9fk<;e#LUnx zDmt10+NTx^25(w+vxAxY2!IWs+v+#Fg9GScBGHo>_LG$!xfFYmvmUVF)|2a=d{HY) t|5Pz;5C#asJZgS3$O{Afv@rPGj~AJwqb$^$SEB#`002ovPDHLkV1jgjQI`M! diff --git a/graphics/pokemon/cresselia/icon.png b/graphics/pokemon/cresselia/icon.png index 76b9b36390deb598deed97a45d4f3f6cf7323b23..8189ad7d1658b3fbf8f4af24065a026a71f8d583 100644 GIT binary patch delta 408 zcmV;J0cZZ&1L6aa7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SU`a$lR7i>CltFI9 zAPhw#6{N^P{`bFazwH?U4w_(Arcm@z1m?3Zm`%)&roxiy;IIS z4&8Sr<~CZGqY@Aj1w=5#Imx%`1r&HnObJ*Lw3ZU-{Y=LcQL)_!>$#n4I*V~H-p0j+ zNSpHOaSKGMr-$@k$L|{E<{;sC;(fmbvKN(0 z+$#%#*p_7`B0(3(!jtjp2Z5~ha0=vB4=;iINDtqgYarZ28dVtp0000F34eNq_wzx>UoEQFfUm)39b(rZ zXZ9RIs|Y9-O3j87>Y>lX_W^hSm;i;&G6W%@&!9KVx9FM)+&gQS(*!3#D||5w!=`^p zXPEl!-R|`asAYV^DH7M`G?25~ZNTPQGPCt?Q9=!$rF^?P3B`C$44qMf5?}e-iBZA# zag-BqLa9B-Lp`=BK&aNTQJysloj|MauiH@~@#&w?7iy~7ce$2yk){p63?7jUw9lLmN-ZP_Grt#-gmKWVUf!~)^ZEgAs27=3D&r3T0000O@O>Hq)R1)Nb7opaVyQpvm)P_%Ph-#UO-0^}gLAD|Qn4jhA*l5-G%y&wiy zxUUemfLm#$2?p({Rnf4EE`c$=bKpP6pXaQ1AfGh#XQnY1RU5jWC#3$;9e4lgw84#C|I5^FM zE+EKhQ#PGDhi#h$AQK+ie1h#nh?0*pIXJ6e+36*~sPT9KTN+ac+wlS>n=uQ3Wb=P9 zgjQD|Krsu4b#&}`%ENH~vF_sFSChc)@$=F*IN)^k?m*Xf?;DWm?-#+J7w>8A!?(z; z>sNF2{I$RCpBS?sbbWh#W@3tViIxJdyH4l65s~!q=q{ZWA>LxE2Lv_njm!ll_|lOmch)i~+I) zCN-o017lNXV3J$`WA+zdv{5EtEmXjaP8DEi%DXKvW@ZJ9Dm5^%0Ao0er5P})C@^vA uj{`=mfMEk>;XiW?jM6|PH4%S!S&Uzw9Zc+v_Zjy90000KR6$Y$ zF$`;L=fc7I|8J3;v`sewP7DLX&USi`BHMCSx7+V}0KN4)!Ux6Fx~2yGObgpyC21twu>6WN2X z1g!dXadK(XBU}}Kx(H&JHCz3VId39Jf(;SB`|&WTW?&^CB1owMlfx!$%ov?u{bens z-w6Pc6(Ph2k4uUEuxhwRLTDG!xs>2$;$Asy; z2O6I>YSa^h{xrxfkz?zDC)@Ob45J(_=aWVoCc(pFCy;@4p-o%-gtN}n#(r%v@8hO@ zb?d6VF*fZ#_WTFP4+hAy$zy=jMV@0G1B74UJz{RB0EtV290FwfdY1sv*MGejuK{w% zhc!UX`LG1Y2l=oD$T=S>Kt9a}diF&=;2ZMc9mO{uWGhh#bpQYW07*qoM6N<$f-v&5 ALI3~& delta 376 zcmV-;0f+wJ1HuE47zqRe0001qplF?uEn)g(4d#^V&s-S-XObEOErQd znBvq{8fiOag>2c$$|IoJa8rQ5UbTdyOS#P^i@COibQqRr}R)I9wxXbMbDu%`t$e?z)VFK zz##C?!1(d}0?hr~4`9+QBQQ1h>6Q_g2Okj_zu;p61}*p)CSaC)m{&eLdF8|ZfRAtG WmIue5Afs{s0000VqCXHXO9=0aF*rY3W%$|On?mJjFe^sQm&Owh-TFwJOU;FwDf>6@g5*GQ86t6&}a-((G?ift(5gvGu_^=jqf5DHcQaAdv+IYAHMn@laW!C$$+|Bn~?feR6+y z#$Am&+-(5uxbzSb=E05tXU07)m*Xv6s~XjIIS&Zm6?b#H!%p`Aylxme^Vxf)V0>KL?H63Boaa;r2tOf|Kj{BVK~3M4#MQj!zZ&KltB)J zFbGA}LQ*#T``>mxwUdmM>Sk6(7B0#YD4Mq{4-DMp^_qZO0)VQ@oPe-^UX*|cS^-QL zh;v5AY|tnm0n7$%1%!aAr^Mc&I-hKlAng(aDl53vGr<{nN3*I-C;7HUEhwsao^4%Y zQ7xY|@R*L9W)H-FGRC}_@!a-w#E8Vjuvsl-^_@5`16u%Vyo?E8)k-63N(8VKF99@S zoI-eB)~FB!cRp?duS-i{d~AG)DXXfb^60jl6LiuRtCk5R3vD^E8L~uRs!i zFb)Dq+6)3o{csS-KtK)x$qaH7NNNy#{eg)=g6V$1|NQV30mB6vY7rdxlmGw#07*qo IM6N<$f=#Z1H~;_u delta 294 zcmV+>0one51MmWn7zqRe0001qplF?uEX7is5*1-0w4~|O! z7S#d_16E6*${zC2z!m4U@HSMO*TTD1jJyDjEK36F=sG0Rrw$y=r)jcNaR2(DQ>%YW zC8B9kf*8xTnPTbK%GvLU0s(F&}CP@u;jpe7vv`51hyw~O$4BHQ4s5|E@Z^` zMshmMCjL+cmkkTn-v>y3C+X)OYCVrI@*_+D(6)RRhU3eM%);<5VKP5vVS++%n1z|5 sQ!)#qDa-~wPb^xeVddtB{K=0i0=g39+dMu*JOBUy07*qoM6N<$g4eBv%>V!Z diff --git a/graphics/pokemon/froslass/icon.png b/graphics/pokemon/froslass/icon.png index dfaec88ceb5d4edcb9e5f6db4d0447f26f6adea3..2869fb8de14d36f3c07b30086270477dfffd0a59 100644 GIT binary patch delta 302 zcmV+}0nz^M0{8-u7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S_DMuRR7i>Kl)Dnc zFbD(_ZlaOK68Haq8<3nw0Z!7SGKCv4*QCD#{pRPyt1d#I81WjEHJ^gXeG+0z*p%e9 z#e@yXq0p_A7!V787XwNRP-J-Dt||zsq&dVf(Cq)G3fR;A??IQ@#l#5yVpeEflZW z&Kw<=SwVa?y8qYgyD*l(uP}B8O`KluHi7 zAPfZqm?gaX-?sh$QNSddN?kPGw2G&Wd7^V1|5pGWfEe!)1{iq)ZU|Hb!j1qDcZqg@ z_K9-d5s-eCA{Vd$3iwAAp!I8V5f}i3#N`kM0Eq#cFwa2{prqJ-j(i1BK^c-$)CtH} zfR`j_@rQh!j%)pY1BK+VAoGB#jZ%umFc0V}GeL=?MyBj$k%%+|Z2ED8POx170000`jm^j%2o`$PfIN`vEhI8 zYch-n3vAqD?bX7i@d5h!0WbhI`wZ)}GuGMY6027bTn@2B)J}0%$^*3ppq^YPcAqCL z@CIOj->W|m<~cJ86JB?wQ5Xw-di}dF7Ly-%3WG58^dmm|APiN)k5L#Ib`YkY3Bx2N kx`I2+;sEi;__-f9UK5X$tJV2A000UA07*qoM6N<$f?}9_Hvj+t diff --git a/graphics/pokemon/giratina/icon.png b/graphics/pokemon/giratina/icon.png index 7a6ba19e98762afcf46a6b8ae1802e24f70539b8..235ea4721e6cb91426e9ccfd9fe5c6f68d5ad7ab 100644 GIT binary patch delta 391 zcmV;20eJqp1JMJJ7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SPf0{UR7i>KR6%lt zFbs=B%+dP)Z)+)GOTt1=?ewsQSr{Zawv$yUpST8qXE*{kG=581cp1D2Z!Ys_@7;^_FcNl%)89fXzyV8_TKeGRj)QAJ}5=FO%Z z&$X?wRBBV)JWt4UVuB-7rbaPqS0zI6ol%#d6OzAt zToVv)5@sem7p6r%fGHR9+M3uhp8$Y!5#Mca&09wRM`S{}Pv>lO2zVOKl8e_LuBv~c zbASx=j0CV1IrsW<8UWQ894ws~q9g9qWh`>Q;cSW00L7&ouRTx|Z3y0I59Rc*(8Q(+ ze(PyBy>KH~ z%G7lpQK}jtH@39P5G9k++V+0Xap7FQ`w{Kl)-Mq zAPhvKu2?l#!vFubof(G!2}FD9X?-9l9t^hOZQIvAH}^U${3$udm4tpMJg0?30{Duh zWKNCCI==)8k)+{h#XCU@5oVUN`4|BU^WNOW+7?{r27&FCEZkaOj{ybz6c~^B-c9Rq z%;bjvUiiyT#%zCo{~FgTHyad)^P+^oT5dKhKxTyL0Wu@Z2#`Br@(7R%VI}~%5=PboWF$;H ze-}UyYC@PGIThf8mpfsO=Z{i|4>!UnMwClm7t^lyh5$ZW@Hr&@04EbBm9c}kDgXcg N07*qoM6N;tV1n$4w^9HA delta 384 zcmV-`0e}AN1Ih!C7zqRe0001qplF?uEX4v|FEde9o^ny@YU<_Wf1A-n1Q(*fc1ajoXQ>!RL zJtmF9*-e2RaM2~BfMdH~-^=ch5qS=fy$=sVFB01d(hcMs`T=uSaB+gdDCycGMzWmN z)=sU$Z@k#wk6SQR&=$-j=nhP}0b^``g3;g>j6UcV%p_<5Q-da`fia69%wSeQ4UAa@ zH8887v4L3xS-dqci=Y+EB1kXMz|4Y_gO}YguYzzPgmWCOf|Ns+!etSpC3+O)TW}Qv ey#(%ByNqw9#ZY^}4PSQv0000KmEDen zAPj}&r&PV@dH=WF7El2@yUAWplZnZkL$QT^ZreA!z+ZX+n&*0sB2>391xz$Ks#tX< z*40ch>kO0ZM_leaqd^K$2&$7fx*AfTkU~&hz2)_WW(X;%MVRGXfI3nS;lt|%N=mwM z)%Uv*m<;7S&te9DM*D}EF&N6J8BR;_=uat{O?8m&(G!Dt*aDQTPt2Ntvb7jfBariP z=n@u@Oj#YXzTwc&ghDY!(Owo_4&rF7fh3|Vg7NkHJ8n%+IVW9gXX*8-l$fGb4?VcI z0}>-*D;}AghNE67tyLe#zWcXRm)ctF_+U_}9u_`dZ|63Df8!r9+;g|1H$Q*{4{del zhl7WvUi|RKA2UDR<9`Fh@bJ8kwgn)j4_km%fGqiS z{0D##Ry@?{e*jYXFyjGY?XLjod{|1Xr>p?E_~4KK$OnJ?A3pfwKk-4w|2^I#A9j40 n|IUXEA3tv#oe#gndYgX$5f&M4y+&I900000NkvXXu0mjf2u{p8 delta 437 zcmV;m0ZRUc1pWh%7zqRe0001qplF?uE&ARgQv`dv!HVu#^Dwc>v- z-$LO66|Z{4lHJK4p6Au?cXQ}pP;WU=0Yn?Pd+9G91%ZI+G@#G)sm=+JY@`GDNjLpV zm7Q|^3p8cGyhTHREo^-=WAUnS-IKPkd^*EL?bL6@_TXGqv^{UGQts|f;Pvb(foSeZ zll1t6;h^gR+uAz|$-3jJ2ZUfK@^OEuvC!y3m6|j f_I&KM{Wl+9M-thOfd7V^xT(w#0*Z7TI;swfMO^#>q(MoKjdx{;U<0ZP zUK{=BB`G52b03OK3tiLQn}X3G6sz8Mx8WrYfwCOV)BIFGPmh*2d{TX_^DO!s?-{QG zNV7BoBuUW-dVusFa1W5w(J4Tqo{Qjhqz0mQBV;&+z- gnV*gX$Vd3_2k<=?h`9dUCjbBd07*qoM6N<$g74IqQ2+n{ delta 325 zcmV-L0lNN}1CIlc7#Rcu0001qplF={000DMK}|sb0I`n?{9y%=F+YC_Nkl(?T$iiV>=_xpW!CT-kc-OE!a-SK9yMj|^gFL%jm zEAlBKqjzcwFJ4ZT1b*;`?(pVPi+#wEzN*R0tthCPWLCc@XqwYy=jNfcl`V2s{Ezw- zF#XmE7*OAwfEms`00ZM}4h-k<{t+1BNK67|#clyioEU+zYXc!;OJHC>fYBK+SLNdy XFg(Wv>jNQY00000NkvXXu0mjfcrT6a diff --git a/graphics/pokemon/luxray/icon.png b/graphics/pokemon/luxray/icon.png index 20d02d897a13ad9b7658faddba1f47e2ef7309a7..9514dbc9b21280086cb805e914a149405341a8c2 100644 GIT binary patch delta 383 zcmV-_0f7F&1I`1G7#0Wv0000?P=%ZT0004VQb$4nuFf3kks(BXNQv!~%dW#93`Bzj z5s@s<|Nm|M0O9~`cXv@;7L^(ggKh9Rj-Ok=mw5UtK>8q%2zVBR6Twh}#JGb%i2{ZS z)B?53?3vgBtcfs( zR+28URYg?`>wdgBu9dA(Y(gxrXVeO+iPnc9j%K087tu8K1;)9Lx z{$_x{GLF+f0Yt~w0PzkWmaF)OwoCv?ZH&Y82Y?JdJn#?z()sY5kpYmK5A$_4fV}5} dZ2e(Aya3^m9QO*T^Edzi002ovPDHLkV1k#Nt=|9u delta 370 zcmV-&0ge971Hl837zqRe0001qplF?uE<}Ggjm46&PQ)+_K=TKdca(e$8)BkNC)oIw zo9N2M&vamjbl;E#bwG_XoODR17&~cmy%Q6|k)f)e65DZ}G1pss5rew`=^PM*1pw(M z0$M5|?+ch1kwEf7cUwSCh@4RV_uaFAL!ZzhY8rUx$iSOyK$oI|Cl=64jK`h)5oCWk zSAg?(M2SoRS;4U3C~1>ckrdVsn;a}txr6NZ^j|v+7ApXZkCW5V(bQTm!@ZmeHfEm6 z6^`Cx!VyEB>Re!aMVCD?EOX)@g+Fen&1>39f^Yx606Cha;roRE=;{}6K3}1B+Opy%SxE)%SxEy%UT##Urxd>xExl(aFlMe!$p`J zFjgIAVN$?AMTbQgi>~TWg~{s26iZ`881;j>K9>r^>PMS~2y^ZSk5~8O2eKl*tam zAP_@y2$3U=@c;j94WtW!nMl1v;q%dPK4GPVH(5!qRSm!NEua-JvTn`s8l zyO5Tx8O%0xku5#HmKrDDnqG;)Pp8DWK^;B?fm$G!h_m1-A8CbOqI6)wxZW|d4#(1- zhV2d?^@ia2?OZZ{wo=DSP*ZH$1LoZ|v8S?Va1>M*&=0iC)gO23Z^SEj;1V9~<@*8F zHUVC^6#fK%wnh9o03sP?i4TBGr|1E~u|y9L4sV=2K!(Fm(;grL!rGGy0fIL`<~LRu xlj?1_9J2}#c+XpWC;$-wF8C1sGrwTN17*Y%Njv8>bpQYg002ovPDHLkV1hm~fT#cf delta 277 zcmV+w0qXws0^b6V7zqRe0001qplF?uEg=(8Z8m!$nEE%p&w#wT+XybR%Y!|H+?8CNIl=eqr2bHi<**oY97NB2FEl zS^&mdhkh1QJ4P+tv(9P+5qa#_2sN|O>6X1TsZoe+ME5+%b+3)N=qYcN0aV9a-J5@y zab=zG=5~R88I9p=D`=-ItR!tPagcOAARYPhMO$3_2QKglE@U$DV`A*wkjy>wVh63I zL#W@GCornW0u05>0t`g}@B$_>M`i&gGRGglmKl);X} zFbG5=MT?M)nE(IV9qcBJ3F)z?(kh3}cuY z$>D$^>C#(h9wq?|dhM77m7U8)!qFO_qHZ|#Fi7j7X4B!?Xs}lb4H#RfsYWxyL4(*U zguXa~Zu+2nv=@pyQ(I7fbC z*tNdR!F+sqfAx*}EfHg z@FBz{$dbH;$gZrnWpNh0iAZQ)!DC=clVjK|9kXqdrXD@%+-CUyB=hHE><<;tw5KCZ zCiH;#ViUdZ5#JaKv%?-SN3H|az88P$ zq&Yn2tL=xt%~FeZmBi`0$nANtiVU>1auysb2 z;kAug5b#8yRHa%$K>$Tj38f4~hpP)gg=yl-;16Zax-kQ%HPuEYnF!5mo`l3mIzA1S zeg^$t>({`93cxTJ1OXT}WE_F9PIhTWkHEOA>ZD14d8|rGfvI_Q-F;>RMyRKr!vPr0 zn=-7@0Rs{y!1(`c0%ScfE-C^rU(qrE6B+A)AqgWO;DKpPLJ(^W7djz`fg>(cg8WJ} b>Bss8cu^mXAKp_O00000NkvXXu0mjfjn%C@ diff --git a/graphics/pokemon/mismagius/icon.png b/graphics/pokemon/mismagius/icon.png index ad707f8cdd931b158300811a4d57ed8f62f00d94..07e075c1e88c9669bf184b7fcaa763b49d068453 100644 GIT binary patch delta 325 zcmV-L0lNPC0*?cb7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S4M{{nR7i>KRNHFB zKnRTFrB!kM|8MIh$thjkz8+{@0s&{ejP4xA`xy>k>sLQ}fU0c};ioZ#r&n>r=vP2Q zR2PFOQgO1=6`$p7mzLO>>gc*rh5Cm?E+`apv~#7dPUK1>4f+`_!LuV8z?H--2D XoX8tnV~ldZ00000NkvXXu0mjfMEsB~ delta 305 zcmV-10nYx91N#Dy7zqRe0001qplF?uEs7!!Zlz?v8N>BR4pC|em^RxhnHAtxiPKAyVZraH+QI=52h|q50I!O!H}G>9)&xAhpqDQeVC{^w0<)mCByCI61#e@N5|DrU zbEWJZ=a1?wJYVY9f}Mv7Tr$07b07#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SJV``BR7i>Kl+lib zAPhv!B~nJKyE`A2`+x9(6Rh_i&4ru&Z@<(#_x~GUW*C{` SfqQuX0000Qi-C#hXQ+==`Ta|nPbm0d&bVQ1Wd`;B>DR^lNM2d0Job9AcEQlK-`Pn{S?jFG3 z2aZ9df=x37s1y5{`@5R#X5~O_h)e)bY9dl7M4tl-yQaiUr=0YYR!{V{i6TCcJ*IzI zEQ|e&b7aqH`jUG9A1OUpfRW3wOwQw6fo6a=#YI~P12j@fa|M|2Pg1=u&unEqKoU)P za=Dnf8?Oe1Jl)beziI$?cegQdijFmOKLCJv@l_1^X;i&|VW5J46XR0-^nU`aFd^uK zsg8tU9eQCq2 zFs(2P@mIe&@%If{s}~=6W5r(E5S-pr=NGf#1b9uZ_s8gH}f400000NkvXX Hu0mjfDNCWs diff --git a/graphics/pokemon/mothim/icon.png b/graphics/pokemon/mothim/icon.png index ce6f8f0f6f33146f85ab39cf5aab3e706b528154..33124586818efa1636ed2f262a6c27ef6b4f39ba 100644 GIT binary patch delta 361 zcmV-v0ha!$1G58=7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SF-b&0R7i>Kl(`ZE zAq+#84D7qEe|^0Gw8dV|8D$Z64)~%o1|hr~aCZa=!9Edp=oFF#6Cs+X6 zJBO~vI2bGdYM{=4K~x6D4#EI4=$u8Lr*!VN4yo$vSup|-u_2c9=D>v{w@1=L*xn`$ z6eXk-g6tf)C8eYX5hQI5{JUN#G-=y{9znVCgKj%LivRk-I=!bR@x$1C+}8sTeNlVB z_^Kb?>;#alVFbv*FazY>&;io)F=+u~Uf* z-I^t0Buh`-=zA!T|^MURLrgHC_0 zwr%e69e2Qm+*C<{t~`)3tCD`N5Q%>Z=c~F(lzPHLct>}p^v|=cyoBP}2v~czCX!6$xP}9Ot#w(j94LSyN8vk1XeM`nf^EzQn9sw&16claH z3ljk^ObmiB3t(Z~wPCYCn4qVah0#ky{hkf-!sO(HQSOWvhBH1hU}4Y-5;|Cz(HVq0 xKcN#Qb9q+E3e&7KR7sKp zAqvU-;QJ;1?eoOxn#zN6luw_F`(P+J0tT0teR_?Mb5RDut<(?hA2WqXpstz z$ZTOFilA*qW+3=iNf3~SEFf03%eHVaw2(&G>^ z*belqah&GcxfIS{bl)0glwxit0YZcmuz`~Y&O&GqB=?{K8KWr==vVwT19wmwCh|rBg!iu_ zKRlj45&s7A3kI^L^U6S$f4nr1!#}1!>;`h;l%YTD2J+w^(;qeid3gSIF_7o}Fb%}6 hk7xNqT7I8D`~akQCj*!l<7$|>z zz3f{;;}7i;8Gx)VM_UZNSoz+-Rlw~iaOjAA73j*!gOWkTih}04U3w@(fsePM$(639 z!?VG1d{M7VUsF!>qDqFwns(&8^&&mhdF^kU;Mhp004LwBH4>6Sap0=%8$Sr9bXpLV z6bqPime<6W4o>$JEn7-#f&K;>W9(P&S57XRxCvzFkEcKe{%`^r z_`?ar`vb`d#QVdR`za7VDoTwikjSG|Ap9S}_R>4#OY}M!5kOt#XMj9#FYJr5+|r zB3a}bsT4Jg3`nkt%wN>4TU9omK8(Rnso!5j{a%l*M|#5z$=7{!I|ZZAF+M zMKp*oWq4$hFzqafg`wCQ5{K0!F>9+x@$APJI=lhBH=$sq;!zF&0000KluM4o zFbqS36tHE$An$+M(I?G}Eqhi4x{0=AMO9YbaXgiaQF|Sw)>^Q2utx0+1YF0a1uF`y z3f4U|0L2QM5W>2{a@H9v_Y7rWAi;9Yu+)2puE=LFZ~D3Fq8U6XCm=F9D9sw^8j06S zWx=>_Ggt#NK)ULG<{ur=K*v|j4Sfm$YZycg=?y`c7_8eQaS7 zHI~plqfd9E)5n%PqP6@O>VTgcnpNJlW+2MKSC2`Li8c%Q`me`77yZ;n>j4NyfaI%p zKHLDA@No0PKYu@bNq89fFcIXJA8$U)1aW@+;X@|K&5!skcoziWzz4|$$$XdylK8M9 g$iRoR%Wv}G2QY;nEBHV3B>(^b07*qoM6N<$f`nI;kpKVy delta 325 zcmV-L0lNN}1CIlc7zqRe0001qplF?uEnFpL;>4_L1l717-H4v$MW1I)y5}2lA^xD;i(Q0-P4%$;-q(i z5TZ;4GYEl+hZQ+uUZ#$o^C1<60#PJYS^it&xW#6+HTYI^RWx%>(LylJ`sEF!Pho#& z&{_HQDk}>6{P;m8qm=>HL zp_#hS28mls`w>SqNMvre&uu*h5oNu-g)uaGzhq*&@L!#$0EQee6z^et08@u}ec*sH z0JFS%KBT^TVRU>{;QFwOMI@klR00000NkvXXu0mjfWAT*r diff --git a/graphics/pokemon/rotom/icon.png b/graphics/pokemon/rotom/icon.png index 354b6fd3dc9280ca29a0d15a14eb1cacd8c6ab45..e2ecc8b804e0284cbfb797d6c81613a316ae8b47 100644 GIT binary patch delta 321 zcmV-H0lxl&1B(NY7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S2}wjjR7i={mCFvq zAP7ZGNwfzf z98b|A>hUCmQ6B`biXa^)M*)l!Tmcw3PKX+S2&IRd;XD+8!yM-#6rm<~WVk*NCy6;z zNv9O3eabc5h_VNN5Fkne?ZngoUMZ+FfY=_$`LU_Ha4+%bwpKKWUUdg-i%f6s5#E6K zBlOqnrv{?3!$5RN4S$$E=PF78RzWPXPM4}zIf%@=fheLBF?R!b=tImeP-kfado zZM@yOSg@`qQ2SwSl5}=saO9C(AdoeP83)q4=*49vY~v!(^3k-MB8K(*5g~jv>vJNlt3!zUxxGlOP}~I zFxA}!7*Vk%nE4>-Kji|5K&5>|8w42GQaHuG0+Ys31VRR83oK1WfFV3##isy+xLqRy zQ)Qfisir^zOr5y^)AX8vY1&-7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SE=fc|R7i>Kl)-WY zAqYf8tMmr{|F@yRWMl^2J#1ADiMzLM5Eyx-{JkUcLS{ZWR6ZJ{_kMCrT@9N;U=XcB zge0q2Ah$-U+b!me29;YSG99YkwmLMDpfgvkg6A(5p|WtTYz9wpt8%p7DjGqdbWb5X z#;CRN;#dtBWADv>b=>usyGU*5!wqC9Zj)k-*FW-`;W1D_c(Zt%r>>&)w$ZIjB%Y4s zi%m%_xn5jxPpXfO-ic}VXb`6#_0fOKf_Jgkkz|}-{;SRSKgGs)p7I$FSnfCRaMri{ zz(bM9j}mGYU#uT~B*07zqRe0001qplF?uESHT6KMGAWV2+teR}hDg%1u^-K#khvE^cR+5MwUUz@Y z@IDPp{JHN~jAEu>=K{r8Yv<9=of8CLng80H#TYXegbLOOECs}3)n`BzGOIU6Xmbh# z+zRL&T-W)EFpS6uvF6y9dnX*LGS-LrCjqQ-F5N(VUm7O*r2wK|B>&wAKzsz!7IAS8 zh#Oo^d375TM1mbsd*2$quPEe6`(j{pD})m`d1`#yH>~iG$y4-o*hYWA>ZGdNJLYgr zTTh~Najpq~vGX6*ojc^$rwlxBql|S&i{`dyzT;k#@ S123Zh0000;xA2Gh3&t5G*)!sBtj z_Il2G?*Iq}{dNGC3i#iW39z?I;8K1HJ}vR zqd7302`FD4s?&CV@!(C(nrHp?xMs*xLt<&n&4x|q!6Gs;9gBIfmma>HCr?)nKTNe} zXGk`Pt^Taf)<59k$NU%w68XVw5fFhN%+?bm@WbU!5ByLW01^4&^#()a2L=EHezfbq z<_C{E=fj&Hi|dcZj~yRW7{BHNtH72I*31JRtblLu;RQt#+!ehdg5F{P0000zl08lXF%X6K22Z|#DORFH z3hup!i4+ciM9SPXD?#^WHU>$k#&^?|z@1no1}_>t3c&jy{g!!suxLoRjR50OIS3c&rA zq}_b5^DZneyuW=WLhL!0ek7$p|$2kbX~d;$n$x6h8Nms0=$ N002ovPDHLkV1kzhi~axr diff --git a/graphics/pokemon/wormadam/icon.png b/graphics/pokemon/wormadam/icon.png index eb622fca237ba80cb52986b29f1014a02c3397a2..866acd17ba6425807c2609c6e7bead681929f53b 100644 GIT binary patch delta 35 qcmeyy^o?o4G{%b)r=JkFw0}1-KHx-U$2B}}F&Z$8F zSSk)vbxdBC0Z*tSta!4z+;E=3q{eXkxkE4FE|JZ_jnMdg3wYB&TQ4hxkl( z4+g3Uj)r!O3P4+ghuoQ+JF|N6p%2jzR^pyLR8SL$)s2fXp0gT%gO)}B4_JR z9YjEortb!mbF~%O?b*$a`^W3CKfNFE;RAlO-@MAuHp+@0cFa0IvZJkf=f?^UogZ11 zfgcORJn+N&8Cx0oVKW6hO#GNm{~P?6@eueCmMich9rSw_`Edh;*%#?^PXgos0000< KMNUMnLSTZB(1}U_ delta 350 zcmV-k0iphZ1E&L!7zqRe0001qplF?uE1R5*>zQ@d`%Fbwn`5JdI}{RDq5 z0Z00dLJ2wtO`ADrjLcpvtDOk9WtBG8Yw6f>gv)Kp0dhD;5h z%jo1L_L+pWcE(FWcpQyKHc7&RM^s~4O{5I~Q53Nc45yvk=D^0cxI!UE?gm_f;!c0@ zK)1ns@PRQua0EIwBKBUEvA{gr-OJv@he00g?yS>l4b#(MpzIvzH)L`Xp(j&1#8f#3 zwdw!3>Q&*ld7kh=3kO7R8AodXSKY6f)2T5kE7VK+OWrf%()=Q|k4~a^8MTr1($1B6il1!i@iOkl--NYDc`)&U2djR%B weol9OrYu0s$LT~e6#$hcL&5(ZTYtG!U-$6I+_o@yFaQ7m07*qoM6N<$f+Aa?8~^|S diff --git a/graphics/pokemon/wormadam/trash_cloak/icon.png b/graphics/pokemon/wormadam/trash_cloak/icon.png index f971e3fb59a5b9e2fc726d298ad46fac50e30af5..6834629e9ab3f4cfe1e0bb744ab5201f6b8e0a06 100644 GIT binary patch delta 297 zcmV+^0oMMO1M&ip7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&^R0PsmfK~zYI?Uca| z!Y~X&S9Z&!N#j0U|EQo|9J1+qNGqvxVHA8eCr(+M>g@PH4&vW|@r{ zZR}&>6{axwpE1Q0j^-n99SIFZ8ej&oJspuiA`b7KdN`!U*x`mf^gT1A#F&Hw0k@n} zM1?v$A>u;U-r$*kaS(5QczH;<(l~~=rudCh!h&xhE4eGQNmId1ll(Y8obtmG4s(7a9t8ZLe7IgK7T2bHIr%|fea{cF8I>Q^!}!sy vC*em~-^z~wNHO&MAX8R;3zlTB`fFbsv~29`DZMm+*2 z=zZTvcu%C^J|MM8yE9T<&kTf+S#;TEg&)s9I3K6e-yUn@aEvLpLP$-@lY>9%g5Dt~ zDt!nr%Soj;z9E?nsd8lIP)%m?<^pzQ$?nJsTazf}j?Zp^JQTW&p79zK{n|)lcE^7* zVp^wDs054A`mKoSa*gvK`>g(Y9{PRMlV0Wls5U_8C#jc6WrmW2W@FSY{U4upRQin% z Date: Sat, 1 Apr 2023 08:18:13 +0200 Subject: [PATCH 233/428] Fix gen v icons --- graphics/pokemon/accelgor/icon.png | Bin 387 -> 400 bytes graphics/pokemon/amoonguss/icon.png | Bin 352 -> 349 bytes graphics/pokemon/beartic/icon.png | Bin 370 -> 386 bytes graphics/pokemon/cobalion/icon.png | Bin 367 -> 366 bytes graphics/pokemon/cofagrigus/icon.png | Bin 535 -> 553 bytes graphics/pokemon/crustle/icon.png | Bin 505 -> 447 bytes graphics/pokemon/deino/icon.png | Bin 261 -> 291 bytes graphics/pokemon/duosion/icon.png | Bin 310 -> 324 bytes graphics/pokemon/dwebble/icon.png | Bin 344 -> 333 bytes graphics/pokemon/emboar/icon.png | Bin 514 -> 516 bytes graphics/pokemon/escavalier/icon.png | Bin 401 -> 416 bytes graphics/pokemon/foongus/icon.png | Bin 266 -> 280 bytes graphics/pokemon/genesect/icon.png | Bin 421 -> 395 bytes graphics/pokemon/golett/icon.png | Bin 332 -> 348 bytes graphics/pokemon/gothita/icon.png | Bin 333 -> 277 bytes graphics/pokemon/gothorita/icon.png | Bin 388 -> 318 bytes graphics/pokemon/gurdurr/icon.png | Bin 378 -> 388 bytes graphics/pokemon/hydreigon/icon.png | Bin 506 -> 532 bytes graphics/pokemon/karrablast/icon.png | Bin 253 -> 273 bytes graphics/pokemon/keldeo/icon.png | Bin 399 -> 407 bytes graphics/pokemon/kyurem/icon.png | Bin 595 -> 573 bytes graphics/pokemon/landorus/icon.png | Bin 554 -> 533 bytes graphics/pokemon/larvesta/icon.png | Bin 408 -> 367 bytes graphics/pokemon/meloetta/icon.png | Bin 312 -> 325 bytes graphics/pokemon/mienfoo/icon.png | Bin 372 -> 362 bytes graphics/pokemon/mienshao/icon.png | Bin 386 -> 395 bytes graphics/pokemon/minccino/icon.png | Bin 329 -> 352 bytes graphics/pokemon/munna/icon.png | Bin 247 -> 255 bytes graphics/pokemon/musharna/icon.png | Bin 355 -> 377 bytes graphics/pokemon/pignite/icon.png | Bin 379 -> 396 bytes graphics/pokemon/reshiram/icon.png | Bin 529 -> 551 bytes graphics/pokemon/rufflet/icon.png | Bin 325 -> 336 bytes graphics/pokemon/scraggy/icon.png | Bin 304 -> 282 bytes graphics/pokemon/sewaddle/icon.png | Bin 250 -> 272 bytes graphics/pokemon/sigilyph/icon.png | Bin 432 -> 423 bytes graphics/pokemon/thundurus/icon.png | Bin 6946 -> 526 bytes graphics/pokemon/tirtouga/icon.png | Bin 330 -> 344 bytes graphics/pokemon/tornadus/icon.png | Bin 525 -> 530 bytes graphics/pokemon/trubbish/icon.png | Bin 316 -> 332 bytes graphics/pokemon/vanilluxe/icon.png | Bin 372 -> 379 bytes graphics/pokemon/virizion/icon.png | Bin 417 -> 359 bytes graphics/pokemon/volcarona/icon.png | Bin 463 -> 471 bytes graphics/pokemon/watchog/icon.png | Bin 435 -> 414 bytes graphics/pokemon/woobat/icon.png | Bin 321 -> 333 bytes graphics/pokemon/zekrom/icon.png | Bin 473 -> 506 bytes graphics/pokemon/zoroark/icon.png | Bin 460 -> 433 bytes graphics/pokemon/zweilous/icon.png | Bin 416 -> 423 bytes 47 files changed, 0 insertions(+), 0 deletions(-) diff --git a/graphics/pokemon/accelgor/icon.png b/graphics/pokemon/accelgor/icon.png index d8538bec1d870cbfcafbaec753b868eec69eed5e..5d971a97b24cb4a2b9798f8fecaf822d847a5928 100644 GIT binary patch delta 321 zcmV-H0lxl&1CRrd7#0Wv0000?P=%ZT0004VQb$4nuFf3kks(BXNQv!}L6*ZH3`2uc z9;~GM-?p}gv_LSs&dj2I-852!2>j#t&L@WCUaqxnEGE~QbL43HqeKqEb)c*btZI1V zf?@`3GM6C$TcE&n5z1_^gj|XRFp16RV6h6iLQ;d!GHwyIWSmUY-*KzpI>3`iSN7;( zvJIYq#rr28Yf^N7f4UKWN^8imrvBBJwY{zH4w3QbbO|wofLF%c(gL(0Tv;5vwt$Bq zJWh>G*5Vfaa?nfeuGLoj&ackD!hdxod;B@y`D4WYhwdHz!UYy@{EhC#Zr}K~m!}pT z{*Xprh(8pf586}Ezc8C Tr8T_#00000NkvXXu0mjf0Q8>X delta 308 zcmV-40n7f71A_yQ7zqRe0001qplF?uE<}Ggjn$GdZo@DPMRfzBIzSBZ0Ok#{<^nA` z<_sMIZ}Czix@O&>nG{JK;>oNMS+?XYK$mba^dWwW{7;DID&W<5(4{hH{butET6epB zE}ZqNY4eWr=lf497*gA4y4}$NdOP3fn#MXrnuM$Fjvv-DrhkJzd^@hh{FdQlen)>9 z43eue?Y3uPF}XtBm8UkMHpXWih|Q zigO{f7sscrf5TzfNyGt=OB_P_B@W&v8X^u{%>YFlZb2uLI}RHPP!%|M@+tj@!;*f) z0qm0g9S3i-^lvzf`E;W}r6>~sm82kIBP`V_eqQbHq51>Q+ozuPuE!_<0000Kl(7=S zFbG2^l!s zEK==NY}a(mgLyl%kA6xIVg83O1(1Osgf~D2evlSGMt-~jGV$XC$jFbv!wo;qk^3$r YUjJVa0^T;WvH$=807*qoM6N<$f;}C4AOHXW delta 278 zcmV+x0qOqT0^kCW7zqRe0001qplF?uEM z!y`C=&tx~IrDCi2jP9r$-~dq;&*(vsKEvPbr^l`|Us3$4c<=XhOExFI22duVv^%xn zVGdxao$kPF0$95isCayY6Ln`x-ZCdpjeVa0$&Fh*2A~OimlM~}<_D1VE8-yP^^||X zOd4##OA^PDIrO&!a$u+7;*5_-HD6rY4}Qcgz8{IEp-NjmZ$wYH1T+z?R;POxB5UZJ z`ltnF_F3aX?W%+2$Odh~WY1geCd|Z{K_X1U$P5x;8l2)=-ol&-nIB%-u9O=gU#Rw< c_;-E*@@A0Sgzy>t00000NkvXXu0jG}g30ZI?f?J) diff --git a/graphics/pokemon/beartic/icon.png b/graphics/pokemon/beartic/icon.png index c4ed605a0ef34e9e866e125ba5a1f8cb2e5f9d52..991f9f265d21e4a6fc28676badba498a99034eb1 100644 GIT binary patch delta 313 zcmV-90mlCF0)hjO7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&^R0RTxvK~zYI?Uca| z!ypKTD_k@&@cwT*er&c@(8DgxlG)q%1_E>n1K> ztb*oE;Af>Of+iBeYZt1$_d0;-wg5zGUlJ&e1pastoqAOw)!sUCI3aT@mQh<{u8kWP z&PS?*s9{owl8M@XpsD#aNfb5XRXxgM9bv2I8qSjp6F_-G*+$Vqv9K%v>k6|V#X4e# zJ_)>T_LM>?aLHwbwy)L5^*>LaCj~M}uLS~s>;&TekhMTge_RC;0sHe>Aj2OwfyhkQ zH**untQg=|fe;17_#8h1NrvuzXyfY_jf$E45ET>rkSOLDcm41JVPX+Evy2WW00000 LNkvXXu0mjfoJWPi delta 297 zcmV+^0oMM41M&ip7zqRe0001qplF?uE*l09z2Fbsu#0|M?1#3fxS zSZ~S_9WGM=ZJBbT6!0N}WKUFU539zqe!Lb1T5f!JA}R9gx<4M`S2=8xlYwb10j9E$ zj{;YYM<;Ai1cGdCTvZJiHsdJ@l7*Xd;~t*Us|mexZVx-9SES@)bSL1t6c#$-eLH{H zP&!SA!*SPho|eoj!`vsG8ym#Xlnnq!p-e^?zNPBFLA~&`5=bf07pUS8@&2<{?TUz5 zw}Pzq{BPr@z)05uL+2GR!9E&b;+gsxm@Mor4KT!mnt?edrY4<$k<^L&42*fpb;vw{ vDf0)jjX2yDbZ-3QLze4iJ{EF+pN|zU)bo=sC>|6{00000NkvXXu0mjf1;T-E diff --git a/graphics/pokemon/cobalion/icon.png b/graphics/pokemon/cobalion/icon.png index 376226b242ff93026a7935c3e6575d4f4ccae4e3..5dcdd6cb0e912e463f735dfa70f59fd09b8786d5 100644 GIT binary patch delta 292 zcmV+<0o(rX0`3Bk7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S>`6pHR7i>Klu-}E zAP9tq)(sL1|Nr0au=b_UE_++D`qIYlJP?z6JpOW-eZb8wRKU)sD&dQB!{>yz1=cV* z;Xq2{$4@yCDO~n`Ea7cw#M?D`KMKH~RfNUw(If9`w^tSB$@NeId+XY}46gW#7T6>= zFk@y3+|MbvXj5i?N)$%bJJ8ltA)vr(sZa=}-Q0u2xD32N0f}>tEx@6O_lIGlRMKQA zrQ)#oi)kiM9fEDt7)xlPYc-Q8SkpoI6j^ON%(2G4HLF{A?R_ipPK_=U(feNMx&!16 qkRkXwKw>_O0J+Qu50Kx?hc~eF8O{;ChKK+F002ovPDHK)LSTa61c@8~ delta 293 zcmV+=0owlV0`CHl7zqRe0001qplF?uE-hRm-WAzY{y@Q}{veZJioObpx=MUt_%X6Fa~ zGv{GC&Ymxx(a-Sb%zLN`{xf&a%=p0n_6%Ih-!qaO|9^DMIS;qx-HgtsFB&@$h8lm* z=nH+<*a$b&$k=j9Xy}U$xZ6G(E62eLp0{D)f$WbxmDn+SER9GU?C{|^j<6O1Mp rA`%QDeY{hCiJCsn+5e|)`TzjU#NZK~E}pgm00000NkvXXu0mjfJ;soN diff --git a/graphics/pokemon/cofagrigus/icon.png b/graphics/pokemon/cofagrigus/icon.png index 19476138c140f9d720f9c5b967c7ea16be54d526..1ae2b6609952723b628b01d46ddd28c29342fff6 100644 GIT binary patch delta 480 zcmV<60U!RC1gQj&7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{Sr%6OXR7i>KRLhdX zAPi#)PGKgt|Nn1SHYDNI&fa(Fp_524!dMF7PcBvcjxy&BMT0t=(s?qMqAQG7nkg~! zS#q8U>KiLX0s(kR`qX{!d=iOpCQ6l|7o`e^JdsF}P$*@6zN{1@$Z=3I0%wz<;UTz2 zl0!kjE;wqg@K6DN0^Wd+Lr%^nqU%}J00wYO^-?)B%eow2QN&d) z1TcsSIMz%fXjtw<@o@sjPEj^E7`O{7A~J*R8Mm2)teMNl+Ef^0#kDOX;77Xx4r@oK z7pz?c`;U%dpUMwUp*C`qV#T|S$39?(7#ktXu)mV0!Z0v@(}9MK|JQzf4-mi@+RqfV zp=4h2;l|2XksY?$f9Zo6+v9=rlt5RbsHn$7`EVUt z(;o4#1HHsQr+Bz}3F}%6Z3xX$AM>FF#9;sFlzuUt{a5dY+5WrX9PGcT5QfUXHvbR( Wp&-UXpdU5>0000HD4O^oGpb$W1)2y4KO`y)m(t~vW)kdm_mGp?y>F4W>2&HQRT%R61>qNGt zHO9lWv}YTE!JJ#Xw+S`(SxmMO?FH2C6?E?K(QchdL^%tGa(h*xrcTuP8Uuue}hyyTL)E^5D6+z?# z9BW5V(S`W-F*BPxNkx#O?qOzHfIpW2VRgk|S^|4shlh``HzO$<1 zi5J`(uka!EDjc9vh)NuoJ(eX7?5h?PFiS?<>F;Rx2FCv%s3JVwGynhq07*qoM6N<$ Eg3Qa>g8%>k diff --git a/graphics/pokemon/crustle/icon.png b/graphics/pokemon/crustle/icon.png index e6a99fe634cf1d556cb5851b49a47d807c0b25bf..5b70147792e6acc74b2c181879d9d000f77077d6 100644 GIT binary patch delta 373 zcmV-*0gC?l1HS{17#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SJxN4CR7i>Kl-rKO zFbG6zRl>0!;Q#-2889~SCS7U!8l*O@Ipxx1=Jk5wA0Zz1$!bAYj0hox7vAd5AWfdC z0cAw$%vCR>2vs>1I1&Cm0n8iX!)AbKM<@ei1o;-^6I0$pa9{}40TG{oW=CEoKBf*L zEeMYH)IxgKlZ9A+zO|f}_krKEQ61^FM$jF#1&;*o6fWEYkWz}YL->8@E{(euM44VB z0FlDz(=?%1Be-*!CBW!uJ6H(+sRDum`EKf_x{9`EZK&;at+GEf_K0909Z9-2y?pY< zK)7C|V<4+{0~qtf_wg9Smj(g-e=-Qu-EV`)`9BOo^`8t>0{VwRth|YB8ieT|29W^O z>@}4!VT%pA4324{@~1Ke>levLTVvc TK4Y9M00000NkvXXu0mjfFtMp| delta 432 zcmV;h0Z;zF1Nj4x7zqRe0001qplF?uEJ0IhT=1F+OmUoL;( z1f>HiXCq)(({~qE+A`g2B+eGsIAA^xP|$u`)LjG)FVvjS*JTsHz{lgq5iX_y_ZH3= zFrS($Ovd>39spy)ydV7R47MWuj~-2jciv7;e7{i7I2TjCy;;V@&@qucRX_9@K7)+? zGM~RLMuNPw4~lJ5hIxu!Nxff(yoP^Z1ffKjN>NKCWr|KN+0$nNPOg5a1=y9Oa9PM+ zDG^mZ+fs0000KR51?3 zFbE40OjYpze_Io&RR^HD;g-92$PgQFP~V7cNrOt~tDsikA0mKG)zm5u2#g%j8*7l5yT zD!t?*cux}=EvgPT1Iu6YY0BbfmyO@S4v;?y5EiZg>GC1imwYJvJ-hV$=QsgNPYlwI SiBpLH00003|L73 delta 186 zcmV;r07d_!0)+yQ7zqRe0001qplF?uElE47#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S!bwCyR7i>Kl)(za zKnO(RM$OIr|G(`h?9EvyEiEk(a+;@W6z4eZ_)bj3R#pT@QjQ29Og9U2V+8c`40jLh zi2^*I=u4o1Ot<`6VnUD7-BF_lrjG)g07xIhg90e*m!nKJ(RLYzNo13(2MsY(HDQ0D znt+MWITRtek#>?;wM(SuFxk3lpGtPI%FLaqyn#Fbv#$>&+0TES00000NkvXXu0mjfyoYO& delta 235 zcmV7zqRe0001qplF?uEsE`SH?Q0Mz zyx-ygg#?>GqQ=6A9z~6HLx!-UEp>z*5= lgqaOe!emwYAWZauFgJqqeuzp^a9RKW002ovPDHLkV1lkoX_x>2 diff --git a/graphics/pokemon/dwebble/icon.png b/graphics/pokemon/dwebble/icon.png index 32a23fd05a22cf0b8ca3c386287373e11a398e01..4b356d5aaa9f0daaf7f32ac30087eca1b5593275 100644 GIT binary patch delta 258 zcmV+d0sa2i0?h)D7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S%Sl8*R7i>Kl)(za zFbqQz5A2)t|9?9g~QlXtMBn z-xdTugtsg)3W0Wqk)w|S!C(NQ2%`Q)z=%LZVvsvr1)lvuf$0G+0Ehdapq}8OyC)?T z)r#YgN%88)b5yWl61t<807*qo IM6N<$f{&ea3;+NC delta 269 zcmV+o0rLLM0@wnO7zqRe0001qplF?uEj429W1XDz^41CSB2 zP0~@K&dh2G=o|uf&{;7B{-H~aE9*PSlKfs(-SU9UC0OuL#9~q9DS%p20x&NMDa(MT zCDJ+p@sEYj)-jjdf}N*c93`+B?u~2Q=d9rN#gnnI3v{xz%r1Mg0{`MMb)9*S zviDXj7s{YqzQ6oNHDAH)k4PCquKp2wrRyAg33CexXhm6utR9IlNyjn>=_ZQ1^X}F! zCABv;EN;*z2)a%@@!;GEIvEc;LDzeit89$Zwe5?oX+`-dHV$98QH TWRMAN00000NkvXXu0mjfK?rqb diff --git a/graphics/pokemon/emboar/icon.png b/graphics/pokemon/emboar/icon.png index 8d6f99628e9988db0e6275eac3211f8d6bb16954..d79f6f004ba6bc4ec99b93c6b8a02c3b125a5fb6 100644 GIT binary patch delta 443 zcmV;s0Yv_S1cU^T7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{Sf=NU{R7i>Cl)-v~ zKnR432;7+Wf7=3T+-38{9(ro`5R=U8fUf*sU;k|3NmqRKKox``3X7fwM9gVZtU9?F zJPpXeZg3*A_y|M(Tn*tU-3{n^Ih-lwD5I{@9S~(xC9p;vm1Y1;j3XpeHWCq=b=ocd zi|~k#LL%g&AzPwR;jd^4E?h}1pmN-Yf+5e9vWSl_SxafwWF+y-V&UCQIWS0rJq zkO8ub=l;^ekq2`+nBf_aOVYqxUELY=^kX|^ipPen3_ji}s{ZW7YF!Y>fz8EI+gI@JM4*~ErB!72*{R9sWh6Nz&@HT+-(U}3# z0C5Hk0O^2u2arY(8vzn8uB?2x0g`-J4R!-WS3oQPnF6o^#D?KMTJ8WD2~xv80c0k~ z!4FITnFvz+zyy$)AT_rb0n!PQ{D^_P0df%puOi3kya4i!Ajh3t0C_`@gAW%#k|5p* la&&Y8L_dxiFZ_4;@C~c!94j)swWI(5002ovPDHLkV1kMBz1;u+ delta 441 zcmV;q0Y?6W1cC&R7zqRe0001qplF?uE`;vzqVe$EE1~ZM!Nm^v;8YYI z5G)9aa}r1}4XjSO0I6P9vOrS{Hr+KcpfgCj8$4(d?T#-*nWc*+0keBz!)(tTfS-SO zn7)60@Ys#0XTHv|H{?CxHYCef$|aANZURHe7o5)yFU(Hd;a$D#8B4+qEb#rqxq!M52cA{pxw)Ko=4ZA%~{HS|>s^9|>l8iTL+t0h!mu;L(38Lwj9Z{`e07;R9-fY0GYeX_|7vz^MgRm{a4! zSr`XkWrQhd*7{+D+4B~}MwkU(dBSjaNh{1p?(S%W$zBamNLHA1X^MfXKC{BeQ&P`B zCn~Kl6AbIB0I@W}j1;1%+de*m5oV;K%7;2qSYhOGfT?tr8DWG9ODjm_M=d3cxXHo2 jy{fqqhP<}RfBW$Z0uAR-WPr3800000NkvXXu0mjfna;~Z diff --git a/graphics/pokemon/escavalier/icon.png b/graphics/pokemon/escavalier/icon.png index 32c3988341d4d8ec9a552c1833fb5b68e9be20b3..94f646ecf70a69b2d5aabffc4e5afa8b0049c28c 100644 GIT binary patch delta 342 zcmV-c0jd6x1E2$t7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S9!W$&R7i>Kl)-ky zAP7YTY);|={{L_L(3vKKm@ay{n!!zy_cVZdOL@nz9yfApZQHh$#k$%fb=Z%bJBF@G zsy7BD#z-Bmn+asMH-H}v^PbMC&lSo#nkzgPPcV%^S{R=uWwZ3LB zu!wFI^T`*m=`SXKtg7M*c$Tw{HfpV~AWQe!q@x6?^-%N@j;M?F66x4?@1zF9nBP0S zA9##s!h9dPj{HsA)P>PTrcqy89GI~QUhV40Au!kS`RA|h^oQpYe~%A9{s|!QdIf+) zLf9)nCPLu#0uY)AVW{i`2oMtpVYu)w011S!jqM7MNC?L@!v!G42@#uAPJoo05GO!Z ogm?m^ED7)c$Sol(*@0i;8{_pAI;n^8t^fc407*qoM6N<$f;5eoQvd(} delta 327 zcmV-N0l5C41Caxe7zqRe0001qplF?uEl#A_w8P%JA{byOHkFoze5Q59@ z+KN64TFynBfur%f5PcFjXt+#*H|DvLRaoB$fT-j<##et~ zvnd417<@L(eOKPFb?6KGJLEO&DDaitDt_`b1FhX#RVhos(BakXhv;f5Y*CfZk9}Lm zLQ`J9AZ-MUN6zc%us-R$Dx@3J1xa}Vm98)Z14&^S8?vp>C3YF-^1x7uzz`7l1+xP2 zXE1_*fSzVBWko=|IfEe}@Gvc4ECDka!UE=LI?%V+0){0(7BDH084SyS{D5IO5O9A2 Z`39lhuSKpdl!E{O002ovPDHLkV1ni;k^=w$ diff --git a/graphics/pokemon/foongus/icon.png b/graphics/pokemon/foongus/icon.png index f6e6171a4618a436bbf3097eaf40dde62d6701cb..c6e4ab426bdb76528e9d941daad9a86480b43276 100644 GIT binary patch delta 205 zcmV;;05boI0+<4j7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SmPtfGR7i>KlsgVX zF$e^`AUz}(=Ki-0pC$#6E=l2O85xZ1UF-6nXfTu+hIER8LCgn&+E8X3W`am5Se>(l z)J6!=p%W+s!XxsO0@Cmv^^^)%$j9jJsR;U2sUBn4BqX>LzeuyD*%Qs~AoQ zW11l!#8kgr-njuRvc44{kq^`7-k$;_?lFZ>=ED>KKgov|JE92aSI9M$00000NkvXX Hu0mjfd2v!+ delta 191 zcmV;w06_nk0*V5V7zqRe0001qplF?uEw*MQ3Q+I^ zP`o{UQbgsF|KwME0D|c`+;Quc3dD9Etyfo!b3YeV<@YEXOZ=+C<+K=pErx8s1NBQj zTYw{h0>pKm-rybp$vZPDA&Qt$ry@d^`RDaUmzJ_W5b%8(76NnPiVqm6QBUIy=anl9 t|1|kxVfxevGq=J7M6Ogn*oTk&cmW37M^9|MvxNWv002ovPDHLkV1l#MQEdPK diff --git a/graphics/pokemon/genesect/icon.png b/graphics/pokemon/genesect/icon.png index 6ab5e6f03546866e91cb635e3d243ff0500670b3..a448db60332e0a00942b3368569876e37b08a4f7 100644 GIT binary patch delta 321 zcmV-H0lxmF1B(NY7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S2}wjjR7i>Kl)(>)MZ~)?Ly>AMa5?#auJ~dMNy_O zgT|=I6z=%hqBIk@;;&u7F=rQEEZR+znDoL1+FPxb=Jb^l)~!tXR6N$Q6&%C!lMK=m zsL|m$gex}SRa9bskywVG`!tRYRsauNfie>*S8lJ=8NLX{lDwFZhrijA1Oc%{73=P z_%R1a=f@l%dn`PA$Q&T#gEc;+00}Ji{VNqThwpQaa8pYd^QWgnM^_pN7Dic~qJGdzFw zK?j{S8*nv&v1S^qi>di}b1z4sSJa4M(z#{Y)iX#YwTQz!9hsW6@2HG>J4N=0TsEeo zVkdf~`&rtnWvl@;cC~tD_5WktB*87wIHG|>gN8LikNgR`f-s0u)+5*gMxX5n)=Wug z3zwDY=cM!&JieqK7vSYp2&Cxo=@>^)grOnVfDmTX^+Fgra9jv;|3>0mRSJ{Lxdj(t tvL9*ZyFvQF+Jg(oesK1qY~+{y_y$t=_D>M9|8W2S002ovPDHLkV1kgdq)`9> diff --git a/graphics/pokemon/golett/icon.png b/graphics/pokemon/golett/icon.png index 20dd1f45ab2552b2c1f94630299e46c30bf3ec8a..a3513174898f6a17a50a6affe1e539e346299da8 100644 GIT binary patch delta 273 zcmV+s0q*|H0^9Kl*?rPT_7znNciIr2xkU?KXeyJZV00000NkvXXu0mjfUL15L delta 257 zcmV+c0sj8n0?Y!C7zqRe0001qplF?uEy9mxs z?b!D@LyXT}xR8wsm z@yY_Ap2s072Q(;a_uxrQ)U59>eenGh{A07ZFt8S8OnqTMq_Z%gG9cH&M6xtMXkkKH zMnjHT7*1@dd8b+!elq}OVX$L%juvMBFw)I_$Y$`C-_(x}gyWUPg$Nti00000NkvXX Hu0mjfwgPm* diff --git a/graphics/pokemon/gothita/icon.png b/graphics/pokemon/gothita/icon.png index 19da4895baded46899d0f2d313d07909ed9adb5f..8d280f51746defd2c090b23b5bc68898efba218d 100644 GIT binary patch delta 202 zcmV;*05$*30+j-g7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SlSxEDR7i>Kl)(9q^taN_cgA?$gh7`8ya|J#wx$$IsjkF78JV?C-~owEidb2BzZ+L=_->KmY&$07*qoM6N<$ Ef^mRZ`~Uy| delta 258 zcmV+d0sa1!0?h)D7zqRe0001qplF?uEB zW$HQs=1uDYtMT?kFI%xYmP9pju%OzO931W!Q}K8F^Q@2D2iE$^3!p?3g!OS^T48P# z@FN$ zZ~Lv~)?oEmi+p&E!~>*!ft`#;i%!NNWT|WpLKfu%;(2_d4>aRmha)60+yDRo07*qo IM6N<$f@=K~zYI?Uca| zgfIw1rRZgY%>V!G0&5e4ST7#dM2rWW*BRO-Ow(I;7jPjnV*r^r! u{?;SvogW+VwE1y%D~S2=2Lt5(`S1mMUJnBITYZcG0000@lCe(2FbszC29cHZ+3_#LpNh19Q`jI$peYnO zX_cWAR-H7?deD~AteazS4FFQb3qYO$QU)U`0JtDM>GO0njLWf-xSsD!g7un`-cDMK>$oSKlu3?+ zFbqYJSR|IG``@;|Qxp|MY!)r`rrKhKA09&Vw(X0;{UP6)R}AtI1>>qEgM386;N=tJ zW>zvT#uejDOqg%XR6tN-#Kfrj1dIw-#%wNOLd?WOL4d*7dKsdbs0#TWd1l|Piv*x( zy6?M1zTZw_5Neoz#X9nL02R9#5n1moIxND+rvUnV0&^2W9wYWugIKi1qS(`te~!Z> zJbhXIO^CE6k`f4JA*yb$JBig-yu9B3@$2{^!^neShCnLAyaiGi<`l@pF M07*qoM6N<$f{iMOqzb4G)1S9Se2l9e+Zp(dz@^5V9%KheW6ta_#U&jd_M;d2)Zd zarUFF&v?Lgd=zA}*v=fTe+TK7_GtE~rpYcYE7bgr{O@V~tR7cn1G&QebVEQ@K|X>Zf}qM(Nd+Y^RFLQcm?a$D3HVCR7sKp zAq;D#;E47A-^P*~aIdGFGO12wk??{oZQFl*;T6ONdt?AG!yBP@!p@m_0Hot&bjQ1Y zE6{(X6wK3pd=Oy#pYX~@uw%Rjz9Q@~0vAEJAyw?58)~gg!Gek%VBxJ*f1)1Zs(n=n z;_xsm)p%ZQ%s$|Mr<*ygB5;4FKAi1%6Rzvz15q$@N!2>wsPvIxSY-Z@5 zzcHxa0r-m{Vd*9toWRnGA7(imYq|)QsKcy^?X;%!d7S%%Kmx<5;WUgOLpRQ5bT6%3 z)<+e9aIJT^7t_^)t^{}Mr__yvr{#>|y^vP{_}aeXzy5lE6Tdzl)vvY1c0Zpbey&4a zqjfrqf2`5k`IGo<*+;1cjYd|S^S~>oMVYUG#mD? z++myI-`&A3?l8o^w10L7iQmd#1Z6ZKcaSk9cQ}Y&?!Yl5cgWKUcaZv*I~;6uPN)xe zs1onV9p;@X?v~feMgNHUdQ7I=>{n9%LnNoMGYtye}nx^hhOAD(CWx8NA4gPfr$R%QLQh9b->5>f4YgB*d zYYQ;~qX=gHR~LyX-g+AXb8vzrklW^Hq0YP{ZKc2IHL7^P92R;$x_-p)Ii$d1Z(DA<5yL z{llRR{DYv8v-$IQq#+whKZO=RxTk-e1_X0TI}Okmp}zi3gLGc(uxvC)*8DQAe$b%2 z497u3OnZ%!2AO)RgN7J)#;DT}W0E-V$Qun&@kj?AP#QWO>A(Xb7o7z$?RZF(j>mYo z4G)x#$G)xNVG1@p_JtJ>gP?ePxn05-7mj&4PD$?pSDxSQhpS7yo<+JPQ>`6OuTM{Z b)&Isf<7`_ymAV|{00000NkvXXu0mjf5E03g diff --git a/graphics/pokemon/karrablast/icon.png b/graphics/pokemon/karrablast/icon.png index f155236f285b5f2658706b68bd6097812a024435..9db6f2f4d390c517b263e1faaacd671ce89dff3e 100644 GIT binary patch delta 198 zcmV;%06G8t0g(cb7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{Sk4Z#9R7i>KlrauN zF$hD08d4%5xc_bI=vQionk*gu5Hs>*V8E>%-BgJx`;ICBbK6*K`dc8)N@A^05vlGT zHYu@y5TzCw5}{9}L((21(#1l46KQY&V-d_k;UJj6mr$s<0z~g~7C=jgt@s7i{iCCg zPJpz(1_%YlJ3!ba`=*XDR)8=I5LbW{hu$+EUUXFn3y6mj-~a#s07*qoM6N<$f@OeB AV*mgE delta 178 zcmV;j08Rgq0{sDy7zqRe0001qplF?uED6en1s?7=bLn|L|RS1hO9fWwsRZ*LS)dJ=U{GTFYg%H*KNKEA gfC&aQ`l*{f0PDk0c>OgKZ~y=R07*qoM6N<$g8Ji22LJ#7 diff --git a/graphics/pokemon/keldeo/icon.png b/graphics/pokemon/keldeo/icon.png index 4d8c580f229661a7219821a4d4192d1774b0c86e..a7b3f96ab5d96455bea80439c9482a554004d4f9 100644 GIT binary patch delta 333 zcmV-T0kZy&1D6Ak7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S6-h)vR7i>Kl*tal zFbqU1SxIbUdH(-zv0V_&hQx&nSUIH3bh4PfLDZ?FMI8~8(5m2eA3rnqYKsv%;X4PwTQcxo?cF|Ht zoUAvHk*FbW?0~9&Lec32;`|ArDTU=~xDn}7ciA7PU&3!t)wd7RoaV!@&&c()qOH8r zBQ+}$~-%0KxF} z_W(%(42}yxa1vk-5IqaMeg#N;=K~&kfW&+_Ne2*J;o%A_kT9=M*#TtMUjSM2;RTR) fd?>-DZ}Z^}ZRi;Ymtp5}00000NkvXXu0mjfOEZ(C delta 325 zcmV-L0lNN|1CIlc7zqRe0001qplF?uE4l);YV zFbG5koJb&9)c^nO7Vg+>JKjC*X>w_`sX&3r`}z6R4}kq-3)fWu7`__RS`~8=6s;Ad zA3((Te@+7DOI-lbYEo@3f-oBjsJf`kf-FHr3RpQ9)rd6%n1B+nyhuny^{r2sxrd0V zM2%A1eRP4|J9G1YiCRiAR~?@C+r(gI$pnSP{L<+061bZ^W{wtT&sm~(Q1!lYxXc_X z&FmECT&uhv1AjG>8YTF$0O?1;>?d{^+b!g=euoh|X2t^7;CecktdS8N~3uYLCEzGl4+YQ@7F z5E~v2fLQQw0>pxc10W_mJOy?@3_Ls^`2i3O4+9`OAfC=`0AvTmu-X7}0K^+0Ga%jo z*#L0>$N>;j8$f12900Nc;sB5b5Mx4bfUJD@0tDUx5`O^*k`W1pi4QYCK3`mWb>hPe qkk44lXC($7P5{~X@B+wx<-;H4{3QIlQUk{T0000j91k(hN7zqRe0001qplF?uEa}1Q~ zv>MIMjCP;n{Odvx5>(0krOnu2STwHZRmspcj7!F=UuUuI(x<5%8~bSxjj0w~fOMLgd1;tmuBhbs zZwb4gtfrX9RJ47(QeAM)F~nFG?XJJfgK2pjqPX*^ME3b31`qBMF}t7i6T^=y#Ju!o z-zv-#%DDc3`GfLirC--nvx|iLb_IX+a^W&IqQLz7`%rFO#a0U)*x;K_d7_dLmkrll zqT5N7fNWa{>jf22n9<>?{$SUo{(XCp{lYytxCD6Oqr*U_iWm3fNaue%Fw8u#7zR@} zMofn%+7O&#t8JKbCzR{_>P=kT-E!P1!&4d=jSZy+t$OM5Y>)dws+e9-0 z^AyC1C8Qz(6HM>uF7;SF7+y`qy?+2k7!QBJWa0%Fk>z6|wFiUIWk2#BOpQn^_h49E z|8$;%;ns%+vn4Q#XJAy)gE2k~7?8lN4+EwjryYFk!3;hIFt7IU2R>Ip3=)Ybb^rhX M07*qoM6N<$f@vxE7ytkO diff --git a/graphics/pokemon/landorus/icon.png b/graphics/pokemon/landorus/icon.png index b86a7cf7a84c0c2a3b37df31ace5b3593dc8d446..4b2ec8d4f791e3c238098ad842091aa980cc31db 100644 GIT binary patch delta 460 zcmV;-0Wq8BM#GZ@}^z5bYqn*W^rF~LOqdGf2kL?+o| zH^DSn+!-biFh@?zUD5J1cV-BPD?UTwQ6MN*JB||-E|7S(7^8TA>PjfyfdZ8fH40Q+ z(CQJUOlkq4Jjz3W3n+h*h~96~R6`K7#I8t*vZw(5o+4!SB2YsLR(vc)BeXuPN+<-! z5<_AgFpt|-L8&4I0`!RL1Kd=`O==Mtj#4Wm1yRr`)w(G%I#+>x)nEPgrT_snfqBXM z#N=g3f4>=!rX%J`n2wkeVPxThB4#Jd10cqSjWA(Cf9oJMsFV3-;VQ*;dGP>f@i z7llge9106!WWLG@>GOY(X;Q+DkZSO-TwSV^h1Rfj`MnT*fjNzFygiCXv2w;9@I93C zrw{SWY{@tVideRwd>5|O3()q3Na z*#oFTt*WtrLPbrl4XC>zT`Zx#+?T-<3r_R z>~1xCPO%N_ycL<^|=@R6OHbK;z=ng^Dd)svg!rvyQO%NKh4nfFAbS8+_ ze8lQRPy0oneT1MdQm7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&^R0PRUcK~zYI?UYdq z!!QVhtA@y+c>n+3E=k)pt7c^n+Za^H(;em%{HE!u4;9Yz{Mvy$G~lE`Qvj$A9LNf= zh_E(iZ%&+TLaN-Q4R>p>M<7Y*z}uOGdV~5!3;B11Dl%zFf*cgE;^G@ zBHtqm5pf+OTk?*7vMGKHnoElmd{Sd_3y@MUYFRbdiky&q$i*_DD29Q&bZNGceAR!| zukkRA>Co`7^CQGV$B!^c&kqfg^!y0*H~HaD`^XP>xd(puP sctFn&3-7=2164-2h^0$?U+2ReP;d^mcE0+<7k7zqRe0001qplF?uE@lCe(1Fc60G2B)Bos0evr zON4KzSXxzLZr=eA-HOy98S^H6m+pvnNYgpC400D_b4H5on1vN?%dh|byZF8=`||~< zpk-osjs>#A%h(RKjvcyD$eYZDmIp-SCW?6{p{_yZ80X?+uK57#0Wv0000?P=%ZT0004VQb$4nuFf3kks(BXNQv!~F%H8p2t{K) zRtH=B``@+@r&}P6x^xI0dBT9Lw{1_{5Be$d%}))qMpg)$nQD$O(%QRb1Wf^ygbWer z=n24q35aM`f}X}0l9nJMW^{1|_;iF|PQT)`K&*%_?;&krr+gD5pOUm@MS-|O&6(nc z<`vAcMXmR=qKQ~kwi7*>a}hAIoD*Ct$%#Dm#6QI&kOeG(Grl|c9r vNDdqVDHO8=Vzq-V1;Sb&`=_ga&E0qd{9Ft%EcQkh00000NkvXXu0mjfLgi(g delta 232 zcmVC!igTEHIJi z0y7WcoB3yQWc4LTaIFQMJ=yH94mc8T>zBLh-Q^Qv(cv7vDUJgmV@5LA90=LGsQfn6 zYg6z1l<|<1jh}IBQ{~rCt1s&81FhGl{s3~1KlsgW? zKnO%*xmY1SbN}0Bz)BIBU6+;;(>aV7V8eU8p131`i@Yk98knfsLW6Bn)nJ{O0|lj- z322Z4nOR^rwjk_ck`GsvoswRF!Mv)^@@!Fpfd#ig3G_v6F(CFzz^Qlnjd+( z2S2=+ycaT?;ym&iXa3;ex5o(+002ovPDHLkV1kf;gJS>y delta 298 zcmV+_0oDHM0`vlq7zqRe0001qplF?uEyT=;E%W7a0Mf-wyg1U4nJfLl%~*`jt+bH wT5T=?)pS~99c{^)!LkWS&`4Klu--A zAPj`t_~1jb-2eZ#OJW^U(+uaW4=_LdnI-b$BN znSiYye>#76JVu=9gO@ITs%f=ZlW% TzqG=E00000NkvXXu0mjf!9$Ej delta 312 zcmV-80muG}1A+sP7zqRe0001qplF?uE04a$=eoy%s_(B*wBM(Ix1 zUdecII_Ng-Eo~-Y&dmmn$Lv`ck>n)Ysl<@{ayrlaxCrxoKRy63ZK=4gF_)hJ0000< KMNUMnLSTZBcZKl(7zj zFbqUvTVi1F{r}(AmjnTc3rp3Z#X|<}adDjJN_pzb1>jm&vr7VIJAuRwCK>=Xx5*B+ zEUM7>wdymVtE#)Yz*QszM8!4M(5u;e456%CWTieJ;cVJVXn=8-Xpo|HJp-HoDX)6c zC;w%mC@H`;*np#S(>_^Td&N1cm@fh*N+hLpcRVI<-T9gIV} bpN)tYF3k;X?=f`q00000NkvXXu0mjf6p(w? delta 254 zcmV3DWd z)K_DN$qr#t4d%d>FDPZ&G0<(D$WBDkHEo1_khJ2z_cP z?x$WT8c~rWgw_+SQuGM;O4(r=!|*$?C@%vEB;FnwJl{0}?oKfsi3ijsO4v07*qoM6N<$ Ef;6gf8vpKlR*jq zAqYi-K+F$$|J#l>!ECHyHnRvH?f%2ku$1If)Y-)_c&UsSOvJIFsMQ4~Mrddqf*A+} zD}aZqU`v126 izTGP8QR+PBaRFBoZVhsRUZ+$50000 zXzNF^W%sUCD?8>RIqcWERqtORISlBPS07M4!+^#e1%$v5P7do|{a=rg96tQ#N9GvQ a9{>QdRdQJDO}$3|0000Kl*lRxL{uFz=wxuG`jKI%KpRDu zr9`p15=|5ft4`kmXar;pvKnw;NFo1nSm`$jO`P*Bq1(=!nS(&*7l6fxX%Yf*1H^7Z zlm@5)5`izElqFDq>JEC~N*||hL-)d-iUYJ%R?+BYfenM67smxsUPV33L!A3fJ_vq6_74J zZ5I#&9teoO|Gfg@0{=unT002ovPDHLkV1gez BeGUKs delta 281 zcmV+!0p|Ys0^gTjzBzx&~;PKjU^zCb|1%?&0~K6 z`wHx~8MxHa^)`cau@J63Oa3gtDO>=2z6ZN?xOA%J`N9rE^LZ)}^zaNAir7yyZ=qHG z*Fn`|u!1?!2nGC9gl#~GX{p*coDX8X+SxUOFgpF0moRyPd@c+v31j4AVW9ewFj5PH fo=O<~PM9Yk90~uj^~(AH0000Kl*tam zFbG7WIG7vr|9@MSNOb~ss~)Nz%F#0{#>v~Ze|!+Y3tg}_nZZrd>X;kQRD;M=7umt$ zQ8_?*?mBBA&j}_pm%BNn-5t=h9lf*cuBSd=Xlj>^##{~paBo&!i!fD_!uoeL*_cE} zHW0DT=l5Wwjf0MV$TbIiX~`khp3V`G=CBjdGGRcvN$fE?oR(XGodx5r)4JnO_u+R~ z1X_BCRBEmN<2T|heynU^m=fg7Mg9K=T;Sj8lrSrRc;P2N3Y}yGNKKdlAQfRQ04WJG z0Hh|&0Fat6BS31x3;?MJa{)+2n3E4j@Bv7KF+Mmzyg@J_=2jxI27pu>xA;CE9?tm~ UD`uDpasU7T07*qoM6N<$f>7#-h5!Hn delta 305 zcmV-10nYx61N#Dy7zqRe0001qplF?uESwi|0CuUt~vis{Y%Y4y79uN~RkY1$x~6q#%2qye`e zNWlbP=KvEiBLd7)W8(WW_{{F50>3-C2mV9}iC_G2dD1ckP&_i9$G(Ct@#*Mz*jIlr zzcFhYPle2{JoKXvQf8sv4ZYS(r3wLi08;ztpa-y$l5%wkBYUYuNk}65&CVV}3w~_% z{~X#rRsX(a3Q_|o5Ue2jBgro4Cao}(g;`VPX%WU7gBD@18kB`G24!K4L0K4MP!`4- zvHfDJO8&%-oy=x7O^X%{X<16m_xXJH<^G3W%Iu&$SNM}I&Ubzv4K6CF zcZ08v)XgcUt@>!_4hIF3yrPx#g+2^THxr~P0xLEQQGi-_tksdwZ7pDirdbv!Fsq}x zAPrI-1}fC~!M<~UG!<|NzM(M;3Y5CkO+5;zT2%3Dg1<`PjaY*^6?f!n$zE9=(AF#Z zQ=!Dy4@L*l_5NH1t$*q$a$Vz(@wR{VFLbSXdSc9?Y%fO2l2{Im!<6L0`)KLJFM z3BJdF0EB!!c#8i3$V2?Y(ExIcf8|4NAB;G}zwsfoH$DVFUipv!dErBC{oncU3-sP3 UMNJ<%QUCw|07*qoM6N<$f_;?Z$p8QV delta 456 zcmV;(0XP1q1d#-g7zqRe0001qplF?uE7!G5CCA_;NHQL2P++J zNhO5eEnYH2$vcIGO2~c(vm%PZ8igJ|j-9M+ku1ac4&(F3*k6zMwuZ)+yN?Xg zgxIs-*8uF%Lkjp>5(W_idKP-7^>z4*ZC=JM07+I*~eae4tZ@)(m^uv&aqar5LSph@6fC zQOYlwwxIV&3Zz|8IDN%5`rHKCfnLEi1?uM;+qQO~f~odpJYBny>(j;8PTkK+kH*Ah z9o5ll>!xK5N~?Lg^Xb{z+c|a~hG&0(#R$~@hxTkcfUh+r5H4@ODZWHMAuM$;ZVSw>`5*h5*XEPIb<|2TMq0& yVD!p?d=MC`R}SRE>Ng+r^yZ`UuRb9D#>WrNr8MZH*j(=b0000Kl*tOi zFbqVk_RUsC6nCdMdKw*YqvfTQY)K8Sf&U>#C=C5K1tZ|N=-nX zK2^jXa02BBWWaU;M6U$IeA`^ia+$>ls3c&f`-mz79s?wOt|A(k+<-l!TqOG#!~x`X zs)N87qkBX!dw>OG;KRd7iE}}~+?gbwTuYUqMn*&ynp~HLrFj&S3x{{8s+W5>2sHHG z7yr~TWeK!5_N|}MT_FEbAVFLTq$Vx}QddlTxh#;g9~K4DzS0j5N0$$&;MdZy00000 LNkvXXu0mjf@rZ4H delta 250 zcmVuK57zqRe0001qplF?uE zey3S4Q A4gdfE diff --git a/graphics/pokemon/scraggy/icon.png b/graphics/pokemon/scraggy/icon.png index e63301f36bcf3c7ed744c5691dbdaa5edcc04c48..f1baf8d0783dcf1f9f38795ff9905a8118403140 100644 GIT binary patch delta 207 zcmV;=05Jcs0-6Gl7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{Sm`OxIR7i>Kl)(za zFbqROeX!Mo_5XjncxxGh$gtC3L{}-UE$AC#>wiVEch9p4Fc7T|AObQ`ekoLf=71UG z2-*Q-6Bs^u{t%K4i)VpSit4iAdnE3H`(N8^Nsn%hy$b)&j@C|Vu5f86+uLt z2IIa?8vyGa0$SB+4qYc}p(!2OVu+yQVjXKj+KluHW4 zFbqQrRSfZfb^qIr5@u6~-Q|=LZS~@B@NsNCRU~WMtO8`CB4`mXAR~zQc!Z)PgaY_L zvK$25y9=;&CzL-G>q2S${1I4IA%Mdbg=Hh^VLqq#WE3K14*5wRWZ>+rnkALqTRO=} zn0YJLHDcT>y#5d*TU!_H1M;Q=a(5s2kNfZivBC^#eDwZM00000NkvXXu0mjfCTmi8 delta 175 zcmV;g08sys0{Q`v7zqRe0001qplF?uE3~g2Q+>fssMkQTRw`w zw|8zX$V&MAcD+mUM;6Fix9b_QiZ5O(S3S!|68W-f)v9$!#`0%c0Y%*WkpzCNTD-~y zNx*N_s`V?8o%ZGNs#VjF1^E9tPepYq{}QhdRL}fMTZ-npC0^+M|IaWA@PUz)V9*=W d2R{Yr0|0BIXTmgKRLc&- zAPhsLRGJjx|Nq-LJhVbXr%5|ai#QS232E#Q{_zUn9YBD45DrOcKumb3?gX@3qmvOX zl>utkNJ);VU}tE6U3CT+g(5~KNI(Xe5g>&=Du4ttL#4394tNBGB9X&-@d)f?Vnx)B zM_}*RBHK%G)9g%tm3hq)8CgWV!SgDLWIOD@>mlGl7Ud{d!s)V=;V5#3|NpTeThwto z2&+;^wwuksZi83@aOgoqS|Ye6Ldd)fXGE}Fat1wtZu9?G#~1D4j2gaZ;tqYAXM^bW z&;eJ2==M*y!>Uksw)&+_*K`l0+6zrV`=_w@e+N2VGh>4XU<00000NkvXXu0mjf8quBJ delta 358 zcmV-s0h#`%1F!>-7zqRe0001qplF?uEZrE5JmR}bBG+kQfQNO zv{Yz=ofHP76rP<1SF4>Y26kB__nyjnnw`Oao)Aw{yat+A2zHXj zA2b1s$@T#232574Nc7vi@Erq4)C|g_iWJE0j^@2hc2JPw++l~L*sv^Xx7VZ@#tDDU zF9ho*YtfIeYhI*$z54Gpc#5J^<^KWj+xOQAjh_LZc=@;*w|02+_x=m6L%`;I{-H%M zK#aHvGf6TPfLqtLv;t>I4#0rKvlq}B)VxBsV?Kp7MP`~@42d(3x3tH<1CS-T z4v3Vn=XVBWd{Cly=LZujt3&V3Z--J0IxG#s)au|30R6?vW15WULMt9=j;AJdCX>_Ddj$>so|G>#!fyKg31Z%uLg|&Hw-a07*qoM6N<$ Ef;5w+C;$Ke diff --git a/graphics/pokemon/thundurus/icon.png b/graphics/pokemon/thundurus/icon.png index 9295bb7526a977998ece954ea069cab5a1feff33..9b116651160765ef9d259797932fde36d79383e6 100644 GIT binary patch delta 455 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 S^{G7o0000Kl)Vna zFbIT$0!s$&{ol6Wzgl3oODnZfZg2+3aai(q9Jl^fz?-_fZh(x2wUrsT7FOuL5veL> zt9f)S+W`)B68Cj?tvw+D%u&iAbqIxoUScqF`I<@Ez|G04q}EZ_h zg6s&>39=NKi=4z(j)3ZomjZ6)-{&6K=o=K_xJ6f=YcP=mp1~eCfbZk<$PG002ovPDHLk FV1oGta*6-| diff --git a/graphics/pokemon/tornadus/icon.png b/graphics/pokemon/tornadus/icon.png index a95eccdb309843c52a329a9cc99d8b737386ab3e..271e4c6b691a45a06dac96873b52aae1bc3037c5 100644 GIT binary patch delta 457 zcmV;)0XF`P1d;@h7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SkV!;AR7i>Kl*^KZ zAPht=k5md4o&W#a=>Q5>#oa8XYNEx$ZXkqsKA%4v_NGy^w0Bsd*oON&Uzrlcm{R<9 zSgjOI4V04WH$$mrq8cb8UUg3OKn{u+;lt`Mt5l6HR1rWm1DFnOU$o_Du?Ry0=sOM6 ztM()C^hu=FoFrp^S%B#s6-Y^nRgUWprJ^qYq>x%j&RB9p+rfnEx+Ss-SoDvn=U|!X z!7VXRmu#!StC&^kP$Wp;NmOkbN^>+rdzcsPR$%95GbN>p|4lKrd5ohwqMmY4<&5x`SI?8paFlP0*&h z!ERk^{1{tUy!P9%4d15Oefr{h`(^&)7QaE5-obmqG{n3SrvJlR!VJXh2s07$Oqhw7 zXTnUxYzQ+Evmwlhm@Q!jV)lgTh6F&xwuif-LW|Y-c~qpd%$GLSe+gso?b59N9ve?=%(a47=*#*{)VKjV#w8YsI}rjXcJ~P zV7}tK$9sEE04uJI{|biv-}MtgcGjLCR?U4uteSX&>Kl)(67238%EUwMSnPcJ;m{(6@l?07nBgtGm#nPkmT2 zUbPLoLIddHMI9Ieil`GRI5^}k& za#S#Z1TbXqr79v|#_TRWhMd!H!lUq8u*sZ2-gbY^qrcE^2S_|z1W4}xDnJmsv_-nnVm611M|F00000NkvXX Hu0mjf3aoL^ delta 241 zcmVJ~PM`uKwCCaULvMB{(f_kke+3|WeS8Ep& rhVem9U=of4b=g>_ypVD##{aDzTySRI6asRp00000NkvXXu0mjfp66&U diff --git a/graphics/pokemon/vanilluxe/icon.png b/graphics/pokemon/vanilluxe/icon.png index a7814563b43dcecc853e464c5a9bead356477096..c2f85c1e31a6b8efcc4f75844b2b09fc038c7abb 100644 GIT binary patch delta 305 zcmV-10nYyP0{a4x7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S`AI}UR7i>Klfe#z zFbG6VVNM+Q|G!;2t!_%SZanNsjMm62LSeS;wFl|6+=*+i@95D-ZQ-cR?%NO>{s<)>3>&$*Z;Nr8~JbfZ#VL< z6Tg&yoz=Dcnc)NZPcZt~5Jl$(a|pB-;NyzI zQhPOIDE3O05ETVG2{y1UQl#2^38Z=OhcWYs-b%bCV1lPJTVaVcv5y7? zO_TETbvJy$Ptcv+0iYF{Fji$M6U8ef`u^P&82yLCrkqc|$`Ie8oD&*4p-*B~SUH$Mo zuuI!6Zm)?vH&?cF65lNOGobmklnb3gR(69*u6+LFE{@h2ZsH795{&sElC_` wPUFD8#KA`p;}8Zr;t&Qq;ti_@%07*qoM6N<$f~+xzZU6uP diff --git a/graphics/pokemon/virizion/icon.png b/graphics/pokemon/virizion/icon.png index 4f7390e1f0bc7ba9cb8d5fbf9b3033ef1512f83c..68c0abd73026cb1b1fb2829aedf1d1ae3796f02e 100644 GIT binary patch delta 285 zcmV+&0pk9l1Lp#e7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&^R0Od(UK~zYI?UYNB zgfI+4N&IQAtoz@#?S!i7nmDkfdL~;vgd>BF9lPVIEmjt3@XYZ*}P-^ffE*J=~oG?4EkID delta 344 zcmV-e0jK`w0-*zt7zqRe0001qplF?uErlCe(1Fc60G1}6{6ir@iQ z+!+vRG7=%BVQYnmPnqh0M`(pQ(PykgB&IYaY1FAl8j1L9Rw{1uZ~N}|@6YqjRphJz zD@Vv&LEqUzi)0^ZOL0LSnAS((V?s?j9NPtWD)l3Pz%oUZ3|Am{y7`#IrUl4@47Y!L z4$0ADzP8>HMXQRx2r%1vq$?))iX!8~t9u&{OnAX@iWm>VmsD6>`X-j+6;AKvHR+*g z86nBF84SxJuMRWjZ2$RIwVDfi-37_LcPp@Bw6=S}`G|k1UnW}DW*fUgKR6&x% zAPlR^4CcVd|Nm`enlxZ1>1Fp;pOQ!@#vnZ&zgo)7?(tgXD`VC$i;`BI@`0<@%rN1* zygzO5f{#CV8`K?-$ONSTM8rs|PKYh24O|4(RHFbHs@67wGZ1!d2DMJO3w2x~;G$Hf zLT~V1HLkA;MS-Ayaed_z;vQ90_`Pr(Kq=5=u7g1ZFF+hum35Hjx`Xi?H1b2AhFxl`)rF2yz+zCK;Bag1c3vEQ(Rd7kivemAZd zw#(h$&tLs_-5tPg+Dm-o%VGah#$x{zF@tc}KS#_6n8W^TIbw#jCi~YEF*N*a{~R$M z53~JK#2B#HpWa+?(O`d#8Hd&WCjk=dp93V?KL^Na{~RET{d0hL+JEdXdKw_I+n)_v r43O>0xc%ShaN+MS>2PTMX*#?BeCHWnrL$_l00000NkvXXu0mjfLxjBZ delta 389 zcmV;00eb$|1J47H7zqRe0001qplF?uEq&aC3L60Ro3+wfK6VM&%9?^;JLW$80%N1++q<^myE3$(`|!` zuE!(m*M*dgPa*YNw|adkWgafa&ni8CYTe-Vp}MBUS1)O32Qfqy9}xENhrJ9W_24j)R?J&tT&@@KbmO={fLIAf=7t zAfvI~bI>jBJWAxS!vqV)acCo$0y#u5EpoVlK@JfNcn%Rv0**tz07ET@sh9#7+oADd jd632PlLsCy?Kd7jcC*^pca&b100000NkvXXu0mjfqIR*~ diff --git a/graphics/pokemon/watchog/icon.png b/graphics/pokemon/watchog/icon.png index 9ea2f1330861e104e87b225c4fd50e2e9400ef5a..4051ebde8b71f9f4a58c1da358a2315cce32c7e5 100644 GIT binary patch delta 340 zcmV-a0jvJA1D*qr7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S97#k$R7i>Kl);X} zFbG7!mWar~^Z$RlKvHdONF!BMPo;+{nb8=7@`!%*MgcdvjF%P+7LjWUT()AjfRYdD z>KGnE=%X(VY`g0_5AlHBvjM|&HHQZ@`(ZI`yzS5<0R35b|S_szPrr=K;Wk#;sfi#3bCK zrq+6II5x`l$`Na3spJ1`c?s#HJHw6stFP2o`9T>W6F>ZULCDMx$_SbG5&D9VnIA+M zAu~UyK*+=ossQlJkLvrM_)!Kt_;EIw3G&2`D~O%^@W1ji3&z0@i>SYF8(#3k+T1HvsuKAN~Ma?-DTT2m%WL0000 delta 361 zcmV-v0ha!r1G58=7zqRe0001qplF?uE@D7kQbAsrBk1&6g*^T-2w&{pkZb z0_HF!@QGqVIz;3ezy~TUTGaj5kotMW{X($*(SuX*zB|BbwH`pZwYydyZ-)e+oWFmi z8kYVqeJ15hgBb5&WZE!j#*1>Yf&~d zVEwW?uR8+LkfhP09hcLY!8!)m5spDmVE0K|DVsB1o{# zplL#-K#)QT3<8Cio1p*xUa6`JgduYK(xh&>x{2zi%l-HTZ>O0s;z+3w00000NkvXX Hu0mjf@fN3J diff --git a/graphics/pokemon/woobat/icon.png b/graphics/pokemon/woobat/icon.png index 354353e885e38969667231ae5d07a79acb8d47d9..c3640d5ad0786927671a74c72b046f028f54ae73 100644 GIT binary patch delta 258 zcmV+d0sa2L0?h)D7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S%Sl8*R7i>KR6!2I zAPg%z1&Hkb|8{{g#0Ye^X`1S)7i>ZZvXA4&FM|9)hf4tw27xa|7;L!_z8X;^NJ{17zqRe0001qplF?uEI443~ z#|ma)#6pX0r=*W(9*EdlqIl-EKs*td0N}VsY)Ck)1H&+mE0eATx~v<$%r?7kwbo*s z0XXk;odabLb@4u1zW1Mx!~EW@(;=&q4k_YwNFzW_hc^8!7_Woj@cm$%4jVEOK;?B1 wq6oYWb{>G@Nr!9Zv)2J~!JQ6JtpCkC0iaxiI5gyV1^@s607*qoM6N<$g24o9eElMpVFv#YH@)<*>qC`>F<_keTKgZ%eBBD9uRD>cc7=+KgvS(&oBcel zsUn9_dn&~gePyET-R2*OP9TVo&bq7;t+Eiry2P0vPof^RZU43fO_c)r`&14C^{c?1 zXu=rZ29{gYPs99wvc}P(sXrJ;(ld=I zpWT$IN-a>*$fHr9H400000NkvXXu0mjfjpoKw delta 399 zcmV;A0dW5M1K9(R7zqRe0001qplF?uEh?klIwKjNBa0HDWgw=>#TW25mD`X@BSIr5r}#WXc`K-GV= zuATo=<`{g7KzN`>wFw4BShEIgl@vUySgOI%IG9+S6&=o6t;VTd>77f^Ik`+xTa>U@ zK!IcU&{L3TgKa(f-jH_5@aOvHTV%W2kq!MO$WZ&k!M9%Y@0U>4-UP1hK2j_r^EKpH zz~su6iU_)rj+L8Hz=$r-D`WvP&~tkiS-{}TIDsk8ZFi|;;&E~aw}n*S-=?ghKrA` t%G)+D4lBE9XbBZ#}7&S7{cUkE>-{l002ovPDHLkV1iOYx4-}Z diff --git a/graphics/pokemon/zoroark/icon.png b/graphics/pokemon/zoroark/icon.png index 08d5206f3bf1c434dd0a06819cc6a94cd2487d5d..338a576a4a19c8d1a7be3bced263f4d324c7acce 100644 GIT binary patch delta 359 zcmV-t0hs>G1F-{;7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SFG)l}R7i>KluHi6 zFbqUvkg~9XegE6yaniLKm@HHM!l1H0m<*K-YGI-fNhG-@8MZ zU{MJUH}IYUVSciIL8}*$_6QDSu>V*kp}sQF))d3bmH<{HFhj+<3r3iZ{%CuIfx>w4 za7R~chIQ4@ZPSGDtdrDXZH(Nn9s5Yxc^*>LOGCMSasTln@d3c#gUR2f378Zy2f$>A zIRGX@Oax4dm@{CODks3KT?D{vh|!3k2^a@NAjkq3nglsUB4`6l2gD%ABOs_-Oy3Ol z)LMkpz=IdlsvVOu0Wb>!3`Ko{5?ne2g@hiV zN6ONnLvkiB892yyXxA3KK@l$85vQtO)35s%%!4Ha}zMh-rZ->aR%!yaI zlPU!ujcQL!L`*K+1W(S8yH#X5^o~L|EBUZRr(O70iCb*b*aW7tBEDhvr67+*fcAgY zvL_0_T#kYkZO%+O9CJ6_BL`z%h)-Yahf-lA8cgIapP7mvT@!melfVF}?9s1jF^)&V zG)rcmVr2;IFhI1GknEu2R3*iWWR@m2a##tlvibi6h%EEuj>}vhsk;1-3PIhx39P=N zuV?^6)R(uOD?IHsN>!3sct#ay#tv@oabxQyfDccW3sS>`RK&|;j$_*ise~v2`)@6| zA|=8Kj7}3iCZtqBR-u#k5h+!e6WaaI2-A4Ub8n^V3LoNK5u{bTWaQ)SI5jCtd;34G grtDWXu3Vhs2jjZ+NZw28Kl+6wU zAqa#u3#TT``@d}ge0fUbPMV6y@ZY7LP0Vo5)}d;yo`p#T zv51zlNbo|<*%(x{oT6iFRP`29TH1nc5TBqL1oohNs{`D0TPZ%y&;-P8C@WE7;*^hv zI>3^BzgcKL3=7nM7zX=3i6|QEp;!zX=f@uT|2CV?M3D+EP;7=oswa!2W25EQ@d vs{#a_5KId`bb!c`4+B6pe1LYs5BTr|uaFjZ1^bxY00000NkvXXu0mjfzbKzs delta 342 zcmV-c0jd6{1E2$t7zqRe0001qplF?uEb>!3`KPVf)@}^k-1Af z2SuZ`I%TGu#z1FFMC2)eSkks^C2N5nn9P;X*lU7ZOy zk(mw$B8r-NK`>!%Bg%F(I9gPLovR(u6rqQ?gDjYYLn~ooqjZtw#B*%+-I-A#ODUAYPI{ zb7=MLGeF$PSfYA1 zA-Nr?6mdaH8d5_<8ny1!5+7HdN47%Wy&(lsLi}JnkfL-8mC-jogsaG;NNoa~6qwop oV|>^JzT;y7CUtzkJ^qG|AK$;aS~SZP_5c6?07*qoM6N<$f?AuFT>t<8 From 48f90a715556d737948f92916862d14a94620aa8 Mon Sep 17 00:00:00 2001 From: psf <77138753+pkmnsnfrn@users.noreply.github.com> Date: Sat, 1 Apr 2023 14:12:50 -0700 Subject: [PATCH 234/428] Update explanation in include/config/battle.h Changed the comment in include/config/battle.h per PR comment: https://github.com/rh-hideout/pokeemerald-expansion/pull/2878#discussion_r1154322931 Co-authored-by: Eduardo Quezada D'Ottone --- include/config/battle.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/config/battle.h b/include/config/battle.h index 66d4b92aa343..24f4ad4f1579 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -183,7 +183,7 @@ // Other settings #define B_DOUBLE_WILD_CHANCE 0 // % chance of encountering two Pokémon in a Wild Encounter. -#define B_DOUBLE_WILD_REQUIRE_2_MONS FALSE // If set to TRUE, when the player only has one Pokémon in the party, randomly generated wild battles will always be a Single battle, regardless of the number used in B_DOUBLE_WILD_CHANCE. +#define B_DOUBLE_WILD_REQUIRE_2_MONS FALSE // If set to TRUE, Wild Double Battles will default to Single Battles when the player only has 1 usuable Pokémon, ignoring B_DOUBLE_WILD_CHANCE and B_FLAG_FORCE_DOUBLE_WILD. #define B_MULTI_BATTLE_WHITEOUT GEN_LATEST // In Gen4+, multi battles end when the Player and also their Partner don't have any more Pokémon to fight. #define B_EVOLUTION_AFTER_WHITEOUT GEN_LATEST // In Gen6+, Pokemon that qualify for evolution after battle will evolve even if the player loses. #define B_WILD_NATURAL_ENEMIES TRUE // If set to TRUE, certain wild mon species will attack other species when partnered in double wild battles (eg. Zangoose vs Seviper) From f292fefca34db71fb44dd675ce1bb0fa8e0dc01c Mon Sep 17 00:00:00 2001 From: AgustinGDLV Date: Mon, 3 Apr 2023 09:18:47 -0700 Subject: [PATCH 235/428] fixed bad switchinabilities call in TerrainSeedLoop --- data/battle_scripts_1.s | 1 - 1 file changed, 1 deletion(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 200a04461085..8a47217ff43b 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -8839,7 +8839,6 @@ BattleScript_TerrainSeedLoop_NextBattler: addbyte gBattlerTarget, 0x1 jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_TerrainSeedLoopIter restoretarget - call BattleScript_ActivateSwitchInAbilities return BattleScript_ActivateSwitchInAbilities: From d9ab2d1976468d8d3f251bab267205a619c53924 Mon Sep 17 00:00:00 2001 From: AgustinGDLV Date: Mon, 3 Apr 2023 18:53:34 -0700 Subject: [PATCH 236/428] combined TerrainSeed and TerrainAbility loops + added terrain tests --- data/battle_scripts_1.s | 44 ++++--------- test/terrain_electric.c | 63 ++++++++++++++++++ test/terrain_grassy.c | 71 ++++++++++++++++++++- test/terrain_misty.c | 80 +++++++++++++++++++++++ test/terrain_psychic.c | 138 ++++++++++++++++++++++++++++++++++++++++ 5 files changed, 364 insertions(+), 32 deletions(-) create mode 100644 test/terrain_electric.c create mode 100644 test/terrain_misty.c create mode 100644 test/terrain_psychic.c diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 8a47217ff43b..ea7ef493c5b9 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -2610,8 +2610,7 @@ BattleScript_EffectPsychicTerrain: printfromtable gTerrainStringIds waitmessage B_WAIT_TIME_LONG playanimation BS_ATTACKER, B_ANIM_RESTORE_BG - call BattleScript_ActivateTerrainAbilities - call BattleScript_TerrainSeedLoop + call BattleScript_ActivateTerrainEffects goto BattleScript_MoveEnd BattleScript_EffectTopsyTurvy: @@ -6867,7 +6866,7 @@ BattleScript_OverworldTerrain:: printfromtable gTerrainStringIds waitmessage B_WAIT_TIME_LONG playanimation BS_SCRIPTING, B_ANIM_RESTORE_BG - call BattleScript_TerrainSeedLoop + call BattleScript_ActivateTerrainEffects end3 BattleScript_SideStatusWoreOff:: @@ -7346,8 +7345,7 @@ BattleScript_SeedSowerActivates:: printstring STRINGID_TERRAINBECOMESGRASSY waitmessage B_WAIT_TIME_LONG playanimation BS_SCRIPTING, B_ANIM_RESTORE_BG - call BattleScript_ActivateTerrainAbilities - call BattleScript_TerrainSeedLoop + call BattleScript_ActivateTerrainEffects return BattleScript_AngerShellActivates:: @@ -8828,16 +8826,18 @@ BattleScript_SnowWarningActivates:: call BattleScript_WeatherFormChanges end3 -BattleScript_TerrainSeedLoop: +BattleScript_ActivateTerrainEffects: savetarget setbyte gBattlerTarget, 0 -BattleScript_TerrainSeedLoopIter: +BattleScript_ActivateTerrainSeed: copybyte sBATTLER, gBattlerTarget - doterrainseed BS_TARGET, BattleScript_TerrainSeedLoop_NextBattler + doterrainseed BS_TARGET, BattleScript_ActivateTerrainAbility removeitem BS_TARGET -BattleScript_TerrainSeedLoop_NextBattler: +BattleScript_ActivateTerrainAbility: + activateterrainchangeabilities BS_TARGET +BattleScript_ActivateTerrainEffects_Increment: addbyte gBattlerTarget, 0x1 - jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_TerrainSeedLoopIter + jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_ActivateTerrainSeed restoretarget return @@ -8852,25 +8852,13 @@ BattleScript_ActivateSwitchInAbilities_Increment: copybyte gBattlerAttacker, sBATTLER return -BattleScript_ActivateTerrainAbilities: - copybyte sBATTLER, gBattlerAttacker - setbyte gBattlerAttacker, 0 -BattleScript_ActivateTerrainAbilities_Loop: - activateterrainchangeabilities BS_ATTACKER -BattleScript_ActivateTerrainAbilities_Increment: - addbyte gBattlerAttacker, 1 - jumpifbytenotequal gBattlerAttacker, gBattlersCount, BattleScript_ActivateTerrainAbilities_Loop - copybyte gBattlerAttacker, sBATTLER - return - BattleScript_ElectricSurgeActivates:: pause B_WAIT_TIME_SHORT call BattleScript_AbilityPopUp printstring STRINGID_TERRAINBECOMESELECTRIC waitmessage B_WAIT_TIME_LONG playanimation BS_SCRIPTING, B_ANIM_RESTORE_BG - call BattleScript_ActivateTerrainAbilities - call BattleScript_TerrainSeedLoop + call BattleScript_ActivateTerrainEffects end3 BattleScript_MistySurgeActivates:: @@ -8879,8 +8867,7 @@ BattleScript_MistySurgeActivates:: printstring STRINGID_TERRAINBECOMESMISTY waitmessage B_WAIT_TIME_LONG playanimation BS_SCRIPTING, B_ANIM_RESTORE_BG - call BattleScript_ActivateTerrainAbilities - call BattleScript_TerrainSeedLoop + call BattleScript_ActivateTerrainEffects end3 BattleScript_GrassySurgeActivates:: @@ -8889,8 +8876,7 @@ BattleScript_GrassySurgeActivates:: printstring STRINGID_TERRAINBECOMESGRASSY waitmessage B_WAIT_TIME_LONG playanimation BS_SCRIPTING, B_ANIM_RESTORE_BG - call BattleScript_ActivateTerrainAbilities - call BattleScript_TerrainSeedLoop + call BattleScript_ActivateTerrainEffects end3 BattleScript_PsychicSurgeActivates:: @@ -8899,8 +8885,7 @@ BattleScript_PsychicSurgeActivates:: printstring STRINGID_TERRAINBECOMESPSYCHIC waitmessage B_WAIT_TIME_LONG playanimation BS_SCRIPTING, B_ANIM_RESTORE_BG - call BattleScript_ActivateTerrainAbilities - call BattleScript_TerrainSeedLoop + call BattleScript_ActivateTerrainEffects end3 BattleScript_HurtTarget_NoString: @@ -10183,7 +10168,6 @@ BattleScript_EffectHitSetRemoveTerrain: setterrain BattleScript_TryFaint playanimation BS_ATTACKER, B_ANIM_RESTORE_BG printfromtable gTerrainStringIds - call BattleScript_ActivateTerrainAbilities BattleScript_TryFaint: tryfaintmon BS_TARGET goto BattleScript_MoveEnd diff --git a/test/terrain_electric.c b/test/terrain_electric.c new file mode 100644 index 000000000000..b5608e661bf2 --- /dev/null +++ b/test/terrain_electric.c @@ -0,0 +1,63 @@ +#include "global.h" +#include "test_battle.h" + +SINGLE_BATTLE_TEST("Electric Terrain protects grounded battlers from falling asleep") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_CLAYDOL) { Ability(ABILITY_LEVITATE); } + } WHEN { + TURN { MOVE(player, MOVE_ELECTRIC_TERRAIN); MOVE(opponent, MOVE_SPORE); } + TURN { MOVE(player, MOVE_SPORE); } + } SCENE { + MESSAGE("Wobbuffet used ElctrcTrrain!"); + MESSAGE("Foe Claydol used Spore!"); + MESSAGE("Wobbuffet surrounds itself with electrified terrain!"); + MESSAGE("Wobbuffet used Spore!"); + MESSAGE("Foe Claydol fell asleep!"); + STATUS_ICON(opponent, sleep: TRUE); + } +} + +SINGLE_BATTLE_TEST("Electric Terrain activates Electric Seed and Mimicry") +{ + GIVEN { + ASSUME(P_GEN_8_POKEMON == TRUE); + ASSUME(gItems[ITEM_ELECTRIC_SEED].holdEffect == HOLD_EFFECT_SEEDS); + ASSUME(gItems[ITEM_ELECTRIC_SEED].holdEffectParam == HOLD_EFFECT_PARAM_ELECTRIC_TERRAIN); + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_ELECTRIC_SEED); } + OPPONENT(SPECIES_STUNFISK_GALARIAN) { Ability(ABILITY_MIMICRY); } + } WHEN { + TURN { MOVE(player, MOVE_ELECTRIC_TERRAIN); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Using Electric Seed, the defense of Wobbuffet rose!"); + ABILITY_POPUP(opponent); + MESSAGE("Foe Stunfisk's type changed to Electr!"); + } FINALLY { + EXPECT_EQ(gBattleMons[B_POSITION_OPPONENT_LEFT].type1, TYPE_ELECTRIC); + } +} + +SINGLE_BATTLE_TEST("Electric Terrain increases power of Electric-type moves by 30/50 percent", s16 damage) +{ + bool32 terrain; + PARAMETRIZE { terrain = FALSE; } + PARAMETRIZE { terrain = TRUE; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + if (terrain) + TURN { MOVE(player, MOVE_ELECTRIC_TERRAIN); } + TURN { MOVE(player, MOVE_THUNDER_SHOCK); } + } SCENE { + MESSAGE("Wobbuffet used ThunderShock!"); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + if (B_TERRAIN_TYPE_BOOST >= GEN_8) + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.3), results[1].damage); + else + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage); + } +} diff --git a/test/terrain_grassy.c b/test/terrain_grassy.c index 77f8a99271cc..cf83048750e0 100644 --- a/test/terrain_grassy.c +++ b/test/terrain_grassy.c @@ -15,5 +15,72 @@ SINGLE_BATTLE_TEST("Grassy Terrain recovers 1/16th HP at end of turn") } } -TO_DO_BATTLE_TEST("Grassy Terrain increases power of Grass-type moves by 30/50 percent") -TO_DO_BATTLE_TEST("Grassy Terrain decreases power of Earthquake, Magnitude and Bulldoze by 50 percent") +SINGLE_BATTLE_TEST("Grassy Terrain activates Grassy Seed and Mimicry") +{ + GIVEN { + ASSUME(P_GEN_8_POKEMON == TRUE); + ASSUME(gItems[ITEM_GRASSY_SEED].holdEffect == HOLD_EFFECT_SEEDS); + ASSUME(gItems[ITEM_GRASSY_SEED].holdEffectParam == HOLD_EFFECT_PARAM_GRASSY_TERRAIN); + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_GRASSY_SEED); } + OPPONENT(SPECIES_STUNFISK_GALARIAN) { Ability(ABILITY_MIMICRY); } + } WHEN { + TURN { MOVE(player, MOVE_GRASSY_TERRAIN); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Using Grassy Seed, the defense of Wobbuffet rose!"); + ABILITY_POPUP(opponent); + MESSAGE("Foe Stunfisk's type changed to Grass!"); + } FINALLY { + EXPECT_EQ(gBattleMons[B_POSITION_OPPONENT_LEFT].type1, TYPE_GRASS); + } +} + +SINGLE_BATTLE_TEST("Grassy Terrain increases power of Grass-type moves by 30/50 percent", s16 damage) +{ + bool32 terrain; + PARAMETRIZE { terrain = FALSE; } + PARAMETRIZE { terrain = TRUE; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + if (terrain) + TURN { MOVE(player, MOVE_GRASSY_TERRAIN); } + TURN { MOVE(player, MOVE_ABSORB); } + } SCENE { + MESSAGE("Wobbuffet used Absorb!"); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + if (B_TERRAIN_TYPE_BOOST >= GEN_8) + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.3), results[1].damage); + else + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage); + } +} + +// Magnitude is not tested because its damage is variable. +SINGLE_BATTLE_TEST("Grassy Terrain decreases power of Earthquake and Bulldoze by 50 percent", s16 damage) +{ + bool32 terrain; + u16 move; + PARAMETRIZE { terrain = FALSE; move = MOVE_EARTHQUAKE; } // 0 + PARAMETRIZE { terrain = TRUE; move = MOVE_EARTHQUAKE; } // 1 + PARAMETRIZE { terrain = FALSE; move = MOVE_BULLDOZE; } // 2 + PARAMETRIZE { terrain = TRUE; move = MOVE_BULLDOZE; } // 3 + GIVEN { + ASSUME(gBattleMoves[MOVE_EARTHQUAKE].effect == EFFECT_EARTHQUAKE); + ASSUME(gBattleMoves[MOVE_BULLDOZE].effect == EFFECT_BULLDOZE); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + if (terrain) + TURN { MOVE(player, MOVE_GRASSY_TERRAIN); } + TURN { MOVE(player, move); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, move, player); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.5), results[1].damage); + EXPECT_MUL_EQ(results[2].damage, Q_4_12(0.5), results[3].damage); + } +} diff --git a/test/terrain_misty.c b/test/terrain_misty.c new file mode 100644 index 000000000000..dda5253f2327 --- /dev/null +++ b/test/terrain_misty.c @@ -0,0 +1,80 @@ +#include "global.h" +#include "test_battle.h" + +SINGLE_BATTLE_TEST("Misty Terrain protects grounded battlers from non-volatile status conditions") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_CLAYDOL) { Ability(ABILITY_LEVITATE); } + } WHEN { + TURN { MOVE(player, MOVE_MISTY_TERRAIN); MOVE(opponent, MOVE_TOXIC); } + TURN { MOVE(player, MOVE_TOXIC); } + } SCENE { + MESSAGE("Wobbuffet used MistyTerrain!"); + MESSAGE("Foe Claydol used Toxic!"); + MESSAGE("Wobbuffet surrounds itself with a protective mist!"); + NOT { STATUS_ICON(opponent, badPoison: TRUE); } + MESSAGE("Wobbuffet used Toxic!"); + STATUS_ICON(opponent, badPoison: TRUE); + } +} + +SINGLE_BATTLE_TEST("Misty Terrain activates Misty Seed and Mimicry") +{ + GIVEN { + ASSUME(P_GEN_8_POKEMON == TRUE); + ASSUME(gItems[ITEM_MISTY_SEED].holdEffect == HOLD_EFFECT_SEEDS); + ASSUME(gItems[ITEM_MISTY_SEED].holdEffectParam == HOLD_EFFECT_PARAM_MISTY_TERRAIN); + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_MISTY_SEED); } + OPPONENT(SPECIES_STUNFISK_GALARIAN) { Ability(ABILITY_MIMICRY); } + } WHEN { + TURN { MOVE(player, MOVE_MISTY_TERRAIN); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Using Misty Seed, the sp. defense of Wobbuffet rose!"); + ABILITY_POPUP(opponent); + MESSAGE("Foe Stunfisk's type changed to Fairy!"); + } FINALLY { + EXPECT_EQ(gBattleMons[B_POSITION_OPPONENT_LEFT].type1, TYPE_FAIRY); + } +} + +SINGLE_BATTLE_TEST("Misty Terrain does not increase the power of Fairy-type moves", s16 damage) +{ + bool32 terrain; + PARAMETRIZE { terrain = FALSE; } + PARAMETRIZE { terrain = TRUE; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + if (terrain) + TURN { MOVE(player, MOVE_MISTY_TERRAIN); } + TURN { MOVE(player, MOVE_MOONBLAST); } + } SCENE { + MESSAGE("Wobbuffet used Moonblast!"); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_EQ(results[0].damage, results[1].damage); + } +} + +SINGLE_BATTLE_TEST("Misty Terrain decreases power of Dragon-type moves by 50 percent", s16 damage) +{ + bool32 terrain; + PARAMETRIZE { terrain = FALSE; } + PARAMETRIZE { terrain = TRUE; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + if (terrain) + TURN { MOVE(player, MOVE_MISTY_TERRAIN); } + TURN { MOVE(player, MOVE_DRAGON_CLAW); } + } SCENE { + MESSAGE("Wobbuffet used Dragon Claw!"); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.5), results[1].damage); + } +} diff --git a/test/terrain_psychic.c b/test/terrain_psychic.c new file mode 100644 index 000000000000..eb5103f314a6 --- /dev/null +++ b/test/terrain_psychic.c @@ -0,0 +1,138 @@ +#include "global.h" +#include "test_battle.h" + +SINGLE_BATTLE_TEST("Psychic Terrain protects grounded battlers from priority moves") +{ + GIVEN { + PLAYER(SPECIES_CLAYDOL) { Ability(ABILITY_LEVITATE); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_PSYCHIC_TERRAIN); } + TURN { MOVE(player, MOVE_QUICK_ATTACK); MOVE(opponent, MOVE_QUICK_ATTACK); } + } SCENE { + MESSAGE("Claydol used PsychcTrrain!"); + MESSAGE("Claydol cannot use Quick Attack!"); + NOT { HP_BAR(opponent); } + MESSAGE("Foe Wobbuffet used Quick Attack!"); + HP_BAR(player); + } +} + +SINGLE_BATTLE_TEST("Psychic Terrain activates Psychic Seed and Mimicry") +{ + GIVEN { + ASSUME(P_GEN_8_POKEMON == TRUE); + ASSUME(gItems[ITEM_PSYCHIC_SEED].holdEffect == HOLD_EFFECT_SEEDS); + ASSUME(gItems[ITEM_PSYCHIC_SEED].holdEffectParam == HOLD_EFFECT_PARAM_PSYCHIC_TERRAIN); + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_PSYCHIC_SEED); } + OPPONENT(SPECIES_STUNFISK_GALARIAN) { Ability(ABILITY_MIMICRY); } + } WHEN { + TURN { MOVE(player, MOVE_PSYCHIC_TERRAIN); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Using Psychic Seed, the sp. defense of Wobbuffet rose!"); + ABILITY_POPUP(opponent); + MESSAGE("Foe Stunfisk's type changed to Psychc!"); + } FINALLY { + EXPECT_EQ(gBattleMons[B_POSITION_OPPONENT_LEFT].type1, TYPE_PSYCHIC); + } +} + +SINGLE_BATTLE_TEST("Psychic Terrain increases power of Psychic-type moves by 30/50 percent", s16 damage) +{ + bool32 terrain; + PARAMETRIZE { terrain = FALSE; } + PARAMETRIZE { terrain = TRUE; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + if (terrain) + TURN { MOVE(player, MOVE_PSYCHIC_TERRAIN); } + TURN { MOVE(player, MOVE_CONFUSION); } + } SCENE { + MESSAGE("Wobbuffet used Confusion!"); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + if (B_TERRAIN_TYPE_BOOST >= GEN_8) + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.3), results[1].damage); + else + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage); + } +} + +SINGLE_BATTLE_TEST("Psychic Terrain doesn't block priority moves that target the user", s16 damage) +{ + GIVEN { + PLAYER(SPECIES_SABLEYE) { Ability(ABILITY_PRANKSTER); HP(1); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_PSYCHIC_TERRAIN); } + TURN { MOVE(player, MOVE_RECOVER); } + } SCENE { + MESSAGE("Sableye used PsychcTrrain!"); + MESSAGE("Sableye used Recover!"); + HP_BAR(player); + } +} + +SINGLE_BATTLE_TEST("Psychic Terrain doesn't block priority moves that target all battlers", s16 damage) +{ + KNOWN_FAILING; + GIVEN { + PLAYER(SPECIES_SABLEYE) { Ability(ABILITY_PRANKSTER); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_PSYCHIC_TERRAIN); } + TURN { MOVE(player, MOVE_HAZE); } + } SCENE { + MESSAGE("Sableye used PsychcTrrain!"); + MESSAGE("Sableye used Haze!"); + } +} + +SINGLE_BATTLE_TEST("Psychic Terrain doesn't block priority moves that target all opponents", s16 damage) +{ + KNOWN_FAILING; + GIVEN { + PLAYER(SPECIES_SABLEYE) { Ability(ABILITY_PRANKSTER); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_PSYCHIC_TERRAIN); } + TURN { MOVE(player, MOVE_SPIKES); } + } SCENE { + MESSAGE("Sableye used PsychcTrrain!"); + MESSAGE("Sableye used Spikes!"); + } +} + +DOUBLE_BATTLE_TEST("Psychic Terrain doesn't block priority moves that target allies", s16 damage) +{ + GIVEN { + PLAYER(SPECIES_SABLEYE) { Ability(ABILITY_PRANKSTER); } + PLAYER(SPECIES_WOBBUFFET) { HP(1); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerLeft, MOVE_PSYCHIC_TERRAIN); } + TURN { MOVE(playerLeft, MOVE_HEAL_PULSE, target: playerRight); } + } SCENE { + MESSAGE("Sableye used PsychcTrrain!"); + MESSAGE("Sableye used Heal Pulse!"); + } +} + +SINGLE_BATTLE_TEST("Psychic Terrain doesn't block priority field moves", s16 damage) +{ + KNOWN_FAILING; + GIVEN { + PLAYER(SPECIES_SABLEYE) { Ability(ABILITY_PRANKSTER); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_PSYCHIC_TERRAIN); } + TURN { MOVE(player, MOVE_SUNNY_DAY); } + } SCENE { + MESSAGE("Sableye used PsychcTrrain!"); + MESSAGE("Sableye used Sunny Day!"); + } +} From 35952cf7ad81390e90d550b705f128ca24d9d76d Mon Sep 17 00:00:00 2001 From: Martin Griffin Date: Wed, 5 Apr 2023 13:07:02 +0100 Subject: [PATCH 237/428] Clamp RandomPercentage to 0...100 --- include/random.h | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/include/random.h b/include/random.h index fd340c26db37..e7c2a3e284fb 100644 --- a/include/random.h +++ b/include/random.h @@ -80,8 +80,21 @@ enum RandomTag #define RandomPercentage(tag, t) \ ({ \ - const u8 weights[] = { 100 - t, t }; \ - RandomWeightedArray(tag, 100, ARRAY_COUNT(weights), weights); \ + u32 r; \ + if (t <= 0) \ + { \ + r = FALSE; \ + } \ + else if (t >= 100) \ + { \ + r = TRUE; \ + } \ + else \ + { \ + const u8 weights[] = { 100 - t, t }; \ + r = RandomWeightedArray(tag, 100, ARRAY_COUNT(weights), weights); \ + } \ + r; \ }) #define RandomElement(tag, array) \ From dfee8a4759c65bc222abf77c2371ccda0815d638 Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Thu, 6 Apr 2023 00:26:52 +0200 Subject: [PATCH 238/428] OW Poison configs --- include/config/overworld.h | 3 +++ include/strings.h | 1 + src/field_control_avatar.c | 2 ++ src/field_poison.c | 14 ++++++++++++++ src/strings.c | 1 + 5 files changed, 21 insertions(+) diff --git a/include/config/overworld.h b/include/config/overworld.h index 7831858d277d..f62588b5fd75 100644 --- a/include/config/overworld.h +++ b/include/config/overworld.h @@ -4,6 +4,9 @@ // Movement config #define OW_RUNNING_INDOORS GEN_LATEST // In Gen4+, players are allowed to run indoors. +// Other settings +#define OW_POISON_DAMAGE GEN_LATEST // In Gen4, Pokémon no longer faint from Poison in the overworld. In Gen5+, they no longer take damage at all. + // Overworld flags // To use the following features in scripting, replace the 0s with the flag ID you're assigning it to. // Eg: Replace with FLAG_UNUSED_0x264 so you can use that flag to toggle the feature. diff --git a/include/strings.h b/include/strings.h index 959bb8c22d18..984247b21816 100644 --- a/include/strings.h +++ b/include/strings.h @@ -180,6 +180,7 @@ extern const u8 gText_Confirm3[]; extern const u8 gText_Cancel4[]; extern const u8 gText_IsThisTheCorrectTime[]; extern const u8 gText_PkmnFainted_FldPsn[]; +extern const u8 gText_PkmnSurvived_FldPsn[]; extern const u8 gText_Coins[]; extern const u8 gText_Silver[]; extern const u8 gText_Gold[]; diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index 96e9173c9bcb..b784a2ab8621 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -565,11 +565,13 @@ static bool8 TryStartStepCountScript(u16 metatileBehavior) if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_FORCED_MOVE) && !MetatileBehavior_IsForcedMovementTile(metatileBehavior)) { + #if OW_POISON_DAMAGE < GEN_5 if (UpdatePoisonStepCounter() == TRUE) { ScriptContext_SetupScript(EventScript_FieldPoison); return TRUE; } + #endif if (ShouldEggHatch()) { IncrementGameStat(GAME_STAT_HATCHED_EGGS); diff --git a/src/field_poison.c b/src/field_poison.c index f254a6d142e4..89463a1e3fec 100644 --- a/src/field_poison.c +++ b/src/field_poison.c @@ -44,7 +44,9 @@ static void FaintFromFieldPoison(u8 partyIdx) struct Pokemon *pokemon = &gPlayerParty[partyIdx]; u32 status = STATUS1_NONE; +#if OW_POISON_DAMAGE < GEN_4 AdjustFriendship(pokemon, FRIENDSHIP_EVENT_FAINT_FIELD_PSN); +#endif SetMonData(pokemon, MON_DATA_STATUS, &status); GetMonData(pokemon, MON_DATA_NICKNAME, gStringVar1); StringGet_Nickname(gStringVar1); @@ -53,7 +55,11 @@ static void FaintFromFieldPoison(u8 partyIdx) static bool32 MonFaintedFromPoison(u8 partyIdx) { struct Pokemon *pokemon = &gPlayerParty[partyIdx]; +#if OW_POISON_DAMAGE < GEN_4 if (IsMonValidSpecies(pokemon) && GetMonData(pokemon, MON_DATA_HP) == 0 && GetAilmentFromStatus(GetMonData(pokemon, MON_DATA_STATUS)) == AILMENT_PSN) +#else + if (IsMonValidSpecies(pokemon) && GetMonData(pokemon, MON_DATA_HP) == 1 && GetAilmentFromStatus(GetMonData(pokemon, MON_DATA_STATUS)) == AILMENT_PSN) +#endif return TRUE; return FALSE; @@ -73,7 +79,11 @@ static void Task_TryFieldPoisonWhiteOut(u8 taskId) if (MonFaintedFromPoison(tPartyIdx)) { FaintFromFieldPoison(tPartyIdx); + #if OW_POISON_DAMAGE < GEN_4 ShowFieldMessage(gText_PkmnFainted_FldPsn); + #else + ShowFieldMessage(gText_PkmnSurvived_FldPsn); + #endif tState++; return; } @@ -127,7 +137,11 @@ s32 DoPoisonFieldEffect(void) { // Apply poison damage hp = GetMonData(pokemon, MON_DATA_HP); + #if OW_POISON_DAMAGE < GEN_4 if (hp == 0 || --hp == 0) + #else + if (hp == 1 || --hp == 1) + #endif numFainted++; SetMonData(pokemon, MON_DATA_HP, &hp); diff --git a/src/strings.c b/src/strings.c index 8815212e0555..d297c453520d 100644 --- a/src/strings.c +++ b/src/strings.c @@ -1192,6 +1192,7 @@ const u8 gText_IcePunch48BP[] = _("ICE PUNCH{CLEAR_TO 0x4E}48BP"); const u8 gText_ThunderPunch48BP[] = _("THUNDERPUNCH{CLEAR_TO 0x4E}48BP"); const u8 gText_FirePunch48BP[] = _("FIRE PUNCH{CLEAR_TO 0x4E}48BP"); const u8 gText_PkmnFainted_FldPsn[] = _("{STR_VAR_1} fainted…\p\n"); +const u8 gText_PkmnSurvived_FldPsn[] = _("{STR_VAR_1} survived the poisoning.\nThe poison faded away!\p"); const u8 gText_Marco[] = _("MARCO"); const u8 gText_TrainerCardName[] = _("NAME: "); const u8 gText_TrainerCardIDNo[] = _("IDNo."); From 50b5dba6559c6804c5cb3e760243058c6a6321ad Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Thu, 6 Apr 2023 10:13:32 +0200 Subject: [PATCH 239/428] Fix string issue as requested by Jaizu --- include/strings.h | 1 - src/field_poison.c | 4 ---- src/strings.c | 5 ++++- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/include/strings.h b/include/strings.h index 984247b21816..959bb8c22d18 100644 --- a/include/strings.h +++ b/include/strings.h @@ -180,7 +180,6 @@ extern const u8 gText_Confirm3[]; extern const u8 gText_Cancel4[]; extern const u8 gText_IsThisTheCorrectTime[]; extern const u8 gText_PkmnFainted_FldPsn[]; -extern const u8 gText_PkmnSurvived_FldPsn[]; extern const u8 gText_Coins[]; extern const u8 gText_Silver[]; extern const u8 gText_Gold[]; diff --git a/src/field_poison.c b/src/field_poison.c index 89463a1e3fec..da162e41345c 100644 --- a/src/field_poison.c +++ b/src/field_poison.c @@ -79,11 +79,7 @@ static void Task_TryFieldPoisonWhiteOut(u8 taskId) if (MonFaintedFromPoison(tPartyIdx)) { FaintFromFieldPoison(tPartyIdx); - #if OW_POISON_DAMAGE < GEN_4 ShowFieldMessage(gText_PkmnFainted_FldPsn); - #else - ShowFieldMessage(gText_PkmnSurvived_FldPsn); - #endif tState++; return; } diff --git a/src/strings.c b/src/strings.c index d297c453520d..847b2849a6e2 100644 --- a/src/strings.c +++ b/src/strings.c @@ -1191,8 +1191,11 @@ const u8 gText_PsychUp48BP[] = _("PSYCH UP{CLEAR_TO 0x4E}48BP"); const u8 gText_IcePunch48BP[] = _("ICE PUNCH{CLEAR_TO 0x4E}48BP"); const u8 gText_ThunderPunch48BP[] = _("THUNDERPUNCH{CLEAR_TO 0x4E}48BP"); const u8 gText_FirePunch48BP[] = _("FIRE PUNCH{CLEAR_TO 0x4E}48BP"); +#if OW_POISON_DAMAGE < GEN_4 const u8 gText_PkmnFainted_FldPsn[] = _("{STR_VAR_1} fainted…\p\n"); -const u8 gText_PkmnSurvived_FldPsn[] = _("{STR_VAR_1} survived the poisoning.\nThe poison faded away!\p"); +#else +const u8 gText_PkmnFainted_FldPsn[] = _("{STR_VAR_1} survived the poisoning.\nThe poison faded away!\p"); +#endif const u8 gText_Marco[] = _("MARCO"); const u8 gText_TrainerCardName[] = _("NAME: "); const u8 gText_TrainerCardIDNo[] = _("IDNo."); From bd4736cc97dba7dd5409d49175ca8a89750c51e2 Mon Sep 17 00:00:00 2001 From: Alex Date: Wed, 5 Apr 2023 21:50:26 +0200 Subject: [PATCH 240/428] initial commit test multi battle final remove empty line --- include/battle_main.h | 2 ++ src/battle_main.c | 6 ++---- src/battle_tower.c | 45 +++++++++++++++++++++++++++--------------- test/trainer_control.c | 2 +- 4 files changed, 34 insertions(+), 21 deletions(-) diff --git a/include/battle_main.h b/include/battle_main.h index 8d1aad454eb5..4f20e4c17a7c 100644 --- a/include/battle_main.h +++ b/include/battle_main.h @@ -70,6 +70,8 @@ void SpecialStatusesClear(void); void SetTypeBeforeUsingMove(u16 move, u8 battlerAtk); bool32 IsWildMonSmart(void); u8 CreateNPCTrainerPartyFromTrainer(struct Pokemon *party, const struct Trainer *trainer, bool32 firstTrainer, u32 battleTypeFlags); +void ModifyPersonalityForNature(u32 *personality, u32 newNature); +u32 GeneratePersonalityForGender(u32 gender, u32 species); extern struct MultiPartnerMenuPokemon gMultiPartnerParty[MULTI_PARTY_SIZE]; diff --git a/src/battle_main.c b/src/battle_main.c index efbf1b8195c1..fb2f3cb4cf95 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -120,8 +120,6 @@ static void SpriteCB_UnusedBattleInit_Main(struct Sprite *sprite); static void TrySpecialEvolution(void); static u32 Crc32B (const u8 *data, u32 size); static u32 GeneratePartyHash(const struct Trainer *trainer, u32 i); -static void ModifyPersonalityForNature(u32 *personality, u32 newNature); -static u32 GeneratePersonalityForGender(u32 gender, u32 species); EWRAM_DATA u16 gBattle_BG0_X = 0; EWRAM_DATA u16 gBattle_BG0_Y = 0; @@ -1925,7 +1923,7 @@ static u32 GeneratePartyHash(const struct Trainer *trainer, u32 i) return Crc32B(buffer, n); } -static void ModifyPersonalityForNature(u32 *personality, u32 newNature) +void ModifyPersonalityForNature(u32 *personality, u32 newNature) { u32 nature = GetNatureFromPersonality(*personality); s32 diff = abs(nature - newNature); @@ -1938,7 +1936,7 @@ static void ModifyPersonalityForNature(u32 *personality, u32 newNature) *personality -= (diff * sign); } -static u32 GeneratePersonalityForGender(u32 gender, u32 species) +u32 GeneratePersonalityForGender(u32 gender, u32 species) { const struct SpeciesInfo *speciesInfo = &gSpeciesInfo[species]; if (gender == MON_MALE) diff --git a/src/battle_tower.c b/src/battle_tower.c index a4758b93046e..4e16467f0424 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -3103,25 +3103,38 @@ static void FillPartnerParty(u16 trainerId) case F_TRAINER_PARTY_EVERYTHING_CUSTOMIZED: { const struct TrainerMonCustomized *partyData = gTrainers[trainerId - TRAINER_CUSTOM_PARTNER].party.EverythingCustomized; + u32 otIdType = OT_ID_RANDOM_NO_SHINY; + + if (partyData[i].gender == TRAINER_MON_MALE) + j = (j & 0xFFFFFF00) | GeneratePersonalityForGender(MON_MALE, partyData[i].species); + else if (partyData[i].gender == TRAINER_MON_FEMALE) + j = (j & 0xFFFFFF00) | GeneratePersonalityForGender(MON_FEMALE, partyData[i].species); + if (partyData[i].nature != 0) + ModifyPersonalityForNature(&j, partyData[i].nature - 1); + if (partyData[i].isShiny) + { + otIdType = OT_ID_PRESET; + otID = HIHALF(j) ^ LOHALF(j); + } - CreateMon(&gPlayerParty[i], partyData[i].species, partyData[i].lvl, 0, TRUE, j, TRUE, otID); - SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &partyData[i].heldItem); + CreateMon(&gPlayerParty[i + 3], partyData[i].species, partyData[i].lvl, 0, TRUE, j, otIdType, otID); + SetMonData(&gPlayerParty[i + 3], MON_DATA_HELD_ITEM, &partyData[i].heldItem); // TODO: Figure out a default strategy when moves are not set, to generate a good moveset for (j = 0; j < MAX_MON_MOVES; ++j) { - SetMonData(&gPlayerParty[i], MON_DATA_MOVE1 + j, &partyData[i].moves[j]); - SetMonData(&gPlayerParty[i], MON_DATA_PP1 + j, &gBattleMoves[partyData[i].moves[j]].pp); + SetMonData(&gPlayerParty[i+3], MON_DATA_MOVE1 + j, &partyData[i].moves[j]); + SetMonData(&gPlayerParty[i+3], MON_DATA_PP1 + j, &gBattleMoves[partyData[i].moves[j]].pp); } - SetMonData(&gPlayerParty[i], MON_DATA_IVS, &(partyData[i].iv)); + SetMonData(&gPlayerParty[i+3], MON_DATA_IVS, &(partyData[i].iv)); if (partyData[i].ev != NULL) { - SetMonData(&gPlayerParty[i], MON_DATA_HP_EV, &(partyData[i].ev[0])); - SetMonData(&gPlayerParty[i], MON_DATA_ATK_EV, &(partyData[i].ev[1])); - SetMonData(&gPlayerParty[i], MON_DATA_DEF_EV, &(partyData[i].ev[2])); - SetMonData(&gPlayerParty[i], MON_DATA_SPATK_EV, &(partyData[i].ev[3])); - SetMonData(&gPlayerParty[i], MON_DATA_SPDEF_EV, &(partyData[i].ev[4])); - SetMonData(&gPlayerParty[i], MON_DATA_SPEED_EV, &(partyData[i].ev[5])); + SetMonData(&gPlayerParty[i+3], MON_DATA_HP_EV, &(partyData[i].ev[0])); + SetMonData(&gPlayerParty[i+3], MON_DATA_ATK_EV, &(partyData[i].ev[1])); + SetMonData(&gPlayerParty[i+3], MON_DATA_DEF_EV, &(partyData[i].ev[2])); + SetMonData(&gPlayerParty[i+3], MON_DATA_SPATK_EV, &(partyData[i].ev[3])); + SetMonData(&gPlayerParty[i+3], MON_DATA_SPDEF_EV, &(partyData[i].ev[4])); + SetMonData(&gPlayerParty[i+3], MON_DATA_SPEED_EV, &(partyData[i].ev[5])); } if (partyData[i].ability != ABILITY_NONE) { @@ -3133,19 +3146,19 @@ static void FillPartnerParty(u16 trainerId) break; } if (j < maxAbilities) - SetMonData(&gPlayerParty[i], MON_DATA_ABILITY_NUM, &j); + SetMonData(&gPlayerParty[i+3], MON_DATA_ABILITY_NUM, &j); } - SetMonData(&gPlayerParty[i], MON_DATA_FRIENDSHIP, &(partyData[i].friendship)); + SetMonData(&gPlayerParty[i+3], MON_DATA_FRIENDSHIP, &(partyData[i].friendship)); if (partyData[i].ball != ITEM_NONE) { ball = partyData[i].ball; - SetMonData(&gPlayerParty[i], MON_DATA_POKEBALL, &ball); + SetMonData(&gPlayerParty[i+3], MON_DATA_POKEBALL, &ball); } if (partyData[i].nickname != NULL) { - SetMonData(&gPlayerParty[i], MON_DATA_NICKNAME, partyData[i].nickname); + SetMonData(&gPlayerParty[i+3], MON_DATA_NICKNAME, partyData[i].nickname); } - CalculateMonStats(&gPlayerParty[i]); + CalculateMonStats(&gPlayerParty[i+3]); } } diff --git a/test/trainer_control.c b/test/trainer_control.c index 30794220765d..2a21dcdf61a7 100644 --- a/test/trainer_control.c +++ b/test/trainer_control.c @@ -81,7 +81,7 @@ TEST("CreateNPCTrainerPartyForTrainer generates customized Pokémon") EXPECT(GetMonData(&testParty[0], MON_DATA_HELD_ITEM, 0) == ITEM_ASSAULT_VEST); EXPECT(GetMonData(&testParty[1], MON_DATA_HELD_ITEM, 0) == ITEM_NONE); - + EXPECT(GetMonData(&testParty[0], MON_DATA_HP_IV, 0) == 25); EXPECT(GetMonData(&testParty[0], MON_DATA_ATK_IV, 0) == 26); EXPECT(GetMonData(&testParty[0], MON_DATA_DEF_IV, 0) == 27); From 4709d2b46fdc70eb1e02ba83abf5e6712e3bfebd Mon Sep 17 00:00:00 2001 From: Jaizu Date: Fri, 7 Apr 2023 10:53:44 +0200 Subject: [PATCH 241/428] Fix trainers having empty movesets --- src/battle_main.c | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/src/battle_main.c b/src/battle_main.c index efbf1b8195c1..4bd0ce9078dd 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -122,6 +122,7 @@ static u32 Crc32B (const u8 *data, u32 size); static u32 GeneratePartyHash(const struct Trainer *trainer, u32 i); static void ModifyPersonalityForNature(u32 *personality, u32 newNature); static u32 GeneratePersonalityForGender(u32 gender, u32 species); +static void CustomTrainerPartyAssignMoves(struct Pokemon *mon, const struct TrainerMonCustomized *partyEntry); EWRAM_DATA u16 gBattle_BG0_X = 0; EWRAM_DATA u16 gBattle_BG0_Y = 0; @@ -1947,6 +1948,29 @@ static u32 GeneratePersonalityForGender(u32 gender, u32 species) return speciesInfo->genderRatio / 2; } +static void CustomTrainerPartyAssignMoves(struct Pokemon *mon, const struct TrainerMonCustomized *partyEntry) +{ + bool32 noMoveSet = TRUE; + u32 j; + + for (j = 0; j < MAX_MON_MOVES; ++j) + { + if (partyEntry->moves[j] != MOVE_NONE) + noMoveSet = FALSE; + } + if (noMoveSet) + { + // TODO: Figure out a default strategy when moves are not set, to generate a good moveset + return; + } + + for (j = 0; j < MAX_MON_MOVES; ++j) + { + SetMonData(mon, MON_DATA_MOVE1 + j, &partyEntry->moves[j]); + SetMonData(mon, MON_DATA_PP1 + j, &gBattleMoves[partyEntry->moves[j]].pp); + } +} + u8 CreateNPCTrainerPartyFromTrainer(struct Pokemon *party, const struct Trainer *trainer, bool32 firstTrainer, u32 battleTypeFlags) { u32 personalityValue; @@ -2049,12 +2073,7 @@ u8 CreateNPCTrainerPartyFromTrainer(struct Pokemon *party, const struct Trainer CreateMon(&party[i], partyData[i].species, partyData[i].lvl, 0, TRUE, personalityValue, otIdType, fixedOtId); SetMonData(&party[i], MON_DATA_HELD_ITEM, &partyData[i].heldItem); - // TODO: Figure out a default strategy when moves are not set, to generate a good moveset - for (j = 0; j < MAX_MON_MOVES; ++j) - { - SetMonData(&party[i], MON_DATA_MOVE1 + j, &partyData[i].moves[j]); - SetMonData(&party[i], MON_DATA_PP1 + j, &gBattleMoves[partyData[i].moves[j]].pp); - } + CustomTrainerPartyAssignMoves(&party[i], &partyData[i]); SetMonData(&party[i], MON_DATA_IVS, &(partyData[i].iv)); if (partyData[i].ev != NULL) { From e1beb55a51406ab9f9932b82dbc5b668b3aa9287 Mon Sep 17 00:00:00 2001 From: Jaizu Date: Fri, 7 Apr 2023 11:07:52 +0200 Subject: [PATCH 242/428] Fix overworld poison not working on newer generations config --- src/field_control_avatar.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index b784a2ab8621..96e9173c9bcb 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -565,13 +565,11 @@ static bool8 TryStartStepCountScript(u16 metatileBehavior) if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_FORCED_MOVE) && !MetatileBehavior_IsForcedMovementTile(metatileBehavior)) { - #if OW_POISON_DAMAGE < GEN_5 if (UpdatePoisonStepCounter() == TRUE) { ScriptContext_SetupScript(EventScript_FieldPoison); return TRUE; } - #endif if (ShouldEggHatch()) { IncrementGameStat(GAME_STAT_HATCHED_EGGS); From d57d8e6e71ddfee8fea737db5b2c30c540fd196e Mon Sep 17 00:00:00 2001 From: Philipp AUER Date: Fri, 7 Apr 2023 11:35:30 +0200 Subject: [PATCH 243/428] Revert "Fix overworld poison not working on newer generations config" This reverts commit e1beb55a51406ab9f9932b82dbc5b668b3aa9287. --- src/field_control_avatar.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index 96e9173c9bcb..b784a2ab8621 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -565,11 +565,13 @@ static bool8 TryStartStepCountScript(u16 metatileBehavior) if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_FORCED_MOVE) && !MetatileBehavior_IsForcedMovementTile(metatileBehavior)) { + #if OW_POISON_DAMAGE < GEN_5 if (UpdatePoisonStepCounter() == TRUE) { ScriptContext_SetupScript(EventScript_FieldPoison); return TRUE; } + #endif if (ShouldEggHatch()) { IncrementGameStat(GAME_STAT_HATCHED_EGGS); From 59dfc7c3ad513ee2bc05b43e80eedf7dfccb43ee Mon Sep 17 00:00:00 2001 From: psf <77138753+pkmnsnfrn@users.noreply.github.com> Date: Fri, 7 Apr 2023 06:07:12 -0700 Subject: [PATCH 244/428] Update include/config/battle.h Took suggestions from https://github.com/rh-hideout/pokeemerald-expansion/pull/2875#discussion_r1160574308 Co-authored-by: LOuroboros --- include/config/battle.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/config/battle.h b/include/config/battle.h index 77e0e0f4d99b..790ad78ccaaf 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -155,8 +155,8 @@ #define VAR_TERRAIN 0 // If this var has a value, assigning a STATUS_FIELD_xx_TERRAIN to it before battle causes the battle to start with that terrain active #define B_VAR_WILD_AI_FLAGS 0 // If not 0, you can use this var to add to default wild AI flags. NOT usable with flags above (1 << 15) -//Flag and Var settings -#define B_RESET_FLAGS_VARS_AFTER_WHITEOUT TRUE // If set to TRUE, Flag and Var settings (B_FLAG_INVERSE_BATTLE,B_FLAG_FORCE_DOUBLE_WILD,B_SMART_WILD_AI_FLAG,B_FLAG_NO_BAG_USE,B_FLAG_NO_CATCHING,B_VAR_WILD_AI_FLAGS, and VAR_TERRAIN) will be reset when the player whites out. +// Flag and Var settings +#define B_RESET_FLAGS_VARS_AFTER_WHITEOUT TRUE // If TRUE, Overworld_ResetBattleFlagsAndVars will reset battle-related Flags and Vars when the player whites out. // Terrain settings #define B_TERRAIN_BG_CHANGE TRUE // If set to TRUE, terrain moves permanently change the default battle background until the effect fades. From 903b56756d8ed1b860917e61e05528796e56cb01 Mon Sep 17 00:00:00 2001 From: sbird Date: Sat, 8 Apr 2023 02:21:19 +0200 Subject: [PATCH 245/428] fix an oversight that caused battles to continuesly be double battles --- src/battle_main.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/battle_main.c b/src/battle_main.c index efbf1b8195c1..9d4c9dc9cb68 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -2111,7 +2111,13 @@ static u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum, bool8 fir return 0; retVal = CreateNPCTrainerPartyFromTrainer(party, &gTrainers[trainerNum], firstTrainer, gBattleTypeFlags); - gBattleTypeFlags |= gTrainers[trainerNum].doubleBattle; + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && !(gBattleTypeFlags & (BATTLE_TYPE_FRONTIER + | BATTLE_TYPE_EREADER_TRAINER + | BATTLE_TYPE_TRAINER_HILL))) + { + gBattleTypeFlags |= gTrainers[trainerNum].doubleBattle; + } + return retVal; } void VBlankCB_Battle(void) From 02af4d0943ccd5f982808727deff6999bc3216e9 Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Sat, 8 Apr 2023 18:53:04 +0200 Subject: [PATCH 246/428] Fixes Ominous Wind targeting --- src/data/battle_moves.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index 64ce246862b4..3dc21a538275 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -7884,7 +7884,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .accuracy = 100, .pp = 5, .secondaryEffectChance = 10, - .target = MOVE_TARGET_BOTH, + .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, From bd54c70020f732fd047018019867212c7c013141 Mon Sep 17 00:00:00 2001 From: aaghaht Date: Mon, 10 Apr 2023 10:47:31 +0530 Subject: [PATCH 247/428] Add PLA evo items --- .../items/icon_palettes/black_augurite.pal | 19 +++++++++ graphics/items/icon_palettes/linking_cord.pal | 19 +++++++++ graphics/items/icon_palettes/peat_block.pal | 19 +++++++++ graphics/items/icons/black_augurite.png | Bin 0 -> 385 bytes graphics/items/icons/linking_cord.png | Bin 0 -> 380 bytes graphics/items/icons/peat_block.png | Bin 0 -> 403 bytes include/constants/items.h | 6 ++- include/constants/pokemon.h | 1 + include/graphics.h | 6 +++ src/data/graphics/items.h | 9 ++++ src/data/item_icon_table.h | 3 ++ src/data/items.h | 36 ++++++++++++++++ src/data/pokemon/evolution.h | 40 ++++++++++++------ src/data/pokemon/item_effects.h | 3 ++ src/data/text/item_descriptions.h | 15 +++++++ src/pokemon.c | 5 +++ 16 files changed, 167 insertions(+), 14 deletions(-) create mode 100644 graphics/items/icon_palettes/black_augurite.pal create mode 100644 graphics/items/icon_palettes/linking_cord.pal create mode 100644 graphics/items/icon_palettes/peat_block.pal create mode 100644 graphics/items/icons/black_augurite.png create mode 100644 graphics/items/icons/linking_cord.png create mode 100644 graphics/items/icons/peat_block.png diff --git a/graphics/items/icon_palettes/black_augurite.pal b/graphics/items/icon_palettes/black_augurite.pal new file mode 100644 index 000000000000..0d67abee396c --- /dev/null +++ b/graphics/items/icon_palettes/black_augurite.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +120 192 168 +0 0 0 +111 108 124 +58 48 49 +206 206 214 +151 149 160 +142 93 117 +89 62 76 +255 255 255 +111 109 124 +194 192 202 +88 62 76 +80 74 88 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/linking_cord.pal b/graphics/items/icon_palettes/linking_cord.pal new file mode 100644 index 000000000000..8be2b522f79f --- /dev/null +++ b/graphics/items/icon_palettes/linking_cord.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 192 168 +87 87 88 +155 158 156 +117 114 116 +0 0 0 +36 37 42 +62 66 68 +56 57 61 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/peat_block.pal b/graphics/items/icon_palettes/peat_block.pal new file mode 100644 index 000000000000..8d4b5e3b6f49 --- /dev/null +++ b/graphics/items/icon_palettes/peat_block.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 198 168 +32 32 32 +230 217 213 +199 189 184 +156 135 143 +102 83 83 +143 118 130 +65 56 56 +179 162 151 +117 100 100 +210 183 192 +180 158 167 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icons/black_augurite.png b/graphics/items/icons/black_augurite.png new file mode 100644 index 0000000000000000000000000000000000000000..8be2bc188c9b3d35e52d8fe0f09e3c6dcd62f9c5 GIT binary patch literal 385 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1;w_7YEDSN7*jl0s${dOxN}0fod% zTq88foYA|NsB|+?qoNPDR-H z1b9UN)j+_MpjF3#EXE{ncbET5**_fxa+Z3!IEGZrNls{Ba${s;5pa5BFiWAZ#Z^$o zFE|#N9}!~hJ-tw7fslgqF~-f^t!alWkERJN zOt3w4%%N=4!yp6qTQ_d#?7UN=b|gdLwuP>;iNKkgIXQEtO*73_JaW*XY}S>a4y(k? zTTBjLn;973o7on$I*iq6PGv+u+Ota%D^{oaottCnF7S-mQ6a&Bongs&%|BLa|9%1a N!_(EzWt~$(69B6(f(ZZs literal 0 HcmV?d00001 diff --git a/graphics/items/icons/linking_cord.png b/graphics/items/icons/linking_cord.png new file mode 100644 index 0000000000000000000000000000000000000000..a3f92da04b753298958b4a21333b3732d5ecabb4 GIT binary patch literal 380 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1;w_7YEDSN7*jQtZl#rF9~^fkNUX zt`Q}{`DrEPiAAXl?mjL+V-(6#ixiCYObT0EHc6ehi9>Q98Tw zV!4Qf$#R>u38|0je70)el9zf?yJzz~6KBWA4u+ tk(HM8&b}7oSqW8k<^3Ob?Rr&I!_53wgT>=z`d5&TJYD@<);T3K0RRPqddL6( literal 0 HcmV?d00001 diff --git a/graphics/items/icons/peat_block.png b/graphics/items/icons/peat_block.png new file mode 100644 index 0000000000000000000000000000000000000000..9c106598756eeef0a1e141e71fd46d1569c72001 GIT binary patch literal 403 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1;w_7YEDSN7*jQXC@Uiu2R7fkNUX zt`Q}{`DrEPiAAXl?mjL+V-(6#ixiCYObT0Gowy z&x<4^#DqS2^hjz}*gHGc6E|h=J&JoY&2F>Ip_eP7-i28n6+ZHjPxt=bt!pkFJ<59I zrqtfsq9+QO3(N9v?!9eVljbFLLhj(*-R0Hq=S+LVQ6|%|UG=Oh!z)t-b=G%^j+x@_ fD(ktp9`K7Z97{B*?YwkR0OU7MS3j3^P6= 0 && gLocalTime.hours < 12 && gEvolutionTable[species][i].param == evolutionItem) + targetSpecies = gEvolutionTable[species][i].targetSpecies; + break; } } break; From 0f958806eaba35ee9fe11eaf9609461b3ee92672 Mon Sep 17 00:00:00 2001 From: Jaizu Date: Mon, 10 Apr 2023 14:39:14 +0200 Subject: [PATCH 248/428] Remove unused battle funcs --- include/battle_interface.h | 1 - src/battle_interface.c | 18 ------------------ 2 files changed, 19 deletions(-) diff --git a/include/battle_interface.h b/include/battle_interface.h index e0f30b3097ef..e2937748a4a6 100644 --- a/include/battle_interface.h +++ b/include/battle_interface.h @@ -81,7 +81,6 @@ u8 CreateSafariPlayerHealthboxSprites(void); void SetBattleBarStruct(u8 battler, u8 healthboxSpriteId, s32 maxVal, s32 currVal, s32 receivedValue); void SetHealthboxSpriteInvisible(u8 healthboxSpriteId); void SetHealthboxSpriteVisible(u8 healthboxSpriteId); -void DestoryHealthboxSprite(u8 healthboxSpriteId); void DummyBattleInterfaceFunc(u8 healthboxSpriteId, bool8 isDoubleBattleBankOnly); void UpdateOamPriorityInAllHealthboxes(u8 priority, bool32 hideHpBoxes); void InitBattlerHealthboxCoords(u8 battler); diff --git a/src/battle_interface.c b/src/battle_interface.c index 35c0e60c63b3..9138dcf6ee85 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -186,7 +186,6 @@ static void MegaIndicator_SetVisibilities(u32 healthboxId, bool32 invisible); static void MegaIndicator_UpdateLevel(u32 healthboxId, u32 level); static void MegaIndicator_CreateSprites(u32 battlerId, u32 healthboxSpriteId); static void MegaIndicator_UpdateOamPriorities(u32 healthboxId, u32 oamPriority); -static void MegaIndicator_DestroySprites(u32 healthboxSpriteId); static void SpriteCb_MegaIndicator(struct Sprite *); static u8 GetStatusIconForBattlerId(u8, u8); @@ -884,14 +883,6 @@ static void UpdateSpritePos(u8 spriteId, s16 x, s16 y) gSprites[spriteId].y = y; } -void DestoryHealthboxSprite(u8 healthboxSpriteId) -{ - MegaIndicator_DestroySprites(healthboxSpriteId); - DestroySprite(&gSprites[gSprites[healthboxSpriteId].oam.affineParam]); - DestroySprite(&gSprites[gSprites[healthboxSpriteId].hMain_HealthBarSpriteId]); - DestroySprite(&gSprites[healthboxSpriteId]); -} - void DummyBattleInterfaceFunc(u8 healthboxSpriteId, bool8 isDoubleBattleBattlerOnly) { @@ -1599,15 +1590,6 @@ static void MegaIndicator_CreateSprites(u32 battlerId, u32 healthboxSpriteId) } } -static void MegaIndicator_DestroySprites(u32 healthboxSpriteId) -{ - u32 i; - u8 *spriteIds = MegaIndicator_GetSpriteIds(healthboxSpriteId); - - for (i = 0; i < INDICATOR_COUNT; i++) - DestroySprite(&gSprites[spriteIds[i]]); -} - static void SpriteCb_MegaIndicator(struct Sprite *sprite) { u32 battlerId = sprite->tBattler; From 5c0e5d213311c8c72c119b2450ad5b45d4716f3a Mon Sep 17 00:00:00 2001 From: Jaizu Date: Mon, 10 Apr 2023 14:40:56 +0200 Subject: [PATCH 249/428] Don't toggle mega indicator visibility on the Safari Zone --- src/battle_interface.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/battle_interface.c b/src/battle_interface.c index 9138dcf6ee85..7f7e1d20f0bd 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -1531,6 +1531,9 @@ void MegaIndicator_SetVisibilities(u32 healthboxId, bool32 invisible) u8 *spriteIds = MegaIndicator_GetSpriteIds(healthboxId); u32 battlerId = gSprites[healthboxId].hMain_Battler; + if (GetSafariZoneFlag()) + return; + for (i = 0; i < INDICATOR_COUNT; i++) { if (invisible == TRUE) From e49bb21ee48e7e4dc6d1f14420622ddf50488a5e Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Mon, 10 Apr 2023 09:48:44 -0400 Subject: [PATCH 250/428] some IsBattlerAIControlled replacements w BattlerHasAi --- src/battle_ai_util.c | 6 +++--- src/battle_script_commands.c | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 51f4ef0467a0..3160dfa3f56e 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -537,7 +537,7 @@ void ClearBattlerItemEffectHistory(u8 battlerId) void SaveBattlerData(u8 battlerId) { - if (!IsBattlerAIControlled(battlerId)) + if (!BattlerHasAi(battlerId)) { u32 i; @@ -588,7 +588,7 @@ static bool32 ShouldFailForIllusion(u16 illusionSpecies, u32 battlerId) void SetBattlerData(u8 battlerId) { - if (!IsBattlerAIControlled(battlerId)) + if (!BattlerHasAi(battlerId)) { u32 i, species, illusionSpecies; @@ -631,7 +631,7 @@ void SetBattlerData(u8 battlerId) void RestoreBattlerData(u8 battlerId) { - if (!IsBattlerAIControlled(battlerId)) + if (!BattlerHasAi(battlerId)) { u32 i; diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 28bf60c39b3b..22c20c698bad 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -7036,7 +7036,7 @@ static void Cmd_switchineffects(void) gHitMarker &= ~HITMARKER_FAINTED(gActiveBattler); gSpecialStatuses[gActiveBattler].faintedHasReplacement = FALSE; - if (!IsBattlerAIControlled(gActiveBattler)) + if (!BattlerHasAi(gActiveBattler)) gBattleStruct->appearedInBattle |= gBitTable[gBattlerPartyIndexes[gActiveBattler]]; // Neutralizing Gas announces itself before hazards From e3ca217d6412b4eccd325006904ca88a2f3a631c Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Mon, 10 Apr 2023 11:36:17 -0400 Subject: [PATCH 251/428] rename IsBattlerAIControlled --- include/battle_ai_util.h | 2 +- src/battle_ai_main.c | 2 +- src/battle_ai_util.c | 10 +++++----- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/include/battle_ai_util.h b/include/battle_ai_util.h index 68c0dbd993c3..d1319f0ca776 100644 --- a/include/battle_ai_util.h +++ b/include/battle_ai_util.h @@ -10,7 +10,7 @@ bool32 AI_RandLessThan(u8 val); void RecordLastUsedMoveByTarget(void); bool32 BattlerHasAi(u32 battlerId); -bool32 IsBattlerAIControlled(u32 battlerId); +bool32 IsAiBattlerAware(u32 battlerId); void ClearBattlerMoveHistory(u8 battlerId); void RecordLastUsedMoveBy(u32 battlerId, u32 move); void RecordKnownMove(u8 battlerId, u32 move); diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 95e85ab894b6..2fb9c2640d33 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -367,7 +367,7 @@ void GetAiLogicData(void) for (battlerAtk = 0; battlerAtk < gBattlersCount; battlerAtk++) { if (!IsBattlerAlive(battlerAtk) - || !IsBattlerAIControlled(battlerAtk)) { + || !IsAiBattlerAware(battlerAtk)) { continue; } diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 22c7bb633cdf..05e7aec58f11 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -473,7 +473,7 @@ bool32 BattlerHasAi(u32 battlerId) } } -bool32 IsBattlerAIControlled(u32 battlerId) +bool32 IsAiBattlerAware(u32 battlerId) { if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_OMNISCIENT) return TRUE; @@ -1231,7 +1231,7 @@ s32 AI_GetAbility(u32 battlerId) return gBattleStruct->overwrittenAbilities[battlerId]; // The AI knows its own ability. - if (IsBattlerAIControlled(battlerId)) + if (IsAiBattlerAware(battlerId)) return knownAbility; // Check neutralizing gas, gastro acid @@ -1264,7 +1264,7 @@ u16 AI_GetHoldEffect(u32 battlerId) { u32 holdEffect; - if (!IsBattlerAIControlled(battlerId)) + if (!IsAiBattlerAware(battlerId)) holdEffect = AI_PARTY->mons[GetBattlerSide(battlerId)][gBattlerPartyIndexes[battlerId]].heldEffect; else holdEffect = GetBattlerHoldEffect(battlerId, FALSE); @@ -1889,7 +1889,7 @@ bool32 CanIndexMoveFaintTarget(u8 battlerAtk, u8 battlerDef, u8 index, u8 numHit u16 *GetMovesArray(u32 battler) { - if (IsBattlerAIControlled(battler) || IsBattlerAIControlled(BATTLE_PARTNER(battler))) + if (IsAiBattlerAware(battler) || IsAiBattlerAware(BATTLE_PARTNER(battler))) return gBattleMons[battler].moves; else return gBattleResources->battleHistory->usedMoves[battler]; @@ -3144,7 +3144,7 @@ u16 GetAllyChosenMove(u8 battlerId) { u8 partnerBattler = BATTLE_PARTNER(battlerId); - if (!IsBattlerAlive(partnerBattler) || !IsBattlerAIControlled(partnerBattler)) + if (!IsBattlerAlive(partnerBattler) || !IsAiBattlerAware(partnerBattler)) return MOVE_NONE; else if (partnerBattler > battlerId) // Battler with the lower id chooses the move first. return gLastMoves[partnerBattler]; From 86242c1c7097a66f66efa0ff4be4c0982d47e9c2 Mon Sep 17 00:00:00 2001 From: AgustinGDLV <103095241+AgustinGDLV@users.noreply.github.com> Date: Tue, 11 Apr 2023 17:14:25 -0700 Subject: [PATCH 252/428] MOVE_REVIVAL_BLESSING Effect (#2883) * implemented Revival Blessing --- asm/macros/battle_script.inc | 5 + data/battle_scripts_1.s | 19 ++++ include/battle_script_commands.h | 1 + include/constants/battle_move_effects.h | 3 +- include/constants/battle_script_commands.h | 1 + include/constants/battle_string_ids.h | 3 +- include/constants/party_menu.h | 1 + src/battle_ai_main.c | 13 +++ src/battle_controller_opponent.c | 16 ++- src/battle_controller_player.c | 3 +- src/battle_controller_player_partner.c | 36 ++++--- src/battle_controller_recorded_opponent.c | 2 + src/battle_controller_recorded_player.c | 2 + src/battle_main.c | 4 + src/battle_message.c | 2 + src/battle_script_commands.c | 81 ++++++++++++++ src/data/battle_moves.h | 2 +- src/party_menu.c | 19 ++++ test/move_effect_revival_blessing.c | 117 +++++++++++++++++++++ 19 files changed, 309 insertions(+), 21 deletions(-) create mode 100644 test/move_effect_revival_blessing.c diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index 3419e2e56025..30df11232b48 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -2263,3 +2263,8 @@ .macro hitswitchtargetfailed various 0, VARIOUS_HIT_SWITCH_TARGET_FAILED .endm + + .macro tryrevivalblessing, jumpInstr:req + various 0, VARIOUS_TRY_REVIVAL_BLESSING + .4byte \jumpInstr + .endm diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index ea7ef493c5b9..4848b732270a 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -423,6 +423,25 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectHitSetEntryHazard @ EFFECT_HIT_SET_ENTRY_HAZARD .4byte BattleScript_EffectDireClaw @ EFFECT_DIRE_CLAW .4byte BattleScript_EffectBarbBarrage @ EFFECT_BARB_BARRAGE + .4byte BattleScript_EffectRevivalBlessing @ EFFECT_REVIVAL_BLESSING + +BattleScript_EffectRevivalBlessing:: + attackcanceler + attackstring + ppreduce + attackanimation + waitanimation + tryrevivalblessing BattleScript_ButItFailed + printstring STRINGID_PKMNREVIVEDREADYTOFIGHT + waitmessage B_WAIT_TIME_LONG + jumpifbyte CMP_EQUAL, gBattleCommunication, TRUE, BattleScript_EffectRevivalBlessingSendOut + goto BattleScript_MoveEnd + +BattleScript_EffectRevivalBlessingSendOut: + switchinanim BS_SCRIPTING, FALSE + waitstate + switchineffects BS_SCRIPTING + goto BattleScript_MoveEnd BattleScript_StealthRockActivates:: setstealthrock BattleScript_MoveEnd diff --git a/include/battle_script_commands.h b/include/battle_script_commands.h index d65728628916..dcf601e8040d 100644 --- a/include/battle_script_commands.h +++ b/include/battle_script_commands.h @@ -46,6 +46,7 @@ u8 GetCatchingBattler(void); u32 GetHighestStatId(u32 battlerId); bool32 ProteanTryChangeType(u32 battler, u32 ability, u32 move, u32 moveType); bool32 DoSwitchInAbilitiesItems(u32 battlerId); +u8 GetFirstFaintedPartyIndex(u8 battlerId); extern void (* const gBattleScriptingCommandsTable[])(void); extern const u8 gBattlePalaceNatureToMoveGroupLikelihood[NUM_NATURES][4]; diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h index 27ad6601ffd9..d1562dec9360 100644 --- a/include/constants/battle_move_effects.h +++ b/include/constants/battle_move_effects.h @@ -404,7 +404,8 @@ #define EFFECT_HIT_SET_ENTRY_HAZARD 398 #define EFFECT_DIRE_CLAW 399 #define EFFECT_BARB_BARRAGE 400 +#define EFFECT_REVIVAL_BLESSING 401 -#define NUM_BATTLE_MOVE_EFFECTS 401 +#define NUM_BATTLE_MOVE_EFFECTS 402 #endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h index 26064bcfb1b8..be2410f946fa 100644 --- a/include/constants/battle_script_commands.h +++ b/include/constants/battle_script_commands.h @@ -259,6 +259,7 @@ #define VARIOUS_STORE_HEALING_WISH 167 #define VARIOUS_HIT_SWITCH_TARGET_FAILED 168 #define VARIOUS_JUMP_IF_SHELL_TRAP 169 +#define VARIOUS_TRY_REVIVAL_BLESSING 170 // Cmd_manipulatedamage #define DMG_CHANGE_SIGN 0 diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index b94176334086..1124c3a60727 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -647,8 +647,9 @@ #define STRINGID_STEALTHROCKDISAPPEAREDFROMTEAM 645 #define STRINGID_COULDNTFULLYPROTECT 646 #define STRINGID_STOCKPILEDEFFECTWOREOFF 647 +#define STRINGID_PKMNREVIVEDREADYTOFIGHT 648 -#define BATTLESTRINGS_COUNT 648 +#define BATTLESTRINGS_COUNT 649 // This is the string id that gBattleStringsTable starts with. // String ids before this (e.g. STRINGID_INTROMSG) are not in the table, diff --git a/include/constants/party_menu.h b/include/constants/party_menu.h index 2c632d30cf91..f28b75122ffb 100644 --- a/include/constants/party_menu.h +++ b/include/constants/party_menu.h @@ -48,6 +48,7 @@ #define PARTY_ACTION_MOVE_TUTOR 12 #define PARTY_ACTION_MINIGAME 13 #define PARTY_ACTION_REUSABLE_ITEM 14 // Unused. The only reusable items are handled separately +#define PARTY_ACTION_CHOOSE_FAINTED_MON 15 // IDs for DisplayPartyMenuStdMessage, to display the message at the bottom of the party menu #define PARTY_MSG_CHOOSE_MON 0 diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 2fb9c2640d33..6c60705d5a7c 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -2623,6 +2623,15 @@ static s16 AI_CheckBadMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) if (gBattleMons[battlerAtk].hp <= gBattleMons[battlerAtk].maxHP / 3) score -= 10; break;*/ + case EFFECT_REVIVAL_BLESSING: + if (GetFirstFaintedPartyIndex(battlerAtk) == PARTY_SIZE) + score -= 10; + else if (CanAIFaintTarget(battlerAtk, battlerDef, 0)) + score -= 10; + else if (CanTargetFaintAi(battlerDef, battlerAtk) + && AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER) + score -= 10; + break; case EFFECT_PLACEHOLDER: return 0; // cannot even select } // move effect checks @@ -4808,6 +4817,10 @@ static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) score++; } break; + case EFFECT_REVIVAL_BLESSING: + if (GetFirstFaintedPartyIndex(battlerAtk) != PARTY_SIZE) + score += 2; + break; //case EFFECT_EXTREME_EVOBOOST: // TODO //break; //case EFFECT_CLANGOROUS_SOUL: // TODO diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c index 79283b0674e9..7a5149313d01 100644 --- a/src/battle_controller_opponent.c +++ b/src/battle_controller_opponent.c @@ -20,6 +20,7 @@ #include "main.h" #include "m4a.h" #include "palette.h" +#include "party_menu.h" #include "pokeball.h" #include "pokemon.h" #include "random.h" @@ -33,6 +34,7 @@ #include "constants/battle_anim.h" #include "constants/items.h" #include "constants/moves.h" +#include "constants/party_menu.h" #include "constants/songs.h" #include "constants/trainers.h" #include "trainer_hill.h" @@ -1674,7 +1676,13 @@ static void OpponentHandleChoosePokemon(void) s32 chosenMonId; s32 pokemonInBattle = 1; - if (*(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) == PARTY_SIZE) + // Choosing Revival Blessing target + if ((gBattleResources->bufferA[gActiveBattler][1] & 0xF) == PARTY_ACTION_CHOOSE_FAINTED_MON) + { + chosenMonId = gSelectedMonPartyId = GetFirstFaintedPartyIndex(gActiveBattler); + } + // Switching out + else if (*(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) == PARTY_SIZE) { chosenMonId = GetMostSuitableMonToSwitchInto(); @@ -1709,17 +1717,17 @@ static void OpponentHandleChoosePokemon(void) } } } + *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = chosenMonId; } else { chosenMonId = *(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler); *(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) = PARTY_SIZE; + *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = chosenMonId; } - - - *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = chosenMonId; BtlController_EmitChosenMonReturnValue(BUFFER_B, chosenMonId, NULL); OpponentBufferExecCompleted(); + } static u8 CountAIAliveNonEggMonsExcept(u8 slotToIgnore) diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index 82a9d7b7a926..10659941649a 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -2907,7 +2907,8 @@ static void PlayerHandleChoosePokemon(void) for (i = 0; i < ARRAY_COUNT(gBattlePartyCurrentOrder); i++) gBattlePartyCurrentOrder[i] = gBattleResources->bufferA[gActiveBattler][4 + i]; - if (gBattleTypeFlags & BATTLE_TYPE_ARENA && (gBattleResources->bufferA[gActiveBattler][1] & 0xF) != PARTY_ACTION_CANT_SWITCH) + if (gBattleTypeFlags & BATTLE_TYPE_ARENA && (gBattleResources->bufferA[gActiveBattler][1] & 0xF) != PARTY_ACTION_CANT_SWITCH + && (gBattleResources->bufferA[gActiveBattler][1] & 0xF) != PARTY_ACTION_CHOOSE_FAINTED_MON) { BtlController_EmitChosenMonReturnValue(BUFFER_B, gBattlerPartyIndexes[gActiveBattler] + 1, gBattlePartyCurrentOrder); PlayerBufferExecCompleted(); diff --git a/src/battle_controller_player_partner.c b/src/battle_controller_player_partner.c index 88bc4f974df4..4c54b68aa3ae 100644 --- a/src/battle_controller_player_partner.c +++ b/src/battle_controller_player_partner.c @@ -16,6 +16,7 @@ #include "main.h" #include "m4a.h" #include "palette.h" +#include "party_menu.h" #include "pokeball.h" #include "pokemon.h" #include "reshow_battle_screen.h" @@ -27,6 +28,7 @@ #include "window.h" #include "constants/battle_anim.h" #include "constants/songs.h" +#include "constants/party_menu.h" #include "constants/trainers.h" static void PlayerPartnerHandleGetMonData(void); @@ -1549,25 +1551,33 @@ static void PlayerPartnerHandleChooseItem(void) static void PlayerPartnerHandleChoosePokemon(void) { - s32 chosenMonId = GetMostSuitableMonToSwitchInto(); - - if (chosenMonId == PARTY_SIZE) // just switch to the next mon + s32 chosenMonId; + // Choosing Revival Blessing target + if ((gBattleResources->bufferA[gActiveBattler][1] & 0xF) == PARTY_ACTION_CHOOSE_FAINTED_MON) { - u8 playerMonIdentity = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); - u8 selfIdentity = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT); - - for (chosenMonId = PARTY_SIZE / 2; chosenMonId < PARTY_SIZE; chosenMonId++) + chosenMonId = gSelectedMonPartyId = GetFirstFaintedPartyIndex(gActiveBattler); + } + // Switching out + else + { + chosenMonId = GetMostSuitableMonToSwitchInto(); + if (chosenMonId == PARTY_SIZE) // just switch to the next mon { - if (GetMonData(&gPlayerParty[chosenMonId], MON_DATA_HP) != 0 - && chosenMonId != gBattlerPartyIndexes[playerMonIdentity] - && chosenMonId != gBattlerPartyIndexes[selfIdentity]) + u8 playerMonIdentity = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); + u8 selfIdentity = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT); + + for (chosenMonId = PARTY_SIZE / 2; chosenMonId < PARTY_SIZE; chosenMonId++) { - break; + if (GetMonData(&gPlayerParty[chosenMonId], MON_DATA_HP) != 0 + && chosenMonId != gBattlerPartyIndexes[playerMonIdentity] + && chosenMonId != gBattlerPartyIndexes[selfIdentity]) + { + break; + } } } + *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = chosenMonId; } - - *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = chosenMonId; BtlController_EmitChosenMonReturnValue(BUFFER_B, chosenMonId, NULL); PlayerPartnerBufferExecCompleted(); } diff --git a/src/battle_controller_recorded_opponent.c b/src/battle_controller_recorded_opponent.c index 2e93d625d7e4..1fe8addcc334 100644 --- a/src/battle_controller_recorded_opponent.c +++ b/src/battle_controller_recorded_opponent.c @@ -15,6 +15,7 @@ #include "main.h" #include "m4a.h" #include "palette.h" +#include "party_menu.h" #include "pokeball.h" #include "pokemon.h" #include "recorded_battle.h" @@ -1442,6 +1443,7 @@ static void RecordedOpponentHandleChooseItem(void) static void RecordedOpponentHandleChoosePokemon(void) { *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = RecordedBattle_GetBattlerAction(RECORDED_PARTY_INDEX, gActiveBattler); + gSelectedMonPartyId = gBattleStruct->monToSwitchIntoId[gActiveBattler]; // Revival Blessing BtlController_EmitChosenMonReturnValue(BUFFER_B, *(gBattleStruct->monToSwitchIntoId + gActiveBattler), NULL); RecordedOpponentBufferExecCompleted(); } diff --git a/src/battle_controller_recorded_player.c b/src/battle_controller_recorded_player.c index 1906df8a8a4f..869a5e18e4a0 100644 --- a/src/battle_controller_recorded_player.c +++ b/src/battle_controller_recorded_player.c @@ -12,6 +12,7 @@ #include "main.h" #include "m4a.h" #include "palette.h" +#include "party_menu.h" #include "pokeball.h" #include "pokemon.h" #include "recorded_battle.h" @@ -1466,6 +1467,7 @@ static void RecordedPlayerHandleChooseItem(void) static void RecordedPlayerHandleChoosePokemon(void) { *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = RecordedBattle_GetBattlerAction(RECORDED_PARTY_INDEX, gActiveBattler); + gSelectedMonPartyId = gBattleStruct->monToSwitchIntoId[gActiveBattler]; // Revival Blessing BtlController_EmitChosenMonReturnValue(BUFFER_B, *(gBattleStruct->monToSwitchIntoId + gActiveBattler), NULL); RecordedPlayerBufferExecCompleted(); } diff --git a/src/battle_main.c b/src/battle_main.c index b80042ee9ca5..7b6af8a23a6e 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -3196,6 +3196,7 @@ static void BattleStartClearSetData(void) } gBattleStruct->swapDamageCategory = FALSE; // Photon Geyser, Shell Side Arm, Light That Burns the Sky + gSelectedMonPartyId = PARTY_SIZE; // Revival Blessing } void SwitchInClearSetData(void) @@ -3308,6 +3309,9 @@ void SwitchInClearSetData(void) gBattleStruct->overwrittenAbilities[gActiveBattler] = ABILITY_NONE; + // Clear selected party ID so Revival Blessing doesn't get confused. + gSelectedMonPartyId = PARTY_SIZE; + Ai_UpdateSwitchInData(gActiveBattler); } diff --git a/src/battle_message.c b/src/battle_message.c index 2ecfac0c7d10..cb1f64050626 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -782,9 +782,11 @@ static const u8 sText_PrepareShellTrap[] = _("{B_ATK_NAME_WITH_PREFIX} set a she static const u8 sText_ShellTrapDidntWork[] = _("{B_ATK_NAME_WITH_PREFIX}'s shell trap didn't work!"); static const u8 sText_CouldntFullyProtect[] = _("{B_DEF_NAME_WITH_PREFIX} couldn't fully protect\nitself and got hurt!"); static const u8 sText_StockpiledEffectWoreOff[] = _("{B_ATK_NAME_WITH_PREFIX}'s stockpiled\neffect wore off!"); +static const u8 sText_PkmnRevivedReadyToFight[] = _("{B_BUFF1} was revived and\nis ready to fight again!"); const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = { + [STRINGID_PKMNREVIVEDREADYTOFIGHT - BATTLESTRINGS_TABLE_START] = sText_PkmnRevivedReadyToFight, [STRINGID_STOCKPILEDEFFECTWOREOFF - BATTLESTRINGS_TABLE_START] = sText_StockpiledEffectWoreOff, [STRINGID_COULDNTFULLYPROTECT - BATTLESTRINGS_TABLE_START] = sText_CouldntFullyProtect, [STRINGID_ATTACKERGAINEDSTRENGTHFROMTHEFALLEN - BATTLESTRINGS_TABLE_START] = sText_AttackerGainedStrengthFromTheFallen, diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index bba3bdd29e9d..a0d8181d6791 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -11225,6 +11225,50 @@ static void Cmd_various(void) gBattlescriptCurrInstr = cmd->nextInstr; return; } + case VARIOUS_TRY_REVIVAL_BLESSING: + { + VARIOUS_ARGS(const u8 *failInstr); + u32 side = GetBattlerSide(gBattlerAttacker); + u8 index = GetFirstFaintedPartyIndex(gBattlerAttacker); + + // Move fails if there are no battlers to revive. + if (index == PARTY_SIZE) + { + gBattlescriptCurrInstr = cmd->failInstr; + return; + } + + // Battler selected! Revive and go to next instruction. + if (gSelectedMonPartyId != PARTY_SIZE) + { + struct Pokemon *party = (side == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty; + + u16 hp = GetMonData(&party[gSelectedMonPartyId], MON_DATA_MAX_HP) / 2; + BtlController_EmitSetMonData(BUFFER_A, REQUEST_HP_BATTLE, gBitTable[gSelectedMonPartyId], sizeof(hp), &hp); + MarkBattlerForControllerExec(gBattlerAttacker); + PREPARE_SPECIES_BUFFER(gBattleTextBuff1, GetMonData(&party[gSelectedMonPartyId], MON_DATA_SPECIES)); + + // If an on-field battler is revived, it needs to be sent out again. + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && + gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerAttacker)] == gSelectedMonPartyId) + { + gBattleScripting.battler = BATTLE_PARTNER(gBattlerAttacker); + gBattleCommunication[MULTIUSE_STATE] = TRUE; + } + + gSelectedMonPartyId = PARTY_SIZE; + gBattlescriptCurrInstr = cmd->nextInstr; + return; + } + + // Open party menu, wait to go to next instruction. + else + { + BtlController_EmitChoosePokemon(BUFFER_A, PARTY_ACTION_CHOOSE_FAINTED_MON, PARTY_SIZE, ABILITY_NONE, gBattleStruct->battlerPartyOrders[gActiveBattler]); + MarkBattlerForControllerExec(gBattlerAttacker); + } + return; + } } // End of switch (cmd->id) gBattlescriptCurrInstr = cmd->nextInstr; @@ -16346,3 +16390,40 @@ static void TryUpdateRoundTurnOrder(void) } } +u8 GetFirstFaintedPartyIndex(u8 battlerId) +{ + u32 i; + u32 start = 0; + u32 end = PARTY_SIZE; + struct Pokemon *party = (GetBattlerSide(battlerId) == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty; + + // Check whether partner is separate trainer. + if ((GetBattlerSide(battlerId) == B_SIDE_PLAYER && gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) + || (GetBattlerSide(battlerId) == B_SIDE_OPPONENT && gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS)) + { + if (GetBattlerPosition(battlerId) == B_POSITION_OPPONENT_LEFT + || GetBattlerPosition(battlerId) == B_POSITION_PLAYER_LEFT) + { + end = PARTY_SIZE / 2; + } + else + { + start = PARTY_SIZE / 2; + } + } + + // Loop through to find fainted battler. + for (i = start; i < end; ++i) + { + u32 species = GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG); + if (species != SPECIES_NONE + && species != SPECIES_EGG + && GetMonData(&party[i], MON_DATA_HP) == 0) + { + return i; + } + } + + // Returns PARTY_SIZE if none found. + return PARTY_SIZE; +} diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index 3dc21a538275..4a89222a966c 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -13048,7 +13048,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_REVIVAL_BLESSING] = { - .effect = EFFECT_PLACEHOLDER, // EFFECT_REVIVAL_BLESSING + .effect = EFFECT_REVIVAL_BLESSING, .power = 0, .type = TYPE_NORMAL, .accuracy = 0, diff --git a/src/party_menu.c b/src/party_menu.c index 9185657a78b6..30f2f81501b4 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -1354,6 +1354,24 @@ static void HandleChooseMonSelection(u8 taskId, s8 *slotPtr) TryEnterMonForMinigame(taskId, (u8)*slotPtr); } break; + case PARTY_ACTION_CHOOSE_FAINTED_MON: + { + u8 partyId = GetPartyIdFromBattleSlot((u8)*slotPtr); + if (GetMonData(&gPlayerParty[*slotPtr], MON_DATA_HP) > 0 + || GetMonData(&gPlayerParty[*slotPtr], MON_DATA_SPECIES_OR_EGG) == SPECIES_EGG + || ((gBattleTypeFlags & BATTLE_TYPE_MULTI) && partyId >= (PARTY_SIZE / 2))) + { + // Can't select if egg, alive, or doesn't belong to you + PlaySE(SE_FAILURE); + } + else + { + PlaySE(SE_SELECT); + gSelectedMonPartyId = partyId; + Task_ClosePartyMenu(taskId); + } + break; + } default: case PARTY_ACTION_ABILITY_PREVENTS: case PARTY_ACTION_SWITCHING: @@ -1379,6 +1397,7 @@ static void HandleChooseMonCancel(u8 taskId, s8 *slotPtr) switch (gPartyMenu.action) { case PARTY_ACTION_SEND_OUT: + case PARTY_ACTION_CHOOSE_FAINTED_MON: PlaySE(SE_FAILURE); break; case PARTY_ACTION_SWITCH: diff --git a/test/move_effect_revival_blessing.c b/test/move_effect_revival_blessing.c new file mode 100644 index 000000000000..6bc76ec85e31 --- /dev/null +++ b/test/move_effect_revival_blessing.c @@ -0,0 +1,117 @@ +#include "global.h" +#include "test_battle.h" + +// Note: Since these tests are recorded battle, they don't test the right battle controller +// behaviors. These have been tested in-game, in double, in multi, and in link battles. AI will always +// revive their first fainted party member in order. + +#define MOVE_MESSAGE(name) \ + do { \ + if (B_EXPANDED_MOVE_NAMES == FALSE) \ + MESSAGE(name" used RevivlBlesng!"); \ + else \ + MESSAGE(name" used Revival Blessing!"); \ + } while (0); \ + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_REVIVAL_BLESSING].effect == EFFECT_REVIVAL_BLESSING); +} + +SINGLE_BATTLE_TEST("Revival Blessing revives a chosen fainted party member for the player") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET) { HP(0); } + PLAYER(SPECIES_WYNAUT) { HP(0); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_REVIVAL_BLESSING); SEND_OUT(player, 2); } + } SCENE { + MOVE_MESSAGE("Wobbuffet") + MESSAGE("Wynaut was revived and is ready to fight again!"); + } +} + +SINGLE_BATTLE_TEST("Revival Blessing revives a fainted party member for an opponent") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_RAICHU); + OPPONENT(SPECIES_PICHU) { HP(0); } + OPPONENT(SPECIES_PIKACHU) { HP(0); } + } WHEN { + TURN { MOVE(opponent, MOVE_REVIVAL_BLESSING); SEND_OUT(opponent, 1); } + } SCENE { + MOVE_MESSAGE("Foe Raichu") + MESSAGE("Pichu was revived and is ready to fight again!"); + } +} + +SINGLE_BATTLE_TEST("Revival Blessing fails if no party members are fainted") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_REVIVAL_BLESSING); } + } SCENE { + MOVE_MESSAGE("Wobbuffet") + MESSAGE("But it failed!"); + } +} + +// Note: There isn't a good way to test multi battles at the moment, but +// this PASSES in game! +TO_DO_BATTLE_TEST("Revival Blessing cannot revive a partner's party member"); +// DOUBLE_BATTLE_TEST("Revival Blessing cannot revive a partner's party member") +// { +// struct BattlePokemon *user; +// gBattleTypeFlags |= BATTLE_TYPE_TWO_OPPONENTS; +// PARAMETRIZE { user = opponentLeft; } +// PARAMETRIZE { user = opponentRight; } +// GIVEN { +// ASSUME((gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) != FALSE); +// PLAYER(SPECIES_WOBBUFFET); +// PLAYER(SPECIES_WOBBUFFET); +// OPPONENT(SPECIES_WOBBUFFET); +// OPPONENT(SPECIES_WOBBUFFET); +// OPPONENT(SPECIES_WOBBUFFET); +// OPPONENT(SPECIES_WYNAUT); +// OPPONENT(SPECIES_WYNAUT) { HP(0); } +// OPPONENT(SPECIES_WYNAUT); +// } WHEN { +// TURN { MOVE(user, MOVE_REVIVAL_BLESSING); } +// } SCENE { +// if (user == opponentLeft) { +// MOVE_MESSAGE(Foe Wobbuffet) +// MESSAGE("But it failed!"); +// } else { +// MOVE_MESSAGE(Foe Wynaut) +// MESSAGE("Wynaut was revived and is ready to fight again!"); +// } +// } +// } + +// Note: The test runner gets upset about "sending out" a battler on the field, +// but this PASSES in game! +TO_DO_BATTLE_TEST("Revived battlers still lose their turn"); +// DOUBLE_BATTLE_TEST("Revived battlers still lose their turn") +// { +// GIVEN { +// PLAYER(SPECIES_WOBBUFFET); +// PLAYER(SPECIES_WYNAUT); +// OPPONENT(SPECIES_WOBBUFFET); +// OPPONENT(SPECIES_WYNAUT) { HP(1); } +// } WHEN { +// TURN { MOVE(playerLeft, MOVE_TACKLE, target: opponentRight); +// MOVE(opponentLeft, MOVE_REVIVAL_BLESSING); +// SEND_OUT(opponentLeft, 1); } +// } SCENE { +// MESSAGE("Wobbuffet used Tackle!"); +// MESSAGE("Foe Wynaut fainted!"); +// MOVE_MESSAGE("Foe Wobbuffet") +// MESSAGE("Wynaut was revived and is ready to fight again!"); +// NOT { MESSAGE("Wynaut used Celebrate!"); } +// } +// } From eaddeabe1688bca79a85174a2dd668f88839b5bd Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Thu, 13 Apr 2023 13:17:25 -0400 Subject: [PATCH 253/428] Improve PR Template --- .github/pull_request_template.md | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index c381b50f1bae..930d20a01858 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -3,6 +3,14 @@ ## Description +## Images + + + +## Issue(s) that this PR fixes + + + ## **Discord contact info** - - \ No newline at end of file + + \ No newline at end of file From 958bc34cdf527f6c4130c0d13ed4a2f3b541f726 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Fri, 14 Apr 2023 09:42:48 -0400 Subject: [PATCH 254/428] Fixed AI not considering Hidden Abilities in its team during switching logic --- src/battle_ai_switch_items.c | 28 +++++++++------------------- 1 file changed, 9 insertions(+), 19 deletions(-) diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index d1272d67d79b..113e14cb8a1e 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -198,9 +198,8 @@ static bool8 FindMonThatAbsorbsOpponentsMove(void) if (GetMonData(&party[i], MON_DATA_HP) == 0) continue; - if (GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) == SPECIES_NONE) - continue; - if (GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) == SPECIES_EGG) + species = GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG); + if (species == SPECIES_NONE || species == SPECIES_EGG) continue; if (i == gBattlerPartyIndexes[battlerIn1]) continue; @@ -213,12 +212,7 @@ static bool8 FindMonThatAbsorbsOpponentsMove(void) if (IsAceMon(gActiveBattler, i)) continue; - - species = GetMonData(&party[i], MON_DATA_SPECIES); - if (GetMonData(&party[i], MON_DATA_ABILITY_NUM) != 0) - monAbility = gSpeciesInfo[species].abilities[1]; - else - monAbility = gSpeciesInfo[species].abilities[0]; + monAbility = GetMonAbility(&party[i]); if (absorbingTypeAbility == monAbility && Random() & 1) { @@ -570,9 +564,8 @@ static bool8 FindMonWithFlagsAndSuperEffective(u16 flags, u8 moduloPercent) if (GetMonData(&party[i], MON_DATA_HP) == 0) continue; - if (GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) == SPECIES_NONE) - continue; - if (GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) == SPECIES_EGG) + species = GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG); + if (species == SPECIES_NONE || species == SPECIES_EGG) continue; if (i == gBattlerPartyIndexes[battlerIn1]) continue; @@ -585,12 +578,7 @@ static bool8 FindMonWithFlagsAndSuperEffective(u16 flags, u8 moduloPercent) if (IsAceMon(gActiveBattler, i)) continue; - - species = GetMonData(&party[i], MON_DATA_SPECIES); - if (GetMonData(&party[i], MON_DATA_ABILITY_NUM) != 0) - monAbility = gSpeciesInfo[species].abilities[1]; - else - monAbility = gSpeciesInfo[species].abilities[0]; + monAbility = GetMonAbility(&party[i]); CalcPartyMonTypeEffectivenessMultiplier(gLastLandedMoves[gActiveBattler], species, monAbility); if (gMoveResultFlags & flags) @@ -964,7 +952,9 @@ u8 GetMostSuitableMonToSwitchInto(void) // Get invalid slots ids. for (i = firstId; i < lastId; i++) { - if (GetMonData(&party[i], MON_DATA_SPECIES) == SPECIES_NONE + u16 species = GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG); + if (species == SPECIES_NONE + || species == SPECIES_EGG || GetMonData(&party[i], MON_DATA_HP) == 0 || gBattlerPartyIndexes[battlerIn1] == i || gBattlerPartyIndexes[battlerIn2] == i From 2eabcea86e2d4816a30ce7deb52d32ead3339448 Mon Sep 17 00:00:00 2001 From: AgustinGDLV <103095241+AgustinGDLV@users.noreply.github.com> Date: Fri, 14 Apr 2023 11:25:50 -0700 Subject: [PATCH 255/428] Battle Item Refactor (#2902) * items that can be used in battle now use battlescripts * removed ExecuteTableBasedItemEffect_ * taught AI how to use items, removed AI_itemtype/flag * X-Items store stages raised in holdEffectParam * USE_ITEM in tests --- asm/macros/battle_script.inc | 16 + data/battle_scripts_2.s | 383 ++++++++++++---------- include/battle.h | 3 +- include/battle_ai_switch_items.h | 30 -- include/constants/battle_string_ids.h | 5 +- include/constants/item_effects.h | 12 +- include/constants/items.h | 31 +- include/item.h | 4 +- include/item_use.h | 9 +- include/party_menu.h | 3 + include/recorded_battle.h | 1 + src/battle_ai_switch_items.c | 102 ++---- src/battle_controller_opponent.c | 2 +- src/battle_controller_recorded_opponent.c | 5 + src/battle_controller_recorded_player.c | 5 + src/battle_main.c | 4 +- src/battle_message.c | 23 +- src/battle_pyramid_bag.c | 17 +- src/battle_script_commands.c | 144 +++++++- src/battle_util.c | 88 +---- src/data/items.h | 337 ++++++++----------- src/data/pokemon/item_effects.h | 2 - src/item.c | 70 +++- src/item_menu.c | 17 +- src/item_use.c | 164 +++++---- src/party_menu.c | 222 +++++++++---- src/pokemon.c | 220 +------------ test/item_effect_increase_stat.c | 25 ++ test/item_effect_restore_hp.c | 37 +++ test/item_effect_restore_pp.c | 19 ++ test/test_battle.h | 21 +- test/test_runner_battle.c | 38 +++ 32 files changed, 1102 insertions(+), 957 deletions(-) create mode 100644 test/item_effect_increase_stat.c create mode 100644 test/item_effect_restore_hp.c create mode 100644 test/item_effect_restore_pp.c diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index 30df11232b48..6e351e62fb4f 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -1330,6 +1330,22 @@ .4byte \jumpInstr .endm + .macro itemrestorehp + callnative BS_ItemRestoreHP + .endm + + .macro itemcurestatus + callnative BS_ItemCureStatus + .endm + + .macro itemincreasestat + callnative BS_ItemIncreaseStat + .endm + + .macro itemrestorepp + callnative BS_ItemRestorePP + .endm + @ various command changed to more readable macros .macro cancelmultiturnmoves battler:req various \battler, VARIOUS_CANCEL_MULTI_TURN_MOVES diff --git a/data/battle_scripts_2.s b/data/battle_scripts_2.s index f4c8bd5a77bb..dee482d1d3b8 100644 --- a/data/battle_scripts_2.s +++ b/data/battle_scripts_2.s @@ -3,219 +3,256 @@ #include "constants/battle_script_commands.h" #include "constants/battle_anim.h" #include "constants/battle_string_ids.h" -#include "constants/items.h" +#include "constants/moves.h" #include "constants/songs.h" #include "constants/game_stat.h" - .include "asm/macros.inc" - .include "asm/macros/battle_script.inc" - .include "constants/constants.inc" + .include "asm/macros.inc" + .include "asm/macros/battle_script.inc" + .include "constants/constants.inc" - .section script_data, "aw", %progbits + .section script_data, "aw", %progbits - .align 2 + .align 2 gBattlescriptsForUsingItem:: - .4byte BattleScript_PlayerUsesItem - .4byte BattleScript_OpponentUsesHealItem @ AI_ITEM_FULL_RESTORE - .4byte BattleScript_OpponentUsesHealItem @ AI_ITEM_HEAL_HP - .4byte BattleScript_OpponentUsesStatusCureItem @ AI_ITEM_CURE_CONDITION - .4byte BattleScript_OpponentUsesXItem @ AI_ITEM_X_STAT - .4byte BattleScript_OpponentUsesGuardSpec @ AI_ITEM_GUARD_SPEC - - .align 2 -gBattlescriptsForRunningByItem:: - .4byte BattleScript_RunByUsingItem - - .align 2 + .4byte BattleScript_ItemRestoreHP @ EFFECT_ITEM_RESTORE_HP + .4byte BattleScript_ItemCureStatus @ EFFECT_ITEM_CURE_STATUS + .4byte BattleScript_ItemHealAndCureStatus @ EFFECT_ITEM_HEAL_AND_CURE_STATUS + .4byte BattleScript_ItemIncreaseStat @ EFFECT_ITEM_INCREASE_STAT + .4byte BattleScript_ItemSetMist @ EFFECT_ITEM_SET_MIST + .4byte BattleScript_ItemSetFocusEnergy @ EFFECT_ITEM_SET_FOCUS_ENERGY + .4byte BattleScript_RunByUsingItem @ EFFECT_ITEM_ESCAPE + .4byte BattleScript_BallThrow @ EFFECT_ITEM_THROW_BALL + .4byte BattleScript_ItemRestoreHP @ EFFECT_ITEM_REVIVE + .4byte BattleScript_ItemRestorePP @ EFFECT_ITEM_RESTORE_PP + .4byte BattleScript_ItemIncreaseAllStats @ EFFECT_ITEM_INCREASE_ALL_STATS + + .align 2 gBattlescriptsForSafariActions:: - .4byte BattleScript_ActionWatchesCarefully - .4byte BattleScript_ActionGetNear - .4byte BattleScript_ActionThrowPokeblock - .4byte BattleScript_ActionWallyThrow + .4byte BattleScript_ActionWatchesCarefully + .4byte BattleScript_ActionGetNear + .4byte BattleScript_ActionThrowPokeblock + .4byte BattleScript_ActionWallyThrow + +BattleScript_ItemEnd: + end + +BattleScript_UseItemMessage: + printstring STRINGID_EMPTYSTRING3 + pause B_WAIT_TIME_MED + playse SE_USE_ITEM + getbattlerside BS_ATTACKER + copybyte cMULTISTRING_CHOOSER, gBattleCommunication + printfromtable gTrainerUsedItemStringIds + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_ItemRestoreHP:: + call BattleScript_UseItemMessage + itemrestorehp + printstring STRINGID_ITEMRESTOREDSPECIESHEALTH + waitmessage B_WAIT_TIME_LONG + jumpifbyte CMP_EQUAL, gBattleCommunication, TRUE, BattleScript_ItemRestoreHP_SendOutRevivedBattler + bichalfword gMoveResultFlags, MOVE_RESULT_NO_EFFECT + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE + healthbarupdate BS_ATTACKER + datahpupdate BS_ATTACKER + updatestatusicon BS_ATTACKER + end + +BattleScript_ItemRestoreHP_SendOutRevivedBattler: + switchinanim BS_ATTACKER, FALSE + waitstate + switchineffects BS_ATTACKER + end + +BattleScript_ItemCureStatus:: + call BattleScript_UseItemMessage + itemcurestatus + printstring STRINGID_ITEMCUREDSPECIESSTATUS + waitmessage B_WAIT_TIME_LONG + updatestatusicon BS_ATTACKER + end + +BattleScript_ItemHealAndCureStatus:: + call BattleScript_UseItemMessage + itemrestorehp + curestatus BS_ATTACKER + printstring STRINGID_ITEMRESTOREDSPECIESHEALTH + waitmessage B_WAIT_TIME_LONG + bichalfword gMoveResultFlags, MOVE_RESULT_NO_EFFECT + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE + healthbarupdate BS_ATTACKER + datahpupdate BS_ATTACKER + updatestatusicon BS_ATTACKER + end + +BattleScript_ItemIncreaseStat:: + call BattleScript_UseItemMessage + itemincreasestat + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_NOT_PROTECT_AFFECTED | STAT_CHANGE_ALLOW_PTR, BattleScript_ItemEnd + setgraphicalstatchangevalues + playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG + end + +BattleScript_ItemSetMist:: + call BattleScript_UseItemMessage + setmist + playmoveanimation BS_ATTACKER, MOVE_MIST + waitanimation + printfromtable gMistUsedStringIds + waitmessage B_WAIT_TIME_LONG + end + +BattleScript_ItemSetFocusEnergy:: + call BattleScript_UseItemMessage + jumpifstatus2 BS_ATTACKER, STATUS2_FOCUS_ENERGY, BattleScript_ButItFailed + setfocusenergy + playmoveanimation BS_ATTACKER, MOVE_FOCUS_ENERGY + waitanimation + printstring STRINGID_PKMNUSEDXTOGETPUMPED + waitmessage B_WAIT_TIME_LONG + end + +BattleScript_ItemRestorePP:: + call BattleScript_UseItemMessage + itemrestorepp + printstring STRINGID_ITEMRESTOREDSPECIESPP + waitmessage B_WAIT_TIME_LONG + end + +BattleScript_ItemIncreaseAllStats:: + call BattleScript_UseItemMessage + call BattleScript_AllStatsUp + end BattleScript_BallThrow:: - jumpifword CMP_COMMON_BITS, gBattleTypeFlags, BATTLE_TYPE_WALLY_TUTORIAL, BattleScript_BallThrowByWally - printstring STRINGID_PLAYERUSEDITEM - handleballthrow + jumpifword CMP_COMMON_BITS, gBattleTypeFlags, BATTLE_TYPE_WALLY_TUTORIAL, BattleScript_BallThrowByWally + printstring STRINGID_PLAYERUSEDITEM + handleballthrow BattleScript_BallThrowByWally:: - printstring STRINGID_WALLYUSEDITEM - handleballthrow + printstring STRINGID_WALLYUSEDITEM + handleballthrow BattleScript_SafariBallThrow:: - printstring STRINGID_PLAYERUSEDITEM - updatestatusicon BS_ATTACKER - handleballthrow + printstring STRINGID_PLAYERUSEDITEM + updatestatusicon BS_ATTACKER + handleballthrow BattleScript_SuccessBallThrow:: - setbyte sMON_CAUGHT, TRUE - incrementgamestat GAME_STAT_POKEMON_CAPTURES + setbyte sMON_CAUGHT, TRUE + incrementgamestat GAME_STAT_POKEMON_CAPTURES BattleScript_PrintCaughtMonInfo:: - printstring STRINGID_GOTCHAPKMNCAUGHTPLAYER - jumpifbyte CMP_NOT_EQUAL, sEXP_CATCH, TRUE, BattleScript_TryPrintCaughtMonInfo - setbyte sGIVEEXP_STATE, 0 - getexp BS_TARGET - sethword gBattle_BG2_X, 0 + printstring STRINGID_GOTCHAPKMNCAUGHTPLAYER + jumpifbyte CMP_NOT_EQUAL, sEXP_CATCH, TRUE, BattleScript_TryPrintCaughtMonInfo + setbyte sGIVEEXP_STATE, 0 + getexp BS_TARGET + sethword gBattle_BG2_X, 0 BattleScript_TryPrintCaughtMonInfo: - trysetcaughtmondexflags BattleScript_TryNicknameCaughtMon - printstring STRINGID_PKMNDATAADDEDTODEX - waitstate - setbyte gBattleCommunication, 0 - displaydexinfo + trysetcaughtmondexflags BattleScript_TryNicknameCaughtMon + printstring STRINGID_PKMNDATAADDEDTODEX + waitstate + setbyte gBattleCommunication, 0 + displaydexinfo BattleScript_TryNicknameCaughtMon:: - printstring STRINGID_GIVENICKNAMECAPTURED - waitstate - setbyte gBattleCommunication, 0 - trygivecaughtmonnick BattleScript_GiveCaughtMonEnd - givecaughtmon - printfromtable gCaughtMonStringIds - waitmessage B_WAIT_TIME_LONG - goto BattleScript_SuccessBallThrowEnd + printstring STRINGID_GIVENICKNAMECAPTURED + waitstate + setbyte gBattleCommunication, 0 + trygivecaughtmonnick BattleScript_GiveCaughtMonEnd + givecaughtmon + printfromtable gCaughtMonStringIds + waitmessage B_WAIT_TIME_LONG + goto BattleScript_SuccessBallThrowEnd BattleScript_GiveCaughtMonEnd:: - givecaughtmon + givecaughtmon BattleScript_SuccessBallThrowEnd:: - setbyte gBattleOutcome, B_OUTCOME_CAUGHT - finishturn + setbyte gBattleOutcome, B_OUTCOME_CAUGHT + finishturn BattleScript_WallyBallThrow:: - printstring STRINGID_GOTCHAPKMNCAUGHTWALLY - setbyte gBattleOutcome, B_OUTCOME_CAUGHT - finishturn + printstring STRINGID_GOTCHAPKMNCAUGHTWALLY + setbyte gBattleOutcome, B_OUTCOME_CAUGHT + finishturn BattleScript_ShakeBallThrow:: - printfromtable gBallEscapeStringIds - waitmessage B_WAIT_TIME_LONG - jumpifword CMP_NO_COMMON_BITS, gBattleTypeFlags, BATTLE_TYPE_SAFARI, BattleScript_ShakeBallThrowEnd - jumpifbyte CMP_NOT_EQUAL, gNumSafariBalls, 0, BattleScript_ShakeBallThrowEnd - printstring STRINGID_OUTOFSAFARIBALLS - waitmessage B_WAIT_TIME_LONG - setbyte gBattleOutcome, B_OUTCOME_NO_SAFARI_BALLS + printfromtable gBallEscapeStringIds + waitmessage B_WAIT_TIME_LONG + jumpifword CMP_NO_COMMON_BITS, gBattleTypeFlags, BATTLE_TYPE_SAFARI, BattleScript_ShakeBallThrowEnd + jumpifbyte CMP_NOT_EQUAL, gNumSafariBalls, 0, BattleScript_ShakeBallThrowEnd + printstring STRINGID_OUTOFSAFARIBALLS + waitmessage B_WAIT_TIME_LONG + setbyte gBattleOutcome, B_OUTCOME_NO_SAFARI_BALLS BattleScript_ShakeBallThrowEnd:: - finishaction + finishaction BattleScript_TrainerBallBlock:: - waitmessage B_WAIT_TIME_LONG - printstring STRINGID_TRAINERBLOCKEDBALL - waitmessage B_WAIT_TIME_LONG - printstring STRINGID_DONTBEATHIEF - waitmessage B_WAIT_TIME_LONG - finishaction - -BattleScript_PlayerUsesItem:: - moveendcase MOVEEND_MIRROR_MOVE - end - -BattleScript_OpponentUsesHealItem:: - printstring STRINGID_EMPTYSTRING3 - pause B_WAIT_TIME_MED - playse SE_USE_ITEM - printstring STRINGID_TRAINER1USEDITEM - waitmessage B_WAIT_TIME_LONG - bichalfword gMoveResultFlags, MOVE_RESULT_NO_EFFECT - useitemonopponent - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE - healthbarupdate BS_ATTACKER - datahpupdate BS_ATTACKER - printstring STRINGID_PKMNSITEMRESTOREDHEALTH - waitmessage B_WAIT_TIME_LONG - updatestatusicon BS_ATTACKER - moveendcase MOVEEND_MIRROR_MOVE - finishaction - -BattleScript_OpponentUsesStatusCureItem:: - printstring STRINGID_EMPTYSTRING3 - pause B_WAIT_TIME_MED - playse SE_USE_ITEM - printstring STRINGID_TRAINER1USEDITEM - waitmessage B_WAIT_TIME_LONG - useitemonopponent - printfromtable gTrainerItemCuredStatusStringIds - waitmessage B_WAIT_TIME_LONG - updatestatusicon BS_ATTACKER - moveendcase MOVEEND_MIRROR_MOVE - finishaction - -BattleScript_OpponentUsesXItem:: - printstring STRINGID_EMPTYSTRING3 - pause B_WAIT_TIME_MED - playse SE_USE_ITEM - printstring STRINGID_TRAINER1USEDITEM - waitmessage B_WAIT_TIME_LONG - useitemonopponent - printfromtable gStatUpStringIds - waitmessage B_WAIT_TIME_LONG - moveendcase MOVEEND_MIRROR_MOVE - finishaction - -BattleScript_OpponentUsesGuardSpec:: - printstring STRINGID_EMPTYSTRING3 - pause B_WAIT_TIME_MED - playse SE_USE_ITEM - printstring STRINGID_TRAINER1USEDITEM - waitmessage B_WAIT_TIME_LONG - useitemonopponent - printfromtable gMistUsedStringIds - waitmessage B_WAIT_TIME_LONG - moveendcase MOVEEND_MIRROR_MOVE - finishaction + waitmessage B_WAIT_TIME_LONG + printstring STRINGID_TRAINERBLOCKEDBALL + waitmessage B_WAIT_TIME_LONG + printstring STRINGID_DONTBEATHIEF + waitmessage B_WAIT_TIME_LONG + finishaction BattleScript_RunByUsingItem:: - playse SE_FLEE - setbyte gBattleOutcome, B_OUTCOME_RAN - finishturn + playse SE_FLEE + setbyte gBattleOutcome, B_OUTCOME_RAN + finishturn BattleScript_ActionWatchesCarefully: - printstring STRINGID_PKMNWATCHINGCAREFULLY - waitmessage B_WAIT_TIME_LONG - end2 + printstring STRINGID_PKMNWATCHINGCAREFULLY + waitmessage B_WAIT_TIME_LONG + end2 BattleScript_ActionGetNear: - printfromtable gSafariGetNearStringIds - waitmessage B_WAIT_TIME_LONG - end2 + printfromtable gSafariGetNearStringIds + waitmessage B_WAIT_TIME_LONG + end2 BattleScript_ActionThrowPokeblock: - printstring STRINGID_THREWPOKEBLOCKATPKMN - waitmessage B_WAIT_TIME_LONG - playanimation BS_ATTACKER, B_ANIM_POKEBLOCK_THROW, NULL - printfromtable gSafariPokeblockResultStringIds - waitmessage B_WAIT_TIME_LONG - end2 + printstring STRINGID_THREWPOKEBLOCKATPKMN + waitmessage B_WAIT_TIME_LONG + playanimation BS_ATTACKER, B_ANIM_POKEBLOCK_THROW, NULL + printfromtable gSafariPokeblockResultStringIds + waitmessage B_WAIT_TIME_LONG + end2 BattleScript_ActionWallyThrow: - printstring STRINGID_RETURNMON - waitmessage B_WAIT_TIME_LONG - returnatktoball - waitstate - trainerslidein BS_TARGET - waitstate - printstring STRINGID_YOUTHROWABALLNOWRIGHT - waitmessage B_WAIT_TIME_LONG - end2 + printstring STRINGID_RETURNMON + waitmessage B_WAIT_TIME_LONG + returnatktoball + waitstate + trainerslidein BS_TARGET + waitstate + printstring STRINGID_YOUTHROWABALLNOWRIGHT + waitmessage B_WAIT_TIME_LONG + end2 BattleScript_TrainerASlideMsgRet:: - handletrainerslidemsg BS_SCRIPTING, 0 - trainerslidein B_POSITION_OPPONENT_LEFT - handletrainerslidemsg BS_SCRIPTING, 1 - waitstate - trainerslideout B_POSITION_OPPONENT_LEFT - waitstate - handletrainerslidemsg BS_SCRIPTING, 2 - return + handletrainerslidemsg BS_SCRIPTING, 0 + trainerslidein B_POSITION_OPPONENT_LEFT + handletrainerslidemsg BS_SCRIPTING, 1 + waitstate + trainerslideout B_POSITION_OPPONENT_LEFT + waitstate + handletrainerslidemsg BS_SCRIPTING, 2 + return BattleScript_TrainerASlideMsgEnd2:: - call BattleScript_TrainerASlideMsgRet - end2 - + call BattleScript_TrainerASlideMsgRet + end2 + BattleScript_TrainerBSlideMsgRet:: - handletrainerslidemsg BS_SCRIPTING, 0 - trainerslidein B_POSITION_OPPONENT_RIGHT - handletrainerslidemsg BS_SCRIPTING, 1 - waitstate - trainerslideout B_POSITION_OPPONENT_RIGHT - waitstate - handletrainerslidemsg BS_SCRIPTING, 2 - return + handletrainerslidemsg BS_SCRIPTING, 0 + trainerslidein B_POSITION_OPPONENT_RIGHT + handletrainerslidemsg BS_SCRIPTING, 1 + waitstate + trainerslideout B_POSITION_OPPONENT_RIGHT + waitstate + handletrainerslidemsg BS_SCRIPTING, 2 + return BattleScript_TrainerBSlideMsgEnd2:: - call BattleScript_TrainerBSlideMsgRet - end2 + call BattleScript_TrainerBSlideMsgRet + end2 diff --git a/include/battle.h b/include/battle.h index 19f9df13d8f6..46975bec3cf3 100644 --- a/include/battle.h +++ b/include/battle.h @@ -581,8 +581,6 @@ struct BattleStruct void (*savedCallback)(void); u16 usedHeldItems[PARTY_SIZE][NUM_BATTLE_SIDES]; // For each party member and side. For harvest, recycle u16 chosenItem[MAX_BATTLERS_COUNT]; - u8 AI_itemType[2]; - u8 AI_itemFlags[2]; u16 choicedMove[MAX_BATTLERS_COUNT]; u16 changedItems[MAX_BATTLERS_COUNT]; u8 switchInItemsCounter; @@ -662,6 +660,7 @@ struct BattleStruct u8 storedHealingWish:4; // Each battler as a bit. u8 storedLunarDance:4; // Each battler as a bit. u16 supremeOverlordModifier[MAX_BATTLERS_COUNT]; + u8 itemPartyIndex[MAX_BATTLERS_COUNT]; }; #define F_DYNAMIC_TYPE_1 (1 << 6) diff --git a/include/battle_ai_switch_items.h b/include/battle_ai_switch_items.h index 70dc41b34b7e..622593b6ddd0 100644 --- a/include/battle_ai_switch_items.h +++ b/include/battle_ai_switch_items.h @@ -1,36 +1,6 @@ #ifndef GUARD_BATTLE_AI_SWITCH_ITEMS_H #define GUARD_BATTLE_AI_SWITCH_ITEMS_H -enum -{ - AI_ITEM_FULL_RESTORE = 1, - AI_ITEM_HEAL_HP, - AI_ITEM_CURE_CONDITION, - AI_ITEM_X_STAT, - AI_ITEM_GUARD_SPEC, - AI_ITEM_NOT_RECOGNIZABLE -}; - -enum { - AI_HEAL_CONFUSION, - AI_HEAL_PARALYSIS, - AI_HEAL_FREEZE, - AI_HEAL_BURN, - AI_HEAL_POISON, - AI_HEAL_SLEEP, -}; - -enum { - AI_X_ATTACK, - AI_X_DEFEND, - AI_X_SPEED, - AI_X_SPATK, - AI_X_SPDEF, // Unused - AI_X_ACCURACY, - AI_X_EVASION, // Unused - AI_DIRE_HIT, -}; - void GetAIPartyIndexes(u32 battlerId, s32 *firstId, s32 *lastId); void AI_TrySwitchOrUseItem(void); u8 GetMostSuitableMonToSwitchInto(void); diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index 1124c3a60727..e5520775346c 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -648,8 +648,11 @@ #define STRINGID_COULDNTFULLYPROTECT 646 #define STRINGID_STOCKPILEDEFFECTWOREOFF 647 #define STRINGID_PKMNREVIVEDREADYTOFIGHT 648 +#define STRINGID_ITEMRESTOREDSPECIESHEALTH 649 +#define STRINGID_ITEMCUREDSPECIESSTATUS 650 +#define STRINGID_ITEMRESTOREDSPECIESPP 651 -#define BATTLESTRINGS_COUNT 649 +#define BATTLESTRINGS_COUNT 652 // This is the string id that gBattleStringsTable starts with. // String ids before this (e.g. STRINGID_INTROMSG) are not in the table, diff --git a/include/constants/item_effects.h b/include/constants/item_effects.h index c3970b9c1bd5..7cd4a58f48ba 100644 --- a/include/constants/item_effects.h +++ b/include/constants/item_effects.h @@ -7,12 +7,12 @@ #define ITEM0_INFATUATION 0x80 // new field 1 masks -#define ITEM1_X_ATTACK 0x1 -#define ITEM1_X_DEFENSE 0x2 -#define ITEM1_X_SPEED 0x4 -#define ITEM1_X_SPATK 0x8 -#define ITEM1_X_SPDEF 0x10 -#define ITEM1_X_ACCURACY 0x20 +#define ITEM1_X_ATTACK STAT_ATK +#define ITEM1_X_DEFENSE STAT_DEF +#define ITEM1_X_SPEED STAT_SPEED +#define ITEM1_X_SPATK STAT_SPATK +#define ITEM1_X_SPDEF STAT_SPDEF +#define ITEM1_X_ACCURACY STAT_ACC // field 3 masks #define ITEM3_CONFUSION 0x1 diff --git a/include/constants/items.h b/include/constants/items.h index 2b6ba5c8f241..4421181668c5 100644 --- a/include/constants/items.h +++ b/include/constants/items.h @@ -1030,14 +1030,27 @@ #define EXP_30000 5 // Item type IDs (used to determine the exit callback) -#define ITEM_USE_MAIL 0 -#define ITEM_USE_PARTY_MENU 1 -#define ITEM_USE_FIELD 2 -#define ITEM_USE_PBLOCK_CASE 3 -#define ITEM_USE_BAG_MENU 4 // No exit callback, stays in bag menu - -// Item battle usage IDs (only checked to see if nonzero) -#define ITEM_B_USE_MEDICINE 1 -#define ITEM_B_USE_OTHER 2 +#define ITEM_USE_MAIL 0 +#define ITEM_USE_PARTY_MENU 1 +#define ITEM_USE_FIELD 2 +#define ITEM_USE_PBLOCK_CASE 3 +#define ITEM_USE_BAG_MENU 4 // No exit callback, stays in bag menu +#define ITEM_USE_PARTY_MENU_MOVES 5 + +// Item battle script IDs (need to be non-zero) +#define EFFECT_ITEM_RESTORE_HP 1 +#define EFFECT_ITEM_CURE_STATUS 2 +#define EFFECT_ITEM_HEAL_AND_CURE_STATUS 3 +#define EFFECT_ITEM_INCREASE_STAT 4 +#define EFFECT_ITEM_SET_MIST 5 +#define EFFECT_ITEM_SET_FOCUS_ENERGY 6 +#define EFFECT_ITEM_ESCAPE 7 +#define EFFECT_ITEM_THROW_BALL 8 +#define EFFECT_ITEM_REVIVE 9 +#define EFFECT_ITEM_RESTORE_PP 10 +#define EFFECT_ITEM_INCREASE_ALL_STATS 11 + +// Enigma Berry dummy constant +#define EFFECT_ITEM_ENIGMA_BERRY_EREADER 1 #endif // GUARD_CONSTANTS_ITEMS_H diff --git a/include/item.h b/include/item.h index cf2209e0e67f..a99782f80376 100644 --- a/include/item.h +++ b/include/item.h @@ -19,7 +19,6 @@ struct Item u8 type; ItemUseFunc fieldUseFunc; u8 battleUsage; - ItemUseFunc battleUseFunc; u8 secondaryId; u8 flingPower; }; @@ -72,8 +71,9 @@ u8 ItemId_GetPocket(u16 itemId); u8 ItemId_GetType(u16 itemId); ItemUseFunc ItemId_GetFieldFunc(u16 itemId); u8 ItemId_GetBattleUsage(u16 itemId); -ItemUseFunc ItemId_GetBattleFunc(u16 itemId); u8 ItemId_GetSecondaryId(u16 itemId); u8 ItemId_GetFlingPower(u16 itemId); +u32 GetItemStatus1Mask(u16 itemId); +u32 GetItemStatus2Mask(u16 itemId); #endif // GUARD_ITEM_H diff --git a/include/item_use.h b/include/item_use.h index 812e984ec8b9..afa87c69732c 100644 --- a/include/item_use.h +++ b/include/item_use.h @@ -30,12 +30,9 @@ void ItemUseOutOfBattle_FormChange(u8); void ItemUseOutOfBattle_FormChange_ConsumedOnUse(u8); void ItemUseOutOfBattle_Honey(u8); void ItemUseOutOfBattle_CannotUse(u8); -void ItemUseInBattle_PokeBall(u8); -void ItemUseInBattle_StatIncrease(u8); -void ItemUseInBattle_Medicine(u8); -void ItemUseInBattle_PPRecovery(u8); -void ItemUseInBattle_Escape(u8); -void ItemUseInBattle_EnigmaBerry(u8); +void ItemUseInBattle_BagMenu(u8 taskId); +void ItemUseInBattle_PartyMenu(u8 taskId); +void ItemUseInBattle_PartyMenuChooseMove(u8 taskId); void Task_UseDigEscapeRopeOnField(u8 taskId); u8 CanUseDigOrEscapeRopeOnCurMap(void); u8 CheckIfItemIsTMHMOrEvolutionStone(u16 itemId); diff --git a/include/party_menu.h b/include/party_menu.h index afb320e18c6c..31e591074844 100644 --- a/include/party_menu.h +++ b/include/party_menu.h @@ -48,6 +48,8 @@ void LoadHeldItemIcons(void); void DrawHeldItemIconsForTrade(u8 *partyCounts, u8 *partySpriteIds, u8 whichParty); void LoadPartyMenuAilmentGfx(void); void CB2_ShowPartyMenuForItemUse(void); +void ItemUseCB_BattleScript(u8 taskId, TaskFunc task); +void ItemUseCB_BattleChooseMove(u8 taskId, TaskFunc task); void ItemUseCB_Medicine(u8 taskId, TaskFunc task); void ItemUseCB_AbilityCapsule(u8 taskId, TaskFunc task); void ItemUseCB_AbilityPatch(u8 taskId, TaskFunc task); @@ -64,6 +66,7 @@ void ItemUseCB_SacredAsh(u8 taskId, TaskFunc task); void ItemUseCB_EvolutionStone(u8 taskId, TaskFunc task); void ItemUseCB_FormChange(u8 taskId, TaskFunc task); void ItemUseCB_FormChange_ConsumedOnUse(u8 taskId, TaskFunc task); +const u8* GetItemEffect(u16 item); u8 GetItemEffectType(u16 item); void CB2_PartyMenuFromStartMenu(void); void CB2_ChooseMonToGiveItem(void); diff --git a/include/recorded_battle.h b/include/recorded_battle.h index fbe14a656917..d04e89c3626b 100644 --- a/include/recorded_battle.h +++ b/include/recorded_battle.h @@ -44,6 +44,7 @@ enum RECORDED_MOVE_TARGET, RECORDED_PARTY_INDEX, RECORDED_BATTLE_PALACE_ACTION, + RECORDED_ITEM_ID, }; extern u32 gRecordedBattleRngSeed; diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index 113e14cb8a1e..29911d798f13 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -10,6 +10,8 @@ #include "constants/hold_effects.h" #include "battle_setup.h" #include "data.h" +#include "item.h" +#include "party_menu.h" #include "pokemon.h" #include "random.h" #include "util.h" @@ -995,22 +997,6 @@ u8 GetMostSuitableMonToSwitchInto(void) return PARTY_SIZE; } -static u8 GetAI_ItemType(u16 itemId, const u8 *itemEffect) -{ - if (itemId == ITEM_FULL_RESTORE) - return AI_ITEM_FULL_RESTORE; - else if (itemEffect[4] & ITEM4_HEAL_HP) - return AI_ITEM_HEAL_HP; - else if (itemEffect[3] & ITEM3_STATUS_ALL) - return AI_ITEM_CURE_CONDITION; - else if ((itemEffect[0] & ITEM0_DIRE_HIT) || itemEffect[1]) - return AI_ITEM_X_STAT; - else if (itemEffect[3] & ITEM3_GUARD_SPEC) - return AI_ITEM_GUARD_SPEC; - else - return AI_ITEM_NOT_RECOGNIZABLE; -} - static bool32 AiExpectsToFaintPlayer(void) { bool32 canFaintPlayer; @@ -1070,96 +1056,70 @@ static bool8 ShouldUseItem(void) u8 paramOffset; u8 battlerSide; - if (i != 0 && validMons > (gBattleResources->battleHistory->itemsNo - i) + 1) - continue; item = gBattleResources->battleHistory->trainerItems[i]; if (item == ITEM_NONE) continue; - if (gItemEffectTable[item] == NULL) + itemEffects = GetItemEffect(item); + if (itemEffects == NULL) continue; - if (item == ITEM_ENIGMA_BERRY_E_READER) - itemEffects = gSaveBlock1Ptr->enigmaBerry.itemEffect; - else - itemEffects = gItemEffectTable[item]; - - *(gBattleStruct->AI_itemType + gActiveBattler / 2) = GetAI_ItemType(item, itemEffects); - - switch (*(gBattleStruct->AI_itemType + gActiveBattler / 2)) + switch (ItemId_GetBattleUsage(item)) { - case AI_ITEM_FULL_RESTORE: + case EFFECT_ITEM_HEAL_AND_CURE_STATUS: shouldUse = AI_ShouldHeal(0); break; - case AI_ITEM_HEAL_HP: + case EFFECT_ITEM_RESTORE_HP: shouldUse = AI_ShouldHeal(itemEffects[GetItemEffectParamOffset(item, 4, 4)]); break; - case AI_ITEM_CURE_CONDITION: - *(gBattleStruct->AI_itemFlags + gActiveBattler / 2) = 0; + case EFFECT_ITEM_CURE_STATUS: if (itemEffects[3] & ITEM3_SLEEP && gBattleMons[gActiveBattler].status1 & STATUS1_SLEEP) - { - *(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= (1 << AI_HEAL_SLEEP); shouldUse = TRUE; - } if (itemEffects[3] & ITEM3_POISON && (gBattleMons[gActiveBattler].status1 & STATUS1_POISON || gBattleMons[gActiveBattler].status1 & STATUS1_TOXIC_POISON)) - { - *(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= (1 << AI_HEAL_POISON); shouldUse = TRUE; - } if (itemEffects[3] & ITEM3_BURN && gBattleMons[gActiveBattler].status1 & STATUS1_BURN) - { - *(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= (1 << AI_HEAL_BURN); shouldUse = TRUE; - } if (itemEffects[3] & ITEM3_FREEZE && gBattleMons[gActiveBattler].status1 & STATUS1_FREEZE) - { - *(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= (1 << AI_HEAL_FREEZE); shouldUse = TRUE; - } if (itemEffects[3] & ITEM3_PARALYSIS && gBattleMons[gActiveBattler].status1 & STATUS1_PARALYSIS) - { - *(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= (1 << AI_HEAL_PARALYSIS); shouldUse = TRUE; - } if (itemEffects[3] & ITEM3_CONFUSION && gBattleMons[gActiveBattler].status2 & STATUS2_CONFUSION) - { - *(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= (1 << AI_HEAL_CONFUSION); shouldUse = TRUE; - } break; - case AI_ITEM_X_STAT: - *(gBattleStruct->AI_itemFlags + gActiveBattler / 2) = 0; - if (gDisableStructs[gActiveBattler].isFirstTurn == 0) + case EFFECT_ITEM_INCREASE_STAT: + case EFFECT_ITEM_INCREASE_ALL_STATS: + if (!gDisableStructs[gActiveBattler].isFirstTurn + || AI_OpponentCanFaintAiWithMod(0)) break; - if (itemEffects[1] & ITEM1_X_ATTACK) - *(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= (1 << AI_X_ATTACK); - if (itemEffects[1] & ITEM1_X_DEFENSE) - *(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= (1 << AI_X_DEFEND); - if (itemEffects[1] & ITEM1_X_SPEED) - *(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= (1 << AI_X_SPEED); - if (itemEffects[1] & ITEM1_X_SPATK) - *(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= (1 << AI_X_SPATK); - if (itemEffects[1] & ITEM1_X_SPDEF) - *(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= (1 << AI_X_SPDEF); - if (itemEffects[1] & ITEM1_X_ACCURACY) - *(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= (1 << AI_X_ACCURACY); - if (itemEffects[0] & ITEM0_DIRE_HIT) - *(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= (1 << AI_DIRE_HIT); shouldUse = TRUE; break; - case AI_ITEM_GUARD_SPEC: + case EFFECT_ITEM_SET_FOCUS_ENERGY: + if (!gDisableStructs[gActiveBattler].isFirstTurn + || gBattleMons[gActiveBattler].status2 & STATUS2_FOCUS_ENERGY + || AI_OpponentCanFaintAiWithMod(0)) + break; + shouldUse = TRUE; + break; + case EFFECT_ITEM_SET_MIST: battlerSide = GetBattlerSide(gActiveBattler); - if (gDisableStructs[gActiveBattler].isFirstTurn != 0 && gSideTimers[battlerSide].mistTimer == 0) + if (gDisableStructs[gActiveBattler].isFirstTurn && gSideTimers[battlerSide].mistTimer == 0) + shouldUse = TRUE; + break; + case EFFECT_ITEM_REVIVE: + gBattleStruct->itemPartyIndex[gActiveBattler] = GetFirstFaintedPartyIndex(gActiveBattler); + if (gBattleStruct->itemPartyIndex[gActiveBattler] != PARTY_SIZE) // Revive if possible. shouldUse = TRUE; break; - case AI_ITEM_NOT_RECOGNIZABLE: + default: return FALSE; } - if (shouldUse) { + // Set selected party ID to current battler if none chosen. + if (gBattleStruct->itemPartyIndex[gActiveBattler] == PARTY_SIZE) + gBattleStruct->itemPartyIndex[gActiveBattler] = gBattlerPartyIndexes[gActiveBattler]; BtlController_EmitTwoReturnValues(BUFFER_B, B_ACTION_USE_ITEM, 0); - *(gBattleStruct->chosenItem + (gActiveBattler / 2) * 2) = item; + gBattleStruct->chosenItem[gActiveBattler] = item; gBattleResources->battleHistory->trainerItems[i] = 0; return shouldUse; } diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c index 7a5149313d01..cb0499ac8f6e 100644 --- a/src/battle_controller_opponent.c +++ b/src/battle_controller_opponent.c @@ -1667,7 +1667,7 @@ static void OpponentHandleChooseMove(void) static void OpponentHandleChooseItem(void) { - BtlController_EmitOneReturnValue(BUFFER_B, *(gBattleStruct->chosenItem + (gActiveBattler / 2) * 2)); + BtlController_EmitOneReturnValue(BUFFER_B, gBattleStruct->chosenItem[gActiveBattler]); OpponentBufferExecCompleted(); } diff --git a/src/battle_controller_recorded_opponent.c b/src/battle_controller_recorded_opponent.c index 1fe8addcc334..e7fc6fd84ad4 100644 --- a/src/battle_controller_recorded_opponent.c +++ b/src/battle_controller_recorded_opponent.c @@ -10,6 +10,7 @@ #include "battle_tv.h" #include "bg.h" #include "data.h" +#include "item_menu.h" #include "item_use.h" #include "link.h" #include "main.h" @@ -1437,6 +1438,10 @@ static void RecordedOpponentHandleChooseMove(void) static void RecordedOpponentHandleChooseItem(void) { + u8 byte1 = RecordedBattle_GetBattlerAction(RECORDED_ITEM_ID, gActiveBattler); + u8 byte2 = RecordedBattle_GetBattlerAction(RECORDED_ITEM_ID, gActiveBattler); + gBattleStruct->chosenItem[gActiveBattler] = (byte1 << 8) | byte2; + BtlController_EmitOneReturnValue(BUFFER_B, gBattleStruct->chosenItem[gActiveBattler]); RecordedOpponentBufferExecCompleted(); } diff --git a/src/battle_controller_recorded_player.c b/src/battle_controller_recorded_player.c index 869a5e18e4a0..87f575839937 100644 --- a/src/battle_controller_recorded_player.c +++ b/src/battle_controller_recorded_player.c @@ -7,6 +7,7 @@ #include "battle_interface.h" #include "bg.h" #include "data.h" +#include "item_menu.h" #include "item_use.h" #include "link.h" #include "main.h" @@ -1461,6 +1462,10 @@ static void RecordedPlayerHandleChooseMove(void) static void RecordedPlayerHandleChooseItem(void) { + u8 byte1 = RecordedBattle_GetBattlerAction(RECORDED_ITEM_ID, gActiveBattler); + u8 byte2 = RecordedBattle_GetBattlerAction(RECORDED_ITEM_ID, gActiveBattler); + gBattleStruct->chosenItem[gActiveBattler] = (byte1 << 8) | byte2; + BtlController_EmitOneReturnValue(BUFFER_B, gBattleStruct->chosenItem[gActiveBattler]); RecordedPlayerBufferExecCompleted(); } diff --git a/src/battle_main.c b/src/battle_main.c index 7b6af8a23a6e..a5a9b5bbf623 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -4162,6 +4162,7 @@ static void HandleTurnActionSelectionState(void) } else { + gBattleStruct->itemPartyIndex[gActiveBattler] = PARTY_SIZE; BtlController_EmitChooseAction(BUFFER_A, gChosenActionByBattler[0], gBattleResources->bufferB[0][1] | (gBattleResources->bufferB[0][2] << 8)); MarkBattlerForControllerExec(gActiveBattler); gBattleCommunication[gActiveBattler]++; @@ -4229,10 +4230,11 @@ static void HandleTurnActionSelectionState(void) return; } - if ((gBattleTypeFlags & (BATTLE_TYPE_LINK + if (((gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_FRONTIER_NO_PYRAMID | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_RECORDED_LINK)) + && !gTestRunnerEnabled) // Or if currently held by Sky Drop || gStatuses3[gActiveBattler] & STATUS3_SKY_DROPPED) { diff --git a/src/battle_message.c b/src/battle_message.c index cb1f64050626..7d10b19f11c7 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -467,7 +467,7 @@ const u8 *const gPokeblockWasTooXStringTable[FLAVOR_COUNT] = static const u8 sText_PlayerUsedItem[] = _("{B_PLAYER_NAME} used\n{B_LAST_ITEM}!"); static const u8 sText_WallyUsedItem[] = _("WALLY used\n{B_LAST_ITEM}!"); -static const u8 sText_Trainer1UsedItem[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME}\nused {B_LAST_ITEM}!"); +static const u8 sText_Trainer1UsedItem[] = _("{B_ATK_TRAINER_CLASS} {B_ATK_TRAINER_NAME}\nused {B_LAST_ITEM}!"); static const u8 sText_TrainerBlockedBall[] = _("The TRAINER blocked the BALL!"); static const u8 sText_DontBeAThief[] = _("Don't be a thief!"); static const u8 sText_ItDodgedBall[] = _("It dodged the thrown BALL!\nThis POKéMON can't be caught!"); @@ -783,9 +783,15 @@ static const u8 sText_ShellTrapDidntWork[] = _("{B_ATK_NAME_WITH_PREFIX}'s shell static const u8 sText_CouldntFullyProtect[] = _("{B_DEF_NAME_WITH_PREFIX} couldn't fully protect\nitself and got hurt!"); static const u8 sText_StockpiledEffectWoreOff[] = _("{B_ATK_NAME_WITH_PREFIX}'s stockpiled\neffect wore off!"); static const u8 sText_PkmnRevivedReadyToFight[] = _("{B_BUFF1} was revived and\nis ready to fight again!"); +static const u8 sText_ItemRestoredSpeciesHealth[] = _("{B_LAST_ITEM} restored\n{B_BUFF1}'s health!"); +static const u8 sText_ItemCuredSpeciesStatus[] = _("{B_LAST_ITEM} cured\n{B_BUFF1}'s status!"); +static const u8 sText_ItemRestoredSpeciesPP[] = _("{B_LAST_ITEM} restored\n{B_BUFF1}'s PP!"); const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = { + [STRINGID_ITEMRESTOREDSPECIESHEALTH - BATTLESTRINGS_TABLE_START] = sText_ItemRestoredSpeciesHealth, + [STRINGID_ITEMCUREDSPECIESSTATUS - BATTLESTRINGS_TABLE_START] = sText_ItemCuredSpeciesStatus, + [STRINGID_ITEMRESTOREDSPECIESPP - BATTLESTRINGS_TABLE_START] = sText_ItemRestoredSpeciesPP, [STRINGID_PKMNREVIVEDREADYTOFIGHT - BATTLESTRINGS_TABLE_START] = sText_PkmnRevivedReadyToFight, [STRINGID_STOCKPILEDEFFECTWOREOFF - BATTLESTRINGS_TABLE_START] = sText_StockpiledEffectWoreOff, [STRINGID_COULDNTFULLYPROTECT - BATTLESTRINGS_TABLE_START] = sText_CouldntFullyProtect, @@ -1424,6 +1430,11 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_PKMNSABILITYPREVENTSABILITY - BATTLESTRINGS_TABLE_START] = sText_PkmnsAbilityPreventsAbility, }; +const u16 gTrainerUsedItemStringIds[] = +{ + STRINGID_PLAYERUSEDITEM, STRINGID_TRAINER1USEDITEM +}; + const u16 gZEffectStringIds[] = { [B_MSG_Z_RESET_STATS] = STRINGID_ZMOVERESETSSTATS, @@ -1820,16 +1831,6 @@ const u16 gSafariPokeblockResultStringIds[] = [B_MSG_MON_IGNORED] = STRINGID_PKMNIGNOREDX }; -const u16 gTrainerItemCuredStatusStringIds[] = -{ - [AI_HEAL_CONFUSION] = STRINGID_PKMNSITEMSNAPPEDOUT, - [AI_HEAL_PARALYSIS] = STRINGID_PKMNSITEMCUREDPARALYSIS, - [AI_HEAL_FREEZE] = STRINGID_PKMNSITEMDEFROSTEDIT, - [AI_HEAL_BURN] = STRINGID_PKMNSITEMHEALEDBURN, - [AI_HEAL_POISON] = STRINGID_PKMNSITEMCUREDPOISON, - [AI_HEAL_SLEEP] = STRINGID_PKMNSITEMWOKEIT -}; - const u16 gBerryEffectStringIds[] = { [B_MSG_CURED_PROBLEM] = STRINGID_PKMNSITEMCUREDPROBLEM, diff --git a/src/battle_pyramid_bag.c b/src/battle_pyramid_bag.c index d580cf680072..9d5cee94a573 100644 --- a/src/battle_pyramid_bag.c +++ b/src/battle_pyramid_bag.c @@ -1299,11 +1299,18 @@ static void TryCloseBagToGiveItem(u8 taskId) static void BagAction_UseInBattle(u8 taskId) { - if (ItemId_GetBattleFunc(gSpecialVar_ItemId) != NULL) - { - CloseMenuActionWindow(); - ItemId_GetBattleFunc(gSpecialVar_ItemId)(taskId); - } + // Safety check + u16 type = ItemId_GetType(gSpecialVar_ItemId); + if (!ItemId_GetBattleUsage(gSpecialVar_ItemId)) + return; + + CloseMenuActionWindow(); + if (type == ITEM_USE_BAG_MENU) + ItemUseInBattle_BagMenu(taskId); + else if (type == ITEM_USE_PARTY_MENU) + ItemUseInBattle_PartyMenu(taskId); + else if (type == ITEM_USE_PARTY_MENU_MOVES) + ItemUseInBattle_PartyMenuChooseMove(taskId); } static void Task_BeginItemSwap(u8 taskId) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index a0d8181d6791..d313697b0a39 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -52,6 +52,7 @@ #include "constants/battle_string_ids.h" #include "constants/hold_effects.h" #include "constants/items.h" +#include "constants/item_effects.h" #include "constants/map_types.h" #include "constants/moves.h" #include "constants/party_menu.h" @@ -11264,7 +11265,7 @@ static void Cmd_various(void) // Open party menu, wait to go to next instruction. else { - BtlController_EmitChoosePokemon(BUFFER_A, PARTY_ACTION_CHOOSE_FAINTED_MON, PARTY_SIZE, ABILITY_NONE, gBattleStruct->battlerPartyOrders[gActiveBattler]); + BtlController_EmitChoosePokemon(BUFFER_A, PARTY_ACTION_CHOOSE_FAINTED_MON, PARTY_SIZE, ABILITY_NONE, gBattleStruct->battlerPartyOrders[gBattlerAttacker]); MarkBattlerForControllerExec(gBattlerAttacker); } return; @@ -16427,3 +16428,144 @@ u8 GetFirstFaintedPartyIndex(u8 battlerId) // Returns PARTY_SIZE if none found. return PARTY_SIZE; } + +void BS_ItemRestoreHP(void) { + NATIVE_ARGS(); + u16 healAmount; + u32 battlerId = MAX_BATTLERS_COUNT; + u32 healParam = GetItemEffect(gLastUsedItem)[6]; + u32 side = GetBattlerSide(gBattlerAttacker); + struct Pokemon *party = (side == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty; + u16 hp = GetMonData(&party[gBattleStruct->itemPartyIndex[gBattlerAttacker]], MON_DATA_HP); + u16 maxHP = GetMonData(&party[gBattleStruct->itemPartyIndex[gBattlerAttacker]], MON_DATA_MAX_HP); + gBattleCommunication[MULTIUSE_STATE] = 0; + + // Track the number of Revives used in a battle. + if (hp == 0 && side == B_SIDE_PLAYER && gBattleResults.numRevivesUsed < 255) + gBattleResults.numRevivesUsed++; + + // Check if the recipient is an active battler. + if (gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[gBattlerAttacker]) + battlerId = gBattlerAttacker; + else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE + && gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerAttacker)]) + battlerId = BATTLE_PARTNER(gBattlerAttacker); + + // Get amount to heal. + switch (healParam) + { + case ITEM6_HEAL_HP_FULL: + healAmount = maxHP; + break; + case ITEM6_HEAL_HP_HALF: + healAmount = maxHP / 2; + break; + case ITEM6_HEAL_HP_QUARTER: + healAmount = maxHP / 4; + break; + default: + healAmount = healParam; + break; + } + if (hp + healAmount > maxHP) + healAmount = maxHP - hp; + + // Heal is applied as move damage if battler is active. + if (battlerId != MAX_BATTLERS_COUNT && hp != 0) + { + gBattleMoveDamage = -healAmount; + } + else + { + hp += healAmount; + SetMonData(&party[gBattleStruct->itemPartyIndex[gBattlerAttacker]], MON_DATA_HP, &hp); + + // Revived battlers on the field need to be brought back. + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && battlerId != MAX_BATTLERS_COUNT) + { + gAbsentBattlerFlags &= ~gBitTable[battlerId]; + gBattleCommunication[MULTIUSE_STATE] = TRUE; + } + } + PREPARE_SPECIES_BUFFER(gBattleTextBuff1, GetMonData(&party[gBattleStruct->itemPartyIndex[gBattlerAttacker]], MON_DATA_SPECIES)); + gBattlescriptCurrInstr = cmd->nextInstr; +} + +void BS_ItemCureStatus(void) { + NATIVE_ARGS(); + struct Pokemon *party = (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty; + + // Heal Status1 conditions. + HealStatusConditions(&party[gBattleStruct->itemPartyIndex[gBattlerAttacker]], gBattleStruct->itemPartyIndex[gBattlerAttacker], GetItemStatus1Mask(gLastUsedItem), gBattlerAttacker); + + // Heal Status2 conditions if battler is active. + if (gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[gBattlerAttacker]) + gBattleMons[gBattleStruct->itemPartyIndex[gBattlerAttacker]].status2 &= ~GetItemStatus2Mask(gLastUsedItem); + else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE + && gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerAttacker)]) + { + gBattleMons[gBattlerAttacker].status2 &= ~GetItemStatus2Mask(gLastUsedItem); + gBattlerTarget = BATTLE_PARTNER(gBattlerAttacker); + if (GetItemStatus1Mask(gLastUsedItem) & STATUS1_SLEEP) + gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_NIGHTMARE; + } + + PREPARE_SPECIES_BUFFER(gBattleTextBuff1, GetMonData(&party[gBattleStruct->itemPartyIndex[gBattlerAttacker]], MON_DATA_SPECIES)); + gBattlescriptCurrInstr = cmd->nextInstr; +} + +void BS_ItemIncreaseStat(void) { + NATIVE_ARGS(); + u16 statId = GetItemEffect(gLastUsedItem)[1]; + u16 stages = ItemId_GetHoldEffectParam(gLastUsedItem); + SET_STATCHANGER(statId, stages, FALSE); + gBattlescriptCurrInstr = cmd->nextInstr; +} + +void BS_ItemRestorePP(void) { + NATIVE_ARGS(); + const u8 *effect = GetItemEffect(gLastUsedItem); + u32 i, pp, maxPP, moveId; + u32 loopEnd = MAX_MON_MOVES; + u32 battlerId = MAX_BATTLERS_COUNT; + struct Pokemon *mon = (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) ? &gPlayerParty[gBattleStruct->itemPartyIndex[gBattlerAttacker]] : &gEnemyParty[gBattleStruct->itemPartyIndex[gBattlerAttacker]]; + + // Check whether to apply to all moves. + if (effect[4] & ITEM4_HEAL_PP_ONE) + { + i = gChosenMovePos; + loopEnd = gChosenMovePos + 1; + } + + // Check if the recipient is an active battler. + if (gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[gBattlerAttacker]) + battlerId = gBattlerAttacker; + else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE + && gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerAttacker)]) + battlerId = BATTLE_PARTNER(gBattlerAttacker); + + // Heal PP! + for (i = 0; i < loopEnd; i++) + { + pp = GetMonData(mon, MON_DATA_PP1 + i, NULL); + moveId = GetMonData(mon, MON_DATA_MOVE1 + i, NULL); + maxPP = CalculatePPWithBonus(moveId, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), i); + if (pp != maxPP) + { + pp += effect[6]; + if (pp > maxPP) + pp = maxPP; + SetMonData(mon, MON_DATA_PP1 + i, &pp); + + // Update battler PP if needed. + if (battlerId != MAX_BATTLERS_COUNT + && gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[battlerId] + && MOVE_IS_PERMANENT(battlerId, i)) + { + gBattleMons[battlerId].pp[i] = pp; + } + } + } + PREPARE_SPECIES_BUFFER(gBattleTextBuff1, GetMonData(mon, MON_DATA_SPECIES)); + gBattlescriptCurrInstr = cmd->nextInstr; +} diff --git a/src/battle_util.c b/src/battle_util.c index 46b2de4421ca..ac274bf0f833 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -21,6 +21,7 @@ #include "sprite.h" #include "string_util.h" #include "task.h" +#include "test_runner.h" #include "trig.h" #include "window.h" #include "battle_message.h" @@ -550,93 +551,13 @@ void HandleAction_Switch(void) void HandleAction_UseItem(void) { - gBattlerAttacker = gBattlerTarget = gBattlerByTurnOrder[gCurrentTurnActionNumber]; + gActiveBattler = gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; gBattle_BG0_X = 0; gBattle_BG0_Y = 0; ClearFuryCutterDestinyBondGrudge(gBattlerAttacker); gLastUsedItem = gBattleResources->bufferB[gBattlerAttacker][1] | (gBattleResources->bufferB[gBattlerAttacker][2] << 8); - - if (gLastUsedItem <= LAST_BALL) // is ball - { - gBattlescriptCurrInstr = BattleScript_BallThrow; - } - else if (gLastUsedItem == ITEM_POKE_DOLL || gLastUsedItem == ITEM_FLUFFY_TAIL) - { - gBattlescriptCurrInstr = gBattlescriptsForRunningByItem[0]; // BattleScript_RunByUsingItem - } - else if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) - { - gBattlescriptCurrInstr = gBattlescriptsForUsingItem[0]; // BattleScript_PlayerUsesItem - } - else - { - gBattleScripting.battler = gBattlerAttacker; - - switch (*(gBattleStruct->AI_itemType + (gBattlerAttacker >> 1))) - { - case AI_ITEM_FULL_RESTORE: - case AI_ITEM_HEAL_HP: - break; - case AI_ITEM_CURE_CONDITION: - gBattleCommunication[MULTISTRING_CHOOSER] = AI_HEAL_CONFUSION; - if (*(gBattleStruct->AI_itemFlags + gBattlerAttacker / 2) & (1 << AI_HEAL_CONFUSION)) - { - if (*(gBattleStruct->AI_itemFlags + gBattlerAttacker / 2) & 0x3E) - gBattleCommunication[MULTISTRING_CHOOSER] = AI_HEAL_SLEEP; - } - else - { - // Check for other statuses, stopping at first (shouldn't be more than one) - while (!(*(gBattleStruct->AI_itemFlags + gBattlerAttacker / 2) & 1)) - { - *(gBattleStruct->AI_itemFlags + gBattlerAttacker / 2) >>= 1; - gBattleCommunication[MULTISTRING_CHOOSER]++; - // MULTISTRING_CHOOSER will be either AI_HEAL_PARALYSIS, AI_HEAL_FREEZE, - // AI_HEAL_BURN, AI_HEAL_POISON, or AI_HEAL_SLEEP - } - } - break; - case AI_ITEM_X_STAT: - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STAT_ROSE_ITEM; - if (*(gBattleStruct->AI_itemFlags + (gBattlerAttacker >> 1)) & (1 << AI_DIRE_HIT)) - { - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_USED_DIRE_HIT; - } - else - { - PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_ATK) - PREPARE_STRING_BUFFER(gBattleTextBuff2, CHAR_X) - - while (!((*(gBattleStruct->AI_itemFlags + (gBattlerAttacker >> 1))) & 1)) - { - *(gBattleStruct->AI_itemFlags + gBattlerAttacker / 2) >>= 1; - gBattleTextBuff1[2]++; - } - - gBattleScripting.animArg1 = gBattleTextBuff1[2] + 14; - gBattleScripting.animArg2 = 0; - } - break; - case AI_ITEM_GUARD_SPEC: - // It seems probable that at some point there was a special message for - // an AI trainer using Guard Spec in a double battle. - // There isn't now however, and the assignment to 2 below goes out of - // bounds for gMistUsedStringIds and instead prints "{mon} is getting pumped" - // from the next table, gFocusEnergyUsedStringIds. - // In any case this isn't an issue in the retail version, as no trainers - // are ever given any Guard Spec to use. -#ifndef UBFIX - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) - gBattleCommunication[MULTISTRING_CHOOSER] = 2; - else -#endif - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SET_MIST; - break; - } - - gBattlescriptCurrInstr = gBattlescriptsForUsingItem[*(gBattleStruct->AI_itemType + gBattlerAttacker / 2)]; - } + gBattlescriptCurrInstr = gBattlescriptsForUsingItem[ItemId_GetBattleUsage(gLastUsedItem) - 1]; gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; } @@ -914,7 +835,7 @@ void HandleAction_ActionFinished(void) u32 i, j; bool32 afterYouActive = gSpecialStatuses[gBattlerByTurnOrder[gCurrentTurnActionNumber + 1]].afterYou; #endif - *(gBattleStruct->monToSwitchIntoId + gBattlerByTurnOrder[gCurrentTurnActionNumber]) = PARTY_SIZE; + *(gBattleStruct->monToSwitchIntoId + gBattlerByTurnOrder[gCurrentTurnActionNumber]) = gSelectedMonPartyId = PARTY_SIZE; gCurrentTurnActionNumber++; gCurrentActionFuncId = gActionsByTurnOrder[gCurrentTurnActionNumber]; SpecialStatusesClear(); @@ -8207,7 +8128,6 @@ u32 GetBattlerHoldEffect(u8 battlerId, bool32 checkNegating) return ItemId_GetHoldEffect(gBattleMons[battlerId].item); } -// static u32 GetBattlerItemHoldEffectParam(u8 battlerId, u16 item) { if (item == ITEM_ENIGMA_BERRY_E_READER) diff --git a/src/data/items.h b/src/data/items.h index 6998aa573fe1..fc99e10373fc 100644 --- a/src/data/items.h +++ b/src/data/items.h @@ -20,9 +20,8 @@ const struct Item gItems[] = .price = 200, .description = sPokeBallDesc, .pocket = POCKET_POKE_BALLS, - .type = ITEM_POKE_BALL - FIRST_BALL, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_PokeBall, + .type = ITEM_USE_BAG_MENU, + .battleUsage = EFFECT_ITEM_THROW_BALL, .secondaryId = ITEM_POKE_BALL - FIRST_BALL, }, @@ -33,9 +32,8 @@ const struct Item gItems[] = .price = 600, .description = sGreatBallDesc, .pocket = POCKET_POKE_BALLS, - .type = ITEM_GREAT_BALL - FIRST_BALL, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_PokeBall, + .type = ITEM_USE_BAG_MENU, + .battleUsage = EFFECT_ITEM_THROW_BALL, .secondaryId = ITEM_GREAT_BALL - FIRST_BALL, }, @@ -46,9 +44,8 @@ const struct Item gItems[] = .price = 800, .description = sUltraBallDesc, .pocket = POCKET_POKE_BALLS, - .type = ITEM_ULTRA_BALL - FIRST_BALL, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_PokeBall, + .type = ITEM_USE_BAG_MENU, + .battleUsage = EFFECT_ITEM_THROW_BALL, .secondaryId = ITEM_ULTRA_BALL - FIRST_BALL, }, @@ -59,9 +56,8 @@ const struct Item gItems[] = .price = 0, .description = sMasterBallDesc, .pocket = POCKET_POKE_BALLS, - .type = ITEM_MASTER_BALL - FIRST_BALL, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_PokeBall, + .type = ITEM_USE_BAG_MENU, + .battleUsage = EFFECT_ITEM_THROW_BALL, .secondaryId = ITEM_MASTER_BALL - FIRST_BALL, }, @@ -72,9 +68,8 @@ const struct Item gItems[] = .price = 20, .description = sPremierBallDesc, .pocket = POCKET_POKE_BALLS, - .type = ITEM_PREMIER_BALL - FIRST_BALL, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_PokeBall, + .type = ITEM_USE_BAG_MENU, + .battleUsage = EFFECT_ITEM_THROW_BALL, .secondaryId = ITEM_PREMIER_BALL - FIRST_BALL, }, @@ -85,9 +80,8 @@ const struct Item gItems[] = .price = 300, .description = sHealBallDesc, .pocket = POCKET_POKE_BALLS, - .type = ITEM_HEAL_BALL - FIRST_BALL, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_PokeBall, + .type = ITEM_USE_BAG_MENU, + .battleUsage = EFFECT_ITEM_THROW_BALL, .secondaryId = ITEM_HEAL_BALL - FIRST_BALL, }, @@ -98,9 +92,8 @@ const struct Item gItems[] = .price = 1000, .description = sNetBallDesc, .pocket = POCKET_POKE_BALLS, - .type = ITEM_NET_BALL - FIRST_BALL, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_PokeBall, + .type = ITEM_USE_BAG_MENU, + .battleUsage = EFFECT_ITEM_THROW_BALL, .secondaryId = ITEM_NET_BALL - FIRST_BALL, }, @@ -111,9 +104,8 @@ const struct Item gItems[] = .price = 1000, .description = sNestBallDesc, .pocket = POCKET_POKE_BALLS, - .type = ITEM_NEST_BALL - FIRST_BALL, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_PokeBall, + .type = ITEM_USE_BAG_MENU, + .battleUsage = EFFECT_ITEM_THROW_BALL, .secondaryId = ITEM_NEST_BALL - FIRST_BALL, }, @@ -124,9 +116,8 @@ const struct Item gItems[] = .price = 1000, .description = sDiveBallDesc, .pocket = POCKET_POKE_BALLS, - .type = ITEM_DIVE_BALL - FIRST_BALL, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_PokeBall, + .type = ITEM_USE_BAG_MENU, + .battleUsage = EFFECT_ITEM_THROW_BALL, .secondaryId = ITEM_DIVE_BALL - FIRST_BALL, }, @@ -137,9 +128,8 @@ const struct Item gItems[] = .price = 1000, .description = sDuskBallDesc, .pocket = POCKET_POKE_BALLS, - .type = ITEM_DUSK_BALL - FIRST_BALL, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_PokeBall, + .type = ITEM_USE_BAG_MENU, + .battleUsage = EFFECT_ITEM_THROW_BALL, .secondaryId = ITEM_DUSK_BALL - FIRST_BALL, }, @@ -150,9 +140,8 @@ const struct Item gItems[] = .price = 1000, .description = sTimerBallDesc, .pocket = POCKET_POKE_BALLS, - .type = ITEM_TIMER_BALL - FIRST_BALL, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_PokeBall, + .type = ITEM_USE_BAG_MENU, + .battleUsage = EFFECT_ITEM_THROW_BALL, .secondaryId = ITEM_TIMER_BALL - FIRST_BALL, }, @@ -163,9 +152,8 @@ const struct Item gItems[] = .price = 1000, .description = sQuickBallDesc, .pocket = POCKET_POKE_BALLS, - .type = ITEM_QUICK_BALL - FIRST_BALL, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_PokeBall, + .type = ITEM_USE_BAG_MENU, + .battleUsage = EFFECT_ITEM_THROW_BALL, .secondaryId = ITEM_QUICK_BALL - FIRST_BALL, }, @@ -176,9 +164,8 @@ const struct Item gItems[] = .price = 1000, .description = sRepeatBallDesc, .pocket = POCKET_POKE_BALLS, - .type = ITEM_REPEAT_BALL - FIRST_BALL, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_PokeBall, + .type = ITEM_USE_BAG_MENU, + .battleUsage = EFFECT_ITEM_THROW_BALL, .secondaryId = ITEM_REPEAT_BALL - FIRST_BALL, }, @@ -189,9 +176,8 @@ const struct Item gItems[] = .price = 1000, .description = sLuxuryBallDesc, .pocket = POCKET_POKE_BALLS, - .type = ITEM_LUXURY_BALL - FIRST_BALL, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_PokeBall, + .type = ITEM_USE_BAG_MENU, + .battleUsage = EFFECT_ITEM_THROW_BALL, .secondaryId = ITEM_LUXURY_BALL - FIRST_BALL, }, @@ -202,9 +188,8 @@ const struct Item gItems[] = .price = 0, .description = sLevelBallDesc, .pocket = POCKET_POKE_BALLS, - .type = ITEM_LEVEL_BALL - FIRST_BALL, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_PokeBall, + .type = ITEM_USE_BAG_MENU, + .battleUsage = EFFECT_ITEM_THROW_BALL, .secondaryId = ITEM_LEVEL_BALL - FIRST_BALL, }, @@ -215,9 +200,8 @@ const struct Item gItems[] = .price = 0, .description = sLureBallDesc, .pocket = POCKET_POKE_BALLS, - .type = ITEM_LURE_BALL - FIRST_BALL, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_PokeBall, + .type = ITEM_USE_BAG_MENU, + .battleUsage = EFFECT_ITEM_THROW_BALL, .secondaryId = ITEM_LURE_BALL - FIRST_BALL, }, @@ -228,9 +212,8 @@ const struct Item gItems[] = .price = 0, .description = sMoonBallDesc, .pocket = POCKET_POKE_BALLS, - .type = ITEM_MOON_BALL - FIRST_BALL, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_PokeBall, + .type = ITEM_USE_BAG_MENU, + .battleUsage = EFFECT_ITEM_THROW_BALL, .secondaryId = ITEM_MOON_BALL - FIRST_BALL, }, @@ -241,9 +224,8 @@ const struct Item gItems[] = .price = 0, .description = sFriendBallDesc, .pocket = POCKET_POKE_BALLS, - .type = ITEM_FRIEND_BALL - FIRST_BALL, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_PokeBall, + .type = ITEM_USE_BAG_MENU, + .battleUsage = EFFECT_ITEM_THROW_BALL, .secondaryId = ITEM_FRIEND_BALL - FIRST_BALL, }, @@ -254,9 +236,8 @@ const struct Item gItems[] = .price = 0, .description = sLoveBallDesc, .pocket = POCKET_POKE_BALLS, - .type = ITEM_LOVE_BALL - FIRST_BALL, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_PokeBall, + .type = ITEM_USE_BAG_MENU, + .battleUsage = EFFECT_ITEM_THROW_BALL, .secondaryId = ITEM_LOVE_BALL - FIRST_BALL, }, @@ -267,9 +248,8 @@ const struct Item gItems[] = .price = 0, .description = sFastBallDesc, .pocket = POCKET_POKE_BALLS, - .type = ITEM_FAST_BALL - FIRST_BALL, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_PokeBall, + .type = ITEM_USE_BAG_MENU, + .battleUsage = EFFECT_ITEM_THROW_BALL, .secondaryId = ITEM_FAST_BALL - FIRST_BALL, }, @@ -280,9 +260,8 @@ const struct Item gItems[] = .price = 0, .description = sHeavyBallDesc, .pocket = POCKET_POKE_BALLS, - .type = ITEM_HEAVY_BALL - FIRST_BALL, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_PokeBall, + .type = ITEM_USE_BAG_MENU, + .battleUsage = EFFECT_ITEM_THROW_BALL, .secondaryId = ITEM_HEAVY_BALL - FIRST_BALL, }, @@ -293,9 +272,8 @@ const struct Item gItems[] = .price = 0, .description = sDreamBallDesc, .pocket = POCKET_POKE_BALLS, - .type = ITEM_DREAM_BALL - FIRST_BALL, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_PokeBall, + .type = ITEM_USE_BAG_MENU, + .battleUsage = EFFECT_ITEM_THROW_BALL, .secondaryId = ITEM_DREAM_BALL - FIRST_BALL, }, @@ -306,9 +284,8 @@ const struct Item gItems[] = .price = 0, .description = sSafariBallDesc, .pocket = POCKET_POKE_BALLS, - .type = ITEM_SAFARI_BALL - FIRST_BALL, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_PokeBall, + .type = ITEM_USE_BAG_MENU, + .battleUsage = EFFECT_ITEM_THROW_BALL, .secondaryId = ITEM_SAFARI_BALL - FIRST_BALL, }, @@ -319,9 +296,8 @@ const struct Item gItems[] = .price = 0, .description = sSportBallDesc, .pocket = POCKET_POKE_BALLS, - .type = ITEM_SPORT_BALL - FIRST_BALL, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_PokeBall, + .type = ITEM_USE_BAG_MENU, + .battleUsage = EFFECT_ITEM_THROW_BALL, .secondaryId = ITEM_SPORT_BALL - FIRST_BALL, }, @@ -332,9 +308,8 @@ const struct Item gItems[] = .price = 0, .description = sParkBallDesc, .pocket = POCKET_POKE_BALLS, - .type = ITEM_PARK_BALL - FIRST_BALL, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_PokeBall, + .type = ITEM_USE_BAG_MENU, + .battleUsage = EFFECT_ITEM_THROW_BALL, .secondaryId = ITEM_PARK_BALL - FIRST_BALL, }, @@ -345,9 +320,8 @@ const struct Item gItems[] = .price = 0, .description = sBeastBallDesc, .pocket = POCKET_POKE_BALLS, - .type = ITEM_BEAST_BALL - FIRST_BALL, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_PokeBall, + .type = ITEM_USE_BAG_MENU, + .battleUsage = EFFECT_ITEM_THROW_BALL, .secondaryId = ITEM_BEAST_BALL - FIRST_BALL, }, @@ -358,9 +332,8 @@ const struct Item gItems[] = .price = 0, .description = sCherishBallDesc, .pocket = POCKET_POKE_BALLS, - .type = ITEM_CHERISH_BALL - FIRST_BALL, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_PokeBall, + .type = ITEM_USE_BAG_MENU, + .battleUsage = EFFECT_ITEM_THROW_BALL, .secondaryId = ITEM_CHERISH_BALL - FIRST_BALL, }, @@ -376,8 +349,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_RESTORE_HP, .flingPower = 30, }, @@ -391,8 +363,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_RESTORE_HP, .flingPower = 30, }, @@ -406,8 +377,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_RESTORE_HP, .flingPower = 30, }, @@ -421,8 +391,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_RESTORE_HP, .flingPower = 30, }, @@ -436,8 +405,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_HEAL_AND_CURE_STATUS, .flingPower = 30, }, @@ -450,8 +418,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_REVIVE, .flingPower = 30, }, @@ -464,8 +431,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_REVIVE, .flingPower = 30, }, @@ -479,8 +445,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_RESTORE_HP, .flingPower = 30, }, @@ -494,8 +459,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_RESTORE_HP, .flingPower = 30, }, @@ -509,8 +473,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_RESTORE_HP, .flingPower = 30, }, @@ -524,8 +487,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_RESTORE_HP, .flingPower = 30, }, @@ -538,8 +500,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_RESTORE_HP, .flingPower = 30, }, @@ -552,8 +513,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_RESTORE_HP, .flingPower = 30, }, @@ -566,8 +526,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_RESTORE_HP, .flingPower = 30, }, @@ -580,8 +539,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_REVIVE, .flingPower = 30, }, @@ -594,8 +552,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_CURE_STATUS, .flingPower = 30, }, @@ -608,8 +565,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_CURE_STATUS, .flingPower = 30, }, @@ -622,8 +578,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_CURE_STATUS, .flingPower = 30, }, @@ -636,8 +591,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_CURE_STATUS, .flingPower = 30, }, @@ -650,8 +604,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_CURE_STATUS, .flingPower = 30, }, @@ -664,8 +617,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_CURE_STATUS, .flingPower = 30, }, @@ -677,10 +629,9 @@ const struct Item gItems[] = .holdEffectParam = 10, .description = sEtherDesc, .pocket = POCKET_ITEMS, - .type = ITEM_USE_PARTY_MENU, + .type = ITEM_USE_PARTY_MENU_MOVES, .fieldUseFunc = ItemUseOutOfBattle_PPRecovery, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_PPRecovery, + .battleUsage = EFFECT_ITEM_RESTORE_PP, .flingPower = 30, }, @@ -692,10 +643,9 @@ const struct Item gItems[] = .holdEffectParam = 255, .description = sMaxEtherDesc, .pocket = POCKET_ITEMS, - .type = ITEM_USE_PARTY_MENU, + .type = ITEM_USE_PARTY_MENU_MOVES, .fieldUseFunc = ItemUseOutOfBattle_PPRecovery, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_PPRecovery, + .battleUsage = EFFECT_ITEM_RESTORE_PP, .flingPower = 30, }, @@ -709,8 +659,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_PPRecovery, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_PPRecovery, + .battleUsage = EFFECT_ITEM_RESTORE_PP, .flingPower = 30, }, @@ -724,8 +673,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_PPRecovery, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_PPRecovery, + .battleUsage = EFFECT_ITEM_RESTORE_PP, .flingPower = 30, }, @@ -740,8 +688,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_RESTORE_HP, .flingPower = 30, }, @@ -767,8 +714,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_RESTORE_HP, .flingPower = 30, }, @@ -781,8 +727,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_REVIVE, .flingPower = 30, }, @@ -797,8 +742,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_CURE_STATUS, .flingPower = 30, }, @@ -811,8 +755,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_CURE_STATUS, .flingPower = 30, }, @@ -825,8 +768,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_CURE_STATUS, .flingPower = 30, }, @@ -839,8 +781,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_CURE_STATUS, .flingPower = 30, }, @@ -853,8 +794,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_CURE_STATUS, .flingPower = 30, }, @@ -867,8 +807,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_CURE_STATUS, .flingPower = 30, }, @@ -881,8 +820,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_CURE_STATUS, .flingPower = 30, }, @@ -895,8 +833,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_CURE_STATUS, .flingPower = 30, }, @@ -1454,8 +1391,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_CURE_STATUS, .flingPower = 30, }, @@ -1468,8 +1404,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_CURE_STATUS, .flingPower = 30, }, @@ -1482,8 +1417,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_CURE_STATUS, .flingPower = 30, }, @@ -1618,17 +1552,19 @@ const struct Item gItems[] = // X Items +#define X_ITEM_STAGES (B_X_ITEMS_BUFF >= GEN_7) ? 2 : 1 + [ITEM_X_ATTACK] = { .name = _("X Attack"), .itemId = ITEM_X_ATTACK, .price = 1000, + .holdEffectParam = X_ITEM_STAGES, .description = sXAttackDesc, .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_StatIncrease, + .battleUsage = EFFECT_ITEM_INCREASE_STAT, .flingPower = 30, }, @@ -1637,12 +1573,12 @@ const struct Item gItems[] = .name = _("X Defense"), .itemId = ITEM_X_DEFENSE, .price = 2000, + .holdEffectParam = X_ITEM_STAGES, .description = sXDefenseDesc, .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_StatIncrease, + .battleUsage = EFFECT_ITEM_INCREASE_STAT, .flingPower = 30, }, @@ -1651,12 +1587,12 @@ const struct Item gItems[] = .name = _("X Sp. Atk"), .itemId = ITEM_X_SP_ATK, .price = 1000, + .holdEffectParam = X_ITEM_STAGES, .description = sXSpAtkDesc, .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_StatIncrease, + .battleUsage = EFFECT_ITEM_INCREASE_STAT, .flingPower = 30, }, @@ -1665,12 +1601,12 @@ const struct Item gItems[] = .name = _("X Sp. Def"), .itemId = ITEM_X_SP_DEF, .price = 2000, + .holdEffectParam = X_ITEM_STAGES, .description = sXSpDefDesc, .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_StatIncrease, + .battleUsage = EFFECT_ITEM_INCREASE_STAT, .flingPower = 30, }, @@ -1679,12 +1615,12 @@ const struct Item gItems[] = .name = _("X Speed"), .itemId = ITEM_X_SPEED, .price = 1000, + .holdEffectParam = X_ITEM_STAGES, .description = sXSpeedDesc, .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_StatIncrease, + .battleUsage = EFFECT_ITEM_INCREASE_STAT, .flingPower = 30, }, @@ -1693,12 +1629,12 @@ const struct Item gItems[] = .name = _("X Accuracy"), .itemId = ITEM_X_ACCURACY, .price = 1000, + .holdEffectParam = X_ITEM_STAGES, .description = sXAccuracyDesc, .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_StatIncrease, + .battleUsage = EFFECT_ITEM_INCREASE_STAT, .flingPower = 30, }, @@ -1711,8 +1647,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_StatIncrease, + .battleUsage = EFFECT_ITEM_SET_FOCUS_ENERGY, .flingPower = 30, }, @@ -1725,8 +1660,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_StatIncrease, + .battleUsage = EFFECT_ITEM_SET_MIST, .flingPower = 30, }, @@ -1739,8 +1673,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_Escape, + .battleUsage = EFFECT_ITEM_ESCAPE, .flingPower = 30, }, @@ -1753,8 +1686,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_Escape, + .battleUsage = EFFECT_ITEM_ESCAPE, .flingPower = 30, }, @@ -1767,8 +1699,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_Escape, + .battleUsage = EFFECT_ITEM_ESCAPE, .flingPower = 30, }, @@ -1781,11 +1712,12 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - .battleUsage = ITEM_B_USE_OTHER, - .battleUseFunc = ItemUseInBattle_StatIncrease, // Todo + .battleUsage = EFFECT_ITEM_INCREASE_ALL_STATS, .flingPower = 30, }, +#undef X_ITEM_STAGES + // Treasures [ITEM_BOTTLE_CAP] = @@ -6874,8 +6806,7 @@ const struct Item gItems[] = .pocket = POCKET_BERRIES, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_CURE_STATUS, .flingPower = 10, }, @@ -6889,8 +6820,7 @@ const struct Item gItems[] = .pocket = POCKET_BERRIES, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_CURE_STATUS, .flingPower = 10, }, @@ -6904,8 +6834,7 @@ const struct Item gItems[] = .pocket = POCKET_BERRIES, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_CURE_STATUS, .flingPower = 10, }, @@ -6919,8 +6848,7 @@ const struct Item gItems[] = .pocket = POCKET_BERRIES, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_CURE_STATUS, .flingPower = 10, }, @@ -6934,8 +6862,7 @@ const struct Item gItems[] = .pocket = POCKET_BERRIES, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_CURE_STATUS, .flingPower = 10, }, @@ -6948,10 +6875,9 @@ const struct Item gItems[] = .holdEffectParam = 10, .description = sLeppaBerryDesc, .pocket = POCKET_BERRIES, - .type = ITEM_USE_PARTY_MENU, + .type = ITEM_USE_PARTY_MENU_MOVES, .fieldUseFunc = ItemUseOutOfBattle_PPRecovery, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_PPRecovery, + .battleUsage = EFFECT_ITEM_RESTORE_PP, .flingPower = 10, }, @@ -6966,8 +6892,7 @@ const struct Item gItems[] = .pocket = POCKET_BERRIES, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_RESTORE_HP, .flingPower = 10, }, @@ -6981,8 +6906,7 @@ const struct Item gItems[] = .pocket = POCKET_BERRIES, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_CURE_STATUS, .flingPower = 10, }, @@ -6996,8 +6920,7 @@ const struct Item gItems[] = .pocket = POCKET_BERRIES, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_CURE_STATUS, .flingPower = 10, }, @@ -7017,8 +6940,7 @@ const struct Item gItems[] = .pocket = POCKET_BERRIES, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_Medicine, + .battleUsage = EFFECT_ITEM_RESTORE_HP, .flingPower = 10, }, @@ -7794,8 +7716,7 @@ const struct Item gItems[] = .pocket = POCKET_BERRIES, .type = ITEM_USE_BAG_MENU, // Type handled by ItemUseOutOfBattle_EnigmaBerry .fieldUseFunc = ItemUseOutOfBattle_EnigmaBerry, - .battleUsage = ITEM_B_USE_MEDICINE, - .battleUseFunc = ItemUseInBattle_EnigmaBerry, + .battleUsage = EFFECT_ITEM_ENIGMA_BERRY_EREADER, .flingPower = 10, }, diff --git a/src/data/pokemon/item_effects.h b/src/data/pokemon/item_effects.h index 632fb6b26ee0..087c6db0c207 100644 --- a/src/data/pokemon/item_effects.h +++ b/src/data/pokemon/item_effects.h @@ -533,8 +533,6 @@ const u8 *const gItemEffectTable[ITEMS_COUNT] = [ITEM_DIRE_HIT] = gItemEffect_DireHit, [ITEM_GUARD_SPEC] = gItemEffect_GuardSpec, - //[ITEM_MAX_MUSHROOMS] = gItemEffect_MaxMushrooms, // Todo - // Evolution Items [ITEM_FIRE_STONE] = gItemEffect_EvoItem, [ITEM_WATER_STONE] = gItemEffect_EvoItem, diff --git a/src/item.c b/src/item.c index db24cb82e947..da57c407667a 100644 --- a/src/item.c +++ b/src/item.c @@ -7,12 +7,15 @@ #include "malloc.h" #include "secret_base.h" #include "item_menu.h" +#include "party_menu.h" #include "strings.h" #include "load_save.h" #include "item_use.h" #include "battle_pyramid.h" #include "battle_pyramid_bag.h" +#include "constants/battle.h" #include "constants/items.h" +#include "constants/item_effects.h" #include "constants/hold_effects.h" static bool8 CheckPyramidBagHasItem(u16 itemId, u16 count); @@ -922,14 +925,36 @@ ItemUseFunc ItemId_GetFieldFunc(u16 itemId) return gItems[SanitizeItemId(itemId)].fieldUseFunc; } +// Returns an item's battle effect script ID. u8 ItemId_GetBattleUsage(u16 itemId) { - return gItems[SanitizeItemId(itemId)].battleUsage; -} - -ItemUseFunc ItemId_GetBattleFunc(u16 itemId) -{ - return gItems[SanitizeItemId(itemId)].battleUseFunc; + u16 item = SanitizeItemId(itemId); + // Handle E-Reader berries. + if (item == ITEM_ENIGMA_BERRY_E_READER) + { + switch (GetItemEffectType(gSpecialVar_ItemId)) + { + case ITEM_EFFECT_X_ITEM: + return EFFECT_ITEM_INCREASE_STAT; + case ITEM_EFFECT_HEAL_HP: + return EFFECT_ITEM_RESTORE_HP; + case ITEM_EFFECT_CURE_POISON: + case ITEM_EFFECT_CURE_SLEEP: + case ITEM_EFFECT_CURE_BURN: + case ITEM_EFFECT_CURE_FREEZE: + case ITEM_EFFECT_CURE_PARALYSIS: + case ITEM_EFFECT_CURE_ALL_STATUS: + case ITEM_EFFECT_CURE_CONFUSION: + case ITEM_EFFECT_CURE_INFATUATION: + return EFFECT_ITEM_CURE_STATUS; + case ITEM_EFFECT_HEAL_PP: + return EFFECT_ITEM_RESTORE_PP; + default: + return 0; + } + } + else + return gItems[item].battleUsage; } u8 ItemId_GetSecondaryId(u16 itemId) @@ -941,3 +966,36 @@ u8 ItemId_GetFlingPower(u16 itemId) { return gItems[SanitizeItemId(itemId)].flingPower; } + + +u32 GetItemStatus1Mask(u16 itemId) +{ + const u8 *effect = GetItemEffect(itemId); + switch (effect[3]) + { + case ITEM3_FREEZE: + return STATUS1_FREEZE; + case ITEM3_BURN: + return STATUS1_BURN; + case ITEM3_POISON: + return STATUS1_POISON | STATUS1_TOXIC_POISON; + case ITEM3_SLEEP: + return STATUS1_SLEEP; + case ITEM3_STATUS_ALL: + return STATUS1_ANY; + } + return 0; +} + +u32 GetItemStatus2Mask(u16 itemId) +{ + const u8 *effect = GetItemEffect(itemId); + if (effect[3] & ITEM3_STATUS_ALL) + return STATUS2_INFATUATION | STATUS2_CONFUSION; + else if (effect[0] & ITEM0_INFATUATION) + return STATUS2_INFATUATION; + else if (effect[3] & ITEM3_CONFUSION) + return STATUS2_CONFUSION; + else + return 0; +} diff --git a/src/item_menu.c b/src/item_menu.c index 4c66b092391d..2a382b0645b4 100755 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -1985,11 +1985,18 @@ static void ItemMenu_Cancel(u8 taskId) static void ItemMenu_UseInBattle(u8 taskId) { - if (ItemId_GetBattleFunc(gSpecialVar_ItemId)) - { - RemoveContextWindow(); - ItemId_GetBattleFunc(gSpecialVar_ItemId)(taskId); - } + // Safety check + u16 type = ItemId_GetType(gSpecialVar_ItemId); + if (!ItemId_GetBattleUsage(gSpecialVar_ItemId)) + return; + + RemoveContextWindow(); + if (type == ITEM_USE_BAG_MENU) + ItemUseInBattle_BagMenu(taskId); + else if (type == ITEM_USE_PARTY_MENU) + ItemUseInBattle_PartyMenu(taskId); + else if (type == ITEM_USE_PARTY_MENU_MOVES) + ItemUseInBattle_PartyMenuChooseMove(taskId); } void CB2_ReturnToBagMenuPocket(void) diff --git a/src/item_use.c b/src/item_use.c index 9c925945af69..8bcadfb2eb2e 100644 --- a/src/item_use.c +++ b/src/item_use.c @@ -75,6 +75,7 @@ static void Task_CloseCantUseKeyItemMessage(u8); static void SetDistanceOfClosestHiddenItem(u8, s16, s16); static void CB2_OpenPokeblockFromBag(void); static void ItemUseOnFieldCB_Honey(u8 taskId); +static bool32 CannotUseBagBattleItem(u16 itemId); // EWRAM variables EWRAM_DATA static void(*sItemUseOnFieldCB)(u8 taskId) = NULL; @@ -86,9 +87,10 @@ EWRAM_DATA static void(*sItemUseOnFieldCB)(u8 taskId) = NULL; // Never occurs in vanilla, but can occur with improperly created items static const MainCallback sItemUseCallbacks[] = { - [ITEM_USE_PARTY_MENU - 1] = CB2_ShowPartyMenuForItemUse, - [ITEM_USE_FIELD - 1] = CB2_ReturnToField, - [ITEM_USE_PBLOCK_CASE - 1] = NULL, + [ITEM_USE_PARTY_MENU - 1] = CB2_ShowPartyMenuForItemUse, + [ITEM_USE_FIELD - 1] = CB2_ReturnToField, + [ITEM_USE_PBLOCK_CASE - 1] = NULL, + [ITEM_USE_PARTY_MENU_MOVES - 1] = CB2_ShowPartyMenuForItemUse, }; static const u8 sClockwiseDirections[] = {DIR_NORTH, DIR_EAST, DIR_SOUTH, DIR_WEST}; @@ -1105,25 +1107,6 @@ static void Task_UseStatIncreaseItem(u8 taskId) } } -// e.g. X Attack, Guard Spec -void ItemUseInBattle_StatIncrease(u8 taskId) -{ - u16 partyId = gBattlerPartyIndexes[gBattlerInMenuId]; - - if (ExecuteTableBasedItemEffect(&gPlayerParty[partyId], gSpecialVar_ItemId, partyId, 0) != FALSE) - { - if (!InBattlePyramid()) - DisplayItemMessage(taskId, FONT_NORMAL, gText_WontHaveEffect, CloseItemMessage); - else - DisplayItemMessageInBattlePyramid(taskId, gText_WontHaveEffect, Task_CloseBattlePyramidBagMessage); - } - else - { - gTasks[taskId].func = Task_UseStatIncreaseItem; - gTasks[taskId].data[8] = 0; - } -} - static void ItemUseInBattle_ShowPartyMenu(u8 taskId) { if (!InBattlePyramid()) @@ -1138,40 +1121,118 @@ static void ItemUseInBattle_ShowPartyMenu(u8 taskId) } } -void ItemUseInBattle_Medicine(u8 taskId) +void ItemUseInBattle_PartyMenu(u8 taskId) { - gItemUseCB = ItemUseCB_Medicine; + gItemUseCB = ItemUseCB_BattleScript; ItemUseInBattle_ShowPartyMenu(taskId); } -// Unused. Sacred Ash cannot be used in battle -void ItemUseInBattle_SacredAsh(u8 taskId) +void ItemUseInBattle_PartyMenuChooseMove(u8 taskId) { - gItemUseCB = ItemUseCB_SacredAsh; + gItemUseCB = ItemUseCB_BattleChooseMove; ItemUseInBattle_ShowPartyMenu(taskId); } -void ItemUseInBattle_PPRecovery(u8 taskId) +// Returns whether an item can be used in battle and sets the fail text. +static bool32 CannotUseBagBattleItem(u16 itemId) { - gItemUseCB = ItemUseCB_PPRecovery; - ItemUseInBattle_ShowPartyMenu(taskId); + u8 cannotUse = FALSE; + u16 battleUsage = ItemId_GetBattleUsage(itemId); + const u8* failStr = NULL; + + // Embargo Check + if ((gPartyMenu.slotId == 0 && gStatuses3[B_POSITION_PLAYER_LEFT] & STATUS3_EMBARGO) + || (gPartyMenu.slotId == 1 && gStatuses3[B_POSITION_PLAYER_RIGHT] & STATUS3_EMBARGO)) + { + return TRUE; + } + // X-Items + if (battleUsage == EFFECT_ITEM_INCREASE_STAT + && gBattleMons[gBattlerInMenuId].statStages[gItemEffectTable[itemId][1]] == MAX_STAT_STAGE) + { + cannotUse++; + } + // Dire Hit + if (battleUsage == EFFECT_ITEM_SET_FOCUS_ENERGY + && !(gBattleMons[gBattlerInMenuId].status2 & STATUS2_FOCUS_ENERGY)) + { + cannotUse++; + } + // Guard Spec + if (battleUsage == EFFECT_ITEM_SET_MIST + && gSideStatuses[GetBattlerSide(gBattlerInMenuId)] & SIDE_STATUS_MIST) + { + cannotUse++; + } + // Escape Items + if (battleUsage == EFFECT_ITEM_ESCAPE + && gBattleTypeFlags & BATTLE_TYPE_TRAINER) + { + cannotUse++; + } + // Poke Balls + if (battleUsage == EFFECT_ITEM_THROW_BALL) + { + switch (GetBallThrowableState()) + { + case BALL_THROW_UNABLE_TWO_MONS: + failStr = sText_CantThrowPokeBall_TwoMons; + cannotUse++; + break; + case BALL_THROW_UNABLE_NO_ROOM: + failStr = gText_BoxFull; + cannotUse++; + break; + #if B_SEMI_INVULNERABLE_CATCH >= GEN_4 + case BALL_THROW_UNABLE_SEMI_INVULNERABLE: + failStr = sText_CantThrowPokeBall_SemiInvulnerable; + cannotUse++; + break; + #endif + case BALL_THROW_UNABLE_DISABLED_FLAG: + failStr = sText_CantThrowPokeBall_Disabled; + cannotUse++; + break; + } + } + // Max Mushrooms + if (battleUsage == EFFECT_ITEM_INCREASE_ALL_STATS) + { + u32 i; + for (i = 1; i < NUM_STATS; i++) + { + if (CompareStat(gBattlerInMenuId, i, MAX_STAT_STAGE, CMP_EQUAL)) + { + cannotUse++; + break; + } + } + } + + if (failStr != NULL) + StringExpandPlaceholders(gStringVar4, failStr); + else + StringExpandPlaceholders(gStringVar4, gText_WontHaveEffect); + return cannotUse; } -// Fluffy Tail / Poke Doll -void ItemUseInBattle_Escape(u8 taskId) +void ItemUseInBattle_BagMenu(u8 taskId) { - - if((gBattleTypeFlags & BATTLE_TYPE_TRAINER) == FALSE) + if (CannotUseBagBattleItem(gSpecialVar_ItemId)) { - RemoveUsedItem(); if (!InBattlePyramid()) - DisplayItemMessage(taskId, FONT_NORMAL, gStringVar4, Task_FadeAndCloseBagMenu); + DisplayItemMessage(taskId, FONT_NORMAL, gStringVar4, CloseItemMessage); else - DisplayItemMessageInBattlePyramid(taskId, gStringVar4, CloseBattlePyramidBag); + DisplayItemMessageInBattlePyramid(taskId, gStringVar4, Task_CloseBattlePyramidBagMessage); } else { - DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].tUsingRegisteredKeyItem); + PlaySE(SE_SELECT); + RemoveUsedItem(); + if (!InBattlePyramid()) + DisplayItemMessage(taskId, FONT_NORMAL, gStringVar4, Task_FadeAndCloseBagMenu); + else + DisplayItemMessageInBattlePyramid(taskId, gStringVar4, CloseBattlePyramidBag); } } @@ -1219,33 +1280,6 @@ void ItemUseOutOfBattle_EnigmaBerry(u8 taskId) } } -void ItemUseInBattle_EnigmaBerry(u8 taskId) -{ - switch (GetItemEffectType(gSpecialVar_ItemId)) - { - case ITEM_EFFECT_X_ITEM: - ItemUseInBattle_StatIncrease(taskId); - break; - case ITEM_EFFECT_HEAL_HP: - case ITEM_EFFECT_CURE_POISON: - case ITEM_EFFECT_CURE_SLEEP: - case ITEM_EFFECT_CURE_BURN: - case ITEM_EFFECT_CURE_FREEZE: - case ITEM_EFFECT_CURE_PARALYSIS: - case ITEM_EFFECT_CURE_ALL_STATUS: - case ITEM_EFFECT_CURE_CONFUSION: - case ITEM_EFFECT_CURE_INFATUATION: - ItemUseInBattle_Medicine(taskId); - break; - case ITEM_EFFECT_HEAL_PP: - ItemUseInBattle_PPRecovery(taskId); - break; - default: - ItemUseOutOfBattle_CannotUse(taskId); - break; - } -} - void ItemUseOutOfBattle_FormChange(u8 taskId) { gItemUseCB = ItemUseCB_FormChange; diff --git a/src/party_menu.c b/src/party_menu.c index 30f2f81501b4..dd46b106347d 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -390,8 +390,8 @@ static void Task_DisplayHPRestoredMessage(u8); static u16 ItemEffectToMonEv(struct Pokemon *, u8); static void ItemEffectToStatString(u8, u8 *); static void ReturnToUseOnWhichMon(u8); -static void SetSelectedMoveForPPItem(u8); -static void TryUsePPItem(u8); +static void SetSelectedMoveForItem(u8); +static void TryUseItemOnMove(u8); static void Task_LearnedMove(u8); static void Task_ReplaceMoveYesNo(u8); static void Task_DoLearnedMoveFanfareAfterText(u8); @@ -480,6 +480,9 @@ static bool8 SetUpFieldMove_Fly(void); static bool8 SetUpFieldMove_Waterfall(void); static bool8 SetUpFieldMove_Dive(void); void TryItemHoldFormChange(struct Pokemon *mon); +static void ShowMoveSelectWindow(u8 slot); +static void Task_HandleWhichMoveInput(u8 taskId); +static bool32 CannotUsePartyBattleItem(u16 itemId, struct Pokemon* mon); // static const data #include "data/party_menu.h" @@ -4301,12 +4304,7 @@ static void Task_SetSacredAshCB(u8 taskId) static bool8 IsHPRecoveryItem(u16 item) { - const u8 *effect; - - if (item == ITEM_ENIGMA_BERRY_E_READER) - effect = gSaveBlock1Ptr->enigmaBerry.itemEffect; - else - effect = gItemEffectTable[item]; + const u8 *effect = GetItemEffect(item); if (effect == NULL) return FALSE; @@ -4396,18 +4394,97 @@ static bool8 IsItemFlute(u16 item) return FALSE; } -static bool8 ExecuteTableBasedItemEffect_(u8 partyMonIndex, u16 item, u8 monMoveIndex) +static bool32 CannotUsePartyBattleItem(u16 itemId, struct Pokemon* mon) { - if (gMain.inBattle) + u8 i; + u8 cannotUse = FALSE; + u16 battleUsage = ItemId_GetBattleUsage(itemId); + u16 hp = GetMonData(mon, MON_DATA_HP); + + // Embargo Check + if ((gPartyMenu.slotId == 0 && gStatuses3[B_POSITION_PLAYER_LEFT] & STATUS3_EMBARGO) + || (gPartyMenu.slotId == 1 && gStatuses3[B_POSITION_PLAYER_RIGHT] & STATUS3_EMBARGO)) { - if ((partyMonIndex == 0 && gStatuses3[B_POSITION_PLAYER_LEFT] & STATUS3_EMBARGO) - || (partyMonIndex == 1 && gStatuses3[B_POSITION_PLAYER_RIGHT] & STATUS3_EMBARGO)) - return TRUE; // cannot use on this mon - else - return ExecuteTableBasedItemEffect(&gPlayerParty[partyMonIndex], item, GetPartyIdFromBattleSlot(partyMonIndex), monMoveIndex); + return FALSE; + } + // Items that restore HP (Potions, Sitrus Berry, etc.) + if (battleUsage == EFFECT_ITEM_RESTORE_HP && (hp == 0 || hp == GetMonData(mon, MON_DATA_MAX_HP))) + { + cannotUse++; + } + // Items that cure status (Burn Heal, Awakening, etc.) + if (battleUsage == EFFECT_ITEM_CURE_STATUS + && !((GetMonData(mon, MON_DATA_STATUS) & GetItemStatus1Mask(itemId)) + || (gPartyMenu.slotId == 0 && gBattleMons[gBattlerInMenuId].status2 & GetItemStatus2Mask(itemId)))) + { + cannotUse++; + } + // Items that restore HP and cure status (Full Restore) + if (battleUsage == EFFECT_ITEM_HEAL_AND_CURE_STATUS + && (hp == 0 || hp == GetMonData(mon, MON_DATA_MAX_HP)) + && !((GetMonData(mon, MON_DATA_STATUS) & GetItemStatus1Mask(itemId)) + || (gPartyMenu.slotId == 0 && gBattleMons[gBattlerInMenuId].status2 & GetItemStatus2Mask(itemId)))) + { + cannotUse++; + } + // Items that revive a party member + if (battleUsage == EFFECT_ITEM_REVIVE && hp != 0) + { + cannotUse++; + } + // Items that restore PP (Elixir, Ether, Leppa Berry) + if (battleUsage == EFFECT_ITEM_RESTORE_PP) + { + if (GetItemEffect(itemId)[6] == ITEM4_HEAL_PP) + { + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (GetMonData(mon, MON_DATA_PP1 + i) < CalculatePPWithBonus(GetMonData(mon, MON_DATA_MOVE1 + i), GetMonData(mon, MON_DATA_PP_BONUSES), i)); + break; + } + if (i == MAX_MON_MOVES) + cannotUse++; + } + else if (GetMonData(mon, MON_DATA_PP1 + gPartyMenu.data1) == CalculatePPWithBonus(GetMonData(mon, MON_DATA_MOVE1 + gPartyMenu.data1), GetMonData(mon, MON_DATA_PP_BONUSES), gPartyMenu.data1)) + { + cannotUse++; + } + } + return cannotUse; +} + +// Battle scripts called in HandleAction_UseItem +void ItemUseCB_BattleScript(u8 taskId, TaskFunc task) +{ + struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId]; + if (CannotUsePartyBattleItem(gSpecialVar_ItemId, mon)) + { + gPartyMenuUseExitCallback = FALSE; + PlaySE(SE_SELECT); + DisplayPartyMenuMessage(gText_WontHaveEffect, TRUE); + ScheduleBgCopyTilemapToVram(2); + gTasks[taskId].func = task; } else - return ExecuteTableBasedItemEffect(&gPlayerParty[partyMonIndex], item, partyMonIndex, monMoveIndex); + { + gBattleStruct->itemPartyIndex[gBattlerInMenuId] = GetPartyIdFromBattleSlot(gPartyMenu.slotId); + gPartyMenuUseExitCallback = TRUE; + PlaySE(SE_SELECT); + CopyItemName(gSpecialVar_ItemId, gStringVar2); + StringExpandPlaceholders(gStringVar4, gText_PlayerUsedVar2); + DisplayPartyMenuMessage(gStringVar4, TRUE); + ScheduleBgCopyTilemapToVram(2); + RemoveBagItem(gSpecialVar_ItemId, 1); + gTasks[taskId].func = task; + } +} + +void ItemUseCB_BattleChooseMove(u8 taskId, TaskFunc task) +{ + PlaySE(SE_SELECT); + DisplayPartyMenuStdMessage(PARTY_MSG_RESTORE_WHICH_MOVE); + ShowMoveSelectWindow(gPartyMenu.slotId); + gTasks[taskId].func = Task_HandleWhichMoveInput; } void ItemUseCB_Medicine(u8 taskId, TaskFunc task) @@ -4430,7 +4507,7 @@ void ItemUseCB_Medicine(u8 taskId, TaskFunc task) if (hp == GetMonData(mon, MON_DATA_MAX_HP)) canHeal = FALSE; } - cannotUse = ExecuteTableBasedItemEffect_(gPartyMenu.slotId, item, 0); + cannotUse = ExecuteTableBasedItemEffect(mon, item, gPartyMenu.slotId, 0); } if (cannotUse != FALSE) @@ -4691,7 +4768,7 @@ void ItemUseCB_ReduceEV(u8 taskId, TaskFunc task) u8 effectType = GetItemEffectType(item); u16 friendship = GetMonData(mon, MON_DATA_FRIENDSHIP); u16 ev = ItemEffectToMonEv(mon, effectType); - bool8 cannotUseEffect = ExecuteTableBasedItemEffect_(gPartyMenu.slotId, item, 0); + bool8 cannotUseEffect = ExecuteTableBasedItemEffect(mon, item, gPartyMenu.slotId, 0); u16 newFriendship = GetMonData(mon, MON_DATA_FRIENDSHIP); u16 newEv = ItemEffectToMonEv(mon, effectType); @@ -4807,25 +4884,19 @@ static void Task_HandleWhichMoveInput(u8 taskId) else { PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]); - SetSelectedMoveForPPItem(taskId); + SetSelectedMoveForItem(taskId); } } } void ItemUseCB_PPRecovery(u8 taskId, TaskFunc task) { - const u8 *effect; - u16 item = gSpecialVar_ItemId; - - if (item == ITEM_ENIGMA_BERRY_E_READER) - effect = gSaveBlock1Ptr->enigmaBerry.itemEffect; - else - effect = gItemEffectTable[item]; + const u8 *effect = GetItemEffect(gSpecialVar_ItemId); if (effect == NULL || !(effect[4] & ITEM4_HEAL_PP_ONE)) { gPartyMenu.data1 = 0; - TryUsePPItem(taskId); + TryUseItemOnMove(taskId); } else { @@ -4836,11 +4907,11 @@ void ItemUseCB_PPRecovery(u8 taskId, TaskFunc task) } } -static void SetSelectedMoveForPPItem(u8 taskId) +static void SetSelectedMoveForItem(u8 taskId) { PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]); gPartyMenu.data1 = Menu_GetCursorPos(); - TryUsePPItem(taskId); + TryUseItemOnMove(taskId); } static void ReturnToUseOnWhichMon(u8 taskId) @@ -4851,34 +4922,61 @@ static void ReturnToUseOnWhichMon(u8 taskId) DisplayPartyMenuStdMessage(PARTY_MSG_USE_ON_WHICH_MON); } -static void TryUsePPItem(u8 taskId) +static void TryUseItemOnMove(u8 taskId) { - u16 move = MOVE_NONE; - s16 *moveSlot = &gPartyMenu.data1; - u16 item = gSpecialVar_ItemId; struct PartyMenu *ptr = &gPartyMenu; - struct Pokemon *mon; - - if (ExecuteTableBasedItemEffect_(ptr->slotId, item, *moveSlot)) + struct Pokemon *mon = &gPlayerParty[ptr->slotId]; + // In battle, set appropriate variables to be used in battle script. + if (gMain.inBattle) { - gPartyMenuUseExitCallback = FALSE; - PlaySE(SE_SELECT); - DisplayPartyMenuMessage(gText_WontHaveEffect, TRUE); - ScheduleBgCopyTilemapToVram(2); - gTasks[taskId].func = Task_ClosePartyMenuAfterText; + if (CannotUsePartyBattleItem(gSpecialVar_ItemId, mon)) + { + gPartyMenuUseExitCallback = FALSE; + PlaySE(SE_SELECT); + DisplayPartyMenuMessage(gText_WontHaveEffect, TRUE); + ScheduleBgCopyTilemapToVram(2); + gTasks[taskId].func = Task_ClosePartyMenuAfterText; + } + else + { + gBattleStruct->itemPartyIndex[gBattlerInMenuId] = GetPartyIdFromBattleSlot(gPartyMenu.slotId); + gChosenMovePos = ptr->data1; + gPartyMenuUseExitCallback = TRUE; + RemoveBagItem(gSpecialVar_ItemId, 1); + CopyItemName(gSpecialVar_ItemId, gStringVar2); + StringExpandPlaceholders(gStringVar4, gText_PlayerUsedVar2); + DisplayPartyMenuMessage(gStringVar4, TRUE); + ScheduleBgCopyTilemapToVram(2); + gTasks[taskId].func = Task_ClosePartyMenuAfterText; + } } + // Outside of battle, only PP items are used on moves. else { - gPartyMenuUseExitCallback = TRUE; - mon = &gPlayerParty[ptr->slotId]; - PlaySE(SE_USE_ITEM); - RemoveBagItem(item, 1); - move = GetMonData(mon, MON_DATA_MOVE1 + *moveSlot); - StringCopy(gStringVar1, gMoveNames[move]); - GetMedicineItemEffectMessage(item); - DisplayPartyMenuMessage(gStringVar4, TRUE); - ScheduleBgCopyTilemapToVram(2); - gTasks[taskId].func = Task_ClosePartyMenuAfterText; + u16 move = MOVE_NONE; + s16 *moveSlot = &gPartyMenu.data1; + u16 item = gSpecialVar_ItemId; + + if (ExecuteTableBasedItemEffect(mon, item, ptr->slotId, *moveSlot)) + { + gPartyMenuUseExitCallback = FALSE; + PlaySE(SE_SELECT); + DisplayPartyMenuMessage(gText_WontHaveEffect, TRUE); + ScheduleBgCopyTilemapToVram(2); + gTasks[taskId].func = Task_ClosePartyMenuAfterText; + } + else + { + gPartyMenuUseExitCallback = TRUE; + PlaySE(SE_USE_ITEM); + RemoveBagItem(item, 1); + move = GetMonData(mon, MON_DATA_MOVE1 + *moveSlot); + StringCopy(gStringVar1, gMoveNames[move]); + GetMedicineItemEffectMessage(item); + DisplayPartyMenuMessage(gStringVar4, TRUE); + ScheduleBgCopyTilemapToVram(2); + gTasks[taskId].func = Task_ClosePartyMenuAfterText; + } } } @@ -5192,7 +5290,7 @@ void ItemUseCB_RareCandy(u8 taskId, TaskFunc task) if (sInitialLevel != MAX_LEVEL) { BufferMonStatsToTaskData(mon, arrayPtr); - cannotUseEffect = ExecuteTableBasedItemEffect_(gPartyMenu.slotId, *itemPtr, 0); + cannotUseEffect = ExecuteTableBasedItemEffect(mon, gPartyMenu.slotId, *itemPtr, 0); BufferMonStatsToTaskData(mon, &ptr->data[NUM_STATS]); } else @@ -5459,7 +5557,7 @@ static void UseSacredAsh(u8 taskId) } hp = GetMonData(mon, MON_DATA_HP); - if (ExecuteTableBasedItemEffect_(gPartyMenu.slotId, gSpecialVar_ItemId, 0)) + if (ExecuteTableBasedItemEffect(mon, gSpecialVar_ItemId, gPartyMenu.slotId, 0)) { gTasks[taskId].func = Task_SacredAshLoop; return; @@ -5526,7 +5624,7 @@ void ItemUseCB_EvolutionStone(u8 taskId, TaskFunc task) { PlaySE(SE_SELECT); gCB2_AfterEvolution = gPartyMenu.exitCallback; - if (ExecuteTableBasedItemEffect_(gPartyMenu.slotId, gSpecialVar_ItemId, 0)) + if (ExecuteTableBasedItemEffect(&gPlayerParty[gPartyMenu.slotId], gSpecialVar_ItemId, gPartyMenu.slotId, 0)) { gPartyMenuUseExitCallback = FALSE; DisplayPartyMenuMessage(gText_WontHaveEffect, TRUE); @@ -5691,16 +5789,18 @@ void TryItemHoldFormChange(struct Pokemon *mon) #undef tAnimWait #undef tNextFunc -u8 GetItemEffectType(u16 item) +const u8* GetItemEffect(u16 item) { - const u8 *itemEffect; - u32 statusCure; - - // Read the item's effect properties. if (item == ITEM_ENIGMA_BERRY_E_READER) - itemEffect = gSaveBlock1Ptr->enigmaBerry.itemEffect; + return gSaveBlock1Ptr->enigmaBerry.itemEffect; else - itemEffect = gItemEffectTable[item]; + return gItemEffectTable[item]; +} + +u8 GetItemEffectType(u16 item) +{ + u32 statusCure; + const u8 *itemEffect = GetItemEffect(item); if (itemEffect == NULL) return ITEM_EFFECT_NONE; diff --git a/src/pokemon.c b/src/pokemon.c index 10a4d0efd3e5..d985ef95d39b 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -5736,55 +5736,16 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov // Get item hold effect heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, NULL); if (heldItem == ITEM_ENIGMA_BERRY_E_READER) - { - if (gMain.inBattle) - holdEffect = gEnigmaBerries[gBattlerInMenuId].holdEffect; - else - holdEffect = gSaveBlock1Ptr->enigmaBerry.holdEffect; - } + holdEffect = gSaveBlock1Ptr->enigmaBerry.holdEffect; else - { holdEffect = ItemId_GetHoldEffect(heldItem); - } - - // Get battler id (if relevant) - gPotentialItemEffectBattler = gBattlerInMenuId; - if (gMain.inBattle) - { - gActiveBattler = gBattlerInMenuId; - i = (GetBattlerSide(gActiveBattler) != B_SIDE_PLAYER); - while (i < gBattlersCount) - { - if (gBattlerPartyIndexes[i] == partyIndex) - { - battlerId = i; - break; - } - i += 2; - } - } - else - { - gActiveBattler = 0; - battlerId = MAX_BATTLERS_COUNT; - } // Skip using the item if it won't do anything if (gItemEffectTable[item] == NULL && item != ITEM_ENIGMA_BERRY_E_READER) return TRUE; // Get item effect - if (item == ITEM_ENIGMA_BERRY_E_READER) - { - if (gMain.inBattle) - itemEffect = gEnigmaBerries[gActiveBattler].itemEffect; - else - itemEffect = gSaveBlock1Ptr->enigmaBerry.itemEffect; - } - else - { - itemEffect = gItemEffectTable[item]; - } + itemEffect = GetItemEffect(item); // Do item effect for (i = 0; i < ITEM_EFFECT_ARG_START; i++) @@ -5793,85 +5754,13 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov { // Handle ITEM0 effects (infatuation, Dire Hit, X Attack). ITEM0_SACRED_ASH is handled in party_menu.c + // Now handled in item battle scripts. case 0: - // Cure infatuation - if ((itemEffect[i] & ITEM0_INFATUATION) - && gMain.inBattle && battlerId != MAX_BATTLERS_COUNT && (gBattleMons[battlerId].status2 & STATUS2_INFATUATION)) - { - gBattleMons[battlerId].status2 &= ~STATUS2_INFATUATION; - retVal = FALSE; - } - - // Dire Hit - if ((itemEffect[i] & ITEM0_DIRE_HIT) - && !(gBattleMons[gActiveBattler].status2 & STATUS2_FOCUS_ENERGY)) - { - gBattleMons[gActiveBattler].status2 |= STATUS2_FOCUS_ENERGY; - retVal = FALSE; - } break; // Handle ITEM1 effects (in-battle stat boosting effects) + // Now handled in item battle scripts. case 1: - // X Attack - if ((itemEffect[i] & ITEM1_X_ATTACK) - && gBattleMons[gActiveBattler].statStages[STAT_ATK] < MAX_STAT_STAGE) - { - gBattleMons[gActiveBattler].statStages[STAT_ATK] += X_ITEM_STAGES; - if (gBattleMons[gActiveBattler].statStages[STAT_ATK] > MAX_STAT_STAGE) - gBattleMons[gActiveBattler].statStages[STAT_ATK] = MAX_STAT_STAGE; - retVal = FALSE; - } - - // X Defense - if ((itemEffect[i] & ITEM1_X_DEFENSE) - && gBattleMons[gActiveBattler].statStages[STAT_DEF] < MAX_STAT_STAGE) - { - gBattleMons[gActiveBattler].statStages[STAT_DEF] += X_ITEM_STAGES; - if (gBattleMons[gActiveBattler].statStages[STAT_DEF] > MAX_STAT_STAGE) - gBattleMons[gActiveBattler].statStages[STAT_DEF] = MAX_STAT_STAGE; - retVal = FALSE; - } - - // X Speed - if ((itemEffect[i] & ITEM1_X_SPEED) - && gBattleMons[gActiveBattler].statStages[STAT_SPEED] < MAX_STAT_STAGE) - { - gBattleMons[gActiveBattler].statStages[STAT_SPEED] += X_ITEM_STAGES; - if (gBattleMons[gActiveBattler].statStages[STAT_SPEED] > MAX_STAT_STAGE) - gBattleMons[gActiveBattler].statStages[STAT_SPEED] = MAX_STAT_STAGE; - retVal = FALSE; - } - - // X Sp Attack - if ((itemEffect[i] & ITEM1_X_SPATK) - && gBattleMons[gActiveBattler].statStages[STAT_SPATK] < MAX_STAT_STAGE) - { - gBattleMons[gActiveBattler].statStages[STAT_SPATK] += X_ITEM_STAGES; - if (gBattleMons[gActiveBattler].statStages[STAT_SPATK] > MAX_STAT_STAGE) - gBattleMons[gActiveBattler].statStages[STAT_SPATK] = MAX_STAT_STAGE; - retVal = FALSE; - } - - // X Sp Defense - if ((itemEffect[i] & ITEM1_X_SPDEF) - && gBattleMons[gActiveBattler].statStages[STAT_SPDEF] < MAX_STAT_STAGE) - { - gBattleMons[gActiveBattler].statStages[STAT_SPDEF] += X_ITEM_STAGES; - if (gBattleMons[gActiveBattler].statStages[STAT_SPDEF] > MAX_STAT_STAGE) - gBattleMons[gActiveBattler].statStages[STAT_SPDEF] = MAX_STAT_STAGE; - retVal = FALSE; - } - - // X Accuracy - if ((itemEffect[i] & ITEM1_X_ACCURACY) - && gBattleMons[gActiveBattler].statStages[STAT_ACC] < MAX_STAT_STAGE) - { - gBattleMons[gActiveBattler].statStages[STAT_ACC] += X_ITEM_STAGES; - if (gBattleMons[gActiveBattler].statStages[STAT_ACC] > MAX_STAT_STAGE) - gBattleMons[gActiveBattler].statStages[STAT_ACC] = MAX_STAT_STAGE; - retVal = FALSE; - } break; // Formerly used by the item effects of the X Sp. Atk and the X Accuracy case 2: @@ -5879,14 +5768,6 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov // Handle ITEM3 effects (Guard Spec, Rare Candy, cure status) case 3: - // Guard Spec - if ((itemEffect[i] & ITEM3_GUARD_SPEC) - && gSideTimers[GetBattlerSide(gActiveBattler)].mistTimer == 0) - { - gSideTimers[GetBattlerSide(gActiveBattler)].mistTimer = 5; - retVal = FALSE; - } - // Rare Candy / EXP Candy if ((itemEffect[i] & ITEM3_LEVEL_UP) && GetMonData(mon, MON_DATA_LEVEL, NULL) != MAX_LEVEL) @@ -5915,13 +5796,8 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov } // Cure status - if ((itemEffect[i] & ITEM3_SLEEP) - && HealStatusConditions(mon, partyIndex, STATUS1_SLEEP, battlerId) == 0) - { - if (battlerId != MAX_BATTLERS_COUNT) - gBattleMons[battlerId].status2 &= ~STATUS2_NIGHTMARE; + if ((itemEffect[i] & ITEM3_SLEEP) && HealStatusConditions(mon, partyIndex, STATUS1_SLEEP, battlerId) == 0) retVal = FALSE; - } if ((itemEffect[i] & ITEM3_POISON) && HealStatusConditions(mon, partyIndex, STATUS1_PSN_ANY | STATUS1_TOXIC_COUNTER, battlerId) == 0) retVal = FALSE; if ((itemEffect[i] & ITEM3_BURN) && HealStatusConditions(mon, partyIndex, STATUS1_BURN, battlerId) == 0) @@ -5930,12 +5806,6 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov retVal = FALSE; if ((itemEffect[i] & ITEM3_PARALYSIS) && HealStatusConditions(mon, partyIndex, STATUS1_PARALYSIS, battlerId) == 0) retVal = FALSE; - if ((itemEffect[i] & ITEM3_CONFUSION) // heal confusion - && gMain.inBattle && battlerId != MAX_BATTLERS_COUNT && (gBattleMons[battlerId].status2 & STATUS2_CONFUSION)) - { - gBattleMons[battlerId].status2 &= ~STATUS2_CONFUSION; - retVal = FALSE; - } break; // Handle ITEM4 effects (Change HP/Atk EVs, HP heal, PP heal, PP up, Revive, and evolution stones) @@ -6022,38 +5892,12 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov break; case 2: // ITEM4_HEAL_HP - // If Revive, update number of times revive has been used - if (effectFlags & (ITEM4_REVIVE >> 2)) - { - if (GetMonData(mon, MON_DATA_HP, NULL) != 0) - { - itemEffectParam++; - break; - } - if (gMain.inBattle) - { - if (battlerId != MAX_BATTLERS_COUNT) - { - gAbsentBattlerFlags &= ~gBitTable[battlerId]; - CopyPlayerPartyMonToBattleData(battlerId, GetPartyIdFromBattlePartyId(gBattlerPartyIndexes[battlerId])); - if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER && gBattleResults.numRevivesUsed < 255) - gBattleResults.numRevivesUsed++; - } - else - { - gAbsentBattlerFlags &= ~gBitTable[gActiveBattler ^ 2]; - if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER && gBattleResults.numRevivesUsed < 255) - gBattleResults.numRevivesUsed++; - } - } - } - else + // Check use validity. + if ((effectFlags & (ITEM4_REVIVE >> 2) && GetMonData(mon, MON_DATA_HP, NULL) != 0) + || (!(effectFlags & (ITEM4_REVIVE >> 2)) && GetMonData(mon, MON_DATA_HP, NULL) == 0)) { - if (GetMonData(mon, MON_DATA_HP, NULL) == 0) - { - itemEffectParam++; - break; - } + itemEffectParam++; + break; } // Get amount of HP to restore @@ -6081,35 +5925,11 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov // Only restore HP if not at max health if (GetMonData(mon, MON_DATA_MAX_HP, NULL) != GetMonData(mon, MON_DATA_HP, NULL)) { - if (!usedByAI) - { - // Restore HP - dataUnsigned = GetMonData(mon, MON_DATA_HP, NULL) + dataUnsigned; - if (dataUnsigned > GetMonData(mon, MON_DATA_MAX_HP, NULL)) - dataUnsigned = GetMonData(mon, MON_DATA_MAX_HP, NULL); - SetMonData(mon, MON_DATA_HP, &dataUnsigned); - - // Update battler (if applicable) - if (gMain.inBattle && battlerId != MAX_BATTLERS_COUNT) - { - gBattleMons[battlerId].hp = dataUnsigned; - if (!(effectFlags & (ITEM4_REVIVE >> 2)) && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) - { - if (gBattleResults.numHealingItemsUsed < 255) - gBattleResults.numHealingItemsUsed++; - - temp2 = gActiveBattler; - gActiveBattler = battlerId; - BtlController_EmitGetMonData(BUFFER_A, REQUEST_ALL_BATTLE, 0); - MarkBattlerForControllerExec(gActiveBattler); - gActiveBattler = temp2; - } - } - } - else - { - gBattleMoveDamage = -dataUnsigned; - } + // Restore HP + dataUnsigned = GetMonData(mon, MON_DATA_HP, NULL) + dataUnsigned; + if (dataUnsigned > GetMonData(mon, MON_DATA_MAX_HP, NULL)) + dataUnsigned = GetMonData(mon, MON_DATA_MAX_HP, NULL); + SetMonData(mon, MON_DATA_HP, &dataUnsigned); retVal = FALSE; } effectFlags &= ~(ITEM4_REVIVE >> 2); @@ -6134,11 +5954,6 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov dataUnsigned = CalculatePPWithBonus(moveId, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), temp2); } SetMonData(mon, MON_DATA_PP1 + temp2, &dataUnsigned); - - // Heal battler PP too (if applicable) - if (gMain.inBattle && battlerId != MAX_BATTLERS_COUNT && MOVE_IS_PERMANENT(battlerId, temp2)) - gBattleMons[battlerId].pp[temp2] = dataUnsigned; - retVal = FALSE; } } @@ -6160,11 +5975,6 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov dataUnsigned = CalculatePPWithBonus(moveId, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), moveIndex); } SetMonData(mon, MON_DATA_PP1 + moveIndex, &dataUnsigned); - - // Heal battler PP too (if applicable) - if (gMain.inBattle && battlerId != MAX_BATTLERS_COUNT && MOVE_IS_PERMANENT(battlerId, moveIndex)) - gBattleMons[battlerId].pp[moveIndex] = dataUnsigned; - retVal = FALSE; } } diff --git a/test/item_effect_increase_stat.c b/test/item_effect_increase_stat.c new file mode 100644 index 000000000000..70c89bdd4e55 --- /dev/null +++ b/test/item_effect_increase_stat.c @@ -0,0 +1,25 @@ +#include "global.h" +#include "test_battle.h" + +SINGLE_BATTLE_TEST("X-Attack sharply raises battler's attack stat", s16 damage) +{ + u16 useItem; + PARAMETRIZE { useItem = FALSE; } + PARAMETRIZE { useItem = TRUE; } + GIVEN { + ASSUME(gItems[ITEM_X_ATTACK].battleUsage == EFFECT_ITEM_INCREASE_STAT); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + if (useItem) TURN { USE_ITEM(player, ITEM_X_ATTACK); } + TURN { MOVE(player, MOVE_TACKLE); } + } SCENE { + MESSAGE("Wobbuffet used Tackle!"); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + if (B_X_ITEMS_BUFF >= GEN_7) + EXPECT_MUL_EQ(results[0].damage, Q_4_12(2.0), results[1].damage); + else + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage); + } +} diff --git a/test/item_effect_restore_hp.c b/test/item_effect_restore_hp.c new file mode 100644 index 000000000000..971ec2400b04 --- /dev/null +++ b/test/item_effect_restore_hp.c @@ -0,0 +1,37 @@ +#include "global.h" +#include "test_battle.h" + +SINGLE_BATTLE_TEST("Potion restores a battler's HP by 20") +{ + s16 damage; + GIVEN { + ASSUME(gItems[ITEM_POTION].battleUsage == EFFECT_ITEM_RESTORE_HP); + PLAYER(SPECIES_WOBBUFFET) { HP(50); MaxHP(100); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { USE_ITEM(player, ITEM_POTION, partyIndex: 0); } + } SCENE { + HP_BAR(player, captureDamage: &damage); + } FINALLY { + EXPECT_EQ(damage, -20); + } +} + +SINGLE_BATTLE_TEST("Sitrus Berry restores a battler's HP") +{ + s16 damage; + GIVEN { + ASSUME(gItems[ITEM_SITRUS_BERRY].battleUsage == EFFECT_ITEM_RESTORE_HP); + PLAYER(SPECIES_WOBBUFFET) { HP(50); MaxHP(100); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { USE_ITEM(player, ITEM_SITRUS_BERRY, partyIndex: 0); } + } SCENE { + HP_BAR(player, captureDamage: &damage); + } FINALLY { + if (I_SITRUS_BERRY_HEAL >= GEN_4) + EXPECT_EQ(damage, -25); + else + EXPECT_EQ(damage, -30); + } +} diff --git a/test/item_effect_restore_pp.c b/test/item_effect_restore_pp.c new file mode 100644 index 000000000000..234d4ae4e50b --- /dev/null +++ b/test/item_effect_restore_pp.c @@ -0,0 +1,19 @@ +#include "global.h" +#include "test_battle.h" + +SINGLE_BATTLE_TEST("Ether restores the PP of one of a battler's moves") +{ + GIVEN { + ASSUME(gItems[ITEM_ETHER].battleUsage == EFFECT_ITEM_RESTORE_PP); + ASSUME(gItems[ITEM_ETHER].type == ITEM_USE_PARTY_MENU_MOVES); + PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_TACKLE, MOVE_CONFUSION); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_TACKLE); } + TURN { MOVE(player, MOVE_CONFUSION); } + TURN { USE_ITEM(player, ITEM_ETHER, partyIndex: 0, move: MOVE_TACKLE); } + } FINALLY { + EXPECT_EQ(player->pp[0], 35); + EXPECT_EQ(player->pp[1], 24); + } +} diff --git a/test/test_battle.h b/test/test_battle.h index 60d0dc33cc8d..967bb661dd18 100644 --- a/test/test_battle.h +++ b/test/test_battle.h @@ -333,6 +333,13 @@ * Used when the battler chooses to switch to another Pokémon but not * via Switch, e.g. after fainting or due to a U-turn. * SEND_OUT(player, 1); + * + * USE_ITEM(battler, itemId, [partyIndex:], [move:]) + * Used when the battler chooses to use an item from the Bag. The item + * ID must be specified, and party index and move slot if applicable, e.g: + * USE_ITEM(player, ITEM_X_ATTACK); + * USE_ITEM(player, ITEM_POTION, partyIndex: 0); + * USE_ITEM(player, ITEM_LEPPA_BERRY, partyIndex: 0, move: MOVE_TACKLE); * * SCENE * Contains an abridged description of the UI during the THEN. The order @@ -765,7 +772,7 @@ enum { TURN_CLOSED, TURN_OPEN, TURN_CLOSING }; #define SWITCH(battler, partyIndex) Switch(__LINE__, battler, partyIndex) #define SKIP_TURN(battler) SkipTurn(__LINE__, battler) #define SEND_OUT(battler, partyIndex) SendOut(__LINE__, battler, partyIndex) - +#define USE_ITEM(battler, ...) UseItem(__LINE__, battler, (struct ItemContext) { APPEND_TRUE(__VA_ARGS__) }) #define WITH_RNG(tag, value) rng: ((struct TurnRNG) { tag, value }) struct MoveContext @@ -791,13 +798,23 @@ struct MoveContext bool8 explicitRNG; }; +struct ItemContext +{ + u16 itemId; + u16 explicitItemId:1; + u16 partyIndex; + u16 explicitPartyIndex:1; + u16 move; + u16 explicitMove:1; +}; + void OpenTurn(u32 sourceLine); void CloseTurn(u32 sourceLine); void Move(u32 sourceLine, struct BattlePokemon *, struct MoveContext); void ForcedMove(u32 sourceLine, struct BattlePokemon *); void Switch(u32 sourceLine, struct BattlePokemon *, u32 partyIndex); void SkipTurn(u32 sourceLine, struct BattlePokemon *); - +void UseItem(u32 sourceLine, struct BattlePokemon *, struct ItemContext); void SendOut(u32 sourceLine, struct BattlePokemon *, u32 partyIndex); /* Scene */ diff --git a/test/test_runner_battle.c b/test/test_runner_battle.c index 1b03341a455b..365120f1370b 100644 --- a/test/test_runner_battle.c +++ b/test/test_runner_battle.c @@ -3,6 +3,7 @@ #include "battle_anim.h" #include "battle_controllers.h" #include "characters.h" +#include "item_menu.h" #include "main.h" #include "malloc.h" #include "random.h" @@ -1251,6 +1252,9 @@ void BattleTest_CheckBattleRecordActionType(u32 battlerId, u32 recordIndex, u32 case B_ACTION_SWITCH: actualMacro = "SWITCH"; break; + case B_ACTION_USE_ITEM: + actualMacro = "USE_ITEM"; + break; } break; case RECORDED_PARTY_INDEX: @@ -1508,6 +1512,40 @@ void SendOut(u32 sourceLine, struct BattlePokemon *battler, u32 partyIndex) DATA.currentMonIndexes[battlerId] = partyIndex; } +void UseItem(u32 sourceLine, struct BattlePokemon *battler, struct ItemContext ctx) +{ + s32 i; + s32 battlerId = battler - gBattleMons; + bool32 requirePartyIndex = ItemId_GetType(ctx.itemId) == ITEM_USE_PARTY_MENU || ItemId_GetType(ctx.itemId) == ITEM_USE_PARTY_MENU_MOVES; + // Check general bad use. + INVALID_IF(DATA.turnState == TURN_CLOSED, "USE_ITEM outside TURN"); + INVALID_IF(DATA.actionBattlers & (1 << battlerId), "Multiple battler actions"); + INVALID_IF(ctx.itemId >= ITEMS_COUNT, "Illegal item: %d", ctx.itemId); + // Check party menu items. + INVALID_IF(requirePartyIndex && !ctx.explicitPartyIndex, "%S requires explicit party index", ItemId_GetName(ctx.itemId)); + INVALID_IF(requirePartyIndex && ctx.partyIndex >= ((battlerId & BIT_SIDE) == B_SIDE_PLAYER ? DATA.playerPartySize : DATA.opponentPartySize), \ + "USE_ITEM to invalid party index"); + // Check move slot items. + if (ItemId_GetType(ctx.itemId) == ITEM_USE_PARTY_MENU_MOVES) + { + INVALID_IF(!ctx.explicitMove, "%S requires an explicit move", ItemId_GetName(ctx.itemId)); + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (GetMonData(CurrentMon(battlerId), MON_DATA_MOVE1 + i, NULL) == ctx.move) + break; + } + INVALID_IF(i == MAX_MON_MOVES, "USE_ITEM on invalid move: %d", ctx.move); + } + PushBattlerAction(sourceLine, battlerId, RECORDED_ACTION_TYPE, B_ACTION_USE_ITEM); + PushBattlerAction(sourceLine, battlerId, RECORDED_ITEM_ID, (ctx.itemId >> 8) & 0xFF); + PushBattlerAction(sourceLine, battlerId, RECORDED_ITEM_ID, ctx.itemId & 0xFF); + if (ctx.explicitPartyIndex) + gBattleStruct->itemPartyIndex[battlerId] = ctx.partyIndex; + if (ctx.explicitMove) + gBattleStruct->itemPartyIndex[battlerId] = i; + DATA.actionBattlers |= 1 << battlerId; +} + static const char *const sQueueGroupTypeMacros[] = { [QUEUE_GROUP_NONE] = NULL, From dacd0785db12a41df50a0b12989d58c54ae41f3b Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Fri, 14 Apr 2023 15:17:19 -0400 Subject: [PATCH 256/428] Fixed Mega Evolution script name --- data/battle_scripts_1.s | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index ebb23d2014de..30a80bf193e2 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -7872,7 +7872,7 @@ BattleScript_FocusPunchSetUp:: BattleScript_MegaEvolution:: printstring STRINGID_MEGAEVOREACTING -BattleScript_MegaEvolutionAfeterString: +BattleScript_MegaEvolutionAfterString: waitmessage B_WAIT_TIME_LONG setbyte gIsCriticalHit, 0 handlemegaevo BS_ATTACKER, 0 @@ -7886,7 +7886,7 @@ BattleScript_MegaEvolutionAfeterString: BattleScript_WishMegaEvolution:: printstring STRINGID_FERVENTWISHREACHED - goto BattleScript_MegaEvolutionAfeterString + goto BattleScript_MegaEvolutionAfterString BattleScript_PrimalReversion:: printstring STRINGID_EMPTYSTRING3 From 82dc1e3e93810f74f7abd377f76c2f4ceab70976 Mon Sep 17 00:00:00 2001 From: AgustinGDLV Date: Sat, 15 Apr 2023 09:27:28 -0700 Subject: [PATCH 257/428] fixed dupe strings in battle item use --- data/battle_scripts_2.s | 12 ++++++------ src/item_use.c | 5 +++-- src/party_menu.c | 8 +------- 3 files changed, 10 insertions(+), 15 deletions(-) diff --git a/data/battle_scripts_2.s b/data/battle_scripts_2.s index dee482d1d3b8..71d88ae84b5f 100644 --- a/data/battle_scripts_2.s +++ b/data/battle_scripts_2.s @@ -49,14 +49,13 @@ BattleScript_UseItemMessage: BattleScript_ItemRestoreHP:: call BattleScript_UseItemMessage itemrestorehp - printstring STRINGID_ITEMRESTOREDSPECIESHEALTH - waitmessage B_WAIT_TIME_LONG jumpifbyte CMP_EQUAL, gBattleCommunication, TRUE, BattleScript_ItemRestoreHP_SendOutRevivedBattler bichalfword gMoveResultFlags, MOVE_RESULT_NO_EFFECT orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE healthbarupdate BS_ATTACKER datahpupdate BS_ATTACKER - updatestatusicon BS_ATTACKER + printstring STRINGID_ITEMRESTOREDSPECIESHEALTH + waitmessage B_WAIT_TIME_LONG end BattleScript_ItemRestoreHP_SendOutRevivedBattler: @@ -68,22 +67,22 @@ BattleScript_ItemRestoreHP_SendOutRevivedBattler: BattleScript_ItemCureStatus:: call BattleScript_UseItemMessage itemcurestatus + updatestatusicon BS_ATTACKER printstring STRINGID_ITEMCUREDSPECIESSTATUS waitmessage B_WAIT_TIME_LONG - updatestatusicon BS_ATTACKER end BattleScript_ItemHealAndCureStatus:: call BattleScript_UseItemMessage itemrestorehp curestatus BS_ATTACKER - printstring STRINGID_ITEMRESTOREDSPECIESHEALTH - waitmessage B_WAIT_TIME_LONG bichalfword gMoveResultFlags, MOVE_RESULT_NO_EFFECT orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE healthbarupdate BS_ATTACKER datahpupdate BS_ATTACKER updatestatusicon BS_ATTACKER + printstring STRINGID_ITEMRESTOREDSPECIESHEALTH + waitmessage B_WAIT_TIME_LONG end BattleScript_ItemIncreaseStat:: @@ -256,3 +255,4 @@ BattleScript_TrainerBSlideMsgRet:: BattleScript_TrainerBSlideMsgEnd2:: call BattleScript_TrainerBSlideMsgRet end2 + end2 diff --git a/src/item_use.c b/src/item_use.c index 8bcadfb2eb2e..26b48ac80b7c 100644 --- a/src/item_use.c +++ b/src/item_use.c @@ -1229,10 +1229,11 @@ void ItemUseInBattle_BagMenu(u8 taskId) { PlaySE(SE_SELECT); RemoveUsedItem(); + ScheduleBgCopyTilemapToVram(2); if (!InBattlePyramid()) - DisplayItemMessage(taskId, FONT_NORMAL, gStringVar4, Task_FadeAndCloseBagMenu); + gTasks[taskId].func = Task_FadeAndCloseBagMenu; else - DisplayItemMessageInBattlePyramid(taskId, gStringVar4, CloseBattlePyramidBag); + gTasks[taskId].func = CloseBattlePyramidBag; } } diff --git a/src/party_menu.c b/src/party_menu.c index dd46b106347d..95d64e54632e 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -4470,11 +4470,8 @@ void ItemUseCB_BattleScript(u8 taskId, TaskFunc task) gBattleStruct->itemPartyIndex[gBattlerInMenuId] = GetPartyIdFromBattleSlot(gPartyMenu.slotId); gPartyMenuUseExitCallback = TRUE; PlaySE(SE_SELECT); - CopyItemName(gSpecialVar_ItemId, gStringVar2); - StringExpandPlaceholders(gStringVar4, gText_PlayerUsedVar2); - DisplayPartyMenuMessage(gStringVar4, TRUE); - ScheduleBgCopyTilemapToVram(2); RemoveBagItem(gSpecialVar_ItemId, 1); + ScheduleBgCopyTilemapToVram(2); gTasks[taskId].func = task; } } @@ -4943,9 +4940,6 @@ static void TryUseItemOnMove(u8 taskId) gChosenMovePos = ptr->data1; gPartyMenuUseExitCallback = TRUE; RemoveBagItem(gSpecialVar_ItemId, 1); - CopyItemName(gSpecialVar_ItemId, gStringVar2); - StringExpandPlaceholders(gStringVar4, gText_PlayerUsedVar2); - DisplayPartyMenuMessage(gStringVar4, TRUE); ScheduleBgCopyTilemapToVram(2); gTasks[taskId].func = Task_ClosePartyMenuAfterText; } From aefe5825964e5cd4d10dae3bad63a4bf5a33b4b2 Mon Sep 17 00:00:00 2001 From: Martin Griffin Date: Sat, 15 Apr 2023 00:52:14 +0100 Subject: [PATCH 258/428] GetSideParty/GetBattlerParty Inline GetBattlerPartyData into its callers because its name is confusing and we couldn't think of a better one. This seems to fix a bug in one place where GetBattlerPartyData was being used as if it had GetBattlerParty semantics. --- include/battle.h | 11 ++++++++ include/battle_util.h | 1 - src/battle_ai_util.c | 2 +- src/battle_anim_new.c | 3 -- src/battle_main.c | 7 +++-- src/battle_script_commands.c | 53 +++++++++------------------------- src/battle_util.c | 55 ++++++++---------------------------- 7 files changed, 42 insertions(+), 90 deletions(-) diff --git a/include/battle.h b/include/battle.h index 46975bec3cf3..afa02a8f210e 100644 --- a/include/battle.h +++ b/include/battle.h @@ -719,6 +719,17 @@ struct BattleStruct #define SET_STATCHANGER(statId, stage, goesDown)(gBattleScripting.statChanger = (statId) + ((stage) << 3) + (goesDown << 7)) #define SET_STATCHANGER2(dst, statId, stage, goesDown)(dst = (statId) + ((stage) << 3) + (goesDown << 7)) +static inline struct Pokemon *GetSideParty(u32 side) +{ + return side == B_SIDE_PLAYER ? gPlayerParty : gEnemyParty; +} + +static inline struct Pokemon *GetBattlerParty(u32 battlerId) +{ + extern u8 GetBattlerSide(u8 battler); + return GetSideParty(GetBattlerSide(battlerId)); +} + // NOTE: The members of this struct have hard-coded offsets // in include/constants/battle_script_commands.h struct BattleScripting diff --git a/include/battle_util.h b/include/battle_util.h index 0661081e43b8..308639487763 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -188,7 +188,6 @@ bool32 SetIllusionMon(struct Pokemon *mon, u32 battlerId); bool8 ShouldGetStatBadgeBoost(u16 flagId, u8 battlerId); u8 GetBattleMoveSplit(u32 moveId); bool32 TestMoveFlags(u16 move, u32 flag); -struct Pokemon *GetBattlerPartyData(u8 battlerId); bool32 CanFling(u8 battlerId); bool32 IsTelekinesisBannedSpecies(u16 species); bool32 IsHealBlockPreventingMove(u32 battler, u32 move); diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 05e7aec58f11..1128f385bb1e 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -3420,7 +3420,7 @@ bool32 IsPartyFullyHealedExceptBattler(u8 battlerId) bool32 PartyHasMoveSplit(u8 battlerId, u8 split) { u8 firstId, lastId; - struct Pokemon* party = GetBattlerPartyData(battlerId); + struct Pokemon *party = GetBattlerParty(battlerId); u32 i, j; for (i = 0; i < PARTY_SIZE; i++) diff --git a/src/battle_anim_new.c b/src/battle_anim_new.c index b3502fcb9e00..715e5b3e26d6 100644 --- a/src/battle_anim_new.c +++ b/src/battle_anim_new.c @@ -7897,9 +7897,6 @@ void AnimTask_TerrainPulse(u8 taskId) void AnimTask_AffectionHangedOn(u8 taskId) { - int side = GetBattlerSide(gBattleAnimTarget); - struct Pokemon *party = (side == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty; - gBattleAnimArgs[0] = GetBattlerFriendshipScore(gBattleAnimTarget); DestroyAnimVisualTask(taskId); } diff --git a/src/battle_main.c b/src/battle_main.c index a5a9b5bbf623..0babba241a84 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -3799,7 +3799,9 @@ static void TryDoEventsBeforeFirstTurn(void) { for (i = 0; i < gBattlersCount; i++) { - if (gBattleMons[i].hp == 0 || gBattleMons[i].species == SPECIES_NONE || GetMonData(GetBattlerPartyData(i), MON_DATA_IS_EGG)) + struct Pokemon *party = GetBattlerParty(i); + struct Pokemon *mon = &party[gBattlerPartyIndexes[i]]; + if (gBattleMons[i].hp == 0 || gBattleMons[i].species == SPECIES_NONE || GetMonData(mon, MON_DATA_IS_EGG)) gAbsentBattlerFlags |= gBitTable[i]; } } @@ -5033,7 +5035,8 @@ static void CheckMegaEvolutionBeforeTurn(void) if (gBattleStruct->mega.toEvolve & gBitTable[gActiveBattler] && !(gProtectStructs[gActiveBattler].noValidMoves)) { - struct Pokemon *mon = GetBattlerPartyData(gActiveBattler); + struct Pokemon *party = GetBattlerParty(gActiveBattler); + struct Pokemon *mon = &party[gBattlerPartyIndexes[gActiveBattler]]; gBattleStruct->mega.toEvolve &= ~(gBitTable[gActiveBattler]); gLastUsedItem = gBattleMons[gActiveBattler].item; diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index d313697b0a39..2a7e2916d766 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -6468,10 +6468,7 @@ bool32 CanBattlerSwitch(u32 battlerId) } else if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) { - if (GetBattlerSide(battlerId) == B_SIDE_OPPONENT) - party = gEnemyParty; - else - party = gPlayerParty; + party = GetBattlerParty(battlerId); lastMonId = 0; if (battlerId & 2) @@ -6512,10 +6509,7 @@ bool32 CanBattlerSwitch(u32 battlerId) } else { - if (GetBattlerSide(battlerId) == B_SIDE_OPPONENT) - party = gEnemyParty; - else - party = gPlayerParty; + party = GetBattlerParty(battlerId); lastMonId = 0; if (GetLinkTrainerFlankId(GetBattlerMultiplayerId(battlerId)) == TRUE) @@ -7669,10 +7663,7 @@ static void Cmd_drawpartystatussummary(void) gActiveBattler = GetBattlerForBattleScript(cmd->battler); - if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) - party = gPlayerParty; - else - party = gEnemyParty; + party = GetBattlerParty(gActiveBattler); for (i = 0; i < PARTY_SIZE; i++) { @@ -8746,7 +8737,8 @@ static bool32 CourtChangeSwapSideStatuses(void) static void HandleScriptMegaPrimal(u32 caseId, u32 battlerId, bool32 isMega) { - struct Pokemon *mon = GetBattlerPartyData(battlerId); + struct Pokemon *party = GetBattlerParty(battlerId); + struct Pokemon *mon = &party[gBattlerPartyIndexes[battlerId]]; u32 position = GetBattlerPosition(battlerId); u32 side = GET_BATTLER_SIDE(battlerId); @@ -8814,8 +8806,7 @@ static void HandleScriptMegaPrimal(u32 caseId, u32 battlerId, bool32 isMega) static bool32 CanTeleport(u8 battlerId) { - u8 side = GetBattlerSide(battlerId); - struct Pokemon *party = (side == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty; + struct Pokemon *party = GetBattlerParty(battlerId); u32 species, count, i; for (i = 0; i < PARTY_SIZE; i++) @@ -11242,7 +11233,7 @@ static void Cmd_various(void) // Battler selected! Revive and go to next instruction. if (gSelectedMonPartyId != PARTY_SIZE) { - struct Pokemon *party = (side == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty; + struct Pokemon *party = GetSideParty(side); u16 hp = GetMonData(&party[gSelectedMonPartyId], MON_DATA_MAX_HP) / 2; BtlController_EmitSetMonData(BUFFER_A, REQUEST_HP_BATTLE, gBitTable[gSelectedMonPartyId], sizeof(hp), &hp); @@ -12326,10 +12317,7 @@ static void Cmd_forcerandomswitch(void) || redCardForcedSwitch ) { - if (GetBattlerSide(gBattlerTarget) == B_SIDE_PLAYER) - party = gPlayerParty; - else - party = gEnemyParty; + party = GetBattlerParty(gBattlerTarget); if (BATTLE_TWO_VS_ONE_OPPONENT && GetBattlerSide(gBattlerTarget) == B_SIDE_OPPONENT) { @@ -13528,16 +13516,11 @@ static void Cmd_healpartystatus(void) if (gCurrentMove == MOVE_HEAL_BELL) { - struct Pokemon *party; + struct Pokemon *party = GetBattlerParty(gBattlerAttacker); s32 i; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_BELL; - if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) - party = gPlayerParty; - else - party = gEnemyParty; - if (GetBattlerAbility(gBattlerAttacker) != ABILITY_SOUNDPROOF) { gBattleMons[gBattlerAttacker].status1 = 0; @@ -14165,12 +14148,7 @@ static void Cmd_trydobeatup(void) gBattleStruct->beatUpSlot++; gBattlescriptCurrInstr = cmd->nextInstr; #else - struct Pokemon *party; - - if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) - party = gPlayerParty; - else - party = gEnemyParty; + struct Pokemon *party = GetBattlerParty(gBattlerAttacker); if (gBattleMons[gBattlerTarget].hp == 0) { @@ -14864,10 +14842,7 @@ static void Cmd_assistattackselect(void) if (validMoves != NULL) { - if (GET_BATTLER_SIDE(gBattlerAttacker) != B_SIDE_PLAYER) - party = gEnemyParty; - else - party = gPlayerParty; + party = GetBattlerParty(gBattlerAttacker); for (monId = 0; monId < PARTY_SIZE; monId++) { @@ -16396,7 +16371,7 @@ u8 GetFirstFaintedPartyIndex(u8 battlerId) u32 i; u32 start = 0; u32 end = PARTY_SIZE; - struct Pokemon *party = (GetBattlerSide(battlerId) == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty; + struct Pokemon *party = GetBattlerParty(battlerId); // Check whether partner is separate trainer. if ((GetBattlerSide(battlerId) == B_SIDE_PLAYER && gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) @@ -16435,7 +16410,7 @@ void BS_ItemRestoreHP(void) { u32 battlerId = MAX_BATTLERS_COUNT; u32 healParam = GetItemEffect(gLastUsedItem)[6]; u32 side = GetBattlerSide(gBattlerAttacker); - struct Pokemon *party = (side == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty; + struct Pokemon *party = GetSideParty(side); u16 hp = GetMonData(&party[gBattleStruct->itemPartyIndex[gBattlerAttacker]], MON_DATA_HP); u16 maxHP = GetMonData(&party[gBattleStruct->itemPartyIndex[gBattlerAttacker]], MON_DATA_MAX_HP); gBattleCommunication[MULTIUSE_STATE] = 0; @@ -16493,7 +16468,7 @@ void BS_ItemRestoreHP(void) { void BS_ItemCureStatus(void) { NATIVE_ARGS(); - struct Pokemon *party = (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty; + struct Pokemon *party = GetBattlerParty(gBattlerAttacker); // Heal Status1 conditions. HealStatusConditions(&party[gBattleStruct->itemPartyIndex[gBattlerAttacker]], gBattleStruct->itemPartyIndex[gBattlerAttacker], GetItemStatus1Mask(gLastUsedItem), gBattlerAttacker); diff --git a/src/battle_util.c b/src/battle_util.c index ac274bf0f833..0a4fd61a178c 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -225,14 +225,9 @@ static const u16 sEntrainmentTargetSimpleBeamBannedAbilities[] = static u8 CalcBeatUpPower(void) { - struct Pokemon *party; u8 basePower; u16 species; - - if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) - party = gPlayerParty; - else - party = gEnemyParty; + struct Pokemon *party = GetBattlerParty(gBattlerAttacker); // Party slot is incremented by the battle script for Beat Up after this damage calculation species = GetMonData(&party[gBattleStruct->beatUpSlot], MON_DATA_SPECIES); @@ -1988,7 +1983,7 @@ u8 GetImprisonedMovesCount(u8 battlerId, u16 move) u32 GetBattlerFriendshipScore(u8 battlerId) { u8 side = GetBattlerSide(battlerId); - struct Pokemon *party = (side == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty; + struct Pokemon *party = GetSideParty(side); u16 species = GetMonData(&party[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); if (side != B_SIDE_PLAYER) @@ -3747,14 +3742,9 @@ u8 AtkCanceller_UnableToUseMove(void) #if B_BEAT_UP >= GEN_5 else if (gBattleMoves[gCurrentMove].effect == EFFECT_BEAT_UP) { - struct Pokemon* party; + struct Pokemon* party = GetBattlerParty(gBattlerAttacker); int i; - if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) - party = gPlayerParty; - else - party = gEnemyParty; - for (i = 0; i < PARTY_SIZE; i++) { if (GetMonData(&party[i], MON_DATA_HP) @@ -3851,10 +3841,7 @@ bool8 HasNoMonsToSwitch(u8 battler, u8 partyIdBattlerOn1, u8 partyIdBattlerOn2) } else if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) { - if (GetBattlerSide(battler) == B_SIDE_PLAYER) - party = gPlayerParty; - else - party = gEnemyParty; + party = GetBattlerParty(battler); playerId = ((battler & BIT_FLANK) / 2); for (i = playerId * MULTI_PARTY_SIZE; i < playerId * MULTI_PARTY_SIZE + MULTI_PARTY_SIZE; i++) @@ -3888,12 +3875,7 @@ bool8 HasNoMonsToSwitch(u8 battler, u8 partyIdBattlerOn1, u8 partyIdBattlerOn2) else { flankId = GetBattlerMultiplayerId(battler); - - if (GetBattlerSide(battler) == B_SIDE_PLAYER) - party = gPlayerParty; - else - party = gEnemyParty; - + party = GetBattlerParty(battler); playerId = GetLinkTrainerFlankId(flankId); } @@ -4062,7 +4044,7 @@ static void ShouldChangeFormInWeather(u8 battler) { int i; int side = GetBattlerSide(battler); - struct Pokemon *party = (side == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty; + struct Pokemon *party = GetSideParty(side); for (i = 0; i < PARTY_SIZE; i++) { @@ -4253,8 +4235,7 @@ bool8 ChangeTypeBasedOnTerrain(u8 battlerId) static u16 GetSupremeOverlordModifier(u8 battlerId) { u32 i; - u8 side = GetBattlerSide(battlerId); - struct Pokemon *party = (side == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty; + struct Pokemon *party = GetBattlerParty(battlerId); u16 modifier = UQ_4_12(1.0); bool8 appliedFirstBoost = FALSE; @@ -7253,11 +7234,11 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn) case HOLD_EFFECT_RESTORE_PP: if (!moveTurn) { - struct Pokemon *mon; + struct Pokemon *party = GetBattlerParty(battlerId); + struct Pokemon *mon = &party[gBattlerPartyIndexes[battlerId]]; u8 ppBonuses; u16 move; - mon = GetBattlerPartyData(battlerId); for (i = 0; i < MAX_MON_MOVES; i++) { move = GetMonData(mon, MON_DATA_MOVE1 + i); @@ -10112,7 +10093,7 @@ void UndoMegaEvolution(u32 monId) void UndoFormChange(u32 monId, u32 side, bool32 isSwitchingOut) { u32 i, currSpecies, targetSpecies; - struct Pokemon *party = (side == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty; + struct Pokemon *party = GetSideParty(side); static const u16 species[][3] = { // Changed Form ID Default Form ID Should change on switch @@ -10247,10 +10228,7 @@ bool32 SetIllusionMon(struct Pokemon *mon, u32 battlerId) if (GetMonAbility(mon) != ABILITY_ILLUSION) return FALSE; - if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) - party = gPlayerParty; - else - party = gEnemyParty; + party = GetBattlerParty(battlerId); if (IsBattlerAlive(BATTLE_PARTNER(battlerId))) partnerMon = &party[gBattlerPartyIndexes[BATTLE_PARTNER(battlerId)]]; @@ -10375,17 +10353,6 @@ bool32 TestMoveFlags(u16 move, u32 flag) return FALSE; } -struct Pokemon *GetBattlerPartyData(u8 battlerId) -{ - struct Pokemon *mon; - if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) - mon = &gPlayerParty[gBattlerPartyIndexes[battlerId]]; - else - mon = &gEnemyParty[gBattlerPartyIndexes[battlerId]]; - - return mon; -} - static u8 GetFlingPowerFromItemId(u16 itemId) { if (itemId >= ITEM_TM01 && itemId <= ITEM_HM08) From d3a090020bb062d88c0c162bc62292e4debfcd95 Mon Sep 17 00:00:00 2001 From: AgustinGDLV Date: Sat, 15 Apr 2023 15:30:07 -0700 Subject: [PATCH 259/428] added code review --- data/battle_scripts_2.s | 1 - src/battle_message.c | 8 ++++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/data/battle_scripts_2.s b/data/battle_scripts_2.s index 71d88ae84b5f..9ffad7d84336 100644 --- a/data/battle_scripts_2.s +++ b/data/battle_scripts_2.s @@ -255,4 +255,3 @@ BattleScript_TrainerBSlideMsgRet:: BattleScript_TrainerBSlideMsgEnd2:: call BattleScript_TrainerBSlideMsgRet end2 - end2 diff --git a/src/battle_message.c b/src/battle_message.c index 7d10b19f11c7..640e7900da93 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -465,7 +465,7 @@ const u8 *const gPokeblockWasTooXStringTable[FLAVOR_COUNT] = [FLAVOR_SOUR] = sText_PokeblockWasTooSour }; -static const u8 sText_PlayerUsedItem[] = _("{B_PLAYER_NAME} used\n{B_LAST_ITEM}!"); +static const u8 sText_PlayerUsedItem[] = _("You used\n{B_LAST_ITEM}!"); static const u8 sText_WallyUsedItem[] = _("WALLY used\n{B_LAST_ITEM}!"); static const u8 sText_Trainer1UsedItem[] = _("{B_ATK_TRAINER_CLASS} {B_ATK_TRAINER_NAME}\nused {B_LAST_ITEM}!"); static const u8 sText_TrainerBlockedBall[] = _("The TRAINER blocked the BALL!"); @@ -783,9 +783,9 @@ static const u8 sText_ShellTrapDidntWork[] = _("{B_ATK_NAME_WITH_PREFIX}'s shell static const u8 sText_CouldntFullyProtect[] = _("{B_DEF_NAME_WITH_PREFIX} couldn't fully protect\nitself and got hurt!"); static const u8 sText_StockpiledEffectWoreOff[] = _("{B_ATK_NAME_WITH_PREFIX}'s stockpiled\neffect wore off!"); static const u8 sText_PkmnRevivedReadyToFight[] = _("{B_BUFF1} was revived and\nis ready to fight again!"); -static const u8 sText_ItemRestoredSpeciesHealth[] = _("{B_LAST_ITEM} restored\n{B_BUFF1}'s health!"); -static const u8 sText_ItemCuredSpeciesStatus[] = _("{B_LAST_ITEM} cured\n{B_BUFF1}'s status!"); -static const u8 sText_ItemRestoredSpeciesPP[] = _("{B_LAST_ITEM} restored\n{B_BUFF1}'s PP!"); +static const u8 sText_ItemRestoredSpeciesHealth[] = _("{B_BUFF1} had its\nHP restored!"); +static const u8 sText_ItemCuredSpeciesStatus[] = _("{B_BUFF1} had\nits status healed!"); +static const u8 sText_ItemRestoredSpeciesPP[] = _("{B_BUFF1} had its\nPP restored!"); const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = { From 7d4807d956c391e480c2be39afbeb4117ba431da Mon Sep 17 00:00:00 2001 From: CallmeEchoo <65783283+CallmeEchoo@users.noreply.github.com> Date: Sun, 16 Apr 2023 13:11:49 +0200 Subject: [PATCH 260/428] fix nightmare status only being healed in doubles this came up in a conversation on discord. its not tested. --- src/battle_script_commands.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index d313697b0a39..dcfaf0da4d9d 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -16506,10 +16506,11 @@ void BS_ItemCureStatus(void) { { gBattleMons[gBattlerAttacker].status2 &= ~GetItemStatus2Mask(gLastUsedItem); gBattlerTarget = BATTLE_PARTNER(gBattlerAttacker); - if (GetItemStatus1Mask(gLastUsedItem) & STATUS1_SLEEP) - gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_NIGHTMARE; } + if (GetItemStatus1Mask(gLastUsedItem) & STATUS1_SLEEP) + gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_NIGHTMARE; + PREPARE_SPECIES_BUFFER(gBattleTextBuff1, GetMonData(&party[gBattleStruct->itemPartyIndex[gBattlerAttacker]], MON_DATA_SPECIES)); gBattlescriptCurrInstr = cmd->nextInstr; } From 73ba8264e0f6d9a4e98f9ef3ded2c527c3f6ab5d Mon Sep 17 00:00:00 2001 From: Jaizu Date: Sun, 16 Apr 2023 21:34:07 +0200 Subject: [PATCH 261/428] Fix Rare Candies --- src/party_menu.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/party_menu.c b/src/party_menu.c index dd46b106347d..a7ab305450e5 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -4948,7 +4948,7 @@ static void TryUseItemOnMove(u8 taskId) DisplayPartyMenuMessage(gStringVar4, TRUE); ScheduleBgCopyTilemapToVram(2); gTasks[taskId].func = Task_ClosePartyMenuAfterText; - } + } } // Outside of battle, only PP items are used on moves. else @@ -5290,7 +5290,7 @@ void ItemUseCB_RareCandy(u8 taskId, TaskFunc task) if (sInitialLevel != MAX_LEVEL) { BufferMonStatsToTaskData(mon, arrayPtr); - cannotUseEffect = ExecuteTableBasedItemEffect(mon, gPartyMenu.slotId, *itemPtr, 0); + cannotUseEffect = ExecuteTableBasedItemEffect(mon, *itemPtr, gPartyMenu.slotId, 0); BufferMonStatsToTaskData(mon, &ptr->data[NUM_STATS]); } else From efd7465c12a2ab52335bb0a90f1c6325f5af1aba Mon Sep 17 00:00:00 2001 From: CallmeEchoo Date: Mon, 17 Apr 2023 13:34:11 +0200 Subject: [PATCH 262/428] fix gBattleMons using party indices instead of battle indices --- src/battle_script_commands.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index dcfaf0da4d9d..4e1494ce3828 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -16500,7 +16500,9 @@ void BS_ItemCureStatus(void) { // Heal Status2 conditions if battler is active. if (gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[gBattlerAttacker]) - gBattleMons[gBattleStruct->itemPartyIndex[gBattlerAttacker]].status2 &= ~GetItemStatus2Mask(gLastUsedItem); + { + gBattleMons[gBattlerAttacker].status2 &= ~GetItemStatus2Mask(gLastUsedItem); + } else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerAttacker)]) { From 0531ab5d87ecdc959a331535719fabe180cddd81 Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 17 Apr 2023 18:47:54 +0200 Subject: [PATCH 263/428] Fix Ability PopUp freeze --- data/battle_scripts_1.s | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 4848b732270a..91bc37f76faa 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -5612,7 +5612,7 @@ BattleScript_EffectStockpileSpDef:: BattleScript_EffectStockpileEnd: stockpile 1 goto BattleScript_MoveEnd - + BattleScript_MoveEffectStockpileWoreOff:: .if B_STOCKPILE_RAISES_DEFS >= GEN_4 dostockpilestatchangeswearoff BS_ATTACKER, BattleScript_StockpileStatChangeDown @@ -5620,7 +5620,7 @@ BattleScript_MoveEffectStockpileWoreOff:: waitmessage B_WAIT_TIME_SHORT .endif return - + BattleScript_StockpileStatChangeDown: statbuffchange MOVE_EFFECT_AFFECTS_USER, BattleScript_StockpileStatChangeDown_Ret setgraphicalstatchangevalues @@ -6943,7 +6943,7 @@ BattleScript_MagicRoomEnds:: printstring STRINGID_MAGICROOMENDS waitmessage B_WAIT_TIME_LONG end2 - + BattleScript_GrassyTerrainEnds: setbyte cMULTISTRING_CHOOSER, B_MSG_TERRAINENDS_GRASS BattleScript_TerrainEnds_Ret:: @@ -6951,7 +6951,7 @@ BattleScript_TerrainEnds_Ret:: waitmessage B_WAIT_TIME_LONG playanimation BS_ATTACKER, B_ANIM_RESTORE_BG return - + BattleScript_TerrainEnds:: call BattleScript_TerrainEnds_Ret end2 @@ -7496,7 +7496,7 @@ BattleScript_StealthRockFree:: printstring STRINGID_PKMNBLEWAWAYSTEALTHROCK waitmessage B_WAIT_TIME_LONG return - + BattleScript_SpikesDefog:: printstring STRINGID_SPIKESDISAPPEAREDFROMTEAM waitmessage B_WAIT_TIME_LONG @@ -9181,6 +9181,7 @@ BattleScript_WanderingSpiritActivates:: destroyabilitypopup pause 40 + copybyte gBattlerAbility, gBattlerAttacker setbyte sFIXED_ABILITY_POPUP, TRUE copyhword sABILITY_OVERWRITE, gLastUsedAbility showabilitypopup BS_ATTACKER From 60c88d8fccb0c0fa3b1a44273b7210f228412a26 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Mon, 17 Apr 2023 19:12:39 +0200 Subject: [PATCH 264/428] Update data/battle_scripts_1.s Co-authored-by: Eduardo Quezada D'Ottone --- data/battle_scripts_1.s | 1 - 1 file changed, 1 deletion(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 91bc37f76faa..0be893412761 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -9180,7 +9180,6 @@ BattleScript_WanderingSpiritActivates:: pause 20 destroyabilitypopup pause 40 - copybyte gBattlerAbility, gBattlerAttacker setbyte sFIXED_ABILITY_POPUP, TRUE copyhword sABILITY_OVERWRITE, gLastUsedAbility From 9d93af2261101aee307ca6cc82c4c04dec36ab74 Mon Sep 17 00:00:00 2001 From: Frank DeBlasio <35279583+fdeblasio@users.noreply.github.com> Date: Tue, 18 Apr 2023 16:28:02 -0400 Subject: [PATCH 265/428] Fixed Budew evolution method (#2928) --- src/data/pokemon/evolution.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/pokemon/evolution.h b/src/data/pokemon/evolution.h index 6ec3c0a14c11..f222148178a5 100644 --- a/src/data/pokemon/evolution.h +++ b/src/data/pokemon/evolution.h @@ -316,7 +316,7 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] = [SPECIES_KRICKETOT] = {{EVO_LEVEL, 10, SPECIES_KRICKETUNE}}, [SPECIES_SHINX] = {{EVO_LEVEL, 15, SPECIES_LUXIO}}, [SPECIES_LUXIO] = {{EVO_LEVEL, 30, SPECIES_LUXRAY}}, - [SPECIES_BUDEW] = {{EVO_FRIENDSHIP, 0, SPECIES_ROSELIA}}, + [SPECIES_BUDEW] = {{EVO_FRIENDSHIP_DAY, 0, SPECIES_ROSELIA}}, [SPECIES_CRANIDOS] = {{EVO_LEVEL, 30, SPECIES_RAMPARDOS}}, [SPECIES_SHIELDON] = {{EVO_LEVEL, 30, SPECIES_BASTIODON}}, [SPECIES_BURMY] = {{EVO_LEVEL_FEMALE, 20, SPECIES_WORMADAM}, From 76d0d8a94eeab0aa2e0943ab5581c31cb893462a Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Tue, 18 Apr 2023 23:02:51 +0200 Subject: [PATCH 266/428] Fix battle message strings for stats (#2927) * Fix battle message strings for stats --- include/config/battle.h | 4 ++-- src/battle_message.c | 12 ++++++------ src/pokemon.c | 4 ++-- test/ability_contrary.c | 18 +++++++++--------- test/ability_download.c | 12 ++++++------ test/ability_intimidate.c | 2 +- test/ability_magic_bounce.c | 6 +++--- test/ability_oblivious.c | 2 +- test/ability_speed_boost.c | 2 +- test/ability_volt_absorb.c | 2 +- test/item_effect_increase_stat.c | 2 +- test/move.c | 4 ++-- test/move_effect_attack_down.c | 2 +- test/move_effect_attack_up.c | 2 +- test/move_effect_attack_up_user_ally.c | 6 +++--- test/move_effect_defense_down.c | 2 +- test/move_effect_defense_up.c | 2 +- test/move_effect_defog.c | 4 ++-- test/move_effect_special_attack_down.c | 2 +- test/move_effect_special_attack_up_3.c | 2 +- test/move_effect_stockpile.c | 20 ++++++++++---------- test/status1.c | 4 ++-- test/terrain_electric.c | 2 +- test/terrain_grassy.c | 2 +- test/terrain_misty.c | 2 +- test/terrain_psychic.c | 2 +- 26 files changed, 62 insertions(+), 62 deletions(-) diff --git a/include/config/battle.h b/include/config/battle.h index 24f4ad4f1579..ad3162162320 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -98,7 +98,7 @@ #define B_HEALING_WISH_SWITCH GEN_LATEST // In Gen5+, the mon receiving Healing Wish is sent out at the end of the turn. // Additionally, in gen8+ the Healing Wish's effect will be stored until the user switches into a statused or hurt mon. #define B_DEFOG_CLEARS_TERRAIN GEN_LATEST // In Gen8+, Defog also clears active Terrain. -#define B_STOCKPILE_RAISES_DEFS GEN_LATEST // In Gen4+, Stockpile also raises Defense and Sp.Defense stats. Once Spit Up / Swallow is used, these stat changes are lost. +#define B_STOCKPILE_RAISES_DEFS GEN_LATEST // In Gen4+, Stockpile also raises Defense and Sp. Defense stats. Once Spit Up / Swallow is used, these stat changes are lost. // Ability settings #define B_EXPANDED_ABILITY_NAMES TRUE // If TRUE, ability names are increased from 12 characters to 16 characters. @@ -183,7 +183,7 @@ // Other settings #define B_DOUBLE_WILD_CHANCE 0 // % chance of encountering two Pokémon in a Wild Encounter. -#define B_DOUBLE_WILD_REQUIRE_2_MONS FALSE // If set to TRUE, Wild Double Battles will default to Single Battles when the player only has 1 usuable Pokémon, ignoring B_DOUBLE_WILD_CHANCE and B_FLAG_FORCE_DOUBLE_WILD. +#define B_DOUBLE_WILD_REQUIRE_2_MONS FALSE // If set to TRUE, Wild Double Battles will default to Single Battles when the player only has 1 usuable Pokémon, ignoring B_DOUBLE_WILD_CHANCE and B_FLAG_FORCE_DOUBLE_WILD. #define B_MULTI_BATTLE_WHITEOUT GEN_LATEST // In Gen4+, multi battles end when the Player and also their Partner don't have any more Pokémon to fight. #define B_EVOLUTION_AFTER_WHITEOUT GEN_LATEST // In Gen6+, Pokemon that qualify for evolution after battle will evolve even if the player loses. #define B_WILD_NATURAL_ENEMIES TRUE // If set to TRUE, certain wild mon species will attack other species when partnered in double wild battles (eg. Zangoose vs Seviper) diff --git a/src/battle_message.c b/src/battle_message.c index 7d10b19f11c7..7df30cb296bb 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -435,11 +435,11 @@ static const u8 sText_ExclamationMark3[] = _("!"); static const u8 sText_ExclamationMark4[] = _("!"); static const u8 sText_ExclamationMark5[] = _("!"); static const u8 sText_HP[] = _("HP"); -static const u8 sText_Attack[] = _("attack"); -static const u8 sText_Defense[] = _("defense"); -static const u8 sText_Speed[] = _("speed"); -static const u8 sText_SpAttack[] = _("sp. attack"); -static const u8 sText_SpDefense[] = _("sp. defense"); +static const u8 sText_Attack[] = _("Attack"); +static const u8 sText_Defense[] = _("Defense"); +static const u8 sText_Speed[] = _("Speed"); +static const u8 sText_SpAttack[] = _("Sp. Atk"); +static const u8 sText_SpDefense[] = _("Sp. Def"); static const u8 sText_Accuracy[] = _("accuracy"); static const u8 sText_Evasiveness[] = _("evasiveness"); @@ -555,7 +555,7 @@ static const u8 sText_VanishedInstantly[] =_("{B_ATK_NAME_WITH_PREFIX} vanished\ static const u8 sText_ProtectedTeam[] =_("{B_CURRENT_MOVE} protected\n{B_ATK_TEAM2} team!"); static const u8 sText_SharedItsGuard[] =_("{B_ATK_NAME_WITH_PREFIX} shared its\nguard with the target!"); static const u8 sText_SharedItsPower[] =_("{B_ATK_NAME_WITH_PREFIX} shared its\npower with the target!"); -static const u8 sText_SwapsDefAndSpDefOfAllPkmn[] =_("It created a bizarre area in which the\nDefense and Sp.Def stats are swapped!"); +static const u8 sText_SwapsDefAndSpDefOfAllPkmn[] =_("It created a bizarre area in which the\nDefense and Sp. Def stats are swapped!"); static const u8 sText_BecameNimble[] =_("{B_ATK_NAME_WITH_PREFIX} became nimble!"); static const u8 sText_HurledIntoTheAir[] =_("{B_DEF_NAME_WITH_PREFIX} was hurled\ninto the air!"); static const u8 sText_HeldItemsLoseEffects[] =_("It created a bizarre area in which\nPokémon's held items lose their effects!"); diff --git a/src/pokemon.c b/src/pokemon.c index d985ef95d39b..46eca90b29b8 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -1919,7 +1919,7 @@ const struct SpindaSpot gSpindaSpotGraphics[] = #include "data/pokemon/item_effects.h" const s8 gNatureStatTable[NUM_NATURES][NUM_NATURE_STATS] = -{ // Attack Defense Speed Sp.Atk Sp.Def +{ // Attack Defense Speed Sp.Atk Sp. Def [NATURE_HARDY] = { 0, 0, 0, 0, 0 }, [NATURE_LONELY] = { +1, -1, 0, 0, 0 }, [NATURE_BRAVE] = { +1, 0, -1, 0, 0 }, @@ -6626,7 +6626,7 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 mode, u16 evolutionItem, s RtcCalcLocalTime(); if (gLocalTime.hours >= 0 && gLocalTime.hours < 12 && gEvolutionTable[species][i].param == evolutionItem) targetSpecies = gEvolutionTable[species][i].targetSpecies; - break; + break; } } break; diff --git a/test/ability_contrary.c b/test/ability_contrary.c index 7fd902280bb4..33cfa7ce870d 100644 --- a/test/ability_contrary.c +++ b/test/ability_contrary.c @@ -21,7 +21,7 @@ SINGLE_BATTLE_TEST("Contrary raises Attack when Intimidated", s16 damage) if (ability == ABILITY_CONTRARY) { ABILITY_POPUP(opponent, ABILITY_CONTRARY); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Spinda's attack rose!"); + MESSAGE("Foe Spinda's Attack rose!"); } HP_BAR(player, captureDamage: &results[i].damage); } @@ -49,11 +49,11 @@ SINGLE_BATTLE_TEST("Contrary raises stats after using a move which would normall if (ability == ABILITY_CONTRARY) { // ABILITY_POPUP(opponent, ABILITY_CONTRARY); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Spinda's sp. attack sharply rose!"); + MESSAGE("Foe Spinda's Sp. Atk sharply rose!"); } else { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Spinda's sp. attack harshly fell!"); + MESSAGE("Foe Spinda's Sp. Atk harshly fell!"); } // MESSAGE("Foe Spinda used Overheat!"); @@ -61,11 +61,11 @@ SINGLE_BATTLE_TEST("Contrary raises stats after using a move which would normall if (ability == ABILITY_CONTRARY) { // ABILITY_POPUP(opponent, ABILITY_CONTRARY); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Spinda's sp. attack sharply rose!"); + MESSAGE("Foe Spinda's Sp. Atk sharply rose!"); } else { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Spinda's sp. attack harshly fell!"); + MESSAGE("Foe Spinda's Sp. Atk harshly fell!"); } } FINALLY { @@ -95,11 +95,11 @@ SINGLE_BATTLE_TEST("Contrary lowers a stat after using a move which would normal if (ability == ABILITY_CONTRARY) { // ABILITY_POPUP(opponent, ABILITY_CONTRARY); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Spinda's attack harshly fell!"); + MESSAGE("Foe Spinda's Attack harshly fell!"); } else { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Spinda's attack sharply rose!"); + MESSAGE("Foe Spinda's Attack sharply rose!"); } // MESSAGE("Foe Spinda used Tackle!"); @@ -127,11 +127,11 @@ SINGLE_BATTLE_TEST("Contrary raises a stat after using a move which would normal if (ability == ABILITY_CONTRARY) { // ABILITY_POPUP(opponent, ABILITY_CONTRARY); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Spinda's attack rose!"); + MESSAGE("Foe Spinda's Attack rose!"); } else { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Spinda's attack fell!"); + MESSAGE("Foe Spinda's Attack fell!"); } MESSAGE("Foe Spinda used Tackle!"); diff --git a/test/ability_download.c b/test/ability_download.c index 132c0eb5baa9..d83d90196e00 100644 --- a/test/ability_download.c +++ b/test/ability_download.c @@ -7,7 +7,7 @@ ASSUMPTIONS ASSUME(gBattleMoves[MOVE_TRI_ATTACK].split == SPLIT_SPECIAL); } -SINGLE_BATTLE_TEST("Download raises Attack if player has lower Def than Sp.Def", s16 damage) +SINGLE_BATTLE_TEST("Download raises Attack if player has lower Def than Sp. Def", s16 damage) { u32 ability; PARAMETRIZE { ability = ABILITY_TRACE; } @@ -22,7 +22,7 @@ SINGLE_BATTLE_TEST("Download raises Attack if player has lower Def than Sp.Def", { ABILITY_POPUP(opponent, ABILITY_DOWNLOAD); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Porygon's Download raised its attack!"); + MESSAGE("Foe Porygon's Download raised its Attack!"); } HP_BAR(player, captureDamage: &results[i].damage); } FINALLY { @@ -30,7 +30,7 @@ SINGLE_BATTLE_TEST("Download raises Attack if player has lower Def than Sp.Def", } } -SINGLE_BATTLE_TEST("Download raises Sp.Attack if enemy has lower Sp.Def than Def", s16 damage) +SINGLE_BATTLE_TEST("Download raises Sp.Attack if enemy has lower Sp. Def than Def", s16 damage) { u32 ability; PARAMETRIZE { ability = ABILITY_TRACE; } @@ -45,7 +45,7 @@ SINGLE_BATTLE_TEST("Download raises Sp.Attack if enemy has lower Sp.Def than Def { ABILITY_POPUP(player, ABILITY_DOWNLOAD); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - MESSAGE("Porygon's Download raised its sp. attack!"); + MESSAGE("Porygon's Download raised its Sp. Atk!"); } HP_BAR(opponent, captureDamage: &results[i].damage); } FINALLY { @@ -79,10 +79,10 @@ SINGLE_BATTLE_TEST("Download doesn't activate if target hasn't been sent out yet { ABILITY_POPUP(player, ABILITY_DOWNLOAD); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - MESSAGE("Porygon's Download raised its attack!"); + MESSAGE("Porygon's Download raised its Attack!"); ABILITY_POPUP(opponent, ABILITY_DOWNLOAD); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Porygon2's Download raised its sp. attack!"); + MESSAGE("Foe Porygon2's Download raised its Sp. Atk!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); HP_BAR(opponent, captureDamage: &results[i].damagePhysical); diff --git a/test/ability_intimidate.c b/test/ability_intimidate.c index a891f9af87e6..40804cbb197b 100644 --- a/test/ability_intimidate.c +++ b/test/ability_intimidate.c @@ -104,7 +104,7 @@ SINGLE_BATTLE_TEST("Intimidate and Eject Button force the opponent to Attack") OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_EJECT_BUTTON); }; OPPONENT(SPECIES_HITMONTOP) { Moves(MOVE_TACKLE); }; } WHEN { - TURN { + TURN { MOVE(player, MOVE_QUICK_ATTACK); MOVE(opponent, MOVE_TACKLE); SEND_OUT(opponent, 1); diff --git a/test/ability_magic_bounce.c b/test/ability_magic_bounce.c index d52b93c4a54b..848f632ab590 100644 --- a/test/ability_magic_bounce.c +++ b/test/ability_magic_bounce.c @@ -74,11 +74,11 @@ DOUBLE_BATTLE_TEST("Magic Bounce bounces back moves hitting both foes at two foe MESSAGE("Abra's Leer was bounced back by Foe Espeon's Magic Bounce!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_LEER, opponentLeft); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); - MESSAGE("Abra's defense fell!"); + MESSAGE("Abra's Defense fell!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); - MESSAGE("Kadabra's defense fell!"); + MESSAGE("Kadabra's Defense fell!"); // Also check if second original target gets hit by Leer as this was once bugged ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); - MESSAGE("Foe Wynaut's defense fell!"); + MESSAGE("Foe Wynaut's Defense fell!"); } } diff --git a/test/ability_oblivious.c b/test/ability_oblivious.c index 0708845ed167..efe2901ecad3 100644 --- a/test/ability_oblivious.c +++ b/test/ability_oblivious.c @@ -63,6 +63,6 @@ SINGLE_BATTLE_TEST("Oblivious prevents Intimidate") ABILITY_POPUP(opponent, ABILITY_INTIMIDATE); ABILITY_POPUP(player, ABILITY_OBLIVIOUS); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); } - MESSAGE("Slowpoke's attack was not lowered!"); + MESSAGE("Slowpoke's Attack was not lowered!"); } } diff --git a/test/ability_speed_boost.c b/test/ability_speed_boost.c index b3e128931a32..39219a5cc7bb 100644 --- a/test/ability_speed_boost.c +++ b/test/ability_speed_boost.c @@ -1,7 +1,7 @@ #include "global.h" #include "test_battle.h" -SINGLE_BATTLE_TEST("Speed Boost gradually boosts speed") +SINGLE_BATTLE_TEST("Speed Boost gradually boosts Speed") { GIVEN { PLAYER(SPECIES_TORCHIC) { Ability(ABILITY_SPEED_BOOST); Speed(99); }; diff --git a/test/ability_volt_absorb.c b/test/ability_volt_absorb.c index bef35e2b4b00..18902eaa20c9 100644 --- a/test/ability_volt_absorb.c +++ b/test/ability_volt_absorb.c @@ -102,7 +102,7 @@ SINGLE_BATTLE_TEST("Volt Absorb prevents Cell Battery from activating") NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - MESSAGE("Using Cell Battery, the attack of Jolteon rose!"); + MESSAGE("Using Cell Battery, the Attack of Jolteon rose!"); } } diff --git a/test/item_effect_increase_stat.c b/test/item_effect_increase_stat.c index 70c89bdd4e55..b459e3ac88fe 100644 --- a/test/item_effect_increase_stat.c +++ b/test/item_effect_increase_stat.c @@ -1,7 +1,7 @@ #include "global.h" #include "test_battle.h" -SINGLE_BATTLE_TEST("X-Attack sharply raises battler's attack stat", s16 damage) +SINGLE_BATTLE_TEST("X-Attack sharply raises battler's Attack stat", s16 damage) { u16 useItem; PARAMETRIZE { useItem = FALSE; } diff --git a/test/move.c b/test/move.c index 9ad336330f27..9e23c2bd0098 100644 --- a/test/move.c +++ b/test/move.c @@ -54,7 +54,7 @@ SINGLE_BATTLE_TEST("Turn order is determined by priority") } } -SINGLE_BATTLE_TEST("Turn order is determined by speed if priority ties") +SINGLE_BATTLE_TEST("Turn order is determined by Speed if priority ties") { GIVEN { PLAYER(SPECIES_WOBBUFFET) { Speed(2); } @@ -67,7 +67,7 @@ SINGLE_BATTLE_TEST("Turn order is determined by speed if priority ties") } } -SINGLE_BATTLE_TEST("Turn order is determined randomly if priority and speed tie") +SINGLE_BATTLE_TEST("Turn order is determined randomly if priority and Speed tie") { KNOWN_FAILING; // The algorithm is significantly biased. PASSES_RANDOMLY(1, 2); diff --git a/test/move_effect_attack_down.c b/test/move_effect_attack_down.c index 6333bbea1f0e..0df14f701a94 100644 --- a/test/move_effect_attack_down.c +++ b/test/move_effect_attack_down.c @@ -22,7 +22,7 @@ SINGLE_BATTLE_TEST("Growl lowers Attack", s16 damage) if (lowerAttack) { ANIMATION(ANIM_TYPE_MOVE, MOVE_GROWL, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's attack fell!"); + MESSAGE("Foe Wobbuffet's Attack fell!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); HP_BAR(player, captureDamage: &results[i].damage); diff --git a/test/move_effect_attack_up.c b/test/move_effect_attack_up.c index 7b57fa0d2680..4978d03f9651 100644 --- a/test/move_effect_attack_up.c +++ b/test/move_effect_attack_up.c @@ -22,7 +22,7 @@ SINGLE_BATTLE_TEST("Meditate raises Attack", s16 damage) if (raiseAttack) { ANIMATION(ANIM_TYPE_MOVE, MOVE_MEDITATE, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - MESSAGE("Wobbuffet's attack rose!"); + MESSAGE("Wobbuffet's Attack rose!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); HP_BAR(opponent, captureDamage: &results[i].damage); diff --git a/test/move_effect_attack_up_user_ally.c b/test/move_effect_attack_up_user_ally.c index e98df30d8ed8..e920752dec91 100644 --- a/test/move_effect_attack_up_user_ally.c +++ b/test/move_effect_attack_up_user_ally.c @@ -22,7 +22,7 @@ SINGLE_BATTLE_TEST("Howl raises user's Attack", s16 damage) if (raiseAttack) { ANIMATION(ANIM_TYPE_MOVE, MOVE_HOWL, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - MESSAGE("Wobbuffet's attack rose!"); + MESSAGE("Wobbuffet's Attack rose!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); HP_BAR(opponent, captureDamage: &results[i].damage); @@ -50,9 +50,9 @@ DOUBLE_BATTLE_TEST("Howl raises user's and partner's Attack", s16 damageLeft, s1 if (raiseAttack) { ANIMATION(ANIM_TYPE_MOVE, MOVE_HOWL, playerLeft); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); - MESSAGE("Wobbuffet's attack rose!"); + MESSAGE("Wobbuffet's Attack rose!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); - MESSAGE("Wynaut's attack rose!"); + MESSAGE("Wynaut's Attack rose!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, playerLeft); HP_BAR(opponentLeft, captureDamage: &results[i].damageLeft); diff --git a/test/move_effect_defense_down.c b/test/move_effect_defense_down.c index 6e5a45e8480c..9ecd1c25f2e8 100644 --- a/test/move_effect_defense_down.c +++ b/test/move_effect_defense_down.c @@ -22,7 +22,7 @@ SINGLE_BATTLE_TEST("Tail Whip lowers Defense", s16 damage) if (lowerDefense) { ANIMATION(ANIM_TYPE_MOVE, MOVE_TAIL_WHIP, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's defense fell!"); + MESSAGE("Foe Wobbuffet's Defense fell!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); HP_BAR(opponent, captureDamage: &results[i].damage); diff --git a/test/move_effect_defense_up.c b/test/move_effect_defense_up.c index 8db9a7f7e485..492ce7bc9364 100644 --- a/test/move_effect_defense_up.c +++ b/test/move_effect_defense_up.c @@ -22,7 +22,7 @@ SINGLE_BATTLE_TEST("Harden raises Defense", s16 damage) if (raiseDefense) { ANIMATION(ANIM_TYPE_MOVE, MOVE_HARDEN, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - MESSAGE("Wobbuffet's defense rose!"); + MESSAGE("Wobbuffet's Defense rose!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); HP_BAR(player, captureDamage: &results[i].damage); diff --git a/test/move_effect_defog.c b/test/move_effect_defog.c index e9e55d57fed2..751ddf60f6ef 100644 --- a/test/move_effect_defog.c +++ b/test/move_effect_defog.c @@ -165,7 +165,7 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Stealth Rock and S MESSAGE("Pointed stones dug into Wobbuffet!"); MESSAGE("Wobbuffet was caught in a Sticky Web!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); - MESSAGE("Wobbuffet's speed fell!"); + MESSAGE("Wobbuffet's Speed fell!"); } else { NONE_OF { @@ -173,7 +173,7 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Stealth Rock and S MESSAGE("Pointed stones dug into Wobbuffet!"); MESSAGE("Wobbuffet was caught in a Sticky Web!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); - MESSAGE("Wobbuffet's speed fell!"); + MESSAGE("Wobbuffet's Speed fell!"); } } } diff --git a/test/move_effect_special_attack_down.c b/test/move_effect_special_attack_down.c index a20b8558e712..0511692d468c 100644 --- a/test/move_effect_special_attack_down.c +++ b/test/move_effect_special_attack_down.c @@ -22,7 +22,7 @@ SINGLE_BATTLE_TEST("Confide lowers Special Attack", s16 damage) if (lowerSpecialAttack) { ANIMATION(ANIM_TYPE_MOVE, MOVE_CONFIDE, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's sp. attack fell!"); + MESSAGE("Foe Wobbuffet's Sp. Atk fell!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_GUST, opponent); HP_BAR(player, captureDamage: &results[i].damage); diff --git a/test/move_effect_special_attack_up_3.c b/test/move_effect_special_attack_up_3.c index f7e7e11d14a3..ad53bedb9e54 100644 --- a/test/move_effect_special_attack_up_3.c +++ b/test/move_effect_special_attack_up_3.c @@ -22,7 +22,7 @@ SINGLE_BATTLE_TEST("Tail Glow drastically raises Special Attack", s16 damage) if (raiseSpecialAttack) { ANIMATION(ANIM_TYPE_MOVE, MOVE_TAIL_GLOW, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - MESSAGE("Wobbuffet's sp. attack drastically rose!"); + MESSAGE("Wobbuffet's Sp. Atk drastically rose!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_GUST, player); HP_BAR(opponent, captureDamage: &results[i].damage); diff --git a/test/move_effect_stockpile.c b/test/move_effect_stockpile.c index 0530355efbe5..bd0d3a113db9 100644 --- a/test/move_effect_stockpile.c +++ b/test/move_effect_stockpile.c @@ -142,7 +142,7 @@ SINGLE_BATTLE_TEST("Swallow heals HP depending on Stockpile's count", s16 hpHeal } } -SINGLE_BATTLE_TEST("Stockpile temporarily raises Def and Sp.Def", s16 dmgPyhsical, s16 dmgSpecial) +SINGLE_BATTLE_TEST("Stockpile temporarily raises Def and Sp. Def", s16 dmgPyhsical, s16 dmgSpecial) { u16 move; PARAMETRIZE {move = MOVE_STOCKPILE;} @@ -161,8 +161,8 @@ SINGLE_BATTLE_TEST("Stockpile temporarily raises Def and Sp.Def", s16 dmgPyhsica if (move == MOVE_STOCKPILE) { MESSAGE("Wobbuffet stockpiled 1!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - MESSAGE("Wobbuffet's defense rose!"); - MESSAGE("Wobbuffet's sp. defense rose!"); + MESSAGE("Wobbuffet's Defense rose!"); + MESSAGE("Wobbuffet's Sp. Def rose!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); @@ -176,7 +176,7 @@ SINGLE_BATTLE_TEST("Stockpile temporarily raises Def and Sp.Def", s16 dmgPyhsica } } -DOUBLE_BATTLE_TEST("Stockpile's Def and Sp.Def boost is lost after using Spit Up or Swallow", s16 dmgPyhsicalBefore, s16 dmgPhysicalAfter, s16 dmgSpecialBefore, s16 dmgSpecialAfter) +DOUBLE_BATTLE_TEST("Stockpile's Def and Sp. Def boost is lost after using Spit Up or Swallow", s16 dmgPyhsicalBefore, s16 dmgPhysicalAfter, s16 dmgSpecialBefore, s16 dmgSpecialAfter) { u8 count; u16 move; @@ -217,24 +217,24 @@ DOUBLE_BATTLE_TEST("Stockpile's Def and Sp.Def boost is lost after using Spit Up ANIMATION(ANIM_TYPE_MOVE, move, playerLeft); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); if (count == 1) { - MESSAGE("Wobbuffet's defense fell!"); + MESSAGE("Wobbuffet's Defense fell!"); } else if (count == 2) { - MESSAGE("Wobbuffet's defense harshly fell!"); + MESSAGE("Wobbuffet's Defense harshly fell!"); } else { - MESSAGE("Wobbuffet's defense severely fell!"); + MESSAGE("Wobbuffet's Defense severely fell!"); } ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); if (count == 1) { - MESSAGE("Wobbuffet's sp. defense fell!"); + MESSAGE("Wobbuffet's Sp. Def fell!"); } else if (count == 2) { - MESSAGE("Wobbuffet's sp. defense harshly fell!"); + MESSAGE("Wobbuffet's Sp. Def harshly fell!"); } else { - MESSAGE("Wobbuffet's sp. defense severely fell!"); + MESSAGE("Wobbuffet's Sp. Def severely fell!"); } MESSAGE("Wobbuffet's stockpiled effect wore off!"); diff --git a/test/status1.c b/test/status1.c index f4d3c7d94495..c244b9a604aa 100644 --- a/test/status1.c +++ b/test/status1.c @@ -53,7 +53,7 @@ SINGLE_BATTLE_TEST("Burn deals 1/16th damage per turn") } } -SINGLE_BATTLE_TEST("Burn reduces attack by 50%", s16 damage) +SINGLE_BATTLE_TEST("Burn reduces Attack by 50%", s16 damage) { bool32 burned; PARAMETRIZE { burned = FALSE; } @@ -113,7 +113,7 @@ SINGLE_BATTLE_TEST("Freeze is thawed by user's Flame Wheel") } } -SINGLE_BATTLE_TEST("Paralysis reduces speed by 50%") +SINGLE_BATTLE_TEST("Paralysis reduces Speed by 50%") { u16 playerSpeed; bool32 playerFirst; diff --git a/test/terrain_electric.c b/test/terrain_electric.c index b5608e661bf2..bb397fdf9b38 100644 --- a/test/terrain_electric.c +++ b/test/terrain_electric.c @@ -31,7 +31,7 @@ SINGLE_BATTLE_TEST("Electric Terrain activates Electric Seed and Mimicry") TURN { MOVE(player, MOVE_ELECTRIC_TERRAIN); } } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - MESSAGE("Using Electric Seed, the defense of Wobbuffet rose!"); + MESSAGE("Using Electric Seed, the Defense of Wobbuffet rose!"); ABILITY_POPUP(opponent); MESSAGE("Foe Stunfisk's type changed to Electr!"); } FINALLY { diff --git a/test/terrain_grassy.c b/test/terrain_grassy.c index cf83048750e0..ae6e6d9e9226 100644 --- a/test/terrain_grassy.c +++ b/test/terrain_grassy.c @@ -27,7 +27,7 @@ SINGLE_BATTLE_TEST("Grassy Terrain activates Grassy Seed and Mimicry") TURN { MOVE(player, MOVE_GRASSY_TERRAIN); } } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - MESSAGE("Using Grassy Seed, the defense of Wobbuffet rose!"); + MESSAGE("Using Grassy Seed, the Defense of Wobbuffet rose!"); ABILITY_POPUP(opponent); MESSAGE("Foe Stunfisk's type changed to Grass!"); } FINALLY { diff --git a/test/terrain_misty.c b/test/terrain_misty.c index dda5253f2327..668b0369922c 100644 --- a/test/terrain_misty.c +++ b/test/terrain_misty.c @@ -31,7 +31,7 @@ SINGLE_BATTLE_TEST("Misty Terrain activates Misty Seed and Mimicry") TURN { MOVE(player, MOVE_MISTY_TERRAIN); } } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - MESSAGE("Using Misty Seed, the sp. defense of Wobbuffet rose!"); + MESSAGE("Using Misty Seed, the Sp. Def of Wobbuffet rose!"); ABILITY_POPUP(opponent); MESSAGE("Foe Stunfisk's type changed to Fairy!"); } FINALLY { diff --git a/test/terrain_psychic.c b/test/terrain_psychic.c index eb5103f314a6..2cddef070f0b 100644 --- a/test/terrain_psychic.c +++ b/test/terrain_psychic.c @@ -30,7 +30,7 @@ SINGLE_BATTLE_TEST("Psychic Terrain activates Psychic Seed and Mimicry") TURN { MOVE(player, MOVE_PSYCHIC_TERRAIN); } } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - MESSAGE("Using Psychic Seed, the sp. defense of Wobbuffet rose!"); + MESSAGE("Using Psychic Seed, the Sp. Def of Wobbuffet rose!"); ABILITY_POPUP(opponent); MESSAGE("Foe Stunfisk's type changed to Psychc!"); } FINALLY { From e6505bda4bc9ebb23573ac9703ab09261742c110 Mon Sep 17 00:00:00 2001 From: Jaizu Date: Wed, 19 Apr 2023 01:49:42 +0200 Subject: [PATCH 267/428] Fix some sprites (#2926) * Fix hisuian typlosion * Fix mega metagross backsprite * Fix shiny Reuniclus * Fix Duosion mouth * Fix front mega metagross * Fix front Yanmega * Fix Electivire front sprite * Fix shiny duskull * Fix Hariyama sprite * Fix Shiny masquerain --- graphics/pokemon/duosion/anim_front.png | Bin 802 -> 738 bytes graphics/pokemon/duosion/normal.pal | 2 +- graphics/pokemon/duskull/anim_front.png | Bin 725 -> 737 bytes graphics/pokemon/duskull/back.png | Bin 562 -> 524 bytes graphics/pokemon/duskull/shiny.pal | 2 +- graphics/pokemon/electivire/anim_front.png | Bin 1898 -> 1908 bytes graphics/pokemon/electivire/normal.pal | 2 +- graphics/pokemon/hariyama/anim_front.png | Bin 1405 -> 1405 bytes graphics/pokemon/hariyama/normal.pal | 2 +- graphics/pokemon/masquerain/anim_front.png | Bin 1282 -> 1284 bytes graphics/pokemon/masquerain/normal.pal | 2 +- graphics/pokemon/metagross/mega/back.png | Bin 966 -> 897 bytes graphics/pokemon/metagross/mega/front.png | Bin 1366 -> 1311 bytes graphics/pokemon/reuniclus/anim_front.png | Bin 1176 -> 1210 bytes .../pokemon/typhlosion/hisuian/normal.pal | 2 +- graphics/pokemon/typhlosion/hisuian/pal.pal | 19 ------------------ graphics/pokemon/yanmega/anim_front.png | Bin 1210 -> 1103 bytes 17 files changed, 6 insertions(+), 25 deletions(-) delete mode 100755 graphics/pokemon/typhlosion/hisuian/pal.pal diff --git a/graphics/pokemon/duosion/anim_front.png b/graphics/pokemon/duosion/anim_front.png index e8c48d6c05fa3b8fd5dfcce88789aae67968b2a4..c265b42524e803d4fe8096c459643f42f4aa2114 100644 GIT binary patch delta 692 zcmV;l0!#g(2I2*f7#0Wv0001tU!Pb20004VQb$4nuFf3kks&63us}d?I5>dVpa1{> z00000005ZOL^l8c0$@o*K~!jg?U>n;gCGz^MUc)U|Np;3vtvMSH6>(N}lIW#2*oX0XzYYALMtTLfjM5 z^7##ndHxF~L_mlZz@b6HC|?L5z>;;D9^i&x;sA*BVc#F|5b_Mjjo|ZsyJ7gT)a!@> zIL|{Mq84yT$N=l+&jgzRRssmS5Y`|9tPG(2yg%W}HlGN8IKUBXT74S|ydes~?L%GY zJ(&SyHStjt<5m9Vo0J|VoVNbQDSrP=ECfsXGdYyZaq&Fe|=e;6>*e}VreeQ)g__kW-7*uO;o z`}U9P|H%GP{U6&uX73mF4+1XiA2E(g`$x3#(*99@z}Wr)cfPiNtbcG}{|MmH{=xpi z*#5!(!AbvNd++PN;GQ-e{U?dO1Nsk6;jI54V5tB20Q&l0^&g-abo3v!*Q(Rd>i>>) zFoyb{+6Qn;G_GTAAE5n*t*if%{zE{V)Lqnn_?`#60pIg@05~IN`VR#$-GA6t|6$dC as$Vt}u^^N#nQ>$Q0000I!7zqRe0000=*q&4Ew`VenmEfg*hAf@C4+b2!Zrt=G2Vb^Z_ zbeY+On1dO*=%mO~SeEDW%$@I|zRz zzy(N@DrF#rK&iami9H6Om4FOa5UW~CQ&Jv4W1a_|;MaE;V$0+=@a6Oy;#eDkDdEHE zgcE3G2xg%^c8FD>lqD7=aF1w>9RjN5N)XTuz=11~0z}Gmz}N{uQyuQWyaxiEPQG2$ z*kcBm5p;EXQ%!}PB;a_yDBW3LHiUlxN_9I|1T;K=tH2o$$ORy%)Diz((ScwAc*gng zywn^(%Y;DJCK~R65)hSr(__Bn0D5Jjy6>AYzu3tw{@B;A!vO47`O90b8y?6%%5cU@*3TN=>OyP4%C16XBqoon>`+k28xOQ>c zw&IR`W;0+a%}2CEmaYTXW*{>01~EjKIT>Goh%A$nk9fp?8ynC2w3heq1>LR?o~VjL zebQd>-F3_@5v!QJ9&A{3Uoj9V`G>j`dt}C7&{fF;B>zE@(`C&9)*eK<6_(*n>;Z6F z<)b|a;;+0IIJ8HnQ;-y0(aL}J;73B@UT}(KZ`#C)d%>1)C+fcw?7?UsME}tDD!Bto z&5DZG{37}X8lmWq=PK`c6JvnxcD@#R0A@oFkSE9U8v(f>?&u3HiU3LdpOv~QoPia0 z*QzFlp#DbF;=vxU>OZju)(_5sm%sL4$S*3)?E%+fvm9?za9)v)^yuidBg!J*W$df&|y91_xGwhXJ4S#`*_CW+jB24)X mBa!XhOvqbpsd7#0Wv0001tU!Pb20004VQb$4nuFf3kks&{SUr9tkRA_Ds;JOjc^&*QW(J8^^0`mcY?J#&{SrAxD{bs=h3#MB^h;q;D z%YBR%EGFQSUe40Nf(tC>3W0!CWb8!`Uyd^V;0l4_x}N>lH^NV_Y#~!JqIdl6Xj3xI z{^#clsRt#vU0(qZytDuTBnQ$%CItEI-68_b0r0K*2;fM6;Og>PSXP~)E|fOWgNv$O zZ5iS$7JSer15JQ%lvf=?Tt68=#N79v^~FKn8wif7a?!7TDF8r|eZ5N3y#RbXPHp=a z2~Zchb2x1v^azv9MOgX-(4Ry$8$jCm;{+S}P)4CayMDJ($jLOv6QgtWg0XjD8o(O@ zf}1XV?4whEI%?FYQKSC78u`J<58CpB!?UtIKhP%;XGC*;kX}^Vd#p7-*dAp0MR&>% zYF|lEWqy%K8>jpL)%PlN*!%Y+9rJ_D$1S0dE1=8|_MNyPNRP5?23+%px(BU9DDwlj zd=?GU*Z^gIfUtk&ai)*@GCzpl>x~x9`GNgTQTnuaKjjAvw=#_4k{<*M@d01Il|+>7@w^#@&k%`TMO^<1EYbzKR>WB zZt??TCV7(|SfAi;^8@>T$&nuvgpnVN8fB|ru;LwU7|-Y200000NkvXXu0mjflw~=5 delta 653 zcmV;80&@M~1=R(R7zqRe0000c#H5ELlz0jGlyxHHMv zJ-KG#*3bh&UDkp=KmjUc5C^vYf?=qMTMPL^+PorpO!n?f%i`@(O@I{PwmY1ey(76Z znT++1N?Z>2r*~%vZq5NdFV09ri@P(3uVOaXj}tL8#}slQ#Ft`8?7~+Wb$dpaKyC( zkcPb22_F%^8U?L)W)R}>RHFM@x3IS+#6A%-53%0pCqQe0dw4QF(wHg$i0iF>B7#;ysXPZ%_wJ;v0!exOc)PcNM)3lZ z_&e4u8Ua(@2vitv8(6(rRF@IMad_?kB@`L+ZX@|e=!$#!WB0fUxgZ3-^$ULteLaW+ z&pQ%oBV2_66LLBU3OFA_-Lb~{KWoen1Nk9xTQZm*qC^@*Fh4}(%dEIielUFj#e063 z_kU8A%*~EVyZlh~mu|ci_UD|s{4ghyp3Tbry;GMTtc_C&T&4!#@`LUBr=8L7+2)5v z=7O8V09<~kM9Pjz8^Gm<29c0004VQb$4nuFf3kkv=bf_;^?V000000H#zU zHUIztib+I4R9J=Wmd&<aiz#R_^$u9N)MelJ7@K%4k)!zV5S=d{LW+gW=S+C<} zCKJMyg2ma$OHByzns)qzxH(CEE6r`r@qv+4SFtyI-h@vOJoPgY@ z27oyL_$1Qwv4;r(<4hTVnFTZra1Rp#ng-?;=rBfq#tKP6pE|&40Qlv2mI^+>x*iNd zt1tD~0yppuz`tL;2U#C`&^81cfNE?Q<;j8y=p*nN(63>C?m?RaY&+=Rd|ObXWM;4s ztPNEI2KyP$X;uh`p`>`6zA)-w_xA>82U~{oJD^Ky^*l^Rfa+h~@z(fRX|`Tm4NXjW!R+VL2s$ zamJ5nkOmtv03k^$7Q{G;7PPBc(90WICTROfCJax<1^DW#;|HNU7!Dx>jer0E002ov JPDHLkV1hoL$4CGG delta 505 zcmV7$yV*00013M{Ml?0004VQb$4nuFf3k00004XF*Lt006O%3;baP zkuEQPXjo7H000000H#D0gFjQK~zY`<&;5c z!!Qs(GeYB9KL{Ta9c*GqEl2Tdj=e@&D+Lq~fow zRrQ{&?{~V{X6mYjgI;Hd4uFVx0MR2_+l&c+l12tlWMXVy05IdQBoF{-ss#(J=i^jJ zLFi1Jo*+Q4ZN|gb;V=`Yg3!c#T45LcDksX-KGi4UT2-0}n9J=IXm!a1jQbw>ACLjf z2w2s?8~{#Vx7QsS30%eiufyA`hXNG9sLR$IoxA#qI}gBB3UtQNx_fNchPz3JlZ$JA z=u!f$SpYgi{tv33<2Lv}Ro#ZaAJ4k)QUEc=Md0YtG0=5t<(GM4>+YHH|9N_Jaia zV?(zOcNp*P{fP6M780_6Zm#UPJvx?w3v37{28#t_p`Y%v1F={IQ>Pi4^r v3%i^2uv7D968z0nOd@`o+@t&NR#E%{b%xFx8N_#800000NkvXXu0mjfv=ZOe diff --git a/graphics/pokemon/duskull/shiny.pal b/graphics/pokemon/duskull/shiny.pal index 2c59d3ae14a7..16dc97f5a8cb 100644 --- a/graphics/pokemon/duskull/shiny.pal +++ b/graphics/pokemon/duskull/shiny.pal @@ -14,6 +14,6 @@ JASC-PAL 248 232 176 248 120 88 152 40 72 -104 88 80 +248 120 88 0 0 0 0 0 0 diff --git a/graphics/pokemon/electivire/anim_front.png b/graphics/pokemon/electivire/anim_front.png index a5f05a7e8b9552604a2c1903e92628e449dac87e..9aae7e5b5c7ef8497b1c49c6a0b2321a0309b3ed 100644 GIT binary patch delta 1865 zcmV-P2e$a?4)hL?7#0Wv0001tU!Pb20004VQb$4nuFf3kks&O9SV%xyfXKkib1MiZ0Vb9a92S?A72r==_qiPS91 z-y5&jzcQ!S`}1Rj$y&s(&-i9iRBLWX_7sxoqtf9GhJ^F@yUOX8fwJaBM`CFRk6 zpm6X&5nvf)P9>4SV>uvP10*#Qd-o#daNLymhK+KtX0GPa2^Is6&Z^bwu>_KED(D@LAdiaQakYCJyD}Ua`gAV{y*B8d%;0Voc zB@ohk3LxeNz_K<7RDdwpw;1XwvP`pwnUYrei7Nmy&Y~_Uob!m1u{mAT6_2?Tm{Z1H zrW|b7zuShN5WXEqPzYVrXk$$-hz7|w@{A*=s1V<6{jU16b-9p|ZiQP{fTHFCU^6ud zlR5x51S5BU>q{t@S*G(Kupah^Z>HO7A;LoG63E;((F-- z6d;+;bvpH~_GlrJexlR&;tEG`AP}&3**v*VjxWuC2J&7ksdfjeDE!KX(3LpG5lUVxdw?N|Rs{ExI@C!0=_pJ9YSraz z$MW>5X#haj0jfFY2EdAO0l-K-F-toDVt``M-ej1SuI=^EB_LRJ(*XM}@AEF~msW~^ zP&2gU>GR+gW3f-^7xv9a1J?swaqdR4Q&?Sp;IXtmQ%H7rYfV2PYnq(TrOgrdlP2`VeuhkTP+QCG=Kv6eDLm6wq9Dvabm3Gk$y%%_Ya2o@A zSk&~T4375w&0_`-{DxKd{ozqJkY|G3-Lhu(-V!SNwciNu*~)(R(W}!5KwBBJdpmnL zBS*(C9k`;f7S{PK#`a&MApT446#TvNM*)gnnyqKNc+D3WY0~xE{~-uC_E1}5??)%g z7qzt?~PGetBAi8qHX;-&PBs@7(a+?sp~} z;675U;ncX|-dE~vSJyA&$@0$5C3-$To zEid|&mXA_t5Gax#>|_B*%SQs8D#tC2LM2{fLl7@;7{Ol#w?LA)gL}F@aRI^scpp|p zytfZsTS3*Xmh~nd9Q6x-ol;`sc2Q=jRn>gZFN`X|0ceOvg#Fc70n&b~^`nYB2!LWt z+p`^^mk-RGT_rMmg#M}n(>SSokPV>IAGD&8Z9}=ZwX)U~MSu^x{vZI757<$Lk_%Vn z=H9=W4_)g`dhQ6VneM5OnDnT(`T=EAaLH@?3E)XTfb*WS7K+(_e{0<72flr|k)YH1 zGyTBDSTx2|?65Zy2Y}uCW!DdanwWy1|0Q7RF}^+6pXGzaMMov#3POFnoZ1h*ln<7l zDG2?EnF5%Ca1C&+9vFOIwyxH&uuoI`NkO<%4;-L+I0d*<51ikvgm9-G=y;M4Zq)-r zc#;rq)B|_nK|;7FQ4jq4X9?j_J#ZiXmk^A^L_+unt&nm=yg7=+00000NkvXXu0mjf D)t`z) delta 1855 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 delta 1231 zcmV;=1Tg!A3W5rd7zqRe0000 zzl-BW6vri82wdH2*XeIg-X@LMNn)0`i89t7V4qZ^+>?ea7fe<-=kB;5(q3_ha}fvu zbJdY8Lbz)Z6~^5BQF(7>^xL+I%!0vws zdTR6mCg}le!e%F%7%>(e1<`AgD_LveE!asHzC#d_6j4*;9_{Pw4x4*{l} z5CUoH9s+EFzy%9yz^Vr5{eKqm+cbUA1uRqu&|O;DU73J$uLkHQ ztgL8exD5d~Qvg2zY||e(lRfy61XO<$s{(kNmOv2sRhI=YOiKWsm5(WYb!7zw47U>S z0|YLx2_6Ru*tn_z4J>e8jL$d^@w>HBzz-NtL(V)2_?*q+7_+UiOaNfrN`M0(kJ>0= z%yD39$v)c)7}R~NDn!gXLtrpxvm1|)$sbv^+2qEV&x165$$7**wI}NMFm`_%3P6V3 zbS}ACjNj;~(D9r+nLs?-h(B$Qsd&WvpqMMA)U^~~6UXsY0>&1#(_>5#$i!cSFgY0( z=uH%BncE2DSHxj4Lnvy#v+J)Mhmj9RTtfPog>mzRTT{k7`XKTF2_iOw=>^T#X$`f% zSxiN4&|pq{?v1I@1b%baV+wyIU{f|32c#ai;DxiGe*!&V-gDS@J)W#ZVhjYtKNq6= z9$Sfkl^9cj@w^j2+CP{~YCG&~UXv#v&b5EArMAOI*ic?d3;*CS2c;B=$s`-b*tL`7VE4e%2A0V8F zU2=EKKWKv?c1QdJDy3RG=^xsvZD@M{24O1w!|&iQIuLk_e4_k;^bZ|(0BvBM=cRvW zyA-LFU>%P82bBL!!#^|$IPTdiD*Z!Y51MVPvNxr?qdhxVPFh8lwZ|*%fko+oc~rn@ t>85>vL9hGl!QlF60|n9ZAMF2c{S9y!fv3C#-A@1j002ovPDHLkV1gfqJcs}Q diff --git a/graphics/pokemon/masquerain/normal.pal b/graphics/pokemon/masquerain/normal.pal index bd8d9c4c7cd9..3d0291badccb 100644 --- a/graphics/pokemon/masquerain/normal.pal +++ b/graphics/pokemon/masquerain/normal.pal @@ -14,6 +14,6 @@ JASC-PAL 136 32 72 136 160 200 192 200 224 -16 16 16 224 104 40 248 144 96 +16 16 16 diff --git a/graphics/pokemon/metagross/mega/back.png b/graphics/pokemon/metagross/mega/back.png index 00bfdd18181e129eb963e142b922ecec66bcb9bb..86c2b6e145655c2717d7ad305e9625253be03337 100644 GIT binary patch delta 828 zcmV-C1H=5r2Z0BW7#0Wv0001;w}I>c0004VQb$4nuFf3kkv=|u0{=-wK~z|U?U&tB z>o5$2W2siAA-wRjMqU?}-kYyH?^S^n0~Rg?i_n5==kEmxY

    siT0sTOUYnhTZ)g zuFrD^YhSJr0zB&Q{pOK*2q+pqMDS@BtpvjJ1>X_L!O%$s?F%o&_qcV>G?2V0Fx>Dx zFB1#{;)_$@x(mskDh9*@b6DV8UM4StH#2U5Z+JH_@sWdn?gD%}MWh2H=kTGR0@u7I zY6%=Rya%fQU-4+RLGZ|a5xC^XLelfejbLE56pzP7_@G!uK&?q_GTCWDUI@gB2^*wL` z$`dEt2>ok+33dAtKBp~qPUA*o+V|tryPa1@1?q*@*hEq;B>Jcd`~HdRqAC#QabdW9 z%L~nWa-Rx{e}0h7obbs2c;Lz>&elGf%TNHm>lW<7sRH5$9-g(zcgLZ{h-On9_>P44 zs(=&7_?b?eZ}PUCsi=>tE-{g@9RT_z%Pc@D6Dfq;8=5QPuEnhC`N*3NT;-t;JYDfQtc( z=`V*ZkLpo!6VGd00SRML_t(Y$K8}qYZE~j#y2T=^58UdOM-{E zA@yo@m<{$U^qej;hn(CF`+_~0SQz>-ltS5~gyb-vp$GA*egeOY&pQ(<*|eU;Hzb5S zzkUBbGfDp4=m_!tFLGBLH_hU4r2F!^;aEI>s$acvZXr0HJ)jd^ojJ!v5TEw-6Tg_x~z2-4?2k>5LZM4>8y*JZax7;0n zLHQK`3&7B+*Hh>XeH?C5@Lxqby?V2Pg@C+6D^Uv z)`U+>N>AHHjJZOM7osFpW-UD#$r>}70O&%Uw-V4>=;#1zj6mMf{f5Gfm>>XhH^Bkh zL%OU@%uw2k-2_h<(5Ao+Ljq}AEe=?J*OlH@utmOGp#y){p?l&IBrjSC1kE==M+M$< z*4{z79gd8c}Cw{Z-fX@dBs#IL(w=Y5ed2+dbiS>@) z0d(rIE=5n?1^xTj_z2*rQ6?untXoqhFE=u0{i`zbRRBhkE{5ExUJ+HeQ=3vu?!JH3 z`Z6{#qI`HDah@bvg{|wl^ktSY5NmX^Veiy?Au(!o%ID_P8)ZlLK$6JlH7r90*gEiJ z>oLsnv5Af^Cj!8Xfi-L$tf`8BKpeCa_88qBz}C{>TLAzyBm)Y~v7e}6Q$DfAN|BEE zi8v_Nu4sZKQpL}ev-w)j4r59_n<>`VPb-Bcs&MZH-1ID5^O^y%psEpc1Yp8|@GBvd z7W_}6altw_FzRMO?8y-W%BNLIy%`Rf)#m^{3hLjwG{yf)1U}QT3;qF6D2GXZ0l+QN z%ESsYg^Fh%$QEI?Jn0KTFqr_z(Bq8WHMfgOMBqF*7V$a&2o-uIGTas-O}D^*5J~b2 XR@sk%RP-X-00000NkvXXu0mjfiYlXX diff --git a/graphics/pokemon/metagross/mega/front.png b/graphics/pokemon/metagross/mega/front.png index 6ed2cfbebc30f33e2e42d8de98a8817ab2324de0..1ebb0470aad180f323818652db2c8c4356ba1cb2 100644 GIT binary patch delta 1245 zcmV<31S0#^3ZDv)7#0Wv0001;w}I>c0004VQb$4nuFf3kkv=|u1f5AlK~z|UomY#N zqdE*DHc2S7JOBT;SCSo|vxV8Y+0*S5kRm^0rm2`s)8tl)xlg}eHqV4seK-3(1%Pue zrP@+J(cFG`zLesAmTGhFgj!kfZ9g!S@_0b$x*iCN612e2>4?$@#I5Ue3Li0ljbPpcc6C)Vxh$Z#~ z0X^t%cr!^rPHO))vfGHK1SDMq(m+54SO<9GQPPr-0-7k3AQ=ED5r;t#0o?H}37!Iu z0@eL+q>2K6abPl=1=@GK7+9C>4L{jnU@|axc`qqkRxIr#X~9tXVk6vBUf$ti zFkA*lU1QaTjZO@OuC`Hk;HLBaSa=i!JDiJFk|P-8=u_b`q2-5!`-TYn+73LE@|ioO zUgptTy~iDr+qQv)+wK#YcQZg#_F1K^u5qafzv-P43z^vT)m8n~wm5eiAVDBiS!kkr!UC zS4$rT{OKfsaAo@~-k78ycu7Lr@eI5&Pm`D47I@<#LMrIOm}Dq=v}F7E)AO& z_6LD~5pQ?a4}wZt|A-+72t+K<#(Mt;2_$g)vO(bfWg@WoL580Qpi~mRJP7O$$k>FT z0FwY1uE8!JvkQ25f&1GR@p0mGGF%ckoo>oRKJLQ;<_<&9Ab|{*_%*6AD$f0IVN?$} zt>a9%!dIm!N=U`>WFD9)h|$=XfQkRhk5M0gsy|wa{gFCwAFeBn_O@xn!%J^NgzmCy zj6U8hl2;AJGLO?dIk}xDp}^8@aW;~`?YXy~!6uO`l58mZ5so9RxDIC7DTomiMQ8DY z3~H%Xvn$qdVy?)J65GrC?3hnE#Wh&kz)wo2?7n$~SHRc3Ar#01P!&7JfYL00000NkvXX Hu0mjfgeXUa delta 1300 zcmV+v1?&2s3f2mc7$yV*00013M{Ml?0004VQb$4nuFf3k00004XF*Lt006O%3;baP zkuE-e010qNS#tmY4#NNd4#NS*Z>VGd00gf|L_t(Y$90u4Z`(!`$Im3t*_4<_$s`_S zTCLN@y#o)1!Pt zJM`YU0lOE^hmRL^;(h(jZE4*S4GHT}el zX`zyBiNS2-bn`1`u>t07o+!BmSb9Erl;h{|ArYR|T1cs6`UzlK4`z8DMc*8fkRlL& zegazNOB^9^9z~-)AYqCXN(0nI?EJQah){EFfYWS281+zKDMby~oIN_-B?7qC{V19u z(2wT+csx#c29yvk6`LZEr~v{aUoOag=S5g7moW&yA_NbU!7d3iIMV$K$9WLrO}5X9 zVyr+x+Ow0rI7H4)l2q?Id43raPhS>)#qwGJ3!n#am?#9S43zf1&ZEc+wxS+Z?q>Z@{9$fC$(QdRVLK~baOXHhSG^T(?-~4RuINmM7etUuOG_veAoc& z>sEEc8Ko$3>-%YfrZhQ!!uM`_EW^YM!V~Iqr;S4B?@$5`4CV-3=Q6_#IGsRymN%Mm z%4yHe5*UwTH1+pGZB|r}g4qwm9ZhMEnuBM!HJ13u?dlmWISw0xxuebD?XzMz9s@q} z^sMD)NeaORxa+`I1zr|40HxHM2^=$CTiCt3y))EQ0yhF~0%xLs+WJ4?fkpVklGECYC;Cg|6R|icXOSpFP z=pmT5mPm(s4vkl1t0mQZ_A-yA_3hehI1ieWZearY@@ljJh>cn9%^BC7N$Y$RsLc{X z*B&+jHapKpltOdGZ0G2_yt?q=vlsSOj{c|x>dUWuB+v&wA>@BlE<$)GQ2?$P#e^fphs( z>$1QGpX%p-4MJ810ny765jD0Y;PG$<+;1#IBLRkR4!m`UUavoYh(GE#rRNkmM-_Xv zF-dwFa+0M=N#GLXcv1fp{M%7x2bFAz9>foj{*EdOjsw z�j#+!)A@7W6Y}tOcrA7tbCdSK(9DPb2O7mf%NdWxyZh-co!7zvGTO?)Vk)sr!bD z=iokn@bXD|z(+X`f6SofyJHcD{D0TwmUrPx1gm@BUdO*ZEA0(QUMnj1?rwJ2{}-RT zzMi=e?fCx_3F+wGQ`f$C7+Uwf+V`Q?1?;%@G$vpw&A4;#7w}sBgL^+tcDnd*?%s!A zm(Jb$_{&-);M~2B5cJLWKOk`Yse2z{5Q4scdmkn^ckh=J9Nqf`g1&nnCOCKR;{<2! zeRv(QFtqM{kU*`v8P~?We~U*XjbKv{9fP=gue@)6J5?9S1Viku_JF!~wvbT#?>Pn9 zfJ3$G3`J9j#l2@ANpvX`KhHDhkY>Gfb?+2|F}RNX2m{%q0$(=II)`#4VRi4hXwxZw zO374)NY2Cg6D_P@Ml3^`g4V;N*ms+vm4 zFq(GJbMHErM1-0hPw-RUy&E;v<8eB}zX_uz8ayrUxZ^*FzbM@@PabE3pO_JEN->{UI$d3wwWN2YnmJ<@DA1Rsr}OYcdDSn{XBVV%NjqVVx=A zBYnBZ0XYER@};LvSe^uh4|jKb9|#;Syjv9_NDgeWO^;M0#|5yUz$KC0^*FZKCLLUC z?$3QCW-9|+1E3DQU9aDpx2`#{4SReF#o{^#W*R`q>EhwfdlFaXj05I>|KxuQEKLvv zK*$5{Vzc>MT|H>Ddbe?ydOoD`jZ=xjE;d}R#C8_8Fx{*>u-mEs5=pLwUZd*_Z; z!JLcqQ zw$Q`LXn8tiJY>#+Az4o(G97=*rSuNGm!(G}aFCOM=iB#P13W@CEL2{&K?8ush-a~c ze`@GV3rufhG8+3w05nFrlJf-B&=?_iarr};&^cejLG6%A z%QHl&99=i}6x9#;05}rg8hasrL40QY)n4sOn%CH|J8K>5$kObP>K>ZtlJ#qilkd+Of^RMh{7hpm75Hv@a>-w0IHzZux6f8$A^R!a460@|7azfk|0^16MEr|fh} z8tSi2RduU?c@)gQ^`PzPc&0pmpXd{wcyDCS7neB5F(!>YAFc|r+u+eW&DCEI0_o!? zVJS~so$2hmk3D#aa`m6$gD2nRVYQQ2juyXW8GA;SNsOAD58;0*98Uuub7|K}9# z(`6Js_ttkyGfyh&a5H@y_5Ue0>I;c~`;fgy`McUEwn@p%H_Uu??bd96a8W3BRsAtg zVqPp}cCr13u)9E6TuibXZoaws2CY@qpAqIo(}QmD_rN@@s6S|Jn^f1Ur=)fF$l9y@ a5B4vEDudj3#^-_n0000c>cDC*N5CWoahT(}n62_P>_2c*zg7o7T2+IE} zf~Z%-M}R!K`IMjl7IzbjuAV&*Y==6JSO7|Jjq671+5K$crD0!StyCjk2k>#_oTs?hgS0z2}5QoY1_ zYa0mGfTdx7aY52X+VcjudMKl}q`-iYs=%9I^l>Dd1q3gAo{d>&iEi`D^{L$El-ja z`_CN+`mGa6Qz}13R_(u21jPk_4Wcx{{Du90XRR*K86kbioQL;U_Fu>6Zca6ebsqlO z{wpDBH|;_``tZ*FGa~np4~VV1M$f=+>^~D^x8$mw^wQzFvj6J-o$8N$Y;$bRUD$s% z^|ZJ16pnptv+wO)*?+aZ6D5?jd%~_gcV++A_5q^J8DF%q<(c|y|F!#}?Sr*_YizA* zi>-hc`>&k?E`(UujZo<;<_5yv{_DYnyY9i-L$3DW*G5mV|7!lzv6m)@dSCNwEb8X} zx-VJ?*`xC5+GpN#Yw=I@eBAsJp9Fzzs~>w002ovPDHLk FV1gu;{`vp_ delta 1143 zcmV--1c>|32)YT77zqRe0000yDJS*qr3ALvX)l%6p}dF*x?(TWV34sRBe{yfq$0i-Q!k%Jws0D$snL%2L|9Rtwfs%SjKZ`|gDitw1&OXONf zl2$me@jhV0X5#;#b}(s4z$>t0hf?A9wDynO$@}R5Z}@b z{)_4^|M(CpO%`lpjC((lTjT<$HjjVfyfWJo5X~cqO%A-*?Cmb(F>wKSJjWQ;Pvk%x z9FZg4^!lCydE={v7)mkqBc1i5?lp{S?eqsLxh=Rq=>Ji7jzzJgJZ;^fr~R`TvbXJVgEmpRE|KWe-Y5&js zckH8IT$%=Qk6!elhG^?d4P2e3*4S=P$e(r4R&?2;^x}~vMnL6JFx=ij1v_$S#UzVB z`9c1}!8cbn${l+|bt(eT3-)yL(Sw5JDnO(Fxmbh^BDGVLP4dhn)*?VVb`(V&wQNYT zX`5tmpE8ke5AB~j#X|f;8Zdti>A-R^-Qn9aiEev~0F~}qZX?c#ZkhIC2TwQFWcQfo zv_*!*OV7ZgeSX!}Eze3nPScoPkx0Fq2IL7Kx9l@j@VMhzYquqtdSR3rVO;ldqrI;% z&l7#4cpbnWV9jTYEd$o>V|)|xaLEdMh_C(doIP(t?TZm5jI6K?uM>YhP^Zw|<>$=}tx`d@4BHStUj zgf*uJ%kIwvR%d!3E_td4OKPeI*}&p^ep;966Fm^e)!t8IJzyfD+QZI74tv1E=bIG1r3o(#P=Loawo>~fWa@J|nsIXkG7=788R;JB4rmLH9R Date: Wed, 19 Apr 2023 01:52:20 +0200 Subject: [PATCH 268/428] Reusable TMs (#2903) * Reusable TMs * Forgot about Gen9 making TMs expendable again * Change importance check based on Alex's suggestion * Prevent items with importance from being bought more than once * Change importance check to ghoul's suggestion * Update include/config/item.h Co-authored-by: Eduardo Quezada D'Ottone --------- Co-authored-by: Eduardo Quezada D'Ottone --- include/config/item.h | 3 ++ include/strings.h | 2 + src/data/items.h | 100 ++++++++++++++++++++++++++++++++++++++++++ src/party_menu.c | 2 +- src/shop.c | 22 ++++++++-- src/strings.c | 2 + 6 files changed, 126 insertions(+), 5 deletions(-) diff --git a/include/config/item.h b/include/config/item.h index 031af3724183..f707b7a54001 100644 --- a/include/config/item.h +++ b/include/config/item.h @@ -9,6 +9,9 @@ #define I_SITRUS_BERRY_HEAL GEN_LATEST // In Gen4+, Sitrus Berry was changed from healing 30 HP to healing 25% of Max HP. #define I_VITAMIN_EV_CAP GEN_LATEST // In Gen8, the Vitamins no longer have a cap of 100 EV per stat. +// TM config +#define I_REUSABLE_TMS FALSE // In Gen5-8, TMs are reusable. Setting this to TRUE will make all vanilla TMs reusable, though they can also be cherry-picked by setting their importance to 1. + // Repel/Lure config // These two settings are both independent and complementary. #define VAR_LAST_REPEL_LURE_USED 0 // If this var has been assigned, last Repel/Lure used will be saved and the player will get prompted with the vanilla repel YES/NO option, unless I_REPEL_LURE_MENU is set to TRUE. diff --git a/include/strings.h b/include/strings.h index 959bb8c22d18..f17d509e8544 100644 --- a/include/strings.h +++ b/include/strings.h @@ -1025,6 +1025,8 @@ extern const u8 gText_ThrowInPremierBall[]; extern const u8 gText_ShopBuy[]; extern const u8 gText_ShopSell[]; extern const u8 gText_ShopQuit[]; +extern const u8 gText_SoldOut[]; +extern const u8 gText_SoldOut2[]; extern const u8 gText_OhABite[]; extern const u8 gText_PokemonOnHook[]; diff --git a/src/data/items.h b/src/data/items.h index fc99e10373fc..84436be55b40 100644 --- a/src/data/items.h +++ b/src/data/items.h @@ -7728,6 +7728,7 @@ const struct Item gItems[] = .itemId = ITEM_TM01_FOCUS_PUNCH, .price = 3000, .description = sTM01Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -7739,6 +7740,7 @@ const struct Item gItems[] = .itemId = ITEM_TM02_DRAGON_CLAW, .price = 3000, .description = sTM02Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -7750,6 +7752,7 @@ const struct Item gItems[] = .itemId = ITEM_TM03_WATER_PULSE, .price = 3000, .description = sTM03Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -7761,6 +7764,7 @@ const struct Item gItems[] = .itemId = ITEM_TM04_CALM_MIND, .price = 3000, .description = sTM04Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -7772,6 +7776,7 @@ const struct Item gItems[] = .itemId = ITEM_TM05_ROAR, .price = 1000, .description = sTM05Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -7783,6 +7788,7 @@ const struct Item gItems[] = .itemId = ITEM_TM06_TOXIC, .price = 3000, .description = sTM06Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -7794,6 +7800,7 @@ const struct Item gItems[] = .itemId = ITEM_TM07_HAIL, .price = 3000, .description = sTM07Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -7805,6 +7812,7 @@ const struct Item gItems[] = .itemId = ITEM_TM08_BULK_UP, .price = 3000, .description = sTM08Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -7816,6 +7824,7 @@ const struct Item gItems[] = .itemId = ITEM_TM09_BULLET_SEED, .price = 3000, .description = sTM09Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -7827,6 +7836,7 @@ const struct Item gItems[] = .itemId = ITEM_TM10_HIDDEN_POWER, .price = 3000, .description = sTM10Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -7838,6 +7848,7 @@ const struct Item gItems[] = .itemId = ITEM_TM11_SUNNY_DAY, .price = 2000, .description = sTM11Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -7849,6 +7860,7 @@ const struct Item gItems[] = .itemId = ITEM_TM12_TAUNT, .price = 3000, .description = sTM12Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -7860,6 +7872,7 @@ const struct Item gItems[] = .itemId = ITEM_TM13_ICE_BEAM, .price = 3000, .description = sTM13Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -7871,6 +7884,7 @@ const struct Item gItems[] = .itemId = ITEM_TM14_BLIZZARD, .price = 5500, .description = sTM14Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -7882,6 +7896,7 @@ const struct Item gItems[] = .itemId = ITEM_TM15_HYPER_BEAM, .price = 7500, .description = sTM15Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -7893,6 +7908,7 @@ const struct Item gItems[] = .itemId = ITEM_TM16_LIGHT_SCREEN, .price = 3000, .description = sTM16Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -7904,6 +7920,7 @@ const struct Item gItems[] = .itemId = ITEM_TM17_PROTECT, .price = 3000, .description = sTM17Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -7915,6 +7932,7 @@ const struct Item gItems[] = .itemId = ITEM_TM18_RAIN_DANCE, .price = 2000, .description = sTM18Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -7926,6 +7944,7 @@ const struct Item gItems[] = .itemId = ITEM_TM19_GIGA_DRAIN, .price = 3000, .description = sTM19Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -7937,6 +7956,7 @@ const struct Item gItems[] = .itemId = ITEM_TM20_SAFEGUARD, .price = 3000, .description = sTM20Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -7948,6 +7968,7 @@ const struct Item gItems[] = .itemId = ITEM_TM21_FRUSTRATION, .price = 1000, .description = sTM21Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -7959,6 +7980,7 @@ const struct Item gItems[] = .itemId = ITEM_TM22_SOLAR_BEAM, .price = 3000, .description = sTM22Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -7970,6 +7992,7 @@ const struct Item gItems[] = .itemId = ITEM_TM23_IRON_TAIL, .price = 3000, .description = sTM23Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -7981,6 +8004,7 @@ const struct Item gItems[] = .itemId = ITEM_TM24_THUNDERBOLT, .price = 3000, .description = sTM24Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -7992,6 +8016,7 @@ const struct Item gItems[] = .itemId = ITEM_TM25_THUNDER, .price = 5500, .description = sTM25Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8003,6 +8028,7 @@ const struct Item gItems[] = .itemId = ITEM_TM26_EARTHQUAKE, .price = 3000, .description = sTM26Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8014,6 +8040,7 @@ const struct Item gItems[] = .itemId = ITEM_TM27_RETURN, .price = 1000, .description = sTM27Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8025,6 +8052,7 @@ const struct Item gItems[] = .itemId = ITEM_TM28_DIG, .price = 2000, .description = sTM28Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8036,6 +8064,7 @@ const struct Item gItems[] = .itemId = ITEM_TM29_PSYCHIC, .price = 2000, .description = sTM29Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8047,6 +8076,7 @@ const struct Item gItems[] = .itemId = ITEM_TM30_SHADOW_BALL, .price = 3000, .description = sTM30Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8058,6 +8088,7 @@ const struct Item gItems[] = .itemId = ITEM_TM31_BRICK_BREAK, .price = 3000, .description = sTM31Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8069,6 +8100,7 @@ const struct Item gItems[] = .itemId = ITEM_TM32_DOUBLE_TEAM, .price = 2000, .description = sTM32Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8080,6 +8112,7 @@ const struct Item gItems[] = .itemId = ITEM_TM33_REFLECT, .price = 3000, .description = sTM33Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8091,6 +8124,7 @@ const struct Item gItems[] = .itemId = ITEM_TM34_SHOCK_WAVE, .price = 3000, .description = sTM34Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8102,6 +8136,7 @@ const struct Item gItems[] = .itemId = ITEM_TM35_FLAMETHROWER, .price = 3000, .description = sTM35Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8113,6 +8148,7 @@ const struct Item gItems[] = .itemId = ITEM_TM36_SLUDGE_BOMB, .price = 1000, .description = sTM36Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8124,6 +8160,7 @@ const struct Item gItems[] = .itemId = ITEM_TM37_SANDSTORM, .price = 2000, .description = sTM37Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8135,6 +8172,7 @@ const struct Item gItems[] = .itemId = ITEM_TM38_FIRE_BLAST, .price = 5500, .description = sTM38Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8146,6 +8184,7 @@ const struct Item gItems[] = .itemId = ITEM_TM39_ROCK_TOMB, .price = 3000, .description = sTM39Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8157,6 +8196,7 @@ const struct Item gItems[] = .itemId = ITEM_TM40_AERIAL_ACE, .price = 3000, .description = sTM40Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8168,6 +8208,7 @@ const struct Item gItems[] = .itemId = ITEM_TM41_TORMENT, .price = 3000, .description = sTM41Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8179,6 +8220,7 @@ const struct Item gItems[] = .itemId = ITEM_TM42_FACADE, .price = 3000, .description = sTM42Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8190,6 +8232,7 @@ const struct Item gItems[] = .itemId = ITEM_TM43_SECRET_POWER, .price = 3000, .description = sTM43Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8201,6 +8244,7 @@ const struct Item gItems[] = .itemId = ITEM_TM44_REST, .price = 3000, .description = sTM44Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8212,6 +8256,7 @@ const struct Item gItems[] = .itemId = ITEM_TM45_ATTRACT, .price = 3000, .description = sTM45Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8223,6 +8268,7 @@ const struct Item gItems[] = .itemId = ITEM_TM46_THIEF, .price = 3000, .description = sTM46Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8234,6 +8280,7 @@ const struct Item gItems[] = .itemId = ITEM_TM47_STEEL_WING, .price = 3000, .description = sTM47Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8245,6 +8292,7 @@ const struct Item gItems[] = .itemId = ITEM_TM48_SKILL_SWAP, .price = 3000, .description = sTM48Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8256,6 +8304,7 @@ const struct Item gItems[] = .itemId = ITEM_TM49_SNATCH, .price = 3000, .description = sTM49Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8267,6 +8316,7 @@ const struct Item gItems[] = .itemId = ITEM_TM50_OVERHEAT, .price = 3000, .description = sTM50Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8278,6 +8328,7 @@ const struct Item gItems[] = .itemId = ITEM_TM51, .price = 3000, .description = sTM51Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8289,6 +8340,7 @@ const struct Item gItems[] = .itemId = ITEM_TM52, .price = 3000, .description = sTM52Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8300,6 +8352,7 @@ const struct Item gItems[] = .itemId = ITEM_TM53, .price = 3000, .description = sTM53Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8311,6 +8364,7 @@ const struct Item gItems[] = .itemId = ITEM_TM54, .price = 3000, .description = sTM54Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8322,6 +8376,7 @@ const struct Item gItems[] = .itemId = ITEM_TM55, .price = 3000, .description = sTM55Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8333,6 +8388,7 @@ const struct Item gItems[] = .itemId = ITEM_TM56, .price = 3000, .description = sTM56Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8344,6 +8400,7 @@ const struct Item gItems[] = .itemId = ITEM_TM57, .price = 3000, .description = sTM57Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8355,6 +8412,7 @@ const struct Item gItems[] = .itemId = ITEM_TM58, .price = 3000, .description = sTM58Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8366,6 +8424,7 @@ const struct Item gItems[] = .itemId = ITEM_TM59, .price = 3000, .description = sTM59Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8377,6 +8436,7 @@ const struct Item gItems[] = .itemId = ITEM_TM60, .price = 3000, .description = sTM60Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8388,6 +8448,7 @@ const struct Item gItems[] = .itemId = ITEM_TM61, .price = 3000, .description = sTM61Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8399,6 +8460,7 @@ const struct Item gItems[] = .itemId = ITEM_TM62, .price = 3000, .description = sTM62Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8410,6 +8472,7 @@ const struct Item gItems[] = .itemId = ITEM_TM63, .price = 3000, .description = sTM63Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8421,6 +8484,7 @@ const struct Item gItems[] = .itemId = ITEM_TM64, .price = 3000, .description = sTM64Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8432,6 +8496,7 @@ const struct Item gItems[] = .itemId = ITEM_TM65, .price = 3000, .description = sTM65Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8443,6 +8508,7 @@ const struct Item gItems[] = .itemId = ITEM_TM66, .price = 3000, .description = sTM66Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8454,6 +8520,7 @@ const struct Item gItems[] = .itemId = ITEM_TM67, .price = 3000, .description = sTM67Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8465,6 +8532,7 @@ const struct Item gItems[] = .itemId = ITEM_TM68, .price = 3000, .description = sTM68Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8476,6 +8544,7 @@ const struct Item gItems[] = .itemId = ITEM_TM69, .price = 3000, .description = sTM69Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8487,6 +8556,7 @@ const struct Item gItems[] = .itemId = ITEM_TM70, .price = 3000, .description = sTM70Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8498,6 +8568,7 @@ const struct Item gItems[] = .itemId = ITEM_TM71, .price = 3000, .description = sTM71Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8509,6 +8580,7 @@ const struct Item gItems[] = .itemId = ITEM_TM72, .price = 3000, .description = sTM72Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8520,6 +8592,7 @@ const struct Item gItems[] = .itemId = ITEM_TM73, .price = 3000, .description = sTM73Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8531,6 +8604,7 @@ const struct Item gItems[] = .itemId = ITEM_TM74, .price = 3000, .description = sTM74Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8542,6 +8616,7 @@ const struct Item gItems[] = .itemId = ITEM_TM75, .price = 3000, .description = sTM75Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8553,6 +8628,7 @@ const struct Item gItems[] = .itemId = ITEM_TM76, .price = 3000, .description = sTM76Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8564,6 +8640,7 @@ const struct Item gItems[] = .itemId = ITEM_TM77, .price = 3000, .description = sTM77Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8575,6 +8652,7 @@ const struct Item gItems[] = .itemId = ITEM_TM78, .price = 3000, .description = sTM78Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8586,6 +8664,7 @@ const struct Item gItems[] = .itemId = ITEM_TM79, .price = 3000, .description = sTM79Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8597,6 +8676,7 @@ const struct Item gItems[] = .itemId = ITEM_TM80, .price = 3000, .description = sTM80Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8608,6 +8688,7 @@ const struct Item gItems[] = .itemId = ITEM_TM81, .price = 3000, .description = sTM81Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8619,6 +8700,7 @@ const struct Item gItems[] = .itemId = ITEM_TM82, .price = 3000, .description = sTM82Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8630,6 +8712,7 @@ const struct Item gItems[] = .itemId = ITEM_TM83, .price = 3000, .description = sTM83Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8641,6 +8724,7 @@ const struct Item gItems[] = .itemId = ITEM_TM84, .price = 3000, .description = sTM84Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8652,6 +8736,7 @@ const struct Item gItems[] = .itemId = ITEM_TM85, .price = 3000, .description = sTM85Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8663,6 +8748,7 @@ const struct Item gItems[] = .itemId = ITEM_TM86, .price = 3000, .description = sTM86Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8674,6 +8760,7 @@ const struct Item gItems[] = .itemId = ITEM_TM87, .price = 3000, .description = sTM87Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8685,6 +8772,7 @@ const struct Item gItems[] = .itemId = ITEM_TM88, .price = 3000, .description = sTM88Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8696,6 +8784,7 @@ const struct Item gItems[] = .itemId = ITEM_TM89, .price = 3000, .description = sTM89Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8707,6 +8796,7 @@ const struct Item gItems[] = .itemId = ITEM_TM90, .price = 3000, .description = sTM90Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8718,6 +8808,7 @@ const struct Item gItems[] = .itemId = ITEM_TM91, .price = 3000, .description = sTM91Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8729,6 +8820,7 @@ const struct Item gItems[] = .itemId = ITEM_TM92, .price = 3000, .description = sTM92Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8740,6 +8832,7 @@ const struct Item gItems[] = .itemId = ITEM_TM93, .price = 3000, .description = sTM93Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8751,6 +8844,7 @@ const struct Item gItems[] = .itemId = ITEM_TM94, .price = 3000, .description = sTM94Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8762,6 +8856,7 @@ const struct Item gItems[] = .itemId = ITEM_TM95, .price = 3000, .description = sTM95Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8773,6 +8868,7 @@ const struct Item gItems[] = .itemId = ITEM_TM96, .price = 3000, .description = sTM96Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8784,6 +8880,7 @@ const struct Item gItems[] = .itemId = ITEM_TM97, .price = 3000, .description = sTM97Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8795,6 +8892,7 @@ const struct Item gItems[] = .itemId = ITEM_TM98, .price = 3000, .description = sTM98Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8806,6 +8904,7 @@ const struct Item gItems[] = .itemId = ITEM_TM99, .price = 3000, .description = sTM99Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, @@ -8817,6 +8916,7 @@ const struct Item gItems[] = .itemId = ITEM_TM100, .price = 3000, .description = sTM100Desc, + .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_TMHM, diff --git a/src/party_menu.c b/src/party_menu.c index a7ab305450e5..3cc3efdcddfb 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -5090,7 +5090,7 @@ static void Task_LearnedMove(u8 taskId) if (move[1] == 0) { AdjustFriendship(mon, FRIENDSHIP_EVENT_LEARN_TMHM); - if (item < ITEM_HM01_CUT) + if (!ItemId_GetImportance(item)) RemoveBagItem(item, 1); } GetMonNickname(mon, gStringVar1); diff --git a/src/shop.c b/src/shop.c index 8fea1e1178b4..6f4e09356216 100644 --- a/src/shop.c +++ b/src/shop.c @@ -639,7 +639,10 @@ static void BuyMenuPrintPriceInList(u8 windowId, u32 itemId, u8 y) 5); } - StringExpandPlaceholders(gStringVar4, gText_PokedollarVar1); + if (ItemId_GetImportance(itemId) && (CheckBagHasItem(itemId, 1) || CheckPCHasItem(itemId, 1))) + StringCopy(gStringVar4, gText_SoldOut2); + else + StringExpandPlaceholders(gStringVar4, gText_PokedollarVar1); x = GetStringRightAlignXOffset(FONT_NARROW, gStringVar4, 120); AddTextPrinterParameterized4(windowId, FONT_NARROW, x, y, 0, 0, sShopBuyMenuTextColors[COLORID_ITEM_LIST], TEXT_SKIP_DRAW, gStringVar4); } @@ -989,7 +992,9 @@ static void Task_BuyMenu(u8 taskId) else sShopData->totalCost = gDecorations[itemId].price; - if (!IsEnoughMoney(&gSaveBlock1Ptr->money, sShopData->totalCost)) + if (ItemId_GetImportance(itemId) && (CheckBagHasItem(itemId, 1) || CheckPCHasItem(itemId, 1))) + BuyMenuDisplayMessage(taskId, gText_SoldOut, BuyMenuReturnToItemList); + else if (!IsEnoughMoney(&gSaveBlock1Ptr->money, sShopData->totalCost)) { BuyMenuDisplayMessage(taskId, gText_YouDontHaveMoney, BuyMenuReturnToItemList); } @@ -998,7 +1003,15 @@ static void Task_BuyMenu(u8 taskId) if (sMartInfo.martType == MART_TYPE_NORMAL) { CopyItemName(itemId, gStringVar1); - if (ItemId_GetPocket(itemId) == POCKET_TM_HM) + if (ItemId_GetImportance(itemId)) + { + ConvertIntToDecimalStringN(gStringVar2, sShopData->totalCost, STR_CONV_MODE_LEFT_ALIGN, 6); + StringExpandPlaceholders(gStringVar4, gText_YouWantedVar1ThatllBeVar2); + tItemCount = 1; + sShopData->totalCost = (ItemId_GetPrice(tItemId) >> IsPokeNewsActive(POKENEWS_SLATEPORT)) * tItemCount; + BuyMenuDisplayMessage(taskId, gStringVar4, BuyMenuConfirmPurchase); + } + else if (ItemId_GetPocket(itemId) == POCKET_TM_HM) { StringCopy(gStringVar2, gMoveNames[ItemIdToBattleMoveId(itemId)]); BuyMenuDisplayMessage(taskId, gText_Var1CertainlyHowMany2, Task_BuyHowManyDialogueInit); @@ -1103,8 +1116,8 @@ static void BuyMenuTryMakePurchase(u8 taskId) { if (AddBagItem(tItemId, tItemCount) == TRUE) { - BuyMenuDisplayMessage(taskId, gText_HereYouGoThankYou, BuyMenuSubtractMoney); RecordItemPurchase(taskId); + BuyMenuDisplayMessage(taskId, gText_HereYouGoThankYou, BuyMenuSubtractMoney); } else { @@ -1170,6 +1183,7 @@ static void BuyMenuReturnToItemList(u8 taskId) s16 *data = gTasks[taskId].data; ClearDialogWindowAndFrameToTransparent(WIN_MESSAGE, FALSE); + RedrawListMenu(tListTaskId); BuyMenuPrintCursor(tListTaskId, COLORID_ITEM_LIST); PutWindowTilemap(WIN_ITEM_LIST); PutWindowTilemap(WIN_ITEM_DESCRIPTION); diff --git a/src/strings.c b/src/strings.c index 847b2849a6e2..dd632a32bddb 100644 --- a/src/strings.c +++ b/src/strings.c @@ -341,6 +341,8 @@ const u8 gText_Var1DisdainfullyAteVar2[] = _("{STR_VAR_1} disdainfully ate the\n const u8 gText_ShopBuy[] = _("BUY"); const u8 gText_ShopSell[] = _("SELL"); const u8 gText_ShopQuit[] = _("QUIT"); +const u8 gText_SoldOut[] = _("I'm sorry, but that item is sold out.\p"); +const u8 gText_SoldOut2[] = _("SOLD OUT"); const u8 gText_InBagVar1[] = _("IN BAG: {STR_VAR_1}"); const u8 gText_QuitShopping[] = _("Quit shopping."); const u8 gText_Var1CertainlyHowMany[] = _("{STR_VAR_1}? Certainly.\nHow many would you like?"); From 52ce39924051c3a94f96eabb4ac9fb5b7edebf81 Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Wed, 19 Apr 2023 17:01:00 +0200 Subject: [PATCH 269/428] Fix TM reusability shortcomings (#2930) --- include/strings.h | 2 +- src/shop.c | 4 ++-- src/strings.c | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/include/strings.h b/include/strings.h index f17d509e8544..72109ed94566 100644 --- a/include/strings.h +++ b/include/strings.h @@ -1025,8 +1025,8 @@ extern const u8 gText_ThrowInPremierBall[]; extern const u8 gText_ShopBuy[]; extern const u8 gText_ShopSell[]; extern const u8 gText_ShopQuit[]; +extern const u8 gText_ThatItemIsSoldOut[]; extern const u8 gText_SoldOut[]; -extern const u8 gText_SoldOut2[]; extern const u8 gText_OhABite[]; extern const u8 gText_PokemonOnHook[]; diff --git a/src/shop.c b/src/shop.c index 6f4e09356216..b4978f063e99 100644 --- a/src/shop.c +++ b/src/shop.c @@ -640,7 +640,7 @@ static void BuyMenuPrintPriceInList(u8 windowId, u32 itemId, u8 y) } if (ItemId_GetImportance(itemId) && (CheckBagHasItem(itemId, 1) || CheckPCHasItem(itemId, 1))) - StringCopy(gStringVar4, gText_SoldOut2); + StringCopy(gStringVar4, gText_SoldOut); else StringExpandPlaceholders(gStringVar4, gText_PokedollarVar1); x = GetStringRightAlignXOffset(FONT_NARROW, gStringVar4, 120); @@ -993,7 +993,7 @@ static void Task_BuyMenu(u8 taskId) sShopData->totalCost = gDecorations[itemId].price; if (ItemId_GetImportance(itemId) && (CheckBagHasItem(itemId, 1) || CheckPCHasItem(itemId, 1))) - BuyMenuDisplayMessage(taskId, gText_SoldOut, BuyMenuReturnToItemList); + BuyMenuDisplayMessage(taskId, gText_ThatItemIsSoldOut, BuyMenuReturnToItemList); else if (!IsEnoughMoney(&gSaveBlock1Ptr->money, sShopData->totalCost)) { BuyMenuDisplayMessage(taskId, gText_YouDontHaveMoney, BuyMenuReturnToItemList); diff --git a/src/strings.c b/src/strings.c index dd632a32bddb..75ff2ef994d5 100644 --- a/src/strings.c +++ b/src/strings.c @@ -341,8 +341,8 @@ const u8 gText_Var1DisdainfullyAteVar2[] = _("{STR_VAR_1} disdainfully ate the\n const u8 gText_ShopBuy[] = _("BUY"); const u8 gText_ShopSell[] = _("SELL"); const u8 gText_ShopQuit[] = _("QUIT"); -const u8 gText_SoldOut[] = _("I'm sorry, but that item is sold out.\p"); -const u8 gText_SoldOut2[] = _("SOLD OUT"); +const u8 gText_ThatItemIsSoldOut[] = _("I'm sorry, but that item is sold out.{PAUSE_UNTIL_PRESS}"); +const u8 gText_SoldOut[] = _("SOLD OUT"); const u8 gText_InBagVar1[] = _("IN BAG: {STR_VAR_1}"); const u8 gText_QuitShopping[] = _("Quit shopping."); const u8 gText_Var1CertainlyHowMany[] = _("{STR_VAR_1}? Certainly.\nHow many would you like?"); From d3fed5639b4b56836221ccf6232387e2d63a3eed Mon Sep 17 00:00:00 2001 From: psf <77138753+pkmnsnfrn@users.noreply.github.com> Date: Wed, 19 Apr 2023 15:54:57 -0700 Subject: [PATCH 270/428] Added config to enable NEW_ROCKS_PARTICLE (#2929) Co-authored-by: LOuroboros --- include/config/battle.h | 1 + src/data/battle_anim.h | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/include/config/battle.h b/include/config/battle.h index ad3162162320..3e9ec9b9a5f4 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -195,6 +195,7 @@ #define B_NEW_SWORD_PARTICLE FALSE // If set to TRUE, it updates Swords Dance's particle. #define B_NEW_LEECH_SEED_PARTICLE FALSE // If set to TRUE, it updates Leech Seed's animation particle. #define B_NEW_HORN_ATTACK_PARTICLE FALSE // If set to TRUE, it updates Horn Attack's horn particle. +#define B_NEW_ROCKS_PARTICLE TRUE // If set to TRUE, it updates rock particles. #define B_NEW_LEAF_PARTICLE FALSE // If set to TRUE, it updates leaf particle. #define B_NEW_EMBER_PARTICLES FALSE // If set to TRUE, it updates Ember's fire particle. #define B_NEW_MEAN_LOOK_PARTICLE FALSE // If set to TRUE, it updates Mean Look's eye particle. diff --git a/src/data/battle_anim.h b/src/data/battle_anim.h index b1f158310a70..46293e3a0a8d 100644 --- a/src/data/battle_anim.h +++ b/src/data/battle_anim.h @@ -1079,7 +1079,7 @@ const struct CompressedSpriteSheet gBattleAnimPicTable[] = {gBattleAnimSpriteGfx_RedFist, 0x0200, ANIM_TAG_RED_FIST}, {gBattleAnimSpriteGfx_SlamHit, 0x1000, ANIM_TAG_SLAM_HIT}, {gBattleAnimSpriteGfx_Ring, 0x0180, ANIM_TAG_RING}, -#if NEW_ROCKS_PARTICLE +#if B_NEW_ROCKS_PARTICLE == TRUE {gBattleAnimSpriteGfx_NewRocks, 0x0C00, ANIM_TAG_ROCKS}, #else {gBattleAnimSpriteGfx_Rocks, 0x0C00, ANIM_TAG_ROCKS}, @@ -1529,7 +1529,7 @@ const struct CompressedSpritePalette gBattleAnimPaletteTable[] = {gBattleAnimSpritePal_HumanoidFoot, ANIM_TAG_RED_FIST}, {gBattleAnimSpritePal_SlamHit, ANIM_TAG_SLAM_HIT}, {gBattleAnimSpritePal_Ring, ANIM_TAG_RING}, -#if NEW_ROCKS_PARTICLE +#if B_NEW_ROCKS_PARTICLE == TRUE {gBattleAnimSpritePal_NewRocks, ANIM_TAG_ROCKS}, #else {gBattleAnimSpritePal_Rocks, ANIM_TAG_ROCKS}, From 216b7a4dfd4521104ca4f1a2a07bf58fd56539a7 Mon Sep 17 00:00:00 2001 From: CallmeEchoo Date: Thu, 20 Apr 2023 09:44:18 +0200 Subject: [PATCH 271/428] fix dire hit and paralyze heal --- src/item.c | 2 ++ src/item_use.c | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/item.c b/src/item.c index da57c407667a..b2b19480a3d7 100644 --- a/src/item.c +++ b/src/item.c @@ -973,6 +973,8 @@ u32 GetItemStatus1Mask(u16 itemId) const u8 *effect = GetItemEffect(itemId); switch (effect[3]) { + case ITEM3_PARALYSIS: + return STATUS1_PARALYSIS; case ITEM3_FREEZE: return STATUS1_FREEZE; case ITEM3_BURN: diff --git a/src/item_use.c b/src/item_use.c index 8bcadfb2eb2e..3a838288b1aa 100644 --- a/src/item_use.c +++ b/src/item_use.c @@ -1154,7 +1154,7 @@ static bool32 CannotUseBagBattleItem(u16 itemId) } // Dire Hit if (battleUsage == EFFECT_ITEM_SET_FOCUS_ENERGY - && !(gBattleMons[gBattlerInMenuId].status2 & STATUS2_FOCUS_ENERGY)) + && (gBattleMons[gBattlerInMenuId].status2 & STATUS2_FOCUS_ENERGY)) { cannotUse++; } From 3aec63b8cfb23b0983b92ba03e89c31db84b20a1 Mon Sep 17 00:00:00 2001 From: Alex Date: Thu, 20 Apr 2023 15:08:42 +0200 Subject: [PATCH 272/428] new define to restore items after battle --- include/battle.h | 4 ++-- include/battle_util.h | 2 +- include/config/battle.h | 1 + src/battle_main.c | 6 +++--- src/battle_script_commands.c | 14 +++++++------- src/battle_util.c | 18 ++++++++++-------- 6 files changed, 24 insertions(+), 21 deletions(-) diff --git a/include/battle.h b/include/battle.h index 46975bec3cf3..f86a5c975c30 100644 --- a/include/battle.h +++ b/include/battle.h @@ -517,7 +517,7 @@ struct ZMoveData u8 splits[MAX_BATTLERS_COUNT]; }; -struct StolenItem +struct LostItem { u16 originalItem:15; u16 stolen:1; @@ -640,7 +640,7 @@ struct BattleStruct u16 moveEffect2; // For Knock Off u16 changedSpecies[PARTY_SIZE]; // For Zygarde or future forms when multiple mons can change into the same pokemon. u8 quickClawBattlerId; - struct StolenItem itemStolen[PARTY_SIZE]; // Player's team that had items stolen (two bytes per party member) + struct LostItem itemLost[PARTY_SIZE]; // Player's team that had items consumed or stolen (two bytes per party member) u8 blunderPolicy:1; // should blunder policy activate u8 swapDamageCategory:1; // Photon Geyser, Shell Side Arm, Light That Burns the Sky u8 forcedSwitch:4; // For each battler diff --git a/include/battle_util.h b/include/battle_util.h index 0661081e43b8..b83209a697cd 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -197,7 +197,7 @@ bool32 IsPartnerMonFromSameTrainer(u8 battlerId); u8 GetSplitBasedOnStats(u8 battlerId); void SortBattlersBySpeed(u8 *battlers, bool8 slowToFast); bool32 TestSheerForceFlag(u8 battler, u16 move); -void TryRestoreStolenItems(void); +void TryRestoreHeldItems(void); bool32 CanStealItem(u8 battlerStealing, u8 battlerItem, u16 item); void TrySaveExchangedItem(u8 battlerId, u16 stolenItem); bool32 IsPartnerMonFromSameTrainer(u8 battlerId); diff --git a/include/config/battle.h b/include/config/battle.h index 3e9ec9b9a5f4..4bead3ae8336 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -126,6 +126,7 @@ #define B_X_ITEMS_BUFF GEN_LATEST // In Gen7+, the X Items raise a stat by 2 stages instead of 1. #define B_MENTAL_HERB GEN_LATEST // In Gen5+, the Mental Herb cures Taunt, Encore, Torment, Heal Block, and Disable in addition to Infatuation from before. #define B_TRAINERS_KNOCK_OFF_ITEMS TRUE // If TRUE, trainers can steal/swap your items (non-berries are restored after battle). In vanilla games trainers cannot steal items. +#define B_RESTORE_HELD_BATTLE_ITEMS TRUE // In Gen9 all non berry items are restored after battle. #define B_SOUL_DEW_BOOST GEN_LATEST // In Gens3-6, Soul Dew boosts Lati@s' Sp. Atk and Sp. Def. In Gen7+ it boosts the power of their Psychic and Dragon type moves instead. #define B_NET_BALL_MODIFIER GEN_LATEST // In Gen7+, Net Ball's catch multiplier is x5 instead of x3. #define B_DIVE_BALL_MODIFIER GEN_LATEST // In Gen4+, Dive Ball's effectiveness increases by when Surfing or Fishing. diff --git a/src/battle_main.c b/src/battle_main.c index a5a9b5bbf623..01d79db3eb32 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -3189,7 +3189,7 @@ static void BattleStartClearSetData(void) { gBattleStruct->usedHeldItems[i][B_SIDE_PLAYER] = 0; gBattleStruct->usedHeldItems[i][B_SIDE_OPPONENT] = 0; - gBattleStruct->itemStolen[i].originalItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); + gBattleStruct->itemLost[i].originalItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); gPartyCriticalHits[i] = 0; gBattleStruct->allowedToChangeFormInWeather[i][B_SIDE_PLAYER] = FALSE; gBattleStruct->allowedToChangeFormInWeather[i][B_SIDE_OPPONENT] = FALSE; @@ -5387,9 +5387,9 @@ static void HandleEndTurn_FinishBattle(void) TestRunner_Battle_AfterLastTurn(); BeginFastPaletteFade(3); FadeOutMapMusic(5); - #if B_TRAINERS_KNOCK_OFF_ITEMS == TRUE + #if B_TRAINERS_KNOCK_OFF_ITEMS == TRUE || B_RESTORE_HELD_BATTLE_ITEMS == TRUE if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) - TryRestoreStolenItems(); + TryRestoreHeldItems(); #endif for (i = 0; i < PARTY_SIZE; i++) { diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 4e1494ce3828..228cbb81206f 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -7892,7 +7892,7 @@ static void BestowItem(u32 battlerAtk, u32 battlerDef) // Called by Cmd_removeitem. itemId represents the item that was removed, not being given. static bool32 TrySymbiosis(u32 battler, u32 itemId) { - if (!gBattleStruct->itemStolen[gBattlerPartyIndexes[battler]].stolen + if (!gBattleStruct->itemLost[gBattlerPartyIndexes[battler]].stolen && gBattleStruct->changedItems[battler] == ITEM_NONE && GetBattlerHoldEffect(battler, TRUE) != HOLD_EFFECT_EJECT_BUTTON && GetBattlerHoldEffect(battler, TRUE) != HOLD_EFFECT_EJECT_PACK @@ -11264,7 +11264,7 @@ static void Cmd_various(void) // Open party menu, wait to go to next instruction. else - { + { BtlController_EmitChoosePokemon(BUFFER_A, PARTY_ACTION_CHOOSE_FAINTED_MON, PARTY_SIZE, ABILITY_NONE, gBattleStruct->battlerPartyOrders[gBattlerAttacker]); MarkBattlerForControllerExec(gBattlerAttacker); } @@ -16469,7 +16469,7 @@ void BS_ItemRestoreHP(void) { } if (hp + healAmount > maxHP) healAmount = maxHP - hp; - + // Heal is applied as move damage if battler is active. if (battlerId != MAX_BATTLERS_COUNT && hp != 0) { @@ -16494,10 +16494,10 @@ void BS_ItemRestoreHP(void) { void BS_ItemCureStatus(void) { NATIVE_ARGS(); struct Pokemon *party = (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty; - + // Heal Status1 conditions. HealStatusConditions(&party[gBattleStruct->itemPartyIndex[gBattlerAttacker]], gBattleStruct->itemPartyIndex[gBattlerAttacker], GetItemStatus1Mask(gLastUsedItem), gBattlerAttacker); - + // Heal Status2 conditions if battler is active. if (gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[gBattlerAttacker]) { @@ -16506,10 +16506,10 @@ void BS_ItemCureStatus(void) { else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerAttacker)]) { - gBattleMons[gBattlerAttacker].status2 &= ~GetItemStatus2Mask(gLastUsedItem); + gBattleMons[gBattlerAttacker].status2 &= ~GetItemStatus2Mask(gLastUsedItem); gBattlerTarget = BATTLE_PARTNER(gBattlerAttacker); } - + if (GetItemStatus1Mask(gLastUsedItem) & STATUS1_SLEEP) gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_NIGHTMARE; diff --git a/src/battle_util.c b/src/battle_util.c index ac274bf0f833..e057b78dc325 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -10536,18 +10536,20 @@ void SortBattlersBySpeed(u8 *battlers, bool8 slowToFast) } } -void TryRestoreStolenItems(void) +void TryRestoreHeldItems(void) { u32 i; - u16 stolenItem = ITEM_NONE; + u16 lostItem = ITEM_NONE; for (i = 0; i < PARTY_SIZE; i++) { - if (gBattleStruct->itemStolen[i].stolen) + #if B_RESTORE_HELD_BATTLE_ITEMS == FALSE + if (gBattleStruct->itemLost[i].stolen) + #endif { - stolenItem = gBattleStruct->itemStolen[i].originalItem; - if (stolenItem != ITEM_NONE && ItemId_GetPocket(stolenItem) != POCKET_BERRIES) - SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &stolenItem); // Restore stolen non-berry items + lostItem = gBattleStruct->itemLost[i].originalItem; + if (lostItem != ITEM_NONE && ItemId_GetPocket(lostItem) != POCKET_BERRIES) + SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &lostItem); // Restore stolen non-berry items } } } @@ -10601,8 +10603,8 @@ void TrySaveExchangedItem(u8 battlerId, u16 stolenItem) if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && !(gBattleTypeFlags & BATTLE_TYPE_FRONTIER) && GetBattlerSide(battlerId) == B_SIDE_PLAYER - && stolenItem == gBattleStruct->itemStolen[gBattlerPartyIndexes[battlerId]].originalItem) - gBattleStruct->itemStolen[gBattlerPartyIndexes[battlerId]].stolen = TRUE; + && stolenItem == gBattleStruct->itemLost[gBattlerPartyIndexes[battlerId]].originalItem) + gBattleStruct->itemLost[gBattlerPartyIndexes[battlerId]].stolen = TRUE; #endif } From 6c7f5881e453631a1f336618b7e0120c33b7f140 Mon Sep 17 00:00:00 2001 From: citrusbolt <32605812+citrusbolt@users.noreply.github.com> Date: Thu, 20 Apr 2023 08:05:32 -0600 Subject: [PATCH 273/428] Add two EV-related configs (#2825) --- include/config/item.h | 13 +++++++------ include/config/pokemon.h | 1 + include/constants/pokemon.h | 4 ++++ src/pokemon.c | 12 ++++++++++-- 4 files changed, 22 insertions(+), 8 deletions(-) diff --git a/include/config/item.h b/include/config/item.h index f707b7a54001..09008d0f24f4 100644 --- a/include/config/item.h +++ b/include/config/item.h @@ -2,12 +2,13 @@ #define GUARD_CONFIG_ITEM_H // Item config -#define I_SHINY_CHARM_REROLLS 3 // Amount of re-rolls if the player has the Shiny Charm. Set to 0 to disable Shiny Charm's effects. -#define I_KEY_FOSSILS GEN_LATEST // In Gen4+, all Gen 3 fossils became regular items. -#define I_KEY_ESCAPE_ROPE GEN_LATEST // In Gen8, Escape Rope became a Key Item. Keep in mind, this will make it free to buy in marts. -#define I_HEALTH_RECOVERY GEN_LATEST // In Gen7+, certain healing items recover a different amount of HP than they used to. -#define I_SITRUS_BERRY_HEAL GEN_LATEST // In Gen4+, Sitrus Berry was changed from healing 30 HP to healing 25% of Max HP. -#define I_VITAMIN_EV_CAP GEN_LATEST // In Gen8, the Vitamins no longer have a cap of 100 EV per stat. +#define I_SHINY_CHARM_REROLLS 3 // Amount of re-rolls if the player has the Shiny Charm. Set to 0 to disable Shiny Charm's effects. +#define I_KEY_FOSSILS GEN_LATEST // In Gen4+, all Gen 3 fossils became regular items. +#define I_KEY_ESCAPE_ROPE GEN_LATEST // In Gen8, Escape Rope became a Key Item. Keep in mind, this will make it free to buy in marts. +#define I_HEALTH_RECOVERY GEN_LATEST // In Gen7+, certain healing items recover a different amount of HP than they used to. +#define I_SITRUS_BERRY_HEAL GEN_LATEST // In Gen4+, Sitrus Berry was changed from healing 30 HP to healing 25% of Max HP. +#define I_VITAMIN_EV_CAP GEN_LATEST // In Gen8+, the Vitamins no longer have a cap of 100 EV per stat. +#define I_BERRY_EV_JUMP GEN_LATEST // In Gen4 only, EV-lowering Berries lower a stat's EV to 100 if it is above 100. // TM config #define I_REUSABLE_TMS FALSE // In Gen5-8, TMs are reusable. Setting this to TRUE will make all vanilla TMs reusable, though they can also be cherry-picked by setting their importance to 1. diff --git a/include/config/pokemon.h b/include/config/pokemon.h index ce5faf2a6ec9..1cde573c96fe 100644 --- a/include/config/pokemon.h +++ b/include/config/pokemon.h @@ -21,6 +21,7 @@ // Other settings #define P_LEGENDARY_PERFECT_IVS GEN_LATEST // Since Gen 6, Legendaries, Mythicals and Ultra Beasts found in the wild or given through gifts have at least 3 perfect IVs. +#define P_EV_CAP GEN_LATEST // Since Gen 6, the max EVs per stat is 252 instead of 255. // Flag settings // To use the following features in scripting, replace the 0s with the flag ID you're assigning it to. diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h index cf6cc8751b5c..ddf879854ed8 100644 --- a/include/constants/pokemon.h +++ b/include/constants/pokemon.h @@ -201,7 +201,11 @@ #define MAX_PER_STAT_IVS 31 #define MAX_IV_MASK 31 #define USE_RANDOM_IVS (MAX_PER_STAT_IVS + 1) +#if P_EV_CAP >= GEN_6 +#define MAX_PER_STAT_EVS 252 +#else #define MAX_PER_STAT_EVS 255 +#endif #define MAX_TOTAL_EVS 510 #if I_VITAMIN_EV_CAP >= GEN_8 #define EV_ITEM_RAISE_LIMIT MAX_PER_STAT_EVS diff --git a/src/pokemon.c b/src/pokemon.c index 46eca90b29b8..e82cb98c30b5 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -5854,7 +5854,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov if (itemEffect[10] & ITEM10_IS_VITAMIN) evCap = EV_ITEM_RAISE_LIMIT; else - evCap = 252; + evCap = MAX_PER_STAT_EVS; if (dataSigned >= evCap) break; @@ -5880,6 +5880,10 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov break; } dataSigned += evChange; + #if I_EV_LOWERING_BERRY_JUMP == GEN_4 + if (dataSigned > 100) + dataSigned = 100; + #endif if (dataSigned < 0) dataSigned = 0; } @@ -6030,7 +6034,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov if (itemEffect[10] & ITEM10_IS_VITAMIN) evCap = EV_ITEM_RAISE_LIMIT; else - evCap = 252; + evCap = MAX_PER_STAT_EVS; if (dataSigned >= evCap) break; @@ -6056,6 +6060,10 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov break; } dataSigned += evChange; + #if I_BERRY_EV_JUMP == GEN_4 + if (dataSigned > 100) + dataSigned = 100; + #endif if (dataSigned < 0) dataSigned = 0; } From ae80d545c5b4f2f86baf702d4527d88c11b935b0 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Thu, 20 Apr 2023 16:12:11 +0200 Subject: [PATCH 274/428] Support for multi battles where Trainer has only one mon (#2670) --- src/battle_controller_opponent.c | 12 +++++++----- src/battle_interface.c | 5 +++++ src/battle_main.c | 1 + 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c index cb0499ac8f6e..4eda81b09431 100644 --- a/src/battle_controller_opponent.c +++ b/src/battle_controller_opponent.c @@ -228,9 +228,11 @@ static void Intro_DelayAndEnd(void) } } -static bool32 TwoIntroMons(u32 battlerId) // Double battle with both player pokemon active. +static bool32 TwoIntroMons(u32 battlerId) // Double battle with both opponent pokemon active. { - return (IsDoubleBattle() && IsValidForBattle(&gEnemyParty[gBattlerPartyIndexes[BATTLE_PARTNER(battlerId)]])); + return (IsDoubleBattle() + && IsValidForBattle(&gEnemyParty[gBattlerPartyIndexes[battlerId]]) + && IsValidForBattle(&gEnemyParty[gBattlerPartyIndexes[BATTLE_PARTNER(battlerId)]])); } static void Intro_WaitForShinyAnimAndHealthbox(void) @@ -1969,7 +1971,7 @@ static void SpriteCB_FreeOpponentSprite(struct Sprite *sprite) static void Task_StartSendOutAnim(u8 taskId) { - u8 savedActiveBank = gActiveBattler; + u8 savedActiveBattler = gActiveBattler; gActiveBattler = gTasks[taskId].data[0]; if ((!TwoIntroMons(gActiveBattler) || (gBattleTypeFlags & BATTLE_TYPE_MULTI)) && !BATTLE_TWO_VS_ONE_OPPONENT) @@ -1977,7 +1979,7 @@ static void Task_StartSendOutAnim(u8 taskId) gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; StartSendOutAnim(gActiveBattler, FALSE); } - else if ((gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS)) + else if ((gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) || (BATTLE_TWO_VS_ONE_OPPONENT && !TwoIntroMons(gActiveBattler))) { gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; StartSendOutAnim(gActiveBattler, FALSE); @@ -1992,7 +1994,7 @@ static void Task_StartSendOutAnim(u8 taskId) gActiveBattler ^= BIT_FLANK; } gBattlerControllerFuncs[gActiveBattler] = Intro_TryShinyAnimShowHealthbox; - gActiveBattler = savedActiveBank; + gActiveBattler = savedActiveBattler; DestroyTask(taskId); } diff --git a/src/battle_interface.c b/src/battle_interface.c index 7f7e1d20f0bd..bbe61a3727b9 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -690,12 +690,17 @@ static void InitLastUsedBallAssets(void) } // This function is here to cover a specific case - one player's mon in a 2 vs 1 double battle. In this scenario - display singles layout. +// The same goes for a 2 vs 1 where opponent has only one pokemon. u32 WhichBattleCoords(u32 battlerId) // 0 - singles, 1 - doubles { if (GetBattlerPosition(battlerId) == B_POSITION_PLAYER_LEFT && gPlayerPartyCount == 1 && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) return 0; + else if (GetBattlerPosition(battlerId) == B_POSITION_OPPONENT_LEFT + && gEnemyPartyCount == 1 + && !(gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS)) + return 0; else return IsDoubleBattle(); } diff --git a/src/battle_main.c b/src/battle_main.c index a5a9b5bbf623..2eecda65b2f2 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -594,6 +594,7 @@ static void CB2_InitBattleInternal(void) if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS && !BATTLE_TWO_VS_ONE_OPPONENT) CreateNPCTrainerParty(&gEnemyParty[PARTY_SIZE / 2], gTrainerBattleOpponent_B, FALSE); SetWildMonHeldItem(); + CalculateEnemyPartyCount(); } gMain.inBattle = TRUE; From 76f02774ea645eb285731b49f9c829bc17341b8b Mon Sep 17 00:00:00 2001 From: Martin Griffin Date: Thu, 20 Apr 2023 20:35:22 +0100 Subject: [PATCH 275/428] Detect memory leaks in tests Can use KNOWN_LEAKING; to specify that a test is known to leak memory. The location information is available in regular game builds. Thus it is available for use in debugging leaks in-game too. In the future we should consider replacing it with NULL if NDEBUG is defined. This is not currently possible because the tests do not force NDEBUG to be undefined. --- gflib/malloc.c | 69 +++++++++++++++++++-------------------- gflib/malloc.h | 41 +++++++++++++++++++++-- include/gba/defines.h | 3 ++ include/global.h | 3 ++ test/test.h | 5 +++ test/test_battle.h | 1 + test/test_runner.c | 26 +++++++++++++++ test/test_runner_battle.c | 10 ++++++ 8 files changed, 120 insertions(+), 38 deletions(-) diff --git a/gflib/malloc.c b/gflib/malloc.c index d0b94976358f..dcfac6ee8128 100644 --- a/gflib/malloc.c +++ b/gflib/malloc.c @@ -1,37 +1,18 @@ #include "global.h" +#include "malloc.h" static void *sHeapStart; static u32 sHeapSize; -#define MALLOC_SYSTEM_ID 0xA3A3 - -struct MemBlock { - // Whether this block is currently allocated. - bool16 flag; - - // Magic number used for error checking. Should equal MALLOC_SYSTEM_ID. - u16 magic; - - // Size of the block (not including this header struct). - u32 size; - - // Previous block pointer. Equals sHeapStart if this is the first block. - struct MemBlock *prev; - - // Next block pointer. Equals sHeapStart if this is the last block. - struct MemBlock *next; - - // Data in the memory block. (Arrays of length 0 are a GNU extension.) - u8 data[0]; -}; - void PutMemBlockHeader(void *block, struct MemBlock *prev, struct MemBlock *next, u32 size) { struct MemBlock *header = (struct MemBlock *)block; - header->flag = FALSE; + header->allocated = FALSE; + header->locationHi = 0; header->magic = MALLOC_SYSTEM_ID; header->size = size; + header->locationLo = 0; header->prev = prev; header->next = next; } @@ -41,7 +22,7 @@ void PutFirstMemBlockHeader(void *block, u32 size) PutMemBlockHeader(block, (struct MemBlock *)block, (struct MemBlock *)block, size - sizeof(struct MemBlock)); } -void *AllocInternal(void *heapStart, u32 size) +void *AllocInternal(void *heapStart, u32 size, const char *location) { struct MemBlock *pos = (struct MemBlock *)heapStart; struct MemBlock *head = pos; @@ -55,14 +36,14 @@ void *AllocInternal(void *heapStart, u32 size) for (;;) { // Loop through the blocks looking for unused block that's big enough. - if (!pos->flag) { + if (!pos->allocated) { foundBlockSize = pos->size; if (foundBlockSize >= size) { if (foundBlockSize - size < 2 * sizeof(struct MemBlock)) { // The block isn't much bigger than the requested size, // so just use it. - pos->flag = TRUE; + pos->allocated = TRUE; } else { // The block is significantly bigger than the requested // size, so split the rest into a separate block. @@ -71,7 +52,7 @@ void *AllocInternal(void *heapStart, u32 size) splitBlock = (struct MemBlock *)(pos->data + size); - pos->flag = TRUE; + pos->allocated = TRUE; pos->size = size; PutMemBlockHeader(splitBlock, pos, pos->next, foundBlockSize); @@ -82,6 +63,9 @@ void *AllocInternal(void *heapStart, u32 size) splitBlock->next->prev = splitBlock; } + pos->locationHi = ((uintptr_t)location) >> 14; + pos->locationLo = (uintptr_t)location; + return pos->data; } } @@ -98,12 +82,12 @@ void FreeInternal(void *heapStart, void *pointer) if (pointer) { struct MemBlock *head = (struct MemBlock *)heapStart; struct MemBlock *block = (struct MemBlock *)((u8 *)pointer - sizeof(struct MemBlock)); - block->flag = FALSE; + block->allocated = FALSE; // If the freed block isn't the last one, merge with the next block // if it's not in use. if (block->next != head) { - if (!block->next->flag) { + if (!block->next->allocated) { block->size += sizeof(struct MemBlock) + block->next->size; block->next->magic = 0; block->next = block->next->next; @@ -115,7 +99,7 @@ void FreeInternal(void *heapStart, void *pointer) // If the freed block isn't the first one, merge with the previous block // if it's not in use. if (block != head) { - if (!block->prev->flag) { + if (!block->prev->allocated) { block->prev->next = block->next; if (block->next != head) @@ -128,9 +112,9 @@ void FreeInternal(void *heapStart, void *pointer) } } -void *AllocZeroedInternal(void *heapStart, u32 size) +void *AllocZeroedInternal(void *heapStart, u32 size, const char *location) { - void *mem = AllocInternal(heapStart, size); + void *mem = AllocInternal(heapStart, size, location); if (mem != NULL) { if (size & 3) @@ -175,14 +159,14 @@ void InitHeap(void *heapStart, u32 heapSize) PutFirstMemBlockHeader(heapStart, heapSize); } -void *Alloc(u32 size) +void *Alloc_(u32 size, const char *location) { - return AllocInternal(sHeapStart, size); + return AllocInternal(sHeapStart, size, location); } -void *AllocZeroed(u32 size) +void *AllocZeroed_(u32 size, const char *location) { - return AllocZeroedInternal(sHeapStart, size); + return AllocZeroedInternal(sHeapStart, size, location); } void Free(void *pointer) @@ -207,3 +191,16 @@ bool32 CheckHeap() return TRUE; } + +const struct MemBlock *HeapHead(void) +{ + return (const struct MemBlock *)sHeapStart; +} + +const char *MemBlockLocation(const struct MemBlock *block) +{ + if (!block->allocated) + return NULL; + + return (const char *)(ROM_START | (block->locationHi << 14) | block->locationLo); +} diff --git a/gflib/malloc.h b/gflib/malloc.h index 851db83a62e5..f484b158064b 100644 --- a/gflib/malloc.h +++ b/gflib/malloc.h @@ -11,11 +11,48 @@ #define TRY_FREE_AND_SET_NULL(ptr) if (ptr != NULL) FREE_AND_SET_NULL(ptr) +#define MALLOC_SYSTEM_ID 0xA3A3 + +struct MemBlock +{ + // Whether this block is currently allocated. + u16 allocated:1; + + u16 unused_00:4; + + // High 11 bits of location pointer. + u16 locationHi:11; + + // Magic number used for error checking. Should equal MALLOC_SYSTEM_ID. + u16 magic; + + // Size of the block (not including this header struct). + u32 size:18; + + // Low 14 bits of location pointer. + u32 locationLo:14; + + // Previous block pointer. Equals sHeapStart if this is the first block. + struct MemBlock *prev; + + // Next block pointer. Equals sHeapStart if this is the last block. + struct MemBlock *next; + + // Data in the memory block. (Arrays of length 0 are a GNU extension.) + u8 data[0]; +}; + extern u8 gHeap[]; -void *Alloc(u32 size); -void *AllocZeroed(u32 size); +#define Alloc(size) Alloc_(size, __FILE__ ":" STR(__LINE__)) +#define AllocZeroed(size) AllocZeroed_(size, __FILE__ ":" STR(__LINE__)) + +void *Alloc_(u32 size, const char *location); +void *AllocZeroed_(u32 size, const char *location); void Free(void *pointer); void InitHeap(void *pointer, u32 size); +const struct MemBlock *HeapHead(void); +const char *MemBlockLocation(const struct MemBlock *block); + #endif // GUARD_ALLOC_H diff --git a/include/gba/defines.h b/include/gba/defines.h index 82caf56e6840..9959a17ef8e6 100644 --- a/include/gba/defines.h +++ b/include/gba/defines.h @@ -22,6 +22,9 @@ #define INTR_CHECK (*(u16 *)0x3007FF8) #define INTR_VECTOR (*(void **)0x3007FFC) +#define ROM_START 0x8000000 +#define ROM_END 0xA000000 + #define EWRAM_START 0x02000000 #define EWRAM_END (EWRAM_START + 0x40000) #define IWRAM_START 0x03000000 diff --git a/include/global.h b/include/global.h index c20f2ed4279b..eca45bdb6310 100644 --- a/include/global.h +++ b/include/global.h @@ -147,6 +147,9 @@ #define CAT(a, b) CAT_(a, b) #define CAT_(a, b) a ## b +#define STR(a) STR_(a) +#define STR_(a) #a + // Converts a string to a compound literal, essentially making it a pointer to const u8 #define COMPOUND_STRING(str) (const u8[]) _(str) diff --git a/test/test.h b/test/test.h index dfa1f12b1101..bf3e0b0041f3 100644 --- a/test/test.h +++ b/test/test.h @@ -46,6 +46,7 @@ struct TestRunnerState u8 result; u8 expectedResult; + bool8 expectLeaks:1; u32 timeoutSeconds; }; @@ -69,6 +70,7 @@ extern struct TestRunnerState gTestRunnerState; void CB2_TestRunner(void); void Test_ExpectedResult(enum TestResult); +void Test_ExpectLeaks(bool32); void Test_ExitWithResult(enum TestResult, const char *fmt, ...); s32 MgbaPrintf_(const char *fmt, ...); @@ -160,6 +162,9 @@ s32 MgbaPrintf_(const char *fmt, ...); #define KNOWN_FAILING \ Test_ExpectedResult(TEST_RESULT_FAIL) +#define KNOWN_LEAKING \ + Test_ExpectLeaks(TRUE) + #define PARAMETRIZE if (gFunctionTestRunnerState->parameters++ == gFunctionTestRunnerState->runParameter) #define TO_DO \ diff --git a/test/test_battle.h b/test/test_battle.h index 967bb661dd18..3597e9d167f3 100644 --- a/test/test_battle.h +++ b/test/test_battle.h @@ -615,6 +615,7 @@ struct BattleTestRunnerState bool8 runThen:1; bool8 runFinally:1; bool8 runningFinally:1; + bool8 tearDownBattle:1; struct BattleTestData data; u8 *results; u8 checkProgressParameter; diff --git a/test/test_runner.c b/test/test_runner.c index ef9f2da73815..64cb20e26914 100644 --- a/test/test_runner.c +++ b/test/test_runner.c @@ -111,6 +111,7 @@ void CB2_TestRunner(void) gTestRunnerState.state = STATE_REPORT_RESULT; gTestRunnerState.result = TEST_RESULT_PASS; gTestRunnerState.expectedResult = TEST_RESULT_PASS; + gTestRunnerState.expectLeaks = FALSE; if (gTestRunnerHeadless) gTestRunnerState.timeoutSeconds = TIMEOUT_SECONDS; else @@ -141,6 +142,26 @@ void CB2_TestRunner(void) if (gTestRunnerState.test->runner->tearDown) gTestRunnerState.test->runner->tearDown(gTestRunnerState.test->data); + if (!gTestRunnerState.expectLeaks) + { + const struct MemBlock *head = HeapHead(); + const struct MemBlock *block = head; + do + { + if (block->allocated) + { + const char *location = MemBlockLocation(block); + if (location) + MgbaPrintf_("%s: %d bytes not freed", location, block->size); + else + MgbaPrintf_(": %d bytes not freed", block->size); + gTestRunnerState.result = TEST_RESULT_FAIL; + } + block = block->next; + } + while (block != head); + } + if (gTestRunnerState.test->runner == &gAssumptionsRunner) { if (gTestRunnerState.result != TEST_RESULT_PASS) @@ -238,6 +259,11 @@ void Test_ExpectedResult(enum TestResult result) gTestRunnerState.expectedResult = result; } +void Test_ExpectLeaks(bool32 expectLeaks) +{ + gTestRunnerState.expectLeaks = expectLeaks; +} + static void FunctionTest_SetUp(void *data) { (void)data; diff --git a/test/test_runner_battle.c b/test/test_runner_battle.c index 365120f1370b..8654f78cd050 100644 --- a/test/test_runner_battle.c +++ b/test/test_runner_battle.c @@ -893,6 +893,15 @@ static void BattleTest_TearDown(void *data) { if (STATE) { + // Free resources that aren't cleaned up when the battle was + // aborted unexpectedly. + if (STATE->tearDownBattle) + { + FreeMonSpritesGfx(); + FreeBattleSpritesData(); + FreeBattleResources(); + FreeAllWindowBuffers(); + } FREE_AND_SET_NULL(STATE->results); FREE_AND_SET_NULL(STATE); } @@ -923,6 +932,7 @@ static bool32 BattleTest_HandleExitWithResult(void *data, enum TestResult result } else { + STATE->tearDownBattle = TRUE; return FALSE; } } From c81a985b5b76779c9419289dddb57ef047bfae70 Mon Sep 17 00:00:00 2001 From: Martin Griffin Date: Thu, 20 Apr 2023 21:45:16 +0100 Subject: [PATCH 276/428] Fix USE_ITEM explicit targets --- include/recorded_battle.h | 1 + src/battle_controller_recorded_opponent.c | 1 + src/battle_controller_recorded_player.c | 1 + test/test_runner_battle.c | 8 +++++--- 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/include/recorded_battle.h b/include/recorded_battle.h index d04e89c3626b..ea66096d7f24 100644 --- a/include/recorded_battle.h +++ b/include/recorded_battle.h @@ -45,6 +45,7 @@ enum RECORDED_PARTY_INDEX, RECORDED_BATTLE_PALACE_ACTION, RECORDED_ITEM_ID, + RECORDED_ITEM_TARGET, }; extern u32 gRecordedBattleRngSeed; diff --git a/src/battle_controller_recorded_opponent.c b/src/battle_controller_recorded_opponent.c index e7fc6fd84ad4..bb41b42d65d9 100644 --- a/src/battle_controller_recorded_opponent.c +++ b/src/battle_controller_recorded_opponent.c @@ -1441,6 +1441,7 @@ static void RecordedOpponentHandleChooseItem(void) u8 byte1 = RecordedBattle_GetBattlerAction(RECORDED_ITEM_ID, gActiveBattler); u8 byte2 = RecordedBattle_GetBattlerAction(RECORDED_ITEM_ID, gActiveBattler); gBattleStruct->chosenItem[gActiveBattler] = (byte1 << 8) | byte2; + gBattleStruct->itemPartyIndex[gActiveBattler] = RecordedBattle_GetBattlerAction(RECORDED_ITEM_TARGET, gActiveBattler); BtlController_EmitOneReturnValue(BUFFER_B, gBattleStruct->chosenItem[gActiveBattler]); RecordedOpponentBufferExecCompleted(); } diff --git a/src/battle_controller_recorded_player.c b/src/battle_controller_recorded_player.c index 87f575839937..efbd60f18bfd 100644 --- a/src/battle_controller_recorded_player.c +++ b/src/battle_controller_recorded_player.c @@ -1465,6 +1465,7 @@ static void RecordedPlayerHandleChooseItem(void) u8 byte1 = RecordedBattle_GetBattlerAction(RECORDED_ITEM_ID, gActiveBattler); u8 byte2 = RecordedBattle_GetBattlerAction(RECORDED_ITEM_ID, gActiveBattler); gBattleStruct->chosenItem[gActiveBattler] = (byte1 << 8) | byte2; + gBattleStruct->itemPartyIndex[gActiveBattler] = RecordedBattle_GetBattlerAction(RECORDED_ITEM_TARGET, gActiveBattler); BtlController_EmitOneReturnValue(BUFFER_B, gBattleStruct->chosenItem[gActiveBattler]); RecordedPlayerBufferExecCompleted(); } diff --git a/test/test_runner_battle.c b/test/test_runner_battle.c index 365120f1370b..2a44cc018bd1 100644 --- a/test/test_runner_battle.c +++ b/test/test_runner_battle.c @@ -1540,9 +1540,11 @@ void UseItem(u32 sourceLine, struct BattlePokemon *battler, struct ItemContext c PushBattlerAction(sourceLine, battlerId, RECORDED_ITEM_ID, (ctx.itemId >> 8) & 0xFF); PushBattlerAction(sourceLine, battlerId, RECORDED_ITEM_ID, ctx.itemId & 0xFF); if (ctx.explicitPartyIndex) - gBattleStruct->itemPartyIndex[battlerId] = ctx.partyIndex; - if (ctx.explicitMove) - gBattleStruct->itemPartyIndex[battlerId] = i; + PushBattlerAction(sourceLine, battlerId, RECORDED_ITEM_TARGET, ctx.partyIndex); + else if (ctx.explicitMove) + PushBattlerAction(sourceLine, battlerId, RECORDED_ITEM_TARGET, i); + else + PushBattlerAction(sourceLine, battlerId, RECORDED_ITEM_TARGET, 0); DATA.actionBattlers |= 1 << battlerId; } From e1e8277fbaa9897c981e7619473df49c6cbe04a2 Mon Sep 17 00:00:00 2001 From: CallmeEchoo Date: Fri, 21 Apr 2023 00:29:58 +0200 Subject: [PATCH 277/428] batch 1 --- test/item_effect_cure_status.c | 101 +++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 test/item_effect_cure_status.c diff --git a/test/item_effect_cure_status.c b/test/item_effect_cure_status.c new file mode 100644 index 000000000000..db8e56a45d48 --- /dev/null +++ b/test/item_effect_cure_status.c @@ -0,0 +1,101 @@ +#include "global.h" +#include "test_battle.h" + +SINGLE_BATTLE_TEST("Paralyze Heal heals a Pokemon from being paralyzed") +{ + GIVEN { + ASSUME(gItems[ITEM_PARALYZE_HEAL].battleUsage == EFFECT_ITEM_CURE_STATUS); + PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_PARALYSIS); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { USE_ITEM(player, ITEM_PARALYZE_HEAL, partyIndex: 0); } + } SCENE { + MESSAGE("Paralyze Heal cured Wobbuffet's status!"); + } +} + +SINGLE_BATTLE_TEST("Antidote heals a Pokemon from being poisoned") +{ + GIVEN { + ASSUME(gItems[ITEM_ANTIDOTE].battleUsage == EFFECT_ITEM_CURE_STATUS); + PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_PSN_ANY); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { USE_ITEM(player, ITEM_ANTIDOTE, partyIndex: 0); } + } SCENE { + MESSAGE("Antidote cured Wobbuffet's status!"); + } +} + +SINGLE_BATTLE_TEST("Awakening heals a Pokemon from being asleep") +{ + GIVEN { + ASSUME(gItems[ITEM_AWAKENING].battleUsage == EFFECT_ITEM_CURE_STATUS); + PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_SLEEP); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { USE_ITEM(player, ITEM_AWAKENING, partyIndex: 0); } + } SCENE { + MESSAGE("Awakening cured Wobbuffet's status!"); + } +} + +SINGLE_BATTLE_TEST("Burn Heal heals a Pokemon from being burned") +{ + GIVEN { + ASSUME(gItems[ITEM_BURN_HEAL].battleUsage == EFFECT_ITEM_CURE_STATUS); + PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_BURN); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { USE_ITEM(player, ITEM_BURN_HEAL, partyIndex: 0); } + } SCENE { + MESSAGE("Burn Heal cured Wobbuffet's status!"); + } +} + +SINGLE_BATTLE_TEST("Ice Heal heals a Pokemon from being paralyzed") +{ + GIVEN { + ASSUME(gItems[ITEM_ICE_HEAL].battleUsage == EFFECT_ITEM_CURE_STATUS); + PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_FREEZE); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { USE_ITEM(player, ITEM_ICE_HEAL, partyIndex: 0); } + } SCENE { + MESSAGE("Ice Heal cured Wobbuffet's status!"); + } +} + +SINGLE_BATTLE_TEST("Full Heal heals a Pokemon from any primary status") +{ + u16 status; + PARAMETRIZE{ status = STATUS1_BURN; } + PARAMETRIZE{ status = STATUS1_FREEZE; } + PARAMETRIZE{ status = STATUS1_PARALYSIS; } + PARAMETRIZE{ status = STATUS1_POISON; } + PARAMETRIZE{ status = STATUS1_TOXIC_POISON; } + PARAMETRIZE{ status = STATUS1_SLEEP; } + GIVEN { + ASSUME(gItems[ITEM_FULL_HEAL].battleUsage == EFFECT_ITEM_CURE_STATUS); + PLAYER(SPECIES_WOBBUFFET) { Status1(status); } + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { USE_ITEM(player, ITEM_FULL_HEAL, partyIndex: 0); } + } SCENE { + MESSAGE("Full Heal cured Wobbuffet's status!"); + } +} + +SINGLE_BATTLE_TEST("Full Heal heals a Pokemon from being confused") +{ + GIVEN { + ASSUME(gItems[ITEM_FULL_HEAL].battleUsage == EFFECT_ITEM_CURE_STATUS); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_GENGAR); + } WHEN { + TURN { MOVE(opponent, MOVE_CONFUSE_RAY); } + TURN { USE_ITEM(player, ITEM_FULL_HEAL, partyIndex: 0); } + } SCENE { + MESSAGE("Full Heal cured Wobbuffet's status!"); + } +} From 94cb569c4790b0b4fe5a0bd6d814e15cfeb75312 Mon Sep 17 00:00:00 2001 From: CallmeEchoo <65783283+CallmeEchoo@users.noreply.github.com> Date: Fri, 21 Apr 2023 10:25:58 +0200 Subject: [PATCH 278/428] local specialties tests --- test/item_effect_cure_status.c | 222 ++++++++++++++++++++++++++++++++- 1 file changed, 217 insertions(+), 5 deletions(-) diff --git a/test/item_effect_cure_status.c b/test/item_effect_cure_status.c index db8e56a45d48..9a850a131163 100644 --- a/test/item_effect_cure_status.c +++ b/test/item_effect_cure_status.c @@ -18,7 +18,20 @@ SINGLE_BATTLE_TEST("Antidote heals a Pokemon from being poisoned") { GIVEN { ASSUME(gItems[ITEM_ANTIDOTE].battleUsage == EFFECT_ITEM_CURE_STATUS); - PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_PSN_ANY); } + PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_POISON); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { USE_ITEM(player, ITEM_ANTIDOTE, partyIndex: 0); } + } SCENE { + MESSAGE("Antidote cured Wobbuffet's status!"); + } +} + +SINGLE_BATTLE_TEST("Antidote heals a Pokemon from being badly poisoned") +{ + GIVEN { + ASSUME(gItems[ITEM_ANTIDOTE].battleUsage == EFFECT_ITEM_CURE_STATUS); + PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_TOXIC_POISON); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { USE_ITEM(player, ITEM_ANTIDOTE, partyIndex: 0); } @@ -86,16 +99,215 @@ SINGLE_BATTLE_TEST("Full Heal heals a Pokemon from any primary status") } } -SINGLE_BATTLE_TEST("Full Heal heals a Pokemon from being confused") +SINGLE_BATTLE_TEST("Pewter Crunchies heals a Pokemon from any primary status") +{ + u16 status; + PARAMETRIZE{ status = STATUS1_BURN; } + PARAMETRIZE{ status = STATUS1_FREEZE; } + PARAMETRIZE{ status = STATUS1_PARALYSIS; } + PARAMETRIZE{ status = STATUS1_POISON; } + PARAMETRIZE{ status = STATUS1_TOXIC_POISON; } + PARAMETRIZE{ status = STATUS1_SLEEP; } + GIVEN { + ASSUME(gItems[ITEM_PEWTER_CRUNCHIES].battleUsage == EFFECT_ITEM_CURE_STATUS); + PLAYER(SPECIES_WOBBUFFET) { Status1(status); } + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { USE_ITEM(player, ITEM_PEWTER_CRUNCHIES, partyIndex: 0); } + } SCENE { + MESSAGE("PewtrCrnches cured Wobbuffet's status!"); + } +} + +SINGLE_BATTLE_TEST("Lava Cookies heals a Pokemon from any primary status") { + u16 status; + PARAMETRIZE{ status = STATUS1_BURN; } + PARAMETRIZE{ status = STATUS1_FREEZE; } + PARAMETRIZE{ status = STATUS1_PARALYSIS; } + PARAMETRIZE{ status = STATUS1_POISON; } + PARAMETRIZE{ status = STATUS1_TOXIC_POISON; } + PARAMETRIZE{ status = STATUS1_SLEEP; } GIVEN { - ASSUME(gItems[ITEM_FULL_HEAL].battleUsage == EFFECT_ITEM_CURE_STATUS); + ASSUME(gItems[ITEM_LAVA_COOKIE].battleUsage == EFFECT_ITEM_CURE_STATUS); + PLAYER(SPECIES_WOBBUFFET) { Status1(status); } + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { USE_ITEM(player, ITEM_LAVA_COOKIE, partyIndex: 0); } + } SCENE { + MESSAGE("Lava Cookie cured Wobbuffet's status!"); + } +} + +SINGLE_BATTLE_TEST("Rage Candy Bar heals a Pokemon from any primary status") +{ + u16 status; + PARAMETRIZE{ status = STATUS1_BURN; } + PARAMETRIZE{ status = STATUS1_FREEZE; } + PARAMETRIZE{ status = STATUS1_PARALYSIS; } + PARAMETRIZE{ status = STATUS1_POISON; } + PARAMETRIZE{ status = STATUS1_TOXIC_POISON; } + PARAMETRIZE{ status = STATUS1_SLEEP; } + GIVEN { + ASSUME(gItems[ITEM_RAGE_CANDY_BAR].battleUsage == EFFECT_ITEM_CURE_STATUS); + PLAYER(SPECIES_WOBBUFFET) { Status1(status); } + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { USE_ITEM(player, ITEM_RAGE_CANDY_BAR, partyIndex: 0); } + } SCENE { + MESSAGE("RageCandyBar cured Wobbuffet's status!"); + } +} + +SINGLE_BATTLE_TEST("Old Gateu heals a Pokemon from any primary status") +{ + u16 status; + PARAMETRIZE{ status = STATUS1_BURN; } + PARAMETRIZE{ status = STATUS1_FREEZE; } + PARAMETRIZE{ status = STATUS1_PARALYSIS; } + PARAMETRIZE{ status = STATUS1_POISON; } + PARAMETRIZE{ status = STATUS1_TOXIC_POISON; } + PARAMETRIZE{ status = STATUS1_SLEEP; } + GIVEN { + ASSUME(gItems[ITEM_OLD_GATEAU].battleUsage == EFFECT_ITEM_CURE_STATUS); + PLAYER(SPECIES_WOBBUFFET) { Status1(status); } + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { USE_ITEM(player, ITEM_OLD_GATEAU, partyIndex: 0); } + } SCENE { + MESSAGE("Old Gateau cured Wobbuffet's status!"); + } +} + +SINGLE_BATTLE_TEST("Casteliacone heals a Pokemon from any primary status") +{ + u16 status; + PARAMETRIZE{ status = STATUS1_BURN; } + PARAMETRIZE{ status = STATUS1_FREEZE; } + PARAMETRIZE{ status = STATUS1_PARALYSIS; } + PARAMETRIZE{ status = STATUS1_POISON; } + PARAMETRIZE{ status = STATUS1_TOXIC_POISON; } + PARAMETRIZE{ status = STATUS1_SLEEP; } + GIVEN { + ASSUME(gItems[ITEM_CASTELIACONE].battleUsage == EFFECT_ITEM_CURE_STATUS); + PLAYER(SPECIES_WOBBUFFET) { Status1(status); } + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { USE_ITEM(player, ITEM_CASTELIACONE, partyIndex: 0); } + } SCENE { + MESSAGE("Casteliacone cured Wobbuffet's status!"); + } +} + +SINGLE_BATTLE_TEST("Lumiose Galette heals a Pokemon from any primary status") +{ + u16 status; + PARAMETRIZE{ status = STATUS1_BURN; } + PARAMETRIZE{ status = STATUS1_FREEZE; } + PARAMETRIZE{ status = STATUS1_PARALYSIS; } + PARAMETRIZE{ status = STATUS1_POISON; } + PARAMETRIZE{ status = STATUS1_TOXIC_POISON; } + PARAMETRIZE{ status = STATUS1_SLEEP; } + GIVEN { + ASSUME(gItems[ITEM_LUMIOSE_GALETTE].battleUsage == EFFECT_ITEM_CURE_STATUS); + PLAYER(SPECIES_WOBBUFFET) { Status1(status); } + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { USE_ITEM(player, ITEM_LUMIOSE_GALETTE, partyIndex: 0); } + } SCENE { + MESSAGE("LumioseGlete cured Wobbuffet's status!"); + } +} + +SINGLE_BATTLE_TEST("Shalour Sable heals a Pokemon from any primary status") +{ + u16 status; + PARAMETRIZE{ status = STATUS1_BURN; } + PARAMETRIZE{ status = STATUS1_FREEZE; } + PARAMETRIZE{ status = STATUS1_PARALYSIS; } + PARAMETRIZE{ status = STATUS1_POISON; } + PARAMETRIZE{ status = STATUS1_TOXIC_POISON; } + PARAMETRIZE{ status = STATUS1_SLEEP; } + GIVEN { + ASSUME(gItems[ITEM_SHALOUR_SABLE].battleUsage == EFFECT_ITEM_CURE_STATUS); + PLAYER(SPECIES_WOBBUFFET) { Status1(status); } + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { USE_ITEM(player, ITEM_SHALOUR_SABLE, partyIndex: 0); } + } SCENE { + MESSAGE("ShalourSable cured Wobbuffet's status!"); + } +} + +SINGLE_BATTLE_TEST("Big Malasada heals a Pokemon from any primary status") +{ + u16 status; + PARAMETRIZE{ status = STATUS1_BURN; } + PARAMETRIZE{ status = STATUS1_FREEZE; } + PARAMETRIZE{ status = STATUS1_PARALYSIS; } + PARAMETRIZE{ status = STATUS1_POISON; } + PARAMETRIZE{ status = STATUS1_TOXIC_POISON; } + PARAMETRIZE{ status = STATUS1_SLEEP; } + GIVEN { + ASSUME(gItems[ITEM_BIG_MALASADA].battleUsage == EFFECT_ITEM_CURE_STATUS); + PLAYER(SPECIES_WOBBUFFET) { Status1(status); } + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { USE_ITEM(player, ITEM_BIG_MALASADA, partyIndex: 0); } + } SCENE { + MESSAGE("Big Malasada cured Wobbuffet's status!"); + } +} + +SINGLE_BATTLE_TEST("Full Heal and local specialties heal a Pokemon from being confused") +{ + u16 item; + PARAMETRIZE { item = ITEM_FULL_HEAL; } + PARAMETRIZE { item = ITEM_PEWTER_CRUNCHIES; } + PARAMETRIZE { item = ITEM_LAVA_COOKIE; } + PARAMETRIZE { item = ITEM_RAGE_CANDY_BAR; } + PARAMETRIZE { item = ITEM_OLD_GATEAU; } + PARAMETRIZE { item = ITEM_CASTELIACONE; } + PARAMETRIZE { item = ITEM_LUMIOSE_GALETTE; } + PARAMETRIZE { item = ITEM_SHALOUR_SABLE; } + PARAMETRIZE { item = ITEM_BIG_MALASADA; } + GIVEN { + ASSUME(gItems[item].battleUsage == EFFECT_ITEM_CURE_STATUS); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_GENGAR); } WHEN { TURN { MOVE(opponent, MOVE_CONFUSE_RAY); } - TURN { USE_ITEM(player, ITEM_FULL_HEAL, partyIndex: 0); } + TURN { USE_ITEM(player, item, partyIndex: 0); } } SCENE { - MESSAGE("Full Heal cured Wobbuffet's status!"); + switch (item) + { + case ITEM_FULL_HEAL: + MESSAGE("Full Heal cured Wobbuffet's status!"); + break; + case ITEM_PEWTER_CRUNCHIES: + MESSAGE("PewtrCrnches cured Wobbuffet's status!"); + break; + case ITEM_LAVA_COOKIE: + MESSAGE("Lava Cookie cured Wobbuffet's status!"); + break; + case ITEM_RAGE_CANDY_BAR: + MESSAGE("RageCandyBar cured Wobbuffet's status!"); + break; + case ITEM_OLD_GATEAU: + MESSAGE("Old Gateau cured Wobbuffet's status!"); + break; + case ITEM_CASTELIACONE: + MESSAGE("Casteliacone cured Wobbuffet's status!"); + break; + case ITEM_LUMIOSE_GALETTE: + MESSAGE("LumioseGlete cured Wobbuffet's status!"); + break; + case ITEM_SHALOUR_SABLE: + MESSAGE("ShalourSable cured Wobbuffet's status!"); + break; + case ITEM_BIG_MALASADA: + MESSAGE("Big Malasada cured Wobbuffet's status!"); + break; + } } } From 301a12fe98c9d892ace9de3f6d085ed8df5b35cc Mon Sep 17 00:00:00 2001 From: CallmeEchoo <65783283+CallmeEchoo@users.noreply.github.com> Date: Fri, 21 Apr 2023 10:51:43 +0200 Subject: [PATCH 279/428] fix battleUsage for heal powder --- src/data/items.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/items.h b/src/data/items.h index 84436be55b40..2df5c363872b 100644 --- a/src/data/items.h +++ b/src/data/items.h @@ -526,7 +526,7 @@ const struct Item gItems[] = .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, - .battleUsage = EFFECT_ITEM_RESTORE_HP, + .battleUsage = EFFECT_ITEM_CURE_STATUS, .flingPower = 30, }, From 4a08ede2c49ba55ac9d358d95ee240b238325192 Mon Sep 17 00:00:00 2001 From: Alex Date: Fri, 21 Apr 2023 20:13:30 +0200 Subject: [PATCH 280/428] Add GetMovesArray in GetMovesArray --- src/battle_ai_util.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 05e7aec58f11..53b5ebed6c47 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -477,7 +477,7 @@ bool32 IsAiBattlerAware(u32 battlerId) { if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_OMNISCIENT) return TRUE; - + return BattlerHasAi(battlerId); } @@ -1129,7 +1129,7 @@ bool32 CanTargetFaintAi(u8 battlerDef, u8 battlerAtk) { s32 i, dmg; u32 unusable = AI_DATA->moveLimitations[battlerDef]; - u16 *moves = gBattleResources->battleHistory->usedMoves[battlerDef]; + u16 *moves = GetMovesArray(battlerDef); for (i = 0; i < MAX_MON_MOVES; i++) { From 1cc28c89ef6b23bb37555e40d02839684dc80a91 Mon Sep 17 00:00:00 2001 From: CallmeEchoo Date: Fri, 21 Apr 2023 20:36:41 +0200 Subject: [PATCH 281/428] X item tests --- test/item_effect_increase_stat.c | 125 ++++++++++++++++++++++++++++++- 1 file changed, 124 insertions(+), 1 deletion(-) diff --git a/test/item_effect_increase_stat.c b/test/item_effect_increase_stat.c index b459e3ac88fe..7fcbe7279464 100644 --- a/test/item_effect_increase_stat.c +++ b/test/item_effect_increase_stat.c @@ -1,7 +1,7 @@ #include "global.h" #include "test_battle.h" -SINGLE_BATTLE_TEST("X-Attack sharply raises battler's Attack stat", s16 damage) +SINGLE_BATTLE_TEST("X Attack sharply raises battler's Attack stat", s16 damage) { u16 useItem; PARAMETRIZE { useItem = FALSE; } @@ -23,3 +23,126 @@ SINGLE_BATTLE_TEST("X-Attack sharply raises battler's Attack stat", s16 damage) EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage); } } + +SINGLE_BATTLE_TEST("X Defense sharply raises battler's Defense stat", s16 damage) +{ + u16 useItem; + PARAMETRIZE { useItem = FALSE; } + PARAMETRIZE { useItem = TRUE; } + GIVEN { + ASSUME(gItems[ITEM_X_DEFENSE].battleUsage == EFFECT_ITEM_INCREASE_STAT); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + if (useItem) TURN { USE_ITEM(player, ITEM_X_DEFENSE); } + TURN { MOVE(opponent, MOVE_TACKLE); } + } SCENE { + MESSAGE("Foe Wobbuffet used Tackle!"); + HP_BAR(player, captureDamage: &results[i].damage); + } FINALLY { + if (B_X_ITEMS_BUFF >= GEN_7) + EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.5), results[1].damage); + else + EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.66), results[1].damage); + } +} + +SINGLE_BATTLE_TEST("X Sp. Atk sharply raises battler's Sp. Attack stat", s16 damage) +{ + u16 useItem; + PARAMETRIZE { useItem = FALSE; } + PARAMETRIZE { useItem = TRUE; } + GIVEN { + ASSUME(gItems[ITEM_X_SP_ATK].battleUsage == EFFECT_ITEM_INCREASE_STAT); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + if (useItem) TURN { USE_ITEM(player, ITEM_X_SP_ATK); } + TURN { MOVE(player, MOVE_DISARMING_VOICE); } + } SCENE { + MESSAGE("Wobbuffet used DisrmngVoice!"); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + if (B_X_ITEMS_BUFF >= GEN_7) + EXPECT_MUL_EQ(results[0].damage, Q_4_12(2.0), results[1].damage); + else + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage); + } +} + +SINGLE_BATTLE_TEST("X Sp. Def sharply raises battler's Sp. Defense stat", s16 damage) +{ + u16 useItem; + PARAMETRIZE { useItem = FALSE; } + PARAMETRIZE { useItem = TRUE; } + GIVEN { + ASSUME(gItems[ITEM_X_SP_DEF].battleUsage == EFFECT_ITEM_INCREASE_STAT); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + if (useItem) TURN { USE_ITEM(player, ITEM_X_SP_DEF); } + TURN { MOVE(opponent, MOVE_DISARMING_VOICE); } + } SCENE { + MESSAGE("Foe Wobbuffet used DisrmngVoice!"); + HP_BAR(player, captureDamage: &results[i].damage); + } FINALLY { + if (B_X_ITEMS_BUFF >= GEN_7) + EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.5), results[1].damage); + else + EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.66), results[1].damage); + } +} + +SINGLE_BATTLE_TEST("X Speed sharply raises battler's Speed stat", s16 damage) +{ + u16 useItem; + PARAMETRIZE { useItem = FALSE; } + PARAMETRIZE { useItem = TRUE; } + GIVEN { + ASSUME(gItems[ITEM_X_SPEED].battleUsage == EFFECT_ITEM_INCREASE_STAT); + if (B_X_ITEMS_BUFF >= GEN_7) + { + PLAYER(SPECIES_WOBBUFFET) { Speed(3); }; + OPPONENT(SPECIES_WOBBUFFET) { Speed(4); }; + } + else + { + PLAYER(SPECIES_WOBBUFFET) { Speed(4); }; + OPPONENT(SPECIES_WOBBUFFET) { Speed(5); }; + } + } WHEN { + if (useItem) TURN { USE_ITEM(player, ITEM_X_SPEED); } + TURN { MOVE(player, MOVE_TACKLE); MOVE(opponent, MOVE_TACKLE); } + } SCENE { + if (useItem) + { + MESSAGE("Wobbuffet used Tackle!"); + MESSAGE("Foe Wobbuffet used Tackle!"); + } else + { + MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("Wobbuffet used Tackle!"); + } + } +} + +SINGLE_BATTLE_TEST("X Accuracy sharply raises battler's Accuracy stat", s16 damage) +{ + + ASSUME(gBattleMoves[MOVE_SING].accuracy == 55); + if (B_X_ITEMS_BUFF >= GEN_7) + PASSES_RANDOMLY(gBattleMoves[MOVE_SING].accuracy * 5 / 3, 100, RNG_ACCURACY); + else + PASSES_RANDOMLY(gBattleMoves[MOVE_SING].accuracy * 4 / 3, 100, RNG_ACCURACY); + GIVEN { + ASSUME(gItems[ITEM_X_ACCURACY].battleUsage == EFFECT_ITEM_INCREASE_STAT); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { USE_ITEM(player, ITEM_X_ACCURACY); } + TURN { MOVE(player, MOVE_SING); } + } SCENE { + MESSAGE("Wobbuffet used Sing!"); + MESSAGE("Foe Wobbuffet fell asleep!"); + } +} From b4aee00432275f757d519640b497b9ee7d78e136 Mon Sep 17 00:00:00 2001 From: CallmeEchoo Date: Fri, 21 Apr 2023 20:57:19 +0200 Subject: [PATCH 282/428] replace pokemon with battler in string --- test/item_effect_cure_status.c | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/test/item_effect_cure_status.c b/test/item_effect_cure_status.c index 9a850a131163..9747d18be63f 100644 --- a/test/item_effect_cure_status.c +++ b/test/item_effect_cure_status.c @@ -1,7 +1,7 @@ #include "global.h" #include "test_battle.h" -SINGLE_BATTLE_TEST("Paralyze Heal heals a Pokemon from being paralyzed") +SINGLE_BATTLE_TEST("Paralyze Heal heals a battler from being paralyzed") { GIVEN { ASSUME(gItems[ITEM_PARALYZE_HEAL].battleUsage == EFFECT_ITEM_CURE_STATUS); @@ -14,7 +14,7 @@ SINGLE_BATTLE_TEST("Paralyze Heal heals a Pokemon from being paralyzed") } } -SINGLE_BATTLE_TEST("Antidote heals a Pokemon from being poisoned") +SINGLE_BATTLE_TEST("Antidote heals a battler from being poisoned") { GIVEN { ASSUME(gItems[ITEM_ANTIDOTE].battleUsage == EFFECT_ITEM_CURE_STATUS); @@ -27,7 +27,7 @@ SINGLE_BATTLE_TEST("Antidote heals a Pokemon from being poisoned") } } -SINGLE_BATTLE_TEST("Antidote heals a Pokemon from being badly poisoned") +SINGLE_BATTLE_TEST("Antidote heals a battler from being badly poisoned") { GIVEN { ASSUME(gItems[ITEM_ANTIDOTE].battleUsage == EFFECT_ITEM_CURE_STATUS); @@ -40,7 +40,7 @@ SINGLE_BATTLE_TEST("Antidote heals a Pokemon from being badly poisoned") } } -SINGLE_BATTLE_TEST("Awakening heals a Pokemon from being asleep") +SINGLE_BATTLE_TEST("Awakening heals a battler from being asleep") { GIVEN { ASSUME(gItems[ITEM_AWAKENING].battleUsage == EFFECT_ITEM_CURE_STATUS); @@ -53,7 +53,7 @@ SINGLE_BATTLE_TEST("Awakening heals a Pokemon from being asleep") } } -SINGLE_BATTLE_TEST("Burn Heal heals a Pokemon from being burned") +SINGLE_BATTLE_TEST("Burn Heal heals a battler from being burned") { GIVEN { ASSUME(gItems[ITEM_BURN_HEAL].battleUsage == EFFECT_ITEM_CURE_STATUS); @@ -66,7 +66,7 @@ SINGLE_BATTLE_TEST("Burn Heal heals a Pokemon from being burned") } } -SINGLE_BATTLE_TEST("Ice Heal heals a Pokemon from being paralyzed") +SINGLE_BATTLE_TEST("Ice Heal heals a battler from being paralyzed") { GIVEN { ASSUME(gItems[ITEM_ICE_HEAL].battleUsage == EFFECT_ITEM_CURE_STATUS); @@ -79,7 +79,7 @@ SINGLE_BATTLE_TEST("Ice Heal heals a Pokemon from being paralyzed") } } -SINGLE_BATTLE_TEST("Full Heal heals a Pokemon from any primary status") +SINGLE_BATTLE_TEST("Full Heal heals a battler from any primary status") { u16 status; PARAMETRIZE{ status = STATUS1_BURN; } @@ -99,7 +99,7 @@ SINGLE_BATTLE_TEST("Full Heal heals a Pokemon from any primary status") } } -SINGLE_BATTLE_TEST("Pewter Crunchies heals a Pokemon from any primary status") +SINGLE_BATTLE_TEST("Pewter Crunchies heals a battler from any primary status") { u16 status; PARAMETRIZE{ status = STATUS1_BURN; } @@ -119,7 +119,7 @@ SINGLE_BATTLE_TEST("Pewter Crunchies heals a Pokemon from any primary status") } } -SINGLE_BATTLE_TEST("Lava Cookies heals a Pokemon from any primary status") +SINGLE_BATTLE_TEST("Lava Cookies heals a battler from any primary status") { u16 status; PARAMETRIZE{ status = STATUS1_BURN; } @@ -139,7 +139,7 @@ SINGLE_BATTLE_TEST("Lava Cookies heals a Pokemon from any primary status") } } -SINGLE_BATTLE_TEST("Rage Candy Bar heals a Pokemon from any primary status") +SINGLE_BATTLE_TEST("Rage Candy Bar heals a battler from any primary status") { u16 status; PARAMETRIZE{ status = STATUS1_BURN; } @@ -159,7 +159,7 @@ SINGLE_BATTLE_TEST("Rage Candy Bar heals a Pokemon from any primary status") } } -SINGLE_BATTLE_TEST("Old Gateu heals a Pokemon from any primary status") +SINGLE_BATTLE_TEST("Old Gateu heals a battler from any primary status") { u16 status; PARAMETRIZE{ status = STATUS1_BURN; } @@ -179,7 +179,7 @@ SINGLE_BATTLE_TEST("Old Gateu heals a Pokemon from any primary status") } } -SINGLE_BATTLE_TEST("Casteliacone heals a Pokemon from any primary status") +SINGLE_BATTLE_TEST("Casteliacone heals a battler from any primary status") { u16 status; PARAMETRIZE{ status = STATUS1_BURN; } @@ -199,7 +199,7 @@ SINGLE_BATTLE_TEST("Casteliacone heals a Pokemon from any primary status") } } -SINGLE_BATTLE_TEST("Lumiose Galette heals a Pokemon from any primary status") +SINGLE_BATTLE_TEST("Lumiose Galette heals a battler from any primary status") { u16 status; PARAMETRIZE{ status = STATUS1_BURN; } @@ -219,7 +219,7 @@ SINGLE_BATTLE_TEST("Lumiose Galette heals a Pokemon from any primary status") } } -SINGLE_BATTLE_TEST("Shalour Sable heals a Pokemon from any primary status") +SINGLE_BATTLE_TEST("Shalour Sable heals a battler from any primary status") { u16 status; PARAMETRIZE{ status = STATUS1_BURN; } @@ -239,7 +239,7 @@ SINGLE_BATTLE_TEST("Shalour Sable heals a Pokemon from any primary status") } } -SINGLE_BATTLE_TEST("Big Malasada heals a Pokemon from any primary status") +SINGLE_BATTLE_TEST("Big Malasada heals a battler from any primary status") { u16 status; PARAMETRIZE{ status = STATUS1_BURN; } @@ -259,7 +259,7 @@ SINGLE_BATTLE_TEST("Big Malasada heals a Pokemon from any primary status") } } -SINGLE_BATTLE_TEST("Full Heal and local specialties heal a Pokemon from being confused") +SINGLE_BATTLE_TEST("Full Heal and local specialties heal a battler from being confused") { u16 item; PARAMETRIZE { item = ITEM_FULL_HEAL; } From cbac6d0e87bc1c99a5cb70c0c78971306bc1eadd Mon Sep 17 00:00:00 2001 From: CallmeEchoo Date: Fri, 21 Apr 2023 20:57:30 +0200 Subject: [PATCH 283/428] Full Restore test --- test/item_effect_heal_and_cure_status.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 test/item_effect_heal_and_cure_status.c diff --git a/test/item_effect_heal_and_cure_status.c b/test/item_effect_heal_and_cure_status.c new file mode 100644 index 000000000000..742f432f50c5 --- /dev/null +++ b/test/item_effect_heal_and_cure_status.c @@ -0,0 +1,25 @@ +#include "global.h" +#include "test_battle.h" + +SINGLE_BATTLE_TEST("Full Restore restores a battler's HP and cures any primary status") +{ + u16 status; + PARAMETRIZE{ status = STATUS1_BURN; } + PARAMETRIZE{ status = STATUS1_FREEZE; } + PARAMETRIZE{ status = STATUS1_PARALYSIS; } + PARAMETRIZE{ status = STATUS1_POISON; } + PARAMETRIZE{ status = STATUS1_TOXIC_POISON; } + PARAMETRIZE{ status = STATUS1_SLEEP; } + GIVEN { + ASSUME(gItems[ITEM_FULL_RESTORE].battleUsage == EFFECT_ITEM_HEAL_AND_CURE_STATUS); + PLAYER(SPECIES_WOBBUFFET) { HP(1); MaxHP(300); Status1(status); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN{ USE_ITEM(player, ITEM_FULL_RESTORE, partyIndex: 0); } + } SCENE { + MESSAGE("Full Restore restored Wobbuffet's health!"); + } FINALLY { + EXPECT_EQ(player->hp, player->maxHP); + EXPECT_EQ(player->status1, STATUS1_NONE); + } +} \ No newline at end of file From 30204e99533bf826486c3cd535a04a2c97dc5e09 Mon Sep 17 00:00:00 2001 From: Alex Date: Fri, 21 Apr 2023 20:59:54 +0200 Subject: [PATCH 284/428] fix wrong z-move ususage --- src/battle_z_move.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/battle_z_move.c b/src/battle_z_move.c index 104a44daa595..f435253c7b47 100644 --- a/src/battle_z_move.c +++ b/src/battle_z_move.c @@ -215,11 +215,7 @@ bool32 IsViableZMove(u8 battlerId, u16 move) if (move != MOVE_NONE && zMove != MOVE_Z_STATUS && gBattleMoves[move].type == ItemId_GetSecondaryId(item)) { - if (IS_MOVE_STATUS(move)) - gBattleStruct->zmove.chosenZMove = move; - else - gBattleStruct->zmove.chosenZMove = GetTypeBasedZMove(move, battlerId); - + gBattleStruct->zmove.chosenZMove = GetTypeBasedZMove(move, battlerId); return TRUE; } } From 38476bd22c2ef28ab3f5401244178cc7d5e1056c Mon Sep 17 00:00:00 2001 From: CallmeEchoo Date: Fri, 21 Apr 2023 21:37:02 +0200 Subject: [PATCH 285/428] fix Full Restore not healing confusion --- data/battle_scripts_2.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/battle_scripts_2.s b/data/battle_scripts_2.s index dee482d1d3b8..ea1a67a68061 100644 --- a/data/battle_scripts_2.s +++ b/data/battle_scripts_2.s @@ -76,7 +76,7 @@ BattleScript_ItemCureStatus:: BattleScript_ItemHealAndCureStatus:: call BattleScript_UseItemMessage itemrestorehp - curestatus BS_ATTACKER + itemcurestatus printstring STRINGID_ITEMRESTOREDSPECIESHEALTH waitmessage B_WAIT_TIME_LONG bichalfword gMoveResultFlags, MOVE_RESULT_NO_EFFECT From 4bad450ecfe113e51c7ce1400ca577b906435ada Mon Sep 17 00:00:00 2001 From: CallmeEchoo Date: Fri, 21 Apr 2023 21:57:00 +0200 Subject: [PATCH 286/428] Full Restore confusion test PLS READ COMMENT THIS IS KNOWN_FAILING --- test/item_effect_heal_and_cure_status.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/test/item_effect_heal_and_cure_status.c b/test/item_effect_heal_and_cure_status.c index 742f432f50c5..d9bf0cf7c81c 100644 --- a/test/item_effect_heal_and_cure_status.c +++ b/test/item_effect_heal_and_cure_status.c @@ -22,4 +22,25 @@ SINGLE_BATTLE_TEST("Full Restore restores a battler's HP and cures any primary s EXPECT_EQ(player->hp, player->maxHP); EXPECT_EQ(player->status1, STATUS1_NONE); } -} \ No newline at end of file +} + +SINGLE_BATTLE_TEST("Full Restore restores a battler's HP and cures confusion") +{ + // known failing bc even though it passes there is an underlying bug still that is only obvious in the replay. see #2938 + // this also means that this test is likely not very good so I advice this to be redone + KNOWN_FAILING; + GIVEN { + ASSUME(gItems[ITEM_FULL_RESTORE].battleUsage == EFFECT_ITEM_HEAL_AND_CURE_STATUS); + PLAYER(SPECIES_WOBBUFFET) { HP(1); MaxHP(300);}; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN{ MOVE(opponent, MOVE_CONFUSE_RAY); } + TURN{ USE_ITEM(player, ITEM_FULL_RESTORE, partyIndex: 0); } + TURN{ MOVE(player, MOVE_TACKLE); } + } SCENE { + MESSAGE("Full Restore restored Wobbuffet's health!"); + NONE_OF { MESSAGE("Wobbuffet is confused!"); } + } FINALLY { + EXPECT_EQ(player->hp, player->maxHP); + } +} From ff609f2761d69e1d2d0fa042a54fbe9dba95af0b Mon Sep 17 00:00:00 2001 From: CallmeEchoo <65783283+CallmeEchoo@users.noreply.github.com> Date: Fri, 21 Apr 2023 22:51:33 +0200 Subject: [PATCH 287/428] healing items tests --- test/item_effect_restore_hp.c | 182 ++++++++++++++++++++++++++++++++++ 1 file changed, 182 insertions(+) diff --git a/test/item_effect_restore_hp.c b/test/item_effect_restore_hp.c index 971ec2400b04..d5d652f65b94 100644 --- a/test/item_effect_restore_hp.c +++ b/test/item_effect_restore_hp.c @@ -17,6 +17,188 @@ SINGLE_BATTLE_TEST("Potion restores a battler's HP by 20") } } +SINGLE_BATTLE_TEST("Super Potion restores a battler's HP by 50") +{ + s16 damage; + GIVEN { + ASSUME(gItems[ITEM_SUPER_POTION].battleUsage == EFFECT_ITEM_RESTORE_HP); + PLAYER(SPECIES_WOBBUFFET) { HP(50); MaxHP(100); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { USE_ITEM(player, ITEM_SUPER_POTION, partyIndex: 0); } + } SCENE { + HP_BAR(player, captureDamage: &damage); + } FINALLY { + EXPECT_EQ(damage, -50); + } +} + +SINGLE_BATTLE_TEST("Hyper Potion restores a battler's HP by 200") +{ + s16 damage; + GIVEN { + ASSUME(gItems[ITEM_HYPER_POTION].battleUsage == EFFECT_ITEM_RESTORE_HP); + PLAYER(SPECIES_WOBBUFFET) { HP(100); MaxHP(400); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { USE_ITEM(player, ITEM_HYPER_POTION, partyIndex: 0); } + } SCENE { + HP_BAR(player, captureDamage: &damage); + } FINALLY { + EXPECT_EQ(damage, -200); + } +} + +SINGLE_BATTLE_TEST("Max Potion restores a battler's HP fully") +{ + s16 damage; + GIVEN { + ASSUME(gItems[ITEM_MAX_POTION].battleUsage == EFFECT_ITEM_RESTORE_HP); + PLAYER(SPECIES_WOBBUFFET) { HP(1); MaxHP(400); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { USE_ITEM(player, ITEM_MAX_POTION, partyIndex: 0); } + } FINALLY { + EXPECT_EQ(player->hp, player->maxHP); + } +} + +SINGLE_BATTLE_TEST("Fresh Water restores a battler's HP by 30") +{ + s16 damage; + GIVEN { + ASSUME(gItems[ITEM_FRESH_WATER].battleUsage == EFFECT_ITEM_RESTORE_HP); + PLAYER(SPECIES_WOBBUFFET) { HP(50); MaxHP(100); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { USE_ITEM(player, ITEM_FRESH_WATER, partyIndex: 0); } + } SCENE { + HP_BAR(player, captureDamage: &damage); + } FINALLY { + EXPECT_EQ(damage, -30); + } +} + +SINGLE_BATTLE_TEST("Soda Pop restores a battler's HP by 50") +{ + s16 damage; + GIVEN { + ASSUME(gItems[ITEM_SODA_POP].battleUsage == EFFECT_ITEM_RESTORE_HP); + PLAYER(SPECIES_WOBBUFFET) { HP(50); MaxHP(100); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { USE_ITEM(player, ITEM_SODA_POP, partyIndex: 0); } + } SCENE { + HP_BAR(player, captureDamage: &damage); + } FINALLY { + EXPECT_EQ(damage, -50); + } +} + +SINGLE_BATTLE_TEST("Lemonade restores a battler's HP by 70") +{ + s16 damage; + GIVEN { + ASSUME(gItems[ITEM_LEMONADE].battleUsage == EFFECT_ITEM_RESTORE_HP); + PLAYER(SPECIES_WOBBUFFET) { HP(50); MaxHP(200); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { USE_ITEM(player, ITEM_LEMONADE, partyIndex: 0); } + } SCENE { + HP_BAR(player, captureDamage: &damage); + } FINALLY { + EXPECT_EQ(damage, -70); + } +} + +SINGLE_BATTLE_TEST("Moomoo Milk restores a battler's HP by 100") +{ + s16 damage; + GIVEN { + ASSUME(gItems[ITEM_MOOMOO_MILK].battleUsage == EFFECT_ITEM_RESTORE_HP); + PLAYER(SPECIES_WOBBUFFET) { HP(50); MaxHP(200); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { USE_ITEM(player, ITEM_MOOMOO_MILK, partyIndex: 0); } + } SCENE { + HP_BAR(player, captureDamage: &damage); + } FINALLY { + EXPECT_EQ(damage, -100); + } +} + +SINGLE_BATTLE_TEST("Energy Powder restores a battler's HP by 50(60)") +{ + s16 damage; + GIVEN { + ASSUME(gItems[ITEM_ENERGY_POWDER].battleUsage == EFFECT_ITEM_RESTORE_HP); + PLAYER(SPECIES_WOBBUFFET) { HP(50); MaxHP(200); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { USE_ITEM(player, ITEM_ENERGY_POWDER, partyIndex: 0); } + } SCENE { + HP_BAR(player, captureDamage: &damage); + } FINALLY { + #if I_HEALTH_RECOVERY >= GEN_7 + EXPECT_EQ(damage, -60); + #else + EXPECT_EQ(damage, -50); + #endif + } +} + +SINGLE_BATTLE_TEST("Energy Root restores a battler's HP by 120(200)") +{ + s16 damage; + GIVEN { + ASSUME(gItems[ITEM_ENERGY_ROOT].battleUsage == EFFECT_ITEM_RESTORE_HP); + PLAYER(SPECIES_WOBBUFFET) { HP(50); MaxHP(300); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { USE_ITEM(player, ITEM_ENERGY_ROOT, partyIndex: 0); } + } SCENE { + HP_BAR(player, captureDamage: &damage); + } FINALLY { + #if I_HEALTH_RECOVERY >= GEN_7 + EXPECT_EQ(damage, -120); + #else + EXPECT_EQ(damage, -200); + #endif + } +} + +SINGLE_BATTLE_TEST("Sweet Heart restores a battler's HP by 20") +{ + s16 damage; + GIVEN { + ASSUME(gItems[ITEM_SWEET_HEART].battleUsage == EFFECT_ITEM_RESTORE_HP); + PLAYER(SPECIES_WOBBUFFET) { HP(50); MaxHP(100); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { USE_ITEM(player, ITEM_SWEET_HEART, partyIndex: 0); } + } SCENE { + HP_BAR(player, captureDamage: &damage); + } FINALLY { + EXPECT_EQ(damage, -20); + } +} + +SINGLE_BATTLE_TEST("Oran Berry restores a battler's HP by 10") +{ + s16 damage; + GIVEN { + ASSUME(gItems[ITEM_ORAN_BERRY].battleUsage == EFFECT_ITEM_RESTORE_HP); + PLAYER(SPECIES_WOBBUFFET) { HP(50); MaxHP(100); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { USE_ITEM(player, ITEM_ORAN_BERRY, partyIndex: 0); } + } SCENE { + HP_BAR(player, captureDamage: &damage); + } FINALLY { + EXPECT_EQ(damage, -10); + } +} + SINGLE_BATTLE_TEST("Sitrus Berry restores a battler's HP") { s16 damage; From 929e4749dabafb2e90a97a2b9fa8bd93c33dd2f7 Mon Sep 17 00:00:00 2001 From: CallmeEchoo Date: Sat, 22 Apr 2023 02:34:50 +0200 Subject: [PATCH 288/428] temporarily rename test string for easier test runs --- test/item_effect_cure_status.c | 32 ++++++++++++++++---------------- test/item_effect_restore_hp.c | 26 +++++++++++++------------- 2 files changed, 29 insertions(+), 29 deletions(-) diff --git a/test/item_effect_cure_status.c b/test/item_effect_cure_status.c index 9747d18be63f..f014a29b7862 100644 --- a/test/item_effect_cure_status.c +++ b/test/item_effect_cure_status.c @@ -1,7 +1,7 @@ #include "global.h" #include "test_battle.h" -SINGLE_BATTLE_TEST("Paralyze Heal heals a battler from being paralyzed") +SINGLE_BATTLE_TEST("Cure Status: Paralyze Heal heals a battler from being paralyzed") { GIVEN { ASSUME(gItems[ITEM_PARALYZE_HEAL].battleUsage == EFFECT_ITEM_CURE_STATUS); @@ -14,7 +14,7 @@ SINGLE_BATTLE_TEST("Paralyze Heal heals a battler from being paralyzed") } } -SINGLE_BATTLE_TEST("Antidote heals a battler from being poisoned") +SINGLE_BATTLE_TEST("Cure Status: Antidote heals a battler from being poisoned") { GIVEN { ASSUME(gItems[ITEM_ANTIDOTE].battleUsage == EFFECT_ITEM_CURE_STATUS); @@ -27,7 +27,7 @@ SINGLE_BATTLE_TEST("Antidote heals a battler from being poisoned") } } -SINGLE_BATTLE_TEST("Antidote heals a battler from being badly poisoned") +SINGLE_BATTLE_TEST("Cure Status: Antidote heals a battler from being badly poisoned") { GIVEN { ASSUME(gItems[ITEM_ANTIDOTE].battleUsage == EFFECT_ITEM_CURE_STATUS); @@ -40,7 +40,7 @@ SINGLE_BATTLE_TEST("Antidote heals a battler from being badly poisoned") } } -SINGLE_BATTLE_TEST("Awakening heals a battler from being asleep") +SINGLE_BATTLE_TEST("Cure Status: Awakening heals a battler from being asleep") { GIVEN { ASSUME(gItems[ITEM_AWAKENING].battleUsage == EFFECT_ITEM_CURE_STATUS); @@ -53,7 +53,7 @@ SINGLE_BATTLE_TEST("Awakening heals a battler from being asleep") } } -SINGLE_BATTLE_TEST("Burn Heal heals a battler from being burned") +SINGLE_BATTLE_TEST("Cure Status: Burn Heal heals a battler from being burned") { GIVEN { ASSUME(gItems[ITEM_BURN_HEAL].battleUsage == EFFECT_ITEM_CURE_STATUS); @@ -66,7 +66,7 @@ SINGLE_BATTLE_TEST("Burn Heal heals a battler from being burned") } } -SINGLE_BATTLE_TEST("Ice Heal heals a battler from being paralyzed") +SINGLE_BATTLE_TEST("Cure Status: Ice Heal heals a battler from being paralyzed") { GIVEN { ASSUME(gItems[ITEM_ICE_HEAL].battleUsage == EFFECT_ITEM_CURE_STATUS); @@ -79,7 +79,7 @@ SINGLE_BATTLE_TEST("Ice Heal heals a battler from being paralyzed") } } -SINGLE_BATTLE_TEST("Full Heal heals a battler from any primary status") +SINGLE_BATTLE_TEST("Cure Status: Full Heal heals a battler from any primary status") { u16 status; PARAMETRIZE{ status = STATUS1_BURN; } @@ -99,7 +99,7 @@ SINGLE_BATTLE_TEST("Full Heal heals a battler from any primary status") } } -SINGLE_BATTLE_TEST("Pewter Crunchies heals a battler from any primary status") +SINGLE_BATTLE_TEST("Cure Status: Pewter Crunchies heals a battler from any primary status") { u16 status; PARAMETRIZE{ status = STATUS1_BURN; } @@ -119,7 +119,7 @@ SINGLE_BATTLE_TEST("Pewter Crunchies heals a battler from any primary status") } } -SINGLE_BATTLE_TEST("Lava Cookies heals a battler from any primary status") +SINGLE_BATTLE_TEST("Cure Status: Lava Cookies heals a battler from any primary status") { u16 status; PARAMETRIZE{ status = STATUS1_BURN; } @@ -139,7 +139,7 @@ SINGLE_BATTLE_TEST("Lava Cookies heals a battler from any primary status") } } -SINGLE_BATTLE_TEST("Rage Candy Bar heals a battler from any primary status") +SINGLE_BATTLE_TEST("Cure Status: Rage Candy Bar heals a battler from any primary status") { u16 status; PARAMETRIZE{ status = STATUS1_BURN; } @@ -159,7 +159,7 @@ SINGLE_BATTLE_TEST("Rage Candy Bar heals a battler from any primary status") } } -SINGLE_BATTLE_TEST("Old Gateu heals a battler from any primary status") +SINGLE_BATTLE_TEST("Cure Status: Old Gateu heals a battler from any primary status") { u16 status; PARAMETRIZE{ status = STATUS1_BURN; } @@ -179,7 +179,7 @@ SINGLE_BATTLE_TEST("Old Gateu heals a battler from any primary status") } } -SINGLE_BATTLE_TEST("Casteliacone heals a battler from any primary status") +SINGLE_BATTLE_TEST("Cure Status: Casteliacone heals a battler from any primary status") { u16 status; PARAMETRIZE{ status = STATUS1_BURN; } @@ -199,7 +199,7 @@ SINGLE_BATTLE_TEST("Casteliacone heals a battler from any primary status") } } -SINGLE_BATTLE_TEST("Lumiose Galette heals a battler from any primary status") +SINGLE_BATTLE_TEST("Cure Status: Lumiose Galette heals a battler from any primary status") { u16 status; PARAMETRIZE{ status = STATUS1_BURN; } @@ -219,7 +219,7 @@ SINGLE_BATTLE_TEST("Lumiose Galette heals a battler from any primary status") } } -SINGLE_BATTLE_TEST("Shalour Sable heals a battler from any primary status") +SINGLE_BATTLE_TEST("Cure Status: Shalour Sable heals a battler from any primary status") { u16 status; PARAMETRIZE{ status = STATUS1_BURN; } @@ -239,7 +239,7 @@ SINGLE_BATTLE_TEST("Shalour Sable heals a battler from any primary status") } } -SINGLE_BATTLE_TEST("Big Malasada heals a battler from any primary status") +SINGLE_BATTLE_TEST("Cure Status: Big Malasada heals a battler from any primary status") { u16 status; PARAMETRIZE{ status = STATUS1_BURN; } @@ -259,7 +259,7 @@ SINGLE_BATTLE_TEST("Big Malasada heals a battler from any primary status") } } -SINGLE_BATTLE_TEST("Full Heal and local specialties heal a battler from being confused") +SINGLE_BATTLE_TEST("Cure Status: Full Heal and local specialties heal a battler from being confused") { u16 item; PARAMETRIZE { item = ITEM_FULL_HEAL; } diff --git a/test/item_effect_restore_hp.c b/test/item_effect_restore_hp.c index d5d652f65b94..8898c772b5b8 100644 --- a/test/item_effect_restore_hp.c +++ b/test/item_effect_restore_hp.c @@ -1,7 +1,7 @@ #include "global.h" #include "test_battle.h" -SINGLE_BATTLE_TEST("Potion restores a battler's HP by 20") +SINGLE_BATTLE_TEST("Restore HP: Potion restores a battler's HP by 20") { s16 damage; GIVEN { @@ -17,7 +17,7 @@ SINGLE_BATTLE_TEST("Potion restores a battler's HP by 20") } } -SINGLE_BATTLE_TEST("Super Potion restores a battler's HP by 50") +SINGLE_BATTLE_TEST("Restore HP: Super Potion restores a battler's HP by 50") { s16 damage; GIVEN { @@ -33,7 +33,7 @@ SINGLE_BATTLE_TEST("Super Potion restores a battler's HP by 50") } } -SINGLE_BATTLE_TEST("Hyper Potion restores a battler's HP by 200") +SINGLE_BATTLE_TEST("Restore HP: Hyper Potion restores a battler's HP by 200") { s16 damage; GIVEN { @@ -49,7 +49,7 @@ SINGLE_BATTLE_TEST("Hyper Potion restores a battler's HP by 200") } } -SINGLE_BATTLE_TEST("Max Potion restores a battler's HP fully") +SINGLE_BATTLE_TEST("Restore HP: Max Potion restores a battler's HP fully") { s16 damage; GIVEN { @@ -63,7 +63,7 @@ SINGLE_BATTLE_TEST("Max Potion restores a battler's HP fully") } } -SINGLE_BATTLE_TEST("Fresh Water restores a battler's HP by 30") +SINGLE_BATTLE_TEST("Restore HP: Fresh Water restores a battler's HP by 30") { s16 damage; GIVEN { @@ -79,7 +79,7 @@ SINGLE_BATTLE_TEST("Fresh Water restores a battler's HP by 30") } } -SINGLE_BATTLE_TEST("Soda Pop restores a battler's HP by 50") +SINGLE_BATTLE_TEST("Restore HP: Soda Pop restores a battler's HP by 50") { s16 damage; GIVEN { @@ -95,7 +95,7 @@ SINGLE_BATTLE_TEST("Soda Pop restores a battler's HP by 50") } } -SINGLE_BATTLE_TEST("Lemonade restores a battler's HP by 70") +SINGLE_BATTLE_TEST("Restore HP: Lemonade restores a battler's HP by 70") { s16 damage; GIVEN { @@ -111,7 +111,7 @@ SINGLE_BATTLE_TEST("Lemonade restores a battler's HP by 70") } } -SINGLE_BATTLE_TEST("Moomoo Milk restores a battler's HP by 100") +SINGLE_BATTLE_TEST("Restore HP: Moomoo Milk restores a battler's HP by 100") { s16 damage; GIVEN { @@ -127,7 +127,7 @@ SINGLE_BATTLE_TEST("Moomoo Milk restores a battler's HP by 100") } } -SINGLE_BATTLE_TEST("Energy Powder restores a battler's HP by 50(60)") +SINGLE_BATTLE_TEST("Restore HP: Energy Powder restores a battler's HP by 60(50)") { s16 damage; GIVEN { @@ -147,7 +147,7 @@ SINGLE_BATTLE_TEST("Energy Powder restores a battler's HP by 50(60)") } } -SINGLE_BATTLE_TEST("Energy Root restores a battler's HP by 120(200)") +SINGLE_BATTLE_TEST("Restore HP: Energy Root restores a battler's HP by 120(200)") { s16 damage; GIVEN { @@ -167,7 +167,7 @@ SINGLE_BATTLE_TEST("Energy Root restores a battler's HP by 120(200)") } } -SINGLE_BATTLE_TEST("Sweet Heart restores a battler's HP by 20") +SINGLE_BATTLE_TEST("Restore HP: Sweet Heart restores a battler's HP by 20") { s16 damage; GIVEN { @@ -183,7 +183,7 @@ SINGLE_BATTLE_TEST("Sweet Heart restores a battler's HP by 20") } } -SINGLE_BATTLE_TEST("Oran Berry restores a battler's HP by 10") +SINGLE_BATTLE_TEST("Restore HP: Oran Berry restores a battler's HP by 10") { s16 damage; GIVEN { @@ -199,7 +199,7 @@ SINGLE_BATTLE_TEST("Oran Berry restores a battler's HP by 10") } } -SINGLE_BATTLE_TEST("Sitrus Berry restores a battler's HP") +SINGLE_BATTLE_TEST("Restore HP: Sitrus Berry restores a battler's HP") { s16 damage; GIVEN { From 42215c94e7953375a3a4c0acde8ebac57d67963f Mon Sep 17 00:00:00 2001 From: CallmeEchoo Date: Sat, 22 Apr 2023 02:39:46 +0200 Subject: [PATCH 289/428] actually working restore hp tests --- test/item_effect_restore_hp.c | 106 ++++++++++++++-------------------- 1 file changed, 43 insertions(+), 63 deletions(-) diff --git a/test/item_effect_restore_hp.c b/test/item_effect_restore_hp.c index 8898c772b5b8..67c5eb202fe7 100644 --- a/test/item_effect_restore_hp.c +++ b/test/item_effect_restore_hp.c @@ -1,51 +1,48 @@ #include "global.h" #include "test_battle.h" +#define TEST_HP 1 +#define MAX_HP 400 + SINGLE_BATTLE_TEST("Restore HP: Potion restores a battler's HP by 20") { s16 damage; GIVEN { ASSUME(gItems[ITEM_POTION].battleUsage == EFFECT_ITEM_RESTORE_HP); - PLAYER(SPECIES_WOBBUFFET) { HP(50); MaxHP(100); } + PLAYER(SPECIES_WOBBUFFET) { HP(TEST_HP); MaxHP(MAX_HP); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { USE_ITEM(player, ITEM_POTION, partyIndex: 0); } } SCENE { - HP_BAR(player, captureDamage: &damage); - } FINALLY { - EXPECT_EQ(damage, -20); + HP_BAR(player, hp: TEST_HP + 20); } } -SINGLE_BATTLE_TEST("Restore HP: Super Potion restores a battler's HP by 50") +SINGLE_BATTLE_TEST("Restore HP: Super Potion restores a battler's HP by 60") { s16 damage; GIVEN { ASSUME(gItems[ITEM_SUPER_POTION].battleUsage == EFFECT_ITEM_RESTORE_HP); - PLAYER(SPECIES_WOBBUFFET) { HP(50); MaxHP(100); } + PLAYER(SPECIES_WOBBUFFET) { HP(TEST_HP); MaxHP(MAX_HP); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { USE_ITEM(player, ITEM_SUPER_POTION, partyIndex: 0); } } SCENE { - HP_BAR(player, captureDamage: &damage); - } FINALLY { - EXPECT_EQ(damage, -50); + HP_BAR(player, hp: TEST_HP + 60); } } -SINGLE_BATTLE_TEST("Restore HP: Hyper Potion restores a battler's HP by 200") +SINGLE_BATTLE_TEST("Restore HP: Hyper Potion restores a battler's HP by 120") { s16 damage; GIVEN { ASSUME(gItems[ITEM_HYPER_POTION].battleUsage == EFFECT_ITEM_RESTORE_HP); - PLAYER(SPECIES_WOBBUFFET) { HP(100); MaxHP(400); } + PLAYER(SPECIES_WOBBUFFET) { HP(TEST_HP); MaxHP(MAX_HP); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { USE_ITEM(player, ITEM_HYPER_POTION, partyIndex: 0); } } SCENE { - HP_BAR(player, captureDamage: &damage); - } FINALLY { - EXPECT_EQ(damage, -200); + HP_BAR(player, hp: TEST_HP + 120); } } @@ -54,12 +51,12 @@ SINGLE_BATTLE_TEST("Restore HP: Max Potion restores a battler's HP fully") s16 damage; GIVEN { ASSUME(gItems[ITEM_MAX_POTION].battleUsage == EFFECT_ITEM_RESTORE_HP); - PLAYER(SPECIES_WOBBUFFET) { HP(1); MaxHP(400); } + PLAYER(SPECIES_WOBBUFFET) { HP(TEST_HP); MaxHP(MAX_HP); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { USE_ITEM(player, ITEM_MAX_POTION, partyIndex: 0); } - } FINALLY { - EXPECT_EQ(player->hp, player->maxHP); + } SCENE { + HP_BAR(player, hp: MAX_HP); } } @@ -68,14 +65,12 @@ SINGLE_BATTLE_TEST("Restore HP: Fresh Water restores a battler's HP by 30") s16 damage; GIVEN { ASSUME(gItems[ITEM_FRESH_WATER].battleUsage == EFFECT_ITEM_RESTORE_HP); - PLAYER(SPECIES_WOBBUFFET) { HP(50); MaxHP(100); } + PLAYER(SPECIES_WOBBUFFET) { HP(TEST_HP); MaxHP(MAX_HP); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { USE_ITEM(player, ITEM_FRESH_WATER, partyIndex: 0); } } SCENE { - HP_BAR(player, captureDamage: &damage); - } FINALLY { - EXPECT_EQ(damage, -30); + HP_BAR(player, hp: TEST_HP + 30); } } @@ -84,14 +79,12 @@ SINGLE_BATTLE_TEST("Restore HP: Soda Pop restores a battler's HP by 50") s16 damage; GIVEN { ASSUME(gItems[ITEM_SODA_POP].battleUsage == EFFECT_ITEM_RESTORE_HP); - PLAYER(SPECIES_WOBBUFFET) { HP(50); MaxHP(100); } + PLAYER(SPECIES_WOBBUFFET) { HP(TEST_HP); MaxHP(MAX_HP); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { USE_ITEM(player, ITEM_SODA_POP, partyIndex: 0); } } SCENE { - HP_BAR(player, captureDamage: &damage); - } FINALLY { - EXPECT_EQ(damage, -50); + HP_BAR(player, hp: TEST_HP + 50); } } @@ -100,14 +93,12 @@ SINGLE_BATTLE_TEST("Restore HP: Lemonade restores a battler's HP by 70") s16 damage; GIVEN { ASSUME(gItems[ITEM_LEMONADE].battleUsage == EFFECT_ITEM_RESTORE_HP); - PLAYER(SPECIES_WOBBUFFET) { HP(50); MaxHP(200); } + PLAYER(SPECIES_WOBBUFFET) { HP(TEST_HP); MaxHP(MAX_HP); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { USE_ITEM(player, ITEM_LEMONADE, partyIndex: 0); } } SCENE { - HP_BAR(player, captureDamage: &damage); - } FINALLY { - EXPECT_EQ(damage, -70); + HP_BAR(player, hp: TEST_HP + 70); } } @@ -116,14 +107,12 @@ SINGLE_BATTLE_TEST("Restore HP: Moomoo Milk restores a battler's HP by 100") s16 damage; GIVEN { ASSUME(gItems[ITEM_MOOMOO_MILK].battleUsage == EFFECT_ITEM_RESTORE_HP); - PLAYER(SPECIES_WOBBUFFET) { HP(50); MaxHP(200); } + PLAYER(SPECIES_WOBBUFFET) { HP(TEST_HP); MaxHP(MAX_HP); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { USE_ITEM(player, ITEM_MOOMOO_MILK, partyIndex: 0); } } SCENE { - HP_BAR(player, captureDamage: &damage); - } FINALLY { - EXPECT_EQ(damage, -100); + HP_BAR(player, hp: TEST_HP + 100); } } @@ -132,18 +121,15 @@ SINGLE_BATTLE_TEST("Restore HP: Energy Powder restores a battler's HP by 60(50)" s16 damage; GIVEN { ASSUME(gItems[ITEM_ENERGY_POWDER].battleUsage == EFFECT_ITEM_RESTORE_HP); - PLAYER(SPECIES_WOBBUFFET) { HP(50); MaxHP(200); } + PLAYER(SPECIES_WOBBUFFET) { HP(TEST_HP); MaxHP(MAX_HP); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { USE_ITEM(player, ITEM_ENERGY_POWDER, partyIndex: 0); } } SCENE { - HP_BAR(player, captureDamage: &damage); - } FINALLY { - #if I_HEALTH_RECOVERY >= GEN_7 - EXPECT_EQ(damage, -60); - #else - EXPECT_EQ(damage, -50); - #endif + if (I_HEALTH_RECOVERY >= GEN_7) + HP_BAR(player, hp: TEST_HP + 60); + else + HP_BAR(player, hp: TEST_HP + 50); } } @@ -152,18 +138,15 @@ SINGLE_BATTLE_TEST("Restore HP: Energy Root restores a battler's HP by 120(200)" s16 damage; GIVEN { ASSUME(gItems[ITEM_ENERGY_ROOT].battleUsage == EFFECT_ITEM_RESTORE_HP); - PLAYER(SPECIES_WOBBUFFET) { HP(50); MaxHP(300); } + PLAYER(SPECIES_WOBBUFFET) { HP(TEST_HP); MaxHP(MAX_HP); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { USE_ITEM(player, ITEM_ENERGY_ROOT, partyIndex: 0); } } SCENE { - HP_BAR(player, captureDamage: &damage); - } FINALLY { - #if I_HEALTH_RECOVERY >= GEN_7 - EXPECT_EQ(damage, -120); - #else - EXPECT_EQ(damage, -200); - #endif + if (I_HEALTH_RECOVERY >= GEN_7) + HP_BAR(player, hp: TEST_HP + 120); + else + HP_BAR(player, hp: TEST_HP + 200); } } @@ -172,14 +155,12 @@ SINGLE_BATTLE_TEST("Restore HP: Sweet Heart restores a battler's HP by 20") s16 damage; GIVEN { ASSUME(gItems[ITEM_SWEET_HEART].battleUsage == EFFECT_ITEM_RESTORE_HP); - PLAYER(SPECIES_WOBBUFFET) { HP(50); MaxHP(100); } + PLAYER(SPECIES_WOBBUFFET) { HP(TEST_HP); MaxHP(MAX_HP); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { USE_ITEM(player, ITEM_SWEET_HEART, partyIndex: 0); } } SCENE { - HP_BAR(player, captureDamage: &damage); - } FINALLY { - EXPECT_EQ(damage, -20); + HP_BAR(player, hp: TEST_HP + 20); } } @@ -188,32 +169,31 @@ SINGLE_BATTLE_TEST("Restore HP: Oran Berry restores a battler's HP by 10") s16 damage; GIVEN { ASSUME(gItems[ITEM_ORAN_BERRY].battleUsage == EFFECT_ITEM_RESTORE_HP); - PLAYER(SPECIES_WOBBUFFET) { HP(50); MaxHP(100); } + PLAYER(SPECIES_WOBBUFFET) { HP(TEST_HP); MaxHP(MAX_HP); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { USE_ITEM(player, ITEM_ORAN_BERRY, partyIndex: 0); } } SCENE { - HP_BAR(player, captureDamage: &damage); - } FINALLY { - EXPECT_EQ(damage, -10); + HP_BAR(player, hp: TEST_HP + 10); } } -SINGLE_BATTLE_TEST("Restore HP: Sitrus Berry restores a battler's HP") +SINGLE_BATTLE_TEST("Restore HP: Sitrus Berry restores a battler's HP by 25% of its max HP(30HP flat)") { s16 damage; GIVEN { ASSUME(gItems[ITEM_SITRUS_BERRY].battleUsage == EFFECT_ITEM_RESTORE_HP); - PLAYER(SPECIES_WOBBUFFET) { HP(50); MaxHP(100); } + PLAYER(SPECIES_WOBBUFFET) { HP(TEST_HP); MaxHP(MAX_HP); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { USE_ITEM(player, ITEM_SITRUS_BERRY, partyIndex: 0); } } SCENE { - HP_BAR(player, captureDamage: &damage); - } FINALLY { if (I_SITRUS_BERRY_HEAL >= GEN_4) - EXPECT_EQ(damage, -25); + HP_BAR(player, hp: TEST_HP + MAX_HP * 0.25); else - EXPECT_EQ(damage, -30); + HP_BAR(player, hp: TEST_HP + 30); } } + +#undef TEST_HP +#undef MAX_HP \ No newline at end of file From 727f1ac37cb4de69e8d4bbf390a5628e7c719501 Mon Sep 17 00:00:00 2001 From: CallmeEchoo Date: Sat, 22 Apr 2023 15:04:40 +0200 Subject: [PATCH 290/428] guard spec test --- test/item_effect_set_mist.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 test/item_effect_set_mist.c diff --git a/test/item_effect_set_mist.c b/test/item_effect_set_mist.c new file mode 100644 index 000000000000..e01775ec4807 --- /dev/null +++ b/test/item_effect_set_mist.c @@ -0,0 +1,19 @@ +#include "global.h" +#include "test_battle.h" + +SINGLE_BATTLE_TEST("Guard Spec. sets Mist effect on the battlers side") +{ + GIVEN { + ASSUME(gItems[ITEM_GUARD_SPEC].battleUsage == EFFECT_ITEM_SET_MIST); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { USE_ITEM(player, ITEM_GUARD_SPEC, partyIndex: 0); } + TURN { MOVE(opponent, MOVE_GROWL); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_MIST, player); + MESSAGE("Ally became shrouded in MIST!"); + MESSAGE("Foe Wobbuffet used Growl!"); + MESSAGE("Wobbuffet is protected by MIST!"); + } +} From 18ac81174d626bf858882dad8861283cd751290c Mon Sep 17 00:00:00 2001 From: CallmeEchoo Date: Sat, 22 Apr 2023 17:41:19 +0200 Subject: [PATCH 291/428] Dire Hit test currently known failing, bc of weird bug. see comment. --- test/item_effect_set_focus_energy.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 test/item_effect_set_focus_energy.c diff --git a/test/item_effect_set_focus_energy.c b/test/item_effect_set_focus_energy.c new file mode 100644 index 000000000000..ff7d82f497e3 --- /dev/null +++ b/test/item_effect_set_focus_energy.c @@ -0,0 +1,22 @@ +#include "global.h" +#include "test_battle.h" + +SINGLE_BATTLE_TEST("Dire Hit increases a battler's critical hit chance by 2 stages") +{ + KNOWN_FAILING; // Displays Message "Foe Wobbuffet used Dire Hit.." when facing off against Wobbuffet. Doesnt happen against other species? + ASSUME(B_CRIT_CHANCE >= GEN_7); + PASSES_RANDOMLY(1, 2, RNG_CRITICAL_HIT); + GIVEN { + ASSUME(gItems[ITEM_DIRE_HIT].battleUsage == EFFECT_ITEM_SET_FOCUS_ENERGY); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_ABOMASNOW); + } WHEN { + TURN { USE_ITEM(player, ITEM_DIRE_HIT, partyIndex: 0); } + TURN { MOVE(player, MOVE_SCRATCH); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FOCUS_ENERGY, player); + MESSAGE("Wobbuffet used Dire Hit to get pumped!"); + MESSAGE("Wobbuffet used Scratch!"); + MESSAGE("A critical hit!"); + } +} From 1b6bb3e9ebd9380e1f5c3026a986caa6e8b6d963 Mon Sep 17 00:00:00 2001 From: CallmeEchoo Date: Sat, 22 Apr 2023 17:53:37 +0200 Subject: [PATCH 292/428] make the test fail intentionally --- test/item_effect_set_focus_energy.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/item_effect_set_focus_energy.c b/test/item_effect_set_focus_energy.c index ff7d82f497e3..72e90d610b94 100644 --- a/test/item_effect_set_focus_energy.c +++ b/test/item_effect_set_focus_energy.c @@ -9,7 +9,7 @@ SINGLE_BATTLE_TEST("Dire Hit increases a battler's critical hit chance by 2 stag GIVEN { ASSUME(gItems[ITEM_DIRE_HIT].battleUsage == EFFECT_ITEM_SET_FOCUS_ENERGY); PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_ABOMASNOW); + OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { USE_ITEM(player, ITEM_DIRE_HIT, partyIndex: 0); } TURN { MOVE(player, MOVE_SCRATCH); } From 623e7c5f25f79599ff1de98704258f79e8c28ab2 Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Sat, 22 Apr 2023 18:23:08 +0200 Subject: [PATCH 293/428] Add Frostbite status --- graphics/battle_interface/status.png | Bin 531 -> 559 bytes graphics/battle_interface/status2.png | Bin 531 -> 559 bytes graphics/battle_interface/status3.png | Bin 530 -> 559 bytes graphics/battle_interface/status4.png | Bin 530 -> 559 bytes graphics/interface/status_icons.png | Bin 455 -> 458 bytes include/constants/battle.h | 3 ++- include/constants/party_menu.h | 1 + src/battle_debug.c | 3 +++ src/battle_interface.c | 27 ++++++++++++++++++++++++++ src/data/party_menu.h | 4 ++-- src/party_menu.c | 2 ++ src/pokemon_summary_screen.c | 7 ++++++- 12 files changed, 43 insertions(+), 4 deletions(-) diff --git a/graphics/battle_interface/status.png b/graphics/battle_interface/status.png index 9fae45b71fff0c44e11746fb80c8f84dd1fba71a..0b212907e5574725f3c8f3d4f95a713b44fc02e2 100644 GIT binary patch delta 282 zcmV+#0piOO9{9gpz?RJ4K~n(wnoPh+X_5m2y1{`i ze@>w7Qtc=;!MvPzLzHzd7qBPucl6GYoz0XK+5%mj$9@7jcVH@>&nH~W0IpK&<=1in zM>2oM7!=&eP^n={brQz}bF-iY=;kSvz(@dhskr=F?q@%G{K-Q<;Ls1xy!zp-I(Kjd g7;W1xzm@v~WH5Z2Ai(eI00000NkvXX1g=70g10z=BLDyZ delta 253 zcmVdlu^|irf6+-qK~yM_g^$@01R)4St>)Jd48af# z!TjS{P7iiwmr_6;wpc(l89}UYokJDRTbGhj{b){Oy?|9JE}*BA?;EF{19I^7`0Kc! zmMs3!8iyu6GLw>$tnHNl0j>gY=m6Hdq!O43&@Htee;fA$d!=Esamg_Z00000NkvXXu0mjf DVL5SM diff --git a/graphics/battle_interface/status2.png b/graphics/battle_interface/status2.png index af7ce05d3bad0de62d22a478535e5939fde21c01..0b212907e5574725f3c8f3d4f95a713b44fc02e2 100644 GIT binary patch delta 282 zcmV+#0piOO9{9gpz?RJ4K~n(wnoPh+X_5m2y1{`i ze@>w7Qtc=;!MvPzLzHzd7qBPucl6GYoz0XK+5%mj$9@7jcVH@>&nH~W0IpK&<=1in zM>2oM7!=&eP^n={brQz}bF-iY=;kSvz(@dhskr=F?q@%G{K-Q<;Ls1xy!zp-I(Kjd g7;W1xzm@v~WH5Z2Ai(eI00000NkvXX1g=70g10z=BLDyZ delta 253 zcmVdlu^|irf6+-qK~yM_g^$@01R)4St>)Vh48af# z!Ti%%P7iiwmr_6;wpc(l89}UYokJDRTbGhj{b){Oy?|9JE}*BA?;EF{19I^7`0Kc! zmMs3!8iyu6GLw>$tnHNl0j>gY=m6Hdq!O43&@Htee;fA$zBOaqp_a-h00000NkvXXu0mjf DVMlTU diff --git a/graphics/battle_interface/status3.png b/graphics/battle_interface/status3.png index d0febfb17c501b1f65d1e835c79d7dfede349004..0b212907e5574725f3c8f3d4f95a713b44fc02e2 100644 GIT binary patch delta 282 zcmV+#0piOO9{9gpz?RJ4K~n(wnoPh+X_5m2y1{`i ze@>w7Qtc=;!MvPzLzHzd7qBPucl6GYoz0XK+5%mj$9@7jcVH@>&nH~W0IpK&<=1in zM>2oM7!=&eP^n={brQz}bF-iY=;kSvz(@dhskr=F?q@%G{K-Q<;Ls1xy!zp-I(Kjd g7;W1xzm@v~WH5Z2Ai(eI00000NkvXX1g=70g0>!lA^-pY delta 252 zcmVdlu^|irf6z%pK~yM_g^$@010V=Qo#o#WEWr{i z!T!q$r&ly#6p)82CQv?%AeOk!A&cj&OG(OpG^a6dz$zIV(9_E2jaAP9Irw_~IWDLi z7XK)PLlGaDNl8i8bjtq#SAk2dH^#LIXa}XSp0)ifOpjdK~mKk99TmDJKR9s zW~J&?YJl;$bYqV79v9ROi+{8xQJiN+61Sk4i`Z_!@&K+9_47uEIiOW)ef&8ts2>*p z=$%72T_)B2Xij4vU^FXQfHe=Pevw)L?Namc*SH@6AZ7&y4`C<(0000iOO9{9gpz?RJ4K~n(wnoPh+X_5m2y1{`i ze@>w7Qtc=;!MvPzLzHzd7qBPucl6GYoz0XK+5%mj$9@7jcVH@>&nH~W0IpK&<=1in zM>2oM7!=&eP^n={brQz}bF-iY=;kSvz(@dhskr=F?q@%G{K-Q<;Ls1xy!zp-I(Kjd g7;W1xzm@v~WH5Z2Ai(eI00000NkvXX1g=70g0>!lA^-pY delta 252 zcmVdlu^|irf6z%pK~yM_g^!6510V^lJa`5%|b6ik4 zEdEgnhax^Qlai9G>6HHgt^$`@Z;Wdb&<Bb!EJuavn7XN5XqBzftByK@77qQ)dgSCRb3m)q`uKBPP(LjG z(L0B5x=gD3(VWIUz-U&q0Basn{UWsh+NI{>uW>&^v1l#_UZ~0d0000${ZUD;vcm>pd`DI!0Cy|}jT zBY@5ZsM%XQ%Fv1^;NT^^CSS))*Qx9>@tn6gT9P>Hb#b(x2I!9oae(r;mk59}04`a= zHu*ZH(GR5{T_(9)a-yr7kTC_2d;*g}4HN}sa_IpqzbsK-hhQbNP|h8Qgz~wSJtmGn zv>WnHCs4$V0d&NavkxE=0YLd*GX%h60XxQU%%AmP|Nesq`TzrcDCz*QJ~Rm#D~tym ey+qJtJmw$h<04&U&$ZzI0000 delta 381 zcmV-@0fPR@1IGi97zqRe0001qplF?uEf$}&4cPmsZ^Og%s*voSJvbQfmE%tqn>opOM{2`ZkO=hUgi&Xe-w{PaGSR}@9D z(j1S)6dMJtgwo=HLDO3(C4^2uX_7NQ2TCjGKY9Ah5OM+y7J#wIDpEK`h(oir b{~>+>lF0pSLPH5(00000NkvXXu0mjf?VP2v diff --git a/include/constants/battle.h b/include/constants/battle.h index 61c3776c6c42..7682b851ecc2 100644 --- a/include/constants/battle.h +++ b/include/constants/battle.h @@ -115,8 +115,9 @@ #define STATUS1_TOXIC_POISON (1 << 7) #define STATUS1_TOXIC_COUNTER (1 << 8 | 1 << 9 | 1 << 10 | 1 << 11) #define STATUS1_TOXIC_TURN(num) ((num) << 8) +#define STATUS1_FROSTBITE (1 << 12) #define STATUS1_PSN_ANY (STATUS1_POISON | STATUS1_TOXIC_POISON) -#define STATUS1_ANY (STATUS1_SLEEP | STATUS1_POISON | STATUS1_BURN | STATUS1_FREEZE | STATUS1_PARALYSIS | STATUS1_TOXIC_POISON) +#define STATUS1_ANY (STATUS1_SLEEP | STATUS1_POISON | STATUS1_BURN | STATUS1_FREEZE | STATUS1_PARALYSIS | STATUS1_TOXIC_POISON | STATUS1_FROSTBITE) // Volatile status ailments // These are removed after exiting the battle or switching out diff --git a/include/constants/party_menu.h b/include/constants/party_menu.h index f28b75122ffb..fd94afe5447d 100644 --- a/include/constants/party_menu.h +++ b/include/constants/party_menu.h @@ -11,6 +11,7 @@ #define AILMENT_BRN 5 #define AILMENT_PKRS 6 #define AILMENT_FNT 7 +#define AILMENT_FSB 8 #define PARTY_LAYOUT_SINGLE 0 #define PARTY_LAYOUT_DOUBLE 1 diff --git a/src/battle_debug.c b/src/battle_debug.c index 1d690caaa02c..0549cf91edb7 100644 --- a/src/battle_debug.c +++ b/src/battle_debug.c @@ -181,6 +181,7 @@ static const u8 sText_SideStatus[] = _("Side Status"); static const u8 sText_MaxHp[] = _("HP Max"); static const u8 sText_CurrHp[] = _("HP Current"); static const u8 sText_Freeze[] = _("Freeze"); +static const u8 sText_Frostbite[] = _("Frostbite"); static const u8 sText_ToxicPoison[] = _("Toxic Poison"); static const u8 sText_ToxicCounter[] = _("Toxic Counter"); static const u8 sText_Flinch[] = _("Flinch"); @@ -258,6 +259,7 @@ static const struct BitfieldInfo sStatus1Bitfield[] = {/*Paralysis*/1, 6}, {/*Toxic Poison*/ 1, 7}, {/*Toxic Counter*/ 4, 8}, + {/*Frostbite*/ 1, 12}, }; static const struct BitfieldInfo sStatus2Bitfield[] = @@ -397,6 +399,7 @@ static const struct ListMenuItem sStatus1ListItems[] = {gText_Paralysis, 4}, {sText_ToxicPoison, 5}, {sText_ToxicCounter, 6}, + {sText_Frostbite, 7}, }; static const struct ListMenuItem sStatus2ListItems[] = diff --git a/src/battle_interface.c b/src/battle_interface.c index bbe61a3727b9..eec4e50f0d91 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -73,6 +73,9 @@ enum HEALTHBOX_GFX_STATUS_BRN_BATTLER0, //status brn HEALTHBOX_GFX_34, HEALTHBOX_GFX_35, + HEALTHBOX_GFX_STATUS_FSB_BATTLER0, //status fsb + HEALTHBOX_GFX_116, + HEALTHBOX_GFX_117, HEALTHBOX_GFX_36, //misc [Black section] HEALTHBOX_GFX_37, //misc [Black section] HEALTHBOX_GFX_38, //misc [Black section] @@ -123,6 +126,9 @@ enum HEALTHBOX_GFX_STATUS_BRN_BATTLER1, //status2 "BRN" HEALTHBOX_GFX_84, HEALTHBOX_GFX_85, + HEALTHBOX_GFX_STATUS_FSB_BATTLER1, //status2 "FSB" + HEALTHBOX_GFX_118, + HEALTHBOX_GFX_119, HEALTHBOX_GFX_STATUS_PSN_BATTLER2, //status3 "PSN" HEALTHBOX_GFX_87, HEALTHBOX_GFX_88, @@ -138,6 +144,9 @@ enum HEALTHBOX_GFX_STATUS_BRN_BATTLER2, //status3 "BRN" HEALTHBOX_GFX_99, HEALTHBOX_GFX_100, + HEALTHBOX_GFX_STATUS_FSB_BATTLER2, //status3 "FSB" + HEALTHBOX_GFX_120, + HEALTHBOX_GFX_121, HEALTHBOX_GFX_STATUS_PSN_BATTLER3, //status4 "PSN" HEALTHBOX_GFX_102, HEALTHBOX_GFX_103, @@ -153,6 +162,9 @@ enum HEALTHBOX_GFX_STATUS_BRN_BATTLER3, //status4 "BRN" HEALTHBOX_GFX_114, HEALTHBOX_GFX_115, + HEALTHBOX_GFX_STATUS_FSB_BATTLER3, //status4 "FSB" + HEALTHBOX_GFX_122, + HEALTHBOX_GFX_123, HEALTHBOX_GFX_FRAME_END, HEALTHBOX_GFX_FRAME_END_BAR, }; @@ -2208,6 +2220,11 @@ static void UpdateStatusIconInHealthbox(u8 healthboxSpriteId) statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBattlerId(HEALTHBOX_GFX_STATUS_FRZ_BATTLER0, battlerId)); statusPalId = PAL_STATUS_FRZ; } + else if (status & STATUS1_FROSTBITE) + { + statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBattlerId(HEALTHBOX_GFX_STATUS_FSB_BATTLER0, battlerId)); + statusPalId = PAL_STATUS_FRZ; + } else if (status & STATUS1_PARALYSIS) { statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBattlerId(HEALTHBOX_GFX_STATUS_PRZ_BATTLER0, battlerId)); @@ -2290,6 +2307,16 @@ static u8 GetStatusIconForBattlerId(u8 statusElementId, u8 battlerId) else ret = HEALTHBOX_GFX_STATUS_FRZ_BATTLER3; break; + case HEALTHBOX_GFX_STATUS_FSB_BATTLER0: + if (battlerId == 0) + ret = HEALTHBOX_GFX_STATUS_FSB_BATTLER0; + else if (battlerId == 1) + ret = HEALTHBOX_GFX_STATUS_FSB_BATTLER1; + else if (battlerId == 2) + ret = HEALTHBOX_GFX_STATUS_FSB_BATTLER2; + else + ret = HEALTHBOX_GFX_STATUS_FSB_BATTLER3; + break; case HEALTHBOX_GFX_STATUS_BRN_BATTLER0: if (battlerId == 0) ret = HEALTHBOX_GFX_STATUS_BRN_BATTLER0; diff --git a/src/data/party_menu.h b/src/data/party_menu.h index 4a06fa135e99..e7ebf98939ca 100644 --- a/src/data/party_menu.h +++ b/src/data/party_menu.h @@ -1054,7 +1054,7 @@ static const union AnimCmd sSpriteAnim_StatusFaint[] = ANIMCMD_END }; -static const union AnimCmd sSpriteAnim_Blank[] = +static const union AnimCmd sSpriteAnim_StatusFrostbite[] = { ANIMCMD_FRAME(28, 0), ANIMCMD_END @@ -1069,7 +1069,7 @@ static const union AnimCmd *const sSpriteTemplate_StatusCondition[] = sSpriteAnim_StatusBurn, sSpriteAnim_StatusPokerus, sSpriteAnim_StatusFaint, - sSpriteAnim_Blank + sSpriteAnim_StatusFrostbite }; static const struct CompressedSpriteSheet sSpriteSheet_StatusIcons = diff --git a/src/party_menu.c b/src/party_menu.c index 3cc3efdcddfb..43ed5818adc8 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -1941,6 +1941,8 @@ u8 GetAilmentFromStatus(u32 status) return AILMENT_FRZ; if (status & STATUS1_BURN) return AILMENT_BRN; + if (status & STATUS1_FROSTBITE) + return AILMENT_FSB; return AILMENT_NONE; } diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index 3313076262af..f7106b8752ac 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -1112,6 +1112,10 @@ static const union AnimCmd sSpriteAnim_StatusFaint[] = { ANIMCMD_FRAME(24, 0, FALSE, FALSE), ANIMCMD_END }; +static const union AnimCmd sSpriteAnim_StatusFrostbite[] = { + ANIMCMD_FRAME(28, 0, FALSE, FALSE), + ANIMCMD_END +}; static const union AnimCmd *const sSpriteAnimTable_StatusCondition[] = { sSpriteAnim_StatusPoison, sSpriteAnim_StatusParalyzed, @@ -1120,11 +1124,12 @@ static const union AnimCmd *const sSpriteAnimTable_StatusCondition[] = { sSpriteAnim_StatusBurn, sSpriteAnim_StatusPokerus, sSpriteAnim_StatusFaint, + sSpriteAnim_StatusFrostbite, }; static const struct CompressedSpriteSheet sStatusIconsSpriteSheet = { .data = gStatusGfx_Icons, - .size = 0x380, + .size = 0x400, .tag = TAG_MON_STATUS }; static const struct CompressedSpritePalette sStatusIconsSpritePalette = From f50bfb37708396af5f2ab2841041927af6c18352 Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Sat, 22 Apr 2023 18:47:36 +0200 Subject: [PATCH 294/428] Frostbite hurts at the end of the turn and halves SpA --- data/battle_scripts_1.s | 5 +++++ include/battle_scripts.h | 1 + include/constants/battle_string_ids.h | 3 ++- src/battle_gfx_sfx_util.c | 2 +- src/battle_message.c | 2 ++ src/battle_util.c | 26 ++++++++++++++++++++++++++ 6 files changed, 37 insertions(+), 2 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 0be893412761..316a179ab717 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -8121,6 +8121,11 @@ BattleScript_BurnTurnDmg:: waitmessage B_WAIT_TIME_LONG goto BattleScript_DoStatusTurnDmg +BattleScript_FrostbiteTurnDmg:: + printstring STRINGID_PKMNHURTBYFROSTBITE + waitmessage B_WAIT_TIME_LONG + goto BattleScript_DoStatusTurnDmg + BattleScript_MoveUsedIsFrozen:: printstring STRINGID_PKMNISFROZEN waitmessage B_WAIT_TIME_LONG diff --git a/include/battle_scripts.h b/include/battle_scripts.h index c78fcafe48c8..1fb7d8cc6a7d 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -108,6 +108,7 @@ extern const u8 BattleScript_MoveUsedWokeUp[]; extern const u8 BattleScript_MonWokeUpInUproar[]; extern const u8 BattleScript_PoisonTurnDmg[]; extern const u8 BattleScript_BurnTurnDmg[]; +extern const u8 BattleScript_FrostbiteTurnDmg[]; extern const u8 BattleScript_MoveUsedIsFrozen[]; extern const u8 BattleScript_MoveUsedUnfroze[]; extern const u8 BattleScript_DefrostedViaFireMove[]; diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index e5520775346c..10e2a6fe56f8 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -651,8 +651,9 @@ #define STRINGID_ITEMRESTOREDSPECIESHEALTH 649 #define STRINGID_ITEMCUREDSPECIESSTATUS 650 #define STRINGID_ITEMRESTOREDSPECIESPP 651 +#define STRINGID_PKMNHURTBYFROSTBITE 652 -#define BATTLESTRINGS_COUNT 652 +#define BATTLESTRINGS_COUNT 653 // This is the string id that gBattleStringsTable starts with. // String ids before this (e.g. STRINGID_INTROMSG) are not in the table, diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index bc541f0a013d..6404bb7deafa 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -398,7 +398,7 @@ void InitAndLaunchChosenStatusAnimation(bool8 isStatus2, u32 status) gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].statusAnimActive = 1; if (!isStatus2) { - if (status == STATUS1_FREEZE) + if (status == STATUS1_FREEZE || status == STATUS1_FROSTBITE) LaunchStatusAnimation(gActiveBattler, B_ANIM_STATUS_FRZ); else if (status == STATUS1_POISON || status & STATUS1_TOXIC_POISON) LaunchStatusAnimation(gActiveBattler, B_ANIM_STATUS_PSN); diff --git a/src/battle_message.c b/src/battle_message.c index 7df30cb296bb..b3be9afd1c16 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -103,6 +103,7 @@ static const u8 sText_PkmnEnergyDrained[] = _("{B_DEF_NAME_WITH_PREFIX} had its\ static const u8 sText_PkmnWasBurned[] = _("{B_EFF_NAME_WITH_PREFIX} was burned!"); static const u8 sText_PkmnBurnedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nburned {B_EFF_NAME_WITH_PREFIX}!"); static const u8 sText_PkmnHurtByBurn[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt\nby its burn!"); +static const u8 sText_PkmnHurtByFrostbite[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt\nby its frostbite!"); static const u8 sText_PkmnAlreadyHasBurn[] = _("{B_DEF_NAME_WITH_PREFIX} already\nhas a burn."); static const u8 sText_PkmnWasFrozen[] = _("{B_EFF_NAME_WITH_PREFIX} was\nfrozen solid!"); static const u8 sText_PkmnFrozenBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nfroze {B_EFF_NAME_WITH_PREFIX} solid!"); @@ -1428,6 +1429,7 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_TARGETTOOHEAVY - BATTLESTRINGS_TABLE_START] = sText_TargetTooHeavy, [STRINGID_ATTACKERLOSTELECTRICTYPE - BATTLESTRINGS_TABLE_START] = sText_AttackerLostElectricType, [STRINGID_PKMNSABILITYPREVENTSABILITY - BATTLESTRINGS_TABLE_START] = sText_PkmnsAbilityPreventsAbility, + [STRINGID_PKMNHURTBYFROSTBITE - BATTLESTRINGS_TABLE_START] = sText_PkmnHurtByFrostbite, }; const u16 gTrainerUsedItemStringIds[] = diff --git a/src/battle_util.c b/src/battle_util.c index ac274bf0f833..993a0d5ab3b1 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -2523,6 +2523,7 @@ enum ENDTURN_POISON, ENDTURN_BAD_POISON, ENDTURN_BURN, + ENDTURN_FROSTBITE, ENDTURN_NIGHTMARES, ENDTURN_CURSE, ENDTURN_WRAP, @@ -2736,6 +2737,23 @@ u8 DoBattlerEndTurnEffects(void) } gBattleStruct->turnEffectsTracker++; break; + case ENDTURN_FROSTBITE: // burn + if ((gBattleMons[gActiveBattler].status1 & STATUS1_FROSTBITE) + && gBattleMons[gActiveBattler].hp != 0) + { + MAGIC_GUARD_CHECK; + #if B_BURN_DAMAGE >= GEN_7 + gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / 16; + #else + gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / 8; + #endif + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + BattleScriptExecute(BattleScript_FrostbiteTurnDmg); + effect++; + } + gBattleStruct->turnEffectsTracker++; + break; case ENDTURN_NIGHTMARES: // spooky nightmares if ((gBattleMons[gActiveBattler].status2 & STATUS2_NIGHTMARE) && gBattleMons[gActiveBattler].hp != 0) @@ -9508,6 +9526,14 @@ static u32 CalcFinalDmg(u32 dmg, u16 move, u8 battlerAtk, u8 battlerDef, u8 move && abilityAtk != ABILITY_GUTS) dmg = ApplyModifier(UQ_4_12(0.5), dmg); + // check frostbite + if (gBattleMons[battlerAtk].status1 & STATUS1_FROSTBITE && !IS_MOVE_PHYSICAL(move) + #if B_BURN_FACADE_DMG >= GEN_6 + && gBattleMoves[move].effect != EFFECT_FACADE + #endif + && abilityAtk != ABILITY_GUTS) + dmg = ApplyModifier(UQ_4_12(0.5), dmg); + // check sunny/rain weather if (IsBattlerWeatherAffected(battlerAtk, B_WEATHER_RAIN)) { From 9c9a1fb831eb33e9164f176052c3d5caed9eb362 Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Sat, 22 Apr 2023 19:18:10 +0200 Subject: [PATCH 295/428] Allow for healing with items --- include/strings.h | 1 + src/battle_ai_switch_items.c | 2 +- src/item.c | 2 +- src/party_menu.c | 2 ++ src/pokemon.c | 2 +- src/strings.c | 1 + 6 files changed, 7 insertions(+), 3 deletions(-) diff --git a/include/strings.h b/include/strings.h index 72109ed94566..4019dee0b147 100644 --- a/include/strings.h +++ b/include/strings.h @@ -475,6 +475,7 @@ extern const u8 gText_EscapeFromHere[]; extern const u8 gText_PkmnCuredOfPoison[]; extern const u8 gText_PkmnWokeUp2[]; extern const u8 gText_PkmnBurnHealed[]; +extern const u8 gText_PkmnFrostbiteHealed[]; extern const u8 gText_PkmnThawedOut[]; extern const u8 gText_PkmnCuredOfParalysis[]; extern const u8 gText_PkmnGotOverInfatuation[]; diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index 29911d798f13..d7fd062ba212 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -1079,7 +1079,7 @@ static bool8 ShouldUseItem(void) shouldUse = TRUE; if (itemEffects[3] & ITEM3_BURN && gBattleMons[gActiveBattler].status1 & STATUS1_BURN) shouldUse = TRUE; - if (itemEffects[3] & ITEM3_FREEZE && gBattleMons[gActiveBattler].status1 & STATUS1_FREEZE) + if (itemEffects[3] & ITEM3_FREEZE && (gBattleMons[gActiveBattler].status1 & STATUS1_FREEZE || gBattleMons[gActiveBattler].status1 & STATUS1_FROSTBITE)) shouldUse = TRUE; if (itemEffects[3] & ITEM3_PARALYSIS && gBattleMons[gActiveBattler].status1 & STATUS1_PARALYSIS) shouldUse = TRUE; diff --git a/src/item.c b/src/item.c index b2b19480a3d7..d07e93782f9f 100644 --- a/src/item.c +++ b/src/item.c @@ -976,7 +976,7 @@ u32 GetItemStatus1Mask(u16 itemId) case ITEM3_PARALYSIS: return STATUS1_PARALYSIS; case ITEM3_FREEZE: - return STATUS1_FREEZE; + return STATUS1_FREEZE | STATUS1_FROSTBITE; case ITEM3_BURN: return STATUS1_BURN; case ITEM3_POISON: diff --git a/src/party_menu.c b/src/party_menu.c index 43ed5818adc8..1623201b103c 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -4332,6 +4332,8 @@ static void GetMedicineItemEffectMessage(u16 item) break; case ITEM_EFFECT_CURE_FREEZE: StringExpandPlaceholders(gStringVar4, gText_PkmnThawedOut); + // TO DO: if it heals frostbite, use the following instead: + // StringExpandPlaceholders(gStringVar4, gText_PkmnFrostbiteHealed); break; case ITEM_EFFECT_CURE_PARALYSIS: StringExpandPlaceholders(gStringVar4, gText_PkmnCuredOfParalysis); diff --git a/src/pokemon.c b/src/pokemon.c index e82cb98c30b5..7fc33990509a 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -5802,7 +5802,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov retVal = FALSE; if ((itemEffect[i] & ITEM3_BURN) && HealStatusConditions(mon, partyIndex, STATUS1_BURN, battlerId) == 0) retVal = FALSE; - if ((itemEffect[i] & ITEM3_FREEZE) && HealStatusConditions(mon, partyIndex, STATUS1_FREEZE, battlerId) == 0) + if ((itemEffect[i] & ITEM3_FREEZE) && HealStatusConditions(mon, partyIndex, STATUS1_FREEZE | STATUS1_FROSTBITE, battlerId) == 0) retVal = FALSE; if ((itemEffect[i] & ITEM3_PARALYSIS) && HealStatusConditions(mon, partyIndex, STATUS1_PARALYSIS, battlerId) == 0) retVal = FALSE; diff --git a/src/strings.c b/src/strings.c index 75ff2ef994d5..eb7bb8ba1f92 100644 --- a/src/strings.c +++ b/src/strings.c @@ -414,6 +414,7 @@ const u8 gText_PkmnCuredOfPoison[] = _("{STR_VAR_1} was cured of its\npoisoning. const u8 gText_PkmnCuredOfParalysis[] = _("{STR_VAR_1} was cured of\nparalysis.{PAUSE_UNTIL_PRESS}"); const u8 gText_PkmnWokeUp2[] = _("{STR_VAR_1} woke up.{PAUSE_UNTIL_PRESS}"); const u8 gText_PkmnBurnHealed[] = _("{STR_VAR_1}'s burn was healed.{PAUSE_UNTIL_PRESS}"); +const u8 gText_PkmnFrostbiteHealed[] = _("{STR_VAR_1}'s frostbite was healed.{PAUSE_UNTIL_PRESS}"); const u8 gText_PkmnThawedOut[] = _("{STR_VAR_1} was thawed out.{PAUSE_UNTIL_PRESS}"); const u8 gText_PPWasRestored[] = _("PP was restored.{PAUSE_UNTIL_PRESS}"); const u8 gText_PkmnRegainhedHealth[] = _("{STR_VAR_1} regained health.{PAUSE_UNTIL_PRESS}"); // Unused From a561c6da6a1aced96f9b992ac00a83cc42420e9e Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Sat, 22 Apr 2023 23:14:49 +0200 Subject: [PATCH 296/428] Add config to Frostbite & allow it to be inflicted --- data/battle_scripts_1.s | 15 +++ include/battle_scripts.h | 1 + include/config/battle.h | 17 +-- include/constants/battle.h | 147 ++++++++++++------------ include/constants/battle_move_effects.h | 3 +- include/constants/battle_string_ids.h | 3 +- include/pokemon.h | 2 +- src/battle_message.c | 7 ++ src/battle_script_commands.c | 20 ++++ src/battle_tv.c | 1 + src/data/battle_moves.h | 36 +++++- 11 files changed, 162 insertions(+), 90 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 316a179ab717..3bfc3ac08916 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -286,7 +286,11 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectHealPulse @ EFFECT_HEAL_PULSE .4byte BattleScript_EffectQuash @ EFFECT_QUASH .4byte BattleScript_EffectIonDeluge @ EFFECT_ION_DELUGE +#if B_USE_FROSTBITE == TRUE + .4byte BattleScript_EffectFrostbiteHit @ EFFECT_FREEZE_DRY +#else .4byte BattleScript_EffectFreezeHit @ EFFECT_FREEZE_DRY +#endif .4byte BattleScript_EffectTopsyTurvy @ EFFECT_TOPSY_TURVY .4byte BattleScript_EffectMistyTerrain @ EFFECT_MISTY_TERRAIN .4byte BattleScript_EffectGrassyTerrain @ EFFECT_GRASSY_TERRAIN @@ -424,6 +428,7 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectDireClaw @ EFFECT_DIRE_CLAW .4byte BattleScript_EffectBarbBarrage @ EFFECT_BARB_BARRAGE .4byte BattleScript_EffectRevivalBlessing @ EFFECT_REVIVAL_BLESSING + .4byte BattleScript_EffectFrostbiteHit @ EFFECT_FROSTBITE_HIT BattleScript_EffectRevivalBlessing:: attackcanceler @@ -3464,6 +3469,10 @@ BattleScript_EffectBurnHit:: setmoveeffect MOVE_EFFECT_BURN goto BattleScript_EffectHit +BattleScript_EffectFrostbiteHit:: + setmoveeffect MOVE_EFFECT_FROSTBITE + goto BattleScript_EffectHit + BattleScript_EffectSleepHit:: setmoveeffect MOVE_EFFECT_SLEEP goto BattleScript_EffectHit @@ -8365,6 +8374,12 @@ BattleScript_MoveEffectBurn:: waitmessage B_WAIT_TIME_LONG goto BattleScript_UpdateEffectStatusIconRet +BattleScript_MoveEffectFrostbite:: + statusanimation BS_EFFECT_BATTLER + printfromtable gGotFrostbiteStringIds + waitmessage B_WAIT_TIME_LONG + goto BattleScript_UpdateEffectStatusIconRet + BattleScript_MoveEffectFreeze:: statusanimation BS_EFFECT_BATTLER printfromtable gGotFrozenStringIds diff --git a/include/battle_scripts.h b/include/battle_scripts.h index 1fb7d8cc6a7d..9b9156eb6fed 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -132,6 +132,7 @@ extern const u8 BattleScript_MoveEffectSleep[]; extern const u8 BattleScript_YawnMakesAsleep[]; extern const u8 BattleScript_MoveEffectPoison[]; extern const u8 BattleScript_MoveEffectBurn[]; +extern const u8 BattleScript_MoveEffectFrostbite[]; extern const u8 BattleScript_MoveEffectFreeze[]; extern const u8 BattleScript_MoveEffectParalysis[]; extern const u8 BattleScript_MoveEffectUproar[]; diff --git a/include/config/battle.h b/include/config/battle.h index 3e9ec9b9a5f4..951952416fb6 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -182,14 +182,15 @@ #define B_LAST_USED_BALL_BUTTON R_BUTTON // If last used ball is implemented, this button (or button combo) will trigger throwing the last used ball. // Other settings -#define B_DOUBLE_WILD_CHANCE 0 // % chance of encountering two Pokémon in a Wild Encounter. -#define B_DOUBLE_WILD_REQUIRE_2_MONS FALSE // If set to TRUE, Wild Double Battles will default to Single Battles when the player only has 1 usuable Pokémon, ignoring B_DOUBLE_WILD_CHANCE and B_FLAG_FORCE_DOUBLE_WILD. -#define B_MULTI_BATTLE_WHITEOUT GEN_LATEST // In Gen4+, multi battles end when the Player and also their Partner don't have any more Pokémon to fight. -#define B_EVOLUTION_AFTER_WHITEOUT GEN_LATEST // In Gen6+, Pokemon that qualify for evolution after battle will evolve even if the player loses. -#define B_WILD_NATURAL_ENEMIES TRUE // If set to TRUE, certain wild mon species will attack other species when partnered in double wild battles (eg. Zangoose vs Seviper) -#define B_AFFECTION_MECHANICS FALSE // In Gen6+, there's a stat called affection that can trigger different effects in battle. From LGPE onwards, those effects use friendship instead. -#define B_TRAINER_CLASS_POKE_BALLS GEN_LATEST // In Gen7+, trainers will use certain types of Poké Balls depending on their trainer class. -#define B_OBEDIENCE_MECHANICS GEN_LATEST // In PLA+ (here Gen8+), obedience restrictions also apply to non-outsider Pokémon, albeit based on their level met rather than actual level +#define B_DOUBLE_WILD_CHANCE 0 // % chance of encountering two Pokémon in a Wild Encounter. +#define B_DOUBLE_WILD_REQUIRE_2_MONS FALSE // If set to TRUE, Wild Double Battles will default to Single Battles when the player only has 1 usuable Pokémon, ignoring B_DOUBLE_WILD_CHANCE and B_FLAG_FORCE_DOUBLE_WILD. +#define B_MULTI_BATTLE_WHITEOUT GEN_LATEST // In Gen4+, multi battles end when the Player and also their Partner don't have any more Pokémon to fight. +#define B_EVOLUTION_AFTER_WHITEOUT GEN_LATEST // In Gen6+, Pokemon that qualify for evolution after battle will evolve even if the player loses. +#define B_WILD_NATURAL_ENEMIES TRUE // If set to TRUE, certain wild mon species will attack other species when partnered in double wild battles (eg. Zangoose vs Seviper) +#define B_AFFECTION_MECHANICS FALSE // In Gen6+, there's a stat called affection that can trigger different effects in battle. From LGPE onwards, those effects use friendship instead. +#define B_TRAINER_CLASS_POKE_BALLS GEN_LATEST // In Gen7+, trainers will use certain types of Poké Balls depending on their trainer class. +#define B_OBEDIENCE_MECHANICS GEN_LATEST // In PLA+ (here Gen8+), obedience restrictions also apply to non-outsider Pokémon, albeit based on their level met rather than actual level +#define B_USE_FROSTBITE FALSE // In PLA, Frostbite replaces Freeze. Enabling this flag does the same here. Moves can still be cherry-picked to either Freeze or Frostbite. Freeze-Dry, Secret Power & Tri Attack depend on this config. // Animation Settings #define B_NEW_SWORD_PARTICLE FALSE // If set to TRUE, it updates Swords Dance's particle. diff --git a/include/constants/battle.h b/include/constants/battle.h index 7682b851ecc2..0e6c66e8d638 100644 --- a/include/constants/battle.h +++ b/include/constants/battle.h @@ -306,79 +306,80 @@ #define MOVE_EFFECT_FREEZE 4 #define MOVE_EFFECT_PARALYSIS 5 #define MOVE_EFFECT_TOXIC 6 -#define PRIMARY_STATUS_MOVE_EFFECT MOVE_EFFECT_TOXIC // All above move effects apply primary status -#define MOVE_EFFECT_CONFUSION 7 -#define MOVE_EFFECT_FLINCH 8 -#define MOVE_EFFECT_TRI_ATTACK 9 -#define MOVE_EFFECT_UPROAR 10 -#define MOVE_EFFECT_PAYDAY 11 -#define MOVE_EFFECT_CHARGING 12 -#define MOVE_EFFECT_WRAP 13 -#define MOVE_EFFECT_BURN_UP 14 // MOVE_EFFECT_BURN_UP replaces unused MOVE_EFFECT_RECOIL_25 so that stat change animations don't break -#define MOVE_EFFECT_ATK_PLUS_1 15 -#define MOVE_EFFECT_DEF_PLUS_1 16 -#define MOVE_EFFECT_SPD_PLUS_1 17 -#define MOVE_EFFECT_SP_ATK_PLUS_1 18 -#define MOVE_EFFECT_SP_DEF_PLUS_1 19 -#define MOVE_EFFECT_ACC_PLUS_1 20 -#define MOVE_EFFECT_EVS_PLUS_1 21 -#define MOVE_EFFECT_ATK_MINUS_1 22 -#define MOVE_EFFECT_DEF_MINUS_1 23 -#define MOVE_EFFECT_SPD_MINUS_1 24 -#define MOVE_EFFECT_SP_ATK_MINUS_1 25 -#define MOVE_EFFECT_SP_DEF_MINUS_1 26 -#define MOVE_EFFECT_ACC_MINUS_1 27 -#define MOVE_EFFECT_EVS_MINUS_1 28 -#define MOVE_EFFECT_RECHARGE 29 -#define MOVE_EFFECT_RAGE 30 -#define MOVE_EFFECT_STEAL_ITEM 31 -#define MOVE_EFFECT_PREVENT_ESCAPE 32 -#define MOVE_EFFECT_NIGHTMARE 33 -#define MOVE_EFFECT_ALL_STATS_UP 34 -#define MOVE_EFFECT_RAPIDSPIN 35 -#define MOVE_EFFECT_REMOVE_STATUS 36 -#define MOVE_EFFECT_ATK_DEF_DOWN 37 -#define MOVE_EFFECT_SCALE_SHOT 38 // MOVE_EFFECT_SCALE_SHOT replaces unused MOVE_EFFECT_RECOIL_33 so that stat change animations don't break -#define MOVE_EFFECT_ATK_PLUS_2 39 -#define MOVE_EFFECT_DEF_PLUS_2 40 -#define MOVE_EFFECT_SPD_PLUS_2 41 -#define MOVE_EFFECT_SP_ATK_PLUS_2 42 -#define MOVE_EFFECT_SP_DEF_PLUS_2 43 -#define MOVE_EFFECT_ACC_PLUS_2 44 -#define MOVE_EFFECT_EVS_PLUS_2 45 -#define MOVE_EFFECT_ATK_MINUS_2 46 -#define MOVE_EFFECT_DEF_MINUS_2 47 -#define MOVE_EFFECT_SPD_MINUS_2 48 -#define MOVE_EFFECT_SP_ATK_MINUS_2 49 -#define MOVE_EFFECT_SP_DEF_MINUS_2 50 -#define MOVE_EFFECT_ACC_MINUS_2 51 -#define MOVE_EFFECT_EVS_MINUS_2 52 -#define MOVE_EFFECT_THRASH 53 -#define MOVE_EFFECT_KNOCK_OFF 54 -#define MOVE_EFFECT_DEF_SPDEF_DOWN 55 -#define MOVE_EFFECT_CLEAR_SMOG 56 -#define MOVE_EFFECT_SP_ATK_TWO_DOWN 57 -#define MOVE_EFFECT_SMACK_DOWN 58 -#define MOVE_EFFECT_FLAME_BURST 59 -#define MOVE_EFFECT_FEINT 60 -#define MOVE_EFFECT_SPECTRAL_THIEF 61 -#define MOVE_EFFECT_V_CREATE 62 -#define MOVE_EFFECT_HAPPY_HOUR 63 -#define MOVE_EFFECT_CORE_ENFORCER 64 -#define MOVE_EFFECT_THROAT_CHOP 65 -#define MOVE_EFFECT_INCINERATE 66 -#define MOVE_EFFECT_BUG_BITE 67 -#define MOVE_EFFECT_RECOIL_HP_25 68 -#define MOVE_EFFECT_RELIC_SONG 69 -#define MOVE_EFFECT_TRAP_BOTH 70 -#define MOVE_EFFECT_DOUBLE_SHOCK 71 -#define MOVE_EFFECT_ROUND 72 -#define MOVE_EFFECT_STOCKPILE_WORE_OFF 73 -#define MOVE_EFFECT_DIRE_CLAW 74 -#define MOVE_EFFECT_STEALTH_ROCK 75 -#define MOVE_EFFECT_SPIKES 76 - -#define NUM_MOVE_EFFECTS 77 +#define MOVE_EFFECT_FROSTBITE 7 +#define PRIMARY_STATUS_MOVE_EFFECT MOVE_EFFECT_FROSTBITE // All above move effects apply primary status +#define MOVE_EFFECT_CONFUSION 8 +#define MOVE_EFFECT_FLINCH 9 +#define MOVE_EFFECT_TRI_ATTACK 10 +#define MOVE_EFFECT_UPROAR 11 +#define MOVE_EFFECT_PAYDAY 12 +#define MOVE_EFFECT_CHARGING 13 +#define MOVE_EFFECT_WRAP 14 +#define MOVE_EFFECT_BURN_UP 15 // MOVE_EFFECT_BURN_UP replaces unused MOVE_EFFECT_RECOIL_25 so that stat change animations don't break +#define MOVE_EFFECT_ATK_PLUS_1 16 +#define MOVE_EFFECT_DEF_PLUS_1 17 +#define MOVE_EFFECT_SPD_PLUS_1 18 +#define MOVE_EFFECT_SP_ATK_PLUS_1 19 +#define MOVE_EFFECT_SP_DEF_PLUS_1 20 +#define MOVE_EFFECT_ACC_PLUS_1 21 +#define MOVE_EFFECT_EVS_PLUS_1 22 +#define MOVE_EFFECT_ATK_MINUS_1 23 +#define MOVE_EFFECT_DEF_MINUS_1 24 +#define MOVE_EFFECT_SPD_MINUS_1 25 +#define MOVE_EFFECT_SP_ATK_MINUS_1 26 +#define MOVE_EFFECT_SP_DEF_MINUS_1 27 +#define MOVE_EFFECT_ACC_MINUS_1 28 +#define MOVE_EFFECT_EVS_MINUS_1 29 +#define MOVE_EFFECT_RECHARGE 30 +#define MOVE_EFFECT_RAGE 31 +#define MOVE_EFFECT_STEAL_ITEM 32 +#define MOVE_EFFECT_PREVENT_ESCAPE 33 +#define MOVE_EFFECT_NIGHTMARE 34 +#define MOVE_EFFECT_ALL_STATS_UP 35 +#define MOVE_EFFECT_RAPIDSPIN 36 +#define MOVE_EFFECT_REMOVE_STATUS 37 +#define MOVE_EFFECT_ATK_DEF_DOWN 38 +#define MOVE_EFFECT_SCALE_SHOT 39 // MOVE_EFFECT_SCALE_SHOT replaces unused MOVE_EFFECT_RECOIL_33 so that stat change animations don't break +#define MOVE_EFFECT_ATK_PLUS_2 40 +#define MOVE_EFFECT_DEF_PLUS_2 41 +#define MOVE_EFFECT_SPD_PLUS_2 42 +#define MOVE_EFFECT_SP_ATK_PLUS_2 43 +#define MOVE_EFFECT_SP_DEF_PLUS_2 44 +#define MOVE_EFFECT_ACC_PLUS_2 45 +#define MOVE_EFFECT_EVS_PLUS_2 46 +#define MOVE_EFFECT_ATK_MINUS_2 47 +#define MOVE_EFFECT_DEF_MINUS_2 48 +#define MOVE_EFFECT_SPD_MINUS_2 49 +#define MOVE_EFFECT_SP_ATK_MINUS_2 50 +#define MOVE_EFFECT_SP_DEF_MINUS_2 51 +#define MOVE_EFFECT_ACC_MINUS_2 52 +#define MOVE_EFFECT_EVS_MINUS_2 53 +#define MOVE_EFFECT_THRASH 54 +#define MOVE_EFFECT_KNOCK_OFF 55 +#define MOVE_EFFECT_DEF_SPDEF_DOWN 56 +#define MOVE_EFFECT_CLEAR_SMOG 57 +#define MOVE_EFFECT_SP_ATK_TWO_DOWN 58 +#define MOVE_EFFECT_SMACK_DOWN 59 +#define MOVE_EFFECT_FLAME_BURST 60 +#define MOVE_EFFECT_FEINT 61 +#define MOVE_EFFECT_SPECTRAL_THIEF 62 +#define MOVE_EFFECT_V_CREATE 63 +#define MOVE_EFFECT_HAPPY_HOUR 64 +#define MOVE_EFFECT_CORE_ENFORCER 65 +#define MOVE_EFFECT_THROAT_CHOP 66 +#define MOVE_EFFECT_INCINERATE 67 +#define MOVE_EFFECT_BUG_BITE 68 +#define MOVE_EFFECT_RECOIL_HP_25 69 +#define MOVE_EFFECT_RELIC_SONG 70 +#define MOVE_EFFECT_TRAP_BOTH 71 +#define MOVE_EFFECT_DOUBLE_SHOCK 72 +#define MOVE_EFFECT_ROUND 73 +#define MOVE_EFFECT_STOCKPILE_WORE_OFF 74 +#define MOVE_EFFECT_DIRE_CLAW 75 +#define MOVE_EFFECT_STEALTH_ROCK 76 +#define MOVE_EFFECT_SPIKES 77 + +#define NUM_MOVE_EFFECTS 78 #define MOVE_EFFECT_AFFECTS_USER 0x4000 #define MOVE_EFFECT_CERTAIN 0x8000 diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h index d1562dec9360..5df12b4496c5 100644 --- a/include/constants/battle_move_effects.h +++ b/include/constants/battle_move_effects.h @@ -405,7 +405,8 @@ #define EFFECT_DIRE_CLAW 399 #define EFFECT_BARB_BARRAGE 400 #define EFFECT_REVIVAL_BLESSING 401 +#define EFFECT_FROSTBITE_HIT 402 -#define NUM_BATTLE_MOVE_EFFECTS 402 +#define NUM_BATTLE_MOVE_EFFECTS 403 #endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index 10e2a6fe56f8..b482a359479b 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -652,8 +652,9 @@ #define STRINGID_ITEMCUREDSPECIESSTATUS 650 #define STRINGID_ITEMRESTOREDSPECIESPP 651 #define STRINGID_PKMNHURTBYFROSTBITE 652 +#define STRINGID_PKMNGOTFROSTBITE 653 -#define BATTLESTRINGS_COUNT 653 +#define BATTLESTRINGS_COUNT 654 // This is the string id that gBattleStringsTable starts with. // String ids before this (e.g. STRINGID_INTROMSG) are not in the table, diff --git a/include/pokemon.h b/include/pokemon.h index 581677cae716..a889e70aa5a5 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -346,7 +346,7 @@ struct BattleMove s8 priority; u32 flags; u8 split; - u8 argument; + u16 argument; u8 zMoveEffect; }; diff --git a/src/battle_message.c b/src/battle_message.c index b3be9afd1c16..e77182f1b2d7 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -101,6 +101,7 @@ static const u8 sText_PkmnAlreadyPoisoned[] = _("{B_DEF_NAME_WITH_PREFIX} is alr static const u8 sText_PkmnBadlyPoisoned[] = _("{B_EFF_NAME_WITH_PREFIX} is badly\npoisoned!"); static const u8 sText_PkmnEnergyDrained[] = _("{B_DEF_NAME_WITH_PREFIX} had its\nenergy drained!"); static const u8 sText_PkmnWasBurned[] = _("{B_EFF_NAME_WITH_PREFIX} was burned!"); +static const u8 sText_PkmnGotFrostbite[] = _("{B_EFF_NAME_WITH_PREFIX} got frostbite!"); static const u8 sText_PkmnBurnedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nburned {B_EFF_NAME_WITH_PREFIX}!"); static const u8 sText_PkmnHurtByBurn[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt\nby its burn!"); static const u8 sText_PkmnHurtByFrostbite[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt\nby its frostbite!"); @@ -1430,6 +1431,7 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_ATTACKERLOSTELECTRICTYPE - BATTLESTRINGS_TABLE_START] = sText_AttackerLostElectricType, [STRINGID_PKMNSABILITYPREVENTSABILITY - BATTLESTRINGS_TABLE_START] = sText_PkmnsAbilityPreventsAbility, [STRINGID_PKMNHURTBYFROSTBITE - BATTLESTRINGS_TABLE_START] = sText_PkmnHurtByFrostbite, + [STRINGID_PKMNGOTFROSTBITE - BATTLESTRINGS_TABLE_START] = sText_PkmnGotFrostbite, }; const u16 gTrainerUsedItemStringIds[] = @@ -1731,6 +1733,11 @@ const u16 gGotBurnedStringIds[] = [B_MSG_STATUSED_BY_ABILITY] = STRINGID_PKMNBURNEDBY }; +const u16 gGotFrostbiteStringIds[] = +{ + [B_MSG_STATUSED] = STRINGID_PKMNGOTFROSTBITE +}; + const u16 gGotFrozenStringIds[] = { [B_MSG_STATUSED] = STRINGID_PKMNWASFROZEN, diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 4e1494ce3828..7273b03ae270 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -61,6 +61,7 @@ #include "constants/trainers.h" #include "battle_util.h" #include "constants/pokemon.h" +#include "config/battle.h" // Helper for accessing command arguments and advancing gBattlescriptCurrInstr. // @@ -896,6 +897,7 @@ static const u32 sStatusFlagsForMoveEffects[NUM_MOVE_EFFECTS] = [MOVE_EFFECT_FREEZE] = STATUS1_FREEZE, [MOVE_EFFECT_PARALYSIS] = STATUS1_PARALYSIS, [MOVE_EFFECT_TOXIC] = STATUS1_TOXIC_POISON, + [MOVE_EFFECT_FROSTBITE] = STATUS1_FROSTBITE, [MOVE_EFFECT_CONFUSION] = STATUS2_CONFUSION, [MOVE_EFFECT_FLINCH] = STATUS2_FLINCHED, [MOVE_EFFECT_UPROAR] = STATUS2_UPROAR, @@ -919,6 +921,7 @@ static const u8 *const sMoveEffectBS_Ptrs[] = [MOVE_EFFECT_UPROAR] = BattleScript_MoveEffectUproar, [MOVE_EFFECT_PAYDAY] = BattleScript_MoveEffectPayDay, [MOVE_EFFECT_WRAP] = BattleScript_MoveEffectWrap, + [MOVE_EFFECT_FROSTBITE] = BattleScript_MoveEffectFrostbite, }; static const struct WindowTemplate sUnusedWinTemplate = @@ -3161,6 +3164,12 @@ void SetMoveEffect(bool32 primary, u32 certain) gMoveResultFlags |= MOVE_RESULT_DOESNT_AFFECT_FOE; } break; + case STATUS1_FROSTBITE: + if (!CanBeFrozen(gEffectBattler)) + break; + + statusChanged = TRUE; + break; } if (statusChanged == TRUE) { @@ -3319,7 +3328,11 @@ void SetMoveEffect(bool32 primary, u32 certain) } else { + #if B_USE_FROSTBITE == TRUE + static const u8 sTriAttackEffects[] = { MOVE_EFFECT_BURN, MOVE_EFFECT_FROSTBITE, MOVE_EFFECT_PARALYSIS }; + #else static const u8 sTriAttackEffects[] = { MOVE_EFFECT_BURN, MOVE_EFFECT_FREEZE, MOVE_EFFECT_PARALYSIS }; + #endif gBattleScripting.moveEffect = RandomElement(RNG_TRI_ATTACK, sTriAttackEffects); SetMoveEffect(FALSE, 0); } @@ -9960,6 +9973,9 @@ static void Cmd_various(void) case STATUS1_TOXIC_POISON: gBattleScripting.moveEffect = MOVE_EFFECT_TOXIC; break; + case STATUS1_FROSTBITE: + gBattleScripting.moveEffect = MOVE_EFFECT_FROSTBITE; + break; default: gBattleScripting.moveEffect = 0; break; @@ -15079,7 +15095,11 @@ u16 GetSecretPowerMoveEffect(void) break; case BATTLE_TERRAIN_SNOW: case BATTLE_TERRAIN_ICE: + #if B_USE_FROSTBITE == TRUE + moveEffect = MOVE_EFFECT_FROSTBITE; + #else moveEffect = MOVE_EFFECT_FREEZE; + #endif break; case BATTLE_TERRAIN_VOLCANO: moveEffect = MOVE_EFFECT_BURN; diff --git a/src/battle_tv.c b/src/battle_tv.c index 10c2144ccdb2..f5c9f43c4ec9 100644 --- a/src/battle_tv.c +++ b/src/battle_tv.c @@ -481,6 +481,7 @@ static const u16 sPoints_MoveEffect[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_DOUBLE_SHOCK] = 0, // TODO: Assign points [EFFECT_SPECIAL_ATTACK_UP_HIT] = 1, [EFFECT_VICTORY_DANCE] = 0, // TODO: Assign points + [EFFECT_FROSTBITE_HIT] = 1, }; static const u16 sPoints_Effectiveness[] = diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index 4a89222a966c..a1cc695059fe 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -121,7 +121,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_ICE_PUNCH] = { - .effect = EFFECT_FREEZE_HIT, + #if B_USE_FROSTBITE == TRUE + .effect = EFFECT_FROSTBITE_HIT, + #else + .effect = EFFECT_FREEZE_HIT, + #endif .power = 75, .type = TYPE_ICE, .accuracy = 100, @@ -982,7 +986,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = #else .power = 95, #endif - .effect = EFFECT_FREEZE_HIT, + #if B_USE_FROSTBITE == TRUE + .effect = EFFECT_FROSTBITE_HIT, + #else + .effect = EFFECT_FREEZE_HIT, + #endif .type = TYPE_ICE, .accuracy = 100, .pp = 10, @@ -1001,7 +1009,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = #else .power = 120, #endif - .effect = EFFECT_FREEZE_HIT, + #if B_USE_FROSTBITE == TRUE + .effect = EFFECT_FROSTBITE_HIT, + #else + .effect = EFFECT_FREEZE_HIT, + #endif .type = TYPE_ICE, .accuracy = 70, .pp = 5, @@ -3062,7 +3074,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_POWDER_SNOW] = { - .effect = EFFECT_FREEZE_HIT, + #if B_USE_FROSTBITE == TRUE + .effect = EFFECT_FROSTBITE_HIT, + #else + .effect = EFFECT_FREEZE_HIT, + #endif .power = 40, .type = TYPE_ICE, .accuracy = 100, @@ -7177,6 +7193,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = #else .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_STRONG_JAW_BOOST, #endif + #if B_USE_FROSTBITE == TRUE + .argument = STATUS1_FROSTBITE, + #else + .argument = STATUS1_FREEZE, + #endif .effect = EFFECT_FLINCH_STATUS, .power = 65, .type = TYPE_ICE, @@ -7186,7 +7207,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, - .argument = STATUS1_FREEZE, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12354,7 +12374,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_FREEZING_GLARE] = { .power = 90, - .effect = EFFECT_FREEZE_HIT, + #if B_USE_FROSTBITE == TRUE + .effect = EFFECT_FROSTBITE_HIT, + #else + .effect = EFFECT_FREEZE_HIT, + #endif .type = TYPE_PSYCHIC, .accuracy = 100, .pp = 10, From 13f6acf9a1e0731afcf0d144c2b12409dde00a3a Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Sun, 23 Apr 2023 19:20:48 +0200 Subject: [PATCH 297/428] General mechanics --- data/battle_scripts_1.s | 16 ++++++++++++++ include/battle_scripts.h | 2 ++ include/constants/battle_string_ids.h | 4 +++- src/battle_message.c | 6 +++++- src/battle_script_commands.c | 6 ++++-- src/battle_util.c | 31 +++++++++++++++++++++------ 6 files changed, 55 insertions(+), 10 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 3bfc3ac08916..a169b1275218 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -581,6 +581,7 @@ BattleScript_AffectionBasedStatusHeal:: jumpifstatus BS_ATTACKER, STATUS1_PARALYSIS, BattleScript_AffectionBasedStatus_HealParalysisString jumpifstatus BS_ATTACKER, STATUS1_BURN, BattleScript_AffectionBasedStatus_HealBurnString jumpifstatus BS_ATTACKER, STATUS1_FREEZE, BattleScript_AffectionBasedStatus_HealFreezeString + jumpifstatus BS_ATTACKER, STATUS1_FROSTBITE, BattleScript_AffectionBasedStatus_HealFrostbiteString end2 BattleScript_AffectionBasedStatus_HealPoisonString: printstring STRINGID_ATTACKEREXPELLEDTHEPOISON @@ -596,6 +597,9 @@ BattleScript_AffectionBasedStatus_HealBurnString: goto BattleScript_AffectionBasedStatusHeal_Continue BattleScript_AffectionBasedStatus_HealFreezeString: printstring STRINGID_ATTACKERMELTEDTHEICE + goto BattleScript_AffectionBasedStatusHeal_Continue +BattleScript_AffectionBasedStatus_HealFrostbiteString: + printstring STRINGID_ATTACKERHEALEDITSFROSTBITE BattleScript_AffectionBasedStatusHeal_Continue: waitmessage B_WAIT_TIME_LONG clearstatus BS_ATTACKER @@ -9580,6 +9584,18 @@ BattleScript_BerryCureFrzRet:: removeitem BS_SCRIPTING return +BattleScript_BerryCureFsbEnd2:: + call BattleScript_BerryCureFrzRet + end2 + +BattleScript_BerryCureFsbRet:: + playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT + printstring STRINGID_PKMNSITEMHEALEDFROSTBITE + waitmessage B_WAIT_TIME_LONG + updatestatusicon BS_SCRIPTING + removeitem BS_SCRIPTING + return + BattleScript_BerryCureSlpEnd2:: call BattleScript_BerryCureSlpRet end2 diff --git a/include/battle_scripts.h b/include/battle_scripts.h index 9b9156eb6fed..6fcdcac258eb 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -197,6 +197,8 @@ extern const u8 BattleScript_BerryCureBrnEnd2[]; extern const u8 BattleScript_BerryCureBrnRet[]; extern const u8 BattleScript_BerryCureFrzEnd2[]; extern const u8 BattleScript_BerryCureFrzRet[]; +extern const u8 BattleScript_BerryCureFsbEnd2[]; +extern const u8 BattleScript_BerryCureFsbRet[]; extern const u8 BattleScript_BerryCureSlpEnd2[]; extern const u8 BattleScript_BerryCureSlpRet[]; extern const u8 BattleScript_BerryCureConfusionEnd2[]; diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index b482a359479b..4e8cd9ab834e 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -653,8 +653,10 @@ #define STRINGID_ITEMRESTOREDSPECIESPP 651 #define STRINGID_PKMNHURTBYFROSTBITE 652 #define STRINGID_PKMNGOTFROSTBITE 653 +#define STRINGID_PKMNSITEMHEALEDFROSTBITE 654 +#define STRINGID_ATTACKERHEALEDITSFROSTBITE 655 -#define BATTLESTRINGS_COUNT 654 +#define BATTLESTRINGS_COUNT 656 // This is the string id that gBattleStringsTable starts with. // String ids before this (e.g. STRINGID_INTROMSG) are not in the table, diff --git a/src/battle_message.c b/src/battle_message.c index e77182f1b2d7..39d862057cba 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -493,6 +493,7 @@ static const u8 sText_BerrySuffix[] = _(" BERRY"); static const u8 sText_PkmnsItemCuredParalysis[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\ncured paralysis!"); static const u8 sText_PkmnsItemCuredPoison[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\ncured poison!"); static const u8 sText_PkmnsItemHealedBurn[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\nhealed its burn!"); +static const u8 sText_PkmnsItemHealedFrostbite[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\nhealed its frostbite!"); static const u8 sText_PkmnsItemDefrostedIt[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\ndefrosted it!"); static const u8 sText_PkmnsItemWokeIt[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\nwoke it from its sleep!"); static const u8 sText_PkmnsItemSnappedOut[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\nsnapped it out of confusion!"); @@ -770,6 +771,7 @@ static const u8 sText_AttackerExpelledThePoison[] = _("{B_ATK_NAME_WITH_PREFIX} static const u8 sText_AttackerShookItselfAwake[] = _("{B_ATK_NAME_WITH_PREFIX} shook itself awake!"); static const u8 sText_AttackerBrokeThroughParalysis[] = _("{B_ATK_NAME_WITH_PREFIX} gathered all its energy\nto overcome its paralysis!"); static const u8 sText_AttackerHealedItsBurn[] = _("{B_ATK_NAME_WITH_PREFIX} healed its burn with\nits sheer determination!"); +static const u8 sText_AttackerHealedItsFrostbite[] = _("{B_ATK_NAME_WITH_PREFIX} healed its frostbite with\nits sheer determination!"); static const u8 sText_AttackerMeltedTheIce[] = _("{B_ATK_NAME_WITH_PREFIX} melted the ice with\nits fiery determination!"); static const u8 sText_TargetToughedItOut[] = _("{B_DEF_NAME_WITH_PREFIX} toughed it out\nto show you its best side!"); static const u8 sText_AttackerLostElectricType[] = _("{B_ATK_NAME_WITH_PREFIX} used up all\nof its electricity!"); @@ -1432,6 +1434,8 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_PKMNSABILITYPREVENTSABILITY - BATTLESTRINGS_TABLE_START] = sText_PkmnsAbilityPreventsAbility, [STRINGID_PKMNHURTBYFROSTBITE - BATTLESTRINGS_TABLE_START] = sText_PkmnHurtByFrostbite, [STRINGID_PKMNGOTFROSTBITE - BATTLESTRINGS_TABLE_START] = sText_PkmnGotFrostbite, + [STRINGID_PKMNSITEMHEALEDFROSTBITE - BATTLESTRINGS_TABLE_START] = sText_PkmnsItemHealedFrostbite, + [STRINGID_ATTACKERHEALEDITSFROSTBITE - BATTLESTRINGS_TABLE_START] = sText_AttackerHealedItsFrostbite, }; const u16 gTrainerUsedItemStringIds[] = @@ -1898,7 +1902,7 @@ const u16 gRoomsStringIds[] = const u16 gStatusConditionsStringIds[] = { - STRINGID_PKMNWASPOISONED, STRINGID_PKMNBADLYPOISONED, STRINGID_PKMNWASBURNED, STRINGID_PKMNWASPARALYZED, STRINGID_PKMNFELLASLEEP + STRINGID_PKMNWASPOISONED, STRINGID_PKMNBADLYPOISONED, STRINGID_PKMNWASBURNED, STRINGID_PKMNWASPARALYZED, STRINGID_PKMNFELLASLEEP, STRINGID_PKMNGOTFROSTBITE }; const u8 gText_PkmnIsEvolving[] = _("What?\n{STR_VAR_1} is evolving!"); diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 7273b03ae270..ecf9023936a6 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -10144,6 +10144,8 @@ static void Cmd_various(void) gBattleCommunication[MULTISTRING_CHOOSER] = 3; else if ((gBattleMons[gBattlerAttacker].status1 & STATUS1_SLEEP) && CanSleep(gBattlerTarget)) gBattleCommunication[MULTISTRING_CHOOSER] = 4; + else if ((gBattleMons[gBattlerAttacker].status1 & STATUS1_FROSTBITE) && CanBeFrozen(gBattlerTarget)) + gBattleCommunication[MULTISTRING_CHOOSER] = 5; else { gBattlescriptCurrInstr = cmd->failInstr; @@ -14370,7 +14372,7 @@ static void Cmd_cureifburnedparalysedorpoisoned(void) { CMD_ARGS(const u8 *failInstr); - if (gBattleMons[gBattlerAttacker].status1 & (STATUS1_POISON | STATUS1_BURN | STATUS1_PARALYSIS | STATUS1_TOXIC_POISON)) + if (gBattleMons[gBattlerAttacker].status1 & (STATUS1_POISON | STATUS1_BURN | STATUS1_PARALYSIS | STATUS1_TOXIC_POISON | STATUS1_FROSTBITE)) { gBattleMons[gBattlerAttacker].status1 = 0; gBattlescriptCurrInstr = cmd->nextInstr; @@ -15696,7 +15698,7 @@ static void Cmd_handleballthrow(void) if (gBattleMons[gBattlerTarget].status1 & (STATUS1_SLEEP | STATUS1_FREEZE)) odds *= 2; - if (gBattleMons[gBattlerTarget].status1 & (STATUS1_POISON | STATUS1_BURN | STATUS1_PARALYSIS | STATUS1_TOXIC_POISON)) + if (gBattleMons[gBattlerTarget].status1 & (STATUS1_POISON | STATUS1_BURN | STATUS1_PARALYSIS | STATUS1_TOXIC_POISON | STATUS1_FROSTBITE)) odds = (odds * 15) / 10; if (gBattleResults.catchAttempts[gLastUsedItem - FIRST_BALL] < 255) diff --git a/src/battle_util.c b/src/battle_util.c index 993a0d5ab3b1..456936fadb57 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -4916,7 +4916,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move StringCopy(gBattleTextBuff1, gStatusConditionString_ParalysisJpn); if (gBattleMons[battler].status1 & STATUS1_BURN) StringCopy(gBattleTextBuff1, gStatusConditionString_BurnJpn); - if (gBattleMons[battler].status1 & STATUS1_FREEZE) + if (gBattleMons[battler].status1 & (STATUS1_FREEZE | STATUS1_FROSTBITE)) StringCopy(gBattleTextBuff1, gStatusConditionString_IceJpn); gBattleMons[battler].status1 = 0; @@ -5957,7 +5957,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move } break; case ABILITY_MAGMA_ARMOR: - if (gBattleMons[battler].status1 & STATUS1_FREEZE) + if (gBattleMons[battler].status1 & (STATUS1_FREEZE | STATUS1_FROSTBITE)) { StringCopy(gBattleTextBuff1, gStatusConditionString_IceJpn); effect = 1; @@ -6904,6 +6904,13 @@ static u8 ItemEffectMoveEnd(u32 battlerId, u16 holdEffect) gBattlescriptCurrInstr = BattleScript_BerryCureFrzRet; effect = ITEM_STATUS_CHANGE; } + if (gBattleMons[battlerId].status1 & STATUS1_FROSTBITE && !UnnerveOn(battlerId, gLastUsedItem)) + { + gBattleMons[battlerId].status1 &= ~STATUS1_FROSTBITE; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_BerryCureFsbRet; + effect = ITEM_STATUS_CHANGE; + } break; case HOLD_EFFECT_CURE_SLP: if (gBattleMons[battlerId].status1 & STATUS1_SLEEP && !UnnerveOn(battlerId, gLastUsedItem)) @@ -6952,7 +6959,7 @@ static u8 ItemEffectMoveEnd(u32 battlerId, u16 holdEffect) if (gBattleMons[battlerId].status1 & STATUS1_BURN) StringCopy(gBattleTextBuff1, gStatusConditionString_BurnJpn); - if (gBattleMons[battlerId].status1 & STATUS1_FREEZE) + if (gBattleMons[battlerId].status1 & STATUS1_FREEZE || gBattleMons[battlerId].status1 & STATUS1_FROSTBITE) StringCopy(gBattleTextBuff1, gStatusConditionString_IceJpn); if (gBattleMons[battlerId].status2 & STATUS2_CONFUSION) @@ -7125,6 +7132,12 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn) BattleScriptExecute(BattleScript_BerryCureFrzEnd2); effect = ITEM_STATUS_CHANGE; } + if (gBattleMons[battlerId].status1 & STATUS1_FROSTBITE && !UnnerveOn(battlerId, gLastUsedItem)) + { + gBattleMons[battlerId].status1 &= ~STATUS1_FROSTBITE; + BattleScriptExecute(BattleScript_BerryCureFsbEnd2); + effect = ITEM_STATUS_CHANGE; + } break; case HOLD_EFFECT_CURE_SLP: if (gBattleMons[battlerId].status1 & STATUS1_SLEEP && !UnnerveOn(battlerId, gLastUsedItem)) @@ -7160,7 +7173,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn) StringCopy(gBattleTextBuff1, gStatusConditionString_BurnJpn); i++; } - if (gBattleMons[battlerId].status1 & STATUS1_FREEZE) + if (gBattleMons[battlerId].status1 & STATUS1_FREEZE || gBattleMons[battlerId].status1 & STATUS1_FROSTBITE) { StringCopy(gBattleTextBuff1, gStatusConditionString_IceJpn); i++; @@ -7443,6 +7456,12 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn) BattleScriptExecute(BattleScript_BerryCureFrzEnd2); effect = ITEM_STATUS_CHANGE; } + if (gBattleMons[battlerId].status1 & STATUS1_FROSTBITE && !UnnerveOn(battlerId, gLastUsedItem)) + { + gBattleMons[battlerId].status1 &= ~STATUS1_FROSTBITE; + BattleScriptExecute(BattleScript_BerryCureFsbEnd2); + effect = ITEM_STATUS_CHANGE; + } break; case HOLD_EFFECT_CURE_SLP: if (gBattleMons[battlerId].status1 & STATUS1_SLEEP && !UnnerveOn(battlerId, gLastUsedItem)) @@ -7486,7 +7505,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn) StringCopy(gBattleTextBuff1, gStatusConditionString_BurnJpn); i++; } - if (gBattleMons[battlerId].status1 & STATUS1_FREEZE) + if (gBattleMons[battlerId].status1 & STATUS1_FREEZE || gBattleMons[battlerId].status1 & STATUS1_FROSTBITE) { StringCopy(gBattleTextBuff1, gStatusConditionString_IceJpn); i++; @@ -9054,7 +9073,7 @@ static u32 CalcMoveBasePowerAfterModifiers(u16 move, u8 battlerAtk, u8 battlerDe switch (gBattleMoves[move].effect) { case EFFECT_FACADE: - if (gBattleMons[battlerAtk].status1 & (STATUS1_BURN | STATUS1_PSN_ANY | STATUS1_PARALYSIS)) + if (gBattleMons[battlerAtk].status1 & (STATUS1_BURN | STATUS1_PSN_ANY | STATUS1_PARALYSIS | STATUS1_FROSTBITE)) MulModifier(&modifier, UQ_4_12(2.0)); break; case EFFECT_BRINE: From a020001a78e7cd08537d6c6ca85d5cd273792a89 Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Sun, 23 Apr 2023 20:33:28 +0200 Subject: [PATCH 298/428] Battle Pike functionality --- src/battle_pike.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/battle_pike.c b/src/battle_pike.c index 9751d565de5c..37dfd9997d19 100644 --- a/src/battle_pike.c +++ b/src/battle_pike.c @@ -729,6 +729,7 @@ static void GetRoomInflictedStatus(void) switch (sStatusFlags) { case STATUS1_FREEZE: + case STATUS1_FROSTBITE: gSpecialVar_Result = PIKE_STATUS_FREEZE; break; case STATUS1_BURN: @@ -818,6 +819,7 @@ static bool8 DoesAbilityPreventStatus(struct Pokemon *mon, u32 status) switch (status) { case STATUS1_FREEZE: + case STATUS1_FROSTBITE: if (ability == ABILITY_MAGMA_ARMOR) ret = TRUE; break; @@ -853,6 +855,7 @@ static bool8 DoesTypePreventStatus(u16 species, u32 status) ret = TRUE; break; case STATUS1_FREEZE: + case STATUS1_FROSTBITE: if (gSpeciesInfo[species].types[0] == TYPE_ICE || gSpeciesInfo[species].types[1] == TYPE_ICE) ret = TRUE; break; @@ -913,7 +916,11 @@ static bool8 TryInflictRandomStatus(void) if (rand < 35) sStatusFlags = STATUS1_TOXIC_POISON; else if (rand < 60) + #if B_USE_FROSTBITE == TRUE + sStatusFlags = STATUS1_FROSTBITE; + #else sStatusFlags = STATUS1_FREEZE; + #endif else if (rand < 80) sStatusFlags = STATUS1_PARALYSIS; else if (rand < 90) @@ -950,6 +957,7 @@ static bool8 TryInflictRandomStatus(void) switch (sStatusFlags) { case STATUS1_FREEZE: + case STATUS1_FROSTBITE: sStatusMon = PIKE_STATUSMON_DUSCLOPS; break; case STATUS1_BURN: From 6b2a873071ae9526d25b784e2d667c48c7d296c1 Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Sun, 23 Apr 2023 20:41:19 +0200 Subject: [PATCH 299/428] Add comment in Ice Beam --- src/data/battle_moves.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index a1cc695059fe..9473bae71cb2 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -986,6 +986,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = #else .power = 95, #endif + // The following effect is also relevant in battle_pike.c + // If you cherry-pick this to use something other than the config, make sure to update it there too #if B_USE_FROSTBITE == TRUE .effect = EFFECT_FROSTBITE_HIT, #else From 0b8d148c2643fdd85735663f602252d590c53582 Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Sun, 23 Apr 2023 20:53:51 +0200 Subject: [PATCH 300/428] Let AI take Frostbite into account --- include/battle_ai_util.h | 3 +++ src/battle_ai_main.c | 32 +++++++++++++++++++++++++---- src/battle_ai_util.c | 44 +++++++++++++++++++++++++++++++++++++++- 3 files changed, 74 insertions(+), 5 deletions(-) diff --git a/include/battle_ai_util.h b/include/battle_ai_util.h index d1319f0ca776..f2dd8f03edc6 100644 --- a/include/battle_ai_util.h +++ b/include/battle_ai_util.h @@ -130,6 +130,7 @@ bool32 IsSemiInvulnerable(u8 battlerDef, u16 move); // status checks bool32 AI_CanBeBurned(u8 battler, u16 ability); +bool32 AI_CanGetFrostbite(u8 battler, u16 ability); bool32 AI_CanBeConfused(u8 battler, u16 ability); bool32 AI_CanSleep(u8 battler, u16 ability); bool32 IsBattlerIncapacitated(u8 battler, u16 ability); @@ -140,6 +141,7 @@ bool32 AI_CanParalyze(u8 battlerAtk, u8 battlerDef, u16 defAbility, u16 move, u1 bool32 AI_CanConfuse(u8 battlerAtk, u8 battlerDef, u16 defAbility, u8 battlerAtkPartner, u16 move, u16 partnerMove); bool32 ShouldBurnSelf(u8 battler, u16 ability); bool32 AI_CanBurn(u8 battlerAtk, u8 battlerDef, u16 defAbility, u8 battlerAtkPartner, u16 move, u16 partnerMove); +bool32 AI_CanGiveFrostbite(u8 battlerAtk, u8 battlerDef, u16 defAbility, u8 battlerAtkPartner, u16 move, u16 partnerMove); bool32 AI_CanBeInfatuated(u8 battlerAtk, u8 battlerDef, u16 defAbility, u8 atkGender, u8 defGender); bool32 AnyPartyMemberStatused(u8 battlerId, bool32 checkSoundproof); u32 ShouldTryToFlinch(u8 battlerAtk, u8 battlerDef, u16 atkAbility, u16 defAbility, u16 move); @@ -175,5 +177,6 @@ void IncreaseBurnScore(u8 battlerAtk, u8 battlerdef, u16 move, s16 *score); void IncreaseParalyzeScore(u8 battlerAtk, u8 battlerDef, u16 move, s16 *score); void IncreaseSleepScore(u8 battlerAtk, u8 battlerDef, u16 move, s16 *score); void IncreaseConfusionScore(u8 battlerAtk, u8 battlerDef, u16 move, s16 *score); +void IncreaseFrostbiteScore(u8 battlerAtk, u8 battlerdef, u16 move, s16 *score); #endif //GUARD_BATTLE_AI_UTIL_H \ No newline at end of file diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 6c60705d5a7c..77220f79efbd 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -1725,7 +1725,7 @@ static s16 AI_CheckBadMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) score -= 10; break; case EFFECT_REFRESH: - if (!(gBattleMons[battlerDef].status1 & (STATUS1_PSN_ANY | STATUS1_BURN | STATUS1_PARALYSIS))) + if (!(gBattleMons[battlerDef].status1 & (STATUS1_PSN_ANY | STATUS1_BURN | STATUS1_PARALYSIS | STATUS1_FROSTBITE))) score -= 10; break; case EFFECT_PSYCHO_SHIFT: @@ -1734,6 +1734,9 @@ static s16 AI_CheckBadMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) else if (gBattleMons[battlerAtk].status1 & STATUS1_BURN && !AI_CanBurn(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef], BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove)) score -= 10; + else if (gBattleMons[battlerAtk].status1 & STATUS1_FROSTBITE && !AI_CanGiveFrostbite(battlerAtk, battlerDef, + AI_DATA->abilities[battlerDef], BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove)) + score -= 10; else if (gBattleMons[battlerAtk].status1 & STATUS1_PARALYSIS && !AI_CanParalyze(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef], move, AI_DATA->partnerMove)) score -= 10; else if (gBattleMons[battlerAtk].status1 & STATUS1_SLEEP && !AI_CanPutToSleep(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef], move, AI_DATA->partnerMove)) @@ -3143,7 +3146,7 @@ static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) score++; // check thawing moves - if ((gBattleMons[battlerAtk].status1 & STATUS1_FREEZE) && TestMoveFlags(move, FLAG_THAW_USER)) + if ((gBattleMons[battlerAtk].status1 & (STATUS1_FREEZE | STATUS1_FROSTBITE)) && TestMoveFlags(move, FLAG_THAW_USER)) score += (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) ? 20 : 10; // check burn @@ -3165,6 +3168,25 @@ static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) } } + // check frostbite + if (gBattleMons[battlerAtk].status1 & STATUS1_FROSTBITE) + { + switch (AI_DATA->abilities[battlerAtk]) + { + case ABILITY_GUTS: + break; + case ABILITY_NATURAL_CURE: + if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_SMART_SWITCHING + && HasOnlyMovesWithSplit(battlerAtk, SPLIT_SPECIAL, TRUE)) + score = 90; // Force switch if all your attacking moves are special and you have Natural Cure. + break; + default: + if (IS_MOVE_SPECIAL(move) && gBattleMoves[move].effect != EFFECT_FACADE) + score -= 2; + break; + } + } + // attacker ability checks switch (AI_DATA->abilities[battlerAtk]) { @@ -3602,7 +3624,7 @@ static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) case EFFECT_SUBSTITUTE: if (gStatuses3[battlerDef] & STATUS3_PERISH_SONG) score += 3; - if (gBattleMons[battlerDef].status1 & (STATUS1_BURN | STATUS1_PSN_ANY)) + if (gBattleMons[battlerDef].status1 & (STATUS1_BURN | STATUS1_PSN_ANY | STATUS1_FROSTBITE)) score++; if (HasMoveEffect(battlerDef, EFFECT_SLEEP) || HasMoveEffect(battlerDef, EFFECT_TOXIC) @@ -4391,6 +4413,8 @@ static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) IncreaseParalyzeScore(battlerAtk, battlerDef, move, &score); else if (gBattleMons[battlerAtk].status1 & STATUS1_SLEEP) IncreaseSleepScore(battlerAtk, battlerDef, move, &score); + else if (gBattleMons[battlerAtk].status1 & STATUS1_FROSTBITE) + IncreaseFrostbiteScore(battlerAtk, battlerDef, move, &score); break; case EFFECT_GRUDGE: break; @@ -4781,7 +4805,7 @@ static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) score += 2; break; case EFFECT_FACADE: - if (gBattleMons[battlerAtk].status1 & (STATUS1_POISON | STATUS1_BURN | STATUS1_PARALYSIS | STATUS1_TOXIC_POISON)) + if (gBattleMons[battlerAtk].status1 & (STATUS1_POISON | STATUS1_BURN | STATUS1_PARALYSIS | STATUS1_TOXIC_POISON | STATUS1_FROSTBITE)) score++; break; case EFFECT_FOCUS_PUNCH: diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 05e7aec58f11..dabeb33c78ee 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -1678,7 +1678,7 @@ void ProtectChecks(u8 battlerAtk, u8 battlerDef, u16 move, u16 predictedMove, s1 (*score) -= min(uses, 3); } - if (gBattleMons[battlerAtk].status1 & (STATUS1_PSN_ANY | STATUS1_BURN) + if (gBattleMons[battlerAtk].status1 & (STATUS1_PSN_ANY | STATUS1_BURN | STATUS1_FROSTBITE) || gBattleMons[battlerAtk].status2 & (STATUS2_CURSED | STATUS2_INFATUATION) || gStatuses3[battlerAtk] & (STATUS3_PERISH_SONG | STATUS3_LEECHSEED | STATUS3_YAWN)) { @@ -2892,6 +2892,17 @@ bool32 AI_CanBeBurned(u8 battler, u16 ability) return TRUE; } +bool32 AI_CanGetFrostbite(u8 battler, u16 ability) +{ + if (ability == ABILITY_MAGMA_ARMOR + || IS_BATTLER_OF_TYPE(battler, TYPE_ICE) + || gBattleMons[battler].status1 & STATUS1_ANY + || IsAbilityStatusProtected(battler) + || gSideStatuses[GetBattlerSide(battler)] & SIDE_STATUS_SAFEGUARD) + return FALSE; + return TRUE; +} + bool32 ShouldBurnSelf(u8 battler, u16 ability) { if (AI_CanBeBurned(battler, ability) && ( @@ -2918,6 +2929,18 @@ bool32 AI_CanBurn(u8 battlerAtk, u8 battlerDef, u16 defAbility, u8 battlerAtkPar return TRUE; } +bool32 AI_CanGiveFrostbite(u8 battlerAtk, u8 battlerDef, u16 defAbility, u8 battlerAtkPartner, u16 move, u16 partnerMove) +{ + if (!AI_CanGetFrostbite(battlerDef, defAbility) + || AI_GetMoveEffectiveness(move, battlerAtk, battlerDef) == AI_EFFECTIVENESS_x0 + || DoesSubstituteBlockMove(battlerAtk, battlerDef, move) + || PartnerMoveEffectIsStatusSameTarget(battlerAtkPartner, battlerDef, partnerMove)) + { + return FALSE; + } + return TRUE; +} + bool32 AI_CanBeInfatuated(u8 battlerAtk, u8 battlerDef, u16 defAbility, u8 atkGender, u8 defGender) { if ((gBattleMons[battlerDef].status2 & STATUS2_INFATUATION) @@ -3717,6 +3740,25 @@ void IncreaseConfusionScore(u8 battlerAtk, u8 battlerDef, u16 move, s16 *score) } } +void IncreaseFrostbiteScore(u8 battlerAtk, u8 battlerDef, u16 move, s16 *score) +{ + if ((AI_THINKING_STRUCT->aiFlags & AI_FLAG_TRY_TO_FAINT) && CanAIFaintTarget(battlerAtk, battlerDef, 0)) + return; + + if (AI_CanGiveFrostbite(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef], BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove)) + { + (*score)++; // frostbite is good + if (HasMoveWithSplit(battlerDef, SPLIT_SPECIAL)) + { + if (CanTargetFaintAi(battlerDef, battlerAtk)) + *score += 2; // frostbiting the target to stay alive is cool + } + + if (HasMoveEffect(battlerAtk, EFFECT_HEX) || HasMoveEffect(BATTLE_PARTNER(battlerAtk), EFFECT_HEX)) + (*score)++; + } +} + bool32 AI_MoveMakesContact(u32 ability, u32 holdEffect, u16 move) { if (TestMoveFlags(move, FLAG_MAKES_CONTACT) From f13c39d784d15186374b7e81cf29e296bb41ede3 Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Sun, 23 Apr 2023 21:20:23 +0200 Subject: [PATCH 301/428] Thawing out for frostbite --- data/battle_scripts_1.s | 12 ++++++++++++ include/battle_scripts.h | 2 ++ include/constants/battle_string_ids.h | 9 ++++++++- src/battle_message.c | 12 ++++++++++++ src/battle_script_commands.c | 19 +++++++++++++++++++ src/battle_util.c | 11 +++++++++++ 6 files changed, 64 insertions(+), 1 deletion(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index a169b1275218..f65d6e18a604 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -8151,12 +8151,24 @@ BattleScript_MoveUsedUnfroze:: updatestatusicon BS_ATTACKER return +BattleScript_MoveUsedUnfrostbite:: + printfromtable gFrostbiteHealedStringIds + waitmessage B_WAIT_TIME_LONG + updatestatusicon BS_ATTACKER + return + BattleScript_DefrostedViaFireMove:: printstring STRINGID_PKMNWASDEFROSTED waitmessage B_WAIT_TIME_LONG updatestatusicon BS_TARGET return +BattleScript_FrostbiteHealedViaFireMove:: + printstring STRINGID_PKMNFROSTBITEHEALED + waitmessage B_WAIT_TIME_LONG + updatestatusicon BS_TARGET + return + BattleScript_MoveUsedIsParalyzed:: printstring STRINGID_PKMNISPARALYZED waitmessage B_WAIT_TIME_LONG diff --git a/include/battle_scripts.h b/include/battle_scripts.h index 6fcdcac258eb..d10d5ba07f54 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -111,7 +111,9 @@ extern const u8 BattleScript_BurnTurnDmg[]; extern const u8 BattleScript_FrostbiteTurnDmg[]; extern const u8 BattleScript_MoveUsedIsFrozen[]; extern const u8 BattleScript_MoveUsedUnfroze[]; +extern const u8 BattleScript_MoveUsedUnfrostbite[]; extern const u8 BattleScript_DefrostedViaFireMove[]; +extern const u8 BattleScript_FrostbiteHealedViaFireMove[]; extern const u8 BattleScript_MoveUsedIsParalyzed[]; extern const u8 BattleScript_MoveUsedFlinched[]; extern const u8 BattleScript_PrintUproarOverTurns[]; diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index 4e8cd9ab834e..294bd1f7cb81 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -655,8 +655,11 @@ #define STRINGID_PKMNGOTFROSTBITE 653 #define STRINGID_PKMNSITEMHEALEDFROSTBITE 654 #define STRINGID_ATTACKERHEALEDITSFROSTBITE 655 +#define STRINGID_PKMNFROSTBITEHEALED 656 +#define STRINGID_PKMNFROSTBITEHEALED2 657 +#define STRINGID_PKMNFROSTBITEHEALEDBY 658 -#define BATTLESTRINGS_COUNT 656 +#define BATTLESTRINGS_COUNT 659 // This is the string id that gBattleStringsTable starts with. // String ids before this (e.g. STRINGID_INTROMSG) are not in the table, @@ -864,6 +867,10 @@ #define B_MSG_DEFROSTED 0 #define B_MSG_DEFROSTED_BY_MOVE 1 +// gFrostbiteHealedStringIds +#define B_MSG_FROSTBITE_HEALED 0 +#define B_MSG_FROSTBITE_HEALED_BY_MOVE 1 + // gBattlePalaceFlavorTextTable #define B_MSG_GLINT_IN_EYE 0 #define B_MSG_GETTING_IN_POS 1 diff --git a/src/battle_message.c b/src/battle_message.c index 39d862057cba..48c4f222ab73 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -112,6 +112,9 @@ static const u8 sText_PkmnIsFrozen[] = _("{B_ATK_NAME_WITH_PREFIX} is\nfrozen so static const u8 sText_PkmnWasDefrosted[] = _("{B_DEF_NAME_WITH_PREFIX} was\ndefrosted!"); static const u8 sText_PkmnWasDefrosted2[] = _("{B_ATK_NAME_WITH_PREFIX} was\ndefrosted!"); static const u8 sText_PkmnWasDefrostedBy[] = _("{B_ATK_NAME_WITH_PREFIX} was\ndefrosted by {B_CURRENT_MOVE}!"); +static const u8 sText_PkmnFrostbiteHealed[] = _("{B_DEF_NAME_WITH_PREFIX}'s\nfrostbite was healed!"); +static const u8 sText_PkmnFrostbiteHealed2[] = _("{B_ATK_NAME_WITH_PREFIX}'s\nfrostbite was healed!"); +static const u8 sText_PkmnFrostbiteHealedBy[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_CURRENT_MOVE}\nhealed its frostbite!"); static const u8 sText_PkmnWasParalyzed[] = _("{B_EFF_NAME_WITH_PREFIX} is paralyzed!\nIt may be unable to move!"); static const u8 sText_PkmnWasParalyzedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nparalyzed {B_EFF_NAME_WITH_PREFIX}!\lIt may be unable to move!"); static const u8 sText_PkmnIsParalyzed[] = _("{B_ATK_NAME_WITH_PREFIX} is paralyzed!\nIt can't move!"); @@ -1436,6 +1439,9 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_PKMNGOTFROSTBITE - BATTLESTRINGS_TABLE_START] = sText_PkmnGotFrostbite, [STRINGID_PKMNSITEMHEALEDFROSTBITE - BATTLESTRINGS_TABLE_START] = sText_PkmnsItemHealedFrostbite, [STRINGID_ATTACKERHEALEDITSFROSTBITE - BATTLESTRINGS_TABLE_START] = sText_AttackerHealedItsFrostbite, + [STRINGID_PKMNFROSTBITEHEALED - BATTLESTRINGS_TABLE_START] = sText_PkmnFrostbiteHealed, + [STRINGID_PKMNFROSTBITEHEALED2 - BATTLESTRINGS_TABLE_START] = sText_PkmnFrostbiteHealed2, + [STRINGID_PKMNFROSTBITEHEALEDBY - BATTLESTRINGS_TABLE_START] = sText_PkmnFrostbiteHealedBy, }; const u16 gTrainerUsedItemStringIds[] = @@ -1742,6 +1748,12 @@ const u16 gGotFrostbiteStringIds[] = [B_MSG_STATUSED] = STRINGID_PKMNGOTFROSTBITE }; +const u16 gFrostbiteHealedStringIds[] = +{ + [B_MSG_FROSTBITE_HEALED] = STRINGID_PKMNFROSTBITEHEALED2, + [B_MSG_FROSTBITE_HEALED_BY_MOVE] = STRINGID_PKMNFROSTBITEHEALEDBY +}; + const u16 gGotFrozenStringIds[] = { [B_MSG_STATUSED] = STRINGID_PKMNWASFROZEN, diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index ecf9023936a6..81d1a94e81c0 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -5565,6 +5565,25 @@ static void Cmd_moveend(void) gBattlescriptCurrInstr = BattleScript_DefrostedViaFireMove; effect = TRUE; } + if (gBattleMons[gBattlerTarget].status1 & STATUS1_FROSTBITE + && gBattleMons[gBattlerTarget].hp != 0 + && gBattlerAttacker != gBattlerTarget + && gSpecialStatuses[gBattlerTarget].specialDmg + && (moveType == TYPE_FIRE + #if B_BURN_HIT_THAW >= GEN_6 + || gBattleMoves[gCurrentMove].effect == EFFECT_BURN_HIT + #endif + ) + && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)) + { + gBattleMons[gBattlerTarget].status1 &= ~STATUS1_FROSTBITE; + gActiveBattler = gBattlerTarget; + BtlController_EmitSetMonData(BUFFER_A, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gBattlerTarget].status1), &gBattleMons[gBattlerTarget].status1); + MarkBattlerForControllerExec(gActiveBattler); + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_FrostbiteHealedViaFireMove; + effect = TRUE; + } gBattleScripting.moveendState++; break; case MOVEEND_RECOIL: diff --git a/src/battle_util.c b/src/battle_util.c index 456936fadb57..97043f7dfd9f 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -3644,6 +3644,17 @@ u8 AtkCanceller_UnableToUseMove(void) } effect = 2; } + if (gBattleMons[gBattlerAttacker].status1 & STATUS1_FROSTBITE) + { + if (!(gBattleMoves[gCurrentMove].effect == EFFECT_BURN_UP && !IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_FIRE))) + { + gBattleMons[gBattlerAttacker].status1 &= ~STATUS1_FROSTBITE; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_MoveUsedUnfrostbite; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_FROSTBITE_HEALED_BY_MOVE; + } + effect = 2; + } gBattleStruct->atkCancellerTracker++; break; case CANCELLER_POWDER_MOVE: From a2bc21d902a373e6ca759bcb81f1d785bb1bfdd2 Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Mon, 24 Apr 2023 14:05:35 +0200 Subject: [PATCH 302/428] Update battle_ai_util.h Co-Authored-By: Salem <65783283+callmeechoo@users.noreply.github.com> --- include/battle_ai_util.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/include/battle_ai_util.h b/include/battle_ai_util.h index f2dd8f03edc6..1a0fbc2645b2 100644 --- a/include/battle_ai_util.h +++ b/include/battle_ai_util.h @@ -172,11 +172,11 @@ bool32 SideHasMoveSplit(u8 battlerId, u8 split); // score increases void IncreaseStatUpScore(u8 battlerAtk, u8 battlerDef, u8 statId, s16 *score); -void IncreasePoisonScore(u8 battlerAtk, u8 battlerdef, u16 move, s16 *score); -void IncreaseBurnScore(u8 battlerAtk, u8 battlerdef, u16 move, s16 *score); +void IncreasePoisonScore(u8 battlerAtk, u8 battlerDef, u16 move, s16 *score); +void IncreaseBurnScore(u8 battlerAtk, u8 battlerDef, u16 move, s16 *score); void IncreaseParalyzeScore(u8 battlerAtk, u8 battlerDef, u16 move, s16 *score); void IncreaseSleepScore(u8 battlerAtk, u8 battlerDef, u16 move, s16 *score); void IncreaseConfusionScore(u8 battlerAtk, u8 battlerDef, u16 move, s16 *score); -void IncreaseFrostbiteScore(u8 battlerAtk, u8 battlerdef, u16 move, s16 *score); +void IncreaseFrostbiteScore(u8 battlerAtk, u8 battlerDef, u16 move, s16 *score); -#endif //GUARD_BATTLE_AI_UTIL_H \ No newline at end of file +#endif //GUARD_BATTLE_AI_UTIL_H From 0b66cf01ecb71fe83c98a2b70edc4eeb443a5864 Mon Sep 17 00:00:00 2001 From: CallmeEchoo Date: Mon, 24 Apr 2023 14:15:43 +0200 Subject: [PATCH 303/428] remove no longer needed variable --- test/item_effect_restore_hp.c | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/test/item_effect_restore_hp.c b/test/item_effect_restore_hp.c index 67c5eb202fe7..4572a0d8be81 100644 --- a/test/item_effect_restore_hp.c +++ b/test/item_effect_restore_hp.c @@ -6,7 +6,6 @@ SINGLE_BATTLE_TEST("Restore HP: Potion restores a battler's HP by 20") { - s16 damage; GIVEN { ASSUME(gItems[ITEM_POTION].battleUsage == EFFECT_ITEM_RESTORE_HP); PLAYER(SPECIES_WOBBUFFET) { HP(TEST_HP); MaxHP(MAX_HP); } @@ -20,7 +19,6 @@ SINGLE_BATTLE_TEST("Restore HP: Potion restores a battler's HP by 20") SINGLE_BATTLE_TEST("Restore HP: Super Potion restores a battler's HP by 60") { - s16 damage; GIVEN { ASSUME(gItems[ITEM_SUPER_POTION].battleUsage == EFFECT_ITEM_RESTORE_HP); PLAYER(SPECIES_WOBBUFFET) { HP(TEST_HP); MaxHP(MAX_HP); } @@ -34,7 +32,6 @@ SINGLE_BATTLE_TEST("Restore HP: Super Potion restores a battler's HP by 60") SINGLE_BATTLE_TEST("Restore HP: Hyper Potion restores a battler's HP by 120") { - s16 damage; GIVEN { ASSUME(gItems[ITEM_HYPER_POTION].battleUsage == EFFECT_ITEM_RESTORE_HP); PLAYER(SPECIES_WOBBUFFET) { HP(TEST_HP); MaxHP(MAX_HP); } @@ -48,7 +45,6 @@ SINGLE_BATTLE_TEST("Restore HP: Hyper Potion restores a battler's HP by 120") SINGLE_BATTLE_TEST("Restore HP: Max Potion restores a battler's HP fully") { - s16 damage; GIVEN { ASSUME(gItems[ITEM_MAX_POTION].battleUsage == EFFECT_ITEM_RESTORE_HP); PLAYER(SPECIES_WOBBUFFET) { HP(TEST_HP); MaxHP(MAX_HP); } @@ -62,7 +58,6 @@ SINGLE_BATTLE_TEST("Restore HP: Max Potion restores a battler's HP fully") SINGLE_BATTLE_TEST("Restore HP: Fresh Water restores a battler's HP by 30") { - s16 damage; GIVEN { ASSUME(gItems[ITEM_FRESH_WATER].battleUsage == EFFECT_ITEM_RESTORE_HP); PLAYER(SPECIES_WOBBUFFET) { HP(TEST_HP); MaxHP(MAX_HP); } @@ -76,7 +71,6 @@ SINGLE_BATTLE_TEST("Restore HP: Fresh Water restores a battler's HP by 30") SINGLE_BATTLE_TEST("Restore HP: Soda Pop restores a battler's HP by 50") { - s16 damage; GIVEN { ASSUME(gItems[ITEM_SODA_POP].battleUsage == EFFECT_ITEM_RESTORE_HP); PLAYER(SPECIES_WOBBUFFET) { HP(TEST_HP); MaxHP(MAX_HP); } @@ -90,7 +84,6 @@ SINGLE_BATTLE_TEST("Restore HP: Soda Pop restores a battler's HP by 50") SINGLE_BATTLE_TEST("Restore HP: Lemonade restores a battler's HP by 70") { - s16 damage; GIVEN { ASSUME(gItems[ITEM_LEMONADE].battleUsage == EFFECT_ITEM_RESTORE_HP); PLAYER(SPECIES_WOBBUFFET) { HP(TEST_HP); MaxHP(MAX_HP); } @@ -104,7 +97,6 @@ SINGLE_BATTLE_TEST("Restore HP: Lemonade restores a battler's HP by 70") SINGLE_BATTLE_TEST("Restore HP: Moomoo Milk restores a battler's HP by 100") { - s16 damage; GIVEN { ASSUME(gItems[ITEM_MOOMOO_MILK].battleUsage == EFFECT_ITEM_RESTORE_HP); PLAYER(SPECIES_WOBBUFFET) { HP(TEST_HP); MaxHP(MAX_HP); } @@ -118,7 +110,6 @@ SINGLE_BATTLE_TEST("Restore HP: Moomoo Milk restores a battler's HP by 100") SINGLE_BATTLE_TEST("Restore HP: Energy Powder restores a battler's HP by 60(50)") { - s16 damage; GIVEN { ASSUME(gItems[ITEM_ENERGY_POWDER].battleUsage == EFFECT_ITEM_RESTORE_HP); PLAYER(SPECIES_WOBBUFFET) { HP(TEST_HP); MaxHP(MAX_HP); } @@ -135,7 +126,6 @@ SINGLE_BATTLE_TEST("Restore HP: Energy Powder restores a battler's HP by 60(50)" SINGLE_BATTLE_TEST("Restore HP: Energy Root restores a battler's HP by 120(200)") { - s16 damage; GIVEN { ASSUME(gItems[ITEM_ENERGY_ROOT].battleUsage == EFFECT_ITEM_RESTORE_HP); PLAYER(SPECIES_WOBBUFFET) { HP(TEST_HP); MaxHP(MAX_HP); } @@ -152,7 +142,6 @@ SINGLE_BATTLE_TEST("Restore HP: Energy Root restores a battler's HP by 120(200)" SINGLE_BATTLE_TEST("Restore HP: Sweet Heart restores a battler's HP by 20") { - s16 damage; GIVEN { ASSUME(gItems[ITEM_SWEET_HEART].battleUsage == EFFECT_ITEM_RESTORE_HP); PLAYER(SPECIES_WOBBUFFET) { HP(TEST_HP); MaxHP(MAX_HP); } @@ -166,7 +155,6 @@ SINGLE_BATTLE_TEST("Restore HP: Sweet Heart restores a battler's HP by 20") SINGLE_BATTLE_TEST("Restore HP: Oran Berry restores a battler's HP by 10") { - s16 damage; GIVEN { ASSUME(gItems[ITEM_ORAN_BERRY].battleUsage == EFFECT_ITEM_RESTORE_HP); PLAYER(SPECIES_WOBBUFFET) { HP(TEST_HP); MaxHP(MAX_HP); } @@ -180,7 +168,6 @@ SINGLE_BATTLE_TEST("Restore HP: Oran Berry restores a battler's HP by 10") SINGLE_BATTLE_TEST("Restore HP: Sitrus Berry restores a battler's HP by 25% of its max HP(30HP flat)") { - s16 damage; GIVEN { ASSUME(gItems[ITEM_SITRUS_BERRY].battleUsage == EFFECT_ITEM_RESTORE_HP); PLAYER(SPECIES_WOBBUFFET) { HP(TEST_HP); MaxHP(MAX_HP); } From c4497bc0a8ca077eccf305f9d16982e4cc8a80f2 Mon Sep 17 00:00:00 2001 From: CallmeEchoo Date: Mon, 24 Apr 2023 14:16:17 +0200 Subject: [PATCH 304/428] revive tests --- test/item_effect_revive.c | 96 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 test/item_effect_revive.c diff --git a/test/item_effect_revive.c b/test/item_effect_revive.c new file mode 100644 index 000000000000..9ced527f4ef8 --- /dev/null +++ b/test/item_effect_revive.c @@ -0,0 +1,96 @@ +#include "global.h" +#include "test_battle.h" + +#define MAX_HP 200 + +SINGLE_BATTLE_TEST("Revive: Super Potion restores a fainted battler's HP to half") +{ + GIVEN { + ASSUME(gItems[ITEM_SUPER_POTION].battleUsage == EFFECT_ITEM_RESTORE_HP); + PLAYER(SPECIES_WYNAUT) { HP(1); MaxHP(MAX_HP); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE); SEND_OUT(player, 1); } + TURN { USE_ITEM(player, ITEM_SUPER_POTION, partyIndex: 0); } + TURN { SWITCH(player, 0); } + } SCENE { + MESSAGE("Super Potion restored Wynaut's health!"); + } FINALLY { + EXPECT_EQ(player->hp, 60); + } +} + +SINGLE_BATTLE_TEST("Revive: Revive restores a fainted battler's HP to half") +{ + GIVEN { + ASSUME(gItems[ITEM_REVIVE].battleUsage == EFFECT_ITEM_REVIVE); + PLAYER(SPECIES_WYNAUT) { HP(1); MaxHP(MAX_HP); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE); SEND_OUT(player, 1); } + TURN { USE_ITEM(player, ITEM_REVIVE, partyIndex: 0); } + TURN { SWITCH(player, 0); } + } SCENE { + MESSAGE("Revive restored Wynaut's health!"); + } FINALLY { + EXPECT_EQ(player->hp, MAX_HP/2); + } +} + +SINGLE_BATTLE_TEST("Revive: Max Revive restores a fainted battler's HP fully") +{ + GIVEN { + ASSUME(gItems[ITEM_MAX_REVIVE].battleUsage == EFFECT_ITEM_REVIVE); + PLAYER(SPECIES_WYNAUT) { HP(1); MaxHP(MAX_HP); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE); SEND_OUT(player, 1); } + TURN { USE_ITEM(player, ITEM_MAX_REVIVE, partyIndex: 0); } + TURN { SWITCH(player, 0); } + } SCENE { + MESSAGE("Max Revive restored Wynaut's health!"); + } FINALLY { + EXPECT_EQ(player->hp, MAX_HP); + } +} + +SINGLE_BATTLE_TEST("Revive: Revival Herb restores a fainted battler's HP fully") +{ + GIVEN { + ASSUME(gItems[ITEM_REVIVAL_HERB].battleUsage == EFFECT_ITEM_REVIVE); + PLAYER(SPECIES_WYNAUT) { HP(1); MaxHP(MAX_HP); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE); SEND_OUT(player, 1); } + TURN { USE_ITEM(player, ITEM_REVIVAL_HERB, partyIndex: 0); } + TURN { SWITCH(player, 0); } + } SCENE { + MESSAGE("Revival Herb restored Wynaut's health!"); + } FINALLY { + EXPECT_EQ(player->hp, MAX_HP); + } +} + +SINGLE_BATTLE_TEST("Revive: Max Honey restores a fainted battler's HP fully") +{ + GIVEN { + ASSUME(gItems[ITEM_MAX_HONEY].battleUsage == EFFECT_ITEM_REVIVE); + PLAYER(SPECIES_WYNAUT) { HP(1); MaxHP(MAX_HP); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE); SEND_OUT(player, 1); } + TURN { USE_ITEM(player, ITEM_MAX_HONEY, partyIndex: 0); } + TURN { SWITCH(player, 0); } + } SCENE { + MESSAGE("Max Honey restored Wynaut's health!"); + } FINALLY { + EXPECT_EQ(player->hp, MAX_HP); + } +} + +#undef MAX_HP From 330e85ba64b1b23d602a83ad3bef16f93a05b73c Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Mon, 24 Apr 2023 09:34:11 -0300 Subject: [PATCH 305/428] Updates -Undeclared size for certain trainer slide-in variables at struct BattleStruct for reasons. -Added a BattlerHPPercentage function to make HP threshold checks in ShouldDoTrainerSlide a bit more readable. --- include/battle.h | 10 +++++----- src/battle_message.c | 35 +++++++++++++++++++++++++++++++++-- 2 files changed, 38 insertions(+), 7 deletions(-) diff --git a/include/battle.h b/include/battle.h index 44aa063c9c87..2b72d483655d 100644 --- a/include/battle.h +++ b/include/battle.h @@ -622,7 +622,7 @@ struct BattleStruct struct MegaEvolutionData mega; struct ZMoveData zmove; const u8 *trainerSlideMsg; - bool8 trainerSlideLowHpMsgDone:1; + bool8 trainerSlideLowHpMsgDone; u8 introState; u8 ateBerry[2]; // array id determined by side, each party pokemon as bit u8 stolenStats[NUM_BATTLE_STATS]; // hp byte is used for which stats to raise, other inform about by how many stages @@ -663,14 +663,14 @@ struct BattleStruct u8 storedHealingWish:4; // Each battler as a bit. u8 storedLunarDance:4; // Each battler as a bit. u16 supremeOverlordModifier[MAX_BATTLERS_COUNT]; - bool8 trainerSlideHalfHpMsgDone:1; + bool8 trainerSlideHalfHpMsgDone; u8 trainerSlideFirstCriticalHitMsgState:2; u8 trainerSlideFirstSuperEffectiveHitMsgState:2; u8 trainerSlideFirstSTABMoveMsgState:2; u8 trainerSlidePlayerMonUnaffectedMsgState:2; - bool8 trainerSlideMegaEvolutionMsgDone:1; - bool8 trainerSlideZMoveMsgDone:1; - bool8 trainerSlideBeforeFirstTurnMsgDone:1; + bool8 trainerSlideMegaEvolutionMsgDone; + bool8 trainerSlideZMoveMsgDone; + bool8 trainerSlideBeforeFirstTurnMsgDone; }; #define F_DYNAMIC_TYPE_1 (1 << 6) diff --git a/src/battle_message.c b/src/battle_message.c index fab65a46b429..dd6390d28201 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -3934,6 +3934,37 @@ static u32 GetEnemyMonCount(u32 firstId, u32 lastId, bool32 onlyAlive) return count; } +enum +{ + LESS_THAN, + EQUAL, + GREATER_THAN, + LESS_THAN_OR_EQUAL, + GREATER_THAN_OR_EQUAL, + NOT_EQUAL, +}; + +u32 BattlerHPPercentage(u32 battlerId, u32 operation, u32 threshold) +{ + switch (operation) + { + case LESS_THAN: + return gBattleMons[battlerId].hp < (gBattleMons[battlerId].maxHP / threshold); + case EQUAL: + return gBattleMons[battlerId].hp == (gBattleMons[battlerId].maxHP / threshold); + case GREATER_THAN: + return gBattleMons[battlerId].hp > (gBattleMons[battlerId].maxHP / threshold); + case LESS_THAN_OR_EQUAL: + return gBattleMons[battlerId].hp <= (gBattleMons[battlerId].maxHP / threshold); + case GREATER_THAN_OR_EQUAL: + return gBattleMons[battlerId].hp >= (gBattleMons[battlerId].maxHP / threshold); + case NOT_EQUAL: + return gBattleMons[battlerId].hp != (gBattleMons[battlerId].maxHP / threshold); + default: + break; + } +} + u32 ShouldDoTrainerSlide(u32 battlerId, u32 which) { u32 i, firstId, lastId, trainerId, retValue = 1; @@ -3979,7 +4010,7 @@ u32 ShouldDoTrainerSlide(u32 battlerId, u32 which) case TRAINER_SLIDE_LAST_LOW_HP: if (sTrainerSlides[i].msgLastLowHp != NULL && GetEnemyMonCount(firstId, lastId, TRUE) == 1 - && gBattleMons[battlerId].hp <= (gBattleMons[battlerId].maxHP / 4) + && BattlerHPPercentage(battlerId, GREATER_THAN_OR_EQUAL, 4) && !gBattleStruct->trainerSlideLowHpMsgDone) { gBattleStruct->trainerSlideLowHpMsgDone = TRUE; @@ -3997,7 +4028,7 @@ u32 ShouldDoTrainerSlide(u32 battlerId, u32 which) case TRAINER_SLIDE_LAST_HALF_HP: if (sTrainerSlides[i].msgLastHalfHp != NULL && GetEnemyMonCount(firstId, lastId, TRUE) == GetEnemyMonCount(firstId, lastId, FALSE) - 1 - && (gBattleMons[battlerId].hp <= (gBattleMons[battlerId].maxHP / 2) && gBattleMons[battlerId].hp > (gBattleMons[battlerId].maxHP / 4)) + && BattlerHPPercentage(battlerId, LESS_THAN_OR_EQUAL, 2) && BattlerHPPercentage(battlerId, GREATER_THAN, 4) && !gBattleStruct->trainerSlideHalfHpMsgDone) { gBattleStruct->trainerSlideHalfHpMsgDone = TRUE; From 868838a87d8af109ee90835d6c33bd7d8928328c Mon Sep 17 00:00:00 2001 From: ghoulslash <41651341+ghoulslash@users.noreply.github.com> Date: Mon, 24 Apr 2023 14:35:42 -0400 Subject: [PATCH 306/428] Add thunder cage case to trap anim IDs (#2941) --- data/battle_anim_scripts.s | 5 +++++ include/constants/battle_anim.h | 1 + include/constants/battle_string_ids.h | 24 +++++++++++--------- src/battle_anim_throw.c | 32 +++++++++++++++++++-------- src/battle_message.c | 3 +++ 5 files changed, 45 insertions(+), 20 deletions(-) diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index cca8706cbc04..adcb88c88133 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -24463,6 +24463,7 @@ General_TurnTrap: jumpargeq 0, TRAP_ANIM_MAGMA_STORM, Status_MagmaStorm jumpargeq 0, TRAP_ANIM_INFESTATION, Status_Infestation jumpargeq 0, TRAP_ANIM_SNAP_TRAP, Status_Snap_Trap + jumpargeq 0, TRAP_ANIM_THUNDER_CAGE, Status_Thunder_Cage goto Status_BindWrap Status_BindWrap: loadspritegfx ANIM_TAG_TENDRILS @@ -24549,6 +24550,10 @@ Status_Clamp: waitforvisualfinish end +Status_Thunder_Cage: + @ TODO + goto Move_THUNDER_CAGE + Status_Snap_Trap: @ placeholder goto Move_BITE diff --git a/include/constants/battle_anim.h b/include/constants/battle_anim.h index 4316191a2ee3..46e229a3190b 100644 --- a/include/constants/battle_anim.h +++ b/include/constants/battle_anim.h @@ -583,6 +583,7 @@ #define TRAP_ANIM_MAGMA_STORM 5 #define TRAP_ANIM_INFESTATION 6 #define TRAP_ANIM_SNAP_TRAP 7 +#define TRAP_ANIM_THUNDER_CAGE 8 // Weather defines for battle animation scripts. #define ANIM_WEATHER_NONE 0 diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index e5520775346c..f4fd589db12e 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -651,8 +651,9 @@ #define STRINGID_ITEMRESTOREDSPECIESHEALTH 649 #define STRINGID_ITEMCUREDSPECIESSTATUS 650 #define STRINGID_ITEMRESTOREDSPECIESPP 651 +#define STRINGID_THUNDERCAGETRAPPED 652 -#define BATTLESTRINGS_COUNT 652 +#define BATTLESTRINGS_COUNT 653 // This is the string id that gBattleStringsTable starts with. // String ids before this (e.g. STRINGID_INTROMSG) are not in the table, @@ -917,16 +918,17 @@ #define B_MSG_TERRAINENDS_COUNT 4 // gWrappedStringIds -#define B_MSG_WRAPPED_BIND 0 -#define B_MSG_WRAPPED_WRAP 1 -#define B_MSG_WRAPPED_FIRE_SPIN 2 -#define B_MSG_WRAPPED_CLAMP 3 -#define B_MSG_WRAPPED_WHIRLPOOL 4 -#define B_MSG_WRAPPED_SAND_TOMB 5 -#define B_MSG_WRAPPED_MAGMA_STORM 6 -#define B_MSG_WRAPPED_INFESTATION 7 -#define B_MSG_WRAPPED_SNAP_TRAP 8 -#define NUM_TRAPPING_MOVES 9 +#define B_MSG_WRAPPED_BIND 0 +#define B_MSG_WRAPPED_WRAP 1 +#define B_MSG_WRAPPED_FIRE_SPIN 2 +#define B_MSG_WRAPPED_CLAMP 3 +#define B_MSG_WRAPPED_WHIRLPOOL 4 +#define B_MSG_WRAPPED_SAND_TOMB 5 +#define B_MSG_WRAPPED_MAGMA_STORM 6 +#define B_MSG_WRAPPED_INFESTATION 7 +#define B_MSG_WRAPPED_SNAP_TRAP 8 +#define B_MSG_WRAPPED_THUNDER_CAGE 9 +#define NUM_TRAPPING_MOVES 10 // z effects #define B_MSG_Z_RESET_STATS 0 diff --git a/src/battle_anim_throw.c b/src/battle_anim_throw.c index a3197d4477a9..3fc2000e4a4d 100755 --- a/src/battle_anim_throw.c +++ b/src/battle_anim_throw.c @@ -2736,23 +2736,37 @@ void AnimTask_SetAttackerTargetLeftPos(u8 taskId) void AnimTask_GetTrappedMoveAnimId(u8 taskId) { - if (gBattleSpritesDataPtr->animationData->animArg == MOVE_FIRE_SPIN) + switch (gBattleSpritesDataPtr->animationData->animArg) + { + case MOVE_FIRE_SPIN: gBattleAnimArgs[0] = TRAP_ANIM_FIRE_SPIN; - else if (gBattleSpritesDataPtr->animationData->animArg == MOVE_WHIRLPOOL) + break; + case MOVE_WHIRLPOOL: gBattleAnimArgs[0] = TRAP_ANIM_WHIRLPOOL; - else if (gBattleSpritesDataPtr->animationData->animArg == MOVE_CLAMP) + break; + case MOVE_CLAMP: gBattleAnimArgs[0] = TRAP_ANIM_CLAMP; - else if (gBattleSpritesDataPtr->animationData->animArg == MOVE_SAND_TOMB) + break; + case MOVE_SAND_TOMB: gBattleAnimArgs[0] = TRAP_ANIM_SAND_TOMB; - else if (gBattleSpritesDataPtr->animationData->animArg == MOVE_MAGMA_STORM) + break; + case MOVE_MAGMA_STORM: gBattleAnimArgs[0] = TRAP_ANIM_MAGMA_STORM; - else if (gBattleSpritesDataPtr->animationData->animArg == MOVE_INFESTATION) + break; + case MOVE_INFESTATION: gBattleAnimArgs[0] = TRAP_ANIM_INFESTATION; - else if (gBattleSpritesDataPtr->animationData->animArg == MOVE_SNAP_TRAP) + break; + case MOVE_SNAP_TRAP: gBattleAnimArgs[0] = TRAP_ANIM_SNAP_TRAP; - else + break; + case MOVE_THUNDER_CAGE: + gBattleAnimArgs[0] = TRAP_ANIM_THUNDER_CAGE; + break; + default: gBattleAnimArgs[0] = TRAP_ANIM_BIND; - + break; + } + DestroyAnimVisualTask(taskId); } diff --git a/src/battle_message.c b/src/battle_message.c index e1122c7aac37..21f7098f81ac 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -786,9 +786,11 @@ static const u8 sText_PkmnRevivedReadyToFight[] = _("{B_BUFF1} was revived and\n static const u8 sText_ItemRestoredSpeciesHealth[] = _("{B_BUFF1} had its\nHP restored!"); static const u8 sText_ItemCuredSpeciesStatus[] = _("{B_BUFF1} had\nits status healed!"); static const u8 sText_ItemRestoredSpeciesPP[] = _("{B_BUFF1} had its\nPP restored!"); +static const u8 sText_AtkTrappedDef[] = _("{B_ATK_NAME_WITH_PREFIX} trapped\nthe {B_DEF_NAME_WITH_PREFIX}!"); const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = { + [STRINGID_THUNDERCAGETRAPPED - BATTLESTRINGS_TABLE_START] = sText_AtkTrappedDef, [STRINGID_ITEMRESTOREDSPECIESHEALTH - BATTLESTRINGS_TABLE_START] = sText_ItemRestoredSpeciesHealth, [STRINGID_ITEMCUREDSPECIESSTATUS - BATTLESTRINGS_TABLE_START] = sText_ItemCuredSpeciesStatus, [STRINGID_ITEMRESTOREDSPECIESPP - BATTLESTRINGS_TABLE_START] = sText_ItemRestoredSpeciesPP, @@ -1679,6 +1681,7 @@ const u16 gWrappedStringIds[NUM_TRAPPING_MOVES] = [B_MSG_WRAPPED_MAGMA_STORM] = STRINGID_TRAPPEDBYSWIRLINGMAGMA, // MOVE_MAGMA_STORM [B_MSG_WRAPPED_INFESTATION] = STRINGID_INFESTATION, // MOVE_INFESTATION [B_MSG_WRAPPED_SNAP_TRAP] = STRINGID_PKMNINSNAPTRAP, // MOVE_SNAP_TRAP + [B_MSG_WRAPPED_THUNDER_CAGE]= STRINGID_THUNDERCAGETRAPPED, // MOVE_THUNDER_CAGE }; const u16 gMistUsedStringIds[] = From f74a1b07660ad5fd8c2e205074f1e265df98657d Mon Sep 17 00:00:00 2001 From: CallmeEchoo Date: Mon, 24 Apr 2023 22:26:56 +0200 Subject: [PATCH 307/428] fix strings after update --- test/item_effect_cure_status.c | 61 +++++++------------------ test/item_effect_heal_and_cure_status.c | 5 +- test/item_effect_revive.c | 10 ++-- 3 files changed, 23 insertions(+), 53 deletions(-) diff --git a/test/item_effect_cure_status.c b/test/item_effect_cure_status.c index f014a29b7862..c593aa016ce9 100644 --- a/test/item_effect_cure_status.c +++ b/test/item_effect_cure_status.c @@ -10,7 +10,7 @@ SINGLE_BATTLE_TEST("Cure Status: Paralyze Heal heals a battler from being paraly } WHEN { TURN { USE_ITEM(player, ITEM_PARALYZE_HEAL, partyIndex: 0); } } SCENE { - MESSAGE("Paralyze Heal cured Wobbuffet's status!"); + MESSAGE("Wobbuffet had its status healed!"); } } @@ -23,7 +23,7 @@ SINGLE_BATTLE_TEST("Cure Status: Antidote heals a battler from being poisoned") } WHEN { TURN { USE_ITEM(player, ITEM_ANTIDOTE, partyIndex: 0); } } SCENE { - MESSAGE("Antidote cured Wobbuffet's status!"); + MESSAGE("Wobbuffet had its status healed!"); } } @@ -36,7 +36,7 @@ SINGLE_BATTLE_TEST("Cure Status: Antidote heals a battler from being badly poiso } WHEN { TURN { USE_ITEM(player, ITEM_ANTIDOTE, partyIndex: 0); } } SCENE { - MESSAGE("Antidote cured Wobbuffet's status!"); + MESSAGE("Wobbuffet had its status healed!"); } } @@ -49,7 +49,7 @@ SINGLE_BATTLE_TEST("Cure Status: Awakening heals a battler from being asleep") } WHEN { TURN { USE_ITEM(player, ITEM_AWAKENING, partyIndex: 0); } } SCENE { - MESSAGE("Awakening cured Wobbuffet's status!"); + MESSAGE("Wobbuffet had its status healed!"); } } @@ -62,7 +62,7 @@ SINGLE_BATTLE_TEST("Cure Status: Burn Heal heals a battler from being burned") } WHEN { TURN { USE_ITEM(player, ITEM_BURN_HEAL, partyIndex: 0); } } SCENE { - MESSAGE("Burn Heal cured Wobbuffet's status!"); + MESSAGE("Wobbuffet had its status healed!"); } } @@ -75,7 +75,7 @@ SINGLE_BATTLE_TEST("Cure Status: Ice Heal heals a battler from being paralyzed") } WHEN { TURN { USE_ITEM(player, ITEM_ICE_HEAL, partyIndex: 0); } } SCENE { - MESSAGE("Ice Heal cured Wobbuffet's status!"); + MESSAGE("Wobbuffet had its status healed!"); } } @@ -95,7 +95,7 @@ SINGLE_BATTLE_TEST("Cure Status: Full Heal heals a battler from any primary stat } WHEN { TURN { USE_ITEM(player, ITEM_FULL_HEAL, partyIndex: 0); } } SCENE { - MESSAGE("Full Heal cured Wobbuffet's status!"); + MESSAGE("Wobbuffet had its status healed!"); } } @@ -115,7 +115,7 @@ SINGLE_BATTLE_TEST("Cure Status: Pewter Crunchies heals a battler from any prima } WHEN { TURN { USE_ITEM(player, ITEM_PEWTER_CRUNCHIES, partyIndex: 0); } } SCENE { - MESSAGE("PewtrCrnches cured Wobbuffet's status!"); + MESSAGE("Wobbuffet had its status healed!"); } } @@ -135,7 +135,7 @@ SINGLE_BATTLE_TEST("Cure Status: Lava Cookies heals a battler from any primary s } WHEN { TURN { USE_ITEM(player, ITEM_LAVA_COOKIE, partyIndex: 0); } } SCENE { - MESSAGE("Lava Cookie cured Wobbuffet's status!"); + MESSAGE("Wobbuffet had its status healed!"); } } @@ -155,7 +155,7 @@ SINGLE_BATTLE_TEST("Cure Status: Rage Candy Bar heals a battler from any primary } WHEN { TURN { USE_ITEM(player, ITEM_RAGE_CANDY_BAR, partyIndex: 0); } } SCENE { - MESSAGE("RageCandyBar cured Wobbuffet's status!"); + MESSAGE("Wobbuffet had its status healed!"); } } @@ -175,7 +175,7 @@ SINGLE_BATTLE_TEST("Cure Status: Old Gateu heals a battler from any primary stat } WHEN { TURN { USE_ITEM(player, ITEM_OLD_GATEAU, partyIndex: 0); } } SCENE { - MESSAGE("Old Gateau cured Wobbuffet's status!"); + MESSAGE("Wobbuffet had its status healed!"); } } @@ -195,7 +195,7 @@ SINGLE_BATTLE_TEST("Cure Status: Casteliacone heals a battler from any primary s } WHEN { TURN { USE_ITEM(player, ITEM_CASTELIACONE, partyIndex: 0); } } SCENE { - MESSAGE("Casteliacone cured Wobbuffet's status!"); + MESSAGE("Wobbuffet had its status healed!"); } } @@ -215,7 +215,7 @@ SINGLE_BATTLE_TEST("Cure Status: Lumiose Galette heals a battler from any primar } WHEN { TURN { USE_ITEM(player, ITEM_LUMIOSE_GALETTE, partyIndex: 0); } } SCENE { - MESSAGE("LumioseGlete cured Wobbuffet's status!"); + MESSAGE("Wobbuffet had its status healed!");; } } @@ -235,7 +235,7 @@ SINGLE_BATTLE_TEST("Cure Status: Shalour Sable heals a battler from any primary } WHEN { TURN { USE_ITEM(player, ITEM_SHALOUR_SABLE, partyIndex: 0); } } SCENE { - MESSAGE("ShalourSable cured Wobbuffet's status!"); + MESSAGE("Wobbuffet had its status healed!"); } } @@ -255,7 +255,7 @@ SINGLE_BATTLE_TEST("Cure Status: Big Malasada heals a battler from any primary s } WHEN { TURN { USE_ITEM(player, ITEM_BIG_MALASADA, partyIndex: 0); } } SCENE { - MESSAGE("Big Malasada cured Wobbuffet's status!"); + MESSAGE("Wobbuffet had its status healed!"); } } @@ -279,35 +279,6 @@ SINGLE_BATTLE_TEST("Cure Status: Full Heal and local specialties heal a battler TURN { MOVE(opponent, MOVE_CONFUSE_RAY); } TURN { USE_ITEM(player, item, partyIndex: 0); } } SCENE { - switch (item) - { - case ITEM_FULL_HEAL: - MESSAGE("Full Heal cured Wobbuffet's status!"); - break; - case ITEM_PEWTER_CRUNCHIES: - MESSAGE("PewtrCrnches cured Wobbuffet's status!"); - break; - case ITEM_LAVA_COOKIE: - MESSAGE("Lava Cookie cured Wobbuffet's status!"); - break; - case ITEM_RAGE_CANDY_BAR: - MESSAGE("RageCandyBar cured Wobbuffet's status!"); - break; - case ITEM_OLD_GATEAU: - MESSAGE("Old Gateau cured Wobbuffet's status!"); - break; - case ITEM_CASTELIACONE: - MESSAGE("Casteliacone cured Wobbuffet's status!"); - break; - case ITEM_LUMIOSE_GALETTE: - MESSAGE("LumioseGlete cured Wobbuffet's status!"); - break; - case ITEM_SHALOUR_SABLE: - MESSAGE("ShalourSable cured Wobbuffet's status!"); - break; - case ITEM_BIG_MALASADA: - MESSAGE("Big Malasada cured Wobbuffet's status!"); - break; - } + MESSAGE("Wobbuffet had its status healed!"); } } diff --git a/test/item_effect_heal_and_cure_status.c b/test/item_effect_heal_and_cure_status.c index d9bf0cf7c81c..95f97fbaa3f0 100644 --- a/test/item_effect_heal_and_cure_status.c +++ b/test/item_effect_heal_and_cure_status.c @@ -17,7 +17,7 @@ SINGLE_BATTLE_TEST("Full Restore restores a battler's HP and cures any primary s } WHEN { TURN{ USE_ITEM(player, ITEM_FULL_RESTORE, partyIndex: 0); } } SCENE { - MESSAGE("Full Restore restored Wobbuffet's health!"); + MESSAGE("Wobbuffet had its HP restored!"); } FINALLY { EXPECT_EQ(player->hp, player->maxHP); EXPECT_EQ(player->status1, STATUS1_NONE); @@ -28,7 +28,6 @@ SINGLE_BATTLE_TEST("Full Restore restores a battler's HP and cures confusion") { // known failing bc even though it passes there is an underlying bug still that is only obvious in the replay. see #2938 // this also means that this test is likely not very good so I advice this to be redone - KNOWN_FAILING; GIVEN { ASSUME(gItems[ITEM_FULL_RESTORE].battleUsage == EFFECT_ITEM_HEAL_AND_CURE_STATUS); PLAYER(SPECIES_WOBBUFFET) { HP(1); MaxHP(300);}; @@ -38,7 +37,7 @@ SINGLE_BATTLE_TEST("Full Restore restores a battler's HP and cures confusion") TURN{ USE_ITEM(player, ITEM_FULL_RESTORE, partyIndex: 0); } TURN{ MOVE(player, MOVE_TACKLE); } } SCENE { - MESSAGE("Full Restore restored Wobbuffet's health!"); + MESSAGE("Wobbuffet had its HP restored!"); NONE_OF { MESSAGE("Wobbuffet is confused!"); } } FINALLY { EXPECT_EQ(player->hp, player->maxHP); diff --git a/test/item_effect_revive.c b/test/item_effect_revive.c index 9ced527f4ef8..695361892e9c 100644 --- a/test/item_effect_revive.c +++ b/test/item_effect_revive.c @@ -15,7 +15,7 @@ SINGLE_BATTLE_TEST("Revive: Super Potion restores a fainted battler's HP to half TURN { USE_ITEM(player, ITEM_SUPER_POTION, partyIndex: 0); } TURN { SWITCH(player, 0); } } SCENE { - MESSAGE("Super Potion restored Wynaut's health!"); + MESSAGE("Wynaut had its HP restored!"); } FINALLY { EXPECT_EQ(player->hp, 60); } @@ -33,7 +33,7 @@ SINGLE_BATTLE_TEST("Revive: Revive restores a fainted battler's HP to half") TURN { USE_ITEM(player, ITEM_REVIVE, partyIndex: 0); } TURN { SWITCH(player, 0); } } SCENE { - MESSAGE("Revive restored Wynaut's health!"); + MESSAGE("Wynaut had its HP restored!"); } FINALLY { EXPECT_EQ(player->hp, MAX_HP/2); } @@ -51,7 +51,7 @@ SINGLE_BATTLE_TEST("Revive: Max Revive restores a fainted battler's HP fully") TURN { USE_ITEM(player, ITEM_MAX_REVIVE, partyIndex: 0); } TURN { SWITCH(player, 0); } } SCENE { - MESSAGE("Max Revive restored Wynaut's health!"); + MESSAGE("Wynaut had its HP restored!"); } FINALLY { EXPECT_EQ(player->hp, MAX_HP); } @@ -69,7 +69,7 @@ SINGLE_BATTLE_TEST("Revive: Revival Herb restores a fainted battler's HP fully") TURN { USE_ITEM(player, ITEM_REVIVAL_HERB, partyIndex: 0); } TURN { SWITCH(player, 0); } } SCENE { - MESSAGE("Revival Herb restored Wynaut's health!"); + MESSAGE("Wynaut had its HP restored!"); } FINALLY { EXPECT_EQ(player->hp, MAX_HP); } @@ -87,7 +87,7 @@ SINGLE_BATTLE_TEST("Revive: Max Honey restores a fainted battler's HP fully") TURN { USE_ITEM(player, ITEM_MAX_HONEY, partyIndex: 0); } TURN { SWITCH(player, 0); } } SCENE { - MESSAGE("Max Honey restored Wynaut's health!"); + MESSAGE("Wynaut had its HP restored!"); } FINALLY { EXPECT_EQ(player->hp, MAX_HP); } From 59666a1eb42d0699f27c102614234f4a8abd03eb Mon Sep 17 00:00:00 2001 From: CallmeEchoo Date: Mon, 24 Apr 2023 22:36:58 +0200 Subject: [PATCH 308/428] heal powder test --- test/item_effect_cure_status.c | 21 +++++++++++++++++++++ test/item_effect_heal_and_cure_status.c | 2 -- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/test/item_effect_cure_status.c b/test/item_effect_cure_status.c index c593aa016ce9..229f4e2b79fe 100644 --- a/test/item_effect_cure_status.c +++ b/test/item_effect_cure_status.c @@ -99,6 +99,26 @@ SINGLE_BATTLE_TEST("Cure Status: Full Heal heals a battler from any primary stat } } +SINGLE_BATTLE_TEST("Cure Status: Heal Powder heals a battler from any primary status") +{ + u16 status; + PARAMETRIZE{ status = STATUS1_BURN; } + PARAMETRIZE{ status = STATUS1_FREEZE; } + PARAMETRIZE{ status = STATUS1_PARALYSIS; } + PARAMETRIZE{ status = STATUS1_POISON; } + PARAMETRIZE{ status = STATUS1_TOXIC_POISON; } + PARAMETRIZE{ status = STATUS1_SLEEP; } + GIVEN { + ASSUME(gItems[ITEM_HEAL_POWDER].battleUsage == EFFECT_ITEM_CURE_STATUS); + PLAYER(SPECIES_WOBBUFFET) { Status1(status); } + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { USE_ITEM(player, ITEM_HEAL_POWDER, partyIndex: 0); } + } SCENE { + MESSAGE("Wobbuffet had its status healed!"); + } +} + SINGLE_BATTLE_TEST("Cure Status: Pewter Crunchies heals a battler from any primary status") { u16 status; @@ -263,6 +283,7 @@ SINGLE_BATTLE_TEST("Cure Status: Full Heal and local specialties heal a battler { u16 item; PARAMETRIZE { item = ITEM_FULL_HEAL; } + PARAMETRIZE { item = ITEM_HEAL_POWDER; } PARAMETRIZE { item = ITEM_PEWTER_CRUNCHIES; } PARAMETRIZE { item = ITEM_LAVA_COOKIE; } PARAMETRIZE { item = ITEM_RAGE_CANDY_BAR; } diff --git a/test/item_effect_heal_and_cure_status.c b/test/item_effect_heal_and_cure_status.c index 95f97fbaa3f0..6e264d25acba 100644 --- a/test/item_effect_heal_and_cure_status.c +++ b/test/item_effect_heal_and_cure_status.c @@ -26,8 +26,6 @@ SINGLE_BATTLE_TEST("Full Restore restores a battler's HP and cures any primary s SINGLE_BATTLE_TEST("Full Restore restores a battler's HP and cures confusion") { - // known failing bc even though it passes there is an underlying bug still that is only obvious in the replay. see #2938 - // this also means that this test is likely not very good so I advice this to be redone GIVEN { ASSUME(gItems[ITEM_FULL_RESTORE].battleUsage == EFFECT_ITEM_HEAL_AND_CURE_STATUS); PLAYER(SPECIES_WOBBUFFET) { HP(1); MaxHP(300);}; From 9562c7a37a000b4cfa34650ad717e300f7234c9e Mon Sep 17 00:00:00 2001 From: Frank DeBlasio <35279583+fdeblasio@users.noreply.github.com> Date: Mon, 24 Apr 2023 18:49:53 -0400 Subject: [PATCH 309/428] Added forbidden Metronome moves from PLA and SV (#2949) --- src/battle_script_commands.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 07669635e38e..3632095963dd 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -979,6 +979,7 @@ static const u8 sForbiddenMoves[MOVES_COUNT] = [MOVE_STRUGGLE] = 0xFF, // Neither Struggle [MOVE_AFTER_YOU] = FORBIDDEN_METRONOME, [MOVE_APPLE_ACID] = FORBIDDEN_METRONOME, + [MOVE_ARMOR_CANNON] = FORBIDDEN_METRONOME, [MOVE_ARM_THRUST] = FORBIDDEN_PARENTAL_BOND, [MOVE_ASSIST] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT, [MOVE_ASTRAL_BARRAGE] = FORBIDDEN_METRONOME, @@ -994,6 +995,7 @@ static const u8 sForbiddenMoves[MOVES_COUNT] = [MOVE_BESTOW] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT, [MOVE_BIDE] = FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT | FORBIDDEN_PARENTAL_BOND, // Note: Bide should work with Parental Bond. This will be addressed in future. [MOVE_BLAST_BURN] = FORBIDDEN_INSTRUCT, + [MOVE_BLAZING_TORQUE] = FORBIDDEN_MIMIC | FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT, [MOVE_BODY_PRESS] = FORBIDDEN_METRONOME, [MOVE_BONE_RUSH] = FORBIDDEN_PARENTAL_BOND, [MOVE_BONEMERANG] = FORBIDDEN_PARENTAL_BOND, @@ -1005,9 +1007,14 @@ static const u8 sForbiddenMoves[MOVES_COUNT] = [MOVE_BUZZY_BUZZ] = FORBIDDEN_METRONOME, [MOVE_CELEBRATE] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT, [MOVE_CHATTER] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_MIMIC | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT, + [MOVE_CHILLING_WATER] = FORBIDDEN_METRONOME, + [MOVE_CHILLY_RECEPTION] = FORBIDDEN_METRONOME, [MOVE_CIRCLE_THROW] = FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT, [MOVE_CLANGOROUS_SOUL] = FORBIDDEN_METRONOME, + [MOVE_COLLISION_COURSE] = FORBIDDEN_METRONOME, + [MOVE_COMBAT_TORQUE] = FORBIDDEN_MIMIC | FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT, [MOVE_COMET_PUNCH] = FORBIDDEN_PARENTAL_BOND, + [MOVE_COMEUPPANCE] = FORBIDDEN_METRONOME, [MOVE_COPYCAT] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT, [MOVE_COUNTER] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT, [MOVE_COVET] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT, @@ -1018,9 +1025,11 @@ static const u8 sForbiddenMoves[MOVES_COUNT] = [MOVE_DIAMOND_STORM] = FORBIDDEN_METRONOME, [MOVE_DIG] = FORBIDDEN_ASSIST | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT | FORBIDDEN_PARENTAL_BOND, [MOVE_DIVE] = FORBIDDEN_ASSIST | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT | FORBIDDEN_PARENTAL_BOND, + [MOVE_DOODLE] = FORBIDDEN_METRONOME, [MOVE_DOUBLE_IRON_BASH] = FORBIDDEN_METRONOME | FORBIDDEN_PARENTAL_BOND, [MOVE_DOUBLE_HIT] = FORBIDDEN_PARENTAL_BOND, [MOVE_DOUBLE_KICK] = FORBIDDEN_PARENTAL_BOND, + [MOVE_DOUBLE_SHOCK] = FORBIDDEN_METRONOME, [MOVE_DOUBLE_SLAP] = FORBIDDEN_PARENTAL_BOND, [MOVE_DRAGON_ASCENT] = FORBIDDEN_METRONOME, [MOVE_DRAGON_ENERGY] = FORBIDDEN_METRONOME, @@ -1030,6 +1039,7 @@ static const u8 sForbiddenMoves[MOVES_COUNT] = [MOVE_DUAL_CHOP] = FORBIDDEN_PARENTAL_BOND, [MOVE_DUAL_WINGBEAT] = FORBIDDEN_PARENTAL_BOND, [MOVE_DYNAMAX_CANNON] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT, + [MOVE_ELECTRO_DRIFT] = FORBIDDEN_METRONOME, [MOVE_ENDEAVOR] = FORBIDDEN_PARENTAL_BOND, [MOVE_ENDURE] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT, [MOVE_ETERNABEAM] = FORBIDDEN_METRONOME | FORBIDDEN_INSTRUCT, @@ -1037,6 +1047,7 @@ static const u8 sForbiddenMoves[MOVES_COUNT] = [MOVE_FALSE_SURRENDER] = FORBIDDEN_METRONOME, [MOVE_FEINT] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT, [MOVE_FIERY_WRATH] = FORBIDDEN_METRONOME, + [MOVE_FILLET_AWAY] = FORBIDDEN_METRONOME, [MOVE_FINAL_GAMBIT] = FORBIDDEN_PARENTAL_BOND, [MOVE_FISSURE] = FORBIDDEN_PARENTAL_BOND, [MOVE_FLEUR_CANNON] = FORBIDDEN_METRONOME, @@ -1062,16 +1073,20 @@ static const u8 sForbiddenMoves[MOVES_COUNT] = [MOVE_HORN_DRILL] = FORBIDDEN_PARENTAL_BOND, [MOVE_HYDRO_CANNON] = FORBIDDEN_INSTRUCT, [MOVE_HYPER_BEAM] = FORBIDDEN_INSTRUCT, + [MOVE_HYPER_DRILL] = FORBIDDEN_METRONOME, [MOVE_HYPERSPACE_FURY] = FORBIDDEN_METRONOME, [MOVE_HYPERSPACE_HOLE] = FORBIDDEN_METRONOME, [MOVE_ICE_BALL] = FORBIDDEN_INSTRUCT | FORBIDDEN_PARENTAL_BOND, [MOVE_ICE_BURN] = FORBIDDEN_METRONOME | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT | FORBIDDEN_PARENTAL_BOND, [MOVE_ICICLE_SPEAR] = FORBIDDEN_PARENTAL_BOND, [MOVE_INSTRUCT] = FORBIDDEN_METRONOME | FORBIDDEN_INSTRUCT, + [MOVE_JET_PUNCH] = FORBIDDEN_METRONOME, [MOVE_JUNGLE_HEALING] = FORBIDDEN_METRONOME, [MOVE_KINGS_SHIELD] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_INSTRUCT, [MOVE_LIFE_DEW] = FORBIDDEN_METRONOME, [MOVE_LIGHT_OF_RUIN] = FORBIDDEN_METRONOME, + [MOVE_MAKE_IT_RAIN] = FORBIDDEN_METRONOME, + [MOVE_MAGICAL_TORQUE] = FORBIDDEN_MIMIC | FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT, [MOVE_MAT_BLOCK] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT, [MOVE_ME_FIRST] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT, [MOVE_METEOR_ASSAULT] = FORBIDDEN_METRONOME | FORBIDDEN_INSTRUCT, @@ -1085,32 +1100,47 @@ static const u8 sForbiddenMoves[MOVES_COUNT] = [MOVE_MOONGEIST_BEAM] = FORBIDDEN_METRONOME, [MOVE_NATURE_POWER] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT, [MOVE_NATURES_MADNESS] = FORBIDDEN_METRONOME, + [MOVE_NOXIOUS_TORQUE] = FORBIDDEN_MIMIC | FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT, [MOVE_OBSTRUCT] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_INSTRUCT, + [MOVE_ORDER_UP] = FORBIDDEN_METRONOME, [MOVE_ORIGIN_PULSE] = FORBIDDEN_METRONOME, [MOVE_OUTRAGE] = FORBIDDEN_INSTRUCT, [MOVE_OVERDRIVE] = FORBIDDEN_METRONOME, [MOVE_PHANTOM_FORCE] = FORBIDDEN_ASSIST | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT | FORBIDDEN_PARENTAL_BOND, [MOVE_PHOTON_GEYSER] = FORBIDDEN_METRONOME, + [MOVE_PLASMA_FISTS] = FORBIDDEN_METRONOME, + [MOVE_POPULATION_BOMB] = FORBIDDEN_METRONOME, + [MOVE_POUNCE] = FORBIDDEN_METRONOME, + [MOVE_POWER_SHIFT] = FORBIDDEN_METRONOME, + [MOVE_PRECIPICE_BLADES] = FORBIDDEN_METRONOME, [MOVE_PRISMATIC_LASER] = FORBIDDEN_INSTRUCT, [MOVE_PROTECT] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT, [MOVE_PYRO_BALL] = FORBIDDEN_METRONOME, [MOVE_QUASH] = FORBIDDEN_METRONOME, [MOVE_QUICK_GUARD] = FORBIDDEN_METRONOME, + [MOVE_RAGE_FIST] = FORBIDDEN_METRONOME, [MOVE_RAGE_POWDER] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT, + [MOVE_RAGING_BULL] = FORBIDDEN_METRONOME, + [MOVE_RAGING_FURY] = FORBIDDEN_METRONOME, [MOVE_RAZOR_WIND] = FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT | FORBIDDEN_PARENTAL_BOND, [MOVE_RELIC_SONG] = FORBIDDEN_METRONOME, + [MOVE_REVIVAL_BLESSING] = FORBIDDEN_METRONOME, [MOVE_ROAR] = FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT, [MOVE_ROAR_OF_TIME] = FORBIDDEN_INSTRUCT, [MOVE_ROCK_BLAST] = FORBIDDEN_PARENTAL_BOND, [MOVE_ROCK_WRECKER] = FORBIDDEN_INSTRUCT, [MOVE_ROLLOUT] = FORBIDDEN_INSTRUCT | FORBIDDEN_PARENTAL_BOND, + [MOVE_RUINATION] = FORBIDDEN_METRONOME, [MOVE_SAPPY_SEED] = FORBIDDEN_METRONOME, + [MOVE_SALT_CURE] = FORBIDDEN_METRONOME, [MOVE_SCALE_SHOT] = FORBIDDEN_PARENTAL_BOND, [MOVE_SECRET_SWORD] = FORBIDDEN_METRONOME, [MOVE_SELF_DESTRUCT] = FORBIDDEN_PARENTAL_BOND, [MOVE_SHADOW_FORCE] = FORBIDDEN_ASSIST | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT | FORBIDDEN_PARENTAL_BOND, + [MOVE_SHED_TAIL] = FORBIDDEN_METRONOME, [MOVE_SHEER_COLD] = FORBIDDEN_PARENTAL_BOND, [MOVE_SHELL_TRAP] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT, + [MOVE_SILK_TRAP] = FORBIDDEN_METRONOME, [MOVE_SIZZLY_SLIDE] = FORBIDDEN_METRONOME, [MOVE_SKETCH] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_MIMIC | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT, [MOVE_SKULL_BASH] = FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT | FORBIDDEN_PARENTAL_BOND, @@ -1121,10 +1151,12 @@ static const u8 sForbiddenMoves[MOVES_COUNT] = [MOVE_SNARL] = FORBIDDEN_METRONOME, [MOVE_SNATCH] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_INSTRUCT, [MOVE_SNORE] = FORBIDDEN_METRONOME, + [MOVE_SNOWSCAPE] = FORBIDDEN_METRONOME, [MOVE_SOLAR_BEAM] = FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT | FORBIDDEN_PARENTAL_BOND, [MOVE_SOLAR_BLADE] = FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT | FORBIDDEN_PARENTAL_BOND, [MOVE_SPARKLY_SWIRL] = FORBIDDEN_METRONOME, [MOVE_SPECTRAL_THIEF] = FORBIDDEN_METRONOME, + [MOVE_SPICY_EXTRACT] = FORBIDDEN_METRONOME, [MOVE_SPIKE_CANNON] = FORBIDDEN_PARENTAL_BOND, [MOVE_SPIKY_SHIELD] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT, [MOVE_SPIRIT_BREAK] = FORBIDDEN_METRONOME, @@ -1144,17 +1176,21 @@ static const u8 sForbiddenMoves[MOVES_COUNT] = [MOVE_THRASH] = FORBIDDEN_INSTRUCT, [MOVE_THUNDER_CAGE] = FORBIDDEN_METRONOME, [MOVE_THUNDEROUS_KICK] = FORBIDDEN_METRONOME, + [MOVE_TIDY_UP] = FORBIDDEN_METRONOME, + [MOVE_TRAILBLAZE] = FORBIDDEN_METRONOME, [MOVE_TRANSFORM] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_MIMIC | FORBIDDEN_INSTRUCT, [MOVE_TRICK] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT, [MOVE_TRIPLE_AXEL] = FORBIDDEN_PARENTAL_BOND, [MOVE_TRIPLE_KICK] = FORBIDDEN_PARENTAL_BOND, [MOVE_TWINEEDLE] = FORBIDDEN_PARENTAL_BOND, + [MOVE_TWIN_BEAM] = FORBIDDEN_METRONOME, [MOVE_UPROAR] = FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT | FORBIDDEN_PARENTAL_BOND, [MOVE_V_CREATE] = FORBIDDEN_METRONOME, [MOVE_VEEVEE_VOLLEY] = FORBIDDEN_METRONOME, [MOVE_WATER_SHURIKEN] = FORBIDDEN_PARENTAL_BOND, [MOVE_WHIRLWIND] = FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT, [MOVE_WICKED_BLOW] = FORBIDDEN_METRONOME, + [MOVE_WICKED_TORQUE] = FORBIDDEN_MIMIC | FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT, [MOVE_WIDE_GUARD] = FORBIDDEN_METRONOME, [MOVE_ZIPPY_ZAP] = FORBIDDEN_METRONOME, }; From 60e048b83e967db723f2b6893555e14a44a8b0cb Mon Sep 17 00:00:00 2001 From: CallmeEchoo Date: Tue, 25 Apr 2023 13:44:16 +0200 Subject: [PATCH 310/428] more robust status cure tests --- test/item_effect_cure_status.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/test/item_effect_cure_status.c b/test/item_effect_cure_status.c index 229f4e2b79fe..4d4cbda2ee0e 100644 --- a/test/item_effect_cure_status.c +++ b/test/item_effect_cure_status.c @@ -11,6 +11,8 @@ SINGLE_BATTLE_TEST("Cure Status: Paralyze Heal heals a battler from being paraly TURN { USE_ITEM(player, ITEM_PARALYZE_HEAL, partyIndex: 0); } } SCENE { MESSAGE("Wobbuffet had its status healed!"); + } FINALLY { + EXPECT_EQ(player->status1, STATUS1_NONE); } } @@ -24,6 +26,8 @@ SINGLE_BATTLE_TEST("Cure Status: Antidote heals a battler from being poisoned") TURN { USE_ITEM(player, ITEM_ANTIDOTE, partyIndex: 0); } } SCENE { MESSAGE("Wobbuffet had its status healed!"); + } FINALLY { + EXPECT_EQ(player->status1, STATUS1_NONE); } } @@ -37,6 +41,8 @@ SINGLE_BATTLE_TEST("Cure Status: Antidote heals a battler from being badly poiso TURN { USE_ITEM(player, ITEM_ANTIDOTE, partyIndex: 0); } } SCENE { MESSAGE("Wobbuffet had its status healed!"); + } FINALLY { + EXPECT_EQ(player->status1, STATUS1_NONE); } } @@ -50,6 +56,8 @@ SINGLE_BATTLE_TEST("Cure Status: Awakening heals a battler from being asleep") TURN { USE_ITEM(player, ITEM_AWAKENING, partyIndex: 0); } } SCENE { MESSAGE("Wobbuffet had its status healed!"); + } FINALLY { + EXPECT_EQ(player->status1, STATUS1_NONE); } } @@ -63,6 +71,8 @@ SINGLE_BATTLE_TEST("Cure Status: Burn Heal heals a battler from being burned") TURN { USE_ITEM(player, ITEM_BURN_HEAL, partyIndex: 0); } } SCENE { MESSAGE("Wobbuffet had its status healed!"); + } FINALLY { + EXPECT_EQ(player->status1, STATUS1_NONE); } } @@ -76,6 +86,8 @@ SINGLE_BATTLE_TEST("Cure Status: Ice Heal heals a battler from being paralyzed") TURN { USE_ITEM(player, ITEM_ICE_HEAL, partyIndex: 0); } } SCENE { MESSAGE("Wobbuffet had its status healed!"); + } FINALLY { + EXPECT_EQ(player->status1, STATUS1_NONE); } } @@ -96,6 +108,8 @@ SINGLE_BATTLE_TEST("Cure Status: Full Heal heals a battler from any primary stat TURN { USE_ITEM(player, ITEM_FULL_HEAL, partyIndex: 0); } } SCENE { MESSAGE("Wobbuffet had its status healed!"); + } FINALLY { + EXPECT_EQ(player->status1, STATUS1_NONE); } } @@ -116,6 +130,8 @@ SINGLE_BATTLE_TEST("Cure Status: Heal Powder heals a battler from any primary st TURN { USE_ITEM(player, ITEM_HEAL_POWDER, partyIndex: 0); } } SCENE { MESSAGE("Wobbuffet had its status healed!"); + } FINALLY { + EXPECT_EQ(player->status1, STATUS1_NONE); } } @@ -136,6 +152,8 @@ SINGLE_BATTLE_TEST("Cure Status: Pewter Crunchies heals a battler from any prima TURN { USE_ITEM(player, ITEM_PEWTER_CRUNCHIES, partyIndex: 0); } } SCENE { MESSAGE("Wobbuffet had its status healed!"); + } FINALLY { + EXPECT_EQ(player->status1, STATUS1_NONE); } } @@ -156,6 +174,8 @@ SINGLE_BATTLE_TEST("Cure Status: Lava Cookies heals a battler from any primary s TURN { USE_ITEM(player, ITEM_LAVA_COOKIE, partyIndex: 0); } } SCENE { MESSAGE("Wobbuffet had its status healed!"); + } FINALLY { + EXPECT_EQ(player->status1, STATUS1_NONE); } } @@ -176,6 +196,8 @@ SINGLE_BATTLE_TEST("Cure Status: Rage Candy Bar heals a battler from any primary TURN { USE_ITEM(player, ITEM_RAGE_CANDY_BAR, partyIndex: 0); } } SCENE { MESSAGE("Wobbuffet had its status healed!"); + } FINALLY { + EXPECT_EQ(player->status1, STATUS1_NONE); } } @@ -196,6 +218,8 @@ SINGLE_BATTLE_TEST("Cure Status: Old Gateu heals a battler from any primary stat TURN { USE_ITEM(player, ITEM_OLD_GATEAU, partyIndex: 0); } } SCENE { MESSAGE("Wobbuffet had its status healed!"); + } FINALLY { + EXPECT_EQ(player->status1, STATUS1_NONE); } } @@ -216,6 +240,8 @@ SINGLE_BATTLE_TEST("Cure Status: Casteliacone heals a battler from any primary s TURN { USE_ITEM(player, ITEM_CASTELIACONE, partyIndex: 0); } } SCENE { MESSAGE("Wobbuffet had its status healed!"); + } FINALLY { + EXPECT_EQ(player->status1, STATUS1_NONE); } } @@ -236,6 +262,8 @@ SINGLE_BATTLE_TEST("Cure Status: Lumiose Galette heals a battler from any primar TURN { USE_ITEM(player, ITEM_LUMIOSE_GALETTE, partyIndex: 0); } } SCENE { MESSAGE("Wobbuffet had its status healed!");; + } FINALLY { + EXPECT_EQ(player->status1, STATUS1_NONE); } } @@ -256,6 +284,8 @@ SINGLE_BATTLE_TEST("Cure Status: Shalour Sable heals a battler from any primary TURN { USE_ITEM(player, ITEM_SHALOUR_SABLE, partyIndex: 0); } } SCENE { MESSAGE("Wobbuffet had its status healed!"); + } FINALLY { + EXPECT_EQ(player->status1, STATUS1_NONE); } } @@ -276,6 +306,8 @@ SINGLE_BATTLE_TEST("Cure Status: Big Malasada heals a battler from any primary s TURN { USE_ITEM(player, ITEM_BIG_MALASADA, partyIndex: 0); } } SCENE { MESSAGE("Wobbuffet had its status healed!"); + } FINALLY { + EXPECT_EQ(player->status1, STATUS1_NONE); } } @@ -301,5 +333,7 @@ SINGLE_BATTLE_TEST("Cure Status: Full Heal and local specialties heal a battler TURN { USE_ITEM(player, item, partyIndex: 0); } } SCENE { MESSAGE("Wobbuffet had its status healed!"); + } FINALLY { + EXPECT_EQ(player->status2, STATUS1_NONE); // because we dont have STATUS2_NONE } } From 2aa4d2da3836cad4e422c2f722970ae795105c39 Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Tue, 25 Apr 2023 19:38:47 +0200 Subject: [PATCH 311/428] Fix Ice Heal message --- include/constants/item_effects.h | 2 +- src/item.c | 2 +- src/item_use.c | 2 +- src/party_menu.c | 18 ++++++++++-------- 4 files changed, 13 insertions(+), 11 deletions(-) diff --git a/include/constants/item_effects.h b/include/constants/item_effects.h index 7cd4a58f48ba..fca792451439 100644 --- a/include/constants/item_effects.h +++ b/include/constants/item_effects.h @@ -74,7 +74,7 @@ #define ITEM_EFFECT_CURE_POISON 3 #define ITEM_EFFECT_CURE_SLEEP 4 #define ITEM_EFFECT_CURE_BURN 5 -#define ITEM_EFFECT_CURE_FREEZE 6 +#define ITEM_EFFECT_CURE_FREEZE_FROSTBITE 6 #define ITEM_EFFECT_CURE_PARALYSIS 7 #define ITEM_EFFECT_CURE_CONFUSION 8 #define ITEM_EFFECT_CURE_INFATUATION 9 diff --git a/src/item.c b/src/item.c index d07e93782f9f..2c6937244605 100644 --- a/src/item.c +++ b/src/item.c @@ -941,7 +941,7 @@ u8 ItemId_GetBattleUsage(u16 itemId) case ITEM_EFFECT_CURE_POISON: case ITEM_EFFECT_CURE_SLEEP: case ITEM_EFFECT_CURE_BURN: - case ITEM_EFFECT_CURE_FREEZE: + case ITEM_EFFECT_CURE_FREEZE_FROSTBITE: case ITEM_EFFECT_CURE_PARALYSIS: case ITEM_EFFECT_CURE_ALL_STATUS: case ITEM_EFFECT_CURE_CONFUSION: diff --git a/src/item_use.c b/src/item_use.c index 3a838288b1aa..86764be3b641 100644 --- a/src/item_use.c +++ b/src/item_use.c @@ -1244,7 +1244,7 @@ void ItemUseOutOfBattle_EnigmaBerry(u8 taskId) case ITEM_EFFECT_CURE_POISON: case ITEM_EFFECT_CURE_SLEEP: case ITEM_EFFECT_CURE_BURN: - case ITEM_EFFECT_CURE_FREEZE: + case ITEM_EFFECT_CURE_FREEZE_FROSTBITE: case ITEM_EFFECT_CURE_PARALYSIS: case ITEM_EFFECT_CURE_ALL_STATUS: case ITEM_EFFECT_ATK_EV: diff --git a/src/party_menu.c b/src/party_menu.c index 1623201b103c..4eb09c138560 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -4317,7 +4317,7 @@ static bool8 IsHPRecoveryItem(u16 item) return FALSE; } -static void GetMedicineItemEffectMessage(u16 item) +static void GetMedicineItemEffectMessage(u16 item, u32 statusCured) { switch (GetItemEffectType(item)) { @@ -4330,10 +4330,11 @@ static void GetMedicineItemEffectMessage(u16 item) case ITEM_EFFECT_CURE_BURN: StringExpandPlaceholders(gStringVar4, gText_PkmnBurnHealed); break; - case ITEM_EFFECT_CURE_FREEZE: - StringExpandPlaceholders(gStringVar4, gText_PkmnThawedOut); - // TO DO: if it heals frostbite, use the following instead: - // StringExpandPlaceholders(gStringVar4, gText_PkmnFrostbiteHealed); + case ITEM_EFFECT_CURE_FREEZE_FROSTBITE: + if (statusCured & STATUS1_FREEZE) + StringExpandPlaceholders(gStringVar4, gText_PkmnThawedOut); + if (statusCured & STATUS1_FROSTBITE) + StringExpandPlaceholders(gStringVar4, gText_PkmnFrostbiteHealed); break; case ITEM_EFFECT_CURE_PARALYSIS: StringExpandPlaceholders(gStringVar4, gText_PkmnCuredOfParalysis); @@ -4497,6 +4498,7 @@ void ItemUseCB_Medicine(u8 taskId, TaskFunc task) struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId]; u16 item = gSpecialVar_ItemId; bool8 canHeal, cannotUse; + u32 oldStatus = GetMonData(mon, MON_DATA_STATUS); if (NotUsingHPEVItemOnShedinja(mon, item) == FALSE) { @@ -4549,7 +4551,7 @@ void ItemUseCB_Medicine(u8 taskId, TaskFunc task) else { GetMonNickname(mon, gStringVar1); - GetMedicineItemEffectMessage(item); + GetMedicineItemEffectMessage(item, oldStatus); DisplayPartyMenuMessage(gStringVar4, TRUE); ScheduleBgCopyTilemapToVram(2); gTasks[taskId].func = task; @@ -4976,7 +4978,7 @@ static void TryUseItemOnMove(u8 taskId) RemoveBagItem(item, 1); move = GetMonData(mon, MON_DATA_MOVE1 + *moveSlot); StringCopy(gStringVar1, gMoveNames[move]); - GetMedicineItemEffectMessage(item); + GetMedicineItemEffectMessage(item, 0); DisplayPartyMenuMessage(gStringVar4, TRUE); ScheduleBgCopyTilemapToVram(2); gTasks[taskId].func = Task_ClosePartyMenuAfterText; @@ -5826,7 +5828,7 @@ u8 GetItemEffectType(u16 item) else if (statusCure == ITEM3_BURN) return ITEM_EFFECT_CURE_BURN; else if (statusCure == ITEM3_FREEZE) - return ITEM_EFFECT_CURE_FREEZE; + return ITEM_EFFECT_CURE_FREEZE_FROSTBITE; else if (statusCure == ITEM3_PARALYSIS) return ITEM_EFFECT_CURE_PARALYSIS; else if (statusCure == ITEM3_CONFUSION) From 7fad0a2dbce29dfa50e40e6c2194c3462df7626d Mon Sep 17 00:00:00 2001 From: CallmeEchoo Date: Tue, 25 Apr 2023 19:45:35 +0200 Subject: [PATCH 312/428] add MovesWithPP macro to allow for setting pps in tests --- test/test_battle.h | 5 +++++ test/test_runner_battle.c | 15 +++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/test/test_battle.h b/test/test_battle.h index 967bb661dd18..0f413a2e47b5 100644 --- a/test/test_battle.h +++ b/test/test_battle.h @@ -713,6 +713,9 @@ void Randomly(u32 sourceLine, u32 passes, u32 trials, struct RandomlyContext); /* Given */ +#define MOVE_ARGS(...) {__VA_ARGS__} +#define PP_ARGS(...) {__VA_ARGS__} + #define GIVEN for (; gBattleTestRunnerState->runGiven; gBattleTestRunnerState->runGiven = FALSE) #define RNGSeed(seed) RNGSeed_(__LINE__, seed) @@ -733,6 +736,7 @@ void Randomly(u32 sourceLine, u32 passes, u32 trials, struct RandomlyContext); #define Speed(speed) Speed_(__LINE__, speed) #define Item(item) Item_(__LINE__, item) #define Moves(move1, ...) Moves_(__LINE__, (const u16 [MAX_MON_MOVES]) { move1, __VA_ARGS__ }) +#define MovesWithPP(moves, pp) MovesWithPP_(__LINE__, (const u16 [MAX_MON_MOVES]) MOVE_ARGS moves, (const u8 [MAX_MON_MOVES]) PP_ARGS pp) #define Friendship(friendship) Friendship_(__LINE__, friendship) #define Status1(status1) Status1_(__LINE__, status1) @@ -753,6 +757,7 @@ void SpDefense_(u32 sourceLine, u32 spDefense); void Speed_(u32 sourceLine, u32 speed); void Item_(u32 sourceLine, u32 item); void Moves_(u32 sourceLine, const u16 moves[MAX_MON_MOVES]); +void MovesWithPP_(u32 sourceLine, const u16 moves[MAX_MON_MOVES], const u8 pp[MAX_MON_MOVES]); void Friendship_(u32 sourceLine, u32 friendship); void Status1_(u32 sourceLine, u32 status1); diff --git a/test/test_runner_battle.c b/test/test_runner_battle.c index 2a44cc018bd1..33fcd5a0f3f2 100644 --- a/test/test_runner_battle.c +++ b/test/test_runner_battle.c @@ -1161,6 +1161,21 @@ void Moves_(u32 sourceLine, const u16 moves[MAX_MON_MOVES]) DATA.explicitMoves[DATA.currentSide] |= 1 << DATA.currentPartyIndex; } +void MovesWithPP_(u32 sourceLine, const u16 moves[MAX_MON_MOVES], const u8 pp[MAX_MON_MOVES]) +{ + s32 i; + INVALID_IF(!DATA.currentMon, "Moves outside of PLAYER/OPPONENT"); + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (moves[i] == MOVE_NONE) + break; + INVALID_IF(moves[i] >= MOVES_COUNT, "Illegal move: %d", moves[i]); + SetMonData(DATA.currentMon, MON_DATA_MOVE1 + i, &moves[i]); + SetMonData(DATA.currentMon, MON_DATA_PP1 + i, &pp[i]); + } + DATA.explicitMoves[DATA.currentSide] |= 1 << DATA.currentPartyIndex; +} + void Friendship_(u32 sourceLine, u32 friendship) { INVALID_IF(!DATA.currentMon, "Friendship outside of PLAYER/OPPONENT"); From 2885ec24117f47628b2795483594d8793499589b Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Tue, 25 Apr 2023 19:48:45 +0200 Subject: [PATCH 313/428] Fix move descriptions --- src/data/text/move_descriptions.h | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/data/text/move_descriptions.h b/src/data/text/move_descriptions.h index c2b7e0b234bf..f950c2a1aac5 100644 --- a/src/data/text/move_descriptions.h +++ b/src/data/text/move_descriptions.h @@ -38,7 +38,11 @@ static const u8 sFirePunchDescription[] = _( static const u8 sIcePunchDescription[] = _( "An icy punch that may\n" +#if B_USE_FROSTBITE == TRUE + "leave the foe with frostbite."); +#else "freeze the foe."); +#endif static const u8 sThunderPunchDescription[] = _( "An electrified punch that\n" @@ -238,11 +242,19 @@ static const u8 sSurfDescription[] = _( static const u8 sIceBeamDescription[] = _( "Blasts the foe with an icy\n" +#if B_USE_FROSTBITE == TRUE + "beam. May cause frostbite."); +#else "beam that may freeze it."); +#endif static const u8 sBlizzardDescription[] = _( "Hits the foe with an icy\n" +#if B_USE_FROSTBITE == TRUE + "storm. May cause frostbite."); +#else "storm that may freeze it."); +#endif static const u8 sPsybeamDescription[] = _( "Fires a peculiar ray that\n" @@ -2931,7 +2943,11 @@ static const u8 sDragonEnergyDescription[] = _( static const u8 sFreezingGlareDescription[] = _( "Shoots psychic power from\n" +#if B_USE_FROSTBITE == TRUE + "the eyes. May frostbite."); +#else "the eyes. May freeze the foe."); +#endif static const u8 sFieryWrathDescription[] = _( "An attack fueled by your\n" From 08ec873ef27da02404c35c9ae911779043edaf9a Mon Sep 17 00:00:00 2001 From: CallmeEchoo Date: Tue, 25 Apr 2023 20:35:36 +0200 Subject: [PATCH 314/428] update MoveWithPP macro to use struct --- test/test_battle.h | 10 ++++++---- test/test_runner_battle.c | 10 +++++----- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/test/test_battle.h b/test/test_battle.h index 0f413a2e47b5..f2d8bab786f9 100644 --- a/test/test_battle.h +++ b/test/test_battle.h @@ -713,8 +713,10 @@ void Randomly(u32 sourceLine, u32 passes, u32 trials, struct RandomlyContext); /* Given */ -#define MOVE_ARGS(...) {__VA_ARGS__} -#define PP_ARGS(...) {__VA_ARGS__} +struct moveWithPP { + u16 moveId; + u8 pp; +}; #define GIVEN for (; gBattleTestRunnerState->runGiven; gBattleTestRunnerState->runGiven = FALSE) @@ -736,7 +738,7 @@ void Randomly(u32 sourceLine, u32 passes, u32 trials, struct RandomlyContext); #define Speed(speed) Speed_(__LINE__, speed) #define Item(item) Item_(__LINE__, item) #define Moves(move1, ...) Moves_(__LINE__, (const u16 [MAX_MON_MOVES]) { move1, __VA_ARGS__ }) -#define MovesWithPP(moves, pp) MovesWithPP_(__LINE__, (const u16 [MAX_MON_MOVES]) MOVE_ARGS moves, (const u8 [MAX_MON_MOVES]) PP_ARGS pp) +#define MovesWithPP(movewithpp1, ...) MovesWithPP_(__LINE__, (struct moveWithPP[MAX_MON_MOVES]) {movewithpp1, __VA_ARGS__}) #define Friendship(friendship) Friendship_(__LINE__, friendship) #define Status1(status1) Status1_(__LINE__, status1) @@ -757,7 +759,7 @@ void SpDefense_(u32 sourceLine, u32 spDefense); void Speed_(u32 sourceLine, u32 speed); void Item_(u32 sourceLine, u32 item); void Moves_(u32 sourceLine, const u16 moves[MAX_MON_MOVES]); -void MovesWithPP_(u32 sourceLine, const u16 moves[MAX_MON_MOVES], const u8 pp[MAX_MON_MOVES]); +void MovesWithPP_(u32 sourceLine, struct moveWithPP moveWithPP[MAX_MON_MOVES]); void Friendship_(u32 sourceLine, u32 friendship); void Status1_(u32 sourceLine, u32 status1); diff --git a/test/test_runner_battle.c b/test/test_runner_battle.c index 33fcd5a0f3f2..75e459e49bb3 100644 --- a/test/test_runner_battle.c +++ b/test/test_runner_battle.c @@ -1161,17 +1161,17 @@ void Moves_(u32 sourceLine, const u16 moves[MAX_MON_MOVES]) DATA.explicitMoves[DATA.currentSide] |= 1 << DATA.currentPartyIndex; } -void MovesWithPP_(u32 sourceLine, const u16 moves[MAX_MON_MOVES], const u8 pp[MAX_MON_MOVES]) +void MovesWithPP_(u32 sourceLine, struct moveWithPP moveWithPP[MAX_MON_MOVES]) { s32 i; INVALID_IF(!DATA.currentMon, "Moves outside of PLAYER/OPPONENT"); for (i = 0; i < MAX_MON_MOVES; i++) { - if (moves[i] == MOVE_NONE) + if (moveWithPP[i].moveId == MOVE_NONE) break; - INVALID_IF(moves[i] >= MOVES_COUNT, "Illegal move: %d", moves[i]); - SetMonData(DATA.currentMon, MON_DATA_MOVE1 + i, &moves[i]); - SetMonData(DATA.currentMon, MON_DATA_PP1 + i, &pp[i]); + INVALID_IF(moveWithPP[i].moveId >= MOVES_COUNT, "Illegal move: %d", &moveWithPP[i].moveId); + SetMonData(DATA.currentMon, MON_DATA_MOVE1 + i, &moveWithPP[i].moveId); + SetMonData(DATA.currentMon, MON_DATA_PP1 + i, &moveWithPP[i].pp); } DATA.explicitMoves[DATA.currentSide] |= 1 << DATA.currentPartyIndex; } From 78c4d07b234c026304898bdc2b2fe8edc77a8402 Mon Sep 17 00:00:00 2001 From: Salem <65783283+CallmeEchoo@users.noreply.github.com> Date: Tue, 25 Apr 2023 21:03:57 +0200 Subject: [PATCH 315/428] Add Berserk Gene Item (#2893) Co-authored-by: Eduardo Quezada D'Ottone --- data/battle_scripts_1.s | 27 +++ graphics/items/icon_palettes/berserk_gene.pal | 19 ++ graphics/items/icons/berserk_gene.png | Bin 0 -> 356 bytes include/battle_scripts.h | 1 + include/battle_util.h | 1 + include/constants/battle.h | 1 + include/constants/hold_effects.h | 3 + include/constants/items.h | 3 +- include/graphics.h | 2 + src/battle_main.c | 2 +- src/battle_script_commands.c | 2 + src/battle_util.c | 79 +++++++- src/data/graphics/items.h | 3 + src/data/item_icon_table.h | 1 + src/data/items.h | 13 ++ src/data/text/item_descriptions.h | 5 + test/hold_effect_berserk_gene.c | 187 ++++++++++++++++++ 17 files changed, 340 insertions(+), 9 deletions(-) create mode 100644 graphics/items/icon_palettes/berserk_gene.pal create mode 100644 graphics/items/icons/berserk_gene.png create mode 100644 test/hold_effect_berserk_gene.c diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 4a5af83a2d25..dcb076c278a4 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -10395,3 +10395,30 @@ BattleScript_CouldntFullyProtect:: printstring STRINGID_COULDNTFULLYPROTECT waitmessage B_WAIT_TIME_LONG return + +BattleScript_BerserkGeneRet:: +BattleScript_BerserkGeneRet_Anim: + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_BerserkGeneRet_TryConfuse + setgraphicalstatchangevalues + playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT, sB_ANIM_ARG1 + setbyte cMULTISTRING_CHOOSER, B_MSG_STAT_ROSE_ITEM + call BattleScript_StatUp +BattleScript_BerserkGeneRet_TryConfuse: + jumpifability BS_SCRIPTING, ABILITY_OWN_TEMPO, BattleScript_BerserkGeneRet_OwnTempoPrevents + jumpifsafeguard BattleScript_BerserkGeneRet_SafeguardProtected + setmoveeffect MOVE_EFFECT_CONFUSION + seteffectprimary + goto BattleScript_BerserkGeneRet_End +BattleScript_BerserkGeneRet_SafeguardProtected:: + pause B_WAIT_TIME_SHORT + printstring STRINGID_PKMNUSEDSAFEGUARD + waitmessage B_WAIT_TIME_LONG + goto BattleScript_BerserkGeneRet_End +BattleScript_BerserkGeneRet_OwnTempoPrevents: + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp + printstring STRINGID_PKMNPREVENTSCONFUSIONWITH + waitmessage B_WAIT_TIME_LONG +BattleScript_BerserkGeneRet_End: + removeitem BS_SCRIPTING + end3 diff --git a/graphics/items/icon_palettes/berserk_gene.pal b/graphics/items/icon_palettes/berserk_gene.pal new file mode 100644 index 000000000000..3ac8981aa03d --- /dev/null +++ b/graphics/items/icon_palettes/berserk_gene.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +212 146 75 +49 49 49 +131 123 131 +98 90 98 +74 65 74 +164 90 222 +230 180 255 +255 230 238 +255 230 106 +255 189 74 +255 171 32 +238 148 0 +255 246 189 +123 82 32 +0 0 0 +0 0 0 diff --git a/graphics/items/icons/berserk_gene.png b/graphics/items/icons/berserk_gene.png new file mode 100644 index 0000000000000000000000000000000000000000..faac0f67690b8861aa2794e781924c47b26ada27 GIT binary patch literal 356 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1;w_7YEDSN7*DZ2W5c{>}^efI{LW zt`Q}{`DrEPiAAXl?mjL+V-(6#ixiCYObT0QTLv0`TzgfyZ_I!{_pkrzgpql z6o&ub_ErZe0CfOCK(E1XAjO#E?e6k_Df_3RKu(9Ji(^Q|oaBUr1OXOCMm7V15GF=f zgZ_&gX9A5_ienDsh`MvIGbzjoNM6vgDO15kZS9^tdvuNpCP_sc6G+;|azl<&BmLUE zyVYfH8;Z)_S{A2W=Sh*YNdNxwvd0|T-4EwTY8Y|Y_BimJFmW_+7tk>lJX9#Sr~3Ol nS3#zAX(f!OXC!=NQd+^_oM!J?|9kIKkV8FP{an^LB{Ts5%RhFk literal 0 HcmV?d00001 diff --git a/include/battle_scripts.h b/include/battle_scripts.h index c78fcafe48c8..876e2d343ad5 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -461,6 +461,7 @@ extern const u8 BattleScript_CouldntFullyProtect[]; extern const u8 BattleScript_MoveEffectStockpileWoreOff[]; extern const u8 BattleScript_StealthRockActivates[]; extern const u8 BattleScript_SpikesActivates[]; +extern const u8 BattleScript_BerserkGeneRet[]; // zmoves extern const u8 BattleScript_ZMoveActivateDamaging[]; diff --git a/include/battle_util.h b/include/battle_util.h index b83209a697cd..3a28f9b3d8c5 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -234,5 +234,6 @@ u32 GetBattlerFriendshipScore(u8 battlerId); u32 CountBattlerStatIncreases(u8 battlerId, bool32 countEvasionAcc); bool32 IsMyceliumMightOnField(void); bool8 ChangeTypeBasedOnTerrain(u8 battlerId); +void RemoveConfusionStatus(u8 battlerId); #endif // GUARD_BATTLE_UTIL_H diff --git a/include/constants/battle.h b/include/constants/battle.h index 61c3776c6c42..f0130e58f2cd 100644 --- a/include/constants/battle.h +++ b/include/constants/battle.h @@ -185,6 +185,7 @@ #define STATUS4_PLASMA_FISTS (1 << 1) #define STATUS4_MUD_SPORT (1 << 2) // Only used if B_SPORT_TURNS < GEN_6 #define STATUS4_WATER_SPORT (1 << 3) // Only used if B_SPORT_TURNS < GEN_6 +#define STATUS4_INFINITE_CONFUSION (1 << 4) // Used for Berserk Gene #define HITMARKER_WAKE_UP_CLEAR (1 << 4) // Cleared when waking up. Never set or checked. #define HITMARKER_SKIP_DMG_TRACK (1 << 5) diff --git a/include/constants/hold_effects.h b/include/constants/hold_effects.h index 5fc268cb05ba..9f877cffa80f 100644 --- a/include/constants/hold_effects.h +++ b/include/constants/hold_effects.h @@ -161,6 +161,9 @@ #define HOLD_EFFECT_LOADED_DICE 180 #define HOLD_EFFECT_BOOSTER_ENERGY 181 // Not implemented. +// Gen2 hold effect +#define HOLD_EFFECT_BERSERK_GENE 182 + #define HOLD_EFFECT_CHOICE(holdEffect)((holdEffect == HOLD_EFFECT_CHOICE_BAND || holdEffect == HOLD_EFFECT_CHOICE_SCARF || holdEffect == HOLD_EFFECT_CHOICE_SPECS)) // Terrain seed params diff --git a/include/constants/items.h b/include/constants/items.h index 4421181668c5..57ed63feb4ec 100644 --- a/include/constants/items.h +++ b/include/constants/items.h @@ -972,8 +972,9 @@ #define ITEM_BLACK_AUGURITE 795 #define ITEM_LINKING_CORD 796 #define ITEM_PEAT_BLOCK 797 +#define ITEM_BERSERK_GENE 798 -#define ITEMS_COUNT 798 +#define ITEMS_COUNT 799 #define ITEM_FIELD_ARROW ITEMS_COUNT // A special item id associated with "Cancel"/"Exit" etc. in a list of items or decorations diff --git a/include/graphics.h b/include/graphics.h index 76f6e5d7cff5..ad23dc67c8bd 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -8878,6 +8878,8 @@ extern const u32 gItemIcon_GriseousCore[]; extern const u32 gItemIconPalette_GriseousCore[]; extern const u32 gItemIcon_LustrousGlobe[]; extern const u32 gItemIconPalette_LustrousGlobe[]; +extern const u32 gItemIcon_BerserkGene[]; +extern const u32 gItemIconPalette_BerserkGene[]; extern const u32 gItemIcon_ReturnToFieldArrow[]; extern const u32 gItemIconPalette_ReturnToFieldArrow[]; diff --git a/src/battle_main.c b/src/battle_main.c index c43a2dc3b9f8..dec210096172 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -3227,7 +3227,7 @@ void SwitchInClearSetData(void) gStatuses3[gActiveBattler] &= (STATUS3_LEECHSEED_BATTLER | STATUS3_LEECHSEED | STATUS3_ALWAYS_HITS | STATUS3_PERISH_SONG | STATUS3_ROOTED | STATUS3_GASTRO_ACID | STATUS3_EMBARGO | STATUS3_TELEKINESIS | STATUS3_MAGNET_RISE | STATUS3_HEAL_BLOCK | STATUS3_AQUA_RING | STATUS3_POWER_TRICK); - gStatuses4[gActiveBattler] &= (STATUS4_MUD_SPORT | STATUS4_WATER_SPORT); + gStatuses4[gActiveBattler] &= (STATUS4_MUD_SPORT | STATUS4_WATER_SPORT | STATUS4_INFINITE_CONFUSION); for (i = 0; i < gBattlersCount; i++) { if (GetBattlerSide(gActiveBattler) != GetBattlerSide(i) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 3632095963dd..7195892ffc76 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -16583,6 +16583,8 @@ void BS_ItemCureStatus(void) { if (GetItemStatus1Mask(gLastUsedItem) & STATUS1_SLEEP) gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_NIGHTMARE; + if (GetItemStatus2Mask(gLastUsedItem) & STATUS2_CONFUSION) + gStatuses4[gBattlerAttacker] &= ~STATUS4_INFINITE_CONFUSION; PREPARE_SPECIES_BUFFER(gBattleTextBuff1, GetMonData(&party[gBattleStruct->itemPartyIndex[gBattlerAttacker]], MON_DATA_SPECIES)); gBattlescriptCurrInstr = cmd->nextInstr; diff --git a/src/battle_util.c b/src/battle_util.c index cbe7629ee249..f6a9c642bf32 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -64,6 +64,7 @@ static void SetRandomMultiHitCounter(); static u32 GetBattlerItemHoldEffectParam(u8 battlerId, u16 item); static u16 GetInverseTypeMultiplier(u16 multiplier); static u16 GetSupremeOverlordModifier(u8 battlerId); +static bool8 CanBeInfinitelyConfused(u8 battlerId); extern const u8 *const gBattleScriptsForMoveEffects[]; extern const u8 *const gBattlescriptsForRunningByItem[]; @@ -3526,7 +3527,8 @@ u8 AtkCanceller_UnableToUseMove(void) case CANCELLER_CONFUSED: // confusion if (gBattleMons[gBattlerAttacker].status2 & STATUS2_CONFUSION) { - gBattleMons[gBattlerAttacker].status2 -= STATUS2_CONFUSION_TURN(1); + if (!(gStatuses4[gBattlerAttacker] & STATUS4_INFINITE_CONFUSION)) + gBattleMons[gBattlerAttacker].status2 -= STATUS2_CONFUSION_TURN(1); if (gBattleMons[gBattlerAttacker].status2 & STATUS2_CONFUSION) { // confusion dmg @@ -5968,7 +5970,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move gBattlescriptCurrInstr = BattleScript_AbilityCuredStatus; break; case 2: // get rid of confusion - gBattleMons[battler].status2 &= ~STATUS2_CONFUSION; + RemoveConfusionStatus(battler); BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_AbilityCuredStatus; break; @@ -6906,7 +6908,7 @@ static u8 ItemEffectMoveEnd(u32 battlerId, u16 holdEffect) case HOLD_EFFECT_CURE_CONFUSION: if (gBattleMons[battlerId].status2 & STATUS2_CONFUSION && !UnnerveOn(battlerId, gLastUsedItem)) { - gBattleMons[battlerId].status2 &= ~STATUS2_CONFUSION; + RemoveConfusionStatus(battlerId); BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_BerryCureConfusionRet; effect = ITEM_EFFECT_OTHER; @@ -6947,7 +6949,7 @@ static u8 ItemEffectMoveEnd(u32 battlerId, u16 holdEffect) StringCopy(gBattleTextBuff1, gStatusConditionString_ConfusionJpn); gBattleMons[battlerId].status1 = 0; - gBattleMons[battlerId].status2 &= ~STATUS2_CONFUSION; + RemoveConfusionStatus(battlerId); BattleScriptPushCursor(); gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_CURED_PROBLEM; gBattlescriptCurrInstr = BattleScript_BerryCureChosenStatusRet; @@ -6985,6 +6987,21 @@ static u8 ItemEffectMoveEnd(u32 battlerId, u16 holdEffect) effect = ITEM_EFFECT_OTHER; } break; + case HOLD_EFFECT_BERSERK_GENE: + BufferStatChange(battlerId, STAT_ATK, STRINGID_STATROSE); + gEffectBattler = battlerId; + if (CanBeInfinitelyConfused(gEffectBattler)) + { + gStatuses4[gEffectBattler] |= STATUS4_INFINITE_CONFUSION; + } + SET_STATCHANGER(STAT_ATK, 2, FALSE); + + gBattleScripting.animArg1 = 14 + STAT_ATK; + gBattleScripting.animArg2 = 0; + + BattleScriptPushCursorAndCallback(BattleScript_BerserkGeneRet); + effect = ITEM_STATS_CHANGE; + break; } return effect; @@ -7163,7 +7180,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn) else gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_NORMALIZED_STATUS; gBattleMons[battlerId].status1 = 0; - gBattleMons[battlerId].status2 &= ~STATUS2_CONFUSION; + RemoveConfusionStatus(battlerId); BattleScriptExecute(BattleScript_BerryCureChosenStatusEnd2); effect = ITEM_STATUS_CHANGE; } @@ -7224,6 +7241,21 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn) } } break; + case HOLD_EFFECT_BERSERK_GENE: + BufferStatChange(battlerId, STAT_ATK, STRINGID_STATROSE); + gEffectBattler = battlerId; + if (CanBeInfinitelyConfused(gEffectBattler)) + { + gStatuses4[gEffectBattler] |= STATUS4_INFINITE_CONFUSION; + } + SET_STATCHANGER(STAT_ATK, 2, FALSE); + + gBattleScripting.animArg1 = 14 + STAT_ATK; + gBattleScripting.animArg2 = 0; + + BattleScriptPushCursorAndCallback(BattleScript_BerserkGeneRet); + effect = ITEM_STATS_CHANGE; + break; } if (effect != 0) { @@ -7444,7 +7476,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn) case HOLD_EFFECT_CURE_CONFUSION: if (gBattleMons[battlerId].status2 & STATUS2_CONFUSION && !UnnerveOn(battlerId, gLastUsedItem)) { - gBattleMons[battlerId].status2 &= ~STATUS2_CONFUSION; + RemoveConfusionStatus(battlerId); BattleScriptExecute(BattleScript_BerryCureConfusionEnd2); effect = ITEM_EFFECT_OTHER; } @@ -7489,7 +7521,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn) else gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_NORMALIZED_STATUS; gBattleMons[battlerId].status1 = 0; - gBattleMons[battlerId].status2 &= ~STATUS2_CONFUSION; + RemoveConfusionStatus(battlerId); BattleScriptExecute(BattleScript_BerryCureChosenStatusEnd2); effect = ITEM_STATUS_CHANGE; } @@ -7507,6 +7539,21 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn) if (!moveTurn) effect = TrySetMicleBerry(battlerId, gLastUsedItem, TRUE); break; + case HOLD_EFFECT_BERSERK_GENE: + BufferStatChange(battlerId, STAT_ATK, STRINGID_STATROSE); + gEffectBattler = battlerId; + if (CanBeInfinitelyConfused(gEffectBattler)) + { + gStatuses4[gEffectBattler] |= STATUS4_INFINITE_CONFUSION; + } + SET_STATCHANGER(STAT_ATK, 2, FALSE); + + gBattleScripting.animArg1 = 14 + STAT_ATK; + gBattleScripting.animArg2 = 0; + + BattleScriptPushCursorAndCallback(BattleScript_BerserkGeneRet); + effect = ITEM_STATS_CHANGE; + break; } if (effect != 0) @@ -10870,3 +10917,21 @@ static void SetRandomMultiHitCounter() gMultiHitCounter = 5 - (Random() & 1); } } + +void RemoveConfusionStatus(u8 battlerId) +{ + gBattleMons[battlerId].status2 &= ~STATUS2_CONFUSION; + gStatuses4[battlerId] &= ~STATUS4_INFINITE_CONFUSION; +} + +static bool8 CanBeInfinitelyConfused(u8 battlerId) +{ + if (gBattleMons[battlerId].ability == ABILITY_OWN_TEMPO + || IsBattlerTerrainAffected(battlerId, STATUS_FIELD_MISTY_TERRAIN) + || gSideStatuses[GetBattlerSide(battlerId)] & SIDE_STATUS_SAFEGUARD) + { + return FALSE; + } + return TRUE; +} + diff --git a/src/data/graphics/items.h b/src/data/graphics/items.h index 1e60357b3e8c..9ef79b2c9256 100644 --- a/src/data/graphics/items.h +++ b/src/data/graphics/items.h @@ -1998,3 +1998,6 @@ const u32 gItemIconPalette_GriseousCore[] = INCBIN_U32("graphics/items/icon_pale const u32 gItemIcon_LustrousGlobe[] = INCBIN_U32("graphics/items/icons/lustrous_globe.4bpp.lz"); const u32 gItemIconPalette_LustrousGlobe[] = INCBIN_U32("graphics/items/icon_palettes/lustrous_globe.gbapal.lz"); + +const u32 gItemIcon_BerserkGene[] = INCBIN_U32("graphics/items/icons/berserk_gene.4bpp.lz"); +const u32 gItemIconPalette_BerserkGene[] = INCBIN_U32("graphics/items/icon_palettes/berserk_gene.gbapal.lz"); diff --git a/src/data/item_icon_table.h b/src/data/item_icon_table.h index f220bd819c38..05a87828120d 100644 --- a/src/data/item_icon_table.h +++ b/src/data/item_icon_table.h @@ -843,6 +843,7 @@ const u32 *const gItemIconTable[ITEMS_COUNT + 1][2] = [ITEM_BLACK_AUGURITE] = {gItemIcon_BlackAugurite, gItemIconPalette_BlackAugurite}, [ITEM_LINKING_CORD] = {gItemIcon_LinkingCord, gItemIconPalette_LinkingCord}, [ITEM_PEAT_BLOCK] = {gItemIcon_PeatBlock, gItemIconPalette_PeatBlock}, + [ITEM_BERSERK_GENE] = {gItemIcon_BerserkGene, gItemIconPalette_BerserkGene}, // Return to field arrow [ITEMS_COUNT] = {gItemIcon_ReturnToFieldArrow, gItemIconPalette_ReturnToFieldArrow}, }; diff --git a/src/data/items.h b/src/data/items.h index 84436be55b40..67c5b477f573 100644 --- a/src/data/items.h +++ b/src/data/items.h @@ -10340,4 +10340,17 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone, .flingPower = 30, }, + + [ITEM_BERSERK_GENE] = + { + .name = _("Berserk Gene"), + .itemId = ITEM_BERSERK_GENE, + .price = 20, + .holdEffect = HOLD_EFFECT_BERSERK_GENE, + .description = sBerserkGene, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 10, + }, }; diff --git a/src/data/text/item_descriptions.h b/src/data/text/item_descriptions.h index 5dc870038ad7..dddf8552f5e9 100644 --- a/src/data/text/item_descriptions.h +++ b/src/data/text/item_descriptions.h @@ -3907,3 +3907,8 @@ static const u8 sLustrousGlobeDesc[] = _( "A large, glowing gem\n" "that lets Palkia\n" "change form."); + +static const u8 sBerserkGene[] = _( + "Sharply boosts\n" + "Attack, but causes\n" + "lasting confusion."); diff --git a/test/hold_effect_berserk_gene.c b/test/hold_effect_berserk_gene.c new file mode 100644 index 000000000000..361d14861158 --- /dev/null +++ b/test/hold_effect_berserk_gene.c @@ -0,0 +1,187 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gItems[ITEM_BERSERK_GENE].holdEffect == HOLD_EFFECT_BERSERK_GENE); +} + +SINGLE_BATTLE_TEST("Berserk Gene sharply raises attack at the start of battle", s16 damage) +{ + u16 useItem; + PARAMETRIZE { useItem = FALSE; } + PARAMETRIZE { useItem = TRUE; } + if (useItem) PASSES_RANDOMLY(66, 100, RNG_CONFUSION); + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { if (useItem) Item(ITEM_BERSERK_GENE); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { + MOVE(player, MOVE_TACKLE); + } + } SCENE { + if (useItem) + { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Using Berserk Gene, the Attack of Wobbuffet sharply rose!"); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, player); + MESSAGE("Wobbuffet became confused!"); + } + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(2.0), results[1].damage); + } +} + +SINGLE_BATTLE_TEST("Berserk Gene activates on switch in", s16 damage) +{ + u16 useItem; + PARAMETRIZE { useItem = FALSE; } + PARAMETRIZE { useItem = TRUE; } + if (useItem) PASSES_RANDOMLY(66, 100, RNG_CONFUSION); + GIVEN { + PLAYER(SPECIES_WYNAUT); + PLAYER(SPECIES_WOBBUFFET) { if (useItem) Item(ITEM_BERSERK_GENE); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { + SWITCH(player, 1); + } TURN { + MOVE(player, MOVE_TACKLE); + } + } SCENE { + if (useItem) + { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Using Berserk Gene, the Attack of Wobbuffet sharply rose!"); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, player); + MESSAGE("Wobbuffet became confused!"); + } + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(2.0), results[1].damage); + } +} + +SINGLE_BATTLE_TEST("Berserk Gene does not confuse a Pokemon with Own Tempo but still raises attack sharply", s16 damage) +{ + u16 useItem; + PARAMETRIZE { useItem = FALSE; } + PARAMETRIZE { useItem = TRUE; } + GIVEN { + PLAYER(SPECIES_SLOWBRO) { Ability(ABILITY_OWN_TEMPO); if (useItem) Item(ITEM_BERSERK_GENE); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { + MOVE(player, MOVE_TACKLE); + } + } SCENE { + if (useItem) + { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Using Berserk Gene, the Attack of Slowbro sharply rose!"); + ABILITY_POPUP(player, ABILITY_OWN_TEMPO); + MESSAGE("Slowbro's Own Tempo prevents confusion!"); + } + HP_BAR(opponent, captureDamage: &results[i].damage); + NONE_OF + { + MESSAGE("Slowbro became confused!"); + } + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(2.0), results[1].damage); + } +} + +SINGLE_BATTLE_TEST("Berserk Gene does not confuse on Misty Terrain but still raises attack sharply") +{ + GIVEN { + ASSUME(P_GEN_7_POKEMON == TRUE); + PLAYER(SPECIES_TAPU_FINI) { Ability(ABILITY_MISTY_SURGE); Item(ITEM_BERSERK_GENE); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { + MOVE(player, MOVE_TACKLE); + } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Using Berserk Gene, the Attack of Tapu Fini sharply rose!"); + NONE_OF + { + MESSAGE("Tapu Fini became confused!"); + } + } +} + +SINGLE_BATTLE_TEST("Berserk Gene does not confuse when Safeguard is active") +{ + GIVEN { + PLAYER(SPECIES_WYNAUT); + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_BERSERK_GENE); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_SAFEGUARD); } + TURN { SWITCH(player, 1); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Using Berserk Gene, the Attack of Wobbuffet sharply rose!"); + MESSAGE("Wobbuffet's party is protected by SAFEGUARD!"); + NONE_OF + { + MESSAGE("Wobbuffet became confused!"); + } + } +} + +SINGLE_BATTLE_TEST("Berserk Gene causes confusion for more than 5 turns") // how else would be check for infinite? +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_BERSERK_GENE); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN {} + TURN {} + TURN {} + TURN {} + TURN {} + TURN {} + } SCENE { + NONE_OF + { + MESSAGE("Wobbuffet snapped out of confusion!"); + } + } +} + +SINGLE_BATTLE_TEST("Berserk Gene causes infinite confusion") // check if bit is set +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_BERSERK_GENE); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN {} + } SCENE { + } THEN { + EXPECT(gStatuses4[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)] & STATUS4_INFINITE_CONFUSION); + } +} + +SINGLE_BATTLE_TEST("Berserk Gene causes confusion timer to not tick down", u32 status2) +{ + u32 turns; + PARAMETRIZE { turns = 1; } + PARAMETRIZE { turns = 2; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_BERSERK_GENE); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + u32 count; + for (count = 0; count < turns; count++) { + TURN {} + } + } THEN { + results[i].status2 = player->status2; + } FINALLY { + EXPECT_EQ(results[0].status2, results[1].status2); + } +} From d3e9a689fdf1a42519f0cf77777bde189758232f Mon Sep 17 00:00:00 2001 From: CallmeEchoo Date: Tue, 25 Apr 2023 21:26:19 +0200 Subject: [PATCH 316/428] restore pp item tests --- test/item_effect_restore_pp.c | 59 +++++++++++++++++++++++++++++++---- 1 file changed, 53 insertions(+), 6 deletions(-) diff --git a/test/item_effect_restore_pp.c b/test/item_effect_restore_pp.c index 234d4ae4e50b..f21593566f2b 100644 --- a/test/item_effect_restore_pp.c +++ b/test/item_effect_restore_pp.c @@ -1,19 +1,66 @@ #include "global.h" #include "test_battle.h" -SINGLE_BATTLE_TEST("Ether restores the PP of one of a battler's moves") +SINGLE_BATTLE_TEST("Restore PP: Ether restores the PP of one of a battler's moves by 10 ") { GIVEN { ASSUME(gItems[ITEM_ETHER].battleUsage == EFFECT_ITEM_RESTORE_PP); ASSUME(gItems[ITEM_ETHER].type == ITEM_USE_PARTY_MENU_MOVES); - PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_TACKLE, MOVE_CONFUSION); } + PLAYER(SPECIES_WOBBUFFET) { MovesWithPP({MOVE_TACKLE, 0}, {MOVE_CONFUSION, 20}); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_TACKLE); } - TURN { MOVE(player, MOVE_CONFUSION); } TURN { USE_ITEM(player, ITEM_ETHER, partyIndex: 0, move: MOVE_TACKLE); } - } FINALLY { + } THEN { + EXPECT_EQ(player->pp[0], 10); + EXPECT_EQ(player->pp[1], 20); + } +} + +SINGLE_BATTLE_TEST("Restore PP: Max Ether restores the PP of one of a battler's moves fully") +{ + GIVEN { + ASSUME(gItems[ITEM_MAX_ETHER].battleUsage == EFFECT_ITEM_RESTORE_PP); + ASSUME(gItems[ITEM_MAX_ETHER].type == ITEM_USE_PARTY_MENU_MOVES); + PLAYER(SPECIES_WOBBUFFET) { MovesWithPP({MOVE_TACKLE, 0}, {MOVE_CONFUSION, 20}); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { USE_ITEM(player, ITEM_MAX_ETHER, partyIndex: 0, move: MOVE_TACKLE); } + } THEN { + EXPECT_EQ(player->pp[0], 35); + EXPECT_EQ(player->pp[1], 20); + } +} + +SINGLE_BATTLE_TEST("Restore PP: Elixir restores the PP of all of a battler's moves by 10") +{ + GIVEN { + ASSUME(gItems[ITEM_ELIXIR].battleUsage == EFFECT_ITEM_RESTORE_PP); + ASSUME(gItems[ITEM_ELIXIR].type == ITEM_USE_PARTY_MENU); + PLAYER(SPECIES_WOBBUFFET) { MovesWithPP({MOVE_TACKLE, 0}, {MOVE_CONFUSION, 0}, {MOVE_SCRATCH, 0}, {MOVE_GROWL, 0}); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { USE_ITEM(player, ITEM_ELIXIR, partyIndex: 0); } + } THEN { + EXPECT_EQ(player->pp[0], 10); + EXPECT_EQ(player->pp[1], 10); + EXPECT_EQ(player->pp[2], 10); + EXPECT_EQ(player->pp[3], 10); + } +} + +SINGLE_BATTLE_TEST("Restore PP: Max Elixir restores the PP of all of a battler's moves fully") +{ + GIVEN { + ASSUME(gItems[ITEM_MAX_ELIXIR].battleUsage == EFFECT_ITEM_RESTORE_PP); + ASSUME(gItems[ITEM_MAX_ELIXIR].type == ITEM_USE_PARTY_MENU); + PLAYER(SPECIES_WOBBUFFET) { MovesWithPP({MOVE_TACKLE, 0}, {MOVE_CONFUSION, 0}, {MOVE_SCRATCH, 0}, {MOVE_GROWL, 0}); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { USE_ITEM(player, ITEM_MAX_ELIXIR, partyIndex: 0); } + } THEN { EXPECT_EQ(player->pp[0], 35); - EXPECT_EQ(player->pp[1], 24); + EXPECT_EQ(player->pp[1], 25); + EXPECT_EQ(player->pp[2], 35); + EXPECT_EQ(player->pp[3], 40); } } From 0315f704c1639cc1c37a4fa816797a15bef63d2c Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Tue, 25 Apr 2023 23:01:58 +0200 Subject: [PATCH 317/428] Fix thawing being triggered by every move --- src/battle_util.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_util.c b/src/battle_util.c index 903edc1ac6e7..98b0b6744fa4 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -3650,7 +3650,7 @@ u8 AtkCanceller_UnableToUseMove(void) } effect = 2; } - if (gBattleMons[gBattlerAttacker].status1 & STATUS1_FROSTBITE) + if (gBattleMons[gBattlerAttacker].status1 & STATUS1_FROSTBITE && (gBattleMoves[gCurrentMove].flags & FLAG_THAW_USER)) { if (!(gBattleMoves[gCurrentMove].effect == EFFECT_BURN_UP && !IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_FIRE))) { From 9f2589e1595cd8bf9f40a734bfc13b195b03f967 Mon Sep 17 00:00:00 2001 From: CallmeEchoo Date: Tue, 25 Apr 2023 23:06:07 +0200 Subject: [PATCH 318/428] better usage of THEN over FINALLY --- test/item_effect_cure_status.c | 36 ++++++++++++------------- test/item_effect_heal_and_cure_status.c | 4 +-- test/item_effect_revive.c | 26 +++--------------- 3 files changed, 24 insertions(+), 42 deletions(-) diff --git a/test/item_effect_cure_status.c b/test/item_effect_cure_status.c index 4d4cbda2ee0e..949f60f0e487 100644 --- a/test/item_effect_cure_status.c +++ b/test/item_effect_cure_status.c @@ -11,7 +11,7 @@ SINGLE_BATTLE_TEST("Cure Status: Paralyze Heal heals a battler from being paraly TURN { USE_ITEM(player, ITEM_PARALYZE_HEAL, partyIndex: 0); } } SCENE { MESSAGE("Wobbuffet had its status healed!"); - } FINALLY { + } THEN { EXPECT_EQ(player->status1, STATUS1_NONE); } } @@ -26,7 +26,7 @@ SINGLE_BATTLE_TEST("Cure Status: Antidote heals a battler from being poisoned") TURN { USE_ITEM(player, ITEM_ANTIDOTE, partyIndex: 0); } } SCENE { MESSAGE("Wobbuffet had its status healed!"); - } FINALLY { + } THEN { EXPECT_EQ(player->status1, STATUS1_NONE); } } @@ -41,7 +41,7 @@ SINGLE_BATTLE_TEST("Cure Status: Antidote heals a battler from being badly poiso TURN { USE_ITEM(player, ITEM_ANTIDOTE, partyIndex: 0); } } SCENE { MESSAGE("Wobbuffet had its status healed!"); - } FINALLY { + } THEN { EXPECT_EQ(player->status1, STATUS1_NONE); } } @@ -56,7 +56,7 @@ SINGLE_BATTLE_TEST("Cure Status: Awakening heals a battler from being asleep") TURN { USE_ITEM(player, ITEM_AWAKENING, partyIndex: 0); } } SCENE { MESSAGE("Wobbuffet had its status healed!"); - } FINALLY { + } THEN { EXPECT_EQ(player->status1, STATUS1_NONE); } } @@ -71,7 +71,7 @@ SINGLE_BATTLE_TEST("Cure Status: Burn Heal heals a battler from being burned") TURN { USE_ITEM(player, ITEM_BURN_HEAL, partyIndex: 0); } } SCENE { MESSAGE("Wobbuffet had its status healed!"); - } FINALLY { + } THEN { EXPECT_EQ(player->status1, STATUS1_NONE); } } @@ -86,7 +86,7 @@ SINGLE_BATTLE_TEST("Cure Status: Ice Heal heals a battler from being paralyzed") TURN { USE_ITEM(player, ITEM_ICE_HEAL, partyIndex: 0); } } SCENE { MESSAGE("Wobbuffet had its status healed!"); - } FINALLY { + } THEN { EXPECT_EQ(player->status1, STATUS1_NONE); } } @@ -108,7 +108,7 @@ SINGLE_BATTLE_TEST("Cure Status: Full Heal heals a battler from any primary stat TURN { USE_ITEM(player, ITEM_FULL_HEAL, partyIndex: 0); } } SCENE { MESSAGE("Wobbuffet had its status healed!"); - } FINALLY { + } THEN { EXPECT_EQ(player->status1, STATUS1_NONE); } } @@ -130,7 +130,7 @@ SINGLE_BATTLE_TEST("Cure Status: Heal Powder heals a battler from any primary st TURN { USE_ITEM(player, ITEM_HEAL_POWDER, partyIndex: 0); } } SCENE { MESSAGE("Wobbuffet had its status healed!"); - } FINALLY { + } THEN { EXPECT_EQ(player->status1, STATUS1_NONE); } } @@ -152,7 +152,7 @@ SINGLE_BATTLE_TEST("Cure Status: Pewter Crunchies heals a battler from any prima TURN { USE_ITEM(player, ITEM_PEWTER_CRUNCHIES, partyIndex: 0); } } SCENE { MESSAGE("Wobbuffet had its status healed!"); - } FINALLY { + } THEN { EXPECT_EQ(player->status1, STATUS1_NONE); } } @@ -174,7 +174,7 @@ SINGLE_BATTLE_TEST("Cure Status: Lava Cookies heals a battler from any primary s TURN { USE_ITEM(player, ITEM_LAVA_COOKIE, partyIndex: 0); } } SCENE { MESSAGE("Wobbuffet had its status healed!"); - } FINALLY { + } THEN { EXPECT_EQ(player->status1, STATUS1_NONE); } } @@ -196,7 +196,7 @@ SINGLE_BATTLE_TEST("Cure Status: Rage Candy Bar heals a battler from any primary TURN { USE_ITEM(player, ITEM_RAGE_CANDY_BAR, partyIndex: 0); } } SCENE { MESSAGE("Wobbuffet had its status healed!"); - } FINALLY { + } THEN { EXPECT_EQ(player->status1, STATUS1_NONE); } } @@ -218,7 +218,7 @@ SINGLE_BATTLE_TEST("Cure Status: Old Gateu heals a battler from any primary stat TURN { USE_ITEM(player, ITEM_OLD_GATEAU, partyIndex: 0); } } SCENE { MESSAGE("Wobbuffet had its status healed!"); - } FINALLY { + } THEN { EXPECT_EQ(player->status1, STATUS1_NONE); } } @@ -240,7 +240,7 @@ SINGLE_BATTLE_TEST("Cure Status: Casteliacone heals a battler from any primary s TURN { USE_ITEM(player, ITEM_CASTELIACONE, partyIndex: 0); } } SCENE { MESSAGE("Wobbuffet had its status healed!"); - } FINALLY { + } THEN { EXPECT_EQ(player->status1, STATUS1_NONE); } } @@ -262,7 +262,7 @@ SINGLE_BATTLE_TEST("Cure Status: Lumiose Galette heals a battler from any primar TURN { USE_ITEM(player, ITEM_LUMIOSE_GALETTE, partyIndex: 0); } } SCENE { MESSAGE("Wobbuffet had its status healed!");; - } FINALLY { + } THEN { EXPECT_EQ(player->status1, STATUS1_NONE); } } @@ -284,7 +284,7 @@ SINGLE_BATTLE_TEST("Cure Status: Shalour Sable heals a battler from any primary TURN { USE_ITEM(player, ITEM_SHALOUR_SABLE, partyIndex: 0); } } SCENE { MESSAGE("Wobbuffet had its status healed!"); - } FINALLY { + } THEN { EXPECT_EQ(player->status1, STATUS1_NONE); } } @@ -306,12 +306,12 @@ SINGLE_BATTLE_TEST("Cure Status: Big Malasada heals a battler from any primary s TURN { USE_ITEM(player, ITEM_BIG_MALASADA, partyIndex: 0); } } SCENE { MESSAGE("Wobbuffet had its status healed!"); - } FINALLY { + } THEN { EXPECT_EQ(player->status1, STATUS1_NONE); } } -SINGLE_BATTLE_TEST("Cure Status: Full Heal and local specialties heal a battler from being confused") +SINGLE_BATTLE_TEST("Cure Status: Full Heal, Heal Powder and Local Specialties heal a battler from being confused") { u16 item; PARAMETRIZE { item = ITEM_FULL_HEAL; } @@ -333,7 +333,7 @@ SINGLE_BATTLE_TEST("Cure Status: Full Heal and local specialties heal a battler TURN { USE_ITEM(player, item, partyIndex: 0); } } SCENE { MESSAGE("Wobbuffet had its status healed!"); - } FINALLY { + } THEN { EXPECT_EQ(player->status2, STATUS1_NONE); // because we dont have STATUS2_NONE } } diff --git a/test/item_effect_heal_and_cure_status.c b/test/item_effect_heal_and_cure_status.c index 6e264d25acba..17ac5be96945 100644 --- a/test/item_effect_heal_and_cure_status.c +++ b/test/item_effect_heal_and_cure_status.c @@ -18,7 +18,7 @@ SINGLE_BATTLE_TEST("Full Restore restores a battler's HP and cures any primary s TURN{ USE_ITEM(player, ITEM_FULL_RESTORE, partyIndex: 0); } } SCENE { MESSAGE("Wobbuffet had its HP restored!"); - } FINALLY { + } THEN { EXPECT_EQ(player->hp, player->maxHP); EXPECT_EQ(player->status1, STATUS1_NONE); } @@ -37,7 +37,7 @@ SINGLE_BATTLE_TEST("Full Restore restores a battler's HP and cures confusion") } SCENE { MESSAGE("Wobbuffet had its HP restored!"); NONE_OF { MESSAGE("Wobbuffet is confused!"); } - } FINALLY { + } THEN { EXPECT_EQ(player->hp, player->maxHP); } } diff --git a/test/item_effect_revive.c b/test/item_effect_revive.c index 695361892e9c..3c6995176e14 100644 --- a/test/item_effect_revive.c +++ b/test/item_effect_revive.c @@ -3,24 +3,6 @@ #define MAX_HP 200 -SINGLE_BATTLE_TEST("Revive: Super Potion restores a fainted battler's HP to half") -{ - GIVEN { - ASSUME(gItems[ITEM_SUPER_POTION].battleUsage == EFFECT_ITEM_RESTORE_HP); - PLAYER(SPECIES_WYNAUT) { HP(1); MaxHP(MAX_HP); } - PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { MOVE(opponent, MOVE_TACKLE); SEND_OUT(player, 1); } - TURN { USE_ITEM(player, ITEM_SUPER_POTION, partyIndex: 0); } - TURN { SWITCH(player, 0); } - } SCENE { - MESSAGE("Wynaut had its HP restored!"); - } FINALLY { - EXPECT_EQ(player->hp, 60); - } -} - SINGLE_BATTLE_TEST("Revive: Revive restores a fainted battler's HP to half") { GIVEN { @@ -34,7 +16,7 @@ SINGLE_BATTLE_TEST("Revive: Revive restores a fainted battler's HP to half") TURN { SWITCH(player, 0); } } SCENE { MESSAGE("Wynaut had its HP restored!"); - } FINALLY { + } THEN { EXPECT_EQ(player->hp, MAX_HP/2); } } @@ -52,7 +34,7 @@ SINGLE_BATTLE_TEST("Revive: Max Revive restores a fainted battler's HP fully") TURN { SWITCH(player, 0); } } SCENE { MESSAGE("Wynaut had its HP restored!"); - } FINALLY { + } THEN { EXPECT_EQ(player->hp, MAX_HP); } } @@ -70,7 +52,7 @@ SINGLE_BATTLE_TEST("Revive: Revival Herb restores a fainted battler's HP fully") TURN { SWITCH(player, 0); } } SCENE { MESSAGE("Wynaut had its HP restored!"); - } FINALLY { + } THEN { EXPECT_EQ(player->hp, MAX_HP); } } @@ -88,7 +70,7 @@ SINGLE_BATTLE_TEST("Revive: Max Honey restores a fainted battler's HP fully") TURN { SWITCH(player, 0); } } SCENE { MESSAGE("Wynaut had its HP restored!"); - } FINALLY { + } THEN { EXPECT_EQ(player->hp, MAX_HP); } } From a2809acfd1d6818acb6d39c5d8f1520746201c20 Mon Sep 17 00:00:00 2001 From: CallmeEchoo Date: Wed, 26 Apr 2023 01:02:47 +0200 Subject: [PATCH 319/428] fix gChosenMovePos not being assigned correctly for battle items thanks griffin <3 Co-Authored-By: Martin Griffin <838573+mrgriffin@users.noreply.github.com> --- include/recorded_battle.h | 1 + src/battle_controller_recorded_opponent.c | 1 + src/battle_controller_recorded_player.c | 1 + src/battle_script_commands.c | 10 +++++++--- test/test_runner_battle.c | 8 ++------ 5 files changed, 12 insertions(+), 9 deletions(-) diff --git a/include/recorded_battle.h b/include/recorded_battle.h index ea66096d7f24..02bbe8fc3f86 100644 --- a/include/recorded_battle.h +++ b/include/recorded_battle.h @@ -46,6 +46,7 @@ enum RECORDED_BATTLE_PALACE_ACTION, RECORDED_ITEM_ID, RECORDED_ITEM_TARGET, + RECORDED_ITEM_MOVE, }; extern u32 gRecordedBattleRngSeed; diff --git a/src/battle_controller_recorded_opponent.c b/src/battle_controller_recorded_opponent.c index bb41b42d65d9..8255abcab09a 100644 --- a/src/battle_controller_recorded_opponent.c +++ b/src/battle_controller_recorded_opponent.c @@ -1442,6 +1442,7 @@ static void RecordedOpponentHandleChooseItem(void) u8 byte2 = RecordedBattle_GetBattlerAction(RECORDED_ITEM_ID, gActiveBattler); gBattleStruct->chosenItem[gActiveBattler] = (byte1 << 8) | byte2; gBattleStruct->itemPartyIndex[gActiveBattler] = RecordedBattle_GetBattlerAction(RECORDED_ITEM_TARGET, gActiveBattler); + gChosenMovePos = RecordedBattle_GetBattlerAction(RECORDED_ITEM_MOVE, gActiveBattler); BtlController_EmitOneReturnValue(BUFFER_B, gBattleStruct->chosenItem[gActiveBattler]); RecordedOpponentBufferExecCompleted(); } diff --git a/src/battle_controller_recorded_player.c b/src/battle_controller_recorded_player.c index efbd60f18bfd..8350e8594e42 100644 --- a/src/battle_controller_recorded_player.c +++ b/src/battle_controller_recorded_player.c @@ -1466,6 +1466,7 @@ static void RecordedPlayerHandleChooseItem(void) u8 byte2 = RecordedBattle_GetBattlerAction(RECORDED_ITEM_ID, gActiveBattler); gBattleStruct->chosenItem[gActiveBattler] = (byte1 << 8) | byte2; gBattleStruct->itemPartyIndex[gActiveBattler] = RecordedBattle_GetBattlerAction(RECORDED_ITEM_TARGET, gActiveBattler); + gChosenMovePos = RecordedBattle_GetBattlerAction(RECORDED_ITEM_MOVE, gActiveBattler); BtlController_EmitOneReturnValue(BUFFER_B, gBattleStruct->chosenItem[gActiveBattler]); RecordedPlayerBufferExecCompleted(); } diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 07669635e38e..31ef4cea75b6 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -16563,8 +16563,7 @@ void BS_ItemIncreaseStat(void) { void BS_ItemRestorePP(void) { NATIVE_ARGS(); const u8 *effect = GetItemEffect(gLastUsedItem); - u32 i, pp, maxPP, moveId; - u32 loopEnd = MAX_MON_MOVES; + u32 i, pp, maxPP, moveId, loopEnd; u32 battlerId = MAX_BATTLERS_COUNT; struct Pokemon *mon = (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) ? &gPlayerParty[gBattleStruct->itemPartyIndex[gBattlerAttacker]] : &gEnemyParty[gBattleStruct->itemPartyIndex[gBattlerAttacker]]; @@ -16574,6 +16573,11 @@ void BS_ItemRestorePP(void) { i = gChosenMovePos; loopEnd = gChosenMovePos + 1; } + else + { + i = 0; + loopEnd = MAX_MON_MOVES; + } // Check if the recipient is an active battler. if (gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[gBattlerAttacker]) @@ -16583,7 +16587,7 @@ void BS_ItemRestorePP(void) { battlerId = BATTLE_PARTNER(gBattlerAttacker); // Heal PP! - for (i = 0; i < loopEnd; i++) + for (; i < loopEnd; i++) { pp = GetMonData(mon, MON_DATA_PP1 + i, NULL); moveId = GetMonData(mon, MON_DATA_MOVE1 + i, NULL); diff --git a/test/test_runner_battle.c b/test/test_runner_battle.c index 75e459e49bb3..f10291262047 100644 --- a/test/test_runner_battle.c +++ b/test/test_runner_battle.c @@ -1554,12 +1554,8 @@ void UseItem(u32 sourceLine, struct BattlePokemon *battler, struct ItemContext c PushBattlerAction(sourceLine, battlerId, RECORDED_ACTION_TYPE, B_ACTION_USE_ITEM); PushBattlerAction(sourceLine, battlerId, RECORDED_ITEM_ID, (ctx.itemId >> 8) & 0xFF); PushBattlerAction(sourceLine, battlerId, RECORDED_ITEM_ID, ctx.itemId & 0xFF); - if (ctx.explicitPartyIndex) - PushBattlerAction(sourceLine, battlerId, RECORDED_ITEM_TARGET, ctx.partyIndex); - else if (ctx.explicitMove) - PushBattlerAction(sourceLine, battlerId, RECORDED_ITEM_TARGET, i); - else - PushBattlerAction(sourceLine, battlerId, RECORDED_ITEM_TARGET, 0); + PushBattlerAction(sourceLine, battlerId, RECORDED_ITEM_TARGET, ctx.partyIndex); + PushBattlerAction(sourceLine, battlerId, RECORDED_ITEM_MOVE, i); DATA.actionBattlers |= 1 << battlerId; } From a5d39155c641da90df709db174961618ebd1b812 Mon Sep 17 00:00:00 2001 From: CallmeEchoo <65783283+CallmeEchoo@users.noreply.github.com> Date: Wed, 26 Apr 2023 14:15:35 +0200 Subject: [PATCH 320/428] add Max Mushroom test --- test/item_effect_increase_stat.c | 121 +++++++++++++++++++++++++++++-- 1 file changed, 113 insertions(+), 8 deletions(-) diff --git a/test/item_effect_increase_stat.c b/test/item_effect_increase_stat.c index 7fcbe7279464..bb5989207ab4 100644 --- a/test/item_effect_increase_stat.c +++ b/test/item_effect_increase_stat.c @@ -1,7 +1,7 @@ #include "global.h" #include "test_battle.h" -SINGLE_BATTLE_TEST("X Attack sharply raises battler's Attack stat", s16 damage) +SINGLE_BATTLE_TEST("Increase Stat: X Attack sharply raises battler's Attack stat", s16 damage) { u16 useItem; PARAMETRIZE { useItem = FALSE; } @@ -24,7 +24,7 @@ SINGLE_BATTLE_TEST("X Attack sharply raises battler's Attack stat", s16 damage) } } -SINGLE_BATTLE_TEST("X Defense sharply raises battler's Defense stat", s16 damage) +SINGLE_BATTLE_TEST("Increase Stat: X Defense sharply raises battler's Defense stat", s16 damage) { u16 useItem; PARAMETRIZE { useItem = FALSE; } @@ -47,7 +47,7 @@ SINGLE_BATTLE_TEST("X Defense sharply raises battler's Defense stat", s16 damage } } -SINGLE_BATTLE_TEST("X Sp. Atk sharply raises battler's Sp. Attack stat", s16 damage) +SINGLE_BATTLE_TEST("Increase Stat: X Sp. Atk sharply raises battler's Sp. Attack stat", s16 damage) { u16 useItem; PARAMETRIZE { useItem = FALSE; } @@ -70,7 +70,7 @@ SINGLE_BATTLE_TEST("X Sp. Atk sharply raises battler's Sp. Attack stat", s16 dam } } -SINGLE_BATTLE_TEST("X Sp. Def sharply raises battler's Sp. Defense stat", s16 damage) +SINGLE_BATTLE_TEST("Increase Stat: X Sp. Def sharply raises battler's Sp. Defense stat", s16 damage) { u16 useItem; PARAMETRIZE { useItem = FALSE; } @@ -93,7 +93,7 @@ SINGLE_BATTLE_TEST("X Sp. Def sharply raises battler's Sp. Defense stat", s16 da } } -SINGLE_BATTLE_TEST("X Speed sharply raises battler's Speed stat", s16 damage) +SINGLE_BATTLE_TEST("Increase Stat: X Speed sharply raises battler's Speed stat", s16 damage) { u16 useItem; PARAMETRIZE { useItem = FALSE; } @@ -106,7 +106,7 @@ SINGLE_BATTLE_TEST("X Speed sharply raises battler's Speed stat", s16 damage) OPPONENT(SPECIES_WOBBUFFET) { Speed(4); }; } else - { + { PLAYER(SPECIES_WOBBUFFET) { Speed(4); }; OPPONENT(SPECIES_WOBBUFFET) { Speed(5); }; } @@ -118,7 +118,7 @@ SINGLE_BATTLE_TEST("X Speed sharply raises battler's Speed stat", s16 damage) { MESSAGE("Wobbuffet used Tackle!"); MESSAGE("Foe Wobbuffet used Tackle!"); - } else + } else { MESSAGE("Foe Wobbuffet used Tackle!"); MESSAGE("Wobbuffet used Tackle!"); @@ -126,7 +126,7 @@ SINGLE_BATTLE_TEST("X Speed sharply raises battler's Speed stat", s16 damage) } } -SINGLE_BATTLE_TEST("X Accuracy sharply raises battler's Accuracy stat", s16 damage) +SINGLE_BATTLE_TEST("Increase Stat: X Accuracy sharply raises battler's Accuracy stat", s16 damage) { ASSUME(gBattleMoves[MOVE_SING].accuracy == 55); @@ -146,3 +146,108 @@ SINGLE_BATTLE_TEST("X Accuracy sharply raises battler's Accuracy stat", s16 dama MESSAGE("Foe Wobbuffet fell asleep!"); } } + +SINGLE_BATTLE_TEST("Increase Stat: Max Mushrooms raises battler's Attack stat", s16 damage) +{ + u16 useItem; + PARAMETRIZE { useItem = FALSE; } + PARAMETRIZE { useItem = TRUE; } + GIVEN { + ASSUME(gItems[ITEM_MAX_MUSHROOMS].battleUsage == EFFECT_ITEM_INCREASE_ALL_STATS); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + if (useItem) TURN { USE_ITEM(player, ITEM_MAX_MUSHROOMS); } + TURN { MOVE(player, MOVE_TACKLE); } + } SCENE { + MESSAGE("Wobbuffet used Tackle!"); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage); + } +} + +SINGLE_BATTLE_TEST("Increase Stat: Max Mushrooms raises battler's Defense stat", s16 damage) +{ + u16 useItem; + PARAMETRIZE { useItem = FALSE; } + PARAMETRIZE { useItem = TRUE; } + GIVEN { + ASSUME(gItems[ITEM_MAX_MUSHROOMS].battleUsage == EFFECT_ITEM_INCREASE_ALL_STATS); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + if (useItem) TURN { USE_ITEM(player, ITEM_MAX_MUSHROOMS); } + TURN { MOVE(opponent, MOVE_TACKLE); } + } SCENE { + MESSAGE("Foe Wobbuffet used Tackle!"); + HP_BAR(player, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.66), results[1].damage); + } +} + +SINGLE_BATTLE_TEST("Increase Stat: Max Mushrooms raises battler's Sp. Attack stat", s16 damage) +{ + u16 useItem; + PARAMETRIZE { useItem = FALSE; } + PARAMETRIZE { useItem = TRUE; } + GIVEN { + ASSUME(gItems[ITEM_MAX_MUSHROOMS].battleUsage == EFFECT_ITEM_INCREASE_ALL_STATS); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + if (useItem) TURN { USE_ITEM(player, ITEM_MAX_MUSHROOMS); } + TURN { MOVE(player, MOVE_DISARMING_VOICE); } + } SCENE { + MESSAGE("Wobbuffet used DisrmngVoice!"); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage); + } +} + +SINGLE_BATTLE_TEST("Increase Stat: Max Mushrooms battler's Sp. Defense stat", s16 damage) +{ + u16 useItem; + PARAMETRIZE { useItem = FALSE; } + PARAMETRIZE { useItem = TRUE; } + GIVEN { + ASSUME(gItems[ITEM_MAX_MUSHROOMS].battleUsage == EFFECT_ITEM_INCREASE_ALL_STATS); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + if (useItem) TURN { USE_ITEM(player, ITEM_MAX_MUSHROOMS); } + TURN { MOVE(opponent, MOVE_DISARMING_VOICE); } + } SCENE { + MESSAGE("Foe Wobbuffet used DisrmngVoice!"); + HP_BAR(player, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.66), results[1].damage); + } +} + +SINGLE_BATTLE_TEST("Increase Stat: Max Mushrooms raises battler's Speed stat", s16 damage) +{ + u16 useItem; + PARAMETRIZE { useItem = FALSE; } + PARAMETRIZE { useItem = TRUE; } + GIVEN { + ASSUME(gItems[ITEM_MAX_MUSHROOMS].battleUsage == EFFECT_ITEM_INCREASE_ALL_STATS); + PLAYER(SPECIES_WOBBUFFET) { Speed(4); }; + OPPONENT(SPECIES_WOBBUFFET) { Speed(5); }; + } WHEN { + if (useItem) TURN { USE_ITEM(player, ITEM_MAX_MUSHROOMS); } + TURN { MOVE(player, MOVE_TACKLE); MOVE(opponent, MOVE_TACKLE); } + } SCENE { + if (useItem) + { + MESSAGE("Wobbuffet used Tackle!"); + MESSAGE("Foe Wobbuffet used Tackle!"); + } else + { + MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("Wobbuffet used Tackle!"); + } + } +} From e83e08f21c2d05c8a844fce17a5da55abb96ccee Mon Sep 17 00:00:00 2001 From: GriffinR Date: Wed, 26 Apr 2023 12:32:43 -0400 Subject: [PATCH 321/428] Add time ranges to UpdateAmbientCry --- src/overworld.c | 37 +++++++++++++++++++++++++------------ 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/src/overworld.c b/src/overworld.c index 70b102fd28fd..3d46fc50056d 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -1260,23 +1260,34 @@ static void PlayAmbientCry(void) PlayCry_NormalNoDucking(sAmbientCrySpecies, pan, volume, CRY_PRIORITY_AMBIENT); } +// States for UpdateAmbientCry +enum { + AMB_CRY_INIT, + AMB_CRY_FIRST, + AMB_CRY_RESET, + AMB_CRY_WAIT, + AMB_CRY_IDLE, +}; + void UpdateAmbientCry(s16 *state, u16 *delayCounter) { u8 i, monsCount, divBy; switch (*state) { - case 0: + case AMB_CRY_INIT: + // This state will be revisited whenever ResetFieldTasksArgs is called (which happens on map transition) if (sAmbientCrySpecies == SPECIES_NONE) - *state = 4; + *state = AMB_CRY_IDLE; else - *state = 1; + *state = AMB_CRY_FIRST; break; - case 1: + case AMB_CRY_FIRST: + // It takes between 1200-3599 frames (~20-60 seconds) to play the first ambient cry after entering a map *delayCounter = (Random() % 2400) + 1200; - *state = 3; + *state = AMB_CRY_WAIT; break; - case 2: + case AMB_CRY_RESET: divBy = 1; monsCount = CalculatePlayerPartyCount(); for (i = 0; i < monsCount; i++) @@ -1288,18 +1299,20 @@ void UpdateAmbientCry(s16 *state, u16 *delayCounter) break; } } + // Ambient cries after the first one take between 1200-2399 frames (~20-40 seconds) + // If the player has a pokemon with the ability Swarm in their party, the time is halved to 600-1199 frames (~10-20 seconds) *delayCounter = ((Random() % 1200) + 1200) / divBy; - *state = 3; + *state = AMB_CRY_WAIT; break; - case 3: - (*delayCounter)--; - if (*delayCounter == 0) + case AMB_CRY_WAIT: + if (--(*delayCounter) == 0) { PlayAmbientCry(); - *state = 2; + *state = AMB_CRY_RESET; } break; - case 4: + case AMB_CRY_IDLE: + // No land/water pokemon on this map break; } } From 32dcea0cdb52a747b552bf3ccac5e598f864444a Mon Sep 17 00:00:00 2001 From: grunt-lucas Date: Wed, 26 Apr 2023 13:08:15 -0600 Subject: [PATCH 322/428] Fix issue with Enamorus Therian cry define order (#2956) --- sound/direct_sound_data.inc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sound/direct_sound_data.inc b/sound/direct_sound_data.inc index 05a1b7145e26..3020a8f1a5a9 100644 --- a/sound/direct_sound_data.inc +++ b/sound/direct_sound_data.inc @@ -4246,6 +4246,10 @@ Cry_ThundurusTherian:: Cry_LandorusTherian:: .incbin "sound/direct_sound_samples/cries/landorus_therian.bin" + .align 2 +Cry_EnamorusTherian:: + .incbin "sound/direct_sound_samples/cries/enamorus_therian.bin" + .align 2 Cry_KyuremWhite:: .incbin "sound/direct_sound_samples/cries/kyurem_white.bin" @@ -4360,10 +4364,6 @@ Cry_CalyrexIceRider:: Cry_CalyrexShadowRider:: .incbin "sound/direct_sound_samples/cries/calyrex_shadow_rider.bin" - .align 2 -Cry_EnamorusTherian:: - .incbin "sound/direct_sound_samples/cries/enamorus_therian.bin" - .endif .align 2 From 36e6981ac0df338f85cb49a3c1d56f4410dbe007 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Wed, 26 Apr 2023 16:12:00 -0400 Subject: [PATCH 323/428] Replace some & usage with % --- src/event_object_movement.c | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 3025e0849a8c..d4b89fbae1dc 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -2575,7 +2575,7 @@ bool8 MovementType_WanderAround_Step2(struct ObjectEvent *objectEvent, struct Sp { if (!ObjectEventExecSingleMovementAction(objectEvent, sprite)) return FALSE; - SetMovementDelay(sprite, sMovementDelaysMedium[Random() & 3]); + SetMovementDelay(sprite, sMovementDelaysMedium[Random() % ARRAY_COUNT(sMovementDelaysMedium)]); sprite->sTypeFuncId = 3; return TRUE; } @@ -2855,7 +2855,7 @@ bool8 MovementType_LookAround_Step2(struct ObjectEvent *objectEvent, struct Spri { if (ObjectEventExecSingleMovementAction(objectEvent, sprite)) { - SetMovementDelay(sprite, sMovementDelaysMedium[Random() & 3]); + SetMovementDelay(sprite, sMovementDelaysMedium[Random() % ARRAY_COUNT(sMovementDelaysMedium)]); objectEvent->singleMovementActive = FALSE; sprite->sTypeFuncId = 3; } @@ -2907,7 +2907,7 @@ bool8 MovementType_WanderUpAndDown_Step2(struct ObjectEvent *objectEvent, struct if (!ObjectEventExecSingleMovementAction(objectEvent, sprite)) return FALSE; - SetMovementDelay(sprite, sMovementDelaysMedium[Random() & 3]); + SetMovementDelay(sprite, sMovementDelaysMedium[Random() % ARRAY_COUNT(sMovementDelaysMedium)]); sprite->sTypeFuncId = 3; return TRUE; } @@ -2975,7 +2975,7 @@ bool8 MovementType_WanderLeftAndRight_Step2(struct ObjectEvent *objectEvent, str if (!ObjectEventExecSingleMovementAction(objectEvent, sprite)) return FALSE; - SetMovementDelay(sprite, sMovementDelaysMedium[Random() & 3]); + SetMovementDelay(sprite, sMovementDelaysMedium[Random() % ARRAY_COUNT(sMovementDelaysMedium)]); sprite->sTypeFuncId = 3; return TRUE; } @@ -3195,7 +3195,7 @@ bool8 MovementType_FaceDownAndUp_Step2(struct ObjectEvent *objectEvent, struct S { if (ObjectEventExecSingleMovementAction(objectEvent, sprite)) { - SetMovementDelay(sprite, sMovementDelaysMedium[Random() & 3]); + SetMovementDelay(sprite, sMovementDelaysMedium[Random() % ARRAY_COUNT(sMovementDelaysMedium)]); objectEvent->singleMovementActive = FALSE; sprite->sTypeFuncId = 3; } @@ -3245,7 +3245,7 @@ bool8 MovementType_FaceLeftAndRight_Step2(struct ObjectEvent *objectEvent, struc { if (ObjectEventExecSingleMovementAction(objectEvent, sprite)) { - SetMovementDelay(sprite, sMovementDelaysMedium[Random() & 3]); + SetMovementDelay(sprite, sMovementDelaysMedium[Random() % ARRAY_COUNT(sMovementDelaysMedium)]); objectEvent->singleMovementActive = FALSE; sprite->sTypeFuncId = 3; } @@ -3295,7 +3295,7 @@ bool8 MovementType_FaceUpAndLeft_Step2(struct ObjectEvent *objectEvent, struct S { if (ObjectEventExecSingleMovementAction(objectEvent, sprite)) { - SetMovementDelay(sprite, sMovementDelaysShort[Random() & 3]); + SetMovementDelay(sprite, sMovementDelaysShort[Random() % ARRAY_COUNT(sMovementDelaysShort)]); objectEvent->singleMovementActive = FALSE; sprite->sTypeFuncId = 3; } @@ -3345,7 +3345,7 @@ bool8 MovementType_FaceUpAndRight_Step2(struct ObjectEvent *objectEvent, struct { if (ObjectEventExecSingleMovementAction(objectEvent, sprite)) { - SetMovementDelay(sprite, sMovementDelaysShort[Random() & 3]); + SetMovementDelay(sprite, sMovementDelaysShort[Random() % ARRAY_COUNT(sMovementDelaysShort)]); objectEvent->singleMovementActive = FALSE; sprite->sTypeFuncId = 3; } @@ -3395,7 +3395,7 @@ bool8 MovementType_FaceDownAndLeft_Step2(struct ObjectEvent *objectEvent, struct { if (ObjectEventExecSingleMovementAction(objectEvent, sprite)) { - SetMovementDelay(sprite, sMovementDelaysShort[Random() & 3]); + SetMovementDelay(sprite, sMovementDelaysShort[Random() % ARRAY_COUNT(sMovementDelaysShort)]); objectEvent->singleMovementActive = FALSE; sprite->sTypeFuncId = 3; } @@ -3445,7 +3445,7 @@ bool8 MovementType_FaceDownAndRight_Step2(struct ObjectEvent *objectEvent, struc { if (ObjectEventExecSingleMovementAction(objectEvent, sprite)) { - SetMovementDelay(sprite, sMovementDelaysShort[Random() & 3]); + SetMovementDelay(sprite, sMovementDelaysShort[Random() % ARRAY_COUNT(sMovementDelaysShort)]); objectEvent->singleMovementActive = FALSE; sprite->sTypeFuncId = 3; } @@ -3495,7 +3495,7 @@ bool8 MovementType_FaceDownUpAndLeft_Step2(struct ObjectEvent *objectEvent, stru { if (ObjectEventExecSingleMovementAction(objectEvent, sprite)) { - SetMovementDelay(sprite, sMovementDelaysShort[Random() & 3]); + SetMovementDelay(sprite, sMovementDelaysShort[Random() % ARRAY_COUNT(sMovementDelaysShort)]); objectEvent->singleMovementActive = FALSE; sprite->sTypeFuncId = 3; } @@ -3545,7 +3545,7 @@ bool8 MovementType_FaceDownUpAndRight_Step2(struct ObjectEvent *objectEvent, str { if (ObjectEventExecSingleMovementAction(objectEvent, sprite)) { - SetMovementDelay(sprite, sMovementDelaysShort[Random() & 3]); + SetMovementDelay(sprite, sMovementDelaysShort[Random() % ARRAY_COUNT(sMovementDelaysShort)]); objectEvent->singleMovementActive = FALSE; sprite->sTypeFuncId = 3; } @@ -3595,7 +3595,7 @@ bool8 MovementType_FaceUpLeftAndRight_Step2(struct ObjectEvent *objectEvent, str { if (ObjectEventExecSingleMovementAction(objectEvent, sprite)) { - SetMovementDelay(sprite, sMovementDelaysShort[Random() & 3]); + SetMovementDelay(sprite, sMovementDelaysShort[Random() % ARRAY_COUNT(sMovementDelaysShort)]); objectEvent->singleMovementActive = FALSE; sprite->sTypeFuncId = 3; } @@ -3645,7 +3645,7 @@ bool8 MovementType_FaceDownLeftAndRight_Step2(struct ObjectEvent *objectEvent, s { if (ObjectEventExecSingleMovementAction(objectEvent, sprite)) { - SetMovementDelay(sprite, sMovementDelaysShort[Random() & 3]); + SetMovementDelay(sprite, sMovementDelaysShort[Random() % ARRAY_COUNT(sMovementDelaysShort)]); objectEvent->singleMovementActive = FALSE; sprite->sTypeFuncId = 3; } From d5fb13ca17d0b59eb029e9ebbbdadbed61ac1b73 Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Wed, 26 Apr 2023 23:33:22 +0200 Subject: [PATCH 324/428] Fix status icons --- graphics/battle_interface/status2.png | Bin 559 -> 559 bytes graphics/battle_interface/status3.png | Bin 559 -> 559 bytes graphics/battle_interface/status4.png | Bin 559 -> 559 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/graphics/battle_interface/status2.png b/graphics/battle_interface/status2.png index 0b212907e5574725f3c8f3d4f95a713b44fc02e2..5d7f6459be316f5e0b6d75db60329c71761e3c98 100644 GIT binary patch delta 42 xcmZ3_vYusw9V6$qmMICG(-Qu_o$StdMWpF|y~*_l6&egc;OXk;vd$@?2>^5#5SRb} delta 42 xcmZ3_vYusw9V6$~mMICG(-QuFo$StdMI^5>kRCSc3g`vz($tH;e)0=@&x*tjQ4A3gszO z_VmdRQmQT0Nvs>tOoa`|YUOca)iZzwUYB3X1$>hEJD!Ka!`^2q#VH=)gns~20h3x! z%wqv?2R!h9xqvO1zk{X#^fj4)lhPyy26Tf1U7SGMrP@(yf_Zv5?}jMrUM^ry=I`j8 zBRiWZDYON;I*lc7?>mg*#q3Fc-&3((C| zDuIyz?ox62wcO8s^!Ss9e!!t0o_Y1dTXpW>3NYHXUw$k12f#gqW~~#ZPXGV_07*qo IM6N<$f~|6R+5i9m delta 258 zcmV+d0sa231g`|JHUWRz5yT(}MIHFHgp^KQ--ugkCH0zS$79nVAIVed1Q;uMc?!asnifJv<< z=CJ^{10MLlT)>vh-$7FV`kG9@NokS;1G>S1E>58BQtc=;!Mu8$cSDqQFBh;U^LO;l zk)6$y6xsq^oyUFxI(J|yp3f&-%mA)Z>*d#S0Y@@_#~2jc$xx|bOLY>*1aq^X1?c7} zmB2^lKj6?0&%FBKtvYvb1sHAHFTa)h17t9Kn;^jN>i_@%07*qo IM6N<$g3XM3`v3p{ From c2dad5ac44960f6d7b762c5ebb8199b66c1090df Mon Sep 17 00:00:00 2001 From: GriffinR Date: Thu, 27 Apr 2023 13:59:09 -0400 Subject: [PATCH 325/428] Redefine TV_SHOWS_COUNT --- include/constants/global.h | 1 - include/constants/tv.h | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/include/constants/global.h b/include/constants/global.h index 8e40e637863b..04f1d548c458 100644 --- a/include/constants/global.h +++ b/include/constants/global.h @@ -46,7 +46,6 @@ #define OBJECT_EVENTS_COUNT 16 #define MAIL_COUNT (10 + PARTY_SIZE) #define SECRET_BASES_COUNT 20 -#define TV_SHOWS_COUNT 25 #define POKE_NEWS_COUNT 16 #define PC_ITEMS_COUNT 50 #define BAG_ITEMS_COUNT 30 diff --git a/include/constants/tv.h b/include/constants/tv.h index 87748a31de90..13ec88ecdcad 100644 --- a/include/constants/tv.h +++ b/include/constants/tv.h @@ -74,6 +74,7 @@ // for TV shows from TVGROUP_NORMAL. The remainder are for TV // shows from TVGROUP_RECORD_MIX. #define NUM_NORMAL_TVSHOW_SLOTS 5 +#define TV_SHOWS_COUNT (NUM_NORMAL_TVSHOW_SLOTS + 20) #define PLAYERS_HOUSE_TV_NONE 0 #define PLAYERS_HOUSE_TV_LATI 1 From 854e9be3257c227242cff643e887bd68123d12c5 Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Fri, 28 Apr 2023 11:26:31 +0200 Subject: [PATCH 326/428] Fix move defrosting for both Freeze and Frostbite --- src/battle_script_commands.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 4792504a6d51..fecea2892735 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -5596,7 +5596,6 @@ static void Cmd_moveend(void) if (gBattleMons[gBattlerTarget].status1 & STATUS1_FREEZE && gBattleMons[gBattlerTarget].hp != 0 && gBattlerAttacker != gBattlerTarget - && gSpecialStatuses[gBattlerTarget].specialDmg && (moveType == TYPE_FIRE #if B_BURN_HIT_THAW >= GEN_6 || gBattleMoves[gCurrentMove].effect == EFFECT_BURN_HIT @@ -5615,12 +5614,7 @@ static void Cmd_moveend(void) if (gBattleMons[gBattlerTarget].status1 & STATUS1_FROSTBITE && gBattleMons[gBattlerTarget].hp != 0 && gBattlerAttacker != gBattlerTarget - && gSpecialStatuses[gBattlerTarget].specialDmg - && (moveType == TYPE_FIRE - #if B_BURN_HIT_THAW >= GEN_6 - || gBattleMoves[gCurrentMove].effect == EFFECT_BURN_HIT - #endif - ) + && gBattleMoves[originallyUsedMove].flags & FLAG_THAW_USER && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)) { gBattleMons[gBattlerTarget].status1 &= ~STATUS1_FROSTBITE; From a98da30ec7bb8b11127367c397cbcdef2a7137c6 Mon Sep 17 00:00:00 2001 From: Alex Date: Fri, 28 Apr 2023 12:38:34 +0200 Subject: [PATCH 327/428] frostbite tests --- test/status_frostbite.c | 98 +++++++++++++++++++++++++++++++++++++++ test/test_battle.h | 6 +-- test/test_runner_battle.c | 2 + 3 files changed, 103 insertions(+), 3 deletions(-) create mode 100644 test/status_frostbite.c diff --git a/test/status_frostbite.c b/test/status_frostbite.c new file mode 100644 index 000000000000..6abd34a312f5 --- /dev/null +++ b/test/status_frostbite.c @@ -0,0 +1,98 @@ +#include "global.h" +#include "test_battle.h" + +SINGLE_BATTLE_TEST("Frostbite reduces the special attack by 50 percent") +{ + s16 reducedDamage; + s16 normaleDamage; + + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_FROSTBITE); } + } WHEN { + TURN { MOVE(opponent, MOVE_SWIFT); MOVE(player, MOVE_FIRE_PUNCH); } + TURN { MOVE(opponent, MOVE_SWIFT); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SWIFT, opponent); + HP_BAR(player, captureDamage: &reducedDamage); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PUNCH, player); + HP_BAR(opponent); + MESSAGE("Foe Wobbuffet is hurt by its frostbite!"); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_FRZ, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SWIFT, opponent); + HP_BAR(player, captureDamage: &normaleDamage); + } THEN { EXPECT_EQ(reducedDamage, normaleDamage); } +} + +SINGLE_BATTLE_TEST("Frostbite deals 1/16 damage to effected pokemon") +{ + s16 frostbiteDamage; + + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_FROSTBITE); } + } WHEN { + TURN { } + } SCENE { + MESSAGE("Foe Wobbuffet is hurt by its frostbite!"); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_FRZ, opponent); + HP_BAR(opponent, captureDamage: &frostbiteDamage); + } THEN { EXPECT_EQ(frostbiteDamage, opponent->maxHP / 16); } +} + +SINGLE_BATTLE_TEST("Frostbite is healed if hit with a thawing move") +{ + u32 move; + + PARAMETRIZE { move = MOVE_FLAME_WHEEL; } + PARAMETRIZE { move = MOVE_SACRED_FIRE; } + PARAMETRIZE { move = MOVE_FLARE_BLITZ; } + PARAMETRIZE { move = MOVE_FUSION_FLARE; } + PARAMETRIZE { move = MOVE_EMBER; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_FROSTBITE); } + } WHEN { + TURN { MOVE(player, move); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, move, player); + if (move == MOVE_EMBER) { + NONE_OF { + MESSAGE("Foe Wobbuffet's frostbite was healed!"); + } + } else { + MESSAGE("Foe Wobbuffet's frostbite was healed!"); + } + } +} + +SINGLE_BATTLE_TEST("Frostbite is healed when the user uses a thawing move") +{ + u32 move; + + PARAMETRIZE { move = MOVE_FLAME_WHEEL; } + PARAMETRIZE { move = MOVE_SACRED_FIRE; } + PARAMETRIZE { move = MOVE_FLARE_BLITZ; } + PARAMETRIZE { move = MOVE_FUSION_FLARE; } + PARAMETRIZE { move = MOVE_EMBER; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_FROSTBITE); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, move); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, move, player); + HP_BAR(opponent); + if (move == MOVE_EMBER) { + MESSAGE("Wobbuffet is hurt by its frostbite!"); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_FRZ, player); + } else { + NONE_OF { + MESSAGE("Wobbuffet is hurt by its frostbite!"); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_FRZ, player); + } + } + } +} diff --git a/test/test_battle.h b/test/test_battle.h index 967bb661dd18..432e33fa80a2 100644 --- a/test/test_battle.h +++ b/test/test_battle.h @@ -333,7 +333,7 @@ * Used when the battler chooses to switch to another Pokémon but not * via Switch, e.g. after fainting or due to a U-turn. * SEND_OUT(player, 1); - * + * * USE_ITEM(battler, itemId, [partyIndex:], [move:]) * Used when the battler chooses to use an item from the Bag. The item * ID must be specified, and party index and move slot if applicable, e.g: @@ -526,8 +526,7 @@ struct QueuedMessageEvent struct QueuedStatusEvent { u32 battlerId:3; - u32 mask:8; - u32 unused_01:21; + u32 mask:29; }; struct QueuedEvent @@ -872,6 +871,7 @@ struct StatusEventContext bool8 freeze:1; bool8 paralysis:1; bool8 badPoison:1; + bool8 frostbite:1; }; void OpenQueueGroup(u32 sourceLine, enum QueueGroupType); diff --git a/test/test_runner_battle.c b/test/test_runner_battle.c index 365120f1370b..a6fc00c2766c 100644 --- a/test/test_runner_battle.c +++ b/test/test_runner_battle.c @@ -1717,6 +1717,8 @@ void QueueStatus(u32 sourceLine, struct BattlePokemon *battler, struct StatusEve mask = STATUS1_PARALYSIS; else if (ctx.badPoison) mask = STATUS1_TOXIC_POISON; + else if (ctx.frostbite) + mask = STATUS1_FROSTBITE; else mask = ctx.status1; From bfcddff3ca37bdcfbde2f2b08a2942e5477090a0 Mon Sep 17 00:00:00 2001 From: Alex Date: Fri, 28 Apr 2023 12:47:30 +0200 Subject: [PATCH 328/428] correct first test --- test/status_frostbite.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/test/status_frostbite.c b/test/status_frostbite.c index 6abd34a312f5..f03447821747 100644 --- a/test/status_frostbite.c +++ b/test/status_frostbite.c @@ -10,18 +10,16 @@ SINGLE_BATTLE_TEST("Frostbite reduces the special attack by 50 percent") PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_FROSTBITE); } } WHEN { - TURN { MOVE(opponent, MOVE_SWIFT); MOVE(player, MOVE_FIRE_PUNCH); } + TURN { MOVE(opponent, MOVE_SWIFT); MOVE(player, MOVE_FLAME_WHEEL); } TURN { MOVE(opponent, MOVE_SWIFT); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SWIFT, opponent); HP_BAR(player, captureDamage: &reducedDamage); - ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PUNCH, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FLAME_WHEEL, player); HP_BAR(opponent); - MESSAGE("Foe Wobbuffet is hurt by its frostbite!"); - ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_FRZ, opponent); ANIMATION(ANIM_TYPE_MOVE, MOVE_SWIFT, opponent); HP_BAR(player, captureDamage: &normaleDamage); - } THEN { EXPECT_EQ(reducedDamage, normaleDamage); } + } THEN { EXPECT_EQ(reducedDamage * 2, normaleDamage); } } SINGLE_BATTLE_TEST("Frostbite deals 1/16 damage to effected pokemon") From 0cbb80dda76175a0ec5cb94aded25ed505ae74a8 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Fri, 28 Apr 2023 14:58:43 +0200 Subject: [PATCH 329/428] Fix grassy terrain freezing the game (#2959) --- data/battle_scripts_1.s | 4 ++-- test/terrain_electric.c | 29 +++++++++++++++++++++++++++++ test/terrain_grassy.c | 29 +++++++++++++++++++++++++++++ test/terrain_misty.c | 29 +++++++++++++++++++++++++++++ test/terrain_psychic.c | 29 +++++++++++++++++++++++++++++ 5 files changed, 118 insertions(+), 2 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index dcb076c278a4..ec73fd6b25c0 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -6944,14 +6944,14 @@ BattleScript_MagicRoomEnds:: waitmessage B_WAIT_TIME_LONG end2 -BattleScript_GrassyTerrainEnds: - setbyte cMULTISTRING_CHOOSER, B_MSG_TERRAINENDS_GRASS BattleScript_TerrainEnds_Ret:: printfromtable gTerrainEndingStringIds waitmessage B_WAIT_TIME_LONG playanimation BS_ATTACKER, B_ANIM_RESTORE_BG return +BattleScript_GrassyTerrainEnds: + setbyte cMULTISTRING_CHOOSER, B_MSG_TERRAINENDS_GRASS BattleScript_TerrainEnds:: call BattleScript_TerrainEnds_Ret end2 diff --git a/test/terrain_electric.c b/test/terrain_electric.c index bb397fdf9b38..e9c34ef92303 100644 --- a/test/terrain_electric.c +++ b/test/terrain_electric.c @@ -61,3 +61,32 @@ SINGLE_BATTLE_TEST("Electric Terrain increases power of Electric-type moves by 3 EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage); } } + +SINGLE_BATTLE_TEST("Electric Terrain lasts for 5 turns") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_ELECTRIC_TERRAIN); } + TURN {} + TURN {} + TURN {} + TURN {} + } SCENE { + MESSAGE("Foe Wobbuffet used Celebrate!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_ELECTRIC_TERRAIN, player); + MESSAGE("An electric current runs across the battlefield!"); + + MESSAGE("Wobbuffet used Celebrate!"); + MESSAGE("Foe Wobbuffet used Celebrate!"); + + MESSAGE("Wobbuffet used Celebrate!"); + MESSAGE("Foe Wobbuffet used Celebrate!"); + + MESSAGE("Wobbuffet used Celebrate!"); + MESSAGE("Foe Wobbuffet used Celebrate!"); + + MESSAGE("The electricity disappeared from the battlefield."); + } +} diff --git a/test/terrain_grassy.c b/test/terrain_grassy.c index ae6e6d9e9226..7668c49bde19 100644 --- a/test/terrain_grassy.c +++ b/test/terrain_grassy.c @@ -84,3 +84,32 @@ SINGLE_BATTLE_TEST("Grassy Terrain decreases power of Earthquake and Bulldoze by EXPECT_MUL_EQ(results[2].damage, Q_4_12(0.5), results[3].damage); } } + +SINGLE_BATTLE_TEST("Grassy Terrain lasts for 5 turns") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_GRASSY_TERRAIN); } + TURN {} + TURN {} + TURN {} + TURN {} + } SCENE { + MESSAGE("Foe Wobbuffet used Celebrate!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_GRASSY_TERRAIN, player); + MESSAGE("Grass grew to cover the battlefield!"); + + MESSAGE("Wobbuffet used Celebrate!"); + MESSAGE("Foe Wobbuffet used Celebrate!"); + + MESSAGE("Wobbuffet used Celebrate!"); + MESSAGE("Foe Wobbuffet used Celebrate!"); + + MESSAGE("Wobbuffet used Celebrate!"); + MESSAGE("Foe Wobbuffet used Celebrate!"); + + MESSAGE("The grass disappeared from the battlefield."); + } +} diff --git a/test/terrain_misty.c b/test/terrain_misty.c index 668b0369922c..4f8793d9d0ad 100644 --- a/test/terrain_misty.c +++ b/test/terrain_misty.c @@ -78,3 +78,32 @@ SINGLE_BATTLE_TEST("Misty Terrain decreases power of Dragon-type moves by 50 per EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.5), results[1].damage); } } + +SINGLE_BATTLE_TEST("Misty Terrain lasts for 5 turns") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_MISTY_TERRAIN); } + TURN {} + TURN {} + TURN {} + TURN {} + } SCENE { + MESSAGE("Foe Wobbuffet used Celebrate!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_MISTY_TERRAIN, player); + MESSAGE("Mist swirled about the battlefield!"); + + MESSAGE("Wobbuffet used Celebrate!"); + MESSAGE("Foe Wobbuffet used Celebrate!"); + + MESSAGE("Wobbuffet used Celebrate!"); + MESSAGE("Foe Wobbuffet used Celebrate!"); + + MESSAGE("Wobbuffet used Celebrate!"); + MESSAGE("Foe Wobbuffet used Celebrate!"); + + MESSAGE("The mist disappeared from the battlefield."); + } +} diff --git a/test/terrain_psychic.c b/test/terrain_psychic.c index 2cddef070f0b..3ecfa99e0639 100644 --- a/test/terrain_psychic.c +++ b/test/terrain_psychic.c @@ -136,3 +136,32 @@ SINGLE_BATTLE_TEST("Psychic Terrain doesn't block priority field moves", s16 dam MESSAGE("Sableye used Sunny Day!"); } } + +SINGLE_BATTLE_TEST("Psychic Terrain lasts for 5 turns") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_PSYCHIC_TERRAIN); } + TURN {} + TURN {} + TURN {} + TURN {} + } SCENE { + MESSAGE("Foe Wobbuffet used Celebrate!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_PSYCHIC_TERRAIN, player); + MESSAGE("The battlefield got weird!"); + + MESSAGE("Wobbuffet used Celebrate!"); + MESSAGE("Foe Wobbuffet used Celebrate!"); + + MESSAGE("Wobbuffet used Celebrate!"); + MESSAGE("Foe Wobbuffet used Celebrate!"); + + MESSAGE("Wobbuffet used Celebrate!"); + MESSAGE("Foe Wobbuffet used Celebrate!"); + + MESSAGE("The weirdness disappeared from the battlefield."); + } +} From b53c913558c5c454922a29c12cd864822b5da3dc Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Sat, 29 Apr 2023 18:16:36 +0200 Subject: [PATCH 330/428] Manually port daycare expansion to modern standards --- include/config/pokemon.h | 13 +++-- src/daycare.c | 108 ++++++++++++++++++++++++++------------- 2 files changed, 82 insertions(+), 39 deletions(-) diff --git a/include/config/pokemon.h b/include/config/pokemon.h index 1cde573c96fe..6247217465ce 100644 --- a/include/config/pokemon.h +++ b/include/config/pokemon.h @@ -8,10 +8,15 @@ #define P_UPDATED_EGG_GROUPS GEN_LATEST // Since Gen 8, certain Pokémon have gained new egg groups. // Breeding settings -#define P_NIDORAN_M_DITTO_BREED GEN_LATEST // Since Gen 5, when Nidoran♂ breeds with Ditto it can produce Nidoran♀ offspring. Before, it would only yield male offspring. This change also applies to Volbeat. -#define P_INCENSE_BREEDING GEN_LATEST // Since Gen 9, cross-generation Baby Pokémon don't require Incense being held by the parents to be obtained via breeding. -#define P_EGG_HATCH_LEVEL GEN_LATEST // Since Gen 4, Pokémon will hatch from eggs at level 1 instead of 5. -#define P_BALL_INHERITING GEN_LATEST // Since Gen 6, Eggs from the Daycare will inherit the Poké Ball from their mother. From Gen7 onwards, the father can pass it down as well, as long as it's of the same species as the mother. +#define P_NIDORAN_M_DITTO_BREED GEN_LATEST // Since Gen 5, when Nidoran♂ breeds with Ditto it can produce Nidoran♀ offspring. Before, it would only yield male offspring. This change also applies to Volbeat. +#define P_INCENSE_BREEDING GEN_LATEST // Since Gen 9, cross-generation Baby Pokémon don't require Incense being held by the parents to be obtained via breeding. +#define P_EGG_HATCH_LEVEL GEN_LATEST // Since Gen 4, Pokémon will hatch from eggs at level 1 instead of 5. +#define P_BALL_INHERITING GEN_LATEST // Since Gen 6, Eggs from the Daycare will inherit the Poké Ball from their mother. From Gen 7 onwards, the father can pass it down as well, as long as it's of the same species as the mother. +#define P_TM_INHERITANCE GEN_LATEST // Since Gen 6, the father no longer passes down TMs to the baby. +#define P_MOTHER_EGG_MOVE_INHERITANCE GEN_LATEST // Since Gen 6, the mother can also pass down Egg Moves. +#define P_NATURE_INHERITANCE GEN_LATEST // In Gen 3, Everstone grants Ditto and mothers a 50% chance to pass on Nature. Since Gen 4, anyone can pass on nature. Since Gen 5, the chance is 100%. +#define P_ABILITY_INHERITANCE GEN_LATEST // TODO: In B2W2, a female Pokémon has an 80% chance of passing down their ability if bred with a male. Since Gen 6, the chance is 80% for normal ability and 60% for Hidden Ability, and anyone can pass down their abilities if bred with Ditto. NOTE: BW's effect: 60% chance to pass down HA and random for normal ability has been omitted. +#define P_EGG_MOVE_TRANSFER GEN_LATEST // TODO: Starting in Gen 8, if two Pokémon of the same species are together in the Daycare, one knows an Egg Move, and the other has an empty slot, the other Pokémon will receive the Egg Move in the empty slot. // Species-specific settings #define P_SHEDINJA_BALL GEN_LATEST // Since Gen 4, Shedinja requires a Poké Ball for its evolution. In Gen 3, Shedinja inherits Nincada's Ball. diff --git a/src/daycare.c b/src/daycare.c index 803c0cacf9da..3feabe9ba917 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -21,11 +21,14 @@ #include "overworld.h" #include "item.h" #include "constants/items.h" +#include "constants/hold_effects.h" #include "constants/moves.h" #include "constants/region_map_sections.h" extern const struct Evolution gEvolutionTable[][EVOS_PER_MON]; +#define IS_DITTO(species) (gBaseStats[species].eggGroup1 == EGG_GROUP_DITTO || gBaseStats[species].eggGroup2 == EGG_GROUP_DITTO) + static void ClearDaycareMonMail(struct DaycareMail *mail); static void SetInitialEggData(struct Pokemon *mon, u16 species, struct DayCare *daycare); static u8 GetDaycareCompatibilityScore(struct DayCare *daycare); @@ -425,43 +428,29 @@ static u16 GetEggSpecies(u16 species) static s32 GetParentToInheritNature(struct DayCare *daycare) { - u32 species[DAYCARE_MON_COUNT]; - s32 i; - s32 dittoCount; - s32 parent = -1; + u32 i; + u8 numWithEverstone = 0; + s32 slot = -1; - // search for female gender for (i = 0; i < DAYCARE_MON_COUNT; i++) { - if (GetBoxMonGender(&daycare->mons[i].mon) == MON_FEMALE) - parent = i; - } - - // search for ditto - for (dittoCount = 0, i = 0; i < DAYCARE_MON_COUNT; i++) - { - species[i] = GetBoxMonData(&daycare->mons[i].mon, MON_DATA_SPECIES); - if (species[i] == SPECIES_DITTO) - dittoCount++, parent = i; - } - - // coin flip on ...two Dittos - if (dittoCount == DAYCARE_MON_COUNT) - { - if (Random() >= USHRT_MAX / 2) - parent = 0; - else - parent = 1; - } - - // Don't inherit nature if not holding Everstone - if (GetBoxMonData(&daycare->mons[parent].mon, MON_DATA_HELD_ITEM) != ITEM_EVERSTONE - || Random() >= USHRT_MAX / 2) - { - return -1; + if (ItemId_GetHoldEffect(GetBoxMonData(&daycare->mons[i].mon, MON_DATA_HELD_ITEM)) == HOLD_EFFECT_PREVENT_EVOLVE + #if P_NATURE_INHERITANCE == GEN_3 + && (GetBoxMonGender(&daycare->mons[i].mon) == MON_FEMALE || IS_DITTO(GetBoxMonData(&daycare->mons[i].mon, MON_DATA_SPECIES))) + #endif + ) { + slot = i; + numWithEverstone++; + } } - return parent; + if (numWithEverstone >= DAYCARE_MON_COUNT) + return Random() & 1; +#if P_NATURE_INHERITANCE > GEN_4 + return slot; +#else + return Random() & 1 ? slot : -1; +#endif } static void _TriggerPendingDaycareEgg(struct DayCare *daycare) @@ -541,7 +530,7 @@ static void InheritIVs(struct Pokemon *egg, struct DayCare *daycare) { u16 motherItem = GetBoxMonData(&daycare->mons[0].mon, MON_DATA_HELD_ITEM); u16 fatherItem = GetBoxMonData(&daycare->mons[1].mon, MON_DATA_HELD_ITEM); - u8 i; + u8 i, start; u8 selectedIvs[5]; u8 availableIVs[NUM_STATS]; u8 whichParents[5]; @@ -557,8 +546,33 @@ static void InheritIVs(struct Pokemon *egg, struct DayCare *daycare) availableIVs[i] = i; } + start = 0; + if (ItemId_GetHoldEffect(motherItem) == HOLD_EFFECT_POWER_ITEM && + ItemId_GetHoldEffect(fatherItem) == HOLD_EFFECT_POWER_ITEM) + { + whichParents[0] = Random() % DAYCARE_MON_COUNT; + selectedIvs[0] = ItemId_GetSecondaryId( + GetBoxMonData(&daycare->mons[whichParents[0]].mon, MON_DATA_HELD_ITEM)); + RemoveIVIndexFromList(availableIVs, selectedIvs[0]); + start++; + } + else if (ItemId_GetHoldEffect(motherItem) == HOLD_EFFECT_POWER_ITEM) + { + whichParents[0] = 0; + selectedIvs[0] = ItemId_GetSecondaryId(motherItem); + RemoveIVIndexFromList(availableIVs, selectedIvs[0]); + start++; + } + else if (ItemId_GetHoldEffect(fatherItem) == HOLD_EFFECT_POWER_ITEM) + { + whichParents[0] = 1; + selectedIvs[0] = ItemId_GetSecondaryId(fatherItem); + RemoveIVIndexFromList(availableIVs, selectedIvs[0]); + start++; + } + // Select which IVs that will be inherited. - for (i = 0; i < howManyIVs; i++) + for (i = start; i < howManyIVs; i++) { // Randomly pick an IV from the available list and stop from being chosen again. // BUG: Instead of removing the IV that was just picked, this @@ -577,7 +591,7 @@ static void InheritIVs(struct Pokemon *egg, struct DayCare *daycare) } // Determine which parent each of the selected IVs should inherit from. - for (i = 0; i < howManyIVs; i++) + for (i = start; i < howManyIVs; i++) { whichParents[i] = Random() % DAYCARE_MON_COUNT; } @@ -703,6 +717,28 @@ static void BuildEggMoveset(struct Pokemon *egg, struct BoxPokemon *father, stru numEggMoves = GetEggMoves(egg, sHatchedEggEggMoves); +#if P_MOTHER_EGG_MOVE_INHERITANCE >= GEN_6 + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (sHatchedEggMotherMoves[i] != MOVE_NONE) + { + for (j = 0; j < numEggMoves; j++) + { + if (sHatchedEggMotherMoves[i] == sHatchedEggEggMoves[j]) + { + if (GiveMoveToMon(egg, sHatchedEggMotherMoves[i]) == MON_HAS_MAX_MOVES) + DeleteFirstMoveAndGiveMoveToMon(egg, sHatchedEggMotherMoves[i]); + break; + } + } + } + else + { + break; + } + } +#endif + for (i = 0; i < MAX_MON_MOVES; i++) { if (sHatchedEggFatherMoves[i] != MOVE_NONE) @@ -722,6 +758,7 @@ static void BuildEggMoveset(struct Pokemon *egg, struct BoxPokemon *father, stru break; } } +#if P_TM_INHERITANCE < GEN_6 for (i = 0; i < MAX_MON_MOVES; i++) { if (sHatchedEggFatherMoves[i] != MOVE_NONE) @@ -737,6 +774,7 @@ static void BuildEggMoveset(struct Pokemon *egg, struct BoxPokemon *father, stru } } } +#endif for (i = 0; i < MAX_MON_MOVES; i++) { if (sHatchedEggFatherMoves[i] == MOVE_NONE) From c82c2c185ecc62b58e79ab5feb5e29b3e4268f8f Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Sat, 29 Apr 2023 18:29:50 +0200 Subject: [PATCH 331/428] Integrate ghoul's review Co-Authored-By: ghoulslash <41651341+ghoulslash@users.noreply.github.com> --- src/battle_script_commands.c | 10 ---------- src/battle_util.c | 4 ++-- 2 files changed, 2 insertions(+), 12 deletions(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 81c39f893c07..ccbb488d2e01 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -15147,16 +15147,6 @@ static void Cmd_doweatherformchangeanimation(void) static void Cmd_tryweatherformdatachange(void) { CMD_ARGS(); - - u8 form; - - // gBattlescriptCurrInstr = cmd->nextInstr; - // form = TryWeatherFormChange(gBattleScripting.battler); - // if (form) - // { - // BattleScriptPushCursorAndCallback(BattleScript_WeatherFormChange); - // *(&gBattleStruct->formToChangeInto) = form - 1; - // } } // Water and Mud Sport diff --git a/src/battle_util.c b/src/battle_util.c index e3c4ceed6985..aab0f2db6da1 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -2487,7 +2487,7 @@ u8 DoFieldEndTurnEffects(void) gBattleStruct->turnCountersTracker++; break; case ENDTURN_WEATHER_FORM: - for (i = 0; i < gBattlersCount; ++i) + for (i = 0; i < gBattlersCount; i++) { if (AbilityBattleEffects(ABILITYEFFECT_ON_WEATHER, i, 0, 0, 0)) { @@ -10154,7 +10154,7 @@ bool32 TryBattleFormChange(u8 battlerId, u16 method) { u8 monId = gBattlerPartyIndexes[battlerId]; u8 side = GET_BATTLER_SIDE(battlerId); - struct Pokemon *party = (side == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty; + struct Pokemon *party = GetBattlerParty(battlerId); u16 targetSpecies; if (!CanBattlerFormChange(battlerId, method)) From 99cbd2af37004fef58e8838f130b293b09f0ed2d Mon Sep 17 00:00:00 2001 From: CallmeEchoo <65783283+CallmeEchoo@users.noreply.github.com> Date: Sat, 29 Apr 2023 12:30:39 +0200 Subject: [PATCH 332/428] add snow weather --- asm/macros/battle_script.inc | 4 ++ data/battle_anim_scripts.s | 19 +++++++++- data/battle_scripts_1.s | 30 ++++++++++++++- include/battle_ai_util.h | 1 + include/battle_scripts.h | 4 +- include/config/battle.h | 1 + include/constants/battle.h | 6 ++- include/constants/battle_ai.h | 1 + include/constants/battle_anim.h | 2 + include/constants/battle_move_effects.h | 3 +- include/constants/battle_string_ids.h | 14 ++++++- src/battle_ai_main.c | 34 ++++++++++++++++- src/battle_ai_util.c | 30 +++++++++++++-- src/battle_anim_effects_3.c | 2 + src/battle_gfx_sfx_util.c | 1 + src/battle_main.c | 4 +- src/battle_message.c | 19 +++++++++- src/battle_script_commands.c | 29 ++++++++++++--- src/battle_tv.c | 3 +- src/battle_util.c | 49 +++++++++++++++++++++---- src/data/battle_moves.h | 2 +- 21 files changed, 228 insertions(+), 30 deletions(-) diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index 78fb914063bd..bfc81fbb6c32 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -1346,6 +1346,10 @@ callnative BS_ItemRestorePP .endm + .macro setsnow + callnative BS_SetSnow + .endm + @ various command changed to more readable macros .macro cancelmultiturnmoves battler:req various \battler, VARIOUS_CANCEL_MULTI_TURN_MOVES diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index adcb88c88133..f1637fff9d51 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -947,6 +947,7 @@ gBattleAnims_General:: .4byte General_ShellTrapSetUp @ B_ANIM_SHELL_TRAP_SETUP .4byte General_ZMoveActivate @ B_ANIM_ZMOVE_ACTIVATE .4byte General_AffectionHangedOn @ B_ANIM_AFFECTION_HANGED_ON + .4byte General_Snow @ B_ANIM_SNOW_CONTINUES .align 2 gBattleAnims_Special:: @@ -14448,7 +14449,19 @@ Move_ELECTRO_DRIFT:: Move_SHED_TAIL:: Move_CHILLY_RECEPTION:: Move_TIDY_UP:: -Move_SNOWSCAPE:: + +@ Also used by Snow weather. Currently identical with Move_HAIL +Move_SNOWSCAPE: + loadspritegfx ANIM_TAG_HAIL + loadspritegfx ANIM_TAG_ICE_CRYSTALS + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 3, 0, 6, RGB_BLACK + waitforvisualfinish + createvisualtask AnimTask_Hail, 5 + loopsewithpan SE_M_HAIL, 0, 8, 10 + waitforvisualfinish + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 3, 6, 0, RGB_BLACK + end + Move_POUNCE:: Move_TRAILBLAZE:: Move_CHILLING_WATER:: @@ -23924,6 +23937,7 @@ Move_WEATHER_BALL: jumpreteq ANIM_WEATHER_RAIN, WeatherBallWater jumpreteq ANIM_WEATHER_SANDSTORM, WeatherBallSandstorm jumpreteq ANIM_WEATHER_HAIL, WeatherBallIce + jumpreteq ANIM_WEATHER_SNOW, WeatherBallIce WeatherBallNormal: loadspritegfx ANIM_TAG_IMPACT createsprite gWeatherBallNormalDownSpriteTemplate, ANIM_TARGET, 2, -30, -100, 25, 1, 0, 0 @@ -24679,6 +24693,9 @@ General_Sandstorm: General_Hail: goto Move_HAIL +General_Snow: + goto Move_SNOWSCAPE + General_LeechSeedDrain: createvisualtask AnimTask_GetBattlersFromArg, 5 delay 0 diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index ec73fd6b25c0..0b76d8648da9 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -424,6 +424,7 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectDireClaw @ EFFECT_DIRE_CLAW .4byte BattleScript_EffectBarbBarrage @ EFFECT_BARB_BARRAGE .4byte BattleScript_EffectRevivalBlessing @ EFFECT_REVIVAL_BLESSING + .4byte BattleScript_EffectSnow @ EFFECT_SNOW BattleScript_EffectRevivalBlessing:: attackcanceler @@ -6858,6 +6859,14 @@ BattleScript_DamagingWeatherContinuesEnd:: bicword gHitMarker, HITMARKER_SKIP_DMG_TRACK | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE | HITMARKER_GRUDGE end2 +BattleScript_SnowContinuesOrEnds:: + printfromtable gSnowContinuesStringIds + waitmessage B_WAIT_TIME_LONG + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_SNOW_STOPPED, BattleScript_SnowContinuesOrEndsEnd + playanimation BS_ATTACKER, B_ANIM_SNOW_CONTINUES +BattleScript_SnowContinuesOrEndsEnd:: + end2 + BattleScript_SandStormHailEnds:: printfromtable gSandStormHailEndStringIds waitmessage B_WAIT_TIME_LONG @@ -8840,7 +8849,7 @@ BattleScript_MimicryActivates_End3:: waitmessage B_WAIT_TIME_SHORT end3 -BattleScript_SnowWarningActivates:: +BattleScript_SnowWarningActivatesHail:: pause B_WAIT_TIME_SHORT call BattleScript_AbilityPopUp printstring STRINGID_SNOWWARNINGHAIL @@ -8849,6 +8858,15 @@ BattleScript_SnowWarningActivates:: call BattleScript_WeatherFormChanges end3 +BattleScript_SnowWarningActivatesSnow:: + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp + printstring STRINGID_SNOWWARNINGSNOW + waitstate + playanimation BS_BATTLER_0, B_ANIM_SNOW_CONTINUES + call BattleScript_WeatherFormChanges + end3 + BattleScript_ActivateTerrainEffects: savetarget setbyte gBattlerTarget, 0 @@ -10422,3 +10440,13 @@ BattleScript_BerserkGeneRet_OwnTempoPrevents: BattleScript_BerserkGeneRet_End: removeitem BS_SCRIPTING end3 + +BattleScript_EffectSnow:: + attackcanceler + attackstring + ppreduce + jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_SUN_PRIMAL, BattleScript_ExtremelyHarshSunlightWasNotLessened + jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_RAIN_PRIMAL, BattleScript_NoReliefFromHeavyRain + jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_STRONG_WINDS, BattleScript_MysteriousAirCurrentBlowsOn + setsnow + goto BattleScript_MoveWeatherChange diff --git a/include/battle_ai_util.h b/include/battle_ai_util.h index d1319f0ca776..0d134ff1cef9 100644 --- a/include/battle_ai_util.h +++ b/include/battle_ai_util.h @@ -112,6 +112,7 @@ bool32 IsEncoreEncouragedEffect(u16 moveEffect); void ProtectChecks(u8 battlerAtk, u8 battlerDef, u16 move, u16 predictedMove, s16 *score); bool32 ShouldSetSandstorm(u8 battler, u16 ability, u16 holdEffect); bool32 ShouldSetHail(u8 battler, u16 ability, u16 holdEffect); +bool32 ShouldSetSnow(u8 battler, u16 ability, u16 holdEffect); bool32 ShouldSetRain(u8 battlerAtk, u16 ability, u16 holdEffect); bool32 ShouldSetSun(u8 battlerAtk, u16 atkAbility, u16 holdEffect); bool32 HasSleepMoveWithLowAccuracy(u8 battlerAtk, u8 battlerDef); diff --git a/include/battle_scripts.h b/include/battle_scripts.h index 876e2d343ad5..e0b756e93773 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -43,6 +43,7 @@ extern const u8 BattleScript_ActionSwitch[]; extern const u8 BattleScript_Pausex20[]; extern const u8 BattleScript_LevelUp[]; extern const u8 BattleScript_RainContinuesOrEnds[]; +extern const u8 BattleScript_SnowContinuesOrEnds[]; extern const u8 BattleScript_DamagingWeatherContinues[]; extern const u8 BattleScript_SandStormHailEnds[]; extern const u8 BattleScript_SunlightContinues[]; @@ -269,7 +270,8 @@ extern const u8 BattleScript_CursedBodyActivates[]; extern const u8 BattleScript_MummyActivates[]; extern const u8 BattleScript_WeakArmorActivates[]; extern const u8 BattleScript_FellStingerRaisesStat[]; -extern const u8 BattleScript_SnowWarningActivates[]; +extern const u8 BattleScript_SnowWarningActivatesHail[]; +extern const u8 BattleScript_SnowWarningActivatesSnow[]; extern const u8 BattleScript_HarvestActivates[]; extern const u8 BattleScript_ImposterActivates[]; extern const u8 BattleScript_SelectingNotAllowedMoveAssaultVest[]; diff --git a/include/config/battle.h b/include/config/battle.h index b9d3926b05a6..e3975e7199bb 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -118,6 +118,7 @@ #define B_SYMBIOSIS_GEMS GEN_LATEST // In Gen7+, Symbiosis passes an item after a gem-boosted attack. Previously, items are passed before the gem-boosted attack hits, making the item effect apply. #define B_CHECK_IF_CHARGED_UP TRUE // If set to TRUE, certain abilities such as Electromorphosis WILL check if the STATUS3_CHARGED_UP status flag is applied. #define B_ABSORBING_ABILITY_STRING GEN_LATEST // In Gen5+, the abilities that absorb moves of a certain type use a generic string for stat increases and decreases. +#define B_SNOW_WARNING GEN_9 // In Gen9+, Snowwarning will summon snow instead of hail. // Item settings #define B_HP_BERRIES GEN_LATEST // In Gen4+, berries which restore hp activate immediately after HP drops to half. In Gen3, the effect occurs at the end of the turn. diff --git a/include/constants/battle.h b/include/constants/battle.h index f0130e58f2cd..7a4ede37a562 100644 --- a/include/constants/battle.h +++ b/include/constants/battle.h @@ -286,8 +286,11 @@ #define B_WEATHER_HAIL_PERMANENT (1 << 10) #define B_WEATHER_HAIL (B_WEATHER_HAIL_TEMPORARY | B_WEATHER_HAIL_PERMANENT) #define B_WEATHER_STRONG_WINDS (1 << 11) -#define B_WEATHER_ANY (B_WEATHER_RAIN | B_WEATHER_SANDSTORM | B_WEATHER_SUN | B_WEATHER_HAIL | B_WEATHER_STRONG_WINDS) +#define B_WEATHER_ANY (B_WEATHER_RAIN | B_WEATHER_SANDSTORM | B_WEATHER_SUN | B_WEATHER_HAIL | B_WEATHER_STRONG_WINDS | B_WEATHER_SNOW) #define B_WEATHER_PRIMAL_ANY (B_WEATHER_RAIN_PRIMAL | B_WEATHER_SUN_PRIMAL | B_WEATHER_STRONG_WINDS) +#define B_WEATHER_SNOW_TEMPORARY (1 << 12) +#define B_WEATHER_SNOW_PERMANENT (1 << 13) +#define B_WEATHER_SNOW (B_WEATHER_SNOW_TEMPORARY | B_WEATHER_SNOW_PERMANENT) // Battle Weather as enum #define ENUM_WEATHER_NONE 0 @@ -298,6 +301,7 @@ #define ENUM_WEATHER_SUN_PRIMAL 5 #define ENUM_WEATHER_RAIN_PRIMAL 6 #define ENUM_WEATHER_STRONG_WINDS 7 +#define ENUM_WEATHER_SNOW 8 // Move Effects #define MOVE_EFFECT_SLEEP 1 diff --git a/include/constants/battle_ai.h b/include/constants/battle_ai.h index 1316054cd1b4..81dbdad16393 100644 --- a/include/constants/battle_ai.h +++ b/include/constants/battle_ai.h @@ -30,6 +30,7 @@ #define AI_WEATHER_RAIN 2 #define AI_WEATHER_SANDSTORM 3 #define AI_WEATHER_HAIL 4 +#define AI_WEATHER_SNOW 5 // get_how_powerful_move_is #define MOVE_POWER_OTHER 0 diff --git a/include/constants/battle_anim.h b/include/constants/battle_anim.h index 46e229a3190b..4b772022e513 100644 --- a/include/constants/battle_anim.h +++ b/include/constants/battle_anim.h @@ -544,6 +544,7 @@ #define B_ANIM_SHELL_TRAP_SETUP 34 #define B_ANIM_ZMOVE_ACTIVATE 35 // Using Z Moves #define B_ANIM_AFFECTION_HANGED_ON 36 +#define B_ANIM_SNOW_CONTINUES 37 // special animations table (gBattleAnims_Special) #define B_ANIM_LVL_UP 0 @@ -591,6 +592,7 @@ #define ANIM_WEATHER_RAIN 2 #define ANIM_WEATHER_SANDSTORM 3 #define ANIM_WEATHER_HAIL 4 +#define ANIM_WEATHER_SNOW 5 // mon pal blend #define ANIM_PAL_BG 0x1 diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h index d1562dec9360..e67348bfc44d 100644 --- a/include/constants/battle_move_effects.h +++ b/include/constants/battle_move_effects.h @@ -405,7 +405,8 @@ #define EFFECT_DIRE_CLAW 399 #define EFFECT_BARB_BARRAGE 400 #define EFFECT_REVIVAL_BLESSING 401 +#define EFFECT_SNOW 402 -#define NUM_BATTLE_MOVE_EFFECTS 402 +#define NUM_BATTLE_MOVE_EFFECTS 403 #endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index f4fd589db12e..f9d55a8a9dd7 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -652,8 +652,15 @@ #define STRINGID_ITEMCUREDSPECIESSTATUS 650 #define STRINGID_ITEMRESTOREDSPECIESPP 651 #define STRINGID_THUNDERCAGETRAPPED 652 +#define STRINGID_STARTEDSNOW 653 +#define STRINGID_SNOWCONTINUES 654 +#define STRINGID_SNOWSTOPPED 655 +#define STRINGID_STARTEDSNOW 653 +#define STRINGID_SNOWCONTINUES 654 +#define STRINGID_SNOWSTOPPED 655 +#define STRINGID_SNOWWARNINGSNOW 656 -#define BATTLESTRINGS_COUNT 653 +#define BATTLESTRINGS_COUNT 657 // This is the string id that gBattleStringsTable starts with. // String ids before this (e.g. STRINGID_INTROMSG) are not in the table, @@ -719,12 +726,17 @@ #define B_MSG_STARTED_SANDSTORM 3 #define B_MSG_STARTED_SUNLIGHT 4 #define B_MSG_STARTED_HAIL 5 +#define B_MSG_STARTED_SNOW 6 // gRainContinuesStringIds #define B_MSG_RAIN_CONTINUES 0 #define B_MSG_DOWNPOUR_CONTINUES 1 #define B_MSG_RAIN_STOPPED 2 +// gSnowContinuesStringIds +#define B_MSG_SNOW_CONTINUES 0 +#define B_MSG_SNOW_STOPPED 1 + // gSandStormHailContinuesStringIds / gSandStormHailDmgStringIds/ gSandStormHailEndStringIds #define B_MSG_SANDSTORM 0 #define B_MSG_HAIL 1 diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 6c60705d5a7c..3933c455d08e 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -1372,7 +1372,7 @@ static s16 AI_CheckBadMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) case EFFECT_AURORA_VEIL: if (gSideStatuses[GetBattlerSide(battlerAtk)] & SIDE_STATUS_AURORA_VEIL || PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove) - || !(gBattleWeather & B_WEATHER_HAIL)) + || !(gBattleWeather & B_WEATHER_HAIL && gBattleWeather & B_WEATHER_SNOW)) score -= 10; break; case EFFECT_OHKO: @@ -1578,7 +1578,12 @@ static s16 AI_CheckBadMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) score -= 8; break; case EFFECT_HAIL: - if (gBattleWeather & (B_WEATHER_HAIL | B_WEATHER_PRIMAL_ANY) + if (gBattleWeather & (B_WEATHER_HAIL | B_WEATHER_PRIMAL_ANY) // should hail be discouraged if snow is up? + || PartnerMoveEffectIsWeather(BATTLE_PARTNER(battlerAtk), AI_DATA->partnerMove)) + score -= 8; + break; + case EFFECT_SNOW: + if (gBattleWeather & (B_WEATHER_SNOW | B_WEATHER_PRIMAL_ANY) // should snow be discouraged if hail is up? || PartnerMoveEffectIsWeather(BATTLE_PARTNER(battlerAtk), AI_DATA->partnerMove)) score -= 8; break; @@ -2800,6 +2805,13 @@ static s16 AI_DoubleBattle(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) RETURN_SCORE_PLUS(2); // our partner benefits from hail } break; + case EFFECT_SNOW: + if (IsBattlerAlive(battlerAtkPartner) + && ShouldSetSnow(battlerAtkPartner, atkPartnerAbility, atkPartnerHoldEffect)) + { + RETURN_SCORE_PLUS(2); // our partner benefits from snow + } + break; } // global move effect check @@ -3949,6 +3961,22 @@ static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) score += 2; } break; + case EFFECT_SNOW: // any other reasons? + if (ShouldSetSnow(battlerAtk, AI_DATA->abilities[battlerAtk], AI_DATA->holdEffects[battlerAtk])) + { + if ((HasMoveEffect(battlerAtk, EFFECT_AURORA_VEIL) || HasMoveEffect(BATTLE_PARTNER(battlerAtk), EFFECT_AURORA_VEIL)) + && ShouldSetScreen(battlerAtk, battlerDef, EFFECT_AURORA_VEIL)) + score += 3; + + score++; + if (AI_DATA->holdEffects[battlerAtk] == HOLD_EFFECT_ICY_ROCK) + score++; + if (HasMoveEffect(battlerDef, EFFECT_MORNING_SUN) + || HasMoveEffect(battlerDef, EFFECT_SYNTHESIS) + || HasMoveEffect(battlerDef, EFFECT_MOONLIGHT)) + score += 2; + } + break; case EFFECT_RAIN_DANCE: if (ShouldSetRain(battlerAtk, AI_DATA->abilities[battlerAtk], AI_DATA->holdEffects[battlerAtk])) { @@ -4932,6 +4960,7 @@ static s16 AI_SetupFirstTurn(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) case EFFECT_SUNNY_DAY: case EFFECT_SANDSTORM: case EFFECT_HAIL: + case EFFECT_SNOW: case EFFECT_GEOMANCY: case EFFECT_VICTORY_DANCE: case EFFECT_HIT_SET_ENTRY_HAZARD: @@ -5158,6 +5187,7 @@ static s16 AI_HPAware(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) case EFFECT_SUNNY_DAY: case EFFECT_SANDSTORM: case EFFECT_HAIL: + case EFFECT_SNOW: case EFFECT_RAIN_DANCE: score -= 2; break; diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index f23127a0c358..230bc255f1ae 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -331,6 +331,7 @@ static const u16 sEncouragedEncoreEffects[] = EFFECT_SPIT_UP, EFFECT_SWALLOW, EFFECT_HAIL, + EFFECT_SNOW, EFFECT_TORMENT, EFFECT_WILL_O_WISP, EFFECT_FOLLOW_ME, @@ -1504,7 +1505,7 @@ bool32 IsMoveEncouragedToHit(u8 battlerAtk, u8 battlerDef, u16 move) // increased accuracy but don't always hit if ((AI_WeatherHasEffect() && (((gBattleWeather & B_WEATHER_RAIN) && (gBattleMoves[move].effect == EFFECT_THUNDER || gBattleMoves[move].effect == EFFECT_HURRICANE)) - || (((gBattleWeather & B_WEATHER_HAIL) && move == MOVE_BLIZZARD)))) + || (((gBattleWeather & (B_WEATHER_HAIL | B_WEATHER_SNOW)) && move == MOVE_BLIZZARD)))) || (gBattleMoves[move].effect == EFFECT_VITAL_THROW) #if B_MINIMIZE_DMG_ACC >= GEN_6 || ((gStatuses3[battlerDef] & STATUS3_MINIMIZED) && (gBattleMoves[move].flags & FLAG_DMG_MINIMIZE)) @@ -1579,7 +1580,7 @@ bool32 ShouldSetHail(u8 battler, u16 ability, u16 holdEffect) { if (!AI_WeatherHasEffect()) return FALSE; - else if (gBattleWeather & B_WEATHER_HAIL) + else if (gBattleWeather & B_WEATHER_HAIL) // dont set hail if snow is up? return FALSE; if (ability == ABILITY_SNOW_CLOAK @@ -1649,6 +1650,26 @@ bool32 ShouldSetSun(u8 battlerAtk, u16 atkAbility, u16 holdEffect) return FALSE; } +bool32 ShouldSetSnow(u8 battler, u16 ability, u16 holdEffect) // any other reasons snow should be set? +{ + if (!AI_WeatherHasEffect()) + return FALSE; + else if (gBattleWeather & B_WEATHER_SNOW) // dont set snow if hail is up? + return FALSE; + + if (ability == ABILITY_SNOW_CLOAK + || ability == ABILITY_ICE_BODY + || ability == ABILITY_FORECAST + || ability == ABILITY_SLUSH_RUSH + || IS_BATTLER_OF_TYPE(battler, TYPE_ICE) + || HasMove(battler, MOVE_BLIZZARD) + || HasMoveEffect(battler, EFFECT_AURORA_VEIL) + || HasMoveEffect(battler, EFFECT_WEATHER_BALL)) + { + return TRUE; + } + return FALSE; +} void ProtectChecks(u8 battlerAtk, u8 battlerDef, u16 move, u16 predictedMove, s16 *score) { @@ -3110,7 +3131,7 @@ bool32 ShouldSetScreen(u8 battlerAtk, u8 battlerDef, u16 moveEffect) { case EFFECT_AURORA_VEIL: // Use only in Hail and only if AI doesn't already have Reflect, Light Screen or Aurora Veil itself active. - if (gBattleWeather & B_WEATHER_HAIL + if ((gBattleWeather & (B_WEATHER_HAIL | B_WEATHER_SNOW)) && !(gSideStatuses[atkSide] & (SIDE_STATUS_REFLECT | SIDE_STATUS_LIGHTSCREEN | SIDE_STATUS_AURORA_VEIL))) return TRUE; break; @@ -3215,7 +3236,8 @@ bool32 PartnerMoveEffectIsWeather(u8 battlerAtkPartner, u16 partnerMove) && (gBattleMoves[partnerMove].effect == EFFECT_SUNNY_DAY || gBattleMoves[partnerMove].effect == EFFECT_RAIN_DANCE || gBattleMoves[partnerMove].effect == EFFECT_SANDSTORM - || gBattleMoves[partnerMove].effect == EFFECT_HAIL)) + || gBattleMoves[partnerMove].effect == EFFECT_HAIL + || gBattleMoves[partnerMove].effect == EFFECT_SNOW)) return TRUE; return FALSE; diff --git a/src/battle_anim_effects_3.c b/src/battle_anim_effects_3.c index ff5f044464af..e18dfc9027ca 100755 --- a/src/battle_anim_effects_3.c +++ b/src/battle_anim_effects_3.c @@ -5601,6 +5601,8 @@ void AnimTask_GetWeather(u8 taskId) gBattleAnimArgs[ARG_RET_ID] = ANIM_WEATHER_SANDSTORM; else if (gWeatherMoveAnim & B_WEATHER_HAIL) gBattleAnimArgs[ARG_RET_ID] = ANIM_WEATHER_HAIL; + else if (gWeatherMoveAnim & B_WEATHER_SNOW) + gBattleAnimArgs[ARG_RET_ID] = ANIM_WEATHER_SNOW; DestroyAnimVisualTask(taskId); } diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index bc541f0a013d..2cc6b45bf8a5 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -492,6 +492,7 @@ static bool8 ShouldAnimBeDoneRegardlessOfSubstitute(u8 animId) case B_ANIM_SUN_CONTINUES: case B_ANIM_SANDSTORM_CONTINUES: case B_ANIM_HAIL_CONTINUES: + case B_ANIM_SNOW_CONTINUES: case B_ANIM_SNATCH_MOVE: return TRUE; default: diff --git a/src/battle_main.c b/src/battle_main.c index 2faeb84f2c44..43b9c4a77af3 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -4665,7 +4665,7 @@ u32 GetBattlerTotalSpeedStat(u8 battlerId) speed *= 2; else if (ability == ABILITY_SAND_RUSH && gBattleWeather & B_WEATHER_SANDSTORM) speed *= 2; - else if (ability == ABILITY_SLUSH_RUSH && gBattleWeather & B_WEATHER_HAIL) + else if (ability == ABILITY_SLUSH_RUSH && (gBattleWeather & (B_WEATHER_HAIL | B_WEATHER_SNOW))) speed *= 2; } @@ -5603,7 +5603,7 @@ void SetTypeBeforeUsingMove(u16 move, u8 battlerAtk) gBattleStruct->dynamicMoveType = TYPE_ROCK | F_DYNAMIC_TYPE_2; else if (gBattleWeather & B_WEATHER_SUN && holdEffect != HOLD_EFFECT_UTILITY_UMBRELLA) gBattleStruct->dynamicMoveType = TYPE_FIRE | F_DYNAMIC_TYPE_2; - else if (gBattleWeather & B_WEATHER_HAIL) + else if (gBattleWeather & (B_WEATHER_HAIL |B_WEATHER_SNOW)) gBattleStruct->dynamicMoveType = TYPE_ICE | F_DYNAMIC_TYPE_2; else gBattleStruct->dynamicMoveType = TYPE_NORMAL | F_DYNAMIC_TYPE_2; diff --git a/src/battle_message.c b/src/battle_message.c index 21f7098f81ac..b2fb17c34b9c 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -358,8 +358,11 @@ static const u8 sText_SunlightGotBright[] = _("The sunlight got bright!"); static const u8 sText_SunlightStrong[] = _("The sunlight is strong."); static const u8 sText_SunlightFaded[] = _("The sunlight faded."); static const u8 sText_StartedHail[] = _("It started to hail!"); +static const u8 sText_StartedSnow[] = _("It started to snow!"); static const u8 sText_HailContinues[] = _("Hail continues to fall."); +static const u8 sText_SnowContinues[] = _("Snow continues to fall."); static const u8 sText_HailStopped[] = _("The hail stopped."); +static const u8 sText_SnowStopped[] = _("The snow stopped."); static const u8 sText_FailedToSpitUp[] = _("But it failed to spit up\na thing!"); static const u8 sText_FailedToSwallow[] = _("But it failed to swallow\na thing!"); static const u8 sText_WindBecameHeatWave[] = _("The wind turned into a\nHEAT WAVE!"); @@ -608,6 +611,7 @@ static const u8 sText_AnticipationActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFI static const u8 sText_ForewarnActivates[] = _("{B_SCR_ACTIVE_ABILITY} alerted {B_SCR_ACTIVE_NAME_WITH_PREFIX}\nto the {B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1}!"); static const u8 sText_IceBodyHpGain[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY}\nhealed it a little bit!"); static const u8 sText_SnowWarningHail[] = _("It started to hail!"); +static const u8 sText_SnowWarningSnow[] = _("It started to snow!"); static const u8 sText_FriskActivates[] = _("{B_ATK_NAME_WITH_PREFIX} frisked {B_DEF_NAME_WITH_PREFIX} and\nfound its {B_LAST_ITEM}!"); static const u8 sText_UnnerveEnters[] = _("The opposing team is too nervous\nto eat Berries!"); static const u8 sText_HarvestBerry[] = _("{B_ATK_NAME_WITH_PREFIX} harvested\nits {B_LAST_ITEM}!"); @@ -1134,6 +1138,9 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_STARTEDHAIL - BATTLESTRINGS_TABLE_START] = sText_StartedHail, [STRINGID_HAILCONTINUES - BATTLESTRINGS_TABLE_START] = sText_HailContinues, [STRINGID_HAILSTOPPED - BATTLESTRINGS_TABLE_START] = sText_HailStopped, + [STRINGID_STARTEDSNOW - BATTLESTRINGS_TABLE_START] = sText_StartedSnow, + [STRINGID_SNOWCONTINUES -BATTLESTRINGS_TABLE_START] = sText_SnowContinues, + [STRINGID_SNOWSTOPPED - BATTLESTRINGS_TABLE_START] = sText_SnowStopped, [STRINGID_FAILEDTOSPITUP - BATTLESTRINGS_TABLE_START] = sText_FailedToSpitUp, [STRINGID_FAILEDTOSWALLOW - BATTLESTRINGS_TABLE_START] = sText_FailedToSwallow, [STRINGID_WINDBECAMEHEATWAVE - BATTLESTRINGS_TABLE_START] = sText_WindBecameHeatWave, @@ -1354,6 +1361,7 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_FOREWARNACTIVATES - BATTLESTRINGS_TABLE_START] = sText_ForewarnActivates, [STRINGID_ICEBODYHPGAIN - BATTLESTRINGS_TABLE_START] = sText_IceBodyHpGain, [STRINGID_SNOWWARNINGHAIL - BATTLESTRINGS_TABLE_START] = sText_SnowWarningHail, + [STRINGID_SNOWWARNINGSNOW - BATTLESTRINGS_TABLE_START] = sText_SnowWarningSnow, [STRINGID_FRISKACTIVATES - BATTLESTRINGS_TABLE_START] = sText_FriskActivates, [STRINGID_UNNERVEENTERS - BATTLESTRINGS_TABLE_START] = sText_UnnerveEnters, [STRINGID_HARVESTBERRY - BATTLESTRINGS_TABLE_START] = sText_HarvestBerry, @@ -1543,12 +1551,13 @@ const u16 gMoveWeatherChangeStringIds[] = [B_MSG_STARTED_SANDSTORM] = STRINGID_SANDSTORMBREWED, [B_MSG_STARTED_SUNLIGHT] = STRINGID_SUNLIGHTGOTBRIGHT, [B_MSG_STARTED_HAIL] = STRINGID_STARTEDHAIL, + [B_MSG_STARTED_SNOW] = STRINGID_STARTEDSNOW, }; const u16 gSandStormHailContinuesStringIds[] = { [B_MSG_SANDSTORM] = STRINGID_SANDSTORMRAGES, - [B_MSG_HAIL] = STRINGID_HAILCONTINUES + [B_MSG_HAIL] = STRINGID_HAILCONTINUES, }; const u16 gSandStormHailDmgStringIds[] = @@ -1560,7 +1569,7 @@ const u16 gSandStormHailDmgStringIds[] = const u16 gSandStormHailEndStringIds[] = { [B_MSG_SANDSTORM] = STRINGID_SANDSTORMSUBSIDED, - [B_MSG_HAIL] = STRINGID_HAILSTOPPED + [B_MSG_HAIL] = STRINGID_HAILSTOPPED, }; const u16 gRainContinuesStringIds[] = @@ -1570,6 +1579,12 @@ const u16 gRainContinuesStringIds[] = [B_MSG_RAIN_STOPPED] = STRINGID_RAINSTOPPED }; +const u16 gSnowContinuesStringIds[] = +{ + [B_MSG_SNOW_CONTINUES] = STRINGID_SNOWCONTINUES, + [B_MSG_SNOW_STOPPED] = STRINGID_SNOWSTOPPED, +}; + const u16 gProtectLikeUsedStringIds[] = { [B_MSG_PROTECTED_ITSELF] = STRINGID_PKMNPROTECTEDITSELF2, diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index a5613074831c..f9edb2170819 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -1809,7 +1809,7 @@ static bool32 AccuracyCalcHelper(u16 move) return TRUE; } #if B_BLIZZARD_HAIL >= GEN_4 - else if ((gBattleWeather & B_WEATHER_HAIL) && move == MOVE_BLIZZARD) + else if ((gBattleWeather & (B_WEATHER_HAIL | B_WEATHER_SNOW)) && move == MOVE_BLIZZARD) { // thunder/hurricane ignore acc checks in rain unless target is holding utility umbrella JumpIfMoveFailed(7, move); @@ -1889,7 +1889,7 @@ u32 GetTotalAccuracy(u32 battlerAtk, u32 battlerDef, u32 move, u32 atkAbility, u if (defAbility == ABILITY_SAND_VEIL && WEATHER_HAS_EFFECT && gBattleWeather & B_WEATHER_SANDSTORM) calc = (calc * 80) / 100; // 1.2 sand veil loss - else if (defAbility == ABILITY_SNOW_CLOAK && WEATHER_HAS_EFFECT && gBattleWeather & B_WEATHER_HAIL) + else if (defAbility == ABILITY_SNOW_CLOAK && WEATHER_HAS_EFFECT && (gBattleWeather & (B_WEATHER_HAIL | B_WEATHER_SNOW))) calc = (calc * 80) / 100; // 1.2 snow cloak loss else if (defAbility == ABILITY_TANGLED_FEET && gBattleMons[battlerDef].status2 & STATUS2_CONFUSION) calc = (calc * 50) / 100; // 1.5 tangled feet loss @@ -5185,7 +5185,8 @@ static void Cmd_playanimation(void) else if (animId == B_ANIM_RAIN_CONTINUES || animId == B_ANIM_SUN_CONTINUES || animId == B_ANIM_SANDSTORM_CONTINUES - || animId == B_ANIM_HAIL_CONTINUES) + || animId == B_ANIM_HAIL_CONTINUES + || animId == B_ANIM_SNOW_CONTINUES) { BtlController_EmitBattleAnimation(BUFFER_A, animId, *argPtr); MarkBattlerForControllerExec(gActiveBattler); @@ -5234,7 +5235,8 @@ static void Cmd_playanimation_var(void) else if (*animIdPtr == B_ANIM_RAIN_CONTINUES || *animIdPtr == B_ANIM_SUN_CONTINUES || *animIdPtr == B_ANIM_SANDSTORM_CONTINUES - || *animIdPtr == B_ANIM_HAIL_CONTINUES) + || *animIdPtr == B_ANIM_HAIL_CONTINUES + || *animIdPtr == B_ANIM_SNOW_CONTINUES) { BtlController_EmitBattleAnimation(BUFFER_A, *animIdPtr, *argPtr); MarkBattlerForControllerExec(gActiveBattler); @@ -10300,7 +10302,7 @@ static void Cmd_various(void) { VARIOUS_ARGS(); if (gSideStatuses[GET_BATTLER_SIDE(gActiveBattler)] & SIDE_STATUS_AURORA_VEIL - || !(WEATHER_HAS_EFFECT && gBattleWeather & B_WEATHER_HAIL)) + || !(WEATHER_HAS_EFFECT && gBattleWeather & (B_WEATHER_HAIL | B_WEATHER_SNOW))) { gMoveResultFlags |= MOVE_RESULT_MISSED; gBattleCommunication[MULTISTRING_CHOOSER] = 0; @@ -16620,3 +16622,20 @@ void BS_ItemRestorePP(void) { PREPARE_SPECIES_BUFFER(gBattleTextBuff1, GetMonData(mon, MON_DATA_SPECIES)); gBattlescriptCurrInstr = cmd->nextInstr; } + +void BS_SetSnow(void) +{ + NATIVE_ARGS(); + + if (!TryChangeBattleWeather(gBattlerAttacker, ENUM_WEATHER_SNOW, FALSE)) + { + gMoveResultFlags |= MOVE_RESULT_MISSED; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WEATHER_FAILED; + + } + else + { + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STARTED_SNOW; + } + gBattlescriptCurrInstr = cmd->nextInstr; +} \ No newline at end of file diff --git a/src/battle_tv.c b/src/battle_tv.c index 10c2144ccdb2..0ed75c1768e5 100644 --- a/src/battle_tv.c +++ b/src/battle_tv.c @@ -251,6 +251,7 @@ static const u16 sPoints_MoveEffect[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_SWALLOW] = 3, // [EFFECT_UNUSED_A3] = 1, [EFFECT_HAIL] = 4, + [EFFECT_SNOW] = 4, [EFFECT_TORMENT] = 7, [EFFECT_FLATTER] = 7, [EFFECT_WILL_O_WISP] = 5, @@ -1769,6 +1770,6 @@ static void AddPointsBasedOnWeather(u16 weatherFlags, u16 moveId, u8 moveSlot) AddMovePoints(PTS_SUN, moveId, moveSlot, 0); else if (weatherFlags & B_WEATHER_SANDSTORM) AddMovePoints(PTS_SANDSTORM, moveId, moveSlot, 0); - else if (weatherFlags & B_WEATHER_HAIL) + else if (weatherFlags & (B_WEATHER_HAIL | B_WEATHER_SNOW)) AddMovePoints(PTS_HAIL, moveId, moveSlot, 0); } diff --git a/src/battle_util.c b/src/battle_util.c index b89b9976ee99..594d41211057 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -2032,6 +2032,7 @@ enum ENDTURN_SANDSTORM, ENDTURN_SUN, ENDTURN_HAIL, + ENDTURN_SNOW, ENDTURN_GRAVITY, ENDTURN_WATER_SPORT, ENDTURN_MUD_SPORT, @@ -2394,6 +2395,27 @@ u8 DoFieldEndTurnEffects(void) } gBattleStruct->turnCountersTracker++; break; + case ENDTURN_SNOW: + if (gBattleWeather & B_WEATHER_SNOW) + { + if (!(gBattleWeather & B_WEATHER_SNOW_PERMANENT)) + { + if (--gWishFutureKnock.weatherDuration == 0) + { + gBattleWeather &= ~B_WEATHER_SNOW_TEMPORARY; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SNOW_STOPPED; + } + } + else + { + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SNOW_CONTINUES; + } + + BattleScriptExecute(BattleScript_SnowContinuesOrEnds); + effect++; + } + gBattleStruct->turnCountersTracker++; + break; case ENDTURN_TRICK_ROOM: if (gFieldStatuses & STATUS_FIELD_TRICK_ROOM && --gFieldTimers.trickRoomTimer == 0) { @@ -3995,7 +4017,7 @@ u8 TryWeatherFormChange(u8 battler) } } #endif - else if (holdEffect == HOLD_EFFECT_UTILITY_UMBRELLA || (!(gBattleWeather & (B_WEATHER_RAIN | B_WEATHER_SUN | B_WEATHER_HAIL)) && !IS_BATTLER_OF_TYPE(battler, TYPE_NORMAL))) + else if (holdEffect == HOLD_EFFECT_UTILITY_UMBRELLA || (!(gBattleWeather & (B_WEATHER_RAIN | B_WEATHER_SUN | B_WEATHER_HAIL | B_WEATHER_SNOW)) && !IS_BATTLER_OF_TYPE(battler, TYPE_NORMAL))) { SET_BATTLER_TYPE(battler, TYPE_NORMAL); ret = CASTFORM_NORMAL + 1; @@ -4010,7 +4032,7 @@ u8 TryWeatherFormChange(u8 battler) SET_BATTLER_TYPE(battler, TYPE_WATER); ret = CASTFORM_WATER + 1; } - else if (gBattleWeather & B_WEATHER_HAIL && !IS_BATTLER_OF_TYPE(battler, TYPE_ICE)) + else if (gBattleWeather & (B_WEATHER_HAIL | B_WEATHER_SNOW) && !IS_BATTLER_OF_TYPE(battler, TYPE_ICE)) { SET_BATTLER_TYPE(battler, TYPE_ICE); ret = CASTFORM_ICE + 1; @@ -4046,6 +4068,7 @@ static const u16 sWeatherFlagsInfo[][3] = [ENUM_WEATHER_SANDSTORM] = {B_WEATHER_SANDSTORM_TEMPORARY, B_WEATHER_SANDSTORM_PERMANENT, HOLD_EFFECT_SMOOTH_ROCK}, [ENUM_WEATHER_HAIL] = {B_WEATHER_HAIL_TEMPORARY, B_WEATHER_HAIL_PERMANENT, HOLD_EFFECT_ICY_ROCK}, [ENUM_WEATHER_STRONG_WINDS] = {B_WEATHER_STRONG_WINDS, B_WEATHER_STRONG_WINDS, HOLD_EFFECT_NONE}, + [ENUM_WEATHER_SNOW] = {B_WEATHER_SNOW_TEMPORARY, B_WEATHER_SNOW_PERMANENT, HOLD_EFFECT_ICY_ROCK}, }; static void ShouldChangeFormInWeather(u8 battler) @@ -4066,7 +4089,6 @@ static void ShouldChangeFormInWeather(u8 battler) bool32 TryChangeBattleWeather(u8 battler, u32 weatherEnumId, bool32 viaAbility) { u16 battlerAbility = GetBattlerAbility(battler); - if (gBattleWeather & B_WEATHER_PRIMAL_ANY && battlerAbility != ABILITY_DESOLATE_LAND && battlerAbility != ABILITY_PRIMORDIAL_SEA @@ -4092,7 +4114,6 @@ bool32 TryChangeBattleWeather(u8 battler, u32 weatherEnumId, bool32 viaAbility) ShouldChangeFormInWeather(battler); return TRUE; } - return FALSE; } @@ -4642,11 +4663,19 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move } break; case ABILITY_SNOW_WARNING: + #if B_SNOW_WARNING >= GEN_9 + if (TryChangeBattleWeather(battler, ENUM_WEATHER_SNOW, TRUE)) + { + BattleScriptPushCursorAndCallback(BattleScript_SnowWarningActivatesSnow); + effect++; + } + #else if (TryChangeBattleWeather(battler, ENUM_WEATHER_HAIL, TRUE)) { - BattleScriptPushCursorAndCallback(BattleScript_SnowWarningActivates); + BattleScriptPushCursorAndCallback(BattleScript_SnowWarningActivatesHail); effect++; } + #endif else if (gBattleWeather & B_WEATHER_PRIMAL_ANY && WEATHER_HAS_EFFECT && !gSpecialStatuses[battler].switchInAbilityDone) { gSpecialStatuses[battler].switchInAbilityDone = TRUE; @@ -6132,7 +6161,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move } break; case ABILITY_ICE_FACE: - if (IsBattlerWeatherAffected(battler, B_WEATHER_HAIL) + if (IsBattlerWeatherAffected(battler, B_WEATHER_HAIL | B_WEATHER_SNOW) && gBattleMons[battler].species == SPECIES_EISCUE_NOICE_FACE && !(gBattleMons[battler].status2 & STATUS2_TRANSFORMED) && gBattleStruct->allowedToChangeFormInWeather[gBattlerPartyIndexes[battler]][GetBattlerSide(battler)]) @@ -9087,7 +9116,7 @@ static u32 CalcMoveBasePowerAfterModifiers(u16 move, u8 battlerAtk, u8 battlerDe MulModifier(&modifier, UQ_4_12(2.0)); break; case EFFECT_SOLAR_BEAM: - if (IsBattlerWeatherAffected(battlerAtk, (B_WEATHER_HAIL | B_WEATHER_SANDSTORM | B_WEATHER_RAIN))) + if (IsBattlerWeatherAffected(battlerAtk, (B_WEATHER_HAIL | B_WEATHER_SANDSTORM | B_WEATHER_RAIN | B_WEATHER_SNOW))) MulModifier(&modifier, UQ_4_12(0.5)); break; case EFFECT_STOMPING_TANTRUM: @@ -9495,6 +9524,12 @@ static u32 CalcDefenseStat(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, // sandstorm sp.def boost for rock types if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_ROCK) && gBattleWeather & B_WEATHER_SANDSTORM && WEATHER_HAS_EFFECT && !usesDefStat) MulModifier(&modifier, UQ_4_12(1.5)); + // snow def boost for ice types + if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_ICE) && gBattleWeather & B_WEATHER_SNOW && WEATHER_HAS_EFFECT && usesDefStat) + MulModifier(&modifier, UQ_4_12(1.5)); + + if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_ICE) && gBattleWeather & B_WEATHER_SNOW && WEATHER_HAS_EFFECT && usesDefStat) + MulModifier(&modifier, UQ_4_12(1.5)); // The defensive stats of a Player's Pokémon are boosted by x1.1 (+10%) if they have the 5th badge and 7th badges. // Having the 5th badge boosts physical defense while having the 7th badge boosts special defense. diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index 4a89222a966c..5cb428d9a3ed 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -13330,7 +13330,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_SNOWSCAPE] = { - .effect = EFFECT_HAIL, + .effect = EFFECT_SNOW, .power = 0, .type = TYPE_ICE, .accuracy = 0, From c7d39e561dd638e9da7b96768fb51c085ea5b58b Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Sat, 29 Apr 2023 20:41:54 +0200 Subject: [PATCH 333/428] Clarify weather function --- src/battle_script_commands.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index ccbb488d2e01..aead0fe3c243 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -15147,6 +15147,8 @@ static void Cmd_doweatherformchangeanimation(void) static void Cmd_tryweatherformdatachange(void) { CMD_ARGS(); + + // removed in favor of new form system } // Water and Mud Sport From 62ec4989f24644da1296b46017f7975780b89716 Mon Sep 17 00:00:00 2001 From: CallmeEchoo <65783283+CallmeEchoo@users.noreply.github.com> Date: Sun, 30 Apr 2023 02:35:09 +0200 Subject: [PATCH 334/428] spelling --- include/config/battle.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/config/battle.h b/include/config/battle.h index e3975e7199bb..0605ad43e5d0 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -118,7 +118,7 @@ #define B_SYMBIOSIS_GEMS GEN_LATEST // In Gen7+, Symbiosis passes an item after a gem-boosted attack. Previously, items are passed before the gem-boosted attack hits, making the item effect apply. #define B_CHECK_IF_CHARGED_UP TRUE // If set to TRUE, certain abilities such as Electromorphosis WILL check if the STATUS3_CHARGED_UP status flag is applied. #define B_ABSORBING_ABILITY_STRING GEN_LATEST // In Gen5+, the abilities that absorb moves of a certain type use a generic string for stat increases and decreases. -#define B_SNOW_WARNING GEN_9 // In Gen9+, Snowwarning will summon snow instead of hail. +#define B_SNOW_WARNING GEN_9 // In Gen9+, Snow Warning will summon snow instead of hail. // Item settings #define B_HP_BERRIES GEN_LATEST // In Gen4+, berries which restore hp activate immediately after HP drops to half. In Gen3, the effect occurs at the end of the turn. From b30dad3e7aa4655ccb659cbbe3e909253d49be57 Mon Sep 17 00:00:00 2001 From: ghoulslash <41651341+ghoulslash@users.noreply.github.com> Date: Sat, 29 Apr 2023 21:56:23 -0400 Subject: [PATCH 335/428] Fix anger shell activating when fainted (#2945) Co-authored-by: ghoulslash --- src/battle_util.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/battle_util.c b/src/battle_util.c index b89b9976ee99..bf332e64df39 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -5767,6 +5767,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) && !gProtectStructs[gBattlerAttacker].confusionSelfDmg && TARGET_TURN_DAMAGED + && IsBattlerAlive(gBattlerTarget) && (gBattleMons[gBattlerTarget].hp <= gBattleMons[gBattlerTarget].maxHP / 2) && !(TestSheerForceFlag(gBattlerAttacker, gCurrentMove))) { From acf4529d8b48587a7033e7cf71251ec8eb97ff06 Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Sun, 30 Apr 2023 11:25:48 +0200 Subject: [PATCH 336/428] Allow Egg Move transfer for non-eggs --- include/config/pokemon.h | 2 +- include/pokemon.h | 1 + src/daycare.c | 50 ++++++++++++++++++++++++++++++++++++++++ src/pokemon.c | 3 +-- 4 files changed, 53 insertions(+), 3 deletions(-) diff --git a/include/config/pokemon.h b/include/config/pokemon.h index 6247217465ce..d6e239515e7a 100644 --- a/include/config/pokemon.h +++ b/include/config/pokemon.h @@ -16,7 +16,7 @@ #define P_MOTHER_EGG_MOVE_INHERITANCE GEN_LATEST // Since Gen 6, the mother can also pass down Egg Moves. #define P_NATURE_INHERITANCE GEN_LATEST // In Gen 3, Everstone grants Ditto and mothers a 50% chance to pass on Nature. Since Gen 4, anyone can pass on nature. Since Gen 5, the chance is 100%. #define P_ABILITY_INHERITANCE GEN_LATEST // TODO: In B2W2, a female Pokémon has an 80% chance of passing down their ability if bred with a male. Since Gen 6, the chance is 80% for normal ability and 60% for Hidden Ability, and anyone can pass down their abilities if bred with Ditto. NOTE: BW's effect: 60% chance to pass down HA and random for normal ability has been omitted. -#define P_EGG_MOVE_TRANSFER GEN_LATEST // TODO: Starting in Gen 8, if two Pokémon of the same species are together in the Daycare, one knows an Egg Move, and the other has an empty slot, the other Pokémon will receive the Egg Move in the empty slot. +#define P_EGG_MOVE_TRANSFER GEN_LATEST // Starting in Gen 8, if two Pokémon of the same species are together in the Daycare, one knows an Egg Move, and the other has an empty slot, the other Pokémon will receive the Egg Move in the empty slot. In Gen 9, if a Pokémon holds a Mirror Herb, it will receive Egg Moves from the other regardless of species. // Species-specific settings #define P_SHEDINJA_BALL GEN_LATEST // Since Gen 4, Shedinja requires a Poké Ball for its evolution. In Gen 3, Shedinja inherits Nincada's Ball. diff --git a/include/pokemon.h b/include/pokemon.h index 581677cae716..2394861060cd 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -442,6 +442,7 @@ void BoxMonToMon(const struct BoxPokemon *src, struct Pokemon *dest); u8 GetLevelFromMonExp(struct Pokemon *mon); u8 GetLevelFromBoxMonExp(struct BoxPokemon *boxMon); u16 GiveMoveToMon(struct Pokemon *mon, u16 move); +u16 GiveMoveToBoxMon(struct BoxPokemon *boxMon, u16 move); u16 GiveMoveToBattleMon(struct BattlePokemon *mon, u16 move); void SetMonMoveSlot(struct Pokemon *mon, u16 move, u8 slot); void SetBattleMonMoveSlot(struct BattlePokemon *mon, u16 move, u8 slot); diff --git a/src/daycare.c b/src/daycare.c index 3feabe9ba917..a058ce9052c8 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -34,6 +34,7 @@ static void SetInitialEggData(struct Pokemon *mon, u16 species, struct DayCare * static u8 GetDaycareCompatibilityScore(struct DayCare *daycare); static void DaycarePrintMonInfo(u8 windowId, u32 daycareSlotId, u8 y); static u8 ModifyBreedingScoreForOvalCharm(u8 score); +static u8 GetEggMoves(struct Pokemon *pokemon, u16 *eggMoves); // RAM buffers used to assist with BuildEggMoveset() EWRAM_DATA static u16 sHatchedEggLevelUpMoves[EGG_LVL_UP_MOVES_ARRAY_COUNT] = {0}; @@ -164,6 +165,51 @@ static s8 Daycare_FindEmptySpot(struct DayCare *daycare) return -1; } +static void TransferEggMoves(void) +{ + u32 i, j, k, l; + u16 numEggMoves; + struct Pokemon mon; + + for (i = 0; i < DAYCARE_MON_COUNT; i++) + { + if (!GetBoxMonData(&gSaveBlock1Ptr->daycare.mons[i].mon, MON_DATA_SANITY_HAS_SPECIES)) + continue; + + // Get list of egg moves for mon + BoxMonToMon(&gSaveBlock1Ptr->daycare.mons[i].mon, &mon); + for (j = 0; j < EGG_MOVES_ARRAY_COUNT; j++) + sHatchedEggEggMoves[j] = MOVE_NONE; + numEggMoves = GetEggMoves(&mon, sHatchedEggEggMoves); + for (j = 0; j < numEggMoves; j++) + { + // Go through other Daycare mons + for (k = 0; k < DAYCARE_MON_COUNT; k++) + { + if (k == i || !GetBoxMonData(&gSaveBlock1Ptr->daycare.mons[k].mon, MON_DATA_SANITY_HAS_SPECIES)) + continue; + + // Check if you can inherit from them + if (GetBoxMonData(&gSaveBlock1Ptr->daycare.mons[k].mon, MON_DATA_SPECIES) != GetBoxMonData(&gSaveBlock1Ptr->daycare.mons[i].mon, MON_DATA_SPECIES) + #if P_EGG_MOVE_TRANSFER >= GEN_9 + && GetBoxMonData(&gSaveBlock1Ptr->daycare.mons[i].mon, MON_DATA_HELD_ITEM) != ITEM_MIRROR_HERB + #endif + ) + continue; + + for (l = 0; l < MAX_MON_MOVES; l++) + { + if (GetBoxMonData(&gSaveBlock1Ptr->daycare.mons[k].mon, MON_DATA_MOVE1 + l) != sHatchedEggEggMoves[j]) + continue; + + if (GiveMoveToBoxMon(&gSaveBlock1Ptr->daycare.mons[i].mon, sHatchedEggEggMoves[j]) == MON_HAS_MAX_MOVES) + break; + } + } + } + } +} + static void StorePokemonInDaycare(struct Pokemon *mon, struct DaycareMon *daycareMon) { if (MonHasMail(mon)) @@ -186,6 +232,10 @@ static void StorePokemonInDaycare(struct Pokemon *mon, struct DaycareMon *daycar ZeroMonData(mon); CompactPartySlots(); CalculatePlayerPartyCount(); + +#if P_EGG_MOVE_TRANSFER >= GEN_8 + TransferEggMoves(); +#endif } static void StorePokemonInEmptyDaycareSlot(struct Pokemon *mon, struct DayCare *daycare) diff --git a/src/pokemon.c b/src/pokemon.c index e82cb98c30b5..5b83e9748829 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -63,7 +63,6 @@ static union PokemonSubstruct *GetSubstruct(struct BoxPokemon *boxMon, u32 perso static void EncryptBoxMon(struct BoxPokemon *boxMon); static void DecryptBoxMon(struct BoxPokemon *boxMon); static void Task_PlayMapChosenOrBattleBGM(u8 taskId); -static u16 GiveMoveToBoxMon(struct BoxPokemon *boxMon, u16 move); static bool8 ShouldSkipFriendshipChange(void); static void RemoveIVIndexFromList(u8 *ivs, u8 selectedIv); void TrySpecialOverworldEvo(); @@ -4194,7 +4193,7 @@ u16 GiveMoveToMon(struct Pokemon *mon, u16 move) return GiveMoveToBoxMon(&mon->box, move); } -static u16 GiveMoveToBoxMon(struct BoxPokemon *boxMon, u16 move) +u16 GiveMoveToBoxMon(struct BoxPokemon *boxMon, u16 move) { s32 i; for (i = 0; i < MAX_MON_MOVES; i++) From 21fa91b80b76b8e4b67b8ea0df45c94bc7d078de Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Sun, 30 Apr 2023 11:45:24 +0200 Subject: [PATCH 337/428] Add ClearHatchedEggMoves per SBird's suggestion Co-Authored-By: Philipp AUER --- src/daycare.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/daycare.c b/src/daycare.c index a058ce9052c8..2997578d5fb9 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -165,6 +165,14 @@ static s8 Daycare_FindEmptySpot(struct DayCare *daycare) return -1; } +static void ClearHatchedEggMoves(void) +{ + u16 i; + + for (i = 0; i < EGG_MOVES_ARRAY_COUNT; i++) + sHatchedEggEggMoves[i] = MOVE_NONE; +} + static void TransferEggMoves(void) { u32 i, j, k, l; @@ -176,10 +184,8 @@ static void TransferEggMoves(void) if (!GetBoxMonData(&gSaveBlock1Ptr->daycare.mons[i].mon, MON_DATA_SANITY_HAS_SPECIES)) continue; - // Get list of egg moves for mon BoxMonToMon(&gSaveBlock1Ptr->daycare.mons[i].mon, &mon); - for (j = 0; j < EGG_MOVES_ARRAY_COUNT; j++) - sHatchedEggEggMoves[j] = MOVE_NONE; + ClearHatchedEggMoves(); numEggMoves = GetEggMoves(&mon, sHatchedEggEggMoves); for (j = 0; j < numEggMoves; j++) { @@ -753,8 +759,7 @@ static void BuildEggMoveset(struct Pokemon *egg, struct BoxPokemon *father, stru sHatchedEggFatherMoves[i] = MOVE_NONE; sHatchedEggFinalMoves[i] = MOVE_NONE; } - for (i = 0; i < EGG_MOVES_ARRAY_COUNT; i++) - sHatchedEggEggMoves[i] = MOVE_NONE; + ClearHatchedEggMoves(); for (i = 0; i < EGG_LVL_UP_MOVES_ARRAY_COUNT; i++) sHatchedEggLevelUpMoves[i] = MOVE_NONE; From 8f75844ece7546df6b06db53302685f458c1f8b9 Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Sun, 30 Apr 2023 12:58:18 +0200 Subject: [PATCH 338/428] Add Ability inheritance --- include/config/pokemon.h | 2 +- src/daycare.c | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/include/config/pokemon.h b/include/config/pokemon.h index d6e239515e7a..a65eddb73c35 100644 --- a/include/config/pokemon.h +++ b/include/config/pokemon.h @@ -15,7 +15,7 @@ #define P_TM_INHERITANCE GEN_LATEST // Since Gen 6, the father no longer passes down TMs to the baby. #define P_MOTHER_EGG_MOVE_INHERITANCE GEN_LATEST // Since Gen 6, the mother can also pass down Egg Moves. #define P_NATURE_INHERITANCE GEN_LATEST // In Gen 3, Everstone grants Ditto and mothers a 50% chance to pass on Nature. Since Gen 4, anyone can pass on nature. Since Gen 5, the chance is 100%. -#define P_ABILITY_INHERITANCE GEN_LATEST // TODO: In B2W2, a female Pokémon has an 80% chance of passing down their ability if bred with a male. Since Gen 6, the chance is 80% for normal ability and 60% for Hidden Ability, and anyone can pass down their abilities if bred with Ditto. NOTE: BW's effect: 60% chance to pass down HA and random for normal ability has been omitted. +#define P_ABILITY_INHERITANCE GEN_LATEST // In B2W2, a female Pokémon has an 80% chance of passing down their ability if bred with a male. Since Gen 6, the chance is 80% for normal ability and 60% for Hidden Ability, and anyone can pass down their abilities if bred with Ditto. NOTE: BW's effect: 60% chance to pass down HA and random for normal ability has been omitted. #define P_EGG_MOVE_TRANSFER GEN_LATEST // Starting in Gen 8, if two Pokémon of the same species are together in the Daycare, one knows an Egg Move, and the other has an empty slot, the other Pokémon will receive the Egg Move in the empty slot. In Gen 9, if a Pokémon holds a Mirror Herb, it will receive Egg Moves from the other regardless of species. // Species-specific settings diff --git a/src/daycare.c b/src/daycare.c index 2997578d5fb9..08b9ec23fc67 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -712,6 +712,35 @@ static void InheritPokeball(struct Pokemon *egg, struct BoxPokemon *father, stru SetMonData(egg, MON_DATA_POKEBALL, &inheritBall); } +static void InheritAbility(struct Pokemon *egg, struct BoxPokemon *father, struct BoxPokemon *mother) +{ + u8 fatherAbility = GetBoxMonData(father, MON_DATA_ABILITY_NUM); + u8 motherAbility = GetBoxMonData(mother, MON_DATA_ABILITY_NUM); + u8 motherSpecies = GetBoxMonData(mother, MON_DATA_SPECIES); + u8 inheritAbility = motherAbility; + + if (motherSpecies == SPECIES_DITTO) + #if P_ABILITY_INHERITANCE < GEN_6 + return; + #else + inheritAbility = fatherAbility; + #endif + + if (inheritAbility < 2 && (Random() % 10 < 8)) + { + SetMonData(egg, MON_DATA_ABILITY_NUM, &inheritAbility); + } +#if P_ABILITY_INHERITANCE < GEN_6 + else if (Random() % 10 < 8) +#else + else if (Random() % 10 < 6) +#endif + { + // Hidden Abilities have a different chance of being passed down + SetMonData(egg, MON_DATA_ABILITY_NUM, &inheritAbility); + } +} + // Counts the number of egg moves a pokemon learns and stores the moves in // the given array. static u8 GetEggMoves(struct Pokemon *pokemon, u16 *eggMoves) @@ -1000,6 +1029,9 @@ static void _GiveEggFromDaycare(struct DayCare *daycare) InheritIVs(&egg, daycare); InheritPokeball(&egg, &daycare->mons[parentSlots[1]].mon, &daycare->mons[parentSlots[0]].mon); BuildEggMoveset(&egg, &daycare->mons[parentSlots[1]].mon, &daycare->mons[parentSlots[0]].mon); +#if P_ABILITY_INHERITANCE >= GEN_8 + InheritAbility(&egg, &daycare->mons[parentSlots[1]].mon, &daycare->mons[parentSlots[0]].mon); +#endif GiveMoveIfItem(&egg, daycare); From dc368727ea458463b74aef280a21069e1e442838 Mon Sep 17 00:00:00 2001 From: CallmeEchoo <65783283+CallmeEchoo@users.noreply.github.com> Date: Sun, 30 Apr 2023 15:11:35 +0200 Subject: [PATCH 339/428] remove stupidity for some reason I added the 50% def increase in snow check twice? this removes that --- src/battle_util.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/battle_util.c b/src/battle_util.c index 594d41211057..45208c0baf29 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -9528,9 +9528,6 @@ static u32 CalcDefenseStat(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_ICE) && gBattleWeather & B_WEATHER_SNOW && WEATHER_HAS_EFFECT && usesDefStat) MulModifier(&modifier, UQ_4_12(1.5)); - if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_ICE) && gBattleWeather & B_WEATHER_SNOW && WEATHER_HAS_EFFECT && usesDefStat) - MulModifier(&modifier, UQ_4_12(1.5)); - // The defensive stats of a Player's Pokémon are boosted by x1.1 (+10%) if they have the 5th badge and 7th badges. // Having the 5th badge boosts physical defense while having the 7th badge boosts special defense. if (ShouldGetStatBadgeBoost(FLAG_BADGE05_GET, battlerDef) && IS_MOVE_PHYSICAL(move)) From 176c6750aa9ce07d72647dc9487234421626a82d Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Sun, 30 Apr 2023 16:02:18 +0200 Subject: [PATCH 340/428] Set new animations as default (#2964) --- include/config/battle.h | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/include/config/battle.h b/include/config/battle.h index d1d4fc52fcb8..4b3caf4abedb 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -197,21 +197,21 @@ #define B_OBEDIENCE_MECHANICS GEN_LATEST // In PLA+ (here Gen8+), obedience restrictions also apply to non-outsider Pokémon, albeit based on their level met rather than actual level // Animation Settings -#define B_NEW_SWORD_PARTICLE FALSE // If set to TRUE, it updates Swords Dance's particle. -#define B_NEW_LEECH_SEED_PARTICLE FALSE // If set to TRUE, it updates Leech Seed's animation particle. -#define B_NEW_HORN_ATTACK_PARTICLE FALSE // If set to TRUE, it updates Horn Attack's horn particle. +#define B_NEW_SWORD_PARTICLE TRUE // If set to TRUE, it updates Swords Dance's particle. +#define B_NEW_LEECH_SEED_PARTICLE TRUE // If set to TRUE, it updates Leech Seed's animation particle. +#define B_NEW_HORN_ATTACK_PARTICLE TRUE // If set to TRUE, it updates Horn Attack's horn particle. #define B_NEW_ROCKS_PARTICLE TRUE // If set to TRUE, it updates rock particles. -#define B_NEW_LEAF_PARTICLE FALSE // If set to TRUE, it updates leaf particle. -#define B_NEW_EMBER_PARTICLES FALSE // If set to TRUE, it updates Ember's fire particle. -#define B_NEW_MEAN_LOOK_PARTICLE FALSE // If set to TRUE, it updates Mean Look's eye particle. -#define B_NEW_TEETH_PARTICLE FALSE // If set to TRUE, it updates Bite/Crunch teeth particle. -#define B_NEW_HANDS_FEET_PARTICLE FALSE // If set to TRUE, it updates chop/kick/punch particles. -#define B_NEW_SPIKES_PARTICLE FALSE // If set to TRUE, it updates Spikes particle. -#define B_NEW_FLY_BUBBLE_PARTICLE FALSE // If set to TRUE, it updates Fly's 'bubble' particle. -#define B_NEW_CURSE_NAIL_PARTICLE FALSE // If set to TRUE, it updates Curse's nail. -#define B_NEW_BATON_PASS_BALL_PARTICLE FALSE // If set to TRUE, it updates Baton Pass' Poké Ball sprite. -#define B_NEW_MORNING_SUN_STAR_PARTICLE FALSE // If set to TRUE, it updates Morning Sun's star particles. -#define B_NEW_IMPACT_PALETTE FALSE // If set to TRUE, it updates the basic 'hit' palette. -#define B_NEW_SURF_PARTICLE_PALETTE FALSE // If set to TRUE, it updates Surf's wave palette. +#define B_NEW_LEAF_PARTICLE TRUE // If set to TRUE, it updates leaf particle. +#define B_NEW_EMBER_PARTICLES TRUE // If set to TRUE, it updates Ember's fire particle. +#define B_NEW_MEAN_LOOK_PARTICLE TRUE // If set to TRUE, it updates Mean Look's eye particle. +#define B_NEW_TEETH_PARTICLE TRUE // If set to TRUE, it updates Bite/Crunch teeth particle. +#define B_NEW_HANDS_FEET_PARTICLE TRUE // If set to TRUE, it updates chop/kick/punch particles. +#define B_NEW_SPIKES_PARTICLE TRUE // If set to TRUE, it updates Spikes particle. +#define B_NEW_FLY_BUBBLE_PARTICLE TRUE // If set to TRUE, it updates Fly's 'bubble' particle. +#define B_NEW_CURSE_NAIL_PARTICLE TRUE // If set to TRUE, it updates Curse's nail. +#define B_NEW_BATON_PASS_BALL_PARTICLE TRUE // If set to TRUE, it updates Baton Pass' Poké Ball sprite. +#define B_NEW_MORNING_SUN_STAR_PARTICLE TRUE // If set to TRUE, it updates Morning Sun's star particles. +#define B_NEW_IMPACT_PALETTE TRUE // If set to TRUE, it updates the basic 'hit' palette. +#define B_NEW_SURF_PARTICLE_PALETTE TRUE // If set to TRUE, it updates Surf's wave palette. #endif // GUARD_CONFIG_BATTLE_H From 2d6282fece6327275b26e8697cc0f949d94a2c2f Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Sun, 30 Apr 2023 16:46:21 +0200 Subject: [PATCH 341/428] Fix for Burn Up/Double Shock (#2962) --- data/battle_scripts_1.s | 10 ++++--- test/move_effect_burn_up.c | 53 +++++++++++++++++++++++++++++++++ test/move_effect_double_shock.c | 53 +++++++++++++++++++++++++++++++++ 3 files changed, 112 insertions(+), 4 deletions(-) create mode 100644 test/move_effect_burn_up.c create mode 100644 test/move_effect_double_shock.c diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index be20f6809d95..42219c7ee29c 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -1444,8 +1444,9 @@ BattleScript_EffectBurnUp: goto BattleScript_ButItFailed BattleScript_BurnUpWorks: - setmoveeffect MOVE_EFFECT_BURN_UP | MOVE_EFFECT_CERTAIN - goto BattleScript_EffectHit + setmoveeffect MOVE_EFFECT_BURN_UP | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + goto BattleScript_HitFromCritCalc BattleScript_BurnUpRemoveType:: losetype BS_ATTACKER, TYPE_FIRE @@ -1461,8 +1462,9 @@ BattleScript_EffectDoubleShock: goto BattleScript_ButItFailed BattleScript_DoubleShockWorks: - setmoveeffect MOVE_EFFECT_DOUBLE_SHOCK | MOVE_EFFECT_CERTAIN - goto BattleScript_EffectHit + setmoveeffect MOVE_EFFECT_DOUBLE_SHOCK | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + goto BattleScript_HitFromCritCalc BattleScript_DoubleShockRemoveType:: losetype BS_ATTACKER, TYPE_ELECTRIC diff --git a/test/move_effect_burn_up.c b/test/move_effect_burn_up.c new file mode 100644 index 000000000000..a53b1afa8655 --- /dev/null +++ b/test/move_effect_burn_up.c @@ -0,0 +1,53 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_BURN_UP].effect == EFFECT_BURN_UP); + ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].types[0] != TYPE_FIRE || gSpeciesInfo[SPECIES_WOBBUFFET].types[1] != TYPE_FIRE); + ASSUME(gSpeciesInfo[SPECIES_CYNDAQUIL].types[0] == TYPE_FIRE || gSpeciesInfo[SPECIES_CYNDAQUIL].types[1] == TYPE_FIRE); +} + +SINGLE_BATTLE_TEST("Burn Up user loses its Fire-type") +{ + GIVEN { + PLAYER(SPECIES_CYNDAQUIL); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_BURN_UP); } + TURN { MOVE(player, MOVE_BURN_UP); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_BURN_UP, player); + MESSAGE("Cyndaquil burned itself out!"); + MESSAGE("Cyndaquil used Burn Up!"); + MESSAGE("But it failed!"); + } +} + +SINGLE_BATTLE_TEST("Burn Up fails if the user isn't a Fire-type") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_BURN_UP); } + } SCENE { + NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_BURN_UP, player); } + MESSAGE("Wobbuffet used Burn Up!"); + MESSAGE("But it failed!"); + } +} + +SINGLE_BATTLE_TEST("Burn Up user loses its Fire-type if enemy faints") +{ + GIVEN { + PLAYER(SPECIES_CYNDAQUIL); + OPPONENT(SPECIES_WOBBUFFET) { HP(1); } + } WHEN { + TURN { MOVE(player, MOVE_BURN_UP); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_BURN_UP, player); + HP_BAR(opponent, hp: 0); + MESSAGE("Cyndaquil burned itself out!"); + } +} diff --git a/test/move_effect_double_shock.c b/test/move_effect_double_shock.c new file mode 100644 index 000000000000..c3651c4034cb --- /dev/null +++ b/test/move_effect_double_shock.c @@ -0,0 +1,53 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_DOUBLE_SHOCK].effect == EFFECT_DOUBLE_SHOCK); + ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].types[0] != TYPE_ELECTRIC || gSpeciesInfo[SPECIES_WOBBUFFET].types[1] != TYPE_ELECTRIC); + ASSUME(gSpeciesInfo[SPECIES_PIKACHU].types[0] == TYPE_ELECTRIC || gSpeciesInfo[SPECIES_PIKACHU].types[1] == TYPE_ELECTRIC); +} + +SINGLE_BATTLE_TEST("Double Shock user loses its Electric-type") +{ + GIVEN { + PLAYER(SPECIES_PIKACHU); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_DOUBLE_SHOCK); } + TURN { MOVE(player, MOVE_DOUBLE_SHOCK); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DOUBLE_SHOCK, player); + MESSAGE("Pikachu used up all of its electricity!"); + MESSAGE("Pikachu used Double Shock!"); + MESSAGE("But it failed!"); + } +} + +SINGLE_BATTLE_TEST("Double Shock fails if the user isn't an Electric-type") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_DOUBLE_SHOCK); } + } SCENE { + NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_DOUBLE_SHOCK, player); } + MESSAGE("Wobbuffet used Double Shock!"); + MESSAGE("But it failed!"); + } +} + +SINGLE_BATTLE_TEST("Double Shock user loses its Electric-type if enemy faints") +{ + GIVEN { + PLAYER(SPECIES_PIKACHU); + OPPONENT(SPECIES_WOBBUFFET) { HP(1); } + } WHEN { + TURN { MOVE(player, MOVE_DOUBLE_SHOCK); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DOUBLE_SHOCK, player); + HP_BAR(opponent, hp: 0); + MESSAGE("Pikachu used up all of its electricity!"); + } +} From 47cd903fdecc3d2636a30479fa698de720a5650d Mon Sep 17 00:00:00 2001 From: CallmeEchoo Date: Sun, 30 Apr 2023 18:02:41 +0200 Subject: [PATCH 342/428] update dire hit failing comment --- test/item_effect_set_focus_energy.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/test/item_effect_set_focus_energy.c b/test/item_effect_set_focus_energy.c index 72e90d610b94..19093e739a16 100644 --- a/test/item_effect_set_focus_energy.c +++ b/test/item_effect_set_focus_energy.c @@ -3,7 +3,10 @@ SINGLE_BATTLE_TEST("Dire Hit increases a battler's critical hit chance by 2 stages") { - KNOWN_FAILING; // Displays Message "Foe Wobbuffet used Dire Hit.." when facing off against Wobbuffet. Doesnt happen against other species? + /* KNOWN_FAILING due to message mismatch for "Wobbuffet used Dire Hit to get pumped!" + * As of the time of writing, this test passes if the above mentioned message is removed + * For more details refer to description of PR #2940 */ + KNOWN_FAILING; ASSUME(B_CRIT_CHANCE >= GEN_7); PASSES_RANDOMLY(1, 2, RNG_CRITICAL_HIT); GIVEN { From f1d60a4a04b13882c91ef2b5a0496119675e246b Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Sun, 30 Apr 2023 22:52:37 +0200 Subject: [PATCH 343/428] Fixed wrong generation in check --- src/daycare.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/daycare.c b/src/daycare.c index 08b9ec23fc67..31a7bade0510 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -1029,7 +1029,7 @@ static void _GiveEggFromDaycare(struct DayCare *daycare) InheritIVs(&egg, daycare); InheritPokeball(&egg, &daycare->mons[parentSlots[1]].mon, &daycare->mons[parentSlots[0]].mon); BuildEggMoveset(&egg, &daycare->mons[parentSlots[1]].mon, &daycare->mons[parentSlots[0]].mon); -#if P_ABILITY_INHERITANCE >= GEN_8 +#if P_ABILITY_INHERITANCE >= GEN_6 InheritAbility(&egg, &daycare->mons[parentSlots[1]].mon, &daycare->mons[parentSlots[0]].mon); #endif From 772c50408cf93957f545855c8ca9d8a660f64f84 Mon Sep 17 00:00:00 2001 From: CallmeEchoo Date: Sun, 30 Apr 2023 23:22:51 +0200 Subject: [PATCH 344/428] remove identifier strings no longer needed since testing is done. --- test/item_effect_cure_status.c | 34 ++++++++++++++++---------------- test/item_effect_increase_stat.c | 22 ++++++++++----------- test/item_effect_restore_hp.c | 26 ++++++++++++------------ test/item_effect_restore_pp.c | 8 ++++---- test/item_effect_revive.c | 8 ++++---- 5 files changed, 49 insertions(+), 49 deletions(-) diff --git a/test/item_effect_cure_status.c b/test/item_effect_cure_status.c index 949f60f0e487..1f7c9d7a23f9 100644 --- a/test/item_effect_cure_status.c +++ b/test/item_effect_cure_status.c @@ -1,7 +1,7 @@ #include "global.h" #include "test_battle.h" -SINGLE_BATTLE_TEST("Cure Status: Paralyze Heal heals a battler from being paralyzed") +SINGLE_BATTLE_TEST("Paralyze Heal heals a battler from being paralyzed") { GIVEN { ASSUME(gItems[ITEM_PARALYZE_HEAL].battleUsage == EFFECT_ITEM_CURE_STATUS); @@ -16,7 +16,7 @@ SINGLE_BATTLE_TEST("Cure Status: Paralyze Heal heals a battler from being paraly } } -SINGLE_BATTLE_TEST("Cure Status: Antidote heals a battler from being poisoned") +SINGLE_BATTLE_TEST("Antidote heals a battler from being poisoned") { GIVEN { ASSUME(gItems[ITEM_ANTIDOTE].battleUsage == EFFECT_ITEM_CURE_STATUS); @@ -31,7 +31,7 @@ SINGLE_BATTLE_TEST("Cure Status: Antidote heals a battler from being poisoned") } } -SINGLE_BATTLE_TEST("Cure Status: Antidote heals a battler from being badly poisoned") +SINGLE_BATTLE_TEST("Antidote heals a battler from being badly poisoned") { GIVEN { ASSUME(gItems[ITEM_ANTIDOTE].battleUsage == EFFECT_ITEM_CURE_STATUS); @@ -46,7 +46,7 @@ SINGLE_BATTLE_TEST("Cure Status: Antidote heals a battler from being badly poiso } } -SINGLE_BATTLE_TEST("Cure Status: Awakening heals a battler from being asleep") +SINGLE_BATTLE_TEST("Awakening heals a battler from being asleep") { GIVEN { ASSUME(gItems[ITEM_AWAKENING].battleUsage == EFFECT_ITEM_CURE_STATUS); @@ -61,7 +61,7 @@ SINGLE_BATTLE_TEST("Cure Status: Awakening heals a battler from being asleep") } } -SINGLE_BATTLE_TEST("Cure Status: Burn Heal heals a battler from being burned") +SINGLE_BATTLE_TEST("Burn Heal heals a battler from being burned") { GIVEN { ASSUME(gItems[ITEM_BURN_HEAL].battleUsage == EFFECT_ITEM_CURE_STATUS); @@ -76,7 +76,7 @@ SINGLE_BATTLE_TEST("Cure Status: Burn Heal heals a battler from being burned") } } -SINGLE_BATTLE_TEST("Cure Status: Ice Heal heals a battler from being paralyzed") +SINGLE_BATTLE_TEST("Ice Heal heals a battler from being paralyzed") { GIVEN { ASSUME(gItems[ITEM_ICE_HEAL].battleUsage == EFFECT_ITEM_CURE_STATUS); @@ -91,7 +91,7 @@ SINGLE_BATTLE_TEST("Cure Status: Ice Heal heals a battler from being paralyzed") } } -SINGLE_BATTLE_TEST("Cure Status: Full Heal heals a battler from any primary status") +SINGLE_BATTLE_TEST("Full Heal heals a battler from any primary status") { u16 status; PARAMETRIZE{ status = STATUS1_BURN; } @@ -113,7 +113,7 @@ SINGLE_BATTLE_TEST("Cure Status: Full Heal heals a battler from any primary stat } } -SINGLE_BATTLE_TEST("Cure Status: Heal Powder heals a battler from any primary status") +SINGLE_BATTLE_TEST("Heal Powder heals a battler from any primary status") { u16 status; PARAMETRIZE{ status = STATUS1_BURN; } @@ -135,7 +135,7 @@ SINGLE_BATTLE_TEST("Cure Status: Heal Powder heals a battler from any primary st } } -SINGLE_BATTLE_TEST("Cure Status: Pewter Crunchies heals a battler from any primary status") +SINGLE_BATTLE_TEST("Pewter Crunchies heals a battler from any primary status") { u16 status; PARAMETRIZE{ status = STATUS1_BURN; } @@ -157,7 +157,7 @@ SINGLE_BATTLE_TEST("Cure Status: Pewter Crunchies heals a battler from any prima } } -SINGLE_BATTLE_TEST("Cure Status: Lava Cookies heals a battler from any primary status") +SINGLE_BATTLE_TEST("Lava Cookies heals a battler from any primary status") { u16 status; PARAMETRIZE{ status = STATUS1_BURN; } @@ -179,7 +179,7 @@ SINGLE_BATTLE_TEST("Cure Status: Lava Cookies heals a battler from any primary s } } -SINGLE_BATTLE_TEST("Cure Status: Rage Candy Bar heals a battler from any primary status") +SINGLE_BATTLE_TEST("Rage Candy Bar heals a battler from any primary status") { u16 status; PARAMETRIZE{ status = STATUS1_BURN; } @@ -201,7 +201,7 @@ SINGLE_BATTLE_TEST("Cure Status: Rage Candy Bar heals a battler from any primary } } -SINGLE_BATTLE_TEST("Cure Status: Old Gateu heals a battler from any primary status") +SINGLE_BATTLE_TEST("Old Gateu heals a battler from any primary status") { u16 status; PARAMETRIZE{ status = STATUS1_BURN; } @@ -223,7 +223,7 @@ SINGLE_BATTLE_TEST("Cure Status: Old Gateu heals a battler from any primary stat } } -SINGLE_BATTLE_TEST("Cure Status: Casteliacone heals a battler from any primary status") +SINGLE_BATTLE_TEST("Casteliacone heals a battler from any primary status") { u16 status; PARAMETRIZE{ status = STATUS1_BURN; } @@ -245,7 +245,7 @@ SINGLE_BATTLE_TEST("Cure Status: Casteliacone heals a battler from any primary s } } -SINGLE_BATTLE_TEST("Cure Status: Lumiose Galette heals a battler from any primary status") +SINGLE_BATTLE_TEST("Lumiose Galette heals a battler from any primary status") { u16 status; PARAMETRIZE{ status = STATUS1_BURN; } @@ -267,7 +267,7 @@ SINGLE_BATTLE_TEST("Cure Status: Lumiose Galette heals a battler from any primar } } -SINGLE_BATTLE_TEST("Cure Status: Shalour Sable heals a battler from any primary status") +SINGLE_BATTLE_TEST("Shalour Sable heals a battler from any primary status") { u16 status; PARAMETRIZE{ status = STATUS1_BURN; } @@ -289,7 +289,7 @@ SINGLE_BATTLE_TEST("Cure Status: Shalour Sable heals a battler from any primary } } -SINGLE_BATTLE_TEST("Cure Status: Big Malasada heals a battler from any primary status") +SINGLE_BATTLE_TEST("Big Malasada heals a battler from any primary status") { u16 status; PARAMETRIZE{ status = STATUS1_BURN; } @@ -311,7 +311,7 @@ SINGLE_BATTLE_TEST("Cure Status: Big Malasada heals a battler from any primary s } } -SINGLE_BATTLE_TEST("Cure Status: Full Heal, Heal Powder and Local Specialties heal a battler from being confused") +SINGLE_BATTLE_TEST("Full Heal, Heal Powder and Local Specialties heal a battler from being confused") { u16 item; PARAMETRIZE { item = ITEM_FULL_HEAL; } diff --git a/test/item_effect_increase_stat.c b/test/item_effect_increase_stat.c index bb5989207ab4..bbaf20e2fabf 100644 --- a/test/item_effect_increase_stat.c +++ b/test/item_effect_increase_stat.c @@ -1,7 +1,7 @@ #include "global.h" #include "test_battle.h" -SINGLE_BATTLE_TEST("Increase Stat: X Attack sharply raises battler's Attack stat", s16 damage) +SINGLE_BATTLE_TEST("X Attack sharply raises battler's Attack stat", s16 damage) { u16 useItem; PARAMETRIZE { useItem = FALSE; } @@ -24,7 +24,7 @@ SINGLE_BATTLE_TEST("Increase Stat: X Attack sharply raises battler's Attack stat } } -SINGLE_BATTLE_TEST("Increase Stat: X Defense sharply raises battler's Defense stat", s16 damage) +SINGLE_BATTLE_TEST("X Defense sharply raises battler's Defense stat", s16 damage) { u16 useItem; PARAMETRIZE { useItem = FALSE; } @@ -47,7 +47,7 @@ SINGLE_BATTLE_TEST("Increase Stat: X Defense sharply raises battler's Defense st } } -SINGLE_BATTLE_TEST("Increase Stat: X Sp. Atk sharply raises battler's Sp. Attack stat", s16 damage) +SINGLE_BATTLE_TEST("X Sp. Atk sharply raises battler's Sp. Attack stat", s16 damage) { u16 useItem; PARAMETRIZE { useItem = FALSE; } @@ -70,7 +70,7 @@ SINGLE_BATTLE_TEST("Increase Stat: X Sp. Atk sharply raises battler's Sp. Attack } } -SINGLE_BATTLE_TEST("Increase Stat: X Sp. Def sharply raises battler's Sp. Defense stat", s16 damage) +SINGLE_BATTLE_TEST("X Sp. Def sharply raises battler's Sp. Defense stat", s16 damage) { u16 useItem; PARAMETRIZE { useItem = FALSE; } @@ -93,7 +93,7 @@ SINGLE_BATTLE_TEST("Increase Stat: X Sp. Def sharply raises battler's Sp. Defens } } -SINGLE_BATTLE_TEST("Increase Stat: X Speed sharply raises battler's Speed stat", s16 damage) +SINGLE_BATTLE_TEST("X Speed sharply raises battler's Speed stat", s16 damage) { u16 useItem; PARAMETRIZE { useItem = FALSE; } @@ -126,7 +126,7 @@ SINGLE_BATTLE_TEST("Increase Stat: X Speed sharply raises battler's Speed stat", } } -SINGLE_BATTLE_TEST("Increase Stat: X Accuracy sharply raises battler's Accuracy stat", s16 damage) +SINGLE_BATTLE_TEST("X Accuracy sharply raises battler's Accuracy stat", s16 damage) { ASSUME(gBattleMoves[MOVE_SING].accuracy == 55); @@ -147,7 +147,7 @@ SINGLE_BATTLE_TEST("Increase Stat: X Accuracy sharply raises battler's Accuracy } } -SINGLE_BATTLE_TEST("Increase Stat: Max Mushrooms raises battler's Attack stat", s16 damage) +SINGLE_BATTLE_TEST("Max Mushrooms raises battler's Attack stat", s16 damage) { u16 useItem; PARAMETRIZE { useItem = FALSE; } @@ -167,7 +167,7 @@ SINGLE_BATTLE_TEST("Increase Stat: Max Mushrooms raises battler's Attack stat", } } -SINGLE_BATTLE_TEST("Increase Stat: Max Mushrooms raises battler's Defense stat", s16 damage) +SINGLE_BATTLE_TEST("Max Mushrooms raises battler's Defense stat", s16 damage) { u16 useItem; PARAMETRIZE { useItem = FALSE; } @@ -187,7 +187,7 @@ SINGLE_BATTLE_TEST("Increase Stat: Max Mushrooms raises battler's Defense stat", } } -SINGLE_BATTLE_TEST("Increase Stat: Max Mushrooms raises battler's Sp. Attack stat", s16 damage) +SINGLE_BATTLE_TEST("Max Mushrooms raises battler's Sp. Attack stat", s16 damage) { u16 useItem; PARAMETRIZE { useItem = FALSE; } @@ -207,7 +207,7 @@ SINGLE_BATTLE_TEST("Increase Stat: Max Mushrooms raises battler's Sp. Attack sta } } -SINGLE_BATTLE_TEST("Increase Stat: Max Mushrooms battler's Sp. Defense stat", s16 damage) +SINGLE_BATTLE_TEST("Max Mushrooms battler's Sp. Defense stat", s16 damage) { u16 useItem; PARAMETRIZE { useItem = FALSE; } @@ -227,7 +227,7 @@ SINGLE_BATTLE_TEST("Increase Stat: Max Mushrooms battler's Sp. Defense stat", s1 } } -SINGLE_BATTLE_TEST("Increase Stat: Max Mushrooms raises battler's Speed stat", s16 damage) +SINGLE_BATTLE_TEST("Max Mushrooms raises battler's Speed stat", s16 damage) { u16 useItem; PARAMETRIZE { useItem = FALSE; } diff --git a/test/item_effect_restore_hp.c b/test/item_effect_restore_hp.c index 4572a0d8be81..4662e9f25c11 100644 --- a/test/item_effect_restore_hp.c +++ b/test/item_effect_restore_hp.c @@ -4,7 +4,7 @@ #define TEST_HP 1 #define MAX_HP 400 -SINGLE_BATTLE_TEST("Restore HP: Potion restores a battler's HP by 20") +SINGLE_BATTLE_TEST("Potion restores a battler's HP by 20") { GIVEN { ASSUME(gItems[ITEM_POTION].battleUsage == EFFECT_ITEM_RESTORE_HP); @@ -17,7 +17,7 @@ SINGLE_BATTLE_TEST("Restore HP: Potion restores a battler's HP by 20") } } -SINGLE_BATTLE_TEST("Restore HP: Super Potion restores a battler's HP by 60") +SINGLE_BATTLE_TEST("Super Potion restores a battler's HP by 60") { GIVEN { ASSUME(gItems[ITEM_SUPER_POTION].battleUsage == EFFECT_ITEM_RESTORE_HP); @@ -30,7 +30,7 @@ SINGLE_BATTLE_TEST("Restore HP: Super Potion restores a battler's HP by 60") } } -SINGLE_BATTLE_TEST("Restore HP: Hyper Potion restores a battler's HP by 120") +SINGLE_BATTLE_TEST("Hyper Potion restores a battler's HP by 120") { GIVEN { ASSUME(gItems[ITEM_HYPER_POTION].battleUsage == EFFECT_ITEM_RESTORE_HP); @@ -43,7 +43,7 @@ SINGLE_BATTLE_TEST("Restore HP: Hyper Potion restores a battler's HP by 120") } } -SINGLE_BATTLE_TEST("Restore HP: Max Potion restores a battler's HP fully") +SINGLE_BATTLE_TEST("Max Potion restores a battler's HP fully") { GIVEN { ASSUME(gItems[ITEM_MAX_POTION].battleUsage == EFFECT_ITEM_RESTORE_HP); @@ -56,7 +56,7 @@ SINGLE_BATTLE_TEST("Restore HP: Max Potion restores a battler's HP fully") } } -SINGLE_BATTLE_TEST("Restore HP: Fresh Water restores a battler's HP by 30") +SINGLE_BATTLE_TEST("Fresh Water restores a battler's HP by 30") { GIVEN { ASSUME(gItems[ITEM_FRESH_WATER].battleUsage == EFFECT_ITEM_RESTORE_HP); @@ -69,7 +69,7 @@ SINGLE_BATTLE_TEST("Restore HP: Fresh Water restores a battler's HP by 30") } } -SINGLE_BATTLE_TEST("Restore HP: Soda Pop restores a battler's HP by 50") +SINGLE_BATTLE_TEST("Soda Pop restores a battler's HP by 50") { GIVEN { ASSUME(gItems[ITEM_SODA_POP].battleUsage == EFFECT_ITEM_RESTORE_HP); @@ -82,7 +82,7 @@ SINGLE_BATTLE_TEST("Restore HP: Soda Pop restores a battler's HP by 50") } } -SINGLE_BATTLE_TEST("Restore HP: Lemonade restores a battler's HP by 70") +SINGLE_BATTLE_TEST("Lemonade restores a battler's HP by 70") { GIVEN { ASSUME(gItems[ITEM_LEMONADE].battleUsage == EFFECT_ITEM_RESTORE_HP); @@ -95,7 +95,7 @@ SINGLE_BATTLE_TEST("Restore HP: Lemonade restores a battler's HP by 70") } } -SINGLE_BATTLE_TEST("Restore HP: Moomoo Milk restores a battler's HP by 100") +SINGLE_BATTLE_TEST("Moomoo Milk restores a battler's HP by 100") { GIVEN { ASSUME(gItems[ITEM_MOOMOO_MILK].battleUsage == EFFECT_ITEM_RESTORE_HP); @@ -108,7 +108,7 @@ SINGLE_BATTLE_TEST("Restore HP: Moomoo Milk restores a battler's HP by 100") } } -SINGLE_BATTLE_TEST("Restore HP: Energy Powder restores a battler's HP by 60(50)") +SINGLE_BATTLE_TEST("Energy Powder restores a battler's HP by 60(50)") { GIVEN { ASSUME(gItems[ITEM_ENERGY_POWDER].battleUsage == EFFECT_ITEM_RESTORE_HP); @@ -124,7 +124,7 @@ SINGLE_BATTLE_TEST("Restore HP: Energy Powder restores a battler's HP by 60(50)" } } -SINGLE_BATTLE_TEST("Restore HP: Energy Root restores a battler's HP by 120(200)") +SINGLE_BATTLE_TEST("Energy Root restores a battler's HP by 120(200)") { GIVEN { ASSUME(gItems[ITEM_ENERGY_ROOT].battleUsage == EFFECT_ITEM_RESTORE_HP); @@ -140,7 +140,7 @@ SINGLE_BATTLE_TEST("Restore HP: Energy Root restores a battler's HP by 120(200)" } } -SINGLE_BATTLE_TEST("Restore HP: Sweet Heart restores a battler's HP by 20") +SINGLE_BATTLE_TEST("Sweet Heart restores a battler's HP by 20") { GIVEN { ASSUME(gItems[ITEM_SWEET_HEART].battleUsage == EFFECT_ITEM_RESTORE_HP); @@ -153,7 +153,7 @@ SINGLE_BATTLE_TEST("Restore HP: Sweet Heart restores a battler's HP by 20") } } -SINGLE_BATTLE_TEST("Restore HP: Oran Berry restores a battler's HP by 10") +SINGLE_BATTLE_TEST("Oran Berry restores a battler's HP by 10") { GIVEN { ASSUME(gItems[ITEM_ORAN_BERRY].battleUsage == EFFECT_ITEM_RESTORE_HP); @@ -166,7 +166,7 @@ SINGLE_BATTLE_TEST("Restore HP: Oran Berry restores a battler's HP by 10") } } -SINGLE_BATTLE_TEST("Restore HP: Sitrus Berry restores a battler's HP by 25% of its max HP(30HP flat)") +SINGLE_BATTLE_TEST("Sitrus Berry restores a battler's HP by 25% of its max HP(30HP flat)") { GIVEN { ASSUME(gItems[ITEM_SITRUS_BERRY].battleUsage == EFFECT_ITEM_RESTORE_HP); diff --git a/test/item_effect_restore_pp.c b/test/item_effect_restore_pp.c index f21593566f2b..7194efbbb534 100644 --- a/test/item_effect_restore_pp.c +++ b/test/item_effect_restore_pp.c @@ -1,7 +1,7 @@ #include "global.h" #include "test_battle.h" -SINGLE_BATTLE_TEST("Restore PP: Ether restores the PP of one of a battler's moves by 10 ") +SINGLE_BATTLE_TEST("Ether restores the PP of one of a battler's moves by 10 ") { GIVEN { ASSUME(gItems[ITEM_ETHER].battleUsage == EFFECT_ITEM_RESTORE_PP); @@ -16,7 +16,7 @@ SINGLE_BATTLE_TEST("Restore PP: Ether restores the PP of one of a battler's move } } -SINGLE_BATTLE_TEST("Restore PP: Max Ether restores the PP of one of a battler's moves fully") +SINGLE_BATTLE_TEST("Max Ether restores the PP of one of a battler's moves fully") { GIVEN { ASSUME(gItems[ITEM_MAX_ETHER].battleUsage == EFFECT_ITEM_RESTORE_PP); @@ -31,7 +31,7 @@ SINGLE_BATTLE_TEST("Restore PP: Max Ether restores the PP of one of a battler's } } -SINGLE_BATTLE_TEST("Restore PP: Elixir restores the PP of all of a battler's moves by 10") +SINGLE_BATTLE_TEST("Elixir restores the PP of all of a battler's moves by 10") { GIVEN { ASSUME(gItems[ITEM_ELIXIR].battleUsage == EFFECT_ITEM_RESTORE_PP); @@ -48,7 +48,7 @@ SINGLE_BATTLE_TEST("Restore PP: Elixir restores the PP of all of a battler's mov } } -SINGLE_BATTLE_TEST("Restore PP: Max Elixir restores the PP of all of a battler's moves fully") +SINGLE_BATTLE_TEST("Max Elixir restores the PP of all of a battler's moves fully") { GIVEN { ASSUME(gItems[ITEM_MAX_ELIXIR].battleUsage == EFFECT_ITEM_RESTORE_PP); diff --git a/test/item_effect_revive.c b/test/item_effect_revive.c index 3c6995176e14..77423fff1b29 100644 --- a/test/item_effect_revive.c +++ b/test/item_effect_revive.c @@ -3,7 +3,7 @@ #define MAX_HP 200 -SINGLE_BATTLE_TEST("Revive: Revive restores a fainted battler's HP to half") +SINGLE_BATTLE_TEST("Revive restores a fainted battler's HP to half") { GIVEN { ASSUME(gItems[ITEM_REVIVE].battleUsage == EFFECT_ITEM_REVIVE); @@ -21,7 +21,7 @@ SINGLE_BATTLE_TEST("Revive: Revive restores a fainted battler's HP to half") } } -SINGLE_BATTLE_TEST("Revive: Max Revive restores a fainted battler's HP fully") +SINGLE_BATTLE_TEST("Max Revive restores a fainted battler's HP fully") { GIVEN { ASSUME(gItems[ITEM_MAX_REVIVE].battleUsage == EFFECT_ITEM_REVIVE); @@ -39,7 +39,7 @@ SINGLE_BATTLE_TEST("Revive: Max Revive restores a fainted battler's HP fully") } } -SINGLE_BATTLE_TEST("Revive: Revival Herb restores a fainted battler's HP fully") +SINGLE_BATTLE_TEST("Revival Herb restores a fainted battler's HP fully") { GIVEN { ASSUME(gItems[ITEM_REVIVAL_HERB].battleUsage == EFFECT_ITEM_REVIVE); @@ -57,7 +57,7 @@ SINGLE_BATTLE_TEST("Revive: Revival Herb restores a fainted battler's HP fully") } } -SINGLE_BATTLE_TEST("Revive: Max Honey restores a fainted battler's HP fully") +SINGLE_BATTLE_TEST("Max Honey restores a fainted battler's HP fully") { GIVEN { ASSUME(gItems[ITEM_MAX_HONEY].battleUsage == EFFECT_ITEM_REVIVE); From 32e63d8cc7bae997c2dc520a27a17ee18984b285 Mon Sep 17 00:00:00 2001 From: Ultimate_Bob Date: Mon, 1 May 2023 11:15:03 +1000 Subject: [PATCH 345/428] Don't copy opponent personality when swapping mon sprite during Mega Evolution (#2852) Co-authored-by: Eduardo Quezada D'Ottone --- data/battle_anim_scripts.s | 14 +++++----- include/battle.h | 2 ++ include/battle_gfx_sfx_util.h | 2 +- include/config/battle.h | 1 + src/battle_anim_effects_3.c | 4 ++- src/battle_controller_link_opponent.c | 1 + src/battle_controller_link_partner.c | 1 + src/battle_controller_opponent.c | 1 + src/battle_controller_player.c | 1 + src/battle_controller_player_partner.c | 1 + src/battle_controller_recorded_opponent.c | 1 + src/battle_controller_recorded_player.c | 1 + src/battle_controller_wally.c | 1 + src/battle_gfx_sfx_util.c | 34 +++++++++++++++++++---- src/battle_main.c | 1 + src/battle_script_commands.c | 1 + 16 files changed, 53 insertions(+), 14 deletions(-) diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index adcb88c88133..dcfdac88ed58 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -22317,7 +22317,7 @@ Move_TRANSFORM: monbg ANIM_ATTACKER playsewithpan SE_M_TELEPORT, SOUND_PAN_ATTACKER waitplaysewithpan SE_M_MINIMIZE, SOUND_PAN_ATTACKER, 48 - createvisualtask AnimTask_TransformMon, 2, 0, 0 + createvisualtask AnimTask_TransformMon, 2, 0, 0, 1 waitforvisualfinish clearmonbg ANIM_ATTACKER end @@ -24406,7 +24406,7 @@ WeatherFormChangeContinue: monbg ANIM_ATTACKER playsewithpan SE_M_TELEPORT, SOUND_PAN_ATTACKER waitplaysewithpan SE_M_MINIMIZE, SOUND_PAN_ATTACKER, 48 - createvisualtask AnimTask_TransformMon, 2, 1, 0 + createvisualtask AnimTask_TransformMon, 2, 1, 0, 0 waitforvisualfinish clearmonbg ANIM_ATTACKER end @@ -24829,14 +24829,14 @@ General_WishHeal: General_IllusionOff: monbg ANIM_TARGET - createvisualtask AnimTask_TransformMon, 2, 0, 1 + createvisualtask AnimTask_TransformMon, 2, 0, 1, 0 waitforvisualfinish clearmonbg ANIM_TARGET end General_FormChange: monbg ANIM_ATTACKER - createvisualtask AnimTask_TransformMon, 2, 0, 1 + createvisualtask AnimTask_TransformMon, 2, 0, 1, 0 waitforvisualfinish clearmonbg ANIM_ATTACKER end @@ -24865,7 +24865,7 @@ General_MegaEvolution: delay 20 createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 0, 16, RGB_WHITEALPHA waitforvisualfinish - createvisualtask AnimTask_TransformMon, 2, 0, 1 + createvisualtask AnimTask_TransformMon, 2, 0, 1, 0 createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 16, 0, RGB_WHITEALPHA createvisualtask AnimTask_HorizontalShake, 5, 1, 5, 14 waitforvisualfinish @@ -25011,7 +25011,7 @@ General_PrimalReversion_Alpha: delay 20 createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 0, 16, RGB_WHITEALPHA waitforvisualfinish - createvisualtask AnimTask_TransformMon, 2, 0, 1 + createvisualtask AnimTask_TransformMon, 2, 0, 1, 0 createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 16, 0, RGB_WHITEALPHA createvisualtask AnimTask_HorizontalShake, 5, 1, 5, 14 waitforvisualfinish @@ -25038,7 +25038,7 @@ General_PrimalReversion_Omega: delay 20 createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 0, 16, RGB_WHITEALPHA waitforvisualfinish - createvisualtask AnimTask_TransformMon, 2, 0, 1 + createvisualtask AnimTask_TransformMon, 2, 0, 1, 0 createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 16, 0, RGB_WHITEALPHA createvisualtask AnimTask_HorizontalShake, 5, 1, 5, 14 waitforvisualfinish diff --git a/include/battle.h b/include/battle.h index 4ba3cba6e399..35c3525b811e 100644 --- a/include/battle.h +++ b/include/battle.h @@ -62,6 +62,7 @@ struct ResourceFlags struct DisableStruct { u32 transformedMonPersonality; + u32 transformedMonOtId; u16 disabledMove; u16 encoredMove; u8 protectUses; @@ -976,6 +977,7 @@ extern u8 gBattlerStatusSummaryTaskId[MAX_BATTLERS_COUNT]; extern u8 gBattlerInMenuId; extern bool8 gDoingBattleAnim; extern u32 gTransformedPersonalities[MAX_BATTLERS_COUNT]; +extern u32 gTransformedOtIds[MAX_BATTLERS_COUNT]; extern u8 gPlayerDpadHoldFrames; extern struct BattleSpriteData *gBattleSpritesDataPtr; extern struct MonSpritesGfx *gMonSpritesGfxPtr; diff --git a/include/battle_gfx_sfx_util.h b/include/battle_gfx_sfx_util.h index 491d5fefd1f4..9a0b79c31375 100644 --- a/include/battle_gfx_sfx_util.h +++ b/include/battle_gfx_sfx_util.h @@ -23,7 +23,7 @@ bool8 BattleInitAllSprites(u8 *state1, u8 *battlerId); void ClearSpritesHealthboxAnimData(void); void CopyAllBattleSpritesInvisibilities(void); void CopyBattleSpriteInvisibility(u8 battlerId); -void HandleSpeciesGfxDataChange(u8 attacker, u8 target, bool8 notTransform, bool32 megaEvo, bool8 trackEnemyPersonality); +void HandleSpeciesGfxDataChange(u8 attacker, u8 target, bool8 castform, bool32 megaEvo, bool8 trackEnemyPersonality); void BattleLoadSubstituteOrMonSpriteGfx(u8 battlerId, bool8 loadMonSprite); void LoadBattleMonGfxAndAnimate(u8 battlerId, bool8 loadMonSprite, u8 spriteId); void TrySetBehindSubstituteSpriteBit(u8 battlerId, u16 move); diff --git a/include/config/battle.h b/include/config/battle.h index 4b3caf4abedb..4861d046cac3 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -99,6 +99,7 @@ // Additionally, in gen8+ the Healing Wish's effect will be stored until the user switches into a statused or hurt mon. #define B_DEFOG_CLEARS_TERRAIN GEN_LATEST // In Gen8+, Defog also clears active Terrain. #define B_STOCKPILE_RAISES_DEFS GEN_LATEST // In Gen4+, Stockpile also raises Defense and Sp. Defense stats. Once Spit Up / Swallow is used, these stat changes are lost. +#define B_TRANSFORM_SHINY GEN_LATEST // In Gen4+, Transform will copy the shiny state of the opponent instead of maintaining its own shiny state. #define B_TRANSFORM_FORM_CHANGES GEN_LATEST // In Gen5+, Transformed Pokemon cannot change forms. // Ability settings diff --git a/src/battle_anim_effects_3.c b/src/battle_anim_effects_3.c index ff5f044464af..7d449c767eb7 100755 --- a/src/battle_anim_effects_3.c +++ b/src/battle_anim_effects_3.c @@ -2350,6 +2350,8 @@ void AnimTask_TransformMon(u8 taskId) SetAnimBgAttribute(2, BG_ANIM_MOSAIC, 1); gTasks[taskId].data[10] = gBattleAnimArgs[0]; + gTasks[taskId].data[11] = gBattleAnimArgs[1]; + gTasks[taskId].data[12] = gBattleAnimArgs[2]; gTasks[taskId].data[0]++; break; case 1: @@ -2364,7 +2366,7 @@ void AnimTask_TransformMon(u8 taskId) } break; case 2: - HandleSpeciesGfxDataChange(gBattleAnimAttacker, gBattleAnimTarget, gTasks[taskId].data[10], gBattleAnimArgs[1], TRUE); + HandleSpeciesGfxDataChange(gBattleAnimAttacker, gBattleAnimTarget, gTasks[taskId].data[10], gTasks[taskId].data[11], gTasks[taskId].data[12]); GetBgDataForTransform(&animBg, gBattleAnimAttacker); if (IsContest()) diff --git a/src/battle_controller_link_opponent.c b/src/battle_controller_link_opponent.c index 908363907b3c..b4936da5c20c 100644 --- a/src/battle_controller_link_opponent.c +++ b/src/battle_controller_link_opponent.c @@ -1395,6 +1395,7 @@ static void LinkOpponentHandleMoveAnimation(void) gWeatherMoveAnim = gBattleResources->bufferA[gActiveBattler][12] | (gBattleResources->bufferA[gActiveBattler][13] << 8); gAnimDisableStructPtr = (struct DisableStruct *)&gBattleResources->bufferA[gActiveBattler][16]; gTransformedPersonalities[gActiveBattler] = gAnimDisableStructPtr->transformedMonPersonality; + gTransformedOtIds[gActiveBattler] = gAnimDisableStructPtr->transformedMonOtId; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; gBattlerControllerFuncs[gActiveBattler] = LinkOpponentDoMoveAnimation; BattleTv_SetDataBasedOnMove(move, gWeatherMoveAnim, gAnimDisableStructPtr); diff --git a/src/battle_controller_link_partner.c b/src/battle_controller_link_partner.c index 1ef5d6355547..d07a92e93f71 100644 --- a/src/battle_controller_link_partner.c +++ b/src/battle_controller_link_partner.c @@ -1232,6 +1232,7 @@ static void LinkPartnerHandleMoveAnimation(void) gWeatherMoveAnim = gBattleResources->bufferA[gActiveBattler][12] | (gBattleResources->bufferA[gActiveBattler][13] << 8); gAnimDisableStructPtr = (struct DisableStruct *)&gBattleResources->bufferA[gActiveBattler][16]; gTransformedPersonalities[gActiveBattler] = gAnimDisableStructPtr->transformedMonPersonality; + gTransformedOtIds[gActiveBattler] = gAnimDisableStructPtr->transformedMonOtId; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; gBattlerControllerFuncs[gActiveBattler] = LinkPartnerDoMoveAnimation; BattleTv_SetDataBasedOnMove(move, gWeatherMoveAnim, gAnimDisableStructPtr); diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c index 4eda81b09431..c3e4a9037418 100644 --- a/src/battle_controller_opponent.c +++ b/src/battle_controller_opponent.c @@ -1470,6 +1470,7 @@ static void OpponentHandleMoveAnimation(void) gWeatherMoveAnim = gBattleResources->bufferA[gActiveBattler][12] | (gBattleResources->bufferA[gActiveBattler][13] << 8); gAnimDisableStructPtr = (struct DisableStruct *)&gBattleResources->bufferA[gActiveBattler][16]; gTransformedPersonalities[gActiveBattler] = gAnimDisableStructPtr->transformedMonPersonality; + gTransformedOtIds[gActiveBattler] = gAnimDisableStructPtr->transformedMonOtId; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; gBattlerControllerFuncs[gActiveBattler] = OpponentDoMoveAnimation; } diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index 10659941649a..b9eb566c021e 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -2709,6 +2709,7 @@ static void PlayerHandleMoveAnimation(void) gWeatherMoveAnim = gBattleResources->bufferA[gActiveBattler][12] | (gBattleResources->bufferA[gActiveBattler][13] << 8); gAnimDisableStructPtr = (struct DisableStruct *)&gBattleResources->bufferA[gActiveBattler][16]; gTransformedPersonalities[gActiveBattler] = gAnimDisableStructPtr->transformedMonPersonality; + gTransformedOtIds[gActiveBattler] = gAnimDisableStructPtr->transformedMonOtId; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; gBattlerControllerFuncs[gActiveBattler] = PlayerDoMoveAnimation; BattleTv_SetDataBasedOnMove(move, gWeatherMoveAnim, gAnimDisableStructPtr); diff --git a/src/battle_controller_player_partner.c b/src/battle_controller_player_partner.c index 4c54b68aa3ae..b94d5347aa75 100644 --- a/src/battle_controller_player_partner.c +++ b/src/battle_controller_player_partner.c @@ -1433,6 +1433,7 @@ static void PlayerPartnerHandleMoveAnimation(void) gWeatherMoveAnim = gBattleResources->bufferA[gActiveBattler][12] | (gBattleResources->bufferA[gActiveBattler][13] << 8); gAnimDisableStructPtr = (struct DisableStruct *)&gBattleResources->bufferA[gActiveBattler][16]; gTransformedPersonalities[gActiveBattler] = gAnimDisableStructPtr->transformedMonPersonality; + gTransformedOtIds[gActiveBattler] = gAnimDisableStructPtr->transformedMonOtId; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; gBattlerControllerFuncs[gActiveBattler] = PlayerPartnerDoMoveAnimation; } diff --git a/src/battle_controller_recorded_opponent.c b/src/battle_controller_recorded_opponent.c index e7fc6fd84ad4..ea988205470c 100644 --- a/src/battle_controller_recorded_opponent.c +++ b/src/battle_controller_recorded_opponent.c @@ -1327,6 +1327,7 @@ static void RecordedOpponentHandleMoveAnimation(void) gWeatherMoveAnim = gBattleResources->bufferA[gActiveBattler][12] | (gBattleResources->bufferA[gActiveBattler][13] << 8); gAnimDisableStructPtr = (struct DisableStruct *)&gBattleResources->bufferA[gActiveBattler][16]; gTransformedPersonalities[gActiveBattler] = gAnimDisableStructPtr->transformedMonPersonality; + gTransformedOtIds[gActiveBattler] = gAnimDisableStructPtr->transformedMonOtId; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; gBattlerControllerFuncs[gActiveBattler] = RecordedOpponentDoMoveAnimation; } diff --git a/src/battle_controller_recorded_player.c b/src/battle_controller_recorded_player.c index 87f575839937..8957b285ab04 100644 --- a/src/battle_controller_recorded_player.c +++ b/src/battle_controller_recorded_player.c @@ -1335,6 +1335,7 @@ static void RecordedPlayerHandleMoveAnimation(void) gWeatherMoveAnim = gBattleResources->bufferA[gActiveBattler][12] | (gBattleResources->bufferA[gActiveBattler][13] << 8); gAnimDisableStructPtr = (struct DisableStruct *)&gBattleResources->bufferA[gActiveBattler][16]; gTransformedPersonalities[gActiveBattler] = gAnimDisableStructPtr->transformedMonPersonality; + gTransformedOtIds[gActiveBattler] = gAnimDisableStructPtr->transformedMonOtId; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; gBattlerControllerFuncs[gActiveBattler] = RecordedPlayerDoMoveAnimation; } diff --git a/src/battle_controller_wally.c b/src/battle_controller_wally.c index ae20c54ecf81..fa1fa00fb2a0 100644 --- a/src/battle_controller_wally.c +++ b/src/battle_controller_wally.c @@ -1115,6 +1115,7 @@ static void WallyHandleMoveAnimation(void) gWeatherMoveAnim = gBattleResources->bufferA[gActiveBattler][12] | (gBattleResources->bufferA[gActiveBattler][13] << 8); gAnimDisableStructPtr = (struct DisableStruct *)&gBattleResources->bufferA[gActiveBattler][16]; gTransformedPersonalities[gActiveBattler] = gAnimDisableStructPtr->transformedMonPersonality; + gTransformedOtIds[gActiveBattler] = gAnimDisableStructPtr->transformedMonOtId; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; gBattlerControllerFuncs[gActiveBattler] = WallyDoMoveAnimation; } diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index bc541f0a013d..d926494a8da4 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -551,7 +551,7 @@ bool8 IsBattleSEPlaying(u8 battlerId) static void BattleLoadMonSpriteGfx(struct Pokemon *mon, u32 battlerId, bool32 opponent) { - u32 monsPersonality, currentPersonality, otId, species, paletteOffset, position; + u32 monsPersonality, currentPersonality, otId, currentOtId, species, paletteOffset, position; const void *lzPaletteData; struct Pokemon *illusionMon = GetIllusionMonPtr(battlerId); if (illusionMon != NULL) @@ -561,18 +561,26 @@ static void BattleLoadMonSpriteGfx(struct Pokemon *mon, u32 battlerId, bool32 op return; monsPersonality = GetMonData(mon, MON_DATA_PERSONALITY); + otId = GetMonData(mon, MON_DATA_OT_ID); + if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies == SPECIES_NONE) { species = GetMonData(mon, MON_DATA_SPECIES); currentPersonality = monsPersonality; + currentOtId = otId; } else { species = gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies; - currentPersonality = gTransformedPersonalities[battlerId]; + #if B_TRANSFORM_SHINY >= GEN_4 + currentPersonality = gTransformedPersonalities[battlerId]; + currentOtId = gTransformedOtIds[battlerId]; + #else + currentPersonality = monsPersonality; + currentOtId = otId; + #endif } - otId = GetMonData(mon, MON_DATA_OT_ID); position = GetBattlerPosition(battlerId); if (opponent) { @@ -592,7 +600,7 @@ static void BattleLoadMonSpriteGfx(struct Pokemon *mon, u32 battlerId, bool32 op if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies == SPECIES_NONE) lzPaletteData = GetMonFrontSpritePal(mon); else - lzPaletteData = GetMonSpritePalFromSpeciesAndPersonality(species, otId, monsPersonality); + lzPaletteData = GetMonSpritePalFromSpeciesAndPersonality(species, currentOtId, currentPersonality); LZDecompressWram(lzPaletteData, gDecompressionBuffer); LoadPalette(gDecompressionBuffer, paletteOffset, PLTT_SIZE_4BPP); @@ -880,10 +888,18 @@ void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool8 castform, bo if (GetBattlerSide(battlerAtk) == B_SIDE_PLAYER) { + #if B_TRANSFORM_SHINY >= GEN_4 if (trackEnemyPersonality) + { personalityValue = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_PERSONALITY); + otId = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_OT_ID); + } else + #endif + { personalityValue = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_PERSONALITY); + otId = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_OT_ID); + } otId = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_OT_ID); HandleLoadSpecialPokePic(FALSE, @@ -893,11 +909,19 @@ void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool8 castform, bo } else { + #if B_TRANSFORM_SHINY >= GEN_4 if (trackEnemyPersonality) + { personalityValue = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_PERSONALITY); + otId = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_OT_ID); + + } else + #endif + { personalityValue = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_PERSONALITY); - otId = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_OT_ID); + otId = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_OT_ID); + } HandleLoadSpecialPokePic(TRUE, gMonSpritesGfxPtr->sprites.ptr[position], diff --git a/src/battle_main.c b/src/battle_main.c index e59653f31318..91d5c3aa50d5 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -226,6 +226,7 @@ EWRAM_DATA u8 gBattlerStatusSummaryTaskId[MAX_BATTLERS_COUNT] = {0}; EWRAM_DATA u8 gBattlerInMenuId = 0; EWRAM_DATA bool8 gDoingBattleAnim = FALSE; EWRAM_DATA u32 gTransformedPersonalities[MAX_BATTLERS_COUNT] = {0}; +EWRAM_DATA u32 gTransformedOtIds[MAX_BATTLERS_COUNT] = {0}; EWRAM_DATA u8 gPlayerDpadHoldFrames = 0; EWRAM_DATA struct BattleSpriteData *gBattleSpritesDataPtr = NULL; EWRAM_DATA struct MonSpritesGfx *gMonSpritesGfxPtr = NULL; diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index aead0fe3c243..cdc8cfa904eb 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -12881,6 +12881,7 @@ static void Cmd_transformdataexecution(void) gDisableStructs[gBattlerAttacker].disabledMove = MOVE_NONE; gDisableStructs[gBattlerAttacker].disableTimer = 0; gDisableStructs[gBattlerAttacker].transformedMonPersonality = gBattleMons[gBattlerTarget].personality; + gDisableStructs[gBattlerAttacker].transformedMonOtId = gBattleMons[gBattlerTarget].otId; gDisableStructs[gBattlerAttacker].mimickedMoves = 0; gDisableStructs[gBattlerAttacker].usedMoves = 0; From 8e5347b450f4b655cc58a783de70e14b0fd115e1 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Fri, 21 Apr 2023 03:20:36 -0400 Subject: [PATCH 346/428] Fix mapjson misreporting errors when processing map_groups.json --- tools/mapjson/mapjson.cpp | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/tools/mapjson/mapjson.cpp b/tools/mapjson/mapjson.cpp index cfe95c485a50..e53ac7924d0f 100644 --- a/tools/mapjson/mapjson.cpp +++ b/tools/mapjson/mapjson.cpp @@ -75,6 +75,9 @@ string json_to_string(const Json &data, const string &field = "", bool silent = case Json::Type::BOOL: output = value.bool_value() ? "TRUE" : "FALSE"; break; + case Json::Type::NUL: + output = ""; + break; default:{ if (!silent) { string s = !field.empty() ? ("Value for '" + field + "'") : "JSON field"; @@ -459,23 +462,24 @@ string generate_map_constants_text(string groups_filepath, Json groups_data) { for (auto &group : groups_data["group_order"].array_items()) { string groupName = json_to_string(group); text << "// " << groupName << "\n"; - vector map_ids; + vector map_ids; size_t max_length = 0; for (auto &map_name : groups_data[groupName].array_items()) { - string header_filepath = file_dir + json_to_string(map_name) + dir_separator + "map.json"; + string map_filepath = file_dir + json_to_string(map_name) + dir_separator + "map.json"; string err_str; - Json map_data = Json::parse(read_text_file(header_filepath), err_str); - map_ids.push_back(map_data["id"]); - string id = json_to_string(map_data, "id"); + Json map_data = Json::parse(read_text_file(map_filepath), err_str); + if (map_data == Json()) + FATAL_ERROR("%s: %s\n", map_filepath.c_str(), err_str.c_str()); + string id = json_to_string(map_data, "id", true); + map_ids.push_back(id); if (id.length() > max_length) max_length = id.length(); } int map_id_num = 0; - for (Json map_id : map_ids) { - string id = json_to_string(map_id); - text << "#define " << id << string((max_length - id.length() + 1), ' ') + for (string map_id : map_ids) { + text << "#define " << map_id << string((max_length - map_id.length() + 1), ' ') << "(" << map_id_num++ << " | (" << group_num << " << 8))\n"; } text << "\n"; From 39b50d09dd9c18da8a0a81da355565338943c031 Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Mon, 1 May 2023 11:19:10 +0200 Subject: [PATCH 347/428] Add missing CanGetFrostbite --- include/battle_util.h | 1 + src/battle_script_commands.c | 2 +- src/battle_util.c | 14 ++++++++++++++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/include/battle_util.h b/include/battle_util.h index b83209a697cd..2644ca64a94b 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -228,6 +228,7 @@ bool32 CanBePoisoned(u8 battlerAttacker, u8 battlerTarget); bool32 CanBeBurned(u8 battlerId); bool32 CanBeParalyzed(u8 battlerId); bool32 CanBeFrozen(u8 battlerId); +bool32 CanGetFrostbite(u8 battlerId); bool32 CanBeConfused(u8 battlerId); bool32 IsBattlerTerrainAffected(u8 battlerId, u32 terrainFlag); u32 GetBattlerFriendshipScore(u8 battlerId); diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index fecea2892735..d81b3575ddd5 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -3212,7 +3212,7 @@ void SetMoveEffect(bool32 primary, u32 certain) } break; case STATUS1_FROSTBITE: - if (!CanBeFrozen(gEffectBattler)) + if (!CanGetFrostbite(gEffectBattler)) break; statusChanged = TRUE; diff --git a/src/battle_util.c b/src/battle_util.c index 98b0b6744fa4..aa3c1ecac803 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -6507,6 +6507,20 @@ bool32 CanBeFrozen(u8 battlerId) return TRUE; } +bool32 CanGetFrostbite(u8 battlerId) +{ + u16 ability = GetBattlerAbility(battlerId); + if (IS_BATTLER_OF_TYPE(battlerId, TYPE_ICE) + || gSideStatuses[GetBattlerSide(battlerId)] & SIDE_STATUS_SAFEGUARD + || ability == ABILITY_MAGMA_ARMOR + || ability == ABILITY_COMATOSE + || gBattleMons[battlerId].status1 & STATUS1_ANY + || IsAbilityStatusProtected(battlerId) + || IsBattlerTerrainAffected(battlerId, STATUS_FIELD_MISTY_TERRAIN)) + return FALSE; + return TRUE; +} + bool32 CanBeConfused(u8 battlerId) { if (GetBattlerAbility(battlerId) == ABILITY_OWN_TEMPO From dd96ac0c4ff3c45c6c29caab6d6e6e38b6971d8d Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Mon, 1 May 2023 15:35:05 +0200 Subject: [PATCH 348/428] Add Comatose check to AI "can be Xed" status checks --- src/battle_ai_util.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 09815519aff8..f5cef9d90324 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -2766,6 +2766,7 @@ bool32 AI_CanSleep(u8 battler, u16 ability) { if (ability == ABILITY_INSOMNIA || ability == ABILITY_VITAL_SPIRIT + || ability == ABILITY_COMATOSE || gBattleMons[battler].status1 & STATUS1_ANY || gSideStatuses[GetBattlerSide(battler)] & SIDE_STATUS_SAFEGUARD || (gFieldStatuses & (STATUS_FIELD_MISTY_TERRAIN | STATUS_FIELD_ELECTRIC_TERRAIN)) @@ -2839,6 +2840,7 @@ bool32 AI_CanPoison(u8 battlerAtk, u8 battlerDef, u16 defAbility, u16 move, u16 static bool32 AI_CanBeParalyzed(u8 battler, u16 ability) { if (ability == ABILITY_LIMBER + || ability == ABILITY_COMATOSE || IS_BATTLER_OF_TYPE(battler, TYPE_ELECTRIC) || gBattleMons[battler].status1 & STATUS1_ANY || IsAbilityStatusProtected(battler)) @@ -2884,6 +2886,7 @@ bool32 AI_CanBeBurned(u8 battler, u16 ability) { if (ability == ABILITY_WATER_VEIL || ability == ABILITY_WATER_BUBBLE + || ability == ABILITY_COMATOSE || IS_BATTLER_OF_TYPE(battler, TYPE_FIRE) || gBattleMons[battler].status1 & STATUS1_ANY || IsAbilityStatusProtected(battler) @@ -2895,6 +2898,7 @@ bool32 AI_CanBeBurned(u8 battler, u16 ability) bool32 AI_CanGetFrostbite(u8 battler, u16 ability) { if (ability == ABILITY_MAGMA_ARMOR + || ability == ABILITY_COMATOSE || IS_BATTLER_OF_TYPE(battler, TYPE_ICE) || gBattleMons[battler].status1 & STATUS1_ANY || IsAbilityStatusProtected(battler) From 15ce9eb71cde27b9142bb20c067fef19333ca852 Mon Sep 17 00:00:00 2001 From: CallmeEchoo Date: Mon, 1 May 2023 18:53:06 +0200 Subject: [PATCH 349/428] fix dire hit message mismatch --- src/battle_message.c | 2 +- test/item_effect_set_focus_energy.c | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/src/battle_message.c b/src/battle_message.c index 21f7098f81ac..cf42176a1bff 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -260,7 +260,7 @@ static const u8 sText_XFoundOneY[] = _("{B_ATK_NAME_WITH_PREFIX} found\none {B_L static const u8 sText_SoothingAroma[] = _("A soothing aroma wafted\nthrough the area!"); static const u8 sText_ItemsCantBeUsedNow[] = _("Items can't be used now.{PAUSE 64}"); static const u8 sText_ForXCommaYZ[] = _("For {B_SCR_ACTIVE_NAME_WITH_PREFIX},\n{B_LAST_ITEM} {B_BUFF1}"); -static const u8 sText_PkmnUsedXToGetPumped[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} used\n{B_LAST_ITEM} to get pumped!"); +static const u8 sText_PkmnUsedXToGetPumped[] = _("{B_ACTIVE_NAME_WITH_PREFIX} used\n{B_LAST_ITEM} to get pumped!"); static const u8 sText_PkmnLostFocus[] = _("{B_ATK_NAME_WITH_PREFIX} lost its\nfocus and couldn't move!"); static const u8 sText_PkmnWasDraggedOut[] = _("{B_DEF_NAME_WITH_PREFIX} was\ndragged out!\p"); static const u8 sText_TheWallShattered[] = _("The wall shattered!"); diff --git a/test/item_effect_set_focus_energy.c b/test/item_effect_set_focus_energy.c index 19093e739a16..95648465e68f 100644 --- a/test/item_effect_set_focus_energy.c +++ b/test/item_effect_set_focus_energy.c @@ -3,10 +3,6 @@ SINGLE_BATTLE_TEST("Dire Hit increases a battler's critical hit chance by 2 stages") { - /* KNOWN_FAILING due to message mismatch for "Wobbuffet used Dire Hit to get pumped!" - * As of the time of writing, this test passes if the above mentioned message is removed - * For more details refer to description of PR #2940 */ - KNOWN_FAILING; ASSUME(B_CRIT_CHANCE >= GEN_7); PASSES_RANDOMLY(1, 2, RNG_CRITICAL_HIT); GIVEN { From bdd0195fe01963e81dfe09c5b8e2368a1d12f0be Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Mon, 1 May 2023 17:00:37 -0400 Subject: [PATCH 350/428] add mirror herb tests --- test/hold_effect_mirror_herb.c | 51 ++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 test/hold_effect_mirror_herb.c diff --git a/test/hold_effect_mirror_herb.c b/test/hold_effect_mirror_herb.c new file mode 100644 index 000000000000..68ea5614b480 --- /dev/null +++ b/test/hold_effect_mirror_herb.c @@ -0,0 +1,51 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + gItems[ITEM_MIRROR_HERB].holdEffect == HOLD_EFFECT_MIRROR_HERB; +}; + +SINGLE_BATTLE_TEST("Mirror Herb copies all of foe's stat changes in a turn", s16 damage) +{ + u32 item; + PARAMETRIZE{ item = ITEM_NONE; } + PARAMETRIZE{ item = ITEM_MIRROR_HERB; } + GIVEN { + ASSUME(gItems[ITEM_MIRROR_HERB].holdEffect == HOLD_EFFECT_MIRROR_HERB); + PLAYER(SPECIES_WOBBUFFET) { Speed(4); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(5); Item(item); } + } WHEN { + TURN { MOVE(player, MOVE_DRAGON_DANCE); } + TURN { MOVE(player, MOVE_TACKLE); MOVE(opponent, MOVE_TACKLE); } + } SCENE { + if (item == ITEM_NONE) { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + HP_BAR(player, captureDamage: &results[i].damage); + } else { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + HP_BAR(player, captureDamage: &results[i].damage); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + } + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage); + EXPECT_EQ(player->statStages[STAT_ATK], opponent->statStages[STAT_ATK]); + EXPECT_EQ(player->statStages[STAT_SPEED], opponent->statStages[STAT_SPEED]); + } +} + +SINGLE_BATTLE_TEST("Mirror Herb copies all of of Stuff Cheeks", s16 damage) +{ + GIVEN { + ASSUME(gItems[ITEM_MIRROR_HERB].holdEffect == HOLD_EFFECT_MIRROR_HERB); + ASSUME(gItems[ITEM_LIECHI_BERRY].holdEffect == HOLD_EFFECT_ATTACK_UP); + PLAYER(SPECIES_SKWOVET) { Item(ITEM_LIECHI_BERRY); } + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_MIRROR_HERB); } + } WHEN { + TURN { MOVE(player, MOVE_STUFF_CHEEKS); } + } THEN { + EXPECT_EQ(player->statStages[STAT_ATK], opponent->statStages[STAT_ATK]); + EXPECT_EQ(player->statStages[STAT_DEF], opponent->statStages[STAT_DEF]); + } +} From 3652e8261a3fa8575c0f54a194d562f5c11f434c Mon Sep 17 00:00:00 2001 From: ghoulslash <41651341+ghoulslash@users.noreply.github.com> Date: Mon, 1 May 2023 15:09:20 -0600 Subject: [PATCH 351/428] Apply suggestions from code review Co-authored-by: Salem <65783283+CallmeEchoo@users.noreply.github.com> --- test/hold_effect_mirror_herb.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/test/hold_effect_mirror_herb.c b/test/hold_effect_mirror_herb.c index 68ea5614b480..b1c3c8132b64 100644 --- a/test/hold_effect_mirror_herb.c +++ b/test/hold_effect_mirror_herb.c @@ -3,7 +3,7 @@ ASSUMPTIONS { - gItems[ITEM_MIRROR_HERB].holdEffect == HOLD_EFFECT_MIRROR_HERB; + ASSUME(gItems[ITEM_MIRROR_HERB].holdEffect == HOLD_EFFECT_MIRROR_HERB); }; SINGLE_BATTLE_TEST("Mirror Herb copies all of foe's stat changes in a turn", s16 damage) @@ -12,7 +12,6 @@ SINGLE_BATTLE_TEST("Mirror Herb copies all of foe's stat changes in a turn", s16 PARAMETRIZE{ item = ITEM_NONE; } PARAMETRIZE{ item = ITEM_MIRROR_HERB; } GIVEN { - ASSUME(gItems[ITEM_MIRROR_HERB].holdEffect == HOLD_EFFECT_MIRROR_HERB); PLAYER(SPECIES_WOBBUFFET) { Speed(4); } OPPONENT(SPECIES_WOBBUFFET) { Speed(5); Item(item); } } WHEN { @@ -38,7 +37,6 @@ SINGLE_BATTLE_TEST("Mirror Herb copies all of foe's stat changes in a turn", s16 SINGLE_BATTLE_TEST("Mirror Herb copies all of of Stuff Cheeks", s16 damage) { GIVEN { - ASSUME(gItems[ITEM_MIRROR_HERB].holdEffect == HOLD_EFFECT_MIRROR_HERB); ASSUME(gItems[ITEM_LIECHI_BERRY].holdEffect == HOLD_EFFECT_ATTACK_UP); PLAYER(SPECIES_SKWOVET) { Item(ITEM_LIECHI_BERRY); } OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_MIRROR_HERB); } From 63c2e8a7d98b50921bdc1398dfb41bf04326de4e Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Mon, 1 May 2023 18:02:21 -0400 Subject: [PATCH 352/428] small mirror herb test synta fix --- test/hold_effect_mirror_herb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/hold_effect_mirror_herb.c b/test/hold_effect_mirror_herb.c index b1c3c8132b64..fc0a6de95720 100644 --- a/test/hold_effect_mirror_herb.c +++ b/test/hold_effect_mirror_herb.c @@ -4,7 +4,7 @@ ASSUMPTIONS { ASSUME(gItems[ITEM_MIRROR_HERB].holdEffect == HOLD_EFFECT_MIRROR_HERB); -}; +} SINGLE_BATTLE_TEST("Mirror Herb copies all of foe's stat changes in a turn", s16 damage) { From 52cc3bb45ea0c272e8311834114855144b2ec9db Mon Sep 17 00:00:00 2001 From: CallmeEchoo Date: Tue, 2 May 2023 16:16:58 +0200 Subject: [PATCH 353/428] add some snow related tests --- include/config/battle.h | 2 +- test/ability_snow_warning.c | 20 +++++ test/weather_snow.c | 159 ++++++++++++++++++++++++++++++++++++ 3 files changed, 180 insertions(+), 1 deletion(-) create mode 100644 test/ability_snow_warning.c create mode 100644 test/weather_snow.c diff --git a/include/config/battle.h b/include/config/battle.h index 0605ad43e5d0..4be810ed2af7 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -118,7 +118,7 @@ #define B_SYMBIOSIS_GEMS GEN_LATEST // In Gen7+, Symbiosis passes an item after a gem-boosted attack. Previously, items are passed before the gem-boosted attack hits, making the item effect apply. #define B_CHECK_IF_CHARGED_UP TRUE // If set to TRUE, certain abilities such as Electromorphosis WILL check if the STATUS3_CHARGED_UP status flag is applied. #define B_ABSORBING_ABILITY_STRING GEN_LATEST // In Gen5+, the abilities that absorb moves of a certain type use a generic string for stat increases and decreases. -#define B_SNOW_WARNING GEN_9 // In Gen9+, Snow Warning will summon snow instead of hail. +#define B_SNOW_WARNING GEN_LATEST // In Gen9+, Snow Warning will summon snow instead of hail. // Item settings #define B_HP_BERRIES GEN_LATEST // In Gen4+, berries which restore hp activate immediately after HP drops to half. In Gen3, the effect occurs at the end of the turn. diff --git a/test/ability_snow_warning.c b/test/ability_snow_warning.c new file mode 100644 index 000000000000..6c0753ad392c --- /dev/null +++ b/test/ability_snow_warning.c @@ -0,0 +1,20 @@ +#include "global.h" +#include "test_battle.h" + +SINGLE_BATTLE_TEST("Snow Warning summons hail(snow)") +{ + GIVEN { + PLAYER(SPECIES_ABOMASNOW) { Ability(ABILITY_SNOW_WARNING); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN {} + } SCENE { + #if B_SNOW_WARNING < GEN_9 + MESSAGE("It started to hail!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HAIL_CONTINUES); + #elif B_SNOW_WARNING >= GEN_9 + MESSAGE("It started to snow!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SNOW_CONTINUES); + #endif + } +} diff --git a/test/weather_snow.c b/test/weather_snow.c new file mode 100644 index 000000000000..07afa48d57e3 --- /dev/null +++ b/test/weather_snow.c @@ -0,0 +1,159 @@ +#include "global.h" +#include "test_battle.h" + +#define TEST_HP 1 +#define MAX_HP 400 + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_SNOWSCAPE].effect == EFFECT_SNOW); + ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].types[0] == TYPE_PSYCHIC); + ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].types[1] == TYPE_PSYCHIC); + ASSUME(gSpeciesInfo[SPECIES_GLALIE].types[0] == TYPE_ICE); + ASSUME(gSpeciesInfo[SPECIES_GLALIE].types[1] == TYPE_ICE); +} + +SINGLE_BATTLE_TEST("Snow increases the defense of Ice types by 50 %", s16 damage) +{ + u16 move; + PARAMETRIZE{ move = MOVE_SNOWSCAPE; } + PARAMETRIZE{ move = MOVE_CELEBRATE; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_GLALIE); + } WHEN { + TURN { MOVE(opponent, move); } + TURN { MOVE(player, MOVE_TACKLE); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage); + } +} + +SINGLE_BATTLE_TEST("Snow turns Weather Ball to an Ice-type move and doubles its power", s16 damage) +{ + u16 move; + PARAMETRIZE{ move = MOVE_CELEBRATE; } + PARAMETRIZE{ move = MOVE_SNOWSCAPE; } + GIVEN { + ASSUME(gBattleMoves[MOVE_WEATHER_BALL].effect == EFFECT_WEATHER_BALL); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_DRAGONAIR); + } WHEN { + TURN { MOVE(player, move); } + TURN { MOVE(player, MOVE_WEATHER_BALL); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(4.0), results[1].damage); // double base power + type effectiveness. + } +} + +SINGLE_BATTLE_TEST("Snow allows Blizzard to bypass accuracy checks") +{ + PASSES_RANDOMLY(100, 100); + GIVEN { + ASSUME(gBattleMoves[MOVE_BLIZZARD].accuracy == 70); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_SNOWSCAPE); MOVE(player, MOVE_BLIZZARD); } + } SCENE { + NONE_OF { MESSAGE("Wobbuffet's attack missed!"); } + } +} + +SINGLE_BATTLE_TEST("Snow halves the power of Solar Beam", s16 damage) +{ + u16 move; + PARAMETRIZE{ move = MOVE_CELEBRATE; } + PARAMETRIZE{ move = MOVE_SNOWSCAPE; } + GIVEN { + ASSUME(gBattleMoves[MOVE_SOLAR_BEAM].effect == EFFECT_SOLAR_BEAM); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, move); MOVE(player, MOVE_SOLAR_BEAM); } + TURN { SKIP_TURN(player); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.5), results[1].damage); + } +} + +SINGLE_BATTLE_TEST("Snow halves the power of Solar Blade", s16 damage) +{ + u16 move; + KNOWN_FAILING; // fails bc the bp of solar blade gets rounded up which leads to slightly incorrect calcs down the line + PARAMETRIZE{ move = MOVE_CELEBRATE; } + PARAMETRIZE{ move = MOVE_SNOWSCAPE; } + GIVEN { + ASSUME(gBattleMoves[MOVE_SOLAR_BLADE].effect == EFFECT_SOLAR_BEAM); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(opponent, move); MOVE(player, MOVE_SOLAR_BLADE); } + TURN { SKIP_TURN(player); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.5), results[1].damage); + } +} + +SINGLE_BATTLE_TEST("Snow causes Moonlight to recover 1/4 of the user's max HP") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_MOONLIGHT].effect == EFFECT_MOONLIGHT); + PLAYER(SPECIES_WOBBUFFET) { HP(TEST_HP); MaxHP(MAX_HP); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_SNOWSCAPE); MOVE(player, MOVE_MOONLIGHT); } + } SCENE { + HP_BAR(player, hp: TEST_HP + (MAX_HP/4)); + } +} + +SINGLE_BATTLE_TEST("Snow causes Moonlight to recover 1/4 of the user's max HP") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_MOONLIGHT].effect == EFFECT_MOONLIGHT); + PLAYER(SPECIES_WOBBUFFET) { HP(TEST_HP); MaxHP(MAX_HP); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_SNOWSCAPE); MOVE(player, MOVE_MOONLIGHT); } + } SCENE { + HP_BAR(player, hp: TEST_HP + (MAX_HP/4)); + } +} + +SINGLE_BATTLE_TEST("Snow causes Synthesis to recover 1/4 of the user's max HP") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_SYNTHESIS].effect == EFFECT_SYNTHESIS); + PLAYER(SPECIES_WOBBUFFET) { HP(TEST_HP); MaxHP(MAX_HP); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_SNOWSCAPE); MOVE(player, MOVE_SYNTHESIS); } + } SCENE { + HP_BAR(player, hp: TEST_HP + (MAX_HP/4)); + } +} + +SINGLE_BATTLE_TEST("Snow causes Morning Sun to recover 1/4 of the user's max HP") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_MORNING_SUN].effect == EFFECT_MORNING_SUN); + PLAYER(SPECIES_WOBBUFFET) { HP(TEST_HP); MaxHP(MAX_HP); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_SNOWSCAPE); MOVE(player, MOVE_MORNING_SUN); } + } SCENE { + HP_BAR(player, hp: TEST_HP + (MAX_HP/4)); + } +} + +#undef MAX_HP +#undef TEST_HP \ No newline at end of file From d6f15104a38cc5186b60591c0c747dedf69e4504 Mon Sep 17 00:00:00 2001 From: CallmeEchoo Date: Tue, 2 May 2023 16:23:31 +0200 Subject: [PATCH 354/428] remove duplicate stringIDs --- include/constants/battle_string_ids.h | 3 --- 1 file changed, 3 deletions(-) diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index f9d55a8a9dd7..a43ea91ec35f 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -655,9 +655,6 @@ #define STRINGID_STARTEDSNOW 653 #define STRINGID_SNOWCONTINUES 654 #define STRINGID_SNOWSTOPPED 655 -#define STRINGID_STARTEDSNOW 653 -#define STRINGID_SNOWCONTINUES 654 -#define STRINGID_SNOWSTOPPED 655 #define STRINGID_SNOWWARNINGSNOW 656 #define BATTLESTRINGS_COUNT 657 From 76721b16f89ca49893471880a68b193836450d09 Mon Sep 17 00:00:00 2001 From: CallmeEchoo <65783283+CallmeEchoo@users.noreply.github.com> Date: Sat, 29 Apr 2023 12:30:39 +0200 Subject: [PATCH 355/428] add snow weather --- asm/macros/battle_script.inc | 4 ++ data/battle_anim_scripts.s | 19 +++++++++- data/battle_scripts_1.s | 30 ++++++++++++++- include/battle_ai_util.h | 1 + include/battle_scripts.h | 4 +- include/config/battle.h | 1 + include/constants/battle.h | 6 ++- include/constants/battle_ai.h | 1 + include/constants/battle_anim.h | 2 + include/constants/battle_move_effects.h | 3 +- include/constants/battle_string_ids.h | 11 +++++- src/battle_ai_main.c | 34 ++++++++++++++++- src/battle_ai_util.c | 30 +++++++++++++-- src/battle_anim_effects_3.c | 2 + src/battle_gfx_sfx_util.c | 1 + src/battle_main.c | 4 +- src/battle_message.c | 19 +++++++++- src/battle_script_commands.c | 29 ++++++++++++--- src/battle_tv.c | 3 +- src/battle_util.c | 49 +++++++++++++++++++++---- src/data/battle_moves.h | 2 +- 21 files changed, 225 insertions(+), 30 deletions(-) diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index 78fb914063bd..bfc81fbb6c32 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -1346,6 +1346,10 @@ callnative BS_ItemRestorePP .endm + .macro setsnow + callnative BS_SetSnow + .endm + @ various command changed to more readable macros .macro cancelmultiturnmoves battler:req various \battler, VARIOUS_CANCEL_MULTI_TURN_MOVES diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index dcfdac88ed58..01311c35d193 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -947,6 +947,7 @@ gBattleAnims_General:: .4byte General_ShellTrapSetUp @ B_ANIM_SHELL_TRAP_SETUP .4byte General_ZMoveActivate @ B_ANIM_ZMOVE_ACTIVATE .4byte General_AffectionHangedOn @ B_ANIM_AFFECTION_HANGED_ON + .4byte General_Snow @ B_ANIM_SNOW_CONTINUES .align 2 gBattleAnims_Special:: @@ -14448,7 +14449,19 @@ Move_ELECTRO_DRIFT:: Move_SHED_TAIL:: Move_CHILLY_RECEPTION:: Move_TIDY_UP:: -Move_SNOWSCAPE:: + +@ Also used by Snow weather. Currently identical with Move_HAIL +Move_SNOWSCAPE: + loadspritegfx ANIM_TAG_HAIL + loadspritegfx ANIM_TAG_ICE_CRYSTALS + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 3, 0, 6, RGB_BLACK + waitforvisualfinish + createvisualtask AnimTask_Hail, 5 + loopsewithpan SE_M_HAIL, 0, 8, 10 + waitforvisualfinish + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 3, 6, 0, RGB_BLACK + end + Move_POUNCE:: Move_TRAILBLAZE:: Move_CHILLING_WATER:: @@ -23924,6 +23937,7 @@ Move_WEATHER_BALL: jumpreteq ANIM_WEATHER_RAIN, WeatherBallWater jumpreteq ANIM_WEATHER_SANDSTORM, WeatherBallSandstorm jumpreteq ANIM_WEATHER_HAIL, WeatherBallIce + jumpreteq ANIM_WEATHER_SNOW, WeatherBallIce WeatherBallNormal: loadspritegfx ANIM_TAG_IMPACT createsprite gWeatherBallNormalDownSpriteTemplate, ANIM_TARGET, 2, -30, -100, 25, 1, 0, 0 @@ -24679,6 +24693,9 @@ General_Sandstorm: General_Hail: goto Move_HAIL +General_Snow: + goto Move_SNOWSCAPE + General_LeechSeedDrain: createvisualtask AnimTask_GetBattlersFromArg, 5 delay 0 diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 4f41d154ef39..d949e6cf72ff 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -429,6 +429,7 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectBarbBarrage @ EFFECT_BARB_BARRAGE .4byte BattleScript_EffectRevivalBlessing @ EFFECT_REVIVAL_BLESSING .4byte BattleScript_EffectFrostbiteHit @ EFFECT_FROSTBITE_HIT + .4byte BattleScript_EffectSnow @ EFFECT_SNOW BattleScript_EffectRevivalBlessing:: attackcanceler @@ -6873,6 +6874,14 @@ BattleScript_DamagingWeatherContinuesEnd:: bicword gHitMarker, HITMARKER_SKIP_DMG_TRACK | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE | HITMARKER_GRUDGE end2 +BattleScript_SnowContinuesOrEnds:: + printfromtable gSnowContinuesStringIds + waitmessage B_WAIT_TIME_LONG + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_SNOW_STOPPED, BattleScript_SnowContinuesOrEndsEnd + playanimation BS_ATTACKER, B_ANIM_SNOW_CONTINUES +BattleScript_SnowContinuesOrEndsEnd:: + end2 + BattleScript_SandStormHailEnds:: printfromtable gSandStormHailEndStringIds waitmessage B_WAIT_TIME_LONG @@ -8856,7 +8865,7 @@ BattleScript_MimicryActivates_End3:: waitmessage B_WAIT_TIME_SHORT end3 -BattleScript_SnowWarningActivates:: +BattleScript_SnowWarningActivatesHail:: pause B_WAIT_TIME_SHORT call BattleScript_AbilityPopUp printstring STRINGID_SNOWWARNINGHAIL @@ -8865,6 +8874,15 @@ BattleScript_SnowWarningActivates:: call BattleScript_ActivateWeatherAbilities end3 +BattleScript_SnowWarningActivatesSnow:: + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp + printstring STRINGID_SNOWWARNINGSNOW + waitstate + playanimation BS_BATTLER_0, B_ANIM_SNOW_CONTINUES + call BattleScript_WeatherFormChanges + end3 + BattleScript_ActivateTerrainEffects: savetarget setbyte gBattlerTarget, 0 @@ -10450,3 +10468,13 @@ BattleScript_BerserkGeneRet_OwnTempoPrevents: BattleScript_BerserkGeneRet_End: removeitem BS_SCRIPTING end3 + +BattleScript_EffectSnow:: + attackcanceler + attackstring + ppreduce + jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_SUN_PRIMAL, BattleScript_ExtremelyHarshSunlightWasNotLessened + jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_RAIN_PRIMAL, BattleScript_NoReliefFromHeavyRain + jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_STRONG_WINDS, BattleScript_MysteriousAirCurrentBlowsOn + setsnow + goto BattleScript_MoveWeatherChange diff --git a/include/battle_ai_util.h b/include/battle_ai_util.h index 1a0fbc2645b2..37c9e9c19c3c 100644 --- a/include/battle_ai_util.h +++ b/include/battle_ai_util.h @@ -112,6 +112,7 @@ bool32 IsEncoreEncouragedEffect(u16 moveEffect); void ProtectChecks(u8 battlerAtk, u8 battlerDef, u16 move, u16 predictedMove, s16 *score); bool32 ShouldSetSandstorm(u8 battler, u16 ability, u16 holdEffect); bool32 ShouldSetHail(u8 battler, u16 ability, u16 holdEffect); +bool32 ShouldSetSnow(u8 battler, u16 ability, u16 holdEffect); bool32 ShouldSetRain(u8 battlerAtk, u16 ability, u16 holdEffect); bool32 ShouldSetSun(u8 battlerAtk, u16 atkAbility, u16 holdEffect); bool32 HasSleepMoveWithLowAccuracy(u8 battlerAtk, u8 battlerDef); diff --git a/include/battle_scripts.h b/include/battle_scripts.h index 8cd8606a544b..68b3a0c9654c 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -43,6 +43,7 @@ extern const u8 BattleScript_ActionSwitch[]; extern const u8 BattleScript_Pausex20[]; extern const u8 BattleScript_LevelUp[]; extern const u8 BattleScript_RainContinuesOrEnds[]; +extern const u8 BattleScript_SnowContinuesOrEnds[]; extern const u8 BattleScript_DamagingWeatherContinues[]; extern const u8 BattleScript_SandStormHailEnds[]; extern const u8 BattleScript_SunlightContinues[]; @@ -272,7 +273,8 @@ extern const u8 BattleScript_CursedBodyActivates[]; extern const u8 BattleScript_MummyActivates[]; extern const u8 BattleScript_WeakArmorActivates[]; extern const u8 BattleScript_FellStingerRaisesStat[]; -extern const u8 BattleScript_SnowWarningActivates[]; +extern const u8 BattleScript_SnowWarningActivatesHail[]; +extern const u8 BattleScript_SnowWarningActivatesSnow[]; extern const u8 BattleScript_HarvestActivates[]; extern const u8 BattleScript_ImposterActivates[]; extern const u8 BattleScript_SelectingNotAllowedMoveAssaultVest[]; diff --git a/include/config/battle.h b/include/config/battle.h index da58c8bbf83d..1ed337ca3555 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -120,6 +120,7 @@ #define B_SYMBIOSIS_GEMS GEN_LATEST // In Gen7+, Symbiosis passes an item after a gem-boosted attack. Previously, items are passed before the gem-boosted attack hits, making the item effect apply. #define B_CHECK_IF_CHARGED_UP TRUE // If set to TRUE, certain abilities such as Electromorphosis WILL check if the STATUS3_CHARGED_UP status flag is applied. #define B_ABSORBING_ABILITY_STRING GEN_LATEST // In Gen5+, the abilities that absorb moves of a certain type use a generic string for stat increases and decreases. +#define B_SNOW_WARNING GEN_9 // In Gen9+, Snowwarning will summon snow instead of hail. // Item settings #define B_HP_BERRIES GEN_LATEST // In Gen4+, berries which restore hp activate immediately after HP drops to half. In Gen3, the effect occurs at the end of the turn. diff --git a/include/constants/battle.h b/include/constants/battle.h index 950d98484f5b..814d1bfa57fb 100644 --- a/include/constants/battle.h +++ b/include/constants/battle.h @@ -288,8 +288,11 @@ #define B_WEATHER_HAIL_PERMANENT (1 << 10) #define B_WEATHER_HAIL (B_WEATHER_HAIL_TEMPORARY | B_WEATHER_HAIL_PERMANENT) #define B_WEATHER_STRONG_WINDS (1 << 11) -#define B_WEATHER_ANY (B_WEATHER_RAIN | B_WEATHER_SANDSTORM | B_WEATHER_SUN | B_WEATHER_HAIL | B_WEATHER_STRONG_WINDS) +#define B_WEATHER_ANY (B_WEATHER_RAIN | B_WEATHER_SANDSTORM | B_WEATHER_SUN | B_WEATHER_HAIL | B_WEATHER_STRONG_WINDS | B_WEATHER_SNOW) #define B_WEATHER_PRIMAL_ANY (B_WEATHER_RAIN_PRIMAL | B_WEATHER_SUN_PRIMAL | B_WEATHER_STRONG_WINDS) +#define B_WEATHER_SNOW_TEMPORARY (1 << 12) +#define B_WEATHER_SNOW_PERMANENT (1 << 13) +#define B_WEATHER_SNOW (B_WEATHER_SNOW_TEMPORARY | B_WEATHER_SNOW_PERMANENT) // Battle Weather as enum #define ENUM_WEATHER_NONE 0 @@ -300,6 +303,7 @@ #define ENUM_WEATHER_SUN_PRIMAL 5 #define ENUM_WEATHER_RAIN_PRIMAL 6 #define ENUM_WEATHER_STRONG_WINDS 7 +#define ENUM_WEATHER_SNOW 8 // Move Effects #define MOVE_EFFECT_SLEEP 1 diff --git a/include/constants/battle_ai.h b/include/constants/battle_ai.h index 1316054cd1b4..81dbdad16393 100644 --- a/include/constants/battle_ai.h +++ b/include/constants/battle_ai.h @@ -30,6 +30,7 @@ #define AI_WEATHER_RAIN 2 #define AI_WEATHER_SANDSTORM 3 #define AI_WEATHER_HAIL 4 +#define AI_WEATHER_SNOW 5 // get_how_powerful_move_is #define MOVE_POWER_OTHER 0 diff --git a/include/constants/battle_anim.h b/include/constants/battle_anim.h index 46e229a3190b..4b772022e513 100644 --- a/include/constants/battle_anim.h +++ b/include/constants/battle_anim.h @@ -544,6 +544,7 @@ #define B_ANIM_SHELL_TRAP_SETUP 34 #define B_ANIM_ZMOVE_ACTIVATE 35 // Using Z Moves #define B_ANIM_AFFECTION_HANGED_ON 36 +#define B_ANIM_SNOW_CONTINUES 37 // special animations table (gBattleAnims_Special) #define B_ANIM_LVL_UP 0 @@ -591,6 +592,7 @@ #define ANIM_WEATHER_RAIN 2 #define ANIM_WEATHER_SANDSTORM 3 #define ANIM_WEATHER_HAIL 4 +#define ANIM_WEATHER_SNOW 5 // mon pal blend #define ANIM_PAL_BG 0x1 diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h index 5df12b4496c5..bcc077055e05 100644 --- a/include/constants/battle_move_effects.h +++ b/include/constants/battle_move_effects.h @@ -406,7 +406,8 @@ #define EFFECT_BARB_BARRAGE 400 #define EFFECT_REVIVAL_BLESSING 401 #define EFFECT_FROSTBITE_HIT 402 +#define EFFECT_SNOW 403 -#define NUM_BATTLE_MOVE_EFFECTS 403 +#define NUM_BATTLE_MOVE_EFFECTS 404 #endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index 48abc03b9e8d..4946f74e7712 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -659,8 +659,12 @@ #define STRINGID_PKMNFROSTBITEHEALED 657 #define STRINGID_PKMNFROSTBITEHEALED2 658 #define STRINGID_PKMNFROSTBITEHEALEDBY 659 +#define STRINGID_STARTEDSNOW 660 +#define STRINGID_SNOWCONTINUES 661 +#define STRINGID_SNOWSTOPPED 662 +#define STRINGID_SNOWWARNINGSNOW 663 -#define BATTLESTRINGS_COUNT 660 +#define BATTLESTRINGS_COUNT 664 // This is the string id that gBattleStringsTable starts with. // String ids before this (e.g. STRINGID_INTROMSG) are not in the table, @@ -726,12 +730,17 @@ #define B_MSG_STARTED_SANDSTORM 3 #define B_MSG_STARTED_SUNLIGHT 4 #define B_MSG_STARTED_HAIL 5 +#define B_MSG_STARTED_SNOW 6 // gRainContinuesStringIds #define B_MSG_RAIN_CONTINUES 0 #define B_MSG_DOWNPOUR_CONTINUES 1 #define B_MSG_RAIN_STOPPED 2 +// gSnowContinuesStringIds +#define B_MSG_SNOW_CONTINUES 0 +#define B_MSG_SNOW_STOPPED 1 + // gSandStormHailContinuesStringIds / gSandStormHailDmgStringIds/ gSandStormHailEndStringIds #define B_MSG_SANDSTORM 0 #define B_MSG_HAIL 1 diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 7dc33dd3b252..de64913fac1a 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -1372,7 +1372,7 @@ static s16 AI_CheckBadMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) case EFFECT_AURORA_VEIL: if (gSideStatuses[GetBattlerSide(battlerAtk)] & SIDE_STATUS_AURORA_VEIL || PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove) - || !(gBattleWeather & B_WEATHER_HAIL)) + || !(gBattleWeather & B_WEATHER_HAIL && gBattleWeather & B_WEATHER_SNOW)) score -= 10; break; case EFFECT_OHKO: @@ -1578,7 +1578,12 @@ static s16 AI_CheckBadMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) score -= 8; break; case EFFECT_HAIL: - if (gBattleWeather & (B_WEATHER_HAIL | B_WEATHER_PRIMAL_ANY) + if (gBattleWeather & (B_WEATHER_HAIL | B_WEATHER_PRIMAL_ANY) // should hail be discouraged if snow is up? + || PartnerMoveEffectIsWeather(BATTLE_PARTNER(battlerAtk), AI_DATA->partnerMove)) + score -= 8; + break; + case EFFECT_SNOW: + if (gBattleWeather & (B_WEATHER_SNOW | B_WEATHER_PRIMAL_ANY) // should snow be discouraged if hail is up? || PartnerMoveEffectIsWeather(BATTLE_PARTNER(battlerAtk), AI_DATA->partnerMove)) score -= 8; break; @@ -2803,6 +2808,13 @@ static s16 AI_DoubleBattle(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) RETURN_SCORE_PLUS(2); // our partner benefits from hail } break; + case EFFECT_SNOW: + if (IsBattlerAlive(battlerAtkPartner) + && ShouldSetSnow(battlerAtkPartner, atkPartnerAbility, atkPartnerHoldEffect)) + { + RETURN_SCORE_PLUS(2); // our partner benefits from snow + } + break; } // global move effect check @@ -3965,6 +3977,22 @@ static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) score += 2; } break; + case EFFECT_SNOW: // any other reasons? + if (ShouldSetSnow(battlerAtk, AI_DATA->abilities[battlerAtk], AI_DATA->holdEffects[battlerAtk])) + { + if ((HasMoveEffect(battlerAtk, EFFECT_AURORA_VEIL) || HasMoveEffect(BATTLE_PARTNER(battlerAtk), EFFECT_AURORA_VEIL)) + && ShouldSetScreen(battlerAtk, battlerDef, EFFECT_AURORA_VEIL)) + score += 3; + + score++; + if (AI_DATA->holdEffects[battlerAtk] == HOLD_EFFECT_ICY_ROCK) + score++; + if (HasMoveEffect(battlerDef, EFFECT_MORNING_SUN) + || HasMoveEffect(battlerDef, EFFECT_SYNTHESIS) + || HasMoveEffect(battlerDef, EFFECT_MOONLIGHT)) + score += 2; + } + break; case EFFECT_RAIN_DANCE: if (ShouldSetRain(battlerAtk, AI_DATA->abilities[battlerAtk], AI_DATA->holdEffects[battlerAtk])) { @@ -4948,6 +4976,7 @@ static s16 AI_SetupFirstTurn(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) case EFFECT_SUNNY_DAY: case EFFECT_SANDSTORM: case EFFECT_HAIL: + case EFFECT_SNOW: case EFFECT_GEOMANCY: case EFFECT_VICTORY_DANCE: case EFFECT_HIT_SET_ENTRY_HAZARD: @@ -5174,6 +5203,7 @@ static s16 AI_HPAware(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) case EFFECT_SUNNY_DAY: case EFFECT_SANDSTORM: case EFFECT_HAIL: + case EFFECT_SNOW: case EFFECT_RAIN_DANCE: score -= 2; break; diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 3adbd77ae289..010c5a01c983 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -331,6 +331,7 @@ static const u16 sEncouragedEncoreEffects[] = EFFECT_SPIT_UP, EFFECT_SWALLOW, EFFECT_HAIL, + EFFECT_SNOW, EFFECT_TORMENT, EFFECT_WILL_O_WISP, EFFECT_FOLLOW_ME, @@ -1504,7 +1505,7 @@ bool32 IsMoveEncouragedToHit(u8 battlerAtk, u8 battlerDef, u16 move) // increased accuracy but don't always hit if ((AI_WeatherHasEffect() && (((gBattleWeather & B_WEATHER_RAIN) && (gBattleMoves[move].effect == EFFECT_THUNDER || gBattleMoves[move].effect == EFFECT_HURRICANE)) - || (((gBattleWeather & B_WEATHER_HAIL) && move == MOVE_BLIZZARD)))) + || (((gBattleWeather & (B_WEATHER_HAIL | B_WEATHER_SNOW)) && move == MOVE_BLIZZARD)))) || (gBattleMoves[move].effect == EFFECT_VITAL_THROW) #if B_MINIMIZE_DMG_ACC >= GEN_6 || ((gStatuses3[battlerDef] & STATUS3_MINIMIZED) && (gBattleMoves[move].flags & FLAG_DMG_MINIMIZE)) @@ -1579,7 +1580,7 @@ bool32 ShouldSetHail(u8 battler, u16 ability, u16 holdEffect) { if (!AI_WeatherHasEffect()) return FALSE; - else if (gBattleWeather & B_WEATHER_HAIL) + else if (gBattleWeather & B_WEATHER_HAIL) // dont set hail if snow is up? return FALSE; if (ability == ABILITY_SNOW_CLOAK @@ -1649,6 +1650,26 @@ bool32 ShouldSetSun(u8 battlerAtk, u16 atkAbility, u16 holdEffect) return FALSE; } +bool32 ShouldSetSnow(u8 battler, u16 ability, u16 holdEffect) // any other reasons snow should be set? +{ + if (!AI_WeatherHasEffect()) + return FALSE; + else if (gBattleWeather & B_WEATHER_SNOW) // dont set snow if hail is up? + return FALSE; + + if (ability == ABILITY_SNOW_CLOAK + || ability == ABILITY_ICE_BODY + || ability == ABILITY_FORECAST + || ability == ABILITY_SLUSH_RUSH + || IS_BATTLER_OF_TYPE(battler, TYPE_ICE) + || HasMove(battler, MOVE_BLIZZARD) + || HasMoveEffect(battler, EFFECT_AURORA_VEIL) + || HasMoveEffect(battler, EFFECT_WEATHER_BALL)) + { + return TRUE; + } + return FALSE; +} void ProtectChecks(u8 battlerAtk, u8 battlerDef, u16 move, u16 predictedMove, s16 *score) { @@ -3137,7 +3158,7 @@ bool32 ShouldSetScreen(u8 battlerAtk, u8 battlerDef, u16 moveEffect) { case EFFECT_AURORA_VEIL: // Use only in Hail and only if AI doesn't already have Reflect, Light Screen or Aurora Veil itself active. - if (gBattleWeather & B_WEATHER_HAIL + if ((gBattleWeather & (B_WEATHER_HAIL | B_WEATHER_SNOW)) && !(gSideStatuses[atkSide] & (SIDE_STATUS_REFLECT | SIDE_STATUS_LIGHTSCREEN | SIDE_STATUS_AURORA_VEIL))) return TRUE; break; @@ -3242,7 +3263,8 @@ bool32 PartnerMoveEffectIsWeather(u8 battlerAtkPartner, u16 partnerMove) && (gBattleMoves[partnerMove].effect == EFFECT_SUNNY_DAY || gBattleMoves[partnerMove].effect == EFFECT_RAIN_DANCE || gBattleMoves[partnerMove].effect == EFFECT_SANDSTORM - || gBattleMoves[partnerMove].effect == EFFECT_HAIL)) + || gBattleMoves[partnerMove].effect == EFFECT_HAIL + || gBattleMoves[partnerMove].effect == EFFECT_SNOW)) return TRUE; return FALSE; diff --git a/src/battle_anim_effects_3.c b/src/battle_anim_effects_3.c index 7d449c767eb7..4e510c59c754 100755 --- a/src/battle_anim_effects_3.c +++ b/src/battle_anim_effects_3.c @@ -5603,6 +5603,8 @@ void AnimTask_GetWeather(u8 taskId) gBattleAnimArgs[ARG_RET_ID] = ANIM_WEATHER_SANDSTORM; else if (gWeatherMoveAnim & B_WEATHER_HAIL) gBattleAnimArgs[ARG_RET_ID] = ANIM_WEATHER_HAIL; + else if (gWeatherMoveAnim & B_WEATHER_SNOW) + gBattleAnimArgs[ARG_RET_ID] = ANIM_WEATHER_SNOW; DestroyAnimVisualTask(taskId); } diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index c06a7795a5ef..b1187b59e756 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -492,6 +492,7 @@ static bool8 ShouldAnimBeDoneRegardlessOfSubstitute(u8 animId) case B_ANIM_SUN_CONTINUES: case B_ANIM_SANDSTORM_CONTINUES: case B_ANIM_HAIL_CONTINUES: + case B_ANIM_SNOW_CONTINUES: case B_ANIM_SNATCH_MOVE: return TRUE; default: diff --git a/src/battle_main.c b/src/battle_main.c index 91d5c3aa50d5..7270e0f36915 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -4642,7 +4642,7 @@ u32 GetBattlerTotalSpeedStat(u8 battlerId) speed *= 2; else if (ability == ABILITY_SAND_RUSH && gBattleWeather & B_WEATHER_SANDSTORM) speed *= 2; - else if (ability == ABILITY_SLUSH_RUSH && gBattleWeather & B_WEATHER_HAIL) + else if (ability == ABILITY_SLUSH_RUSH && (gBattleWeather & (B_WEATHER_HAIL | B_WEATHER_SNOW))) speed *= 2; } @@ -5590,7 +5590,7 @@ void SetTypeBeforeUsingMove(u16 move, u8 battlerAtk) gBattleStruct->dynamicMoveType = TYPE_ROCK | F_DYNAMIC_TYPE_2; else if (gBattleWeather & B_WEATHER_SUN && holdEffect != HOLD_EFFECT_UTILITY_UMBRELLA) gBattleStruct->dynamicMoveType = TYPE_FIRE | F_DYNAMIC_TYPE_2; - else if (gBattleWeather & B_WEATHER_HAIL) + else if (gBattleWeather & (B_WEATHER_HAIL |B_WEATHER_SNOW)) gBattleStruct->dynamicMoveType = TYPE_ICE | F_DYNAMIC_TYPE_2; else gBattleStruct->dynamicMoveType = TYPE_NORMAL | F_DYNAMIC_TYPE_2; diff --git a/src/battle_message.c b/src/battle_message.c index 29fdbd28c246..66bc4a77370d 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -363,8 +363,11 @@ static const u8 sText_SunlightGotBright[] = _("The sunlight got bright!"); static const u8 sText_SunlightStrong[] = _("The sunlight is strong."); static const u8 sText_SunlightFaded[] = _("The sunlight faded."); static const u8 sText_StartedHail[] = _("It started to hail!"); +static const u8 sText_StartedSnow[] = _("It started to snow!"); static const u8 sText_HailContinues[] = _("Hail continues to fall."); +static const u8 sText_SnowContinues[] = _("Snow continues to fall."); static const u8 sText_HailStopped[] = _("The hail stopped."); +static const u8 sText_SnowStopped[] = _("The snow stopped."); static const u8 sText_FailedToSpitUp[] = _("But it failed to spit up\na thing!"); static const u8 sText_FailedToSwallow[] = _("But it failed to swallow\na thing!"); static const u8 sText_WindBecameHeatWave[] = _("The wind turned into a\nHEAT WAVE!"); @@ -614,6 +617,7 @@ static const u8 sText_AnticipationActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFI static const u8 sText_ForewarnActivates[] = _("{B_SCR_ACTIVE_ABILITY} alerted {B_SCR_ACTIVE_NAME_WITH_PREFIX}\nto the {B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1}!"); static const u8 sText_IceBodyHpGain[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY}\nhealed it a little bit!"); static const u8 sText_SnowWarningHail[] = _("It started to hail!"); +static const u8 sText_SnowWarningSnow[] = _("It started to snow!"); static const u8 sText_FriskActivates[] = _("{B_ATK_NAME_WITH_PREFIX} frisked {B_DEF_NAME_WITH_PREFIX} and\nfound its {B_LAST_ITEM}!"); static const u8 sText_UnnerveEnters[] = _("The opposing team is too nervous\nto eat Berries!"); static const u8 sText_HarvestBerry[] = _("{B_ATK_NAME_WITH_PREFIX} harvested\nits {B_LAST_ITEM}!"); @@ -1141,6 +1145,9 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_STARTEDHAIL - BATTLESTRINGS_TABLE_START] = sText_StartedHail, [STRINGID_HAILCONTINUES - BATTLESTRINGS_TABLE_START] = sText_HailContinues, [STRINGID_HAILSTOPPED - BATTLESTRINGS_TABLE_START] = sText_HailStopped, + [STRINGID_STARTEDSNOW - BATTLESTRINGS_TABLE_START] = sText_StartedSnow, + [STRINGID_SNOWCONTINUES -BATTLESTRINGS_TABLE_START] = sText_SnowContinues, + [STRINGID_SNOWSTOPPED - BATTLESTRINGS_TABLE_START] = sText_SnowStopped, [STRINGID_FAILEDTOSPITUP - BATTLESTRINGS_TABLE_START] = sText_FailedToSpitUp, [STRINGID_FAILEDTOSWALLOW - BATTLESTRINGS_TABLE_START] = sText_FailedToSwallow, [STRINGID_WINDBECAMEHEATWAVE - BATTLESTRINGS_TABLE_START] = sText_WindBecameHeatWave, @@ -1361,6 +1368,7 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_FOREWARNACTIVATES - BATTLESTRINGS_TABLE_START] = sText_ForewarnActivates, [STRINGID_ICEBODYHPGAIN - BATTLESTRINGS_TABLE_START] = sText_IceBodyHpGain, [STRINGID_SNOWWARNINGHAIL - BATTLESTRINGS_TABLE_START] = sText_SnowWarningHail, + [STRINGID_SNOWWARNINGSNOW - BATTLESTRINGS_TABLE_START] = sText_SnowWarningSnow, [STRINGID_FRISKACTIVATES - BATTLESTRINGS_TABLE_START] = sText_FriskActivates, [STRINGID_UNNERVEENTERS - BATTLESTRINGS_TABLE_START] = sText_UnnerveEnters, [STRINGID_HARVESTBERRY - BATTLESTRINGS_TABLE_START] = sText_HarvestBerry, @@ -1557,12 +1565,13 @@ const u16 gMoveWeatherChangeStringIds[] = [B_MSG_STARTED_SANDSTORM] = STRINGID_SANDSTORMBREWED, [B_MSG_STARTED_SUNLIGHT] = STRINGID_SUNLIGHTGOTBRIGHT, [B_MSG_STARTED_HAIL] = STRINGID_STARTEDHAIL, + [B_MSG_STARTED_SNOW] = STRINGID_STARTEDSNOW, }; const u16 gSandStormHailContinuesStringIds[] = { [B_MSG_SANDSTORM] = STRINGID_SANDSTORMRAGES, - [B_MSG_HAIL] = STRINGID_HAILCONTINUES + [B_MSG_HAIL] = STRINGID_HAILCONTINUES, }; const u16 gSandStormHailDmgStringIds[] = @@ -1574,7 +1583,7 @@ const u16 gSandStormHailDmgStringIds[] = const u16 gSandStormHailEndStringIds[] = { [B_MSG_SANDSTORM] = STRINGID_SANDSTORMSUBSIDED, - [B_MSG_HAIL] = STRINGID_HAILSTOPPED + [B_MSG_HAIL] = STRINGID_HAILSTOPPED, }; const u16 gRainContinuesStringIds[] = @@ -1584,6 +1593,12 @@ const u16 gRainContinuesStringIds[] = [B_MSG_RAIN_STOPPED] = STRINGID_RAINSTOPPED }; +const u16 gSnowContinuesStringIds[] = +{ + [B_MSG_SNOW_CONTINUES] = STRINGID_SNOWCONTINUES, + [B_MSG_SNOW_STOPPED] = STRINGID_SNOWSTOPPED, +}; + const u16 gProtectLikeUsedStringIds[] = { [B_MSG_PROTECTED_ITSELF] = STRINGID_PKMNPROTECTEDITSELF2, diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 1784f9682bfc..3bc77e84853b 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -1812,7 +1812,7 @@ static bool32 AccuracyCalcHelper(u16 move) return TRUE; } #if B_BLIZZARD_HAIL >= GEN_4 - else if ((gBattleWeather & B_WEATHER_HAIL) && move == MOVE_BLIZZARD) + else if ((gBattleWeather & (B_WEATHER_HAIL | B_WEATHER_SNOW)) && move == MOVE_BLIZZARD) { // thunder/hurricane ignore acc checks in rain unless target is holding utility umbrella JumpIfMoveFailed(7, move); @@ -1892,7 +1892,7 @@ u32 GetTotalAccuracy(u32 battlerAtk, u32 battlerDef, u32 move, u32 atkAbility, u if (defAbility == ABILITY_SAND_VEIL && WEATHER_HAS_EFFECT && gBattleWeather & B_WEATHER_SANDSTORM) calc = (calc * 80) / 100; // 1.2 sand veil loss - else if (defAbility == ABILITY_SNOW_CLOAK && WEATHER_HAS_EFFECT && gBattleWeather & B_WEATHER_HAIL) + else if (defAbility == ABILITY_SNOW_CLOAK && WEATHER_HAS_EFFECT && (gBattleWeather & (B_WEATHER_HAIL | B_WEATHER_SNOW))) calc = (calc * 80) / 100; // 1.2 snow cloak loss else if (defAbility == ABILITY_TANGLED_FEET && gBattleMons[battlerDef].status2 & STATUS2_CONFUSION) calc = (calc * 50) / 100; // 1.5 tangled feet loss @@ -5190,7 +5190,8 @@ static void Cmd_playanimation(void) else if (animId == B_ANIM_RAIN_CONTINUES || animId == B_ANIM_SUN_CONTINUES || animId == B_ANIM_SANDSTORM_CONTINUES - || animId == B_ANIM_HAIL_CONTINUES) + || animId == B_ANIM_HAIL_CONTINUES + || animId == B_ANIM_SNOW_CONTINUES) { BtlController_EmitBattleAnimation(BUFFER_A, animId, *argPtr); MarkBattlerForControllerExec(gActiveBattler); @@ -5239,7 +5240,8 @@ static void Cmd_playanimation_var(void) else if (*animIdPtr == B_ANIM_RAIN_CONTINUES || *animIdPtr == B_ANIM_SUN_CONTINUES || *animIdPtr == B_ANIM_SANDSTORM_CONTINUES - || *animIdPtr == B_ANIM_HAIL_CONTINUES) + || *animIdPtr == B_ANIM_HAIL_CONTINUES + || *animIdPtr == B_ANIM_SNOW_CONTINUES) { BtlController_EmitBattleAnimation(BUFFER_A, *animIdPtr, *argPtr); MarkBattlerForControllerExec(gActiveBattler); @@ -10250,7 +10252,7 @@ static void Cmd_various(void) { VARIOUS_ARGS(); if (gSideStatuses[GET_BATTLER_SIDE(gActiveBattler)] & SIDE_STATUS_AURORA_VEIL - || !(WEATHER_HAS_EFFECT && gBattleWeather & B_WEATHER_HAIL)) + || !(WEATHER_HAS_EFFECT && gBattleWeather & (B_WEATHER_HAIL | B_WEATHER_SNOW))) { gMoveResultFlags |= MOVE_RESULT_MISSED; gBattleCommunication[MULTISTRING_CHOOSER] = 0; @@ -16559,3 +16561,20 @@ void BS_ItemRestorePP(void) { PREPARE_SPECIES_BUFFER(gBattleTextBuff1, GetMonData(mon, MON_DATA_SPECIES)); gBattlescriptCurrInstr = cmd->nextInstr; } + +void BS_SetSnow(void) +{ + NATIVE_ARGS(); + + if (!TryChangeBattleWeather(gBattlerAttacker, ENUM_WEATHER_SNOW, FALSE)) + { + gMoveResultFlags |= MOVE_RESULT_MISSED; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WEATHER_FAILED; + + } + else + { + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STARTED_SNOW; + } + gBattlescriptCurrInstr = cmd->nextInstr; +} \ No newline at end of file diff --git a/src/battle_tv.c b/src/battle_tv.c index f5c9f43c4ec9..74f8c7008cb3 100644 --- a/src/battle_tv.c +++ b/src/battle_tv.c @@ -251,6 +251,7 @@ static const u16 sPoints_MoveEffect[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_SWALLOW] = 3, // [EFFECT_UNUSED_A3] = 1, [EFFECT_HAIL] = 4, + [EFFECT_SNOW] = 4, [EFFECT_TORMENT] = 7, [EFFECT_FLATTER] = 7, [EFFECT_WILL_O_WISP] = 5, @@ -1770,6 +1771,6 @@ static void AddPointsBasedOnWeather(u16 weatherFlags, u16 moveId, u8 moveSlot) AddMovePoints(PTS_SUN, moveId, moveSlot, 0); else if (weatherFlags & B_WEATHER_SANDSTORM) AddMovePoints(PTS_SANDSTORM, moveId, moveSlot, 0); - else if (weatherFlags & B_WEATHER_HAIL) + else if (weatherFlags & (B_WEATHER_HAIL | B_WEATHER_SNOW)) AddMovePoints(PTS_HAIL, moveId, moveSlot, 0); } diff --git a/src/battle_util.c b/src/battle_util.c index 1c5a5d5d949d..563ab9818a78 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -2032,6 +2032,7 @@ enum ENDTURN_SANDSTORM, ENDTURN_SUN, ENDTURN_HAIL, + ENDTURN_SNOW, ENDTURN_GRAVITY, ENDTURN_WATER_SPORT, ENDTURN_MUD_SPORT, @@ -2394,6 +2395,27 @@ u8 DoFieldEndTurnEffects(void) } gBattleStruct->turnCountersTracker++; break; + case ENDTURN_SNOW: + if (gBattleWeather & B_WEATHER_SNOW) + { + if (!(gBattleWeather & B_WEATHER_SNOW_PERMANENT)) + { + if (--gWishFutureKnock.weatherDuration == 0) + { + gBattleWeather &= ~B_WEATHER_SNOW_TEMPORARY; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SNOW_STOPPED; + } + } + else + { + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SNOW_CONTINUES; + } + + BattleScriptExecute(BattleScript_SnowContinuesOrEnds); + effect++; + } + gBattleStruct->turnCountersTracker++; + break; case ENDTURN_TRICK_ROOM: if (gFieldStatuses & STATUS_FIELD_TRICK_ROOM && --gFieldTimers.trickRoomTimer == 0) { @@ -4032,7 +4054,7 @@ u8 TryWeatherFormChange(u8 battler) } } #endif - else if (holdEffect == HOLD_EFFECT_UTILITY_UMBRELLA || (!(gBattleWeather & (B_WEATHER_RAIN | B_WEATHER_SUN | B_WEATHER_HAIL)) && !IS_BATTLER_OF_TYPE(battler, TYPE_NORMAL))) + else if (holdEffect == HOLD_EFFECT_UTILITY_UMBRELLA || (!(gBattleWeather & (B_WEATHER_RAIN | B_WEATHER_SUN | B_WEATHER_HAIL | B_WEATHER_SNOW)) && !IS_BATTLER_OF_TYPE(battler, TYPE_NORMAL))) { SET_BATTLER_TYPE(battler, TYPE_NORMAL); ret = CASTFORM_NORMAL + 1; @@ -4047,7 +4069,7 @@ u8 TryWeatherFormChange(u8 battler) SET_BATTLER_TYPE(battler, TYPE_WATER); ret = CASTFORM_WATER + 1; } - else if (gBattleWeather & B_WEATHER_HAIL && !IS_BATTLER_OF_TYPE(battler, TYPE_ICE)) + else if (gBattleWeather & (B_WEATHER_HAIL | B_WEATHER_SNOW) && !IS_BATTLER_OF_TYPE(battler, TYPE_ICE)) { SET_BATTLER_TYPE(battler, TYPE_ICE); ret = CASTFORM_ICE + 1; @@ -4083,6 +4105,7 @@ static const u16 sWeatherFlagsInfo[][3] = [ENUM_WEATHER_SANDSTORM] = {B_WEATHER_SANDSTORM_TEMPORARY, B_WEATHER_SANDSTORM_PERMANENT, HOLD_EFFECT_SMOOTH_ROCK}, [ENUM_WEATHER_HAIL] = {B_WEATHER_HAIL_TEMPORARY, B_WEATHER_HAIL_PERMANENT, HOLD_EFFECT_ICY_ROCK}, [ENUM_WEATHER_STRONG_WINDS] = {B_WEATHER_STRONG_WINDS, B_WEATHER_STRONG_WINDS, HOLD_EFFECT_NONE}, + [ENUM_WEATHER_SNOW] = {B_WEATHER_SNOW_TEMPORARY, B_WEATHER_SNOW_PERMANENT, HOLD_EFFECT_ICY_ROCK}, }; static void ShouldChangeFormInWeather(u8 battler) @@ -4103,7 +4126,6 @@ static void ShouldChangeFormInWeather(u8 battler) bool32 TryChangeBattleWeather(u8 battler, u32 weatherEnumId, bool32 viaAbility) { u16 battlerAbility = GetBattlerAbility(battler); - if (gBattleWeather & B_WEATHER_PRIMAL_ANY && battlerAbility != ABILITY_DESOLATE_LAND && battlerAbility != ABILITY_PRIMORDIAL_SEA @@ -4129,7 +4151,6 @@ bool32 TryChangeBattleWeather(u8 battler, u32 weatherEnumId, bool32 viaAbility) ShouldChangeFormInWeather(battler); return TRUE; } - return FALSE; } @@ -4634,11 +4655,19 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move } break; case ABILITY_SNOW_WARNING: + #if B_SNOW_WARNING >= GEN_9 + if (TryChangeBattleWeather(battler, ENUM_WEATHER_SNOW, TRUE)) + { + BattleScriptPushCursorAndCallback(BattleScript_SnowWarningActivatesSnow); + effect++; + } + #else if (TryChangeBattleWeather(battler, ENUM_WEATHER_HAIL, TRUE)) { - BattleScriptPushCursorAndCallback(BattleScript_SnowWarningActivates); + BattleScriptPushCursorAndCallback(BattleScript_SnowWarningActivatesHail); effect++; } + #endif else if (gBattleWeather & B_WEATHER_PRIMAL_ANY && WEATHER_HAS_EFFECT && !gSpecialStatuses[battler].switchInAbilityDone) { gSpecialStatuses[battler].switchInAbilityDone = TRUE; @@ -6111,7 +6140,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move } break; case ABILITY_ICE_FACE: - if (IsBattlerWeatherAffected(battler, B_WEATHER_HAIL) + if (IsBattlerWeatherAffected(battler, B_WEATHER_HAIL | B_WEATHER_SNOW) && gBattleMons[battler].species == SPECIES_EISCUE_NOICE_FACE && !(gBattleMons[battler].status2 & STATUS2_TRANSFORMED) && gBattleStruct->allowedToChangeFormInWeather[gBattlerPartyIndexes[battler]][GetBattlerSide(battler)]) @@ -9099,7 +9128,7 @@ static u32 CalcMoveBasePowerAfterModifiers(u16 move, u8 battlerAtk, u8 battlerDe MulModifier(&modifier, UQ_4_12(2.0)); break; case EFFECT_SOLAR_BEAM: - if (IsBattlerWeatherAffected(battlerAtk, (B_WEATHER_HAIL | B_WEATHER_SANDSTORM | B_WEATHER_RAIN))) + if (IsBattlerWeatherAffected(battlerAtk, (B_WEATHER_HAIL | B_WEATHER_SANDSTORM | B_WEATHER_RAIN | B_WEATHER_SNOW))) MulModifier(&modifier, UQ_4_12(0.5)); break; case EFFECT_STOMPING_TANTRUM: @@ -9504,6 +9533,12 @@ static u32 CalcDefenseStat(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, // sandstorm sp.def boost for rock types if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_ROCK) && gBattleWeather & B_WEATHER_SANDSTORM && WEATHER_HAS_EFFECT && !usesDefStat) MulModifier(&modifier, UQ_4_12(1.5)); + // snow def boost for ice types + if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_ICE) && gBattleWeather & B_WEATHER_SNOW && WEATHER_HAS_EFFECT && usesDefStat) + MulModifier(&modifier, UQ_4_12(1.5)); + + if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_ICE) && gBattleWeather & B_WEATHER_SNOW && WEATHER_HAS_EFFECT && usesDefStat) + MulModifier(&modifier, UQ_4_12(1.5)); // The defensive stats of a Player's Pokémon are boosted by x1.1 (+10%) if they have the 5th badge and 7th badges. // Having the 5th badge boosts physical defense while having the 7th badge boosts special defense. diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index 9473bae71cb2..6d88acb8cd4c 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -13356,7 +13356,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_SNOWSCAPE] = { - .effect = EFFECT_HAIL, + .effect = EFFECT_SNOW, .power = 0, .type = TYPE_ICE, .accuracy = 0, From 0bf92943d441091fe7f0459bc8fd66ee632f1345 Mon Sep 17 00:00:00 2001 From: CallmeEchoo <65783283+CallmeEchoo@users.noreply.github.com> Date: Sun, 30 Apr 2023 02:35:09 +0200 Subject: [PATCH 356/428] spelling --- include/config/battle.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/config/battle.h b/include/config/battle.h index 1ed337ca3555..4daeb59b4bb4 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -120,7 +120,7 @@ #define B_SYMBIOSIS_GEMS GEN_LATEST // In Gen7+, Symbiosis passes an item after a gem-boosted attack. Previously, items are passed before the gem-boosted attack hits, making the item effect apply. #define B_CHECK_IF_CHARGED_UP TRUE // If set to TRUE, certain abilities such as Electromorphosis WILL check if the STATUS3_CHARGED_UP status flag is applied. #define B_ABSORBING_ABILITY_STRING GEN_LATEST // In Gen5+, the abilities that absorb moves of a certain type use a generic string for stat increases and decreases. -#define B_SNOW_WARNING GEN_9 // In Gen9+, Snowwarning will summon snow instead of hail. +#define B_SNOW_WARNING GEN_9 // In Gen9+, Snow Warning will summon snow instead of hail. // Item settings #define B_HP_BERRIES GEN_LATEST // In Gen4+, berries which restore hp activate immediately after HP drops to half. In Gen3, the effect occurs at the end of the turn. From c6fbde6d5c03452f284afa6526016ee1d6bdc148 Mon Sep 17 00:00:00 2001 From: CallmeEchoo <65783283+CallmeEchoo@users.noreply.github.com> Date: Sun, 30 Apr 2023 15:11:35 +0200 Subject: [PATCH 357/428] remove stupidity for some reason I added the 50% def increase in snow check twice? this removes that --- src/battle_util.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/battle_util.c b/src/battle_util.c index 563ab9818a78..1ab2f32e5303 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -9537,9 +9537,6 @@ static u32 CalcDefenseStat(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_ICE) && gBattleWeather & B_WEATHER_SNOW && WEATHER_HAS_EFFECT && usesDefStat) MulModifier(&modifier, UQ_4_12(1.5)); - if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_ICE) && gBattleWeather & B_WEATHER_SNOW && WEATHER_HAS_EFFECT && usesDefStat) - MulModifier(&modifier, UQ_4_12(1.5)); - // The defensive stats of a Player's Pokémon are boosted by x1.1 (+10%) if they have the 5th badge and 7th badges. // Having the 5th badge boosts physical defense while having the 7th badge boosts special defense. if (ShouldGetStatBadgeBoost(FLAG_BADGE05_GET, battlerDef) && IS_MOVE_PHYSICAL(move)) From 6758f6ebe755e6961d365ec2ecdfffea6f9c6f2f Mon Sep 17 00:00:00 2001 From: CallmeEchoo Date: Tue, 2 May 2023 16:16:58 +0200 Subject: [PATCH 358/428] add some snow related tests --- include/config/battle.h | 2 +- test/ability_snow_warning.c | 20 +++++ test/weather_snow.c | 159 ++++++++++++++++++++++++++++++++++++ 3 files changed, 180 insertions(+), 1 deletion(-) create mode 100644 test/ability_snow_warning.c create mode 100644 test/weather_snow.c diff --git a/include/config/battle.h b/include/config/battle.h index 4daeb59b4bb4..6ba84409f619 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -120,7 +120,7 @@ #define B_SYMBIOSIS_GEMS GEN_LATEST // In Gen7+, Symbiosis passes an item after a gem-boosted attack. Previously, items are passed before the gem-boosted attack hits, making the item effect apply. #define B_CHECK_IF_CHARGED_UP TRUE // If set to TRUE, certain abilities such as Electromorphosis WILL check if the STATUS3_CHARGED_UP status flag is applied. #define B_ABSORBING_ABILITY_STRING GEN_LATEST // In Gen5+, the abilities that absorb moves of a certain type use a generic string for stat increases and decreases. -#define B_SNOW_WARNING GEN_9 // In Gen9+, Snow Warning will summon snow instead of hail. +#define B_SNOW_WARNING GEN_LATEST // In Gen9+, Snow Warning will summon snow instead of hail. // Item settings #define B_HP_BERRIES GEN_LATEST // In Gen4+, berries which restore hp activate immediately after HP drops to half. In Gen3, the effect occurs at the end of the turn. diff --git a/test/ability_snow_warning.c b/test/ability_snow_warning.c new file mode 100644 index 000000000000..6c0753ad392c --- /dev/null +++ b/test/ability_snow_warning.c @@ -0,0 +1,20 @@ +#include "global.h" +#include "test_battle.h" + +SINGLE_BATTLE_TEST("Snow Warning summons hail(snow)") +{ + GIVEN { + PLAYER(SPECIES_ABOMASNOW) { Ability(ABILITY_SNOW_WARNING); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN {} + } SCENE { + #if B_SNOW_WARNING < GEN_9 + MESSAGE("It started to hail!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HAIL_CONTINUES); + #elif B_SNOW_WARNING >= GEN_9 + MESSAGE("It started to snow!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SNOW_CONTINUES); + #endif + } +} diff --git a/test/weather_snow.c b/test/weather_snow.c new file mode 100644 index 000000000000..07afa48d57e3 --- /dev/null +++ b/test/weather_snow.c @@ -0,0 +1,159 @@ +#include "global.h" +#include "test_battle.h" + +#define TEST_HP 1 +#define MAX_HP 400 + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_SNOWSCAPE].effect == EFFECT_SNOW); + ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].types[0] == TYPE_PSYCHIC); + ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].types[1] == TYPE_PSYCHIC); + ASSUME(gSpeciesInfo[SPECIES_GLALIE].types[0] == TYPE_ICE); + ASSUME(gSpeciesInfo[SPECIES_GLALIE].types[1] == TYPE_ICE); +} + +SINGLE_BATTLE_TEST("Snow increases the defense of Ice types by 50 %", s16 damage) +{ + u16 move; + PARAMETRIZE{ move = MOVE_SNOWSCAPE; } + PARAMETRIZE{ move = MOVE_CELEBRATE; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_GLALIE); + } WHEN { + TURN { MOVE(opponent, move); } + TURN { MOVE(player, MOVE_TACKLE); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage); + } +} + +SINGLE_BATTLE_TEST("Snow turns Weather Ball to an Ice-type move and doubles its power", s16 damage) +{ + u16 move; + PARAMETRIZE{ move = MOVE_CELEBRATE; } + PARAMETRIZE{ move = MOVE_SNOWSCAPE; } + GIVEN { + ASSUME(gBattleMoves[MOVE_WEATHER_BALL].effect == EFFECT_WEATHER_BALL); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_DRAGONAIR); + } WHEN { + TURN { MOVE(player, move); } + TURN { MOVE(player, MOVE_WEATHER_BALL); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(4.0), results[1].damage); // double base power + type effectiveness. + } +} + +SINGLE_BATTLE_TEST("Snow allows Blizzard to bypass accuracy checks") +{ + PASSES_RANDOMLY(100, 100); + GIVEN { + ASSUME(gBattleMoves[MOVE_BLIZZARD].accuracy == 70); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_SNOWSCAPE); MOVE(player, MOVE_BLIZZARD); } + } SCENE { + NONE_OF { MESSAGE("Wobbuffet's attack missed!"); } + } +} + +SINGLE_BATTLE_TEST("Snow halves the power of Solar Beam", s16 damage) +{ + u16 move; + PARAMETRIZE{ move = MOVE_CELEBRATE; } + PARAMETRIZE{ move = MOVE_SNOWSCAPE; } + GIVEN { + ASSUME(gBattleMoves[MOVE_SOLAR_BEAM].effect == EFFECT_SOLAR_BEAM); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, move); MOVE(player, MOVE_SOLAR_BEAM); } + TURN { SKIP_TURN(player); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.5), results[1].damage); + } +} + +SINGLE_BATTLE_TEST("Snow halves the power of Solar Blade", s16 damage) +{ + u16 move; + KNOWN_FAILING; // fails bc the bp of solar blade gets rounded up which leads to slightly incorrect calcs down the line + PARAMETRIZE{ move = MOVE_CELEBRATE; } + PARAMETRIZE{ move = MOVE_SNOWSCAPE; } + GIVEN { + ASSUME(gBattleMoves[MOVE_SOLAR_BLADE].effect == EFFECT_SOLAR_BEAM); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(opponent, move); MOVE(player, MOVE_SOLAR_BLADE); } + TURN { SKIP_TURN(player); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.5), results[1].damage); + } +} + +SINGLE_BATTLE_TEST("Snow causes Moonlight to recover 1/4 of the user's max HP") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_MOONLIGHT].effect == EFFECT_MOONLIGHT); + PLAYER(SPECIES_WOBBUFFET) { HP(TEST_HP); MaxHP(MAX_HP); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_SNOWSCAPE); MOVE(player, MOVE_MOONLIGHT); } + } SCENE { + HP_BAR(player, hp: TEST_HP + (MAX_HP/4)); + } +} + +SINGLE_BATTLE_TEST("Snow causes Moonlight to recover 1/4 of the user's max HP") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_MOONLIGHT].effect == EFFECT_MOONLIGHT); + PLAYER(SPECIES_WOBBUFFET) { HP(TEST_HP); MaxHP(MAX_HP); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_SNOWSCAPE); MOVE(player, MOVE_MOONLIGHT); } + } SCENE { + HP_BAR(player, hp: TEST_HP + (MAX_HP/4)); + } +} + +SINGLE_BATTLE_TEST("Snow causes Synthesis to recover 1/4 of the user's max HP") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_SYNTHESIS].effect == EFFECT_SYNTHESIS); + PLAYER(SPECIES_WOBBUFFET) { HP(TEST_HP); MaxHP(MAX_HP); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_SNOWSCAPE); MOVE(player, MOVE_SYNTHESIS); } + } SCENE { + HP_BAR(player, hp: TEST_HP + (MAX_HP/4)); + } +} + +SINGLE_BATTLE_TEST("Snow causes Morning Sun to recover 1/4 of the user's max HP") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_MORNING_SUN].effect == EFFECT_MORNING_SUN); + PLAYER(SPECIES_WOBBUFFET) { HP(TEST_HP); MaxHP(MAX_HP); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_SNOWSCAPE); MOVE(player, MOVE_MORNING_SUN); } + } SCENE { + HP_BAR(player, hp: TEST_HP + (MAX_HP/4)); + } +} + +#undef MAX_HP +#undef TEST_HP \ No newline at end of file From c32d5f455b7dcfcd9c34542e9c2a06fabd8381df Mon Sep 17 00:00:00 2001 From: CallmeEchoo Date: Tue, 2 May 2023 16:44:42 +0200 Subject: [PATCH 359/428] fix rebase issues --- data/battle_scripts_1.s | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 6e32ce0afd5e..d1795dcf552a 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -8880,16 +8880,7 @@ BattleScript_SnowWarningActivatesSnow:: printstring STRINGID_SNOWWARNINGSNOW waitstate playanimation BS_BATTLER_0, B_ANIM_SNOW_CONTINUES - call BattleScript_WeatherFormChanges - end3 - -BattleScript_SnowWarningActivatesSnow:: - pause B_WAIT_TIME_SHORT - call BattleScript_AbilityPopUp - printstring STRINGID_SNOWWARNINGSNOW - waitstate - playanimation BS_BATTLER_0, B_ANIM_SNOW_CONTINUES - call BattleScript_WeatherFormChanges + call BattleScript_ActivateWeatherAbilities end3 BattleScript_ActivateTerrainEffects: From 095422c0c065247ca685c08cdafc9c35db585975 Mon Sep 17 00:00:00 2001 From: CallmeEchoo Date: Tue, 2 May 2023 19:48:03 +0200 Subject: [PATCH 360/428] small ai logic fix --- src/battle_ai_main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index de64913fac1a..2aedc32ee8cb 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -1372,7 +1372,7 @@ static s16 AI_CheckBadMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) case EFFECT_AURORA_VEIL: if (gSideStatuses[GetBattlerSide(battlerAtk)] & SIDE_STATUS_AURORA_VEIL || PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove) - || !(gBattleWeather & B_WEATHER_HAIL && gBattleWeather & B_WEATHER_SNOW)) + || !(gBattleWeather & (B_WEATHER_HAIL | B_WEATHER_SNOW))) score -= 10; break; case EFFECT_OHKO: From ae2d5f7d1e2e9ed8d045c7cb3c48a91283116abb Mon Sep 17 00:00:00 2001 From: Shae <85393060+ShaeTsuPog@users.noreply.github.com> Date: Tue, 2 May 2023 11:08:05 -0700 Subject: [PATCH 361/428] Weather related Ability tests, fix for Leaf Guard not preventing Rest. (#2957) --- data/battle_scripts_1.s | 9 +++ include/config/battle.h | 1 + test/ability_dry_skin.c | 114 ++++++++++++++++++++++++++++++++++++ test/ability_hydration.c | 16 +++++ test/ability_ice_body.c | 30 ++++++++++ test/ability_leaf_guard.c | 95 ++++++++++++++++++++++++++++++ test/ability_rain_dish.c | 18 ++++++ test/ability_sand_veil.c | 4 +- test/ability_snow_cloak.c | 29 +++++++++ test/ability_water_absorb.c | 2 +- 10 files changed, 315 insertions(+), 3 deletions(-) create mode 100644 test/ability_dry_skin.c create mode 100644 test/ability_hydration.c create mode 100644 test/ability_ice_body.c create mode 100644 test/ability_leaf_guard.c create mode 100644 test/ability_rain_dish.c create mode 100644 test/ability_snow_cloak.c diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 4f41d154ef39..575c8893994f 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -3984,6 +3984,9 @@ BattleScript_EffectRest:: jumpifuproarwakes BattleScript_RestCantSleep jumpifability BS_TARGET, ABILITY_INSOMNIA, BattleScript_InsomniaProtects jumpifability BS_TARGET, ABILITY_VITAL_SPIRIT, BattleScript_InsomniaProtects +.if B_LEAF_GUARD_PREVENTS_REST >= GEN_5 + jumpifleafguardprotected BS_TARGET, BattleScript_LeafGuardPreventsRest +.endif trysetrest BattleScript_AlreadyAtFullHp pause B_WAIT_TIME_SHORT printfromtable gRestUsedStringIds @@ -4005,6 +4008,12 @@ BattleScript_RestIsAlreadyAsleep:: waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd +BattleScript_LeafGuardPreventsRest:: + pause B_WAIT_TIME_SHORT + printstring STRINGID_BUTITFAILED + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + BattleScript_EffectOHKO:: attackcanceler attackstring diff --git a/include/config/battle.h b/include/config/battle.h index da58c8bbf83d..6a6a829d6569 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -120,6 +120,7 @@ #define B_SYMBIOSIS_GEMS GEN_LATEST // In Gen7+, Symbiosis passes an item after a gem-boosted attack. Previously, items are passed before the gem-boosted attack hits, making the item effect apply. #define B_CHECK_IF_CHARGED_UP TRUE // If set to TRUE, certain abilities such as Electromorphosis WILL check if the STATUS3_CHARGED_UP status flag is applied. #define B_ABSORBING_ABILITY_STRING GEN_LATEST // In Gen5+, the abilities that absorb moves of a certain type use a generic string for stat increases and decreases. +#define B_LEAF_GUARD_PREVENTS_REST GEN_LATEST // In Gen5+, Leaf Guard prevents the use of Rest in harsh sunlight. // Item settings #define B_HP_BERRIES GEN_LATEST // In Gen4+, berries which restore hp activate immediately after HP drops to half. In Gen3, the effect occurs at the end of the turn. diff --git a/test/ability_dry_skin.c b/test/ability_dry_skin.c new file mode 100644 index 000000000000..6c28d0c428ec --- /dev/null +++ b/test/ability_dry_skin.c @@ -0,0 +1,114 @@ +#include "global.h" +#include "test_battle.h" + +#define TEST_MAX_HP (200) + +SINGLE_BATTLE_TEST("Dry Skin causes 1/8th Max HP damage in Sun") +{ + GIVEN { + PLAYER(SPECIES_PARASECT) { Ability(ABILITY_DRY_SKIN); HP(100); MaxHP(TEST_MAX_HP); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_SUNNY_DAY); } + } SCENE { + ABILITY_POPUP(player, ABILITY_DRY_SKIN); + HP_BAR(player, damage: TEST_MAX_HP / 8); + MESSAGE("The Parasect's Dry Skin takes its toll!"); + } +} + +SINGLE_BATTLE_TEST("Dry Skin heals 1/8th Max HP in Rain") +{ + GIVEN { + PLAYER(SPECIES_PARASECT) { Ability(ABILITY_DRY_SKIN); HP(100); MaxHP(TEST_MAX_HP); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_RAIN_DANCE); } + } SCENE { + ABILITY_POPUP(player, ABILITY_DRY_SKIN); + MESSAGE("Parasect's Dry Skin restored its HP a little!"); + HP_BAR(player, hp: TEST_MAX_HP / 8 + 100); + } +} + +SINGLE_BATTLE_TEST("Dry Skin increases damage taken from Fire-type moves by 25%", s16 damage) +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_EMBER].type == TYPE_FIRE); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_PARASECT) { Ability(ABILITY_DRY_SKIN); }; + } WHEN { + TURN {MOVE(player, MOVE_EMBER); } + } SCENE { + MESSAGE("Wobbuffet used Ember!"); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.25), results[1].damage); + } +} + +SINGLE_BATTLE_TEST("Dry Skin heals 25% when hit by water type moves") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_BUBBLE].type == TYPE_WATER); + PLAYER(SPECIES_PARASECT) { Ability(ABILITY_DRY_SKIN); HP(100); MaxHP(TEST_MAX_HP); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_BUBBLE); } + } SCENE { + ABILITY_POPUP(player, ABILITY_DRY_SKIN); + HP_BAR(player, hp: TEST_MAX_HP / 4 + 100); + MESSAGE("Parasect restored HP using its Dry Skin!"); + } +} + +SINGLE_BATTLE_TEST("Dry Skin does not activate if protected") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_BUBBLE].type == TYPE_WATER); + PLAYER(SPECIES_PARASECT) { Ability(ABILITY_DRY_SKIN); HP(100); MaxHP(TEST_MAX_HP); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_PROTECT); MOVE(opponent, MOVE_BUBBLE); } + } SCENE { + NONE_OF { ABILITY_POPUP(player, ABILITY_DRY_SKIN); HP_BAR(player); MESSAGE("Parasect restored HP using its Dry Skin!"); } + } +} + +SINGLE_BATTLE_TEST("Dry Skin is only triggered once on multi strike moves") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_WATER_SHURIKEN].type == TYPE_WATER); + ASSUME(gBattleMoves[MOVE_WATER_SHURIKEN].effect == EFFECT_MULTI_HIT); + PLAYER(SPECIES_PARASECT) { Ability(ABILITY_DRY_SKIN); HP(100); MaxHP(TEST_MAX_HP); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_WATER_SHURIKEN); } + } SCENE { + ABILITY_POPUP(player, ABILITY_DRY_SKIN); + HP_BAR(player, hp: TEST_MAX_HP / 4 + 100); + MESSAGE("Parasect restored HP using its Dry Skin!"); + } +} + +SINGLE_BATTLE_TEST("Dry Skin prevents Absorb Bulb and Luminous Moss from activating") +{ + u32 item; + PARAMETRIZE { item = ITEM_ABSORB_BULB; } + PARAMETRIZE { item = ITEM_LUMINOUS_MOSS; } + GIVEN { + ASSUME(gBattleMoves[MOVE_BUBBLE].type == TYPE_WATER); + PLAYER(SPECIES_PARASECT) { Ability(ABILITY_DRY_SKIN); HP(100); MaxHP(TEST_MAX_HP); Item(item); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_BUBBLE); } + } SCENE { + ABILITY_POPUP(player, ABILITY_DRY_SKIN); + HP_BAR(player, hp: TEST_MAX_HP / 4 + 100); + MESSAGE("Parasect restored HP using its Dry Skin!"); + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + } + } +} diff --git a/test/ability_hydration.c b/test/ability_hydration.c new file mode 100644 index 000000000000..45689b2121ed --- /dev/null +++ b/test/ability_hydration.c @@ -0,0 +1,16 @@ +#include "global.h" +#include "test_battle.h" + +SINGLE_BATTLE_TEST("Hydration cures non-volatile Status conditions if it is raining") +{ + GIVEN { + PLAYER(SPECIES_VAPOREON) { Ability(ABILITY_HYDRATION); Status1(STATUS1_BURN); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_RAIN_DANCE); } + } SCENE { + ABILITY_POPUP(player, ABILITY_HYDRATION); + MESSAGE("Vaporeon's Hydration cured its burn problem!"); + STATUS_ICON(player, none: TRUE); + } +} diff --git a/test/ability_ice_body.c b/test/ability_ice_body.c new file mode 100644 index 000000000000..b28c5ef0ab5d --- /dev/null +++ b/test/ability_ice_body.c @@ -0,0 +1,30 @@ +#include "global.h" +#include "test_battle.h" + +#define TEST_MAX_HP (100) + +SINGLE_BATTLE_TEST("Ice Body prevents damage from hail") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_GLALIE) { Ability(ABILITY_ICE_BODY); }; + } WHEN { + TURN { MOVE(player, MOVE_HAIL); MOVE(opponent, MOVE_SKILL_SWAP); } + } SCENE { + NONE_OF { HP_BAR(player); } + } +} + +SINGLE_BATTLE_TEST("Ice Body recovers 1/16th of Max HP in hail.") +{ + GIVEN { + PLAYER(SPECIES_GLALIE) { Ability(ABILITY_ICE_BODY); HP(1); MaxHP(TEST_MAX_HP); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_HAIL); } + } SCENE { + ABILITY_POPUP(player, ABILITY_ICE_BODY); + MESSAGE("Glalie's Ice Body healed it a little bit!"); + HP_BAR(player, hp: TEST_MAX_HP / 16 + 1); + } +} diff --git a/test/ability_leaf_guard.c b/test/ability_leaf_guard.c new file mode 100644 index 000000000000..a4c83c48561f --- /dev/null +++ b/test/ability_leaf_guard.c @@ -0,0 +1,95 @@ +#include "global.h" +#include "test_battle.h" + +SINGLE_BATTLE_TEST("Leaf Guard prevents non-volatile status conditions in sun") +{ + u32 move; + PARAMETRIZE { move = MOVE_WILL_O_WISP; } + PARAMETRIZE { move = MOVE_HYPNOSIS; } + PARAMETRIZE { move = MOVE_THUNDER_WAVE; } + PARAMETRIZE { move = MOVE_TOXIC; } + PARAMETRIZE { move = MOVE_POWDER_SNOW; } + GIVEN { + ASSUME(gBattleMoves[MOVE_WILL_O_WISP].effect == EFFECT_WILL_O_WISP); + ASSUME(gBattleMoves[MOVE_HYPNOSIS].effect == EFFECT_SLEEP); + ASSUME(gBattleMoves[MOVE_THUNDER_WAVE].effect == EFFECT_PARALYZE); + ASSUME(gBattleMoves[MOVE_TOXIC].effect == EFFECT_TOXIC); + ASSUME(gBattleMoves[MOVE_POWDER_SNOW].effect == EFFECT_FREEZE_HIT); + PLAYER(SPECIES_LEAFEON) { Ability(ABILITY_LEAF_GUARD); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_SUNNY_DAY); MOVE(opponent, move); } + } SCENE { + switch (move) + { + case MOVE_WILL_O_WISP: + MESSAGE("Foe Wobbuffet used Will-o-Wisp!"); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_WILL_O_WISP, opponent); + ABILITY_POPUP(player, ABILITY_LEAF_GUARD); + MESSAGE("It doesn't affect Leafeon…"); + break; + case MOVE_HYPNOSIS: + MESSAGE("Foe Wobbuffet used Hypnosis!"); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_HYPNOSIS, opponent); + ABILITY_POPUP(player, ABILITY_LEAF_GUARD); + MESSAGE("It doesn't affect Leafeon…"); + break; + case MOVE_THUNDER_WAVE: + MESSAGE("Foe Wobbuffet used Thunder Wave!"); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDER_WAVE, opponent); + ABILITY_POPUP(player, ABILITY_LEAF_GUARD); + MESSAGE("It doesn't affect Leafeon…"); + break; + case MOVE_TOXIC: + MESSAGE("Foe Wobbuffet used Toxic!"); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC, opponent); + ABILITY_POPUP(player, ABILITY_LEAF_GUARD); + MESSAGE("It doesn't affect Leafeon…"); + break; + case MOVE_POWDER_SNOW: + MESSAGE("Foe Wobbuffet used Powder Snow!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_POWDER_SNOW, opponent); + MESSAGE("It's super effective!"); + break; + } + NONE_OF {STATUS_ICON(player, status1: TRUE);} + } +} + +SINGLE_BATTLE_TEST("Leaf Guard prevents status conditions from Flame Orb and Toxic Orb") +{ + u32 item; + PARAMETRIZE { item = ITEM_FLAME_ORB; } + PARAMETRIZE { item = ITEM_TOXIC_ORB; } + GIVEN { + ASSUME(gItems[ITEM_FLAME_ORB].holdEffect == HOLD_EFFECT_FLAME_ORB); + ASSUME(gItems[ITEM_TOXIC_ORB].holdEffect == HOLD_EFFECT_TOXIC_ORB); + PLAYER(SPECIES_LEAFEON) {Ability(ABILITY_LEAF_GUARD); Item(item); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_SUNNY_DAY); } + } SCENE { + if (item == ITEM_FLAME_ORB) { + NONE_OF { MESSAGE("Leafeon was burned!"); STATUS_ICON(player, burn: TRUE);} + } + else { + NONE_OF { MESSAGE("Leafeon is badly poisoned!"); STATUS_ICON(player, poison: TRUE);} + } + } +} + +SINGLE_BATTLE_TEST("Leaf Guard prevents Rest during sun") +{ + GIVEN { + ASSUME(B_LEAF_GUARD_PREVENTS_REST >= GEN_5); + ASSUME(gBattleMoves[MOVE_REST].effect == EFFECT_REST); + PLAYER(SPECIES_LEAFEON) { Ability(ABILITY_LEAF_GUARD); HP(100); MaxHP(200); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_SUNNY_DAY); MOVE(player, MOVE_REST); } + } SCENE { + MESSAGE("But it failed!"); + NOT STATUS_ICON(player, sleep: TRUE); + NONE_OF {HP_BAR(player);} + } +} diff --git a/test/ability_rain_dish.c b/test/ability_rain_dish.c new file mode 100644 index 000000000000..f9a457d4a5b7 --- /dev/null +++ b/test/ability_rain_dish.c @@ -0,0 +1,18 @@ +#include "global.h" +#include "test_battle.h" + +#define TEST_MAX_HP (100) + +SINGLE_BATTLE_TEST("Rain Dish recovers 1/16th of Max HP in Rain") +{ + GIVEN { + PLAYER(SPECIES_LUDICOLO) { Ability(ABILITY_RAIN_DISH); HP(1); MaxHP(TEST_MAX_HP); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_RAIN_DANCE); } + } SCENE { + ABILITY_POPUP(player, ABILITY_RAIN_DISH); + MESSAGE("Ludicolo's Rain Dish restored its HP a little!"); + HP_BAR(player, hp: TEST_MAX_HP / 16 + 1); + } +} diff --git a/test/ability_sand_veil.c b/test/ability_sand_veil.c index 5514f27c0e90..ec7c17f8ecc0 100644 --- a/test/ability_sand_veil.c +++ b/test/ability_sand_veil.c @@ -4,7 +4,7 @@ SINGLE_BATTLE_TEST("Sand Veil prevents damage from sandstorm") { GIVEN { - PLAYER(SPECIES_SANDSHREW) { Ability(ABILITY_SAND_VEIL); }; + PLAYER(SPECIES_CACNEA) { Ability(ABILITY_SAND_VEIL); }; OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(opponent, MOVE_SANDSTORM); } @@ -14,7 +14,7 @@ SINGLE_BATTLE_TEST("Sand Veil prevents damage from sandstorm") } } -SINGLE_BATTLE_TEST("Sand Veil reduces accuracy during sandstorm") +SINGLE_BATTLE_TEST("Sand Veil increases evasion during sandstorm") { PASSES_RANDOMLY(4, 5, RNG_ACCURACY); GIVEN { diff --git a/test/ability_snow_cloak.c b/test/ability_snow_cloak.c new file mode 100644 index 000000000000..1f47eb94baba --- /dev/null +++ b/test/ability_snow_cloak.c @@ -0,0 +1,29 @@ +#include "global.h" +#include "test_battle.h" + +SINGLE_BATTLE_TEST("Snow Cloak prevents damage from hail") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_GLACEON) { Ability(ABILITY_SNOW_CLOAK); }; + } WHEN { + TURN { MOVE(player, MOVE_HAIL); MOVE(opponent, MOVE_SKILL_SWAP); } + } SCENE { + NONE_OF { HP_BAR(player); } + } +} + +SINGLE_BATTLE_TEST("Snow Cloak increases evasion during hail") +{ + PASSES_RANDOMLY(4, 5, RNG_ACCURACY); + GIVEN { + ASSUME(gBattleMoves[MOVE_POUND].accuracy == 100); + PLAYER(SPECIES_GLACEON) { Ability(ABILITY_SNOW_CLOAK); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_HAIL); } + TURN { MOVE(opponent, MOVE_POUND); } + } SCENE { + HP_BAR(player); + } +} diff --git a/test/ability_water_absorb.c b/test/ability_water_absorb.c index aaaa149acea6..7d62748367b5 100644 --- a/test/ability_water_absorb.c +++ b/test/ability_water_absorb.c @@ -63,7 +63,7 @@ SINGLE_BATTLE_TEST("Water Absorb is only triggered once on multi strike moves") } } -SINGLE_BATTLE_TEST("Water Absorb prevents Items from activating") +SINGLE_BATTLE_TEST("Water Absorb prevents Absorb Bulb and Luminous Moss from activating") { u32 item; PARAMETRIZE { item = ITEM_ABSORB_BULB; } From dd43d62a123ea8c43d54536f5ce32917a5ea9798 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Tue, 2 May 2023 21:06:21 +0200 Subject: [PATCH 362/428] Fixes Triple Dive effect (#2947) --- include/constants/pokemon.h | 5 +-- src/battle_ai_util.c | 2 +- src/battle_util.c | 2 +- src/data/battle_moves.h | 6 ++-- test/move_effect_triple_kick.c | 31 ++++++++++++++++++ test/move_flag_three_strikes.c | 57 ++++++++++++++++++++++++++++++++++ 6 files changed, 96 insertions(+), 7 deletions(-) create mode 100644 test/move_effect_triple_kick.c create mode 100644 test/move_flag_three_strikes.c diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h index ff2a44dc9cf2..504a94ea3dc6 100644 --- a/include/constants/pokemon.h +++ b/include/constants/pokemon.h @@ -242,8 +242,9 @@ #define FLAG_THAW_USER (1 << 25) #define FLAG_HIT_IN_SUBSTITUTE (1 << 26) // Hyperspace Fury #define FLAG_TWO_STRIKES (1 << 27) // A move with this flag will strike twice, and may apply its effect on each hit -#define FLAG_WIND_MOVE (1 << 28) -#define FLAG_SLICING_MOVE (1 << 29) +#define FLAG_THREE_STRIKES (1 << 28) // A move with this flag will strike thrice, and may apply its effect on each hit +#define FLAG_WIND_MOVE (1 << 29) +#define FLAG_SLICING_MOVE (1 << 30) // Split defines. #define SPLIT_PHYSICAL 0x0 diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 3adbd77ae289..e187a06a9847 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -856,7 +856,7 @@ s32 AI_CalcDamage(u16 move, u8 battlerAtk, u8 battlerDef, u8 *typeEffectiveness, // Handle other multi-strike moves if (gBattleMoves[move].flags & FLAG_TWO_STRIKES) dmg *= 2; - else if (move == MOVE_SURGING_STRIKES || (move == MOVE_WATER_SHURIKEN && gBattleMons[battlerAtk].species == SPECIES_GRENINJA_ASH)) + else if (gBattleMoves[move].flags & FLAG_THREE_STRIKES || (move == MOVE_WATER_SHURIKEN && gBattleMons[battlerAtk].species == SPECIES_GRENINJA_ASH)) dmg *= 3; if (dmg == 0) diff --git a/src/battle_util.c b/src/battle_util.c index 1c5a5d5d949d..402af3544a02 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -3779,7 +3779,7 @@ u8 AtkCanceller_UnableToUseMove(void) // TODO } } - else if (gBattleMoves[gCurrentMove].effect == EFFECT_TRIPLE_KICK || gCurrentMove == MOVE_SURGING_STRIKES) + else if (gBattleMoves[gCurrentMove].effect == EFFECT_TRIPLE_KICK || gBattleMoves[gCurrentMove].flags & FLAG_THREE_STRIKES) { gMultiHitCounter = 3; PREPARE_BYTE_NUMBER_BUFFER(gBattleScripting.multihitString, 1, 0) diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index 9473bae71cb2..4d04c743fde2 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -12338,7 +12338,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST | FLAG_THREE_STRIKES, .split = SPLIT_PHYSICAL, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13106,7 +13106,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_TRIPLE_DIVE] = { - .effect = EFFECT_TRIPLE_KICK, + .effect = EFFECT_HIT, .power = 30, .type = TYPE_WATER, .accuracy = 95, @@ -13114,7 +13114,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_THREE_STRIKES, .split = SPLIT_PHYSICAL, .zMoveEffect = Z_EFFECT_NONE, }, diff --git a/test/move_effect_triple_kick.c b/test/move_effect_triple_kick.c new file mode 100644 index 000000000000..d3187aefec4f --- /dev/null +++ b/test/move_effect_triple_kick.c @@ -0,0 +1,31 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_TRIPLE_KICK].effect & EFFECT_TRIPLE_KICK); +} + +SINGLE_BATTLE_TEST("Triple Kick damage is increaased by its base damage for each hit") +{ + s16 firstHit; + s16 secondHit; + s16 thirdHit; + + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_TRIPLE_KICK); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TRIPLE_KICK, player); + HP_BAR(opponent, captureDamage: &firstHit); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TRIPLE_KICK, player); + HP_BAR(opponent, captureDamage: &secondHit); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TRIPLE_KICK, player); + HP_BAR(opponent, captureDamage: &thirdHit); + } FINALLY { + EXPECT_EQ(secondHit, firstHit * 2); + EXPECT_EQ(thirdHit, firstHit * 3); + } +} diff --git a/test/move_flag_three_strikes.c b/test/move_flag_three_strikes.c new file mode 100644 index 000000000000..7ea7844c4f0e --- /dev/null +++ b/test/move_flag_three_strikes.c @@ -0,0 +1,57 @@ +#include "global.h" +#include "test_battle.h" + +SINGLE_BATTLE_TEST("Three-strike flag turns a move into a 3-hit move") +{ + s16 firstHit; + s16 secondHit; + s16 thirdHit; + + GIVEN { + ASSUME(gBattleMoves[MOVE_TRIPLE_DIVE].flags & FLAG_THREE_STRIKES); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_TRIPLE_DIVE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TRIPLE_DIVE, player); + HP_BAR(opponent, captureDamage: &firstHit); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TRIPLE_DIVE, player); + HP_BAR(opponent, captureDamage: &secondHit); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TRIPLE_DIVE, player); + HP_BAR(opponent, captureDamage: &thirdHit); + } FINALLY { + EXPECT_EQ(firstHit, secondHit); + EXPECT_EQ(secondHit, thirdHit); + EXPECT_EQ(firstHit, thirdHit); + } +} + +SINGLE_BATTLE_TEST("Surging Strikes hits 3 times with each hit being a critical hit") +{ + s16 firstHit; + s16 secondHit; + s16 thirdHit; + + GIVEN { + ASSUME(gBattleMoves[MOVE_SURGING_STRIKES].flags & FLAG_THREE_STRIKES); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_SURGING_STRIKES); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SURGING_STRIKES, player); + HP_BAR(opponent, captureDamage: &firstHit); + MESSAGE("A critical hit!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SURGING_STRIKES, player); + HP_BAR(opponent, captureDamage: &secondHit); + MESSAGE("A critical hit!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SURGING_STRIKES, player); + HP_BAR(opponent, captureDamage: &thirdHit); + MESSAGE("A critical hit!"); + } FINALLY { + EXPECT_EQ(firstHit, secondHit); + EXPECT_EQ(secondHit, thirdHit); + EXPECT_EQ(firstHit, thirdHit); + } +} From c5a73f59a4a34949c8c17185eaf29ef76cbdd7d1 Mon Sep 17 00:00:00 2001 From: CallmeEchoo Date: Tue, 2 May 2023 21:17:14 +0200 Subject: [PATCH 363/428] ad suggested changes --- data/battle_anim_scripts.s | 27 ++++++++++++------------- data/battle_scripts_1.s | 2 +- include/constants/battle_move_effects.h | 2 +- src/battle_ai_main.c | 10 ++++----- src/battle_ai_util.c | 4 ++-- src/battle_message.c | 4 ++-- src/battle_script_commands.c | 2 +- src/battle_tv.c | 2 +- src/data/battle_moves.h | 2 +- test/ability_snow_warning.c | 6 +++++- test/weather_snow.c | 10 ++++----- 11 files changed, 36 insertions(+), 35 deletions(-) diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index 01311c35d193..a0b035704d6f 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -947,7 +947,7 @@ gBattleAnims_General:: .4byte General_ShellTrapSetUp @ B_ANIM_SHELL_TRAP_SETUP .4byte General_ZMoveActivate @ B_ANIM_ZMOVE_ACTIVATE .4byte General_AffectionHangedOn @ B_ANIM_AFFECTION_HANGED_ON - .4byte General_Snow @ B_ANIM_SNOW_CONTINUES + .4byte General_Snow @ B_ANIM_SNOW_CONTINUES .align 2 gBattleAnims_Special:: @@ -14386,6 +14386,18 @@ Move_SILK_TRAP:: clearmonbg ANIM_ATK_PARTNER end +@ Also used by Snow weather. Currently identical with Move_HAIL +Move_SNOWSCAPE:: + loadspritegfx ANIM_TAG_HAIL + loadspritegfx ANIM_TAG_ICE_CRYSTALS + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 3, 0, 6, RGB_BLACK + waitforvisualfinish + createvisualtask AnimTask_Hail, 5 + loopsewithpan SE_M_HAIL, 0, 8, 10 + waitforvisualfinish + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 3, 6, 0, RGB_BLACK + end + Move_WICKED_BLOW:: Move_SURGING_STRIKES:: Move_THUNDER_CAGE:: @@ -14449,19 +14461,6 @@ Move_ELECTRO_DRIFT:: Move_SHED_TAIL:: Move_CHILLY_RECEPTION:: Move_TIDY_UP:: - -@ Also used by Snow weather. Currently identical with Move_HAIL -Move_SNOWSCAPE: - loadspritegfx ANIM_TAG_HAIL - loadspritegfx ANIM_TAG_ICE_CRYSTALS - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 3, 0, 6, RGB_BLACK - waitforvisualfinish - createvisualtask AnimTask_Hail, 5 - loopsewithpan SE_M_HAIL, 0, 8, 10 - waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 3, 6, 0, RGB_BLACK - end - Move_POUNCE:: Move_TRAILBLAZE:: Move_CHILLING_WATER:: diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index d1795dcf552a..90459c5ba853 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -429,7 +429,7 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectBarbBarrage @ EFFECT_BARB_BARRAGE .4byte BattleScript_EffectRevivalBlessing @ EFFECT_REVIVAL_BLESSING .4byte BattleScript_EffectFrostbiteHit @ EFFECT_FROSTBITE_HIT - .4byte BattleScript_EffectSnow @ EFFECT_SNOW + .4byte BattleScript_EffectSnow @ EFFECT_SNOWSCAPE BattleScript_EffectRevivalBlessing:: attackcanceler diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h index bcc077055e05..4d8330498d64 100644 --- a/include/constants/battle_move_effects.h +++ b/include/constants/battle_move_effects.h @@ -406,7 +406,7 @@ #define EFFECT_BARB_BARRAGE 400 #define EFFECT_REVIVAL_BLESSING 401 #define EFFECT_FROSTBITE_HIT 402 -#define EFFECT_SNOW 403 +#define EFFECT_SNOWSCAPE 403 #define NUM_BATTLE_MOVE_EFFECTS 404 diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 2aedc32ee8cb..1fd07ef79f82 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -1582,7 +1582,7 @@ static s16 AI_CheckBadMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) || PartnerMoveEffectIsWeather(BATTLE_PARTNER(battlerAtk), AI_DATA->partnerMove)) score -= 8; break; - case EFFECT_SNOW: + case EFFECT_SNOWSCAPE: if (gBattleWeather & (B_WEATHER_SNOW | B_WEATHER_PRIMAL_ANY) // should snow be discouraged if hail is up? || PartnerMoveEffectIsWeather(BATTLE_PARTNER(battlerAtk), AI_DATA->partnerMove)) score -= 8; @@ -2808,7 +2808,7 @@ static s16 AI_DoubleBattle(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) RETURN_SCORE_PLUS(2); // our partner benefits from hail } break; - case EFFECT_SNOW: + case EFFECT_SNOWSCAPE: if (IsBattlerAlive(battlerAtkPartner) && ShouldSetSnow(battlerAtkPartner, atkPartnerAbility, atkPartnerHoldEffect)) { @@ -3977,7 +3977,7 @@ static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) score += 2; } break; - case EFFECT_SNOW: // any other reasons? + case EFFECT_SNOWSCAPE: // any other reasons? if (ShouldSetSnow(battlerAtk, AI_DATA->abilities[battlerAtk], AI_DATA->holdEffects[battlerAtk])) { if ((HasMoveEffect(battlerAtk, EFFECT_AURORA_VEIL) || HasMoveEffect(BATTLE_PARTNER(battlerAtk), EFFECT_AURORA_VEIL)) @@ -4976,7 +4976,7 @@ static s16 AI_SetupFirstTurn(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) case EFFECT_SUNNY_DAY: case EFFECT_SANDSTORM: case EFFECT_HAIL: - case EFFECT_SNOW: + case EFFECT_SNOWSCAPE: case EFFECT_GEOMANCY: case EFFECT_VICTORY_DANCE: case EFFECT_HIT_SET_ENTRY_HAZARD: @@ -5203,7 +5203,7 @@ static s16 AI_HPAware(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) case EFFECT_SUNNY_DAY: case EFFECT_SANDSTORM: case EFFECT_HAIL: - case EFFECT_SNOW: + case EFFECT_SNOWSCAPE: case EFFECT_RAIN_DANCE: score -= 2; break; diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 010c5a01c983..18acf15cc217 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -331,7 +331,7 @@ static const u16 sEncouragedEncoreEffects[] = EFFECT_SPIT_UP, EFFECT_SWALLOW, EFFECT_HAIL, - EFFECT_SNOW, + EFFECT_SNOWSCAPE, EFFECT_TORMENT, EFFECT_WILL_O_WISP, EFFECT_FOLLOW_ME, @@ -3264,7 +3264,7 @@ bool32 PartnerMoveEffectIsWeather(u8 battlerAtkPartner, u16 partnerMove) || gBattleMoves[partnerMove].effect == EFFECT_RAIN_DANCE || gBattleMoves[partnerMove].effect == EFFECT_SANDSTORM || gBattleMoves[partnerMove].effect == EFFECT_HAIL - || gBattleMoves[partnerMove].effect == EFFECT_SNOW)) + || gBattleMoves[partnerMove].effect == EFFECT_SNOWSCAPE)) return TRUE; return FALSE; diff --git a/src/battle_message.c b/src/battle_message.c index 66bc4a77370d..e2a8eb0cb64e 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -363,10 +363,10 @@ static const u8 sText_SunlightGotBright[] = _("The sunlight got bright!"); static const u8 sText_SunlightStrong[] = _("The sunlight is strong."); static const u8 sText_SunlightFaded[] = _("The sunlight faded."); static const u8 sText_StartedHail[] = _("It started to hail!"); -static const u8 sText_StartedSnow[] = _("It started to snow!"); static const u8 sText_HailContinues[] = _("Hail continues to fall."); -static const u8 sText_SnowContinues[] = _("Snow continues to fall."); static const u8 sText_HailStopped[] = _("The hail stopped."); +static const u8 sText_StartedSnow[] = _("It started to snow!"); +static const u8 sText_SnowContinues[] = _("Snow continues to fall."); static const u8 sText_SnowStopped[] = _("The snow stopped."); static const u8 sText_FailedToSpitUp[] = _("But it failed to spit up\na thing!"); static const u8 sText_FailedToSwallow[] = _("But it failed to swallow\na thing!"); diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 3bc77e84853b..847ddb9aa9f7 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -16577,4 +16577,4 @@ void BS_SetSnow(void) gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STARTED_SNOW; } gBattlescriptCurrInstr = cmd->nextInstr; -} \ No newline at end of file +} diff --git a/src/battle_tv.c b/src/battle_tv.c index 74f8c7008cb3..7379b72e4b7f 100644 --- a/src/battle_tv.c +++ b/src/battle_tv.c @@ -251,7 +251,7 @@ static const u16 sPoints_MoveEffect[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_SWALLOW] = 3, // [EFFECT_UNUSED_A3] = 1, [EFFECT_HAIL] = 4, - [EFFECT_SNOW] = 4, + [EFFECT_SNOWSCAPE] = 4, [EFFECT_TORMENT] = 7, [EFFECT_FLATTER] = 7, [EFFECT_WILL_O_WISP] = 5, diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index 6d88acb8cd4c..522895992e1d 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -13356,7 +13356,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_SNOWSCAPE] = { - .effect = EFFECT_SNOW, + .effect = EFFECT_SNOWSCAPE, .power = 0, .type = TYPE_ICE, .accuracy = 0, diff --git a/test/ability_snow_warning.c b/test/ability_snow_warning.c index 6c0753ad392c..200a14acafb6 100644 --- a/test/ability_snow_warning.c +++ b/test/ability_snow_warning.c @@ -1,7 +1,11 @@ #include "global.h" #include "test_battle.h" -SINGLE_BATTLE_TEST("Snow Warning summons hail(snow)") +#if B_SNOW_WARNING < GEN_9 +SINGLE_BATTLE_TEST("Snow Warning summons hail") +#elif B_SNOW_WARNING >= GEN_9 +SINGLE_BATTLE_TEST("Snow Warning summons snow") +#endif { GIVEN { PLAYER(SPECIES_ABOMASNOW) { Ability(ABILITY_SNOW_WARNING); }; diff --git a/test/weather_snow.c b/test/weather_snow.c index 07afa48d57e3..d313c921bbe5 100644 --- a/test/weather_snow.c +++ b/test/weather_snow.c @@ -6,11 +6,9 @@ ASSUMPTIONS { - ASSUME(gBattleMoves[MOVE_SNOWSCAPE].effect == EFFECT_SNOW); - ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].types[0] == TYPE_PSYCHIC); - ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].types[1] == TYPE_PSYCHIC); - ASSUME(gSpeciesInfo[SPECIES_GLALIE].types[0] == TYPE_ICE); - ASSUME(gSpeciesInfo[SPECIES_GLALIE].types[1] == TYPE_ICE); + ASSUME(gBattleMoves[MOVE_SNOWSCAPE].effect == EFFECT_SNOWSCAPE); + ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].types[0] != TYPE_ICE && gSpeciesInfo[SPECIES_WOBBUFFET].types[1] != TYPE_ICE); + ASSUME(gSpeciesInfo[SPECIES_GLALIE].types[0] == TYPE_ICE || gSpeciesInfo[SPECIES_GLALIE].types[1] == TYPE_ICE); } SINGLE_BATTLE_TEST("Snow increases the defense of Ice types by 50 %", s16 damage) @@ -156,4 +154,4 @@ SINGLE_BATTLE_TEST("Snow causes Morning Sun to recover 1/4 of the user's max HP" } #undef MAX_HP -#undef TEST_HP \ No newline at end of file +#undef TEST_HP From 957ee36c75cac33e83eadf540d440164b2902adf Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Tue, 2 May 2023 23:25:44 +0200 Subject: [PATCH 364/428] Fix for Ceaseless Edge/Axe Kick visual glitch (#2969) --- data/battle_scripts_1.s | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 575c8893994f..23a7632bd357 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -452,7 +452,7 @@ BattleScript_StealthRockActivates:: setstealthrock BattleScript_MoveEnd printfromtable gDmgHazardsStringIds waitmessage B_WAIT_TIME_LONG - goto BattleScript_MoveEnd + return BattleScript_EffectDireClaw:: setmoveeffect MOVE_EFFECT_DIRE_CLAW @@ -466,7 +466,7 @@ BattleScript_SpikesActivates:: trysetspikes BattleScript_MoveEnd printfromtable gDmgHazardsStringIds waitmessage B_WAIT_TIME_LONG - goto BattleScript_MoveEnd + return BattleScript_EffectAttackUpUserAlly: jumpifnoally BS_ATTACKER, BattleScript_EffectAttackUp From 1068ec5d9fcf8a6550b1f37d78f4c719c077245b Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Wed, 3 May 2023 13:03:40 +0200 Subject: [PATCH 365/428] Fix Plus/Minus to only work with special moves --- src/battle_util.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/battle_util.c b/src/battle_util.c index 402af3544a02..831e65829248 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -9255,7 +9255,7 @@ static u32 CalcAttackStat(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, b #if B_PLUS_MINUS_INTERACTION >= GEN_5 case ABILITY_PLUS: case ABILITY_MINUS: - if (IsBattlerAlive(BATTLE_PARTNER(battlerAtk))) + if (IS_MOVE_SPECIAL(move) && IsBattlerAlive(BATTLE_PARTNER(battlerAtk))) { u32 partnerAbility = GetBattlerAbility(BATTLE_PARTNER(battlerAtk)); if (partnerAbility == ABILITY_PLUS || partnerAbility == ABILITY_MINUS) @@ -9264,11 +9264,11 @@ static u32 CalcAttackStat(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, b break; #else case ABILITY_PLUS: - if (IsBattlerAlive(BATTLE_PARTNER(battlerAtk)) && GetBattlerAbility(BATTLE_PARTNER(battlerAtk)) == ABILITY_MINUS) + if (IS_MOVE_SPECIAL(move) && IsBattlerAlive(BATTLE_PARTNER(battlerAtk)) && GetBattlerAbility(BATTLE_PARTNER(battlerAtk)) == ABILITY_MINUS) MulModifier(&modifier, UQ_4_12(1.5)); break; case ABILITY_MINUS: - if (IsBattlerAlive(BATTLE_PARTNER(battlerAtk)) && GetBattlerAbility(BATTLE_PARTNER(battlerAtk)) == ABILITY_PLUS) + if (IS_MOVE_SPECIAL(move) && IsBattlerAlive(BATTLE_PARTNER(battlerAtk)) && GetBattlerAbility(BATTLE_PARTNER(battlerAtk)) == ABILITY_PLUS) MulModifier(&modifier, UQ_4_12(1.5)); break; #endif From 069627a7fc03b3f699059b93d2cd8bf5d6e00e49 Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Wed, 3 May 2023 15:36:17 +0200 Subject: [PATCH 366/428] Hydra OSX support --- Makefile | 2 +- tools/mgba-rom-test-hydra/main.c | 40 +- tools/patchelf/elf.h | 3147 ++++++++++++++++++++++++++++++ tools/patchelf/patchelf.c | 2 +- 4 files changed, 3186 insertions(+), 5 deletions(-) create mode 100644 tools/patchelf/elf.h diff --git a/Makefile b/Makefile index 87bd771b08d6..7486e41f0d85 100644 --- a/Makefile +++ b/Makefile @@ -480,7 +480,7 @@ endif check: $(TESTELF) @cp $< $(HEADLESSELF) $(PATCHELF) $(HEADLESSELF) gTestRunnerHeadless '\x01' gTestRunnerSkipIsFail "$(TEST_SKIP_IS_FAIL)" - $(ROMTESTHYDRA) $(ROMTEST) $(HEADLESSELF) + $(ROMTESTHYDRA) $(ROMTEST) $(OBJCOPY) $(HEADLESSELF) libagbsyscall: @$(MAKE) -C libagbsyscall TOOLCHAIN=$(TOOLCHAIN) MODERN=$(MODERN) diff --git a/tools/mgba-rom-test-hydra/main.c b/tools/mgba-rom-test-hydra/main.c index 8705225b8579..2e2fe7ce854d 100644 --- a/tools/mgba-rom-test-hydra/main.c +++ b/tools/mgba-rom-test-hydra/main.c @@ -23,7 +23,9 @@ #include #include #include +#ifndef __APPLE__ #include +#endif #include #include #include @@ -176,9 +178,9 @@ static void exit2(int _) int main(int argc, char *argv[]) { - if (argc < 3) + if (argc < 4) { - fprintf(stderr, "usage %s mgba-rom-test rom\n", argv[0]); + fprintf(stderr, "usage %s mgba-rom-test objcopy rom\n", argv[0]); exit(2); } @@ -205,7 +207,7 @@ int main(int argc, char *argv[]) } int elffd; - if ((elffd = open(argv[2], O_RDONLY)) == -1) + if ((elffd = open(argv[3], O_RDONLY)) == -1) { perror("open elffd failed"); exit(2); @@ -264,11 +266,13 @@ int main(int argc, char *argv[]) perror("fork mgba-rom-test failed"); exit(2); } else if (pid == 0) { + #ifndef __APPLE__ if (prctl(PR_SET_PDEATHSIG, SIGTERM) == -1) { perror("prctl failed"); _exit(2); } + #endif if (getppid() != parent_pid) // Parent died. { _exit(2); @@ -332,6 +336,36 @@ int main(int argc, char *argv[]) _exit(2); } } +#ifdef __APPLE__ + pid_t objcopypid = fork(); + if (objcopypid == -1) + { + perror("fork objcopy failed"); + _exit(2); + } + else if (objcopypid == 0) + { + if (execlp(argv[2], argv[2], "-O", "binary", rom_path, rom_path, NULL) == -1) + { + perror("execlp objcopy failed"); + _exit(2); + } + } + else + { + int wstatus; + if (waitpid(objcopypid, &wstatus, 0) == -1) + { + perror("waitpid objcopy failed"); + _exit(2); + } + if (!WIFEXITED(wstatus) || WEXITSTATUS(wstatus) != 0) + { + fprintf(stderr, "objcopy exited with an error\n"); + _exit(2); + } + } +#endif // stdbuf is required because otherwise mgba never flushes // stdout. if (execlp("stdbuf", "stdbuf", "-oL", argv[1], "-l15", "-ClogLevel.gba.dma=16", "-Rr0", rom_path, NULL) == -1) diff --git a/tools/patchelf/elf.h b/tools/patchelf/elf.h new file mode 100644 index 000000000000..79d3b974bd51 --- /dev/null +++ b/tools/patchelf/elf.h @@ -0,0 +1,3147 @@ +/* +From musl include/elf.h + +Copyright © 2005-2014 Rich Felker, et al. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +#ifndef _ELF_H +#define _ELF_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +typedef uint16_t Elf32_Half; +typedef uint16_t Elf64_Half; + +typedef uint32_t Elf32_Word; +typedef int32_t Elf32_Sword; +typedef uint32_t Elf64_Word; +typedef int32_t Elf64_Sword; + +typedef uint64_t Elf32_Xword; +typedef int64_t Elf32_Sxword; +typedef uint64_t Elf64_Xword; +typedef int64_t Elf64_Sxword; + +typedef uint32_t Elf32_Addr; +typedef uint64_t Elf64_Addr; + +typedef uint32_t Elf32_Off; +typedef uint64_t Elf64_Off; + +typedef uint16_t Elf32_Section; +typedef uint16_t Elf64_Section; + +typedef Elf32_Half Elf32_Versym; +typedef Elf64_Half Elf64_Versym; + +#define EI_NIDENT (16) + +typedef struct { + unsigned char e_ident[EI_NIDENT]; + Elf32_Half e_type; + Elf32_Half e_machine; + Elf32_Word e_version; + Elf32_Addr e_entry; + Elf32_Off e_phoff; + Elf32_Off e_shoff; + Elf32_Word e_flags; + Elf32_Half e_ehsize; + Elf32_Half e_phentsize; + Elf32_Half e_phnum; + Elf32_Half e_shentsize; + Elf32_Half e_shnum; + Elf32_Half e_shstrndx; +} Elf32_Ehdr; + +typedef struct { + unsigned char e_ident[EI_NIDENT]; + Elf64_Half e_type; + Elf64_Half e_machine; + Elf64_Word e_version; + Elf64_Addr e_entry; + Elf64_Off e_phoff; + Elf64_Off e_shoff; + Elf64_Word e_flags; + Elf64_Half e_ehsize; + Elf64_Half e_phentsize; + Elf64_Half e_phnum; + Elf64_Half e_shentsize; + Elf64_Half e_shnum; + Elf64_Half e_shstrndx; +} Elf64_Ehdr; + +#define EI_MAG0 0 +#define ELFMAG0 0x7f + +#define EI_MAG1 1 +#define ELFMAG1 'E' + +#define EI_MAG2 2 +#define ELFMAG2 'L' + +#define EI_MAG3 3 +#define ELFMAG3 'F' + + +#define ELFMAG "\177ELF" +#define SELFMAG 4 + +#define EI_CLASS 4 +#define ELFCLASSNONE 0 +#define ELFCLASS32 1 +#define ELFCLASS64 2 +#define ELFCLASSNUM 3 + +#define EI_DATA 5 +#define ELFDATANONE 0 +#define ELFDATA2LSB 1 +#define ELFDATA2MSB 2 +#define ELFDATANUM 3 + +#define EI_VERSION 6 + + +#define EI_OSABI 7 +#define ELFOSABI_NONE 0 +#define ELFOSABI_SYSV 0 +#define ELFOSABI_HPUX 1 +#define ELFOSABI_NETBSD 2 +#define ELFOSABI_LINUX 3 +#define ELFOSABI_GNU 3 +#define ELFOSABI_SOLARIS 6 +#define ELFOSABI_AIX 7 +#define ELFOSABI_IRIX 8 +#define ELFOSABI_FREEBSD 9 +#define ELFOSABI_TRU64 10 +#define ELFOSABI_MODESTO 11 +#define ELFOSABI_OPENBSD 12 +#define ELFOSABI_ARM 97 +#define ELFOSABI_STANDALONE 255 + +#define EI_ABIVERSION 8 + +#define EI_PAD 9 + + + +#define ET_NONE 0 +#define ET_REL 1 +#define ET_EXEC 2 +#define ET_DYN 3 +#define ET_CORE 4 +#define ET_NUM 5 +#define ET_LOOS 0xfe00 +#define ET_HIOS 0xfeff +#define ET_LOPROC 0xff00 +#define ET_HIPROC 0xffff + + + +#define EM_NONE 0 +#define EM_M32 1 +#define EM_SPARC 2 +#define EM_386 3 +#define EM_68K 4 +#define EM_88K 5 +#define EM_860 7 +#define EM_MIPS 8 +#define EM_S370 9 +#define EM_MIPS_RS3_LE 10 + +#define EM_PARISC 15 +#define EM_VPP500 17 +#define EM_SPARC32PLUS 18 +#define EM_960 19 +#define EM_PPC 20 +#define EM_PPC64 21 +#define EM_S390 22 + +#define EM_V800 36 +#define EM_FR20 37 +#define EM_RH32 38 +#define EM_RCE 39 +#define EM_ARM 40 +#define EM_FAKE_ALPHA 41 +#define EM_SH 42 +#define EM_SPARCV9 43 +#define EM_TRICORE 44 +#define EM_ARC 45 +#define EM_H8_300 46 +#define EM_H8_300H 47 +#define EM_H8S 48 +#define EM_H8_500 49 +#define EM_IA_64 50 +#define EM_MIPS_X 51 +#define EM_COLDFIRE 52 +#define EM_68HC12 53 +#define EM_MMA 54 +#define EM_PCP 55 +#define EM_NCPU 56 +#define EM_NDR1 57 +#define EM_STARCORE 58 +#define EM_ME16 59 +#define EM_ST100 60 +#define EM_TINYJ 61 +#define EM_X86_64 62 +#define EM_PDSP 63 + +#define EM_FX66 66 +#define EM_ST9PLUS 67 +#define EM_ST7 68 +#define EM_68HC16 69 +#define EM_68HC11 70 +#define EM_68HC08 71 +#define EM_68HC05 72 +#define EM_SVX 73 +#define EM_ST19 74 +#define EM_VAX 75 +#define EM_CRIS 76 +#define EM_JAVELIN 77 +#define EM_FIREPATH 78 +#define EM_ZSP 79 +#define EM_MMIX 80 +#define EM_HUANY 81 +#define EM_PRISM 82 +#define EM_AVR 83 +#define EM_FR30 84 +#define EM_D10V 85 +#define EM_D30V 86 +#define EM_V850 87 +#define EM_M32R 88 +#define EM_MN10300 89 +#define EM_MN10200 90 +#define EM_PJ 91 +#define EM_OR1K 92 +#define EM_OPENRISC 92 +#define EM_ARC_A5 93 +#define EM_ARC_COMPACT 93 +#define EM_XTENSA 94 +#define EM_VIDEOCORE 95 +#define EM_TMM_GPP 96 +#define EM_NS32K 97 +#define EM_TPC 98 +#define EM_SNP1K 99 +#define EM_ST200 100 +#define EM_IP2K 101 +#define EM_MAX 102 +#define EM_CR 103 +#define EM_F2MC16 104 +#define EM_MSP430 105 +#define EM_BLACKFIN 106 +#define EM_SE_C33 107 +#define EM_SEP 108 +#define EM_ARCA 109 +#define EM_UNICORE 110 +#define EM_EXCESS 111 +#define EM_DXP 112 +#define EM_ALTERA_NIOS2 113 +#define EM_CRX 114 +#define EM_XGATE 115 +#define EM_C166 116 +#define EM_M16C 117 +#define EM_DSPIC30F 118 +#define EM_CE 119 +#define EM_M32C 120 +#define EM_TSK3000 131 +#define EM_RS08 132 +#define EM_SHARC 133 +#define EM_ECOG2 134 +#define EM_SCORE7 135 +#define EM_DSP24 136 +#define EM_VIDEOCORE3 137 +#define EM_LATTICEMICO32 138 +#define EM_SE_C17 139 +#define EM_TI_C6000 140 +#define EM_TI_C2000 141 +#define EM_TI_C5500 142 +#define EM_TI_ARP32 143 +#define EM_TI_PRU 144 +#define EM_MMDSP_PLUS 160 +#define EM_CYPRESS_M8C 161 +#define EM_R32C 162 +#define EM_TRIMEDIA 163 +#define EM_QDSP6 164 +#define EM_8051 165 +#define EM_STXP7X 166 +#define EM_NDS32 167 +#define EM_ECOG1X 168 +#define EM_MAXQ30 169 +#define EM_XIMO16 170 +#define EM_MANIK 171 +#define EM_CRAYNV2 172 +#define EM_RX 173 +#define EM_METAG 174 +#define EM_MCST_ELBRUS 175 +#define EM_ECOG16 176 +#define EM_CR16 177 +#define EM_ETPU 178 +#define EM_SLE9X 179 +#define EM_L10M 180 +#define EM_K10M 181 +#define EM_AARCH64 183 +#define EM_AVR32 185 +#define EM_STM8 186 +#define EM_TILE64 187 +#define EM_TILEPRO 188 +#define EM_MICROBLAZE 189 +#define EM_CUDA 190 +#define EM_TILEGX 191 +#define EM_CLOUDSHIELD 192 +#define EM_COREA_1ST 193 +#define EM_COREA_2ND 194 +#define EM_ARC_COMPACT2 195 +#define EM_OPEN8 196 +#define EM_RL78 197 +#define EM_VIDEOCORE5 198 +#define EM_78KOR 199 +#define EM_56800EX 200 +#define EM_BA1 201 +#define EM_BA2 202 +#define EM_XCORE 203 +#define EM_MCHP_PIC 204 +#define EM_KM32 210 +#define EM_KMX32 211 +#define EM_EMX16 212 +#define EM_EMX8 213 +#define EM_KVARC 214 +#define EM_CDP 215 +#define EM_COGE 216 +#define EM_COOL 217 +#define EM_NORC 218 +#define EM_CSR_KALIMBA 219 +#define EM_Z80 220 +#define EM_VISIUM 221 +#define EM_FT32 222 +#define EM_MOXIE 223 +#define EM_AMDGPU 224 +#define EM_RISCV 243 +#define EM_BPF 247 +#define EM_NUM 248 + +#define EM_ALPHA 0x9026 + +#define EV_NONE 0 +#define EV_CURRENT 1 +#define EV_NUM 2 + +typedef struct { + Elf32_Word sh_name; + Elf32_Word sh_type; + Elf32_Word sh_flags; + Elf32_Addr sh_addr; + Elf32_Off sh_offset; + Elf32_Word sh_size; + Elf32_Word sh_link; + Elf32_Word sh_info; + Elf32_Word sh_addralign; + Elf32_Word sh_entsize; +} Elf32_Shdr; + +typedef struct { + Elf64_Word sh_name; + Elf64_Word sh_type; + Elf64_Xword sh_flags; + Elf64_Addr sh_addr; + Elf64_Off sh_offset; + Elf64_Xword sh_size; + Elf64_Word sh_link; + Elf64_Word sh_info; + Elf64_Xword sh_addralign; + Elf64_Xword sh_entsize; +} Elf64_Shdr; + + + +#define SHN_UNDEF 0 +#define SHN_LORESERVE 0xff00 +#define SHN_LOPROC 0xff00 +#define SHN_BEFORE 0xff00 + +#define SHN_AFTER 0xff01 + +#define SHN_HIPROC 0xff1f +#define SHN_LOOS 0xff20 +#define SHN_HIOS 0xff3f +#define SHN_ABS 0xfff1 +#define SHN_COMMON 0xfff2 +#define SHN_XINDEX 0xffff +#define SHN_HIRESERVE 0xffff + + + +#define SHT_NULL 0 +#define SHT_PROGBITS 1 +#define SHT_SYMTAB 2 +#define SHT_STRTAB 3 +#define SHT_RELA 4 +#define SHT_HASH 5 +#define SHT_DYNAMIC 6 +#define SHT_NOTE 7 +#define SHT_NOBITS 8 +#define SHT_REL 9 +#define SHT_SHLIB 10 +#define SHT_DYNSYM 11 +#define SHT_INIT_ARRAY 14 +#define SHT_FINI_ARRAY 15 +#define SHT_PREINIT_ARRAY 16 +#define SHT_GROUP 17 +#define SHT_SYMTAB_SHNDX 18 +#define SHT_NUM 19 +#define SHT_LOOS 0x60000000 +#define SHT_GNU_ATTRIBUTES 0x6ffffff5 +#define SHT_GNU_HASH 0x6ffffff6 +#define SHT_GNU_LIBLIST 0x6ffffff7 +#define SHT_CHECKSUM 0x6ffffff8 +#define SHT_LOSUNW 0x6ffffffa +#define SHT_SUNW_move 0x6ffffffa +#define SHT_SUNW_COMDAT 0x6ffffffb +#define SHT_SUNW_syminfo 0x6ffffffc +#define SHT_GNU_verdef 0x6ffffffd +#define SHT_GNU_verneed 0x6ffffffe +#define SHT_GNU_versym 0x6fffffff +#define SHT_HISUNW 0x6fffffff +#define SHT_HIOS 0x6fffffff +#define SHT_LOPROC 0x70000000 +#define SHT_HIPROC 0x7fffffff +#define SHT_LOUSER 0x80000000 +#define SHT_HIUSER 0x8fffffff + +#define SHF_WRITE (1 << 0) +#define SHF_ALLOC (1 << 1) +#define SHF_EXECINSTR (1 << 2) +#define SHF_MERGE (1 << 4) +#define SHF_STRINGS (1 << 5) +#define SHF_INFO_LINK (1 << 6) +#define SHF_LINK_ORDER (1 << 7) +#define SHF_OS_NONCONFORMING (1 << 8) + +#define SHF_GROUP (1 << 9) +#define SHF_TLS (1 << 10) +#define SHF_COMPRESSED (1 << 11) +#define SHF_MASKOS 0x0ff00000 +#define SHF_MASKPROC 0xf0000000 +#define SHF_ORDERED (1 << 30) +#define SHF_EXCLUDE (1U << 31) + +typedef struct { + Elf32_Word ch_type; + Elf32_Word ch_size; + Elf32_Word ch_addralign; +} Elf32_Chdr; + +typedef struct { + Elf64_Word ch_type; + Elf64_Word ch_reserved; + Elf64_Xword ch_size; + Elf64_Xword ch_addralign; +} Elf64_Chdr; + +#define ELFCOMPRESS_ZLIB 1 +#define ELFCOMPRESS_LOOS 0x60000000 +#define ELFCOMPRESS_HIOS 0x6fffffff +#define ELFCOMPRESS_LOPROC 0x70000000 +#define ELFCOMPRESS_HIPROC 0x7fffffff + + +#define GRP_COMDAT 0x1 + +typedef struct { + Elf32_Word st_name; + Elf32_Addr st_value; + Elf32_Word st_size; + unsigned char st_info; + unsigned char st_other; + Elf32_Section st_shndx; +} Elf32_Sym; + +typedef struct { + Elf64_Word st_name; + unsigned char st_info; + unsigned char st_other; + Elf64_Section st_shndx; + Elf64_Addr st_value; + Elf64_Xword st_size; +} Elf64_Sym; + +typedef struct { + Elf32_Half si_boundto; + Elf32_Half si_flags; +} Elf32_Syminfo; + +typedef struct { + Elf64_Half si_boundto; + Elf64_Half si_flags; +} Elf64_Syminfo; + +#define SYMINFO_BT_SELF 0xffff +#define SYMINFO_BT_PARENT 0xfffe +#define SYMINFO_BT_LOWRESERVE 0xff00 + +#define SYMINFO_FLG_DIRECT 0x0001 +#define SYMINFO_FLG_PASSTHRU 0x0002 +#define SYMINFO_FLG_COPY 0x0004 +#define SYMINFO_FLG_LAZYLOAD 0x0008 + +#define SYMINFO_NONE 0 +#define SYMINFO_CURRENT 1 +#define SYMINFO_NUM 2 + +#define ELF32_ST_BIND(val) (((unsigned char) (val)) >> 4) +#define ELF32_ST_TYPE(val) ((val) & 0xf) +#define ELF32_ST_INFO(bind, type) (((bind) << 4) + ((type) & 0xf)) + +#define ELF64_ST_BIND(val) ELF32_ST_BIND (val) +#define ELF64_ST_TYPE(val) ELF32_ST_TYPE (val) +#define ELF64_ST_INFO(bind, type) ELF32_ST_INFO ((bind), (type)) + +#define STB_LOCAL 0 +#define STB_GLOBAL 1 +#define STB_WEAK 2 +#define STB_NUM 3 +#define STB_LOOS 10 +#define STB_GNU_UNIQUE 10 +#define STB_HIOS 12 +#define STB_LOPROC 13 +#define STB_HIPROC 15 + +#define STT_NOTYPE 0 +#define STT_OBJECT 1 +#define STT_FUNC 2 +#define STT_SECTION 3 +#define STT_FILE 4 +#define STT_COMMON 5 +#define STT_TLS 6 +#define STT_NUM 7 +#define STT_LOOS 10 +#define STT_GNU_IFUNC 10 +#define STT_HIOS 12 +#define STT_LOPROC 13 +#define STT_HIPROC 15 + +#define STN_UNDEF 0 + +#define ELF32_ST_VISIBILITY(o) ((o) & 0x03) +#define ELF64_ST_VISIBILITY(o) ELF32_ST_VISIBILITY (o) + +#define STV_DEFAULT 0 +#define STV_INTERNAL 1 +#define STV_HIDDEN 2 +#define STV_PROTECTED 3 + + + + +typedef struct { + Elf32_Addr r_offset; + Elf32_Word r_info; +} Elf32_Rel; + +typedef struct { + Elf64_Addr r_offset; + Elf64_Xword r_info; +} Elf64_Rel; + + + +typedef struct { + Elf32_Addr r_offset; + Elf32_Word r_info; + Elf32_Sword r_addend; +} Elf32_Rela; + +typedef struct { + Elf64_Addr r_offset; + Elf64_Xword r_info; + Elf64_Sxword r_addend; +} Elf64_Rela; + + + +#define ELF32_R_SYM(val) ((val) >> 8) +#define ELF32_R_TYPE(val) ((val) & 0xff) +#define ELF32_R_INFO(sym, type) (((sym) << 8) + ((type) & 0xff)) + +#define ELF64_R_SYM(i) ((i) >> 32) +#define ELF64_R_TYPE(i) ((i) & 0xffffffff) +#define ELF64_R_INFO(sym,type) ((((Elf64_Xword) (sym)) << 32) + (type)) + + + +typedef struct { + Elf32_Word p_type; + Elf32_Off p_offset; + Elf32_Addr p_vaddr; + Elf32_Addr p_paddr; + Elf32_Word p_filesz; + Elf32_Word p_memsz; + Elf32_Word p_flags; + Elf32_Word p_align; +} Elf32_Phdr; + +typedef struct { + Elf64_Word p_type; + Elf64_Word p_flags; + Elf64_Off p_offset; + Elf64_Addr p_vaddr; + Elf64_Addr p_paddr; + Elf64_Xword p_filesz; + Elf64_Xword p_memsz; + Elf64_Xword p_align; +} Elf64_Phdr; + + + +#define PT_NULL 0 +#define PT_LOAD 1 +#define PT_DYNAMIC 2 +#define PT_INTERP 3 +#define PT_NOTE 4 +#define PT_SHLIB 5 +#define PT_PHDR 6 +#define PT_TLS 7 +#define PT_NUM 8 +#define PT_LOOS 0x60000000 +#define PT_GNU_EH_FRAME 0x6474e550 +#define PT_GNU_STACK 0x6474e551 +#define PT_GNU_RELRO 0x6474e552 +#define PT_LOSUNW 0x6ffffffa +#define PT_SUNWBSS 0x6ffffffa +#define PT_SUNWSTACK 0x6ffffffb +#define PT_HISUNW 0x6fffffff +#define PT_HIOS 0x6fffffff +#define PT_LOPROC 0x70000000 +#define PT_HIPROC 0x7fffffff + + +#define PN_XNUM 0xffff + + +#define PF_X (1 << 0) +#define PF_W (1 << 1) +#define PF_R (1 << 2) +#define PF_MASKOS 0x0ff00000 +#define PF_MASKPROC 0xf0000000 + + + +#define NT_PRSTATUS 1 +#define NT_FPREGSET 2 +#define NT_PRPSINFO 3 +#define NT_PRXREG 4 +#define NT_TASKSTRUCT 4 +#define NT_PLATFORM 5 +#define NT_AUXV 6 +#define NT_GWINDOWS 7 +#define NT_ASRS 8 +#define NT_PSTATUS 10 +#define NT_PSINFO 13 +#define NT_PRCRED 14 +#define NT_UTSNAME 15 +#define NT_LWPSTATUS 16 +#define NT_LWPSINFO 17 +#define NT_PRFPXREG 20 +#define NT_SIGINFO 0x53494749 +#define NT_FILE 0x46494c45 +#define NT_PRXFPREG 0x46e62b7f +#define NT_PPC_VMX 0x100 +#define NT_PPC_SPE 0x101 +#define NT_PPC_VSX 0x102 +#define NT_386_TLS 0x200 +#define NT_386_IOPERM 0x201 +#define NT_X86_XSTATE 0x202 +#define NT_S390_HIGH_GPRS 0x300 +#define NT_S390_TIMER 0x301 +#define NT_S390_TODCMP 0x302 +#define NT_S390_TODPREG 0x303 +#define NT_S390_CTRS 0x304 +#define NT_S390_PREFIX 0x305 +#define NT_S390_LAST_BREAK 0x306 +#define NT_S390_SYSTEM_CALL 0x307 +#define NT_S390_TDB 0x308 +#define NT_ARM_VFP 0x400 +#define NT_ARM_TLS 0x401 +#define NT_ARM_HW_BREAK 0x402 +#define NT_ARM_HW_WATCH 0x403 +#define NT_ARM_SYSTEM_CALL 0x404 +#define NT_ARM_SVE 0x405 +#define NT_METAG_CBUF 0x500 +#define NT_METAG_RPIPE 0x501 +#define NT_METAG_TLS 0x502 +#define NT_VERSION 1 + + + + +typedef struct { + Elf32_Sword d_tag; + union { + Elf32_Word d_val; + Elf32_Addr d_ptr; + } d_un; +} Elf32_Dyn; + +typedef struct { + Elf64_Sxword d_tag; + union { + Elf64_Xword d_val; + Elf64_Addr d_ptr; + } d_un; +} Elf64_Dyn; + + + +#define DT_NULL 0 +#define DT_NEEDED 1 +#define DT_PLTRELSZ 2 +#define DT_PLTGOT 3 +#define DT_HASH 4 +#define DT_STRTAB 5 +#define DT_SYMTAB 6 +#define DT_RELA 7 +#define DT_RELASZ 8 +#define DT_RELAENT 9 +#define DT_STRSZ 10 +#define DT_SYMENT 11 +#define DT_INIT 12 +#define DT_FINI 13 +#define DT_SONAME 14 +#define DT_RPATH 15 +#define DT_SYMBOLIC 16 +#define DT_REL 17 +#define DT_RELSZ 18 +#define DT_RELENT 19 +#define DT_PLTREL 20 +#define DT_DEBUG 21 +#define DT_TEXTREL 22 +#define DT_JMPREL 23 +#define DT_BIND_NOW 24 +#define DT_INIT_ARRAY 25 +#define DT_FINI_ARRAY 26 +#define DT_INIT_ARRAYSZ 27 +#define DT_FINI_ARRAYSZ 28 +#define DT_RUNPATH 29 +#define DT_FLAGS 30 +#define DT_ENCODING 32 +#define DT_PREINIT_ARRAY 32 +#define DT_PREINIT_ARRAYSZ 33 +#define DT_NUM 34 +#define DT_LOOS 0x6000000d +#define DT_HIOS 0x6ffff000 +#define DT_LOPROC 0x70000000 +#define DT_HIPROC 0x7fffffff +#define DT_PROCNUM DT_MIPS_NUM + +#define DT_VALRNGLO 0x6ffffd00 +#define DT_GNU_PRELINKED 0x6ffffdf5 +#define DT_GNU_CONFLICTSZ 0x6ffffdf6 +#define DT_GNU_LIBLISTSZ 0x6ffffdf7 +#define DT_CHECKSUM 0x6ffffdf8 +#define DT_PLTPADSZ 0x6ffffdf9 +#define DT_MOVEENT 0x6ffffdfa +#define DT_MOVESZ 0x6ffffdfb +#define DT_FEATURE_1 0x6ffffdfc +#define DT_POSFLAG_1 0x6ffffdfd + +#define DT_SYMINSZ 0x6ffffdfe +#define DT_SYMINENT 0x6ffffdff +#define DT_VALRNGHI 0x6ffffdff +#define DT_VALTAGIDX(tag) (DT_VALRNGHI - (tag)) +#define DT_VALNUM 12 + +#define DT_ADDRRNGLO 0x6ffffe00 +#define DT_GNU_HASH 0x6ffffef5 +#define DT_TLSDESC_PLT 0x6ffffef6 +#define DT_TLSDESC_GOT 0x6ffffef7 +#define DT_GNU_CONFLICT 0x6ffffef8 +#define DT_GNU_LIBLIST 0x6ffffef9 +#define DT_CONFIG 0x6ffffefa +#define DT_DEPAUDIT 0x6ffffefb +#define DT_AUDIT 0x6ffffefc +#define DT_PLTPAD 0x6ffffefd +#define DT_MOVETAB 0x6ffffefe +#define DT_SYMINFO 0x6ffffeff +#define DT_ADDRRNGHI 0x6ffffeff +#define DT_ADDRTAGIDX(tag) (DT_ADDRRNGHI - (tag)) +#define DT_ADDRNUM 11 + + + +#define DT_VERSYM 0x6ffffff0 + +#define DT_RELACOUNT 0x6ffffff9 +#define DT_RELCOUNT 0x6ffffffa + + +#define DT_FLAGS_1 0x6ffffffb +#define DT_VERDEF 0x6ffffffc + +#define DT_VERDEFNUM 0x6ffffffd +#define DT_VERNEED 0x6ffffffe + +#define DT_VERNEEDNUM 0x6fffffff +#define DT_VERSIONTAGIDX(tag) (DT_VERNEEDNUM - (tag)) +#define DT_VERSIONTAGNUM 16 + + + +#define DT_AUXILIARY 0x7ffffffd +#define DT_FILTER 0x7fffffff +#define DT_EXTRATAGIDX(tag) ((Elf32_Word)-((Elf32_Sword) (tag) <<1>>1)-1) +#define DT_EXTRANUM 3 + + +#define DF_ORIGIN 0x00000001 +#define DF_SYMBOLIC 0x00000002 +#define DF_TEXTREL 0x00000004 +#define DF_BIND_NOW 0x00000008 +#define DF_STATIC_TLS 0x00000010 + + + +#define DF_1_NOW 0x00000001 +#define DF_1_GLOBAL 0x00000002 +#define DF_1_GROUP 0x00000004 +#define DF_1_NODELETE 0x00000008 +#define DF_1_LOADFLTR 0x00000010 +#define DF_1_INITFIRST 0x00000020 +#define DF_1_NOOPEN 0x00000040 +#define DF_1_ORIGIN 0x00000080 +#define DF_1_DIRECT 0x00000100 +#define DF_1_TRANS 0x00000200 +#define DF_1_INTERPOSE 0x00000400 +#define DF_1_NODEFLIB 0x00000800 +#define DF_1_NODUMP 0x00001000 +#define DF_1_CONFALT 0x00002000 +#define DF_1_ENDFILTEE 0x00004000 +#define DF_1_DISPRELDNE 0x00008000 +#define DF_1_DISPRELPND 0x00010000 +#define DF_1_NODIRECT 0x00020000 +#define DF_1_IGNMULDEF 0x00040000 +#define DF_1_NOKSYMS 0x00080000 +#define DF_1_NOHDR 0x00100000 +#define DF_1_EDITED 0x00200000 +#define DF_1_NORELOC 0x00400000 +#define DF_1_SYMINTPOSE 0x00800000 +#define DF_1_GLOBAUDIT 0x01000000 +#define DF_1_SINGLETON 0x02000000 + +#define DTF_1_PARINIT 0x00000001 +#define DTF_1_CONFEXP 0x00000002 + + +#define DF_P1_LAZYLOAD 0x00000001 +#define DF_P1_GROUPPERM 0x00000002 + + + + +typedef struct { + Elf32_Half vd_version; + Elf32_Half vd_flags; + Elf32_Half vd_ndx; + Elf32_Half vd_cnt; + Elf32_Word vd_hash; + Elf32_Word vd_aux; + Elf32_Word vd_next; +} Elf32_Verdef; + +typedef struct { + Elf64_Half vd_version; + Elf64_Half vd_flags; + Elf64_Half vd_ndx; + Elf64_Half vd_cnt; + Elf64_Word vd_hash; + Elf64_Word vd_aux; + Elf64_Word vd_next; +} Elf64_Verdef; + + + +#define VER_DEF_NONE 0 +#define VER_DEF_CURRENT 1 +#define VER_DEF_NUM 2 + + +#define VER_FLG_BASE 0x1 +#define VER_FLG_WEAK 0x2 + + +#define VER_NDX_LOCAL 0 +#define VER_NDX_GLOBAL 1 +#define VER_NDX_LORESERVE 0xff00 +#define VER_NDX_ELIMINATE 0xff01 + + + +typedef struct { + Elf32_Word vda_name; + Elf32_Word vda_next; +} Elf32_Verdaux; + +typedef struct { + Elf64_Word vda_name; + Elf64_Word vda_next; +} Elf64_Verdaux; + + + + +typedef struct { + Elf32_Half vn_version; + Elf32_Half vn_cnt; + Elf32_Word vn_file; + Elf32_Word vn_aux; + Elf32_Word vn_next; +} Elf32_Verneed; + +typedef struct { + Elf64_Half vn_version; + Elf64_Half vn_cnt; + Elf64_Word vn_file; + Elf64_Word vn_aux; + Elf64_Word vn_next; +} Elf64_Verneed; + + + +#define VER_NEED_NONE 0 +#define VER_NEED_CURRENT 1 +#define VER_NEED_NUM 2 + + + +typedef struct { + Elf32_Word vna_hash; + Elf32_Half vna_flags; + Elf32_Half vna_other; + Elf32_Word vna_name; + Elf32_Word vna_next; +} Elf32_Vernaux; + +typedef struct { + Elf64_Word vna_hash; + Elf64_Half vna_flags; + Elf64_Half vna_other; + Elf64_Word vna_name; + Elf64_Word vna_next; +} Elf64_Vernaux; + + + +#define VER_FLG_WEAK 0x2 + + + +typedef struct { + uint32_t a_type; + union { + uint32_t a_val; + } a_un; +} Elf32_auxv_t; + +typedef struct { + uint64_t a_type; + union { + uint64_t a_val; + } a_un; +} Elf64_auxv_t; + + + +#define AT_NULL 0 +#define AT_IGNORE 1 +#define AT_EXECFD 2 +#define AT_PHDR 3 +#define AT_PHENT 4 +#define AT_PHNUM 5 +#define AT_PAGESZ 6 +#define AT_BASE 7 +#define AT_FLAGS 8 +#define AT_ENTRY 9 +#define AT_NOTELF 10 +#define AT_UID 11 +#define AT_EUID 12 +#define AT_GID 13 +#define AT_EGID 14 +#define AT_CLKTCK 17 + + +#define AT_PLATFORM 15 +#define AT_HWCAP 16 + + + + +#define AT_FPUCW 18 + + +#define AT_DCACHEBSIZE 19 +#define AT_ICACHEBSIZE 20 +#define AT_UCACHEBSIZE 21 + + + +#define AT_IGNOREPPC 22 + +#define AT_SECURE 23 + +#define AT_BASE_PLATFORM 24 + +#define AT_RANDOM 25 + +#define AT_HWCAP2 26 + +#define AT_EXECFN 31 + + + +#define AT_SYSINFO 32 +#define AT_SYSINFO_EHDR 33 + + + +#define AT_L1I_CACHESHAPE 34 +#define AT_L1D_CACHESHAPE 35 +#define AT_L2_CACHESHAPE 36 +#define AT_L3_CACHESHAPE 37 + + + + +typedef struct { + Elf32_Word n_namesz; + Elf32_Word n_descsz; + Elf32_Word n_type; +} Elf32_Nhdr; + +typedef struct { + Elf64_Word n_namesz; + Elf64_Word n_descsz; + Elf64_Word n_type; +} Elf64_Nhdr; + + + + +#define ELF_NOTE_SOLARIS "SUNW Solaris" + + +#define ELF_NOTE_GNU "GNU" + + + + + +#define ELF_NOTE_PAGESIZE_HINT 1 + + +#define NT_GNU_ABI_TAG 1 +#define ELF_NOTE_ABI NT_GNU_ABI_TAG + + + +#define ELF_NOTE_OS_LINUX 0 +#define ELF_NOTE_OS_GNU 1 +#define ELF_NOTE_OS_SOLARIS2 2 +#define ELF_NOTE_OS_FREEBSD 3 + +#define NT_GNU_BUILD_ID 3 +#define NT_GNU_GOLD_VERSION 4 + + + +typedef struct { + Elf32_Xword m_value; + Elf32_Word m_info; + Elf32_Word m_poffset; + Elf32_Half m_repeat; + Elf32_Half m_stride; +} Elf32_Move; + +typedef struct { + Elf64_Xword m_value; + Elf64_Xword m_info; + Elf64_Xword m_poffset; + Elf64_Half m_repeat; + Elf64_Half m_stride; +} Elf64_Move; + + +#define ELF32_M_SYM(info) ((info) >> 8) +#define ELF32_M_SIZE(info) ((unsigned char) (info)) +#define ELF32_M_INFO(sym, size) (((sym) << 8) + (unsigned char) (size)) + +#define ELF64_M_SYM(info) ELF32_M_SYM (info) +#define ELF64_M_SIZE(info) ELF32_M_SIZE (info) +#define ELF64_M_INFO(sym, size) ELF32_M_INFO (sym, size) + +#define EF_CPU32 0x00810000 + +#define R_68K_NONE 0 +#define R_68K_32 1 +#define R_68K_16 2 +#define R_68K_8 3 +#define R_68K_PC32 4 +#define R_68K_PC16 5 +#define R_68K_PC8 6 +#define R_68K_GOT32 7 +#define R_68K_GOT16 8 +#define R_68K_GOT8 9 +#define R_68K_GOT32O 10 +#define R_68K_GOT16O 11 +#define R_68K_GOT8O 12 +#define R_68K_PLT32 13 +#define R_68K_PLT16 14 +#define R_68K_PLT8 15 +#define R_68K_PLT32O 16 +#define R_68K_PLT16O 17 +#define R_68K_PLT8O 18 +#define R_68K_COPY 19 +#define R_68K_GLOB_DAT 20 +#define R_68K_JMP_SLOT 21 +#define R_68K_RELATIVE 22 +#define R_68K_NUM 23 + +#define R_386_NONE 0 +#define R_386_32 1 +#define R_386_PC32 2 +#define R_386_GOT32 3 +#define R_386_PLT32 4 +#define R_386_COPY 5 +#define R_386_GLOB_DAT 6 +#define R_386_JMP_SLOT 7 +#define R_386_RELATIVE 8 +#define R_386_GOTOFF 9 +#define R_386_GOTPC 10 +#define R_386_32PLT 11 +#define R_386_TLS_TPOFF 14 +#define R_386_TLS_IE 15 +#define R_386_TLS_GOTIE 16 +#define R_386_TLS_LE 17 +#define R_386_TLS_GD 18 +#define R_386_TLS_LDM 19 +#define R_386_16 20 +#define R_386_PC16 21 +#define R_386_8 22 +#define R_386_PC8 23 +#define R_386_TLS_GD_32 24 +#define R_386_TLS_GD_PUSH 25 +#define R_386_TLS_GD_CALL 26 +#define R_386_TLS_GD_POP 27 +#define R_386_TLS_LDM_32 28 +#define R_386_TLS_LDM_PUSH 29 +#define R_386_TLS_LDM_CALL 30 +#define R_386_TLS_LDM_POP 31 +#define R_386_TLS_LDO_32 32 +#define R_386_TLS_IE_32 33 +#define R_386_TLS_LE_32 34 +#define R_386_TLS_DTPMOD32 35 +#define R_386_TLS_DTPOFF32 36 +#define R_386_TLS_TPOFF32 37 +#define R_386_SIZE32 38 +#define R_386_TLS_GOTDESC 39 +#define R_386_TLS_DESC_CALL 40 +#define R_386_TLS_DESC 41 +#define R_386_IRELATIVE 42 +#define R_386_GOT32X 43 +#define R_386_NUM 44 + + + + + +#define STT_SPARC_REGISTER 13 + + + +#define EF_SPARCV9_MM 3 +#define EF_SPARCV9_TSO 0 +#define EF_SPARCV9_PSO 1 +#define EF_SPARCV9_RMO 2 +#define EF_SPARC_LEDATA 0x800000 +#define EF_SPARC_EXT_MASK 0xFFFF00 +#define EF_SPARC_32PLUS 0x000100 +#define EF_SPARC_SUN_US1 0x000200 +#define EF_SPARC_HAL_R1 0x000400 +#define EF_SPARC_SUN_US3 0x000800 + + + +#define R_SPARC_NONE 0 +#define R_SPARC_8 1 +#define R_SPARC_16 2 +#define R_SPARC_32 3 +#define R_SPARC_DISP8 4 +#define R_SPARC_DISP16 5 +#define R_SPARC_DISP32 6 +#define R_SPARC_WDISP30 7 +#define R_SPARC_WDISP22 8 +#define R_SPARC_HI22 9 +#define R_SPARC_22 10 +#define R_SPARC_13 11 +#define R_SPARC_LO10 12 +#define R_SPARC_GOT10 13 +#define R_SPARC_GOT13 14 +#define R_SPARC_GOT22 15 +#define R_SPARC_PC10 16 +#define R_SPARC_PC22 17 +#define R_SPARC_WPLT30 18 +#define R_SPARC_COPY 19 +#define R_SPARC_GLOB_DAT 20 +#define R_SPARC_JMP_SLOT 21 +#define R_SPARC_RELATIVE 22 +#define R_SPARC_UA32 23 + + + +#define R_SPARC_PLT32 24 +#define R_SPARC_HIPLT22 25 +#define R_SPARC_LOPLT10 26 +#define R_SPARC_PCPLT32 27 +#define R_SPARC_PCPLT22 28 +#define R_SPARC_PCPLT10 29 +#define R_SPARC_10 30 +#define R_SPARC_11 31 +#define R_SPARC_64 32 +#define R_SPARC_OLO10 33 +#define R_SPARC_HH22 34 +#define R_SPARC_HM10 35 +#define R_SPARC_LM22 36 +#define R_SPARC_PC_HH22 37 +#define R_SPARC_PC_HM10 38 +#define R_SPARC_PC_LM22 39 +#define R_SPARC_WDISP16 40 +#define R_SPARC_WDISP19 41 +#define R_SPARC_GLOB_JMP 42 +#define R_SPARC_7 43 +#define R_SPARC_5 44 +#define R_SPARC_6 45 +#define R_SPARC_DISP64 46 +#define R_SPARC_PLT64 47 +#define R_SPARC_HIX22 48 +#define R_SPARC_LOX10 49 +#define R_SPARC_H44 50 +#define R_SPARC_M44 51 +#define R_SPARC_L44 52 +#define R_SPARC_REGISTER 53 +#define R_SPARC_UA64 54 +#define R_SPARC_UA16 55 +#define R_SPARC_TLS_GD_HI22 56 +#define R_SPARC_TLS_GD_LO10 57 +#define R_SPARC_TLS_GD_ADD 58 +#define R_SPARC_TLS_GD_CALL 59 +#define R_SPARC_TLS_LDM_HI22 60 +#define R_SPARC_TLS_LDM_LO10 61 +#define R_SPARC_TLS_LDM_ADD 62 +#define R_SPARC_TLS_LDM_CALL 63 +#define R_SPARC_TLS_LDO_HIX22 64 +#define R_SPARC_TLS_LDO_LOX10 65 +#define R_SPARC_TLS_LDO_ADD 66 +#define R_SPARC_TLS_IE_HI22 67 +#define R_SPARC_TLS_IE_LO10 68 +#define R_SPARC_TLS_IE_LD 69 +#define R_SPARC_TLS_IE_LDX 70 +#define R_SPARC_TLS_IE_ADD 71 +#define R_SPARC_TLS_LE_HIX22 72 +#define R_SPARC_TLS_LE_LOX10 73 +#define R_SPARC_TLS_DTPMOD32 74 +#define R_SPARC_TLS_DTPMOD64 75 +#define R_SPARC_TLS_DTPOFF32 76 +#define R_SPARC_TLS_DTPOFF64 77 +#define R_SPARC_TLS_TPOFF32 78 +#define R_SPARC_TLS_TPOFF64 79 +#define R_SPARC_GOTDATA_HIX22 80 +#define R_SPARC_GOTDATA_LOX10 81 +#define R_SPARC_GOTDATA_OP_HIX22 82 +#define R_SPARC_GOTDATA_OP_LOX10 83 +#define R_SPARC_GOTDATA_OP 84 +#define R_SPARC_H34 85 +#define R_SPARC_SIZE32 86 +#define R_SPARC_SIZE64 87 +#define R_SPARC_GNU_VTINHERIT 250 +#define R_SPARC_GNU_VTENTRY 251 +#define R_SPARC_REV32 252 + +#define R_SPARC_NUM 253 + + + +#define DT_SPARC_REGISTER 0x70000001 +#define DT_SPARC_NUM 2 + + +#define EF_MIPS_NOREORDER 1 +#define EF_MIPS_PIC 2 +#define EF_MIPS_CPIC 4 +#define EF_MIPS_XGOT 8 +#define EF_MIPS_64BIT_WHIRL 16 +#define EF_MIPS_ABI2 32 +#define EF_MIPS_ABI_ON32 64 +#define EF_MIPS_FP64 512 +#define EF_MIPS_NAN2008 1024 +#define EF_MIPS_ARCH 0xf0000000 + + + +#define EF_MIPS_ARCH_1 0x00000000 +#define EF_MIPS_ARCH_2 0x10000000 +#define EF_MIPS_ARCH_3 0x20000000 +#define EF_MIPS_ARCH_4 0x30000000 +#define EF_MIPS_ARCH_5 0x40000000 +#define EF_MIPS_ARCH_32 0x50000000 +#define EF_MIPS_ARCH_64 0x60000000 +#define EF_MIPS_ARCH_32R2 0x70000000 +#define EF_MIPS_ARCH_64R2 0x80000000 + + +#define E_MIPS_ARCH_1 0x00000000 +#define E_MIPS_ARCH_2 0x10000000 +#define E_MIPS_ARCH_3 0x20000000 +#define E_MIPS_ARCH_4 0x30000000 +#define E_MIPS_ARCH_5 0x40000000 +#define E_MIPS_ARCH_32 0x50000000 +#define E_MIPS_ARCH_64 0x60000000 + + + +#define SHN_MIPS_ACOMMON 0xff00 +#define SHN_MIPS_TEXT 0xff01 +#define SHN_MIPS_DATA 0xff02 +#define SHN_MIPS_SCOMMON 0xff03 +#define SHN_MIPS_SUNDEFINED 0xff04 + + + +#define SHT_MIPS_LIBLIST 0x70000000 +#define SHT_MIPS_MSYM 0x70000001 +#define SHT_MIPS_CONFLICT 0x70000002 +#define SHT_MIPS_GPTAB 0x70000003 +#define SHT_MIPS_UCODE 0x70000004 +#define SHT_MIPS_DEBUG 0x70000005 +#define SHT_MIPS_REGINFO 0x70000006 +#define SHT_MIPS_PACKAGE 0x70000007 +#define SHT_MIPS_PACKSYM 0x70000008 +#define SHT_MIPS_RELD 0x70000009 +#define SHT_MIPS_IFACE 0x7000000b +#define SHT_MIPS_CONTENT 0x7000000c +#define SHT_MIPS_OPTIONS 0x7000000d +#define SHT_MIPS_SHDR 0x70000010 +#define SHT_MIPS_FDESC 0x70000011 +#define SHT_MIPS_EXTSYM 0x70000012 +#define SHT_MIPS_DENSE 0x70000013 +#define SHT_MIPS_PDESC 0x70000014 +#define SHT_MIPS_LOCSYM 0x70000015 +#define SHT_MIPS_AUXSYM 0x70000016 +#define SHT_MIPS_OPTSYM 0x70000017 +#define SHT_MIPS_LOCSTR 0x70000018 +#define SHT_MIPS_LINE 0x70000019 +#define SHT_MIPS_RFDESC 0x7000001a +#define SHT_MIPS_DELTASYM 0x7000001b +#define SHT_MIPS_DELTAINST 0x7000001c +#define SHT_MIPS_DELTACLASS 0x7000001d +#define SHT_MIPS_DWARF 0x7000001e +#define SHT_MIPS_DELTADECL 0x7000001f +#define SHT_MIPS_SYMBOL_LIB 0x70000020 +#define SHT_MIPS_EVENTS 0x70000021 +#define SHT_MIPS_TRANSLATE 0x70000022 +#define SHT_MIPS_PIXIE 0x70000023 +#define SHT_MIPS_XLATE 0x70000024 +#define SHT_MIPS_XLATE_DEBUG 0x70000025 +#define SHT_MIPS_WHIRL 0x70000026 +#define SHT_MIPS_EH_REGION 0x70000027 +#define SHT_MIPS_XLATE_OLD 0x70000028 +#define SHT_MIPS_PDR_EXCEPTION 0x70000029 + + + +#define SHF_MIPS_GPREL 0x10000000 +#define SHF_MIPS_MERGE 0x20000000 +#define SHF_MIPS_ADDR 0x40000000 +#define SHF_MIPS_STRINGS 0x80000000 +#define SHF_MIPS_NOSTRIP 0x08000000 +#define SHF_MIPS_LOCAL 0x04000000 +#define SHF_MIPS_NAMES 0x02000000 +#define SHF_MIPS_NODUPE 0x01000000 + + + + + +#define STO_MIPS_DEFAULT 0x0 +#define STO_MIPS_INTERNAL 0x1 +#define STO_MIPS_HIDDEN 0x2 +#define STO_MIPS_PROTECTED 0x3 +#define STO_MIPS_PLT 0x8 +#define STO_MIPS_SC_ALIGN_UNUSED 0xff + + +#define STB_MIPS_SPLIT_COMMON 13 + + + +typedef union { + struct { + Elf32_Word gt_current_g_value; + Elf32_Word gt_unused; + } gt_header; + struct { + Elf32_Word gt_g_value; + Elf32_Word gt_bytes; + } gt_entry; +} Elf32_gptab; + + + +typedef struct { + Elf32_Word ri_gprmask; + Elf32_Word ri_cprmask[4]; + Elf32_Sword ri_gp_value; +} Elf32_RegInfo; + + + +typedef struct { + unsigned char kind; + + unsigned char size; + Elf32_Section section; + + Elf32_Word info; +} Elf_Options; + + + +#define ODK_NULL 0 +#define ODK_REGINFO 1 +#define ODK_EXCEPTIONS 2 +#define ODK_PAD 3 +#define ODK_HWPATCH 4 +#define ODK_FILL 5 +#define ODK_TAGS 6 +#define ODK_HWAND 7 +#define ODK_HWOR 8 + + + +#define OEX_FPU_MIN 0x1f +#define OEX_FPU_MAX 0x1f00 +#define OEX_PAGE0 0x10000 +#define OEX_SMM 0x20000 +#define OEX_FPDBUG 0x40000 +#define OEX_PRECISEFP OEX_FPDBUG +#define OEX_DISMISS 0x80000 + +#define OEX_FPU_INVAL 0x10 +#define OEX_FPU_DIV0 0x08 +#define OEX_FPU_OFLO 0x04 +#define OEX_FPU_UFLO 0x02 +#define OEX_FPU_INEX 0x01 + + + +#define OHW_R4KEOP 0x1 +#define OHW_R8KPFETCH 0x2 +#define OHW_R5KEOP 0x4 +#define OHW_R5KCVTL 0x8 + +#define OPAD_PREFIX 0x1 +#define OPAD_POSTFIX 0x2 +#define OPAD_SYMBOL 0x4 + + + +typedef struct { + Elf32_Word hwp_flags1; + Elf32_Word hwp_flags2; +} Elf_Options_Hw; + + + +#define OHWA0_R4KEOP_CHECKED 0x00000001 +#define OHWA1_R4KEOP_CLEAN 0x00000002 + + + +#define R_MIPS_NONE 0 +#define R_MIPS_16 1 +#define R_MIPS_32 2 +#define R_MIPS_REL32 3 +#define R_MIPS_26 4 +#define R_MIPS_HI16 5 +#define R_MIPS_LO16 6 +#define R_MIPS_GPREL16 7 +#define R_MIPS_LITERAL 8 +#define R_MIPS_GOT16 9 +#define R_MIPS_PC16 10 +#define R_MIPS_CALL16 11 +#define R_MIPS_GPREL32 12 + +#define R_MIPS_SHIFT5 16 +#define R_MIPS_SHIFT6 17 +#define R_MIPS_64 18 +#define R_MIPS_GOT_DISP 19 +#define R_MIPS_GOT_PAGE 20 +#define R_MIPS_GOT_OFST 21 +#define R_MIPS_GOT_HI16 22 +#define R_MIPS_GOT_LO16 23 +#define R_MIPS_SUB 24 +#define R_MIPS_INSERT_A 25 +#define R_MIPS_INSERT_B 26 +#define R_MIPS_DELETE 27 +#define R_MIPS_HIGHER 28 +#define R_MIPS_HIGHEST 29 +#define R_MIPS_CALL_HI16 30 +#define R_MIPS_CALL_LO16 31 +#define R_MIPS_SCN_DISP 32 +#define R_MIPS_REL16 33 +#define R_MIPS_ADD_IMMEDIATE 34 +#define R_MIPS_PJUMP 35 +#define R_MIPS_RELGOT 36 +#define R_MIPS_JALR 37 +#define R_MIPS_TLS_DTPMOD32 38 +#define R_MIPS_TLS_DTPREL32 39 +#define R_MIPS_TLS_DTPMOD64 40 +#define R_MIPS_TLS_DTPREL64 41 +#define R_MIPS_TLS_GD 42 +#define R_MIPS_TLS_LDM 43 +#define R_MIPS_TLS_DTPREL_HI16 44 +#define R_MIPS_TLS_DTPREL_LO16 45 +#define R_MIPS_TLS_GOTTPREL 46 +#define R_MIPS_TLS_TPREL32 47 +#define R_MIPS_TLS_TPREL64 48 +#define R_MIPS_TLS_TPREL_HI16 49 +#define R_MIPS_TLS_TPREL_LO16 50 +#define R_MIPS_GLOB_DAT 51 +#define R_MIPS_COPY 126 +#define R_MIPS_JUMP_SLOT 127 + +#define R_MIPS_NUM 128 + + + +#define PT_MIPS_REGINFO 0x70000000 +#define PT_MIPS_RTPROC 0x70000001 +#define PT_MIPS_OPTIONS 0x70000002 +#define PT_MIPS_ABIFLAGS 0x70000003 + + + +#define PF_MIPS_LOCAL 0x10000000 + + + +#define DT_MIPS_RLD_VERSION 0x70000001 +#define DT_MIPS_TIME_STAMP 0x70000002 +#define DT_MIPS_ICHECKSUM 0x70000003 +#define DT_MIPS_IVERSION 0x70000004 +#define DT_MIPS_FLAGS 0x70000005 +#define DT_MIPS_BASE_ADDRESS 0x70000006 +#define DT_MIPS_MSYM 0x70000007 +#define DT_MIPS_CONFLICT 0x70000008 +#define DT_MIPS_LIBLIST 0x70000009 +#define DT_MIPS_LOCAL_GOTNO 0x7000000a +#define DT_MIPS_CONFLICTNO 0x7000000b +#define DT_MIPS_LIBLISTNO 0x70000010 +#define DT_MIPS_SYMTABNO 0x70000011 +#define DT_MIPS_UNREFEXTNO 0x70000012 +#define DT_MIPS_GOTSYM 0x70000013 +#define DT_MIPS_HIPAGENO 0x70000014 +#define DT_MIPS_RLD_MAP 0x70000016 +#define DT_MIPS_DELTA_CLASS 0x70000017 +#define DT_MIPS_DELTA_CLASS_NO 0x70000018 + +#define DT_MIPS_DELTA_INSTANCE 0x70000019 +#define DT_MIPS_DELTA_INSTANCE_NO 0x7000001a + +#define DT_MIPS_DELTA_RELOC 0x7000001b +#define DT_MIPS_DELTA_RELOC_NO 0x7000001c + +#define DT_MIPS_DELTA_SYM 0x7000001d + +#define DT_MIPS_DELTA_SYM_NO 0x7000001e + +#define DT_MIPS_DELTA_CLASSSYM 0x70000020 + +#define DT_MIPS_DELTA_CLASSSYM_NO 0x70000021 + +#define DT_MIPS_CXX_FLAGS 0x70000022 +#define DT_MIPS_PIXIE_INIT 0x70000023 +#define DT_MIPS_SYMBOL_LIB 0x70000024 +#define DT_MIPS_LOCALPAGE_GOTIDX 0x70000025 +#define DT_MIPS_LOCAL_GOTIDX 0x70000026 +#define DT_MIPS_HIDDEN_GOTIDX 0x70000027 +#define DT_MIPS_PROTECTED_GOTIDX 0x70000028 +#define DT_MIPS_OPTIONS 0x70000029 +#define DT_MIPS_INTERFACE 0x7000002a +#define DT_MIPS_DYNSTR_ALIGN 0x7000002b +#define DT_MIPS_INTERFACE_SIZE 0x7000002c +#define DT_MIPS_RLD_TEXT_RESOLVE_ADDR 0x7000002d + +#define DT_MIPS_PERF_SUFFIX 0x7000002e + +#define DT_MIPS_COMPACT_SIZE 0x7000002f +#define DT_MIPS_GP_VALUE 0x70000030 +#define DT_MIPS_AUX_DYNAMIC 0x70000031 + +#define DT_MIPS_PLTGOT 0x70000032 + +#define DT_MIPS_RWPLT 0x70000034 +#define DT_MIPS_RLD_MAP_REL 0x70000035 +#define DT_MIPS_NUM 0x36 + + + +#define RHF_NONE 0 +#define RHF_QUICKSTART (1 << 0) +#define RHF_NOTPOT (1 << 1) +#define RHF_NO_LIBRARY_REPLACEMENT (1 << 2) +#define RHF_NO_MOVE (1 << 3) +#define RHF_SGI_ONLY (1 << 4) +#define RHF_GUARANTEE_INIT (1 << 5) +#define RHF_DELTA_C_PLUS_PLUS (1 << 6) +#define RHF_GUARANTEE_START_INIT (1 << 7) +#define RHF_PIXIE (1 << 8) +#define RHF_DEFAULT_DELAY_LOAD (1 << 9) +#define RHF_REQUICKSTART (1 << 10) +#define RHF_REQUICKSTARTED (1 << 11) +#define RHF_CORD (1 << 12) +#define RHF_NO_UNRES_UNDEF (1 << 13) +#define RHF_RLD_ORDER_SAFE (1 << 14) + + + +typedef struct { + Elf32_Word l_name; + Elf32_Word l_time_stamp; + Elf32_Word l_checksum; + Elf32_Word l_version; + Elf32_Word l_flags; +} Elf32_Lib; + +typedef struct { + Elf64_Word l_name; + Elf64_Word l_time_stamp; + Elf64_Word l_checksum; + Elf64_Word l_version; + Elf64_Word l_flags; +} Elf64_Lib; + + + + +#define LL_NONE 0 +#define LL_EXACT_MATCH (1 << 0) +#define LL_IGNORE_INT_VER (1 << 1) +#define LL_REQUIRE_MINOR (1 << 2) +#define LL_EXPORTS (1 << 3) +#define LL_DELAY_LOAD (1 << 4) +#define LL_DELTA (1 << 5) + + + +typedef Elf32_Addr Elf32_Conflict; + +typedef struct { + Elf32_Half version; + unsigned char isa_level; + unsigned char isa_rev; + unsigned char gpr_size; + unsigned char cpr1_size; + unsigned char cpr2_size; + unsigned char fp_abi; + Elf32_Word isa_ext; + Elf32_Word ases; + Elf32_Word flags1; + Elf32_Word flags2; +} Elf_MIPS_ABIFlags_v0; + +#define MIPS_AFL_REG_NONE 0x00 +#define MIPS_AFL_REG_32 0x01 +#define MIPS_AFL_REG_64 0x02 +#define MIPS_AFL_REG_128 0x03 + +#define MIPS_AFL_ASE_DSP 0x00000001 +#define MIPS_AFL_ASE_DSPR2 0x00000002 +#define MIPS_AFL_ASE_EVA 0x00000004 +#define MIPS_AFL_ASE_MCU 0x00000008 +#define MIPS_AFL_ASE_MDMX 0x00000010 +#define MIPS_AFL_ASE_MIPS3D 0x00000020 +#define MIPS_AFL_ASE_MT 0x00000040 +#define MIPS_AFL_ASE_SMARTMIPS 0x00000080 +#define MIPS_AFL_ASE_VIRT 0x00000100 +#define MIPS_AFL_ASE_MSA 0x00000200 +#define MIPS_AFL_ASE_MIPS16 0x00000400 +#define MIPS_AFL_ASE_MICROMIPS 0x00000800 +#define MIPS_AFL_ASE_XPA 0x00001000 +#define MIPS_AFL_ASE_MASK 0x00001fff + +#define MIPS_AFL_EXT_XLR 1 +#define MIPS_AFL_EXT_OCTEON2 2 +#define MIPS_AFL_EXT_OCTEONP 3 +#define MIPS_AFL_EXT_LOONGSON_3A 4 +#define MIPS_AFL_EXT_OCTEON 5 +#define MIPS_AFL_EXT_5900 6 +#define MIPS_AFL_EXT_4650 7 +#define MIPS_AFL_EXT_4010 8 +#define MIPS_AFL_EXT_4100 9 +#define MIPS_AFL_EXT_3900 10 +#define MIPS_AFL_EXT_10000 11 +#define MIPS_AFL_EXT_SB1 12 +#define MIPS_AFL_EXT_4111 13 +#define MIPS_AFL_EXT_4120 14 +#define MIPS_AFL_EXT_5400 15 +#define MIPS_AFL_EXT_5500 16 +#define MIPS_AFL_EXT_LOONGSON_2E 17 +#define MIPS_AFL_EXT_LOONGSON_2F 18 + +#define MIPS_AFL_FLAGS1_ODDSPREG 1 + +enum +{ + Val_GNU_MIPS_ABI_FP_ANY = 0, + Val_GNU_MIPS_ABI_FP_DOUBLE = 1, + Val_GNU_MIPS_ABI_FP_SINGLE = 2, + Val_GNU_MIPS_ABI_FP_SOFT = 3, + Val_GNU_MIPS_ABI_FP_OLD_64 = 4, + Val_GNU_MIPS_ABI_FP_XX = 5, + Val_GNU_MIPS_ABI_FP_64 = 6, + Val_GNU_MIPS_ABI_FP_64A = 7, + Val_GNU_MIPS_ABI_FP_MAX = 7 +}; + + + + +#define EF_PARISC_TRAPNIL 0x00010000 +#define EF_PARISC_EXT 0x00020000 +#define EF_PARISC_LSB 0x00040000 +#define EF_PARISC_WIDE 0x00080000 +#define EF_PARISC_NO_KABP 0x00100000 + +#define EF_PARISC_LAZYSWAP 0x00400000 +#define EF_PARISC_ARCH 0x0000ffff + + + +#define EFA_PARISC_1_0 0x020b +#define EFA_PARISC_1_1 0x0210 +#define EFA_PARISC_2_0 0x0214 + + + +#define SHN_PARISC_ANSI_COMMON 0xff00 + +#define SHN_PARISC_HUGE_COMMON 0xff01 + + + +#define SHT_PARISC_EXT 0x70000000 +#define SHT_PARISC_UNWIND 0x70000001 +#define SHT_PARISC_DOC 0x70000002 + + + +#define SHF_PARISC_SHORT 0x20000000 +#define SHF_PARISC_HUGE 0x40000000 +#define SHF_PARISC_SBP 0x80000000 + + + +#define STT_PARISC_MILLICODE 13 + +#define STT_HP_OPAQUE (STT_LOOS + 0x1) +#define STT_HP_STUB (STT_LOOS + 0x2) + + + +#define R_PARISC_NONE 0 +#define R_PARISC_DIR32 1 +#define R_PARISC_DIR21L 2 +#define R_PARISC_DIR17R 3 +#define R_PARISC_DIR17F 4 +#define R_PARISC_DIR14R 6 +#define R_PARISC_PCREL32 9 +#define R_PARISC_PCREL21L 10 +#define R_PARISC_PCREL17R 11 +#define R_PARISC_PCREL17F 12 +#define R_PARISC_PCREL14R 14 +#define R_PARISC_DPREL21L 18 +#define R_PARISC_DPREL14R 22 +#define R_PARISC_GPREL21L 26 +#define R_PARISC_GPREL14R 30 +#define R_PARISC_LTOFF21L 34 +#define R_PARISC_LTOFF14R 38 +#define R_PARISC_SECREL32 41 +#define R_PARISC_SEGBASE 48 +#define R_PARISC_SEGREL32 49 +#define R_PARISC_PLTOFF21L 50 +#define R_PARISC_PLTOFF14R 54 +#define R_PARISC_LTOFF_FPTR32 57 +#define R_PARISC_LTOFF_FPTR21L 58 +#define R_PARISC_LTOFF_FPTR14R 62 +#define R_PARISC_FPTR64 64 +#define R_PARISC_PLABEL32 65 +#define R_PARISC_PLABEL21L 66 +#define R_PARISC_PLABEL14R 70 +#define R_PARISC_PCREL64 72 +#define R_PARISC_PCREL22F 74 +#define R_PARISC_PCREL14WR 75 +#define R_PARISC_PCREL14DR 76 +#define R_PARISC_PCREL16F 77 +#define R_PARISC_PCREL16WF 78 +#define R_PARISC_PCREL16DF 79 +#define R_PARISC_DIR64 80 +#define R_PARISC_DIR14WR 83 +#define R_PARISC_DIR14DR 84 +#define R_PARISC_DIR16F 85 +#define R_PARISC_DIR16WF 86 +#define R_PARISC_DIR16DF 87 +#define R_PARISC_GPREL64 88 +#define R_PARISC_GPREL14WR 91 +#define R_PARISC_GPREL14DR 92 +#define R_PARISC_GPREL16F 93 +#define R_PARISC_GPREL16WF 94 +#define R_PARISC_GPREL16DF 95 +#define R_PARISC_LTOFF64 96 +#define R_PARISC_LTOFF14WR 99 +#define R_PARISC_LTOFF14DR 100 +#define R_PARISC_LTOFF16F 101 +#define R_PARISC_LTOFF16WF 102 +#define R_PARISC_LTOFF16DF 103 +#define R_PARISC_SECREL64 104 +#define R_PARISC_SEGREL64 112 +#define R_PARISC_PLTOFF14WR 115 +#define R_PARISC_PLTOFF14DR 116 +#define R_PARISC_PLTOFF16F 117 +#define R_PARISC_PLTOFF16WF 118 +#define R_PARISC_PLTOFF16DF 119 +#define R_PARISC_LTOFF_FPTR64 120 +#define R_PARISC_LTOFF_FPTR14WR 123 +#define R_PARISC_LTOFF_FPTR14DR 124 +#define R_PARISC_LTOFF_FPTR16F 125 +#define R_PARISC_LTOFF_FPTR16WF 126 +#define R_PARISC_LTOFF_FPTR16DF 127 +#define R_PARISC_LORESERVE 128 +#define R_PARISC_COPY 128 +#define R_PARISC_IPLT 129 +#define R_PARISC_EPLT 130 +#define R_PARISC_TPREL32 153 +#define R_PARISC_TPREL21L 154 +#define R_PARISC_TPREL14R 158 +#define R_PARISC_LTOFF_TP21L 162 +#define R_PARISC_LTOFF_TP14R 166 +#define R_PARISC_LTOFF_TP14F 167 +#define R_PARISC_TPREL64 216 +#define R_PARISC_TPREL14WR 219 +#define R_PARISC_TPREL14DR 220 +#define R_PARISC_TPREL16F 221 +#define R_PARISC_TPREL16WF 222 +#define R_PARISC_TPREL16DF 223 +#define R_PARISC_LTOFF_TP64 224 +#define R_PARISC_LTOFF_TP14WR 227 +#define R_PARISC_LTOFF_TP14DR 228 +#define R_PARISC_LTOFF_TP16F 229 +#define R_PARISC_LTOFF_TP16WF 230 +#define R_PARISC_LTOFF_TP16DF 231 +#define R_PARISC_GNU_VTENTRY 232 +#define R_PARISC_GNU_VTINHERIT 233 +#define R_PARISC_TLS_GD21L 234 +#define R_PARISC_TLS_GD14R 235 +#define R_PARISC_TLS_GDCALL 236 +#define R_PARISC_TLS_LDM21L 237 +#define R_PARISC_TLS_LDM14R 238 +#define R_PARISC_TLS_LDMCALL 239 +#define R_PARISC_TLS_LDO21L 240 +#define R_PARISC_TLS_LDO14R 241 +#define R_PARISC_TLS_DTPMOD32 242 +#define R_PARISC_TLS_DTPMOD64 243 +#define R_PARISC_TLS_DTPOFF32 244 +#define R_PARISC_TLS_DTPOFF64 245 +#define R_PARISC_TLS_LE21L R_PARISC_TPREL21L +#define R_PARISC_TLS_LE14R R_PARISC_TPREL14R +#define R_PARISC_TLS_IE21L R_PARISC_LTOFF_TP21L +#define R_PARISC_TLS_IE14R R_PARISC_LTOFF_TP14R +#define R_PARISC_TLS_TPREL32 R_PARISC_TPREL32 +#define R_PARISC_TLS_TPREL64 R_PARISC_TPREL64 +#define R_PARISC_HIRESERVE 255 + + + +#define PT_HP_TLS (PT_LOOS + 0x0) +#define PT_HP_CORE_NONE (PT_LOOS + 0x1) +#define PT_HP_CORE_VERSION (PT_LOOS + 0x2) +#define PT_HP_CORE_KERNEL (PT_LOOS + 0x3) +#define PT_HP_CORE_COMM (PT_LOOS + 0x4) +#define PT_HP_CORE_PROC (PT_LOOS + 0x5) +#define PT_HP_CORE_LOADABLE (PT_LOOS + 0x6) +#define PT_HP_CORE_STACK (PT_LOOS + 0x7) +#define PT_HP_CORE_SHM (PT_LOOS + 0x8) +#define PT_HP_CORE_MMF (PT_LOOS + 0x9) +#define PT_HP_PARALLEL (PT_LOOS + 0x10) +#define PT_HP_FASTBIND (PT_LOOS + 0x11) +#define PT_HP_OPT_ANNOT (PT_LOOS + 0x12) +#define PT_HP_HSL_ANNOT (PT_LOOS + 0x13) +#define PT_HP_STACK (PT_LOOS + 0x14) + +#define PT_PARISC_ARCHEXT 0x70000000 +#define PT_PARISC_UNWIND 0x70000001 + + + +#define PF_PARISC_SBP 0x08000000 + +#define PF_HP_PAGE_SIZE 0x00100000 +#define PF_HP_FAR_SHARED 0x00200000 +#define PF_HP_NEAR_SHARED 0x00400000 +#define PF_HP_CODE 0x01000000 +#define PF_HP_MODIFY 0x02000000 +#define PF_HP_LAZYSWAP 0x04000000 +#define PF_HP_SBP 0x08000000 + + + + + + +#define EF_ALPHA_32BIT 1 +#define EF_ALPHA_CANRELAX 2 + + + + +#define SHT_ALPHA_DEBUG 0x70000001 +#define SHT_ALPHA_REGINFO 0x70000002 + + + +#define SHF_ALPHA_GPREL 0x10000000 + + +#define STO_ALPHA_NOPV 0x80 +#define STO_ALPHA_STD_GPLOAD 0x88 + + + +#define R_ALPHA_NONE 0 +#define R_ALPHA_REFLONG 1 +#define R_ALPHA_REFQUAD 2 +#define R_ALPHA_GPREL32 3 +#define R_ALPHA_LITERAL 4 +#define R_ALPHA_LITUSE 5 +#define R_ALPHA_GPDISP 6 +#define R_ALPHA_BRADDR 7 +#define R_ALPHA_HINT 8 +#define R_ALPHA_SREL16 9 +#define R_ALPHA_SREL32 10 +#define R_ALPHA_SREL64 11 +#define R_ALPHA_GPRELHIGH 17 +#define R_ALPHA_GPRELLOW 18 +#define R_ALPHA_GPREL16 19 +#define R_ALPHA_COPY 24 +#define R_ALPHA_GLOB_DAT 25 +#define R_ALPHA_JMP_SLOT 26 +#define R_ALPHA_RELATIVE 27 +#define R_ALPHA_TLS_GD_HI 28 +#define R_ALPHA_TLSGD 29 +#define R_ALPHA_TLS_LDM 30 +#define R_ALPHA_DTPMOD64 31 +#define R_ALPHA_GOTDTPREL 32 +#define R_ALPHA_DTPREL64 33 +#define R_ALPHA_DTPRELHI 34 +#define R_ALPHA_DTPRELLO 35 +#define R_ALPHA_DTPREL16 36 +#define R_ALPHA_GOTTPREL 37 +#define R_ALPHA_TPREL64 38 +#define R_ALPHA_TPRELHI 39 +#define R_ALPHA_TPRELLO 40 +#define R_ALPHA_TPREL16 41 + +#define R_ALPHA_NUM 46 + + +#define LITUSE_ALPHA_ADDR 0 +#define LITUSE_ALPHA_BASE 1 +#define LITUSE_ALPHA_BYTOFF 2 +#define LITUSE_ALPHA_JSR 3 +#define LITUSE_ALPHA_TLS_GD 4 +#define LITUSE_ALPHA_TLS_LDM 5 + + +#define DT_ALPHA_PLTRO (DT_LOPROC + 0) +#define DT_ALPHA_NUM 1 + + + + +#define EF_PPC_EMB 0x80000000 + + +#define EF_PPC_RELOCATABLE 0x00010000 +#define EF_PPC_RELOCATABLE_LIB 0x00008000 + + + +#define R_PPC_NONE 0 +#define R_PPC_ADDR32 1 +#define R_PPC_ADDR24 2 +#define R_PPC_ADDR16 3 +#define R_PPC_ADDR16_LO 4 +#define R_PPC_ADDR16_HI 5 +#define R_PPC_ADDR16_HA 6 +#define R_PPC_ADDR14 7 +#define R_PPC_ADDR14_BRTAKEN 8 +#define R_PPC_ADDR14_BRNTAKEN 9 +#define R_PPC_REL24 10 +#define R_PPC_REL14 11 +#define R_PPC_REL14_BRTAKEN 12 +#define R_PPC_REL14_BRNTAKEN 13 +#define R_PPC_GOT16 14 +#define R_PPC_GOT16_LO 15 +#define R_PPC_GOT16_HI 16 +#define R_PPC_GOT16_HA 17 +#define R_PPC_PLTREL24 18 +#define R_PPC_COPY 19 +#define R_PPC_GLOB_DAT 20 +#define R_PPC_JMP_SLOT 21 +#define R_PPC_RELATIVE 22 +#define R_PPC_LOCAL24PC 23 +#define R_PPC_UADDR32 24 +#define R_PPC_UADDR16 25 +#define R_PPC_REL32 26 +#define R_PPC_PLT32 27 +#define R_PPC_PLTREL32 28 +#define R_PPC_PLT16_LO 29 +#define R_PPC_PLT16_HI 30 +#define R_PPC_PLT16_HA 31 +#define R_PPC_SDAREL16 32 +#define R_PPC_SECTOFF 33 +#define R_PPC_SECTOFF_LO 34 +#define R_PPC_SECTOFF_HI 35 +#define R_PPC_SECTOFF_HA 36 + + +#define R_PPC_TLS 67 +#define R_PPC_DTPMOD32 68 +#define R_PPC_TPREL16 69 +#define R_PPC_TPREL16_LO 70 +#define R_PPC_TPREL16_HI 71 +#define R_PPC_TPREL16_HA 72 +#define R_PPC_TPREL32 73 +#define R_PPC_DTPREL16 74 +#define R_PPC_DTPREL16_LO 75 +#define R_PPC_DTPREL16_HI 76 +#define R_PPC_DTPREL16_HA 77 +#define R_PPC_DTPREL32 78 +#define R_PPC_GOT_TLSGD16 79 +#define R_PPC_GOT_TLSGD16_LO 80 +#define R_PPC_GOT_TLSGD16_HI 81 +#define R_PPC_GOT_TLSGD16_HA 82 +#define R_PPC_GOT_TLSLD16 83 +#define R_PPC_GOT_TLSLD16_LO 84 +#define R_PPC_GOT_TLSLD16_HI 85 +#define R_PPC_GOT_TLSLD16_HA 86 +#define R_PPC_GOT_TPREL16 87 +#define R_PPC_GOT_TPREL16_LO 88 +#define R_PPC_GOT_TPREL16_HI 89 +#define R_PPC_GOT_TPREL16_HA 90 +#define R_PPC_GOT_DTPREL16 91 +#define R_PPC_GOT_DTPREL16_LO 92 +#define R_PPC_GOT_DTPREL16_HI 93 +#define R_PPC_GOT_DTPREL16_HA 94 +#define R_PPC_TLSGD 95 +#define R_PPC_TLSLD 96 + + +#define R_PPC_EMB_NADDR32 101 +#define R_PPC_EMB_NADDR16 102 +#define R_PPC_EMB_NADDR16_LO 103 +#define R_PPC_EMB_NADDR16_HI 104 +#define R_PPC_EMB_NADDR16_HA 105 +#define R_PPC_EMB_SDAI16 106 +#define R_PPC_EMB_SDA2I16 107 +#define R_PPC_EMB_SDA2REL 108 +#define R_PPC_EMB_SDA21 109 +#define R_PPC_EMB_MRKREF 110 +#define R_PPC_EMB_RELSEC16 111 +#define R_PPC_EMB_RELST_LO 112 +#define R_PPC_EMB_RELST_HI 113 +#define R_PPC_EMB_RELST_HA 114 +#define R_PPC_EMB_BIT_FLD 115 +#define R_PPC_EMB_RELSDA 116 + + +#define R_PPC_DIAB_SDA21_LO 180 +#define R_PPC_DIAB_SDA21_HI 181 +#define R_PPC_DIAB_SDA21_HA 182 +#define R_PPC_DIAB_RELSDA_LO 183 +#define R_PPC_DIAB_RELSDA_HI 184 +#define R_PPC_DIAB_RELSDA_HA 185 + + +#define R_PPC_IRELATIVE 248 + + +#define R_PPC_REL16 249 +#define R_PPC_REL16_LO 250 +#define R_PPC_REL16_HI 251 +#define R_PPC_REL16_HA 252 + + + +#define R_PPC_TOC16 255 + + +#define DT_PPC_GOT (DT_LOPROC + 0) +#define DT_PPC_OPT (DT_LOPROC + 1) +#define DT_PPC_NUM 2 + +#define PPC_OPT_TLS 1 + + +#define R_PPC64_NONE R_PPC_NONE +#define R_PPC64_ADDR32 R_PPC_ADDR32 +#define R_PPC64_ADDR24 R_PPC_ADDR24 +#define R_PPC64_ADDR16 R_PPC_ADDR16 +#define R_PPC64_ADDR16_LO R_PPC_ADDR16_LO +#define R_PPC64_ADDR16_HI R_PPC_ADDR16_HI +#define R_PPC64_ADDR16_HA R_PPC_ADDR16_HA +#define R_PPC64_ADDR14 R_PPC_ADDR14 +#define R_PPC64_ADDR14_BRTAKEN R_PPC_ADDR14_BRTAKEN +#define R_PPC64_ADDR14_BRNTAKEN R_PPC_ADDR14_BRNTAKEN +#define R_PPC64_REL24 R_PPC_REL24 +#define R_PPC64_REL14 R_PPC_REL14 +#define R_PPC64_REL14_BRTAKEN R_PPC_REL14_BRTAKEN +#define R_PPC64_REL14_BRNTAKEN R_PPC_REL14_BRNTAKEN +#define R_PPC64_GOT16 R_PPC_GOT16 +#define R_PPC64_GOT16_LO R_PPC_GOT16_LO +#define R_PPC64_GOT16_HI R_PPC_GOT16_HI +#define R_PPC64_GOT16_HA R_PPC_GOT16_HA + +#define R_PPC64_COPY R_PPC_COPY +#define R_PPC64_GLOB_DAT R_PPC_GLOB_DAT +#define R_PPC64_JMP_SLOT R_PPC_JMP_SLOT +#define R_PPC64_RELATIVE R_PPC_RELATIVE + +#define R_PPC64_UADDR32 R_PPC_UADDR32 +#define R_PPC64_UADDR16 R_PPC_UADDR16 +#define R_PPC64_REL32 R_PPC_REL32 +#define R_PPC64_PLT32 R_PPC_PLT32 +#define R_PPC64_PLTREL32 R_PPC_PLTREL32 +#define R_PPC64_PLT16_LO R_PPC_PLT16_LO +#define R_PPC64_PLT16_HI R_PPC_PLT16_HI +#define R_PPC64_PLT16_HA R_PPC_PLT16_HA + +#define R_PPC64_SECTOFF R_PPC_SECTOFF +#define R_PPC64_SECTOFF_LO R_PPC_SECTOFF_LO +#define R_PPC64_SECTOFF_HI R_PPC_SECTOFF_HI +#define R_PPC64_SECTOFF_HA R_PPC_SECTOFF_HA +#define R_PPC64_ADDR30 37 +#define R_PPC64_ADDR64 38 +#define R_PPC64_ADDR16_HIGHER 39 +#define R_PPC64_ADDR16_HIGHERA 40 +#define R_PPC64_ADDR16_HIGHEST 41 +#define R_PPC64_ADDR16_HIGHESTA 42 +#define R_PPC64_UADDR64 43 +#define R_PPC64_REL64 44 +#define R_PPC64_PLT64 45 +#define R_PPC64_PLTREL64 46 +#define R_PPC64_TOC16 47 +#define R_PPC64_TOC16_LO 48 +#define R_PPC64_TOC16_HI 49 +#define R_PPC64_TOC16_HA 50 +#define R_PPC64_TOC 51 +#define R_PPC64_PLTGOT16 52 +#define R_PPC64_PLTGOT16_LO 53 +#define R_PPC64_PLTGOT16_HI 54 +#define R_PPC64_PLTGOT16_HA 55 + +#define R_PPC64_ADDR16_DS 56 +#define R_PPC64_ADDR16_LO_DS 57 +#define R_PPC64_GOT16_DS 58 +#define R_PPC64_GOT16_LO_DS 59 +#define R_PPC64_PLT16_LO_DS 60 +#define R_PPC64_SECTOFF_DS 61 +#define R_PPC64_SECTOFF_LO_DS 62 +#define R_PPC64_TOC16_DS 63 +#define R_PPC64_TOC16_LO_DS 64 +#define R_PPC64_PLTGOT16_DS 65 +#define R_PPC64_PLTGOT16_LO_DS 66 + + +#define R_PPC64_TLS 67 +#define R_PPC64_DTPMOD64 68 +#define R_PPC64_TPREL16 69 +#define R_PPC64_TPREL16_LO 70 +#define R_PPC64_TPREL16_HI 71 +#define R_PPC64_TPREL16_HA 72 +#define R_PPC64_TPREL64 73 +#define R_PPC64_DTPREL16 74 +#define R_PPC64_DTPREL16_LO 75 +#define R_PPC64_DTPREL16_HI 76 +#define R_PPC64_DTPREL16_HA 77 +#define R_PPC64_DTPREL64 78 +#define R_PPC64_GOT_TLSGD16 79 +#define R_PPC64_GOT_TLSGD16_LO 80 +#define R_PPC64_GOT_TLSGD16_HI 81 +#define R_PPC64_GOT_TLSGD16_HA 82 +#define R_PPC64_GOT_TLSLD16 83 +#define R_PPC64_GOT_TLSLD16_LO 84 +#define R_PPC64_GOT_TLSLD16_HI 85 +#define R_PPC64_GOT_TLSLD16_HA 86 +#define R_PPC64_GOT_TPREL16_DS 87 +#define R_PPC64_GOT_TPREL16_LO_DS 88 +#define R_PPC64_GOT_TPREL16_HI 89 +#define R_PPC64_GOT_TPREL16_HA 90 +#define R_PPC64_GOT_DTPREL16_DS 91 +#define R_PPC64_GOT_DTPREL16_LO_DS 92 +#define R_PPC64_GOT_DTPREL16_HI 93 +#define R_PPC64_GOT_DTPREL16_HA 94 +#define R_PPC64_TPREL16_DS 95 +#define R_PPC64_TPREL16_LO_DS 96 +#define R_PPC64_TPREL16_HIGHER 97 +#define R_PPC64_TPREL16_HIGHERA 98 +#define R_PPC64_TPREL16_HIGHEST 99 +#define R_PPC64_TPREL16_HIGHESTA 100 +#define R_PPC64_DTPREL16_DS 101 +#define R_PPC64_DTPREL16_LO_DS 102 +#define R_PPC64_DTPREL16_HIGHER 103 +#define R_PPC64_DTPREL16_HIGHERA 104 +#define R_PPC64_DTPREL16_HIGHEST 105 +#define R_PPC64_DTPREL16_HIGHESTA 106 +#define R_PPC64_TLSGD 107 +#define R_PPC64_TLSLD 108 +#define R_PPC64_TOCSAVE 109 +#define R_PPC64_ADDR16_HIGH 110 +#define R_PPC64_ADDR16_HIGHA 111 +#define R_PPC64_TPREL16_HIGH 112 +#define R_PPC64_TPREL16_HIGHA 113 +#define R_PPC64_DTPREL16_HIGH 114 +#define R_PPC64_DTPREL16_HIGHA 115 + + +#define R_PPC64_JMP_IREL 247 +#define R_PPC64_IRELATIVE 248 +#define R_PPC64_REL16 249 +#define R_PPC64_REL16_LO 250 +#define R_PPC64_REL16_HI 251 +#define R_PPC64_REL16_HA 252 + +#define EF_PPC64_ABI 3 + +#define DT_PPC64_GLINK (DT_LOPROC + 0) +#define DT_PPC64_OPD (DT_LOPROC + 1) +#define DT_PPC64_OPDSZ (DT_LOPROC + 2) +#define DT_PPC64_OPT (DT_LOPROC + 3) +#define DT_PPC64_NUM 4 + +#define PPC64_OPT_TLS 1 +#define PPC64_OPT_MULTI_TOC 2 + +#define STO_PPC64_LOCAL_BIT 5 +#define STO_PPC64_LOCAL_MASK 0xe0 +#define PPC64_LOCAL_ENTRY_OFFSET(x) (1 << (((x)&0xe0)>>5) & 0xfc) + + +#define EF_ARM_RELEXEC 0x01 +#define EF_ARM_HASENTRY 0x02 +#define EF_ARM_INTERWORK 0x04 +#define EF_ARM_APCS_26 0x08 +#define EF_ARM_APCS_FLOAT 0x10 +#define EF_ARM_PIC 0x20 +#define EF_ARM_ALIGN8 0x40 +#define EF_ARM_NEW_ABI 0x80 +#define EF_ARM_OLD_ABI 0x100 +#define EF_ARM_SOFT_FLOAT 0x200 +#define EF_ARM_VFP_FLOAT 0x400 +#define EF_ARM_MAVERICK_FLOAT 0x800 + +#define EF_ARM_ABI_FLOAT_SOFT 0x200 +#define EF_ARM_ABI_FLOAT_HARD 0x400 + + +#define EF_ARM_SYMSARESORTED 0x04 +#define EF_ARM_DYNSYMSUSESEGIDX 0x08 +#define EF_ARM_MAPSYMSFIRST 0x10 +#define EF_ARM_EABIMASK 0XFF000000 + + +#define EF_ARM_BE8 0x00800000 +#define EF_ARM_LE8 0x00400000 + +#define EF_ARM_EABI_VERSION(flags) ((flags) & EF_ARM_EABIMASK) +#define EF_ARM_EABI_UNKNOWN 0x00000000 +#define EF_ARM_EABI_VER1 0x01000000 +#define EF_ARM_EABI_VER2 0x02000000 +#define EF_ARM_EABI_VER3 0x03000000 +#define EF_ARM_EABI_VER4 0x04000000 +#define EF_ARM_EABI_VER5 0x05000000 + + +#define STT_ARM_TFUNC STT_LOPROC +#define STT_ARM_16BIT STT_HIPROC + + +#define SHF_ARM_ENTRYSECT 0x10000000 +#define SHF_ARM_COMDEF 0x80000000 + + + +#define PF_ARM_SB 0x10000000 + +#define PF_ARM_PI 0x20000000 +#define PF_ARM_ABS 0x40000000 + + +#define PT_ARM_EXIDX (PT_LOPROC + 1) + + +#define SHT_ARM_EXIDX (SHT_LOPROC + 1) +#define SHT_ARM_PREEMPTMAP (SHT_LOPROC + 2) +#define SHT_ARM_ATTRIBUTES (SHT_LOPROC + 3) + +#define R_AARCH64_NONE 0 +#define R_AARCH64_P32_ABS32 1 +#define R_AARCH64_P32_COPY 180 +#define R_AARCH64_P32_GLOB_DAT 181 +#define R_AARCH64_P32_JUMP_SLOT 182 +#define R_AARCH64_P32_RELATIVE 183 +#define R_AARCH64_P32_TLS_DTPMOD 184 +#define R_AARCH64_P32_TLS_DTPREL 185 +#define R_AARCH64_P32_TLS_TPREL 186 +#define R_AARCH64_P32_TLSDESC 187 +#define R_AARCH64_P32_IRELATIVE 188 +#define R_AARCH64_ABS64 257 +#define R_AARCH64_ABS32 258 +#define R_AARCH64_ABS16 259 +#define R_AARCH64_PREL64 260 +#define R_AARCH64_PREL32 261 +#define R_AARCH64_PREL16 262 +#define R_AARCH64_MOVW_UABS_G0 263 +#define R_AARCH64_MOVW_UABS_G0_NC 264 +#define R_AARCH64_MOVW_UABS_G1 265 +#define R_AARCH64_MOVW_UABS_G1_NC 266 +#define R_AARCH64_MOVW_UABS_G2 267 +#define R_AARCH64_MOVW_UABS_G2_NC 268 +#define R_AARCH64_MOVW_UABS_G3 269 +#define R_AARCH64_MOVW_SABS_G0 270 +#define R_AARCH64_MOVW_SABS_G1 271 +#define R_AARCH64_MOVW_SABS_G2 272 +#define R_AARCH64_LD_PREL_LO19 273 +#define R_AARCH64_ADR_PREL_LO21 274 +#define R_AARCH64_ADR_PREL_PG_HI21 275 +#define R_AARCH64_ADR_PREL_PG_HI21_NC 276 +#define R_AARCH64_ADD_ABS_LO12_NC 277 +#define R_AARCH64_LDST8_ABS_LO12_NC 278 +#define R_AARCH64_TSTBR14 279 +#define R_AARCH64_CONDBR19 280 +#define R_AARCH64_JUMP26 282 +#define R_AARCH64_CALL26 283 +#define R_AARCH64_LDST16_ABS_LO12_NC 284 +#define R_AARCH64_LDST32_ABS_LO12_NC 285 +#define R_AARCH64_LDST64_ABS_LO12_NC 286 +#define R_AARCH64_MOVW_PREL_G0 287 +#define R_AARCH64_MOVW_PREL_G0_NC 288 +#define R_AARCH64_MOVW_PREL_G1 289 +#define R_AARCH64_MOVW_PREL_G1_NC 290 +#define R_AARCH64_MOVW_PREL_G2 291 +#define R_AARCH64_MOVW_PREL_G2_NC 292 +#define R_AARCH64_MOVW_PREL_G3 293 +#define R_AARCH64_LDST128_ABS_LO12_NC 299 +#define R_AARCH64_MOVW_GOTOFF_G0 300 +#define R_AARCH64_MOVW_GOTOFF_G0_NC 301 +#define R_AARCH64_MOVW_GOTOFF_G1 302 +#define R_AARCH64_MOVW_GOTOFF_G1_NC 303 +#define R_AARCH64_MOVW_GOTOFF_G2 304 +#define R_AARCH64_MOVW_GOTOFF_G2_NC 305 +#define R_AARCH64_MOVW_GOTOFF_G3 306 +#define R_AARCH64_GOTREL64 307 +#define R_AARCH64_GOTREL32 308 +#define R_AARCH64_GOT_LD_PREL19 309 +#define R_AARCH64_LD64_GOTOFF_LO15 310 +#define R_AARCH64_ADR_GOT_PAGE 311 +#define R_AARCH64_LD64_GOT_LO12_NC 312 +#define R_AARCH64_LD64_GOTPAGE_LO15 313 +#define R_AARCH64_TLSGD_ADR_PREL21 512 +#define R_AARCH64_TLSGD_ADR_PAGE21 513 +#define R_AARCH64_TLSGD_ADD_LO12_NC 514 +#define R_AARCH64_TLSGD_MOVW_G1 515 +#define R_AARCH64_TLSGD_MOVW_G0_NC 516 +#define R_AARCH64_TLSLD_ADR_PREL21 517 +#define R_AARCH64_TLSLD_ADR_PAGE21 518 +#define R_AARCH64_TLSLD_ADD_LO12_NC 519 +#define R_AARCH64_TLSLD_MOVW_G1 520 +#define R_AARCH64_TLSLD_MOVW_G0_NC 521 +#define R_AARCH64_TLSLD_LD_PREL19 522 +#define R_AARCH64_TLSLD_MOVW_DTPREL_G2 523 +#define R_AARCH64_TLSLD_MOVW_DTPREL_G1 524 +#define R_AARCH64_TLSLD_MOVW_DTPREL_G1_NC 525 +#define R_AARCH64_TLSLD_MOVW_DTPREL_G0 526 +#define R_AARCH64_TLSLD_MOVW_DTPREL_G0_NC 527 +#define R_AARCH64_TLSLD_ADD_DTPREL_HI12 528 +#define R_AARCH64_TLSLD_ADD_DTPREL_LO12 529 +#define R_AARCH64_TLSLD_ADD_DTPREL_LO12_NC 530 +#define R_AARCH64_TLSLD_LDST8_DTPREL_LO12 531 +#define R_AARCH64_TLSLD_LDST8_DTPREL_LO12_NC 532 +#define R_AARCH64_TLSLD_LDST16_DTPREL_LO12 533 +#define R_AARCH64_TLSLD_LDST16_DTPREL_LO12_NC 534 +#define R_AARCH64_TLSLD_LDST32_DTPREL_LO12 535 +#define R_AARCH64_TLSLD_LDST32_DTPREL_LO12_NC 536 +#define R_AARCH64_TLSLD_LDST64_DTPREL_LO12 537 +#define R_AARCH64_TLSLD_LDST64_DTPREL_LO12_NC 538 +#define R_AARCH64_TLSIE_MOVW_GOTTPREL_G1 539 +#define R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC 540 +#define R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21 541 +#define R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC 542 +#define R_AARCH64_TLSIE_LD_GOTTPREL_PREL19 543 +#define R_AARCH64_TLSLE_MOVW_TPREL_G2 544 +#define R_AARCH64_TLSLE_MOVW_TPREL_G1 545 +#define R_AARCH64_TLSLE_MOVW_TPREL_G1_NC 546 +#define R_AARCH64_TLSLE_MOVW_TPREL_G0 547 +#define R_AARCH64_TLSLE_MOVW_TPREL_G0_NC 548 +#define R_AARCH64_TLSLE_ADD_TPREL_HI12 549 +#define R_AARCH64_TLSLE_ADD_TPREL_LO12 550 +#define R_AARCH64_TLSLE_ADD_TPREL_LO12_NC 551 +#define R_AARCH64_TLSLE_LDST8_TPREL_LO12 552 +#define R_AARCH64_TLSLE_LDST8_TPREL_LO12_NC 553 +#define R_AARCH64_TLSLE_LDST16_TPREL_LO12 554 +#define R_AARCH64_TLSLE_LDST16_TPREL_LO12_NC 555 +#define R_AARCH64_TLSLE_LDST32_TPREL_LO12 556 +#define R_AARCH64_TLSLE_LDST32_TPREL_LO12_NC 557 +#define R_AARCH64_TLSLE_LDST64_TPREL_LO12 558 +#define R_AARCH64_TLSLE_LDST64_TPREL_LO12_NC 559 +#define R_AARCH64_TLSDESC_LD_PREL19 560 +#define R_AARCH64_TLSDESC_ADR_PREL21 561 +#define R_AARCH64_TLSDESC_ADR_PAGE21 562 +#define R_AARCH64_TLSDESC_LD64_LO12 563 +#define R_AARCH64_TLSDESC_ADD_LO12 564 +#define R_AARCH64_TLSDESC_OFF_G1 565 +#define R_AARCH64_TLSDESC_OFF_G0_NC 566 +#define R_AARCH64_TLSDESC_LDR 567 +#define R_AARCH64_TLSDESC_ADD 568 +#define R_AARCH64_TLSDESC_CALL 569 +#define R_AARCH64_TLSLE_LDST128_TPREL_LO12 570 +#define R_AARCH64_TLSLE_LDST128_TPREL_LO12_NC 571 +#define R_AARCH64_TLSLD_LDST128_DTPREL_LO12 572 +#define R_AARCH64_TLSLD_LDST128_DTPREL_LO12_NC 573 +#define R_AARCH64_COPY 1024 +#define R_AARCH64_GLOB_DAT 1025 +#define R_AARCH64_JUMP_SLOT 1026 +#define R_AARCH64_RELATIVE 1027 +#define R_AARCH64_TLS_DTPMOD 1028 +#define R_AARCH64_TLS_DTPMOD64 1028 +#define R_AARCH64_TLS_DTPREL 1029 +#define R_AARCH64_TLS_DTPREL64 1029 +#define R_AARCH64_TLS_TPREL 1030 +#define R_AARCH64_TLS_TPREL64 1030 +#define R_AARCH64_TLSDESC 1031 + + +#define R_ARM_NONE 0 +#define R_ARM_PC24 1 +#define R_ARM_ABS32 2 +#define R_ARM_REL32 3 +#define R_ARM_PC13 4 +#define R_ARM_ABS16 5 +#define R_ARM_ABS12 6 +#define R_ARM_THM_ABS5 7 +#define R_ARM_ABS8 8 +#define R_ARM_SBREL32 9 +#define R_ARM_THM_PC22 10 +#define R_ARM_THM_PC8 11 +#define R_ARM_AMP_VCALL9 12 +#define R_ARM_TLS_DESC 13 +#define R_ARM_THM_SWI8 14 +#define R_ARM_XPC25 15 +#define R_ARM_THM_XPC22 16 +#define R_ARM_TLS_DTPMOD32 17 +#define R_ARM_TLS_DTPOFF32 18 +#define R_ARM_TLS_TPOFF32 19 +#define R_ARM_COPY 20 +#define R_ARM_GLOB_DAT 21 +#define R_ARM_JUMP_SLOT 22 +#define R_ARM_RELATIVE 23 +#define R_ARM_GOTOFF 24 +#define R_ARM_GOTPC 25 +#define R_ARM_GOT32 26 +#define R_ARM_PLT32 27 +#define R_ARM_CALL 28 +#define R_ARM_JUMP24 29 +#define R_ARM_THM_JUMP24 30 +#define R_ARM_BASE_ABS 31 +#define R_ARM_ALU_PCREL_7_0 32 +#define R_ARM_ALU_PCREL_15_8 33 +#define R_ARM_ALU_PCREL_23_15 34 +#define R_ARM_LDR_SBREL_11_0 35 +#define R_ARM_ALU_SBREL_19_12 36 +#define R_ARM_ALU_SBREL_27_20 37 +#define R_ARM_TARGET1 38 +#define R_ARM_SBREL31 39 +#define R_ARM_V4BX 40 +#define R_ARM_TARGET2 41 +#define R_ARM_PREL31 42 +#define R_ARM_MOVW_ABS_NC 43 +#define R_ARM_MOVT_ABS 44 +#define R_ARM_MOVW_PREL_NC 45 +#define R_ARM_MOVT_PREL 46 +#define R_ARM_THM_MOVW_ABS_NC 47 +#define R_ARM_THM_MOVT_ABS 48 +#define R_ARM_THM_MOVW_PREL_NC 49 +#define R_ARM_THM_MOVT_PREL 50 +#define R_ARM_THM_JUMP19 51 +#define R_ARM_THM_JUMP6 52 +#define R_ARM_THM_ALU_PREL_11_0 53 +#define R_ARM_THM_PC12 54 +#define R_ARM_ABS32_NOI 55 +#define R_ARM_REL32_NOI 56 +#define R_ARM_ALU_PC_G0_NC 57 +#define R_ARM_ALU_PC_G0 58 +#define R_ARM_ALU_PC_G1_NC 59 +#define R_ARM_ALU_PC_G1 60 +#define R_ARM_ALU_PC_G2 61 +#define R_ARM_LDR_PC_G1 62 +#define R_ARM_LDR_PC_G2 63 +#define R_ARM_LDRS_PC_G0 64 +#define R_ARM_LDRS_PC_G1 65 +#define R_ARM_LDRS_PC_G2 66 +#define R_ARM_LDC_PC_G0 67 +#define R_ARM_LDC_PC_G1 68 +#define R_ARM_LDC_PC_G2 69 +#define R_ARM_ALU_SB_G0_NC 70 +#define R_ARM_ALU_SB_G0 71 +#define R_ARM_ALU_SB_G1_NC 72 +#define R_ARM_ALU_SB_G1 73 +#define R_ARM_ALU_SB_G2 74 +#define R_ARM_LDR_SB_G0 75 +#define R_ARM_LDR_SB_G1 76 +#define R_ARM_LDR_SB_G2 77 +#define R_ARM_LDRS_SB_G0 78 +#define R_ARM_LDRS_SB_G1 79 +#define R_ARM_LDRS_SB_G2 80 +#define R_ARM_LDC_SB_G0 81 +#define R_ARM_LDC_SB_G1 82 +#define R_ARM_LDC_SB_G2 83 +#define R_ARM_MOVW_BREL_NC 84 +#define R_ARM_MOVT_BREL 85 +#define R_ARM_MOVW_BREL 86 +#define R_ARM_THM_MOVW_BREL_NC 87 +#define R_ARM_THM_MOVT_BREL 88 +#define R_ARM_THM_MOVW_BREL 89 +#define R_ARM_TLS_GOTDESC 90 +#define R_ARM_TLS_CALL 91 +#define R_ARM_TLS_DESCSEQ 92 +#define R_ARM_THM_TLS_CALL 93 +#define R_ARM_PLT32_ABS 94 +#define R_ARM_GOT_ABS 95 +#define R_ARM_GOT_PREL 96 +#define R_ARM_GOT_BREL12 97 +#define R_ARM_GOTOFF12 98 +#define R_ARM_GOTRELAX 99 +#define R_ARM_GNU_VTENTRY 100 +#define R_ARM_GNU_VTINHERIT 101 +#define R_ARM_THM_PC11 102 +#define R_ARM_THM_PC9 103 +#define R_ARM_TLS_GD32 104 + +#define R_ARM_TLS_LDM32 105 + +#define R_ARM_TLS_LDO32 106 + +#define R_ARM_TLS_IE32 107 + +#define R_ARM_TLS_LE32 108 +#define R_ARM_TLS_LDO12 109 +#define R_ARM_TLS_LE12 110 +#define R_ARM_TLS_IE12GP 111 +#define R_ARM_ME_TOO 128 +#define R_ARM_THM_TLS_DESCSEQ 129 +#define R_ARM_THM_TLS_DESCSEQ16 129 +#define R_ARM_THM_TLS_DESCSEQ32 130 +#define R_ARM_THM_GOT_BREL12 131 +#define R_ARM_IRELATIVE 160 +#define R_ARM_RXPC25 249 +#define R_ARM_RSBREL32 250 +#define R_ARM_THM_RPC22 251 +#define R_ARM_RREL32 252 +#define R_ARM_RABS22 253 +#define R_ARM_RPC24 254 +#define R_ARM_RBASE 255 + +#define R_ARM_NUM 256 + + + + +#define EF_IA_64_MASKOS 0x0000000f +#define EF_IA_64_ABI64 0x00000010 +#define EF_IA_64_ARCH 0xff000000 + + +#define PT_IA_64_ARCHEXT (PT_LOPROC + 0) +#define PT_IA_64_UNWIND (PT_LOPROC + 1) +#define PT_IA_64_HP_OPT_ANOT (PT_LOOS + 0x12) +#define PT_IA_64_HP_HSL_ANOT (PT_LOOS + 0x13) +#define PT_IA_64_HP_STACK (PT_LOOS + 0x14) + + +#define PF_IA_64_NORECOV 0x80000000 + + +#define SHT_IA_64_EXT (SHT_LOPROC + 0) +#define SHT_IA_64_UNWIND (SHT_LOPROC + 1) + + +#define SHF_IA_64_SHORT 0x10000000 +#define SHF_IA_64_NORECOV 0x20000000 + + +#define DT_IA_64_PLT_RESERVE (DT_LOPROC + 0) +#define DT_IA_64_NUM 1 + + +#define R_IA64_NONE 0x00 +#define R_IA64_IMM14 0x21 +#define R_IA64_IMM22 0x22 +#define R_IA64_IMM64 0x23 +#define R_IA64_DIR32MSB 0x24 +#define R_IA64_DIR32LSB 0x25 +#define R_IA64_DIR64MSB 0x26 +#define R_IA64_DIR64LSB 0x27 +#define R_IA64_GPREL22 0x2a +#define R_IA64_GPREL64I 0x2b +#define R_IA64_GPREL32MSB 0x2c +#define R_IA64_GPREL32LSB 0x2d +#define R_IA64_GPREL64MSB 0x2e +#define R_IA64_GPREL64LSB 0x2f +#define R_IA64_LTOFF22 0x32 +#define R_IA64_LTOFF64I 0x33 +#define R_IA64_PLTOFF22 0x3a +#define R_IA64_PLTOFF64I 0x3b +#define R_IA64_PLTOFF64MSB 0x3e +#define R_IA64_PLTOFF64LSB 0x3f +#define R_IA64_FPTR64I 0x43 +#define R_IA64_FPTR32MSB 0x44 +#define R_IA64_FPTR32LSB 0x45 +#define R_IA64_FPTR64MSB 0x46 +#define R_IA64_FPTR64LSB 0x47 +#define R_IA64_PCREL60B 0x48 +#define R_IA64_PCREL21B 0x49 +#define R_IA64_PCREL21M 0x4a +#define R_IA64_PCREL21F 0x4b +#define R_IA64_PCREL32MSB 0x4c +#define R_IA64_PCREL32LSB 0x4d +#define R_IA64_PCREL64MSB 0x4e +#define R_IA64_PCREL64LSB 0x4f +#define R_IA64_LTOFF_FPTR22 0x52 +#define R_IA64_LTOFF_FPTR64I 0x53 +#define R_IA64_LTOFF_FPTR32MSB 0x54 +#define R_IA64_LTOFF_FPTR32LSB 0x55 +#define R_IA64_LTOFF_FPTR64MSB 0x56 +#define R_IA64_LTOFF_FPTR64LSB 0x57 +#define R_IA64_SEGREL32MSB 0x5c +#define R_IA64_SEGREL32LSB 0x5d +#define R_IA64_SEGREL64MSB 0x5e +#define R_IA64_SEGREL64LSB 0x5f +#define R_IA64_SECREL32MSB 0x64 +#define R_IA64_SECREL32LSB 0x65 +#define R_IA64_SECREL64MSB 0x66 +#define R_IA64_SECREL64LSB 0x67 +#define R_IA64_REL32MSB 0x6c +#define R_IA64_REL32LSB 0x6d +#define R_IA64_REL64MSB 0x6e +#define R_IA64_REL64LSB 0x6f +#define R_IA64_LTV32MSB 0x74 +#define R_IA64_LTV32LSB 0x75 +#define R_IA64_LTV64MSB 0x76 +#define R_IA64_LTV64LSB 0x77 +#define R_IA64_PCREL21BI 0x79 +#define R_IA64_PCREL22 0x7a +#define R_IA64_PCREL64I 0x7b +#define R_IA64_IPLTMSB 0x80 +#define R_IA64_IPLTLSB 0x81 +#define R_IA64_COPY 0x84 +#define R_IA64_SUB 0x85 +#define R_IA64_LTOFF22X 0x86 +#define R_IA64_LDXMOV 0x87 +#define R_IA64_TPREL14 0x91 +#define R_IA64_TPREL22 0x92 +#define R_IA64_TPREL64I 0x93 +#define R_IA64_TPREL64MSB 0x96 +#define R_IA64_TPREL64LSB 0x97 +#define R_IA64_LTOFF_TPREL22 0x9a +#define R_IA64_DTPMOD64MSB 0xa6 +#define R_IA64_DTPMOD64LSB 0xa7 +#define R_IA64_LTOFF_DTPMOD22 0xaa +#define R_IA64_DTPREL14 0xb1 +#define R_IA64_DTPREL22 0xb2 +#define R_IA64_DTPREL64I 0xb3 +#define R_IA64_DTPREL32MSB 0xb4 +#define R_IA64_DTPREL32LSB 0xb5 +#define R_IA64_DTPREL64MSB 0xb6 +#define R_IA64_DTPREL64LSB 0xb7 +#define R_IA64_LTOFF_DTPREL22 0xba + + +#define EF_SH_MACH_MASK 0x1f +#define EF_SH_UNKNOWN 0x0 +#define EF_SH1 0x1 +#define EF_SH2 0x2 +#define EF_SH3 0x3 +#define EF_SH_DSP 0x4 +#define EF_SH3_DSP 0x5 +#define EF_SH4AL_DSP 0x6 +#define EF_SH3E 0x8 +#define EF_SH4 0x9 +#define EF_SH2E 0xb +#define EF_SH4A 0xc +#define EF_SH2A 0xd +#define EF_SH4_NOFPU 0x10 +#define EF_SH4A_NOFPU 0x11 +#define EF_SH4_NOMMU_NOFPU 0x12 +#define EF_SH2A_NOFPU 0x13 +#define EF_SH3_NOMMU 0x14 +#define EF_SH2A_SH4_NOFPU 0x15 +#define EF_SH2A_SH3_NOFPU 0x16 +#define EF_SH2A_SH4 0x17 +#define EF_SH2A_SH3E 0x18 + +#define R_SH_NONE 0 +#define R_SH_DIR32 1 +#define R_SH_REL32 2 +#define R_SH_DIR8WPN 3 +#define R_SH_IND12W 4 +#define R_SH_DIR8WPL 5 +#define R_SH_DIR8WPZ 6 +#define R_SH_DIR8BP 7 +#define R_SH_DIR8W 8 +#define R_SH_DIR8L 9 +#define R_SH_SWITCH16 25 +#define R_SH_SWITCH32 26 +#define R_SH_USES 27 +#define R_SH_COUNT 28 +#define R_SH_ALIGN 29 +#define R_SH_CODE 30 +#define R_SH_DATA 31 +#define R_SH_LABEL 32 +#define R_SH_SWITCH8 33 +#define R_SH_GNU_VTINHERIT 34 +#define R_SH_GNU_VTENTRY 35 +#define R_SH_TLS_GD_32 144 +#define R_SH_TLS_LD_32 145 +#define R_SH_TLS_LDO_32 146 +#define R_SH_TLS_IE_32 147 +#define R_SH_TLS_LE_32 148 +#define R_SH_TLS_DTPMOD32 149 +#define R_SH_TLS_DTPOFF32 150 +#define R_SH_TLS_TPOFF32 151 +#define R_SH_GOT32 160 +#define R_SH_PLT32 161 +#define R_SH_COPY 162 +#define R_SH_GLOB_DAT 163 +#define R_SH_JMP_SLOT 164 +#define R_SH_RELATIVE 165 +#define R_SH_GOTOFF 166 +#define R_SH_GOTPC 167 +#define R_SH_GOT20 201 +#define R_SH_GOTOFF20 202 +#define R_SH_GOTFUNCDESC 203 +#define R_SH_GOTFUNCDEST20 204 +#define R_SH_GOTOFFFUNCDESC 205 +#define R_SH_GOTOFFFUNCDEST20 206 +#define R_SH_FUNCDESC 207 +#define R_SH_FUNCDESC_VALUE 208 + +#define R_SH_NUM 256 + + + +#define R_390_NONE 0 +#define R_390_8 1 +#define R_390_12 2 +#define R_390_16 3 +#define R_390_32 4 +#define R_390_PC32 5 +#define R_390_GOT12 6 +#define R_390_GOT32 7 +#define R_390_PLT32 8 +#define R_390_COPY 9 +#define R_390_GLOB_DAT 10 +#define R_390_JMP_SLOT 11 +#define R_390_RELATIVE 12 +#define R_390_GOTOFF32 13 +#define R_390_GOTPC 14 +#define R_390_GOT16 15 +#define R_390_PC16 16 +#define R_390_PC16DBL 17 +#define R_390_PLT16DBL 18 +#define R_390_PC32DBL 19 +#define R_390_PLT32DBL 20 +#define R_390_GOTPCDBL 21 +#define R_390_64 22 +#define R_390_PC64 23 +#define R_390_GOT64 24 +#define R_390_PLT64 25 +#define R_390_GOTENT 26 +#define R_390_GOTOFF16 27 +#define R_390_GOTOFF64 28 +#define R_390_GOTPLT12 29 +#define R_390_GOTPLT16 30 +#define R_390_GOTPLT32 31 +#define R_390_GOTPLT64 32 +#define R_390_GOTPLTENT 33 +#define R_390_PLTOFF16 34 +#define R_390_PLTOFF32 35 +#define R_390_PLTOFF64 36 +#define R_390_TLS_LOAD 37 +#define R_390_TLS_GDCALL 38 + +#define R_390_TLS_LDCALL 39 + +#define R_390_TLS_GD32 40 + +#define R_390_TLS_GD64 41 + +#define R_390_TLS_GOTIE12 42 + +#define R_390_TLS_GOTIE32 43 + +#define R_390_TLS_GOTIE64 44 + +#define R_390_TLS_LDM32 45 + +#define R_390_TLS_LDM64 46 + +#define R_390_TLS_IE32 47 + +#define R_390_TLS_IE64 48 + +#define R_390_TLS_IEENT 49 + +#define R_390_TLS_LE32 50 + +#define R_390_TLS_LE64 51 + +#define R_390_TLS_LDO32 52 + +#define R_390_TLS_LDO64 53 + +#define R_390_TLS_DTPMOD 54 +#define R_390_TLS_DTPOFF 55 +#define R_390_TLS_TPOFF 56 + +#define R_390_20 57 +#define R_390_GOT20 58 +#define R_390_GOTPLT20 59 +#define R_390_TLS_GOTIE20 60 + + +#define R_390_NUM 61 + + + +#define R_CRIS_NONE 0 +#define R_CRIS_8 1 +#define R_CRIS_16 2 +#define R_CRIS_32 3 +#define R_CRIS_8_PCREL 4 +#define R_CRIS_16_PCREL 5 +#define R_CRIS_32_PCREL 6 +#define R_CRIS_GNU_VTINHERIT 7 +#define R_CRIS_GNU_VTENTRY 8 +#define R_CRIS_COPY 9 +#define R_CRIS_GLOB_DAT 10 +#define R_CRIS_JUMP_SLOT 11 +#define R_CRIS_RELATIVE 12 +#define R_CRIS_16_GOT 13 +#define R_CRIS_32_GOT 14 +#define R_CRIS_16_GOTPLT 15 +#define R_CRIS_32_GOTPLT 16 +#define R_CRIS_32_GOTREL 17 +#define R_CRIS_32_PLT_GOTREL 18 +#define R_CRIS_32_PLT_PCREL 19 + +#define R_CRIS_NUM 20 + + + +#define R_X86_64_NONE 0 +#define R_X86_64_64 1 +#define R_X86_64_PC32 2 +#define R_X86_64_GOT32 3 +#define R_X86_64_PLT32 4 +#define R_X86_64_COPY 5 +#define R_X86_64_GLOB_DAT 6 +#define R_X86_64_JUMP_SLOT 7 +#define R_X86_64_RELATIVE 8 +#define R_X86_64_GOTPCREL 9 + +#define R_X86_64_32 10 +#define R_X86_64_32S 11 +#define R_X86_64_16 12 +#define R_X86_64_PC16 13 +#define R_X86_64_8 14 +#define R_X86_64_PC8 15 +#define R_X86_64_DTPMOD64 16 +#define R_X86_64_DTPOFF64 17 +#define R_X86_64_TPOFF64 18 +#define R_X86_64_TLSGD 19 + +#define R_X86_64_TLSLD 20 + +#define R_X86_64_DTPOFF32 21 +#define R_X86_64_GOTTPOFF 22 + +#define R_X86_64_TPOFF32 23 +#define R_X86_64_PC64 24 +#define R_X86_64_GOTOFF64 25 +#define R_X86_64_GOTPC32 26 +#define R_X86_64_GOT64 27 +#define R_X86_64_GOTPCREL64 28 +#define R_X86_64_GOTPC64 29 +#define R_X86_64_GOTPLT64 30 +#define R_X86_64_PLTOFF64 31 +#define R_X86_64_SIZE32 32 +#define R_X86_64_SIZE64 33 + +#define R_X86_64_GOTPC32_TLSDESC 34 +#define R_X86_64_TLSDESC_CALL 35 + +#define R_X86_64_TLSDESC 36 +#define R_X86_64_IRELATIVE 37 +#define R_X86_64_RELATIVE64 38 +#define R_X86_64_GOTPCRELX 41 +#define R_X86_64_REX_GOTPCRELX 42 +#define R_X86_64_NUM 43 + + + +#define R_MN10300_NONE 0 +#define R_MN10300_32 1 +#define R_MN10300_16 2 +#define R_MN10300_8 3 +#define R_MN10300_PCREL32 4 +#define R_MN10300_PCREL16 5 +#define R_MN10300_PCREL8 6 +#define R_MN10300_GNU_VTINHERIT 7 +#define R_MN10300_GNU_VTENTRY 8 +#define R_MN10300_24 9 +#define R_MN10300_GOTPC32 10 +#define R_MN10300_GOTPC16 11 +#define R_MN10300_GOTOFF32 12 +#define R_MN10300_GOTOFF24 13 +#define R_MN10300_GOTOFF16 14 +#define R_MN10300_PLT32 15 +#define R_MN10300_PLT16 16 +#define R_MN10300_GOT32 17 +#define R_MN10300_GOT24 18 +#define R_MN10300_GOT16 19 +#define R_MN10300_COPY 20 +#define R_MN10300_GLOB_DAT 21 +#define R_MN10300_JMP_SLOT 22 +#define R_MN10300_RELATIVE 23 + +#define R_MN10300_NUM 24 + + + +#define R_M32R_NONE 0 +#define R_M32R_16 1 +#define R_M32R_32 2 +#define R_M32R_24 3 +#define R_M32R_10_PCREL 4 +#define R_M32R_18_PCREL 5 +#define R_M32R_26_PCREL 6 +#define R_M32R_HI16_ULO 7 +#define R_M32R_HI16_SLO 8 +#define R_M32R_LO16 9 +#define R_M32R_SDA16 10 +#define R_M32R_GNU_VTINHERIT 11 +#define R_M32R_GNU_VTENTRY 12 + +#define R_M32R_16_RELA 33 +#define R_M32R_32_RELA 34 +#define R_M32R_24_RELA 35 +#define R_M32R_10_PCREL_RELA 36 +#define R_M32R_18_PCREL_RELA 37 +#define R_M32R_26_PCREL_RELA 38 +#define R_M32R_HI16_ULO_RELA 39 +#define R_M32R_HI16_SLO_RELA 40 +#define R_M32R_LO16_RELA 41 +#define R_M32R_SDA16_RELA 42 +#define R_M32R_RELA_GNU_VTINHERIT 43 +#define R_M32R_RELA_GNU_VTENTRY 44 +#define R_M32R_REL32 45 + +#define R_M32R_GOT24 48 +#define R_M32R_26_PLTREL 49 +#define R_M32R_COPY 50 +#define R_M32R_GLOB_DAT 51 +#define R_M32R_JMP_SLOT 52 +#define R_M32R_RELATIVE 53 +#define R_M32R_GOTOFF 54 +#define R_M32R_GOTPC24 55 +#define R_M32R_GOT16_HI_ULO 56 + +#define R_M32R_GOT16_HI_SLO 57 + +#define R_M32R_GOT16_LO 58 +#define R_M32R_GOTPC_HI_ULO 59 + +#define R_M32R_GOTPC_HI_SLO 60 + +#define R_M32R_GOTPC_LO 61 + +#define R_M32R_GOTOFF_HI_ULO 62 + +#define R_M32R_GOTOFF_HI_SLO 63 + +#define R_M32R_GOTOFF_LO 64 +#define R_M32R_NUM 256 + +#define R_MICROBLAZE_NONE 0 +#define R_MICROBLAZE_32 1 +#define R_MICROBLAZE_32_PCREL 2 +#define R_MICROBLAZE_64_PCREL 3 +#define R_MICROBLAZE_32_PCREL_LO 4 +#define R_MICROBLAZE_64 5 +#define R_MICROBLAZE_32_LO 6 +#define R_MICROBLAZE_SRO32 7 +#define R_MICROBLAZE_SRW32 8 +#define R_MICROBLAZE_64_NONE 9 +#define R_MICROBLAZE_32_SYM_OP_SYM 10 +#define R_MICROBLAZE_GNU_VTINHERIT 11 +#define R_MICROBLAZE_GNU_VTENTRY 12 +#define R_MICROBLAZE_GOTPC_64 13 +#define R_MICROBLAZE_GOT_64 14 +#define R_MICROBLAZE_PLT_64 15 +#define R_MICROBLAZE_REL 16 +#define R_MICROBLAZE_JUMP_SLOT 17 +#define R_MICROBLAZE_GLOB_DAT 18 +#define R_MICROBLAZE_GOTOFF_64 19 +#define R_MICROBLAZE_GOTOFF_32 20 +#define R_MICROBLAZE_COPY 21 +#define R_MICROBLAZE_TLS 22 +#define R_MICROBLAZE_TLSGD 23 +#define R_MICROBLAZE_TLSLD 24 +#define R_MICROBLAZE_TLSDTPMOD32 25 +#define R_MICROBLAZE_TLSDTPREL32 26 +#define R_MICROBLAZE_TLSDTPREL64 27 +#define R_MICROBLAZE_TLSGOTTPREL32 28 +#define R_MICROBLAZE_TLSTPREL32 29 + +#define DT_NIOS2_GP 0x70000002 + +#define R_NIOS2_NONE 0 +#define R_NIOS2_S16 1 +#define R_NIOS2_U16 2 +#define R_NIOS2_PCREL16 3 +#define R_NIOS2_CALL26 4 +#define R_NIOS2_IMM5 5 +#define R_NIOS2_CACHE_OPX 6 +#define R_NIOS2_IMM6 7 +#define R_NIOS2_IMM8 8 +#define R_NIOS2_HI16 9 +#define R_NIOS2_LO16 10 +#define R_NIOS2_HIADJ16 11 +#define R_NIOS2_BFD_RELOC_32 12 +#define R_NIOS2_BFD_RELOC_16 13 +#define R_NIOS2_BFD_RELOC_8 14 +#define R_NIOS2_GPREL 15 +#define R_NIOS2_GNU_VTINHERIT 16 +#define R_NIOS2_GNU_VTENTRY 17 +#define R_NIOS2_UJMP 18 +#define R_NIOS2_CJMP 19 +#define R_NIOS2_CALLR 20 +#define R_NIOS2_ALIGN 21 +#define R_NIOS2_GOT16 22 +#define R_NIOS2_CALL16 23 +#define R_NIOS2_GOTOFF_LO 24 +#define R_NIOS2_GOTOFF_HA 25 +#define R_NIOS2_PCREL_LO 26 +#define R_NIOS2_PCREL_HA 27 +#define R_NIOS2_TLS_GD16 28 +#define R_NIOS2_TLS_LDM16 29 +#define R_NIOS2_TLS_LDO16 30 +#define R_NIOS2_TLS_IE16 31 +#define R_NIOS2_TLS_LE16 32 +#define R_NIOS2_TLS_DTPMOD 33 +#define R_NIOS2_TLS_DTPREL 34 +#define R_NIOS2_TLS_TPREL 35 +#define R_NIOS2_COPY 36 +#define R_NIOS2_GLOB_DAT 37 +#define R_NIOS2_JUMP_SLOT 38 +#define R_NIOS2_RELATIVE 39 +#define R_NIOS2_GOTOFF 40 +#define R_NIOS2_CALL26_NOAT 41 +#define R_NIOS2_GOT_LO 42 +#define R_NIOS2_GOT_HA 43 +#define R_NIOS2_CALL_LO 44 +#define R_NIOS2_CALL_HA 45 + +#define R_OR1K_NONE 0 +#define R_OR1K_32 1 +#define R_OR1K_16 2 +#define R_OR1K_8 3 +#define R_OR1K_LO_16_IN_INSN 4 +#define R_OR1K_HI_16_IN_INSN 5 +#define R_OR1K_INSN_REL_26 6 +#define R_OR1K_GNU_VTENTRY 7 +#define R_OR1K_GNU_VTINHERIT 8 +#define R_OR1K_32_PCREL 9 +#define R_OR1K_16_PCREL 10 +#define R_OR1K_8_PCREL 11 +#define R_OR1K_GOTPC_HI16 12 +#define R_OR1K_GOTPC_LO16 13 +#define R_OR1K_GOT16 14 +#define R_OR1K_PLT26 15 +#define R_OR1K_GOTOFF_HI16 16 +#define R_OR1K_GOTOFF_LO16 17 +#define R_OR1K_COPY 18 +#define R_OR1K_GLOB_DAT 19 +#define R_OR1K_JMP_SLOT 20 +#define R_OR1K_RELATIVE 21 +#define R_OR1K_TLS_GD_HI16 22 +#define R_OR1K_TLS_GD_LO16 23 +#define R_OR1K_TLS_LDM_HI16 24 +#define R_OR1K_TLS_LDM_LO16 25 +#define R_OR1K_TLS_LDO_HI16 26 +#define R_OR1K_TLS_LDO_LO16 27 +#define R_OR1K_TLS_IE_HI16 28 +#define R_OR1K_TLS_IE_LO16 29 +#define R_OR1K_TLS_LE_HI16 30 +#define R_OR1K_TLS_LE_LO16 31 +#define R_OR1K_TLS_TPOFF 32 +#define R_OR1K_TLS_DTPOFF 33 +#define R_OR1K_TLS_DTPMOD 34 + +#define R_BPF_NONE 0 +#define R_BPF_MAP_FD 1 + +#ifdef __cplusplus +} +#endif + + +#endif diff --git a/tools/patchelf/patchelf.c b/tools/patchelf/patchelf.c index 19363c55f08a..573b5808aa31 100644 --- a/tools/patchelf/patchelf.c +++ b/tools/patchelf/patchelf.c @@ -1,5 +1,5 @@ #include -#include +#include "elf.h" #include #include #include From 74f074f5f39da88848cf80a6bfd3463f7fad3a17 Mon Sep 17 00:00:00 2001 From: CallmeEchoo <65783283+CallmeEchoo@users.noreply.github.com> Date: Wed, 3 May 2023 16:26:41 +0200 Subject: [PATCH 367/428] ai scoring for snow and hail relation we generally dont want to ecourage to use snow when hail is up and vice versa to avoid looping between the two weathers if score adds up. so we return false in the ShouldSetX functions if either weather is up We also reduce score by a little as further disincentive to loop and since both effect are so similar that switching between them is usually not a good idea --- src/battle_ai_main.c | 12 ++++++++---- src/battle_ai_util.c | 6 +++--- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 1fd07ef79f82..76bf2261e6d5 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -280,7 +280,7 @@ void Ai_InitPartyStruct(void) { if (GetMonData(&gPlayerParty[i], MON_DATA_HP) == 0) AI_PARTY->mons[B_SIDE_PLAYER][i].isFainted = TRUE; - + if (isOmniscient) { u32 j; @@ -1578,14 +1578,18 @@ static s16 AI_CheckBadMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) score -= 8; break; case EFFECT_HAIL: - if (gBattleWeather & (B_WEATHER_HAIL | B_WEATHER_PRIMAL_ANY) // should hail be discouraged if snow is up? + if (gBattleWeather & (B_WEATHER_HAIL | B_WEATHER_PRIMAL_ANY) || PartnerMoveEffectIsWeather(BATTLE_PARTNER(battlerAtk), AI_DATA->partnerMove)) score -= 8; + else if (gBattleWeather & B_WEATHER_SNOW) + score -= 2; // mainly to prevent looping between hail and snow break; case EFFECT_SNOWSCAPE: - if (gBattleWeather & (B_WEATHER_SNOW | B_WEATHER_PRIMAL_ANY) // should snow be discouraged if hail is up? + if (gBattleWeather & (B_WEATHER_SNOW | B_WEATHER_PRIMAL_ANY) || PartnerMoveEffectIsWeather(BATTLE_PARTNER(battlerAtk), AI_DATA->partnerMove)) score -= 8; + else if (gBattleWeather & B_WEATHER_HAIL) + score -= 2; // mainly to prevent looping between hail and snow break; case EFFECT_ATTRACT: if (!AI_CanBeInfatuated(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef], @@ -3977,7 +3981,7 @@ static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) score += 2; } break; - case EFFECT_SNOWSCAPE: // any other reasons? + case EFFECT_SNOWSCAPE: if (ShouldSetSnow(battlerAtk, AI_DATA->abilities[battlerAtk], AI_DATA->holdEffects[battlerAtk])) { if ((HasMoveEffect(battlerAtk, EFFECT_AURORA_VEIL) || HasMoveEffect(BATTLE_PARTNER(battlerAtk), EFFECT_AURORA_VEIL)) diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 02af845344fc..13d70f28f284 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -1580,7 +1580,7 @@ bool32 ShouldSetHail(u8 battler, u16 ability, u16 holdEffect) { if (!AI_WeatherHasEffect()) return FALSE; - else if (gBattleWeather & B_WEATHER_HAIL) // dont set hail if snow is up? + else if (gBattleWeather & (B_WEATHER_HAIL | B_WEATHER_SNOW)) return FALSE; if (ability == ABILITY_SNOW_CLOAK @@ -1650,11 +1650,11 @@ bool32 ShouldSetSun(u8 battlerAtk, u16 atkAbility, u16 holdEffect) return FALSE; } -bool32 ShouldSetSnow(u8 battler, u16 ability, u16 holdEffect) // any other reasons snow should be set? +bool32 ShouldSetSnow(u8 battler, u16 ability, u16 holdEffect) { if (!AI_WeatherHasEffect()) return FALSE; - else if (gBattleWeather & B_WEATHER_SNOW) // dont set snow if hail is up? + else if (gBattleWeather & (B_WEATHER_SNOW | B_WEATHER_HAIL)) return FALSE; if (ability == ABILITY_SNOW_CLOAK From eb5b81684c4409ed00be42b1a29b3f599a7036ba Mon Sep 17 00:00:00 2001 From: CallmeEchoo Date: Fri, 5 May 2023 01:38:12 +0200 Subject: [PATCH 368/428] refactored snow into damaging weather this is necessary for ice body to properly work. doesnt actually do any damage --- data/battle_scripts_1.s | 14 +++----------- include/battle_scripts.h | 2 +- include/constants/battle_string_ids.h | 7 ++----- src/battle_message.c | 12 ++++-------- src/battle_script_commands.c | 14 ++++++++++++++ src/battle_util.c | 19 +++++++++---------- src/data/text/abilities.h | 2 +- 7 files changed, 34 insertions(+), 36 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 7e1811c0b901..256db2a1efc6 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -6851,7 +6851,7 @@ BattleScript_RainContinuesOrEndsEnd:: end2 BattleScript_DamagingWeatherContinues:: - printfromtable gSandStormHailContinuesStringIds + printfromtable gSandStormHailSnowContinuesStringIds waitmessage B_WAIT_TIME_LONG playanimation_var BS_ATTACKER, sB_ANIM_ARG1 setbyte gBattleCommunication, 0 @@ -6883,16 +6883,8 @@ BattleScript_DamagingWeatherContinuesEnd:: bicword gHitMarker, HITMARKER_SKIP_DMG_TRACK | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE | HITMARKER_GRUDGE end2 -BattleScript_SnowContinuesOrEnds:: - printfromtable gSnowContinuesStringIds - waitmessage B_WAIT_TIME_LONG - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_SNOW_STOPPED, BattleScript_SnowContinuesOrEndsEnd - playanimation BS_ATTACKER, B_ANIM_SNOW_CONTINUES -BattleScript_SnowContinuesOrEndsEnd:: - end2 - -BattleScript_SandStormHailEnds:: - printfromtable gSandStormHailEndStringIds +BattleScript_SandStormHailSnowEnds:: + printfromtable gSandStormHailSnowEndStringIds waitmessage B_WAIT_TIME_LONG end2 diff --git a/include/battle_scripts.h b/include/battle_scripts.h index 68b3a0c9654c..320743694b39 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -45,7 +45,7 @@ extern const u8 BattleScript_LevelUp[]; extern const u8 BattleScript_RainContinuesOrEnds[]; extern const u8 BattleScript_SnowContinuesOrEnds[]; extern const u8 BattleScript_DamagingWeatherContinues[]; -extern const u8 BattleScript_SandStormHailEnds[]; +extern const u8 BattleScript_SandStormHailSnowEnds[]; extern const u8 BattleScript_SunlightContinues[]; extern const u8 BattleScript_SunlightFaded[]; extern const u8 BattleScript_OverworldWeatherStarts[]; diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index 4946f74e7712..ddf1be77364f 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -737,13 +737,10 @@ #define B_MSG_DOWNPOUR_CONTINUES 1 #define B_MSG_RAIN_STOPPED 2 -// gSnowContinuesStringIds -#define B_MSG_SNOW_CONTINUES 0 -#define B_MSG_SNOW_STOPPED 1 - -// gSandStormHailContinuesStringIds / gSandStormHailDmgStringIds/ gSandStormHailEndStringIds +// gSandStormHailSnowContinuesStringIds / gSandStormHailDmgStringIds/ gSandStormHailSnowEndStringIds #define B_MSG_SANDSTORM 0 #define B_MSG_HAIL 1 +#define B_MSG_SNOW 2 // gReflectLightScreenSafeguardStringIds #define B_MSG_SIDE_STATUS_FAILED 0 diff --git a/src/battle_message.c b/src/battle_message.c index e2a8eb0cb64e..472cdf4d7f41 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -1568,10 +1568,11 @@ const u16 gMoveWeatherChangeStringIds[] = [B_MSG_STARTED_SNOW] = STRINGID_STARTEDSNOW, }; -const u16 gSandStormHailContinuesStringIds[] = +const u16 gSandStormHailSnowContinuesStringIds[] = { [B_MSG_SANDSTORM] = STRINGID_SANDSTORMRAGES, [B_MSG_HAIL] = STRINGID_HAILCONTINUES, + [B_MSG_SNOW] = STRINGID_SNOWCONTINUES, }; const u16 gSandStormHailDmgStringIds[] = @@ -1580,10 +1581,11 @@ const u16 gSandStormHailDmgStringIds[] = [B_MSG_HAIL] = STRINGID_PKMNPELTEDBYHAIL }; -const u16 gSandStormHailEndStringIds[] = +const u16 gSandStormHailSnowEndStringIds[] = { [B_MSG_SANDSTORM] = STRINGID_SANDSTORMSUBSIDED, [B_MSG_HAIL] = STRINGID_HAILSTOPPED, + [B_MSG_SNOW] = STRINGID_SNOWSTOPPED, }; const u16 gRainContinuesStringIds[] = @@ -1593,12 +1595,6 @@ const u16 gRainContinuesStringIds[] = [B_MSG_RAIN_STOPPED] = STRINGID_RAINSTOPPED }; -const u16 gSnowContinuesStringIds[] = -{ - [B_MSG_SNOW_CONTINUES] = STRINGID_SNOWCONTINUES, - [B_MSG_SNOW_STOPPED] = STRINGID_SNOWSTOPPED, -}; - const u16 gProtectLikeUsedStringIds[] = { [B_MSG_PROTECTED_ITSELF] = STRINGID_PKMNPROTECTEDITSELF2, diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 847ddb9aa9f7..553b4ff97c52 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -12769,6 +12769,20 @@ static void Cmd_weatherdamage(void) gBattleMoveDamage = 1; } } + if (gBattleWeather & B_WEATHER_SNOW) + { + if (ability == ABILITY_ICE_BODY + && !(gStatuses3[gBattlerAttacker] & (STATUS3_UNDERGROUND | STATUS3_UNDERWATER)) + && !BATTLER_MAX_HP(gBattlerAttacker) + && !(gStatuses3[gBattlerAttacker] & STATUS3_HEAL_BLOCK)) + { + gBattlerAbility = gBattlerAttacker; + gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 16; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + gBattleMoveDamage *= -1; + } + } } gBattlescriptCurrInstr = cmd->nextInstr; diff --git a/src/battle_util.c b/src/battle_util.c index 37fc3d81b414..5d13461cf909 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -2341,7 +2341,7 @@ u8 DoFieldEndTurnEffects(void) if (!(gBattleWeather & B_WEATHER_SANDSTORM_PERMANENT) && --gWishFutureKnock.weatherDuration == 0) { gBattleWeather &= ~B_WEATHER_SANDSTORM_TEMPORARY; - gBattlescriptCurrInstr = BattleScript_SandStormHailEnds; + gBattlescriptCurrInstr = BattleScript_SandStormHailSnowEnds; } else { @@ -2381,7 +2381,7 @@ u8 DoFieldEndTurnEffects(void) if (!(gBattleWeather & B_WEATHER_HAIL_PERMANENT) && --gWishFutureKnock.weatherDuration == 0) { gBattleWeather &= ~B_WEATHER_HAIL_TEMPORARY; - gBattlescriptCurrInstr = BattleScript_SandStormHailEnds; + gBattlescriptCurrInstr = BattleScript_SandStormHailSnowEnds; } else { @@ -2398,20 +2398,19 @@ u8 DoFieldEndTurnEffects(void) case ENDTURN_SNOW: if (gBattleWeather & B_WEATHER_SNOW) { - if (!(gBattleWeather & B_WEATHER_SNOW_PERMANENT)) + if (!(gBattleWeather & B_WEATHER_SNOW_PERMANENT) && --gWishFutureKnock.weatherDuration == 0) { - if (--gWishFutureKnock.weatherDuration == 0) - { - gBattleWeather &= ~B_WEATHER_SNOW_TEMPORARY; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SNOW_STOPPED; - } + gBattleWeather &= ~B_WEATHER_SNOW_TEMPORARY; + gBattlescriptCurrInstr = BattleScript_SandStormHailSnowEnds; } else { - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SNOW_CONTINUES; + gBattlescriptCurrInstr = BattleScript_DamagingWeatherContinues; } - BattleScriptExecute(BattleScript_SnowContinuesOrEnds); + gBattleScripting.animArg1 = B_ANIM_SNOW_CONTINUES; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SNOW; + BattleScriptExecute(gBattlescriptCurrInstr); effect++; } gBattleStruct->turnCountersTracker++; diff --git a/src/data/text/abilities.h b/src/data/text/abilities.h index 96407c34099b..368b0cb4dc2c 100644 --- a/src/data/text/abilities.h +++ b/src/data/text/abilities.h @@ -113,7 +113,7 @@ static const u8 sFilterDescription[] = _("Weakens “supereffective”."); static const u8 sSlowStartDescription[] = _("Takes a while to get going."); static const u8 sScrappyDescription[] = _("Hits Ghost-type Pokémon."); static const u8 sStormDrainDescription[] = _("Draws in Water moves."); -static const u8 sIceBodyDescription[] = _("Slight HP recovery in Hail."); +static const u8 sIceBodyDescription[] = _("HP recovery in Hail or Snow."); static const u8 sSnowWarningDescription[] = _("Summons a hailstorm."); static const u8 sHoneyGatherDescription[] = _("May gather Honey."); static const u8 sFriskDescription[] = _("Checks a foe's item."); From a5f28afe427f51d6f50c11ee879a271b505f5204 Mon Sep 17 00:00:00 2001 From: AgustinGDLV Date: Thu, 4 May 2023 17:01:03 -0700 Subject: [PATCH 369/428] fixed Forecast and Flower Gift --- asm/macros/battle_script.inc | 4 + data/battle_scripts_1.s | 35 ++- include/battle_scripts.h | 1 + include/battle_util.h | 1 - include/config/battle.h | 1 + src/battle_script_commands.c | 27 ++- src/battle_util.c | 98 +-------- src/data/pokemon/form_change_table_pointers.h | 2 + test/ability_flower_gift.c | 86 ++++++++ test/ability_forecast.c | 201 ++++++++++++++++++ 10 files changed, 351 insertions(+), 105 deletions(-) create mode 100644 test/ability_flower_gift.c create mode 100644 test/ability_forecast.c diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index 78fb914063bd..dec096e6e1e2 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -1346,6 +1346,10 @@ callnative BS_ItemRestorePP .endm + .macro trytorevertweatherform + callnative BS_TryRevertWeatherForm + .endm + @ various command changed to more readable macros .macro cancelmultiturnmoves battler:req various \battler, VARIOUS_CANCEL_MULTI_TURN_MOVES diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 23a7632bd357..26f30ef3f5cb 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -1580,6 +1580,7 @@ BattleScript_MoveEffectCoreEnforcer:: printstring STRINGID_PKMNSABILITYSUPPRESSED waitmessage B_WAIT_TIME_LONG trytoclearprimalweather + trytorevertweatherform printstring STRINGID_EMPTYSTRING3 waitmessage 1 BattleScript_CoreEnforcerRet: @@ -2728,6 +2729,7 @@ BattleScript_EffectSimpleBeam: printstring STRINGID_PKMNACQUIREDSIMPLE waitmessage B_WAIT_TIME_LONG trytoclearprimalweather + trytorevertweatherform printstring STRINGID_EMPTYSTRING3 waitmessage 1 tryendneutralizinggas BS_TARGET @@ -2827,6 +2829,7 @@ BattleScript_EffectWorrySeed: printstring STRINGID_PKMNACQUIREDABILITY waitmessage B_WAIT_TIME_LONG trytoclearprimalweather + trytorevertweatherform printstring STRINGID_EMPTYSTRING3 waitmessage 1 goto BattleScript_MoveEnd @@ -2958,6 +2961,7 @@ BattleScript_EffectGastroAcid: printstring STRINGID_PKMNSABILITYSUPPRESSED waitmessage B_WAIT_TIME_LONG trytoclearprimalweather + trytorevertweatherform printstring STRINGID_EMPTYSTRING3 waitmessage 1 tryendneutralizinggas BS_TARGET @@ -6847,6 +6851,7 @@ BattleScript_RainContinuesOrEnds:: jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_RAIN_STOPPED, BattleScript_RainContinuesOrEndsEnd playanimation BS_ATTACKER, B_ANIM_RAIN_CONTINUES BattleScript_RainContinuesOrEndsEnd:: + call BattleScript_ActivateWeatherAbilities end2 BattleScript_DamagingWeatherContinues:: @@ -6880,22 +6885,26 @@ BattleScript_DamagingWeatherLoopIncrement:: jumpifbytenotequal gBattleCommunication, gBattlersCount, BattleScript_DamagingWeatherLoop BattleScript_DamagingWeatherContinuesEnd:: bicword gHitMarker, HITMARKER_SKIP_DMG_TRACK | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE | HITMARKER_GRUDGE + call BattleScript_ActivateWeatherAbilities end2 BattleScript_SandStormHailEnds:: printfromtable gSandStormHailEndStringIds waitmessage B_WAIT_TIME_LONG + call BattleScript_ActivateWeatherAbilities end2 BattleScript_SunlightContinues:: printstring STRINGID_SUNLIGHTSTRONG waitmessage B_WAIT_TIME_LONG playanimation BS_ATTACKER, B_ANIM_SUN_CONTINUES + call BattleScript_ActivateWeatherAbilities end2 BattleScript_SunlightFaded:: printstring STRINGID_SUNLIGHTFADED waitmessage B_WAIT_TIME_LONG + call BattleScript_ActivateWeatherAbilities end2 BattleScript_OverworldWeatherStarts:: @@ -8020,6 +8029,19 @@ BattleScript_TargetFormChangeWithString:: waitmessage B_WAIT_TIME_LONG return +BattleScript_TargetFormChangeWithStringNoPopupEnd3:: + pause 5 + printstring STRINGID_EMPTYSTRING3 + waitmessage 1 + handleformchange BS_TARGET, 0 + handleformchange BS_TARGET, 1 + playanimation BS_TARGET, B_ANIM_FORM_CHANGE, NULL + waitanimation + handleformchange BS_TARGET, 2 + printstring STRINGID_PKMNTRANSFORMED + waitmessage B_WAIT_TIME_LONG + end3 + BattleScript_BattlerFormChangeWithStringEnd3:: pause 5 call BattleScript_AbilityPopUp @@ -8663,14 +8685,15 @@ BattleScript_ShedSkinActivates:: end3 BattleScript_ActivateWeatherAbilities: - copybyte sBATTLER, gBattlerAttacker - setbyte gBattlerAttacker, 0 + savetarget + setbyte gBattlerTarget, 0 BattleScript_ActivateWeatherAbilities_Loop: - activateweatherchangeabilities BS_ATTACKER + copybyte sBATTLER, gBattlerTarget + activateweatherchangeabilities BS_TARGET BattleScript_ActivateWeatherAbilities_Increment: - addbyte gBattlerAttacker, 1 - jumpifbytenotequal gBattlerAttacker, gBattlersCount, BattleScript_ActivateWeatherAbilities_Loop - copybyte gBattlerAttacker, sBATTLER + addbyte gBattlerTarget, 1 + jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_ActivateWeatherAbilities_Loop + restoretarget return BattleScript_TryAdrenalineOrb: diff --git a/include/battle_scripts.h b/include/battle_scripts.h index 8cd8606a544b..4a005727536e 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -465,6 +465,7 @@ extern const u8 BattleScript_MoveEffectStockpileWoreOff[]; extern const u8 BattleScript_StealthRockActivates[]; extern const u8 BattleScript_SpikesActivates[]; extern const u8 BattleScript_BerserkGeneRet[]; +extern const u8 BattleScript_TargetFormChangeWithStringNoPopupEnd3[]; // zmoves extern const u8 BattleScript_ZMoveActivateDamaging[]; diff --git a/include/battle_util.h b/include/battle_util.h index e28e41aad7de..0337dacba26c 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -139,7 +139,6 @@ void TryClearRageAndFuryCutter(void); u8 AtkCanceller_UnableToUseMove(void); u8 AtkCanceller_UnableToUseMove2(void); bool8 HasNoMonsToSwitch(u8 battlerId, u8 r1, u8 r2); -u8 TryWeatherFormChange(u8 battlerId); bool32 TryChangeBattleWeather(u8 battler, u32 weatherEnumId, bool32 viaAbility); u8 AbilityBattleEffects(u8 caseID, u8 battlerId, u16 ability, u8 special, u16 moveArg); bool32 IsNeutralizingGasOnField(void); diff --git a/include/config/battle.h b/include/config/battle.h index 6a6a829d6569..73ae9a7a7c98 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -101,6 +101,7 @@ #define B_STOCKPILE_RAISES_DEFS GEN_LATEST // In Gen4+, Stockpile also raises Defense and Sp. Defense stats. Once Spit Up / Swallow is used, these stat changes are lost. #define B_TRANSFORM_SHINY GEN_LATEST // In Gen4+, Transform will copy the shiny state of the opponent instead of maintaining its own shiny state. #define B_TRANSFORM_FORM_CHANGES GEN_LATEST // In Gen5+, Transformed Pokemon cannot change forms. +#define B_WEATHER_FORM_SUPPRESS GEN_LATEST // In Gen5+, Cherrim and Castform revert to their normal forms upon losing their ability. // Ability settings #define B_EXPANDED_ABILITY_NAMES TRUE // If TRUE, ability names are increased from 12 characters to 16 characters. diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 1784f9682bfc..b21197a67902 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -16414,7 +16414,8 @@ u8 GetFirstFaintedPartyIndex(u8 battlerId) return PARTY_SIZE; } -void BS_ItemRestoreHP(void) { +void BS_ItemRestoreHP(void) +{ NATIVE_ARGS(); u16 healAmount; u32 battlerId = MAX_BATTLERS_COUNT; @@ -16476,7 +16477,8 @@ void BS_ItemRestoreHP(void) { gBattlescriptCurrInstr = cmd->nextInstr; } -void BS_ItemCureStatus(void) { +void BS_ItemCureStatus(void) +{ NATIVE_ARGS(); struct Pokemon *party = GetBattlerParty(gBattlerAttacker); @@ -16504,7 +16506,8 @@ void BS_ItemCureStatus(void) { gBattlescriptCurrInstr = cmd->nextInstr; } -void BS_ItemIncreaseStat(void) { +void BS_ItemIncreaseStat(void) +{ NATIVE_ARGS(); u16 statId = GetItemEffect(gLastUsedItem)[1]; u16 stages = ItemId_GetHoldEffectParam(gLastUsedItem); @@ -16512,7 +16515,8 @@ void BS_ItemIncreaseStat(void) { gBattlescriptCurrInstr = cmd->nextInstr; } -void BS_ItemRestorePP(void) { +void BS_ItemRestorePP(void) +{ NATIVE_ARGS(); const u8 *effect = GetItemEffect(gLastUsedItem); u32 i, pp, maxPP, moveId; @@ -16559,3 +16563,18 @@ void BS_ItemRestorePP(void) { PREPARE_SPECIES_BUFFER(gBattleTextBuff1, GetMonData(mon, MON_DATA_SPECIES)); gBattlescriptCurrInstr = cmd->nextInstr; } + +void BS_TryRevertWeatherForm(void) +{ + NATIVE_ARGS(); + u16 ability = gBattleMons[gBattlerTarget].ability; + if (B_WEATHER_FORM_SUPPRESS >= GEN_5 + && (ability == ABILITY_FORECAST || ability == ABILITY_FLOWER_GIFT) + && TryBattleFormChange(gBattlerTarget, FORM_CHANGE_BATTLE_SWITCH)) // revert form + { + gBattleScripting.battler = gBattlerTarget; + BattleScriptPushCursorAndCallback(BattleScript_TargetFormChangeWithStringNoPopupEnd3); + return; + } + gBattlescriptCurrInstr = cmd->nextInstr; +} diff --git a/src/battle_util.c b/src/battle_util.c index 831e65829248..67270469ea2a 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -3984,96 +3984,6 @@ bool8 HasNoMonsToSwitch(u8 battler, u8 partyIdBattlerOn1, u8 partyIdBattlerOn2) } } -u8 TryWeatherFormChange(u8 battler) -{ - u8 ret = 0; - bool32 weatherEffect = WEATHER_HAS_EFFECT; - u16 holdEffect = GetBattlerHoldEffect(battler, TRUE); - - switch (gBattleMons[battler].species) - { - case SPECIES_CASTFORM: -/* Placeholder - case SPECIES_CASTFORM_RAINY: - case SPECIES_CASTFORM_SNOWY: - case SPECIES_CASTFORM_SUNNY:*/ -#if B_WEATHER_FORMS >= GEN_5 - if (gBattleMons[battler].hp == 0) - { - ret = 0; // No change - } - else if (GetBattlerAbility(battler) != ABILITY_FORECAST || !weatherEffect) - { - if (!IS_BATTLER_OF_TYPE(battler, TYPE_NORMAL)) - { - SET_BATTLER_TYPE(battler, TYPE_NORMAL); - ret = CASTFORM_NORMAL + 1; - } - else - { - ret = 0; // No change - } - } -#else - if (GetBattlerAbility(battler) != ABILITY_FORECAST || gBattleMons[battler].hp == 0) - { - ret = 0; // No change - } - else if (!weatherEffect) - { - if (!IS_BATTLER_OF_TYPE(battler, TYPE_NORMAL)) - { - SET_BATTLER_TYPE(battler, TYPE_NORMAL); - ret = CASTFORM_NORMAL + 1; - } - else - { - ret = 0; // No change - } - } -#endif - else if (holdEffect == HOLD_EFFECT_UTILITY_UMBRELLA || (!(gBattleWeather & (B_WEATHER_RAIN | B_WEATHER_SUN | B_WEATHER_HAIL)) && !IS_BATTLER_OF_TYPE(battler, TYPE_NORMAL))) - { - SET_BATTLER_TYPE(battler, TYPE_NORMAL); - ret = CASTFORM_NORMAL + 1; - } - else if (gBattleWeather & B_WEATHER_SUN && holdEffect != HOLD_EFFECT_UTILITY_UMBRELLA && !IS_BATTLER_OF_TYPE(battler, TYPE_FIRE)) - { - SET_BATTLER_TYPE(battler, TYPE_FIRE); - ret = CASTFORM_FIRE + 1; - } - else if (gBattleWeather & B_WEATHER_RAIN && holdEffect != HOLD_EFFECT_UTILITY_UMBRELLA && !IS_BATTLER_OF_TYPE(battler, TYPE_WATER)) - { - SET_BATTLER_TYPE(battler, TYPE_WATER); - ret = CASTFORM_WATER + 1; - } - else if (gBattleWeather & B_WEATHER_HAIL && !IS_BATTLER_OF_TYPE(battler, TYPE_ICE)) - { - SET_BATTLER_TYPE(battler, TYPE_ICE); - ret = CASTFORM_ICE + 1; - } - break; - case SPECIES_CHERRIM: -// case SPECIES_CHERRIM_SUNSHINE: - if (gBattleMons[battler].hp == 0) - ret = 0; // No change -#if B_WEATHER_FORMS >= GEN_5 - if (GetBattlerAbility(battler) != ABILITY_FLOWER_GIFT) - if (gBattleMonForms[battler] != 0) - ret = CHERRIM_OVERCAST + 1; - else - ret = 0; // No change -#endif - else if (gBattleMonForms[battler] == 0 && weatherEffect && holdEffect != HOLD_EFFECT_UTILITY_UMBRELLA && gBattleWeather & B_WEATHER_SUN) - ret = CHERRIM_SUNSHINE + 1; - else if (gBattleMonForms[battler] != 0 && (!weatherEffect || holdEffect == HOLD_EFFECT_UTILITY_UMBRELLA || !(gBattleWeather & B_WEATHER_SUN))) - ret = CHERRIM_OVERCAST + 1; - break; - } - - return ret; -} - static const u16 sWeatherFlagsInfo[][3] = { [ENUM_WEATHER_RAIN] = {B_WEATHER_RAIN_TEMPORARY, B_WEATHER_RAIN_PERMANENT, HOLD_EFFECT_DAMP_ROCK}, @@ -9273,7 +9183,7 @@ static u32 CalcAttackStat(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, b break; #endif case ABILITY_FLOWER_GIFT: - if (gBattleMons[battlerAtk].species == SPECIES_CHERRIM && IsBattlerWeatherAffected(battlerAtk, B_WEATHER_SUN) && IS_MOVE_PHYSICAL(move)) + if (gBattleMons[battlerAtk].species == SPECIES_CHERRIM_SUNSHINE && IsBattlerWeatherAffected(battlerAtk, B_WEATHER_SUN) && IS_MOVE_PHYSICAL(move)) MulModifier(&modifier, UQ_4_12(1.5)); break; case ABILITY_HUSTLE: @@ -9313,7 +9223,7 @@ static u32 CalcAttackStat(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, b switch (GetBattlerAbility(BATTLE_PARTNER(battlerAtk))) { case ABILITY_FLOWER_GIFT: - if (gBattleMons[BATTLE_PARTNER(battlerAtk)].species == SPECIES_CHERRIM && IsBattlerWeatherAffected(BATTLE_PARTNER(battlerAtk), B_WEATHER_SUN) && IS_MOVE_PHYSICAL(move)) + if (gBattleMons[BATTLE_PARTNER(battlerAtk)].species == SPECIES_CHERRIM_SUNSHINE && IsBattlerWeatherAffected(BATTLE_PARTNER(battlerAtk), B_WEATHER_SUN) && IS_MOVE_PHYSICAL(move)) MulModifier(&modifier, UQ_4_12(1.5)); break; } @@ -9447,7 +9357,7 @@ static u32 CalcDefenseStat(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, } break; case ABILITY_FLOWER_GIFT: - if (gBattleMons[battlerDef].species == SPECIES_CHERRIM && IsBattlerWeatherAffected(battlerDef, B_WEATHER_SUN) && !usesDefStat) + if (gBattleMons[battlerDef].species == SPECIES_CHERRIM_SUNSHINE && IsBattlerWeatherAffected(battlerDef, B_WEATHER_SUN) && !usesDefStat) MulModifier(&modifier, UQ_4_12(1.5)); break; case ABILITY_PUNK_ROCK: @@ -9466,7 +9376,7 @@ static u32 CalcDefenseStat(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, switch (GetBattlerAbility(BATTLE_PARTNER(battlerDef))) { case ABILITY_FLOWER_GIFT: - if (gBattleMons[BATTLE_PARTNER(battlerDef)].species == SPECIES_CHERRIM && IsBattlerWeatherAffected(BATTLE_PARTNER(battlerDef), B_WEATHER_SUN) && !usesDefStat) + if (gBattleMons[BATTLE_PARTNER(battlerDef)].species == SPECIES_CHERRIM_SUNSHINE && IsBattlerWeatherAffected(BATTLE_PARTNER(battlerDef), B_WEATHER_SUN) && !usesDefStat) MulModifier(&modifier, UQ_4_12(1.5)); break; } diff --git a/src/data/pokemon/form_change_table_pointers.h b/src/data/pokemon/form_change_table_pointers.h index daeaa9cbbe89..8453ed480efb 100644 --- a/src/data/pokemon/form_change_table_pointers.h +++ b/src/data/pokemon/form_change_table_pointers.h @@ -92,6 +92,8 @@ const struct FormChange *const gFormChangeTablePointers[NUM_SPECIES] = [SPECIES_BURMY] = sBurmyFormChangeTable, [SPECIES_BURMY_SANDY_CLOAK] = sBurmyFormChangeTable, [SPECIES_BURMY_TRASH_CLOAK] = sBurmyFormChangeTable, + [SPECIES_CHERRIM] = sCherrimFormChangeTable, + [SPECIES_CHERRIM_SUNSHINE] = sCherrimFormChangeTable, [SPECIES_LOPUNNY] = sLopunnyFormChangeTable, [SPECIES_LOPUNNY_MEGA] = sLopunnyFormChangeTable, [SPECIES_GARCHOMP] = sGarchompFormChangeTable, diff --git a/test/ability_flower_gift.c b/test/ability_flower_gift.c new file mode 100644 index 000000000000..2f2b98d1ef30 --- /dev/null +++ b/test/ability_flower_gift.c @@ -0,0 +1,86 @@ +#include "global.h" +#include "test_battle.h" + +SINGLE_BATTLE_TEST("Flower Gift transforms Cherrim in harsh sunlight") +{ + GIVEN { + PLAYER(SPECIES_CHERRIM) { Ability(ABILITY_FLOWER_GIFT); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_SUNNY_DAY); } + } SCENE { + ABILITY_POPUP(player, ABILITY_FLOWER_GIFT); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); + MESSAGE("Cherrim transformed!"); + } +} + +SINGLE_BATTLE_TEST("Flower Gift transforms Cherrim back to normal when weather changes") +{ + GIVEN { + PLAYER(SPECIES_CHERRIM) { Ability(ABILITY_FLOWER_GIFT); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_SUNNY_DAY); } + TURN { MOVE(opponent, MOVE_RAIN_DANCE); } + } SCENE { + // transforms in sun + ABILITY_POPUP(player, ABILITY_FLOWER_GIFT); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); + MESSAGE("Cherrim transformed!"); + // back to normal + ABILITY_POPUP(player, ABILITY_FLOWER_GIFT); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); + MESSAGE("Cherrim transformed!"); + } +} + +SINGLE_BATTLE_TEST("Flower Gift transforms Cherrim back to normal when its ability is suppressed") +{ + GIVEN { + PLAYER(SPECIES_CHERRIM) { Ability(ABILITY_FLOWER_GIFT); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_SUNNY_DAY); } + TURN { MOVE(opponent, MOVE_GASTRO_ACID); } + } SCENE { + // transforms in sun + ABILITY_POPUP(player, ABILITY_FLOWER_GIFT); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); + MESSAGE("Cherrim transformed!"); + // back to normal + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); + MESSAGE("Cherrim transformed!"); + } +} + +DOUBLE_BATTLE_TEST("Flower Gift increases the attack of Cherrim's ally by 1.5x", s16 damage) +{ + bool32 sunny; + PARAMETRIZE { sunny = FALSE; } + PARAMETRIZE { sunny = TRUE; } + GIVEN { + PLAYER(SPECIES_CHERRIM) { Ability(ABILITY_FLOWER_GIFT); }; + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + if (sunny) + TURN { MOVE(playerLeft, MOVE_SUNNY_DAY); } + TURN { MOVE(playerRight, MOVE_TACKLE, target: opponentLeft); } + } SCENE { + // Sun activates + if (sunny) { + ABILITY_POPUP(playerLeft, ABILITY_FLOWER_GIFT); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, playerLeft); + MESSAGE("Cherrim transformed!"); + } + // Partner uses Tackle + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, playerRight); + HP_BAR(opponentLeft, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, UQ_4_12(1.5), results[1].damage); + } +} + +TO_DO_BATTLE_TEST("Flower Gift does not transform Cherrim back to normal when suppressed if Cherrim is Dynamaxed"); diff --git a/test/ability_forecast.c b/test/ability_forecast.c new file mode 100644 index 000000000000..dba09992d7bc --- /dev/null +++ b/test/ability_forecast.c @@ -0,0 +1,201 @@ +#include "global.h" +#include "test_battle.h" + +SINGLE_BATTLE_TEST("Forecast transforms Castform in weather from an opponent's move") +{ + u32 move; + PARAMETRIZE { move = MOVE_SUNNY_DAY; } + PARAMETRIZE { move = MOVE_RAIN_DANCE; } + PARAMETRIZE { move = MOVE_HAIL; } + GIVEN { + PLAYER(SPECIES_CASTFORM) { Ability(ABILITY_FORECAST); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, move); } + } SCENE { + ABILITY_POPUP(player, ABILITY_FORECAST); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); + MESSAGE("Castform transformed!"); + } +} + +SINGLE_BATTLE_TEST("Forecast transforms Castform in weather from its own move") +{ + u32 move; + PARAMETRIZE { move = MOVE_SUNNY_DAY; } + PARAMETRIZE { move = MOVE_RAIN_DANCE; } + PARAMETRIZE { move = MOVE_HAIL; } + GIVEN { + PLAYER(SPECIES_CASTFORM) { Ability(ABILITY_FORECAST); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, move); } + } SCENE { + ABILITY_POPUP(player, ABILITY_FORECAST); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); + MESSAGE("Castform transformed!"); + } +} + +DOUBLE_BATTLE_TEST("Forecast transforms Castform in weather from a partner's move") +{ + u32 move; + PARAMETRIZE { move = MOVE_SUNNY_DAY; } + PARAMETRIZE { move = MOVE_RAIN_DANCE; } + PARAMETRIZE { move = MOVE_HAIL; } + GIVEN { + PLAYER(SPECIES_CASTFORM) { Ability(ABILITY_FORECAST); }; + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerRight, move); } + } SCENE { + ABILITY_POPUP(playerLeft, ABILITY_FORECAST); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, playerLeft); + MESSAGE("Castform transformed!"); + } +} + +DOUBLE_BATTLE_TEST("Forecast transforms all Castforms present in weather") +{ + u32 move; + PARAMETRIZE { move = MOVE_SUNNY_DAY; } + PARAMETRIZE { move = MOVE_RAIN_DANCE; } + PARAMETRIZE { move = MOVE_HAIL; } + GIVEN { + PLAYER(SPECIES_CASTFORM) { Ability(ABILITY_FORECAST); }; + PLAYER(SPECIES_CASTFORM) { Ability(ABILITY_FORECAST); }; + OPPONENT(SPECIES_CASTFORM) { Ability(ABILITY_FORECAST); }; + OPPONENT(SPECIES_CASTFORM) { Ability(ABILITY_FORECAST); }; + } WHEN { + TURN { MOVE(playerRight, move); } + } SCENE { + ABILITY_POPUP(playerLeft, ABILITY_FORECAST); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, playerLeft); + MESSAGE("Castform transformed!"); + ABILITY_POPUP(opponentLeft, ABILITY_FORECAST); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, opponentLeft); + MESSAGE("Foe Castform transformed!"); + ABILITY_POPUP(playerRight, ABILITY_FORECAST); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, playerRight); + MESSAGE("Castform transformed!"); + ABILITY_POPUP(opponentRight, ABILITY_FORECAST); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, opponentRight); + MESSAGE("Foe Castform transformed!"); + } +} + +SINGLE_BATTLE_TEST("Forecast transforms Castform in weather from an ability") +{ + GIVEN { + PLAYER(SPECIES_CASTFORM) { Ability(ABILITY_FORECAST); }; + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_KYOGRE) { Ability(ABILITY_DRIZZLE); }; + } WHEN { + TURN { SWITCH(opponent, 1); } + } SCENE { + ABILITY_POPUP(player, ABILITY_FORECAST); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); + MESSAGE("Castform transformed!"); + } +} + +SINGLE_BATTLE_TEST("Forecast transforms Castform in primal weather") +{ + GIVEN { + PLAYER(SPECIES_CASTFORM) { Ability(ABILITY_FORECAST); }; + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_KYOGRE) { Ability(ABILITY_DRIZZLE); Item(ITEM_BLUE_ORB); }; + } WHEN { + TURN { SWITCH(opponent, 1); } + } SCENE { + ABILITY_POPUP(opponent, ABILITY_PRIMORDIAL_SEA); + ABILITY_POPUP(player, ABILITY_FORECAST); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); + MESSAGE("Castform transformed!"); + } +} + +SINGLE_BATTLE_TEST("Forecast transforms Castform back to normal when weather expires") +{ + GIVEN { + PLAYER(SPECIES_CASTFORM) { Ability(ABILITY_FORECAST); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_RAIN_DANCE); } + TURN { } + TURN { } + TURN { } + TURN { } + TURN { } + } SCENE { + // transforms + ABILITY_POPUP(player, ABILITY_FORECAST); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); + MESSAGE("Castform transformed!"); + // back to normal + ABILITY_POPUP(player, ABILITY_FORECAST); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); + MESSAGE("Castform transformed!"); + } +} + +SINGLE_BATTLE_TEST("Forecast transforms Castform back to normal when Sandstorm is active") +{ + GIVEN { + PLAYER(SPECIES_CASTFORM) { Ability(ABILITY_FORECAST); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_RAIN_DANCE); } + TURN { MOVE(player, MOVE_SANDSTORM); } + } SCENE { + // transforms + ABILITY_POPUP(player, ABILITY_FORECAST); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); + MESSAGE("Castform transformed!"); + // back to normal + ABILITY_POPUP(player, ABILITY_FORECAST); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); + MESSAGE("Castform transformed!"); + } +} + +SINGLE_BATTLE_TEST("Forecast transforms Castform on switch-in") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_CASTFORM) { Ability(ABILITY_FORECAST); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_RAIN_DANCE); } + TURN { SWITCH(player, 1); } + } SCENE { + // turn 1 + ANIMATION(ANIM_TYPE_MOVE, MOVE_RAIN_DANCE, player); + // turn 2 + ABILITY_POPUP(player, ABILITY_FORECAST); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); + MESSAGE("Castform transformed!"); + } +} + +SINGLE_BATTLE_TEST("Forecast transforms Castform when weather changes") +{ + GIVEN { + PLAYER(SPECIES_CASTFORM) { Ability(ABILITY_FORECAST); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_RAIN_DANCE); } + TURN { MOVE(player, MOVE_SUNNY_DAY); } + } SCENE { + // transforms + ABILITY_POPUP(player, ABILITY_FORECAST); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); + MESSAGE("Castform transformed!"); + // transforms again + ABILITY_POPUP(player, ABILITY_FORECAST); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); + MESSAGE("Castform transformed!"); + } +} From 488cc410a000b6096132b5d90ee345e3dbff406e Mon Sep 17 00:00:00 2001 From: CallmeEchoo Date: Fri, 5 May 2023 10:24:12 +0200 Subject: [PATCH 370/428] update ability descriptions --- src/data/text/abilities.h | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/data/text/abilities.h b/src/data/text/abilities.h index 368b0cb4dc2c..a3bad09b1b7d 100644 --- a/src/data/text/abilities.h +++ b/src/data/text/abilities.h @@ -79,7 +79,7 @@ static const u8 sTangledFeetDescription[] = _("Ups evasion if confused."); static const u8 sMotorDriveDescription[] = _("Electricity raises Speed."); static const u8 sRivalryDescription[] = _("Powers up against rivals."); static const u8 sSteadfastDescription[] = _("Flinching raises Speed."); -static const u8 sSnowCloakDescription[] = _("Ups evasion in Hail."); +static const u8 sSnowCloakDescription[] = _("Ups evasion in Hail or Snow."); static const u8 sGluttonyDescription[] = _("Eats Berries early."); static const u8 sAngerPointDescription[] = _("Critical hits raise Attack."); static const u8 sUnburdenDescription[] = _("Using a hold item ups Speed."); @@ -114,7 +114,11 @@ static const u8 sSlowStartDescription[] = _("Takes a while to get going."); static const u8 sScrappyDescription[] = _("Hits Ghost-type Pokémon."); static const u8 sStormDrainDescription[] = _("Draws in Water moves."); static const u8 sIceBodyDescription[] = _("HP recovery in Hail or Snow."); -static const u8 sSnowWarningDescription[] = _("Summons a hailstorm."); +#if B_SNOW_WARNING < GEN_9 +static const u8 sSnowWarningDescription[] = _("Summons a Hailstorm."); +#elif B_SNOW_WARNING >= GEN_9 +static const u8 sSnowWarningDescription[] = _("Summons a Snowstorm."); +#endif static const u8 sHoneyGatherDescription[] = _("May gather Honey."); static const u8 sFriskDescription[] = _("Checks a foe's item."); static const u8 sRecklessDescription[] = _("Boosts moves with recoil."); @@ -192,7 +196,7 @@ static const u8 sStakeoutDescription[] = _("Stronger as foes switch in."); static const u8 sWaterBubbleDescription[] = _("Guards from fire and burns."); static const u8 sSteelworkerDescription[] = _("Powers up Steel moves."); static const u8 sBerserkDescription[] = _("Boosts Sp. Atk at low HP."); -static const u8 sSlushRushDescription[] = _("Raises Speed in hail."); +static const u8 sSlushRushDescription[] = _("Raises Speed in Hail or Snow."); static const u8 sLongReachDescription[] = _("Never makes contact."); static const u8 sLiquidVoiceDescription[] = _("Makes sound moves Water."); static const u8 sTriageDescription[] = _("Healing moves go first."); @@ -234,7 +238,7 @@ static const u8 sPunkRockDescription[] = _("Ups and resists sound."); static const u8 sSandSpitDescription[] = _("Creates a sandstorm if hit."); static const u8 sIceScalesDescription[] = _("Halves special damage."); static const u8 sRipenDescription[] = _("Doubles effect of Berries."); -static const u8 sIceFaceDescription[] = _("Take a free hit. Hail renews."); +static const u8 sIceFaceDescription[] = _("Hail or Snow renew free hit."); static const u8 sPowerSpotDescription[] = _("Powers up ally moves."); static const u8 sMimicryDescription[] = _("Changes type on terrain."); static const u8 sScreenCleanerDescription[] = _("Removes walls of light."); From 7e7384ee0225ccd470a3724186ad01f2e2437b8d Mon Sep 17 00:00:00 2001 From: CallmeEchoo Date: Sat, 6 May 2023 19:12:49 +0200 Subject: [PATCH 371/428] tiny test doc fix --- test/test_battle.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_battle.h b/test/test_battle.h index 432e33fa80a2..81cb7e5943ca 100644 --- a/test/test_battle.h +++ b/test/test_battle.h @@ -369,7 +369,7 @@ * s16 damage; * HP_BAR(player, captureDamage: &damage); * If none of the above are used, causes the test to fail if the HP - * changes at all. + * does not change at all. * * MESSAGE(pattern) * Causes the test to fail if the message in pattern is not displayed. From e0bed6776b215e96f45799f685af1aaad9bc5408 Mon Sep 17 00:00:00 2001 From: Martin Griffin Date: Wed, 26 Apr 2023 11:12:41 +0100 Subject: [PATCH 372/428] INVALID if FINALLY without PARAMETRIZE --- test/ability_volt_absorb.c | 3 +-- test/item_effect_restore_hp.c | 2 +- test/move_effect_bide.c | 4 ++-- test/move_effect_triple_kick.c | 8 ++++---- test/move_flag_three_strikes.c | 4 ++-- test/terrain_electric.c | 2 +- test/terrain_grassy.c | 2 +- test/terrain_misty.c | 2 +- test/terrain_psychic.c | 2 +- test/test_battle.h | 4 +++- test/test_runner_battle.c | 9 ++++++++- 11 files changed, 25 insertions(+), 17 deletions(-) diff --git a/test/ability_volt_absorb.c b/test/ability_volt_absorb.c index 18902eaa20c9..8a3c21ef6a28 100644 --- a/test/ability_volt_absorb.c +++ b/test/ability_volt_absorb.c @@ -80,8 +80,7 @@ DOUBLE_BATTLE_TEST("Volt Absorb does not stop Electric Typed Explosion from dama MESSAGE("Jolteon restored HP using its Volt Absorb!"); HP_BAR(playerRight, captureDamage: &results->damage1); HP_BAR(opponentRight, captureDamage: &results->damage2); - } - FINALLY { + } THEN { EXPECT_NE(results[0].damage1, 0); EXPECT_NE(results[0].damage2, 0); } diff --git a/test/item_effect_restore_hp.c b/test/item_effect_restore_hp.c index 4662e9f25c11..6fd58fe82418 100644 --- a/test/item_effect_restore_hp.c +++ b/test/item_effect_restore_hp.c @@ -183,4 +183,4 @@ SINGLE_BATTLE_TEST("Sitrus Berry restores a battler's HP by 25% of its max HP(30 } #undef TEST_HP -#undef MAX_HP \ No newline at end of file +#undef MAX_HP diff --git a/test/move_effect_bide.c b/test/move_effect_bide.c index 3a5c38735327..0b0e18408787 100644 --- a/test/move_effect_bide.c +++ b/test/move_effect_bide.c @@ -28,7 +28,7 @@ SINGLE_BATTLE_TEST("Bide deals twice the taken damage over two turns") MESSAGE("Wobbuffet unleashed energy!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_BIDE, player); HP_BAR(opponent, captureDamage: &bideDamage); - } FINALLY { - EXPECT_EQ(bideDamage, damage1 + damage2); + } THEN { + EXPECT_EQ(bideDamage, 2 * (damage1 + damage2)); } } diff --git a/test/move_effect_triple_kick.c b/test/move_effect_triple_kick.c index d3187aefec4f..e0a91b011250 100644 --- a/test/move_effect_triple_kick.c +++ b/test/move_effect_triple_kick.c @@ -6,7 +6,7 @@ ASSUMPTIONS ASSUME(gBattleMoves[MOVE_TRIPLE_KICK].effect & EFFECT_TRIPLE_KICK); } -SINGLE_BATTLE_TEST("Triple Kick damage is increaased by its base damage for each hit") +SINGLE_BATTLE_TEST("Triple Kick damage is increased by its base damage for each hit") { s16 firstHit; s16 secondHit; @@ -24,8 +24,8 @@ SINGLE_BATTLE_TEST("Triple Kick damage is increaased by its base damage for each HP_BAR(opponent, captureDamage: &secondHit); ANIMATION(ANIM_TYPE_MOVE, MOVE_TRIPLE_KICK, player); HP_BAR(opponent, captureDamage: &thirdHit); - } FINALLY { - EXPECT_EQ(secondHit, firstHit * 2); - EXPECT_EQ(thirdHit, firstHit * 3); + } THEN { + EXPECT_MUL_EQ(firstHit, Q_4_12(2.0), secondHit); + EXPECT_MUL_EQ(firstHit, Q_4_12(3.0), thirdHit); } } diff --git a/test/move_flag_three_strikes.c b/test/move_flag_three_strikes.c index 7ea7844c4f0e..b597b4efef50 100644 --- a/test/move_flag_three_strikes.c +++ b/test/move_flag_three_strikes.c @@ -20,7 +20,7 @@ SINGLE_BATTLE_TEST("Three-strike flag turns a move into a 3-hit move") HP_BAR(opponent, captureDamage: &secondHit); ANIMATION(ANIM_TYPE_MOVE, MOVE_TRIPLE_DIVE, player); HP_BAR(opponent, captureDamage: &thirdHit); - } FINALLY { + } THEN { EXPECT_EQ(firstHit, secondHit); EXPECT_EQ(secondHit, thirdHit); EXPECT_EQ(firstHit, thirdHit); @@ -49,7 +49,7 @@ SINGLE_BATTLE_TEST("Surging Strikes hits 3 times with each hit being a critical ANIMATION(ANIM_TYPE_MOVE, MOVE_SURGING_STRIKES, player); HP_BAR(opponent, captureDamage: &thirdHit); MESSAGE("A critical hit!"); - } FINALLY { + } THEN { EXPECT_EQ(firstHit, secondHit); EXPECT_EQ(secondHit, thirdHit); EXPECT_EQ(firstHit, thirdHit); diff --git a/test/terrain_electric.c b/test/terrain_electric.c index e9c34ef92303..78f490c425f5 100644 --- a/test/terrain_electric.c +++ b/test/terrain_electric.c @@ -34,7 +34,7 @@ SINGLE_BATTLE_TEST("Electric Terrain activates Electric Seed and Mimicry") MESSAGE("Using Electric Seed, the Defense of Wobbuffet rose!"); ABILITY_POPUP(opponent); MESSAGE("Foe Stunfisk's type changed to Electr!"); - } FINALLY { + } THEN { EXPECT_EQ(gBattleMons[B_POSITION_OPPONENT_LEFT].type1, TYPE_ELECTRIC); } } diff --git a/test/terrain_grassy.c b/test/terrain_grassy.c index 7668c49bde19..21d64f61e4d5 100644 --- a/test/terrain_grassy.c +++ b/test/terrain_grassy.c @@ -30,7 +30,7 @@ SINGLE_BATTLE_TEST("Grassy Terrain activates Grassy Seed and Mimicry") MESSAGE("Using Grassy Seed, the Defense of Wobbuffet rose!"); ABILITY_POPUP(opponent); MESSAGE("Foe Stunfisk's type changed to Grass!"); - } FINALLY { + } THEN { EXPECT_EQ(gBattleMons[B_POSITION_OPPONENT_LEFT].type1, TYPE_GRASS); } } diff --git a/test/terrain_misty.c b/test/terrain_misty.c index 4f8793d9d0ad..f60122075cf9 100644 --- a/test/terrain_misty.c +++ b/test/terrain_misty.c @@ -34,7 +34,7 @@ SINGLE_BATTLE_TEST("Misty Terrain activates Misty Seed and Mimicry") MESSAGE("Using Misty Seed, the Sp. Def of Wobbuffet rose!"); ABILITY_POPUP(opponent); MESSAGE("Foe Stunfisk's type changed to Fairy!"); - } FINALLY { + } THEN { EXPECT_EQ(gBattleMons[B_POSITION_OPPONENT_LEFT].type1, TYPE_FAIRY); } } diff --git a/test/terrain_psychic.c b/test/terrain_psychic.c index 3ecfa99e0639..f7e3a2af73a2 100644 --- a/test/terrain_psychic.c +++ b/test/terrain_psychic.c @@ -33,7 +33,7 @@ SINGLE_BATTLE_TEST("Psychic Terrain activates Psychic Seed and Mimicry") MESSAGE("Using Psychic Seed, the Sp. Def of Wobbuffet rose!"); ABILITY_POPUP(opponent); MESSAGE("Foe Stunfisk's type changed to Psychc!"); - } FINALLY { + } THEN { EXPECT_EQ(gBattleMons[B_POSITION_OPPONENT_LEFT].type1, TYPE_PSYCHIC); } } diff --git a/test/test_battle.h b/test/test_battle.h index 4c563c91d64b..205c699192b1 100644 --- a/test/test_battle.h +++ b/test/test_battle.h @@ -897,7 +897,9 @@ void QueueStatus(u32 sourceLine, struct BattlePokemon *battler, struct StatusEve /* Finally */ -#define FINALLY for (; gBattleTestRunnerState->runFinally; gBattleTestRunnerState->runFinally = FALSE) if ((gBattleTestRunnerState->runningFinally = TRUE)) +#define FINALLY for (ValidateFinally(__LINE__); gBattleTestRunnerState->runFinally; gBattleTestRunnerState->runFinally = FALSE) if ((gBattleTestRunnerState->runningFinally = TRUE)) + +void ValidateFinally(u32 sourceLine); /* Expect */ diff --git a/test/test_runner_battle.c b/test/test_runner_battle.c index 7740783b2cf0..2c26e39180be 100644 --- a/test/test_runner_battle.c +++ b/test/test_runner_battle.c @@ -1719,7 +1719,6 @@ void QueueMessage(u32 sourceLine, const u8 *pattern) }; } - void QueueStatus(u32 sourceLine, struct BattlePokemon *battler, struct StatusEventContext ctx) { s32 battlerId = battler - gBattleMons; @@ -1759,3 +1758,11 @@ void QueueStatus(u32 sourceLine, struct BattlePokemon *battler, struct StatusEve }}, }; } + +void ValidateFinally(u32 sourceLine) +{ + // Defer this error until after estimating the cost. + if (STATE->results == NULL) + return; + INVALID_IF(STATE->parametersCount == 0, "FINALLY without PARAMETRIZE"); +} From 9cd13cc52024fbdaca2e1515e47d354084371ae4 Mon Sep 17 00:00:00 2001 From: Martin Griffin Date: Thu, 20 Apr 2023 21:45:16 +0100 Subject: [PATCH 373/428] Fix USE_ITEM explicit targets --- include/battle.h | 1 + src/battle_controller_recorded_opponent.c | 2 +- src/battle_controller_recorded_player.c | 2 +- src/battle_script_commands.c | 6 +++--- src/party_menu.c | 2 +- test/test_runner_battle.c | 4 ++++ 6 files changed, 11 insertions(+), 6 deletions(-) diff --git a/include/battle.h b/include/battle.h index 466a9138d57e..00c7081fb8fe 100644 --- a/include/battle.h +++ b/include/battle.h @@ -658,6 +658,7 @@ struct BattleStruct u8 storedLunarDance:4; // Each battler as a bit. u16 supremeOverlordModifier[MAX_BATTLERS_COUNT]; u8 itemPartyIndex[MAX_BATTLERS_COUNT]; + u8 itemMoveIndex[MAX_BATTLERS_COUNT]; bool8 trainerSlideHalfHpMsgDone; u8 trainerSlideFirstCriticalHitMsgState:2; u8 trainerSlideFirstSuperEffectiveHitMsgState:2; diff --git a/src/battle_controller_recorded_opponent.c b/src/battle_controller_recorded_opponent.c index 75158407611b..d1c60343acd8 100644 --- a/src/battle_controller_recorded_opponent.c +++ b/src/battle_controller_recorded_opponent.c @@ -1443,7 +1443,7 @@ static void RecordedOpponentHandleChooseItem(void) u8 byte2 = RecordedBattle_GetBattlerAction(RECORDED_ITEM_ID, gActiveBattler); gBattleStruct->chosenItem[gActiveBattler] = (byte1 << 8) | byte2; gBattleStruct->itemPartyIndex[gActiveBattler] = RecordedBattle_GetBattlerAction(RECORDED_ITEM_TARGET, gActiveBattler); - gChosenMovePos = RecordedBattle_GetBattlerAction(RECORDED_ITEM_MOVE, gActiveBattler); + gBattleStruct->itemMoveIndex[gActiveBattler] = RecordedBattle_GetBattlerAction(RECORDED_ITEM_MOVE, gActiveBattler); BtlController_EmitOneReturnValue(BUFFER_B, gBattleStruct->chosenItem[gActiveBattler]); RecordedOpponentBufferExecCompleted(); } diff --git a/src/battle_controller_recorded_player.c b/src/battle_controller_recorded_player.c index 1a56220d7f7d..46f3de4f1251 100644 --- a/src/battle_controller_recorded_player.c +++ b/src/battle_controller_recorded_player.c @@ -1467,7 +1467,7 @@ static void RecordedPlayerHandleChooseItem(void) u8 byte2 = RecordedBattle_GetBattlerAction(RECORDED_ITEM_ID, gActiveBattler); gBattleStruct->chosenItem[gActiveBattler] = (byte1 << 8) | byte2; gBattleStruct->itemPartyIndex[gActiveBattler] = RecordedBattle_GetBattlerAction(RECORDED_ITEM_TARGET, gActiveBattler); - gChosenMovePos = RecordedBattle_GetBattlerAction(RECORDED_ITEM_MOVE, gActiveBattler); + gBattleStruct->itemMoveIndex[gActiveBattler] = RecordedBattle_GetBattlerAction(RECORDED_ITEM_MOVE, gActiveBattler); BtlController_EmitOneReturnValue(BUFFER_B, gBattleStruct->chosenItem[gActiveBattler]); RecordedPlayerBufferExecCompleted(); } diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 1187267b2aee..084288431180 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -16536,10 +16536,10 @@ void BS_ItemRestorePP(void) { // Check whether to apply to all moves. if (effect[4] & ITEM4_HEAL_PP_ONE) { - i = gChosenMovePos; - loopEnd = gChosenMovePos + 1; + i = gBattleStruct->itemMoveIndex[gBattlerAttacker]; + loopEnd = i + 1; } - else + else { i = 0; loopEnd = MAX_MON_MOVES; diff --git a/src/party_menu.c b/src/party_menu.c index 773495a4d571..aa37b1c69151 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -4944,7 +4944,7 @@ static void TryUseItemOnMove(u8 taskId) else { gBattleStruct->itemPartyIndex[gBattlerInMenuId] = GetPartyIdFromBattleSlot(gPartyMenu.slotId); - gChosenMovePos = ptr->data1; + gBattleStruct->itemMoveIndex[gBattlerInMenuId] = ptr->data1; gPartyMenuUseExitCallback = TRUE; RemoveBagItem(gSpecialVar_ItemId, 1); ScheduleBgCopyTilemapToVram(2); diff --git a/test/test_runner_battle.c b/test/test_runner_battle.c index 2c26e39180be..b7360e19c8f7 100644 --- a/test/test_runner_battle.c +++ b/test/test_runner_battle.c @@ -1564,6 +1564,10 @@ void UseItem(u32 sourceLine, struct BattlePokemon *battler, struct ItemContext c } INVALID_IF(i == MAX_MON_MOVES, "USE_ITEM on invalid move: %d", ctx.move); } + else + { + i = 0; + } PushBattlerAction(sourceLine, battlerId, RECORDED_ACTION_TYPE, B_ACTION_USE_ITEM); PushBattlerAction(sourceLine, battlerId, RECORDED_ITEM_ID, (ctx.itemId >> 8) & 0xFF); PushBattlerAction(sourceLine, battlerId, RECORDED_ITEM_ID, ctx.itemId & 0xFF); From 29fa6ba5743f2a1c636af0c7e3491f2f2e3bb81d Mon Sep 17 00:00:00 2001 From: Martin Griffin Date: Wed, 26 Apr 2023 11:31:19 +0100 Subject: [PATCH 374/428] INVALID if PASSES_RANDOMLY and results --- test/hold_effect_berserk_gene.c | 17 +++++------------ test/test_runner_battle.c | 2 ++ 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/test/hold_effect_berserk_gene.c b/test/hold_effect_berserk_gene.c index 361d14861158..103a0a1a3ef2 100644 --- a/test/hold_effect_berserk_gene.c +++ b/test/hold_effect_berserk_gene.c @@ -11,14 +11,11 @@ SINGLE_BATTLE_TEST("Berserk Gene sharply raises attack at the start of battle", u16 useItem; PARAMETRIZE { useItem = FALSE; } PARAMETRIZE { useItem = TRUE; } - if (useItem) PASSES_RANDOMLY(66, 100, RNG_CONFUSION); GIVEN { - PLAYER(SPECIES_WOBBUFFET) { if (useItem) Item(ITEM_BERSERK_GENE); }; + PLAYER(SPECIES_WOBBUFFET) { if (useItem) Item(ITEM_BERSERK_GENE); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { - MOVE(player, MOVE_TACKLE); - } + TURN { MOVE(player, MOVE_TACKLE, WITH_RNG(RNG_CONFUSION, FALSE)); } } SCENE { if (useItem) { @@ -38,17 +35,13 @@ SINGLE_BATTLE_TEST("Berserk Gene activates on switch in", s16 damage) u16 useItem; PARAMETRIZE { useItem = FALSE; } PARAMETRIZE { useItem = TRUE; } - if (useItem) PASSES_RANDOMLY(66, 100, RNG_CONFUSION); GIVEN { PLAYER(SPECIES_WYNAUT); - PLAYER(SPECIES_WOBBUFFET) { if (useItem) Item(ITEM_BERSERK_GENE); }; + PLAYER(SPECIES_WOBBUFFET) { if (useItem) Item(ITEM_BERSERK_GENE); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { - SWITCH(player, 1); - } TURN { - MOVE(player, MOVE_TACKLE); - } + TURN { SWITCH(player, 1); } + TURN { MOVE(player, MOVE_TACKLE, WITH_RNG(RNG_CONFUSION, FALSE)); } } SCENE { if (useItem) { diff --git a/test/test_runner_battle.c b/test/test_runner_battle.c index b7360e19c8f7..c1ea34e8cb7c 100644 --- a/test/test_runner_battle.c +++ b/test/test_runner_battle.c @@ -939,6 +939,8 @@ static bool32 BattleTest_HandleExitWithResult(void *data, enum TestResult result void Randomly(u32 sourceLine, u32 passes, u32 trials, struct RandomlyContext ctx) { + const struct BattleTest *test = gTestRunnerState.test->data; + INVALID_IF(test->resultsSize > 0, "PASSES_RANDOMLY is incompatible with results"); INVALID_IF(passes > trials, "%d passes specified, but only %d trials", passes, trials); STATE->rngTag = ctx.tag; STATE->runTrial = 0; From efab893c470eed58e41727852440f58c528b60bc Mon Sep 17 00:00:00 2001 From: Martin Griffin Date: Wed, 26 Apr 2023 11:38:52 +0100 Subject: [PATCH 375/428] INVALID if results without PARAMETRIZE --- test/ability_dry_skin.c | 5 ++++- test/ability_volt_absorb.c | 11 ++++++----- test/hold_effect_mirror_herb.c | 6 +++--- test/item_effect_increase_stat.c | 2 +- test/terrain_psychic.c | 10 +++++----- test/test_runner_battle.c | 2 ++ 6 files changed, 21 insertions(+), 15 deletions(-) diff --git a/test/ability_dry_skin.c b/test/ability_dry_skin.c index 6c28d0c428ec..855872d761c2 100644 --- a/test/ability_dry_skin.c +++ b/test/ability_dry_skin.c @@ -33,10 +33,13 @@ SINGLE_BATTLE_TEST("Dry Skin heals 1/8th Max HP in Rain") SINGLE_BATTLE_TEST("Dry Skin increases damage taken from Fire-type moves by 25%", s16 damage) { + u32 ability; + PARAMETRIZE { ability = ABILITY_EFFECT_SPORE; } + PARAMETRIZE { ability = ABILITY_DRY_SKIN; } GIVEN { ASSUME(gBattleMoves[MOVE_EMBER].type == TYPE_FIRE); PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_PARASECT) { Ability(ABILITY_DRY_SKIN); }; + OPPONENT(SPECIES_PARASECT) { Ability(ability); }; } WHEN { TURN {MOVE(player, MOVE_EMBER); } } SCENE { diff --git a/test/ability_volt_absorb.c b/test/ability_volt_absorb.c index 8a3c21ef6a28..6b9296268c38 100644 --- a/test/ability_volt_absorb.c +++ b/test/ability_volt_absorb.c @@ -63,8 +63,9 @@ SINGLE_BATTLE_TEST("Volt Absorb is only triggered once on multi strike moves") } } -DOUBLE_BATTLE_TEST("Volt Absorb does not stop Electric Typed Explosion from damaging other pokemon", s16 damage1, s16 damage2) // Fixed issue #1961 +DOUBLE_BATTLE_TEST("Volt Absorb does not stop Electric Typed Explosion from damaging other pokemon") // Fixed issue #1961 { + s16 damage1, damage2; GIVEN { ASSUME(gBattleMoves[MOVE_EXPLOSION].effect == EFFECT_EXPLOSION); ASSUME(gBattleMoves[MOVE_EXPLOSION].type == TYPE_NORMAL); @@ -78,11 +79,11 @@ DOUBLE_BATTLE_TEST("Volt Absorb does not stop Electric Typed Explosion from dama ABILITY_POPUP(playerLeft, ABILITY_VOLT_ABSORB); HP_BAR(playerLeft, hp: TEST_MAX_HP / 4 + 1); MESSAGE("Jolteon restored HP using its Volt Absorb!"); - HP_BAR(playerRight, captureDamage: &results->damage1); - HP_BAR(opponentRight, captureDamage: &results->damage2); + HP_BAR(playerRight, captureDamage: &damage1); + HP_BAR(opponentRight, captureDamage: &damage2); } THEN { - EXPECT_NE(results[0].damage1, 0); - EXPECT_NE(results[0].damage2, 0); + EXPECT_NE(damage1, 0); + EXPECT_NE(damage2, 0); } } diff --git a/test/hold_effect_mirror_herb.c b/test/hold_effect_mirror_herb.c index fc0a6de95720..22f564b85007 100644 --- a/test/hold_effect_mirror_herb.c +++ b/test/hold_effect_mirror_herb.c @@ -9,8 +9,8 @@ ASSUMPTIONS SINGLE_BATTLE_TEST("Mirror Herb copies all of foe's stat changes in a turn", s16 damage) { u32 item; - PARAMETRIZE{ item = ITEM_NONE; } - PARAMETRIZE{ item = ITEM_MIRROR_HERB; } + PARAMETRIZE { item = ITEM_NONE; } + PARAMETRIZE { item = ITEM_MIRROR_HERB; } GIVEN { PLAYER(SPECIES_WOBBUFFET) { Speed(4); } OPPONENT(SPECIES_WOBBUFFET) { Speed(5); Item(item); } @@ -34,7 +34,7 @@ SINGLE_BATTLE_TEST("Mirror Herb copies all of foe's stat changes in a turn", s16 } } -SINGLE_BATTLE_TEST("Mirror Herb copies all of of Stuff Cheeks", s16 damage) +SINGLE_BATTLE_TEST("Mirror Herb copies all of of Stuff Cheeks") { GIVEN { ASSUME(gItems[ITEM_LIECHI_BERRY].holdEffect == HOLD_EFFECT_ATTACK_UP); diff --git a/test/item_effect_increase_stat.c b/test/item_effect_increase_stat.c index bbaf20e2fabf..310932040c6b 100644 --- a/test/item_effect_increase_stat.c +++ b/test/item_effect_increase_stat.c @@ -126,7 +126,7 @@ SINGLE_BATTLE_TEST("X Speed sharply raises battler's Speed stat", s16 damage) } } -SINGLE_BATTLE_TEST("X Accuracy sharply raises battler's Accuracy stat", s16 damage) +SINGLE_BATTLE_TEST("X Accuracy sharply raises battler's Accuracy stat") { ASSUME(gBattleMoves[MOVE_SING].accuracy == 55); diff --git a/test/terrain_psychic.c b/test/terrain_psychic.c index f7e3a2af73a2..f9f95a47dbbb 100644 --- a/test/terrain_psychic.c +++ b/test/terrain_psychic.c @@ -61,7 +61,7 @@ SINGLE_BATTLE_TEST("Psychic Terrain increases power of Psychic-type moves by 30/ } } -SINGLE_BATTLE_TEST("Psychic Terrain doesn't block priority moves that target the user", s16 damage) +SINGLE_BATTLE_TEST("Psychic Terrain doesn't block priority moves that target the user") { GIVEN { PLAYER(SPECIES_SABLEYE) { Ability(ABILITY_PRANKSTER); HP(1); } @@ -76,7 +76,7 @@ SINGLE_BATTLE_TEST("Psychic Terrain doesn't block priority moves that target the } } -SINGLE_BATTLE_TEST("Psychic Terrain doesn't block priority moves that target all battlers", s16 damage) +SINGLE_BATTLE_TEST("Psychic Terrain doesn't block priority moves that target all battlers") { KNOWN_FAILING; GIVEN { @@ -91,7 +91,7 @@ SINGLE_BATTLE_TEST("Psychic Terrain doesn't block priority moves that target all } } -SINGLE_BATTLE_TEST("Psychic Terrain doesn't block priority moves that target all opponents", s16 damage) +SINGLE_BATTLE_TEST("Psychic Terrain doesn't block priority moves that target all opponents") { KNOWN_FAILING; GIVEN { @@ -106,7 +106,7 @@ SINGLE_BATTLE_TEST("Psychic Terrain doesn't block priority moves that target all } } -DOUBLE_BATTLE_TEST("Psychic Terrain doesn't block priority moves that target allies", s16 damage) +DOUBLE_BATTLE_TEST("Psychic Terrain doesn't block priority moves that target allies") { GIVEN { PLAYER(SPECIES_SABLEYE) { Ability(ABILITY_PRANKSTER); } @@ -122,7 +122,7 @@ DOUBLE_BATTLE_TEST("Psychic Terrain doesn't block priority moves that target all } } -SINGLE_BATTLE_TEST("Psychic Terrain doesn't block priority field moves", s16 damage) +SINGLE_BATTLE_TEST("Psychic Terrain doesn't block priority field moves") { KNOWN_FAILING; GIVEN { diff --git a/test/test_runner_battle.c b/test/test_runner_battle.c index c1ea34e8cb7c..cfe5db9d6eb0 100644 --- a/test/test_runner_battle.c +++ b/test/test_runner_battle.c @@ -134,6 +134,8 @@ static void BattleTest_SetUp(void *data) Test_ExitWithResult(TEST_RESULT_ERROR, "OOM: STATE = AllocZerod(%d)", sizeof(*STATE)); InvokeTestFunction(test); STATE->parameters = STATE->parametersCount; + if (STATE->parametersCount == 0 && test->resultsSize > 0) + Test_ExitWithResult(TEST_RESULT_INVALID, "results without PARAMETRIZE"); STATE->results = AllocZeroed(test->resultsSize * STATE->parameters); if (!STATE->results) Test_ExitWithResult(TEST_RESULT_ERROR, "OOM: STATE->results = AllocZerod(%d)", sizeof(test->resultsSize * STATE->parameters)); From a2ca2aa7d90c091aea4d72df81237fa75843e212 Mon Sep 17 00:00:00 2001 From: Martin Griffin Date: Thu, 27 Apr 2023 09:25:04 +0100 Subject: [PATCH 376/428] Report errors in estimateCost --- test/test_runner.c | 88 ++++++++++++++++++++++++++++------------------ 1 file changed, 53 insertions(+), 35 deletions(-) diff --git a/test/test_runner.c b/test/test_runner.c index 64cb20e26914..bfd7b47a56e9 100644 --- a/test/test_runner.c +++ b/test/test_runner.c @@ -42,7 +42,14 @@ static bool32 PrefixMatch(const char *pattern, const char *string) } } -enum { STATE_INIT, STATE_NEXT_TEST, STATE_REPORT_RESULT, STATE_EXIT }; +enum +{ + STATE_INIT, + STATE_NEXT_TEST, + STATE_RUN_TEST, + STATE_REPORT_RESULT, + STATE_EXIT, +}; void CB2_TestRunner(void) { @@ -81,6 +88,26 @@ void CB2_TestRunner(void) return; } + MgbaPrintf_(":N%s", gTestRunnerState.test->name); + gTestRunnerState.result = TEST_RESULT_PASS; + gTestRunnerState.expectedResult = TEST_RESULT_PASS; + gTestRunnerState.expectLeaks = FALSE; + if (gTestRunnerHeadless) + gTestRunnerState.timeoutSeconds = TIMEOUT_SECONDS; + else + gTestRunnerState.timeoutSeconds = UINT_MAX; + InitHeap(gHeap, HEAP_SIZE); + EnableInterrupts(INTR_FLAG_TIMER2); + REG_TM2CNT_L = UINT16_MAX - (274 * 60); // Approx. 1 second. + REG_TM2CNT_H = TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_1024CLK; + + // NOTE: Assumes that the compiler interns __FILE__. + if (gTestRunnerState.skipFilename == gTestRunnerState.test->filename) + { + gTestRunnerState.result = TEST_RESULT_ASSUMPTION_FAIL; + return; + } + // Greedily assign tests to processes based on estimated cost. // TODO: Make processCosts a min heap. if (gTestRunnerState.test->runner != &gAssumptionsRunner) @@ -98,40 +125,26 @@ void CB2_TestRunner(void) } } + if (minCostProcess == gTestRunnerI) + gTestRunnerState.state = STATE_RUN_TEST; + else + gTestRunnerState.state = STATE_NEXT_TEST; + + // XXX: If estimateCost exits only on some processes then + // processCosts will be inconsistent. if (gTestRunnerState.test->runner->estimateCost) gTestRunnerState.processCosts[minCostProcess] += gTestRunnerState.test->runner->estimateCost(gTestRunnerState.test->data); else gTestRunnerState.processCosts[minCostProcess] += 1; - - if (minCostProcess != gTestRunnerI) - return; } - MgbaPrintf_(":N%s", gTestRunnerState.test->name); - gTestRunnerState.state = STATE_REPORT_RESULT; - gTestRunnerState.result = TEST_RESULT_PASS; - gTestRunnerState.expectedResult = TEST_RESULT_PASS; - gTestRunnerState.expectLeaks = FALSE; - if (gTestRunnerHeadless) - gTestRunnerState.timeoutSeconds = TIMEOUT_SECONDS; - else - gTestRunnerState.timeoutSeconds = UINT_MAX; - InitHeap(gHeap, HEAP_SIZE); - EnableInterrupts(INTR_FLAG_TIMER2); - REG_TM2CNT_L = UINT16_MAX - (274 * 60); // Approx. 1 second. - REG_TM2CNT_H = TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_1024CLK; + break; - // NOTE: Assumes that the compiler interns __FILE__. - if (gTestRunnerState.skipFilename == gTestRunnerState.test->filename) - { - gTestRunnerState.result = TEST_RESULT_ASSUMPTION_FAIL; - } - else - { - if (gTestRunnerState.test->runner->setUp) - gTestRunnerState.test->runner->setUp(gTestRunnerState.test->data); - gTestRunnerState.test->runner->run(gTestRunnerState.test->data); - } + case STATE_RUN_TEST: + gTestRunnerState.state = STATE_REPORT_RESULT; + if (gTestRunnerState.test->runner->setUp) + gTestRunnerState.test->runner->setUp(gTestRunnerState.test->data); + gTestRunnerState.test->runner->run(gTestRunnerState.test->data); break; case STATE_REPORT_RESULT: @@ -345,6 +358,8 @@ static void Intr_Timer2(void) } else { + if (gTestRunnerState.state == STATE_RUN_TEST) + gTestRunnerState.state = STATE_REPORT_RESULT; gTestRunnerState.result = TEST_RESULT_TIMEOUT; ReinitCallbacks(); IRQ_LR = ((uintptr_t)JumpToAgbMainLoop & ~1) + 4; @@ -354,16 +369,19 @@ static void Intr_Timer2(void) void Test_ExitWithResult(enum TestResult result, const char *fmt, ...) { - bool32 handled = FALSE; gTestRunnerState.result = result; ReinitCallbacks(); - if (gTestRunnerState.test->runner->handleExitWithResult) - handled = gTestRunnerState.test->runner->handleExitWithResult(gTestRunnerState.test->data, result); - if (!handled && gTestRunnerState.result != gTestRunnerState.expectedResult) + if (gTestRunnerState.state == STATE_REPORT_RESULT + && gTestRunnerState.test->runner->handleExitWithResult) { - va_list va; - va_start(va, fmt); - MgbaVPrintf_(fmt, va); + if (!gTestRunnerState.test->runner->handleExitWithResult(gTestRunnerState.test->data, result) + && gTestRunnerState.result != gTestRunnerState.expectedResult) + { + va_list va; + va_start(va, fmt); + MgbaVPrintf_(fmt, va); + va_end(va); + } } JumpToAgbMainLoop(); } From e52e8ce7e15f96f753f37af1f44e62ac1c90c52a Mon Sep 17 00:00:00 2001 From: Martin Griffin Date: Sun, 7 May 2023 07:50:29 +0100 Subject: [PATCH 377/428] Cleanup Compound Eyes tests --- test/ability_compound_eyes.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/test/ability_compound_eyes.c b/test/ability_compound_eyes.c index d90604d5c31f..6bdb15fa784d 100644 --- a/test/ability_compound_eyes.c +++ b/test/ability_compound_eyes.c @@ -6,7 +6,7 @@ SINGLE_BATTLE_TEST("Compound Eyes raises accuracy") PASSES_RANDOMLY(91, 100, RNG_ACCURACY); GIVEN { ASSUME(gBattleMoves[MOVE_THUNDER].accuracy == 70); - PLAYER(SPECIES_BUTTERFREE) { Ability(ABILITY_COMPOUND_EYES); }; + PLAYER(SPECIES_BUTTERFREE) { Ability(ABILITY_COMPOUND_EYES); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_THUNDER); } @@ -16,16 +16,13 @@ SINGLE_BATTLE_TEST("Compound Eyes raises accuracy") } } -// This fails even though the ability works correctly. The failure is due to -// a statistical anomaly in the test system where FISSURE hits 3 times more often -// than we expect. SINGLE_BATTLE_TEST("Compound Eyes does not affect OHKO moves") { PASSES_RANDOMLY(30, 100, RNG_ACCURACY); GIVEN { ASSUME(gBattleMoves[MOVE_FISSURE].accuracy == 30); ASSUME(gBattleMoves[MOVE_FISSURE].effect == EFFECT_OHKO); - PLAYER(SPECIES_BUTTERFREE) { Ability(ABILITY_COMPOUND_EYES); }; + PLAYER(SPECIES_BUTTERFREE) { Ability(ABILITY_COMPOUND_EYES); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_FISSURE); } From ebc8edd5a65c92b1211aacb3ac4efdbeffd7d207 Mon Sep 17 00:00:00 2001 From: Ultimate Bob Date: Tue, 9 May 2023 00:58:38 +1000 Subject: [PATCH 378/428] Fix shiny animation not respecting illusion mon. --- src/battle_anim_throw.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/battle_anim_throw.c b/src/battle_anim_throw.c index 3fc2000e4a4d..4a3cf7cf276a 100755 --- a/src/battle_anim_throw.c +++ b/src/battle_anim_throw.c @@ -2484,9 +2484,14 @@ void TryShinyAnimation(u8 battler, struct Pokemon *mon) u32 otId, personality; u32 shinyValue; u8 taskCirc, taskDgnl; + struct Pokemon* illusionMon; isShiny = FALSE; gBattleSpritesDataPtr->healthBoxesData[battler].triedShinyMonAnim = TRUE; + illusionMon = GetIllusionMonPtr(battler); + if (illusionMon != NULL) + mon = illusionMon; + otId = GetMonData(mon, MON_DATA_OT_ID); personality = GetMonData(mon, MON_DATA_PERSONALITY); From f985eefaa139017c2d67b1ea1591bd3d36bb6af4 Mon Sep 17 00:00:00 2001 From: Ultimate Bob Date: Tue, 9 May 2023 01:40:28 +1000 Subject: [PATCH 379/428] Show Imposter abilty in popup instead of opponent's ability. --- data/battle_scripts_1.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index fdc7c8a3fd33..b62eb465eb73 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -9373,8 +9373,8 @@ BattleScript_FriskActivates:: end3 BattleScript_ImposterActivates:: - transformdataexecution call BattleScript_AbilityPopUp + transformdataexecution playmoveanimation BS_ATTACKER, MOVE_TRANSFORM waitanimation printstring STRINGID_IMPOSTERTRANSFORM From 64c2eb39c0f65632ed06b1b19bbf2fca4dc7b089 Mon Sep 17 00:00:00 2001 From: Ultimate Bob Date: Tue, 9 May 2023 02:33:12 +1000 Subject: [PATCH 380/428] Ignore Illusion if the pokemon is the last slot in the party. --- src/battle_util.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/battle_util.c b/src/battle_util.c index cd65d580937d..dd6e2bc06e09 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -10398,12 +10398,19 @@ bool32 SetIllusionMon(struct Pokemon *mon, u32 battlerId) { struct Pokemon *party, *partnerMon; s32 i, id; + u8 side, partyCount; gBattleStruct->illusion[battlerId].set = 1; if (GetMonAbility(mon) != ABILITY_ILLUSION) return FALSE; party = GetBattlerParty(battlerId); + side = GetBattlerSide(battlerId); + partyCount = side == B_SIDE_PLAYER ? gPlayerPartyCount : gEnemyPartyCount; + + // If this pokemon is last in the party, ignore Illusion. + if (&party[partyCount - 1] == mon) + return FALSE; if (IsBattlerAlive(BATTLE_PARTNER(battlerId))) partnerMon = &party[gBattlerPartyIndexes[BATTLE_PARTNER(battlerId)]]; From 8b37b4292a17c67a4711b90aa0e83d63acf26af6 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Tue, 9 May 2023 22:04:26 -0400 Subject: [PATCH 381/428] Document DrawFootprint --- include/gba/defines.h | 17 +++++++++++++---- src/pokedex.c | 40 +++++++++++++++++++++++++++------------- 2 files changed, 40 insertions(+), 17 deletions(-) diff --git a/include/gba/defines.h b/include/gba/defines.h index 82caf56e6840..f2ea0899d9d6 100644 --- a/include/gba/defines.h +++ b/include/gba/defines.h @@ -64,14 +64,23 @@ #define ROM_HEADER_SIZE 0xC0 +// Dimensions of a tile in pixels +#define TILE_WIDTH 8 +#define TILE_HEIGHT 8 + +// Dimensions of the GBA screen in pixels #define DISPLAY_WIDTH 240 #define DISPLAY_HEIGHT 160 -#define DISPLAY_TILE_WIDTH (DISPLAY_WIDTH / 8) -#define DISPLAY_TILE_HEIGHT (DISPLAY_HEIGHT / 8) +// Dimensions of the GBA screen in tiles +#define DISPLAY_TILE_WIDTH (DISPLAY_WIDTH / TILE_WIDTH) +#define DISPLAY_TILE_HEIGHT (DISPLAY_HEIGHT / TILE_HEIGHT) -#define TILE_SIZE_4BPP 32 -#define TILE_SIZE_8BPP 64 +// Size of different tile formats in bytes +#define TILE_SIZE(bpp)((bpp) * TILE_WIDTH * TILE_HEIGHT / 8) +#define TILE_SIZE_1BPP TILE_SIZE(1) // 8 +#define TILE_SIZE_4BPP TILE_SIZE(4) // 32 +#define TILE_SIZE_8BPP TILE_SIZE(8) // 64 #define TILE_OFFSET_4BPP(n) ((n) * TILE_SIZE_4BPP) #define TILE_OFFSET_8BPP(n) ((n) * TILE_SIZE_8BPP) diff --git a/src/pokedex.c b/src/pokedex.c index 88558d6f2cfa..af96b88771ab 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -93,6 +93,13 @@ enum NAME_YZ, }; +enum { + WIN_INFO, + WIN_FOOTPRINT, + WIN_CRY_WAVE, + WIN_VU_METER, +}; + // For scrolling search parameter #define MAX_SEARCH_PARAM_ON_SCREEN 6 #define MAX_SEARCH_PARAM_CURSOR_POS (MAX_SEARCH_PARAM_ON_SCREEN - 1) @@ -888,11 +895,6 @@ static const struct BgTemplate sInfoScreen_BgTemplate[] = } }; -#define WIN_INFO 0 -#define WIN_FOOTPRINT 1 -#define WIN_CRY_WAVE 2 -#define WIN_VU_METER 3 - static const struct WindowTemplate sInfoScreen_WindowTemplates[] = { [WIN_INFO] = @@ -4570,26 +4572,38 @@ static void PrintDecimalNum(u8 windowId, u16 num, u8 left, u8 top) PrintInfoSubMenuText(windowId, str, left, top); } +// The footprints are drawn on WIN_FOOTPRINT, which uses BG palette 15 (loaded with graphics/text_window/message_box.gbapal) +// The footprint pixels are stored as 1BPP, and set to the below color index in this palette when converted to 4BPP. +#define FOOTPRINT_COLOR_IDX 2 + +#define NUM_FOOTPRINT_TILES 4 + static void DrawFootprint(u8 windowId, u16 dexNum) { - u8 footprint[32 * 4]; + u8 footprint4bpp[TILE_SIZE_4BPP * NUM_FOOTPRINT_TILES]; const u8 * footprintGfx = gMonFootprintTable[NationalPokedexNumToSpecies(dexNum)]; u16 tileIdx = 0; u16 i, j; - for (i = 0; i < 32; i++) + for (i = 0; i < TILE_SIZE_1BPP * NUM_FOOTPRINT_TILES; i++) { - u8 tile = footprintGfx[i]; + u8 footprint1bpp = footprintGfx[i]; + + // Convert the 8 pixels in the above 1BPP byte to 4BPP. + // Each iteration creates one 4BPP byte (2 pixels), + // so we need 4 iterations to do all 8 pixels. for (j = 0; j < 4; j++) { - u8 value = ((tile >> (2 * j)) & 1 ? 2 : 0); - if (tile & (2 << (2 * j))) - value |= 0x20; - footprint[tileIdx] = value; + u8 tile = 0; + if (footprint1bpp & (1 << (2 * j))) + tile |= FOOTPRINT_COLOR_IDX; // Set pixel + if (footprint1bpp & (2 << (2 * j))) + tile |= FOOTPRINT_COLOR_IDX << 4; // Set pixel + footprint4bpp[tileIdx] = tile; tileIdx++; } } - CopyToWindowPixelBuffer(windowId, footprint, sizeof(footprint), 0); + CopyToWindowPixelBuffer(windowId, footprint4bpp, sizeof(footprint4bpp), 0); } // Unused Ruby/Sapphire function. From 41ac28b2107e409a7ba39079a8435cb02a21eda6 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Tue, 9 May 2023 22:43:48 -0400 Subject: [PATCH 382/428] Index pokemon footprint pngs --- graphics/pokemon/abra/footprint.png | Bin 94 -> 108 bytes graphics/pokemon/absol/footprint.png | Bin 102 -> 119 bytes graphics/pokemon/aerodactyl/footprint.png | Bin 92 -> 108 bytes graphics/pokemon/aggron/footprint.png | Bin 102 -> 119 bytes graphics/pokemon/aipom/footprint.png | Bin 86 -> 102 bytes graphics/pokemon/alakazam/footprint.png | Bin 95 -> 112 bytes graphics/pokemon/altaria/footprint.png | Bin 100 -> 118 bytes graphics/pokemon/ampharos/footprint.png | Bin 90 -> 106 bytes graphics/pokemon/anorith/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/arbok/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/arcanine/footprint.png | Bin 99 -> 114 bytes graphics/pokemon/ariados/footprint.png | Bin 86 -> 100 bytes graphics/pokemon/armaldo/footprint.png | Bin 95 -> 112 bytes graphics/pokemon/aron/footprint.png | Bin 90 -> 103 bytes graphics/pokemon/articuno/footprint.png | Bin 106 -> 122 bytes graphics/pokemon/azumarill/footprint.png | Bin 88 -> 101 bytes graphics/pokemon/azurill/footprint.png | Bin 84 -> 99 bytes graphics/pokemon/bagon/footprint.png | Bin 91 -> 106 bytes graphics/pokemon/baltoy/footprint.png | Bin 76 -> 92 bytes graphics/pokemon/banette/footprint.png | Bin 85 -> 98 bytes graphics/pokemon/barboach/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/bayleef/footprint.png | Bin 87 -> 103 bytes graphics/pokemon/beautifly/footprint.png | Bin 89 -> 103 bytes graphics/pokemon/beedrill/footprint.png | Bin 84 -> 99 bytes graphics/pokemon/beldum/footprint.png | Bin 82 -> 96 bytes graphics/pokemon/bellossom/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/bellsprout/footprint.png | Bin 109 -> 122 bytes graphics/pokemon/blastoise/footprint.png | Bin 98 -> 115 bytes graphics/pokemon/blaziken/footprint.png | Bin 116 -> 132 bytes graphics/pokemon/blissey/footprint.png | Bin 96 -> 111 bytes graphics/pokemon/breloom/footprint.png | Bin 94 -> 110 bytes graphics/pokemon/bulbasaur/footprint.png | Bin 88 -> 102 bytes graphics/pokemon/butterfree/footprint.png | Bin 87 -> 102 bytes graphics/pokemon/cacnea/footprint.png | Bin 81 -> 95 bytes graphics/pokemon/cacturne/footprint.png | Bin 87 -> 102 bytes graphics/pokemon/camerupt/footprint.png | Bin 109 -> 125 bytes graphics/pokemon/carvanha/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/cascoon/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/castform/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/caterpie/footprint.png | Bin 81 -> 96 bytes graphics/pokemon/celebi/footprint.png | Bin 88 -> 101 bytes graphics/pokemon/chansey/footprint.png | Bin 88 -> 103 bytes graphics/pokemon/charizard/footprint.png | Bin 95 -> 110 bytes graphics/pokemon/charmander/footprint.png | Bin 90 -> 106 bytes graphics/pokemon/charmeleon/footprint.png | Bin 95 -> 109 bytes graphics/pokemon/chikorita/footprint.png | Bin 81 -> 97 bytes graphics/pokemon/chimecho/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/chinchou/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/clamperl/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/claydol/footprint.png | Bin 80 -> 95 bytes graphics/pokemon/clefable/footprint.png | Bin 101 -> 114 bytes graphics/pokemon/clefairy/footprint.png | Bin 85 -> 100 bytes graphics/pokemon/cleffa/footprint.png | Bin 79 -> 95 bytes graphics/pokemon/cloyster/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/combusken/footprint.png | Bin 109 -> 123 bytes graphics/pokemon/corphish/footprint.png | Bin 102 -> 116 bytes graphics/pokemon/corsola/footprint.png | Bin 81 -> 96 bytes graphics/pokemon/cradily/footprint.png | Bin 98 -> 116 bytes graphics/pokemon/crawdaunt/footprint.png | Bin 104 -> 119 bytes graphics/pokemon/crobat/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/croconaw/footprint.png | Bin 85 -> 101 bytes graphics/pokemon/cubone/footprint.png | Bin 87 -> 102 bytes graphics/pokemon/cyndaquil/footprint.png | Bin 84 -> 99 bytes graphics/pokemon/delcatty/footprint.png | Bin 107 -> 121 bytes graphics/pokemon/delibird/footprint.png | Bin 90 -> 105 bytes graphics/pokemon/deoxys/footprint.png | Bin 84 -> 97 bytes graphics/pokemon/dewgong/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/diglett/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/ditto/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/dodrio/footprint.png | Bin 110 -> 125 bytes graphics/pokemon/doduo/footprint.png | Bin 101 -> 114 bytes graphics/pokemon/donphan/footprint.png | Bin 96 -> 113 bytes graphics/pokemon/dragonair/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/dragonite/footprint.png | Bin 92 -> 108 bytes graphics/pokemon/dratini/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/drowzee/footprint.png | Bin 87 -> 103 bytes graphics/pokemon/dugtrio/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/dunsparce/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/dusclops/footprint.png | Bin 106 -> 124 bytes graphics/pokemon/duskull/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/dustox/footprint.png | Bin 92 -> 107 bytes graphics/pokemon/eevee/footprint.png | Bin 96 -> 111 bytes graphics/pokemon/ekans/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/electabuzz/footprint.png | Bin 93 -> 109 bytes graphics/pokemon/electrike/footprint.png | Bin 101 -> 115 bytes graphics/pokemon/electrode/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/elekid/footprint.png | Bin 89 -> 102 bytes graphics/pokemon/entei/footprint.png | Bin 101 -> 117 bytes graphics/pokemon/espeon/footprint.png | Bin 85 -> 100 bytes graphics/pokemon/exeggcute/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/exeggutor/footprint.png | Bin 92 -> 108 bytes graphics/pokemon/exploud/footprint.png | Bin 108 -> 125 bytes graphics/pokemon/farfetchd/footprint.png | Bin 99 -> 115 bytes graphics/pokemon/fearow/footprint.png | Bin 102 -> 118 bytes graphics/pokemon/feebas/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/feraligatr/footprint.png | Bin 94 -> 111 bytes graphics/pokemon/flaaffy/footprint.png | Bin 81 -> 97 bytes graphics/pokemon/flareon/footprint.png | Bin 103 -> 118 bytes graphics/pokemon/flygon/footprint.png | Bin 92 -> 110 bytes graphics/pokemon/forretress/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/furret/footprint.png | Bin 87 -> 100 bytes graphics/pokemon/gardevoir/footprint.png | Bin 86 -> 99 bytes graphics/pokemon/gastly/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/gengar/footprint.png | Bin 91 -> 106 bytes graphics/pokemon/geodude/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/girafarig/footprint.png | Bin 83 -> 97 bytes graphics/pokemon/glalie/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/gligar/footprint.png | Bin 92 -> 105 bytes graphics/pokemon/gloom/footprint.png | Bin 90 -> 104 bytes graphics/pokemon/golbat/footprint.png | Bin 94 -> 109 bytes graphics/pokemon/goldeen/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/golduck/footprint.png | Bin 98 -> 113 bytes graphics/pokemon/golem/footprint.png | Bin 97 -> 114 bytes graphics/pokemon/gorebyss/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/granbull/footprint.png | Bin 93 -> 109 bytes graphics/pokemon/graveler/footprint.png | Bin 91 -> 107 bytes graphics/pokemon/grimer/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/groudon/footprint.png | Bin 103 -> 121 bytes graphics/pokemon/grovyle/footprint.png | Bin 100 -> 114 bytes graphics/pokemon/growlithe/footprint.png | Bin 91 -> 104 bytes graphics/pokemon/grumpig/footprint.png | Bin 96 -> 113 bytes graphics/pokemon/gulpin/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/gyarados/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/hariyama/footprint.png | Bin 94 -> 113 bytes graphics/pokemon/haunter/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/heracross/footprint.png | Bin 92 -> 106 bytes graphics/pokemon/hitmonchan/footprint.png | Bin 90 -> 106 bytes graphics/pokemon/hitmonlee/footprint.png | Bin 104 -> 121 bytes graphics/pokemon/hitmontop/footprint.png | Bin 103 -> 119 bytes graphics/pokemon/ho_oh/footprint.png | Bin 95 -> 110 bytes graphics/pokemon/hoothoot/footprint.png | Bin 102 -> 115 bytes graphics/pokemon/hoppip/footprint.png | Bin 84 -> 99 bytes graphics/pokemon/horsea/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/houndoom/footprint.png | Bin 103 -> 118 bytes graphics/pokemon/houndour/footprint.png | Bin 91 -> 104 bytes graphics/pokemon/huntail/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/hypno/footprint.png | Bin 95 -> 111 bytes graphics/pokemon/igglybuff/footprint.png | Bin 85 -> 100 bytes graphics/pokemon/illumise/footprint.png | Bin 84 -> 100 bytes graphics/pokemon/ivysaur/footprint.png | Bin 96 -> 112 bytes graphics/pokemon/jigglypuff/footprint.png | Bin 85 -> 101 bytes graphics/pokemon/jirachi/footprint.png | Bin 83 -> 98 bytes graphics/pokemon/jolteon/footprint.png | Bin 91 -> 107 bytes graphics/pokemon/jumpluff/footprint.png | Bin 84 -> 100 bytes graphics/pokemon/jynx/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/kabuto/footprint.png | Bin 76 -> 92 bytes graphics/pokemon/kabutops/footprint.png | Bin 94 -> 109 bytes graphics/pokemon/kadabra/footprint.png | Bin 100 -> 117 bytes graphics/pokemon/kakuna/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/kangaskhan/footprint.png | Bin 96 -> 111 bytes graphics/pokemon/kecleon/footprint.png | Bin 96 -> 108 bytes graphics/pokemon/kingdra/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/kingler/footprint.png | Bin 93 -> 106 bytes graphics/pokemon/kirlia/footprint.png | Bin 81 -> 96 bytes graphics/pokemon/koffing/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/krabby/footprint.png | Bin 86 -> 101 bytes graphics/pokemon/kyogre/footprint.png | Bin 104 -> 121 bytes graphics/pokemon/lairon/footprint.png | Bin 101 -> 116 bytes graphics/pokemon/lanturn/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/lapras/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/larvitar/footprint.png | Bin 82 -> 96 bytes graphics/pokemon/latias/footprint.png | Bin 104 -> 119 bytes graphics/pokemon/latios/footprint.png | Bin 105 -> 121 bytes graphics/pokemon/ledian/footprint.png | Bin 94 -> 109 bytes graphics/pokemon/ledyba/footprint.png | Bin 99 -> 112 bytes graphics/pokemon/lickitung/footprint.png | Bin 102 -> 117 bytes graphics/pokemon/lileep/footprint.png | Bin 99 -> 112 bytes graphics/pokemon/linoone/footprint.png | Bin 90 -> 107 bytes graphics/pokemon/lombre/footprint.png | Bin 110 -> 124 bytes graphics/pokemon/lotad/footprint.png | Bin 88 -> 103 bytes graphics/pokemon/loudred/footprint.png | Bin 105 -> 120 bytes graphics/pokemon/ludicolo/footprint.png | Bin 94 -> 111 bytes graphics/pokemon/lugia/footprint.png | Bin 95 -> 111 bytes graphics/pokemon/lunatone/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/luvdisc/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/machamp/footprint.png | Bin 98 -> 115 bytes graphics/pokemon/machoke/footprint.png | Bin 97 -> 112 bytes graphics/pokemon/machop/footprint.png | Bin 90 -> 106 bytes graphics/pokemon/magby/footprint.png | Bin 88 -> 102 bytes graphics/pokemon/magcargo/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/magikarp/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/magmar/footprint.png | Bin 94 -> 109 bytes graphics/pokemon/magnemite/footprint.png | Bin 83 -> 98 bytes graphics/pokemon/magneton/footprint.png | Bin 90 -> 104 bytes graphics/pokemon/makuhita/footprint.png | Bin 97 -> 112 bytes graphics/pokemon/manectric/footprint.png | Bin 100 -> 117 bytes graphics/pokemon/mankey/footprint.png | Bin 110 -> 125 bytes graphics/pokemon/mantine/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/mareep/footprint.png | Bin 84 -> 100 bytes graphics/pokemon/marill/footprint.png | Bin 85 -> 100 bytes graphics/pokemon/marowak/footprint.png | Bin 86 -> 102 bytes graphics/pokemon/marshtomp/footprint.png | Bin 90 -> 106 bytes graphics/pokemon/masquerain/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/mawile/footprint.png | Bin 102 -> 116 bytes graphics/pokemon/medicham/footprint.png | Bin 92 -> 107 bytes graphics/pokemon/meditite/footprint.png | Bin 89 -> 104 bytes graphics/pokemon/meganium/footprint.png | Bin 97 -> 111 bytes graphics/pokemon/meowth/footprint.png | Bin 94 -> 109 bytes graphics/pokemon/metagross/footprint.png | Bin 91 -> 108 bytes graphics/pokemon/metang/footprint.png | Bin 92 -> 106 bytes graphics/pokemon/metapod/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/mew/footprint.png | Bin 88 -> 103 bytes graphics/pokemon/mewtwo/footprint.png | Bin 100 -> 117 bytes graphics/pokemon/mightyena/footprint.png | Bin 113 -> 129 bytes graphics/pokemon/milotic/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/miltank/footprint.png | Bin 86 -> 100 bytes graphics/pokemon/minun/footprint.png | Bin 86 -> 101 bytes graphics/pokemon/misdreavus/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/moltres/footprint.png | Bin 101 -> 116 bytes graphics/pokemon/mr_mime/footprint.png | Bin 89 -> 105 bytes graphics/pokemon/mudkip/footprint.png | Bin 90 -> 105 bytes graphics/pokemon/muk/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/murkrow/footprint.png | Bin 94 -> 109 bytes graphics/pokemon/natu/footprint.png | Bin 84 -> 99 bytes graphics/pokemon/nidoking/footprint.png | Bin 94 -> 111 bytes graphics/pokemon/nidoqueen/footprint.png | Bin 98 -> 114 bytes graphics/pokemon/nidoran_f/footprint.png | Bin 87 -> 102 bytes graphics/pokemon/nidoran_m/footprint.png | Bin 89 -> 104 bytes graphics/pokemon/nidorina/footprint.png | Bin 94 -> 110 bytes graphics/pokemon/nidorino/footprint.png | Bin 100 -> 114 bytes graphics/pokemon/nincada/footprint.png | Bin 92 -> 106 bytes graphics/pokemon/ninetales/footprint.png | Bin 96 -> 110 bytes graphics/pokemon/ninjask/footprint.png | Bin 91 -> 107 bytes graphics/pokemon/noctowl/footprint.png | Bin 101 -> 118 bytes graphics/pokemon/nosepass/footprint.png | Bin 96 -> 111 bytes graphics/pokemon/numel/footprint.png | Bin 87 -> 102 bytes graphics/pokemon/nuzleaf/footprint.png | Bin 101 -> 115 bytes graphics/pokemon/octillery/footprint.png | Bin 101 -> 114 bytes graphics/pokemon/oddish/footprint.png | Bin 81 -> 97 bytes graphics/pokemon/omanyte/footprint.png | Bin 80 -> 96 bytes graphics/pokemon/omastar/footprint.png | Bin 85 -> 101 bytes graphics/pokemon/onix/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/paras/footprint.png | Bin 83 -> 99 bytes graphics/pokemon/parasect/footprint.png | Bin 85 -> 99 bytes graphics/pokemon/pelipper/footprint.png | Bin 102 -> 119 bytes graphics/pokemon/persian/footprint.png | Bin 98 -> 114 bytes graphics/pokemon/phanpy/footprint.png | Bin 85 -> 100 bytes graphics/pokemon/pichu/footprint.png | Bin 85 -> 99 bytes graphics/pokemon/pidgeot/footprint.png | Bin 100 -> 115 bytes graphics/pokemon/pidgeotto/footprint.png | Bin 93 -> 108 bytes graphics/pokemon/pidgey/footprint.png | Bin 94 -> 109 bytes graphics/pokemon/pikachu/footprint.png | Bin 84 -> 99 bytes graphics/pokemon/piloswine/footprint.png | Bin 94 -> 109 bytes graphics/pokemon/pineco/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/pinsir/footprint.png | Bin 93 -> 106 bytes graphics/pokemon/plusle/footprint.png | Bin 86 -> 101 bytes graphics/pokemon/politoed/footprint.png | Bin 95 -> 112 bytes graphics/pokemon/poliwag/footprint.png | Bin 86 -> 101 bytes graphics/pokemon/poliwhirl/footprint.png | Bin 90 -> 105 bytes graphics/pokemon/poliwrath/footprint.png | Bin 92 -> 107 bytes graphics/pokemon/ponyta/footprint.png | Bin 90 -> 105 bytes graphics/pokemon/poochyena/footprint.png | Bin 107 -> 119 bytes graphics/pokemon/porygon/footprint.png | Bin 88 -> 103 bytes graphics/pokemon/porygon2/footprint.png | Bin 87 -> 103 bytes graphics/pokemon/primeape/footprint.png | Bin 99 -> 115 bytes graphics/pokemon/psyduck/footprint.png | Bin 95 -> 109 bytes graphics/pokemon/pupitar/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/quagsire/footprint.png | Bin 88 -> 105 bytes graphics/pokemon/question_mark/footprint.png | Bin 110 -> 127 bytes graphics/pokemon/quilava/footprint.png | Bin 85 -> 100 bytes graphics/pokemon/qwilfish/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/raichu/footprint.png | Bin 87 -> 103 bytes graphics/pokemon/raikou/footprint.png | Bin 95 -> 110 bytes graphics/pokemon/ralts/footprint.png | Bin 76 -> 92 bytes graphics/pokemon/rapidash/footprint.png | Bin 94 -> 109 bytes graphics/pokemon/raticate/footprint.png | Bin 95 -> 110 bytes graphics/pokemon/rattata/footprint.png | Bin 88 -> 101 bytes graphics/pokemon/rayquaza/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/regice/footprint.png | Bin 76 -> 92 bytes graphics/pokemon/regirock/footprint.png | Bin 100 -> 117 bytes graphics/pokemon/registeel/footprint.png | Bin 105 -> 122 bytes graphics/pokemon/relicanth/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/remoraid/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/rhydon/footprint.png | Bin 97 -> 114 bytes graphics/pokemon/rhyhorn/footprint.png | Bin 85 -> 101 bytes graphics/pokemon/roselia/footprint.png | Bin 82 -> 95 bytes graphics/pokemon/sableye/footprint.png | Bin 84 -> 99 bytes graphics/pokemon/salamence/footprint.png | Bin 102 -> 119 bytes graphics/pokemon/sandshrew/footprint.png | Bin 91 -> 106 bytes graphics/pokemon/sandslash/footprint.png | Bin 90 -> 106 bytes graphics/pokemon/sceptile/footprint.png | Bin 99 -> 116 bytes graphics/pokemon/scizor/footprint.png | Bin 87 -> 105 bytes graphics/pokemon/scyther/footprint.png | Bin 99 -> 114 bytes graphics/pokemon/seadra/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/seaking/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/sealeo/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/seedot/footprint.png | Bin 90 -> 105 bytes graphics/pokemon/seel/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/sentret/footprint.png | Bin 85 -> 100 bytes graphics/pokemon/seviper/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/sharpedo/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/shedinja/footprint.png | Bin 92 -> 107 bytes graphics/pokemon/shelgon/footprint.png | Bin 88 -> 103 bytes graphics/pokemon/shellder/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/shiftry/footprint.png | Bin 76 -> 92 bytes graphics/pokemon/shroomish/footprint.png | Bin 89 -> 104 bytes graphics/pokemon/shuckle/footprint.png | Bin 86 -> 101 bytes graphics/pokemon/shuppet/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/silcoon/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/skarmory/footprint.png | Bin 101 -> 116 bytes graphics/pokemon/skiploom/footprint.png | Bin 87 -> 102 bytes graphics/pokemon/skitty/footprint.png | Bin 106 -> 118 bytes graphics/pokemon/slaking/footprint.png | Bin 114 -> 132 bytes graphics/pokemon/slakoth/footprint.png | Bin 97 -> 112 bytes graphics/pokemon/slowbro/footprint.png | Bin 90 -> 105 bytes graphics/pokemon/slowking/footprint.png | Bin 84 -> 100 bytes graphics/pokemon/slowpoke/footprint.png | Bin 85 -> 100 bytes graphics/pokemon/slugma/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/smeargle/footprint.png | Bin 94 -> 110 bytes graphics/pokemon/smoochum/footprint.png | Bin 83 -> 98 bytes graphics/pokemon/sneasel/footprint.png | Bin 93 -> 108 bytes graphics/pokemon/snorlax/footprint.png | Bin 102 -> 116 bytes graphics/pokemon/snorunt/footprint.png | Bin 91 -> 107 bytes graphics/pokemon/snubbull/footprint.png | Bin 89 -> 103 bytes graphics/pokemon/solrock/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/spearow/footprint.png | Bin 94 -> 109 bytes graphics/pokemon/spheal/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/spinarak/footprint.png | Bin 76 -> 92 bytes graphics/pokemon/spinda/footprint.png | Bin 94 -> 109 bytes graphics/pokemon/spoink/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/squirtle/footprint.png | Bin 89 -> 103 bytes graphics/pokemon/stantler/footprint.png | Bin 86 -> 100 bytes graphics/pokemon/starmie/footprint.png | Bin 81 -> 96 bytes graphics/pokemon/staryu/footprint.png | Bin 81 -> 96 bytes graphics/pokemon/steelix/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/sudowoodo/footprint.png | Bin 87 -> 102 bytes graphics/pokemon/suicune/footprint.png | Bin 84 -> 100 bytes graphics/pokemon/sunflora/footprint.png | Bin 89 -> 105 bytes graphics/pokemon/sunkern/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/surskit/footprint.png | Bin 87 -> 99 bytes graphics/pokemon/swablu/footprint.png | Bin 82 -> 97 bytes graphics/pokemon/swalot/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/swampert/footprint.png | Bin 103 -> 121 bytes graphics/pokemon/swellow/footprint.png | Bin 107 -> 124 bytes graphics/pokemon/swinub/footprint.png | Bin 81 -> 97 bytes graphics/pokemon/taillow/footprint.png | Bin 97 -> 112 bytes graphics/pokemon/tangela/footprint.png | Bin 97 -> 111 bytes graphics/pokemon/tauros/footprint.png | Bin 91 -> 105 bytes graphics/pokemon/teddiursa/footprint.png | Bin 91 -> 105 bytes graphics/pokemon/tentacool/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/tentacruel/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/togepi/footprint.png | Bin 90 -> 104 bytes graphics/pokemon/togetic/footprint.png | Bin 90 -> 104 bytes graphics/pokemon/torchic/footprint.png | Bin 103 -> 118 bytes graphics/pokemon/torkoal/footprint.png | Bin 104 -> 119 bytes graphics/pokemon/totodile/footprint.png | Bin 88 -> 103 bytes graphics/pokemon/trapinch/footprint.png | Bin 95 -> 107 bytes graphics/pokemon/treecko/footprint.png | Bin 96 -> 112 bytes graphics/pokemon/tropius/footprint.png | Bin 109 -> 125 bytes graphics/pokemon/typhlosion/footprint.png | Bin 88 -> 103 bytes graphics/pokemon/tyranitar/footprint.png | Bin 97 -> 112 bytes graphics/pokemon/tyrogue/footprint.png | Bin 81 -> 97 bytes graphics/pokemon/umbreon/footprint.png | Bin 81 -> 97 bytes graphics/pokemon/unown/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/ursaring/footprint.png | Bin 99 -> 113 bytes graphics/pokemon/vaporeon/footprint.png | Bin 94 -> 110 bytes graphics/pokemon/venomoth/footprint.png | Bin 76 -> 92 bytes graphics/pokemon/venonat/footprint.png | Bin 89 -> 103 bytes graphics/pokemon/venusaur/footprint.png | Bin 96 -> 111 bytes graphics/pokemon/vibrava/footprint.png | Bin 86 -> 99 bytes graphics/pokemon/victreebel/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/vigoroth/footprint.png | Bin 110 -> 125 bytes graphics/pokemon/vileplume/footprint.png | Bin 89 -> 105 bytes graphics/pokemon/volbeat/footprint.png | Bin 84 -> 99 bytes graphics/pokemon/voltorb/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/vulpix/footprint.png | Bin 95 -> 110 bytes graphics/pokemon/wailmer/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/wailord/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/walrein/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/wartortle/footprint.png | Bin 93 -> 109 bytes graphics/pokemon/weedle/footprint.png | Bin 81 -> 96 bytes graphics/pokemon/weepinbell/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/weezing/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/whiscash/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/whismur/footprint.png | Bin 114 -> 129 bytes graphics/pokemon/wigglytuff/footprint.png | Bin 89 -> 105 bytes graphics/pokemon/wingull/footprint.png | Bin 92 -> 105 bytes graphics/pokemon/wobbuffet/footprint.png | Bin 81 -> 97 bytes graphics/pokemon/wooper/footprint.png | Bin 81 -> 96 bytes graphics/pokemon/wurmple/footprint.png | Bin 81 -> 97 bytes graphics/pokemon/wynaut/footprint.png | Bin 88 -> 101 bytes graphics/pokemon/xatu/footprint.png | Bin 88 -> 105 bytes graphics/pokemon/yanma/footprint.png | Bin 84 -> 97 bytes graphics/pokemon/zangoose/footprint.png | Bin 103 -> 117 bytes graphics/pokemon/zapdos/footprint.png | Bin 104 -> 120 bytes graphics/pokemon/zigzagoon/footprint.png | Bin 100 -> 115 bytes graphics/pokemon/zubat/footprint.png | Bin 71 -> 87 bytes 387 files changed, 0 insertions(+), 0 deletions(-) diff --git a/graphics/pokemon/abra/footprint.png b/graphics/pokemon/abra/footprint.png index 42b5e416f322f2978dbc04b358abf827e95edfaf..073c7871915c099e80c94bfd126361c51d819c52 100644 GIT binary patch delta 88 zcma#cnIIX=%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VGr;B3<$IRq}21YSgRZkbk5RRG2KmN~WY^r;o{=-JT#qN~xpAGB_?Y{%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U{r;B3<$IRq}l!SmM2?p~H zChTQyabcGDA!qQRSgT~8Os5RRG2Kfcd@c(1(8_$80~9mf|}tJ?ZM@yH)|!7gyK j`NI6FHv7+xFYZ?}@NE=hb9Vjm9b|x~tDnm{r-UW|Zki%8 diff --git a/graphics/pokemon/aerodactyl/footprint.png b/graphics/pokemon/aerodactyl/footprint.png index 7c5d3e6c19cad818f67914aceb1c0cbc52fac27a..b127884a536f67f8cb4c5916e85bb1e707e2370c 100644 GIT binary patch delta 88 zcma#anIIX=%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VGr;B3<$IRpeAP{6wG-DP> ns%vQBYYgWltB!5RRG2KmN~u_`O=-SEXFbzZ1%eKo+~p*Mu+gAO5dr Xh*>I8ZdIiq0n+B_>gTe~DWM4f?^GM; diff --git a/graphics/pokemon/aggron/footprint.png b/graphics/pokemon/aggron/footprint.png index 3ba6d480ba6d642c5f3aa522cfc4b63518f5bc66..7c9d7177c917efcc4c23d099b61c92cc958a8ef6 100644 GIT binary patch delta 99 zcmYc*pCB2>%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U{r;B3<$IRq}oP-3s;|VqW z2b=m2{^D-_!O!;3p6Anwj`K~8f0>vcGqbfZGx+@Av$(%^Uq4VEgQu&X%Q~loCIAR? BCAgT~8Os5RRG2Kf=#{I6mQFkJ90f{XFhFB;z(1*CeD>G<4a? jrTbP0l+XkK$&D9Q delta 66 zcmYcbn;>b+00ib8ht2>gSx*?O>%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM3981i(?4K%;bcG1Ob7B4I3B~ sXLGUrzopr05=&NmjD0& delta 75 zcmXSjpCIYR00ib8ht2>gHBT4E5RRG2KmN~u__w<4@o~o&1=fd|>qNdd&U@Hydw718 c#;@=43?c_b7hPH=vkj!v)78&qol`;+0DW*C_W%F@ diff --git a/graphics/pokemon/altaria/footprint.png b/graphics/pokemon/altaria/footprint.png index 6c65deae5395825eff738bb3460ff29bd8dcc550..3310f5d0d2a2985d67a558d5bc406120da30d233 100644 GIT binary patch delta 98 zcmYc(n;;p>%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*Var;B3<$IRq}l!S!51dn%# z8uJb({BL&r$INUmV4IL&&*0>sX~DEAC53@OQkyII#pn57fZ7;5UHx3vIVCg!07)<) A_5c6? delta 80 zcmXR*nIP%S00ib8ht2>gZBG}+5RRG2Kfcd@=x=*?PEy;vls4u!Jp4Z-?HDH79OkbU hVDdUB81Quee}*T)qWyl=b235NJzf1=);T3K0RWVd9cBOk diff --git a/graphics/pokemon/ampharos/footprint.png b/graphics/pokemon/ampharos/footprint.png index bfc2f80345670bfe3002935ba5e737bd42f12ce6..6f0cc20f08d37c26c301638136ec2a207445e735 100644 GIT binary patch delta 86 zcma#bnjjg-%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*Vgr;B3<$IRpe2IgaIY|of^ o-taqg{Aadm>R=W%FkoQ#F`0Ybtf$9M1C=s(y85}Sb4q9e0F65wE&u=k delta 70 zcmd0bnjq=O00ib8ht2>gMNb#U5RRG2KmN~W?D%)p_|L}lABy}=@;@#Ly2z|}@V}mc W<+X^*QK_DJAWfdGelF{r5}E*%h8l+e diff --git a/graphics/pokemon/anorith/footprint.png b/graphics/pokemon/anorith/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vgEl(H65RRG2KmN~u7;k%6xU`M=3=eM)2g?(ti_B#LzYd)L gaC{!)ickOR8R~xu+*lwx_cTbir>mdKI;Vst0H56-cmMzZ diff --git a/graphics/pokemon/ariados/footprint.png b/graphics/pokemon/ariados/footprint.png index cee3b1ba5b53c8cc52a6ff71946dc20d77698941..e766c18df2e60c152225016d8c48db11440c819e 100644 GIT binary patch delta 80 zcmWGbnIP%S%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VIr;B3<$IRq}0}MXW5;yD( hKG-KbC_ONRg~3gi>6u*f^kSeQ22WQ%mvv4FO#lNB8c+ZL delta 66 zcmYcZn;>b+00ib8ht2>gSx*bP0l+XkKap)W? diff --git a/graphics/pokemon/armaldo/footprint.png b/graphics/pokemon/armaldo/footprint.png index d12d2e42c098253a7527ec000040c60abae4a5de..b6c085f3dfd29b0561e2b38f3b63fe0935454b19 100644 GIT binary patch delta 92 zcmazqm>?O>%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM3981i(?4K%;bOv2?i4w6uG(C t9&+-$QkQsBzd-pXzrvBahQ>xl2EOAwuO@8ix&_q0;OXk;vd$@?2>@@QACCY4 delta 75 zcmXSjpCIYR00ib8ht2>gHBT4E5RRG2JO0mo_@`LFs&39hU%SJ+#cj-QUc6wm=lHuJ c{l|ZKhIiYAe%vs7oCVV9>FVdQ&MBb@08!H(!TLuwofoV}SSmdq8yzp00i_>zopr05#|ui2wiq delta 70 zcmYd~njq=O00ib8ht2>gMNb#U5RRG2KmN~WZ2EWA_|N9_AIkhr_6aZgZJA>jB^Vh( WZb&BbSe{D;Y4UXSb6Mw<&;$Tfg%`U3 diff --git a/graphics/pokemon/articuno/footprint.png b/graphics/pokemon/articuno/footprint.png index e6e4fa9ef33bf4f1b978535ddb9d1a8715fafaa5..b364b5211b9a580aacc7772bc8918f3c341c9045 100644 GIT binary patch delta 102 zcmd0*njo3T%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*Vir;B3<$IRq}j06UygTg#* z=@L4P8GOx8c-U^r^8AsPxFK(_K|UcNuR+O;O@VgLr)jS5RRG2KjP0bxV%3jc}~(;hIvs+Tl!0${yUO(AB_J@ nNdJ*|{=;&)u77{ifBctcc(_ZngjdMwAjl9;S3j3^P6KWqz delta 68 zcmYd|m>_A-00ib8ht2>gc~2L|5RRG2KmN~W?D%)X_|F7)cLzs~U*YE&0>AyYXAt!h UdsSYV`w^tY)78&qol`;+07oYoM*si- diff --git a/graphics/pokemon/azurill/footprint.png b/graphics/pokemon/azurill/footprint.png index 60db8e03b896c91b1789ba71a1f212454ba311d8..0839c9c089a55ea5364b9ba3c65338c2d5cbe3ff 100644 GIT binary patch delta 79 zcmWGZo*?PP%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U-r;B3<$IRpe2c|RZ4jq3P gnH*gtq#t-OEIiMy)y;pv52%L0)78&qol`;+0Kq31ivR!s delta 64 zcmYcenILJ+00ib8ht2>gX-^l&5RRG2KmN~W?E814`2v3>OH;?6)$OYp8KT!q>@b;k QCm5vM)78&qol`;+0OLXzwEzGB diff --git a/graphics/pokemon/bagon/footprint.png b/graphics/pokemon/bagon/footprint.png index 9a93a7564e0f78f9fecae9c42d7a9960f329c610..aec25f6acb3bf172236b0fee04ed811fa45d93f4 100644 GIT binary patch delta 86 zcma#fnjjg-%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*Vgr;B3<$IRq}2F7j7JT?3h nKOVkdV76v4H85Zn3=w5G;>Z4G?;C+1K&1?xu6{1-oD!MgB~KT}5RRG2KmN~WY^u9uTr(y82ZQ@J9(#oq^B(dGI8J3` Xurv_=#=q&^TaYeKS3j3^P6gVNVyw5RRG2KmN~W6#l!KT`?z!;ptqt`@1t0zkrl^y85}S Ib4q9e0QbTY?EnA( diff --git a/graphics/pokemon/banette/footprint.png b/graphics/pokemon/banette/footprint.png index a15814f2f0c258a565160837b88e47a3dc474ca6..20f6b642e3f26a0c763aa339e7fda8e9907b6415 100644 GIT binary patch delta 78 zcmWGdnjq=P%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*Vcr;B3<$IRpe2i6{5o*s6I f83#E|9AjVz3SstgRIm60RKnot>gTe~DWM4fnba55 delta 65 zcmYcaogit$00ib8ht2>g8BZ6-5RRG2KmN~Wl>ECo{YU!w59~b+IVLy%|7TpSB{M_y Rn56+oy{D_6%Q~loCIAUR7-Ikc diff --git a/graphics/pokemon/barboach/footprint.png b/graphics/pokemon/barboach/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vmdKI;Vst02lHZa{vGU delta 67 zcmYcfpCD<+00ib8ht2>gIZqeI5RRG2KmN~Wl>ECo{YT>Y4~}vzbqyEgt5aARn!=^D T&NDaf1L^Q|^>bP0l+XkK9#0qL diff --git a/graphics/pokemon/beautifly/footprint.png b/graphics/pokemon/beautifly/footprint.png index 49175cb0267fddea4ef305365c533bf55c2bfce8..7111a8b703abce4f8ccabeb30011d6e2ec6081ba 100644 GIT binary patch delta 83 zcmaz{pCIYS%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U_r;B3<$IRpe2i6{5o-=$r lK3ob%<{UUs!Qd;$U~r8|_twG5pMdHZJYD@<);T3K0RS~=8u9=D delta 69 zcmYd~oFM7I00ib8ht2>g1y2{p5RRG2KmN~Wl>ECo{m16{58u}c{4$>ZaK0_`Dkg?A WD`dA$_vknb(&Ops=d#Wzp$Pz#yBj?K diff --git a/graphics/pokemon/beedrill/footprint.png b/graphics/pokemon/beedrill/footprint.png index 5c3f21090f08b937a65491e712a8ba637195f7d0..475d5235a5af0450b13c4b6a279fdd1cf73de659 100644 GIT binary patch delta 79 zcmWGZo*?PP%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U-r;B3<$IRpe2WDQL9*2^K gM#-LroDc?v@Sn`5I`)aK0jgo}boFyt=akR{0K}ykDF6Tf delta 64 zcmYcenILJ+00ib8ht2>gX-^l&5RRG2KmN~WWW8$qhgqq*%|3x8Ww90m!_rn6iP9)% PE0A(eS3j3^P6}uS%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VMr;B3<$IRpe2i6{51s28} dPK6dO2JP33=T&D|od+sl@O1TaS?83{1OQAa7D@mB delta 62 zcmYcYnjmS(00ib8ht2>gNlzEY5RRG2KmN~Wl>EDzU6JGW^BMuCPzHvJljVfZU0Qho Oq}bEd&t;ucLK6Uao)u02 diff --git a/graphics/pokemon/bellossom/footprint.png b/graphics/pokemon/bellossom/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vg6Hgb%5RRG2KmN~WYS6G7^>bP0l+XkK_--Gq delta 78 zcmXR;njq=P00ib8ht2>gO-~oc5RRG2KmN~u7;k%6zPe5Q6_5KANj?K(n*?`9`5%s( e99TlW{kLa0x<%;zMQgn}kY-O;KbLh*2~7YpA{*)e diff --git a/graphics/pokemon/blaziken/footprint.png b/graphics/pokemon/blaziken/footprint.png index cf18a353ab28f3f74a971e1e86a267dad8000207..371621ba4574669ee2403925c81ba6ff807b0b9e 100644 GIT binary patch delta 113 zcmXSEVVoeD&CI~SplX||1f|G|6zsNHpd?<%^zggPXFim|KIS+-^2;46EgTe~DWM4fb0#e@ delta 97 zcmZo+ESVq~%>V@E9f!^UDQiy`#}JO0j0Ozn|1}uS00ib8ht2>gbx#+^5RRG2KmN~W?D{47Z@clIboPbye-ysB%eB8-u65gursIjg26!p00i_>zopr07^p~m;e9( diff --git a/graphics/pokemon/breloom/footprint.png b/graphics/pokemon/breloom/footprint.png index 98d920669da7e8cd5784a8a447c1645812c79427..7e940a5d7f9f686a6d5f1096fb73ec396343711d 100644 GIT binary patch delta 90 zcma#cn;;p=%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VWr;B3<$IRq}f`kOmgaq$| r2igt_*I0Ra*d=B>T+!Gl*d)QQXAOsif?3`npmGLJS3j3^P6gRZkbk5RRG2Klaam_`RlW{%1+MZ^{?eSG3iCgTe~DWM4fNy;7O diff --git a/graphics/pokemon/bulbasaur/footprint.png b/graphics/pokemon/bulbasaur/footprint.png index 8e9ab9c6bd25f1d07d0eb421947deda30eee968f..6dafa96e2bd8e86290ed1c93739becf9aee603fe 100644 GIT binary patch delta 82 zcmaz@n;_}S%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VYr;B3<$IRpe2R2@wHR2LC k>=gt)GqW9IKB2`h_dMIRL!WKDfyx*>UHx3vIVCg!01^QjOaK4? delta 68 zcmYd`m>_A-00ib8ht2>gc~2L|5RRG2KmN~WYzopr09~&c+5i9m diff --git a/graphics/pokemon/butterfree/footprint.png b/graphics/pokemon/butterfree/footprint.png index b2740e9ccc7a3f58bfabb6b9ed66b973d9391201..c6b4750d3097dc04a7633f10ab8861da50695749 100644 GIT binary patch delta 82 zcmWGfn;_}S%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VYr;B3<$IRq}2F7D-Y|oe# jj{IY2R8Vrzlwe@kQp&#ib6rXVP#J@#tDnm{r-UW|8{8TB delta 67 zcmYcbpCD<+00ib8ht2>gIZqeI5RRG2KmN~WZ2EWA_|Hc6h4P;`SOgip4o+cY@Z^** T-^r;B3<$IRq}11y|8JoX1P c7=!s3>?4>qw&bcC1LYY!UHx3vIVCg!05rT6cK`qY delta 61 zcmazKoFHkz00ib8ht2>g2~QWt5RRG2KmN~Wls%jN<2;|+XTv4`m>Kq|$r>Ko_0gIZqeI5RRG2KmN~W?5I0oY?Hvgkon9D4kf-2hA>WsJr9LK T3T&6RIK6a(XGuBP)2f@(nB44$rjF6*2U FngCtdBar|A delta 89 zcmb=;ogf*)00ib8ht2>g6Hgb%5RRG2KmN~uxZKv+Q|IuMgtmRhd7jTRK2e`CSio#oT+$p`onwWZU6r>{=O`lptx}&8^|0_S3j3^P6?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v}uS%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VMr;B3<$IRq}0}MU9JZIP) dI8Gd3V6fi8)cJ|OLm8-m!PC{xWt~$(699Oc7o`9I delta 61 zcmYcYoFHkz00ib8ht2>g2~QWt5RRG2KmN~Wp=fS?83{1ORFT6$tHQ6dLO|`x-X#-FdgQu&X%Q~loCIH+`7;gXo delta 68 zcmYd|m>_A-00ib8ht2>gc~2L|5RRG2KmN~Wl>GbW{D;N!9`@UE{9T>yF!}F)d4>Zq Vvc3oE^cg`~JYD@<);T3K0RVoa8hHQ! diff --git a/graphics/pokemon/chansey/footprint.png b/graphics/pokemon/chansey/footprint.png index 17893b9fb7abe7579687ad5eb471d53578fab3d0..20028e8b7487691a082b65d1ebc46bb62384399e 100644 GIT binary patch delta 83 zcmaz@pCIYS%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U_r;B3<$IRpe2IgbTJZJbX k2>xc2$Vy0PTanDb@Jxf_v#`ReD4;q9Pgg&ebxsLQ05?Dyb^rhX delta 68 zcmYd~m>_A-00ib8ht2>gc~2L|5RRG2KmN~W?D%)n_|HUlcl$SqE9O1qkGT2&KZAIf U*n6#32@{YOPgg&ebxsLQ0A@}Z&Hw-a diff --git a/graphics/pokemon/charizard/footprint.png b/graphics/pokemon/charizard/footprint.png index e69f383927475ff6ba14ae45014dfbc9c03d9721..86218af32e6a9d28d92b6644618425926fa99b9f 100644 GIT binary patch delta 90 zcma#gn;;p=%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VWr;B3<$IRpeh9)+FM>Yo! sR5v^R delta 75 zcmd0cpCIYR00ib8ht2>gHBT4E5RRG2KmN~uSZ~WwYn=XL$+-^=lCrf4>Ny85}Sb4q9e05*3WVgLXD diff --git a/graphics/pokemon/charmander/footprint.png b/graphics/pokemon/charmander/footprint.png index 2f7723621e4196de12eaa3ddf4ceb7b2bb2e2559..9f0bcbdd913c976a674f7334bdee95b101756c07 100644 GIT binary patch delta 86 zcma#bnjjg-%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*Vgr;B3<$IRq}hGsUlX`DQ3 o#3gRnFHm^Ku5hG+VG#$z5fx6Co1gQnfJzxWUHx3vIVCg!0FgNxrT_o{ delta 70 zcmd0bnjq=O00ib8ht2>gMNb#U5RRG2KmN~W?0O|x_uTl;rSu;M`NRy|lpUXO@geCyJq8r`- diff --git a/graphics/pokemon/charmeleon/footprint.png b/graphics/pokemon/charmeleon/footprint.png index 6ec15ee2042e2a1b3dff94fbe87151e9ae69ba34..87305df5be941d8d826cc80bbf0a3318993db2eb 100644 GIT binary patch delta 89 zcma#gogf*)%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*V0r;B3<$IRq}h6Xl)M>Yo! rR5v&NXBXL6-=Or2ou`Lg;T6LRZm!T*hYH<*su?_8{an^LB{Ts5L}MQp delta 75 zcmd0epCIYR00ib8ht2>gHBT4E5RRG2KmN~WYg2~QWt5RRG2KmN~W6#lz8{f9EYlLOl-5r$n%GBbJZGVcPZ N^>p=fS?83{1OQAT6IlQN diff --git a/graphics/pokemon/chimecho/footprint.png b/graphics/pokemon/chimecho/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vr;B3<$IRq}11#(k67mfK c6B-#Ad=4@@hehtl2Ff#dy85}Sb4q9e07GIHQ~&?~ delta 60 zcmazKm>_A+00ib8ht2>gaZeY=5RRG2KmN~Wl)Y*EXEM8@0<*Ii!-l;w^SkH0ssbtX MboFyt=akR{06B>hv;Y7A diff --git a/graphics/pokemon/clefable/footprint.png b/graphics/pokemon/clefable/footprint.png index 5ff3e19a1de46290dfdd4b12941b2a23c16d4ff4..2f3f60fbdf45b5ddae26dfd3c9f37d9a2160aa9e 100644 GIT binary patch delta 94 zcmYc-njjg;%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*Ver;B3<$IRpe24*v6wtrk~ vcHC?~?E_TO4g9Zwg>5RRG2KmN~W?5LZU{^P>A4<9WKGpA`(Rm^z!xmbXS i>)(U)AL-{A!Z;bCT_oO`P12GD>GyQ?b6Mw<&;$S$?H_dj diff --git a/graphics/pokemon/clefairy/footprint.png b/graphics/pokemon/clefairy/footprint.png index 85c25a5dccebc65df4bb478874680cc968ac15ad..86276e6d0a6d10a3805b0cb4e02ee45ec4ecec07 100644 GIT binary patch delta 80 zcmWGdnIP%S%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VIr;B3<$IRq}2F7D-Y|oe# gj{IYgWn=|P?N;Y7J$12i3Q!S)r>mdKI;Vst0NSh=@Bjb+ delta 65 zcmYcZogit$00ib8ht2>g8BZ6-5RRG2KmN~WZ2EWA_|Hc6h4Pr;B3<$IRq}18frf1_t&F c6D1fJOdd0(r3zKa1LYY!UHx3vIVCg!056agHUIzs delta 59 zcma#|pCD<*00ib8ht2>gF;5rA5RRG2KmN~W6#lz8{f9EYlHn4D6SHM&GgTe~DWM4fKkyW1 diff --git a/graphics/pokemon/cloyster/footprint.png b/graphics/pokemon/cloyster/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v`dswtV)<6rf%PPgg&ebxsLQ E0E?6$5&!@I delta 89 zcmb=g6Hgb%5RRG2Kfcd@c)q%=`nlveCP^T{5NLmR@=qTACz5tI pjQ^}i|H16?U-I97_KE-hF*DR(klKD!c)1D498Xt2mvv4FO#oQ=B>DgV diff --git a/graphics/pokemon/corphish/footprint.png b/graphics/pokemon/corphish/footprint.png index f624724c71d78759167096cf7be0241a7803aade..5717fd7f23bfa71082034a1742bf63b038fb759f 100644 GIT binary patch delta 96 zcmYc*nIIX>%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VKr;B3<$IRpe2Uas4o^K8% x4UYd9ng6r1eUsgT~8Os5RRG2KmN~Wl$8B}uS%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VMr;B3<$IRq}0}MUv5;No* d1ST{xGWdotd){(hdm5;K!PC{xWt~$(699C>7rg)g delta 61 zcmYcYoFHkz00ib8ht2>g2~QWt5RRG2KmN~W%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VKr;B3<$IRq_ghY)8$vgO-~oc5RRG2JO0mJ_+Od1o5`73nL{?gZ2|img)c61ANJcG f-d`o~>%Tlh`Wu0nt)C`xgEV`(`njxgN@xNAF6%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U{r;B3<$IRq}goFtX5-03E ztnjz3@i!~;Z+5miiAnVgZtN0oBqiQ7oNDlrWDp4Es!Q3g775hH;OXk;vd$@?2>`f5 BB60u# delta 84 zcmXTVm>}uT00ib8ht2>geNPw15RRG2KmN~u_%prD{S=RXi{!oz<3A75e=s=nKRI|} l-opd+ZOsm;|0VzZXJ>e;Et(Q#^KdfA2v1i(mvv4FO#r@`BWM5s diff --git a/graphics/pokemon/crobat/footprint.png b/graphics/pokemon/crobat/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vA9|ar~L}@_8Ik6@#a%pUXO@geCy@bs6jc delta 65 zcmYcdogit$00ib8ht2>g8BZ6-5RRG2KmN~W?0O^l@09VMgD&3`zO0v9#KT}1Blheq RPjneby{D_6%Q~loCIAH97#jcp diff --git a/graphics/pokemon/cubone/footprint.png b/graphics/pokemon/cubone/footprint.png index 21deee1a6c1f32760c6a541df45babb5238a5c41..46a6a96595508a686a2d4c18d46270dc4fc915fa 100644 GIT binary patch delta 82 zcmWGfn;_}S%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VYr;B3<$IRpe2c{lgo-^zY j9e)``7;ic_sxUD0tYc%eJkR+XsEonW)z4*}Q$iB}{!SS0 delta 67 zcmYcbpCD<+00ib8ht2>gIZqeI5RRG2KmN~W?E81s_|Hc6h4P;QSW=i-CthJ-D7YZ` T@Oau8S&$A-S3j3^P6F?c233{=D5>FVdQ&MBb@0H;nDp8x;= delta 64 zcmYcenILJ+00ib8ht2>gX-^l&5RRG2KmN~Wl>ECo{YUco56*Ip4KXUL3@yP@cKhas QsezPxy85}Sb4q9e0KNGYX5on&x2c|%v?hSiB1CL{_xVDMxVZD3?L`I-Hz-JOVuK%ESpu6{1-oD!M< D-sU72 delta 87 zcmb=-o*)^-00ib8ht2>gBTpB{5RRG2KmN~W?5I0oTyr|zV%nJvC#NSS>mNSZ$>T0= oER&OF@o&b%zvUA|0vIDy8H~Hd-@2ZRy8<%B)78&qol`;+0Jn!BkpKVy diff --git a/graphics/pokemon/delibird/footprint.png b/graphics/pokemon/delibird/footprint.png index e7348586ec32968bd988c204b0baa2332db7ca2b..56baaef90a3d3f2085241819636b8c6ee6288374 100644 GIT binary patch delta 85 zcma#boFEy%%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VAr;B3<$IRpe2IggK0!h{f m4)8hu;TPaIk($?_!NPF<52xDMgrIVuN(N6?KbLh*2~7ZNsT(2y delta 70 zcmd0dnjq=O00ib8ht2>gMNb#U5RRG2KmN~W?D%)B`GS9So4mmnN4ds^JN93B5~ecf WHi_*yb@wM1NRy|lpUXO@geCxwjT)%{ diff --git a/graphics/pokemon/deoxys/footprint.png b/graphics/pokemon/deoxys/footprint.png index ea97e4014c644dc0e5f62ff9fa3ed23c91c893c2..31270c17c1be199ed735d0e0ec8216e177651726 100644 GIT binary patch delta 77 zcmWGZoFM7J%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*V6r;B3<$IRq}0}N+)dCssq ebbMr3ro!N`j_I`W368ly6%3xPelF{r5}E*}J{ZFQ delta 64 zcmYccnILJ+00ib8ht2>gX-^l&5RRG2KmN~WJzf1=);T3K0Ra1(83O?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vgTe~ HDWM4fU5q4N delta 90 zcmb=;n;;p=00ib8ht2>gQ%@Ji5RRG2Klaam__wa@^CyLpJM$jS)IGe|sg3^(kNgkG sx*NuSe(*cV|2MArcmBg4`@{eLGcbjUFFMkm=m|2&)78&qol`;+0Qhhx^Z)<= diff --git a/graphics/pokemon/doduo/footprint.png b/graphics/pokemon/doduo/footprint.png index 0710eca52335487793d62a73c3e601a453c398b7..21ca1be91cd24ff127bee58b944ad29f1a954798 100644 GIT binary patch delta 94 zcmYc-njjg;%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*Ver;B3<$IRpe24+4+fk%c6 wirZKOs{YSi_)ot14?o*Cex5Vz5(x|pGY#2SvT?522Gqjf>FVdQ&MBb@0BpS-kN^Mx delta 81 zcmXR)ognGM00ib8ht2>g9Zwg>5RRG2KmN~W?AW)Tec}1%jxV0q2nan$$Vf=3IB@Pm i^ZbYXw#+U!|Nm!5@s+StlH+Lu>GyQ?b6Mw<&;$S@{2(a+ diff --git a/graphics/pokemon/donphan/footprint.png b/graphics/pokemon/donphan/footprint.png index 394cf64570335f0d1ff910eed817c8c175a8eb97..0bb8543ed59ab68ec3a7245ef1f4ed5db8bc23a1 100644 GIT binary patch delta 93 zcmYc&oFEy&%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*V8r;B3<$IRpeAjnBbuw!s~ tmM`(_2y9zFm7 delta 76 zcmXR+m>}uS00ib8ht2>gbx#+^5RRG2KmN~u7;k%6zFNRa@k~L3WQ*JeXGsAwf!YV` cnm_)_Gi>)0?3_FG+Eb8LPgg&ebxsLQ0Pjy5F#rGn diff --git a/graphics/pokemon/dragonair/footprint.png b/graphics/pokemon/dragonair/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vX7F_Nb6Mw<&;$VP=N={i delta 72 zcmd0anIP%R00ib8ht2>gWltB!5RRG2KmN~uSZ{k+zqZZ)mBN<>$ws>k$`|asU7T diff --git a/graphics/pokemon/dratini/footprint.png b/graphics/pokemon/dratini/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vzopr07OL^mH+?% delta 67 zcmYcfpCD<+00ib8ht2>gIZqeI5RRG2KmN~WZ2EU5{l`ImC;1x}1zrC1+XP55$kvEV Ty`GcH2-4x{>gTe~DWM4fAXXQ> diff --git a/graphics/pokemon/dugtrio/footprint.png b/graphics/pokemon/dugtrio/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vgLr)jS5RRG2Ka$UXXq^A>XK|bLH6G~-NuFwnDg6x-lDM0h mxSJXIJp?pZLl{E79hYOMn91+ixN^^TkRhI~elF{r5}E)ZryczO diff --git a/graphics/pokemon/duskull/footprint.png b/graphics/pokemon/duskull/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vgWltB!5RRG2KmN~Wl>ECo{fG7Zhwp3K_P>|>#~5gL`2Wun ZTny*#%ARobaq0kR^K|udS?83{1ON%j9c=&r diff --git a/graphics/pokemon/eevee/footprint.png b/graphics/pokemon/eevee/footprint.png index 4e4c01c9f52e8e339c7e5b2e69396dcd98705720..793daaba5287a9c136ac686ff458b1b7586e799b 100644 GIT binary patch delta 91 zcmYeupCB2=%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U@r;B3<$IRpe2i6{5o;}hM sPwE>c#IQ2=Gcw0BGXG|tU?IW4P$kNy>fLnm4p2RVr>mdKI;Vst0P$%XV*mgE delta 76 zcmc~#m>}uS00ib8ht2>gbx#+^5RRG2KmN~Wl>ECo{l}B@9~xv^?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vCz`*dom*Y$BhM50A)eN4lelF{r5}E)2m>pjL delta 73 zcmd0eognGL00ib8ht2>g6;Bt(5RRG2KlaUM?6A9SY%`&K5&t)h7w)!)=l@su^4SkK6Oo0(0Foh^)=?HQX!Qi=l`!{+0xrylc|lmYcHc)I$ztaD0e0s!(TAFu!b delta 81 zcmXR;ognGM00ib8ht2>g9Zwg>5RRG2KmN~u7;Jkuys~ZmM;`e{l69wy|J*zOA>01& i{3?xK-{(KHXJTaV+%6?CiG$}4NWZ76pUXO@geCwms3492 diff --git a/graphics/pokemon/electrode/footprint.png b/graphics/pokemon/electrode/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vg1y2{p5RRG2KmN~W?D%)X_|F9Ph5UasIFvZ1v}*kRFVDch VBYMOt&`uPj$J5o%Wt~$(696()7YqOZ diff --git a/graphics/pokemon/entei/footprint.png b/graphics/pokemon/entei/footprint.png index 7336df599ddbf4867b284a1eac39f6b54f8a30a5..50470342a1dfc63a51de702e4aaf3bb2ec14c2ea 100644 GIT binary patch delta 97 zcmYc-ogf**%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*V4r;B3<$IRpeAjnCWV0R#) yzWLxkevXs>6CeCPc;G){*A00G!Ox5fq8J=qcpJH=xl9J?V(@hJb6Mw<&;$UvvLsLd delta 81 zcmXR-ognGM00ib8ht2>g9Zwg>5RRG2KmN~u7;k%6xVnw`6%YFi#}|yohuO>8`2Pfa iahB`)cf@PJZ3cUWbiu6+*99pg8BZ6-5RRG2KmN~W?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vR;L-mB2Wl8rh%rdn^ZI$1$36urX7F_Nb6Mw<&;$S?86IT- delta 72 zcmd0anIP%R00ib8ht2>gWltB!5RRG2KmN~u_`AC8_;JS<48~$#8f07SJ{bSmnEvCx YJi}vqp(#Oedio%3p00i_>zopr0Qoc=B>(^b diff --git a/graphics/pokemon/exploud/footprint.png b/graphics/pokemon/exploud/footprint.png index b27283a141af13e22cd338bd6cf3c068980bc019..daecfd459d369de32f16e8531775097edabba067 100644 GIT binary patch delta 105 zcmd0)ogkUQ%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U~r;B3<$IRq}v;>cLi5l|` zC+uxM=+xx+hmrX|JDVgo8z-m0qX`KQ_8mA-!_XqpxPp=4)oRXdE@E-~K-~gV^0^y5RRG2KR(Y-^fPq!H##hs-uC#sWZVhkng{6>HFF;R pEEf3nZ_dMRyTkI;0>9W@zA^}17Spj)3Cjf;vd$@?2>|cyB60u# diff --git a/graphics/pokemon/farfetchd/footprint.png b/graphics/pokemon/farfetchd/footprint.png index 2f08f732d57ba03dd0dc4c80f222e72fae641c16..cbfca034d5eee3883f7f201bb83fd69bcca33d25 100644 GIT binary patch delta 95 zcmYc;o*)^;%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*Uv8w7_Mq^7By^15(nyG@O1TaS?83{1OV{6AP4{e delta 79 zcmXR;o*?PP00ib8ht2>gEl(H65RRG2KmN~W?D*GsaZXa3Sb7`t8-*_o@-22JjQ?y% f{}IgZ^xr{?Q6p5Wpsp@33#8lA)z4*}Q$iB}oQNHP diff --git a/graphics/pokemon/fearow/footprint.png b/graphics/pokemon/fearow/footprint.png index 04ea7924d542db2a49a487eb02dd537ce482d089..82302a8043948dfb7b5398b6109718c3f7d37e54 100644 GIT binary patch delta 98 zcmYc*n;;p>%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*Var;B3<$IRq}goFno2@mER zP_S%vEMw>RSkIvNja}hLO+%w#htvU%6;l`)p1kBtl;_fO1!`mPboFyt=akR{0A>*( AIsgCw delta 82 zcmXR*n;_}S00ib8ht2>gT~8Os5RRG2KmN~uc)PkS|0mD+OOkRsn=i1}3H(yzcdCCQ j`HwNsR^o5^kN@%v5>v$*<+u*GgADL=^>bP0l+XkK9kL%M diff --git a/graphics/pokemon/feebas/footprint.png b/graphics/pokemon/feebas/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vgRZkbk5RRG2KmN~um~VGDzP4@tD}^u3vW@>f9G+mq@pp6j bkN@%vckT(NR=xMm2Wj+l^>bP0l+XkKWc43Z diff --git a/graphics/pokemon/flaaffy/footprint.png b/graphics/pokemon/flaaffy/footprint.png index d1695ec805ec5d5c06d1b784fd4f4158ac56c48f..6824d2bb9e28d6866aa388f8de1e55f10f7c396a 100644 GIT binary patch delta 77 zcmWGcoFM7J%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*V6r;B3<$IRq}0}MU93P)-f e8XICH7#KnWSSD=w>7EZ%!QkoY=d#Wzp$Pz$$QVQb delta 61 zcmYccoFHkz00ib8ht2>g2~QWt5RRG2KmN~W*?y}vd$@?2>@oP6q5h| diff --git a/graphics/pokemon/flareon/footprint.png b/graphics/pokemon/flareon/footprint.png index db5d37ed461ebfb586a73eeabf27814696f06a4d..aecf35c717cf1cbf8d8f1ad85533d8625b5ae4a3 100644 GIT binary patch delta 98 zcmYc%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*Var;B3<$IRpe2c{lgo;}hM zKkN-o{7;y$I$^@bga?KR53~~!>JJ>KVOYe%&^?)L@l9r@eL!stp00i_>zopr0E}WI AZvX%Q delta 83 zcmXR*pCIYS00ib8ht2>gJx>?M5RRG2KmN~W?E81sxaL#(j|1mFG|YXNXnpwcW1jiv ljceYd|4=;t;keu)Hip92lJ>#hc@01&c)I$ztaD0e0s!IWBpv_& diff --git a/graphics/pokemon/flygon/footprint.png b/graphics/pokemon/flygon/footprint.png index 5af877878d1576ba585bad5fc76442f91b1b0638..ef9f392cf1072bb4830e4352edef5f45adbc6e1d 100644 GIT binary patch delta 90 zcma#an;;p=%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VWr;B3<$IRq}oP-2B2B#cO ro;BPKJm1(8N*J{GLKwmi-(X;1Hs<gWltB!5RRG2Kf=#{I4;*xcP{;hD1XwQ3GB+%D=Y#SW6tic YV)*4P^5SVk1V|Tyr>mdKI;Vst0I`1>fdBvi diff --git a/graphics/pokemon/forretress/footprint.png b/graphics/pokemon/forretress/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vgIZqeI5RRG2KmN~W?E81s_|L}nMf-m{a%eQIdGNoUVP?II T(5~6JIUpULu6{1-oD!Mb+00ib8ht2>gSx*ECo{RgwlH=h4*9CJ)={{PRoNlxa5 T{Gz$@K^i<={an^LB{Ts5D3uw9 diff --git a/graphics/pokemon/gastly/footprint.png b/graphics/pokemon/gastly/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vgB~KT}5RRG2KmN~W?0O|xchtD%Q~Hks{SNj|9AEU?`kbw2 Xurn7g`oHvUEl8KAtDnm{r-UW|ziS)X diff --git a/graphics/pokemon/geodude/footprint.png b/graphics/pokemon/geodude/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vgDNh&25RRG2KmN~Wl>ECk{YPTIL;Wks08s{pIl9sZ7P&6) P0jc(M^>bP0l+XkKo2M0C diff --git a/graphics/pokemon/glalie/footprint.png b/graphics/pokemon/glalie/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v{vGWE{C4;A{pUXO@geCw{N*YT5 delta 72 zcmd0dnIP%R00ib8ht2>gWltB!5RRG2KmN~WZ2HF-Xxs7e_`HYhHX@8S|G$xZkoE6B ZJ3}j%RPr3nC0jw-JYD@<);T3K0RYqO8_WOz diff --git a/graphics/pokemon/gloom/footprint.png b/graphics/pokemon/gloom/footprint.png index 7e9c265e81c8f7c24bf5d8385c93ed02ed9bacab..13ca4ee71eaf5eaa4eec2b2b4f90a8d4e6718b03 100644 GIT binary patch delta 84 zcma#bm>}uT%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VQr;B3<$IRpe2R3#I3Hb&A lV*%NO1olO2Y-u8*4Bc;8tHRixr2`c*c)I$ztaD0e0s!?V7svnr delta 70 zcmd0Znjq=O00ib8ht2>gMNb#U5RRG2KmN~WYgRZkbk5RRG2KmN~WY< diff --git a/graphics/pokemon/goldeen/footprint.png b/graphics/pokemon/goldeen/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v}@~zk6q+sJ%i#uc7-E#4UIb+8F?6-fACB$v|9cUsDr`N)z4*}Q$iB}gO-~oc5RRG2JHF3l?5LXLxZ>!{hYZ#twh!1B@_$nJa(LcD ff7`?V|2wcS>}(VEXSsI852V@C)z4*}Q$iB}bVwcc diff --git a/graphics/pokemon/golem/footprint.png b/graphics/pokemon/golem/footprint.png index 8ddc6345cc597c7221e869abf81b99dce36b3103..c9f61444290bb9d6885ca773eaedfafb624feaa0 100644 GIT binary patch delta 94 zcmYc+njjg;%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*Ver;B3<$IRpeAV^9G5KGu# umN4NzgVP`W0D<4kY|of^dUz9#FfiN=g4Nn)x5RRG2KmN~u_`bf)`n_b|ob-wV{7&*u0x$4aw%LE< e`Ty$R3ws6yUD4Bi`&r9CdOcnJT-G@yGywpKP#zNi diff --git a/graphics/pokemon/gorebyss/footprint.png b/graphics/pokemon/gorebyss/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vg6;Bt(5RRG2KmN~WY_j`lY*Un8ae&W>ea1qLLw^sP|8QJx Z5f20NRgs2_ANeLAeV(p0w{ew*%EOc)I$ztaD0e0s!Ye9vA=s delta 71 zcmd0fo*?PO00ib8ht2>gB~KT}5RRG2KmN~W?6do6Y*Un8ae&WB{)ga;cALZU)g4j{ X){n)i|5-FF2kG*3^>bP0l+XkKZPpn> diff --git a/graphics/pokemon/grimer/footprint.png b/graphics/pokemon/grimer/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vgJx>?M5RRG2KjP1S*gNOpY|F#SsRF;M=RagMXR;MctN1hH kA*1nO_OdqrS3LVaGhR;;dS=EV69zKD)78&qol`;+056#zjQ{`u diff --git a/graphics/pokemon/grovyle/footprint.png b/graphics/pokemon/grovyle/footprint.png index c78ea507c9d1ad31443fbc7fb1531c862f38bca2..149efec284efb96c6c9d8469289ace7a2727f0db 100644 GIT binary patch delta 94 zcmYc(njjg;%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*Ver;B3<$IRq}goFo%2?C!I w1WqSRSe@|T|A7Pl7`kTgD+nYrGfOZqT(seM!`+`40o20a>FVdQ&MBb@00TuJyZ`_I delta 80 zcmXR)nIP%S00ib8ht2>gZBG}+5RRG2KmN~u__?xe`)$cMzx0Y5=RP#ff7os#@^_>A hg8HvK4paaCXJ*iG68o0fmpcul-P6_2Wt~$(697YbA;$m! diff --git a/graphics/pokemon/growlithe/footprint.png b/graphics/pokemon/growlithe/footprint.png index 2517cdcbadabf5a79cac05d35cf1f7a1df6c9438..b9af4c119c797d11771944fed097c284c9efc4be 100644 GIT binary patch delta 84 zcma#fm>}uT%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VQr;B3<$IRpe2IgaIZ11>v lKG_Ed{AU+PvOCbg!thI;bK(}cBPKwF44$rjF6*2UngB|t8hZc$ delta 71 zcmd0Zo*?PO00ib8ht2>gB~KT}5RRG2KmN~W?D%)pxaMMd#eu#iyARD5}uS00ib8ht2>gbx#+^5RRG2KmN~uxZIYbc1rpWh4UXO?G8_`5MXYqyP>gnp|vd$@?2>^l|AC>?B diff --git a/graphics/pokemon/gulpin/footprint.png b/graphics/pokemon/gulpin/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vgRZkbk5RRG26?*3jI%HdJ&6Kp7B`GB#_=3S$#5RF_A^#tq a`ZtV?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vgWltB!5RRG2KmN~uSZ~YmcXRuq`|l;|J}6(1uM}YFY7Y6w Y&LDk6OkHW~qZW`hPgg&ebxsLQ0MAkz00000 diff --git a/graphics/pokemon/hitmonchan/footprint.png b/graphics/pokemon/hitmonchan/footprint.png index cfd1efd54a09ddefdf5afadc77a802ebd8f0c9a0..4a185f878a3592c9036fa9c3abf893863685f66a 100644 GIT binary patch delta 86 zcma#bnjjg-%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*Vgr;B3<$IRpe2IgnXJa6~| n1U@rQQ1FoHkaFmdTq3~mMwGMTDDRRLK&1?xu6{1-oD!MgMNb#U5RRG2KmN~W?D%)X_|F7)$NDFZO$vnytJoLXD@V+6lZg>aWV@$3P^b1nUIjjz;H8#v%T-$O-`Ur22WQ%mvv4FO#q^Y BA}0U< delta 84 zcmb=-m>}uT00ib8ht2>geNPw15RRG2KmN~uc)z}_{JrG8C&o4((<=_}yRzSKd{JP1 l`15ClFMsV0KmW;7|B6vXN-SEd(8~^Fgr}>Y%Q~loCIHcIBJ%(M diff --git a/graphics/pokemon/hitmontop/footprint.png b/graphics/pokemon/hitmontop/footprint.png index ba8c1cca2a11f05817497af73be5943bf891e08e..16e5173ce4a530642a81c628e6bf4dd491dc0997 100644 GIT binary patch delta 99 zcmYc%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U{r;B3<$IRq}goJ{GM2`oF z8}1!U_}}cftl{7xrmlvZf9yPGcomMEU~uB$VL14R-Rh@M{VAY622WQ%mvv4FO#uGz BB?kZi delta 83 zcmXRgJx>?M5RRG2KmN~8{GZ?UbG~HX4r7^w^ol#@3;tM$Fy54Z kBKhx1^M(EY6~6qpXRw|lvBK6rtQlm2r>mdKI;Vst0EWmSV*mgE diff --git a/graphics/pokemon/ho_oh/footprint.png b/graphics/pokemon/ho_oh/footprint.png index adceb38787b4292ab1935316d591bda35f49496e..a6cfc377d555b2edee4023116425160bafe471ec 100644 GIT binary patch delta 90 zcma#gn;;p=%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VWr;B3<$IRpe2IgaIZ09(6 rCK)?)lrxKLv}aI!#;m{+!r;bmES0l+Lm}HWpmGLJS3j3^P6gHBT4E5RRG2KmN~W?D%)pxaM?v#WX&r`F|F^Xt&|`yOCXS b0h0j}gSn(wxXax-NsvxYS3j3^P6gLVG4!*uJ#gT~8Os5RRG2KmN~WY^s}={-Z+1<=@Qn1#XibGAJKrPHU6@ j!&Co6^51pi15+3o^2#L{h30xCfDG_-^>bP0l+XkK`xYLG diff --git a/graphics/pokemon/hoppip/footprint.png b/graphics/pokemon/hoppip/footprint.png index 0be22ed86982f826ab6fa1d9f8d052810f88adb5..d482d69e5ea243c57f56d390714a46dd835c0631 100644 GIT binary patch delta 79 zcmWGZo*?PP%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U-r;B3<$IRq}0}MU9JZIP? gX2>{joN!}hFkxcy+OxVZ9H@rD)78&qol`;+0Ii=FumAu6 delta 64 zcmYcenILJ+00ib8ht2>gX-^l&5RRG2KmN~W?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*Var;B3<$IRpe2IgaIY|of^ zgoJpWzopr08d0B AY5)KL delta 83 zcmXR*pCIYS00ib8ht2>gJx>?M5RRG2KmN~W?D%)p_|L}lihpw+wip~{&1++S!z2I0 k@kP6h2xDqv*1!Mk3?h7@l3Gg3Z9yh@y85}Sb4q9e06{7q?*IS* diff --git a/graphics/pokemon/houndour/footprint.png b/graphics/pokemon/houndour/footprint.png index 3f81614316c28197620e00c0cbbdf2fffb0891f5..bbc1115d75b46e88deaea266d1656aa40891d022 100644 GIT binary patch delta 84 zcma#fm>}uT%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VQr;B3<$IRpe2c{lgo;}hM lKkN-Q*f%IWW9C`Gz|h0Px-Cohpd3&kgQu&X%Q~loCICRg8O;Cy delta 71 zcmd0Zo*?PO00ib8ht2>gB~KT}5RRG2KmN~W?E81sxaL#(j|1mFILmeYyJ4)L{o}tp YLt&AW&adkezk_sny85}Sb4q9e0Q8<6ga7~l diff --git a/graphics/pokemon/huntail/footprint.png b/graphics/pokemon/huntail/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v|BrjGq}Ftcj)-Z5TMJT$Hpt_cI2TMP(6dEtDnm{r-UW|mewDi delta 75 zcmd0gpCIYR00ib8ht2>gHBT4E5RRG2KmN~u7;k%6y}r%;9S{GFzzghk8ow0zo$B96 b{`=3)aK1w5Y?faP3rMG@tDnm{r-UW|2A&&p diff --git a/graphics/pokemon/igglybuff/footprint.png b/graphics/pokemon/igglybuff/footprint.png index bbb7352a6016ea4b5a824f1afb1065adc80bf28e..d24c1760df92d06bd51e3799ee673bc9f2e46ef8 100644 GIT binary patch delta 80 zcmWGdnIP%S%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VIr;B3<$IRpe2i6{Ti5c<+ h8=M6u+-*?fXDGbOvX}F7q$p4kgQu&X%Q~loCIH#u82kVL delta 65 zcmYcZogit$00ib8ht2>g8BZ6-5RRG2KmN~Wl>ECn{fF}T56n#sZ>rcrSQ)w(N~`YZ Rv7ZA{@9FC2vd$@?2>|9A7Zv~j diff --git a/graphics/pokemon/illumise/footprint.png b/graphics/pokemon/illumise/footprint.png index 451d532b2f44e88db71bb31f1051d51ff4669458..d39b4f00541e985e0e62141ad25228f14f082d73 100644 GIT binary patch delta 80 zcmWGZnIP%S%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VIr;B3<$IRpe2i6{5o-^zR hUNDLn$~jD9XDFG@S~UIl)lQ%y22WQ%mvv4FO#t8y8J++D delta 64 zcmYcZnILJ+00ib8ht2>gX-^l&5RRG2KmN~Wl>ECo{YNst+oymp=j9?989JUz6{NoN QHv=j6boFyt=akR{0L=at+5i9m diff --git a/graphics/pokemon/ivysaur/footprint.png b/graphics/pokemon/ivysaur/footprint.png index 29206b935ee19c1ab050067906f6fa1016567e31..d837294f9db2cc31700a40e576eee6dcb79c9a43 100644 GIT binary patch delta 92 zcmYc&m>?O>%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM3981i(?4K%;bcIW;V7yKDK+( tJb&yZp8R(ZoWSeyMqWaK-$8_t;mQ&&k=FlPqk$S2JYD@<);T3K0RTyR9i0FG delta 76 zcmXR&m>}uS00ib8ht2>gbx#+^5RRG2KmN~W?0O}+Z@O_!Q2LJp=RPz@b~WTE{5p94 d!+E(yJPaDQM9p=fS?83{1ORkG9-9CF diff --git a/graphics/pokemon/jigglypuff/footprint.png b/graphics/pokemon/jigglypuff/footprint.png index 59b5f1171b3c10c930f8c598a8e81dae8a46f804..b6d981b10489da2e1352dcaf486e2bbb534ec60b 100644 GIT binary patch delta 81 zcmWGdognGM%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*V2r;B3<$IRpe2IgbTJZJa~ iE--2&&t;ucLK6VrgBa%k delta 65 zcmYcdogit$00ib8ht2>g8BZ6-5RRG2KmN~W?D%)n_|L@S4&MU4te0y!pv5TiMXb3$ R^xX!KdQVqBmvv4FO#mSQ8Fv5x diff --git a/graphics/pokemon/jirachi/footprint.png b/graphics/pokemon/jirachi/footprint.png index 856bb5faafd226f980ad8165ae3bf048bb4ee251..1153c76dfef3d2c54ccd621023ae3f0b79def0d7 100644 GIT binary patch delta 78 zcmWGenjq=P%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*Vcr;B3<$IRpe2i6{5o-^zV fI8LxBg)lHg&1XJ)FLOs0Pzi<Dnm{r-UW|pT-zk delta 63 zcmYcao*-$(00ib8ht2>gDNh&25RRG2KmN~Wl>ECo{YNsttAm-qLM;Y{MfYVy|K#i| P2dVaS^>bP0l+XkKi@Fsi diff --git a/graphics/pokemon/jolteon/footprint.png b/graphics/pokemon/jolteon/footprint.png index d1e9477b3d0c9da9d144ac0fe63e0bf72c968881..450c3c4953d212df6b81d2c4f4074edd7079030a 100644 GIT binary patch delta 87 zcma#fo*)^-%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U*r;B3<$IRpe2c{lgo;}hM pKkN-o{BKZFknWhle_$#D!$xHemxND~)&SKqc)I$ztaD0e0sz1F9Jc@f delta 71 zcmd0fo*?PO00ib8ht2>gB~KT}5RRG2KmN~W?E81sxaL#(j|1mFG{|-}gX-^l&5RRG2KmN~Wl>ECn{fF}T56pcHcdAlY8R~+i?0oxI Q+yN=~boFyt=akR{0MiW@7XSbN diff --git a/graphics/pokemon/jynx/footprint.png b/graphics/pokemon/jynx/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vgVNVyw5RRG2KmN~W6#l!KT`?z!;ptqt`@1t0zkrl^y85}S Ib4q9e0QbTY?EnA( diff --git a/graphics/pokemon/kabutops/footprint.png b/graphics/pokemon/kabutops/footprint.png index 127b741d827af8c403e29d4b5bad7dce3b1725b9..54f193c502e7aca95eeec8573d008696fee44239 100644 GIT binary patch delta 89 zcma#cogf*)%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*V0r;B3<$IRpe24*o#bOUs&EVgRZkbk5RRG2KmN~W?5MlXzOetV!k1z@j=vMqebP0l+XkKHLV`Y diff --git a/graphics/pokemon/kadabra/footprint.png b/graphics/pokemon/kadabra/footprint.png index a699f29879c7bf7c74af15c828cbaab32f7c638b..8cbac4eddc77046f61ed6e3e02b4b75207cabdea 100644 GIT binary patch delta 97 zcmYc(ogf**%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*V4r;B3<$IRq}goFnH2@gCI zCTKD!?qlcqB)_2JKO@IR`GkZ#21PeE1ty03=A5NB-bQc(buoCl`njxgN@xNA7{DLb delta 80 zcmXR-nIP%S00ib8ht2>gZBG}+5RRG2KmN~u_`A04{AWqI@68w7E8E!r1blInYpJ_o h{AVTm!utP>91L>qV!0O{cngBGd%F6$taD0e0stW%AXfkY diff --git a/graphics/pokemon/kakuna/footprint.png b/graphics/pokemon/kakuna/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vK9Ase7o5~aPoI8FOP(6dEtDnm{r-UW|f}uS00ib8ht2>gbx#+^5RRG2KmN~u7;k%6zFMH_z`243$(Dv5{y!XFoaI!w cLw^3ZXE^s#c!EW`_ezjfPgg&ebxsLQ059bnd;kCd diff --git a/graphics/pokemon/kecleon/footprint.png b/graphics/pokemon/kecleon/footprint.png index 3c69684379972211f839eaae341bbc76858585a8..986c726fa04414f813911ef60cac5d903ab4637e 100644 GIT binary patch delta 88 zcmYeunIIX=%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VGr;B3<$IRq}21YkFwx@h- pFL`+;vGKfNm-r#?AUL6yg`w*Mn@n$c-xi=^22WQ%mvv4FO#rR_8}uS00ib8ht2>gbx#+^5RRG2KmN~WZ2I>%eMj)Q4@c%dyjj^M|BXlf$wH13 dZL5F&muD#IlRPGO=H4cdR!>(ymvv4FO#r|~Am0E0 diff --git a/graphics/pokemon/kingdra/footprint.png b/graphics/pokemon/kingdra/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vg6;Bt(5RRG2KmN~W?5n$CY%?L<;=s8J2hLphGx6b%c(#;C a115&zZBkFYR=@cS(&y>w=d#Wzp$PyL8Xdy` diff --git a/graphics/pokemon/kirlia/footprint.png b/graphics/pokemon/kirlia/footprint.png index c1c0058e74e9c2354f9bf9ca74251c564bcb95d1..2a1c1f3dd159502c8024d197d965920376b79bfa 100644 GIT binary patch delta 76 zcmWGcm>}uS%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VMr;B3<$IRq}0}MU9JZIP) dI8Gd3V6fi8)cJ|OLm8-m!PC{xWt~$(699Oc7o`9I delta 61 zcmYcYoFHkz00ib8ht2>g2~QWt5RRG2KmN~Wp=fS?83{1ORFT6$t?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vi%o!8~8#WZE~NDh5wiKbLh*2~7b078zIo delta 66 zcmYcdn;>b+00ib8ht2>gSx*P$z?@tDnm{r-UW| D{skj3 delta 84 zcmb=-m>}uT00ib8ht2>geNPw15RRG27XRlj{Aqu|)JAC3S3 diff --git a/graphics/pokemon/lairon/footprint.png b/graphics/pokemon/lairon/footprint.png index 9a6527c1c98c0721021880ea08322388afeedf8d..e465f42d51ca4e0d21420ae0be39096947978638 100644 GIT binary patch delta 96 zcmYc-nIIX>%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VKr;B3<$IRpeh9)+)W6V5z y%pE%N*_nT{v;C9j`BcAv;{==1Gj^T?1_s%+JVFoGNbmzSF?hQAxvXg9Zwg>5RRG2KmN~uSZ{mSzPio-mBN>cb04zXA7(FWV?PtX ilEQpZzLIUiss9Z3FA84>3Rxlo((mc&=d#Wzp$P!|ryqp? diff --git a/graphics/pokemon/lanturn/footprint.png b/graphics/pokemon/lanturn/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v}uS%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VMr;B3<$IRpe2i6{5o*woI d0nD>(7~&4Iu)DpNX9Ox>@O1TaS?83{1OQgI7B2t* delta 62 zcmYcYnjmS(00ib8ht2>gNlzEY5RRG2KmN~Wl>ECo{YQF#%PYwMQ3i&2yQOctMb7&T OQtavK=d#Wzp$Pz(n-((w diff --git a/graphics/pokemon/latias/footprint.png b/graphics/pokemon/latias/footprint.png index 0419630c1521eb245bb63cda013ca98adca12c89..f0f34c50042edc58ca31fe61eea9db5b318e7cf2 100644 GIT binary patch delta 99 zcmc~OpCB2>%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U{r;B3<$IRpe2IgaIY-Mb0 zmTYYQ?0NpkOWfdZ*zty!=MTR_%mNGR2wrAphROA8vzC60xDC|D;OXk;vd$@?2>=0x BAFlua delta 84 zcmXTVm>}uT00ib8ht2>geNPw15RRG2KmN~W?D%)p_|K2?A3oS0W>0J5|HEVd#_^8) mS04E%jxh^<@Nby)|372qe@PEB*~w}kBRpOGT-G@yGywq0K_d+S diff --git a/graphics/pokemon/latios/footprint.png b/graphics/pokemon/latios/footprint.png index f77d0fa867c580f726d9ca9fba181a0b1f89e597..7c22956b66b01ef1d585d86fb63cef6ecb008815 100644 GIT binary patch delta 101 zcmd0-oFJLN%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VCr;B3<$IRpeAV^D?keu)U z$gDqbpst~DXJg|}M&{4_1~(am7`vELpE_zWF1^CuJp1kLzopr04aPW Ang9R* delta 85 zcmb=-oFEy%00ib8ht2>g15X#n5RRG2KmN~uc)q@^{lBE$zw{r9=RX{t_t4+=uzY2k m{hNeMaw<$B?5FG)R#2 pUuKby{~MGz#5Gu59841!81z$lM5;gK)dN*Cc)I$ztaD0e0st+_9i0FG delta 74 zcmd0en;_}R00ib8ht2>gRZkbk5RRG2KmN~uIN$cLd}W*bpMWoovRw)>3q%AMuQG)G a`_IpCPEz?O>%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM3981i(?4K%;bayMl&|He=KbO snAo;4vGwuu{7E?Suc7fL1G5kVL+e#G?z~hrE}#YmPgg&ebxsLQ05WPEi~s-t delta 79 zcmXR&o*?PP00ib8ht2>gEl(H65RRG2KmN~WY^wX0{=;DYLudQL=j+ZzGnTKEyv}gzI2TB_r>mdKI;Vst0R5>U0ssI2 diff --git a/graphics/pokemon/lickitung/footprint.png b/graphics/pokemon/lickitung/footprint.png index 1f88f23fc620f3ff118b2413d255c43f04fe7e3f..fb92001035934b955f8bdc9c5f45d0d2d2e1500e 100644 GIT binary patch delta 97 zcmYc*ogf**%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*V4r;B3<$IRpe2IgmMY~Pr9 z{_smYv2U30mtSDh%7h6942mGY~5pe_baS3j3^P6gT~8Os5RRG2KmN~W?D%)Z_|Jy)9}4F`G|0E`ZD_vmu&nL* kbH^8j_8wd-p8c<9;6E;UYt_fz86X2ZUHx3vIVCg!0G)Rv4FCWD diff --git a/graphics/pokemon/lileep/footprint.png b/graphics/pokemon/lileep/footprint.png index ce6b2790e1380c56b9d03076b830c1cff67fa766..ee68853045d81fce9ad012f2e3c4a080934eda15 100644 GIT binary patch delta 92 zcmYc;m>?O>%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM3981i(?4K%;W?HW@b6I+qOKP s>>WD(GjllJxK=K~Q!ODOEs?;$@I96DX;Q-PV?YfIp00i_>zopr05LNip8x;= delta 79 zcmXR&o*?PP00ib8ht2>gEl(H65RRG2KmN~W>^N7SX7S|AhX&aeyARC*EwwH)AI2CS g-e1MmvFZPRMm9;&zdPD2r-F2Qy85}Sb4q9e0L;@LrT_o{ diff --git a/graphics/pokemon/linoone/footprint.png b/graphics/pokemon/linoone/footprint.png index 8d83166d3e8e16cf12134420cb6c7577c190675d..ff6019b7bc24400ff531729115e154ed41fbbd97 100644 GIT binary patch delta 87 zcma#bo*)^-%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U*r;B3<$IRq}tON$7ZOj2j p9vwJv=D>kEhQ=Av2_1|b47aU0JT*^?h5*$vc)I$ztaD0e0ssK{9q#}D delta 70 zcmd0fnjq=O00ib8ht2>gMNb#U5RRG2KcdewxY)m4_~LtAoBe;ux*N(D=2uDl;&)+C Wau%Oi*FLKRq{-9O&t;ucLK6UWiW!ms diff --git a/graphics/pokemon/lombre/footprint.png b/graphics/pokemon/lombre/footprint.png index 051e5ab550250967b005534e57782ff6fd31e40d..333b1c7b448111256d012265db932237eac23079 100644 GIT binary patch delta 104 zcmd0+nIM_W%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VFr;B3<$IRpeh90y^hU|`TI;y(ED-lMlb%?zHdelF{r G5}E*4>m`i< delta 90 zcmb=)n;;p=00ib8ht2>gQ%@Ji5RRG2KmN~uSZ{mSrn+s~P9E{ulIJRnZ4AmdKI;Vst04JLo82|tP delta 68 zcmYd~m>_A-00ib8ht2>gc~2L|5RRG2KmN~Wl>ECg{YT>Y4~}wOb*GH~-0fe(z|bKk UwP?{&z9x_sPgg&ebxsLQ09=I`ssI20 diff --git a/graphics/pokemon/loudred/footprint.png b/graphics/pokemon/loudred/footprint.png index 604af90004997cc9af74376a03aae66c14e76dd3..8468d3ea6cb1549811f06024e43019cb42747ef1 100644 GIT binary patch delta 100 zcmd0-m>?O?%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VSr;B3<$IRq}gam^Ji5n&) zPS}_*Vc)?6{~8?EF&$y+a+uJ<(s4Tcz=0Zu6=DoCrP#6(ychleYGm+q^>bP0l+XkK DJMAU^ delta 85 zcmb=(oFEy%00ib8ht2>g15X#n5RRG2KmN~u_$R&XalfRTe0s&Ab03`NJxsLj;1y|H m@cg{vo&LW(^=~Bq{by%LNs+9$ZQQR6GQ-o=&t;ucLK6VfZzBr; diff --git a/graphics/pokemon/ludicolo/footprint.png b/graphics/pokemon/ludicolo/footprint.png index 23163f358cdc6e382e2fd53e1dd42d97f0eacf18..e5aa759abcd6b46c24beb819df1c19ee8f9986d3 100644 GIT binary patch delta 91 zcma#cpCB2=%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U@r;B3<$IRq}goFpx2NeD{ tI=*9WzRS^>xAI$&& delta 74 zcmd0gn;_}R00ib8ht2>gRZkbk5RRG2KmN~uxY*_}b6s2eA0GCbf-e{(7>_ExXtv?_ ayON!u=ZOH*P7jIMAdQ}`elF{r5}E+oVH#fm diff --git a/graphics/pokemon/lugia/footprint.png b/graphics/pokemon/lugia/footprint.png index e6642ed07f1cd991dc6bcd8dc7bab0bd1c64f894..bb807c6dd543deb9a98bc751d3a3b3ed7cc4d692 100644 GIT binary patch delta 91 zcma#gpCB2=%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U@r;B3<$IRpeAjnC0aQA@1 r?q>?lQ8gHBT4E5RRG2KmN~u7;k%6y}r%;9S{GFg)f-xMgC53Uts@@ c=l_3ZhHEE;b>&2*?tyfAy85}Sb4q9e02~S&5dZ)H diff --git a/graphics/pokemon/lunatone/footprint.png b/graphics/pokemon/lunatone/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vgO-~oc5RRG2KmN~u_`If#|1XdHElIl##(x?X+W%4b!rbxX f;0d{we^;0pes&0N{cnBs9!RsNtDnm{r-UW|)(jyM diff --git a/graphics/pokemon/machoke/footprint.png b/graphics/pokemon/machoke/footprint.png index d9009d3e19ccdb3a3744bea78bf0ece180b8d59f..5cde0083d574b77244440bfe9e6004f60b797c6b 100644 GIT binary patch delta 92 zcmYc+m>?O>%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM3981i(?4K%;W?hNKbfBp73D* sfdl^;TW%=6VC0cyP<+P5X28JkT95OE{nKlcfEpM)UHx3vIVCg!0L8f=+yDRo delta 77 zcmXR&oFM7J00ib8ht2>g4Nn)x5RRG2KmN~uc)Y%i|F@*w3*(vx>GgE=b6Mw<&;$Ts=^cIm diff --git a/graphics/pokemon/machop/footprint.png b/graphics/pokemon/machop/footprint.png index 8b2808553b5498ecfc464696ab5f03a82de570f4..9bb3ae06333f26a7cfd5d889dbcce600a4a8b333 100644 GIT binary patch delta 86 zcma#bnjjg-%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*Vgr;B3<$IRpe2c{l&i5c<+ n2K5YzWeQacZVm_8b_g-7KF>bO;M+N6pi%};S3j3^P6gMNb#U5RRG2KmN~W?E81q_|L@jABXv!>>E7fdK#L(7ML;w Wu9xsI_kNcS(&Xvt=d#Wzp$PzrHW}yu diff --git a/graphics/pokemon/magby/footprint.png b/graphics/pokemon/magby/footprint.png index 655d0ca2b84422a87f978db6a4a46e4ca7d0f71f..45e1a343e083c3d5fa6fd69ca6a9ab2eaa76a7cd 100644 GIT binary patch delta 82 zcmaz@n;_}S%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VYr;B3<$IRpe2c{fOg(LqO j8viqkFy8FpJ>kXB70V{cmiL+osEonW)z4*}Q$iB}EQlH` delta 68 zcmYd`m>_A-00ib8ht2>gc~2L|5RRG2KmN~W?5jJ+zEJ)XkNl5?94G#TpKn;g#!##% Uc~WKR(p?}ep00i_>zopr05+)@)c^nh diff --git a/graphics/pokemon/magcargo/footprint.png b/graphics/pokemon/magcargo/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vgRZkbk5RRG2KmN~u_`A04{Ab4(%{C&o58M?xPViT^*?;Bv a|DTzGYm&$Y;~d{GkVa2eKbLh*2~7YfXB<8N diff --git a/graphics/pokemon/magnemite/footprint.png b/graphics/pokemon/magnemite/footprint.png index f710e502832073b9517ea3df1521259e00ef78fd..3f8f930cbee499d9c468f4931a20183279deb790 100644 GIT binary patch delta 78 zcmWGenjq=P%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*Vcr;B3<$IRq}0}MTUJZCr+ f*e0-S3S?xE$zb$cdRt~cPzi<Dnm{r-UW|mq8by delta 63 zcmYcao*-$(00ib8ht2>gDNh&25RRG2KmN~W}uT%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VQr;B3<$IRpe2i6{Ti5bEY lH@GDtSR7O)@QOGxF?cLv_Lko^K>(gMNb#U5RRG2KmN~Wl>ECn{fF`Vhwk==-+xySI>FYZpvl0n X<%Z03lhQ^1L7F^W{an^LB{Ts5gbx}p diff --git a/graphics/pokemon/makuhita/footprint.png b/graphics/pokemon/makuhita/footprint.png index 3da20ccb317125c24760c5cb14189361dc6bbc69..4f2aca69ec30ea5169cdd41a4758796a08ed52b0 100644 GIT binary patch delta 92 zcmYc+m>?O>%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM3981i(?4K%;bcI1{St9ex4e8 ti6?aiC;mG+{;_xH_{+@vm~nv>gHRC9uGLblbAcKdJYD@<);T3K0RVGd9_0W4 delta 77 zcmXR&oFM7J00ib8ht2>g4Nn)x5RRG2KmN~WY^x`K9Xd8Lwn;D?vfz-uK1oIlsEfhV)z4*}Q$iB}PpTl? delta 80 zcmXR-nIP%S00ib8ht2>gZBG}+5RRG2Kfca?xZ3vc^$LMs0_Q&z+8uuXTj7iLyodcZ hhvlmUeueWp|7Wyz6F**^bX6Rr-P6_2Wt~$(696g*AiDqn diff --git a/graphics/pokemon/mankey/footprint.png b/graphics/pokemon/mankey/footprint.png index f02036af503a8618ff23ddf0eb1a09426c978b50..4881d17c33cf3dc42ff0754acaf2a6f862383116 100644 GIT binary patch delta 105 zcmd0+ogkUQ%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U~r;B3<$IRq}goFtb5;kl| z+^{im!b%3kef&Is_$6-e8*DH)*kIfsV9(4f&&(_xpvlazsFii2y-0BvP&b38tDnm{ Hr-UW|Lc1Z; delta 90 zcmb=;n;;p=00ib8ht2>gQ%@Ji5RRFmhYST76nIz;7B{dgQRo#))D&=3HRWS`YC02Ai8-k$RJNwKbLh*2~7a|;T_=s diff --git a/graphics/pokemon/mantine/footprint.png b/graphics/pokemon/mantine/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v`AWYGS@9> delta 64 zcmYcZnILJ+00ib8ht2>gX-^l&5RRG2KmN~W6#jer{D*YA!}67F_1`jr7%n!+&b)Bb Q_a;cWr>mdKI;Vst0QjpI>i_@% diff --git a/graphics/pokemon/marill/footprint.png b/graphics/pokemon/marill/footprint.png index a09d8f2c0187020e679dc1dd4434a05d24af92af..f70b3ea55d540bcc40a444bc5a1dab03200e6e77 100644 GIT binary patch delta 80 zcmWGdnIP%S%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VIr;B3<$IRq}2F7P>Y~PqU hSe`fuC^H)|F!WflYWc2_a{(%1@O1TaS?83{1OT)67To{< delta 65 zcmYcZogit$00ib8ht2>g8BZ6-5RRG2KmN~WZ2EV__|FD+1qJb@e+NYx1Q`llq;_a< Ro%RQ*_jL7hS?83{1OV3$7C`_2 diff --git a/graphics/pokemon/marowak/footprint.png b/graphics/pokemon/marowak/footprint.png index fbde41d04b5ae5170d314a631c21e1f9db79b3d1..e05d5d0005f667cac5ce2580072b525769dc4138 100644 GIT binary patch delta 82 zcmWGbn;_}S%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VYr;B3<$IRpe2c{l&i5c<@ j0>9Z=n2H)7889$xsN~>~F^h5nDr4|;^>bP0l+XkK?+O?8 delta 66 zcmYcbn;>b+00ib8ht2>gSx*gMNb#U5RRG2KmN~W?E81c*ybbqLiRsA>^A}h0-m(n2JkYN WT8Uf`yjgMrq{-9O&t;ucLK6T|7#L9i diff --git a/graphics/pokemon/masquerain/footprint.png b/graphics/pokemon/masquerain/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VKr;B3<$IRpeAh0@cU=o8< xjl9H;UfpgT~8Os5RRG2KmN~uxZd{g`=1J5CeDAzEcB~p{=@mUhxsep jgWltB!5RRG2KmN~W?D*#xV0&0zVH5kp`h+j?9j_c8Ik1Fr YGE~l#ocLpNKoCfqr>mdKI;Vst0Fclbwg3PC diff --git a/graphics/pokemon/meditite/footprint.png b/graphics/pokemon/meditite/footprint.png index 034cb0df8db238d6009b91e340d55de7355089f7..4cf72d9aef9cc848fdd1c1d6278bd326b12d0f04 100644 GIT binary patch delta 84 zcma#dm>}uT%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VQr;B3<$IRq}2F7R1Ja70N lI{q^=ZLDwLVoE*8z;JIemzZ;EQU_2WgQu&X%Q~loCIDie8rc8< delta 69 zcmd0ZoFM7I00ib8ht2>g1y2{p5RRG2KmN~WZ2EV@_|F9Ph5UawzBJ2gaZF*=W@eCk VEqZ1~?;>-M9#2<4mvv4FO#ne$7!Uve diff --git a/graphics/pokemon/meganium/footprint.png b/graphics/pokemon/meganium/footprint.png index 39303ac4fa069d961f8b65445136b3d9bed42d79..1592e145c05107d95cc29d4ffd4d2f71eb52d28e 100644 GIT binary patch delta 91 zcmYeypCB2=%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U@r;B3<$IRpe2IgaIY%isG szST=Ssc-PGU@B_t_|MGznX$u(LA{!1al}8x6rg$rPgg&ebxsLQ06(A|^#A|> delta 77 zcmc~#oFM7J00ib8ht2>g4Nn)x5RRG2KmN~W?D%)p*d{RD;=q{?4YDqW1SfF2$p4W1 dcf+_Ll!@UQv#@gRZkbk5RRG2KmN~W?E81s_|Js&AENw9|8F#3xc^syC6PJx b|9^Id!s8NmtUg@J1Znhi^>bP0l+XkKK7Jl8 diff --git a/graphics/pokemon/metagross/footprint.png b/graphics/pokemon/metagross/footprint.png index 07f91d604f6dff45dc0f8aa2acd8a39f29e4ef36..fd7039efd32dee848261a7583f5f403330e99b01 100644 GIT binary patch delta 88 zcma#fnIIX=%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VGr;B3<$IRq}l!Syl2E}j8 p3PLAbnOTh#zBu+hWRRY~&QNro)t*g0IRvPf!PC{xWt~$(69BBM8leCH delta 71 zcmd0ao*?PO00ib8ht2>gB~KT}5RRG2Kfcd@=x@vMcLV!Ghj;ZMSN==1{E#=g@t>uL Xv1`55;@6gau^?TZu6{1-oD!MbP0l+XkK5lt5P delta 72 zcmd0bnIP%R00ib8ht2>gWltB!5RRG2KmN~WZ2I>%{YNmr)Bgk|hcAC@4u5>i^L+kc ZSB7&=vNwNAN{55AdAj?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vY~PqU kSe`Hm3QI6b_5_47On<mdKI;Vst01+G*+5i9m delta 68 zcmYd~m>_A-00ib8ht2>gc~2L|5RRG2KmN~WZ2EV__|FD+1qJbre@%iDKJu^PVMv`P UxuqhqzXhbl)78&qol`;+06eM~rvLx| diff --git a/graphics/pokemon/mewtwo/footprint.png b/graphics/pokemon/mewtwo/footprint.png index 0f7573dd3b9663a98152411aa68ba6474e86f3d8..bedffad65db4a03110a8244148a231b295331242 100644 GIT binary patch delta 97 zcmYc(ogf**%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*V4r;B3<$IRq}tjY?_k{wbK5)uq={&S`N=z8Q1)WzWG>gTe~DWM4fM%N*{ delta 80 zcmXR-nIP%S00ib8ht2>gZBG}+5RRG2KYq@Cc(}5S|82sN^Bhj|-R7Ub hlJbXfQB~Xj|BM3lqO~ti=U)M7_jL7hS?83{1OO-AA(H?A diff --git a/graphics/pokemon/mightyena/footprint.png b/graphics/pokemon/mightyena/footprint.png index b39af65bc021851d7d0e440e9623123885884c37..f7693643515a6b54f97773722dc74bd7ee6d3170 100644 GIT binary patch delta 110 zcmXSHWSk(G!OXzGplX||1fm| zB#)wGjzopr06cCeA^-pY delta 94 zcmZoFVdQ&MBb@04mQX%K!iX diff --git a/graphics/pokemon/milotic/footprint.png b/graphics/pokemon/milotic/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v?0 hXZRO%d}Nqq!w|Zh`Tf@msR2Mm44$rjF6*2UngI4J8iD`- delta 66 zcmYcZn;>b+00ib8ht2>gSx*EE<{D*YA!}66HztYb)tYTnTeqH+W Timcl=KpH$<{an^LB{Ts5G9?-v diff --git a/graphics/pokemon/minun/footprint.png b/graphics/pokemon/minun/footprint.png index 1071b8069e0e22818c1ee50c9958c643828a02fa..3a2365e1685731ea78a0f4d297a9670310477e63 100644 GIT binary patch delta 81 zcmWGbognGM%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*V2r;B3<$IRpe2i6{5o-^zc iH{=}zC-90mGBFf)v)U~Sm%R#9#o+1c=d#Wzp$P!a(-+JD delta 66 zcmYcdn;>b+00ib8ht2>gSx*ECo{YUco56*I34LJ)qCNVK|ewJFI Sc-m_wNQ0-VpUXO@geCwD2^bjw diff --git a/graphics/pokemon/misdreavus/footprint.png b/graphics/pokemon/misdreavus/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VKr;B3<$IRpeh9)+)K2DxV x<^mn%Y|QW31d{3*oX)UI%#fD2At`Y~g5ggFm#j5^w**iVgQu&X%Q~loCID-x94G() delta 81 zcmXR(ognGM00ib8ht2>g9Zwg>5RRG2KmN~uSZ{mydre#VD~>Okb01E&=lDB;eWCp~ ip88jkb$`--{FG;46carg1y2{p5RRG2KmN~W?D%)p_|HamKl~4u`4*LFfdH`!{+&Irspf5N(N6?KbLh*2~7ZLbsJy+ delta 70 zcmd0dnjq=O00ib8ht2>gMNb#U5RRG2KmN~W?E81s_)k~*k0<9pG|G3?ooHs6c!hx> Wr%7_=1P3=ckS0%8KbLh*2~7aIX&V;+ diff --git a/graphics/pokemon/muk/footprint.png b/graphics/pokemon/muk/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vkHf delta 74 zcmd0en;_}R00ib8ht2>gRZkbk5RRG2KmN~WYgTe~DWM4f6fYcv diff --git a/graphics/pokemon/natu/footprint.png b/graphics/pokemon/natu/footprint.png index f17821fc00dcc247dd6c8179d1696d3c5e211d39..348068d1c534d734f3eb7d61708f6a5172252f9c 100644 GIT binary patch delta 79 zcmWGZo*?PP%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U-r;B3<$IRpe2UZ`xfFm^w gEfUfPI28FAoKG?bEXkU}3RJ`3>FVdQ&MBb@0HoX(X8-^I delta 64 zcmYcenILJ+00ib8ht2>gX-^l&5RRG2KmN~Wl>B>_-?jdYFVdQ&MBb@0HLWB5dZ)H diff --git a/graphics/pokemon/nidoking/footprint.png b/graphics/pokemon/nidoking/footprint.png index 577e14f302b4639921e6bff5c839e751ab4f7083..c0e6690e10e666ea9d9e0b931728022815865b09 100644 GIT binary patch delta 91 zcma#cpCB2=%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U@r;B3<$IRq}oP>n>0|)*$ tI{ssyvgJRstAiN}f1}#YmhO$<^Pg!?v>H^g>c)I$ztaD0e0sy27AbtP< delta 74 zcmd0gn;_}R00ib8ht2>gRZkbk5RRG2Kf=#{aGv*&+5RwdnMP%UWLHBD2U8dGRff=i a|M?l(ehPd@o7-gt(&*{x=d#Wzp$P!Gry5rP diff --git a/graphics/pokemon/nidoqueen/footprint.png b/graphics/pokemon/nidoqueen/footprint.png index c3156e6215e1f951c582334ed8cbd33489f84c3e..a5b255592946a350acef6368360b7defe219e8d7 100644 GIT binary patch delta 94 zcmYc)njjg;%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*Ver;B3<$IRq}gam;H2@@tH wOjw<;;eT_}lllgM|Lg)u^#=~zUHq)$ delta 78 zcmXR)njq=P00ib8ht2>gO-~oc5RRG2KmN~u__w_6`FTmXZN@SQZjSsn9A7ZobNro< f{v-VShyV5rFKUH7y0)gKgEV`(`njxgN@xNAr^g=z diff --git a/graphics/pokemon/nidoran_f/footprint.png b/graphics/pokemon/nidoran_f/footprint.png index f673df1128c0dd0eb1c4453f406ba2a3bea78a65..d0111077b5e16ed781320c4918c8a722552a547a 100644 GIT binary patch delta 82 zcmWGfn;_}S%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VYr;B3<$IRpe2UZ_Go-^zc jH{=}zC!D>}pu^9Q{hH-}!HU={pfUzeS3j3^P6gIZqeI5RRG2KmN~Wl>B@5{DbP0l+XkKT!I>A diff --git a/graphics/pokemon/nidoran_m/footprint.png b/graphics/pokemon/nidoran_m/footprint.png index 874c6078172949c6f4b6df926e31b40bdd692131..a6b3e3b4ad5586c930fd1e7ca2ae6d3f724308fc 100644 GIT binary patch delta 84 zcma#dm>}uT%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VQr;B3<$IRq}21Ye@fh4;F l2mUcMHpD0-g1y2{p5RRG2KmN~WZ2I?(eWCp~9{VSP94A;8)qmwNNM%TN VllX35l6w%O$J5o%Wt~$(697dg7gRZkbk5RRG2KmN~WZ2I>%{l~QPA5PAH$Y{+}`+$9+{3o9O buM|%)I7W({*pxZ#7)Yb1tDnm{r-UW|Rl**5 diff --git a/graphics/pokemon/nidorino/footprint.png b/graphics/pokemon/nidorino/footprint.png index eaa67b3791b4933647c59e160a8a1b42a5578d52..9ab80e766aa01039fd853c90cf08cfc8c5fd8d04 100644 GIT binary patch delta 94 zcmYc(njjg;%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*Ver;B3<$IRpe24*)lwsV|3 wd#oj%)Ej)LXP79!lEN(bo0;txTZa?FgCZ_PuOri&fm#?mUHx3vIVCg!09&XXWdHyG delta 80 zcmXR)nIP%S00ib8ht2>gZBG}+5RRG2KmN~W?D+RL{l~QPA5PAF$Y_0-y-tAB(ZNjM h?}YRp;pZ8`I2mMlL=V2?etZR_-P6_2Wt~$(69DKW9`67E diff --git a/graphics/pokemon/nincada/footprint.png b/graphics/pokemon/nincada/footprint.png index deea05721e666cdff97872ffbea1eecd620b4fad..69d2b0491dd02815656ec8fbdee018f52a538fb2 100644 GIT binary patch delta 86 zcma#anjjg-%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*Vgr;B3<$IRq}2F9OkY|r?4 mcuaYCiV{K&ANbM02-KOO$-Kfn>dzaXQU*^~KbLh*2~7Zo7aM8- delta 72 zcmd0bnIP%R00ib8ht2>gWltB!5RRG2KmN~WY?8ZT{O4i%kNamn{8yAPHU2X>z2WpB Z0fwoeGFCIKceaDHdAjFVdQ&MBb@06QWcMgRZ+ delta 76 zcmc~xm>}uS00ib8ht2>gbx#+^5RRG2KmN~WZ2EWAxaL!O#Q{E7{@apv^Vt{9|1A0M dhVg+Zj10l0lIrt5SbYF#^>p=fS?83{1OP$r9UA}u diff --git a/graphics/pokemon/ninjask/footprint.png b/graphics/pokemon/ninjask/footprint.png index eacba16dc87057ad313731b6d7a45aaa64a7cabd..f582fcc058c498573e3f924938f72c83b3192adb 100644 GIT binary patch delta 87 zcma#fo*)^-%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U*r;B3<$IRpe2WD2D9(xH1 oEeVM_1B3d63HApL^egc)WPM`UJtO^E1yC)6r>mdKI;Vst0EA~7eEgB~KT}5RRG2KmN~WWc_OVCprDc{c|7Y&wa>mf0((tjbDR{ XVN#E@x`?q!AV`;|tDnm{r-UW|l%yE< diff --git a/graphics/pokemon/noctowl/footprint.png b/graphics/pokemon/noctowl/footprint.png index 89ed409e986e46064eea8fa700354b218129423d..0386b465ac0199f04483ed8d03d583752220c61f 100644 GIT binary patch delta 98 zcmYc-n;;p>%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*Var;B3<$IRpeAV^6_$V>2e ym#8uCaKis)$A8Ss|Ct4n>=}gG6&6StFfhE^#PMUg*0ae#Z492SelF{r5}E*USt3>d delta 81 zcmXR*ognGM00ib8ht2>g9Zwg>5RRG2KmN~uc)z~Q{wq&$mt@r>NxlunHV@K&DDXSk hzj1sdz!LIVzJ-DBjM%Gmg;GzDeot3Fmvv4FO#s8P9e@A; diff --git a/graphics/pokemon/nosepass/footprint.png b/graphics/pokemon/nosepass/footprint.png index 9b9ad27082eb00b534f55cdaeec20639a82b34cb..ad8673add30396f0784450cf19a49cdf9c7dd49e 100644 GIT binary patch delta 91 zcmYeupCB2=%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U@r;B3<$IRpe2Ig7bx6{Xeq@*9rz6hNsz_+bxy~F9E7&@O1TaS?83{1OO@59Wnp_ delta 76 zcmc~#m>}uS00ib8ht2>gbx#+^5RRG2KmN~W?5Mk8Tr(lPLgD;}3G*Ko+A}fkl>gxv cgIZqeI5RRG2KmN~WY^pn9Y?HvgkogP;iy))d!6}Rk-%UhL T?_Sd<2h!o`>gTe~DWM4f%i0yF diff --git a/graphics/pokemon/nuzleaf/footprint.png b/graphics/pokemon/nuzleaf/footprint.png index b35288e05947ef6d7fcbbd6f4c392d0152384447..bd9be61709573c7903b283cd2c5f98f34ca7ca2f 100644 GIT binary patch delta 95 zcmYc-o*)^;%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*US6G7^>bP0l+XkK;S(S- delta 81 zcmXR;ognGM00ib8ht2>g9Zwg>5RRG2KmN~u7;k%6zq-x;6_0#Fhiq3JgP=XfUq+?M hw)$^84paaCXJ&YyEMm6jfcP4aeot3Fmvv4FO#q%p9Z&!O diff --git a/graphics/pokemon/octillery/footprint.png b/graphics/pokemon/octillery/footprint.png index afa1f5433c3e8e975aa346658e2395ab26ceb1e4..2306c5b0bef512b1cd89356d1714be1efc92f3cb 100644 GIT binary patch delta 94 zcmYc-njjg;%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*Ver;B3<$IRq}24*=nIXN~n vMYd=DJm=~qF6BzR(UtgNZ(tyw;K0OCyp`2=*DKRwKrIZOu6{1-oD!Mg9Zwg>5RRG2KmN~W?6Nbi`FG~SXWhf{ac#C|c#QdsWh~Bp iXq^AB-^n1GcxvXg2~QWt5RRG2KmN~Wl)Y*Ehk3F6SDyL{sf@ec$x7bbD{lu< N>*?y}vd$@?2>^6j6*&L^ diff --git a/graphics/pokemon/omanyte/footprint.png b/graphics/pokemon/omanyte/footprint.png index f5eb9fdba0aa321d78f34dbfb6b2e9ecead8e81f..ec2dde19c66618e61c2d61194f93a2376d58d515 100644 GIT binary patch delta 76 zcmWGYm>}uS%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VMr;B3<$IRq}11#(k5{)Yu dyLp(I8H^Q~m`mD~rUMl)c)I$ztaD0e0suob6-595 delta 60 zcmYcYm>_A+00ib8ht2>gaZeY=5RRG2KmN~Wl)Y*Ehj~#IPoV%4!>L%=`%gY?Uk+00 M>FVdQ&MBb@08XqF&Hw-a diff --git a/graphics/pokemon/omastar/footprint.png b/graphics/pokemon/omastar/footprint.png index fdd911ecf7c7fe51a86b733ddfc3df41f511fa01..e587f45031f2e2401775e4e27a5f650796da3432 100644 GIT binary patch delta 81 zcmWGdognGM%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*V2r;B3<$IRpe2WEB&33&qp iX2A&;8}v>dU|>j?!hF)5S=&t;ucLK6VRofn1x delta 65 zcmYcdogit$00ib8ht2>g8BZ6-5RRG2KmN~WWW8zpXL9-vW)}xHTjpJF>KW#|l99Bm R;d~EL@9FC2vd$@?2>{7!7Eu5I diff --git a/graphics/pokemon/onix/footprint.png b/graphics/pokemon/onix/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vcY`rW?!c2dZK4boFyt=akR{0E~|oZ2$lO delta 63 zcmYceo*-$(00ib8ht2>gDNh&25RRG2KmN~WJuQJhOI9n^*(3{Y< P8l>9O)z4*}Q$iB}&%qar diff --git a/graphics/pokemon/parasect/footprint.png b/graphics/pokemon/parasect/footprint.png index e0f1715f2f04f00c853813b74b6d1e4984791432..ed9221adef53034ade55a9e652085f93d4ca3c59 100644 GIT binary patch delta 79 zcmWGdo*?PP%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U-r;B3<$IRpe2WEDM4#5s7 gi5Zd-H!dt?^k!x{bF|y(IZzFQr>mdKI;Vst0KPRD4FCWD delta 65 zcmYceogit$00ib8ht2>g8BZ6-5RRG2KmN~WWWCvZ!Cqli`j5}^AF9uKQ_rxeT2^e; ReP?cvdQVqBmvv4FO#uAq7$pDz diff --git a/graphics/pokemon/pelipper/footprint.png b/graphics/pokemon/pelipper/footprint.png index 54718d259e56a8cf58d8809950e3186a62d12ab5..bfb9703f55f6465ba8dcd356eb562046e1ebb5ad 100644 GIT binary patch delta 99 zcmYc*pCB2>%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U{r;B3<$IRq}l!Syg2?Bc# zD%7?g{KqeHlKCRPz$5lW{5)?QzBDxcWMqEK$l#mJ_m*p4^*o?H22WQ%mvv4FO#sE7 BBg_B* delta 82 zcmXRgT~8Os5RRG2Kfcd@7;kyly0lIG6c781g)bNdHa1^iS9p~E jgVE&^PyG|ge>a&KHV6xR-4(y?9LNAqS3j3^P6mdKI;Vst06%vks{jB1 delta 78 zcmXR)njq=P00ib8ht2>gO-~oc5RRG2Kf=#{aGCp%!I;A~A??S3a~~Y#+TJXD!7gys f_|MPtAO71j%x@R=`X!{j6QtSG)z4*}Q$iB}t?(bW diff --git a/graphics/pokemon/phanpy/footprint.png b/graphics/pokemon/phanpy/footprint.png index 70498b18f6b273c127e876706cfde3a76b70fa84..61eb3ebac37cc186126f1fe4df697b22dd8f8717 100644 GIT binary patch delta 80 zcmWGdnIP%S%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VIr;B3<$IRpe2i7g8BZ6-5RRG2KmN~Wl>9p({l|fR2M0ZYzZ=`N85k0$N#x$1 RW?BnU@9FC2vd$@?2>{xz7RUeq diff --git a/graphics/pokemon/pichu/footprint.png b/graphics/pokemon/pichu/footprint.png index 823c7e32d4a43522b56932071ae5bd7df9342816..62d82450417cf9ea8ec47bd18a3f5c2772d1c2a5 100644 GIT binary patch delta 79 zcmWGdo*?PP%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U-r;B3<$IRpe2R2?FA9jfu g69tl)nY9=gD$-dlSf^F?0@W~hy85}Sb4q9e0E1Z;bN~PV delta 65 zcmYceogit$00ib8ht2>g8BZ6-5RRG2KmN~WYR;go~~gFq5@+u_^Oo&)tTc)I$ztaD0e0szMsAaei! delta 80 zcmXR;nIP%S00ib8ht2>gZBG}+5RRG2KmN~uSZ{mydr@2dGoJn_jxU(4MgBfW|Dk;T h!+E)`hExCkvopMv5sBGV_H!CYyQiz4%Q~loCIC5&B3l3e diff --git a/graphics/pokemon/pidgeotto/footprint.png b/graphics/pokemon/pidgeotto/footprint.png index c507f72b8308b7b3cebc55ee37efa2fd298ddfc0..8d9cd78e0d839a121abfa1cbfc21df1113712585 100644 GIT binary patch delta 88 zcma#enIIX=%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VGr;B3<$IRpe24*ovfk&Ge q6un=x(4;|-nPEy8`+=58^F)A(89ZJ6T-G@yGywp{5F8W$ delta 73 zcmd0aognGL00ib8ht2>g6;Bt(5RRG2KmN~W?5Nw%zOete;|q3sk-rnuf28xf{(pV& Zg*`*2hJ@12-Jw<>eV(pqCb(4;|-gMp!F2^$Ch42F83Y6eeNKbLh*2~7al+#4_e delta 74 zcmd0en;_}R00ib8ht2>gRZkbk5RRG2KmN~WY^vMOzOete;|q3sj=vMrf28v}{eOLs aV+jvK*Dc9gg@R1lAdQ}`elF{r5}E+)KN}qY diff --git a/graphics/pokemon/pikachu/footprint.png b/graphics/pokemon/pikachu/footprint.png index a8ee2e4ac9a4e18dddd27fb3126b657980aa7d01..9145eff5b81ea35c86a21abd98279868313863ca 100644 GIT binary patch delta 79 zcmWGZo*?PP%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U-r;B3<$IRpe2WDO#A8v^m g@(Kcv8B;PDihr>d1S!-s0@W~hy85}Sb4q9e0F>?*Hvj+t delta 64 zcmYcenILJ+00ib8ht2>gX-^l&5RRG2KmN~WWW8$qr#JnFa=*j>Hxoq}7&=>|iu`}a Q&IT#>boFyt=akR{0L)ky1^@s6 diff --git a/graphics/pokemon/piloswine/footprint.png b/graphics/pokemon/piloswine/footprint.png index 0b7405eceb5df61de5729b7af406ff2fac69fd7b..122f3e3529ad21060ec6f4e4890d309c99eef7eb 100644 GIT binary patch delta 89 zcma#cogf*)%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*V0r;B3<$IRpe2PPdZo*Gu3 qKk^b!>Kz0p@VdO=mynQF@M2h`z~Q^TJ-h&@n!(f6&t;ucLK6U@`x;09 delta 74 zcmd0en;_}R00ib8ht2>gRZkbk5RRG2KmN~W?5n$<{^Q2^4~_F5GFpo;-gNllJnvz= btqU(hbe#CqBbh(0gEV@&`njxgN@xNAC>$Lt diff --git a/graphics/pokemon/pineco/footprint.png b/graphics/pokemon/pineco/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vg6;Bt(5RRG2KmN~W?69*>uc(k{v17Ve$kw62@^@qVqWZ56 ZdJJ36Nv}6%TwV#%=jrO_vd$@?2>^-#8Cn1U diff --git a/graphics/pokemon/plusle/footprint.png b/graphics/pokemon/plusle/footprint.png index 1071b8069e0e22818c1ee50c9958c643828a02fa..3a2365e1685731ea78a0f4d297a9670310477e63 100644 GIT binary patch delta 81 zcmWGbognGM%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*V2r;B3<$IRpe2i6{5o-^zc iH{=}zC-90mGBFf)v)U~Sm%R#9#o+1c=d#Wzp$P!a(-+JD delta 66 zcmYcdn;>b+00ib8ht2>gSx*ECo{YUco56*I34LJ)qCNVK|ewJFI Sc-m_wNQ0-VpUXO@geCwD2^bjw diff --git a/graphics/pokemon/politoed/footprint.png b/graphics/pokemon/politoed/footprint.png index f97b789949904a280aa0feb94a9a63a65b32adee..9499c60ecc1a794d67de8f8e5b2870432838a8d8 100644 GIT binary patch delta 92 zcmazqm>?O>%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM3981i(?4K%;bcegakVVr#4$2 s(ITF&|0T}cH`rj`z@?AHI!N7?7>#s$P=0FV$p00i_>zopr09Y0t6aWAK delta 75 zcmXSjpCIYR00ib8ht2>gHBT4E5RRG2Kf=#{I4;+6PSkjdeM&|`iiP5t56*I09X$V(@hJb6Mw<&;$U+!xtF< delta 66 zcmYcdn;>b+00ib8ht2>gSx*gMNb#U5RRG2KmN~WYbP0l+XkKzqlMk diff --git a/graphics/pokemon/poliwrath/footprint.png b/graphics/pokemon/poliwrath/footprint.png index 8f562fcef69f3b823f11712c9d16b2a50d0fb07a..393f8191c8639eaff28e5274b4537be56478e8a8 100644 GIT binary patch delta 87 zcma#ao*)^-%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U*r;B3<$IRq}h6Z+?9(jow o^$G%y`8RL~*fJ;{V-_f7;9}ucdLFjwA5blWr>mdKI;Vst0DyZMMgRZ+ delta 72 zcmd0fnIP%R00ib8ht2>gWltB!5RRG2KmN~WYtZxRF*Cb2K9|CW&Y ZpYd~*$bm20K7({Ic)I$ztaD0e0s!rS9S8sb diff --git a/graphics/pokemon/ponyta/footprint.png b/graphics/pokemon/ponyta/footprint.png index 906ee7a5b5306d3ac20589488b697be0ff9b74f4..593b4eae8155988bea5aace81c0955245325af23 100644 GIT binary patch delta 85 zcma#boFEy%%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VAr;B3<$IRpe2c|RZ5;x=< m1pc#YFm1XiBr!wgffvK_3G8y*T0#myl?gMNb#U5RRG2KmN~W?E81a_|F9Ph5Ua4SW^DaIsc*DK8BYe W^qs^JmsO2iAWfdGelF{r5}E*%wi;>x diff --git a/graphics/pokemon/poochyena/footprint.png b/graphics/pokemon/poochyena/footprint.png index c4afe995f028c17f3013e5c3adc00383dc796659..820645c7cd1fec261fc47c035127cdded119b561 100644 GIT binary patch delta 99 zcmc~UpCB2>%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U{r;B3<$IRpe24*)lwr6Yt zM)M9PWFAaNJgBg@vGFeh^M7Wxee66sd^`pW43iVt(o=u9{sZb`@O1TaS?83{1OO*b BAM*eJ delta 87 zcmXTVo*)^-00ib8ht2>gBTpB{5RRG2KmN~W?D+RL{YNmrQ~D*zKG}4Ox;YO!?GN); oxAA}Ck$);#_ddNrZ@i!l^|0*UHx3vIVCg!0J?)AbN~PV diff --git a/graphics/pokemon/porygon/footprint.png b/graphics/pokemon/porygon/footprint.png index 02243e3bc455be68400e4e593bdfe4bb84da39f5..39764c24a40afa748e9927a8fb0adbab7d18ff23 100644 GIT binary patch delta 83 zcmaz@pCIYS%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U_r;B3<$IRpeAjnHd_}9>M iL-7S8lc8M#12cpCM(%aG$_{2gbqt=aelF{r5}E)=!5QWN delta 68 zcmYd~m>_A-00ib8ht2>gc~2L|5RRG2KmN~u=x=*izE0!|bJG*S7xQhH1D^i>&v5sw Uh{<=RnlB(Np00i_>zopr09;fWWdHyG diff --git a/graphics/pokemon/porygon2/footprint.png b/graphics/pokemon/porygon2/footprint.png index f92224af35c43509cc3e19c400fff249400a23d2..40f947b463556e97a3f621928aebadc69badbfca 100644 GIT binary patch delta 83 zcmWGfpCIYS%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U_r;B3<$IRpe2IgnXJa70H jbo^)LYU*abYG43V{)YRFk)z`spgIOmS3j3^P6 delta 67 zcmYcfpCD<+00ib8ht2>gIZqeI5RRG2KmN~W?D%)X_|Js)Mf`s>IP~~JKL598_%=!S T8*5-l7D$JutDnm{r-UW|F>n~C diff --git a/graphics/pokemon/primeape/footprint.png b/graphics/pokemon/primeape/footprint.png index f4c90ee17574c08ea0a8fb14feb3bacda9eccd69..76f77d387ec8010c70b953c9558510559de22173 100644 GIT binary patch delta 95 zcmYc;o*)^;%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*Uzopr0E;~x@c;k- delta 79 zcmXR;o*?PP00ib8ht2>gEl(H65RRG2KmN~uSZ{yWy{xVM4Nw0KNjnBX`@`&&0>2Xb f9qL~>zW86yaI;&)N^oA&G>~pjS3j3^P6gHBT4E5RRG2KmN~WYDigP ct=ROR;ok<)O1J9MUqL!OUHx3vIVCg!02>n>CjbBd diff --git a/graphics/pokemon/pupitar/footprint.png b/graphics/pokemon/pupitar/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v_A-00ib8ht2>gc~2L|5RRG2KmN~u7;bY|y}phAkHtm)N`YU==Rf?nXSi@h U==*!QZyq2mp00i_>zopr0B)ljB>(^b diff --git a/graphics/pokemon/question_mark/footprint.png b/graphics/pokemon/question_mark/footprint.png index 7c4f45eaad890c5daa66312196220449bae97634..8da752a46b30d4f1163cdadd9b84f2d418bd9e75 100644 GIT binary patch delta 107 zcmd0+pCFmW%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U?r;B3<$IRpeAjnBDusa-3 z+rO|#u9=aa`8PA$PkA0AF`j9~5^r)P-eft%?BtqY!OYCSdzM>PaQ`eBpne8VS3j3^ HP6gQ%@Ji5RRG2KmN~u7;k%6GPzC6wQZYA+voX`btjB%64EPb s<~)orI^1}ehkdr=o%Xj1AOHVne7{lT=&pFNO(26jUHx3vIVCg!0AWQXkpKVy diff --git a/graphics/pokemon/quilava/footprint.png b/graphics/pokemon/quilava/footprint.png index 28324dd7c98bfc45dc45be134ce91dbb01426e7b..46c185bffe9e260608a049d2806b42eef920cbda 100644 GIT binary patch delta 80 zcmWGdnIP%S%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VIr;B3<$IRpe2UZ_mo*Zt8 h8}bSQpBYms8OoGcJ8u8Zo&r?F;OXk;vd$@?2>`?K7_tBW delta 65 zcmYcZogit$00ib8ht2>g8BZ6-5RRG2KmN~Wl>ECk{fFfF56*Ip|86L2GcdHrNJR-> RKOqEC@9FC2vd$@?2>{}y7SaF! diff --git a/graphics/pokemon/qwilfish/footprint.png b/graphics/pokemon/qwilfish/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vgIZqeI5RRG2KmN~WZ2EW8_|L@j9|!v#9Q0%uQxBeEP>~iB Tc^B*z4$|T2>gTe~DWM4fAdnZ1 diff --git a/graphics/pokemon/raikou/footprint.png b/graphics/pokemon/raikou/footprint.png index b7081dcd35bb2e252476df282d527b5d729adf85..b7cd9c7dbf4d7aa76f07cb8f2274db828f94a4c4 100644 GIT binary patch delta 90 zcma#gn;;p=%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VWr;B3<$IRpeh9)+)Wvo1J rgHBT4E5RRG2KmN~uSZ{myenp%7AB8WCvW*H#4qx2oJ)CdL b?D4do;enor&W8<=%pjefu6{1-oD!MgVNVyw5RRG2KmN~W6#l!KT`?z!;ptqt`@1t0zkrl^y85}S Ib4q9e0QbTY?EnA( diff --git a/graphics/pokemon/rapidash/footprint.png b/graphics/pokemon/rapidash/footprint.png index 3361489fd9fe30cdc6b98a6edf53ce626b9ed607..ffa2c80a9f23987ee5b78e6ffc11a8268e31f14a 100644 GIT binary patch delta 89 zcma#cogf*)%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*V0r;B3<$IRpeAh0`d;D4jz pKX#6r{~a9#92e+BGcijrFvL0XuAVSEa~e=JgQu&X%Q~loCIBr(9mfCw delta 74 zcmd0en;_}R00ib8ht2>gRZkbk5RRG2KmN~u*l&B7y{?V@jY3I-B&#D!<0kv(#tfnV a{_``;w-qus)Vg&8q|wvW&t;ucLK6VJ=o#Js diff --git a/graphics/pokemon/raticate/footprint.png b/graphics/pokemon/raticate/footprint.png index 6628cfdd7563bd2c276372cd55dbb9c98933d1ac..e1462e71a47fbe507217d909bb48a2610e71fa34 100644 GIT binary patch delta 90 zcma#gn;;p=%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VWr;B3<$IRq}hGsUlX`DQJ r%q4!*HwgS@7f7l*aG;`rk&}U8M=<-WxX{ZcK;;acu6{1-oD!M<9G@Lk delta 75 zcmd0cpCIYR00ib8ht2>gHBT4E5RRG2KmN~W?0O|x_uRN9DE-F)J}3JhjxYLc4%=6= bwaog@;HoX*@%?V@T98gpS3j3^P6_A-00ib8ht2>gc~2L|5RRG2KmN~Wl>Gbq{D*A&!~E3(zk<&?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vgVNVyw5RRG2KmN~W6#l!KT`?z!;ptqt`@1t0zkrl^y85}S Ib4q9e0QbTY?EnA( diff --git a/graphics/pokemon/regirock/footprint.png b/graphics/pokemon/regirock/footprint.png index 44da2a57fd99456cc87a3b26569c3b06ece88ee7..d7a4380a77ee37f4c6ddd69b8678063e57936c7a 100644 GIT binary patch delta 97 zcmYc(ogf**%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*V4r;B3<$IRpeAc#G1pr)bm xHxqL^L-P-AjYt0(oCLOourR-8n_$Go#=yLdTXRL{iDsZK22WQ%mvv4FO#ne3Am{)9 delta 80 zcmXR-nIP%S00ib8ht2>gZBG}+5RRG2KmN~u7;bY|zPe5S7tj6s#(MluEY5ZNj8_t_+nc28G7mvv4FO#u76AzJ_d diff --git a/graphics/pokemon/registeel/footprint.png b/graphics/pokemon/registeel/footprint.png index e191faabc874c27330f63af3b9bd51571239febe..7f4ee5797017d5ca3e212745377d2459a8b67753 100644 GIT binary patch delta 102 zcmd0-njo3T%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*Vir;B3<$IRpeAh0`d;D4jz zv8IC!?FTosE1v9CbmeVn;876Q;F!Xs#h{g(z`$_oBuDebE3z&?tqh*7elF{r5}E)p Ct0T4m delta 85 zcmb=*oFEy%00ib8ht2>g15X#n5RRG2KmN~u*l&B7y{_%}amjP_X%^vU49e9HznQJT mlESdl!Eu2|0As+-|Nj|`wu;A33cs}lWQM1!pUXO@geCxZMIjOZ diff --git a/graphics/pokemon/relicanth/footprint.png b/graphics/pokemon/relicanth/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v^wcZJUl!MK5zMi9?$+$57ffo>FVdQ&MBb@0Q&_YApigX delta 77 zcmXR)oFM7J00ib8ht2>g4Nn)x5RRG2KkDZ{thPV=xUQ}J4G+7)1!jdu=|2vf|KL3D eVZ80(|Nj{_OccD(nzyzFq}S8c&t;ucLK6V3XdrU{ diff --git a/graphics/pokemon/rhyhorn/footprint.png b/graphics/pokemon/rhyhorn/footprint.png index 632b753c24f66704784dc8ea326165c9c4b23e65..84e88598c7bb03ba04100dacf814744e3f77a9a8 100644 GIT binary patch delta 81 zcmWGdognGM%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*V2r;B3<$IRq}21YSfwtY+j ilm0idew1(sVPx3xkK

    uG)n_RScf4elF{r5}E)B_Zqg8BZ6-5RRG2KmN~WY^uAT{^JI}6aS5k3(h}RJjLMBAoj$< R>Bl{gdQVqBmvv4FO#loi83q6V diff --git a/graphics/pokemon/roselia/footprint.png b/graphics/pokemon/roselia/footprint.png index bedf2ab695d1eb9a1a5bd7230764362960d7a89c..6ea3494a033b21d5a9875d67a60c250454aaca8a 100644 GIT binary patch delta 75 zcmWHFpCIYR%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U>r;B3<$IRq}0}MU9JZJbF cRLmF{^d~VsdzEp)3MkLu>FVdQ&MBb@09fZ2Qvd(} delta 62 zcmazKnjmS(00ib8ht2>gNlzEY5RRG2KmN~WgX-^l&5RRG2KmN~Wl>B?^{D;Hy9`dtXJuKkF$gpUd^x^bG Qzl$K{p00i_>zopr0Ok@Gp8x;= diff --git a/graphics/pokemon/salamence/footprint.png b/graphics/pokemon/salamence/footprint.png index 2440a370fd6a5ea8af7c21ed6aecde31ffb01417..b943d076537fc11cf10035a23dc51bd57bf89570 100644 GIT binary patch delta 99 zcmYc*pCB2>%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U{r;B3<$IRq}lmvl!2Nd=; z9;{;Lkn}Kku|HwL{{spCnHw8o{;~6%;pO4sVbE6QRs1|fXa!IogQu&X%Q~loCIFq^ BA{+n! delta 82 zcmXRgT~8Os5RRG2Kfcd@=xcXaxV}yKokGb!%fqaNZR~$|*l!4O jocOD7{=@Ql5C7LQT#6PtC}_070AzrttDnm{r-UW|7MCDM diff --git a/graphics/pokemon/sandshrew/footprint.png b/graphics/pokemon/sandshrew/footprint.png index 481de0993e992dae38bf0d34400249a41eb18bb2..030c4165d7593d6529a4591a7be5641e4063a480 100644 GIT binary patch delta 86 zcma#fnjjg-%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*Vgr;B3<$IRpe2c{lAo->?0 nXZR&<*gFVL;C1O?f8fQ?x0UTn*R4B!K&1?xu6{1-oD!MgB~KT}5RRG2KmN~W?ECjN{fF`Vhy6B(`Rg>8HZ{JOZyUqQ XkatqzUDt=nZXjKru6{1-oD!MgMNb#U5RRG2KmN~WZ2I>${fDu9&lAbI56*%Ucpd-0Q9Q*E WWiP%WEwy7lNRy|lpUXO@geCxsof%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VKr;B3<$IN7dH;E^>k_(EG xPV76DP}}ZU#?JhoT_CBR!RZXUK*vVL4hGjYUd~?y*-b!A44$rjF6*2UngA+LAmRW3 delta 79 zcmXR(o*?PP00ib8ht2>gEl(H65RRG27U5?MN>vZv+shMdBH5>5Y*Uo};{d;t{S(I* f{kBYhSFE k&*17{7BGiVjWvy#p>Zv1&KVB5pFouip00i_>zopr06+#AS^xk5 delta 67 zcmc}{pCD<+00ib8ht2>gIZqeI5RRG2KmN~uC@=AMW&0xeZviYR%t!wpUUDFZq57g! U+5a<_b3r;hUHx3vIVCg!0905Swg3PC diff --git a/graphics/pokemon/scyther/footprint.png b/graphics/pokemon/scyther/footprint.png index c6b7730285ade3c17cba3a1d256f04ddbece8ee6..e12c46d3c8dd64bd414a140117f5fd8482cb37b8 100644 GIT binary patch delta 94 zcmYc;njjg;%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*Ver;B3<$IRpeh9))vA)7-A wm2HimS(yLx3rzaY>?)x5o1N_$yTeijiE5t9k0;fh25MpOboFyt=akR{0FZYdKL7v# delta 79 zcmXR)o*?PP00ib8ht2>gEl(H65RRG2KmN~uSZ~X*cXL`r+L;e$=R9P#=CDm@Q{wo} gZhu(5vhDwW#;44}{OVjsJV3fVUHx3vIVCg!0Gm%8L;wH) diff --git a/graphics/pokemon/seadra/footprint.png b/graphics/pokemon/seadra/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v)yX8gMNb#U5RRG2KmN~W?E81axaI--LiRTSEFymt`JEgzH%KwK W35a{W|I1_m(&Xvt=d#Wzp$Py#0T(v_ diff --git a/graphics/pokemon/seel/footprint.png b/graphics/pokemon/seel/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v^7>ED> delta 65 zcmYcZogit$00ib8ht2>g8BZ6-5RRG2KmN~Wl>ECo{YNstQ~md5feGEK7#KD!lDWEJ RfyhpfdQVqBmvv4FO#te}7rOue diff --git a/graphics/pokemon/seviper/footprint.png b/graphics/pokemon/seviper/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vgWltB!5RRG2KmN~W?D)qJXnUByn&lU>^Z!?p|E@KQ{9#$i Z!VtDs;?@4nvyVX9JYD@<);T3K0RXd?8=e3F diff --git a/graphics/pokemon/shelgon/footprint.png b/graphics/pokemon/shelgon/footprint.png index e2d61b9bc8d6975c8e963e0dfa77c73227d899f1..5c7a6ab3f042bc140f4ff4d22c9ac8848be4c0e4 100644 GIT binary patch delta 83 zcmaz@pCIYS%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U_r;B3<$IRpe2i7<25zopr0BtrLb^rhX delta 68 zcmYd~m>_A-00ib8ht2>gc~2L|5RRG2KmN~Wl>ECP{fEN&4~_C&btjDfY;+G}U?^BG U*|Ph4kQ+#gr>mdKI;Vst09Zm9x&QzG diff --git a/graphics/pokemon/shellder/footprint.png b/graphics/pokemon/shellder/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vBngyc@O1TaS?83{1OO9>71IC! delta 56 zcma#?nILJ*00ib8ht2>gVNVyw5RRG2KmN~W6qZeBQ{vHNSRE~6@N{}uT%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VQr;B3<$IRpe2i6{5o-^zc lH{=aAs2UhpHtblzz!2EL9J=UNPaIGogQu&X%Q~loCICgs8jt`0 delta 69 zcmd0ZoFM7I00ib8ht2>g1y2{p5RRG2KmN~Wl>ECo{YUco56<%*KCfxp|JyMpgq30S VKbhXV$;E0QJ)W+9F6*2UngE@!8&CiM diff --git a/graphics/pokemon/shuckle/footprint.png b/graphics/pokemon/shuckle/footprint.png index e26b60bcd3520fce27686fd5c5f174cedd50163f..169bb4cf5b13c995eeea4972d680f9be0899ee32 100644 GIT binary patch delta 81 zcmWGbognGM%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*V2r;B3<$IRpe2c|RZ5;x=x iKGZuXD2QuxurRENU=RFhk+&MCiow&>&t;ucLK6V=rx`y0 delta 66 zcmYcdn;>b+00ib8ht2>gSx*?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VKr;B3<$IRq}goJg9Zwg>5RRG2KmN~u_^-U}^Lfd6^63?I^B(%!9_FtW_?66` i#GLy7z=iw&9rPF)mrIvdlyYqZ>GyQ?b6Mw<&;$T4V<4gc diff --git a/graphics/pokemon/skiploom/footprint.png b/graphics/pokemon/skiploom/footprint.png index efa7f5034220e4a80460ec793d8f11bacf8b73df..544ef0ea6da31e918a22c8d7f0b184006f49e482 100644 GIT binary patch delta 82 zcmWGfn;_}S%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VYr;B3<$IRpe2i6{Ti5c<@ j0@ebu42sX#QYsm0l35$V(r;$~l`(j_`njxgN@xNA>UkJ^ delta 67 zcmYcbpCD<+00ib8ht2>gIZqeI5RRG2KmN~Wl>ECn{f9EYlYPSpxt4!dl(iWc8l|O@ TqBd4s0_pH{^>bP0l+XkK{52O5 diff --git a/graphics/pokemon/skitty/footprint.png b/graphics/pokemon/skitty/footprint.png index 355153dcb5062c5a4e056d70ece1951051c4cb71..2e78b5093e9eef09009d530924e33707b5034328 100644 GIT binary patch delta 98 zcmc~Qn;;p>%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*Var;B3<$IRpe2IgmMY|Gf# zW-_r&=3raO$F^CTCrDbNLP)|wMB)a&fdV7Lyo;>A`MVZf1ZrdOboFyt=akR{0E3+z Ai~s-t delta 86 zcmXTRnjjg-00ib8ht2>gLr)jS5RRG2KmN~W?D%)Z_|Mw(iaX~Esw@xREoz(mipT%2 nq}}=SA9eE|w%anh@JcW;#I2QlUQi7Mg% delta 95 zcmZo+ESex0$p8fA9f!^UDN9cm#}JO0$v^(jfB3w?O>%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM3981i(?4K%;W?I)-oQRqwEqw s_692d5)JB(ANbeUxUj9UkzbFWVd_-2LotVBKt?cly85}Sb4q9e09q*?Y5)KL delta 77 zcmXR&oFM7J00ib8ht2>g4Nn)x5RRG2KmN~Wl$8B*{zCG3gZ}x6a>j=x9oyvp@cf@G d`LDi3n}H$yrKEy}8egMNb#U5RRG2KmN~WY^uAT{^Q2^4~_CIavPKdT%NSsxJWXX W8i+AmG}CVYY4UXSb6Mw<&;$T$0~kI4 diff --git a/graphics/pokemon/slowking/footprint.png b/graphics/pokemon/slowking/footprint.png index 52593624a24eb306eeb6717e27eee91b4b336af4..e85d1307c4d880d4cf663fab4839de730a987eab 100644 GIT binary patch delta 80 zcmWGZnIP%S%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VIr;B3<$IRpe2c|Q;Ja5<~ ie#kFSSim8~z%c6u+uq%)-+l%vV(@hJb6Mw<&;$VX>KeoV delta 64 zcmYcZnILJ+00ib8ht2>gX-^l&5RRG2KmN~W?E81c_|Jy)9}4|V4N4wa3`xr*RfRrD QxPg>=y85}Sb4q9e0Mz3ae*gdg diff --git a/graphics/pokemon/slowpoke/footprint.png b/graphics/pokemon/slowpoke/footprint.png index a66ebbc32e0fb18886e94ab7122c9a429372db80..f3330b57f658a339e1ab9419174e26ed6bacf5d5 100644 GIT binary patch delta 80 zcmWGdnIP%S%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VIr;B3<$IRpe2c|Q;Ja5g8BZ6-5RRG2KmN~W?E81c_|FFRh5Vm5Se_`YWMoL^lk`>8 RnRg$g-qY33Wt~$(69Ca^761SM diff --git a/graphics/pokemon/slugma/footprint.png b/graphics/pokemon/slugma/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vFVdQ&MBb@04($#*8l(j delta 74 zcmd0cn;_}R00ib8ht2>gRZkbk5RRG2KmN~W?D%)pxaL!O#Q{Di`5%ri+HH7lI$xY$ awZMyk<-EwN7J&miAdQ}`elF{r5}E)A{TufH diff --git a/graphics/pokemon/smoochum/footprint.png b/graphics/pokemon/smoochum/footprint.png index e901d9334cf4cf715531d83a799193ea9c7f786b..15461e49a3b7f92463839103d8d3962f5cf31b15 100644 GIT binary patch delta 78 zcmWGenjq=P%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*Vcr;B3<$IRpe2i7yZJa5=1 f1TZrjciAu`-e=MBk!`XCDq-++^>bP0l+XkKkfj$9 delta 63 zcmYcao*-$(00ib8ht2>gDNh&25RRG2KmN~Wl>ECg{YPSd%PYx$3p5xQX3v-2v8VrL PFi5qhtDnm{r-UW|$-Ebi diff --git a/graphics/pokemon/sneasel/footprint.png b/graphics/pokemon/sneasel/footprint.png index 2159ef3dcfaa686e7f55fbf6c453c0939e80c18e..c3472d32a684560cdd00b9ea9f570a04d7150a20 100644 GIT binary patch delta 88 zcma#enIIX=%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VGr;B3<$IRq}2F5-%wt377 qN4_^S%Jg6;Bt(5RRG2KmN~WY}$9-xMmys!v0S@@&{h93*2nJFu#gz Zh7p6)e(}G~_7UPBeV(p%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VKr;B3<$IRpe24*)lwuhWN ym!u`0*c;sV&!9M)i;bIGfXS$#=?%LA7vtG`oZJh#&sqUBF?hQAxvXgT~8Os5RRG2KmN~W?D+RLy<+nD4@c%dWVAobSSDa~=Ul-b j3l2s}hlBFpcoL>E=r0hvzWlGnGmrtEu6{1-oD!M< p{>VFc{A1^Eyy4)uK!k^Z;qqFJ-}jVwZv)jbc)I$ztaD0e0sy=39CH8w delta 71 zcmd0fo*?PO00ib8ht2>gB~KT}5RRG2KmN~WZ2EWA_|Js&9|!oI_-{CJ9Ae{QTAFZ* XLGz;6b067sd5|toS3j3^P6g1y2{p5RRG2KmN~W?E81s_)k~*j|2S<_D>}L-7r>I$;goS VMpD#K?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vqCb(4;|-gMp!F2^$Ch42F83Y6eeNKbLh*2~7al+#4_e delta 74 zcmd0en;_}R00ib8ht2>gRZkbk5RRG2KmN~WY^vMOzOete;|q3sj=vMrf28v}{eOLs aV+jvK*Dc9gg@R1lAdQ}`elF{r5}E+)KN}qY diff --git a/graphics/pokemon/spheal/footprint.png b/graphics/pokemon/spheal/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vgVNVyw5RRG2KmN~W6#l!KT`?z!;ptqt`@1t0zkrl^y85}S Ib4q9e0QbTY?EnA( diff --git a/graphics/pokemon/spinda/footprint.png b/graphics/pokemon/spinda/footprint.png index 7be943a892aaef2f4d8336f73fb21149e4666eae..688e1ec1e3defbefbc114cd427deab9cbc9d9953 100644 GIT binary patch delta 89 zcma#cogf*)%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*V0r;B3<$IRpe2i7+{JT|;M qGJFb0J~cG{WMqEK%+|(SP|4tbl%?nYjZd;b)eN4lelF{r5}E+zs~s-@ delta 74 zcmd0en;_}R00ib8ht2>gRZkbk5RRG2KmN~Wl>GbS{D+?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vg1y2{p5RRG2KmN~W?ECjO{fE%`4~}w;bvKOvtW0+ZVrHoI Vk?0 hXZQmI9y6w>GBjARUd@|u-wddT!PC{xWt~$(69CL-7@zb+00ib8ht2>gSx*NQ0-VpUXO@geCwWSQthC diff --git a/graphics/pokemon/starmie/footprint.png b/graphics/pokemon/starmie/footprint.png index c1c0058e74e9c2354f9bf9ca74251c564bcb95d1..2a1c1f3dd159502c8024d197d965920376b79bfa 100644 GIT binary patch delta 76 zcmWGcm>}uS%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VMr;B3<$IRq}0}MU9JZIP) dI8Gd3V6fi8)cJ|OLm8-m!PC{xWt~$(699Oc7o`9I delta 61 zcmYcYoFHkz00ib8ht2>g2~QWt5RRG2KmN~Wp=fS?83{1ORFT6$t}uS%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VMr;B3<$IRq}0}MU9JZIP) dI8Gd3V6fi8)cJ|OLm8-m!PC{xWt~$(699Oc7o`9I delta 61 zcmYcYoFHkz00ib8ht2>g2~QWt5RRG2KmN~Wp=fS?83{1ORFT6$t?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vgIZqeI5RRG2KmN~W?D%)n_|HUl*KZ03>%S(jgfY7@s6Ud> TnpxqK2-4x{>gTe~DWM4fA`=(E diff --git a/graphics/pokemon/suicune/footprint.png b/graphics/pokemon/suicune/footprint.png index 946c35dd0efade8dde45842ecdd7a8c04aba0df6..57258fb0c3286fd336ffd2f9c5715929850eba05 100644 GIT binary patch delta 80 zcmWGZnIP%S%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VIr;B3<$IRpe2i7xuJa70H hbV&9{@GG2VW+-{j+Q9wYxE!d6!PC{xWt~$(69C|@86p4x delta 64 zcmYcZnILJ+00ib8ht2>gX-^l&5RRG2KmN~Wl>B@1{0C>bu73>|?W_a>8_)m% delta 69 zcmd0doFM7I00ib8ht2>g1y2{p5RRG2KmN~uxZd`#f2GE+#+H8$6KqBPu1^2)U!LKi Vl8B?nt?9}jJ)W+9F6*2UngEcW8omGk diff --git a/graphics/pokemon/sunkern/footprint.png b/graphics/pokemon/sunkern/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vxaY5)KL delta 67 zcmYcepCD<+00ib8ht2>gIZqeI5RRG2KmN~Wl>ECg{m0(<53kn=aHcFi`R_kJ!}$er Ue82ard;#h3boFyt=akR{0A0}<&Hw-a diff --git a/graphics/pokemon/swablu/footprint.png b/graphics/pokemon/swablu/footprint.png index 7e71113c3aff9a09dddd9672bc7f1200f7cb7a74..747e2caaa8b887af4f7768dcc27c7c05fb82fa25 100644 GIT binary patch delta 77 zcmWGaoFM7J%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*V6r;B3<$IRq}0}MTU2_+4U e8yR~7R2cO?GP%Fcs(cGn!QkoY=d#Wzp$P!6Oc{j$ delta 62 zcmYccnjmS(00ib8ht2>gNlzEY5RRG2KmN~W?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vQZxRm6O}nyfI1mGUHx3vIVCg! E0DZwGJOBUy delta 83 zcmbgJx>?M5RRG2Khn>CI63d(1dGFtiEZsoJp3$@b_PZ@0VzKY k@HpAuNbHbr`FDbup~FLf_urq5lR+kUy85}Sb4q9e00Jc+G5`Po diff --git a/graphics/pokemon/swellow/footprint.png b/graphics/pokemon/swellow/footprint.png index f44a71c29b41d0ffb0ac72b219a2c65355b3333d..9757114c026160cd03c61285ed722a36817dde6d 100644 GIT binary patch delta 104 zcmd0Rfq~)FI*xmbP0 Hl+XkKkC-PU delta 87 zcmb=)o*)^-00ib8ht2>gBTpB{5RRG2Kfcd@7;k&{cU4>ZeaU-Ejcd5le>^$=p>h7h ocALZU3Y*wZ{#&2kpz%ANpTX#YIEz5(Cn1n2p00i_>zopr06i@u^8f$< diff --git a/graphics/pokemon/swinub/footprint.png b/graphics/pokemon/swinub/footprint.png index fb56709ec6e920dd60f932e9b39bc68d95d5e68e..c1573fe84acdc67df9e8397d07bc8cfbadabd9f0 100644 GIT binary patch delta 77 zcmWGcoFM7J%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*V6r;B3<$IRq}0}MXg5;No- e1Rpb+crrwEvG87qT|O76g2B_(&t;ucLK6Uf$QO11 delta 61 zcmYccoFHkz00ib8ht2>g2~QWt5RRG2KmN~W%Q~loCIF?~7xVxC diff --git a/graphics/pokemon/taillow/footprint.png b/graphics/pokemon/taillow/footprint.png index dbf5c5c6b4e858137c77fb6a8148065b0b7c4973..a54a5c93fe451858e7dcd7b1986b1c4fdbd9fd3c 100644 GIT binary patch delta 92 zcmYc+m>?O>%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM3981i(?4K%;bcIW;V8CY;1gt tZ1;E-*e0aZA2?9MaD+{1f{q6-Lu(w{p~rb)8-N-ZJYD@<);T3K0RSpc9V`F< delta 77 zcmXR&oFM7J00ib8ht2>g4Nn)x5RRG2KmN~W?0O~n@2YW4{rL|k<&Q8-vVS7^??&?t e2bM{!D;XIo6eJZs_-sE3((CE!=d#Wzp$Pziy&drY diff --git a/graphics/pokemon/tangela/footprint.png b/graphics/pokemon/tangela/footprint.png index c05d3b4375c5773f50d3640439fee5368b504d10..2b0c03fa5fe89e546219a981b5cc27b41c9fccde 100644 GIT binary patch delta 91 zcmYeypCB2=%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U@r;B3<$IRpe2IgbzJa6PB te$+cmv|*`bQ2fWv^M_sHhTg4Nn)x5RRG2KmN~W?D%)m_|Jp%9|!nc`4u|kTkK94*KA1t e!5H@KzdggtV3EfmlZBE&dOcnJT-G@yGywp5VIA%O diff --git a/graphics/pokemon/tauros/footprint.png b/graphics/pokemon/tauros/footprint.png index 602011c6d6c3f92cd76342e390afa3255fc7070c..3ae3a980d1f495ec05038d23eb154098bb4aa9c9 100644 GIT binary patch delta 85 zcma#foFEy%%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VAr;B3<$IRpe2c{l&i5vC} m0`pm!`&l>`C3Toicrm21FwdwzQ&kOA$>8bg=d#Wzp$PyrLm3bN delta 71 zcmd0do*?PO00ib8ht2>gB~KT}5RRG2KmN~W?E81q_|F6Oh5g4R?d;hV6&`=DW>Ya` Xm{BF;WgIR!1EkB-)z4*}Q$iB}ebX3) diff --git a/graphics/pokemon/teddiursa/footprint.png b/graphics/pokemon/teddiursa/footprint.png index def88c323394ced33e406b8f31b5ebe787f4a580..6e0bdfd171875a477214a48472893b163fd59233 100644 GIT binary patch delta 85 zcma#foFEy%%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VAr;B3<$IRpe2c{lAo->?0 mXZR&<*gFVLI9tIG$;r@~$0nHl_GB7RC4;A{pUXO@geCx5?iz>y delta 71 zcmd0do*?PO00ib8ht2>gB~KT}5RRG2KmN~W?ECjN{fF`Vhy6B(`Rg>8HvPY8tgw=i Xp+Z3NVr<4tBakjnS3j3^P6?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v}uT%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VQr;B3<$IRpe2c{lAo->?0 lXZRO%crvy~@GEFDGNfK*3BG-N<5i$S22WQ%mvv4FO#nJY8eRYZ delta 70 zcmd0Znjq=O00ib8ht2>gMNb#U5RRG2KmN~W?ECjN{fF`Vhy6ApfA{h`{eL4l;R*x8 W^p(>6e%V3FAWfdGelF{r5}E+1AR4~_ diff --git a/graphics/pokemon/togetic/footprint.png b/graphics/pokemon/togetic/footprint.png index b15913fa81c98af152bc727accfd91c152c53e5a..239f42d98d43b960de934402d6eaf302f4dfc79d 100644 GIT binary patch delta 84 zcma#bm>}uT%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VQr;B3<$IRpe24**Qwr4B? lN&g%AX2>@PJZ9{0VmQ8sGxE}B23DX#22WQ%mvv4FO#o9>8v6hM delta 70 zcmd0Znjq=O00ib8ht2>gMNb#U5RRG2KmN~W?D+RK{fDu9OWlXXi|s!td^talag7jz W=^?SsQi0?fAWfdGelF{r5}E*}uNv(D diff --git a/graphics/pokemon/torchic/footprint.png b/graphics/pokemon/torchic/footprint.png index 955afa82accd31a048e4e2cdc2d3a1d5b8801017..4149f9bb1fe1c54e23f6786d5c7376331b04b77d 100644 GIT binary patch delta 98 zcmYc%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*Var;B3<$IRq}h6XmagUUQY zHatD-5*7IdAO0sK{6BEu55o~wB?X3wybe+fM^ibDY+Up`5U7p8)78&qol`;+06Zcg Ar2qf` delta 83 zcmXR*pCIYS00ib8ht2>gJx>?M5RRG2KmN~WY+p>FVdQ&MBb@04kgw;{X5v diff --git a/graphics/pokemon/torkoal/footprint.png b/graphics/pokemon/torkoal/footprint.png index 208f3bb7755de13b144695c6197394554a441766..35facf20e46c5128a2d2c2d060de7e2f5bac5508 100644 GIT binary patch delta 99 zcmc~OpCB2>%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U{r;B3<$IRq}21YkFwuhWN zm!us${xLWII3Ry@O1TaS?83{1OQy7 BAol}uT00ib8ht2>geNPw15RRG2KmN~WZ2I>%y<+nD4@cx%c diff --git a/graphics/pokemon/totodile/footprint.png b/graphics/pokemon/totodile/footprint.png index 2102602737d5574af23d1089362943af251f17fa..dd3fd2e209149832ae647594a139e3a338e59068 100644 GIT binary patch delta 83 zcmaz@pCIYS%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U_r;B3<$IRq}2F7D-Y~NUU l-tY%pWE4osYgo<1uyr&0-d+3HgMjK7JYD@<);T3K0RTxm8x#Nl delta 68 zcmYd~m>_A-00ib8ht2>gc~2L|5RRG2KmN~WZ2EWA_)kar55@kjH;ym-ZJB)}8Qf1x UsQ%P>ngP<{>FVdQ&MBb@08?BUG5`Po diff --git a/graphics/pokemon/trapinch/footprint.png b/graphics/pokemon/trapinch/footprint.png index c3e6e785b207d755a4943cae52529ca052a7aa14..be4eeb90ef76655a1cc5dcccf905f7444c9603e3 100644 GIT binary patch delta 87 zcma#go*)^-%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U*r;B3<$IRpe2c|RZ5)twS p1vLo|Dh?cwK5$?kgGv(@Lq{}gK<gHBT4E5RRG2KmN~W?E81a_|K&DALq`0h@JQFa#frBM+LzY c*8l&R8A_FFVdQ&MBb@0DiU}wg3PC diff --git a/graphics/pokemon/treecko/footprint.png b/graphics/pokemon/treecko/footprint.png index ed3854702ecf72061fa555e585493190561e8a88..695c6a891d250a24c6fd9bdf5c8a27111efe6d73 100644 GIT binary patch delta 92 zcmYc&m>?O>%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM3981i(?4K%;W?h$Vr&6?_k1z r_Lh`#gAMi!iqDt>Sf;QlNiZ;otmnMBSdOC%sDZ)L)z4*}Q$iB}a_b$c delta 76 zcmXR&m>}uS00ib8ht2>gbx#+^5RRG2KmN~u7;k%6xU`M=jKY@_b04g6Hgb%5RRG2KmN~uc)q?({VUJ;H_A-00ib8ht2>gc~2L|5RRG2KmN~WZ2EW2_|KN~AB--aR&eP2ST47ShrwP& U+-|D5eGN#9r>mdKI;Vst077gS7ytkO diff --git a/graphics/pokemon/tyranitar/footprint.png b/graphics/pokemon/tyranitar/footprint.png index ea12c75b08769cb2d340cd813324996649517447..c5e6dfdd7ff1dd84036ce7d091deb7021776b4a5 100644 GIT binary patch delta 92 zcmYc+m>?O>%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM3981i(?4K%;bay26nbKW*!-J siHdxK5C0pKzVRn~VQ87b?{I~Y;n@@}FT3`r`9KW}p00i_>zopr07O3?0RR91 delta 77 zcmXR&oFM7J00ib8ht2>g4Nn)x5RRG2KmN~WZ24yVXM6gOymKEs=RRb%7Ww;tUAa== eS2BOtH+crJSE4iAPAxtU((CE!=d#Wzp$Pzuh#r9e diff --git a/graphics/pokemon/tyrogue/footprint.png b/graphics/pokemon/tyrogue/footprint.png index 0ef849eb894a9c7217d53a5cb226786240cf94d7..66cbd808060fedd4b44a6fa31eaf42201488c169 100644 GIT binary patch delta 77 zcmWGcoFM7J%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*V6r;B3<$IRq}0}MUv5;No% eC@kRMVPGg!Vf|#5*t!R(g2B_(&t;ucLK6UjEf;hE delta 61 zcmYccoFHkz00ib8ht2>g2~QWt5RRG2KmN~W e1U@sTcrxUyV@+zlQ(y>G!QkoY=d#Wzp$PzxG#C^B delta 61 zcmYccoFHkz00ib8ht2>g2~QWt5RRG2KmN~Wp=fS?83{1OSY971jU% diff --git a/graphics/pokemon/unown/footprint.png b/graphics/pokemon/unown/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vGI8pDQpdhZn&Bk!@1!u;TXs&fY9SokXelF{r5}E)dWE>s< delta 79 zcmXR+o*?PP00ib8ht2>gEl(H65RRG2KmN~W?D+RL{YUWm3zN?j{IfjFTinL~iHHA( gAjb*TQ%#{v493&Msu(sXZwBf1boFyt=akR{0LjiC4FCWD diff --git a/graphics/pokemon/vaporeon/footprint.png b/graphics/pokemon/vaporeon/footprint.png index 2b44d4b2491b80132b81ff783599d8c301e6c490..7e40d8198eac8658f1d646567daefc0e55ec2b5e 100644 GIT binary patch delta 90 zcma#cn;;p=%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VWr;B3<$IRpe2c{lgo;}hM rKkN-o{BKZFknXr4Z(tzbpuxzn{W+($?lIFEpmGLJS3j3^P6gRZkbk5RRG2KmN~W?E81sxaL#(j|1mFG{|-}bP0l+XkKN_`!` diff --git a/graphics/pokemon/venomoth/footprint.png b/graphics/pokemon/venomoth/footprint.png index 6965dbe60faf9d737d166f33082414b9cfb07195..a9b0e33c2899262a2f3194da12bb624ee577b2c4 100644 GIT binary patch delta 72 zcmeZ?nIP%R%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VEr;B3<$IRq}18fq~4jj@9 Z4B`(NnP+Dl_XbKbc)I$ztaD0e0s!$#6w?3z delta 56 zcma#?nILJ*00ib8ht2>gVNVyw5RRG2KmN~W6#l!KT`?z!;ptqt`@1t0zkrl^y85}S Ib4q9e0QbTY?EnA( diff --git a/graphics/pokemon/venonat/footprint.png b/graphics/pokemon/venonat/footprint.png index 3675945c9241a95407d89551b26a714a3978acdf..f1f332f81d8b5444a0f095f2c25ae0a81d6c5cdf 100644 GIT binary patch delta 83 zcmaz{pCIYS%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U_r;B3<$IRpe2Ig(dJT?3d k9rDZ@C8r>mdKI;Vst01g1y2{p5RRG2KmN~W?5MkCTr-7zA-}|nc3Y0WE7KWPvoJ7i V6P@yZ^X8KvJ)W+9F6*2UngBRb7`Ffb diff --git a/graphics/pokemon/venusaur/footprint.png b/graphics/pokemon/venusaur/footprint.png index bdef2c818ebc7cbff4ccb99329e3fa895ed23e22..188dd9608141b87c15dd72c935d10ce620203a94 100644 GIT binary patch delta 91 zcmYeupCB2=%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U@r;B3<$IRq}h6XmabHY4( t%q5=uZ}uS00ib8ht2>gbx#+^5RRG2KmN~WYDigPrD51jkp dF1O~5J;T!`;hJrxm3u*2Jzf1=);T3K0RSA49DM)) diff --git a/graphics/pokemon/vibrava/footprint.png b/graphics/pokemon/vibrava/footprint.png index fdf76f9f2289646d9f7e61d48684a2838409a4b4..b935f853a3f30d9f00052f8545d5d4695550ef53 100644 GIT binary patch delta 79 zcmWGbo*?PP%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U-r;B3<$IRq}0}O1uJgoK- gTCXH^vJ6xiqw1KC9L&4H4^+e8>FVdQ&MBb@0G+HCjsO4v delta 66 zcmYcen;>b+00ib8ht2>gSx*?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v{ z_B1zMY-;?;#{8R`?HfN&4J(fgo5GRl2M+viX#C5-T+GaHq?h9>$G^GUK-~gQ%@Ji5RRG2KmN~uSZ{lHe~rMe$LBu0w>T_c+9v;q$Nq<; s-8bVJJANnm=f*V?(tjkL|FB$+!Q!LXTkZpKY#@U?UHx3vIVCg!0G{Jf;l-#>^}X4D7m`P2rZ?xq&JfJYD@<);T3K0RVN%8SnrA delta 69 zcmd0doFM7I00ib8ht2>g1y2{p5RRG2KmN~uIN$cLd?m{-M#pakA^cAD|BU~zD>8fw V6ifIOrh6Qu$J5o%Wt~$(697x97{34j diff --git a/graphics/pokemon/volbeat/footprint.png b/graphics/pokemon/volbeat/footprint.png index 916c59f606a931938f0d6263b3ff6780db0277a3..f5df06fdc3cedb955dcda52a28806fcae32c6d58 100644 GIT binary patch delta 79 zcmWGZo*?PP%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U-r;B3<$IRpe2c{l}D+dnn gxUdUwXf&}fBuBAKmQ5484OGM6>FVdQ&MBb@0JXOl$^ZZW delta 64 zcmYcenILJ+00ib8ht2>gX-^l&5RRG2KmN~W?EA+UXnR;*VUxSU0**;i46{_E{d0Wg Q=YW)Zy85}Sb4q9e0EfU7C;$Ke diff --git a/graphics/pokemon/voltorb/footprint.png b/graphics/pokemon/voltorb/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v;u)EvnK%sP6B05SPB1eR&t^S!BSY~#P&tFAtDnm{r-UW|+2I@K delta 75 zcmd0cpCIYR00ib8ht2>gHBT4E5RRG2KmN~Wl>ECo{l}B@9~$Lb?7kWQnZxf?|3>oP cb!QO?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vzD+v5%7f7l*aG-)=5eLI*9nKlqVt2!Usu?_8{an^LB{Ts5@N68$ delta 73 zcmd0eognGL00ib8ht2>g6;Bt(5RRG2KmN~W?0O|x_uTl;rSu;M`W)k*B<59@lh6**=jrO_vd$@?2>|^A8_xg$ diff --git a/graphics/pokemon/weedle/footprint.png b/graphics/pokemon/weedle/footprint.png index c1c0058e74e9c2354f9bf9ca74251c564bcb95d1..2a1c1f3dd159502c8024d197d965920376b79bfa 100644 GIT binary patch delta 76 zcmWGcm>}uS%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VMr;B3<$IRq}0}MU9JZIP) dI8Gd3V6fi8)cJ|OLm8-m!PC{xWt~$(699Oc7o`9I delta 61 zcmYcYoFHkz00ib8ht2>g2~QWt5RRG2KmN~Wp=fS?83{1ORFT6$t?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vjjfjg5cVne7GsCO)V?e4wtaac*m4B_H!+KDIV~hph}ZyEva)Oyn>Hn!w=c L>gTe~DWM4fpxY?( delta 95 zcmZo|jb&wps1`;b|{ x(6~k*?MLF750A|c&rfNqf5-Fxr{ur?>g1y2{p5RRG2Khn>CaF=VTJ8(hXVpIDf`L7CJp4%V(|DWN= WY>`F3qO>o8^mw}ZxvXuh@ diff --git a/graphics/pokemon/wingull/footprint.png b/graphics/pokemon/wingull/footprint.png index 057b2cefad6c44ce191fee72f5a3f3cf1505419f..26b410ad371603abe10f5c1954334e610946beb1 100644 GIT binary patch delta 85 zcma#aoFEy%%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VAr;B3<$IRpe24*pKwr$J` mNB%RgZj@(Ge8$Em!N72-iK91EcEwhpN(N6?KbLh*2~7Ylei;`4 delta 72 zcmd0dnIP%R00ib8ht2>gWltB!5RRG2KmN~W?5KO6{v(s$N&ZRT1^#M*U%}@Y0>AyY YXVCg19vZx4|2L2}Pgg&ebxsLQ0KBvtd;kCd diff --git a/graphics/pokemon/wobbuffet/footprint.png b/graphics/pokemon/wobbuffet/footprint.png index 49fa6818d129fc3a0be1917dc361834456f06769..b7d2324d23b3a903e3d0dbc5d0db76a5e4673c6a 100644 GIT binary patch delta 77 zcmWGcoFM7J%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*V6r;B3<$IRq}0}MUv5;No- e1Rpb-crwJkW%0Q;*>5&b1%s!npUXO@geCxydKg3i delta 61 zcmYccoFHkz00ib8ht2>g2~QWt5RRG2KmN~W;ESgQyAw@l%CdTrlt*2 N>*?y}vd$@?2>^Zp6+Hj| diff --git a/graphics/pokemon/wooper/footprint.png b/graphics/pokemon/wooper/footprint.png index 5e1ba56e61e3e0899204630a37d9ad49eb98530b..22911aa46c4f23723982114d589ecbd7230edc5d 100644 GIT binary patch delta 76 zcmWGcm>}uS%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VMr;B3<$IRpe2R3#I3Hb#I d3plhG7$#3*eKuR<;u@d=22WQ%mvv4FO#oFz7U2K@ delta 61 zcmYcYoFHkz00ib8ht2>g2~QWt5RRG2KmN~WY*?y}vd$@?2>_U~7QFxf diff --git a/graphics/pokemon/wurmple/footprint.png b/graphics/pokemon/wurmple/footprint.png index 3ac4abd9f7a1a2a8d1ae64d938998b423cd51001..bbb7102f669553bb34301c80ba1653f8bb820906 100644 GIT binary patch delta 77 zcmWGcoFM7J%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*V6r;B3<$IRq}18frf1_t&F eiVDo43=GaS%$`+!-=_jqFnGH9xvXg2~QWt5RRG2KmN~W6#lz8{f9EYlLOl-5r$n%GBbJZGVcPZ N^>p=fS?83{1OQAT6IlQN diff --git a/graphics/pokemon/wynaut/footprint.png b/graphics/pokemon/wynaut/footprint.png index 4fe4832c08b40644a12d1572d6047dc7cda5e97d..6b0daca37ada476dd182ebce8e1e8d4726c8c17f 100644 GIT binary patch delta 81 zcmaz@ognGM%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*V2r;B3<$IRq}2F7E|JZJbP iTwt8Q!C`8kz{s$zhF!!XY}yl`Dh5wiKbLh*2~7a%z!<6k delta 68 zcmYd|m>_A-00ib8ht2>gc~2L|5RRG2KmN~WZ2EW8_|HUlr*8^^0;|#+R{#7j&*07^ UagMQ;GZdu7)78&qol`;+065kc_y7O^ diff --git a/graphics/pokemon/xatu/footprint.png b/graphics/pokemon/xatu/footprint.png index 44fcad1e3ed9a90d7a426104e849b53c176eb5e3..52be0000848a3680ff39cdb9c760f77760fe7534 100644 GIT binary patch delta 85 zcma#ZoFEy%%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VAr;B3<$IRpeAZSs1#ujqq kzyToQbMr|!a)5!svz2L8)#9g@fhrk1UHx3vIVCg!0NrjL`2YX_ delta 68 zcmd0dm>_A-00ib8ht2>gc~2L|5RRG2KmN~uD9`hErMv5Y$$$USe=xe$AAIq@o?-J( US&Q_Z%v_KbPgg&ebxsLQ0D%GbuApIg2B_(&t;ucLK6Ur@E7I) delta 64 zcmYccnILJ+00ib8ht2>gX-^l&5RRG2KmN~W*%=$w RXB-46_jL7hS?83{1OOh$8a@C3 diff --git a/graphics/pokemon/zangoose/footprint.png b/graphics/pokemon/zangoose/footprint.png index e07e58ceecbe4f320a940c538d4b2223aa8fd346..cc43fe9176b418ab67931029beb78c6036c9a7d1 100644 GIT binary patch delta 97 zcmYcje zNB%W7?rmr^ZD{<;)NwG4VNz1vfddr`iv$>^ShE!suzmIh>SFM8^>bP0l+XkKD7qm) delta 83 zcmXR-pCIYS00ib8ht2>gJx>?M5RRG2KmN~W?D%&t{f9Kall>3Lx-Z6mqRxNtmOt{N kQcmTo`@DzqZJ8rf88V$E3tlzc-v=_m)78&qol`;+09^zjYXATM diff --git a/graphics/pokemon/zapdos/footprint.png b/graphics/pokemon/zapdos/footprint.png index 480063a88b754bf8889b0d48e7eb984ee208bd42..80b07a5b0a3f9a6de91c78f175c20f9308412041 100644 GIT binary patch delta 100 zcmd0(m>?O?%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VSr;B3<$IRpeh9))vp^QWW zn_~%;eU6`an%~H>{gdZ;BQG&S-oQYvL1}^!8w2A8Zqe#CwM9UU44$rjF6*2UngBS` BA2}uT00ib8ht2>geNPw15RRG2KmN~uSZ~X*cYT^g`pJSb6CTbqJgl7B#{Y)L m{)gnh6UKiww<}H9^q=APIgzs*2NGU^jPP{zb6Mw<&;$Uh(<9FS diff --git a/graphics/pokemon/zigzagoon/footprint.png b/graphics/pokemon/zigzagoon/footprint.png index d7373e064189cfb22854231695714a414b75a53a..421b25991e343b89921d2d77dd5b617e0a87b2a3 100644 GIT binary patch delta 95 zcmYc(o*)^;%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*UJg7c!;1z=qOVL3FhAcVOy|dVhdVqQuJYD@<);T3K0RWD69xwm^ delta 80 zcmXR;nIP%S00ib8ht2>gZBG}+5RRG2KmN~W?ECjO{fE%`4=d(B{9W57|BXlfiKN{r h<3G3fg;?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v Date: Wed, 10 May 2023 00:33:43 -0400 Subject: [PATCH 383/428] Colorize bag select button --- graphics/bag/select_button.png | Bin 135 -> 195 bytes src/item_menu.c | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/graphics/bag/select_button.png b/graphics/bag/select_button.png index bded587fd1d071464de8d5b9032433a760c183cf..52cdc1ed5acb5ca9c9164e0db127cee7509eaa83 100644 GIT binary patch delta 162 zcmZo?Jj^&j(uJ9Uf#Dz5qGdqJAiyWYH7ThW$o&8R|JAE!_s)s>&%m%{%NC#r5WG9v z{Qv*iD2D2*S^vF&OrWwUTV54^+dENFIJk*j|L0V8xf8R(r!6z#np!2Sp19#G^J^gu zH?BPgwk+Uy>cPuBJy`F+_LMg7cU!~f{P9S=W@>l+*8F=9_P;pDYIxTptX1s_E65&C LS3j3^P6dXGLHcW-t6b~08)OQE{-7_GfVpn`3@LxF#k*mlRNPsKK0`R^C` Date: Thu, 11 May 2023 00:16:57 +0200 Subject: [PATCH 384/428] Remove duplicate CanBePoisoned condition (#2988) --- src/battle_util.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/battle_util.c b/src/battle_util.c index cd65d580937d..e8c9b8d8cd35 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -6413,7 +6413,6 @@ bool32 CanBePoisoned(u8 battlerAttacker, u8 battlerTarget) || ability == ABILITY_IMMUNITY || ability == ABILITY_COMATOSE || IsAbilityOnSide(battlerTarget, ABILITY_PASTEL_VEIL) - || gBattleMons[battlerTarget].status1 & STATUS1_ANY || IsAbilityStatusProtected(battlerTarget) || IsBattlerTerrainAffected(battlerTarget, STATUS_FIELD_MISTY_TERRAIN)) return FALSE; From 6fdf75bd8cf5f4e6e5fb54417e45b3ca32b0af90 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Wed, 10 May 2023 13:37:48 -0400 Subject: [PATCH 385/428] Support plain pixel conversion, convert spinda spots to .png --- graphics/spinda_spots/spot_0.bin | Bin 32 -> 0 bytes graphics/spinda_spots/spot_0.png | Bin 0 -> 111 bytes graphics/spinda_spots/spot_1.bin | Bin 32 -> 0 bytes graphics/spinda_spots/spot_1.png | Bin 0 -> 112 bytes graphics/spinda_spots/spot_2.bin | Bin 32 -> 0 bytes graphics/spinda_spots/spot_2.png | Bin 0 -> 99 bytes graphics/spinda_spots/spot_3.bin | Bin 32 -> 0 bytes graphics/spinda_spots/spot_3.png | Bin 0 -> 99 bytes graphics_file_rules.mk | 13 +++++ src/pokemon.c | 8 +-- tools/gbagfx/convert_png.c | 1 - tools/gbagfx/gfx.c | 90 ++++++++++++++++++++++++++----- tools/gbagfx/gfx.h | 6 ++- tools/gbagfx/main.c | 72 ++++++++++++++++++++----- tools/gbagfx/options.h | 4 ++ 15 files changed, 159 insertions(+), 35 deletions(-) delete mode 100644 graphics/spinda_spots/spot_0.bin create mode 100644 graphics/spinda_spots/spot_0.png delete mode 100644 graphics/spinda_spots/spot_1.bin create mode 100644 graphics/spinda_spots/spot_1.png delete mode 100644 graphics/spinda_spots/spot_2.bin create mode 100644 graphics/spinda_spots/spot_2.png delete mode 100644 graphics/spinda_spots/spot_3.bin create mode 100644 graphics/spinda_spots/spot_3.png diff --git a/graphics/spinda_spots/spot_0.bin b/graphics/spinda_spots/spot_0.bin deleted file mode 100644 index 938d1d592394b24026aeaa0666b0d46ad670d876..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32 gcmXS5_`~>*`5*g#_W%4K_>cV``yb{9j0{i!0PQ~ujsO4v diff --git a/graphics/spinda_spots/spot_0.png b/graphics/spinda_spots/spot_0.png new file mode 100644 index 0000000000000000000000000000000000000000..e0a515d77dff8653bd8c130dfcb49b40a83082cc GIT binary patch literal 111 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!D3?x-;bCrM;TYyi9>;M1%fy~fDm+OF(il>WX z2*=Fi1dW7*KZg(e>2H+n_-Fj#uz+<$%TIph$INUh3=F>Wxcdrb=RF3hXYh3Ob6Mw< G&;$VAS|CjT literal 0 HcmV?d00001 diff --git a/graphics/spinda_spots/spot_1.bin b/graphics/spinda_spots/spot_1.bin deleted file mode 100644 index db46b5de4d91fafcc99795bc418398a0ea77236e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32 fcmaFB_=EWm`#=7F{Qu=a5XAb!{)7Di0|Wp735^X< diff --git a/graphics/spinda_spots/spot_1.png b/graphics/spinda_spots/spot_1.png new file mode 100644 index 0000000000000000000000000000000000000000..0e7fbd399a98f7556fb0f33100e0634433941665 GIT binary patch literal 112 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!D3?x-;bCrM;TYyi9>;M1%fy~fDm+L?ho-U3d z95a&>Y7QLu)7;M1%fy~fDm+OF(gr|#R t2*=Figb9fW8 literal 0 HcmV?d00001 diff --git a/graphics/spinda_spots/spot_3.bin b/graphics/spinda_spots/spot_3.bin deleted file mode 100644 index 10c73f9bad7062d5e75a881e8e1f1211fbc803ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32 TcmcCvsAKpKhjk1#45$DAnurE) diff --git a/graphics/spinda_spots/spot_3.png b/graphics/spinda_spots/spot_3.png new file mode 100644 index 0000000000000000000000000000000000000000..cf4a96f7d3c27760d2b11f062ca3286b2fabd995 GIT binary patch literal 99 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!D3?x-;bCrM;TYyi9>;M1%fy~fDm+OF(gr|#R t2*=Figbj%aE0Pm_^mjEVITY$JFx+~_Rxop=%TAyg22WQ%mvv4FO#nrJ8w>yd literal 0 HcmV?d00001 diff --git a/graphics_file_rules.mk b/graphics_file_rules.mk index 69fc398d8cf9..97a7794b3085 100644 --- a/graphics_file_rules.mk +++ b/graphics_file_rules.mk @@ -21,6 +21,7 @@ JPCONTESTGFXDIR := graphics/contest/japanese POKEDEXGFXDIR := graphics/pokedex STARTERGFXDIR := graphics/starter_choose NAMINGGFXDIR := graphics/naming_screen +SPINDAGFXDIR := graphics/spinda_spots types := normal fight flying poison ground rock bug ghost steel mystery fire water grass electric psychic ice dragon dark contest_types := cool beauty cute smart tough @@ -680,3 +681,15 @@ $(NAMINGGFXDIR)/cursor_squished.4bpp: %.4bpp: %.png $(NAMINGGFXDIR)/cursor_filled.4bpp: %.4bpp: %.png $(GFX) $< $@ -num_tiles 5 -Wnum_tiles + +$(SPINDAGFXDIR)/spot_0.1bpp: %.1bpp: %.png + $(GFX) $< $@ -plain -data_width 2 + +$(SPINDAGFXDIR)/spot_1.1bpp: %.1bpp: %.png + $(GFX) $< $@ -plain -data_width 2 + +$(SPINDAGFXDIR)/spot_2.1bpp: %.1bpp: %.png + $(GFX) $< $@ -plain -data_width 2 + +$(SPINDAGFXDIR)/spot_3.1bpp: %.1bpp: %.png + $(GFX) $< $@ -plain -data_width 2 diff --git a/src/pokemon.c b/src/pokemon.c index bebed465bfc8..fa2eee42c010 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -1346,10 +1346,10 @@ static const u16 sHoennToNationalOrder[NUM_SPECIES - 1] = const struct SpindaSpot gSpindaSpotGraphics[] = { - {.x = 16, .y = 7, .image = INCBIN_U16("graphics/spinda_spots/spot_0.bin")}, - {.x = 40, .y = 8, .image = INCBIN_U16("graphics/spinda_spots/spot_1.bin")}, - {.x = 22, .y = 25, .image = INCBIN_U16("graphics/spinda_spots/spot_2.bin")}, - {.x = 34, .y = 26, .image = INCBIN_U16("graphics/spinda_spots/spot_3.bin")} + {.x = 16, .y = 7, .image = INCBIN_U16("graphics/spinda_spots/spot_0.1bpp")}, + {.x = 40, .y = 8, .image = INCBIN_U16("graphics/spinda_spots/spot_1.1bpp")}, + {.x = 22, .y = 25, .image = INCBIN_U16("graphics/spinda_spots/spot_2.1bpp")}, + {.x = 34, .y = 26, .image = INCBIN_U16("graphics/spinda_spots/spot_3.1bpp")} }; #include "data/pokemon/item_effects.h" diff --git a/tools/gbagfx/convert_png.c b/tools/gbagfx/convert_png.c index a5fefbd8b6e6..c9c240efbba0 100644 --- a/tools/gbagfx/convert_png.c +++ b/tools/gbagfx/convert_png.c @@ -130,7 +130,6 @@ void ReadPng(char *path, struct Image *image) FATAL_ERROR("Bit depth of image must be 1, 2, 4, or 8.\n"); image->pixels = ConvertBitDepth(image->pixels, bit_depth, image->bitDepth, image->width * image->height); free(src); - image->bitDepth = bit_depth; } } diff --git a/tools/gbagfx/gfx.c b/tools/gbagfx/gfx.c index 832e9bb39710..1dfc38e2d036 100644 --- a/tools/gbagfx/gfx.c +++ b/tools/gbagfx/gfx.c @@ -204,6 +204,18 @@ static void ConvertToTiles8Bpp(unsigned char *src, unsigned char *dest, int numT } } +// For untiled, plain images +static void CopyPlainPixels(unsigned char *src, unsigned char *dest, int size, int dataWidth, bool invertColors) +{ + if (dataWidth == 0) return; + for (int i = 0; i < size; i += dataWidth) { + for (int j = dataWidth; j > 0; j--) { + unsigned char pixels = src[i + j - 1]; + *dest++ = invertColors ? ~pixels : pixels; + } + } +} + static void DecodeAffineTilemap(unsigned char *input, unsigned char *output, unsigned char *tilemap, int tileSize, int numTiles) { for (int i = 0; i < numTiles; i++) @@ -345,9 +357,9 @@ static unsigned char *DecodeTilemap(unsigned char *tiles, struct Tilemap *tilema return decoded; } -void ReadImage(char *path, int tilesWidth, int bitDepth, int metatileWidth, int metatileHeight, struct Image *image, bool invertColors) +void ReadTileImage(char *path, int tilesWidth, int metatileWidth, int metatileHeight, struct Image *image, bool invertColors) { - int tileSize = bitDepth * 8; + int tileSize = image->bitDepth * 8; int fileSize; unsigned char *buffer = ReadWholeFile(path, &fileSize); @@ -355,26 +367,25 @@ void ReadImage(char *path, int tilesWidth, int bitDepth, int metatileWidth, int int numTiles = fileSize / tileSize; if (image->tilemap.data.affine != NULL) { - int outTileSize = (bitDepth == 4 && image->palette.numColors > 16) ? 64 : tileSize; - buffer = DecodeTilemap(buffer, &image->tilemap, &numTiles, image->isAffine, tileSize, outTileSize, bitDepth); + int outTileSize = (image->bitDepth == 4 && image->palette.numColors > 16) ? 64 : tileSize; + buffer = DecodeTilemap(buffer, &image->tilemap, &numTiles, image->isAffine, tileSize, outTileSize, image->bitDepth); if (outTileSize == 64) { tileSize = 64; - image->bitDepth = bitDepth = 8; + image->bitDepth = 8; } } int tilesHeight = (numTiles + tilesWidth - 1) / tilesWidth; if (tilesWidth % metatileWidth != 0) - FATAL_ERROR("The width in tiles (%d) isn't a multiple of the specified metatile width (%d)", tilesWidth, metatileWidth); + FATAL_ERROR("The width in tiles (%d) isn't a multiple of the specified metatile width (%d)\n", tilesWidth, metatileWidth); if (tilesHeight % metatileHeight != 0) - FATAL_ERROR("The height in tiles (%d) isn't a multiple of the specified metatile height (%d)", tilesHeight, metatileHeight); + FATAL_ERROR("The height in tiles (%d) isn't a multiple of the specified metatile height (%d)\n", tilesHeight, metatileHeight); image->width = tilesWidth * 8; image->height = tilesHeight * 8; - image->bitDepth = bitDepth; image->pixels = calloc(tilesWidth * tilesHeight, tileSize); if (image->pixels == NULL) @@ -382,7 +393,7 @@ void ReadImage(char *path, int tilesWidth, int bitDepth, int metatileWidth, int int metatilesWide = tilesWidth / metatileWidth; - switch (bitDepth) { + switch (image->bitDepth) { case 1: ConvertFromTiles1Bpp(buffer, image->pixels, numTiles, metatilesWide, metatileWidth, metatileHeight, invertColors); break; @@ -397,9 +408,9 @@ void ReadImage(char *path, int tilesWidth, int bitDepth, int metatileWidth, int free(buffer); } -void WriteImage(char *path, enum NumTilesMode numTilesMode, int numTiles, int bitDepth, int metatileWidth, int metatileHeight, struct Image *image, bool invertColors) +void WriteTileImage(char *path, enum NumTilesMode numTilesMode, int numTiles, int metatileWidth, int metatileHeight, struct Image *image, bool invertColors) { - int tileSize = bitDepth * 8; + int tileSize = image->bitDepth * 8; if (image->width % 8 != 0) FATAL_ERROR("The width in pixels (%d) isn't a multiple of 8.\n", image->width); @@ -411,10 +422,10 @@ void WriteImage(char *path, enum NumTilesMode numTilesMode, int numTiles, int bi int tilesHeight = image->height / 8; if (tilesWidth % metatileWidth != 0) - FATAL_ERROR("The width in tiles (%d) isn't a multiple of the specified metatile width (%d)", tilesWidth, metatileWidth); + FATAL_ERROR("The width in tiles (%d) isn't a multiple of the specified metatile width (%d)\n", tilesWidth, metatileWidth); if (tilesHeight % metatileHeight != 0) - FATAL_ERROR("The height in tiles (%d) isn't a multiple of the specified metatile height (%d)", tilesHeight, metatileHeight); + FATAL_ERROR("The height in tiles (%d) isn't a multiple of the specified metatile height (%d)\n", tilesHeight, metatileHeight); int maxNumTiles = tilesWidth * tilesHeight; @@ -432,7 +443,7 @@ void WriteImage(char *path, enum NumTilesMode numTilesMode, int numTiles, int bi int metatilesWide = tilesWidth / metatileWidth; - switch (bitDepth) { + switch (image->bitDepth) { case 1: ConvertToTiles1Bpp(image->pixels, buffer, maxNumTiles, metatilesWide, metatileWidth, metatileHeight, invertColors); break; @@ -468,6 +479,57 @@ void WriteImage(char *path, enum NumTilesMode numTilesMode, int numTiles, int bi free(buffer); } +void ReadPlainImage(char *path, int dataWidth, struct Image *image, bool invertColors) +{ + int fileSize; + unsigned char *buffer = ReadWholeFile(path, &fileSize); + + if (fileSize % dataWidth != 0) + FATAL_ERROR("The image data size (%d) isn't a multiple of the specified data width %d.\n", fileSize, dataWidth); + + // png scanlines have wasted bits if they do not align to byte boundaries. + // pngs misaligned in this way are not currently handled. + int pixelsPerByte = 8 / image->bitDepth; + if (image->width % pixelsPerByte != 0) + FATAL_ERROR("The width in pixels (%d) isn't a multiple of %d.\n", image->width, pixelsPerByte); + + int numPixels = fileSize * pixelsPerByte; + image->height = (numPixels + image->width - 1) / image->width; + image->pixels = calloc(image->width * image->height * image->bitDepth / 8, 1); + + if (image->pixels == NULL) + FATAL_ERROR("Failed to allocate memory for pixels.\n"); + + CopyPlainPixels(buffer, image->pixels, fileSize, dataWidth, invertColors); + + free(buffer); +} + +void WritePlainImage(char *path, int dataWidth, struct Image *image, bool invertColors) +{ + int bufferSize = image->width * image->height * image->bitDepth / 8; + + if (bufferSize % dataWidth != 0) + FATAL_ERROR("The image data size (%d) isn't a multiple of the specified data width %d.\n", bufferSize, dataWidth); + + // png scanlines have wasted bits if they do not align to byte boundaries. + // pngs misaligned in this way are not currently handled. + int pixelsPerByte = 8 / image->bitDepth; + if (image->width % pixelsPerByte != 0) + FATAL_ERROR("The width in pixels (%d) isn't a multiple of %d.\n", image->width, pixelsPerByte); + + unsigned char *buffer = malloc(bufferSize); + + if (buffer == NULL) + FATAL_ERROR("Failed to allocate memory for pixels.\n"); + + CopyPlainPixels(image->pixels, buffer, bufferSize, dataWidth, invertColors); + + WriteWholeFile(path, buffer, bufferSize); + + free(buffer); +} + void FreeImage(struct Image *image) { if (image->tilemap.data.affine != NULL) diff --git a/tools/gbagfx/gfx.h b/tools/gbagfx/gfx.h index f1dbfcf4f720..1797d84dfd71 100644 --- a/tools/gbagfx/gfx.h +++ b/tools/gbagfx/gfx.h @@ -50,8 +50,10 @@ enum NumTilesMode { NUM_TILES_ERROR, }; -void ReadImage(char *path, int tilesWidth, int bitDepth, int metatileWidth, int metatileHeight, struct Image *image, bool invertColors); -void WriteImage(char *path, enum NumTilesMode numTilesMode, int numTiles, int bitDepth, int metatileWidth, int metatileHeight, struct Image *image, bool invertColors); +void ReadTileImage(char *path, int tilesWidth, int metatileWidth, int metatileHeight, struct Image *image, bool invertColors); +void WriteTileImage(char *path, enum NumTilesMode numTilesMode, int numTiles, int metatileWidth, int metatileHeight, struct Image *image, bool invertColors); +void ReadPlainImage(char *path, int dataWidth, struct Image *image, bool invertColors); +void WritePlainImage(char *path, int dataWidth, struct Image *image, bool invertColors); void FreeImage(struct Image *image); void ReadGbaPalette(char *path, struct Palette *palette); void WriteGbaPalette(char *path, struct Palette *palette); diff --git a/tools/gbagfx/main.c b/tools/gbagfx/main.c index 5d4faacab044..98a1a1edf9f2 100644 --- a/tools/gbagfx/main.c +++ b/tools/gbagfx/main.c @@ -25,6 +25,9 @@ void ConvertGbaToPng(char *inputPath, char *outputPath, struct GbaToPngOptions * { struct Image image; + image.bitDepth = options->bitDepth; + image.tilemap.data.affine = NULL; + if (options->paletteFilePath != NULL) { char *paletteFileExtension = GetFileExtensionAfterDot(options->paletteFilePath); @@ -45,22 +48,25 @@ void ConvertGbaToPng(char *inputPath, char *outputPath, struct GbaToPngOptions * image.hasPalette = false; } - if (options->tilemapFilePath != NULL) + if (options->isTiled) { - int fileSize; - image.tilemap.data.affine = ReadWholeFile(options->tilemapFilePath, &fileSize); - if (options->isAffineMap && options->bitDepth != 8) - FATAL_ERROR("affine maps are necessarily 8bpp\n"); - image.isAffine = options->isAffineMap; - image.tilemap.size = fileSize; + if (options->tilemapFilePath != NULL) + { + int fileSize; + image.tilemap.data.affine = ReadWholeFile(options->tilemapFilePath, &fileSize); + if (options->isAffineMap && options->bitDepth != 8) + FATAL_ERROR("affine maps are necessarily 8bpp\n"); + image.isAffine = options->isAffineMap; + image.tilemap.size = fileSize; + } + ReadTileImage(inputPath, options->width, options->metatileWidth, options->metatileHeight, &image, !image.hasPalette); } else { - image.tilemap.data.affine = NULL; + image.width = options->width; + ReadPlainImage(inputPath, options->dataWidth, &image, !image.hasPalette); } - ReadImage(inputPath, options->width, options->bitDepth, options->metatileWidth, options->metatileHeight, &image, !image.hasPalette); - image.hasTransparency = options->hasTransparency; WritePng(outputPath, &image); @@ -77,7 +83,10 @@ void ConvertPngToGba(char *inputPath, char *outputPath, struct PngToGbaOptions * ReadPng(inputPath, &image); - WriteImage(outputPath, options->numTilesMode, options->numTiles, options->bitDepth, options->metatileWidth, options->metatileHeight, &image, !image.hasPalette); + if (options->isTiled) + WriteTileImage(outputPath, options->numTilesMode, options->numTiles, options->metatileWidth, options->metatileHeight, &image, !image.hasPalette); + else + WritePlainImage(outputPath, options->dataWidth, &image, !image.hasPalette); FreeImage(&image); } @@ -94,6 +103,8 @@ void HandleGbaToPngCommand(char *inputPath, char *outputPath, int argc, char **a options.metatileHeight = 1; options.tilemapFilePath = NULL; options.isAffineMap = false; + options.isTiled = true; + options.dataWidth = 1; for (int i = 3; i < argc; i++) { @@ -162,6 +173,22 @@ void HandleGbaToPngCommand(char *inputPath, char *outputPath, int argc, char **a { options.isAffineMap = true; } + else if (strcmp(option, "-plain") == 0) + { + options.isTiled = false; + } + else if (strcmp(option, "-data_width") == 0) + { + if (i + 1 >= argc) + FATAL_ERROR("No data width value following \"-data_width\".\n"); + i++; + + if (!ParseNumber(argv[i], NULL, 10, &options.dataWidth)) + FATAL_ERROR("Failed to parse data width.\n"); + + if (options.dataWidth < 1) + FATAL_ERROR("Data width must be positive.\n"); + } else { FATAL_ERROR("Unrecognized option \"%s\".\n", option); @@ -177,15 +204,16 @@ void HandleGbaToPngCommand(char *inputPath, char *outputPath, int argc, char **a void HandlePngToGbaCommand(char *inputPath, char *outputPath, int argc, char **argv) { char *outputFileExtension = GetFileExtensionAfterDot(outputPath); - int bitDepth = outputFileExtension[0] - '0'; struct PngToGbaOptions options; options.numTilesMode = NUM_TILES_IGNORE; options.numTiles = 0; - options.bitDepth = bitDepth; + options.bitDepth = outputFileExtension[0] - '0'; options.metatileWidth = 1; options.metatileHeight = 1; options.tilemapFilePath = NULL; options.isAffineMap = false; + options.isTiled = true; + options.dataWidth = 1; for (int i = 3; i < argc; i++) { @@ -236,6 +264,22 @@ void HandlePngToGbaCommand(char *inputPath, char *outputPath, int argc, char **a if (options.metatileHeight < 1) FATAL_ERROR("metatile height must be positive.\n"); } + else if (strcmp(option, "-plain") == 0) + { + options.isTiled = false; + } + else if (strcmp(option, "-data_width") == 0) + { + if (i + 1 >= argc) + FATAL_ERROR("No data width value following \"-data_width\".\n"); + i++; + + if (!ParseNumber(argv[i], NULL, 10, &options.dataWidth)) + FATAL_ERROR("Failed to parse data width.\n"); + + if (options.dataWidth < 1) + FATAL_ERROR("Data width must be positive.\n"); + } else { FATAL_ERROR("Unrecognized option \"%s\".\n", option); @@ -403,7 +447,7 @@ void HandleLZCompressCommand(char *inputPath, char *outputPath, int argc, char * else if (strcmp(option, "-search") == 0) { if (i + 1 >= argc) - FATAL_ERROR("No size following \"-overflow\".\n"); + FATAL_ERROR("No size following \"-search\".\n"); i++; diff --git a/tools/gbagfx/options.h b/tools/gbagfx/options.h index 250b723450aa..830158b52e90 100644 --- a/tools/gbagfx/options.h +++ b/tools/gbagfx/options.h @@ -15,6 +15,8 @@ struct GbaToPngOptions { int metatileHeight; char *tilemapFilePath; bool isAffineMap; + bool isTiled; + int dataWidth; }; struct PngToGbaOptions { @@ -25,6 +27,8 @@ struct PngToGbaOptions { int metatileHeight; char *tilemapFilePath; bool isAffineMap; + bool isTiled; + int dataWidth; }; #endif // OPTIONS_H From 292d460810f6a40550f6f3521374eb334243db12 Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Fri, 12 May 2023 14:02:14 +0200 Subject: [PATCH 386/428] Fix ability select in debug givemon --- src/debug.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/debug.c b/src/debug.c index 3fb79d2e8639..8fff84d57de2 100644 --- a/src/debug.c +++ b/src/debug.c @@ -2327,7 +2327,7 @@ static void DebugAction_Give_Pokemon_SelectNature(u8 taskId) } static void DebugAction_Give_Pokemon_SelectAbility(u8 taskId) { - u8 abilityId; + u16 abilityId; u8 abilityCount = NUM_ABILITY_SLOTS - 1; //-1 for proper iteration u8 i = 0; From a89288e30e958add69295c910eb8b8f041add5c5 Mon Sep 17 00:00:00 2001 From: AaghatIsLive <109757010+AaghatIsLive@users.noreply.github.com> Date: Fri, 12 May 2023 17:54:47 +0530 Subject: [PATCH 387/428] Fix Illumise pallete (#2995) --- graphics/pokemon/illumise/normal.pal | 242 +-------------------------- 1 file changed, 1 insertion(+), 241 deletions(-) diff --git a/graphics/pokemon/illumise/normal.pal b/graphics/pokemon/illumise/normal.pal index b1f415775ad5..71e5ab84d8ba 100644 --- a/graphics/pokemon/illumise/normal.pal +++ b/graphics/pokemon/illumise/normal.pal @@ -1,6 +1,6 @@ JASC-PAL 0100 -256 +16 152 208 160 152 128 80 224 176 72 @@ -17,243 +17,3 @@ JASC-PAL 0 88 208 56 56 56 120 120 120 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 From d09072fd0dc8da040956bf28cc94793100e56727 Mon Sep 17 00:00:00 2001 From: Frank DeBlasio <35279583+fdeblasio@users.noreply.github.com> Date: Sun, 14 May 2023 12:55:08 -0400 Subject: [PATCH 388/428] Updated Esper Wing's accuracy if B_UPDATED_MOVE_DATA is Gen9 (#3004) --- src/data/battle_moves.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index b30f62a68492..ef6ad52a1c62 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -12699,12 +12699,13 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_9 .power = 80, + .accuracy = 100, #else .power = 75, + .accuracy = 90, #endif .effect = EFFECT_SPEED_UP_HIT, .type = TYPE_PSYCHIC, - .accuracy = 90, .pp = 10, .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, From f6f0e5fa33dfe3154195619da940642b2b3cb06c Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Mon, 15 May 2023 01:03:14 +0200 Subject: [PATCH 389/428] Fix for wrong mon position for scripted wild doubles (#2996) --- src/script_pokemon_util.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/script_pokemon_util.c b/src/script_pokemon_util.c index 34f75ef8e504..bfe2e7581abb 100755 --- a/src/script_pokemon_util.c +++ b/src/script_pokemon_util.c @@ -172,12 +172,12 @@ void CreateScriptedDoubleWildMon(u16 species1, u8 level1, u16 item1, u16 species SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, heldItem1); } - CreateMon(&gEnemyParty[3], species2, level2, 32, 0, 0, OT_ID_PLAYER_ID, 0); + CreateMon(&gEnemyParty[1], species2, level2, 32, 0, 0, OT_ID_PLAYER_ID, 0); if (item2) { heldItem2[0] = item2; heldItem2[1] = item2 >> 8; - SetMonData(&gEnemyParty[3], MON_DATA_HELD_ITEM, heldItem2); + SetMonData(&gEnemyParty[1], MON_DATA_HELD_ITEM, heldItem2); } } From 2420134e4532d87f44768a919229fe908a685c63 Mon Sep 17 00:00:00 2001 From: Frank DeBlasio <35279583+fdeblasio@users.noreply.github.com> Date: Sun, 14 May 2023 19:30:30 -0400 Subject: [PATCH 390/428] Updated Ability Patch for Gen 9 functionality (#2989) --- src/party_menu.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/party_menu.c b/src/party_menu.c index aa37b1c69151..27f4e0da42a5 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -4663,7 +4663,6 @@ void Task_AbilityPatch(u8 taskId) // Can't use. if (gSpeciesInfo[tSpecies].abilities[tAbilityNum] == 0 || !tSpecies - || GetMonData(&gPlayerParty[tMonId], MON_DATA_ABILITY_NUM, NULL) > 1 ) { gPartyMenuUseExitCallback = FALSE; @@ -4734,7 +4733,10 @@ void ItemUseCB_AbilityPatch(u8 taskId, TaskFunc task) tState = 0; tMonId = gPartyMenu.slotId; tSpecies = GetMonData(&gPlayerParty[tMonId], MON_DATA_SPECIES, NULL); - tAbilityNum = 2; + if (GetMonData(&gPlayerParty[tMonId], MON_DATA_ABILITY_NUM, NULL) == 2) + tAbilityNum = 0; + else + tAbilityNum = 2; SetWordTaskArg(taskId, tOldFunc, (uintptr_t)(gTasks[taskId].func)); gTasks[taskId].func = Task_AbilityPatch; } From 76379661d05525b3fef87f6a640f003744475515 Mon Sep 17 00:00:00 2001 From: Eclipse <115349505+SubzeroEclipse@users.noreply.github.com> Date: Mon, 15 May 2023 04:09:45 +0200 Subject: [PATCH 391/428] Fixed mons mot disobeying with Gen8 mechanics disabled (#2990) --- src/battle_util.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/battle_util.c b/src/battle_util.c index e8c9b8d8cd35..5aa2fc153f46 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -8114,8 +8114,6 @@ u8 IsMonDisobedient(void) if (!IsOtherTrainer(gBattleMons[gBattlerAttacker].otId, gBattleMons[gBattlerAttacker].otName)) levelReferenced = gBattleMons[gBattlerAttacker].metLevel; else -#else - if (gBattleMons[gBattlerAttacker].level <= obedienceLevel) #endif levelReferenced = gBattleMons[gBattlerAttacker].level; From 6458cab70a2533263518a877013a230512dacd39 Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Mon, 15 May 2023 15:07:09 -0400 Subject: [PATCH 392/428] use NATIVE_ARGS in various to callnative conversions --- src/battle_script_commands.c | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index eddf6d6e1942..896b57ffccba 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -8805,7 +8805,7 @@ static bool32 CanTeleport(u8 battlerId) { struct Pokemon *party = GetBattlerParty(battlerId); u32 species, count, i; - + for (i = 0; i < PARTY_SIZE; i++) { species = GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG); @@ -16317,33 +16317,33 @@ static bool8 IsFinalStrikeEffect(u16 move) // 10 bytes long (callnative(5) + counter(1) + ptr(4)) void BS_CheckParentalBondCounter(void) { + NATIVE_ARGS(u8 counter, const u8 *jumpInstr); // Some effects should only happen on the first or second strike of Parental Bond, // so a way to check this in battle scripts is useful - u8 counter = T1_READ_8(gBattlescriptCurrInstr + 5); - if (gSpecialStatuses[gBattlerAttacker].parentalBondState == counter && gBattleMons[gBattlerTarget].hp != 0) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 6); + if (gSpecialStatuses[gBattlerAttacker].parentalBondState == cmd->counter && gBattleMons[gBattlerTarget].hp != 0) + gBattlescriptCurrInstr = cmd->jumpInstr; else - gBattlescriptCurrInstr += 10; + gBattlescriptCurrInstr = cmd->nextInstr; } // 6 bytes long (callnative(5) + battler(1)) void BS_GetBattlerSide(void) { - gBattleCommunication[0] = GetBattlerSide(gBattlescriptCurrInstr[5]); - gBattlescriptCurrInstr += 6; + NATIVE_ARGS(u8 battler); + gBattleCommunication[0] = GetBattlerSide(cmd->battler); + gBattlescriptCurrInstr = cmd->nextInstr; } -// 6 bytes long (callnative(5) + battler(1)) void BS_CanTeleport(void) { - u8 battler = gBattlescriptCurrInstr[5]; - gBattleCommunication[0] = CanTeleport(battler); - gBattlescriptCurrInstr += 6; + NATIVE_ARGS(u8 battler); + gBattleCommunication[0] = CanTeleport(cmd->battler); + gBattlescriptCurrInstr = cmd->nextInstr; } -// 5 bytes long void BS_TrySymbiosis(void) { + NATIVE_ARGS(); //called by Bestow, Fling, and Bug Bite, which don't work with Cmd_removeitem. gActiveBattler = gBattlerAttacker; if (SYMBIOSIS_CHECK(gBattlerAttacker, BATTLE_PARTNER(gActiveBattler))) @@ -16357,7 +16357,7 @@ void BS_TrySymbiosis(void) return; } - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } void BS_SetZEffect(void) From eaa44cc8b5c62d70792868d8982ed1920f31f49e Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Mon, 15 May 2023 15:20:44 -0400 Subject: [PATCH 393/428] fix syntax --- src/battle_script_commands.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 896b57ffccba..88a76adff1cc 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -8805,7 +8805,7 @@ static bool32 CanTeleport(u8 battlerId) { struct Pokemon *party = GetBattlerParty(battlerId); u32 species, count, i; - + for (i = 0; i < PARTY_SIZE; i++) { species = GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG); @@ -16314,7 +16314,6 @@ static bool8 IsFinalStrikeEffect(u16 move) return FALSE; } -// 10 bytes long (callnative(5) + counter(1) + ptr(4)) void BS_CheckParentalBondCounter(void) { NATIVE_ARGS(u8 counter, const u8 *jumpInstr); @@ -16326,7 +16325,6 @@ void BS_CheckParentalBondCounter(void) gBattlescriptCurrInstr = cmd->nextInstr; } -// 6 bytes long (callnative(5) + battler(1)) void BS_GetBattlerSide(void) { NATIVE_ARGS(u8 battler); From 49a9210e9dfafeb1e984a000c73cdd063e0db948 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Mon, 15 May 2023 16:45:30 -0300 Subject: [PATCH 394/428] Fixed typo in include/config/battle.h --- include/config/battle.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/config/battle.h b/include/config/battle.h index 6475f6664c30..4a1bbdc2f9c2 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -191,7 +191,7 @@ // Other settings #define B_DOUBLE_WILD_CHANCE 0 // % chance of encountering two Pokémon in a Wild Encounter. -#define B_DOUBLE_WILD_REQUIRE_2_MONS FALSE // If set to TRUE, Wild Double Battles will default to Single Battles when the player only has 1 usuable Pokémon, ignoring B_DOUBLE_WILD_CHANCE and B_FLAG_FORCE_DOUBLE_WILD. +#define B_DOUBLE_WILD_REQUIRE_2_MONS FALSE // If set to TRUE, Wild Double Battles will default to Single Battles when the player only has 1 usable Pokémon, ignoring B_DOUBLE_WILD_CHANCE and B_FLAG_FORCE_DOUBLE_WILD. #define B_MULTI_BATTLE_WHITEOUT GEN_LATEST // In Gen4+, multi battles end when the Player and also their Partner don't have any more Pokémon to fight. #define B_EVOLUTION_AFTER_WHITEOUT GEN_LATEST // In Gen6+, Pokemon that qualify for evolution after battle will evolve even if the player loses. #define B_WILD_NATURAL_ENEMIES TRUE // If set to TRUE, certain wild mon species will attack other species when partnered in double wild battles (eg. Zangoose vs Seviper) From 37874fe5c167602960811919fc1ffcfffb6133c2 Mon Sep 17 00:00:00 2001 From: AgustinGDLV <103095241+AgustinGDLV@users.noreply.github.com> Date: Tue, 16 May 2023 16:21:05 -0700 Subject: [PATCH 395/428] fixed revival blessing failure still showing anim (#3010) --- data/battle_scripts_1.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index bcb1275e20b9..2fe9c74ee6f7 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -435,9 +435,9 @@ BattleScript_EffectRevivalBlessing:: attackcanceler attackstring ppreduce + tryrevivalblessing BattleScript_ButItFailed attackanimation waitanimation - tryrevivalblessing BattleScript_ButItFailed printstring STRINGID_PKMNREVIVEDREADYTOFIGHT waitmessage B_WAIT_TIME_LONG jumpifbyte CMP_EQUAL, gBattleCommunication, TRUE, BattleScript_EffectRevivalBlessingSendOut From 0c182345bf015aa7e659e68b6598955d992aece0 Mon Sep 17 00:00:00 2001 From: AgustinGDLV Date: Tue, 16 May 2023 16:24:25 -0700 Subject: [PATCH 396/428] reworked weather form reversion + added more tests --- asm/macros/battle_script.inc | 2 +- data/battle_scripts_1.s | 39 +++++++----------- include/battle_scripts.h | 2 +- include/constants/form_change_types.h | 1 + src/battle_script_commands.c | 7 ++-- src/battle_util.c | 25 ++++++++++-- src/data/pokemon/form_change_tables.h | 16 ++++---- test/ability_flower_gift.c | 48 +++++++++++++++++++--- test/ability_forecast.c | 59 +++++++++++++++++++++++++-- 9 files changed, 149 insertions(+), 50 deletions(-) diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index dec096e6e1e2..4b0b341ddf52 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -1346,7 +1346,7 @@ callnative BS_ItemRestorePP .endm - .macro trytorevertweatherform + .macro tryrevertweatherform callnative BS_TryRevertWeatherForm .endm diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 26f30ef3f5cb..89e69b50cac1 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -1580,7 +1580,7 @@ BattleScript_MoveEffectCoreEnforcer:: printstring STRINGID_PKMNSABILITYSUPPRESSED waitmessage B_WAIT_TIME_LONG trytoclearprimalweather - trytorevertweatherform + tryrevertweatherform printstring STRINGID_EMPTYSTRING3 waitmessage 1 BattleScript_CoreEnforcerRet: @@ -2729,7 +2729,7 @@ BattleScript_EffectSimpleBeam: printstring STRINGID_PKMNACQUIREDSIMPLE waitmessage B_WAIT_TIME_LONG trytoclearprimalweather - trytorevertweatherform + tryrevertweatherform printstring STRINGID_EMPTYSTRING3 waitmessage 1 tryendneutralizinggas BS_TARGET @@ -2829,7 +2829,7 @@ BattleScript_EffectWorrySeed: printstring STRINGID_PKMNACQUIREDABILITY waitmessage B_WAIT_TIME_LONG trytoclearprimalweather - trytorevertweatherform + tryrevertweatherform printstring STRINGID_EMPTYSTRING3 waitmessage 1 goto BattleScript_MoveEnd @@ -2961,7 +2961,7 @@ BattleScript_EffectGastroAcid: printstring STRINGID_PKMNSABILITYSUPPRESSED waitmessage B_WAIT_TIME_LONG trytoclearprimalweather - trytorevertweatherform + tryrevertweatherform printstring STRINGID_EMPTYSTRING3 waitmessage 1 tryendneutralizinggas BS_TARGET @@ -8003,9 +8003,7 @@ BattleScript_CudChewActivates:: setbyte sBERRY_OVERRIDE, 0 end3 -BattleScript_TargetFormChange:: - pause 5 - call BattleScript_AbilityPopUpTarget +BattleScript_TargetFormChangeNoPopup: printstring STRINGID_EMPTYSTRING3 waitmessage 1 handleformchange BS_TARGET, 0 @@ -8015,32 +8013,25 @@ BattleScript_TargetFormChange:: handleformchange BS_TARGET, 2 return +BattleScript_TargetFormChange:: + pause 5 + call BattleScript_AbilityPopUpTarget + call BattleScript_TargetFormChangeNoPopup + return + BattleScript_TargetFormChangeWithString:: pause 5 call BattleScript_AbilityPopUpTarget - printstring STRINGID_EMPTYSTRING3 - waitmessage 1 - handleformchange BS_TARGET, 0 - handleformchange BS_TARGET, 1 - playanimation BS_TARGET, B_ANIM_FORM_CHANGE, NULL - waitanimation - handleformchange BS_TARGET, 2 + call BattleScript_TargetFormChangeNoPopup printstring STRINGID_PKMNTRANSFORMED waitmessage B_WAIT_TIME_LONG return -BattleScript_TargetFormChangeWithStringNoPopupEnd3:: - pause 5 - printstring STRINGID_EMPTYSTRING3 - waitmessage 1 - handleformchange BS_TARGET, 0 - handleformchange BS_TARGET, 1 - playanimation BS_TARGET, B_ANIM_FORM_CHANGE, NULL - waitanimation - handleformchange BS_TARGET, 2 +BattleScript_TargetFormChangeWithStringNoPopup:: + call BattleScript_TargetFormChangeNoPopup printstring STRINGID_PKMNTRANSFORMED waitmessage B_WAIT_TIME_LONG - end3 + return BattleScript_BattlerFormChangeWithStringEnd3:: pause 5 diff --git a/include/battle_scripts.h b/include/battle_scripts.h index 4a005727536e..c5b844b99d46 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -465,7 +465,7 @@ extern const u8 BattleScript_MoveEffectStockpileWoreOff[]; extern const u8 BattleScript_StealthRockActivates[]; extern const u8 BattleScript_SpikesActivates[]; extern const u8 BattleScript_BerserkGeneRet[]; -extern const u8 BattleScript_TargetFormChangeWithStringNoPopupEnd3[]; +extern const u8 BattleScript_TargetFormChangeWithStringNoPopup[]; // zmoves extern const u8 BattleScript_ZMoveActivateDamaging[]; diff --git a/include/constants/form_change_types.h b/include/constants/form_change_types.h index 651bcf7888c7..81d1b045b050 100644 --- a/include/constants/form_change_types.h +++ b/include/constants/form_change_types.h @@ -89,6 +89,7 @@ // Form change that activates when a specific weather is set during battle. // param1: weather to check +// param2: (optional) revert if specified ability is lost #define FORM_CHANGE_BATTLE_WEATHER 14 // Form change that activates automatically when the turn ends. diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index b21197a67902..dd198f51213e 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -16567,13 +16567,12 @@ void BS_ItemRestorePP(void) void BS_TryRevertWeatherForm(void) { NATIVE_ARGS(); - u16 ability = gBattleMons[gBattlerTarget].ability; if (B_WEATHER_FORM_SUPPRESS >= GEN_5 - && (ability == ABILITY_FORECAST || ability == ABILITY_FLOWER_GIFT) - && TryBattleFormChange(gBattlerTarget, FORM_CHANGE_BATTLE_SWITCH)) // revert form + && TryBattleFormChange(gBattlerTarget, FORM_CHANGE_BATTLE_WEATHER)) { gBattleScripting.battler = gBattlerTarget; - BattleScriptPushCursorAndCallback(BattleScript_TargetFormChangeWithStringNoPopupEnd3); + BattleScriptPush(cmd->nextInstr); + gBattlescriptCurrInstr = BattleScript_TargetFormChangeWithStringNoPopup; return; } gBattlescriptCurrInstr = cmd->nextInstr; diff --git a/src/battle_util.c b/src/battle_util.c index 67270469ea2a..602dd5c74bff 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -6013,8 +6013,10 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move #else TRY_WEATHER_FORM: #endif - if ((IsBattlerWeatherAffected(battler, gBattleWeather) || gBattleWeather == B_WEATHER_NONE) - && TryBattleFormChange(battler, FORM_CHANGE_BATTLE_WEATHER)) + if ((IsBattlerWeatherAffected(battler, gBattleWeather) + || gBattleWeather == B_WEATHER_NONE + || !WEATHER_HAS_EFFECT) // Air Lock active + && TryBattleFormChange(battler, FORM_CHANGE_BATTLE_WEATHER)) { BattleScriptPushCursorAndCallback(BattleScript_BattlerFormChangeWithStringEnd3); effect++; @@ -10101,9 +10103,26 @@ u16 GetBattleFormChangeTargetSpecies(u8 battlerId, u16 method) } break; case FORM_CHANGE_BATTLE_WEATHER: - if (gBattleWeather & formChanges[i].param1 + // Check if there is a required ability and if the battler's ability does not match it + // or is suppressed. If so, revert to the no weather form. + if (formChanges[i].param2 + && (gBattleMons[battlerId].ability != formChanges[i].param2 + || (gStatuses3[gBattlerTarget] & STATUS3_GASTRO_ACID)) + && formChanges[i].param1 == B_WEATHER_NONE) + { + targetSpecies = formChanges[i].targetSpecies; + } + // We need to revert the weather form if the field is under Air Lock, too. + if (!WEATHER_HAS_EFFECT && formChanges[i].param1 == B_WEATHER_NONE) + { + targetSpecies = formChanges[i].targetSpecies; + } + // Otherwise, just check for a match between the weather and the form change table. + else if (gBattleWeather & formChanges[i].param1 || (gBattleWeather == B_WEATHER_NONE && formChanges[i].param1 == B_WEATHER_NONE)) + { targetSpecies = formChanges[i].targetSpecies; + } break; case FORM_CHANGE_BATTLE_TURN_END: if (formChanges[i].param1 == GetBattlerAbility(battlerId)) diff --git a/src/data/pokemon/form_change_tables.h b/src/data/pokemon/form_change_tables.h index c4ade7b9a8ff..4137c9ba35d5 100644 --- a/src/data/pokemon/form_change_tables.h +++ b/src/data/pokemon/form_change_tables.h @@ -156,11 +156,11 @@ static const struct FormChange sAbsolFormChangeTable[] = { }; static const struct FormChange sCastformFormChangeTable[] = { - {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CASTFORM_SUNNY, B_WEATHER_SUN}, - {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CASTFORM_RAINY, B_WEATHER_RAIN}, - {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CASTFORM_SNOWY, B_WEATHER_HAIL}, - {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CASTFORM, ~(B_WEATHER_SUN | B_WEATHER_RAIN | B_WEATHER_HAIL)}, - {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CASTFORM, B_WEATHER_NONE}, + {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CASTFORM_SUNNY, B_WEATHER_SUN, ABILITY_FORECAST}, + {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CASTFORM_RAINY, B_WEATHER_RAIN, ABILITY_FORECAST}, + {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CASTFORM_SNOWY, B_WEATHER_HAIL, ABILITY_FORECAST}, + {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CASTFORM, ~(B_WEATHER_SUN | B_WEATHER_RAIN | B_WEATHER_HAIL), ABILITY_FORECAST}, + {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CASTFORM, B_WEATHER_NONE, ABILITY_FORECAST}, {FORM_CHANGE_BATTLE_SWITCH, SPECIES_CASTFORM}, {FORM_CHANGE_FAINT, SPECIES_CASTFORM}, {FORM_CHANGE_END_BATTLE, SPECIES_CASTFORM}, @@ -231,9 +231,9 @@ static const struct FormChange sBurmyFormChangeTable[] = { }; static const struct FormChange sCherrimFormChangeTable[] = { - {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CHERRIM_SUNSHINE, B_WEATHER_SUN}, - {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CHERRIM, ~B_WEATHER_SUN}, - {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CHERRIM, B_WEATHER_NONE}, + {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CHERRIM_SUNSHINE, B_WEATHER_SUN, ABILITY_FLOWER_GIFT}, + {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CHERRIM, ~B_WEATHER_SUN, ABILITY_FLOWER_GIFT}, + {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CHERRIM, B_WEATHER_NONE, ABILITY_FLOWER_GIFT}, {FORM_CHANGE_BATTLE_SWITCH, SPECIES_CHERRIM}, {FORM_CHANGE_FAINT, SPECIES_CHERRIM}, {FORM_CHANGE_END_BATTLE, SPECIES_CHERRIM}, diff --git a/test/ability_flower_gift.c b/test/ability_flower_gift.c index 2f2b98d1ef30..1967b874d698 100644 --- a/test/ability_flower_gift.c +++ b/test/ability_flower_gift.c @@ -54,7 +54,7 @@ SINGLE_BATTLE_TEST("Flower Gift transforms Cherrim back to normal when its abili } } -DOUBLE_BATTLE_TEST("Flower Gift increases the attack of Cherrim's ally by 1.5x", s16 damage) +DOUBLE_BATTLE_TEST("Flower Gift increases the attack of Cherrim and its allies by 1.5x", s16 damageL, s16 damageR) { bool32 sunny; PARAMETRIZE { sunny = FALSE; } @@ -67,19 +67,55 @@ DOUBLE_BATTLE_TEST("Flower Gift increases the attack of Cherrim's ally by 1.5x", } WHEN { if (sunny) TURN { MOVE(playerLeft, MOVE_SUNNY_DAY); } - TURN { MOVE(playerRight, MOVE_TACKLE, target: opponentLeft); } + TURN { MOVE(playerLeft, MOVE_TACKLE, target: opponentLeft); + MOVE(playerRight, MOVE_TACKLE, target: opponentLeft); } } SCENE { - // Sun activates + // sun activates if (sunny) { ABILITY_POPUP(playerLeft, ABILITY_FLOWER_GIFT); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, playerLeft); MESSAGE("Cherrim transformed!"); } - // Partner uses Tackle + // player uses Tackle + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, playerLeft); + HP_BAR(opponentLeft, captureDamage: &results[i].damageL); + // partner uses Tackle ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, playerRight); - HP_BAR(opponentLeft, captureDamage: &results[i].damage); + HP_BAR(opponentLeft, captureDamage: &results[i].damageR); } FINALLY { - EXPECT_MUL_EQ(results[0].damage, UQ_4_12(1.5), results[1].damage); + EXPECT_MUL_EQ(results[0].damageL, UQ_4_12(1.5), results[1].damageL); + EXPECT_MUL_EQ(results[0].damageR, UQ_4_12(1.5), results[1].damageR); + } +} + +DOUBLE_BATTLE_TEST("Flower Gift increases the Sp. Def of Cherrim and its allies by 1.5x", s16 damageL, s16 damageR) +{ + bool32 sunny; + PARAMETRIZE { sunny = FALSE; } + PARAMETRIZE { sunny = TRUE; } + GIVEN { + PLAYER(SPECIES_CHERRIM) { Ability(ABILITY_FLOWER_GIFT); }; + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + if (sunny) + TURN { MOVE(playerLeft, MOVE_SUNNY_DAY); } + TURN { MOVE(opponentLeft, MOVE_HYPER_VOICE, target: playerLeft); } + } SCENE { + // sun activates + if (sunny) { + ABILITY_POPUP(playerLeft, ABILITY_FLOWER_GIFT); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, playerLeft); + MESSAGE("Cherrim transformed!"); + } + // opponentLeft uses Hyper Voice + ANIMATION(ANIM_TYPE_MOVE, MOVE_HYPER_VOICE, opponentLeft); + HP_BAR(playerLeft, captureDamage: &results[i].damageL); + HP_BAR(playerRight, captureDamage: &results[i].damageR); + } FINALLY { + EXPECT_MUL_EQ(results[1].damageL, UQ_4_12(1.5), results[0].damageL); + EXPECT_MUL_EQ(results[1].damageR, UQ_4_12(1.5), results[0].damageR); } } diff --git a/test/ability_forecast.c b/test/ability_forecast.c index dba09992d7bc..826ba0e99b88 100644 --- a/test/ability_forecast.c +++ b/test/ability_forecast.c @@ -7,6 +7,7 @@ SINGLE_BATTLE_TEST("Forecast transforms Castform in weather from an opponent's m PARAMETRIZE { move = MOVE_SUNNY_DAY; } PARAMETRIZE { move = MOVE_RAIN_DANCE; } PARAMETRIZE { move = MOVE_HAIL; } + PARAMETRIZE { move = MOVE_SNOWSCAPE; } GIVEN { PLAYER(SPECIES_CASTFORM) { Ability(ABILITY_FORECAST); }; OPPONENT(SPECIES_WOBBUFFET); @@ -25,6 +26,7 @@ SINGLE_BATTLE_TEST("Forecast transforms Castform in weather from its own move") PARAMETRIZE { move = MOVE_SUNNY_DAY; } PARAMETRIZE { move = MOVE_RAIN_DANCE; } PARAMETRIZE { move = MOVE_HAIL; } + PARAMETRIZE { move = MOVE_SNOWSCAPE; } GIVEN { PLAYER(SPECIES_CASTFORM) { Ability(ABILITY_FORECAST); }; OPPONENT(SPECIES_WOBBUFFET); @@ -43,6 +45,7 @@ DOUBLE_BATTLE_TEST("Forecast transforms Castform in weather from a partner's mov PARAMETRIZE { move = MOVE_SUNNY_DAY; } PARAMETRIZE { move = MOVE_RAIN_DANCE; } PARAMETRIZE { move = MOVE_HAIL; } + PARAMETRIZE { move = MOVE_SNOWSCAPE; } GIVEN { PLAYER(SPECIES_CASTFORM) { Ability(ABILITY_FORECAST); }; PLAYER(SPECIES_WOBBUFFET); @@ -63,6 +66,7 @@ DOUBLE_BATTLE_TEST("Forecast transforms all Castforms present in weather") PARAMETRIZE { move = MOVE_SUNNY_DAY; } PARAMETRIZE { move = MOVE_RAIN_DANCE; } PARAMETRIZE { move = MOVE_HAIL; } + PARAMETRIZE { move = MOVE_SNOWSCAPE; } GIVEN { PLAYER(SPECIES_CASTFORM) { Ability(ABILITY_FORECAST); }; PLAYER(SPECIES_CASTFORM) { Ability(ABILITY_FORECAST); }; @@ -88,10 +92,14 @@ DOUBLE_BATTLE_TEST("Forecast transforms all Castforms present in weather") SINGLE_BATTLE_TEST("Forecast transforms Castform in weather from an ability") { + u32 species, ability; + PARAMETRIZE { species = SPECIES_KYOGRE; ability = ABILITY_DRIZZLE; } + PARAMETRIZE { species = SPECIES_GROUDON; ability = ABILITY_DROUGHT; } + PARAMETRIZE { species = SPECIES_ABOMASNOW; ability = ABILITY_SNOW_WARNING; } GIVEN { PLAYER(SPECIES_CASTFORM) { Ability(ABILITY_FORECAST); }; OPPONENT(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_KYOGRE) { Ability(ABILITY_DRIZZLE); }; + OPPONENT(species) { Ability(ability); }; } WHEN { TURN { SWITCH(opponent, 1); } } SCENE { @@ -103,14 +111,17 @@ SINGLE_BATTLE_TEST("Forecast transforms Castform in weather from an ability") SINGLE_BATTLE_TEST("Forecast transforms Castform in primal weather") { + u32 species, item, ability; + PARAMETRIZE { species = SPECIES_KYOGRE; ability = ABILITY_PRIMORDIAL_SEA; item = ITEM_BLUE_ORB; } + PARAMETRIZE { species = SPECIES_GROUDON; ability = ABILITY_DESOLATE_LAND; item = ITEM_RED_ORB; } GIVEN { PLAYER(SPECIES_CASTFORM) { Ability(ABILITY_FORECAST); }; OPPONENT(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_KYOGRE) { Ability(ABILITY_DRIZZLE); Item(ITEM_BLUE_ORB); }; + OPPONENT(species) { Item(item); }; } WHEN { TURN { SWITCH(opponent, 1); } } SCENE { - ABILITY_POPUP(opponent, ABILITY_PRIMORDIAL_SEA); + ABILITY_POPUP(opponent, ability); ABILITY_POPUP(player, ABILITY_FORECAST); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); MESSAGE("Castform transformed!"); @@ -161,6 +172,29 @@ SINGLE_BATTLE_TEST("Forecast transforms Castform back to normal when Sandstorm i } } +SINGLE_BATTLE_TEST("Forecast transforms Castform back to normal under Air Lock") +{ + GIVEN { + PLAYER(SPECIES_CASTFORM) { Ability(ABILITY_FORECAST); }; + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_RAYQUAZA); + } WHEN { + TURN { MOVE(player, MOVE_RAIN_DANCE); } + TURN { SWITCH(opponent, 1); } + TURN { MOVE(opponent, MOVE_CELEBRATE, megaEvolve: TRUE); } + } SCENE { + // transforms + ABILITY_POPUP(player, ABILITY_FORECAST); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); + MESSAGE("Castform transformed!"); + // back to normal + ABILITY_POPUP(opponent, ABILITY_AIR_LOCK); + ABILITY_POPUP(player, ABILITY_FORECAST); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); + MESSAGE("Castform transformed!"); + } +} + SINGLE_BATTLE_TEST("Forecast transforms Castform on switch-in") { GIVEN { @@ -199,3 +233,22 @@ SINGLE_BATTLE_TEST("Forecast transforms Castform when weather changes") MESSAGE("Castform transformed!"); } } + +SINGLE_BATTLE_TEST("Forecast transforms Castform back to normal when its ability is suppressed") +{ + GIVEN { + PLAYER(SPECIES_CASTFORM) { Ability(ABILITY_FORECAST); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_SUNNY_DAY); } + TURN { MOVE(opponent, MOVE_GASTRO_ACID); } + } SCENE { + // transforms in sun + ABILITY_POPUP(player, ABILITY_FORECAST); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); + MESSAGE("Castform transformed!"); + // back to normal + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); + MESSAGE("Castform transformed!"); + } +} From b269cc69060afda3e027eed2265f3fb5967232fc Mon Sep 17 00:00:00 2001 From: AgustinGDLV Date: Tue, 16 May 2023 16:37:18 -0700 Subject: [PATCH 397/428] changed gastro acid check to properly use GetBattlerAbility --- src/battle_util.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/battle_util.c b/src/battle_util.c index 5fa5a27595be..3f0e101f08fe 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -10161,8 +10161,7 @@ u16 GetBattleFormChangeTargetSpecies(u8 battlerId, u16 method) // Check if there is a required ability and if the battler's ability does not match it // or is suppressed. If so, revert to the no weather form. if (formChanges[i].param2 - && (gBattleMons[battlerId].ability != formChanges[i].param2 - || (gStatuses3[gBattlerTarget] & STATUS3_GASTRO_ACID)) + && GetBattlerAbility(battlerId) != formChanges[i].param2 && formChanges[i].param1 == B_WEATHER_NONE) { targetSpecies = formChanges[i].targetSpecies; From 7b087137072c220e06a5f11ffe59b3f3c6bfe5fd Mon Sep 17 00:00:00 2001 From: AgustinGDLV Date: Tue, 16 May 2023 20:34:16 -0700 Subject: [PATCH 398/428] changed B_WEATHER_FORM_SUPPRESS config to preproc --- src/battle_script_commands.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index cfb8c59651ad..c85446a3432b 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -16605,14 +16605,15 @@ void BS_ItemRestorePP(void) void BS_TryRevertWeatherForm(void) { NATIVE_ARGS(); - if (B_WEATHER_FORM_SUPPRESS >= GEN_5 - && TryBattleFormChange(gBattlerTarget, FORM_CHANGE_BATTLE_WEATHER)) +#if B_WEATHER_FORM_SUPPRESS >= GEN_5 + if (TryBattleFormChange(gBattlerTarget, FORM_CHANGE_BATTLE_WEATHER)) { gBattleScripting.battler = gBattlerTarget; BattleScriptPush(cmd->nextInstr); gBattlescriptCurrInstr = BattleScript_TargetFormChangeWithStringNoPopup; return; } +#endif gBattlescriptCurrInstr = cmd->nextInstr; } From d22efc9a68efafd54debd153849f08169d86f581 Mon Sep 17 00:00:00 2001 From: AgustinGDLV Date: Tue, 16 May 2023 23:14:54 -0700 Subject: [PATCH 399/428] fixed UB with unassigned variable --- test/test_runner_battle.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_runner_battle.c b/test/test_runner_battle.c index cfe5db9d6eb0..d69f2125b45c 100644 --- a/test/test_runner_battle.c +++ b/test/test_runner_battle.c @@ -402,7 +402,7 @@ const void *RandomElementArray(enum RandomTag tag, const void *array, size_t siz if (turn && turn->rng.tag == tag) { - u32 element; + u32 element = 0; for (index = 0; index < count; index++) { memcpy(&element, (const u8 *)array + size * index, size); From 487415e56bb7e0b552433d9b9cbdad49b02af41a Mon Sep 17 00:00:00 2001 From: ghoulslash <41651341+ghoulslash@users.noreply.github.com> Date: Wed, 17 May 2023 11:22:23 -0400 Subject: [PATCH 400/428] Move direct statStage boosts to use statbuffchange (#3000) * fix double counting stat boosts for download, moxie beast boost etc * speed boost use statbuffchange * BattleScript_MoveStatDrain use statbuffchange * statbuffchange for rage --------- Co-authored-by: ghoulslash --- data/battle_scripts_1.s | 10 +++++++++- src/battle_script_commands.c | 6 +----- src/battle_util.c | 6 +----- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 2fe9c74ee6f7..54dce3448d97 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -7173,8 +7173,10 @@ BattleScript_MistProtected:: return BattleScript_RageIsBuilding:: + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_RageIsBuildingEnd printstring STRINGID_PKMNRAGEBUILDING waitmessage B_WAIT_TIME_LONG +BattleScript_RageIsBuildingEnd: return BattleScript_MoveUsedIsDisabled:: @@ -8507,10 +8509,12 @@ BattleScript_AbilityPopUp: return BattleScript_SpeedBoostActivates:: + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_SpeedBoostActivatesEnd call BattleScript_AbilityPopUp playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 printstring STRINGID_PKMNRAISEDSPEED waitmessage B_WAIT_TIME_LONG +BattleScript_SpeedBoostActivatesEnd: end3 @ Can't compare directly to a value, have to compare to value at pointer @@ -9022,8 +9026,8 @@ BattleScript_MoveStatDrain:: setgraphicalstatchangevalues playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 waitanimation -.if B_ABSORBING_ABILITY_STRING >= GEN_5 statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_MoveStatDrain_Cont +.if B_ABSORBING_ABILITY_STRING >= GEN_5 printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG .else @@ -9303,6 +9307,7 @@ BattleScript_WeakArmorActivatesEnd: return BattleScript_RaiseStatOnFaintingTarget:: + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_RaiseStatOnFaintingTarget_End copybyte gBattlerAbility, gBattlerAttacker call BattleScript_AbilityPopUp setgraphicalstatchangevalues @@ -9310,9 +9315,11 @@ BattleScript_RaiseStatOnFaintingTarget:: waitanimation printstring STRINGID_LASTABILITYRAISEDSTAT waitmessage B_WAIT_TIME_LONG +BattleScript_RaiseStatOnFaintingTarget_End: return BattleScript_AttackerAbilityStatRaise:: + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_AttackerAbilityStatRaise_End copybyte gBattlerAbility, gBattlerAttacker call BattleScript_AbilityPopUp setgraphicalstatchangevalues @@ -9320,6 +9327,7 @@ BattleScript_AttackerAbilityStatRaise:: waitanimation printstring STRINGID_ATTACKERABILITYSTATRAISE waitmessage B_WAIT_TIME_LONG +BattleScript_AttackerAbilityStatRaise_End: return BattleScript_FellStingerRaisesStat:: diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 88a76adff1cc..2450e5079aff 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -5582,7 +5582,7 @@ static void Cmd_moveend(void) && gBattleMoves[gCurrentMove].power != 0 && CompareStat(gBattlerTarget, STAT_ATK, MAX_STAT_STAGE, CMP_LESS_THAN)) { - gBattleMons[gBattlerTarget].statStages[STAT_ATK]++; + SET_STATCHANGER(STAT_ATK, 1, FALSE); BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_RageIsBuilding; effect = TRUE; @@ -9494,7 +9494,6 @@ static void Cmd_various(void) && !NoAliveMonsForEitherParty() && CompareStat(gBattlerAttacker, STAT_ATK, MAX_STAT_STAGE, CMP_LESS_THAN)) { - gBattleMons[gBattlerAttacker].statStages[STAT_ATK]++; SET_STATCHANGER(STAT_ATK, 1, FALSE); PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_ATK); BattleScriptPush(cmd->nextInstr); @@ -9518,7 +9517,6 @@ static void Cmd_various(void) && !NoAliveMonsForEitherParty() && CompareStat(gBattlerAttacker, STAT_SPATK, MAX_STAT_STAGE, CMP_LESS_THAN)) { - gBattleMons[gBattlerAttacker].statStages[STAT_SPATK]++; SET_STATCHANGER(STAT_SPATK, 1, FALSE); PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_SPATK); BattleScriptPush(cmd->nextInstr); @@ -9570,7 +9568,6 @@ static void Cmd_various(void) && !NoAliveMonsForEitherParty() && CompareStat(gBattlerAttacker, i, MAX_STAT_STAGE, CMP_LESS_THAN)) { - gBattleMons[gBattlerAttacker].statStages[i]++; SET_STATCHANGER(i, 1, FALSE); PREPARE_STAT_BUFFER(gBattleTextBuff1, i); BattleScriptPush(cmd->nextInstr); @@ -9590,7 +9587,6 @@ static void Cmd_various(void) && !NoAliveMonsForEitherParty() && CompareStat(gBattleScripting.battler, STAT_SPATK, MAX_STAT_STAGE, CMP_LESS_THAN)) { - gBattleMons[gBattleScripting.battler].statStages[STAT_SPATK]++; SET_STATCHANGER(STAT_SPATK, 1, FALSE); PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_SPATK); BattleScriptPushCursor(); diff --git a/src/battle_util.c b/src/battle_util.c index e089361a20b0..8678054bb933 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -4552,7 +4552,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move if (CompareStat(battler, statId, MAX_STAT_STAGE, CMP_LESS_THAN)) { - gBattleMons[battler].statStages[statId]++; SET_STATCHANGER(statId, 1, FALSE); gBattlerAttacker = battler; PREPARE_STAT_BUFFER(gBattleTextBuff1, statId); @@ -4925,9 +4924,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move case ABILITY_SPEED_BOOST: if (CompareStat(battler, STAT_SPEED, MAX_STAT_STAGE, CMP_LESS_THAN) && gDisableStructs[battler].isFirstTurn != 2) { - gBattleMons[battler].statStages[STAT_SPEED]++; - gBattleScripting.animArg1 = 14 + STAT_SPEED; - gBattleScripting.animArg2 = 0; + SET_STATCHANGER(STAT_SPEED, 1, FALSE); BattleScriptPushCursorAndCallback(BattleScript_SpeedBoostActivates); gBattleScripting.battler = battler; effect++; @@ -5222,7 +5219,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move SET_STATCHANGER(statId, statAmount, FALSE); #if B_ABSORBING_ABILITY_STRING < GEN_5 - gBattleMons[battler].statStages[statId]++; PREPARE_STAT_BUFFER(gBattleTextBuff1, statId); #endif } From 29d2d4202e5ab8af6d2ddb9ad840d11643320390 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Thu, 18 May 2023 07:39:14 -0300 Subject: [PATCH 401/428] Evolution updates (#3009) * Add Hisuian Sneasel's evolution to gEvolutionTable * Updates -Added EVO_ITEM_NIGHT, (it's like EVO_ITEM_DAY but nighttime specific) -Added EVO_ITEM_HOLD (it's like the day based variations, but day agnostic) -Turned the trade evo items into regular evolution items -Ditched the config for the Razor Claw by request -Updated every entry in gEvolutionTable for species that could only evolve via EVO_TRADE_ITEM to LA's standard * Review corrections (extrapolations) * Post Cherrypick corrections * Corrected the description of EVO_ITEM_NIGHT * Added a config for the new items' field-evolving functionality --- include/config/item.h | 1 + include/constants/pokemon.h | 4 +- src/data/items.h | 72 ++++++++++++++++++--------------- src/data/pokemon/evolution.h | 57 +++++++++++++++++--------- src/data/pokemon/item_effects.h | 16 ++++++++ src/pokemon.c | 13 ++++++ 6 files changed, 112 insertions(+), 51 deletions(-) diff --git a/include/config/item.h b/include/config/item.h index 88cfeeb7cea5..1e174b5ff45b 100644 --- a/include/config/item.h +++ b/include/config/item.h @@ -10,6 +10,7 @@ #define I_VITAMIN_EV_CAP GEN_LATEST // In Gen8+, the Vitamins no longer have a cap of 100 EV per stat. #define I_BERRY_EV_JUMP GEN_LATEST // In Gen4 only, EV-lowering Berries lower a stat's EV to 100 if it is above 100. #define I_GRISEOUS_ORB_FORM_CHANGE GEN_LATEST // In Gen9+, the Griseous Orb no longer changes Giratina's form when held. +#define I_USE_EVO_HELD_ITEMS_FROM_BAG FALSE // If TRUE, items such as Razor Claw or Electirizer will be usable from the bag to evolve a Pokémon just like in LA. // TM config #define I_REUSABLE_TMS FALSE // In Gen5-8, TMs are reusable. Setting this to TRUE will make all vanilla TMs reusable, though they can also be cherry-picked by setting their importance to 1. diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h index 504a94ea3dc6..7c395b4964f9 100644 --- a/include/constants/pokemon.h +++ b/include/constants/pokemon.h @@ -312,7 +312,9 @@ #define EVO_SCRIPT_TRIGGER_DMG 36 // Pokémon has specified HP below max, then player interacts trigger #define EVO_DARK_SCROLL 37 // interacts with Scroll of Darkness #define EVO_WATER_SCROLL 38 // interacts with Scroll of Waters -#define EVO_ITEM_NIGHT 39 // specified item is used on Pokémon at night +#define EVO_ITEM_NIGHT 39 // specified item is used on Pokémon, is night +#define EVO_ITEM_DAY 40 // specified item is used on Pokémon, is day +#define EVO_ITEM_HOLD 41 // Pokémon levels up, holds specified item #define EVOS_PER_MON 10 diff --git a/src/data/items.h b/src/data/items.h index ae6e35d654ec..a309925aad45 100644 --- a/src/data/items.h +++ b/src/data/items.h @@ -1,3 +1,11 @@ +#if I_USE_EVO_HELD_ITEMS_FROM_BAG == TRUE + #define EVO_HELD_ITEM_TYPE ITEM_USE_PARTY_MENU + #define EVO_HELD_ITEM_FIELD_FUNC ItemUseOutOfBattle_EvolutionStone +#else + #define EVO_HELD_ITEM_TYPE ITEM_USE_BAG_MENU + #define EVO_HELD_ITEM_FIELD_FUNC ItemUseOutOfBattle_CannotUse +#endif + const struct Item gItems[] = { [ITEM_NONE] = @@ -2890,8 +2898,8 @@ const struct Item gItems[] = .holdEffectParam = 10, .description = sDragonScaleDesc, .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .type = EVO_HELD_ITEM_TYPE, + .fieldUseFunc = EVO_HELD_ITEM_FIELD_FUNC, .flingPower = 30, }, @@ -2903,8 +2911,8 @@ const struct Item gItems[] = .holdEffect = HOLD_EFFECT_UPGRADE, .description = sUpgradeDesc, .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .type = EVO_HELD_ITEM_TYPE, + .fieldUseFunc = EVO_HELD_ITEM_FIELD_FUNC, .flingPower = 30, }, @@ -2915,8 +2923,8 @@ const struct Item gItems[] = .price = 2000, .description = sProtectorDesc, .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .type = EVO_HELD_ITEM_TYPE, + .fieldUseFunc = EVO_HELD_ITEM_FIELD_FUNC, .flingPower = 80, }, @@ -2927,8 +2935,8 @@ const struct Item gItems[] = .price = 2000, .description = sElectirizerDesc, .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .type = EVO_HELD_ITEM_TYPE, + .fieldUseFunc = EVO_HELD_ITEM_FIELD_FUNC, .flingPower = 80, }, @@ -2939,8 +2947,8 @@ const struct Item gItems[] = .price = 2000, .description = sMagmarizerDesc, .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .type = EVO_HELD_ITEM_TYPE, + .fieldUseFunc = EVO_HELD_ITEM_FIELD_FUNC, .flingPower = 80, }, @@ -2951,8 +2959,8 @@ const struct Item gItems[] = .price = 2000, .description = sDubiousDiscDesc, .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .type = EVO_HELD_ITEM_TYPE, + .fieldUseFunc = EVO_HELD_ITEM_FIELD_FUNC, .flingPower = 50, }, @@ -2963,8 +2971,8 @@ const struct Item gItems[] = .price = 2000, .description = sReaperClothDesc, .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .type = EVO_HELD_ITEM_TYPE, + .fieldUseFunc = EVO_HELD_ITEM_FIELD_FUNC, .flingPower = 10, }, @@ -2975,8 +2983,8 @@ const struct Item gItems[] = .price = 2000, .description = sPrismScaleDesc, .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .type = EVO_HELD_ITEM_TYPE, + .fieldUseFunc = EVO_HELD_ITEM_FIELD_FUNC, .flingPower = 30, }, @@ -2987,8 +2995,8 @@ const struct Item gItems[] = .price = 2000, .description = sWhippedDreamDesc, .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .type = EVO_HELD_ITEM_TYPE, + .fieldUseFunc = EVO_HELD_ITEM_FIELD_FUNC, .flingPower = 80, }, @@ -2999,8 +3007,8 @@ const struct Item gItems[] = .price = 2000, .description = sSachetDesc, .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .type = EVO_HELD_ITEM_TYPE, + .fieldUseFunc = EVO_HELD_ITEM_FIELD_FUNC, .flingPower = 80, }, @@ -3011,8 +3019,8 @@ const struct Item gItems[] = .price = 2000, .description = sOvalStoneDesc, .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .type = EVO_HELD_ITEM_TYPE, + .fieldUseFunc = EVO_HELD_ITEM_FIELD_FUNC, .flingPower = 80, }, @@ -5199,8 +5207,8 @@ const struct Item gItems[] = .holdEffect = HOLD_EFFECT_DEEP_SEA_SCALE, .description = sDeepSeaScaleDesc, .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .type = EVO_HELD_ITEM_TYPE, + .fieldUseFunc = EVO_HELD_ITEM_FIELD_FUNC, .flingPower = 30, }, @@ -5212,8 +5220,8 @@ const struct Item gItems[] = .holdEffect = HOLD_EFFECT_DEEP_SEA_TOOTH, .description = sDeepSeaToothDesc, .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .type = EVO_HELD_ITEM_TYPE, + .fieldUseFunc = EVO_HELD_ITEM_FIELD_FUNC, .flingPower = 90, }, @@ -5806,8 +5814,8 @@ const struct Item gItems[] = .holdEffectParam = 20, .description = sMetalCoatDesc, .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .type = EVO_HELD_ITEM_TYPE, + .fieldUseFunc = EVO_HELD_ITEM_FIELD_FUNC, .flingPower = 30, }, @@ -6141,8 +6149,8 @@ const struct Item gItems[] = .holdEffectParam = 10, .description = sKingsRockDesc, .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .type = EVO_HELD_ITEM_TYPE, + .fieldUseFunc = EVO_HELD_ITEM_FIELD_FUNC, .flingPower = 30, }, @@ -6503,8 +6511,8 @@ const struct Item gItems[] = .holdEffect = HOLD_EFFECT_SCOPE_LENS, .description = sRazorClawDesc, .pocket = POCKET_ITEMS, - .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .type = EVO_HELD_ITEM_TYPE, + .fieldUseFunc = EVO_HELD_ITEM_FIELD_FUNC, .flingPower = 80, }, diff --git a/src/data/pokemon/evolution.h b/src/data/pokemon/evolution.h index 86ef6dbe50cd..b9a00d6ed63f 100644 --- a/src/data/pokemon/evolution.h +++ b/src/data/pokemon/evolution.h @@ -39,7 +39,8 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] = [SPECIES_GROWLITHE] = {{EVO_ITEM, ITEM_FIRE_STONE, SPECIES_ARCANINE}}, [SPECIES_POLIWAG] = {{EVO_LEVEL, 25, SPECIES_POLIWHIRL}}, [SPECIES_POLIWHIRL] = {{EVO_ITEM, ITEM_WATER_STONE, SPECIES_POLIWRATH}, - {EVO_TRADE_ITEM, ITEM_KINGS_ROCK, SPECIES_POLITOED}}, + {EVO_TRADE_ITEM, ITEM_KINGS_ROCK, SPECIES_POLITOED}, + {EVO_ITEM, ITEM_KINGS_ROCK, SPECIES_POLITOED}}, [SPECIES_ABRA] = {{EVO_LEVEL, 16, SPECIES_KADABRA}}, [SPECIES_KADABRA] = {{EVO_TRADE, 0, SPECIES_ALAKAZAM}, {EVO_ITEM, ITEM_LINKING_CORD, SPECIES_ALAKAZAM}}, @@ -54,7 +55,8 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] = {EVO_ITEM, ITEM_LINKING_CORD, SPECIES_GOLEM}}, [SPECIES_PONYTA] = {{EVO_LEVEL, 40, SPECIES_RAPIDASH}}, [SPECIES_SLOWPOKE] = {{EVO_LEVEL, 37, SPECIES_SLOWBRO}, - {EVO_TRADE_ITEM, ITEM_KINGS_ROCK, SPECIES_SLOWKING}}, + {EVO_TRADE_ITEM, ITEM_KINGS_ROCK, SPECIES_SLOWKING}, + {EVO_ITEM, ITEM_KINGS_ROCK, SPECIES_SLOWKING}}, [SPECIES_MAGNEMITE] = {{EVO_LEVEL, 30, SPECIES_MAGNETON}}, #if P_GEN_4_POKEMON == TRUE [SPECIES_MAGNETON] = {{EVO_MAPSEC, MAPSEC_NEW_MAUVILLE, SPECIES_MAGNEZONE}, @@ -67,7 +69,8 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] = [SPECIES_GASTLY] = {{EVO_LEVEL, 25, SPECIES_HAUNTER}}, [SPECIES_HAUNTER] = {{EVO_TRADE, 0, SPECIES_GENGAR}, {EVO_ITEM, ITEM_LINKING_CORD, SPECIES_GENGAR}}, - [SPECIES_ONIX] = {{EVO_TRADE_ITEM, ITEM_METAL_COAT, SPECIES_STEELIX}}, + [SPECIES_ONIX] = {{EVO_TRADE_ITEM, ITEM_METAL_COAT, SPECIES_STEELIX}, + {EVO_ITEM, ITEM_METAL_COAT, SPECIES_STEELIX}}, [SPECIES_DROWZEE] = {{EVO_LEVEL, 26, SPECIES_HYPNO}}, [SPECIES_KRABBY] = {{EVO_LEVEL, 28, SPECIES_KINGLER}}, [SPECIES_VOLTORB] = {{EVO_LEVEL, 30, SPECIES_ELECTRODE}}, @@ -81,21 +84,26 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] = [SPECIES_KOFFING] = {{EVO_LEVEL, 35, SPECIES_WEEZING}}, [SPECIES_RHYHORN] = {{EVO_LEVEL, 42, SPECIES_RHYDON}}, #if P_GEN_4_POKEMON == TRUE - [SPECIES_RHYDON] = {{EVO_TRADE_ITEM, ITEM_PROTECTOR, SPECIES_RHYPERIOR}}, + [SPECIES_RHYDON] = {{EVO_TRADE_ITEM, ITEM_PROTECTOR, SPECIES_RHYPERIOR}, + {EVO_ITEM, ITEM_PROTECTOR, SPECIES_RHYPERIOR}}, #endif [SPECIES_CHANSEY] = {{EVO_FRIENDSHIP, 0, SPECIES_BLISSEY}}, #if P_GEN_4_POKEMON == TRUE [SPECIES_TANGELA] = {{EVO_MOVE, MOVE_ANCIENT_POWER, SPECIES_TANGROWTH}}, #endif [SPECIES_HORSEA] = {{EVO_LEVEL, 32, SPECIES_SEADRA}}, - [SPECIES_SEADRA] = {{EVO_TRADE_ITEM, ITEM_DRAGON_SCALE, SPECIES_KINGDRA}}, + [SPECIES_SEADRA] = {{EVO_TRADE_ITEM, ITEM_DRAGON_SCALE, SPECIES_KINGDRA}, + {EVO_ITEM, ITEM_DRAGON_SCALE, SPECIES_KINGDRA}}, [SPECIES_GOLDEEN] = {{EVO_LEVEL, 33, SPECIES_SEAKING}}, [SPECIES_STARYU] = {{EVO_ITEM, ITEM_WATER_STONE, SPECIES_STARMIE}}, [SPECIES_SCYTHER] = {{EVO_TRADE_ITEM, ITEM_METAL_COAT, SPECIES_SCIZOR}, - {EVO_ITEM, ITEM_BLACK_AUGURITE, SPECIES_KLEAVOR}}, + {EVO_ITEM, ITEM_BLACK_AUGURITE, SPECIES_KLEAVOR}, + {EVO_ITEM, ITEM_METAL_COAT, SPECIES_SCIZOR}}, #if P_GEN_4_POKEMON == TRUE - [SPECIES_ELECTABUZZ] = {{EVO_TRADE_ITEM, ITEM_ELECTIRIZER, SPECIES_ELECTIVIRE}}, - [SPECIES_MAGMAR] = {{EVO_TRADE_ITEM, ITEM_MAGMARIZER, SPECIES_MAGMORTAR}}, + [SPECIES_ELECTABUZZ] = {{EVO_TRADE_ITEM, ITEM_ELECTIRIZER, SPECIES_ELECTIVIRE}, + {EVO_ITEM, ITEM_ELECTIRIZER, SPECIES_ELECTIVIRE}}, + [SPECIES_MAGMAR] = {{EVO_TRADE_ITEM, ITEM_MAGMARIZER, SPECIES_MAGMORTAR}, + {EVO_ITEM, ITEM_MAGMARIZER, SPECIES_MAGMORTAR}}, #endif [SPECIES_MAGIKARP] = {{EVO_LEVEL, 20, SPECIES_GYARADOS}}, [SPECIES_EEVEE] = {{EVO_ITEM, ITEM_THUNDER_STONE, SPECIES_JOLTEON}, @@ -113,7 +121,8 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] = {EVO_MOVE_TYPE, TYPE_FAIRY, SPECIES_SYLVEON} #endif }, - [SPECIES_PORYGON] = {{EVO_TRADE_ITEM, ITEM_UPGRADE, SPECIES_PORYGON2}}, + [SPECIES_PORYGON] = {{EVO_TRADE_ITEM, ITEM_UPGRADE, SPECIES_PORYGON2}, + {EVO_ITEM, ITEM_UPGRADE, SPECIES_PORYGON2}}, [SPECIES_OMANYTE] = {{EVO_LEVEL, 40, SPECIES_OMASTAR}}, [SPECIES_KABUTO] = {{EVO_LEVEL, 40, SPECIES_KABUTOPS}}, [SPECIES_DRATINI] = {{EVO_LEVEL, 30, SPECIES_DRAGONAIR}}, @@ -154,11 +163,13 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] = #endif [SPECIES_PINECO] = {{EVO_LEVEL, 31, SPECIES_FORRETRESS}}, #if P_GEN_4_POKEMON == TRUE - [SPECIES_GLIGAR] = {{EVO_ITEM_HOLD_NIGHT, ITEM_RAZOR_FANG, SPECIES_GLISCOR}}, + [SPECIES_GLIGAR] = {{EVO_ITEM_HOLD_NIGHT, ITEM_RAZOR_FANG, SPECIES_GLISCOR}, + {EVO_ITEM_NIGHT, ITEM_RAZOR_FANG, SPECIES_GLISCOR}}, #endif [SPECIES_SNUBBULL] = {{EVO_LEVEL, 23, SPECIES_GRANBULL}}, #if P_GEN_4_POKEMON == TRUE - [SPECIES_SNEASEL] = {{EVO_ITEM_HOLD_NIGHT, ITEM_RAZOR_CLAW, SPECIES_WEAVILE}}, + [SPECIES_SNEASEL] = {{EVO_ITEM_HOLD_NIGHT, ITEM_RAZOR_CLAW, SPECIES_WEAVILE}, + {EVO_ITEM_NIGHT, ITEM_RAZOR_CLAW, SPECIES_WEAVILE}}, #endif [SPECIES_TEDDIURSA] = {{EVO_LEVEL, 30, SPECIES_URSARING}}, [SPECIES_SLUGMA] = {{EVO_LEVEL, 38, SPECIES_MAGCARGO}}, @@ -170,7 +181,8 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] = [SPECIES_HOUNDOUR] = {{EVO_LEVEL, 24, SPECIES_HOUNDOOM}}, [SPECIES_PHANPY] = {{EVO_LEVEL, 25, SPECIES_DONPHAN}}, #if P_GEN_4_POKEMON == TRUE - [SPECIES_PORYGON2] = {{EVO_TRADE_ITEM, ITEM_DUBIOUS_DISC, SPECIES_PORYGON_Z}}, + [SPECIES_PORYGON2] = {{EVO_TRADE_ITEM, ITEM_DUBIOUS_DISC, SPECIES_PORYGON_Z}, + {EVO_ITEM, ITEM_DUBIOUS_DISC, SPECIES_PORYGON_Z}}, #endif [SPECIES_TYROGUE] = {{EVO_LEVEL_ATK_LT_DEF, 20, SPECIES_HITMONCHAN}, {EVO_LEVEL_ATK_GT_DEF, 20, SPECIES_HITMONLEE}, @@ -211,7 +223,8 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] = [SPECIES_BARBOACH] = {{EVO_LEVEL, 30, SPECIES_WHISCASH}}, [SPECIES_CORPHISH] = {{EVO_LEVEL, 30, SPECIES_CRAWDAUNT}}, [SPECIES_FEEBAS] = {{EVO_BEAUTY, 170, SPECIES_MILOTIC}, - {EVO_TRADE_ITEM, ITEM_PRISM_SCALE, SPECIES_MILOTIC}}, + {EVO_TRADE_ITEM, ITEM_PRISM_SCALE, SPECIES_MILOTIC}, + {EVO_ITEM, ITEM_PRISM_SCALE, SPECIES_MILOTIC}}, [SPECIES_CARVANHA] = {{EVO_LEVEL, 30, SPECIES_SHARPEDO}}, [SPECIES_TRAPINCH] = {{EVO_LEVEL, 35, SPECIES_VIBRAVA}}, [SPECIES_VIBRAVA] = {{EVO_LEVEL, 45, SPECIES_FLYGON}}, @@ -233,7 +246,8 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] = [SPECIES_WYNAUT] = {{EVO_LEVEL, 15, SPECIES_WOBBUFFET}}, [SPECIES_DUSKULL] = {{EVO_LEVEL, 37, SPECIES_DUSCLOPS}}, #if P_GEN_4_POKEMON == TRUE - [SPECIES_DUSCLOPS] = {{EVO_TRADE_ITEM, ITEM_REAPER_CLOTH, SPECIES_DUSKNOIR}}, + [SPECIES_DUSCLOPS] = {{EVO_TRADE_ITEM, ITEM_REAPER_CLOTH, SPECIES_DUSKNOIR}, + {EVO_ITEM, ITEM_REAPER_CLOTH, SPECIES_DUSKNOIR}}, [SPECIES_ROSELIA] = {{EVO_ITEM, ITEM_SHINY_STONE, SPECIES_ROSERADE}}, #endif [SPECIES_SLAKOTH] = {{EVO_LEVEL, 18, SPECIES_VIGOROTH}}, @@ -242,7 +256,9 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] = [SPECIES_WHISMUR] = {{EVO_LEVEL, 20, SPECIES_LOUDRED}}, [SPECIES_LOUDRED] = {{EVO_LEVEL, 40, SPECIES_EXPLOUD}}, [SPECIES_CLAMPERL] = {{EVO_TRADE_ITEM, ITEM_DEEP_SEA_TOOTH, SPECIES_HUNTAIL}, - {EVO_TRADE_ITEM, ITEM_DEEP_SEA_SCALE, SPECIES_GOREBYSS}}, + {EVO_TRADE_ITEM, ITEM_DEEP_SEA_SCALE, SPECIES_GOREBYSS}, + {EVO_ITEM, ITEM_DEEP_SEA_TOOTH, SPECIES_HUNTAIL}, + {EVO_ITEM, ITEM_DEEP_SEA_SCALE, SPECIES_GOREBYSS}}, [SPECIES_SHUPPET] = {{EVO_LEVEL, 37, SPECIES_BANETTE}}, [SPECIES_ARON] = {{EVO_LEVEL, 32, SPECIES_LAIRON}}, [SPECIES_LAIRON] = {{EVO_LEVEL, 42, SPECIES_AGGRON}}, @@ -289,7 +305,8 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] = [SPECIES_BRONZOR] = {{EVO_LEVEL, 33, SPECIES_BRONZONG}}, [SPECIES_BONSLY] = {{EVO_MOVE, MOVE_MIMIC, SPECIES_SUDOWOODO}}, [SPECIES_MIME_JR] = {{EVO_MOVE, MOVE_MIMIC, SPECIES_MR_MIME}}, - [SPECIES_HAPPINY] = {{EVO_ITEM_HOLD_DAY, ITEM_OVAL_STONE, SPECIES_CHANSEY}}, + [SPECIES_HAPPINY] = {{EVO_ITEM_HOLD_DAY, ITEM_OVAL_STONE, SPECIES_CHANSEY}, + {EVO_ITEM_DAY, ITEM_OVAL_STONE, SPECIES_CHANSEY}}, [SPECIES_GIBLE] = {{EVO_LEVEL, 24, SPECIES_GABITE}}, [SPECIES_GABITE] = {{EVO_LEVEL, 48, SPECIES_GARCHOMP}}, [SPECIES_MUNCHLAX] = {{EVO_FRIENDSHIP, 0, SPECIES_SNORLAX}}, @@ -400,8 +417,10 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] = {EVO_LEVEL_FEMALE, 25, SPECIES_MEOWSTIC_FEMALE}}, [SPECIES_HONEDGE] = {{EVO_LEVEL, 35, SPECIES_DOUBLADE}}, [SPECIES_DOUBLADE] = {{EVO_ITEM, ITEM_DUSK_STONE, SPECIES_AEGISLASH}}, - [SPECIES_SPRITZEE] = {{EVO_TRADE_ITEM, ITEM_SACHET, SPECIES_AROMATISSE}}, - [SPECIES_SWIRLIX] = {{EVO_TRADE_ITEM, ITEM_WHIPPED_DREAM, SPECIES_SLURPUFF}}, + [SPECIES_SPRITZEE] = {{EVO_TRADE_ITEM, ITEM_SACHET, SPECIES_AROMATISSE}, + {EVO_ITEM, ITEM_SACHET, SPECIES_AROMATISSE}}, + [SPECIES_SWIRLIX] = {{EVO_TRADE_ITEM, ITEM_WHIPPED_DREAM, SPECIES_SLURPUFF}, + {EVO_ITEM, ITEM_WHIPPED_DREAM, SPECIES_SLURPUFF}}, [SPECIES_INKAY] = {{EVO_LEVEL, 30, SPECIES_MALAMAR}}, [SPECIES_BINACLE] = {{EVO_LEVEL, 39, SPECIES_BARBARACLE}}, [SPECIES_SKRELP] = {{EVO_LEVEL, 48, SPECIES_DRAGALGE}}, @@ -565,5 +584,7 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] = #if P_GEN_8_POKEMON == TRUE [SPECIES_SINISTEA_ANTIQUE] = {{EVO_ITEM, ITEM_CHIPPED_POT, SPECIES_POLTEAGEIST_ANTIQUE}}, [SPECIES_URSARING] = {{EVO_ITEM_NIGHT, ITEM_PEAT_BLOCK, SPECIES_URSALUNA}}, + [SPECIES_SNEASEL_HISUIAN] = {{EVO_ITEM_DAY, ITEM_RAZOR_CLAW, SPECIES_SNEASLER}, + {EVO_ITEM_HOLD_DAY, ITEM_RAZOR_CLAW, SPECIES_SNEASLER}}, #endif }; diff --git a/src/data/pokemon/item_effects.h b/src/data/pokemon/item_effects.h index 087c6db0c207..d7482d504379 100644 --- a/src/data/pokemon/item_effects.h +++ b/src/data/pokemon/item_effects.h @@ -550,6 +550,22 @@ const u8 *const gItemEffectTable[ITEMS_COUNT] = [ITEM_CHIPPED_POT] = gItemEffect_EvoItem, [ITEM_GALARICA_CUFF] = gItemEffect_EvoItem, [ITEM_GALARICA_WREATH] = gItemEffect_EvoItem, + [ITEM_DRAGON_SCALE] = gItemEffect_EvoItem, + [ITEM_UPGRADE] = gItemEffect_EvoItem, + [ITEM_PROTECTOR] = gItemEffect_EvoItem, + [ITEM_ELECTIRIZER] = gItemEffect_EvoItem, + [ITEM_MAGMARIZER] = gItemEffect_EvoItem, + [ITEM_DUBIOUS_DISC] = gItemEffect_EvoItem, + [ITEM_REAPER_CLOTH] = gItemEffect_EvoItem, + [ITEM_PRISM_SCALE] = gItemEffect_EvoItem, + [ITEM_WHIPPED_DREAM] = gItemEffect_EvoItem, + [ITEM_SACHET] = gItemEffect_EvoItem, + [ITEM_OVAL_STONE] = gItemEffect_EvoItem, + [ITEM_DEEP_SEA_SCALE] = gItemEffect_EvoItem, + [ITEM_DEEP_SEA_TOOTH] = gItemEffect_EvoItem, + [ITEM_METAL_COAT] = gItemEffect_EvoItem, + [ITEM_KINGS_ROCK] = gItemEffect_EvoItem, + [ITEM_RAZOR_CLAW] = gItemEffect_EvoItem, [ITEM_AUSPICIOUS_ARMOR] = gItemEffect_EvoItem, [ITEM_MALICIOUS_ARMOR] = gItemEffect_EvoItem, [ITEM_SCROLL_OF_DARKNESS] = gItemEffect_EvoItem, diff --git a/src/pokemon.c b/src/pokemon.c index cfcbcce532e7..7bd4e19b39c2 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -6598,6 +6598,14 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 mode, u16 evolutionItem, s } } break; + case EVO_ITEM_HOLD: + if (heldItem == gEvolutionTable[species][i].param) + { + heldItem = 0; + SetMonData(mon, MON_DATA_HELD_ITEM, &heldItem); + targetSpecies = gEvolutionTable[species][i].targetSpecies; + } + break; } } break; @@ -6647,6 +6655,11 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 mode, u16 evolutionItem, s if (gLocalTime.hours >= 0 && gLocalTime.hours < 12 && gEvolutionTable[species][i].param == evolutionItem) targetSpecies = gEvolutionTable[species][i].targetSpecies; break; + case EVO_ITEM_DAY: + RtcCalcLocalTime(); + if (gLocalTime.hours >= 12 && gLocalTime.hours < 24 && gEvolutionTable[species][i].param == evolutionItem) + targetSpecies = gEvolutionTable[species][i].targetSpecies; + break; } } break; From 9506b205e6194b9417c8bbbb02cdbbed2c70c99b Mon Sep 17 00:00:00 2001 From: psf <77138753+pkmnsnfrn@users.noreply.github.com> Date: Sat, 20 May 2023 05:25:59 -0700 Subject: [PATCH 402/428] Changed 999999 in MaxMoney to MAX_MONEY constant (#3015) --- include/money.h | 2 ++ src/debug.c | 2 +- src/money.c | 2 -- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/include/money.h b/include/money.h index e7a8379787ce..211f9caa2ec6 100644 --- a/include/money.h +++ b/include/money.h @@ -1,6 +1,8 @@ #ifndef GUARD_MONEY_H #define GUARD_MONEY_H +#define MAX_MONEY 999999 + u32 GetMoney(u32 *moneyPtr); void SetMoney(u32 *moneyPtr, u32 newValue); bool8 IsEnoughMoney(u32 *moneyPtr, u32 cost); diff --git a/src/debug.c b/src/debug.c index 8fff84d57de2..cd7f58e6d259 100644 --- a/src/debug.c +++ b/src/debug.c @@ -2758,7 +2758,7 @@ static void DebugAction_Give_Pokemon_ComplexCreateMon(u8 taskId) //https://githu static void DebugAction_Give_MaxMoney(u8 taskId) { - SetMoney(&gSaveBlock1Ptr->money, 999999); + SetMoney(&gSaveBlock1Ptr->money, MAX_MONEY); } static void DebugAction_Give_MaxCoins(u8 taskId) diff --git a/src/money.c b/src/money.c index 88e1fea6400e..321f882ff64a 100644 --- a/src/money.c +++ b/src/money.c @@ -10,8 +10,6 @@ #include "strings.h" #include "decompress.h" -#define MAX_MONEY 999999 - EWRAM_DATA static u8 sMoneyBoxWindowId = 0; EWRAM_DATA static u8 sMoneyLabelSpriteId = 0; From a0881b8e8d38a9e0cd4cfb2bb7f56b50f0c07077 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Sat, 20 May 2023 17:10:45 +0200 Subject: [PATCH 403/428] Terrains freeze the game after player mon faints (#3016) --- src/battle_util.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/battle_util.c b/src/battle_util.c index 8678054bb933..2856eece7c98 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -2056,6 +2056,8 @@ static bool32 EndTurnTerrain(u32 terrainFlag, u32 stringTableId) { if (gFieldStatuses & terrainFlag) { + if (terrainFlag & STATUS_FIELD_GRASSY_TERRAIN) + BattleScriptExecute(BattleScript_GrassyTerrainHeals); if (!(gFieldStatuses & STATUS_FIELD_TERRAIN_PERMANENT) && --gFieldTimers.terrainTimer == 0) { gFieldStatuses &= ~terrainFlag; @@ -2065,10 +2067,8 @@ static bool32 EndTurnTerrain(u32 terrainFlag, u32 stringTableId) gBattleCommunication[MULTISTRING_CHOOSER] = stringTableId; BattleScriptExecute(BattleScript_TerrainEnds); } + return TRUE; } - if (terrainFlag & STATUS_FIELD_GRASSY_TERRAIN) - BattleScriptExecute(BattleScript_GrassyTerrainHeals); - return TRUE; } return FALSE; } @@ -6807,7 +6807,7 @@ static bool32 GetMentalHerbEffect(u8 battlerId) static u8 TryConsumeMirrorHerb(u8 battlerId, bool32 execute) { u8 effect = 0; - + if (gProtectStructs[battlerId].eatMirrorHerb) { gLastUsedItem = gBattleMons[battlerId].item; gBattleScripting.savedBattler = gBattlerAttacker; From 580a09e3674a649a228430996b20b00edc69240e Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Sat, 20 May 2023 15:27:55 -0300 Subject: [PATCH 404/428] Updated DebugAction_Util_CheckSaveBlock --- data/scripts/debug.inc | 19 +++++++++++++++++++ src/debug.c | 33 ++++++++++++++++++++++++++------- 2 files changed, 45 insertions(+), 7 deletions(-) diff --git a/data/scripts/debug.inc b/data/scripts/debug.inc index 92e9062a3963..f86de38f5b55 100644 --- a/data/scripts/debug.inc +++ b/data/scripts/debug.inc @@ -90,3 +90,22 @@ Debug_Script_7:: Debug_Script_8:: end + +Debug_CheckSaveBlock:: + callnative CheckSaveBlock1Size + msgbox Debug_SaveBlock1Size, MSGBOX_DEFAULT + callnative CheckSaveBlock2Size + msgbox Debug_SaveBlock2Size, MSGBOX_DEFAULT + callnative CheckPokemonStorageSize + msgbox Debug_PokemonStorageSize, MSGBOX_DEFAULT + release + end + +Debug_SaveBlock1Size:: + .string "SaveBlock1 size: {STR_VAR_1}/{STR_VAR_2}.$" + +Debug_SaveBlock2Size:: + .string "SaveBlock2 size: {STR_VAR_1}/{STR_VAR_2}.$" + +Debug_PokemonStorageSize:: + .string "{PKMN}Storage size: {STR_VAR_1}/{STR_VAR_2}.$" diff --git a/src/debug.c b/src/debug.c index cd7f58e6d259..7eda7d973e8a 100644 --- a/src/debug.c +++ b/src/debug.c @@ -57,6 +57,7 @@ #include "constants/songs.h" #include "constants/species.h" #include "constants/weather.h" +#include "save.h" #if DEBUG_OVERWORLD_MENU == TRUE // ******************************* @@ -292,6 +293,7 @@ extern u8 Debug_ShowFieldMessageStringVar4[]; extern u8 Debug_CheatStart[]; extern u8 PlayersHouse_2F_EventScript_SetWallClock[]; extern u8 PlayersHouse_2F_EventScript_CheckWallClock[]; +extern u8 Debug_CheckSaveBlock[]; #include "data/map_group_count.h" @@ -1165,18 +1167,35 @@ static void DebugAction_Util_PoisonMons(u8 taskId) PlaySE(SE_FIELD_POISON); } -static void DebugAction_Util_CheckSaveBlock(u8 taskId) +void CheckSaveBlock1Size(void) { - static const u8 sDebugText_SaveBlockSize[] = _("SaveBlock1 is {STR_VAR_1} bytes long.\nMax size is 15872 bytes.\pSaveBlock2 is {STR_VAR_2} bytes long.\nMax size is 3968 bytes.\pPokemonStorage is {STR_VAR_3} bytes long.\nMax size is 35712 bytes."); + u32 currSb1Size = sizeof(struct SaveBlock1); + u32 maxSb1Size = SECTOR_DATA_SIZE * (SECTOR_ID_SAVEBLOCK1_END - SECTOR_ID_SAVEBLOCK1_START + 1); + ConvertIntToDecimalStringN(gStringVar1, currSb1Size, STR_CONV_MODE_LEFT_ALIGN, 6); + ConvertIntToDecimalStringN(gStringVar2, maxSb1Size, STR_CONV_MODE_LEFT_ALIGN, 6); +} - ConvertIntToDecimalStringN(gStringVar1, sizeof(struct SaveBlock1), STR_CONV_MODE_LEFT_ALIGN, 6); - ConvertIntToDecimalStringN(gStringVar2, sizeof(struct SaveBlock2), STR_CONV_MODE_LEFT_ALIGN, 6); - ConvertIntToDecimalStringN(gStringVar3, sizeof(struct PokemonStorage), STR_CONV_MODE_LEFT_ALIGN, 6); - StringExpandPlaceholders(gStringVar4, sDebugText_SaveBlockSize); +void CheckSaveBlock2Size(void) +{ + u32 currSb2Size = (sizeof(struct SaveBlock2)); + u32 maxSb2Size = SECTOR_DATA_SIZE; + ConvertIntToDecimalStringN(gStringVar1, currSb2Size, STR_CONV_MODE_LEFT_ALIGN, 6); + ConvertIntToDecimalStringN(gStringVar2, maxSb2Size, STR_CONV_MODE_LEFT_ALIGN, 6); +} +void CheckPokemonStorageSize(void) +{ + u32 currPkmnStorageSize = sizeof(struct PokemonStorage); + u32 maxPkmnStorageSize = SECTOR_DATA_SIZE * (SECTOR_ID_PKMN_STORAGE_END - SECTOR_ID_PKMN_STORAGE_START + 1); + ConvertIntToDecimalStringN(gStringVar1, currPkmnStorageSize, STR_CONV_MODE_LEFT_ALIGN, 6); + ConvertIntToDecimalStringN(gStringVar2, maxPkmnStorageSize, STR_CONV_MODE_LEFT_ALIGN, 6); +} + +static void DebugAction_Util_CheckSaveBlock(u8 taskId) +{ Debug_DestroyMenu_Full(taskId); LockPlayerFieldControls(); - ScriptContext_SetupScript(Debug_ShowFieldMessageStringVar4); + ScriptContext_SetupScript(Debug_CheckSaveBlock); } static const u8 sWeatherNames[22][24] = { From 109b4c4f6ce8c1c1e9e7687957a67c119145874b Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Sat, 20 May 2023 21:58:55 +0200 Subject: [PATCH 405/428] Small clean up: EndTurnTerrain, BattleScript_GrassyTerrainHeals (#3018) remove leftover --- data/battle_scripts_1.s | 3 --- src/battle_util.c | 7 ++----- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 54dce3448d97..8c8e1ff0d804 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -6975,8 +6975,6 @@ BattleScript_TerrainEnds_Ret:: playanimation BS_ATTACKER, B_ANIM_RESTORE_BG return -BattleScript_GrassyTerrainEnds: - setbyte cMULTISTRING_CHOOSER, B_MSG_TERRAINENDS_GRASS BattleScript_TerrainEnds:: call BattleScript_TerrainEnds_Ret end2 @@ -9166,7 +9164,6 @@ BattleScript_GrassyTerrainLoopIncrement:: BattleScript_GrassyTerrainLoopEnd:: bicword gHitMarker, HITMARKER_SKIP_DMG_TRACK | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE jumpifword CMP_COMMON_BITS, gFieldStatuses, STATUS_FIELD_TERRAIN_PERMANENT, BattleScript_GrassyTerrainHealEnd - jumpifbyte CMP_EQUAL, gFieldTimers + 5, 0, BattleScript_GrassyTerrainEnds BattleScript_GrassyTerrainHealEnd: end2 diff --git a/src/battle_util.c b/src/battle_util.c index 2856eece7c98..975921c9698d 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -2062,11 +2062,8 @@ static bool32 EndTurnTerrain(u32 terrainFlag, u32 stringTableId) { gFieldStatuses &= ~terrainFlag; TryToRevertMimicry(); - if (!(terrainFlag & STATUS_FIELD_GRASSY_TERRAIN)) - { - gBattleCommunication[MULTISTRING_CHOOSER] = stringTableId; - BattleScriptExecute(BattleScript_TerrainEnds); - } + gBattleCommunication[MULTISTRING_CHOOSER] = stringTableId; + BattleScriptExecute(BattleScript_TerrainEnds); return TRUE; } } From 12022fa0f61f820fd0a1a2d507c287f857d4a387 Mon Sep 17 00:00:00 2001 From: SonikkuA-DatH <58025603+SonikkuA-DatH@users.noreply.github.com> Date: Sat, 20 May 2023 15:56:23 -0700 Subject: [PATCH 406/428] Gen 4-6 Pokemon Back anims (#2954) --- src/pokemon_animation.c | 1280 +++++++++++++++++++++++++++------------ 1 file changed, 894 insertions(+), 386 deletions(-) diff --git a/src/pokemon_animation.c b/src/pokemon_animation.c index c7518ba23ed8..e0847233e518 100644 --- a/src/pokemon_animation.c +++ b/src/pokemon_animation.c @@ -215,392 +215,900 @@ static bool32 sIsSummaryAnim; static const u8 sSpeciesToBackAnimSet[NUM_SPECIES] = { - [SPECIES_BULBASAUR] = BACK_ANIM_DIP_RIGHT_SIDE, - [SPECIES_IVYSAUR] = BACK_ANIM_H_SLIDE, - [SPECIES_VENUSAUR] = BACK_ANIM_H_SHAKE, - [SPECIES_CHARMANDER] = BACK_ANIM_CONCAVE_ARC_SMALL, - [SPECIES_CHARMELEON] = BACK_ANIM_JOLT_RIGHT, - [SPECIES_CHARIZARD] = BACK_ANIM_SHAKE_GLOW_RED, - [SPECIES_SQUIRTLE] = BACK_ANIM_CONCAVE_ARC_SMALL, - [SPECIES_WARTORTLE] = BACK_ANIM_CONCAVE_ARC_SMALL, - [SPECIES_BLASTOISE] = BACK_ANIM_SHAKE_GLOW_BLUE, - [SPECIES_CATERPIE] = BACK_ANIM_H_SLIDE, - [SPECIES_METAPOD] = BACK_ANIM_DIP_RIGHT_SIDE, - [SPECIES_BUTTERFREE] = BACK_ANIM_CONVEX_DOUBLE_ARC, - [SPECIES_WEEDLE] = BACK_ANIM_H_SLIDE, - [SPECIES_KAKUNA] = BACK_ANIM_DIP_RIGHT_SIDE, - [SPECIES_BEEDRILL] = BACK_ANIM_H_VIBRATE, - [SPECIES_PIDGEY] = BACK_ANIM_TRIANGLE_DOWN, - [SPECIES_PIDGEOTTO] = BACK_ANIM_JOLT_RIGHT, - [SPECIES_PIDGEOT] = BACK_ANIM_TRIANGLE_DOWN, - [SPECIES_RATTATA] = BACK_ANIM_V_SHAKE_H_SLIDE, - [SPECIES_RATICATE] = BACK_ANIM_V_SHAKE_H_SLIDE, - [SPECIES_SPEAROW] = BACK_ANIM_TRIANGLE_DOWN, - [SPECIES_FEAROW] = BACK_ANIM_JOLT_RIGHT, - [SPECIES_EKANS] = BACK_ANIM_TRIANGLE_DOWN, - [SPECIES_ARBOK] = BACK_ANIM_V_SHAKE, - [SPECIES_PIKACHU] = BACK_ANIM_SHAKE_FLASH_YELLOW, - [SPECIES_RAICHU] = BACK_ANIM_SHAKE_FLASH_YELLOW, - [SPECIES_SANDSHREW] = BACK_ANIM_CONCAVE_ARC_SMALL, - [SPECIES_SANDSLASH] = BACK_ANIM_CONCAVE_ARC_LARGE, - [SPECIES_NIDORAN_F] = BACK_ANIM_CONCAVE_ARC_SMALL, - [SPECIES_NIDORINA] = BACK_ANIM_JOLT_RIGHT, - [SPECIES_NIDOQUEEN] = BACK_ANIM_V_SHAKE, - [SPECIES_NIDORAN_M] = BACK_ANIM_CONCAVE_ARC_SMALL, - [SPECIES_NIDORINO] = BACK_ANIM_JOLT_RIGHT, - [SPECIES_NIDOKING] = BACK_ANIM_V_SHAKE, - [SPECIES_CLEFAIRY] = BACK_ANIM_DIP_RIGHT_SIDE, - [SPECIES_CLEFABLE] = BACK_ANIM_DIP_RIGHT_SIDE, - [SPECIES_VULPIX] = BACK_ANIM_CONCAVE_ARC_LARGE, - [SPECIES_NINETALES] = BACK_ANIM_H_VIBRATE, - [SPECIES_JIGGLYPUFF] = BACK_ANIM_DIP_RIGHT_SIDE, - [SPECIES_WIGGLYTUFF] = BACK_ANIM_GROW, - [SPECIES_ZUBAT] = BACK_ANIM_CONVEX_DOUBLE_ARC, - [SPECIES_GOLBAT] = BACK_ANIM_V_SHAKE, - [SPECIES_ODDISH] = BACK_ANIM_H_SLIDE, - [SPECIES_GLOOM] = BACK_ANIM_H_SLIDE, - [SPECIES_VILEPLUME] = BACK_ANIM_SHRINK_GROW_VIBRATE, - [SPECIES_PARAS] = BACK_ANIM_H_SLIDE, - [SPECIES_PARASECT] = BACK_ANIM_H_SHAKE, - [SPECIES_VENONAT] = BACK_ANIM_V_SHAKE_H_SLIDE, - [SPECIES_VENOMOTH] = BACK_ANIM_CONVEX_DOUBLE_ARC, - [SPECIES_DIGLETT] = BACK_ANIM_V_SHAKE, - [SPECIES_DUGTRIO] = BACK_ANIM_V_SHAKE, - [SPECIES_MEOWTH] = BACK_ANIM_CONCAVE_ARC_LARGE, - [SPECIES_PERSIAN] = BACK_ANIM_TRIANGLE_DOWN, - [SPECIES_PSYDUCK] = BACK_ANIM_H_SLIDE, - [SPECIES_GOLDUCK] = BACK_ANIM_SHRINK_GROW_VIBRATE, - [SPECIES_MANKEY] = BACK_ANIM_CONCAVE_ARC_LARGE, - [SPECIES_PRIMEAPE] = BACK_ANIM_CONCAVE_ARC_LARGE, - [SPECIES_GROWLITHE] = BACK_ANIM_JOLT_RIGHT, - [SPECIES_ARCANINE] = BACK_ANIM_JOLT_RIGHT, - [SPECIES_POLIWAG] = BACK_ANIM_CONCAVE_ARC_SMALL, - [SPECIES_POLIWHIRL] = BACK_ANIM_V_SHAKE, - [SPECIES_POLIWRATH] = BACK_ANIM_V_SHAKE_LOW, - [SPECIES_ABRA] = BACK_ANIM_SHRINK_GROW_VIBRATE, - [SPECIES_KADABRA] = BACK_ANIM_SHRINK_GROW_VIBRATE, - [SPECIES_ALAKAZAM] = BACK_ANIM_GROW_STUTTER, - [SPECIES_MACHOP] = BACK_ANIM_JOLT_RIGHT, - [SPECIES_MACHOKE] = BACK_ANIM_V_SHAKE, - [SPECIES_MACHAMP] = BACK_ANIM_V_SHAKE, - [SPECIES_BELLSPROUT] = BACK_ANIM_V_STRETCH, - [SPECIES_WEEPINBELL] = BACK_ANIM_V_STRETCH, - [SPECIES_VICTREEBEL] = BACK_ANIM_V_STRETCH, - [SPECIES_TENTACOOL] = BACK_ANIM_H_SLIDE, - [SPECIES_TENTACRUEL] = BACK_ANIM_H_SLIDE, - [SPECIES_GEODUDE] = BACK_ANIM_V_SHAKE_LOW, - [SPECIES_GRAVELER] = BACK_ANIM_H_SHAKE, - [SPECIES_GOLEM] = BACK_ANIM_H_SHAKE, - [SPECIES_PONYTA] = BACK_ANIM_SHAKE_GLOW_RED, - [SPECIES_RAPIDASH] = BACK_ANIM_JOLT_RIGHT, - [SPECIES_SLOWPOKE] = BACK_ANIM_H_SLIDE, - [SPECIES_SLOWBRO] = BACK_ANIM_DIP_RIGHT_SIDE, - [SPECIES_MAGNEMITE] = BACK_ANIM_TRIANGLE_DOWN, - [SPECIES_MAGNETON] = BACK_ANIM_TRIANGLE_DOWN, - [SPECIES_FARFETCHD] = BACK_ANIM_H_SLIDE, - [SPECIES_DODUO] = BACK_ANIM_TRIANGLE_DOWN, - [SPECIES_DODRIO] = BACK_ANIM_JOLT_RIGHT, - [SPECIES_SEEL] = BACK_ANIM_DIP_RIGHT_SIDE, - [SPECIES_DEWGONG] = BACK_ANIM_H_SLIDE, - [SPECIES_GRIMER] = BACK_ANIM_V_STRETCH, - [SPECIES_MUK] = BACK_ANIM_H_STRETCH, - [SPECIES_SHELLDER] = BACK_ANIM_DIP_RIGHT_SIDE, - [SPECIES_CLOYSTER] = BACK_ANIM_TRIANGLE_DOWN, - [SPECIES_GASTLY] = BACK_ANIM_H_VIBRATE, - [SPECIES_HAUNTER] = BACK_ANIM_H_VIBRATE, - [SPECIES_GENGAR] = BACK_ANIM_SHRINK_GROW_VIBRATE, - [SPECIES_ONIX] = BACK_ANIM_V_SHAKE, - [SPECIES_DROWZEE] = BACK_ANIM_DIP_RIGHT_SIDE, - [SPECIES_HYPNO] = BACK_ANIM_SHRINK_GROW_VIBRATE, - [SPECIES_KRABBY] = BACK_ANIM_V_SHAKE_H_SLIDE, - [SPECIES_KINGLER] = BACK_ANIM_V_SHAKE, - [SPECIES_VOLTORB] = BACK_ANIM_JOLT_RIGHT, - [SPECIES_ELECTRODE] = BACK_ANIM_JOLT_RIGHT, - [SPECIES_EXEGGCUTE] = BACK_ANIM_H_SLIDE, - [SPECIES_EXEGGUTOR] = BACK_ANIM_CONCAVE_ARC_LARGE, - [SPECIES_CUBONE] = BACK_ANIM_JOLT_RIGHT, - [SPECIES_MAROWAK] = BACK_ANIM_CONCAVE_ARC_LARGE, - [SPECIES_HITMONLEE] = BACK_ANIM_H_SLIDE, - [SPECIES_HITMONCHAN] = BACK_ANIM_TRIANGLE_DOWN, - [SPECIES_LICKITUNG] = BACK_ANIM_H_SLIDE, - [SPECIES_KOFFING] = BACK_ANIM_GROW, - [SPECIES_WEEZING] = BACK_ANIM_GROW, - [SPECIES_RHYHORN] = BACK_ANIM_V_SHAKE_LOW, - [SPECIES_RHYDON] = BACK_ANIM_V_SHAKE_LOW, - [SPECIES_CHANSEY] = BACK_ANIM_CONCAVE_ARC_SMALL, - [SPECIES_TANGELA] = BACK_ANIM_V_STRETCH, - [SPECIES_KANGASKHAN] = BACK_ANIM_CONCAVE_ARC_SMALL, - [SPECIES_HORSEA] = BACK_ANIM_DIP_RIGHT_SIDE, - [SPECIES_SEADRA] = BACK_ANIM_CONVEX_DOUBLE_ARC, - [SPECIES_GOLDEEN] = BACK_ANIM_CONVEX_DOUBLE_ARC, - [SPECIES_SEAKING] = BACK_ANIM_CONVEX_DOUBLE_ARC, - [SPECIES_STARYU] = BACK_ANIM_DIP_RIGHT_SIDE, - [SPECIES_STARMIE] = BACK_ANIM_SHAKE_GLOW_BLUE, - [SPECIES_MR_MIME] = BACK_ANIM_SHRINK_GROW_VIBRATE, - [SPECIES_SCYTHER] = BACK_ANIM_TRIANGLE_DOWN, - [SPECIES_JYNX] = BACK_ANIM_DIP_RIGHT_SIDE, - [SPECIES_ELECTABUZZ] = BACK_ANIM_SHAKE_FLASH_YELLOW, - [SPECIES_MAGMAR] = BACK_ANIM_SHAKE_GLOW_RED, - [SPECIES_PINSIR] = BACK_ANIM_V_SHAKE_LOW, - [SPECIES_TAUROS] = BACK_ANIM_V_SHAKE_LOW, - [SPECIES_MAGIKARP] = BACK_ANIM_CONCAVE_ARC_LARGE, - [SPECIES_GYARADOS] = BACK_ANIM_V_SHAKE, - [SPECIES_LAPRAS] = BACK_ANIM_SHAKE_GLOW_BLUE, - [SPECIES_DITTO] = BACK_ANIM_SHRINK_GROW, - [SPECIES_EEVEE] = BACK_ANIM_CONCAVE_ARC_SMALL, - [SPECIES_VAPOREON] = BACK_ANIM_SHAKE_GLOW_BLUE, - [SPECIES_JOLTEON] = BACK_ANIM_SHAKE_FLASH_YELLOW, - [SPECIES_FLAREON] = BACK_ANIM_SHAKE_GLOW_RED, - [SPECIES_PORYGON] = BACK_ANIM_H_VIBRATE, - [SPECIES_OMANYTE] = BACK_ANIM_DIP_RIGHT_SIDE, - [SPECIES_OMASTAR] = BACK_ANIM_DIP_RIGHT_SIDE, - [SPECIES_KABUTO] = BACK_ANIM_DIP_RIGHT_SIDE, - [SPECIES_KABUTOPS] = BACK_ANIM_JOLT_RIGHT, - [SPECIES_AERODACTYL] = BACK_ANIM_JOLT_RIGHT, - [SPECIES_SNORLAX] = BACK_ANIM_DIP_RIGHT_SIDE, - [SPECIES_ARTICUNO] = BACK_ANIM_SHAKE_GLOW_BLUE, - [SPECIES_ZAPDOS] = BACK_ANIM_SHAKE_FLASH_YELLOW, - [SPECIES_MOLTRES] = BACK_ANIM_SHAKE_GLOW_RED, - [SPECIES_DRATINI] = BACK_ANIM_H_SLIDE, - [SPECIES_DRAGONAIR] = BACK_ANIM_TRIANGLE_DOWN, - [SPECIES_DRAGONITE] = BACK_ANIM_V_SHAKE, - [SPECIES_MEWTWO] = BACK_ANIM_GROW_STUTTER, - [SPECIES_MEW] = BACK_ANIM_CONCAVE_ARC_SMALL, - [SPECIES_CHIKORITA] = BACK_ANIM_CONCAVE_ARC_SMALL, - [SPECIES_BAYLEEF] = BACK_ANIM_H_SLIDE, - [SPECIES_MEGANIUM] = BACK_ANIM_V_SHAKE, - [SPECIES_CYNDAQUIL] = BACK_ANIM_CONCAVE_ARC_SMALL, - [SPECIES_QUILAVA] = BACK_ANIM_JOLT_RIGHT, - [SPECIES_TYPHLOSION] = BACK_ANIM_SHAKE_GLOW_RED, - [SPECIES_TOTODILE] = BACK_ANIM_JOLT_RIGHT, - [SPECIES_CROCONAW] = BACK_ANIM_JOLT_RIGHT, - [SPECIES_FERALIGATR] = BACK_ANIM_V_SHAKE, - [SPECIES_SENTRET] = BACK_ANIM_CONCAVE_ARC_SMALL, - [SPECIES_FURRET] = BACK_ANIM_CONCAVE_ARC_LARGE, - [SPECIES_HOOTHOOT] = BACK_ANIM_CONVEX_DOUBLE_ARC, - [SPECIES_NOCTOWL] = BACK_ANIM_TRIANGLE_DOWN, - [SPECIES_LEDYBA] = BACK_ANIM_V_SHAKE_H_SLIDE, - [SPECIES_LEDIAN] = BACK_ANIM_CONVEX_DOUBLE_ARC, - [SPECIES_SPINARAK] = BACK_ANIM_V_SHAKE_H_SLIDE, - [SPECIES_ARIADOS] = BACK_ANIM_H_SLIDE, - [SPECIES_CROBAT] = BACK_ANIM_TRIANGLE_DOWN, - [SPECIES_CHINCHOU] = BACK_ANIM_V_STRETCH, - [SPECIES_LANTURN] = BACK_ANIM_SHAKE_FLASH_YELLOW, - [SPECIES_PICHU] = BACK_ANIM_CONCAVE_ARC_SMALL, - [SPECIES_CLEFFA] = BACK_ANIM_DIP_RIGHT_SIDE, - [SPECIES_IGGLYBUFF] = BACK_ANIM_DIP_RIGHT_SIDE, - [SPECIES_TOGEPI] = BACK_ANIM_DIP_RIGHT_SIDE, - [SPECIES_TOGETIC] = BACK_ANIM_CONVEX_DOUBLE_ARC, - [SPECIES_NATU] = BACK_ANIM_CONCAVE_ARC_SMALL, - [SPECIES_XATU] = BACK_ANIM_SHRINK_GROW_VIBRATE, - [SPECIES_MAREEP] = BACK_ANIM_CONCAVE_ARC_SMALL, - [SPECIES_FLAAFFY] = BACK_ANIM_DIP_RIGHT_SIDE, - [SPECIES_AMPHAROS] = BACK_ANIM_SHAKE_FLASH_YELLOW, - [SPECIES_BELLOSSOM] = BACK_ANIM_CONVEX_DOUBLE_ARC, - [SPECIES_MARILL] = BACK_ANIM_CONCAVE_ARC_SMALL, - [SPECIES_AZUMARILL] = BACK_ANIM_DIP_RIGHT_SIDE, - [SPECIES_SUDOWOODO] = BACK_ANIM_H_SLIDE, - [SPECIES_POLITOED] = BACK_ANIM_CONCAVE_ARC_LARGE, - [SPECIES_HOPPIP] = BACK_ANIM_CONVEX_DOUBLE_ARC, - [SPECIES_SKIPLOOM] = BACK_ANIM_CONVEX_DOUBLE_ARC, - [SPECIES_JUMPLUFF] = BACK_ANIM_CONVEX_DOUBLE_ARC, - [SPECIES_AIPOM] = BACK_ANIM_CONCAVE_ARC_LARGE, - [SPECIES_SUNKERN] = BACK_ANIM_DIP_RIGHT_SIDE, - [SPECIES_SUNFLORA] = BACK_ANIM_H_SLIDE, - [SPECIES_YANMA] = BACK_ANIM_CONVEX_DOUBLE_ARC, - [SPECIES_WOOPER] = BACK_ANIM_V_STRETCH, - [SPECIES_QUAGSIRE] = BACK_ANIM_H_SLIDE, - [SPECIES_ESPEON] = BACK_ANIM_SHRINK_GROW_VIBRATE, - [SPECIES_UMBREON] = BACK_ANIM_SHRINK_GROW_VIBRATE, - [SPECIES_MURKROW] = BACK_ANIM_CONCAVE_ARC_SMALL, - [SPECIES_SLOWKING] = BACK_ANIM_DIP_RIGHT_SIDE, - [SPECIES_MISDREAVUS] = BACK_ANIM_H_VIBRATE, - [SPECIES_UNOWN] = BACK_ANIM_SHRINK_GROW_VIBRATE, - [SPECIES_WOBBUFFET] = BACK_ANIM_V_STRETCH, - [SPECIES_GIRAFARIG] = BACK_ANIM_SHRINK_GROW_VIBRATE, - [SPECIES_PINECO] = BACK_ANIM_H_SHAKE, - [SPECIES_FORRETRESS] = BACK_ANIM_V_SHAKE, - [SPECIES_DUNSPARCE] = BACK_ANIM_TRIANGLE_DOWN, - [SPECIES_GLIGAR] = BACK_ANIM_SHRINK_GROW, - [SPECIES_STEELIX] = BACK_ANIM_V_SHAKE, - [SPECIES_SNUBBULL] = BACK_ANIM_JOLT_RIGHT, - [SPECIES_GRANBULL] = BACK_ANIM_V_SHAKE, - [SPECIES_QWILFISH] = BACK_ANIM_GROW_STUTTER, - [SPECIES_SCIZOR] = BACK_ANIM_JOLT_RIGHT, - [SPECIES_SHUCKLE] = BACK_ANIM_DIP_RIGHT_SIDE, - [SPECIES_HERACROSS] = BACK_ANIM_JOLT_RIGHT, - [SPECIES_SNEASEL] = BACK_ANIM_TRIANGLE_DOWN, - [SPECIES_TEDDIURSA] = BACK_ANIM_DIP_RIGHT_SIDE, - [SPECIES_URSARING] = BACK_ANIM_V_SHAKE, - [SPECIES_SLUGMA] = BACK_ANIM_SHAKE_GLOW_RED, - [SPECIES_MAGCARGO] = BACK_ANIM_SHAKE_GLOW_RED, - [SPECIES_SWINUB] = BACK_ANIM_V_SHAKE_H_SLIDE, - [SPECIES_PILOSWINE] = BACK_ANIM_H_SHAKE, - [SPECIES_CORSOLA] = BACK_ANIM_H_SLIDE, - [SPECIES_REMORAID] = BACK_ANIM_H_SLIDE, - [SPECIES_OCTILLERY] = BACK_ANIM_SHRINK_GROW, - [SPECIES_DELIBIRD] = BACK_ANIM_TRIANGLE_DOWN, - [SPECIES_MANTINE] = BACK_ANIM_H_SLIDE, - [SPECIES_SKARMORY] = BACK_ANIM_JOLT_RIGHT, - [SPECIES_HOUNDOUR] = BACK_ANIM_V_SHAKE, - [SPECIES_HOUNDOOM] = BACK_ANIM_V_SHAKE, - [SPECIES_KINGDRA] = BACK_ANIM_SHAKE_GLOW_BLUE, - [SPECIES_PHANPY] = BACK_ANIM_JOLT_RIGHT, - [SPECIES_DONPHAN] = BACK_ANIM_V_SHAKE_LOW, - [SPECIES_PORYGON2] = BACK_ANIM_H_VIBRATE, - [SPECIES_STANTLER] = BACK_ANIM_DIP_RIGHT_SIDE, - [SPECIES_SMEARGLE] = BACK_ANIM_H_SLIDE, - [SPECIES_TYROGUE] = BACK_ANIM_TRIANGLE_DOWN, - [SPECIES_HITMONTOP] = BACK_ANIM_CIRCLE_COUNTERCLOCKWISE, - [SPECIES_SMOOCHUM] = BACK_ANIM_H_SLIDE, - [SPECIES_ELEKID] = BACK_ANIM_H_SHAKE, - [SPECIES_MAGBY] = BACK_ANIM_SHAKE_GLOW_RED, - [SPECIES_MILTANK] = BACK_ANIM_H_SLIDE, - [SPECIES_BLISSEY] = BACK_ANIM_DIP_RIGHT_SIDE, - [SPECIES_RAIKOU] = BACK_ANIM_SHAKE_FLASH_YELLOW, - [SPECIES_ENTEI] = BACK_ANIM_SHAKE_GLOW_RED, - [SPECIES_SUICUNE] = BACK_ANIM_SHAKE_GLOW_BLUE, - [SPECIES_LARVITAR] = BACK_ANIM_V_SHAKE_LOW, - [SPECIES_PUPITAR] = BACK_ANIM_V_SHAKE, - [SPECIES_TYRANITAR] = BACK_ANIM_V_SHAKE_LOW, - [SPECIES_LUGIA] = BACK_ANIM_SHAKE_GLOW_BLUE, - [SPECIES_HO_OH] = BACK_ANIM_SHAKE_GLOW_RED, - [SPECIES_CELEBI] = BACK_ANIM_SHAKE_GLOW_GREEN, - [SPECIES_TREECKO] = BACK_ANIM_CONCAVE_ARC_LARGE, - [SPECIES_GROVYLE] = BACK_ANIM_JOLT_RIGHT, - [SPECIES_SCEPTILE] = BACK_ANIM_V_SHAKE, - [SPECIES_TORCHIC] = BACK_ANIM_CONCAVE_ARC_SMALL, - [SPECIES_COMBUSKEN] = BACK_ANIM_CONCAVE_ARC_LARGE, - [SPECIES_BLAZIKEN] = BACK_ANIM_SHAKE_GLOW_RED, - [SPECIES_MUDKIP] = BACK_ANIM_H_SLIDE, - [SPECIES_MARSHTOMP] = BACK_ANIM_CONCAVE_ARC_SMALL, - [SPECIES_SWAMPERT] = BACK_ANIM_SHAKE_GLOW_BLUE, - [SPECIES_POOCHYENA] = BACK_ANIM_CONCAVE_ARC_SMALL, - [SPECIES_MIGHTYENA] = BACK_ANIM_H_SHAKE, - [SPECIES_ZIGZAGOON] = BACK_ANIM_TRIANGLE_DOWN, - [SPECIES_LINOONE] = BACK_ANIM_JOLT_RIGHT, - [SPECIES_WURMPLE] = BACK_ANIM_V_STRETCH, - [SPECIES_SILCOON] = BACK_ANIM_H_SHAKE, - [SPECIES_BEAUTIFLY] = BACK_ANIM_CONVEX_DOUBLE_ARC, - [SPECIES_CASCOON] = BACK_ANIM_H_SHAKE, - [SPECIES_DUSTOX] = BACK_ANIM_TRIANGLE_DOWN, - [SPECIES_LOTAD] = BACK_ANIM_H_SLIDE, - [SPECIES_LOMBRE] = BACK_ANIM_CONCAVE_ARC_LARGE, - [SPECIES_LUDICOLO] = BACK_ANIM_CONCAVE_ARC_LARGE, - [SPECIES_SEEDOT] = BACK_ANIM_DIP_RIGHT_SIDE, - [SPECIES_NUZLEAF] = BACK_ANIM_V_SHAKE, - [SPECIES_SHIFTRY] = BACK_ANIM_SHRINK_GROW_VIBRATE, - [SPECIES_NINCADA] = BACK_ANIM_V_SHAKE_H_SLIDE, - [SPECIES_NINJASK] = BACK_ANIM_H_VIBRATE, - [SPECIES_SHEDINJA] = BACK_ANIM_SHRINK_GROW_VIBRATE, - [SPECIES_TAILLOW] = BACK_ANIM_CONCAVE_ARC_SMALL, - [SPECIES_SWELLOW] = BACK_ANIM_JOLT_RIGHT, - [SPECIES_SHROOMISH] = BACK_ANIM_DIP_RIGHT_SIDE, - [SPECIES_BRELOOM] = BACK_ANIM_JOLT_RIGHT, - [SPECIES_SPINDA] = BACK_ANIM_CIRCLE_COUNTERCLOCKWISE, - [SPECIES_WINGULL] = BACK_ANIM_CONVEX_DOUBLE_ARC, - [SPECIES_PELIPPER] = BACK_ANIM_CONVEX_DOUBLE_ARC, - [SPECIES_SURSKIT] = BACK_ANIM_H_SPRING, - [SPECIES_MASQUERAIN] = BACK_ANIM_CONVEX_DOUBLE_ARC, - [SPECIES_WAILMER] = BACK_ANIM_SHAKE_GLOW_BLUE, - [SPECIES_WAILORD] = BACK_ANIM_SHAKE_GLOW_BLUE, - [SPECIES_SKITTY] = BACK_ANIM_DIP_RIGHT_SIDE, - [SPECIES_DELCATTY] = BACK_ANIM_CONCAVE_ARC_SMALL, - [SPECIES_KECLEON] = BACK_ANIM_H_VIBRATE, - [SPECIES_BALTOY] = BACK_ANIM_DIP_RIGHT_SIDE, - [SPECIES_CLAYDOL] = BACK_ANIM_SHRINK_GROW_VIBRATE, - [SPECIES_NOSEPASS] = BACK_ANIM_V_SHAKE_LOW, - [SPECIES_TORKOAL] = BACK_ANIM_SHAKE_GLOW_RED, - [SPECIES_SABLEYE] = BACK_ANIM_H_VIBRATE, - [SPECIES_BARBOACH] = BACK_ANIM_V_STRETCH, - [SPECIES_WHISCASH] = BACK_ANIM_V_SHAKE, - [SPECIES_LUVDISC] = BACK_ANIM_H_SPRING_REPEATED, - [SPECIES_CORPHISH] = BACK_ANIM_TRIANGLE_DOWN, - [SPECIES_CRAWDAUNT] = BACK_ANIM_JOLT_RIGHT, - [SPECIES_FEEBAS] = BACK_ANIM_H_SPRING, - [SPECIES_MILOTIC] = BACK_ANIM_SHAKE_GLOW_BLUE, - [SPECIES_CARVANHA] = BACK_ANIM_H_SPRING_REPEATED, - [SPECIES_SHARPEDO] = BACK_ANIM_JOLT_RIGHT, - [SPECIES_TRAPINCH] = BACK_ANIM_DIP_RIGHT_SIDE, - [SPECIES_VIBRAVA] = BACK_ANIM_H_VIBRATE, - [SPECIES_FLYGON] = BACK_ANIM_TRIANGLE_DOWN, - [SPECIES_MAKUHITA] = BACK_ANIM_V_SHAKE_LOW, - [SPECIES_HARIYAMA] = BACK_ANIM_V_SHAKE_LOW, - [SPECIES_ELECTRIKE] = BACK_ANIM_JOLT_RIGHT, - [SPECIES_MANECTRIC] = BACK_ANIM_V_SHAKE, - [SPECIES_NUMEL] = BACK_ANIM_V_SHAKE_LOW, - [SPECIES_CAMERUPT] = BACK_ANIM_SHAKE_GLOW_RED, - [SPECIES_SPHEAL] = BACK_ANIM_DIP_RIGHT_SIDE, - [SPECIES_SEALEO] = BACK_ANIM_V_SHAKE, - [SPECIES_WALREIN] = BACK_ANIM_V_SHAKE, - [SPECIES_CACNEA] = BACK_ANIM_V_SHAKE_H_SLIDE, - [SPECIES_CACTURNE] = BACK_ANIM_H_SHAKE, - [SPECIES_SNORUNT] = BACK_ANIM_TRIANGLE_DOWN, - [SPECIES_GLALIE] = BACK_ANIM_TRIANGLE_DOWN, - [SPECIES_LUNATONE] = BACK_ANIM_DIP_RIGHT_SIDE, - [SPECIES_SOLROCK] = BACK_ANIM_DIP_RIGHT_SIDE, - [SPECIES_AZURILL] = BACK_ANIM_CONCAVE_ARC_LARGE, - [SPECIES_SPOINK] = BACK_ANIM_CONCAVE_ARC_LARGE, - [SPECIES_GRUMPIG] = BACK_ANIM_SHRINK_GROW_VIBRATE, - [SPECIES_PLUSLE] = BACK_ANIM_CONCAVE_ARC_SMALL, - [SPECIES_MINUN] = BACK_ANIM_CONCAVE_ARC_SMALL, - [SPECIES_MAWILE] = BACK_ANIM_V_SHAKE, - [SPECIES_MEDITITE] = BACK_ANIM_SHRINK_GROW_VIBRATE, - [SPECIES_MEDICHAM] = BACK_ANIM_SHRINK_GROW_VIBRATE, - [SPECIES_SWABLU] = BACK_ANIM_CONVEX_DOUBLE_ARC, - [SPECIES_ALTARIA] = BACK_ANIM_CONVEX_DOUBLE_ARC, - [SPECIES_WYNAUT] = BACK_ANIM_CONCAVE_ARC_SMALL, - [SPECIES_DUSKULL] = BACK_ANIM_H_VIBRATE, - [SPECIES_DUSCLOPS] = BACK_ANIM_H_VIBRATE, - [SPECIES_ROSELIA] = BACK_ANIM_SHAKE_GLOW_GREEN, - [SPECIES_SLAKOTH] = BACK_ANIM_H_SLIDE, - [SPECIES_VIGOROTH] = BACK_ANIM_CONCAVE_ARC_LARGE, - [SPECIES_SLAKING] = BACK_ANIM_H_SHAKE, - [SPECIES_GULPIN] = BACK_ANIM_V_STRETCH, - [SPECIES_SWALOT] = BACK_ANIM_V_STRETCH, - [SPECIES_TROPIUS] = BACK_ANIM_V_SHAKE_LOW, - [SPECIES_WHISMUR] = BACK_ANIM_DIP_RIGHT_SIDE, - [SPECIES_LOUDRED] = BACK_ANIM_V_SHAKE, - [SPECIES_EXPLOUD] = BACK_ANIM_GROW_STUTTER, - [SPECIES_CLAMPERL] = BACK_ANIM_DIP_RIGHT_SIDE, - [SPECIES_HUNTAIL] = BACK_ANIM_CONVEX_DOUBLE_ARC, - [SPECIES_GOREBYSS] = BACK_ANIM_CONVEX_DOUBLE_ARC, - [SPECIES_ABSOL] = BACK_ANIM_SHRINK_GROW_VIBRATE, - [SPECIES_SHUPPET] = BACK_ANIM_H_VIBRATE, - [SPECIES_BANETTE] = BACK_ANIM_H_VIBRATE, - [SPECIES_SEVIPER] = BACK_ANIM_V_STRETCH, - [SPECIES_ZANGOOSE] = BACK_ANIM_JOLT_RIGHT, - [SPECIES_RELICANTH] = BACK_ANIM_H_SLIDE, - [SPECIES_ARON] = BACK_ANIM_JOLT_RIGHT, - [SPECIES_LAIRON] = BACK_ANIM_V_SHAKE, - [SPECIES_AGGRON] = BACK_ANIM_V_SHAKE_LOW, - [SPECIES_CASTFORM] = BACK_ANIM_CONVEX_DOUBLE_ARC, - [SPECIES_VOLBEAT] = BACK_ANIM_CONVEX_DOUBLE_ARC, - [SPECIES_ILLUMISE] = BACK_ANIM_CONVEX_DOUBLE_ARC, - [SPECIES_LILEEP] = BACK_ANIM_H_STRETCH, - [SPECIES_CRADILY] = BACK_ANIM_V_STRETCH, - [SPECIES_ANORITH] = BACK_ANIM_TRIANGLE_DOWN, - [SPECIES_ARMALDO] = BACK_ANIM_V_SHAKE, - [SPECIES_RALTS] = BACK_ANIM_SHRINK_GROW_VIBRATE, - [SPECIES_KIRLIA] = BACK_ANIM_SHRINK_GROW_VIBRATE, - [SPECIES_GARDEVOIR] = BACK_ANIM_SHRINK_GROW_VIBRATE, - [SPECIES_BAGON] = BACK_ANIM_V_SHAKE, - [SPECIES_SHELGON] = BACK_ANIM_V_SHAKE, - [SPECIES_SALAMENCE] = BACK_ANIM_H_SHAKE, - [SPECIES_BELDUM] = BACK_ANIM_TRIANGLE_DOWN, - [SPECIES_METANG] = BACK_ANIM_JOLT_RIGHT, - [SPECIES_METAGROSS] = BACK_ANIM_V_SHAKE, - [SPECIES_REGIROCK] = BACK_ANIM_V_SHAKE, - [SPECIES_REGICE] = BACK_ANIM_V_SHAKE, - [SPECIES_REGISTEEL] = BACK_ANIM_V_SHAKE, - [SPECIES_KYOGRE] = BACK_ANIM_SHAKE_GLOW_BLUE, - [SPECIES_GROUDON] = BACK_ANIM_SHAKE_GLOW_RED, - [SPECIES_RAYQUAZA] = BACK_ANIM_GROW_STUTTER, - [SPECIES_LATIAS] = BACK_ANIM_H_VIBRATE, - [SPECIES_LATIOS] = BACK_ANIM_H_VIBRATE, - [SPECIES_JIRACHI] = BACK_ANIM_CONVEX_DOUBLE_ARC, - [SPECIES_DEOXYS] = BACK_ANIM_SHRINK_GROW_VIBRATE, - [SPECIES_CHIMECHO] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_BULBASAUR] = BACK_ANIM_DIP_RIGHT_SIDE, + [SPECIES_IVYSAUR] = BACK_ANIM_H_SLIDE, + [SPECIES_VENUSAUR] = BACK_ANIM_H_SHAKE, + [SPECIES_CHARMANDER] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_CHARMELEON] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_CHARIZARD] = BACK_ANIM_SHAKE_GLOW_RED, + [SPECIES_SQUIRTLE] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_WARTORTLE] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_BLASTOISE] = BACK_ANIM_SHAKE_GLOW_BLUE, + [SPECIES_CATERPIE] = BACK_ANIM_H_SLIDE, + [SPECIES_METAPOD] = BACK_ANIM_DIP_RIGHT_SIDE, + [SPECIES_BUTTERFREE] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_WEEDLE] = BACK_ANIM_H_SLIDE, + [SPECIES_KAKUNA] = BACK_ANIM_DIP_RIGHT_SIDE, + [SPECIES_BEEDRILL] = BACK_ANIM_H_VIBRATE, + [SPECIES_PIDGEY] = BACK_ANIM_TRIANGLE_DOWN, + [SPECIES_PIDGEOTTO] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_PIDGEOT] = BACK_ANIM_TRIANGLE_DOWN, + [SPECIES_RATTATA] = BACK_ANIM_V_SHAKE_H_SLIDE, + [SPECIES_RATICATE] = BACK_ANIM_V_SHAKE_H_SLIDE, + [SPECIES_SPEAROW] = BACK_ANIM_TRIANGLE_DOWN, + [SPECIES_FEAROW] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_EKANS] = BACK_ANIM_TRIANGLE_DOWN, + [SPECIES_ARBOK] = BACK_ANIM_V_SHAKE, + [SPECIES_PIKACHU] = BACK_ANIM_SHAKE_FLASH_YELLOW, + [SPECIES_RAICHU] = BACK_ANIM_SHAKE_FLASH_YELLOW, + [SPECIES_SANDSHREW] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_SANDSLASH] = BACK_ANIM_CONCAVE_ARC_LARGE, + [SPECIES_NIDORAN_F] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_NIDORINA] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_NIDOQUEEN] = BACK_ANIM_V_SHAKE, + [SPECIES_NIDORAN_M] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_NIDORINO] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_NIDOKING] = BACK_ANIM_V_SHAKE, + [SPECIES_CLEFAIRY] = BACK_ANIM_DIP_RIGHT_SIDE, + [SPECIES_CLEFABLE] = BACK_ANIM_DIP_RIGHT_SIDE, + [SPECIES_VULPIX] = BACK_ANIM_CONCAVE_ARC_LARGE, + [SPECIES_NINETALES] = BACK_ANIM_H_VIBRATE, + [SPECIES_JIGGLYPUFF] = BACK_ANIM_DIP_RIGHT_SIDE, + [SPECIES_WIGGLYTUFF] = BACK_ANIM_GROW, + [SPECIES_ZUBAT] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_GOLBAT] = BACK_ANIM_V_SHAKE, + [SPECIES_ODDISH] = BACK_ANIM_H_SLIDE, + [SPECIES_GLOOM] = BACK_ANIM_H_SLIDE, + [SPECIES_VILEPLUME] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_PARAS] = BACK_ANIM_H_SLIDE, + [SPECIES_PARASECT] = BACK_ANIM_H_SHAKE, + [SPECIES_VENONAT] = BACK_ANIM_V_SHAKE_H_SLIDE, + [SPECIES_VENOMOTH] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_DIGLETT] = BACK_ANIM_V_SHAKE, + [SPECIES_DUGTRIO] = BACK_ANIM_V_SHAKE, + [SPECIES_MEOWTH] = BACK_ANIM_CONCAVE_ARC_LARGE, + [SPECIES_PERSIAN] = BACK_ANIM_TRIANGLE_DOWN, + [SPECIES_PSYDUCK] = BACK_ANIM_H_SLIDE, + [SPECIES_GOLDUCK] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_MANKEY] = BACK_ANIM_CONCAVE_ARC_LARGE, + [SPECIES_PRIMEAPE] = BACK_ANIM_CONCAVE_ARC_LARGE, + [SPECIES_GROWLITHE] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_ARCANINE] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_POLIWAG] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_POLIWHIRL] = BACK_ANIM_V_SHAKE, + [SPECIES_POLIWRATH] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_ABRA] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_KADABRA] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_ALAKAZAM] = BACK_ANIM_GROW_STUTTER, + [SPECIES_MACHOP] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_MACHOKE] = BACK_ANIM_V_SHAKE, + [SPECIES_MACHAMP] = BACK_ANIM_V_SHAKE, + [SPECIES_BELLSPROUT] = BACK_ANIM_V_STRETCH, + [SPECIES_WEEPINBELL] = BACK_ANIM_V_STRETCH, + [SPECIES_VICTREEBEL] = BACK_ANIM_V_STRETCH, + [SPECIES_TENTACOOL] = BACK_ANIM_H_SLIDE, + [SPECIES_TENTACRUEL] = BACK_ANIM_H_SLIDE, + [SPECIES_GEODUDE] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_GRAVELER] = BACK_ANIM_H_SHAKE, + [SPECIES_GOLEM] = BACK_ANIM_H_SHAKE, + [SPECIES_PONYTA] = BACK_ANIM_SHAKE_GLOW_RED, + [SPECIES_RAPIDASH] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_SLOWPOKE] = BACK_ANIM_H_SLIDE, + [SPECIES_SLOWBRO] = BACK_ANIM_DIP_RIGHT_SIDE, + [SPECIES_MAGNEMITE] = BACK_ANIM_TRIANGLE_DOWN, + [SPECIES_MAGNETON] = BACK_ANIM_TRIANGLE_DOWN, + [SPECIES_FARFETCHD] = BACK_ANIM_H_SLIDE, + [SPECIES_DODUO] = BACK_ANIM_TRIANGLE_DOWN, + [SPECIES_DODRIO] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_SEEL] = BACK_ANIM_DIP_RIGHT_SIDE, + [SPECIES_DEWGONG] = BACK_ANIM_H_SLIDE, + [SPECIES_GRIMER] = BACK_ANIM_V_STRETCH, + [SPECIES_MUK] = BACK_ANIM_H_STRETCH, + [SPECIES_SHELLDER] = BACK_ANIM_DIP_RIGHT_SIDE, + [SPECIES_CLOYSTER] = BACK_ANIM_TRIANGLE_DOWN, + [SPECIES_GASTLY] = BACK_ANIM_H_VIBRATE, + [SPECIES_HAUNTER] = BACK_ANIM_H_VIBRATE, + [SPECIES_GENGAR] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_ONIX] = BACK_ANIM_V_SHAKE, + [SPECIES_DROWZEE] = BACK_ANIM_DIP_RIGHT_SIDE, + [SPECIES_HYPNO] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_KRABBY] = BACK_ANIM_V_SHAKE_H_SLIDE, + [SPECIES_KINGLER] = BACK_ANIM_V_SHAKE, + [SPECIES_VOLTORB] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_ELECTRODE] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_EXEGGCUTE] = BACK_ANIM_H_SLIDE, + [SPECIES_EXEGGUTOR] = BACK_ANIM_CONCAVE_ARC_LARGE, + [SPECIES_CUBONE] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_MAROWAK] = BACK_ANIM_CONCAVE_ARC_LARGE, + [SPECIES_HITMONLEE] = BACK_ANIM_H_SLIDE, + [SPECIES_HITMONCHAN] = BACK_ANIM_TRIANGLE_DOWN, + [SPECIES_LICKITUNG] = BACK_ANIM_H_SLIDE, + [SPECIES_KOFFING] = BACK_ANIM_GROW, + [SPECIES_WEEZING] = BACK_ANIM_GROW, + [SPECIES_RHYHORN] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_RHYDON] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_CHANSEY] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_TANGELA] = BACK_ANIM_V_STRETCH, + [SPECIES_KANGASKHAN] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_HORSEA] = BACK_ANIM_DIP_RIGHT_SIDE, + [SPECIES_SEADRA] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_GOLDEEN] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_SEAKING] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_STARYU] = BACK_ANIM_DIP_RIGHT_SIDE, + [SPECIES_STARMIE] = BACK_ANIM_SHAKE_GLOW_BLUE, + [SPECIES_MR_MIME] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_SCYTHER] = BACK_ANIM_TRIANGLE_DOWN, + [SPECIES_JYNX] = BACK_ANIM_DIP_RIGHT_SIDE, + [SPECIES_ELECTABUZZ] = BACK_ANIM_SHAKE_FLASH_YELLOW, + [SPECIES_MAGMAR] = BACK_ANIM_SHAKE_GLOW_RED, + [SPECIES_PINSIR] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_TAUROS] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_MAGIKARP] = BACK_ANIM_CONCAVE_ARC_LARGE, + [SPECIES_GYARADOS] = BACK_ANIM_V_SHAKE, + [SPECIES_LAPRAS] = BACK_ANIM_SHAKE_GLOW_BLUE, + [SPECIES_DITTO] = BACK_ANIM_SHRINK_GROW, + [SPECIES_EEVEE] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_VAPOREON] = BACK_ANIM_SHAKE_GLOW_BLUE, + [SPECIES_JOLTEON] = BACK_ANIM_SHAKE_FLASH_YELLOW, + [SPECIES_FLAREON] = BACK_ANIM_SHAKE_GLOW_RED, + [SPECIES_PORYGON] = BACK_ANIM_H_VIBRATE, + [SPECIES_OMANYTE] = BACK_ANIM_DIP_RIGHT_SIDE, + [SPECIES_OMASTAR] = BACK_ANIM_DIP_RIGHT_SIDE, + [SPECIES_KABUTO] = BACK_ANIM_DIP_RIGHT_SIDE, + [SPECIES_KABUTOPS] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_AERODACTYL] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_SNORLAX] = BACK_ANIM_DIP_RIGHT_SIDE, + [SPECIES_ARTICUNO] = BACK_ANIM_SHAKE_GLOW_BLUE, + [SPECIES_ZAPDOS] = BACK_ANIM_SHAKE_FLASH_YELLOW, + [SPECIES_MOLTRES] = BACK_ANIM_SHAKE_GLOW_RED, + [SPECIES_DRATINI] = BACK_ANIM_H_SLIDE, + [SPECIES_DRAGONAIR] = BACK_ANIM_TRIANGLE_DOWN, + [SPECIES_DRAGONITE] = BACK_ANIM_V_SHAKE, + [SPECIES_MEWTWO] = BACK_ANIM_GROW_STUTTER, + [SPECIES_MEW] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_CHIKORITA] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_BAYLEEF] = BACK_ANIM_H_SLIDE, + [SPECIES_MEGANIUM] = BACK_ANIM_V_SHAKE, + [SPECIES_CYNDAQUIL] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_QUILAVA] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_TYPHLOSION] = BACK_ANIM_SHAKE_GLOW_RED, + [SPECIES_TOTODILE] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_CROCONAW] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_FERALIGATR] = BACK_ANIM_V_SHAKE, + [SPECIES_SENTRET] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_FURRET] = BACK_ANIM_CONCAVE_ARC_LARGE, + [SPECIES_HOOTHOOT] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_NOCTOWL] = BACK_ANIM_TRIANGLE_DOWN, + [SPECIES_LEDYBA] = BACK_ANIM_V_SHAKE_H_SLIDE, + [SPECIES_LEDIAN] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_SPINARAK] = BACK_ANIM_V_SHAKE_H_SLIDE, + [SPECIES_ARIADOS] = BACK_ANIM_H_SLIDE, + [SPECIES_CROBAT] = BACK_ANIM_TRIANGLE_DOWN, + [SPECIES_CHINCHOU] = BACK_ANIM_V_STRETCH, + [SPECIES_LANTURN] = BACK_ANIM_SHAKE_FLASH_YELLOW, + [SPECIES_PICHU] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_CLEFFA] = BACK_ANIM_DIP_RIGHT_SIDE, + [SPECIES_IGGLYBUFF] = BACK_ANIM_DIP_RIGHT_SIDE, + [SPECIES_TOGEPI] = BACK_ANIM_DIP_RIGHT_SIDE, + [SPECIES_TOGETIC] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_NATU] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_XATU] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_MAREEP] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_FLAAFFY] = BACK_ANIM_DIP_RIGHT_SIDE, + [SPECIES_AMPHAROS] = BACK_ANIM_SHAKE_FLASH_YELLOW, + [SPECIES_BELLOSSOM] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_MARILL] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_AZUMARILL] = BACK_ANIM_DIP_RIGHT_SIDE, + [SPECIES_SUDOWOODO] = BACK_ANIM_H_SLIDE, + [SPECIES_POLITOED] = BACK_ANIM_CONCAVE_ARC_LARGE, + [SPECIES_HOPPIP] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_SKIPLOOM] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_JUMPLUFF] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_AIPOM] = BACK_ANIM_CONCAVE_ARC_LARGE, + [SPECIES_SUNKERN] = BACK_ANIM_DIP_RIGHT_SIDE, + [SPECIES_SUNFLORA] = BACK_ANIM_H_SLIDE, + [SPECIES_YANMA] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_WOOPER] = BACK_ANIM_V_STRETCH, + [SPECIES_QUAGSIRE] = BACK_ANIM_H_SLIDE, + [SPECIES_ESPEON] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_UMBREON] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_MURKROW] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_SLOWKING] = BACK_ANIM_DIP_RIGHT_SIDE, + [SPECIES_MISDREAVUS] = BACK_ANIM_H_VIBRATE, + [SPECIES_UNOWN] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_WOBBUFFET] = BACK_ANIM_V_STRETCH, + [SPECIES_GIRAFARIG] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_PINECO] = BACK_ANIM_H_SHAKE, + [SPECIES_FORRETRESS] = BACK_ANIM_V_SHAKE, + [SPECIES_DUNSPARCE] = BACK_ANIM_TRIANGLE_DOWN, + [SPECIES_GLIGAR] = BACK_ANIM_SHRINK_GROW, + [SPECIES_STEELIX] = BACK_ANIM_V_SHAKE, + [SPECIES_SNUBBULL] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_GRANBULL] = BACK_ANIM_V_SHAKE, + [SPECIES_QWILFISH] = BACK_ANIM_GROW_STUTTER, + [SPECIES_SCIZOR] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_SHUCKLE] = BACK_ANIM_DIP_RIGHT_SIDE, + [SPECIES_HERACROSS] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_SNEASEL] = BACK_ANIM_TRIANGLE_DOWN, + [SPECIES_TEDDIURSA] = BACK_ANIM_DIP_RIGHT_SIDE, + [SPECIES_URSARING] = BACK_ANIM_V_SHAKE, + [SPECIES_SLUGMA] = BACK_ANIM_SHAKE_GLOW_RED, + [SPECIES_MAGCARGO] = BACK_ANIM_SHAKE_GLOW_RED, + [SPECIES_SWINUB] = BACK_ANIM_V_SHAKE_H_SLIDE, + [SPECIES_PILOSWINE] = BACK_ANIM_H_SHAKE, + [SPECIES_CORSOLA] = BACK_ANIM_H_SLIDE, + [SPECIES_REMORAID] = BACK_ANIM_H_SLIDE, + [SPECIES_OCTILLERY] = BACK_ANIM_SHRINK_GROW, + [SPECIES_DELIBIRD] = BACK_ANIM_TRIANGLE_DOWN, + [SPECIES_MANTINE] = BACK_ANIM_H_SLIDE, + [SPECIES_SKARMORY] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_HOUNDOUR] = BACK_ANIM_V_SHAKE, + [SPECIES_HOUNDOOM] = BACK_ANIM_V_SHAKE, + [SPECIES_KINGDRA] = BACK_ANIM_SHAKE_GLOW_BLUE, + [SPECIES_PHANPY] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_DONPHAN] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_PORYGON2] = BACK_ANIM_H_VIBRATE, + [SPECIES_STANTLER] = BACK_ANIM_DIP_RIGHT_SIDE, + [SPECIES_SMEARGLE] = BACK_ANIM_H_SLIDE, + [SPECIES_TYROGUE] = BACK_ANIM_TRIANGLE_DOWN, + [SPECIES_HITMONTOP] = BACK_ANIM_CIRCLE_COUNTERCLOCKWISE, + [SPECIES_SMOOCHUM] = BACK_ANIM_H_SLIDE, + [SPECIES_ELEKID] = BACK_ANIM_H_SHAKE, + [SPECIES_MAGBY] = BACK_ANIM_SHAKE_GLOW_RED, + [SPECIES_MILTANK] = BACK_ANIM_H_SLIDE, + [SPECIES_BLISSEY] = BACK_ANIM_DIP_RIGHT_SIDE, + [SPECIES_RAIKOU] = BACK_ANIM_SHAKE_FLASH_YELLOW, + [SPECIES_ENTEI] = BACK_ANIM_SHAKE_GLOW_RED, + [SPECIES_SUICUNE] = BACK_ANIM_SHAKE_GLOW_BLUE, + [SPECIES_LARVITAR] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_PUPITAR] = BACK_ANIM_V_SHAKE, + [SPECIES_TYRANITAR] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_LUGIA] = BACK_ANIM_SHAKE_GLOW_BLUE, + [SPECIES_HO_OH] = BACK_ANIM_SHAKE_GLOW_RED, + [SPECIES_CELEBI] = BACK_ANIM_SHAKE_GLOW_GREEN, + [SPECIES_TREECKO] = BACK_ANIM_CONCAVE_ARC_LARGE, + [SPECIES_GROVYLE] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_SCEPTILE] = BACK_ANIM_V_SHAKE, + [SPECIES_TORCHIC] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_COMBUSKEN] = BACK_ANIM_CONCAVE_ARC_LARGE, + [SPECIES_BLAZIKEN] = BACK_ANIM_SHAKE_GLOW_RED, + [SPECIES_MUDKIP] = BACK_ANIM_H_SLIDE, + [SPECIES_MARSHTOMP] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_SWAMPERT] = BACK_ANIM_SHAKE_GLOW_BLUE, + [SPECIES_POOCHYENA] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_MIGHTYENA] = BACK_ANIM_H_SHAKE, + [SPECIES_ZIGZAGOON] = BACK_ANIM_TRIANGLE_DOWN, + [SPECIES_LINOONE] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_WURMPLE] = BACK_ANIM_V_STRETCH, + [SPECIES_SILCOON] = BACK_ANIM_H_SHAKE, + [SPECIES_BEAUTIFLY] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_CASCOON] = BACK_ANIM_H_SHAKE, + [SPECIES_DUSTOX] = BACK_ANIM_TRIANGLE_DOWN, + [SPECIES_LOTAD] = BACK_ANIM_H_SLIDE, + [SPECIES_LOMBRE] = BACK_ANIM_CONCAVE_ARC_LARGE, + [SPECIES_LUDICOLO] = BACK_ANIM_CONCAVE_ARC_LARGE, + [SPECIES_SEEDOT] = BACK_ANIM_DIP_RIGHT_SIDE, + [SPECIES_NUZLEAF] = BACK_ANIM_V_SHAKE, + [SPECIES_SHIFTRY] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_NINCADA] = BACK_ANIM_V_SHAKE_H_SLIDE, + [SPECIES_NINJASK] = BACK_ANIM_H_VIBRATE, + [SPECIES_SHEDINJA] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_TAILLOW] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_SWELLOW] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_SHROOMISH] = BACK_ANIM_DIP_RIGHT_SIDE, + [SPECIES_BRELOOM] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_SPINDA] = BACK_ANIM_CIRCLE_COUNTERCLOCKWISE, + [SPECIES_WINGULL] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_PELIPPER] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_SURSKIT] = BACK_ANIM_H_SPRING, + [SPECIES_MASQUERAIN] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_WAILMER] = BACK_ANIM_SHAKE_GLOW_BLUE, + [SPECIES_WAILORD] = BACK_ANIM_SHAKE_GLOW_BLUE, + [SPECIES_SKITTY] = BACK_ANIM_DIP_RIGHT_SIDE, + [SPECIES_DELCATTY] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_KECLEON] = BACK_ANIM_H_VIBRATE, + [SPECIES_BALTOY] = BACK_ANIM_DIP_RIGHT_SIDE, + [SPECIES_CLAYDOL] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_NOSEPASS] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_TORKOAL] = BACK_ANIM_SHAKE_GLOW_RED, + [SPECIES_SABLEYE] = BACK_ANIM_H_VIBRATE, + [SPECIES_BARBOACH] = BACK_ANIM_V_STRETCH, + [SPECIES_WHISCASH] = BACK_ANIM_V_SHAKE, + [SPECIES_LUVDISC] = BACK_ANIM_H_SPRING_REPEATED, + [SPECIES_CORPHISH] = BACK_ANIM_TRIANGLE_DOWN, + [SPECIES_CRAWDAUNT] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_FEEBAS] = BACK_ANIM_H_SPRING, + [SPECIES_MILOTIC] = BACK_ANIM_SHAKE_GLOW_BLUE, + [SPECIES_CARVANHA] = BACK_ANIM_H_SPRING_REPEATED, + [SPECIES_SHARPEDO] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_TRAPINCH] = BACK_ANIM_DIP_RIGHT_SIDE, + [SPECIES_VIBRAVA] = BACK_ANIM_H_VIBRATE, + [SPECIES_FLYGON] = BACK_ANIM_TRIANGLE_DOWN, + [SPECIES_MAKUHITA] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_HARIYAMA] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_ELECTRIKE] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_MANECTRIC] = BACK_ANIM_V_SHAKE, + [SPECIES_NUMEL] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_CAMERUPT] = BACK_ANIM_SHAKE_GLOW_RED, + [SPECIES_SPHEAL] = BACK_ANIM_DIP_RIGHT_SIDE, + [SPECIES_SEALEO] = BACK_ANIM_V_SHAKE, + [SPECIES_WALREIN] = BACK_ANIM_V_SHAKE, + [SPECIES_CACNEA] = BACK_ANIM_V_SHAKE_H_SLIDE, + [SPECIES_CACTURNE] = BACK_ANIM_H_SHAKE, + [SPECIES_SNORUNT] = BACK_ANIM_TRIANGLE_DOWN, + [SPECIES_GLALIE] = BACK_ANIM_TRIANGLE_DOWN, + [SPECIES_LUNATONE] = BACK_ANIM_DIP_RIGHT_SIDE, + [SPECIES_SOLROCK] = BACK_ANIM_DIP_RIGHT_SIDE, + [SPECIES_AZURILL] = BACK_ANIM_CONCAVE_ARC_LARGE, + [SPECIES_SPOINK] = BACK_ANIM_CONCAVE_ARC_LARGE, + [SPECIES_GRUMPIG] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_PLUSLE] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_MINUN] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_MAWILE] = BACK_ANIM_V_SHAKE, + [SPECIES_MEDITITE] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_MEDICHAM] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_SWABLU] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_ALTARIA] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_WYNAUT] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_DUSKULL] = BACK_ANIM_H_VIBRATE, + [SPECIES_DUSCLOPS] = BACK_ANIM_H_VIBRATE, + [SPECIES_ROSELIA] = BACK_ANIM_SHAKE_GLOW_GREEN, + [SPECIES_SLAKOTH] = BACK_ANIM_H_SLIDE, + [SPECIES_VIGOROTH] = BACK_ANIM_CONCAVE_ARC_LARGE, + [SPECIES_SLAKING] = BACK_ANIM_H_SHAKE, + [SPECIES_GULPIN] = BACK_ANIM_V_STRETCH, + [SPECIES_SWALOT] = BACK_ANIM_V_STRETCH, + [SPECIES_TROPIUS] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_WHISMUR] = BACK_ANIM_DIP_RIGHT_SIDE, + [SPECIES_LOUDRED] = BACK_ANIM_V_SHAKE, + [SPECIES_EXPLOUD] = BACK_ANIM_GROW_STUTTER, + [SPECIES_CLAMPERL] = BACK_ANIM_DIP_RIGHT_SIDE, + [SPECIES_HUNTAIL] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_GOREBYSS] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_ABSOL] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_SHUPPET] = BACK_ANIM_H_VIBRATE, + [SPECIES_BANETTE] = BACK_ANIM_H_VIBRATE, + [SPECIES_SEVIPER] = BACK_ANIM_V_STRETCH, + [SPECIES_ZANGOOSE] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_RELICANTH] = BACK_ANIM_H_SLIDE, + [SPECIES_ARON] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_LAIRON] = BACK_ANIM_V_SHAKE, + [SPECIES_AGGRON] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_CASTFORM] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_VOLBEAT] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_ILLUMISE] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_LILEEP] = BACK_ANIM_H_STRETCH, + [SPECIES_CRADILY] = BACK_ANIM_V_STRETCH, + [SPECIES_ANORITH] = BACK_ANIM_TRIANGLE_DOWN, + [SPECIES_ARMALDO] = BACK_ANIM_V_SHAKE, + [SPECIES_RALTS] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_KIRLIA] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_GARDEVOIR] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_BAGON] = BACK_ANIM_V_SHAKE, + [SPECIES_SHELGON] = BACK_ANIM_V_SHAKE, + [SPECIES_SALAMENCE] = BACK_ANIM_H_SHAKE, + [SPECIES_BELDUM] = BACK_ANIM_TRIANGLE_DOWN, + [SPECIES_METANG] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_METAGROSS] = BACK_ANIM_V_SHAKE, + [SPECIES_REGIROCK] = BACK_ANIM_V_SHAKE, + [SPECIES_REGICE] = BACK_ANIM_V_SHAKE, + [SPECIES_REGISTEEL] = BACK_ANIM_V_SHAKE, + [SPECIES_KYOGRE] = BACK_ANIM_SHAKE_GLOW_BLUE, + [SPECIES_GROUDON] = BACK_ANIM_SHAKE_GLOW_RED, + [SPECIES_RAYQUAZA] = BACK_ANIM_GROW_STUTTER, + [SPECIES_LATIAS] = BACK_ANIM_H_VIBRATE, + [SPECIES_LATIOS] = BACK_ANIM_H_VIBRATE, + [SPECIES_JIRACHI] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_DEOXYS] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_CHIMECHO] = BACK_ANIM_CONVEX_DOUBLE_ARC, + + // Gen 4 + [SPECIES_TURTWIG] = BACK_ANIM_H_SLIDE, + [SPECIES_GROTLE] = BACK_ANIM_H_SLIDE, + [SPECIES_TORTERRA] = BACK_ANIM_SHAKE_GLOW_GREEN, + [SPECIES_CHIMCHAR] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_MONFERNO] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_INFERNAPE] = BACK_ANIM_SHAKE_GLOW_RED, + [SPECIES_PIPLUP] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_PRINPLUP] = BACK_ANIM_V_STRETCH, + [SPECIES_EMPOLEON] = BACK_ANIM_SHAKE_GLOW_BLUE, + [SPECIES_STARLY] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_STARAVIA] = BACK_ANIM_TRIANGLE_DOWN, + [SPECIES_STARAPTOR] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_BIDOOF] = BACK_ANIM_V_SHAKE_H_SLIDE, + [SPECIES_BIBAREL] = BACK_ANIM_DIP_RIGHT_SIDE, + [SPECIES_KRICKETOT] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_KRICKETUNE] = BACK_ANIM_H_VIBRATE, + [SPECIES_SHINX] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_LUXIO] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_LUXRAY] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_BUDEW] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_ROSERADE] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_CRANIDOS] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_RAMPARDOS] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_SHIELDON] = BACK_ANIM_V_SHAKE, + [SPECIES_BASTIODON] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_BURMY] = BACK_ANIM_H_SHAKE, + [SPECIES_WORMADAM] = BACK_ANIM_V_SHAKE, + [SPECIES_MOTHIM] = BACK_ANIM_H_SHAKE, + [SPECIES_COMBEE] = BACK_ANIM_TRIANGLE_DOWN, + [SPECIES_VESPIQUEN] = BACK_ANIM_CIRCLE_COUNTERCLOCKWISE, + [SPECIES_PACHIRISU] = BACK_ANIM_SHAKE_FLASH_YELLOW, + [SPECIES_BUIZEL] = BACK_ANIM_H_SLIDE, + [SPECIES_FLOATZEL] = BACK_ANIM_V_STRETCH, + [SPECIES_CHERUBI] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_CHERRIM] = BACK_ANIM_V_STRETCH, + [SPECIES_SHELLOS] = BACK_ANIM_H_SPRING, + [SPECIES_GASTRODON] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_AMBIPOM] = BACK_ANIM_CONCAVE_ARC_LARGE, + [SPECIES_DRIFLOON] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_DRIFBLIM] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_BUNEARY] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_LOPUNNY] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_MISMAGIUS] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_HONCHKROW] = BACK_ANIM_H_STRETCH, + [SPECIES_GLAMEOW] = BACK_ANIM_SHRINK_GROW, + [SPECIES_PURUGLY] = BACK_ANIM_GROW_STUTTER, + [SPECIES_CHINGLING] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_STUNKY] = BACK_ANIM_H_SLIDE, + [SPECIES_SKUNTANK] = BACK_ANIM_H_STRETCH, + [SPECIES_BRONZOR] = BACK_ANIM_TRIANGLE_DOWN, + [SPECIES_BRONZONG] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_BONSLY] = BACK_ANIM_H_VIBRATE, + [SPECIES_MIME_JR] = BACK_ANIM_CONCAVE_ARC_LARGE, + [SPECIES_HAPPINY] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_CHATOT] = BACK_ANIM_V_STRETCH, + [SPECIES_SPIRITOMB] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_GIBLE] = BACK_ANIM_H_SHAKE, + [SPECIES_GABITE] = BACK_ANIM_V_SHAKE, + [SPECIES_GARCHOMP] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_MUNCHLAX] = BACK_ANIM_GROW, + [SPECIES_RIOLU] = BACK_ANIM_CONCAVE_ARC_LARGE, + [SPECIES_LUCARIO] = BACK_ANIM_V_SHAKE_H_SLIDE, + [SPECIES_HIPPOPOTAS] = BACK_ANIM_H_SLIDE, + [SPECIES_HIPPOWDON] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_SKORUPI] = BACK_ANIM_H_SLIDE, + [SPECIES_DRAPION] = BACK_ANIM_V_SHAKE_H_SLIDE, + [SPECIES_CROAGUNK] = BACK_ANIM_GROW, + [SPECIES_TOXICROAK] = BACK_ANIM_V_SHAKE_H_SLIDE, + [SPECIES_CARNIVINE] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_FINNEON] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_LUMINEON] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_MANTYKE] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_SNOVER] = BACK_ANIM_V_STRETCH, + [SPECIES_ABOMASNOW] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_WEAVILE] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_MAGNEZONE] = BACK_ANIM_TRIANGLE_DOWN, + [SPECIES_LICKILICKY] = BACK_ANIM_V_SHAKE, + [SPECIES_RHYPERIOR] = BACK_ANIM_V_SHAKE, + [SPECIES_TANGROWTH] = BACK_ANIM_GROW, + [SPECIES_ELECTIVIRE] = BACK_ANIM_SHAKE_FLASH_YELLOW, + [SPECIES_MAGMORTAR] = BACK_ANIM_SHAKE_GLOW_RED, + [SPECIES_TOGEKISS] = BACK_ANIM_CONCAVE_ARC_LARGE, + [SPECIES_YANMEGA] = BACK_ANIM_H_VIBRATE, + [SPECIES_LEAFEON] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_GLACEON] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_GLISCOR] = BACK_ANIM_V_STRETCH, + [SPECIES_MAMOSWINE] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_PORYGON_Z] = BACK_ANIM_H_VIBRATE, + [SPECIES_GALLADE] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_PROBOPASS] = BACK_ANIM_V_SHAKE_H_SLIDE, + [SPECIES_DUSKNOIR] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_FROSLASS] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_ROTOM] = BACK_ANIM_SHAKE_FLASH_YELLOW, + [SPECIES_UXIE] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_MESPRIT] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_AZELF] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_DIALGA] = BACK_ANIM_V_SHAKE, + [SPECIES_PALKIA] = BACK_ANIM_H_SHAKE, + [SPECIES_HEATRAN] = BACK_ANIM_SHAKE_GLOW_RED, + [SPECIES_REGIGIGAS] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_GIRATINA] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_CRESSELIA] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_PHIONE] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_MANAPHY] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_DARKRAI] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_SHAYMIN] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_ARCEUS] = BACK_ANIM_GROW, + + //Gen 4 Forms + [SPECIES_DEOXYS_ATTACK] = BACK_ANIM_GROW_STUTTER, + [SPECIES_DEOXYS_DEFENSE] = BACK_ANIM_DIP_RIGHT_SIDE, + [SPECIES_DEOXYS_SPEED] = BACK_ANIM_V_SHAKE_H_SLIDE, + [SPECIES_BURMY_SANDY_CLOAK] = BACK_ANIM_H_SHAKE, + [SPECIES_BURMY_TRASH_CLOAK] = BACK_ANIM_H_SHAKE, + [SPECIES_WORMADAM_SANDY_CLOAK] = BACK_ANIM_V_SHAKE, + [SPECIES_WORMADAM_TRASH_CLOAK] = BACK_ANIM_V_SHAKE, + [SPECIES_CHERRIM_SUNSHINE] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_SHELLOS_EAST_SEA] = BACK_ANIM_H_SPRING, + [SPECIES_GASTRODON_EAST_SEA] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_ROTOM_HEAT] = BACK_ANIM_SHAKE_GLOW_RED, + [SPECIES_ROTOM_WASH] = BACK_ANIM_V_SHAKE_H_SLIDE, + [SPECIES_ROTOM_FROST] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_ROTOM_FAN] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_ROTOM_MOW] = BACK_ANIM_H_SLIDE, + [SPECIES_GIRATINA_ORIGIN] = BACK_ANIM_GROW_STUTTER, + [SPECIES_SHAYMIN_SKY] = BACK_ANIM_TRIANGLE_DOWN, + [SPECIES_ARCEUS_FIGHTING] = BACK_ANIM_GROW_STUTTER, + [SPECIES_ARCEUS_FLYING] = BACK_ANIM_GROW_STUTTER, + [SPECIES_ARCEUS_POISON] = BACK_ANIM_GROW_STUTTER, + [SPECIES_ARCEUS_GROUND] = BACK_ANIM_GROW_STUTTER, + [SPECIES_ARCEUS_ROCK] = BACK_ANIM_GROW_STUTTER, + [SPECIES_ARCEUS_BUG] = BACK_ANIM_GROW_STUTTER, + [SPECIES_ARCEUS_GHOST] = BACK_ANIM_GROW_STUTTER, + [SPECIES_ARCEUS_STEEL] = BACK_ANIM_GROW_STUTTER, + [SPECIES_ARCEUS_FIRE] = BACK_ANIM_GROW_STUTTER, + [SPECIES_ARCEUS_WATER] = BACK_ANIM_GROW_STUTTER, + [SPECIES_ARCEUS_GRASS] = BACK_ANIM_GROW_STUTTER, + [SPECIES_ARCEUS_ELECTRIC] = BACK_ANIM_GROW_STUTTER, + [SPECIES_ARCEUS_PSYCHIC] = BACK_ANIM_GROW_STUTTER, + [SPECIES_ARCEUS_ICE] = BACK_ANIM_GROW_STUTTER, + [SPECIES_ARCEUS_DRAGON] = BACK_ANIM_GROW_STUTTER, + [SPECIES_ARCEUS_DARK] = BACK_ANIM_GROW_STUTTER, + [SPECIES_ARCEUS_FAIRY] = BACK_ANIM_GROW_STUTTER, + + // Gen 5 + [SPECIES_VICTINI] = BACK_ANIM_H_SHAKE, + [SPECIES_SNIVY] = BACK_ANIM_H_SLIDE, + [SPECIES_SERVINE] = BACK_ANIM_TRIANGLE_DOWN, + [SPECIES_SERPERIOR] = BACK_ANIM_V_STRETCH, + [SPECIES_TEPIG] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_PIGNITE] = BACK_ANIM_GROW_STUTTER, + [SPECIES_EMBOAR] = BACK_ANIM_SHAKE_GLOW_RED, + [SPECIES_OSHAWOTT] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_DEWOTT] = BACK_ANIM_CONCAVE_ARC_LARGE, + [SPECIES_SAMUROTT] = BACK_ANIM_SHAKE_GLOW_BLUE, + [SPECIES_PATRAT] = BACK_ANIM_H_SLIDE, + [SPECIES_WATCHOG] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_LILLIPUP] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_HERDIER] = BACK_ANIM_H_SHAKE, + [SPECIES_STOUTLAND] = BACK_ANIM_V_STRETCH, + [SPECIES_PURRLOIN] = BACK_ANIM_V_STRETCH, + [SPECIES_LIEPARD] = BACK_ANIM_H_STRETCH, + [SPECIES_PANSAGE] = BACK_ANIM_CONCAVE_ARC_LARGE, + [SPECIES_SIMISAGE] = BACK_ANIM_V_SHAKE_H_SLIDE, + [SPECIES_PANSEAR] = BACK_ANIM_CONCAVE_ARC_LARGE, + [SPECIES_SIMISEAR] = BACK_ANIM_V_SHAKE_H_SLIDE, + [SPECIES_PANPOUR] = BACK_ANIM_CONCAVE_ARC_LARGE, + [SPECIES_SIMIPOUR] = BACK_ANIM_V_SHAKE_H_SLIDE, + [SPECIES_MUNNA] = BACK_ANIM_SHRINK_GROW, + [SPECIES_MUSHARNA] = BACK_ANIM_GROW, + [SPECIES_PIDOVE] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_TRANQUILL] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_UNFEZANT] = BACK_ANIM_V_STRETCH, + [SPECIES_BLITZLE] = BACK_ANIM_DIP_RIGHT_SIDE, + [SPECIES_ZEBSTRIKA] = BACK_ANIM_SHAKE_FLASH_YELLOW, + [SPECIES_ROGGENROLA] = BACK_ANIM_V_SHAKE, + [SPECIES_BOLDORE] = BACK_ANIM_H_SHAKE, + [SPECIES_GIGALITH] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_WOOBAT] = BACK_ANIM_TRIANGLE_DOWN, + [SPECIES_SWOOBAT] = BACK_ANIM_V_STRETCH, + [SPECIES_DRILBUR] = BACK_ANIM_V_SHAKE, + [SPECIES_EXCADRILL] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_AUDINO] = BACK_ANIM_SHRINK_GROW, + [SPECIES_TIMBURR] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_GURDURR] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_CONKELDURR] = BACK_ANIM_V_SHAKE_H_SLIDE, + [SPECIES_TYMPOLE] = BACK_ANIM_H_SPRING, + [SPECIES_PALPITOAD] = BACK_ANIM_H_VIBRATE, + [SPECIES_SEISMITOAD] = BACK_ANIM_V_SHAKE_H_SLIDE, + [SPECIES_THROH] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_SAWK] = BACK_ANIM_H_STRETCH, + [SPECIES_SEWADDLE] = BACK_ANIM_H_SLIDE, + [SPECIES_SWADLOON] = BACK_ANIM_H_VIBRATE, + [SPECIES_LEAVANNY] = BACK_ANIM_GROW_STUTTER, + [SPECIES_VENIPEDE] = BACK_ANIM_H_VIBRATE, + [SPECIES_WHIRLIPEDE] = BACK_ANIM_DIP_RIGHT_SIDE, + [SPECIES_SCOLIPEDE] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_COTTONEE] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_WHIMSICOTT] = BACK_ANIM_CONCAVE_ARC_LARGE, + [SPECIES_PETILIL] = BACK_ANIM_V_STRETCH, + [SPECIES_LILLIGANT] = BACK_ANIM_SHRINK_GROW, + [SPECIES_BASCULIN] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_SANDILE] = BACK_ANIM_H_SLIDE, + [SPECIES_KROKOROK] = BACK_ANIM_V_STRETCH, + [SPECIES_KROOKODILE] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_DARUMAKA] = BACK_ANIM_CONCAVE_ARC_LARGE, + [SPECIES_DARMANITAN] = BACK_ANIM_V_SHAKE_H_SLIDE, + [SPECIES_MARACTUS] = BACK_ANIM_CONCAVE_ARC_LARGE, + [SPECIES_DWEBBLE] = BACK_ANIM_H_SLIDE, + [SPECIES_CRUSTLE] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_SCRAGGY] = BACK_ANIM_CONCAVE_ARC_LARGE, + [SPECIES_SCRAFTY] = BACK_ANIM_GROW, + [SPECIES_SIGILYPH] = BACK_ANIM_TRIANGLE_DOWN, + [SPECIES_YAMASK] = BACK_ANIM_V_SHAKE, + [SPECIES_COFAGRIGUS] = BACK_ANIM_V_SHAKE_H_SLIDE, + [SPECIES_TIRTOUGA] = BACK_ANIM_H_SLIDE, + [SPECIES_CARRACOSTA] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_ARCHEN] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_ARCHEOPS] = BACK_ANIM_V_STRETCH, + [SPECIES_TRUBBISH] = BACK_ANIM_SHRINK_GROW, + [SPECIES_GARBODOR] = BACK_ANIM_H_STRETCH, + [SPECIES_ZORUA] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_ZOROARK] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_MINCCINO] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_CINCCINO] = BACK_ANIM_CONCAVE_ARC_LARGE, + [SPECIES_GOTHITA] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_GOTHORITA] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_GOTHITELLE] = BACK_ANIM_H_STRETCH, + [SPECIES_SOLOSIS] = BACK_ANIM_SHRINK_GROW, + [SPECIES_DUOSION] = BACK_ANIM_GROW, + [SPECIES_REUNICLUS] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_DUCKLETT] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_SWANNA] = BACK_ANIM_H_STRETCH, + [SPECIES_VANILLITE] = BACK_ANIM_H_SLIDE, + [SPECIES_VANILLISH] = BACK_ANIM_H_SLIDE, + [SPECIES_VANILLUXE] = BACK_ANIM_H_SHAKE, + [SPECIES_DEERLING] = BACK_ANIM_H_SLIDE, + [SPECIES_SAWSBUCK] = BACK_ANIM_DIP_RIGHT_SIDE, + [SPECIES_EMOLGA] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_KARRABLAST] = BACK_ANIM_CONCAVE_ARC_LARGE, + [SPECIES_ESCAVALIER] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_FOONGUS] = BACK_ANIM_SHRINK_GROW, + [SPECIES_AMOONGUSS] = BACK_ANIM_GROW_STUTTER, + [SPECIES_FRILLISH] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_JELLICENT] = BACK_ANIM_GROW_STUTTER, + [SPECIES_ALOMOMOLA] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_JOLTIK] = BACK_ANIM_H_SLIDE, + [SPECIES_GALVANTULA] = BACK_ANIM_SHAKE_FLASH_YELLOW, + [SPECIES_FERROSEED] = BACK_ANIM_H_SHAKE, + [SPECIES_FERROTHORN] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_KLINK] = BACK_ANIM_TRIANGLE_DOWN, + [SPECIES_KLANG] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_KLINKLANG] = BACK_ANIM_CIRCLE_COUNTERCLOCKWISE, + [SPECIES_TYNAMO] = BACK_ANIM_H_SLIDE, + [SPECIES_EELEKTRIK] = BACK_ANIM_SHRINK_GROW, + [SPECIES_EELEKTROSS] = BACK_ANIM_SHAKE_FLASH_YELLOW, + [SPECIES_ELGYEM] = BACK_ANIM_SHRINK_GROW, + [SPECIES_BEHEEYEM] = BACK_ANIM_H_SHAKE, + [SPECIES_LITWICK] = BACK_ANIM_SHRINK_GROW, + [SPECIES_LAMPENT] = BACK_ANIM_TRIANGLE_DOWN, + [SPECIES_CHANDELURE] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_AXEW] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_FRAXURE] = BACK_ANIM_V_SHAKE_H_SLIDE, + [SPECIES_HAXORUS] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_CUBCHOO] = BACK_ANIM_H_SLIDE, + [SPECIES_BEARTIC] = BACK_ANIM_V_SHAKE_H_SLIDE, + [SPECIES_CRYOGONAL] = BACK_ANIM_H_VIBRATE, + [SPECIES_SHELMET] = BACK_ANIM_V_SHAKE, + [SPECIES_ACCELGOR] = BACK_ANIM_H_SPRING_REPEATED, + [SPECIES_STUNFISK] = BACK_ANIM_H_STRETCH, + [SPECIES_MIENFOO] = BACK_ANIM_CONCAVE_ARC_LARGE, + [SPECIES_MIENSHAO] = BACK_ANIM_V_STRETCH, + [SPECIES_DRUDDIGON] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_GOLETT] = BACK_ANIM_H_SLIDE, + [SPECIES_GOLURK] = BACK_ANIM_V_SHAKE, + [SPECIES_PAWNIARD] = BACK_ANIM_H_SLIDE, + [SPECIES_BISHARP] = BACK_ANIM_GROW_STUTTER, + [SPECIES_BOUFFALANT] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_RUFFLET] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_BRAVIARY] = BACK_ANIM_TRIANGLE_DOWN, + [SPECIES_VULLABY] = BACK_ANIM_DIP_RIGHT_SIDE, + [SPECIES_MANDIBUZZ] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_HEATMOR] = BACK_ANIM_DIP_RIGHT_SIDE, + [SPECIES_DURANT] = BACK_ANIM_H_VIBRATE, + [SPECIES_DEINO] = BACK_ANIM_H_SLIDE, + [SPECIES_ZWEILOUS] = BACK_ANIM_H_SHAKE, + [SPECIES_HYDREIGON] = BACK_ANIM_GROW_STUTTER, + [SPECIES_LARVESTA] = BACK_ANIM_H_SLIDE, + [SPECIES_VOLCARONA] = BACK_ANIM_SHAKE_GLOW_RED, + [SPECIES_COBALION] = BACK_ANIM_V_STRETCH, + [SPECIES_TERRAKION] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_VIRIZION] = BACK_ANIM_H_SHAKE, + [SPECIES_TORNADUS] = BACK_ANIM_V_SHAKE, + [SPECIES_THUNDURUS] = BACK_ANIM_V_SHAKE, + [SPECIES_RESHIRAM] = BACK_ANIM_SHAKE_GLOW_RED, + [SPECIES_ZEKROM] = BACK_ANIM_SHAKE_GLOW_BLUE, + [SPECIES_LANDORUS] = BACK_ANIM_V_SHAKE, + [SPECIES_KYUREM] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_KELDEO] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_MELOETTA] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_GENESECT] = BACK_ANIM_CIRCLE_COUNTERCLOCKWISE, + + //Gen 5 Forms + [SPECIES_BASCULIN_BLUE_STRIPED] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_DARMANITAN_ZEN_MODE] = BACK_ANIM_H_SHAKE, + [SPECIES_DEERLING_SUMMER] = BACK_ANIM_H_SLIDE, + [SPECIES_DEERLING_AUTUMN] = BACK_ANIM_H_SLIDE, + [SPECIES_DEERLING_WINTER] = BACK_ANIM_H_SLIDE, + [SPECIES_SAWSBUCK_SUMMER] = BACK_ANIM_DIP_RIGHT_SIDE, + [SPECIES_SAWSBUCK_AUTUMN] = BACK_ANIM_DIP_RIGHT_SIDE, + [SPECIES_SAWSBUCK_WINTER] = BACK_ANIM_DIP_RIGHT_SIDE, + [SPECIES_TORNADUS_THERIAN] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_THUNDURUS_THERIAN] = BACK_ANIM_SHAKE_FLASH_YELLOW, + [SPECIES_LANDORUS_THERIAN] = BACK_ANIM_GROW_STUTTER, + [SPECIES_KYUREM_WHITE] = BACK_ANIM_SHAKE_GLOW_RED, + [SPECIES_KYUREM_BLACK] = BACK_ANIM_SHAKE_GLOW_BLUE, + [SPECIES_KELDEO_RESOLUTE] = BACK_ANIM_GROW_STUTTER, + [SPECIES_MELOETTA_PIROUETTE] = BACK_ANIM_TRIANGLE_DOWN, + [SPECIES_GENESECT_DOUSE_DRIVE] = BACK_ANIM_CIRCLE_COUNTERCLOCKWISE, + [SPECIES_GENESECT_SHOCK_DRIVE] = BACK_ANIM_CIRCLE_COUNTERCLOCKWISE, + [SPECIES_GENESECT_BURN_DRIVE] = BACK_ANIM_CIRCLE_COUNTERCLOCKWISE, + [SPECIES_GENESECT_CHILL_DRIVE] = BACK_ANIM_CIRCLE_COUNTERCLOCKWISE, + + //Gen 6 + [SPECIES_CHESPIN] = BACK_ANIM_H_SLIDE, + [SPECIES_QUILLADIN] = BACK_ANIM_GROW, + [SPECIES_CHESNAUGHT] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_FENNEKIN] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_BRAIXEN] = BACK_ANIM_CONCAVE_ARC_LARGE, + [SPECIES_DELPHOX] = BACK_ANIM_GROW_STUTTER, + [SPECIES_FROAKIE] = BACK_ANIM_SHRINK_GROW, + [SPECIES_FROGADIER] = BACK_ANIM_GROW_STUTTER, + [SPECIES_GRENINJA] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_BUNNELBY] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_DIGGERSBY] = BACK_ANIM_V_SHAKE_H_SLIDE, + [SPECIES_FLETCHLING] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_FLETCHINDER] = BACK_ANIM_TRIANGLE_DOWN, + [SPECIES_TALONFLAME] = BACK_ANIM_SHAKE_GLOW_RED, + [SPECIES_SCATTERBUG] = BACK_ANIM_H_SLIDE, + [SPECIES_SPEWPA] = BACK_ANIM_H_VIBRATE, + [SPECIES_VIVILLON] = BACK_ANIM_CIRCLE_COUNTERCLOCKWISE, + [SPECIES_LITLEO] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_PYROAR] = BACK_ANIM_H_STRETCH, + [SPECIES_FLABEBE] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_FLOETTE] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_FLORGES] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_SKIDDO] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_GOGOAT] = BACK_ANIM_DIP_RIGHT_SIDE, + [SPECIES_PANCHAM] = BACK_ANIM_CIRCLE_COUNTERCLOCKWISE, + [SPECIES_PANGORO] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_FURFROU] = BACK_ANIM_V_STRETCH, + [SPECIES_ESPURR] = BACK_ANIM_H_SLIDE, + [SPECIES_MEOWSTIC] = BACK_ANIM_CONCAVE_ARC_LARGE, + [SPECIES_HONEDGE] = BACK_ANIM_V_SHAKE, + [SPECIES_DOUBLADE] = BACK_ANIM_H_SHAKE, + [SPECIES_AEGISLASH] = BACK_ANIM_H_VIBRATE, + [SPECIES_SPRITZEE] = BACK_ANIM_TRIANGLE_DOWN, + [SPECIES_AROMATISSE] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_SWIRLIX] = BACK_ANIM_H_SPRING, + [SPECIES_SLURPUFF] = BACK_ANIM_V_SHAKE_H_SLIDE, + [SPECIES_INKAY] = BACK_ANIM_SHRINK_GROW, + [SPECIES_MALAMAR] = BACK_ANIM_V_STRETCH, + [SPECIES_BINACLE] = BACK_ANIM_H_SLIDE, + [SPECIES_BARBARACLE] = BACK_ANIM_V_SHAKE_H_SLIDE, + [SPECIES_SKRELP] = BACK_ANIM_V_STRETCH, + [SPECIES_DRAGALGE] = BACK_ANIM_H_STRETCH, + [SPECIES_CLAUNCHER] = BACK_ANIM_H_SLIDE, + [SPECIES_CLAWITZER] = BACK_ANIM_V_SHAKE, + [SPECIES_HELIOPTILE] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_HELIOLISK] = BACK_ANIM_SHAKE_FLASH_YELLOW, + [SPECIES_TYRUNT] = BACK_ANIM_H_SHAKE, + [SPECIES_TYRANTRUM] = BACK_ANIM_V_SHAKE_H_SLIDE, + [SPECIES_AMAURA] = BACK_ANIM_H_SLIDE, + [SPECIES_AURORUS] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_SYLVEON] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_HAWLUCHA] = BACK_ANIM_GROW_STUTTER, + [SPECIES_DEDENNE] = BACK_ANIM_SHAKE_FLASH_YELLOW, + [SPECIES_CARBINK] = BACK_ANIM_H_VIBRATE, + [SPECIES_GOOMY] = BACK_ANIM_H_SPRING, + [SPECIES_SLIGGOO] = BACK_ANIM_SHRINK_GROW, + [SPECIES_GOODRA] = BACK_ANIM_SHRINK_GROW, + [SPECIES_KLEFKI] = BACK_ANIM_TRIANGLE_DOWN, + [SPECIES_PHANTUMP] = BACK_ANIM_CIRCLE_COUNTERCLOCKWISE, + [SPECIES_TREVENANT] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_PUMPKABOO] = BACK_ANIM_TRIANGLE_DOWN, + [SPECIES_GOURGEIST] = BACK_ANIM_V_STRETCH, + [SPECIES_BERGMITE] = BACK_ANIM_H_SHAKE, + [SPECIES_AVALUGG] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_NOIBAT] = BACK_ANIM_TRIANGLE_DOWN, + [SPECIES_NOIVERN] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_XERNEAS] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_YVELTAL] = BACK_ANIM_SHAKE_GLOW_RED, + [SPECIES_ZYGARDE] = BACK_ANIM_V_STRETCH, + [SPECIES_DIANCIE] = BACK_ANIM_CIRCLE_COUNTERCLOCKWISE, + [SPECIES_HOOPA] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_VOLCANION] = BACK_ANIM_SHAKE_GLOW_RED, + + //Gen 6 Forms + [SPECIES_GRENINJA_ASH] = BACK_ANIM_SHAKE_GLOW_BLUE, + [SPECIES_GRENINJA_BATTLE_BOND] = BACK_ANIM_V_STRETCH, + [SPECIES_VIVILLON_POLAR] = BACK_ANIM_CIRCLE_COUNTERCLOCKWISE, + [SPECIES_VIVILLON_TUNDRA] = BACK_ANIM_CIRCLE_COUNTERCLOCKWISE, + [SPECIES_VIVILLON_CONTINENTAL] = BACK_ANIM_CIRCLE_COUNTERCLOCKWISE, + [SPECIES_VIVILLON_GARDEN] = BACK_ANIM_CIRCLE_COUNTERCLOCKWISE, + [SPECIES_VIVILLON_ELEGANT] = BACK_ANIM_CIRCLE_COUNTERCLOCKWISE, + [SPECIES_VIVILLON_MEADOW] = BACK_ANIM_CIRCLE_COUNTERCLOCKWISE, + [SPECIES_VIVILLON_MODERN] = BACK_ANIM_CIRCLE_COUNTERCLOCKWISE, + [SPECIES_VIVILLON_MARINE] = BACK_ANIM_CIRCLE_COUNTERCLOCKWISE, + [SPECIES_VIVILLON_ARCHIPELAGO] = BACK_ANIM_CIRCLE_COUNTERCLOCKWISE, + [SPECIES_VIVILLON_HIGH_PLAINS] = BACK_ANIM_CIRCLE_COUNTERCLOCKWISE, + [SPECIES_VIVILLON_SANDSTORM] = BACK_ANIM_CIRCLE_COUNTERCLOCKWISE, + [SPECIES_VIVILLON_RIVER] = BACK_ANIM_CIRCLE_COUNTERCLOCKWISE, + [SPECIES_VIVILLON_MONSOON] = BACK_ANIM_CIRCLE_COUNTERCLOCKWISE, + [SPECIES_VIVILLON_SAVANNA] = BACK_ANIM_CIRCLE_COUNTERCLOCKWISE, + [SPECIES_VIVILLON_SUN] = BACK_ANIM_CIRCLE_COUNTERCLOCKWISE, + [SPECIES_VIVILLON_OCEAN] = BACK_ANIM_CIRCLE_COUNTERCLOCKWISE, + [SPECIES_VIVILLON_JUNGLE] = BACK_ANIM_CIRCLE_COUNTERCLOCKWISE, + [SPECIES_VIVILLON_FANCY] = BACK_ANIM_CIRCLE_COUNTERCLOCKWISE, + [SPECIES_VIVILLON_POKE_BALL] = BACK_ANIM_CIRCLE_COUNTERCLOCKWISE, + [SPECIES_FLABEBE_YELLOW_FLOWER] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_FLABEBE_ORANGE_FLOWER] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_FLABEBE_BLUE_FLOWER] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_FLABEBE_WHITE_FLOWER] = BACK_ANIM_CONCAVE_ARC_SMALL, + [SPECIES_FLOETTE_YELLOW_FLOWER] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_FLOETTE_ORANGE_FLOWER] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_FLOETTE_BLUE_FLOWER] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_FLOETTE_WHITE_FLOWER] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_FLOETTE_ETERNAL_FLOWER] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_FLORGES_YELLOW_FLOWER] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_FLORGES_ORANGE_FLOWER] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_FLORGES_BLUE_FLOWER] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_FLORGES_WHITE_FLOWER] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_FURFROU_HEART_TRIM] = BACK_ANIM_V_STRETCH, + [SPECIES_FURFROU_STAR_TRIM] = BACK_ANIM_V_STRETCH, + [SPECIES_FURFROU_DIAMOND_TRIM] = BACK_ANIM_V_STRETCH, + [SPECIES_FURFROU_DEBUTANTE_TRIM] = BACK_ANIM_V_STRETCH, + [SPECIES_FURFROU_MATRON_TRIM] = BACK_ANIM_V_STRETCH, + [SPECIES_FURFROU_DANDY_TRIM] = BACK_ANIM_V_STRETCH, + [SPECIES_FURFROU_LA_REINE_TRIM] = BACK_ANIM_V_STRETCH, + [SPECIES_FURFROU_KABUKI_TRIM] = BACK_ANIM_V_STRETCH, + [SPECIES_FURFROU_PHARAOH_TRIM] = BACK_ANIM_V_STRETCH, + [SPECIES_MEOWSTIC_FEMALE] = BACK_ANIM_CONCAVE_ARC_LARGE, + [SPECIES_AEGISLASH_BLADE] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_PUMPKABOO_SMALL] = BACK_ANIM_TRIANGLE_DOWN, + [SPECIES_PUMPKABOO_LARGE] = BACK_ANIM_TRIANGLE_DOWN, + [SPECIES_PUMPKABOO_SUPER] = BACK_ANIM_TRIANGLE_DOWN, + [SPECIES_GOURGEIST_SMALL] = BACK_ANIM_V_STRETCH, + [SPECIES_GOURGEIST_LARGE] = BACK_ANIM_V_STRETCH, + [SPECIES_GOURGEIST_SUPER] = BACK_ANIM_V_STRETCH, + [SPECIES_XERNEAS_ACTIVE] = BACK_ANIM_SHAKE_GLOW_BLUE, + [SPECIES_ZYGARDE_10] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_ZYGARDE_10_POWER_CONSTRUCT] = BACK_ANIM_SHAKE_GLOW_GREEN, + [SPECIES_ZYGARDE_50_POWER_CONSTRUCT] = BACK_ANIM_SHAKE_GLOW_GREEN, + [SPECIES_ZYGARDE_COMPLETE] = BACK_ANIM_SHAKE_GLOW_GREEN, + [SPECIES_HOOPA_UNBOUND] = BACK_ANIM_V_SHAKE_LOW, + + //Gen 6 Megas (Thanks Furret/CyanSMP64!) + [SPECIES_VENUSAUR_MEGA] = BACK_ANIM_SHAKE_GLOW_GREEN, + [SPECIES_CHARIZARD_MEGA_X] = BACK_ANIM_SHAKE_GLOW_BLUE, + [SPECIES_CHARIZARD_MEGA_Y] = BACK_ANIM_SHAKE_GLOW_RED, + [SPECIES_BLASTOISE_MEGA] = BACK_ANIM_SHAKE_GLOW_BLUE, + [SPECIES_BEEDRILL_MEGA] = BACK_ANIM_H_VIBRATE, + [SPECIES_PIDGEOT_MEGA] = BACK_ANIM_TRIANGLE_DOWN, + [SPECIES_ALAKAZAM_MEGA] = BACK_ANIM_GROW_STUTTER, + [SPECIES_SLOWBRO_MEGA] = BACK_ANIM_DIP_RIGHT_SIDE, + [SPECIES_GENGAR_MEGA] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_KANGASKHAN_MEGA] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_PINSIR_MEGA] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_GYARADOS_MEGA] = BACK_ANIM_V_SHAKE, + [SPECIES_AERODACTYL_MEGA] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_MEWTWO_MEGA_X] = BACK_ANIM_GROW_STUTTER, + [SPECIES_MEWTWO_MEGA_Y] = BACK_ANIM_GROW_STUTTER, + [SPECIES_AMPHAROS_MEGA] = BACK_ANIM_SHAKE_FLASH_YELLOW, + [SPECIES_STEELIX_MEGA] = BACK_ANIM_V_SHAKE, + [SPECIES_SCIZOR_MEGA] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_HERACROSS_MEGA] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_HOUNDOOM_MEGA] = BACK_ANIM_V_SHAKE, + [SPECIES_TYRANITAR_MEGA] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_SCEPTILE_MEGA] = BACK_ANIM_V_SHAKE, + [SPECIES_BLAZIKEN_MEGA] = BACK_ANIM_SHAKE_GLOW_RED, + [SPECIES_SWAMPERT_MEGA] = BACK_ANIM_SHAKE_GLOW_BLUE, + [SPECIES_GARDEVOIR_MEGA] = BACK_ANIM_SHAKE_GLOW_GREEN, + [SPECIES_SABLEYE_MEGA] = BACK_ANIM_H_VIBRATE, + [SPECIES_MAWILE_MEGA] = BACK_ANIM_V_SHAKE, + [SPECIES_AGGRON_MEGA] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_MEDICHAM_MEGA] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_MANECTRIC_MEGA] = BACK_ANIM_SHAKE_FLASH_YELLOW, + [SPECIES_SHARPEDO_MEGA] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_CAMERUPT_MEGA] = BACK_ANIM_SHAKE_GLOW_RED, + [SPECIES_ALTARIA_MEGA] = BACK_ANIM_CONVEX_DOUBLE_ARC, + [SPECIES_BANETTE_MEGA] = BACK_ANIM_H_VIBRATE, + [SPECIES_ABSOL_MEGA] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_GLALIE_MEGA] = BACK_ANIM_TRIANGLE_DOWN, + [SPECIES_SALAMENCE_MEGA] = BACK_ANIM_H_SHAKE, + [SPECIES_METAGROSS_MEGA] = BACK_ANIM_V_SHAKE, + [SPECIES_LATIAS_MEGA] = BACK_ANIM_H_VIBRATE, + [SPECIES_LATIOS_MEGA] = BACK_ANIM_H_VIBRATE, + [SPECIES_LOPUNNY_MEGA] = BACK_ANIM_CONCAVE_ARC_LARGE, + [SPECIES_GARCHOMP_MEGA] = BACK_ANIM_JOLT_RIGHT, + [SPECIES_LUCARIO_MEGA] = BACK_ANIM_CONCAVE_ARC_LARGE, + [SPECIES_ABOMASNOW_MEGA] = BACK_ANIM_V_SHAKE_LOW, + [SPECIES_GALLADE_MEGA] = BACK_ANIM_SHRINK_GROW_VIBRATE, + [SPECIES_RAYQUAZA_MEGA] = BACK_ANIM_SHAKE_GLOW_GREEN, + [SPECIES_KYOGRE_PRIMAL] = BACK_ANIM_SHAKE_GLOW_BLUE, + [SPECIES_GROUDON_PRIMAL] = BACK_ANIM_SHAKE_GLOW_RED, + }; // Equivalent to struct YellowFlashData, but doesn't match as a struct From f979013b7e92b6cbdbed7eef240d470af055fe19 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada D'Ottone Date: Sun, 21 May 2023 16:57:43 -0400 Subject: [PATCH 407/428] Disable Gen8+ Obedience Mechanics by default (#2980) --- include/config/battle.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/config/battle.h b/include/config/battle.h index 4a1bbdc2f9c2..20cb7eb81bfd 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -197,7 +197,7 @@ #define B_WILD_NATURAL_ENEMIES TRUE // If set to TRUE, certain wild mon species will attack other species when partnered in double wild battles (eg. Zangoose vs Seviper) #define B_AFFECTION_MECHANICS FALSE // In Gen6+, there's a stat called affection that can trigger different effects in battle. From LGPE onwards, those effects use friendship instead. #define B_TRAINER_CLASS_POKE_BALLS GEN_LATEST // In Gen7+, trainers will use certain types of Poké Balls depending on their trainer class. -#define B_OBEDIENCE_MECHANICS GEN_LATEST // In PLA+ (here Gen8+), obedience restrictions also apply to non-outsider Pokémon, albeit based on their level met rather than actual level +#define B_OBEDIENCE_MECHANICS GEN_7 // In PLA+ (here Gen8+), obedience restrictions also apply to non-outsider Pokémon, albeit based on their level met rather than actual level #define B_USE_FROSTBITE FALSE // In PLA, Frostbite replaces Freeze. Enabling this flag does the same here. Moves can still be cherry-picked to either Freeze or Frostbite. Freeze-Dry, Secret Power & Tri Attack depend on this config. // Animation Settings From 2abf1c56f91c3abba672857bbc004930a0540ded Mon Sep 17 00:00:00 2001 From: Alex Date: Fri, 12 May 2023 23:23:52 +0200 Subject: [PATCH 408/428] Use AI_PARTY->mons in SetBattlerData Use gBattlerPartyIndexes --- src/battle_ai_util.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index e187a06a9847..54bbf0bd7aa0 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -590,7 +590,8 @@ void SetBattlerData(u8 battlerId) { if (!BattlerHasAi(battlerId)) { - u32 i, species, illusionSpecies; + u32 i, species, illusionSpecies, side; + side = GetBattlerSide(battlerId); // Simulate Illusion species = gBattleMons[battlerId].species; @@ -608,22 +609,22 @@ void SetBattlerData(u8 battlerId) } // Use the known battler's ability. - if (BATTLE_HISTORY->abilities[battlerId] != ABILITY_NONE) - gBattleMons[battlerId].ability = BATTLE_HISTORY->abilities[battlerId]; + if (AI_PARTY->mons[side][gBattlerPartyIndexes[battlerId]].ability != ABILITY_NONE) + gBattleMons[battlerId].ability = AI_PARTY->mons[side][gBattlerPartyIndexes[battlerId]].ability; // Check if mon can only have one ability. else if (gSpeciesInfo[species].abilities[1] == ABILITY_NONE - || gSpeciesInfo[species].abilities[1] == gSpeciesInfo[species].abilities[0]) + || gSpeciesInfo[species].abilities[1] == gSpeciesInfo[species].abilities[0]) gBattleMons[battlerId].ability = gSpeciesInfo[species].abilities[0]; // The ability is unknown. else gBattleMons[battlerId].ability = ABILITY_NONE; - if (BATTLE_HISTORY->itemEffects[battlerId] == 0) + if (AI_PARTY->mons[side][gBattlerPartyIndexes[battlerId]].heldEffect == 0) gBattleMons[battlerId].item = 0; - for (i = 0; i < 4; i++) + for (i = 0; i < MAX_MON_MOVES; i++) { - if (BATTLE_HISTORY->usedMoves[battlerId][i] == 0) + if (AI_PARTY->mons[side][gBattlerPartyIndexes[battlerId]].moves[i] == 0) gBattleMons[battlerId].moves[i] = 0; } } From d4c7e5e5595d85f25f4ab078d64dd3a02dce49e1 Mon Sep 17 00:00:00 2001 From: AgustinGDLV Date: Tue, 23 May 2023 14:03:38 -0700 Subject: [PATCH 409/428] changed B_WEATHER_FORM preproc to affect tables instead of function --- include/config/battle.h | 1 - src/battle_script_commands.c | 2 -- src/battle_util.c | 2 +- src/data/pokemon/form_change_tables.h | 8 ++++++++ 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/include/config/battle.h b/include/config/battle.h index d0b5366ecdcb..4a1bbdc2f9c2 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -101,7 +101,6 @@ #define B_STOCKPILE_RAISES_DEFS GEN_LATEST // In Gen4+, Stockpile also raises Defense and Sp. Defense stats. Once Spit Up / Swallow is used, these stat changes are lost. #define B_TRANSFORM_SHINY GEN_LATEST // In Gen4+, Transform will copy the shiny state of the opponent instead of maintaining its own shiny state. #define B_TRANSFORM_FORM_CHANGES GEN_LATEST // In Gen5+, Transformed Pokemon cannot change forms. -#define B_WEATHER_FORM_SUPPRESS GEN_LATEST // In Gen5+, Cherrim and Castform revert to their normal forms upon losing their ability. // Ability settings #define B_EXPANDED_ABILITY_NAMES TRUE // If TRUE, ability names are increased from 12 characters to 16 characters. diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index c85446a3432b..47a98ac9e320 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -16605,7 +16605,6 @@ void BS_ItemRestorePP(void) void BS_TryRevertWeatherForm(void) { NATIVE_ARGS(); -#if B_WEATHER_FORM_SUPPRESS >= GEN_5 if (TryBattleFormChange(gBattlerTarget, FORM_CHANGE_BATTLE_WEATHER)) { gBattleScripting.battler = gBattlerTarget; @@ -16613,7 +16612,6 @@ void BS_TryRevertWeatherForm(void) gBattlescriptCurrInstr = BattleScript_TargetFormChangeWithStringNoPopup; return; } -#endif gBattlescriptCurrInstr = cmd->nextInstr; } diff --git a/src/battle_util.c b/src/battle_util.c index 3f0e101f08fe..7c0d3f8cc817 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -10167,7 +10167,7 @@ u16 GetBattleFormChangeTargetSpecies(u8 battlerId, u16 method) targetSpecies = formChanges[i].targetSpecies; } // We need to revert the weather form if the field is under Air Lock, too. - if (!WEATHER_HAS_EFFECT && formChanges[i].param1 == B_WEATHER_NONE) + else if (!WEATHER_HAS_EFFECT && formChanges[i].param1 == B_WEATHER_NONE) { targetSpecies = formChanges[i].targetSpecies; } diff --git a/src/data/pokemon/form_change_tables.h b/src/data/pokemon/form_change_tables.h index 6919ca05db38..ca2006157809 100644 --- a/src/data/pokemon/form_change_tables.h +++ b/src/data/pokemon/form_change_tables.h @@ -156,11 +156,19 @@ static const struct FormChange sAbsolFormChangeTable[] = { }; static const struct FormChange sCastformFormChangeTable[] = { +#ifdef B_WEATHER_FORMS >= GEN_5 {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CASTFORM_SUNNY, B_WEATHER_SUN, ABILITY_FORECAST}, {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CASTFORM_RAINY, B_WEATHER_RAIN, ABILITY_FORECAST}, {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CASTFORM_SNOWY, B_WEATHER_HAIL | B_WEATHER_SNOW, ABILITY_FORECAST}, {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CASTFORM, ~(B_WEATHER_SUN | B_WEATHER_RAIN | B_WEATHER_HAIL | B_WEATHER_SNOW), ABILITY_FORECAST}, {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CASTFORM, B_WEATHER_NONE, ABILITY_FORECAST}, +#else + {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CASTFORM_SUNNY, B_WEATHER_SUN}, + {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CASTFORM_RAINY, B_WEATHER_RAIN}, + {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CASTFORM_SNOWY, B_WEATHER_HAIL | B_WEATHER_SNOW}, + {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CASTFORM, ~(B_WEATHER_SUN | B_WEATHER_RAIN | B_WEATHER_HAIL | B_WEATHER_SNOW)}, + {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CASTFORM, B_WEATHER_NONE}, +#endif {FORM_CHANGE_BATTLE_SWITCH, SPECIES_CASTFORM}, {FORM_CHANGE_FAINT, SPECIES_CASTFORM}, {FORM_CHANGE_END_BATTLE, SPECIES_CASTFORM}, From 34382fcece5714f04bdb68489c0f76d25c89f1ab Mon Sep 17 00:00:00 2001 From: AgustinGDLV Date: Tue, 23 May 2023 14:19:24 -0700 Subject: [PATCH 410/428] fixed revive in 1v2 battles --- data/battle_scripts_2.s | 4 ++-- data/scripts/debug.inc | 6 ++++++ src/battle_script_commands.c | 13 +++++++++---- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/data/battle_scripts_2.s b/data/battle_scripts_2.s index 8d0813527561..0c6c133b50e4 100644 --- a/data/battle_scripts_2.s +++ b/data/battle_scripts_2.s @@ -59,9 +59,9 @@ BattleScript_ItemRestoreHP:: end BattleScript_ItemRestoreHP_SendOutRevivedBattler: - switchinanim BS_ATTACKER, FALSE + switchinanim BS_SCRIPTING, FALSE waitstate - switchineffects BS_ATTACKER + switchineffects BS_SCRIPTING end BattleScript_ItemCureStatus:: diff --git a/data/scripts/debug.inc b/data/scripts/debug.inc index f86de38f5b55..f9ac3ac2389b 100644 --- a/data/scripts/debug.inc +++ b/data/scripts/debug.inc @@ -68,6 +68,12 @@ Debug_FlagsNotSetBattleConfigMessage_Text: .string "'include/config/battle.h'!$" Debug_Script_1:: + givemon SPECIES_TREECKO, 20, ITEM_NONE + givemon SPECIES_TORCHIC, 20, ITEM_NONE + giveitem ITEM_REVIVE, 3 + giveitem ITEM_HYPER_POTION, 3 + setwildbattle SPECIES_UNOWN, 20, 0, SPECIES_UNOWN, 20, 0 + dowildbattle end Debug_Script_2:: diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 2450e5079aff..9cf0eb11d513 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -16444,7 +16444,8 @@ u8 GetFirstFaintedPartyIndex(u8 battlerId) return PARTY_SIZE; } -void BS_ItemRestoreHP(void) { +void BS_ItemRestoreHP(void) +{ NATIVE_ARGS(); u16 healAmount; u32 battlerId = MAX_BATTLERS_COUNT; @@ -16499,6 +16500,7 @@ void BS_ItemRestoreHP(void) { if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && battlerId != MAX_BATTLERS_COUNT) { gAbsentBattlerFlags &= ~gBitTable[battlerId]; + gBattleScripting.battler = battlerId; gBattleCommunication[MULTIUSE_STATE] = TRUE; } } @@ -16506,7 +16508,8 @@ void BS_ItemRestoreHP(void) { gBattlescriptCurrInstr = cmd->nextInstr; } -void BS_ItemCureStatus(void) { +void BS_ItemCureStatus(void) +{ NATIVE_ARGS(); struct Pokemon *party = GetBattlerParty(gBattlerAttacker); @@ -16534,7 +16537,8 @@ void BS_ItemCureStatus(void) { gBattlescriptCurrInstr = cmd->nextInstr; } -void BS_ItemIncreaseStat(void) { +void BS_ItemIncreaseStat(void) +{ NATIVE_ARGS(); u16 statId = GetItemEffect(gLastUsedItem)[1]; u16 stages = ItemId_GetHoldEffectParam(gLastUsedItem); @@ -16542,7 +16546,8 @@ void BS_ItemIncreaseStat(void) { gBattlescriptCurrInstr = cmd->nextInstr; } -void BS_ItemRestorePP(void) { +void BS_ItemRestorePP(void) +{ NATIVE_ARGS(); const u8 *effect = GetItemEffect(gLastUsedItem); u32 i, pp, maxPP, moveId, loopEnd; From a9a32651acf4d6531b5752b8a776d9affa001f59 Mon Sep 17 00:00:00 2001 From: AgustinGDLV Date: Tue, 23 May 2023 15:41:25 -0700 Subject: [PATCH 411/428] fixed player not being able to cancel partner action after item --- src/battle_controller_player.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index b9eb566c021e..c88dbff78f07 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -312,13 +312,10 @@ static void HandleInputChooseAction(void) && !(gAbsentBattlerFlags & gBitTable[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)]) && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) { + // Return item to bag if partner had selected one. if (gBattleResources->bufferA[gActiveBattler][1] == B_ACTION_USE_ITEM) { - // Add item to bag if it is a ball - if (itemId <= LAST_BALL) - AddBagItem(itemId, 1); - else - return; + AddBagItem(itemId, 1); } PlaySE(SE_SELECT); BtlController_EmitTwoReturnValues(BUFFER_B, B_ACTION_CANCEL_PARTNER, 0); From bb10b0d1b053425d2fc53c29cb94179d1820ffbf Mon Sep 17 00:00:00 2001 From: AgustinGDLV Date: Tue, 23 May 2023 15:50:51 -0700 Subject: [PATCH 412/428] fixed GetBattlerSide, removed debug script --- data/scripts/debug.inc | 6 ------ src/battle_script_commands.c | 2 +- 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/data/scripts/debug.inc b/data/scripts/debug.inc index f9ac3ac2389b..f86de38f5b55 100644 --- a/data/scripts/debug.inc +++ b/data/scripts/debug.inc @@ -68,12 +68,6 @@ Debug_FlagsNotSetBattleConfigMessage_Text: .string "'include/config/battle.h'!$" Debug_Script_1:: - givemon SPECIES_TREECKO, 20, ITEM_NONE - givemon SPECIES_TORCHIC, 20, ITEM_NONE - giveitem ITEM_REVIVE, 3 - giveitem ITEM_HYPER_POTION, 3 - setwildbattle SPECIES_UNOWN, 20, 0, SPECIES_UNOWN, 20, 0 - dowildbattle end Debug_Script_2:: diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 9cf0eb11d513..9970f1d130c2 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -16324,7 +16324,7 @@ void BS_CheckParentalBondCounter(void) void BS_GetBattlerSide(void) { NATIVE_ARGS(u8 battler); - gBattleCommunication[0] = GetBattlerSide(cmd->battler); + gBattleCommunication[0] = GetBattlerSide(GetBattlerForBattleScript(cmd->battler)); gBattlescriptCurrInstr = cmd->nextInstr; } From 6a92caa9fbfa3bf08c385000cb2d0187a6b7bef6 Mon Sep 17 00:00:00 2001 From: AgustinGDLV Date: Tue, 23 May 2023 16:10:26 -0700 Subject: [PATCH 413/428] removed old B_WEATHER_FORMS use, tests now have assumptions for config --- src/battle_util.c | 10 ---------- src/data/pokemon/form_change_tables.h | 8 +++++++- test/ability_flower_gift.c | 1 + test/ability_forecast.c | 1 + 4 files changed, 9 insertions(+), 11 deletions(-) diff --git a/src/battle_util.c b/src/battle_util.c index 7c0d3f8cc817..fec8d013d717 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -4759,12 +4759,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move effect++; } break; -#if B_WEATHER_FORMS < GEN_5 - default: - if (gBattleMons[battler].species == SPECIES_CHERRIM) - goto TRY_WEATHER_FORM; - break; -#endif } break; case ABILITYEFFECT_ENDTURN: // 1 @@ -6037,11 +6031,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move switch (gLastUsedAbility) { case ABILITY_FORECAST: -#if B_WEATHER_FORMS >= GEN_5 case ABILITY_FLOWER_GIFT: -#else - TRY_WEATHER_FORM: -#endif if ((IsBattlerWeatherAffected(battler, gBattleWeather) || gBattleWeather == B_WEATHER_NONE || !WEATHER_HAS_EFFECT) // Air Lock active diff --git a/src/data/pokemon/form_change_tables.h b/src/data/pokemon/form_change_tables.h index ca2006157809..1d9b0e8dc9c8 100644 --- a/src/data/pokemon/form_change_tables.h +++ b/src/data/pokemon/form_change_tables.h @@ -156,7 +156,7 @@ static const struct FormChange sAbsolFormChangeTable[] = { }; static const struct FormChange sCastformFormChangeTable[] = { -#ifdef B_WEATHER_FORMS >= GEN_5 +#if B_WEATHER_FORMS >= GEN_5 {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CASTFORM_SUNNY, B_WEATHER_SUN, ABILITY_FORECAST}, {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CASTFORM_RAINY, B_WEATHER_RAIN, ABILITY_FORECAST}, {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CASTFORM_SNOWY, B_WEATHER_HAIL | B_WEATHER_SNOW, ABILITY_FORECAST}, @@ -239,9 +239,15 @@ static const struct FormChange sBurmyFormChangeTable[] = { }; static const struct FormChange sCherrimFormChangeTable[] = { +#if B_WEATHER_FORMS >= GEN_5 {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CHERRIM_SUNSHINE, B_WEATHER_SUN, ABILITY_FLOWER_GIFT}, {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CHERRIM, ~B_WEATHER_SUN, ABILITY_FLOWER_GIFT}, {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CHERRIM, B_WEATHER_NONE, ABILITY_FLOWER_GIFT}, +#else + {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CHERRIM_SUNSHINE, B_WEATHER_SUN}, + {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CHERRIM, ~B_WEATHER_SUN}, + {FORM_CHANGE_BATTLE_WEATHER, SPECIES_CHERRIM, B_WEATHER_NONE}, +#endif {FORM_CHANGE_BATTLE_SWITCH, SPECIES_CHERRIM}, {FORM_CHANGE_FAINT, SPECIES_CHERRIM}, {FORM_CHANGE_END_BATTLE, SPECIES_CHERRIM}, diff --git a/test/ability_flower_gift.c b/test/ability_flower_gift.c index 1967b874d698..dd01736a2428 100644 --- a/test/ability_flower_gift.c +++ b/test/ability_flower_gift.c @@ -38,6 +38,7 @@ SINGLE_BATTLE_TEST("Flower Gift transforms Cherrim back to normal when weather c SINGLE_BATTLE_TEST("Flower Gift transforms Cherrim back to normal when its ability is suppressed") { GIVEN { + ASSUME(B_WEATHER_FORMS >= GEN_5); PLAYER(SPECIES_CHERRIM) { Ability(ABILITY_FLOWER_GIFT); }; OPPONENT(SPECIES_WOBBUFFET); } WHEN { diff --git a/test/ability_forecast.c b/test/ability_forecast.c index 826ba0e99b88..96559706acc8 100644 --- a/test/ability_forecast.c +++ b/test/ability_forecast.c @@ -237,6 +237,7 @@ SINGLE_BATTLE_TEST("Forecast transforms Castform when weather changes") SINGLE_BATTLE_TEST("Forecast transforms Castform back to normal when its ability is suppressed") { GIVEN { + ASSUME(B_WEATHER_FORMS >= GEN_5); PLAYER(SPECIES_CASTFORM) { Ability(ABILITY_FORECAST); }; OPPONENT(SPECIES_WOBBUFFET); } WHEN { From 84d9cd03964641c11d908bc854cd4543c18ecc53 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada D'Ottone Date: Wed, 24 May 2023 08:24:44 -0400 Subject: [PATCH 414/428] Fixed compile issue when disabling overworld debug menu (#3024) --- data/scripts/debug.inc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/data/scripts/debug.inc b/data/scripts/debug.inc index f86de38f5b55..f9ec4eeffdfc 100644 --- a/data/scripts/debug.inc +++ b/data/scripts/debug.inc @@ -1,3 +1,5 @@ +.if DEBUG_OVERWORLD_MENU == TRUE + Debug_ShowFieldMessageStringVar4:: special ShowFieldMessageStringVar4 waitmessage @@ -109,3 +111,5 @@ Debug_SaveBlock2Size:: Debug_PokemonStorageSize:: .string "{PKMN}Storage size: {STR_VAR_1}/{STR_VAR_2}.$" + +.endif From de2d86408fa92d4cc9b73935935135c3c75ead0d Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Wed, 24 May 2023 09:08:05 -0400 Subject: [PATCH 415/428] Fixed Mimikyu's Disguise not breaking --- src/battle_script_commands.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index dd27429ec9db..c9d6ff988b68 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -2513,6 +2513,7 @@ static void Cmd_datahpupdate(void) gBattleMons[gActiveBattler].species = SPECIES_MIMIKYU_BUSTED; BattleScriptPush(cmd->nextInstr); gBattlescriptCurrInstr = BattleScript_TargetFormChange; + return; } else { From 14f7e49099b18fd6c5aa185781ba84925f3254a2 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Tue, 23 May 2023 13:16:18 -0400 Subject: [PATCH 416/428] Add some missing palette macro use --- gflib/sprite.c | 2 +- include/gba/defines.h | 12 +++--- include/palette.h | 3 +- src/battle_anim.c | 16 +------ src/battle_anim_effects_1.c | 6 +-- src/battle_anim_effects_2.c | 2 +- src/battle_anim_effects_3.c | 18 ++++---- src/battle_anim_flying.c | 8 ++-- src/battle_anim_ghost.c | 2 +- src/battle_anim_mons.c | 9 ++-- src/battle_anim_psychic.c | 2 +- src/battle_anim_status_effects.c | 8 ++-- src/battle_anim_utility_funcs.c | 8 ++-- src/battle_anim_water.c | 8 ++-- src/battle_bg.c | 3 +- src/battle_factory_screen.c | 18 ++++---- src/battle_gfx_sfx_util.c | 8 ++-- src/battle_interface.c | 2 +- src/battle_message.c | 8 ++-- src/battle_pyramid.c | 2 +- src/battle_records.c | 2 +- src/battle_script_commands.c | 2 +- src/battle_transition.c | 4 +- src/berry_blender.c | 5 ++- src/berry_tag_screen.c | 2 +- src/contest.c | 34 +++++++-------- src/contest_util.c | 2 +- src/decoration.c | 4 +- src/diploma.c | 2 +- src/easy_chat.c | 12 +++--- src/evolution_graphics.c | 8 ++-- src/evolution_scene.c | 6 +-- src/field_effect.c | 25 ++++++----- src/field_special_scene.c | 2 +- src/field_weather.c | 24 +++++------ src/fieldmap.c | 2 +- src/fldeff_flash.c | 2 +- src/fldeff_sweetscent.c | 6 +-- src/hall_of_fame.c | 6 +-- src/intro.c | 50 +++++++++++----------- src/intro_credits_graphics.c | 8 ++-- src/link.c | 2 +- src/list_menu.c | 6 +-- src/mail.c | 21 ++++----- src/main_menu.c | 4 +- src/mirage_tower.c | 3 +- src/naming_screen.c | 10 ++--- src/palette.c | 10 ++--- src/party_menu.c | 44 +++++++++---------- src/pokedex.c | 2 +- src/pokedex_area_region_map.c | 2 +- src/pokedex_area_screen.c | 2 +- src/pokemon_icon.c | 12 ++---- src/pokemon_storage_system.c | 11 +++-- src/pokenav_conditions_search_results.c | 4 +- src/pokenav_main_menu.c | 4 +- src/pokenav_match_call_gfx.c | 10 ++--- src/pokenav_menu_handler_gfx.c | 4 +- src/pokenav_region_map.c | 2 +- src/pokenav_ribbons_list.c | 4 +- src/pokenav_ribbons_summary.c | 2 +- src/region_map.c | 2 +- src/roulette.c | 36 ++++++++-------- src/scrcmd.c | 4 +- src/slot_machine.c | 4 +- src/tileset_anims.c | 4 +- src/wireless_communication_status_screen.c | 2 +- 67 files changed, 270 insertions(+), 294 deletions(-) diff --git a/gflib/sprite.c b/gflib/sprite.c index c489eb6a4c34..80fba81fe309 100644 --- a/gflib/sprite.c +++ b/gflib/sprite.c @@ -1600,7 +1600,7 @@ u8 LoadSpritePalette(const struct SpritePalette *palette) else { sSpritePaletteTags[index] = palette->tag; - DoLoadSpritePalette(palette->data, index * 16); + DoLoadSpritePalette(palette->data, PLTT_ID(index)); return index; } } diff --git a/include/gba/defines.h b/include/gba/defines.h index 82caf56e6840..10e84b8b1aac 100644 --- a/include/gba/defines.h +++ b/include/gba/defines.h @@ -27,14 +27,12 @@ #define IWRAM_START 0x03000000 #define IWRAM_END (IWRAM_START + 0x8000) -#define PLTT 0x5000000 -#define PLTT_SIZE 0x400 - -#define BG_PLTT PLTT -#define BG_PLTT_SIZE 0x200 - -#define OBJ_PLTT (PLTT + 0x200) +#define PLTT 0x5000000 +#define BG_PLTT PLTT +#define BG_PLTT_SIZE 0x200 +#define OBJ_PLTT (PLTT + BG_PLTT_SIZE) #define OBJ_PLTT_SIZE 0x200 +#define PLTT_SIZE (BG_PLTT_SIZE + OBJ_PLTT_SIZE) #define VRAM 0x6000000 #define VRAM_SIZE 0x18000 diff --git a/include/palette.h b/include/palette.h index 29723ef6c894..d23a658b4a78 100644 --- a/include/palette.h +++ b/include/palette.h @@ -6,8 +6,7 @@ #define gPaletteFade_delay (gPaletteFade.multipurpose2) // normal and hardware fade #define gPaletteFade_submode (gPaletteFade.multipurpose2) // fast fade -#define PLTT_BUFFER_SIZE 0x200 -#define PLTT_DECOMP_BUFFER_SIZE (PLTT_BUFFER_SIZE * 2) +#define PLTT_BUFFER_SIZE (PLTT_SIZE / sizeof(u16)) #define PALETTE_FADE_STATUS_DELAY 2 #define PALETTE_FADE_STATUS_ACTIVE 1 diff --git a/src/battle_anim.c b/src/battle_anim.c index 2f5d515c024c..e6e049c37051 100644 --- a/src/battle_anim.c +++ b/src/battle_anim.c @@ -824,27 +824,15 @@ static void Task_UpdateMonBg(u8 taskId) if (!gTasks[taskId].t2_InBg2) { - u16 *src; - u16 *dst; - gBattle_BG1_X = x + gTasks[taskId].t2_BgX; gBattle_BG1_Y = y + gTasks[taskId].t2_BgY; - - src = &gPlttBufferFaded[0x100 + battlerId * 16]; - dst = &gPlttBufferFaded[0x100 + animBg.paletteId * 16 - 256]; - CpuCopy32(src, dst, 32); + CpuCopy32(&gPlttBufferFaded[OBJ_PLTT_ID(battlerId)], &gPlttBufferFaded[BG_PLTT_ID(animBg.paletteId)], PLTT_SIZE_4BPP); } else { - u16 *src; - u16 *dst; - gBattle_BG2_X = x + gTasks[taskId].t2_BgX; gBattle_BG2_Y = y + gTasks[taskId].t2_BgY; - - src = &gPlttBufferFaded[0x100 + battlerId * 16]; - dst = &gPlttBufferFaded[0x100 - 112]; - CpuCopy32(src, dst, 32); + CpuCopy32(&gPlttBufferFaded[OBJ_PLTT_ID(battlerId)], &gPlttBufferFaded[BG_PLTT_ID(9)], PLTT_SIZE_4BPP); } } diff --git a/src/battle_anim_effects_1.c b/src/battle_anim_effects_1.c index 0ee894085e4e..1d9a12cafbd5 100644 --- a/src/battle_anim_effects_1.c +++ b/src/battle_anim_effects_1.c @@ -3963,7 +3963,7 @@ static void AnimProtect(struct Sprite *sprite) sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimAttacker); sprite->data[0] = gBattleAnimArgs[2]; - sprite->data[2] = (IndexOfSpritePaletteTag(ANIM_TAG_PROTECT) << 4) + 0x100; + sprite->data[2] = OBJ_PLTT_ID(IndexOfSpritePaletteTag(ANIM_TAG_PROTECT)); sprite->data[7] = 16; SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND); SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16 - sprite->data[7], sprite->data[7])); @@ -5251,7 +5251,7 @@ void AnimTask_MusicNotesRainbowBlend(u8 taskId) index = IndexOfSpritePaletteTag(gParticlesColorBlendTable[0][0]); if (index != 0xFF) { - index = (index << 4) + 0x100; + index = OBJ_PLTT_ID(index); for (i = 1; i < ARRAY_COUNT(gParticlesColorBlendTable[0]); i++) gPlttBufferFaded[index + i] = gParticlesColorBlendTable[0][i]; } @@ -5261,7 +5261,7 @@ void AnimTask_MusicNotesRainbowBlend(u8 taskId) index = AllocSpritePalette(gParticlesColorBlendTable[j][0]); if (index != 0xFF) { - index = (index << 4) + 0x100; + index = OBJ_PLTT_ID(index); for (i = 1; i < ARRAY_COUNT(gParticlesColorBlendTable[0]); i++) gPlttBufferFaded[index + i] = gParticlesColorBlendTable[j][i]; } diff --git a/src/battle_anim_effects_2.c b/src/battle_anim_effects_2.c index 13cfc1b4eaf4..89696d7dd3fa 100755 --- a/src/battle_anim_effects_2.c +++ b/src/battle_anim_effects_2.c @@ -1751,7 +1751,7 @@ void AnimTask_AirCutterProjectile(u8 taskId) static void AnimVoidLines(struct Sprite *sprite) { InitSpritePosToAnimAttacker(sprite, FALSE); - sprite->data[0] = 0x100 + (IndexOfSpritePaletteTag(sVoidLinesSpriteTemplate.paletteTag) << 4); + sprite->data[0] = OBJ_PLTT_ID(IndexOfSpritePaletteTag(sVoidLinesSpriteTemplate.paletteTag)); sprite->callback = AnimVoidLines_Step; } diff --git a/src/battle_anim_effects_3.c b/src/battle_anim_effects_3.c index ca0beabd3284..75a6ee22d985 100755 --- a/src/battle_anim_effects_3.c +++ b/src/battle_anim_effects_3.c @@ -1383,11 +1383,11 @@ static void SetPsychicBackground_Step(u8 taskId) if (++gTasks[taskId].data[5] == 4) { - lastColor = gPlttBufferFaded[paletteIndex * 16 + 11]; + lastColor = gPlttBufferFaded[BG_PLTT_ID(paletteIndex) + 11]; for (i = 10; i > 0; i--) - gPlttBufferFaded[paletteIndex * 16 + i + 1] = gPlttBufferFaded[paletteIndex * 16 + i]; + gPlttBufferFaded[BG_PLTT_ID(paletteIndex) + i + 1] = gPlttBufferFaded[BG_PLTT_ID(paletteIndex) + i]; - gPlttBufferFaded[paletteIndex * 16 + 1] = lastColor; + gPlttBufferFaded[BG_PLTT_ID(paletteIndex) + 1] = lastColor; gTasks[taskId].data[5] = 0; } @@ -1409,15 +1409,15 @@ static void FadeScreenToWhite_Step(u8 taskId) if (++gTasks[taskId].data[5] == 4) { - lastColor = gPlttBufferFaded[paletteIndex * 16 + 11]; + lastColor = gPlttBufferFaded[BG_PLTT_ID(paletteIndex) + 11]; for (i = 10; i > 0; i--) - gPlttBufferFaded[paletteIndex * 16 + i + 1] = gPlttBufferFaded[paletteIndex * 16 + i]; - gPlttBufferFaded[paletteIndex * 16 + 1] = lastColor; + gPlttBufferFaded[BG_PLTT_ID(paletteIndex) + i + 1] = gPlttBufferFaded[BG_PLTT_ID(paletteIndex) + i]; + gPlttBufferFaded[BG_PLTT_ID(paletteIndex) + 1] = lastColor; - lastColor = gPlttBufferUnfaded[paletteIndex * 16 + 11]; + lastColor = gPlttBufferUnfaded[BG_PLTT_ID(paletteIndex) + 11]; for (i = 10; i > 0; i--) - gPlttBufferUnfaded[paletteIndex * 16 + i + 1] = gPlttBufferUnfaded[paletteIndex * 16 + i]; - gPlttBufferUnfaded[paletteIndex * 16 + 1] = lastColor; + gPlttBufferUnfaded[BG_PLTT_ID(paletteIndex) + i + 1] = gPlttBufferUnfaded[BG_PLTT_ID(paletteIndex) + i]; + gPlttBufferUnfaded[BG_PLTT_ID(paletteIndex) + 1] = lastColor; gTasks[taskId].data[5] = 0; } diff --git a/src/battle_anim_flying.c b/src/battle_anim_flying.c index 746e3bdd7365..7e5c5e9393bd 100644 --- a/src/battle_anim_flying.c +++ b/src/battle_anim_flying.c @@ -388,17 +388,17 @@ static void AnimTask_AnimateGustTornadoPalette_Step(u8 taskId) { gTasks[taskId].data[10] = 0; data2 = gTasks[taskId].data[2]; - temp = gPlttBufferFaded[16 * data2 + 0x108]; + temp = gPlttBufferFaded[OBJ_PLTT_ID(data2) + 8]; i = 7; - base = data2 * 16; + base = PLTT_ID(data2); do { - gPlttBufferFaded[base + 0x101 + i] = gPlttBufferFaded[base + 0x100 + i]; + gPlttBufferFaded[base + OBJ_PLTT_OFFSET + 1 + i] = gPlttBufferFaded[base + OBJ_PLTT_OFFSET + i]; i--; } while (i > 0); - gPlttBufferFaded[base + 0x101] = temp; + gPlttBufferFaded[base + OBJ_PLTT_OFFSET + 1] = temp; } if (--gTasks[taskId].data[0] == 0) diff --git a/src/battle_anim_ghost.c b/src/battle_anim_ghost.c index 9b74fdada32c..228ba12ceef7 100644 --- a/src/battle_anim_ghost.c +++ b/src/battle_anim_ghost.c @@ -627,7 +627,7 @@ static void AnimTask_SpiteTargetShadow_Step1(u8 taskId) task->data[2] = 0; task->data[3] = 16; task->data[13] = GetAnimBattlerSpriteId(ANIM_TARGET); - task->data[4] = (gSprites[task->data[13]].oam.paletteNum + 16) * 16; + task->data[4] = OBJ_PLTT_ID2(gSprites[task->data[13]].oam.paletteNum); if (position == 1) { u16 mask = DISPCNT_BG1_ON; mask2 = mask; diff --git a/src/battle_anim_mons.c b/src/battle_anim_mons.c index ac38c5e474fe..d9fd6523118c 100644 --- a/src/battle_anim_mons.c +++ b/src/battle_anim_mons.c @@ -1382,18 +1382,17 @@ void SetGrayscaleOrOriginalPalette(u16 paletteNum, bool8 restoreOriginalColor) struct PlttData *originalColor; struct PlttData *destColor; u16 average; - - paletteNum *= 16; + u16 paletteOffset = PLTT_ID(paletteNum); if (!restoreOriginalColor) { for (i = 0; i < 16; i++) { - originalColor = (struct PlttData *)&gPlttBufferUnfaded[paletteNum + i]; + originalColor = (struct PlttData *)&gPlttBufferUnfaded[paletteOffset + i]; average = originalColor->r + originalColor->g + originalColor->b; average /= 3; - destColor = (struct PlttData *)&gPlttBufferFaded[paletteNum + i]; + destColor = (struct PlttData *)&gPlttBufferFaded[paletteOffset + i]; destColor->r = average; destColor->g = average; destColor->b = average; @@ -1401,7 +1400,7 @@ void SetGrayscaleOrOriginalPalette(u16 paletteNum, bool8 restoreOriginalColor) } else { - CpuCopy32(&gPlttBufferUnfaded[paletteNum], &gPlttBufferFaded[paletteNum], 32); + CpuCopy32(&gPlttBufferUnfaded[paletteOffset], &gPlttBufferFaded[paletteOffset], PLTT_SIZE_4BPP); } } diff --git a/src/battle_anim_psychic.c b/src/battle_anim_psychic.c index 978d14c4cdc9..f7bc6e31ae71 100644 --- a/src/battle_anim_psychic.c +++ b/src/battle_anim_psychic.c @@ -468,7 +468,7 @@ static void AnimDefensiveWall(struct Sprite *sprite) sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y) + gBattleAnimArgs[1]; } - sprite->data[0] = 256 + IndexOfSpritePaletteTag(gBattleAnimArgs[2]) * 16; + sprite->data[0] = OBJ_PLTT_ID(IndexOfSpritePaletteTag(gBattleAnimArgs[2])); if (isContest) { diff --git a/src/battle_anim_status_effects.c b/src/battle_anim_status_effects.c index 4e6b3a3402c0..5000e11096c4 100644 --- a/src/battle_anim_status_effects.c +++ b/src/battle_anim_status_effects.c @@ -424,10 +424,10 @@ static void AnimTask_FrozenIceCube_Step2(u8 taskId) { u16 temp; - temp = gPlttBufferFaded[0x100 + palIndex * 16 + 13]; - gPlttBufferFaded[0x100 + palIndex * 16 + 13] = gPlttBufferFaded[0x100 + palIndex * 16 + 14]; - gPlttBufferFaded[0x100 + palIndex * 16 + 14] = gPlttBufferFaded[0x100 + palIndex * 16 + 15]; - gPlttBufferFaded[0x100 + palIndex * 16 + 15] = temp; + temp = gPlttBufferFaded[OBJ_PLTT_ID(palIndex) + 13]; + gPlttBufferFaded[OBJ_PLTT_ID(palIndex) + 13] = gPlttBufferFaded[OBJ_PLTT_ID(palIndex) + 14]; + gPlttBufferFaded[OBJ_PLTT_ID(palIndex) + 14] = gPlttBufferFaded[OBJ_PLTT_ID(palIndex) + 15]; + gPlttBufferFaded[OBJ_PLTT_ID(palIndex) + 15] = temp; gTasks[taskId].data[2] = 0; gTasks[taskId].data[3]++; diff --git a/src/battle_anim_utility_funcs.c b/src/battle_anim_utility_funcs.c index d8e1e7baa32a..b399bd5b5c13 100644 --- a/src/battle_anim_utility_funcs.c +++ b/src/battle_anim_utility_funcs.c @@ -663,7 +663,7 @@ static void SetPalettesToColor(u32 selectedPalettes, u16 color) { if (selectedPalettes & 1) { - u16 curOffset = i * 16; + u16 curOffset = PLTT_ID(i); u16 paletteOffset = curOffset; while (curOffset < paletteOffset + 16) { @@ -932,7 +932,7 @@ void AnimTask_CopyPalUnfadedToBackup(u8 taskId) paletteIndex = gBattleAnimTarget + 16; } - memcpy(&gMonSpritesGfxPtr->buffer[gBattleAnimArgs[1] * 16], &gPlttBufferUnfaded[paletteIndex * 16], 32); + memcpy(&gMonSpritesGfxPtr->buffer[gBattleAnimArgs[1] * 16], &gPlttBufferUnfaded[PLTT_ID(paletteIndex)], PLTT_SIZE_4BPP); DestroyAnimVisualTask(taskId); } @@ -959,7 +959,7 @@ void AnimTask_CopyPalUnfadedFromBackup(u8 taskId) paletteIndex = gBattleAnimTarget + 16; } - memcpy(&gPlttBufferUnfaded[paletteIndex * 16], &gMonSpritesGfxPtr->buffer[gBattleAnimArgs[1] * 16], 32); + memcpy(&gPlttBufferUnfaded[PLTT_ID(paletteIndex)], &gMonSpritesGfxPtr->buffer[gBattleAnimArgs[1] * 16], PLTT_SIZE_4BPP); DestroyAnimVisualTask(taskId); } @@ -986,7 +986,7 @@ void AnimTask_CopyPalFadedToUnfaded(u8 taskId) paletteIndex = gBattleAnimTarget + 16; } - memcpy(&gPlttBufferUnfaded[paletteIndex * 16], &gPlttBufferFaded[paletteIndex * 16], 32); + memcpy(&gPlttBufferUnfaded[PLTT_ID(paletteIndex)], &gPlttBufferFaded[PLTT_ID(paletteIndex)], PLTT_SIZE_4BPP); DestroyAnimVisualTask(taskId); } diff --git a/src/battle_anim_water.c b/src/battle_anim_water.c index 117dd3b88c0b..dc793f70a592 100644 --- a/src/battle_anim_water.c +++ b/src/battle_anim_water.c @@ -619,7 +619,7 @@ static void AnimAuroraBeamRings_Step(struct Sprite *sprite) void AnimTask_RotateAuroraRingColors(u8 taskId) { gTasks[taskId].data[0] = gBattleAnimArgs[0]; - gTasks[taskId].data[2] = IndexOfSpritePaletteTag(ANIM_TAG_RAINBOW_RINGS) * 16 + 256; + gTasks[taskId].data[2] = OBJ_PLTT_ID(IndexOfSpritePaletteTag(ANIM_TAG_RAINBOW_RINGS)); gTasks[taskId].func = AnimTask_RotateAuroraRingColors_Step; } @@ -887,12 +887,12 @@ static void AnimTask_CreateSurfWave_Step1(u8 taskId) gTasks[taskId].data[2] += gTasks[taskId].data[1]; if (++gTasks[taskId].data[5] == 4) { - rgbBuffer = gPlttBufferFaded[animBg.paletteId * 16 + 7]; + rgbBuffer = gPlttBufferFaded[BG_PLTT_ID(animBg.paletteId) + 7]; for (i = 6; i != 0; i--) { - gPlttBufferFaded[animBg.paletteId * 16 + 1 + i] = gPlttBufferFaded[animBg.paletteId * 16 + 1 + i - 1]; // 1 + i - 1 is needed to match for some bizarre reason + gPlttBufferFaded[BG_PLTT_ID(animBg.paletteId) + 1 + i] = gPlttBufferFaded[BG_PLTT_ID(animBg.paletteId) + 1 + i - 1]; // 1 + i - 1 is needed to match for some bizarre reason } - gPlttBufferFaded[animBg.paletteId * 16 + 1] = rgbBuffer; + gPlttBufferFaded[BG_PLTT_ID(animBg.paletteId) + 1] = rgbBuffer; gTasks[taskId].data[5] = 0; } if (++gTasks[taskId].data[6] > 1) diff --git a/src/battle_bg.c b/src/battle_bg.c index b7c2b1494c62..b3091d965ee7 100644 --- a/src/battle_bg.c +++ b/src/battle_bg.c @@ -21,6 +21,7 @@ #include "trig.h" #include "window.h" #include "constants/map_types.h" +#include "constants/rgb.h" #include "constants/songs.h" #include "constants/trainers.h" @@ -1071,7 +1072,7 @@ void InitLinkBattleVsScreen(u8 taskId) break; case 1: palId = AllocSpritePalette(TAG_VS_LETTERS); - gPlttBufferUnfaded[palId * 16 + 0x10F] = gPlttBufferFaded[palId * 16 + 0x10F] = 0x7FFF; + gPlttBufferUnfaded[OBJ_PLTT_ID(palId) + 15] = gPlttBufferFaded[OBJ_PLTT_ID(palId) + 15] = RGB_WHITE; gBattleStruct->linkBattleVsSpriteId_V = CreateSprite(&sVsLetter_V_SpriteTemplate, 111, 80, 0); gBattleStruct->linkBattleVsSpriteId_S = CreateSprite(&sVsLetter_S_SpriteTemplate, 129, 80, 0); gSprites[gBattleStruct->linkBattleVsSpriteId_V].invisible = TRUE; diff --git a/src/battle_factory_screen.c b/src/battle_factory_screen.c index 16f702c72ceb..0812953235b9 100644 --- a/src/battle_factory_screen.c +++ b/src/battle_factory_screen.c @@ -1183,7 +1183,7 @@ static void CB2_InitSelectScreen(void) #else if (sFactorySelectScreen->fromSummaryScreen == TRUE) #endif - gPlttBufferUnfaded[228] = sFactorySelectScreen->speciesNameColorBackup; + gPlttBufferUnfaded[BG_PLTT_ID(14) + 4] = sFactorySelectScreen->speciesNameColorBackup; LoadPalette(sMonPicBg_Pal, BG_PLTT_ID(2), PLTT_SIZEOF(2)); gMain.state++; break; @@ -1449,7 +1449,7 @@ static void Select_Task_OpenSummaryScreen(u8 taskId) switch (gTasks[taskId].tState) { case STATE_SUMMARY_FADE: - gPlttBufferUnfaded[228] = gPlttBufferFaded[228]; + gPlttBufferUnfaded[BG_PLTT_ID(14) + 4] = gPlttBufferFaded[BG_PLTT_ID(14) + 4]; BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); gTasks[taskId].tState = STATE_SUMMARY_CLEAN; break; @@ -1468,7 +1468,7 @@ static void Select_Task_OpenSummaryScreen(u8 taskId) } break; case STATE_SUMMARY_SHOW: - sFactorySelectScreen->speciesNameColorBackup = gPlttBufferUnfaded[228]; + sFactorySelectScreen->speciesNameColorBackup = gPlttBufferUnfaded[BG_PLTT_ID(14) + 4]; DestroyTask(taskId); sFactorySelectScreen->fromSummaryScreen = TRUE; currMonId = sFactorySelectScreen->cursorPos; @@ -1641,8 +1641,8 @@ static void Select_Task_HandleMenu(u8 taskId) { if (sFactorySelectScreen->fromSummaryScreen == TRUE) { - gPlttBufferFaded[228] = sFactorySelectScreen->speciesNameColorBackup; - gPlttBufferUnfaded[228] = gPlttBufferUnfaded[244]; + gPlttBufferFaded[BG_PLTT_ID(14) + 4] = sFactorySelectScreen->speciesNameColorBackup; + gPlttBufferUnfaded[BG_PLTT_ID(14) + 4] = gPlttBufferUnfaded[BG_PLTT_ID(15) + 4]; } sFactorySelectScreen->fromSummaryScreen = FALSE; gTasks[taskId].tState = STATE_MENU_HANDLE_INPUT; @@ -2388,7 +2388,7 @@ static void Swap_Task_OpenSummaryScreen(u8 taskId) case STATE_SUMMARY_SHOW: DestroyTask(taskId); sFactorySwapScreen->fromSummaryScreen = TRUE; - sFactorySwapScreen->speciesNameColorBackup = gPlttBufferUnfaded[244]; + sFactorySwapScreen->speciesNameColorBackup = gPlttBufferUnfaded[BG_PLTT_ID(15) + 4]; ShowPokemonSummaryScreen(SUMMARY_MODE_NORMAL, gPlayerParty, sFactorySwapScreen->cursorPos, FRONTIER_PARTY_SIZE - 1, CB2_InitSwapScreen); break; } @@ -2761,7 +2761,7 @@ static void Swap_Task_FadeOutSpeciesName(u8 taskId) if (sFactorySwapScreen->fadeSpeciesNameCoeffDelay > 3) { sFactorySwapScreen->fadeSpeciesNameCoeffDelay = 0; - gPlttBufferUnfaded[244] = gPlttBufferFaded[228]; + gPlttBufferUnfaded[BG_PLTT_ID(15) + 4] = gPlttBufferFaded[BG_PLTT_ID(14) + 4]; sFactorySwapScreen->fadeSpeciesNameCoeff++; } BlendPalettes(0x4000, sFactorySwapScreen->fadeSpeciesNameCoeff, 0); @@ -3125,7 +3125,7 @@ static void Swap_Task_ScreenInfoTransitionIn(u8 taskId) if (gTasks[taskId].tSlideFinishedPkmn == TRUE && gTasks[taskId].tSlideFinishedCancel == TRUE) { - gPlttBufferFaded[226] = sPokeballGray_Pal[37]; + gPlttBufferFaded[BG_PLTT_ID(14) + 2] = sPokeballGray_Pal[37]; Swap_PrintActionStrings(); PutWindowTilemap(SWAP_WIN_ACTION_FADE); gTasks[taskId].tState++; @@ -3864,7 +3864,7 @@ static void Swap_PrintMonSpeciesAtFade(void) CpuCopy16(sSwapText_Pal, pal, 8); if (!sFactorySwapScreen->fromSummaryScreen) - pal[4] = gPlttBufferFaded[228]; + pal[4] = gPlttBufferFaded[BG_PLTT_ID(14) + 4]; else pal[4] = sFactorySwapScreen->speciesNameColorBackup; LoadPalette(pal, BG_PLTT_ID(15), sizeof(sSwapText_Pal)); diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index 0b5796487ccc..55ed328b8909 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -598,7 +598,7 @@ void BattleLoadOpponentMonSpriteGfx(struct Pokemon *mon, u8 battlerId) if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != SPECIES_NONE) { BlendPalette(paletteOffset, 16, 6, RGB_WHITE); - CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, PLTT_SIZEOF(16)); + CpuCopy32(&gPlttBufferFaded[paletteOffset], &gPlttBufferUnfaded[paletteOffset], PLTT_SIZEOF(16)); } } @@ -661,7 +661,7 @@ void BattleLoadPlayerMonSpriteGfx(struct Pokemon *mon, u8 battlerId) if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != SPECIES_NONE) { BlendPalette(paletteOffset, 16, 6, RGB_WHITE); - CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, PLTT_SIZEOF(16)); + CpuCopy32(&gPlttBufferFaded[paletteOffset], &gPlttBufferUnfaded[paletteOffset], PLTT_SIZEOF(16)); } } @@ -909,7 +909,7 @@ void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool8 castform) if (gBattleSpritesDataPtr->battlerData[battlerAtk].transformSpecies != SPECIES_NONE) { BlendPalette(paletteOffset, 16, 6, RGB_WHITE); - CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, PLTT_SIZEOF(16)); + CpuCopy32(&gPlttBufferFaded[paletteOffset], &gPlttBufferUnfaded[paletteOffset], PLTT_SIZEOF(16)); } gSprites[gBattlerSpriteIds[battlerAtk]].y = GetBattlerSpriteDefault_Y(battlerAtk); } @@ -978,7 +978,7 @@ void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool8 castform) } BlendPalette(paletteOffset, 16, 6, RGB_WHITE); - CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, PLTT_SIZEOF(16)); + CpuCopy32(&gPlttBufferFaded[paletteOffset], &gPlttBufferUnfaded[paletteOffset], PLTT_SIZEOF(16)); if (!IsContest()) { diff --git a/src/battle_interface.c b/src/battle_interface.c index bc86ede4acf0..f9a7be58ea45 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -2059,7 +2059,7 @@ static void UpdateStatusIconInHealthbox(u8 healthboxSpriteId) pltAdder += battlerId + 12; FillPalette(sStatusIconColors[statusPalId], OBJ_PLTT_OFFSET + pltAdder, PLTT_SIZEOF(1)); - CpuCopy16(gPlttBufferUnfaded + OBJ_PLTT_OFFSET + pltAdder, (u16 *)OBJ_PLTT + pltAdder, PLTT_SIZEOF(1)); + CpuCopy16(&gPlttBufferUnfaded[OBJ_PLTT_OFFSET + pltAdder], (u16 *)OBJ_PLTT + pltAdder, PLTT_SIZEOF(1)); CpuCopy32(statusGfxPtr, (void *)(OBJ_VRAM0 + (gSprites[healthboxSpriteId].oam.tileNum + tileNumAdder) * TILE_SIZE_4BPP), 96); if (IsDoubleBattle() == TRUE || GetBattlerSide(battlerId) == B_SIDE_OPPONENT) { diff --git a/src/battle_message.c b/src/battle_message.c index f02e38f13445..b02e9e445c51 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -3025,11 +3025,11 @@ void SetPpNumbersPaletteInMoveSelection(void) u8 var = GetCurrentPpToMaxPpState(chooseMoveStruct->currentPp[gMoveSelectionCursor[gActiveBattler]], chooseMoveStruct->maxPp[gMoveSelectionCursor[gActiveBattler]]); - gPlttBufferUnfaded[92] = palPtr[(var * 2) + 0]; - gPlttBufferUnfaded[91] = palPtr[(var * 2) + 1]; + gPlttBufferUnfaded[BG_PLTT_ID(5) + 12] = palPtr[(var * 2) + 0]; + gPlttBufferUnfaded[BG_PLTT_ID(5) + 11] = palPtr[(var * 2) + 1]; - CpuCopy16(&gPlttBufferUnfaded[92], &gPlttBufferFaded[92], sizeof(u16)); - CpuCopy16(&gPlttBufferUnfaded[91], &gPlttBufferFaded[91], sizeof(u16)); + CpuCopy16(&gPlttBufferUnfaded[BG_PLTT_ID(5) + 12], &gPlttBufferFaded[BG_PLTT_ID(5) + 12], PLTT_SIZEOF(1)); + CpuCopy16(&gPlttBufferUnfaded[BG_PLTT_ID(5) + 11], &gPlttBufferFaded[BG_PLTT_ID(5) + 11], PLTT_SIZEOF(1)); } u8 GetCurrentPpToMaxPpState(u8 currentPp, u8 maxPp) diff --git a/src/battle_pyramid.c b/src/battle_pyramid.c index 84a439037d03..07d7772f42d8 100644 --- a/src/battle_pyramid.c +++ b/src/battle_pyramid.c @@ -1185,7 +1185,7 @@ static void Task_SetPyramidFloorPalette(u8 taskId) { if (gPaletteFade.active) { - CpuCopy16(gBattlePyramidFloor_Pal[gSaveBlock2Ptr->frontier.curChallengeBattleNum], &gPlttBufferUnfaded[96], 32); + CpuCopy16(gBattlePyramidFloor_Pal[gSaveBlock2Ptr->frontier.curChallengeBattleNum], &gPlttBufferUnfaded[BG_PLTT_ID(6)], PLTT_SIZE_4BPP); DestroyTask(taskId); } } diff --git a/src/battle_records.c b/src/battle_records.c index 4463a9ebfc74..edc48d820273 100644 --- a/src/battle_records.c +++ b/src/battle_records.c @@ -444,7 +444,7 @@ static void LoadTrainerHillRecordsWindowGfx(u8 bgId) { LoadBgTiles(bgId, sTrainerHillWindowTileset, sizeof(sTrainerHillWindowTileset), 0); CopyToBgTilemapBufferRect(bgId, sTrainerHillWindowTilemap, 0, 0, 0x20, 0x20); - LoadPalette(sTrainerHillWindowPalette, BG_PLTT_ID(0), PLTT_SIZE_4BPP); + LoadPalette(sTrainerHillWindowPalette, BG_PLTT_ID(0), sizeof(sTrainerHillWindowPalette)); } static void VblankCB_TrainerHillRecords(void) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index d12477bea8a5..bf9197a0e8f2 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -6013,7 +6013,7 @@ static void InitLevelUpBanner(void) gBattle_BG2_Y = 0; gBattle_BG2_X = LEVEL_UP_BANNER_START; - LoadPalette(sLevelUpBanner_Pal, BG_PLTT_ID(6), PLTT_SIZE_4BPP); + LoadPalette(sLevelUpBanner_Pal, BG_PLTT_ID(6), sizeof(sLevelUpBanner_Pal)); CopyToWindowPixelBuffer(B_WIN_LEVEL_UP_BANNER, sLevelUpBanner_Gfx, 0, 0); PutWindowTilemap(B_WIN_LEVEL_UP_BANNER); CopyWindowToVram(B_WIN_LEVEL_UP_BANNER, COPYWIN_FULL); diff --git a/src/battle_transition.c b/src/battle_transition.c index 4066f72e581c..2e87b9c1d77e 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -1069,7 +1069,7 @@ static void Task_BattleTransition(u8 taskId) static bool8 Transition_StartIntro(struct Task *task) { SetWeatherScreenFadeOut(); - CpuCopy32(gPlttBufferFaded, gPlttBufferUnfaded, sizeof(gPlttBufferUnfaded)); + CpuCopy32(gPlttBufferFaded, gPlttBufferUnfaded, PLTT_SIZE); if (sTasks_Intro[task->tTransitionId] != NULL) { CreateTask(sTasks_Intro[task->tTransitionId], 4); @@ -4498,7 +4498,7 @@ static bool8 FrontierSquares_Shrink(struct Task *task) switch (task->tShrinkState) { case 0: - for (i = 250; i < 255; i++) + for (i = BG_PLTT_ID(15) + 10; i < BG_PLTT_ID(15) + 15; i++) { gPlttBufferUnfaded[i] = RGB_BLACK; gPlttBufferFaded[i] = RGB_BLACK; diff --git a/src/berry_blender.c b/src/berry_blender.c index cf0de017faa6..10b02c86b7ac 100644 --- a/src/berry_blender.c +++ b/src/berry_blender.c @@ -1033,11 +1033,12 @@ static void InitBerryBlenderWindows(void) s32 i; DeactivateAllTextPrinters(); - for (i = 0; i < 5; i++) + // Initialize only the main text windows (player names and message box; excludes results screen) + for (i = 0; i < WIN_RESULTS; i++) FillWindowPixelBuffer(i, PIXEL_FILL(0)); FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, DISPLAY_TILE_WIDTH, DISPLAY_TILE_HEIGHT); - Menu_LoadStdPalAt(0xE0); + Menu_LoadStdPalAt(BG_PLTT_ID(14)); } } diff --git a/src/berry_tag_screen.c b/src/berry_tag_screen.c index e43d68600154..448ee3384875 100644 --- a/src/berry_tag_screen.c +++ b/src/berry_tag_screen.c @@ -367,7 +367,7 @@ static void HandleInitWindows(void) InitWindows(sWindowTemplates); DeactivateAllTextPrinters(); - LoadPalette(sFontPalette, BG_PLTT_ID(15), PLTT_SIZE_4BPP); + LoadPalette(sFontPalette, BG_PLTT_ID(15), sizeof(sFontPalette)); for (i = 0; i < ARRAY_COUNT(sWindowTemplates) - 1; i++) PutWindowTilemap(i); ScheduleBgCopyTilemapToVram(0); diff --git a/src/contest.c b/src/contest.c index 8a1847f11179..84d295f132ee 100644 --- a/src/contest.c +++ b/src/contest.c @@ -1076,10 +1076,10 @@ static void LoadContestPalettes(void) { s32 i; - LoadPalette(sText_Pal, BG_PLTT_ID(15), PLTT_SIZE_4BPP); + LoadPalette(sText_Pal, BG_PLTT_ID(15), sizeof(sText_Pal)); SetBackdropFromColor(RGB_BLACK); for (i = 10; i < 14; i++) - LoadPalette(gPlttBufferUnfaded + BG_PLTT_ID(15) + 1, BG_PLTT_ID(15) + i, PLTT_SIZEOF(1)); + LoadPalette(&gPlttBufferUnfaded[BG_PLTT_ID(15) + 1], BG_PLTT_ID(15) + i, PLTT_SIZEOF(1)); FillPalette(RGB(31, 17, 31), BG_PLTT_ID(15) + 3, PLTT_SIZEOF(1)); } @@ -1331,10 +1331,10 @@ static bool8 SetupContestGraphics(u8 *stateVar) break; case 5: LoadCompressedPalette(gContestInterfaceAudiencePalette, BG_PLTT_OFFSET, BG_PLTT_SIZE); - CpuCopy32(gPlttBufferUnfaded + BG_PLTT_ID(8), tempPalette1, PLTT_SIZE_4BPP); - CpuCopy32(gPlttBufferUnfaded + BG_PLTT_ID(5 + gContestPlayerMonIndex), tempPalette2, PLTT_SIZE_4BPP); - CpuCopy32(tempPalette2, gPlttBufferUnfaded + BG_PLTT_ID(8), PLTT_SIZE_4BPP); - CpuCopy32(tempPalette1, gPlttBufferUnfaded + BG_PLTT_ID(5 + gContestPlayerMonIndex), PLTT_SIZE_4BPP); + CpuCopy32(&gPlttBufferUnfaded[BG_PLTT_ID(8)], tempPalette1, PLTT_SIZE_4BPP); + CpuCopy32(&gPlttBufferUnfaded[BG_PLTT_ID(5 + gContestPlayerMonIndex)], tempPalette2, PLTT_SIZE_4BPP); + CpuCopy32(tempPalette2, &gPlttBufferUnfaded[BG_PLTT_ID(8)], PLTT_SIZE_4BPP); + CpuCopy32(tempPalette1, &gPlttBufferUnfaded[BG_PLTT_ID(5 + gContestPlayerMonIndex)], PLTT_SIZE_4BPP); DmaCopy32Defvars(3, gPlttBufferUnfaded, eContestTempSave.cachedWindowPalettes, sizeof(eContestTempSave.cachedWindowPalettes)); LoadContestPalettes(); break; @@ -1475,7 +1475,7 @@ static void Task_DisplayAppealNumberText(u8 taskId) gBattle_BG0_Y = 0; gBattle_BG2_Y = 0; ContestDebugDoPrint(); - DmaCopy32Defvars(3, gPlttBufferUnfaded, eContestTempSave.cachedPlttBufferUnfaded, PLTT_BUFFER_SIZE * 2); + DmaCopy32Defvars(3, gPlttBufferUnfaded, eContestTempSave.cachedPlttBufferUnfaded, PLTT_SIZE); ConvertIntToDecimalStringN(gStringVar1, eContest.appealNumber + 1, STR_CONV_MODE_LEFT_ALIGN, 1); if (!Contest_IsMonsTurnDisabled(gContestPlayerMonIndex)) StringCopy(gDisplayedStringBattle, gText_AppealNumWhichMoveWillBePlayed); @@ -1674,8 +1674,8 @@ static void Task_HideMoveSelectScreen(u8 taskId) } Contest_SetBgCopyFlags(0); // This seems to be a bug; it should have just copied PLTT_BUFFER_SIZE. - DmaCopy32Defvars(3, gPlttBufferFaded, eContestTempSave.cachedPlttBufferFaded, PLTT_BUFFER_SIZE * 2); - LoadPalette(eContestTempSave.cachedPlttBufferUnfaded, 0, PLTT_BUFFER_SIZE * 2); + DmaCopy32Defvars(3, gPlttBufferFaded, eContestTempSave.cachedPlttBufferFaded, PLTT_SIZE); + LoadPalette(eContestTempSave.cachedPlttBufferUnfaded, 0, PLTT_SIZE); gTasks[taskId].data[0] = 0; gTasks[taskId].data[1] = 0; gTasks[taskId].func = Task_HideApplauseMeterForAppealStart; @@ -2561,7 +2561,7 @@ static void Task_WaitForHeartSliders(u8 taskId) static void Task_RestorePlttBufferUnfaded(u8 taskId) { - DmaCopy32Defvars(3, eContestTempSave.cachedPlttBufferUnfaded, gPlttBufferUnfaded, PLTT_BUFFER_SIZE * 2); + DmaCopy32Defvars(3, eContestTempSave.cachedPlttBufferUnfaded, gPlttBufferUnfaded, PLTT_SIZE); gTasks[taskId].data[0] = 0; gTasks[taskId].data[1] = 2; gTasks[taskId].func = Task_WaitPrintRoundResult; @@ -4068,14 +4068,14 @@ static void UpdateBlendTaskContestantData(u8 contestant) palOffset1 = contestant + 5; DmaCopy16Defvars(3, - gPlttBufferUnfaded + palOffset1 * 16 + 10, - gPlttBufferFaded + palOffset1 * 16 + 10, - 2); - palOffset2 = (contestant + 5) * 16 + 12 + contestant; + &gPlttBufferUnfaded[PLTT_ID(palOffset1) + 10], + &gPlttBufferFaded[PLTT_ID(palOffset1) + 10], + PLTT_SIZEOF(1)); + palOffset2 = PLTT_ID(contestant + 5) + 12 + contestant; DmaCopy16Defvars(3, - gPlttBufferUnfaded + palOffset2, - gPlttBufferFaded + palOffset2, - 2); + &gPlttBufferUnfaded[palOffset2], + &gPlttBufferFaded[palOffset2], + PLTT_SIZEOF(1)); } // See comments on CreateUnusedBlendTask diff --git a/src/contest_util.c b/src/contest_util.c index 4c9e63c0b8cf..ec999be92493 100644 --- a/src/contest_util.c +++ b/src/contest_util.c @@ -456,7 +456,7 @@ static void LoadContestResultsBgGfx(void) CopyToBgTilemapBuffer(2, gContestResults_Interface_Tilemap, 0, 0); CopyToBgTilemapBuffer(0, gContestResults_WinnerBanner_Tilemap, 0, 0); LoadContestResultsTitleBarTilemaps(); - LoadCompressedPalette(gContestResults_Pal, BG_PLTT_ID(0), 16 * PLTT_SIZE_4BPP); + LoadCompressedPalette(gContestResults_Pal, BG_PLTT_OFFSET, BG_PLTT_SIZE); LoadPalette(sResultsTextWindow_Pal, BG_PLTT_ID(15), sizeof(sResultsTextWindow_Pal)); for (i = 0; i < CONTESTANT_COUNT; i++) diff --git a/src/decoration.c b/src/decoration.c index 6d95cfbdc307..27ef85de9ed6 100644 --- a/src/decoration.c +++ b/src/decoration.c @@ -688,7 +688,7 @@ static void ReturnToDecorationActionsAfterInvalidSelection(u8 taskId) static void SecretBasePC_PrepMenuForSelectingStoredDecors(u8 taskId) { - LoadPalette(sDecorationMenuPalette, BG_PLTT_ID(13), PLTT_SIZE_4BPP); + LoadPalette(sDecorationMenuPalette, BG_PLTT_ID(13), sizeof(sDecorationMenuPalette)); ClearDialogWindowAndFrame(0, FALSE); RemoveDecorationWindow(WINDOW_MAIN_MENU); InitDecorationCategoriesWindow(taskId); @@ -834,7 +834,7 @@ static void ReturnToActionsMenuFromCategories(u8 taskId) void ShowDecorationCategoriesWindow(u8 taskId) { - LoadPalette(sDecorationMenuPalette, BG_PLTT_ID(13), PLTT_SIZE_4BPP); + LoadPalette(sDecorationMenuPalette, BG_PLTT_ID(13), sizeof(sDecorationMenuPalette)); ClearDialogWindowAndFrame(0, FALSE); gTasks[taskId].tDecorationMenuCommand = DECOR_MENU_TRADE; sCurDecorationCategory = DECORCAT_DESK; diff --git a/src/diploma.c b/src/diploma.c index 4f6264492418..2a188674503c 100644 --- a/src/diploma.c +++ b/src/diploma.c @@ -72,7 +72,7 @@ void CB2_ShowDiploma(void) ResetSpriteData(); ResetPaletteFade(); FreeAllSpritePalettes(); - LoadPalette(sDiplomaPalettes, BG_PLTT_ID(0), 2 * PLTT_SIZE_4BPP); + LoadPalette(sDiplomaPalettes, BG_PLTT_ID(0), sizeof(sDiplomaPalettes)); sDiplomaTilemapPtr = Alloc(0x1000); InitDiplomaBg(); InitDiplomaWindow(); diff --git a/src/easy_chat.c b/src/easy_chat.c index 35ba633cf4c1..5c910dced1ae 100644 --- a/src/easy_chat.c +++ b/src/easy_chat.c @@ -3930,12 +3930,12 @@ static void LoadEasyChatPalettes(void) { ResetPaletteFade(); LoadPalette(gEasyChatMode_Pal, BG_PLTT_ID(0), PLTT_SIZE_4BPP); - LoadPalette(sTextInputFrameOrange_Pal, BG_PLTT_ID(1), PLTT_SIZE_4BPP); - LoadPalette(sTextInputFrameGreen_Pal, BG_PLTT_ID(4), PLTT_SIZE_4BPP); - LoadPalette(sTitleText_Pal, BG_PLTT_ID(10), PLTT_SIZEOF(4)); - LoadPalette(sText_Pal, BG_PLTT_ID(11), PLTT_SIZEOF(6)); - LoadPalette(sText_Pal, BG_PLTT_ID(15), PLTT_SIZEOF(6)); - LoadPalette(sText_Pal, BG_PLTT_ID(3), PLTT_SIZEOF(6)); + LoadPalette(sTextInputFrameOrange_Pal, BG_PLTT_ID(1), sizeof(sTextInputFrameOrange_Pal)); + LoadPalette(sTextInputFrameGreen_Pal, BG_PLTT_ID(4), sizeof(sTextInputFrameGreen_Pal)); + LoadPalette(sTitleText_Pal, BG_PLTT_ID(10), sizeof(sTitleText_Pal)); + LoadPalette(sText_Pal, BG_PLTT_ID(11), sizeof(sText_Pal)); + LoadPalette(sText_Pal, BG_PLTT_ID(15), sizeof(sText_Pal)); + LoadPalette(sText_Pal, BG_PLTT_ID(3), sizeof(sText_Pal)); } static void PrintTitle(void) diff --git a/src/evolution_graphics.c b/src/evolution_graphics.c index a86f16201f71..96ff1b52df80 100644 --- a/src/evolution_graphics.c +++ b/src/evolution_graphics.c @@ -409,7 +409,7 @@ static void Task_Sparkles_SprayAndFlash_Init(u8 taskId) { SetEvoSparklesMatrices(); gTasks[taskId].tTimer = 0; - CpuSet(&gPlttBufferFaded[0x20], &gPlttBufferUnfaded[0x20], 0x30); + CpuCopy16(&gPlttBufferFaded[BG_PLTT_ID(2)], &gPlttBufferUnfaded[BG_PLTT_ID(2)], 3 * PLTT_SIZE_4BPP); BeginNormalPaletteFade(0xFFF9041C, 0, 0, 0x10, RGB_WHITE); // was 0xFFF9001C in R/S gTasks[taskId].func = Task_Sparkles_SprayAndFlash; PlaySE(SE_M_PETAL_DANCE); @@ -458,7 +458,7 @@ static void Task_Sparkles_SprayAndFlashTrade_Init(u8 taskId) { SetEvoSparklesMatrices(); gTasks[taskId].tTimer = 0; - CpuSet(&gPlttBufferFaded[0x20], &gPlttBufferUnfaded[0x20], 0x30); + CpuCopy16(&gPlttBufferFaded[BG_PLTT_ID(2)], &gPlttBufferUnfaded[BG_PLTT_ID(2)], 3 * PLTT_SIZE_4BPP); BeginNormalPaletteFade(0xFFF90400, 0, 0, 0x10, RGB_WHITE); // was 0xFFFF0001 in R/S gTasks[taskId].func = Task_Sparkles_SprayAndFlashTrade; PlaySE(SE_M_PETAL_DANCE); @@ -536,13 +536,13 @@ u8 CycleEvolutionMonSprite(u8 preEvoSpriteId, u8 postEvoSpriteId) gSprites[preEvoSpriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; gSprites[preEvoSpriteId].oam.matrixNum = MATRIX_PRE_EVO; gSprites[preEvoSpriteId].invisible = FALSE; - CpuSet(monPalette, &gPlttBufferFaded[0x100 + (gSprites[preEvoSpriteId].oam.paletteNum * 16)], 16); + CpuSet(monPalette, &gPlttBufferFaded[OBJ_PLTT_ID(gSprites[preEvoSpriteId].oam.paletteNum)], 16); gSprites[postEvoSpriteId].callback = SpriteCB_EvolutionMonSprite; gSprites[postEvoSpriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; gSprites[postEvoSpriteId].oam.matrixNum = MATRIX_POST_EVO; gSprites[postEvoSpriteId].invisible = FALSE; - CpuSet(monPalette, &gPlttBufferFaded[0x100 + (gSprites[postEvoSpriteId].oam.paletteNum * 16)], 16); + CpuSet(monPalette, &gPlttBufferFaded[OBJ_PLTT_ID(gSprites[postEvoSpriteId].oam.paletteNum)], 16); gTasks[taskId].tEvoStopped = FALSE; return taskId; diff --git a/src/evolution_scene.c b/src/evolution_scene.c index eeb22edd2467..3b92a0c4354c 100644 --- a/src/evolution_scene.c +++ b/src/evolution_scene.c @@ -298,7 +298,7 @@ void EvolutionScene(struct Pokemon *mon, u16 postEvoSpecies, bool8 canStopEvo, u gTasks[id].tEvoWasStopped = FALSE; gTasks[id].tPartyId = partyId; - memcpy(&sEvoStructPtr->savedPalette, &gPlttBufferUnfaded[0x20], sizeof(sEvoStructPtr->savedPalette)); + memcpy(&sEvoStructPtr->savedPalette, &gPlttBufferUnfaded[BG_PLTT_ID(2)], sizeof(sEvoStructPtr->savedPalette)); SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_1D_MAP); @@ -741,7 +741,7 @@ static void Task_EvolutionScene(u8 taskId) if (IsSEPlaying()) { m4aMPlayAllStop(); - memcpy(&gPlttBufferUnfaded[0x20], sEvoStructPtr->savedPalette, sizeof(sEvoStructPtr->savedPalette)); + memcpy(&gPlttBufferUnfaded[BG_PLTT_ID(2)], sEvoStructPtr->savedPalette, sizeof(sEvoStructPtr->savedPalette)); RestoreBgAfterAnim(); BeginNormalPaletteFade(0x1C, 0, 0x10, 0, RGB_BLACK); gTasks[taskId].tState++; @@ -1170,7 +1170,7 @@ static void Task_TradeEvolutionScene(u8 taskId) // Restore bg, do mon anim/cry Free(sBgAnimPal); EvoScene_DoMonAnimAndCry(sEvoStructPtr->postEvoSpriteId, gTasks[taskId].tPostEvoSpecies); - memcpy(&gPlttBufferUnfaded[0x20], sEvoStructPtr->savedPalette, sizeof(sEvoStructPtr->savedPalette)); + memcpy(&gPlttBufferUnfaded[BG_PLTT_ID(2)], sEvoStructPtr->savedPalette, sizeof(sEvoStructPtr->savedPalette)); gTasks[taskId].tState++; } break; diff --git a/src/field_effect.c b/src/field_effect.c index 7cae89d22fcc..d51c6ab88af4 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -900,7 +900,8 @@ u8 CreateTrainerSprite(u8 trainerSpriteID, s16 x, s16 y, u8 subpriority, u8 *buf return CreateSprite(&spriteTemplate, x, y, subpriority); } -void LoadTrainerGfx_TrainerCard(u8 gender, u16 palOffset, u8 *dest) +// Unused +static void LoadTrainerGfx_TrainerCard(u8 gender, u16 palOffset, u8 *dest) { LZDecompressVram(gTrainerFrontPicTable[gender].data, dest); LoadCompressedPalette(gTrainerFrontPicPaletteTable[gender].data, palOffset, PLTT_SIZE_4BPP); @@ -1190,14 +1191,14 @@ static void PokeballGlowEffect_Flash1(struct Sprite *sprite) sprite->data[3]++; } phase = (sprite->sCounter + 3) & 3; - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW) << 4) + 0x108, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); + MultiplyInvertedPaletteRGBComponents(OBJ_PLTT_ID(IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW)) + 8, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); phase = (sprite->sCounter + 2) & 3; - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW) << 4) + 0x106, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); + MultiplyInvertedPaletteRGBComponents(OBJ_PLTT_ID(IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW)) + 6, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); phase = (sprite->sCounter + 1) & 3; - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW) << 4) + 0x102, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); + MultiplyInvertedPaletteRGBComponents(OBJ_PLTT_ID(IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW)) + 2, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); phase = sprite->sCounter; - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW) << 4) + 0x105, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW) << 4) + 0x103, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); + MultiplyInvertedPaletteRGBComponents(OBJ_PLTT_ID(IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW)) + 5, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); + MultiplyInvertedPaletteRGBComponents(OBJ_PLTT_ID(IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW)) + 3, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); if (sprite->data[3] > 2) { sprite->sState++; @@ -1221,19 +1222,17 @@ static void PokeballGlowEffect_Flash2(struct Sprite *sprite) } } phase = sprite->sCounter; - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW) << 4) + 0x108, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW) << 4) + 0x106, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW) << 4) + 0x102, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW) << 4) + 0x105, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW) << 4) + 0x103, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); + MultiplyInvertedPaletteRGBComponents(OBJ_PLTT_ID(IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW)) + 8, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); + MultiplyInvertedPaletteRGBComponents(OBJ_PLTT_ID(IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW)) + 6, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); + MultiplyInvertedPaletteRGBComponents(OBJ_PLTT_ID(IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW)) + 2, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); + MultiplyInvertedPaletteRGBComponents(OBJ_PLTT_ID(IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW)) + 5, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); + MultiplyInvertedPaletteRGBComponents(OBJ_PLTT_ID(IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW)) + 3, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); } static void PokeballGlowEffect_WaitAfterFlash(struct Sprite *sprite) { if ((--sprite->sTimer) == 0) - { sprite->sState++; - } } static void PokeballGlowEffect_Dummy(struct Sprite *sprite) diff --git a/src/field_special_scene.c b/src/field_special_scene.c index 7c98703c6b36..a2b3d6366fa7 100644 --- a/src/field_special_scene.c +++ b/src/field_special_scene.c @@ -264,7 +264,7 @@ void ExecuteTruckSequence(void) MapGridSetMetatileIdAt(4 + MAP_OFFSET, 3 + MAP_OFFSET, METATILE_InsideOfTruck_DoorClosedFloor_Bottom); DrawWholeMapView(); LockPlayerFieldControls(); - CpuFastFill(0, gPlttBufferFaded, 0x400); + CpuFastFill(0, gPlttBufferFaded, PLTT_SIZE); CreateTask(Task_HandleTruckSequence, 0xA); } diff --git a/src/field_weather.c b/src/field_weather.c index 92863dee5f26..73aef3746d72 100644 --- a/src/field_weather.c +++ b/src/field_weather.c @@ -156,7 +156,7 @@ void StartWeather(void) if (!FuncIsActiveTask(Task_WeatherMain)) { u8 index = AllocSpritePalette(PALTAG_WEATHER); - CpuCopy32(gFogPalette, &gPlttBufferUnfaded[0x100 + index * 16], 32); + CpuCopy32(gFogPalette, &gPlttBufferUnfaded[OBJ_PLTT_ID(index)], PLTT_SIZE_4BPP); BuildColorMaps(); gWeatherPtr->contrastColorMapSpritePalIndex = index; gWeatherPtr->weatherPicSpritePalIndex = AllocSpritePalette(PALTAG_WEATHER_2); @@ -471,7 +471,7 @@ static void ApplyColorMap(u8 startPalIndex, u8 numPalettes, s8 colorMapIndex) if (colorMapIndex > 0) { colorMapIndex--; - palOffset = startPalIndex * 16; + palOffset = PLTT_ID(startPalIndex); numPalettes += startPalIndex; curPalIndex = startPalIndex; @@ -481,7 +481,7 @@ static void ApplyColorMap(u8 startPalIndex, u8 numPalettes, s8 colorMapIndex) if (sPaletteColorMapTypes[curPalIndex] == COLOR_MAP_NONE) { // No palette change. - CpuFastCopy(gPlttBufferUnfaded + palOffset, gPlttBufferFaded + palOffset, 16 * sizeof(u16)); + CpuFastCopy(&gPlttBufferUnfaded[palOffset], &gPlttBufferFaded[palOffset], PLTT_SIZE_4BPP); palOffset += 16; } else @@ -511,7 +511,7 @@ static void ApplyColorMap(u8 startPalIndex, u8 numPalettes, s8 colorMapIndex) { // A negative gammIndex value means that the blending will come from the special Drought weather's palette tables. colorMapIndex = -colorMapIndex - 1; - palOffset = startPalIndex * 16; + palOffset = PLTT_ID(startPalIndex); numPalettes += startPalIndex; curPalIndex = startPalIndex; @@ -520,7 +520,7 @@ static void ApplyColorMap(u8 startPalIndex, u8 numPalettes, s8 colorMapIndex) if (sPaletteColorMapTypes[curPalIndex] == COLOR_MAP_NONE) { // No palette change. - CpuFastCopy(gPlttBufferUnfaded + palOffset, gPlttBufferFaded + palOffset, 16 * sizeof(u16)); + CpuFastCopy(&gPlttBufferUnfaded[palOffset], &gPlttBufferFaded[palOffset], PLTT_SIZE_4BPP); palOffset += 16; } else @@ -538,7 +538,7 @@ static void ApplyColorMap(u8 startPalIndex, u8 numPalettes, s8 colorMapIndex) else { // No palette blending. - CpuFastCopy(gPlttBufferUnfaded + startPalIndex * 16, gPlttBufferFaded + startPalIndex * 16, numPalettes * 16 * sizeof(u16)); + CpuFastCopy(&gPlttBufferUnfaded[PLTT_ID(startPalIndex)], &gPlttBufferFaded[PLTT_ID(startPalIndex)], numPalettes * PLTT_SIZE_4BPP); } } @@ -552,7 +552,7 @@ static void ApplyColorMapWithBlend(u8 startPalIndex, u8 numPalettes, s8 colorMap u8 gBlend = color.g; u8 bBlend = color.b; - palOffset = BG_PLTT_ID(startPalIndex); + palOffset = PLTT_ID(startPalIndex); numPalettes += startPalIndex; colorMapIndex--; curPalIndex = startPalIndex; @@ -666,8 +666,8 @@ static void ApplyFogBlend(u8 blendCoeff, u16 blendColor) { if (LightenSpritePaletteInFog(curPalIndex)) { - u16 palEnd = (curPalIndex + 1) * 16; - u16 palOffset = curPalIndex * 16; + u16 palEnd = PLTT_ID(curPalIndex + 1); + u16 palOffset = PLTT_ID(curPalIndex); while (palOffset < palEnd) { @@ -786,7 +786,7 @@ void FadeScreen(u8 mode, s8 delay) if (fadeOut) { if (useWeatherPal) - CpuFastCopy(gPlttBufferFaded, gPlttBufferUnfaded, PLTT_BUFFER_SIZE * 2); + CpuFastCopy(gPlttBufferFaded, gPlttBufferUnfaded, PLTT_SIZE); BeginNormalPaletteFade(PALETTES_ALL, delay, 0, 16, fadeColor); gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_SCREEN_FADING_OUT; @@ -824,14 +824,14 @@ void UpdateSpritePaletteWithWeather(u8 spritePaletteIndex) { if (gWeatherPtr->currWeather == WEATHER_FOG_HORIZONTAL) MarkFogSpritePalToLighten(paletteIndex); - paletteIndex *= 16; + paletteIndex = PLTT_ID(paletteIndex); for (i = 0; i < 16; i++) gPlttBufferFaded[paletteIndex + i] = gWeatherPtr->fadeDestColor; } break; case WEATHER_PAL_STATE_SCREEN_FADING_OUT: paletteIndex = PLTT_ID(paletteIndex); - CpuFastCopy(gPlttBufferFaded + paletteIndex, gPlttBufferUnfaded + paletteIndex, PLTT_SIZE_4BPP); + CpuFastCopy(&gPlttBufferFaded[paletteIndex], &gPlttBufferUnfaded[paletteIndex], PLTT_SIZE_4BPP); BlendPalette(paletteIndex, 16, gPaletteFade.y, gPaletteFade.blendColor); break; // WEATHER_PAL_STATE_CHANGING_WEATHER diff --git a/src/fieldmap.c b/src/fieldmap.c index df4db47b5319..bdacf7ab25f8 100644 --- a/src/fieldmap.c +++ b/src/fieldmap.c @@ -871,7 +871,7 @@ static void ApplyGlobalTintToPaletteSlot(u8 slot, u8 count) } -void LoadTilesetPalette(struct Tileset const *tileset, u16 destOffset, u16 size) +static void LoadTilesetPalette(struct Tileset const *tileset, u16 destOffset, u16 size) { u16 black = RGB_BLACK; diff --git a/src/fldeff_flash.c b/src/fldeff_flash.c index 87d011741028..5c7d23b5ac7e 100644 --- a/src/fldeff_flash.c +++ b/src/fldeff_flash.c @@ -270,7 +270,7 @@ static void Task_ExitCaveTransition4(u8 taskId) if (count < 8) { gTasks[taskId].data[2]++; - LoadPalette(&sCaveTransitionPalette_Exit[count], BG_PLTT_ID(14), PLTT_SIZEOF(8) - PLTT_SIZEOF(count)); + LoadPalette(&sCaveTransitionPalette_Exit[count], BG_PLTT_ID(14), sizeof(sCaveTransitionPalette_Exit) - PLTT_SIZEOF(count)); } else { diff --git a/src/fldeff_sweetscent.c b/src/fldeff_sweetscent.c index 7e935260947a..dd979c77a81c 100644 --- a/src/fldeff_sweetscent.c +++ b/src/fldeff_sweetscent.c @@ -52,8 +52,8 @@ static void StartSweetScentFieldEffect(void) u8 taskId; PlaySE(SE_M_SWEET_SCENT); - CpuFastSet(gPlttBufferUnfaded, gPaletteDecompressionBuffer, 0x100); - CpuFastSet(gPlttBufferFaded, gPlttBufferUnfaded, 0x100); + CpuFastCopy(gPlttBufferUnfaded, gPaletteDecompressionBuffer, PLTT_SIZE); + CpuFastCopy(gPlttBufferFaded, gPlttBufferUnfaded, PLTT_SIZE); BeginNormalPaletteFade(~(1 << (gSprites[GetPlayerAvatarSpriteId()].oam.paletteNum + 16)), 4, 0, 8, RGB_RED); taskId = CreateTask(TrySweetScentEncounter, 0); gTasks[taskId].data[0] = 0; @@ -91,7 +91,7 @@ static void FailSweetScentEncounter(u8 taskId) { if (!gPaletteFade.active) { - CpuFastSet(gPaletteDecompressionBuffer, gPlttBufferUnfaded, 0x100); + CpuFastCopy(gPaletteDecompressionBuffer, gPlttBufferUnfaded, PLTT_SIZE); SetWeatherPalStateIdle(); ScriptContext_SetupScript(EventScript_FailSweetScent); DestroyTask(taskId); diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c index f4a4c96d7119..2e79a1f6b65d 100644 --- a/src/hall_of_fame.c +++ b/src/hall_of_fame.c @@ -740,7 +740,7 @@ static void Task_Hof_ExitOnKeyPressed(u8 taskId) static void Task_Hof_HandlePaletteOnExit(u8 taskId) { - CpuCopy16(gPlttBufferFaded, gPlttBufferUnfaded, 0x400); + CpuCopy16(gPlttBufferFaded, gPlttBufferUnfaded, PLTT_SIZE); BeginNormalPaletteFade(PALETTES_ALL, 8, 0, 0x10, RGB_BLACK); gTasks[taskId].func = Task_Hof_HandleExit; } @@ -1044,7 +1044,7 @@ static void Task_HofPC_HandlePaletteOnExit(u8 taskId) { struct HallofFameTeam *fameTeam; - CpuCopy16(gPlttBufferFaded, gPlttBufferUnfaded, 0x400); + CpuCopy16(gPlttBufferFaded, gPlttBufferUnfaded, PLTT_SIZE); fameTeam = (struct HallofFameTeam *)(gDecompressionBuffer); fameTeam->mon[0] = sDummyFameMon; ComputerScreenCloseEffect(0, 0, 0); @@ -1269,7 +1269,7 @@ static void ClearVramOamPltt_LoadHofPal(void) DmaFill16(3, 0, plttOffset, plttSize); ResetPaletteFade(); - LoadPalette(sHallOfFame_Pal, BG_PLTT_ID(0), PLTT_SIZE_4BPP); + LoadPalette(sHallOfFame_Pal, BG_PLTT_ID(0), sizeof(sHallOfFame_Pal)); } static void LoadHofGfx(void) diff --git a/src/intro.c b/src/intro.c index fd9c124670b8..ed50208e7d55 100644 --- a/src/intro.c +++ b/src/intro.c @@ -1188,13 +1188,13 @@ static void Task_Scene1_Load(u8 taskId) LoadSpritePalettes(sSpritePalettes_Intro1); LoadCompressedSpriteSheet(sSpriteSheet_Sparkle); LoadSpritePalettes(sSpritePalette_Sparkle); - CpuCopy16(&gPlttBufferUnfaded[0x100], &gPlttBufferUnfaded[0x1F0], 0x20); - CpuCopy16(&gPlttBufferUnfaded[0x100], &gPlttBufferUnfaded[0x1E1], 0x1E); - CpuCopy16(&gPlttBufferUnfaded[0x100], &gPlttBufferUnfaded[0x1D2], 0x1C); - CpuCopy16(&gPlttBufferUnfaded[0x100], &gPlttBufferUnfaded[0x1C3], 0x1A); - CpuCopy16(&gPlttBufferUnfaded[0x100], &gPlttBufferUnfaded[0x1B4], 0x18); - CpuCopy16(&gPlttBufferUnfaded[0x100], &gPlttBufferUnfaded[0x1A5], 0x16); - CpuCopy16(&gPlttBufferUnfaded[0x100], &gPlttBufferUnfaded[0x196], 0x14); + CpuCopy16(&gPlttBufferUnfaded[OBJ_PLTT_ID(0)], &gPlttBufferUnfaded[OBJ_PLTT_ID(15) + 0], PLTT_SIZEOF(16 - 0)); + CpuCopy16(&gPlttBufferUnfaded[OBJ_PLTT_ID(0)], &gPlttBufferUnfaded[OBJ_PLTT_ID(14) + 1], PLTT_SIZEOF(16 - 1) + 1); // Copying an extra half color? + CpuCopy16(&gPlttBufferUnfaded[OBJ_PLTT_ID(0)], &gPlttBufferUnfaded[OBJ_PLTT_ID(13) + 2], PLTT_SIZEOF(16 - 2)); + CpuCopy16(&gPlttBufferUnfaded[OBJ_PLTT_ID(0)], &gPlttBufferUnfaded[OBJ_PLTT_ID(12) + 3], PLTT_SIZEOF(16 - 3)); + CpuCopy16(&gPlttBufferUnfaded[OBJ_PLTT_ID(0)], &gPlttBufferUnfaded[OBJ_PLTT_ID(11) + 4], PLTT_SIZEOF(16 - 4)); + CpuCopy16(&gPlttBufferUnfaded[OBJ_PLTT_ID(0)], &gPlttBufferUnfaded[OBJ_PLTT_ID(10) + 5], PLTT_SIZEOF(16 - 5)); + CpuCopy16(&gPlttBufferUnfaded[OBJ_PLTT_ID(0)], &gPlttBufferUnfaded[OBJ_PLTT_ID( 9) + 6], PLTT_SIZEOF(16 - 6)); CreateGameFreakLogoSprites(120, 80, 0); gTasks[taskId].sBigDropSpriteId = CreateWaterDrop(236, -14, 0x200, 1, 0x78, FALSE); gTasks[taskId].func = Task_Scene1_FadeIn; @@ -1884,7 +1884,7 @@ static void Task_Scene3_Groudon(u8 taskId) if (--tDelay == 0) { tDelay = 2; - CpuCopy16(&gIntro3Bg_Pal[tPalIdx], &gPlttBufferFaded[31], sizeof(u16)); + CpuCopy16(&gIntro3Bg_Pal[tPalIdx], &gPlttBufferFaded[BG_PLTT_ID(1) + 15], PLTT_SIZEOF(1)); tPalIdx += 2; if (tPalIdx == 0x1EC) tState++; @@ -1901,7 +1901,7 @@ static void Task_Scene3_Groudon(u8 taskId) if (--tDelay == 0) { tDelay = 2; - CpuCopy16(&gIntro3Bg_Pal[tPalIdx], &gPlttBufferFaded[31], sizeof(u16)); + CpuCopy16(&gIntro3Bg_Pal[tPalIdx], &gPlttBufferFaded[BG_PLTT_ID(1) + 15], PLTT_SIZEOF(1)); tPalIdx -= 2; if (tPalIdx == 0x1E0) { @@ -2143,7 +2143,7 @@ static void Task_Scene3_Kyogre(u8 taskId) if (--tDelay == 0) { tDelay = 4; - CpuCopy16(&gIntro3Bg_Pal[tPalIdx], &gPlttBufferFaded[47], sizeof(u16)); + CpuCopy16(&gIntro3Bg_Pal[tPalIdx], &gPlttBufferFaded[BG_PLTT_ID(2) + 15], PLTT_SIZEOF(1)); tPalIdx -= 2; if (tPalIdx == 0x1E0) tState++; @@ -2161,7 +2161,7 @@ static void Task_Scene3_Kyogre(u8 taskId) if (--tDelay == 0) { tDelay = 4; - CpuCopy16(&gIntro3Bg_Pal[tPalIdx], &gPlttBufferFaded[47], sizeof(u16)); + CpuCopy16(&gIntro3Bg_Pal[tPalIdx], &gPlttBufferFaded[BG_PLTT_ID(2) + 15], PLTT_SIZEOF(1)); tPalIdx += 2; if (tPalIdx == 0x1EE) { @@ -2492,7 +2492,7 @@ static void SpriteCB_Lightning(struct Sprite *sprite) sprite->sPalIdx = 0x1C2; sprite->sState++; case 1: - CpuCopy16(&gIntro3Bg_Pal[sprite->sPalIdx], &gPlttBufferFaded[93], 2); + CpuCopy16(&gIntro3Bg_Pal[sprite->sPalIdx], &gPlttBufferFaded[BG_PLTT_ID(5) + 13], PLTT_SIZEOF(1)); sprite->sPalIdx += 2; if (sprite->sPalIdx != 0x1CE) break; @@ -2503,7 +2503,7 @@ static void SpriteCB_Lightning(struct Sprite *sprite) if (--sprite->sDelay == 0) { sprite->sDelay = 4; - CpuCopy16(&gIntro3Bg_Pal[sprite->sPalIdx], &gPlttBufferFaded[93], 2); + CpuCopy16(&gIntro3Bg_Pal[sprite->sPalIdx], &gPlttBufferFaded[BG_PLTT_ID(5) + 13], PLTT_SIZEOF(1)); sprite->sPalIdx -= 2; if (sprite->sPalIdx == 0x1C0) DestroySprite(sprite); @@ -2606,7 +2606,7 @@ static void Task_RayquazaAttack(u8 taskId) case 0: if ((data[2] & 1) != 0) { - CpuCopy16(&gIntro3Bg_Pal[0x1A2 + data[1] * 2], &gPlttBufferFaded[94], 2); + CpuCopy16(&gIntro3Bg_Pal[0x1A2 + data[1] * 2], &gPlttBufferFaded[BG_PLTT_ID(5) + 14], PLTT_SIZEOF(1)); data[1]++; } if (data[1] == 6) @@ -2621,7 +2621,7 @@ static void Task_RayquazaAttack(u8 taskId) { if ((data[2] & 1) != 0) { - CpuCopy16(&gIntro3Bg_Pal[0x1A2 + data[1] * 2], &gPlttBufferFaded[88], 2); + CpuCopy16(&gIntro3Bg_Pal[0x1A2 + data[1] * 2], &gPlttBufferFaded[BG_PLTT_ID(5) + 8], PLTT_SIZEOF(1)); data[1]++; } if (data[1] == 6) @@ -2640,7 +2640,7 @@ static void Task_RayquazaAttack(u8 taskId) { if ((data[2] & 1) != 0) { - CpuCopy16(&gIntro3Bg_Pal[0x182 + data[1] * 2], &gPlttBufferFaded[92], 2); + CpuCopy16(&gIntro3Bg_Pal[0x182 + data[1] * 2], &gPlttBufferFaded[BG_PLTT_ID(5) + 12], PLTT_SIZEOF(1)); data[1]++; } if (data[1] == 6) @@ -3197,16 +3197,16 @@ static void SpriteCB_LogoLetter(struct Sprite *sprite) sprite->sColorDelay = 2; if (sprite->sTimer != 0) { - CpuCopy16(&gIntroGameFreakTextFade_Pal[sprite->sTimer], &gPlttBufferFaded[0x11F], 2); - CpuCopy16(&gIntroGameFreakTextFade_Pal[sprite->sTimer + 16], &gPlttBufferFaded[0x114], 2); - CpuCopy16(&gIntroGameFreakTextFade_Pal[sprite->sTimer + 32], &gPlttBufferFaded[0x11A], 2); + CpuCopy16(&gIntroGameFreakTextFade_Pal[sprite->sTimer], &gPlttBufferFaded[OBJ_PLTT_ID(1) + 15], PLTT_SIZEOF(1)); + CpuCopy16(&gIntroGameFreakTextFade_Pal[sprite->sTimer + 16], &gPlttBufferFaded[OBJ_PLTT_ID(1) + 4], PLTT_SIZEOF(1)); + CpuCopy16(&gIntroGameFreakTextFade_Pal[sprite->sTimer + 32], &gPlttBufferFaded[OBJ_PLTT_ID(1) + 10], PLTT_SIZEOF(1)); sprite->sTimer--; } else { - CpuCopy16(&gIntroGameFreakTextFade_Pal[sprite->sTimer], &gPlttBufferFaded[0x11F], 2); - CpuCopy16(&gIntroGameFreakTextFade_Pal[sprite->sTimer + 16], &gPlttBufferFaded[0x114], 2); - CpuCopy16(&gIntroGameFreakTextFade_Pal[sprite->sTimer + 32], &gPlttBufferFaded[0x11A], 2); + CpuCopy16(&gIntroGameFreakTextFade_Pal[sprite->sTimer], &gPlttBufferFaded[OBJ_PLTT_ID(1) + 15], PLTT_SIZEOF(1)); + CpuCopy16(&gIntroGameFreakTextFade_Pal[sprite->sTimer + 16], &gPlttBufferFaded[OBJ_PLTT_ID(1) + 4], PLTT_SIZEOF(1)); + CpuCopy16(&gIntroGameFreakTextFade_Pal[sprite->sTimer + 32], &gPlttBufferFaded[OBJ_PLTT_ID(1) + 10], PLTT_SIZEOF(1)); sprite->sState++; } } @@ -3226,9 +3226,9 @@ static void SpriteCB_LogoLetter(struct Sprite *sprite) sprite->sColorDelay = 2; if (sprite->sTimer <= COLOR_CHANGES) { - CpuCopy16(&gIntroGameFreakTextFade_Pal[sprite->sTimer], &gPlttBufferFaded[0x11F], 2); - CpuCopy16(&gIntroGameFreakTextFade_Pal[sprite->sTimer + 16], &gPlttBufferFaded[0x114], 2); - CpuCopy16(&gIntroGameFreakTextFade_Pal[sprite->sTimer + 32], &gPlttBufferFaded[0x11A], 2); + CpuCopy16(&gIntroGameFreakTextFade_Pal[sprite->sTimer], &gPlttBufferFaded[OBJ_PLTT_ID(1) + 15], PLTT_SIZEOF(1)); + CpuCopy16(&gIntroGameFreakTextFade_Pal[sprite->sTimer + 16], &gPlttBufferFaded[OBJ_PLTT_ID(1) + 4], PLTT_SIZEOF(1)); + CpuCopy16(&gIntroGameFreakTextFade_Pal[sprite->sTimer + 32], &gPlttBufferFaded[OBJ_PLTT_ID(1) + 10], PLTT_SIZEOF(1)); sprite->sTimer++; } else diff --git a/src/intro_credits_graphics.c b/src/intro_credits_graphics.c index 7593a296e882..05b5a3a0507a 100644 --- a/src/intro_credits_graphics.c +++ b/src/intro_credits_graphics.c @@ -998,13 +998,13 @@ void CycleSceneryPalette(u8 mode) break; if (gMain.vblankCounter1 & 4) { - x = gPlttBufferUnfaded[9]; - y = gPlttBufferUnfaded[10]; + x = gPlttBufferUnfaded[BG_PLTT_ID(0) + 9]; + y = gPlttBufferUnfaded[BG_PLTT_ID(0) + 10]; } else { - x = gPlttBufferUnfaded[10]; - y = gPlttBufferUnfaded[9]; + x = gPlttBufferUnfaded[BG_PLTT_ID(0) + 10]; + y = gPlttBufferUnfaded[BG_PLTT_ID(0) + 9]; } LoadPalette(&x, BG_PLTT_ID(0) + 9, sizeof(x)); LoadPalette(&y, BG_PLTT_ID(0) + 10, sizeof(y)); diff --git a/src/link.c b/src/link.c index 06bde1e38f3e..0894021b564e 100644 --- a/src/link.c +++ b/src/link.c @@ -1650,7 +1650,7 @@ static void ErrorMsg_MoveCloserToPartner(void) DecompressAndLoadBgGfxUsingHeap(1, sWirelessLinkDisplayGfx, FALSE, 0, 0); CopyToBgTilemapBuffer(1, sWirelessLinkDisplayTilemap, 0, 0); CopyBgTilemapBufferToVram(1); - LoadPalette(sWirelessLinkDisplayPal, 0, 0x20); + LoadPalette(sWirelessLinkDisplayPal, BG_PLTT_ID(0), sizeof(sWirelessLinkDisplayPal)); FillWindowPixelBuffer(WIN_LINK_ERROR_TOP, PIXEL_FILL(0)); FillWindowPixelBuffer(WIN_LINK_ERROR_BOTTOM, PIXEL_FILL(0)); AddTextPrinterParameterized3(WIN_LINK_ERROR_TOP, FONT_SHORT_COPY_1, 2, 6, sTextColors, 0, gText_CommErrorEllipsis); diff --git a/src/list_menu.c b/src/list_menu.c index 546ec6f6cd52..e24442ca023c 100644 --- a/src/list_menu.c +++ b/src/list_menu.c @@ -316,7 +316,7 @@ static void ListMenuDummyTask(u8 taskId) } -s32 DoMysteryGiftListMenu(const struct WindowTemplate *windowTemplate, const struct ListMenuTemplate *listMenuTemplate, u8 drawMode, u16 tileNum, u16 palNum) +s32 DoMysteryGiftListMenu(const struct WindowTemplate *windowTemplate, const struct ListMenuTemplate *listMenuTemplate, u8 drawMode, u16 tileNum, u16 palOffset) { switch (sMysteryGiftLinkMenu.state) { @@ -326,9 +326,9 @@ s32 DoMysteryGiftListMenu(const struct WindowTemplate *windowTemplate, const str switch (drawMode) { case 2: - LoadUserWindowBorderGfx(sMysteryGiftLinkMenu.windowId, tileNum, palNum); + LoadUserWindowBorderGfx(sMysteryGiftLinkMenu.windowId, tileNum, palOffset); case 1: - DrawTextBorderOuter(sMysteryGiftLinkMenu.windowId, tileNum, palNum / 16); + DrawTextBorderOuter(sMysteryGiftLinkMenu.windowId, tileNum, palOffset / 16); break; } gMultiuseListMenuTemplate = *listMenuTemplate; diff --git a/src/mail.c b/src/mail.c index a6f3bc0ffdb4..424a286f3f32 100644 --- a/src/mail.c +++ b/src/mail.c @@ -551,9 +551,7 @@ static bool8 MailReadBuildGraphics(void) break; case 9: if (FreeTempTileDataBuffersIfPossible()) - { return FALSE; - } break; case 10: FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, DISPLAY_TILE_WIDTH, DISPLAY_TILE_HEIGHT); @@ -567,23 +565,20 @@ static bool8 MailReadBuildGraphics(void) break; case 12: LoadPalette(GetOverworldTextboxPalettePtr(), BG_PLTT_ID(15), PLTT_SIZE_4BPP); + gPlttBufferUnfaded[BG_PLTT_ID(15) + 10] = sMailGraphics[sMailRead->mailType].textColor; + gPlttBufferFaded[BG_PLTT_ID(15) + 10] = sMailGraphics[sMailRead->mailType].textColor; + gPlttBufferUnfaded[BG_PLTT_ID(15) + 11] = sMailGraphics[sMailRead->mailType].textShadow; + gPlttBufferFaded[BG_PLTT_ID(15) + 11] = sMailGraphics[sMailRead->mailType].textShadow; - gPlttBufferUnfaded[250] = sMailGraphics[sMailRead->mailType].textColor; - gPlttBufferFaded[250] = sMailGraphics[sMailRead->mailType].textColor; - gPlttBufferUnfaded[251] = sMailGraphics[sMailRead->mailType].textShadow; - gPlttBufferFaded[251] = sMailGraphics[sMailRead->mailType].textShadow; LoadPalette(sMailGraphics[sMailRead->mailType].palette, BG_PLTT_ID(0), PLTT_SIZE_4BPP); - - gPlttBufferUnfaded[10] = sBgColors[gSaveBlock2Ptr->playerGender][0]; - gPlttBufferFaded[10] = sBgColors[gSaveBlock2Ptr->playerGender][0]; - gPlttBufferUnfaded[11] = sBgColors[gSaveBlock2Ptr->playerGender][1]; - gPlttBufferFaded[11] = sBgColors[gSaveBlock2Ptr->playerGender][1]; + gPlttBufferUnfaded[BG_PLTT_ID(0) + 10] = sBgColors[gSaveBlock2Ptr->playerGender][0]; + gPlttBufferFaded[BG_PLTT_ID(0) + 10] = sBgColors[gSaveBlock2Ptr->playerGender][0]; + gPlttBufferUnfaded[BG_PLTT_ID(0) + 11] = sBgColors[gSaveBlock2Ptr->playerGender][1]; + gPlttBufferFaded[BG_PLTT_ID(0) + 11] = sBgColors[gSaveBlock2Ptr->playerGender][1]; break; case 13: if (sMailRead->hasText) - { BufferMailText(); - } break; case 14: if (sMailRead->hasText) diff --git a/src/main_menu.c b/src/main_menu.c index 6808a8f11a5e..ef4bbd636d34 100644 --- a/src/main_menu.c +++ b/src/main_menu.c @@ -1086,8 +1086,8 @@ static void Task_HandleMainMenuAPressed(u8 taskId) case ACTION_INVALID: gTasks[taskId].tCurrItem = 0; gTasks[taskId].func = Task_DisplayMainMenuInvalidActionError; - gPlttBufferUnfaded[0xF1] = RGB_WHITE; - gPlttBufferFaded[0xF1] = RGB_WHITE; + gPlttBufferUnfaded[BG_PLTT_ID(15) + 1] = RGB_WHITE; + gPlttBufferFaded[BG_PLTT_ID(15) + 1] = RGB_WHITE; SetGpuReg(REG_OFFSET_BG2HOFS, 0); SetGpuReg(REG_OFFSET_BG2VOFS, 0); SetGpuReg(REG_OFFSET_BG1HOFS, 0); diff --git a/src/mirage_tower.c b/src/mirage_tower.c index 01b87393aeed..f9806e77682c 100644 --- a/src/mirage_tower.c +++ b/src/mirage_tower.c @@ -8,6 +8,7 @@ #include "gpu_regs.h" #include "menu.h" #include "random.h" +#include "palette.h" #include "palette_util.h" #include "script.h" #include "sound.h" @@ -163,7 +164,7 @@ static const struct SpriteTemplate sSpriteTemplate_FallingFossil = const struct PulseBlendSettings gMirageTowerPulseBlendSettings = { .blendColor = RGB(27, 25, 16), - .paletteOffset = 0x61, + .paletteOffset = BG_PLTT_ID(6) + 1, .numColors = 15, .delay = 5, .numFadeCycles = -1, diff --git a/src/naming_screen.c b/src/naming_screen.c index 58c9f0f36977..6dd45aa7e1cd 100644 --- a/src/naming_screen.c +++ b/src/naming_screen.c @@ -978,10 +978,10 @@ static u16 GetButtonPalOffset(u8 button) { const u16 palOffsets[BUTTON_COUNT + 1] = { - [BUTTON_PAGE] = IndexOfSpritePaletteTag(PALTAG_PAGE_SWAP) * 16 + 0x10E, - [BUTTON_BACK] = IndexOfSpritePaletteTag(PALTAG_BACK_BUTTON) * 16 + 0x10E, - [BUTTON_OK] = IndexOfSpritePaletteTag(PALTAG_OK_BUTTON) * 16 + 0x10E, - [BUTTON_COUNT] = IndexOfSpritePaletteTag(PALTAG_OK_BUTTON) * 16 + 0x101, + [BUTTON_PAGE] = OBJ_PLTT_ID(IndexOfSpritePaletteTag(PALTAG_PAGE_SWAP)) + 14, + [BUTTON_BACK] = OBJ_PLTT_ID(IndexOfSpritePaletteTag(PALTAG_BACK_BUTTON)) + 14, + [BUTTON_OK] = OBJ_PLTT_ID(IndexOfSpritePaletteTag(PALTAG_OK_BUTTON)) + 14, + [BUTTON_COUNT] = OBJ_PLTT_ID(IndexOfSpritePaletteTag(PALTAG_OK_BUTTON)) + 1, }; return palOffsets[button]; @@ -1051,7 +1051,7 @@ static void SpriteCB_Cursor(struct Sprite *sprite) { s8 gb = sprite->sColor; s8 r = sprite->sColor >> 1; - u16 index = IndexOfSpritePaletteTag(PALTAG_CURSOR) * 16 + 0x0101; + u16 index = OBJ_PLTT_ID(IndexOfSpritePaletteTag(PALTAG_CURSOR)) + 1; MultiplyInvertedPaletteRGBComponents(index, r, gb, gb); } diff --git a/src/palette.c b/src/palette.c index 577257eff326..6ce47a4933d7 100644 --- a/src/palette.c +++ b/src/palette.c @@ -64,7 +64,7 @@ static EWRAM_DATA struct PaletteStruct sPaletteStructs[NUM_PALETTE_STRUCTS] = {0 EWRAM_DATA struct PaletteFadeControl gPaletteFade = {0}; static EWRAM_DATA u32 sFiller = 0; static EWRAM_DATA u32 sPlttBufferTransferPending = 0; -EWRAM_DATA u8 gPaletteDecompressionBuffer[PLTT_DECOMP_BUFFER_SIZE] = {0}; +EWRAM_DATA u8 gPaletteDecompressionBuffer[PLTT_SIZE] = {0}; static const struct PaletteStructTemplate sDummyPaletteStructTemplate = { .id = 0xFFFF, @@ -148,7 +148,7 @@ static void ReadPlttIntoBuffers(void) u16 i; u16 *pltt = (u16 *)PLTT; - for (i = 0; i < PLTT_SIZE / 2; i++) + for (i = 0; i < PLTT_BUFFER_SIZE; i++) { gPlttBufferUnfaded[i] = pltt[i]; gPlttBufferFaded[i] = pltt[i]; @@ -592,13 +592,13 @@ static u8 UpdateFastPaletteFade(void) if (gPaletteFade.objPaletteToggle) { - paletteOffsetStart = 256; - paletteOffsetEnd = 512; + paletteOffsetStart = OBJ_PLTT_OFFSET; + paletteOffsetEnd = PLTT_BUFFER_SIZE; } else { paletteOffsetStart = 0; - paletteOffsetEnd = 256; + paletteOffsetEnd = OBJ_PLTT_OFFSET; } switch (gPaletteFade_submode) diff --git a/src/party_menu.c b/src/party_menu.c index 61b694753c39..02c742dc90fa 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -776,11 +776,11 @@ static bool8 AllocPartyMenuBgGfx(void) return FALSE; } -static void PartyPaletteBufferCopy(u8 offset) +static void PartyPaletteBufferCopy(u8 palNum) { - offset *= 16; - CpuCopy16(&gPlttBufferUnfaded[0x30], &gPlttBufferUnfaded[offset], 32); - CpuCopy16(&gPlttBufferUnfaded[0x30], &gPlttBufferFaded[offset], 32); + u8 offset = PLTT_ID(palNum); + CpuCopy16(&gPlttBufferUnfaded[BG_PLTT_ID(3)], &gPlttBufferUnfaded[offset], PLTT_SIZE_4BPP); + CpuCopy16(&gPlttBufferUnfaded[BG_PLTT_ID(3)], &gPlttBufferFaded[offset], PLTT_SIZE_4BPP); } static void FreePartyPointers(void) @@ -2195,16 +2195,16 @@ static void DrawEmptySlot(u8 windowId) BlitBitmapToPartyWindow(windowId, sSlotTilemap_WideEmpty, 18, 0, 0, 18, 3); } -#define LOAD_PARTY_BOX_PAL(paletteIds, paletteOffsets) \ -{ \ - LoadPalette(GetPartyMenuPalBufferPtr(paletteIds[0]), paletteOffsets[0] + palNum, PLTT_SIZEOF(1)); \ - LoadPalette(GetPartyMenuPalBufferPtr(paletteIds[1]), paletteOffsets[1] + palNum, PLTT_SIZEOF(1)); \ - LoadPalette(GetPartyMenuPalBufferPtr(paletteIds[2]), paletteOffsets[2] + palNum, PLTT_SIZEOF(1)); \ +#define LOAD_PARTY_BOX_PAL(paletteIds, paletteOffsets) \ +{ \ + LoadPalette(GetPartyMenuPalBufferPtr(paletteIds[0]), paletteOffsets[0] + palOffset, PLTT_SIZEOF(1)); \ + LoadPalette(GetPartyMenuPalBufferPtr(paletteIds[1]), paletteOffsets[1] + palOffset, PLTT_SIZEOF(1)); \ + LoadPalette(GetPartyMenuPalBufferPtr(paletteIds[2]), paletteOffsets[2] + palOffset, PLTT_SIZEOF(1)); \ } static void LoadPartyBoxPalette(struct PartyMenuBox *menuBox, u8 palFlags) { - u8 palNum = GetWindowAttribute(menuBox->windowId, WINDOW_PALETTE_NUM) * 16; + u8 palOffset = BG_PLTT_ID(GetWindowAttribute(menuBox->windowId, WINDOW_PALETTE_NUM)); if (palFlags & PARTY_PAL_NO_MON) { @@ -2332,7 +2332,7 @@ static void DisplayPartyPokemonGenderNidoranCheck(struct Pokemon *mon, struct Pa static void DisplayPartyPokemonGender(u8 gender, u16 species, u8 *nickname, struct PartyMenuBox *menuBox) { - u8 palNum = GetWindowAttribute(menuBox->windowId, WINDOW_PALETTE_NUM) * 16; + u8 palOffset = BG_PLTT_ID(GetWindowAttribute(menuBox->windowId, WINDOW_PALETTE_NUM)); if (species == SPECIES_NONE) return; @@ -2341,13 +2341,13 @@ static void DisplayPartyPokemonGender(u8 gender, u16 species, u8 *nickname, stru switch (gender) { case MON_MALE: - LoadPalette(GetPartyMenuPalBufferPtr(sGenderMalePalIds[0]), sGenderPalOffsets[0] + palNum, PLTT_SIZEOF(1)); - LoadPalette(GetPartyMenuPalBufferPtr(sGenderMalePalIds[1]), sGenderPalOffsets[1] + palNum, PLTT_SIZEOF(1)); + LoadPalette(GetPartyMenuPalBufferPtr(sGenderMalePalIds[0]), sGenderPalOffsets[0] + palOffset, PLTT_SIZEOF(1)); + LoadPalette(GetPartyMenuPalBufferPtr(sGenderMalePalIds[1]), sGenderPalOffsets[1] + palOffset, PLTT_SIZEOF(1)); DisplayPartyPokemonBarDetail(menuBox->windowId, gText_MaleSymbol, 2, &menuBox->infoRects->dimensions[8]); break; case MON_FEMALE: - LoadPalette(GetPartyMenuPalBufferPtr(sGenderFemalePalIds[0]), sGenderPalOffsets[0] + palNum, PLTT_SIZEOF(1)); - LoadPalette(GetPartyMenuPalBufferPtr(sGenderFemalePalIds[1]), sGenderPalOffsets[1] + palNum, PLTT_SIZEOF(1)); + LoadPalette(GetPartyMenuPalBufferPtr(sGenderFemalePalIds[0]), sGenderPalOffsets[0] + palOffset, PLTT_SIZEOF(1)); + LoadPalette(GetPartyMenuPalBufferPtr(sGenderFemalePalIds[1]), sGenderPalOffsets[1] + palOffset, PLTT_SIZEOF(1)); DisplayPartyPokemonBarDetail(menuBox->windowId, gText_FemaleSymbol, 2, &menuBox->infoRects->dimensions[8]); break; } @@ -2401,23 +2401,23 @@ static void DisplayPartyPokemonHPBarCheck(struct Pokemon *mon, struct PartyMenuB static void DisplayPartyPokemonHPBar(u16 hp, u16 maxhp, struct PartyMenuBox *menuBox) { - u8 palNum = GetWindowAttribute(menuBox->windowId, WINDOW_PALETTE_NUM) * 16; + u8 palOffset = BG_PLTT_ID(GetWindowAttribute(menuBox->windowId, WINDOW_PALETTE_NUM)); u8 hpFraction; switch (GetHPBarLevel(hp, maxhp)) { case HP_BAR_GREEN: case HP_BAR_FULL: - LoadPalette(GetPartyMenuPalBufferPtr(sHPBarGreenPalIds[0]), sHPBarPalOffsets[0] + palNum, PLTT_SIZEOF(1)); - LoadPalette(GetPartyMenuPalBufferPtr(sHPBarGreenPalIds[1]), sHPBarPalOffsets[1] + palNum, PLTT_SIZEOF(1)); + LoadPalette(GetPartyMenuPalBufferPtr(sHPBarGreenPalIds[0]), sHPBarPalOffsets[0] + palOffset, PLTT_SIZEOF(1)); + LoadPalette(GetPartyMenuPalBufferPtr(sHPBarGreenPalIds[1]), sHPBarPalOffsets[1] + palOffset, PLTT_SIZEOF(1)); break; case HP_BAR_YELLOW: - LoadPalette(GetPartyMenuPalBufferPtr(sHPBarYellowPalIds[0]), sHPBarPalOffsets[0] + palNum, PLTT_SIZEOF(1)); - LoadPalette(GetPartyMenuPalBufferPtr(sHPBarYellowPalIds[1]), sHPBarPalOffsets[1] + palNum, PLTT_SIZEOF(1)); + LoadPalette(GetPartyMenuPalBufferPtr(sHPBarYellowPalIds[0]), sHPBarPalOffsets[0] + palOffset, PLTT_SIZEOF(1)); + LoadPalette(GetPartyMenuPalBufferPtr(sHPBarYellowPalIds[1]), sHPBarPalOffsets[1] + palOffset, PLTT_SIZEOF(1)); break; default: - LoadPalette(GetPartyMenuPalBufferPtr(sHPBarRedPalIds[0]), sHPBarPalOffsets[0] + palNum, PLTT_SIZEOF(1)); - LoadPalette(GetPartyMenuPalBufferPtr(sHPBarRedPalIds[1]), sHPBarPalOffsets[1] + palNum, PLTT_SIZEOF(1)); + LoadPalette(GetPartyMenuPalBufferPtr(sHPBarRedPalIds[0]), sHPBarPalOffsets[0] + palOffset, PLTT_SIZEOF(1)); + LoadPalette(GetPartyMenuPalBufferPtr(sHPBarRedPalIds[1]), sHPBarPalOffsets[1] + palOffset, PLTT_SIZEOF(1)); break; } diff --git a/src/pokedex.c b/src/pokedex.c index 88558d6f2cfa..5a2667759e90 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -3264,7 +3264,7 @@ static void Task_LoadInfoScreen(u8 taskId) case 4: PrintMonInfo(sPokedexListItem->dexNum, sPokedexView->dexMode == DEX_MODE_HOENN ? FALSE : TRUE, sPokedexListItem->owned, 0); if (!sPokedexListItem->owned) - LoadPalette(gPlttBufferUnfaded + 1, BG_PLTT_ID(3) + 1, PLTT_SIZEOF(16 - 1)); + LoadPalette(&gPlttBufferUnfaded[BG_PLTT_ID(0) + 1], BG_PLTT_ID(3) + 1, PLTT_SIZEOF(16 - 1)); CopyWindowToVram(WIN_INFO, COPYWIN_FULL); CopyBgTilemapBufferToVram(1); CopyBgTilemapBufferToVram(2); diff --git a/src/pokedex_area_region_map.c b/src/pokedex_area_region_map.c index ff32f8eef134..da50f8c688e6 100644 --- a/src/pokedex_area_region_map.c +++ b/src/pokedex_area_region_map.c @@ -41,7 +41,7 @@ void LoadPokedexAreaMapGfx(const struct PokedexAreaMapTemplate *template) ChangeBgX(template->bg, 0, BG_COORD_SET); ChangeBgY(template->bg, 0, BG_COORD_SET); SetBgAttribute(template->bg, BG_ATTR_PALETTEMODE, 1); - CpuCopy32(sPokedexAreaMap_Pal, &gPlttBufferUnfaded[0x70], sizeof(sPokedexAreaMap_Pal)); + CpuCopy32(sPokedexAreaMap_Pal, &gPlttBufferUnfaded[BG_PLTT_ID(7)], sizeof(sPokedexAreaMap_Pal)); *sPokedexAreaMapBgNum = template->bg; } diff --git a/src/pokedex_area_screen.c b/src/pokedex_area_screen.c index 01cbacb44732..f9181a985b6e 100755 --- a/src/pokedex_area_screen.c +++ b/src/pokedex_area_screen.c @@ -224,7 +224,7 @@ static bool8 DrawAreaGlow(void) case 3: if (!FreeTempTileDataBuffersIfPossible()) { - CpuCopy32(sAreaGlow_Pal, &gPlttBufferUnfaded[GLOW_PALETTE * 16], sizeof(sAreaGlow_Pal)); + CpuCopy32(sAreaGlow_Pal, &gPlttBufferUnfaded[BG_PLTT_ID(GLOW_PALETTE)], sizeof(sAreaGlow_Pal)); sPokedexAreaScreen->drawAreaGlowState++; } return TRUE; diff --git a/src/pokemon_icon.c b/src/pokemon_icon.c index 237f728381e2..8e37018cba6a 100644 --- a/src/pokemon_icon.c +++ b/src/pokemon_icon.c @@ -1199,16 +1199,12 @@ const u8 *GetMonIconTiles(u16 species, bool32 handleDeoxys) void TryLoadAllMonIconPalettesAtOffset(u16 offset) { s32 i; - const struct SpritePalette* monIconPalettePtr; - - if (offset <= BG_PLTT_ID(10)) + if (offset <= BG_PLTT_ID(16 - ARRAY_COUNT(gMonIconPaletteTable))) { - monIconPalettePtr = gMonIconPaletteTable; - for (i = ARRAY_COUNT(gMonIconPaletteTable) - 1; i >= 0; i--) + for (i = 0; i < (int)ARRAY_COUNT(gMonIconPaletteTable); i++) { - LoadPalette(monIconPalettePtr->data, offset, PLTT_SIZE_4BPP); - offset += 0x10; - monIconPalettePtr++; + LoadPalette(gMonIconPaletteTable[i].data, offset, PLTT_SIZE_4BPP); + offset += 16; } } } diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index 8649e3ce7989..99b0dae0e7bc 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -5490,7 +5490,7 @@ static void InitBoxTitle(u8 boxId) tagIndex = IndexOfSpritePaletteTag(PALTAG_BOX_TITLE); sStorage->boxTitlePalOffset = OBJ_PLTT_ID(tagIndex) + 14; - sStorage->wallpaperPalBits |= 0x10000 << tagIndex; + sStorage->wallpaperPalBits |= (1 << 16) << tagIndex; // The below seems intended to have separately tracked // the incoming wallpaper title's palette, but as they now @@ -5498,7 +5498,7 @@ static void InitBoxTitle(u8 boxId) // this is redundant along with the use of boxTitleAltPalOffset tagIndex = IndexOfSpritePaletteTag(PALTAG_BOX_TITLE); sStorage->boxTitleAltPalOffset = OBJ_PLTT_ID(tagIndex) + 14; - sStorage->wallpaperPalBits |= 0x10000 << tagIndex; + sStorage->wallpaperPalBits |= (1 << 16) << tagIndex; StringCopyPadded(sStorage->boxTitleText, GetBoxNamePtr(boxId), 0, BOX_NAME_LENGTH); DrawTextWindowAndBufferTiles(sStorage->boxTitleText, sStorage->boxTitleTiles, 0, 0, 2); @@ -5616,9 +5616,9 @@ static void CycleBoxTitleColor(void) u8 boxId = StorageGetCurrentBox(); u8 wallpaperId = GetBoxWallpaper(boxId); if (sStorage->boxTitleCycleId == 0) - CpuCopy16(sBoxTitleColors[wallpaperId], gPlttBufferUnfaded + sStorage->boxTitlePalOffset, 4); + CpuCopy16(sBoxTitleColors[wallpaperId], &gPlttBufferUnfaded[sStorage->boxTitlePalOffset], PLTT_SIZEOF(2)); else - CpuCopy16(sBoxTitleColors[wallpaperId], gPlttBufferUnfaded + sStorage->boxTitleAltPalOffset, 4); + CpuCopy16(sBoxTitleColors[wallpaperId], &gPlttBufferUnfaded[sStorage->boxTitleAltPalOffset], PLTT_SIZEOF(2)); } static s16 GetBoxTitleBaseX(const u8 *string) @@ -8746,8 +8746,7 @@ static void CreateItemIconSprites(void) LoadCompressedSpriteSheet(&spriteSheet); sStorage->itemIcons[i].tiles = GetSpriteTileStartByTag(spriteSheet.tag) * TILE_SIZE_4BPP + (void *)(OBJ_VRAM0); sStorage->itemIcons[i].palIndex = AllocSpritePalette(PALTAG_ITEM_ICON_0 + i); - sStorage->itemIcons[i].palIndex *= 16; - sStorage->itemIcons[i].palIndex += 0x100; + sStorage->itemIcons[i].palIndex = OBJ_PLTT_ID(sStorage->itemIcons[i].palIndex); spriteTemplate.tileTag = GFXTAG_ITEM_ICON_0 + i; spriteTemplate.paletteTag = PALTAG_ITEM_ICON_0 + i; spriteId = CreateSprite(&spriteTemplate, 0, 0, 11); diff --git a/src/pokenav_conditions_search_results.c b/src/pokenav_conditions_search_results.c index d3764cb80213..181739802004 100644 --- a/src/pokenav_conditions_search_results.c +++ b/src/pokenav_conditions_search_results.c @@ -432,7 +432,7 @@ static u32 LoopedTask_OpenConditionSearchResults(s32 state) SetBgTilemapBuffer(1, gfx->buff); CopyToBgTilemapBuffer(1, sConditionSearchResultTilemap, 0, 0); CopyBgTilemapBufferToVram(1); - CopyPaletteIntoBufferUnfaded(sConditionSearchResultFramePal, BG_PLTT_ID(1), PLTT_SIZE_4BPP); + CopyPaletteIntoBufferUnfaded(sConditionSearchResultFramePal, BG_PLTT_ID(1), sizeof(sConditionSearchResultFramePal)); CopyBgTilemapBufferToVram(1); return LT_INC_AND_PAUSE; case 1: @@ -444,7 +444,7 @@ static u32 LoopedTask_OpenConditionSearchResults(s32 state) case 2: if (FreeTempTileDataBuffersIfPossible()) return LT_PAUSE; - CopyPaletteIntoBufferUnfaded(sListBg_Pal, BG_PLTT_ID(2), PLTT_SIZE_4BPP); + CopyPaletteIntoBufferUnfaded(sListBg_Pal, BG_PLTT_ID(2), sizeof(sListBg_Pal)); CreateSearchResultsList(); return LT_INC_AND_PAUSE; case 3: diff --git a/src/pokenav_main_menu.c b/src/pokenav_main_menu.c index bfc5ba0cb4f7..761f572d6bda 100644 --- a/src/pokenav_main_menu.c +++ b/src/pokenav_main_menu.c @@ -443,7 +443,7 @@ static u32 LoopedTask_SlideMenuHeaderDown(s32 state) void CopyPaletteIntoBufferUnfaded(const u16 *palette, u32 bufferOffset, u32 size) { - CpuCopy16(palette, gPlttBufferUnfaded + bufferOffset, size); + CpuCopy16(palette, &gPlttBufferUnfaded[bufferOffset], size); } void Pokenav_AllocAndLoadPalettes(const struct SpritePalette *palettes) @@ -468,7 +468,7 @@ void Pokenav_AllocAndLoadPalettes(const struct SpritePalette *palettes) void PokenavFillPalette(u32 palIndex, u16 fillValue) { - CpuFill16(fillValue, gPlttBufferFaded + 0x100 + (palIndex * 16), 16 * sizeof(u16)); + CpuFill16(fillValue, &gPlttBufferFaded[OBJ_PLTT_ID(palIndex)], PLTT_SIZE_4BPP); } void PokenavCopyPalette(const u16 *src, const u16 *dest, int size, int a3, int a4, u16 *palette) diff --git a/src/pokenav_match_call_gfx.c b/src/pokenav_match_call_gfx.c index 1747d3ef0b99..4271e2ff23b9 100755 --- a/src/pokenav_match_call_gfx.c +++ b/src/pokenav_match_call_gfx.c @@ -333,7 +333,7 @@ static u32 LoopedTask_OpenMatchCall(s32 state) SetBgTilemapBuffer(2, gfx->bgTilemapBuffer2); CopyToBgTilemapBuffer(2, sMatchCallUI_Tilemap, 0, 0); CopyBgTilemapBufferToVram(2); - CopyPaletteIntoBufferUnfaded(sMatchCallUI_Pal, BG_PLTT_ID(2), PLTT_SIZE_4BPP); + CopyPaletteIntoBufferUnfaded(sMatchCallUI_Pal, BG_PLTT_ID(2), sizeof(sMatchCallUI_Pal)); CopyBgTilemapBufferToVram(2); return LT_INC_AND_PAUSE; case 1: @@ -343,7 +343,7 @@ static u32 LoopedTask_OpenMatchCall(s32 state) BgDmaFill(1, 0, 0, 1); SetBgTilemapBuffer(1, gfx->bgTilemapBuffer1); FillBgTilemapBufferRect_Palette0(1, 0x1000, 0, 0, 32, 20); - CopyPaletteIntoBufferUnfaded(sCallWindow_Pal, BG_PLTT_ID(1), PLTT_SIZE_4BPP); + CopyPaletteIntoBufferUnfaded(sCallWindow_Pal, BG_PLTT_ID(1), sizeof(sCallWindow_Pal)); CopyBgTilemapBufferToVram(1); return LT_INC_AND_PAUSE; case 2: @@ -352,7 +352,7 @@ static u32 LoopedTask_OpenMatchCall(s32 state) LoadCallWindowAndFade(gfx); DecompressAndCopyTileDataToVram(3, sPokeball_Gfx, 0, 0, 0); - CopyPaletteIntoBufferUnfaded(sListWindow_Pal, BG_PLTT_ID(3), PLTT_SIZE_4BPP); + CopyPaletteIntoBufferUnfaded(sListWindow_Pal, BG_PLTT_ID(3), sizeof(sListWindow_Pal)); CopyPaletteIntoBufferUnfaded(sPokeball_Pal, BG_PLTT_ID(5), PLTT_SIZE_4BPP); return LT_INC_AND_PAUSE; case 3: @@ -913,9 +913,9 @@ static void Task_FlashPokeballIcons(u8 taskId) tSinIdx += 4; tSinIdx &= 0x7F; tSinVal = gSineTable[tSinIdx] >> 4; - PokenavCopyPalette(sPokeball_Pal, &sPokeball_Pal[0x10], 0x10, 0x10, tSinVal, &gPlttBufferUnfaded[0x50]); + PokenavCopyPalette(sPokeball_Pal, &sPokeball_Pal[0x10], 0x10, 0x10, tSinVal, &gPlttBufferUnfaded[BG_PLTT_ID(5)]); if (!gPaletteFade.active) - CpuCopy32(&gPlttBufferUnfaded[0x50], &gPlttBufferFaded[0x50], 0x20); + CpuCopy32(&gPlttBufferUnfaded[BG_PLTT_ID(5)], &gPlttBufferFaded[BG_PLTT_ID(5)], PLTT_SIZE_4BPP); } } diff --git a/src/pokenav_menu_handler_gfx.c b/src/pokenav_menu_handler_gfx.c index 336744236224..ede88affdbee 100644 --- a/src/pokenav_menu_handler_gfx.c +++ b/src/pokenav_menu_handler_gfx.c @@ -470,14 +470,14 @@ static u32 LoopedTask_OpenMenu(s32 state) return LT_PAUSE; DecompressAndCopyTileDataToVram(2, sPokenavDeviceBgTiles, 0, 0, 0); DecompressAndCopyTileDataToVram(2, sPokenavDeviceBgTilemap, 0, 0, 1); - CopyPaletteIntoBufferUnfaded(sPokenavDeviceBgPal, BG_PLTT_ID(2), PLTT_SIZE_4BPP); + CopyPaletteIntoBufferUnfaded(sPokenavDeviceBgPal, BG_PLTT_ID(2), sizeof(sPokenavDeviceBgPal)); return LT_INC_AND_PAUSE; case 2: if (FreeTempTileDataBuffersIfPossible()) return LT_PAUSE; DecompressAndCopyTileDataToVram(3, sPokenavBgDotsTiles, 0, 0, 0); DecompressAndCopyTileDataToVram(3, sPokenavBgDotsTilemap, 0, 0, 1); - CopyPaletteIntoBufferUnfaded(sPokenavBgDotsPal, BG_PLTT_ID(3), PLTT_SIZE_4BPP); + CopyPaletteIntoBufferUnfaded(sPokenavBgDotsPal, BG_PLTT_ID(3), sizeof(sPokenavBgDotsPal)); if (GetPokenavMenuType() == POKENAV_MENU_TYPE_CONDITION || GetPokenavMenuType() == POKENAV_MENU_TYPE_CONDITION_SEARCH) ChangeBgDotsColorToPurple(); return LT_INC_AND_PAUSE; diff --git a/src/pokenav_region_map.c b/src/pokenav_region_map.c index 50f01345c8d8..e589e28187b7 100755 --- a/src/pokenav_region_map.c +++ b/src/pokenav_region_map.c @@ -515,7 +515,7 @@ static void LoadPokenavRegionMapGfx(struct Pokenav_RegionMapGfx *state) FillWindowPixelBuffer(state->infoWindowId, PIXEL_FILL(1)); PutWindowTilemap(state->infoWindowId); CopyWindowToVram(state->infoWindowId, COPYWIN_FULL); - CopyPaletteIntoBufferUnfaded(sMapSecInfoWindow_Pal, BG_PLTT_ID(1), PLTT_SIZE_4BPP); + CopyPaletteIntoBufferUnfaded(sMapSecInfoWindow_Pal, BG_PLTT_ID(1), sizeof(sMapSecInfoWindow_Pal)); CopyPaletteIntoBufferUnfaded(gRegionMapCityZoomTiles_Pal, BG_PLTT_ID(3), PLTT_SIZE_4BPP); if (!IsRegionMapZoomed()) ChangeBgY(1, -0x6000, BG_COORD_SET); diff --git a/src/pokenav_ribbons_list.c b/src/pokenav_ribbons_list.c index c1ca7f9d92c0..344b44f00914 100644 --- a/src/pokenav_ribbons_list.c +++ b/src/pokenav_ribbons_list.c @@ -432,7 +432,7 @@ static u32 LoopedTask_OpenRibbonsMonList(s32 state) DecompressAndCopyTileDataToVram(1, sMonRibbonListFrameTiles, 0, 0, 0); SetBgTilemapBuffer(1, menu->buff); CopyToBgTilemapBuffer(1, sMonRibbonListFrameTilemap, 0, 0); - CopyPaletteIntoBufferUnfaded(sMonRibbonListFramePal, BG_PLTT_ID(1), PLTT_SIZE_4BPP); + CopyPaletteIntoBufferUnfaded(sMonRibbonListFramePal, BG_PLTT_ID(1), sizeof(sMonRibbonListFramePal)); CopyBgTilemapBufferToVram(1); return LT_INC_AND_PAUSE; case 1: @@ -447,7 +447,7 @@ static u32 LoopedTask_OpenRibbonsMonList(s32 state) case 2: if (FreeTempTileDataBuffersIfPossible()) return LT_PAUSE; - CopyPaletteIntoBufferUnfaded(sMonRibbonListUi_Pal, BG_PLTT_ID(2), PLTT_SIZE_4BPP); + CopyPaletteIntoBufferUnfaded(sMonRibbonListUi_Pal, BG_PLTT_ID(2), sizeof(sMonRibbonListUi_Pal)); CreateRibbonMonsList(); return LT_INC_AND_PAUSE; case 3: diff --git a/src/pokenav_ribbons_summary.c b/src/pokenav_ribbons_summary.c index 4861b8e0ea1d..e77f839a808c 100644 --- a/src/pokenav_ribbons_summary.c +++ b/src/pokenav_ribbons_summary.c @@ -584,7 +584,7 @@ static u32 LoopedTask_OpenRibbonsSummaryMenu(s32 state) SetBgTilemapBuffer(1, menu->tilemapBuffers[1]); FillBgTilemapBufferRect_Palette0(1, 0, 0, 0, 32, 20); CopyPaletteIntoBufferUnfaded(sRibbonIcons1_Pal, BG_PLTT_ID(2), 5 * PLTT_SIZE_4BPP); - CopyPaletteIntoBufferUnfaded(sMonInfo_Pal, BG_PLTT_ID(10), PLTT_SIZE_4BPP); + CopyPaletteIntoBufferUnfaded(sMonInfo_Pal, BG_PLTT_ID(10), sizeof(sMonInfo_Pal)); CopyBgTilemapBufferToVram(1); return LT_INC_AND_PAUSE; } diff --git a/src/region_map.c b/src/region_map.c index ebe3afb8e9d5..f6123359be8b 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -621,7 +621,7 @@ bool8 LoadRegionMapGfx(void) void BlendRegionMap(u16 color, u32 coeff) { BlendPalettes(0x380, coeff, color); - CpuCopy16(gPlttBufferFaded + 0x70, gPlttBufferUnfaded + 0x70, 0x60); + CpuCopy16(&gPlttBufferFaded[BG_PLTT_ID(7)], &gPlttBufferUnfaded[BG_PLTT_ID(7)], 3 * PLTT_SIZE_4BPP); } void FreeRegionMapIconResources(void) diff --git a/src/roulette.c b/src/roulette.c index 06561f7988a7..d311ad094081 100644 --- a/src/roulette.c +++ b/src/roulette.c @@ -860,7 +860,7 @@ static const struct RouletteFlashSettings sFlashData_Colors[NUM_ROULETTE_SLOTS + { { // F_FLASH_COLOR_O_WYNAUT .color = FLASHUTIL_USE_EXISTING_COLOR, - .paletteOffset = 0x5, + .paletteOffset = BG_PLTT_ID(0) + 5, .numColors = 1, .delay = 1, .unk6 = -1, @@ -870,7 +870,7 @@ static const struct RouletteFlashSettings sFlashData_Colors[NUM_ROULETTE_SLOTS + }, { // F_FLASH_COLOR_G_AZURILL .color = FLASHUTIL_USE_EXISTING_COLOR, - .paletteOffset = 0xA, + .paletteOffset = BG_PLTT_ID(0) + 10, .numColors = 1, .delay = 1, .unk6 = -1, @@ -880,7 +880,7 @@ static const struct RouletteFlashSettings sFlashData_Colors[NUM_ROULETTE_SLOTS + }, { // F_FLASH_COLOR_P_SKITTY .color = FLASHUTIL_USE_EXISTING_COLOR, - .paletteOffset = 0x15, + .paletteOffset = BG_PLTT_ID(1) + 5, .numColors = 1, .delay = 1, .unk6 = -1, @@ -890,7 +890,7 @@ static const struct RouletteFlashSettings sFlashData_Colors[NUM_ROULETTE_SLOTS + }, { // F_FLASH_COLOR_O_MAKUHITA .color = FLASHUTIL_USE_EXISTING_COLOR, - .paletteOffset = 0x55, + .paletteOffset = BG_PLTT_ID(5) + 5, .numColors = 1, .delay = 1, .unk6 = -1, @@ -900,7 +900,7 @@ static const struct RouletteFlashSettings sFlashData_Colors[NUM_ROULETTE_SLOTS + }, { // F_FLASH_COLOR_G_WYNAUT .color = FLASHUTIL_USE_EXISTING_COLOR, - .paletteOffset = 0x5A, + .paletteOffset = BG_PLTT_ID(5) + 10, .numColors = 1, .delay = 1, .unk6 = -1, @@ -910,7 +910,7 @@ static const struct RouletteFlashSettings sFlashData_Colors[NUM_ROULETTE_SLOTS + }, { // F_FLASH_COLOR_P_AZURILL .color = FLASHUTIL_USE_EXISTING_COLOR, - .paletteOffset = 0x65, + .paletteOffset = BG_PLTT_ID(6) + 5, .numColors = 1, .delay = 1, .unk6 = -1, @@ -920,7 +920,7 @@ static const struct RouletteFlashSettings sFlashData_Colors[NUM_ROULETTE_SLOTS + }, { // F_FLASH_COLOR_O_SKITTY .color = FLASHUTIL_USE_EXISTING_COLOR, - .paletteOffset = 0x75, + .paletteOffset = BG_PLTT_ID(7) + 5, .numColors = 1, .delay = 1, .unk6 = -1, @@ -930,7 +930,7 @@ static const struct RouletteFlashSettings sFlashData_Colors[NUM_ROULETTE_SLOTS + }, { // F_FLASH_COLOR_G_MAKUHITA .color = FLASHUTIL_USE_EXISTING_COLOR, - .paletteOffset = 0x7A, + .paletteOffset = BG_PLTT_ID(7) + 10, .numColors = 1, .delay = 1, .unk6 = -1, @@ -940,7 +940,7 @@ static const struct RouletteFlashSettings sFlashData_Colors[NUM_ROULETTE_SLOTS + }, { // F_FLASH_COLOR_P_WYNAUT .color = FLASHUTIL_USE_EXISTING_COLOR, - .paletteOffset = 0x85, + .paletteOffset = BG_PLTT_ID(8) + 5, .numColors = 1, .delay = 1, .unk6 = -1, @@ -950,7 +950,7 @@ static const struct RouletteFlashSettings sFlashData_Colors[NUM_ROULETTE_SLOTS + }, { // F_FLASH_COLOR_O_AZURILL .color = FLASHUTIL_USE_EXISTING_COLOR, - .paletteOffset = 0x95, + .paletteOffset = BG_PLTT_ID(9) + 5, .numColors = 1, .delay = 1, .unk6 = -1, @@ -960,7 +960,7 @@ static const struct RouletteFlashSettings sFlashData_Colors[NUM_ROULETTE_SLOTS + }, { // F_FLASH_COLOR_G_SKITTY .color = FLASHUTIL_USE_EXISTING_COLOR, - .paletteOffset = 0x9A, + .paletteOffset = BG_PLTT_ID(9) + 10, .numColors = 1, .delay = 1, .unk6 = -1, @@ -970,7 +970,7 @@ static const struct RouletteFlashSettings sFlashData_Colors[NUM_ROULETTE_SLOTS + }, { // F_FLASH_COLOR_P_MAKUHITA .color = FLASHUTIL_USE_EXISTING_COLOR, - .paletteOffset = 0xA5, + .paletteOffset = BG_PLTT_ID(10) + 5, .numColors = 1, .delay = 1, .unk6 = -1, @@ -980,7 +980,7 @@ static const struct RouletteFlashSettings sFlashData_Colors[NUM_ROULETTE_SLOTS + }, { // F_FLASH_OUTER_EDGES .color = RGB(22, 30, 29), - .paletteOffset = 0x28, + .paletteOffset = BG_PLTT_ID(2) + 8, .numColors = 2, .delay = 10, .unk6 = -1, @@ -996,7 +996,7 @@ static const struct RouletteFlashSettings sFlashData_PokeIcons[NUM_BOARD_COLORS] { [GET_ROW_IDX(ROW_ORANGE)] = { .color = RGB(31, 31, 20), - .paletteOffset = 0x101, + .paletteOffset = OBJ_PLTT_ID(0) + 1, .numColors = 5, .delay = 30, .unk6 = -1, @@ -1006,7 +1006,7 @@ static const struct RouletteFlashSettings sFlashData_PokeIcons[NUM_BOARD_COLORS] }, [GET_ROW_IDX(ROW_GREEN)] = { .color = RGB(27, 31, 31), - .paletteOffset = 0x106, + .paletteOffset = OBJ_PLTT_ID(0) + 6, .numColors = 5, .delay = 30, .unk6 = -1, @@ -1016,7 +1016,7 @@ static const struct RouletteFlashSettings sFlashData_PokeIcons[NUM_BOARD_COLORS] }, [GET_ROW_IDX(ROW_PURPLE)] = { .color = RGB(31, 27, 31), - .paletteOffset = 0x10B, + .paletteOffset = OBJ_PLTT_ID(0) + 11, .numColors = 5, .delay = 30, .unk6 = -1, @@ -1129,9 +1129,9 @@ static void InitRouletteTableData(void) // Left table (with min bet of 1) has red background, other table has green if (sRoulette->minBet == 1) - gPlttBufferUnfaded[0] = gPlttBufferUnfaded[0x51] = gPlttBufferFaded[0] = gPlttBufferFaded[0x51] = bgColors[0]; + gPlttBufferUnfaded[BG_PLTT_ID(0)] = gPlttBufferUnfaded[BG_PLTT_ID(5) + 1] = gPlttBufferFaded[BG_PLTT_ID(0)] = gPlttBufferFaded[BG_PLTT_ID(5) + 1] = bgColors[0]; else - gPlttBufferUnfaded[0] = gPlttBufferUnfaded[0x51] = gPlttBufferFaded[0] = gPlttBufferFaded[0x51] = bgColors[1]; + gPlttBufferUnfaded[BG_PLTT_ID(0)] = gPlttBufferUnfaded[BG_PLTT_ID(5) + 1] = gPlttBufferFaded[BG_PLTT_ID(0)] = gPlttBufferFaded[BG_PLTT_ID(5) + 1] = bgColors[1]; RouletteFlash_Reset(&sRoulette->flashUtil); diff --git a/src/scrcmd.c b/src/scrcmd.c index 18a56631d3d5..bf4ec38f448b 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -649,12 +649,12 @@ bool8 ScrCmd_fadescreenswapbuffers(struct ScriptContext *ctx) case FADE_TO_BLACK: case FADE_TO_WHITE: default: - CpuCopy32(gPlttBufferUnfaded, gPaletteDecompressionBuffer, PLTT_DECOMP_BUFFER_SIZE); + CpuCopy32(gPlttBufferUnfaded, gPaletteDecompressionBuffer, PLTT_SIZE); FadeScreen(mode, 0); break; case FADE_FROM_BLACK: case FADE_FROM_WHITE: - CpuCopy32(gPaletteDecompressionBuffer, gPlttBufferUnfaded, PLTT_DECOMP_BUFFER_SIZE); + CpuCopy32(gPaletteDecompressionBuffer, gPlttBufferUnfaded, PLTT_SIZE); FadeScreen(mode, 0); break; } diff --git a/src/slot_machine.c b/src/slot_machine.c index 2fc0e2c03541..581e5c78e00c 100644 --- a/src/slot_machine.c +++ b/src/slot_machine.c @@ -4427,7 +4427,7 @@ static void SpriteCB_ReelTimePikachuAura(struct Sprite *sprite) u8 colors[] = {16, 0}; if (sprite->sFlashPal && --sprite->sDelayTimer <= 0) { - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(PALTAG_PIKA_AURA) << 4) + 0x103, colors[sprite->sColorIdx], colors[sprite->sColorIdx], colors[sprite->sColorIdx]); + MultiplyInvertedPaletteRGBComponents(OBJ_PLTT_ID(IndexOfSpritePaletteTag(PALTAG_PIKA_AURA)) + 3, colors[sprite->sColorIdx], colors[sprite->sColorIdx], colors[sprite->sColorIdx]); ++sprite->sColorIdx; sprite->sColorIdx &= 1; sprite->sDelayTimer = sprite->sDelay; @@ -4442,7 +4442,7 @@ static void SetReelTimePikachuAuraFlashDelay(s16 delay) static void DestroyReelTimePikachuAuraSprites(void) { u8 i; - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(PALTAG_PIKA_AURA) << 4) + 0x103, 0, 0, 0); + MultiplyInvertedPaletteRGBComponents(OBJ_PLTT_ID(IndexOfSpritePaletteTag(PALTAG_PIKA_AURA)) + 3, 0, 0, 0); for (i = 0; i < ARRAY_COUNT(sSlotMachine->reelTimePikachuAuraSpriteIds); i++) DestroySprite(&gSprites[sSlotMachine->reelTimePikachuAuraSpriteIds[i]]); } diff --git a/src/tileset_anims.c b/src/tileset_anims.c index 12701fb5f0ef..595ba08a6f51 100644 --- a/src/tileset_anims.c +++ b/src/tileset_anims.c @@ -1167,7 +1167,7 @@ static void QueueAnimTiles_BattlePyramid_StatueShadow(u16 timer) static void BlendAnimPalette_BattleDome_FloorLights(u16 timer) { - CpuCopy16(sTilesetAnims_BattleDomeFloorLightPals[timer % ARRAY_COUNT(sTilesetAnims_BattleDomeFloorLightPals)], &gPlttBufferUnfaded[0x80], 32); + CpuCopy16(sTilesetAnims_BattleDomeFloorLightPals[timer % ARRAY_COUNT(sTilesetAnims_BattleDomeFloorLightPals)], &gPlttBufferUnfaded[BG_PLTT_ID(8)], PLTT_SIZE_4BPP); BlendPalette(BG_PLTT_ID(8), 16, gPaletteFade.y, gPaletteFade.blendColor & 0x7FFF); if ((u8)FindTaskIdByFunc(Task_BattleTransition_Intro) != TASK_NONE) { @@ -1178,7 +1178,7 @@ static void BlendAnimPalette_BattleDome_FloorLights(u16 timer) static void BlendAnimPalette_BattleDome_FloorLightsNoBlend(u16 timer) { - CpuCopy16(sTilesetAnims_BattleDomeFloorLightPals[timer % ARRAY_COUNT(sTilesetAnims_BattleDomeFloorLightPals)], &gPlttBufferUnfaded[0x80], 32); + CpuCopy16(sTilesetAnims_BattleDomeFloorLightPals[timer % ARRAY_COUNT(sTilesetAnims_BattleDomeFloorLightPals)], &gPlttBufferUnfaded[BG_PLTT_ID(8)], PLTT_SIZE_4BPP); if ((u8)FindTaskIdByFunc(Task_BattleTransition_Intro) == TASK_NONE) { BlendPalette(BG_PLTT_ID(8), 16, gPaletteFade.y, gPaletteFade.blendColor & 0x7FFF); diff --git a/src/wireless_communication_status_screen.c b/src/wireless_communication_status_screen.c index d10c39c7df77..9a562cf7f7f3 100644 --- a/src/wireless_communication_status_screen.c +++ b/src/wireless_communication_status_screen.c @@ -222,7 +222,7 @@ static void CB2_InitWirelessCommunicationScreen(void) ChangeBgX(1, 0, BG_COORD_SET); ChangeBgY(1, 0, BG_COORD_SET); LoadPalette(sPalettes, BG_PLTT_ID(0), PLTT_SIZE_4BPP); - Menu_LoadStdPalAt(0xF0); + Menu_LoadStdPalAt(BG_PLTT_ID(15)); DynamicPlaceholderTextUtil_Reset(); FillBgTilemapBufferRect(0, 0, 0, 0, 32, 32, 15); CopyBgTilemapBufferToVram(1); From 05895c5308a7453dcd4c64f02ff28c61e34d954d Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sat, 20 May 2023 23:56:55 -0400 Subject: [PATCH 417/428] Fixed Frostbite icon appearing in AI Pary menu for mon without ailment --- src/battle_debug.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/battle_debug.c b/src/battle_debug.c index 0549cf91edb7..5712c98819af 100644 --- a/src/battle_debug.c +++ b/src/battle_debug.c @@ -1015,11 +1015,13 @@ static void Task_ShowAiParty(u8 taskId) gSprites[gSprites[data->spriteIds.aiPartyIcons[i]].sConditionSpriteId].oam.priority = 0; if (aiMons[i].isFainted) ailment = AILMENT_FNT; - else if (aiMons[i].status) + else ailment = GetAilmentFromStatus(aiMons[i].status); + + if (ailment != AILMENT_NONE) + StartSpriteAnim(&gSprites[gSprites[data->spriteIds.aiPartyIcons[i]].sConditionSpriteId], ailment - 1); else - ailment = AILMENT_FNT + 1; // blank - StartSpriteAnim(&gSprites[gSprites[data->spriteIds.aiPartyIcons[i]].sConditionSpriteId], ailment - 1); + gSprites[gSprites[data->spriteIds.aiPartyIcons[i]].sConditionSpriteId].invisible = TRUE; } for (; i < PARTY_SIZE; i++) data->spriteIds.aiPartyIcons[i] = 0xFF; From c3527dc01ec6219cc16542a702a63ad28e73ed39 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada D'Ottone Date: Fri, 26 May 2023 09:24:23 -0400 Subject: [PATCH 418/428] Fixed Throat Spray's description --- src/data/text/item_descriptions.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/data/text/item_descriptions.h b/src/data/text/item_descriptions.h index dddf8552f5e9..ecca3ef301fa 100644 --- a/src/data/text/item_descriptions.h +++ b/src/data/text/item_descriptions.h @@ -2649,8 +2649,8 @@ static const u8 sProtectivePadsDesc[] = _( static const u8 sThroatSprayDesc[] = _( "Raises Sp. Atk. if\n" - "a Pokémon is hit by\n" - "a sound-based move."); + "the holder uses a\n" + "sound-based move."); static const u8 sEjectPackDesc[] = _( "Forces the user to\n" From d0e6ea76124c57ec72f11b90b8b763a457ffcd40 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada D'Ottone Date: Sat, 27 May 2023 17:23:02 -0400 Subject: [PATCH 419/428] Optimized battle gender checks (#3020) * Optimized battle gender checks * Apply suggestions from code review Co-authored-by: AgustinGDLV <103095241+AgustinGDLV@users.noreply.github.com> --------- Co-authored-by: AgustinGDLV <103095241+AgustinGDLV@users.noreply.github.com> --- include/battle_ai_util.h | 2 +- include/battle_util.h | 2 ++ src/battle_ai_main.c | 14 ++++--------- src/battle_ai_util.c | 6 ++---- src/battle_script_commands.c | 31 +++------------------------- src/battle_util.c | 40 +++++++++++++++++++----------------- 6 files changed, 33 insertions(+), 62 deletions(-) diff --git a/include/battle_ai_util.h b/include/battle_ai_util.h index 37c9e9c19c3c..67ff6968e29f 100644 --- a/include/battle_ai_util.h +++ b/include/battle_ai_util.h @@ -143,7 +143,7 @@ bool32 AI_CanConfuse(u8 battlerAtk, u8 battlerDef, u16 defAbility, u8 battlerAtk bool32 ShouldBurnSelf(u8 battler, u16 ability); bool32 AI_CanBurn(u8 battlerAtk, u8 battlerDef, u16 defAbility, u8 battlerAtkPartner, u16 move, u16 partnerMove); bool32 AI_CanGiveFrostbite(u8 battlerAtk, u8 battlerDef, u16 defAbility, u8 battlerAtkPartner, u16 move, u16 partnerMove); -bool32 AI_CanBeInfatuated(u8 battlerAtk, u8 battlerDef, u16 defAbility, u8 atkGender, u8 defGender); +bool32 AI_CanBeInfatuated(u8 battlerAtk, u8 battlerDef, u16 defAbility); bool32 AnyPartyMemberStatused(u8 battlerId, bool32 checkSoundproof); u32 ShouldTryToFlinch(u8 battlerAtk, u8 battlerDef, u16 atkAbility, u16 defAbility, u16 move); bool32 ShouldTrap(u8 battlerAtk, u8 battlerDef, u16 move); diff --git a/include/battle_util.h b/include/battle_util.h index 9036ce4a99aa..96ffc2fa16c0 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -234,5 +234,7 @@ u32 CountBattlerStatIncreases(u8 battlerId, bool32 countEvasionAcc); bool32 IsMyceliumMightOnField(void); bool8 ChangeTypeBasedOnTerrain(u8 battlerId); void RemoveConfusionStatus(u8 battlerId); +u8 GetBattlerGender(u8 battlerId); +bool8 AreBattlersOfOppositeGender(u8 battler1, u8 battler2); #endif // GUARD_BATTLE_UTIL_H diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 76bf2261e6d5..97ae1f35ccc5 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -248,7 +248,7 @@ static void CopyBattlerDataToAIParty(u32 bPosition, u32 side) aiMon->species = bMon->species; aiMon->level = bMon->level; aiMon->status = bMon->status1; - aiMon->gender = GetGenderFromSpeciesAndPersonality(bMon->species, bMon->personality); + aiMon->gender = GetBattlerGender(battler); aiMon->isFainted = FALSE; aiMon->wasSentInBattle = TRUE; aiMon->switchInCount++; @@ -1287,12 +1287,8 @@ static s16 AI_CheckBadMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) score -= 8; break; case EFFECT_CAPTIVATE: - { - u8 atkGender = GetGenderFromSpeciesAndPersonality(gBattleMons[battlerAtk].species, gBattleMons[battlerAtk].personality); - u8 defGender = GetGenderFromSpeciesAndPersonality(gBattleMons[battlerDef].species, gBattleMons[battlerDef].personality); - if (atkGender == MON_GENDERLESS || defGender == MON_GENDERLESS || atkGender == defGender) - score -= 10; - } + if (!AreBattlersOfOppositeGender(battlerAtk, battlerDef)) + score -= 10; break; // other case EFFECT_HAZE: @@ -1592,9 +1588,7 @@ static s16 AI_CheckBadMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) score -= 2; // mainly to prevent looping between hail and snow break; case EFFECT_ATTRACT: - if (!AI_CanBeInfatuated(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef], - GetGenderFromSpeciesAndPersonality(gBattleMons[battlerAtk].species, gBattleMons[battlerAtk].personality), - GetGenderFromSpeciesAndPersonality(gBattleMons[battlerDef].species, gBattleMons[battlerDef].personality))) + if (!AI_CanBeInfatuated(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef])) score -= 10; break; case EFFECT_SAFEGUARD: diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index ced2e1841290..33aeda104207 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -2967,14 +2967,12 @@ bool32 AI_CanGiveFrostbite(u8 battlerAtk, u8 battlerDef, u16 defAbility, u8 batt return TRUE; } -bool32 AI_CanBeInfatuated(u8 battlerAtk, u8 battlerDef, u16 defAbility, u8 atkGender, u8 defGender) +bool32 AI_CanBeInfatuated(u8 battlerAtk, u8 battlerDef, u16 defAbility) { if ((gBattleMons[battlerDef].status2 & STATUS2_INFATUATION) || AI_GetMoveEffectiveness(AI_THINKING_STRUCT->moveConsidered, battlerAtk, battlerDef) == AI_EFFECTIVENESS_x0 || defAbility == ABILITY_OBLIVIOUS - || atkGender == defGender - || atkGender == MON_GENDERLESS - || defGender == MON_GENDERLESS + || !AreBattlersOfOppositeGender(battlerAtk, battlerDef) || AI_IsAbilityOnSide(battlerDef, ABILITY_AROMA_VEIL)) return FALSE; return TRUE; diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index c9d6ff988b68..d7ac1ef807ff 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -12758,26 +12758,6 @@ static void Cmd_tryinfatuating(void) { CMD_ARGS(const u8 *failInstr); - struct Pokemon *monAttacker, *monTarget; - u16 speciesAttacker, speciesTarget; - u32 personalityAttacker, personalityTarget; - - if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) - monAttacker = &gPlayerParty[gBattlerPartyIndexes[gBattlerAttacker]]; - else - monAttacker = &gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker]]; - - if (GetBattlerSide(gBattlerTarget) == B_SIDE_PLAYER) - monTarget = &gPlayerParty[gBattlerPartyIndexes[gBattlerTarget]]; - else - monTarget = &gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]]; - - speciesAttacker = GetMonData(monAttacker, MON_DATA_SPECIES); - personalityAttacker = GetMonData(monAttacker, MON_DATA_PERSONALITY); - - speciesTarget = GetMonData(monTarget, MON_DATA_SPECIES); - personalityTarget = GetMonData(monTarget, MON_DATA_PERSONALITY); - if (GetBattlerAbility(gBattlerTarget) == ABILITY_OBLIVIOUS) { gBattlescriptCurrInstr = BattleScript_NotAffectedAbilityPopUp; @@ -12786,10 +12766,8 @@ static void Cmd_tryinfatuating(void) } else { - if (GetGenderFromSpeciesAndPersonality(speciesAttacker, personalityAttacker) == GetGenderFromSpeciesAndPersonality(speciesTarget, personalityTarget) - || gBattleMons[gBattlerTarget].status2 & STATUS2_INFATUATION - || GetGenderFromSpeciesAndPersonality(speciesAttacker, personalityAttacker) == MON_GENDERLESS - || GetGenderFromSpeciesAndPersonality(speciesTarget, personalityTarget) == MON_GENDERLESS) + if (gBattleMons[gBattlerTarget].status2 & STATUS2_INFATUATION + || !AreBattlersOfOppositeGender(gBattlerAttacker, gBattlerTarget)) { gBattlescriptCurrInstr = cmd->failInstr; } @@ -16103,10 +16081,7 @@ static void Cmd_jumpifoppositegenders(void) { CMD_ARGS(const u8 *jumpInstr); - u32 atkGender = GetGenderFromSpeciesAndPersonality(gBattleMons[gBattlerAttacker].species, gBattleMons[gBattlerAttacker].personality); - u32 defGender = GetGenderFromSpeciesAndPersonality(gBattleMons[gBattlerTarget].species, gBattleMons[gBattlerTarget].personality); - - if ((atkGender == MON_MALE && defGender == MON_FEMALE) || (atkGender == MON_FEMALE && defGender == MON_MALE)) + if (AreBattlersOfOppositeGender(gBattlerAttacker, gBattlerTarget)) gBattlescriptCurrInstr = cmd->jumpInstr; else gBattlescriptCurrInstr = cmd->nextInstr; diff --git a/src/battle_util.c b/src/battle_util.c index f0c41bf9d695..e8f4ffdcad21 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -4183,7 +4183,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move { u8 effect = 0; u32 speciesAtk, speciesDef; - u32 pidAtk, pidDef; u32 moveType, move; u32 i, j; @@ -4194,10 +4193,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move gBattlerAttacker = battler; speciesAtk = gBattleMons[gBattlerAttacker].species; - pidAtk = gBattleMons[gBattlerAttacker].personality; - speciesDef = gBattleMons[gBattlerTarget].species; - pidDef = gBattleMons[gBattlerTarget].personality; if (special) gLastUsedAbility = special; @@ -5515,16 +5511,14 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) && gBattleMons[gBattlerAttacker].hp != 0 && !gProtectStructs[gBattlerAttacker].confusionSelfDmg - && (IsMoveMakingContact(move, gBattlerAttacker)) && TARGET_TURN_DAMAGED && gBattleMons[gBattlerTarget].hp != 0 && RandomWeighted(RNG_CUTE_CHARM, 2, 1) - && GetBattlerAbility(gBattlerAttacker) != ABILITY_OBLIVIOUS - && !IsAbilityOnSide(gBattlerAttacker, ABILITY_AROMA_VEIL) - && GetGenderFromSpeciesAndPersonality(speciesAtk, pidAtk) != GetGenderFromSpeciesAndPersonality(speciesDef, pidDef) && !(gBattleMons[gBattlerAttacker].status2 & STATUS2_INFATUATION) - && GetGenderFromSpeciesAndPersonality(speciesAtk, pidAtk) != MON_GENDERLESS - && GetGenderFromSpeciesAndPersonality(speciesDef, pidDef) != MON_GENDERLESS) + && AreBattlersOfOppositeGender(gBattlerAttacker, gBattlerTarget) + && GetBattlerAbility(gBattlerAttacker) != ABILITY_OBLIVIOUS + && IsMoveMakingContact(move, gBattlerAttacker) + && !IsAbilityOnSide(gBattlerAttacker, ABILITY_AROMA_VEIL)) { gBattleMons[gBattlerAttacker].status2 |= STATUS2_INFATUATED_WITH(gBattlerTarget); BattleScriptPushCursor(); @@ -8753,15 +8747,10 @@ static u32 CalcMoveBasePowerAfterModifiers(u16 move, u8 battlerAtk, u8 battlerDe MulModifier(&modifier, UQ_4_12(1.3)); break; case ABILITY_RIVALRY: - if (GetGenderFromSpeciesAndPersonality(gBattleMons[battlerAtk].species, gBattleMons[battlerAtk].personality) != MON_GENDERLESS - && GetGenderFromSpeciesAndPersonality(gBattleMons[battlerDef].species, gBattleMons[battlerDef].personality) != MON_GENDERLESS) - { - if (GetGenderFromSpeciesAndPersonality(gBattleMons[battlerAtk].species, gBattleMons[battlerAtk].personality) - == GetGenderFromSpeciesAndPersonality(gBattleMons[battlerDef].species, gBattleMons[battlerDef].personality)) - MulModifier(&modifier, UQ_4_12(1.25)); - else - MulModifier(&modifier, UQ_4_12(0.75)); - } + if (AreBattlersOfOppositeGender(battlerAtk, battlerDef)) + MulModifier(&modifier, UQ_4_12(1.25)); + else + MulModifier(&modifier, UQ_4_12(0.75)); break; case ABILITY_ANALYTIC: if (GetBattlerTurnOrderNum(battlerAtk) == gBattlersCount - 1 && move != MOVE_FUTURE_SIGHT && move != MOVE_DOOM_DESIRE) @@ -10923,3 +10912,16 @@ static bool8 CanBeInfinitelyConfused(u8 battlerId) return TRUE; } +u8 GetBattlerGender(u8 battlerId) +{ + return GetGenderFromSpeciesAndPersonality(gBattleMons[battlerId].species, + gBattleMons[battlerId].personality); +} + +bool8 AreBattlersOfOppositeGender(u8 battler1, u8 battler2) +{ + u8 gender1 = GetBattlerGender(battler1); + u8 gender2 = GetBattlerGender(battler2); + + return (gender1 != MON_GENDERLESS && gender2 != MON_GENDERLESS && gender1 != gender2); +} From a929ae8b4876318fa1a75c24b5d51db7800117a4 Mon Sep 17 00:00:00 2001 From: ghoulslash <41651341+ghoulslash@users.noreply.github.com> Date: Sat, 27 May 2023 17:32:53 -0400 Subject: [PATCH 420/428] Replace launchtemplate and launchtask in battle anims (#2640) * replace launchtemplate with createsprite using fix_launchtemplate.py * tidy up script * fix comment handing in fix_launchtemplate.py * fix double comma after sprite template * remove py script * convert launchtask -> createvisualtask * fix launchtask->createvisualtask issue * fix ANIM_PAL ORs * remove launchtemplate, launchtask macros * fix pal macros in z moves * fix bloom doom * add F_PAL_ALL_BUT_DEF * remove all ANIM_PAL_ usages * devestating drake fix * convert launchsoundtask and setblends * Reworked CFRU macro PR --------- Co-authored-by: ghoulslash Co-authored-by: Eduardo Quezada --- asm/macros/battle_anim_script.inc | 54 - data/battle_anim_scripts.s | 9478 ++++++++++++++--------------- include/constants/battle_anim.h | 42 +- 3 files changed, 4751 insertions(+), 4823 deletions(-) diff --git a/asm/macros/battle_anim_script.inc b/asm/macros/battle_anim_script.inc index 85320bd3b8b5..742cdb2f26d4 100644 --- a/asm/macros/battle_anim_script.inc +++ b/asm/macros/battle_anim_script.inc @@ -332,57 +332,3 @@ createvisualtask AnimTask_IsDoubleBattle, 0 jumprettrue \ptr .endm - -@ keep CFRU macros cause I'm lazy. todo: update to createsprite and createvisualtask, respectively -.macro launchtemplate launchtemplatePtr launchtemplatePriority launchtemplateArgsNo launchtemplatearg0 launchtemplatearg1 launchtemplatearg2 launchtemplatearg3 launchtemplatearg4 launchtemplatearg5 launchtemplatearg6 launchtemplatearg7 launchtemplatearg8 - .byte 0x2 - .word \launchtemplatePtr - .byte \launchtemplatePriority - .byte \launchtemplateArgsNo - .hword \launchtemplatearg0 - .hword \launchtemplatearg1 - .hword \launchtemplatearg2 - .hword \launchtemplatearg3 - .hword \launchtemplatearg4 - .hword \launchtemplatearg5 - .hword \launchtemplatearg6 - .hword \launchtemplatearg7 - .hword \launchtemplatearg8 - .endm - -.macro launchtask launchtaskPtr launchtaskPriority launchtaskArgsNo launchtaskarg0 launchtaskarg1 launchtaskarg2 launchtaskarg3 launchtaskarg4 launchtaskarg5 launchtaskarg6 launchtaskarg7 launchtaskarg8 - .byte 0x3 - .word \launchtaskPtr - .byte \launchtaskPriority - .byte \launchtaskArgsNo - .hword \launchtaskarg0 - .hword \launchtaskarg1 - .hword \launchtaskarg2 - .hword \launchtaskarg3 - .hword \launchtaskarg4 - .hword \launchtaskarg5 - .hword \launchtaskarg6 - .hword \launchtaskarg7 - .hword \launchtaskarg8 - .endm - -.macro setblends setblends_value - .byte 0xC - .hword \setblends_value - .endm - -.macro launchsoundtask launchsoundtaskPtr launchsoundtaskArgsNo launchsoundtaskarg0 launchsoundtaskarg1 launchsoundtaskarg2 launchsoundtaskarg3 launchsoundtaskarg4 launchsoundtaskarg5 launchsoundtaskarg6 launchsoundtaskarg7 launchsoundtaskarg8 - .byte 0x1F - .word \launchsoundtaskPtr - .byte \launchsoundtaskArgsNo - .hword \launchsoundtaskarg0 - .hword \launchsoundtaskarg1 - .hword \launchsoundtaskarg2 - .hword \launchsoundtaskarg3 - .hword \launchsoundtaskarg4 - .hword \launchsoundtaskarg5 - .hword \launchsoundtaskarg6 - .hword \launchsoundtaskarg7 - .hword \launchsoundtaskarg8 - .endm - diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index a0b035704d6f..2faa39dec2c4 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -1561,7 +1561,7 @@ Move_GASTRO_ACID: playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER delay 15 createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 2, 0, 10, 1 - createvisualtask AnimTask_BlendColorCycle, 2, ANIM_PAL_DEF, 2, 2, 0, 12, RGB(30, 0, 31) + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 2, 2, 0, 12, RGB(30, 0, 31) createsprite gGreenPoisonDrip, ANIM_TARGET, 2, 0, -22, 0, 15, 55, FALSE playsewithpan SE_M_BUBBLE, SOUND_PAN_TARGET delay 10 @@ -1862,7 +1862,7 @@ General_AquaRingHeal: playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER createsprite gSmallBubblePairSpriteTemplate, 2, 4, 12, 0, 25, 0 setalpha 8, 8 - playsewithpan SE_M_MILK_DRINK, SOUND_PAN_ATTACKER, + playsewithpan SE_M_MILK_DRINK, SOUND_PAN_ATTACKER createsprite gGuardRingSpriteTemplate, 2, 0 delay 4 createsprite gGuardRingSpriteTemplate, 2, 0 @@ -2674,7 +2674,7 @@ Move_NASTY_PLOT: waitbgfadein delay 8 createsprite gQuestionMarkSpriteTemplate, 20, 0 - playsewithpan SE_M_METRONOME, SOUND_PAN_ATTACKER, + playsewithpan SE_M_METRONOME, SOUND_PAN_ATTACKER delay 54 loopsewithpan SE_M_METRONOME, SOUND_PAN_ATTACKER, 16, 3 waitforvisualfinish @@ -2836,7 +2836,7 @@ Move_SHADOW_CLAW: createsprite gClawSlashSpriteTemplate, ANIM_TARGET, 2, -10, -10, 0 createsprite gClawSlashSpriteTemplate, ANIM_TARGET, 2, -10, 10, 0 playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET - delay 12, + delay 12 createsprite gClawSlashSpriteTemplate, ANIM_TARGET, 2, 10, -10, 1 createsprite gClawSlashSpriteTemplate, ANIM_TARGET, 2, 10, 10, 1 playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET @@ -2955,18 +2955,18 @@ Move_SHADOW_SNEAK: loadspritegfx ANIM_TAG_POISON_BUBBLE @Poison loadspritegfx ANIM_TAG_HANDS_AND_FEET monbg ANIM_ATTACKER - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x7 0x0000 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x7, 0x0000 waitforvisualfinish playsewithpan SE_M_FAINT_ATTACK, SOUND_PAN_ATTACKER - launchtask AnimTask_TranslateMonEllipticalRespectSide 0x2 0x5 0x0 0x12 0x6 0x1 0x3 - launchtask AnimTask_AttackerFadeToInvisible 0x2 0x1 0x1 + createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 0x2, 0x0, 0x12, 0x6, 0x1, 0x3 + createvisualtask AnimTask_AttackerFadeToInvisible, 0x2, 0x1 waitforvisualfinish clearmonbg ANIM_ATTACKER invisible ANIM_ATTACKER delay 0x1 - launchtask AnimTask_DestinyBondWhiteShadow 0x5 0x2 0x0 0x30 + createvisualtask AnimTask_DestinyBondWhiteShadow, 0x5, 0x0, 0x30 delay 0x30 - launchtask AnimTask_BlendColorCycle 0x2 0x6 ANIM_PAL_DEF 0x2 0x2 0x0 0xF 0x0 + createvisualtask AnimTask_BlendColorCycle, 0x2, F_PAL_TARGET, 0x2, 0x2, 0x0, 0xF, 0x0 createsprite gShadowSneakImpactSpriteTemplate, ANIM_TARGET, 2, 0xfff6, 0xfff6, 0x0 call ShadowSneakMovement createsprite gShadowSneakImpactSpriteTemplate, ANIM_TARGET, 2, 0xa, 0x14, 0x0 @@ -2977,12 +2977,12 @@ Move_SHADOW_SNEAK: call ShadowSneakMovement waitforvisualfinish visible ANIM_ATTACKER - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x7 0x0 0x0000 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x7, 0x0, 0x0000 waitforvisualfinish end ShadowSneakMovement: playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x6 0x1 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x3, 0x0, 0x6, 0x1 delay 0x4 return @@ -3053,7 +3053,7 @@ Move_PSYCHO_CUT: monbg ANIM_TARGET splitbgprio ANIM_TARGET setalpha 12, 8 - playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER, + playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER createsprite gPsychoCutSpriteTemplate, ANIM_TARGET, 2, 20, 0, -8, 0, 20 waitforvisualfinish createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 7, 0, 9, 1 @@ -3073,10 +3073,10 @@ Move_ZEN_HEADBUTT: createsprite gSimplePaletteBlendSpriteTemplate, 2, 5, 1, 2, 0, 4, 0 waitforvisualfinish createsprite gZenHeadbuttSpriteTemplate, 66, 1, 0 - delay 18, + delay 18 playsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER waitforvisualfinish - delay 2, + delay 2 playsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER loadspritegfx ANIM_TAG_IMPACT createsprite gBowMonSpriteTemplate, 2, 1, 0 @@ -3234,7 +3234,7 @@ Move_TRICK_ROOM:: InitRoomAnimation: setalpha 8, 8 playsewithpan SE_M_SUPERSONIC, SOUND_PAN_TARGET - launchtask AnimTask_ScaleMonAndRestore 5 5 0xfffa 0xfffa 15, 1 1 + createvisualtask AnimTask_ScaleMonAndRestore, 5, 0xfffa, 0xfffa, 15, 1, 1 return Move_DRACO_METEOR: @@ -3787,7 +3787,7 @@ Move_CAPTIVATE: playsewithpan SE_M_CHARM, SOUND_PAN_ATTACKER delay 15 createsprite gMagentaHeartSpriteTemplate, 3, 2, 20, 20 - playsewithpan 228, SOUND_PAN_ATTACKER, + playsewithpan 228, SOUND_PAN_ATTACKER call GrantingStarsEffect waitforvisualfinish end @@ -4621,7 +4621,7 @@ ShadowForceWaitEnd: end ShadowForcePrep: monbg ANIM_ATTACKER - playsewithpan SE_M_FAINT_ATTACK, SOUND_PAN_ATTACKER, + playsewithpan SE_M_FAINT_ATTACK, SOUND_PAN_ATTACKER createsprite gSimplePaletteBlendSpriteTemplate ANIM_ATTACKER, 2, 1, 3, 0, 16, RGB_BLACK createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_TARGET, FALSE createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_ATTACKER, FALSE @@ -4739,7 +4739,7 @@ Move_WIDE_GUARD: Move_GUARD_SPLIT:: loadspritegfx ANIM_TAG_BLUEGREEN_ORB - createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_BG, 0x1, 0x0, 0xC, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0x1, 0x0, 0xC, 0x0 loopsewithpan SE_M_LOCK_ON, SOUND_PAN_ATTACKER, 0x18, 0x3 call GuardSplitLaunch call GuardSplitLaunch @@ -4752,7 +4752,7 @@ Move_GUARD_SPLIT:: call GuardSplitLaunch call GuardSplitLaunch waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_BG, 0x1, 0xC, 0x0, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0x1, 0xC, 0x0, 0x0 waitforvisualfinish end GuardSplitLaunch: @@ -4764,7 +4764,7 @@ GuardSplitLaunch: Move_POWER_SPLIT:: loadspritegfx ANIM_TAG_RED_HEART loadspritegfx ANIM_TAG_BLUEGREEN_ORB - createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_BG, 0x1, 0x0, 0xC, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0x1, 0x0, 0xC, 0x0 loopsewithpan SE_M_LOCK_ON, SOUND_PAN_ATTACKER, 0x18, 0x3 call PowerSplitLaunch call PowerSplitLaunch @@ -4777,7 +4777,7 @@ Move_POWER_SPLIT:: call PowerSplitLaunch call PowerSplitLaunch waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_BG, 0x1, 0xC, 0x0, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0x1, 0xC, 0x0, 0x0 waitforvisualfinish end PowerSplitLaunch: @@ -4872,7 +4872,7 @@ Move_RAGE_POWDER:: call RagePowderSprinkle call RagePowderSprinkle call RagePowderSprinkle - createvisualtask AnimTask_BlendColorCycle, ANIM_ATTACKER, 0x2, ANIM_PAL_ATK, 0x2, 0x2, 0x0, 0xb, 0x1f + createvisualtask AnimTask_BlendColorCycle, ANIM_ATTACKER, 0x2, F_PAL_ATTACKER, 0x2, 0x2, 0x0, 0xb, 0x1f waitforvisualfinish clearmonbg ANIM_DEF_PARTNER end @@ -4887,9 +4887,9 @@ RagePowderSprinkle: Move_TELEKINESIS:: loadspritegfx ANIM_TAG_SPARKLE_4 @detect - createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_BG, 0x1, 0x0, 0x9, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0x1, 0x0, 0x9, 0x0 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_ATK, 0x1, 0x0, 0x9, 0x7fff + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 0x1, 0x0, 0x9, 0x7fff delay 0x12 playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER createsprite gSpinningSparkleSpriteTemplate, ANIM_ATTACKER, 0xd, 0x14, 0xffec @@ -4898,8 +4898,8 @@ Move_TELEKINESIS:: createvisualtask AnimTask_SwayMon, 0x5, 0x1, 0x18, 0xD0, 0x1, ANIM_TARGET waitforvisualfinish delay 0xA - createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_BG, 0x1, 0x9, 0x0, 0x0 - createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_ATK, 0x2, 0x9, 0x0, 0x7fff + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0x1, 0x9, 0x0, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 0x2, 0x9, 0x0, 0x7fff waitforvisualfinish end @@ -5047,7 +5047,7 @@ Move_SYCHRONOISE: loadspritegfx ANIM_TAG_AIR_WAVE_2 @aero particles monbg ANIM_DEF_PARTNER splitbgprio_foes ANIM_TARGET - createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_BG, 0x1, 0x0, 0xC, 0x0 @Darken + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0x1, 0x0, 0xC, 0x0 @Darken waitforvisualfinish panse SE_M_SCREECH, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0 createsprite gSynchronoiseVioletRingTemplate, ANIM_ATTACKER, 0x0, 0x2d, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1 @@ -5072,7 +5072,7 @@ Move_SYCHRONOISE: createsprite gSynchronoiseAeroWheelTemplate, ANIM_TARGET, 1, 0x0, 0xffef, 0xff20, 0xffe0, 0x28 createsprite gSynchronoiseAeroWheelTemplate, ANIM_TARGET, 1, 0x0, 0xffef, 0x70, 0xff80, 0x28 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_BG, 0x1, 0xC, 0x0, 0x0 @Darken + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0x1, 0xC, 0x0, 0x0 @Darken waitforvisualfinish clearmonbg ANIM_DEF_PARTNER end @@ -5155,37 +5155,37 @@ Move_FLAME_CHARGE: delay 0x9 call FlameChargeSwirl waitforvisualfinish - launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x18 0x0 0x0 0x5 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x18, 0x0, 0x0, 0x5 delay 0x3 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET - launchtemplate gBasicHitSplatSpriteTemplate 0x3 0x4 0x0 0x0 0x1 0x0 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x1, 0x0 createvisualtask AnimTask_ShakeMon, 0x2, 0x1, 0x6, 0x0, 0x8, 0x1 call FireSpreadEffect playsewithpan SE_M_FIRE_PUNCH, SOUND_PAN_ATTACKER waitforvisualfinish delay 0x8 - launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0x0 0x7 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x7 waitforvisualfinish clearmonbg ANIM_TARGET end FlameChargeSwirl: - launchtemplate gFlameChargeEmberTemplate 0x2 0x4 0x0 0xffe8 0x8 0x8c + createsprite gFlameChargeEmberTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x8, 0x8c return Move_COIL: loadspritegfx ANIM_TAG_TENDRILS loopsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET, 0x6, 0x4 - launchtemplate gConstrictBindingSpriteTemplate 0x84, 0x4, 0x0 0x10 0x0 0x2 + createsprite gConstrictBindingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x10, 0x0, 0x2 delay 0x7 - launchtemplate gConstrictBindingSpriteTemplate 0x83 0x4 0x0 0x0 0x0 0x2 - launchtemplate gConstrictBindingSpriteTemplate 0x82, 0x4, 0x0 0x8 0x1 0x2 + createsprite gConstrictBindingSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, 0x0, 0x2 + createsprite gConstrictBindingSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x8, 0x1, 0x2 delay 0x7 - launchtemplate gConstrictBindingSpriteTemplate 0x83 0x4 0x0 0xfff8 0x1 0x2 + createsprite gConstrictBindingSpriteTemplate, ANIM_TARGET, 3, 0x0, 0xfff8, 0x1, 0x2 delay 0x8 - launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x3 0x0 0x6 0x1 + createvisualtask AnimTask_ShakeMon2, 0x2, 0x1, 0x3, 0x0, 0x6, 0x1 delay 0x14 - launchtask AnimTask_ShakeMon2 0x83 0x5 0x1 0x4 0x0 0x5 0x1 - launchtask AnimTask_StretchTargetUp 0x3 0x0 + createvisualtask AnimTask_ShakeMon2, 0x83, 0x1, 0x4, 0x0, 0x5, 0x1 + createvisualtask AnimTask_StretchTargetUp, 0x3 playsewithpan SE_M_BIND, SOUND_PAN_TARGET setarg 0x7 0xffff waitforvisualfinish @@ -5236,17 +5236,17 @@ Move_FOUL_PLAY: loadspritegfx ANIM_TAG_HANDS_AND_FEET @Black colour monbg ANIM_TARGET setalpha 12, 8 - launchtemplate gHorizontalLungeSpriteTemplate 0x2 0x2 0x4 0x4 + createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 0x4, 0x4 delay 0x6 - launchtemplate gFoulPlayImpactTemplate 0x2 0x4 0x0 0x0 0x1 0x1 - launchtask AnimTask_ShakeMon 0x2 0x5 0x1 0x3 0x0 0x6 0x1 + createsprite gFoulPlayImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1, 0x1 + createvisualtask AnimTask_ShakeMon, 0x2, 0x1, 0x3, 0x0, 0x6, 0x1 playsewithpan SE_M_VITAL_THROW SOUND_PAN_TARGET - launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, (ANIM_PAL_BG | ANIM_PAL_ALL_BATTLERS), 0x3, 0xa, 0x0, 0x0 - launchtemplate gFoulPlayRingTemplate 0x3 0x4 0x0 0x0 0x100 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS), 0x3, 0xa, 0x0, 0x0 + createsprite gFoulPlayRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x100, 0x0 delay 0x8 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET - launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, (ANIM_PAL_BG | ANIM_PAL_ALL_BATTLERS), 0x3, 0xa, 0x0, 0x0 - launchtemplate gFoulPlayRingTemplate 0x3 0x4 0x0 0x0 0x100 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS), 0x3, 0xa, 0x0, 0x0 + createsprite gFoulPlayRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x100, 0x0 waitforvisualfinish clearmonbg ANIM_TARGET blendoff @@ -5259,42 +5259,42 @@ Move_SIMPLE_BEAM: loadspritegfx ANIM_TAG_THIN_RING @ring setalpha 8, 8 monbg ANIM_TARGET - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xC 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xC, 0x0 waitforvisualfinish playsewithpan SE_M_BUBBLE_BEAM, SOUND_PAN_ATTACKER call SimpleBeamsRegular call SimpleBeamsRegular - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x0 0x9 0x7FFF - launchtask AnimTask_SwayMon 0x5 0x5 0x0 0x6 0x800 0x4 ANIM_TARGET + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x2, 0x0, 0x9, 0x7FFF + createvisualtask AnimTask_SwayMon, 0x5, 0x0, 0x6, 0x800, 0x4, ANIM_TARGET call SimpleBeamWithRings call SimpleBeamWithRings call SimpleBeamWithRings call SimpleBeamWithRings call SimpleBeamWithRings - launchtemplate gSimpleBeamBrownRingTemplate 0x3 0x6 0x0 0x0 0x1 0x0 0x1F 0x8 + createsprite gSimpleBeamBrownRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x1, 0x0, 0x1F, 0x8 delay 0x2 - launchtemplate gSimpleBeamPinkRingTemplate 0x3 0x6 0x0 0x0 0x1 0x0 0x1F 0x8 + createsprite gSimpleBeamPinkRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x1, 0x0, 0x1F, 0x8 delay 0x2 stopsound waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x9 0x0 0x7FFF - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xC 0x0 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x2, 0x9, 0x0, 0x7FFF + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xC, 0x0, 0x0 waitforvisualfinish clearmonbg ANIM_TARGET blendoff end SimpleBeamsRegular: - launchtemplate gSimpleBeamBrownTemplate 0x82 0x6 0x10 0x0 0x0 0x0 0xd 0x0 + createsprite gSimpleBeamBrownTemplate, ANIM_TARGET, 2, 0x10, 0x0, 0x0, 0x0, 0xd, 0x0 delay 0x2 - launchtemplate gSimpleBeamPinkTemplate 0x82 0x6 0x10 0x0 0x0 0x0 0xd 0x0 + createsprite gSimpleBeamPinkTemplate, ANIM_TARGET, 2, 0x10, 0x0, 0x0, 0x0, 0xd, 0x0 delay 0x2 return SimpleBeamWithRings: - launchtemplate gSimpleBeamBrownTemplate 0x82 0x6 0x10 0x0 0x0 0x0 0xd 0x0 - launchtemplate gSimpleBeamBrownRingTemplate 0x3 0x6 0x0 0x0 0x1 0x0 0x1F 0x8 + createsprite gSimpleBeamBrownTemplate, ANIM_TARGET, 2, 0x10, 0x0, 0x0, 0x0, 0xd, 0x0 + createsprite gSimpleBeamBrownRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x1, 0x0, 0x1F, 0x8 delay 0x2 - launchtemplate gSimpleBeamPinkTemplate 0x82 0x6 0x10 0x0 0x0 0x0 0xd 0x0 - launchtemplate gSimpleBeamPinkRingTemplate 0x3 0x6 0x0 0x0 0x1 0x0 0x1F 0x8 + createsprite gSimpleBeamPinkTemplate, ANIM_TARGET, 2, 0x10, 0x0, 0x0, 0x0, 0xd, 0x0 + createsprite gSimpleBeamPinkRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x1, 0x0, 0x1F, 0x8 delay 0x2 return @@ -5309,21 +5309,21 @@ Move_ENTRAINMENT: playsewithpan SE_M_TEETER_DANCE, SOUND_PAN_ATTACKER delay 0x18 playsewithpan SE_M_TEETER_DANCE, SOUND_PAN_ATTACKER - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x1f 0x1 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x3, 0x0, 0x1f, 0x1 waitforvisualfinish end Move_AFTER_YOU: loadspritegfx ANIM_TAG_ANGER @rage loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @green color - launchtask AnimTask_SwayMon 0x5 0x5 0x1 0xF 0x600 0x2 ANIM_ATTACKER + createvisualtask AnimTask_SwayMon, 0x5, 0x1, 0xF, 0x600, 0x2, ANIM_ATTACKER delay 0x1 - launchtemplate gAfterYouGreenRageTemplate 0x2 0x3 0x0 0xffec 0xffe0 - launchtemplate gAfterYouGreenRageTemplate 0x2 0x3 0x0 0xfffb 0xffe5 + createsprite gAfterYouGreenRageTemplate, ANIM_ATTACKER, 2, 0x0, 0xffec, 0xffe0 + createsprite gAfterYouGreenRageTemplate, ANIM_ATTACKER, 2, 0x0, 0xfffb, 0xffe5 playsewithpan SE_M_SWAGGER2, SOUND_PAN_ATTACKER delay 0x14 - launchtemplate gAfterYouGreenRageTemplate 0x2 0x3 0x0 0x14 0xffe0 - launchtemplate gAfterYouGreenRageTemplate 0x2 0x3 0x0 0x23 0xffe5 + createsprite gAfterYouGreenRageTemplate, ANIM_ATTACKER, 2, 0x0, 0x14, 0xffe0 + createsprite gAfterYouGreenRageTemplate, ANIM_ATTACKER, 2, 0x0, 0x23, 0xffe5 playsewithpan SE_M_SWAGGER2, SOUND_PAN_ATTACKER waitforvisualfinish end @@ -5354,7 +5354,7 @@ Move_ECHOED_VOICE: loadspritegfx ANIM_TAG_METAL_SOUND_WAVES monbg ANIM_DEF_PARTNER splitbgprio_foes ANIM_TARGET - launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x2 0x0 0x8 0x1 + createvisualtask AnimTask_ShakeMon2, 0x2, 0x0, 0x2, 0x0, 0x8, 0x1 call MetalSoundPlayNote call MetalSoundPlayNote call MetalSoundPlayNote @@ -5366,24 +5366,24 @@ Move_ECHOED_VOICE: end MetalSoundPlayNote: panse SE_M_UPROAR, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 2, 0 - launchtemplate gMetalSoundSpriteTemplate 0x82 0x6 0x10 0x0 0x0 0x0 0x1e 0x0 + createsprite gMetalSoundSpriteTemplate, ANIM_TARGET, 2, 0x10, 0x0, 0x0, 0x0, 0x1e, 0x0 delay 0x2 return Move_CHIP_AWAY: loadspritegfx ANIM_TAG_IMPACT - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x2 0x0 0x9 0x7FFF + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x2, 0x0, 0x9, 0x7FFF waitforvisualfinish monbg ANIM_ATK_PARTNER setalpha 12, 8 - launchtask AnimTask_TranslateMonEllipticalRespectSide 0x2 0x5 0x0 0x18 0x6 0x1 0x5 + createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 0x2, 0x0, 0x18, 0x6, 0x1, 0x5 delay 0x4 - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x5 0x0 0x6 0x1 - launchtemplate gBasicHitSplatSpriteTemplate 0x84, 0x4, 0x0 0x0 0x1 0x1 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x5, 0x0, 0x6, 0x1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x1, 0x1 playsewithpan SE_M_VITAL_THROW2 SOUND_PAN_TARGET waitforvisualfinish clearmonbg ANIM_ATK_PARTNER - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x2 0x9 0x0 0x7FFF + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x2, 0x9, 0x0, 0x7FFF waitforvisualfinish blendoff end @@ -5450,27 +5450,27 @@ Move_QUICK_GUARD: loadspritegfx ANIM_TAG_QUICK_GUARD_HAND @hand loadspritegfx ANIM_TAG_SPARKLE_4 @sparkles setalpha 12, 8 - launchtask AnimTask_BlendColorCycle 0x2 0x6 ANIM_PAL_ATK 0x0 0x2 0x0 0xa 0x7FFF + createvisualtask AnimTask_BlendColorCycle, 0x2, F_PAL_ATTACKER, 0x0, 0x2, 0x0, 0xa, 0x7FFF delay 0x10 monbg ANIM_ATTACKER - launchtemplate gQuickGuardArmImpactTemplate 0x83 0x5 0xE 0x0 0x8 0x0 0x0 - launchtemplate gQuickGuardArmImpactTemplate 0x83 0x5 0xfff2 0x0 0x8 0x0 0x0 + createsprite gQuickGuardArmImpactTemplate, ANIM_TARGET, 3, 0xE, 0x0, 0x8, 0x0, 0x0 + createsprite gQuickGuardArmImpactTemplate, ANIM_TARGET, 3, 0xfff2, 0x0, 0x8, 0x0, 0x0 delay 0x1 - launchtemplate gQuickGuardArmImpactTemplate 0x83 0x5 0xE 0x0 0x8 0x0 0x0 - launchtemplate gQuickGuardArmImpactTemplate 0x83 0x5 0xfff2 0x0 0x8 0x0 0x0 + createsprite gQuickGuardArmImpactTemplate, ANIM_TARGET, 3, 0xE, 0x0, 0x8, 0x0, 0x0 + createsprite gQuickGuardArmImpactTemplate, ANIM_TARGET, 3, 0xfff2, 0x0, 0x8, 0x0, 0x0 delay 0x1 - launchtemplate gQuickGuardArmImpactTemplate 0x83 0x5 0xE 0x0 0x8 0x0 0x0 - launchtemplate gQuickGuardArmImpactTemplate 0x83 0x5 0xfff2 0x0 0x8 0x0 0x0 + createsprite gQuickGuardArmImpactTemplate, ANIM_TARGET, 3, 0xE, 0x0, 0x8, 0x0, 0x0 + createsprite gQuickGuardArmImpactTemplate, ANIM_TARGET, 3, 0xfff2, 0x0, 0x8, 0x0, 0x0 waitforvisualfinish playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER - launchtemplate gSpinningSparkleSpriteTemplate 0xd 0x2 0x0 0xffe3 @up - launchtemplate gSpinningSparkleSpriteTemplate 0xd 0x2 0x16 0xffec @upper right - launchtemplate gSpinningSparkleSpriteTemplate 0xd 0x2 0x1D 0x0 @right - launchtemplate gSpinningSparkleSpriteTemplate 0xd 0x2 0xffe9 0xffec @upper left - launchtemplate gSpinningSparkleSpriteTemplate 0xd 0x2 0xffe2 0x0 @left - launchtemplate gSpinningSparkleSpriteTemplate 0xd 0x2 0x0 0x1c @down - launchtemplate gSpinningSparkleSpriteTemplate 0xd 0x2 0x16 0x13 @lower left - launchtemplate gSpinningSparkleSpriteTemplate 0xd 0x2 0xffea 0x13 @lower right + createsprite gSpinningSparkleSpriteTemplate, ANIM_ATTACKER, 13, 0x0, 0xffe3 @up + createsprite gSpinningSparkleSpriteTemplate, ANIM_ATTACKER, 13, 0x16, 0xffec @upper right + createsprite gSpinningSparkleSpriteTemplate, ANIM_ATTACKER, 13, 0x1D, 0x0 @right + createsprite gSpinningSparkleSpriteTemplate, ANIM_ATTACKER, 13, 0xffe9, 0xffec @upper left + createsprite gSpinningSparkleSpriteTemplate, ANIM_ATTACKER, 13, 0xffe2, 0x0 @left + createsprite gSpinningSparkleSpriteTemplate, ANIM_ATTACKER, 13, 0x0, 0x1c @down + createsprite gSpinningSparkleSpriteTemplate, ANIM_ATTACKER, 13, 0x16, 0x13 @lower left + createsprite gSpinningSparkleSpriteTemplate, ANIM_ATTACKER, 13, 0xffea, 0x13 @lower right waitforvisualfinish blendoff clearmonbg ANIM_ATTACKER @@ -5587,21 +5587,21 @@ Move_HEAL_PULSE: Move_HEX: loadspritegfx ANIM_TAG_PURPLE_FLAME loadspritegfx ANIM_TAG_GHOSTLY_SPIRIT - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x0 0x0 0x10 0x4C4A @;Deep purple + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x0, 0x0, 0x10, 0x4C4A @;Deep purple waitforvisualfinish monbg ANIM_TARGET splitbgprio_all playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER waitbgfadein - launchtask AnimTask_PurpleFlamesOnTarget 0x3 0x0 - launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_TARGET 0x2 0x0 0x25 0x1 + createvisualtask AnimTask_PurpleFlamesOnTarget, 0x3 + createvisualtask AnimTask_ShakeMon, 0x5, ANIM_TARGET, 0x2, 0x0, 0x25, 0x1 playsewithpan SE_M_NIGHTMARE, SOUND_PAN_TARGET delay 0x20 - launchtask AnimTask_BlendColorCycle 0x2 0x6 ANIM_PAL_DEF 0x2 0x2 0x0 0xc 0x4C4A @;Deep purple - launchtemplate gCurseGhostSpriteTemplate 0x84, 0x0 + createvisualtask AnimTask_BlendColorCycle, 0x2, F_PAL_TARGET, 0x2, 0x2, 0x0, 0xc, 0x4C4A @;Deep purple + createsprite gCurseGhostSpriteTemplate, ANIM_TARGET, 4 waitforvisualfinish clearmonbg ANIM_TARGET - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x0 0x10 0x0 0x4C4A @;Deep purple + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x0, 0x10, 0x0, 0x4C4A @;Deep purple waitforvisualfinish end @@ -5617,22 +5617,22 @@ SkyDropSetup: loadspritegfx ANIM_TAG_ROUND_SHADOW @fly delay 0x0 playsewithpan SE_M_STRING_SHOT, SOUND_PAN_ATTACKER - launchtemplate gSkyDropFlyBallTemplate 0x80 0x6 0x0 0x0 0x0 0x0 0x1e 0x0 + createsprite gSkyDropFlyBallTemplate, ANIM_TARGET, 0, 0x0, 0x0, 0x0, 0x0, 0x1e, 0x0 waitforvisualfinish invisible ANIM_TARGET playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER - launchtemplate gSkyDropTargetFlyingTemplate 0x2 0x4 0x0 0x0 0xd 0x150 + createsprite gSkyDropTargetFlyingTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0xd, 0x150 end SkyDropUnleash: visible ANIM_TARGET monbg ANIM_DEF_PARTNER setalpha 12, 8 playsewithpan SE_M_SWAGGER, SOUND_PAN_TARGET - launchtemplate gBounceBallLandSpriteTemplate 0x83 0x0 + createsprite gBounceBallLandSpriteTemplate, ANIM_TARGET, 3 delay 0x7 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET - launchtemplate gBasicHitSplatSpriteTemplate 0x82, 0x4, 0x0 0x0 0x1 0x0 - launchtask AnimTask_ShakeMon 0x5 0x5 0x1 0x0 0x5 0xb 0x1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x1, 0x0 + createvisualtask AnimTask_ShakeMon, 0x5, 0x1, 0x0, 0x5, 0xb, 0x1 waitforvisualfinish clearmonbg ANIM_DEF_PARTNER blendoff @@ -5642,8 +5642,8 @@ Move_SHIFT_GEAR: loadspritegfx ANIM_TAG_GEAR @Gear monbg ANIM_ATTACKER playsewithpan SE_ESCALATOR, SOUND_PAN_ATTACKER - launchtemplate gShiftGearGearsTemplate 0x2 0x5 ANIM_ATTACKER 0xFFF3 0x8 0x65 0xa - launchtemplate gShiftGearGearsTemplate 0x2 0x5 ANIM_ATTACKER 0xE 0xFFF8 0x65 0xa + createsprite gShiftGearGearsTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0xFFF3, 0x8, 0x65, 0xa + createsprite gShiftGearGearsTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0xE, 0xFFF8, 0x65, 0xa waitforvisualfinish clearmonbg ANIM_ATTACKER end @@ -5655,21 +5655,21 @@ Move_CIRCLE_THROW: monbg ANIM_DEF_PARTNER setalpha 12, 8 playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER - launchtask AnimTask_TranslateMonEllipticalRespectSide 0x2 0x5 0x0 0xc 0x4 0x1 0x2 + createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 0x2, 0x0, 0xc, 0x4, 0x1, 0x2 waitforvisualfinish - launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x14 0x0 0x0 0x4 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x14, 0x0, 0x0, 0x4 delay 0x2 - launchtemplate gBasicHitSplatSpriteTemplate 0x3 0x4 0x0 0x0 0x1 0x1 - launchtemplate gCircleThrowRingTemplate 0x3 0x4 0x0 0x0 0x100 0x0 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x1, 0x1 + createsprite gCircleThrowRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x100, 0x0 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET delay 0x1 - launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xffe8 0x0 0x0 0x4 - launchtemplate gCircleThrowRingTemplate 0x3 0x4 0x0 0x0 0x100 0x0 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0xffe8, 0x0, 0x0, 0x4 + createsprite gCircleThrowRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x100, 0x0 waitforvisualfinish delay 0x3 - launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0x0 0x7 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x7 delay 0xb - launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0xa + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0xa waitforvisualfinish clearmonbg ANIM_DEF_PARTNER blendoff @@ -5721,10 +5721,10 @@ Move_QUASH: waitbgfadein setalpha 12, 8 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET - launchtemplate gQuashArmHitTemplate 0x83, 0x3 0x0 0xffe0 0xf + createsprite gQuashArmHitTemplate, ANIM_TARGET, 3, 0x0, 0xffe0, 0xf delay 0x13 playsewithpan SE_M_MINIMIZE, SOUND_PAN_ATTACKER - launchtask AnimTask_SquishTarget 0x2 0x0 + createvisualtask AnimTask_SquishTarget, 0x2 waitforvisualfinish clearmonbg ANIM_TARGET blendoff @@ -5759,31 +5759,31 @@ Move_REFLECT_TYPE: monbg ANIM_TARGET setalpha 8, 8 playsewithpan SE_M_STRING_SHOT2, SOUND_PAN_TARGET - launchtemplate gReflectTypeBlueStringTemplate 0x82 0x2 0x0 0xa + createsprite gReflectTypeBlueStringTemplate, ANIM_TARGET, 2, 0x0, 0xa delay 0x4 - launchtemplate gReflectTypeVioletStringTemplate 0x82 0x2 0x0 0xfffe + createsprite gReflectTypeVioletStringTemplate, ANIM_TARGET, 2, 0x0, 0xfffe delay 0x4 - launchtemplate gReflectTypeWhiteStringTemplate 0x82 0x2 0x0 0x16 + createsprite gReflectTypeWhiteStringTemplate, ANIM_TARGET, 2, 0x0, 0x16 waitforvisualfinish clearmonbg ANIM_TARGET delay 0x1F monbg ANIM_ATTACKER playsewithpan SE_M_MILK_DRINK, SOUND_PAN_ATTACKER - launchtemplate gReflectTypeWhiteRingTemplate 0x2 0x0 + createsprite gReflectTypeWhiteRingTemplate, ANIM_ATTACKER, 2 delay 0x1 - launchtemplate gReflectTypePinkRingTemplate 0x2 0x0 + createsprite gReflectTypePinkRingTemplate, ANIM_ATTACKER, 2 delay 0x1 - launchtemplate gReflectTypeVioletRingTemplate 0x2 0x0 + createsprite gReflectTypeVioletRingTemplate, ANIM_ATTACKER, 2 delay 0x1 - launchtemplate gReflectTypeBlueRingTemplate 0x2 0x0 + createsprite gReflectTypeBlueRingTemplate, ANIM_ATTACKER, 2 delay 0x1 - launchtemplate gReflectTypeWhiteRingTemplate 0x2 0x0 + createsprite gReflectTypeWhiteRingTemplate, ANIM_ATTACKER, 2 delay 0x1 - launchtemplate gReflectTypePinkRingTemplate 0x2 0x0 + createsprite gReflectTypePinkRingTemplate, ANIM_ATTACKER, 2 delay 0x1 - launchtemplate gReflectTypeVioletRingTemplate 0x2 0x0 + createsprite gReflectTypeVioletRingTemplate, ANIM_ATTACKER, 2 delay 0x1 - launchtemplate gReflectTypeBlueRingTemplate 0x2 0x0 + createsprite gReflectTypeBlueRingTemplate, ANIM_ATTACKER, 2 waitforvisualfinish clearmonbg ANIM_ATTACKER blendoff @@ -5793,18 +5793,18 @@ Move_RETALIATE: loadspritegfx ANIM_TAG_CUT @Cut monbg ANIM_DEF_PARTNER setalpha 9, 8 - launchtask AnimTask_AttackerPunchWithTrace 0x2 0x2 0x7128 0xa - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x10 0x0 + createvisualtask AnimTask_AttackerPunchWithTrace, 0x2, 0x7128, 0xa + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x10, 0x0 waitforvisualfinish playsewithpan SE_M_CUT, SOUND_PAN_TARGET - launchtemplate gGuillotineSpriteTemplate 0x2 0x1 0x0 - launchtemplate gGuillotineSpriteTemplate 0x2 0x1 0x1 + createsprite gGuillotineSpriteTemplate, ANIM_ATTACKER, 2, 0x0 + createsprite gGuillotineSpriteTemplate, ANIM_ATTACKER, 2, 0x1 delay 0x38 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x10 0x10 0x43D + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x10, 0x10, 0x43D waitforvisualfinish - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0 0x3 0xf 0x1 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x10 0x0 0x043D + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x0, 0x3, 0xf, 0x1 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x10, 0x0, 0x043D waitforvisualfinish clearmonbg ANIM_DEF_PARTNER blendoff @@ -5814,26 +5814,26 @@ Move_FINAL_GAMBIT: loadspritegfx ANIM_TAG_PINK_CLOUD @yawn animation loadspritegfx ANIM_TAG_WATER_IMPACT @blue colour loadspritegfx ANIM_TAG_EXPLOSION @explosion animation - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xC 0x0 @Darken + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xC, 0x0 @Darken waitforvisualfinish - launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0xa 0x1 - launchtask AnimTask_BlendColorCycle 0x2 0x6 ANIM_PAL_ATK 0x0 0x2 0x0 0x8 0x7fff + createvisualtask AnimTask_ShakeMon2, 0x2, 0x0, 0x1, 0x0, 0xa, 0x1 + createvisualtask AnimTask_BlendColorCycle, 0x2, F_PAL_ATTACKER, 0x0, 0x2, 0x0, 0x8, 0x7fff waitforvisualfinish playsewithpan SE_M_SAND_ATTACK, SOUND_PAN_ATTACKER - launchtemplate gFinalGambitBlueYawnTemplate 0x2 0x3 0x0 0x0 0x25 + createsprite gFinalGambitBlueYawnTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x25 delay 0x4 waitforvisualfinish - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0xf 0x1 - launchtask AnimTask_ScaleMonAndRestore 0x5 0x5 0xfffc 0xfffc 0xf 0x1 0x1 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x3, 0x0, 0xf, 0x1 + createvisualtask AnimTask_ScaleMonAndRestore, 0x5, 0xfffc, 0xfffc, 0xf, 0x1, 0x1 waitforvisualfinish monbg ANIM_TARGET delay 0x1 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gFinalGambitExplosionTemplate 0x3 0x4 0x0 0x0 0x1 0x1 - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0 0x3 0xf 0x1 + createsprite gFinalGambitExplosionTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x1, 0x1 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x0, 0x3, 0xf, 0x1 waitforvisualfinish clearmonbg ANIM_TARGET - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xC 0x0 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xC, 0x0, 0x0 waitforvisualfinish end @@ -5841,7 +5841,7 @@ Move_BESTOW: monbg ANIM_TARGET splitbgprio ANIM_TARGET panse SE_M_METRONOME, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0 - launchtask AnimTask_CreateBestowItem 0x2 0x6 0x14 0x0 0x0 0x0 0x28 0xffe7 + createvisualtask AnimTask_CreateBestowItem, 0x2, 0x14, 0x0, 0x0, 0x0, 0x28, 0xffe7 waitforvisualfinish unloadspritegfx ANIM_TAG_ITEM_BAG @;The generated item sprite uses this tag clearmonbg ANIM_TARGET @@ -6257,7 +6257,7 @@ Move_STRUGGLE_BUG: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET setalpha 12, 8 - createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_ATK, 2, 0, 9, 0x0a1f + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 2, 0, 9, 0x0a1f waitforvisualfinish createvisualtask AnimTask_FlailMovement, 2, 0 createsprite gMovementWavesSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 2 @@ -6268,7 +6268,7 @@ Move_STRUGGLE_BUG: createvisualtask AnimTask_ShakeTargetBasedOnMovePowerOrDmg, 2, FALSE, 1, 0x1e, 1, 0 createvisualtask AnimTask_ShakeTargetPartnerBasedOnMovePowerOrDmg, 2, FALSE, 1, 0x1e, 1, 0 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET - createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_ATK, 2, 9, 0, 0x0a1f + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 2, 9, 0, 0x0a1f delay 5 createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 1 delay 5 @@ -6279,7 +6279,7 @@ Move_STRUGGLE_BUG: end Move_BULLDOZE: - launchtask AnimTask_Splash 0x2 0x2 0x0 0x3 + createvisualtask AnimTask_Splash, 0x2, 0x0, 0x3 delay 0x8 goto Move_EARTHQUAKE @@ -6289,34 +6289,34 @@ Move_FROST_BREATH: loadspritegfx ANIM_TAG_FIRE_PLUME fadetobg BG_ICE waitbgfadeout - launchtask AnimTask_StartSlidingBg 0x5 0x4 0x300 0x0 0x0 0xffff + createvisualtask AnimTask_StartSlidingBg, 0x5, 0x300, 0x0, 0x0, 0xffff waitbgfadein playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER - launchtask AnimTask_ShakeMon 0x5 0x5 0x0 0x0 0x2 0x28 0x1 + createvisualtask AnimTask_ShakeMon, 0x5, 0x0, 0x0, 0x2, 0x28, 0x1 waitforvisualfinish - launchtemplate gSlideMonToOffsetSpriteTemplate 0x82 0x5 0x0 0xf 0x0 0x0 0x4 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_TARGET, 2, 0x0, 0xf, 0x0, 0x0, 0x4 waitforvisualfinish - launchtemplate gFrostBreathBlueBreathTemplate 0x82 0x5 0x1e 0xf 0x0 0xa 0xa + createsprite gFrostBreathBlueBreathTemplate, ANIM_TARGET, 2, 0x1e, 0xf, 0x0, 0xa, 0xa waitforvisualfinish loopsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET, 0xb, 0x3 - launchtask AnimTask_ShakeMon 0x5 0x5 0x1 0x0 0x3 0x19 0x1 - launchtemplate gFrostBreathBlueRageTemplate 0xc2 0x3 0x1 0x5 0x0 + createvisualtask AnimTask_ShakeMon, 0x5, 0x1, 0x0, 0x3, 0x19, 0x1 + createsprite gFrostBreathBlueRageTemplate, ANIM_TARGET, 66, 0x1, 0x5, 0x0 delay 0x1 - launchtemplate gFrostBreathBlueRageTemplate 0xc2 0x3 0x1 0xfff6 0xfff1 + createsprite gFrostBreathBlueRageTemplate, ANIM_TARGET, 66, 0x1, 0xfff6, 0xfff1 delay 0x1 - launchtemplate gFrostBreathBlueRageTemplate 0x82, 0x3, 0x1 0x0 0x19 + createsprite gFrostBreathBlueRageTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x19 delay 0x1 - launchtemplate gFrostBreathBlueRageTemplate 0xc2 0x3 0x1 0xf 0x5 + createsprite gFrostBreathBlueRageTemplate, ANIM_TARGET, 66, 0x1, 0xf, 0x5 delay 0x1 - launchtemplate gFrostBreathBlueRageTemplate 0xc2 0x3 0x1 0xffe7 0x0 + createsprite gFrostBreathBlueRageTemplate, ANIM_TARGET, 66, 0x1, 0xffe7, 0x0 delay 0x1 - launchtemplate gFrostBreathBlueRageTemplate 0x82, 0x3, 0x1 0x1e 0x1e + createsprite gFrostBreathBlueRageTemplate, ANIM_TARGET, 2, 0x1, 0x1e, 0x1e delay 0x1 - launchtemplate gFrostBreathBlueRageTemplate 0x82, 0x3, 0x1 0xffe5 0x19 + createsprite gFrostBreathBlueRageTemplate, ANIM_TARGET, 2, 0x1, 0xffe5, 0x19 delay 0x1 - launchtemplate gFrostBreathBlueRageTemplate 0xc2 0x3 0x1 0x0 0x8 + createsprite gFrostBreathBlueRageTemplate, ANIM_TARGET, 66, 0x1, 0x0, 0x8 waitforvisualfinish - launchtemplate gSlideMonToOriginalPosSpriteTemplate 0xc2 0x3 0x0 0x0 0x4 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_TARGET, 66, 0x0, 0x0, 0x4 waitforvisualfinish call UnsetPsychicBg end @@ -6330,31 +6330,31 @@ Move_DRAGON_TAIL: waitforvisualfinish setalpha 12, 8 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_ATTACKER - launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x14 0x3 0x0 0x4 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x14, 0x3, 0x0, 0x4 delay 0x1 - launchtemplate gSlamHitSpriteTemplate 0x2 0x2 0x0 0x0 + createsprite gSlamHitSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0 delay 0x3 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET - launchtemplate gBasicHitSplatSpriteTemplate 0x3 0x4 0x0 0x0 0x1 0x1 - launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xfff4 0xa 0x0 0x3 - launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0x0 0x5 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x1, 0x1 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0xfff4, 0xa, 0x0, 0x3 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x5 call TailWhackDown delay 0x3 - launchtask AnimTask_ShakeMonInPlace 0x2 0x5 0x1 0x0 0x3 0x6 0x1 + createvisualtask AnimTask_ShakeMonInPlace, 0x2, 0x1, 0x0, 0x3, 0x6, 0x1 waitforvisualfinish delay 0x5 - launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x6 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x6 waitforvisualfinish clearmonbg ANIM_TARGET blendoff end TailWhackDown: - launchtemplate gBasicHitSplatSpriteTemplate 0x83 4 0xfff6 0xfff8 1 1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0xfff6, 0xfff8, 1, 1 playsewithpan SE_M_STRENGTH, SOUND_PAN_TARGET - launchtemplate gRockScatterSpriteTemplate, 0x82, 4, -12, 0x1b, 2, 3 - launchtemplate gRockScatterSpriteTemplate, 0x82, 4, 8, 28, 3, 4 - launchtemplate gRockScatterSpriteTemplate, 0x82, 4, -4, 30, 2, 3 - launchtemplate gRockScatterSpriteTemplate, 0x82, 4, 12, 25, 4, 4 + createsprite gRockScatterSpriteTemplate, ANIM_TARGET, 2, -12, 0x1b, 2, 3 + createsprite gRockScatterSpriteTemplate, ANIM_TARGET, 2, 8, 28, 3, 4 + createsprite gRockScatterSpriteTemplate, ANIM_TARGET, 2, -4, 30, 2, 3 + createsprite gRockScatterSpriteTemplate, ANIM_TARGET, 2, 12, 25, 4, 4 return Move_WORK_UP: @@ -6420,7 +6420,7 @@ Move_WILD_CHARGE: monbg ANIM_TARGET setalpha 12, 8 playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER - launchtemplate gGrowingShockWaveOrbSpriteTemplate 0x2 0x0 @electric circle + createsprite gGrowingShockWaveOrbSpriteTemplate, ANIM_ATTACKER, 2 @electric circle delay 0x1e waitforvisualfinish loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 0x1c, 0x2 @@ -6429,23 +6429,23 @@ Move_WILD_CHARGE: call ScreenFlash waitforvisualfinish playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER - launchtemplate gVerticalDipSpriteTemplate 0x2 0x3 0x6 0x1 0x0 + createsprite gVerticalDipSpriteTemplate, ANIM_ATTACKER, 2, 0x6, 0x1, 0x0 waitforvisualfinish delay 0xb - launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x1a 0x0 0x0 0x5 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x1a, 0x0, 0x0, 0x5 delay 0x6 - launchtemplate gBasicHitSplatSpriteTemplate 0x4 0x4 0xfff6 0x0 0x1 0x0 - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0 0x3 0x10 0x1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 4, 0xfff6, 0x0, 0x1, 0x0 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x0, 0x3, 0x10, 0x1 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET call ElectricityEffect waitforvisualfinish - launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0x0 0x5 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x5 waitforvisualfinish clearmonbg ANIM_TARGET blendoff end ScreenFlash: - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xC 0x0 0x07FE + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xC, 0x0, 0x07FE return Move_DRILL_RUN: @@ -6454,51 +6454,51 @@ Move_DRILL_RUN: setalpha 12, 8 fadetobg BG_FISSURE waitbgfadeout - launchtask AnimTask_PositionFissureBgOnBattler 0x5 0x3 0x1 0x5 0xffff - launchtemplate gBowMonSpriteTemplate 0x2 0x1 0x0 + createvisualtask AnimTask_PositionFissureBgOnBattler, 0x5, 0x1, 0x5, 0xffff + createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 0x0 playsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER waitforvisualfinish delay 0x2 - launchtemplate gBowMonSpriteTemplate 0x2 0x1 0x1 - launchtemplate gHornHitSpriteTemplate 0x84 0x3 0x0 0x0 0xc + createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 0x1 + createsprite gHornHitSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0xc waitforvisualfinish playse 0x14 - launchtask AnimTask_ShakeMonInPlace 0x2 0x5 0x0 0x2 0x0 0x28 0x1 - launchtask AnimTask_ShakeMonInPlace 0x2 0x5 0x1 0xa 0x0 0x28 0x1 - launchtemplate gFlashingHitSplatSpriteTemplate 0x83 0x4 0x0 0x0 0x1 0x3 + createvisualtask AnimTask_ShakeMonInPlace, 0x2, 0x0, 0x2, 0x0, 0x28, 0x1 + createvisualtask AnimTask_ShakeMonInPlace, 0x2, 0x1, 0xa, 0x0, 0x28, 0x1 + createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, 0x1, 0x3 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET delay 0x4 - launchtemplate gFlashingHitSplatSpriteTemplate 0x83 0x4 0x0 0x2 0x1 0x3 + createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x2, 0x1, 0x3 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET delay 0x4 - launchtemplate gFlashingHitSplatSpriteTemplate 0x83 0x4 0xfffc 0x3 0x1 0x3 + createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 0xfffc, 0x3, 0x1, 0x3 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET delay 0x4 - launchtemplate gFlashingHitSplatSpriteTemplate 0x83 0x4 0xfff8 0xfffb 0x1 0x3 + createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 0xfff8, 0xfffb, 0x1, 0x3 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET delay 0x4 - launchtemplate gFlashingHitSplatSpriteTemplate 0x83 0x4 0x4 0xfff4 0x1 0x3 + createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x4, 0xfff4, 0x1, 0x3 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET delay 0x4 - launchtemplate gFlashingHitSplatSpriteTemplate 0x83 0x4 0x10 0x0 0x1 0x3 + createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x0, 0x1, 0x3 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET delay 0x4 - launchtemplate gFlashingHitSplatSpriteTemplate 0x83 0x4 0x5 0x12 0x1 0x3 + createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x5, 0x12, 0x1, 0x3 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET delay 0x4 - launchtemplate gFlashingHitSplatSpriteTemplate 0x83 0x4 0xffef 0xc 0x1 0x2 + createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 0xffef, 0xc, 0x1, 0x2 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET delay 0x4 - launchtemplate gFlashingHitSplatSpriteTemplate 0x83 0x4 0xffeb 0xfff1 0x1 0x2 + createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 0xffeb, 0xfff1, 0x1, 0x2 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET delay 0x4 - launchtemplate gFlashingHitSplatSpriteTemplate 0x83 0x4 0x8 0xffe5 0x1 0x2 + createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x8, 0xffe5, 0x1, 0x2 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET delay 0x4 - launchtemplate gFlashingHitSplatSpriteTemplate 0x83 0x4 0x20 0x0 0x1 0x2 + createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x20, 0x0, 0x1, 0x2 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET delay 0x4 - launchtemplate gBowMonSpriteTemplate 0x2 0x1 0x2 + createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 0x2 waitforvisualfinish call UnsetPsychicBg end @@ -6511,15 +6511,15 @@ Move_DUAL_CHOP: splitbgprio ANIM_TARGET setalpha 12, 8 playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER - launchtemplate gHorizontalLungeSpriteTemplate 0x2 0x2 0x4 0x4 + createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 0x4, 0x4 delay 0x6 - launchtask AnimTask_ShakeMon 0x2 0x5 0x1 0x5 0x0 0x6 0x1 - launchtemplate gKarateChopSpriteTemplate 0x2 0x8 0xffe0 0x0 0x0 0x0 0xa 0x1 0x3 0x0 @left - launchtemplate gKarateChopSpriteTemplate 0x2 0x8 0x0515 0x0 0x0 0x0 0xa 0x1 0x3 0x0 @right + createvisualtask AnimTask_ShakeMon, 0x2, 0x1, 0x5, 0x0, 0x6, 0x1 + createsprite gKarateChopSpriteTemplate, ANIM_ATTACKER, 2, 0xffe0, 0x0, 0x0, 0x0, 0xa, 0x1, 0x3, 0x0 @left + createsprite gKarateChopSpriteTemplate, ANIM_ATTACKER, 2, 0x0515, 0x0, 0x0, 0x0, 0xa, 0x1, 0x3, 0x0 @right waitforvisualfinish playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET - launchtemplate gDualChopImpactTemplate 0x3 0x4 0x0 0x0 0x1 0x2 - launchtask AnimTask_ShakeMon 0x5 0x5 0x1 0x4 0x0 0x6 0x1 + createsprite gDualChopImpactTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x1, 0x2 + createvisualtask AnimTask_ShakeMon, 0x5, 0x1, 0x4, 0x0, 0x6, 0x1 waitforvisualfinish clearmonbg ANIM_DEF_PARTNER blendoff @@ -6529,12 +6529,12 @@ Move_HEART_STAMP: loadspritegfx ANIM_TAG_HEART_STAMP monbg ANIM_TARGET loopsewithpan SE_M_CHARM, SOUND_PAN_ATTACKER, 0xc, 0x3 - launchtemplate gHeartStampSpinningHeartTemplate, 0x80, 0x4 0x0 0x0 0x1 0x1e + createsprite gHeartStampSpinningHeartTemplate, ANIM_TARGET, 0, 0x0, 0x0, 0x1, 0x1e delay 0x1E clearmonbg ANIM_TARGET playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET - launchtask AnimTask_ShakeMon2 0x83 0x5 0x1 0x4 0x0 0x5 0x1 - launchtask AnimTask_StretchTargetUp 0x3 0x0 + createvisualtask AnimTask_ShakeMon2, 0x83, 0x1, 0x4, 0x0, 0x5, 0x1 + createvisualtask AnimTask_StretchTargetUp, 0x3 waitforvisualfinish end @@ -6544,10 +6544,10 @@ Move_HORN_LEECH: loadspritegfx ANIM_TAG_ORBS loadspritegfx ANIM_TAG_BLUE_STAR playsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER - launchtemplate gHornLeechHornTemplate 0x82, 0x3, 0x0 0x0 0x25 + createsprite gHornLeechHornTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x25 waitforvisualfinish - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x5 0x0 0x6 0x1 - launchtemplate gFlashingHitSplatSpriteTemplate 0x83 0x4 0x0 0x0 0x1 0x1 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x5, 0x0, 0x6, 0x1 + createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, 0x1, 0x1 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET call GigaDrainAbsorbEffect waitforvisualfinish @@ -6563,18 +6563,18 @@ Move_SACRED_SWORD: monbg ANIM_ATTACKER setalpha 12, 8 playsewithpan SE_M_SWORDS_DANCE, SOUND_PAN_ATTACKER - launchtemplate gSwordsDanceBladeSpriteTemplate 0x2 0x2 0x0 0x0 + createsprite gSwordsDanceBladeSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0 delay 0x16 - launchtask AnimTask_FlashAnimTagWithColor 0x2 0x7 0x2715 0x2 0x2 0x7ff2 0x10 0x0 0x0 + createvisualtask AnimTask_FlashAnimTagWithColor, 0x2, 0x2715, 0x2, 0x2, 0x7ff2, 0x10, 0x0, 0x0 waitforvisualfinish clearmonbg ANIM_ATTACKER delay 0x1 monbg ANIM_TARGET playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET - launchtemplate gSacredSwordBladesTemplate 0x81 0x5 0x0 0xa 0x0 0xFF00 0xA - launchtemplate gSacredSwordCutTemplate 0x2 0x3 0x28 0xffe0 0x0 + createsprite gSacredSwordBladesTemplate, ANIM_TARGET, 1, 0x0, 0xa, 0x0, 0xFF00, 0xA + createsprite gSacredSwordCutTemplate, ANIM_ATTACKER, 2, 0x28, 0xffe0, 0x0 delay 0x5 - launchtask AnimTask_ShakeMon 0x2 0x5 0x1 0x0 0x3 0xa 0x1 + createvisualtask AnimTask_ShakeMon, 0x2, 0x1, 0x0, 0x3, 0xa, 0x1 waitforvisualfinish clearmonbg ANIM_TARGET blendoff @@ -6585,11 +6585,11 @@ Move_RAZOR_SHELL: loadspritegfx ANIM_TAG_RAZOR_SHELL loadspritegfx ANIM_TAG_CUT monbg ANIM_TARGET - launchtemplate gRazorShellTemplate 0x2 0x5 ANIM_TARGET 0x0 0x0 25 0 + createsprite gRazorShellTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x0, 25, 0 playsewithpan SE_M_CUT, SOUND_PAN_TARGET - launchtemplate gCuttingSliceSpriteTemplate 0x1 0x3 0x28 0xffe0 0x0 + createsprite gCuttingSliceSpriteTemplate, ANIM_ATTACKER, 1, 0x28, 0xffe0, 0x0 delay 0x5 - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0 0x3 0xa 0x1 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x0, 0x3, 0xa, 0x1 waitforvisualfinish clearmonbg ANIM_TARGET waitforvisualfinish @@ -6602,19 +6602,19 @@ Move_HEAT_CRASH: monbg ANIM_TARGET setalpha 12, 8 playsewithpan SE_SUCCESS, SOUND_PAN_TARGET - launchtemplate gHeatCrashEruptionRockTemplate 0x3 0x3 0x0 0xffe0 0xf + createsprite gHeatCrashEruptionRockTemplate, ANIM_ATTACKER, 3, 0x0, 0xffe0, 0xf delay 0x13 - launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0xfff8 0x1 0x1 - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0 0x4 0x9 0x1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff8, 0x1, 0x1 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x0, 0x4, 0x9, 0x1 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET delay 0x5 - launchtemplate gBasicHitSplatSpriteTemplate 0x83 0x4 0xa 0xfff8 0x1 0x1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0xa, 0xfff8, 0x1, 0x1 playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0 0x3 0x5 0x1 - launchtemplate gRockScatterSpriteTemplate 0x82, 0x4, 0xfff4 0x20 0x3 0x4 - launchtemplate gRockScatterSpriteTemplate 0x82, 0x4, 0x8 0x1f 0x2 0x2 - launchtemplate gRockScatterSpriteTemplate 0x82, 0x4, 0xfffc 0x1c 0x2 0x3 - launchtemplate gRockScatterSpriteTemplate 0x82, 0x4, 0xc 0x1e 0x4 0x3 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x0, 0x3, 0x5, 0x1 + createsprite gRockScatterSpriteTemplate, ANIM_TARGET, 2, 0xfff4, 0x20, 0x3, 0x4 + createsprite gRockScatterSpriteTemplate, ANIM_TARGET, 2, 0x8, 0x1f, 0x2, 0x2 + createsprite gRockScatterSpriteTemplate, ANIM_TARGET, 2, 0xfffc, 0x1c, 0x2, 0x3 + createsprite gRockScatterSpriteTemplate, ANIM_TARGET, 2, 0xc, 0x1e, 0x4, 0x3 clearmonbg ANIM_TARGET blendoff end @@ -6625,9 +6625,9 @@ Move_LEAF_TORNADO: monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET playsewithpan SE_M_GUST, SOUND_PAN_TARGET - launchtask AnimTask_ShakeMon 0x5 0x5 0x1 0x0 0x2 0x2f 0x1 - launchtemplate gEllipticalGustSpriteTemplate 0x2 0x2 0x0 0xfff0 - launchtask AnimTask_AnimateGustTornadoPalette 0x5 0x2 0x1 0x46 + createvisualtask AnimTask_ShakeMon, 0x5, 0x1, 0x0, 0x2, 0x2f, 0x1 + createsprite gEllipticalGustSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff0 + createvisualtask AnimTask_AnimateGustTornadoPalette, 0x5, 0x1, 0x46 call LeafTornadoVortex call LeafTornadoVortex call LeafTornadoVortex @@ -6636,17 +6636,17 @@ Move_LEAF_TORNADO: clearmonbg ANIM_TARGET end LeafTornadoVortex: - launchtemplate gLeafTornadoVortexTemplate 0x82 0x7 0x0 0x1c 0x210 0x1e 0xd 0x32 0x1 + createsprite gLeafTornadoVortexTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x210, 0x1e, 0xd, 0x32, 0x1 delay 0x2 - launchtemplate gLeafTornadoVortexTemplate 0x82 0x7 0x0 0x20 0x1e0 0x14 0x10 0xffd2 0x1 + createsprite gLeafTornadoVortexTemplate, ANIM_TARGET, 2, 0x0, 0x20, 0x1e0, 0x14, 0x10, 0xffd2, 0x1 delay 0x2 - launchtemplate gLeafTornadoVortexTemplate 0x82 0x7 0x0 0x21 0x240 0x14 0x8 0x2a 0x1 + createsprite gLeafTornadoVortexTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x240, 0x14, 0x8, 0x2a, 0x1 delay 0x2 - launchtemplate gLeafTornadoVortexTemplate 0x82 0x7 0x0 0x1f 0x190 0x19 0xb 0xffd6 0x1 + createsprite gLeafTornadoVortexTemplate, ANIM_TARGET, 2, 0x0, 0x1f, 0x190, 0x19, 0xb, 0xffd6, 0x1 delay 0x2 - launchtemplate gLeafTornadoVortexTemplate 0x82 0x7 0x0 0x1c 0x200 0x19 0x10 0x2e 0x1 + createsprite gLeafTornadoVortexTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x200, 0x19, 0x10, 0x2e, 0x1 delay 0x2 - launchtemplate gLeafTornadoVortexTemplate 0x82 0x7 0x0 0x21 0x1d0 0x1e 0xf 0xffce 0x1 + createsprite gLeafTornadoVortexTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1d0, 0x1e, 0xf, 0xffce, 0x1 delay 0x2 return @@ -6690,19 +6690,19 @@ Move_COTTON_GUARD: blendoff end CottonSporesSpiralInward: - launchtemplate gCottonGuardSporeTemplate 0x2 0x3 0x28 0xfff6 0xd + createsprite gCottonGuardSporeTemplate, ANIM_ATTACKER, 2, 0x28, 0xfff6, 0xd delay 0x3 - launchtemplate gCottonGuardSporeTemplate 0x2 0x3 0xffdd 0xfff6 0xd + createsprite gCottonGuardSporeTemplate, ANIM_ATTACKER, 2, 0xffdd, 0xfff6, 0xd delay 0x3 - launchtemplate gCottonGuardSporeTemplate 0x2 0x3 0xf 0xffd8 0xd + createsprite gCottonGuardSporeTemplate, ANIM_ATTACKER, 2, 0xf, 0xffd8, 0xd delay 0x3 - launchtemplate gCottonGuardSporeTemplate 0x2 0x3 0xfff6 0xffe0 0xd + createsprite gCottonGuardSporeTemplate, ANIM_ATTACKER, 2, 0xfff6, 0xffe0, 0xd delay 0x3 - launchtemplate gCottonGuardSporeTemplate 0x2 0x3 0x19 0xffec 0xd + createsprite gCottonGuardSporeTemplate, ANIM_ATTACKER, 2, 0x19, 0xffec, 0xd delay 0x3 - launchtemplate gCottonGuardSporeTemplate 0x2 0x3 0xffd8 0xffec 0xd + createsprite gCottonGuardSporeTemplate, ANIM_ATTACKER, 2, 0xffd8, 0xffec, 0xd delay 0x3 - launchtemplate gCottonGuardSporeTemplate 0x2 0x3 0x5 0xffd8 0xd + createsprite gCottonGuardSporeTemplate, ANIM_ATTACKER, 2, 0x5, 0xffd8, 0xd delay 0x3 return @@ -6710,37 +6710,37 @@ Move_NIGHT_DAZE: loadspritegfx ANIM_TAG_THIN_RING @uproar loadspritegfx ANIM_TAG_PURPLE_FLAME @dark violet color loadspritegfx ANIM_TAG_RED_ORB @circles - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xC 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xC, 0x0 waitforvisualfinish playsewithpan SE_ORB, SOUND_PAN_ATTACKER - launchtemplate gNightDazeVioletRingsTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1F 0x8 - launchtemplate gNightDazeVioletCirclesTemplate 0x82 0x1 0x0 - launchtemplate gNightDazeVioletCirclesTemplate 0x82 0x1 0x20 - launchtemplate gNightDazeVioletCirclesTemplate 0x82 0x1 0x40 - launchtemplate gNightDazeVioletCirclesTemplate 0x82 0x1 0x60 - launchtemplate gNightDazeVioletCirclesTemplate 0x82 0x1 0x80 - launchtemplate gNightDazeVioletCirclesTemplate 0x82 0x1 0xa0 - launchtemplate gNightDazeVioletCirclesTemplate 0x82 0x1 0x0 - launchtemplate gNightDazeVioletCirclesTemplate 0x82 0x1 0xe0 - delay 0x1 - launchtemplate gNightDazeVioletRingsTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1F 0x8 - delay 0x1 - launchtemplate gNightDazeVioletRingsTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1F 0x8 + createsprite gNightDazeVioletRingsTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0, 0x1F, 0x8 + createsprite gNightDazeVioletCirclesTemplate, ANIM_TARGET, 2, 0x0 + createsprite gNightDazeVioletCirclesTemplate, ANIM_TARGET, 2, 0x20 + createsprite gNightDazeVioletCirclesTemplate, ANIM_TARGET, 2, 0x40 + createsprite gNightDazeVioletCirclesTemplate, ANIM_TARGET, 2, 0x60 + createsprite gNightDazeVioletCirclesTemplate, ANIM_TARGET, 2, 0x80 + createsprite gNightDazeVioletCirclesTemplate, ANIM_TARGET, 2, 0xa0 + createsprite gNightDazeVioletCirclesTemplate, ANIM_TARGET, 2, 0x0 + createsprite gNightDazeVioletCirclesTemplate, ANIM_TARGET, 2, 0xe0 + delay 0x1 + createsprite gNightDazeVioletRingsTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0, 0x1F, 0x8 + delay 0x1 + createsprite gNightDazeVioletRingsTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0, 0x1F, 0x8 delay 0xF - launchtemplate gNightDazeVioletRingsTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1F 0x8 + createsprite gNightDazeVioletRingsTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0, 0x1F, 0x8 delay 0x1 - launchtemplate gNightDazeVioletRingsTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1F 0x8 + createsprite gNightDazeVioletRingsTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0, 0x1F, 0x8 delay 0x1 - launchtemplate gNightDazeVioletRingsTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1F 0x8 + createsprite gNightDazeVioletRingsTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0, 0x1F, 0x8 waitforvisualfinish - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x1f 0x1 - launchtask AnimTask_BlendBattleAnimPal 0xA 0x5 ANIM_PAL_DEF 0x2 0x0 0x9 0x2002 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x3, 0x0, 0x1f, 0x1 + createvisualtask AnimTask_BlendBattleAnimPal, 0xA, F_PAL_TARGET, 0x2, 0x0, 0x9, 0x2002 delay 0x6 playsewithpan SE_M_SUPERSONIC, SOUND_PAN_ATTACKER waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xA 0x5 ANIM_PAL_DEF 0x2 0x9 0x0 0x2002 + createvisualtask AnimTask_BlendBattleAnimPal, 0xA, F_PAL_TARGET, 0x2, 0x9, 0x0, 0x2002 waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xC 0x0 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xC, 0x0, 0x0 waitforvisualfinish end @@ -6769,17 +6769,17 @@ Move_TAIL_SLAP: setalpha 12, 8 choosetwoturnanim TailSlapRight TailSlapLeft TailSlapContinue: - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x6 0x1 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x3, 0x0, 0x6, 0x1 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET waitforvisualfinish clearmonbg ANIM_TARGET blendoff end TailSlapRight: - launchtemplate gTailSlapTemplate 0x2 0x4 0xfff8 0x0 0x1 0x0 + createsprite gTailSlapTemplate, ANIM_ATTACKER, 2, 0xfff8, 0x0, 0x1, 0x0 goto TailSlapContinue TailSlapLeft: - launchtemplate gTailSlapTemplate 0x2 0x4 0x8 0x0 0x1 0x0 + createsprite gTailSlapTemplate, ANIM_ATTACKER, 2, 0x8, 0x0, 0x1, 0x0 goto TailSlapContinue Move_HURRICANE: @@ -6789,10 +6789,10 @@ Move_HURRICANE: setalpha 12, 8 fadetobg BG_HURRICANE waitbgfadeout - launchtask AnimTask_StartSlidingBg 0x5 0x4 0x1000 0x0 0x1 0xffff + createvisualtask AnimTask_StartSlidingBg, 0x5, 0x1000, 0x0, 0x1, 0xffff waitbgfadein playsewithpan SE_M_GUST, SOUND_PAN_TARGET - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0 0x3 0x40 0x1 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x0, 0x3, 0x40, 0x1 call HurricaneGust delay 0xA call HurricaneGust @@ -6819,16 +6819,16 @@ Move_HEAD_CHARGE: loadspritegfx ANIM_TAG_IMPACT fadetobgfromset BG_GIGA_IMPACT_OPPONENT, BG_GIGA_IMPACT_PLAYER, BG_GIGA_IMPACT_OPPONENT waitbgfadein - launchtemplate gBowMonSpriteTemplate 0x2 0x1 0x0 + createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 0x0 playsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER waitforvisualfinish delay 0x2 - launchtemplate gBowMonSpriteTemplate 0x2 0x1 0x1 + createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 0x1 waitforvisualfinish - launchtask AnimTask_ShakeMon 0x2 0x5 0x0 0x2 0x0 0x4 0x1 - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x5 0x0 0x6 0x1 - launchtemplate gBowMonSpriteTemplate 0x2 0x1 0x2 - launchtemplate gFlashingHitSplatSpriteTemplate 0x83 0x4 0x0 0x0 0x1 0x1 + createvisualtask AnimTask_ShakeMon, 0x2, 0x0, 0x2, 0x0, 0x4, 0x1 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x5, 0x0, 0x6, 0x1 + createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 0x2 + createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, 0x1, 0x1 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET waitforvisualfinish restorebg @@ -6841,17 +6841,17 @@ Move_GEAR_GRIND: monbg ANIM_TARGET setalpha 12, 8 playsewithpan SE_ESCALATOR, SOUND_PAN_ATTACKER - launchtemplate gGearGrindTemplate 0x2 0x6 0xffe0 0xffe0 0x0 0x333 0x333 0xa - launchtemplate gGearGrindTemplate 0x2 0x6 0x20 0x20 0x0 0xfccd 0xfccd 0xa + createsprite gGearGrindTemplate, ANIM_ATTACKER, 2, 0xffe0, 0xffe0, 0x0, 0x333, 0x333, 0xa + createsprite gGearGrindTemplate, ANIM_ATTACKER, 2, 0x20, 0x20, 0x0, 0xfccd, 0xfccd, 0xa delay 0xa - launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0xfff8 0x0 0x1 0x1 - launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_TARGET 0x0 0x7 0x5 0x2 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0xfff8, 0x0, 0x1, 0x1 + createvisualtask AnimTask_ShakeMon, 0x5, ANIM_TARGET, 0x0, 0x7, 0x5, 0x2 waitforvisualfinish - launchtemplate gGearGrindTemplate 0x2 0x6 0x20 0xffe0 0x0 0xfccd 0x333 0xa - launchtemplate gGearGrindTemplate 0x2 0x6 0xffe0 0x20 0x0 0x333 0xfccd 0xa + createsprite gGearGrindTemplate, ANIM_ATTACKER, 2, 0x20, 0xffe0, 0x0, 0xfccd, 0x333, 0xa + createsprite gGearGrindTemplate, ANIM_ATTACKER, 2, 0xffe0, 0x20, 0x0, 0x333, 0xfccd, 0xa delay 0xa - launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x8 0x0 0x1 0x1 - launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_TARGET 0x0 0x8 0x4 0x2 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0x8, 0x0, 0x1, 0x1 + createvisualtask AnimTask_ShakeMon, 0x5, ANIM_TARGET, 0x0, 0x8, 0x4, 0x2 waitforvisualfinish stopsound clearmonbg ANIM_TARGET @@ -6868,16 +6868,16 @@ Move_SEARING_SHOT: createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_WARM_ROCK, 0x0, 0xB, 0xB, 0x01BE @Orange monbg ANIM_ATTACKER setalpha 8, 8 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x10 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x10, 0x0 waitforvisualfinish - launchtask AnimTask_ElectricChargingParticles 0x2 0x4 0x0 0x3c 0x2 0xc - launchtask AnimTask_BlendBattleAnimPal 0xA 0x5 ANIM_PAL_ATK 0x2 0x0 0x9 0x1F + createvisualtask AnimTask_ElectricChargingParticles, 0x2, 0x0, 0x3c, 0x2, 0xc + createvisualtask AnimTask_BlendBattleAnimPal, 0xA, F_PAL_ATTACKER, 0x2, 0x0, 0x9, 0x1F playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER delay 0x1e playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER delay 0x1e playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER - launchtemplate gSearingShotRedChargeTemplate 0x2 0x1 0x0 + createsprite gSearingShotRedChargeTemplate, ANIM_ATTACKER, 2, 0x0 delay 0x19 playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER delay 0x14 @@ -6886,66 +6886,66 @@ Move_SEARING_SHOT: playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER waitforvisualfinish playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_ATTACKER - launchtemplate gSearingShotEruptionRockTemplate 0x2 0x5 0x1 0x0 0x1e 0x19 0xffec - launchtemplate gSearingShotEruptionRockTemplate 0x2 0x5 0x1 0x20 0x1e 0x19 0xffec - launchtemplate gSearingShotEruptionRockTemplate 0x2 0x5 0x1 0x40 0x1e 0x19 0xffec + createsprite gSearingShotEruptionRockTemplate, ANIM_ATTACKER, 2, 0x1, 0x0, 0x1e, 0x19, 0xffec + createsprite gSearingShotEruptionRockTemplate, ANIM_ATTACKER, 2, 0x1, 0x20, 0x1e, 0x19, 0xffec + createsprite gSearingShotEruptionRockTemplate, ANIM_ATTACKER, 2, 0x1, 0x40, 0x1e, 0x19, 0xffec delay 0x2 - launchtemplate gSearingShotEruptionRockTemplate 0x2 0x5 0x1 0x60 0x1e 0x19 0xffec - launchtemplate gSearingShotEruptionRockTemplate 0x2 0x5 0x1 0x80 0x1e 0x19 0xffec + createsprite gSearingShotEruptionRockTemplate, ANIM_ATTACKER, 2, 0x1, 0x60, 0x1e, 0x19, 0xffec + createsprite gSearingShotEruptionRockTemplate, ANIM_ATTACKER, 2, 0x1, 0x80, 0x1e, 0x19, 0xffec delay 0x2 - launchtemplate gSearingShotEruptionRockTemplate 0x42 0x5 0x1 0xa0 0x1e 0x19 0xffec - launchtemplate gSearingShotEruptionRockTemplate 0x42 0x5 0x1 0xa0 0x1e 0x19 0xffec + createsprite gSearingShotEruptionRockTemplate, ANIM_ATTACKER, 66, 0x1, 0xa0, 0x1e, 0x19, 0xffec + createsprite gSearingShotEruptionRockTemplate, ANIM_ATTACKER, 66, 0x1, 0xa0, 0x1e, 0x19, 0xffec delay 0x2 - launchtemplate gSearingShotEruptionRockTemplate 0x42 0x5 0x1 0xe0 0x1e 0x19 0xffec + createsprite gSearingShotEruptionRockTemplate, ANIM_ATTACKER, 66, 0x1, 0xe0, 0x1e, 0x19, 0xffec delay 0xF playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_ATTACKER - launchtemplate gSearingShotEruptionRockTemplate 0x2 0x5 0x1 0x0 0x1e 0x19 0x0 + createsprite gSearingShotEruptionRockTemplate, ANIM_ATTACKER, 2, 0x1, 0x0, 0x1e, 0x19, 0x0 delay 0x2 - launchtemplate gSearingShotEruptionRockTemplate 0x2 0x5 0x1 0x20 0x1e 0x19 0x0 - launchtemplate gSearingShotEruptionRockTemplate 0x2 0x5 0x1 0x40 0x1e 0x19 0x0 - launchtemplate gSearingShotEruptionRockTemplate 0x2 0x5 0x1 0x60 0x1e 0x19 0x0 + createsprite gSearingShotEruptionRockTemplate, ANIM_ATTACKER, 2, 0x1, 0x20, 0x1e, 0x19, 0x0 + createsprite gSearingShotEruptionRockTemplate, ANIM_ATTACKER, 2, 0x1, 0x40, 0x1e, 0x19, 0x0 + createsprite gSearingShotEruptionRockTemplate, ANIM_ATTACKER, 2, 0x1, 0x60, 0x1e, 0x19, 0x0 delay 0x2 - launchtemplate gSearingShotEruptionRockTemplate 0x2 0x5 0x1 0x80 0x1e 0x19 0x0 + createsprite gSearingShotEruptionRockTemplate, ANIM_ATTACKER, 2, 0x1, 0x80, 0x1e, 0x19, 0x0 delay 0x2 - launchtemplate gSearingShotEruptionRockTemplate 0x42 0x5 0x1 0xa0 0x1e 0x19 0x0 - launchtemplate gSearingShotEruptionRockTemplate 0x42 0x5 0x1 0xa0 0x1e 0x19 0x0 + createsprite gSearingShotEruptionRockTemplate, ANIM_ATTACKER, 66, 0x1, 0xa0, 0x1e, 0x19, 0x0 + createsprite gSearingShotEruptionRockTemplate, ANIM_ATTACKER, 66, 0x1, 0xa0, 0x1e, 0x19, 0x0 delay 0x2 - launchtemplate gSearingShotEruptionRockTemplate 0x42 0x5 0x1 0xe0 0x1e 0x19 0x0 + createsprite gSearingShotEruptionRockTemplate, ANIM_ATTACKER, 66, 0x1, 0xe0, 0x1e, 0x19, 0x0 delay 0x15 waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xA 0x5 ANIM_PAL_ATK 0x2 0x9 0x0 0x1F + createvisualtask AnimTask_BlendBattleAnimPal, 0xA, F_PAL_ATTACKER, 0x2, 0x9, 0x0, 0x1F clearmonbg ANIM_ATTACKER fadetobg BG_FIRE waitbgfadeout - launchtask AnimTask_StartSlidingBg 0x5 0x4 0xA00 0x0 0x1 0xffff + createvisualtask AnimTask_StartSlidingBg, 0x5, 0xA00, 0x0, 0x1, 0xffff waitbgfadein delay 0x1E monbg ANIM_ATK_PARTNER - launchtask AnimTask_BlendBattleAnimPal 0xA 0x5 ANIM_PAL_ATK_PARTNER | ANIM_PAL_DEF | ANIM_PAL_DEF_PARTNER 0x2 0x0 0x9 0x1F + createvisualtask AnimTask_BlendBattleAnimPal, 0xA, F_PAL_ADJACENT, 0x2, 0x0, 0x9, 0x1F playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x1B 0x1 - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_DEF_PARTNER 0x3 0x0 0x1B 0x1 - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_ATK_PARTNER 0x3 0x0 0x1B 0x1 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x3, 0x0, 0x1B, 0x1 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_DEF_PARTNER, 0x3, 0x0, 0x1B, 0x1 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_ATK_PARTNER, 0x3, 0x0, 0x1B, 0x1 playsewithpan SE_M_FIRE_PUNCH, SOUND_PAN_TARGET - launchtemplate gSearingShotEruptionImpactTemplate 0x83 0x5, -5, -5, 0x1 0x1E ANIM_TARGET - launchtemplate gSearingShotEruptionImpactTemplate 0x83 0x5, 5, 10, 0x1 0x1E ANIM_TARGET - launchtemplate gSearingShotEruptionImpactTemplate 0x83 0x5, -5, -5, 0x1 0x1E ANIM_DEF_PARTNER - launchtemplate gSearingShotEruptionImpactTemplate 0x83 0x5, 5, 10, 0x1 0x1E ANIM_DEF_PARTNER - launchtemplate gSearingShotEruptionImpactTemplate 0x83 0x5, -5, -5, 0x1 0x1E ANIM_ATK_PARTNER - launchtemplate gSearingShotEruptionImpactTemplate 0x83 0x5, 5, 10, 0x1 0x1E ANIM_ATK_PARTNER + createsprite gSearingShotEruptionImpactTemplate, ANIM_TARGET, 3, -5, -5, 0x1, 0x1E, ANIM_TARGET + createsprite gSearingShotEruptionImpactTemplate, ANIM_TARGET, 3, 5, 10, 0x1, 0x1E, ANIM_TARGET + createsprite gSearingShotEruptionImpactTemplate, ANIM_TARGET, 3, -5, -5, 0x1, 0x1E, ANIM_DEF_PARTNER + createsprite gSearingShotEruptionImpactTemplate, ANIM_TARGET, 3, 5, 10, 0x1, 0x1E, ANIM_DEF_PARTNER + createsprite gSearingShotEruptionImpactTemplate, ANIM_TARGET, 3, -5, -5, 0x1, 0x1E, ANIM_ATK_PARTNER + createsprite gSearingShotEruptionImpactTemplate, ANIM_TARGET, 3, 5, 10, 0x1, 0x1E, ANIM_ATK_PARTNER delay 0x1E playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xA 0x5 ANIM_PAL_ATK_PARTNER | ANIM_PAL_DEF | ANIM_PAL_DEF_PARTNER 0x2 0x9 0x0 0x1F + createvisualtask AnimTask_BlendBattleAnimPal, 0xA, F_PAL_ADJACENT, 0x2, 0x9, 0x0, 0x1F delay 0x1E call UnsetPsychicBg - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x0 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x0, 0x0 clearmonbg ANIM_ATK_PARTNER blendoff end Move_TECHNO_BLAST: - launchtask AnimTask_TechnoBlast 0x5 0x0 + createvisualtask AnimTask_TechnoBlast, 0x5 jumpargeq 0x0, TYPE_FIRE, TechnoBlastFire jumpargeq 0x0, TYPE_WATER, TechnoBlastWater jumpargeq 0x0, TYPE_ELECTRIC, TechnoBlastElectric @@ -6958,96 +6958,96 @@ TechnoBlastNormal: loadspritegfx ANIM_TAG_SPARK_2 @blast particles loadspritegfx ANIM_TAG_GRAY_SMOKE @dispersal monbg ANIM_ATTACKER - setblends 0x80E - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xC 0x0 + setalpha 14, 8 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xC, 0x0 waitforvisualfinish loopsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER, 0xE, 0x8 - launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0x28 0x28 0x10 + createsprite gTechnoBlastWhiteCircleTemplate, ANIM_ATTACKER, 2, 0x28, 0x28, 0x10 delay 0x2 - launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0xffd8 0xffd8 0x10 + createsprite gTechnoBlastWhiteCircleTemplate, ANIM_ATTACKER, 2, 0xffd8, 0xffd8, 0x10 delay 0x2 - launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0x0 0x28 0x10 + createsprite gTechnoBlastWhiteCircleTemplate, ANIM_ATTACKER, 2, 0x0, 0x28, 0x10 delay 0x2 - launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0x0 0xffd8 0x10 + createsprite gTechnoBlastWhiteCircleTemplate, ANIM_ATTACKER, 2, 0x0, 0xffd8, 0x10 delay 0x2 - launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0x28 0xffec 0x10 + createsprite gTechnoBlastWhiteCircleTemplate, ANIM_ATTACKER, 2, 0x28, 0xffec, 0x10 delay 0x2 - launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0x28 0x14 0x10 + createsprite gTechnoBlastWhiteCircleTemplate, ANIM_ATTACKER, 2, 0x28, 0x14, 0x10 delay 0x2 - launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0xffd8 0xffec 0x10 + createsprite gTechnoBlastWhiteCircleTemplate, ANIM_ATTACKER, 2, 0xffd8, 0xffec, 0x10 delay 0x2 - launchtemplate gTechnoBlastWhiteChargeTemplate 0x2 0x1 0x0 + createsprite gTechnoBlastWhiteChargeTemplate, ANIM_ATTACKER, 2, 0x0 call TechnoBlastWhiteCircles call TechnoBlastWhiteCircles - launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0x28 0x28 0x10 + createsprite gTechnoBlastWhiteCircleTemplate, ANIM_ATTACKER, 2, 0x28, 0x28, 0x10 delay 0x2 - launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0xffd8 0xffd8 0x10 + createsprite gTechnoBlastWhiteCircleTemplate, ANIM_ATTACKER, 2, 0xffd8, 0xffd8, 0x10 delay 0x2 - launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0x0 0x28 0x10 + createsprite gTechnoBlastWhiteCircleTemplate, ANIM_ATTACKER, 2, 0x0, 0x28, 0x10 delay 0x2 - launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0x0 0xffd8 0x10 + createsprite gTechnoBlastWhiteCircleTemplate, ANIM_ATTACKER, 2, 0x0, 0xffd8, 0x10 delay 0x2 - launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0x28 0xffec 0x10 + createsprite gTechnoBlastWhiteCircleTemplate, ANIM_ATTACKER, 2, 0x28, 0xffec, 0x10 delay 0x2 - launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0x28 0x14 0x10 + createsprite gTechnoBlastWhiteCircleTemplate, ANIM_ATTACKER, 2, 0x28, 0x14, 0x10 delay 0x2 - launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0xffd8 0xffec 0x10 + createsprite gTechnoBlastWhiteCircleTemplate, ANIM_ATTACKER, 2, 0xffd8, 0xffec, 0x10 delay 0x2 waitforvisualfinish playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER - launchtemplate gTechnoBlastWhiteBlastTemplate 0x83 0x6 0xa 0x0 0x0 0x0 0x1e 0x0 - launchtemplate gTechnoBlastWhiteSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x0 0x28 0x0 - launchtemplate gTechnoBlastWhiteSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x40 0x28 0x1 - launchtemplate gTechnoBlastWhiteSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x80 0x28 0x0 - launchtemplate gTechnoBlastWhiteSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x0 0x28 0x2 - launchtemplate gTechnoBlastWhiteSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x20 0x28 0x0 - launchtemplate gTechnoBlastWhiteSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x60 0x28 0x1 - launchtemplate gTechnoBlastWhiteSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0xa0 0x28 0x0 - launchtemplate gTechnoBlastWhiteSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0xe0 0x28 0x2 + createsprite gTechnoBlastWhiteBlastTemplate, ANIM_TARGET, 3, 0xa, 0x0, 0x0, 0x0, 0x1e, 0x0 + createsprite gTechnoBlastWhiteSparkTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x10, 0x1e, 0x0, 0x28, 0x0 + createsprite gTechnoBlastWhiteSparkTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x10, 0x1e, 0x40, 0x28, 0x1 + createsprite gTechnoBlastWhiteSparkTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x10, 0x1e, 0x80, 0x28, 0x0 + createsprite gTechnoBlastWhiteSparkTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x10, 0x1e, 0x0, 0x28, 0x2 + createsprite gTechnoBlastWhiteSparkTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x8, 0x1e, 0x20, 0x28, 0x0 + createsprite gTechnoBlastWhiteSparkTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x8, 0x1e, 0x60, 0x28, 0x1 + createsprite gTechnoBlastWhiteSparkTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x8, 0x1e, 0xa0, 0x28, 0x0 + createsprite gTechnoBlastWhiteSparkTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x8, 0x1e, 0xe0, 0x28, 0x2 waitforvisualfinish playsewithpan SE_M_EMBER, SOUND_PAN_ATTACKER - launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x4 0x0 0x5 0x1 - launchtemplate gTechnoBlastWhiteSmokeTemplate 0x82, 0x4, 0x8 0x8 0x1 0x0 + createvisualtask AnimTask_ShakeMon2, 0x2, 0x1, 0x4, 0x0, 0x5, 0x1 + createsprite gTechnoBlastWhiteSmokeTemplate, ANIM_TARGET, 2, 0x8, 0x8, 0x1, 0x0 delay 0x2 - launchtemplate gTechnoBlastWhiteSmokeTemplate 0x82, 0x4, 0xfff8 0xfff8 0x1 0x0 + createsprite gTechnoBlastWhiteSmokeTemplate, ANIM_TARGET, 2, 0xfff8, 0xfff8, 0x1, 0x0 delay 0x2 - launchtemplate gTechnoBlastWhiteSmokeTemplate 0x82, 0x4, 0x8 0xfff8 0x1 0x0 + createsprite gTechnoBlastWhiteSmokeTemplate, ANIM_TARGET, 2, 0x8, 0xfff8, 0x1, 0x0 delay 0x2 - launchtemplate gTechnoBlastWhiteSmokeTemplate 0x82, 0x4, 0xfff8 0x8 0x1 0x0 + createsprite gTechnoBlastWhiteSmokeTemplate, ANIM_TARGET, 2, 0xfff8, 0x8, 0x1, 0x0 waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xC 0x0 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xC, 0x0, 0x0 waitforvisualfinish blendoff clearmonbg ANIM_ATTACKER end TechnoBlastWhiteCircles: - launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0xffd8 0x14 0x10 + createsprite gTechnoBlastWhiteCircleTemplate, ANIM_ATTACKER, 2, 0xffd8, 0x14, 0x10 delay 0x2 - launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0xffec 0x1e 0x10 + createsprite gTechnoBlastWhiteCircleTemplate, ANIM_ATTACKER, 2, 0xffec, 0x1e, 0x10 delay 0x2 - launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0x14 0xffe2 0x10 + createsprite gTechnoBlastWhiteCircleTemplate, ANIM_ATTACKER, 2, 0x14, 0xffe2, 0x10 delay 0x2 - launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0xffec 0xffe2 0x10 + createsprite gTechnoBlastWhiteCircleTemplate, ANIM_ATTACKER, 2, 0xffec, 0xffe2, 0x10 delay 0x2 - launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0x14 0x1e 0x10 + createsprite gTechnoBlastWhiteCircleTemplate, ANIM_ATTACKER, 2, 0x14, 0x1e, 0x10 delay 0x2 - launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0xffd8 0x0 0x10 + createsprite gTechnoBlastWhiteCircleTemplate, ANIM_ATTACKER, 2, 0xffd8, 0x0, 0x10 delay 0x2 - launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0x28 0x0 0x10 + createsprite gTechnoBlastWhiteCircleTemplate, ANIM_ATTACKER, 2, 0x28, 0x0, 0x10 delay 0x2 - launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0x28 0x28 0x10 + createsprite gTechnoBlastWhiteCircleTemplate, ANIM_ATTACKER, 2, 0x28, 0x28, 0x10 delay 0x2 - launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0xffd8 0xffd8 0x10 + createsprite gTechnoBlastWhiteCircleTemplate, ANIM_ATTACKER, 2, 0xffd8, 0xffd8, 0x10 delay 0x2 - launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0x0 0x28 0x10 + createsprite gTechnoBlastWhiteCircleTemplate, ANIM_ATTACKER, 2, 0x0, 0x28, 0x10 delay 0x2 - launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0x0 0xffd8 0x10 + createsprite gTechnoBlastWhiteCircleTemplate, ANIM_ATTACKER, 2, 0x0, 0xffd8, 0x10 delay 0x2 - launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0x28 0xffec 0x10 + createsprite gTechnoBlastWhiteCircleTemplate, ANIM_ATTACKER, 2, 0x28, 0xffec, 0x10 delay 0x2 - launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0x28 0x14 0x10 + createsprite gTechnoBlastWhiteCircleTemplate, ANIM_ATTACKER, 2, 0x28, 0x14, 0x10 delay 0x2 - launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0xffd8 0xffec 0x10 + createsprite gTechnoBlastWhiteCircleTemplate, ANIM_ATTACKER, 2, 0xffd8, 0xffec, 0x10 delay 0x2 return @@ -7058,11 +7058,11 @@ TechnoBlastElectric: loadspritegfx ANIM_TAG_SPARK_2 @blast particles loadspritegfx ANIM_TAG_GRAY_SMOKE @dispersal monbg ANIM_ATTACKER - setblends 0x80E - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xC 0x0 + setalpha 14, 8 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xC, 0x0 waitforvisualfinish loopsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER, 0xE, 0x8 - launchtemplate gGrowingChargeOrbSpriteTemplate 0x2 0x1 0x0 + createsprite gGrowingChargeOrbSpriteTemplate, ANIM_ATTACKER, 2, 0x0 call TechnoBlastCharging1 delay 0xF call TechnoBlastCharging2 @@ -7081,52 +7081,52 @@ TechnoBlastElectric: delay 0xF waitforvisualfinish playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER - launchtemplate gTechnoBlastYellowBlastTemplate 0x83 0x6 0xa 0x0 0x0 0x0 0x1e 0x0 - launchtemplate gTechnoBlastYellowSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x0 0x28 0x0 - launchtemplate gTechnoBlastYellowSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x40 0x28 0x1 - launchtemplate gTechnoBlastYellowSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x80 0x28 0x0 - launchtemplate gTechnoBlastYellowSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x0 0x28 0x2 - launchtemplate gTechnoBlastYellowSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x20 0x28 0x0 - launchtemplate gTechnoBlastYellowSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x60 0x28 0x1 - launchtemplate gTechnoBlastYellowSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0xa0 0x28 0x0 - launchtemplate gTechnoBlastYellowSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0xe0 0x28 0x2 + createsprite gTechnoBlastYellowBlastTemplate, ANIM_TARGET, 3, 0xa, 0x0, 0x0, 0x0, 0x1e, 0x0 + createsprite gTechnoBlastYellowSparkTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x10, 0x1e, 0x0, 0x28, 0x0 + createsprite gTechnoBlastYellowSparkTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x10, 0x1e, 0x40, 0x28, 0x1 + createsprite gTechnoBlastYellowSparkTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x10, 0x1e, 0x80, 0x28, 0x0 + createsprite gTechnoBlastYellowSparkTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x10, 0x1e, 0x0, 0x28, 0x2 + createsprite gTechnoBlastYellowSparkTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x8, 0x1e, 0x20, 0x28, 0x0 + createsprite gTechnoBlastYellowSparkTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x8, 0x1e, 0x60, 0x28, 0x1 + createsprite gTechnoBlastYellowSparkTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x8, 0x1e, 0xa0, 0x28, 0x0 + createsprite gTechnoBlastYellowSparkTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x8, 0x1e, 0xe0, 0x28, 0x2 waitforvisualfinish playsewithpan SE_M_EMBER, SOUND_PAN_ATTACKER - launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x4 0x0 0x5 0x1 - launchtemplate gTechnoBlastYellowSmokeTemplate 0x82, 0x4, 0x8 0x8 0x1 0x0 - launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0x5 0x0 0x5 0x0 - launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0xfffb 0xa 0x5 0x1 + createvisualtask AnimTask_ShakeMon2, 0x2, 0x1, 0x4, 0x0, 0x5, 0x1 + createsprite gTechnoBlastYellowSmokeTemplate, ANIM_TARGET, 2, 0x8, 0x8, 0x1, 0x0 + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 0x5, 0x0, 0x5, 0x0 + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 0xfffb, 0xa, 0x5, 0x1 delay 0x2 - launchtemplate gTechnoBlastYellowSmokeTemplate 0x82, 0x4, 0xfff8 0xfff8 0x1 0x0 - launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0xf 0x14 0x5 0x2 - launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0xfff1 0xfff6 0x5 0x0 + createsprite gTechnoBlastYellowSmokeTemplate, ANIM_TARGET, 2, 0xfff8, 0xfff8, 0x1, 0x0 + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 0xf, 0x14, 0x5, 0x2 + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 0xfff1, 0xfff6, 0x5, 0x0 delay 0x2 - launchtemplate gTechnoBlastYellowSmokeTemplate 0x82, 0x4, 0x8 0xfff8 0x1 0x0 - launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0x19 0x0 0x5 0x1 - launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0xfff8 0x8 0x5 0x2 + createsprite gTechnoBlastYellowSmokeTemplate, ANIM_TARGET, 2, 0x8, 0xfff8, 0x1, 0x0 + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 0x19, 0x0, 0x5, 0x1 + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 0xfff8, 0x8, 0x5, 0x2 delay 0x2 - launchtemplate gTechnoBlastYellowSmokeTemplate 0x82, 0x4, 0xfff8 0x8 0x1 0x0 - launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0x2 0xfff8 0x5 0x0 - launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0xffec 0xf 0x5 0x1 + createsprite gTechnoBlastYellowSmokeTemplate, ANIM_TARGET, 2, 0xfff8, 0x8, 0x1, 0x0 + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 0x2, 0xfff8, 0x5, 0x0 + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 0xffec, 0xf, 0x5, 0x1 waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xC 0x0 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xC, 0x0, 0x0 waitforvisualfinish blendoff clearmonbg ANIM_ATTACKER end TechnoBlastCharging1: playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0x20, 0x18, 0xbe, 0xc, 0x0, 0x1, 0x0 delay 0x0 - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0 - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0x50, 0x18, 0x16, 0xc, 0x0, 0x1, 0x0 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0x9c, 0x18, 0x79, 0xd, 0x0, 0x1, 0x1 return TechnoBlastCharging2: playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0 - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0x64, 0x18, 0x3c, 0xa, 0x0, 0x1, 0x0 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0xaa, 0x18, 0x2a, 0xb, 0x0, 0x1, 0x1 delay 0x0 - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0xee, 0x18, 0xa5, 0xa, 0x0, 0x1, 0x1 return TechnoBlastWater: @@ -7137,113 +7137,113 @@ TechnoBlastWater: loadspritegfx ANIM_TAG_GRAY_SMOKE @dispersal loadspritegfx ANIM_TAG_BUBBLE @bubbles monbg ANIM_ATTACKER - setblends 0x80E - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xC 0x1 + setalpha 14, 8 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xC, 0x1 waitforvisualfinish - launchtemplate gTechnoBlastBlueChargeTemplate 0x2 0x1 0x0 + createsprite gTechnoBlastBlueChargeTemplate, ANIM_ATTACKER, 2, 0x0 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER - launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0xa 0xa 0x19 0x0 + createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0xa, 0xa, 0x19, 0x0 delay 0x4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER - launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0xfff1 0x0 0x19 0x0 + createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0xfff1, 0x0, 0x19, 0x0 delay 0x4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER - launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0x14 0xa 0x19 0x0 + createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0x14, 0xa, 0x19, 0x0 delay 0x4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER - launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0x0 0xfff6 0x19 0x0 + createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff6, 0x19, 0x0 delay 0x4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER - launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0xfff6 0xf 0x19 0x0 + createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0xfff6, 0xf, 0x19, 0x0 delay 0x4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER - launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0x19 0x14 0x19 0x0 + createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0x19, 0x14, 0x19, 0x0 delay 0x4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER - launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0xffec 0x14 0x19 0x0 + createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0xffec, 0x14, 0x19, 0x0 delay 0x4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER - launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0xc 0x0 0x19 0x0 + createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0xc, 0x0, 0x19, 0x0 delay 0x4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER - launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0xa 0xa 0x19 0x0 + createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0xa, 0xa, 0x19, 0x0 delay 0x4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER - launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0xfff1 0x0 0x19 0x0 + createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0xfff1, 0x0, 0x19, 0x0 delay 0x4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER - launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0x14 0xa 0x19 0x0 + createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0x14, 0xa, 0x19, 0x0 delay 0x4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER - launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0x0 0xfff6 0x19 0x0 + createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff6, 0x19, 0x0 delay 0x4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER - launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0xfff6 0xf 0x19 0x0 + createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0xfff6, 0xf, 0x19, 0x0 delay 0x4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER - launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0x19 0x14 0x19 0x0 + createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0x19, 0x14, 0x19, 0x0 delay 0x4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER - launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0xffec 0x14 0x19 0x0 + createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0xffec, 0x14, 0x19, 0x0 delay 0x4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER - launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0xc 0x0 0x19 0x0 + createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0xc, 0x0, 0x19, 0x0 delay 0x4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER - launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0xa 0xa 0x19 0x0 + createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0xa, 0xa, 0x19, 0x0 delay 0x4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER - launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0xfff1 0x0 0x19 0x0 + createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0xfff1, 0x0, 0x19, 0x0 delay 0x4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER - launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0x14 0xa 0x19 0x0 + createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0x14, 0xa, 0x19, 0x0 delay 0x4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER - launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0x0 0xfff6 0x19 0x0 + createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff6, 0x19, 0x0 delay 0x4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER - launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0xfff6 0xf 0x19 0x0 + createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0xfff6, 0xf, 0x19, 0x0 delay 0x4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER - launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0x19 0x14 0x19 0x0 + createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0x19, 0x14, 0x19, 0x0 delay 0x4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER - launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0xffec 0x14 0x19 0x0 + createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0xffec, 0x14, 0x19, 0x0 delay 0x4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER - launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0xc 0x0 0x19 0x0 + createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0xc, 0x0, 0x19, 0x0 waitforvisualfinish playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER - launchtemplate gTechnoBlastBlueBlastTemplate 0x83 0x6 0xa 0x0 0x0 0x0 0x1e 0x0 - launchtemplate gTechnoBlastBlueSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x0 0x28 0x0 - launchtemplate gTechnoBlastBlueSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x40 0x28 0x1 - launchtemplate gTechnoBlastBlueSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x80 0x28 0x0 - launchtemplate gTechnoBlastBlueSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x0 0x28 0x2 - launchtemplate gTechnoBlastBlueSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x20 0x28 0x0 - launchtemplate gTechnoBlastBlueSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x60 0x28 0x1 - launchtemplate gTechnoBlastBlueSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0xa0 0x28 0x0 - launchtemplate gTechnoBlastBlueSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0xe0 0x28 0x2 + createsprite gTechnoBlastBlueBlastTemplate, ANIM_TARGET, 3, 0xa, 0x0, 0x0, 0x0, 0x1e, 0x0 + createsprite gTechnoBlastBlueSparkTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x10, 0x1e, 0x0, 0x28, 0x0 + createsprite gTechnoBlastBlueSparkTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x10, 0x1e, 0x40, 0x28, 0x1 + createsprite gTechnoBlastBlueSparkTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x10, 0x1e, 0x80, 0x28, 0x0 + createsprite gTechnoBlastBlueSparkTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x10, 0x1e, 0x0, 0x28, 0x2 + createsprite gTechnoBlastBlueSparkTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x8, 0x1e, 0x20, 0x28, 0x0 + createsprite gTechnoBlastBlueSparkTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x8, 0x1e, 0x60, 0x28, 0x1 + createsprite gTechnoBlastBlueSparkTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x8, 0x1e, 0xa0, 0x28, 0x0 + createsprite gTechnoBlastBlueSparkTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x8, 0x1e, 0xe0, 0x28, 0x2 waitforvisualfinish playsewithpan SE_M_EMBER, SOUND_PAN_ATTACKER - launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x4 0x0 0x5 0x1 - launchtemplate gTechnoBlastBlueSmokeTemplate 0x82, 0x4, 0x8 0x8 0x1 0x0 - launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0xa 0xa 0x19 0x1 - launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0xfff1 0x0 0x19 0x1 + createvisualtask AnimTask_ShakeMon2, 0x2, 0x1, 0x4, 0x0, 0x5, 0x1 + createsprite gTechnoBlastBlueSmokeTemplate, ANIM_TARGET, 2, 0x8, 0x8, 0x1, 0x0 + createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0xa, 0xa, 0x19, 0x1 + createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0xfff1, 0x0, 0x19, 0x1 delay 0x2 - launchtemplate gTechnoBlastBlueSmokeTemplate 0x82, 0x4, 0xfff8 0xfff8 0x1 0x0 - launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0x14 0xa 0x19 0x1 - launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0x0 0xfff6 0x19 0x1 + createsprite gTechnoBlastBlueSmokeTemplate, ANIM_TARGET, 2, 0xfff8, 0xfff8, 0x1, 0x0 + createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0x14, 0xa, 0x19, 0x1 + createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff6, 0x19, 0x1 delay 0x2 - launchtemplate gTechnoBlastBlueSmokeTemplate 0x82, 0x4, 0x8 0xfff8 0x1 0x0 - launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0xfff6 0xf 0x19 0x1 - launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0x19 0x14 0x19 0x1 + createsprite gTechnoBlastBlueSmokeTemplate, ANIM_TARGET, 2, 0x8, 0xfff8, 0x1, 0x0 + createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0xfff6, 0xf, 0x19, 0x1 + createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0x19, 0x14, 0x19, 0x1 delay 0x2 - launchtemplate gTechnoBlastBlueSmokeTemplate 0x82, 0x4, 0xfff8 0x8 0x1 0x0 - launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0xffec 0x14 0x19 0x1 - launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0xc 0x0 0x19 0x1 + createsprite gTechnoBlastBlueSmokeTemplate, ANIM_TARGET, 2, 0xfff8, 0x8, 0x1, 0x0 + createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0xffec, 0x14, 0x19, 0x1 + createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0xc, 0x0, 0x19, 0x1 waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xC 0x0 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xC, 0x0, 0x0 waitforvisualfinish blendoff clearmonbg ANIM_ATTACKER @@ -7258,29 +7258,29 @@ TechnoBlastFire: loadspritegfx ANIM_TAG_SPARK_2 @blast particles loadspritegfx ANIM_TAG_GRAY_SMOKE @dispersal monbg ANIM_ATTACKER - setblends 0x80E - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xC 0x0 + setalpha 14, 8 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xC, 0x0 waitforvisualfinish - launchtemplate gTechnoBlastRedChargeTemplate 0x2 0x1 0x0 + createsprite gTechnoBlastRedChargeTemplate, ANIM_ATTACKER, 2, 0x0 delay 0x5 call TechnoBlastFireSpiral call TechnoBlastFireSpiral call TechnoBlastFireSpiral waitforvisualfinish playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER - launchtemplate gTechnoBlastRedBlastTemplate 0x83 0x6 0xa 0x0 0x0 0x0 0x1e 0x0 - launchtemplate gTechnoBlastRedSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x0 0x28 0x0 - launchtemplate gTechnoBlastRedSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x40 0x28 0x1 - launchtemplate gTechnoBlastRedSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x80 0x28 0x0 - launchtemplate gTechnoBlastRedSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x0 0x28 0x2 - launchtemplate gTechnoBlastRedSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x20 0x28 0x0 - launchtemplate gTechnoBlastRedSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x60 0x28 0x1 - launchtemplate gTechnoBlastRedSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0xa0 0x28 0x0 - launchtemplate gTechnoBlastRedSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0xe0 0x28 0x2 + createsprite gTechnoBlastRedBlastTemplate, ANIM_TARGET, 3, 0xa, 0x0, 0x0, 0x0, 0x1e, 0x0 + createsprite gTechnoBlastRedSparkTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x10, 0x1e, 0x0, 0x28, 0x0 + createsprite gTechnoBlastRedSparkTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x10, 0x1e, 0x40, 0x28, 0x1 + createsprite gTechnoBlastRedSparkTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x10, 0x1e, 0x80, 0x28, 0x0 + createsprite gTechnoBlastRedSparkTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x10, 0x1e, 0x0, 0x28, 0x2 + createsprite gTechnoBlastRedSparkTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x8, 0x1e, 0x20, 0x28, 0x0 + createsprite gTechnoBlastRedSparkTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x8, 0x1e, 0x60, 0x28, 0x1 + createsprite gTechnoBlastRedSparkTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x8, 0x1e, 0xa0, 0x28, 0x0 + createsprite gTechnoBlastRedSparkTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x8, 0x1e, 0xe0, 0x28, 0x2 waitforvisualfinish playsewithpan SE_M_EMBER, SOUND_PAN_ATTACKER - launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x4 0x0 0x5 0x1 - launchtemplate gTechnoBlastRedSmokeTemplate 0x82, 0x4, 0x8 0x8 0x1 0x0 + createvisualtask AnimTask_ShakeMon2, 0x2, 0x1, 0x4, 0x0, 0x5, 0x1 + createsprite gTechnoBlastRedSmokeTemplate, ANIM_TARGET, 2, 0x8, 0x8, 0x1, 0x0 createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 10, 192, 176, 40 createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 10, -192, 240, 40 createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 10, 192, -160, 40 @@ -7289,37 +7289,37 @@ TechnoBlastFire: createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 10, -224, -32, 40 createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 10, 112, -128, 40 delay 0x2 - launchtemplate gTechnoBlastRedSmokeTemplate 0x82, 0x4, 0xfff8 0xfff8 0x1 0x0 + createsprite gTechnoBlastRedSmokeTemplate, ANIM_TARGET, 2, 0xfff8, 0xfff8, 0x1, 0x0 delay 0x2 - launchtemplate gTechnoBlastRedSmokeTemplate 0x82, 0x4, 0x8 0xfff8 0x1 0x0 + createsprite gTechnoBlastRedSmokeTemplate, ANIM_TARGET, 2, 0x8, 0xfff8, 0x1, 0x0 delay 0x2 - launchtemplate gTechnoBlastRedSmokeTemplate 0x82, 0x4, 0xfff8 0x8 0x1 0x0 + createsprite gTechnoBlastRedSmokeTemplate, ANIM_TARGET, 2, 0xfff8, 0x8, 0x1, 0x0 waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xC 0x0 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xC, 0x0, 0x0 waitforvisualfinish blendoff clearmonbg ANIM_ATTACKER end TechnoBlastFireSpiral: - launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x0 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x0 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x2 - launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x4 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x4 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x2 - launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x8 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x8 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x2 - launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0xc + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0xc playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x2 - launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x10 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x10 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x2 - launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x14 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x14 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x2 - launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x18 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x18 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x2 return @@ -7332,77 +7332,77 @@ TechnoBlastIce: loadspritegfx ANIM_TAG_SPARK_2 @blast particles loadspritegfx ANIM_TAG_GRAY_SMOKE @dispersal monbg ANIM_ATTACKER - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xC 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xC, 0x0 waitforvisualfinish - launchtemplate gTechnoBlastIceChargeTemplate 0x2 0x1 0x0 + createsprite gTechnoBlastIceChargeTemplate, ANIM_ATTACKER, 2, 0x0 delay 0x5 call TechnoBlastIceChargeParticles call TechnoBlastIceChargeParticles call TechnoBlastIceChargeParticles - launchtemplate gTechnoBlastIceCrystalsTemplate 0x2 0x4 0xfff6 0xfff6 0x0 0x2 + createsprite gTechnoBlastIceCrystalsTemplate, ANIM_ATTACKER, 2, 0xfff6, 0xfff6, 0x0, 0x2 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET delay 0x4 - launchtemplate gTechnoBlastIceCrystalsTemplate 0x2 0x4 0xa 0x14 0x0 0x2 + createsprite gTechnoBlastIceCrystalsTemplate, ANIM_ATTACKER, 2, 0xa, 0x14, 0x0, 0x2 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET delay 0x4 - launchtemplate gTechnoBlastIceCrystalsTemplate 0x2 0x4 0xfffb 0xa 0x0 0x2 + createsprite gTechnoBlastIceCrystalsTemplate, ANIM_ATTACKER, 2, 0xfffb, 0xa, 0x0, 0x2 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET delay 0x4 - launchtemplate gTechnoBlastIceCrystalsTemplate 0x2 0x4 0x11 0xfff4 0x0 0x2 + createsprite gTechnoBlastIceCrystalsTemplate, ANIM_ATTACKER, 2, 0x11, 0xfff4, 0x0, 0x2 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET waitforvisualfinish playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER - launchtemplate gTechnoBlastIceBlastTemplate 0x83 0x6 0xa 0x0 0x0 0x0 0x1e 0x0 - launchtemplate gTechnoBlastIceSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x0 0x28 0x0 - launchtemplate gTechnoBlastIceSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x40 0x28 0x1 - launchtemplate gTechnoBlastIceSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x80 0x28 0x0 - launchtemplate gTechnoBlastIceSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x0 0x28 0x2 - launchtemplate gTechnoBlastIceSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x20 0x28 0x0 - launchtemplate gTechnoBlastIceSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x60 0x28 0x1 - launchtemplate gTechnoBlastIceSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0xa0 0x28 0x0 - launchtemplate gTechnoBlastIceSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0xe0 0x28 0x2 + createsprite gTechnoBlastIceBlastTemplate, ANIM_TARGET, 3, 0xa, 0x0, 0x0, 0x0, 0x1e, 0x0 + createsprite gTechnoBlastIceSparkTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x10, 0x1e, 0x0, 0x28, 0x0 + createsprite gTechnoBlastIceSparkTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x10, 0x1e, 0x40, 0x28, 0x1 + createsprite gTechnoBlastIceSparkTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x10, 0x1e, 0x80, 0x28, 0x0 + createsprite gTechnoBlastIceSparkTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x10, 0x1e, 0x0, 0x28, 0x2 + createsprite gTechnoBlastIceSparkTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x8, 0x1e, 0x20, 0x28, 0x0 + createsprite gTechnoBlastIceSparkTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x8, 0x1e, 0x60, 0x28, 0x1 + createsprite gTechnoBlastIceSparkTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x8, 0x1e, 0xa0, 0x28, 0x0 + createsprite gTechnoBlastIceSparkTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x8, 0x1e, 0xe0, 0x28, 0x2 waitforvisualfinish playsewithpan SE_M_EMBER, SOUND_PAN_ATTACKER - launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x4 0x0 0x5 0x1 - launchtemplate gTechnoBlastIceSmokeTemplate 0x82, 0x4, 0x8 0x8 0x1 0x0 - launchtemplate gIceCrystalHitLargeSpriteTemplate 0x82, 0x3, 0xfff6 0xfff6 0x0 + createvisualtask AnimTask_ShakeMon2, 0x2, 0x1, 0x4, 0x0, 0x5, 0x1 + createsprite gTechnoBlastIceSmokeTemplate, ANIM_TARGET, 2, 0x8, 0x8, 0x1, 0x0 + createsprite gIceCrystalHitLargeSpriteTemplate, ANIM_TARGET, 2, 0xfff6, 0xfff6, 0x0 delay 0x2 - launchtemplate gTechnoBlastIceSmokeTemplate 0x82, 0x4, 0xfff8 0xfff8 0x1 0x0 - launchtemplate gIceCrystalHitSmallSpriteTemplate 0x82, 0x3, 0xa 0x14 0x0 - launchtemplate gIceCrystalHitLargeSpriteTemplate 0x82, 0x3, 0xfffb 0xa 0x0 + createsprite gTechnoBlastIceSmokeTemplate, ANIM_TARGET, 2, 0xfff8, 0xfff8, 0x1, 0x0 + createsprite gIceCrystalHitSmallSpriteTemplate, ANIM_TARGET, 2, 0xa, 0x14, 0x0 + createsprite gIceCrystalHitLargeSpriteTemplate, ANIM_TARGET, 2, 0xfffb, 0xa, 0x0 delay 0x2 - launchtemplate gTechnoBlastIceSmokeTemplate 0x82, 0x4, 0x8 0xfff8 0x1 0x0 - launchtemplate gIceCrystalHitSmallSpriteTemplate 0x82, 0x3, 0x11 0xfff4 0x0 - launchtemplate gIceCrystalHitSmallSpriteTemplate 0x82, 0x3, 0xfff1 0xf 0x0 + createsprite gTechnoBlastIceSmokeTemplate, ANIM_TARGET, 2, 0x8, 0xfff8, 0x1, 0x0 + createsprite gIceCrystalHitSmallSpriteTemplate, ANIM_TARGET, 2, 0x11, 0xfff4, 0x0 + createsprite gIceCrystalHitSmallSpriteTemplate, ANIM_TARGET, 2, 0xfff1, 0xf, 0x0 delay 0x2 - launchtemplate gTechnoBlastIceSmokeTemplate 0x82, 0x4, 0xfff8 0x8 0x1 0x0 - launchtemplate gIceCrystalHitSmallSpriteTemplate 0x82, 0x3, 0x0 0x0 0x0 - launchtemplate gIceCrystalHitLargeSpriteTemplate 0x82, 0x3, 0x14 0x2 0x0 + createsprite gTechnoBlastIceSmokeTemplate, ANIM_TARGET, 2, 0xfff8, 0x8, 0x1, 0x0 + createsprite gIceCrystalHitSmallSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x0 + createsprite gIceCrystalHitLargeSpriteTemplate, ANIM_TARGET, 2, 0x14, 0x2, 0x0 waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xC 0x0 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xC, 0x0, 0x0 waitforvisualfinish clearmonbg ANIM_ATTACKER end TechnoBlastIceChargeParticles: - launchtemplate gTechnoBlastIceCrystalsTemplate 0x2 0x4 0xfff6 0xfff6 0x0 0x2 + createsprite gTechnoBlastIceCrystalsTemplate, ANIM_ATTACKER, 2, 0xfff6, 0xfff6, 0x0, 0x2 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET delay 0x4 - launchtemplate gTechnoBlastIceCrystalsTemplate 0x2 0x4 0xa 0x14 0x0 0x2 + createsprite gTechnoBlastIceCrystalsTemplate, ANIM_ATTACKER, 2, 0xa, 0x14, 0x0, 0x2 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET delay 0x4 - launchtemplate gTechnoBlastIceCrystalsTemplate 0x2 0x4 0xfffb 0xa 0x0 0x2 + createsprite gTechnoBlastIceCrystalsTemplate, ANIM_ATTACKER, 2, 0xfffb, 0xa, 0x0, 0x2 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET delay 0x4 - launchtemplate gTechnoBlastIceCrystalsTemplate 0x2 0x4 0x11 0xfff4 0x0 0x2 + createsprite gTechnoBlastIceCrystalsTemplate, ANIM_ATTACKER, 2, 0x11, 0xfff4, 0x0, 0x2 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET delay 0x4 - launchtemplate gTechnoBlastIceCrystalsTemplate 0x2 0x4 0xfff1 0xf 0x0 0x2 + createsprite gTechnoBlastIceCrystalsTemplate, ANIM_ATTACKER, 2, 0xfff1, 0xf, 0x0, 0x2 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET delay 0x4 - launchtemplate gTechnoBlastIceCrystalsTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + createsprite gTechnoBlastIceCrystalsTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET delay 0x4 - launchtemplate gTechnoBlastIceCrystalsTemplate 0x2 0x4 0x14 0x2 0x0 0x2 + createsprite gTechnoBlastIceCrystalsTemplate, ANIM_ATTACKER, 2, 0x14, 0x2, 0x0, 0x2 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET delay 0x4 return @@ -7413,78 +7413,78 @@ Move_RELIC_SONG: loadspritegfx ANIM_TAG_MUSIC_NOTES loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER - launchtask AnimTask_MusicNotesRainbowBlend 0x2 0x0 + createvisualtask AnimTask_MusicNotesRainbowBlend, 0x2 waitforvisualfinish createvisualtask SoundTask_PlayCryWithEcho, 2, ANIM_ATTACKER, 2 - launchtask AnimTask_UproarDistortion 0x2 0x1 0x0 - launchtemplate gUproarRingSpriteTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1f 0x8 - launchtemplate gJaggedMusicNoteSpriteTemplate 0x2 0x4 0x0 0x1d 0xfff4 0x0 - launchtemplate gJaggedMusicNoteSpriteTemplate 0x2 0x4 0x0 0xfff4 0xffe3 0x1 - launchtemplate gWavyMusicNotesSpriteTemplate 0x82, 0x3, 0x7 0x0 0xc + createvisualtask AnimTask_UproarDistortion, 0x2, 0x0 + createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x8 + createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1d, 0xfff4, 0x0 + createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff4, 0xffe3, 0x1 + createsprite gWavyMusicNotesSpriteTemplate, ANIM_TARGET, 2, 0x7, 0x0, 0xc delay 0x5 - launchtemplate gWavyMusicNotesSpriteTemplate 0x82, 0x3, 0x6 0x1 0xc + createsprite gWavyMusicNotesSpriteTemplate, ANIM_TARGET, 2, 0x6, 0x1, 0xc delay 0x5 - launchtask AnimTask_UproarDistortion 0x2 0x1 0x0 - launchtemplate gUproarRingSpriteTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1f 0x8 - launchtemplate gJaggedMusicNoteSpriteTemplate 0x2 0x4 0x0 0xc 0xffe3 0x1 - launchtemplate gJaggedMusicNoteSpriteTemplate 0x2 0x4 0x0 0xffe3 0xfff4 0x0 - launchtemplate gWavyMusicNotesSpriteTemplate 0x82, 0x3, 0x1 0x2 0xc + createvisualtask AnimTask_UproarDistortion, 0x2, 0x0 + createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x8 + createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xc, 0xffe3, 0x1 + createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe3, 0xfff4, 0x0 + createsprite gWavyMusicNotesSpriteTemplate, ANIM_TARGET, 2, 0x1, 0x2, 0xc delay 0x5 - launchtemplate gWavyMusicNotesSpriteTemplate 0x82, 0x3, 0x2 0x3 0xc + createsprite gWavyMusicNotesSpriteTemplate, ANIM_TARGET, 2, 0x2, 0x3, 0xc delay 0x5 - launchtask AnimTask_UproarDistortion 0x2 0x1 0x0 - launchtemplate gUproarRingSpriteTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1f 0x8 - launchtemplate gJaggedMusicNoteSpriteTemplate 0x2 0x4 0x0 0x18 0xffe8 0x1 - launchtemplate gJaggedMusicNoteSpriteTemplate 0x2 0x4 0x0 0xffe8 0xffe8 0x0 - launchtemplate gWavyMusicNotesSpriteTemplate 0x82, 0x3, 0x3 0x0 0xc + createvisualtask AnimTask_UproarDistortion, 0x2, 0x0 + createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x8 + createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x18, 0xffe8, 0x1 + createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0xffe8, 0x0 + createsprite gWavyMusicNotesSpriteTemplate, ANIM_TARGET, 2, 0x3, 0x0, 0xc delay 0x5 - launchtemplate gWavyMusicNotesSpriteTemplate 0x82, 0x3, 0x2 0x1 0xc + createsprite gWavyMusicNotesSpriteTemplate, ANIM_TARGET, 2, 0x2, 0x1, 0xc delay 0x5 - launchtask AnimTask_UproarDistortion 0x2 0x1 0x0 - launchtemplate gUproarRingSpriteTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1f 0x8 - launchtemplate gJaggedMusicNoteSpriteTemplate 0x2 0x4 0x0 0x1d 0xfff4 0x0 - launchtemplate gJaggedMusicNoteSpriteTemplate 0x2 0x4 0x0 0xfff4 0xffe3 0x1 - launchtemplate gWavyMusicNotesSpriteTemplate 0x82, 0x3, 0x5 0x2 0xc + createvisualtask AnimTask_UproarDistortion, 0x2, 0x0 + createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x8 + createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1d, 0xfff4, 0x0 + createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff4, 0xffe3, 0x1 + createsprite gWavyMusicNotesSpriteTemplate, ANIM_TARGET, 2, 0x5, 0x2, 0xc delay 0x5 - launchtemplate gWavyMusicNotesSpriteTemplate 0x82, 0x3, 0x6 0x3 0xc + createsprite gWavyMusicNotesSpriteTemplate, ANIM_TARGET, 2, 0x6, 0x3, 0xc delay 0x5 - launchtask AnimTask_UproarDistortion 0x2 0x1 0x0 - launchtemplate gUproarRingSpriteTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1f 0x8 - launchtemplate gJaggedMusicNoteSpriteTemplate 0x2 0x4 0x0 0xc 0xffe3 0x1 - launchtemplate gJaggedMusicNoteSpriteTemplate 0x2 0x4 0x0 0xffe3 0xfff4 0x0 - launchtemplate gWavyMusicNotesSpriteTemplate 0x82, 0x3, 0x2 0x0 0xc + createvisualtask AnimTask_UproarDistortion, 0x2, 0x0 + createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x8 + createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xc, 0xffe3, 0x1 + createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe3, 0xfff4, 0x0 + createsprite gWavyMusicNotesSpriteTemplate, ANIM_TARGET, 2, 0x2, 0x0, 0xc delay 0x5 - launchtemplate gWavyMusicNotesSpriteTemplate 0x82, 0x3, 0x2 0x1 0xc + createsprite gWavyMusicNotesSpriteTemplate, ANIM_TARGET, 2, 0x2, 0x1, 0xc delay 0x5 - launchtask AnimTask_UproarDistortion 0x2 0x1 0x0 - launchtemplate gUproarRingSpriteTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1f 0x8 - launchtemplate gJaggedMusicNoteSpriteTemplate 0x2 0x4 0x0 0x18 0xffe8 0x1 - launchtemplate gJaggedMusicNoteSpriteTemplate 0x2 0x4 0x0 0xffe8 0xffe8 0x0 - launchtemplate gWavyMusicNotesSpriteTemplate 0x82, 0x3, 0x1 0x2 0xc + createvisualtask AnimTask_UproarDistortion, 0x2, 0x0 + createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x8 + createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x18, 0xffe8, 0x1 + createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0xffe8, 0x0 + createsprite gWavyMusicNotesSpriteTemplate, ANIM_TARGET, 2, 0x1, 0x2, 0xc delay 0x5 - launchtemplate gWavyMusicNotesSpriteTemplate 0x82, 0x3, 0x5 0x3 0xc + createsprite gWavyMusicNotesSpriteTemplate, ANIM_TARGET, 2, 0x5, 0x3, 0xc delay 0x5 - launchtask AnimTask_UproarDistortion 0x2 0x1 0x0 - launchtemplate gUproarRingSpriteTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1f 0x8 - launchtemplate gJaggedMusicNoteSpriteTemplate 0x2 0x4 0x0 0x1d 0xfff4 0x0 - launchtemplate gJaggedMusicNoteSpriteTemplate 0x2 0x4 0x0 0xfff4 0xffe3 0x1 + createvisualtask AnimTask_UproarDistortion, 0x2, 0x0 + createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x8 + createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1d, 0xfff4, 0x0 + createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff4, 0xffe3, 0x1 waitforvisualfinish - launchtemplate gBasicHitSplatSpriteTemplate 0x83 0x4 0xffe0 0xfff0 0x1 0x3 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0xffe0, 0xfff0, 0x1, 0x3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET - launchtask AnimTask_ShakeMonInPlace 0x2 0x5 0x1 0x3 0x0 0xc 0x1 - launchtask AnimTask_ShakeMonInPlace 0x2 0x5 0x3 0x3 0x0 0xc 0x1 + createvisualtask AnimTask_ShakeMonInPlace, 0x2, 0x1, 0x3, 0x0, 0xc, 0x1 + createvisualtask AnimTask_ShakeMonInPlace, 0x2, 0x3, 0x3, 0x0, 0xc, 0x1 delay 0x5 - launchtemplate gRandomPosHitSplatSpriteTemplate 0x83 0x2 0x1 0x3 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x1, 0x3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 0x5 - launchtemplate gRandomPosHitSplatSpriteTemplate 0x83 0x2 0x1 0x3 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x1, 0x3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 0x5 - launchtemplate gBasicHitSplatSpriteTemplate 0x83 0x4 0x20 0x14 0x1 0x3 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x20, 0x14, 0x1, 0x3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET waitforvisualfinish clearmonbg ANIM_DEF_PARTNER - launchtask AnimTask_MusicNotesClearRainbowBlend 0x2 0x0 + createvisualtask AnimTask_MusicNotesClearRainbowBlend, 0x2 waitforvisualfinish end @@ -7496,21 +7496,21 @@ Move_SECRET_SWORD: monbg ANIM_ATTACKER setalpha 12, 8 playsewithpan SE_M_SWORDS_DANCE, SOUND_PAN_ATTACKER - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x0 0x0 0x10 0x0 - launchtemplate gSwordsDanceBladeSpriteTemplate 0x2 0x2 0x0 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x0, 0x0, 0x10, 0x0 + createsprite gSwordsDanceBladeSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0 delay 0x16 - launchtask AnimTask_FlashAnimTagWithColor 0x2 0x7 0x2715 0x2 0x2 0x7ff2 0x10 0x0 0x0 + createvisualtask AnimTask_FlashAnimTagWithColor, 0x2, 0x2715, 0x2, 0x2, 0x7ff2, 0x10, 0x0, 0x0 waitforvisualfinish clearmonbg ANIM_ATTACKER delay 0x1 monbg ANIM_TARGET playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET - launchtemplate gSecretSwordBladesTemplate 0x81 0x5 0x0 0xa 0x0 0xFF00 0xA - launchtemplate gCuttingSliceSpriteTemplate 0x2 0x3 0x28 0xffe0 0x0 + createsprite gSecretSwordBladesTemplate, ANIM_TARGET, 1, 0x0, 0xa, 0x0, 0xFF00, 0xA + createsprite gCuttingSliceSpriteTemplate, ANIM_ATTACKER, 2, 0x28, 0xffe0, 0x0 delay 0x5 - launchtask AnimTask_ShakeMon 0x2 0x5 0x1 0x0 0x3 0xa 0x1 + createvisualtask AnimTask_ShakeMon, 0x2, 0x1, 0x0, 0x3, 0xa, 0x1 waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x0 0x10 0x0 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x0, 0x10, 0x0, 0x0 waitforvisualfinish clearmonbg ANIM_TARGET blendoff @@ -7526,22 +7526,22 @@ Move_GLACIATE: fadetobg BG_ICE waitbgfadeout playsewithpan SE_M_SAND_ATTACK, SOUND_PAN_TARGET - launchtemplate gGlaciateSmokeTemplate 0x84 0x5 0x0 0xfff4 0x68 0x0 0x4b - launchtemplate gGlaciateSmokeTemplate 0x84 0x5 0x0 0xfff4 0x48 0x1 0x4b - launchtemplate gGlaciateSmokeTemplate 0x84 0x5 0x0 0xfffa 0x38 0x1 0x4b - launchtemplate gGlaciateSmokeTemplate 0x84 0x5 0x0 0xfffa 0x58 0x0 0x4b - launchtemplate gGlaciateSmokeTemplate 0x84 0x5 0x0 0x0 0x38 0x0 0x4b - launchtemplate gGlaciateSmokeTemplate 0x84 0x5 0x0 0x0 0x58 0x1 0x4b - launchtemplate gGlaciateSmokeTemplate 0x84 0x5 0x0 0x6 0x48 0x0 0x4b - launchtemplate gGlaciateSmokeTemplate 0x84 0x5 0x0 0x6 0x68 0x1 0x4b - launchtemplate gGlaciateSmokeTemplate 0x84 0x5 0x0 0xc 0x48 0x0 0x4b - launchtemplate gGlaciateSmokeTemplate 0x84 0x5 0x0 0xc 0x38 0x1 0x4b - launchtemplate gGlaciateSmokeTemplate 0x84 0x5 0x0 0x12 0x50 0x0 0x4b - launchtemplate gGlaciateSmokeTemplate 0x84 0x5 0x0 0x12 0x48 0x1 0x4b - waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, (ANIM_PAL_DEF | ANIM_PAL_DEF_PARTNER), 0x2, 0x0, 0xA, 0x7FFF + createsprite gGlaciateSmokeTemplate, ANIM_TARGET, 4, 0x0, 0xfff4, 0x68, 0x0, 0x4b + createsprite gGlaciateSmokeTemplate, ANIM_TARGET, 4, 0x0, 0xfff4, 0x48, 0x1, 0x4b + createsprite gGlaciateSmokeTemplate, ANIM_TARGET, 4, 0x0, 0xfffa, 0x38, 0x1, 0x4b + createsprite gGlaciateSmokeTemplate, ANIM_TARGET, 4, 0x0, 0xfffa, 0x58, 0x0, 0x4b + createsprite gGlaciateSmokeTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x38, 0x0, 0x4b + createsprite gGlaciateSmokeTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x58, 0x1, 0x4b + createsprite gGlaciateSmokeTemplate, ANIM_TARGET, 4, 0x0, 0x6, 0x48, 0x0, 0x4b + createsprite gGlaciateSmokeTemplate, ANIM_TARGET, 4, 0x0, 0x6, 0x68, 0x1, 0x4b + createsprite gGlaciateSmokeTemplate, ANIM_TARGET, 4, 0x0, 0xc, 0x48, 0x0, 0x4b + createsprite gGlaciateSmokeTemplate, ANIM_TARGET, 4, 0x0, 0xc, 0x38, 0x1, 0x4b + createsprite gGlaciateSmokeTemplate, ANIM_TARGET, 4, 0x0, 0x12, 0x50, 0x0, 0x4b + createsprite gGlaciateSmokeTemplate, ANIM_TARGET, 4, 0x0, 0x12, 0x48, 0x1, 0x4b + waitforvisualfinish + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_DEF_SIDE, 0x2, 0x0, 0xA, 0x7FFF call IceCrystalEffectLong - createvisualtask AnimTask_BlendBattleAnimPal, 10, (ANIM_PAL_DEF | ANIM_PAL_DEF_PARTNER), 0x2, 0xA, 0x0, 0x7FFF + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_DEF_SIDE, 0x2, 0xA, 0x0, 0x7FFF waitforvisualfinish blendoff clearmonbg ANIM_DEF_PARTNER @@ -7555,38 +7555,38 @@ Move_BOLT_STRIKE:: loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @Electric Circle monbg ANIM_ATTACKER setalpha 12, 8 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x10 0x0 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x2 0x0 0x9 0x07FE - launchtask AnimTask_ElectricChargingParticles 0x2 0x4 0x0 0x40 0x0 0x2 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x10, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x2, 0x0, 0x9, 0x07FE + createvisualtask AnimTask_ElectricChargingParticles, 0x2, 0x0, 0x40, 0x0, 0x2 playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER delay 0xc - launchtemplate gGrowingShockWaveOrbSpriteTemplate 0x2 0x0 + createsprite gGrowingShockWaveOrbSpriteTemplate, ANIM_ATTACKER, 2 waitforvisualfinish clearmonbg ANIM_ATTACKER playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER waitplaysewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER, 0x8 - launchtask AnimTask_TranslateMonEllipticalRespectSide 0x2 0x5 0x0 0x12 0x6 0x2 0x4 + createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 0x2, 0x0, 0x12, 0x6, 0x2, 0x4 delay 0xA fadetobg BG_BOLT_STRIKE waitbgfadeout waitforvisualfinish monbg ANIM_TARGET - launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x1a 0x0 0x0 0x5 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x1a, 0x0, 0x0, 0x5 delay 0x6 - launchtemplate gBasicHitSplatSpriteTemplate 0x4 0x4 0xfff6 0x0 0x1 0x0 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x0 0x9 0x07FE - launchtask AnimTask_ShakeMon2 0x2 0x5 ANIM_TARGET 0x2 0x0 0x20 0x1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 4, 0xfff6, 0x0, 0x1, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x2, 0x0, 0x9, 0x07FE + createvisualtask AnimTask_ShakeMon2, 0x2, ANIM_TARGET, 0x2, 0x0, 0x20, 0x1 playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET call ElectricityEffect - launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0x0 0x5 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x2 0x9 0x0 0x07FE + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x5 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x2, 0x9, 0x0, 0x07FE playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET call ElectricityEffect waitforvisualfinish clearmonbg ANIM_TARGET - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x9 0x0 0x07FE + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x2, 0x9, 0x0, 0x07FE call UnsetPsychicBg - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x0 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x0, 0x0 blendoff waitforvisualfinish end @@ -7594,32 +7594,32 @@ Move_BOLT_STRIKE:: Move_BLUE_FLARE:: loadspritegfx ANIM_TAG_SMALL_EMBER @Fire loadspritegfx ANIM_TAG_METAL_BITS @Blue Flare Colour - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x0 0x0 0x10 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x0, 0x0, 0x10, 0x0 loopsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER, 0x7, 0x9 - launchtemplate gBlueFlareFlameJabTemplate 0x82 0x5 0x1 0x0 0x0 0xffe0 0x10 + createsprite gBlueFlareFlameJabTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x0, 0xffe0, 0x10 delay 0x2 - launchtemplate gBlueFlareFlameJabTemplate 0x82 0x5 0x1 0x0 0x16 0xffea 0x10 + createsprite gBlueFlareFlameJabTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x16, 0xffea, 0x10 delay 0x2 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 0x4 0x1 0x0 0x9 0x1F - launchtemplate gBlueFlareFlameJabTemplate 0x82 0x5 0x1 0x0 0x1e 0x0 0x10 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, 0x4, 0x1, 0x0, 0x9, 0x1F + createsprite gBlueFlareFlameJabTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x1e, 0x0, 0x10 delay 0x2 - launchtemplate gBlueFlareFlameJabTemplate 0x82 0x5 0x1 0x0 0x14 0x14 0x10 + createsprite gBlueFlareFlameJabTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x14, 0x14, 0x10 delay 0x2 - launchtemplate gBlueFlareFlameJabTemplate 0x82 0x5 0x1 0x0 0x0 0x1c 0x10 + createsprite gBlueFlareFlameJabTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x0, 0x1c, 0x10 delay 0x2 - launchtemplate gBlueFlareFlameJabTemplate 0x82 0x5 0x1 0x0 0xffed 0x13 0x10 + createsprite gBlueFlareFlameJabTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0xffed, 0x13, 0x10 delay 0x2 - launchtemplate gBlueFlareFlameJabTemplate 0x82 0x5 0x1 0x0 0xffe5 0x0 0x10 + createsprite gBlueFlareFlameJabTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0xffe5, 0x0, 0x10 delay 0x2 - launchtemplate gBlueFlareFlameJabTemplate 0x82 0x5 0x1 0x0 0xffee 0xffee 0x10 + createsprite gBlueFlareFlameJabTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0xffee, 0xffee, 0x10 delay 0x2 - launchtemplate gBlueFlareFlameJabTemplate 0x82 0x5 0x1 0x0 0x0 0xffe7 0x10 + createsprite gBlueFlareFlameJabTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x0, 0xffe7, 0x10 delay 0x2 - launchtemplate gBlueFlareFlameJabTemplate 0x82 0x5 0x1 0x0 0x11 0xffef 0x10 + createsprite gBlueFlareFlameJabTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x11, 0xffef, 0x10 delay 0x2 - launchtemplate gBlueFlareFlameJabTemplate 0x82 0x5 0x1 0x0 0x17 0x0 0x10 + createsprite gBlueFlareFlameJabTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x17, 0x0, 0x10 delay 0x2 - launchtemplate gBlueFlareFlameJabTemplate 0x82 0x5 0x1 0x0 0x10 0x10 0x10 + createsprite gBlueFlareFlameJabTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x10, 0x10, 0x10 waitforvisualfinish playsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_TARGET call BlueFlareFireSpin @@ -7627,47 +7627,47 @@ Move_BLUE_FLARE:: call BlueFlareFireSpin fadetobg BG_FIRE_2 waitbgfadeout - launchtask AnimTask_StartSlidingBg 0x5 0x4 0x1000 0x0 0x0 0xFFFF + createvisualtask AnimTask_StartSlidingBg, 0x5, 0x1000, 0x0, 0x0, 0xFFFF waitbgfadein playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER call BlueFlareFlameSpreadEffect waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x0 0x0 0x0 0x0 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 0x4 0x1 0x9 0x0 0x1f + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x0, 0x0, 0x0, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, 0x4, 0x1, 0x9, 0x0, 0x1f call UnsetPsychicBg waitforvisualfinish end BlueFlareFireSpin: - launchtemplate gBlueFlareFlameSwirlTemplate 0x82 0x7 0x0 0x1c 0x210 0x1e 0xd 0x32 0x1 + createsprite gBlueFlareFlameSwirlTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x210, 0x1e, 0xd, 0x32, 0x1 delay 0x2 - launchtemplate gBlueFlareFlameSwirlTemplate 0x82 0x7 0x0 0x20 0x1e0 0x14 0x10 0xffd2 0x1 + createsprite gBlueFlareFlameSwirlTemplate, ANIM_TARGET, 2, 0x0, 0x20, 0x1e0, 0x14, 0x10, 0xffd2, 0x1 delay 0x2 - launchtemplate gBlueFlareFlameSwirlTemplate 0x82 0x7 0x0 0x21 0x240 0x14 0x8 0x2a 0x1 + createsprite gBlueFlareFlameSwirlTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x240, 0x14, 0x8, 0x2a, 0x1 delay 0x2 - launchtemplate gBlueFlareFlameSwirlTemplate 0x82 0x7 0x0 0x1f 0x190 0x19 0xb 0xffd6 0x1 + createsprite gBlueFlareFlameSwirlTemplate, ANIM_TARGET, 2, 0x0, 0x1f, 0x190, 0x19, 0xb, 0xffd6, 0x1 delay 0x2 - launchtemplate gBlueFlareFlameSwirlTemplate 0x82 0x7 0x0 0x1c 0x200 0x19 0x10 0x2e 0x1 + createsprite gBlueFlareFlameSwirlTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x200, 0x19, 0x10, 0x2e, 0x1 delay 0x2 - launchtemplate gBlueFlareFlameSwirlTemplate 0x82 0x7 0x0 0x21 0x1d0 0x1e 0xf 0xffce 0x1 + createsprite gBlueFlareFlameSwirlTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1d0, 0x1e, 0xf, 0xffce, 0x1 delay 0x2 return BlueFlareFlameSpreadEffect: - launchtemplate gBlueFlareBurnTemplate 0x81 0x5 0x0 0xa 0x0 0xb0 0x28 - launchtemplate gBlueFlareBurnTemplate 0x81 0x5 0x0 0xa 0xff40 0xf0 0x28 - launchtemplate gBlueFlareBurnTemplate 0x81 0x5 0x0 0xa 0x0 0xff60 0x28 - launchtemplate gBlueFlareBurnTemplate 0x81 0x5 0x0 0xa 0xff40 0xff90 0x28 - launchtemplate gBlueFlareBurnTemplate 0x81 0x5 0x0 0xa 0xa0 0x30 0x28 - launchtemplate gBlueFlareBurnTemplate 0x81 0x5 0x0 0xa 0xff20 0xffe0 0x28 - launchtemplate gBlueFlareBurnTemplate 0x81 0x5 0x0 0xa 0x70 0xff80 0x28 + createsprite gBlueFlareBurnTemplate, ANIM_TARGET, 1, 0x0, 0xa, 0x0, 0xb0, 0x28 + createsprite gBlueFlareBurnTemplate, ANIM_TARGET, 1, 0x0, 0xa, 0xff40, 0xf0, 0x28 + createsprite gBlueFlareBurnTemplate, ANIM_TARGET, 1, 0x0, 0xa, 0x0, 0xff60, 0x28 + createsprite gBlueFlareBurnTemplate, ANIM_TARGET, 1, 0x0, 0xa, 0xff40, 0xff90, 0x28 + createsprite gBlueFlareBurnTemplate, ANIM_TARGET, 1, 0x0, 0xa, 0xa0, 0x30, 0x28 + createsprite gBlueFlareBurnTemplate, ANIM_TARGET, 1, 0x0, 0xa, 0xff20, 0xffe0, 0x28 + createsprite gBlueFlareBurnTemplate, ANIM_TARGET, 1, 0x0, 0xa, 0x70, 0xff80, 0x28 return Move_FIERY_DANCE:: loadspritegfx ANIM_TAG_SMALL_EMBER - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xc 0x14be + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xc, 0x14be waitforvisualfinish playsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_TARGET - launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_TARGET 0x0 0x2 0x40 0x1 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x1 0x0 0x9 0x1f + createvisualtask AnimTask_ShakeMon, 0x5, ANIM_TARGET, 0x0, 0x2, 0x40, 0x1 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x1, 0x0, 0x9, 0x1f call FireSpinEffect call FireSpinEffect call FireSpinEffect @@ -7676,8 +7676,8 @@ Move_FIERY_DANCE:: call FireSpinEffect call FireSpinEffect waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x1 0x9 0x0 0x1f - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xc 0x0 0x14be + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x1, 0x9, 0x0, 0x1f + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xc, 0x0, 0x14be waitforvisualfinish end @@ -7688,37 +7688,37 @@ Move_FREEZE_SHOCK:: loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @Electric Circle choosetwoturnanim FreezeShockCharge FreezeShockAttack FreezeShockCharge: - launchtask AnimTask_HorizontalShake 0x5 0x3 0x0 0x2 0x10 + createvisualtask AnimTask_HorizontalShake, 0x5, 0x0, 0x2, 0x10 playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_TARGET - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x1 0x0 0xf 0x7fff - launchtemplate gFreezeShockCircleTemplate 0x2 0x0 @electric circle + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x1, 0x0, 0xf, 0x7fff + createsprite gFreezeShockCircleTemplate, ANIM_ATTACKER, 2 @electric circle delay 0x14 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x1 0xf 0x0 0x7fff + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x1, 0xf, 0x0, 0x7fff waitforvisualfinish end FreezeShockAttack: loopsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET, 0x5, 0x5 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x10 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x10, 0x0 monbg ANIM_TARGET waitforvisualfinish playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_ATTACKER - launchtemplate gFreezeShockIceBallTemplate 0x83 0x6 0xa 0x0 0x0 0x0 0x1e 0x0 - launchtemplate gZapCannonSparkSpriteTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x0 0x28 0x0 - launchtemplate gZapCannonSparkSpriteTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x40 0x28 0x1 - launchtemplate gZapCannonSparkSpriteTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x80 0x28 0x0 - launchtemplate gZapCannonSparkSpriteTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x0 0x28 0x2 - launchtemplate gZapCannonSparkSpriteTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x20 0x28 0x0 - launchtemplate gZapCannonSparkSpriteTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x60 0x28 0x1 - launchtemplate gZapCannonSparkSpriteTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0xa0 0x28 0x0 - launchtemplate gZapCannonSparkSpriteTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0xe0 0x28 0x2 - waitforvisualfinish - launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x4 0x0 0x5 0x1 + createsprite gFreezeShockIceBallTemplate, ANIM_TARGET, 3, 0xa, 0x0, 0x0, 0x0, 0x1e, 0x0 + createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x10, 0x1e, 0x0, 0x28, 0x0 + createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x10, 0x1e, 0x40, 0x28, 0x1 + createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x10, 0x1e, 0x80, 0x28, 0x0 + createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x10, 0x1e, 0x0, 0x28, 0x2 + createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x8, 0x1e, 0x20, 0x28, 0x0 + createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x8, 0x1e, 0x60, 0x28, 0x1 + createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x8, 0x1e, 0xa0, 0x28, 0x0 + createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x8, 0x1e, 0xe0, 0x28, 0x2 + waitforvisualfinish + createvisualtask AnimTask_ShakeMon2, 0x2, 0x1, 0x4, 0x0, 0x5, 0x1 delay 0xf waitplaysewithpan SE_M_THUNDERBOLT2, SOUND_PAN_TARGET, 0x13 call ElectricityEffect waitforvisualfinish clearmonbg ANIM_TARGET - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x10 0x0 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x10, 0x0, 0x0 waitforvisualfinish end @@ -7731,58 +7731,58 @@ Move_ICE_BURN:: waitforvisualfinish end IceBurnCharge: - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xC 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xC, 0x0 waitforvisualfinish loopsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET, 0x4, 0x3 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x1 0x8 0x0 0x0 - launchtask AnimTask_HorizontalShake 0x5 0x3 0x0 0x2 0x10 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x1 0x0 0xf 0x7fff + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x1, 0x8, 0x0, 0x0 + createvisualtask AnimTask_HorizontalShake, 0x5, 0x0, 0x2, 0x10 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x1, 0x0, 0xf, 0x7fff delay 0x14 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x1 0xf 0x0 0x7fff + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x1, 0xf, 0x0, 0x7fff waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xC 0x0 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xC, 0x0, 0x0 waitforvisualfinish end IceBurnUnleash: monbg ANIM_TARGET fadetobg BG_ICE waitbgfadeout - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x0 0x9 0x7fff - launchtemplate gIceCrystalHitLargeSpriteTemplate 0x82, 0x3, 0xfff6 0xfff6 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x2, 0x0, 0x9, 0x7fff + createsprite gIceCrystalHitLargeSpriteTemplate, ANIM_TARGET, 2, 0xfff6, 0xfff6, 0x0 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET - launchtemplate gIceBurnSmokeTemplate 0x84 0x5 0x0 0xfff4 0x68 0x0 0x4b - launchtemplate gIceBurnSmokeTemplate 0x84 0x5 0x0 0xfff4 0x48 0x1 0x4b - launchtemplate gIceBurnSmokeTemplate 0x84 0x5 0x0 0xfffa 0x38 0x1 0x4b - launchtemplate gIceBurnSmokeTemplate 0x84 0x5 0x0 0xfffa 0x58 0x0 0x4b - launchtemplate gIceBurnSmokeTemplate 0x84 0x5 0x0 0x0 0x38 0x0 0x4b - launchtemplate gIceBurnSmokeTemplate 0x84 0x5 0x0 0x0 0x58 0x1 0x4b - launchtemplate gIceBurnSmokeTemplate 0x84 0x5 0x0 0x6 0x48 0x0 0x4b - launchtemplate gIceBurnSmokeTemplate 0x84 0x5 0x0 0x6 0x68 0x1 0x4b - launchtemplate gIceBurnSmokeTemplate 0x84 0x5 0x0 0xc 0x48 0x0 0x4b - launchtemplate gIceBurnSmokeTemplate 0x84 0x5 0x0 0xc 0x38 0x1 0x4b - launchtemplate gIceBurnSmokeTemplate 0x84 0x5 0x0 0x12 0x50 0x0 0x4b - launchtemplate gIceBurnSmokeTemplate 0x84 0x5 0x0 0x12 0x48 0x1 0x4b + createsprite gIceBurnSmokeTemplate, ANIM_TARGET, 4, 0x0, 0xfff4, 0x68, 0x0, 0x4b + createsprite gIceBurnSmokeTemplate, ANIM_TARGET, 4, 0x0, 0xfff4, 0x48, 0x1, 0x4b + createsprite gIceBurnSmokeTemplate, ANIM_TARGET, 4, 0x0, 0xfffa, 0x38, 0x1, 0x4b + createsprite gIceBurnSmokeTemplate, ANIM_TARGET, 4, 0x0, 0xfffa, 0x58, 0x0, 0x4b + createsprite gIceBurnSmokeTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x38, 0x0, 0x4b + createsprite gIceBurnSmokeTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x58, 0x1, 0x4b + createsprite gIceBurnSmokeTemplate, ANIM_TARGET, 4, 0x0, 0x6, 0x48, 0x0, 0x4b + createsprite gIceBurnSmokeTemplate, ANIM_TARGET, 4, 0x0, 0x6, 0x68, 0x1, 0x4b + createsprite gIceBurnSmokeTemplate, ANIM_TARGET, 4, 0x0, 0xc, 0x48, 0x0, 0x4b + createsprite gIceBurnSmokeTemplate, ANIM_TARGET, 4, 0x0, 0xc, 0x38, 0x1, 0x4b + createsprite gIceBurnSmokeTemplate, ANIM_TARGET, 4, 0x0, 0x12, 0x50, 0x0, 0x4b + createsprite gIceBurnSmokeTemplate, ANIM_TARGET, 4, 0x0, 0x12, 0x48, 0x1, 0x4b call FireSpreadEffect playsewithpan SE_M_FIRE_PUNCH, SOUND_PAN_TARGET delay 0x4 - launchtemplate gIceCrystalHitSmallSpriteTemplate 0x82, 0x3, 0xa 0x14 0x0 + createsprite gIceCrystalHitSmallSpriteTemplate, ANIM_TARGET, 2, 0xa, 0x14, 0x0 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET delay 0x4 - launchtemplate gIceCrystalHitLargeSpriteTemplate 0x82, 0x3, 0xfffb 0xa 0x0 + createsprite gIceCrystalHitLargeSpriteTemplate, ANIM_TARGET, 2, 0xfffb, 0xa, 0x0 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET delay 0x4 - launchtemplate gIceCrystalHitSmallSpriteTemplate 0x82, 0x3, 0x11 0xfff4 0x0 + createsprite gIceCrystalHitSmallSpriteTemplate, ANIM_TARGET, 2, 0x11, 0xfff4, 0x0 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET delay 0x4 - launchtemplate gIceCrystalHitSmallSpriteTemplate 0x82, 0x3, 0xfff1 0xf 0x0 + createsprite gIceCrystalHitSmallSpriteTemplate, ANIM_TARGET, 2, 0xfff1, 0xf, 0x0 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET delay 0x4 - launchtemplate gIceCrystalHitSmallSpriteTemplate 0x82, 0x3, 0x0 0x0 0x0 + createsprite gIceCrystalHitSmallSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x0 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET delay 0x4 - launchtemplate gIceCrystalHitLargeSpriteTemplate 0x82, 0x3, 0x14 0x2 0x0 + createsprite gIceCrystalHitLargeSpriteTemplate, ANIM_TARGET, 2, 0x14, 0x2, 0x0 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x9 0x0 0x7fff + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x2, 0x9, 0x0, 0x7fff waitforvisualfinish restorebg clearmonbg ANIM_TARGET @@ -7795,36 +7795,36 @@ Move_SNARL:: monbg ANIM_DEF_PARTNER fadetobg BG_DARK waitbgfadeout - launchtask AnimTask_UproarDistortion 0x2 0x1 0x0 - launchtemplate gUproarRingSpriteTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1f 0x8 + createvisualtask AnimTask_UproarDistortion, 0x2, 0x0 + createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x8 playsewithpan SE_M_UPROAR, SOUND_PAN_ATTACKER - launchtemplate gJaggedMusicNoteSpriteTemplate 0x2 0x4 0x0 0x1d 0xfff4 0x0 - launchtemplate gJaggedMusicNoteSpriteTemplate 0x2 0x4 0x0 0xfff4 0xffe3 0x1 + createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1d, 0xfff4, 0x0 + createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff4, 0xffe3, 0x1 delay 0x10 - launchtask AnimTask_UproarDistortion 0x2 0x1 0x0 - launchtemplate gUproarRingSpriteTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1f 0x8 + createvisualtask AnimTask_UproarDistortion, 0x2, 0x0 + createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x8 playsewithpan SE_M_UPROAR, SOUND_PAN_ATTACKER - launchtemplate gJaggedMusicNoteSpriteTemplate 0x2 0x4 0x0 0xc 0xffe3 0x1 - launchtemplate gJaggedMusicNoteSpriteTemplate 0x2 0x4 0x0 0xffe3 0xfff4 0x0 + createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xc, 0xffe3, 0x1 + createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe3, 0xfff4, 0x0 delay 0x10 - launchtask AnimTask_UproarDistortion 0x2 0x1 0x0 - launchtemplate gUproarRingSpriteTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1f 0x8 + createvisualtask AnimTask_UproarDistortion, 0x2, 0x0 + createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x8 playsewithpan SE_M_UPROAR, SOUND_PAN_ATTACKER - launchtemplate gJaggedMusicNoteSpriteTemplate 0x2 0x4 0x0 0x18 0xffe8 0x1 - launchtemplate gJaggedMusicNoteSpriteTemplate 0x2 0x4 0x0 0xffe8 0xffe8 0x0 + createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x18, 0xffe8, 0x1 + createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0xffe8, 0x0 waitforvisualfinish - launchtemplate gBasicHitSplatSpriteTemplate 0x83 0x4 0xffe0 0xfff0 0x1 0x3 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0xffe0, 0xfff0, 0x1, 0x3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET - launchtask AnimTask_ShakeMonInPlace 0x2 0x5 0x1 0x3 0x0 0xc 0x1 - launchtask AnimTask_ShakeMonInPlace 0x2 0x5 0x3 0x3 0x0 0xc 0x1 + createvisualtask AnimTask_ShakeMonInPlace, 0x2, 0x1, 0x3, 0x0, 0xc, 0x1 + createvisualtask AnimTask_ShakeMonInPlace, 0x2, 0x3, 0x3, 0x0, 0xc, 0x1 delay 0x4 - launchtemplate gRandomPosHitSplatSpriteTemplate 0x83 0x2 0x1 0x3 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x1, 0x3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 0x4 - launchtemplate gRandomPosHitSplatSpriteTemplate 0x83 0x2 0x1 0x3 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x1, 0x3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 0x4 - launchtemplate gBasicHitSplatSpriteTemplate 0x83 0x4 0x20 0x14 0x1 0x3 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x20, 0x14, 0x1, 0x3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET waitforvisualfinish call UnsetPsychicBg @@ -7837,18 +7837,18 @@ Move_ICICLE_CRASH:: fadetobg BG_ICE waitbgfadein monbg ANIM_DEF_PARTNER - launchtemplate gIcicleCrashSpearTemplate 0x82, 0x4, 0xfffb 0x0 0xfffb 0x0 + createsprite gIcicleCrashSpearTemplate, ANIM_TARGET, 2, 0xfffb, 0x0, 0xfffb, 0x0 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET delay 0x2 - launchtemplate gIcicleCrashSpearTemplate 0x82, 0x4, 0x5 0x0 0x6 0x1 + createsprite gIcicleCrashSpearTemplate, ANIM_TARGET, 2, 0x5, 0x0, 0x6, 0x1 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET delay 0x2 - launchtemplate gIcicleCrashSpearTemplate 0x82, 0x4, 0x13 0x0 0xa 0x01 + createsprite gIcicleCrashSpearTemplate, ANIM_TARGET, 2, 0x13, 0x0, 0xa, 0x01 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET delay 0x2 - launchtemplate gIcicleCrashSpearTemplate 0x82, 0x4, 0xffe9 0x0 0xfff6 0x1 + createsprite gIcicleCrashSpearTemplate, ANIM_TARGET, 2, 0xffe9, 0x0, 0xfff6, 0x1 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0 0x5 0x32 0x1 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x0, 0x5, 0x32, 0x1 delay 0x2 call LaunchIcicleCrashSpear call LaunchIcicleCrashSpear @@ -7858,28 +7858,28 @@ Move_ICICLE_CRASH:: waitbgfadeout end LaunchIcicleCrashSpear: - launchtemplate gIcicleCrashSpearTemplate 0x82, 0x4, 0xffec 0x0 0xfff6 0x0 + createsprite gIcicleCrashSpearTemplate, ANIM_TARGET, 2, 0xffec, 0x0, 0xfff6, 0x0 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET delay 0x2 - launchtemplate gIcicleCrashSpearTemplate 0x82, 0x4, 0x1c 0x0 0xa 0x0 + createsprite gIcicleCrashSpearTemplate, ANIM_TARGET, 2, 0x1c, 0x0, 0xa, 0x0 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET delay 0x2 - launchtemplate gIcicleCrashSpearTemplate 0x82, 0x4, 0xfff6 0x0 0xfffb 0x0 + createsprite gIcicleCrashSpearTemplate, ANIM_TARGET, 2, 0xfff6, 0x0, 0xfffb, 0x0 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET delay 0x2 - launchtemplate gIcicleCrashSpearTemplate 0x82, 0x4, 0xa 0x0 0x6 0x0 + createsprite gIcicleCrashSpearTemplate, ANIM_TARGET, 2, 0xa, 0x0, 0x6, 0x0 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET delay 0x2 - launchtemplate gIcicleCrashSpearTemplate 0x82, 0x4, 0x18 0x0 0xa 0x0 + createsprite gIcicleCrashSpearTemplate, ANIM_TARGET, 2, 0x18, 0x0, 0xa, 0x0 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET delay 0x2 - launchtemplate gIcicleCrashSpearTemplate 0x82, 0x4, 0xffe0 0x0 0xfff6 0x0 + createsprite gIcicleCrashSpearTemplate, ANIM_TARGET, 2, 0xffe0, 0x0, 0xfff6, 0x0 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET delay 0x2 - launchtemplate gIcicleCrashSpearTemplate 0x82, 0x4, 0xffec 0x0 0xfff6 0x0 + createsprite gIcicleCrashSpearTemplate, ANIM_TARGET, 2, 0xffec, 0x0, 0xfff6, 0x0 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET delay 0x2 - launchtemplate gIcicleCrashSpearTemplate 0x82, 0x4, 0x1e 0x0 0xa 0x0 + createsprite gIcicleCrashSpearTemplate, ANIM_TARGET, 2, 0x1e, 0x0, 0xa, 0x0 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET delay 0x2 return @@ -7890,13 +7890,13 @@ Move_V_CREATE:: loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE @red color loadspritegfx ANIM_TAG_ECLIPSING_ORB @defense curl animation monbg ANIM_ATK_PARTNER - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xC 0x0 @Darken - launchtemplate gVCreateRedOrbTemplate 0x2 0x4 0x0 0x11 0x0 0x1 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xC, 0x0 @Darken + createsprite gVCreateRedOrbTemplate, ANIM_ATTACKER, 2, 0x0, 0x11, 0x0, 0x1 playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER delay 0x2 - launchtemplate gVCreateRedRingTemplate 0x28 0x4 0x0 0x0 0x0 0x0 + createsprite gVCreateRedRingTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0 waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x2 0x0 0x9 0x1f + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x2, 0x0, 0x9, 0x1f playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_TARGET call VCreateFlames call VCreateFlames @@ -7918,47 +7918,47 @@ Move_V_CREATE:: clearmonbg ANIM_ATK_PARTNER fadetobg BG_FIRE @Mr. DS Fire waitbgfadeout - launchtask AnimTask_StartSlidingBg 0x5 0x4 0xA00 0x0 0x1 0xffff + createvisualtask AnimTask_StartSlidingBg, 0x5, 0xA00, 0x0, 0x1, 0xffff waitbgfadein playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER - launchtask AnimTask_WindUpLunge 0x5 0x7 0x0 0xffe8 0x8 0x17 0xa 0x28 0xa + createvisualtask AnimTask_WindUpLunge, 0x5, 0x0, 0xffe8, 0x8, 0x17, 0xa, 0x28, 0xa delay 0x23 - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0 0x5 0x32 0x1 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x0 0x9 0x1f + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x0, 0x5, 0x32, 0x1 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x2, 0x0, 0x9, 0x1f playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x0 0x0 0x1 0x1 + createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x1, 0x1 delay 0x6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x18 0xffe8 0x1 0x1 + createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x18, 0xffe8, 0x1, 0x1 delay 0x6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gExplosionSpriteTemplate 0x3 0x4 0xfff0 0x10 0x1 0x1 + createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0xfff0, 0x10, 0x1, 0x1 delay 0x6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gExplosionSpriteTemplate 0x3 0x4 0xffe8 0xfff4 0x1 0x1 + createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0xffe8, 0xfff4, 0x1, 0x1 delay 0x6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x10 0x10 0x1 0x1 + createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x10, 0x10, 0x1, 0x1 waitforvisualfinish - launchtemplate gHorizontalLungeSpriteTemplate 0x2 0x2 0x4 0x4 - launchtemplate gClawSlashSpriteTemplate 0x82, 0x3, 0xfff6 0xfff6 0x0 - launchtemplate gClawSlashSpriteTemplate 0x82, 0x3, 0xa 0xfff6 0x1 + createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 0x4, 0x4 + createsprite gClawSlashSpriteTemplate, ANIM_TARGET, 2, 0xfff6, 0xfff6, 0x0 + createsprite gClawSlashSpriteTemplate, ANIM_TARGET, 2, 0xa, 0xfff6, 0x1 waitforvisualfinish - launchtask AnimTask_ShakeMonInPlace 0x2 0x5 0x1 0x4 0x0 0xc 0x1 + createvisualtask AnimTask_ShakeMonInPlace, 0x2, 0x1, 0x4, 0x0, 0xc, 0x1 waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x2 0x9 0x0 0x1f - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x9 0x0 0x1f + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x2, 0x9, 0x0, 0x1f + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x2, 0x9, 0x0, 0x1f delay 0x2 - launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0x0 0x5 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x5 waitforvisualfinish clearmonbg ANIM_DEF_PARTNER call UnsetPsychicBg - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x0 0xffff + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x0, 0xffff waitforvisualfinish end VCreateFlames: - launchtemplate gVCreateFlameTemplate 0x82 0x5 0x0 0x1 0x16 0xFFEA 0x10 @upperright - launchtemplate gVCreateFlameTemplate 0x82 0x5 0x0 0x1 0xFFEE 0xFFEE 0x10 @upperleft + createsprite gVCreateFlameTemplate, ANIM_TARGET, 2, 0x0, 0x1, 0x16, 0xFFEA, 0x10 @upperright + createsprite gVCreateFlameTemplate, ANIM_TARGET, 2, 0x0, 0x1, 0xFFEE, 0xFFEE, 0x10 @upperleft delay 0x3 return @@ -7972,52 +7972,52 @@ Move_FUSION_FLARE:: createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SMALL_BUBBLES, 0x0, 0xD, 0xD, 0x015B @Reddish Orange monbg ANIM_TARGET setalpha 12, 8 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xC 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xC, 0x0 waitforvisualfinish playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER call FusionFlareBuff delay 0x8 - launchtask AnimTask_BlendColorCycle 0x2 0x6 ANIM_PAL_ATK 0x2 0x2 0x0 0xb 0x1F - launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1 - launchtemplate gVerticalDipSpriteTemplate 0x2 0x3 0x8 0x1 0x0 + createvisualtask AnimTask_BlendColorCycle, 0x2, F_PAL_ATTACKER, 0x2, 0x2, 0x0, 0xb, 0x1F + createvisualtask AnimTask_ShakeMon2, 0x2, 0x0, 0x1, 0x0, 0x20, 0x1 + createsprite gVerticalDipSpriteTemplate, ANIM_ATTACKER, 2, 0x8, 0x1, 0x0 delay 0x8 playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER - launchtemplate gFusionFlareRedBallUpTemplate 0x2 0x0 + createsprite gFusionFlareRedBallUpTemplate, ANIM_ATTACKER, 2 delay 0x20 - launchtemplate gFusionFlareRedBallTemplate 0x3 0x3 0x0 0xffA0 0x2F - launchtemplate gFusionFlareRedBubblesTemplate 0x42 0x7 0x64 0x64 0x8 0x1 0x14 0x28 0x0 - launchtemplate gFusionFlareRedBubblesTemplate 0x42 0x7 0x14 0x64 0x10 0x2 0xa 0x23 0x1 - launchtemplate gFusionFlareRedBubblesTemplate 0x42 0x7 0xc8 0x50 0x8 0x1 0x28 0x14 0x0 - launchtemplate gFusionFlareRedBubblesTemplate 0x42 0x7 0x50 0x3c 0xa 0x3 0x14 0x32 0x0 - launchtemplate gFusionFlareRedBubblesTemplate 0x42 0x7 0x8c 0x64 0x10 0x1 0x14 0x1e 0x1 + createsprite gFusionFlareRedBallTemplate, ANIM_ATTACKER, 3, 0x0, 0xffA0, 0x2F + createsprite gFusionFlareRedBubblesTemplate, ANIM_ATTACKER, 66, 0x64, 0x64, 0x8, 0x1, 0x14, 0x28, 0x0 + createsprite gFusionFlareRedBubblesTemplate, ANIM_ATTACKER, 66, 0x14, 0x64, 0x10, 0x2, 0xa, 0x23, 0x1 + createsprite gFusionFlareRedBubblesTemplate, ANIM_ATTACKER, 66, 0xc8, 0x50, 0x8, 0x1, 0x28, 0x14, 0x0 + createsprite gFusionFlareRedBubblesTemplate, ANIM_ATTACKER, 66, 0x50, 0x3c, 0xa, 0x3, 0x14, 0x32, 0x0 + createsprite gFusionFlareRedBubblesTemplate, ANIM_ATTACKER, 66, 0x8c, 0x64, 0x10, 0x1, 0x14, 0x1e, 0x1 delay 0x29 - launchtask AnimTask_BlendColorCycle 0x2 0x6 ANIM_PAL_DEF 0x2 0x2 0x0 0xb 0x1F + createvisualtask AnimTask_BlendColorCycle, 0x2, F_PAL_TARGET, 0x2, 0x2, 0x0, 0xb, 0x1F delay 0x5 - launchtemplate gFusionFlareRedRingTemplate 0x3 0x6 0x1 0x1 0x1 0x1 0x1F 0x8 - launchtemplate gFusionFlareRedBubblesTemplate 0x42 0x7 0x64 0x64 0x8 0x1 0x14 0x28 0x0 - launchtemplate gFusionFlareRedBubblesTemplate 0x42 0x7 0x14 0x64 0x10 0x2 0xa 0x23 0x1 - launchtemplate gFusionFlareRedBubblesTemplate 0x42 0x7 0xc8 0x50 0x8 0x1 0x28 0x14 0x0 - launchtemplate gFusionFlareRedBubblesTemplate 0x42 0x7 0x50 0x3c 0xa 0x3 0x14 0x32 0x0 - launchtemplate gFusionFlareRedBubblesTemplate 0x42 0x7 0x8c 0x64 0x10 0x1 0x14 0x1e 0x1 - launchtask AnimTask_HorizontalShake 0x5 0x3 0x1 0x2 0x10 + createsprite gFusionFlareRedRingTemplate, ANIM_ATTACKER, 3, 0x1, 0x1, 0x1, 0x1, 0x1F, 0x8 + createsprite gFusionFlareRedBubblesTemplate, ANIM_ATTACKER, 66, 0x64, 0x64, 0x8, 0x1, 0x14, 0x28, 0x0 + createsprite gFusionFlareRedBubblesTemplate, ANIM_ATTACKER, 66, 0x14, 0x64, 0x10, 0x2, 0xa, 0x23, 0x1 + createsprite gFusionFlareRedBubblesTemplate, ANIM_ATTACKER, 66, 0xc8, 0x50, 0x8, 0x1, 0x28, 0x14, 0x0 + createsprite gFusionFlareRedBubblesTemplate, ANIM_ATTACKER, 66, 0x50, 0x3c, 0xa, 0x3, 0x14, 0x32, 0x0 + createsprite gFusionFlareRedBubblesTemplate, ANIM_ATTACKER, 66, 0x8c, 0x64, 0x10, 0x1, 0x14, 0x1e, 0x1 + createvisualtask AnimTask_HorizontalShake, 0x5, 0x1, 0x2, 0x10 delay 0x5 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xC 0x0 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xC, 0x0, 0x0 waitforvisualfinish clearmonbg ANIM_TARGET blendoff end FusionFlareBuff: - launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2 + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x1a, 0x2 delay 0x4 - launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1 + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xe, 0x1c, 0x1 delay 0x4 - launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2 + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfffb, 0xa, 0x2 delay 0x4 - launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3 + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1c, 0x1a, 0x3 delay 0x4 - launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1 + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff4, 0x0, 0x1 return Move_FUSION_BOLT:: @@ -8027,42 +8027,42 @@ Move_FUSION_BOLT:: createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SPARK, 0x0, 0xC, 0xC, 0x7960 @Blue Electricity createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_CIRCLE_OF_LIGHT, 0x0, 0xC, 0xC, 0x7960 @Blue Electricity createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ELECTRICITY, 0x0, 0xC, 0xC, 0x7960 @Blue Electricity - createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_BG, 0x0, 0x0, 0xE, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0x0, 0x0, 0xE, 0x0 waitforvisualfinish - launchtemplate gVoltTackleOrbSlideSpriteTemplate 0x1 0x0 + createsprite gVoltTackleOrbSlideSpriteTemplate, ANIM_ATTACKER, 1 playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER invisible ANIM_ATTACKER waitforvisualfinish delay 0x8 - launchtask AnimTask_VoltTackleBolt 0x5 0x1 0x0 + createvisualtask AnimTask_VoltTackleBolt, 0x5, 0x0 playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_ATTACKER waitforvisualfinish - launchtask AnimTask_VoltTackleBolt 0x5 0x1 0x1 + createvisualtask AnimTask_VoltTackleBolt, 0x5, 0x1 playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_TARGET waitforvisualfinish - launchtask AnimTask_VoltTackleBolt 0x5 0x1 0x2 + createvisualtask AnimTask_VoltTackleBolt, 0x5, 0x2 playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_ATTACKER waitforvisualfinish - launchtask AnimTask_VoltTackleBolt 0x5 0x1 0x3 + createvisualtask AnimTask_VoltTackleBolt, 0x5, 0x3 playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_TARGET waitforvisualfinish - launchtemplate gFusionBoltBallTemplate 0x82 0x1 0x10 + createsprite gFusionBoltBallTemplate, ANIM_TARGET, 2, 0x10 playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_ATTACKER delay 0x8 - launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0xa 0x0 0x12 0x1 + createvisualtask AnimTask_ShakeMon2, 0x2, 0x1, 0xa, 0x0, 0x12, 0x1 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET - launchtemplate gElectricPuffSpriteTemplate 0x2 0x3 0x1 0x10 0x10 + createsprite gElectricPuffSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x10, 0x10 delay 0x2 - launchtemplate gElectricPuffSpriteTemplate 0x2 0x3 0x1 0xfff0 0xfff0 + createsprite gElectricPuffSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0xfff0, 0xfff0 delay 0x8 - launchtask AnimTask_VoltTackleAttackerReappear 0x5 0x0 + createvisualtask AnimTask_VoltTackleAttackerReappear, 0x5 waitforvisualfinish - launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x3 0x0 0x9 0x1 + createvisualtask AnimTask_ShakeMon2, 0x2, 0x0, 0x3, 0x0, 0x9, 0x1 playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER - launchtemplate gElectricPuffSpriteTemplate 0x2 0x3 0x0 0x10 0x10 + createsprite gElectricPuffSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x10, 0x10 delay 0x2 - launchtemplate gElectricPuffSpriteTemplate 0x2 0x3 0x0 0xfff0 0xfff0 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x0 0xE 0x0 0x0 + createsprite gElectricPuffSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff0, 0xfff0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x0, 0xE, 0x0, 0x0 waitforvisualfinish end @@ -8070,32 +8070,32 @@ Move_FUSION_BOLT:: Move_FLYING_PRESS:: loadspritegfx ANIM_TAG_ROUND_SHADOW @fly/bounce loadspritegfx ANIM_TAG_GRAY_SMOKE @smoke - setblends 0xF + setalpha 15, 0 playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER - launchtemplate gFlyBallUpSpriteTemplate 0x2 0x4 0x0 0x0 0xd 0x150 + createsprite gFlyBallUpSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0xd, 0x150 waitforvisualfinish delay 0xF playsewithpan SE_M_SWAGGER, SOUND_PAN_TARGET - launchtemplate gBounceBallLandSpriteTemplate 0x83 0x0 + createsprite gBounceBallLandSpriteTemplate, ANIM_TARGET, 3 delay 0x2 - launchtask AnimTask_SquishTarget 0x2 0x0 + createvisualtask AnimTask_SquishTarget, 0x2 delay 0x5 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET - launchtemplate gOctazookaSmokeSpriteTemplate 0x80 0x4 0x8 0x8 0x1 0x0 + createsprite gOctazookaSmokeSpriteTemplate, ANIM_TARGET, 0, 0x8, 0x8, 0x1, 0x0 delay 0x2 - launchtemplate gOctazookaSmokeSpriteTemplate 0x80 0x4 0xfff8 0xfff8 0x1 0x0 + createsprite gOctazookaSmokeSpriteTemplate, ANIM_TARGET, 0, 0xfff8, 0xfff8, 0x1, 0x0 delay 0x2 - launchtemplate gOctazookaSmokeSpriteTemplate 0x80 0x4 0x8 0xfff8 0x1 0x0 + createsprite gOctazookaSmokeSpriteTemplate, ANIM_TARGET, 0, 0x8, 0xfff8, 0x1, 0x0 delay 0x2 - launchtemplate gOctazookaSmokeSpriteTemplate 0x80 0x4 0xfff8 0x8 0x1 0x0 + createsprite gOctazookaSmokeSpriteTemplate, ANIM_TARGET, 0, 0xfff8, 0x8, 0x1, 0x0 delay 0x2 - launchtemplate gOctazookaSmokeSpriteTemplate 0x80 0x4 0x8 0x8 0x1 0x0 + createsprite gOctazookaSmokeSpriteTemplate, ANIM_TARGET, 0, 0x8, 0x8, 0x1, 0x0 delay 0x2 - launchtemplate gOctazookaSmokeSpriteTemplate 0x80 0x4 0xfff8 0xfff8 0x1 0x0 + createsprite gOctazookaSmokeSpriteTemplate, ANIM_TARGET, 0, 0xfff8, 0xfff8, 0x1, 0x0 delay 0x2 - launchtemplate gOctazookaSmokeSpriteTemplate 0x80 0x4 0x8 0xfff8 0x1 0x0 + createsprite gOctazookaSmokeSpriteTemplate, ANIM_TARGET, 0, 0x8, 0xfff8, 0x1, 0x0 delay 0x2 - launchtemplate gOctazookaSmokeSpriteTemplate 0x80 0x4 0xfff8 0x8 0x1 0x0 + createsprite gOctazookaSmokeSpriteTemplate, ANIM_TARGET, 0, 0xfff8, 0x8, 0x1, 0x0 waitforvisualfinish blendoff end @@ -8105,25 +8105,25 @@ Move_MAT_BLOCK:: loadspritegfx ANIM_TAG_GREEN_LIGHT_WALL @green color monbg ANIM_ATK_PARTNER splitbgprio ANIM_ATTACKER - setblends 0x10 + setalpha 16, 0 delay 0x0 playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER - launchtemplate gMatBlockGreenConversionTemplate 0x2 0x2 0xfff8 0x18 - launchtemplate gMatBlockGreenConversionTemplate 0x2 0x2 0x8 0x18 + createsprite gMatBlockGreenConversionTemplate, ANIM_ATTACKER, 2, 0xfff8, 0x18 + createsprite gMatBlockGreenConversionTemplate, ANIM_ATTACKER, 2, 0x8, 0x18 delay 0x3 playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER - launchtemplate gMatBlockGreenConversionTemplate 0x2 0x2 0xfff8 0x8 - launchtemplate gMatBlockGreenConversionTemplate 0x2 0x2 0x8 0x8 + createsprite gMatBlockGreenConversionTemplate, ANIM_ATTACKER, 2, 0xfff8, 0x8 + createsprite gMatBlockGreenConversionTemplate, ANIM_ATTACKER, 2, 0x8, 0x8 delay 0x3 playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER - launchtemplate gMatBlockGreenConversionTemplate 0x2 0x2 0xfff8 0xfff8 - launchtemplate gMatBlockGreenConversionTemplate 0x2 0x2 0x8 0xfff8 + createsprite gMatBlockGreenConversionTemplate, ANIM_ATTACKER, 2, 0xfff8, 0xfff8 + createsprite gMatBlockGreenConversionTemplate, ANIM_ATTACKER, 2, 0x8, 0xfff8 delay 0x3 playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER - launchtemplate gMatBlockGreenConversionTemplate 0x2 0x2 0xfff8 0xffe8 - launchtemplate gMatBlockGreenConversionTemplate 0x2 0x2 0x8 0xffe8 + createsprite gMatBlockGreenConversionTemplate, ANIM_ATTACKER, 2, 0xfff8, 0xffe8 + createsprite gMatBlockGreenConversionTemplate, ANIM_ATTACKER, 2, 0x8, 0xffe8 delay 0x14 - launchtask AnimTask_ConversionAlphaBlend 0x5 0x0 + createvisualtask AnimTask_ConversionAlphaBlend, 0x5 waitforvisualfinish delay 0x1 clearmonbg ANIM_ATK_PARTNER @@ -8137,26 +8137,26 @@ Move_BELCH:: splitbgprio ANIM_TARGET setalpha 12, 8 playsewithpan SE_SUCCESS, SOUND_PAN_ATTACKER - launchtemplate gBelchBerryTemplate 0x2 0x6 0x14 0xfff8 0xfff8 0xfff8 0x14 0xffe0 + createsprite gBelchBerryTemplate, ANIM_ATTACKER, 2, 0x14, 0xfff8, 0xfff8, 0xfff8, 0x14, 0xffe0 delay 0x13 - launchtask AnimTask_ShakeMonInPlace 0x2 0x5 0x1 0xa 0x0 0x14 0x1 + createvisualtask AnimTask_ShakeMonInPlace, 0x2, 0x1, 0xa, 0x0, 0x14, 0x1 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET - launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x0 0x0 0x1 0x1 + createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x1, 0x1 delay 0x6 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET - launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x18 0xffe8 0x1 0x1 + createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x18, 0xffe8, 0x1, 0x1 delay 0x6 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET - launchtemplate gExplosionSpriteTemplate 0x3 0x4 0xfff0 0x10 0x1 0x1 + createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0xfff0, 0x10, 0x1, 0x1 delay 0x6 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET - launchtemplate gExplosionSpriteTemplate 0x3 0x4 0xffe8 0xfff4 0x1 0x1 + createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0xffe8, 0xfff4, 0x1, 0x1 delay 0x6 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET - launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x10 0x10 0x1 0x1 + createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x10, 0x10, 0x1, 0x1 delay 0x6 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET - launchtemplate gExplosionSpriteTemplate 0x3 0x4 0xffe8 0x18 0x1 0x1 + createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0xffe8, 0x18, 0x1, 0x1 waitforvisualfinish clearmonbg ANIM_TARGET blendoff @@ -8166,18 +8166,18 @@ Move_ROTOTILLER:: loadspritegfx ANIM_TAG_MUD_SAND loadspritegfx ANIM_TAG_DIRT_MOUND loadspritegfx ANIM_TAG_GREEN_SPARKLE - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x10 0x112C + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x10, 0x112C waitforvisualfinish - launchtemplate gDirtMoundSpriteTemplate 0x1 0x3 0x0 0x0 0xb4 - launchtemplate gDirtMoundSpriteTemplate 0x1 0x3 0x0 0x1 0xb4 - launchtask AnimTask_TranslateMonEllipticalRespectSide 0x2 0x5 0x0 0x6 0x4 0x2 0x4 + createsprite gDirtMoundSpriteTemplate, ANIM_ATTACKER, 1, 0x0, 0x0, 0xb4 + createsprite gDirtMoundSpriteTemplate, ANIM_ATTACKER, 1, 0x0, 0x1, 0xb4 + createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 0x2, 0x0, 0x6, 0x4, 0x2, 0x4 call DigThrowDirt call DigThrowDirt - launchtask AnimTask_TranslateMonEllipticalRespectSide 0x2 0x5 0x0 0x6 0x4 0x2 0x4 + createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 0x2, 0x0, 0x6, 0x4, 0x2, 0x4 call DigThrowDirt call DigThrowDirt waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x10 0x0 0x112C + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x10, 0x0, 0x112C waitforvisualfinish end @@ -8337,36 +8337,36 @@ Move_FORESTS_CURSE: loadspritegfx ANIM_TAG_ROOTS @frenzy plant loadspritegfx ANIM_TAG_GHOSTLY_SPIRIT @curse monbg ANIM_ATTACKER - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x10 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x10, 0x0 waitforvisualfinish playsewithpan SE_M_SCRATCH, SOUND_PAN_ATTACKER - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x0 0x8 0x02E3 - launchtemplate gForestsCurseIngrainTemplate 0x42 0x7 0x64 0x64 0x8 0x1 0x14 0x28 0x0 - launchtemplate gForestsCurseIngrainTemplate 0x42 0x7 0x14 0x64 0x10 0x2 0xa 0x23 0x1 - launchtemplate gForestsCurseIngrainTemplate 0x42 0x7 0xc8 0x50 0x8 0x1 0x28 0x14 0x0 - launchtemplate gForestsCurseIngrainTemplate 0x42 0x7 0x50 0x3c 0xa 0x3 0x14 0x32 0x0 - launchtemplate gForestsCurseIngrainTemplate 0x42 0x7 0x8c 0x64 0x10 0x1 0x14 0x1e 0x1 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x2, 0x0, 0x8, 0x02E3 + createsprite gForestsCurseIngrainTemplate, ANIM_ATTACKER, 66, 0x64, 0x64, 0x8, 0x1, 0x14, 0x28, 0x0 + createsprite gForestsCurseIngrainTemplate, ANIM_ATTACKER, 66, 0x14, 0x64, 0x10, 0x2, 0xa, 0x23, 0x1 + createsprite gForestsCurseIngrainTemplate, ANIM_ATTACKER, 66, 0xc8, 0x50, 0x8, 0x1, 0x28, 0x14, 0x0 + createsprite gForestsCurseIngrainTemplate, ANIM_ATTACKER, 66, 0x50, 0x3c, 0xa, 0x3, 0x14, 0x32, 0x0 + createsprite gForestsCurseIngrainTemplate, ANIM_ATTACKER, 66, 0x8c, 0x64, 0x10, 0x1, 0x14, 0x1e, 0x1 waitforvisualfinish playsewithpan SE_M_SCRATCH, SOUND_PAN_ATTACKER - launchtemplate gForestsCurseIngrainTemplate 0x42 0x7 0x64 0x64 0x8 0x1 0x14 0x28 0x0 - launchtemplate gForestsCurseIngrainTemplate 0x42 0x7 0x14 0x64 0x10 0x2 0xa 0x23 0x1 - launchtemplate gForestsCurseIngrainTemplate 0x42 0x7 0xc8 0x50 0x8 0x1 0x28 0x14 0x0 - launchtemplate gForestsCurseIngrainTemplate 0x42 0x7 0x50 0x3c 0xa 0x3 0x14 0x32 0x0 - launchtemplate gForestsCurseIngrainTemplate 0x42 0x7 0x8c 0x64 0x10 0x1 0x14 0x1e 0x1 + createsprite gForestsCurseIngrainTemplate, ANIM_ATTACKER, 66, 0x64, 0x64, 0x8, 0x1, 0x14, 0x28, 0x0 + createsprite gForestsCurseIngrainTemplate, ANIM_ATTACKER, 66, 0x14, 0x64, 0x10, 0x2, 0xa, 0x23, 0x1 + createsprite gForestsCurseIngrainTemplate, ANIM_ATTACKER, 66, 0xc8, 0x50, 0x8, 0x1, 0x28, 0x14, 0x0 + createsprite gForestsCurseIngrainTemplate, ANIM_ATTACKER, 66, 0x50, 0x3c, 0xa, 0x3, 0x14, 0x32, 0x0 + createsprite gForestsCurseIngrainTemplate, ANIM_ATTACKER, 66, 0x8c, 0x64, 0x10, 0x1, 0x14, 0x1e, 0x1 waitforvisualfinish playsewithpan SE_M_SCRATCH, SOUND_PAN_ATTACKER - launchtemplate gForestsCurseIngrainTemplate 0x42 0x7 0x64 0x64 0x8 0x1 0x14 0x28 0x0 - launchtemplate gForestsCurseIngrainTemplate 0x42 0x7 0x14 0x64 0x10 0x2 0xa 0x23 0x1 - launchtemplate gForestsCurseIngrainTemplate 0x42 0x7 0xc8 0x50 0x8 0x1 0x28 0x14 0x0 - launchtemplate gForestsCurseIngrainTemplate 0x42 0x7 0x50 0x3c 0xa 0x3 0x14 0x32 0x0 - launchtemplate gForestsCurseIngrainTemplate 0x42 0x7 0x8c 0x64 0x10 0x1 0x14 0x1e 0x1 + createsprite gForestsCurseIngrainTemplate, ANIM_ATTACKER, 66, 0x64, 0x64, 0x8, 0x1, 0x14, 0x28, 0x0 + createsprite gForestsCurseIngrainTemplate, ANIM_ATTACKER, 66, 0x14, 0x64, 0x10, 0x2, 0xa, 0x23, 0x1 + createsprite gForestsCurseIngrainTemplate, ANIM_ATTACKER, 66, 0xc8, 0x50, 0x8, 0x1, 0x28, 0x14, 0x0 + createsprite gForestsCurseIngrainTemplate, ANIM_ATTACKER, 66, 0x50, 0x3c, 0xa, 0x3, 0x14, 0x32, 0x0 + createsprite gForestsCurseIngrainTemplate, ANIM_ATTACKER, 66, 0x8c, 0x64, 0x10, 0x1, 0x14, 0x1e, 0x1 waitforvisualfinish - launchtemplate gCurseGhostSpriteTemplate 0x82 0x0 - launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x2 0x0 0xe 0x1 + createsprite gCurseGhostSpriteTemplate, ANIM_TARGET, 2 + createvisualtask AnimTask_ShakeMon2, 0x2, 0x1, 0x2, 0x0, 0xe, 0x1 waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x8 0x0 0x02E3 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x2, 0x8, 0x0, 0x02E3 delay 0x3 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x10 0x0 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x10, 0x0, 0x0 waitforvisualfinish clearmonbg ANIM_ATTACKER end @@ -8383,35 +8383,35 @@ Move_PETAL_BLIZZARD:: createsprite gTwisterLeafSpriteTemplate, ANIM_TARGET, 2, 0x73, 0x37, 0x6, 0x3c, 0x19 delay 0x1 createsprite gTwisterLeafSpriteTemplate, ANIM_TARGET, 2, 0x73, 0x3c, 0x7, 0x3c, 0x1e - launchtemplate gPetalBlizzardTwister1Template 0x82 0x5 0x73 0x37 0xA 0x3c 0x1e + createsprite gPetalBlizzardTwister1Template, ANIM_TARGET, 2, 0x73, 0x37, 0xA, 0x3c, 0x1e delay 0x3 - launchtemplate gPetalBlizzardTwister1Template 0x82 0x5 0x64 0x32 0x4 0x32 0x1A + createsprite gPetalBlizzardTwister1Template, ANIM_TARGET, 2, 0x64, 0x32, 0x4, 0x32, 0x1A delay 0x1 - launchtemplate gPetalBlizzardTwister1Template 0x82 0x5 0x69 0x19 0x8 0x3c 0x14 + createsprite gPetalBlizzardTwister1Template, ANIM_TARGET, 2, 0x69, 0x19, 0x8, 0x3c, 0x14 delay 0x1 - launchtemplate gPetalBlizzardTwister1Template 0x82 0x5 0x73 0x28 0xA 0x30 0x1E + createsprite gPetalBlizzardTwister1Template, ANIM_TARGET, 2, 0x73, 0x28, 0xA, 0x30, 0x1E delay 0x3 - launchtemplate gPetalBlizzardTwister1Template 0x82 0x5 0x78 0x1E 0x6 0x2d 0x19 + createsprite gPetalBlizzardTwister1Template, ANIM_TARGET, 2, 0x78, 0x1E, 0x6, 0x2d, 0x19 createsprite gTwisterLeafSpriteTemplate, ANIM_TARGET, 2, 0x73, 0x23, 0xA, 0x3c, 0x1e delay 0x3 - launchtemplate gPetalBlizzardTwister2Template 0x82 0x5 0x69 0x14 0x8 0x28 0x0 + createsprite gPetalBlizzardTwister2Template, ANIM_TARGET, 2, 0x69, 0x14, 0x8, 0x28, 0x0 delay 0x3 createsprite gTwisterLeafSpriteTemplate, ANIM_TARGET, 2, 0x14, 0xff, 0xf, 0x20, 0x0 createsprite gTwisterLeafSpriteTemplate, ANIM_TARGET, 2, 0x6e, 0xA, 0x8, 0x20, 0x14 waitforvisualfinish - launchtemplate gBasicHitSplatSpriteTemplate 0x83 0x4 0xffe0 0xfff0 0x1 0x3 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0xffe0, 0xfff0, 0x1, 0x3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET - launchtask AnimTask_ShakeMonInPlace 0x2 0x5 ANIM_TARGET 0x3 0x0 0xC 0x1 - launchtask AnimTask_ShakeMonInPlace 0x2 0x5 ANIM_DEF_PARTNER 0x3 0x0 0xC 0x1 - launchtask AnimTask_ShakeMonInPlace 0x2 0x5 ANIM_ATK_PARTNER 0x3 0x0 0xC 0x1 + createvisualtask AnimTask_ShakeMonInPlace, 0x2, ANIM_TARGET, 0x3, 0x0, 0xC, 0x1 + createvisualtask AnimTask_ShakeMonInPlace, 0x2, ANIM_DEF_PARTNER, 0x3, 0x0, 0xC, 0x1 + createvisualtask AnimTask_ShakeMonInPlace, 0x2, ANIM_ATK_PARTNER, 0x3, 0x0, 0xC, 0x1 delay 0x4 - launchtemplate gRandomPosHitSplatSpriteTemplate 0x83 0x2 0x1 0x3 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x1, 0x3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 0x4 - launchtemplate gRandomPosHitSplatSpriteTemplate 0x83 0x2 0x1 0x3 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x1, 0x3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 0x4 - launchtemplate gBasicHitSplatSpriteTemplate 0x83 0x4 0x20 0x14 0x1 0x3 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x20, 0x14, 0x1, 0x3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET waitforvisualfinish clearmonbg ANIM_DEF_PARTNER @@ -8456,17 +8456,17 @@ Move_FREEZE_DRY:: Move_DISARMING_VOICE:: loadspritegfx ANIM_TAG_NOISE_LINE - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x8 0x6e7d + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x8, 0x6e7d waitforvisualfinish - launchtask SoundTask_PlayDoubleCry 0x2 0x2 0x0 0xff + createvisualtask SoundTask_PlayDoubleCry, 0x2, 0x0, 0xff call RoarEffect delay 0xA - launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x1 0x0 0x1A 0x1 - launchtask AnimTask_ShakeMon2 0x2 0x5 0x3 0x1 0x0 0x1A 0x1 + createvisualtask AnimTask_ShakeMon2, 0x2, 0x1, 0x1, 0x0, 0x1A, 0x1 + createvisualtask AnimTask_ShakeMon2, 0x2, 0x3, 0x1, 0x0, 0x1A, 0x1 waitforvisualfinish - launchtask SoundTask_WaitForCry 0x5 0x0 + createvisualtask SoundTask_WaitForCry, 0x5 waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x8 0x0 0x6e7d + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x8, 0x0, 0x6e7d waitforvisualfinish end @@ -8539,51 +8539,51 @@ Move_CRAFTY_SHIELD:: loadspritegfx ANIM_TAG_CRAFTY_SHIELD monbg ANIM_ATK_PARTNER splitbgprio ANIM_ATTACKER - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x5 0x4DBF - setblends 0x10 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x5, 0x4DBF + setalpha 16, 0 delay 0x0 playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER - launchtemplate gCraftyShieldPinkConversionTemplate 0x2 0x2 0xffe8 0xffe8 + createsprite gCraftyShieldPinkConversionTemplate, ANIM_ATTACKER, 2, 0xffe8, 0xffe8 delay 0x3 - launchtemplate gCraftyShieldPinkConversionTemplate 0x2 0x2 0xfff8 0xffe8 + createsprite gCraftyShieldPinkConversionTemplate, ANIM_ATTACKER, 2, 0xfff8, 0xffe8 delay 0x3 - launchtemplate gCraftyShieldPinkConversionTemplate 0x2 0x2 0x8 0xffe8 + createsprite gCraftyShieldPinkConversionTemplate, ANIM_ATTACKER, 2, 0x8, 0xffe8 delay 0x3 - launchtemplate gCraftyShieldPinkConversionTemplate 0x2 0x2 0x18 0xffe8 + createsprite gCraftyShieldPinkConversionTemplate, ANIM_ATTACKER, 2, 0x18, 0xffe8 delay 0x3 playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER - launchtemplate gCraftyShieldPinkConversionTemplate 0x2 0x2 0xffe8 0xfff8 + createsprite gCraftyShieldPinkConversionTemplate, ANIM_ATTACKER, 2, 0xffe8, 0xfff8 delay 0x3 - launchtemplate gCraftyShieldPinkConversionTemplate 0x2 0x2 0xfff8 0xfff8 + createsprite gCraftyShieldPinkConversionTemplate, ANIM_ATTACKER, 2, 0xfff8, 0xfff8 delay 0x3 - launchtemplate gCraftyShieldPinkConversionTemplate 0x2 0x2 0x8 0xfff8 + createsprite gCraftyShieldPinkConversionTemplate, ANIM_ATTACKER, 2, 0x8, 0xfff8 delay 0x3 - launchtemplate gCraftyShieldPinkConversionTemplate 0x2 0x2 0x18 0xfff8 + createsprite gCraftyShieldPinkConversionTemplate, ANIM_ATTACKER, 2, 0x18, 0xfff8 delay 0x3 playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER - launchtemplate gCraftyShieldPinkConversionTemplate 0x2 0x2 0xffe8 0x8 + createsprite gCraftyShieldPinkConversionTemplate, ANIM_ATTACKER, 2, 0xffe8, 0x8 delay 0x3 - launchtemplate gCraftyShieldPinkConversionTemplate 0x2 0x2 0xfff8 0x8 + createsprite gCraftyShieldPinkConversionTemplate, ANIM_ATTACKER, 2, 0xfff8, 0x8 delay 0x3 - launchtemplate gCraftyShieldPinkConversionTemplate 0x2 0x2 0x8 0x8 + createsprite gCraftyShieldPinkConversionTemplate, ANIM_ATTACKER, 2, 0x8, 0x8 delay 0x3 - launchtemplate gCraftyShieldPinkConversionTemplate 0x2 0x2 0x18 0x8 + createsprite gCraftyShieldPinkConversionTemplate, ANIM_ATTACKER, 2, 0x18, 0x8 delay 0x3 playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER - launchtemplate gCraftyShieldPinkConversionTemplate 0x2 0x2 0xffe8 0x18 + createsprite gCraftyShieldPinkConversionTemplate, ANIM_ATTACKER, 2, 0xffe8, 0x18 delay 0x3 - launchtemplate gCraftyShieldPinkConversionTemplate 0x2 0x2 0xfff8 0x18 + createsprite gCraftyShieldPinkConversionTemplate, ANIM_ATTACKER, 2, 0xfff8, 0x18 delay 0x3 - launchtemplate gCraftyShieldPinkConversionTemplate 0x2 0x2 0x8 0x18 + createsprite gCraftyShieldPinkConversionTemplate, ANIM_ATTACKER, 2, 0x8, 0x18 delay 0x3 - launchtemplate gCraftyShieldPinkConversionTemplate 0x2 0x2 0x18 0x18 + createsprite gCraftyShieldPinkConversionTemplate, ANIM_ATTACKER, 2, 0x18, 0x18 delay 0x14 playsewithpan SE_M_BARRIER, SOUND_PAN_ATTACKER - launchtask AnimTask_FlashAnimTagWithColor 0x2 0x7 0x2722 0x1 0x1 0x37ff 0xc 0x0 0x0 + createvisualtask AnimTask_FlashAnimTagWithColor, 0x2, 0x2722, 0x1, 0x1, 0x37ff, 0xc, 0x0, 0x0 delay 0x6 - launchtask AnimTask_ConversionAlphaBlend 0x5 0x0 + createvisualtask AnimTask_ConversionAlphaBlend, 0x5 waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x5 0x0 0x4DBF + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x5, 0x0, 0x4DBF waitforvisualfinish delay 0x1 clearmonbg ANIM_ATK_PARTNER @@ -8594,28 +8594,28 @@ Move_FLOWER_SHIELD:: loadspritegfx ANIM_TAG_FLOWER loadspritegfx ANIM_TAG_IMPACT setalpha 12, 8 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x8 0x6e7d + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x8, 0x6e7d waitforvisualfinish playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER - launchtemplate gPetalDanceBigFlowerSpriteTemplate 0x2 0x4 0x0 0xffe8 0x8 0x8c - launchtemplate gPetalDanceSmallFlowerSpriteTemplate 0x2 0x4 0x10 0xffe8 0x8 0x64 - launchtemplate gPetalDanceSmallFlowerSpriteTemplate 0x2 0x4 0xfff0 0xffe8 0x8 0x64 + createsprite gPetalDanceBigFlowerSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x8, 0x8c + createsprite gPetalDanceSmallFlowerSpriteTemplate, ANIM_ATTACKER, 2, 0x10, 0xffe8, 0x8, 0x64 + createsprite gPetalDanceSmallFlowerSpriteTemplate, ANIM_ATTACKER, 2, 0xfff0, 0xffe8, 0x8, 0x64 delay 0xf - launchtemplate gPetalDanceBigFlowerSpriteTemplate 0x2 0x4 0x0 0xffe8 0x8 0x8c - launchtemplate gPetalDanceSmallFlowerSpriteTemplate 0x2 0x4 0x20 0xffe8 0x8 0x64 - launchtemplate gPetalDanceSmallFlowerSpriteTemplate 0x2 0x4 0xffe0 0xffe8 0x8 0x64 + createsprite gPetalDanceBigFlowerSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x8, 0x8c + createsprite gPetalDanceSmallFlowerSpriteTemplate, ANIM_ATTACKER, 2, 0x20, 0xffe8, 0x8, 0x64 + createsprite gPetalDanceSmallFlowerSpriteTemplate, ANIM_ATTACKER, 2, 0xffe0, 0xffe8, 0x8, 0x64 delay 0xf - launchtemplate gPetalDanceBigFlowerSpriteTemplate 0x2 0x4 0x0 0xffe8 0x8 0x8c - launchtemplate gPetalDanceSmallFlowerSpriteTemplate 0x2 0x4 0x18 0xffe8 0x8 0x64 - launchtemplate gPetalDanceSmallFlowerSpriteTemplate 0x2 0x4 0xffe8 0xffe8 0x8 0x64 + createsprite gPetalDanceBigFlowerSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x8, 0x8c + createsprite gPetalDanceSmallFlowerSpriteTemplate, ANIM_ATTACKER, 2, 0x18, 0xffe8, 0x8, 0x64 + createsprite gPetalDanceSmallFlowerSpriteTemplate, ANIM_ATTACKER, 2, 0xffe8, 0xffe8, 0x8, 0x64 delay 0x1e - launchtemplate gPetalDanceSmallFlowerSpriteTemplate 0x2 0x4 0x10 0xffe8 0x0 0x64 - launchtemplate gPetalDanceSmallFlowerSpriteTemplate 0x2 0x4 0xfff0 0xffe8 0x0 0x64 + createsprite gPetalDanceSmallFlowerSpriteTemplate, ANIM_ATTACKER, 2, 0x10, 0xffe8, 0x0, 0x64 + createsprite gPetalDanceSmallFlowerSpriteTemplate, ANIM_ATTACKER, 2, 0xfff0, 0xffe8, 0x0, 0x64 delay 0x1e - launchtemplate gPetalDanceSmallFlowerSpriteTemplate 0x2 0x4 0x14 0xfff0 0xe 0x50 - launchtemplate gPetalDanceSmallFlowerSpriteTemplate 0x2 0x4 0xffec 0xfff2 0x10 0x50 + createsprite gPetalDanceSmallFlowerSpriteTemplate, ANIM_ATTACKER, 2, 0x14, 0xfff0, 0xe, 0x50 + createsprite gPetalDanceSmallFlowerSpriteTemplate, ANIM_ATTACKER, 2, 0xffec, 0xfff2, 0x10, 0x50 waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x8 0x0 0x6e7d + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x8, 0x0, 0x6e7d waitforvisualfinish blendoff end @@ -8637,7 +8637,7 @@ Move_GRASSY_TERRAIN:: createsprite gGrassyTerrainOrbsTemplate, ANIM_ATTACKER, 2, 26, 126 createsprite gGrassyTerrainOrbsTemplate, ANIM_ATTACKER, 2, 26, 168 createsprite gGrassyTerrainOrbsTemplate, ANIM_ATTACKER, 2, 26, 210 - createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_BG, 3, 0, 4, RGB(11, 26, 11) + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 3, 0, 4, RGB(11, 26, 11) delay 52 setarg 7, 0xFFFF playsewithpan SE_M_HEAL_BELL, SOUND_PAN_ATTACKER @@ -8653,7 +8653,7 @@ Move_GRASSY_TERRAIN:: panse_adjustnone SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +1, 0x0 waitforvisualfinish delay 4 - createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_BG, 3, 4, 0, RGB(31, 24, 31) + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 3, 4, 0, RGB(31, 24, 31) waitforvisualfinish end @@ -8675,7 +8675,7 @@ Move_MISTY_TERRAIN:: createsprite gMistyTerrainOrbsTemplate, ANIM_ATTACKER, 2, 26, 126 createsprite gMistyTerrainOrbsTemplate, ANIM_ATTACKER, 2, 26, 168 createsprite gMistyTerrainOrbsTemplate, ANIM_ATTACKER, 2, 26, 210 - createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_BG, 3, 0, 7, RGB(31, 24, 31) + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 3, 0, 7, RGB(31, 24, 31) delay 52 setarg 7, 0xFFFF playsewithpan SE_M_ATTRACT, SOUND_PAN_ATTACKER @@ -8691,7 +8691,7 @@ Move_MISTY_TERRAIN:: createsprite gMistyTerrainStarTemplate, ANIM_TARGET, 2, 224 waitforvisualfinish delay 4 - createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_BG, 3, 7, 0, RGB(31, 24, 31) + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 3, 7, 0, RGB(31, 24, 31) waitforvisualfinish end @@ -8703,57 +8703,57 @@ Move_ELECTRIFY:: loadspritegfx ANIM_TAG_THIN_RING @ring monbg ANIM_ATTACKER loopsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_TARGET 0xa 0x4 - launchtemplate gElectrifyRingTemplate 0x2 0x0 - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0 - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0 - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1 + createsprite gElectrifyRingTemplate, ANIM_ATTACKER, 2 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0x20, 0x18, 0xbe, 0xc, 0x0, 0x1, 0x0 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0x50, 0x18, 0x16, 0xc, 0x0, 0x1, 0x0 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0x9c, 0x18, 0x79, 0xd, 0x0, 0x1, 0x1 delay 0x4 - launchtemplate gElectrifyRingTemplate 0x2 0x0 + createsprite gElectrifyRingTemplate, ANIM_ATTACKER, 2 delay 0x4 - launchtemplate gElectrifyRingTemplate 0x2 0x0 - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0 - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1 - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1 + createsprite gElectrifyRingTemplate, ANIM_ATTACKER, 2 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0x64, 0x18, 0x3c, 0xa, 0x0, 0x1, 0x0 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0xaa, 0x18, 0x2a, 0xb, 0x0, 0x1, 0x1 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0xee, 0x18, 0xa5, 0xa, 0x0, 0x1, 0x1 waitforvisualfinish playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_ATTACKER - launchtemplate gZapCannonSparkSpriteTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x0 0x28 0x0 - launchtemplate gZapCannonSparkSpriteTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x40 0x28 0x1 - launchtemplate gZapCannonSparkSpriteTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x80 0x28 0x0 - launchtemplate gZapCannonSparkSpriteTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0 0x28 0x2 - launchtemplate gZapCannonSparkSpriteTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x20 0x28 0x0 - launchtemplate gZapCannonSparkSpriteTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x60 0x28 0x1 - launchtemplate gZapCannonSparkSpriteTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0xa0 0x28 0x0 - launchtemplate gZapCannonSparkSpriteTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0xe0 0x28 0x2 + createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x10, 0x1e, 0x0, 0x28, 0x0 + createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x10, 0x1e, 0x40, 0x28, 0x1 + createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x10, 0x1e, 0x80, 0x28, 0x0 + createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x10, 0x1e, 0, 0x28, 0x2 + createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x8, 0x1e, 0x20, 0x28, 0x0 + createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x8, 0x1e, 0x60, 0x28, 0x1 + createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x8, 0x1e, 0xa0, 0x28, 0x0 + createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x8, 0x1e, 0xe0, 0x28, 0x2 delay 0xA - launchtask AnimTask_BlendBattleAnimPal 0xA 0x5 ANIM_PAL_DEF 0x2 0x0 0xB 0x039B - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x3 0x039B + createvisualtask AnimTask_BlendBattleAnimPal, 0xA, F_PAL_TARGET, 0x2, 0x0, 0xB, 0x039B + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x3, 0x039B delay 0x4 clearmonbg ANIM_ATTACKER delay 0x1 monbg ANIM_DEF_PARTNER playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_TARGET - launchtemplate gElectrifyYellowRingTemplate 0x3 0x6 0x0 0x0 0x1 0x0 0x1f 0x8 - launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_TARGET 0x4 0x0 0x6 0x1 - launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0x5 0x0 0x5 0x0 + createsprite gElectrifyYellowRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x1, 0x0, 0x1f, 0x8 + createvisualtask AnimTask_ShakeMon, 0x5, ANIM_TARGET, 0x4, 0x0, 0x6, 0x1 + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 0x5, 0x0, 0x5, 0x0 delay 0x1 - launchtemplate gElectrifyYellowRingTemplate 0x3 0x6 0x0 0x0 0x1 0x0 0x1f 0x8 + createsprite gElectrifyYellowRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x1, 0x0, 0x1f, 0x8 delay 0x1 - launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0xfffb 0xa 0x5 0x1 - launchtemplate gElectrifyYellowRingTemplate 0x3 0x6 0x0 0x0 0x1 0x0 0x1f 0x8 + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 0xfffb, 0xa, 0x5, 0x1 + createsprite gElectrifyYellowRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x1, 0x0, 0x1f, 0x8 delay 0x1 - launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0xf 0x14 0x5 0x2 - launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0xfff1 0xfff6 0x5 0x0 + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 0xf, 0x14, 0x5, 0x2 + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 0xfff1, 0xfff6, 0x5, 0x0 delay 0x2 - launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0x19 0x0 0x5 0x1 + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 0x19, 0x0, 0x5, 0x1 delay 0x2 - launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0xfff8 0x8 0x5 0x2 + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 0xfff8, 0x8, 0x5, 0x2 delay 0x2 - launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0x2 0xfff8 0x5 0x0 + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 0x2, 0xfff8, 0x5, 0x0 delay 0x2 - launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0xffec 0xf 0x5 0x1 + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 0xffec, 0xf, 0x5, 0x1 waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xA 0x5 ANIM_PAL_DEF 0x2 0xB 0x0 0x039B - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x3 0x0 0x039B + createvisualtask AnimTask_BlendBattleAnimPal, 0xA, F_PAL_TARGET, 0x2, 0xB, 0x0, 0x039B + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x3, 0x0, 0x039B waitforvisualfinish clearmonbg ANIM_DEF_PARTNER end @@ -8774,36 +8774,36 @@ Move_PLAY_ROUGH:: waitplaysewithpan SE_M_FLAMETHROWER, SOUND_PAN_TARGET, 0x46 waitplaysewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER, 0x50 waitplaysewithpan SE_M_FLAMETHROWER, SOUND_PAN_TARGET, 0x5a - launchtask AnimTask_TranslateMonElliptical 0x2 0x5 0x0 0xffee 0x6 0x6 0x4 - launchtask AnimTask_TranslateMonElliptical 0x2 0x5 0x1 0x12 0x6 0x6 0x4 - launchtemplate gPinkHeartSpriteTemplate 0x83 0x2 0xff00 0xffd6 - launchtemplate gPinkHeartSpriteTemplate 0x83 0x2 0x80 0xfff2 - launchtemplate gPinkHeartSpriteTemplate 0x83 0x2 0x1a0 0xffda - launchtemplate gPinkHeartSpriteTemplate 0x83 0x2 0xff80 0xffea + createvisualtask AnimTask_TranslateMonElliptical, 0x2, 0x0, 0xffee, 0x6, 0x6, 0x4 + createvisualtask AnimTask_TranslateMonElliptical, 0x2, 0x1, 0x12, 0x6, 0x6, 0x4 + createsprite gPinkHeartSpriteTemplate, ANIM_TARGET, 3, 0xff00, 0xffd6 + createsprite gPinkHeartSpriteTemplate, ANIM_TARGET, 3, 0x80, 0xfff2 + createsprite gPinkHeartSpriteTemplate, ANIM_TARGET, 3, 0x1a0, 0xffda + createsprite gPinkHeartSpriteTemplate, ANIM_TARGET, 3, 0xff80, 0xffea delay 0x0 call SubmissionHit playsewithpan SE_M_FLAMETHROWER, SOUND_PAN_TARGET - launchtemplate gDizzyPunchDuckSpriteTemplate 0x83 0x4 0x10 0x8 0xa0 0xffe0 - launchtemplate gDizzyPunchDuckSpriteTemplate 0x83 0x4 0x10 0x8 0xff00 0xffd8 - launchtemplate gDizzyPunchDuckSpriteTemplate 0x83 0x4 0x10 0x8 0x80 0xfff0 - launchtemplate gDizzyPunchDuckSpriteTemplate 0x83 0x4 0x10 0x8 0x1a0 0xffda - launchtemplate gDizzyPunchDuckSpriteTemplate 0x83 0x4 0x10 0x8 0xff80 0xffea - launchtemplate gDizzyPunchDuckSpriteTemplate 0x83 0x4 0x10 0x8 0xfe80 0xffe1 + createsprite gDizzyPunchDuckSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x8, 0xa0, 0xffe0 + createsprite gDizzyPunchDuckSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x8, 0xff00, 0xffd8 + createsprite gDizzyPunchDuckSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x8, 0x80, 0xfff0 + createsprite gDizzyPunchDuckSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x8, 0x1a0, 0xffda + createsprite gDizzyPunchDuckSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x8, 0xff80, 0xffea + createsprite gDizzyPunchDuckSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x8, 0xfe80, 0xffe1 delay 0x0 call SubmissionHit playsewithpan SE_M_DIVE, SOUND_PAN_TARGET - launchtemplate gPinkHeartSpriteTemplate 0x83 0x2 0xff00 0xffd6 - launchtemplate gPinkHeartSpriteTemplate 0x83 0x2 0x80 0xfff2 - launchtemplate gPinkHeartSpriteTemplate 0x83 0x2 0x1a0 0xffda - launchtemplate gPinkHeartSpriteTemplate 0x83 0x2 0xff80 0xffea + createsprite gPinkHeartSpriteTemplate, ANIM_TARGET, 3, 0xff00, 0xffd6 + createsprite gPinkHeartSpriteTemplate, ANIM_TARGET, 3, 0x80, 0xfff2 + createsprite gPinkHeartSpriteTemplate, ANIM_TARGET, 3, 0x1a0, 0xffda + createsprite gPinkHeartSpriteTemplate, ANIM_TARGET, 3, 0xff80, 0xffea delay 0x0 playsewithpan SE_M_FLAMETHROWER, SOUND_PAN_TARGET - launchtemplate gDizzyPunchDuckSpriteTemplate 0x83 0x4 0x10 0x8 0xa0 0xffe0 - launchtemplate gDizzyPunchDuckSpriteTemplate 0x83 0x4 0x10 0x8 0xff00 0xffd8 - launchtemplate gDizzyPunchDuckSpriteTemplate 0x83 0x4 0x10 0x8 0x80 0xfff0 - launchtemplate gDizzyPunchDuckSpriteTemplate 0x83 0x4 0x10 0x8 0x1a0 0xffda - launchtemplate gDizzyPunchDuckSpriteTemplate 0x83 0x4 0x10 0x8 0xff80 0xffea - launchtemplate gDizzyPunchDuckSpriteTemplate 0x83 0x4 0x10 0x8 0xfe80 0xffe1 + createsprite gDizzyPunchDuckSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x8, 0xa0, 0xffe0 + createsprite gDizzyPunchDuckSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x8, 0xff00, 0xffd8 + createsprite gDizzyPunchDuckSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x8, 0x80, 0xfff0 + createsprite gDizzyPunchDuckSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x8, 0x1a0, 0xffda + createsprite gDizzyPunchDuckSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x8, 0xff80, 0xffea + createsprite gDizzyPunchDuckSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x8, 0xfe80, 0xffe1 delay 0x0 call SubmissionHit waitforvisualfinish @@ -8818,24 +8818,24 @@ Move_FAIRY_WIND:: loadspritegfx ANIM_TAG_PINK_CLOUD monbg ANIM_DEF_PARTNER setalpha 12, 8 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x8 0x6e7d + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x8, 0x6e7d waitforvisualfinish playsewithpan SE_M_GUST, SOUND_PAN_TARGET - launchtemplate gFairyWindCloudTemplate 0x83 0x7 0x14 0xfff6 0x14 0x0 0x16 0x14 0x1 + createsprite gFairyWindCloudTemplate, ANIM_TARGET, 3, 0x14, 0xfff6, 0x14, 0x0, 0x16, 0x14, 0x1 delay 0x5 - launchtemplate gFairyWindCloudTemplate 0x83 0x7 0x14 0xfff6 0x14 0x5 0x16 0xffee 0x1 + createsprite gFairyWindCloudTemplate, ANIM_TARGET, 3, 0x14, 0xfff6, 0x14, 0x5, 0x16, 0xffee, 0x1 delay 0x5 - launchtemplate gFairyWindCloudTemplate 0x83 0x7 0x14 0xfff6 0x14 0xfff6 0x16 0xf 0x1 - launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x2 0x0 0x12 0x1 + createsprite gFairyWindCloudTemplate, ANIM_TARGET, 3, 0x14, 0xfff6, 0x14, 0xfff6, 0x16, 0xf, 0x1 + createvisualtask AnimTask_ShakeMon2, 0x2, 0x1, 0x2, 0x0, 0x12, 0x1 delay 0x5 - launchtemplate gFairyWindCloudTemplate 0x83 0x7 0x14 0xfff6 0x14 0x0 0x16 0xffec 0x1 + createsprite gFairyWindCloudTemplate, ANIM_TARGET, 3, 0x14, 0xfff6, 0x14, 0x0, 0x16, 0xffec, 0x1 delay 0x5 - launchtemplate gFairyWindCloudTemplate 0x83 0x7 0x14 0xfff6 0x14 0x0 0x16 0xc 0x1 + createsprite gFairyWindCloudTemplate, ANIM_TARGET, 3, 0x14, 0xfff6, 0x14, 0x0, 0x16, 0xc, 0x1 delay 0x5 waitforvisualfinish stopsound playsewithpan SE_M_GUST2, SOUND_PAN_TARGET - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x8 0x0 0x6e7d + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x8, 0x0, 0x6e7d waitforvisualfinish clearmonbg ANIM_DEF_PARTNER blendoff @@ -8920,18 +8920,18 @@ Move_FAIRY_LOCK:: loadspritegfx ANIM_TAG_FAIRY_LOCK_CHAINS @Fairy Lock Chain setalpha 8, 8 monbg ANIM_ATK_PARTNER - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x8 0x6B1F + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x8, 0x6B1F waitforvisualfinish loopsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET, 0x6, 0x4 - launchtask AnimTask_VoltTackleBolt 0x5 0x1 0x7 - launchtask AnimTask_VoltTackleBolt 0x5 0x1 0x33 - launchtask AnimTask_VoltTackleBolt 0x5 0x1 0x2 + createvisualtask AnimTask_VoltTackleBolt, 0x5, 0x7 + createvisualtask AnimTask_VoltTackleBolt, 0x5, 0x33 + createvisualtask AnimTask_VoltTackleBolt, 0x5, 0x2 waitforvisualfinish - launchtask AnimTask_VoltTackleBolt 0x5 0x1 0x32 - launchtask AnimTask_VoltTackleBolt 0x5 0x1 0x6 - launchtask AnimTask_VoltTackleBolt 0x5 0x1 0x35 + createvisualtask AnimTask_VoltTackleBolt, 0x5, 0x32 + createvisualtask AnimTask_VoltTackleBolt, 0x5, 0x6 + createvisualtask AnimTask_VoltTackleBolt, 0x5, 0x35 waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x8 0x0 0x6B1F + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x8, 0x0, 0x6B1F waitforvisualfinish clearmonbg ANIM_ATK_PARTNER blendoff @@ -8945,15 +8945,15 @@ Move_KINGS_SHIELD:: Move_PLAY_NICE:: loadspritegfx ANIM_TAG_RED_HEART loopsewithpan SE_M_SANDSTORM, SOUND_PAN_ATTACKER, 0xc, 0x3 - launchtask AnimTask_SwayMon 0x5 0x5 0x0 0xc 0x1000 0x4 0x0 + createvisualtask AnimTask_SwayMon, 0x5, 0x0, 0xc, 0x1000, 0x4, 0x0 delay 0xF - launchtemplate gRedHeartProjectileSpriteTemplate 0x83 0x2 0x14 0xfff8 + createsprite gRedHeartProjectileSpriteTemplate, ANIM_TARGET, 3, 0x14, 0xfff8 end Move_CONFIDE:: loadspritegfx ANIM_TAG_CONFIDE @Confide Bubble - launchtask AnimTask_Splash 0x2 0x2 ANIM_ATTACKER 0x3 - launchtemplate gConfideBubbleTemplate 0xb 0x2 0x0 0x64 + createvisualtask AnimTask_Splash, 0x2, ANIM_ATTACKER, 0x3 + createsprite gConfideBubbleTemplate, ANIM_ATTACKER, 11, 0x0, 0x64 playsewithpan SE_M_METRONOME, SOUND_PAN_ATTACKER waitforvisualfinish end @@ -8963,69 +8963,69 @@ Move_DIAMOND_STORM:: loadspritegfx ANIM_TAG_ICE_CRYSTALS monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xF 0x1888 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xF, 0x1888 createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ICE_CRYSTALS, 0, 0xD, 0xD, 0x7DDE @Pink waitforvisualfinish panse SE_M_BLIZZARD, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0 - launchtemplate gSwirlingSnowballSpriteTemplate 0x28 0x6 0x0 0xfff6 0x0 0xfff6 0x48 0x1 - launchtemplate gDiamondStormBlizzardTemplate 0x28 0x8 0x0 0x0 0x0 0x0 0x50 0x0 0x0 0x1 + createsprite gSwirlingSnowballSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0xfff6, 0x0, 0xfff6, 0x48, 0x1 + createsprite gDiamondStormBlizzardTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0, 0x50, 0x0, 0x0, 0x1 delay 0x3 - launchtemplate gSwirlingSnowballSpriteTemplate 0x28 0x6 0x0 0xfff1 0x0 0xfff1 0x48 0x1 - launchtemplate gDiamondStormBlizzardTemplate 0x28 0x8 0x0 0xfff6 0x0 0xfff6 0x50 0x0 0x0 0x1 + createsprite gSwirlingSnowballSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0xfff1, 0x0, 0xfff1, 0x48, 0x1 + createsprite gDiamondStormBlizzardTemplate, ANIM_ATTACKER, 40, 0x0, 0xfff6, 0x0, 0xfff6, 0x50, 0x0, 0x0, 0x1 delay 0x3 - launchtemplate gSwirlingSnowballSpriteTemplate 0x28 0x6 0x0 0xfffb 0x0 0xfffb 0x48 0x1 - launchtemplate gDiamondStormBlizzardTemplate 0x28 0x8 0x0 0xa 0x0 0xa 0x50 0x0 0x0 0x1 + createsprite gSwirlingSnowballSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0xfffb, 0x0, 0xfffb, 0x48, 0x1 + createsprite gDiamondStormBlizzardTemplate, ANIM_ATTACKER, 40, 0x0, 0xa, 0x0, 0xa, 0x50, 0x0, 0x0, 0x1 delay 0x3 - launchtemplate gSwirlingSnowballSpriteTemplate 0x28 0x6 0x0 0xfff6 0x0 0xfff6 0x48 0x1 - launchtemplate gDiamondStormBlizzardTemplate 0x28 0x8 0x0 0xffec 0x0 0xffec 0x50 0x0 0x0 0x1 + createsprite gSwirlingSnowballSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0xfff6, 0x0, 0xfff6, 0x48, 0x1 + createsprite gDiamondStormBlizzardTemplate, ANIM_ATTACKER, 40, 0x0, 0xffec, 0x0, 0xffec, 0x50, 0x0, 0x0, 0x1 delay 0x3 - launchtemplate gSwirlingSnowballSpriteTemplate 0x28 0x6 0x0 0xffec 0x0 0xffec 0x48 0x1 - launchtemplate gDiamondStormBlizzardTemplate 0x28 0x8 0x0 0xf 0x0 0xf 0x50 0x0 0x0 0x1 + createsprite gSwirlingSnowballSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0xffec, 0x0, 0xffec, 0x48, 0x1 + createsprite gDiamondStormBlizzardTemplate, ANIM_ATTACKER, 40, 0x0, 0xf, 0x0, 0xf, 0x50, 0x0, 0x0, 0x1 delay 0x3 - launchtemplate gSwirlingSnowballSpriteTemplate 0x28 0x6 0x0 0xfff1 0x0 0xfff1 0x48 0x1 - launchtemplate gDiamondStormBlizzardTemplate 0x28 0x8 0x0 0xffec 0x0 0xffec 0x50 0x0 0x0 0x1 + createsprite gSwirlingSnowballSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0xfff1, 0x0, 0xfff1, 0x48, 0x1 + createsprite gDiamondStormBlizzardTemplate, ANIM_ATTACKER, 40, 0x0, 0xffec, 0x0, 0xffec, 0x50, 0x0, 0x0, 0x1 delay 0x3 - launchtemplate gSwirlingSnowballSpriteTemplate 0x28 0x6 0x0 0xffe7 0x0 0xffe7 0x48 0x1 - launchtemplate gDiamondStormBlizzardTemplate 0x28 0x8 0x0 0x14 0x0 0x14 0x50 0x0 0x0 0x1 + createsprite gSwirlingSnowballSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0xffe7, 0x0, 0xffe7, 0x48, 0x1 + createsprite gDiamondStormBlizzardTemplate, ANIM_ATTACKER, 40, 0x0, 0x14, 0x0, 0x14, 0x50, 0x0, 0x0, 0x1 delay 0x3 playsewithpan SE_M_TWISTER, SOUND_PAN_TARGET - launchtemplate gDiamondStormDiamondsTemplate 0x82 0x5 0x78 0x46 0x5 0x46 0x1e + createsprite gDiamondStormDiamondsTemplate, ANIM_TARGET, 2, 0x78, 0x46, 0x5, 0x46, 0x1e delay 0x1 - launchtemplate gDiamondStormDiamondsTemplate 0x82 0x5 0x73 0x37 0x6 0x3c 0x19 + createsprite gDiamondStormDiamondsTemplate, ANIM_TARGET, 2, 0x73, 0x37, 0x6, 0x3c, 0x19 delay 0x1 - launchtemplate gDiamondStormDiamondsTemplate 0x82 0x5 0x73 0x3c 0x7 0x3c 0x1e - launchtemplate gDiamondStormDiamondsTemplate 0x82 0x5 0x73 0x37 0xa 0x3c 0x1e + createsprite gDiamondStormDiamondsTemplate, ANIM_TARGET, 2, 0x73, 0x3c, 0x7, 0x3c, 0x1e + createsprite gDiamondStormDiamondsTemplate, ANIM_TARGET, 2, 0x73, 0x37, 0xa, 0x3c, 0x1e delay 0x3 - launchtemplate gDiamondStormDiamondsTemplate 0x82 0x5 0x64 0x32 0x4 0x32 0x1a + createsprite gDiamondStormDiamondsTemplate, ANIM_TARGET, 2, 0x64, 0x32, 0x4, 0x32, 0x1a delay 0x1 - launchtemplate gDiamondStormDiamondsTemplate 0x82 0x5 0x69 0x19 0x8 0x3c 0x14 + createsprite gDiamondStormDiamondsTemplate, ANIM_TARGET, 2, 0x69, 0x19, 0x8, 0x3c, 0x14 delay 0x1 - launchtemplate gDiamondStormDiamondsTemplate 0x82 0x5 0x73 0x28 0xa 0x30 0x1e + createsprite gDiamondStormDiamondsTemplate, ANIM_TARGET, 2, 0x73, 0x28, 0xa, 0x30, 0x1e delay 0x3 - launchtemplate gDiamondStormDiamondsTemplate 0x82 0x5 0x78 0x1e 0x6 0x2d 0x19 - launchtemplate gDiamondStormDiamondsTemplate 0x82 0x5 0x73 0x23 0xa 0x3c 0x1e + createsprite gDiamondStormDiamondsTemplate, ANIM_TARGET, 2, 0x78, 0x1e, 0x6, 0x2d, 0x19 + createsprite gDiamondStormDiamondsTemplate, ANIM_TARGET, 2, 0x73, 0x23, 0xa, 0x3c, 0x1e delay 0x3 - launchtemplate gDiamondStormDiamondsTemplate 0x82 0x5 0x69 0x14 0x8 0x28 0x0 + createsprite gDiamondStormDiamondsTemplate, ANIM_TARGET, 2, 0x69, 0x14, 0x8, 0x28, 0x0 delay 0x3 - launchtemplate gDiamondStormDiamondsTemplate 0x82 0x5 0x14 0xff 0xf 0x20 0x0 - launchtemplate gDiamondStormDiamondsTemplate 0x82 0x5 0x6e 0xa 0x8 0x20 0x14 + createsprite gDiamondStormDiamondsTemplate, ANIM_TARGET, 2, 0x14, 0xff, 0xf, 0x20, 0x0 + createsprite gDiamondStormDiamondsTemplate, ANIM_TARGET, 2, 0x6e, 0xa, 0x8, 0x20, 0x14 waitforvisualfinish @this is the buffet part - launchtemplate gBasicHitSplatSpriteTemplate 0x83 0x4 0xffe0 0xfff0 0x1 0x3 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0xffe0, 0xfff0, 0x1, 0x3 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET - launchtask AnimTask_ShakeMonInPlace 0x2 0x5 0x1 0x3 0x0 0xc 0x1 - launchtask AnimTask_ShakeMonInPlace 0x2 0x5 0x3 0x3 0x0 0xc 0x1 + createvisualtask AnimTask_ShakeMonInPlace, 0x2, 0x1, 0x3, 0x0, 0xc, 0x1 + createvisualtask AnimTask_ShakeMonInPlace, 0x2, 0x3, 0x3, 0x0, 0xc, 0x1 delay 0x4 - launchtemplate gRandomPosHitSplatSpriteTemplate 0x83 0x2 0x1 0x3 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x1, 0x3 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET delay 0x4 - launchtemplate gRandomPosHitSplatSpriteTemplate 0x83 0x2 0x1 0x3 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x1, 0x3 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET delay 0x4 - launchtemplate gBasicHitSplatSpriteTemplate 0x83 0x4 0x20 0x14 0x1 0x3 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x20, 0x14, 0x1, 0x3 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xF 0x0 0x1888 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xF, 0x0, 0x1888 waitforvisualfinish clearmonbg ANIM_DEF_PARTNER blendoff @@ -9033,17 +9033,17 @@ Move_DIAMOND_STORM:: Move_STEAM_ERUPTION:: loadspritegfx ANIM_TAG_STEAM_ERUPTION @Steam Eruption Particle - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x7 0x043D + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x7, 0x043D delay 0x20 monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET panse SE_M_HYDRO_PUMP, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0 call SteamEruptionBreath call SteamEruptionBreath - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x1 0x0 0x9 0x1f + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x1, 0x0, 0x9, 0x1f call SteamEruptionBreath delay 0x2 - launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x2 0x0 0x15 0x1 + createvisualtask AnimTask_ShakeMon2, 0x2, 0x1, 0x2, 0x0, 0x15, 0x1 call SteamEruptionBreath call SteamEruptionBreath call SteamEruptionBreath @@ -9060,14 +9060,14 @@ Move_STEAM_ERUPTION:: call SteamEruptionBreath call SteamEruptionBreath call SteamEruptionBreath - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x1 0x9 0x0 0x1f + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x1, 0x9, 0x0, 0x1f waitforvisualfinish clearmonbg ANIM_DEF_PARTNER - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x7 0x0 0x043D + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x7, 0x0, 0x043D waitforvisualfinish end SteamEruptionBreath: - launchtemplate gSteamEruptionBreathTemplate 0x82 0x5 0x0 0x5 0x0 0x5 0x14 + createsprite gSteamEruptionBreathTemplate, ANIM_TARGET, 2, 0x0, 0x5, 0x0, 0x5, 0x14 delay 0x1 return @@ -9076,7 +9076,7 @@ Move_HYPERSPACE_HOLE:: loadspritegfx ANIM_TAG_WHITE_SHADOW @Destiny Bond loadspritegfx ANIM_TAG_QUICK_GUARD_HAND @Black Colour loadspritegfx ANIM_TAG_POISON_BUBBLE @Poison Colour - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x10 0x7FFF + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x10, 0x7FFF waitforvisualfinish playsewithpan SE_M_FAINT_ATTACK, SOUND_PAN_ATTACKER invisible ANIM_ATTACKER @@ -9089,21 +9089,21 @@ Move_HYPERSPACE_HOLE:: delay 0x1 invisible ANIM_ATTACKER waitsound - launchtask AnimTask_DestinyBondWhiteShadow 0x5 0x2 0x0 0x30 + createvisualtask AnimTask_DestinyBondWhiteShadow, 0x5, 0x0, 0x30 delay 0x17 - launchtask AnimTask_IsTargetSameSide 0x2 0x0 - launchtask AnimTask_SnatchOpposingMonMove 0x2 0x0 + createvisualtask AnimTask_IsTargetSameSide, 0x2 + createvisualtask AnimTask_SnatchOpposingMonMove, 0x2 delay 0x19 visible ANIM_ATTACKER invisible ANIM_ATTACKER delay 0x5 - launchtemplate gHyperspaceHoleImpactTemplate 0x82, 0x3, 0xfff6 0xfff6 0x0 + createsprite gHyperspaceHoleImpactTemplate, ANIM_TARGET, 2, 0xfff6, 0xfff6, 0x0 call HyperspaceHoleMovement - launchtemplate gHyperspaceHoleImpactTemplate 0x82, 0x3, 0xa 0x14 0x0 + createsprite gHyperspaceHoleImpactTemplate, ANIM_TARGET, 2, 0xa, 0x14, 0x0 call HyperspaceHoleMovement - launchtemplate gHyperspaceHoleImpactTemplate 0x82, 0x3, 0xfffb 0xa 0x0 + createsprite gHyperspaceHoleImpactTemplate, ANIM_TARGET, 2, 0xfffb, 0xa, 0x0 call HyperspaceHoleMovement - launchtemplate gHyperspaceHoleImpactTemplate 0x82, 0x3, 0x11 0xfff4 0x0 + createsprite gHyperspaceHoleImpactTemplate, ANIM_TARGET, 2, 0x11, 0xfff4, 0x0 call HyperspaceHoleMovement waitforvisualfinish visible ANIM_ATTACKER @@ -9115,12 +9115,12 @@ Move_HYPERSPACE_HOLE:: invisible ANIM_ATTACKER delay 0x1 visible ANIM_ATTACKER - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x10 0x0 0x7FFF + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x10, 0x0, 0x7FFF waitforvisualfinish end HyperspaceHoleMovement: playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET - launchtask AnimTask_ShakeMon2 0x2 0x5 ANIM_TARGET 0x3 0x0 0xf 0x1 + createvisualtask AnimTask_ShakeMon2, 0x2, ANIM_TARGET, 0x3, 0x0, 0xf, 0x1 delay 0x4 return @@ -9133,16 +9133,16 @@ Move_WATER_SHURIKEN:: monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET createsoundtask SoundTask_LoopSEAdjustPanning, 0x7, 0x87, 0xffc0, SOUND_PAN_TARGET, 0x5, 0x5, 0x0, 0x5 - launchtemplate gWaterShurikenStarTemplate 0x82, 0x3, 0x0 0x0 0x27 + createsprite gWaterShurikenStarTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x27 delay 0x8 - launchtemplate gWaterShurikenRingTemplate 0x82, 0x4, 0x0 0x0 0x28 0xf + createsprite gWaterShurikenRingTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x28, 0xf delay 0x5 - launchtemplate gWaterShurikenRingTemplate 0x82, 0x4, 0x0 0x0 0x28 0xf + createsprite gWaterShurikenRingTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x28, 0xf delay 0x5 - launchtemplate gWaterShurikenRingTemplate 0x82, 0x4, 0x0 0x0 0x28 0xf + createsprite gWaterShurikenRingTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x28, 0xf delay 0xC playsewithpan SE_M_SAND_ATTACK, SOUND_PAN_TARGET - launchtemplate gWaterShurikenImpactTemplate 0x2 0x4 0x0 0x0 0x1 0x2 + createsprite gWaterShurikenImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1, 0x2 waitforvisualfinish clearmonbg ANIM_DEF_PARTNER end @@ -9152,26 +9152,26 @@ Move_MYSTICAL_FIRE:: loadspritegfx ANIM_TAG_FIRE setalpha 8, 8 playse 0xb1 - launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0xa 0x1 - launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x0 0x2 0x0 0x8 0x7fff + createvisualtask AnimTask_ShakeMon2, 0x2, 0x0, 0x1, 0x0, 0xa, 0x1 + createvisualtask AnimTask_BlendColorCycle, 0x2, 0x2, 0x0, 0x2, 0x0, 0x8, 0x7fff waitforvisualfinish waitsound blendoff - launchtemplate gLargeFlameScatterSpriteTemplate 0x82 0x6 0x0 0x0 0x1e 0x1e 0xffff 0x0 + createsprite gLargeFlameScatterSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x1e, 0x1e, 0xffff, 0x0 delay 0x1 - launchtemplate gLargeFlameScatterSpriteTemplate 0x82 0x6 0x0 0x0 0x1e 0x1e 0x0 0x1 + createsprite gLargeFlameScatterSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x1e, 0x1e, 0x0, 0x1 delay 0x1 - launchtemplate gLargeFlameScatterSpriteTemplate 0x82 0x6 0x0 0x0 0x1e 0x1e 0xffff 0xffff + createsprite gLargeFlameScatterSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x1e, 0x1e, 0xffff, 0xffff delay 0x1 - launchtemplate gLargeFlameScatterSpriteTemplate 0x82 0x6 0x0 0x0 0x1e 0x1e 0x2 0x1 + createsprite gLargeFlameScatterSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x1e, 0x1e, 0x2, 0x1 delay 0x1 - launchtemplate gLargeFlameScatterSpriteTemplate 0x82 0x6 0x0 0x0 0x1e 0x1e 0x1 0xffff + createsprite gLargeFlameScatterSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x1e, 0x1e, 0x1, 0xffff delay 0x1 - launchtemplate gLargeFlameScatterSpriteTemplate 0x82 0x6 0x0 0x0 0x1e 0x1e 0xffff 0x1 + createsprite gLargeFlameScatterSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x1e, 0x1e, 0xffff, 0x1 delay 0x1 - launchtemplate gLargeFlameScatterSpriteTemplate 0x82 0x6 0x0 0x0 0x1e 0x1e 0x1 0xfffe + createsprite gLargeFlameScatterSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x1e, 0x1e, 0x1, 0xfffe delay 0x1 - launchtemplate gLargeFlameScatterSpriteTemplate 0x82 0x6 0x0 0x0 0x1e 0x1e 0x3 0x1 + createsprite gLargeFlameScatterSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x1e, 0x1e, 0x3, 0x1 playse 0x8c waitforvisualfinish call UnsetPsychicBg @@ -9183,31 +9183,31 @@ Move_SPIKY_SHIELD:: monbg ANIM_ATK_PARTNER splitbgprio ANIM_ATTACKER waitplaysewithpan SE_M_REFLECT, SOUND_PAN_ATTACKER, 0x10 - launchtemplate gProtectSpriteTemplate 0x2 0x3 0x18 0x0 0x5a + createsprite gProtectSpriteTemplate, ANIM_ATTACKER, 2, 0x18, 0x0, 0x5a delay 0xF - launchtemplate gNeedleArmSpikeSpriteTemplate 0x82 0x5 0x0 0x1 0x0 0xFFE0 0x10 + createsprite gNeedleArmSpikeSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1, 0x0, 0xFFE0, 0x10 delay 0x2 - launchtemplate gNeedleArmSpikeSpriteTemplate 0x82 0x5 0x0 0x1 0x16 0xFFEA 0x10 + createsprite gNeedleArmSpikeSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1, 0x16, 0xFFEA, 0x10 delay 0x2 - launchtemplate gNeedleArmSpikeSpriteTemplate 0x82 0x5 0x0 0x1 0x1E 0x0 0x10 + createsprite gNeedleArmSpikeSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1, 0x1E, 0x0, 0x10 delay 0x2 - launchtemplate gNeedleArmSpikeSpriteTemplate 0x82 0x5 0x0 0x1 0x14 0x14 0x10 + createsprite gNeedleArmSpikeSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1, 0x14, 0x14, 0x10 delay 0x2 - launchtemplate gNeedleArmSpikeSpriteTemplate 0x82 0x5 0x0 0x1 0x0 0x1C 0x10 + createsprite gNeedleArmSpikeSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1, 0x0, 0x1C, 0x10 delay 0x2 - launchtemplate gNeedleArmSpikeSpriteTemplate 0x82 0x5 0x0 0x1 0xFFED 0x13 0x10 + createsprite gNeedleArmSpikeSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1, 0xFFED, 0x13, 0x10 delay 0x2 - launchtemplate gNeedleArmSpikeSpriteTemplate 0x82 0x5 0x0 0x1 0xFFE5 0x0 0x10 + createsprite gNeedleArmSpikeSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1, 0xFFE5, 0x0, 0x10 delay 0x2 - launchtemplate gNeedleArmSpikeSpriteTemplate 0x82 0x5 0x0 0x1 0xFFEE 0xFFEE 0x10 + createsprite gNeedleArmSpikeSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1, 0xFFEE, 0xFFEE, 0x10 delay 0x2 - launchtemplate gNeedleArmSpikeSpriteTemplate 0x82 0x5 0x0 0x1 0x0 0xFFE7 0x10 + createsprite gNeedleArmSpikeSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1, 0x0, 0xFFE7, 0x10 delay 0x2 - launchtemplate gNeedleArmSpikeSpriteTemplate 0x82 0x5 0x0 0x1 0x11 0xFFEF 0x10 + createsprite gNeedleArmSpikeSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1, 0x11, 0xFFEF, 0x10 delay 0x2 - launchtemplate gNeedleArmSpikeSpriteTemplate 0x82 0x5 0x0 0x1 0x17 0x0 0x10 + createsprite gNeedleArmSpikeSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1, 0x17, 0x0, 0x10 delay 0x2 - launchtemplate gNeedleArmSpikeSpriteTemplate 0x82 0x5 0x0 0x1 0x10 0x10 0x10 + createsprite gNeedleArmSpikeSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1, 0x10, 0x10, 0x10 waitforvisualfinish clearmonbg ANIM_ATK_PARTNER end @@ -9215,17 +9215,17 @@ Move_SPIKY_SHIELD:: Move_AROMATIC_MIST:: loadspritegfx ANIM_TAG_PINK_PETAL playsewithpan SE_M_SWEET_SCENT, SOUND_PAN_ATTACKER - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x8 0x6E7D - launchtemplate gSweetScentPetalSpriteTemplate 0x2 0x3 0x64 0x0 0x64 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x8, 0x6E7D + createsprite gSweetScentPetalSpriteTemplate, ANIM_ATTACKER, 2, 0x64, 0x0, 0x64 delay 0x19 setpan 0x0 call SweetScentEffect - launchtemplate gSweetScentPetalSpriteTemplate 0x2 0x2 0x37 0x0 + createsprite gSweetScentPetalSpriteTemplate, ANIM_ATTACKER, 2, 0x37, 0x0 setpan SOUND_PAN_TARGET - createvisualtask AnimTask_BlendColorCycle, 2, (ANIM_PAL_DEF | ANIM_PAL_DEF_PARTNER), 1, 5, 5, 13, 0x56bf + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_DEF_SIDE, 1, 5, 5, 13, 0x56bf call SweetScentEffect waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x8 0x0 0x6E7D + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x8, 0x0, 0x6E7D waitforvisualfinish end @@ -9239,37 +9239,37 @@ Move_EERIE_IMPULSE:: monbg ANIM_DEF_PARTNER waitplaysewithpan SE_M_THUNDERBOLT2, SOUND_PAN_TARGET 0x13 delay 0x4 - launchtemplate gEerieImpulseRingTemplate 0x0 0x7 0x2d 0x0 0x0 0x0 0x0 0x0 0x1 + createsprite gEerieImpulseRingTemplate, ANIM_ATTACKER, 0, 0x2d, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1 delay 0xB - launchtemplate gZapCannonSparkSpriteTemplate, ANIM_TARGET, 7, 10, 0, 16, 30, 0, 40, 0 - launchtemplate gZapCannonSparkSpriteTemplate, ANIM_TARGET, 7, 10, 0, 16, 30, 0, 40, 1 - launchtemplate gZapCannonSparkSpriteTemplate, ANIM_TARGET, 7, 10, 0, 16, 30, 0, 40, 0 - launchtemplate gZapCannonSparkSpriteTemplate, ANIM_TARGET, 7, 10, 0, 16, 30, 0, 40, 2 - launchtemplate gZapCannonSparkSpriteTemplate, ANIM_TARGET, 7, 10, 0, 32, 30, 0, 40, 0 - launchtemplate gZapCannonSparkSpriteTemplate, ANIM_TARGET, 7, 10, 0, 32, 30, 0, 40, 1 - launchtemplate gZapCannonSparkSpriteTemplate, ANIM_TARGET, 7, 10, 0, 32, 30, 0, 40, 0 - launchtemplate gZapCannonSparkSpriteTemplate, ANIM_TARGET, 7, 10, 0, 32, 30, 0, 40, 2 - launchtemplate gZapCannonSparkSpriteTemplate, ANIM_TARGET, 7, 10, 0, 48, 30, 0, 40, 0 - launchtemplate gZapCannonSparkSpriteTemplate, ANIM_TARGET, 7, 10, 0, 48, 30, 0, 40, 1 - launchtemplate gZapCannonSparkSpriteTemplate, ANIM_TARGET, 7, 10, 0, 48, 30, 0, 40, 0 - launchtemplate gZapCannonSparkSpriteTemplate, ANIM_TARGET, 7, 10, 0, 48, 30, 0, 40, 2 + createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 10, 0, 16, 30, 0, 40, 0 + createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 10, 0, 16, 30, 0, 40, 1 + createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 10, 0, 16, 30, 0, 40, 0 + createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 10, 0, 16, 30, 0, 40, 2 + createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 10, 0, 32, 30, 0, 40, 0 + createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 10, 0, 32, 30, 0, 40, 1 + createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 10, 0, 32, 30, 0, 40, 0 + createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 10, 0, 32, 30, 0, 40, 2 + createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 10, 0, 48, 30, 0, 40, 0 + createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 10, 0, 48, 30, 0, 40, 1 + createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 10, 0, 48, 30, 0, 40, 0 + createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 10, 0, 48, 30, 0, 40, 2 waitforvisualfinish playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER - launchtemplate gEerieImpulseImpactTemplate 0x2 0x6 0x0 0xfffb 0x1 0x0 0x20 0x10 - launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0x5 0x0 0x5 0x0 - launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0xfffb 0xa 0x5 0x1 + createsprite gEerieImpulseImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0xfffb, 0x1, 0x0, 0x20, 0x10 + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 0x5, 0x0, 0x5, 0x0 + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 0xfffb, 0xa, 0x5, 0x1 delay 0x7 - launchtemplate gEerieImpulseImpactTemplate 0x2 0x6 0xfff1 0xa 0x1 0x0 0x20 0x10 - launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0xf 0x14 0x5 0x2 - launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0xfff1 0xfff6 0x5 0x0 + createsprite gEerieImpulseImpactTemplate, ANIM_ATTACKER, 2, 0xfff1, 0xa, 0x1, 0x0, 0x20, 0x10 + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 0xf, 0x14, 0x5, 0x2 + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 0xfff1, 0xfff6, 0x5, 0x0 delay 0x7 - launchtemplate gEerieImpulseImpactTemplate 0x2 0x6 0xfff1 0xfff1 0x1 0x0 0x20 0x10 - launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0x19 0x0 0x5 0x1 - launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0xfff8 0x8 0x5 0x2 + createsprite gEerieImpulseImpactTemplate, ANIM_ATTACKER, 2, 0xfff1, 0xfff1, 0x1, 0x0, 0x20, 0x10 + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 0x19, 0x0, 0x5, 0x1 + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 0xfff8, 0x8, 0x5, 0x2 delay 0x7 - launchtemplate gEerieImpulseImpactTemplate 0x2 0x6 0xa 0xfffb 0x1 0x0 0x20 0x10 - launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0x2 0xfff8 0x5 0x0 - launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0xffec 0xf 0x5 0x1 + createsprite gEerieImpulseImpactTemplate, ANIM_ATTACKER, 2, 0xa, 0xfffb, 0x1, 0x0, 0x20, 0x10 + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 0x2, 0xfff8, 0x5, 0x0 + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 0xffec, 0xf, 0x5, 0x1 waitforvisualfinish clearmonbg ANIM_DEF_PARTNER end @@ -9277,16 +9277,16 @@ Move_EERIE_IMPULSE:: Move_VENOM_DRENCH:: loadspritegfx ANIM_TAG_POISON_BUBBLE monbg ANIM_DEF_PARTNER - launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0xfffb 0x1 0xfffb 1 + createsprite gVenomDrenchAcidTemplate, ANIM_TARGET, 2, 0xfffb, 0x1, 0xfffb, 1 playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET delay 0x2 - launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0x5 0x0 0x6 1 + createsprite gVenomDrenchAcidTemplate, ANIM_TARGET, 2, 0x5, 0x0, 0x6, 1 playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET delay 0x2 - launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0x13 0x1 0xa 1 + createsprite gVenomDrenchAcidTemplate, ANIM_TARGET, 2, 0x13, 0x1, 0xa, 1 playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET delay 0x2 - launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0xffe9 0x2 0xfff6 1 + createsprite gVenomDrenchAcidTemplate, ANIM_TARGET, 2, 0xffe9, 0x2, 0xfff6, 1 playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET delay 0x2 call AcidDrench @@ -9295,28 +9295,28 @@ Move_VENOM_DRENCH:: clearmonbg ANIM_DEF_PARTNER end AcidDrench: - launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0xffec 0x0 0xfff6 1 + createsprite gVenomDrenchAcidTemplate, ANIM_TARGET, 2, 0xffec, 0x0, 0xfff6, 1 playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET delay 0x2 - launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0x1c 0x1 0xa 1 + createsprite gVenomDrenchAcidTemplate, ANIM_TARGET, 2, 0x1c, 0x1, 0xa, 1 playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET delay 0x2 - launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0xfff6 0x1 0xfffb 1 + createsprite gVenomDrenchAcidTemplate, ANIM_TARGET, 2, 0xfff6, 0x1, 0xfffb, 1 playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET delay 0x2 - launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0xa 0x0 0x6 1 + createsprite gVenomDrenchAcidTemplate, ANIM_TARGET, 2, 0xa, 0x0, 0x6, 1 playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET delay 0x2 - launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0x18 0x1 0xa 1 + createsprite gVenomDrenchAcidTemplate, ANIM_TARGET, 2, 0x18, 0x1, 0xa, 1 playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET delay 0x2 - launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0xffe0 0x2 0xfff6 1 + createsprite gVenomDrenchAcidTemplate, ANIM_TARGET, 2, 0xffe0, 0x2, 0xfff6, 1 playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET delay 0x2 - launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0xffec 0x0 0xfff6 1 + createsprite gVenomDrenchAcidTemplate, ANIM_TARGET, 2, 0xffec, 0x0, 0xfff6, 1 playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET delay 0x2 - launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0x1e 0x2 0xa 1 + createsprite gVenomDrenchAcidTemplate, ANIM_TARGET, 2, 0x1e, 0x2, 0xa, 1 playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET delay 0x2 return @@ -9334,11 +9334,11 @@ Move_POWDER:: clearmonbg ANIM_DEF_PARTNER end POWDER_SPORE: - launchtemplate gPowderBlackSporeTemplate 0x2 0x5 0x0 0xffec 0x55 0x50 0x0 + createsprite gPowderBlackSporeTemplate, ANIM_ATTACKER, 2, 0x0, 0xffec, 0x55, 0x50, 0x0 delay 0xc - launchtemplate gPowderBlackSporeTemplate 0x2 0x5 0x0 0xfff6 0xaa 0x50 0x0 + createsprite gPowderBlackSporeTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff6, 0xaa, 0x50, 0x0 delay 0xc - launchtemplate gPowderBlackSporeTemplate 0x2 0x5 0x0 0xfff1 0x0 0x50 0x0 + createsprite gPowderBlackSporeTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff1, 0x0, 0x50, 0x0 delay 0xc return @@ -9354,121 +9354,121 @@ Move_GEOMANCY:: choosetwoturnanim GeomancyChargeUp GeomancyUnleash GeomancyChargeUp: loadspritegfx ANIM_TAG_FOCUS_ENERGY @endure buff effect - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xC 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xC, 0x0 waitforvisualfinish playsewithpan SE_M_COSMIC_POWER, SOUND_PAN_ATTACKER - launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_ATTACKER 0x0 0x2 0x5f 0x1 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x2 0x0 0x5 0x1F + createvisualtask AnimTask_ShakeMon, 0x5, ANIM_ATTACKER, 0x0, 0x2, 0x5f, 0x1 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x2, 0x0, 0x5, 0x1F call GeomancyRingBuff - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x2 0x0 0x5 0x2C0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x2, 0x0, 0x5, 0x2C0 call GeomancyRingBuff - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x2 0x0 0x5 0x7C60 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x2, 0x0, 0x5, 0x7C60 call GeomancyRingBuff waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x8 0x0 0x0 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x2 0x5 0x0 0x7C60 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x8, 0x0, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x2, 0x5, 0x0, 0x7C60 waitforvisualfinish blendoff clearmonbg ANIM_ATK_PARTNER end GeomancyRingBuff: - launchtemplate gGeomancyRedCellVortexTemplate 0x2 0x7 0x0 0x1c 0x210 0x1e 0xd 0x32 0x0 - launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2 - launchtemplate gGeomancyRingTemplate 0x2 0x0 + createsprite gGeomancyRedCellVortexTemplate, ANIM_ATTACKER, 2, 0x0, 0x1c, 0x210, 0x1e, 0xd, 0x32, 0x0 + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x1a, 0x2 + createsprite gGeomancyRingTemplate, ANIM_ATTACKER, 2 delay 0x1 - launchtemplate gGeomancyRingTemplate 0x2 0x0 + createsprite gGeomancyRingTemplate, ANIM_ATTACKER, 2 delay 0x1 - launchtemplate gGeomancyGreenCellVortexTemplate 0x2 0x7 0x0 0x20 0x1e0 0x14 0x10 0xffd2 0x0 - launchtemplate gGeomancyRingTemplate 0x2 0x0 + createsprite gGeomancyGreenCellVortexTemplate, ANIM_ATTACKER, 2, 0x0, 0x20, 0x1e0, 0x14, 0x10, 0xffd2, 0x0 + createsprite gGeomancyRingTemplate, ANIM_ATTACKER, 2 delay 0x1 - launchtemplate gGeomancyRingTemplate 0x2 0x0 + createsprite gGeomancyRingTemplate, ANIM_ATTACKER, 2 delay 0x1 - launchtemplate gGeomancyBlueCellVortexTemplate 0x2 0x7 0x0 0x21 0x240 0x14 0x8 0x2a 0x0 - launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1 + createsprite gGeomancyBlueCellVortexTemplate, ANIM_ATTACKER, 2, 0x0, 0x21, 0x240, 0x14, 0x8, 0x2a, 0x0 + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xe, 0x1c, 0x1 delay 0x2 - launchtemplate gGeomancyRedCellVortexTemplate 0x2 0x7 0x0 0x1f 0x190 0x19 0xb 0xffd6 0x0 + createsprite gGeomancyRedCellVortexTemplate, ANIM_ATTACKER, 2, 0x0, 0x1f, 0x190, 0x19, 0xb, 0xffd6, 0x0 delay 0x2 - launchtemplate gGeomancyGreenCellVortexTemplate 0x2 0x7 0x0 0x1c 0x200 0x19 0x10 0x2e 0x0 - launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2 - launchtemplate gGeomancyRingTemplate 0x2 0x0 + createsprite gGeomancyGreenCellVortexTemplate, ANIM_ATTACKER, 2, 0x0, 0x1c, 0x200, 0x19, 0x10, 0x2e, 0x0 + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfffb, 0xa, 0x2 + createsprite gGeomancyRingTemplate, ANIM_ATTACKER, 2 delay 0x1 - launchtemplate gGeomancyRingTemplate 0x2 0x0 + createsprite gGeomancyRingTemplate, ANIM_ATTACKER, 2 delay 0x1 - launchtemplate gGeomancyBlueCellVortexTemplate 0x2 0x7 0x0 0x21 0x1d0 0x1e 0xf 0xffce 0x0 - launchtemplate gGeomancyRingTemplate 0x2 0x0 + createsprite gGeomancyBlueCellVortexTemplate, ANIM_ATTACKER, 2, 0x0, 0x21, 0x1d0, 0x1e, 0xf, 0xffce, 0x0 + createsprite gGeomancyRingTemplate, ANIM_ATTACKER, 2 delay 0x1 - launchtemplate gGeomancyRingTemplate 0x2 0x0 + createsprite gGeomancyRingTemplate, ANIM_ATTACKER, 2 delay 0x1 - launchtemplate gGeomancyRedCellVortexTemplate 0x2 0x7 0x0 0x1c 0x210 0x1e 0xd 0x32 0x0 - launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3 + createsprite gGeomancyRedCellVortexTemplate, ANIM_ATTACKER, 2, 0x0, 0x1c, 0x210, 0x1e, 0xd, 0x32, 0x0 + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1c, 0x1a, 0x3 delay 0x2 - launchtemplate gGeomancyGreenCellVortexTemplate 0x2 0x7 0x0 0x20 0x1e0 0x14 0x10 0xffd2 0x0 + createsprite gGeomancyGreenCellVortexTemplate, ANIM_ATTACKER, 2, 0x0, 0x20, 0x1e0, 0x14, 0x10, 0xffd2, 0x0 delay 0x2 - launchtemplate gGeomancyBlueCellVortexTemplate 0x2 0x7 0x0 0x21 0x240 0x14 0x8 0x2a 0x0 - launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1 - launchtemplate gGeomancyRingTemplate 0x2 0x0 + createsprite gGeomancyBlueCellVortexTemplate, ANIM_ATTACKER, 2, 0x0, 0x21, 0x240, 0x14, 0x8, 0x2a, 0x0 + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff4, 0x0, 0x1 + createsprite gGeomancyRingTemplate, ANIM_ATTACKER, 2 delay 0x1 - launchtemplate gGeomancyRingTemplate 0x2 0x0 + createsprite gGeomancyRingTemplate, ANIM_ATTACKER, 2 delay 0x1 - launchtemplate gGeomancyRedCellVortexTemplate 0x2 0x7 0x0 0x1f 0x190 0x19 0xb 0xffd6 0x0 - launchtemplate gGeomancyRingTemplate 0x2 0x0 + createsprite gGeomancyRedCellVortexTemplate, ANIM_ATTACKER, 2, 0x0, 0x1f, 0x190, 0x19, 0xb, 0xffd6, 0x0 + createsprite gGeomancyRingTemplate, ANIM_ATTACKER, 2 delay 0x1 - launchtemplate gGeomancyRingTemplate 0x2 0x0 + createsprite gGeomancyRingTemplate, ANIM_ATTACKER, 2 delay 0x1 - launchtemplate gGeomancyGreenCellVortexTemplate 0x2 0x7 0x0 0x1c 0x200 0x19 0x10 0x2e 0x0 + createsprite gGeomancyGreenCellVortexTemplate, ANIM_ATTACKER, 2, 0x0, 0x1c, 0x200, 0x19, 0x10, 0x2e, 0x0 delay 0x2 return GeomancyUnleash: loadspritegfx ANIM_TAG_FIRE_PLUME @dragon rage - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x10 0x24CF + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x10, 0x24CF playsewithpan SE_M_MILK_DRINK, SOUND_PAN_ATTACKER - launchtemplate gGeomancyRingTemplate 0x2 0x0 + createsprite gGeomancyRingTemplate, ANIM_ATTACKER, 2 delay 0x1 - launchtemplate gGeomancyRingTemplate 0x2 0x0 + createsprite gGeomancyRingTemplate, ANIM_ATTACKER, 2 delay 0x1 - launchtemplate gGeomancyRingTemplate 0x2 0x0 + createsprite gGeomancyRingTemplate, ANIM_ATTACKER, 2 delay 0x1 - launchtemplate gGeomancyRingTemplate 0x2 0x0 + createsprite gGeomancyRingTemplate, ANIM_ATTACKER, 2 delay 0x1 - launchtemplate gGeomancyRingTemplate 0x2 0x0 + createsprite gGeomancyRingTemplate, ANIM_ATTACKER, 2 delay 0x1 - launchtemplate gGeomancyRingTemplate 0x2 0x0 + createsprite gGeomancyRingTemplate, ANIM_ATTACKER, 2 waitforvisualfinish playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x10 0x10 0x4D01 - launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_ATTACKER 0x0 0x2 0x25 0x1 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x2 0x0 0x5 0x1F - launchtemplate gGeomancyRedCellRaiseTemplate 0x2 0x5 0x14 0x20 0xffd0 0x32 0x1 - launchtemplate gGeomancyGreenCellRaiseTemplate 0x2 0x5 0x0 0x20 0xffda 0x19 0x1 - launchtemplate gGeomancyBlueCellRaiseTemplate 0x2 0x5 0x20 0x20 0xffe4 0x28 0x1 - launchtemplate gGeomancyRedCellRaiseTemplate 0x2 0x5 0xffec 0x20 0xffd0 0x32 0x1 - launchtemplate gGeomancyGreenCellRaiseTemplate 0x2 0x5 0x14 0x20 0xffe4 0x3c 0x1 - launchtemplate gGeomancyBlueCellRaiseTemplate 0x2 0x5 0x0 0x20 0xffe4 0x1e 0x1 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x10, 0x10, 0x4D01 + createvisualtask AnimTask_ShakeMon, 0x5, ANIM_ATTACKER, 0x0, 0x2, 0x25, 0x1 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x2, 0x0, 0x5, 0x1F + createsprite gGeomancyRedCellRaiseTemplate, ANIM_ATTACKER, 2, 0x14, 0x20, 0xffd0, 0x32, 0x1 + createsprite gGeomancyGreenCellRaiseTemplate, ANIM_ATTACKER, 2, 0x0, 0x20, 0xffda, 0x19, 0x1 + createsprite gGeomancyBlueCellRaiseTemplate, ANIM_ATTACKER, 2, 0x20, 0x20, 0xffe4, 0x28, 0x1 + createsprite gGeomancyRedCellRaiseTemplate, ANIM_ATTACKER, 2, 0xffec, 0x20, 0xffd0, 0x32, 0x1 + createsprite gGeomancyGreenCellRaiseTemplate, ANIM_ATTACKER, 2, 0x14, 0x20, 0xffe4, 0x3c, 0x1 + createsprite gGeomancyBlueCellRaiseTemplate, ANIM_ATTACKER, 2, 0x0, 0x20, 0xffe4, 0x1e, 0x1 call GeomancyRageBuff call GeomancyRageBuff waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x10 0x0 0x4D01 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x2 0x5 0x0 0x1F + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x10, 0x0, 0x4D01 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x2, 0x5, 0x0, 0x1F waitforvisualfinish blendoff clearmonbg ANIM_ATK_PARTNER end GeomancyRageBuff: - launchtemplate gGeomancyYellowRageTemplate 0xc2 0x3 0x0 0x5 0x0 + createsprite gGeomancyYellowRageTemplate, ANIM_TARGET, 66, 0x0, 0x5, 0x0 delay 0x1 - launchtemplate gGeomancyYellowRageTemplate 0xc2 0x3 0x0 0xfff6 0xfff1 + createsprite gGeomancyYellowRageTemplate, ANIM_TARGET, 66, 0x0, 0xfff6, 0xfff1 delay 0x1 - launchtemplate gGeomancyYellowRageTemplate 0x82, 0x3, 0x0 0x0 0x19 + createsprite gGeomancyYellowRageTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x19 delay 0x1 - launchtemplate gGeomancyYellowRageTemplate 0xc2 0x3 0x0 0xf 0x5 + createsprite gGeomancyYellowRageTemplate, ANIM_TARGET, 66, 0x0, 0xf, 0x5 delay 0x1 - launchtemplate gGeomancyYellowRageTemplate 0xc2 0x3 0x0 0xffe7 0x0 + createsprite gGeomancyYellowRageTemplate, ANIM_TARGET, 66, 0x0, 0xffe7, 0x0 delay 0x1 - launchtemplate gGeomancyYellowRageTemplate 0x82, 0x3, 0x0 0x1e 0x1e + createsprite gGeomancyYellowRageTemplate, ANIM_TARGET, 2, 0x0, 0x1e, 0x1e delay 0x1 - launchtemplate gGeomancyYellowRageTemplate 0x82, 0x3, 0x0 0xffe5 0x19 + createsprite gGeomancyYellowRageTemplate, ANIM_TARGET, 2, 0x0, 0xffe5, 0x19 delay 0x1 - launchtemplate gGeomancyYellowRageTemplate 0xc2 0x3 0x0 0x0 0x8 + createsprite gGeomancyYellowRageTemplate, ANIM_TARGET, 66, 0x0, 0x0, 0x8 delay 0x1 return @@ -9476,47 +9476,45 @@ Move_MAGNETIC_FLUX:: loadspritegfx ANIM_TAG_THIN_RING @uproar loadspritegfx ANIM_TAG_SPARK_2 @ElectricityEffect loadspritegfx ANIM_TAG_SMALL_EMBER @yellow color - createvisualtask AnimTask_BlendBattleAnimPal 10, (ANIM_PAL_DEF | ANIM_PAL_ATK), 2, 0, 9, 0x243B - createvisualtask AnimTask_BlendBattleAnimPal 10, (ANIM_PAL_DEF | ANIM_PAL_ATK_PARTNER), 2, 0, 9, 0x243B + createvisualtask AnimTask_BlendBattleAnimPal 10, (F_PAL_TARGET | F_PAL_ATK_SIDE), 2, 0, 9, 0x243B loopsewithpan SE_M_TRI_ATTACK, SOUND_PAN_ATTACKER, 0x12, 0x3 - launchtask AnimTask_DefenseCurlDeformMon 0x5 0x0 + createvisualtask AnimTask_DefenseCurlDeformMon, 0x5 call MagneticFluxSparks1 delay 0xA call MagneticFluxSparks2 delay 0xA call MagneticFluxSparks1 delay 0xA - launchtemplate gMagneticFluxUproarTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1f 0x8 + createsprite gMagneticFluxUproarTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x8 call MagneticFluxSparks2 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal 10, (ANIM_PAL_DEF | ANIM_PAL_ATK), 2, 9, 0, 0x243B - createvisualtask AnimTask_BlendBattleAnimPal 10, (ANIM_PAL_DEF | ANIM_PAL_ATK_PARTNER), 2, 9, 0, 0x243B + createvisualtask AnimTask_BlendBattleAnimPal 10, (F_PAL_TARGET | F_PAL_ATK_SIDE), 2, 9, 0, 0x243B waitforvisualfinish end MagneticFluxSparks1: - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0x20, 0x18, 0xbe, 0xc, 0x0, 0x1, 0x0 delay 0x0 - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0 - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0x50, 0x18, 0x16, 0xc, 0x0, 0x1, 0x0 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0x9c, 0x18, 0x79, 0xd, 0x0, 0x1, 0x1 return MagneticFluxSparks2: - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0 - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0x64, 0x18, 0x3c, 0xa, 0x0, 0x1, 0x0 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0xaa, 0x18, 0x2a, 0xb, 0x0, 0x1, 0x1 delay 0x0 - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0xee, 0x18, 0xa5, 0xa, 0x0, 0x1, 0x1 return Move_HAPPY_HOUR:: loadspritegfx ANIM_TAG_COIN monbg ANIM_ATTACKER loopsewithpan SE_M_PAY_DAY, SOUND_PAN_TARGET, 0x8, 10 - launchtemplate gHappyHourCoinShowerTemplate 0x82, 0x4, 0xfffb 0x0 0xfffb 0x1 + createsprite gHappyHourCoinShowerTemplate, ANIM_TARGET, 2, 0xfffb, 0x0, 0xfffb, 0x1 delay 0x2 - launchtemplate gHappyHourCoinShowerTemplate 0x82, 0x4, 0x5 0x0 0x6 0x1 + createsprite gHappyHourCoinShowerTemplate, ANIM_TARGET, 2, 0x5, 0x0, 0x6, 0x1 delay 0x2 - launchtemplate gHappyHourCoinShowerTemplate 0x82, 0x4, 0x13 0x0 0xa 0x1 + createsprite gHappyHourCoinShowerTemplate, ANIM_TARGET, 2, 0x13, 0x0, 0xa, 0x1 delay 0x2 - launchtemplate gHappyHourCoinShowerTemplate 0x82, 0x4, 0xffe9 0x0 0xfff6 0x1 + createsprite gHappyHourCoinShowerTemplate, ANIM_TARGET, 2, 0xffe9, 0x0, 0xfff6, 0x1 delay 0x2 call CoinShower call CoinShower @@ -9524,21 +9522,21 @@ Move_HAPPY_HOUR:: clearmonbg ANIM_ATTACKER end CoinShower: - launchtemplate gHappyHourCoinShowerTemplate 0x82, 0x4, 0xffec 0x0 0xfff6 0x1 + createsprite gHappyHourCoinShowerTemplate, ANIM_TARGET, 2, 0xffec, 0x0, 0xfff6, 0x1 delay 0x2 - launchtemplate gHappyHourCoinShowerTemplate 0x82, 0x4, 0x1c 0x0 0xa 0x1 + createsprite gHappyHourCoinShowerTemplate, ANIM_TARGET, 2, 0x1c, 0x0, 0xa, 0x1 delay 0x2 - launchtemplate gHappyHourCoinShowerTemplate 0x82, 0x4, 0xfff6 0x0 0xfffb 0x1 + createsprite gHappyHourCoinShowerTemplate, ANIM_TARGET, 2, 0xfff6, 0x0, 0xfffb, 0x1 delay 0x2 - launchtemplate gHappyHourCoinShowerTemplate 0x82, 0x4, 0xa 0x0 0x6 0x1 + createsprite gHappyHourCoinShowerTemplate, ANIM_TARGET, 2, 0xa, 0x0, 0x6, 0x1 delay 0x2 - launchtemplate gHappyHourCoinShowerTemplate 0x82, 0x4, 0x18 0x0 0xa 0x1 + createsprite gHappyHourCoinShowerTemplate, ANIM_TARGET, 2, 0x18, 0x0, 0xa, 0x1 delay 0x2 - launchtemplate gHappyHourCoinShowerTemplate 0x82, 0x4, 0xffe0 0x0 0xfff6 0x1 + createsprite gHappyHourCoinShowerTemplate, ANIM_TARGET, 2, 0xffe0, 0x0, 0xfff6, 0x1 delay 0x2 - launchtemplate gHappyHourCoinShowerTemplate 0x82, 0x4, 0xffec 0x0 0xfff6 0x1 + createsprite gHappyHourCoinShowerTemplate, ANIM_TARGET, 2, 0xffec, 0x0, 0xfff6, 0x1 delay 0x2 - launchtemplate gHappyHourCoinShowerTemplate 0x82, 0x4, 0x1e 0x0 0xa 0x1 + createsprite gHappyHourCoinShowerTemplate, ANIM_TARGET, 2, 0x1e, 0x0, 0xa, 0x1 delay 0x2 return @@ -9558,7 +9556,7 @@ Move_ELECTRIC_TERRAIN:: createsprite gElectricTerrainOrbsTemplate, ANIM_ATTACKER, 2, 26, 126 createsprite gElectricTerrainOrbsTemplate, ANIM_ATTACKER, 2, 26, 168 createsprite gElectricTerrainOrbsTemplate, ANIM_ATTACKER, 2, 26, 210 - createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_BG, 3, 0, 4, RGB(28, 28, 0) + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 3, 0, 4, RGB(28, 28, 0) delay 52 setarg 7, 0xFFFF playsewithpan SE_M_REFLECT, SOUND_PAN_ATTACKER @@ -9574,24 +9572,24 @@ Move_ELECTRIC_TERRAIN:: loopsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_TARGET, 0x16, 0x3 waitforvisualfinish delay 2 - createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_BG, 3, 4, 0, RGB(28, 28, 0) + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 3, 4, 0, RGB(28, 28, 0) waitforvisualfinish end Move_DAZZLING_GLEAM:: loadspritegfx ANIM_TAG_SPARKLE_2 loadspritegfx ANIM_TAG_BLUE_STAR - launchtemplate gSimplePaletteBlendSpriteTemplate 0x2 0x5 0x1 0x2 0x0 0xd 0x7fff + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x2, 0x0, 0xd, 0x7fff playsewithpan SE_M_TWISTER, SOUND_PAN_ATTACKER @call 0x081D56B3 -> middle of GrantingStarsEffect createsprite gGrantingStarsSpriteTemplate, ANIM_ATTACKER, 2, 12, -5, 0, 0, 32, 60 delay 8 waitforvisualfinish - launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x0 0x3 0x0 0x10 0x7fff + createvisualtask AnimTask_BlendColorCycle, 0x2, 0x2, 0x0, 0x3, 0x0, 0x10, 0x7fff delay 0x4 playsewithpan SE_M_GIGA_DRAIN, SOUND_PAN_ATTACKER waitforvisualfinish - launchtemplate gSimplePaletteBlendSpriteTemplate 0x2 0x5 0x1 0x0 0xd 0x0 0x7fff + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x0, 0xd, 0x0, 0x7fff waitforvisualfinish clearmonbg 0x0 blendoff @@ -9599,7 +9597,7 @@ Move_DAZZLING_GLEAM:: Move_CELEBRATE:: loadspritegfx ANIM_TAG_ITEM_BAG - launchtemplate gCelebrateBagTemplate 0x2 0x1 0x0 + createsprite gCelebrateBagTemplate, ANIM_ATTACKER, 2, 0x0 playsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER delay 0x12 playsewithpan SE_M_ATTRACT, SOUND_PAN_ATTACKER @@ -9612,40 +9610,40 @@ Move_HOLD_HANDS:: loadspritegfx ANIM_TAG_MAGENTA_HEART @charm loadspritegfx ANIM_TAG_VERTICAL_HEX @red playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER - launchtask AnimTask_TranslateMonEllipticalRespectSide 0x2 0x5 0x0 0xc 0x6 0x6 0x3 - launchtemplate gHoldHandsHeartTemplate 0x2 0x4 0x0 0xffe8 0x8 0x8c + createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 0x2, 0x0, 0xc, 0x6, 0x6, 0x3 + createsprite gHoldHandsHeartTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x8, 0x8c delay 0x8 - launchtemplate gHoldHandsHeartTemplate 0x2 0x4 0x0 0xffe8 0x8 0x8c + createsprite gHoldHandsHeartTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x8, 0x8c delay 0x8 - launchtemplate gHoldHandsHeartTemplate 0x2 0x4 0x0 0xffe8 0x8 0x8c + createsprite gHoldHandsHeartTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x8, 0x8c delay 0x8 - launchtemplate gHoldHandsHeartTemplate 0x2 0x4 0x0 0xffe8 0x8 0x8c + createsprite gHoldHandsHeartTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x8, 0x8c delay 0x8 - launchtemplate gHoldHandsHeartTemplate 0x2 0x4 0x0 0xffe8 0x8 0x8c + createsprite gHoldHandsHeartTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x8, 0x8c delay 0x8 - launchtemplate gHoldHandsHeartTemplate 0x2 0x4 0x0 0xffe8 0x8 0x8c + createsprite gHoldHandsHeartTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x8, 0x8c delay 0x8 - launchtemplate gHoldHandsHeartTemplate 0x2 0x4 0x0 0xffe8 0x8 0x8c + createsprite gHoldHandsHeartTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x8, 0x8c delay 0x8 - launchtemplate gHoldHandsHeartTemplate 0x2 0x4 0x0 0xffe8 0x8 0x8c + createsprite gHoldHandsHeartTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x8, 0x8c delay 0x8 - launchtemplate gHoldHandsHeartTemplate 0x2 0x4 0x0 0xffe8 0x8 0x8c + createsprite gHoldHandsHeartTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x8, 0x8c delay 0x8 - launchtemplate gHoldHandsHeartTemplate 0x2 0x4 0x0 0xffe8 0x8 0x8c + createsprite gHoldHandsHeartTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x8, 0x8c waitforvisualfinish - launchtask AnimTask_HelpingHandAttackerMovement 0x5 0x0 - launchtemplate gHelpingHandClapSpriteTemplate 0x28 0x1 0x0 - launchtemplate gHelpingHandClapSpriteTemplate 0x28 0x1 0x1 + createvisualtask AnimTask_HelpingHandAttackerMovement, 0x5 + createsprite gHelpingHandClapSpriteTemplate, ANIM_ATTACKER, 40, 0x0 + createsprite gHelpingHandClapSpriteTemplate, ANIM_ATTACKER, 40, 0x1 delay 0x13 playsewithpan SE_M_ENCORE, 0x0 - launchtask AnimTask_ShakeMon2 0x2 0x5 0x2 0x2 0x0 0x5 0x1 + createvisualtask AnimTask_ShakeMon2, 0x2, 0x2, 0x2, 0x0, 0x5, 0x1 delay 0xe playsewithpan SE_M_ENCORE, 0x0 - launchtask AnimTask_ShakeMon2 0x2 0x5 0x2 0x2 0x0 0x5 0x1 + createvisualtask AnimTask_ShakeMon2, 0x2, 0x2, 0x2, 0x0, 0x5, 0x1 delay 0x14 playsewithpan SE_M_ENCORE, 0x0 - launchtask AnimTask_ShakeMon2 0x2 0x5 0x2 0x3 0x0 0xa 0x1 - launchtask AnimTask_BlendMonInAndOut 0x2 0x5 0x2 0x3ff 0xc 0x1 0x1 + createvisualtask AnimTask_ShakeMon2, 0x2, 0x2, 0x3, 0x0, 0xa, 0x1 + createvisualtask AnimTask_BlendMonInAndOut, 0x2, 0x2, 0x3ff, 0xc, 0x1, 0x1 end Move_BABY_DOLL_EYES:: @@ -9654,17 +9652,17 @@ Move_BABY_DOLL_EYES:: loadspritegfx ANIM_TAG_OPENING_EYE @eye setalpha 8, 8 monbg ANIM_DEF_PARTNER - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x0 0x0 0xA 0x7FFF + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x0, 0x0, 0xA, 0x7FFF waitforvisualfinish - launchtemplate gOpeningEyeSpriteTemplate 0x5 0x4 0x0 0x0 0x1 0x0 + createsprite gOpeningEyeSpriteTemplate, ANIM_ATTACKER, 5, 0x0, 0x0, 0x1, 0x0 delay 0x20 playsewithpan SE_M_LEER, SOUND_PAN_ATTACKER - launchtask AnimTask_ScaleMonAndRestore 0x5 0x5 0xfffb 0xfffb 0xa 0x0 0x1 + createvisualtask AnimTask_ScaleMonAndRestore, 0x5, 0xfffb, 0xfffb, 0xa, 0x0, 0x1 waitforvisualfinish delay 0xa - launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x1 0x0 0x9 0x1 - launchtask AnimTask_ShakeMon2 0x2 0x5 0x3 0x1 0x0 0x9 0x1 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x0 0xA 0x0 0x7FFF + createvisualtask AnimTask_ShakeMon2, 0x2, 0x1, 0x1, 0x0, 0x9, 0x1 + createvisualtask AnimTask_ShakeMon2, 0x2, 0x3, 0x1, 0x0, 0x9, 0x1 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x0, 0xA, 0x0, 0x7FFF waitforvisualfinish clearmonbg ANIM_DEF_PARTNER blendoff @@ -9675,18 +9673,18 @@ Move_NUZZLE:: loadspritegfx ANIM_TAG_ITEM_BAG loadspritegfx ANIM_TAG_SPARK_2 loadspritegfx ANIM_TAG_IMPACT - launchtask AnimTask_RockMonBackAndForth 0x5 0x3 0x0 0x2 0x0 - launchtemplate gMagentaHeartSpriteTemplate 0x3 0x2 0x0 0x14 + createvisualtask AnimTask_RockMonBackAndForth, 0x5, 0x0, 0x2, 0x0 + createsprite gMagentaHeartSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x14 playsewithpan SE_M_CHARM, SOUND_PAN_ATTACKER delay 0xf - launchtemplate gMagentaHeartSpriteTemplate 0x3 0x2 0xffec 0x14 + createsprite gMagentaHeartSpriteTemplate, ANIM_ATTACKER, 3, 0xffec, 0x14 playsewithpan SE_M_CHARM, SOUND_PAN_ATTACKER delay 0xf - launchtemplate gMagentaHeartSpriteTemplate 0x3 0x2 0x14 0x14 + createsprite gMagentaHeartSpriteTemplate, ANIM_ATTACKER, 3, 0x14, 0x14 playsewithpan SE_M_CHARM, SOUND_PAN_ATTACKER waitforvisualfinish playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_TARGET - launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x2 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1, 0x2 call ElectricityEffectNoSound waitforvisualfinish end @@ -9701,17 +9699,17 @@ Move_HOLD_BACK:: monbg ANIM_TARGET setalpha 12, 8 playsewithpan SE_M_SWAGGER, SOUND_PAN_TARGET - launchtemplate gHoldBackSwipeTemplate 0x82, 0x3, 0x0 0x0 0x1 - waitforvisualfinish - launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x3 0x0 0xa 0x1 - launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x2 - launchtemplate gHoldBackRingTemplate 0x3 0x4 0x0 0x0 0x100 0x0 - launchtemplate gHoldBackStarsTemplate 0x83 0x4 0xfff0 0xfff8 0xa0 0xffe0 - launchtemplate gHoldBackStarsTemplate 0x83 0x4 0xfff0 0xfff8 0xff00 0xffd8 - launchtemplate gHoldBackStarsTemplate 0x83 0x4 0xfff0 0xfff8 0x80 0xfff0 - launchtemplate gHoldBackStarsTemplate 0x83 0x4 0xfff0 0xfff8 0x1a0 0xffda - launchtemplate gHoldBackStarsTemplate 0x83 0x4 0xfff0 0xfff8 0xff80 0xffea - launchtemplate gHoldBackStarsTemplate 0x83 0x4 0xfff0 0xfff8 0xfe80 0xffe1 + createsprite gHoldBackSwipeTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x1 + waitforvisualfinish + createvisualtask AnimTask_ShakeMon2, 0x2, 0x1, 0x3, 0x0, 0xa, 0x1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1, 0x2 + createsprite gHoldBackRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x100, 0x0 + createsprite gHoldBackStarsTemplate, ANIM_TARGET, 3, 0xfff0, 0xfff8, 0xa0, 0xffe0 + createsprite gHoldBackStarsTemplate, ANIM_TARGET, 3, 0xfff0, 0xfff8, 0xff00, 0xffd8 + createsprite gHoldBackStarsTemplate, ANIM_TARGET, 3, 0xfff0, 0xfff8, 0x80, 0xfff0 + createsprite gHoldBackStarsTemplate, ANIM_TARGET, 3, 0xfff0, 0xfff8, 0x1a0, 0xffda + createsprite gHoldBackStarsTemplate, ANIM_TARGET, 3, 0xfff0, 0xfff8, 0xff80, 0xffea + createsprite gHoldBackStarsTemplate, ANIM_TARGET, 3, 0xfff0, 0xfff8, 0xfe80, 0xffe1 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET waitforvisualfinish clearmonbg ANIM_TARGET @@ -9723,8 +9721,8 @@ Move_INFESTATION:: loadspritegfx ANIM_TAG_SMALL_BUBBLES @circle particles monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET - createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_DEF, 0x2, 0x0, 0x9, 0x7320 - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x4f 0x1 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 0x2, 0x0, 0x9, 0x7320 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x3, 0x0, 0x4f, 0x1 loopsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER, 0x0, 0x4F call InfestationVortex call InfestationVortex @@ -9732,22 +9730,22 @@ Move_INFESTATION:: call InfestationVortex call InfestationVortex waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xA 0x5 ANIM_PAL_DEF 0x2 0x9 0x0 0x7320 + createvisualtask AnimTask_BlendBattleAnimPal, 0xA, F_PAL_TARGET, 0x2, 0x9, 0x0, 0x7320 waitforvisualfinish clearmonbg ANIM_DEF_PARTNER end InfestationVortex: - launchtemplate gInfestationBubbleTemplate 0x82 0x7 0x0 0x1c 0x210 0x1e 0xd 0x32 0x1 + createsprite gInfestationBubbleTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x210, 0x1e, 0xd, 0x32, 0x1 delay 0x1 - launchtemplate gInfestationBubbleTemplate 0x82 0x7 0x0 0x20 0x1e0 0x14 0x10 0xffd2 0x1 + createsprite gInfestationBubbleTemplate, ANIM_TARGET, 2, 0x0, 0x20, 0x1e0, 0x14, 0x10, 0xffd2, 0x1 delay 0x1 - launchtemplate gInfestationBubbleTemplate 0x82 0x7 0x0 0x21 0x240 0x14 0x8 0x2a 0x1 + createsprite gInfestationBubbleTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x240, 0x14, 0x8, 0x2a, 0x1 delay 0x1 - launchtemplate gInfestationBubbleTemplate 0x82 0x7 0x0 0x1f 0x190 0x19 0xb 0xffd6 0x1 + createsprite gInfestationBubbleTemplate, ANIM_TARGET, 2, 0x0, 0x1f, 0x190, 0x19, 0xb, 0xffd6, 0x1 delay 0x1 - launchtemplate gInfestationBubbleTemplate 0x82 0x7 0x0 0x1c 0x200 0x19 0x10 0x2e 0x1 + createsprite gInfestationBubbleTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x200, 0x19, 0x10, 0x2e, 0x1 delay 0x1 - launchtemplate gInfestationBubbleTemplate 0x82 0x7 0x0 0x21 0x1d0 0x1e 0xf 0xffce 0x1 + createsprite gInfestationBubbleTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1d0, 0x1e, 0xf, 0xffce, 0x1 delay 0x1 return @@ -9757,7 +9755,7 @@ Move_POWER_UP_PUNCH: loadspritegfx ANIM_TAG_BREATH monbg ANIM_TARGET setalpha 12, 8 - createvisualtask AnimTask_GrowAndShrink, 2, + createvisualtask AnimTask_GrowAndShrink, 2 playsewithpan SE_M_METRONOME, SOUND_PAN_ATTACKER waitforvisualfinish playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET @@ -9775,15 +9773,15 @@ Move_OBLIVION_WING:: createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_HYDRO_PUMP, 0x0, 0xC, 0xC, 0x289F @Pinkish Red createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ROUND_SHADOW, 0x0, 0xD, 0xD, 0x289F @Pinkish Red playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER - launchtemplate gFlyBallUpSpriteTemplate 0x2 0x4 0x0 0x0 0xd 0x150 + createsprite gFlyBallUpSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0xd, 0x150 waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xE 0x0 @Black + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xE, 0x0 @Black waitforvisualfinish createsoundtask SoundTask_LoopSEAdjustPanning, 0x7, 0xf0, 0xffc0, SOUND_PAN_TARGET, 0x1, 0xf, 0x0, 0x5 call OblivionWingBeam call OblivionWingBeam - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0 0x3 40 0x1 - launchtask AnimTask_BlendColorCycle 0x2 0x6 ANIM_PAL_DEF 0x2 0x4 0x0 0xc 0x289F @Pinkish Red + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x0, 0x3, 40, 0x1 + createvisualtask AnimTask_BlendColorCycle, 0x2, F_PAL_TARGET, 0x2, 0x4, 0x0, 0xc, 0x289F @Pinkish Red call OblivionWingBeam call OblivionWingBeam call OblivionWingBeam @@ -9798,13 +9796,13 @@ Move_OBLIVION_WING:: visible ANIM_ATTACKER call HealingEffect waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xE 0x0 0x0 @From black + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xE, 0x0, 0x0 @From black waitforvisualfinish end OblivionWingBeam: - launchtemplate gOblivionWingBeamTemplate 0x82, 0x6, 0, -90, 0, 20, 0x15 0x0 + createsprite gOblivionWingBeamTemplate, ANIM_TARGET, 2, 0, -90, 0, 20, 0x15, 0x0 delay 0x2 - launchtemplate gOblivionWingBeamTemplate 0x82, 0x6, 0, -90, 0, 20, 0x15 0x0 + createsprite gOblivionWingBeamTemplate, ANIM_TARGET, 2, 0, -90, 0, 20, 0x15, 0x0 delay 0x2 return @@ -9817,10 +9815,10 @@ Move_THOUSAND_ARROWS:: loadspritegfx ANIM_TAG_VERTICAL_HEX @arrow loadspritegfx ANIM_TAG_NEEDLE @sting monbg ANIM_ATTACKER - setblends 0x80e - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xC 0x0 + setalpha 14, 8 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xC, 0x0 waitforvisualfinish - launchtemplate gThousandArrowsGreenChargeTemplate 0x2 0x1 0x0 + createsprite gThousandArrowsGreenChargeTemplate, ANIM_ATTACKER, 2, 0x0 playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER delay 0x18 playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER @@ -9832,67 +9830,67 @@ Move_THOUSAND_ARROWS:: call ThousandArrowsHexes call ThousandArrowsHexes call ThousandArrowsHexes - launchtemplate gThousandArrowsGreenDischargeTemplate 0x2 0x3 0x0 0x10 0x10 + createsprite gThousandArrowsGreenDischargeTemplate, ANIM_ATTACKER, 2, 0x0, 0x10, 0x10 delay 0x2 - launchtemplate gThousandArrowsGreenDischargeTemplate 0x2 0x3 0x0 0xfff0 0xfff0 + createsprite gThousandArrowsGreenDischargeTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff0, 0xfff0 playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER waitforvisualfinish delay 0x30 - launchtask AnimTask_HorizontalShake 0x5 0x3 0x5 0xa 0x32 - launchtask AnimTask_HorizontalShake 0x5 0x3 0x4 0xa 0x32 + createvisualtask AnimTask_HorizontalShake, 0x5, 0x5, 0xa, 0x32 + createvisualtask AnimTask_HorizontalShake, 0x5, 0x4, 0xa, 0x32 call ThousandArrowsDown call ThousandArrowsDown call ThousandArrowsDown call ThousandArrowsDown waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xC 0x0 0xffff + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xC, 0x0, 0xffff waitforvisualfinish clearmonbg ANIM_ATTACKER blendoff end ThousandArrowsHexes: - launchtemplate gThousandArrowsGreenHexTemplate 0x82, 0x3, 0x0 0xfffc 0xfff0 + createsprite gThousandArrowsGreenHexTemplate, ANIM_TARGET, 2, 0x0, 0xfffc, 0xfff0 playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER delay 0x2 - launchtemplate gThousandArrowsGreenHexTemplate 0x82, 0x3, 0x0 0x100D 0xfff0 + createsprite gThousandArrowsGreenHexTemplate, ANIM_TARGET, 2, 0x0, 0x100D, 0xfff0 playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER delay 0x2 - launchtemplate gThousandArrowsGreenHexTemplate 0x82, 0x3, 0x0 0x4 0xfff4 + createsprite gThousandArrowsGreenHexTemplate, ANIM_TARGET, 2, 0x0, 0x4, 0xfff4 playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER delay 0x2 - launchtemplate gThousandArrowsGreenHexTemplate 0x82, 0x3, 0x0 0xfff0 0xfff0 + createsprite gThousandArrowsGreenHexTemplate, ANIM_TARGET, 2, 0x0, 0xfff0, 0xfff0 playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER delay 0x2 return ThousandArrowsDown: - launchtemplate gThousandArrowsGreenArrowTemplate 0x82, 0x3, 0x1 0xdc 0x3c + createsprite gThousandArrowsGreenArrowTemplate, ANIM_TARGET, 2, 0x1, 0xdc, 0x3c playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER delay 0x2 - launchtemplate gThousandArrowsGreenArrowTemplate 0x82, 0x3, 0x1 0x3c 0x64 + createsprite gThousandArrowsGreenArrowTemplate, ANIM_TARGET, 2, 0x1, 0x3c, 0x64 playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER delay 0x2 - launchtemplate gThousandArrowsGreenArrowTemplate 0x82, 0x3, 0x1 0x8c 0x37 + createsprite gThousandArrowsGreenArrowTemplate, ANIM_TARGET, 2, 0x1, 0x8c, 0x37 playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER delay 0x2 - launchtemplate gThousandArrowsGreenArrowTemplate 0x82, 0x3, 0x1 0xb4 0x32 + createsprite gThousandArrowsGreenArrowTemplate, ANIM_TARGET, 2, 0x1, 0xb4, 0x32 playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER delay 0x2 - launchtemplate gThousandArrowsGreenArrowTemplate 0x82, 0x3, 0x1 0x14 0x5a + createsprite gThousandArrowsGreenArrowTemplate, ANIM_TARGET, 2, 0x1, 0x14, 0x5a playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER delay 0x2 - launchtemplate gThousandArrowsGreenArrowTemplate 0x82, 0x3, 0x1 0x5a 0x5a + createsprite gThousandArrowsGreenArrowTemplate, ANIM_TARGET, 2, 0x1, 0x5a, 0x5a playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER delay 0x2 - launchtemplate gThousandArrowsGreenArrowTemplate 0x82, 0x3, 0x1 0xa0 0x3c + createsprite gThousandArrowsGreenArrowTemplate, ANIM_TARGET, 2, 0x1, 0xa0, 0x3c playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER delay 0x2 - launchtemplate gThousandArrowsGreenArrowTemplate 0x82, 0x3, 0x1 0x1e 0x5a + createsprite gThousandArrowsGreenArrowTemplate, ANIM_TARGET, 2, 0x1, 0x1e, 0x5a playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER delay 0x2 - launchtemplate gThousandArrowsGreenArrowTemplate 0x82, 0x3, 0x1 0x78 0x3c + createsprite gThousandArrowsGreenArrowTemplate, ANIM_TARGET, 2, 0x1, 0x78, 0x3c playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER delay 0x2 - launchtemplate gThousandArrowsGreenArrowTemplate 0x82, 0x3, 0x1 0xc8 0x28 + createsprite gThousandArrowsGreenArrowTemplate, ANIM_TARGET, 2, 0x1, 0xc8, 0x28 playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER return @@ -9903,133 +9901,133 @@ Move_THOUSAND_WAVES:: loadspritegfx ANIM_TAG_IMPACT @pound hits monbg ANIM_ATK_PARTNER setalpha 8, 8 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xC 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xC, 0x0 waitforvisualfinish playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER - launchtemplate gThousandWavesGreenWheelTemplate 0x2 0x1 0x0 - launchtemplate gThousandWavesGreenWheelTemplate 0x2 0x1 0x2b - launchtemplate gThousandWavesGreenWheelTemplate 0x2 0x1 0x55 - launchtemplate gThousandWavesGreenWheelTemplate 0x2 0x1 0x80 - launchtemplate gThousandWavesGreenWheelTemplate 0x2 0x1 0xaa - launchtemplate gThousandWavesGreenWheelTemplate 0x2 0x1 0xd5 + createsprite gThousandWavesGreenWheelTemplate, ANIM_ATTACKER, 2, 0x0 + createsprite gThousandWavesGreenWheelTemplate, ANIM_ATTACKER, 2, 0x2b + createsprite gThousandWavesGreenWheelTemplate, ANIM_ATTACKER, 2, 0x55 + createsprite gThousandWavesGreenWheelTemplate, ANIM_ATTACKER, 2, 0x80 + createsprite gThousandWavesGreenWheelTemplate, ANIM_ATTACKER, 2, 0xaa + createsprite gThousandWavesGreenWheelTemplate, ANIM_ATTACKER, 2, 0xd5 waitforvisualfinish clearmonbg ANIM_ATK_PARTNER @I placed this one here, because it ruins the teleport animation loopsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET, 0x3, 0x15 call ThousandWavesRecover - launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0x28 0xfff6 0xd + createsprite gThousandWavesGreenRecoverTemplate, ANIM_ATTACKER, 2, 0x28, 0xfff6, 0xd delay 0x3 - launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0xffdd 0x8 0xd + createsprite gThousandWavesGreenRecoverTemplate, ANIM_ATTACKER, 2, 0xffdd, 0x8, 0xd delay 0x3 - launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0xffdd 0xfff6 0xd + createsprite gThousandWavesGreenRecoverTemplate, ANIM_ATTACKER, 2, 0xffdd, 0xfff6, 0xd delay 0x3 - launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0x28 0x8 0xd + createsprite gThousandWavesGreenRecoverTemplate, ANIM_ATTACKER, 2, 0x28, 0x8, 0xd delay 0x3 - launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0xf 0xffd8 0xd + createsprite gThousandWavesGreenRecoverTemplate, ANIM_ATTACKER, 2, 0xf, 0xffd8, 0xd delay 0x3 - launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0xfff6 0xffe0 0xd + createsprite gThousandWavesGreenRecoverTemplate, ANIM_ATTACKER, 2, 0xfff6, 0xffe0, 0xd delay 0x3 - launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0x5 0x27 0xd + createsprite gThousandWavesGreenRecoverTemplate, ANIM_ATTACKER, 2, 0x5, 0x27, 0xd delay 0x3 - launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0x19 0xffec 0xd + createsprite gThousandWavesGreenRecoverTemplate, ANIM_ATTACKER, 2, 0x19, 0xffec, 0xd delay 0x3 - launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0xffd8 0xffec 0xd + createsprite gThousandWavesGreenRecoverTemplate, ANIM_ATTACKER, 2, 0xffd8, 0xffec, 0xd delay 0x3 - launchtask AnimTask_AttackerStretchAndDisappear 0x2 0x0 + createvisualtask AnimTask_AttackerStretchAndDisappear, 0x2 playsewithpan SE_M_TELEPORT, SOUND_PAN_ATTACKER - launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0x5 0xffd8 0xd + createsprite gThousandWavesGreenRecoverTemplate, ANIM_ATTACKER, 2, 0x5, 0xffd8, 0xd waitforvisualfinish panse SE_M_HYPER_BEAM2, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0 delay 0x4 - launchtask AnimTask_MoveHeatWaveTargets 0x5 0x0 + createvisualtask AnimTask_MoveHeatWaveTargets, 0x5 delay 0xc monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET - launchtemplate gThousandWavesGreenWaveTemplate 0x28 0x4 0xa 0x900 0x60 0x1 + createsprite gThousandWavesGreenWaveTemplate, ANIM_ATTACKER, 40, 0xa, 0x900, 0x60, 0x1 delay 0x2 - launchtemplate gThousandWavesGreenWaveTemplate 0x28 0x4 0x5a 0x800 0x60 0x1 + createsprite gThousandWavesGreenWaveTemplate, ANIM_ATTACKER, 40, 0x5a, 0x800, 0x60, 0x1 delay 0x2 - launchtemplate gThousandWavesGreenWaveTemplate 0x28 0x4 0x32 0xa00 0x60 0x1 + createsprite gThousandWavesGreenWaveTemplate, ANIM_ATTACKER, 40, 0x32, 0xa00, 0x60, 0x1 delay 0x2 - launchtemplate gThousandWavesGreenWaveTemplate 0x28 0x4 0x14 0x900 0x60 0x1 + createsprite gThousandWavesGreenWaveTemplate, ANIM_ATTACKER, 40, 0x14, 0x900, 0x60, 0x1 delay 0x2 call ThousandWavesRotatingImpact call ThousandWavesRotatingImpact waitforvisualfinish - launchtask AnimTask_ExtremeSpeedMonReappear 0x2 0x0 + createvisualtask AnimTask_ExtremeSpeedMonReappear, 0x2 waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xC 0x0 0xffff + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xC, 0x0, 0xffff waitforvisualfinish blendoff clearmonbg ANIM_DEF_PARTNER end ThousandWavesRecover: - launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0x28 0x28 0x10 + createsprite gThousandWavesGreenRecoverTemplate, ANIM_ATTACKER, 2, 0x28, 0x28, 0x10 delay 0x2 - launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0xffd8 0xffd8 0x10 + createsprite gThousandWavesGreenRecoverTemplate, ANIM_ATTACKER, 2, 0xffd8, 0xffd8, 0x10 delay 0x2 - launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0x0 0x28 0x10 + createsprite gThousandWavesGreenRecoverTemplate, ANIM_ATTACKER, 2, 0x0, 0x28, 0x10 delay 0x2 - launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0x0 0xffd8 0x10 + createsprite gThousandWavesGreenRecoverTemplate, ANIM_ATTACKER, 2, 0x0, 0xffd8, 0x10 delay 0x2 - launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0x28 0xffec 0x10 + createsprite gThousandWavesGreenRecoverTemplate, ANIM_ATTACKER, 2, 0x28, 0xffec, 0x10 delay 0x2 - launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0x28 0x14 0x10 + createsprite gThousandWavesGreenRecoverTemplate, ANIM_ATTACKER, 2, 0x28, 0x14, 0x10 delay 0x2 - launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0xffd8 0xffec 0x10 + createsprite gThousandWavesGreenRecoverTemplate, ANIM_ATTACKER, 2, 0xffd8, 0xffec, 0x10 delay 0x2 - launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0xffd8 0x14 0x10 + createsprite gThousandWavesGreenRecoverTemplate, ANIM_ATTACKER, 2, 0xffd8, 0x14, 0x10 delay 0x2 - launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0xffec 0x1e 0x10 + createsprite gThousandWavesGreenRecoverTemplate, ANIM_ATTACKER, 2, 0xffec, 0x1e, 0x10 delay 0x2 - launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0x14 0xffe2 0x10 + createsprite gThousandWavesGreenRecoverTemplate, ANIM_ATTACKER, 2, 0x14, 0xffe2, 0x10 delay 0x2 - launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0xffec 0xffe2 0x10 + createsprite gThousandWavesGreenRecoverTemplate, ANIM_ATTACKER, 2, 0xffec, 0xffe2, 0x10 delay 0x2 - launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0x14 0x1e 0x10 + createsprite gThousandWavesGreenRecoverTemplate, ANIM_ATTACKER, 2, 0x14, 0x1e, 0x10 delay 0x2 - launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0xffd8 0x0 0x10 + createsprite gThousandWavesGreenRecoverTemplate, ANIM_ATTACKER, 2, 0xffd8, 0x0, 0x10 delay 0x2 - launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0x28 0x0 0x10 + createsprite gThousandWavesGreenRecoverTemplate, ANIM_ATTACKER, 2, 0x28, 0x0, 0x10 delay 0x2 return ThousandWavesRotatingImpact: - launchtemplate gThousandWavesRotatingImpactTemplate 0x82 0x7 0x23 0x1c 0x180 0x32 0x8 0x32 0x1 @1 - launchtemplate gThousandWavesGreenWaveTemplate 0x28 0x4 0x46 0x7c0 0x60 0x1 + createsprite gThousandWavesRotatingImpactTemplate, ANIM_TARGET, 2, 0x23, 0x1c, 0x180, 0x32, 0x8, 0x32, 0x1 @1 + createsprite gThousandWavesGreenWaveTemplate, ANIM_ATTACKER, 40, 0x46, 0x7c0, 0x60, 0x1 delay 0x2 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET - launchtemplate gThousandWavesPoundImpactTemplate 0x82, 0x4, 0x1 0x0 0x0 0x3 - launchtemplate gThousandWavesRotatingImpactTemplate 0x82 0x7 0x23 0x20 0xf0 0x28 0xb 0xffd2 0x1 @2 - launchtemplate gThousandWavesGreenWaveTemplate 0x28 0x4 0x0 0xb00 0x60 0x1 + createsprite gThousandWavesPoundImpactTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x0, 0x3 + createsprite gThousandWavesRotatingImpactTemplate, ANIM_TARGET, 2, 0x23, 0x20, 0xf0, 0x28, 0xb, 0xffd2, 0x1 @2 + createsprite gThousandWavesGreenWaveTemplate, ANIM_ATTACKER, 40, 0x0, 0xb00, 0x60, 0x1 delay 0x2 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET - launchtemplate gThousandWavesPoundImpactTemplate 0x82, 0x4, 0x1 0x5 0xfff4 0x3 - launchtemplate gThousandWavesRotatingImpactTemplate 0x82 0x7 0x23 0x21 0x1a0 0x28 0x4 0x2a 0x1 @3 - launchtemplate gThousandWavesGreenWaveTemplate 0x28 0x4 0x3c 0xa00 0x60 0x1 + createsprite gThousandWavesPoundImpactTemplate, ANIM_TARGET, 2, 0x1, 0x5, 0xfff4, 0x3 + createsprite gThousandWavesRotatingImpactTemplate, ANIM_TARGET, 2, 0x23, 0x21, 0x1a0, 0x28, 0x4, 0x2a, 0x1 @3 + createsprite gThousandWavesGreenWaveTemplate, ANIM_ATTACKER, 40, 0x3c, 0xa00, 0x60, 0x1 delay 0x2 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET - launchtemplate gThousandWavesPoundImpactTemplate 0x82, 0x4, 0x1 0xfffa 0x9 0x3 - launchtemplate gThousandWavesRotatingImpactTemplate 0x82 0x7 0x23 0x1f 0x120 0x2d 0x6 0xffd6 0x1 @4 - launchtemplate gThousandWavesGreenWaveTemplate 0x28 0x4 0xa 0x900 0x60 0x1 + createsprite gThousandWavesPoundImpactTemplate, ANIM_TARGET, 2, 0x1, 0xfffa, 0x9, 0x3 + createsprite gThousandWavesRotatingImpactTemplate, ANIM_TARGET, 2, 0x23, 0x1f, 0x120, 0x2d, 0x6, 0xffd6, 0x1 @4 + createsprite gThousandWavesGreenWaveTemplate, ANIM_ATTACKER, 40, 0xa, 0x900, 0x60, 0x1 delay 0x2 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET - launchtemplate gThousandWavesPoundImpactTemplate 0x82, 0x4, 0x1 0xfffa 0xfff4 0x3 - launchtemplate gThousandWavesRotatingImpactTemplate 0x82 0x7 0x23 0x1c 0x1c0 0x2d 0xb 0x2e 0x1 @5 - launchtemplate gThousandWavesGreenWaveTemplate 0x28 0x4 0x5a 0x800 0x60 0x1 + createsprite gThousandWavesPoundImpactTemplate, ANIM_TARGET, 2, 0x1, 0xfffa, 0xfff4, 0x3 + createsprite gThousandWavesRotatingImpactTemplate, ANIM_TARGET, 2, 0x23, 0x1c, 0x1c0, 0x2d, 0xb, 0x2e, 0x1 @5 + createsprite gThousandWavesGreenWaveTemplate, ANIM_ATTACKER, 40, 0x5a, 0x800, 0x60, 0x1 delay 0x2 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET - launchtemplate gThousandWavesPoundImpactTemplate 0x82, 0x4, 0x1 0x5 0x9 0x3 - launchtemplate gThousandWavesRotatingImpactTemplate 0x82 0x7 0x23 0x21 0x1d0 0x32 0xa 0xffce 0x1 @6 - launchtemplate gThousandWavesGreenWaveTemplate 0x28 0x4 0x32 0xa00 0x60 0x1 + createsprite gThousandWavesPoundImpactTemplate, ANIM_TARGET, 2, 0x1, 0x5, 0x9, 0x3 + createsprite gThousandWavesRotatingImpactTemplate, ANIM_TARGET, 2, 0x23, 0x21, 0x1d0, 0x32, 0xa, 0xffce, 0x1 @6 + createsprite gThousandWavesGreenWaveTemplate, ANIM_ATTACKER, 40, 0x32, 0xa00, 0x60, 0x1 delay 0x2 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET - launchtemplate gThousandWavesPoundImpactTemplate 0x82, 0x4, 0x1 0xfffa 0x0 0x3 + createsprite gThousandWavesPoundImpactTemplate, ANIM_TARGET, 2, 0x1, 0xfffa, 0x0, 0x3 return Move_LANDS_WRATH:: loadspritegfx ANIM_TAG_WATER_ORB @whirl motion loadspritegfx ANIM_TAG_SPARK_2 @yellow color monbg ANIM_ATTACKER - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xE 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xE, 0x0 waitforvisualfinish call LandsWrathVortex call LandsWrathVortex @@ -10039,51 +10037,51 @@ Move_LANDS_WRATH:: fadetobg BG_FISSURE waitbgfadeout playsewithpan SE_M_EARTHQUAKE, 0x0 - launchtask AnimTask_HorizontalShake 0x5 0x3 0x5 0xa 0x32 - launchtask AnimTask_HorizontalShake 0x5 0x3 0x4 0xa 0x32 - launchtask AnimTask_PositionFissureBgOnBattler 0x5 0x3 0x1 0x5 0xffff + createvisualtask AnimTask_HorizontalShake, 0x5, 0x5, 0xa, 0x32 + createvisualtask AnimTask_HorizontalShake, 0x5, 0x4, 0xa, 0x32 + createvisualtask AnimTask_PositionFissureBgOnBattler, 0x5, 0x1, 0x5, 0xffff waitbgfadein waitforvisualfinish call UnsetPsychicBg - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x0 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x0, 0x0 clearmonbg ANIM_ATTACKER end LandsWrathVortex: playsewithpan SE_M_SACRED_FIRE2 SOUND_PAN_TARGET - launchtemplate gLandsWrathVortexTemplate 0x82 0x7 0x0 0x1c 0x180 0x32 0x8 0x32 0x0 + createsprite gLandsWrathVortexTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x180, 0x32, 0x8, 0x32, 0x0 delay 0x2 - launchtemplate gLandsWrathVortexTemplate 0x82 0x7 0x0 0x20 0xf0 0x28 0xb 0xffd2 0x0 + createsprite gLandsWrathVortexTemplate, ANIM_TARGET, 2, 0x0, 0x20, 0xf0, 0x28, 0xb, 0xffd2, 0x0 delay 0x2 - launchtemplate gLandsWrathVortexTemplate 0x82 0x7 0x0 0x21 0x1a0 0x28 0x4 0x2a 0x0 + createsprite gLandsWrathVortexTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1a0, 0x28, 0x4, 0x2a, 0x0 delay 0x2 - launchtemplate gLandsWrathVortexTemplate 0x82 0x7 0x0 0x1f 0x120 0x2d 0x6 0xffd6 0x0 + createsprite gLandsWrathVortexTemplate, ANIM_TARGET, 2, 0x0, 0x1f, 0x120, 0x2d, 0x6, 0xffd6, 0x0 delay 0x2 - launchtemplate gLandsWrathVortexTemplate 0x82 0x7 0x0 0x1c 0x1c0 0x2d 0xb 0x2e 0x0 + createsprite gLandsWrathVortexTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x1c0, 0x2d, 0xb, 0x2e, 0x0 delay 0x2 - launchtemplate gLandsWrathVortexTemplate 0x82 0x7 0x0 0x21 0x1d0 0x32 0xa 0xffce 0x0 + createsprite gLandsWrathVortexTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1d0, 0x32, 0xa, 0xffce, 0x0 delay 0x2 return Move_LIGHT_OF_RUIN:: loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge - loadspritegfx ANIM_TAG_ELECTRIC_ORBS @launchtask particles + loadspritegfx ANIM_TAG_ELECTRIC_ORBS @createvisualtask particles loadspritegfx ANIM_TAG_ORBS @beam particles loadspritegfx ANIM_TAG_ELECTRICITY @discharge loadspritegfx ANIM_TAG_PINK_PETAL @pink color loadspritegfx ANIM_TAG_EXPLOSION @explosion createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ELECTRIC_ORBS, 0, 0xC, 0xC, 0x6DDE @Pink waitforvisualfinish - launchtask AnimTask_ElectricChargingParticles 0x2 0x4 0x0 0x14 0x0 0x2 + createvisualtask AnimTask_ElectricChargingParticles, 0x2, 0x0, 0x14, 0x0, 0x2 panse SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xF 0x6B1F - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_ATTACKER 0x0 0x4 0x32 0x1 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xF, 0x6B1F + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_ATTACKER, 0x0, 0x4, 0x32, 0x1 createvisualtask AnimTask_FlashAnimTagWithColor, 2, ANIM_TAG_ORBS, 1, 12, RGB_RED, 16, 0, 0 call LightOfRuinBeam call LightOfRuinBeam call LightOfRuinBeam call LightOfRuinBeam call LightOfRuinBeam - launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x4 0x0 0x32 0x1 + createvisualtask AnimTask_ShakeMon2, 0x2, 0x1, 0x4, 0x0, 0x32, 0x1 call LightOfRuinBeam call LightOfRuinBeam call LightOfRuinBeam @@ -10107,21 +10105,21 @@ Move_LIGHT_OF_RUIN:: call LightOfRuinBeam delay 0x20 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gLightOfRuinPinkDischargeTemplate 0x2 0x3 0x1 0x10 0x10 + createsprite gLightOfRuinPinkDischargeTemplate, ANIM_ATTACKER, 2, 0x1, 0x10, 0x10 delay 0x2 - launchtemplate gLightOfRuinPinkDischargeTemplate 0x2 0x3 0x1 0xfff0 0xfff0 + createsprite gLightOfRuinPinkDischargeTemplate, ANIM_ATTACKER, 2, 0x1, 0xfff0, 0xfff0 delay 0x5 - launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_TARGET 0x0 0x5 0xb 0x1 - launchtemplate gLightOfRuinPinkExplosionTemplate 0x3 0x4 0x0 0x0 0x1 0x1 + createvisualtask AnimTask_ShakeMon, 0x5, ANIM_TARGET, 0x0, 0x5, 0xb, 0x1 + createsprite gLightOfRuinPinkExplosionTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x1, 0x1 delay 0x10 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x10 0x0 0x7FFF + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x10, 0x0, 0x7FFF waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ALL_BATTLERS 0x1 0x0 0x0 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BATTLERS, 0x1, 0x0, 0x0, 0x0 waitforvisualfinish end LightOfRuinBeam: - launchtemplate gLightOfRuinPinkOrbsTemplate 0x82 0x0 - launchtemplate gLightOfRuinPinkOrbsTemplate 0x82 0x0 + createsprite gLightOfRuinPinkOrbsTemplate, ANIM_TARGET, 2 + createsprite gLightOfRuinPinkOrbsTemplate, ANIM_TARGET, 2 delay 0x1 return @@ -10134,63 +10132,63 @@ Move_ORIGIN_PULSE:: setalpha 8, 8 fadetobg BG_WATER waitbgfadeout - launchtask AnimTask_StartSlidingBg 0x5 0x4 0x400 0x0 0x1 0xffff + createvisualtask AnimTask_StartSlidingBg, 0x5, 0x400, 0x0, 0x1, 0xffff waitbgfadein - launchtemplate gOriginPulseRingTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1F 0x8 + createsprite gOriginPulseRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0, 0x1F, 0x8 playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER delay 0x10 - launchtemplate gOriginPulseRingTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1F 0x8 + createsprite gOriginPulseRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0, 0x1F, 0x8 delay 0x10 - launchtemplate gOriginPulseRingTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1F 0x8 + createsprite gOriginPulseRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0, 0x1F, 0x8 playsewithpan SE_INTRO_BLAST, SOUND_PAN_ATTACKER waitforvisualfinish - launchtemplate gOriginPulseOrbTemplate 0x2 0x1 0x0 - launchtemplate gOriginPulseOrbTemplate 0x2 0x1 0x2b - launchtemplate gOriginPulseOrbTemplate 0x2 0x1 0x55 - launchtemplate gOriginPulseOrbTemplate 0x2 0x1 0x80 - launchtemplate gOriginPulseOrbTemplate 0x2 0x1 0xaa - launchtemplate gOriginPulseOrbTemplate 0x2 0x1 0xd5 + createsprite gOriginPulseOrbTemplate, ANIM_ATTACKER, 2, 0x0 + createsprite gOriginPulseOrbTemplate, ANIM_ATTACKER, 2, 0x2b + createsprite gOriginPulseOrbTemplate, ANIM_ATTACKER, 2, 0x55 + createsprite gOriginPulseOrbTemplate, ANIM_ATTACKER, 2, 0x80 + createsprite gOriginPulseOrbTemplate, ANIM_ATTACKER, 2, 0xaa + createsprite gOriginPulseOrbTemplate, ANIM_ATTACKER, 2, 0xd5 delay 0x35 - launchtemplate gOriginPulseRingTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1F 0x8 + createsprite gOriginPulseRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0, 0x1F, 0x8 delay 0x10 - launchtemplate gOriginPulseRingTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1F 0x8 + createsprite gOriginPulseRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0, 0x1F, 0x8 waitforvisualfinish delay 0x2F - launchtemplate gOriginPulseOrbInwardTemplate 0x82 0x5 0x1 0x0 0x0 0xFF90 0x10 @up - launchtemplate gOriginPulseOrbInwardTemplate 0x82 0x5 0x1 0x0 0x5F 0xFF9D 0x10 @upper right - launchtemplate gOriginPulseOrbInwardTemplate 0x82 0x5 0x1 0x0 0x73 0x0 0x10 @right - launchtemplate gOriginPulseOrbInwardTemplate 0x82 0x5 0x1 0x0 0x4F 0x37 0x10 @lower right - launchtemplate gOriginPulseOrbInwardTemplate 0x82 0x5 0x1 0x0 0x0 0x53 0x10 @down - launchtemplate gOriginPulseOrbInwardTemplate 0x82 0x5 0x1 0x0 0xFFB0 0x43 0x10 @lower left - launchtemplate gOriginPulseOrbInwardTemplate 0x82 0x5 0x1 0x0 0xFF60 0x0 0x10 @left - launchtemplate gOriginPulseOrbInwardTemplate 0x82 0x5 0x1 0x0 0xFFAA 0xFF94 0x10 @upper left + createsprite gOriginPulseOrbInwardTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x0, 0xFF90, 0x10 @up + createsprite gOriginPulseOrbInwardTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x5F, 0xFF9D, 0x10 @upper right + createsprite gOriginPulseOrbInwardTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x73, 0x0, 0x10 @right + createsprite gOriginPulseOrbInwardTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x4F, 0x37, 0x10 @lower right + createsprite gOriginPulseOrbInwardTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x0, 0x53, 0x10 @down + createsprite gOriginPulseOrbInwardTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0xFFB0, 0x43, 0x10 @lower left + createsprite gOriginPulseOrbInwardTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0xFF60, 0x0, 0x10 @left + createsprite gOriginPulseOrbInwardTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0xFFAA, 0xFF94, 0x10 @upper left delay 0x5 - launchtemplate gOriginPulseOrbInwardTemplate 0x82 0x5 0x1 0x0 0x2D 0xFF9D 0x10 @between up and upper right - launchtemplate gOriginPulseOrbInwardTemplate 0x82 0x5 0x1 0x0 0xDF 0xFF9D 0x10 @between right and upper right - launchtemplate gOriginPulseOrbInwardTemplate 0x82 0x5 0x1 0x0 0x9F 0x37 0x10 @between right and lower right - launchtemplate gOriginPulseOrbInwardTemplate 0x82 0x5 0x1 0x0 0x1F 0x37 0x10 @between lower right and down - launchtemplate gOriginPulseOrbInwardTemplate 0x82 0x5 0x1 0x0 0xFFE0 0x43 0x10 @between lower left and down - launchtemplate gOriginPulseOrbInwardTemplate 0x82 0x5 0x1 0x0 0xFF60 0x43 0x10 @between left and lower left - launchtemplate gOriginPulseOrbInwardTemplate 0x82 0x5 0x1 0x0 0xFF2A 0xFFAA 0x10 @between left and upper left - launchtemplate gOriginPulseOrbInwardTemplate 0x82 0x5 0x1 0x0 0xFFDA 0xFF94 0x10 @between up and upper left + createsprite gOriginPulseOrbInwardTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x2D, 0xFF9D, 0x10 @between up and upper right + createsprite gOriginPulseOrbInwardTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0xDF, 0xFF9D, 0x10 @between right and upper right + createsprite gOriginPulseOrbInwardTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x9F, 0x37, 0x10 @between right and lower right + createsprite gOriginPulseOrbInwardTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x1F, 0x37, 0x10 @between lower right and down + createsprite gOriginPulseOrbInwardTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0xFFE0, 0x43, 0x10 @between lower left and down + createsprite gOriginPulseOrbInwardTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0xFF60, 0x43, 0x10 @between left and lower left + createsprite gOriginPulseOrbInwardTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0xFF2A, 0xFFAA, 0x10 @between left and upper left + createsprite gOriginPulseOrbInwardTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0xFFDA, 0xFF94, 0x10 @between up and upper left waitforvisualfinish createvisualtaskontargets AnimTask_ShakeMon2, 5, 0, ANIM_TARGET, 2, 0, 18, 1 monbg ANIM_DEF_PARTNER - launchtemplate gOriginPulseBasicSplatTemplate 0x83 0x4 0xffb0 0xfff0 0x1 0x1 + createsprite gOriginPulseBasicSplatTemplate, ANIM_TARGET, 3, 0xffb0, 0xfff0, 0x1, 0x1 stopsound playsewithpan SE_M_HYDRO_PUMP, SOUND_PAN_ATTACKER delay 0x5 - launchtemplate gOriginPulseBlueImpactTemplate 0x83 0x2 0x1 0x1 + createsprite gOriginPulseBlueImpactTemplate, ANIM_TARGET, 3, 0x1, 0x1 delay 0x5 - launchtemplate gOriginPulseBasicSplatTemplate 0x83 0x4 0x0 0x0 0x1 0x1 + createsprite gOriginPulseBasicSplatTemplate, ANIM_TARGET, 3, 0x0, 0x0, 0x1, 0x1 delay 0x5 - launchtemplate gOriginPulseBlueImpactTemplate 0x83 0x2 0x1 0x1 + createsprite gOriginPulseBlueImpactTemplate, ANIM_TARGET, 3, 0x1, 0x1 delay 0x5 - launchtemplate gOriginPulseBasicSplatTemplate 0x83 0x4 0xffc0 0x14 0x1 0x1 + createsprite gOriginPulseBasicSplatTemplate, ANIM_TARGET, 3, 0xffc0, 0x14, 0x1, 0x1 delay 0x5 - launchtemplate gOriginPulseBlueImpactTemplate 0x83 0x2 0x1 0x1 + createsprite gOriginPulseBlueImpactTemplate, ANIM_TARGET, 3, 0x1, 0x1 delay 0x5 - launchtemplate gOriginPulseBasicSplatTemplate 0x83 0x4 0xffe0 0x5 0x1 0x1 + createsprite gOriginPulseBasicSplatTemplate, ANIM_TARGET, 3, 0xffe0, 0x5, 0x1, 0x1 waitsound call UnsetPsychicBg clearmonbg ANIM_DEF_PARTNER @@ -10206,51 +10204,51 @@ Move_PRECIPICE_BLADES:: setalpha 12, 8 fadetobg 0x15 waitbgfadeout - launchtask AnimTask_PositionFissureBgOnBattler 0x5 0x3 0x1 0x5 0xffff - launchtask AnimTask_HorizontalShake 0x5 0x3 0x5 0xa 0x5 - launchtask AnimTask_HorizontalShake 0x5 0x3 0x4 0xa 0x5 + createvisualtask AnimTask_PositionFissureBgOnBattler, 0x5, 0x1, 0x5, 0xffff + createvisualtask AnimTask_HorizontalShake, 0x5, 0x5, 0xa, 0x5 + createvisualtask AnimTask_HorizontalShake, 0x5, 0x4, 0xa, 0x5 playsewithpan SE_M_EARTHQUAKE, 0x0 - launchtask AnimTask_IsTargetPlayerSide 0x2 0x0 + createvisualtask AnimTask_IsTargetPlayerSide, 0x2 jumpargeq 0x7, ANIM_TARGET, PrecipiceBladesOpponent PrecipiceBladesPlayer: - launchtemplate gPrecipiceBladesSpikeTemplate 3, 0x5, ANIM_ATTACKER, -45, 5, 145 0x0 + createsprite gPrecipiceBladesSpikeTemplate, ANIM_ATTACKER, 3, ANIM_ATTACKER, -45, 5, 145, 0x0 delay 10 - launchtemplate gPrecipiceBladesSpikeTemplate 3, 0x5, ANIM_ATTACKER, 10, 7, 135 0x0 + createsprite gPrecipiceBladesSpikeTemplate, ANIM_ATTACKER, 3, ANIM_ATTACKER, 10, 7, 135, 0x0 delay 10 - launchtemplate gPrecipiceBladesSpikeTemplate 4, 0x5, ANIM_ATTACKER, -30, 15, 125 0x0 + createsprite gPrecipiceBladesSpikeTemplate, ANIM_ATTACKER, 4, ANIM_ATTACKER, -30, 15, 125, 0x0 delay 5 - launchtemplate gPrecipiceBladesSpikeTemplate 5, 0x5, ANIM_ATTACKER, -10, 17, 120 0x0 + createsprite gPrecipiceBladesSpikeTemplate, ANIM_ATTACKER, 5, ANIM_ATTACKER, -10, 17, 120, 0x0 PrecipiceBladesContinue: delay 0x10 - launchtemplate gPrecipiceBladesPlumeTemplate 0x82, 0x3, -15, 18, ANIM_TARGET - launchtemplate gPrecipiceBladesPlumeTemplate 0x82, 0x3, -15, 18, ANIM_DEF_PARTNER + createsprite gPrecipiceBladesPlumeTemplate, ANIM_TARGET, 2, -15, 18, ANIM_TARGET + createsprite gPrecipiceBladesPlumeTemplate, ANIM_TARGET, 2, -15, 18, ANIM_DEF_PARTNER delay 0x20 - launchtemplate gPrecipiceBladesPlumeTemplate 0x82, 0x3, 15, 18, ANIM_TARGET - launchtemplate gPrecipiceBladesPlumeTemplate 0x82, 0x3, 15, 18, ANIM_DEF_PARTNER + createsprite gPrecipiceBladesPlumeTemplate, ANIM_TARGET, 2, 15, 18, ANIM_TARGET + createsprite gPrecipiceBladesPlumeTemplate, ANIM_TARGET, 2, 15, 18, ANIM_DEF_PARTNER delay 0x20 stopsound playsewithpan SE_M_STRENGTH, SOUND_PAN_TARGET - launchtemplate gPrecipiceBladesLargeSpikeTemplate 0x82, 0x5, ANIM_TARGET, 0, -25, 40, 0x0 - launchtemplate gPrecipiceBladesLargeSpikeTemplate 0x82, 0x5, ANIM_DEF_PARTNER, 0, -25, 40, 0x0 + createsprite gPrecipiceBladesLargeSpikeTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0, -25, 40, 0x0 + createsprite gPrecipiceBladesLargeSpikeTemplate, ANIM_TARGET, 2, ANIM_DEF_PARTNER, 0, -25, 40, 0x0 delay 0x6 - launchtemplate gSlideMonToOffsetSpriteTemplate 0x82, 0x5, ANIM_TARGET, -20 0 0x6 0x1 - launchtemplate gSlideMonToOffsetSpriteTemplate 0x82, 0x5, ANIM_DEF_PARTNER, -20 0 0x6 0x1 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, -20, 0, 0x6, 0x1 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_TARGET, 2, ANIM_DEF_PARTNER, -20, 0, 0x6, 0x1 delay 0x22 - launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x82, 0x3 ANIM_TARGET 0x0 0x6 - launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x82, 0x3 ANIM_DEF_PARTNER 0x0 0x6 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x0, 0x6 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_TARGET, 2, ANIM_DEF_PARTNER, 0x0, 0x6 waitforvisualfinish call UnsetPsychicBg clearmonbg ANIM_DEF_PARTNER blendoff end PrecipiceBladesOpponent: - launchtemplate gPrecipiceBladesSpikeTemplate 0x43, 0x5, ANIM_ATTACKER, 35, -5, 145 0x0 + createsprite gPrecipiceBladesSpikeTemplate, ANIM_ATTACKER, 67, ANIM_ATTACKER, 35, -5, 145, 0x0 delay 10 - launchtemplate gPrecipiceBladesSpikeTemplate 0x43, 0x5, ANIM_ATTACKER, -20, -7, 135 0x0 + createsprite gPrecipiceBladesSpikeTemplate, ANIM_ATTACKER, 67, ANIM_ATTACKER, -20, -7, 135, 0x0 delay 10 - launchtemplate gPrecipiceBladesSpikeTemplate 0x44, 0x5, ANIM_ATTACKER, 20, -15, 125 0x0 + createsprite gPrecipiceBladesSpikeTemplate, ANIM_ATTACKER, 68, ANIM_ATTACKER, 20, -15, 125, 0x0 delay 5 - launchtemplate gPrecipiceBladesSpikeTemplate 0x45, 0x5, ANIM_ATTACKER, 0, -17, 120 0x0 + createsprite gPrecipiceBladesSpikeTemplate, ANIM_ATTACKER, 69, ANIM_ATTACKER, 0, -17, 120, 0x0 goto PrecipiceBladesContinue Move_DRAGON_ASCENT:: @@ -10259,34 +10257,34 @@ Move_DRAGON_ASCENT:: createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_IMPACT, 0, 11, 11, RGB(16, 31, 16) fadetobg BG_COSMIC waitbgfadeout - launchtask AnimTask_StartSlidingBg, 0x2 0x4, 0, 128, 0, -1 + createvisualtask AnimTask_StartSlidingBg, 0x2, 0, 128, 0, -1 waitbgfadein playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER invisible ANIM_ATTACKER - launchtemplate gDragonAscentFlyUpTemplate 0x2 0x7 0x0 0x0 0x400 0x24 0x15 0x1 ANIM_ATTACKER + createsprite gDragonAscentFlyUpTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x400, 0x24, 0x15, 0x1, ANIM_ATTACKER waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal, 0xa 0x5, (ANIM_PAL_ATK | ANIM_PAL_BG | ANIM_PAL_BG_4 | ANIM_PAL_BG_5), 4, 0, 14, RGB(21, 31, 27) + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_ATTACKER | F_PAL_BG | F_PAL_ANIM_1 | F_PAL_ANIM_2), 4, 0, 14, RGB(21, 31, 27) playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER waitforvisualfinish playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER - launchtask AnimTask_StartSlidingBg, 0x5 0x4, -7304, -784, 1, -1 + createvisualtask AnimTask_StartSlidingBg, 0x5, -7304, -784, 1, -1 delay 2 - launchtask AnimTask_BlendBattleAnimPal, 0xa 0x5, (ANIM_PAL_ATK | ANIM_PAL_BG | ANIM_PAL_BG_4 | ANIM_PAL_BG_5), 0, 14, 0, RGB(21, 31, 27) + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_ATTACKER | F_PAL_BG | F_PAL_ANIM_1 | F_PAL_ANIM_2), 0, 14, 0, RGB(21, 31, 27) waitforvisualfinish delay 1 monbg ANIM_DEF_PARTNER setalpha 12, 8 playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER - launchtemplate gDragonAscentDrakeTemplate, 2, 0x1 5 + createsprite gDragonAscentDrakeTemplate, ANIM_ATTACKER, 2, 5 delay 1 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET - launchtemplate gBasicHitSplatSpriteTemplate, 0x84, 0x4, -10, 0, 1, 0 - launchtemplate gSlideMonToOffsetSpriteTemplate, 2, 0x5, 0x1, -32, 0, 0, 3 - launchtask AnimTask_ShakeMonInPlace, 0x2 0x5, ANIM_TARGET, 6, 0, 12, 1 - launchtask AnimTask_BlendBattleAnimPal, 0xa 0x5, (ANIM_PAL_ATK | ANIM_PAL_BG | ANIM_PAL_BG_4 | ANIM_PAL_BG_5), 2, 16, 0, RGB(26, 31, 0) + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, -10, 0, 1, 0 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0x1, -32, 0, 0, 3 + createvisualtask AnimTask_ShakeMonInPlace, 0x2, ANIM_TARGET, 6, 0, 12, 1 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_ATTACKER | F_PAL_BG | F_PAL_ANIM_1 | F_PAL_ANIM_2), 2, 16, 0, RGB(26, 31, 0) waitforvisualfinish delay 3 - launchtemplate gSlideMonToOriginalPosSpriteTemplate, 2, 0x3, 1, 0, 7 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 7 waitforvisualfinish blendoff clearmonbg ANIM_DEF_PARTNER @@ -10298,68 +10296,68 @@ Move_HYPERSPACE_FURY:: loadspritegfx ANIM_TAG_HOOPA_RING @Hoopa Ring loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_POISON_BUBBLE - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xA 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xA, 0x0 waitforvisualfinish playsewithpan SE_M_NIGHTMARE, SOUND_PAN_ATTACKER - launchtemplate gHyperspaceFuryRingTemplate 0x3 0x4 0x0 0x0 0x38 0x0 + createsprite gHyperspaceFuryRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x0 delay 0x5 - launchtemplate gHyperspaceFuryRingTemplate 0x3 0x4 0x0 0x0 0x38 0x4 + createsprite gHyperspaceFuryRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x4 delay 0x5 - launchtemplate gHyperspaceFuryRingTemplate 0x3 0x4 0x0 0x0 0x38 0x8 + createsprite gHyperspaceFuryRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x8 delay 0x5 - launchtemplate gHyperspaceFuryRingTemplate 0x3 0x4 0x0 0x0 0x38 0xc + createsprite gHyperspaceFuryRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0xc delay 0x5 - launchtemplate gHyperspaceFuryRingTemplate 0x3 0x4 0x0 0x0 0x38 0x10 + createsprite gHyperspaceFuryRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x10 delay 0x15 invisible ANIM_ATTACKER waitforvisualfinish fadetobg BG_HYPERSPACE_FURY waitbgfadeout - launchtask AnimTask_SetPsychicBackground 0x5 0x0 + createvisualtask AnimTask_SetPsychicBackground, 0x5 waitbgfadein loopsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET, 0x2, 0x10 - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0 0x3 0x20 0x1 - launchtemplate gHyperspaceFuryHandTemplate 0x82 0x5 0x1 0x0 0x0 0xffe0 0x10 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x0, 0x3, 0x20, 0x1 + createsprite gHyperspaceFuryHandTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x0, 0xffe0, 0x10 call HyperspaceFuryRandomImpact delay 0x2 - launchtemplate gHyperspaceFuryHandTemplate 0x82 0x5 0x1 0x0 0x16 0xffea 0x10 + createsprite gHyperspaceFuryHandTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x16, 0xffea, 0x10 call HyperspaceFuryRandomImpact delay 0x2 - launchtemplate gHyperspaceFuryHandTemplate 0x82 0x5 0x1 0x0 0x1e 0x0 0x10 + createsprite gHyperspaceFuryHandTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x1e, 0x0, 0x10 call HyperspaceFuryRandomImpact delay 0x2 - launchtask AnimTask_IsTargetSameSide 0x2 0x0 - launchtask AnimTask_SnatchOpposingMonMove 0x2 0x0 - launchtemplate gHyperspaceFuryHandTemplate 0x82 0x5 0x1 0x0 0x14 0x14 0x10 + createvisualtask AnimTask_IsTargetSameSide, 0x2 + createvisualtask AnimTask_SnatchOpposingMonMove, 0x2 + createsprite gHyperspaceFuryHandTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x14, 0x14, 0x10 call HyperspaceFuryRandomImpact delay 0x2 - launchtemplate gHyperspaceFuryHandTemplate 0x82 0x5 0x1 0x0 0x0 0x1c 0x10 + createsprite gHyperspaceFuryHandTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x0, 0x1c, 0x10 call HyperspaceFuryRandomImpact delay 0x2 - launchtemplate gHyperspaceFuryHandTemplate 0x82 0x5 0x1 0x0 0xffed 0x13 0x10 + createsprite gHyperspaceFuryHandTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0xffed, 0x13, 0x10 call HyperspaceFuryRandomImpact delay 0x2 - launchtemplate gHyperspaceFuryHandTemplate 0x82 0x5 0x1 0x0 0xffe5 0x0 0x10 + createsprite gHyperspaceFuryHandTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0xffe5, 0x0, 0x10 call HyperspaceFuryRandomImpact delay 0x2 - launchtemplate gHyperspaceFuryHandTemplate 0x82 0x5 0x1 0x0 0xffee 0xffee 0x10 + createsprite gHyperspaceFuryHandTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0xffee, 0xffee, 0x10 call HyperspaceFuryRandomImpact delay 0x2 - launchtemplate gHyperspaceFuryHandTemplate 0x82 0x5 0x1 0x0 0x0 0xffe7 0x10 + createsprite gHyperspaceFuryHandTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x0, 0xffe7, 0x10 call HyperspaceFuryRandomImpact delay 0x2 - launchtemplate gHyperspaceFuryHandTemplate 0x82 0x5 0x1 0x0 0x11 0xffef 0x10 + createsprite gHyperspaceFuryHandTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x11, 0xffef, 0x10 call HyperspaceFuryRandomImpact delay 0x2 - launchtemplate gHyperspaceFuryHandTemplate 0x82 0x5 0x1 0x0 0x17 0x0 0x10 + createsprite gHyperspaceFuryHandTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x17, 0x0, 0x10 call HyperspaceFuryRandomImpact delay 0x2 - launchtemplate gHyperspaceFuryHandTemplate 0x82 0x5 0x1 0x0 0x10 0x10 0x10 + createsprite gHyperspaceFuryHandTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x10, 0x10, 0x10 call HyperspaceFuryRandomImpact delay 0x7 - launchtask SoundTask_PlayDoubleCry 0x2 0x2 ANIM_ATTACKER 0xff + createvisualtask SoundTask_PlayDoubleCry, 0x2, ANIM_ATTACKER, 0xff visible ANIM_ATTACKER - launchtask AnimTask_ShakeMon2 0x2 0x5 ANIM_TARGET 0x0 0x3 0x20 0x1 + createvisualtask AnimTask_ShakeMon2, 0x2, ANIM_TARGET, 0x0, 0x3, 0x20, 0x1 playsewithpan SE_M_FIRE_PUNCH, SOUND_PAN_TARGET invisible ANIM_ATTACKER call UnsetPsychicBg @@ -10373,10 +10371,10 @@ Move_HYPERSPACE_FURY:: invisible ANIM_ATTACKER delay 0x1 visible ANIM_ATTACKER - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x0 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x0, 0x0 end HyperspaceFuryRandomImpact: - launchtemplate gHyperspaceFuryImpactTemplate 0x83 0x2 0x1 0x1 + createsprite gHyperspaceFuryImpactTemplate, ANIM_TARGET, 3, 0x1, 0x1 return @@@@@@@@@@@@@@@@@@@@@@@ GEN 7 @@@@@@@@@@@@@@@@@@@@@@@ @@ -10384,21 +10382,21 @@ Move_SHORE_UP:: loadspritegfx ANIM_TAG_FLYING_DIRT @sandstorm loadspritegfx ANIM_TAG_BLUE_STAR @heal2 playsewithpan SE_M_SANDSTORM, 0x0 - launchtask AnimTask_LoadSandstormBackground 0x5 0x1 0x0 + createvisualtask AnimTask_LoadSandstormBackground, 0x5, 0x0 delay 0x10 - launchtemplate gFlyingSandCrescentSpriteTemplate 0x28 0x4 0xa 0x900 0x60 0x0 + createsprite gFlyingSandCrescentSpriteTemplate, ANIM_ATTACKER, 40, 0xa, 0x900, 0x60, 0x0 delay 0xa - launchtemplate gFlyingSandCrescentSpriteTemplate 0x28 0x4 0x5a 0x800 0x60 0x0 + createsprite gFlyingSandCrescentSpriteTemplate, ANIM_ATTACKER, 40, 0x5a, 0x800, 0x60, 0x0 delay 0xa - launchtemplate gFlyingSandCrescentSpriteTemplate 0x28 0x4 0x32 0xa00 0x60 0x0 + createsprite gFlyingSandCrescentSpriteTemplate, ANIM_ATTACKER, 40, 0x32, 0xa00, 0x60, 0x0 delay 0xa - launchtemplate gFlyingSandCrescentSpriteTemplate 0x28 0x4 0x14 0x900 0x60 0x0 + createsprite gFlyingSandCrescentSpriteTemplate, ANIM_ATTACKER, 40, 0x14, 0x900, 0x60, 0x0 delay 0xa - launchtemplate gFlyingSandCrescentSpriteTemplate 0x28 0x4 0x46 0x7c0 0x60 0x0 + createsprite gFlyingSandCrescentSpriteTemplate, ANIM_ATTACKER, 40, 0x46, 0x7c0, 0x60, 0x0 delay 0xa - launchtemplate gFlyingSandCrescentSpriteTemplate 0x28 0x4 0x0 0xb00 0x60 0x0 + createsprite gFlyingSandCrescentSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0xb00, 0x60, 0x0 delay 0xa - launchtemplate gFlyingSandCrescentSpriteTemplate 0x28 0x4 0x3c 0xa00 0x60 0x0 + createsprite gFlyingSandCrescentSpriteTemplate, ANIM_ATTACKER, 40, 0x3c, 0xa00, 0x60, 0x0 call HealingEffect waitforvisualfinish end @@ -10407,28 +10405,28 @@ Move_FIRST_IMPRESSION:: loadspritegfx ANIM_TAG_SWEAT_BEAD @astonish loadspritegfx ANIM_TAG_IMPACT @pound hit loadspritegfx ANIM_TAG_RAZOR_LEAF @green - launchtemplate gSprayWaterDropletSpriteTemplate 0x85 0x2 0x0 0x1 + createsprite gSprayWaterDropletSpriteTemplate, ANIM_TARGET, 5, 0x0, 0x1 playsewithpan SE_M_SKETCH, SOUND_PAN_TARGET - launchtemplate gSprayWaterDropletSpriteTemplate 0x85 0x2 0x1 0x1 - launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x4 0x0 0x5 0x1 - launchtask AnimTask_StretchTargetUp 0x3 0x0 + createsprite gSprayWaterDropletSpriteTemplate, ANIM_TARGET, 5, 0x1, 0x1 + createvisualtask AnimTask_ShakeMon2, 0x2, 0x1, 0x4, 0x0, 0x5, 0x1 + createvisualtask AnimTask_StretchTargetUp, 0x3 waitforvisualfinish delay 0x19 - launchtemplate gHorizontalLungeSpriteTemplate 0x2 0x2 0x4 0x6 + createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 0x4, 0x6 waitforvisualfinish monbg ANIM_TARGET @This is placed here on purpose (to not ruin astonishs animation) delay 0x1 - launchtemplate gFirstImpressionPoundTemplate 0x4 0x4 0xfff6 0x0 0x1 0x0 + createsprite gFirstImpressionPoundTemplate, ANIM_ATTACKER, 4, 0xfff6, 0x0, 0x1, 0x0 loopsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET 0xA 0x2 delay 0x1 - launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xffe4 0x0 0x0 0x3 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0xffe4, 0x0, 0x0, 0x3 waitforvisualfinish - launchtask AnimTask_ShakeMonInPlace 0x2 0x5 0x1 0x4 0x0 0xc 0x1 + createvisualtask AnimTask_ShakeMonInPlace, 0x2, 0x1, 0x4, 0x0, 0xc, 0x1 waitforvisualfinish delay 0xa - launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0x0 0x6 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x6 delay 0x5 - launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x6 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x6 waitforvisualfinish clearmonbg ANIM_TARGET end @@ -10439,22 +10437,22 @@ Move_BANEFUL_BUNKER:: monbg ANIM_ATK_PARTNER splitbgprio ANIM_ATTACKER waitplaysewithpan SE_M_REFLECT, SOUND_PAN_ATTACKER 0x10 - launchtemplate gProtectSpriteTemplate 0x2 0x3 0x18 0x0 0x5a - launchtemplate gBanefulBunkerPoisonBubbleTemplate 0x2 0x4 0xa 0xa 0x19 0x0 + createsprite gProtectSpriteTemplate, ANIM_ATTACKER, 2, 0x18, 0x0, 0x5a + createsprite gBanefulBunkerPoisonBubbleTemplate, ANIM_ATTACKER, 2, 0xa, 0xa, 0x19, 0x0 delay 0x4 - launchtemplate gBanefulBunkerPoisonBubbleTemplate 0x2 0x4 0xfff1 0x0 0x19 0x0 + createsprite gBanefulBunkerPoisonBubbleTemplate, ANIM_ATTACKER, 2, 0xfff1, 0x0, 0x19, 0x0 delay 0x4 - launchtemplate gBanefulBunkerPoisonBubbleTemplate 0x2 0x4 0x14 0xa 0x19 0x0 + createsprite gBanefulBunkerPoisonBubbleTemplate, ANIM_ATTACKER, 2, 0x14, 0xa, 0x19, 0x0 delay 0x4 - launchtemplate gBanefulBunkerPoisonBubbleTemplate 0x2 0x4 0x0 0xfff6 0x19 0x0 + createsprite gBanefulBunkerPoisonBubbleTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff6, 0x19, 0x0 delay 0x4 - launchtemplate gBanefulBunkerPoisonBubbleTemplate 0x2 0x4 0xfff6 0xf 0x19 0x0 + createsprite gBanefulBunkerPoisonBubbleTemplate, ANIM_ATTACKER, 2, 0xfff6, 0xf, 0x19, 0x0 delay 0x4 - launchtemplate gBanefulBunkerPoisonBubbleTemplate 0x2 0x4 0x19 0x14 0x19 0x0 + createsprite gBanefulBunkerPoisonBubbleTemplate, ANIM_ATTACKER, 2, 0x19, 0x14, 0x19, 0x0 delay 0x4 - launchtemplate gBanefulBunkerPoisonBubbleTemplate 0x2 0x4 0xffec 0x14 0x19 0x0 + createsprite gBanefulBunkerPoisonBubbleTemplate, ANIM_ATTACKER, 2, 0xffec, 0x14, 0x19, 0x0 delay 0x4 - launchtemplate gBanefulBunkerPoisonBubbleTemplate 0x2 0x4 0xc 0x0 0x19 0x0 + createsprite gBanefulBunkerPoisonBubbleTemplate, ANIM_ATTACKER, 2, 0xc, 0x0, 0x19, 0x0 waitforvisualfinish clearmonbg ANIM_ATK_PARTNER end @@ -10465,21 +10463,21 @@ Move_SPIRIT_SHACKLE:: monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET setalpha 12, 8 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x10 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x10, 0x0 waitforvisualfinish playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER - launchtemplate gSpiritShackleArrowTemplate 0x82 0x5 0x10 0x0 0x0 0x0 0xf + createsprite gSpiritShackleArrowTemplate, ANIM_TARGET, 2, 0x10, 0x0, 0x0, 0x0, 0xf delay 0x8 - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0xa 0x1 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x3, 0x0, 0xa, 0x1 waitforvisualfinish loopsewithpan SE_SHINY, SOUND_PAN_ATTACKER, 0x1c, 0x2 - launchtemplate gSpiritShackleChainTemplate 0x82 0x2 0xfff0 0xfff0 + createsprite gSpiritShackleChainTemplate, ANIM_TARGET, 2, 0xfff0, 0xfff0 delay 0x4 - launchtemplate gSpiritShackleChainTemplate 0x82 0x2 0xfff0 0x0 + createsprite gSpiritShackleChainTemplate, ANIM_TARGET, 2, 0xfff0, 0x0 delay 0x4 - launchtemplate gSpiritShackleChainTemplate 0x82 0x2 0xfff0 0x10 + createsprite gSpiritShackleChainTemplate, ANIM_TARGET, 2, 0xfff0, 0x10 waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x10 0x0 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x10, 0x0, 0x0 waitforvisualfinish clearmonbg ANIM_DEF_PARTNER blendoff @@ -10488,7 +10486,7 @@ Move_SPIRIT_SHACKLE:: Move_DARKEST_LARIAT:: fadetobg BG_DARK waitbgfadeout - launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0 0x0 0x0 0xffff + createvisualtask AnimTask_StartSlidingBg, 0x5, 0x0, 0x0, 0x0, 0xffff waitbgfadein loadspritegfx ANIM_TAG_IMPACT @hit loadspritegfx ANIM_TAG_POISON_BUBBLE @purple color @@ -10504,8 +10502,8 @@ Move_DARKEST_LARIAT:: waitplaysewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET, 0x46 waitplaysewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER, 0x50 waitplaysewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET, 0x5a - launchtask AnimTask_TranslateMonElliptical 0x2 0x5 0x0 0xffee 0x6 0x6 0x4 - launchtask AnimTask_TranslateMonElliptical 0x2 0x5 0x1 0x12 0x6 0x6 0x4 + createvisualtask AnimTask_TranslateMonElliptical, 0x2, 0x0, 0xffee, 0x6, 0x6, 0x4 + createvisualtask AnimTask_TranslateMonElliptical, 0x2, 0x1, 0x12, 0x6, 0x6, 0x4 call DarkestLariatImpact call DarkestLariatImpact call DarkestLariatImpact @@ -10515,11 +10513,11 @@ Move_DARKEST_LARIAT:: call UnsetPsychicBg end DarkestLariatImpact: - launchtemplate gDarkestLariatImpactTemplate 0x3 0x4 0x0 0xfff4 0x1 0x1 + createsprite gDarkestLariatImpactTemplate, ANIM_ATTACKER, 3, 0x0, 0xfff4, 0x1, 0x1 delay 0x8 - launchtemplate gDarkestLariatImpactTemplate 0x3 0x4 0xfff4 0x8 0x1 0x1 + createsprite gDarkestLariatImpactTemplate, ANIM_ATTACKER, 3, 0xfff4, 0x8, 0x1, 0x1 delay 0x8 - launchtemplate gDarkestLariatImpactTemplate 0x3 0x4 0xc 0x0 0x1 0x1 + createsprite gDarkestLariatImpactTemplate, ANIM_ATTACKER, 3, 0xc, 0x0, 0x1, 0x1 delay 0x8 return @@ -10528,10 +10526,10 @@ Move_SPARKLING_ARIA:: loadspritegfx ANIM_TAG_BUBBLE @circles loadspritegfx ANIM_TAG_HYDRO_PUMP @hydro pump monbg ANIM_ATTACKER - setblends 0x80E - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xE 0x0 + setalpha 14, 8 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xE, 0x0 waitforvisualfinish - launchtemplate gSparklingAriaBlueChargeTemplate 0x2 0x1 0x0 + createsprite gSparklingAriaBlueChargeTemplate, ANIM_ATTACKER, 2, 0x0 call SparklingAriaCharge call SparklingAriaCharge call SparklingAriaCharge @@ -10541,77 +10539,77 @@ Move_SPARKLING_ARIA:: call SparklingAriaRain call SparklingAriaRain waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xE 0x0 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xE, 0x0, 0x0 waitforvisualfinish clearmonbg ANIM_ATTACKER blendoff end SparklingAriaRain: - launchtemplate gSparklingAriaRainTemplate 0x82, 0x3, 0x1 0xdc 0x3c - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x6 0x1 - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_DEF_PARTNER 0x3 0x0 0x6 0x1 + createsprite gSparklingAriaRainTemplate, ANIM_TARGET, 2, 0x1, 0xdc, 0x3c + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x3, 0x0, 0x6, 0x1 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_DEF_PARTNER, 0x3, 0x0, 0x6, 0x1 delay 0x2 - launchtemplate gSparklingAriaBubbleRainTemplate 0x82, 0x3, 0x1 0x3c 0x64 - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x6 0x1 - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_DEF_PARTNER 0x3 0x0 0x6 0x1 + createsprite gSparklingAriaBubbleRainTemplate, ANIM_TARGET, 2, 0x1, 0x3c, 0x64 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x3, 0x0, 0x6, 0x1 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_DEF_PARTNER, 0x3, 0x0, 0x6, 0x1 delay 0x2 - launchtemplate gSparklingAriaRainTemplate 0x82, 0x3, 0x1 0x8c 0x37 - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x6 0x1 - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_DEF_PARTNER 0x3 0x0 0x6 0x1 + createsprite gSparklingAriaRainTemplate, ANIM_TARGET, 2, 0x1, 0x8c, 0x37 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x3, 0x0, 0x6, 0x1 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_DEF_PARTNER, 0x3, 0x0, 0x6, 0x1 delay 0x2 - launchtemplate gSparklingAriaRainTemplate 0x82, 0x3, 0x1 0xb4 0x32 - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x6 0x1 - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_DEF_PARTNER 0x3 0x0 0x6 0x1 + createsprite gSparklingAriaRainTemplate, ANIM_TARGET, 2, 0x1, 0xb4, 0x32 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x3, 0x0, 0x6, 0x1 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_DEF_PARTNER, 0x3, 0x0, 0x6, 0x1 delay 0x2 - launchtemplate gSparklingAriaRainTemplate 0x82, 0x3, 0x1 0x14 0x5a - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x6 0x1 - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_DEF_PARTNER 0x3 0x0 0x6 0x1 + createsprite gSparklingAriaRainTemplate, ANIM_TARGET, 2, 0x1, 0x14, 0x5a + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x3, 0x0, 0x6, 0x1 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_DEF_PARTNER, 0x3, 0x0, 0x6, 0x1 delay 0x2 - launchtemplate gSparklingAriaBubbleRainTemplate 0x82, 0x3, 0x1 0x5a 0x5a - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x6 0x1 - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_DEF_PARTNER 0x3 0x0 0x6 0x1 + createsprite gSparklingAriaBubbleRainTemplate, ANIM_TARGET, 2, 0x1, 0x5a, 0x5a + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x3, 0x0, 0x6, 0x1 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_DEF_PARTNER, 0x3, 0x0, 0x6, 0x1 delay 0x2 - launchtemplate gSparklingAriaRainTemplate 0x82, 0x3, 0x1 0xa0 0x3c - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x6 0x1 - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_DEF_PARTNER 0x3 0x0 0x6 0x1 + createsprite gSparklingAriaRainTemplate, ANIM_TARGET, 2, 0x1, 0xa0, 0x3c + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x3, 0x0, 0x6, 0x1 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_DEF_PARTNER, 0x3, 0x0, 0x6, 0x1 delay 0x2 - launchtemplate gSparklingAriaRainTemplate 0x82, 0x3, 0x1 0x1e 0x5a - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x6 0x1 - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_DEF_PARTNER 0x3 0x0 0x6 0x1 + createsprite gSparklingAriaRainTemplate, ANIM_TARGET, 2, 0x1, 0x1e, 0x5a + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x3, 0x0, 0x6, 0x1 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_DEF_PARTNER, 0x3, 0x0, 0x6, 0x1 delay 0x2 - launchtemplate gSparklingAriaRainTemplate 0x82, 0x3, 0x1 0x78 0x3c - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x6 0x1 - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_DEF_PARTNER 0x3 0x0 0x6 0x1 + createsprite gSparklingAriaRainTemplate, ANIM_TARGET, 2, 0x1, 0x78, 0x3c + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x3, 0x0, 0x6, 0x1 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_DEF_PARTNER, 0x3, 0x0, 0x6, 0x1 delay 0x2 - launchtemplate gSparklingAriaBubbleRainTemplate 0x82, 0x3, 0x1 0xc8 0x28 - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x6 0x1 - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_DEF_PARTNER 0x3 0x0 0x6 0x1 + createsprite gSparklingAriaBubbleRainTemplate, ANIM_TARGET, 2, 0x1, 0xc8, 0x28 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x3, 0x0, 0x6, 0x1 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_DEF_PARTNER, 0x3, 0x0, 0x6, 0x1 delay 0x2 return SparklingAriaCharge: playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER - launchtemplate gSparklingAriaBubblesTemplate 0x2 0x4 0xa 0xa 0x19 0x0 + createsprite gSparklingAriaBubblesTemplate, ANIM_ATTACKER, 2, 0xa, 0xa, 0x19, 0x0 delay 0x4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER - launchtemplate gSparklingAriaBubblesTemplate 0x2 0x4 0xfff1 0x0 0x19 0x0 + createsprite gSparklingAriaBubblesTemplate, ANIM_ATTACKER, 2, 0xfff1, 0x0, 0x19, 0x0 delay 0x4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER - launchtemplate gSparklingAriaBubblesTemplate 0x2 0x4 0x14 0xa 0x19 0x0 + createsprite gSparklingAriaBubblesTemplate, ANIM_ATTACKER, 2, 0x14, 0xa, 0x19, 0x0 delay 0x4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER - launchtemplate gSparklingAriaBubblesTemplate 0x2 0x4 0x0 0xfff6 0x19 0x0 + createsprite gSparklingAriaBubblesTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff6, 0x19, 0x0 delay 0x4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER - launchtemplate gSparklingAriaBubblesTemplate 0x2 0x4 0xfff6 0xf 0x19 0x0 + createsprite gSparklingAriaBubblesTemplate, ANIM_ATTACKER, 2, 0xfff6, 0xf, 0x19, 0x0 delay 0x4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER - launchtemplate gSparklingAriaBubblesTemplate 0x2 0x4 0x19 0x14 0x19 0x0 + createsprite gSparklingAriaBubblesTemplate, ANIM_ATTACKER, 2, 0x19, 0x14, 0x19, 0x0 delay 0x4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER - launchtemplate gSparklingAriaBubblesTemplate 0x2 0x4 0xffec 0x14 0x19 0x0 + createsprite gSparklingAriaBubblesTemplate, ANIM_ATTACKER, 2, 0xffec, 0x14, 0x19, 0x0 delay 0x4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER - launchtemplate gSparklingAriaBubblesTemplate 0x2 0x4 0xc 0x0 0x19 0x0 + createsprite gSparklingAriaBubblesTemplate, ANIM_ATTACKER, 2, 0xc, 0x0, 0x19, 0x0 delay 0x4 return @@ -10621,27 +10619,27 @@ Move_ICE_HAMMER:: loadspritegfx ANIM_TAG_ECLIPSING_ORB @gray color loadspritegfx ANIM_TAG_BLACK_SMOKE @smoke setalpha 12, 8 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xC 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xC, 0x0 waitforvisualfinish playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_TARGET - launchtemplate gIceHammerPunchStompTemplate 0x83, 0x3 0x0 0xffe0 0xf + createsprite gIceHammerPunchStompTemplate, ANIM_TARGET, 3, 0x0, 0xffe0, 0xf delay 0x13 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET - launchtask AnimTask_SquishTarget 0x2 0x0 - launchtemplate gIceHammerSmokesTemplate 0x84, 0x5 0x0 0xfff4 0x68 0x0 0x4b - launchtemplate gIceHammerSmokesTemplate 0x84, 0x5 0x0 0xfff4 0x48 0x1 0x4b - launchtemplate gIceHammerSmokesTemplate 0x84, 0x5 0x0 0xfffa 0x38 0x1 0x4b - launchtemplate gIceHammerSmokesTemplate 0x84, 0x5 0x0 0xfffa 0x58 0x0 0x4b - launchtemplate gIceHammerSmokesTemplate 0x84, 0x5 0x0 0x0 0x38 0x0 0x4b - launchtemplate gIceHammerSmokesTemplate 0x84, 0x5 0x0 0x0 0x58 0x1 0x4b - launchtemplate gIceHammerSmokesTemplate 0x84, 0x5 0x0 0x6 0x48 0x0 0x4b - launchtemplate gIceHammerSmokesTemplate 0x84, 0x5 0x0 0x6 0x68 0x1 0x4b - launchtemplate gIceHammerSmokesTemplate 0x84, 0x5 0x0 0xc 0x48 0x0 0x4b - launchtemplate gIceHammerSmokesTemplate 0x84, 0x5 0x0 0xc 0x38 0x1 0x4b - launchtemplate gIceHammerSmokesTemplate 0x84, 0x5 0x0 0x12 0x50 0x0 0x4b - launchtemplate gIceHammerSmokesTemplate 0x84, 0x5 0x0 0x12 0x48 0x1 0x4b + createvisualtask AnimTask_SquishTarget, 0x2 + createsprite gIceHammerSmokesTemplate, ANIM_TARGET, 4, 0x0, 0xfff4, 0x68, 0x0, 0x4b + createsprite gIceHammerSmokesTemplate, ANIM_TARGET, 4, 0x0, 0xfff4, 0x48, 0x1, 0x4b + createsprite gIceHammerSmokesTemplate, ANIM_TARGET, 4, 0x0, 0xfffa, 0x38, 0x1, 0x4b + createsprite gIceHammerSmokesTemplate, ANIM_TARGET, 4, 0x0, 0xfffa, 0x58, 0x0, 0x4b + createsprite gIceHammerSmokesTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x38, 0x0, 0x4b + createsprite gIceHammerSmokesTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x58, 0x1, 0x4b + createsprite gIceHammerSmokesTemplate, ANIM_TARGET, 4, 0x0, 0x6, 0x48, 0x0, 0x4b + createsprite gIceHammerSmokesTemplate, ANIM_TARGET, 4, 0x0, 0x6, 0x68, 0x1, 0x4b + createsprite gIceHammerSmokesTemplate, ANIM_TARGET, 4, 0x0, 0xc, 0x48, 0x0, 0x4b + createsprite gIceHammerSmokesTemplate, ANIM_TARGET, 4, 0x0, 0xc, 0x38, 0x1, 0x4b + createsprite gIceHammerSmokesTemplate, ANIM_TARGET, 4, 0x0, 0x12, 0x50, 0x0, 0x4b + createsprite gIceHammerSmokesTemplate, ANIM_TARGET, 4, 0x0, 0x12, 0x48, 0x1, 0x4b call IceCrystalEffectShort - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xC 0x0 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xC, 0x0, 0x0 waitforvisualfinish blendoff end @@ -10660,27 +10658,27 @@ Move_FLORAL_HEALING:: waitforvisualfinish panse SE_M_COMET_PUNCH, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0 playsewithpan SE_M_TWISTER, 0x0 - launchtemplate gSweetScentPetalSpriteTemplate 0x2 0x3 0x46 0x1 0x40 + createsprite gSweetScentPetalSpriteTemplate, ANIM_ATTACKER, 2, 0x46, 0x1, 0x40 delay 0x2 - launchtemplate gFloralHealingWindLeavesTemplate 0x2 0x3 0x3c 0x0 0x40 + createsprite gFloralHealingWindLeavesTemplate, ANIM_ATTACKER, 2, 0x3c, 0x0, 0x40 delay 0x2 - launchtemplate gSweetScentPetalSpriteTemplate 0x2 0x3 0x50 0x1 0x40 + createsprite gSweetScentPetalSpriteTemplate, ANIM_ATTACKER, 2, 0x50, 0x1, 0x40 delay 0x2 - launchtemplate gFloralHealingWindLeavesTemplate 0x2 0x3 0x3a 0x0 0x78 + createsprite gFloralHealingWindLeavesTemplate, ANIM_ATTACKER, 2, 0x3a, 0x0, 0x78 delay 0x2 - launchtemplate gSweetScentPetalSpriteTemplate 0x2 0x3 0x64 0x0 0x78 + createsprite gSweetScentPetalSpriteTemplate, ANIM_ATTACKER, 2, 0x64, 0x0, 0x78 delay 0x2 - launchtemplate gFloralHealingWindLeavesTemplate 0x2 0x3 0x5a 0x0 0x40 + createsprite gFloralHealingWindLeavesTemplate, ANIM_ATTACKER, 2, 0x5a, 0x0, 0x40 delay 0x2 - launchtemplate gSweetScentPetalSpriteTemplate 0x2 0x3 0x30 0x0 0x40 @2 + createsprite gSweetScentPetalSpriteTemplate, ANIM_ATTACKER, 2, 0x30, 0x0, 0x40 @2 delay 0x2 - launchtemplate gFloralHealingWindLeavesTemplate 0x2 0x3 0x5f 0x1 0x50 + createsprite gFloralHealingWindLeavesTemplate, ANIM_ATTACKER, 2, 0x5f, 0x1, 0x50 delay 0x2 - launchtemplate gSweetScentPetalSpriteTemplate 0x2 0x3 0x64 0x0 0x78 + createsprite gSweetScentPetalSpriteTemplate, ANIM_ATTACKER, 2, 0x64, 0x0, 0x78 delay 0x2 - launchtemplate gFloralHealingWindLeavesTemplate 0x2 0x3 0x4b 0x1 0x40 + createsprite gFloralHealingWindLeavesTemplate, ANIM_ATTACKER, 2, 0x4b, 0x1, 0x40 delay 0x2 - launchtemplate gSweetScentPetalSpriteTemplate 0x2 0x3 0x55 0x0 0x78 + createsprite gSweetScentPetalSpriteTemplate, ANIM_ATTACKER, 2, 0x55, 0x0, 0x78 delay 0x2 loopsewithpan SE_M_POISON_POWDER, SOUND_PAN_TARGET, 0x12, 0xa call FloralHealingSpores @@ -10688,66 +10686,66 @@ Move_FLORAL_HEALING:: call FloralHealingSpores waitforvisualfinish playsewithpan SE_M_ABSORB_2, SOUND_PAN_ATTACKER - launchtemplate gGrantingStarsSpriteTemplate 0x10 0x7 0xfff1 0x0 0x1 0x0 0x20 0x3c 0x1 + createsprite gGrantingStarsSpriteTemplate, ANIM_ATTACKER, 16, 0xfff1, 0x0, 0x1, 0x0, 0x20, 0x3c, 0x1 delay 0x8 - launchtemplate gGrantingStarsSpriteTemplate 0x10 0x7 0xc 0xfffb 0x1 0x0 0x20 0x3c 0x1 + createsprite gGrantingStarsSpriteTemplate, ANIM_ATTACKER, 16, 0xc, 0xfffb, 0x1, 0x0, 0x20, 0x3c, 0x1 waitforvisualfinish clearmonbg ANIM_TARGET clearmonbg ANIM_ATTACKER end FloralHealingSpores: - launchtemplate gFloralHealingFlowerTemplate 0x2 0x5 0x0 0xffec 0x55 0x50 0x0 - launchtemplate gSweetScentPetalSpriteTemplate 0x2 0x3 0x46 0x1 0x40 + createsprite gFloralHealingFlowerTemplate, ANIM_ATTACKER, 2, 0x0, 0xffec, 0x55, 0x50, 0x0 + createsprite gSweetScentPetalSpriteTemplate, ANIM_ATTACKER, 2, 0x46, 0x1, 0x40 delay 0x2 - launchtemplate gFloralHealingWindLeavesTemplate 0x2 0x3 0x3c 0x0 0x40 + createsprite gFloralHealingWindLeavesTemplate, ANIM_ATTACKER, 2, 0x3c, 0x0, 0x40 delay 0x2 - launchtemplate gSweetScentPetalSpriteTemplate 0x2 0x3 0x50 0x1 0x40 + createsprite gSweetScentPetalSpriteTemplate, ANIM_ATTACKER, 2, 0x50, 0x1, 0x40 delay 0x2 - launchtemplate gFloralHealingWindLeavesTemplate 0x2 0x3 0x3a 0x0 0x78 + createsprite gFloralHealingWindLeavesTemplate, ANIM_ATTACKER, 2, 0x3a, 0x0, 0x78 delay 0x2 - launchtemplate gSweetScentPetalSpriteTemplate 0x2 0x3 0x64 0x0 0x78 + createsprite gSweetScentPetalSpriteTemplate, ANIM_ATTACKER, 2, 0x64, 0x0, 0x78 delay 0x2 - launchtemplate gFloralHealingWindLeavesTemplate 0x2 0x3 0x5a 0x0 0x40 + createsprite gFloralHealingWindLeavesTemplate, ANIM_ATTACKER, 2, 0x5a, 0x0, 0x40 delay 0x3 - launchtemplate gFloralHealingFlowerTemplate 0x2 0x5 0x0 0xfff6 0xaa 0x50 0x0 - launchtemplate gSweetScentPetalSpriteTemplate 0x2 0x3 0x30 0x0 0x40 + createsprite gFloralHealingFlowerTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff6, 0xaa, 0x50, 0x0 + createsprite gSweetScentPetalSpriteTemplate, ANIM_ATTACKER, 2, 0x30, 0x0, 0x40 delay 0x2 - launchtemplate gFloralHealingWindLeavesTemplate 0x2 0x3 0x5f 0x1 0x50 + createsprite gFloralHealingWindLeavesTemplate, ANIM_ATTACKER, 2, 0x5f, 0x1, 0x50 delay 0x2 - launchtemplate gSweetScentPetalSpriteTemplate 0x2 0x3 0x64 0x0 0x78 + createsprite gSweetScentPetalSpriteTemplate, ANIM_ATTACKER, 2, 0x64, 0x0, 0x78 delay 0x2 - launchtemplate gFloralHealingWindLeavesTemplate 0x2 0x3 0x4b 0x1 0x40 + createsprite gFloralHealingWindLeavesTemplate, ANIM_ATTACKER, 2, 0x4b, 0x1, 0x40 delay 0x2 - launchtemplate gSweetScentPetalSpriteTemplate 0x2 0x3 0x55 0x0 0x78 + createsprite gSweetScentPetalSpriteTemplate, ANIM_ATTACKER, 2, 0x55, 0x0, 0x78 delay 0x2 - launchtemplate gFloralHealingWindLeavesTemplate 0x2 0x3 0x46 0x1 0x40 + createsprite gFloralHealingWindLeavesTemplate, ANIM_ATTACKER, 2, 0x46, 0x1, 0x40 delay 0x3 - launchtemplate gFloralHealingFlowerTemplate 0x2 0x5 0x0 0xfff1 0x0 0x50 0x0 - launchtemplate gFloralHealingWindLeavesTemplate 0x2 0x3 0x3c 0x0 0x40 + createsprite gFloralHealingFlowerTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff1, 0x0, 0x50, 0x0 + createsprite gFloralHealingWindLeavesTemplate, ANIM_ATTACKER, 2, 0x3c, 0x0, 0x40 delay 0x2 - launchtemplate gSweetScentPetalSpriteTemplate 0x2 0x3 0x50 0x1 0x40 + createsprite gSweetScentPetalSpriteTemplate, ANIM_ATTACKER, 2, 0x50, 0x1, 0x40 delay 0x2 - launchtemplate gFloralHealingWindLeavesTemplate 0x2 0x3 0x3a 0x0 0x78 + createsprite gFloralHealingWindLeavesTemplate, ANIM_ATTACKER, 2, 0x3a, 0x0, 0x78 delay 0x2 - launchtemplate gSweetScentPetalSpriteTemplate 0x2 0x3 0x64 0x0 0x78 + createsprite gSweetScentPetalSpriteTemplate, ANIM_ATTACKER, 2, 0x64, 0x0, 0x78 delay 0x2 - launchtemplate gFloralHealingWindLeavesTemplate 0x2 0x3 0x5a 0x0 0x40 + createsprite gFloralHealingWindLeavesTemplate, ANIM_ATTACKER, 2, 0x5a, 0x0, 0x40 delay 0x2 - launchtemplate gSweetScentPetalSpriteTemplate 0x2 0x3 0x30 0x0 0x40 + createsprite gSweetScentPetalSpriteTemplate, ANIM_ATTACKER, 2, 0x30, 0x0, 0x40 delay 0x3 return CIRCLES_LEAVES: - launchtemplate gFloralHealingOrbsTemplate 0x82 0x7 0x0 0x1c 0x180 0x32 0x8 0x32 0x0 + createsprite gFloralHealingOrbsTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x180, 0x32, 0x8, 0x32, 0x0 delay 0x2 - launchtemplate gFloralHealingLeavesTemplate 0x82 0x7 0x0 0x20 0xf0 0x28 0xb 0xffd2 0x0 + createsprite gFloralHealingLeavesTemplate, ANIM_TARGET, 2, 0x0, 0x20, 0xf0, 0x28, 0xb, 0xffd2, 0x0 delay 0x2 - launchtemplate gFloralHealingOrbsTemplate 0x82 0x7 0x0 0x21 0x1a0 0x28 0x4 0x2a 0x0 + createsprite gFloralHealingOrbsTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1a0, 0x28, 0x4, 0x2a, 0x0 delay 0x2 - launchtemplate gFloralHealingLeavesTemplate 0x82 0x7 0x0 0x1f 0x120 0x2d 0x6 0xffd6 0x0 + createsprite gFloralHealingLeavesTemplate, ANIM_TARGET, 2, 0x0, 0x1f, 0x120, 0x2d, 0x6, 0xffd6, 0x0 delay 0x2 - launchtemplate gFloralHealingOrbsTemplate 0x82 0x7 0x0 0x1c 0x1c0 0x2d 0xb 0x2e 0x0 + createsprite gFloralHealingOrbsTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x1c0, 0x2d, 0xb, 0x2e, 0x0 delay 0x2 - launchtemplate gFloralHealingLeavesTemplate 0x82 0x7 0x0 0x21 0x1d0 0x32 0xa 0xffce 0x0 + createsprite gFloralHealingLeavesTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1d0, 0x32, 0xa, 0xffce, 0x0 delay 0x2 return @@ -10756,18 +10754,18 @@ Move_HIGH_HORSEPOWER:: loadspritegfx ANIM_TAG_HORSESHOE_SIDE_FIST @horseshoe monbg ANIM_TARGET delay 0x2 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x0 0x0 0x10 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x0, 0x0, 0x10, 0x0 setalpha 12, 8 playsewithpan SE_M_MEGA_KICK, SOUND_PAN_TARGET - launchtemplate gHighHorsepowerHorseshoeTemplate 0x3 0x4 0x0 0x0 0x1 0x32 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x0 0x7 0x7fff + createsprite gHighHorsepowerHorseshoeTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x1, 0x32 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x2, 0x0, 0x7, 0x7fff delay 0x32 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET call SetImpactBackground - launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x0 - launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x4 0x0 0x16 0x1 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x0 0x0 0x7fff - launchtemplate gComplexPaletteBlendSpriteTemplate 0x2 0x7 0x1f 0x3 0x1 0x0 0x8 0x0 0x0 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1, 0x0 + createvisualtask AnimTask_ShakeMon2, 0x2, 0x1, 0x4, 0x0, 0x16, 0x1 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x2, 0x0, 0x0, 0x7fff + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 0x1f, 0x3, 0x1, 0x0, 0x8, 0x0, 0x0 waitforvisualfinish clearmonbg ANIM_TARGET blendoff @@ -10785,59 +10783,59 @@ Move_STRENGTH_SAP:: loadspritegfx ANIM_TAG_SPARKLE_2 @stars monbg ANIM_DEF_PARTNER playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET - launchtemplate gStrengthSapRedSmokeTemplate 0x82, 0x4, 0x8 0x3 0x1 0x0 - launchtemplate gStrengthSapRedInwardTemplate 0x4 0x3 0x46 0x0 0x6 - launchtemplate gStrengthSapRedInwardTemplate 0x4 0x3 0x28 0x28 0x6 - launchtemplate gStrengthSapRedInwardTemplate 0x4 0x3 0xa 0xffc4 0x6 - launchtemplate gStrengthSapRedInwardTemplate 0x4 0x3 0xffce 0xffd8 0x6 - launchtemplate gStrengthSapRedInwardTemplate 0x4 0x3 0xffd8 0x28 0x6 - launchtemplate gStrengthSapRedInwardTemplate 0x4 0x3 0x32 0xffce 0x6 - delay 0x2 - launchtemplate gStrengthSapRedSmokeTemplate 0x82, 0x4, 0xfff8 0xfff8 0x1 0x0 - launchtemplate gStrengthSapRedInwardTemplate 0x4 0x3 0x32 0xffe2 0x6 - launchtemplate gStrengthSapRedInwardTemplate 0x4 0x3 0x3c 0xa 0x6 - launchtemplate gStrengthSapRedInwardTemplate 0x4 0x3 0x0 0x3c 0x6 - launchtemplate gStrengthSapRedInwardTemplate 0x4 0x3 0x0 0xffd8 0x6 - launchtemplate gStrengthSapRedInwardTemplate 0x4 0x3 0xffc4 0x14 0x6 - launchtemplate gStrengthSapRedInwardTemplate 0x4 0x3 0xffc4 0xffe2 0x6 - delay 0x2 - launchtemplate gStrengthSapRedSmokeTemplate 0x82, 0x4, 0x8 0xfff8 0x1 0x0 - launchtemplate gStrengthSapRedInwardTemplate 0x4 0x3 0xffce 0x32 0x6 - launchtemplate gStrengthSapRedInwardTemplate 0x4 0x3 0xffc4 0x14 0x6 - launchtemplate gStrengthSapRedInwardTemplate 0x4 0x3 0xffd8 0xffd8 0x6 - launchtemplate gStrengthSapRedInwardTemplate 0x4 0x3 0x14 0xffc4 0x6 - launchtemplate gStrengthSapRedInwardTemplate 0x4 0x3 0x32 0xffce 0x6 - launchtemplate gStrengthSapRedInwardTemplate 0x4 0x3 0x23 0x28 0x6 - delay 0x2 - launchtemplate gStrengthSapRedSmokeTemplate 0x82, 0x4, 0xfff8 0x8 0x1 0x0 - waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x3 0x07FD + createsprite gStrengthSapRedSmokeTemplate, ANIM_TARGET, 2, 0x8, 0x3, 0x1, 0x0 + createsprite gStrengthSapRedInwardTemplate, ANIM_ATTACKER, 4, 0x46, 0x0, 0x6 + createsprite gStrengthSapRedInwardTemplate, ANIM_ATTACKER, 4, 0x28, 0x28, 0x6 + createsprite gStrengthSapRedInwardTemplate, ANIM_ATTACKER, 4, 0xa, 0xffc4, 0x6 + createsprite gStrengthSapRedInwardTemplate, ANIM_ATTACKER, 4, 0xffce, 0xffd8, 0x6 + createsprite gStrengthSapRedInwardTemplate, ANIM_ATTACKER, 4, 0xffd8, 0x28, 0x6 + createsprite gStrengthSapRedInwardTemplate, ANIM_ATTACKER, 4, 0x32, 0xffce, 0x6 + delay 0x2 + createsprite gStrengthSapRedSmokeTemplate, ANIM_TARGET, 2, 0xfff8, 0xfff8, 0x1, 0x0 + createsprite gStrengthSapRedInwardTemplate, ANIM_ATTACKER, 4, 0x32, 0xffe2, 0x6 + createsprite gStrengthSapRedInwardTemplate, ANIM_ATTACKER, 4, 0x3c, 0xa, 0x6 + createsprite gStrengthSapRedInwardTemplate, ANIM_ATTACKER, 4, 0x0, 0x3c, 0x6 + createsprite gStrengthSapRedInwardTemplate, ANIM_ATTACKER, 4, 0x0, 0xffd8, 0x6 + createsprite gStrengthSapRedInwardTemplate, ANIM_ATTACKER, 4, 0xffc4, 0x14, 0x6 + createsprite gStrengthSapRedInwardTemplate, ANIM_ATTACKER, 4, 0xffc4, 0xffe2, 0x6 + delay 0x2 + createsprite gStrengthSapRedSmokeTemplate, ANIM_TARGET, 2, 0x8, 0xfff8, 0x1, 0x0 + createsprite gStrengthSapRedInwardTemplate, ANIM_ATTACKER, 4, 0xffce, 0x32, 0x6 + createsprite gStrengthSapRedInwardTemplate, ANIM_ATTACKER, 4, 0xffc4, 0x14, 0x6 + createsprite gStrengthSapRedInwardTemplate, ANIM_ATTACKER, 4, 0xffd8, 0xffd8, 0x6 + createsprite gStrengthSapRedInwardTemplate, ANIM_ATTACKER, 4, 0x14, 0xffc4, 0x6 + createsprite gStrengthSapRedInwardTemplate, ANIM_ATTACKER, 4, 0x32, 0xffce, 0x6 + createsprite gStrengthSapRedInwardTemplate, ANIM_ATTACKER, 4, 0x23, 0x28, 0x6 + delay 0x2 + createsprite gStrengthSapRedSmokeTemplate, ANIM_TARGET, 2, 0xfff8, 0x8, 0x1, 0x0 + waitforvisualfinish + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x3, 0x07FD delay 0x5 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_TARGET - launchtemplate gStrengthSapAbsorbTemplate 0x3 0x4 0x0 0x5 0x8 0x1a + createsprite gStrengthSapAbsorbTemplate, ANIM_ATTACKER, 3, 0x0, 0x5, 0x8, 0x1a delay 0x4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_TARGET - launchtemplate gStrengthSapAbsorbTemplate 0x3 0x4 0xa 0xfffb 0xfff8 0x1a + createsprite gStrengthSapAbsorbTemplate, ANIM_ATTACKER, 3, 0xa, 0xfffb, 0xfff8, 0x1a delay 0x4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_TARGET - launchtemplate gStrengthSapAbsorbTemplate 0x3 0x4 0xfffb 0xf 0x10 0x21 + createsprite gStrengthSapAbsorbTemplate, ANIM_ATTACKER, 3, 0xfffb, 0xf, 0x10, 0x21 delay 0x4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_TARGET - launchtemplate gStrengthSapAbsorbTemplate 0x3 0x4 0x0 0xfff1 0xfff0 0x24 + createsprite gStrengthSapAbsorbTemplate, ANIM_ATTACKER, 3, 0x0, 0xfff1, 0xfff0, 0x24 delay 0x4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_TARGET - launchtemplate gStrengthSapAbsorbTemplate 0x3 0x4 0x0 0x5 0x8 0x1a + createsprite gStrengthSapAbsorbTemplate, ANIM_ATTACKER, 3, 0x0, 0x5, 0x8, 0x1a delay 0x4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_TARGET - launchtemplate gStrengthSapAbsorbTemplate 0x3 0x4 0xa 0xfffb 0xfff8 0x1a + createsprite gStrengthSapAbsorbTemplate, ANIM_ATTACKER, 3, 0xa, 0xfffb, 0xfff8, 0x1a delay 0x4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_TARGET - launchtemplate gStrengthSapAbsorbTemplate 0x3 0x4 0xfff6 0x14 0x14 0x27 + createsprite gStrengthSapAbsorbTemplate, ANIM_ATTACKER, 3, 0xfff6, 0x14, 0x14, 0x27 delay 0x4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_TARGET - launchtemplate gStrengthSapAbsorbTemplate 0x3 0x4 0x5 0xffee 0xffec 0x23 + createsprite gStrengthSapAbsorbTemplate, ANIM_ATTACKER, 3, 0x5, 0xffee, 0xffec, 0x23 waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x3 0x0 0x07FD + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x3, 0x0, 0x07FD loopsewithpan SE_M_HEAL_BELL, SOUND_PAN_ATTACKER, 0x10, 0x3 call GrantingStarsEffect waitforvisualfinish @@ -10853,32 +10851,32 @@ SolarBladeUnleash: loadspritegfx ANIM_TAG_SPARK_2 @yellow color loadspritegfx ANIM_TAG_SUNLIGHT @sun rays monbg ANIM_ATTACKER - setblends 0x30d - createvisualtask AnimTask_BlendBattleAnimPal 10, (ANIM_PAL_BG | ANIM_PAL_ALL_BATTLERS), 1, 0, 6, 0x7fff + setalpha 13, 3 + createvisualtask AnimTask_BlendBattleAnimPal 10, (F_PAL_BG | F_PAL_BATTLERS), 1, 0, 6, 0x7fff waitforvisualfinish playsewithpan SE_M_SWORDS_DANCE, SOUND_PAN_ATTACKER - launchtask AnimTask_TranslateMonEllipticalRespectSide 0x2 0x5 0x0 0x10 0x6 0x1 0x4 - launchtemplate gSwordsDanceBladeSpriteTemplate 0x2 0x2 0x0 0x0 + createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 0x2, 0x0, 0x10, 0x6, 0x1, 0x4 + createsprite gSwordsDanceBladeSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0 call SolarBladeSunRays call SolarBladeSunRays call SolarBladeSunRays call SolarBladeSunRays - launchtask AnimTask_FlashAnimTagWithColor 0x2 0x7 0x2715 0x2 0x2 0x7ff2 0x10 0x0 0x0 + createvisualtask AnimTask_FlashAnimTagWithColor, 0x2, 0x2715, 0x2, 0x2, 0x7ff2, 0x10, 0x0, 0x0 waitforvisualfinish call SetSolarBeamBg playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET - launchtemplate gSolarBladeImpactTemplate 0x82, 0x3, 0x0 0x0 0x1 + createsprite gSolarBladeImpactTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x1 delay 0x2 - launchtask AnimTask_ShakeMon2 0x2 0x5 ANIM_TARGET 0x2 0x0 0xC 0x1 + createvisualtask AnimTask_ShakeMon2, 0x2, ANIM_TARGET, 0x2, 0x0, 0xC, 0x1 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal 10, (ANIM_PAL_BG | ANIM_PAL_ALL_BATTLERS), 1, 6, 0, 0x7fff + createvisualtask AnimTask_BlendBattleAnimPal 10, (F_PAL_BG | F_PAL_BATTLERS), 1, 6, 0, 0x7fff waitforvisualfinish call UnsetPsychicBg clearmonbg ANIM_ATTACKER blendoff end SolarBladeSunRays: - launchtemplate gSunlightRaySpriteTemplate 0x28 0x0 + createsprite gSunlightRaySpriteTemplate, ANIM_ATTACKER, 40 delay 0x6 return @@ -10887,12 +10885,12 @@ Move_LEAFAGE:: loadspritegfx ANIM_TAG_IMPACT @hit monbg ANIM_DEF_PARTNER playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER - launchtemplate gRazorLeafCutterSpriteTemplate 0x83 0x7 0x14 0xfff6 0x14 0x0 0x16 0x14 0x1 - launchtemplate gRazorLeafCutterSpriteTemplate 0x83 0x7 0x14 0xfff6 0x14 0x0 0x16 0xffec 0x1 - launchtemplate gRazorLeafCutterSpriteTemplate 0x83 0x7 0x14 0xfff6 0x14 0x0 0x16 0x0 0x1 + createsprite gRazorLeafCutterSpriteTemplate, ANIM_TARGET, 3, 0x14, 0xfff6, 0x14, 0x0, 0x16, 0x14, 0x1 + createsprite gRazorLeafCutterSpriteTemplate, ANIM_TARGET, 3, 0x14, 0xfff6, 0x14, 0x0, 0x16, 0xffec, 0x1 + createsprite gRazorLeafCutterSpriteTemplate, ANIM_TARGET, 3, 0x14, 0xfff6, 0x14, 0x0, 0x16, 0x0, 0x1 delay 0x14 playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET - launchtemplate gLeafageImpactTemplate 0x2 0x4 0x0 0x0 0x1 0x2 + createsprite gLeafageImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1, 0x2 waitforvisualfinish clearmonbg ANIM_DEF_PARTNER end @@ -10900,15 +10898,15 @@ Move_LEAFAGE:: Move_SPOTLIGHT:: loadspritegfx ANIM_TAG_SPOTLIGHT loadspritegfx ANIM_TAG_TAG_HAND - launchtask AnimTask_CreateSpotlight 0x2 0x0 - launchtask AnimTask_HardwarePaletteFade 0x2 0x5 0xf8 0x3 0x0 0xa 0x0 + createvisualtask AnimTask_CreateSpotlight, 0x2 + createvisualtask AnimTask_HardwarePaletteFade, 0x2, 0xf8, 0x3, 0x0, 0xa, 0x0 waitforvisualfinish playsewithpan SE_CONTEST_ICON_CHANGE, SOUND_PAN_ATTACKER - launchtemplate gSpotlightSpriteTemplate 0x82 0x2 0x0 0xfff8 + createsprite gSpotlightSpriteTemplate, ANIM_TARGET, 2, 0x0, 0xfff8 delay 0x40 - launchtask AnimTask_HardwarePaletteFade 0x2 0x5 0xf8 0x3 0xa 0x0 0x1 + createvisualtask AnimTask_HardwarePaletteFade, 0x2, 0xf8, 0x3, 0xa, 0x0, 0x1 waitforvisualfinish - launchtask AnimTask_RemoveSpotlight 0x2 0x0 + createvisualtask AnimTask_RemoveSpotlight, 0x2 end Move_TOXIC_THREAD:: @@ -10918,7 +10916,7 @@ Move_TOXIC_THREAD:: createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_WEB_THREAD, 0x0, 0xA, 0xA, 0x6038 @Purple monbg ANIM_DEF_PARTNER delay 0x0 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x9 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x9, 0x0 waitforvisualfinish loopsewithpan SE_M_STRING_SHOT, SOUND_PAN_ATTACKER, 0x9, 0x6 call SpiderWebThread @@ -10941,16 +10939,16 @@ Move_TOXIC_THREAD:: call SpiderWebThread waitforvisualfinish playsewithpan SE_M_STRING_SHOT2, SOUND_PAN_TARGET - launchtemplate gToxicThreadString 0x82 0x2 0x0 0xa + createsprite gToxicThreadString, ANIM_TARGET, 2, 0x0, 0xa delay 0x4 - launchtemplate gToxicThreadString 0x82 0x2 0x0 0xfffe + createsprite gToxicThreadString, ANIM_TARGET, 2, 0x0, 0xfffe delay 0x4 - launchtemplate gToxicThreadString 0x82 0x2 0x0 0x16 + createsprite gToxicThreadString, ANIM_TARGET, 2, 0x0, 0x16 waitforvisualfinish clearmonbg ANIM_DEF_PARTNER delay 0x1 waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x9 0x0 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x9, 0x0, 0x0 end Move_LASER_FOCUS:: @@ -10958,14 +10956,14 @@ Move_LASER_FOCUS:: loadspritegfx ANIM_TAG_OPENING_EYE @eyes loadspritegfx ANIM_TAG_LEER @leer monbg ANIM_ATTACKER - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xC 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xC, 0x0 waitforvisualfinish - launchtemplate gLaserFocusRedEyesTemplate 0x5 0x4 0x0 0x0 0x0 0x0 + createsprite gLaserFocusRedEyesTemplate, ANIM_ATTACKER, 5, 0x0, 0x0, 0x0, 0x0 waitforvisualfinish playsewithpan SE_M_LEER, SOUND_PAN_ATTACKER - launchtemplate gLeerSpriteTemplate 0x2 0x2 0x18 0xfff4 + createsprite gLeerSpriteTemplate, ANIM_ATTACKER, 2, 0x18, 0xfff4 waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xC 0x0 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xC, 0x0, 0x0 waitforvisualfinish clearmonbg ANIM_ATTACKER end @@ -10973,53 +10971,53 @@ Move_LASER_FOCUS:: Move_GEAR_UP:: loadspritegfx ANIM_TAG_GEAR loadspritegfx ANIM_TAG_SPARK_2 @sparks - launchtask AnimTask_BlendBattleAnimPal 0xA 0x5 ANIM_PAL_ATK 0x2 0x0 0x9 0x039B - launchtemplate gGearUpGearsTemplate 0x2 0x4 0x0 0xffe8 0x8 0x8c + createvisualtask AnimTask_BlendBattleAnimPal, 0xA, F_PAL_ATTACKER, 0x2, 0x0, 0x9, 0x039B + createsprite gGearUpGearsTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x8, 0x8c playsewithpan SE_ROULETTE_BALL2, SOUND_PAN_ATTACKER - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0x20, 0x18, 0xbe, 0xc, 0x0, 0x1, 0x0 delay 0x0 - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0 - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0x50, 0x18, 0x16, 0xc, 0x0, 0x1, 0x0 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0x9c, 0x18, 0x79, 0xd, 0x0, 0x1, 0x1 delay 0xF playsewithpan SE_ROULETTE_BALL2, SOUND_PAN_ATTACKER - launchtemplate gGearUpGearsTemplate 0x2 0x4 0x0 0xffe8 0x8 0x8c - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0 - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1 + createsprite gGearUpGearsTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x8, 0x8c + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0x64, 0x18, 0x3c, 0xa, 0x0, 0x1, 0x0 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0xaa, 0x18, 0x2a, 0xb, 0x0, 0x1, 0x1 delay 0x0 - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0xee, 0x18, 0xa5, 0xa, 0x0, 0x1, 0x1 delay 0xF playsewithpan SE_ROULETTE_BALL2, SOUND_PAN_ATTACKER - launchtemplate gGearUpGearsTemplate 0x2 0x4 0x0 0xffe8 0x8 0x8c - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0 + createsprite gGearUpGearsTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x8, 0x8c + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0x20, 0x18, 0xbe, 0xc, 0x0, 0x1, 0x0 delay 0x0 - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0 - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0x50, 0x18, 0x16, 0xc, 0x0, 0x1, 0x0 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0x9c, 0x18, 0x79, 0xd, 0x0, 0x1, 0x1 delay 0xF playsewithpan SE_ROULETTE_BALL2, SOUND_PAN_ATTACKER call GearUpSparks call GearUpSparks call GearUpSparks playsewithpan SE_ROULETTE_BALL2, SOUND_PAN_ATTACKER - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0x20, 0x18, 0xbe, 0xc, 0x0, 0x1, 0x0 delay 0x0 - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0 - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0x50, 0x18, 0x16, 0xc, 0x0, 0x1, 0x0 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0x9c, 0x18, 0x79, 0xd, 0x0, 0x1, 0x1 waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xA 0x5 ANIM_PAL_ATK 0x2 0x9 0x0 0x039B + createvisualtask AnimTask_BlendBattleAnimPal, 0xA, F_PAL_ATTACKER, 0x2, 0x9, 0x0, 0x039B waitforvisualfinish end GearUpSparks: playsewithpan SE_ROULETTE_BALL2, SOUND_PAN_ATTACKER - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0x20, 0x18, 0xbe, 0xc, 0x0, 0x1, 0x0 delay 0x0 - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0 - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0x50, 0x18, 0x16, 0xc, 0x0, 0x1, 0x0 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0x9c, 0x18, 0x79, 0xd, 0x0, 0x1, 0x1 delay 0xF playsewithpan SE_ROULETTE_BALL2, SOUND_PAN_ATTACKER - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0 - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0x64, 0x18, 0x3c, 0xa, 0x0, 0x1, 0x0 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0xaa, 0x18, 0x2a, 0xb, 0x0, 0x1, 0x1 delay 0x0 - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0xee, 0x18, 0xa5, 0xa, 0x0, 0x1, 0x1 delay 0xF return @@ -11031,35 +11029,35 @@ Move_THROAT_CHOP:: splitbgprio ANIM_TARGET setalpha 12, 8 playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_TARGET - launchtemplate gKarateChopSpriteTemplate 0x2 0x8 0xfff0 0x0 0x0 0x0 0xa 0x1 0x3 0x0 + createsprite gKarateChopSpriteTemplate, ANIM_ATTACKER, 2, 0xfff0, 0x0, 0x0, 0x0, 0xa, 0x1, 0x3, 0x0 waitforvisualfinish - launchtask AnimTask_InvertScreenColor 0x2 0x3 0x101 0x101 0x101 - launchtemplate gThroatChopRedImpactTemplate 0x3 0x4 0x0 0x0 0x1 0x2 + createvisualtask AnimTask_InvertScreenColor, 0x2, 0x101, 0x101, 0x101 + createsprite gThroatChopRedImpactTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x1, 0x2 delay 0x3 - launchtemplate gThroatChopRedImpactTemplate 0x3 0x4 0x0 0x0 0x1 0x2 + createsprite gThroatChopRedImpactTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x1, 0x2 delay 0x3 - launchtemplate gThroatChopRedImpactTemplate 0x3 0x4 0x0 0x0 0x1 0x2 + createsprite gThroatChopRedImpactTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x1, 0x2 delay 0x3 - launchtemplate gThroatChopRedImpactTemplate 0x3 0x4 0x0 0x0 0x1 0x2 + createsprite gThroatChopRedImpactTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x1, 0x2 delay 0x3 - launchtemplate gThroatChopRedImpactTemplate 0x3 0x4 0x0 0x0 0x1 0x2 + createsprite gThroatChopRedImpactTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x1, 0x2 delay 0x3 - launchtemplate gThroatChopRedImpactTemplate 0x3 0x4 0x0 0x0 0x1 0x2 + createsprite gThroatChopRedImpactTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x1, 0x2 delay 0x3 - launchtemplate gThroatChopRedImpactTemplate 0x3 0x4 0x0 0x0 0x1 0x2 + createsprite gThroatChopRedImpactTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x1, 0x2 delay 0x3 - launchtemplate gThroatChopRedImpactTemplate 0x3 0x4 0x0 0x0 0x1 0x2 + createsprite gThroatChopRedImpactTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x1, 0x2 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET - launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_TARGET 0x4 0x0 0x6 0x1 + createvisualtask AnimTask_ShakeMon, 0x5, ANIM_TARGET, 0x4, 0x0, 0x6, 0x1 waitforvisualfinish - launchtask AnimTask_InvertScreenColor 0x2 0x3 0x101 0x101 0x101 + createvisualtask AnimTask_InvertScreenColor, 0x2, 0x101, 0x101, 0x101 waitforvisualfinish clearmonbg ANIM_DEF_PARTNER blendoff end Move_POLLEN_PUFF:: - launchtask AnimTask_IsTargetSameSide 0x5 0x0 + createvisualtask AnimTask_IsTargetSameSide, 0x5 jumpargeq 0x0, 0x1, PollenPuffAlly PollenPuffOpponent: loadspritegfx ANIM_TAG_SPARKLE_2 @stars @@ -11071,50 +11069,50 @@ PollenPuffOpponent: loadspritegfx ANIM_TAG_ORBS @hit monbg ANIM_ATTACKER setalpha 12, 8 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x8 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x8, 0x0 waitforvisualfinish - launchtask AnimTask_RockMonBackAndForth 0x5 0x3 0x0 0x2 0x0 - launchtemplate gPollenPuffPinkStarTemplate 0x2 0x4 0xa 0xa 0x19 0x0 + createvisualtask AnimTask_RockMonBackAndForth, 0x5, 0x0, 0x2, 0x0 + createsprite gPollenPuffPinkStarTemplate, ANIM_ATTACKER, 2, 0xa, 0xa, 0x19, 0x0 playsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER delay 0xD - launchtemplate gPollenPuffPinkStarTemplate 0x2 0x4 0xfff1 0x0 0x19 0x0 + createsprite gPollenPuffPinkStarTemplate, ANIM_ATTACKER, 2, 0xfff1, 0x0, 0x19, 0x0 playsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER delay 0xD - launchtemplate gPollenPuffPinkStarTemplate 0x2 0x4 0xa 0xa 0x19 0x0 + createsprite gPollenPuffPinkStarTemplate, ANIM_ATTACKER, 2, 0xa, 0xa, 0x19, 0x0 playsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER delay 0xD - launchtemplate gPollenPuffPinkStarTemplate 0x2 0x4 0xfff1 0x0 0x19 0x0 + createsprite gPollenPuffPinkStarTemplate, ANIM_ATTACKER, 2, 0xfff1, 0x0, 0x19, 0x0 playsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER clearmonbg ANIM_ATTACKER waitforvisualfinish stopsound monbg ANIM_TARGET - launchtemplate gPollenPuffPinkSparkleTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0xA0 0x28 0x0 - launchtemplate gPollenPuffPinkSparkleTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x110 0x28 0x0 - launchtemplate gPollenPuffPinkSparkleTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0xB0 0x28 0x0 - launchtemplate gPollenPuffPinkSparkleTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x100 0x28 0x0 - launchtemplate gPollenPuffYellowSparkleTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x90 0x28 0x0 - launchtemplate gPollenPuffYellowSparkleTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x110 0x28 0x0 - launchtemplate gPollenPuffYellowSparkleTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0xB0 0x28 0x0 - launchtemplate gPollenPuffYellowSparkleTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x100 0x28 0x0 + createsprite gPollenPuffPinkSparkleTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x10, 0x1e, 0xA0, 0x28, 0x0 + createsprite gPollenPuffPinkSparkleTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x10, 0x1e, 0x110, 0x28, 0x0 + createsprite gPollenPuffPinkSparkleTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x8, 0x1e, 0xB0, 0x28, 0x0 + createsprite gPollenPuffPinkSparkleTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x8, 0x1e, 0x100, 0x28, 0x0 + createsprite gPollenPuffYellowSparkleTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x10, 0x1e, 0x90, 0x28, 0x0 + createsprite gPollenPuffYellowSparkleTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x10, 0x1e, 0x110, 0x28, 0x0 + createsprite gPollenPuffYellowSparkleTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x8, 0x1e, 0xB0, 0x28, 0x0 + createsprite gPollenPuffYellowSparkleTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x8, 0x1e, 0x100, 0x28, 0x0 delay 0x1 playsewithpan SE_M_SAND_ATTACK, SOUND_PAN_TARGET - launchtemplate gPollenPuffSporeTemplate 0x82 0x6 0xa 0x0 0x0 0x0 0x19 0xffe0 + createsprite gPollenPuffSporeTemplate, ANIM_TARGET, 2, 0xa, 0x0, 0x0, 0x0, 0x19, 0xffe0 waitforvisualfinish playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 - launchtemplate gPollenPuffImpactTemplates 0x82 0x5 0x1 0x1 0x0 0xFFE0 0x10 @up - launchtemplate gPollenPuffImpactTemplates 0x82 0x5 0x1 0x1 0xFFEE 0xFFEE 0x10 @upperleft - launchtemplate gPollenPuffImpactTemplates 0x82 0x5 0x1 0x1 0x0 0x1C 0x10 @down + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 + createsprite gPollenPuffImpactTemplates, ANIM_TARGET, 2, 0x1, 0x1, 0x0, 0xFFE0, 0x10 @up + createsprite gPollenPuffImpactTemplates, ANIM_TARGET, 2, 0x1, 0x1, 0xFFEE, 0xFFEE, 0x10 @upperleft + createsprite gPollenPuffImpactTemplates, ANIM_TARGET, 2, 0x1, 0x1, 0x0, 0x1C, 0x10 @down delay 0x4 - launchtemplate gPollenPuffImpactTemplates 0x82 0x5 0x1 0x1 0xFFE5 0x0 0x10 @left - launchtemplate gPollenPuffImpactTemplates 0x82 0x5 0x1 0x1 0x14 0x14 0x10 @lowerright - launchtemplate gPollenPuffImpactTemplates 0x82 0x5 0x1 0x1 0xFFED 0x13 0x10 @lowerleft + createsprite gPollenPuffImpactTemplates, ANIM_TARGET, 2, 0x1, 0x1, 0xFFE5, 0x0, 0x10 @left + createsprite gPollenPuffImpactTemplates, ANIM_TARGET, 2, 0x1, 0x1, 0x14, 0x14, 0x10 @lowerright + createsprite gPollenPuffImpactTemplates, ANIM_TARGET, 2, 0x1, 0x1, 0xFFED, 0x13, 0x10 @lowerleft delay 0x4 - launchtemplate gPollenPuffImpactTemplates 0x82 0x5 0x1 0x1 0x1E 0x0 0x10 @right - launchtemplate gPollenPuffImpactTemplates 0x82 0x5 0x1 0x1 0x16 0xFFEA 0x10 @upperright + createsprite gPollenPuffImpactTemplates, ANIM_TARGET, 2, 0x1, 0x1, 0x1E, 0x0, 0x10 @right + createsprite gPollenPuffImpactTemplates, ANIM_TARGET, 2, 0x1, 0x1, 0x16, 0xFFEA, 0x10 @upperright waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x8 0x0 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x8, 0x0, 0x0 waitforvisualfinish clearmonbg ANIM_TARGET blendoff @@ -11127,48 +11125,48 @@ PollenPuffAlly: loadspritegfx ANIM_TAG_SPORE @ball monbg ANIM_ATTACKER setalpha 12, 8 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x8 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x8, 0x0 waitforvisualfinish - launchtask AnimTask_RockMonBackAndForth 0x5 0x3 0x0 0x2 0x0 - launchtemplate gPollenPuffPinkStarTemplate 0x2 0x4 0xa 0xa 0x19 0x0 + createvisualtask AnimTask_RockMonBackAndForth, 0x5, 0x0, 0x2, 0x0 + createsprite gPollenPuffPinkStarTemplate, ANIM_ATTACKER, 2, 0xa, 0xa, 0x19, 0x0 playsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER delay 0xD - launchtemplate gPollenPuffPinkStarTemplate 0x2 0x4 0xfff1 0x0 0x19 0x0 + createsprite gPollenPuffPinkStarTemplate, ANIM_ATTACKER, 2, 0xfff1, 0x0, 0x19, 0x0 playsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER delay 0xD - launchtemplate gPollenPuffPinkStarTemplate 0x2 0x4 0xa 0xa 0x19 0x0 + createsprite gPollenPuffPinkStarTemplate, ANIM_ATTACKER, 2, 0xa, 0xa, 0x19, 0x0 playsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER delay 0xD - launchtemplate gPollenPuffPinkStarTemplate 0x2 0x4 0xfff1 0x0 0x19 0x0 + createsprite gPollenPuffPinkStarTemplate, ANIM_ATTACKER, 2, 0xfff1, 0x0, 0x19, 0x0 playsewithpan SE_M_ABSORB_2, SOUND_PAN_ATTACKER clearmonbg ANIM_ATTACKER waitforvisualfinish stopsound playsewithpan SE_M_SAND_ATTACK, SOUND_PAN_ATTACKER monbg ANIM_TARGET - launchtemplate gPollenPuffPinkSparkleTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0xa0 0x28 0x0 - launchtemplate gPollenPuffPinkSparkleTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x120 0x28 0x0 - launchtemplate gPollenPuffPinkSparkleTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x90 0x28 0x0 - launchtemplate gPollenPuffPinkSparkleTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x110 0x28 0x0 - launchtemplate gPollenPuffYellowSparkleTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0xa0 0x28 0x0 - launchtemplate gPollenPuffYellowSparkleTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x120 0x28 0x0 - launchtemplate gPollenPuffYellowSparkleTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x90 0x28 0x0 - launchtemplate gPollenPuffYellowSparkleTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x110 0x28 0x0 + createsprite gPollenPuffPinkSparkleTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x10, 0x1e, 0xa0, 0x28, 0x0 + createsprite gPollenPuffPinkSparkleTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x10, 0x1e, 0x120, 0x28, 0x0 + createsprite gPollenPuffPinkSparkleTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x8, 0x1e, 0x90, 0x28, 0x0 + createsprite gPollenPuffPinkSparkleTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x8, 0x1e, 0x110, 0x28, 0x0 + createsprite gPollenPuffYellowSparkleTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x10, 0x1e, 0xa0, 0x28, 0x0 + createsprite gPollenPuffYellowSparkleTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x10, 0x1e, 0x120, 0x28, 0x0 + createsprite gPollenPuffYellowSparkleTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x8, 0x1e, 0x90, 0x28, 0x0 + createsprite gPollenPuffYellowSparkleTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x8, 0x1e, 0x110, 0x28, 0x0 delay 0x1 - launchtemplate gPollenPuffSporeTemplate 0x82 0x6 0xa 0x0 0x0 0x0 0x19 0xffe0 + createsprite gPollenPuffSporeTemplate, ANIM_TARGET, 2, 0xa, 0x0, 0x0, 0x0, 0x19, 0xffe0 waitforvisualfinish unloadspritegfx ANIM_TAG_SPARKLE_2 @stars loadspritegfx ANIM_TAG_BLUE_STAR @heal playsewithpan SE_M_ABSORB_2, SOUND_PAN_ATTACKER - launchtemplate gPollenPuffHealTemplate 0x2 0x4 0x0 0xfffb 0x1 0x0 + createsprite gPollenPuffHealTemplate, ANIM_ATTACKER, 2, 0x0, 0xfffb, 0x1, 0x0 delay 0x7 - launchtemplate gPollenPuffHealTemplate 0x2 0x4 0xfff1 0xa 0x1 0x0 + createsprite gPollenPuffHealTemplate, ANIM_ATTACKER, 2, 0xfff1, 0xa, 0x1, 0x0 delay 0x7 - launchtemplate gPollenPuffHealTemplate 0x2 0x4 0xfff1 0xfff1 0x1 0x0 + createsprite gPollenPuffHealTemplate, ANIM_ATTACKER, 2, 0xfff1, 0xfff1, 0x1, 0x0 delay 0x7 - launchtemplate gPollenPuffHealTemplate 0x2 0x4 0xa 0xfffb 0x1 0x0 + createsprite gPollenPuffHealTemplate, ANIM_ATTACKER, 2, 0xa, 0xfffb, 0x1, 0x0 waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x8 0x1 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x8, 0x1, 0x0 waitforvisualfinish clearmonbg ANIM_TARGET blendoff @@ -11179,19 +11177,19 @@ Move_ANCHOR_SHOT:: loadspritegfx ANIM_TAG_ANCHOR playsewithpan SE_FALL SOUND_PAN_TARGET monbg ANIM_TARGET - launchtemplate gAnchorShotAngledAnchorTemplate 0x2 0x3 0x0 0x0 0x35 + createsprite gAnchorShotAngledAnchorTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x35 waitforvisualfinish - launchtemplate gAnchorShotAnchorTemplate 0x3 0x3 0x0 0xffe0 0xf - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0 0x3 0xf 0x1 + createsprite gAnchorShotAnchorTemplate, ANIM_ATTACKER, 3, 0x0, 0xffe0, 0xf + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x0, 0x3, 0xf, 0x1 delay 0x25 - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0 0x3 0xf 0x1 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x0, 0x3, 0xf, 0x1 waitforvisualfinish loopsewithpan SE_SHINY, SOUND_PAN_ATTACKER 0x1c 0x2 - launchtemplate gAnchorShotChainTemplate 0x82 0x2 0xfff0 0xfff0 + createsprite gAnchorShotChainTemplate, ANIM_TARGET, 2, 0xfff0, 0xfff0 delay 0x4 - launchtemplate gAnchorShotChainTemplate 0x82 0x2 0xfff0 0x0 + createsprite gAnchorShotChainTemplate, ANIM_TARGET, 2, 0xfff0, 0x0 delay 0x4 - launchtemplate gAnchorShotChainTemplate 0x82 0x2 0xfff0 0x10 + createsprite gAnchorShotChainTemplate, ANIM_TARGET, 2, 0xfff0, 0x10 waitforvisualfinish clearmonbg ANIM_TARGET end @@ -11214,7 +11212,7 @@ Move_PSYCHIC_TERRAIN:: createsprite gPsychicTerrainOrbsTemplate, ANIM_ATTACKER, 2, 26, 126 createsprite gPsychicTerrainOrbsTemplate, ANIM_ATTACKER, 2, 26, 168 createsprite gPsychicTerrainOrbsTemplate, ANIM_ATTACKER, 2, 26, 210 - createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_BG, 3, 0, 4, RGB(27, 0, 13) + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 3, 0, 4, RGB(27, 0, 13) delay 52 setarg 7, 0xFFFF playsewithpan SE_M_ATTRACT, SOUND_PAN_ATTACKER @@ -11230,7 +11228,7 @@ Move_PSYCHIC_TERRAIN:: loopsewithpan SE_M_SUPERSONIC, SOUND_PAN_TARGET, 0xa, 0x3 waitforvisualfinish delay 4 - createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_BG, 3, 4, 0, RGB(27, 0, 13) + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 3, 4, 0, RGB(27, 0, 13) waitforvisualfinish end @@ -11242,9 +11240,9 @@ Move_LUNGE:: loadspritegfx ANIM_TAG_RAZOR_LEAF @green loadspritegfx ANIM_TAG_SMALL_BUBBLES @ball monbg ANIM_ATK_PARTNER - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_ATTACKER 0x3 0x0 0xf0 0x0 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_ATTACKER, 0x3, 0x0, 0xf0, 0x0 loopsewithpan SE_M_PSYBEAM2, SOUND_PAN_ATTACKER, 0xe, 0xa - launchtemplate gLungeGreenChargeTemplate 0x2 0x0 + createsprite gLungeGreenChargeTemplate, ANIM_ATTACKER, 2 delay 0x6e delay 0x3e playsewithpan SE_M_TELEPORT, SOUND_PAN_ATTACKER @@ -11253,34 +11251,34 @@ Move_LUNGE:: invisible ANIM_ATTACKER waitforvisualfinish playsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER - launchtemplate gLungeGreenBubbleTemplate 0x82 0x6 0xa 0x0 0x0 0x0 0x19 0xffe0 + createsprite gLungeGreenBubbleTemplate, ANIM_TARGET, 2, 0xa, 0x0, 0x0, 0x0, 0x19, 0xffe0 delay 0xF monbg ANIM_DEF_PARTNER delay 0x1 - launchtemplate gTealAlertSpriteTemplate 0x4 0x3 0x46 0x0 0x6 - launchtemplate gTealAlertSpriteTemplate 0x4 0x3 0x28 0x28 0x6 - launchtemplate gTealAlertSpriteTemplate 0x4 0x3 0xa 0xffc4 0x6 - launchtemplate gTealAlertSpriteTemplate 0x4 0x3 0xffce 0xffd8 0x6 - launchtemplate gTealAlertSpriteTemplate 0x4 0x3 0xffd8 0x28 0x6 - launchtemplate gTealAlertSpriteTemplate 0x4 0x3 0x32 0xffce 0x6 - launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_TARGET 0x0 0x5 0xb 0x1 - delay 0x2 - launchtemplate gTealAlertSpriteTemplate 0x4 0x3 0x32 0xffe2 0x6 - launchtemplate gTealAlertSpriteTemplate 0x4 0x3 0x3c 0xa 0x6 - launchtemplate gTealAlertSpriteTemplate 0x4 0x3 0x0 0x3c 0x6 - launchtemplate gTealAlertSpriteTemplate 0x4 0x3 0x0 0xffd8 0x6 - launchtemplate gTealAlertSpriteTemplate 0x4 0x3 0xffc4 0x14 0x6 - launchtemplate gTealAlertSpriteTemplate 0x4 0x3 0xffc4 0xffe2 0x6 - delay 0x2 - launchtemplate gTealAlertSpriteTemplate 0x4 0x3 0xffce 0x32 0x6 - launchtemplate gTealAlertSpriteTemplate 0x4 0x3 0xffc4 0x14 0x6 - launchtemplate gTealAlertSpriteTemplate 0x4 0x3 0xffd8 0xffd8 0x6 - launchtemplate gTealAlertSpriteTemplate 0x4 0x3 0x14 0xffc4 0x6 - launchtemplate gTealAlertSpriteTemplate 0x4 0x3 0x32 0xffce 0x6 - launchtemplate gTealAlertSpriteTemplate 0x4 0x3 0x23 0x28 0x6 + createsprite gTealAlertSpriteTemplate, ANIM_ATTACKER, 4, 0x46, 0x0, 0x6 + createsprite gTealAlertSpriteTemplate, ANIM_ATTACKER, 4, 0x28, 0x28, 0x6 + createsprite gTealAlertSpriteTemplate, ANIM_ATTACKER, 4, 0xa, 0xffc4, 0x6 + createsprite gTealAlertSpriteTemplate, ANIM_ATTACKER, 4, 0xffce, 0xffd8, 0x6 + createsprite gTealAlertSpriteTemplate, ANIM_ATTACKER, 4, 0xffd8, 0x28, 0x6 + createsprite gTealAlertSpriteTemplate, ANIM_ATTACKER, 4, 0x32, 0xffce, 0x6 + createvisualtask AnimTask_ShakeMon, 0x5, ANIM_TARGET, 0x0, 0x5, 0xb, 0x1 + delay 0x2 + createsprite gTealAlertSpriteTemplate, ANIM_ATTACKER, 4, 0x32, 0xffe2, 0x6 + createsprite gTealAlertSpriteTemplate, ANIM_ATTACKER, 4, 0x3c, 0xa, 0x6 + createsprite gTealAlertSpriteTemplate, ANIM_ATTACKER, 4, 0x0, 0x3c, 0x6 + createsprite gTealAlertSpriteTemplate, ANIM_ATTACKER, 4, 0x0, 0xffd8, 0x6 + createsprite gTealAlertSpriteTemplate, ANIM_ATTACKER, 4, 0xffc4, 0x14, 0x6 + createsprite gTealAlertSpriteTemplate, ANIM_ATTACKER, 4, 0xffc4, 0xffe2, 0x6 + delay 0x2 + createsprite gTealAlertSpriteTemplate, ANIM_ATTACKER, 4, 0xffce, 0x32, 0x6 + createsprite gTealAlertSpriteTemplate, ANIM_ATTACKER, 4, 0xffc4, 0x14, 0x6 + createsprite gTealAlertSpriteTemplate, ANIM_ATTACKER, 4, 0xffd8, 0xffd8, 0x6 + createsprite gTealAlertSpriteTemplate, ANIM_ATTACKER, 4, 0x14, 0xffc4, 0x6 + createsprite gTealAlertSpriteTemplate, ANIM_ATTACKER, 4, 0x32, 0xffce, 0x6 + createsprite gTealAlertSpriteTemplate, ANIM_ATTACKER, 4, 0x23, 0x28, 0x6 waitforvisualfinish playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET - launchtemplate gLungeGreenImpactTemplate 0x2 0x4 0x0 0x0 0x1 0x2 + createsprite gLungeGreenImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1, 0x2 waitforvisualfinish visible ANIM_ATTACKER clearmonbg ANIM_DEF_PARTNER @@ -11290,41 +11288,41 @@ Move_FIRE_LASH:: loadspritegfx ANIM_TAG_SMALL_EMBER monbg ANIM_DEF_PARTNER splitbgprio_foes ANIM_TARGET - launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x0 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x0 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x2 - launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x4 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x4 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x2 - launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x8 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x8 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x2 - launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0xc + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0xc playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x2 - launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x10 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x10 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x2 - launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x14 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x14 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x2 - launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x18 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x18 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER waitforvisualfinish - launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x18 0x0 0x0 0x6 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x18, 0x0, 0x0, 0x6 delay 0x4 - launchtask AnimTask_ShakeMon 0x2 0x5 0x1 0x5 0x0 0x8 0x1 - launchtask AnimTask_BlendMonInAndOut 0x3 0x5 0x1 0x1f 0xc 0x1 0x1 + createvisualtask AnimTask_ShakeMon, 0x2, 0x1, 0x5, 0x0, 0x8, 0x1 + createvisualtask AnimTask_BlendMonInAndOut, 0x3, 0x1, 0x1f, 0xc, 0x1, 0x1 playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_TARGET loadspritegfx ANIM_TAG_SLASH - launchtemplate gSlashSliceSpriteTemplate 0x82, 0x3, 0x1 0xfff8 0x0 + createsprite gSlashSliceSpriteTemplate, ANIM_TARGET, 2, 0x1, 0xfff8, 0x0 playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET delay 0x4 - launchtemplate gSlashSliceSpriteTemplate 0x82, 0x3, 0x1 0x8 0x0 - launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x4 0x0 0x12 0x1 + createsprite gSlashSliceSpriteTemplate, ANIM_TARGET, 2, 0x1, 0x8, 0x0 + createvisualtask AnimTask_ShakeMon2, 0x2, 0x1, 0x4, 0x0, 0x12, 0x1 playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET delay 0x7 - launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0x0 0x9 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x9 waitforvisualfinish clearmonbg ANIM_DEF_PARTNER end @@ -11338,36 +11336,36 @@ Move_POWER_TRIP:: playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call PowerTripBuffUp delay 0x8 - launchtask AnimTask_BlendColorCycle 0x2 0x6 ANIM_PAL_ATK 0x2 0x2 0x0 0xb 0x0 - launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1 + createvisualtask AnimTask_BlendColorCycle, 0x2, F_PAL_ATTACKER, 0x2, 0x2, 0x0, 0xb, 0x0 + createvisualtask AnimTask_ShakeMon2, 0x2, 0x0, 0x1, 0x0, 0x20, 0x1 call PowerTripBuffUp delay 0x8 call PowerTripBuffUp waitforvisualfinish playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET - launchtemplate gPowerTripImpactTemplate 0x2 0x4 0xFFF5 0xA 0x1 0x2 - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + createsprite gPowerTripImpactTemplate, ANIM_ATTACKER, 2, 0xFFF5, 0xA, 0x1, 0x2 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 delay 0x5 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET - launchtemplate gPowerTripImpactTemplate 0x2 0x4 0x0 0xFFF5 0x1 0x2 - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + createsprite gPowerTripImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0xFFF5, 0x1, 0x2 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 delay 0x5 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET - launchtemplate gPowerTripImpactTemplate 0x2 0x4 0xA 0x0 0x1 0x2 - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + createsprite gPowerTripImpactTemplate, ANIM_ATTACKER, 2, 0xA, 0x0, 0x1, 0x2 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 waitforvisualfinish clearmonbg ANIM_DEF_PARTNER end PowerTripBuffUp: - launchtemplate gPowerTripFocusEnergyTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2 + createsprite gPowerTripFocusEnergyTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x1a, 0x2 delay 0x4 - launchtemplate gPowerTripFocusEnergyTemplate 0x2 0x4 0x0 0xe 0x1c 0x1 + createsprite gPowerTripFocusEnergyTemplate, ANIM_ATTACKER, 2, 0x0, 0xe, 0x1c, 0x1 delay 0x4 - launchtemplate gPowerTripFocusEnergyTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2 + createsprite gPowerTripFocusEnergyTemplate, ANIM_ATTACKER, 2, 0x0, 0xfffb, 0xa, 0x2 delay 0x4 - launchtemplate gPowerTripFocusEnergyTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3 + createsprite gPowerTripFocusEnergyTemplate, ANIM_ATTACKER, 2, 0x0, 0x1c, 0x1a, 0x3 delay 0x4 - launchtemplate gPowerTripFocusEnergyTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1 + createsprite gPowerTripFocusEnergyTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff4, 0x0, 0x1 return Move_BURN_UP:: @@ -11376,54 +11374,54 @@ Move_BURN_UP:: loadspritegfx ANIM_TAG_PINK_CLOUD @yawn loadspritegfx ANIM_TAG_SMALL_EMBER @fire monbg ANIM_DEF_PARTNER - setblends 0x120C + setalpha 12, 18 fadetobg BG_FIRE waitbgfadeout - launchtask AnimTask_StartSlidingBg 0x5 0x4 0xA00 0x0 0x1 0xffff + createvisualtask AnimTask_StartSlidingBg, 0x5, 0xA00, 0x0, 0x1, 0xffff waitbgfadein - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x5 0x1c + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x5, 0x1c waitforvisualfinish - launchtask AnimTask_AllocBackupPalBuffer 0x5 0x0 + createvisualtask AnimTask_AllocBackupPalBuffer, 0x5 waitforvisualfinish - launchtask AnimTask_CopyPalUnfadedToBackup 0x5 0x2 0x0 0x1 + createvisualtask AnimTask_CopyPalUnfadedToBackup, 0x5, 0x0, 0x1 delay 0x1 - launchtask AnimTask_CopyPalFadedToUnfaded 0x5 0x1 0x0 + createvisualtask AnimTask_CopyPalFadedToUnfaded, 0x5, 0x0 delay 0x1 loopsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER 0x9 0x2 - launchtask AnimTask_CopyPalUnfadedToBackup 0x5 0x2 0x1 0x0 + createvisualtask AnimTask_CopyPalUnfadedToBackup, 0x5, 0x1, 0x0 delay 0x1 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x1 0x0 0xd 0x1c - launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_ATTACKER 0x2 0x0 0xf 0x1 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x1, 0x0, 0xd, 0x1c + createvisualtask AnimTask_ShakeMon, 0x5, ANIM_ATTACKER, 0x2, 0x0, 0xf, 0x1 waitforvisualfinish delay 0x1E - launchtemplate gUproarRingSpriteTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1f 0x8 + createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x8 waitforvisualfinish playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - launchtemplate gBurnUpRedYawnTemplate 0x80, 0x6 0x0 0x0 0x0 0x0 0x1e 0x0 + createsprite gBurnUpRedYawnTemplate, ANIM_TARGET, 0, 0x0, 0x0, 0x0, 0x0, 0x1e, 0x0 delay 0x1 - launchtask AnimTask_CopyPalFadedToUnfaded 0x5 0x1 0x1 + createvisualtask AnimTask_CopyPalFadedToUnfaded, 0x5, 0x1 delay 0x1 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x0 0x0 0xd 0x4a52 - launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_ATTACKER 0x3 0x0 0xf 0x1 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x0, 0x0, 0xd, 0x4a52 + createvisualtask AnimTask_ShakeMon, 0x5, ANIM_ATTACKER, 0x3, 0x0, 0xf, 0x1 delay 0xF - launchtask AnimTask_BlendBattleAnimPal 0xA 0x5 ANIM_PAL_DEF 0x2 0x0 0xC 0x1C + createvisualtask AnimTask_BlendBattleAnimPal, 0xA, F_PAL_TARGET, 0x2, 0x0, 0xC, 0x1C delay 0x1 - launchtask AnimTask_CopyPalUnfadedFromBackup 0x5 0x2 0x0 0x1 + createvisualtask AnimTask_CopyPalUnfadedFromBackup, 0x5, 0x0, 0x1 delay 0x1 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x5 0x0 0x1c + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x5, 0x0, 0x1c delay 0x1 - launchtask AnimTask_CopyPalUnfadedFromBackup 0x5 0x2 0x1 0x0 + createvisualtask AnimTask_CopyPalUnfadedFromBackup, 0x5, 0x1, 0x0 delay 0x1 playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_TARGET - launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_TARGET 0x2 0x0 0xf 0x1 + createvisualtask AnimTask_ShakeMon, 0x5, ANIM_TARGET, 0x2, 0x0, 0xf, 0x1 call FireSpreadEffect waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x0 0xd 0x0 0x4a52 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x0, 0xd, 0x0, 0x4a52 delay 0x1 - launchtask AnimTask_FreeBackupPalBuffer 0x5 0x0 + createvisualtask AnimTask_FreeBackupPalBuffer, 0x5 delay 0x1 waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xA 0x5 ANIM_PAL_DEF 0x2 0xC 0x0 0x1C + createvisualtask AnimTask_BlendBattleAnimPal, 0xA, F_PAL_TARGET, 0x2, 0xC, 0x0, 0x1C waitforvisualfinish call UnsetPsychicBg clearmonbg ANIM_DEF_PARTNER @@ -11437,29 +11435,29 @@ Move_SPEED_SWAP:: monbg ANIM_TARGET panse SE_M_MINIMIZE, SOUND_PAN_TARGET, SOUND_PAN_ATTACKER, 0xfd, 0x0 delay 0xf - launchtemplate gSpeedSwapCircleTemplate 0x82 0x2 0xfff4 0x18 + createsprite gSpeedSwapCircleTemplate, ANIM_TARGET, 2, 0xfff4, 0x18 delay 0x5 - launchtemplate gSpeedSwapRingTemplate 0x28 0x4 0x0 0x0 0x1 0x0 - launchtemplate gSpeedSwapOrbTemplate 0x82 0x5 0x1 0x0 0x0 0xFFE0 0x10 - launchtemplate gSpeedSwapOrbTemplate 0x82 0x5 0x1 0x0 0x16 0xFFEA 0x10 - launchtemplate gSpeedSwapOrbTemplate 0x82 0x5 0x1 0x0 0x1E 0x0 0x10 - launchtemplate gSpeedSwapOrbTemplate 0x82 0x5 0x1 0x0 0x14 0x14 0x10 - launchtemplate gSpeedSwapOrbTemplate 0x82 0x5 0x1 0x0 0x0 0x1C 0x10 - launchtemplate gSpeedSwapOrbTemplate 0x82 0x5 0x1 0x0 0xFFED 0x13 0x10 - launchtemplate gSpeedSwapOrbTemplate 0x82 0x5 0x1 0x0 0xFFE5 0x0 0x10 - launchtemplate gSpeedSwapOrbTemplate 0x82 0x5 0x1 0x0 0xFFEE 0xFFEE 0x10 + createsprite gSpeedSwapRingTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x1, 0x0 + createsprite gSpeedSwapOrbTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x0, 0xFFE0, 0x10 + createsprite gSpeedSwapOrbTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x16, 0xFFEA, 0x10 + createsprite gSpeedSwapOrbTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x1E, 0x0, 0x10 + createsprite gSpeedSwapOrbTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x14, 0x14, 0x10 + createsprite gSpeedSwapOrbTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x0, 0x1C, 0x10 + createsprite gSpeedSwapOrbTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0xFFED, 0x13, 0x10 + createsprite gSpeedSwapOrbTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0xFFE5, 0x0, 0x10 + createsprite gSpeedSwapOrbTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0xFFEE, 0xFFEE, 0x10 waitforvisualfinish panse SE_M_MINIMIZE, SOUND_PAN_TARGET, SOUND_PAN_ATTACKER, 0xfd, 0x0 - launchtemplate gSpeedSwapOrbMissileTemplate 0x80 0x6 0x0 0x0 0x0 0x0 0x1e 0x0 - launchtemplate gSpeedSwapRingTemplate 0x28 0x4 0x0 0x0 0x0 0x0 - launchtemplate gSpeedSwapOrbTemplate 0x82 0x5 0x0 0x0 0x0 0xFFE0 0x10 - launchtemplate gSpeedSwapOrbTemplate 0x82 0x5 0x0 0x0 0x16 0xFFEA 0x10 - launchtemplate gSpeedSwapOrbTemplate 0x82 0x5 0x0 0x0 0x1E 0x0 0x10 - launchtemplate gSpeedSwapOrbTemplate 0x82 0x5 0x0 0x0 0x14 0x14 0x10 - launchtemplate gSpeedSwapOrbTemplate 0x82 0x5 0x0 0x0 0x0 0x1C 0x10 - launchtemplate gSpeedSwapOrbTemplate 0x82 0x5 0x0 0x0 0xFFED 0x13 0x10 - launchtemplate gSpeedSwapOrbTemplate 0x82 0x5 0x0 0x0 0xFFE5 0x0 0x10 - launchtemplate gSpeedSwapOrbTemplate 0x82 0x5 0x0 0x0 0xFFEE 0xFFEE 0x10 + createsprite gSpeedSwapOrbMissileTemplate, ANIM_TARGET, 0, 0x0, 0x0, 0x0, 0x0, 0x1e, 0x0 + createsprite gSpeedSwapRingTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0 + createsprite gSpeedSwapOrbTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x0, 0xFFE0, 0x10 + createsprite gSpeedSwapOrbTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x16, 0xFFEA, 0x10 + createsprite gSpeedSwapOrbTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x1E, 0x0, 0x10 + createsprite gSpeedSwapOrbTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x14, 0x14, 0x10 + createsprite gSpeedSwapOrbTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x0, 0x1C, 0x10 + createsprite gSpeedSwapOrbTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xFFED, 0x13, 0x10 + createsprite gSpeedSwapOrbTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xFFE5, 0x0, 0x10 + createsprite gSpeedSwapOrbTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xFFEE, 0xFFEE, 0x10 waitforvisualfinish clearmonbg ANIM_TARGET end @@ -11470,11 +11468,11 @@ Move_SMART_STRIKE:: loadspritegfx ANIM_TAG_IMPACT @hit loadspritegfx ANIM_TAG_FLASH_CANNON_BALL @ball loadspritegfx ANIM_TAG_LOCK_ON - launchtemplate gLockOnTargetSpriteTemplate 0x28 0x0 - launchtemplate gLockOnMoveTargetSpriteTemplate 0x28 0x1 0x1 - launchtemplate gLockOnMoveTargetSpriteTemplate 0x28 0x1 0x2 - launchtemplate gLockOnMoveTargetSpriteTemplate 0x28 0x1 0x3 - launchtemplate gLockOnMoveTargetSpriteTemplate 0x28 0x1 0x4 + createsprite gLockOnTargetSpriteTemplate, ANIM_ATTACKER, 40 + createsprite gLockOnMoveTargetSpriteTemplate, ANIM_ATTACKER, 40, 0x1 + createsprite gLockOnMoveTargetSpriteTemplate, ANIM_ATTACKER, 40, 0x2 + createsprite gLockOnMoveTargetSpriteTemplate, ANIM_ATTACKER, 40, 0x3 + createsprite gLockOnMoveTargetSpriteTemplate, ANIM_ATTACKER, 40, 0x4 delay 0x78 setarg 0x7 0xffff waitforvisualfinish @@ -11482,18 +11480,18 @@ Move_SMART_STRIKE:: splitbgprio ANIM_TARGET setalpha 12, 8 call SonicBoomProjectile - launchtask AnimTask_ShakeMon 0x2 0x5 0x1 0x3 0x0 0xa 0x1 + createvisualtask AnimTask_ShakeMon, 0x2, 0x1, 0x3, 0x0, 0xa, 0x1 loadspritegfx ANIM_TAG_FLASH_CANNON_BALL - launchtemplate gSmartStrikeImpactTemplate 0x84 0x5 0x0 0x0 0x8 0x1 0x0 + createsprite gSmartStrikeImpactTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x8, 0x1, 0x0 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET - launchtemplate gSmartStrikeGemTemplate 0x82 0x5 0x1 0x1 0x0 0xffe8 0xa - launchtemplate gSmartStrikeGemTemplate 0x82 0x5 0x1 0x1 0x11 0xffef 0xa - launchtemplate gSmartStrikeGemTemplate 0x82 0x5 0x1 0x1 0x18 0x0 0xa - launchtemplate gSmartStrikeGemTemplate 0x82 0x5 0x1 0x1 0x11 0x11 0xa - launchtemplate gSmartStrikeGemTemplate 0x82 0x5 0x1 0x1 0x0 0x18 0xa - launchtemplate gSmartStrikeGemTemplate 0x82 0x5 0x1 0x1 0xffef 0x11 0xa - launchtemplate gSmartStrikeGemTemplate 0x82 0x5 0x1 0x1 0xffe8 0x0 0xa - launchtemplate gSmartStrikeGemTemplate 0x82 0x5 0x1 0x1 0xffef 0xffef 0xa + createsprite gSmartStrikeGemTemplate, ANIM_TARGET, 2, 0x1, 0x1, 0x0, 0xffe8, 0xa + createsprite gSmartStrikeGemTemplate, ANIM_TARGET, 2, 0x1, 0x1, 0x11, 0xffef, 0xa + createsprite gSmartStrikeGemTemplate, ANIM_TARGET, 2, 0x1, 0x1, 0x18, 0x0, 0xa + createsprite gSmartStrikeGemTemplate, ANIM_TARGET, 2, 0x1, 0x1, 0x11, 0x11, 0xa + createsprite gSmartStrikeGemTemplate, ANIM_TARGET, 2, 0x1, 0x1, 0x0, 0x18, 0xa + createsprite gSmartStrikeGemTemplate, ANIM_TARGET, 2, 0x1, 0x1, 0xffef, 0x11, 0xa + createsprite gSmartStrikeGemTemplate, ANIM_TARGET, 2, 0x1, 0x1, 0xffe8, 0x0, 0xa + createsprite gSmartStrikeGemTemplate, ANIM_TARGET, 2, 0x1, 0x1, 0xffef, 0xffef, 0xa waitforvisualfinish clearmonbg ANIM_DEF_PARTNER blendoff @@ -11511,21 +11509,21 @@ Move_PURIFY:: splitbgprio ANIM_TARGET setalpha 12, 8 playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER - launchtemplate gPurifyWhiteBallTemplate 0x2 0x6 0x14 0xfff8 0xfff8 0xfff8 0x14 0xffe0 + createsprite gPurifyWhiteBallTemplate, ANIM_ATTACKER, 2, 0x14, 0xfff8, 0xfff8, 0xfff8, 0x14, 0xffe0 delay 0x13 playsewithpan SE_M_SAND_ATTACK, SOUND_PAN_TARGET - launchtemplate gPurifySmokeTemplate 0x84 0x5 0x0 0xfff4 0x68 0x0 0x4b - launchtemplate gPurifySmokeTemplate 0x84 0x5 0x0 0xfff4 0x48 0x1 0x4b - launchtemplate gPurifySmokeTemplate 0x84 0x5 0x0 0xfffa 0x38 0x1 0x4b - launchtemplate gPurifySmokeTemplate 0x84 0x5 0x0 0xfffa 0x58 0x0 0x4b - launchtemplate gPurifySmokeTemplate 0x84 0x5 0x0 0x0 0x38 0x0 0x4b - launchtemplate gPurifySmokeTemplate 0x84 0x5 0x0 0x0 0x58 0x1 0x4b - launchtemplate gPurifySmokeTemplate 0x84 0x5 0x0 0x6 0x48 0x0 0x4b - launchtemplate gPurifySmokeTemplate 0x84 0x5 0x0 0x6 0x68 0x1 0x4b - launchtemplate gPurifySmokeTemplate 0x84 0x5 0x0 0xc 0x48 0x0 0x4b - launchtemplate gPurifySmokeTemplate 0x84 0x5 0x0 0xc 0x38 0x1 0x4b - launchtemplate gPurifySmokeTemplate 0x84 0x5 0x0 0x12 0x50 0x0 0x4b - launchtemplate gPurifySmokeTemplate 0x84 0x5 0x0 0x12 0x48 0x1 0x4b + createsprite gPurifySmokeTemplate, ANIM_TARGET, 4, 0x0, 0xfff4, 0x68, 0x0, 0x4b + createsprite gPurifySmokeTemplate, ANIM_TARGET, 4, 0x0, 0xfff4, 0x48, 0x1, 0x4b + createsprite gPurifySmokeTemplate, ANIM_TARGET, 4, 0x0, 0xfffa, 0x38, 0x1, 0x4b + createsprite gPurifySmokeTemplate, ANIM_TARGET, 4, 0x0, 0xfffa, 0x58, 0x0, 0x4b + createsprite gPurifySmokeTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x38, 0x0, 0x4b + createsprite gPurifySmokeTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x58, 0x1, 0x4b + createsprite gPurifySmokeTemplate, ANIM_TARGET, 4, 0x0, 0x6, 0x48, 0x0, 0x4b + createsprite gPurifySmokeTemplate, ANIM_TARGET, 4, 0x0, 0x6, 0x68, 0x1, 0x4b + createsprite gPurifySmokeTemplate, ANIM_TARGET, 4, 0x0, 0xc, 0x48, 0x0, 0x4b + createsprite gPurifySmokeTemplate, ANIM_TARGET, 4, 0x0, 0xc, 0x38, 0x1, 0x4b + createsprite gPurifySmokeTemplate, ANIM_TARGET, 4, 0x0, 0x12, 0x50, 0x0, 0x4b + createsprite gPurifySmokeTemplate, ANIM_TARGET, 4, 0x0, 0x12, 0x48, 0x1, 0x4b waitforvisualfinish clearmonbg ANIM_TARGET blendoff @@ -11538,50 +11536,50 @@ Move_REVELATION_DANCE:: loadspritegfx ANIM_TAG_AIR_WAVE @sonicboom loadspritegfx ANIM_TAG_THIN_RING @ring monbg ANIM_TARGET - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xF 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xF, 0x0 waitforvisualfinish playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER - launchtask AnimTask_RockMonBackAndForth 0x5 0x3 0x0 0x2 0x0 - launchtemplate gRevelationDanceYellowOrbsTemplate 0x2 0x4 0x0 0xffe8 0x8 0x8c - launchtemplate gRevelationDanceYellowFlowerTemplate 0x2 0x4 0x10 0xffe8 0x8 0x64 - launchtemplate gRevelationDanceYellowFlowerTemplate 0x2 0x4 0xfff0 0xffe8 0x8 0x64 + createvisualtask AnimTask_RockMonBackAndForth, 0x5, 0x0, 0x2, 0x0 + createsprite gRevelationDanceYellowOrbsTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x8, 0x8c + createsprite gRevelationDanceYellowFlowerTemplate, ANIM_ATTACKER, 2, 0x10, 0xffe8, 0x8, 0x64 + createsprite gRevelationDanceYellowFlowerTemplate, ANIM_ATTACKER, 2, 0xfff0, 0xffe8, 0x8, 0x64 delay 0xf - launchtemplate gRevelationDanceYellowOrbsTemplate 0x2 0x4 0x0 0xffe8 0x8 0x8c - launchtemplate gRevelationDanceYellowFlowerTemplate 0x2 0x4 0x20 0xffe8 0x8 0x64 - launchtemplate gRevelationDanceYellowFlowerTemplate 0x2 0x4 0xffe0 0xffe8 0x8 0x64 + createsprite gRevelationDanceYellowOrbsTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x8, 0x8c + createsprite gRevelationDanceYellowFlowerTemplate, ANIM_ATTACKER, 2, 0x20, 0xffe8, 0x8, 0x64 + createsprite gRevelationDanceYellowFlowerTemplate, ANIM_ATTACKER, 2, 0xffe0, 0xffe8, 0x8, 0x64 delay 0xf - launchtemplate gRevelationDanceYellowOrbsTemplate 0x2 0x4 0x0 0xffe8 0x8 0x8c - launchtemplate gRevelationDanceYellowFlowerTemplate 0x2 0x4 0x18 0xffe8 0x8 0x64 - launchtemplate gRevelationDanceYellowFlowerTemplate 0x2 0x4 0xffe8 0xffe8 0x8 0x64 + createsprite gRevelationDanceYellowOrbsTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x8, 0x8c + createsprite gRevelationDanceYellowFlowerTemplate, ANIM_ATTACKER, 2, 0x18, 0xffe8, 0x8, 0x64 + createsprite gRevelationDanceYellowFlowerTemplate, ANIM_ATTACKER, 2, 0xffe8, 0xffe8, 0x8, 0x64 delay 0x1e - launchtemplate gRevelationDanceYellowFlowerTemplate 0x2 0x4 0x10 0xffe8 0x0 0x64 - launchtemplate gRevelationDanceYellowFlowerTemplate 0x2 0x4 0xfff0 0xffe8 0x0 0x64 + createsprite gRevelationDanceYellowFlowerTemplate, ANIM_ATTACKER, 2, 0x10, 0xffe8, 0x0, 0x64 + createsprite gRevelationDanceYellowFlowerTemplate, ANIM_ATTACKER, 2, 0xfff0, 0xffe8, 0x0, 0x64 delay 0x1e - launchtask AnimTask_RockMonBackAndForth 0x5 0x3 0x0 0x2 0x0 - launchtemplate gRevelationDanceYellowFlowerTemplate 0x2 0x4 0x14 0xfff0 0xe 0x50 - launchtemplate gRevelationDanceYellowFlowerTemplate 0x2 0x4 0xffec 0xfff2 0x10 0x50 + createvisualtask AnimTask_RockMonBackAndForth, 0x5, 0x0, 0x2, 0x0 + createsprite gRevelationDanceYellowFlowerTemplate, ANIM_ATTACKER, 2, 0x14, 0xfff0, 0xe, 0x50 + createsprite gRevelationDanceYellowFlowerTemplate, ANIM_ATTACKER, 2, 0xffec, 0xfff2, 0x10, 0x50 waitforvisualfinish unloadspritegfx ANIM_TAG_FLOWER @particles loadspritegfx ANIM_TAG_IMPACT @hit loadspritegfx ANIM_TAG_SMALL_EMBER @light yellow playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER - launchtemplate gRevelationDanceYellowAirWaveTemplate 0x82 0x5 0x10 0x0 0x0 0x0 0xf + createsprite gRevelationDanceYellowAirWaveTemplate, ANIM_TARGET, 2, 0x10, 0x0, 0x0, 0x0, 0xf waitforvisualfinish playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET - launchtemplate gRevelationDanceYellowImpactTemplate 0x2 0x4 0x0 0x0 0x1 0x2 - launchtemplate gRevelationDanceYellowRingTemplate 0x3 0x6 0x0 0x0 0x1 0x0 0x1f 0x8 - launchtemplate gRevelationDanceYellowDispersalTemplate 0x81 0x5 0x0 0xa 0x0 0xb0 0x28 + createsprite gRevelationDanceYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1, 0x2 + createsprite gRevelationDanceYellowRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x1, 0x0, 0x1f, 0x8 + createsprite gRevelationDanceYellowDispersalTemplate, ANIM_TARGET, 1, 0x0, 0xa, 0x0, 0xb0, 0x28 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_ATTACKER - launchtemplate gRevelationDanceYellowDispersalTemplate 0x81 0x5 0x0 0xa 0xff40 0xf0 0x28 - launchtemplate gRevelationDanceYellowDispersalTemplate 0x81 0x5 0x0 0xa 0x0 0xff60 0x28 + createsprite gRevelationDanceYellowDispersalTemplate, ANIM_TARGET, 1, 0x0, 0xa, 0xff40, 0xf0, 0x28 + createsprite gRevelationDanceYellowDispersalTemplate, ANIM_TARGET, 1, 0x0, 0xa, 0x0, 0xff60, 0x28 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_ATTACKER - launchtemplate gRevelationDanceYellowDispersalTemplate 0x81 0x5 0x0 0xa 0xff40 0xff90 0x28 - launchtemplate gRevelationDanceYellowDispersalTemplate 0x81 0x5 0x0 0xa 0xa0 0x30 0x28 - launchtemplate gRevelationDanceYellowDispersalTemplate 0x81 0x5 0x0 0xa 0xff20 0xffe0 0x28 - launchtemplate gRevelationDanceYellowDispersalTemplate 0x81 0x5 0x0 0xa 0x70 0xff80 0x28 - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + createsprite gRevelationDanceYellowDispersalTemplate, ANIM_TARGET, 1, 0x0, 0xa, 0xff40, 0xff90, 0x28 + createsprite gRevelationDanceYellowDispersalTemplate, ANIM_TARGET, 1, 0x0, 0xa, 0xa0, 0x30, 0x28 + createsprite gRevelationDanceYellowDispersalTemplate, ANIM_TARGET, 1, 0x0, 0xa, 0xff20, 0xffe0, 0x28 + createsprite gRevelationDanceYellowDispersalTemplate, ANIM_TARGET, 1, 0x0, 0xa, 0x70, 0xff80, 0x28 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xF 0x0 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xF, 0x0, 0x0 waitforvisualfinish clearmonbg ANIM_TARGET end @@ -11597,109 +11595,109 @@ Move_CORE_ENFORCER:: setalpha 12, 8 fadetobg BG_COSMIC waitbgfadeout - launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0 0xFC00 0x1 0xffff + createvisualtask AnimTask_StartSlidingBg, 0x5, 0x0, 0xFC00, 0x1, 0xffff waitbgfadein loopsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER 0xd 0xA - launchtemplate gCoreEnforcerCircleChargeTemplate 0x2 0x4 0x0 0x0 0x0 0x2 - launchtemplate gCoreEnforcerBlueRingTemplate 0x28 0x4 0x0 0x0 0x0 0x0 - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0 + createsprite gCoreEnforcerCircleChargeTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 + createsprite gCoreEnforcerBlueRingTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0x20, 0x18, 0xbe, 0xc, 0x0, 0x1, 0x0 delay 0x0 - launchtemplate gCoreEnforcerBlueSparkTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0 - launchtemplate gCoreEnforcerGreenChargeTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1 + createsprite gCoreEnforcerBlueSparkTemplate, ANIM_ATTACKER, 0, 0x50, 0x18, 0x16, 0xc, 0x0, 0x1, 0x0 + createsprite gCoreEnforcerGreenChargeTemplate, ANIM_ATTACKER, 0, 0x9c, 0x18, 0x79, 0xd, 0x0, 0x1, 0x1 delay 0x5 - launchtemplate gCoreEnforcerGreenChargeTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0 - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1 + createsprite gCoreEnforcerGreenChargeTemplate, ANIM_ATTACKER, 0, 0x64, 0x18, 0x3c, 0xa, 0x0, 0x1, 0x0 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0xaa, 0x18, 0x2a, 0xb, 0x0, 0x1, 0x1 delay 0x0 - launchtemplate gCoreEnforcerBlueSparkTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1 + createsprite gCoreEnforcerBlueSparkTemplate, ANIM_ATTACKER, 0, 0xee, 0x18, 0xa5, 0xa, 0x0, 0x1, 0x1 delay 0x5 - launchtemplate gCoreEnforcerBlueSparkTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0 + createsprite gCoreEnforcerBlueSparkTemplate, ANIM_ATTACKER, 0, 0x20, 0x18, 0xbe, 0xc, 0x0, 0x1, 0x0 delay 0x0 - launchtemplate gCoreEnforcerGreenChargeTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0 - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1 + createsprite gCoreEnforcerGreenChargeTemplate, ANIM_ATTACKER, 0, 0x50, 0x18, 0x16, 0xc, 0x0, 0x1, 0x0 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0x9c, 0x18, 0x79, 0xd, 0x0, 0x1, 0x1 waitforvisualfinish - launchtemplate gCoreEnforcerCircleChargeTemplate 0x2 0x4 0x0 0x0 0x0 0x2 - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0 - launchtemplate gCoreEnforcerBlueSparkTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1 + createsprite gCoreEnforcerCircleChargeTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0x64, 0x18, 0x3c, 0xa, 0x0, 0x1, 0x0 + createsprite gCoreEnforcerBlueSparkTemplate, ANIM_ATTACKER, 0, 0xaa, 0x18, 0x2a, 0xb, 0x0, 0x1, 0x1 delay 0x0 - launchtemplate gCoreEnforcerGreenChargeTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1 + createsprite gCoreEnforcerGreenChargeTemplate, ANIM_ATTACKER, 0, 0xee, 0x18, 0xa5, 0xa, 0x0, 0x1, 0x1 delay 0x5 - launchtemplate gCoreEnforcerGreenChargeTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0 + createsprite gCoreEnforcerGreenChargeTemplate, ANIM_ATTACKER, 0, 0x20, 0x18, 0xbe, 0xc, 0x0, 0x1, 0x0 delay 0x0 - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0 - launchtemplate gCoreEnforcerBlueSparkTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0x50, 0x18, 0x16, 0xc, 0x0, 0x1, 0x0 + createsprite gCoreEnforcerBlueSparkTemplate, ANIM_ATTACKER, 0, 0x9c, 0x18, 0x79, 0xd, 0x0, 0x1, 0x1 delay 0x5 - launchtemplate gCoreEnforcerBlueSparkTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0 - launchtemplate gCoreEnforcerGreenChargeTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1 + createsprite gCoreEnforcerBlueSparkTemplate, ANIM_ATTACKER, 0, 0x64, 0x18, 0x3c, 0xa, 0x0, 0x1, 0x0 + createsprite gCoreEnforcerGreenChargeTemplate, ANIM_ATTACKER, 0, 0xaa, 0x18, 0x2a, 0xb, 0x0, 0x1, 0x1 delay 0x0 - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0xee, 0x18, 0xa5, 0xa, 0x0, 0x1, 0x1 waitforvisualfinish - launchtemplate gCoreEnforcerCircleChargeTemplate 0x2 0x4 0x0 0x0 0x0 0x2 - launchtemplate gCoreEnforcerYellowRingTemplate 0x28 0x4 0x0 0x0 0x0 0x0 - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0 + createsprite gCoreEnforcerCircleChargeTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 + createsprite gCoreEnforcerYellowRingTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0x20, 0x18, 0xbe, 0xc, 0x0, 0x1, 0x0 delay 0x0 - launchtemplate gCoreEnforcerBlueSparkTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0 - launchtemplate gCoreEnforcerGreenChargeTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1 + createsprite gCoreEnforcerBlueSparkTemplate, ANIM_ATTACKER, 0, 0x50, 0x18, 0x16, 0xc, 0x0, 0x1, 0x0 + createsprite gCoreEnforcerGreenChargeTemplate, ANIM_ATTACKER, 0, 0x9c, 0x18, 0x79, 0xd, 0x0, 0x1, 0x1 delay 0x5 - launchtemplate gCoreEnforcerGreenChargeTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0 - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1 + createsprite gCoreEnforcerGreenChargeTemplate, ANIM_ATTACKER, 0, 0x64, 0x18, 0x3c, 0xa, 0x0, 0x1, 0x0 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0xaa, 0x18, 0x2a, 0xb, 0x0, 0x1, 0x1 delay 0x0 - launchtemplate gCoreEnforcerBlueSparkTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1 + createsprite gCoreEnforcerBlueSparkTemplate, ANIM_ATTACKER, 0, 0xee, 0x18, 0xa5, 0xa, 0x0, 0x1, 0x1 delay 0x5 - launchtemplate gCoreEnforcerBlueSparkTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0 + createsprite gCoreEnforcerBlueSparkTemplate, ANIM_ATTACKER, 0, 0x20, 0x18, 0xbe, 0xc, 0x0, 0x1, 0x0 delay 0x0 - launchtemplate gCoreEnforcerGreenChargeTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0 - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1 + createsprite gCoreEnforcerGreenChargeTemplate, ANIM_ATTACKER, 0, 0x50, 0x18, 0x16, 0xc, 0x0, 0x1, 0x0 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0x9c, 0x18, 0x79, 0xd, 0x0, 0x1, 0x1 waitforvisualfinish - launchtemplate gCoreEnforcerCircleChargeTemplate 0x2 0x4 0x0 0x0 0x0 0x2 - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0 - launchtemplate gCoreEnforcerBlueSparkTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1 + createsprite gCoreEnforcerCircleChargeTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0x64, 0x18, 0x3c, 0xa, 0x0, 0x1, 0x0 + createsprite gCoreEnforcerBlueSparkTemplate, ANIM_ATTACKER, 0, 0xaa, 0x18, 0x2a, 0xb, 0x0, 0x1, 0x1 delay 0x0 - launchtemplate gCoreEnforcerGreenChargeTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1 + createsprite gCoreEnforcerGreenChargeTemplate, ANIM_ATTACKER, 0, 0xee, 0x18, 0xa5, 0xa, 0x0, 0x1, 0x1 delay 0x5 - launchtemplate gCoreEnforcerGreenChargeTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0 + createsprite gCoreEnforcerGreenChargeTemplate, ANIM_ATTACKER, 0, 0x20, 0x18, 0xbe, 0xc, 0x0, 0x1, 0x0 delay 0x0 - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0 - launchtemplate gCoreEnforcerBlueSparkTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0x50, 0x18, 0x16, 0xc, 0x0, 0x1, 0x0 + createsprite gCoreEnforcerBlueSparkTemplate, ANIM_ATTACKER, 0, 0x9c, 0x18, 0x79, 0xd, 0x0, 0x1, 0x1 delay 0x5 - launchtemplate gCoreEnforcerBlueSparkTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0 - launchtemplate gCoreEnforcerGreenChargeTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1 + createsprite gCoreEnforcerBlueSparkTemplate, ANIM_ATTACKER, 0, 0x64, 0x18, 0x3c, 0xa, 0x0, 0x1, 0x0 + createsprite gCoreEnforcerGreenChargeTemplate, ANIM_ATTACKER, 0, 0xaa, 0x18, 0x2a, 0xb, 0x0, 0x1, 0x1 delay 0x0 - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0xee, 0x18, 0xa5, 0xa, 0x0, 0x1, 0x1 waitforvisualfinish - launchtemplate gCoreEnforcerCircleChargeTemplate 0x2 0x4 0x0 0x0 0x0 0x2 - launchtemplate gCoreEnforcerGreenRingTemplate 0x28 0x4 0x0 0x0 0x0 0x0 - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0 + createsprite gCoreEnforcerCircleChargeTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 + createsprite gCoreEnforcerGreenRingTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0x20, 0x18, 0xbe, 0xc, 0x0, 0x1, 0x0 delay 0x0 - launchtemplate gCoreEnforcerBlueSparkTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0 - launchtemplate gCoreEnforcerGreenChargeTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1 + createsprite gCoreEnforcerBlueSparkTemplate, ANIM_ATTACKER, 0, 0x50, 0x18, 0x16, 0xc, 0x0, 0x1, 0x0 + createsprite gCoreEnforcerGreenChargeTemplate, ANIM_ATTACKER, 0, 0x9c, 0x18, 0x79, 0xd, 0x0, 0x1, 0x1 delay 0x5 - launchtemplate gCoreEnforcerGreenChargeTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0 - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1 + createsprite gCoreEnforcerGreenChargeTemplate, ANIM_ATTACKER, 0, 0x64, 0x18, 0x3c, 0xa, 0x0, 0x1, 0x0 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0xaa, 0x18, 0x2a, 0xb, 0x0, 0x1, 0x1 delay 0x0 - launchtemplate gCoreEnforcerBlueSparkTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1 + createsprite gCoreEnforcerBlueSparkTemplate, ANIM_ATTACKER, 0, 0xee, 0x18, 0xa5, 0xa, 0x0, 0x1, 0x1 delay 0x5 - launchtemplate gCoreEnforcerBlueSparkTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0 + createsprite gCoreEnforcerBlueSparkTemplate, ANIM_ATTACKER, 0, 0x20, 0x18, 0xbe, 0xc, 0x0, 0x1, 0x0 delay 0x0 - launchtemplate gCoreEnforcerGreenChargeTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0 - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1 + createsprite gCoreEnforcerGreenChargeTemplate, ANIM_ATTACKER, 0, 0x50, 0x18, 0x16, 0xc, 0x0, 0x1, 0x0 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0x9c, 0x18, 0x79, 0xd, 0x0, 0x1, 0x1 waitforvisualfinish - launchtemplate gCoreEnforcerCircleChargeTemplate 0x2 0x4 0x0 0x0 0x0 0x2 - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0 - launchtemplate gCoreEnforcerBlueSparkTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1 + createsprite gCoreEnforcerCircleChargeTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0x64, 0x18, 0x3c, 0xa, 0x0, 0x1, 0x0 + createsprite gCoreEnforcerBlueSparkTemplate, ANIM_ATTACKER, 0, 0xaa, 0x18, 0x2a, 0xb, 0x0, 0x1, 0x1 delay 0x0 - launchtemplate gCoreEnforcerGreenChargeTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1 + createsprite gCoreEnforcerGreenChargeTemplate, ANIM_ATTACKER, 0, 0xee, 0x18, 0xa5, 0xa, 0x0, 0x1, 0x1 delay 0x5 - launchtemplate gCoreEnforcerGreenChargeTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0 + createsprite gCoreEnforcerGreenChargeTemplate, ANIM_ATTACKER, 0, 0x20, 0x18, 0xbe, 0xc, 0x0, 0x1, 0x0 delay 0x0 - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0 - launchtemplate gCoreEnforcerBlueSparkTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0x50, 0x18, 0x16, 0xc, 0x0, 0x1, 0x0 + createsprite gCoreEnforcerBlueSparkTemplate, ANIM_ATTACKER, 0, 0x9c, 0x18, 0x79, 0xd, 0x0, 0x1, 0x1 delay 0x5 - launchtemplate gCoreEnforcerBlueSparkTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0 - launchtemplate gCoreEnforcerGreenChargeTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1 + createsprite gCoreEnforcerBlueSparkTemplate, ANIM_ATTACKER, 0, 0x64, 0x18, 0x3c, 0xa, 0x0, 0x1, 0x0 + createsprite gCoreEnforcerGreenChargeTemplate, ANIM_ATTACKER, 0, 0xaa, 0x18, 0x2a, 0xb, 0x0, 0x1, 0x1 delay 0x0 - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0xee, 0x18, 0xa5, 0xa, 0x0, 0x1, 0x1 delay 0x5 - launchtemplate gCoreEnforcerCircleChargeTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + createsprite gCoreEnforcerCircleChargeTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 waitforvisualfinish unloadspritegfx ANIM_TAG_SPARK_2 @yellow color unloadspritegfx ANIM_TAG_LEAF @green color @@ -11717,87 +11715,87 @@ Move_CORE_ENFORCER:: createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SNORE_Z, 0, 0xA, 0xA, 0x0688 @Green delay 0x10 monbg ANIM_TARGET - launchtask AnimTask_CreateSmallSolarBeamOrbs 0x5 0x0 + createvisualtask AnimTask_CreateSmallSolarBeamOrbs, 0x5 panse SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0 - launchtask AnimTask_ShakeMon2 0x5 0x5 ANIM_TARGET 0x2 0x0 0x41 0x1 - launchtask AnimTask_ShakeMon2 0x5 0x5 ANIM_DEF_PARTNER 0x2 0x0 0x41 0x1 - launchtemplate gCoreEnforcerBeamTemplate 0x83 0x4 0xf 0x0 0x14 0x0 - launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0xfff5 0xffe2 0x1 0x3 + createvisualtask AnimTask_ShakeMon2, 0x5, ANIM_TARGET, 0x2, 0x0, 0x41, 0x1 + createvisualtask AnimTask_ShakeMon2, 0x5, ANIM_DEF_PARTNER, 0x2, 0x0, 0x41, 0x1 + createsprite gCoreEnforcerBeamTemplate, ANIM_TARGET, 3, 0xf, 0x0, 0x14, 0x0 + createsprite gCoreEnforcerImpactTemplate, ANIM_TARGET, 3, 0xfff5, 0xffe2, 0x1, 0x3 delay 0x1 - launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0xfffa 0xffe2 0x1 0x3 + createsprite gCoreEnforcerImpactTemplate, ANIM_TARGET, 3, 0xfffa, 0xffe2, 0x1, 0x3 delay 0x1 - launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0xffff 0xffe2 0x1 0x3 + createsprite gCoreEnforcerImpactTemplate, ANIM_TARGET, 3, 0xffff, 0xffe2, 0x1, 0x3 delay 0x1 - launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0x5 0xffe2 0x1 0x3 + createsprite gCoreEnforcerImpactTemplate, ANIM_TARGET, 3, 0x5, 0xffe2, 0x1, 0x3 delay 0x1 - launchtemplate gCoreEnforcerBeamTemplate 0x83 0x4 0xf 0x0 0x14 0x1 - launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0xA 0xffe2 0x1 0x3 + createsprite gCoreEnforcerBeamTemplate, ANIM_TARGET, 3, 0xf, 0x0, 0x14, 0x1 + createsprite gCoreEnforcerImpactTemplate, ANIM_TARGET, 3, 0xA, 0xffe2, 0x1, 0x3 delay 0x1 - launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0xF 0xffe2 0x1 0x3 + createsprite gCoreEnforcerImpactTemplate, ANIM_TARGET, 3, 0xF, 0xffe2, 0x1, 0x3 delay 0x1 - launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0x14 0xffe2 0x1 0x3 + createsprite gCoreEnforcerImpactTemplate, ANIM_TARGET, 3, 0x14, 0xffe2, 0x1, 0x3 delay 0x1 - launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0xF 0xffe7 0x1 0x3 + createsprite gCoreEnforcerImpactTemplate, ANIM_TARGET, 3, 0xF, 0xffe7, 0x1, 0x3 delay 0x1 - launchtemplate gCoreEnforcerBeamTemplate 0x83 0x4 0xf 0x0 0x14 0x2 - launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0xC 0xffea 0x1 0x3 + createsprite gCoreEnforcerBeamTemplate, ANIM_TARGET, 3, 0xf, 0x0, 0x14, 0x2 + createsprite gCoreEnforcerImpactTemplate, ANIM_TARGET, 3, 0xC, 0xffea, 0x1, 0x3 delay 0x1 - launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0x9 0xffed 0x1 0x3 + createsprite gCoreEnforcerImpactTemplate, ANIM_TARGET, 3, 0x9, 0xffed, 0x1, 0x3 delay 0x1 - launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0x6 0xfff0 0x1 0x3 + createsprite gCoreEnforcerImpactTemplate, ANIM_TARGET, 3, 0x6, 0xfff0, 0x1, 0x3 delay 0x1 - launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0x3 0xfff3 0x1 0x3 + createsprite gCoreEnforcerImpactTemplate, ANIM_TARGET, 3, 0x3, 0xfff3, 0x1, 0x3 delay 0x1 - launchtemplate gCoreEnforcerBeamTemplate 0x83 0x4 0xf 0x0 0x14 0x3 - launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0x0 0xfff6 0x1 0x3 + createsprite gCoreEnforcerBeamTemplate, ANIM_TARGET, 3, 0xf, 0x0, 0x14, 0x3 + createsprite gCoreEnforcerImpactTemplate, ANIM_TARGET, 3, 0x0, 0xfff6, 0x1, 0x3 delay 0x1 - launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0xfffc 0xfff9 0x1 0x3 + createsprite gCoreEnforcerImpactTemplate, ANIM_TARGET, 3, 0xfffc, 0xfff9, 0x1, 0x3 delay 0x1 - launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0xfff9 0xfffc 0x1 0x3 + createsprite gCoreEnforcerImpactTemplate, ANIM_TARGET, 3, 0xfff9, 0xfffc, 0x1, 0x3 delay 0x1 - launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0xfff6 0xffff 0x1 0x3 + createsprite gCoreEnforcerImpactTemplate, ANIM_TARGET, 3, 0xfff6, 0xffff, 0x1, 0x3 delay 0x1 - launchtemplate gCoreEnforcerBeamTemplate 0x83 0x4 0xf 0x0 0x14 0x4 - launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0xfff3 0x3 0x1 0x3 + createsprite gCoreEnforcerBeamTemplate, ANIM_TARGET, 3, 0xf, 0x0, 0x14, 0x4 + createsprite gCoreEnforcerImpactTemplate, ANIM_TARGET, 3, 0xfff3, 0x3, 0x1, 0x3 delay 0x1 - launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0xfff8 0x3 0x1 0x3 + createsprite gCoreEnforcerImpactTemplate, ANIM_TARGET, 3, 0xfff8, 0x3, 0x1, 0x3 delay 0x1 - launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0xfffd 0x3 0x1 0x3 + createsprite gCoreEnforcerImpactTemplate, ANIM_TARGET, 3, 0xfffd, 0x3, 0x1, 0x3 delay 0x1 - launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0x2 0x3 0x1 0x3 + createsprite gCoreEnforcerImpactTemplate, ANIM_TARGET, 3, 0x2, 0x3, 0x1, 0x3 delay 0x1 - launchtemplate gCoreEnforcerBeamTemplate 0x83 0x4 0xf 0x0 0x14 0x5 - launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0x7 0x3 0x1 0x3 + createsprite gCoreEnforcerBeamTemplate, ANIM_TARGET, 3, 0xf, 0x0, 0x14, 0x5 + createsprite gCoreEnforcerImpactTemplate, ANIM_TARGET, 3, 0x7, 0x3, 0x1, 0x3 delay 0x1 - launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0xC 0x3 0x1 0x3 + createsprite gCoreEnforcerImpactTemplate, ANIM_TARGET, 3, 0xC, 0x3, 0x1, 0x3 delay 0x1 - launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0x11 0x3 0x1 0x3 + createsprite gCoreEnforcerImpactTemplate, ANIM_TARGET, 3, 0x11, 0x3, 0x1, 0x3 delay 0x1 - launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0x16 0x3 0x1 0x3 + createsprite gCoreEnforcerImpactTemplate, ANIM_TARGET, 3, 0x16, 0x3, 0x1, 0x3 delay 0x1 - launchtemplate gCoreEnforcerBeamTemplate 0x83 0x4 0xf 0x0 0x14 0x6 + createsprite gCoreEnforcerBeamTemplate, ANIM_TARGET, 3, 0xf, 0x0, 0x14, 0x6 delay 0x7 - launchtemplate gCoreEnforcerSnoreTemplate 0x2 0x2 0x0 0x0 - launchtask AnimTask_ShakeMon2 0x2 0x5 ANIM_TARGET 0x2 0x0 0x1e 0x1 - launchtask AnimTask_ShakeMon2 0x2 0x5 ANIM_DEF_PARTNER 0x2 0x0 0x1e 0x1 - launchtask AnimTask_ShakeMon2 0x2 0x5 ANIM_ATK_PARTNER 0x2 0x0 0x1e 0x1 + createsprite gCoreEnforcerSnoreTemplate, ANIM_ATTACKER, 2, 0x0, 0x0 + createvisualtask AnimTask_ShakeMon2, 0x2, ANIM_TARGET, 0x2, 0x0, 0x1e, 0x1 + createvisualtask AnimTask_ShakeMon2, 0x2, ANIM_DEF_PARTNER, 0x2, 0x0, 0x1e, 0x1 + createvisualtask AnimTask_ShakeMon2, 0x2, ANIM_ATK_PARTNER, 0x2, 0x0, 0x1e, 0x1 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET - launchtemplate gCoreEnforcerExplosionTemplate 0x3 0x4 0x0 0x0 ANIM_TARGET 0x1 + createsprite gCoreEnforcerExplosionTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, ANIM_TARGET, 0x1 delay 0x6 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET - launchtemplate gCoreEnforcerExplosionTemplate 0x3 0x4 0x18 0xffe8 ANIM_TARGET 0x1 + createsprite gCoreEnforcerExplosionTemplate, ANIM_ATTACKER, 3, 0x18, 0xffe8, ANIM_TARGET, 0x1 delay 0x6 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET - launchtemplate gCoreEnforcerExplosionTemplate 0x3 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + createsprite gCoreEnforcerExplosionTemplate, ANIM_ATTACKER, 3, 0xfff0, 0x10, ANIM_TARGET, 0x1 delay 0x6 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET - launchtemplate gCoreEnforcerExplosionTemplate 0x3 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 + createsprite gCoreEnforcerExplosionTemplate, ANIM_ATTACKER, 3, 0xffe8, 0xfff4, ANIM_TARGET, 0x1 delay 0x6 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET - launchtemplate gCoreEnforcerExplosionTemplate 0x3 0x4 0x10 0x10 ANIM_TARGET 0x1 + createsprite gCoreEnforcerExplosionTemplate, ANIM_ATTACKER, 3, 0x10, 0x10, ANIM_TARGET, 0x1 delay 0x6 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET - launchtemplate gCoreEnforcerExplosionTemplate 0x3 0x4 0xffe8 0x18 ANIM_TARGET 0x1 + createsprite gCoreEnforcerExplosionTemplate, ANIM_ATTACKER, 3, 0xffe8, 0x18, ANIM_TARGET, 0x1 waitforvisualfinish call UnsetPsychicBg clearmonbg ANIM_TARGET @@ -11809,18 +11807,18 @@ Move_TROP_KICK:: loadspritegfx ANIM_TAG_LEAF @leaves loadspritegfx ANIM_TAG_FLOWER @flowers monbg ANIM_DEF_PARTNER - launchtemplate gTropKickGreenFootTemplate 0x2 0x8 0xfff0 0x8 0x0 0x0 0xa 0x1 0x1 0x1 - launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_TARGET 0x4 0x0 0x6 0x1 + createsprite gTropKickGreenFootTemplate, ANIM_ATTACKER, 2, 0xfff0, 0x8, 0x0, 0x0, 0xa, 0x1, 0x1, 0x1 + createvisualtask AnimTask_ShakeMon, 0x5, ANIM_TARGET, 0x4, 0x0, 0x6, 0x1 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET delay 0xA playsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER - launchtemplate gTropKickLeavesTemplate, ANIM_TARGET, 5, 0, 10, 192, 176, 40 - launchtemplate gTropKickLeavesTemplate, ANIM_TARGET, 5, 0, 10, -192, 240, 40 - launchtemplate gTropKickFlowerTemplate, ANIM_TARGET, 5, 0, 10, 192, -160, 40 - launchtemplate gTropKickFlowerTemplate, ANIM_TARGET, 5, 0, 10, -192, -112, 40 - launchtemplate gTropKickFlowerTemplate, ANIM_TARGET, 5, 0, 10, 160, 48, 40 - launchtemplate gTropKickLeavesTemplate, ANIM_TARGET, 5, 0, 10, -224, -32, 40 - launchtemplate gTropKickLeavesTemplate, ANIM_TARGET, 5, 0, 10, 112, -128, 40 + createsprite gTropKickLeavesTemplate, ANIM_TARGET, 1, 0, 10, 192, 176, 40 + createsprite gTropKickLeavesTemplate, ANIM_TARGET, 1, 0, 10, -192, 240, 40 + createsprite gTropKickFlowerTemplate, ANIM_TARGET, 1, 0, 10, 192, -160, 40 + createsprite gTropKickFlowerTemplate, ANIM_TARGET, 1, 0, 10, -192, -112, 40 + createsprite gTropKickFlowerTemplate, ANIM_TARGET, 1, 0, 10, 160, 48, 40 + createsprite gTropKickLeavesTemplate, ANIM_TARGET, 1, 0, 10, -224, -32, 40 + createsprite gTropKickLeavesTemplate, ANIM_TARGET, 1, 0, 10, 112, -128, 40 waitforvisualfinish clearmonbg ANIM_DEF_PARTNER end @@ -11829,27 +11827,27 @@ Move_INSTRUCT:: loadspritegfx ANIM_TAG_FINGER @finger loadspritegfx ANIM_TAG_SPOTLIGHT @spotlight setalpha 12, 8 - launchtemplate gMetronomeFingerSpriteTemplate 0xc 0x1 0x0 + createsprite gMetronomeFingerSpriteTemplate, ANIM_ATTACKER, 12, 0x0 delay 0x18 loopsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER, 0x16, 0x3 waitforvisualfinish - launchtask AnimTask_HardwarePaletteFade 0x2 0x5 0xf8 0x3 0x0 0xa 0x0 + createvisualtask AnimTask_HardwarePaletteFade, 0x2, 0xf8, 0x3, 0x0, 0xa, 0x0 waitforvisualfinish - launchtemplate gSpotlightSpriteTemplate 0x82 0x2 0x0 0xfff8 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x0 0x8 0x7DB9 + createsprite gSpotlightSpriteTemplate, ANIM_TARGET, 2, 0x0, 0xfff8 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x2, 0x0, 0x8, 0x7DB9 delay 0x4 monbg ANIM_TARGET - launchtask AnimTask_BlendMonInAndOut 0x5 0x5 0x0 0x37b 0xc 0x1 0x1 - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x29 0x1 + createvisualtask AnimTask_BlendMonInAndOut, 0x5, 0x0, 0x37b, 0xc, 0x1, 0x1 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x3, 0x0, 0x29, 0x1 playsewithpan SE_M_BIND, SOUND_PAN_TARGET delay 0x1A - launchtask AnimTask_BlendMonInAndOut 0x5 0x5 0x0 0x37b 0xc 0x1 0x1 + createvisualtask AnimTask_BlendMonInAndOut, 0x5, 0x0, 0x37b, 0xc, 0x1, 0x1 playsewithpan SE_M_BIND, SOUND_PAN_TARGET delay 0x1A - launchtask AnimTask_BlendMonInAndOut 0x5 0x5 0x0 0x37b 0xc 0x1 0x1 + createvisualtask AnimTask_BlendMonInAndOut, 0x5, 0x0, 0x37b, 0xc, 0x1, 0x1 playsewithpan SE_M_BIND, SOUND_PAN_TARGET delay 0x1D - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x8 0x0 0x7DB9 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x2, 0x8, 0x0, 0x7DB9 waitforvisualfinish clearmonbg ANIM_TARGET blendoff @@ -11859,29 +11857,29 @@ General_BeakBlastSetUp: loadspritegfx ANIM_TAG_SMALL_EMBER @Fire playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER delay 0x3 - launchtask AnimTask_BlendColorCycle 0x2 0x6 ANIM_PAL_ATK 0x2 0x2 0x0 0xb 0x1f - launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x0 + createvisualtask AnimTask_BlendColorCycle, 0x2, F_PAL_ATTACKER, 0x2, 0x2, 0x0, 0xb, 0x1f + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x0 waitforvisualfinish end Move_BEAK_BLAST:: loadspritegfx ANIM_TAG_IMPACT - launchtask AnimTask_BlendBattleAnimPal 0xA 0x5 ANIM_PAL_ATK 0x2 0x0 0x9 0x1F + createvisualtask AnimTask_BlendBattleAnimPal, 0xA, F_PAL_ATTACKER, 0x2, 0x0, 0x9, 0x1F waitforvisualfinish - launchtemplate gBowMonSpriteTemplate 0x2 0x1 0x0 + createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 0x0 playsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER waitforvisualfinish delay 0x2 - launchtemplate gBowMonSpriteTemplate 0x2 0x1 0x1 + createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 0x1 delay 0x2 loopsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET 0x4 0x8 - launchtask AnimTask_DrillPeckHitSplats 0x5 0x0 - launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x4 0x0 0x12 0x1 + createvisualtask AnimTask_DrillPeckHitSplats, 0x5 + createvisualtask AnimTask_ShakeMon2, 0x2, 0x1, 0x4, 0x0, 0x12, 0x1 waitforvisualfinish - launchtemplate gBowMonSpriteTemplate 0x2 0x1 0x2 + createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 0x2 waitforvisualfinish - launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0x0 0x6 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x6 waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xA 0x5 ANIM_PAL_ATK 0x2 0x9 0x0 0x1F + createvisualtask AnimTask_BlendBattleAnimPal, 0xA, F_PAL_ATTACKER, 0x2, 0x9, 0x0, 0x1F waitforvisualfinish end @@ -11890,27 +11888,27 @@ Move_CLANGING_SCALES:: loadspritegfx ANIM_TAG_POISON_BUBBLE @purple color monbg ANIM_DEF_PARTNER splitbgprio_foes ANIM_TARGET - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xC 0x2002 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xC, 0x2002 createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_METAL_SOUND_WAVES, 0, 10, 10, 0x642D waitforvisualfinish - launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x2 0x0 0x8 0x1 + createvisualtask AnimTask_ShakeMon2, 0x2, 0x0, 0x2, 0x0, 0x8, 0x1 call ClangingScalesMetalSound call ClangingScalesMetalSound call ClangingScalesMetalSound call ClangingScalesMetalSound delay 0x5 - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0 0x3 0xf 0x1 - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_DEF_PARTNER 0x0 0x3 0xf 0x1 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x0, 0x3, 0xf, 0x1 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_DEF_PARTNER, 0x0, 0x3, 0xf, 0x1 waitforvisualfinish clearmonbg ANIM_DEF_PARTNER delay 0x0 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xC 0x0 0x2002 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xC, 0x0, 0x2002 waitforvisualfinish end ClangingScalesMetalSound: panse SE_M_SCREECH, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0 - launchtemplate gClangingScalesPurpleMetalSoundTemplate 0x82 0x7 0x10 0x0 0x0 0x0 0x1e 0x0 ANIM_TARGET - launchtemplate gClangingScalesPurpleMetalSoundTemplate 0x82 0x7 0x10 0x0 0x0 0x0 0x1e 0x0 ANIM_DEF_PARTNER + createsprite gClangingScalesPurpleMetalSoundTemplate, ANIM_TARGET, 2, 0x10, 0x0, 0x0, 0x0, 0x1e, 0x0, ANIM_TARGET + createsprite gClangingScalesPurpleMetalSoundTemplate, ANIM_TARGET, 2, 0x10, 0x0, 0x0, 0x0, 0x1e, 0x0, ANIM_DEF_PARTNER delay 0x2 return @@ -11920,15 +11918,15 @@ Move_DRAGON_HAMMER:: createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ROUND_SHADOW, 0, 12, 12, 0x7D7F @Pinkish purple fadetobg BG_COSMIC waitbgfadeout - launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0, -500, 0x0 0xffff + createvisualtask AnimTask_StartSlidingBg, 0x5, 0x0, -500, 0x0, 0xffff waitbgfadein - setblends 0xF - launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x1a 0x0 0x0 0x5 + setalpha 15, 0 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x1a, 0x0, 0x0, 0x5 delay 0x6 playsewithpan SE_M_SWAGGER, SOUND_PAN_TARGET - launchtemplate gBounceBallLandSpriteTemplate 0x83 0x0 + createsprite gBounceBallLandSpriteTemplate, ANIM_TARGET, 3 delay 0x2 - launchtask AnimTask_SquishTarget 0x2 0x0 + createvisualtask AnimTask_SquishTarget, 0x2 delay 0x5 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET createsprite gOctazookaSmokeSpriteTemplate, ANIM_TARGET, 2, 8, 8, 1, 0 @@ -11947,7 +11945,7 @@ Move_DRAGON_HAMMER:: delay 2 createsprite gOctazookaSmokeSpriteTemplate, ANIM_TARGET, 2, -8, 8, 1, 0 delay 51 - launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0x0 0x5 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x5 waitforvisualfinish call UnsetPsychicBg blendoff @@ -11961,27 +11959,27 @@ Move_BRUTAL_SWING:: fadetobg BG_DARK waitbgfadeout playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER - launchtemplate gVerticalDipSpriteTemplate 0x2 0x3 0x6 0x1 0x0 + createsprite gVerticalDipSpriteTemplate, ANIM_ATTACKER, 2, 0x6, 0x1, 0x0 waitforvisualfinish delay 0xb - launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x1a 0x0 0x0 0x5 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x1a, 0x0, 0x0, 0x5 delay 0x6 - launchtemplate gBrutalSwingBasicImpactTemplate 0x83 0x4 0xffe0 0xfff0 0x1 0x1 + createsprite gBrutalSwingBasicImpactTemplate, ANIM_TARGET, 3, 0xffe0, 0xfff0, 0x1, 0x1 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0 0x3 0x15 0x1 - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_DEF_PARTNER 0x0 0x3 0x15 0x1 - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_ATK_PARTNER 0x0 0x3 0x15 0x1 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x0, 0x3, 0x15, 0x1 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_DEF_PARTNER, 0x0, 0x3, 0x15, 0x1 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_ATK_PARTNER, 0x0, 0x3, 0x15, 0x1 delay 0x4 - launchtemplate gBrutalSwingRandomImpactTemplate 0x83 0x2 0x1 0x1 + createsprite gBrutalSwingRandomImpactTemplate, ANIM_TARGET, 3, 0x1, 0x1 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 0x4 - launchtemplate gBrutalSwingRandomImpactTemplate 0x83 0x2 0x1 0x1 + createsprite gBrutalSwingRandomImpactTemplate, ANIM_TARGET, 3, 0x1, 0x1 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 0x4 - launchtemplate gBrutalSwingBasicImpactTemplate 0x83 0x4 0x20 0x14 0x1 0x1 + createsprite gBrutalSwingBasicImpactTemplate, ANIM_TARGET, 3, 0x20, 0x14, 0x1, 0x1 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET waitsound - launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0x0 0x6 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x6 waitforvisualfinish restorebg blendoff @@ -11992,19 +11990,19 @@ Move_AURORA_VEIL:: loadspritegfx ANIM_TAG_GUARD_RING fadetobg BG_AURORA waitbgfadeout - launchtask AnimTask_StartSlidingBg 0x5 0x4 0x400 0x0 0x0 0xffff + createvisualtask AnimTask_StartSlidingBg, 0x5, 0x400, 0x0, 0x0, 0xffff waitbgfadein monbg ANIM_ATK_PARTNER setalpha 8, 8 playsewithpan SE_M_MILK_DRINK, SOUND_PAN_ATTACKER - launchtemplate gAuroraVeilRingTemplate 0x2 0x0 + createsprite gAuroraVeilRingTemplate, ANIM_ATTACKER, 2 delay 0x4 - launchtemplate gAuroraVeilRingTemplate 0x2 0x0 + createsprite gAuroraVeilRingTemplate, ANIM_ATTACKER, 2 delay 0x4 - launchtemplate gAuroraVeilRingTemplate 0x2 0x0 + createsprite gAuroraVeilRingTemplate, ANIM_ATTACKER, 2 waitforvisualfinish playsewithpan SE_SHINY, SOUND_PAN_ATTACKER - launchtask AnimTask_BlendColorCycle 0x2 0x6 0xa 0x0 0x2 0x0 0xa 0x7fff + createvisualtask AnimTask_BlendColorCycle, 0x2, 0xa, 0x0, 0x2, 0x0, 0xa, 0x7fff waitforvisualfinish call UnsetPsychicBg waitforvisualfinish @@ -12021,10 +12019,10 @@ General_ShellTrapSetUp: delay 0x4 playsewithpan SE_M_FIRE_PUNCH, SOUND_PAN_TARGET delay 0x15 - launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x2 - launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0xA 0x1 0x2 - launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0xA 0x0 0x1 0x2 - launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0xA 0xA 0x1 0x2 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1, 0x2 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xA, 0x1, 0x2 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0xA, 0x0, 0x1, 0x2 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0xA, 0xA, 0x1, 0x2 waitforvisualfinish clearmonbg ANIM_TARGET blendoff @@ -12212,15 +12210,15 @@ Move_FLEUR_CANNON:: loadspritegfx ANIM_TAG_PINK_HEART @pink color setalpha 12, 8 monbg ANIM_TARGET - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xF 0x7440 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xF, 0x7440 waitforvisualfinish panse SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0 - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_ATTACKER 0x0 0x4 0x32 0x1 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_ATTACKER, 0x0, 0x4, 0x32, 0x1 createvisualtask AnimTask_FlashAnimTagWithColor, 2, ANIM_TAG_ORBS, 1, 12, RGB_RED, 16, 0, 0 call FleurCannonBeam call FleurCannonBeam call FleurCannonBeam - launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x4 0x0 0x32 0x1 + createvisualtask AnimTask_ShakeMon2, 0x2, 0x1, 0x4, 0x0, 0x32, 0x1 call FleurCannonBeam call FleurCannonBeam call FleurCannonBeam @@ -12240,23 +12238,23 @@ Move_FLEUR_CANNON:: call FleurCannonBeam call FleurCannonBeam delay 0x20 - launchtemplate gFleurCannonDischargeTemplate 0x2 0x3 0x1 0x10 0x10 + createsprite gFleurCannonDischargeTemplate, ANIM_ATTACKER, 2, 0x1, 0x10, 0x10 delay 0x2 - launchtemplate gFleurCannonDischargeTemplate 0x2 0x3 0x1 0xfff0 0xfff0 + createsprite gFleurCannonDischargeTemplate, ANIM_ATTACKER, 2, 0x1, 0xfff0, 0xfff0 delay 0x5 - launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_TARGET 0x0 0x5 0xb 0x1 + createvisualtask AnimTask_ShakeMon, 0x5, ANIM_TARGET, 0x0, 0x5, 0xb, 0x1 waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x10 0x0 0x7440 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x10, 0x0, 0x7440 waitforvisualfinish clearmonbg ANIM_TARGET blendoff end FleurCannonBeam: - launchtemplate gFleurCannonOrbTemplate 0x82 0x0 - launchtemplate gFleurCannonOrbTemplate 0x82 0x0 + createsprite gFleurCannonOrbTemplate, ANIM_TARGET, 2 + createsprite gFleurCannonOrbTemplate, ANIM_TARGET, 2 delay 0x1 - launchtemplate gFleurCannonOrbTemplate 0x82 0x0 - launchtemplate gFleurCannonOrbTemplate 0x82 0x0 + createsprite gFleurCannonOrbTemplate, ANIM_TARGET, 2 + createsprite gFleurCannonOrbTemplate, ANIM_TARGET, 2 delay 0x1 return @@ -12271,18 +12269,18 @@ Move_PSYCHIC_FANGS:: choosetwoturnanim PsychicFangsRegular PsychicFangsDestroyWall PsychicFangsRegular: playsewithpan SE_M_BITE, SOUND_PAN_TARGET - launchtemplate gSharpTeethSpriteTemplate 0x2 0x6 0xffe0 0xffe0 0x1 0x333 0x333 0xa - launchtemplate gSharpTeethSpriteTemplate 0x2 0x6 0x20 0x20 0x5 0xfccd 0xfccd 0xa + createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 0xffe0, 0xffe0, 0x1, 0x333, 0x333, 0xa + createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 0x20, 0x20, 0x5, 0xfccd, 0xfccd, 0xa delay 0xa - launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0xfff8 0x0 0x1 0x1 - launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_TARGET 0x0 0x7 0x5 0x2 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0xfff8, 0x0, 0x1, 0x1 + createvisualtask AnimTask_ShakeMon, 0x5, ANIM_TARGET, 0x0, 0x7, 0x5, 0x2 delay 0x10 playsewithpan SE_M_BITE, SOUND_PAN_TARGET - launchtemplate gSharpTeethSpriteTemplate 0x2 0x6 0x20 0xffe0 0x7 0xfccd 0x333 0xa - launchtemplate gSharpTeethSpriteTemplate 0x2 0x6 0xffe0 0x20 0x3 0x333 0xfccd 0xa + createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 0x20, 0xffe0, 0x7, 0xfccd, 0x333, 0xa + createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 0xffe0, 0x20, 0x3, 0x333, 0xfccd, 0xa delay 0xa - launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x8 0x0 0x1 0x1 - launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_TARGET 0x0 0x8 0x4 0x2 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0x8, 0x0, 0x1, 0x1 + createvisualtask AnimTask_ShakeMon, 0x5, ANIM_TARGET, 0x0, 0x8, 0x4, 0x2 PsychicFangsEnd: playsewithpan SE_M_SUPERSONIC, SOUND_PAN_TARGET waitforvisualfinish @@ -12291,25 +12289,25 @@ PsychicFangsEnd: call UnsetPsychicBg end PsychicFangsDestroyWall: - launchtemplate gBrickBreakWallSpriteTemplate 0x3 0x5 0x1 0x0 0x0 0x21 0xa + createsprite gBrickBreakWallSpriteTemplate, ANIM_ATTACKER, 3, 0x1, 0x0, 0x0, 0x21, 0xa playsewithpan SE_M_BITE, SOUND_PAN_TARGET - launchtemplate gSharpTeethSpriteTemplate 0x2 0x6 0xffe0 0xffe0 0x1 0x333 0x333 0xa - launchtemplate gSharpTeethSpriteTemplate 0x2 0x6 0x20 0x20 0x5 0xfccd 0xfccd 0xa + createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 0xffe0, 0xffe0, 0x1, 0x333, 0x333, 0xa + createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 0x20, 0x20, 0x5, 0xfccd, 0xfccd, 0xa delay 0xa - launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0xfff8 0x0 0x1 0x1 - launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_TARGET 0x0 0x7 0x5 0x2 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0xfff8, 0x0, 0x1, 0x1 + createvisualtask AnimTask_ShakeMon, 0x5, ANIM_TARGET, 0x0, 0x7, 0x5, 0x2 delay 0x10 playsewithpan SE_M_BITE, SOUND_PAN_TARGET - launchtemplate gSharpTeethSpriteTemplate 0x2 0x6 0x20 0xffe0 0x7 0xfccd 0x333 0xa - launchtemplate gSharpTeethSpriteTemplate 0x2 0x6 0xffe0 0x20 0x3 0x333 0xfccd 0xa + createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 0x20, 0xffe0, 0x7, 0xfccd, 0x333, 0xa + createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 0xffe0, 0x20, 0x3, 0x333, 0xfccd, 0xa delay 0xa - launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x8 0x0 0x1 0x1 - launchtemplate gBrickBreakWallShardSpriteTemplate 0x2 0x4 0x1 0x0 0xfff8 0xfff4 - launchtemplate gBrickBreakWallShardSpriteTemplate 0x2 0x4 0x1 0x1 0x8 0xfff4 - launchtemplate gBrickBreakWallShardSpriteTemplate 0x2 0x4 0x1 0x2 0xfff8 0xc - launchtemplate gBrickBreakWallShardSpriteTemplate 0x2 0x4 0x1 0x3 0x8 0xc + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0x8, 0x0, 0x1, 0x1 + createsprite gBrickBreakWallShardSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x0, 0xfff8, 0xfff4 + createsprite gBrickBreakWallShardSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x1, 0x8, 0xfff4 + createsprite gBrickBreakWallShardSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x2, 0xfff8, 0xc + createsprite gBrickBreakWallShardSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x3, 0x8, 0xc playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET - launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_TARGET 0x0 0x8 0x4 0x2 + createvisualtask AnimTask_ShakeMon, 0x5, ANIM_TARGET, 0x0, 0x8, 0x4, 0x2 delay 0x10 goto PsychicFangsEnd @@ -12319,35 +12317,35 @@ Move_STOMPING_TANTRUM:: loadspritegfx ANIM_TAG_IMPACT @pound hit loadspritegfx ANIM_TAG_SMALL_EMBER @hit color monbg ANIM_TARGET - launchtask AnimTask_Splash 0x2 0x2 ANIM_ATTACKER 0x3 + createvisualtask AnimTask_Splash, 0x2, ANIM_ATTACKER, 0x3 delay 0x5 - launchtask AnimTask_HorizontalShake 0x5 0x3 0x5 0xa 0x5 - launchtask AnimTask_HorizontalShake 0x5 0x3 0x4 0xa 0x5 - launchtemplate gStompingTantrumRockTemplate 0x2 0x2 0x0 0x0 - launchtemplate gStompingTantrumRockTemplate 0x2 0x2 0x0 0x1 - launchtemplate gStompingTantrumRockTemplate 0x2 0x2 0x0 0x2 - launchtemplate gStompingTantrumRockTemplate 0x2 0x2 0x0 0x3 + createvisualtask AnimTask_HorizontalShake, 0x5, 0x5, 0xa, 0x5 + createvisualtask AnimTask_HorizontalShake, 0x5, 0x4, 0xa, 0x5 + createsprite gStompingTantrumRockTemplate, ANIM_ATTACKER, 2, 0x0, 0x0 + createsprite gStompingTantrumRockTemplate, ANIM_ATTACKER, 2, 0x0, 0x1 + createsprite gStompingTantrumRockTemplate, ANIM_ATTACKER, 2, 0x0, 0x2 + createsprite gStompingTantrumRockTemplate, ANIM_ATTACKER, 2, 0x0, 0x3 call StompingTantrumImpact playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET delay 0x25 - launchtemplate gStompingTantrumRockTemplate 0x2 0x2 0x0 0x0 - launchtemplate gStompingTantrumRockTemplate 0x2 0x2 0x0 0x1 - launchtemplate gStompingTantrumRockTemplate 0x2 0x2 0x0 0x2 - launchtemplate gStompingTantrumRockTemplate 0x2 0x2 0x0 0x3 + createsprite gStompingTantrumRockTemplate, ANIM_ATTACKER, 2, 0x0, 0x0 + createsprite gStompingTantrumRockTemplate, ANIM_ATTACKER, 2, 0x0, 0x1 + createsprite gStompingTantrumRockTemplate, ANIM_ATTACKER, 2, 0x0, 0x2 + createsprite gStompingTantrumRockTemplate, ANIM_ATTACKER, 2, 0x0, 0x3 call StompingTantrumImpact playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET delay 0x25 - launchtemplate gStompingTantrumRockTemplate 0x2 0x2 0x0 0x0 - launchtemplate gStompingTantrumRockTemplate 0x2 0x2 0x0 0x1 - launchtemplate gStompingTantrumRockTemplate 0x2 0x2 0x0 0x2 - launchtemplate gStompingTantrumRockTemplate 0x2 0x2 0x0 0x3 + createsprite gStompingTantrumRockTemplate, ANIM_ATTACKER, 2, 0x0, 0x0 + createsprite gStompingTantrumRockTemplate, ANIM_ATTACKER, 2, 0x0, 0x1 + createsprite gStompingTantrumRockTemplate, ANIM_ATTACKER, 2, 0x0, 0x2 + createsprite gStompingTantrumRockTemplate, ANIM_ATTACKER, 2, 0x0, 0x3 call StompingTantrumImpact playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET waitforvisualfinish clearmonbg ANIM_TARGET end StompingTantrumImpact: - launchtemplate gRandomPosHitSplatSpriteTemplate 0x83 0x2 0x1 0x1 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x1, 0x1 return Move_SHADOW_BONE:: @@ -12359,15 +12357,15 @@ Move_SHADOW_BONE:: splitbgprio ANIM_TARGET setalpha 12, 8 playsewithpan SE_M_BONEMERANG, SOUND_PAN_TARGET - launchtemplate gSpinningBoneSpriteTemplate 0x2 0x5 0xffd6 0xffe7 0x0 0x0 0xf + createsprite gSpinningBoneSpriteTemplate, ANIM_ATTACKER, 2, 0xffd6, 0xffe7, 0x0, 0x0, 0xf delay 0xc - launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x1 - launchtask AnimTask_ShakeMon 0x5 0x5 0x1 0x0 0x5 0x5 0x1 - launchtemplate gComplexPaletteBlendSpriteTemplate 0x2 0x7 0x7 0x5 0x1 0x0 0xa 0x0 0x0 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1, 0x1 + createvisualtask AnimTask_ShakeMon, 0x5, 0x1, 0x0, 0x5, 0x5, 0x1 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 0x7, 0x5, 0x1, 0x0, 0xa, 0x0, 0x0 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET waitforvisualfinish - launchtask AnimTask_NightmareClone 0x2 0x0 - launchtask AnimTask_ShakeMon 0x2 0x5 0x1 0x3 0x0 0x28 0x1 + createvisualtask AnimTask_NightmareClone, 0x2 + createvisualtask AnimTask_ShakeMon, 0x2, 0x1, 0x3, 0x0, 0x28, 0x1 playsewithpan SE_M_NIGHTMARE, SOUND_PAN_TARGET waitforvisualfinish restorebg @@ -12381,18 +12379,18 @@ Move_ACCELEROCK:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_ATK_PARTNER setalpha 12, 8 - launchtask AnimTask_TranslateMonEllipticalRespectSide 0x2 0x5 0x0 0x18 0x6 0x1 0x5 - launchtask AnimTask_TraceMonBlended 0x2 0x4 0x0 0x4 0x7 0x3 + createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 0x2, 0x0, 0x18, 0x6, 0x1, 0x5 + createvisualtask AnimTask_TraceMonBlended, 0x2, 0x0, 0x4, 0x7, 0x3 playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER delay 0x4 - launchtask AnimTask_ShakeMon 0x2 0x5 0x1 0x5 0x0 0x6 0x1 - launchtemplate gBasicHitSplatSpriteTemplate 0x84, 0x4, 0x0 0x0 0x1 0x1 + createvisualtask AnimTask_ShakeMon, 0x2, 0x1, 0x5, 0x0, 0x6, 0x1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x1, 0x1 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET - launchtemplate gHorizontalLungeSpriteTemplate 0x2 0x5 0x1 0x3 0x0 0x5 0x1 - launchtemplate gRockFragmentSpriteTemplate 0x82 0x6 0x5 0x0 0xffec 0x18 0xe 0x1 - launchtemplate gRockFragmentSpriteTemplate 0x82 0x6 0x0 0x5 0x14 0xffe8 0xe 0x2 - launchtemplate gRockFragmentSpriteTemplate 0x82 0x6 0xfffb 0x0 0xffec 0xffe8 0xe 0x2 - launchtemplate gHorizontalLungeSpriteTemplate 0x2 0x5 0x1 0x3 0x0 0x5 0x1 + createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x3, 0x0, 0x5, 0x1 + createsprite gRockFragmentSpriteTemplate, ANIM_TARGET, 2, 0x5, 0x0, 0xffec, 0x18, 0xe, 0x1 + createsprite gRockFragmentSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x5, 0x14, 0xffe8, 0xe, 0x2 + createsprite gRockFragmentSpriteTemplate, ANIM_TARGET, 2, 0xfffb, 0x0, 0xffec, 0xffe8, 0xe, 0x2 + createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x3, 0x0, 0x5, 0x1 waitforvisualfinish clearmonbg ANIM_ATK_PARTNER blendoff @@ -12406,10 +12404,10 @@ Move_LIQUIDATION:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET setalpha 12, 8 - launchtemplate gHorizontalLungeSpriteTemplate 0x2 0x2 0x4 0x4 + createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 0x4, 0x4 delay 0x6 - launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x1 - launchtask AnimTask_ShakeMon 0x2 0x5 0x1 0x3 0x0 0x6 0x1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1, 0x1 + createvisualtask AnimTask_ShakeMon, 0x2, 0x1, 0x3, 0x0, 0x6, 0x1 playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_TARGET waitforvisualfinish call RisingWaterHitEffect @@ -12429,10 +12427,10 @@ Move_PRISMATIC_LASER:: loadspritegfx ANIM_TAG_GREEN_SPIKE @needle arm animation loadspritegfx ANIM_TAG_NEEDLE @sting monbg ANIM_ATTACKER - setblends 0x80E - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x10 0x0 + setalpha 14, 8 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x10, 0x0 playsewithpan SE_ELEVATOR, SOUND_PAN_ATTACKER - launchtemplate gPrismaticLaserChargeTemplate 0x2 0x1 0x0 + createsprite gPrismaticLaserChargeTemplate, ANIM_ATTACKER, 2, 0x0 call PrismaticLaserInwardSpikes playsewithpan SE_ELEVATOR, SOUND_PAN_ATTACKER call PrismaticLaserInwardSpikes @@ -12457,87 +12455,87 @@ Move_PRISMATIC_LASER:: unloadspritegfx ANIM_TAG_ICE_CHUNK unloadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT delay 0x1E - launchtask AnimTask_HorizontalShake 0x5 0x3 0x5 0xa 0x32 - launchtask AnimTask_HorizontalShake 0x5 0x3 0x4 0xa 0x32 + createvisualtask AnimTask_HorizontalShake, 0x5, 0x5, 0xa, 0x32 + createvisualtask AnimTask_HorizontalShake, 0x5, 0x4, 0xa, 0x32 playsewithpan SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER call PrismaticLaserRain call PrismaticLaserRain call PrismaticLaserRain call PrismaticLaserRain waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x10 0x0 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x10, 0x0, 0x0 waitforvisualfinish clearmonbg ANIM_ATTACKER blendoff end PrismaticLaserOutwardSpikes: - launchtemplate gPrismaticLaserRedOutwardTemplate 0x82 0x5 0x0 0x1 0x0 0xFF90 0x10 @up - launchtemplate gPrismaticLaserGreenOutwardTemplate 0x82 0x5 0x0 0x1 0x5F 0xFF9D 0x10 @upper right - launchtemplate gPrismaticLaserYellowOutwardTemplate 0x82 0x5 0x0 0x1 0x73 0x0 0x10 @right - launchtemplate gPrismaticLaserVioletOutwardTemplate 0x82 0x5 0x0 0x1 0x4F 0x37 0x10 @lower right - launchtemplate gPrismaticLaserRedOutwardTemplate 0x82 0x5 0x0 0x1 0x0 0x53 0x10 @down - launchtemplate gPrismaticLaserGreenOutwardTemplate 0x82 0x5 0x0 0x1 0xFFB0 0x43 0x10 @lower left - launchtemplate gPrismaticLaserYellowOutwardTemplate 0x82 0x5 0x0 0x1 0xFF60 0x0 0x10 @left - launchtemplate gPrismaticLaserVioletOutwardTemplate 0x82 0x5 0x0 0x1 0xFFAA 0xFF94 0x10 @upper left + createsprite gPrismaticLaserRedOutwardTemplate, ANIM_TARGET, 2, 0x0, 0x1, 0x0, 0xFF90, 0x10 @up + createsprite gPrismaticLaserGreenOutwardTemplate, ANIM_TARGET, 2, 0x0, 0x1, 0x5F, 0xFF9D, 0x10 @upper right + createsprite gPrismaticLaserYellowOutwardTemplate, ANIM_TARGET, 2, 0x0, 0x1, 0x73, 0x0, 0x10 @right + createsprite gPrismaticLaserVioletOutwardTemplate, ANIM_TARGET, 2, 0x0, 0x1, 0x4F, 0x37, 0x10 @lower right + createsprite gPrismaticLaserRedOutwardTemplate, ANIM_TARGET, 2, 0x0, 0x1, 0x0, 0x53, 0x10 @down + createsprite gPrismaticLaserGreenOutwardTemplate, ANIM_TARGET, 2, 0x0, 0x1, 0xFFB0, 0x43, 0x10 @lower left + createsprite gPrismaticLaserYellowOutwardTemplate, ANIM_TARGET, 2, 0x0, 0x1, 0xFF60, 0x0, 0x10 @left + createsprite gPrismaticLaserVioletOutwardTemplate, ANIM_TARGET, 2, 0x0, 0x1, 0xFFAA, 0xFF94, 0x10 @upper left playsewithpan SE_M_MIST, SOUND_PAN_ATTACKER return PrismaticLaserOutwardSpikes2: - launchtemplate gPrismaticLaserVioletOutwardTemplate 0x82 0x5 0x0 0x1 0xFFE0 0x43 0x10 @between lower left and down - launchtemplate gPrismaticLaserYellowOutwardTemplate 0x82 0x5 0x0 0x1 0x1F 0x37 0x10 @between lower right and down - launchtemplate gPrismaticLaserYellowOutwardTemplate 0x82 0x5 0x0 0x1 0xFFDA 0xFF94 0x10 @between up and upper left - launchtemplate gPrismaticLaserRedOutwardTemplate 0x82 0x5 0x0 0x1 0xFF60 0x43 0x10 @between left and lower left - launchtemplate gPrismaticLaserGreenOutwardTemplate 0x82 0x5 0x0 0x1 0xFF2A 0xFFAA 0x10 @between left and upper left - launchtemplate gPrismaticLaserVioletOutwardTemplate 0x82 0x5 0x0 0x1 0x2D 0xFF9D 0x10 @between up and upper right - launchtemplate gPrismaticLaserRedOutwardTemplate 0x82 0x5 0x0 0x1 0xDF 0xFF9D 0x10 @between right and upper right - launchtemplate gPrismaticLaserGreenOutwardTemplate 0x82 0x5 0x0 0x1 0x9F 0x37 0x10 @between right and lower right + createsprite gPrismaticLaserVioletOutwardTemplate, ANIM_TARGET, 2, 0x0, 0x1, 0xFFE0, 0x43, 0x10 @between lower left and down + createsprite gPrismaticLaserYellowOutwardTemplate, ANIM_TARGET, 2, 0x0, 0x1, 0x1F, 0x37, 0x10 @between lower right and down + createsprite gPrismaticLaserYellowOutwardTemplate, ANIM_TARGET, 2, 0x0, 0x1, 0xFFDA, 0xFF94, 0x10 @between up and upper left + createsprite gPrismaticLaserRedOutwardTemplate, ANIM_TARGET, 2, 0x0, 0x1, 0xFF60, 0x43, 0x10 @between left and lower left + createsprite gPrismaticLaserGreenOutwardTemplate, ANIM_TARGET, 2, 0x0, 0x1, 0xFF2A, 0xFFAA, 0x10 @between left and upper left + createsprite gPrismaticLaserVioletOutwardTemplate, ANIM_TARGET, 2, 0x0, 0x1, 0x2D, 0xFF9D, 0x10 @between up and upper right + createsprite gPrismaticLaserRedOutwardTemplate, ANIM_TARGET, 2, 0x0, 0x1, 0xDF, 0xFF9D, 0x10 @between right and upper right + createsprite gPrismaticLaserGreenOutwardTemplate, ANIM_TARGET, 2, 0x0, 0x1, 0x9F, 0x37, 0x10 @between right and lower right playsewithpan SE_M_MIST, SOUND_PAN_ATTACKER return PrismaticLaserInwardSpikes: - launchtemplate gPrismaticLaserRedInwardTemplate 0x82 0x5 0x0 0x0 0x0 0xFF90 0x10 @up - launchtemplate gPrismaticLaserVioletInwardTemplate 0x82 0x5 0x0 0x0 0xFFE0 0x43 0x10 @between lower left and down + createsprite gPrismaticLaserRedInwardTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x0, 0xFF90, 0x10 @up + createsprite gPrismaticLaserVioletInwardTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xFFE0, 0x43, 0x10 @between lower left and down delay 0x1 - launchtemplate gPrismaticLaserGreenInwardTemplate 0x82 0x5 0x0 0x0 0x5F 0xFF9D 0x10 @upper right - launchtemplate gPrismaticLaserYellowInwardTemplate 0x82 0x5 0x0 0x0 0x1F 0x37 0x10 @between lower right and down - launchtemplate gPrismaticLaserYellowInwardTemplate 0x82 0x5 0x0 0x0 0xFFDA 0xFF94 0x10 @between up and upper left + createsprite gPrismaticLaserGreenInwardTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x5F, 0xFF9D, 0x10 @upper right + createsprite gPrismaticLaserYellowInwardTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x1F, 0x37, 0x10 @between lower right and down + createsprite gPrismaticLaserYellowInwardTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xFFDA, 0xFF94, 0x10 @between up and upper left delay 0x1 - launchtemplate gPrismaticLaserYellowInwardTemplate 0x82 0x5 0x0 0x0 0x73 0x0 0x10 @right - launchtemplate gPrismaticLaserRedInwardTemplate 0x82 0x5 0x0 0x0 0xFF60 0x43 0x10 @between left and lower left + createsprite gPrismaticLaserYellowInwardTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x73, 0x0, 0x10 @right + createsprite gPrismaticLaserRedInwardTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xFF60, 0x43, 0x10 @between left and lower left delay 0x1 - launchtemplate gPrismaticLaserVioletInwardTemplate 0x82 0x5 0x0 0x0 0x4F 0x37 0x10 @lower right - launchtemplate gPrismaticLaserGreenInwardTemplate 0x82 0x5 0x0 0x0 0xFF2A 0xFFAA 0x10 @between left and upper left + createsprite gPrismaticLaserVioletInwardTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x4F, 0x37, 0x10 @lower right + createsprite gPrismaticLaserGreenInwardTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xFF2A, 0xFFAA, 0x10 @between left and upper left delay 0x1 - launchtemplate gPrismaticLaserRedInwardTemplate 0x82 0x5 0x0 0x0 0x0 0x53 0x10 @down - launchtemplate gPrismaticLaserVioletInwardTemplate 0x82 0x5 0x0 0x0 0x2D 0xFF9D 0x10 @between up and upper right + createsprite gPrismaticLaserRedInwardTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x0, 0x53, 0x10 @down + createsprite gPrismaticLaserVioletInwardTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x2D, 0xFF9D, 0x10 @between up and upper right delay 0x1 - launchtemplate gPrismaticLaserGreenInwardTemplate 0x82 0x5 0x0 0x0 0xFFB0 0x43 0x10 @lower left - launchtemplate gPrismaticLaserRedInwardTemplate 0x82 0x5 0x0 0x0 0xDF 0xFF9D 0x10 @between right and upper right + createsprite gPrismaticLaserGreenInwardTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xFFB0, 0x43, 0x10 @lower left + createsprite gPrismaticLaserRedInwardTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xDF, 0xFF9D, 0x10 @between right and upper right delay 0x1 - launchtemplate gPrismaticLaserYellowInwardTemplate 0x82 0x5 0x0 0x0 0xFF60 0x0 0x10 @left - launchtemplate gPrismaticLaserGreenInwardTemplate 0x82 0x5 0x0 0x0 0x9F 0x37 0x10 @between right and lower right + createsprite gPrismaticLaserYellowInwardTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xFF60, 0x0, 0x10 @left + createsprite gPrismaticLaserGreenInwardTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x9F, 0x37, 0x10 @between right and lower right delay 0x1 - launchtemplate gPrismaticLaserVioletInwardTemplate 0x82 0x5 0x0 0x0 0xFFAA 0xFF94 0x10 @upper left + createsprite gPrismaticLaserVioletInwardTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xFFAA, 0xFF94, 0x10 @upper left delay 0x1 return PrismaticLaserRain: - launchtemplate gPrismaticLaserYellowRainTemplate 0x82, 0x4, 35, 0x3c, 4, ANIM_TARGET + createsprite gPrismaticLaserYellowRainTemplate, ANIM_TARGET, 2, 35, 0x3c, 4, ANIM_TARGET delay 0x2 - launchtemplate gPrismaticLaserGreenRainTemplate 0x82, 0x4, -30, 0x44, 4, ANIM_TARGET + createsprite gPrismaticLaserGreenRainTemplate, ANIM_TARGET, 2, -30, 0x44, 4, ANIM_TARGET delay 0x2 - launchtemplate gPrismaticLaserRedRainTemplate 0x82, 0x4, 27, 0x37, 4, ANIM_TARGET + createsprite gPrismaticLaserRedRainTemplate, ANIM_TARGET, 2, 27, 0x37, 4, ANIM_TARGET delay 0x2 - launchtemplate gPrismaticLaserVioletRainTemplate 0x82, 0x4, -20, 0x32, 4, ANIM_TARGET + createsprite gPrismaticLaserVioletRainTemplate, ANIM_TARGET, 2, -20, 0x32, 4, ANIM_TARGET delay 0x2 - launchtemplate gPrismaticLaserYellowRainTemplate 0x82, 0x4, 33, 0x3a, 4, ANIM_TARGET + createsprite gPrismaticLaserYellowRainTemplate, ANIM_TARGET, 2, 33, 0x3a, 4, ANIM_TARGET delay 0x2 - launchtemplate gPrismaticLaserGreenRainTemplate 0x82, 0x4, -12, 0x3a, 4, ANIM_TARGET + createsprite gPrismaticLaserGreenRainTemplate, ANIM_TARGET, 2, -12, 0x3a, 4, ANIM_TARGET delay 0x2 - launchtemplate gPrismaticLaserRedRainTemplate 0x82, 0x4, 19, 0x3c, 4, ANIM_TARGET + createsprite gPrismaticLaserRedRainTemplate, ANIM_TARGET, 2, 19, 0x3c, 4, ANIM_TARGET delay 0x2 - launchtemplate gPrismaticLaserVioletRainTemplate 0x82, 0x4, -38, 0x3a, 4, ANIM_TARGET + createsprite gPrismaticLaserVioletRainTemplate, ANIM_TARGET, 2, -38, 0x3a, 4, ANIM_TARGET delay 0x2 - launchtemplate gPrismaticLaserYellowRainTemplate 0x82, 0x4, 5, 0x3c, 4, ANIM_TARGET + createsprite gPrismaticLaserYellowRainTemplate, ANIM_TARGET, 2, 5, 0x3c, 4, ANIM_TARGET delay 0x2 - launchtemplate gPrismaticLaserGreenRainTemplate 0x82, 0x4, -23, 0x28, 4, ANIM_TARGET + createsprite gPrismaticLaserGreenRainTemplate, ANIM_TARGET, 2, -23, 0x28, 4, ANIM_TARGET return Move_SPECTRAL_THIEF:: @@ -12553,36 +12551,36 @@ SpectralThiefUnleash: waitbgfadein delay 0x5 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET - launchtemplate gSpectralThiefBlackSmokeTemplate 0x82, 0x4, 0x8 0x8 0x0 0x0 + createsprite gSpectralThiefBlackSmokeTemplate, ANIM_TARGET, 2, 0x8, 0x8, 0x0, 0x0 invisible 0x0 delay 0x2 - launchtemplate gSpectralThiefBlackSmokeTemplate 0x82, 0x4, 0xfff8 0xfff8 0x0 0x0 + createsprite gSpectralThiefBlackSmokeTemplate, ANIM_TARGET, 2, 0xfff8, 0xfff8, 0x0, 0x0 delay 0x2 - launchtemplate gSpectralThiefBlackSmokeTemplate 0x82, 0x4, 0x8 0xfff8 0x0 0x0 + createsprite gSpectralThiefBlackSmokeTemplate, ANIM_TARGET, 2, 0x8, 0xfff8, 0x0, 0x0 delay 0x2 - launchtemplate gSpectralThiefBlackSmokeTemplate 0x82, 0x4, 0xfff8 0x8 0x0 0x0 + createsprite gSpectralThiefBlackSmokeTemplate, ANIM_TARGET, 2, 0xfff8, 0x8, 0x0, 0x0 delay 0x2 - launchtemplate gSpectralThiefBlackSmokeTemplate 0x82, 0x4, 0x8 0x8 0x0 0x0 + createsprite gSpectralThiefBlackSmokeTemplate, ANIM_TARGET, 2, 0x8, 0x8, 0x0, 0x0 delay 0x2 - launchtemplate gSpectralThiefBlackSmokeTemplate 0x82, 0x4, 0xfff8 0xfff8 0x0 0x0 + createsprite gSpectralThiefBlackSmokeTemplate, ANIM_TARGET, 2, 0xfff8, 0xfff8, 0x0, 0x0 delay 0x2 - launchtemplate gSpectralThiefBlackSmokeTemplate 0x82, 0x4, 0x8 0xfff8 0x0 0x0 + createsprite gSpectralThiefBlackSmokeTemplate, ANIM_TARGET, 2, 0x8, 0xfff8, 0x0, 0x0 delay 0x2 - launchtemplate gSpectralThiefBlackSmokeTemplate 0x82, 0x4, 0xfff8 0x8 0x0 0x0 + createsprite gSpectralThiefBlackSmokeTemplate, ANIM_TARGET, 2, 0xfff8, 0x8, 0x0, 0x0 waitforvisualfinish playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER waitforvisualfinish - launchtask AnimTask_DestinyBondWhiteShadow 0x5 0x2 0x0 0x30 + createvisualtask AnimTask_DestinyBondWhiteShadow, 0x5, 0x0, 0x30 delay 0x30 - launchtask AnimTask_ShakeMonInPlace 0x2 0x5 0x0 0x2 0x0 0x18 0x1 - launchtask AnimTask_BlendBattleAnimPalExclude 0x2 0x5 0x6 0x1 0x0 0xc 0x77bd + createvisualtask AnimTask_ShakeMonInPlace, 0x2, 0x0, 0x2, 0x0, 0x18, 0x1 + createvisualtask AnimTask_BlendBattleAnimPalExclude, 0x2, 0x6, 0x1, 0x0, 0xc, 0x77bd delay 0x18 - launchtask AnimTask_BlendBattleAnimPalExclude 0x2 0x5 0x6 0x1 0xc 0x0 0x77bd + createvisualtask AnimTask_BlendBattleAnimPalExclude, 0x2, 0x6, 0x1, 0xc, 0x0, 0x77bd waitforvisualfinish - setblends 0x1000 + setalpha 0, 16 delay 0x1 monbg_static ANIM_TARGET - launchtask AnimTask_MoveTargetMementoShadow 0x5 0x0 + createvisualtask AnimTask_MoveTargetMementoShadow, 0x5 playsewithpan SE_M_PSYBEAM, SOUND_PAN_TARGET waitforvisualfinish clearmonbg_static ANIM_TARGET @@ -12592,33 +12590,33 @@ SpectralThiefUnleash: setalpha 12, 8 monbg ANIM_TARGET delay 0x1 - launchtemplate gSpectralThiefThiefImpactTemplate 0x82, 0x3, 0xfff6 0xfff6 0x0 + createsprite gSpectralThiefThiefImpactTemplate, ANIM_TARGET, 2, 0xfff6, 0xfff6, 0x0 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 delay 0x4 - launchtemplate gSpectralThiefThiefImpactTemplate 0x82, 0x3, 0xa 0x14 0x0 + createsprite gSpectralThiefThiefImpactTemplate, ANIM_TARGET, 2, 0xa, 0x14, 0x0 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 delay 0x4 - launchtemplate gSpectralThiefThiefImpactTemplate 0x82, 0x3, 0xfffb 0xa 0x0 + createsprite gSpectralThiefThiefImpactTemplate, ANIM_TARGET, 2, 0xfffb, 0xa, 0x0 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 delay 0x4 - launchtemplate gSpectralThiefThiefImpactTemplate 0x82, 0x3, 0x11 0xfff4 0x0 + createsprite gSpectralThiefThiefImpactTemplate, ANIM_TARGET, 2, 0x11, 0xfff4, 0x0 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 delay 0x4 - launchtemplate gSpectralThiefThiefImpactTemplate 0x82, 0x3, 0xfff1 0xf 0x0 + createsprite gSpectralThiefThiefImpactTemplate, ANIM_TARGET, 2, 0xfff1, 0xf, 0x0 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 delay 0x4 - launchtemplate gSpectralThiefThiefImpactTemplate 0x82, 0x3, 0x0 0x0 0x0 + createsprite gSpectralThiefThiefImpactTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x0 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 delay 0x4 - launchtemplate gSpectralThiefThiefImpactTemplate 0x82, 0x3, 0x14 0x2 0x0 + createsprite gSpectralThiefThiefImpactTemplate, ANIM_TARGET, 2, 0x14, 0x2, 0x0 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 waitforvisualfinish visible 0x0 delay 0x2 @@ -12631,18 +12629,18 @@ SpectralThiefSteal: loadspritegfx ANIM_TAG_HANDS_AND_FEET @black color loadspritegfx ANIM_TAG_ORBS @mimic loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy - setblends 0x50b + setalpha 11, 5 splitbgprio_all panse SE_M_MINIMIZE, SOUND_PAN_TARGET, SOUND_PAN_ATTACKER, 0xfd, 0x0 delay 0xf - launchtemplate gSpectralThiefBlackOrbsTemplate 0x82 0x2 0xfff4 0x18 + createsprite gSpectralThiefBlackOrbsTemplate, ANIM_TARGET, 2, 0xfff4, 0x18 delay 0xB setarg 0x7 0xffff waitforvisualfinish playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call SpectralThiefBuffUp delay 0x8 - launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1 + createvisualtask AnimTask_ShakeMon2, 0x2, 0x0, 0x1, 0x0, 0x20, 0x1 call SpectralThiefBuffUp delay 0x8 call SpectralThiefBuffUp @@ -12650,15 +12648,15 @@ SpectralThiefSteal: blendoff end SpectralThiefBuffUp: - launchtemplate gSpectralThiefBlackBuffTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2 + createsprite gSpectralThiefBlackBuffTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x1a, 0x2 delay 0x4 - launchtemplate gSpectralThiefBlackBuffTemplate 0x2 0x4 0x0 0xe 0x1c 0x1 + createsprite gSpectralThiefBlackBuffTemplate, ANIM_ATTACKER, 2, 0x0, 0xe, 0x1c, 0x1 delay 0x4 - launchtemplate gSpectralThiefBlackBuffTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2 + createsprite gSpectralThiefBlackBuffTemplate, ANIM_ATTACKER, 2, 0x0, 0xfffb, 0xa, 0x2 delay 0x4 - launchtemplate gSpectralThiefBlackBuffTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3 + createsprite gSpectralThiefBlackBuffTemplate, ANIM_ATTACKER, 2, 0x0, 0x1c, 0x1a, 0x3 delay 0x4 - launchtemplate gSpectralThiefBlackBuffTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1 + createsprite gSpectralThiefBlackBuffTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff4, 0x0, 0x1 return Move_SUNSTEEL_STRIKE:: @@ -12669,13 +12667,13 @@ Move_SUNSTEEL_STRIKE:: monbg ANIM_TARGET setalpha 12, 8 playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_TARGET - launchtemplate gSunsteelStrikeBlackFlyBallTemplate 0x2 0x4 0x0 0x0 0xd 0x150 - launchtask AnimTask_HorizontalShake 0x5 0x3 0x4 0x1 0x1A + createsprite gSunsteelStrikeBlackFlyBallTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0xd, 0x150 + createvisualtask AnimTask_HorizontalShake, 0x5, 0x4, 0x1, 0x1A delay 0x18 - launchtemplate gSunsteelStrikeRocksTemplate 0x2 0x2 0x0 0x0 @The rock particles mess up the fly animation - launchtemplate gSunsteelStrikeRocksTemplate 0x2 0x2 0x0 0x1 - launchtemplate gSunsteelStrikeRocksTemplate 0x2 0x2 0x0 0x2 - launchtemplate gSunsteelStrikeRocksTemplate 0x2 0x2 0x0 0x3 + createsprite gSunsteelStrikeRocksTemplate, ANIM_ATTACKER, 2, 0x0, 0x0 @The rock particles mess up the fly animation + createsprite gSunsteelStrikeRocksTemplate, ANIM_ATTACKER, 2, 0x0, 0x1 + createsprite gSunsteelStrikeRocksTemplate, ANIM_ATTACKER, 2, 0x0, 0x2 + createsprite gSunsteelStrikeRocksTemplate, ANIM_ATTACKER, 2, 0x0, 0x3 waitforvisualfinish unloadspritegfx ANIM_TAG_ROUND_SHADOW @fly unloadspritegfx ANIM_TAG_AIR_WAVE_2 @black color @@ -12684,7 +12682,7 @@ Move_SUNSTEEL_STRIKE:: loadspritegfx ANIM_TAG_SMALL_RED_EYE @red color loadspritegfx ANIM_TAG_IMPACT @hit playsewithpan SE_ORB, SOUND_PAN_ATTACKER - createvisualtask AnimTask_BlendBattleAnimPal, 10, (ANIM_PAL_BG | ANIM_PAL_ATK), 3, 0, 15, 0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_ATTACKER), 3, 0, 15, 0 waitforvisualfinish call SunsteelStrikeBeam call SunsteelStrikeBeam @@ -12698,10 +12696,10 @@ Move_SUNSTEEL_STRIKE:: call SunsteelStrikeBeam stopsound playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET - launchtemplate gSunsteelStrikeSuperpowerTemplate 0x82 0x1 0x14 + createsprite gSunsteelStrikeSuperpowerTemplate, ANIM_TARGET, 2, 0x14 delay 0x14 - launchtemplate gSunsteelStrikeRedImpactTemplate 0x2 0x4 0x0 0x0 0x1 0x0 - launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_TARGET 0x6 0x0 0x8 0x1 + createsprite gSunsteelStrikeRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1, 0x0 + createvisualtask AnimTask_ShakeMon, 0x5, ANIM_TARGET, 0x6, 0x0, 0x8, 0x1 waitforvisualfinish unloadspritegfx ANIM_TAG_METEOR @superpower unloadspritegfx ANIM_TAG_GOLD_RING @beam @@ -12713,15 +12711,15 @@ Move_SUNSTEEL_STRIKE:: playsewithpan SE_M_FIRE_PUNCH, SOUND_PAN_TARGET waitforvisualfinish visible ANIM_ATTACKER - createvisualtask AnimTask_BlendBattleAnimPal, 10, (ANIM_PAL_BG | ANIM_PAL_ATK), 3, 15, 0, 0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_ATTACKER), 3, 15, 0, 0 waitforvisualfinish blendoff clearmonbg ANIM_TARGET end SunsteelStrikeBeam: - launchtemplate gSunsteelStrikeYellowBeamTemplate 0x82 0x1 0x14 + createsprite gSunsteelStrikeYellowBeamTemplate, ANIM_TARGET, 2, 0x14 delay 0x1 - launchtemplate gSunsteelStrikeRedBeamTemplate 0x82 0x1 0x14 + createsprite gSunsteelStrikeRedBeamTemplate, ANIM_TARGET, 2, 0x14 delay 0x1 return @@ -12733,30 +12731,30 @@ Move_MOONGEIST_BEAM:: loadspritegfx ANIM_TAG_WATER_GUN @water gun colour loadspritegfx ANIM_TAG_ASSURANCE_HAND @purple colour setalpha 8, 8 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x10 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x10, 0x0 createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ELECTRIC_ORBS, 0, 15, 15, 0x7FFF @White createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_CIRCLE_OF_LIGHT, 0, 15, 15, 0x7FFC @Light Blue waitforvisualfinish playsewithpan SE_M_MEGA_KICK, SOUND_PAN_TARGET - launchtemplate gMoonSpriteTemplate 0x80 0x2 0x20 0x15 - launchtask AnimTask_AlphaFadeIn 0x3 0x5 0x0 0x10 0x10 0x0 0x1 + createsprite gMoonSpriteTemplate, ANIM_TARGET, 0, 0x20, 0x15 + createvisualtask AnimTask_AlphaFadeIn, 0x3, 0x0, 0x10, 0x10, 0x0, 0x1 call MoongeistBeamCharge call MoongeistBeamCharge call MoongeistBeamCharge call MoongeistBeamCharge - launchtemplate gGrowingChargeOrbSpriteTemplate 0x2 0x1 0x0 @;Charge circle + createsprite gGrowingChargeOrbSpriteTemplate, ANIM_ATTACKER, 2, 0x0 @;Charge circle call MoongeistBeamCharge delay 0x20 createsoundtask SoundTask_LoopSEAdjustPanning, 0x7, 0xCC, 0xffc0, SOUND_PAN_TARGET, 0x1, 0xf, 0x0, 0x5 - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_ATTACKER 0x0 0x4 0x32 0x1 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_ATTACKER, 0x0, 0x4, 0x32, 0x1 createvisualtask AnimTask_FlashAnimTagWithColor, 2, ANIM_TAG_ORBS, 1, 12, RGB_RED, 16, 0, 0 call MoongeistBeamOrbs call MoongeistBeamOrbs call MoongeistBeamOrbs call MoongeistBeamOrbs call MoongeistBeamOrbs - launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x4 0x0 0x32 0x1 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x0 0xb 0x6739 + createvisualtask AnimTask_ShakeMon2, 0x2, 0x1, 0x4, 0x0, 0x32, 0x1 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x2, 0x0, 0xb, 0x6739 call MoongeistBeamOrbs call MoongeistBeamOrbs call MoongeistBeamOrbs @@ -12786,23 +12784,23 @@ Move_MOONGEIST_BEAM:: call MoongeistBeamOrbs call MoongeistBeamOrbs call MoongeistBeamOrbs - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0xb 0x0 0x6739 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x2, 0xb, 0x0, 0x6739 delay 0x1A stopsound - launchtask AnimTask_MoonlightEndFade 0x2 0x0 + createvisualtask AnimTask_MoonlightEndFade, 0x2 end MoongeistBeamCharge: - launchtemplate gMoongeistBeamChargeTemplate 0, 0x6, 40, 0, 0, 0, 30, 10 @From right - launchtemplate gMoongeistBeamChargeTemplate 0, 0x6, -40, 0, 0, 0, 30, -10 @From left - launchtemplate gMoongeistBeamChargeTemplate 0, 0x6, -25, -40, 0, 0, 30, -20 @From top left - launchtemplate gMoongeistBeamChargeTemplate 0, 0x6, 25, -40, 0, 0, 30, 20 @From top right - launchtemplate gMoongeistBeamChargeTemplate 0, 0x6, 25, 20, 0, 0, 30, 20 @From bottom right - launchtemplate gMoongeistBeamChargeTemplate 0, 0x6, -25, 40, 0, 0, 30, -20 @From bottom left + createsprite gMoongeistBeamChargeTemplate, ANIM_ATTACKER, 0, 40, 0, 0, 0, 30, 10 @From right + createsprite gMoongeistBeamChargeTemplate, ANIM_ATTACKER, 0, -40, 0, 0, 0, 30, -10 @From left + createsprite gMoongeistBeamChargeTemplate, ANIM_ATTACKER, 0, -25, -40, 0, 0, 30, -20 @From top left + createsprite gMoongeistBeamChargeTemplate, ANIM_ATTACKER, 0, 25, -40, 0, 0, 30, 20 @From top right + createsprite gMoongeistBeamChargeTemplate, ANIM_ATTACKER, 0, 25, 20, 0, 0, 30, 20 @From bottom right + createsprite gMoongeistBeamChargeTemplate, ANIM_ATTACKER, 0, -25, 40, 0, 0, 30, -20 @From bottom left delay 0x5 return MoongeistBeamOrbs: - launchtemplate gMoongeistBeamBlueOrbsTemplate 0x82 0x0 - launchtemplate gMoongeistBeamPurpleOrbsTemplate 0x82 0x0 + createsprite gMoongeistBeamBlueOrbsTemplate, ANIM_TARGET, 2 + createsprite gMoongeistBeamPurpleOrbsTemplate, ANIM_TARGET, 2 delay 0x1 return @@ -12810,24 +12808,24 @@ Move_TEARFUL_LOOK:: loadspritegfx ANIM_TAG_SMALL_BUBBLES @tears loadspritegfx ANIM_TAG_OPENING_EYE @eye monbg ANIM_DEF_PARTNER - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x5 0x7DE0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x5, 0x7DE0 waitforvisualfinish playsewithpan SE_M_CONFUSE_RAY, SOUND_PAN_TARGET - launchtemplate gOpeningEyeSpriteTemplate 0x5 0x4 0x0 0x0 0x1 0x0 + createsprite gOpeningEyeSpriteTemplate, ANIM_ATTACKER, 5, 0x0, 0x0, 0x1, 0x0 delay 0x35 loopsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER, 0xC, 0x2 delay 0x8 - launchtemplate gTearDropSpriteTemplate 0x2 0x2 0x1 0x0 - launchtemplate gTearDropSpriteTemplate 0x2 0x2 0x1 0x1 - launchtemplate gTearDropSpriteTemplate 0x2 0x2 0x1 0x2 - launchtemplate gTearDropSpriteTemplate 0x2 0x2 0x1 0x3 + createsprite gTearDropSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x0 + createsprite gTearDropSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x1 + createsprite gTearDropSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x2 + createsprite gTearDropSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x3 delay 0x8 - launchtemplate gTearDropSpriteTemplate 0x2 0x2 0x1 0x0 - launchtemplate gTearDropSpriteTemplate 0x2 0x2 0x1 0x1 - launchtemplate gTearDropSpriteTemplate 0x2 0x2 0x1 0x2 - launchtemplate gTearDropSpriteTemplate 0x2 0x2 0x1 0x3 + createsprite gTearDropSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x0 + createsprite gTearDropSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x1 + createsprite gTearDropSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x2 + createsprite gTearDropSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x3 waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x5 0x0 0x7DE0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x5, 0x0, 0x7DE0 waitforvisualfinish clearmonbg ANIM_DEF_PARTNER end @@ -12840,30 +12838,30 @@ Move_ZING_ZAP:: loadspritegfx ANIM_TAG_SMALL_EMBER @yellow color monbg ANIM_TARGET call ZingZapSparks1 - launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_ATTACKER 0x4 0x0 0x6 0x1 + createvisualtask AnimTask_ShakeMon, 0x5, ANIM_ATTACKER, 0x4, 0x0, 0x6, 0x1 delay 0xA call ZingZapSparks2 - launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_ATTACKER 0x4 0x0 0x6 0x1 + createvisualtask AnimTask_ShakeMon, 0x5, ANIM_ATTACKER, 0x4, 0x0, 0x6, 0x1 delay 0xA call ZingZapSparks1 - launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_ATTACKER 0x4 0x0 0x6 0x1 + createvisualtask AnimTask_ShakeMon, 0x5, ANIM_ATTACKER, 0x4, 0x0, 0x6, 0x1 delay 0xA call ZingZapSparks2 - launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_ATTACKER 0x4 0x0 0x6 0x1 + createvisualtask AnimTask_ShakeMon, 0x5, ANIM_ATTACKER, 0x4, 0x0, 0x6, 0x1 delay 0xA - launchtask AnimTask_TranslateMonEllipticalRespectSide 0x2 0x5 0x0 0x18 0x6 0x1 0x5 + createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 0x2, 0x0, 0x18, 0x6, 0x1, 0x5 delay 0x4 call ZingZapSparks1 invisible 0x0 - launchtemplate gZingZapYellowBallTemplate 0x82, 0x3, 0x0 0x0 0xF + createsprite gZingZapYellowBallTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xF delay 0xA call ZingZapSparks2 delay 0x5 stopsound playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER waitforvisualfinish - launchtemplate gZingZapRingTemplate 0x3 0x6 0x0 0x0 0x1 0x0 0x1f 0x8 - launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_TARGET 0x4 0x0 0x6 0x1 + createsprite gZingZapRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x1, 0x0, 0x1f, 0x8 + createvisualtask AnimTask_ShakeMon, 0x5, ANIM_TARGET, 0x4, 0x0, 0x6, 0x1 call ElectricityEffect visible 0x0 waitforvisualfinish @@ -12871,17 +12869,17 @@ Move_ZING_ZAP:: end ZingZapSparks1: playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0x20, 0x18, 0xbe, 0xc, 0x0, 0x1, 0x0 delay 0x0 - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0 - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0x50, 0x18, 0x16, 0xc, 0x0, 0x1, 0x0 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0x9c, 0x18, 0x79, 0xd, 0x0, 0x1, 0x1 return ZingZapSparks2: playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0 - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0x64, 0x18, 0x3c, 0xa, 0x0, 0x1, 0x0 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0xaa, 0x18, 0x2a, 0xb, 0x0, 0x1, 0x1 delay 0x0 - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0xee, 0x18, 0xa5, 0xa, 0x0, 0x1, 0x1 return Move_NATURES_MADNESS:: @@ -12894,72 +12892,72 @@ Move_NATURES_MADNESS:: loadspritegfx ANIM_TAG_TEAL_ALERT @charge particles loadspritegfx ANIM_TAG_ECLIPSING_ORB @blue green monbg ANIM_ATTACKER - setblends 0x80E + setalpha 14, 8 delay 0x1 loopsewithpan SE_M_HEAL_BELL, SOUND_PAN_ATTACKER, 0x10, 0x3 - launchtemplate gNaturesMadnessPinkStarsTemplate 0x2 0x4 0xa 0xa 0x19 0x0 - launchtemplate gNaturesMadnessCrystalsTemplate 0x2 0x4 0xa 0xa 0x19 0x0 + createsprite gNaturesMadnessPinkStarsTemplate, ANIM_ATTACKER, 2, 0xa, 0xa, 0x19, 0x0 + createsprite gNaturesMadnessCrystalsTemplate, ANIM_ATTACKER, 2, 0xa, 0xa, 0x19, 0x0 delay 0x4 - launchtemplate gNaturesMadnessPinkRingTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1F 0x8 - launchtemplate gNaturesMadnessPinkStarsTemplate 0x2 0x4 0xfff1 0x0 0x19 0x0 - launchtemplate gNaturesMadnessCrystalsTemplate 0x2 0x4 0xfff1 0x0 0x19 0x0 + createsprite gNaturesMadnessPinkRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0, 0x1F, 0x8 + createsprite gNaturesMadnessPinkStarsTemplate, ANIM_ATTACKER, 2, 0xfff1, 0x0, 0x19, 0x0 + createsprite gNaturesMadnessCrystalsTemplate, ANIM_ATTACKER, 2, 0xfff1, 0x0, 0x19, 0x0 delay 0x4 - launchtemplate gNaturesMadnessPinkStarsTemplate 0x2 0x4 0x14 0xa 0x19 0x0 - launchtemplate gNaturesMadnessCrystalsTemplate 0x2 0x4 0x14 0xa 0x19 0x0 + createsprite gNaturesMadnessPinkStarsTemplate, ANIM_ATTACKER, 2, 0x14, 0xa, 0x19, 0x0 + createsprite gNaturesMadnessCrystalsTemplate, ANIM_ATTACKER, 2, 0x14, 0xa, 0x19, 0x0 delay 0x4 - launchtemplate gNaturesMadnessPinkRingTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1F 0x8 - launchtemplate gNaturesMadnessPinkStarsTemplate 0x2 0x4 0x0 0xfff6 0x19 0x0 - launchtemplate gNaturesMadnessCrystalsTemplate 0x2 0x4 0x0 0xfff6 0x19 0x0 + createsprite gNaturesMadnessPinkRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0, 0x1F, 0x8 + createsprite gNaturesMadnessPinkStarsTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff6, 0x19, 0x0 + createsprite gNaturesMadnessCrystalsTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff6, 0x19, 0x0 delay 0x4 - launchtemplate gNaturesMadnessPinkStarsTemplate 0x2 0x4 0xfff6 0xf 0x19 0x0 - launchtemplate gNaturesMadnessCrystalsTemplate 0x2 0x4 0xfff6 0xf 0x19 0x0 + createsprite gNaturesMadnessPinkStarsTemplate, ANIM_ATTACKER, 2, 0xfff6, 0xf, 0x19, 0x0 + createsprite gNaturesMadnessCrystalsTemplate, ANIM_ATTACKER, 2, 0xfff6, 0xf, 0x19, 0x0 delay 0x4 - launchtemplate gNaturesMadnessPinkRingTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1F 0x8 - launchtemplate gNaturesMadnessPinkStarsTemplate 0x2 0x4 0x19 0x14 0x19 0x0 - launchtemplate gNaturesMadnessCrystalsTemplate 0x2 0x4 0x19 0x14 0x19 0x0 + createsprite gNaturesMadnessPinkRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0, 0x1F, 0x8 + createsprite gNaturesMadnessPinkStarsTemplate, ANIM_ATTACKER, 2, 0x19, 0x14, 0x19, 0x0 + createsprite gNaturesMadnessCrystalsTemplate, ANIM_ATTACKER, 2, 0x19, 0x14, 0x19, 0x0 delay 0x4 - launchtemplate gNaturesMadnessPinkStarsTemplate 0x2 0x4 0xffec 0x14 0x19 0x0 - launchtemplate gNaturesMadnessCrystalsTemplate 0x2 0x4 0xffec 0x14 0x19 0x0 + createsprite gNaturesMadnessPinkStarsTemplate, ANIM_ATTACKER, 2, 0xffec, 0x14, 0x19, 0x0 + createsprite gNaturesMadnessCrystalsTemplate, ANIM_ATTACKER, 2, 0xffec, 0x14, 0x19, 0x0 delay 0x4 - launchtemplate gNaturesMadnessPinkRingTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1F 0x8 - launchtemplate gNaturesMadnessPinkStarsTemplate 0x2 0x4 0xc 0x0 0x19 0x0 - launchtemplate gNaturesMadnessCrystalsTemplate 0x2 0x4 0xc 0x0 0x19 0x0 + createsprite gNaturesMadnessPinkRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0, 0x1F, 0x8 + createsprite gNaturesMadnessPinkStarsTemplate, ANIM_ATTACKER, 2, 0xc, 0x0, 0x19, 0x0 + createsprite gNaturesMadnessCrystalsTemplate, ANIM_ATTACKER, 2, 0xc, 0x0, 0x19, 0x0 clearmonbg ANIM_ATTACKER delay 0x1 monbg ANIM_TARGET waitforvisualfinish - launchtemplate gNaturesMadnessGrayRingTemplate 0x28 0x4 0x0 0x0 0x1 0x0 + createsprite gNaturesMadnessGrayRingTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x1, 0x0 playsewithpan SE_M_HEAL_BELL, SOUND_PAN_ATTACKER delay 0xe - launchtemplate gNaturesMadnessGrayRingTemplate 0x28 0x4 0x0 0x0 0x1 0x0 + createsprite gNaturesMadnessGrayRingTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x1, 0x0 playsewithpan SE_M_HEAL_BELL, SOUND_PAN_ATTACKER delay 0xe - launchtemplate gNaturesMadnessGrayRingTemplate 0x28 0x4 0x0 0x0 0x1 0x0 + createsprite gNaturesMadnessGrayRingTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x1, 0x0 playsewithpan SE_M_HEAL_BELL, SOUND_PAN_ATTACKER waitforvisualfinish playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gNaturesMadnessPinkRingTemplate 0x3 0x6 0x0 0x0 0x1 0x0 0x1F 0x8 - launchtemplate gNaturesMadnessPinkStarsTemplate 0x2 0x4 0xa 0xa 0x19 0x1 - launchtemplate gNaturesMadnessPinkStarsTemplate 0x2 0x4 0xfff1 0x0 0x19 0x1 - launchtemplate gNaturesMadnessPinkStarsTemplate 0x2 0x4 0x14 0xa 0x19 0x1 - launchtemplate gNaturesMadnessPinkStarsTemplate 0x2 0x4 0x0 0xfff6 0x19 0x1 - launchtemplate gNaturesMadnessPinkStarsTemplate 0x2 0x4 0xfff6 0xf 0x19 0x1 - launchtemplate gNaturesMadnessPinkStarsTemplate 0x2 0x4 0x19 0x14 0x19 0x1 - launchtemplate gNaturesMadnessPinkStarsTemplate 0x2 0x4 0xffec 0x14 0x19 0x1 - launchtemplate gNaturesMadnessPinkStarsTemplate 0x2 0x4 0xc 0x0 0x19 0x1 - launchtemplate gNaturesMadnessCrystalsTemplate 0x2 0x4 0xa 0xa 0x19 0x1 - launchtemplate gNaturesMadnessCrystalsTemplate 0x2 0x4 0xfff1 0x0 0x19 0x1 - launchtemplate gNaturesMadnessCrystalsTemplate 0x2 0x4 0x14 0xa 0x19 0x1 - launchtemplate gNaturesMadnessCrystalsTemplate 0x2 0x4 0x0 0xfff6 0x19 0x1 - launchtemplate gNaturesMadnessCrystalsTemplate 0x2 0x4 0xfff6 0xf 0x19 0x1 - launchtemplate gNaturesMadnessCrystalsTemplate 0x2 0x4 0x19 0x14 0x19 0x1 - launchtemplate gNaturesMadnessCrystalsTemplate 0x2 0x4 0xffec 0x14 0x19 0x1 - launchtemplate gNaturesMadnessCrystalsTemplate 0x2 0x4 0xc 0x0 0x19 0x1 - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + createsprite gNaturesMadnessPinkRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x1, 0x0, 0x1F, 0x8 + createsprite gNaturesMadnessPinkStarsTemplate, ANIM_ATTACKER, 2, 0xa, 0xa, 0x19, 0x1 + createsprite gNaturesMadnessPinkStarsTemplate, ANIM_ATTACKER, 2, 0xfff1, 0x0, 0x19, 0x1 + createsprite gNaturesMadnessPinkStarsTemplate, ANIM_ATTACKER, 2, 0x14, 0xa, 0x19, 0x1 + createsprite gNaturesMadnessPinkStarsTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff6, 0x19, 0x1 + createsprite gNaturesMadnessPinkStarsTemplate, ANIM_ATTACKER, 2, 0xfff6, 0xf, 0x19, 0x1 + createsprite gNaturesMadnessPinkStarsTemplate, ANIM_ATTACKER, 2, 0x19, 0x14, 0x19, 0x1 + createsprite gNaturesMadnessPinkStarsTemplate, ANIM_ATTACKER, 2, 0xffec, 0x14, 0x19, 0x1 + createsprite gNaturesMadnessPinkStarsTemplate, ANIM_ATTACKER, 2, 0xc, 0x0, 0x19, 0x1 + createsprite gNaturesMadnessCrystalsTemplate, ANIM_ATTACKER, 2, 0xa, 0xa, 0x19, 0x1 + createsprite gNaturesMadnessCrystalsTemplate, ANIM_ATTACKER, 2, 0xfff1, 0x0, 0x19, 0x1 + createsprite gNaturesMadnessCrystalsTemplate, ANIM_ATTACKER, 2, 0x14, 0xa, 0x19, 0x1 + createsprite gNaturesMadnessCrystalsTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff6, 0x19, 0x1 + createsprite gNaturesMadnessCrystalsTemplate, ANIM_ATTACKER, 2, 0xfff6, 0xf, 0x19, 0x1 + createsprite gNaturesMadnessCrystalsTemplate, ANIM_ATTACKER, 2, 0x19, 0x14, 0x19, 0x1 + createsprite gNaturesMadnessCrystalsTemplate, ANIM_ATTACKER, 2, 0xffec, 0x14, 0x19, 0x1 + createsprite gNaturesMadnessCrystalsTemplate, ANIM_ATTACKER, 2, 0xc, 0x0, 0x19, 0x1 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 delay 0x5 - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 delay 0x5 - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 waitforvisualfinish clearmonbg ANIM_TARGET blendoff @@ -12969,37 +12967,37 @@ Move_MULTI_ATTACK:: loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy loadspritegfx ANIM_TAG_CUT @cut monbg ANIM_TARGET - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xC 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xC, 0x0 waitforvisualfinish playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call MultiAttackBuff delay 0x8 - launchtask AnimTask_BlendColorCycle 0x2 0x6 ANIM_PAL_ATK 0x2 0x2 0x0 0xb 0x7fff - launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1 + createvisualtask AnimTask_BlendColorCycle, 0x2, F_PAL_ATTACKER, 0x2, 0x2, 0x0, 0xb, 0x7fff + createvisualtask AnimTask_ShakeMon2, 0x2, 0x0, 0x1, 0x0, 0x20, 0x1 call MultiAttackBuff delay 0x8 call MultiAttackBuff waitforvisualfinish delay 0xF playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET - launchtemplate gCuttingSliceSpriteTemplate 0x2 0x3 0x28 0xffe0 0x0 - launchtemplate gCuttingSliceSpriteTemplate 0x2 0x3 0x28 0xffd0 0x0 - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0 0x3 0xf 0x1 + createsprite gCuttingSliceSpriteTemplate, ANIM_ATTACKER, 2, 0x28, 0xffe0, 0x0 + createsprite gCuttingSliceSpriteTemplate, ANIM_ATTACKER, 2, 0x28, 0xffd0, 0x0 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x0, 0x3, 0xf, 0x1 waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xC 0x0 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xC, 0x0, 0x0 waitforvisualfinish clearmonbg ANIM_TARGET end MultiAttackBuff: - launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2 + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x1a, 0x2 delay 0x4 - launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1 + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xe, 0x1c, 0x1 delay 0x4 - launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2 + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfffb, 0xa, 0x2 delay 0x4 - launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3 + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1c, 0x1a, 0x3 delay 0x4 - launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1 + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff4, 0x0, 0x1 return Move_MIND_BLOWN:: @@ -13010,18 +13008,18 @@ Move_MIND_BLOWN:: loadspritegfx ANIM_TAG_IMPACT @hit monbg ANIM_TARGET setalpha 12, 8 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xC 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xC, 0x0 waitforvisualfinish playsewithpan SE_FALL, SOUND_PAN_TARGET - launchtemplate gMindBlownHeadTemplate 0x82, 0x3, 0x0 0x0 0x25 + createsprite gMindBlownHeadTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x25 waitforvisualfinish - launchtask AnimTask_ShakeMon2 0x2 0x5 ANIM_TARGET 0x2 0x0 0xf 0x1 - launchtask AnimTask_ShakeMon2 0x2 0x5 ANIM_DEF_PARTNER 0x2 0x0 0xf 0x1 - launchtask AnimTask_ShakeMon2 0x2 0x5 ANIM_ATK_PARTNER 0x2 0x0 0xf 0x1 + createvisualtask AnimTask_ShakeMon2, 0x2, ANIM_TARGET, 0x2, 0x0, 0xf, 0x1 + createvisualtask AnimTask_ShakeMon2, 0x2, ANIM_DEF_PARTNER, 0x2, 0x0, 0xf, 0x1 + createvisualtask AnimTask_ShakeMon2, 0x2, ANIM_ATK_PARTNER, 0x2, 0x0, 0xf, 0x1 delay 0x1 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gMindBlownBlueImpactTemplate 0x83 0x2 0x1 0x0 - launchtemplate gMindBlownPinkImpactTemplate 0x83 0x2 0x1 0x0 + createsprite gMindBlownBlueImpactTemplate, ANIM_TARGET, 3, 0x1, 0x0 + createsprite gMindBlownPinkImpactTemplate, ANIM_TARGET, 3, 0x1, 0x0 call MindBlownBlueOrbs delay 0x1 call MindBlownPinkOrbs @@ -13033,30 +13031,30 @@ Move_MIND_BLOWN:: call MindBlownBlueOrbs delay 0x1 waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xC 0x0 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xC, 0x0, 0x0 waitforvisualfinish blendoff clearmonbg ANIM_TARGET end MindBlownBlueOrbs: - launchtemplate gMindBlownBlueOrbsTemplate 0x82 0x5 0x1 0x1 0x0 0xFF90 0x8 @up - launchtemplate gMindBlownBlueOrbsTemplate 0x82 0x5 0x1 0x1 0x5F 0xFF9D 0x8 @upper right - launchtemplate gMindBlownBlueOrbsTemplate 0x82 0x5 0x1 0x1 0x73 0x0 0x8 @right - launchtemplate gMindBlownBlueOrbsTemplate 0x82 0x5 0x1 0x1 0x4F 0x37 0x8 @lower right - launchtemplate gMindBlownBlueOrbsTemplate 0x82 0x5 0x1 0x1 0x0 0x53 0x8 @down - launchtemplate gMindBlownBlueOrbsTemplate 0x82 0x5 0x1 0x1 0xFFB0 0x43 0x8 @lower left - launchtemplate gMindBlownBlueOrbsTemplate 0x82 0x5 0x1 0x1 0xFF60 0x0 0x8 @left - launchtemplate gMindBlownBlueOrbsTemplate 0x82 0x5 0x1 0x1 0xFFAA 0xFF94 0x8 @upper left + createsprite gMindBlownBlueOrbsTemplate, ANIM_TARGET, 2, 0x1, 0x1, 0x0, 0xFF90, 0x8 @up + createsprite gMindBlownBlueOrbsTemplate, ANIM_TARGET, 2, 0x1, 0x1, 0x5F, 0xFF9D, 0x8 @upper right + createsprite gMindBlownBlueOrbsTemplate, ANIM_TARGET, 2, 0x1, 0x1, 0x73, 0x0, 0x8 @right + createsprite gMindBlownBlueOrbsTemplate, ANIM_TARGET, 2, 0x1, 0x1, 0x4F, 0x37, 0x8 @lower right + createsprite gMindBlownBlueOrbsTemplate, ANIM_TARGET, 2, 0x1, 0x1, 0x0, 0x53, 0x8 @down + createsprite gMindBlownBlueOrbsTemplate, ANIM_TARGET, 2, 0x1, 0x1, 0xFFB0, 0x43, 0x8 @lower left + createsprite gMindBlownBlueOrbsTemplate, ANIM_TARGET, 2, 0x1, 0x1, 0xFF60, 0x0, 0x8 @left + createsprite gMindBlownBlueOrbsTemplate, ANIM_TARGET, 2, 0x1, 0x1, 0xFFAA, 0xFF94, 0x8 @upper left return MindBlownPinkOrbs: - launchtemplate gMindBlownPinkOrbsTemplate 0x82 0x5 0x1 0x1 0x2D 0xFF9D 0x8 @between up and upper right - launchtemplate gMindBlownPinkOrbsTemplate 0x82 0x5 0x1 0x1 0xDF 0xFF9D 0x8 @between right and upper right - launchtemplate gMindBlownPinkOrbsTemplate 0x82 0x5 0x1 0x1 0x9F 0x37 0x8 @between right and lower right - launchtemplate gMindBlownPinkOrbsTemplate 0x82 0x5 0x1 0x1 0x1F 0x37 0x8 @between lower right and down - launchtemplate gMindBlownPinkOrbsTemplate 0x82 0x5 0x1 0x1 0xFFE0 0x43 0x8 @between lower left and down - launchtemplate gMindBlownPinkOrbsTemplate 0x82 0x5 0x1 0x1 0xFF60 0x43 0x8 @between left and lower left - launchtemplate gMindBlownPinkOrbsTemplate 0x82 0x5 0x1 0x1 0xFF2A 0xFFAA 0x8 @between left and upper left - launchtemplate gMindBlownPinkOrbsTemplate 0x82 0x5 0x1 0x1 0xFFDA 0xFF94 0x8 @between up and upper left + createsprite gMindBlownPinkOrbsTemplate, ANIM_TARGET, 2, 0x1, 0x1, 0x2D, 0xFF9D, 0x8 @between up and upper right + createsprite gMindBlownPinkOrbsTemplate, ANIM_TARGET, 2, 0x1, 0x1, 0xDF, 0xFF9D, 0x8 @between right and upper right + createsprite gMindBlownPinkOrbsTemplate, ANIM_TARGET, 2, 0x1, 0x1, 0x9F, 0x37, 0x8 @between right and lower right + createsprite gMindBlownPinkOrbsTemplate, ANIM_TARGET, 2, 0x1, 0x1, 0x1F, 0x37, 0x8 @between lower right and down + createsprite gMindBlownPinkOrbsTemplate, ANIM_TARGET, 2, 0x1, 0x1, 0xFFE0, 0x43, 0x8 @between lower left and down + createsprite gMindBlownPinkOrbsTemplate, ANIM_TARGET, 2, 0x1, 0x1, 0xFF60, 0x43, 0x8 @between left and lower left + createsprite gMindBlownPinkOrbsTemplate, ANIM_TARGET, 2, 0x1, 0x1, 0xFF2A, 0xFFAA, 0x8 @between left and upper left + createsprite gMindBlownPinkOrbsTemplate, ANIM_TARGET, 2, 0x1, 0x1, 0xFFDA, 0xFF94, 0x8 @between up and upper left return Move_PLASMA_FISTS:: @@ -13068,10 +13066,10 @@ Move_PLASMA_FISTS:: loadspritegfx ANIM_TAG_LIGHTNING @thunder punch monbg ANIM_ATTACKER setalpha 12, 8 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x10 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x10, 0x0 waitforvisualfinish - launchtemplate gPlasmaFistsChargeTemplate 0x2 0x1 0x0 - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_ATTACKER 0x0 0x3 0x5c 0x1 + createsprite gPlasmaFistsChargeTemplate, ANIM_ATTACKER, 2, 0x0 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_ATTACKER, 0x0, 0x3, 0x5c, 0x1 call PlasmaFistSpark1 delay 0xA call PlasmaFistSpark2 @@ -13097,51 +13095,51 @@ Move_PLASMA_FISTS:: call PlasmaFistSpark2 waitforvisualfinish clearmonbg ANIM_ATTACKER - launchtask AnimTask_ShockWaveProgressingBolt 0x5 0x0 + createvisualtask AnimTask_ShockWaveProgressingBolt, 0x5 waitforvisualfinish monbg ANIM_TARGET call PlasmaFistsImpact waitforvisualfinish call PlasmaFistsImpact waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xC 0x0 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xC, 0x0, 0x0 waitforvisualfinish clearmonbg ANIM_TARGET blendoff end PlasmaFistSpark1: playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER - launchtask AnimTask_BlendColorCycle 0x2 0x6 ANIM_PAL_ATK 0x0 0x2 0x0 0xb 0x5bff - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0 + createvisualtask AnimTask_BlendColorCycle, 0x2, F_PAL_ATTACKER, 0x0, 0x2, 0x0, 0xb, 0x5bff + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0x20, 0x18, 0xbe, 0xc, 0x0, 0x1, 0x0 delay 0x0 - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0 - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0x50, 0x18, 0x16, 0xc, 0x0, 0x1, 0x0 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0x9c, 0x18, 0x79, 0xd, 0x0, 0x1, 0x1 return PlasmaFistSpark2: playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0 - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0x64, 0x18, 0x3c, 0xa, 0x0, 0x1, 0x0 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0xaa, 0x18, 0x2a, 0xb, 0x0, 0x1, 0x1 delay 0x0 - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0xee, 0x18, 0xa5, 0xa, 0x0, 0x1, 0x1 return PlasmaFistsImpact: playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET - launchtemplate gFistFootSpriteTemplate 0x84 0x5 0x0 0x0 0x8 0x1 0x0 - launchtemplate gBasicHitSplatSpriteTemplate 0x83 0x4 0x0 0x0 0x1 0x1 + createsprite gFistFootSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x8, 0x1, 0x0 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, 0x1, 0x1 delay 0x1 - launchtask AnimTask_InvertScreenColor 0x2 0x3 0x101 0x101 0x101 + createvisualtask AnimTask_InvertScreenColor, 0x2, 0x101, 0x101, 0x101 delay 0x1 - launchtemplate gLightningSpriteTemplate 0x82 0x2 0x0 0xffd0 + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0x0, 0xffd0 delay 0x1 - launchtemplate gLightningSpriteTemplate 0x2 0x2 0x0 0xfff0 + createsprite gLightningSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff0 delay 0x1 - launchtemplate gLightningSpriteTemplate 0x2 0x2 0x0 0x10 + createsprite gLightningSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x10 delay 0x1 playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET - launchtask AnimTask_InvertScreenColor 0x2 0x3 0x101 0x101 0x101 + createvisualtask AnimTask_InvertScreenColor, 0x2, 0x101, 0x101, 0x101 delay 0x2 - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0 0x3 0xf 0x1 - launchtemplate gBasicHitSplatSpriteTemplate 0x3 0x4 0x0 0x0 0x1 0x2 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x0, 0x3, 0xf, 0x1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x1, 0x2 return Move_PHOTON_GEYSER:: @@ -13153,10 +13151,10 @@ Move_PHOTON_GEYSER:: loadspritegfx ANIM_TAG_ORBS @recover monbg ANIM_ATTACKER setalpha 12, 8 - launchtemplate gPhotonGeyserChargeTemplate 0x2 0x1 0x0 + createsprite gPhotonGeyserChargeTemplate, ANIM_ATTACKER, 2, 0x0 call PhotonGeyserSparks1 - launchtemplate gPowerAbsorptionOrbSpriteTemplate 0x2 0x3 0xffd8 0xffd8 0x10 - launchtemplate gPowerAbsorptionOrbSpriteTemplate 0x2 0x3 0x0 0x28 0x10 + createsprite gPowerAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 2, 0xffd8, 0xffd8, 0x10 + createsprite gPowerAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x28, 0x10 delay 0xA call PhotonGeyserSparks2 delay 0xA @@ -13165,8 +13163,8 @@ Move_PHOTON_GEYSER:: call PhotonGeyserSparks2 delay 0xA call PhotonGeyserSparks1 - launchtemplate gPowerAbsorptionOrbSpriteTemplate 0x2 0x3 0x0 0xffd8 0x10 - launchtemplate gPowerAbsorptionOrbSpriteTemplate 0x2 0x3 0x28 0x14 0x10 + createsprite gPowerAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffd8, 0x10 + createsprite gPowerAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 2, 0x28, 0x14, 0x10 delay 0xA call PhotonGeyserSparks2 delay 0xA @@ -13175,8 +13173,8 @@ Move_PHOTON_GEYSER:: call PhotonGeyserSparks2 delay 0xA call PhotonGeyserSparks1 - launchtemplate gPowerAbsorptionOrbSpriteTemplate 0x2 0x3 0xffd8 0x0 0x10 - launchtemplate gPowerAbsorptionOrbSpriteTemplate 0x2 0x3 0x28 0x0 0x10 + createsprite gPowerAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 2, 0xffd8, 0x0, 0x10 + createsprite gPowerAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 2, 0x28, 0x0, 0x10 delay 0xA call PhotonGeyserSparks2 delay 0xA @@ -13184,7 +13182,7 @@ Move_PHOTON_GEYSER:: delay 0xA call PhotonGeyserSparks2 waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xF 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xF, 0x0 clearmonbg ANIM_ATTACKER playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_ATTACKER unloadspritegfx ANIM_TAG_ORBS @recover @@ -13192,66 +13190,66 @@ Move_PHOTON_GEYSER:: loadspritegfx ANIM_TAG_YELLOW_BALL @confuse ray (for zap cannon) loadspritegfx ANIM_TAG_BLACK_BALL_2 @zap cannon loadspritegfx ANIM_TAG_AIR_WAVE_2 @white/gray color - launchtemplate gPhotonGeyserWhiteRingTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1f 0x8 - launchtemplate gPhotonGeyserZapBallTemplate 0x83 0x6 0xa 0x0 0x0 0x0 0x1e 0x0 - launchtemplate gPhotonGeyserZapCannonSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x0 0x28 0x0 - launchtemplate gPhotonGeyserZapCannonSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x40 0x28 0x1 - launchtemplate gPhotonGeyserZapCannonSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x80 0x28 0x0 - launchtemplate gPhotonGeyserZapCannonSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x0 0x28 0x2 - launchtemplate gPhotonGeyserZapCannonSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x20 0x28 0x0 - launchtemplate gPhotonGeyserZapCannonSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x60 0x28 0x1 - launchtemplate gPhotonGeyserZapCannonSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0xa0 0x28 0x0 - launchtemplate gPhotonGeyserZapCannonSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0xe0 0x28 0x2 + createsprite gPhotonGeyserWhiteRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x8 + createsprite gPhotonGeyserZapBallTemplate, ANIM_TARGET, 3, 0xa, 0x0, 0x0, 0x0, 0x1e, 0x0 + createsprite gPhotonGeyserZapCannonSparkTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x10, 0x1e, 0x0, 0x28, 0x0 + createsprite gPhotonGeyserZapCannonSparkTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x10, 0x1e, 0x40, 0x28, 0x1 + createsprite gPhotonGeyserZapCannonSparkTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x10, 0x1e, 0x80, 0x28, 0x0 + createsprite gPhotonGeyserZapCannonSparkTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x10, 0x1e, 0x0, 0x28, 0x2 + createsprite gPhotonGeyserZapCannonSparkTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x8, 0x1e, 0x20, 0x28, 0x0 + createsprite gPhotonGeyserZapCannonSparkTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x8, 0x1e, 0x60, 0x28, 0x1 + createsprite gPhotonGeyserZapCannonSparkTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x8, 0x1e, 0xa0, 0x28, 0x0 + createsprite gPhotonGeyserZapCannonSparkTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x8, 0x1e, 0xe0, 0x28, 0x2 waitforvisualfinish monbg ANIM_TARGET - launchtemplate gPhotonGeyserYellowRingTemplate 0x3 0x6 0x0 0x0 0x1 0x0 0x1f 0x8 - launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x4 0x0 0x5 0x1 + createsprite gPhotonGeyserYellowRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x1, 0x0, 0x1f, 0x8 + createvisualtask AnimTask_ShakeMon2, 0x2, 0x1, 0x4, 0x0, 0x5, 0x1 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER unloadspritegfx ANIM_TAG_YELLOW_BALL @confuse ray (for zap cannon) unloadspritegfx ANIM_TAG_BLACK_BALL_2 @zap cannon unloadspritegfx ANIM_TAG_AIR_WAVE_2 @white/gray color @Shoot beam to the sky loadspritegfx ANIM_TAG_STRAIGHT_BEAM - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x6 0x0 0x10 0x43FF @Light yellow - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x4 0x0 0x60 0x1 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x6, 0x0, 0x10, 0x43FF @Light yellow + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x4, 0x0, 0x60, 0x1 panse SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0 call PhotonGeyserBeam waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x1 0x10 0x0 0x43FF @Light yellow - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xF 0x0 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x1, 0x10, 0x0, 0x43FF @Light yellow + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xF, 0x0, 0x0 waitforvisualfinish clearmonbg ANIM_TARGET blendoff end PhotonGeyserSparks1: playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER - launchtemplate gThinRingShrinkingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0 - launchtemplate gPhotonGeyserSparkTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0 + createsprite gThinRingShrinkingSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0 + createsprite gPhotonGeyserSparkTemplate, ANIM_ATTACKER, 0, 0x20, 0x18, 0xbe, 0xc, 0x0, 0x1, 0x0 delay 0x0 - launchtemplate gPhotonGeyserSparkTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0 - launchtemplate gPhotonGeyserSparkTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1 + createsprite gPhotonGeyserSparkTemplate, ANIM_ATTACKER, 0, 0x50, 0x18, 0x16, 0xc, 0x0, 0x1, 0x0 + createsprite gPhotonGeyserSparkTemplate, ANIM_ATTACKER, 0, 0x9c, 0x18, 0x79, 0xd, 0x0, 0x1, 0x1 return PhotonGeyserSparks2: playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER - launchtemplate gPhotonGeyserSparkTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0 - launchtemplate gPhotonGeyserSparkTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1 + createsprite gPhotonGeyserSparkTemplate, ANIM_ATTACKER, 0, 0x64, 0x18, 0x3c, 0xa, 0x0, 0x1, 0x0 + createsprite gPhotonGeyserSparkTemplate, ANIM_ATTACKER, 0, 0xaa, 0x18, 0x2a, 0xb, 0x0, 0x1, 0x1 delay 0x0 - launchtemplate gPhotonGeyserSparkTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1 + createsprite gPhotonGeyserSparkTemplate, ANIM_ATTACKER, 0, 0xee, 0x18, 0xa5, 0xa, 0x0, 0x1, 0x1 return PhotonGeyserBeam: - launchtemplate gPhotonGeyserBeam 0x83, 0x6, 0, 19, ANIM_TARGET, 180, 2, 6 + createsprite gPhotonGeyserBeam, ANIM_TARGET, 3, 0, 19, ANIM_TARGET, 180, 2, 6 delay 0x1 - launchtemplate gPhotonGeyserBeam 0x83, 0x6, 0, 3, ANIM_TARGET, 180, 2, 5 + createsprite gPhotonGeyserBeam, ANIM_TARGET, 3, 0, 3, ANIM_TARGET, 180, 2, 5 delay 0x1 - launchtemplate gPhotonGeyserBeam 0x83, 0x6, 0, -13, ANIM_TARGET, 180, 2, 4 + createsprite gPhotonGeyserBeam, ANIM_TARGET, 3, 0, -13, ANIM_TARGET, 180, 2, 4 delay 0x1 - launchtemplate gPhotonGeyserBeam 0x83, 0x6, 0, -29, ANIM_TARGET, 180, 2, 3 + createsprite gPhotonGeyserBeam, ANIM_TARGET, 3, 0, -29, ANIM_TARGET, 180, 2, 3 delay 0x1 - launchtemplate gPhotonGeyserBeam 0x83, 0x6, 0, -45, ANIM_TARGET, 180, 2, 2 + createsprite gPhotonGeyserBeam, ANIM_TARGET, 3, 0, -45, ANIM_TARGET, 180, 2, 2 delay 0x1 - launchtemplate gPhotonGeyserBeam 0x83, 0x6, 0, -61, ANIM_TARGET, 180, 2, 1 + createsprite gPhotonGeyserBeam, ANIM_TARGET, 3, 0, -61, ANIM_TARGET, 180, 2, 1 delay 0x1 - launchtemplate gPhotonGeyserBeam 0x83, 0x6, 0, -77, ANIM_TARGET, 180, 2, 0 + createsprite gPhotonGeyserBeam, ANIM_TARGET, 3, 0, -77, ANIM_TARGET, 180, 2, 0 return Move_ZIPPY_ZAP:: @@ -13297,28 +13295,28 @@ Move_DOUBLE_IRON_BASH:: loadspritegfx ANIM_TAG_GUST loadspritegfx ANIM_TAG_IMPACT loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 0x1c, 0x2 - launchtask AnimTask_MetallicShine 0x5 0x3 0x0 0x0 0x0 + createvisualtask AnimTask_MetallicShine, 0x5, 0x0, 0x0, 0x0 waitforvisualfinish monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET setalpha 12, 8 loopsewithpan SE_M_WING_ATTACK, SOUND_PAN_ATTACKER, 0x14, 0x2 - launchtask AnimTask_TranslateMonElliptical 0x2 0x5 0x0 0xc 0x4 0x1 0x4 - launchtask AnimTask_AnimateGustTornadoPalette 0x5 0x2 0x1 0x46 - launchtemplate gGustToTargetSpriteTemplate 0x2 0x5 0xffe7 0x0 0x0 0x0 0x0 @wing attack - launchtemplate gGustToTargetSpriteTemplate 0x2 0x5 0x19 0x0 0x0 0x0 0x0 @wing attack + createvisualtask AnimTask_TranslateMonElliptical, 0x2, 0x0, 0xc, 0x4, 0x1, 0x4 + createvisualtask AnimTask_AnimateGustTornadoPalette, 0x5, 0x1, 0x46 + createsprite gGustToTargetSpriteTemplate, ANIM_ATTACKER, 2, 0xffe7, 0x0, 0x0, 0x0, 0x0 @wing attack + createsprite gGustToTargetSpriteTemplate, ANIM_ATTACKER, 2, 0x19, 0x0, 0x0, 0x0, 0x0 @wing attack delay 0x18 - launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x18 0x0 0x0 0x9 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x18, 0x0, 0x0, 0x9 delay 0x11 - launchtemplate gBasicHitSplatSpriteTemplate 0x84, 0x4, 0x0 0x0 0x1 0x1 - launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xffe0 0x0 0x0 0x3 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x1, 0x1 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0xffe0, 0x0, 0x0, 0x3 waitforvisualfinish playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET waitforvisualfinish - launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0x0 0xb + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0xb waitforvisualfinish delay 0x3 - launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x7 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x7 clearmonbg ANIM_DEF_PARTNER blendoff end @@ -13330,18 +13328,18 @@ Move_DYNAMAX_CANNON:: Move_SNIPE_SHOT:: loadspritegfx ANIM_TAG_IMPACT_2 loadspritegfx ANIM_TAG_LEER - launchtask AnimTask_BlendBattleAnimPal 10 5 ANIM_PAL_BG 0 0 16, 0 @;Black + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 0, 16, 0 @;Black waitforvisualfinish - launchtemplate gLeerSpriteTemplate 0x82, 2 0x18 -12 + createsprite gLeerSpriteTemplate, ANIM_TARGET, 2, 0x18, -12 playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER waitforvisualfinish delay 0x20 playsewithpan SE_M_GIGA_DRAIN, SOUND_PAN_TARGET - launchtemplate gSnipeShotBallTemplate 0x82, 3, 0 0 16, + createsprite gSnipeShotBallTemplate, ANIM_TARGET, 2, 0, 0, 16 waitforvisualfinish - launchtask AnimTask_ShakeMon2 2 5 1 4 0 8, 1 + createvisualtask AnimTask_ShakeMon2, 2, 1, 4, 0, 8, 1 waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 10 5 ANIM_PAL_BG 0 16, 0 0 @;Black + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 16, 0, 0 @;Black waitforvisualfinish end @@ -13350,16 +13348,16 @@ Move_JAW_LOCK:: loadspritegfx ANIM_TAG_IMPACT createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SHARP_TEETH, 0, 10, 10, 0x0B1D @Light orange monbg ANIM_TARGET - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x7 0x0 @Black + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x7, 0x0 @Black waitforvisualfinish playsewithpan SE_M_BITE, SOUND_PAN_TARGET - launchtemplate gJawLockTeethTemplate 0x2 0x7 0xffe0 0xffe0 0x1 0x333 0x333 0xa 15 - launchtemplate gJawLockTeethTemplate 0x2 0x7 0x20 0x20 0x5 0xfccd 0xfccd 0xa 15 + createsprite gJawLockTeethTemplate, ANIM_ATTACKER, 2, 0xffe0, 0xffe0, 0x1, 0x333, 0x333, 0xa, 15 + createsprite gJawLockTeethTemplate, ANIM_ATTACKER, 2, 0x20, 0x20, 0x5, 0xfccd, 0xfccd, 0xa, 15 delay 0xa - launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0xfff8 0x0 0x1 0x1 - launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_TARGET 0x0 0x7 0xA 0x2 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0xfff8, 0x0, 0x1, 0x1 + createvisualtask AnimTask_ShakeMon, 0x5, ANIM_TARGET, 0x0, 0x7, 0xA, 0x2 waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x7 0x0 0x0 @;Black + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x7, 0x0, 0x0 @;Black waitforvisualfinish clearmonbg ANIM_TARGET delay 0x1 @@ -13371,9 +13369,9 @@ Move_STUFF_CHEEKS:: loadspritegfx ANIM_TAG_THIN_RING loadspritegfx ANIM_TAG_SPARKLE_2 playsewithpan SE_M_METRONOME, 0xc0 - launchtemplate gFloatingBerryTemplate 1 0x1 0x0 + createsprite gFloatingBerryTemplate, ANIM_ATTACKER, 1, 0x0 delay 0x45 - launchtask AnimTask_IsTargetPlayerSide 0x2 0x0 + createvisualtask AnimTask_IsTargetPlayerSide, 0x2 jumpargeq 0x7 0x1 BERRYEAT_ON_PLAYER BerryEatingOpponent: call BiteOpponent @@ -13388,27 +13386,27 @@ BERRYEAT_ON_PLAYER: delay 0xA POST_BERRY_EAT: playsewithpan SE_SHINY, 0xc0 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 0x2 0x3 0x7 0x0 0x67f1 - launchtemplate gThinRingExpandingSpriteTemplate 3 0x4 0x0 0x0 0x0 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, 0x2, 0x3, 0x7, 0x0, 0x67f1 + createsprite gThinRingExpandingSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0 waitforvisualfinish end BitePlayer: playsewithpan SE_M_BITE, 0x3f - launchtemplate gSharpTeethSpriteTemplate 2 0x6 0x27 0xffD0 0x0 0x0 0x333 0xa - launchtemplate gSharpTeethSpriteTemplate 2 0x6 0x27 0x10 0x4 0x0 0xfccd 0xa + createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 0x27, 0xffD0, 0x0, 0x0, 0x333, 0xa + createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 0x27, 0x10, 0x4, 0x0, 0xfccd, 0xa return BiteOpponent: playsewithpan SE_M_BITE, 0x3f - launchtemplate gSharpTeethSpriteTemplate 2 0x6 0xffDF 0xffD0 0x0 0x0 0x333 0xa - launchtemplate gSharpTeethSpriteTemplate 2 0x6 0xffDF 0x10 0x4 0x0 0xfccd 0xa + createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 0xffDF, 0xffD0, 0x0, 0x0, 0x333, 0xa + createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 0xffDF, 0x10, 0x4, 0x0, 0xfccd, 0xa return Move_NO_RETREAT:: loadspritegfx ANIM_TAG_SMALL_EMBER loopsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER 0x7 0x12 - launchtemplate gNoRetreatFlameTemplate 2, 0x5 ANIM_ATTACKER, 20, 10, 0xA0, 0 - launchtemplate gNoRetreatFlameTemplate 2, 0x5 ANIM_ATTACKER, -20, 10, 0xA0, 0 - launchtask AnimTask_TeeterDanceMovement 0x5 0x0 + createsprite gNoRetreatFlameTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 20, 10, 0xA0, 0 + createsprite gNoRetreatFlameTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, -20, 10, 0xA0, 0 + createvisualtask AnimTask_TeeterDanceMovement, 0x5 waitforvisualfinish end @@ -13416,21 +13414,21 @@ Move_TAR_SHOT:: loadspritegfx ANIM_TAG_POISON_BUBBLE createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_POISON_BUBBLE, 0, 15, 15, 0 @Black monbg ANIM_TARGET - launchtemplate gAppleAcidLaunchTemplate 0x82, 0x6 0x14 0x0 0x28 0x1 0x0 0x0 + createsprite gAppleAcidLaunchTemplate, ANIM_TARGET, 2, 0x14, 0x0, 0x28, 0x1, 0x0, 0x0 playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER delay 0x5 - launchtemplate gAppleAcidLaunchTemplate 0x82, 0x6 0x14 0x0 0x28 0x1 0xffe8 0x0 + createsprite gAppleAcidLaunchTemplate, ANIM_TARGET, 2, 0x14, 0x0, 0x28, 0x1, 0xffe8, 0x0 playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER delay 0xf - launchtask AnimTask_ShakeMon2 0x5 0x5 ANIM_TARGET 0x2 0x0 0xa 0x1 - launchtask AnimTask_BlendColorCycle 0x2 0x6 ANIM_PAL_DEF 0x2 0x2 0x0 0x10 0x0 @;Black - launchtemplate gAppleAcidDripTemplate 0x82, 0x5 0xffe6 0xffe8 0x0 0xf 0x37 + createvisualtask AnimTask_ShakeMon2, 0x5, ANIM_TARGET, 0x2, 0x0, 0xa, 0x1 + createvisualtask AnimTask_BlendColorCycle, 0x2, F_PAL_TARGET, 0x2, 0x2, 0x0, 0x10, 0x0 @;Black + createsprite gAppleAcidDripTemplate, ANIM_TARGET, 2, 0xffe6, 0xffe8, 0x0, 0xf, 0x37 playsewithpan SE_M_BUBBLE, SOUND_PAN_TARGET delay 0xa - launchtemplate gAppleAcidDripTemplate 0x82, 0x5 0xf 0xffe5 0x0 0xC 0x32 + createsprite gAppleAcidDripTemplate, ANIM_TARGET, 2, 0xf, 0xffe5, 0x0, 0xC, 0x32 playsewithpan SE_M_BUBBLE, SOUND_PAN_TARGET delay 0xa - launchtemplate gAppleAcidDripTemplate 0x82, 0x5 0xfff1 0xffef 0x0 0xa 0x2d + createsprite gAppleAcidDripTemplate, ANIM_TARGET, 2, 0xfff1, 0xffef, 0x0, 0xa, 0x2d playsewithpan SE_M_BUBBLE SOUND_PAN_TARGET waitforvisualfinish clearmonbg ANIM_TARGET @@ -13440,27 +13438,27 @@ Move_MAGIC_POWDER:: loadspritegfx ANIM_TAG_POISON_POWDER loadspritegfx ANIM_TAG_WATER_GUN loopsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER 0xE 0x8 - launchtemplate gPoisonPowderParticleSpriteTemplate 0x82 0x6 0xffe2 0xffea 0x75 0x50 0x5 0x1 - launchtemplate gMagicPowderBluePowderTemplate 0x82 0x6 0xa 0xffea 0x75 0x50 0xfffb 0x1 - launchtemplate gPoisonPowderParticleSpriteTemplate 0x82 0x6 0xffe7 0xffea 0x75 0x70 0x5 0x3 + createsprite gPoisonPowderParticleSpriteTemplate, ANIM_TARGET, 2, 0xffe2, 0xffea, 0x75, 0x50, 0x5, 0x1 + createsprite gMagicPowderBluePowderTemplate, ANIM_TARGET, 2, 0xa, 0xffea, 0x75, 0x50, 0xfffb, 0x1 + createsprite gPoisonPowderParticleSpriteTemplate, ANIM_TARGET, 2, 0xffe7, 0xffea, 0x75, 0x70, 0x5, 0x3 delay 0xf - launchtemplate gMagicPowderBluePowderTemplate 0x82 0x6 0xfffb 0xffea 0x75 0x50 0xfffb 0x1 - launchtemplate gPoisonPowderParticleSpriteTemplate 0x82 0x6 0x5 0xffea 0x75 0x60 0x5 0x1 - launchtemplate gMagicPowderBluePowderTemplate 0x82 0x6 0x0 0xffea 0x75 0x45 0xfffb 0x1 - launchtemplate gPoisonPowderParticleSpriteTemplate 0x82 0x6 0xfff1 0xffea 0x75 0x70 0x5 0x2 + createsprite gMagicPowderBluePowderTemplate, ANIM_TARGET, 2, 0xfffb, 0xffea, 0x75, 0x50, 0xfffb, 0x1 + createsprite gPoisonPowderParticleSpriteTemplate, ANIM_TARGET, 2, 0x5, 0xffea, 0x75, 0x60, 0x5, 0x1 + createsprite gMagicPowderBluePowderTemplate, ANIM_TARGET, 2, 0x0, 0xffea, 0x75, 0x45, 0xfffb, 0x1 + createsprite gPoisonPowderParticleSpriteTemplate, ANIM_TARGET, 2, 0xfff1, 0xffea, 0x75, 0x70, 0x5, 0x2 delay 0x1e - launchtemplate gMagicPowderBluePowderTemplate 0x82 0x6 0xfff1 0xffea 0x75 0x70 0x5 0x2 - launchtemplate gPoisonPowderParticleSpriteTemplate 0x82 0x6 0xf 0xffea 0x75 0x50 0xfffb 0x1 - launchtemplate gMagicPowderBluePowderTemplate 0x82 0x6 0xfff6 0xffea 0x75 0x60 0x7 0x2 - launchtemplate gPoisonPowderParticleSpriteTemplate 0x82 0x6 0xfffb 0xffea 0x75 0x5a 0xfff8 0x0 + createsprite gMagicPowderBluePowderTemplate, ANIM_TARGET, 2, 0xfff1, 0xffea, 0x75, 0x70, 0x5, 0x2 + createsprite gPoisonPowderParticleSpriteTemplate, ANIM_TARGET, 2, 0xf, 0xffea, 0x75, 0x50, 0xfffb, 0x1 + createsprite gMagicPowderBluePowderTemplate, ANIM_TARGET, 2, 0xfff6, 0xffea, 0x75, 0x60, 0x7, 0x2 + createsprite gPoisonPowderParticleSpriteTemplate, ANIM_TARGET, 2, 0xfffb, 0xffea, 0x75, 0x5a, 0xfff8, 0x0 delay 0x14 - launchtemplate gMagicPowderBluePowderTemplate 0x82 0x6 0xfff6 0xffea 0x75 0x50 0xfffb 0x1 - launchtemplate gPoisonPowderParticleSpriteTemplate 0x82 0x6 0x0 0xffea 0x75 0x59 0x5 0x2 - launchtemplate gMagicPowderBluePowderTemplate 0x82 0x6 0x14 0xffea 0x75 0x70 0xfff8 0x2 - launchtemplate gPoisonPowderParticleSpriteTemplate 0x82 0x6 0x5 0xffea 0x75 0x50 0x5 0x1 + createsprite gMagicPowderBluePowderTemplate, ANIM_TARGET, 2, 0xfff6, 0xffea, 0x75, 0x50, 0xfffb, 0x1 + createsprite gPoisonPowderParticleSpriteTemplate, ANIM_TARGET, 2, 0x0, 0xffea, 0x75, 0x59, 0x5, 0x2 + createsprite gMagicPowderBluePowderTemplate, ANIM_TARGET, 2, 0x14, 0xffea, 0x75, 0x70, 0xfff8, 0x2 + createsprite gPoisonPowderParticleSpriteTemplate, ANIM_TARGET, 2, 0x5, 0xffea, 0x75, 0x50, 0x5, 0x1 waitforvisualfinish playsewithpan SE_M_SUPERSONIC, SOUND_PAN_TARGET - launchtask AnimTask_ScaleMonAndRestore 0x5 0x5 0xfffa 0xfffa 0xf 0x1 0x1 + createvisualtask AnimTask_ScaleMonAndRestore, 0x5, 0xfffa, 0xfffa, 0xf, 0x1, 0x1 waitforvisualfinish end @@ -13468,11 +13466,11 @@ Move_DRAGON_DARTS:: loadspritegfx ANIM_TAG_DREEPY loadspritegfx ANIM_TAG_EXPLOSION playsewithpan SE_FALL, SOUND_PAN_ATTACKER - launchtemplate gDreepyMissileTemplate 0x82, 0x3, 0x0 0x0 0x19 + createsprite gDreepyMissileTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x19 delay 0x19 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x10 0x1 - launchtemplate gExplosionSpriteTemplate, 0x83, 0x4 0x0 0x0 0x1 0x1 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x3, 0x0, 0x10, 0x1 + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, 0x1, 0x1 waitforvisualfinish end @@ -13494,16 +13492,16 @@ Move_OCTOLOCK:: loadspritegfx ANIM_TAG_TENDRILS createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_TENDRILS, 0, 12, 12, 0x3D98 @Pinkish Red loopsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET 0x6 0x4 - launchtemplate gConstrictBindingSpriteTemplate 0x84, 0x4, 0x0 0x10 0x0 0x2 + createsprite gConstrictBindingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x10, 0x0, 0x2 delay 0x7 - launchtemplate gConstrictBindingSpriteTemplate 0x83 0x4 0x0 0x0 0x0 0x2 - launchtemplate gConstrictBindingSpriteTemplate 0x82, 0x4, 0x0 0x8 0x1 0x2 + createsprite gConstrictBindingSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, 0x0, 0x2 + createsprite gConstrictBindingSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x8, 0x1, 0x2 delay 0x7 - launchtemplate gConstrictBindingSpriteTemplate 0x83 0x4 0x0 0xfff8 0x1 0x2 + createsprite gConstrictBindingSpriteTemplate, ANIM_TARGET, 3, 0x0, 0xfff8, 0x1, 0x2 delay 0x8 - launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x3 0x0 0x6 0x1 + createvisualtask AnimTask_ShakeMon2, 0x2, 0x1, 0x3, 0x0, 0x6, 0x1 delay 0x14 - launchtask AnimTask_BlendColorCycle 0x2 0x6 ANIM_PAL_DEF 0x2 0x2 0x0 0x8 0x1f + createvisualtask AnimTask_BlendColorCycle, 0x2, F_PAL_TARGET, 0x2, 0x2, 0x0, 0x8, 0x1f playsewithpan SE_M_BIND, SOUND_PAN_TARGET setarg 0x7 0xffff waitforvisualfinish @@ -13518,16 +13516,16 @@ Move_BOLT_BEAK:: createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_HORN_HIT, 0, 12, 12, 0x079D @Yellow call BoltBeakSparks waitforvisualfinish - launchtask AnimTask_BlendColorCycle 0x2 0x6 0x3 0xffe1 0x1 0x0 0x0 0x5bff + createvisualtask AnimTask_BlendColorCycle, 0x2, 0x3, 0xffe1, 0x1, 0x0, 0x0, 0x5bff createsprite gHorizontalLungeSpriteTemplate, 0x2, 0x2, 0x4, 0x4 delay 0x4 createsprite gHornHitSpriteTemplate, 0x84, 0x3, 0x8, 0x8, 0xa waitforvisualfinish createsprite gFlashingHitSplatSpriteTemplate, 0x83, 0x4, 0x0, 0x0, 0x1, 0x1 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET - launchtask AnimTask_ShakeMon 0x2 0x5 0x1 0x3 0x0 0x6 0x1 + createvisualtask AnimTask_ShakeMon, 0x2, 0x1, 0x3, 0x0, 0x6, 0x1 waitforvisualfinish - launchtask AnimTask_BlendColorCycle 0x2 0x6 0x4 0xffe1 0x2 0x0 0x6 0x5bff + createvisualtask AnimTask_BlendColorCycle, 0x2, 0x4, 0xffe1, 0x2, 0x0, 0x6, 0x5bff call ElectricityEffect waitforvisualfinish end @@ -13538,18 +13536,18 @@ BoltBeakSparks: createsprite gBoltBeakBlueSparkTemplate, 0x0, 0x7, 0x50, 0x18, 0x16, 0xc, 0x0, 0x1, 0x0 createsprite gSparkElectricitySpriteTemplate, 0x0, 0x7, 0x9c, 0x18, 0x79, 0xd, 0x0, 0x1, 0x1 delay 0x0 - launchtask AnimTask_BlendColorCycle 0x2 0x6 0x3 0xffe1 0x1 0x0 0x0 0x5bff + createvisualtask AnimTask_BlendColorCycle, 0x2, 0x3, 0xffe1, 0x1, 0x0, 0x0, 0x5bff delay 0xa - launchtask AnimTask_BlendColorCycle 0x2 0x6 0x3 0xffe1 0x1 0x5 0x5 0x5bff + createvisualtask AnimTask_BlendColorCycle, 0x2, 0x3, 0xffe1, 0x1, 0x5, 0x5, 0x5bff playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER createsprite gBoltBeakBlueSparkTemplate, 0x0, 0x7, 0x64, 0x18, 0x3c, 0xa, 0x0, 0x1, 0x0 createsprite gSparkElectricitySpriteTemplate, 0x0, 0x7, 0xaa, 0x18, 0x2a, 0xb, 0x0, 0x1, 0x1 delay 0x0 createsprite gBoltBeakBlueSparkTemplate, 0x0, 0x7, 0xee, 0x18, 0xa5, 0xa, 0x0, 0x1, 0x1 delay 0x0 - launchtask AnimTask_BlendColorCycle 0x2 0x6 0x3 0xffe1 0x1 0x0 0x0 0x76E1 + createvisualtask AnimTask_BlendColorCycle, 0x2, 0x3, 0xffe1, 0x1, 0x0, 0x0, 0x76E1 delay 0x14 - launchtask AnimTask_BlendColorCycle 0x2 0x6 0x3 0xffe1 0x1 0x4 0x4 0x76E1 + createvisualtask AnimTask_BlendColorCycle, 0x2, 0x3, 0xffe1, 0x1, 0x4, 0x4, 0x76E1 playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER createsprite gSparkElectricityFlashingSpriteTemplate, 0x4, 0x8, 0x0, 0x0, 0x20, 0xc, 0x0, 0x14, 0x0, 0x0 createsprite gBoltBeakBlueFlashingSparkTemplate, 0x4, 0x8, 0x0, 0x0, 0x20, 0xc, 0x40, 0x14, 0x1, 0x0 @@ -13567,53 +13565,53 @@ Move_FISHIOUS_REND:: loadspritegfx ANIM_TAG_SMALL_BUBBLES createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SHARP_TEETH, 0, 10, 10, 0x726A @Blue Teeth playsewithpan SE_M_WATERFALL, SOUND_PAN_TARGET - launchtemplate gFishiousRendTeethTemplate, 0x80, 0x2, 50, 4 - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x4 0x0 0xC 0x2 + createsprite gFishiousRendTeethTemplate, ANIM_TARGET, 0, 50, 4 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x4, 0x0, 0xC, 0x2 call FishousRendBubbles waitforvisualfinish end FishousRendBubbles: - launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0xF 0x0 - launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0xF 0x0 + createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0xF, 0x0 + createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0xF, 0x0 delay 0x2 - launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0xA 0x0 - launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0xA 0x0 + createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0xA, 0x0 + createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0xA, 0x0 delay 0x2 - launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0x5 0x0 - launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0x5 0x0 + createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0x5, 0x0 + createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0x5, 0x0 delay 0x2 - launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0x0 0x0 - launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0x0 0x0 + createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0x0, 0x0 + createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0x0, 0x0 delay 0x2 - launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0xfffb 0x0 - launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0xfffb 0x0 + createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0xfffb, 0x0 + createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0xfffb, 0x0 delay 0x2 - launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0xfff6 0x0 - launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0xfff6 0x0 + createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0xfff6, 0x0 + createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0xfff6, 0x0 delay 0x2 - launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0xfff1 0x0 - launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0xfff1 0x0 + createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0xfff1, 0x0 + createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0xfff1, 0x0 delay 0x2 - launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0xffec 0x0 - launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0xffec 0x0 + createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0xffec, 0x0 + createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0xffec, 0x0 delay 0x2 - launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0xfff1 0x0 - launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0xfff1 0x0 + createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0xfff1, 0x0 + createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0xfff1, 0x0 delay 0x2 - launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0xfff6 0x0 - launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0xfff6 0x0 + createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0xfff6, 0x0 + createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0xfff6, 0x0 delay 0x2 - launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0xfffb 0x0 - launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0xfffb 0x0 + createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0xfffb, 0x0 + createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0xfffb, 0x0 delay 0x2 - launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0x0 0x0 - launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0x0 0x0 + createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0x0, 0x0 + createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0x0, 0x0 delay 0x2 - launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0x5 0x0 - launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0x5 0x0 + createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0x5, 0x0 + createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0x5, 0x0 delay 0x2 - launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0xA 0x0 - launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0xA 0x0 + createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0xA, 0x0 + createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0xA, 0x0 return Move_COURT_CHANGE:: @@ -13625,7 +13623,7 @@ Move_CLANGOROUS_SOUL:: loadspritegfx ANIM_TAG_POISON_BUBBLE @purple loadspritegfx ANIM_TAG_AIR_WAVE_2 @white/grey loadspritegfx ANIM_TAG_SPARKLE_2 @stars - launchtask AnimTask_RockMonBackAndForth 0x5 0x3 0x0 0x2 0x0 + createvisualtask AnimTask_RockMonBackAndForth, 0x5, 0x0, 0x2, 0x0 call ClangorousSoulStarBuffEffect call ClangorousSoulStarBuffEffect call ClangorousSoulStarBuffEffect @@ -13638,21 +13636,21 @@ Move_CLANGOROUS_SOUL:: waitforvisualfinish loadspritegfx ANIM_TAG_THIN_RING @ring playsewithpan SE_SHINY, SOUND_PAN_ATTACKER - launchtemplate gClangorousSoulRedRingTemplate 0x3 0x4 0x0 0x0 0x0 0x0 + createsprite gClangorousSoulRedRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0 waitforvisualfinish end ClangorousSoulStarBuffEffect: playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER - launchtemplate gClangorousSoulBlueBuffTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2 + createsprite gClangorousSoulBlueBuffTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x1a, 0x2 delay 0x4 - launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1 + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xe, 0x1c, 0x1 delay 0x4 - launchtemplate gClangorousSoulPurpleBuffTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2 - launchtemplate gGrantingStarsSpriteTemplate 0x2 0x6 0xfff1 0x0 0x0 0x0 0x20 0x3c + createsprite gClangorousSoulPurpleBuffTemplate, ANIM_ATTACKER, 2, 0x0, 0xfffb, 0xa, 0x2 + createsprite gGrantingStarsSpriteTemplate, ANIM_ATTACKER, 2, 0xfff1, 0x0, 0x0, 0x0, 0x20, 0x3c delay 0x4 - launchtemplate gClangorousSoulWhiteBuffTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3 + createsprite gClangorousSoulWhiteBuffTemplate, ANIM_ATTACKER, 2, 0x0, 0x1c, 0x1a, 0x3 delay 0x4 - launchtemplate gGrantingStarsSpriteTemplate 0x2 0x6 0xc 0xfffb 0x0 0x0 0x20 0x3c + createsprite gGrantingStarsSpriteTemplate, ANIM_ATTACKER, 2, 0xc, 0xfffb, 0x0, 0x0, 0x20, 0x3c return Move_BODY_PRESS:: @@ -13660,15 +13658,15 @@ Move_BODY_PRESS:: loadspritegfx ANIM_TAG_GRAY_SMOKE @smoke createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ROUND_SHADOW, 0, 0xD, 0xD, 0x1E5D @Orange playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER - launchtemplate gVerticalDipSpriteTemplate 0x2 0x3 0x6 0x1 0x0 + createsprite gVerticalDipSpriteTemplate, ANIM_ATTACKER, 2, 0x6, 0x1, 0x0 delay 0x7 - launchtemplate gFlyBallUpSpriteTemplate 0x2 0x4 0x0 0x0 0xd 0x150 @Fly up + createsprite gFlyBallUpSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0xd, 0x150 @Fly up waitforvisualfinish delay 0x2F - launchtemplate gBounceBallLandSpriteTemplate 0x83 0x0 @Bounce down + createsprite gBounceBallLandSpriteTemplate, ANIM_TARGET, 3 @Bounce down delay 0x2 playsewithpan SE_M_MINIMIZE, SOUND_PAN_ATTACKER - launchtask AnimTask_SquishTarget 0x2 0x0 + createvisualtask AnimTask_SquishTarget, 0x2 waitforvisualfinish end @@ -13685,51 +13683,51 @@ Move_DRUM_BEATING:: splitbgprio ANIM_TARGET setalpha 12, 8 call BellyDrumRight - launchtemplate gSlowFlyingMusicNotesSpriteTemplate 0x2 0x4 0x0 0x0 0x0 0x0 + createsprite gSlowFlyingMusicNotesSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x0 playsewithpan SE_M_BELLY_DRUM, SOUND_PAN_ATTACKER delay 0xf call BellyDrumLeft - launchtemplate gSlowFlyingMusicNotesSpriteTemplate 0x2 0x4 0x1 0x1 0x1 0x0 + createsprite gSlowFlyingMusicNotesSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x1, 0x1, 0x0 playsewithpan SE_M_BELLY_DRUM, SOUND_PAN_ATTACKER delay 0xf call BellyDrumRight - launchtemplate gSlowFlyingMusicNotesSpriteTemplate 0x2 0x4 0x0 0x3 0x3 0x80 + createsprite gSlowFlyingMusicNotesSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x3, 0x3, 0x80 playsewithpan SE_M_BELLY_DRUM, SOUND_PAN_ATTACKER delay 0x7 call BellyDrumLeft - launchtemplate gSlowFlyingMusicNotesSpriteTemplate 0x2 0x4 0x1 0x2 0x0 0x80 + createsprite gSlowFlyingMusicNotesSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x2, 0x0, 0x80 playsewithpan SE_M_BELLY_DRUM, SOUND_PAN_ATTACKER delay 0x7 call BellyDrumRight - launchtemplate gSlowFlyingMusicNotesSpriteTemplate 0x2 0x4 0x0 0x1 0x1 0x0 + createsprite gSlowFlyingMusicNotesSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1, 0x1, 0x0 playsewithpan SE_M_BELLY_DRUM, SOUND_PAN_ATTACKER delay 0x7 call BellyDrumLeft - launchtemplate gSlowFlyingMusicNotesSpriteTemplate 0x2 0x4 0x1 0x0 0x3 0x0 + createsprite gSlowFlyingMusicNotesSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x0, 0x3, 0x0 playsewithpan SE_M_BELLY_DRUM, SOUND_PAN_ATTACKER - launchtemplate gFrenzyPlantRootSpriteTemplate 0x2 0x6 0x55 0x10 0x6 0x0 0x3 0x50 + createsprite gFrenzyPlantRootSpriteTemplate, ANIM_ATTACKER, 2, 0x55, 0x10, 0x6, 0x0, 0x3, 0x50 playsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET delay 0x5 - launchtemplate gFrenzyPlantRootSpriteTemplate 0x2 0x6 0x55 0xfff0 0xfffa 0x0 0x2 0x4b + createsprite gFrenzyPlantRootSpriteTemplate, ANIM_ATTACKER, 2, 0x55, 0xfff0, 0xfffa, 0x0, 0x2, 0x4b playsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET delay 0x5 - launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0xfff6 0xfff6 0x1 0x3 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0xfff6, 0xfff6, 0x1, 0x3 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET - launchtask AnimTask_ShakeMon 0x3 0x5 ANIM_TARGET 0x8 0x0 0x14 0x1 + createvisualtask AnimTask_ShakeMon, 0x3, ANIM_TARGET, 0x8, 0x0, 0x14, 0x1 delay 0x3 - launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0xa 0x8 0x1 0x3 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0xa, 0x8, 0x1, 0x3 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET delay 0x3 - launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0xa 0xfffd 0x1 0x2 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0xa, 0xfffd, 0x1, 0x2 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET delay 0x3 - launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0xfffd 0x1 0x1 0x2 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0xfffd, 0x1, 0x1, 0x2 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET delay 0x2 - launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0xfff6 0x1 0x1 0x1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0xfff6, 0x1, 0x1, 0x1 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET delay 0x2 - launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0xa 0x1 0x1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xa, 0x1, 0x1 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET waitforvisualfinish clearmonbg ANIM_TARGET @@ -13743,27 +13741,27 @@ Move_PYRO_BALL:: loadspritegfx ANIM_TAG_FLAT_ROCK loadspritegfx ANIM_TAG_SMALL_EMBER playsewithpan SE_LEDGE, SOUND_PAN_ATTACKER @;Hop - launchtemplate gPyroBallRockTemplate, 2, 0x3, 0, 0, 0 + createsprite gPyroBallRockTemplate, ANIM_ATTACKER, 2, 0, 0, 0 delay 0x19 playsewithpan SE_LEDGE, SOUND_PAN_ATTACKER @;Hop delay 0x19 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_TARGET - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x3 0x0 0x7 0x043D - launchtemplate gPyroBallBurningRockTemplate, 2, 0x3, 0, 0, 0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x3, 0x0, 0x7, 0x043D + createsprite gPyroBallBurningRockTemplate, ANIM_ATTACKER, 2, 0, 0, 0 delay 0x19 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_TARGET delay 0x19 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_TARGET - launchtemplate gPyroBallFlamesUpTemplate, 2, 0x3, 0, 0, 1 + createsprite gPyroBallFlamesUpTemplate, ANIM_ATTACKER, 2, 0, 0, 1 delay 0x19 playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_TARGET - launchtemplate gPyroBallEmberBallTemplate, 2, 0x6, 0, 10, 0, 5, 20, -20 + createsprite gPyroBallEmberBallTemplate, ANIM_ATTACKER, 2, 0, 10, 0, 5, 20, -20 waitforvisualfinish - launchtask AnimTask_BlendColorCycle 0x2 0x6 ANIM_PAL_DEF 0x2 0x2 0x0 0xc 0x1f - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0 0x3 0xf 0x1 + createvisualtask AnimTask_BlendColorCycle, 0x2, F_PAL_TARGET, 0x2, 0x2, 0x0, 0xc, 0x1f + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x0, 0x3, 0xf, 0x1 call FireSpreadEffect delay 0x20 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x7 0x0 0x043D + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x7, 0x0, 0x043D waitforvisualfinish end @@ -13783,39 +13781,39 @@ Move_AURA_WHEEL:: setalpha 12, 8 monbg ANIM_DEF_PARTNER splitbgprio_foes ANIM_TARGET - launchtemplate gAuraWheelBlueElectricityTemplate 3, 0x4 0x0 0x0 0x38 0x0 + createsprite gAuraWheelBlueElectricityTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x0 playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER delay 0x2 - launchtemplate gAuraWheelRedElectricityTemplate 3, 0x4 0x0 0x0 0x38 0x4 + createsprite gAuraWheelRedElectricityTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x4 playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER delay 0x2 - launchtemplate gAuraWheelBlueElectricityTemplate 3, 0x4 0x0 0x0 0x38 0x8 + createsprite gAuraWheelBlueElectricityTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x8 playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER delay 0x2 - launchtemplate gAuraWheelRedElectricityTemplate 3, 0x4 0x0 0x0 0x38 0xc + createsprite gAuraWheelRedElectricityTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0xc playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER delay 0x2 - launchtemplate gAuraWheelBlueElectricityTemplate 3, 0x4 0x0 0x0 0x38 0x10 + createsprite gAuraWheelBlueElectricityTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x10 playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER delay 0x2 - launchtemplate gAuraWheelRedElectricityTemplate 3, 0x4 0x0 0x0 0x38 0x14 + createsprite gAuraWheelRedElectricityTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x14 playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER delay 0x2 - launchtemplate gAuraWheelBlueElectricityTemplate 3, 0x4 0x0 0x0 0x38 0x18 + createsprite gAuraWheelBlueElectricityTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x18 playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER waitforvisualfinish - launchtemplate gSlideMonToOffsetSpriteTemplate 2, 0x5 0x0 0x18 0x0 0x0 0x6 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x18, 0x0, 0x0, 0x6 delay 0x4 playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x5 0x0 0x17 0x1 - launchtemplate gBasicHitSplatSpriteTemplate 0x4 0x4 0xfff6 0x0 0x1 0x0 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x5, 0x0, 0x17, 0x1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 4, 0xfff6, 0x0, 0x1, 0x0 createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SPARK_2, 2, 12, 0, 0x76E1 @Revert blue Electricity - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84, 0x8 0x0 0x0 0x30 0x2c 0x0 0x28 0x0 0x8003 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84, 0x8 0x0 0x0 0x30 0x2c 0x40 0x28 0x1 0x8003 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84, 0x8 0x0 0x0 0x30 0x2c 0x80 0x28 0x0 0x8003 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84, 0x8 0x0 0x0 0x30 0x2c 0xc0 0x28 0x2 0x8003 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x30, 0x2c, 0x0, 0x28, 0x0, 0x8003 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x30, 0x2c, 0x40, 0x28, 0x1, 0x8003 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x30, 0x2c, 0x80, 0x28, 0x0, 0x8003 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x30, 0x2c, 0xc0, 0x28, 0x2, 0x8003 delay 0x7 - launchtemplate gSlideMonToOriginalPosSpriteTemplate 2, 0x3 0x0 0x0 0x9 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x9 waitforvisualfinish clearmonbg ANIM_DEF_PARTNER blendoff @@ -13828,22 +13826,22 @@ Move_BREAKING_SWIPE:: createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SPARK_2, 0, 12, 12, 0x001F @Red monbg ANIM_TARGET setalpha 12, 8 - launchtemplate gBasicHitSplatSpriteTemplate 0x83 0x4 0xffe0 0xfff0 0x1 0x1 - launchtemplate gBreakingSwipeCenteredElectricity 0x82, 0x4, 0x5 0x0 0x5 0x0 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0xffe0, 0xfff0, 0x1, 0x1 + createsprite gBreakingSwipeCenteredElectricity, ANIM_TARGET, 2, 0x5, 0x0, 0x5, 0x0 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0 0x3 0x15 0x1 - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_DEF_PARTNER 0x0 0x3 0x15 0x1 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x0, 0x3, 0x15, 0x1 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_DEF_PARTNER, 0x0, 0x3, 0x15, 0x1 delay 0x4 - launchtemplate gRandomPosHitSplatSpriteTemplate 0x83 0x2 0x1 0x1 - launchtemplate gBreakingSwipeCenteredElectricity 0x82, 0x4, 0xfff1 0xfff6 0x5 0x0 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x1, 0x1 + createsprite gBreakingSwipeCenteredElectricity, ANIM_TARGET, 2, 0xfff1, 0xfff6, 0x5, 0x0 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 0x4 - launchtemplate gRandomPosHitSplatSpriteTemplate 0x83 0x2 0x1 0x1 - launchtemplate gBreakingSwipeCenteredElectricity 0x82, 0x4, 0xfff8 0x8 0x5 0x2 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x1, 0x1 + createsprite gBreakingSwipeCenteredElectricity, ANIM_TARGET, 2, 0xfff8, 0x8, 0x5, 0x2 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 0x4 - launchtemplate gBasicHitSplatSpriteTemplate 0x83 0x4 0x20 0x14 0x1 0x1 - launchtemplate gBreakingSwipeCenteredElectricity 0x82, 0x4, 0xffec 0xf 0x5 0x1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x20, 0x14, 0x1, 0x1 + createsprite gBreakingSwipeCenteredElectricity, ANIM_TARGET, 2, 0xffec, 0xf, 0x5, 0x1 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET waitsound waitforvisualfinish @@ -13855,10 +13853,10 @@ Move_BRANCH_POKE:: loadspritegfx ANIM_TAG_BRANCH loadspritegfx ANIM_TAG_IMPACT playsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER - launchtemplate gBranchPokeBranchTemplate, 0x82, 0x3 0x0 0x0 0x25 + createsprite gBranchPokeBranchTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x25 waitforvisualfinish - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x5 0x0 0x6 0x1 - launchtemplate gFlashingHitSplatSpriteTemplate, 0x83, 0x4 0x0 0x0 0x1 0x1 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x5, 0x0, 0x6, 0x1 + createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, 0x1, 0x1 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET waitforvisualfinish end @@ -13880,13 +13878,13 @@ Move_OVERDRIVE:: end OverdriveRings: playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_TARGET - launchtemplate gSimplePaletteBlendSpriteTemplate 0x2 0x5 0x1f 0x3 0x8 0x0 0x3ff - launchtask AnimTask_ScaleMonAndRestore 0x5 0x5 0xfffb 0xfffb 0x5 0x0 0x0 - launchtemplate gHyperVoiceRingSpriteTemplate 0x0 0x7 0x2d 0x0 0x0 0x0 0x0 0x0 0x1 - launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x1 0x0 0x6 0x1 - launchtask AnimTask_ShakeMon2 0x2 0x5 0x3 0x1 0x0 0x6 0x1 - launchtask AnimTask_ShakeBattleTerrain 0x2 0x4 0x1 0x0 0x6 0x1 - launchtask SoundTask_WaitForCry 0x5 0x0 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 0x1f, 0x3, 0x8, 0x0, 0x3ff + createvisualtask AnimTask_ScaleMonAndRestore, 0x5, 0xfffb, 0xfffb, 0x5, 0x0, 0x0 + createsprite gHyperVoiceRingSpriteTemplate, ANIM_ATTACKER, 0, 0x2d, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1 + createvisualtask AnimTask_ShakeMon2, 0x2, 0x1, 0x1, 0x0, 0x6, 0x1 + createvisualtask AnimTask_ShakeMon2, 0x2, 0x3, 0x1, 0x0, 0x6, 0x1 + createvisualtask AnimTask_ShakeBattleTerrain, 0x2, 0x1, 0x0, 0x6, 0x1 + createvisualtask SoundTask_WaitForCry, 0x5 return Move_APPLE_ACID:: @@ -13894,32 +13892,32 @@ Move_APPLE_ACID:: loadspritegfx ANIM_TAG_POISON_BUBBLE createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_POISON_BUBBLE, 0, 12, 12, 0x061D @Orange playsewithpan SE_M_METRONOME, SOUND_PAN_ATTACKER - launchtemplate gAppleAcidFloatingAppleTemplate 0xc 0x1 0x0 + createsprite gAppleAcidFloatingAppleTemplate, ANIM_ATTACKER, 12, 0x0 delay 0x30 monbg ANIM_TARGET - launchtemplate gAppleAcidLaunchTemplate 0x82, 0x6 0x14 0x0 0x28 0x1 0x0 0x0 + createsprite gAppleAcidLaunchTemplate, ANIM_TARGET, 2, 0x14, 0x0, 0x28, 0x1, 0x0, 0x0 playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER delay 0x5 - launchtemplate gAppleAcidLaunchTemplate 0x82, 0x6 0x14 0x0 0x28 0x1 0x18 0x0 + createsprite gAppleAcidLaunchTemplate, ANIM_TARGET, 2, 0x14, 0x0, 0x28, 0x1, 0x18, 0x0 playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER delay 0x5 - launchtemplate gAppleAcidLaunchTemplate 0x82, 0x6 0x14 0x0 0x28 0x1 0xffe8 0x0 + createsprite gAppleAcidLaunchTemplate, ANIM_TARGET, 2, 0x14, 0x0, 0x28, 0x1, 0xffe8, 0x0 playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER delay 0xf - launchtask AnimTask_ShakeMon2 0x5 0x5 ANIM_TARGET 0x2 0x0 0xa 0x1 - launchtemplate gAppleAcidDripTemplate 0x82, 0x5 0x0 0xffea 0x0 0xf 0x37 + createvisualtask AnimTask_ShakeMon2, 0x5, ANIM_TARGET, 0x2, 0x0, 0xa, 0x1 + createsprite gAppleAcidDripTemplate, ANIM_TARGET, 2, 0x0, 0xffea, 0x0, 0xf, 0x37 playsewithpan SE_M_BUBBLE, SOUND_PAN_TARGET delay 0xa - launchtemplate gAppleAcidDripTemplate 0x82, 0x5 0xffe6 0xffe8 0x0 0xf 0x37 + createsprite gAppleAcidDripTemplate, ANIM_TARGET, 2, 0xffe6, 0xffe8, 0x0, 0xf, 0x37 playsewithpan SE_M_BUBBLE, SOUND_PAN_TARGET delay 0xa - launchtemplate gAppleAcidDripTemplate 0x82, 0x5 0xf 0xffe5 0x0 0xf 0x32 + createsprite gAppleAcidDripTemplate, ANIM_TARGET, 2, 0xf, 0xffe5, 0x0, 0xf, 0x32 playsewithpan SE_M_BUBBLE, SOUND_PAN_TARGET delay 0xa - launchtemplate gAppleAcidDripTemplate 0x82, 0x5 0xfff1 0xffef 0x0 0xa 0x2d + createsprite gAppleAcidDripTemplate, ANIM_TARGET, 2, 0xfff1, 0xffef, 0x0, 0xa, 0x2d playsewithpan SE_M_BUBBLE, SOUND_PAN_TARGET delay 0xa - launchtemplate gAppleAcidDripTemplate 0x82, 0x5 0x1b 0xffea 0x0 0xf 0x32 + createsprite gAppleAcidDripTemplate, ANIM_TARGET, 2, 0x1b, 0xffea, 0x0, 0xf, 0x32 playsewithpan SE_M_BUBBLE, SOUND_PAN_TARGET waitforvisualfinish clearmonbg ANIM_TARGET @@ -13929,48 +13927,48 @@ Move_GRAV_APPLE:: loadspritegfx ANIM_TAG_APPLE fadetobg BG_IN_AIR waitbgfadeout - launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0 0xf800 0x0 0xffff + createvisualtask AnimTask_StartSlidingBg, 0x5, 0x0, 0xf800, 0x0, 0xffff waitbgfadein call SmallAppleShower call SmallAppleShower - launchtemplate gGravAppleLargeApple, 0x82, 0x4, 0x0, 0x3c, 4, ANIM_TARGET + createsprite gGravAppleLargeApple, ANIM_TARGET, 2, 0x0, 0x3c, 4, ANIM_TARGET delay 0x7 playsewithpan SE_M_STRENGTH, SOUND_PAN_TARGET - launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0 0x15 0x0 0x4 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0, 0x15, 0x0, 0x4 delay 0x30 - launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x10 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x10 waitforvisualfinish call UnsetPsychicBg end SmallAppleShower: - launchtemplate gGravAppleSmallApple, 0x82, 0x4, 35, 0x3c, 4, ANIM_TARGET + createsprite gGravAppleSmallApple, ANIM_TARGET, 2, 35, 0x3c, 4, ANIM_TARGET playsewithpan SE_FALL, SOUND_PAN_ATTACKER @;Falling sound delay 0x2 - launchtemplate gGravAppleSmallApple, 0x82, 0x4, -30, 0x44, 4, ANIM_TARGET + createsprite gGravAppleSmallApple, ANIM_TARGET, 2, -30, 0x44, 4, ANIM_TARGET playsewithpan SE_FALL, SOUND_PAN_ATTACKER @;Falling sound delay 0x2 - launchtemplate gGravAppleSmallApple, 0x82, 0x4, 27, 0x37, 4, ANIM_TARGET + createsprite gGravAppleSmallApple, ANIM_TARGET, 2, 27, 0x37, 4, ANIM_TARGET playsewithpan SE_FALL, SOUND_PAN_ATTACKER @;Falling sound delay 0x2 - launchtemplate gGravAppleSmallApple, 0x82, 0x4, -20, 0x32, 4, ANIM_TARGET + createsprite gGravAppleSmallApple, ANIM_TARGET, 2, -20, 0x32, 4, ANIM_TARGET playsewithpan SE_FALL, SOUND_PAN_ATTACKER @;Falling sound delay 0x2 - launchtemplate gGravAppleSmallApple, 0x82, 0x4, 33, 0x3a, 4, ANIM_TARGET + createsprite gGravAppleSmallApple, ANIM_TARGET, 2, 33, 0x3a, 4, ANIM_TARGET playsewithpan SE_FALL, SOUND_PAN_ATTACKER @;Falling sound delay 0x2 - launchtemplate gGravAppleSmallApple, 0x82, 0x4, -12, 0x3a, 4, ANIM_TARGET + createsprite gGravAppleSmallApple, ANIM_TARGET, 2, -12, 0x3a, 4, ANIM_TARGET playsewithpan SE_FALL, SOUND_PAN_ATTACKER @;Falling sound delay 0x2 - launchtemplate gGravAppleSmallApple, 0x82, 0x4, 19, 0x3c, 4, ANIM_TARGET + createsprite gGravAppleSmallApple, ANIM_TARGET, 2, 19, 0x3c, 4, ANIM_TARGET playsewithpan SE_FALL, SOUND_PAN_ATTACKER @;Falling sound delay 0x2 - launchtemplate gGravAppleSmallApple, 0x82, 0x4, -38, 0x3a, 4, ANIM_TARGET + createsprite gGravAppleSmallApple, ANIM_TARGET, 2, -38, 0x3a, 4, ANIM_TARGET playsewithpan SE_FALL, SOUND_PAN_ATTACKER @;Falling sound delay 0x2 - launchtemplate gGravAppleSmallApple, 0x82, 0x4, 5, 0x3c, 4, ANIM_TARGET + createsprite gGravAppleSmallApple, ANIM_TARGET, 2, 5, 0x3c, 4, ANIM_TARGET playsewithpan SE_FALL, SOUND_PAN_ATTACKER @;Falling sound delay 0x2 - launchtemplate gGravAppleSmallApple, 0x82, 0x4, -23, 0x28, 4, ANIM_TARGET + createsprite gGravAppleSmallApple, ANIM_TARGET, 2, -23, 0x28, 4, ANIM_TARGET playsewithpan SE_FALL, SOUND_PAN_ATTACKER @;Falling sound delay 0x2 return @@ -13989,7 +13987,7 @@ Move_STRANGE_STEAM:: call StrangeSteamCloud call StrangeSteamCloud call StrangeSteamCloud - launchtask AnimTask_ShakeMon2 0x2 0x5 ANIM_TARGET 0x2 0x0 0x2A 0x1 + createvisualtask AnimTask_ShakeMon2, 0x2, ANIM_TARGET, 0x2, 0x0, 0x2A, 0x1 call StrangeSteamCloud call StrangeSteamCloud call StrangeSteamCloud @@ -14015,23 +14013,23 @@ Move_LIFE_DEW:: loadspritegfx ANIM_TAG_WATER_DROPLET loadspritegfx ANIM_TAG_BLUE_STAR monbg ANIM_ATK_PARTNER - launchtemplate gLifeDewDropletTemplate, 2, 0x3, 0, 0, ANIM_ATTACKER - launchtemplate gLifeDewDropletTemplate, 2, 0x3, 0, 0, ANIM_ATK_PARTNER + createsprite gLifeDewDropletTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_ATTACKER + createsprite gLifeDewDropletTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_ATK_PARTNER delay 0x15 playsewithpan SE_M_BUBBLE, SOUND_PAN_ATTACKER waitforvisualfinish playsewithpan SE_M_ABSORB_2, SOUND_PAN_ATTACKER - launchtemplate gLifeDewSpecialOrbsTemplate, 2, 0x4, 0, -5, ANIM_ATTACKER, FALSE - launchtemplate gLifeDewSpecialOrbsTemplate, 2, 0x4, 0, -5, ANIM_ATK_PARTNER, FALSE + createsprite gLifeDewSpecialOrbsTemplate, ANIM_ATTACKER, 2, 0, -5, ANIM_ATTACKER, FALSE + createsprite gLifeDewSpecialOrbsTemplate, ANIM_ATTACKER, 2, 0, -5, ANIM_ATK_PARTNER, FALSE delay 0x7 - launchtemplate gLifeDewSpecialOrbsTemplate, 2, 0x4, -15, 10, ANIM_ATTACKER, FALSE - launchtemplate gLifeDewSpecialOrbsTemplate, 2, 0x4, -15, 10, ANIM_ATK_PARTNER, FALSE + createsprite gLifeDewSpecialOrbsTemplate, ANIM_ATTACKER, 2, -15, 10, ANIM_ATTACKER, FALSE + createsprite gLifeDewSpecialOrbsTemplate, ANIM_ATTACKER, 2, -15, 10, ANIM_ATK_PARTNER, FALSE delay 0x7 - launchtemplate gLifeDewSpecialOrbsTemplate, 2, 0x4, -15, -15, ANIM_ATTACKER, FALSE - launchtemplate gLifeDewSpecialOrbsTemplate, 2, 0x4, -15, -15, ANIM_ATK_PARTNER, FALSE + createsprite gLifeDewSpecialOrbsTemplate, ANIM_ATTACKER, 2, -15, -15, ANIM_ATTACKER, FALSE + createsprite gLifeDewSpecialOrbsTemplate, ANIM_ATTACKER, 2, -15, -15, ANIM_ATK_PARTNER, FALSE delay 0x7 - launchtemplate gLifeDewSpecialOrbsTemplate, 2, 0x4, 10, -5, ANIM_ATTACKER, FALSE - launchtemplate gLifeDewSpecialOrbsTemplate, 2, 0x4, 10, -5, ANIM_ATK_PARTNER, FALSE + createsprite gLifeDewSpecialOrbsTemplate, ANIM_ATTACKER, 2, 10, -5, ANIM_ATTACKER, FALSE + createsprite gLifeDewSpecialOrbsTemplate, ANIM_ATTACKER, 2, 10, -5, ANIM_ATK_PARTNER, FALSE delay 0x7 waitforvisualfinish clearmonbg ANIM_ATK_PARTNER @@ -14043,16 +14041,16 @@ Move_OBSTRUCT:: loadspritegfx ANIM_TAG_OBSTRUCT_CROSS createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_NOISE_LINE, 0, 10, 10, 0 @Black createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_PROTECT, 0, 10, 10, 0 @Black - launchtask SoundTask_PlayDoubleCry 0x2 0x2 ANIM_ATTACKER 0xff + createvisualtask SoundTask_PlayDoubleCry, 0x2, ANIM_ATTACKER, 0xff call RoarEffect waitforvisualfinish delay 0x10 monbg ANIM_ATK_PARTNER splitbgprio ANIM_ATTACKER waitplaysewithpan SE_M_REFLECT, SOUND_PAN_ATTACKER, 0x10 - launchtemplate gProtectSpriteTemplate, 2, 0x3 0x18 0x0 0x5a @;Protect + createsprite gProtectSpriteTemplate, ANIM_ATTACKER, 2, 0x18, 0x0, 0x5a @;Protect waitforvisualfinish - launchtemplate gObstructCrossTemplate, 2, 0x4 0x0 0x0 0x1 0x24 + createsprite gObstructCrossTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1, 0x24 playsewithpan SE_M_LEER, SOUND_PAN_TARGET waitforvisualfinish clearmonbg ANIM_ATK_PARTNER @@ -14066,38 +14064,38 @@ Move_METEOR_ASSAULT:: loadspritegfx ANIM_TAG_METEOR loadspritegfx ANIM_TAG_EXPLOSION createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ELECTRIC_ORBS, 0, 12, 12, 0x0B1D @Light orange - createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_ATK, 1, 0, 9, 0x0B1D @Light orange - launchtask AnimTask_ElectricChargingParticles 0x2 0x4 0x0 0x30 0x0 0x4 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 1, 0, 9, 0x0B1D @Light orange + createvisualtask AnimTask_ElectricChargingParticles, 0x2, 0x0, 0x30, 0x0, 0x4 playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER waitforvisualfinish invisible ANIM_ATTACKER - launchtemplate gGrowingSuperpowerTemplate, 0x83, 0x1 0x0 + createsprite gGrowingSuperpowerTemplate, ANIM_TARGET, 3, 0x0 playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER delay 0xF - createvisualtask AnimTask_BlendBattleAnimPal, 10, (ANIM_PAL_ATK | ANIM_PAL_BG), 1, 0x10, 0x10, 0x7FFF @Screen flash white - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0 0x5 0x20 0x1 + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_ATTACKER), 1, 0x10, 0x10, 0x7FFF @Screen flash white + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x0, 0x5, 0x20, 0x1 call BasicExplosion call BasicExplosion waitforvisualfinish visible ANIM_ATTACKER - createvisualtask AnimTask_BlendBattleAnimPal, 10, (ANIM_PAL_ATK | ANIM_PAL_BG), 1, 0x10, 0, 0x7FFF @Screen revert from white + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_ATTACKER), 1, 0x10, 0, 0x7FFF @Screen revert from white waitforvisualfinish end BasicExplosion: playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET - launchtemplate gExplosionSpriteTemplate, 0x83, 0x4 0x0 0x0 0x1 0x1 + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, 0x1, 0x1 delay 0x3 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET - launchtemplate gExplosionSpriteTemplate, 0x83, 0x4 0x18 0xffe8 0x1 0x1 + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0x18, 0xffe8, 0x1, 0x1 delay 0x3 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET - launchtemplate gExplosionSpriteTemplate, 0x83, 0x4 0xfff0 0x10 0x1 0x1 + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0xfff0, 0x10, 0x1, 0x1 delay 0x3 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET - launchtemplate gExplosionSpriteTemplate, 0x83, 0x4 0xffe8 0xfff4 0x1 0x1 + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0xffe8, 0xfff4, 0x1, 0x1 delay 0x3 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET - launchtemplate gExplosionSpriteTemplate, 0x83, 0x4 0x10 0x10 0x1 0x1 + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x10, 0x1, 0x1 return Move_ETERNA_BEAM:: @@ -14110,7 +14108,7 @@ Move_STEEL_BEAM:: delay 48 loadspritegfx ANIM_TAG_ELECTRIC_ORBS loadspritegfx ANIM_TAG_GUST - launchtask AnimTask_ElectricChargingParticles 0x2 0x4 0x0 0x14 0x0 0x2 + createvisualtask AnimTask_ElectricChargingParticles, 0x2, 0x0, 0x14, 0x0, 0x2 playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER delay 20 loadspritegfx ANIM_TAG_STEEL_BEAM @@ -14176,7 +14174,7 @@ Move_METEOR_BEAM:: end @to do: Move_SHELL_SIDE_ARM:: - launchtask AnimTask_ShellSideArm 0x5 0x0 + createvisualtask AnimTask_ShellSideArm, 0x5 jumpargeq 0x0, TRUE, Move_SHELL_SIDE_ARM_PHYSICAL jumpargeq 0x0, FALSE, Move_SHELL_SIDE_ARM_SPECIAL Move_SHELL_SIDE_ARM_PHYSICAL: @ Modified Body Slam, placeholder @@ -14211,13 +14209,13 @@ Move_SHELL_SIDE_ARM_SPECIAL: @ Modified Snipe Shot, placeholder createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_IMPACT_2, 0, 6, 6, RGB_MAGENTA createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_LEER, 0, 6, 6, RGB_MAGENTA playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER - launchtemplate gLeerSpriteTemplate 0x82, 2 0x18 -12 + createsprite gLeerSpriteTemplate, ANIM_TARGET, 2, 0x18, -12 waitforvisualfinish delay 0x20 playsewithpan SE_M_GIGA_DRAIN, SOUND_PAN_TARGET - launchtemplate gSnipeShotBallTemplate 0x82, 3, 0 0 24, + createsprite gSnipeShotBallTemplate, ANIM_TARGET, 2, 0, 0, 24 waitforvisualfinish - launchtask AnimTask_ShakeMon2 2 5 1 4 0 8, 1 + createvisualtask AnimTask_ShakeMon2, 2, 1, 4, 0, 8, 1 waitforvisualfinish end @@ -14235,7 +14233,7 @@ Move_TERRAIN_PULSE:: monbg ANIM_TARGET setalpha 12, 8 createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 0, 7, RGB_BLACK - launchtask AnimTask_TerrainPulse 0x5 0x0 + createvisualtask AnimTask_TerrainPulse, 0x5 jumpargeq 0x0, TYPE_ELECTRIC, TerrainPulseElectric jumpargeq 0x0, TYPE_GRASS, TerrainPulseGrass jumpargeq 0x0, TYPE_FAIRY, TerrainPulseFairy @@ -14339,19 +14337,19 @@ Move_POLTERGEIST:: createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 2, 0, 16, 0, RGB_BLACK playsewithpan SE_M_FAINT_ATTACK, SOUND_PAN_ATTACKER delay 0x1 - launchtask AnimTask_DestinyBondWhiteShadow 0x5 0x2 0x0 0x24 + createvisualtask AnimTask_DestinyBondWhiteShadow, 0x5, 0x0, 0x24 delay 0x30 playsewithpan SE_M_SAND_ATTACK, SOUND_PAN_TARGET createvisualtask AnimTask_PoltergeistItem, 2 waitforvisualfinish setalpha 12, 8 - launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x1 - launchtask AnimTask_ShakeMon 0x5 0x5 0x1 0x0 0x5 0x5 0x1 - launchtemplate gComplexPaletteBlendSpriteTemplate 0x2 0x7 0x7 0x5 0x1 0x0 0xa 0x0 0x0 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1, 0x1 + createvisualtask AnimTask_ShakeMon, 0x5, 0x1, 0x0, 0x5, 0x5, 0x1 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 0x7, 0x5, 0x1, 0x0, 0xa, 0x0, 0x0 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET waitforvisualfinish - launchtask AnimTask_NightmareClone 0x2 0x0 - launchtask AnimTask_ShakeMon 0x2 0x5 0x1 0x3 0x0 0x28 0x1 + createvisualtask AnimTask_NightmareClone, 0x2 + createvisualtask AnimTask_ShakeMon, 0x2, 0x1, 0x3, 0x0, 0x28, 0x1 playsewithpan SE_M_NIGHTMARE, SOUND_PAN_TARGET waitforvisualfinish restorebg @@ -16009,25 +16007,25 @@ Move_SPARK: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_SPARK_2 delay 0 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_BG | F_PAL_ATTACKER, -31, 1, 5, 5, RGB(31, 31, 22) + createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_BG | F_PAL_ATTACKER), -31, 1, 5, 5, RGB(31, 31, 22) playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 32, 24, 190, 12, ANIM_ATTACKER, 1, 0 delay 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 80, 24, 22, 12, ANIM_ATTACKER, 1, 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 156, 24, 121, 13, ANIM_ATTACKER, 1, 1 delay 0 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_BG | F_PAL_ATTACKER, -31, 1, 0, 0, RGB(31, 31, 22) + createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_BG | F_PAL_ATTACKER), -31, 1, 0, 0, RGB(31, 31, 22) delay 10 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_BG | F_PAL_ATTACKER, -31, 1, 5, 5, RGB(31, 31, 22) + createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_BG | F_PAL_ATTACKER), -31, 1, 5, 5, RGB(31, 31, 22) playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 100, 24, 60, 10, ANIM_ATTACKER, 1, 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 170, 24, 42, 11, ANIM_ATTACKER, 1, 1 delay 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 238, 24, 165, 10, ANIM_ATTACKER, 1, 1 delay 0 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_BG | F_PAL_ATTACKER, -31, 1, 0, 0, RGB(31, 31, 22) + createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_BG | F_PAL_ATTACKER), -31, 1, 0, 0, RGB(31, 31, 22) delay 20 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_BG | F_PAL_ATTACKER, -31, 1, 7, 7, RGB(31, 31, 22) + createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_BG | F_PAL_ATTACKER), -31, 1, 7, 7, RGB(31, 31, 22) playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 32, 12, 0, 20, 0, 0 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 32, 12, 64, 20, 1, 0 @@ -16039,7 +16037,7 @@ Move_SPARK: createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 16, 12, 224, 20, 2, 0 delay 4 waitforvisualfinish - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_BG | F_PAL_ATTACKER, -31, 1, 0, 0, RGB(31, 31, 22) + createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_BG | F_PAL_ATTACKER), -31, 1, 0, 0, RGB(31, 31, 22) createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 4 delay 4 playsewithpan SE_M_HYPER_BEAM, SOUND_PAN_TARGET @@ -16989,7 +16987,7 @@ SkyAttackSetUp: jumpretfalse SkyAttackSetUpAgainstOpponent goto SkyAttackSetUpAgainstPartner SkyAttackSetUpAgainstOpponent: - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG | F_PAL_ATK_SIDE | F_PAL_DEF_PARTNER, 1, 0, 12, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_ATK_SIDE | F_PAL_DEF_PARTNER), 1, 0, 12, RGB_BLACK waitforvisualfinish delay 12 createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 1, 8, 0, RGB_BLACK @@ -16999,7 +16997,7 @@ SkyAttackSetUpAgainstOpponent: delay 20 createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 1, 15, 0, RGB_WHITE waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG | F_PAL_ATK_PARTNER | F_PAL_DEF_PARTNER, 1, 8, 0, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_ATK_PARTNER | F_PAL_DEF_PARTNER), 1, 8, 0, RGB_BLACK waitforvisualfinish clearmonbg ANIM_DEF_PARTNER blendoff @@ -18221,7 +18219,7 @@ Move_AROMATHERAPY: createsprite gSparklingStarsSpriteTemplate, ANIM_ATTACKER, 16, 12, -5, 0, 0, 32, 60, 1 waitforvisualfinish playsewithpan SE_SHINY, SOUND_PAN_ATTACKER - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, F_PAL_BG | F_PAL_ATK_SIDE | F_PAL_ANIM_1, 3, 10, 0, RGB(13, 31, 12) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, (F_PAL_BG | F_PAL_ATK_SIDE | F_PAL_ANIM_1), 3, 10, 0, RGB(13, 31, 12) createsprite gBlendThinRingExpandingSpriteTemplate, ANIM_ATTACKER, 16, 0, 0, 0, 1 waitforvisualfinish end @@ -19328,14 +19326,14 @@ Move_DRAGON_RAGE: Move_RAIN_DANCE: loadspritegfx ANIM_TAG_RAIN_DROPS playsewithpan SE_M_RAIN_DANCE, SOUND_PAN_ATTACKER - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG | F_PAL_BATTLERS_2, 2, 0, 4, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS), 2, 0, 4, RGB_BLACK waitforvisualfinish createvisualtask AnimTask_CreateRaindrops, 2, 0, 3, 120 createvisualtask AnimTask_CreateRaindrops, 2, 0, 3, 120 delay 120 delay 30 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG | F_PAL_BATTLERS_2, 2, 4, 0, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS), 2, 4, 0, RGB_BLACK waitforvisualfinish end @@ -20768,7 +20766,7 @@ Move_SUNNY_DAY: loadspritegfx ANIM_TAG_SUNLIGHT monbg ANIM_ATK_PARTNER setalpha 13, 3 - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG | F_PAL_BATTLERS_2, 1, 0, 6, RGB_WHITE + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS), 1, 0, 6, RGB_WHITE waitforvisualfinish panse_adjustnone SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +1, 0 call SunnyDayLightRay @@ -20776,7 +20774,7 @@ Move_SUNNY_DAY: call SunnyDayLightRay call SunnyDayLightRay waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG | F_PAL_BATTLERS_2, 1, 6, 0, RGB_WHITE + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS), 1, 6, 0, RGB_WHITE waitforvisualfinish clearmonbg ANIM_ATK_PARTNER blendoff @@ -20992,9 +20990,9 @@ Move_HAZE: playsewithpan SE_M_HAZE, 0 createvisualtask AnimTask_HazeScrollingFog, 5 delay 30 - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BATTLERS_2, 2, 0, 16, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BATTLERS, 2, 0, 16, RGB_BLACK delay 90 - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BATTLERS_2, 1, 16, 0, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BATTLERS, 1, 16, 0, RGB_BLACK end Move_FIRE_PUNCH: @@ -21815,7 +21813,7 @@ Move_FAKE_OUT: Move_SCARY_FACE: loadspritegfx ANIM_TAG_EYE_SPARKLE - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_ATK_SIDE | F_PAL_DEF_PARTNER, 3, 0, 16, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, (F_PAL_BG | F_PAL_ATK_SIDE | F_PAL_DEF_PARTNER), 3, 0, 16, RGB_BLACK playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER waitforvisualfinish delay 10 @@ -21827,7 +21825,7 @@ Move_SCARY_FACE: waitforvisualfinish createvisualtask AnimTask_ShakeTargetInPattern, 3, 20, 1, FALSE playsewithpan SE_M_STRING_SHOT2, SOUND_PAN_TARGET - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_ATK_SIDE | F_PAL_DEF_PARTNER, 3, 16, 0, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, (F_PAL_BG | F_PAL_ATK_SIDE | F_PAL_DEF_PARTNER), 3, 16, 0, RGB_BLACK waitforvisualfinish end @@ -22153,7 +22151,7 @@ Move_ENCORE: loadspritegfx ANIM_TAG_SPOTLIGHT loadspritegfx ANIM_TAG_TAG_HAND createvisualtask AnimTask_CreateSpotlight, 2 - createvisualtask AnimTask_HardwarePaletteFade, 2, BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_TGT1_BD | BLDCNT_EFFECT_DARKEN, 3, 0, 10, FALSE + createvisualtask AnimTask_HardwarePaletteFade, 2, (BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_TGT1_BD | BLDCNT_EFFECT_DARKEN), 3, 0, 10, FALSE waitforvisualfinish createsprite gSpotlightSpriteTemplate, ANIM_TARGET, 2, 0, -8 createsprite gClappingHandSpriteTemplate, ANIM_ATTACKER, 2, -2, 0, 0, 0, 9 @@ -22164,7 +22162,7 @@ Move_ENCORE: createvisualtask SoundTask_PlaySE2WithPanning, 5, SE_M_ENCORE2, SOUND_PAN_TARGET createvisualtask AnimTask_SwayMon, 5, 1, 8, 1536, 5, ANIM_TARGET waitforvisualfinish - createvisualtask AnimTask_HardwarePaletteFade, 2, BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_TGT1_BD | BLDCNT_EFFECT_DARKEN, 3, 10, 0, TRUE + createvisualtask AnimTask_HardwarePaletteFade, 2, (BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_TGT1_BD | BLDCNT_EFFECT_DARKEN), 3, 10, 0, TRUE waitforvisualfinish createvisualtask AnimTask_RemoveSpotlight, 2 end @@ -22339,7 +22337,7 @@ Move_MORNING_SUN: loadspritegfx ANIM_TAG_BLUE_STAR createvisualtask AnimTask_MorningSunLightBeam, 5 delay 8 - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG | F_PAL_BATTLERS_2, 8, 0, 12, RGB_WHITE + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS), 8, 0, 12, RGB_WHITE delay 14 call MorningSunStar call MorningSunStar @@ -22356,7 +22354,7 @@ Move_MORNING_SUN: call MorningSunStar call MorningSunStar call MorningSunStar - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG | F_PAL_BATTLERS_2, 3, 12, 0, RGB_WHITE + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS), 3, 12, 0, RGB_WHITE waitforvisualfinish waitsound call HealingEffect @@ -22459,7 +22457,7 @@ Move_FLATTER: loadspritegfx ANIM_TAG_CONFETTI createvisualtask SoundTask_PlaySE2WithPanning, 5, SE_M_ENCORE2, SOUND_PAN_TARGET createvisualtask AnimTask_CreateSpotlight, 2 - createvisualtask AnimTask_HardwarePaletteFade, 2, BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_TGT1_BD | BLDCNT_EFFECT_DARKEN, 3, 0, 10, FALSE + createvisualtask AnimTask_HardwarePaletteFade, 2, (BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_TGT1_BD | BLDCNT_EFFECT_DARKEN), 3, 0, 10, FALSE waitforvisualfinish createsprite gFlatterSpotlightSpriteTemplate, ANIM_TARGET, 2, 0, -8, 80 delay 0 @@ -22490,7 +22488,7 @@ Move_FLATTER: delay 5 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_FLATTER, SOUND_PAN_TARGET waitforvisualfinish - createvisualtask AnimTask_HardwarePaletteFade, 2, BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_TGT1_BD | BLDCNT_EFFECT_DARKEN, 3, 10, 0, TRUE + createvisualtask AnimTask_HardwarePaletteFade, 2, (BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_TGT1_BD | BLDCNT_EFFECT_DARKEN), 3, 10, 0, TRUE waitforvisualfinish createvisualtask AnimTask_RemoveSpotlight, 2 end @@ -24588,13 +24586,13 @@ Status_Infestation: loadspritegfx ANIM_TAG_SMALL_BUBBLES @circle particles monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET - createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_DEF, 0x2, 0x0, 0x9, 0x7320 - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 30 0x1 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 0x2, 0x0, 0x9, 0x7320 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x3, 0x0, 30, 0x1 loopsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER, 0x0, 30 call InfestationVortex call InfestationVortex waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xA 0x5 ANIM_PAL_DEF 0x2 0x9 0x0 0x7320 + createvisualtask AnimTask_BlendBattleAnimPal, 0xA, F_PAL_TARGET, 0x2, 0x9, 0x0, 0x7320 waitforvisualfinish clearmonbg ANIM_DEF_PARTNER end @@ -24673,13 +24671,13 @@ General_HangedOn: General_Rain: loadspritegfx ANIM_TAG_RAIN_DROPS playsewithpan SE_M_RAIN_DANCE, SOUND_PAN_ATTACKER - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG | F_PAL_BATTLERS_2, 2, 0, 4, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS), 2, 0, 4, RGB_BLACK waitforvisualfinish createvisualtask AnimTask_CreateRaindrops, 2, 0, 3, 60 createvisualtask AnimTask_CreateRaindrops, 2, 0, 3, 60 delay 50 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG | F_PAL_BATTLERS_2, 2, 4, 0, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS), 2, 4, 0, RGB_BLACK waitforvisualfinish end @@ -24923,16 +24921,16 @@ General_ZMoveActivate: loadspritegfx ANIM_TAG_SWEAT_BEAD @blue color loadspritegfx ANIM_TAG_PAW_PRINT @yellow color monbg ANIM_ATTACKER - setblends 0x80c + setalpha 12, 8 fadetobg BG_ZMOVE_ACTIVATE waitbgfadein - launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0 0x0 0x0 0xFFFF + createvisualtask AnimTask_StartSlidingBg, 0x5, 0x0, 0x0, 0x0, 0xFFFF playsewithpan SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER - launchtask AnimTask_BlendColorCycle, 0x2, 0x6, ANIM_PAL_ATK, 0x0, 0x6, 0x0, 0xb, 0x76BC + createvisualtask AnimTask_BlendColorCycle, 0x2, F_PAL_ATTACKER, 0x0, 0x6, 0x0, 0xb, 0x76BC call ZMoveBuffEffect call ZMoveBuffEffect call ZMoveBuffEffect - launchtemplate gZMoveSymbolSpriteTemplate 0x29 0x4 0x0 0x0 0x0 0x0 + createsprite gZMoveSymbolSpriteTemplate, ANIM_ATTACKER, 41, 0x0, 0x0, 0x0, 0x0 call ZMoveBuffEffect call ZMoveBuffEffect waitforvisualfinish @@ -24941,13 +24939,13 @@ General_ZMoveActivate: clearmonbg ANIM_ATTACKER end ZMoveBuffEffect: - launchtemplate gBlueZMoveEnergySpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2 + createsprite gBlueZMoveEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x1a, 0x2 delay 0x3 - launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1 @Red Buff + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xe, 0x1c, 0x1 @Red Buff delay 0x3 - launchtemplate gGreenZMoveEnergySpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2 + createsprite gGreenZMoveEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfffb, 0xa, 0x2 delay 0x3 - launchtemplate gYellowZMoveEnergySpriteTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3 + createsprite gYellowZMoveEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1c, 0x1a, 0x3 delay 0x3 return @@ -24957,9 +24955,9 @@ General_TotemFlare:: loadspritegfx ANIM_TAG_SWEAT_BEAD @blue color loadspritegfx ANIM_TAG_PAW_PRINT @yellow color monbg ANIM_ATTACKER - setblends 0x80c + setalpha 12, 8 playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER - launchtask AnimTask_BlendColorCycle 0x2 0x6 ANIM_PAL_ATK 0x0 0x6 0x0 0xb 0x1f + createvisualtask AnimTask_BlendColorCycle, 0x2, F_PAL_ATTACKER, 0x0, 0x6, 0x0, 0xb, 0x1f call RainbowEndureEffect call RainbowEndureEffect call RainbowEndureEffect @@ -24971,13 +24969,13 @@ General_TotemFlare:: end RainbowEndureEffect: - launchtemplate gBlueEndureEnergySpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2 + createsprite gBlueEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x1a, 0x2 delay 0x3 - launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1 @Red Buff + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xe, 0x1c, 0x1 @Red Buff delay 0x3 - launchtemplate gGreenEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2 + createsprite gGreenEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfffb, 0xa, 0x2 delay 0x3 - launchtemplate gYellowEndureEnergySpriteTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3 + createsprite gYellowEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1c, 0x1a, 0x3 delay 0x3 return @@ -25007,7 +25005,7 @@ General_StrongWinds:: end General_PrimalReversion:: - launchtask AnimTask_PrimalReversion 0x5 0x0 + createvisualtask AnimTask_PrimalReversion, 0x5 jumpargeq 0x0, ITEM_RED_ORB, General_PrimalReversion_Omega jumpargeq 0x0, ITEM_BLUE_ORB, General_PrimalReversion_Alpha General_PrimalReversion_Alpha: @@ -25070,7 +25068,7 @@ General_AffectionHangedOn:: loopsewithpan SE_M_CHARM, SOUND_PAN_ATTACKER, 12, 3 createvisualtask AnimTask_SwayMon, 5, 0, 12, 4096, 4, ANIM_ATTACKER delay 15 - launchtask AnimTask_AffectionHangedOn 0x5 0x0 + createvisualtask AnimTask_AffectionHangedOn, 0x5 jumpargeq 0x0, FRIENDSHIP_100_TO_149, General_AffectionHangedOn_3Hearts jumpargeq 0x0, FRIENDSHIP_150_TO_199, General_AffectionHangedOn_4Hearts jumpargeq 0x0, FRIENDSHIP_200_TO_254, General_AffectionHangedOn_5Hearts @@ -25187,75 +25185,75 @@ Move_BREAKNECK_BLITZ:: loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_METEOR loadspritegfx ANIM_TAG_FLAT_ROCK - launchtask AnimTask_HorizontalShake 0x5 0x3 0x5 0x5 0x20 @ shake screen - launchtask AnimTask_HorizontalShake 0x5 0x3 0x4 0x5 0x20 @ shake banks + createvisualtask AnimTask_HorizontalShake, 0x5, 0x5, 0x5, 0x20 @ shake screen + createvisualtask AnimTask_HorizontalShake, 0x5, 0x4, 0x5, 0x20 @ shake banks playsewithpan SE_M_EARTHQUAKE, 0x0 monbg ANIM_ATTACKER splitbgprio ANIM_ATTACKER delay 0x1 - launchtask AnimTask_BlendPalInAndOutByTag, 0x5, 0x5, ANIM_TAG_HOLLOW_ORB, 0x4c00, 0xe, 0x0, 0x3 - launchtemplate gBreakneckBlitzDanceSpriteTemplate 0x2 0x1 0x0 - launchtemplate gBreakneckBlitzDanceSpriteTemplate 0x2 0x1 0x2b - launchtemplate gBreakneckBlitzDanceSpriteTemplate 0x2 0x1 0x55 - launchtemplate gBreakneckBlitzDanceSpriteTemplate 0x2 0x1 0x80 - launchtemplate gBreakneckBlitzDanceSpriteTemplate 0x2 0x1 0xaa - launchtemplate gBreakneckBlitzDanceSpriteTemplate 0x2 0x1 0xd5 + createvisualtask AnimTask_BlendPalInAndOutByTag, 0x5, ANIM_TAG_HOLLOW_ORB, 0x4c00, 0xe, 0x0, 0x3 + createsprite gBreakneckBlitzDanceSpriteTemplate, ANIM_ATTACKER, 2, 0x0 + createsprite gBreakneckBlitzDanceSpriteTemplate, ANIM_ATTACKER, 2, 0x2b + createsprite gBreakneckBlitzDanceSpriteTemplate, ANIM_ATTACKER, 2, 0x55 + createsprite gBreakneckBlitzDanceSpriteTemplate, ANIM_ATTACKER, 2, 0x80 + createsprite gBreakneckBlitzDanceSpriteTemplate, ANIM_ATTACKER, 2, 0xaa + createsprite gBreakneckBlitzDanceSpriteTemplate, ANIM_ATTACKER, 2, 0xd5 delay 0xf - launchtemplate gBreakneckBlitzDanceSpriteTemplate 0x2 0x1 0x0 - launchtemplate gBreakneckBlitzDanceSpriteTemplate 0x2 0x1 0x2b - launchtemplate gBreakneckBlitzDanceSpriteTemplate 0x2 0x1 0x55 - launchtemplate gBreakneckBlitzDanceSpriteTemplate 0x2 0x1 0x80 - launchtemplate gBreakneckBlitzDanceSpriteTemplate 0x2 0x1 0xaa - launchtemplate gBreakneckBlitzDanceSpriteTemplate 0x2 0x1 0xd5 + createsprite gBreakneckBlitzDanceSpriteTemplate, ANIM_ATTACKER, 2, 0x0 + createsprite gBreakneckBlitzDanceSpriteTemplate, ANIM_ATTACKER, 2, 0x2b + createsprite gBreakneckBlitzDanceSpriteTemplate, ANIM_ATTACKER, 2, 0x55 + createsprite gBreakneckBlitzDanceSpriteTemplate, ANIM_ATTACKER, 2, 0x80 + createsprite gBreakneckBlitzDanceSpriteTemplate, ANIM_ATTACKER, 2, 0xaa + createsprite gBreakneckBlitzDanceSpriteTemplate, ANIM_ATTACKER, 2, 0xd5 waitforvisualfinish clearmonbg ANIM_ATTACKER - launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish fadetobg BG_DRILL waitbgfadeout - launchtask AnimTask_StartSlidingBg 0x5 0x4 0xf700 0x300 0x1 0xffff + createvisualtask AnimTask_StartSlidingBg, 0x5, 0xf700, 0x300, 0x1, 0xffff waitbgfadein - setblends 0x80c + setalpha 12, 8 delay 0x10 - launchtask AnimTask_WindUpLunge 0x5 0x7 0x0 0xffe8 0x8 0x17 0xa 0x28 0xa + createvisualtask AnimTask_WindUpLunge, 0x5, 0x0, 0xffe8, 0x8, 0x17, 0xa, 0x28, 0xa delay 0x23 invisible ANIM_ATTACKER - launchtemplate gGrowingSuperpowerTemplate 0x83 0x1 0x0 + createsprite gGrowingSuperpowerTemplate, ANIM_TARGET, 3, 0x0 playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER delay 0x8 playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER - launchtemplate gBreakneckBlitzHitSpriteTemplate 0x83 0x4 0x0 0x0 0x1 0x1 @ 0, 0 + createsprite gBreakneckBlitzHitSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, 0x1, 0x1 @ 0, 0 delay 0x1 playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER - launchtemplate gBreakneckBlitzHitSpriteTemplate 0x83 0x4 0xa 0xfff6 0x1 0x1 @ +10, -10 + createsprite gBreakneckBlitzHitSpriteTemplate, ANIM_TARGET, 3, 0xa, 0xfff6, 0x1, 0x1 @ +10, -10 playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER delay 0x1 playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER - launchtemplate gBreakneckBlitzHitSpriteTemplate 0x83 0x4 0xf 0xfff1 0x1 0x1 @ +15, -15 + createsprite gBreakneckBlitzHitSpriteTemplate, ANIM_TARGET, 3, 0xf, 0xfff1, 0x1, 0x1 @ +15, -15 delay 0x1 playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER - launchtemplate gBreakneckBlitzHitSpriteTemplate 0x83 0x4 0x14 0xffec 0x1 0x1 @ +20, -20 + createsprite gBreakneckBlitzHitSpriteTemplate, ANIM_TARGET, 3, 0x14, 0xffec, 0x1, 0x1 @ +20, -20 delay 0x1 playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER - launchtemplate gBreakneckBlitzHitSpriteTemplate 0x83 0x4 0x19 0xffe7 0x1 0x1 @ +25, -25 - launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xffe6 0x10 0x1 0x4 + createsprite gBreakneckBlitzHitSpriteTemplate, ANIM_TARGET, 3, 0x19, 0xffe7, 0x1, 0x1 @ +25, -25 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0xffe6, 0x10, 0x1, 0x4 waitforvisualfinish - launchtask AnimTask_RotateMonSpriteToSide 0x2 0x4 0x8 0xfe00 0x1 0x0 - launchtask AnimTask_ShakeMonInPlace 0x2 0x5 0x0 0x4 0x0 0xc 0x1 - launchtask AnimTask_ShakeMonInPlace 0x2 0x5 0x1 0x4 0x0 0xc 0x1 + createvisualtask AnimTask_RotateMonSpriteToSide, 0x2, 0x8, 0xfe00, 0x1, 0x0 + createvisualtask AnimTask_ShakeMonInPlace, 0x2, 0x0, 0x4, 0x0, 0xc, 0x1 + createvisualtask AnimTask_ShakeMonInPlace, 0x2, 0x1, 0x4, 0x0, 0xc, 0x1 waitforvisualfinish delay 0x4 - launchtask AnimTask_RotateMonSpriteToSide 0x2 0x4 0x8 0xfe00 0x1 0x1 + createvisualtask AnimTask_RotateMonSpriteToSide, 0x2, 0x8, 0xfe00, 0x1, 0x1 delay 0xa delay 0x19 - launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x6 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x6 delay 0x2 - launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0x0 0x5 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x5 waitforvisualfinish delay 0x10 blendoff clearmonbg ANIM_DEF_PARTNER - launchtask AnimTask_AllBanksVisible 0xA 0x0 + createvisualtask AnimTask_AllBanksVisible, 0xA waitforvisualfinish call UnsetPsychicBg end @@ -25267,85 +25265,85 @@ Move_ALL_OUT_PUMMELING: loadspritegfx ANIM_TAG_METEOR loadspritegfx ANIM_TAG_FLAT_ROCK loadspritegfx ANIM_TAG_FOCUS_ENERGY - launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish call EndureEffect loopsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER 0x9 0x2 - launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xb 0x1f - launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1 + createvisualtask AnimTask_BlendColorCycle, 0x2, 0x2, 0x2, 0x2, 0x0, 0xb, 0x1f + createvisualtask AnimTask_ShakeMon2, 0x2, 0x0, 0x1, 0x0, 0x20, 0x1 call EndureEffect waitforvisualfinish fadetobg BG_ROCK_WRECKER waitbgfadeout - launchtask AnimTask_StartSlidingBg 0x5 0x4 0x800 0x0 0x0 0xffff + createvisualtask AnimTask_StartSlidingBg, 0x5, 0x800, 0x0, 0x0, 0xffff waitbgfadein - setblends 0x80c + setalpha 12, 8 monbg ANIM_DEF_PARTNER - launchtask AnimTask_ShakeMon 0x5 0x5 0x1 0x0 0x2 SOUND_PAN_TARGET 0x1 - launchtemplate gAllOutPummelingOnslaughtSpriteTemplate 0x2 0x8 0xffd0 0x18 0x0 0x0 0xa 0x1 ANIM_FOOT_1 0x1 + createvisualtask AnimTask_ShakeMon, 0x5, 0x1, 0x0, 0x2, SOUND_PAN_TARGET, 0x1 + createsprite gAllOutPummelingOnslaughtSpriteTemplate, ANIM_ATTACKER, 2, 0xffd0, 0x18, 0x0, 0x0, 0xa, 0x1, ANIM_FOOT_1, 0x1 delay 0x2 - launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1, 0x1 playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET delay 0x8 - launchtemplate gAllOutPummelingOnslaughtSpriteTemplate 0x2 0x8 0xfffa 0x12 0x0 0x0 0xa 0x1 ANIM_CHOP 0x1 + createsprite gAllOutPummelingOnslaughtSpriteTemplate, ANIM_ATTACKER, 2, 0xfffa, 0x12, 0x0, 0x0, 0xa, 0x1, ANIM_CHOP, 0x1 delay 0x2 - launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1, 0x1 playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET delay 0x8 - launchtemplate gAllOutPummelingOnslaughtSpriteTemplate 0x2 0x8 0xffc0 0x10 0x0 0x0 0xa 0x1 ANIM_FIST_1 0x1 + createsprite gAllOutPummelingOnslaughtSpriteTemplate, ANIM_ATTACKER, 2, 0xffc0, 0x10, 0x0, 0x0, 0xa, 0x1, ANIM_FIST_1, 0x1 delay 0x2 - launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1, 0x1 playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET delay 0x8 - launchtemplate gAllOutPummelingOnslaughtSpriteTemplate 0x2 0x8 0xffd0 0x15 0x0 0x0 0xa 0x1 ANIM_FOOT_2 0x1 + createsprite gAllOutPummelingOnslaughtSpriteTemplate, ANIM_ATTACKER, 2, 0xffd0, 0x15, 0x0, 0x0, 0xa, 0x1, ANIM_FOOT_2, 0x1 delay 0x2 - launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1, 0x1 playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET delay 0x8 - launchtemplate gAllOutPummelingOnslaughtSpriteTemplate 0x2 0x8 0xffd0 0x14 0x0 0x0 0xa 0x1 ANIM_FIST_1 0x1 + createsprite gAllOutPummelingOnslaughtSpriteTemplate, ANIM_ATTACKER, 2, 0xffd0, 0x14, 0x0, 0x0, 0xa, 0x1, ANIM_FIST_1, 0x1 delay 0x2 - launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1, 0x1 playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET delay 0x8 - launchtemplate gAllOutPummelingOnslaughtSpriteTemplate 0x2 0x8 0xffe0 0x17 0x0 0x0 0xa 0x1 ANIM_CHOP 0x1 + createsprite gAllOutPummelingOnslaughtSpriteTemplate, ANIM_ATTACKER, 2, 0xffe0, 0x17, 0x0, 0x0, 0xa, 0x1, ANIM_CHOP, 0x1 delay 0x2 - launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1, 0x1 playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET delay 0x8 - launchtemplate gAllOutPummelingOnslaughtSpriteTemplate 0x2 0x8 0xffc0 0x11 0x0 0x0 0xa 0x1 ANIM_FOOT_1 0x1 + createsprite gAllOutPummelingOnslaughtSpriteTemplate, ANIM_ATTACKER, 2, 0xffc0, 0x11, 0x0, 0x0, 0xa, 0x1, ANIM_FOOT_1, 0x1 delay 0x2 - launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1, 0x1 playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET delay 0x8 - launchtemplate gAllOutPummelingOnslaughtSpriteTemplate 0x2 0x8 0xffb0 0x10 0x0 0x0 0xa 0x1 ANIM_FOOT_2 0x1 + createsprite gAllOutPummelingOnslaughtSpriteTemplate, ANIM_ATTACKER, 2, 0xffb0, 0x10, 0x0, 0x0, 0xa, 0x1, ANIM_FOOT_2, 0x1 delay 0x2 - launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1, 0x1 playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET delay 0x8 - launchtemplate gAllOutPummelingOnslaughtSpriteTemplate 0x2 0x8 0xffa0 0x15 0x0 0x0 0xa 0x1 ANIM_CHOP 0x1 + createsprite gAllOutPummelingOnslaughtSpriteTemplate, ANIM_ATTACKER, 2, 0xffa0, 0x15, 0x0, 0x0, 0xa, 0x1, ANIM_CHOP, 0x1 delay 0x2 playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET - launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1, 0x1 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET delay 0x10 - launchtask AnimTask_WindUpLunge 0x5 0x7 0x0 0xffe8 0x8 0x17 0xa 0x28 0xa + createvisualtask AnimTask_WindUpLunge, 0x5, 0x0, 0xffe8, 0x8, 0x17, 0xa, 0x28, 0xa delay 0x23 invisible ANIM_ATTACKER - launchtemplate gGrowingSuperpowerTemplate 0x83 0x1 0x0 + createsprite gGrowingSuperpowerTemplate, ANIM_TARGET, 3, 0x0 playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER delay 0xc playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xffd0 0x0 0x0 0x4 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0xffd0, 0x0, 0x0, 0x4 waitforvisualfinish delay 0x30 - launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x7 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x7 delay 0x2 - launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0x0 0x5 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x5 waitforvisualfinish delay 0x10 blendoff clearmonbg ANIM_DEF_PARTNER - launchtask AnimTask_AllBanksVisible 0xA 0x0 + createvisualtask AnimTask_AllBanksVisible, 0xA waitforvisualfinish call UnsetPsychicBg end @@ -25357,13 +25355,13 @@ Move_SUPERSONIC_SKYSTRIKE: loadspritegfx ANIM_TAG_FOCUS_ENERGY @ focus energy loadspritegfx ANIM_TAG_BIRD @ sky attack bird loadspritegfx ANIM_TAG_IMPACT @ hit - launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish monbg ANIM_DEF_PARTNER - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x1 0x8 0x0 0x0 - launchtask AnimTask_HorizontalShake 0x5 0x3 0x0 0x2 0x10 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x1, 0x8, 0x0, 0x0 + createvisualtask AnimTask_HorizontalShake, 0x5, 0x0, 0x2, 0x10 playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x1 0xf 0x0 0x7fff + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x1, 0xf, 0x0, 0x7fff clearmonbg ANIM_DEF_PARTNER call EndureEffect delay 0x8 @@ -25371,14 +25369,14 @@ Move_SUPERSONIC_SKYSTRIKE: delay 0x20 delay 0xA playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER - launchtemplate gFlyBallUpSpriteTemplate 0x2 0x4 0x0 0x0 0xd 0x150 + createsprite gFlyBallUpSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0xd, 0x150 delay 0x2 - launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x0 0xc 0x4 0xfff0 0x12 - launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x0 0x10 0x4 0xfff6 0x12 - launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x1 0xe 0x4 0xffee 0x12 - launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x1 0xc 0x4 0xfff0 0x12 + createsprite gDirtPlumeSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0xc, 0x4, 0xfff0, 0x12 + createsprite gDirtPlumeSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x10, 0x4, 0xfff6, 0x12 + createsprite gDirtPlumeSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1, 0xe, 0x4, 0xffee, 0x12 + createsprite gDirtPlumeSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1, 0xc, 0x4, 0xfff0, 0x12 delay 0x30 - launchtask AnimTask_DoomDesireLightBeam 0x5 0x0 + createvisualtask AnimTask_DoomDesireLightBeam, 0x5 delay 0x9 playsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER delay 0x9 @@ -25388,37 +25386,37 @@ Move_SUPERSONIC_SKYSTRIKE: delay 0x19 fadetobg BG_SKY waitbgfadeout - launchtask AnimTask_IsTargetPlayerSide 0x2 0x0 + createvisualtask AnimTask_IsTargetPlayerSide, 0x2 jumpargeq 0x7 0x1 SupersonicSkystrikeOnPlayer SupersonicSkystrikeOnOpponent: - launchtask AnimTask_StartSlidingBg 0x5 0x4 0xf800 0x800 0x0 0xffff + createvisualtask AnimTask_StartSlidingBg, 0x5, 0xf800, 0x800, 0x0, 0xffff goto FinishSupersonicSkystrike SupersonicSkystrikeOnPlayer: - launchtask AnimTask_StartSlidingBg 0x5 0x4 0x800 0xf800 0x0 0xffff + createvisualtask AnimTask_StartSlidingBg, 0x5, 0x800, 0xf800, 0x0, 0xffff FinishSupersonicSkystrike: waitbgfadein waitforvisualfinish monbg ANIM_DEF_PARTNER - setblends 0x80c + setalpha 12, 8 playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER - launchtemplate gSupersonicSkystrikeFlySpriteTemplate 0x2 0x1 0x14 + createsprite gSupersonicSkystrikeFlySpriteTemplate, ANIM_ATTACKER, 2, 0x14 delay 0x10 - launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x0 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1, 0x0 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xff00 0x15 0x0 0x4 - launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 ANIM_TARGET 0x0 0xc 0xffe8 0xfff0 0x18 @ 12, -48, -16, 24 - launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 ANIM_TARGET 0x0 0x10 0xffda 0xfff6 0x18 @ 16, -16, -10, 24 - launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 ANIM_TARGET 0x1 0xe 0xffec 0xffee 0x18 @ 14, -52, -18, 24 - launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 ANIM_TARGET 0x1 0xc 0xffdc 0xfff0 0x18 @ 12, -32, -16, 24 - launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 ANIM_TARGET 0x0 0xc 0xffd0 0xfff0 0x18 @ 12, -24, -16, 24 - launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 ANIM_TARGET 0x0 0x10 0xfff0 0xfff6 0x18 @ 16, -38, -10, 24 - launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 ANIM_TARGET 0x1 0xe 0xffcc 0xffee 0x18 @ 14, -20, -18, 24 - launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 ANIM_TARGET 0x1 0xc 0xffe0 0xfff0 0x18 @ 12, -36, -16, 24 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0xff00, 0x15, 0x0, 0x4 + createsprite gDirtPlumeSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x0, 0xc, 0xffe8, 0xfff0, 0x18 @ 12, -48, -16, 24 + createsprite gDirtPlumeSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x0, 0x10, 0xffda, 0xfff6, 0x18 @ 16, -16, -10, 24 + createsprite gDirtPlumeSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x1, 0xe, 0xffec, 0xffee, 0x18 @ 14, -52, -18, 24 + createsprite gDirtPlumeSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x1, 0xc, 0xffdc, 0xfff0, 0x18 @ 12, -32, -16, 24 + createsprite gDirtPlumeSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x0, 0xc, 0xffd0, 0xfff0, 0x18 @ 12, -24, -16, 24 + createsprite gDirtPlumeSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x0, 0x10, 0xfff0, 0xfff6, 0x18 @ 16, -38, -10, 24 + createsprite gDirtPlumeSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x1, 0xe, 0xffcc, 0xffee, 0x18 @ 14, -20, -18, 24 + createsprite gDirtPlumeSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x1, 0xc, 0xffe0, 0xfff0, 0x18 @ 12, -36, -16, 24 delay 0x30 clearmonbg ANIM_DEF_PARTNER blendoff - launchtask AnimTask_AllBanksVisible 0xA 0x0 - launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x10 + createvisualtask AnimTask_AllBanksVisible, 0xA + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x10 call UnsetPsychicBg waitforvisualfinish end @@ -25430,82 +25428,82 @@ Move_ACID_DOWNPOUR: loadspritegfx ANIM_TAG_POISON_BUBBLE @ poison bubbles fadetobg BG_POISON waitbgfadeout - launchtask AnimTask_IsTargetPlayerSide 0x2 0x0 + createvisualtask AnimTask_IsTargetPlayerSide, 0x2 jumpargeq 0x7 0x1 AcidDownpourOnPlayer AcidDownpourOnOpponent: - launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0 0xff10 0x1 0xffff + createvisualtask AnimTask_StartSlidingBg, 0x5, 0x0, 0xff10, 0x1, 0xffff goto FinishAcidDownpour AcidDownpourOnPlayer: - launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0 0xf0 0x1 0xffff + createvisualtask AnimTask_StartSlidingBg, 0x5, 0x0, 0xf0, 0x1, 0xffff FinishAcidDownpour: waitbgfadein - setblends 0x80c + setalpha 12, 8 monbg ANIM_ATTACKER loopsewithpan SE_M_TOXIC, SOUND_PAN_TARGET, 0xd, 0x6 - launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_ATTACKER 0x0 0x2 0x32 0x1 + createvisualtask AnimTask_ShakeMon, 0x5, ANIM_ATTACKER, 0x0, 0x2, 0x32, 0x1 call AcidDownpourFlareOnAttacker call AcidDownpourFlareOnAttacker call AcidDownpourFlareOnAttacker delay 0x5 clearmonbg ANIM_ATTACKER - launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish blendoff delay 0x20 loopsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET, 0xd, 0x3 - launchtemplate gAcidDownpourReversalSpriteTemplate 0x2 0x2 0x1a 0x0 - launchtemplate gAcidDownpourReversalSpriteTemplate 0x2 0x2 0x1a 0x2a - launchtemplate gAcidDownpourReversalSpriteTemplate 0x2 0x2 0x1a 0x54 - launchtemplate gAcidDownpourReversalSpriteTemplate 0x2 0x2 0x1a 0x7e - launchtemplate gAcidDownpourReversalSpriteTemplate 0x2 0x2 0x1a 0xa8 - launchtemplate gAcidDownpourReversalSpriteTemplate 0x2 0x2 0x1a 0xd2 + createsprite gAcidDownpourReversalSpriteTemplate, ANIM_ATTACKER, 2, 0x1a, 0x0 + createsprite gAcidDownpourReversalSpriteTemplate, ANIM_ATTACKER, 2, 0x1a, 0x2a + createsprite gAcidDownpourReversalSpriteTemplate, ANIM_ATTACKER, 2, 0x1a, 0x54 + createsprite gAcidDownpourReversalSpriteTemplate, ANIM_ATTACKER, 2, 0x1a, 0x7e + createsprite gAcidDownpourReversalSpriteTemplate, ANIM_ATTACKER, 2, 0x1a, 0xa8 + createsprite gAcidDownpourReversalSpriteTemplate, ANIM_ATTACKER, 2, 0x1a, 0xd2 delay 0x20 panse SE_M_WHIRLPOOL, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0 - launchtask AnimTask_CreateSurfWave 0x2 0x1 ANIM_SURF_PAL_SLUDGE_WAVE - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 0x4 0x2 0x0 0x7 0xd87c - launchtask AnimTask_ShakeMon 0x5 0x5 0x1 0x0 0x2 0x32 0x1 + createvisualtask AnimTask_CreateSurfWave, 0x2, ANIM_SURF_PAL_SLUDGE_WAVE + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, 0x4, 0x2, 0x0, 0x7, 0xd87c + createvisualtask AnimTask_ShakeMon, 0x5, 0x1, 0x0, 0x2, 0x32, 0x1 call AcidDownpourFlare call AcidDownpourFlare delay 0x15 - launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xfd00 0x15 0x0 0x2a + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0xfd00, 0x15, 0x0, 0x2a delay 0x2c - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 0x4 0x2 0x7 0x0 0xd87c + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, 0x4, 0x2, 0x7, 0x0, 0xd87c invisible ANIM_TARGET waitforvisualfinish - launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x10 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x10 restorebg waitbgfadeout setarg 0x7 0xffff - launchtask AnimTask_AllBanksVisible 0xA 0x0 + createvisualtask AnimTask_AllBanksVisible, 0xA waitbgfadein waitforvisualfinish end AcidDownpourFlare: - launchtemplate gAcidDownpourAuraSpriteTemplate 0x82 0x7 0x0 0x1c 0x180 0x32 0x8 0x32 ANIM_TARGET + createsprite gAcidDownpourAuraSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x180, 0x32, 0x8, 0x32, ANIM_TARGET delay 0x2 - launchtemplate gAcidDownpourAuraSpriteTemplate 0x82 0x7 0x0 0x20 0xf0 0x28 0xb 0xffd2 ANIM_TARGET + createsprite gAcidDownpourAuraSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x20, 0xf0, 0x28, 0xb, 0xffd2, ANIM_TARGET delay 0x2 - launchtemplate gAcidDownpourAuraSpriteTemplate 0x82 0x7 0x0 0x21 0x1a0 0x28 0x4 0x2a ANIM_TARGET + createsprite gAcidDownpourAuraSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1a0, 0x28, 0x4, 0x2a, ANIM_TARGET delay 0x2 - launchtemplate gAcidDownpourAuraSpriteTemplate 0x82 0x7 0x0 0x1f 0x120 0x2d 0x6 0xffd6 ANIM_TARGET + createsprite gAcidDownpourAuraSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1f, 0x120, 0x2d, 0x6, 0xffd6, ANIM_TARGET delay 0x2 - launchtemplate gAcidDownpourAuraSpriteTemplate 0x82 0x7 0x0 0x1c 0x1c0 0x2d 0xb 0x2e ANIM_TARGET + createsprite gAcidDownpourAuraSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x1c0, 0x2d, 0xb, 0x2e, ANIM_TARGET delay 0x2 - launchtemplate gAcidDownpourAuraSpriteTemplate 0x82 0x7 0x0 0x21 0x1d0 0x32 0xa 0xffce ANIM_TARGET + createsprite gAcidDownpourAuraSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1d0, 0x32, 0xa, 0xffce, ANIM_TARGET delay 0x2 return AcidDownpourFlareOnAttacker: - launchtemplate gAcidDownpourAuraSpriteTemplate 0x82 0x7 0x0 0x1c 0x210 0x1e 0xd 0x32 ANIM_ATTACKER + createsprite gAcidDownpourAuraSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x210, 0x1e, 0xd, 0x32, ANIM_ATTACKER delay 0x2 - launchtemplate gAcidDownpourAuraSpriteTemplate 0x82 0x7 0x0 0x20 0x1e0 0x14 0x10 0xffd2 ANIM_ATTACKER + createsprite gAcidDownpourAuraSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x20, 0x1e0, 0x14, 0x10, 0xffd2, ANIM_ATTACKER delay 0x2 - launchtemplate gAcidDownpourAuraSpriteTemplate 0x82 0x7 0x0 0x21 0x240 0x14 0x8 0x2a ANIM_ATTACKER + createsprite gAcidDownpourAuraSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x240, 0x14, 0x8, 0x2a, ANIM_ATTACKER delay 0x2 - launchtemplate gAcidDownpourAuraSpriteTemplate 0x82 0x7 0x0 0x1f 0x190 0x19 0xb 0xffd6 ANIM_ATTACKER + createsprite gAcidDownpourAuraSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1f, 0x190, 0x19, 0xb, 0xffd6, ANIM_ATTACKER delay 0x2 - launchtemplate gAcidDownpourAuraSpriteTemplate 0x82 0x7 0x0 0x1c 0x200 0x19 0x10 0x2e ANIM_ATTACKER + createsprite gAcidDownpourAuraSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x200, 0x19, 0x10, 0x2e, ANIM_ATTACKER delay 0x2 - launchtemplate gAcidDownpourAuraSpriteTemplate 0x82 0x7 0x0 0x21 0x1d0 0x1e 0xf 0xffce ANIM_ATTACKER + createsprite gAcidDownpourAuraSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1d0, 0x1e, 0xf, 0xffce, ANIM_ATTACKER delay 0x2 return @@ -25515,36 +25513,36 @@ Move_TECTONIC_RAGE: loadspritegfx ANIM_TAG_MUD_SAND @ rollout small rocks loadspritegfx ANIM_TAG_ROCKS @ rollout loadspritegfx ANIM_TAG_IMPACT @ hit - launchtemplate gDirtMoundSpriteTemplate 0x1 0x3 0x0 0x0 0xb4 - launchtemplate gDirtMoundSpriteTemplate 0x1 0x3 0x0 0x1 0xb4 + createsprite gDirtMoundSpriteTemplate, ANIM_ATTACKER, 1, 0x0, 0x0, 0xb4 + createsprite gDirtMoundSpriteTemplate, ANIM_ATTACKER, 1, 0x0, 0x1, 0xb4 monbg_static ANIM_ATTACKER delay 0x1 - launchtask AnimTask_DigDownMovement 0x2 0x1 0x0 + createvisualtask AnimTask_DigDownMovement, 0x2, 0x0 delay 0x6 call DigThrowDirt call DigThrowDirt call DigThrowDirt call DigThrowDirt - launchtask AnimTask_TectonicRageRollout 0x2 0x0 + createvisualtask AnimTask_TectonicRageRollout, 0x2 call DigThrowDirt - setblends 0x80c + setalpha 12, 8 delay 0x20 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER monbg ANIM_TARGET - launchtemplate gBasicHitSplatSpriteTemplate 0x4 0x4 0x0 0x0 0x1 0x2 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 4, 0x0, 0x0, 0x1, 0x2 delay 0x1 - launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xff00 0x15 0x0 0x4 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0xff00, 0x15, 0x0, 0x4 delay 0xa waitforvisualfinish clearmonbg ANIM_TARGET - launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish invisible ANIM_TARGET delay 0x5 invisible ANIM_ATTACKER waitforvisualfinish delay 0xa - launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x10 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x10 fadetobg BG_TECTONIC_RAGE @ brown/yellow sky uppercut unloadspritegfx ANIM_TAG_DIRT_MOUND @ dig unloadspritegfx ANIM_TAG_MUD_SAND @ rollout small rocks @@ -25555,73 +25553,73 @@ Move_TECTONIC_RAGE: loadspritegfx ANIM_TAG_EXPLOSION_2 @ explosion waitbgfadeout visible ANIM_TARGET - launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0 0xf800 0x0 0xffff + createvisualtask AnimTask_StartSlidingBg, 0x5, 0x0, 0xf800, 0x0, 0xffff waitbgfadein playsewithpan SE_FALL, SOUND_PAN_ATTACKER @;Falling sound delay 0x1e - launchtemplate gEruptionFallingRockSpriteTemplate 0x28 0x5 0xc8 0xffe0 0x0 0x64 0x0 - launchtemplate gEruptionFallingRockSpriteTemplate 0x28 0x5 0x1e 0xffe0 0x10 0x5a 0x1 - launchtemplate gEruptionFallingRockSpriteTemplate 0x28 0x5 0x96 0xffe0 0x20 0x3c 0x2 - launchtemplate gEruptionFallingRockSpriteTemplate 0x28 0x5 0x5a 0xffe0 0x30 0x50 0x3 - launchtemplate gEruptionFallingRockSpriteTemplate 0x28 0x5 0x6e 0xffe0 0x40 0x32 0x0 - launchtemplate gEruptionFallingRockSpriteTemplate 0x28 0x5 0x3c 0xffe0 0x50 0x46 0x1 + createsprite gEruptionFallingRockSpriteTemplate, ANIM_ATTACKER, 40, 0xc8, 0xffe0, 0x0, 0x64, 0x0 + createsprite gEruptionFallingRockSpriteTemplate, ANIM_ATTACKER, 40, 0x1e, 0xffe0, 0x10, 0x5a, 0x1 + createsprite gEruptionFallingRockSpriteTemplate, ANIM_ATTACKER, 40, 0x96, 0xffe0, 0x20, 0x3c, 0x2 + createsprite gEruptionFallingRockSpriteTemplate, ANIM_ATTACKER, 40, 0x5a, 0xffe0, 0x30, 0x50, 0x3 + createsprite gEruptionFallingRockSpriteTemplate, ANIM_ATTACKER, 40, 0x6e, 0xffe0, 0x40, 0x32, 0x0 + createsprite gEruptionFallingRockSpriteTemplate, ANIM_ATTACKER, 40, 0x3c, 0xffe0, 0x50, 0x46, 0x1 delay 0x16 - launchtask AnimTask_HorizontalShake 0x5 0x3 0x5 0x8 0x3c - launchtask AnimTask_HorizontalShake 0x5 0x3 0x4 0x8 0x3c + createvisualtask AnimTask_HorizontalShake, 0x5, 0x5, 0x8, 0x3c + createvisualtask AnimTask_HorizontalShake, 0x5, 0x4, 0x8, 0x3c loopsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET, 0x10, 0xc delay 0x30 call TectonicRageExplosion playsewithpan SE_M_SACRED_FIRE, SOUND_PAN_ATTACKER - launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x2 0x6 0xffe0 0x0 0x18 0x0 0x0 0x0 - launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x2 0x6 0xffec 0xfff6 0x18 0x0 0x0 0x0 - launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x42 0x6 0x0 0xfff0 0x18 0x0 0x0 0x0 - launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x42 0x6 0x14 0xfff6 0x18 0x0 0x0 0x0 - launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x42 0x6 0x20 0x0 0x18 0x0 0x0 0x0 - launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x42 0x6 0x14 0xa 0x18 0x0 0x0 0x0 - launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x2 0x6 0x0 0x10 0x18 0x0 0x0 0x0 - launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x2 0x6 0xffec 0xa 0x18 0x0 0x0 0x0 + createsprite gTectonicRageBlastBurnSpriteTemplate, ANIM_ATTACKER, 2, 0xffe0, 0x0, 0x18, 0x0, 0x0, 0x0 + createsprite gTectonicRageBlastBurnSpriteTemplate, ANIM_ATTACKER, 2, 0xffec, 0xfff6, 0x18, 0x0, 0x0, 0x0 + createsprite gTectonicRageBlastBurnSpriteTemplate, ANIM_ATTACKER, 66, 0x0, 0xfff0, 0x18, 0x0, 0x0, 0x0 + createsprite gTectonicRageBlastBurnSpriteTemplate, ANIM_ATTACKER, 66, 0x14, 0xfff6, 0x18, 0x0, 0x0, 0x0 + createsprite gTectonicRageBlastBurnSpriteTemplate, ANIM_ATTACKER, 66, 0x20, 0x0, 0x18, 0x0, 0x0, 0x0 + createsprite gTectonicRageBlastBurnSpriteTemplate, ANIM_ATTACKER, 66, 0x14, 0xa, 0x18, 0x0, 0x0, 0x0 + createsprite gTectonicRageBlastBurnSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x10, 0x18, 0x0, 0x0, 0x0 + createsprite gTectonicRageBlastBurnSpriteTemplate, ANIM_ATTACKER, 2, 0xffec, 0xa, 0x18, 0x0, 0x0, 0x0 call TectonicRageExplosion playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_ATTACKER - launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x2 0x6 0xffc0 0x0 0x18 0x0 0x0 0x0 - launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x6 0x6 0xffd8 0xffec 0x18 0x0 0x0 0x0 - launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x46 0x6 0x0 0xffe0 0x18 0x0 0x0 0x0 - launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x46 0x6 0x28 0xffec 0x18 0x0 0x0 0x0 - launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x42 0x6 0x40 0x0 0x18 0x0 0x0 0x0 - launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x42 0x6 0x28 0x14 0x18 0x0 0x0 0x0 - launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x2 0x6 0x0 0x20 0x18 0x0 0x0 0x0 - launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x2 0x6 0xffd8 0x14 0x18 0x0 0x0 0x0 + createsprite gTectonicRageBlastBurnSpriteTemplate, ANIM_ATTACKER, 2, 0xffc0, 0x0, 0x18, 0x0, 0x0, 0x0 + createsprite gTectonicRageBlastBurnSpriteTemplate, ANIM_ATTACKER, 6, 0xffd8, 0xffec, 0x18, 0x0, 0x0, 0x0 + createsprite gTectonicRageBlastBurnSpriteTemplate, ANIM_ATTACKER, 70, 0x0, 0xffe0, 0x18, 0x0, 0x0, 0x0 + createsprite gTectonicRageBlastBurnSpriteTemplate, ANIM_ATTACKER, 70, 0x28, 0xffec, 0x18, 0x0, 0x0, 0x0 + createsprite gTectonicRageBlastBurnSpriteTemplate, ANIM_ATTACKER, 66, 0x40, 0x0, 0x18, 0x0, 0x0, 0x0 + createsprite gTectonicRageBlastBurnSpriteTemplate, ANIM_ATTACKER, 66, 0x28, 0x14, 0x18, 0x0, 0x0, 0x0 + createsprite gTectonicRageBlastBurnSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x20, 0x18, 0x0, 0x0, 0x0 + createsprite gTectonicRageBlastBurnSpriteTemplate, ANIM_ATTACKER, 2, 0xffd8, 0x14, 0x18, 0x0, 0x0, 0x0 call TectonicRageExplosion playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_ATTACKER - launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x2 0x6 0xffa0 0x0 0x18 0x0 0x0 0x0 - launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x6 0x6 0xffc4 0xffe2 0x18 0x0 0x0 0x0 - launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x46 0x6 0x0 0xffd0 0x18 0x0 0x0 0x0 - launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x46 0x6 0x3c 0xffe2 0x18 0x0 0x0 0x0 - launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x42 0x6 0x60 0x0 0x18 0x0 0x0 0x0 - launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x42 0x6 0x3c 0x1e 0x18 0x0 0x0 0x0 - launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x2 0x6 0x0 0x30 0x18 0x0 0x0 0x0 - launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x2 0x6 0xffc4 0x1e 0x18 0x0 0x0 0x0 + createsprite gTectonicRageBlastBurnSpriteTemplate, ANIM_ATTACKER, 2, 0xffa0, 0x0, 0x18, 0x0, 0x0, 0x0 + createsprite gTectonicRageBlastBurnSpriteTemplate, ANIM_ATTACKER, 6, 0xffc4, 0xffe2, 0x18, 0x0, 0x0, 0x0 + createsprite gTectonicRageBlastBurnSpriteTemplate, ANIM_ATTACKER, 70, 0x0, 0xffd0, 0x18, 0x0, 0x0, 0x0 + createsprite gTectonicRageBlastBurnSpriteTemplate, ANIM_ATTACKER, 70, 0x3c, 0xffe2, 0x18, 0x0, 0x0, 0x0 + createsprite gTectonicRageBlastBurnSpriteTemplate, ANIM_ATTACKER, 66, 0x60, 0x0, 0x18, 0x0, 0x0, 0x0 + createsprite gTectonicRageBlastBurnSpriteTemplate, ANIM_ATTACKER, 66, 0x3c, 0x1e, 0x18, 0x0, 0x0, 0x0 + createsprite gTectonicRageBlastBurnSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x30, 0x18, 0x0, 0x0, 0x0 + createsprite gTectonicRageBlastBurnSpriteTemplate, ANIM_ATTACKER, 2, 0xffc4, 0x1e, 0x18, 0x0, 0x0, 0x0 call TectonicRageExplosion waitforvisualfinish call UnsetPsychicBg waitbgfadein - launchtask AnimTask_AllBanksVisible 0xA 0x0 + createvisualtask AnimTask_AllBanksVisible, 0xA waitforvisualfinish end TectonicRageExplosion: playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gTectonicRageExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1 + createsprite gTectonicRageExplosionSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, ANIM_TARGET, 0x1 delay 0x6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gTectonicRageExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1 + createsprite gTectonicRageExplosionSpriteTemplate, ANIM_TARGET, 3, 0x18, 0xffe8, ANIM_TARGET, 0x1 delay 0x6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gTectonicRageExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + createsprite gTectonicRageExplosionSpriteTemplate, ANIM_TARGET, 3, 0xfff0, 0x10, ANIM_TARGET, 0x1 delay 0x6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gTectonicRageExplosionSpriteTemplate 0x83 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 + createsprite gTectonicRageExplosionSpriteTemplate, ANIM_TARGET, 3, 0xffe8, 0xfff4, ANIM_TARGET, 0x1 delay 0x6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gTectonicRageExplosionSpriteTemplate 0x83 0x4 0x10 0x10 ANIM_TARGET 0x1 + createsprite gTectonicRageExplosionSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x10, ANIM_TARGET, 0x1 delay 0x6 return @@ -25633,27 +25631,27 @@ Move_CONTINENTAL_CRUSH:: loadspritegfx ANIM_TAG_FOCUS_ENERGY @ focus energy loadspritegfx ANIM_TAG_IMPACT @ hit loadspritegfx ANIM_TAG_REALLY_BIG_ROCK - launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call ContinentalCrashBuffEffect delay 0x8 - launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xb 0x2dd3 - launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1 + createvisualtask AnimTask_BlendColorCycle, 0x2, 0x2, 0x2, 0x2, 0x0, 0xb, 0x2dd3 + createvisualtask AnimTask_ShakeMon2, 0x2, 0x0, 0x1, 0x0, 0x20, 0x1 call ContinentalCrashBuffEffect delay 0x8 call ContinentalCrashBuffEffect delay 0x4 delay 0xA playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER - launchtemplate gFlyBallUpSpriteTemplate 0x2 0x4 0x0 0x0 0xd 0x150 + createsprite gFlyBallUpSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0xd, 0x150 delay 0x2 - launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x0 0xc 0x4 0xfff0 0x12 - launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x0 0x10 0x4 0xfff6 0x12 - launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x1 0xe 0x4 0xffee 0x12 - launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x1 0xc 0x4 0xfff0 0x12 + createsprite gDirtPlumeSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0xc, 0x4, 0xfff0, 0x12 + createsprite gDirtPlumeSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x10, 0x4, 0xfff6, 0x12 + createsprite gDirtPlumeSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1, 0xe, 0x4, 0xffee, 0x12 + createsprite gDirtPlumeSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1, 0xc, 0x4, 0xfff0, 0x12 delay 0x30 - launchtask AnimTask_GetTimeOfDay 0x2 0x0 + createvisualtask AnimTask_GetTimeOfDay, 0x2 jumpargeq 0x0 0x0 ContinentalCrushDay jumpargeq 0x0 0x2 ContinentalCrushAfternoon ContinentalCrushNight: @@ -25671,15 +25669,15 @@ FinishContinentalCrush: delay 0x5 visible ANIM_ATTACKER delay 0x4 - launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xb 0x2dd3 - launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1 + createvisualtask AnimTask_BlendColorCycle, 0x2, 0x2, 0x2, 0x2, 0x0, 0xb, 0x2dd3 + createvisualtask AnimTask_ShakeMon2, 0x2, 0x0, 0x1, 0x0, 0x20, 0x1 playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER call ContinentalCrushStockpileRocks playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER call ContinentalCrushStockpileRocks - launchtemplate gContinentalCrushGrowingRockSpriteTemplate 0x2 0x1 0x0 - launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xb 0x2dd3 - launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1 + createsprite gContinentalCrushGrowingRockSpriteTemplate, ANIM_ATTACKER, 2, 0x0 + createvisualtask AnimTask_BlendColorCycle, 0x2, 0x2, 0x2, 0x2, 0x0, 0xb, 0x2dd3 + createvisualtask AnimTask_ShakeMon2, 0x2, 0x0, 0x1, 0x0, 0x20, 0x1 playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER call ContinentalCrushStockpileRocks playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER @@ -25689,87 +25687,87 @@ FinishContinentalCrush: fadetobg BG_IN_AIR waitbgfadeout visible ANIM_TARGET - launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0 0xf800 0x0 0xffff + createvisualtask AnimTask_StartSlidingBg, 0x5, 0x0, 0xf800, 0x0, 0xffff waitbgfadein loopsewithpan SE_FALL, SOUND_PAN_ATTACKER, 0x20, 0x4 @;Falling sound delay 0x1e - launchtemplate gContinentalCrushEruptionSpriteTemplate 0x28 0x5 0xc8 0xffe0 0x0 0x64 0x0 - launchtemplate gContinentalCrushEruptionSpriteTemplate 0x28 0x5 0x1e 0xffe0 0x10 0x5a 0x1 - launchtemplate gContinentalCrushEruptionSpriteTemplate 0x28 0x5 0x96 0xffe0 0x20 0x3c 0x2 - launchtemplate gContinentalCrushEruptionSpriteTemplate 0x28 0x5 0x5a 0xffe0 0x30 0x50 0x3 - launchtemplate gContinentalCrushEruptionSpriteTemplate 0x28 0x5 0x6e 0xffe0 0x40 0x32 0x0 - launchtemplate gContinentalCrushEruptionSpriteTemplate 0x28 0x5 0x3c 0xffe0 0x50 0x46 0x1 + createsprite gContinentalCrushEruptionSpriteTemplate, ANIM_ATTACKER, 40, 0xc8, 0xffe0, 0x0, 0x64, 0x0 + createsprite gContinentalCrushEruptionSpriteTemplate, ANIM_ATTACKER, 40, 0x1e, 0xffe0, 0x10, 0x5a, 0x1 + createsprite gContinentalCrushEruptionSpriteTemplate, ANIM_ATTACKER, 40, 0x96, 0xffe0, 0x20, 0x3c, 0x2 + createsprite gContinentalCrushEruptionSpriteTemplate, ANIM_ATTACKER, 40, 0x5a, 0xffe0, 0x30, 0x50, 0x3 + createsprite gContinentalCrushEruptionSpriteTemplate, ANIM_ATTACKER, 40, 0x6e, 0xffe0, 0x40, 0x32, 0x0 + createsprite gContinentalCrushEruptionSpriteTemplate, ANIM_ATTACKER, 40, 0x3c, 0xffe0, 0x50, 0x46, 0x1 delay 0x16 - launchtask AnimTask_HorizontalShake 0x5 0x3 0x5 0x8 0x1c - launchtask AnimTask_HorizontalShake 0x5 0x3 0x4 0x8 0x1c + createvisualtask AnimTask_HorizontalShake, 0x5, 0x5, 0x8, 0x1c + createvisualtask AnimTask_HorizontalShake, 0x5, 0x4, 0x8, 0x1c unloadspritegfx ANIM_TAG_ROUND_SHADOW @ fly unloadspritegfx ANIM_TAG_MUD_SAND @ dig unloadspritegfx ANIM_TAG_FOCUS_ENERGY @ focus energy unloadspritegfx ANIM_TAG_IMPACT @ hit loadspritegfx ANIM_TAG_REALLY_BIG_ROCK delay 0x30 - launchtemplate gContinentalCrushBigRockStompSpriteTemplate, 0x82, 0x4, 0, 0x3c, 3, ANIM_TARGET - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 0x4 0x2 0x0 0x7 0x0000 + createsprite gContinentalCrushBigRockStompSpriteTemplate, ANIM_TARGET, 2, 0, 0x3c, 3, ANIM_TARGET + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, 0x4, 0x2, 0x0, 0x7, 0x0000 delay 0x5 playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET - launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xff00 0x15 0x0 0x4 - launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 ANIM_TARGET 0x0 0xc 0xffe8 0xfff0 0x18 @ 12, -48, -16, 24 - launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 ANIM_TARGET 0x0 0x10 0xffda 0xfff6 0x18 @ 16, -16, -10, 24 - launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 ANIM_TARGET 0x1 0xe 0xffec 0xffee 0x18 @ 14, -52, -18, 24 - launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 ANIM_TARGET 0x1 0xc 0xffdc 0xfff0 0x18 @ 12, -32, -16, 24 - launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 ANIM_TARGET 0x0 0xc 0xffd0 0xfff0 0x18 @ 12, -24, -16, 24 - launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 ANIM_TARGET 0x0 0x10 0xfff0 0xfff6 0x18 @ 16, -38, -10, 24 - launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 ANIM_TARGET 0x1 0xe 0xffcc 0xffee 0x18 @ 14, -20, -18, 24 - launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 ANIM_TARGET 0x1 0xc 0xffe0 0xfff0 0x18 @ 12, -36, -16, 24 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0xff00, 0x15, 0x0, 0x4 + createsprite gDirtPlumeSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0xc, 0xffe8, 0xfff0, 0x18 @ 12, -48, -16, 24 + createsprite gDirtPlumeSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x10, 0xffda, 0xfff6, 0x18 @ 16, -16, -10, 24 + createsprite gDirtPlumeSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x1, 0xe, 0xffec, 0xffee, 0x18 @ 14, -52, -18, 24 + createsprite gDirtPlumeSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x1, 0xc, 0xffdc, 0xfff0, 0x18 @ 12, -32, -16, 24 + createsprite gDirtPlumeSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0xc, 0xffd0, 0xfff0, 0x18 @ 12, -24, -16, 24 + createsprite gDirtPlumeSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x10, 0xfff0, 0xfff6, 0x18 @ 16, -38, -10, 24 + createsprite gDirtPlumeSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x1, 0xe, 0xffcc, 0xffee, 0x18 @ 14, -20, -18, 24 + createsprite gDirtPlumeSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x1, 0xc, 0xffe0, 0xfff0, 0x18 @ 12, -36, -16, 24 delay 0x5 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 0x4 0x2 0x7 0x0 0x0000 @undo pal change on tgt + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, 0x4, 0x2, 0x7, 0x0, 0x0000 @undo pal change on tgt delay 0x10 waitforvisualfinish - launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x10 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x10 waitforvisualfinish restorebg waitbgfadeout setarg 0x7 0xffff - launchtask AnimTask_AllBanksVisible 0xA 0x0 + createvisualtask AnimTask_AllBanksVisible, 0xA waitbgfadein delay 0x4 waitforvisualfinish end ContinentalCrashBuffEffect: - launchtemplate gContinentalCrushFocusEnergySpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2 + createsprite gContinentalCrushFocusEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x1a, 0x2 delay 0x4 - launchtemplate gContinentalCrushFocusEnergySpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1 + createsprite gContinentalCrushFocusEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xe, 0x1c, 0x1 delay 0x4 - launchtemplate gContinentalCrushFocusEnergySpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2 + createsprite gContinentalCrushFocusEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfffb, 0xa, 0x2 delay 0x4 - launchtemplate gContinentalCrushFocusEnergySpriteTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3 + createsprite gContinentalCrushFocusEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1c, 0x1a, 0x3 delay 0x4 - launchtemplate gContinentalCrushFocusEnergySpriteTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1 + createsprite gContinentalCrushFocusEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff4, 0x0, 0x1 return ContinentalCrushStockpileRocks: - launchtemplate gContinentalCrushNeedleArmSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x0 0x0 0xffc0 0x20 @ 0,-32 + createsprite gContinentalCrushNeedleArmSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x0, 0xffc0, 0x20 @ 0,-32 delay 0x2 - launchtemplate gContinentalCrushNeedleArmSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x0 0x2c 0xffd4 0x20 @ +44,-44 + createsprite gContinentalCrushNeedleArmSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x2c, 0xffd4, 0x20 @ +44,-44 delay 0x2 - launchtemplate gContinentalCrushNeedleArmSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x0 0x3c 0x0 0x20 @ +60,0 + createsprite gContinentalCrushNeedleArmSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x3c, 0x0, 0x20 @ +60,0 delay 0x2 - launchtemplate gContinentalCrushNeedleArmSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x0 0x28 0x28 0x20 @ +40,+40 + createsprite gContinentalCrushNeedleArmSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x28, 0x28, 0x20 @ +40,+40 delay 0x2 - launchtemplate gContinentalCrushNeedleArmSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x0 0x0 0x38 0x20 @ +0,+56 + createsprite gContinentalCrushNeedleArmSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x0, 0x38, 0x20 @ +0,+56 delay 0x2 - launchtemplate gContinentalCrushNeedleArmSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x0 0xffda 0x26 0x20 @ -38,+38 + createsprite gContinentalCrushNeedleArmSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0xffda, 0x26, 0x20 @ -38,+38 delay 0x2 - launchtemplate gContinentalCrushNeedleArmSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x0 0xffca 0x0 0x20 @ -54, +0 + createsprite gContinentalCrushNeedleArmSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0xffca, 0x0, 0x20 @ -54, +0 delay 0x2 - launchtemplate gContinentalCrushNeedleArmSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x0 0xffdc 0xffdc 0x20 @ -36, -36 + createsprite gContinentalCrushNeedleArmSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0xffdc, 0xffdc, 0x20 @ -36, -36 delay 0x2 - launchtemplate gContinentalCrushNeedleArmSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x0 0x0 0xffce 0x20 @ 0, -50 + createsprite gContinentalCrushNeedleArmSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x0, 0xffce, 0x20 @ 0, -50 delay 0x2 - launchtemplate gContinentalCrushNeedleArmSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x0 0x22 0xffde 0x20 @ +34, -34 + createsprite gContinentalCrushNeedleArmSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x22, 0xffde, 0x20 @ +34, -34 delay 0x2 - launchtemplate gContinentalCrushNeedleArmSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x0 0x2e 0x0 0x20 @ +46, +0 + createsprite gContinentalCrushNeedleArmSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x2e, 0x0, 0x20 @ +46, +0 delay 0x2 - launchtemplate gContinentalCrushNeedleArmSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x0 0x20 0x20 0x20 @ +32, +32 + createsprite gContinentalCrushNeedleArmSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x20, 0x20, 0x20 @ +32, +32 delay 0x2 return @@ -25780,12 +25778,12 @@ Move_SAVAGE_SPIN_OUT:: loadspritegfx ANIM_TAG_STRING @string shot loadspritegfx ANIM_TAG_SPIDER_WEB @spider web loadspritegfx ANIM_TAG_MUD_SAND @rocks - launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish monbg ANIM_ATTACKER - setblends 0x80c - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x4 0x0 - launchtemplate gSavageSpinOutGreenChargeSpriteTemplate 0x2 0x1 0x0 + setalpha 12, 8 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x4, 0x0 + createsprite gSavageSpinOutGreenChargeSpriteTemplate, ANIM_ATTACKER, 2, 0x0 delay 0x19 playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER delay 0x14 @@ -25793,17 +25791,17 @@ Move_SAVAGE_SPIN_OUT:: delay 0xf playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x4 0x0 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x4, 0x0, 0x0 clearmonbg ANIM_ATTACKER - launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish unloadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT call gSavageSpinOutStringBlastSpriteTemplateSHOT - launchtask AnimTask_ShakeMon 0x5 0x5 0x1 0x5 0x0 0x32 0x1 + createvisualtask AnimTask_ShakeMon, 0x5, 0x1, 0x5, 0x0, 0x32, 0x1 call gSavageSpinOutStringBlastSpriteTemplateSHOT call gSavageSpinOutStringBlastSpriteTemplateSHOT call gSavageSpinOutStringBlastSpriteTemplateSHOT - launchtemplate gSpiderWebSpriteTemplate 0x82 0x0 @ spider web + createsprite gSpiderWebSpriteTemplate, ANIM_TARGET, 2 @ spider web call gSavageSpinOutStringBlastSpriteTemplateSHOT delay 0xe blendoff @@ -25815,18 +25813,18 @@ Move_SAVAGE_SPIN_OUT:: delay 0x1 invisible ANIM_TARGET delay 0x0 - launchtask AnimTask_IsTargetPlayerSide 0x2 0x0 + createvisualtask AnimTask_IsTargetPlayerSide, 0x2 delay 0x0 jumpargeq 0x7 ANIM_TARGET SavageSpinOutOnPlayer SavageSpinOutOnOpponent: - launchtemplate gSavageSpinOutCacoonSpriteTemplate 0x82 0x6 0x0 ANIM_TARGET 0x2 0x0 0x0 0x80 + createsprite gSavageSpinOutCacoonSpriteTemplate, ANIM_TARGET, 2, 0x0, ANIM_TARGET, 0x2, 0x0, 0x0, 0x80 goto FinishSavageSpinOut SavageSpinOutOnPlayer: - launchtemplate gSavageSpinOutCacoonSpriteTemplate 0x3 0x6 0x0 ANIM_TARGET 0x2 0x0 0x0 0x80 + createsprite gSavageSpinOutCacoonSpriteTemplate, ANIM_ATTACKER, 3, 0x0, ANIM_TARGET, 0x2, 0x0, 0x0, 0x80 FinishSavageSpinOut: fadetobg BG_IN_AIR waitbgfadeout - launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0 0x1000 0x0 0xffff @+0x1000 + createvisualtask AnimTask_StartSlidingBg, 0x5, 0x0, 0x1000, 0x0, 0xffff @+0x1000 waitbgfadein delay 0x10 call SlowSavageSpinOutBackgroundSpeed @@ -25852,7 +25850,7 @@ FinishSavageSpinOut: delay 0xc call UnsetPsychicBg setarg 0x7 0x0 @;Clear arg 7 so task works properly in Link battles - no idea why though - something to do with the background scrolling - launchtask AnimTask_SnatchOpposingMonMove 0x2 0x0 @ user fly on screen on enemy side + createvisualtask AnimTask_SnatchOpposingMonMove, 0x2 @ user fly on screen on enemy side playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER delay 0x1E unloadspritegfx ANIM_TAG_MUD_SAND @@ -25860,69 +25858,69 @@ FinishSavageSpinOut: loadspritegfx ANIM_TAG_CUT @cut loadspritegfx ANIM_TAG_EXPLOSION_2 @explosion loadspritegfx ANIM_TAG_AIR_WAVE_2 @white/gray - launchtask AnimTask_ShakeMonInPlace 0x82 0x5 ANIM_TARGET 0x4 0x0 0xc 0x1 - launchtask AnimTask_ShakeMonInPlace 0x82 0x5 ANIM_TARGET 0x4 0x0 0xc 0x1 + createvisualtask AnimTask_ShakeMonInPlace, 0x82, ANIM_TARGET, 0x4, 0x0, 0xc, 0x1 + createvisualtask AnimTask_ShakeMonInPlace, 0x82, ANIM_TARGET, 0x4, 0x0, 0xc, 0x1 createsprite gSavageSpinOutGreenCutSpriteTemplate, ANIM_TARGET, 2, 0x28, 0xffe0, 0x0 createsprite gSavageSpinOutGreenCutSpriteTemplate, ANIM_TARGET, 2, 0x28, 0xffd0, 0x0 playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET delay 0xc playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET - launchtemplate gSavageSpinOutWhiteExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1 + createsprite gSavageSpinOutWhiteExplosionSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, ANIM_TARGET, 0x1 delay 0x6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET - launchtemplate gSavageSpinOutWhiteExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1 + createsprite gSavageSpinOutWhiteExplosionSpriteTemplate, ANIM_TARGET, 3, 0x18, 0xffe8, ANIM_TARGET, 0x1 delay 0x6 - launchtemplate gSpiderWebSpriteTemplate 0x82 0x0 @ spider web + createsprite gSpiderWebSpriteTemplate, ANIM_TARGET, 2 @ spider web playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET - launchtemplate gSavageSpinOutWhiteExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + createsprite gSavageSpinOutWhiteExplosionSpriteTemplate, ANIM_TARGET, 3, 0xfff0, 0x10, ANIM_TARGET, 0x1 delay 0x6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET - launchtemplate gSavageSpinOutWhiteExplosionSpriteTemplate 0x83 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 + createsprite gSavageSpinOutWhiteExplosionSpriteTemplate, ANIM_TARGET, 3, 0xffe8, 0xfff4, ANIM_TARGET, 0x1 delay 0x6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET - launchtemplate gSavageSpinOutWhiteExplosionSpriteTemplate 0x83 0x4 0x10 0x10 ANIM_TARGET 0x1 + createsprite gSavageSpinOutWhiteExplosionSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x10, ANIM_TARGET, 0x1 delay 0x6 waitforvisualfinish - launchtask AnimTask_AllBanksVisible 0xA 0x0 + createvisualtask AnimTask_AllBanksVisible, 0xA waitforvisualfinish end gSavageSpinOutStringBlastSpriteTemplateSHOT: playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER - launchtemplate gSavageSpinOutStringBlastSpriteTemplate 0x82 0x7 0xe 0xfff4 0x0 0xfff4 0xf 0x0 0x0 - launchtemplate gSavageSpinOutStringBlastSpriteTemplate 0x82 0x7 0x1a 0x8 0xc 0x8 0xf 0x0 0x0 + createsprite gSavageSpinOutStringBlastSpriteTemplate, ANIM_TARGET, 2, 0xe, 0xfff4, 0x0, 0xfff4, 0xf, 0x0, 0x0 + createsprite gSavageSpinOutStringBlastSpriteTemplate, ANIM_TARGET, 2, 0x1a, 0x8, 0xc, 0x8, 0xf, 0x0, 0x0 delay 0x3 playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER - launchtemplate gSavageSpinOutStringBlastSpriteTemplate 0x82 0x7 0xe 0xfff4 0x0 0xfff4 0xf 0x1 0x0 - launchtemplate gSavageSpinOutStringBlastSpriteTemplate 0x82 0x7 0x1a 0x8 0xc 0x8 0xf 0x1 0x0 + createsprite gSavageSpinOutStringBlastSpriteTemplate, ANIM_TARGET, 2, 0xe, 0xfff4, 0x0, 0xfff4, 0xf, 0x1, 0x0 + createsprite gSavageSpinOutStringBlastSpriteTemplate, ANIM_TARGET, 2, 0x1a, 0x8, 0xc, 0x8, 0xf, 0x1, 0x0 delay 0x3 playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER - launchtemplate gSavageSpinOutStringBlastSpriteTemplate 0x82 0x7 0xe 0xfff4 0x0 0xfff4 0xf 0x2 0x0 - launchtemplate gSavageSpinOutStringBlastSpriteTemplate 0x82 0x7 0x1a 0x8 0xc 0x8 0xf 0x2 0x0 + createsprite gSavageSpinOutStringBlastSpriteTemplate, ANIM_TARGET, 2, 0xe, 0xfff4, 0x0, 0xfff4, 0xf, 0x2, 0x0 + createsprite gSavageSpinOutStringBlastSpriteTemplate, ANIM_TARGET, 2, 0x1a, 0x8, 0xc, 0x8, 0xf, 0x2, 0x0 delay 0x3 playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER - launchtemplate gSavageSpinOutStringBlastSpriteTemplate 0x82 0x7 0xe 0xfff4 0x0 0xfff4 0xf 0x3 0x0 - launchtemplate gSavageSpinOutStringBlastSpriteTemplate 0x82 0x7 0x1a 0x8 0xc 0x8 0xf 0x3 0x0 + createsprite gSavageSpinOutStringBlastSpriteTemplate, ANIM_TARGET, 2, 0xe, 0xfff4, 0x0, 0xfff4, 0xf, 0x3, 0x0 + createsprite gSavageSpinOutStringBlastSpriteTemplate, ANIM_TARGET, 2, 0x1a, 0x8, 0xc, 0x8, 0xf, 0x3, 0x0 delay 0x3 return SavageSpinOutCrash_1: createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0xfff6, 0xfff8, 0x1, 0x1 playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET - launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 0x1 0x0 0xc 0xffe8 0xfff0 0x18 - launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 0x1 0x0 0x10 0xffda 0xfff6 0x18 - launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 0x1 0x1 0xe 0xffec 0xffee 0x18 - launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 0x1 0x1 0xc 0xffdc 0xfff0 0x18 + createsprite gDirtPlumeSpriteTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0xc, 0xffe8, 0xfff0, 0x18 + createsprite gDirtPlumeSpriteTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x10, 0xffda, 0xfff6, 0x18 + createsprite gDirtPlumeSpriteTemplate, ANIM_TARGET, 2, 0x1, 0x1, 0xe, 0xffec, 0xffee, 0x18 + createsprite gDirtPlumeSpriteTemplate, ANIM_TARGET, 2, 0x1, 0x1, 0xc, 0xffdc, 0xfff0, 0x18 return SavageSpinOutCrash_2: createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0xa, 0xfff8, 0x1, 0x1 playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET - launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 0x1 0x0 0xc 0xffd0 0xfff0 0x18 - launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 0x1 0x0 0x10 0xfff0 0xfff6 0x18 - launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 0x1 0x1 0xe 0xffcc 0xffee 0x18 - launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 0x1 0x1 0xc 0xffe0 0xfff0 0x18 + createsprite gDirtPlumeSpriteTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0xc, 0xffd0, 0xfff0, 0x18 + createsprite gDirtPlumeSpriteTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x10, 0xfff0, 0xfff6, 0x18 + createsprite gDirtPlumeSpriteTemplate, ANIM_TARGET, 2, 0x1, 0x1, 0xe, 0xffcc, 0xffee, 0x18 + createsprite gDirtPlumeSpriteTemplate, ANIM_TARGET, 2, 0x1, 0x1, 0xc, 0xffe0, 0xfff0, 0x18 return SlowSavageSpinOutBackgroundSpeed: - launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0 0xfd56 0x0 0xffff @-0x2aa + createvisualtask AnimTask_StartSlidingBg, 0x5, 0x0, 0xfd56, 0x0, 0xffff @-0x2aa delay 0x1 return @@ -25934,13 +25932,13 @@ Move_NEVER_ENDING_NIGHTMARE:: loadspritegfx ANIM_TAG_FIRE_PLUME @blast burn loadspritegfx ANIM_TAG_POISON_BUBBLE @purple loadspritegfx ANIM_TAG_VERTICAL_HEX @hex - launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call NeverendingNightmareBuffEffect delay 0x8 - launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xb 0x40c0 - launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1 + createvisualtask AnimTask_BlendColorCycle, 0x2, 0x2, 0x2, 0x2, 0x0, 0xb, 0x40c0 + createvisualtask AnimTask_ShakeMon2, 0x2, 0x0, 0x1, 0x0, 0x20, 0x1 call NeverendingNightmareBuffEffect delay 0x8 call NeverendingNightmareBuffEffect @@ -25961,100 +25959,100 @@ Move_NEVER_ENDING_NIGHTMARE:: waitforvisualfinish fadetobg BG_NEVERENDING_NIGHTMARE waitbgfadein - launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_TARGET 0x0 0x4 0x78 0x1 + createvisualtask AnimTask_ShakeMon, 0x5, ANIM_TARGET, 0x0, 0x4, 0x78, 0x1 playsewithpan SE_M_WHIRLPOOL, SOUND_PAN_TARGET call NeverendingNightmareHands call NeverendingNightmareHands delay 0xa - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 0x4 0x2 0x0 0x10 0x40c0 @ fade to purple + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, 0x4, 0x2, 0x0, 0x10, 0x40c0 @ fade to purple playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET loadspritegfx ANIM_TAG_EXPLOSION_2 unloadspritegfx ANIM_TAG_THIN_RING - launchtask AnimTask_BlendParticle, 0x5, 0x5, ANIM_TAG_VERTICAL_HEX, 0x2, 0xA, 0xA, 0x580A @;Purple + createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_VERTICAL_HEX, 0x2, 0xA, 0xA, 0x580A @;Purple call NeverendingNightmareGeyser playsewithpan SE_M_SACRED_FIRE, SOUND_PAN_TARGET - launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x2 0x6 0xffe0 0x0 0x18 0x0 0x0 0x0 - launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x2 0x6 0xffec 0xfff6 0x18 0x0 0x0 0x0 - launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x42 0x6 0x0 0xfff0 0x18 0x0 0x0 0x0 - launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x42 0x6 0x14 0xfff6 0x18 0x0 0x0 0x0 - launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x42 0x6 0x20 0x0 0x18 0x0 0x0 0x0 - launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x42 0x6 0x14 0xa 0x18 0x0 0x0 0x0 - launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x2 0x6 0x0 0x10 0x18 0x0 0x0 0x0 - launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x2 0x6 0xffec 0xa 0x18 0x0 0x0 0x0 + createsprite gNeverEndingNightmareBlastBurnSpriteTemplate, ANIM_ATTACKER, 2, 0xffe0, 0x0, 0x18, 0x0, 0x0, 0x0 + createsprite gNeverEndingNightmareBlastBurnSpriteTemplate, ANIM_ATTACKER, 2, 0xffec, 0xfff6, 0x18, 0x0, 0x0, 0x0 + createsprite gNeverEndingNightmareBlastBurnSpriteTemplate, ANIM_ATTACKER, 66, 0x0, 0xfff0, 0x18, 0x0, 0x0, 0x0 + createsprite gNeverEndingNightmareBlastBurnSpriteTemplate, ANIM_ATTACKER, 66, 0x14, 0xfff6, 0x18, 0x0, 0x0, 0x0 + createsprite gNeverEndingNightmareBlastBurnSpriteTemplate, ANIM_ATTACKER, 66, 0x20, 0x0, 0x18, 0x0, 0x0, 0x0 + createsprite gNeverEndingNightmareBlastBurnSpriteTemplate, ANIM_ATTACKER, 66, 0x14, 0xa, 0x18, 0x0, 0x0, 0x0 + createsprite gNeverEndingNightmareBlastBurnSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x10, 0x18, 0x0, 0x0, 0x0 + createsprite gNeverEndingNightmareBlastBurnSpriteTemplate, ANIM_ATTACKER, 2, 0xffec, 0xa, 0x18, 0x0, 0x0, 0x0 playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET call NeverendingNightmareGeyser playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_TARGET - launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x2 0x6 0xffc0 0x0 0x18 0x0 0x0 0x0 - launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x6 0x6 0xffd8 0xffec 0x18 0x0 0x0 0x0 - launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x46 0x6 0x0 0xffe0 0x18 0x0 0x0 0x0 - launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x46 0x6 0x28 0xffec 0x18 0x0 0x0 0x0 - launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x42 0x6 0x40 0x0 0x18 0x0 0x0 0x0 - launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x42 0x6 0x28 0x14 0x18 0x0 0x0 0x0 - launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x2 0x6 0x0 0x20 0x18 0x0 0x0 0x0 - launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x2 0x6 0xffd8 0x14 0x18 0x0 0x0 0x0 + createsprite gNeverEndingNightmareBlastBurnSpriteTemplate, ANIM_ATTACKER, 2, 0xffc0, 0x0, 0x18, 0x0, 0x0, 0x0 + createsprite gNeverEndingNightmareBlastBurnSpriteTemplate, ANIM_ATTACKER, 6, 0xffd8, 0xffec, 0x18, 0x0, 0x0, 0x0 + createsprite gNeverEndingNightmareBlastBurnSpriteTemplate, ANIM_ATTACKER, 70, 0x0, 0xffe0, 0x18, 0x0, 0x0, 0x0 + createsprite gNeverEndingNightmareBlastBurnSpriteTemplate, ANIM_ATTACKER, 70, 0x28, 0xffec, 0x18, 0x0, 0x0, 0x0 + createsprite gNeverEndingNightmareBlastBurnSpriteTemplate, ANIM_ATTACKER, 66, 0x40, 0x0, 0x18, 0x0, 0x0, 0x0 + createsprite gNeverEndingNightmareBlastBurnSpriteTemplate, ANIM_ATTACKER, 66, 0x28, 0x14, 0x18, 0x0, 0x0, 0x0 + createsprite gNeverEndingNightmareBlastBurnSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x20, 0x18, 0x0, 0x0, 0x0 + createsprite gNeverEndingNightmareBlastBurnSpriteTemplate, ANIM_ATTACKER, 2, 0xffd8, 0x14, 0x18, 0x0, 0x0, 0x0 playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET call NeverendingNightmareGeyser playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_TARGET - launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x2 0x6 0xffa0 0x0 0x18 0x0 0x0 0x0 - launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x6 0x6 0xffc4 0xffe2 0x18 0x0 0x0 0x0 - launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x46 0x6 0x0 0xffd0 0x18 0x0 0x0 0x0 - launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x46 0x6 0x3c 0xffe2 0x18 0x0 0x0 0x0 - launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x42 0x6 0x60 0x0 0x18 0x0 0x0 0x0 - launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x42 0x6 0x3c 0x1e 0x18 0x0 0x0 0x0 - launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x2 0x6 0x0 0x30 0x18 0x0 0x0 0x0 - launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x2 0x6 0xffc4 0x1e 0x18 0x0 0x0 0x0 + createsprite gNeverEndingNightmareBlastBurnSpriteTemplate, ANIM_ATTACKER, 2, 0xffa0, 0x0, 0x18, 0x0, 0x0, 0x0 + createsprite gNeverEndingNightmareBlastBurnSpriteTemplate, ANIM_ATTACKER, 6, 0xffc4, 0xffe2, 0x18, 0x0, 0x0, 0x0 + createsprite gNeverEndingNightmareBlastBurnSpriteTemplate, ANIM_ATTACKER, 70, 0x0, 0xffd0, 0x18, 0x0, 0x0, 0x0 + createsprite gNeverEndingNightmareBlastBurnSpriteTemplate, ANIM_ATTACKER, 70, 0x3c, 0xffe2, 0x18, 0x0, 0x0, 0x0 + createsprite gNeverEndingNightmareBlastBurnSpriteTemplate, ANIM_ATTACKER, 66, 0x60, 0x0, 0x18, 0x0, 0x0, 0x0 + createsprite gNeverEndingNightmareBlastBurnSpriteTemplate, ANIM_ATTACKER, 66, 0x3c, 0x1e, 0x18, 0x0, 0x0, 0x0 + createsprite gNeverEndingNightmareBlastBurnSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x30, 0x18, 0x0, 0x0, 0x0 + createsprite gNeverEndingNightmareBlastBurnSpriteTemplate, ANIM_ATTACKER, 2, 0xffc4, 0x1e, 0x18, 0x0, 0x0, 0x0 playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET call NeverendingNightmareGeyser - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 0x4 0x2 0x10 0x0 0x40c0 @ fade to normal + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, 0x4, 0x2, 0x10, 0x0, 0x40c0 @ fade to normal waitforvisualfinish restorebg waitbgfadeout - launchtask AnimTask_AllBanksVisible 0xA 0x0 + createvisualtask AnimTask_AllBanksVisible, 0xA waitforvisualfinish end NeverendingNightmareBuffEffect: - launchtemplate gNeverEndingNightmareFocusEnergySpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2 + createsprite gNeverEndingNightmareFocusEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x1a, 0x2 delay 0x4 - launchtemplate gNeverEndingNightmareFocusEnergySpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1 + createsprite gNeverEndingNightmareFocusEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xe, 0x1c, 0x1 delay 0x4 - launchtemplate gNeverEndingNightmareFocusEnergySpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2 + createsprite gNeverEndingNightmareFocusEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfffb, 0xa, 0x2 delay 0x4 - launchtemplate gNeverEndingNightmareFocusEnergySpriteTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3 + createsprite gNeverEndingNightmareFocusEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1c, 0x1a, 0x3 delay 0x4 - launchtemplate gNeverEndingNightmareFocusEnergySpriteTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1 + createsprite gNeverEndingNightmareFocusEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff4, 0x0, 0x1 return NeverendingNightmareTargetRings: - launchtemplate gNeverEndingNightmareRingTargetSpriteTemplate 0x83 0x4 0x0 0x0 0x100 0x0 + createsprite gNeverEndingNightmareRingTargetSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, 0x100, 0x0 delay 0x8 return NeverendingNightmareAttackerRings: - launchtemplate gNeverEndingNightmareRingAttackerSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0 + createsprite gNeverEndingNightmareRingAttackerSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0 delay 0xe return NeverendingNightmareHands: - launchtemplate gNeverEndingNightmareHandSpriteTemplate 0x82 0x5 ANIM_TARGET 0x0 0x0 0xffc0 0x20 @ 0,-32 + createsprite gNeverEndingNightmareHandSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x0, 0x0, 0xffc0, 0x20 @ 0,-32 delay 0x2 - launchtemplate gNeverEndingNightmareHandSpriteTemplate 0x82 0x5 ANIM_TARGET 0x0 0x2c 0xffd4 0x20 @ +44,-44 + createsprite gNeverEndingNightmareHandSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x0, 0x2c, 0xffd4, 0x20 @ +44,-44 delay 0x2 - launchtemplate gNeverEndingNightmareHandSpriteTemplate 0x82 0x5 ANIM_TARGET 0x0 0x3c 0x0 0x20 @ +60,0 + createsprite gNeverEndingNightmareHandSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x0, 0x3c, 0x0, 0x20 @ +60,0 delay 0x2 - launchtemplate gNeverEndingNightmareHandSpriteTemplate 0x82 0x5 ANIM_TARGET 0x0 0x28 0x28 0x20 @ +40,+40 + createsprite gNeverEndingNightmareHandSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x0, 0x28, 0x28, 0x20 @ +40,+40 delay 0x2 - launchtemplate gNeverEndingNightmareHandSpriteTemplate 0x82 0x5 ANIM_TARGET 0x0 0x0 0x38 0x20 @ +0,+56 + createsprite gNeverEndingNightmareHandSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x0, 0x0, 0x38, 0x20 @ +0,+56 delay 0x2 - launchtemplate gNeverEndingNightmareHandSpriteTemplate 0x82 0x5 ANIM_TARGET 0x0 0xffda 0x26 0x20 @ -38,+38 + createsprite gNeverEndingNightmareHandSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x0, 0xffda, 0x26, 0x20 @ -38,+38 delay 0x2 - launchtemplate gNeverEndingNightmareHandSpriteTemplate 0x82 0x5 ANIM_TARGET 0x0 0xffca 0x0 0x20 @ -54, +0 + createsprite gNeverEndingNightmareHandSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x0, 0xffca, 0x0, 0x20 @ -54, +0 delay 0x2 - launchtemplate gNeverEndingNightmareHandSpriteTemplate 0x82 0x5 ANIM_TARGET 0x0 0xffdc 0xffdc 0x20 @ -36, -36 + createsprite gNeverEndingNightmareHandSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x0, 0xffdc, 0xffdc, 0x20 @ -36, -36 delay 0x2 - launchtemplate gNeverEndingNightmareHandSpriteTemplate 0x82 0x5 ANIM_TARGET 0x0 0x0 0xffce 0x20 @ 0, -50 + createsprite gNeverEndingNightmareHandSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x0, 0x0, 0xffce, 0x20 @ 0, -50 delay 0x2 - launchtemplate gNeverEndingNightmareHandSpriteTemplate 0x82 0x5 ANIM_TARGET 0x0 0x22 0xffde 0x20 @ +34, -34 + createsprite gNeverEndingNightmareHandSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x0, 0x22, 0xffde, 0x20 @ +34, -34 delay 0x2 - launchtemplate gNeverEndingNightmareHandSpriteTemplate 0x82 0x5 ANIM_TARGET 0x0 0x2e 0x0 0x20 @ +46, +0 + createsprite gNeverEndingNightmareHandSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x0, 0x2e, 0x0, 0x20 @ +46, +0 delay 0x2 - launchtemplate gNeverEndingNightmareHandSpriteTemplate 0x82 0x5 ANIM_TARGET 0x0 0x20 0x20 0x20 @ +32, +32 + createsprite gNeverEndingNightmareHandSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x0, 0x20, 0x20, 0x20 @ +32, +32 delay 0x2 return NeverendingNightmareGeyser: @@ -26119,13 +26117,13 @@ Move_CORKSCREW_CRASH:: loadspritegfx ANIM_TAG_MUD_SAND @rock monbg ANIM_ATTACKER invisible ANIM_TARGET - launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x2 0x0 0xb 0x6318 @fade atker to gray - launchtask AnimTask_BlendParticle, 0x5, 0x5, ANIM_TAG_SPIKES, 0x0, 0xC, 0xC, 0x6318 @;Gray + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x2, 0x0, 0xb, 0x6318 @fade atker to gray + createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_SPIKES, 0x0, 0xC, 0xC, 0x6318 @;Gray playsewithpan SE_ESCALATOR, SOUND_PAN_ATTACKER - launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_ATTACKER 0x0 0x2 0x4f 0x1 - launchtemplate gCorkscrewCrashChargeSpriteTemplate 0x2 0x1 0x0 + createvisualtask AnimTask_ShakeMon, 0x5, ANIM_ATTACKER, 0x0, 0x2, 0x4f, 0x1 + createsprite gCorkscrewCrashChargeSpriteTemplate, ANIM_ATTACKER, 2, 0x0 call CorkscrewCrashMetalFlare call CorkscrewCrashMetalFlare call CorkscrewCrashMetalFlare @@ -26133,50 +26131,50 @@ Move_CORKSCREW_CRASH:: call CorkscrewCrashMetalFlare waitforvisualfinish clearmonbg ANIM_ATTACKER - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x0 0xb 0x0 0x6318 @fade atker back + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x0, 0xb, 0x0, 0x6318 @fade atker back waitforvisualfinish stopsound invisible ANIM_ATTACKER - launchtemplate gCorkscrewCrashCorkscrewFlyUpSpriteTemplate 0x2 0x7 0x0 0x0 0x4e0 0x24 0x15 0x1 ANIM_ATTACKER + createsprite gCorkscrewCrashCorkscrewFlyUpSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x4e0, 0x24, 0x15, 0x1, ANIM_ATTACKER playsewithpan SE_ESCALATOR, SOUND_PAN_ATTACKER fadetobg BG_HIGHSPEED_OPPONENT waitbgfadeout - launchtask AnimTask_StartSlidingBg 0x5 0x4 0xf700 0x0 0x1 0xffff + createvisualtask AnimTask_StartSlidingBg, 0x5, 0xf700, 0x0, 0x1, 0xffff waitbgfadein - launchtask AnimTask_IsTargetPlayerSide 0x2 0x0 + createvisualtask AnimTask_IsTargetPlayerSide, 0x2 jumpargeq 0x7 ANIM_TARGET CorkscrewCrashOnPlayer CorkscrewCrashOnOpponent: - launchtemplate gCorkscrewCrashRightUpSpriteTemplate 0x32 0x5 0xfff0 0x88 0x100 0x38 0x15 + createsprite gCorkscrewCrashRightUpSpriteTemplate, ANIM_ATTACKER, 50, 0xfff0, 0x88, 0x100, 0x38, 0x15 waitforvisualfinish delay 0xa - launchtemplate gCorkscrewCrashLeftUpSpriteTemplate 0x32 0x5 0x0120 0x38 0xfff0 0x38 0x15 + createsprite gCorkscrewCrashLeftUpSpriteTemplate, ANIM_ATTACKER, 50, 0x0120, 0x38, 0xfff0, 0x38, 0x15 waitforvisualfinish visible ANIM_TARGET delay 0x5 goto FinishCorkscrewCrash CorkscrewCrashOnPlayer: - launchtemplate gCorkscrewCrashLeftDownSpriteTemplate 0x32 0x5 0x0120 0x08 0xfff0 0x0f 0x15 + createsprite gCorkscrewCrashLeftDownSpriteTemplate, ANIM_ATTACKER, 50, 0x0120, 0x08, 0xfff0, 0x0f, 0x15 waitforvisualfinish delay 0xa - launchtemplate gCorkscrewCrashRightDownSpriteTemplate 0x32 0x5 0xfff0 0x38 0x100 0x38 0x15 + createsprite gCorkscrewCrashRightDownSpriteTemplate, ANIM_ATTACKER, 50, 0xfff0, 0x38, 0x100, 0x38, 0x15 waitforvisualfinish visible ANIM_TARGET delay 0x5 FinishCorkscrewCrash: - launchtemplate gCorkscrewCrashStrikeSpriteTemplate 0x82 0x1 0x14 + createsprite gCorkscrewCrashStrikeSpriteTemplate, ANIM_TARGET, 2, 0x14 loadspritegfx ANIM_TAG_IMPACT @hit delay 0x10 stopsound playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gBasicHitSplatSpriteTemplate 0x83 0x4 0x0 0x0 0x1 0x0 - launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xff00 0xf 0x0 0x4 @ shove target down a bit + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, 0x1, 0x0 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0xff00, 0xf, 0x0, 0x4 @ shove target down a bit waitforvisualfinish - launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x10 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x10 playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_TARGET - launchtemplate gCorkscrewCrashCorkscrewFlyDownSpriteTemplate 0x83 0x3 0x0 0xffc0 0x0f + createsprite gCorkscrewCrashCorkscrewFlyDownSpriteTemplate, ANIM_TARGET, 3, 0x0, 0xffc0, 0x0f delay 0xf - launchtask AnimTask_HorizontalShake 0x5 0x3 ANIM_TARGET 0x2 0x30 - launchtemplate gCorkscrewCrashCorkscrewFlyDownSpriteTemplate 0x83 0x3 0x0 0xfffe 0x03 + createvisualtask AnimTask_HorizontalShake, 0x5, ANIM_TARGET, 0x2, 0x30 + createsprite gCorkscrewCrashCorkscrewFlyDownSpriteTemplate, ANIM_TARGET, 3, 0x0, 0xfffe, 0x03 call CorkscrewCrashSpinningWind call CorkscrewCrashSprayRocks delay 0x6 @@ -26186,7 +26184,7 @@ FinishCorkscrewCrash: delay 0x6 call CorkscrewCrashSprayRocks delay 0x0 - launchtemplate gCorkscrewCrashCorkscrewFlyDownSpriteTemplate 0x83 0x3 0x0 0xfffe 0x03 + createsprite gCorkscrewCrashCorkscrewFlyDownSpriteTemplate, ANIM_TARGET, 3, 0x0, 0xfffe, 0x03 delay 0x6 call CorkscrewCrashSprayRocks delay 0x6 @@ -26194,72 +26192,72 @@ FinishCorkscrewCrash: delay 0x6 call CorkscrewCrashSprayRocks delay 0x1 - launchtemplate gCorkscrewCrashCorkscrewFlyDownSpriteTemplate 0x83 0x3 0x0 0xfffe 0x03 + createsprite gCorkscrewCrashCorkscrewFlyDownSpriteTemplate, ANIM_TARGET, 3, 0x0, 0xfffe, 0x03 delay 0x4 call CorkscrewCrashSprayRocks delay 0x6 call CorkscrewCrashSprayRocks delay 0x6 call CorkscrewCrashSprayRocks - launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_ALL_BATTLERS | ANIM_PAL_BG, 0x2, 0x0, 0x10, 0x7fff + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS), 0x2, 0x0, 0x10, 0x7fff waitforvisualfinish delay 0x10 call ResetFromWhiteScreen waitforvisualfinish end CorkscrewCrashSpinningWind: - launchtemplate gWhirlwindLineSpriteTemplate 0x3 0x5 0x0 0xfff8 0x1 0x2c 0x0 - launchtemplate gWhirlwindLineSpriteTemplate 0x3 0x5 0x0 0x0 0x1 0x3c 0x1 - launchtemplate gWhirlwindLineSpriteTemplate 0x3 0x5 0x0 0x8 0x1 0x3c 0x2 - launchtemplate gWhirlwindLineSpriteTemplate 0x3 0x5 0x0 0x10 0x1 0x3c 0x3 - launchtemplate gWhirlwindLineSpriteTemplate 0x3 0x5 0x0 0x18 0x1 0x3c 0x4 - launchtemplate gWhirlwindLineSpriteTemplate 0x3 0x5 0x0 0x20 0x1 0x3c 0x0 + createsprite gWhirlwindLineSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0xfff8, 0x1, 0x2c, 0x0 + createsprite gWhirlwindLineSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x1, 0x3c, 0x1 + createsprite gWhirlwindLineSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x8, 0x1, 0x3c, 0x2 + createsprite gWhirlwindLineSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x10, 0x1, 0x3c, 0x3 + createsprite gWhirlwindLineSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x18, 0x1, 0x3c, 0x4 + createsprite gWhirlwindLineSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x20, 0x1, 0x3c, 0x0 return CorkscrewCrashMetalFlare: - launchtemplate gCorkscrewCrashMetalBitSpriteTemplate 0x82 0x7 0x0 0x1c 0x210 0x1e 0xd 0x32 ANIM_ATTACKER + createsprite gCorkscrewCrashMetalBitSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x210, 0x1e, 0xd, 0x32, ANIM_ATTACKER delay 0x2 - launchtemplate gCorkscrewCrashMetalBitSpriteTemplate 0x82 0x7 0x0 0x20 0x1e0 0x14 0x10 0xffd2 ANIM_ATTACKER + createsprite gCorkscrewCrashMetalBitSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x20, 0x1e0, 0x14, 0x10, 0xffd2, ANIM_ATTACKER delay 0x2 - launchtemplate gCorkscrewCrashMetalBitSpriteTemplate 0x82 0x7 0x0 0x21 0x240 0x14 0x8 0x2a ANIM_ATTACKER + createsprite gCorkscrewCrashMetalBitSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x240, 0x14, 0x8, 0x2a, ANIM_ATTACKER delay 0x2 - launchtemplate gCorkscrewCrashMetalBitSpriteTemplate 0x82 0x7 0x0 0x1f 0x190 0x19 0xb 0xffd6 ANIM_ATTACKER + createsprite gCorkscrewCrashMetalBitSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1f, 0x190, 0x19, 0xb, 0xffd6, ANIM_ATTACKER delay 0x2 - launchtemplate gCorkscrewCrashMetalBitSpriteTemplate 0x82 0x7 0x0 0x1c 0x200 0x19 0x10 0x2e ANIM_ATTACKER + createsprite gCorkscrewCrashMetalBitSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x200, 0x19, 0x10, 0x2e, ANIM_ATTACKER delay 0x2 - launchtemplate gCorkscrewCrashMetalBitSpriteTemplate 0x82 0x7 0x0 0x21 0x1d0 0x1e 0xf 0xffce ANIM_ATTACKER + createsprite gCorkscrewCrashMetalBitSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1d0, 0x1e, 0xf, 0xffce, ANIM_ATTACKER delay 0x2 return CorkscrewCrashSprayRocks: playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET - launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 0x1 0x0 0xc 0xffe8 0xfff0 0x18 - launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 0x1 0x0 0x10 0xffda 0xfff6 0x18 - launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 0x1 0x1 0xe 0xffec 0xffee 0x18 - launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 0x1 0x1 0xc 0xffdc 0xfff0 0x18 + createsprite gDirtPlumeSpriteTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0xc, 0xffe8, 0xfff0, 0x18 + createsprite gDirtPlumeSpriteTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x10, 0xffda, 0xfff6, 0x18 + createsprite gDirtPlumeSpriteTemplate, ANIM_TARGET, 2, 0x1, 0x1, 0xe, 0xffec, 0xffee, 0x18 + createsprite gDirtPlumeSpriteTemplate, ANIM_TARGET, 2, 0x1, 0x1, 0xc, 0xffdc, 0xfff0, 0x18 return Move_INFERNO_OVERDRIVE:: loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge loadspritegfx ANIM_TAG_SMALL_EMBER @fire - launchtask AnimTask_BlendParticle, 0x5, 0x5, ANIM_TAG_CIRCLE_OF_LIGHT, 0x0, 0xA, 0xA, 0x1F - launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_CIRCLE_OF_LIGHT, 0x0, 0xA, 0xA, 0x1F + createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish fadetobg BG_INFERNO_OVERDRIVE waitbgfadeout - launchtask AnimTask_IsTargetPlayerSide 0x2 0x0 + createvisualtask AnimTask_IsTargetPlayerSide, 0x2 jumpargeq 0x7 ANIM_TARGET InfernoOverdriveOnPlayer InfernoOverdriveOnOpponent: - launchtask AnimTask_StartSlidingBg 0x5 0x4 0xfb00 0x0 0x0 0xFFFF + createvisualtask AnimTask_StartSlidingBg, 0x5, 0xfb00, 0x0, 0x0, 0xFFFF goto FinishInfernoOverdrive InfernoOverdriveOnPlayer: - launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0500 0x0 0x0 0xFFFF + createvisualtask AnimTask_StartSlidingBg, 0x5, 0x0500, 0x0, 0x0, 0xFFFF FinishInfernoOverdrive: waitbgfadein monbg ANIM_ATTACKER - setblends 0x80c + setalpha 12, 8 loopsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_ATTACKER, 0x13, 0x8 - launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_ATTACKER 0x0 0x2 0x4f 0x1 - launchtemplate gInfernoOverdriveChargeSpriteTemplate 0x2 0x1 0x0 + createvisualtask AnimTask_ShakeMon, 0x5, ANIM_ATTACKER, 0x0, 0x2, 0x4f, 0x1 + createsprite gInfernoOverdriveChargeSpriteTemplate, ANIM_ATTACKER, 2, 0x0 call InfernoOverdriveFireSpin call InfernoOverdriveFireSpin call InfernoOverdriveFireSpin @@ -26274,17 +26272,17 @@ FinishInfernoOverdrive: loadspritegfx ANIM_TAG_METEOR @superpower loadspritegfx ANIM_TAG_VERTICAL_HEX @red color clearmonbg ANIM_ATTACKER - launchtemplate gInfernoOverdriveSuperpowerSpriteTemplate 0x83 0x1 0x0 @ super power shot + createsprite gInfernoOverdriveSuperpowerSpriteTemplate, ANIM_TARGET, 3, 0x0 @ super power shot playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_ATTACKER delay 0x10 - launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x8 0x0 0x10 0x1 + createvisualtask AnimTask_ShakeMon2, 0x2, 0x1, 0x8, 0x0, 0x10, 0x1 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET unloadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT - launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_TARGET 0x0 0x2 0x4f 0x1 + createvisualtask AnimTask_ShakeMon, 0x5, ANIM_TARGET, 0x0, 0x2, 0x4f, 0x1 call InfernoOverdriveExplosion delay 0x6 call InfernoOverdriveExplosion - launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_ALL_BATTLERS | ANIM_PAL_BG, 0x1, 0x0, 0x10, 0x001b @ red bg pal + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS), 0x1, 0x0, 0x10, 0x001b @ red bg pal delay 0x6 call InfernoOverdriveExplosion waitforvisualfinish @@ -26292,59 +26290,59 @@ FinishInfernoOverdrive: blendoff end InfernoOverdriveFireSpin: - launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x1c 0x210 0x1e 0xd 0x32 ANIM_ATTACKER + createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x210, 0x1e, 0xd, 0x32, ANIM_ATTACKER delay 0x2 - launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x20 0x1e0 0x14 0x10 0xffd2 ANIM_ATTACKER + createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x20, 0x1e0, 0x14, 0x10, 0xffd2, ANIM_ATTACKER delay 0x2 - launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x21 0x240 0x14 0x8 0x2a ANIM_ATTACKER + createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x240, 0x14, 0x8, 0x2a, ANIM_ATTACKER delay 0x2 - launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x1f 0x190 0x19 0xb 0xffd6 ANIM_ATTACKER + createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1f, 0x190, 0x19, 0xb, 0xffd6, ANIM_ATTACKER delay 0x2 - launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x1c 0x200 0x19 0x10 0x2e ANIM_ATTACKER + createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x200, 0x19, 0x10, 0x2e, ANIM_ATTACKER delay 0x2 - launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x21 0x1d0 0x1e 0xf 0xffce ANIM_ATTACKER + createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1d0, 0x1e, 0xf, 0xffce, ANIM_ATTACKER delay 0x2 return InfernoOverdriveExplosion: playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1 - launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xa 0x0 0xfffe - launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0xfffe 0x0 - launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0x2 0x0 - launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0xfffe 0x2 - launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0x2 0x2 + createsprite gInfernoOverdriveExplosionSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, ANIM_TARGET, 0x1 + createsprite gInfernoOverdriveExplosionSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xa, 0x0, 0xfffe + createsprite gInfernoOverdriveExplosionSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xd, 0xfffe, 0x0 + createsprite gInfernoOverdriveExplosionSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xd, 0x2, 0x0 + createsprite gInfernoOverdriveExplosionSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xf, 0xfffe, 0x2 + createsprite gInfernoOverdriveExplosionSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xf, 0x2, 0x2 delay 0x6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1 - launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xa 0x0 0xfffe - launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0xfffe 0x0 - launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0x2 0x0 - launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0xfffe 0x2 - launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0x2 0x2 + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0x18, 0xffe8, ANIM_TARGET, 0x1 + createsprite gInfernoOverdriveExplosionSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xa, 0x0, 0xfffe + createsprite gInfernoOverdriveExplosionSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xd, 0xfffe, 0x0 + createsprite gInfernoOverdriveExplosionSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xd, 0x2, 0x0 + createsprite gInfernoOverdriveExplosionSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xf, 0xfffe, 0x2 + createsprite gInfernoOverdriveExplosionSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xf, 0x2, 0x2 delay 0x6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1 - launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xa 0x0 0xfffe - launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0xfffe 0x0 - launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0x2 0x0 - launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0xfffe 0x2 - launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0x2 0x2 + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0xfff0, 0x10, ANIM_TARGET, 0x1 + createsprite gInfernoOverdriveExplosionSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xa, 0x0, 0xfffe + createsprite gInfernoOverdriveExplosionSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xd, 0xfffe, 0x0 + createsprite gInfernoOverdriveExplosionSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xd, 0x2, 0x0 + createsprite gInfernoOverdriveExplosionSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xf, 0xfffe, 0x2 + createsprite gInfernoOverdriveExplosionSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xf, 0x2, 0x2 delay 0x6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gExplosionSpriteTemplate 0x3 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 - launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xa 0x0 0xfffe - launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0xfffe 0x0 - launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0x2 0x0 - launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0xfffe 0x2 - launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0x2 0x2 + createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0xffe8, 0xfff4, ANIM_TARGET, 0x1 + createsprite gInfernoOverdriveExplosionSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xa, 0x0, 0xfffe + createsprite gInfernoOverdriveExplosionSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xd, 0xfffe, 0x0 + createsprite gInfernoOverdriveExplosionSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xd, 0x2, 0x0 + createsprite gInfernoOverdriveExplosionSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xf, 0xfffe, 0x2 + createsprite gInfernoOverdriveExplosionSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xf, 0x2, 0x2 delay 0x6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x10 0x10 ANIM_TARGET 0x1 - launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xa 0x0 0xfffe - launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0xfffe 0x0 - launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0x2 0x0 - launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0xfffe 0x2 - launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0x2 0x2 + createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x10, 0x10, ANIM_TARGET, 0x1 + createsprite gInfernoOverdriveExplosionSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xa, 0x0, 0xfffe + createsprite gInfernoOverdriveExplosionSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xd, 0xfffe, 0x0 + createsprite gInfernoOverdriveExplosionSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xd, 0x2, 0x0 + createsprite gInfernoOverdriveExplosionSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xf, 0xfffe, 0x2 + createsprite gInfernoOverdriveExplosionSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xf, 0x2, 0x2 return @@ -26355,28 +26353,28 @@ Move_HYDRO_VORTEX:: loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy loadspritegfx ANIM_TAG_METEOR @superpower loadspritegfx ANIM_TAG_WATER_ORB @whirlpool - launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish - launchtask AnimTask_CreateSurfWave 0x2 0x1 0x0 + createvisualtask AnimTask_CreateSurfWave, 0x2, 0x0 delay 0x18 panse SE_M_SURF, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0 waitforvisualfinish loadspritegfx ANIM_TAG_ROUND_SHADOW playsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER - launchtemplate gDiveBallSpriteTemplate 0x2 0x4 0x0 0x0 0xd 0x150 + createsprite gDiveBallSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0xd, 0x150 waitforvisualfinish playsewithpan SE_M_DIVE, SOUND_PAN_ATTACKER - launchtemplate gDiveWaterSplashSpriteTemplate 0x3 0x1 0x0 + createsprite gDiveWaterSplashSpriteTemplate, ANIM_ATTACKER, 3, 0x0 call DiveSetUpWaterDroplets call DiveSetUpWaterDroplets call DiveSetUpWaterDroplets call DiveSetUpWaterDroplets call DiveSetUpWaterDroplets - launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xfd00 0x15 0x0 0x1a + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0xfd00, 0x15, 0x0, 0x1a delay 0x1a invisible ANIM_TARGET waitforvisualfinish - launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x7 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x7 delay 0x5 fadetobg BG_WATER_PULSE waitbgfadeout @@ -26387,77 +26385,77 @@ Move_HYDRO_VORTEX:: call HydroVortexBubbles loadspritegfx ANIM_TAG_FOCUS_ENERGY playsewithpan SE_M_WATERFALL, SOUND_PAN_ATTACKER - launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xb 0x5da0 - launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1 + createvisualtask AnimTask_BlendColorCycle, 0x2, 0x2, 0x2, 0x2, 0x0, 0xb, 0x5da0 + createvisualtask AnimTask_ShakeMon2, 0x2, 0x0, 0x1, 0x0, 0x20, 0x1 waitforvisualfinish unloadspritegfx ANIM_TAG_SPLASH unloadspritegfx ANIM_TAG_SWEAT_BEAD loadspritegfx ANIM_TAG_IMPACT - launchtemplate gHydroVortexSuperpowerSpriteTemplate 0x83 0x1 0x0 + createsprite gHydroVortexSuperpowerSpriteTemplate, ANIM_TARGET, 3, 0x0 playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER invisible ANIM_ATTACKER delay 0x10 - launchtemplate gHydroVortexImpactSpriteTemplate 0x83 0x4 0xa 0xfff8 0x1 0x1 + createsprite gHydroVortexImpactSpriteTemplate, ANIM_TARGET, 3, 0xa, 0xfff8, 0x1, 0x1 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 0x4 0x2 0x0 0x10 0x5da0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, 0x4, 0x2, 0x0, 0x10, 0x5da0 loadspritegfx ANIM_TAG_GUST - launchtask AnimTask_HorizontalShake 0x5 0x3 0x1 0x8 0x3c + createvisualtask AnimTask_HorizontalShake, 0x5, 0x1, 0x8, 0x3c call HydroVortexWhirlpoolHurricane call HydroVortexWhirlpoolHurricane call HydroVortexWhirlpoolHurricane call HydroVortexWhirlpoolHurricane waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 0x4 0x2 0x10 0x0 0x5da0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, 0x4, 0x2, 0x10, 0x0, 0x5da0 waitforvisualfinish restorebg waitbgfadeout - launchtask AnimTask_AllBanksVisible 0xA 0x0 + createvisualtask AnimTask_AllBanksVisible, 0xA waitforvisualfinish end HydroVortexBubbles: - launchtemplate gSmallBubblePairSpriteTemplate 0x2 0x4 0xa 0xa 0x14 ANIM_ATTACKER + createsprite gSmallBubblePairSpriteTemplate, ANIM_ATTACKER, 2, 0xa, 0xa, 0x14, ANIM_ATTACKER createsprite gSmallBubblePairSpriteTemplate, ANIM_TARGET, 2, 0xa, 0xa, 0x14, ANIM_TARGET delay 0x4 - launchtemplate gSmallBubblePairSpriteTemplate 0x2 0x4 0x14 0xffec 0x14 ANIM_ATTACKER + createsprite gSmallBubblePairSpriteTemplate, ANIM_ATTACKER, 2, 0x14, 0xffec, 0x14, ANIM_ATTACKER createsprite gSmallBubblePairSpriteTemplate, ANIM_TARGET, 2, 0x14, 0xffec, 0x14, ANIM_TARGET delay 0x4 - launchtemplate gSmallBubblePairSpriteTemplate 0x2 0x4 0xfff1 0xf 0x14 ANIM_ATTACKER + createsprite gSmallBubblePairSpriteTemplate, ANIM_ATTACKER, 2, 0xfff1, 0xf, 0x14, ANIM_ATTACKER createsprite gSmallBubblePairSpriteTemplate ANIM_TARGET, 2, 0xfff1, 0xf, 0x14, ANIM_TARGET delay 0x4 - launchtemplate gSmallBubblePairSpriteTemplate 0x2 0x4 0x0 0x0 0x14 ANIM_ATTACKER + createsprite gSmallBubblePairSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x14, ANIM_ATTACKER createsprite gSmallBubblePairSpriteTemplate ANIM_TARGET, 2, 0x0, 0x0, 0x14, ANIM_TARGET delay 0x4 - launchtemplate gSmallBubblePairSpriteTemplate 0x2 0x4 0xfff6 0xffec 0x14 ANIM_ATTACKER + createsprite gSmallBubblePairSpriteTemplate, ANIM_ATTACKER, 2, 0xfff6, 0xffec, 0x14, ANIM_ATTACKER createsprite gSmallBubblePairSpriteTemplate ANIM_TARGET, 2, 0xfff6, 0xffec, 0x14, ANIM_TARGET delay 0x4 - launchtemplate gSmallBubblePairSpriteTemplate 0x2 0x4 0x10 0xfff8 0x14 ANIM_ATTACKER + createsprite gSmallBubblePairSpriteTemplate, ANIM_ATTACKER, 2, 0x10, 0xfff8, 0x14, ANIM_ATTACKER createsprite gSmallBubblePairSpriteTemplate ANIM_TARGET, 2, 0x10, 0xfff8, 0x14, ANIM_TARGET delay 0x4 - launchtemplate gSmallBubblePairSpriteTemplate 0x2 0x4 0x5 0x8 0x14 ANIM_ATTACKER + createsprite gSmallBubblePairSpriteTemplate, ANIM_ATTACKER, 2, 0x5, 0x8, 0x14, ANIM_ATTACKER createsprite gSmallBubblePairSpriteTemplate ANIM_TARGET, 2, 0x5, 0x8, 0x14, ANIM_TARGET delay 0x4 - launchtemplate gSmallBubblePairSpriteTemplate 0x2 0x4 0xfff0 0x0 0x14 ANIM_ATTACKER + createsprite gSmallBubblePairSpriteTemplate, ANIM_ATTACKER, 2, 0xfff0, 0x0, 0x14, ANIM_ATTACKER createsprite gSmallBubblePairSpriteTemplate ANIM_TARGET, 2, 0xfff0, 0x0, 0x14, ANIM_TARGET return HydroVortexWhirlpoolHurricane: playsewithpan SE_M_WHIRLPOOL, SOUND_PAN_TARGET - launchtemplate gHydroVortexHurricaneSpriteTemplate 0x82 0x2 0x0 0xfff0 - launchtemplate gHydroVortexImpactSpriteTemplate 0x83 0x4 0xfff6 0xfff8 0x1 0x1 - launchtask AnimTask_AnimateGustTornadoPalette 0x5 0x2 0x1 0x46 - launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1c 0x180 0x32 0x8 0x32 0x1 + createsprite gHydroVortexHurricaneSpriteTemplate, ANIM_TARGET, 2, 0x0, 0xfff0 + createsprite gHydroVortexImpactSpriteTemplate, ANIM_TARGET, 3, 0xfff6, 0xfff8, 0x1, 0x1 + createvisualtask AnimTask_AnimateGustTornadoPalette, 0x5, 0x1, 0x46 + createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x180, 0x32, 0x8, 0x32, 0x1 delay 0x2 - launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x20 0xf0 0x28 0xb 0xffd2 0x1 + createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x20, 0xf0, 0x28, 0xb, 0xffd2, 0x1 delay 0x2 - launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x21 0x1a0 0x28 0x4 0x2a 0x1 + createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1a0, 0x28, 0x4, 0x2a, 0x1 delay 0x2 - launchtemplate gHydroVortexImpactSpriteTemplate 0x83 0x4 0xa 0xfff8 0x1 0x1 - launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1f 0x120 0x2d 0x6 0xffd6 0x1 + createsprite gHydroVortexImpactSpriteTemplate, ANIM_TARGET, 3, 0xa, 0xfff8, 0x1, 0x1 + createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1f, 0x120, 0x2d, 0x6, 0xffd6, 0x1 delay 0x2 - launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1c 0x1c0 0x2d 0xb 0x2e 0x1 - launchtemplate gHydroVortexHurricaneSpriteTemplate 0x82 0x2 0x0 0xfff0 - launchtask AnimTask_AnimateGustTornadoPalette 0x5 0x2 0x1 0x46 + createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x1c0, 0x2d, 0xb, 0x2e, 0x1 + createsprite gHydroVortexHurricaneSpriteTemplate, ANIM_TARGET, 2, 0x0, 0xfff0 + createvisualtask AnimTask_AnimateGustTornadoPalette, 0x5, 0x1, 0x46 delay 0x2 - launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x21 0x1d0 0x32 0xa 0xffce 0x1 + createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1d0, 0x32, 0xa, 0xffce, 0x1 delay 0x2 return @@ -26469,33 +26467,33 @@ Move_BLOOM_DOOM:: loadspritegfx ANIM_TAG_GUST @hurricane loadspritegfx ANIM_TAG_VERTICAL_HEX @hex diamond monbg ANIM_ATTACKER - launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish - setblends 0x80c - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x4 0x0 + setalpha 12, 8 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x4, 0x0 loopsewithpan SE_SHINY, SOUND_PAN_ATTACKER, 0x9, 0x3 - launchtemplate gBloomDoomGreenChargeSpriteTemplate 0x2 0x1 0x0 + createsprite gBloomDoomGreenChargeSpriteTemplate, ANIM_ATTACKER, 2, 0x0 delay 0x3C blendoff - launchtemplate gBloomDoomPetalSpinSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x0 + createsprite gBloomDoomPetalSpinSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x0 playsewithpan SE_M_ATTRACT, SOUND_PAN_ATTACKER delay 0x2 - launchtemplate gBloomDoomPetalSpinSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x4 + createsprite gBloomDoomPetalSpinSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x4 delay 0x2 - launchtemplate gBloomDoomPetalSpinSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x8 + createsprite gBloomDoomPetalSpinSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x8 playsewithpan SE_M_ATTRACT, SOUND_PAN_ATTACKER delay 0x2 - launchtemplate gBloomDoomPetalSpinSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0xc + createsprite gBloomDoomPetalSpinSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0xc delay 0x2 - launchtemplate gBloomDoomPetalSpinSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x10 + createsprite gBloomDoomPetalSpinSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x10 playsewithpan SE_M_ATTRACT, SOUND_PAN_ATTACKER delay 0x2 - launchtemplate gBloomDoomPetalSpinSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x14 + createsprite gBloomDoomPetalSpinSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x14 delay 0x2 - launchtemplate gBloomDoomPetalSpinSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x18 + createsprite gBloomDoomPetalSpinSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x18 playsewithpan SE_M_ATTRACT, SOUND_PAN_ATTACKER waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x4 0x0 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x4, 0x0, 0x0 waitforvisualfinish unloadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT call BloomDoomHurricane @@ -26526,19 +26524,19 @@ Move_BLOOM_DOOM:: waitbgfadein loadspritegfx ANIM_TAG_ORBS delay 0x5 - launchtemplate gAromatherapySmallFlowerSpriteTemplate 0x0 0x7 0x18 0x10 0x0 0x2 0x2 0x0 0x0 - launchtemplate gAromatherapySmallFlowerSpriteTemplate 0x42 0x7 0x40 0x18 0x0 0x3 0x1 0x1 0x0 - launchtemplate gAromatherapyBigFlowerSpriteTemplate 0x0 0x7 0x10 0x18 0x0 0x2 0x1 0x0 0x0 + createsprite gAromatherapySmallFlowerSpriteTemplate, ANIM_ATTACKER, 0, 0x18, 0x10, 0x0, 0x2, 0x2, 0x0, 0x0 + createsprite gAromatherapySmallFlowerSpriteTemplate, ANIM_ATTACKER, 66, 0x40, 0x18, 0x0, 0x3, 0x1, 0x1, 0x0 + createsprite gAromatherapyBigFlowerSpriteTemplate, ANIM_ATTACKER, 0, 0x10, 0x18, 0x0, 0x2, 0x1, 0x0, 0x0 delay 0x5 - launchsoundtask SoundTask_LoopSEAdjustPanning, 0x7, 0xf0, 0xffc0, SOUND_PAN_TARGET, 0x1, 0xf, 0x0, 0x5 - launchtask AnimTask_ShakeMon 0x2 0x5 0x0 0x0 0x4 0x32 0x1 @ shake attacker + createsoundtask SoundTask_LoopSEAdjustPanning, 0xf0, 0xffc0, SOUND_PAN_TARGET, 0x1, 0xf, 0x0, 0x5 + createvisualtask AnimTask_ShakeMon, 0x2, 0x0, 0x0, 0x4, 0x32, 0x1 @ shake attacker call BloomDoomHyperBeam call BloomDoomHyperBeam call BloomDoomHyperBeam call BloomDoomHyperBeam call BloomDoomHyperBeam - launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x4 0x0 0x72 0x1 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 0x4 0x2 0x0 0xb 0x33ed + createvisualtask AnimTask_ShakeMon2, 0x2, 0x1, 0x4, 0x0, 0x72, 0x1 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, 0x4, 0x2, 0x0, 0xb, 0x33ed call BloomDoomHyperBeam call BloomDoomHyperBeam call BloomDoomHyperBeam @@ -26550,9 +26548,9 @@ Move_BLOOM_DOOM:: call BloomDoomHyperBeam call BloomDoomHyperBeam call BloomDoomHyperBeam - launchtemplate gAromatherapySmallFlowerSpriteTemplate 0x42 0x7 0x30 0xc 0x0 0x4 0x3 0x1 0x0 - launchtemplate gAromatherapySmallFlowerSpriteTemplate 0x0 0x7 0x64 0x10 0x0 0x3 0x2 0x0 0x0 - launchtemplate gAromatherapySmallFlowerSpriteTemplate 0x0 0x7 0x4a 0x18 0xb4 0x3 0x2 0x0 0x0 + createsprite gAromatherapySmallFlowerSpriteTemplate, ANIM_ATTACKER, 66, 0x30, 0xc, 0x0, 0x4, 0x3, 0x1, 0x0 + createsprite gAromatherapySmallFlowerSpriteTemplate, ANIM_ATTACKER, 0, 0x64, 0x10, 0x0, 0x3, 0x2, 0x0, 0x0 + createsprite gAromatherapySmallFlowerSpriteTemplate, ANIM_ATTACKER, 0, 0x4a, 0x18, 0xb4, 0x3, 0x2, 0x0, 0x0 call BloomDoomHyperBeam call BloomDoomHyperBeam call BloomDoomHyperBeam @@ -26563,18 +26561,18 @@ Move_BLOOM_DOOM:: call BloomDoomHyperBeam call BloomDoomHyperBeam call BloomDoomHyperBeam - launchtemplate gAromatherapySmallFlowerSpriteTemplate 0x42 0x7 0x50 0x1e 0x0 0x4 0x1 0x1 0x0 - launchtemplate gAromatherapySmallFlowerSpriteTemplate 0x0 0x7 0x80 0xc 0x0 0x3 0x3 0x0 0x0 - launchtemplate gAromatherapyBigFlowerSpriteTemplate 0x0 0x7 0x5a 0x10 0x0 0x2 0x1 0x0 0x0 + createsprite gAromatherapySmallFlowerSpriteTemplate, ANIM_ATTACKER, 66, 0x50, 0x1e, 0x0, 0x4, 0x1, 0x1, 0x0 + createsprite gAromatherapySmallFlowerSpriteTemplate, ANIM_ATTACKER, 0, 0x80, 0xc, 0x0, 0x3, 0x3, 0x0, 0x0 + createsprite gAromatherapyBigFlowerSpriteTemplate, ANIM_ATTACKER, 0, 0x5a, 0x10, 0x0, 0x2, 0x1, 0x0, 0x0 delay 0x5 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 0x4 0x2 0xb 0x0 0x33ed + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, 0x4, 0x2, 0xb, 0x0, 0x33ed loadspritegfx ANIM_TAG_EXPLOSION @explosion call BloomDoomPetalBlast - launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_DEF, 0x1, 0x0, 0x10, 0x33ed + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x1, 0x0, 0x10, 0x33ed call BloomDoomPetalBlast - launchtask AnimTask_IsTargetPartner 0x5 0x0 + createvisualtask AnimTask_IsTargetPartner, 0x5 jumpargeq 0x0 0x1 BloomDoomFadeScreenTargetPartner - launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_ALL - ANIM_PAL_DEF, 0x1, 0x0, 0x10, 0x33ed @ green bg pal + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_ALL_BUT_DEF), 0x1, 0x0, 0x10, 0x33ed @ green bg pal BloomDoomEnding: call BloomDoomPetalBlast waitforvisualfinish @@ -26582,76 +26580,76 @@ BloomDoomEnding: call ResetFromGreenScreen end BloomDoomFadeScreenTargetPartner: - launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG | ANIM_PAL_ATK | ANIM_PAL_OPPONENT1 | ANIM_PAL_OPPONENT2, 0x1, 0x0, 0x10, 0x33ed @ green bg pal + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_ALL_BUT_ATK_PARTNER), 0x1, 0x0, 0x10, 0x33ed @ green bg pal goto BloomDoomEnding BloomDoomHurricane: - launchtemplate gBloomDoomHurricaneSpriteTemplate 0x2 0x2 0x0 0xfff0 - launchtask AnimTask_AnimateGustTornadoPalette 0x5 0x2 0x1 0x46 + createsprite gBloomDoomHurricaneSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff0 + createvisualtask AnimTask_AnimateGustTornadoPalette, 0x5, 0x1, 0x46 return BloomDoomFlowerGeyser: - launchtemplate gBloomDoomFlowerGeyserSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0xfffc 0x10 @ -4, -0x10 + createsprite gBloomDoomFlowerGeyserSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0xfffc, 0x10 @ -4, -0x10 delay 0x0 - launchtemplate gBloomDoomFlowerGeyserSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0x100D 0x10 @ + createsprite gBloomDoomFlowerGeyserSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x100D, 0x10 delay 0x0 - launchtemplate gBloomDoomFlowerGeyserSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0x4 0x10 + createsprite gBloomDoomFlowerGeyserSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x4, 0x10 delay 0x0 - launchtemplate gBloomDoomFlowerGeyserSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0xfff0 0x10 + createsprite gBloomDoomFlowerGeyserSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0xfff0, 0x10 delay 0x0 return BloomDoomHyperBeam: - launchtemplate gBloomDoomGreenBeamSpriteTemplate 0x82 0x0 - launchtemplate gBloomDoomGreenBeamSpriteTemplate 0x82 0x0 + createsprite gBloomDoomGreenBeamSpriteTemplate, ANIM_TARGET, 2 + createsprite gBloomDoomGreenBeamSpriteTemplate, ANIM_TARGET, 2 delay 0x1 return BloomDoomPetalBlast: playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gBloomDoomExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1 - launchtemplate gBloomDoomPetalStarSpriteTemplate 0x82 0x5 0x1 0x0 0x0 0xffe0 0x10 + createsprite gBloomDoomExplosionSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, ANIM_TARGET, 0x1 + createsprite gBloomDoomPetalStarSpriteTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x0, 0xffe0, 0x10 delay 0x2 - launchtemplate gBloomDoomPetalStarSpriteTemplate 0x82 0x5 0x1 0x0 0x16 0xffea 0x10 + createsprite gBloomDoomPetalStarSpriteTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x16, 0xffea, 0x10 delay 0x2 - launchtemplate gBloomDoomPetalStarSpriteTemplate 0x82 0x5 0x1 0x0 0x1e 0x0 0x10 + createsprite gBloomDoomPetalStarSpriteTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x1e, 0x0, 0x10 delay 0x2 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gBloomDoomExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1 - launchtemplate gBloomDoomPetalStarSpriteTemplate 0x82 0x5 0x1 0x0 0x14 0x14 0x10 + createsprite gBloomDoomExplosionSpriteTemplate, ANIM_TARGET, 3, 0x18, 0xffe8, ANIM_TARGET, 0x1 + createsprite gBloomDoomPetalStarSpriteTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x14, 0x14, 0x10 delay 0x2 - launchtemplate gBloomDoomPetalStarSpriteTemplate 0x82 0x5 0x1 0x0 0x0 0x1c 0x10 + createsprite gBloomDoomPetalStarSpriteTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x0, 0x1c, 0x10 delay 0x2 - launchtemplate gBloomDoomPetalStarSpriteTemplate 0x82 0x5 0x1 0x0 0xffed 0x13 0x10 + createsprite gBloomDoomPetalStarSpriteTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0xffed, 0x13, 0x10 delay 0x2 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gBloomDoomExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1 - launchtemplate gBloomDoomPetalStarSpriteTemplate 0x82 0x5 0x1 0x0 0xffe5 0x0 0x10 + createsprite gBloomDoomExplosionSpriteTemplate, ANIM_TARGET, 3, 0xfff0, 0x10, ANIM_TARGET, 0x1 + createsprite gBloomDoomPetalStarSpriteTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0xffe5, 0x0, 0x10 delay 0x2 - launchtemplate gBloomDoomPetalStarSpriteTemplate 0x82 0x5 0x1 0x0 0xffee 0xffee 0x10 + createsprite gBloomDoomPetalStarSpriteTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0xffee, 0xffee, 0x10 delay 0x2 - launchtemplate gBloomDoomPetalStarSpriteTemplate 0x82 0x5 0x1 0x0 0x0 0xffe7 0x10 + createsprite gBloomDoomPetalStarSpriteTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x0, 0xffe7, 0x10 delay 0x2 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gBloomDoomExplosionSpriteTemplate 0x3 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 - launchtemplate gBloomDoomPetalStarSpriteTemplate 0x82 0x5 0x1 0x0 0x11 0xffef 0x10 + createsprite gBloomDoomExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0xffe8, 0xfff4, ANIM_TARGET, 0x1 + createsprite gBloomDoomPetalStarSpriteTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x11, 0xffef, 0x10 delay 0x2 - launchtemplate gBloomDoomPetalStarSpriteTemplate 0x82 0x5 0x1 0x0 0x17 0x0 0x10 + createsprite gBloomDoomPetalStarSpriteTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x17, 0x0, 0x10 delay 0x2 - launchtemplate gBloomDoomPetalStarSpriteTemplate 0x82 0x5 0x1 0x0 0x10 0x10 0x10 + createsprite gBloomDoomPetalStarSpriteTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x10, 0x10, 0x10 delay 0x2 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gBloomDoomExplosionSpriteTemplate 0x3 0x4 0x10 0x10 ANIM_TARGET 0x1 + createsprite gBloomDoomExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x10, 0x10, ANIM_TARGET, 0x1 delay 0x2 return ResetFromGreenScreen: - launchtask AnimTask_AllBanksInvisible 0xA 0x0 + createvisualtask AnimTask_AllBanksInvisible, 0xA waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_ALL_BATTLERS, 0x2, 0x0, 0x0, 0x33ED @Everything from green + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BATTLERS, 0x2, 0x0, 0x0, 0x33ED @Everything from green restorebg waitbgfadeout setarg 0x7 0xffff - launchtask AnimTask_AllBanksVisible 0xA 0x0 + createvisualtask AnimTask_AllBanksVisible, 0xA waitbgfadein waitforvisualfinish delay 0x5 - launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG, 0x1, 0x0, 0x0, 0x33ED + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x0, 0x33ED waitforvisualfinish return @@ -26664,118 +26662,118 @@ Move_GIGAVOLT_HAVOC:: loadspritegfx ANIM_TAG_SPARK_2 loadspritegfx ANIM_TAG_GRAY_SMOKE loadspritegfx ANIM_TAG_THIN_RING - launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x6 0x0 0x10 0x0000 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x6, 0x0, 0x10, 0x0000 playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER - launchtemplate gGigavoltHavocChargingSpearSpriteTemplate 0x2 0x1 ANIM_ATTACKER - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0 - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0 - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1 + createsprite gGigavoltHavocChargingSpearSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0x20, 0x18, 0xbe, 0xc, 0x0, 0x1, 0x0 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0x50, 0x18, 0x16, 0xc, 0x0, 0x1, 0x0 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0x9c, 0x18, 0x79, 0xd, 0x0, 0x1, 0x1 delay 0xa playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0 - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0x64, 0x18, 0x3c, 0xa, 0x0, 0x1, 0x0 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0xaa, 0x18, 0x2a, 0xb, 0x0, 0x1, 0x1 delay 0x0 - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0xee, 0x18, 0xa5, 0xa, 0x0, 0x1, 0x1 delay 0x0 delay 0x5 - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0 - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0x64, 0x18, 0x3c, 0xa, 0x0, 0x1, 0x0 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0xaa, 0x18, 0x2a, 0xb, 0x0, 0x1, 0x1 delay 0x0 - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0xee, 0x18, 0xa5, 0xa, 0x0, 0x1, 0x1 delay 0x5 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x4 0x8 0x0 0x0 0x10 0xc 0x20 0x14 0x0 0x0 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x4 0x8 0x0 0x0 0x10 0xc 0x60 0x14 0x1 0x0 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x4 0x8 0x0 0x0 0x10 0xc 0xa0 0x14 0x0 0x0 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x4 0x8 0x0 0x0 0x10 0xc 0xe0 0x14 0x2 0x0 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0x0, 0x0, 0x10, 0xc, 0x20, 0x14, 0x0, 0x0 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0x0, 0x0, 0x10, 0xc, 0x60, 0x14, 0x1, 0x0 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0x0, 0x0, 0x10, 0xc, 0xa0, 0x14, 0x0, 0x0 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0x0, 0x0, 0x10, 0xc, 0xe0, 0x14, 0x2, 0x0 delay 0x5 - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0 - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0x64, 0x18, 0x3c, 0xa, 0x0, 0x1, 0x0 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0xaa, 0x18, 0x2a, 0xb, 0x0, 0x1, 0x1 delay 0x0 - launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0xee, 0x18, 0xa5, 0xa, 0x0, 0x1, 0x1 playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER monbg ANIM_ATTACKER playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER -@ launchtask AnimTask_ElectricChargingParticles 0x2 0x4 0x0 0x3c 0x2 0xc @charge particles to user -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x82 0x8 0x0 0x0 0x10 0x2c 0x20 0x28 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x82 0x8 0x0 0x0 0x10 0x2c 0x60 0x28 0x1 0x3 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x82 0x8 0x0 0x0 0x10 0x2c 0xa0 0x28 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x82 0x8 0x0 0x0 0x10 0x2c 0xe0 0x28 0x2 0x3 +@ createvisualtask AnimTask_ElectricChargingParticles, 0x2, 0x0, 0x3c, 0x2, 0xc @charge particles to user +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x10, 0x2c, 0x20, 0x28, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x10, 0x2c, 0x60, 0x28, 0x1, 0x3 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x10, 0x2c, 0xa0, 0x28, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x10, 0x2c, 0xe0, 0x28, 0x2, 0x3 delay 0x14 playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x82 0x8 0x0 0x0 0x12 0x2c 0x0 0x28 0x0 0x3 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x82 0x8 0x0 0x0 0x12 0x2c 0x40 0x28 0x1 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x82 0x8 0x0 0x0 0x12 0x2c 0x80 0x28 0x0 0x3 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x82 0x8 0x0 0x0 0x12 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x12, 0x2c, 0x0, 0x28, 0x0, 0x3 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x12, 0x2c, 0x40, 0x28, 0x1, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x12, 0x2c, 0x80, 0x28, 0x0, 0x3 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x12, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x3 delay 0x14 playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x82 0x8 0x0 0x0 0x14 0x2c 0x0 0x28 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x82 0x8 0x0 0x0 0x14 0x2c 0x40 0x28 0x1 0x3 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x82 0x8 0x0 0x0 0x14 0x2c 0x80 0x28 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x82 0x8 0x0 0x0 0x14 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x14, 0x2c, 0x0, 0x28, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x14, 0x2c, 0x40, 0x28, 0x1, 0x3 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x14, 0x2c, 0x80, 0x28, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x14, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x3 delay 0x14 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x0 0x28 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x40 0x28 0x1 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x80 0x28 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x0, 0x28, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x40, 0x28, 0x1, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x80, 0x28, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x3 delay 0x14 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x0 0x28 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x40 0x28 0x1 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x80 0x28 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x0, 0x28, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x40, 0x28, 0x1, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x80, 0x28, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x3 delay 0x14 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x0 0x28 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x40 0x28 0x1 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x80 0x28 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x0, 0x28, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x40, 0x28, 0x1, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x80, 0x28, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x3 delay 0x14 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x0 0x28 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x40 0x28 0x1 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x80 0x28 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x0, 0x28, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x40, 0x28, 0x1, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x80, 0x28, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x3 delay 0x14 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x0 0x28 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x40 0x28 0x1 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x80 0x28 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x0, 0x28, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x40, 0x28, 0x1, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x80, 0x28, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x3 delay 0x14 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x0 0x28 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x40 0x28 0x1 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x80 0x28 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x0, 0x28, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x40, 0x28, 0x1, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x80, 0x28, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x3 delay 0x14 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x0 0x28 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x40 0x28 0x1 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x80 0x28 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x0, 0x28, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x40, 0x28, 0x1, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x80, 0x28, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x3 delay 0x14 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x0 0x28 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x40 0x28 0x1 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x80 0x28 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x0, 0x28, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x40, 0x28, 0x1, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x80, 0x28, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x3 delay 0x14 waitforvisualfinish playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET - launchtemplate gGigavoltHavocLaunchSpearSpriteTemplate 0x83 0x1 0x0 - launchtemplate gElectricPuffSpriteTemplate 0x2 0x3 0x0 0x10 0x10 + createsprite gGigavoltHavocLaunchSpearSpriteTemplate, ANIM_TARGET, 3, 0x0 + createsprite gElectricPuffSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x10, 0x10 delay 0x2 - launchtemplate gElectricPuffSpriteTemplate 0x2 0x3 0x0 0xfff0 0xfff0 + createsprite gElectricPuffSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff0, 0xfff0 delay 0xe clearmonbg ANIM_ATTACKER - launchtask AnimTask_HorizontalShake 0x5 0x3 ANIM_TARGET 0x8 0x1c @shake target + createvisualtask AnimTask_HorizontalShake, 0x5, ANIM_TARGET, 0x8, 0x1c @shake target unloadspritegfx ANIM_TAG_HAVOC_SPEAR loadspritegfx ANIM_TAG_SHOCK_3 @thunderbolt - launchtemplate gThunderboltOrbSpriteTemplate 0x83 0x4 0x2c 0x0 0x0 0x3 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x0 0x0 0xc 0x5bff -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x20 0x2c 0x0 0x28 0x0 0x8003 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x20 0x2c 0x40 0x28 0x1 0x8003 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x20 0x2c 0x80 0x28 0x0 0x8003 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x20 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x8003 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x10 0x2c 0x20 0x28 0x0 0x8003 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x10 0x2c 0x60 0x28 0x1 0x8003 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x10 0x2c 0xa0 0x28 0x0 0x8003 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x10 0x2c 0xe0 0x28 0x2 0x8003 + createsprite gThunderboltOrbSpriteTemplate, ANIM_TARGET, 3, 0x2c, 0x0, 0x0, 0x3 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x0, 0x0, 0xc, 0x5bff +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x20, 0x2c, 0x0, 0x28, 0x0, 0x8003 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x20, 0x2c, 0x40, 0x28, 0x1, 0x8003 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x20, 0x2c, 0x80, 0x28, 0x0, 0x8003 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x20, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x8003 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x10, 0x2c, 0x20, 0x28, 0x0, 0x8003 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x10, 0x2c, 0x60, 0x28, 0x1, 0x8003 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x10, 0x2c, 0xa0, 0x28, 0x0, 0x8003 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x10, 0x2c, 0xe0, 0x28, 0x2, 0x8003 playsewithpan SE_M_HYPER_BEAM, SOUND_PAN_TARGET delay 0x19 loadspritegfx ANIM_TAG_VERTICAL_HEX @@ -26801,11 +26799,11 @@ Move_GIGAVOLT_HAVOC:: @ call HavocSpearSparkTarget call HavocSpearGeyser playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET - launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_DEF, 0x2, 0xc, 0x0, 0x5bff + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x2, 0xc, 0x0, 0x5bff waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG, 0x1, 0x10, 0x0, 0x0000 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x10, 0x0, 0x0000 waitforvisualfinish - launchtask AnimTask_AllBanksVisible 0xa 0x0 + createvisualtask AnimTask_AllBanksVisible, 0xa waitforvisualfinish end HavocSpearGeyser: @@ -26819,14 +26817,14 @@ HavocSpearGeyser: delay 1 return HavocSpearSparkTarget: -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x4 0x8 0x0 0x0 0x20 0xc 0x0 0x14 0x0 0x8000 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x4 0x8 0x0 0x0 0x10 0xc 0x0 0x14 0x0 0x8000 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x4 0x8 0x0 0x0 0x20 0xc 0x40 0x14 0x1 0x8000 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x4 0x8 0x0 0x0 0x10 0xc 0x40 0x14 0x1 0x8000 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x4 0x8 0x0 0x0 0x20 0xc 0x80 0x14 0x0 0x8000 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x4 0x8 0x0 0x0 0x10 0xc 0x80 0x14 0x0 0x8000 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x4 0x8 0x0 0x0 0x20 0xc SOUND_PAN_ATTACKER 0x14 0x2 0x8000 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x4 0x8 0x0 0x0 0x10 0xc SOUND_PAN_ATTACKER 0x14 0x2 0x8000 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0x0, 0x0, 0x20, 0xc, 0x0, 0x14, 0x0, 0x8000 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0x0, 0x0, 0x10, 0xc, 0x0, 0x14, 0x0, 0x8000 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0x0, 0x0, 0x20, 0xc, 0x40, 0x14, 0x1, 0x8000 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0x0, 0x0, 0x10, 0xc, 0x40, 0x14, 0x1, 0x8000 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0x0, 0x0, 0x20, 0xc, 0x80, 0x14, 0x0, 0x8000 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0x0, 0x0, 0x10, 0xc, 0x80, 0x14, 0x0, 0x8000 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0x0, 0x0, 0x20, 0xc, SOUND_PAN_ATTACKER, 0x14, 0x2, 0x8000 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0x0, 0x0, 0x10, 0xc, SOUND_PAN_ATTACKER, 0x14, 0x2, 0x8000 return @@ -26837,46 +26835,46 @@ Move_SHATTERED_PSYCHE:: loadspritegfx ANIM_TAG_THIN_RING @ring loadspritegfx ANIM_TAG_PINK_PETAL @pink loadspritegfx ANIM_TAG_TORN_METAL @brick break shatter - launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPalExclude 0x5 0x5 0x0 0x0 0x0 0x10 0x0 + createvisualtask AnimTask_BlendBattleAnimPalExclude, 0x5, 0x0, 0x0, 0x0, 0x10, 0x0 waitforvisualfinish - launchtask AnimTask_SetAllNonAttackersInvisiblity 0x5 0x1 0x1 + createvisualtask AnimTask_SetAllNonAttackersInvisiblity, 0x5, 0x1 waitforvisualfinish - launchtemplate gShatteredPsychePinkChargeSpriteTemplate 0x2 0x1 0x0 - launchtemplate gShatteredPsycheRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0 + createsprite gShatteredPsychePinkChargeSpriteTemplate, ANIM_ATTACKER, 2, 0x0 + createsprite gShatteredPsycheRingSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0 playsewithpan SE_M_SUPERSONIC, SOUND_PAN_ATTACKER delay 0xc - launchtemplate gShatteredPsycheRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0 + createsprite gShatteredPsycheRingSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0 delay 0xc - launchtemplate gShatteredPsycheRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0 + createsprite gShatteredPsycheRingSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0 playsewithpan SE_M_SUPERSONIC, SOUND_PAN_ATTACKER delay 0xc - launchtemplate gShatteredPsycheRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0 + createsprite gShatteredPsycheRingSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0 delay 0xc - launchtemplate gShatteredPsycheRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0 + createsprite gShatteredPsycheRingSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0 playsewithpan SE_M_SUPERSONIC, SOUND_PAN_ATTACKER delay 0xc - launchtemplate gShatteredPsycheRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0 + createsprite gShatteredPsycheRingSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0 delay 0xc - launchtemplate gShatteredPsycheRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0 + createsprite gShatteredPsycheRingSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0 playsewithpan SE_M_SUPERSONIC, SOUND_PAN_ATTACKER delay 0xc - launchtemplate gShatteredPsycheRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0 + createsprite gShatteredPsycheRingSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0 delay 0xc - launchtemplate gShatteredPsycheRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0 + createsprite gShatteredPsycheRingSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0 playsewithpan SE_M_SUPERSONIC, SOUND_PAN_ATTACKER delay 0x4 fadetobg BG_SHATTERED_PSYCHE delay 0x4 - launchtask AnimTask_BlendBattleAnimPalExclude 0x5 0x5 0x0 0x0 0x10 0x0 0x0 + createvisualtask AnimTask_BlendBattleAnimPalExclude, 0x5, 0x0, 0x0, 0x10, 0x0, 0x0 delay 0x7 playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER - launchtask AnimTask_ShakeMon 0x2 0x5 0x1 0x3 0x0 0xf 0x1 - launchtask AnimTask_ScaleMonAndRestore 0x5 0x5 0xfffc 0xfffc 0xf 0x1 0x1 + createvisualtask AnimTask_ShakeMon, 0x2, 0x1, 0x3, 0x0, 0xf, 0x1 + createvisualtask AnimTask_ScaleMonAndRestore, 0x5, 0xfffc, 0xfffc, 0xf, 0x1, 0x1 waitforvisualfinish ShatteredPsycheCheckBattler: - launchtask AnimTask_IsTargetPlayerSide 0x2 0x0 + createvisualtask AnimTask_IsTargetPlayerSide, 0x2 jumpargeq 0x7 ANIM_TARGET ShatteredPsycheOnPlayer ShatteredPsycheOnOpponent: call ShatteredPsycheFlingOpponent @@ -26891,102 +26889,102 @@ ShatteredPsycheFinish: delay 0x8 playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET restorebg - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0xf 0x1 - launchtask AnimTask_ScaleMonAndRestore 0x5 0x5 0xfffc 0xfffc 0xf 0x1 0x1 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x3, 0x0, 0xf, 0x1 + createvisualtask AnimTask_ScaleMonAndRestore, 0x5, 0xfffc, 0xfffc, 0xf, 0x1, 0x1 createsprite gBrickBreakWallShardSpriteTemplate ANIM_TARGET, 2, 0x1, 0x0, 0x0, 0x0 @ -8, -12 createsprite gBrickBreakWallShardSpriteTemplate ANIM_TARGET, 2, 0x1, 0x1, 0x0, 0x0 createsprite gBrickBreakWallShardSpriteTemplate ANIM_TARGET, 2, 0x1, 0x2, 0x0, 0x0 createsprite gBrickBreakWallShardSpriteTemplate ANIM_TARGET, 2, 0x1, 0x3, 0x0, 0x0 waitbgfadeout - launchtask AnimTask_AllBanksVisible 0xA 0x0 + createvisualtask AnimTask_AllBanksVisible, 0xA waitforvisualfinish end ShatteredPsycheFlingOpponent: - launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xffe6 0x10 0x1 0x4 @ -26, +16 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0xffe6, 0x10, 0x1, 0x4 @ -26, +16 waitforvisualfinish - launchtemplate gShatteredPsycheReflectHitSpriteTemplate 0x83 0x4 0x1a 0xfff0 0x1 0x1 @ 26, -16 + createsprite gShatteredPsycheReflectHitSpriteTemplate, ANIM_TARGET, 3, 0x1a, 0xfff0, 0x1, 0x1 @ 26, -16 playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET delay 0x2 - launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x4 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x4 waitforvisualfinish - launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0x1a 0xfff0 0x1 0x4 @ -26,-16 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x1a, 0xfff0, 0x1, 0x4 @ -26,-16 waitforvisualfinish - launchtemplate gShatteredPsycheReflectHitSpriteTemplate 0x83 0x4 0xffe6 0x10 0x1 0x1 @ 26, 16 + createsprite gShatteredPsycheReflectHitSpriteTemplate, ANIM_TARGET, 3, 0xffe6, 0x10, 0x1, 0x1 @ 26, 16 playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET delay 0x2 - launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x4 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x4 waitforvisualfinish - launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0x0 0x20 0x1 0x4 @ 0,32 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x20, 0x1, 0x4 @ 0,32 waitforvisualfinish - launchtemplate gShatteredPsycheReflectHitSpriteTemplate 0x83 0x4 0x0 0xffe0 0x1 0x1 @ 0, -32 + createsprite gShatteredPsycheReflectHitSpriteTemplate, ANIM_TARGET, 3, 0x0, 0xffe0, 0x1, 0x1 @ 0, -32 playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET delay 0x2 - launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x4 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x4 waitforvisualfinish - launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0x0 0xffe0 0x1 0x4 @ 0,-32 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0xffe0, 0x1, 0x4 @ 0,-32 waitforvisualfinish - launchtemplate gShatteredPsycheReflectHitSpriteTemplate 0x83 0x4 0x0 0x20 0x1 0x1 @ 0, 32 + createsprite gShatteredPsycheReflectHitSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x20, 0x1, 0x1 @ 0, 32 playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET delay 0x2 - launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x4 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x4 waitforvisualfinish - launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0x1a 0x10 0x1 0x4 @ 26,16 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x1a, 0x10, 0x1, 0x4 @ 26,16 waitforvisualfinish - launchtemplate gShatteredPsycheReflectHitSpriteTemplate 0x83 0x4 0xffe6 0xfff0 0x1 0x1 @ -26, -16 + createsprite gShatteredPsycheReflectHitSpriteTemplate, ANIM_TARGET, 3, 0xffe6, 0xfff0, 0x1, 0x1 @ -26, -16 playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET delay 0x2 - launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x4 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x4 waitforvisualfinish - launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xffe6 0xffe0 0x1 0x4 @ 26,-16 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0xffe6, 0xffe0, 0x1, 0x4 @ 26,-16 waitforvisualfinish - launchtemplate gShatteredPsycheReflectHitSpriteTemplate 0x83 0x4 0x1a 0x10 0x1 0x1 @ 0, 32 + createsprite gShatteredPsycheReflectHitSpriteTemplate, ANIM_TARGET, 3, 0x1a, 0x10, 0x1, 0x1 @ 0, 32 playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET delay 0x2 - launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x5 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x5 waitforvisualfinish - launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xffe6 0x10 0x1 0x4 @ -26, +16 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0xffe6, 0x10, 0x1, 0x4 @ -26, +16 waitforvisualfinish - launchtemplate gShatteredPsycheReflectHitSpriteTemplate 0x83 0x4 0x1a 0xfff0 0x1 0x1 @ 26, -16 + createsprite gShatteredPsycheReflectHitSpriteTemplate, ANIM_TARGET, 3, 0x1a, 0xfff0, 0x1, 0x1 @ 26, -16 playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET delay 0x2 - launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x4 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x4 waitforvisualfinish - launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0x1a 0xfff0 0x1 0x4 @ -26,-16 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x1a, 0xfff0, 0x1, 0x4 @ -26,-16 waitforvisualfinish - launchtemplate gShatteredPsycheReflectHitSpriteTemplate 0x83 0x4 0xffe6 0x10 0x1 0x1 @ 26, 16 + createsprite gShatteredPsycheReflectHitSpriteTemplate, ANIM_TARGET, 3, 0xffe6, 0x10, 0x1, 0x1 @ 26, 16 playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET delay 0x2 - launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x4 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x4 waitforvisualfinish return ShatteredPsycheFlingPlayer: - launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xffe6 0x10 0x1 0x4 @ -26,-16 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0xffe6, 0x10, 0x1, 0x4 @ -26,-16 waitforvisualfinish - launchtemplate gShatteredPsycheReflectHitSpriteTemplate 0x83 0x4 0x1a 0xfff0 0x1 0x1 @ 26, 16 + createsprite gShatteredPsycheReflectHitSpriteTemplate, ANIM_TARGET, 3, 0x1a, 0xfff0, 0x1, 0x1 @ 26, 16 playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET delay 0x2 - launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x4 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x4 waitforvisualfinish - launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0x20 0x0 0x1 0x4 @ 32,0 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x20, 0x0, 0x1, 0x4 @ 32,0 waitforvisualfinish - launchtemplate gShatteredPsycheReflectHitSpriteTemplate 0x83 0x4 0xffe0 0x0 0x1 0x1 @ + createsprite gShatteredPsycheReflectHitSpriteTemplate, ANIM_TARGET, 3, 0xffe0, 0x0, 0x1, 0x1 @ playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET delay 0x2 - launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x4 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x4 waitforvisualfinish - launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xffe0 0x0 0x1 0x4 @ -32,0 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0xffe0, 0x0, 0x1, 0x4 @ -32,0 waitforvisualfinish - launchtemplate gShatteredPsycheReflectHitSpriteTemplate 0x83 0x4 0x20 0x0 0x1 0x1 @ 32, 0 + createsprite gShatteredPsycheReflectHitSpriteTemplate, ANIM_TARGET, 3, 0x20, 0x0, 0x1, 0x1 @ 32, 0 playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET delay 0x2 - launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x4 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x4 waitforvisualfinish - launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xa 0x20 0x1 0x4 @ 10, -32 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0xa, 0x20, 0x1, 0x4 @ 10, -32 waitforvisualfinish - launchtemplate gShatteredPsycheReflectHitSpriteTemplate 0x83 0x4 0xfff6 0x5 0x1 0x1 @ 10, -32 + createsprite gShatteredPsycheReflectHitSpriteTemplate, ANIM_TARGET, 3, 0xfff6, 0x5, 0x1, 0x1 @ 10, -32 playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET delay 0x2 - launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x5 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x5 waitforvisualfinish return @@ -26995,64 +26993,64 @@ Move_SUBZERO_SLAMMER:: loadspritegfx ANIM_TAG_ICE_CRYSTALS @ice loadspritegfx ANIM_TAG_ICE_CUBE @glacier loadspritegfx ANIM_TAG_EXPLOSION_2 @explosion - launchtask AnimTask_BlendParticle, 0x5, 0x5, ANIM_TAG_EXPLOSION_2, 0x0, 0xC, 0xC, 0x6A23 - launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_EXPLOSION_2, 0x0, 0xC, 0xC, 0x6A23 + createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish fadetobg BG_ICE waitbgfadeout - launchtask AnimTask_IsTargetPlayerSide 0x2 0x0 + createvisualtask AnimTask_IsTargetPlayerSide, 0x2 jumpargeq 0x7 ANIM_TARGET SubzeroSlammerOnPlayer SubzeroSlammerOnOpponent: - launchtask AnimTask_StartSlidingBg 0x5 0x4 0xfd00 0x0 0x0 0xFFFF + createvisualtask AnimTask_StartSlidingBg, 0x5, 0xfd00, 0x0, 0x0, 0xFFFF goto SubzeroSlammerFinish SubzeroSlammerOnPlayer: - launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0300 0x0 0x0 0xFFFF + createvisualtask AnimTask_StartSlidingBg, 0x5, 0x0300, 0x0, 0x0, 0xFFFF SubzeroSlammerFinish: waitbgfadein monbg ANIM_ATK_PARTNER - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x0 0x0 0xb 0x7e80 - launchtemplate gSubzeroSlammerIceSpinSpriteTemplate 0x83 0x4 0x0 0x0 0x38 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x0, 0x0, 0xb, 0x7e80 + createsprite gSubzeroSlammerIceSpinSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, 0x38, 0x0 playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER delay 0x2 - launchtemplate gSubzeroSlammerIceSpinSpriteTemplate 0x83 0x4 0x0 0x0 0x38 0x4 + createsprite gSubzeroSlammerIceSpinSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, 0x38, 0x4 playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER delay 0x2 - launchtemplate gSubzeroSlammerIceSpinSpriteTemplate 0x83 0x4 0x0 0x0 0x38 0x8 + createsprite gSubzeroSlammerIceSpinSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, 0x38, 0x8 playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER delay 0x2 - launchtemplate gSubzeroSlammerIceSpinSpriteTemplate 0x83 0x4 0x0 0x0 0x38 0xc + createsprite gSubzeroSlammerIceSpinSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, 0x38, 0xc playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER delay 0x2 - launchtemplate gSubzeroSlammerIceSpinSpriteTemplate 0x83 0x4 0x0 0x0 0x38 0x10 + createsprite gSubzeroSlammerIceSpinSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, 0x38, 0x10 playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER delay 0x2 - launchtemplate gSubzeroSlammerIceSpinSpriteTemplate 0x83 0x4 0x0 0x0 0x38 0x14 + createsprite gSubzeroSlammerIceSpinSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, 0x38, 0x14 playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER delay 0x2 - launchtemplate gSubzeroSlammerIceSpinSpriteTemplate 0x83 0x4 0x0 0x0 0x38 0x18 + createsprite gSubzeroSlammerIceSpinSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, 0x38, 0x18 playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER delay 0x20 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x0 0xb 0x0 0x7e80 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x0, 0xb, 0x0, 0x7e80 delay 0x20 - launchtask AnimTask_FrozenIceCubeAttacker 0x2 0x0 + createvisualtask AnimTask_FrozenIceCubeAttacker, 0x2 waitplaysewithpan SE_M_HAIL, SOUND_PAN_TARGET, 0x11 waitforvisualfinish call SubzeroSlammerIceSwirl - launchtask AnimTask_BlendColorCycle 0x2 0x6 ANIM_PAL_ATK 0x2 0x2 0x0 0xb 0x7e80 - launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1 + createvisualtask AnimTask_BlendColorCycle, 0x2, F_PAL_ATTACKER, 0x2, 0x2, 0x0, 0xb, 0x7e80 + createvisualtask AnimTask_ShakeMon2, 0x2, 0x0, 0x1, 0x0, 0x20, 0x1 call SubzeroSlammerIceSwirl call SubzeroSlammerIceSwirl delay 0xa clearmonbg ANIM_ATK_PARTNER - launchsoundtask SoundTask_LoopSEAdjustPanning 0x7 0xb0 0xffc0 SOUND_PAN_TARGET 0x4 0x4 0x0 0xa - launchtemplate gIceBeamOuterCrystalSpriteTemplate 0x2 0x5 0x14 0xc 0x0 0xc 0x14 - launchtemplate gIceBeamOuterCrystalSpriteTemplate 0x2 0x5 0x14 0xfff4 0x0 0xfff4 0x14 + createsoundtask SoundTask_LoopSEAdjustPanning, 0xb0, 0xffc0, SOUND_PAN_TARGET, 0x4, 0x4, 0x0, 0xa + createsprite gIceBeamOuterCrystalSpriteTemplate, ANIM_ATTACKER, 2, 0x14, 0xc, 0x0, 0xc, 0x14 + createsprite gIceBeamOuterCrystalSpriteTemplate, ANIM_ATTACKER, 2, 0x14, 0xfff4, 0x0, 0xfff4, 0x14 delay 0x1 call IceBeamCreateCrystals call IceBeamCreateCrystals call IceBeamCreateCrystals - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x4 0x0 0x7 0x7e80 - launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x2 0x0 0x19 0x1 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x4, 0x0, 0x7, 0x7e80 + createvisualtask AnimTask_ShakeMon2, 0x2, 0x1, 0x2, 0x0, 0x19, 0x1 call IceBeamCreateCrystals call IceBeamCreateCrystals call IceBeamCreateCrystals @@ -27068,7 +27066,7 @@ SubzeroSlammerFinish: call IceCrystalEffectShort delay 0x5 monbg ANIM_DEF_PARTNER - launchtask AnimTask_FrozenIceCube 0x82 0x0 + createvisualtask AnimTask_FrozenIceCube, 0x82 playsewithpan SE_M_HAIL, SOUND_PAN_TARGET waitforvisualfinish loadspritegfx ANIM_TAG_TORN_METAL @@ -27078,66 +27076,66 @@ SubzeroSlammerFinish: createsprite gBrickBreakWallShardSpriteTemplate ANIM_TARGET, 2, 0x1, 0x1, 0x0, 0x0 createsprite gBrickBreakWallShardSpriteTemplate ANIM_TARGET, 2, 0x1, 0x2, 0x0, 0x0 createsprite gBrickBreakWallShardSpriteTemplate ANIM_TARGET, 2, 0x1, 0x3, 0x0, 0x0 - launchtask AnimTask_HorizontalShake 0x5 0x3 ANIM_TARGET 0x8 0x1c + createvisualtask AnimTask_HorizontalShake, 0x5, ANIM_TARGET, 0x8, 0x1c call SubzeroSlammerExplosion call SubzeroSlammerExplosion clearmonbg ANIM_DEF_PARTNER - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x5 0x7 0x0 0x7e80 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x5, 0x7, 0x0, 0x7e80 waitforvisualfinish restorebg waitbgfadeout setarg 0x7 0xffff - launchtask AnimTask_AllBanksVisible 0xA 0x0 + createvisualtask AnimTask_AllBanksVisible, 0xA waitbgfadein waitforvisualfinish end SubzeroSlammerExplosion: playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET - launchtemplate gSubzeroSlammerExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1 - launchtemplate gIceCrystalHitLargeSpriteTemplate 0x82, 0x3, 0xfff6 0xfff6 0x0 + createsprite gSubzeroSlammerExplosionSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, ANIM_TARGET, 0x1 + createsprite gIceCrystalHitLargeSpriteTemplate, ANIM_TARGET, 2, 0xfff6, 0xfff6, 0x0 delay 0x3 - launchtemplate gIceCrystalHitSmallSpriteTemplate 0x82, 0x3, 0xa 0x14 0x0 + createsprite gIceCrystalHitSmallSpriteTemplate, ANIM_TARGET, 2, 0xa, 0x14, 0x0 delay 0x3 playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET - launchtemplate gSubzeroSlammerExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1 - launchtemplate gIceCrystalHitLargeSpriteTemplate 0x82, 0x3, 0xfffb 0xa 0x0 + createsprite gSubzeroSlammerExplosionSpriteTemplate, ANIM_TARGET, 3, 0x18, 0xffe8, ANIM_TARGET, 0x1 + createsprite gIceCrystalHitLargeSpriteTemplate, ANIM_TARGET, 2, 0xfffb, 0xa, 0x0 delay 0x3 - launchtemplate gIceCrystalHitSmallSpriteTemplate 0x82, 0x3, 0x11 0xfff4 0x0 + createsprite gIceCrystalHitSmallSpriteTemplate, ANIM_TARGET, 2, 0x11, 0xfff4, 0x0 delay 0x3 playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET - launchtemplate gSubzeroSlammerExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1 - launchtemplate gIceCrystalHitSmallSpriteTemplate 0x82, 0x3, 0xfff1 0xf 0x0 + createsprite gSubzeroSlammerExplosionSpriteTemplate, ANIM_TARGET, 3, 0xfff0, 0x10, ANIM_TARGET, 0x1 + createsprite gIceCrystalHitSmallSpriteTemplate, ANIM_TARGET, 2, 0xfff1, 0xf, 0x0 delay 0x3 - launchtemplate gIceCrystalHitSmallSpriteTemplate 0x82, 0x3, 0x0 0x0 0x0 + createsprite gIceCrystalHitSmallSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x0 delay 0x3 playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET - launchtemplate gSubzeroSlammerExplosionSpriteTemplate 0x83 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 - launchtemplate gIceCrystalHitLargeSpriteTemplate 0x82, 0x3, 0x14 0x2 0x0 + createsprite gSubzeroSlammerExplosionSpriteTemplate, ANIM_TARGET, 3, 0xffe8, 0xfff4, ANIM_TARGET, 0x1 + createsprite gIceCrystalHitLargeSpriteTemplate, ANIM_TARGET, 2, 0x14, 0x2, 0x0 delay 0x3 - launchtemplate gIceCrystalHitLargeSpriteTemplate 0x82, 0x3, 0xfff6 0xfff6 0x0 + createsprite gIceCrystalHitLargeSpriteTemplate, ANIM_TARGET, 2, 0xfff6, 0xfff6, 0x0 delay 0x3 playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET - launchtemplate gSubzeroSlammerExplosionSpriteTemplate 0x83 0x4 0x10 0x10 ANIM_TARGET 0x1 - launchtemplate gIceCrystalHitSmallSpriteTemplate 0x82, 0x3, 0x11 0xfff4 0x0 + createsprite gSubzeroSlammerExplosionSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x10, ANIM_TARGET, 0x1 + createsprite gIceCrystalHitSmallSpriteTemplate, ANIM_TARGET, 2, 0x11, 0xfff4, 0x0 delay 0x3 - launchtemplate gIceCrystalHitSmallSpriteTemplate 0x82, 0x3, 0xfff1 0xf 0x0 + createsprite gIceCrystalHitSmallSpriteTemplate, ANIM_TARGET, 2, 0xfff1, 0xf, 0x0 delay 0x3 return SubzeroSlammerIceSwirl: playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER - launchtemplate gSubzeroSlammerIceSwirlSpriteTemplate 0x82 0x7 0x0 0x1c 0x180 0x32 0x8 0x32 ANIM_ATTACKER + createsprite gSubzeroSlammerIceSwirlSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x180, 0x32, 0x8, 0x32, ANIM_ATTACKER delay 0x2 - launchtemplate gSubzeroSlammerIceSwirlSpriteTemplate 0x82 0x7 0x0 0x20 0xf0 0x28 0xb 0xffd2 ANIM_ATTACKER + createsprite gSubzeroSlammerIceSwirlSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x20, 0xf0, 0x28, 0xb, 0xffd2, ANIM_ATTACKER delay 0x2 playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER - launchtemplate gSubzeroSlammerIceSwirlSpriteTemplate 0x82 0x7 0x0 0x21 0x1a0 0x28 0x4 0x2a ANIM_ATTACKER + createsprite gSubzeroSlammerIceSwirlSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1a0, 0x28, 0x4, 0x2a, ANIM_ATTACKER delay 0x2 - launchtemplate gSubzeroSlammerIceSwirlSpriteTemplate 0x82 0x7 0x0 0x1f 0x120 0x2d 0x6 0xffd6 ANIM_ATTACKER + createsprite gSubzeroSlammerIceSwirlSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1f, 0x120, 0x2d, 0x6, 0xffd6, ANIM_ATTACKER delay 0x2 playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER - launchtemplate gSubzeroSlammerIceSwirlSpriteTemplate 0x82 0x7 0x0 0x1c 0x1c0 0x2d 0xb 0x2e ANIM_ATTACKER + createsprite gSubzeroSlammerIceSwirlSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x1c0, 0x2d, 0xb, 0x2e, ANIM_ATTACKER delay 0x2 - launchtemplate gSubzeroSlammerIceSwirlSpriteTemplate 0x82 0x7 0x0 0x21 0x1d0 0x32 0xa 0xffce ANIM_ATTACKER + createsprite gSubzeroSlammerIceSwirlSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1d0, 0x32, 0xa, 0xffce, ANIM_ATTACKER delay 0x2 return @@ -27150,215 +27148,215 @@ Move_DEVASTATING_DRAKE:: playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call DevastatingDrakeBuffEffect delay 0x8 - launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xb 0x40c0 - launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1 + createvisualtask AnimTask_BlendColorCycle, 0x2, 0x2, 0x2, 0x2, 0x0, 0xb, 0x40c0 + createvisualtask AnimTask_ShakeMon2, 0x2, 0x0, 0x1, 0x0, 0x20, 0x1 call DevastatingDrakeBuffEffect delay 0x8 call DevastatingDrakeBuffEffect waitforvisualfinish unloadspritegfx ANIM_TAG_FOCUS_ENERGY playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER - launchtemplate gDevastatingDrakeShockwaveSpriteTemplate 0x2 0x0 + createsprite gDevastatingDrakeShockwaveSpriteTemplate, ANIM_ATTACKER, 2 delay 0x2a unloadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT monbg ANIM_ATTACKER playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER - launchtemplate gDevastatingDrakeDrakeUpSpriteTemplate 0x2 0x7 0x0 0x0 0x4e0 0x24 0x15 0x1 ANIM_ATTACKER + createsprite gDevastatingDrakeDrakeUpSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x4e0, 0x24, 0x15, 0x1, ANIM_ATTACKER clearmonbg ANIM_ATTACKER fadetobg BG_SKY invisible ANIM_ATTACKER invisible ANIM_TARGET - launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA waitbgfadeout - launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0 0x1000 0x0 0xffff + createvisualtask AnimTask_StartSlidingBg, 0x5, 0x0, 0x1000, 0x0, 0xffff waitbgfadein - launchtask AnimTask_IsTargetPlayerSide 0x2 0x0 + createvisualtask AnimTask_IsTargetPlayerSide, 0x2 jumpargeq 0x7 ANIM_TARGET DevastatingDrakeOnPlayer DevastatingDrakeOnOpponent: playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER - launchtemplate gDevastatingDrakeRightSpriteTemplate 0x32 0x5 0xfff0 0x88 0x100 0x38 0x15 @left to right + createsprite gDevastatingDrakeRightSpriteTemplate, ANIM_ATTACKER, 50, 0xfff0, 0x88, 0x100, 0x38, 0x15 @left to right waitforvisualfinish delay 0xa playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER - launchtemplate gDevastatingDrakeLeftSpriteTemplate 0x32 0x5 0x0120 0x38 0xfff0 0x38 0x15 @right to left + createsprite gDevastatingDrakeLeftSpriteTemplate, ANIM_ATTACKER, 50, 0x0120, 0x38, 0xfff0, 0x38, 0x15 @right to left waitforvisualfinish delay 0xa playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER - launchtemplate gDevastatingDrakeRightSpriteTemplate 0x32 0x5 0xfff0 0x08 0x100 0x0f 0x15 @left to right + createsprite gDevastatingDrakeRightSpriteTemplate, ANIM_ATTACKER, 50, 0xfff0, 0x08, 0x100, 0x0f, 0x15 @left to right goto DevastatingDrakeFinish DevastatingDrakeOnPlayer: playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER - launchtemplate gDevastatingDrakeLeftSpriteTemplate 0x32 0x5 0x0120 0x08 0xfff0 0x0f 0x15 @right to left + createsprite gDevastatingDrakeLeftSpriteTemplate, ANIM_ATTACKER, 50, 0x0120, 0x08, 0xfff0, 0x0f, 0x15 @right to left waitforvisualfinish delay 0xa playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER - launchtemplate gDevastatingDrakeRightSpriteTemplate 0x32 0x5 0xfff0 0x38 0x100 0x38 0x15 @left to right + createsprite gDevastatingDrakeRightSpriteTemplate, ANIM_ATTACKER, 50, 0xfff0, 0x38, 0x100, 0x38, 0x15 @left to right waitforvisualfinish delay 0xa playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER - launchtemplate gDevastatingDrakeLeftSpriteTemplate 0x32 0x5 0x0120 0x78 0xfff0 0x58 0x15 @right to left + createsprite gDevastatingDrakeLeftSpriteTemplate, ANIM_ATTACKER, 50, 0x0120, 0x78, 0xfff0, 0x58, 0x15 @right to left DevastatingDrakeFinish: call UnsetPsychicBg waitforvisualfinish visible ANIM_TARGET delay 0xa playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER - launchtemplate gDevastatingDrakeStrikeSpriteTemplate 0x82 0x1 0x14 + createsprite gDevastatingDrakeStrikeSpriteTemplate, ANIM_TARGET, 2, 0x14 delay 0x10 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER loadspritegfx ANIM_TAG_EXPLOSION - launchtask AnimTask_BlendParticle, 0x5, 0x5, ANIM_TAG_EXPLOSION, 0x0, 0xC, 0xC, 0x502B - launchtask AnimTask_HorizontalShake 0x5 0x3 0x1 0x5 0x35 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x0 0x10 0x40c0 @ fade to purple + createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_EXPLOSION, 0x0, 0xC, 0xC, 0x502B + createvisualtask AnimTask_HorizontalShake, 0x5, 0x1, 0x5, 0x35 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x2, 0x0, 0x10, 0x40c0 @ fade to purple call DevastatingDrakeExplosion delay 0x6 - launchtask AnimTask_IsTargetPartner 0x5 0x0 + createvisualtask AnimTask_IsTargetPartner, 0x5 jumpargeq 0x0 0x1 DevastatingDrakeFadeTargetPartner - launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_ALL - ANIM_PAL_DEF, 0x6, 0x0, 0x10, 0x40c0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_ALL_BUT_DEF), 0x6, 0x0, 0x10, 0x40c0 call DevastatingDrakeExplosion waitforvisualfinish playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER - launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_ALL - ANIM_PAL_DEF, 0x0, 0x10, 0x0, 0x40c0 @ fade all but target back + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_ALL_BUT_DEF), 0x0, 0x10, 0x0, 0x40c0 @ fade all but target back DevastatingDrakeUniversalEnding: loadspritegfx ANIM_TAG_FIRE_PLUME loadspritegfx ANIM_TAG_VERTICAL_HEX loadspritegfx ANIM_TAG_EXPLOSION_2 @explosion unloadspritegfx ANIM_TAG_PURPLE_DRAKE - launchtask AnimTask_BlendParticle, 0x5, 0x5, ANIM_TAG_FIRE_PLUME, 0x0, 0xC, 0xC, 0x502B - launchtask AnimTask_BlendParticle, 0x5, 0x5, ANIM_TAG_VERTICAL_HEX, 0x0, 0xC, 0xC, 0x502B - launchtask AnimTask_BlendParticle, 0x5, 0x5, ANIM_TAG_EXPLOSION_2, 0x0, 0xC, 0xC, 0x502B - launchtask AnimTask_HorizontalShake 0x5 0x3 0x1 0x5 0x20 + createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_FIRE_PLUME, 0x0, 0xC, 0xC, 0x502B + createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_VERTICAL_HEX, 0x0, 0xC, 0xC, 0x502B + createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_EXPLOSION_2, 0x0, 0xC, 0xC, 0x502B + createvisualtask AnimTask_HorizontalShake, 0x5, 0x1, 0x5, 0x20 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER call DevastatingDrakeGeyser playsewithpan SE_M_SACRED_FIRE, SOUND_PAN_ATTACKER - launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x2 0x6 0xffe0 0x0 0x18 0x0 0x0 0x0 - launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x2 0x6 0xffec 0xfff6 0x18 0x0 0x0 0x0 - launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x42 0x6 0x0 0xfff0 0x18 0x0 0x0 0x0 - launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x42 0x6 0x14 0xfff6 0x18 0x0 0x0 0x0 - launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x42 0x6 0x20 0x0 0x18 0x0 0x0 0x0 - launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x42 0x6 0x14 0xa 0x18 0x0 0x0 0x0 - launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x2 0x6 0x0 0x10 0x18 0x0 0x0 0x0 - launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x2 0x6 0xffec 0xa 0x18 0x0 0x0 0x0 + createsprite gDevastatingDrakePurpleBlastSpriteTemplate, ANIM_ATTACKER, 2, 0xffe0, 0x0, 0x18, 0x0, 0x0, 0x0 + createsprite gDevastatingDrakePurpleBlastSpriteTemplate, ANIM_ATTACKER, 2, 0xffec, 0xfff6, 0x18, 0x0, 0x0, 0x0 + createsprite gDevastatingDrakePurpleBlastSpriteTemplate, ANIM_ATTACKER, 66, 0x0, 0xfff0, 0x18, 0x0, 0x0, 0x0 + createsprite gDevastatingDrakePurpleBlastSpriteTemplate, ANIM_ATTACKER, 66, 0x14, 0xfff6, 0x18, 0x0, 0x0, 0x0 + createsprite gDevastatingDrakePurpleBlastSpriteTemplate, ANIM_ATTACKER, 66, 0x20, 0x0, 0x18, 0x0, 0x0, 0x0 + createsprite gDevastatingDrakePurpleBlastSpriteTemplate, ANIM_ATTACKER, 66, 0x14, 0xa, 0x18, 0x0, 0x0, 0x0 + createsprite gDevastatingDrakePurpleBlastSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x10, 0x18, 0x0, 0x0, 0x0 + createsprite gDevastatingDrakePurpleBlastSpriteTemplate, ANIM_ATTACKER, 2, 0xffec, 0xa, 0x18, 0x0, 0x0, 0x0 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER call DevastatingDrakeGeyser playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_ATTACKER - launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x2 0x6 0xffc0 0x0 0x18 0x0 0x0 0x0 - launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x6 0x6 0xffd8 0xffec 0x18 0x0 0x0 0x0 - launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x46 0x6 0x0 0xffe0 0x18 0x0 0x0 0x0 - launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x46 0x6 0x28 0xffec 0x18 0x0 0x0 0x0 - launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x42 0x6 0x40 0x0 0x18 0x0 0x0 0x0 - launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x42 0x6 0x28 0x14 0x18 0x0 0x0 0x0 - launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x2 0x6 0x0 0x20 0x18 0x0 0x0 0x0 - launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x2 0x6 0xffd8 0x14 0x18 0x0 0x0 0x0 + createsprite gDevastatingDrakePurpleBlastSpriteTemplate, ANIM_ATTACKER, 2, 0xffc0, 0x0, 0x18, 0x0, 0x0, 0x0 + createsprite gDevastatingDrakePurpleBlastSpriteTemplate, ANIM_ATTACKER, 6, 0xffd8, 0xffec, 0x18, 0x0, 0x0, 0x0 + createsprite gDevastatingDrakePurpleBlastSpriteTemplate, ANIM_ATTACKER, 70, 0x0, 0xffe0, 0x18, 0x0, 0x0, 0x0 + createsprite gDevastatingDrakePurpleBlastSpriteTemplate, ANIM_ATTACKER, 70, 0x28, 0xffec, 0x18, 0x0, 0x0, 0x0 + createsprite gDevastatingDrakePurpleBlastSpriteTemplate, ANIM_ATTACKER, 66, 0x40, 0x0, 0x18, 0x0, 0x0, 0x0 + createsprite gDevastatingDrakePurpleBlastSpriteTemplate, ANIM_ATTACKER, 66, 0x28, 0x14, 0x18, 0x0, 0x0, 0x0 + createsprite gDevastatingDrakePurpleBlastSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x20, 0x18, 0x0, 0x0, 0x0 + createsprite gDevastatingDrakePurpleBlastSpriteTemplate, ANIM_ATTACKER, 2, 0xffd8, 0x14, 0x18, 0x0, 0x0, 0x0 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER call DevastatingDrakeGeyser playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_ATTACKER - launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x2 0x6 0xffa0 0x0 0x18 0x0 0x0 0x0 - launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x6 0x6 0xffc4 0xffe2 0x18 0x0 0x0 0x0 - launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x46 0x6 0x0 0xffd0 0x18 0x0 0x0 0x0 - launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x46 0x6 0x3c 0xffe2 0x18 0x0 0x0 0x0 - launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x42 0x6 0x60 0x0 0x18 0x0 0x0 0x0 - launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x42 0x6 0x3c 0x1e 0x18 0x0 0x0 0x0 - launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x2 0x6 0x0 0x30 0x18 0x0 0x0 0x0 - launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x2 0x6 0xffc4 0x1e 0x18 0x0 0x0 0x0 + createsprite gDevastatingDrakePurpleBlastSpriteTemplate, ANIM_ATTACKER, 2, 0xffa0, 0x0, 0x18, 0x0, 0x0, 0x0 + createsprite gDevastatingDrakePurpleBlastSpriteTemplate, ANIM_ATTACKER, 6, 0xffc4, 0xffe2, 0x18, 0x0, 0x0, 0x0 + createsprite gDevastatingDrakePurpleBlastSpriteTemplate, ANIM_ATTACKER, 70, 0x0, 0xffd0, 0x18, 0x0, 0x0, 0x0 + createsprite gDevastatingDrakePurpleBlastSpriteTemplate, ANIM_ATTACKER, 70, 0x3c, 0xffe2, 0x18, 0x0, 0x0, 0x0 + createsprite gDevastatingDrakePurpleBlastSpriteTemplate, ANIM_ATTACKER, 66, 0x60, 0x0, 0x18, 0x0, 0x0, 0x0 + createsprite gDevastatingDrakePurpleBlastSpriteTemplate, ANIM_ATTACKER, 66, 0x3c, 0x1e, 0x18, 0x0, 0x0, 0x0 + createsprite gDevastatingDrakePurpleBlastSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x30, 0x18, 0x0, 0x0, 0x0 + createsprite gDevastatingDrakePurpleBlastSpriteTemplate, ANIM_ATTACKER, 2, 0xffc4, 0x1e, 0x18, 0x0, 0x0, 0x0 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER call DevastatingDrakeGeyser delay 0x4 waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x10 0x0 0x40c0 @ fade from purple + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x2, 0x10, 0x0, 0x40c0 @ fade from purple waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ALL_BATTLERS 0x2 0x0 0x0 0x0 @ reset all colours + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BATTLERS, 0x2, 0x0, 0x0, 0x0 @ reset all colours waitforvisualfinish - launchtask AnimTask_AllBanksVisible 0xA 0x0 + createvisualtask AnimTask_AllBanksVisible, 0xA waitforvisualfinish end DevastatingDrakeFadeTargetPartner: - launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG | ANIM_PAL_ATK | ANIM_PAL_OPPONENT1 | ANIM_PAL_OPPONENT2, 0x6, 0x0, 0x10, 0x40c0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_ALL_BUT_ATK_PARTNER), 0x6, 0x0, 0x10, 0x40c0 call DevastatingDrakeExplosion waitforvisualfinish playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER - launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG | ANIM_PAL_ATK | ANIM_PAL_OPPONENT1 | ANIM_PAL_OPPONENT2, 0x0, 0x10, 0x0, 0x40c0 @ fade all but target back + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_ALL_BUT_ATK_PARTNER), 0x0, 0x10, 0x0, 0x40c0 @ fade all but target back goto DevastatingDrakeUniversalEnding DevastatingDrakeBuffEffect: - launchtemplate gDevastatingDrakePurpleEnergySpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2 + createsprite gDevastatingDrakePurpleEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x1a, 0x2 delay 0x4 - launchtemplate gDevastatingDrakePurpleEnergySpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1 + createsprite gDevastatingDrakePurpleEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xe, 0x1c, 0x1 delay 0x4 - launchtemplate gDevastatingDrakePurpleEnergySpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2 + createsprite gDevastatingDrakePurpleEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfffb, 0xa, 0x2 delay 0x4 - launchtemplate gDevastatingDrakePurpleEnergySpriteTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3 + createsprite gDevastatingDrakePurpleEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1c, 0x1a, 0x3 delay 0x4 - launchtemplate gDevastatingDrakePurpleEnergySpriteTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1 + createsprite gDevastatingDrakePurpleEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff4, 0x0, 0x1 return DevastatingDrakeGeyser: - launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x84, 0x4, 0x0003 0x0005 0x1 0x0 - launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0xfffc 0x10 + createsprite gDevastatingDrakeExplosionSpriteTemplate, ANIM_TARGET, 4, 0x0003, 0x0005, 0x1, 0x0 + createsprite gDevastatingDrakeHexSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0xfffc, 0x10 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET delay 0x0 - launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x84, 0x4, 0xfff5 0xfff1 0x1 0x0 - launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0x100D 0x10 + createsprite gDevastatingDrakeExplosionSpriteTemplate, ANIM_TARGET, 4, 0xfff5, 0xfff1, 0x1, 0x0 + createsprite gDevastatingDrakeHexSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x100D, 0x10 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET delay 0x0 - launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x84, 0x4, 0x0008 0xfffb 0x1 0x0 - launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0x4 0x10 + createsprite gDevastatingDrakeExplosionSpriteTemplate, ANIM_TARGET, 4, 0x0008, 0xfffb, 0x1, 0x0 + createsprite gDevastatingDrakeHexSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x4, 0x10 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET delay 0x0 - launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x84, 0x4, 0xfffa 0x0012 0x1 0x0 - launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0xfff0 0x10 + createsprite gDevastatingDrakeExplosionSpriteTemplate, ANIM_TARGET, 4, 0xfffa, 0x0012, 0x1, 0x0 + createsprite gDevastatingDrakeHexSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0xfff0, 0x10 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET delay 0x0 - launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x84, 0x4, 0x0000 0x0005 0x1 0x0 - launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0xfffc 0x10 + createsprite gDevastatingDrakeExplosionSpriteTemplate, ANIM_TARGET, 4, 0x0000, 0x0005, 0x1, 0x0 + createsprite gDevastatingDrakeHexSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0xfffc, 0x10 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET - launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x84, 0x4, 0x0003 0xfff5 ANIM_TARGET 0x0 - launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0x100D 0x10 + createsprite gDevastatingDrakeExplosionSpriteTemplate, ANIM_TARGET, 4, 0x0003, 0xfff5, ANIM_TARGET, 0x0 + createsprite gDevastatingDrakeHexSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x100D, 0x10 delay 0x0 - launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x84, 0x4, 0xfff5 0xffe1 ANIM_TARGET 0x0 - launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0x4 0x10 + createsprite gDevastatingDrakeExplosionSpriteTemplate, ANIM_TARGET, 4, 0xfff5, 0xffe1, ANIM_TARGET, 0x0 + createsprite gDevastatingDrakeHexSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x4, 0x10 delay 0x0 - launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x84, 0x4, 0x0008 0xffeb ANIM_TARGET 0x0 - launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0xfff0 0x10 + createsprite gDevastatingDrakeExplosionSpriteTemplate, ANIM_TARGET, 4, 0x0008, 0xffeb, ANIM_TARGET, 0x0 + createsprite gDevastatingDrakeHexSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0xfff0, 0x10 delay 0x0 - launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x84, 0x4, 0xfffa 0x0002 ANIM_TARGET 0x0 - launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0xfffc 0x10 + createsprite gDevastatingDrakeExplosionSpriteTemplate, ANIM_TARGET, 4, 0xfffa, 0x0002, ANIM_TARGET, 0x0 + createsprite gDevastatingDrakeHexSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0xfffc, 0x10 delay 0x0 - launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x84, 0x4, 0x0000 0xfff5 ANIM_TARGET 0x0 - launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0x100D 0x10 + createsprite gDevastatingDrakeExplosionSpriteTemplate, ANIM_TARGET, 4, 0x0000, 0xfff5, ANIM_TARGET, 0x0 + createsprite gDevastatingDrakeHexSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x100D, 0x10 delay 0x0 - launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x84, 0x4, 0x0003 0xffe5 ANIM_TARGET 0x0 - launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0x4 0x10 + createsprite gDevastatingDrakeExplosionSpriteTemplate, ANIM_TARGET, 4, 0x0003, 0xffe5, ANIM_TARGET, 0x0 + createsprite gDevastatingDrakeHexSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x4, 0x10 delay 0x0 - launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x84, 0x4, 0xfff5 0xffd1 ANIM_TARGET 0x0 - launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0xfff0 0x10 + createsprite gDevastatingDrakeExplosionSpriteTemplate, ANIM_TARGET, 4, 0xfff5, 0xffd1, ANIM_TARGET, 0x0 + createsprite gDevastatingDrakeHexSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0xfff0, 0x10 delay 0x0 - launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x84, 0x4, 0x0008 0xffdb ANIM_TARGET 0x0 - launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0xfffc 0x10 + createsprite gDevastatingDrakeExplosionSpriteTemplate, ANIM_TARGET, 4, 0x0008, 0xffdb, ANIM_TARGET, 0x0 + createsprite gDevastatingDrakeHexSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0xfffc, 0x10 delay 0x0 - launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x84, 0x4, 0xfffa 0xfff2 ANIM_TARGET 0x0 - launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0x100D 0x10 + createsprite gDevastatingDrakeExplosionSpriteTemplate, ANIM_TARGET, 4, 0xfffa, 0xfff2, ANIM_TARGET, 0x0 + createsprite gDevastatingDrakeHexSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x100D, 0x10 delay 0x0 - launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x84, 0x4, 0x0000 0xffe5 ANIM_TARGET 0x0 - launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0x4 0x10 + createsprite gDevastatingDrakeExplosionSpriteTemplate, ANIM_TARGET, 4, 0x0000, 0xffe5, ANIM_TARGET, 0x0 + createsprite gDevastatingDrakeHexSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x4, 0x10 delay 0x0 - launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0xfff0 0x10 + createsprite gDevastatingDrakeHexSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0xfff0, 0x10 return DevastatingDrakeExplosion: - launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1 + createsprite gDevastatingDrakeExplosionSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, ANIM_TARGET, 0x1 delay 0x6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1 + createsprite gDevastatingDrakeExplosionSpriteTemplate, ANIM_TARGET, 3, 0x18, 0xffe8, ANIM_TARGET, 0x1 delay 0x6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + createsprite gDevastatingDrakeExplosionSpriteTemplate, ANIM_TARGET, 3, 0xfff0, 0x10, ANIM_TARGET, 0x1 delay 0x6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x83 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 + createsprite gDevastatingDrakeExplosionSpriteTemplate, ANIM_TARGET, 3, 0xffe8, 0xfff4, ANIM_TARGET, 0x1 delay 0x6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x83 0x4 0x10 0x10 ANIM_TARGET 0x1 + createsprite gDevastatingDrakeExplosionSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x10, ANIM_TARGET, 0x1 delay 0x6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + createsprite gDevastatingDrakeExplosionSpriteTemplate, ANIM_TARGET, 3, 0xfff0, 0x10, ANIM_TARGET, 0x1 return @@ -27370,89 +27368,89 @@ Move_BLACK_HOLE_ECLIPSE:: loadspritegfx ANIM_TAG_ICE_CHUNK @blue loadspritegfx ANIM_TAG_BLACK_BALL_2 @black invisible ANIM_TARGET - launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call EndureEffect delay 0x8 - launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xb 0x0000 - launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1 + createvisualtask AnimTask_BlendColorCycle, 0x2, 0x2, 0x2, 0x2, 0x0, 0xb, 0x0000 + createvisualtask AnimTask_ShakeMon2, 0x2, 0x0, 0x1, 0x0, 0x20, 0x1 call EndureEffect delay 0x8 call EndureEffect waitforvisualfinish unloadspritegfx ANIM_TAG_FOCUS_ENERGY playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER - launchtemplate gBlackHoleEclipseShockwaveSpriteTemplate 0x2 0x0 + createsprite gBlackHoleEclipseShockwaveSpriteTemplate, ANIM_ATTACKER, 2 waitforvisualfinish unloadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_HANDS_AND_FEET @black playsewithpan SE_M_NIGHTMARE, SOUND_PAN_ATTACKER - launchtemplate gBlackHoleEclipseHoleUserSpriteTemplate 0x2 0x4 0x0 0x0 ANIM_ATTACKER 0x0 - launchtemplate gBlackHoleEclipseBlueRingSpriteTemplate 0x3 0x4 0x0 0x0 0x0 0x0 + createsprite gBlackHoleEclipseHoleUserSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, ANIM_ATTACKER, 0x0 + createsprite gBlackHoleEclipseBlueRingSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0 delay 0x8 - launchtemplate gBlackHoleEclipseBlackRingSpriteTemplate 0x3 0x4 0x0 0x0 0x0 0x0 + createsprite gBlackHoleEclipseBlackRingSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0 delay 0x8 - launchtemplate gBlackHoleEclipseBlueRingSpriteTemplate 0x3 0x4 0x0 0x0 0x0 0x0 + createsprite gBlackHoleEclipseBlueRingSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0 delay 0x8 - launchtemplate gBlackHoleEclipseBlackRingSpriteTemplate 0x3 0x4 0x0 0x0 0x0 0x0 + createsprite gBlackHoleEclipseBlackRingSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0 delay 0x8 waitforvisualfinish stopsound - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x07 0x0000 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x07, 0x0000 loadspritegfx ANIM_TAG_WISP_ORB @will o wisp invisible ANIM_ATTACKER loopsewithpan SE_M_FLAMETHROWER, SOUND_PAN_TARGET, 0x10, 0x5 - launchtemplate gBlackHoleEclipseWispSpriteTemplate 0x2 0x3 0x0 0x10 0x0 + createsprite gBlackHoleEclipseWispSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x10, 0x0 delay 0x3 - launchtemplate gBlackHoleEclipseWispSpriteTemplate 0x3 0x3 0x0 0x10 0x1 + createsprite gBlackHoleEclipseWispSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x10, 0x1 delay 0x3 - launchtemplate gBlackHoleEclipseWispSpriteTemplate 0x4 0x3 0x0 0x10 0x2 + createsprite gBlackHoleEclipseWispSpriteTemplate, ANIM_ATTACKER, 4, 0x0, 0x10, 0x2 delay 0x3 - launchtemplate gBlackHoleEclipseWispSpriteTemplate 0x4 0x3 0x0 0x10 0x3 + createsprite gBlackHoleEclipseWispSpriteTemplate, ANIM_ATTACKER, 4, 0x0, 0x10, 0x3 waitforvisualfinish fadetobg BG_BLACKHOLE_ECLIPSE playsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_TARGET loadspritegfx ANIM_TAG_VERTICAL_HEX @red - launchtemplate gBlackHoleEclipseRedRingSpriteTemplate 0x3 0x4 0x0 0x0 0x100 0x0 + createsprite gBlackHoleEclipseRedRingSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x100, 0x0 delay 0x4 - launchtemplate gBlackHoleEclipseRedRingSpriteTemplate 0x3 0x4 0x0 0x0 0x100 0x0 + createsprite gBlackHoleEclipseRedRingSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x100, 0x0 delay 0x4 - launchtemplate gBlackHoleEclipseRedRingSpriteTemplate 0x3 0x4 0x0 0x0 0x100 0x0 + createsprite gBlackHoleEclipseRedRingSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x100, 0x0 waitbgfadeout unloadspritegfx ANIM_TAG_WISP_ORB - launchtemplate gBlackHoleEclipseHoleSpriteTemplate 0x2 0x4 0x0 0x0 ANIM_TARGET 0x0 @ eclipse at target origin + createsprite gBlackHoleEclipseHoleSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, ANIM_TARGET, 0x0 @ eclipse at target origin delay 0x10 - launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0x35 0xffed 0x1 0x2 @ target down and left (instantaneously (last arg)) + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x35, 0xffed, 0x1, 0x2 @ target down and left (instantaneously (last arg)) delay 0x2 visible ANIM_TARGET loopsewithpan SE_M_SUPERSONIC, SOUND_PAN_TARGET, 0xa, 0x5 - launchtask AnimTask_RotateMonSpriteToSide 0x2 0x4 0x50 0xfc00 ANIM_TARGET 0x0 @ spin target around (0x50 (time), -0x400 (rot speed)) - launchtemplate gBlackHoleEclipseBlueRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + createvisualtask AnimTask_RotateMonSpriteToSide, 0x2, 0x50, 0xfc00, ANIM_TARGET, 0x0 @ spin target around (0x50 (time), -0x400 (rot speed)) + createsprite gBlackHoleEclipseBlueRingInwardsSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, ANIM_TARGET, 0x0 delay 0x8 - launchtemplate gBlackHoleEclipseRedRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + createsprite gBlackHoleEclipseRedRingInwardsSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, ANIM_TARGET, 0x0 delay 0x8 - launchtemplate gBlackHoleEclipseRedRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + createsprite gBlackHoleEclipseRedRingInwardsSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, ANIM_TARGET, 0x0 delay 0x8 - launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x30 @ target back to origin (slowly) - launchtemplate gBlackHoleEclipseBlueRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x30 @ target back to origin (slowly) + createsprite gBlackHoleEclipseBlueRingInwardsSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, ANIM_TARGET, 0x0 delay 0x8 - launchtemplate gBlackHoleEclipseRedRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + createsprite gBlackHoleEclipseRedRingInwardsSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, ANIM_TARGET, 0x0 delay 0x8 - launchtemplate gBlackHoleEclipseRedRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + createsprite gBlackHoleEclipseRedRingInwardsSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, ANIM_TARGET, 0x0 delay 0x15 invisible ANIM_TARGET delay 0x8 - launchtemplate gBlackHoleEclipseBlueRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + createsprite gBlackHoleEclipseBlueRingInwardsSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, ANIM_TARGET, 0x0 delay 0x8 - launchtemplate gBlackHoleEclipseRedRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + createsprite gBlackHoleEclipseRedRingInwardsSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, ANIM_TARGET, 0x0 delay 0x8 - launchtemplate gBlackHoleEclipseRedRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + createsprite gBlackHoleEclipseRedRingInwardsSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, ANIM_TARGET, 0x0 delay 0x8 - launchtemplate gBlackHoleEclipseHoleShrinkSpriteTemplate 0x2 0x4 0x0 0x0 ANIM_TARGET 0x0 + createsprite gBlackHoleEclipseHoleShrinkSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, ANIM_TARGET, 0x0 waitforvisualfinish loadspritegfx ANIM_TAG_SPARKLE_4 @detect - launchtemplate gTargetTwinkleSpriteTemplate 0xd 0x3 0x0 0x0 ANIM_TARGET @detect star + createsprite gTargetTwinkleSpriteTemplate, ANIM_ATTACKER, 13, 0x0, 0x0, ANIM_TARGET @detect star delay 0x2 unloadspritegfx ANIM_TAG_SHADOW_BALL unloadspritegfx ANIM_TAG_THIN_RING @@ -27460,12 +27458,12 @@ Move_BLACK_HOLE_ECLIPSE:: unloadspritegfx ANIM_TAG_BLACK_BALL_2 loadspritegfx ANIM_TAG_EXPLOSION_2 call BlackHoleEclipseExplosion - launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_ALL_BATTLERS | ANIM_PAL_BG, 0x1, 0x0, 0x10, 0x7fff @ bg to white pal + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS), 0x1, 0x0, 0x10, 0x7fff @ bg to white pal call BlackHoleEclipseExplosion waitforvisualfinish delay 0x18 invisible ANIM_TARGET - launchtask AnimTask_RotateMonSpriteToSide 0x2 0x4 0x1 0x0 ANIM_TARGET 0x1 @ fix rotation + createvisualtask AnimTask_RotateMonSpriteToSide, 0x2, 0x1, 0x0, ANIM_TARGET, 0x1 @ fix rotation invisible ANIM_TARGET delay 0x1 waitforvisualfinish @@ -27473,33 +27471,33 @@ Move_BLACK_HOLE_ECLIPSE:: end BlackHoleEclipseExplosion: playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gBlackHoleEclipseRedExplosionSpriteTemplate 0x3 0x4 0x0 0x0 ANIM_TARGET 0x1 + createsprite gBlackHoleEclipseRedExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, ANIM_TARGET, 0x1 delay 0x6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gBlackHoleEclipseRedExplosionSpriteTemplate 0x3 0x4 0x18 0xffe8 ANIM_TARGET 0x1 + createsprite gBlackHoleEclipseRedExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x18, 0xffe8, ANIM_TARGET, 0x1 delay 0x6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gBlackHoleEclipseRedExplosionSpriteTemplate 0x3 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + createsprite gBlackHoleEclipseRedExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0xfff0, 0x10, ANIM_TARGET, 0x1 delay 0x6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gBlackHoleEclipseRedExplosionSpriteTemplate 0x3 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 + createsprite gBlackHoleEclipseRedExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0xffe8, 0xfff4, ANIM_TARGET, 0x1 delay 0x6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gBlackHoleEclipseRedExplosionSpriteTemplate 0x3 0x4 0x10 0x10 ANIM_TARGET 0x1 + createsprite gBlackHoleEclipseRedExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x10, 0x10, ANIM_TARGET, 0x1 delay 0x6 return ResetFromWhiteScreen: - launchtask AnimTask_AllBanksInvisible 0xA 0x0 + createvisualtask AnimTask_AllBanksInvisible, 0xA waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ALL_BATTLERS 0x2 0x0 0x0 0x7FFF @everything from white + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BATTLERS, 0x2, 0x0, 0x0, 0x7FFF @everything from white restorebg waitbgfadeout setarg 0x7 0xffff - launchtask AnimTask_AllBanksVisible 0xA 0x0 + createvisualtask AnimTask_AllBanksVisible, 0xA waitbgfadein waitforvisualfinish delay 0x5 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x0 0x0 0x0 0x7fff + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x0, 0x0, 0x0, 0x7fff waitforvisualfinish return @@ -27508,20 +27506,20 @@ Move_TWINKLE_TACKLE:: loadspritegfx ANIM_TAG_SPARKLE_2 @star loadspritegfx ANIM_TAG_PINK_PETAL @pink loadspritegfx ANIM_TAG_THIN_RING @ring - launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish playsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER call TwinkleTacklePinkStars delay 0x8 fadetobg BG_TWINKLE_TACKLE - launchtemplate gTwinkleTacklePinkRingSpriteTemplate 0x3 0x4 0x0 0x0 0x0 0x0 + createsprite gTwinkleTacklePinkRingSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0 waitbgfadeout invisible ANIM_TARGET delay 0x1 loadspritegfx ANIM_TAG_YELLOW_STAR - launchtemplate gTwinkleTackleStarGrowSpriteTemplate 0x3 0x4 0x0 0x0 0x0 0x0 + createsprite gTwinkleTackleStarGrowSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0 waitforvisualfinish - launchtask AnimTask_IsTargetPlayerSide 0x2 0x0 + createvisualtask AnimTask_IsTargetPlayerSide, 0x2 jumpargeq 0x7 ANIM_TARGET TwinkleTackleOnPlayer TwinkleTackleOnOpponent: call PlayerTwinkling @@ -27533,132 +27531,132 @@ TwinkleTackleFinish: delay 0x5 visible ANIM_ATTACKER visible ANIM_TARGET - launchtask AnimTask_SwayMon 0x5 0x5, 0x0 0x8 2048 1 ANIM_ATTACKER + createvisualtask AnimTask_SwayMon, 0x5, 0x0, 0x8, 2048, 1, ANIM_ATTACKER call TwinkleTackleStars waitforvisualfinish - launchtask AnimTask_SwayMon 0x5 0x5, 0x0 0x8 2048 1 ANIM_ATTACKER + createvisualtask AnimTask_SwayMon, 0x5, 0x0, 0x8, 2048, 1, ANIM_ATTACKER call TwinkleTackleStars waitforvisualfinish loadspritegfx ANIM_TAG_SPARKLE_4 @detect loadspritegfx ANIM_TAG_IMPACT @hit loadspritegfx ANIM_TAG_PAIN_SPLIT @pain-split delay 0x1 - launchtemplate gTwinkleTackleYellowImpactSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x0 + createsprite gTwinkleTackleYellowImpactSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1, 0x0 call TwinkleTackleStarsTarget playsewithpan SE_M_WATERFALL, SOUND_PAN_TARGET delay 0x5 - launchtask AnimTask_TwinkleTackleLaunch 0x2 0x1 89 + createvisualtask AnimTask_TwinkleTackleLaunch, 0x2, 89 delay 89 playsewithpan SE_M_DETECT, SOUND_PAN_TARGET - launchtemplate gTwinkleTackleTwinkleSpriteTemplate 0x8d, 0x3, 0x0 0x0 ANIM_TARGET @detect star + createsprite gTwinkleTackleTwinkleSpriteTemplate, ANIM_TARGET, 13, 0x0, 0x0, ANIM_TARGET @detect star waitforvisualfinish delay 0x10 restorebg delay 0x18 - launchtask AnimTask_AllBanksVisible 0xA 0x0 + createvisualtask AnimTask_AllBanksVisible, 0xA waitforvisualfinish end TwinkleTacklePinkStars: - launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0xfff1 0x0 0x0 0x0 0x20 0x3c - launchtemplate gTwinkleTacklePinkRingSpriteTemplate 0x3 0x4 0x0 0x0 0x0 0x0 + createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0xfff1, 0x0, 0x0, 0x0, 0x20, 0x3c + createsprite gTwinkleTacklePinkRingSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0 delay 0x8 - launchtemplate gTwinkleTacklePinkRingSpriteTemplate 0x3 0x4 0x0 0x0 0x0 0x0 - launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0xc 0xfffb 0x0 0x0 0x20 0x3c + createsprite gTwinkleTacklePinkRingSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0 + createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0xc, 0xfffb, 0x0, 0x0, 0x20, 0x3c delay 0x8 - launchtemplate gTwinkleTacklePinkRingSpriteTemplate 0x3 0x4 0x0 0x0 0x0 0x0 + createsprite gTwinkleTacklePinkRingSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0 return PlayerTwinkling: playsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER setarg 0x7 0x0 @;Clear arg 7 so task works properly in Link battles - launchtask AnimTask_SnatchOpposingMonMove 0x2 0x0 @ user fly on screen on enemy side - launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x12 0x0 0x0 0x0 0x20 0x1c + createvisualtask AnimTask_SnatchOpposingMonMove, 0x2 @ user fly on screen on enemy side + createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0x12, 0x0, 0x0, 0x0, 0x20, 0x1c delay 0x3 - launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x1f 0xfffb 0x0 0x0 0x20 0x1c + createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0x1f, 0xfffb, 0x0, 0x0, 0x20, 0x1c delay 0x16 - launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x90 0xffc0 0x0 0x0 0x20 0x1c + createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0x90, 0xffc0, 0x0, 0x0, 0x20, 0x1c delay 0x1 - launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x80 0xffc0 0x0 0x0 0x20 0x1c + createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0x80, 0xffc0, 0x0, 0x0, 0x20, 0x1c delay 0x1 - launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x70 0xffc0 0x0 0x0 0x20 0x1c + createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0x70, 0xffc0, 0x0, 0x0, 0x20, 0x1c delay 0x1 - launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x60 0xffc0 0x0 0x0 0x20 0x1c + createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0x60, 0xffc0, 0x0, 0x0, 0x20, 0x1c delay 0x1 - launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x50 0xffc0 0x0 0x0 0x20 0x1c + createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0x50, 0xffc0, 0x0, 0x0, 0x20, 0x1c delay 0x1 playsewithpan SE_M_MORNING_SUN, SOUND_PAN_TARGET - launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x40 0xffc0 0x0 0x0 0x20 0x1c + createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0x40, 0xffc0, 0x0, 0x0, 0x20, 0x1c delay 0x1 - launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x30 0xffc0 0x0 0x0 0x20 0x1c + createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0x30, 0xffc0, 0x0, 0x0, 0x20, 0x1c delay 0x1 - launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x20 0xffc0 0x0 0x0 0x20 0x1c + createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0x20, 0xffc0, 0x0, 0x0, 0x20, 0x1c delay 0x1 - launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x10 0xffc0 0x0 0x0 0x20 0x1c + createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0x10, 0xffc0, 0x0, 0x0, 0x20, 0x1c delay 0x1 - launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x0 0xffc0 0x0 0x0 0x20 0x1c + createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffc0, 0x0, 0x0, 0x20, 0x1c delay 0x1 - launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0xfff0 0xffc0 0x0 0x0 0x20 0x1c + createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0xfff0, 0xffc0, 0x0, 0x0, 0x20, 0x1c delay 0x1 - launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0xffe0 0xffc0 0x0 0x0 0x20 0x1c + createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0xffe0, 0xffc0, 0x0, 0x0, 0x20, 0x1c delay 0x1 - launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0xffd0 0xffc0 0x0 0x0 0x20 0x1c + createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0xffd0, 0xffc0, 0x0, 0x0, 0x20, 0x1c delay 0x1 - launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0xffc0 0xffc0 0x0 0x0 0x20 0x1c + createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0xffc0, 0xffc0, 0x0, 0x0, 0x20, 0x1c return OpponentTwinkling: playsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER setarg 0x7 0x0 @;Clear arg 7 so task works properly in Link battles - launchtask AnimTask_SnatchOpposingMonMove 0x2 0x0 @ user fly on screen on enemy side - launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x10 0xfffb 0x0 0x0 0x20 0x1c + createvisualtask AnimTask_SnatchOpposingMonMove, 0x2 @ user fly on screen on enemy side + createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0x10, 0xfffb, 0x0, 0x0, 0x20, 0x1c delay 0x1 - launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x20 0xfffb 0x0 0x0 0x20 0x1c + createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0x20, 0xfffb, 0x0, 0x0, 0x20, 0x1c delay 0x1 - launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x30 0xfffb 0x0 0x0 0x20 0x1c + createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0x30, 0xfffb, 0x0, 0x0, 0x20, 0x1c delay 0x1 - launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x40 0xfffb 0x0 0x0 0x20 0x1c + createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0x40, 0xfffb, 0x0, 0x0, 0x20, 0x1c delay 0x1 - launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x50 0xfffb 0x0 0x0 0x20 0x1c + createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0x50, 0xfffb, 0x0, 0x0, 0x20, 0x1c delay 0x1 - launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x60 0xfffb 0x0 0x0 0x20 0x1c + createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0x60, 0xfffb, 0x0, 0x0, 0x20, 0x1c delay 0x1 - launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x70 0xfffb 0x0 0x0 0x20 0x1c + createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0x70, 0xfffb, 0x0, 0x0, 0x20, 0x1c delay 0x1 - launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x80 0xfffb 0x0 0x0 0x20 0x1c + createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0x80, 0xfffb, 0x0, 0x0, 0x20, 0x1c delay 0x1 - launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x90 0xfffb 0x0 0x0 0x20 0x1c + createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0x90, 0xfffb, 0x0, 0x0, 0x20, 0x1c delay 0x1 - launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0xa0 0xfffb 0x0 0x0 0x20 0x1c + createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0xa0, 0xfffb, 0x0, 0x0, 0x20, 0x1c delay 0x5 playsewithpan SE_M_MORNING_SUN, SOUND_PAN_TARGET - launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0xa0 0x2c 0x0 0x0 0x20 0x1c + createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0xa0, 0x2c, 0x0, 0x0, 0x20, 0x1c delay 0x1 - launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x90 0x2c 0x0 0x0 0x20 0x1c + createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0x90, 0x2c, 0x0, 0x0, 0x20, 0x1c delay 0x1 - launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x80 0x2c 0x0 0x0 0x20 0x1c + createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0x80, 0x2c, 0x0, 0x0, 0x20, 0x1c delay 0x1 - launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x70 0x2c 0x0 0x0 0x20 0x1c + createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0x70, 0x2c, 0x0, 0x0, 0x20, 0x1c delay 0x1 - launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x60 0x2c 0x0 0x0 0x20 0x1c + createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0x60, 0x2c, 0x0, 0x0, 0x20, 0x1c delay 0x1 - launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x50 0x2c 0x0 0x0 0x20 0x1c + createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0x50, 0x2c, 0x0, 0x0, 0x20, 0x1c delay 0x1 - launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x40 0x2c 0x0 0x0 0x20 0x1c + createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0x40, 0x2c, 0x0, 0x0, 0x20, 0x1c delay 0x1 - launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x30 0x2c 0x0 0x0 0x20 0x1c + createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0x30, 0x2c, 0x0, 0x0, 0x20, 0x1c return TwinkleTackleStars: playsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER - launchtemplate gTwinkleTackleDigStarSpriteTemplate 0x2 0x6 0x0 0x0 0xc 0x4 0xfff0 0x12 - launchtemplate gTwinkleTackleDigStarSpriteTemplate 0x2 0x6 0x0 0x0 0x10 0x4 0xfff6 0x12 - launchtemplate gTwinkleTackleDigStarSpriteTemplate 0x2 0x6 0x0 0x1 0xe 0x4 0xffee 0x12 - launchtemplate gTwinkleTackleDigStarSpriteTemplate 0x2 0x6 0x0 0x1 0xc 0x4 0xfff0 0x12 + createsprite gTwinkleTackleDigStarSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0xc, 0x4, 0xfff0, 0x12 + createsprite gTwinkleTackleDigStarSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x10, 0x4, 0xfff6, 0x12 + createsprite gTwinkleTackleDigStarSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1, 0xe, 0x4, 0xffee, 0x12 + createsprite gTwinkleTackleDigStarSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1, 0xc, 0x4, 0xfff0, 0x12 return TwinkleTackleStarsTarget: - launchtemplate gTwinkleTackleImpactStarsSpriteTemplate 0x83 0x4 0xfff0 0xfff8 0xa0 0xffe0 - launchtemplate gTwinkleTackleImpactStarsSpriteTemplate 0x83 0x4 0xfff0 0xfff8 0xff00 0xffd8 - launchtemplate gTwinkleTackleImpactStarsSpriteTemplate 0x83 0x4 0xfff0 0xfff8 0x80 0xfff0 - launchtemplate gTwinkleTackleImpactStarsSpriteTemplate 0x83 0x4 0xfff0 0xfff8 0x1a0 0xffda - launchtemplate gTwinkleTackleImpactStarsSpriteTemplate 0x83 0x4 0xfff0 0xfff8 0xff80 0xffea - launchtemplate gTwinkleTackleImpactStarsSpriteTemplate 0x83 0x4 0xfff0 0xfff8 0xfe80 0xffe1 + createsprite gTwinkleTackleImpactStarsSpriteTemplate, ANIM_TARGET, 3, 0xfff0, 0xfff8, 0xa0, 0xffe0 + createsprite gTwinkleTackleImpactStarsSpriteTemplate, ANIM_TARGET, 3, 0xfff0, 0xfff8, 0xff00, 0xffd8 + createsprite gTwinkleTackleImpactStarsSpriteTemplate, ANIM_TARGET, 3, 0xfff0, 0xfff8, 0x80, 0xfff0 + createsprite gTwinkleTackleImpactStarsSpriteTemplate, ANIM_TARGET, 3, 0xfff0, 0xfff8, 0x1a0, 0xffda + createsprite gTwinkleTackleImpactStarsSpriteTemplate, ANIM_TARGET, 3, 0xfff0, 0xfff8, 0xff80, 0xffea + createsprite gTwinkleTackleImpactStarsSpriteTemplate, ANIM_TARGET, 3, 0xfff0, 0xfff8, 0xfe80, 0xffe1 return @ signature z moves @@ -27666,23 +27664,23 @@ Move_CATASTROPIKA:: loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy loadspritegfx ANIM_TAG_ROUND_SHADOW @fly invisible ANIM_TARGET - launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call EndureEffect delay 0x8 - launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xb 0x5bff - launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1 + createvisualtask AnimTask_BlendColorCycle, 0x2, 0x2, 0x2, 0x2, 0x0, 0xb, 0x5bff + createvisualtask AnimTask_ShakeMon2, 0x2, 0x0, 0x1, 0x0, 0x20, 0x1 call EndureEffect delay 0x8 call EndureEffect delay 0x8 playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER - launchtemplate gFlyBallUpSpriteTemplate 0x2 0x4 0x0 0x0 0xd 0x150 + createsprite gFlyBallUpSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0xd, 0x150 waitforvisualfinish unloadspritegfx ANIM_TAG_FOCUS_ENERGY unloadspritegfx ANIM_TAG_ROUND_SHADOW - launchtask AnimTask_GetTimeOfDay 0x2 0x0 + createvisualtask AnimTask_GetTimeOfDay, 0x2 jumpargeq 0x0 0x0 CatastropikaDaytime jumpargeq 0x0 0x2 CatastropikaAfternoon CatastropikaNight: @@ -27700,78 +27698,78 @@ CatastropikaFinish: loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge loadspritegfx ANIM_TAG_SPARK_2 @spark playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER - launchtask AnimTask_ElectricChargingParticles 0x2 0x4 0x0 0x3c 0x2 0xc @charge particles to user - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x10 0x2c 0x20 0x28 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x10 0x2c 0x60 0x28 0x1 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x10 0x2c 0xa0 0x28 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x10 0x2c 0xe0 0x28 0x2 0x3 + createvisualtask AnimTask_ElectricChargingParticles, 0x2, 0x0, 0x3c, 0x2, 0xc @charge particles to user + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x10, 0x2c, 0x20, 0x28, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x10, 0x2c, 0x60, 0x28, 0x1, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x10, 0x2c, 0xa0, 0x28, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x10, 0x2c, 0xe0, 0x28, 0x2, 0x3 @ delay 0x14 @ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x12 0x2c 0x0 0x28 0x0 0x3 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x12 0x2c 0x40 0x28 0x1 0x3 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x12 0x2c 0x80 0x28 0x0 0x3 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x12 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x12, 0x2c, 0x0, 0x28, 0x0, 0x3 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x12, 0x2c, 0x40, 0x28, 0x1, 0x3 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x12, 0x2c, 0x80, 0x28, 0x0, 0x3 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x12, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x3 @ delay 0x14 @ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x14 0x2c 0x0 0x28 0x0 0x3 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x14 0x2c 0x40 0x28 0x1 0x3 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x14 0x2c 0x80 0x28 0x0 0x3 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x14 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x14, 0x2c, 0x0, 0x28, 0x0, 0x3 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x14, 0x2c, 0x40, 0x28, 0x1, 0x3 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x14, 0x2c, 0x80, 0x28, 0x0, 0x3 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x14, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x3 delay 0x14 playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER - launchtemplate gGrowingChargeOrbSpriteTemplate 0x2 0x1 ANIM_ATTACKER @ charge - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x16 0x2c 0x20 0x28 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x16 0x2c 0x60 0x28 0x1 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x16 0x2c 0xa0 0x28 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x16 0x2c 0xe0 0x28 0x2 0x3 + createsprite gGrowingChargeOrbSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER @ charge + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x16, 0x2c, 0x20, 0x28, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x16, 0x2c, 0x60, 0x28, 0x1, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x16, 0x2c, 0xa0, 0x28, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x16, 0x2c, 0xe0, 0x28, 0x2, 0x3 delay 0x14 playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x18 0x2c 0x0 0x28 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x18 0x2c 0x40 0x28 0x1 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x18 0x2c 0x80 0x28 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x18 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x18, 0x2c, 0x0, 0x28, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x18, 0x2c, 0x40, 0x28, 0x1, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x18, 0x2c, 0x80, 0x28, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x18, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x3 delay 0x14 playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1a 0x2c 0x0 0x28 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1a 0x2c 0x40 0x28 0x1 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1a 0x2c 0x80 0x28 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1a 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1a, 0x2c, 0x0, 0x28, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1a, 0x2c, 0x40, 0x28, 0x1, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1a, 0x2c, 0x80, 0x28, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1a, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x3 delay 0x14 playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1c 0x2c 0x0 0x28 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1c 0x2c 0x40 0x28 0x1 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1c 0x2c 0x80 0x28 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1c 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1c, 0x2c, 0x0, 0x28, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1c, 0x2c, 0x40, 0x28, 0x1, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1c, 0x2c, 0x80, 0x28, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1c, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x3 delay 0x14 playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1e 0x2c 0x0 0x28 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1e 0x2c 0x40 0x28 0x1 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1e 0x2c 0x80 0x28 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1e 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1e, 0x2c, 0x0, 0x28, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1e, 0x2c, 0x40, 0x28, 0x1, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1e, 0x2c, 0x80, 0x28, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1e, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x3 delay 0x14 playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1e 0x2c 0x0 0x28 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1e 0x2c 0x40 0x28 0x1 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1e 0x2c 0x80 0x28 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1e 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1e, 0x2c, 0x0, 0x28, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1e, 0x2c, 0x40, 0x28, 0x1, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1e, 0x2c, 0x80, 0x28, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1e, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x3 delay 0x14 playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x0 0x28 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x40 0x28 0x1 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x80 0x28 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x0, 0x28, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x40, 0x28, 0x1, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x80, 0x28, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x3 delay 0x14 playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x0 0x28 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x40 0x28 0x1 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x80 0x28 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x0, 0x28, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x40, 0x28, 0x1, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x80, 0x28, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x3 delay 0x14 playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x0 0x28 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x40 0x28 0x1 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x80 0x28 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x0, 0x28, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x40, 0x28, 0x1, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x80, 0x28, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x3 delay 0x14 restorebg waitbgfadeout @@ -27781,28 +27779,28 @@ CatastropikaFinish: invisible ANIM_ATTACKER visible ANIM_TARGET playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET - launchtemplate gCatastrokpikaSuperpowerSpriteTemplate 0x83 0x1 0x0 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffe0 0xfff0 0x25 0x2c 0x20 0x8 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffe0 0xfff0 0x25 0x2c 0x60 0x8 0x1 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffe0 0xfff0 0x25 0x2c 0xa0 0x8 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffe0 0xfff0 0x25 0x2c 0xe0 0x8 0x2 0x3 - delay 0x1 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffd0 0xffe4 0x25 0x2c 0x20 0x8 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffd0 0xffe4 0x25 0x2c 0x60 0x8 0x1 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffd0 0xffe4 0x25 0x2c 0xa0 0x8 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffd0 0xffe4 0x25 0x2c 0xe0 0x8 0x2 0x3 - delay 0x1 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffc0 0xffd8 0x25 0x2c 0x20 0x8 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffc0 0xffd8 0x25 0x2c 0x60 0x8 0x1 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffc0 0xffd8 0x25 0x2c 0xa0 0x8 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffc0 0xffd8 0x25 0x2c 0xe0 0x8 0x2 0x3 + createsprite gCatastrokpikaSuperpowerSpriteTemplate, ANIM_TARGET, 3, 0x0 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0xffe0, 0xfff0, 0x25, 0x2c, 0x20, 0x8, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0xffe0, 0xfff0, 0x25, 0x2c, 0x60, 0x8, 0x1, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0xffe0, 0xfff0, 0x25, 0x2c, 0xa0, 0x8, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0xffe0, 0xfff0, 0x25, 0x2c, 0xe0, 0x8, 0x2, 0x3 + delay 0x1 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0xffd0, 0xffe4, 0x25, 0x2c, 0x20, 0x8, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0xffd0, 0xffe4, 0x25, 0x2c, 0x60, 0x8, 0x1, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0xffd0, 0xffe4, 0x25, 0x2c, 0xa0, 0x8, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0xffd0, 0xffe4, 0x25, 0x2c, 0xe0, 0x8, 0x2, 0x3 + delay 0x1 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0xffc0, 0xffd8, 0x25, 0x2c, 0x20, 0x8, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0xffc0, 0xffd8, 0x25, 0x2c, 0x60, 0x8, 0x1, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0xffc0, 0xffd8, 0x25, 0x2c, 0xa0, 0x8, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0xffc0, 0xffd8, 0x25, 0x2c, 0xe0, 0x8, 0x2, 0x3 delay 0xd - launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xff00 0x15 0x0 0x4 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0xff00, 0x15, 0x0, 0x4 loadspritegfx ANIM_TAG_MUD_SAND - launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 ANIM_TARGET 0x0 0xc 0xffe8 0xfff0 0x18 @ 12, -48, -16, 24 - launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 ANIM_TARGET 0x0 0x10 0xffda 0xfff6 0x18 @ 16, -16, -10, 24 - launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 ANIM_TARGET 0x1 0xe 0xffec 0xffee 0x18 @ 14, -52, -18, 24 - launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 ANIM_TARGET 0x1 0xc 0xffdc 0xfff0 0x18 @ 12, -32, -16, 24 + createsprite gDirtPlumeSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x0, 0xc, 0xffe8, 0xfff0, 0x18 @ 12, -48, -16, 24 + createsprite gDirtPlumeSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x0, 0x10, 0xffda, 0xfff6, 0x18 @ 16, -16, -10, 24 + createsprite gDirtPlumeSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x1, 0xe, 0xffec, 0xffee, 0x18 @ 14, -52, -18, 24 + createsprite gDirtPlumeSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x1, 0xc, 0xffdc, 0xfff0, 0x18 @ 12, -32, -16, 24 loadspritegfx ANIM_TAG_LIGHTNING @thunder call CatastropikaThundering invisible ANIM_TARGET @@ -27810,28 +27808,28 @@ CatastropikaFinish: call CatastropikaThundering call CatastropikaThundering call CatastropikaThundering - launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_ALL_BATTLERS | ANIM_PAL_BG, 0x4, 0x0, 0x10, 0x7fff @ bg to white + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS), 0x4, 0x0, 0x10, 0x7fff @ bg to white call CatastropikaThundering waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_ALL_BATTLERS | ANIM_PAL_BG, 0x4, 0x10, 0x0, 0x7fff @ bg to white - launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x10 @fix tgt position + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS), 0x4, 0x10, 0x0, 0x7fff @ bg to white + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x10 @fix tgt position waitforvisualfinish - launchtask AnimTask_AllBanksVisible 0xA 0x0 + createvisualtask AnimTask_AllBanksVisible, 0xA waitforvisualfinish end CatastropikaThundering: playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET - launchtemplate gLightningSpriteTemplate 0x82 0x2 0x0 0xfff0 + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0x0, 0xfff0 delay 2 - launchtemplate gLightningSpriteTemplate 0x82 0x2 0x0 0x10 + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x10 delay 2 - launchtemplate gLightningSpriteTemplate 0x82 0x2 0x0 0xfff0 + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0x0, 0xfff0 delay 2 - launchtemplate gLightningSpriteTemplate 0x82 0x2 0x0 0x10 + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x10 delay 2 - launchtemplate gLightningSpriteTemplate 0x82 0x2 0x0 0xfff0 + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0x0, 0xfff0 delay 2 - launchtemplate gLightningSpriteTemplate 0x82 0x2 0x0 0x10 + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x10 delay 2 return @@ -27843,106 +27841,106 @@ Move_10000000_VOLT_THUNDERBOLT:: loadspritegfx ANIM_TAG_SPARK_2 @sparks loadspritegfx ANIM_TAG_LIGHTNING @lightning invisible ANIM_TARGET - launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call EndureEffect waitforvisualfinish playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER - launchtemplate g10MillionVoltBoltYellowFlySpriteTemplate 0x2 0x4 0x0 0x0 0xd 0x150 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x20 0x2c 0x20 0x28 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x20 0x2c 0x60 0x28 0x1 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x20 0x2c 0xa0 0x28 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x20 0x2c 0xe0 0x28 0x2 0x3 - delay 0x2 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffe0 0x20 0x2c 0x20 0x28 0x0 0x3 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffe0 0x20 0x2c 0x60 0x28 0x1 0x3 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffe0 0x20 0x2c 0xa0 0x28 0x0 0x3 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffe0 0x20 0x2c 0xe0 0x28 0x2 0x3 - delay 0x2 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffd0 0x20 0x2c 0x20 0x28 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffd0 0x20 0x2c 0x60 0x28 0x1 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffd0 0x20 0x2c 0xa0 0x28 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffd0 0x20 0x2c 0xe0 0x28 0x2 0x3 + createsprite g10MillionVoltBoltYellowFlySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0xd, 0x150 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x20, 0x2c, 0x20, 0x28, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x20, 0x2c, 0x60, 0x28, 0x1, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x20, 0x2c, 0xa0, 0x28, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x20, 0x2c, 0xe0, 0x28, 0x2, 0x3 + delay 0x2 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe0, 0x20, 0x2c, 0x20, 0x28, 0x0, 0x3 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe0, 0x20, 0x2c, 0x60, 0x28, 0x1, 0x3 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe0, 0x20, 0x2c, 0xa0, 0x28, 0x0, 0x3 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe0, 0x20, 0x2c, 0xe0, 0x28, 0x2, 0x3 + delay 0x2 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffd0, 0x20, 0x2c, 0x20, 0x28, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffd0, 0x20, 0x2c, 0x60, 0x28, 0x1, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffd0, 0x20, 0x2c, 0xa0, 0x28, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffd0, 0x20, 0x2c, 0xe0, 0x28, 0x2, 0x3 waitforvisualfinish unloadspritegfx ANIM_TAG_ROUND_SHADOW unloadspritegfx ANIM_TAG_FOCUS_ENERGY fadetobg BG_THUNDER waitbgfadeout loadspritegfx ANIM_TAG_ELECTRIC_ORBS @charge - launchtask AnimTask_StartSlidingBg 0x5 0x4 0xff00 0x0 0x1 0xffff + createvisualtask AnimTask_StartSlidingBg, 0x5, 0xff00, 0x0, 0x1, 0xffff waitbgfadein visible ANIM_ATTACKER playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER - launchtask AnimTask_ElectricChargingParticles 0x2 0x4 0x0 0x3c 0x2 0xc @charge particles to user - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x10 0x2c 0x20 0x28 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x10 0x2c 0x60 0x28 0x1 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x10 0x2c 0xa0 0x28 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x10 0x2c 0xe0 0x28 0x2 0x3 + createvisualtask AnimTask_ElectricChargingParticles, 0x2, 0x0, 0x3c, 0x2, 0xc @charge particles to user + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x10, 0x2c, 0x20, 0x28, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x10, 0x2c, 0x60, 0x28, 0x1, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x10, 0x2c, 0xa0, 0x28, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x10, 0x2c, 0xe0, 0x28, 0x2, 0x3 delay 0x14 playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER delay 0x14 playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x14 0x2c 0x0 0x28 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x14 0x2c 0x40 0x28 0x1 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x14 0x2c 0x80 0x28 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x14 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x14, 0x2c, 0x0, 0x28, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x14, 0x2c, 0x40, 0x28, 0x1, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x14, 0x2c, 0x80, 0x28, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x14, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x3 delay 0x10 playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET - launchtask AnimTask_InvertScreenColor 0x2 0x3 0x101 0x101 0x101 @thunder flash - launchtemplate gGrowingChargeOrbSpriteTemplate 0x2 0x1 ANIM_ATTACKER @ charge - launchtemplate gLightningSpriteTemplate 0x82 0x2 0x40 0xffdc + createvisualtask AnimTask_InvertScreenColor, 0x2, 0x101, 0x101, 0x101 @thunder flash + createsprite gGrowingChargeOrbSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER @ charge + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0x40, 0xffdc delay 0x1 - launchtemplate gLightningSpriteTemplate 0x82 0x2 0x40 0xffec + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0x40, 0xffec delay 0x1 - launchtemplate gLightningSpriteTemplate 0x82 0x2 0x40 0xc + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0x40, 0xc delay 0x14 playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x18 0x2c 0x0 0x28 0x0 0x3 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x18 0x2c 0x40 0x28 0x1 0x3 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x18 0x2c 0x80 0x28 0x0 0x3 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x18 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x18, 0x2c, 0x0, 0x28, 0x0, 0x3 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x18, 0x2c, 0x40, 0x28, 0x1, 0x3 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x18, 0x2c, 0x80, 0x28, 0x0, 0x3 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x18, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x3 delay 0x14 playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET - launchtask AnimTask_InvertScreenColor 0x2 0x3 0x101 0x101 0x101 @thunder flash - launchtemplate gLightningSpriteTemplate 0x82 0x2 0xffc0 0xffdc + createvisualtask AnimTask_InvertScreenColor, 0x2, 0x101, 0x101, 0x101 @thunder flash + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0xffc0, 0xffdc delay 0x1 - launchtemplate gLightningSpriteTemplate 0x82 0x2 0xffc0 0xffec + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0xffc0, 0xffec delay 0x1 - launchtemplate gLightningSpriteTemplate 0x82 0x2 0xffc0 0xc + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0xffc0, 0xc delay 0x14 playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1c 0x2c 0x0 0x28 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1c 0x2c 0x40 0x28 0x1 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1c 0x2c 0x80 0x28 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1c 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1c, 0x2c, 0x0, 0x28, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1c, 0x2c, 0x40, 0x28, 0x1, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1c, 0x2c, 0x80, 0x28, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1c, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x3 delay 0x14 playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET - launchtask AnimTask_InvertScreenColor 0x2 0x3 0x101 0x101 0x101 @thunder flash - launchtemplate gLightningSpriteTemplate 0x82 0x2 0xff90 0xffdc + createvisualtask AnimTask_InvertScreenColor, 0x2, 0x101, 0x101, 0x101 @thunder flash + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0xff90, 0xffdc delay 0x1 - launchtemplate gLightningSpriteTemplate 0x82 0x2 0xff90 0xffec + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0xff90, 0xffec delay 0x1 - launchtemplate gLightningSpriteTemplate 0x82 0x2 0xff90 0xc + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0xff90, 0xc delay 0x14 playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x20 0x2c 0x0 0x28 0x0 0x3 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x20 0x2c 0x40 0x28 0x1 0x3 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x20 0x2c 0x80 0x28 0x0 0x3 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x20 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x20, 0x2c, 0x0, 0x28, 0x0, 0x3 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x20, 0x2c, 0x40, 0x28, 0x1, 0x3 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x20, 0x2c, 0x80, 0x28, 0x0, 0x3 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x20, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x3 delay 0x10 playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET - launchtask AnimTask_InvertScreenColor 0x2 0x3 0x101 0x101 0x101 @thunder flash - launchtemplate gLightningSpriteTemplate 0x82 0x2 0xffd0 0xffdc + createvisualtask AnimTask_InvertScreenColor, 0x2, 0x101, 0x101, 0x101 @thunder flash + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0xffd0, 0xffdc delay 0x1 - launchtemplate gLightningSpriteTemplate 0x82 0x2 0xffd0 0xffec + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0xffd0, 0xffec delay 0x1 - launchtemplate gLightningSpriteTemplate 0x82 0x2 0xffd0 0xc + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0xffd0, 0xc playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x2a 0x2c 0x0 0x28 0x0 0x3 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x2a 0x2c 0x40 0x28 0x1 0x3 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x2a 0x2c 0x80 0x28 0x0 0x3 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x2a 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x2a, 0x2c, 0x0, 0x28, 0x0, 0x3 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x2a, 0x2c, 0x40, 0x28, 0x1, 0x3 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x2a, 0x2c, 0x80, 0x28, 0x0, 0x3 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x2a, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x3 waitforvisualfinish call UnsetPsychicBg visible ANIM_TARGET @@ -27953,16 +27951,16 @@ Move_10000000_VOLT_THUNDERBOLT:: loadspritegfx ANIM_TAG_LEAF @green loadspritegfx ANIM_TAG_POISON_BUBBLE @purple loopsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER, 0x5, 0xA - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_ATTACKER 0x0 0x4 0x32 0x1 -@ launchtask AnimTask_FlashAnimTagWithColor, 0x2, 0x7, ANIM_TAG_ORBS, 0x1, 0xc, 0x1f, 0x10, 0x0, 0x0 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_ATTACKER, 0x0, 0x4, 0x32, 0x1 +@ createvisualtask AnimTask_FlashAnimTagWithColor, 0x2, ANIM_TAG_ORBS, 0x1, 0xc, 0x1f, 0x10, 0x0, 0x0 call TenMillionVoltThunderboltBeamRed call TenMillionVoltThunderboltBeamBlue - launchtask AnimTask_ShakeMon2 0x2 0x5 ANIM_TARGET 0x4 0x0 0x32 0x1 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x0 0x9 0x07FE + createvisualtask AnimTask_ShakeMon2, 0x2, ANIM_TARGET, 0x4, 0x0, 0x32, 0x1 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x2, 0x0, 0x9, 0x07FE call TenMillionVoltThunderboltBeamPink call TenMillionVoltThunderboltBeamYellow call TenMillionVoltThunderboltBeamGreen - launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x4 0x0 0x32 0x1 + createvisualtask AnimTask_ShakeMon2, 0x2, 0x1, 0x4, 0x0, 0x32, 0x1 call TenMillionVoltThunderboltBeamPurple call TenMillionVoltThunderboltBeamRed call TenMillionVoltThunderboltBeamBlue @@ -27983,22 +27981,22 @@ Move_10000000_VOLT_THUNDERBOLT:: @ call TenMillionVoltThunderboltBeamGreen @ call TenMillionVoltThunderboltBeamPurple playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x25 0x2c 0x0 0x28 0x0 0x8003 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x25 0x2c 0x40 0x28 0x1 0x8003 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x25 0x2c 0x80 0x28 0x0 0x8003 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x25 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x8003 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x25, 0x2c, 0x0, 0x28, 0x0, 0x8003 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x25, 0x2c, 0x40, 0x28, 0x1, 0x8003 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x25, 0x2c, 0x80, 0x28, 0x0, 0x8003 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x25, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x8003 @ delay 0x6 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x35 0x2c 0x0 0x28 0x0 0x8003 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x35 0x2c 0x40 0x28 0x1 0x8003 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x35 0x2c 0x80 0x28 0x0 0x8003 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x35 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x8003 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x35, 0x2c, 0x0, 0x28, 0x0, 0x8003 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x35, 0x2c, 0x40, 0x28, 0x1, 0x8003 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x35, 0x2c, 0x80, 0x28, 0x0, 0x8003 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x35, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x8003 @ delay 0x6 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x40 0x2c 0x0 0x28 0x0 0x8003 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x40 0x2c 0x40 0x28 0x1 0x8003 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x40 0x2c 0x80 0x28 0x0 0x8003 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x40 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x8003 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x40, 0x2c, 0x0, 0x28, 0x0, 0x8003 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x40, 0x2c, 0x40, 0x28, 0x1, 0x8003 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x40, 0x2c, 0x80, 0x28, 0x0, 0x8003 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x40, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x8003 playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER - launchtemplate g10MillionVoltBoltShockwaveSpriteTemplate 0x82 0x0 @ charge out and in + createsprite g10MillionVoltBoltShockwaveSpriteTemplate, ANIM_TARGET, 2 @ charge out and in waitforvisualfinish unloadspritegfx ANIM_TAG_ORBS @hyper beam unloadspritegfx ANIM_TAG_VERTICAL_HEX @red @@ -28007,96 +28005,96 @@ Move_10000000_VOLT_THUNDERBOLT:: unloadspritegfx ANIM_TAG_LEAF @green unloadspritegfx ANIM_TAG_POISON_BUBBLE @purple loadspritegfx ANIM_TAG_EXPLOSION @explosion - launchtask AnimTask_HorizontalShake 0x5 0x3 ANIM_TARGET 0x2 0x2c -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x30 0x2c 0x0 0x28 0x0 0x8003 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x30 0x2c 0x40 0x28 0x1 0x8003 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x30 0x2c 0x80 0x28 0x0 0x8003 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x00 0x30 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x8003 + createvisualtask AnimTask_HorizontalShake, 0x5, ANIM_TARGET, 0x2, 0x2c +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x30, 0x2c, 0x0, 0x28, 0x0, 0x8003 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x30, 0x2c, 0x40, 0x28, 0x1, 0x8003 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x30, 0x2c, 0x80, 0x28, 0x0, 0x8003 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x00, 0x30, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x8003 call TenMillionVoltThunderboltSparkGeyser -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x37 0x2c 0x0 0x28 0x0 0x8003 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x37 0x2c 0x40 0x28 0x1 0x8003 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x37 0x2c 0x80 0x28 0x0 0x8003 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x00 0x37 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x8003 - launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG | ANIM_PAL_ALL_BATTLERS, 0x2, 0x0, 0x10, 0x7fff +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x37, 0x2c, 0x0, 0x28, 0x0, 0x8003 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x37, 0x2c, 0x40, 0x28, 0x1, 0x8003 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x37, 0x2c, 0x80, 0x28, 0x0, 0x8003 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x00, 0x37, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x8003 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS), 0x2, 0x0, 0x10, 0x7fff call TenMillionVoltThunderboltSparkGeyser waitforvisualfinish delay 0x10 - launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG | ANIM_PAL_ALL_BATTLERS, 0x3, 0x10, 0x0, 0x7fff + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS), 0x3, 0x10, 0x0, 0x7fff waitforvisualfinish - launchtask AnimTask_AllBanksVisible 0xA 0x0 + createvisualtask AnimTask_AllBanksVisible, 0xA waitforvisualfinish end TenMillionVoltThunderboltBeamRed: - launchtemplate g10MillionVoltBoltRedBeamSpriteTemplate 0x82 0x0 - launchtemplate g10MillionVoltBoltRedBeamSpriteTemplate 0x82 0x0 + createsprite g10MillionVoltBoltRedBeamSpriteTemplate, ANIM_TARGET, 2 + createsprite g10MillionVoltBoltRedBeamSpriteTemplate, ANIM_TARGET, 2 delay 4 return TenMillionVoltThunderboltBeamBlue: - launchtemplate g10MillionVoltBoltBlueBeamSpriteTemplate 0x82 0x0 - launchtemplate g10MillionVoltBoltBlueBeamSpriteTemplate 0x82 0x0 + createsprite g10MillionVoltBoltBlueBeamSpriteTemplate, ANIM_TARGET, 2 + createsprite g10MillionVoltBoltBlueBeamSpriteTemplate, ANIM_TARGET, 2 delay 4 return TenMillionVoltThunderboltBeamPink: - launchtemplate g10MillionVoltBoltPinkBeamSpriteTemplate 0x82 0x0 - launchtemplate g10MillionVoltBoltPinkBeamSpriteTemplate 0x82 0x0 + createsprite g10MillionVoltBoltPinkBeamSpriteTemplate, ANIM_TARGET, 2 + createsprite g10MillionVoltBoltPinkBeamSpriteTemplate, ANIM_TARGET, 2 delay 4 return TenMillionVoltThunderboltBeamYellow: - launchtemplate g10MillionVoltBoltYellowBeamSpriteTemplate 0x82 0x0 - launchtemplate g10MillionVoltBoltYellowBeamSpriteTemplate 0x82 0x0 + createsprite g10MillionVoltBoltYellowBeamSpriteTemplate, ANIM_TARGET, 2 + createsprite g10MillionVoltBoltYellowBeamSpriteTemplate, ANIM_TARGET, 2 delay 4 return TenMillionVoltThunderboltBeamGreen: - launchtemplate g10MillionVoltBoltGreenBeamSpriteTemplate 0x82 0x0 - launchtemplate g10MillionVoltBoltGreenBeamSpriteTemplate 0x82 0x0 + createsprite g10MillionVoltBoltGreenBeamSpriteTemplate, ANIM_TARGET, 2 + createsprite g10MillionVoltBoltGreenBeamSpriteTemplate, ANIM_TARGET, 2 delay 4 return TenMillionVoltThunderboltBeamPurple: - launchtemplate g10MillionVoltBoltPurpleBeamSpriteTemplate 0x82 0x0 - launchtemplate g10MillionVoltBoltPurpleBeamSpriteTemplate 0x82 0x0 + createsprite g10MillionVoltBoltPurpleBeamSpriteTemplate, ANIM_TARGET, 2 + createsprite g10MillionVoltBoltPurpleBeamSpriteTemplate, ANIM_TARGET, 2 delay 4 return TenMillionVoltThunderboltSparkGeyser: playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET - launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x5 0x2c 0x0 0x28 0x0 0x8003 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x5 0x2c 0x40 0x28 0x1 0x8003 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x5 0x2c 0x80 0x28 0x0 0x8003 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x15 0x2c 0x0 0x28 0x0 0x8003 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x15 0x2c 0x40 0x28 0x1 0x8003 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x15 0x2c 0x80 0x28 0x0 0x8003 + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, ANIM_TARGET, 0x1 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x5, 0x2c, 0x0, 0x28, 0x0, 0x8003 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x5, 0x2c, 0x40, 0x28, 0x1, 0x8003 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x5, 0x2c, 0x80, 0x28, 0x0, 0x8003 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x15, 0x2c, 0x0, 0x28, 0x0, 0x8003 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x15, 0x2c, 0x40, 0x28, 0x1, 0x8003 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x15, 0x2c, 0x80, 0x28, 0x0, 0x8003 delay 0x4 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffea 0x5 0x2c 0x0 0x28 0x0 0x8003 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffea 0x5 0x2c 0x40 0x28 0x1 0x8003 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffea 0x5 0x2c 0x80 0x28 0x0 0x8003 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0xffea, 0x5, 0x2c, 0x0, 0x28, 0x0, 0x8003 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0xffea, 0x5, 0x2c, 0x40, 0x28, 0x1, 0x8003 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0xffea, 0x5, 0x2c, 0x80, 0x28, 0x0, 0x8003 delay 0x4 playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET - launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffd4 0x5 0x2c 0x0 0x28 0x0 0x8003 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffd4 0x5 0x2c 0x40 0x28 0x1 0x8003 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffd4 0x5 0x2c 0x80 0x28 0x0 0x8003 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffd4 0x15 0x2c 0x0 0x28 0x0 0x8003 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffd4 0x15 0x2c 0x40 0x28 0x1 0x8003 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffd4 0x15 0x2c 0x80 0x28 0x0 0x8003 + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0x18, 0xffe8, ANIM_TARGET, 0x1 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0xffd4, 0x5, 0x2c, 0x0, 0x28, 0x0, 0x8003 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0xffd4, 0x5, 0x2c, 0x40, 0x28, 0x1, 0x8003 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0xffd4, 0x5, 0x2c, 0x80, 0x28, 0x0, 0x8003 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0xffd4, 0x15, 0x2c, 0x0, 0x28, 0x0, 0x8003 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0xffd4, 0x15, 0x2c, 0x40, 0x28, 0x1, 0x8003 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0xffd4, 0x15, 0x2c, 0x80, 0x28, 0x0, 0x8003 delay 0x4 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffbe 0x5 0x2c 0x0 0x28 0x0 0x8003 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffbe 0x5 0x2c 0x40 0x28 0x1 0x8003 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffbe 0x5 0x2c 0x80 0x28 0x0 0x8003 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffbe 0x15 0x2c 0x0 0x28 0x0 0x8003 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffbe 0x15 0x2c 0x40 0x28 0x1 0x8003 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffbe 0x15 0x2c 0x80 0x28 0x0 0x8003 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0xffbe, 0x5, 0x2c, 0x0, 0x28, 0x0, 0x8003 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0xffbe, 0x5, 0x2c, 0x40, 0x28, 0x1, 0x8003 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0xffbe, 0x5, 0x2c, 0x80, 0x28, 0x0, 0x8003 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0xffbe, 0x15, 0x2c, 0x0, 0x28, 0x0, 0x8003 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0xffbe, 0x15, 0x2c, 0x40, 0x28, 0x1, 0x8003 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0xffbe, 0x15, 0x2c, 0x80, 0x28, 0x0, 0x8003 delay 0x4 playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET - launchtemplate gExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0xfff0, 0x10, ANIM_TARGET, 0x1 delay 0x8 playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET - launchtemplate gExplosionSpriteTemplate 0x83 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0xffe8, 0xfff4, ANIM_TARGET, 0x1 delay 0x8 playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET - launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x10 0x10 ANIM_TARGET 0x1 + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x10, ANIM_TARGET, 0x1 delay 0x6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET - launchtemplate gExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0xfff0, 0x10, ANIM_TARGET, 0x1 return @@ -28104,27 +28102,27 @@ Move_STOKED_SPARKSURFER:: loadspritegfx ANIM_TAG_ROUND_SHADOW @fly loadspritegfx ANIM_TAG_SPARK_2 @spark invisible ANIM_TARGET - launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER - launchtemplate gStokedSparksurferFlySpriteTemplate 0x2 0x4 0x0 0x0 0xd 0x150 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x20 0x2c 0x20 0x28 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x20 0x2c 0x60 0x28 0x1 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x20 0x2c 0xa0 0x28 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x20 0x2c 0xe0 0x28 0x2 0x3 - delay 0x2 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffe0 0x20 0x2c 0x20 0x28 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffe0 0x20 0x2c 0x60 0x28 0x1 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffe0 0x20 0x2c 0xa0 0x28 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffe0 0x20 0x2c 0xe0 0x28 0x2 0x3 - delay 0x2 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffd0 0x20 0x2c 0x20 0x28 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffd0 0x20 0x2c 0x60 0x28 0x1 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffd0 0x20 0x2c 0xa0 0x28 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffd0 0x20 0x2c 0xe0 0x28 0x2 0x3 + createsprite gStokedSparksurferFlySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0xd, 0x150 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x20, 0x2c, 0x20, 0x28, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x20, 0x2c, 0x60, 0x28, 0x1, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x20, 0x2c, 0xa0, 0x28, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x20, 0x2c, 0xe0, 0x28, 0x2, 0x3 + delay 0x2 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe0, 0x20, 0x2c, 0x20, 0x28, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe0, 0x20, 0x2c, 0x60, 0x28, 0x1, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe0, 0x20, 0x2c, 0xa0, 0x28, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe0, 0x20, 0x2c, 0xe0, 0x28, 0x2, 0x3 + delay 0x2 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffd0, 0x20, 0x2c, 0x20, 0x28, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffd0, 0x20, 0x2c, 0x60, 0x28, 0x1, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffd0, 0x20, 0x2c, 0xa0, 0x28, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffd0, 0x20, 0x2c, 0xe0, 0x28, 0x2, 0x3 waitforvisualfinish unloadspritegfx ANIM_TAG_ROUND_SHADOW - launchtask AnimTask_GetTimeOfDay 0x2 0x0 + createvisualtask AnimTask_GetTimeOfDay, 0x2 jumpargeq 0x0 0x0 StokedSparksurferDay jumpargeq 0x0 0x2 StokedSparksurferAfternoon StokedSparksurferNight: @@ -28141,138 +28139,138 @@ StokedSparksurferFinish: loadspritegfx ANIM_TAG_ELECTRIC_ORBS @charge loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER - launchtask AnimTask_ElectricChargingParticles 0x2 0x4 0x0 0x1c 0x2 0xc - launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x3c 0x1 + createvisualtask AnimTask_ElectricChargingParticles, 0x2, 0x0, 0x1c, 0x2, 0xc + createvisualtask AnimTask_ShakeMon2, 0x2, 0x0, 0x1, 0x0, 0x3c, 0x1 call EndureEffect delay 0x8 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x5 0x0 0x10 0x5bff + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x5, 0x0, 0x10, 0x5bff call EndureEffect delay 0x8 call EndureEffect delay 0x2 loadspritegfx ANIM_TAG_SPARK loadspritegfx ANIM_TAG_ELECTRICITY - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x0 0x10 0x0 0x5bff - launchtemplate gVoltTackleOrbSlideSpriteTemplate 0x1 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x0, 0x10, 0x0, 0x5bff + createsprite gVoltTackleOrbSlideSpriteTemplate, ANIM_ATTACKER, 1 playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER waitforvisualfinish - launchtask AnimTask_VoltTackleBolt 0x5 0x1 0x0 + createvisualtask AnimTask_VoltTackleBolt, 0x5, 0x0 playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_ATTACKER waitforvisualfinish - launchtask AnimTask_VoltTackleBolt 0x5 0x1 0x1 + createvisualtask AnimTask_VoltTackleBolt, 0x5, 0x1 playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_TARGET waitforvisualfinish - launchtask AnimTask_VoltTackleBolt 0x5 0x1 0x2 + createvisualtask AnimTask_VoltTackleBolt, 0x5, 0x2 playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_ATTACKER waitforvisualfinish - launchtask AnimTask_VoltTackleBolt 0x5 0x1 0x3 + createvisualtask AnimTask_VoltTackleBolt, 0x5, 0x3 playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_TARGET delay 0x1 fadetobg BG_ZMOVE_ACTIVATE waitbgfadeout visible ANIM_TARGET - launchtask AnimTask_VoltTackleBolt 0x5 0x1 0x4 + createvisualtask AnimTask_VoltTackleBolt, 0x5, 0x4 playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_TARGET waitforvisualfinish unloadspritegfx ANIM_TAG_SPARK unloadspritegfx ANIM_TAG_FOCUS_ENERGY unloadspritegfx ANIM_TAG_ELECTRIC_ORBS unloadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT - launchtask AnimTask_HorizontalShake 0x5 0x3 ANIM_TARGET 0x5 0x1c - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x30 0x2c 0x0 0x28 0x0 0x8003 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x30 0x2c 0x40 0x28 0x1 0x8003 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x30 0x2c 0x80 0x28 0x0 0x8003 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x00 0x30 0x2c 0xc0 0x28 0x2 0x8003 + createvisualtask AnimTask_HorizontalShake, 0x5, ANIM_TARGET, 0x5, 0x1c + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x30, 0x2c, 0x0, 0x28, 0x0, 0x8003 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x30, 0x2c, 0x40, 0x28, 0x1, 0x8003 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x30, 0x2c, 0x80, 0x28, 0x0, 0x8003 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x00, 0x30, 0x2c, 0xc0, 0x28, 0x2, 0x8003 call StokedSparksurferSparkGeyser - launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_DEF | ANIM_PAL_ATK, 0x2, 0x0, 0x10, 0x5bff - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x37 0x2c 0x0 0x28 0x0 0x8003 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x37 0x2c 0x40 0x28 0x1 0x8003 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x37 0x2c 0x80 0x28 0x0 0x8003 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x00 0x37 0x2c 0xc0 0x28 0x2 0x8003 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_TARGET | F_PAL_ATTACKER), 0x2, 0x0, 0x10, 0x5bff + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x37, 0x2c, 0x0, 0x28, 0x0, 0x8003 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x37, 0x2c, 0x40, 0x28, 0x1, 0x8003 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x37, 0x2c, 0x80, 0x28, 0x0, 0x8003 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x00, 0x37, 0x2c, 0xc0, 0x28, 0x2, 0x8003 call StokedSparksurferSparkGeyser - launchtask AnimTask_VoltTackleAttackerReappear 0x5 0x0 @ attacker flicker back + createvisualtask AnimTask_VoltTackleAttackerReappear, 0x5 @ attacker flicker back playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_TARGET delay 0x4 - launchtemplate gElectricPuffSpriteTemplate 0x2 0x3 0x0 0x10 0x10 + createsprite gElectricPuffSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x10, 0x10 delay 0x2 - launchtemplate gElectricPuffSpriteTemplate 0x2 0x3 0x0 0xfff0 0xfff0 + createsprite gElectricPuffSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff0, 0xfff0 delay 0x4 waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_DEF | ANIM_PAL_ATK, 0x2, 0x10, 0x0, 0x5bff + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_TARGET | F_PAL_ATTACKER), 0x2, 0x10, 0x0, 0x5bff restorebg delay 0x18 - launchtask AnimTask_AllBanksVisible 0xA 0x0 + createvisualtask AnimTask_AllBanksVisible, 0xA waitforvisualfinish end StokedSparksurferSparkGeyser: playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x5 0x2c 0x0 0x28 0x0 0x8003 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x5 0x2c 0x40 0x28 0x1 0x8003 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x5 0x2c 0x80 0x28 0x0 0x8003 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x15 0x2c 0x0 0x28 0x0 0x8003 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x15 0x2c 0x40 0x28 0x1 0x8003 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x15 0x2c 0x80 0x28 0x0 0x8003 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x5, 0x2c, 0x0, 0x28, 0x0, 0x8003 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x5, 0x2c, 0x40, 0x28, 0x1, 0x8003 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x5, 0x2c, 0x80, 0x28, 0x0, 0x8003 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x15, 0x2c, 0x0, 0x28, 0x0, 0x8003 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x15, 0x2c, 0x40, 0x28, 0x1, 0x8003 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x15, 0x2c, 0x80, 0x28, 0x0, 0x8003 delay 0x4 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffea 0x5 0x2c 0x0 0x28 0x0 0x8003 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffea 0x5 0x2c 0x40 0x28 0x1 0x8003 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffea 0x5 0x2c 0x80 0x28 0x0 0x8003 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0xffea, 0x5, 0x2c, 0x0, 0x28, 0x0, 0x8003 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0xffea, 0x5, 0x2c, 0x40, 0x28, 0x1, 0x8003 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0xffea, 0x5, 0x2c, 0x80, 0x28, 0x0, 0x8003 delay 0x4 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffd4 0x5 0x2c 0x0 0x28 0x0 0x8003 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffd4 0x5 0x2c 0x40 0x28 0x1 0x8003 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffd4 0x5 0x2c 0x80 0x28 0x0 0x8003 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffd4 0x15 0x2c 0x0 0x28 0x0 0x8003 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffd4 0x15 0x2c 0x40 0x28 0x1 0x8003 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffd4 0x15 0x2c 0x80 0x28 0x0 0x8003 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0xffd4, 0x5, 0x2c, 0x0, 0x28, 0x0, 0x8003 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0xffd4, 0x5, 0x2c, 0x40, 0x28, 0x1, 0x8003 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0xffd4, 0x5, 0x2c, 0x80, 0x28, 0x0, 0x8003 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0xffd4, 0x15, 0x2c, 0x0, 0x28, 0x0, 0x8003 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0xffd4, 0x15, 0x2c, 0x40, 0x28, 0x1, 0x8003 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0xffd4, 0x15, 0x2c, 0x80, 0x28, 0x0, 0x8003 delay 0x4 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffbe 0x5 0x2c 0x0 0x28 0x0 0x8003 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffbe 0x5 0x2c 0x40 0x28 0x1 0x8003 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffbe 0x5 0x2c 0x80 0x28 0x0 0x8003 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffbe 0x15 0x2c 0x0 0x28 0x0 0x8003 -@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffbe 0x15 0x2c 0x40 0x28 0x1 0x8003 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffbe 0x15 0x2c 0x80 0x28 0x0 0x8003 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0xffbe, 0x5, 0x2c, 0x0, 0x28, 0x0, 0x8003 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0xffbe, 0x5, 0x2c, 0x40, 0x28, 0x1, 0x8003 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0xffbe, 0x5, 0x2c, 0x80, 0x28, 0x0, 0x8003 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0xffbe, 0x15, 0x2c, 0x0, 0x28, 0x0, 0x8003 +@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0xffbe, 0x15, 0x2c, 0x40, 0x28, 0x1, 0x8003 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0xffbe, 0x15, 0x2c, 0x80, 0x28, 0x0, 0x8003 delay 0x1a return Move_EXTREME_EVOBOOST:: loadspritegfx ANIM_TAG_LEER @leer - launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG | ANIM_PAL_ATK | ANIM_PAL_ATK_PARTNER | ANIM_PAL_OPPONENT1 | ANIM_PAL_OPPONENT2, 0x3, 0x0, 0x10, 0x0000 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS), 0x3, 0x0, 0x10, 0x0000 waitforvisualfinish - launchtask AnimTask_AllBanksInvisible 0xA 0x0 - launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_ATK | ANIM_PAL_ATK_PARTNER | ANIM_PAL_OPPONENT1 | ANIM_PAL_OPPONENT2, 3, 0, 0, 0 @;Remove fading on everyone + createvisualtask AnimTask_AllBanksInvisible, 0xA + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BATTLERS, 3, 0, 0, 0 @;Remove fading on everyone waitforvisualfinish playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER - launchtemplate gLeerSpriteTemplate 0x2 0x2 0x18 0xfff4 - launchtemplate gLeerSpriteTemplate 0x2 0x2 0xffe8 0xfff4 + createsprite gLeerSpriteTemplate, ANIM_ATTACKER, 2, 0x18, 0xfff4 + createsprite gLeerSpriteTemplate, ANIM_ATTACKER, 2, 0xffe8, 0xfff4 delay 0xa playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER - launchtemplate gLeerSpriteTemplate 0x2 0x2 0x28 0xfff0 - launchtemplate gLeerSpriteTemplate 0x2 0x2 0xfff8 0xfff0 + createsprite gLeerSpriteTemplate, ANIM_ATTACKER, 2, 0x28, 0xfff0 + createsprite gLeerSpriteTemplate, ANIM_ATTACKER, 2, 0xfff8, 0xfff0 delay 0xa playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER - launchtemplate gLeerSpriteTemplate 0x2 0x2 0x8 0xfffe - launchtemplate gLeerSpriteTemplate 0x2 0x2 0xffd8 0xfffe + createsprite gLeerSpriteTemplate, ANIM_ATTACKER, 2, 0x8, 0xfffe + createsprite gLeerSpriteTemplate, ANIM_ATTACKER, 2, 0xffd8, 0xfffe delay 0xa playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER - launchtemplate gLeerSpriteTemplate 0x2 0x2 0x10 0x5 - launchtemplate gLeerSpriteTemplate 0x2 0x2 0xffe0 0x5 + createsprite gLeerSpriteTemplate, ANIM_ATTACKER, 2, 0x10, 0x5 + createsprite gLeerSpriteTemplate, ANIM_ATTACKER, 2, 0xffe0, 0x5 delay 0xa playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER - launchtemplate gLeerSpriteTemplate 0x2 0x2 0x20 0xfff0 - launchtemplate gLeerSpriteTemplate 0x2 0x2 0xfff0 0xfff0 + createsprite gLeerSpriteTemplate, ANIM_ATTACKER, 2, 0x20, 0xfff0 + createsprite gLeerSpriteTemplate, ANIM_ATTACKER, 2, 0xfff0, 0xfff0 delay 0xa playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER - launchtemplate gLeerSpriteTemplate 0x2 0x2 0x5 0x0 - launchtemplate gLeerSpriteTemplate 0x2 0x2 0xffd5 0x0 + createsprite gLeerSpriteTemplate, ANIM_ATTACKER, 2, 0x5, 0x0 + createsprite gLeerSpriteTemplate, ANIM_ATTACKER, 2, 0xffd5, 0x0 delay 0xa playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER - launchtemplate gLeerSpriteTemplate 0x2 0x2 0x1c 0x5 - launchtemplate gLeerSpriteTemplate 0x2 0x2 0xffec 0x5 + createsprite gLeerSpriteTemplate, ANIM_ATTACKER, 2, 0x1c, 0x5 + createsprite gLeerSpriteTemplate, ANIM_ATTACKER, 2, 0xffec, 0x5 delay 0xa playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER - launchtemplate gLeerSpriteTemplate 0x2 0x2 0xf 0xfff4 - launchtemplate gLeerSpriteTemplate 0x2 0x2 0xffdf 0xfff4 + createsprite gLeerSpriteTemplate, ANIM_ATTACKER, 2, 0xf, 0xfff4 + createsprite gLeerSpriteTemplate, ANIM_ATTACKER, 2, 0xffdf, 0xfff4 waitforvisualfinish fadetobg BG_ZMOVE_ACTIVATE waitbgfadeout @@ -28285,90 +28283,90 @@ Move_EXTREME_EVOBOOST:: loadspritegfx ANIM_TAG_WATER_ORB @blue loadspritegfx ANIM_TAG_POISON_BUBBLE @purple loadspritegfx ANIM_TAG_LEAF @green - launchtask AnimTask_BlendParticle, 0x5, 0x5, ANIM_TAG_CIRCLE_OF_LIGHT, 0x0, 0x10, 0x10, 0x5bff + createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_CIRCLE_OF_LIGHT, 0x0, 0x10, 0x10, 0x5bff waitforvisualfinish playsewithpan SE_M_REVERSAL, SOUND_PAN_ATTACKER - launchtemplate gExtremeEvoboostRedChargeUpSpriteTemplate 0x82 0x7 0x0 0x1c 0x510 0x1e 0xd 0x32 ANIM_ATTACKER + createsprite gExtremeEvoboostRedChargeUpSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x510, 0x1e, 0xd, 0x32, ANIM_ATTACKER delay 0x2 - launchtemplate gExtremeEvoboostPinkChargeUpSpriteTemplate 0x82 0x7 0x0 0x20 0x4e0 0x14 0x10 0xffd2 ANIM_ATTACKER + createsprite gExtremeEvoboostPinkChargeUpSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x20, 0x4e0, 0x14, 0x10, 0xffd2, ANIM_ATTACKER delay 0x2 - launchtemplate gExtremeEvoboostIceChargeUpSpriteTemplate 0x82 0x7 0x0 0x21 0x540 0x14 0x8 0x2a ANIM_ATTACKER + createsprite gExtremeEvoboostIceChargeUpSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x540, 0x14, 0x8, 0x2a, ANIM_ATTACKER delay 0x2 - launchtemplate gExtremeEvoboostBlackChargeUpSpriteTemplate 0x82 0x7 0x0 0x1f 0x490 0x19 0xb 0xffd6 ANIM_ATTACKER + createsprite gExtremeEvoboostBlackChargeUpSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1f, 0x490, 0x19, 0xb, 0xffd6, ANIM_ATTACKER delay 0x2 - launchtemplate gExtremeEvoboostBlueChargeUpSpriteTemplate 0x82 0x7 0x0 0x1c 0x500 0x19 0x10 0x2e ANIM_ATTACKER + createsprite gExtremeEvoboostBlueChargeUpSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x500, 0x19, 0x10, 0x2e, ANIM_ATTACKER delay 0x2 - launchtemplate gExtremeEvoboostPurpleChargeUpSpriteTemplate 0x82 0x7 0x0 0x21 0x4d0 0x1e 0xf 0xffce ANIM_ATTACKER + createsprite gExtremeEvoboostPurpleChargeUpSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x4d0, 0x1e, 0xf, 0xffce, ANIM_ATTACKER delay 0x2 - launchtemplate gExtremeEvoboostYellowChargeUpSpriteTemplate 0x82 0x7 0x0 0x1c 0x510 0x1e 0xd 0x32 ANIM_ATTACKER + createsprite gExtremeEvoboostYellowChargeUpSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x510, 0x1e, 0xd, 0x32, ANIM_ATTACKER delay 0x2 - launchtemplate gExtremeEvoboostGreenChargeUpSpriteTemplate 0x82 0x7 0x0 0x20 0x4e0 0x14 0x10 0xffd2 ANIM_ATTACKER + createsprite gExtremeEvoboostGreenChargeUpSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x20, 0x4e0, 0x14, 0x10, 0xffd2, ANIM_ATTACKER delay 0x2 waitforvisualfinish visible ANIM_ATTACKER loopsewithpan SE_M_REFLECT, SOUND_PAN_ATTACKER, 0x15, 0xd call ExtremeEvoboostColorCircle - launchtask AnimTask_StockpileDeformMon 0x5 0x0 @stockpile movement + createvisualtask AnimTask_StockpileDeformMon, 0x5 @stockpile movement call ExtremeEvoboostColorCharge call ExtremeEvoboostColorCharge call ExtremeEvoboostColorCharge waitforvisualfinish playsewithpan SE_SHINY, SOUND_PAN_ATTACKER delay 0x5 - launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_ATK | ANIM_PAL_BG, 0x0, 0x0, 0x10, 0x7fff + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_ATTACKER), 0x0, 0x0, 0x10, 0x7fff delay 0x18 call ResetFromWhiteScreen end ExtremeEvoboostColorCircle: - launchtemplate gExtremeEvoboostRedChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0 + createsprite gExtremeEvoboostRedChargeCircleSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff0 delay 0x2 - launchtemplate gExtremeEvoboostPinkChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0 + createsprite gExtremeEvoboostPinkChargeCircleSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff0 delay 0x2 - launchtemplate gExtremeEvoboostIceChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0 + createsprite gExtremeEvoboostIceChargeCircleSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff0 delay 0x2 - launchtemplate gExtremeEvoboostBlackChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0 + createsprite gExtremeEvoboostBlackChargeCircleSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff0 delay 0x2 - launchtemplate gExtremeEvoboostBlueChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0 + createsprite gExtremeEvoboostBlueChargeCircleSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff0 delay 0x2 - launchtemplate gExtremeEvoboostPurpleChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0 + createsprite gExtremeEvoboostPurpleChargeCircleSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff0 delay 0x2 - launchtemplate gExtremeEvoboostYellowChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0 + createsprite gExtremeEvoboostYellowChargeCircleSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff0 delay 0x2 - launchtemplate gExtremeEvoboostGreenChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0 + createsprite gExtremeEvoboostGreenChargeCircleSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff0 delay 0x2 return ExtremeEvoboostColorCharge: - launchtemplate gExtremeEvoboostRedChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0 + createsprite gExtremeEvoboostRedChargeCircleSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff0 delay 0x2 - launchtemplate gExtremeEvoboostRedStockpileSpriteTemplate 0x2 0x3 0x37 0x37 0xd + createsprite gExtremeEvoboostRedStockpileSpriteTemplate, ANIM_ATTACKER, 2, 0x37, 0x37, 0xd delay 0x2 - launchtemplate gExtremeEvoboostPinkChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0 + createsprite gExtremeEvoboostPinkChargeCircleSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff0 delay 0x2 - launchtemplate gExtremeEvoboostPinkStockpileSpriteTemplate 0x2 0x3 0xffc9 0xffc9 0xd + createsprite gExtremeEvoboostPinkStockpileSpriteTemplate, ANIM_ATTACKER, 2, 0xffc9, 0xffc9, 0xd delay 0x2 - launchtemplate gExtremeEvoboostIceChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0 + createsprite gExtremeEvoboostIceChargeCircleSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff0 delay 0x2 - launchtemplate gExtremeEvoboostIceStockpileSpriteTemplate 0x2 0x3 0x0 0x37 0xd + createsprite gExtremeEvoboostIceStockpileSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x37, 0xd delay 0x2 - launchtemplate gExtremeEvoboostBlackChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0 + createsprite gExtremeEvoboostBlackChargeCircleSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff0 delay 0x2 - launchtemplate gExtremeEvoboostBlackStockpileSpriteTemplate 0x2 0x3 0x0 0xffc9 0xd + createsprite gExtremeEvoboostBlackStockpileSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffc9, 0xd delay 0x2 - launchtemplate gExtremeEvoboostBlueChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0 + createsprite gExtremeEvoboostBlueChargeCircleSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff0 delay 0x2 - launchtemplate gExtremeEvoboostBlueStockpileSpriteTemplate 0x2 0x3 0x37 0xffde 0xd + createsprite gExtremeEvoboostBlueStockpileSpriteTemplate, ANIM_ATTACKER, 2, 0x37, 0xffde, 0xd delay 0x2 - launchtemplate gExtremeEvoboostPurpleChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0 + createsprite gExtremeEvoboostPurpleChargeCircleSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff0 delay 0x2 - launchtemplate gExtremeEvoboostPurpleStockpileSpriteTemplate 0x2 0x3 0x37 0x22 0xd + createsprite gExtremeEvoboostPurpleStockpileSpriteTemplate, ANIM_ATTACKER, 2, 0x37, 0x22, 0xd delay 0x2 - launchtemplate gExtremeEvoboostYellowChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0 + createsprite gExtremeEvoboostYellowChargeCircleSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff0 delay 0x2 - launchtemplate gExtremeEvoboostYellowStockpileSpriteTemplate 0x2 0x3 0xffc9 0xffde 0xd + createsprite gExtremeEvoboostYellowStockpileSpriteTemplate, ANIM_ATTACKER, 2, 0xffc9, 0xffde, 0xd delay 0x2 - launchtemplate gExtremeEvoboostGreenChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0 + createsprite gExtremeEvoboostGreenChargeCircleSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff0 delay 0x2 - launchtemplate gExtremeEvoboostGreenStockpileSpriteTemplate 0x2 0x3 0xffc9 0x22 0xd + createsprite gExtremeEvoboostGreenStockpileSpriteTemplate, ANIM_ATTACKER, 2, 0xffc9, 0x22, 0xd delay 0x2 return @@ -28379,22 +28377,22 @@ Move_PULVERIZING_PANCAKE:: loadspritegfx ANIM_TAG_MUD_SAND @dig loadspritegfx ANIM_TAG_IMPACT @hit loadspritegfx ANIM_TAG_QUICK_GUARD_HAND @black colour - launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish - launchtask AnimTask_IsTargetPlayerSide 0x2 0x0 + createvisualtask AnimTask_IsTargetPlayerSide, 0x2 jumpargeq 0x7 ANIM_TARGET PulverizingPancakeOnPlayer PulverizingPancakeOnOpponent: - launchtemplate gPulverizingPancakeRedDetectSpriteTemplate 0xd 0x2 0x14 0xffec + createsprite gPulverizingPancakeRedDetectSpriteTemplate, ANIM_ATTACKER, 13, 0x14, 0xffec goto PulverizingPancakeFinish PulverizingPancakeOnPlayer: - launchtemplate gPulverizingPancakeRedDetectSpriteTemplate 0xd 0x2 0xa 0xfff2 - launchtemplate gPulverizingPancakeRedDetectSpriteTemplate 0xd 0x2 0xfff6 0xfff2 + createsprite gPulverizingPancakeRedDetectSpriteTemplate, ANIM_ATTACKER, 13, 0xa, 0xfff2 + createsprite gPulverizingPancakeRedDetectSpriteTemplate, ANIM_ATTACKER, 13, 0xfff6, 0xfff2 PulverizingPancakeFinish: playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER waitforvisualfinish fadetobg BG_SOLAR_BEAM_OPPONENT waitbgfadeout - launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_ATTACKER 0x0 0x2 0x32 0x1 + createvisualtask AnimTask_ShakeMon, 0x5, ANIM_ATTACKER, 0x0, 0x2, 0x32, 0x1 call PulverizingPancakeDiggingRun call PulverizingPancakeDiggingRun call PulverizingPancakeDiggingRun @@ -28406,27 +28404,27 @@ PulverizingPancakeFinish: call PulverizingPancakeDiggingRun loadspritegfx ANIM_TAG_ROUND_SHADOW @fly playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET - launchtemplate gFlyBallUpSpriteTemplate 0x2 0x4 0x0 0x0 0xd 0x150 + createsprite gFlyBallUpSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0xd, 0x150 delay 0x2 - launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x0 0xc 0x4 0xfff0 0x22 - launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x0 0x10 0x4 0xfff6 0x22 - launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x1 0xe 0x4 0xffee 0x22 - launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x1 0xc 0x4 0xfff0 0x22 + createsprite gDirtPlumeSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0xc, 0x4, 0xfff0, 0x22 + createsprite gDirtPlumeSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x10, 0x4, 0xfff6, 0x22 + createsprite gDirtPlumeSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1, 0xe, 0x4, 0xffee, 0x22 + createsprite gDirtPlumeSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1, 0xc, 0x4, 0xfff0, 0x22 unloadspritegfx ANIM_TAG_SPARKLE_4 unloadspritegfx ANIM_TAG_VERTICAL_HEX fadetobg BG_IN_AIR waitbgfadeout - launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0 0x1000 0x0 0xffff + createvisualtask AnimTask_StartSlidingBg, 0x5, 0x0, 0x1000, 0x0, 0xffff waitbgfadein loadspritegfx ANIM_TAG_WHITE_SHADOW - launchtask AnimTask_PulverizingPancakeWhiteShadow 0x5 0x2 0x33 0x33 @first arg is duration, last arg is move speed + createvisualtask AnimTask_PulverizingPancakeWhiteShadow, 0x5, 0x33, 0x33 @first arg is duration, last arg is move speed delay 0x10 call PulverizingPancakeSlowBackground call PulverizingPancakeSlowBackground call PulverizingPancakeSlowBackground call PulverizingPancakeSlowBackground call PulverizingPancakeSlowBackground - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 0x4 0x2 0x0 0xb 0x0000 @ target darkens + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, 0x4, 0x2, 0x0, 0xb, 0x0000 @ target darkens call PulverizingPancakeSlowBackground @0 call PulverizingPancakeSlowBackground call PulverizingPancakeSlowBackground @@ -28439,50 +28437,50 @@ PulverizingPancakeFinish: loadspritegfx ANIM_TAG_THIN_RING @ring unloadspritegfx ANIM_TAG_MUD_SAND @dig loadspritegfx ANIM_TAG_ELECTRIC_ORBS @yellow - launchtemplate gBounceBallLandSpriteTemplate 0x83 0x0 + createsprite gBounceBallLandSpriteTemplate, ANIM_TARGET, 3 delay 0x7 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gBasicHitSplatSpriteTemplate 0x82, 0x4, 0x0 0x0 0x1 0x0 @big hit marker + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x1, 0x0 @big hit marker delay 0x0 - launchtask AnimTask_HorizontalShake 0x5 0x3 ANIM_TARGET 0x4 0x2c - launchtemplate gPulverizingPancakeYellowRingSpriteTemplate 0x83 0x4 0x0 0x0 0x100 0x0 + createvisualtask AnimTask_HorizontalShake, 0x5, ANIM_TARGET, 0x4, 0x2c + createsprite gPulverizingPancakeYellowRingSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, 0x100, 0x0 delay 0x5 loadspritegfx ANIM_TAG_EXPLOSION @explosion call PulverizingPancakeExplosion - launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG | ANIM_PAL_ALL_BATTLERS, 0x2, 0x0, 0x10, 0x7fff @ everything goes white + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS), 0x2, 0x0, 0x10, 0x7fff @ everything goes white call PulverizingPancakeExplosion waitforvisualfinish call ResetFromWhiteScreen end PulverizingPancakeDiggingRun: - launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x0 0xc 0x4 0xfff0 0x12 - launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x0 0x10 0x4 0xfff6 0x12 - launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x1 0xe 0x4 0xffee 0x12 - launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x1 0xc 0x4 0xfff0 0x12 + createsprite gDirtPlumeSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0xc, 0x4, 0xfff0, 0x12 + createsprite gDirtPlumeSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x10, 0x4, 0xfff6, 0x12 + createsprite gDirtPlumeSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1, 0xe, 0x4, 0xffee, 0x12 + createsprite gDirtPlumeSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1, 0xc, 0x4, 0xfff0, 0x12 playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER delay 0x5 return PulverizingPancakeSlowBackground: - launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0 0xfd56 0x0 0xffff @-0x2aa + createvisualtask AnimTask_StartSlidingBg, 0x5, 0x0, 0xfd56, 0x0, 0xffff @-0x2aa delay 0x1 return PulverizingPancakeExplosion: playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gPulverizingPancakeExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1 + createsprite gPulverizingPancakeExplosionSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, ANIM_TARGET, 0x1 delay 0x6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gPulverizingPancakeYellowRingSpriteTemplate 0x83 0x4 0x0 0x0 0x100 0x0 - launchtemplate gPulverizingPancakeExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1 + createsprite gPulverizingPancakeYellowRingSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, 0x100, 0x0 + createsprite gPulverizingPancakeExplosionSpriteTemplate, ANIM_TARGET, 3, 0x18, 0xffe8, ANIM_TARGET, 0x1 delay 0x6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gPulverizingPancakeExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + createsprite gPulverizingPancakeExplosionSpriteTemplate, ANIM_TARGET, 3, 0xfff0, 0x10, ANIM_TARGET, 0x1 delay 0x6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gPulverizingPancakeExplosionSpriteTemplate 0x83 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 + createsprite gPulverizingPancakeExplosionSpriteTemplate, ANIM_TARGET, 3, 0xffe8, 0xfff4, ANIM_TARGET, 0x1 delay 0x6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gPulverizingPancakeYellowRingSpriteTemplate 0x83 0x4 0x0 0x0 0x100 0x0 - launchtemplate gPulverizingPancakeExplosionSpriteTemplate 0x83 0x4 0x10 0x10 ANIM_TARGET 0x1 + createsprite gPulverizingPancakeYellowRingSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, 0x100, 0x0 + createsprite gPulverizingPancakeExplosionSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x10, ANIM_TARGET, 0x1 delay 0x6 return @@ -28491,24 +28489,24 @@ Move_GENESIS_SUPERNOVA:: loadspritegfx ANIM_TAG_BLUE_ORB @reversal loadspritegfx ANIM_TAG_POISON_BUBBLE @poison bubble loadspritegfx ANIM_TAG_POISON_JAB @purple - launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish call SetPsychicBackground loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER - launchtask AnimTask_IsTargetPlayerSide 0x2 0x0 + createvisualtask AnimTask_IsTargetPlayerSide, 0x2 jumpargeq 0x7 ANIM_TARGET GenesisSupernovaOnPlayer GenesisSupernovaOnOpponent: call GenesisSupernovaBuffEffectPlayer_1 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x2 0x0 0xb 0xd87c - launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x70 0x1 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x2, 0x0, 0xb, 0xd87c + createvisualtask AnimTask_ShakeMon2, 0x2, 0x0, 0x1, 0x0, 0x70, 0x1 call GenesisSupernovaBuffEffectPlayer_2 call GenesisSupernovaBuffEffectPlayer_1 goto GenesisSupernovaFinish GenesisSupernovaOnPlayer: call GenesisSupernovaBuffOpponent_1 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x2 0x0 0xb 0xd87c - launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x70 0x1 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x2, 0x0, 0xb, 0xd87c + createvisualtask AnimTask_ShakeMon2, 0x2, 0x0, 0x1, 0x0, 0x70, 0x1 call GenesisSupernovaBuffOpponent_2 call GenesisSupernovaBuffOpponent_1 GenesisSupernovaFinish: @@ -28520,8 +28518,8 @@ GenesisSupernovaFinish: unloadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge monbg ANIM_ATTACKER - setblends 0x80c - launchtemplate gGenesisSupernovaChargeSpriteTemplate 0x2 0x1 0x0 @charge + setalpha 12, 8 + createsprite gGenesisSupernovaChargeSpriteTemplate, ANIM_ATTACKER, 2, 0x0 @charge call GenesisSupernovaFlare @delay 12 per call GenesisSupernovaFlare call GenesisSupernovaFlare @@ -28532,21 +28530,21 @@ GenesisSupernovaFinish: loadspritegfx ANIM_TAG_WISP_ORB @will-o-wisp loadspritegfx ANIM_TAG_METEOR @superpower loadspritegfx ANIM_TAG_SPARKLE_2 @sparkles - launchtemplate gGenesisSupernovaSuperpowerSpriteTemplate 0x83 0x1 0x0 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x0 0xb 0x0 0xd87c + createsprite gGenesisSupernovaSuperpowerSpriteTemplate, ANIM_TARGET, 3, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x0, 0xb, 0x0, 0xd87c playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER - launchtask AnimTask_BlendParticle, 0x2, 0x5, ANIM_TAG_SPARKLE_2, 0x0, 0x0, 0xc, 0x7fff + createvisualtask AnimTask_BlendParticle, 0x2, ANIM_TAG_SPARKLE_2, 0x0, 0x0, 0xc, 0x7fff delay 0x8 invisible ANIM_TARGET loadspritegfx ANIM_TAG_EXPLOSION @explosion unloadspritegfx ANIM_TAG_METEOR @superpower call GenesisSupernovaBubbleExplosion call GenesisSupernovaBubbleExplosion - launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG | ANIM_PAL_ALL_BATTLERS, 0x3, 0x0, 0x10, 0x7fff + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS), 0x3, 0x0, 0x10, 0x7fff call GenesisSupernovaBubbleExplosion waitforvisualfinish delay 0x10 - launchtask AnimTask_BlendParticle, 0x2, 0x5, ANIM_TAG_SPARKLE_2, 0x0, 0xc, 0x0, 0x7fff + createvisualtask AnimTask_BlendParticle, 0x2, ANIM_TAG_SPARKLE_2, 0x0, 0xc, 0x0, 0x7fff clearmonbg ANIM_ATTACKER blendoff delay 0x0 @@ -28554,123 +28552,123 @@ GenesisSupernovaFinish: waitforvisualfinish end GenesisSupernovaBubbleExplosion: - launchtemplate gGrantingStarsSpriteTemplate 0x2 0x6 0xfff1 0x0 ANIM_TARGET 0x0 0x20 0x3c - launchtemplate gGenesisSupernovaBubbleSpriteTemplate 0x82, 0x3, 0xa 0xa 0x0 - launchtemplate gGenesisSupernovaExplosionSpriteTemplate 0x3 0x4 0x0 0x0 ANIM_TARGET 0x1 + createsprite gGrantingStarsSpriteTemplate, ANIM_ATTACKER, 2, 0xfff1, 0x0, ANIM_TARGET, 0x0, 0x20, 0x3c + createsprite gGenesisSupernovaBubbleSpriteTemplate, ANIM_TARGET, 2, 0xa, 0xa, 0x0 + createsprite gGenesisSupernovaExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, ANIM_TARGET, 0x1 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER delay 0x6 - launchtemplate gGenesisSupernovaBubbleSpriteTemplate 0x82, 0x3, 0x14 0xffec 0x0 - launchtemplate gGenesisSupernovaExplosionSpriteTemplate 0x3 0x4 0x18 0xffe8 ANIM_TARGET 0x1 + createsprite gGenesisSupernovaBubbleSpriteTemplate, ANIM_TARGET, 2, 0x14, 0xffec, 0x0 + createsprite gGenesisSupernovaExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x18, 0xffe8, ANIM_TARGET, 0x1 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER delay 0x6 - launchtemplate gGrantingStarsSpriteTemplate 0x2 0x6 0xc 0xfffb ANIM_TARGET 0x0 0x20 0x3c - launchtemplate gGenesisSupernovaBubbleSpriteTemplate 0x82, 0x3, 0xffec 0xf 0x0 - launchtemplate gGenesisSupernovaExplosionSpriteTemplate 0x3 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + createsprite gGrantingStarsSpriteTemplate, ANIM_ATTACKER, 2, 0xc, 0xfffb, ANIM_TARGET, 0x0, 0x20, 0x3c + createsprite gGenesisSupernovaBubbleSpriteTemplate, ANIM_TARGET, 2, 0xffec, 0xf, 0x0 + createsprite gGenesisSupernovaExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0xfff0, 0x10, ANIM_TARGET, 0x1 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER delay 0x6 - launchtemplate gGenesisSupernovaBubbleSpriteTemplate 0x82, 0x3, 0x0 0x0 0x0 - launchtemplate gGenesisSupernovaExplosionSpriteTemplate 0x3 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 + createsprite gGenesisSupernovaBubbleSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x0 + createsprite gGenesisSupernovaExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0xffe8, 0xfff4, ANIM_TARGET, 0x1 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER delay 0x6 - launchtemplate gGenesisSupernovaBubbleSpriteTemplate 0x82, 0x3, 0xffec 0xffec 0x0 - launchtemplate gGenesisSupernovaExplosionSpriteTemplate 0x3 0x4 0x10 0x10 ANIM_TARGET 0x1 + createsprite gGenesisSupernovaBubbleSpriteTemplate, ANIM_TARGET, 2, 0xffec, 0xffec, 0x0 + createsprite gGenesisSupernovaExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x10, 0x10, ANIM_TARGET, 0x1 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER delay 0x6 - launchtemplate gGenesisSupernovaBubbleSpriteTemplate 0x82, 0x3, 0x10 0xfff8 0x0 - launchtemplate gGenesisSupernovaExplosionSpriteTemplate 0x3 0x4 0xffe0 0xffe8 ANIM_TARGET 0x1 + createsprite gGenesisSupernovaBubbleSpriteTemplate, ANIM_TARGET, 2, 0x10, 0xfff8, 0x0 + createsprite gGenesisSupernovaExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0xffe0, 0xffe8, ANIM_TARGET, 0x1 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER return GenesisSupernovaBuffEffectPlayer_1: - launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2 - launchtemplate gGenesisSupernovaOrbRiseSpriteTemplate 0x32 0x5 0x24 0x80 0x24 0x30 0x30 + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x1a, 0x2 + createsprite gGenesisSupernovaOrbRiseSpriteTemplate, ANIM_ATTACKER, 50, 0x24, 0x80, 0x24, 0x30, 0x30 delay 0x2 - launchtemplate gGenesisSupernovaOrbRiseSpriteTemplate 0x32 0x5 0x10 0x80 0x10 0x35 0x30 + createsprite gGenesisSupernovaOrbRiseSpriteTemplate, ANIM_ATTACKER, 50, 0x10, 0x80, 0x10, 0x35, 0x30 delay 0x2 - launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1 - launchtemplate gGenesisSupernovaOrbRiseSpriteTemplate 0x32 0x5 0x45 0x80 0x45 0x3a 0x30 + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xe, 0x1c, 0x1 + createsprite gGenesisSupernovaOrbRiseSpriteTemplate, ANIM_ATTACKER, 50, 0x45, 0x80, 0x45, 0x3a, 0x30 delay 0x2 - launchtemplate gGenesisSupernovaOrbRiseSpriteTemplate 0x32 0x5 0x60 0x80 0x60 0x30 0x30 + createsprite gGenesisSupernovaOrbRiseSpriteTemplate, ANIM_ATTACKER, 50, 0x60, 0x80, 0x60, 0x30, 0x30 delay 0x2 - launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2 - launchtemplate gGenesisSupernovaOrbRiseSpriteTemplate 0x32 0x5 0x30 0x80 0x30 0x3c 0x30 + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfffb, 0xa, 0x2 + createsprite gGenesisSupernovaOrbRiseSpriteTemplate, ANIM_ATTACKER, 50, 0x30, 0x80, 0x30, 0x3c, 0x30 delay 0x2 - launchtemplate gGenesisSupernovaOrbRiseSpriteTemplate 0x32 0x5 0x55 0x80 0x55 0x33 0x30 + createsprite gGenesisSupernovaOrbRiseSpriteTemplate, ANIM_ATTACKER, 50, 0x55, 0x80, 0x55, 0x33, 0x30 delay 0x2 - launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1 + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff4, 0x0, 0x1 return GenesisSupernovaBuffEffectPlayer_2: - launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2 - launchtemplate gGenesisSupernovaOrbRiseSpriteTemplate 0x32 0x5 0x29 0x80 0x29 0x31 0x30 + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x1a, 0x2 + createsprite gGenesisSupernovaOrbRiseSpriteTemplate, ANIM_ATTACKER, 50, 0x29, 0x80, 0x29, 0x31, 0x30 delay 0x2 - launchtemplate gGenesisSupernovaOrbRiseSpriteTemplate 0x32 0x5 0x73 0x80 0x73 0x32 0x30 + createsprite gGenesisSupernovaOrbRiseSpriteTemplate, ANIM_ATTACKER, 50, 0x73, 0x80, 0x73, 0x32, 0x30 delay 0x2 - launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1 - launchtemplate gGenesisSupernovaOrbRiseSpriteTemplate 0x32 0x5 0x4a 0x80 0x4a 0x3c 0x30 + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xe, 0x1c, 0x1 + createsprite gGenesisSupernovaOrbRiseSpriteTemplate, ANIM_ATTACKER, 50, 0x4a, 0x80, 0x4a, 0x3c, 0x30 delay 0x2 - launchtemplate gGenesisSupernovaOrbRiseSpriteTemplate 0x32 0x5 0x64 0x80 0x64 0x33 0x30 + createsprite gGenesisSupernovaOrbRiseSpriteTemplate, ANIM_ATTACKER, 50, 0x64, 0x80, 0x64, 0x33, 0x30 delay 0x2 - launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2 - launchtemplate gGenesisSupernovaOrbRiseSpriteTemplate 0x32 0x5 0x2c 0x80 0x2c 0x3d 0x30 + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfffb, 0xa, 0x2 + createsprite gGenesisSupernovaOrbRiseSpriteTemplate, ANIM_ATTACKER, 50, 0x2c, 0x80, 0x2c, 0x3d, 0x30 delay 0x2 - launchtemplate gGenesisSupernovaOrbRiseSpriteTemplate 0x32 0x5 0x6c 0x80 0x6c 0x30 0x30 + createsprite gGenesisSupernovaOrbRiseSpriteTemplate, ANIM_ATTACKER, 50, 0x6c, 0x80, 0x6c, 0x30, 0x30 delay 0x2 - launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1 + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff4, 0x0, 0x1 return GenesisSupernovaReversalWave: - launchtemplate gGenesisSupernovaReversalSpriteTemplate 0x2 0x2 0x1a 0x0 - launchtemplate gGenesisSupernovaReversalSpriteTemplate 0x2 0x2 0x1a 0x2a - launchtemplate gGenesisSupernovaReversalSpriteTemplate 0x2 0x2 0x1a 0x54 - launchtemplate gGenesisSupernovaReversalSpriteTemplate 0x2 0x2 0x1a 0x7e + createsprite gGenesisSupernovaReversalSpriteTemplate, ANIM_ATTACKER, 2, 0x1a, 0x0 + createsprite gGenesisSupernovaReversalSpriteTemplate, ANIM_ATTACKER, 2, 0x1a, 0x2a + createsprite gGenesisSupernovaReversalSpriteTemplate, ANIM_ATTACKER, 2, 0x1a, 0x54 + createsprite gGenesisSupernovaReversalSpriteTemplate, ANIM_ATTACKER, 2, 0x1a, 0x7e return GenesisSupernovaFlare: - launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x82 0x7 0x0 0x1c 0x180 0x32 0x8 0x32 ANIM_ATTACKER + createsprite gGenesisSupernovaSpinUpSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x180, 0x32, 0x8, 0x32, ANIM_ATTACKER delay 0x2 - launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x82 0x7 0x0 0x20 0xf0 0x28 0xb 0xffd2 ANIM_ATTACKER + createsprite gGenesisSupernovaSpinUpSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x20, 0xf0, 0x28, 0xb, 0xffd2, ANIM_ATTACKER delay 0x2 - launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x82 0x7 0x0 0x21 0x1a0 0x28 0x4 0x2a ANIM_ATTACKER + createsprite gGenesisSupernovaSpinUpSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1a0, 0x28, 0x4, 0x2a, ANIM_ATTACKER delay 0x2 - launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x82 0x7 0x0 0x1f 0x120 0x2d 0x6 0xffd6 ANIM_ATTACKER + createsprite gGenesisSupernovaSpinUpSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1f, 0x120, 0x2d, 0x6, 0xffd6, ANIM_ATTACKER delay 0x2 - launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x82 0x7 0x0 0x1c 0x1c0 0x2d 0xb 0x2e ANIM_ATTACKER + createsprite gGenesisSupernovaSpinUpSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x1c0, 0x2d, 0xb, 0x2e, ANIM_ATTACKER delay 0x2 - launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x82 0x7 0x0 0x21 0x1d0 0x32 0xa 0xffce ANIM_ATTACKER + createsprite gGenesisSupernovaSpinUpSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1d0, 0x32, 0xa, 0xffce, ANIM_ATTACKER delay 0x2 return GenesisSupernovaBuffOpponent_1: - launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2 - launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x32 0x5 0x94 0x40 0x94 0x0 0x30 + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x1a, 0x2 + createsprite gGenesisSupernovaSpinUpSpriteTemplate, ANIM_ATTACKER, 50, 0x94, 0x40, 0x94, 0x0, 0x30 delay 0x2 - launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x32 0x5 0x80 0x40 0x80 0x0 0x30 + createsprite gGenesisSupernovaSpinUpSpriteTemplate, ANIM_ATTACKER, 50, 0x80, 0x40, 0x80, 0x0, 0x30 delay 0x2 - launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1 - launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x32 0x5 0xb5 0x40 0xb5 0x0 0x30 + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xe, 0x1c, 0x1 + createsprite gGenesisSupernovaSpinUpSpriteTemplate, ANIM_ATTACKER, 50, 0xb5, 0x40, 0xb5, 0x0, 0x30 delay 0x2 - launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x32 0x5 0xd0 0x40 0xd0 0x0 0x30 + createsprite gGenesisSupernovaSpinUpSpriteTemplate, ANIM_ATTACKER, 50, 0xd0, 0x40, 0xd0, 0x0, 0x30 delay 0x2 - launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2 - launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x32 0x5 0xa0 0x40 0xa0 0x0 0x30 + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfffb, 0xa, 0x2 + createsprite gGenesisSupernovaSpinUpSpriteTemplate, ANIM_ATTACKER, 50, 0xa0, 0x40, 0xa0, 0x0, 0x30 delay 0x2 - launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x32 0x5 0xc5 0x40 0xc5 0x0 0x30 + createsprite gGenesisSupernovaSpinUpSpriteTemplate, ANIM_ATTACKER, 50, 0xc5, 0x40, 0xc5, 0x0, 0x30 delay 0x2 - launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1 + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff4, 0x0, 0x1 return GenesisSupernovaBuffOpponent_2: - launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2 - launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x32 0x5 0x99 0x40 0x99 0x0 0x30 + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x1a, 0x2 + createsprite gGenesisSupernovaSpinUpSpriteTemplate, ANIM_ATTACKER, 50, 0x99, 0x40, 0x99, 0x0, 0x30 delay 0x2 - launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x32 0x5 0xe3 0x40 0xe3 0x0 0x30 + createsprite gGenesisSupernovaSpinUpSpriteTemplate, ANIM_ATTACKER, 50, 0xe3, 0x40, 0xe3, 0x0, 0x30 delay 0x2 - launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1 - launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x32 0x5 0xba 0x40 0xba 0x0 0x30 + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xe, 0x1c, 0x1 + createsprite gGenesisSupernovaSpinUpSpriteTemplate, ANIM_ATTACKER, 50, 0xba, 0x40, 0xba, 0x0, 0x30 delay 0x2 - launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x32 0x5 0xd4 0x40 0xd4 0x0 0x30 + createsprite gGenesisSupernovaSpinUpSpriteTemplate, ANIM_ATTACKER, 50, 0xd4, 0x40, 0xd4, 0x0, 0x30 delay 0x2 - launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2 - launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x32 0x5 0x9c 0x40 0x9c 0x0 0x30 + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfffb, 0xa, 0x2 + createsprite gGenesisSupernovaSpinUpSpriteTemplate, ANIM_ATTACKER, 50, 0x9c, 0x40, 0x9c, 0x0, 0x30 delay 0x2 - launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x32 0x5 0xdc 0x40 0xdc 0x0 0x30 + createsprite gGenesisSupernovaSpinUpSpriteTemplate, ANIM_ATTACKER, 50, 0xdc, 0x40, 0xdc, 0x0, 0x30 delay 0x2 - launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1 + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff4, 0x0, 0x1 return @@ -28679,305 +28677,305 @@ Move_SINISTER_ARROW_RAID:: loadspritegfx ANIM_TAG_SPIRIT_ARROW @arrow loadspritegfx ANIM_TAG_LEAF @green invisible ANIM_TARGET - launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER - launchtemplate gArrowRaidFlyUpSpriteTemplate 0x2 0x4 0x0 0x0 0xd 0x150 + createsprite gArrowRaidFlyUpSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0xd, 0x150 waitforvisualfinish unloadspritegfx ANIM_TAG_ROUND_SHADOW - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x10 0x388C @ bg to purple + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x10, 0x388C @ bg to purple waitforvisualfinish visible ANIM_ATTACKER playsewithpan SE_M_WHIRLPOOL, SOUND_PAN_TARGET - launchtemplate gArrowRaidArrowUpSpriteTemplate 0x2 0x7 0x0 0x1c 0x210 0x1e 0xd 0x32 ANIM_ATTACKER + createsprite gArrowRaidArrowUpSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1c, 0x210, 0x1e, 0xd, 0x32, ANIM_ATTACKER delay 0x2 - launchtemplate gArrowRaidArrowUpSpriteTemplate 0x2 0x7 0x0 0x20 0x1e0 0x14 0x10 0xffd2 ANIM_ATTACKER + createsprite gArrowRaidArrowUpSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x20, 0x1e0, 0x14, 0x10, 0xffd2, ANIM_ATTACKER delay 0x2 - launchtemplate gArrowRaidArrowUpSpriteTemplate 0x2 0x7 0x0 0x21 0x240 0x14 0x8 0x2a ANIM_ATTACKER + createsprite gArrowRaidArrowUpSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x21, 0x240, 0x14, 0x8, 0x2a, ANIM_ATTACKER delay 0x2 - launchtemplate gArrowRaidArrowUpSpriteTemplate 0x2 0x7 0x0 0x1f 0x190 0x19 0xb 0xffd6 ANIM_ATTACKER + createsprite gArrowRaidArrowUpSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1f, 0x190, 0x19, 0xb, 0xffd6, ANIM_ATTACKER delay 0x2 - launchtemplate gArrowRaidArrowUpSpriteTemplate 0x2 0x7 0x0 0x1c 0x200 0x19 0x10 0x2e ANIM_ATTACKER + createsprite gArrowRaidArrowUpSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1c, 0x200, 0x19, 0x10, 0x2e, ANIM_ATTACKER delay 0x2 - launchtemplate gArrowRaidArrowUpSpriteTemplate 0x2 0x7 0x0 0x21 0x1d0 0x1e 0xf 0xffce ANIM_ATTACKER + createsprite gArrowRaidArrowUpSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x21, 0x1d0, 0x1e, 0xf, 0xffce, ANIM_ATTACKER delay 0x2 waitforvisualfinish invisible ANIM_ATTACKER loadspritegfx ANIM_TAG_BIRD @sky attack loadspritegfx ANIM_TAG_EXPLOSION_2 @explosion loadspritegfx ANIM_TAG_POISON_BUBBLE @purple - launchtask AnimTask_IsTargetPlayerSide 0x2 0x0 + createvisualtask AnimTask_IsTargetPlayerSide, 0x2 jumpargeq 0x7 ANIM_TARGET SinisterArrowRaidOnPlayer SinisterArrowRaidOnOpponent: playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER - launchtemplate gArrowRaidFlyRightSpriteTemplate 0x32 0x5 0xfff0 0x88 0x100 0x38 0x15 @left to right + createsprite gArrowRaidFlyRightSpriteTemplate, ANIM_ATTACKER, 50, 0xfff0, 0x88, 0x100, 0x38, 0x15 @left to right delay 0x5 - launchtemplate gArrowRaidRightUpSpriteTemplate 0x32 0x5 0xfff0 0x8a 0x100 0x3a 0x15 @left to right + createsprite gArrowRaidRightUpSpriteTemplate, ANIM_ATTACKER, 50, 0xfff0, 0x8a, 0x100, 0x3a, 0x15 @left to right delay 0x1 - launchtemplate gArrowRaidRightUpSpriteTemplate 0x32 0x5 0xfff0 0x8c 0x100 0x3c 0x15 + createsprite gArrowRaidRightUpSpriteTemplate, ANIM_ATTACKER, 50, 0xfff0, 0x8c, 0x100, 0x3c, 0x15 delay 0x1 - launchtemplate gArrowRaidRightUpSpriteTemplate 0x32 0x5 0xfff0 0x86 0x100 0x36 0x15 + createsprite gArrowRaidRightUpSpriteTemplate, ANIM_ATTACKER, 50, 0xfff0, 0x86, 0x100, 0x36, 0x15 delay 0x1 - launchtemplate gArrowRaidRightUpSpriteTemplate 0x32 0x5 0xfff0 0x84 0x100 0x34 0x15 + createsprite gArrowRaidRightUpSpriteTemplate, ANIM_ATTACKER, 50, 0xfff0, 0x84, 0x100, 0x34, 0x15 delay 0x1 - launchtemplate gArrowRaidRightUpSpriteTemplate 0x32 0x5 0xfff0 0x88 0x100 0x38 0x15 + createsprite gArrowRaidRightUpSpriteTemplate, ANIM_ATTACKER, 50, 0xfff0, 0x88, 0x100, 0x38, 0x15 waitforvisualfinish delay 0xa playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER @[x0] [y0] [xf] [yf] - launchtemplate gArrowRaidFlyLeftSpriteTemplate 0x32 0x5 0x0120 0x38 0xfff0 0x38 0x15 @right to left + createsprite gArrowRaidFlyLeftSpriteTemplate, ANIM_ATTACKER, 50, 0x0120, 0x38, 0xfff0, 0x38, 0x15 @right to left delay 0x5 - launchtemplate gArrowRaidLeftUpSpriteTemplate 0x32 0x5 0x0120 0x36 0xfff0 0x36 0x15 + createsprite gArrowRaidLeftUpSpriteTemplate, ANIM_ATTACKER, 50, 0x0120, 0x36, 0xfff0, 0x36, 0x15 delay 0x1 - launchtemplate gArrowRaidLeftUpSpriteTemplate 0x32 0x5 0x0120 0x3a 0xfff0 0x3a 0x15 + createsprite gArrowRaidLeftUpSpriteTemplate, ANIM_ATTACKER, 50, 0x0120, 0x3a, 0xfff0, 0x3a, 0x15 delay 0x1 - launchtemplate gArrowRaidLeftUpSpriteTemplate 0x32 0x5 0x0120 0x37 0xfff0 0x37 0x15 + createsprite gArrowRaidLeftUpSpriteTemplate, ANIM_ATTACKER, 50, 0x0120, 0x37, 0xfff0, 0x37, 0x15 delay 0x1 - launchtemplate gArrowRaidLeftUpSpriteTemplate 0x32 0x5 0x0120 0x3c 0xfff0 0x3c 0x15 + createsprite gArrowRaidLeftUpSpriteTemplate, ANIM_ATTACKER, 50, 0x0120, 0x3c, 0xfff0, 0x3c, 0x15 delay 0x1 - launchtemplate gArrowRaidLeftUpSpriteTemplate 0x32 0x5 0x0120 0x38 0xfff0 0x38 0x15 + createsprite gArrowRaidLeftUpSpriteTemplate, ANIM_ATTACKER, 50, 0x0120, 0x38, 0xfff0, 0x38, 0x15 waitforvisualfinish delay 0xa playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER - launchtemplate gArrowRaidFlyRightSpriteTemplate 0x32 0x5 0xfff0 0x08 0x100 0x0f 0x15 @left to right + createsprite gArrowRaidFlyRightSpriteTemplate, ANIM_ATTACKER, 50, 0xfff0, 0x08, 0x100, 0x0f, 0x15 @left to right delay 0x5 - launchtemplate gArrowRaidRightDownSpriteTemplate 0x32 0x5 0xfff0 0x0a 0x100 0x11 0x15 + createsprite gArrowRaidRightDownSpriteTemplate, ANIM_ATTACKER, 50, 0xfff0, 0x0a, 0x100, 0x11, 0x15 delay 0x1 - launchtemplate gArrowRaidRightDownSpriteTemplate 0x32 0x5 0xfff0 0x0c 0x100 0x13 0x15 + createsprite gArrowRaidRightDownSpriteTemplate, ANIM_ATTACKER, 50, 0xfff0, 0x0c, 0x100, 0x13, 0x15 delay 0x1 - launchtemplate gArrowRaidRightDownSpriteTemplate 0x32 0x5 0xfff0 0x06 0x100 0xd 0x15 + createsprite gArrowRaidRightDownSpriteTemplate, ANIM_ATTACKER, 50, 0xfff0, 0x06, 0x100, 0xd, 0x15 delay 0x1 - launchtemplate gArrowRaidRightDownSpriteTemplate 0x32 0x5 0xfff0 0x04 0x100 0xb 0x15 + createsprite gArrowRaidRightDownSpriteTemplate, ANIM_ATTACKER, 50, 0xfff0, 0x04, 0x100, 0xb, 0x15 delay 0x1 - launchtemplate gArrowRaidRightDownSpriteTemplate 0x32 0x5 0xfff0 0x08 0x100 0xf 0x15 + createsprite gArrowRaidRightDownSpriteTemplate, ANIM_ATTACKER, 50, 0xfff0, 0x08, 0x100, 0xf, 0x15 waitforvisualfinish call SinisterArrowRaidFlyStrike - launchtask AnimTask_HorizontalShake 0x5 0x3 ANIM_TARGET 0x3 0x4b - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x4 0x0 0x10 0x40c0 @ defender to purple + createvisualtask AnimTask_HorizontalShake, 0x5, ANIM_TARGET, 0x3, 0x4b + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x4, 0x0, 0x10, 0x40c0 @ defender to purple call SinisterArrowRaidStrikeOpponent call SinisterArrowRaidOpponentExplosion playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gArrowRaidExplosionSpriteTemplate 0x3 0x4 0x10 0x10 ANIM_TARGET 0x1 + createsprite gArrowRaidExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x10, 0x10, ANIM_TARGET, 0x1 call SinisterArrowRaidFinalExplosion goto SinisterArrowRaidFinish @on player SinisterArrowRaidOnPlayer: playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER - launchtemplate gArrowRaidFlyLeftSpriteTemplate 0x32 0x5 0x0120 0x08 0xfff0 0x0f 0x15 @right to left + createsprite gArrowRaidFlyLeftSpriteTemplate, ANIM_ATTACKER, 50, 0x0120, 0x08, 0xfff0, 0x0f, 0x15 @right to left delay 0x5 - launchtemplate gArrowRaidFaceUpLeftSpriteTemplate 0x32 0x5 0x0120 0x0a 0xfff0 0x11 0x15 + createsprite gArrowRaidFaceUpLeftSpriteTemplate, ANIM_ATTACKER, 50, 0x0120, 0x0a, 0xfff0, 0x11, 0x15 delay 0x1 - launchtemplate gArrowRaidFaceUpLeftSpriteTemplate 0x32 0x5 0x0120 0x0c 0xfff0 0x13 0x15 + createsprite gArrowRaidFaceUpLeftSpriteTemplate, ANIM_ATTACKER, 50, 0x0120, 0x0c, 0xfff0, 0x13, 0x15 delay 0x1 - launchtemplate gArrowRaidFaceUpLeftSpriteTemplate 0x32 0x5 0x0120 0x06 0xfff0 0xd 0x15 + createsprite gArrowRaidFaceUpLeftSpriteTemplate, ANIM_ATTACKER, 50, 0x0120, 0x06, 0xfff0, 0xd, 0x15 delay 0x1 - launchtemplate gArrowRaidFaceUpLeftSpriteTemplate 0x32 0x5 0x0120 0x04 0xfff0 0xb 0x15 + createsprite gArrowRaidFaceUpLeftSpriteTemplate, ANIM_ATTACKER, 50, 0x0120, 0x04, 0xfff0, 0xb, 0x15 delay 0x1 - launchtemplate gArrowRaidFaceUpLeftSpriteTemplate 0x32 0x5 0x0120 0x08 0xfff0 0xf 0x15 + createsprite gArrowRaidFaceUpLeftSpriteTemplate, ANIM_ATTACKER, 50, 0x0120, 0x08, 0xfff0, 0xf, 0x15 waitforvisualfinish delay 0xa playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER - launchtemplate gArrowRaidFlyRightSpriteTemplate 0x32 0x5 0xfff0 0x38 0x100 0x38 0x15 @left to right + createsprite gArrowRaidFlyRightSpriteTemplate, ANIM_ATTACKER, 50, 0xfff0, 0x38, 0x100, 0x38, 0x15 @left to right delay 0x5 - launchtemplate gArrowRaidRightSpriteTemplate 0x32 0x5 0xfff0 0x36 0x100 0x36 0x15 + createsprite gArrowRaidRightSpriteTemplate, ANIM_ATTACKER, 50, 0xfff0, 0x36, 0x100, 0x36, 0x15 delay 0x1 - launchtemplate gArrowRaidRightSpriteTemplate 0x32 0x5 0xfff0 0x3a 0x100 0x3a 0x15 + createsprite gArrowRaidRightSpriteTemplate, ANIM_ATTACKER, 50, 0xfff0, 0x3a, 0x100, 0x3a, 0x15 delay 0x1 - launchtemplate gArrowRaidRightSpriteTemplate 0x32 0x5 0xfff0 0x37 0x100 0x37 0x15 + createsprite gArrowRaidRightSpriteTemplate, ANIM_ATTACKER, 50, 0xfff0, 0x37, 0x100, 0x37, 0x15 delay 0x1 - launchtemplate gArrowRaidRightSpriteTemplate 0x32 0x5 0xfff0 0x3c 0x100 0x3c 0x15 + createsprite gArrowRaidRightSpriteTemplate, ANIM_ATTACKER, 50, 0xfff0, 0x3c, 0x100, 0x3c, 0x15 delay 0x1 - launchtemplate gArrowRaidRightSpriteTemplate 0x32 0x5 0xfff0 0x38 0x100 0x38 0x15 + createsprite gArrowRaidRightSpriteTemplate, ANIM_ATTACKER, 50, 0xfff0, 0x38, 0x100, 0x38, 0x15 waitforvisualfinish delay 0xa playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER - launchtemplate gArrowRaidFlyLeftSpriteTemplate 0x32 0x5 0x0120 0x78 0xfff0 0x58 0x15 @right to left + createsprite gArrowRaidFlyLeftSpriteTemplate, ANIM_ATTACKER, 50, 0x0120, 0x78, 0xfff0, 0x58, 0x15 @right to left delay 0x5 - launchtemplate gArrowRaidLeftDownSpriteTemplate 0x32 0x5 0x100 0x8a 0xfff0 0x3a 0x15 + createsprite gArrowRaidLeftDownSpriteTemplate, ANIM_ATTACKER, 50, 0x100, 0x8a, 0xfff0, 0x3a, 0x15 delay 0x1 - launchtemplate gArrowRaidLeftDownSpriteTemplate 0x32 0x5 0x100 0x8c 0xfff0 0x3c 0x15 + createsprite gArrowRaidLeftDownSpriteTemplate, ANIM_ATTACKER, 50, 0x100, 0x8c, 0xfff0, 0x3c, 0x15 delay 0x1 - launchtemplate gArrowRaidLeftDownSpriteTemplate 0x32 0x5 0x100 0x86 0xfff0 0x36 0x15 + createsprite gArrowRaidLeftDownSpriteTemplate, ANIM_ATTACKER, 50, 0x100, 0x86, 0xfff0, 0x36, 0x15 delay 0x1 - launchtemplate gArrowRaidLeftDownSpriteTemplate 0x32 0x5 0x100 0x84 0xfff0 0x34 0x15 + createsprite gArrowRaidLeftDownSpriteTemplate, ANIM_ATTACKER, 50, 0x100, 0x84, 0xfff0, 0x34, 0x15 delay 0x1 - launchtemplate gArrowRaidLeftDownSpriteTemplate 0x32 0x5 0x100 0x88 0xfff0 0x38 0x15 + createsprite gArrowRaidLeftDownSpriteTemplate, ANIM_ATTACKER, 50, 0x100, 0x88, 0xfff0, 0x38, 0x15 waitforvisualfinish call SinisterArrowRaidFlyStrike - launchtask AnimTask_HorizontalShake 0x5 0x3 ANIM_TARGET 0x3 0x4b - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x4 0x0 0x10 0x40c0 @ defender to purple + createvisualtask AnimTask_HorizontalShake, 0x5, ANIM_TARGET, 0x3, 0x4b + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x4, 0x0, 0x10, 0x40c0 @ defender to purple call SinisterArrowRaidArrowsStrikePlayer call SinisterArrowRaidPlayerExplosion playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gArrowRaidExplosionSpriteTemplate 0x3 0x4 0x10 0x10 ANIM_TARGET 0x1 + createsprite gArrowRaidExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x10, 0x10, ANIM_TARGET, 0x1 call SinisterArrowRaidFinalExplosion @ finish SinisterArrowRaidFinish: - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x4 0x10 0x0 0x40c0 @ return tgt to normal + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x4, 0x10, 0x0, 0x40c0 @ return tgt to normal waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x10 0x00 0x388C @ bg to nrml + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x10, 0x00, 0x388C @ bg to nrml delay 0x5 - launchtask AnimTask_AllBanksVisible 0xA 0x0 + createvisualtask AnimTask_AllBanksVisible, 0xA waitforvisualfinish end SinisterArrowRaidFlyStrike: visible ANIM_TARGET delay 0xa playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER - launchtemplate gArrowRaidFlyStrikeSpriteTemplate 0x82 0x1 0x14 + createsprite gArrowRaidFlyStrikeSpriteTemplate, ANIM_TARGET, 2, 0x14 waitforvisualfinish delay 0x5 return SinisterArrowRaidStrikeOpponent: - launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x85 0xfff0 0xa5 0x40 0x4 + createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0x85, 0xfff0, 0xa5, 0x40, 0x4 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET delay 0x1 - launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x95 0xfff0 0xb5 0x40 0x4 + createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0x95, 0xfff0, 0xb5, 0x40, 0x4 delay 0x1 - launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x75 0xfff0 0x95 0x40 0x4 + createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0x75, 0xfff0, 0x95, 0x40, 0x4 delay 0x1 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET - launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xa5 0xfff0 0xc5 0x40 0x4 + createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0xa5, 0xfff0, 0xc5, 0x40, 0x4 delay 0x1 - launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x6f 0xfff0 0x8f 0x40 0x4 + createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0x6f, 0xfff0, 0x8f, 0x40, 0x4 delay 0x1 - launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x7b 0xfff0 0x9b 0x40 0x4 + createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0x7b, 0xfff0, 0x9b, 0x40, 0x4 delay 0x1 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET - launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x85 0xfff0 0xa5 0x40 0x4 + createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0x85, 0xfff0, 0xa5, 0x40, 0x4 delay 0x1 - launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xa2 0xfff0 0xc2 0x40 0x4 + createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0xa2, 0xfff0, 0xc2, 0x40, 0x4 delay 0x1 - launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x82 0xfff0 0xa2 0x40 0x4 + createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0x82, 0xfff0, 0xa2, 0x40, 0x4 delay 0x1 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET - launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x87 0xfff0 0xa7 0x40 0x4 + createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0x87, 0xfff0, 0xa7, 0x40, 0x4 delay 0x1 - launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x72 0xfff0 0x92 0x40 0x4 + createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0x72, 0xfff0, 0x92, 0x40, 0x4 delay 0x1 - launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x85 0xfff0 0xa5 0x40 0x4 + createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0x85, 0xfff0, 0xa5, 0x40, 0x4 delay 0x1 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET - launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x8b 0xfff0 0xab 0x40 0x4 + createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0x8b, 0xfff0, 0xab, 0x40, 0x4 delay 0x1 return SinisterArrowRaidOpponentExplosion: playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gArrowRaidExplosionSpriteTemplate 0x3 0x4 0x0 0x0 ANIM_TARGET 0x1 - launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x85 0xfff0 0xa5 0x40 0x4 + createsprite gArrowRaidExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, ANIM_TARGET, 0x1 + createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0x85, 0xfff0, 0xa5, 0x40, 0x4 delay 0x1 - launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x95 0xfff0 0xb5 0x40 0x4 + createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0x95, 0xfff0, 0xb5, 0x40, 0x4 delay 0x1 - launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x75 0xfff0 0x95 0x40 0x4 + createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0x75, 0xfff0, 0x95, 0x40, 0x4 delay 0x1 - launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xa5 0xfff0 0xc5 0x40 0x4 + createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0xa5, 0xfff0, 0xc5, 0x40, 0x4 delay 0x1 - launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x6f 0xfff0 0x8f 0x40 0x4 - launchtemplate gArrowRaidExplosionSpriteTemplate 0x3 0x4 0x18 0xffe8 ANIM_TARGET 0x1 + createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0x6f, 0xfff0, 0x8f, 0x40, 0x4 + createsprite gArrowRaidExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x18, 0xffe8, ANIM_TARGET, 0x1 delay 0x1 - launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x7b 0xfff0 0x9b 0x40 0x4 + createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0x7b, 0xfff0, 0x9b, 0x40, 0x4 delay 0x1 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x85 0xfff0 0xa5 0x40 0x4 + createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0x85, 0xfff0, 0xa5, 0x40, 0x4 delay 0x1 - launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xa2 0xfff0 0xc2 0x40 0x4 + createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0xa2, 0xfff0, 0xc2, 0x40, 0x4 delay 0x1 - launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x82 0xfff0 0xa2 0x40 0x4 - launchtemplate gArrowRaidExplosionSpriteTemplate 0x3 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0x82, 0xfff0, 0xa2, 0x40, 0x4 + createsprite gArrowRaidExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0xfff0, 0x10, ANIM_TARGET, 0x1 delay 0x1 - launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x87 0xfff0 0xa7 0x40 0x4 + createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0x87, 0xfff0, 0xa7, 0x40, 0x4 delay 0x1 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x72 0xfff0 0x92 0x40 0x4 + createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0x72, 0xfff0, 0x92, 0x40, 0x4 delay 0x1 - launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x85 0xfff0 0xa5 0x40 0x4 + createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0x85, 0xfff0, 0xa5, 0x40, 0x4 delay 0x1 - launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x8b 0xfff0 0xab 0x40 0x4 - launchtemplate gArrowRaidExplosionSpriteTemplate 0x3 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 + createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0x8b, 0xfff0, 0xab, 0x40, 0x4 + createsprite gArrowRaidExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0xffe8, 0xfff4, ANIM_TARGET, 0x1 delay 0x1 return SinisterArrowRaidArrowsStrikePlayer: - launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xfff5 0xfff0 0x45 0x90 0x4 + createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0xfff5, 0xfff0, 0x45, 0x90, 0x4 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET delay 0x1 - launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x5 0xfff0 0x55 0x90 0x4 + createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0x5, 0xfff0, 0x55, 0x90, 0x4 delay 0x1 - launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xffe5 0xfff0 0x35 0x90 0x4 + createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0xffe5, 0xfff0, 0x35, 0x90, 0x4 delay 0x1 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET - launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x15 0xfff0 0x65 0x90 0x4 + createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0x15, 0xfff0, 0x65, 0x90, 0x4 delay 0x1 - launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xffdf 0xfff0 0x2f 0x90 0x4 + createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0xffdf, 0xfff0, 0x2f, 0x90, 0x4 delay 0x1 - launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xffeb 0xfff0 0x3b 0x90 0x4 + createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0xffeb, 0xfff0, 0x3b, 0x90, 0x4 delay 0x1 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET - launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xfff5 0xfff0 0x45 0x90 0x4 + createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0xfff5, 0xfff0, 0x45, 0x90, 0x4 delay 0x1 - launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x12 0xfff0 0x62 0x90 0x4 + createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0x12, 0xfff0, 0x62, 0x90, 0x4 delay 0x1 - launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xfff2 0xfff0 0x42 0x90 0x4 + createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0xfff2, 0xfff0, 0x42, 0x90, 0x4 delay 0x1 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET - launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xfff7 0xfff0 0x47 0x90 0x4 + createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0xfff7, 0xfff0, 0x47, 0x90, 0x4 delay 0x1 - launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xffe2 0xfff0 0x32 0x90 0x4 + createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0xffe2, 0xfff0, 0x32, 0x90, 0x4 delay 0x1 - launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xfff5 0xfff0 0x45 0x90 0x4 + createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0xfff5, 0xfff0, 0x45, 0x90, 0x4 delay 0x1 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET - launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xfffb 0xfff0 0x4b 0x90 0x4 + createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0xfffb, 0xfff0, 0x4b, 0x90, 0x4 delay 0x1 return SinisterArrowRaidPlayerExplosion: playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gArrowRaidExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1 - launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xfff5 0xfff0 0x45 0x90 0x4 + createsprite gArrowRaidExplosionSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, ANIM_TARGET, 0x1 + createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0xfff5, 0xfff0, 0x45, 0x90, 0x4 delay 0x1 - launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x5 0xfff0 0x55 0x90 0x4 + createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0x5, 0xfff0, 0x55, 0x90, 0x4 delay 0x1 - launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xffe5 0xfff0 0x35 0x90 0x4 + createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0xffe5, 0xfff0, 0x35, 0x90, 0x4 delay 0x1 - launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x15 0xfff0 0x65 0x90 0x4 + createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0x15, 0xfff0, 0x65, 0x90, 0x4 delay 0x1 - launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xffdf 0xfff0 0x2f 0x90 0x4 - launchtemplate gArrowRaidExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1 + createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0xffdf, 0xfff0, 0x2f, 0x90, 0x4 + createsprite gArrowRaidExplosionSpriteTemplate, ANIM_TARGET, 3, 0x18, 0xffe8, ANIM_TARGET, 0x1 delay 0x1 - launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xffeb 0xfff0 0x3b 0x90 0x4 + createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0xffeb, 0xfff0, 0x3b, 0x90, 0x4 delay 0x1 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xfff5 0xfff0 0x45 0x90 0x4 + createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0xfff5, 0xfff0, 0x45, 0x90, 0x4 delay 0x1 - launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x12 0xfff0 0x62 0x90 0x4 + createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0x12, 0xfff0, 0x62, 0x90, 0x4 delay 0x1 - launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xfff2 0xfff0 0x42 0x90 0x4 - launchtemplate gArrowRaidExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0xfff2, 0xfff0, 0x42, 0x90, 0x4 + createsprite gArrowRaidExplosionSpriteTemplate, ANIM_TARGET, 3, 0xfff0, 0x10, ANIM_TARGET, 0x1 delay 0x1 - launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xfff7 0xfff0 0x47 0x90 0x4 + createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0xfff7, 0xfff0, 0x47, 0x90, 0x4 delay 0x1 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xffe2 0xfff0 0x32 0x90 0x4 + createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0xffe2, 0xfff0, 0x32, 0x90, 0x4 delay 0x1 - launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xfff5 0xfff0 0x45 0x90 0x4 + createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0xfff5, 0xfff0, 0x45, 0x90, 0x4 delay 0x1 - launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xfffb 0xfff0 0x4b 0x90 0x4 - launchtemplate gArrowRaidExplosionSpriteTemplate 0x83 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 + createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0xfffb, 0xfff0, 0x4b, 0x90, 0x4 + createsprite gArrowRaidExplosionSpriteTemplate, ANIM_TARGET, 3, 0xffe8, 0xfff4, ANIM_TARGET, 0x1 delay 0x1 return SinisterArrowRaidFinalExplosion: playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gArrowRaidExplosionSpriteTemplate 0x3 0x4 0x0 0x0 ANIM_TARGET 0x1 + createsprite gArrowRaidExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, ANIM_TARGET, 0x1 delay 0x6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gArrowRaidExplosionSpriteTemplate 0x3 0x4 0x18 0xffe8 ANIM_TARGET 0x1 + createsprite gArrowRaidExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x18, 0xffe8, ANIM_TARGET, 0x1 delay 0x6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gArrowRaidExplosionSpriteTemplate 0x3 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + createsprite gArrowRaidExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0xfff0, 0x10, ANIM_TARGET, 0x1 delay 0x6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gArrowRaidExplosionSpriteTemplate 0x3 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 + createsprite gArrowRaidExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0xffe8, 0xfff4, ANIM_TARGET, 0x1 delay 0x6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gArrowRaidExplosionSpriteTemplate 0x3 0x4 0x10 0x10 ANIM_TARGET 0x1 + createsprite gArrowRaidExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x10, 0x10, ANIM_TARGET, 0x1 delay 0x6 return @@ -28991,18 +28989,18 @@ Move_MALICIOUS_MOONSAULT:: loadspritegfx ANIM_TAG_EXPLOSION_2 @explosion fadetobg BG_MALICIOUS_MOONSAULT waitbgfadeout - setblends 0x80c + setalpha 12, 8 playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_ATTACKER - launchtemplate gVerticalDipSpriteTemplate 0x2 0x3 0x6 0x1 0x0 + createsprite gVerticalDipSpriteTemplate, ANIM_ATTACKER, 2, 0x6, 0x1, 0x0 delay 0x1 - launchtemplate gFirePlumeSpriteTemplate 0x2 0x6 0xffe0 0x0 0x18 0x0 0x0 0x0 - launchtemplate gFirePlumeSpriteTemplate 0x42 0x6 0xffec 0xfff6 0x18 0x0 0x0 0x0 - launchtemplate gFirePlumeSpriteTemplate 0x42 0x6 0x0 0xfff0 0x18 0x0 0x0 0x0 - launchtemplate gFirePlumeSpriteTemplate 0x42 0x6 0x14 0xfff6 0x18 0x0 0x0 0x0 - launchtemplate gFirePlumeSpriteTemplate 0x42 0x6 0x20 0x0 0x18 0x0 0x0 0x0 - launchtemplate gFirePlumeSpriteTemplate 0x42 0x6 0x14 0xa 0x18 0x0 0x0 0x0 - launchtemplate gFirePlumeSpriteTemplate 0x2 0x6 0x0 0x10 0x18 0x0 0x0 0x0 - launchtemplate gFirePlumeSpriteTemplate 0x2 0x6 0xffec 0xa 0x18 0x0 0x0 0x0 + createsprite gFirePlumeSpriteTemplate, ANIM_ATTACKER, 2, 0xffe0, 0x0, 0x18, 0x0, 0x0, 0x0 + createsprite gFirePlumeSpriteTemplate, ANIM_ATTACKER, 66, 0xffec, 0xfff6, 0x18, 0x0, 0x0, 0x0 + createsprite gFirePlumeSpriteTemplate, ANIM_ATTACKER, 66, 0x0, 0xfff0, 0x18, 0x0, 0x0, 0x0 + createsprite gFirePlumeSpriteTemplate, ANIM_ATTACKER, 66, 0x14, 0xfff6, 0x18, 0x0, 0x0, 0x0 + createsprite gFirePlumeSpriteTemplate, ANIM_ATTACKER, 66, 0x20, 0x0, 0x18, 0x0, 0x0, 0x0 + createsprite gFirePlumeSpriteTemplate, ANIM_ATTACKER, 66, 0x14, 0xa, 0x18, 0x0, 0x0, 0x0 + createsprite gFirePlumeSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x10, 0x18, 0x0, 0x0, 0x0 + createsprite gFirePlumeSpriteTemplate, ANIM_ATTACKER, 2, 0xffec, 0xa, 0x18, 0x0, 0x0, 0x0 waitforvisualfinish delay 0x0 monbg ANIM_ATTACKER @@ -29010,280 +29008,280 @@ Move_MALICIOUS_MOONSAULT:: call MaliciousMoonsaultFireSpin call MaliciousMoonsaultFireSpin clearmonbg ANIM_ATTACKER - launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER - launchtemplate gMaliciousMoonsaultRedFlySpriteTemplate 0x82, 0x4, 0x0 0x0 0xd 0x150 + createsprite gMaliciousMoonsaultRedFlySpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xd, 0x150 call MaliciousMoonsaultFireSpin - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x5 0x0 0xa 0x0000 @ target darkens + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x5, 0x0, 0xa, 0x0000 @ target darkens delay 0x1a playsewithpan SE_M_SWAGGER, SOUND_PAN_TARGET - launchtemplate gMaliciousMoonsaultRedBounceSpriteTemplate 0x83 0x0 + createsprite gMaliciousMoonsaultRedBounceSpriteTemplate, ANIM_TARGET, 3 delay 0x7 - launchtemplate gMaliciousMoonsaultRedImpactSpriteTemplate 0x82, 0x4, 0x0 0x0 0x1 0x0 - launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xff00 0x15 0x0 0x4 + createsprite gMaliciousMoonsaultRedImpactSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x1, 0x0 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0xff00, 0x15, 0x0, 0x4 call MaliciousMoonsaultExplosion delay 0x6 call MaliciousMoonsaultExplosion - launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG | ANIM_PAL_ALL_BATTLERS, 0x1, 0x0, 0x10, 0x001b @ fade all to red + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS), 0x1, 0x0, 0x10, 0x001b @ fade all to red delay 0x6 call MaliciousMoonsaultExplosion - launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x10 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x10 waitforvisualfinish call ResetFromRedScreen blendoff end MaliciousMoonsaultFireSpin: - launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x2c 0x510 0x1e 0xd 0x32 ANIM_ATTACKER + createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x2c, 0x510, 0x1e, 0xd, 0x32, ANIM_ATTACKER delay 0x1 - launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x2f 0x490 0x19 0xb 0xffd6 ANIM_ATTACKER + createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x2f, 0x490, 0x19, 0xb, 0xffd6, ANIM_ATTACKER delay 0x1 - launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x30 0x4e0 0x14 0x10 0xffd2 ANIM_ATTACKER + createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x30, 0x4e0, 0x14, 0x10, 0xffd2, ANIM_ATTACKER delay 0x1 - launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x2c 0x500 0x19 0x10 0x2e ANIM_ATTACKER + createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x2c, 0x500, 0x19, 0x10, 0x2e, ANIM_ATTACKER delay 0x1 - launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x31 0x540 0x14 0x8 0x2a ANIM_ATTACKER + createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x31, 0x540, 0x14, 0x8, 0x2a, ANIM_ATTACKER delay 0x1 - launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x31 0x4d0 0x1e 0xf 0xffce ANIM_ATTACKER + createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x31, 0x4d0, 0x1e, 0xf, 0xffce, ANIM_ATTACKER delay 0x1 - launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x2f 0x490 0x19 0xb 0xffd6 ANIM_ATTACKER + createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x2f, 0x490, 0x19, 0xb, 0xffd6, ANIM_ATTACKER delay 0x1 - launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x2c 0x510 0x1e 0xd 0x32 ANIM_ATTACKER + createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x2c, 0x510, 0x1e, 0xd, 0x32, ANIM_ATTACKER delay 0x1 - launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x2c 0x500 0x19 0x10 0x2e ANIM_ATTACKER + createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x2c, 0x500, 0x19, 0x10, 0x2e, ANIM_ATTACKER delay 0x1 - launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x30 0x4e0 0x14 0x10 0xffd2 ANIM_ATTACKER + createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x30, 0x4e0, 0x14, 0x10, 0xffd2, ANIM_ATTACKER delay 0x1 - launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x31 0x4d0 0x1e 0xf 0xffce ANIM_ATTACKER + createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x31, 0x4d0, 0x1e, 0xf, 0xffce, ANIM_ATTACKER delay 0x1 - launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x31 0x540 0x14 0x8 0x2a ANIM_ATTACKER + createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x31, 0x540, 0x14, 0x8, 0x2a, ANIM_ATTACKER delay 0x1 return MaliciousMoonsaultExplosion: playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gMaliciousMoonsaultExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1 - launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xa 0x0 0xfffe - launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0xfffe 0x0 - launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0x2 0x0 - launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0xfffe 0x2 - launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0x2 0x2 + createsprite gMaliciousMoonsaultExplosionSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, ANIM_TARGET, 0x1 + createsprite gMaliciousMoonsaultFireblastSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xa, 0x0, 0xfffe + createsprite gMaliciousMoonsaultFireblastSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xd, 0xfffe, 0x0 + createsprite gMaliciousMoonsaultFireblastSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xd, 0x2, 0x0 + createsprite gMaliciousMoonsaultFireblastSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xf, 0xfffe, 0x2 + createsprite gMaliciousMoonsaultFireblastSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xf, 0x2, 0x2 delay 0x6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gMaliciousMoonsaultExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1 - launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xa 0x0 0xfffe - launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0xfffe 0x0 - launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0x2 0x0 - launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0xfffe 0x2 - launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0x2 0x2 + createsprite gMaliciousMoonsaultExplosionSpriteTemplate, ANIM_TARGET, 3, 0x18, 0xffe8, ANIM_TARGET, 0x1 + createsprite gMaliciousMoonsaultFireblastSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xa, 0x0, 0xfffe + createsprite gMaliciousMoonsaultFireblastSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xd, 0xfffe, 0x0 + createsprite gMaliciousMoonsaultFireblastSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xd, 0x2, 0x0 + createsprite gMaliciousMoonsaultFireblastSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xf, 0xfffe, 0x2 + createsprite gMaliciousMoonsaultFireblastSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xf, 0x2, 0x2 delay 0x6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gMaliciousMoonsaultExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1 - launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xa 0x0 0xfffe - launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0xfffe 0x0 - launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0x2 0x0 - launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0xfffe 0x2 - launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0x2 0x2 + createsprite gMaliciousMoonsaultExplosionSpriteTemplate, ANIM_TARGET, 3, 0xfff0, 0x10, ANIM_TARGET, 0x1 + createsprite gMaliciousMoonsaultFireblastSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xa, 0x0, 0xfffe + createsprite gMaliciousMoonsaultFireblastSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xd, 0xfffe, 0x0 + createsprite gMaliciousMoonsaultFireblastSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xd, 0x2, 0x0 + createsprite gMaliciousMoonsaultFireblastSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xf, 0xfffe, 0x2 + createsprite gMaliciousMoonsaultFireblastSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xf, 0x2, 0x2 delay 0x6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gMaliciousMoonsaultExplosionSpriteTemplate 0x3 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 - launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xa 0x0 0xfffe - launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0xfffe 0x0 - launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0x2 0x0 - launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0xfffe 0x2 - launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0x2 0x2 + createsprite gMaliciousMoonsaultExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0xffe8, 0xfff4, ANIM_TARGET, 0x1 + createsprite gMaliciousMoonsaultFireblastSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xa, 0x0, 0xfffe + createsprite gMaliciousMoonsaultFireblastSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xd, 0xfffe, 0x0 + createsprite gMaliciousMoonsaultFireblastSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xd, 0x2, 0x0 + createsprite gMaliciousMoonsaultFireblastSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xf, 0xfffe, 0x2 + createsprite gMaliciousMoonsaultFireblastSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xf, 0x2, 0x2 delay 0x6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gMaliciousMoonsaultExplosionSpriteTemplate 0x3 0x4 0x10 0x10 ANIM_TARGET 0x1 - launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xa 0x0 0xfffe - launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0xfffe 0x0 - launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0x2 0x0 - launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0xfffe 0x2 - launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0x2 0x2 + createsprite gMaliciousMoonsaultExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x10, 0x10, ANIM_TARGET, 0x1 + createsprite gMaliciousMoonsaultFireblastSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xa, 0x0, 0xfffe + createsprite gMaliciousMoonsaultFireblastSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xd, 0xfffe, 0x0 + createsprite gMaliciousMoonsaultFireblastSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xd, 0x2, 0x0 + createsprite gMaliciousMoonsaultFireblastSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xf, 0xfffe, 0x2 + createsprite gMaliciousMoonsaultFireblastSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xf, 0x2, 0x2 return Move_OCEANIC_OPERETTA:: - launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish loadspritegfx ANIM_TAG_SPOTLIGHT - launchtask AnimTask_CreateSpotlight 0x2 0x0 - launchtask AnimTask_HardwarePaletteFade 0x2 0x5 0xf8 0x3 0x0 0xa 0x0 + createvisualtask AnimTask_CreateSpotlight, 0x2 + createvisualtask AnimTask_HardwarePaletteFade, 0x2, 0xf8, 0x3, 0x0, 0xa, 0x0 waitforvisualfinish - launchtemplate gOceanOperaSpotlightSpriteTemplate 0x82, 0x3, 0x0 0xfff8 0x50 @spotlight + createsprite gOceanOperaSpotlightSpriteTemplate, ANIM_TARGET, 2, 0x0, 0xfff8, 0x50 @spotlight loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy loadspritegfx ANIM_TAG_WATER_ORB @blue playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call OceanicOperettaBuffEffect delay 0x8 - launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xb 0x7fff - launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1 + createvisualtask AnimTask_BlendColorCycle, 0x2, 0x2, 0x2, 0x2, 0x0, 0xb, 0x7fff + createvisualtask AnimTask_ShakeMon2, 0x2, 0x0, 0x1, 0x0, 0x20, 0x1 call OceanicOperettaBuffEffect delay 0x8 call OceanicOperettaBuffEffect waitforvisualfinish unloadspritegfx ANIM_TAG_FOCUS_ENERGY unloadspritegfx ANIM_TAG_SPOTLIGHT - launchtask AnimTask_HardwarePaletteFade 0x2 0x5 0xf8 0x3 0xa 0x0 0x1 + createvisualtask AnimTask_HardwarePaletteFade, 0x2, 0xf8, 0x3, 0xa, 0x0, 0x1 waitforvisualfinish - launchtask AnimTask_RemoveSpotlight 0x2 0x0 + createvisualtask AnimTask_RemoveSpotlight, 0x2 waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x6 0x5da0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x6, 0x5da0 loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_THIN_RING invisible ANIM_ATTACKER - launchtemplate gOceanOperaBlueChargeSpriteTemplate 0x2 0x1 0x0 @charge + createsprite gOceanOperaBlueChargeSpriteTemplate, ANIM_ATTACKER, 2, 0x0 @charge delay 0x2 - launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_ATTACKER 0x0 0x2 0x50 0x1 - launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1c 0x180 0x32 0x8 0x32 ANIM_ATTACKER - launchtemplate gOceanOperaBlueRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0 + createvisualtask AnimTask_ShakeMon, 0x5, ANIM_ATTACKER, 0x0, 0x2, 0x50, 0x1 + createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x180, 0x32, 0x8, 0x32, ANIM_ATTACKER + createsprite gOceanOperaBlueRingSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0 delay 0x2 - launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x20 0xf0 0x28 0xb 0xffd2 ANIM_ATTACKER + createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x20, 0xf0, 0x28, 0xb, 0xffd2, ANIM_ATTACKER delay 0x2 - launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x21 0x1a0 0x28 0x4 0x2a ANIM_ATTACKER + createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1a0, 0x28, 0x4, 0x2a, ANIM_ATTACKER delay 0x2 - launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1f 0x120 0x2d 0x6 0xffd6 ANIM_ATTACKER + createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1f, 0x120, 0x2d, 0x6, 0xffd6, ANIM_ATTACKER delay 0x2 - launchtemplate gOceanOperaBlueRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0 - launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1c 0x1c0 0x2d 0xb 0x2e ANIM_ATTACKER + createsprite gOceanOperaBlueRingSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0 + createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x1c0, 0x2d, 0xb, 0x2e, ANIM_ATTACKER delay 0x2 - launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x21 0x1d0 0x32 0xa 0xffce ANIM_ATTACKER + createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1d0, 0x32, 0xa, 0xffce, ANIM_ATTACKER delay 0x2 - launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1c 0x180 0x32 0x8 0x32 ANIM_ATTACKER + createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x180, 0x32, 0x8, 0x32, ANIM_ATTACKER delay 0x2 - launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x20 0xf0 0x28 0xb 0xffd2 ANIM_ATTACKER + createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x20, 0xf0, 0x28, 0xb, 0xffd2, ANIM_ATTACKER delay 0x2 - launchtemplate gOceanOperaBlueRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0 + createsprite gOceanOperaBlueRingSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0 playsewithpan SE_M_GRASSWHISTLE, SOUND_PAN_ATTACKER - launchtemplate gOceanOperaBlueRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0 - launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x21 0x1a0 0x28 0x4 0x2a ANIM_ATTACKER + createsprite gOceanOperaBlueRingSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0 + createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1a0, 0x28, 0x4, 0x2a, ANIM_ATTACKER delay 0x2 - launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1f 0x120 0x2d 0x6 0xffd6 ANIM_ATTACKER + createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1f, 0x120, 0x2d, 0x6, 0xffd6, ANIM_ATTACKER delay 0x2 - launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1c 0x1c0 0x2d 0xb 0x2e ANIM_ATTACKER + createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x1c0, 0x2d, 0xb, 0x2e, ANIM_ATTACKER delay 0x2 - launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x21 0x1d0 0x32 0xa 0xffce ANIM_ATTACKER + createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1d0, 0x32, 0xa, 0xffce, ANIM_ATTACKER delay 0x2 - launchtemplate gOceanOperaBlueRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0 - launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1c 0x180 0x32 0x8 0x32 ANIM_ATTACKER + createsprite gOceanOperaBlueRingSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0 + createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x180, 0x32, 0x8, 0x32, ANIM_ATTACKER delay 0x2 - launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x20 0xf0 0x28 0xb 0xffd2 ANIM_ATTACKER + createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x20, 0xf0, 0x28, 0xb, 0xffd2, ANIM_ATTACKER delay 0x2 - launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x21 0x1a0 0x28 0x4 0x2a ANIM_ATTACKER + createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1a0, 0x28, 0x4, 0x2a, ANIM_ATTACKER delay 0x2 - launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1f 0x120 0x2d 0x6 0xffd6 ANIM_ATTACKER + createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1f, 0x120, 0x2d, 0x6, 0xffd6, ANIM_ATTACKER delay 0x2 - launchtemplate gOceanOperaBlueRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0 - launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1c 0x1c0 0x2d 0xb 0x2e ANIM_ATTACKER + createsprite gOceanOperaBlueRingSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0 + createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x1c0, 0x2d, 0xb, 0x2e, ANIM_ATTACKER delay 0x2 - launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x21 0x1d0 0x32 0xa 0xffce ANIM_ATTACKER + createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1d0, 0x32, 0xa, 0xffce, ANIM_ATTACKER delay 0x2 - launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1c 0x180 0x32 0x8 0x32 ANIM_ATTACKER + createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x180, 0x32, 0x8, 0x32, ANIM_ATTACKER delay 0x2 - launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x20 0xf0 0x28 0xb 0xffd2 ANIM_ATTACKER + createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x20, 0xf0, 0x28, 0xb, 0xffd2, ANIM_ATTACKER delay 0x2 - launchtemplate gOceanOperaBlueRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0 - launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x21 0x1a0 0x28 0x4 0x2a ANIM_ATTACKER + createsprite gOceanOperaBlueRingSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0 + createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1a0, 0x28, 0x4, 0x2a, ANIM_ATTACKER delay 0x2 - launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1f 0x120 0x2d 0x6 0xffd6 ANIM_ATTACKER + createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1f, 0x120, 0x2d, 0x6, 0xffd6, ANIM_ATTACKER delay 0x2 - launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1c 0x1c0 0x2d 0xb 0x2e ANIM_ATTACKER + createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x1c0, 0x2d, 0xb, 0x2e, ANIM_ATTACKER delay 0x2 - launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x21 0x1d0 0x32 0xa 0xffce ANIM_ATTACKER + createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1d0, 0x32, 0xa, 0xffce, ANIM_ATTACKER delay 0x2 - launchtemplate gOceanOperaBlueRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0 - launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1c 0x180 0x32 0x8 0x32 ANIM_ATTACKER + createsprite gOceanOperaBlueRingSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0 + createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x180, 0x32, 0x8, 0x32, ANIM_ATTACKER delay 0x2 - launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x20 0xf0 0x28 0xb 0xffd2 ANIM_ATTACKER + createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x20, 0xf0, 0x28, 0xb, 0xffd2, ANIM_ATTACKER delay 0x2 - launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x21 0x1a0 0x28 0x4 0x2a ANIM_ATTACKER + createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1a0, 0x28, 0x4, 0x2a, ANIM_ATTACKER delay 0x2 - launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1f 0x120 0x2d 0x6 0xffd6 ANIM_ATTACKER + createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1f, 0x120, 0x2d, 0x6, 0xffd6, ANIM_ATTACKER delay 0x2 - launchtemplate gOceanOperaBlueRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0 - launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1c 0x1c0 0x2d 0xb 0x2e ANIM_ATTACKER + createsprite gOceanOperaBlueRingSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0 + createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x1c0, 0x2d, 0xb, 0x2e, ANIM_ATTACKER delay 0x2 - launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x21 0x1d0 0x32 0xa 0xffce ANIM_ATTACKER + createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1d0, 0x32, 0xa, 0xffce, ANIM_ATTACKER delay 0x2 - launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1c 0x180 0x32 0x8 0x32 ANIM_ATTACKER + createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x180, 0x32, 0x8, 0x32, ANIM_ATTACKER delay 0x2 - launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x20 0xf0 0x28 0xb 0xffd2 ANIM_ATTACKER + createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x20, 0xf0, 0x28, 0xb, 0xffd2, ANIM_ATTACKER delay 0x2 - launchtemplate gOceanOperaBlueRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0 - launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x21 0x1a0 0x28 0x4 0x2a ANIM_ATTACKER + createsprite gOceanOperaBlueRingSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0 + createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1a0, 0x28, 0x4, 0x2a, ANIM_ATTACKER delay 0x2 - launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1f 0x120 0x2d 0x6 0xffd6 ANIM_ATTACKER + createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1f, 0x120, 0x2d, 0x6, 0xffd6, ANIM_ATTACKER delay 0x2 - launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1c 0x1c0 0x2d 0xb 0x2e ANIM_ATTACKER + createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x1c0, 0x2d, 0xb, 0x2e, ANIM_ATTACKER delay 0x2 - launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x21 0x1d0 0x32 0xa 0xffce ANIM_ATTACKER + createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1d0, 0x32, 0xa, 0xffce, ANIM_ATTACKER delay 0x1a visible ANIM_TARGET loopsewithpan SE_M_CRABHAMMER, SOUND_PAN_TARGET, 0x14, 0x5 - launchtemplate gOceanOperaMovingOrbsSpriteTemplate 0x32 0x6 0x0 0x0 0x0 0x0 0x60 0x0 @mist ball + createsprite gOceanOperaMovingOrbsSpriteTemplate, ANIM_ATTACKER, 50, 0x0, 0x0, 0x0, 0x0, 0x60, 0x0 @mist ball delay 0x5c visible ANIM_ATTACKER delay 0x0 loopsewithpan SE_M_CRABHAMMER, SOUND_PAN_TARGET, 0x14, 0x1 - launchtemplate gOceanOperaBlueOrbsSpriteTemplate 0x32 0x6 0x0 ANIM_TARGET 0x0 0x0 0x0 0x35 + createsprite gOceanOperaBlueOrbsSpriteTemplate, ANIM_ATTACKER, 50, 0x0, ANIM_TARGET, 0x0, 0x0, 0x0, 0x35 delay 0x5 playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER - launchtemplate gOceanOperaExpandingRingSpriteTemplate 0x2 0x4 0x0 0x0 0x0 0x0 + createsprite gOceanOperaExpandingRingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x0 delay 0x4 - launchtemplate gOceanOperaExpandingRingSpriteTemplate 0x2 0x4 0x0 0x0 0x0 0x0 + createsprite gOceanOperaExpandingRingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x0 delay 0x4 - launchtemplate gOceanOperaExpandingRingSpriteTemplate 0x2 0x4 0x0 0x0 0x0 0x0 + createsprite gOceanOperaExpandingRingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x0 delay 0x4 - launchtemplate gOceanOperaExpandingRingSpriteTemplate 0x2 0x4 0x0 0x0 0x0 0x0 + createsprite gOceanOperaExpandingRingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x0 delay 0x4 - launchtemplate gOceanOperaExpandingRingSpriteTemplate 0x2 0x4 0x0 0x0 0x0 0x0 + createsprite gOceanOperaExpandingRingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x0 delay 0x10 loadspritegfx ANIM_TAG_EXPLOSION @explosion loadspritegfx ANIM_TAG_SPARKLE_2 @sparkle loadspritegfx ANIM_TAG_RAIN_DROPS @rain - launchtask AnimTask_HorizontalShake 0x5 0x3 ANIM_TARGET 0x8 0x40 + createvisualtask AnimTask_HorizontalShake, 0x5, ANIM_TARGET, 0x8, 0x40 call OceanicOperettaExplosion - launchtask AnimTask_BlendBattleAnimPal 0x2 0x5 ANIM_PAL_DEF 0x2 0x0 0xb 0x5da0 - launchtask AnimTask_CreateRaindrops 0x2 0x3 0x0 0x3 0x78 + createvisualtask AnimTask_BlendBattleAnimPal, 0x2, F_PAL_TARGET, 0x2, 0x0, 0xb, 0x5da0 + createvisualtask AnimTask_CreateRaindrops, 0x2, 0x0, 0x3, 0x78 call OceanicOperettaExplosion call OceanicOperettaExplosion playsewithpan SE_M_RAIN_DANCE, SOUND_PAN_ATTACKER - launchtask AnimTask_CreateRaindrops 0x2 0x3 0x0 0x3 0x78 + createvisualtask AnimTask_CreateRaindrops, 0x2, 0x0, 0x3, 0x78 waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0x2 0x5 ANIM_PAL_DEF 0x2 0xb 0x0 0x5da0 + createvisualtask AnimTask_BlendBattleAnimPal, 0x2, F_PAL_TARGET, 0x2, 0xb, 0x0, 0x5da0 waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x6 0x0 0x5da0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x6, 0x0, 0x5da0 waitforvisualfinish - launchtask AnimTask_AllBanksVisible 0xA 0x0 + createvisualtask AnimTask_AllBanksVisible, 0xA waitforvisualfinish end OceanicOperettaBuffEffect: - launchtemplate gOceanOperaBlueFlareSpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2 + createsprite gOceanOperaBlueFlareSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x1a, 0x2 delay 0x4 - launchtemplate gOceanOperaBlueFlareSpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1 + createsprite gOceanOperaBlueFlareSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xe, 0x1c, 0x1 delay 0x4 - launchtemplate gOceanOperaBlueFlareSpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2 + createsprite gOceanOperaBlueFlareSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfffb, 0xa, 0x2 delay 0x4 - launchtemplate gOceanOperaBlueFlareSpriteTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3 + createsprite gOceanOperaBlueFlareSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1c, 0x1a, 0x3 delay 0x4 - launchtemplate gOceanOperaBlueFlareSpriteTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1 + createsprite gOceanOperaBlueFlareSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff4, 0x0, 0x1 return OceanicOperettaExplosion: - launchtemplate gOceanOperaSparkleSpriteTemplate 0x33 0x6 0xfff1 0x0 ANIM_TARGET 0x0 0x20 0x3c + createsprite gOceanOperaSparkleSpriteTemplate, ANIM_ATTACKER, 51, 0xfff1, 0x0, ANIM_TARGET, 0x0, 0x20, 0x3c playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gOceanOperaExplosionSpriteTemplate 0x33 0x4 0x0 0x0 ANIM_TARGET 0x1 + createsprite gOceanOperaExplosionSpriteTemplate, ANIM_ATTACKER, 51, 0x0, 0x0, ANIM_TARGET, 0x1 delay 0x6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gOceanOperaExplosionSpriteTemplate 0x33 0x4 0x18 0xffe8 ANIM_TARGET 0x1 + createsprite gOceanOperaExplosionSpriteTemplate, ANIM_ATTACKER, 51, 0x18, 0xffe8, ANIM_TARGET, 0x1 delay 0x6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gOceanOperaExplosionSpriteTemplate 0x33 0x4 0xfff0 0x10 ANIM_TARGET 0x1 - launchtemplate gOceanOperaSparkleSpriteTemplate 0x33 0x6 0xc 0xfffb ANIM_TARGET 0x0 0x20 0x3c + createsprite gOceanOperaExplosionSpriteTemplate, ANIM_ATTACKER, 51, 0xfff0, 0x10, ANIM_TARGET, 0x1 + createsprite gOceanOperaSparkleSpriteTemplate, ANIM_ATTACKER, 51, 0xc, 0xfffb, ANIM_TARGET, 0x0, 0x20, 0x3c delay 0x6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gOceanOperaExplosionSpriteTemplate 0x33 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 + createsprite gOceanOperaExplosionSpriteTemplate, ANIM_ATTACKER, 51, 0xffe8, 0xfff4, ANIM_TARGET, 0x1 delay 0x6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gOceanOperaExplosionSpriteTemplate 0x33 0x4 0x10 0x10 ANIM_TARGET 0x1 + createsprite gOceanOperaExplosionSpriteTemplate, ANIM_ATTACKER, 51, 0x10, 0x10, ANIM_TARGET, 0x1 delay 0x6 return @@ -29291,20 +29289,20 @@ OceanicOperettaExplosion: Move_SPLINTERED_STORMSHARDS:: loadspritegfx ANIM_TAG_ROCKS @rock loadspritegfx ANIM_TAG_ICICLE_SPEAR @spear - launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish - launchtask AnimTask_GetLycanrocForm 0x2 0x0 + createvisualtask AnimTask_GetLycanrocForm, 0x2 jumpargeq 0x0 0x1 SplinteredStormshardsNightForme SplinteredStormshardsDayForme: - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xc 0x5bff + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xc, 0x5bff goto SplinteredStormshardsFinishFade SplinteredStormshardsNightForme: - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xc 0x0000 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xc, 0x0000 SplinteredStormshardsFinishFade: waitforvisualfinish - setblends 0x80c + setalpha 12, 8 playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER - launchtask AnimTask_IsTargetPlayerSide 0x2 0x0 + createvisualtask AnimTask_IsTargetPlayerSide, 0x2 jumpargeq 0x7 ANIM_TARGET SplinteredStormshardsByOpponent SplinteredStormshardsByPlayer: loopsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET, 0x10, 0xc @@ -29313,14 +29311,14 @@ SplinteredStormshardsByPlayer: loadspritegfx ANIM_TAG_ROUND_SHADOW @fly invisible ANIM_TARGET playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER - launchtemplate gSplinteredShardsFlySpriteTemplate 0x2 0x4 0x0 0x0 0xd 0x150 + createsprite gSplinteredShardsFlySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0xd, 0x150 call SplinteredStormshardsPlayer_Rising1 call SplinteredStormshardsPlayer_Rising2 visible ANIM_ATTACKER delay 0x1 - launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x60 0x80 0x60 0x30 0x30 - launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xb 0x5bff - launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1 + createsprite gSplinteredShardsRisingSpearSpriteTemplate, ANIM_ATTACKER, 50, 0x60, 0x80, 0x60, 0x30, 0x30 + createvisualtask AnimTask_BlendColorCycle, 0x2, 0x2, 0x2, 0x2, 0x0, 0xb, 0x5bff + createvisualtask AnimTask_ShakeMon2, 0x2, 0x0, 0x1, 0x0, 0x20, 0x1 delay 0x2 call SplinteredStormshardsPlayer_Rising2 call SplinteredStormshardsPlayer_Rising1 @@ -29332,59 +29330,59 @@ SplinteredStormshardsByPlayer: loadspritegfx ANIM_TAG_METEOR @superpower loadspritegfx ANIM_TAG_EXPLOSION @explosion playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER - launchtemplate gHorizontalLungeSpriteTemplate 0x2 0x2 0x4 0x4 @lunge forward + createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 0x4, 0x4 @lunge forward delay 0x2 invisible ANIM_ATTACKER - launchtemplate gGrowingSuperpowerTemplate 0x83 0x1 0x0 @superpower - launchtask AnimTask_ShakeMon 0x5 0x5 0x1 0x0 0x4 0x60 0x1 @shake target up and down - launchtemplate gSplinteredShardsSplinterOpponentSteepSpriteTemplate 0x2 0x8 0xffd0 0x18 0x0 0x0 0xa 0x1 0x0 0x1 + createsprite gGrowingSuperpowerTemplate, ANIM_TARGET, 3, 0x0 @superpower + createvisualtask AnimTask_ShakeMon, 0x5, 0x1, 0x0, 0x4, 0x60, 0x1 @shake target up and down + createsprite gSplinteredShardsSplinterOpponentSteepSpriteTemplate, ANIM_ATTACKER, 2, 0xffd0, 0x18, 0x0, 0x0, 0xa, 0x1, 0x0, 0x1 delay 0x4 playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET delay 0x4 - launchtemplate gSplinteredShardsSplinterOpponentShallowSpriteTemplate 0x2 0x8 0xffd0 0x1 0x0 0x0 0xa 0x1 0x0 0x1 + createsprite gSplinteredShardsSplinterOpponentShallowSpriteTemplate, ANIM_ATTACKER, 2, 0xffd0, 0x1, 0x0, 0x0, 0xa, 0x1, 0x0, 0x1 delay 0x4 playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET delay 0x4 call SplinteredStormshardsExplosionOpponent call SplinteredStormshardsExplosionOpponent SplinteredStormshardsEnd: - launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG | ANIM_PAL_ALL_BATTLERS, 0x4, 0x0, 0x10, 0x7fff + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS), 0x4, 0x0, 0x10, 0x7fff call SplinteredStormshardsBrownExplode waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG | ANIM_PAL_ALL_BATTLERS, 0x4, 0x10, 0x0, 0x7fff + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS), 0x4, 0x10, 0x0, 0x7fff waitforvisualfinish - launchtask AnimTask_AllBanksVisible 0xA 0x0 + createvisualtask AnimTask_AllBanksVisible, 0xA waitforvisualfinish waitforvisualfinish end SplinteredStormshardsExplosionOpponent: playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gSplinteredShardsExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1 - launchtemplate gSplinteredShardsSplinterOpponentSteepSpriteTemplate 0x82 0x8 0xffd0 0x20 0x0 0x0 0xa 0x1 0x0 0x1 + createsprite gSplinteredShardsExplosionSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, ANIM_TARGET, 0x1 + createsprite gSplinteredShardsSplinterOpponentSteepSpriteTemplate, ANIM_TARGET, 2, 0xffd0, 0x20, 0x0, 0x0, 0xa, 0x1, 0x0, 0x1 delay 0x4 playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET delay 0x2 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gSplinteredShardsExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1 - launchtemplate gSplinteredShardsSplinterOpponentShallowSpriteTemplate 0x82 0x8 0xffd0 0x0 0x0 0x0 0xa 0x1 0x0 0x1 + createsprite gSplinteredShardsExplosionSpriteTemplate, ANIM_TARGET, 3, 0x18, 0xffe8, ANIM_TARGET, 0x1 + createsprite gSplinteredShardsSplinterOpponentShallowSpriteTemplate, ANIM_TARGET, 2, 0xffd0, 0x0, 0x0, 0x0, 0xa, 0x1, 0x0, 0x1 delay 0x4 playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET delay 0x2 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gSplinteredShardsExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1 - launchtemplate gSplinteredShardsSplinterOpponentShallowSpriteTemplate 0x82 0x8 0xffd0 0xfff8 0x0 0x0 0xa 0x1 0x0 0x1 + createsprite gSplinteredShardsExplosionSpriteTemplate, ANIM_TARGET, 3, 0xfff0, 0x10, ANIM_TARGET, 0x1 + createsprite gSplinteredShardsSplinterOpponentShallowSpriteTemplate, ANIM_TARGET, 2, 0xffd0, 0xfff8, 0x0, 0x0, 0xa, 0x1, 0x0, 0x1 delay 0x4 playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET delay 0x2 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gSplinteredShardsExplosionSpriteTemplate 0x83 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 - launchtemplate gSplinteredShardsSplinterOpponentSteepSpriteTemplate 0x82 0x8 0xffd0 0x20 0x0 0x0 0xa 0x1 0x0 0x1 + createsprite gSplinteredShardsExplosionSpriteTemplate, ANIM_TARGET, 3, 0xffe8, 0xfff4, ANIM_TARGET, 0x1 + createsprite gSplinteredShardsSplinterOpponentSteepSpriteTemplate, ANIM_TARGET, 2, 0xffd0, 0x20, 0x0, 0x0, 0xa, 0x1, 0x0, 0x1 delay 0x4 playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET delay 0x2 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gSplinteredShardsExplosionSpriteTemplate 0x83 0x4 0x10 0x10 ANIM_TARGET 0x1 - launchtemplate gSplinteredShardsSplinterOpponentShallowSpriteTemplate 0x82 0x8 0xffd0 0x0 0x0 0x0 0xa 0x1 0x0 0x1 + createsprite gSplinteredShardsExplosionSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x10, ANIM_TARGET, 0x1 + createsprite gSplinteredShardsSplinterOpponentShallowSpriteTemplate, ANIM_TARGET, 2, 0xffd0, 0x0, 0x0, 0x0, 0xa, 0x1, 0x0, 0x1 delay 0x4 playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET delay 0x2 @@ -29395,14 +29393,14 @@ SplinteredStormshardsByOpponent: delay 0x2 loadspritegfx ANIM_TAG_ROUND_SHADOW @fly invisible ANIM_TARGET - launchtemplate gSplinteredShardsFlySpriteTemplate 0x2 0x4 0x0 0x0 0xd 0x150 + createsprite gSplinteredShardsFlySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0xd, 0x150 call SplinteredStormshardsOpponent_Rising1 call SplinteredStormshardsOpponent_Rising2 visible ANIM_ATTACKER delay 0x1 - launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0xd0 0x40 0xd0 0x0 0x30 - launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xb 0x5bff - launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1 + createsprite gSplinteredShardsRisingSpearSpriteTemplate, ANIM_ATTACKER, 50, 0xd0, 0x40, 0xd0, 0x0, 0x30 + createvisualtask AnimTask_BlendColorCycle, 0x2, 0x2, 0x2, 0x2, 0x0, 0xb, 0x5bff + createvisualtask AnimTask_ShakeMon2, 0x2, 0x0, 0x1, 0x0, 0x20, 0x1 delay 0x2 call SplinteredStormshardsOpponent_Rising2 call SplinteredStormshardsOpponent_Rising1 @@ -29415,16 +29413,16 @@ SplinteredStormshardsByOpponent: loadspritegfx ANIM_TAG_METEOR @superpower loadspritegfx ANIM_TAG_EXPLOSION @explosion playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER - launchtemplate gHorizontalLungeSpriteTemplate 0x2 0x2 0x4 0x4 @lunge forward + createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 0x4, 0x4 @lunge forward delay 0x2 invisible ANIM_ATTACKER - launchtemplate gGrowingSuperpowerTemplate 0x83 0x1 0x0 @superpower - launchtask AnimTask_ShakeMon 0x5 0x5 0x1 0x0 0x4 0x60 0x1 @shake target up and down - launchtemplate gSplinteredShardsSplinterPlayerShallowSpriteTemplate 0x82 0x8 0xffd0 0x18 0x0 0x0 0xa 0x1 0x0 0x1 + createsprite gGrowingSuperpowerTemplate, ANIM_TARGET, 3, 0x0 @superpower + createvisualtask AnimTask_ShakeMon, 0x5, 0x1, 0x0, 0x4, 0x60, 0x1 @shake target up and down + createsprite gSplinteredShardsSplinterPlayerShallowSpriteTemplate, ANIM_TARGET, 2, 0xffd0, 0x18, 0x0, 0x0, 0xa, 0x1, 0x0, 0x1 delay 0x4 playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET delay 0x4 - launchtemplate gSplinteredShardsSplinterPlayerSteepSpriteTemplate 0x82 0x8 0xffd0 0x30 0x0 0x0 0xa 0x1 0x0 0x1 + createsprite gSplinteredShardsSplinterPlayerSteepSpriteTemplate, ANIM_TARGET, 2, 0xffd0, 0x30, 0x0, 0x0, 0xa, 0x1, 0x0, 0x1 delay 0x4 delay 0x4 call SplinteredStormshardsExplosionOnPlayer @@ -29432,117 +29430,117 @@ SplinteredStormshardsByOpponent: goto SplinteredStormshardsEnd SplinteredStormshardsExplosionOnPlayer: playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gSplinteredShardsExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1 - launchtemplate gSplinteredShardsSplinterPlayerShallowSpriteTemplate 0x82 0x8 0xffd0 0x20 0x0 0x0 0xa 0x1 0x0 0x1 + createsprite gSplinteredShardsExplosionSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, ANIM_TARGET, 0x1 + createsprite gSplinteredShardsSplinterPlayerShallowSpriteTemplate, ANIM_TARGET, 2, 0xffd0, 0x20, 0x0, 0x0, 0xa, 0x1, 0x0, 0x1 delay 0x4 playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET delay 0x2 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gSplinteredShardsExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1 - launchtemplate gSplinteredShardsSplinterPlayerSteepSpriteTemplate 0x82 0x8 0xffd0 0x35 0x0 0x0 0xa 0x1 0x0 0x1 + createsprite gSplinteredShardsExplosionSpriteTemplate, ANIM_TARGET, 3, 0x18, 0xffe8, ANIM_TARGET, 0x1 + createsprite gSplinteredShardsSplinterPlayerSteepSpriteTemplate, ANIM_TARGET, 2, 0xffd0, 0x35, 0x0, 0x0, 0xa, 0x1, 0x0, 0x1 delay 0x4 playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET delay 0x2 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gSplinteredShardsExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1 - launchtemplate gSplinteredShardsSplinterPlayerShallowSpriteTemplate 0x82 0x8 0xffd0 0x1c 0x0 0x0 0xa 0x1 0x0 0x1 + createsprite gSplinteredShardsExplosionSpriteTemplate, ANIM_TARGET, 3, 0xfff0, 0x10, ANIM_TARGET, 0x1 + createsprite gSplinteredShardsSplinterPlayerShallowSpriteTemplate, ANIM_TARGET, 2, 0xffd0, 0x1c, 0x0, 0x0, 0xa, 0x1, 0x0, 0x1 delay 0x4 playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET delay 0x2 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gSplinteredShardsExplosionSpriteTemplate 0x83 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 - launchtemplate gSplinteredShardsSplinterPlayerShallowSpriteTemplate 0x82 0x8 0xffd0 0x16 0x0 0x0 0xa 0x1 0x0 0x1 + createsprite gSplinteredShardsExplosionSpriteTemplate, ANIM_TARGET, 3, 0xffe8, 0xfff4, ANIM_TARGET, 0x1 + createsprite gSplinteredShardsSplinterPlayerShallowSpriteTemplate, ANIM_TARGET, 2, 0xffd0, 0x16, 0x0, 0x0, 0xa, 0x1, 0x0, 0x1 delay 0x4 playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET delay 0x2 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gSplinteredShardsExplosionSpriteTemplate 0x83 0x4 0x10 0x10 ANIM_TARGET 0x1 - launchtemplate gSplinteredShardsSplinterPlayerSteepSpriteTemplate 0x82 0x8 0xffd0 0x2d 0x0 0x0 0xa 0x1 0x0 0x1 + createsprite gSplinteredShardsExplosionSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x10, ANIM_TARGET, 0x1 + createsprite gSplinteredShardsSplinterPlayerSteepSpriteTemplate, ANIM_TARGET, 2, 0xffd0, 0x2d, 0x0, 0x0, 0xa, 0x1, 0x0, 0x1 delay 0x4 playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET delay 0x2 return SplinteredStormshardsBrownExplode: playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gSplinteredShardsExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1 + createsprite gSplinteredShardsExplosionSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, ANIM_TARGET, 0x1 delay 0x6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gSplinteredShardsExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1 + createsprite gSplinteredShardsExplosionSpriteTemplate, ANIM_TARGET, 3, 0x18, 0xffe8, ANIM_TARGET, 0x1 delay 0x6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gSplinteredShardsExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + createsprite gSplinteredShardsExplosionSpriteTemplate, ANIM_TARGET, 3, 0xfff0, 0x10, ANIM_TARGET, 0x1 delay 0x6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gSplinteredShardsExplosionSpriteTemplate 0x83 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 + createsprite gSplinteredShardsExplosionSpriteTemplate, ANIM_TARGET, 3, 0xffe8, 0xfff4, ANIM_TARGET, 0x1 delay 0x6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gSplinteredShardsExplosionSpriteTemplate 0x83 0x4 0x10 0x10 ANIM_TARGET 0x1 + createsprite gSplinteredShardsExplosionSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x10, ANIM_TARGET, 0x1 delay 0x6 return SplinteredStormshardsPlayer_Rising1: - launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x24 0x80 0x24 0x30 0x30 + createsprite gSplinteredShardsRisingSpearSpriteTemplate, ANIM_ATTACKER, 50, 0x24, 0x80, 0x24, 0x30, 0x30 delay 0x2 - launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x10 0x80 0x10 0x35 0x30 + createsprite gSplinteredShardsRisingSpearSpriteTemplate, ANIM_ATTACKER, 50, 0x10, 0x80, 0x10, 0x35, 0x30 delay 0x2 - launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x45 0x80 0x45 0x3a 0x30 + createsprite gSplinteredShardsRisingSpearSpriteTemplate, ANIM_ATTACKER, 50, 0x45, 0x80, 0x45, 0x3a, 0x30 delay 0x2 - launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x60 0x80 0x60 0x30 0x30 + createsprite gSplinteredShardsRisingSpearSpriteTemplate, ANIM_ATTACKER, 50, 0x60, 0x80, 0x60, 0x30, 0x30 delay 0x2 - launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x30 0x80 0x30 0x3c 0x30 + createsprite gSplinteredShardsRisingSpearSpriteTemplate, ANIM_ATTACKER, 50, 0x30, 0x80, 0x30, 0x3c, 0x30 delay 0x2 - launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x55 0x80 0x55 0x33 0x30 + createsprite gSplinteredShardsRisingSpearSpriteTemplate, ANIM_ATTACKER, 50, 0x55, 0x80, 0x55, 0x33, 0x30 delay 0x2 return SplinteredStormshardsPlayer_Rising2: - launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x29 0x80 0x29 0x31 0x30 + createsprite gSplinteredShardsRisingSpearSpriteTemplate, ANIM_ATTACKER, 50, 0x29, 0x80, 0x29, 0x31, 0x30 delay 0x2 - launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x73 0x80 0x73 0x32 0x30 + createsprite gSplinteredShardsRisingSpearSpriteTemplate, ANIM_ATTACKER, 50, 0x73, 0x80, 0x73, 0x32, 0x30 delay 0x2 - launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x4a 0x80 0x4a 0x3c 0x30 + createsprite gSplinteredShardsRisingSpearSpriteTemplate, ANIM_ATTACKER, 50, 0x4a, 0x80, 0x4a, 0x3c, 0x30 delay 0x2 - launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x64 0x80 0x64 0x33 0x30 + createsprite gSplinteredShardsRisingSpearSpriteTemplate, ANIM_ATTACKER, 50, 0x64, 0x80, 0x64, 0x33, 0x30 delay 0x2 - launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x2c 0x80 0x2c 0x3d 0x30 + createsprite gSplinteredShardsRisingSpearSpriteTemplate, ANIM_ATTACKER, 50, 0x2c, 0x80, 0x2c, 0x3d, 0x30 delay 0x2 - launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x6c 0x80 0x6c 0x30 0x30 + createsprite gSplinteredShardsRisingSpearSpriteTemplate, ANIM_ATTACKER, 50, 0x6c, 0x80, 0x6c, 0x30, 0x30 delay 0x2 return SplinteredStormshardsOpponent_Rising1: - launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x94 0x40 0x94 0x0 0x30 + createsprite gSplinteredShardsRisingSpearSpriteTemplate, ANIM_ATTACKER, 50, 0x94, 0x40, 0x94, 0x0, 0x30 delay 0x2 - launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x80 0x40 0x80 0x0 0x30 + createsprite gSplinteredShardsRisingSpearSpriteTemplate, ANIM_ATTACKER, 50, 0x80, 0x40, 0x80, 0x0, 0x30 delay 0x2 - launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0xb5 0x40 0xb5 0x0 0x30 + createsprite gSplinteredShardsRisingSpearSpriteTemplate, ANIM_ATTACKER, 50, 0xb5, 0x40, 0xb5, 0x0, 0x30 delay 0x2 - launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0xd0 0x40 0xd0 0x0 0x30 + createsprite gSplinteredShardsRisingSpearSpriteTemplate, ANIM_ATTACKER, 50, 0xd0, 0x40, 0xd0, 0x0, 0x30 delay 0x2 - launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0xa0 0x40 0xa0 0x0 0x30 + createsprite gSplinteredShardsRisingSpearSpriteTemplate, ANIM_ATTACKER, 50, 0xa0, 0x40, 0xa0, 0x0, 0x30 delay 0x2 - launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0xc5 0x40 0xc5 0x0 0x30 + createsprite gSplinteredShardsRisingSpearSpriteTemplate, ANIM_ATTACKER, 50, 0xc5, 0x40, 0xc5, 0x0, 0x30 delay 0x2 return SplinteredStormshardsOpponent_Rising2: - launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x99 0x40 0x99 0x0 0x30 + createsprite gSplinteredShardsRisingSpearSpriteTemplate, ANIM_ATTACKER, 50, 0x99, 0x40, 0x99, 0x0, 0x30 delay 0x2 - launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0xe3 0x40 0xe3 0x0 0x30 + createsprite gSplinteredShardsRisingSpearSpriteTemplate, ANIM_ATTACKER, 50, 0xe3, 0x40, 0xe3, 0x0, 0x30 delay 0x2 - launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0xba 0x40 0xba 0x0 0x30 + createsprite gSplinteredShardsRisingSpearSpriteTemplate, ANIM_ATTACKER, 50, 0xba, 0x40, 0xba, 0x0, 0x30 delay 0x2 - launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0xd4 0x40 0xd4 0x0 0x30 + createsprite gSplinteredShardsRisingSpearSpriteTemplate, ANIM_ATTACKER, 50, 0xd4, 0x40, 0xd4, 0x0, 0x30 delay 0x2 - launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x9c 0x40 0x9c 0x0 0x30 + createsprite gSplinteredShardsRisingSpearSpriteTemplate, ANIM_ATTACKER, 50, 0x9c, 0x40, 0x9c, 0x0, 0x30 delay 0x2 - launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0xdc 0x40 0xdc 0x0 0x30 + createsprite gSplinteredShardsRisingSpearSpriteTemplate, ANIM_ATTACKER, 50, 0xdc, 0x40, 0xdc, 0x0, 0x30 delay 0x2 return SplinteredStormshardsFixBackgroundFade: - launchtask AnimTask_GetLycanrocForm 0x2 0x0 + createvisualtask AnimTask_GetLycanrocForm, 0x2 jumpargeq 0x0 0x1 SplinteredStormshardsNightFormeReturn SplinteredStormshardsDayFormeReturn: - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xc 0x0 0x5bff + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xc, 0x0, 0x5bff goto SplinteredStormshardsFinishFadeReturn SplinteredStormshardsNightFormeReturn: - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xc 0x0 0x0000 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xc, 0x0, 0x0000 SplinteredStormshardsFinishFadeReturn: return @@ -29552,43 +29550,43 @@ Move_LETS_SNUGGLE_FOREVER:: loadspritegfx ANIM_TAG_MUSIC_NOTES @music note loadspritegfx ANIM_TAG_SMALL_BUBBLES @fake tears loadspritegfx ANIM_TAG_VERTICAL_HEX @red - launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish - launchtask AnimTask_RockMonBackAndForth 0x5 0x3 0x0 0x2 0x0 - launchtemplate gSnuggleForeverHeartSpriteTemplate 0x3 0x2 0x0 0x14 + createvisualtask AnimTask_RockMonBackAndForth, 0x5, 0x0, 0x2, 0x0 + createsprite gSnuggleForeverHeartSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x14 playsewithpan SE_M_CHARM, SOUND_PAN_ATTACKER - launchtemplate gSlowFlyingMusicNotesSpriteTemplate 0x2 0x4 0x1 0x1 0x1 0x0 + createsprite gSlowFlyingMusicNotesSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x1, 0x1, 0x0 delay 0x7 - launchtemplate gSlowFlyingMusicNotesSpriteTemplate 0x2 0x4 0x0 0x3 0x3 0x80 + createsprite gSlowFlyingMusicNotesSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x3, 0x3, 0x80 delay 0x8 playsewithpan SE_M_CHARM, SOUND_PAN_ATTACKER - launchtemplate gSlowFlyingMusicNotesSpriteTemplate 0x2 0x4 0x1 0x2 0x0 0x80 + createsprite gSlowFlyingMusicNotesSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x2, 0x0, 0x80 delay 0x7 - launchtemplate gSlowFlyingMusicNotesSpriteTemplate 0x2 0x4 0x0 0x1 0x1 0x0 + createsprite gSlowFlyingMusicNotesSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1, 0x1, 0x0 delay 0x8 playsewithpan SE_M_CHARM, SOUND_PAN_ATTACKER delay 0x7 - launchtemplate gSlowFlyingMusicNotesSpriteTemplate 0x2 0x4 0x1 0x0 0x3 0x0 + createsprite gSlowFlyingMusicNotesSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x0, 0x3, 0x0 delay 0x7 fadetobg BG_SNUGGLE_FOREVER waitbgfadeout invisible ANIM_ATTACKER delay 0x1 setarg 0x7 0x0 @;Clear arg 7 so task works properly in Link battles - launchtask AnimTask_SnatchOpposingMonMove 0x2 0x0 + createvisualtask AnimTask_SnatchOpposingMonMove, 0x2 delay 0x10 playsewithpan SE_M_FAINT_ATTACK, SOUND_PAN_ATTACKER waitforvisualfinish setarg 0x7 0x0 @;Clear arg 7 so task works properly in Link battles - launchtask AnimTask_SnatchOpposingMonMove 0x2 0x0 + createvisualtask AnimTask_SnatchOpposingMonMove, 0x2 delay 0x10 playsewithpan SE_M_FAINT_ATTACK, SOUND_PAN_ATTACKER waitforvisualfinish setarg 0x7 0x0 @;Clear arg 7 so task works properly in Link battles - launchtask AnimTask_SnatchOpposingMonMove 0x2 0x0 + createvisualtask AnimTask_SnatchOpposingMonMove, 0x2 delay 0x10 playsewithpan SE_M_FAINT_ATTACK, SOUND_PAN_ATTACKER - launchtask AnimTask_ShakeMon 0x5 0x5 0x1 0x0 0x2 0x32 0x1 + createvisualtask AnimTask_ShakeMon, 0x5, 0x1, 0x0, 0x2, 0x32, 0x1 call LetsSnuggleForeverTears delay 0x8 call LetsSnuggleForeverTears @@ -29597,22 +29595,22 @@ Move_LETS_SNUGGLE_FOREVER:: delay 0x8 call LetsSnuggleForeverTears waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG | ANIM_PAL_ALL_BATTLERS, 0x2, 0x0, 0x10, 0x0000 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS), 0x2, 0x0, 0x10, 0x0000 waitforvisualfinish loadspritegfx ANIM_TAG_SPARKLE_4 @detect playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER - launchtemplate gSnuggleForeverEyesSpriteTemplate 0xd 0x2 0xa 0xfff2 - launchtemplate gSnuggleForeverEyesSpriteTemplate 0xd 0x2 0xfff6 0xfff2 + createsprite gSnuggleForeverEyesSpriteTemplate, ANIM_ATTACKER, 13, 0xa, 0xfff2 + createsprite gSnuggleForeverEyesSpriteTemplate, ANIM_ATTACKER, 13, 0xfff6, 0xfff2 delay 0x20 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x1 0x0 0x10 0x579D - launchtask AnimTask_GrowTarget 0x5 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x1, 0x0, 0x10, 0x579D + createvisualtask AnimTask_GrowTarget, 0x5 delay 0x5 loadspritegfx ANIM_TAG_IMPACT @hit loadspritegfx ANIM_TAG_PAIN_SPLIT @painsplit loadspritegfx ANIM_TAG_DUCK @duck loopsewithpan SE_M_CRABHAMMER, SOUND_PAN_TARGET, 0x14, 10 - launchtask AnimTask_TranslateMonElliptical 0x2 0x5 0x0 0xffee 0xa 0xa 0x4 - launchtask AnimTask_TranslateMonElliptical 0x2 0x5 0x1 0x12 0xa 0xa 0x4 + createvisualtask AnimTask_TranslateMonElliptical, 0x2, 0x0, 0xffee, 0xa, 0xa, 0x4 + createvisualtask AnimTask_TranslateMonElliptical, 0x2, 0x1, 0x12, 0xa, 0xa, 0x4 call LetsSnuggleForeverStars_1 call LetsSnuggleForeverImpacts call LetsSnuggleForeverStars_2 @@ -29621,8 +29619,8 @@ Move_LETS_SNUGGLE_FOREVER:: playsewithpan SE_M_FLAMETHROWER, SOUND_PAN_TARGET call LetsSnuggleForeverStars_2 call LetsSnuggleForeverImpacts - launchtask AnimTask_TranslateMonElliptical 0x2 0x5 0x0 0xffee 0x6 0x6 0x4 - launchtask AnimTask_TranslateMonElliptical 0x2 0x5 0x1 0x12 0x6 0x6 0x4 + createvisualtask AnimTask_TranslateMonElliptical, 0x2, 0x0, 0xffee, 0x6, 0x6, 0x4 + createvisualtask AnimTask_TranslateMonElliptical, 0x2, 0x1, 0x12, 0x6, 0x6, 0x4 call LetsSnuggleForeverStars_1 delay 0x0 call LetsSnuggleForeverImpacts @@ -29631,7 +29629,7 @@ Move_LETS_SNUGGLE_FOREVER:: call LetsSnuggleForeverImpacts call LetsSnuggleForeverStars_1 delay 0x0 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ALL-ANIM_PAL_DEF 0x2 0x0 0x10 0x7fff + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_ALL_BUT_DEF), 0x2, 0x0, 0x10, 0x7fff playsewithpan SE_M_FLAMETHROWER, SOUND_PAN_TARGET call LetsSnuggleForeverStars_2 delay 0x0 @@ -29643,35 +29641,35 @@ Move_LETS_SNUGGLE_FOREVER:: end LetsSnuggleForeverTears: playsewithpan SE_M_TAIL_WHIP, SOUND_PAN_TARGET - launchtemplate gTearDropSpriteTemplate 0x82 0x2 ANIM_TARGET 0x0 - launchtemplate gTearDropSpriteTemplate 0x82 0x2 ANIM_TARGET 0x1 + createsprite gTearDropSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x0 + createsprite gTearDropSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x1 delay 0x8 - launchtemplate gTearDropSpriteTemplate 0x82 0x2 ANIM_TARGET 0x2 - launchtemplate gTearDropSpriteTemplate 0x82 0x2 ANIM_TARGET 0x3 + createsprite gTearDropSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x2 + createsprite gTearDropSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x3 return LetsSnuggleForeverImpacts: - launchtemplate gBasicHitSplatSpriteTemplate 0x83 0x4 0x0 0xfff4 0x1 0x0 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x0, 0xfff4, 0x1, 0x0 delay 0x8 - launchtemplate gBasicHitSplatSpriteTemplate 0x83 0x4 0xfff4 0x8 0x1 0x0 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0xfff4, 0x8, 0x1, 0x0 delay 0x8 - launchtemplate gBasicHitSplatSpriteTemplate 0x83 0x4 0xc 0x0 0x1 0x0 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0xc, 0x0, 0x1, 0x0 delay 0x8 return LetsSnuggleForeverStars_1: - launchtemplate gSnuggleForeverStarSpriteTemplate 0x83 0x4 0xfff0 0xfff8 0xa0 0xffe0 - launchtemplate gSnuggleForeverStarSpriteTemplate 0x83 0x4 0xfff0 0xfff8 0xff00 0xffd8 - launchtemplate gSnuggleForeverStarSpriteTemplate 0x83 0x4 0xfff0 0xfff8 0x80 0xfff0 - launchtemplate gSnuggleForeverStarSpriteTemplate 0x83 0x4 0xfff0 0xfff8 0x1a0 0xffda - launchtemplate gSnuggleForeverStarSpriteTemplate 0x83 0x4 0xfff0 0xfff8 0xff80 0xffea - launchtemplate gSnuggleForeverStarSpriteTemplate 0x83 0x4 0xfff0 0xfff8 0xfe80 0xffe1 + createsprite gSnuggleForeverStarSpriteTemplate, ANIM_TARGET, 3, 0xfff0, 0xfff8, 0xa0, 0xffe0 + createsprite gSnuggleForeverStarSpriteTemplate, ANIM_TARGET, 3, 0xfff0, 0xfff8, 0xff00, 0xffd8 + createsprite gSnuggleForeverStarSpriteTemplate, ANIM_TARGET, 3, 0xfff0, 0xfff8, 0x80, 0xfff0 + createsprite gSnuggleForeverStarSpriteTemplate, ANIM_TARGET, 3, 0xfff0, 0xfff8, 0x1a0, 0xffda + createsprite gSnuggleForeverStarSpriteTemplate, ANIM_TARGET, 3, 0xfff0, 0xfff8, 0xff80, 0xffea + createsprite gSnuggleForeverStarSpriteTemplate, ANIM_TARGET, 3, 0xfff0, 0xfff8, 0xfe80, 0xffe1 return LetsSnuggleForeverStars_2: - launchtemplate gSnuggleForeverStarSpriteTemplate 0x83 0x4 0x10 0x8 0xa0 0xffe0 - launchtemplate gSnuggleForeverStarSpriteTemplate 0x83 0x4 0x10 0x8 0xff00 0xffd8 - launchtemplate gSnuggleForeverStarSpriteTemplate 0x83 0x4 0x10 0x8 0x80 0xfff0 - launchtemplate gSnuggleForeverStarSpriteTemplate 0x83 0x4 0x10 0x8 0x1a0 0xffda - launchtemplate gSnuggleForeverStarSpriteTemplate 0x83 0x4 0x10 0x8 0xff80 0xffea - launchtemplate gSnuggleForeverStarSpriteTemplate 0x83 0x4 0x10 0x8 0xfe80 0xffe1 + createsprite gSnuggleForeverStarSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x8, 0xa0, 0xffe0 + createsprite gSnuggleForeverStarSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x8, 0xff00, 0xffd8 + createsprite gSnuggleForeverStarSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x8, 0x80, 0xfff0 + createsprite gSnuggleForeverStarSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x8, 0x1a0, 0xffda + createsprite gSnuggleForeverStarSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x8, 0xff80, 0xffea + createsprite gSnuggleForeverStarSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x8, 0xfe80, 0xffe1 return @@ -29683,40 +29681,40 @@ Move_CLANGOROUS_SOULBLAZE:: loadspritegfx ANIM_TAG_SPARKLE_2 @stars fadetobg BG_CLANGOROUS_SOULBLAZE waitbgfadein - launchtask AnimTask_RockMonBackAndForth 0x5 0x3 0x0 0x2 0x0 + createvisualtask AnimTask_RockMonBackAndForth, 0x5, 0x0, 0x2, 0x0 call ClangorousSoulblazeBuffEffect call ClangorousSoulblazeBuffEffect call ClangorousSoulblazeBuffEffect waitforvisualfinish loadspritegfx ANIM_TAG_VERTICAL_HEX @red loadspritegfx ANIM_TAG_HORSESHOE_SIDE_FIST @fist - launchtemplate gClangorousSoulRedFistTemplate 0x2 0x8 0xfff0 0x0 0x0 0x0 0xa ANIM_ATTACKER ANIM_RIGHT_FIST 0x1 - launchtemplate gClangorousSoulRedFistTemplate 0x2 0x8 0x10 0x0 0x0 0x0 0xa ANIM_ATTACKER ANIM_LEFT_FIST 0x1 + createsprite gClangorousSoulRedFistTemplate, ANIM_ATTACKER, 2, 0xfff0, 0x0, 0x0, 0x0, 0xa, ANIM_ATTACKER, ANIM_RIGHT_FIST, 0x1 + createsprite gClangorousSoulRedFistTemplate, ANIM_ATTACKER, 2, 0x10, 0x0, 0x0, 0x0, 0xa, ANIM_ATTACKER, ANIM_LEFT_FIST, 0x1 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET waitforvisualfinish loadspritegfx ANIM_TAG_THIN_RING @ring playsewithpan SE_SHINY, SOUND_PAN_ATTACKER - launchtemplate gClangorousSoulRedRingTemplate 0x3 0x4 0x0 0x0 0x0 0x0 + createsprite gClangorousSoulRedRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0 waitforvisualfinish unloadspritegfx ANIM_TAG_HORSESHOE_SIDE_FIST unloadspritegfx ANIM_TAG_SPARKLE_2 @stars loadspritegfx ANIM_TAG_ROUND_SHADOW @ fly playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER - launchtemplate gClangoorousSoulblazeWhiteFlySpriteTemplate 0x2 0x4 0x0 0x0 0xd 0x150 + createsprite gClangoorousSoulblazeWhiteFlySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0xd, 0x150 delay 0x2 - launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0 0xFFE0 0x1 0xffff - launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xfd00 0xa 0x0 0x2a - launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_DEF_PARTNER 0xfd00 0xa 0x0 0x2a + createvisualtask AnimTask_StartSlidingBg, 0x5, 0x0, 0xFFE0, 0x1, 0xffff + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0xfd00, 0xa, 0x0, 0x2a + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_DEF_PARTNER, 0xfd00, 0xa, 0x0, 0x2a delay 0x20 - launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0 0x20 0x1 0xffff + createvisualtask AnimTask_StartSlidingBg, 0x5, 0x0, 0x20, 0x1, 0xffff delay 0xC - setblends 0x80c - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x4 0x0 + setalpha 12, 8 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x4, 0x0 loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge visible ANIM_ATTACKER monbg ANIM_ATTACKER loopsewithpan SE_M_PSYBEAM2, SOUND_PAN_ATTACKER, 0xe, 0xa - launchtemplate gClangoorousSoulblazePurpleChargeSpriteTemplate 0x2 0x1 0x0 @charge + createsprite gClangoorousSoulblazePurpleChargeSpriteTemplate, ANIM_ATTACKER, 2, 0x0 @charge call ClangorousSoulblazeEnergySwirl call ClangorousSoulblazeEnergySwirl call ClangorousSoulblazeEnergySwirl @@ -29735,11 +29733,11 @@ Move_CLANGOROUS_SOULBLAZE:: delay 0x0 monbg ANIM_TARGET playsewithpan SE_M_GIGA_DRAIN, SOUND_PAN_ATTACKER - launchtemplate gClangoorousSoulblazePulseSpriteTemplate 0x2 0x6 0x10 0x0 0x0 0x0 0x1d 0x0 - launchtemplate gSlowFlyingMusicNotesSpriteTemplate 0x2 0x4 0x0 0x0 0x0 0x0 @music note + createsprite gClangoorousSoulblazePulseSpriteTemplate, ANIM_ATTACKER, 2, 0x10, 0x0, 0x0, 0x0, 0x1d, 0x0 + createsprite gSlowFlyingMusicNotesSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x0 @music note delay 0x5 - launchtask AnimTask_HorizontalShake 0x5 0x3 ANIM_TARGET 0x2 0x3c - launchtask AnimTask_HorizontalShake 0x5 0x3 ANIM_DEF_PARTNER 0x2 0x3c + createvisualtask AnimTask_HorizontalShake, 0x5, ANIM_TARGET, 0x2, 0x3c + createvisualtask AnimTask_HorizontalShake, 0x5, ANIM_DEF_PARTNER, 0x2, 0x3c call ClangorousSoulblazePulse_1 delay 0x5 call ClangorousSoulblazePulse_2 @@ -29748,214 +29746,214 @@ Move_CLANGOROUS_SOULBLAZE:: delay 0x5 call ClangorousSoulblazePulse_4 loadspritegfx ANIM_TAG_EXPLOSION - launchtask AnimTask_IsTargetPlayerSide 0x2 0x0 + createvisualtask AnimTask_IsTargetPlayerSide, 0x2 jumpargeq 0x7 ANIM_TARGET ClangorousSoulblazeOnOpponent ClangorousSoulblazeOnPlayer: playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x10 0xfff0 ANIM_ATTACKER 0x1 + createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x10, 0xfff0, ANIM_ATTACKER, 0x1 delay 0x5 call ClangorousSoulblazePulse_5 - launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x10 0x10 ANIM_ATTACKER 0x1 + createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x10, 0x10, ANIM_ATTACKER, 0x1 delay 0x5 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x20 0xffe0 ANIM_ATTACKER 0x1 + createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x20, 0xffe0, ANIM_ATTACKER, 0x1 call ClangorousSoulblazePulse_1 delay 0x5 - launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x20 0x0 ANIM_ATTACKER 0x1 + createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x20, 0x0, ANIM_ATTACKER, 0x1 call ClangorousSoulblazePulse_2 delay 0x5 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x30 0xffe0 ANIM_ATTACKER 0x1 + createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x30, 0xffe0, ANIM_ATTACKER, 0x1 call ClangorousSoulblazePulse_3 delay 0x5 - launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x30 0xfff0 ANIM_ATTACKER 0x1 + createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x30, 0xfff0, ANIM_ATTACKER, 0x1 call ClangorousSoulblazePulse_4 delay 0x5 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x35 0x0 ANIM_ATTACKER 0x1 + createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x35, 0x0, ANIM_ATTACKER, 0x1 call ClangorousSoulblazePulse_5 delay 0x5 - launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x40 0x10 ANIM_ATTACKER 0x1 + createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x40, 0x10, ANIM_ATTACKER, 0x1 call ClangorousSoulblazePulse_1 delay 0x5 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x40 0x0 ANIM_ATTACKER 0x1 + createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x40, 0x0, ANIM_ATTACKER, 0x1 call ClangorousSoulblazePulse_2 delay 0x5 - launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x45 0xfff0 ANIM_ATTACKER 0x1 + createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x45, 0xfff0, ANIM_ATTACKER, 0x1 call ClangorousSoulblazePulse_3 delay 0x5 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x50 0x10 ANIM_ATTACKER 0x1 + createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x50, 0x10, ANIM_ATTACKER, 0x1 call ClangorousSoulblazePulse_4 delay 0x5 - launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x50 0xffe0 ANIM_ATTACKER 0x1 + createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x50, 0xffe0, ANIM_ATTACKER, 0x1 call ClangorousSoulblazePulse_5 delay 0x5 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x60 0xfff0 ANIM_ATTACKER 0x1 + createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x60, 0xfff0, ANIM_ATTACKER, 0x1 call ClangorousSoulblazePulse_1 delay 0x5 - launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x60 0xffe0 ANIM_ATTACKER 0x1 + createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x60, 0xffe0, ANIM_ATTACKER, 0x1 call ClangorousSoulblazePulse_2 delay 0x5 - launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG | ANIM_PAL_ALL_BATTLERS, 0x4, 0x0, 0x10, 0x7fff + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS), 0x4, 0x0, 0x10, 0x7fff playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x65 0xfff0 ANIM_ATTACKER 0x1 + createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x65, 0xfff0, ANIM_ATTACKER, 0x1 call ClangorousSoulblazePulse_3 delay 0x5 - launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x65 0xffe0 ANIM_ATTACKER 0x1 - launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x0 0x0 ANIM_TARGET 0x1 + createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x65, 0xffe0, ANIM_ATTACKER, 0x1 + createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, ANIM_TARGET, 0x1 call ClangorousSoulblazePulse_4 delay 0x5 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x18 0xffe8 ANIM_TARGET 0x1 + createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x18, 0xffe8, ANIM_TARGET, 0x1 call ClangorousSoulblazePulse_5 delay 0x5 - launchtemplate gExplosionSpriteTemplate 0x3 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0xfff0, 0x10, ANIM_TARGET, 0x1 call ClangorousSoulblazePulse_1 delay 0x5 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gExplosionSpriteTemplate 0x3 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 + createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0xffe8, 0xfff4, ANIM_TARGET, 0x1 call ClangorousSoulblazePulse_2 delay 0x5 - launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x10 0x10 ANIM_TARGET 0x1 + createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x10, 0x10, ANIM_TARGET, 0x1 goto FINISH_SOULBLAZE ClangorousSoulblazeOnOpponent: playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x10 0x15 ANIM_ATTACKER 0x1 + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x15, ANIM_ATTACKER, 0x1 delay 0x5 call ClangorousSoulblazePulse_5 - launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x10 0x0 ANIM_ATTACKER 0x1 + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x0, ANIM_ATTACKER, 0x1 delay 0x5 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x20 0x25 ANIM_ATTACKER 0x1 + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0x20, 0x25, ANIM_ATTACKER, 0x1 call ClangorousSoulblazePulse_1 delay 0x5 - launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x20 0x5 ANIM_ATTACKER 0x1 + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0x20, 0x5, ANIM_ATTACKER, 0x1 call ClangorousSoulblazePulse_2 delay 0x5 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x30 0x25 ANIM_ATTACKER 0x1 + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0x30, 0x25, ANIM_ATTACKER, 0x1 call ClangorousSoulblazePulse_3 delay 0x5 - launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x30 0x15 ANIM_ATTACKER 0x1 + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0x30, 0x15, ANIM_ATTACKER, 0x1 call ClangorousSoulblazePulse_4 delay 0x5 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x35 0x0 ANIM_ATTACKER 0x1 + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0x35, 0x0, ANIM_ATTACKER, 0x1 call ClangorousSoulblazePulse_5 delay 0x5 - launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x40 0xa ANIM_ATTACKER 0x1 + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0x40, 0xa, ANIM_ATTACKER, 0x1 call ClangorousSoulblazePulse_1 delay 0x5 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x40 0x0 ANIM_ATTACKER 0x1 + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0x40, 0x0, ANIM_ATTACKER, 0x1 call ClangorousSoulblazePulse_2 delay 0x5 - launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x45 0x10 ANIM_ATTACKER 0x1 + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0x45, 0x10, ANIM_ATTACKER, 0x1 call ClangorousSoulblazePulse_3 delay 0x5 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x50 0x30 ANIM_ATTACKER 0x1 + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0x50, 0x30, ANIM_ATTACKER, 0x1 call ClangorousSoulblazePulse_4 delay 0x5 - launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x50 0x25 ANIM_ATTACKER 0x1 + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0x50, 0x25, ANIM_ATTACKER, 0x1 call ClangorousSoulblazePulse_5 delay 0x5 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x60 0x40 ANIM_ATTACKER 0x1 + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0x60, 0x40, ANIM_ATTACKER, 0x1 call ClangorousSoulblazePulse_1 delay 0x5 - launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x60 0x45 ANIM_ATTACKER 0x1 + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0x60, 0x45, ANIM_ATTACKER, 0x1 call ClangorousSoulblazePulse_2 delay 0x5 - launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_ALL_BATTLERS | ANIM_PAL_BG, 0x4, 0x0, 0x10, 0x7fff + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS), 0x4, 0x0, 0x10, 0x7fff playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x65 0x35 ANIM_ATTACKER 0x1 + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0x65, 0x35, ANIM_ATTACKER, 0x1 call ClangorousSoulblazePulse_3 delay 0x5 - launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x65 0x40 ANIM_ATTACKER 0x1 - launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1 + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0x65, 0x40, ANIM_ATTACKER, 0x1 + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, ANIM_TARGET, 0x1 call ClangorousSoulblazePulse_4 delay 0x5 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1 + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0x18, 0xffe8, ANIM_TARGET, 0x1 call ClangorousSoulblazePulse_5 delay 0x5 - launchtemplate gExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0xfff0, 0x10, ANIM_TARGET, 0x1 call ClangorousSoulblazePulse_1 delay 0x5 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gExplosionSpriteTemplate 0x83 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0xffe8, 0xfff4, ANIM_TARGET, 0x1 call ClangorousSoulblazePulse_2 delay 0x5 - launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x10 0x10 ANIM_TARGET 0x1 + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x10, ANIM_TARGET, 0x1 FINISH_SOULBLAZE: waitforvisualfinish clearmonbg ANIM_TARGET delay 0x5 call ResetFromWhiteScreen blendoff - launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x10 - launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_DEF_PARTNER 0x0 0x10 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x10 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_DEF_PARTNER, 0x0, 0x10 waitforvisualfinish end ClangorousSoulblazeEnergySwirl: - launchtemplate gClangoorousSoulblazePurpleSwirlSpriteTemplate 0x82 0x7 0x0 0x1c 0x180 0x32 0x8 0x32 ANIM_ATTACKER - launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2 + createsprite gClangoorousSoulblazePurpleSwirlSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x180, 0x32, 0x8, 0x32, ANIM_ATTACKER + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x1a, 0x2 delay 0x2 - launchtemplate gClangoorousSoulblazePurpleSwirlSpriteTemplate 0x82 0x7 0x0 0x20 0xf0 0x28 0xb 0xffd2 ANIM_ATTACKER + createsprite gClangoorousSoulblazePurpleSwirlSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x20, 0xf0, 0x28, 0xb, 0xffd2, ANIM_ATTACKER delay 0x2 - launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1 - launchtemplate gClangoorousSoulblazePurpleSwirlSpriteTemplate 0x82 0x7 0x0 0x21 0x1a0 0x28 0x4 0x2a ANIM_ATTACKER + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xe, 0x1c, 0x1 + createsprite gClangoorousSoulblazePurpleSwirlSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1a0, 0x28, 0x4, 0x2a, ANIM_ATTACKER delay 0x2 - launchtemplate gClangoorousSoulblazePurpleSwirlSpriteTemplate 0x82 0x7 0x0 0x1f 0x120 0x2d 0x6 0xffd6 ANIM_ATTACKER + createsprite gClangoorousSoulblazePurpleSwirlSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1f, 0x120, 0x2d, 0x6, 0xffd6, ANIM_ATTACKER delay 0x2 - launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2 - launchtemplate gClangoorousSoulblazePurpleSwirlSpriteTemplate 0x82 0x7 0x0 0x1c 0x1c0 0x2d 0xb 0x2e ANIM_ATTACKER + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfffb, 0xa, 0x2 + createsprite gClangoorousSoulblazePurpleSwirlSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x1c0, 0x2d, 0xb, 0x2e, ANIM_ATTACKER delay 0x2 - launchtemplate gClangoorousSoulblazePurpleSwirlSpriteTemplate 0x82 0x7 0x0 0x21 0x1d0 0x32 0xa 0xffce ANIM_ATTACKER + createsprite gClangoorousSoulblazePurpleSwirlSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1d0, 0x32, 0xa, 0xffce, ANIM_ATTACKER delay 0x2 - launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3 + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1c, 0x1a, 0x3 return ClangorousSoulblazeBuffEffect: playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER - launchtemplate gClangorousSoulBlueBuffTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2 + createsprite gClangorousSoulBlueBuffTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x1a, 0x2 delay 0x4 - launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1 + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xe, 0x1c, 0x1 delay 0x4 - launchtemplate gClangorousSoulPurpleBuffTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2 - launchtemplate gGrantingStarsSpriteTemplate 0x2 0x6 0xfff1 0x0 0x0 0x0 0x20 0x3c + createsprite gClangorousSoulPurpleBuffTemplate, ANIM_ATTACKER, 2, 0x0, 0xfffb, 0xa, 0x2 + createsprite gGrantingStarsSpriteTemplate, ANIM_ATTACKER, 2, 0xfff1, 0x0, 0x0, 0x0, 0x20, 0x3c delay 0x4 - launchtemplate gClangorousSoulWhiteBuffTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3 + createsprite gClangorousSoulWhiteBuffTemplate, ANIM_ATTACKER, 2, 0x0, 0x1c, 0x1a, 0x3 delay 0x4 - launchtemplate gGrantingStarsSpriteTemplate 0x2 0x6 0xc 0xfffb 0x0 0x0 0x20 0x3c + createsprite gGrantingStarsSpriteTemplate, ANIM_ATTACKER, 2, 0xc, 0xfffb, 0x0, 0x0, 0x20, 0x3c return ClangorousSoulblazePulse_1: playsewithpan SE_M_UPROAR, SOUND_PAN_ATTACKER - launchtemplate gClangoorousSoulblazePulseSpriteTemplate 0x2 0x6 0x10 0x0 0x0 0x0 0x1d 0x0 - launchtemplate gSlowFlyingMusicNotesSpriteTemplate 0x2 0x4 0x1 0x1 0x1 0x0 + createsprite gClangoorousSoulblazePulseSpriteTemplate, ANIM_ATTACKER, 2, 0x10, 0x0, 0x0, 0x0, 0x1d, 0x0 + createsprite gSlowFlyingMusicNotesSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x1, 0x1, 0x0 return ClangorousSoulblazePulse_2: playsewithpan SE_M_UPROAR, SOUND_PAN_ATTACKER - launchtemplate gClangoorousSoulblazePulseSpriteTemplate 0x2 0x6 0x10 0x0 0x0 0x0 0x1d 0x0 - launchtemplate gSlowFlyingMusicNotesSpriteTemplate 0x2 0x4 0x0 0x3 0x3 0x80 + createsprite gClangoorousSoulblazePulseSpriteTemplate, ANIM_ATTACKER, 2, 0x10, 0x0, 0x0, 0x0, 0x1d, 0x0 + createsprite gSlowFlyingMusicNotesSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x3, 0x3, 0x80 return ClangorousSoulblazePulse_3: playsewithpan SE_M_UPROAR, SOUND_PAN_ATTACKER - launchtemplate gClangoorousSoulblazePulseSpriteTemplate 0x2 0x6 0x10 0x0 0x0 0x0 0x1d 0x0 - launchtemplate gSlowFlyingMusicNotesSpriteTemplate 0x2 0x4 0x1 0x2 0x0 0x80 + createsprite gClangoorousSoulblazePulseSpriteTemplate, ANIM_ATTACKER, 2, 0x10, 0x0, 0x0, 0x0, 0x1d, 0x0 + createsprite gSlowFlyingMusicNotesSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x2, 0x0, 0x80 return ClangorousSoulblazePulse_4: playsewithpan SE_M_UPROAR, SOUND_PAN_ATTACKER - launchtemplate gClangoorousSoulblazePulseSpriteTemplate 0x2 0x6 0x10 0x0 0x0 0x0 0x1d 0x0 - launchtemplate gSlowFlyingMusicNotesSpriteTemplate 0x2 0x4 0x0 0x1 0x1 0x0 + createsprite gClangoorousSoulblazePulseSpriteTemplate, ANIM_ATTACKER, 2, 0x10, 0x0, 0x0, 0x0, 0x1d, 0x0 + createsprite gSlowFlyingMusicNotesSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1, 0x1, 0x0 return ClangorousSoulblazePulse_5: playsewithpan SE_M_UPROAR, SOUND_PAN_ATTACKER - launchtemplate gClangoorousSoulblazePulseSpriteTemplate 0x2 0x6 0x10 0x0 0x0 0x0 0x1d 0x0 - launchtemplate gSlowFlyingMusicNotesSpriteTemplate 0x2 0x4 0x1 0x0 0x3 0x0 + createsprite gClangoorousSoulblazePulseSpriteTemplate, ANIM_ATTACKER, 2, 0x10, 0x0, 0x0, 0x0, 0x1d, 0x0 + createsprite gSlowFlyingMusicNotesSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x0, 0x3, 0x0 return @@ -29963,32 +29961,32 @@ Move_GUARDIAN_OF_ALOLA:: loadspritegfx ANIM_TAG_THIN_RING @ring loadspritegfx ANIM_TAG_MUD_SAND @dig loadspritegfx ANIM_TAG_SPEED_DUST @extremespeed - launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish - launchtemplate gThinRingExpandingSpriteTemplate 0x3 0x4 0x0 0x0 0x0 0x0 + createsprite gThinRingExpandingSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0 playsewithpan SE_SHINY, SOUND_PAN_ATTACKER waitforvisualfinish unloadspritegfx ANIM_TAG_THIN_RING playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER - launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0xff00 0xf 0x0 0x4 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0xff00, 0xf, 0x0, 0x4 call GuardianOfAlolaRocksPlayer delay 0xa - launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0x0 0x10 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x10 call GuardianOfAlolaRocksPlayer waitforvisualfinish delay 0xa playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER - launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0xff00 0xf 0x0 0x4 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0xff00, 0xf, 0x0, 0x4 call GuardianOfAlolaRocksPlayer delay 0xa - launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0x0 0x10 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x10 call GuardianOfAlolaRocksPlayer waitforvisualfinish delay 0xa delay 0x10 call GuardianOfAlolaRocksPlayer - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x2 0xC 0xC 0x277f @;Yellow - launchtask AnimTask_NightShadeClone 0x5 0x1 0x75 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x2, 0xC, 0xC, 0x277f @;Yellow + createvisualtask AnimTask_NightShadeClone, 0x5, 0x75 delay 0x10 call GuardianOfAlolaRocksPlayer delay 0x10 @@ -29996,20 +29994,20 @@ Move_GUARDIAN_OF_ALOLA:: delay 0x10 loadspritegfx ANIM_TAG_HORSESHOE_SIDE_FIST call GuardianOfAlolaRocksPlayer - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x3 0x0 0xb 0x0000 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x3, 0x0, 0xb, 0x0000 delay 0x1 - launchtask AnimTask_BlendParticle, 0x2, 0x5, ANIM_TAG_HORSESHOE_SIDE_FIST, 0x0, 0xC, 0xc, 0x277f + createvisualtask AnimTask_BlendParticle, 0x2, ANIM_TAG_HORSESHOE_SIDE_FIST, 0x0, 0xC, 0xc, 0x277f fadetobg BG_FISSURE waitbgfadeout call GuardianOfAlolaRocksPlayer - launchtask AnimTask_PositionFissureBgOnBattler 0x5 0x3 0x1 0x5 0xffff + createvisualtask AnimTask_PositionFissureBgOnBattler, 0x5, 0x1, 0x5, 0xffff waitbgfadein playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_TARGET - launchtemplate gGuardianOfAlolaFistSpriteTemplate 0x83 0x3 0x0 0xffd0 0x1f + createsprite gGuardianOfAlolaFistSpriteTemplate, ANIM_TARGET, 3, 0x0, 0xffd0, 0x1f delay 0x24 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x0 0xb 0x0 0x0000 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x0, 0xb, 0x0, 0x0000 playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET - launchtask AnimTask_HorizontalShake 0x3 0x3 ANIM_TARGET 0xa 0x25 + createvisualtask AnimTask_HorizontalShake, 0x3, ANIM_TARGET, 0xa, 0x25 loopsewithpan SE_M_ROCK_THROW SOUND_PAN_TARGET 0x10 0x9 call GuardianOfAlolaRocksTarget call GuardianOfAlolaRockGeyser @@ -30024,7 +30022,7 @@ Move_GUARDIAN_OF_ALOLA:: call GuardianOfAlolaRockGeyser call GuardianOfAlolaRockGeyser call GuardianOfAlolaRocksTarget - launchtask AnimTask_BlendBattleAnimPal 0x2 0x5 ANIM_PAL_ALL 0x3 0x0 0x10 0x7fff + createvisualtask AnimTask_BlendBattleAnimPal, 0x2, (F_PAL_BG | F_PAL_BATTLERS), 0x3, 0x0, 0x10, 0x7fff call GuardianOfAlolaRockGeyser call GuardianOfAlolaRockGeyser call GuardianOfAlolaRockGeyser @@ -30034,25 +30032,25 @@ Move_GUARDIAN_OF_ALOLA:: end GuardianOfAlolaRocksPlayer: playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER - launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x0 0xc 0x4 0xfff0 0x12 - launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x0 0x10 0x4 0xfff6 0x12 - launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x1 0xe 0x4 0xffee 0x12 - launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x1 0xc 0x4 0xfff0 0x12 + createsprite gDirtPlumeSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0xc, 0x4, 0xfff0, 0x12 + createsprite gDirtPlumeSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x10, 0x4, 0xfff6, 0x12 + createsprite gDirtPlumeSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1, 0xe, 0x4, 0xffee, 0x12 + createsprite gDirtPlumeSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1, 0xc, 0x4, 0xfff0, 0x12 return GuardianOfAlolaRocksTarget: - launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 ANIM_TARGET 0x0 0xc 0x4 0xfff0 0x12 - launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 ANIM_TARGET 0x0 0x10 0x4 0xfff6 0x12 - launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 ANIM_TARGET 0x1 0xe 0x4 0xffee 0x12 - launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 ANIM_TARGET 0x1 0xc 0x4 0xfff0 0x12 + createsprite gDirtPlumeSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0xc, 0x4, 0xfff0, 0x12 + createsprite gDirtPlumeSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x10, 0x4, 0xfff6, 0x12 + createsprite gDirtPlumeSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x1, 0xe, 0x4, 0xffee, 0x12 + createsprite gDirtPlumeSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x1, 0xc, 0x4, 0xfff0, 0x12 return GuardianOfAlolaRockGeyser: - launchtemplate gGuardianOfAlolaDirtGeyserSpriteTemplate 0x82, 0x3, 0 0xfffc 0x10 @ -4, -0x10 + createsprite gGuardianOfAlolaDirtGeyserSpriteTemplate, ANIM_TARGET, 2, 0, 0xfffc, 0x10 @ -4, -0x10 delay 0x0 - launchtemplate gGuardianOfAlolaDirtGeyserSpriteTemplate 0x82, 0x3, 0 0x100D 0x10 @ + createsprite gGuardianOfAlolaDirtGeyserSpriteTemplate, ANIM_TARGET, 2, 0, 0x100D, 0x10 delay 0x0 - launchtemplate gGuardianOfAlolaDirtGeyserSpriteTemplate 0x82, 0x3, 0 0x4 0x10 + createsprite gGuardianOfAlolaDirtGeyserSpriteTemplate, ANIM_TARGET, 2, 0, 0x4, 0x10 delay 0x0 - launchtemplate gGuardianOfAlolaDirtGeyserSpriteTemplate 0x82, 0x3, 0 0xfff0 0x10 + createsprite gGuardianOfAlolaDirtGeyserSpriteTemplate, ANIM_TARGET, 2, 0, 0xfff0, 0x10 delay 0x0 return @@ -30061,15 +30059,15 @@ Move_SEARING_SUNRAZE_SMASH:: loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy loadspritegfx ANIM_TAG_SPARKLE_2 @sparkles invisible ANIM_TARGET - launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x0 0x0 0xe 0x001b + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x0, 0x0, 0xe, 0x001b playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call SearingSunrazeSmashFlare delay 0x8 playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER - launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xb 0x7fff - launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1 + createvisualtask AnimTask_BlendColorCycle, 0x2, 0x2, 0x2, 0x2, 0x0, 0xb, 0x7fff + createvisualtask AnimTask_ShakeMon2, 0x2, 0x0, 0x1, 0x0, 0x20, 0x1 call SearingSunrazeSmashFlare delay 0x8 call SearingSunrazeSmashFlare @@ -30081,34 +30079,34 @@ Move_SEARING_SUNRAZE_SMASH:: loadspritegfx ANIM_TAG_SHADOW_BALL @shadow ball loadspritegfx ANIM_TAG_AIR_WAVE_2 @white/grey playsewithpan SE_M_NIGHTMARE, SOUND_PAN_ATTACKER - launchtemplate gSearingSunrazeSmashGrowWormholeSpriteTemplate 0x2 0x4 0x0 0x0 ANIM_TARGET 0x0 + createsprite gSearingSunrazeSmashGrowWormholeSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, ANIM_TARGET, 0x0 delay 0x10 - launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0x35 0xffed 0x1 0x2 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x35, 0xffed, 0x1, 0x2 delay 0x2 loadspritegfx ANIM_TAG_METEOR @superpower visible ANIM_TARGET - launchtask AnimTask_RotateMonSpriteToSide 0x2 0x4 0x50 0xfc00 ANIM_TARGET 0x0 @ spin up target + createvisualtask AnimTask_RotateMonSpriteToSide, 0x2, 0x50, 0xfc00, ANIM_TARGET, 0x0 @ spin up target call SearingSunrazeSmashRingsInward - launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x30 @ target back to origin (slowly) + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x30 @ target back to origin (slowly) call SearingSunrazeSmashRingsInward delay 0xD invisible ANIM_TARGET - launchtemplate gSearingSunrazeSmashBlueRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + createsprite gSearingSunrazeSmashBlueRingInwardsSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, ANIM_TARGET, 0x0 delay 0x8 - launchtemplate gSearingSunrazeSmashWhiteRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + createsprite gSearingSunrazeSmashWhiteRingInwardsSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, ANIM_TARGET, 0x0 delay 0x6 - launchtemplate gHorizontalLungeSpriteTemplate 0x2 0x2 0x4 0x4 @lunge forward + createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 0x4, 0x4 @lunge forward playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER delay 0x2 invisible ANIM_ATTACKER - launchtemplate gGrowingSuperpowerTemplate 0x83 0x1 0x0 @superpower - launchtemplate gSearingSunrazeSmashBlueRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + createsprite gGrowingSuperpowerTemplate, ANIM_TARGET, 3, 0x0 @superpower + createsprite gSearingSunrazeSmashBlueRingInwardsSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, ANIM_TARGET, 0x0 delay 0x8 playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_ATTACKER fadetobg BG_COSMIC waitbgfadeout - launchtask AnimTask_StartSlidingBg 0x5 0x4 0xf700 0x0 0x1 0xffff - launchtask AnimTask_RotateMonSpriteToSide 0x2 0x4 0x1 0x0 ANIM_TARGET 0x1 @ fix tgt rotation + createvisualtask AnimTask_StartSlidingBg, 0x5, 0xf700, 0x0, 0x1, 0xffff + createvisualtask AnimTask_RotateMonSpriteToSide, 0x2, 0x1, 0x0, ANIM_TARGET, 0x1 @ fix tgt rotation invisible ANIM_TARGET waitbgfadein visible ANIM_ATTACKER @@ -30116,7 +30114,7 @@ Move_SEARING_SUNRAZE_SMASH:: loadspritegfx ANIM_TAG_VERTICAL_HEX @red loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge loadspritegfx ANIM_TAG_SMALL_EMBER @fire - launchtemplate gSearingSunrazeSmashInfernoOrbSpriteTemplate 0x2 0x1 ANIM_ATTACKER + createsprite gSearingSunrazeSmashInfernoOrbSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER loopsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER, 0x13, 0x8 call SearingSunrazeSmashCharge call SearingSunrazeSmashCharge @@ -30127,8 +30125,8 @@ Move_SEARING_SUNRAZE_SMASH:: unloadspritegfx ANIM_TAG_THIN_RING @ring loadspritegfx ANIM_TAG_ROUND_SHADOW @fly playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_TARGET - launchtemplate gSearingSunrazeSmashRedFlySpriteTemplate 0x2 0x4 0x0 0x0 0xd 0x150 - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG+ANIM_PAL_ATK 0x3 0x0 0xF 0x0 + createsprite gSearingSunrazeSmashRedFlySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0xd, 0x150 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_ATTACKER), 0x3, 0x0, 0xF, 0x0 waitforvisualfinish playsewithpan SE_ORB, SOUND_PAN_ATTACKER unloadspritegfx ANIM_TAG_ROUND_SHADOW @fly @@ -30150,43 +30148,43 @@ Move_SEARING_SUNRAZE_SMASH:: stopsound playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET loadspritegfx ANIM_TAG_CUT @cut - launchtemplate gSunsteelStrikeSuperpowerTemplate 0x82 0x1 0x14 + createsprite gSunsteelStrikeSuperpowerTemplate, ANIM_TARGET, 2, 0x14 SearingSunrazeSmashImpact: delay 0x8 delay 0x1 unloadspritegfx ANIM_TAG_GOLD_RING @beam - launchtask AnimTask_HorizontalShake 0x5 0x3 ANIM_TARGET 0x4 0x3c + createvisualtask AnimTask_HorizontalShake, 0x5, ANIM_TARGET, 0x4, 0x3c playsewithpan SE_M_CUT, SOUND_PAN_TARGET - launchtemplate gSearingSunrazeSmashWhiteCutSpriteTemplate 0x82, 0x3, 0x20 0xffe0 0x0 + createsprite gSearingSunrazeSmashWhiteCutSpriteTemplate, ANIM_TARGET, 2, 0x20, 0xffe0, 0x0 delay 0x2 playsewithpan SE_M_CUT, SOUND_PAN_TARGET - launchtemplate gSearingSunrazeSmashWhiteCutSpriteTemplate 0x82, 0x3, 0x20 0xffe0 0x1 + createsprite gSearingSunrazeSmashWhiteCutSpriteTemplate, ANIM_TARGET, 2, 0x20, 0xffe0, 0x1 delay 0x2 playsewithpan SE_M_CUT, SOUND_PAN_TARGET - launchtemplate gSearingSunrazeSmashWhiteCutSpriteTemplate 0x82, 0x3, 0x1c 0xffe0 0x0 + createsprite gSearingSunrazeSmashWhiteCutSpriteTemplate, ANIM_TARGET, 2, 0x1c, 0xffe0, 0x0 delay 0x2 playsewithpan SE_M_CUT, SOUND_PAN_TARGET - launchtemplate gSearingSunrazeSmashWhiteCutSpriteTemplate 0x82, 0x3, 0x1c 0xffe0 0x1 + createsprite gSearingSunrazeSmashWhiteCutSpriteTemplate, ANIM_TARGET, 2, 0x1c, 0xffe0, 0x1 delay 0x2 playsewithpan SE_M_CUT, SOUND_PAN_TARGET - launchtemplate gSearingSunrazeSmashWhiteCutSpriteTemplate 0x82, 0x3, 0x2c 0xffe0 0x0 + createsprite gSearingSunrazeSmashWhiteCutSpriteTemplate, ANIM_TARGET, 2, 0x2c, 0xffe0, 0x0 delay 0x2 playsewithpan SE_M_CUT, SOUND_PAN_TARGET - launchtemplate gSearingSunrazeSmashWhiteCutSpriteTemplate 0x82, 0x3, 0x2c 0xffe0 0x1 + createsprite gSearingSunrazeSmashWhiteCutSpriteTemplate, ANIM_TARGET, 2, 0x2c, 0xffe0, 0x1 delay 0x2 loadspritegfx ANIM_TAG_CROSS_IMPACT @x delay 0x0 unloadspritegfx ANIM_TAG_METEOR @superpower unloadspritegfx ANIM_TAG_DRAGON_ASCENT @dragon ascent 1 unloadspritegfx ANIM_TAG_DRAGON_ASCENT_FOE @dragon ascent 2 - launchtemplate gSearingSunrazeSmashCrossImpactSpriteTemplate 0x82, 0x4, 0x0 0x0 0x1 0x24 + createsprite gSearingSunrazeSmashCrossImpactSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x1, 0x24 playsewithpan SE_M_LEER, SOUND_PAN_TARGET visible ANIM_ATTACKER - launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG | ANIM_PAL_ATK, 0x3, 0xF, 0x0, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_ATTACKER), 0x3, 0xF, 0x0, 0x0 visible ANIM_ATTACKER playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x0 0x10 0x0000 - launchtemplate gSearingSunrazeSmashShockwaveSpriteTemplate 0x82 0x0 @ charge out and in + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x2, 0x0, 0x10, 0x0000 + createsprite gSearingSunrazeSmashShockwaveSpriteTemplate, ANIM_TARGET, 2 @ charge out and in delay 0x1c invisible ANIM_TARGET unloadspritegfx ANIM_TAG_CUT @cut @@ -30195,7 +30193,7 @@ SearingSunrazeSmashImpact: call SearingSunrazeSmashInferno call SearingSunrazeSmashInferno call SearingSunrazeSmashInferno - launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_ALL_BATTLERS | ANIM_PAL_BG, 0x4, 0x0, 0x10, 0x001b @full red + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS), 0x4, 0x0, 0x10, 0x001b @full red call SearingSunrazeSmashInferno call SearingSunrazeSmashInferno call SearingSunrazeSmashInferno @@ -30204,84 +30202,84 @@ SearingSunrazeSmashImpact: call ResetFromRedScreen end SearingSunrazeSmashFlare: - launchtemplate gGrantingStarsSpriteTemplate 0x2 0x6 0xfff1 0x0 0x0 0x0 0x20 0x3c - launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2 + createsprite gGrantingStarsSpriteTemplate, ANIM_ATTACKER, 2, 0xfff1, 0x0, 0x0, 0x0, 0x20, 0x3c + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x1a, 0x2 delay 0x4 - launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1 + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xe, 0x1c, 0x1 delay 0x4 - launchtemplate gGrantingStarsSpriteTemplate 0x2 0x6 0xc 0xfffb 0x0 0x0 0x20 0x3c - launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2 + createsprite gGrantingStarsSpriteTemplate, ANIM_ATTACKER, 2, 0xc, 0xfffb, 0x0, 0x0, 0x20, 0x3c + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfffb, 0xa, 0x2 delay 0x4 - launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3 + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1c, 0x1a, 0x3 delay 0x4 - launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1 + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff4, 0x0, 0x1 return SearingSunrazeSmashRingsInward: - launchtemplate gSearingSunrazeSmashBlueRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + createsprite gSearingSunrazeSmashBlueRingInwardsSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, ANIM_TARGET, 0x0 delay 0x8 - launchtemplate gSearingSunrazeSmashWhiteRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + createsprite gSearingSunrazeSmashWhiteRingInwardsSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, ANIM_TARGET, 0x0 delay 0x8 - launchtemplate gSearingSunrazeSmashBlueRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + createsprite gSearingSunrazeSmashBlueRingInwardsSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, ANIM_TARGET, 0x0 delay 0x8 return SearingSunrazeSmashInferno: playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_ATTACKER - launchtemplate gFireBlastCrossSpriteTemplate 0x82 0x5 0x0 0x0 0xa 0x0 0xfffe - launchtemplate gFireBlastCrossSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0xfffe 0x0 - launchtemplate gFireBlastCrossSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0x2 0x0 - launchtemplate gFireBlastCrossSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0xfffe 0x2 - launchtemplate gFireBlastCrossSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0x2 0x2 + createsprite gFireBlastCrossSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xa, 0x0, 0xfffe + createsprite gFireBlastCrossSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xd, 0xfffe, 0x0 + createsprite gFireBlastCrossSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xd, 0x2, 0x0 + createsprite gFireBlastCrossSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xf, 0xfffe, 0x2 + createsprite gFireBlastCrossSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xf, 0x2, 0x2 delay 0x3 - launchtemplate gFireBlastCrossSpriteTemplate 0x82 0x5 0x0 0x0 0xa 0x0 0xfffe - launchtemplate gFireBlastCrossSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0xfffe 0x0 - launchtemplate gFireBlastCrossSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0x2 0x0 - launchtemplate gFireBlastCrossSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0xfffe 0x2 - launchtemplate gFireBlastCrossSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0x2 0x2 + createsprite gFireBlastCrossSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xa, 0x0, 0xfffe + createsprite gFireBlastCrossSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xd, 0xfffe, 0x0 + createsprite gFireBlastCrossSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xd, 0x2, 0x0 + createsprite gFireBlastCrossSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xf, 0xfffe, 0x2 + createsprite gFireBlastCrossSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xf, 0x2, 0x2 delay 0x3 - launchtemplate gFireBlastCrossSpriteTemplate 0x82 0x5 0x0 0x0 0xa 0x0 0xfffe - launchtemplate gFireBlastCrossSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0xfffe 0x0 - launchtemplate gFireBlastCrossSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0x2 0x0 - launchtemplate gFireBlastCrossSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0xfffe 0x2 - launchtemplate gFireBlastCrossSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0x2 0x2 + createsprite gFireBlastCrossSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xa, 0x0, 0xfffe + createsprite gFireBlastCrossSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xd, 0xfffe, 0x0 + createsprite gFireBlastCrossSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xd, 0x2, 0x0 + createsprite gFireBlastCrossSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xf, 0xfffe, 0x2 + createsprite gFireBlastCrossSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xf, 0x2, 0x2 delay 0x3 return SearingSunrazeSmashCharge: - launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x2c 0x510 0x1e 0xd 0x32 ANIM_ATTACKER + createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x2c, 0x510, 0x1e, 0xd, 0x32, ANIM_ATTACKER delay 0x1 - launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x2f 0x490 0x19 0xb 0xffd6 ANIM_ATTACKER + createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x2f, 0x490, 0x19, 0xb, 0xffd6, ANIM_ATTACKER delay 0x1 - launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x30 0x4e0 0x14 0x10 0xffd2 ANIM_ATTACKER + createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x30, 0x4e0, 0x14, 0x10, 0xffd2, ANIM_ATTACKER delay 0x1 - launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x2c 0x500 0x19 0x10 0x2e ANIM_ATTACKER + createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x2c, 0x500, 0x19, 0x10, 0x2e, ANIM_ATTACKER delay 0x1 - launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x31 0x540 0x14 0x8 0x2a ANIM_ATTACKER + createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x31, 0x540, 0x14, 0x8, 0x2a, ANIM_ATTACKER delay 0x1 - launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x31 0x4d0 0x1e 0xf 0xffce ANIM_ATTACKER + createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x31, 0x4d0, 0x1e, 0xf, 0xffce, ANIM_ATTACKER delay 0x1 - launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x2f 0x490 0x19 0xb 0xffd6 ANIM_ATTACKER + createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x2f, 0x490, 0x19, 0xb, 0xffd6, ANIM_ATTACKER delay 0x1 - launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x2c 0x510 0x1e 0xd 0x32 ANIM_ATTACKER + createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x2c, 0x510, 0x1e, 0xd, 0x32, ANIM_ATTACKER delay 0x1 - launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x2c 0x500 0x19 0x10 0x2e ANIM_ATTACKER + createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x2c, 0x500, 0x19, 0x10, 0x2e, ANIM_ATTACKER delay 0x1 - launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x30 0x4e0 0x14 0x10 0xffd2 ANIM_ATTACKER + createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x30, 0x4e0, 0x14, 0x10, 0xffd2, ANIM_ATTACKER delay 0x1 - launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x31 0x4d0 0x1e 0xf 0xffce ANIM_ATTACKER + createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x31, 0x4d0, 0x1e, 0xf, 0xffce, ANIM_ATTACKER delay 0x1 - launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x31 0x540 0x14 0x8 0x2a ANIM_ATTACKER + createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x31, 0x540, 0x14, 0x8, 0x2a, ANIM_ATTACKER delay 0x1 return ResetFromRedScreen: - launchtask AnimTask_AllBanksInvisible 0xA 0x0 + createvisualtask AnimTask_AllBanksInvisible, 0xA waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ALL_BATTLERS 0x2 0x0 0x0 0x1B @Everything from red + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BATTLERS, 0x2, 0x0, 0x0, 0x1B @Everything from red restorebg waitbgfadeout setarg 0x7 0xffff - launchtask AnimTask_AllBanksVisible 0xA 0x0 + createvisualtask AnimTask_AllBanksVisible, 0xA waitbgfadein - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x0 0x0 0x0 0x33ED + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x0, 0x0, 0x0, 0x33ED waitforvisualfinish return @@ -30293,14 +30291,14 @@ Move_MENACING_MOONRAZE_MAELSTROM:: loadspritegfx ANIM_TAG_SHADOW_BALL @shadow ball loadspritegfx ANIM_TAG_HANDS_AND_FEET @black invisible ANIM_TARGET - launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x0 0x0 0xe 0x40c0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x0, 0x0, 0xe, 0x40c0 playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call MenacingMoonrazeMaelstromFlare delay 0x8 - launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xc 0x0000 - launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1 + createvisualtask AnimTask_BlendColorCycle, 0x2, 0x2, 0x2, 0x2, 0x0, 0xc, 0x0000 + createvisualtask AnimTask_ShakeMon2, 0x2, 0x0, 0x1, 0x0, 0x20, 0x1 call MenacingMoonrazeMaelstromFlare playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER delay 0x8 @@ -30310,41 +30308,41 @@ Move_MENACING_MOONRAZE_MAELSTROM:: loadspritegfx ANIM_TAG_THIN_RING @ring loadspritegfx ANIM_TAG_AIR_WAVE_2 @white/grey playsewithpan SE_M_NIGHTMARE, SOUND_PAN_ATTACKER - launchtemplate gMoonrazeMaelstromWormholeSpriteTemplate 0x2 0x4 0x0 0x0 ANIM_TARGET 0x0 + createsprite gMoonrazeMaelstromWormholeSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, ANIM_TARGET, 0x0 delay 0x10 - launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0x35 0xffed 0x1 0x2 @ target down and left (instantaneously (last arg)) + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x35, 0xffed, 0x1, 0x2 @ target down and left (instantaneously (last arg)) delay 0x2 loadspritegfx ANIM_TAG_METEOR @superpower visible ANIM_TARGET - launchtask AnimTask_RotateMonSpriteToSide 0x2 0x4 0x50 0xfc00 ANIM_TARGET 0x0 @ spin up target + createvisualtask AnimTask_RotateMonSpriteToSide, 0x2, 0x50, 0xfc00, ANIM_TARGET, 0x0 @ spin up target call MenacingMoonrazeMaelstromRingsInward - launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x30 @ target back to origin (slowly) + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x30 @ target back to origin (slowly) call MenacingMoonrazeMaelstromRingsInward delay 0xD invisible ANIM_TARGET - launchtemplate gMoonrazeMaelstromBlueRingSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + createsprite gMoonrazeMaelstromBlueRingSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, ANIM_TARGET, 0x0 delay 0x8 - launchtemplate gMoonrazeMaelstromWhiteRingSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + createsprite gMoonrazeMaelstromWhiteRingSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, ANIM_TARGET, 0x0 delay 0x6 - launchtemplate gHorizontalLungeSpriteTemplate 0x2 0x2 0x4 0x4 @lunge forward + createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 0x4, 0x4 @lunge forward playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER delay 0x2 invisible ANIM_ATTACKER - launchtemplate gMoonrazeMaelstromSuperpowerSpriteTemplate 0x83 0x1 0x0 @superpower - launchtemplate gMoonrazeMaelstromBlueRingSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + createsprite gMoonrazeMaelstromSuperpowerSpriteTemplate, ANIM_TARGET, 3, 0x0 @superpower + createsprite gMoonrazeMaelstromBlueRingSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, ANIM_TARGET, 0x0 delay 0x8 playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_ATTACKER fadetobg BG_COSMIC waitbgfadeout - launchtask AnimTask_IsTargetPlayerSide 0x2 0x0 + createvisualtask AnimTask_IsTargetPlayerSide, 0x2 jumpargeq 0x7 ANIM_TARGET MenacingMoonrazeMaelstromOnPlayer MenacingMoonrazeMaelstromOnOpponent: - launchtask AnimTask_StartSlidingBg 0x5 0x4 0xfd00 0x200 0x1 0xffff + createvisualtask AnimTask_StartSlidingBg, 0x5, 0xfd00, 0x200, 0x1, 0xffff goto MenacingMoonrazeMaelstromFinish MenacingMoonrazeMaelstromOnPlayer: - launchtask AnimTask_StartSlidingBg 0x5 0x4 0x200 0xfd00 0x1 0xffff + createvisualtask AnimTask_StartSlidingBg, 0x5, 0x200, 0xfd00, 0x1, 0xffff MenacingMoonrazeMaelstromFinish: - launchtask AnimTask_RotateMonSpriteToSide 0x2 0x4 0x1 0x0 ANIM_TARGET 0x1 @ fix tgt rotation + createvisualtask AnimTask_RotateMonSpriteToSide, 0x2, 0x1, 0x0, ANIM_TARGET, 0x1 @ fix tgt rotation invisible ANIM_TARGET waitbgfadein visible ANIM_ATTACKER @@ -30359,18 +30357,18 @@ MenacingMoonrazeMaelstromFinish: unloadspritegfx ANIM_TAG_METEOR @superpower playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER call MenacingMoonrazeMaelstromChargeUp - launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xc 0x0000 - launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1 + createvisualtask AnimTask_BlendColorCycle, 0x2, 0x2, 0x2, 0x2, 0x0, 0xc, 0x0000 + createvisualtask AnimTask_ShakeMon2, 0x2, 0x0, 0x1, 0x0, 0x20, 0x1 call MenacingMoonrazeMaelstromChargeUp call MenacingMoonrazeMaelstromChargeUp - launchsoundtask SoundTask_LoopSEAdjustPanning 0x7 0xf0 0xffc0 SOUND_PAN_TARGET 0x1 0xf 0x0 0x5 + createsoundtask SoundTask_LoopSEAdjustPanning, 0xf0, 0xffc0, SOUND_PAN_TARGET, 0x1, 0xf, 0x0, 0x5 call MenacingMoonrazeMaelstromBeam call MenacingMoonrazeMaelstromBeam call MenacingMoonrazeMaelstromBeam call MenacingMoonrazeMaelstromBeam call MenacingMoonrazeMaelstromBeam - launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x4 0x0 0x3c 0x1 - launchtask AnimTask_BlendBattleAnimPal 0x2 0x5 ANIM_PAL_DEF 0x4 0x0 0xc 0x0000 + createvisualtask AnimTask_ShakeMon2, 0x2, 0x1, 0x4, 0x0, 0x3c, 0x1 + createvisualtask AnimTask_BlendBattleAnimPal, 0x2, F_PAL_TARGET, 0x4, 0x0, 0xc, 0x0000 call MenacingMoonrazeMaelstromBeam call MenacingMoonrazeMaelstromBeam call MenacingMoonrazeMaelstromBeam @@ -30395,84 +30393,84 @@ MenacingMoonrazeMaelstromFinish: call MenacingMoonrazeMaelstromBeam call MenacingMoonrazeMaelstromBeam playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER - launchtemplate gMoonrazeMaelstromShockwaveSpriteTemplate 0x82 0x0 + createsprite gMoonrazeMaelstromShockwaveSpriteTemplate, ANIM_TARGET, 2 call MenacingMoonrazeMaelstromBeam waitforvisualfinish unloadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @shock wave unloadspritegfx ANIM_TAG_ORBS @hyper beam unloadspritegfx ANIM_TAG_HANDS_AND_FEET @black loadspritegfx ANIM_TAG_EXPLOSION_2 @explosion - launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x4 0x0 0x4c 0x1 + createvisualtask AnimTask_ShakeMon2, 0x2, 0x1, 0x4, 0x0, 0x4c, 0x1 call MenacingMoonrazeMaelstromExplosion call MenacingMoonrazeMaelstromExplosion - launchtask AnimTask_BlendBattleAnimPal 0x2 0x5 ANIM_PAL_ALL 0x2 0x0 0x10 0x7fff + createvisualtask AnimTask_BlendBattleAnimPal, 0x2, (F_PAL_BG | F_PAL_BATTLERS), 0x2, 0x0, 0x10, 0x7fff call MenacingMoonrazeMaelstromExplosion waitforvisualfinish call ResetFromWhiteScreen end MenacingMoonrazeMaelstromExplosion: playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gMoonrazeMaelstromExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1 + createsprite gMoonrazeMaelstromExplosionSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, ANIM_TARGET, 0x1 delay 0x6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gMoonrazeMaelstromExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1 + createsprite gMoonrazeMaelstromExplosionSpriteTemplate, ANIM_TARGET, 3, 0x18, 0xffe8, ANIM_TARGET, 0x1 delay 0x6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gMoonrazeMaelstromExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + createsprite gMoonrazeMaelstromExplosionSpriteTemplate, ANIM_TARGET, 3, 0xfff0, 0x10, ANIM_TARGET, 0x1 delay 0x6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gMoonrazeMaelstromExplosionSpriteTemplate 0x83 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 + createsprite gMoonrazeMaelstromExplosionSpriteTemplate, ANIM_TARGET, 3, 0xffe8, 0xfff4, ANIM_TARGET, 0x1 delay 0x6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gMoonrazeMaelstromExplosionSpriteTemplate 0x83 0x4 0x10 0x10 ANIM_TARGET 0x1 + createsprite gMoonrazeMaelstromExplosionSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x10, ANIM_TARGET, 0x1 delay 0x6 return MenacingMoonrazeMaelstromFlare: - launchtemplate gMoonrazeMaelstromBlackSparklesSpriteTemplate 0x2 0x6 0xfff1 0x0 0x0 0x0 0x20 0x3c - launchtemplate gMoonrazeMaelstromBlueBuffSpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2 + createsprite gMoonrazeMaelstromBlackSparklesSpriteTemplate, ANIM_ATTACKER, 2, 0xfff1, 0x0, 0x0, 0x0, 0x20, 0x3c + createsprite gMoonrazeMaelstromBlueBuffSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x1a, 0x2 delay 0x4 - launchtemplate gMoonrazeMaelstromBlueBuffSpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1 + createsprite gMoonrazeMaelstromBlueBuffSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xe, 0x1c, 0x1 delay 0x4 - launchtemplate gMoonrazeMaelstromBlackSparklesSpriteTemplate 0x2 0x6 0xc 0xfffb 0x0 0x0 0x20 0x3c - launchtemplate gMoonrazeMaelstromBlackBuffSpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2 + createsprite gMoonrazeMaelstromBlackSparklesSpriteTemplate, ANIM_ATTACKER, 2, 0xc, 0xfffb, 0x0, 0x0, 0x20, 0x3c + createsprite gMoonrazeMaelstromBlackBuffSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfffb, 0xa, 0x2 delay 0x4 - launchtemplate gMoonrazeMaelstromBlackBuffSpriteTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3 + createsprite gMoonrazeMaelstromBlackBuffSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1c, 0x1a, 0x3 delay 0x4 - launchtemplate gMoonrazeMaelstromBlackBuffSpriteTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1 + createsprite gMoonrazeMaelstromBlackBuffSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff4, 0x0, 0x1 return MenacingMoonrazeMaelstromRingsInward: - launchtemplate gMoonrazeMaelstromBlueRingSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + createsprite gMoonrazeMaelstromBlueRingSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, ANIM_TARGET, 0x0 delay 0x8 - launchtemplate gMoonrazeMaelstromWhiteRingSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + createsprite gMoonrazeMaelstromWhiteRingSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, ANIM_TARGET, 0x0 delay 0x8 - launchtemplate gMoonrazeMaelstromBlueRingSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + createsprite gMoonrazeMaelstromBlueRingSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, ANIM_TARGET, 0x0 delay 0x8 return MenacingMoonrazeMaelstromChargeUp: - launchtemplate gMoonrazeMaelstromPurpleBuffSpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2 - launchtemplate gMoonrazeMaelstromBlackOrbsSpriteTemplate 0x2 0x7 0x0 0x1c 0x210 0x1e 0xd 0x32 ANIM_ATTACKER + createsprite gMoonrazeMaelstromPurpleBuffSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x1a, 0x2 + createsprite gMoonrazeMaelstromBlackOrbsSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1c, 0x210, 0x1e, 0xd, 0x32, ANIM_ATTACKER delay 0x2 - launchtemplate gMoonrazeMaelstromBlackOrbsSpriteTemplate 0x2 0x7 0x0 0x20 0x1e0 0x14 0x10 0xffd2 ANIM_ATTACKER + createsprite gMoonrazeMaelstromBlackOrbsSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x20, 0x1e0, 0x14, 0x10, 0xffd2, ANIM_ATTACKER delay 0x2 - launchtemplate gMoonrazeMaelstromPurpleBuffSpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1 - launchtemplate gMoonrazeMaelstromBlackOrbsSpriteTemplate 0x2 0x7 0x0 0x21 0x240 0x14 0x8 0x2a ANIM_ATTACKER + createsprite gMoonrazeMaelstromPurpleBuffSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xe, 0x1c, 0x1 + createsprite gMoonrazeMaelstromBlackOrbsSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x21, 0x240, 0x14, 0x8, 0x2a, ANIM_ATTACKER delay 0x2 - launchtemplate gMoonrazeMaelstromBlackOrbsSpriteTemplate 0x2 0x7 0x0 0x1f 0x190 0x19 0xb 0xffd6 ANIM_ATTACKER + createsprite gMoonrazeMaelstromBlackOrbsSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1f, 0x190, 0x19, 0xb, 0xffd6, ANIM_ATTACKER delay 0x2 - launchtemplate gMoonrazeMaelstromBlackOrbsSpriteTemplate 0x2 0x7 0x0 0x1c 0x200 0x19 0x10 0x2e ANIM_ATTACKER + createsprite gMoonrazeMaelstromBlackOrbsSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1c, 0x200, 0x19, 0x10, 0x2e, ANIM_ATTACKER delay 0x2 - launchtemplate gMoonrazeMaelstromBlackOrbsSpriteTemplate 0x2 0x7 0x0 0x21 0x1d0 0x1e 0xf 0xffce ANIM_ATTACKER + createsprite gMoonrazeMaelstromBlackOrbsSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x21, 0x1d0, 0x1e, 0xf, 0xffce, ANIM_ATTACKER delay 0x2 - launchtemplate gMoonrazeMaelstromPurpleBuffSpriteTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3 - launchtemplate gMoonrazeMaelstromBlackOrbsSpriteTemplate 0x2 0x7 0x0 0x21 0x240 0x14 0x8 0x2a ANIM_ATTACKER + createsprite gMoonrazeMaelstromPurpleBuffSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1c, 0x1a, 0x3 + createsprite gMoonrazeMaelstromBlackOrbsSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x21, 0x240, 0x14, 0x8, 0x2a, ANIM_ATTACKER delay 0x2 - launchtemplate gMoonrazeMaelstromBlackOrbsSpriteTemplate 0x2 0x7 0x0 0x1f 0x190 0x19 0xb 0xffd6 ANIM_ATTACKER + createsprite gMoonrazeMaelstromBlackOrbsSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1f, 0x190, 0x19, 0xb, 0xffd6, ANIM_ATTACKER delay 0x2 - launchtemplate gMoonrazeMaelstromPurpleBuffSpriteTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1 + createsprite gMoonrazeMaelstromPurpleBuffSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff4, 0x0, 0x1 return MenacingMoonrazeMaelstromBeam: - launchtemplate gMoonrazeMaelstromBeamSpriteTemplate 0x82 0x0 - launchtemplate gMoonrazeMaelstromBeamSpriteTemplate 0x82 0x0 + createsprite gMoonrazeMaelstromBeamSpriteTemplate, ANIM_TARGET, 2 + createsprite gMoonrazeMaelstromBeamSpriteTemplate, ANIM_TARGET, 2 delay 0x1 return @@ -30488,21 +30486,21 @@ Move_LIGHT_THAT_BURNS_THE_SKY:: playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call EndureEffect delay 0x8 - launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xb 0x5bff - launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1 + createvisualtask AnimTask_BlendColorCycle, 0x2, 0x2, 0x2, 0x2, 0x0, 0xb, 0x5bff + createvisualtask AnimTask_ShakeMon2, 0x2, 0x0, 0x1, 0x0, 0x20, 0x1 call EndureEffect delay 0x8 call EndureEffect delay 0x8 unloadspritegfx ANIM_TAG_FOCUS_ENERGY monbg ANIM_ATTACKER - setblends 0x80c - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ALL-ANIM_PAL_ATK 0x2 0x0 0xF 0x0000 + setalpha 12, 8 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_ADJACENT), 0x2, 0x0, 0xF, 0x0000 waitforvisualfinish - launchtask AnimTask_ElectricChargingParticles 0x2 0x4 0x0 0x3c 0x2 0xc @ charge particles to attacker + createvisualtask AnimTask_ElectricChargingParticles, 0x2, 0x0, 0x3c, 0x2, 0xc @ charge particles to attacker delay 0x1e loopsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER, 0xe, 0xa - launchtemplate gSuperpowerOrbSpriteTemplate, 0x83, 0x1, 0x0 + createsprite gSuperpowerOrbSpriteTemplate, ANIM_TARGET, 3, 0x0 call LightThatBurnsTheSkyGreenSparks call LightThatBurnsTheSkyGreenSparks call LightThatBurnsTheSkyGreenSparks @@ -30513,26 +30511,26 @@ Move_LIGHT_THAT_BURNS_THE_SKY:: call LightThatBurnsTheSkyGreenSparks call LightThatBurnsTheSkyGreenSparks delay 0xe - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x0 0x4 0x0000 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x2, 0x0, 0x4, 0x0000 clearmonbg ANIM_ATTACKER blendoff playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffe0 0xfff0 0x25 0x2c 0x20 0x8 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffe0 0xfff0 0x25 0x2c 0x60 0x8 0x1 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffe0 0xfff0 0x25 0x2c 0xa0 0x8 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffe0 0xfff0 0x25 0x2c 0xe0 0x8 0x2 0x3 - delay 0x1 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffd0 0xffe4 0x25 0x2c 0x20 0x8 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffd0 0xffe4 0x25 0x2c 0x60 0x8 0x1 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffd0 0xffe4 0x25 0x2c 0xa0 0x8 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffd0 0xffe4 0x25 0x2c 0xe0 0x8 0x2 0x3 - delay 0x1 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffc0 0xffd8 0x25 0x2c 0x20 0x8 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffc0 0xffd8 0x25 0x2c 0x60 0x8 0x1 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffc0 0xffd8 0x25 0x2c 0xa0 0x8 0x0 0x3 - launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffc0 0xffd8 0x25 0x2c 0xe0 0x8 0x2 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0xffe0, 0xfff0, 0x25, 0x2c, 0x20, 0x8, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0xffe0, 0xfff0, 0x25, 0x2c, 0x60, 0x8, 0x1, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0xffe0, 0xfff0, 0x25, 0x2c, 0xa0, 0x8, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0xffe0, 0xfff0, 0x25, 0x2c, 0xe0, 0x8, 0x2, 0x3 + delay 0x1 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0xffd0, 0xffe4, 0x25, 0x2c, 0x20, 0x8, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0xffd0, 0xffe4, 0x25, 0x2c, 0x60, 0x8, 0x1, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0xffd0, 0xffe4, 0x25, 0x2c, 0xa0, 0x8, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0xffd0, 0xffe4, 0x25, 0x2c, 0xe0, 0x8, 0x2, 0x3 + delay 0x1 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0xffc0, 0xffd8, 0x25, 0x2c, 0x20, 0x8, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0xffc0, 0xffd8, 0x25, 0x2c, 0x60, 0x8, 0x1, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0xffc0, 0xffd8, 0x25, 0x2c, 0xa0, 0x8, 0x0, 0x3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0xffc0, 0xffd8, 0x25, 0x2c, 0xe0, 0x8, 0x2, 0x3 delay 0x6 - launchtask AnimTask_HorizontalShake 0x5 0x3 ANIM_TARGET 0x3 0x3c + createvisualtask AnimTask_HorizontalShake, 0x5, ANIM_TARGET, 0x3, 0x3c unloadspritegfx ANIM_TAG_LEAF @green unloadspritegfx ANIM_TAG_ELECTRIC_ORBS @charge loadspritegfx ANIM_TAG_FIRE_PLUME @blast burn @@ -30540,97 +30538,97 @@ Move_LIGHT_THAT_BURNS_THE_SKY:: loadspritegfx ANIM_TAG_STRAIGHT_BEAM panse SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0 monbg ANIM_TARGET - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x6 0x0 0x10 0x43FF @;Light yellow + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x6, 0x0, 0x10, 0x43FF @;Light yellow call PhotonGeyserBeam call LightThatBurnsTheSkyGeyser call LightThatBurnsTheSkyBlast_1 call LightThatBurnsTheSkyGeyser call LightThatBurnsTheSkyBlast_2 call LightThatBurnsTheSkyGeyser - launchtask AnimTask_BlendBattleAnimPal, 0x2, 0x5, ANIM_PAL_ALL - ANIM_PAL_DEF, 0x4, 0x0, 0x10, 0x43FF + createvisualtask AnimTask_BlendBattleAnimPal, 0x2, (F_PAL_BG | F_PAL_ALL_BUT_DEF), 0x4, 0x0, 0x10, 0x43FF call LightThatBurnsTheSkyBlast_3 clearmonbg ANIM_TARGET waitforvisualfinish delay 0x10 - launchtask AnimTask_BlendBattleAnimPal 0x2 0x5 ANIM_PAL_ALL 0x0 0x10 0x0 0x43FF + createvisualtask AnimTask_BlendBattleAnimPal, 0x2, (F_PAL_BG | F_PAL_BATTLERS), 0x0, 0x10, 0x0, 0x43FF restorebg waitbgfadeout end LightThatBurnsTheSkyBlast_1: - launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x2 0x6 0xffe0 0x0 0x18 0x0 0x0 0x0 - launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x2 0x6 0xffec 0xfff6 0x18 0x0 0x0 0x0 - launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x42 0x6 0x0 0xfff0 0x18 0x0 0x0 0x0 - launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x42 0x6 0x14 0xfff6 0x18 0x0 0x0 0x0 - launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x42 0x6 0x20 0x0 0x18 0x0 0x0 0x0 - launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x42 0x6 0x14 0xa 0x18 0x0 0x0 0x0 - launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x2 0x6 0x0 0x10 0x18 0x0 0x0 0x0 - launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x2 0x6 0xffec 0xa 0x18 0x0 0x0 0x0 + createsprite gLightThatBurnsTheSkyBlastBurnSpriteTemplate, ANIM_ATTACKER, 2, 0xffe0, 0x0, 0x18, 0x0, 0x0, 0x0 + createsprite gLightThatBurnsTheSkyBlastBurnSpriteTemplate, ANIM_ATTACKER, 2, 0xffec, 0xfff6, 0x18, 0x0, 0x0, 0x0 + createsprite gLightThatBurnsTheSkyBlastBurnSpriteTemplate, ANIM_ATTACKER, 66, 0x0, 0xfff0, 0x18, 0x0, 0x0, 0x0 + createsprite gLightThatBurnsTheSkyBlastBurnSpriteTemplate, ANIM_ATTACKER, 66, 0x14, 0xfff6, 0x18, 0x0, 0x0, 0x0 + createsprite gLightThatBurnsTheSkyBlastBurnSpriteTemplate, ANIM_ATTACKER, 66, 0x20, 0x0, 0x18, 0x0, 0x0, 0x0 + createsprite gLightThatBurnsTheSkyBlastBurnSpriteTemplate, ANIM_ATTACKER, 66, 0x14, 0xa, 0x18, 0x0, 0x0, 0x0 + createsprite gLightThatBurnsTheSkyBlastBurnSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x10, 0x18, 0x0, 0x0, 0x0 + createsprite gLightThatBurnsTheSkyBlastBurnSpriteTemplate, ANIM_ATTACKER, 2, 0xffec, 0xa, 0x18, 0x0, 0x0, 0x0 return LightThatBurnsTheSkyBlast_2: - launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x2 0x6 0xffc0 0x0 0x18 0x0 0x0 0x0 - launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x6 0x6 0xffd8 0xffec 0x18 0x0 0x0 0x0 - launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x46 0x6 0x0 0xffe0 0x18 0x0 0x0 0x0 - launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x46 0x6 0x28 0xffec 0x18 0x0 0x0 0x0 - launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x42 0x6 0x40 0x0 0x18 0x0 0x0 0x0 - launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x42 0x6 0x28 0x14 0x18 0x0 0x0 0x0 - launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x2 0x6 0x0 0x20 0x18 0x0 0x0 0x0 - launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x2 0x6 0xffd8 0x14 0x18 0x0 0x0 0x0 + createsprite gLightThatBurnsTheSkyBlastBurnSpriteTemplate, ANIM_ATTACKER, 2, 0xffc0, 0x0, 0x18, 0x0, 0x0, 0x0 + createsprite gLightThatBurnsTheSkyBlastBurnSpriteTemplate, ANIM_ATTACKER, 6, 0xffd8, 0xffec, 0x18, 0x0, 0x0, 0x0 + createsprite gLightThatBurnsTheSkyBlastBurnSpriteTemplate, ANIM_ATTACKER, 70, 0x0, 0xffe0, 0x18, 0x0, 0x0, 0x0 + createsprite gLightThatBurnsTheSkyBlastBurnSpriteTemplate, ANIM_ATTACKER, 70, 0x28, 0xffec, 0x18, 0x0, 0x0, 0x0 + createsprite gLightThatBurnsTheSkyBlastBurnSpriteTemplate, ANIM_ATTACKER, 66, 0x40, 0x0, 0x18, 0x0, 0x0, 0x0 + createsprite gLightThatBurnsTheSkyBlastBurnSpriteTemplate, ANIM_ATTACKER, 66, 0x28, 0x14, 0x18, 0x0, 0x0, 0x0 + createsprite gLightThatBurnsTheSkyBlastBurnSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x20, 0x18, 0x0, 0x0, 0x0 + createsprite gLightThatBurnsTheSkyBlastBurnSpriteTemplate, ANIM_ATTACKER, 2, 0xffd8, 0x14, 0x18, 0x0, 0x0, 0x0 return LightThatBurnsTheSkyBlast_3: - launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x2 0x6 0xffa0 0x0 0x18 0x0 0x0 0x0 - launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x6 0x6 0xffc4 0xffe2 0x18 0x0 0x0 0x0 - launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x46 0x6 0x0 0xffd0 0x18 0x0 0x0 0x0 - launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x46 0x6 0x3c 0xffe2 0x18 0x0 0x0 0x0 - launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x42 0x6 0x60 0x0 0x18 0x0 0x0 0x0 - launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x42 0x6 0x3c 0x1e 0x18 0x0 0x0 0x0 - launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x2 0x6 0x0 0x30 0x18 0x0 0x0 0x0 - launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x2 0x6 0xffc4 0x1e 0x18 0x0 0x0 0x0 + createsprite gLightThatBurnsTheSkyBlastBurnSpriteTemplate, ANIM_ATTACKER, 2, 0xffa0, 0x0, 0x18, 0x0, 0x0, 0x0 + createsprite gLightThatBurnsTheSkyBlastBurnSpriteTemplate, ANIM_ATTACKER, 6, 0xffc4, 0xffe2, 0x18, 0x0, 0x0, 0x0 + createsprite gLightThatBurnsTheSkyBlastBurnSpriteTemplate, ANIM_ATTACKER, 70, 0x0, 0xffd0, 0x18, 0x0, 0x0, 0x0 + createsprite gLightThatBurnsTheSkyBlastBurnSpriteTemplate, ANIM_ATTACKER, 70, 0x3c, 0xffe2, 0x18, 0x0, 0x0, 0x0 + createsprite gLightThatBurnsTheSkyBlastBurnSpriteTemplate, ANIM_ATTACKER, 66, 0x60, 0x0, 0x18, 0x0, 0x0, 0x0 + createsprite gLightThatBurnsTheSkyBlastBurnSpriteTemplate, ANIM_ATTACKER, 66, 0x3c, 0x1e, 0x18, 0x0, 0x0, 0x0 + createsprite gLightThatBurnsTheSkyBlastBurnSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x30, 0x18, 0x0, 0x0, 0x0 + createsprite gLightThatBurnsTheSkyBlastBurnSpriteTemplate, ANIM_ATTACKER, 2, 0xffc4, 0x1e, 0x18, 0x0, 0x0, 0x0 return LightThatBurnsTheSkyGeyser: - launchtemplate gLightThatBurnsTheSkyExplosionSpriteTemplate 0x84, 0x4, 0x0003 0x0005 0x1 0x0 + createsprite gLightThatBurnsTheSkyExplosionSpriteTemplate, ANIM_TARGET, 4, 0x0003, 0x0005, 0x1, 0x0 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET delay 0x0 - launchtemplate gLightThatBurnsTheSkyExplosionSpriteTemplate 0x84, 0x4, 0xfff5 0xfff1 0x1 0x0 + createsprite gLightThatBurnsTheSkyExplosionSpriteTemplate, ANIM_TARGET, 4, 0xfff5, 0xfff1, 0x1, 0x0 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET delay 0x0 - launchtemplate gLightThatBurnsTheSkyExplosionSpriteTemplate 0x84, 0x4, 0x0008 0xfffb 0x1 0x0 + createsprite gLightThatBurnsTheSkyExplosionSpriteTemplate, ANIM_TARGET, 4, 0x0008, 0xfffb, 0x1, 0x0 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET delay 0x0 - launchtemplate gLightThatBurnsTheSkyExplosionSpriteTemplate 0x84, 0x4, 0xfffa 0x0012 0x1 0x0 + createsprite gLightThatBurnsTheSkyExplosionSpriteTemplate, ANIM_TARGET, 4, 0xfffa, 0x0012, 0x1, 0x0 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET delay 0x0 - launchtemplate gLightThatBurnsTheSkyExplosionSpriteTemplate 0x84, 0x4, 0x0000 0x0005 0x1 0x0 + createsprite gLightThatBurnsTheSkyExplosionSpriteTemplate, ANIM_TARGET, 4, 0x0000, 0x0005, 0x1, 0x0 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET - launchtemplate gLightThatBurnsTheSkyExplosionSpriteTemplate 0x84, 0x4, 0x0003 0xfff5 ANIM_TARGET 0x0 + createsprite gLightThatBurnsTheSkyExplosionSpriteTemplate, ANIM_TARGET, 4, 0x0003, 0xfff5, ANIM_TARGET, 0x0 delay 0x0 - launchtemplate gLightThatBurnsTheSkyExplosionSpriteTemplate 0x84, 0x4, 0xfff5 0xffe1 ANIM_TARGET 0x0 + createsprite gLightThatBurnsTheSkyExplosionSpriteTemplate, ANIM_TARGET, 4, 0xfff5, 0xffe1, ANIM_TARGET, 0x0 delay 0x0 - launchtemplate gLightThatBurnsTheSkyExplosionSpriteTemplate 0x84, 0x4, 0x0008 0xffeb ANIM_TARGET 0x0 + createsprite gLightThatBurnsTheSkyExplosionSpriteTemplate, ANIM_TARGET, 4, 0x0008, 0xffeb, ANIM_TARGET, 0x0 delay 0x0 - launchtemplate gLightThatBurnsTheSkyExplosionSpriteTemplate 0x84, 0x4, 0xfffa 0x0002 ANIM_TARGET 0x0 + createsprite gLightThatBurnsTheSkyExplosionSpriteTemplate, ANIM_TARGET, 4, 0xfffa, 0x0002, ANIM_TARGET, 0x0 delay 0x0 - launchtemplate gLightThatBurnsTheSkyExplosionSpriteTemplate 0x84, 0x4, 0x0000 0xfff5 ANIM_TARGET 0x0 + createsprite gLightThatBurnsTheSkyExplosionSpriteTemplate, ANIM_TARGET, 4, 0x0000, 0xfff5, ANIM_TARGET, 0x0 delay 0x0 - launchtemplate gLightThatBurnsTheSkyExplosionSpriteTemplate 0x84, 0x4, 0x0003 0xffe5 ANIM_TARGET 0x0 + createsprite gLightThatBurnsTheSkyExplosionSpriteTemplate, ANIM_TARGET, 4, 0x0003, 0xffe5, ANIM_TARGET, 0x0 delay 0x0 - launchtemplate gLightThatBurnsTheSkyExplosionSpriteTemplate 0x84, 0x4, 0xfff5 0xffd1 ANIM_TARGET 0x0 + createsprite gLightThatBurnsTheSkyExplosionSpriteTemplate, ANIM_TARGET, 4, 0xfff5, 0xffd1, ANIM_TARGET, 0x0 delay 0x0 - launchtemplate gLightThatBurnsTheSkyExplosionSpriteTemplate 0x84, 0x4, 0x0008 0xffdb ANIM_TARGET 0x0 + createsprite gLightThatBurnsTheSkyExplosionSpriteTemplate, ANIM_TARGET, 4, 0x0008, 0xffdb, ANIM_TARGET, 0x0 delay 0x0 - launchtemplate gLightThatBurnsTheSkyExplosionSpriteTemplate 0x84, 0x4, 0xfffa 0xfff2 ANIM_TARGET 0x0 + createsprite gLightThatBurnsTheSkyExplosionSpriteTemplate, ANIM_TARGET, 4, 0xfffa, 0xfff2, ANIM_TARGET, 0x0 delay 0x0 - launchtemplate gLightThatBurnsTheSkyExplosionSpriteTemplate 0x84, 0x4, 0x0000 0xffe5 ANIM_TARGET 0x0 + createsprite gLightThatBurnsTheSkyExplosionSpriteTemplate, ANIM_TARGET, 4, 0x0000, 0xffe5, ANIM_TARGET, 0x0 delay 0x0 return LightThatBurnsTheSkyGreenSparks: - launchtemplate gLightThatBurnsTheSkyGreenSparkSpriteTemplate 0x83 0x8 0x0 0x0 0x30 0x2c 0x0 0x28 0x0 0x3 - launchtemplate gLightThatBurnsTheSkyGreenSparkSpriteTemplate 0x83 0x8 0x0 0x0 0x30 0x2c 0x40 0x28 0x1 0x3 - launchtemplate gLightThatBurnsTheSkyGreenSparkSpriteTemplate 0x83 0x8 0x0 0x0 0x30 0x2c 0x80 0x28 0x0 0x3 - launchtemplate gLightThatBurnsTheSkyGreenSparkSpriteTemplate 0x83 0x8 0x0 0x0 0x30 0x2c 0x0 0x28 0x2 0x3 - launchtemplate gLightThatBurnsTheSkyGreenSparkSpriteTemplate 0x83 0x8 0x0 0x0 0x15 0x2c 0x0 0x28 0x0 0x3 - launchtemplate gLightThatBurnsTheSkyGreenSparkSpriteTemplate 0x83 0x8 0x0 0x0 0x15 0x2c 0x40 0x28 0x1 0x3 - launchtemplate gLightThatBurnsTheSkyGreenSparkSpriteTemplate 0x83 0x8 0x0 0x0 0x15 0x2c 0x80 0x28 0x0 0x3 - launchtemplate gLightThatBurnsTheSkyGreenSparkSpriteTemplate 0x83 0x8 0x0 0x0 0x15 0x2c 0x0 0x28 0x2 0x3 + createsprite gLightThatBurnsTheSkyGreenSparkSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, 0x30, 0x2c, 0x0, 0x28, 0x0, 0x3 + createsprite gLightThatBurnsTheSkyGreenSparkSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, 0x30, 0x2c, 0x40, 0x28, 0x1, 0x3 + createsprite gLightThatBurnsTheSkyGreenSparkSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, 0x30, 0x2c, 0x80, 0x28, 0x0, 0x3 + createsprite gLightThatBurnsTheSkyGreenSparkSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, 0x30, 0x2c, 0x0, 0x28, 0x2, 0x3 + createsprite gLightThatBurnsTheSkyGreenSparkSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, 0x15, 0x2c, 0x0, 0x28, 0x0, 0x3 + createsprite gLightThatBurnsTheSkyGreenSparkSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, 0x15, 0x2c, 0x40, 0x28, 0x1, 0x3 + createsprite gLightThatBurnsTheSkyGreenSparkSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, 0x15, 0x2c, 0x80, 0x28, 0x0, 0x3 + createsprite gLightThatBurnsTheSkyGreenSparkSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, 0x15, 0x2c, 0x0, 0x28, 0x2, 0x3 delay 0x10 return @@ -30641,21 +30639,21 @@ Move_SOUL_STEALING_7_STAR_STRIKE:: loadspritegfx ANIM_TAG_WISP_FIRE @will o wisp loadspritegfx ANIM_TAG_FIRE_PLUME @blast burn loadspritegfx ANIM_TAG_HANDS_AND_FEET @fist - launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish - setblends 0x80c + setalpha 12, 8 playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_TARGET - launchtemplate gSoulStealBlastburnSpriteTemplate 0x2 0x6 0xffe0 0x0 0x18 0x0 0x0 0x0 - launchtemplate gSoulStealBlastburnSpriteTemplate 0x42 0x6 0xffec 0xfff6 0x18 0x0 0x0 0x0 - launchtemplate gSoulStealBlastburnSpriteTemplate 0x42 0x6 0x0 0xfff0 0x18 0x0 0x0 0x0 - launchtemplate gSoulStealBlastburnSpriteTemplate 0x42 0x6 0x14 0xfff6 0x18 0x0 0x0 0x0 - launchtemplate gSoulStealBlastburnSpriteTemplate 0x42 0x6 0x20 0x0 0x18 0x0 0x0 0x0 - launchtemplate gSoulStealBlastburnSpriteTemplate 0x42 0x6 0x14 0xa 0x18 0x0 0x0 0x0 - launchtemplate gSoulStealBlastburnSpriteTemplate 0x2 0x6 0x0 0x10 0x18 0x0 0x0 0x0 - launchtemplate gSoulStealBlastburnSpriteTemplate 0x2 0x6 0xffec 0xa 0x18 0x0 0x0 0x0 + createsprite gSoulStealBlastburnSpriteTemplate, ANIM_ATTACKER, 2, 0xffe0, 0x0, 0x18, 0x0, 0x0, 0x0 + createsprite gSoulStealBlastburnSpriteTemplate, ANIM_ATTACKER, 66, 0xffec, 0xfff6, 0x18, 0x0, 0x0, 0x0 + createsprite gSoulStealBlastburnSpriteTemplate, ANIM_ATTACKER, 66, 0x0, 0xfff0, 0x18, 0x0, 0x0, 0x0 + createsprite gSoulStealBlastburnSpriteTemplate, ANIM_ATTACKER, 66, 0x14, 0xfff6, 0x18, 0x0, 0x0, 0x0 + createsprite gSoulStealBlastburnSpriteTemplate, ANIM_ATTACKER, 66, 0x20, 0x0, 0x18, 0x0, 0x0, 0x0 + createsprite gSoulStealBlastburnSpriteTemplate, ANIM_ATTACKER, 66, 0x14, 0xa, 0x18, 0x0, 0x0, 0x0 + createsprite gSoulStealBlastburnSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x10, 0x18, 0x0, 0x0, 0x0 + createsprite gSoulStealBlastburnSpriteTemplate, ANIM_ATTACKER, 2, 0xffec, 0xa, 0x18, 0x0, 0x0, 0x0 delay 0x5 playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER - launchtemplate gSoulStealBlackFlySpriteTemplate 0x2 0x4 0x0 0x0 0xd 0x150 + createsprite gSoulStealBlackFlySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0xd, 0x150 waitforvisualfinish invisible ANIM_TARGET fadetobg BG_SOULSTEALING_7STAR_STRIKE @@ -30665,8 +30663,8 @@ Move_SOUL_STEALING_7_STAR_STRIKE:: playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call SoulStealingSevenStarStrikeBuffEffect delay 0x8 - launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xb 0x0 - launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1 + createvisualtask AnimTask_BlendColorCycle, 0x2, 0x2, 0x2, 0x2, 0x0, 0xb, 0x0 + createvisualtask AnimTask_ShakeMon2, 0x2, 0x0, 0x1, 0x0, 0x20, 0x1 call SoulStealingSevenStarStrikeBuffEffect delay 0x8 call SoulStealingSevenStarStrikeBuffEffect @@ -30675,46 +30673,46 @@ Move_SOUL_STEALING_7_STAR_STRIKE:: waitforvisualfinish unloadspritegfx ANIM_TAG_FIRE_PLUME loadspritegfx ANIM_TAG_PAIN_SPLIT @pain split - launchtask AnimTask_ShakeMon 0x5 0x5 0x1 0x0 0x4 0x25 0x1 - launchtemplate gSoulStealBlueFistSpriteTemplate 0x82 0x8 0xffc0 0x14 0x0 0x0 0xa 0x1 0x0 0x1 + createvisualtask AnimTask_ShakeMon, 0x5, 0x1, 0x0, 0x4, 0x25, 0x1 + createsprite gSoulStealBlueFistSpriteTemplate, ANIM_TARGET, 2, 0xffc0, 0x14, 0x0, 0x0, 0xa, 0x1, 0x0, 0x1 delay 0x4 - launchtemplate gSoulStealBlueStarSpriteTemplate 0x84 0x6 0x0 ANIM_TARGET 0x2 0x0 0x0 0x30 + createsprite gSoulStealBlueStarSpriteTemplate, ANIM_TARGET, 4, 0x0, ANIM_TARGET, 0x2, 0x0, 0x0, 0x30 playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET delay 0x4 - launchtemplate gSoulStealBlueFistSpriteTemplate 0x82 0x8 0xffc0 0x10 0x0 0x0 0xa 0x1 0x0 0x1 + createsprite gSoulStealBlueFistSpriteTemplate, ANIM_TARGET, 2, 0xffc0, 0x10, 0x0, 0x0, 0xa, 0x1, 0x0, 0x1 delay 0x4 - launchtemplate gSoulStealBlueStarSpriteTemplate 0x84 0x6 0x0 ANIM_TARGET 0x12 0x0 0x0 0x2c + createsprite gSoulStealBlueStarSpriteTemplate, ANIM_TARGET, 4, 0x0, ANIM_TARGET, 0x12, 0x0, 0x0, 0x2c playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET delay 0x4 - launchtemplate gSoulStealBlueFistSpriteTemplate 0x82 0x8 0xffc0 0x08 0x0 0x0 0xa 0x1 0x0 0x1 + createsprite gSoulStealBlueFistSpriteTemplate, ANIM_TARGET, 2, 0xffc0, 0x08, 0x0, 0x0, 0xa, 0x1, 0x0, 0x1 delay 0x4 - launchtemplate gSoulStealBlueStarSpriteTemplate 0x84 0x6 0xffeb 0xfff8 0x2 0x0 0x0 0x28 + createsprite gSoulStealBlueStarSpriteTemplate, ANIM_TARGET, 4, 0xffeb, 0xfff8, 0x2, 0x0, 0x0, 0x28 playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET - launchtemplate gSoulStealBlueFistSpriteTemplate 0x82 0x8 0xffc0 0x12 0x0 0x0 0xa 0x1 0x0 0x1 + createsprite gSoulStealBlueFistSpriteTemplate, ANIM_TARGET, 2, 0xffc0, 0x12, 0x0, 0x0, 0xa, 0x1, 0x0, 0x1 delay 0x4 - launchtemplate gSoulStealBlueStarSpriteTemplate 0x84 0x6 0xfffb 0xfff4 0x2 0x0 0x0 0x24 + createsprite gSoulStealBlueStarSpriteTemplate, ANIM_TARGET, 4, 0xfffb, 0xfff4, 0x2, 0x0, 0x0, 0x24 playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET - launchtemplate gSoulStealBlueFistSpriteTemplate 0x82 0x8 0xffc0 0x15 0x0 0x0 0xa 0x1 0x0 0x1 + createsprite gSoulStealBlueFistSpriteTemplate, ANIM_TARGET, 2, 0xffc0, 0x15, 0x0, 0x0, 0xa, 0x1, 0x0, 0x1 delay 0x4 - launchtemplate gSoulStealBlueStarSpriteTemplate 0x84 0x6 0x5 0xfff8 0x2 0x0 0x0 0x20 + createsprite gSoulStealBlueStarSpriteTemplate, ANIM_TARGET, 4, 0x5, 0xfff8, 0x2, 0x0, 0x0, 0x20 playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET - launchtemplate gSoulStealBlueFistSpriteTemplate 0x82 0x8 0xffc0 0x0c 0x0 0x0 0xa 0x1 0x0 0x1 + createsprite gSoulStealBlueFistSpriteTemplate, ANIM_TARGET, 2, 0xffc0, 0x0c, 0x0, 0x0, 0xa, 0x1, 0x0, 0x1 delay 0x4 - launchtemplate gSoulStealBlueStarSpriteTemplate 0x84 0x6 0xfff0 0x1 0x2 0x0 0x0 0x1c + createsprite gSoulStealBlueStarSpriteTemplate, ANIM_TARGET, 4, 0xfff0, 0x1, 0x2, 0x0, 0x0, 0x1c playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET - launchtemplate gSoulStealBlueFistSpriteTemplate 0x82 0x8 0xffc0 0x13 0x0 0x0 0xa 0x1 0x0 0x1 + createsprite gSoulStealBlueFistSpriteTemplate, ANIM_TARGET, 2, 0xffc0, 0x13, 0x0, 0x0, 0xa, 0x1, 0x0, 0x1 delay 0x4 - launchtemplate gSoulStealBlueStarSpriteTemplate 0x84 0x6 0x0 0x1 0x2 0x0 0x0 0x18 + createsprite gSoulStealBlueStarSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x1, 0x2, 0x0, 0x0, 0x18 playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET - launchtemplate gSoulStealBlueFistSpriteTemplate 0x82 0x8 0xffc0 0x0e 0x0 0x0 0xa 0x1 0x0 0x1 + createsprite gSoulStealBlueFistSpriteTemplate, ANIM_TARGET, 2, 0xffc0, 0x0e, 0x0, 0x0, 0xa, 0x1, 0x0, 0x1 delay 0x4 - launchtemplate gSoulStealBlueStarSpriteTemplate 0x84 0x6 0xfff0 0x10 0x2 0x0 0x0 0x14 - launchtemplate gSoulStealBlueFistSpriteTemplate 0x82 0x8 0xffc0 0x12 0x0 0x0 0xa 0x1 0x0 0x1 + createsprite gSoulStealBlueStarSpriteTemplate, ANIM_TARGET, 4, 0xfff0, 0x10, 0x2, 0x0, 0x0, 0x14 + createsprite gSoulStealBlueFistSpriteTemplate, ANIM_TARGET, 2, 0xffc0, 0x12, 0x0, 0x0, 0xa, 0x1, 0x0, 0x1 delay 0x4 - launchtemplate gSoulStealBlueStarSpriteTemplate 0x84 0x6 0x0 0x10 0x2 0x0 0x0 0x10 + createsprite gSoulStealBlueStarSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x10, 0x2, 0x0, 0x0, 0x10 delay 0x4 playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER - launchtemplate gSoulStealBlackFlySpriteTemplate 0x82, 0x4, 0x0 0x0 0xd 0x150 + createsprite gSoulStealBlackFlySpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xd, 0x150 delay 0x20 unloadspritegfx ANIM_TAG_PAIN_SPLIT unloadspritegfx ANIM_TAG_ROUND_SHADOW @@ -30723,18 +30721,18 @@ Move_SOUL_STEALING_7_STAR_STRIKE:: loadspritegfx ANIM_TAG_SNORE_Z @z playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER setarg 0x7 0x0 @;Clear arg 7 so task works properly in Link battles - launchtask AnimTask_SnatchOpposingMonMove 0x2 0x0 + createvisualtask AnimTask_SnatchOpposingMonMove, 0x2 delay 0x1c - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x0 0x0 0x10 0x0000 - delay 0x1 - launchtemplate gSoulStealZStarSpriteTemplate 0x82, 0x4, 0x0 0x0 0x1 0x24 - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x6 0x1 - launchtemplate gWillOWispFireSpriteTemplate 0x82 0x1 0x0 - launchtemplate gWillOWispFireSpriteTemplate 0x82 0x1 0x2a - launchtemplate gWillOWispFireSpriteTemplate 0x82 0x1 0x54 - launchtemplate gWillOWispFireSpriteTemplate 0x82 0x1 0x7e - launchtemplate gWillOWispFireSpriteTemplate 0x82 0x1 0xa8 - launchtemplate gWillOWispFireSpriteTemplate 0x82 0x1 0xd2 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x0, 0x0, 0x10, 0x0000 + delay 0x1 + createsprite gSoulStealZStarSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x1, 0x24 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x3, 0x0, 0x6, 0x1 + createsprite gWillOWispFireSpriteTemplate, ANIM_TARGET, 2, 0x0 + createsprite gWillOWispFireSpriteTemplate, ANIM_TARGET, 2, 0x2a + createsprite gWillOWispFireSpriteTemplate, ANIM_TARGET, 2, 0x54 + createsprite gWillOWispFireSpriteTemplate, ANIM_TARGET, 2, 0x7e + createsprite gWillOWispFireSpriteTemplate, ANIM_TARGET, 2, 0xa8 + createsprite gWillOWispFireSpriteTemplate, ANIM_TARGET, 2, 0xd2 playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_TARGET call SoulStealingSevenStarStrikeBlueParalysis call SoulStealingSevenStarStrikeBlueParalysis @@ -30744,66 +30742,66 @@ Move_SOUL_STEALING_7_STAR_STRIKE:: loadspritegfx ANIM_TAG_SPARKLE_4 @ detect loadspritegfx ANIM_TAG_EXPLOSION @ explosion playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER - launchtemplate gTargetTwinkleSpriteTemplate 0x8d 0x3 0x0 0x0 ANIM_TARGET @detect star + createsprite gTargetTwinkleSpriteTemplate, ANIM_TARGET, 13, 0x0, 0x0, ANIM_TARGET @detect star delay 0xa - launchtask AnimTask_HorizontalShake 0x5 0x3 ANIM_TARGET 0x8 0x20 + createvisualtask AnimTask_HorizontalShake, 0x5, ANIM_TARGET, 0x8, 0x20 call SoulStealingSevenStarStrikeExplosion call SoulStealingSevenStarStrikeExplosion - launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_ALL - ANIM_PAL_DEF, 0x2, 0x0, 0x10, 0x0 @everything to black + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_ALL_BUT_DEF), 0x2, 0x0, 0x10, 0x0 @everything to black call SoulStealingSevenStarStrikeExplosion waitforvisualfinish blendoff restorebg - launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG | ANIM_PAL_ALL_BATTLERS, 0x2, 0x10, 0x0, 0x0 @everything from black + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS), 0x2, 0x10, 0x0, 0x0 @everything from black waitforvisualfinish - launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ALL_BATTLERS 0x2 0x0 0x0 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BATTLERS, 0x2, 0x0, 0x0, 0x0 waitforvisualfinish - launchtask AnimTask_AllBanksVisible 0xA 0x0 + createvisualtask AnimTask_AllBanksVisible, 0xA waitforvisualfinish end SoulStealingSevenStarStrikeBuffEffect: - launchtemplate gSoulStealIceBuffSpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2 + createsprite gSoulStealIceBuffSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x1a, 0x2 delay 0x4 - launchtemplate gSoulStealIceBuffSpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1 + createsprite gSoulStealIceBuffSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xe, 0x1c, 0x1 delay 0x4 - launchtemplate gSoulStealIceBuffSpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2 + createsprite gSoulStealIceBuffSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfffb, 0xa, 0x2 delay 0x4 - launchtemplate gSoulStealIceBuffSpriteTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3 + createsprite gSoulStealIceBuffSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1c, 0x1a, 0x3 delay 0x4 - launchtemplate gSoulStealIceBuffSpriteTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1 + createsprite gSoulStealIceBuffSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff4, 0x0, 0x1 return SoulStealingSevenStarStrikeBlueParalysis: playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_TARGET - launchtemplate gSoulStealBlueParalyzeSpriteTemplate 0x82, 0x4, 0x5 0x0 0x5 0x0 + createsprite gSoulStealBlueParalyzeSpriteTemplate, ANIM_TARGET, 2, 0x5, 0x0, 0x5, 0x0 delay 0x2 - launchtemplate gSoulStealBlueParalyzeSpriteTemplate 0x82, 0x4, 0xfffb 0xa 0x5 0x1 + createsprite gSoulStealBlueParalyzeSpriteTemplate, ANIM_TARGET, 2, 0xfffb, 0xa, 0x5, 0x1 delay 0x2 - launchtemplate gSoulStealBlueParalyzeSpriteTemplate 0x82, 0x4, 0xf 0x14 0x5 0x2 + createsprite gSoulStealBlueParalyzeSpriteTemplate, ANIM_TARGET, 2, 0xf, 0x14, 0x5, 0x2 delay 0x2 - launchtemplate gSoulStealBlueParalyzeSpriteTemplate 0x82, 0x4, 0xfff1 0xfff6 0x5 0x0 + createsprite gSoulStealBlueParalyzeSpriteTemplate, ANIM_TARGET, 2, 0xfff1, 0xfff6, 0x5, 0x0 delay 0x2 - launchtemplate gSoulStealBlueParalyzeSpriteTemplate 0x82, 0x4, 0x19 0x0 0x5 0x1 + createsprite gSoulStealBlueParalyzeSpriteTemplate, ANIM_TARGET, 2, 0x19, 0x0, 0x5, 0x1 delay 0x2 - launchtemplate gSoulStealBlueParalyzeSpriteTemplate 0x82, 0x4, 0xfff8 0x8 0x5 0x2 + createsprite gSoulStealBlueParalyzeSpriteTemplate, ANIM_TARGET, 2, 0xfff8, 0x8, 0x5, 0x2 delay 0x2 - launchtemplate gSoulStealBlueParalyzeSpriteTemplate 0x82, 0x4, 0x2 0xfff8 0x5 0x0 + createsprite gSoulStealBlueParalyzeSpriteTemplate, ANIM_TARGET, 2, 0x2, 0xfff8, 0x5, 0x0 delay 0x2 - launchtemplate gSoulStealBlueParalyzeSpriteTemplate 0x82, 0x4, 0xffec 0xf 0x5 0x1 + createsprite gSoulStealBlueParalyzeSpriteTemplate, ANIM_TARGET, 2, 0xffec, 0xf, 0x5, 0x1 return SoulStealingSevenStarStrikeExplosion: playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gSoulStealExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1 + createsprite gSoulStealExplosionSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, ANIM_TARGET, 0x1 delay 0x6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gSoulStealExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1 + createsprite gSoulStealExplosionSpriteTemplate, ANIM_TARGET, 3, 0x18, 0xffe8, ANIM_TARGET, 0x1 delay 0x6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gSoulStealExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + createsprite gSoulStealExplosionSpriteTemplate, ANIM_TARGET, 3, 0xfff0, 0x10, ANIM_TARGET, 0x1 delay 0x6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gSoulStealExplosionSpriteTemplate 0x83 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 + createsprite gSoulStealExplosionSpriteTemplate, ANIM_TARGET, 3, 0xffe8, 0xfff4, ANIM_TARGET, 0x1 delay 0x6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - launchtemplate gSoulStealExplosionSpriteTemplate 0x83 0x4 0x10 0x10 ANIM_TARGET 0x1 + createsprite gSoulStealExplosionSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x10, ANIM_TARGET, 0x1 delay 0x6 return diff --git a/include/constants/battle_anim.h b/include/constants/battle_anim.h index 4b772022e513..dd91b42c8ec9 100644 --- a/include/constants/battle_anim.h +++ b/include/constants/battle_anim.h @@ -594,21 +594,6 @@ #define ANIM_WEATHER_HAIL 4 #define ANIM_WEATHER_SNOW 5 -// mon pal blend -#define ANIM_PAL_BG 0x1 -#define ANIM_PAL_ATK 0x2 -#define ANIM_PAL_DEF 0x4 -#define ANIM_PAL_ATK_PARTNER 0x8 -#define ANIM_PAL_DEF_PARTNER 0x10 -#define ANIM_PAL_ALL 0x1f -#define ANIM_PAL_BG_4 0x20 -#define ANIM_PAL_BG_5 0x40 -#define ANIM_PAL_ALL_BATTLERS 0x780 -#define ANIM_PAL_PLAYER1 0x80 -#define ANIM_PAL_PLAYER2 0x100 -#define ANIM_PAL_OPPONENT1 0x200 -#define ANIM_PAL_OPPONENT2 0x400 - // horseshoe/fist frames #define ANIM_RIGHT_FIST 0 #define ANIM_LEFT_FIST 2 @@ -626,19 +611,18 @@ // Flags given to various functions to indicate which palettes to consider. // Handled by UnpackSelectedBattlePalettes -#define F_PAL_BG (1 << 0) -#define F_PAL_ATTACKER (1 << 1) -#define F_PAL_TARGET (1 << 2) -#define F_PAL_ATK_PARTNER (1 << 3) -#define F_PAL_DEF_PARTNER (1 << 4) -#define F_PAL_ANIM_1 (1 << 5) // Palette set for GetBattleAnimBg1Data/GetBgDataForTransform. Only used (ineffectually?) by Aromatherapy. -#define F_PAL_ANIM_2 (1 << 6) // Palette set for GetBattleAnimBgData/GetBgDataForTransform. Unused. -#define F_PAL_ATK_SIDE (F_PAL_ATTACKER | F_PAL_ATK_PARTNER) -#define F_PAL_DEF_SIDE (F_PAL_TARGET | F_PAL_DEF_PARTNER) -#define F_PAL_BATTLERS (F_PAL_ATK_SIDE | F_PAL_DEF_SIDE) -// The below are only used by AnimTask_BlendBattleAnimPal to get battler sprite palettes by position rather than by role. -// It's redundant with F_PAL_BATTLERS, because they're only ever used together to refer to all the battlers at once. -#define F_PAL_BATTLERS_2 (1 << 7 | 1 << 8 | 1 << 9 | 1 << 10) - +#define F_PAL_BG (1 << 0) +#define F_PAL_ATTACKER (1 << 1) +#define F_PAL_TARGET (1 << 2) +#define F_PAL_ATK_PARTNER (1 << 3) +#define F_PAL_DEF_PARTNER (1 << 4) +#define F_PAL_ANIM_1 (1 << 5) // Palette set for GetBattleAnimBg1Data/GetBgDataForTransform. Only used (ineffectually?) by Aromatherapy. +#define F_PAL_ANIM_2 (1 << 6) // Palette set for GetBattleAnimBgData/GetBgDataForTransform. Unused. +#define F_PAL_ATK_SIDE (F_PAL_ATTACKER | F_PAL_ATK_PARTNER) +#define F_PAL_DEF_SIDE (F_PAL_TARGET | F_PAL_DEF_PARTNER) +#define F_PAL_BATTLERS (F_PAL_ATK_SIDE | F_PAL_DEF_SIDE) +#define F_PAL_ADJACENT (F_PAL_DEF_SIDE | F_PAL_ATK_PARTNER) +#define F_PAL_ALL_BUT_DEF (F_PAL_ATK_SIDE | F_PAL_DEF_PARTNER) +#define F_PAL_ALL_BUT_ATK_PARTNER (F_PAL_ATTACKER | F_PAL_DEF_SIDE) #endif // GUARD_CONSTANTS_BATTLE_ANIM_H From 7edd1a45a4d119e3adf746850fb1be3487cd4bc7 Mon Sep 17 00:00:00 2001 From: Alex Date: Sun, 28 May 2023 11:31:22 +0200 Subject: [PATCH 421/428] restore items in wild battles --- src/battle_main.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/battle_main.c b/src/battle_main.c index de76cc9b74ac..270447a0e104 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -5404,7 +5404,6 @@ static void HandleEndTurn_FinishBattle(void) BeginFastPaletteFade(3); FadeOutMapMusic(5); #if B_TRAINERS_KNOCK_OFF_ITEMS == TRUE || B_RESTORE_HELD_BATTLE_ITEMS == TRUE - if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) TryRestoreHeldItems(); #endif for (i = 0; i < PARTY_SIZE; i++) From 112636b8f3a0aa7b389d233b32d6e96d532f3bc0 Mon Sep 17 00:00:00 2001 From: Alex Date: Sun, 28 May 2023 11:54:43 +0200 Subject: [PATCH 422/428] Fix Speed Boost animation --- data/battle_scripts_1.s | 1 + 1 file changed, 1 insertion(+) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 056a9775681b..53d824e7e1db 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -8522,6 +8522,7 @@ BattleScript_AbilityPopUp: BattleScript_SpeedBoostActivates:: statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_SpeedBoostActivatesEnd call BattleScript_AbilityPopUp + setgraphicalstatchangevalues playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 printstring STRINGID_PKMNRAISEDSPEED waitmessage B_WAIT_TIME_LONG From 5a384f9090d08f8de3a0c28bcea2b5842bc61608 Mon Sep 17 00:00:00 2001 From: Alex Date: Sun, 7 May 2023 10:24:15 +0200 Subject: [PATCH 423/428] Fixes Triple Kick effect and Z move damage calc minor correction to the z-move fix Add comment to EFFECT_TRIPLE_KICK --- src/battle_ai_util.c | 76 ++++++++++++++++++++++---------------------- src/battle_util.c | 7 ++-- 2 files changed, 43 insertions(+), 40 deletions(-) diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index e187a06a9847..0e3e774583f7 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -820,47 +820,47 @@ s32 AI_CalcDamage(u16 move, u8 battlerAtk, u8 battlerDef, u8 *typeEffectiveness, else dmg = (critDmg + normalDmg * (critChance - 1)) / critChance; - // Handle dynamic move damage - switch (gBattleMoves[move].effect) + if (!gBattleStruct->zmove.active) { - case EFFECT_LEVEL_DAMAGE: - case EFFECT_PSYWAVE: - dmg = gBattleMons[battlerAtk].level * (AI_DATA->abilities[battlerAtk] == ABILITY_PARENTAL_BOND ? 2 : 1); - break; - case EFFECT_DRAGON_RAGE: - dmg = 40 * (AI_DATA->abilities[battlerAtk] == ABILITY_PARENTAL_BOND ? 2 : 1); - break; - case EFFECT_SONICBOOM: - dmg = 20 * (AI_DATA->abilities[battlerAtk] == ABILITY_PARENTAL_BOND ? 2 : 1); - break; - case EFFECT_MULTI_HIT: - dmg *= (AI_DATA->abilities[battlerAtk] == ABILITY_SKILL_LINK ? 5 : 3); - break; - case EFFECT_TRIPLE_KICK: - dmg *= (AI_DATA->abilities[battlerAtk] == ABILITY_SKILL_LINK ? 6 : 5); - break; - case EFFECT_ENDEAVOR: - // If target has less HP than user, Endeavor does no damage - dmg = max(0, gBattleMons[battlerDef].hp - gBattleMons[battlerAtk].hp); - break; - case EFFECT_SUPER_FANG: - dmg = (AI_DATA->abilities[battlerAtk] == ABILITY_PARENTAL_BOND - ? max(2, gBattleMons[battlerDef].hp * 3 / 4) - : max(1, gBattleMons[battlerDef].hp / 2)); - break; - case EFFECT_FINAL_GAMBIT: - dmg = gBattleMons[battlerAtk].hp; - break; - } + // Handle dynamic move damage + switch (gBattleMoves[move].effect) + { + case EFFECT_LEVEL_DAMAGE: + case EFFECT_PSYWAVE: + dmg = gBattleMons[battlerAtk].level * (AI_DATA->abilities[battlerAtk] == ABILITY_PARENTAL_BOND ? 2 : 1); + break; + case EFFECT_DRAGON_RAGE: + dmg = 40 * (AI_DATA->abilities[battlerAtk] == ABILITY_PARENTAL_BOND ? 2 : 1); + break; + case EFFECT_SONICBOOM: + dmg = 20 * (AI_DATA->abilities[battlerAtk] == ABILITY_PARENTAL_BOND ? 2 : 1); + break; + case EFFECT_MULTI_HIT: + dmg *= (AI_DATA->abilities[battlerAtk] == ABILITY_SKILL_LINK ? 5 : 3); + break; + case EFFECT_ENDEAVOR: + // If target has less HP than user, Endeavor does no damage + dmg = max(0, gBattleMons[battlerDef].hp - gBattleMons[battlerAtk].hp); + break; + case EFFECT_SUPER_FANG: + dmg = (AI_DATA->abilities[battlerAtk] == ABILITY_PARENTAL_BOND + ? max(2, gBattleMons[battlerDef].hp * 3 / 4) + : max(1, gBattleMons[battlerDef].hp / 2)); + break; + case EFFECT_FINAL_GAMBIT: + dmg = gBattleMons[battlerAtk].hp; + break; + } - // Handle other multi-strike moves - if (gBattleMoves[move].flags & FLAG_TWO_STRIKES) - dmg *= 2; - else if (gBattleMoves[move].flags & FLAG_THREE_STRIKES || (move == MOVE_WATER_SHURIKEN && gBattleMons[battlerAtk].species == SPECIES_GRENINJA_ASH)) - dmg *= 3; + // Handle other multi-strike moves + if (gBattleMoves[move].flags & FLAG_TWO_STRIKES) + dmg *= 2; + else if (gBattleMoves[move].flags & FLAG_THREE_STRIKES || (move == MOVE_WATER_SHURIKEN && gBattleMons[battlerAtk].species == SPECIES_GRENINJA_ASH)) + dmg *= 3; - if (dmg == 0) - dmg = 1; + if (dmg == 0) + dmg = 1; + } } else { diff --git a/src/battle_util.c b/src/battle_util.c index abdeed7569a4..b499600cec01 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -6783,7 +6783,7 @@ static bool32 GetMentalHerbEffect(u8 battlerId) static u8 TryConsumeMirrorHerb(u8 battlerId, bool32 execute) { u8 effect = 0; - + if (gProtectStructs[battlerId].eatMirrorHerb) { gLastUsedItem = gBattleMons[battlerId].item; gBattleScripting.savedBattler = gBattlerAttacker; @@ -8584,7 +8584,10 @@ static u16 CalcMoveBasePower(u16 move, u8 battlerAtk, u8 battlerDef) basePower = gBattleStruct->presentBasePower; break; case EFFECT_TRIPLE_KICK: - basePower *= (4 - gMultiHitCounter); + if (gMultiHitCounter == 0) // Calc damage with max BP for move consideration + basePower *= 6; + else + basePower *= (4 - gMultiHitCounter); break; case EFFECT_SPIT_UP: basePower = 100 * gDisableStructs[battlerAtk].stockpileCounter; From 412f6f53527d306730e3218441c9072dab42ba89 Mon Sep 17 00:00:00 2001 From: Martin Griffin Date: Wed, 31 May 2023 14:38:37 +0100 Subject: [PATCH 424/428] Separate build directory for tests and TESTING define (#3002) * Separate build directory for tests and TESTING define * fixup! Separate build directory for tests and TESTING define * fixup! Separate build directory for tests and TESTING define * fixup! Separate build directory for tests and TESTING define --- .github/workflows/build.yml | 2 ++ Makefile | 30 ++++++++++++++++++++++++------ gflib/malloc.h | 9 +++++++++ include/test_runner.h | 18 +++++++++++++++++- src/recorded_battle.c | 2 +- src/test_runner_stub.c | 35 ----------------------------------- test/test_runner_battle.c | 2 +- 7 files changed, 54 insertions(+), 44 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 5393aa155f6f..a2b93f23bd5f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -50,6 +50,8 @@ jobs: run: make -j${nproc} -O all - name: Test + env: + TEST: 1 run: | make -j${nproc} -O pokeemerald-test.elf make -j${nproc} check diff --git a/Makefile b/Makefile index 7486e41f0d85..05f5d1aa4dd4 100644 --- a/Makefile +++ b/Makefile @@ -41,11 +41,16 @@ GAME_CODE := BPEE MAKER_CODE := 01 REVISION := 0 MODERN ?= 0 +TEST ?= 0 ifeq (modern,$(MAKECMDGOALS)) MODERN := 1 endif +ifeq (check,$(MAKECMDGOALS)) + TEST := 1 +endif + # use arm-none-eabi-cpp for macOS # as macOS's default compiler is clang # and clang's preprocessor will warn on \u @@ -79,6 +84,7 @@ ELF = $(ROM:.gba=.elf) MAP = $(ROM:.gba=.map) SYM = $(ROM:.gba=.sym) +TEST_OBJ_DIR_NAME := build/test TESTELF = $(ROM:.gba=-test.elf) HEADLESSELF = $(ROM:.gba=-test-headless.elf) @@ -119,7 +125,15 @@ LIBPATH := -L "$(dir $(shell $(PATH_MODERNCC) -mthumb -print-file-name=libgcc.a) LIB := $(LIBPATH) -lc -lnosys -lgcc -L../../libagbsyscall -lagbsyscall endif -CPPFLAGS := -iquote include -iquote $(GFLIB_SUBDIR) -Wno-trigraphs -DMODERN=$(MODERN) +ifeq ($(TESTELF),$(MAKECMDGOALS)) + TEST := 1 +endif + +ifeq ($(TEST),1) +OBJ_DIR := $(TEST_OBJ_DIR_NAME) +endif + +CPPFLAGS := -iquote include -iquote $(GFLIB_SUBDIR) -Wno-trigraphs -DMODERN=$(MODERN) -DTESTING=$(TEST) ifneq ($(MODERN),1) CPPFLAGS += -I tools/agbcc/include -I tools/agbcc -nostdinc -undef endif @@ -168,7 +182,7 @@ infoshell = $(foreach line, $(shell $1 | sed "s/ /__SPACE__/g"), $(info $(subst # Disable dependency scanning for clean/tidy/tools # Use a separate minimal makefile for speed # Since we don't need to reload most of this makefile -ifeq (,$(filter-out all rom compare modern check libagbsyscall syms,$(MAKECMDGOALS))) +ifeq (,$(filter-out all rom compare modern check libagbsyscall syms $(TESTELF),$(MAKECMDGOALS))) $(call infoshell, $(MAKE) -f make_tools.mk) else NODEP ?= 1 @@ -178,9 +192,9 @@ endif ifeq (,$(MAKECMDGOALS)) SCAN_DEPS ?= 1 else - # clean, tidy, tools, check-tools, mostlyclean, clean-tools, clean-check-tools, $(TOOLDIRS), $(CHECKTOOLDIRS), tidymodern, tidynonmodern don't even build the ROM + # clean, tidy, tools, check-tools, mostlyclean, clean-tools, clean-check-tools, $(TOOLDIRS), $(CHECKTOOLDIRS), tidymodern, tidynonmodern, tidycheck don't even build the ROM # libagbsyscall does its own thing - ifeq (,$(filter-out clean tidy tools mostlyclean clean-tools $(TOOLDIRS) clean-check-tools $(CHECKTOOLDIRS) tidymodern tidynonmodern libagbsyscall,$(MAKECMDGOALS))) + ifeq (,$(filter-out clean tidy tools mostlyclean clean-tools $(TOOLDIRS) clean-check-tools $(CHECKTOOLDIRS) tidymodern tidynonmodern tidycheck libagbsyscall,$(MAKECMDGOALS))) SCAN_DEPS ?= 0 else SCAN_DEPS ?= 1 @@ -257,7 +271,7 @@ clean-tools: clean-check-tools: @$(foreach tooldir,$(CHECKTOOLDIRS),$(MAKE) clean -C $(tooldir);) -mostlyclean: tidynonmodern tidymodern +mostlyclean: tidynonmodern tidymodern tidycheck rm -f $(SAMPLE_SUBDIR)/*.bin rm -f $(CRY_SUBDIR)/*.bin rm -f $(MID_SUBDIR)/*.s @@ -268,7 +282,7 @@ mostlyclean: tidynonmodern tidymodern rm -f $(AUTO_GEN_TARGETS) @$(MAKE) clean -C libagbsyscall -tidy: tidynonmodern tidymodern +tidy: tidynonmodern tidymodern tidycheck tidynonmodern: rm -f $(ROM_NAME) $(ELF_NAME) $(MAP_NAME) @@ -278,6 +292,10 @@ tidymodern: rm -f $(MODERN_ROM_NAME) $(MODERN_ELF_NAME) $(MODERN_MAP_NAME) rm -rf $(MODERN_OBJ_DIR_NAME) +tidycheck: + rm -f $(TESTELF) $(HEADLESSELF) + rm -rf $(TEST_OBJ_DIR_NAME) + ifneq ($(MODERN),0) $(C_BUILDDIR)/berry_crush.o: override CFLAGS += -Wno-address-of-packed-member endif diff --git a/gflib/malloc.h b/gflib/malloc.h index f484b158064b..d17291b3cdb2 100644 --- a/gflib/malloc.h +++ b/gflib/malloc.h @@ -44,9 +44,18 @@ struct MemBlock extern u8 gHeap[]; +#if TESTING || !defined(NDEBUG) + #define Alloc(size) Alloc_(size, __FILE__ ":" STR(__LINE__)) #define AllocZeroed(size) AllocZeroed_(size, __FILE__ ":" STR(__LINE__)) +#else + +#define Alloc(size) Alloc_(size, NULL) +#define AllocZeroed(size) AllocZeroed_(size, NULL) + +#endif + void *Alloc_(u32 size, const char *location); void *AllocZeroed_(u32 size, const char *location); void Free(void *pointer); diff --git a/include/test_runner.h b/include/test_runner.h index 2fc0a55e3143..27b0d597776d 100644 --- a/include/test_runner.h +++ b/include/test_runner.h @@ -3,6 +3,9 @@ extern const bool8 gTestRunnerEnabled; extern const bool8 gTestRunnerHeadless; + +#if TESTING + extern const bool8 gTestRunnerSkipIsFail; void TestRunner_Battle_RecordAbilityPopUp(u32 battlerId, u32 ability); @@ -12,6 +15,19 @@ void TestRunner_Battle_RecordMessage(const u8 *message); void TestRunner_Battle_RecordStatus1(u32 battlerId, u32 status1); void TestRunner_Battle_AfterLastTurn(void); -void BattleTest_CheckBattleRecordActionType(u32 battlerId, u32 recordIndex, u32 actionType); +void TestRunner_Battle_CheckBattleRecordActionType(u32 battlerId, u32 recordIndex, u32 actionType); + +#else + +#define TestRunner_Battle_RecordAbilityPopUp(...) (void)0 +#define TestRunner_Battle_RecordAnimation(...) (void)0 +#define TestRunner_Battle_RecordHP(...) (void)0 +#define TestRunner_Battle_RecordMessage(...) (void)0 +#define TestRunner_Battle_RecordStatus1(...) (void)0 +#define TestRunner_Battle_AfterLastTurn(...) (void)0 + +#define TestRunner_Battle_CheckBattleRecordActionType(...) (void)0 + +#endif #endif diff --git a/src/recorded_battle.c b/src/recorded_battle.c index 4cfa0e4c0c32..e4b1a55440bb 100644 --- a/src/recorded_battle.c +++ b/src/recorded_battle.c @@ -176,7 +176,7 @@ void RecordedBattle_ClearBattlerAction(u8 battlerId, u8 bytesToClear) u8 RecordedBattle_GetBattlerAction(u32 actionType, u8 battlerId) { if (gTestRunnerEnabled) - BattleTest_CheckBattleRecordActionType(battlerId, sBattlerRecordSizes[battlerId], actionType); + TestRunner_Battle_CheckBattleRecordActionType(battlerId, sBattlerRecordSizes[battlerId], actionType); // Trying to read past array or invalid action byte, battle is over. if (sBattlerRecordSizes[battlerId] >= BATTLER_RECORD_SIZE || sBattleRecords[battlerId][sBattlerRecordSizes[battlerId]] == 0xFF) diff --git a/src/test_runner_stub.c b/src/test_runner_stub.c index 2c8b54020453..9a9452ed21f4 100644 --- a/src/test_runner_stub.c +++ b/src/test_runner_stub.c @@ -9,38 +9,3 @@ const bool8 gTestRunnerEnabled = FALSE; // animations and messages play, which helps when debugging a test. const bool8 gTestRunnerHeadless = FALSE; const bool8 gTestRunnerSkipIsFail = FALSE; - -__attribute__((weak)) -void TestRunner_Battle_RecordAbilityPopUp(u32 battlerId, u32 ability) -{ -} - -__attribute__((weak)) -void TestRunner_Battle_RecordAnimation(u32 animType, u32 animId) -{ -} - -__attribute__((weak)) -void TestRunner_Battle_RecordHP(u32 battlerId, u32 oldHP, u32 newHP) -{ -} - -__attribute__((weak)) -void TestRunner_Battle_RecordMessage(const u8 *string) -{ -} - -__attribute__((weak)) -void TestRunner_Battle_RecordStatus1(u32 battlerId, u32 status1) -{ -} - -__attribute__((weak)) -void TestRunner_Battle_AfterLastTurn(void) -{ -} - -__attribute__((weak)) -void BattleTest_CheckBattleRecordActionType(u32 battlerId, u32 recordIndex, u32 actionType) -{ -} diff --git a/test/test_runner_battle.c b/test/test_runner_battle.c index d69f2125b45c..d1feaee02a91 100644 --- a/test/test_runner_battle.c +++ b/test/test_runner_battle.c @@ -1241,7 +1241,7 @@ static void PushBattlerAction(u32 sourceLine, s32 battlerId, u32 actionType, u32 DATA.recordedBattle.battleRecord[battlerId][recordIndex] = byte; } -void BattleTest_CheckBattleRecordActionType(u32 battlerId, u32 recordIndex, u32 actionType) +void TestRunner_Battle_CheckBattleRecordActionType(u32 battlerId, u32 recordIndex, u32 actionType) { // An illegal move choice will cause the battle to request a new // move slot and target. This detects the move slot. From 23b57050c29258f005d8d74553fa744e02600507 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Thu, 1 Jun 2023 15:28:20 -0400 Subject: [PATCH 425/428] Fix some compressed tilemaps --- .../frontier_logo_center.bin | Bin 428 -> 2048 bytes graphics/pokeblock/use_screen/graph_data.bin | Bin 164 -> 1280 bytes graphics/pokeblock/use_screen/mon_frame.bin | Bin 172 -> 1280 bytes src/battle_transition_frontier.c | 2 +- src/use_pokeblock.c | 4 ++-- 5 files changed, 3 insertions(+), 3 deletions(-) diff --git a/graphics/battle_transitions/frontier_logo_center.bin b/graphics/battle_transitions/frontier_logo_center.bin index 7b9d2af284bc62e16d244945b05f653b5fad0a04..52479134604aba9f512d9ab40a3f033488e53f32 100644 GIT binary patch literal 2048 zcmeIxM-Bop5JXXvbIv)(`ycEt>Hy3P8YCp!GDvKI?u|FET22P@ew(P?*TnpjK0`*{ zeCPZuIr0=JD6gEdt`vtaQldZTg1tM-C#)1ga`e&YM; zsjH6Kwgl_^0YgTNnIwLqu|^td5bUSSm`A-}$x;i&>zSs(e#JWRu}gccRj}W%eYn(b zwF&ly9s8$*y>>S3dA|paoRW-_jyl-2#~aRExN_A+XP5SR@4HX`to8nb-ek@Af^p$>H?Gnh!p zH7aQ|Rn_WlRmUn+sRG17i&Any_sY!eHLtl?k5;yl@=$`0GNeqOC3<)|!{kyyfDo#R z8fvUE2pO<~4CX~tggP2%;&`W|$p-5@MYfkYN{j@43vG0?=}_8iF=33%w$#!^4}HV~ z47C|@z@X0_-4fRGM;PN?$pqdMQ%)F1;|Goka|ZpX&6{Y>3L%+e@nsgA!+f~0ORV10 z6;Df~Zud1d$hP`%%MI5^?eMegu*U(xfqU*;6>Kgpqn}jl-wD5{6`l*~>aK7VfAA0C JcADIt<{L}+yr2L8 diff --git a/graphics/pokeblock/use_screen/graph_data.bin b/graphics/pokeblock/use_screen/graph_data.bin index 5f8f364fc90762c2a6165d60cefc8b7f087b3430..75581f46e235c83b6f875ca1755f0f500efdfc8d 100644 GIT binary patch literal 1280 lcmZQz7zKkj1X_*IA!%+!*WGF~s-Kh)80z6iieE>jS^y?oIp_cY literal 164 zcmWe&U}dmpVEDj@fd3Ip2n$1C{sqQXqYI25l!5a0AM7FWKn8^Sfe|Et#03eUa6wu? Rijg413?zXE5LpHw0036PP#pjO diff --git a/graphics/pokeblock/use_screen/mon_frame.bin b/graphics/pokeblock/use_screen/mon_frame.bin index 4e7c2d4adc325726e191a63c1d77cec62262916b..130dcff29c7480e1a76fea3b75fb1b2b0c32e92a 100644 GIT binary patch literal 1280 ycmZR$$S?{=a0oD7M2Acyg$DCQbjUKQpM(%V4?X6KLo57PFQP*>5_~`KWe)(Jqzlym literal 172 zcmWe&U}dmpxcGq)0skYI5Eh2OKV%gKjEuV;Ffx5m{lJ*O$oznj Date: Fri, 2 Jun 2023 11:56:12 -0400 Subject: [PATCH 426/428] Missing pret improvement that was causing unmatching --- src/pokedex.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/pokedex.c b/src/pokedex.c index 5b0414513154..13fea297954e 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -4552,7 +4552,9 @@ static void DrawFootprint(u8 windowId, u16 dexNum) // so we need 4 iterations to do all 8 pixels. for (j = 0; j < 4; j++) { - u8 tile = ((footprint1bpp >> (2 * j)) & 1 ? 2 : 0); + u8 tile = 0; + if (footprint1bpp & (1 << (2 * j))) + tile |= FOOTPRINT_COLOR_IDX; // Set pixel if (footprint1bpp & (2 << (2 * j))) tile |= FOOTPRINT_COLOR_IDX << 4; // Set pixel footprint4bpp[tileIdx] = tile; From 271bca6a3d5e5848fb5fb9a501ac9765b855718c Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Fri, 2 Jun 2023 11:56:36 -0400 Subject: [PATCH 427/428] Fixed Staraptor using Staravia's footprint --- src/data/graphics/pokemon.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/graphics/pokemon.h b/src/data/graphics/pokemon.h index 673fbb4eea08..56e45283afca 100644 --- a/src/data/graphics/pokemon.h +++ b/src/data/graphics/pokemon.h @@ -6501,7 +6501,7 @@ const u8 gMonFootprint_Prinplup[] = INCBIN_U8("graphics/pokemon/prinplup/footpri const u8 gMonFootprint_Empoleon[] = INCBIN_U8("graphics/pokemon/empoleon/footprint.1bpp"); const u8 gMonFootprint_Starly[] = INCBIN_U8("graphics/pokemon/starly/footprint.1bpp"); const u8 gMonFootprint_Staravia[] = INCBIN_U8("graphics/pokemon/staravia/footprint.1bpp"); -const u8 gMonFootprint_Staraptor[] = INCBIN_U8("graphics/pokemon/staravia/footprint.1bpp"); +const u8 gMonFootprint_Staraptor[] = INCBIN_U8("graphics/pokemon/staraptor/footprint.1bpp"); const u8 gMonFootprint_Bidoof[] = INCBIN_U8("graphics/pokemon/bidoof/footprint.1bpp"); const u8 gMonFootprint_Bibarel[] = INCBIN_U8("graphics/pokemon/bibarel/footprint.1bpp"); const u8 gMonFootprint_Kricketot[] = INCBIN_U8("graphics/pokemon/kricketot/footprint.1bpp"); From 43da48f9928d7eaf4b0f8f9b2167ce928563c5b4 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Fri, 2 Jun 2023 12:22:05 -0400 Subject: [PATCH 428/428] `CpuFastFill` for initializing, thanks SBird --- src/pokedex.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/pokedex.c b/src/pokedex.c index 13fea297954e..c5b8105b2d7b 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -4537,7 +4537,7 @@ static void PrintDecimalNum(u8 windowId, u16 num, u8 left, u8 top) static void DrawFootprint(u8 windowId, u16 dexNum) { - u8 footprint4bpp[TILE_SIZE_4BPP * NUM_FOOTPRINT_TILES] = {0}; + u8 footprint4bpp[TILE_SIZE_4BPP * NUM_FOOTPRINT_TILES]; const u8 *footprintGfx = gMonFootprintTable[NationalPokedexNumToSpecies(dexNum)]; u32 i, j, tileIdx = 0; @@ -4562,6 +4562,10 @@ static void DrawFootprint(u8 windowId, u16 dexNum) } } } + else + { + CpuFastFill(0, footprint4bpp, sizeof(footprint4bpp)); + } CopyToWindowPixelBuffer(windowId, footprint4bpp, sizeof(footprint4bpp), 0); }