diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index cb6e2ff6a3..9c6ccd87d8 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -1352,6 +1352,22 @@ .endm @ callnative macros + .macro savetarget + callnative BS_SaveTarget + .endm + + .macro restoretarget + callnative BS_RestoreTarget + .endm + + .macro saveattacker + callnative BS_SaveAttacker + .endm + + .macro restoreattacker + callnative BS_RestoreAttacker + .endm + .macro metalburstdamagecalculator failInstr:req callnative BS_CalcMetalBurstDmg .4byte \failInstr @@ -1774,14 +1790,6 @@ various \battler, VARIOUS_SWITCHIN_ABILITIES .endm - .macro savetarget - various BS_TARGET, VARIOUS_SAVE_TARGET - .endm - - .macro restoretarget - various BS_TARGET, VARIOUS_RESTORE_TARGET - .endm - .macro instanthpdrop battler:req various \battler, VARIOUS_INSTANT_HP_DROP .endm diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index 2bef0a0858..586698b2f2 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -18,956 +18,6 @@ gMovesWithQuietBGM:: .2byte MOVE_SING, MOVE_PERISH_SONG, MOVE_GRASS_WHISTLE, 0xFFFF - .align 2 -gBattleAnims_Moves:: - .4byte Move_NONE - .4byte Move_POUND - .4byte Move_KARATE_CHOP - .4byte Move_DOUBLE_SLAP - .4byte Move_COMET_PUNCH - .4byte Move_MEGA_PUNCH - .4byte Move_PAY_DAY - .4byte Move_FIRE_PUNCH - .4byte Move_ICE_PUNCH - .4byte Move_THUNDER_PUNCH - .4byte Move_SCRATCH - .4byte Move_VICE_GRIP - .4byte Move_GUILLOTINE - .4byte Move_RAZOR_WIND - .4byte Move_SWORDS_DANCE - .4byte Move_CUT - .4byte Move_GUST - .4byte Move_WING_ATTACK - .4byte Move_WHIRLWIND - .4byte Move_FLY - .4byte Move_BIND - .4byte Move_SLAM - .4byte Move_VINE_WHIP - .4byte Move_STOMP - .4byte Move_DOUBLE_KICK - .4byte Move_MEGA_KICK - .4byte Move_JUMP_KICK - .4byte Move_ROLLING_KICK - .4byte Move_SAND_ATTACK - .4byte Move_HEADBUTT - .4byte Move_HORN_ATTACK - .4byte Move_FURY_ATTACK - .4byte Move_HORN_DRILL - .4byte Move_TACKLE - .4byte Move_BODY_SLAM - .4byte Move_WRAP - .4byte Move_TAKE_DOWN - .4byte Move_THRASH - .4byte Move_DOUBLE_EDGE - .4byte Move_TAIL_WHIP - .4byte Move_POISON_STING - .4byte Move_TWINEEDLE - .4byte Move_PIN_MISSILE - .4byte Move_LEER - .4byte Move_BITE - .4byte Move_GROWL - .4byte Move_ROAR - .4byte Move_SING - .4byte Move_SUPERSONIC - .4byte Move_SONIC_BOOM - .4byte Move_DISABLE - .4byte Move_ACID - .4byte Move_EMBER - .4byte Move_FLAMETHROWER - .4byte Move_MIST - .4byte Move_WATER_GUN - .4byte Move_HYDRO_PUMP - .4byte Move_SURF - .4byte Move_ICE_BEAM - .4byte Move_BLIZZARD - .4byte Move_PSYBEAM - .4byte Move_BUBBLE_BEAM - .4byte Move_AURORA_BEAM - .4byte Move_HYPER_BEAM - .4byte Move_PECK - .4byte Move_DRILL_PECK - .4byte Move_SUBMISSION - .4byte Move_LOW_KICK - .4byte Move_COUNTER - .4byte Move_SEISMIC_TOSS - .4byte Move_STRENGTH - .4byte Move_ABSORB - .4byte Move_MEGA_DRAIN - .4byte Move_LEECH_SEED - .4byte Move_GROWTH - .4byte Move_RAZOR_LEAF - .4byte Move_SOLAR_BEAM - .4byte Move_POISON_POWDER - .4byte Move_STUN_SPORE - .4byte Move_SLEEP_POWDER - .4byte Move_PETAL_DANCE - .4byte Move_STRING_SHOT - .4byte Move_DRAGON_RAGE - .4byte Move_FIRE_SPIN - .4byte Move_THUNDER_SHOCK - .4byte Move_THUNDERBOLT - .4byte Move_THUNDER_WAVE - .4byte Move_THUNDER - .4byte Move_ROCK_THROW - .4byte Move_EARTHQUAKE - .4byte Move_FISSURE - .4byte Move_DIG - .4byte Move_TOXIC - .4byte Move_CONFUSION - .4byte Move_PSYCHIC - .4byte Move_HYPNOSIS - .4byte Move_MEDITATE - .4byte Move_AGILITY - .4byte Move_QUICK_ATTACK - .4byte Move_RAGE - .4byte Move_TELEPORT - .4byte Move_NIGHT_SHADE - .4byte Move_MIMIC - .4byte Move_SCREECH - .4byte Move_DOUBLE_TEAM - .4byte Move_RECOVER - .4byte Move_HARDEN - .4byte Move_MINIMIZE - .4byte Move_SMOKESCREEN - .4byte Move_CONFUSE_RAY - .4byte Move_WITHDRAW - .4byte Move_DEFENSE_CURL - .4byte Move_BARRIER - .4byte Move_LIGHT_SCREEN - .4byte Move_HAZE - .4byte Move_REFLECT - .4byte Move_FOCUS_ENERGY - .4byte Move_BIDE - .4byte Move_METRONOME - .4byte Move_MIRROR_MOVE @ doesnt have an actual animation - .4byte Move_SELF_DESTRUCT - .4byte Move_EGG_BOMB - .4byte Move_LICK - .4byte Move_SMOG - .4byte Move_SLUDGE - .4byte Move_BONE_CLUB - .4byte Move_FIRE_BLAST - .4byte Move_WATERFALL - .4byte Move_CLAMP - .4byte Move_SWIFT - .4byte Move_SKULL_BASH - .4byte Move_SPIKE_CANNON - .4byte Move_CONSTRICT - .4byte Move_AMNESIA - .4byte Move_KINESIS - .4byte Move_SOFT_BOILED - .4byte Move_HIGH_JUMP_KICK - .4byte Move_GLARE - .4byte Move_DREAM_EATER - .4byte Move_POISON_GAS - .4byte Move_BARRAGE - .4byte Move_LEECH_LIFE - .4byte Move_LOVELY_KISS - .4byte Move_SKY_ATTACK - .4byte Move_TRANSFORM - .4byte Move_BUBBLE - .4byte Move_DIZZY_PUNCH - .4byte Move_SPORE - .4byte Move_FLASH - .4byte Move_PSYWAVE - .4byte Move_SPLASH - .4byte Move_ACID_ARMOR - .4byte Move_CRABHAMMER - .4byte Move_EXPLOSION - .4byte Move_FURY_SWIPES - .4byte Move_BONEMERANG - .4byte Move_REST - .4byte Move_ROCK_SLIDE - .4byte Move_HYPER_FANG - .4byte Move_SHARPEN - .4byte Move_CONVERSION - .4byte Move_TRI_ATTACK - .4byte Move_SUPER_FANG - .4byte Move_SLASH - .4byte Move_SUBSTITUTE - .4byte Move_STRUGGLE - .4byte Move_SKETCH - .4byte Move_TRIPLE_KICK - .4byte Move_THIEF - .4byte Move_SPIDER_WEB - .4byte Move_MIND_READER - .4byte Move_NIGHTMARE - .4byte Move_FLAME_WHEEL - .4byte Move_SNORE - .4byte Move_CURSE - .4byte Move_FLAIL - .4byte Move_CONVERSION_2 - .4byte Move_AEROBLAST - .4byte Move_COTTON_SPORE - .4byte Move_REVERSAL - .4byte Move_SPITE - .4byte Move_POWDER_SNOW - .4byte Move_PROTECT - .4byte Move_MACH_PUNCH - .4byte Move_SCARY_FACE - .4byte Move_FAINT_ATTACK - .4byte Move_SWEET_KISS - .4byte Move_BELLY_DRUM - .4byte Move_SLUDGE_BOMB - .4byte Move_MUD_SLAP - .4byte Move_OCTAZOOKA - .4byte Move_SPIKES - .4byte Move_ZAP_CANNON - .4byte Move_FORESIGHT - .4byte Move_DESTINY_BOND - .4byte Move_PERISH_SONG - .4byte Move_ICY_WIND - .4byte Move_DETECT - .4byte Move_BONE_RUSH - .4byte Move_LOCK_ON - .4byte Move_OUTRAGE - .4byte Move_SANDSTORM - .4byte Move_GIGA_DRAIN - .4byte Move_ENDURE - .4byte Move_CHARM - .4byte Move_ROLLOUT - .4byte Move_FALSE_SWIPE - .4byte Move_SWAGGER - .4byte Move_MILK_DRINK - .4byte Move_SPARK - .4byte Move_FURY_CUTTER - .4byte Move_STEEL_WING - .4byte Move_MEAN_LOOK - .4byte Move_ATTRACT - .4byte Move_SLEEP_TALK - .4byte Move_HEAL_BELL - .4byte Move_RETURN - .4byte Move_PRESENT - .4byte Move_FRUSTRATION - .4byte Move_SAFEGUARD - .4byte Move_PAIN_SPLIT - .4byte Move_SACRED_FIRE - .4byte Move_MAGNITUDE - .4byte Move_DYNAMIC_PUNCH - .4byte Move_MEGAHORN - .4byte Move_DRAGON_BREATH - .4byte Move_BATON_PASS - .4byte Move_ENCORE - .4byte Move_PURSUIT - .4byte Move_RAPID_SPIN - .4byte Move_SWEET_SCENT - .4byte Move_IRON_TAIL - .4byte Move_METAL_CLAW - .4byte Move_VITAL_THROW - .4byte Move_MORNING_SUN - .4byte Move_SYNTHESIS - .4byte Move_MOONLIGHT - .4byte Move_HIDDEN_POWER - .4byte Move_CROSS_CHOP - .4byte Move_TWISTER - .4byte Move_RAIN_DANCE - .4byte Move_SUNNY_DAY - .4byte Move_CRUNCH - .4byte Move_MIRROR_COAT - .4byte Move_PSYCH_UP - .4byte Move_EXTREME_SPEED - .4byte Move_ANCIENT_POWER - .4byte Move_SHADOW_BALL - .4byte Move_FUTURE_SIGHT - .4byte Move_ROCK_SMASH - .4byte Move_WHIRLPOOL - .4byte Move_BEAT_UP - .4byte Move_FAKE_OUT - .4byte Move_UPROAR - .4byte Move_STOCKPILE - .4byte Move_SPIT_UP - .4byte Move_SWALLOW - .4byte Move_HEAT_WAVE - .4byte Move_HAIL - .4byte Move_TORMENT - .4byte Move_FLATTER - .4byte Move_WILL_O_WISP - .4byte Move_MEMENTO - .4byte Move_FACADE - .4byte Move_FOCUS_PUNCH - .4byte Move_SMELLING_SALTS - .4byte Move_FOLLOW_ME - .4byte Move_NATURE_POWER - .4byte Move_CHARGE - .4byte Move_TAUNT - .4byte Move_HELPING_HAND - .4byte Move_TRICK - .4byte Move_ROLE_PLAY - .4byte Move_WISH - .4byte Move_ASSIST - .4byte Move_INGRAIN - .4byte Move_SUPERPOWER - .4byte Move_MAGIC_COAT - .4byte Move_RECYCLE - .4byte Move_REVENGE - .4byte Move_BRICK_BREAK - .4byte Move_YAWN - .4byte Move_KNOCK_OFF - .4byte Move_ENDEAVOR - .4byte Move_ERUPTION - .4byte Move_SKILL_SWAP - .4byte Move_IMPRISON - .4byte Move_REFRESH - .4byte Move_GRUDGE - .4byte Move_SNATCH - .4byte Move_SECRET_POWER - .4byte Move_DIVE - .4byte Move_ARM_THRUST - .4byte Move_CAMOUFLAGE - .4byte Move_TAIL_GLOW - .4byte Move_LUSTER_PURGE - .4byte Move_MIST_BALL - .4byte Move_FEATHER_DANCE - .4byte Move_TEETER_DANCE - .4byte Move_BLAZE_KICK - .4byte Move_MUD_SPORT - .4byte Move_ICE_BALL - .4byte Move_NEEDLE_ARM - .4byte Move_SLACK_OFF - .4byte Move_HYPER_VOICE - .4byte Move_POISON_FANG - .4byte Move_CRUSH_CLAW - .4byte Move_BLAST_BURN - .4byte Move_HYDRO_CANNON - .4byte Move_METEOR_MASH - .4byte Move_ASTONISH - .4byte Move_WEATHER_BALL - .4byte Move_AROMATHERAPY - .4byte Move_FAKE_TEARS - .4byte Move_AIR_CUTTER - .4byte Move_OVERHEAT - .4byte Move_ODOR_SLEUTH - .4byte Move_ROCK_TOMB - .4byte Move_SILVER_WIND - .4byte Move_METAL_SOUND - .4byte Move_GRASS_WHISTLE - .4byte Move_TICKLE - .4byte Move_COSMIC_POWER - .4byte Move_WATER_SPOUT - .4byte Move_SIGNAL_BEAM - .4byte Move_SHADOW_PUNCH - .4byte Move_EXTRASENSORY - .4byte Move_SKY_UPPERCUT - .4byte Move_SAND_TOMB - .4byte Move_SHEER_COLD - .4byte Move_MUDDY_WATER - .4byte Move_BULLET_SEED - .4byte Move_AERIAL_ACE - .4byte Move_ICICLE_SPEAR - .4byte Move_IRON_DEFENSE - .4byte Move_BLOCK - .4byte Move_HOWL - .4byte Move_DRAGON_CLAW - .4byte Move_FRENZY_PLANT - .4byte Move_BULK_UP - .4byte Move_BOUNCE - .4byte Move_MUD_SHOT - .4byte Move_POISON_TAIL - .4byte Move_COVET - .4byte Move_VOLT_TACKLE - .4byte Move_MAGICAL_LEAF - .4byte Move_WATER_SPORT - .4byte Move_CALM_MIND - .4byte Move_LEAF_BLADE - .4byte Move_DRAGON_DANCE - .4byte Move_ROCK_BLAST - .4byte Move_SHOCK_WAVE - .4byte Move_WATER_PULSE - .4byte Move_DOOM_DESIRE - .4byte Move_PSYCHO_BOOST -@@@@@@@@@@@@ GEN 4 @@@@@@@@@@@@ - .4byte Move_ROOST - .4byte Move_GRAVITY - .4byte Move_MIRACLE_EYE - .4byte Move_WAKE_UP_SLAP - .4byte Move_HAMMER_ARM - .4byte Move_GYRO_BALL - .4byte Move_HEALING_WISH - .4byte Move_BRINE - .4byte Move_NATURAL_GIFT - .4byte Move_FEINT - .4byte Move_PLUCK - .4byte Move_TAILWIND - .4byte Move_ACUPRESSURE - .4byte Move_METAL_BURST - .4byte Move_U_TURN - .4byte Move_CLOSE_COMBAT - .4byte Move_PAYBACK - .4byte Move_ASSURANCE - .4byte Move_EMBARGO - .4byte Move_FLING - .4byte Move_PSYCHO_SHIFT - .4byte Move_TRUMP_CARD - .4byte Move_HEAL_BLOCK - .4byte Move_WRING_OUT - .4byte Move_POWER_TRICK - .4byte Move_GASTRO_ACID - .4byte Move_LUCKY_CHANT - .4byte Move_ME_FIRST - .4byte Move_COPYCAT - .4byte Move_POWER_SWAP - .4byte Move_GUARD_SWAP - .4byte Move_PUNISHMENT - .4byte Move_LAST_RESORT - .4byte Move_WORRY_SEED - .4byte Move_SUCKER_PUNCH - .4byte Move_TOXIC_SPIKES - .4byte Move_HEART_SWAP - .4byte Move_AQUA_RING - .4byte Move_MAGNET_RISE - .4byte Move_FLARE_BLITZ - .4byte Move_FORCE_PALM - .4byte Move_AURA_SPHERE - .4byte Move_ROCK_POLISH - .4byte Move_POISON_JAB - .4byte Move_DARK_PULSE - .4byte Move_NIGHT_SLASH - .4byte Move_AQUA_TAIL - .4byte Move_SEED_BOMB - .4byte Move_AIR_SLASH - .4byte Move_XSCISSOR - .4byte Move_BUG_BUZZ - .4byte Move_DRAGON_PULSE - .4byte Move_DRAGON_RUSH - .4byte Move_POWER_GEM - .4byte Move_DRAIN_PUNCH - .4byte Move_VACUUM_WAVE - .4byte Move_FOCUS_BLAST - .4byte Move_ENERGY_BALL - .4byte Move_BRAVE_BIRD - .4byte Move_EARTH_POWER - .4byte Move_SWITCHEROO - .4byte Move_GIGA_IMPACT - .4byte Move_NASTY_PLOT - .4byte Move_BULLET_PUNCH - .4byte Move_AVALANCHE - .4byte Move_ICE_SHARD - .4byte Move_SHADOW_CLAW - .4byte Move_THUNDER_FANG - .4byte Move_ICE_FANG - .4byte Move_FIRE_FANG - .4byte Move_SHADOW_SNEAK - .4byte Move_MUD_BOMB - .4byte Move_PSYCHO_CUT - .4byte Move_ZEN_HEADBUTT - .4byte Move_MIRROR_SHOT - .4byte Move_FLASH_CANNON - .4byte Move_ROCK_CLIMB - .4byte Move_DEFOG - .4byte Move_TRICK_ROOM - .4byte Move_DRACO_METEOR - .4byte Move_DISCHARGE - .4byte Move_LAVA_PLUME - .4byte Move_LEAF_STORM - .4byte Move_POWER_WHIP - .4byte Move_ROCK_WRECKER - .4byte Move_CROSS_POISON - .4byte Move_GUNK_SHOT - .4byte Move_IRON_HEAD - .4byte Move_MAGNET_BOMB - .4byte Move_STONE_EDGE - .4byte Move_CAPTIVATE - .4byte Move_STEALTH_ROCK - .4byte Move_GRASS_KNOT - .4byte Move_CHATTER - .4byte Move_JUDGMENT - .4byte Move_BUG_BITE - .4byte Move_CHARGE_BEAM - .4byte Move_WOOD_HAMMER - .4byte Move_AQUA_JET - .4byte Move_ATTACK_ORDER - .4byte Move_DEFEND_ORDER - .4byte Move_HEAL_ORDER - .4byte Move_HEAD_SMASH - .4byte Move_DOUBLE_HIT - .4byte Move_ROAR_OF_TIME - .4byte Move_SPACIAL_REND - .4byte Move_LUNAR_DANCE - .4byte Move_CRUSH_GRIP - .4byte Move_MAGMA_STORM - .4byte Move_DARK_VOID - .4byte Move_SEED_FLARE - .4byte Move_OMINOUS_WIND - .4byte Move_SHADOW_FORCE -@@@@@@@@@@@@ GEN 5 @@@@@@@@@@@@ - .4byte Move_HONE_CLAWS - .4byte Move_WIDE_GUARD - .4byte Move_GUARD_SPLIT - .4byte Move_POWER_SPLIT - .4byte Move_WONDER_ROOM - .4byte Move_PSYSHOCK - .4byte Move_VENOSHOCK - .4byte Move_AUTOTOMIZE - .4byte Move_RAGE_POWDER - .4byte Move_TELEKINESIS - .4byte Move_MAGIC_ROOM - .4byte Move_SMACK_DOWN - .4byte Move_STORM_THROW - .4byte Move_FLAME_BURST - .4byte Move_SLUDGE_WAVE - .4byte Move_QUIVER_DANCE - .4byte Move_HEAVY_SLAM - .4byte Move_SYCHRONOISE - .4byte Move_ELECTRO_BALL - .4byte Move_SOAK - .4byte Move_FLAME_CHARGE - .4byte Move_COIL - .4byte Move_LOW_SWEEP - .4byte Move_ACID_SPRAY - .4byte Move_FOUL_PLAY - .4byte Move_SIMPLE_BEAM - .4byte Move_ENTRAINMENT - .4byte Move_AFTER_YOU - .4byte Move_ROUND - .4byte Move_ECHOED_VOICE - .4byte Move_CHIP_AWAY - .4byte Move_CLEAR_SMOG - .4byte Move_STORED_POWER - .4byte Move_QUICK_GUARD - .4byte Move_ALLY_SWITCH - .4byte Move_SCALD - .4byte Move_SHELL_SMASH - .4byte Move_HEAL_PULSE - .4byte Move_HEX - .4byte Move_SKY_DROP - .4byte Move_SHIFT_GEAR - .4byte Move_CIRCLE_THROW - .4byte Move_INCINERATE - .4byte Move_QUASH - .4byte Move_ACROBATICS - .4byte Move_REFLECT_TYPE - .4byte Move_RETALIATE - .4byte Move_FINAL_GAMBIT - .4byte Move_BESTOW - .4byte Move_INFERNO - .4byte Move_WATER_PLEDGE - .4byte Move_FIRE_PLEDGE - .4byte Move_GRASS_PLEDGE - .4byte Move_VOLT_SWITCH - .4byte Move_STRUGGLE_BUG - .4byte Move_BULLDOZE - .4byte Move_FROST_BREATH - .4byte Move_DRAGON_TAIL - .4byte Move_WORK_UP - .4byte Move_ELECTROWEB - .4byte Move_WILD_CHARGE - .4byte Move_DRILL_RUN - .4byte Move_DUAL_CHOP - .4byte Move_HEART_STAMP - .4byte Move_HORN_LEECH - .4byte Move_SACRED_SWORD - .4byte Move_RAZOR_SHELL - .4byte Move_HEAT_CRASH - .4byte Move_LEAF_TORNADO - .4byte Move_STEAMROLLER - .4byte Move_COTTON_GUARD - .4byte Move_NIGHT_DAZE - .4byte Move_PSYSTRIKE - .4byte Move_TAIL_SLAP - .4byte Move_HURRICANE - .4byte Move_HEAD_CHARGE - .4byte Move_GEAR_GRIND - .4byte Move_SEARING_SHOT - .4byte Move_TECHNO_BLAST - .4byte Move_RELIC_SONG - .4byte Move_SECRET_SWORD - .4byte Move_GLACIATE - .4byte Move_BOLT_STRIKE - .4byte Move_BLUE_FLARE - .4byte Move_FIERY_DANCE - .4byte Move_FREEZE_SHOCK - .4byte Move_ICE_BURN - .4byte Move_SNARL - .4byte Move_ICICLE_CRASH - .4byte Move_V_CREATE - .4byte Move_FUSION_FLARE - .4byte Move_FUSION_BOLT -@@@@@@@@@@@@ GEN 6 @@@@@@@@@@@@ - .4byte Move_FLYING_PRESS - .4byte Move_MAT_BLOCK - .4byte Move_BELCH - .4byte Move_ROTOTILLER - .4byte Move_STICKY_WEB - .4byte Move_FELL_STINGER - .4byte Move_PHANTOM_FORCE - .4byte Move_TRICK_OR_TREAT - .4byte Move_NOBLE_ROAR - .4byte Move_ION_DELUGE - .4byte Move_PARABOLIC_CHARGE - .4byte Move_FORESTS_CURSE - .4byte Move_PETAL_BLIZZARD - .4byte Move_FREEZE_DRY - .4byte Move_DISARMING_VOICE - .4byte Move_PARTING_SHOT - .4byte Move_TOPSY_TURVY - .4byte Move_DRAINING_KISS - .4byte Move_CRAFTY_SHIELD - .4byte Move_FLOWER_SHIELD - .4byte Move_GRASSY_TERRAIN - .4byte Move_MISTY_TERRAIN - .4byte Move_ELECTRIFY - .4byte Move_PLAY_ROUGH - .4byte Move_FAIRY_WIND - .4byte Move_MOONBLAST - .4byte Move_BOOMBURST - .4byte Move_FAIRY_LOCK - .4byte Move_KINGS_SHIELD - .4byte Move_PLAY_NICE - .4byte Move_CONFIDE - .4byte Move_DIAMOND_STORM - .4byte Move_STEAM_ERUPTION - .4byte Move_HYPERSPACE_HOLE - .4byte Move_WATER_SHURIKEN - .4byte Move_MYSTICAL_FIRE - .4byte Move_SPIKY_SHIELD - .4byte Move_AROMATIC_MIST - .4byte Move_EERIE_IMPULSE - .4byte Move_VENOM_DRENCH - .4byte Move_POWDER - .4byte Move_GEOMANCY - .4byte Move_MAGNETIC_FLUX - .4byte Move_HAPPY_HOUR - .4byte Move_ELECTRIC_TERRAIN - .4byte Move_DAZZLING_GLEAM - .4byte Move_CELEBRATE - .4byte Move_HOLD_HANDS - .4byte Move_BABY_DOLL_EYES - .4byte Move_NUZZLE - .4byte Move_HOLD_BACK - .4byte Move_INFESTATION - .4byte Move_POWER_UP_PUNCH - .4byte Move_OBLIVION_WING - .4byte Move_THOUSAND_ARROWS - .4byte Move_THOUSAND_WAVES - .4byte Move_LANDS_WRATH - .4byte Move_LIGHT_OF_RUIN - .4byte Move_ORIGIN_PULSE - .4byte Move_PRECIPICE_BLADES - .4byte Move_DRAGON_ASCENT - .4byte Move_HYPERSPACE_FURY -@@@@@@@@@@@@ GEN 7 @@@@@@@@@@@@ - .4byte Move_SHORE_UP - .4byte Move_FIRST_IMPRESSION - .4byte Move_BANEFUL_BUNKER - .4byte Move_SPIRIT_SHACKLE - .4byte Move_DARKEST_LARIAT - .4byte Move_SPARKLING_ARIA - .4byte Move_ICE_HAMMER - .4byte Move_FLORAL_HEALING - .4byte Move_HIGH_HORSEPOWER - .4byte Move_STRENGTH_SAP - .4byte Move_SOLAR_BLADE - .4byte Move_LEAFAGE - .4byte Move_SPOTLIGHT - .4byte Move_TOXIC_THREAD - .4byte Move_LASER_FOCUS - .4byte Move_GEAR_UP - .4byte Move_THROAT_CHOP - .4byte Move_POLLEN_PUFF - .4byte Move_ANCHOR_SHOT - .4byte Move_PSYCHIC_TERRAIN - .4byte Move_LUNGE - .4byte Move_FIRE_LASH - .4byte Move_POWER_TRIP - .4byte Move_BURN_UP - .4byte Move_SPEED_SWAP - .4byte Move_SMART_STRIKE - .4byte Move_PURIFY - .4byte Move_REVELATION_DANCE - .4byte Move_CORE_ENFORCER - .4byte Move_TROP_KICK - .4byte Move_INSTRUCT - .4byte Move_BEAK_BLAST - .4byte Move_CLANGING_SCALES - .4byte Move_DRAGON_HAMMER - .4byte Move_BRUTAL_SWING - .4byte Move_AURORA_VEIL - .4byte Move_SHELL_TRAP - .4byte Move_FLEUR_CANNON - .4byte Move_PSYCHIC_FANGS - .4byte Move_STOMPING_TANTRUM - .4byte Move_SHADOW_BONE - .4byte Move_ACCELEROCK - .4byte Move_LIQUIDATION - .4byte Move_PRISMATIC_LASER - .4byte Move_SPECTRAL_THIEF - .4byte Move_SUNSTEEL_STRIKE - .4byte Move_MOONGEIST_BEAM - .4byte Move_TEARFUL_LOOK - .4byte Move_ZING_ZAP - .4byte Move_NATURES_MADNESS - .4byte Move_MULTI_ATTACK - .4byte Move_MIND_BLOWN - .4byte Move_PLASMA_FISTS - .4byte Move_PHOTON_GEYSER - .4byte Move_ZIPPY_ZAP - .4byte Move_SPLISHY_SPLASH - .4byte Move_FLOATY_FALL - .4byte Move_PIKA_PAPOW - .4byte Move_BOUNCY_BUBBLE - .4byte Move_BUZZY_BUZZ - .4byte Move_SIZZLY_SLIDE - .4byte Move_GLITZY_GLOW - .4byte Move_BADDY_BAD - .4byte Move_SAPPY_SEED - .4byte Move_FREEZY_FROST - .4byte Move_SPARKLY_SWIRL - .4byte Move_VEEVEE_VOLLEY - .4byte Move_DOUBLE_IRON_BASH -@@@@@@@@@@@@ GEN 8 @@@@@@@@@@@@ - .4byte Move_DYNAMAX_CANNON - .4byte Move_SNIPE_SHOT - .4byte Move_JAW_LOCK - .4byte Move_STUFF_CHEEKS - .4byte Move_NO_RETREAT - .4byte Move_TAR_SHOT - .4byte Move_MAGIC_POWDER - .4byte Move_DRAGON_DARTS - .4byte Move_TEATIME - .4byte Move_OCTOLOCK - .4byte Move_BOLT_BEAK - .4byte Move_FISHIOUS_REND - .4byte Move_COURT_CHANGE - .4byte Move_CLANGOROUS_SOUL - .4byte Move_BODY_PRESS - .4byte Move_DECORATE - .4byte Move_DRUM_BEATING - .4byte Move_SNAP_TRAP - .4byte Move_PYRO_BALL - .4byte Move_BEHEMOTH_BLADE - .4byte Move_BEHEMOTH_BASH - .4byte Move_AURA_WHEEL - .4byte Move_BREAKING_SWIPE - .4byte Move_BRANCH_POKE - .4byte Move_OVERDRIVE - .4byte Move_APPLE_ACID - .4byte Move_GRAV_APPLE - .4byte Move_SPIRIT_BREAK - .4byte Move_STRANGE_STEAM - .4byte Move_LIFE_DEW - .4byte Move_OBSTRUCT - .4byte Move_FALSE_SURRENDER - .4byte Move_METEOR_ASSAULT - .4byte Move_ETERNA_BEAM - .4byte Move_STEEL_BEAM - .4byte Move_EXPANDING_FORCE - .4byte Move_STEEL_ROLLER - .4byte Move_SCALE_SHOT - .4byte Move_METEOR_BEAM - .4byte Move_SHELL_SIDE_ARM - .4byte Move_MISTY_EXPLOSION - .4byte Move_GRASSY_GLIDE - .4byte Move_RISING_VOLTAGE - .4byte Move_TERRAIN_PULSE - .4byte Move_SKITTER_SMACK - .4byte Move_BURNING_JEALOUSY - .4byte Move_LASH_OUT - .4byte Move_POLTERGEIST - .4byte Move_CORROSIVE_GAS - .4byte Move_COACHING - .4byte Move_FLIP_TURN - .4byte Move_TRIPLE_AXEL - .4byte Move_DUAL_WINGBEAT - .4byte Move_SCORCHING_SANDS - .4byte Move_JUNGLE_HEALING - .4byte Move_WICKED_BLOW - .4byte Move_SURGING_STRIKES - .4byte Move_THUNDER_CAGE - .4byte Move_DRAGON_ENERGY - .4byte Move_FREEZING_GLARE - .4byte Move_FIERY_WRATH - .4byte Move_THUNDEROUS_KICK - .4byte Move_GLACIAL_LANCE - .4byte Move_ASTRAL_BARRAGE - .4byte Move_EERIE_SPELL -@@@@ LA MOVES - .4byte Move_DIRE_CLAW - .4byte Move_PSYSHIELD_BASH - .4byte Move_POWER_SHIFT - .4byte Move_STONE_AXE - .4byte Move_SPRINGTIDE_STORM - .4byte Move_MYSTICAL_POWER - .4byte Move_RAGING_FURY - .4byte Move_WAVE_CRASH - .4byte Move_CHLOROBLAST - .4byte Move_MOUNTAIN_GALE - .4byte Move_VICTORY_DANCE - .4byte Move_HEADLONG_RUSH - .4byte Move_BARB_BARRAGE - .4byte Move_ESPER_WING - .4byte Move_BITTER_MALICE - .4byte Move_SHELTER - .4byte Move_TRIPLE_ARROWS - .4byte Move_INFERNAL_PARADE - .4byte Move_CEASELESS_EDGE - .4byte Move_BLEAKWIND_STORM - .4byte Move_WILDBOLT_STORM - .4byte Move_SANDSEAR_STORM - .4byte Move_LUNAR_BLESSING - .4byte Move_TAKE_HEART -@@@@@@@@@@@@ GEN 9 @@@@@@@@@@@@ - .4byte Move_TERA_BLAST - .4byte Move_SILK_TRAP - .4byte Move_AXE_KICK - .4byte Move_LAST_RESPECTS - .4byte Move_LUMINA_CRASH - .4byte Move_ORDER_UP - .4byte Move_JET_PUNCH - .4byte Move_SPICY_EXTRACT - .4byte Move_SPIN_OUT - .4byte Move_POPULATION_BOMB - .4byte Move_ICE_SPINNER - .4byte Move_GLAIVE_RUSH - .4byte Move_REVIVAL_BLESSING - .4byte Move_SALT_CURE - .4byte Move_TRIPLE_DIVE - .4byte Move_MORTAL_SPIN - .4byte Move_DOODLE - .4byte Move_FILLET_AWAY - .4byte Move_KOWTOW_CLEAVE - .4byte Move_FLOWER_TRICK - .4byte Move_TORCH_SONG - .4byte Move_AQUA_STEP - .4byte Move_RAGING_BULL - .4byte Move_MAKE_IT_RAIN - .4byte Move_RUINATION - .4byte Move_COLLISION_COURSE - .4byte Move_ELECTRO_DRIFT - .4byte Move_SHED_TAIL - .4byte Move_CHILLY_RECEPTION - .4byte Move_TIDY_UP - .4byte Move_SNOWSCAPE - .4byte Move_POUNCE - .4byte Move_TRAILBLAZE - .4byte Move_CHILLING_WATER - .4byte Move_HYPER_DRILL - .4byte Move_TWIN_BEAM - .4byte Move_RAGE_FIST - .4byte Move_ARMOR_CANNON - .4byte Move_BITTER_BLADE - .4byte Move_DOUBLE_SHOCK - .4byte Move_GIGATON_HAMMER - .4byte Move_COMEUPPANCE - .4byte Move_AQUA_CUTTER - .4byte Move_BLAZING_TORQUE - .4byte Move_WICKED_TORQUE - .4byte Move_NOXIOUS_TORQUE - .4byte Move_COMBAT_TORQUE - .4byte Move_MAGICAL_TORQUE - .4byte Move_PSYBLADE - .4byte Move_HYDRO_STEAM - .4byte Move_BLOOD_MOON - .4byte Move_MATCHA_GOTCHA - .4byte Move_SYRUP_BOMB - .4byte Move_IVY_CUDGEL - .4byte Move_ELECTRO_SHOT - .4byte Move_TERA_STARSTORM - .4byte Move_FICKLE_BEAM - .4byte Move_BURNING_BULWARK - .4byte Move_THUNDERCLAP - .4byte Move_MIGHTY_CLEAVE - .4byte Move_TACHYON_CUTTER - .4byte Move_HARD_PRESS - .4byte Move_DRAGON_CHEER - .4byte Move_ALLURING_VOICE - .4byte Move_TEMPER_FLARE - .4byte Move_SUPERCELL_SLAM - .4byte Move_PSYCHIC_NOISE - .4byte Move_UPPER_HAND - .4byte Move_MALIGNANT_CHAIN -@@@@ Z MOVES - .4byte Move_BREAKNECK_BLITZ - .4byte Move_ALL_OUT_PUMMELING - .4byte Move_SUPERSONIC_SKYSTRIKE - .4byte Move_ACID_DOWNPOUR - .4byte Move_TECTONIC_RAGE - .4byte Move_CONTINENTAL_CRUSH - .4byte Move_SAVAGE_SPIN_OUT - .4byte Move_NEVER_ENDING_NIGHTMARE - .4byte Move_CORKSCREW_CRASH - .4byte Move_INFERNO_OVERDRIVE - .4byte Move_HYDRO_VORTEX - .4byte Move_BLOOM_DOOM - .4byte Move_GIGAVOLT_HAVOC - .4byte Move_SHATTERED_PSYCHE - .4byte Move_SUBZERO_SLAMMER - .4byte Move_DEVASTATING_DRAKE - .4byte Move_BLACK_HOLE_ECLIPSE - .4byte Move_TWINKLE_TACKLE - .4byte Move_CATASTROPIKA - .4byte Move_10000000_VOLT_THUNDERBOLT - .4byte Move_STOKED_SPARKSURFER - .4byte Move_EXTREME_EVOBOOST - .4byte Move_PULVERIZING_PANCAKE - .4byte Move_GENESIS_SUPERNOVA - .4byte Move_SINISTER_ARROW_RAID - .4byte Move_MALICIOUS_MOONSAULT - .4byte Move_OCEANIC_OPERETTA - .4byte Move_SPLINTERED_STORMSHARDS - .4byte Move_LETS_SNUGGLE_FOREVER - .4byte Move_CLANGOROUS_SOULBLAZE - .4byte Move_GUARDIAN_OF_ALOLA - .4byte Move_SEARING_SUNRAZE_SMASH - .4byte Move_MENACING_MOONRAZE_MAELSTROM - .4byte Move_LIGHT_THAT_BURNS_THE_SKY - .4byte Move_SOUL_STEALING_7_STAR_STRIKE -@@@@ MAX MOVES - .4byte Move_MAX_GUARD - .4byte Move_MAX_STRIKE - .4byte Move_MAX_KNUCKLE - .4byte Move_MAX_AIRSTREAM - .4byte Move_MAX_OOZE - .4byte Move_MAX_QUAKE - .4byte Move_MAX_ROCKFALL - .4byte Move_MAX_FLUTTERBY - .4byte Move_MAX_PHANTASM - .4byte Move_MAX_STEELSPIKE - .4byte Move_MAX_FLARE - .4byte Move_MAX_GEYSER - .4byte Move_MAX_OVERGROWTH - .4byte Move_MAX_LIGHTNING - .4byte Move_MAX_MINDSTORM - .4byte Move_MAX_HAILSTORM - .4byte Move_MAX_WYRMWIND - .4byte Move_MAX_DARKNESS - .4byte Move_MAX_STARFALL -@@@@ G-MAX MOVES - .4byte Move_G_MAX_VINE_LASH - .4byte Move_G_MAX_WILDFIRE - .4byte Move_G_MAX_CANNONADE - .4byte Move_G_MAX_BEFUDDLE - .4byte Move_G_MAX_VOLT_CRASH - .4byte Move_G_MAX_GOLD_RUSH - .4byte Move_G_MAX_CHI_STRIKE - .4byte Move_G_MAX_TERROR - .4byte Move_G_MAX_FOAM_BURST - .4byte Move_G_MAX_RESONANCE - .4byte Move_G_MAX_CUDDLE - .4byte Move_G_MAX_REPLENISH - .4byte Move_G_MAX_MALODOR - .4byte Move_G_MAX_MELTDOWN - .4byte Move_G_MAX_DRUM_SOLO - .4byte Move_G_MAX_FIREBALL - .4byte Move_G_MAX_HYDROSNIPE - .4byte Move_G_MAX_WIND_RAGE - .4byte Move_G_MAX_GRAVITAS - .4byte Move_G_MAX_STONESURGE - .4byte Move_G_MAX_VOLCALITH - .4byte Move_G_MAX_TARTNESS - .4byte Move_G_MAX_SWEETNESS - .4byte Move_G_MAX_SANDBLAST - .4byte Move_G_MAX_STUN_SHOCK - .4byte Move_G_MAX_CENTIFERNO - .4byte Move_G_MAX_SMITE - .4byte Move_G_MAX_SNOOZE - .4byte Move_G_MAX_FINALE - .4byte Move_G_MAX_STEELSURGE - .4byte Move_G_MAX_DEPLETION - .4byte Move_G_MAX_ONE_BLOW - .4byte Move_G_MAX_RAPID_FLOW -@@@ Last Move - cannot be reached - .4byte Move_COUNT - .align 2 gBattleAnims_StatusConditions:: .4byte Status_Poison @ B_ANIM_STATUS_PSN @@ -1048,7 +98,7 @@ gBattleAnims_Special:: .4byte Special_CriticalCaptureBallThrow @ B_ANIM_CRITICAL_CAPTURE_THROW @@@@@@@@@@@@@@@@@@@@@@@ GEN 4 @@@@@@@@@@@@@@@@@@@@@@@ -Move_ROOST: +Move_ROOST:: loadspritegfx ANIM_TAG_WHITE_FEATHER loadspritegfx ANIM_TAG_BLUE_STAR monbg ANIM_ATTACKER @@ -1073,7 +123,7 @@ Move_ROOST: waitforvisualfinish end -Move_GRAVITY: +Move_GRAVITY:: fadetobg BG_COSMIC waitbgfadein createvisualtask AnimTask_SetAnimTargetToAttackerOpposite, 1 @@ -1094,7 +144,7 @@ Move_GRAVITY: waitforvisualfinish end -Move_MIRACLE_EYE: +Move_MIRACLE_EYE:: loadspritegfx ANIM_TAG_TEAL_ALERT loadspritegfx ANIM_TAG_OPENING_EYE loadspritegfx ANIM_TAG_ROUND_WHITE_HALO @@ -1112,7 +162,7 @@ Move_MIRACLE_EYE: clearmonbg ANIM_DEF_PARTNER end -Move_WAKE_UP_SLAP: +Move_WAKE_UP_SLAP:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_SMELLINGSALT_EFFECT @@ -1132,7 +182,7 @@ Move_WAKE_UP_SLAP: blendoff end -Move_HAMMER_ARM: +Move_HAMMER_ARM:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_ROCKS loadspritegfx ANIM_TAG_SLAM_HIT @@ -1156,7 +206,7 @@ Move_HAMMER_ARM: blendoff end -Move_GYRO_BALL: +Move_GYRO_BALL:: loadspritegfx ANIM_TAG_IMPACT loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 createvisualtask AnimTask_MetallicShine, 5, 0, 0, RGB_BLACK @@ -1186,7 +236,7 @@ Move_GYRO_BALL: waitforvisualfinish end -Move_HEALING_WISH: +Move_HEALING_WISH:: loadspritegfx ANIM_TAG_GREEN_SPARKLE setalpha 0, 16 createvisualtask AnimTask_AlphaFadeIn, 3, 0, 16, 16, 0, 1 @@ -1206,7 +256,7 @@ Move_HEALING_WISH: waitforvisualfinish end -Move_BRINE: +Move_BRINE:: loadspritegfx ANIM_TAG_GLOWY_BLUE_ORB loadspritegfx ANIM_TAG_WATER_IMPACT monbg ANIM_DEF_PARTNER @@ -1220,7 +270,7 @@ Move_BRINE: blendoff end -Move_NATURAL_GIFT: +Move_NATURAL_GIFT:: loadspritegfx ANIM_TAG_SPARKLE_2 loadspritegfx ANIM_TAG_HOLLOW_ORB monbg ANIM_ATTACKER @@ -1249,7 +299,7 @@ Move_NATURAL_GIFT: delay 1 end -Move_FEINT: +Move_FEINT:: loadspritegfx ANIM_TAG_FEINT createsprite gFeintSwipeSpriteTemplate, ANIM_ATTACKER, 10, -32, 0, 15 playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER @@ -1263,7 +313,7 @@ Move_FEINT: waitforvisualfinish end -Move_PLUCK: +Move_PLUCK:: loadspritegfx ANIM_TAG_SEED_BROWN loadspritegfx ANIM_TAG_IMPACT playsewithpan SE_M_POISON_POWDER, SOUND_PAN_ATTACKER @@ -1289,7 +339,7 @@ Move_PLUCK: waitforvisualfinish end -Move_TAILWIND: +Move_TAILWIND:: loadspritegfx ANIM_TAG_FLYING_DIRT playsewithpan SE_M_GUST, SOUND_PAN_ATTACKER call SetHighSpeedBg @@ -1352,7 +402,7 @@ General_Tailwind: delay 1 end -Move_ACUPRESSURE: +Move_ACUPRESSURE:: loadspritegfx ANIM_TAG_ACUPRESSURE loadspritegfx ANIM_TAG_SPARK_2 createsprite gAcupressureSpriteTemplate, ANIM_ATTACKER, 40, 0, -40, 40 @@ -1360,7 +410,7 @@ Move_ACUPRESSURE: call ElectricityEffect end -Move_METAL_BURST: +Move_METAL_BURST:: loadspritegfx ANIM_TAG_ECLIPSING_ORB loadspritegfx ANIM_TAG_RED_ORB loopsewithpan SE_M_TRI_ATTACK, -64, 18, 3 @@ -1383,7 +433,7 @@ Move_METAL_BURST: waitforvisualfinish end -Move_U_TURN: +Move_U_TURN:: loadspritegfx ANIM_TAG_ROUND_SHADOW loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -1412,7 +462,7 @@ UTurnVisible: createsprite gFlyBallAttackSpriteTemplate, ANIM_ATTACKER, 2, 20, FALSE goto UTurnContinue -Move_CLOSE_COMBAT: +Move_CLOSE_COMBAT:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET call SetHighSpeedBg @@ -1448,7 +498,7 @@ Move_CLOSE_COMBAT: delay 1 end -Move_PAYBACK: +Move_PAYBACK:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET fadetobg BG_DARK @@ -1480,7 +530,7 @@ Move_PAYBACK: waitbgfadein end -Move_ASSURANCE: +Move_ASSURANCE:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_PURPLE_HAND_OUTLINE monbg ANIM_TARGET @@ -1499,7 +549,7 @@ Move_ASSURANCE: waitbgfadein end -Move_EMBARGO: +Move_EMBARGO:: loadspritegfx ANIM_TAG_RED_ORB monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET @@ -1521,7 +571,7 @@ EmbargoOrbs1: delay 12 return -Move_FLING: +Move_FLING:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_BLACK_BALL monbg ANIM_DEF_PARTNER @@ -1537,7 +587,7 @@ Move_FLING: blendoff end -Move_PSYCHO_SHIFT: +Move_PSYCHO_SHIFT:: loadspritegfx ANIM_TAG_ELECTRIC_ORBS loadspritegfx ANIM_TAG_HOLLOW_ORB loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @@ -1563,7 +613,7 @@ Move_PSYCHO_SHIFT: blendoff end -Move_TRUMP_CARD: +Move_TRUMP_CARD:: loadspritegfx ANIM_TAG_TRUMP_CARD loadspritegfx ANIM_TAG_CUT loadspritegfx ANIM_TAG_TRUMP_CARD_PARTICLES @@ -1607,7 +657,7 @@ Move_TRUMP_CARD: waitforvisualfinish end -Move_HEAL_BLOCK: +Move_HEAL_BLOCK:: loadspritegfx ANIM_TAG_BLUE_STAR monbg ANIM_TARGET createsoundtask SoundTask_PlaySeChangingVolume, SE_M_ABSORB_2, SOUND_PAN_TARGET, 256, -16, 0, 2 @@ -1631,7 +681,7 @@ Move_HEAL_BLOCK: clearmonbg ANIM_TARGET end -Move_WRING_OUT: +Move_WRING_OUT:: loadspritegfx ANIM_TAG_WRING_OUT monbg ANIM_TARGET setalpha 12, 8 @@ -1652,7 +702,7 @@ Move_WRING_OUT: waitforvisualfinish end -Move_POWER_TRICK: +Move_POWER_TRICK:: loadspritegfx ANIM_TAG_POWER_TRICK loopsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET 0xa 0x3 createvisualtask AnimTask_UproarDistortion 0x2, 0x0 @@ -1664,7 +714,7 @@ Move_POWER_TRICK: waitforvisualfinish end -Move_GASTRO_ACID: +Move_GASTRO_ACID:: loadspritegfx ANIM_TAG_GREEN_POISON_BUBBLE monbg ANIM_DEF_PARTNER createsprite gGreenPoisonBubble, ANIM_TARGET, 2, 20, 0, 40, 1, 0, 0, FALSE @@ -1696,7 +746,7 @@ Move_GASTRO_ACID: clearmonbg ANIM_DEF_PARTNER end -Move_LUCKY_CHANT: +Move_LUCKY_CHANT:: loadspritegfx ANIM_TAG_GOLD_STARS monbg ANIM_DEF_PARTNER setalpha 12, 8 @@ -1723,10 +773,10 @@ Move_LUCKY_CHANT: unloadspritegfx ANIM_TAG_GOLD_STARS end -Move_ME_FIRST: +Move_ME_FIRST:: end -Move_COPYCAT: +Move_COPYCAT:: loadspritegfx ANIM_TAG_GRAY_ORB loadspritegfx ANIM_TAG_THIN_RING playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER @@ -1748,7 +798,7 @@ Move_COPYCAT: waitforvisualfinish end -Move_POWER_SWAP: +Move_POWER_SWAP:: loadspritegfx ANIM_TAG_COLORED_ORBS playsewithpan SE_M_DOUBLE_TEAM, 0 createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 0, 0, 42, -32 @@ -1790,7 +840,7 @@ Move_POWER_SWAP: waitforvisualfinish end -Move_GUARD_SWAP: +Move_GUARD_SWAP:: loadspritegfx ANIM_TAG_COLORED_ORBS playsewithpan SE_M_DOUBLE_TEAM, 0 createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 2, 0, 42, -32 @@ -1832,7 +882,7 @@ Move_GUARD_SWAP: waitforvisualfinish end -Move_PUNISHMENT: +Move_PUNISHMENT:: loadspritegfx ANIM_TAG_SCRATCH loadspritegfx ANIM_TAG_POISON_BUBBLE monbg ANIM_TARGET @@ -1855,7 +905,7 @@ Move_PUNISHMENT: blendoff end -Move_LAST_RESORT: +Move_LAST_RESORT:: fadetobg BG_COSMIC waitbgfadeout createvisualtask AnimTask_StartSlidingBg, 2, 4, 0, 128, 0, -1 @@ -1893,7 +943,7 @@ Move_LAST_RESORT: call UnsetHighSpeedBg end -Move_WORRY_SEED: +Move_WORRY_SEED:: loadspritegfx ANIM_TAG_WORRY_SEED loadspritegfx ANIM_TAG_SMALL_CLOUD playsewithpan SE_M_POISON_POWDER, SOUND_PAN_ATTACKER @@ -1907,7 +957,7 @@ Move_WORRY_SEED: waitforvisualfinish end -Move_SUCKER_PUNCH: +Move_SUCKER_PUNCH:: loadspritegfx ANIM_TAG_POISON_JAB loadspritegfx ANIM_TAG_IMPACT createsprite gSlideMonToOffsetSpriteTemplate, 2, 5, 0, 20, 0, 0, 4 @@ -1920,7 +970,7 @@ Move_SUCKER_PUNCH: createsprite gSlideMonToOriginalPosSpriteTemplate, 2, 3, 0, 1, 4 end -Move_TOXIC_SPIKES: +Move_TOXIC_SPIKES:: loadspritegfx ANIM_TAG_TOXIC_SPIKES loadspritegfx ANIM_TAG_POISON_BUBBLE monbg ANIM_DEF_PARTNER @@ -1940,10 +990,10 @@ Move_TOXIC_SPIKES: clearmonbg ANIM_DEF_PARTNER end -Move_HEART_SWAP: +Move_HEART_SWAP:: end -Move_AQUA_RING: +Move_AQUA_RING:: General_AquaRingHeal: loadspritegfx ANIM_TAG_BLUE_STAR loadspritegfx ANIM_TAG_SMALL_BUBBLES @@ -1992,7 +1042,7 @@ General_AquaRingHeal: blendoff end -Move_MAGNET_RISE: +Move_MAGNET_RISE:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_SPARK_2 delay 0 @@ -2029,7 +1079,7 @@ Move_MAGNET_RISE: waitforvisualfinish end -Move_FLARE_BLITZ: +Move_FLARE_BLITZ:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_SMALL_EMBER @@ -2106,7 +1156,7 @@ Move_FLARE_BLITZ: waitbgfadein end -Move_FORCE_PALM: +Move_FORCE_PALM:: loadspritegfx ANIM_TAG_SHADOW_BALL loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT @@ -2124,7 +1174,7 @@ Move_FORCE_PALM: blendoff end -Move_AURA_SPHERE: +Move_AURA_SPHERE:: loadspritegfx ANIM_TAG_METEOR loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT monbg ANIM_ATK_PARTNER @@ -2149,7 +1199,7 @@ SetAuraSphereBG: fadetobg BG_AURA_SPHERE goto SetHighSpeedBgFade -Move_ROCK_POLISH: +Move_ROCK_POLISH:: loadspritegfx ANIM_TAG_WHITE_STREAK loadspritegfx ANIM_TAG_SPARKLE_3 setalpha 12, 8 @@ -2216,7 +1266,7 @@ Move_ROCK_POLISH: blendoff end -Move_POISON_JAB: +Move_POISON_JAB:: loadspritegfx ANIM_TAG_PURPLE_JAB loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_POISON_BUBBLE @@ -2270,7 +1320,7 @@ Move_POISON_JAB: blendoff end -Move_DARK_PULSE: +Move_DARK_PULSE:: loadspritegfx ANIM_TAG_THIN_RING monbg ANIM_TARGET fadetobg BG_DARK @@ -2298,7 +1348,7 @@ Move_DARK_PULSE: waitbgfadein end -Move_NIGHT_SLASH: +Move_NIGHT_SLASH:: loadspritegfx ANIM_TAG_SLASH createvisualtask AnimTask_BlendNightSlash, 2, ANIM_TARGET, 2, 0, 8, 1 createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 1, 3, 0, 12, RGB_BLACK @@ -2318,7 +1368,7 @@ Move_NIGHT_SLASH: waitforvisualfinish end -Move_AQUA_TAIL: +Move_AQUA_TAIL:: loadspritegfx ANIM_TAG_WATER_IMPACT loadspritegfx ANIM_TAG_SMALL_BUBBLES loadspritegfx ANIM_TAG_ICE_CRYSTALS @@ -2372,7 +1422,7 @@ Move_AQUA_TAIL: blendoff end -Move_SEED_BOMB: +Move_SEED_BOMB:: loadspritegfx ANIM_TAG_SEED loadspritegfx ANIM_TAG_EXPLOSION createsprite gBulletSeedSpriteTemplate, ANIM_TARGET, 2, 20, 0 @@ -2421,7 +1471,7 @@ Move_SEED_BOMB: waitforvisualfinish end -Move_AIR_SLASH: +Move_AIR_SLASH:: loadspritegfx ANIM_TAG_SLASH call SetSkyBg createsprite gSlashSliceSpriteTemplate, ANIM_TARGET, 2, 1, -8, 0 @@ -2434,7 +1484,7 @@ Move_AIR_SLASH: call UnsetSkyBg end -Move_XSCISSOR: +Move_X_SCISSOR:: loadspritegfx ANIM_TAG_CUT monbg ANIM_TARGET setalpha 12, 8 @@ -2452,7 +1502,7 @@ Move_XSCISSOR: blendoff end -Move_BUG_BUZZ: +Move_BUG_BUZZ:: loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE loadspritegfx ANIM_TAG_THIN_RING monbg ANIM_DEF_PARTNER @@ -2479,7 +1529,7 @@ Move_BUG_BUZZ: call UnsetBugBg end -Move_DRAGON_PULSE: +Move_DRAGON_PULSE:: loadspritegfx ANIM_TAG_DRAGON_PULSE monbg ANIM_TARGET setalpha 12, 8 @@ -2512,7 +1562,7 @@ DragonPulseParticle: delay 4 return -Move_DRAGON_RUSH: +Move_DRAGON_RUSH:: loadspritegfx ANIM_TAG_SLAM_HIT_2 loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_ROCKS @@ -2541,7 +1591,7 @@ Move_DRAGON_RUSH: blendoff end -Move_POWER_GEM: @ Copy of Hidden Power with background blackened +Move_POWER_GEM:: @ Copy of Hidden Power with background blackened loadspritegfx ANIM_TAG_POWER_GEM createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 5, 1, 1, 0, 7, RGB_BLACK waitforvisualfinish @@ -2575,7 +1625,7 @@ Move_POWER_GEM: @ Copy of Hidden Power with background blackened waitforvisualfinish end -Move_DRAIN_PUNCH: +Move_DRAIN_PUNCH:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_BLUE_STAR @@ -2596,7 +1646,7 @@ Move_DRAIN_PUNCH: blendoff end -Move_VACUUM_WAVE: +Move_VACUUM_WAVE:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_THIN_RING @@ -2612,7 +1662,7 @@ Move_VACUUM_WAVE: blendoff end -Move_FOCUS_BLAST: +Move_FOCUS_BLAST:: loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_METEOR loadspritegfx ANIM_TAG_FLAT_ROCK @@ -2636,7 +1686,7 @@ SetFocusBlastBG: fadetobg BG_FOCUS_BLAST goto SetHighSpeedBgFade -Move_ENERGY_BALL: +Move_ENERGY_BALL:: loadspritegfx ANIM_TAG_ENERGY_BALL monbg ANIM_TARGET setalpha 12, 8 @@ -2654,7 +1704,7 @@ Move_ENERGY_BALL: blendoff end -Move_BRAVE_BIRD: +Move_BRAVE_BIRD:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_BIRD call SetSkyBg @@ -2677,7 +1727,7 @@ Move_BRAVE_BIRD: call UnsetSkyBg end -Move_EARTH_POWER: +Move_EARTH_POWER:: loadspritegfx ANIM_TAG_SMALL_EMBER loadspritegfx ANIM_TAG_FIRE_PLUME createvisualtask AnimTask_HorizontalShake, 3, ANIM_DEF_PARTNER, 10, 50 @@ -2706,7 +1756,7 @@ Move_EARTH_POWER: waitforvisualfinish end -Move_SWITCHEROO: +Move_SWITCHEROO:: fadetobg BG_DARK waitbgfadein loadspritegfx ANIM_TAG_ITEM_BAG @@ -2738,7 +1788,7 @@ Move_SWITCHEROO: waitbgfadein end -Move_GIGA_IMPACT: +Move_GIGA_IMPACT:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER setalpha 12, 8 @@ -2782,7 +1832,7 @@ GigaImpactContinuity: waitforvisualfinish end -Move_NASTY_PLOT: +Move_NASTY_PLOT:: loadspritegfx ANIM_TAG_AMNESIA fadetobg BG_DARK waitbgfadeout @@ -2797,7 +1847,7 @@ Move_NASTY_PLOT: call UnsetPsychicBg end -Move_BULLET_PUNCH: +Move_BULLET_PUNCH:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET monbg ANIM_TARGET @@ -2851,7 +1901,7 @@ Move_BULLET_PUNCH: blendoff end -Move_AVALANCHE: +Move_AVALANCHE:: loadspritegfx ANIM_TAG_ROCKS loadspritegfx ANIM_TAG_ICE_CHUNK monbg ANIM_DEF_PARTNER @@ -2902,7 +1952,7 @@ SnowSlide1: delay 2 return -Move_ICE_SHARD: +Move_ICE_SHARD:: monbg ANIM_TARGET splitbgprio ANIM_TARGET setalpha 12, 8 @@ -2938,7 +1988,7 @@ Move_ICE_SHARD: blendoff end -Move_SHADOW_CLAW: +Move_SHADOW_CLAW:: loadspritegfx ANIM_TAG_BLUE_LIGHT_WALL loadspritegfx ANIM_TAG_CLAW_SLASH loadspritegfx ANIM_TAG_TORN_METAL @@ -2964,7 +2014,7 @@ Move_SHADOW_CLAW: clearmonbg ANIM_TARGET end -Move_THUNDER_FANG: +Move_THUNDER_FANG:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_LIGHTNING loadspritegfx ANIM_TAG_SHARP_TEETH @@ -2998,7 +2048,7 @@ Move_THUNDER_FANG: delay 1 end -Move_ICE_FANG: +Move_ICE_FANG:: monbg ANIM_TARGET setalpha 12, 8 loadspritegfx ANIM_TAG_ICE_CRYSTALS @@ -3035,7 +2085,7 @@ Move_ICE_FANG: delay 1 end -Move_FIRE_FANG: +Move_FIRE_FANG:: loadspritegfx ANIM_TAG_SMALL_EMBER loadspritegfx ANIM_TAG_SHARP_TEETH loadspritegfx ANIM_TAG_IMPACT @@ -3064,7 +2114,7 @@ Move_FIRE_FANG: delay 1 end -Move_SHADOW_SNEAK: +Move_SHADOW_SNEAK:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_WHITE_SHADOW @Destiny Bond loadspritegfx ANIM_TAG_QUICK_GUARD_HAND @Black Colour @@ -3102,7 +2152,7 @@ ShadowSneakMovement: delay 0x4 return -Move_MUD_BOMB: +Move_MUD_BOMB:: loadspritegfx ANIM_TAG_MUD_SAND playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER createsprite gMudBombToss, ANIM_TARGET, 2, 20, 0, 0, 0, 35, -25 @@ -3153,7 +2203,7 @@ Move_MUD_BOMB: waitforvisualfinish end -Move_PSYCHO_CUT: +Move_PSYCHO_CUT:: loadspritegfx ANIM_TAG_SPIRAL loadspritegfx ANIM_TAG_PSYCHO_CUT loadspritegfx ANIM_TAG_CROSS_IMPACT @@ -3181,7 +2231,7 @@ Move_PSYCHO_CUT: waitforvisualfinish end -Move_ZEN_HEADBUTT: +Move_ZEN_HEADBUTT:: loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_WATER_IMPACT monbg ANIM_ATTACKER @@ -3213,7 +2263,7 @@ Move_ZEN_HEADBUTT: delay 1 end -Move_MIRROR_SHOT: +Move_MIRROR_SHOT:: loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 createvisualtask AnimTask_MetallicShine, 5, 1, 0, RGB_BLACK waitforvisualfinish @@ -3247,7 +2297,7 @@ Move_MIRROR_SHOT: blendoff end -Move_FLASH_CANNON: +Move_FLASH_CANNON:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_ELECTRIC_ORBS @@ -3284,7 +2334,7 @@ Move_FLASH_CANNON: clearmonbg ANIM_TARGET end -Move_ROCK_CLIMB: +Move_ROCK_CLIMB:: delay 8 loopsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER, 38, 3 waitforvisualfinish @@ -3319,7 +2369,7 @@ Move_ROCK_CLIMB: blendoff end -Move_DEFOG: +Move_DEFOG:: loadspritegfx ANIM_TAG_WHITE_CIRCLE_OF_LIGHT monbg ANIM_ATTACKER setalpha 12, 8 @@ -3354,7 +2404,7 @@ InitRoomAnimation: return @ Credits to Skeli -Move_DRACO_METEOR: +Move_DRACO_METEOR:: loadspritegfx ANIM_TAG_ROCKS @Rocks loadspritegfx ANIM_TAG_FAIRY_LOCK_CHAINS @Gray Colour loadspritegfx ANIM_TAG_WATER_GUN @Sparkles Trail @@ -3439,7 +2489,7 @@ DracoMeteor4: createsprite gDracoMeteorTailSpriteTemplate 0x83, 5, 0xffb0, 0xffc0, 0xFFF8, 0x20, 0x19 return -Move_DISCHARGE: +Move_DISCHARGE:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_SPARK_2 delay 0 @@ -3544,7 +2594,7 @@ DischargeElectrify: createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -20, 15, 5, 1, ANIM_ATK_PARTNER return -Move_LAVA_PLUME: +Move_LAVA_PLUME:: loadspritegfx ANIM_TAG_FIRE_PLUME loopsewithpan 152, SOUND_PAN_ATTACKER, 9, 2 createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 11, RGB_RED @@ -3564,7 +2614,7 @@ Move_LAVA_PLUME: waitforvisualfinish end -Move_LEAF_STORM: +Move_LEAF_STORM:: loadspritegfx ANIM_TAG_RAZOR_LEAF loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_LEAF @@ -3676,7 +2726,7 @@ Move_LEAF_STORM: clearmonbg ANIM_DEF_PARTNER end -Move_POWER_WHIP: +Move_POWER_WHIP:: loadspritegfx ANIM_TAG_WHIP_HIT playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 10 @@ -3690,7 +2740,7 @@ Move_POWER_WHIP: waitbgfadein end -Move_ROCK_WRECKER: +Move_ROCK_WRECKER:: jumpargeq 7, 1, RockWrecker_1 fadetobg BG_ROCK_WRECKER waitbgfadeout @@ -3736,7 +2786,7 @@ RockWrecker_2: call UnsetPsychicBg end -Move_CROSS_POISON: +Move_CROSS_POISON:: loadspritegfx ANIM_TAG_POISON_BUBBLE loadspritegfx ANIM_TAG_CROSS_IMPACT monbg ANIM_TARGET @@ -3752,7 +2802,7 @@ Move_CROSS_POISON: blendoff end -Move_GUNK_SHOT: +Move_GUNK_SHOT:: loadspritegfx ANIM_TAG_WATER_ORB loadspritegfx ANIM_TAG_POISON_BUBBLE loadspritegfx ANIM_TAG_WATER_IMPACT @@ -3809,7 +2859,7 @@ SetGunkShotBG: goto SetHighSpeedBgFade -Move_IRON_HEAD: +Move_IRON_HEAD:: loadspritegfx ANIM_TAG_GUST loadspritegfx ANIM_TAG_IMPACT loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 @@ -3831,7 +2881,7 @@ Move_IRON_HEAD: waitforvisualfinish end -Move_MAGNET_BOMB: +Move_MAGNET_BOMB:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_SPARK_2 delay 0 @@ -3896,7 +2946,7 @@ Move_MAGNET_BOMB: waitforvisualfinish end -Move_STONE_EDGE: +Move_STONE_EDGE:: loadspritegfx ANIM_TAG_STONE_EDGE loadspritegfx ANIM_TAG_IMPACT playsewithpan SE_M_ROCK_THROW SOUND_PAN_TARGET @@ -3955,7 +3005,7 @@ Move_STONE_EDGE: blendoff end -Move_CAPTIVATE: +Move_CAPTIVATE:: loadspritegfx ANIM_TAG_MAGENTA_HEART loadspritegfx ANIM_TAG_SPARKLE_2 createvisualtask AnimTask_RockMonBackAndForth, 5, ANIM_DEF_PARTNER, 0, 2, 0 @@ -3971,7 +3021,7 @@ Move_CAPTIVATE: waitforvisualfinish end -Move_STEALTH_ROCK: +Move_STEALTH_ROCK:: loadspritegfx ANIM_TAG_STEALTH_ROCK monbg ANIM_DEF_PARTNER playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER @@ -3988,7 +3038,7 @@ Move_STEALTH_ROCK: clearmonbg ANIM_DEF_PARTNER end -Move_GRASS_KNOT: +Move_GRASS_KNOT:: loadspritegfx ANIM_TAG_RAZOR_LEAF loadspritegfx ANIM_TAG_IMPACT createsprite gSlideMonToOffsetSpriteTemplate, 2, 5, 0, 20, 0, 0, 4 @@ -4001,7 +3051,7 @@ Move_GRASS_KNOT: createsprite gSlideMonToOriginalPosSpriteTemplate, 2, 3, 0, 1, 4 end -Move_CHATTER: +Move_CHATTER:: loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE loadspritegfx ANIM_TAG_THIN_RING loadspritegfx ANIM_TAG_MUSIC_NOTES @@ -4041,7 +3091,7 @@ Move_CHATTER: clearmonbg ANIM_DEF_PARTNER end -Move_JUDGMENT: +Move_JUDGMENT:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_GREEN_SPIKE @@ -4137,7 +3187,7 @@ JudgmentInwardSpikes2: createsprite gJudgmentGrayInwardOrbsTemplate, ANIM_TARGET, 2, 1, 0, 0xFFDA, 0xFF94, 16 @between up and upper left return -Move_BUG_BITE: +Move_BUG_BITE:: loadspritegfx ANIM_TAG_ROCKS loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET @@ -4178,7 +3228,7 @@ Move_BUG_BITE: blendoff end -Move_CHARGE_BEAM: +Move_CHARGE_BEAM:: loadspritegfx ANIM_TAG_ELECTRIC_ORBS loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_ELECTRICITY @@ -4230,7 +3280,7 @@ SparkBeam: delay 1 return -Move_WOOD_HAMMER: +Move_WOOD_HAMMER:: loadspritegfx ANIM_TAG_WOOD_HAMMER loadspritegfx ANIM_TAG_WOOD_HAMMER_HAMMER loadspritegfx ANIM_TAG_IMPACT @@ -4259,7 +3309,7 @@ WoodHammerImpact: createsprite gWoodHammerSmallSpriteTemplate, ANIM_TARGET, 2, -5, 0, -20, -24, 20, 2 return -Move_AQUA_JET: +Move_AQUA_JET:: loadspritegfx ANIM_TAG_SPARKLE_6 loadspritegfx ANIM_TAG_ROUND_SHADOW loadspritegfx ANIM_TAG_SPLASH @@ -4292,7 +3342,7 @@ Move_AQUA_JET: blendoff end -Move_ATTACK_ORDER: +Move_ATTACK_ORDER:: loadspritegfx ANIM_TAG_ATTACK_ORDER loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_ROCKS @@ -4338,7 +3388,7 @@ Move_ATTACK_ORDER: blendoff end -Move_DEFEND_ORDER: +Move_DEFEND_ORDER:: loadspritegfx ANIM_TAG_ATTACK_ORDER loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_ROCKS @@ -4375,7 +3425,7 @@ Move_DEFEND_ORDER: waitforvisualfinish end -Move_HEAL_ORDER: +Move_HEAL_ORDER:: loadspritegfx ANIM_TAG_ATTACK_ORDER loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_ROCKS @@ -4412,7 +3462,7 @@ Move_HEAL_ORDER: waitforvisualfinish end -Move_HEAD_SMASH: +Move_HEAD_SMASH:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_ROCKS createvisualtask AnimTask_SkullBashPosition, 2, 0 @@ -4434,7 +3484,7 @@ Move_HEAD_SMASH: waitbgfadein end -Move_DOUBLE_HIT: +Move_DOUBLE_HIT:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET setalpha 12, 8 @@ -4456,7 +3506,7 @@ Move_DOUBLE_HIT: blendoff end -Move_ROAR_OF_TIME: +Move_ROAR_OF_TIME:: loadspritegfx ANIM_TAG_ORBS loadspritegfx ANIM_TAG_EXPLOSION loadspritegfx ANIM_TAG_WATER_GUN @@ -4497,7 +3547,7 @@ Move_ROAR_OF_TIME: waitforvisualfinish end -Move_SPACIAL_REND: +Move_SPACIAL_REND:: loadspritegfx ANIM_TAG_PUNISHMENT_BLADES loadspritegfx ANIM_TAG_PINK_HEART_2 @ANIM_TAG_BERRY_EATEN monbg ANIM_ATK_PARTNER @@ -4531,7 +3581,7 @@ Move_SPACIAL_REND: blendoff end -Move_LUNAR_DANCE: +Move_LUNAR_DANCE:: loadspritegfx ANIM_TAG_MOON loadspritegfx ANIM_TAG_GREEN_SPARKLE loadspritegfx ANIM_TAG_HOLLOW_ORB @@ -4572,7 +3622,7 @@ Move_LUNAR_DANCE: delay 1 end -Move_CRUSH_GRIP: +Move_CRUSH_GRIP:: loadspritegfx ANIM_TAG_EXPLOSION loadspritegfx ANIM_TAG_ACUPRESSURE loadspritegfx ANIM_TAG_PURPLE_HAND_OUTLINE @@ -4597,7 +3647,7 @@ Move_CRUSH_GRIP: blendoff end -Move_MAGMA_STORM: +Move_MAGMA_STORM:: loadspritegfx ANIM_TAG_SMALL_EMBER fadetobg BG_MAGMA_STORM @Add new bg waitbgfadeout @@ -4622,7 +3672,7 @@ Move_MAGMA_STORM: blendoff end -Move_DARK_VOID: +Move_DARK_VOID:: loadspritegfx ANIM_TAG_WHITE_SHADOW @Destiny Bond loadspritegfx ANIM_TAG_QUICK_GUARD_HAND @Black Colour loadspritegfx ANIM_TAG_SPARKLE_2 @Healing Stars @@ -4649,7 +3699,7 @@ Move_DARK_VOID: visible ANIM_DEF_PARTNER end -Move_SEED_FLARE: +Move_SEED_FLARE:: loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge animation loadspritegfx ANIM_TAG_LEAF @green color loadspritegfx ANIM_TAG_RAZOR_LEAF @green color 2 @@ -4734,7 +3784,7 @@ Move_SEED_FLARE: blendoff end -Move_OMINOUS_WIND: +Move_OMINOUS_WIND:: loadspritegfx ANIM_TAG_SPARKLE_6 panse SE_M_GUST, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET 2, 0 playsewithpan 228, 0 @@ -4793,7 +3843,7 @@ OminousWindHit: waitbgfadein end -Move_SHADOW_FORCE: +Move_SHADOW_FORCE:: loadspritegfx ANIM_TAG_ROUND_SHADOW loadspritegfx ANIM_TAG_IMPACT choosetwoturnanim ShadowForcePrep ShadowForceAttack @@ -4847,7 +3897,7 @@ ShadowForceBg: return @@@@@@@@@@@@@@@@@@@@@@@ GEN 5 @@@@@@@@@@@@@@@@@@@@@@@ -Move_HONE_CLAWS: +Move_HONE_CLAWS:: loadspritegfx ANIM_TAG_SWIPE call HoneClawsAnim createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SWIPE, 0, 6, 6, RGB_BLACK @@ -4868,7 +3918,7 @@ HoneClawsAnim: delay 10 return -Move_WIDE_GUARD: +Move_WIDE_GUARD:: loadspritegfx ANIM_TAG_ICE_SPIKES @motion from icy wind loadspritegfx ANIM_TAG_PINK_PETAL @pink color loadspritegfx ANIM_TAG_SMALL_EMBER @yellow color @@ -4979,7 +4029,7 @@ General_WonderRoom: blendoff end -Move_PSYSHOCK: +Move_PSYSHOCK:: loadspritegfx ANIM_TAG_RED_ORB_2 loadspritegfx ANIM_TAG_POISON_JAB loadspritegfx ANIM_TAG_GRAY_SMOKE @@ -5056,7 +4106,7 @@ PsyshockConverge: delay 2 return -Move_VENOSHOCK: +Move_VENOSHOCK:: loadspritegfx ANIM_TAG_POISON_BUBBLE loadspritegfx ANIM_TAG_TOXIC_BUBBLE createsprite gToxicBubbleSpriteTemplate, ANIM_TARGET, 2, -24, 16, 1, 1 @@ -5084,7 +4134,7 @@ Move_VENOSHOCK: delay 15 end -Move_AUTOTOMIZE: +Move_AUTOTOMIZE:: loadspritegfx ANIM_TAG_METAL_BITS @Metal Bits setalpha 12, 8 monbg ANIM_ATK_PARTNER @@ -5175,7 +4225,7 @@ Move_SMACK_DOWN:: createvisualtask AnimTask_SeismicTossBgAccelerateDownAtEnd, 3 goto SeismicTossWeak -Move_STORM_THROW: +Move_STORM_THROW:: call StormThorwAnim call StormThorwAnim call StormThorwAnim @@ -5198,7 +4248,7 @@ StormThorwAnim: delay 8 return -Move_FLAME_BURST: +Move_FLAME_BURST:: loadspritegfx ANIM_TAG_SMALL_EMBER loadspritegfx ANIM_TAG_EXPLOSION playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER @@ -5231,13 +4281,13 @@ FlameBurstSpread: return -Move_SLUDGE_WAVE: +Move_SLUDGE_WAVE:: panse SE_M_WHIRLPOOL, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0 createvisualtask AnimTask_CreateSurfWave, 2, ANIM_SURF_PAL_SLUDGE_WAVE waitforvisualfinish end -Move_QUIVER_DANCE: +Move_QUIVER_DANCE:: loadspritegfx ANIM_TAG_HOLLOW_ORB monbg ANIM_ATTACKER call SetBugBg @@ -5260,7 +4310,7 @@ Move_QUIVER_DANCE: call UnsetBugBg end -Move_HEAVY_SLAM: +Move_HEAVY_SLAM:: loadspritegfx ANIM_TAG_CLAW_SLASH loadspritegfx ANIM_TAG_IMPACT loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 @@ -5290,7 +4340,7 @@ Move_HEAVY_SLAM: blendoff end -Move_SYCHRONOISE: +Move_SYNCHRONOISE:: loadspritegfx ANIM_TAG_THIN_RING @hypervoice ring loadspritegfx ANIM_TAG_SPARK_2 @yellow color loadspritegfx ANIM_TAG_WATER_ORB @blue color @@ -5329,7 +4379,7 @@ Move_SYCHRONOISE: clearmonbg ANIM_DEF_PARTNER end -Move_ELECTRO_BALL: +Move_ELECTRO_BALL:: loadspritegfx ANIM_TAG_SPARK_2 @yelow loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge loadspritegfx ANIM_TAG_FLASH_CANNON_BALL @ball @@ -5356,7 +4406,7 @@ Move_ELECTRO_BALL: blendoff end -Move_SOAK: +Move_SOAK:: loadspritegfx ANIM_TAG_SMALL_BUBBLES loadspritegfx ANIM_TAG_WATER_IMPACT monbg ANIM_TARGET @@ -5391,7 +4441,7 @@ Move_SOAK: blendoff end -Move_FLAME_CHARGE: +Move_FLAME_CHARGE:: loadspritegfx ANIM_TAG_SMALL_EMBER loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -5424,7 +4474,7 @@ FlameChargeSwirl: createsprite gFlameChargeEmberTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x8, 0x8c return -Move_COIL: +Move_COIL:: loadspritegfx ANIM_TAG_TENDRILS loopsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET, 0x6, 0x4 createsprite gConstrictBindingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x10, 0x0, 0x2 @@ -5443,7 +4493,7 @@ Move_COIL: waitforvisualfinish end -Move_LOW_SWEEP: +Move_LOW_SWEEP:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 20, 0, 0, 4 @@ -5455,7 +4505,7 @@ Move_LOW_SWEEP: createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 1, 4 end -Move_ACID_SPRAY: +Move_ACID_SPRAY:: loadspritegfx ANIM_TAG_POISON_BUBBLE monbg ANIM_TARGET createsprite gAcidPoisonBubbleSpriteTemplate, ANIM_TARGET, 2, 20, 0, 40, 1, 0, -20, FALSE @@ -5481,7 +4531,7 @@ Move_ACID_SPRAY: clearmonbg ANIM_TARGET end -Move_FOUL_PLAY: +Move_FOUL_PLAY:: loadspritegfx ANIM_TAG_POISON_BUBBLE loadspritegfx ANIM_TAG_THIN_RING loadspritegfx ANIM_TAG_IMPACT @@ -5504,7 +4554,7 @@ Move_FOUL_PLAY: blendoff end -Move_SIMPLE_BEAM: +Move_SIMPLE_BEAM:: loadspritegfx ANIM_TAG_GOLD_RING @psybeam loadspritegfx ANIM_TAG_ROCKS @brown color loadspritegfx ANIM_TAG_PINK_PETAL @pink color @@ -5550,7 +4600,7 @@ SimpleBeamWithRings: delay 0x2 return -Move_ENTRAINMENT: +Move_ENTRAINMENT:: createvisualtask AnimTask_TeeterDanceMovement, 5 playsewithpan SE_M_TEETER_DANCE, SOUND_PAN_ATTACKER delay 0x18 @@ -5565,7 +4615,7 @@ Move_ENTRAINMENT: waitforvisualfinish end -Move_AFTER_YOU: +Move_AFTER_YOU:: loadspritegfx ANIM_TAG_ANGER @rage loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @green color createvisualtask AnimTask_SwayMon, 5, 1, 15, 1536, 2, ANIM_ATTACKER @@ -5580,7 +4630,7 @@ Move_AFTER_YOU: waitforvisualfinish end -Move_ROUND: +Move_ROUND:: loadspritegfx ANIM_TAG_MUSIC_NOTES createvisualtask AnimTask_MusicNotesRainbowBlend, 2 waitforvisualfinish @@ -5602,7 +4652,7 @@ Move_ROUND: waitforvisualfinish end -Move_ECHOED_VOICE: +Move_ECHOED_VOICE:: loadspritegfx ANIM_TAG_METAL_SOUND_WAVES monbg ANIM_DEF_PARTNER splitbgprio_foes ANIM_TARGET @@ -5622,7 +4672,7 @@ MetalSoundPlayNote: delay 0x2 return -Move_CHIP_AWAY: +Move_CHIP_AWAY:: loadspritegfx ANIM_TAG_IMPACT createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x2, 0x0, 0x9, 0x7FFF waitforvisualfinish @@ -5640,7 +4690,7 @@ Move_CHIP_AWAY: blendoff end -Move_CLEAR_SMOG: +Move_CLEAR_SMOG:: loadspritegfx ANIM_TAG_MIST_CLOUD monbg ANIM_TARGET splitbgprio_all @@ -5668,7 +4718,7 @@ ClearSmogCloud: delay 7 return -Move_STORED_POWER: +Move_STORED_POWER:: loadspritegfx ANIM_TAG_RED_ORB_2 loadspritegfx ANIM_TAG_IMPACT call SetPsychicBackground @@ -5698,7 +4748,7 @@ Move_STORED_POWER: waitforvisualfinish end -Move_QUICK_GUARD: +Move_QUICK_GUARD:: loadspritegfx ANIM_TAG_QUICK_GUARD_HAND @hand loadspritegfx ANIM_TAG_SPARKLE_4 @sparkles setalpha 12, 8 @@ -5728,7 +4778,7 @@ Move_QUICK_GUARD: clearmonbg ANIM_ATTACKER end -Move_ALLY_SWITCH: +Move_ALLY_SWITCH:: call SetPsychicBackground createvisualtask AnimTask_AllySwitchAttacker, 2 createvisualtask AnimTask_AllySwitchPartner, 2 @@ -5736,7 +4786,7 @@ Move_ALLY_SWITCH: call UnsetPsychicBg end -Move_SCALD: +Move_SCALD:: loadspritegfx ANIM_TAG_WATER_ORB loadspritegfx ANIM_TAG_WATER_IMPACT monbg ANIM_DEF_PARTNER @@ -5782,7 +4832,7 @@ ScaldHitSplats: createsprite gWaterHitSplatSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, ANIM_TARGET, 1 return -Move_SHELL_SMASH: +Move_SHELL_SMASH:: loadspritegfx ANIM_TAG_SHELL_RIGHT loadspritegfx ANIM_TAG_SHELL_LEFT loadspritegfx ANIM_TAG_IMPACT @@ -5810,7 +4860,7 @@ Move_SHELL_SMASH: waitforvisualfinish end -Move_HEAL_PULSE: +Move_HEAL_PULSE:: loadspritegfx ANIM_TAG_GREEN_SPARKLE loadspritegfx ANIM_TAG_BLUE_STAR loadspritegfx ANIM_TAG_THIN_RING @@ -5841,7 +4891,7 @@ Move_HEAL_PULSE: call HealingEffect2 end -Move_HEX: +Move_HEX:: loadspritegfx ANIM_TAG_PURPLE_FLAME loadspritegfx ANIM_TAG_GHOSTLY_SPIRIT createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x0, 0x0, 0x10, 0x4C4A @;Deep purple @@ -5862,7 +4912,7 @@ Move_HEX: waitforvisualfinish end -Move_SKY_DROP: +Move_SKY_DROP:: loadspritegfx ANIM_TAG_ROUND_SHADOW loadspritegfx ANIM_TAG_IMPACT choosetwoturnanim SkyDropSetup SkyDropUnleash @@ -5895,7 +4945,7 @@ SkyDropUnleash: blendoff end -Move_SHIFT_GEAR: +Move_SHIFT_GEAR:: loadspritegfx ANIM_TAG_GEAR @Gear monbg ANIM_ATTACKER playsewithpan SE_ESCALATOR, SOUND_PAN_ATTACKER @@ -5905,7 +4955,7 @@ Move_SHIFT_GEAR: clearmonbg ANIM_ATTACKER end -Move_CIRCLE_THROW: +Move_CIRCLE_THROW:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_THIN_RING loadspritegfx ANIM_TAG_ICE_CHUNK @@ -5932,7 +4982,7 @@ Move_CIRCLE_THROW: blendoff end -Move_INCINERATE: +Move_INCINERATE:: loadspritegfx ANIM_TAG_SMALL_EMBER monbg ANIM_TARGET splitbgprio ANIM_TARGET @@ -5972,7 +5022,7 @@ Move_INCINERATE: blendoff end -Move_QUASH: +Move_QUASH:: loadspritegfx ANIM_TAG_ASSURANCE_HAND @hand fadetobg BG_DARK waitbgfadein @@ -5989,7 +5039,7 @@ Move_QUASH: waitbgfadein end -Move_ACROBATICS: +Move_ACROBATICS:: loadspritegfx ANIM_TAG_ROUND_SHADOW loadspritegfx ANIM_TAG_WHITE_STREAK loadspritegfx ANIM_TAG_IMPACT @@ -6064,7 +5114,7 @@ AcrobaticsSlashes: delay 2 return -Move_REFLECT_TYPE: +Move_REFLECT_TYPE:: loadspritegfx ANIM_TAG_GUARD_RING @ring around user loadspritegfx ANIM_TAG_ICE_CHUNK @blue green color loadspritegfx ANIM_TAG_PURPLE_FLAME @violet color @@ -6102,7 +5152,7 @@ Move_REFLECT_TYPE: blendoff end -Move_RETALIATE: +Move_RETALIATE:: loadspritegfx ANIM_TAG_CUT @Cut monbg ANIM_DEF_PARTNER setalpha 9, 8 @@ -6123,7 +5173,7 @@ Move_RETALIATE: blendoff end -Move_FINAL_GAMBIT: +Move_FINAL_GAMBIT:: loadspritegfx ANIM_TAG_PINK_CLOUD @yawn animation loadspritegfx ANIM_TAG_WATER_IMPACT @blue colour loadspritegfx ANIM_TAG_EXPLOSION @explosion animation @@ -6150,7 +5200,7 @@ Move_FINAL_GAMBIT: waitforvisualfinish end -Move_BESTOW: +Move_BESTOW:: monbg ANIM_TARGET splitbgprio ANIM_TARGET panse SE_M_METRONOME, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0 @@ -6160,7 +5210,7 @@ Move_BESTOW: clearmonbg ANIM_TARGET end -Move_INFERNO: +Move_INFERNO:: loadspritegfx ANIM_TAG_SMALL_EMBER call SetImpactBackground loopsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_TARGET, 40, 4 @@ -6204,7 +5254,7 @@ InfernoAnim: delay 1 return -Move_WATER_PLEDGE: +Move_WATER_PLEDGE:: loadspritegfx ANIM_TAG_WATER_ORB loadspritegfx ANIM_TAG_WATER_IMPACT monbg ANIM_DEF_PARTNER @@ -6324,7 +5374,7 @@ Move_WATER_PLEDGE: blendoff end -Move_FIRE_PLEDGE: +Move_FIRE_PLEDGE:: loadspritegfx ANIM_TAG_SMALL_EMBER monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET @@ -6423,7 +5473,7 @@ Move_FIRE_PLEDGE: blendoff end -Move_GRASS_PLEDGE: +Move_GRASS_PLEDGE:: loadspritegfx ANIM_TAG_LEAF loadspritegfx ANIM_TAG_WHIP_HIT monbg ANIM_DEF_PARTNER @@ -6530,7 +5580,7 @@ GrassPledgeMiddleFountain: delay 4 return -Move_VOLT_SWITCH: +Move_VOLT_SWITCH:: loadspritegfx ANIM_TAG_SPARK loadspritegfx ANIM_TAG_SPARK_2 loadspritegfx ANIM_TAG_THIN_RING @@ -6569,7 +5619,7 @@ VoltSwitchAgainstPartner: createvisualtask AnimTask_SlideOffScreen, 5, ANIM_ATTACKER, 2 goto VoltSwitchContinue -Move_STRUGGLE_BUG: +Move_STRUGGLE_BUG:: loadspritegfx ANIM_TAG_MOVEMENT_WAVES loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -6595,12 +5645,12 @@ Move_STRUGGLE_BUG: blendoff end -Move_BULLDOZE: +Move_BULLDOZE:: createvisualtask AnimTask_Splash, 2, ANIM_ATTACKER, 3 delay 0x8 goto Move_EARTHQUAKE -Move_FROST_BREATH: +Move_FROST_BREATH:: loadspritegfx ANIM_TAG_ICE_CHUNK loadspritegfx ANIM_TAG_SMALL_EMBER loadspritegfx ANIM_TAG_FIRE_PLUME @@ -6638,7 +5688,7 @@ Move_FROST_BREATH: call UnsetPsychicBg end -Move_DRAGON_TAIL: +Move_DRAGON_TAIL:: loadspritegfx ANIM_TAG_ROCKS loadspritegfx ANIM_TAG_SLAM_HIT loadspritegfx ANIM_TAG_IMPACT @@ -6674,7 +5724,7 @@ TailWhackDown: createsprite gRockScatterSpriteTemplate, ANIM_TARGET, 2, 12, 25, 4, 4 return -Move_WORK_UP: +Move_WORK_UP:: loadspritegfx ANIM_TAG_FOCUS_ENERGY playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0, -28, 26, 2 @@ -6708,7 +5758,7 @@ Move_WORK_UP: waitforvisualfinish end -Move_ELECTROWEB: +Move_ELECTROWEB:: loadspritegfx ANIM_TAG_SPIDER_WEB loadspritegfx ANIM_TAG_WEB_THREAD loadspritegfx ANIM_TAG_SPARK_2 @@ -6726,11 +5776,11 @@ Move_ELECTROWEB: delay 1 createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 5, 1, 2, 9, 0, RGB_BLACK call ElectricityEffect_OnTargets -Move_ELECTROWEB_Wait: +Move_ELECTROWEB_Wait:: waitforvisualfinish end -Move_WILD_CHARGE: +Move_WILD_CHARGE:: loadspritegfx ANIM_TAG_SPARK_2 loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_IMPACT @@ -6765,7 +5815,7 @@ ScreenFlash: createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xC, 0x0, 0x07FE return -Move_DRILL_RUN: +Move_DRILL_RUN:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HORN_HIT setalpha 12, 8 @@ -6820,7 +5870,7 @@ Move_DRILL_RUN: call UnsetPsychicBg end -Move_DUAL_CHOP: +Move_DUAL_CHOP:: loadspritegfx ANIM_TAG_HANDS_AND_FEET @hand loadspritegfx ANIM_TAG_IMPACT @hit loadspritegfx ANIM_TAG_POISON_BUBBLE @purple @@ -6842,7 +5892,7 @@ Move_DUAL_CHOP: blendoff end -Move_HEART_STAMP: +Move_HEART_STAMP:: loadspritegfx ANIM_TAG_HEART_STAMP monbg ANIM_TARGET loopsewithpan SE_M_CHARM, SOUND_PAN_ATTACKER, 0xc, 0x3 @@ -6855,7 +5905,7 @@ Move_HEART_STAMP: waitforvisualfinish end -Move_HORN_LEECH: +Move_HORN_LEECH:: loadspritegfx ANIM_TAG_HORN_LEECH @Horn loadspritegfx ANIM_TAG_IMPACT @hit loadspritegfx ANIM_TAG_ORBS @@ -6872,7 +5922,7 @@ Move_HORN_LEECH: waitforvisualfinish end -Move_SACRED_SWORD: +Move_SACRED_SWORD:: loadspritegfx ANIM_TAG_CUT @Cut loadspritegfx ANIM_TAG_SWORD @Sword loadspritegfx ANIM_TAG_HYDRO_PUMP @Blue Colour @@ -6898,7 +5948,7 @@ Move_SACRED_SWORD: waitforvisualfinish end -Move_RAZOR_SHELL: +Move_RAZOR_SHELL:: loadspritegfx ANIM_TAG_RAZOR_SHELL loadspritegfx ANIM_TAG_CUT monbg ANIM_TARGET @@ -6912,7 +5962,7 @@ Move_RAZOR_SHELL: waitforvisualfinish end -Move_HEAT_CRASH: +Move_HEAT_CRASH:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_WARM_ROCK loadspritegfx ANIM_TAG_ROCKS @@ -6936,7 +5986,7 @@ Move_HEAT_CRASH: blendoff end -Move_LEAF_TORNADO: +Move_LEAF_TORNADO:: loadspritegfx ANIM_TAG_GUST @Gust loadspritegfx ANIM_TAG_LEAF @Leaves monbg ANIM_DEF_PARTNER @@ -6967,7 +6017,7 @@ LeafTornadoVortex: delay 0x2 return -Move_STEAMROLLER: +Move_STEAMROLLER:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET setalpha 12, 8 @@ -6993,7 +6043,7 @@ Move_STEAMROLLER: blendoff end -Move_COTTON_GUARD: +Move_COTTON_GUARD:: loadspritegfx ANIM_TAG_SPORE monbg ANIM_ATK_PARTNER setalpha 12, 8 @@ -7023,7 +6073,7 @@ CottonSporesSpiralInward: delay 0x3 return -Move_NIGHT_DAZE: +Move_NIGHT_DAZE:: loadspritegfx ANIM_TAG_THIN_RING @uproar loadspritegfx ANIM_TAG_PURPLE_FLAME @dark violet color loadspritegfx ANIM_TAG_RED_ORB @circles @@ -7061,7 +6111,7 @@ Move_NIGHT_DAZE: waitforvisualfinish end -Move_PSYSTRIKE: +Move_PSYSTRIKE:: monbg ANIM_TARGET setalpha 8, 8 createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 10, 1 @@ -7078,7 +6128,7 @@ Move_PSYSTRIKE: blendoff end -Move_TAIL_SLAP: +Move_TAIL_SLAP:: loadspritegfx ANIM_TAG_IMPACT @Hit loadspritegfx ANIM_TAG_AIR_WAVE_2 @Aeroblast loadspritegfx ANIM_TAG_PUNISHMENT_BLADES @Punishment Blades @@ -7099,7 +6149,7 @@ TailSlapLeft: createsprite gTailSlapTemplate, ANIM_ATTACKER, 2, 0x8, 0x0, 0x1, 0x0 goto TailSlapContinue -Move_HURRICANE: +Move_HURRICANE:: loadspritegfx ANIM_TAG_GUST monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET @@ -7136,7 +6186,7 @@ HurricaneGustCentered: createvisualtask AnimTask_AnimateGustTornadoPalette, 5, 1, 70 return -Move_HEAD_CHARGE: +Move_HEAD_CHARGE:: loadspritegfx ANIM_TAG_IMPACT fadetobgfromset BG_GIGA_IMPACT_OPPONENT, BG_GIGA_IMPACT_PLAYER, BG_GIGA_IMPACT_OPPONENT waitbgfadein @@ -7156,7 +6206,7 @@ Move_HEAD_CHARGE: waitbgfadeout end -Move_GEAR_GRIND: +Move_GEAR_GRIND:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_GEAR @Gear monbg ANIM_TARGET @@ -7179,7 +6229,7 @@ Move_GEAR_GRIND: blendoff end -Move_SEARING_SHOT: +Move_SEARING_SHOT:: loadspritegfx ANIM_TAG_SPARK_2 @yellow color loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE @red color loadspritegfx ANIM_TAG_ELECTRIC_ORBS @charge @@ -7265,7 +6315,7 @@ Move_SEARING_SHOT: blendoff end -Move_TECHNO_BLAST: +Move_TECHNO_BLAST:: createvisualtask AnimTask_TechnoBlast, 0x5 jumpargeq 0x0, TYPE_FIRE, TechnoBlastFire jumpargeq 0x0, TYPE_WATER, TechnoBlastWater @@ -7728,7 +6778,7 @@ TechnoBlastIceChargeParticles: delay 0x4 return -Move_RELIC_SONG: +Move_RELIC_SONG:: loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE loadspritegfx ANIM_TAG_THIN_RING loadspritegfx ANIM_TAG_MUSIC_NOTES @@ -7809,7 +6859,7 @@ Move_RELIC_SONG: waitforvisualfinish end -Move_SECRET_SWORD: +Move_SECRET_SWORD:: loadspritegfx ANIM_TAG_CUT @Cut loadspritegfx ANIM_TAG_SWORD @Sword loadspritegfx ANIM_TAG_HYDRO_PUMP @Blue Colour @@ -7838,7 +6888,7 @@ Move_SECRET_SWORD: waitforvisualfinish end -Move_GLACIATE: +Move_GLACIATE:: loadspritegfx ANIM_TAG_ICE_CRYSTALS @ice loadspritegfx ANIM_TAG_BLACK_SMOKE @smoke loadspritegfx ANIM_TAG_ICE_CHUNK @White Colour @@ -8502,7 +7552,7 @@ Move_ROTOTILLER:: waitforvisualfinish end -Move_STICKY_WEB: +Move_STICKY_WEB:: loadspritegfx ANIM_TAG_SPIDER_WEB loadspritegfx ANIM_TAG_WEB_THREAD monbg ANIM_DEF_PARTNER @@ -8540,7 +7590,7 @@ Move_STICKY_WEB: createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 5, 1, 2, 9, 0, RGB_BLACK end -Move_FELL_STINGER: +Move_FELL_STINGER:: loadspritegfx ANIM_TAG_NEEDLE loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -8561,7 +7611,7 @@ Move_FELL_STINGER: clearmonbg ANIM_TARGET end -Move_PHANTOM_FORCE: +Move_PHANTOM_FORCE:: loadspritegfx ANIM_TAG_ROUND_SHADOW loadspritegfx ANIM_TAG_IMPACT choosetwoturnanim PhantomForcePrep PhantomForceAttack @@ -8633,7 +7683,7 @@ PhantomForceBg: waitbgfadein return -Move_TRICK_OR_TREAT: +Move_TRICK_OR_TREAT:: loadspritegfx ANIM_TAG_EYE_SPARKLE loadspritegfx ANIM_TAG_GHOSTLY_SPIRIT fadetobg BG_NIGHTMARE @@ -8657,7 +7707,7 @@ Move_TRICK_OR_TREAT: waitbgfadein end -Move_NOBLE_ROAR: +Move_NOBLE_ROAR:: loadspritegfx ANIM_TAG_NOISE_LINE monbg ANIM_ATTACKER splitbgprio ANIM_ATTACKER @@ -8678,10 +7728,10 @@ Move_NOBLE_ROAR: delay 20 end -Move_ION_DELUGE: +Move_ION_DELUGE:: end -Move_PARABOLIC_CHARGE: +Move_PARABOLIC_CHARGE:: loadspritegfx ANIM_TAG_ELECTRIC_ORBS loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_SPARK @@ -8736,7 +7786,7 @@ ParabolicChargeDouble: createvisualtask AnimTask_BlendBattleAnimPal, 5, 4 | 8 | 0x10, 0, 0, 0, RGB_BLACK goto ParabolicChargeHeal; -Move_FORESTS_CURSE: +Move_FORESTS_CURSE:: loadspritegfx ANIM_TAG_ROOTS @frenzy plant loadspritegfx ANIM_TAG_GHOSTLY_SPIRIT @curse monbg ANIM_ATTACKER @@ -8873,7 +7923,7 @@ Move_DISARMING_VOICE:: waitforvisualfinish end -Move_PARTING_SHOT: +Move_PARTING_SHOT:: loadspritegfx ANIM_TAG_NOISE_LINE fadetobg BG_DARK waitbgfadein @@ -8891,7 +7941,7 @@ Move_PARTING_SHOT: waitbgfadein end -Move_TOPSY_TURVY: +Move_TOPSY_TURVY:: loadspritegfx ANIM_TAG_SWEAT_DROP setalpha 12, 8 createsprite gSimplePaletteBlendSpriteTemplate ANIM_TARGET, 2, 1, 2, 0, 4, RGB_BLACK @@ -8908,7 +7958,7 @@ Move_TOPSY_TURVY: blendoff end -Move_DRAINING_KISS: +Move_DRAINING_KISS:: loadspritegfx ANIM_TAG_ORBS loadspritegfx ANIM_TAG_BLUE_STAR loadspritegfx ANIM_TAG_IMPACT @@ -9244,7 +8294,7 @@ Move_FAIRY_WIND:: blendoff end -Move_MOONBLAST: +Move_MOONBLAST:: loadspritegfx ANIM_TAG_SMALL_BUBBLES loadspritegfx ANIM_TAG_MOON loadspritegfx ANIM_TAG_GREEN_SPARKLE @@ -9267,7 +8317,7 @@ Move_MOONBLAST: blendoff end -Move_BOOMBURST: +Move_BOOMBURST:: loadspritegfx ANIM_TAG_EXPLOSION loadspritegfx ANIM_TAG_THIN_RING createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x4 | 0x8 | 0x10 @@ -10151,7 +9201,7 @@ InfestationVortex: delay 0x1 return -Move_POWER_UP_PUNCH: +Move_POWER_UP_PUNCH:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_BREATH @@ -14562,7 +13612,7 @@ BasicExplosion: createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x10, 0x1, 0x1 return -Move_ETERNA_BEAM:: +Move_ETERNABEAM:: goto Move_HYPER_BEAM Move_STEEL_BEAM:: @@ -14840,7 +13890,7 @@ Move_SHELL_SIDE_ARM:: 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 +Move_SHELL_SIDE_ARM_PHYSICAL:: @ Modified Body Slam, placeholder loadspritegfx ANIM_TAG_IMPACT createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_IMPACT, 0, 6, 6, RGB_MAGENTA monbg ANIM_DEF_PARTNER @@ -14866,7 +13916,7 @@ Move_SHELL_SIDE_ARM_PHYSICAL: @ Modified Body Slam, placeholder clearmonbg ANIM_DEF_PARTNER blendoff end -Move_SHELL_SIDE_ARM_SPECIAL: @ Modified Snipe Shot, placeholder +Move_SHELL_SIDE_ARM_SPECIAL:: @ Modified Snipe Shot, placeholder loadspritegfx ANIM_TAG_IMPACT_2 loadspritegfx ANIM_TAG_LEER createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_IMPACT_2, 0, 6, 6, RGB_MAGENTA @@ -16858,7 +15908,7 @@ Move_SYRUP_BOMB:: jumpargeq 0x0, TRUE, Move_SYRUP_BOMB_YELLOW @ Credits to Dat.H A -Move_SYRUP_BOMB_RED: +Move_SYRUP_BOMB_RED:: loadspritegfx ANIM_TAG_SYRUP_BLOB_RED loadspritegfx ANIM_TAG_SYRUP_SPLAT_RED loadspritegfx ANIM_TAG_SYRUP_SHELL_RED @@ -16896,7 +15946,7 @@ SyrupBombProjectileRed: delay 3 return -Move_SYRUP_BOMB_YELLOW: +Move_SYRUP_BOMB_YELLOW:: loadspritegfx ANIM_TAG_SYRUP_BLOB_YELLOW loadspritegfx ANIM_TAG_SYRUP_SPLAT_YELLOW loadspritegfx ANIM_TAG_SYRUP_SHELL_YELLOW @@ -17229,7 +16279,7 @@ Move_UPPER_HAND:: blendoff end -Move_JET_PUNCH: +Move_JET_PUNCH:: loadspritegfx ANIM_TAG_ICE_CRYSTALS loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT @@ -17938,9 +16988,9 @@ Move_MALIGNANT_CHAIN:: end @to do @@@@@@@@@@@@@@@@@@@@@@@ GEN 1-3 @@@@@@@@@@@@@@@@@@@@@@@ -Move_NONE: -Move_MIRROR_MOVE: -Move_POUND: +Move_NONE:: +Move_MIRROR_MOVE:: +Move_POUND:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET setalpha 12, 8 @@ -17952,7 +17002,7 @@ Move_POUND: blendoff end -Move_DOUBLE_SLAP: +Move_DOUBLE_SLAP:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET setalpha 12, 8 @@ -17971,7 +17021,7 @@ DoubleSlapRight: createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 8, 0, ANIM_TARGET, 2 goto DoubleSlapContinue -Move_POISON_POWDER: +Move_POISON_POWDER:: loadspritegfx ANIM_TAG_POISON_POWDER loadspritegfx ANIM_TAG_POISON_BUBBLE loopsewithpan SE_M_POISON_POWDER, SOUND_PAN_TARGET, 10, 6 @@ -17996,7 +17046,7 @@ Move_POISON_POWDER: waitforvisualfinish end -Move_STUN_SPORE: +Move_STUN_SPORE:: loadspritegfx ANIM_TAG_STUN_SPORE loopsewithpan SE_M_POISON_POWDER, SOUND_PAN_TARGET, 10, 6 createsprite gStunSporeParticleSpriteTemplate, ANIM_TARGET, 2, -30, -22, 117, 80, 5, 1 @@ -18020,7 +17070,7 @@ Move_STUN_SPORE: waitforvisualfinish end -Move_SLEEP_POWDER: +Move_SLEEP_POWDER:: loadspritegfx ANIM_TAG_SLEEP_POWDER loopsewithpan SE_M_POISON_POWDER, SOUND_PAN_TARGET, 10, 6 createsprite gSleepPowderParticleSpriteTemplate, ANIM_TARGET, 2, -30, -22, 117, 80, 5, 1 @@ -18044,7 +17094,7 @@ Move_SLEEP_POWDER: waitforvisualfinish end -Move_SWIFT: +Move_SWIFT:: loadspritegfx ANIM_TAG_YELLOW_STAR loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -18071,7 +17121,7 @@ Move_SWIFT: blendoff end -Move_STRENGTH: +Move_STRENGTH:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER setalpha 12, 8 @@ -18097,7 +17147,7 @@ Move_STRENGTH: blendoff end -Move_TACKLE: +Move_TACKLE:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET setalpha 12, 8 @@ -18111,7 +17161,7 @@ Move_TACKLE: blendoff end -Move_BODY_SLAM: +Move_BODY_SLAM:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER setalpha 12, 8 @@ -18137,7 +17187,7 @@ Move_BODY_SLAM: blendoff end -Move_SUPERSONIC: +Move_SUPERSONIC:: loadspritegfx ANIM_TAG_GOLD_RING monbg ANIM_ATK_PARTNER splitbgprio_foes ANIM_ATTACKER @@ -18159,7 +17209,7 @@ SupersonicRing: delay 2 return -Move_SCREECH: +Move_SCREECH:: loadspritegfx ANIM_TAG_PURPLE_RING createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 3, 0, 2, 1 call ScreechRing @@ -18174,7 +17224,7 @@ ScreechRing: delay 2 return -Move_FLAME_WHEEL: +Move_FLAME_WHEEL:: loadspritegfx ANIM_TAG_SMALL_EMBER monbg ANIM_DEF_PARTNER splitbgprio_foes ANIM_TARGET @@ -18216,7 +17266,7 @@ FlameWheel1: @ Unused delay 4 return -Move_PIN_MISSILE: +Move_PIN_MISSILE:: loadspritegfx ANIM_TAG_NEEDLE loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -18245,7 +17295,7 @@ Move_PIN_MISSILE: blendoff end -Move_ICICLE_SPEAR: +Move_ICICLE_SPEAR:: loadspritegfx ANIM_TAG_ICICLE_SPEAR loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -18274,7 +17324,7 @@ Move_ICICLE_SPEAR: blendoff end -Move_TAKE_DOWN: +Move_TAKE_DOWN:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER setalpha 12, 8 @@ -18297,7 +17347,7 @@ Move_TAKE_DOWN: blendoff end -Move_DOUBLE_EDGE: +Move_DOUBLE_EDGE:: loadspritegfx ANIM_TAG_IMPACT playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_ATTACKER, 4, 2, RGB_WHITE, 10, RGB_BLACK, 0 @@ -18330,7 +17380,7 @@ Move_DOUBLE_EDGE: waitforvisualfinish end -Move_POISON_STING: +Move_POISON_STING:: loadspritegfx ANIM_TAG_NEEDLE loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_POISON_BUBBLE @@ -18350,7 +17400,7 @@ Move_POISON_STING: blendoff end -Move_TWINEEDLE: +Move_TWINEEDLE:: loadspritegfx ANIM_TAG_NEEDLE loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -18370,7 +17420,7 @@ Move_TWINEEDLE: blendoff end -Move_FIRE_BLAST: +Move_FIRE_BLAST:: loadspritegfx ANIM_TAG_SMALL_EMBER createsoundtask SoundTask_FireBlast, SE_M_FLAME_WHEEL, SE_M_FLAME_WHEEL2 call FireBlastRing @@ -18418,7 +17468,7 @@ FireBlastCross: createsprite gFireBlastCrossSpriteTemplate, ANIM_TARGET, 2, 0, 0, 15, 2, 2 return -Move_LEECH_SEED: +Move_LEECH_SEED:: loadspritegfx ANIM_TAG_SEED playsewithpan SE_M_POISON_POWDER, SOUND_PAN_ATTACKER createsprite gLeechSeedSpriteTemplate, ANIM_TARGET, 2, 15, 0, 0, 24, 35, -32 @@ -18433,7 +17483,7 @@ Move_LEECH_SEED: waitforvisualfinish end -Move_EMBER: +Move_EMBER:: loadspritegfx ANIM_TAG_SMALL_EMBER loopsewithpan SE_M_EMBER, SOUND_PAN_ATTACKER, 5, 2 createsprite gEmberSpriteTemplate, ANIM_TARGET, 2, 20, 0, -16, 24, 20, 1 @@ -18472,7 +17522,7 @@ SetImpactContestsBG: changebg BG_IMPACT_CONTESTS goto SetImpactBackgroundRet -Move_MEGA_PUNCH: +Move_MEGA_PUNCH:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET monbg ANIM_TARGET @@ -18497,7 +17547,7 @@ Move_MEGA_PUNCH: waitbgfadein end -Move_MEGA_KICK: +Move_MEGA_KICK:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET monbg ANIM_TARGET @@ -18522,7 +17572,7 @@ Move_MEGA_KICK: waitbgfadein end -Move_COMET_PUNCH: +Move_COMET_PUNCH:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET monbg ANIM_TARGET @@ -18544,7 +17594,7 @@ CometPunchRight: createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 3, 8, 0, 8, 1, 0 goto CometPunchContinue -Move_SONIC_BOOM: +Move_SONIC_BOOM:: loadspritegfx ANIM_TAG_AIR_WAVE loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -18569,7 +17619,7 @@ SonicBoomHit: delay 4 return -Move_THUNDER_SHOCK: +Move_THUNDER_SHOCK:: loadspritegfx ANIM_TAG_SPARK loadspritegfx ANIM_TAG_SPARK_2 createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 0, 6, RGB_BLACK @@ -18590,7 +17640,7 @@ Move_THUNDER_SHOCK: waitforvisualfinish end -Move_THUNDERBOLT: +Move_THUNDERBOLT:: loadspritegfx ANIM_TAG_SPARK loadspritegfx ANIM_TAG_SHOCK_3 loadspritegfx ANIM_TAG_SPARK_2 @@ -18639,7 +17689,7 @@ Move_THUNDERBOLT: waitforvisualfinish end -Move_THUNDER_WAVE: +Move_THUNDER_WAVE:: loadspritegfx ANIM_TAG_SPARK loadspritegfx ANIM_TAG_SPARK_2 loadspritegfx ANIM_TAG_SPARK_H @@ -18660,7 +17710,7 @@ Move_THUNDER_WAVE: waitforvisualfinish end -Move_BEAT_UP: +Move_BEAT_UP:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET monbg ANIM_TARGET @@ -18694,7 +17744,7 @@ BeatUpRight: playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET goto BeatUpContinue -Move_STOMP: +Move_STOMP:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -18710,13 +17760,13 @@ Move_STOMP: blendoff end -Move_TAIL_WHIP: +Move_TAIL_WHIP:: loopsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER, 24, 3 createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 12, 4, 2, 3 waitforvisualfinish end -Move_CUT: +Move_CUT:: loadspritegfx ANIM_TAG_CUT monbg ANIM_TARGET setalpha 12, 8 @@ -18730,7 +17780,7 @@ Move_CUT: waitforvisualfinish end -Move_HIDDEN_POWER: +Move_HIDDEN_POWER:: loadspritegfx ANIM_TAG_RED_ORB playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER createvisualtask AnimTask_ScaleMonAndRestore, 5, -7, -7, 11, ANIM_ATTACKER, 0 @@ -18760,7 +17810,7 @@ Move_HIDDEN_POWER: createsprite gHiddenPowerOrbScatterSpriteTemplate, ANIM_TARGET, 2, 224 end -Move_REVERSAL: +Move_REVERSAL:: loadspritegfx ANIM_TAG_BLUE_ORB loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT @@ -18788,7 +17838,7 @@ Move_REVERSAL: createvisualtask AnimTask_ShakeTargetBasedOnMovePowerOrDmg, 5, FALSE, 1, 8, 1, 0 end -Move_PURSUIT: +Move_PURSUIT:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET fadetobg BG_DARK @@ -18815,7 +17865,7 @@ PursuitOnSwitchout: createvisualtask AnimTask_ShakeTargetBasedOnMovePowerOrDmg, 5, FALSE, 1, 6, 1, 0 goto PursuitContinue -Move_SPIKE_CANNON: +Move_SPIKE_CANNON:: loadspritegfx ANIM_TAG_NEEDLE loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -18839,7 +17889,7 @@ Move_SPIKE_CANNON: blendoff end -Move_SWORDS_DANCE: +Move_SWORDS_DANCE:: loadspritegfx ANIM_TAG_SWORD monbg ANIM_ATTACKER setalpha 12, 8 @@ -18854,7 +17904,7 @@ Move_SWORDS_DANCE: delay 1 end -Move_PSYCH_UP: +Move_PSYCH_UP:: loadspritegfx ANIM_TAG_SPIRAL monbg ANIM_ATK_PARTNER createvisualtask AnimTask_BlendColorCycleExclude, 2, 1, 2, 6, 1, 11, RGB_BLACK @@ -18873,7 +17923,7 @@ Move_PSYCH_UP: waitforvisualfinish end -Move_DIZZY_PUNCH: +Move_DIZZY_PUNCH:: loadspritegfx ANIM_TAG_DUCK loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT @@ -18910,7 +17960,7 @@ DizzyPunchLunge: createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 3, 0, 7, 1 return -Move_FIRE_SPIN: +Move_FIRE_SPIN:: loadspritegfx ANIM_TAG_SMALL_EMBER playsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 2, 47, 1 @@ -18935,7 +17985,7 @@ FireSpinEffect: delay 2 return -Move_FURY_CUTTER: +Move_FURY_CUTTER:: loadspritegfx ANIM_TAG_CUT monbg ANIM_TARGET setalpha 12, 8 @@ -18973,7 +18023,7 @@ FuryCutterStrongest: createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 3, RGB(9, 8, 10), 4, RGB_BLACK, 0 goto FuryCutterContinue2 -Move_SELF_DESTRUCT: +Move_SELF_DESTRUCT:: loadspritegfx ANIM_TAG_EXPLOSION createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 1, 0, 9, RGB_RED createvisualtask AnimTask_ShakeMon2, 5, ANIM_PLAYER_LEFT, 6, 0, 38, 1 @@ -19004,7 +18054,7 @@ SelfDestructExplode: delay 6 return -Move_SLAM: +Move_SLAM:: loadspritegfx ANIM_TAG_SLAM_HIT loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -19028,7 +18078,7 @@ Move_SLAM: blendoff end -Move_VINE_WHIP: +Move_VINE_WHIP:: loadspritegfx ANIM_TAG_WHIP_HIT playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 6 @@ -19039,7 +18089,7 @@ Move_VINE_WHIP: createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 6, 1 end -Move_DRILL_PECK: +Move_DRILL_PECK:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_WHIRLWIND_LINES createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 0 @@ -19058,7 +18108,7 @@ Move_DRILL_PECK: waitforvisualfinish end -Move_WATERFALL: +Move_WATERFALL:: loadspritegfx ANIM_TAG_WATER_IMPACT loadspritegfx ANIM_TAG_SMALL_BUBBLES loadspritegfx ANIM_TAG_ICE_CRYSTALS @@ -19143,7 +18193,7 @@ RisingWaterHitEffect: createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0, -20 return -Move_EXPLOSION: +Move_EXPLOSION:: loadspritegfx ANIM_TAG_EXPLOSION createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 8, 9, RGB(26, 8, 8), 8, RGB_BLACK, 8 createvisualtask AnimTask_ShakeMon2, 5, ANIM_PLAYER_LEFT, 8, 0, 40, 1 @@ -19176,7 +18226,7 @@ Explosion1: delay 6 return -Move_DEFENSE_CURL: +Move_DEFENSE_CURL:: loadspritegfx ANIM_TAG_ECLIPSING_ORB loopsewithpan SE_M_TRI_ATTACK, SOUND_PAN_ATTACKER, 18, 3 createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_ATTACKER, FALSE @@ -19188,7 +18238,7 @@ Move_DEFENSE_CURL: waitforvisualfinish end -Move_PROTECT: +Move_PROTECT:: loadspritegfx ANIM_TAG_PROTECT monbg ANIM_ATK_PARTNER splitbgprio ANIM_ATTACKER @@ -19198,7 +18248,7 @@ Move_PROTECT: clearmonbg ANIM_ATK_PARTNER end -Move_DETECT: +Move_DETECT:: loadspritegfx ANIM_TAG_SPARKLE_4 createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 0, 9, RGB_BLACK waitforvisualfinish @@ -19213,7 +18263,7 @@ Move_DETECT: waitforvisualfinish end -Move_FRUSTRATION: +Move_FRUSTRATION:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_ANGER monbg ANIM_DEF_PARTNER @@ -19318,7 +18368,7 @@ Frustration_Weak: createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 6, 1 goto Frustration_Continue -Move_SAFEGUARD: +Move_SAFEGUARD:: loadspritegfx ANIM_TAG_GUARD_RING monbg ANIM_ATK_PARTNER setalpha 8, 8 @@ -19336,7 +18386,7 @@ Move_SAFEGUARD: blendoff end -Move_PAIN_SPLIT: +Move_PAIN_SPLIT:: loadspritegfx ANIM_TAG_PAIN_SPLIT createsprite gPainSplitProjectileSpriteTemplate, ANIM_ATTACKER, 2, -8, -42, ANIM_ATTACKER createsprite gPainSplitProjectileSpriteTemplate, ANIM_TARGET, 2, -8, -42, ANIM_TARGET @@ -19360,7 +18410,7 @@ Move_PAIN_SPLIT: createvisualtask AnimTask_PainSplitMovement, 2, ANIM_TARGET, 2 end -Move_VICE_GRIP: +Move_VISE_GRIP:: loadspritegfx ANIM_TAG_CUT loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -19376,7 +18426,7 @@ Move_VICE_GRIP: blendoff end -Move_GUILLOTINE: +Move_GUILLOTINE:: loadspritegfx ANIM_TAG_CUT loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -19401,7 +18451,7 @@ Move_GUILLOTINE: waitbgfadein end -Move_PAY_DAY: +Move_PAY_DAY:: loadspritegfx ANIM_TAG_COIN loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -19419,7 +18469,7 @@ Move_PAY_DAY: blendoff end -Move_OUTRAGE: +Move_OUTRAGE:: loadspritegfx ANIM_TAG_SMALL_EMBER loopsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER, 8, 3 createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_BG | F_PAL_ATTACKER | F_PAL_TARGET), 2, 5, 3, 8, RGB(14, 13, 0) @@ -19464,7 +18514,7 @@ OutrageFlames: createsprite gOutrageFlameSpriteTemplate, ANIM_TARGET, 2, 0, 0, 30, -1280, -768, 3 return -Move_SPARK: +Move_SPARK:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_SPARK_2 delay 0 @@ -19510,7 +18560,7 @@ Move_SPARK: waitforvisualfinish end -Move_ATTRACT: +Move_ATTRACT:: loadspritegfx ANIM_TAG_RED_HEART loopsewithpan SE_M_CHARM, SOUND_PAN_ATTACKER, 12, 3 createvisualtask AnimTask_SwayMon, 5, 0, 12, 4096, 4, ANIM_ATTACKER @@ -19539,7 +18589,7 @@ Move_ATTRACT: createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 4, 4, 0, 10, RGB(31, 25, 27) end -Move_GROWTH: +Move_GROWTH:: call GrowthEffect waitforvisualfinish call GrowthEffect @@ -19551,7 +18601,7 @@ GrowthEffect: createvisualtask AnimTask_ScaleMonAndRestore, 5, -3, -3, 16, ANIM_ATTACKER, 0 return -Move_WHIRLWIND: +Move_WHIRLWIND:: loadspritegfx ANIM_TAG_WHIRLWIND_LINES createsprite gWhirlwindLineSpriteTemplate, ANIM_ATTACKER, 2, 0, -8, ANIM_TARGET, 60, 0 createsprite gWhirlwindLineSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 60, 1 @@ -19570,7 +18620,7 @@ Move_WHIRLWIND: waitforvisualfinish end -Move_CONFUSE_RAY: +Move_CONFUSE_RAY:: loadspritegfx ANIM_TAG_YELLOW_BALL monbg ANIM_DEF_PARTNER fadetobg BG_GHOST @@ -19590,7 +18640,7 @@ Move_CONFUSE_RAY: waitbgfadein end -Move_LOCK_ON: +Move_LOCK_ON:: loadspritegfx ANIM_TAG_LOCK_ON createsprite gLockOnTargetSpriteTemplate, ANIM_ATTACKER, 40 createsprite gLockOnMoveTargetSpriteTemplate, ANIM_ATTACKER, 40, 1 @@ -19602,7 +18652,7 @@ Move_LOCK_ON: waitforvisualfinish end -Move_MEAN_LOOK: +Move_MEAN_LOOK:: loadspritegfx ANIM_TAG_EYE monbg ANIM_DEF_PARTNER playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER @@ -19617,7 +18667,7 @@ Move_MEAN_LOOK: waitforvisualfinish end -Move_ROCK_THROW: +Move_ROCK_THROW:: loadspritegfx ANIM_TAG_ROCKS createsprite gShakeMonOrTerrainSpriteTemplate, ANIM_TARGET, 2, 6, 1, 15, 1 createsprite gFallingRockSpriteTemplate, ANIM_TARGET, 2, 0, 1, 0, 0 @@ -19638,7 +18688,7 @@ Move_ROCK_THROW: waitforvisualfinish end -Move_ROCK_SLIDE: +Move_ROCK_SLIDE:: loadspritegfx ANIM_TAG_ROCKS monbg ANIM_DEF_PARTNER createsprite gShakeMonOrTerrainSpriteTemplate, ANIM_ATTACKER, 2, 7, 1, 11, 1 @@ -19689,7 +18739,7 @@ RockSlideRocks: delay 2 return -Move_THIEF: +Move_THIEF:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET delay 1 @@ -19709,7 +18759,7 @@ Move_THIEF: waitbgfadein end -Move_BUBBLE_BEAM: +Move_BUBBLE_BEAM:: loadspritegfx ANIM_TAG_BUBBLE loadspritegfx ANIM_TAG_SMALL_BUBBLES monbg ANIM_TARGET @@ -19747,7 +18797,7 @@ BulbblebeamCreateBubbles: delay 3 return -Move_ICY_WIND: +Move_ICY_WIND:: loadspritegfx ANIM_TAG_ICE_CRYSTALS loadspritegfx ANIM_TAG_ICE_SPIKES monbg ANIM_DEF_PARTNER @@ -19783,7 +18833,7 @@ IcyWindSwirlingSnowballs: createsprite gSwirlingSnowballSpriteTemplate, ANIM_TARGET, 40, 0, -5, 0, -5, 72, 1 return -Move_SMOKESCREEN: +Move_SMOKESCREEN:: loadspritegfx ANIM_TAG_BLACK_SMOKE loadspritegfx ANIM_TAG_BLACK_BALL playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER @@ -19807,7 +18857,7 @@ Move_SMOKESCREEN: waitforvisualfinish end -Move_CONVERSION: +Move_CONVERSION:: loadspritegfx ANIM_TAG_CONVERSION monbg ANIM_ATK_PARTNER splitbgprio ANIM_ATTACKER @@ -19859,7 +18909,7 @@ Move_CONVERSION: blendoff end -Move_CONVERSION_2: +Move_CONVERSION_2:: loadspritegfx ANIM_TAG_CONVERSION monbg ANIM_DEF_PARTNER splitbgprio_foes ANIM_TARGET @@ -19904,7 +18954,7 @@ Move_CONVERSION_2: blendoff end -Move_ROLLING_KICK: +Move_ROLLING_KICK:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -19926,7 +18976,7 @@ Move_ROLLING_KICK: blendoff end -Move_HEADBUTT: +Move_HEADBUTT:: loadspritegfx ANIM_TAG_IMPACT createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 0 playsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER @@ -19942,7 +18992,7 @@ Move_HEADBUTT: waitforvisualfinish end -Move_HORN_ATTACK: +Move_HORN_ATTACK:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HORN_HIT createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 0 @@ -19960,7 +19010,7 @@ Move_HORN_ATTACK: waitforvisualfinish end -Move_FURY_ATTACK: +Move_FURY_ATTACK:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HORN_HIT createvisualtask AnimTask_RotateMonSpriteToSide, 2, 4, 256, ANIM_ATTACKER, 2 @@ -19984,7 +19034,7 @@ FuryAttackLeft: playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET goto FuryAttackContinue -Move_HORN_DRILL: +Move_HORN_DRILL:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HORN_HIT jumpifcontest HornDrillInContest @@ -20051,7 +19101,7 @@ HornDrillInContest: createvisualtask AnimTask_StartSlidingBg, 5, 2304, 768, 0, -1 goto HornDrillContinue -Move_THRASH: +Move_THRASH:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET createvisualtask AnimTask_ThrashMoveMonHorizontal, 2 @@ -20069,7 +19119,7 @@ Move_THRASH: playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET end -Move_SING: +Move_SING:: loadspritegfx ANIM_TAG_MUSIC_NOTES monbg ANIM_DEF_PARTNER createvisualtask AnimTask_MusicNotesRainbowBlend, 2 @@ -20105,7 +19155,7 @@ Move_SING: waitforvisualfinish end -Move_LOW_KICK: +Move_LOW_KICK:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 20, 0, 0, 4 @@ -20118,7 +19168,7 @@ Move_LOW_KICK: createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 1, 4 end -Move_EARTHQUAKE: +Move_EARTHQUAKE:: createvisualtask AnimTask_HorizontalShake, 5, ANIM_PLAYER_RIGHT, 10, 50 createvisualtask AnimTask_HorizontalShake, 5, ANIM_PLAYER_LEFT, 10, 50 playsewithpan SE_M_EARTHQUAKE, 0 @@ -20128,7 +19178,7 @@ Move_EARTHQUAKE: createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 1, RGB_BLACK, 14, RGB_WHITE, 14 end -Move_FISSURE: +Move_FISSURE:: loadspritegfx ANIM_TAG_MUD_SAND createvisualtask AnimTask_HorizontalShake, 3, ANIM_PLAYER_RIGHT, 10, 50 createvisualtask AnimTask_HorizontalShake, 3, ANIM_TARGET, 10, 50 @@ -20171,7 +19221,7 @@ FissureDirtPlumeClose: playsewithpan SE_M_DIG, SOUND_PAN_TARGET return -Move_DIG: +Move_DIG:: choosetwoturnanim DigSetUp, DigUnleash DigEnd: end @@ -20219,7 +19269,7 @@ DigThrowDirt: delay 32 return -Move_MEDITATE: +Move_MEDITATE:: call SetPsychicBackground createvisualtask AnimTask_MeditateStretchAttacker, 2 playsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER @@ -20229,7 +19279,7 @@ Move_MEDITATE: call UnsetPsychicBg end -Move_AGILITY: +Move_AGILITY:: monbg ANIM_ATK_PARTNER setalpha 12, 8 createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 24, 6, 4, 4 @@ -20250,7 +19300,7 @@ Move_AGILITY: delay 1 end -Move_QUICK_ATTACK: +Move_QUICK_ATTACK:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_ATK_PARTNER setalpha 12, 8 @@ -20267,7 +19317,7 @@ Move_QUICK_ATTACK: waitforvisualfinish end -Move_RAGE: +Move_RAGE:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_ANGER monbg ANIM_TARGET @@ -20288,7 +19338,7 @@ Move_RAGE: clearmonbg ANIM_TARGET end -Move_TELEPORT: +Move_TELEPORT:: call SetPsychicBackground createvisualtask AnimTask_Teleport, 2 playsewithpan SE_M_TELEPORT, SOUND_PAN_ATTACKER @@ -20323,12 +19373,12 @@ DoubleTeamAnimRet: delay 1 return -Move_DOUBLE_TEAM: +Move_DOUBLE_TEAM:: createvisualtask AnimTask_DoubleTeam, 2 call DoubleTeamAnimRet end -Move_MINIMIZE: +Move_MINIMIZE:: setalpha 10, 8 createvisualtask AnimTask_Minimize, 2 loopsewithpan SE_M_MINIMIZE, SOUND_PAN_ATTACKER, 34, 3 @@ -20336,7 +19386,7 @@ Move_MINIMIZE: blendoff end -Move_METRONOME: +Move_METRONOME:: loadspritegfx ANIM_TAG_FINGER loadspritegfx ANIM_TAG_THOUGHT_BUBBLE createsprite gThoughtBubbleSpriteTemplate, ANIM_ATTACKER, 11, 0, 100 @@ -20348,7 +19398,7 @@ Move_METRONOME: waitforvisualfinish end -Move_SKULL_BASH: +Move_SKULL_BASH:: choosetwoturnanim SkullBashSetUp, SkullBashAttack SkullBashEnd: end @@ -20381,7 +19431,7 @@ SkullBashAttack: createvisualtask AnimTask_SkullBashPosition, 2, 1 goto SkullBashEnd -Move_AMNESIA: +Move_AMNESIA:: loadspritegfx ANIM_TAG_AMNESIA call SetPsychicBackground delay 8 @@ -20393,7 +19443,7 @@ Move_AMNESIA: call UnsetPsychicBg end -Move_KINESIS: +Move_KINESIS:: loadspritegfx ANIM_TAG_ALERT loadspritegfx ANIM_TAG_BENT_SPOON playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER @@ -20412,7 +19462,7 @@ Move_KINESIS: call UnsetPsychicBg end -Move_GLARE: +Move_GLARE:: loadspritegfx ANIM_TAG_SMALL_RED_EYE loadspritegfx ANIM_TAG_EYE_SPARKLE createvisualtask AnimTask_GlareEyeDots, 5, 0 @@ -20430,7 +19480,7 @@ Move_GLARE: createvisualtask AnimTask_BlendBattleAnimPal, 5, F_PAL_BG, 0, 16, 0, RGB_BLACK end -Move_BARRAGE: +Move_BARRAGE:: loadspritegfx ANIM_TAG_RED_BALL createvisualtask AnimTask_BarrageBall, 3 playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER @@ -20441,7 +19491,7 @@ Move_BARRAGE: loopsewithpan SE_M_STRENGTH, SOUND_PAN_TARGET, 8, 2 end -Move_SKY_ATTACK: +Move_SKY_ATTACK:: choosetwoturnanim SkyAttackSetUp, SkyAttackUnleash SkyAttackEnd: end @@ -20507,20 +19557,20 @@ SkyAttackUnleash: call UnsetSkyBg goto SkyAttackEnd -Move_FLASH: +Move_FLASH:: playsewithpan SE_M_LEER, SOUND_PAN_ATTACKER createvisualtask AnimTask_Flash, 2 waitforvisualfinish end -Move_SPLASH: +Move_SPLASH:: createvisualtask AnimTask_Splash, 2, ANIM_ATTACKER, 3 delay 8 loopsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER, 38, 3 waitforvisualfinish end -Move_ACID_ARMOR: +Move_ACID_ARMOR:: monbg ANIM_ATTACKER setalpha 15, 0 createvisualtask AnimTask_AcidArmor, 2, ANIM_ATTACKER @@ -20531,13 +19581,13 @@ Move_ACID_ARMOR: delay 1 end -Move_SHARPEN: +Move_SHARPEN:: loadspritegfx ANIM_TAG_SPHERE_TO_CUBE createsprite gSharpenSphereSpriteTemplate, ANIM_ATTACKER, 2 waitforvisualfinish end -Move_SUPER_FANG: +Move_SUPER_FANG:: loadspritegfx ANIM_TAG_FANG_ATTACK createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 1, 0, 20, 1 playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER @@ -20557,7 +19607,7 @@ Move_SUPER_FANG: blendoff end -Move_SLASH: +Move_SLASH:: loadspritegfx ANIM_TAG_SLASH createsprite gSlashSliceSpriteTemplate, ANIM_TARGET, 2, 1, -8, 0 playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET @@ -20568,7 +19618,7 @@ Move_SLASH: waitforvisualfinish end -Move_STRUGGLE: +Move_STRUGGLE:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_MOVEMENT_WAVES monbg ANIM_TARGET @@ -20586,7 +19636,7 @@ Move_STRUGGLE: blendoff end -Move_SKETCH: +Move_SKETCH:: loadspritegfx ANIM_TAG_PENCIL monbg ANIM_TARGET createvisualtask AnimTask_SketchDrawMon, 2 @@ -20597,7 +19647,7 @@ Move_SKETCH: loopsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER, 38, 2 end -Move_NIGHTMARE: +Move_NIGHTMARE:: fadetobg BG_GHOST waitbgfadein jumpifcontest NightmareInContest @@ -20619,7 +19669,7 @@ NightmareInContest: waitbgfadein end -Move_FLAIL: +Move_FLAIL:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET setalpha 12, 8 @@ -20634,7 +19684,7 @@ Move_FLAIL: blendoff end -Move_SPITE: +Move_SPITE:: fadetobg BG_GHOST playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER waitbgfadein @@ -20668,7 +19718,7 @@ UnsetHighSpeedBg: waitbgfadein return -Move_MACH_PUNCH: +Move_MACH_PUNCH:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET monbg ANIM_ATK_PARTNER @@ -20688,7 +19738,7 @@ Move_MACH_PUNCH: call UnsetHighSpeedBg end -Move_FORESIGHT: +Move_FORESIGHT:: loadspritegfx ANIM_TAG_MAGNIFYING_GLASS monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET @@ -20707,7 +19757,7 @@ Move_FORESIGHT: clearmonbg ANIM_DEF_PARTNER end -Move_DESTINY_BOND: +Move_DESTINY_BOND:: loadspritegfx ANIM_TAG_WHITE_SHADOW fadetobg BG_GHOST playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER @@ -20727,7 +19777,7 @@ Move_DESTINY_BOND: clearmonbg 5 end -Move_ENDURE: +Move_ENDURE:: loadspritegfx ANIM_TAG_FOCUS_ENERGY playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call EndureEffect @@ -20752,7 +19802,7 @@ EndureEffect: createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0, -12, 0, 1 return -Move_CHARM: +Move_CHARM:: loadspritegfx ANIM_TAG_MAGENTA_HEART createvisualtask AnimTask_RockMonBackAndForth, 5, ANIM_ATTACKER, 2, 0 createsprite gMagentaHeartSpriteTemplate, ANIM_ATTACKER, 3, 0, 20 @@ -20766,7 +19816,7 @@ Move_CHARM: waitforvisualfinish end -Move_ROLLOUT: +Move_ROLLOUT:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_MUD_SAND loadspritegfx ANIM_TAG_ROCKS @@ -20783,7 +19833,7 @@ Move_ROLLOUT: blendoff end -Move_FALSE_SWIPE: +Move_FALSE_SWIPE:: loadspritegfx ANIM_TAG_SLASH_2 loadspritegfx ANIM_TAG_IMPACT createsprite gFalseSwipeSliceSpriteTemplate, ANIM_TARGET, 2 @@ -20810,7 +19860,7 @@ Move_FALSE_SWIPE: playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET end -Move_SWAGGER: +Move_SWAGGER:: loadspritegfx ANIM_TAG_BREATH loadspritegfx ANIM_TAG_ANGER createvisualtask AnimTask_GrowAndShrink, 2 @@ -20828,7 +19878,7 @@ Move_SWAGGER: waitforvisualfinish end -Move_MILK_DRINK: +Move_MILK_DRINK:: loadspritegfx ANIM_TAG_MILK_BOTTLE loadspritegfx ANIM_TAG_THIN_RING loadspritegfx ANIM_TAG_BLUE_STAR @@ -20849,7 +19899,7 @@ Move_MILK_DRINK: waitforvisualfinish end -Move_MAGNITUDE: +Move_MAGNITUDE:: createvisualtask AnimTask_IsPowerOver99, 2 waitforvisualfinish jumpreteq FALSE, MagnitudeRegular @@ -20871,7 +19921,7 @@ MagnitudeIntense: createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 1, RGB_BLACK, 14, RGB_WHITE, 14 goto MagnitudeEnd -Move_RAPID_SPIN: +Move_RAPID_SPIN:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_RAPID_SPIN monbg ANIM_ATTACKER @@ -20890,7 +19940,7 @@ Move_RAPID_SPIN: clearmonbg ANIM_ATTACKER end -Move_MOONLIGHT: +Move_MOONLIGHT:: loadspritegfx ANIM_TAG_MOON loadspritegfx ANIM_TAG_GREEN_SPARKLE loadspritegfx ANIM_TAG_BLUE_STAR @@ -20917,7 +19967,7 @@ Move_MOONLIGHT: waitforvisualfinish end -Move_EXTREME_SPEED: +Move_EXTREME_SPEED:: loadspritegfx ANIM_TAG_SPEED_DUST loadspritegfx ANIM_TAG_IMPACT call SetHighSpeedBg @@ -20953,7 +20003,7 @@ Move_EXTREME_SPEED: delay 1 end -Move_UPROAR: +Move_UPROAR:: loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE loadspritegfx ANIM_TAG_THIN_RING monbg ANIM_DEF_PARTNER @@ -20978,7 +20028,7 @@ Move_UPROAR: clearmonbg ANIM_DEF_PARTNER end -Move_HEAT_WAVE: +Move_HEAT_WAVE:: loadspritegfx ANIM_TAG_FLYING_DIRT createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_FLYING_DIRT, 0, 6, 6, RGB_RED createvisualtask AnimTask_LoadSandstormBackground, 5, TRUE @@ -21003,7 +20053,7 @@ Move_HEAT_WAVE: end @ Also used by Hail weather -Move_HAIL: +Move_HAIL:: loadspritegfx ANIM_TAG_HAIL loadspritegfx ANIM_TAG_ICE_CRYSTALS createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 3, 0, 6, RGB_BLACK @@ -21014,7 +20064,7 @@ Move_HAIL: createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 3, 6, 0, RGB_BLACK end -Move_TORMENT: +Move_TORMENT:: loadspritegfx ANIM_TAG_ANGER loadspritegfx ANIM_TAG_THOUGHT_BUBBLE createvisualtask AnimTask_TormentAttacker, 2 @@ -21027,7 +20077,7 @@ Move_TORMENT: playsewithpan SE_M_SWAGGER2, SOUND_PAN_TARGET end -Move_MEMENTO: +Move_MEMENTO:: setalpha 0, 16 delay 1 createvisualtask AnimTask_InitMementoShadow, 2 @@ -21051,14 +20101,14 @@ Move_MEMENTO: delay 1 end -Move_FACADE: +Move_FACADE:: loadspritegfx ANIM_TAG_SWEAT_DROP createvisualtask AnimTask_SquishAndSweatDroplets, 2, ANIM_ATTACKER, 3 createvisualtask AnimTask_FacadeColorBlend, 2, ANIM_ATTACKER, 72 loopsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER, 24, 3 end -Move_SMELLING_SALTS: +Move_SMELLING_SALTS:: loadspritegfx ANIM_TAG_TAG_HAND loadspritegfx ANIM_TAG_SMELLINGSALT_EFFECT createsprite gSmellingSaltsHandSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0, 2 @@ -21073,7 +20123,7 @@ Move_SMELLING_SALTS: loopsewithpan SE_M_SWAGGER2, SOUND_PAN_TARGET, 16, 3 end -Move_FOLLOW_ME: +Move_FOLLOW_ME:: loadspritegfx ANIM_TAG_FINGER createsprite gFollowMeFingerSpriteTemplate, ANIM_ATTACKER, 2, 0 playsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER @@ -21083,7 +20133,7 @@ Move_FOLLOW_ME: loopsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER, 22, 3 end -Move_CHARGE: +Move_CHARGE:: loadspritegfx ANIM_TAG_ELECTRIC_ORBS loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_ELECTRICITY @@ -21118,7 +20168,7 @@ Move_CHARGE: blendoff end -Move_TAUNT: +Move_TAUNT:: loadspritegfx ANIM_TAG_FINGER_2 loadspritegfx ANIM_TAG_THOUGHT_BUBBLE loadspritegfx ANIM_TAG_ANGER @@ -21138,7 +20188,7 @@ Move_TAUNT: playsewithpan SE_M_SWAGGER2, SOUND_PAN_TARGET end -Move_HELPING_HAND: +Move_HELPING_HAND:: loadspritegfx ANIM_TAG_TAG_HAND createvisualtask AnimTask_HelpingHandAttackerMovement, 5 createsprite gHelpingHandClapSpriteTemplate, ANIM_ATTACKER, 40, 0 @@ -21155,7 +20205,7 @@ Move_HELPING_HAND: createvisualtask AnimTask_BlendMonInAndOut, 2, ANIM_ATK_PARTNER, RGB_YELLOW, 12, 1, 1 end -Move_ASSIST: +Move_ASSIST:: loadspritegfx ANIM_TAG_PAW_PRINT createsprite gAssistPawprintSpriteTemplate, ANIM_ATTACKER, 50, 112, -16, 140, 128, 36 delay 2 @@ -21172,7 +20222,7 @@ Move_ASSIST: playsewithpan SE_M_SCRATCH, 0 end -Move_SUPERPOWER: +Move_SUPERPOWER:: loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_METEOR loadspritegfx ANIM_TAG_FLAT_ROCK @@ -21206,7 +20256,7 @@ Move_SUPERPOWER: delay 1 end -Move_RECYCLE: +Move_RECYCLE:: loadspritegfx ANIM_TAG_RECYCLE monbg ANIM_ATTACKER setalpha 0, 16 @@ -21222,7 +20272,7 @@ Move_RECYCLE: delay 1 end -Move_BRICK_BREAK: +Move_BRICK_BREAK:: loadspritegfx ANIM_TAG_BLUE_LIGHT_WALL loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET @@ -21286,7 +20336,7 @@ BrickBreakShatteredWall: clearmonbg ANIM_TARGET end -Move_YAWN: +Move_YAWN:: loadspritegfx ANIM_TAG_PINK_CLOUD createvisualtask AnimTask_DeepInhale, 2, ANIM_ATTACKER playsewithpan SE_M_YAWN, SOUND_PAN_ATTACKER @@ -21302,7 +20352,7 @@ Move_YAWN: playsewithpan SE_M_YAWN, SOUND_PAN_TARGET end -Move_ENDEAVOR: +Move_ENDEAVOR:: loadspritegfx ANIM_TAG_SWEAT_DROP loadspritegfx ANIM_TAG_IMPACT createvisualtask AnimTask_SquishAndSweatDroplets, 2, ANIM_ATTACKER, 2 @@ -21318,7 +20368,7 @@ Move_ENDEAVOR: playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET end -Move_ERUPTION: +Move_ERUPTION:: loadspritegfx ANIM_TAG_WARM_ROCK createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 2, 0, 4, RGB_RED waitforvisualfinish @@ -21343,7 +20393,7 @@ Move_ERUPTION: createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 40, F_PAL_BG | F_PAL_BATTLERS, 4, 4, 0, RGB_RED end -Move_SKILL_SWAP: +Move_SKILL_SWAP:: loadspritegfx ANIM_TAG_BLUEGREEN_ORB call SetPsychicBackground createvisualtask AnimTask_SkillSwap, 3, ANIM_TARGET @@ -21356,7 +20406,7 @@ Move_SKILL_SWAP: call UnsetPsychicBg end -Move_IMPRISON: +Move_IMPRISON:: loadspritegfx ANIM_TAG_HOLLOW_ORB loadspritegfx ANIM_TAG_X_SIGN call SetPsychicBackground @@ -21373,7 +20423,7 @@ Move_IMPRISON: call UnsetPsychicBg end -Move_GRUDGE: +Move_GRUDGE:: loadspritegfx ANIM_TAG_PURPLE_FLAME monbg ANIM_ATTACKER splitbgprio_all @@ -21391,7 +20441,7 @@ Move_GRUDGE: clearmonbg ANIM_ATTACKER end -Move_CAMOUFLAGE: +Move_CAMOUFLAGE:: monbg ANIM_ATK_PARTNER splitbgprio ANIM_ATTACKER setalpha 16, 0 @@ -21409,7 +20459,7 @@ Move_CAMOUFLAGE: clearmonbg ANIM_ATK_PARTNER end -Move_TAIL_GLOW: +Move_TAIL_GLOW:: loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT monbg ANIM_ATTACKER setalpha 12, 8 @@ -21425,7 +20475,7 @@ Move_TAIL_GLOW: delay 1 end -Move_LUSTER_PURGE: +Move_LUSTER_PURGE:: loadspritegfx ANIM_TAG_WHITE_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_IMPACT fadetobg BG_PSYCHIC @@ -21468,7 +20518,7 @@ Move_LUSTER_PURGE: call UnsetPsychicBg end -Move_MIST_BALL: +Move_MIST_BALL:: loadspritegfx ANIM_TAG_SMALL_BUBBLES loadspritegfx ANIM_TAG_WHITE_FEATHER delay 0 @@ -21488,7 +20538,7 @@ Move_MIST_BALL: createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 16, 0, RGB_WHITE end -Move_FEATHER_DANCE: +Move_FEATHER_DANCE:: loadspritegfx ANIM_TAG_WHITE_FEATHER monbg ANIM_DEF_PARTNER splitbgprio_all @@ -21510,7 +20560,7 @@ Move_FEATHER_DANCE: clearmonbg ANIM_DEF_PARTNER end -Move_TEETER_DANCE: +Move_TEETER_DANCE:: loadspritegfx ANIM_TAG_MUSIC_NOTES loadspritegfx ANIM_TAG_DUCK createvisualtask AnimTask_TeeterDanceMovement, 5 @@ -21530,7 +20580,7 @@ Move_TEETER_DANCE: playsewithpan SE_M_TEETER_DANCE, SOUND_PAN_ATTACKER end -Move_MUD_SPORT: +Move_MUD_SPORT:: loadspritegfx ANIM_TAG_MUD_SAND createvisualtask AnimTask_Splash, 2, ANIM_ATTACKER, 6 delay 24 @@ -21577,7 +20627,7 @@ Move_MUD_SPORT: waitplaysewithpan SE_M_BUBBLE2, 0, 10 end -Move_NEEDLE_ARM: +Move_NEEDLE_ARM:: loadspritegfx ANIM_TAG_GREEN_SPIKE loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET @@ -21620,7 +20670,7 @@ Move_NEEDLE_ARM: createsprite gNeedleArmSpikeSpriteTemplate, ANIM_TARGET, 2, 1, 1, -17, -17, 10 end -Move_SLACK_OFF: +Move_SLACK_OFF:: loadspritegfx ANIM_TAG_BLUE_STAR createvisualtask AnimTask_SlackOffSquish, 2, ANIM_ATTACKER playsewithpan SE_M_YAWN, SOUND_PAN_ATTACKER @@ -21629,7 +20679,7 @@ Move_SLACK_OFF: waitforvisualfinish end -Move_CRUSH_CLAW: +Move_CRUSH_CLAW:: loadspritegfx ANIM_TAG_BLUE_LIGHT_WALL loadspritegfx ANIM_TAG_CLAW_SLASH loadspritegfx ANIM_TAG_TORN_METAL @@ -21650,7 +20700,7 @@ Move_CRUSH_CLAW: clearmonbg ANIM_TARGET end -Move_AROMATHERAPY: +Move_AROMATHERAPY:: playsewithpan SE_M_PETAL_DANCE, 0 loadspritegfx ANIM_TAG_FLOWER loadspritegfx ANIM_TAG_THIN_RING @@ -21689,7 +20739,7 @@ Move_AROMATHERAPY: waitforvisualfinish end -Move_FAKE_TEARS: +Move_FAKE_TEARS:: loadspritegfx ANIM_TAG_SMALL_BUBBLES loadspritegfx ANIM_TAG_THOUGHT_BUBBLE loadspritegfx ANIM_TAG_MUSIC_NOTES @@ -21712,7 +20762,7 @@ Move_FAKE_TEARS: waitforvisualfinish end -Move_AIR_CUTTER: +Move_AIR_CUTTER:: loadspritegfx ANIM_TAG_AIR_WAVE loadspritegfx ANIM_TAG_CUT loadspritegfx ANIM_TAG_IMPACT @@ -21733,7 +20783,7 @@ Move_AIR_CUTTER: delay 0 end -Move_ODOR_SLEUTH: +Move_ODOR_SLEUTH:: monbg ANIM_TARGET createvisualtask AnimTask_OdorSleuthMovement, 5 delay 24 @@ -21749,7 +20799,7 @@ Move_ODOR_SLEUTH: playsewithpan SE_M_LEER, SOUND_PAN_ATTACKER end -Move_GRASS_WHISTLE: +Move_GRASS_WHISTLE:: loadspritegfx ANIM_TAG_MUSIC_NOTES createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 0, 4, RGB(18, 31, 12) waitforvisualfinish @@ -21786,7 +20836,7 @@ Move_GRASS_WHISTLE: waitforvisualfinish end -Move_TICKLE: +Move_TICKLE:: loadspritegfx ANIM_TAG_EYE_SPARKLE createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_ATTACKER, 0, 0, 16, RGB_BLACK waitforvisualfinish @@ -21804,7 +20854,7 @@ Move_TICKLE: waitforvisualfinish end -Move_WATER_SPOUT: +Move_WATER_SPOUT:: loadspritegfx ANIM_TAG_GLOWY_BLUE_ORB loadspritegfx ANIM_TAG_WATER_IMPACT monbg ANIM_DEF_PARTNER @@ -21821,7 +20871,7 @@ Move_WATER_SPOUT: blendoff end -Move_SHADOW_PUNCH: +Move_SHADOW_PUNCH:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET fadetobg BG_GHOST @@ -21842,7 +20892,7 @@ Move_SHADOW_PUNCH: waitbgfadein end -Move_EXTRASENSORY: +Move_EXTRASENSORY:: call SetPsychicBackground monbg ANIM_DEF_PARTNER setalpha 12, 8 @@ -21863,7 +20913,7 @@ Move_EXTRASENSORY: call UnsetPsychicBg end -Move_AERIAL_ACE: +Move_AERIAL_ACE:: loadspritegfx ANIM_TAG_CUT monbg ANIM_TARGET setalpha 12, 8 @@ -21880,20 +20930,20 @@ Move_AERIAL_ACE: blendoff end -Move_IRON_DEFENSE: +Move_IRON_DEFENSE:: loopsewithpan SE_SHINY, SOUND_PAN_ATTACKER, 28, 2 createvisualtask AnimTask_MetallicShine, 5, 0, 0, RGB_BLACK createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 8, 2, RGB_WHITEALPHA, 14, RGB_WHITEALPHA, 0 waitforvisualfinish end -Move_BLOCK: +Move_BLOCK:: loadspritegfx ANIM_TAG_X_SIGN createsprite gBlockXSpriteTemplate, ANIM_TARGET, 66 playsewithpan SE_M_SWAGGER, SOUND_PAN_TARGET end -Move_HOWL: +Move_HOWL:: loadspritegfx ANIM_TAG_NOISE_LINE createvisualtask AnimTask_DeepInhale, 2, ANIM_ATTACKER delay 12 @@ -21903,7 +20953,7 @@ Move_HOWL: delay 30 end -Move_BULK_UP: +Move_BULK_UP:: loadspritegfx ANIM_TAG_BREATH createvisualtask AnimTask_GrowAndShrink, 2 playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER @@ -21913,7 +20963,7 @@ Move_BULK_UP: waitforvisualfinish end -Move_COVET: +Move_COVET:: loadspritegfx ANIM_TAG_MAGENTA_HEART loadspritegfx ANIM_TAG_ITEM_BAG createvisualtask AnimTask_RockMonBackAndForth, 5, ANIM_ATTACKER, 2, 0 @@ -21930,7 +20980,7 @@ Move_COVET: loopsewithpan SE_M_DIZZY_PUNCH, SOUND_PAN_TARGET, 4, 3 end -Move_VOLT_TACKLE: +Move_VOLT_TACKLE:: loadspritegfx ANIM_TAG_SPARK loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_ELECTRICITY @@ -21977,7 +21027,7 @@ Move_VOLT_TACKLE: waitforvisualfinish end -Move_WATER_SPORT: +Move_WATER_SPORT:: loadspritegfx ANIM_TAG_GLOWY_BLUE_ORB createvisualtask AnimTask_WaterSport, 5 delay 8 @@ -21990,7 +21040,7 @@ Move_WATER_SPORT: panse SE_M_SURF, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 end -Move_CALM_MIND: +Move_CALM_MIND:: loadspritegfx ANIM_TAG_THIN_RING monbg ANIM_ATK_PARTNER createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, ANIM_ATTACKER, 0, 0, 16, RGB_BLACK @@ -22013,7 +21063,7 @@ Move_CALM_MIND: clearmonbg ANIM_ATK_PARTNER end -Move_LEAF_BLADE: +Move_LEAF_BLADE:: loadspritegfx ANIM_TAG_LEAF loadspritegfx ANIM_TAG_CROSS_IMPACT createvisualtask AnimTask_LeafBlade, 5 @@ -22038,7 +21088,7 @@ Move_LEAF_BLADE: blendoff end -Move_DRAGON_DANCE: +Move_DRAGON_DANCE:: loadspritegfx ANIM_TAG_HOLLOW_ORB monbg ANIM_ATTACKER splitbgprio ANIM_ATTACKER @@ -22062,7 +21112,7 @@ Move_DRAGON_DANCE: delay 1 end -Move_SHOCK_WAVE: +Move_SHOCK_WAVE:: loadspritegfx ANIM_TAG_ELECTRIC_ORBS loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_SPARK @@ -22092,13 +21142,13 @@ Move_SHOCK_WAVE: blendoff end -Move_HARDEN: +Move_HARDEN:: loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 createvisualtask AnimTask_MetallicShine, 5, 0, 0, RGB_BLACK waitforvisualfinish end -Move_BELLY_DRUM: +Move_BELLY_DRUM:: loadspritegfx ANIM_TAG_MUSIC_NOTES loadspritegfx ANIM_TAG_PURPLE_HAND_OUTLINE createvisualtask AnimTask_MusicNotesRainbowBlend, 2 @@ -22141,7 +21191,7 @@ BellyDrumRight: createvisualtask AnimTask_ShakeMon, 2, ANIM_ATTACKER, 0, 8, 2, 1 return -Move_MIND_READER: +Move_MIND_READER:: loadspritegfx ANIM_TAG_TEAL_ALERT loadspritegfx ANIM_TAG_OPENING_EYE loadspritegfx ANIM_TAG_ROUND_WHITE_HALO @@ -22181,7 +21231,7 @@ MindReaderEyeSpikeEffect: delay 2 return -Move_ICE_PUNCH: +Move_ICE_PUNCH:: monbg ANIM_DEF_PARTNER setalpha 12, 8 loadspritegfx ANIM_TAG_ICE_CRYSTALS @@ -22218,7 +21268,7 @@ Move_ICE_PUNCH: blendoff end -Move_REST: +Move_REST:: playsewithpan SE_M_SNORE, SOUND_PAN_ATTACKER loadspritegfx ANIM_TAG_LETTER_Z createsprite gSleepLetterZSpriteTemplate, ANIM_ATTACKER, 2, 4, -10, 16, 0, 0 @@ -22229,7 +21279,7 @@ Move_REST: waitforvisualfinish end -Move_CONFUSION: +Move_CONFUSION:: monbg ANIM_DEF_PARTNER call SetPsychicBackground setalpha 8, 8 @@ -22246,7 +21296,7 @@ Move_CONFUSION: call UnsetPsychicBg end -Move_PSYCHIC: +Move_PSYCHIC:: monbg ANIM_DEF_PARTNER call SetPsychicBackground setalpha 8, 8 @@ -22263,7 +21313,7 @@ Move_PSYCHIC: call UnsetPsychicBg end -Move_FUTURE_SIGHT: +Move_FUTURE_SIGHT:: goto FutureSight FutureSightContinue: waitforvisualfinish @@ -22283,7 +21333,7 @@ FutureSight: blendoff goto FutureSightContinue -Move_THUNDER: +Move_THUNDER:: loadspritegfx ANIM_TAG_LIGHTNING fadetobg BG_THUNDER waitbgfadeout @@ -22341,7 +21391,7 @@ Move_THUNDER: waitbgfadein end -Move_THUNDER_PUNCH: +Move_THUNDER_PUNCH:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_LIGHTNING @@ -22374,7 +21424,7 @@ Move_THUNDER_PUNCH: blendoff end -Move_SACRED_FIRE: +Move_SACRED_FIRE:: loadspritegfx ANIM_TAG_FIRE loadspritegfx ANIM_TAG_FIRE_PLUME loopsewithpan SE_M_SACRED_FIRE, SOUND_PAN_ATTACKER, 7, 5 @@ -22431,7 +21481,7 @@ Move_SACRED_FIRE: waitforvisualfinish end -Move_SCRATCH: +Move_SCRATCH:: loadspritegfx ANIM_TAG_SCRATCH monbg ANIM_TARGET setalpha 12, 8 @@ -22444,7 +21494,7 @@ Move_SCRATCH: waitforvisualfinish end -Move_DRAGON_BREATH: +Move_DRAGON_BREATH:: loadspritegfx ANIM_TAG_SMALL_EMBER monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET @@ -22478,7 +21528,7 @@ Move_DRAGON_BREATH: clearmonbg ANIM_DEF_PARTNER end -Move_ROAR: +Move_ROAR:: loadspritegfx ANIM_TAG_NOISE_LINE monbg ANIM_ATTACKER splitbgprio ANIM_ATTACKER @@ -22506,7 +21556,7 @@ RoarEffect: createsprite gRoarNoiseLineSpriteTemplate, ANIM_ATTACKER, 2, 24, 8, 1 return -Move_GROWL: +Move_GROWL:: loadspritegfx ANIM_TAG_NOISE_LINE createvisualtask SoundTask_PlayDoubleCry, 2, ANIM_ATTACKER, DOUBLE_CRY_GROWL call RoarEffect @@ -22518,7 +21568,7 @@ Move_GROWL: waitforvisualfinish end -Move_SNORE: +Move_SNORE:: loadspritegfx ANIM_TAG_SNORE_Z monbg ANIM_ATK_PARTNER setalpha 8, 8 @@ -22539,7 +21589,7 @@ SnoreEffect: createsprite gSnoreZSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 42, -38, 24, 0, 0 return -Move_LIGHT_SCREEN: +Move_LIGHT_SCREEN:: loadspritegfx ANIM_TAG_SPARKLE_3 loadspritegfx ANIM_TAG_GREEN_LIGHT_WALL setalpha 0, 16 @@ -22566,7 +21616,7 @@ SpecialScreenSparkle: createsprite gSpecialScreenSparkleSpriteTemplate, ANIM_ATTACKER, 2, 10, 18, ANIM_ATTACKER, TRUE return -Move_MIRROR_COAT: +Move_MIRROR_COAT:: loadspritegfx ANIM_TAG_SPARKLE_3 loadspritegfx ANIM_TAG_RED_LIGHT_WALL setalpha 0, 16 @@ -22579,7 +21629,7 @@ Move_MIRROR_COAT: blendoff end -Move_REFLECT: +Move_REFLECT:: loadspritegfx ANIM_TAG_SPARKLE_4 loadspritegfx ANIM_TAG_BLUE_LIGHT_WALL setalpha 0, 16 @@ -22596,7 +21646,7 @@ Move_REFLECT: blendoff end -Move_BARRIER: +Move_BARRIER:: loadspritegfx ANIM_TAG_GRAY_LIGHT_WALL setalpha 0, 16 waitplaysewithpan SE_M_BARRIER, SOUND_PAN_ATTACKER, 15 @@ -22606,7 +21656,7 @@ Move_BARRIER: blendoff end -Move_BUBBLE: +Move_BUBBLE:: loadspritegfx ANIM_TAG_BUBBLE loadspritegfx ANIM_TAG_SMALL_BUBBLES monbg ANIM_TARGET @@ -22642,7 +21692,7 @@ Move_BUBBLE: blendoff end -Move_SMOG: +Move_SMOG:: loadspritegfx ANIM_TAG_PURPLE_GAS_CLOUD monbg ANIM_DEF_PARTNER splitbgprio_all @@ -22669,7 +21719,7 @@ SmogCloud: delay 7 return -Move_FAINT_ATTACK: +Move_FEINT_ATTACK:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_ATTACKER fadetobg BG_DARK @@ -22705,7 +21755,7 @@ Move_FAINT_ATTACK: waitbgfadein end -Move_SAND_ATTACK: +Move_SAND_ATTACK:: loadspritegfx ANIM_TAG_MUD_SAND monbg ANIM_ATK_PARTNER splitbgprio ANIM_ATTACKER @@ -22733,7 +21783,7 @@ SandAttackDirt: delay 2 return -Move_MUD_SLAP: +Move_MUD_SLAP:: loadspritegfx ANIM_TAG_MUD_SAND playsewithpan SE_M_SAND_ATTACK, SOUND_PAN_ATTACKER createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, -10, 0, 0, 3 @@ -22756,7 +21806,7 @@ MudSlapMud: delay 2 return -Move_DRAGON_RAGE: +Move_DRAGON_RAGE:: loadspritegfx ANIM_TAG_SMALL_EMBER loadspritegfx ANIM_TAG_FIRE_PLUME playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER @@ -22788,7 +21838,7 @@ Move_DRAGON_RAGE: waitforvisualfinish end -Move_RAIN_DANCE: +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 @@ -22802,7 +21852,7 @@ Move_RAIN_DANCE: waitforvisualfinish end -Move_BITE: +Move_BITE:: loadspritegfx ANIM_TAG_SHARP_TEETH loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -22819,7 +21869,7 @@ Move_BITE: delay 1 end -Move_CRUNCH: +Move_CRUNCH:: loadspritegfx ANIM_TAG_SHARP_TEETH loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -22847,7 +21897,7 @@ Move_CRUNCH: waitbgfadein end -Move_CLAMP: +Move_CLAMP:: loadspritegfx ANIM_TAG_CLAMP loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -22864,7 +21914,7 @@ Move_CLAMP: waitforvisualfinish end -Move_ICE_BEAM: +Move_ICE_BEAM:: monbg ANIM_TARGET splitbgprio ANIM_TARGET setalpha 12, 8 @@ -22908,13 +21958,13 @@ IceBeamCreateCrystals: delay 1 return -Move_WITHDRAW: +Move_WITHDRAW:: playsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER createvisualtask AnimTask_Withdraw, 5 waitforvisualfinish end -Move_AURORA_BEAM: +Move_AURORA_BEAM:: loadspritegfx ANIM_TAG_RAINBOW_RINGS fadetobg BG_AURORA waitbgfadein @@ -22950,7 +22000,7 @@ AuroraBeamCreateRings: delay 1 return -Move_SOLAR_BEAM: +Move_SOLAR_BEAM:: loadspritegfx ANIM_TAG_ORBS choosetwoturnanim SolarBeamSetUp, SolarBeamUnleash SolarBeamEnd: @@ -23039,7 +22089,7 @@ SolarBeamUnleash1: delay 4 return -Move_BLIZZARD: +Move_BLIZZARD:: loadspritegfx ANIM_TAG_ICE_CRYSTALS monbg ANIM_DEF_PARTNER call SetHighSpeedBg @@ -23079,7 +22129,7 @@ BlizzardIceCrystals: delay 3 return -Move_POWDER_SNOW: +Move_POWDER_SNOW:: loadspritegfx ANIM_TAG_ICE_CRYSTALS monbg ANIM_DEF_PARTNER createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 1, 0, 3, RGB_BLACK @@ -23113,7 +22163,7 @@ PowderSnowSnowballs: delay 3 return -Move_HYDRO_PUMP: +Move_HYDRO_PUMP:: loadspritegfx ANIM_TAG_WATER_ORB loadspritegfx ANIM_TAG_WATER_IMPACT monbg ANIM_DEF_PARTNER @@ -23160,7 +22210,7 @@ HydroPumpHitSplats: createsprite gWaterHitSplatSpriteTemplate, ANIM_ATTACKER, 4, 0, -15, ANIM_TARGET, 1 return -Move_SIGNAL_BEAM: +Move_SIGNAL_BEAM:: loadspritegfx ANIM_TAG_GLOWY_RED_ORB loadspritegfx ANIM_TAG_GLOWY_GREEN_ORB loadspritegfx ANIM_TAG_DUCK @@ -23201,7 +22251,7 @@ SignalBeamOrbs: delay 1 return -Move_ABSORB: +Move_ABSORB:: loadspritegfx ANIM_TAG_ORBS loadspritegfx ANIM_TAG_BLUE_STAR loadspritegfx ANIM_TAG_IMPACT @@ -23254,7 +22304,7 @@ AbsorbEffect: delay 4 return -Move_MEGA_DRAIN: +Move_MEGA_DRAIN:: loadspritegfx ANIM_TAG_ORBS loadspritegfx ANIM_TAG_BLUE_STAR loadspritegfx ANIM_TAG_IMPACT @@ -23315,7 +22365,7 @@ MegaDrainAbsorbEffect: delay 4 return -Move_GIGA_DRAIN: +Move_GIGA_DRAIN:: loadspritegfx ANIM_TAG_ORBS loadspritegfx ANIM_TAG_BLUE_STAR loadspritegfx ANIM_TAG_IMPACT @@ -23384,7 +22434,7 @@ GigaDrainAbsorbEffect: delay 4 return -Move_LEECH_LIFE: +Move_LEECH_LIFE:: loadspritegfx ANIM_TAG_NEEDLE loadspritegfx ANIM_TAG_ORBS delay 1 @@ -23414,7 +22464,7 @@ Move_LEECH_LIFE: blendoff end -Move_SYNTHESIS: +Move_SYNTHESIS:: loadspritegfx ANIM_TAG_SPARKLE_2 createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 16, RGB(27, 31, 18) playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER @@ -23427,7 +22477,7 @@ Move_SYNTHESIS: waitforvisualfinish end -Move_TOXIC: +Move_TOXIC:: loadspritegfx ANIM_TAG_TOXIC_BUBBLE loadspritegfx ANIM_TAG_POISON_BUBBLE call ToxicBubbles @@ -23452,7 +22502,7 @@ ToxicBubbles: delay 15 return -Move_SLUDGE: +Move_SLUDGE:: loadspritegfx ANIM_TAG_POISON_BUBBLE playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER createsprite gSludgeProjectileSpriteTemplate, ANIM_TARGET, 2, 20, 0, 40, 0 @@ -23463,7 +22513,7 @@ Move_SLUDGE: waitforvisualfinish end -Move_SLUDGE_BOMB: +Move_SLUDGE_BOMB:: loadspritegfx ANIM_TAG_POISON_BUBBLE call SludgeBombProjectile call SludgeBombProjectile @@ -23506,7 +22556,7 @@ SludgeBombProjectile: delay 3 return -Move_ACID: +Move_ACID:: loadspritegfx ANIM_TAG_POISON_BUBBLE monbg ANIM_DEF_PARTNER createsprite gAcidPoisonBubbleSpriteTemplate, ANIM_TARGET, 2, 20, 0, 40, 1, 0, 0, TRUE @@ -23539,7 +22589,7 @@ Move_ACID: clearmonbg ANIM_DEF_PARTNER end -Move_BONEMERANG: +Move_BONEMERANG:: loadspritegfx ANIM_TAG_BONE loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -23559,7 +22609,7 @@ Move_BONEMERANG: blendoff end -Move_BONE_CLUB: +Move_BONE_CLUB:: loadspritegfx ANIM_TAG_BONE loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -23577,7 +22627,7 @@ Move_BONE_CLUB: blendoff end -Move_BONE_RUSH: +Move_BONE_RUSH:: loadspritegfx ANIM_TAG_BONE loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -23593,7 +22643,7 @@ Move_BONE_RUSH: blendoff end -Move_SPIKES: +Move_SPIKES:: loadspritegfx ANIM_TAG_SPIKES monbg ANIM_DEF_PARTNER playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER @@ -23610,7 +22660,7 @@ Move_SPIKES: clearmonbg ANIM_DEF_PARTNER end -Move_MEGAHORN: +Move_MEGAHORN:: loadspritegfx ANIM_TAG_HORN_HIT_2 loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -23653,7 +22703,7 @@ MegahornInContest: createvisualtask AnimTask_StartSlidingBg, 5, 2304, 768, 0, -1 goto MegahornContinue -Move_GUST: +Move_GUST:: loadspritegfx ANIM_TAG_GUST loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -23671,7 +22721,7 @@ Move_GUST: blendoff end -Move_WING_ATTACK: +Move_WING_ATTACK:: loadspritegfx ANIM_TAG_GUST loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -23695,7 +22745,7 @@ Move_WING_ATTACK: blendoff end -Move_PECK: +Move_PECK:: loadspritegfx ANIM_TAG_IMPACT playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET createvisualtask AnimTask_RotateMonToSideAndRestore, 2, 3, -768, ANIM_TARGET, 2 @@ -23703,7 +22753,7 @@ Move_PECK: waitforvisualfinish end -Move_AEROBLAST: +Move_AEROBLAST:: loadspritegfx ANIM_TAG_AIR_WAVE_2 loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -23744,7 +22794,7 @@ AeroblastBeam: delay 3 return -Move_WATER_GUN: +Move_WATER_GUN:: loadspritegfx ANIM_TAG_SMALL_BUBBLES loadspritegfx ANIM_TAG_WATER_IMPACT monbg ANIM_DEF_PARTNER @@ -23768,7 +22818,7 @@ Move_WATER_GUN: blendoff end -Move_CRABHAMMER: +Move_CRABHAMMER:: loadspritegfx ANIM_TAG_ICE_CRYSTALS loadspritegfx ANIM_TAG_WATER_IMPACT monbg ANIM_DEF_PARTNER @@ -23805,14 +22855,14 @@ Move_CRABHAMMER: blendoff end -Move_SURF: +Move_SURF:: createvisualtask AnimTask_CreateSurfWave, 2, ANIM_SURF_PAL_SURF delay 24 panse SE_M_SURF, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 waitforvisualfinish end -Move_FLAMETHROWER: +Move_FLAMETHROWER:: loadspritegfx ANIM_TAG_SMALL_EMBER monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET @@ -23846,7 +22896,7 @@ FlamethrowerCreateFlames: return @ Also used by Sandstorm weather -Move_SANDSTORM: +Move_SANDSTORM:: loadspritegfx ANIM_TAG_FLYING_DIRT playsewithpan SE_M_SANDSTORM, 0 createvisualtask AnimTask_LoadSandstormBackground, 5, FALSE @@ -23866,7 +22916,7 @@ Move_SANDSTORM: createsprite gFlyingSandCrescentSpriteTemplate, ANIM_ATTACKER, 40, 60, 2560, 96, 0 end -Move_WHIRLPOOL: +Move_WHIRLPOOL:: loadspritegfx ANIM_TAG_WATER_ORB monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET @@ -23899,7 +22949,7 @@ WhirlpoolEffect: delay 2 return -Move_FLY: +Move_FLY:: loadspritegfx ANIM_TAG_ROUND_SHADOW loadspritegfx ANIM_TAG_IMPACT choosetwoturnanim FlySetUp, FlyUnleash @@ -23926,7 +22976,7 @@ FlyUnleash: blendoff goto FlyEnd -Move_BOUNCE: +Move_BOUNCE:: loadspritegfx ANIM_TAG_ROUND_SHADOW loadspritegfx ANIM_TAG_IMPACT choosetwoturnanim BounceSetUp, BounceUnleash @@ -23952,7 +23002,7 @@ BounceUnleash: blendoff goto BounceEnd -Move_KARATE_CHOP: +Move_KARATE_CHOP:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -23969,7 +23019,7 @@ Move_KARATE_CHOP: blendoff end -Move_CROSS_CHOP: +Move_CROSS_CHOP:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_CROSS_IMPACT monbg ANIM_DEF_PARTNER @@ -23987,7 +23037,7 @@ Move_CROSS_CHOP: blendoff end -Move_JUMP_KICK: +Move_JUMP_KICK:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -24005,7 +23055,7 @@ Move_JUMP_KICK: blendoff end -Move_HIGH_JUMP_KICK: +Move_HIGH_JUMP_KICK:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -24031,7 +23081,7 @@ Move_HIGH_JUMP_KICK: blendoff end -Move_DOUBLE_KICK: +Move_DOUBLE_KICK:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -24044,7 +23094,7 @@ Move_DOUBLE_KICK: blendoff end -Move_TRIPLE_KICK: +Move_TRIPLE_KICK:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -24077,7 +23127,7 @@ TripleKickCenter: createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 6, 0, 8, 1 goto TripleKickContinue -Move_DYNAMIC_PUNCH: +Move_DYNAMIC_PUNCH:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_EXPLOSION @@ -24111,7 +23161,7 @@ Move_DYNAMIC_PUNCH: blendoff end -Move_COUNTER: +Move_COUNTER:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET monbg ANIM_DEF_PARTNER @@ -24143,7 +23193,7 @@ Move_COUNTER: blendoff end -Move_VITAL_THROW: +Move_VITAL_THROW:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER setalpha 12, 8 @@ -24166,7 +23216,7 @@ Move_VITAL_THROW: blendoff end -Move_ROCK_SMASH: +Move_ROCK_SMASH:: loadspritegfx ANIM_TAG_ROCKS loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET @@ -24193,7 +23243,7 @@ Move_ROCK_SMASH: blendoff end -Move_SUBMISSION: +Move_SUBMISSION:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER setalpha 12, 8 @@ -24227,7 +23277,7 @@ SubmissionHit: return @ Also used by Sunny weather -Move_SUNNY_DAY: +Move_SUNNY_DAY:: loadspritegfx ANIM_TAG_SUNLIGHT monbg ANIM_ATK_PARTNER setalpha 13, 3 @@ -24250,7 +23300,7 @@ SunnyDayLightRay: delay 6 return -Move_COTTON_SPORE: +Move_COTTON_SPORE:: loadspritegfx ANIM_TAG_SPORE monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET @@ -24271,7 +23321,7 @@ CreateCottonSpores: delay 12 return -Move_SPORE: +Move_SPORE:: loadspritegfx ANIM_TAG_SPORE monbg ANIM_DEF_PARTNER setalpha 12, 8 @@ -24295,7 +23345,7 @@ CreateSpore: delay 12 return -Move_PETAL_DANCE: +Move_PETAL_DANCE:: loadspritegfx ANIM_TAG_FLOWER loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -24333,7 +23383,7 @@ Move_PETAL_DANCE: blendoff end -Move_RAZOR_LEAF: +Move_RAZOR_LEAF:: loadspritegfx ANIM_TAG_LEAF loadspritegfx ANIM_TAG_RAZOR_LEAF loadspritegfx ANIM_TAG_IMPACT @@ -24373,10 +23423,10 @@ Move_RAZOR_LEAF: blendoff end -Move_NATURE_POWER: +Move_NATURE_POWER:: @ No actual animation, uses the animation of a move from sNaturePowerMoves instead -Move_ANCIENT_POWER: +Move_ANCIENT_POWER:: loadspritegfx ANIM_TAG_ROCKS loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -24409,7 +23459,7 @@ Move_ANCIENT_POWER: blendoff end -Move_OCTAZOOKA: +Move_OCTAZOOKA:: loadspritegfx ANIM_TAG_GRAY_SMOKE loadspritegfx ANIM_TAG_BLACK_BALL playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_ATTACKER @@ -24426,7 +23476,7 @@ Move_OCTAZOOKA: waitforvisualfinish end -Move_MIST: +Move_MIST:: loadspritegfx ANIM_TAG_MIST_CLOUD monbg ANIM_ATK_PARTNER setalpha 12, 8 @@ -24450,7 +23500,7 @@ MistCloud: delay 7 return -Move_HAZE: +Move_HAZE:: waitforvisualfinish playsewithpan SE_M_HAZE, 0 createvisualtask AnimTask_HazeScrollingFog, 5 @@ -24460,7 +23510,7 @@ Move_HAZE: createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BATTLERS_2, 1, 16, 0, RGB_BLACK end -Move_FIRE_PUNCH: +Move_FIRE_PUNCH:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_SMALL_EMBER loadspritegfx ANIM_TAG_IMPACT @@ -24496,7 +23546,7 @@ FireSpreadEffect: createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 10, 112, -128, 40 return -Move_LEER: +Move_LEER:: loadspritegfx ANIM_TAG_LEER monbg ANIM_ATTACKER splitbgprio ANIM_ATTACKER @@ -24515,7 +23565,7 @@ Move_LEER: waitforvisualfinish end -Move_DREAM_EATER: +Move_DREAM_EATER:: loadspritegfx ANIM_TAG_ORBS loadspritegfx ANIM_TAG_BLUE_STAR monbg ANIM_DEF_PARTNER @@ -24582,7 +23632,7 @@ DreamEaterAbsorb: delay 4 return -Move_POISON_GAS: +Move_POISON_GAS:: loadspritegfx ANIM_TAG_PURPLE_GAS_CLOUD loadspritegfx ANIM_TAG_POISON_BUBBLE delay 0 @@ -24620,7 +23670,7 @@ Move_POISON_GAS: delay 0 end -Move_BIND: +Move_BIND:: createvisualtask AnimTask_SwayMon, 5, 0, 6, 3328, 4, ANIM_ATTACKER goto BindWrap @@ -24635,11 +23685,11 @@ BindWrapSqueezeTarget: delay 16 return -Move_WRAP: +Move_WRAP:: createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 6, 4, 2, 4 goto BindWrap -Move_PSYBEAM: +Move_PSYBEAM:: loadspritegfx ANIM_TAG_GOLD_RING playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER call SetPsychicBackground @@ -24666,7 +23716,7 @@ PsybeamRings: delay 4 return -Move_HYPNOSIS: +Move_HYPNOSIS:: loadspritegfx ANIM_TAG_GOLD_RING call SetPsychicBackground call HypnosisRings @@ -24684,7 +23734,7 @@ HypnosisRings: delay 6 return -Move_PSYWAVE: +Move_PSYWAVE:: loadspritegfx ANIM_TAG_BLUE_RING playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER call SetPsychicBackground @@ -24708,7 +23758,7 @@ PsywaveRings: delay 4 return -Move_ZAP_CANNON: +Move_ZAP_CANNON:: loadspritegfx ANIM_TAG_BLACK_BALL_2 loadspritegfx ANIM_TAG_SPARK_2 playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_ATTACKER @@ -24729,7 +23779,7 @@ Move_ZAP_CANNON: waitforvisualfinish end -Move_STEEL_WING: +Move_STEEL_WING:: loadspritegfx ANIM_TAG_GUST loadspritegfx ANIM_TAG_IMPACT loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 @@ -24756,7 +23806,7 @@ Move_STEEL_WING: blendoff end -Move_IRON_TAIL: +Move_IRON_TAIL:: loadspritegfx ANIM_TAG_IMPACT loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 createvisualtask AnimTask_MetallicShine, 5, 1, 0, RGB_BLACK @@ -24775,7 +23825,7 @@ Move_IRON_TAIL: waitforvisualfinish end -Move_POISON_TAIL: +Move_POISON_TAIL:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_POISON_BUBBLE loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 @@ -24796,7 +23846,7 @@ Move_POISON_TAIL: waitforvisualfinish end -Move_METAL_CLAW: +Move_METAL_CLAW:: loadspritegfx ANIM_TAG_CLAW_SLASH loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 createvisualtask AnimTask_MetallicShine, 5, 0, 0, RGB_BLACK @@ -24817,7 +23867,7 @@ Move_METAL_CLAW: waitforvisualfinish end -Move_NIGHT_SHADE: +Move_NIGHT_SHADE:: monbg ANIM_ATTACKER splitbgprio ANIM_ATTACKER playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER @@ -24836,7 +23886,7 @@ Move_NIGHT_SHADE: waitbgfadein end -Move_EGG_BOMB: +Move_EGG_BOMB:: loadspritegfx ANIM_TAG_EXPLOSION loadspritegfx ANIM_TAG_LARGE_FRESH_EGG playsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER @@ -24861,7 +23911,7 @@ Move_EGG_BOMB: waitforvisualfinish end -Move_SHADOW_BALL: +Move_SHADOW_BALL:: loadspritegfx ANIM_TAG_SHADOW_BALL fadetobg BG_GHOST waitbgfadein @@ -24876,7 +23926,7 @@ Move_SHADOW_BALL: waitbgfadein end -Move_LICK: +Move_LICK:: loadspritegfx ANIM_TAG_LICK delay 15 playsewithpan SE_M_LICK, SOUND_PAN_TARGET @@ -24885,7 +23935,7 @@ Move_LICK: waitforvisualfinish end -Move_FOCUS_ENERGY: +Move_FOCUS_ENERGY:: loadspritegfx ANIM_TAG_FOCUS_ENERGY playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call EndureEffect @@ -24898,7 +23948,7 @@ Move_FOCUS_ENERGY: waitforvisualfinish end -Move_BIDE: +Move_BIDE:: choosetwoturnanim BideSetUp, BideUnleash end BideSetUp: @@ -24938,7 +23988,7 @@ BideUnleash: blendoff end -Move_STRING_SHOT: +Move_STRING_SHOT:: loadspritegfx ANIM_TAG_STRING loadspritegfx ANIM_TAG_WEB_THREAD monbg ANIM_DEF_PARTNER @@ -24983,7 +24033,7 @@ StringShotThread: delay 1 return -Move_SPIDER_WEB: +Move_SPIDER_WEB:: loadspritegfx ANIM_TAG_SPIDER_WEB loadspritegfx ANIM_TAG_WEB_THREAD monbg ANIM_DEF_PARTNER @@ -25020,7 +24070,7 @@ SpiderWebThread: delay 1 return -Move_RAZOR_WIND: +Move_RAZOR_WIND:: choosetwoturnanim RazorWindSetUp, RazorWindUnleash RazorWindEnd: waitforvisualfinish @@ -25058,7 +24108,7 @@ RazorWindUnleash: blendoff goto RazorWindEnd -Move_DISABLE: +Move_DISABLE:: loadspritegfx ANIM_TAG_SPARKLE_4 monbg ANIM_TARGET splitbgprio ANIM_TARGET @@ -25074,7 +24124,7 @@ Move_DISABLE: blendoff end -Move_RECOVER: +Move_RECOVER:: loadspritegfx ANIM_TAG_ORBS loadspritegfx ANIM_TAG_BLUE_STAR monbg ANIM_ATK_PARTNER @@ -25109,7 +24159,7 @@ RecoverAbsorbEffect: delay 3 return -Move_MIMIC: +Move_MIMIC:: loadspritegfx ANIM_TAG_ORBS setalpha 11, 5 monbg_static ANIM_DEF_PARTNER @@ -25128,7 +24178,7 @@ Move_MIMIC: blendoff end -Move_CONSTRICT: +Move_CONSTRICT:: loadspritegfx ANIM_TAG_TENDRILS loopsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET, 6, 4 createsprite gConstrictBindingSpriteTemplate, ANIM_TARGET, 4, 0, 16, 0, 2 @@ -25145,7 +24195,7 @@ Move_CONSTRICT: waitforvisualfinish end -Move_CURSE: +Move_CURSE:: choosetwoturnanim CurseGhost, CurseStats CurseGhost: loadspritegfx ANIM_TAG_NAIL @@ -25190,7 +24240,7 @@ CurseStats1: createvisualtask AnimTask_BlendColorCycle, 5, F_PAL_ATTACKER, 4, 2, 0, 10, RGB_RED return -Move_SOFT_BOILED: +Move_SOFT_BOILED:: loadspritegfx ANIM_TAG_BREAKING_EGG loadspritegfx ANIM_TAG_THIN_RING loadspritegfx ANIM_TAG_BLUE_STAR @@ -25213,7 +24263,7 @@ Move_SOFT_BOILED: call HealingEffect2 end -Move_HEAL_BELL: +Move_HEAL_BELL:: loadspritegfx ANIM_TAG_BELL loadspritegfx ANIM_TAG_MUSIC_NOTES_2 loadspritegfx ANIM_TAG_THIN_RING @@ -25265,7 +24315,7 @@ HealBellRing: playsewithpan SE_M_HEAL_BELL, SOUND_PAN_ATTACKER return -Move_FAKE_OUT: +Move_FAKE_OUT:: playsewithpan SE_M_FLATTER, 0 createvisualtask AnimTask_FakeOut, 5 waitforvisualfinish @@ -25276,7 +24326,7 @@ Move_FAKE_OUT: createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 16, 0, RGB_WHITE end -Move_SCARY_FACE: +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 playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER @@ -25294,7 +24344,7 @@ Move_SCARY_FACE: waitforvisualfinish end -Move_SWEET_KISS: +Move_SWEET_KISS:: loadspritegfx ANIM_TAG_RED_HEART loadspritegfx ANIM_TAG_ANGEL createsprite gAngelSpriteTemplate, ANIM_TARGET, 2, 16, -48 @@ -25313,7 +24363,7 @@ Move_SWEET_KISS: createsprite gRedHeartBurstSpriteTemplate, ANIM_TARGET, 3, -384, -31 end -Move_LOVELY_KISS: +Move_LOVELY_KISS:: loadspritegfx ANIM_TAG_PINK_HEART loadspritegfx ANIM_TAG_DEVIL createsprite gDevilSpriteTemplate, ANIM_TARGET, 2, 0, -24 @@ -25326,7 +24376,7 @@ Move_LOVELY_KISS: createsprite gPinkHeartSpriteTemplate, ANIM_TARGET, 3, -128, -22 end -Move_FURY_SWIPES: +Move_FURY_SWIPES:: loadspritegfx ANIM_TAG_SWIPE createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 5, 5 delay 4 @@ -25341,7 +24391,7 @@ Move_FURY_SWIPES: createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 7, 1 end -Move_INGRAIN: +Move_INGRAIN:: loadspritegfx ANIM_TAG_ROOTS loadspritegfx ANIM_TAG_ORBS createsprite gIngrainRootSpriteTemplate, ANIM_ATTACKER, 2, 16, 26, -1, 2, 150 @@ -25371,7 +24421,7 @@ Move_INGRAIN: waitforvisualfinish end -Move_PRESENT: +Move_PRESENT:: loadspritegfx ANIM_TAG_ITEM_BAG createvisualtask AnimTask_IsHealingMove, 2 createsprite gPresentSpriteTemplate, ANIM_TARGET, 2, 0, -5, 10, 2, -1 @@ -25431,14 +24481,14 @@ PresentHeal: call HealingEffect2 end -Move_BATON_PASS: +Move_BATON_PASS:: loadspritegfx ANIM_TAG_POKEBALL playsewithpan SE_M_BATON_PASS, SOUND_PAN_ATTACKER createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_BG | F_PAL_BATTLERS), 1, 2, 0, 11, RGB(31, 22, 30) createsprite gBatonPassPokeballSpriteTemplate, ANIM_ATTACKER, 2 end -Move_PERISH_SONG: +Move_PERISH_SONG:: loadspritegfx ANIM_TAG_MUSIC_NOTES_2 createsprite gPerishSongMusicNoteSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 0 createsprite gPerishSongMusicNoteSpriteTemplate, ANIM_ATTACKER, 4, 1, 1, 16 @@ -25474,7 +24524,7 @@ Move_PERISH_SONG: waitforvisualfinish end -Move_SLEEP_TALK: +Move_SLEEP_TALK:: loadspritegfx ANIM_TAG_LETTER_Z createvisualtask AnimTask_SwayMon, 5, 0, 4, 4096, 2, ANIM_ATTACKER delay 20 @@ -25501,7 +24551,7 @@ Move_SLEEP_TALK: waitforvisualfinish end -Move_HYPER_FANG: +Move_HYPER_FANG:: loadspritegfx ANIM_TAG_FANG_ATTACK playsewithpan SE_M_BITE, SOUND_PAN_TARGET delay 1 @@ -25532,7 +24582,7 @@ HyperFangInContest: fadetobg BG_IMPACT_CONTESTS goto HyperFangContinue -Move_TRI_ATTACK: +Move_TRI_ATTACK:: loadspritegfx ANIM_TAG_TRI_ATTACK_TRIANGLE createsprite gTriAttackTriangleSpriteTemplate, ANIM_TARGET, 2, 16, 0 playsewithpan SE_M_TRI_ATTACK, SOUND_PAN_ATTACKER @@ -25581,7 +24631,7 @@ Move_TRI_ATTACK: waitforvisualfinish end -Move_WILL_O_WISP: +Move_WILL_O_WISP:: loadspritegfx ANIM_TAG_WISP_FIRE loadspritegfx ANIM_TAG_WISP_ORB monbg ANIM_DEF_PARTNER @@ -25612,7 +24662,7 @@ Move_WILL_O_WISP: clearmonbg ANIM_DEF_PARTNER end -Move_ENCORE: +Move_ENCORE:: loadspritegfx ANIM_TAG_SPOTLIGHT loadspritegfx ANIM_TAG_TAG_HAND createvisualtask AnimTask_CreateSpotlight, 2 @@ -25632,7 +24682,7 @@ Move_ENCORE: createvisualtask AnimTask_RemoveSpotlight, 2 end -Move_TRICK: +Move_TRICK:: loadspritegfx ANIM_TAG_ITEM_BAG loadspritegfx ANIM_TAG_SPEED_DUST createsprite gTrickBagSpriteTemplate, ANIM_ATTACKER, 2, -40, 80 @@ -25660,7 +24710,7 @@ Move_TRICK: waitforvisualfinish end -Move_WISH: +Move_WISH:: loadspritegfx ANIM_TAG_GOLD_STARS loadspritegfx ANIM_TAG_SPARKLE_2 createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 0, 10, RGB_BLACK @@ -25676,7 +24726,7 @@ Move_WISH: waitforvisualfinish end -Move_STOCKPILE: +Move_STOCKPILE:: loadspritegfx ANIM_TAG_GRAY_ORB playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 8, 1, 0, 12, RGB_WHITE @@ -25705,7 +24755,7 @@ StockpileAbsorb: delay 1 return -Move_SPIT_UP: +Move_SPIT_UP:: loadspritegfx ANIM_TAG_RED_ORB_2 loadspritegfx ANIM_TAG_IMPACT playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER @@ -25752,7 +24802,7 @@ SpitUpStrongest: createsprite gSpitUpOrbSpriteTemplate, ANIM_ATTACKER, 2, 240 goto SpitUpContinue -Move_SWALLOW: +Move_SWALLOW:: loadspritegfx ANIM_TAG_BLUE_ORB loadspritegfx ANIM_TAG_BLUE_STAR playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER @@ -25788,7 +24838,7 @@ SwallowBest: call SwallowEffect goto SwallowContinue -Move_TRANSFORM: +Move_TRANSFORM:: monbg ANIM_ATTACKER playsewithpan SE_M_TELEPORT, SOUND_PAN_ATTACKER waitplaysewithpan SE_M_MINIMIZE, SOUND_PAN_ATTACKER, 48 @@ -25797,7 +24847,7 @@ Move_TRANSFORM: clearmonbg ANIM_ATTACKER end -Move_MORNING_SUN: +Move_MORNING_SUN:: loadspritegfx ANIM_TAG_GREEN_STAR loadspritegfx ANIM_TAG_BLUE_STAR createvisualtask AnimTask_MorningSunLightBeam, 5 @@ -25829,7 +24879,7 @@ MorningSunStar: delay 5 return -Move_SWEET_SCENT: +Move_SWEET_SCENT:: loadspritegfx ANIM_TAG_PINK_PETAL playsewithpan SE_M_SWEET_SCENT, SOUND_PAN_ATTACKER createsprite gSweetScentPetalSpriteTemplate, ANIM_ATTACKER, 2, 100, 0, 100 @@ -25867,7 +24917,7 @@ SweetScentEffect: delay 2 return -Move_HYPER_BEAM: +Move_HYPER_BEAM:: loadspritegfx ANIM_TAG_ORBS createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 4, 0, 16, RGB_BLACK waitforvisualfinish @@ -25917,7 +24967,7 @@ HyperBeamOrbs: delay 1 return -Move_FLATTER: +Move_FLATTER:: loadspritegfx ANIM_TAG_SPOTLIGHT loadspritegfx ANIM_TAG_CONFETTI createvisualtask SoundTask_PlaySE2WithPanning, 5, SE_M_ENCORE2, SOUND_PAN_TARGET @@ -25962,7 +25012,7 @@ CreateFlatterConfetti: createsprite gFlatterConfettiSpriteTemplate, ANIM_ATTACKER, 40, ANIM_TARGET return -Move_ROLE_PLAY: +Move_ROLE_PLAY:: monbg ANIM_ATK_PARTNER createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 16, RGB_WHITE createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 0, 10, RGB_BLACK @@ -25977,7 +25027,7 @@ Move_ROLE_PLAY: createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 10, 0, RGB_BLACK end -Move_REFRESH: +Move_REFRESH:: loadspritegfx ANIM_TAG_THIN_RING loadspritegfx ANIM_TAG_SPARKLE_2 playsewithpan SE_M_STAT_INCREASE, SOUND_PAN_ATTACKER @@ -25991,7 +25041,7 @@ Move_REFRESH: createsprite gThinRingExpandingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0 end -Move_BLAZE_KICK: +Move_BLAZE_KICK:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_SMALL_EMBER @@ -26012,7 +25062,7 @@ Move_BLAZE_KICK: blendoff end -Move_HYPER_VOICE: +Move_HYPER_VOICE:: loadspritegfx ANIM_TAG_THIN_RING createvisualtask SoundTask_PlayCryWithEcho, 5, FALSE call HyperVoiceEffect @@ -26033,7 +25083,7 @@ HyperVoiceEffect: createvisualtask SoundTask_WaitForCry, 5 return -Move_SAND_TOMB: +Move_SAND_TOMB:: loadspritegfx ANIM_TAG_MUD_SAND createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, F_PAL_TARGET, 2, 0, 7, RGB(19, 17, 0) createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 2, 43, 1 @@ -26061,7 +25111,7 @@ SandTombSwirlingDirt: delay 2 return -Move_SHEER_COLD: +Move_SHEER_COLD:: fadetobg BG_ICE waitbgfadeout playsewithpan SE_M_ICY_WIND, 0 @@ -26079,7 +25129,7 @@ Move_SHEER_COLD: waitbgfadein end -Move_ARM_THRUST: +Move_ARM_THRUST:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT splitbgprio ANIM_TARGET @@ -26106,13 +25156,13 @@ ArmThrustLeft: createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, -8, 0, ANIM_TARGET, 2 goto ArmThrustContinue -Move_MUDDY_WATER: +Move_MUDDY_WATER:: panse SE_M_WHIRLPOOL, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 createvisualtask AnimTask_CreateSurfWave, 2, ANIM_SURF_PAL_MUDDY_WATER waitforvisualfinish end -Move_BULLET_SEED: +Move_BULLET_SEED:: loadspritegfx ANIM_TAG_SEED createsprite gBulletSeedSpriteTemplate, ANIM_TARGET, 2, 20, 0 delay 5 @@ -26137,7 +25187,7 @@ Move_BULLET_SEED: waitforvisualfinish end -Move_DRAGON_CLAW: +Move_DRAGON_CLAW:: loadspritegfx ANIM_TAG_SMALL_EMBER loadspritegfx ANIM_TAG_CLAW_SLASH playsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_ATTACKER @@ -26197,7 +25247,7 @@ DragonClawFireSpiral: return end -Move_MUD_SHOT: +Move_MUD_SHOT:: loadspritegfx ANIM_TAG_BROWN_ORB monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET @@ -26229,7 +25279,7 @@ MudShotOrbs: delay 2 return -Move_METEOR_MASH: +Move_METEOR_MASH:: loadspritegfx ANIM_TAG_GOLD_STARS loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET @@ -26254,7 +25304,7 @@ Move_METEOR_MASH: waitforvisualfinish end -Move_REVENGE: +Move_REVENGE:: loadspritegfx ANIM_TAG_PURPLE_SCRATCH monbg ANIM_TARGET setalpha 12, 8 @@ -26283,7 +25333,7 @@ Move_REVENGE: blendoff end -Move_POISON_FANG: +Move_POISON_FANG:: loadspritegfx ANIM_TAG_FANG_ATTACK loadspritegfx ANIM_TAG_POISON_BUBBLE playsewithpan SE_M_BITE, SOUND_PAN_TARGET @@ -26296,12 +25346,12 @@ Move_POISON_FANG: waitforvisualfinish end -Move_SUBSTITUTE: +Move_SUBSTITUTE:: playsewithpan SE_M_ATTRACT, SOUND_PAN_ATTACKER createvisualtask AnimTask_MonToSubstitute, 2 end -Move_FRENZY_PLANT: +Move_FRENZY_PLANT:: loadspritegfx ANIM_TAG_ROOTS loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -26361,7 +25411,7 @@ Move_FRENZY_PLANT: blendoff end -Move_METAL_SOUND: +Move_METAL_SOUND:: loadspritegfx ANIM_TAG_METAL_SOUND_WAVES monbg ANIM_DEF_PARTNER splitbgprio_foes ANIM_TARGET @@ -26381,7 +25431,7 @@ MetalSoundRings: delay 2 return -Move_FOCUS_PUNCH: +Move_FOCUS_PUNCH:: goto FocusPunch FocusPunchEnd: waitforvisualfinish @@ -26429,7 +25479,7 @@ FocusPunchInContest: fadetobg BG_IMPACT_CONTESTS goto FocusPunchContinue -Move_RETURN: +Move_RETURN:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER setalpha 12, 8 @@ -26566,7 +25616,7 @@ ReturnStrongestHit: waitforvisualfinish return -Move_COSMIC_POWER: +Move_COSMIC_POWER:: loadspritegfx ANIM_TAG_SPARKLE_2 createvisualtask SoundTask_PlaySE2WithPanning, 5, SE_M_COSMIC_POWER, 0 playsewithpan SE_M_COSMIC_POWER, 0 @@ -26591,7 +25641,7 @@ Move_COSMIC_POWER: waitforvisualfinish end -Move_BLAST_BURN: +Move_BLAST_BURN:: loadspritegfx ANIM_TAG_FIRE_PLUME loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -26636,7 +25686,7 @@ Move_BLAST_BURN: blendoff end -Move_ROCK_TOMB: +Move_ROCK_TOMB:: loadspritegfx ANIM_TAG_X_SIGN loadspritegfx ANIM_TAG_ROCKS createvisualtask AnimTask_ShakeBattleTerrain, 2, 2, 0, 10, 1 @@ -26694,7 +25744,7 @@ UnsetBugBg: waitbgfadein return -Move_SILVER_WIND: +Move_SILVER_WIND:: loadspritegfx ANIM_TAG_SPARKLE_6 panse SE_M_GUST, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 playsewithpan SE_M_MORNING_SUN, 0 @@ -26733,12 +25783,12 @@ Move_SILVER_WIND: call UnsetBugBg end -Move_SNATCH: +Move_SNATCH:: playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER createvisualtask AnimTask_WindUpLunge, 5, ANIM_ATTACKER, -12, 4, 10, 10, 12, 6 end -Move_DIVE: +Move_DIVE:: loadspritegfx ANIM_TAG_SPLASH loadspritegfx ANIM_TAG_SWEAT_BEAD choosetwoturnanim DiveSetUp, DiveAttack @@ -26783,7 +25833,7 @@ DiveAttackWaterDroplets: createsprite gSprayWaterDropletSpriteTemplate, ANIM_TARGET, 5, 1, 1 return -Move_ROCK_BLAST: +Move_ROCK_BLAST:: loadspritegfx ANIM_TAG_ROCKS loadspritegfx ANIM_TAG_IMPACT createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 6 @@ -26801,7 +25851,7 @@ Move_ROCK_BLAST: waitforvisualfinish end -Move_OVERHEAT: +Move_OVERHEAT:: loadspritegfx ANIM_TAG_SMALL_EMBER loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -26882,7 +25932,7 @@ Move_OVERHEAT: waitforvisualfinish end -Move_HYDRO_CANNON: +Move_HYDRO_CANNON:: loadspritegfx ANIM_TAG_WATER_ORB loadspritegfx ANIM_TAG_WATER_IMPACT monbg ANIM_DEF_PARTNER @@ -26924,7 +25974,7 @@ HydroCannonBeam: createsprite gHydroCannonBeamSpriteTemplate, ANIM_TARGET, 2, 10, -10, 0, 0, 15, 257 return -Move_ASTONISH: +Move_ASTONISH:: loadspritegfx ANIM_TAG_SWEAT_BEAD playsewithpan SE_M_ENCORE, SOUND_PAN_ATTACKER createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 6 @@ -26937,7 +25987,7 @@ Move_ASTONISH: waitforvisualfinish end -Move_SEISMIC_TOSS: +Move_SEISMIC_TOSS:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_ROCKS setarg 7, 0 @@ -27004,7 +26054,7 @@ SeismicTossRockScatter2: createsprite gRockScatterSpriteTemplate, ANIM_TARGET, 2, 12, 30, 4, 3 return -Move_MAGIC_COAT: +Move_MAGIC_COAT:: loadspritegfx ANIM_TAG_ORANGE_LIGHT_WALL setalpha 0, 16 waitplaysewithpan SE_M_BARRIER, SOUND_PAN_ATTACKER, 15 @@ -27014,7 +26064,7 @@ Move_MAGIC_COAT: blendoff end -Move_WATER_PULSE: +Move_WATER_PULSE:: loadspritegfx ANIM_TAG_SMALL_BUBBLES loadspritegfx ANIM_TAG_BLUE_RING_2 monbg ANIM_TARGET @@ -27045,7 +26095,7 @@ Move_WATER_PULSE: clearmonbg ANIM_DEF_PARTNER end -Move_PSYCHO_BOOST: +Move_PSYCHO_BOOST:: loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT monbg ANIM_ATK_PARTNER fadetobg BG_PSYCHIC @@ -27072,7 +26122,7 @@ Move_PSYCHO_BOOST: call UnsetPsychicBg end -Move_KNOCK_OFF: +Move_KNOCK_OFF:: loadspritegfx ANIM_TAG_SLAM_HIT_2 loadspritegfx ANIM_TAG_IMPACT createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 6 @@ -27093,7 +26143,7 @@ Move_KNOCK_OFF: waitforvisualfinish end -Move_DOOM_DESIRE: +Move_DOOM_DESIRE:: createvisualtask GetIsDoomDesireHitTurn, 2 delay 1 monbg ANIM_ATK_PARTNER @@ -27112,7 +26162,7 @@ Move_DOOM_DESIRE: blendoff end -Move_SKY_UPPERCUT: +Move_SKY_UPPERCUT:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET @@ -27156,7 +26206,7 @@ Move_SKY_UPPERCUT: waitbgfadein end -Move_SECRET_POWER: +Move_SECRET_POWER:: createvisualtask AnimTask_GetFieldTerrain, 5 jumpargeq 0, STATUS_FIELD_MISTY_TERRAIN, Move_FAIRY_WIND jumpargeq 0, STATUS_FIELD_GRASSY_TERRAIN, Move_NEEDLE_ARM @@ -27201,7 +26251,7 @@ Move_SECRET_POWER: goto Move_SLAM .endif -Move_TWISTER: +Move_TWISTER:: loadspritegfx ANIM_TAG_LEAF loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_ROCKS @@ -27247,7 +26297,7 @@ Move_TWISTER: blendoff end -Move_MAGICAL_LEAF: +Move_MAGICAL_LEAF:: loadspritegfx ANIM_TAG_LEAF loadspritegfx ANIM_TAG_RAZOR_LEAF loadspritegfx ANIM_TAG_IMPACT @@ -27291,7 +26341,7 @@ Move_MAGICAL_LEAF: blendoff end -Move_ICE_BALL: +Move_ICE_BALL:: loadspritegfx ANIM_TAG_ICE_CHUNK loadspritegfx ANIM_TAG_ICE_CRYSTALS createvisualtask AnimTask_GetIceBallCounter, 5, 0 @@ -27381,7 +26431,7 @@ IceBallImpactShard: createsprite gIceBallImpactShardSpriteTemplate, ANIM_TARGET, 4, -12, -16 return -Move_WEATHER_BALL: +Move_WEATHER_BALL:: loadspritegfx ANIM_TAG_WEATHER_BALL createsprite gVerticalDipSpriteTemplate, ANIM_ATTACKER, 2, 8, 1, ANIM_ATTACKER delay 8 @@ -27477,7 +26527,7 @@ WeatherBallIce: waitforvisualfinish end -Move_COUNT: +Move_COUNT:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET setalpha 12, 8 @@ -28869,7 +27919,7 @@ Move_BREAKNECK_BLITZ:: end -Move_ALL_OUT_PUMMELING: +Move_ALL_OUT_PUMMELING:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_METEOR @@ -28959,7 +28009,7 @@ Move_ALL_OUT_PUMMELING: end -Move_SUPERSONIC_SKYSTRIKE: +Move_SUPERSONIC_SKYSTRIKE:: loadspritegfx ANIM_TAG_ROUND_SHADOW @ fly loadspritegfx ANIM_TAG_MUD_SAND @ dig loadspritegfx ANIM_TAG_FOCUS_ENERGY @ focus energy @@ -29032,7 +28082,7 @@ FinishSupersonicSkystrike: end -Move_ACID_DOWNPOUR: +Move_ACID_DOWNPOUR:: loadspritegfx ANIM_TAG_BLUE_ORB @ reversal loadspritegfx ANIM_TAG_POISON_JAB @ poison jab loadspritegfx ANIM_TAG_POISON_BUBBLE @ poison bubbles @@ -29118,7 +28168,7 @@ AcidDownpourFlareOnAttacker: return -Move_TECTONIC_RAGE: +Move_TECTONIC_RAGE:: loadspritegfx ANIM_TAG_DIRT_MOUND @ dig loadspritegfx ANIM_TAG_MUD_SAND @ rollout small rocks loadspritegfx ANIM_TAG_ROCKS @ rollout @@ -34425,163 +33475,163 @@ General_SetWeather:: jumpreteq 4, General_Hail end -Move_MAX_GUARD: +Move_MAX_GUARD:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish goto Move_PROTECT end -Move_MAX_STRIKE: -Move_G_MAX_REPLENISH: +Move_MAX_STRIKE:: +Move_G_MAX_REPLENISH:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish goto Move_GIGA_IMPACT end -Move_MAX_AIRSTREAM: -Move_G_MAX_WIND_RAGE: +Move_MAX_AIRSTREAM:: +Move_G_MAX_WIND_RAGE:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish goto Move_AEROBLAST end -Move_MAX_OOZE: -Move_G_MAX_MALODOR: +Move_MAX_OOZE:: +Move_G_MAX_MALODOR:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish goto Move_GUNK_SHOT end -Move_G_MAX_WILDFIRE: -Move_G_MAX_FIREBALL: -Move_G_MAX_CENTIFERNO: -Move_MAX_FLARE: +Move_G_MAX_WILDFIRE:: +Move_G_MAX_FIREBALL:: +Move_G_MAX_CENTIFERNO:: +Move_MAX_FLARE:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish goto Move_BLAST_BURN end -Move_G_MAX_CANNONADE: -Move_G_MAX_HYDROSNIPE: -Move_G_MAX_FOAM_BURST: -Move_MAX_GEYSER: +Move_G_MAX_CANNONADE:: +Move_G_MAX_HYDROSNIPE:: +Move_G_MAX_FOAM_BURST:: +Move_MAX_GEYSER:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish goto Move_HYDRO_CANNON end -Move_G_MAX_VINE_LASH: -Move_G_MAX_DRUM_SOLO: -Move_G_MAX_TARTNESS: -Move_G_MAX_SWEETNESS: -Move_MAX_OVERGROWTH: +Move_G_MAX_VINE_LASH:: +Move_G_MAX_DRUM_SOLO:: +Move_G_MAX_TARTNESS:: +Move_G_MAX_SWEETNESS:: +Move_MAX_OVERGROWTH:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish goto Move_FRENZY_PLANT end -Move_MAX_LIGHTNING: -Move_G_MAX_STUN_SHOCK: +Move_MAX_LIGHTNING:: +Move_G_MAX_STUN_SHOCK:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish goto Move_ZAP_CANNON end -Move_G_MAX_CHI_STRIKE: -Move_G_MAX_ONE_BLOW: -Move_G_MAX_RAPID_FLOW: -Move_MAX_KNUCKLE: +Move_G_MAX_CHI_STRIKE:: +Move_G_MAX_ONE_BLOW:: +Move_G_MAX_RAPID_FLOW:: +Move_MAX_KNUCKLE:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish goto Move_CLOSE_COMBAT end -Move_G_MAX_RESONANCE: -Move_MAX_HAILSTORM: +Move_G_MAX_RESONANCE:: +Move_MAX_HAILSTORM:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish goto Move_SHEER_COLD end -Move_G_MAX_SANDBLAST: -Move_MAX_QUAKE: +Move_G_MAX_SANDBLAST:: +Move_MAX_QUAKE:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish goto Move_FISSURE end -Move_G_MAX_BEFUDDLE: -Move_MAX_FLUTTERBY: +Move_G_MAX_BEFUDDLE:: +Move_MAX_FLUTTERBY:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish goto Move_BUG_BUZZ end -Move_G_MAX_STEELSURGE: -Move_G_MAX_MELTDOWN: -Move_MAX_STEELSPIKE: +Move_G_MAX_STEELSURGE:: +Move_G_MAX_MELTDOWN:: +Move_MAX_STEELSPIKE:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish goto Move_HEAVY_SLAM end -Move_G_MAX_TERROR: -Move_MAX_PHANTASM: +Move_G_MAX_TERROR:: +Move_MAX_PHANTASM:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish goto Move_PHANTOM_FORCE end -Move_G_MAX_GRAVITAS: -Move_MAX_MINDSTORM: +Move_G_MAX_GRAVITAS:: +Move_MAX_MINDSTORM:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish goto Move_PSYCHO_BOOST end -Move_G_MAX_SMITE: -Move_G_MAX_FINALE: -Move_MAX_STARFALL: +Move_G_MAX_SMITE:: +Move_G_MAX_FINALE:: +Move_MAX_STARFALL:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish goto Move_MOONBLAST end -Move_G_MAX_STONESURGE: -Move_G_MAX_VOLCALITH: -Move_MAX_ROCKFALL: +Move_G_MAX_STONESURGE:: +Move_G_MAX_VOLCALITH:: +Move_MAX_ROCKFALL:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish goto Move_ROCK_WRECKER end -Move_G_MAX_DEPLETION: -Move_MAX_WYRMWIND: +Move_G_MAX_DEPLETION:: +Move_MAX_WYRMWIND:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish goto Move_SPACIAL_REND end -Move_G_MAX_SNOOZE: -Move_MAX_DARKNESS: +Move_G_MAX_SNOOZE:: +Move_MAX_DARKNESS:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish goto Move_DARK_PULSE end -Move_G_MAX_CUDDLE: +Move_G_MAX_CUDDLE:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish goto Move_COVET end -Move_G_MAX_VOLT_CRASH: +Move_G_MAX_VOLT_CRASH:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish goto Move_VOLT_TACKLE end -Move_G_MAX_GOLD_RUSH: +Move_G_MAX_GOLD_RUSH:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish goto Move_PAY_DAY diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index e03e8e2d20..1e4bf43ebc 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -5775,7 +5775,7 @@ BattleScript_PrintFullBox:: BattleScript_ActionSwitch:: hpthresholds2 BS_ATTACKER - copybyte sSAVED_BATTLER, gBattlerAttacker + saveattacker printstring STRINGID_RETURNMON jumpifbattletype BATTLE_TYPE_DOUBLE, BattleScript_PursuitSwitchDmgSetMultihit setmultihit 1 @@ -5793,7 +5793,7 @@ BattleScript_DoSwitchOut:: switchoutabilities BS_ATTACKER updatedynamax waitstate - copybyte gBattlerAttacker, sSAVED_BATTLER + restoreattacker returnatktoball waitstate drawpartystatussummary BS_ATTACKER @@ -7820,7 +7820,7 @@ BattleScript_TryIntimidateHoldEffectsRet: return BattleScript_IntimidateActivates:: - copybyte sSAVED_BATTLER, gBattlerTarget + savetarget .if B_ABILITY_POP_UP == TRUE showabilitypopup BS_ATTACKER pause B_WAIT_TIME_LONG @@ -7858,7 +7858,7 @@ BattleScript_IntimidateLoopIncrement: BattleScript_IntimidateEnd: copybyte sBATTLER, gBattlerAttacker destroyabilitypopup - copybyte gBattlerTarget, sSAVED_BATTLER + restoretarget pause B_WAIT_TIME_MED end3 @@ -7891,7 +7891,7 @@ BattleScript_IntimidateInReverse: goto BattleScript_IntimidateLoopIncrement BattleScript_SupersweetSyrupActivates:: - copybyte sSAVED_BATTLER, gBattlerTarget + savetarget .if B_ABILITY_POP_UP == TRUE showabilitypopup BS_ATTACKER pause B_WAIT_TIME_LONG @@ -7924,7 +7924,7 @@ BattleScript_SupersweetSyrupLoopIncrement: BattleScript_SupersweetSyrupEnd: copybyte sBATTLER, gBattlerAttacker destroyabilitypopup - copybyte gBattlerTarget, sSAVED_BATTLER + restoretarget pause B_WAIT_TIME_MED end3 @@ -8315,7 +8315,7 @@ BattleScript_DazzlingProtected:: attackstring ppreduce pause B_WAIT_TIME_SHORT - call BattleScript_AbilityPopUp + call BattleScript_AbilityPopUpScripting printstring STRINGID_POKEMONCANNOTUSEMOVE waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd @@ -8566,7 +8566,10 @@ BattleScript_FriskMsg:: return BattleScript_FriskActivates:: - tryfriskmsg BS_ATTACKER + saveattacker + copybyte gBattlerAttacker, sBATTLER + tryfriskmsg BS_SCRIPTING + restoreattacker end3 BattleScript_ImposterActivates:: @@ -9559,19 +9562,19 @@ BattleScript_RedCardIngrain: printstring STRINGID_PKMNANCHOREDITSELF waitmessage B_WAIT_TIME_LONG removeitem BS_SCRIPTING - swapattackerwithtarget + restoretarget return BattleScript_RedCardSuctionCups: printstring STRINGID_PKMNANCHORSITSELFWITH waitmessage B_WAIT_TIME_LONG removeitem BS_SCRIPTING - swapattackerwithtarget + restoretarget return BattleScript_RedCardDynamaxed: printstring STRINGID_MOVEBLOCKEDBYDYNAMAX waitmessage B_WAIT_TIME_LONG removeitem BS_SCRIPTING - swapattackerwithtarget + restoretarget return BattleScript_EjectButtonActivates:: diff --git a/docs/changelogs/1.8.x/1.8.0.md b/docs/changelogs/1.8.x/1.8.0.md index 128fefed06..81b66d3b12 100644 --- a/docs/changelogs/1.8.x/1.8.0.md +++ b/docs/changelogs/1.8.x/1.8.0.md @@ -359,10 +359,10 @@ * Added missing `P_UPDATED_EVS` config that allows setting the EV yield changes across generations by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/3993 * Added missing `P_UPDATED_EXP_YIELDS` config that allows setting the Experience yield changes across generations by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/3995 * Added evolution methods that require custom trackers (`MON_DATA_EVOLUTION_TRACKER`) by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4087 - * `EVO_USE_MOVE_TWENTY_TIMES`: + * `EVO_LEVEL_MOVE_TWENTY_TIMES`: * Stantler can now evolve into Wyrdeer by using Psyshield Bash 20 times. * Primeape can now evolve into Annihilape by using Rage Fist 20 times. - * `EVO_RECOIL_DAMAGE_MALE`/`EVO_RECOIL_DAMAGE_FEMALE` + * `EVO_LEVEL_RECOIL_DAMAGE_MALE`/`EVO_LEVEL_RECOIL_DAMAGE_FEMALE` * White-Striped Basculin can now evolve into Basculegion when leveling up after receiving 294HP of recoil damage and being the corresponding gender. * Added missing Paldean Wooper icon by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/4260 * Added missing data for placeholder Pokémon by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/4281 diff --git a/docs/changelogs/1.8.x/1.8.3.md b/docs/changelogs/1.8.x/1.8.3.md index 0113aff558..8449f56383 100644 --- a/docs/changelogs/1.8.x/1.8.3.md +++ b/docs/changelogs/1.8.x/1.8.3.md @@ -23,8 +23,8 @@ * Fixed Exp. Candies ignoring hard caps. * Fixed Pokémon gaining 1 experience if they are at the level cap. * Fixed evolution tracker issues by @cawtds in https://github.com/rh-hideout/pokeemerald-expansion/pull/4503 - * `EVO_USE_MOVE_TWENTY_TIMES` no longer increases with every move. - * `EVO_RECOIL_DAMAGE_MALE/FEMALE` is no longer updated twice than intended. + * `EVO_LEVEL_MOVE_TWENTY_TIMES` no longer increases with every move. + * `EVO_LEVEL_RECOIL_DAMAGE_MALE/FEMALE` is no longer updated twice than intended. ## ✨ Feature Branches ✨ ### ***TheXaman's HGSS Pokédex Plus***: diff --git a/gflib/malloc.c b/gflib/malloc.c index 3c15dd9447..edf7be1305 100644 --- a/gflib/malloc.c +++ b/gflib/malloc.c @@ -92,9 +92,9 @@ void *AllocInternal(void *heapStart, u32 size, const char *location) { const char *location = MemBlockLocation(block); if (location) - MgbaPrintf_("%s: %d bytes allocated", location, block->size); + Test_MgbaPrintf("%s: %d bytes allocated", location, block->size); else - MgbaPrintf_(": %d bytes allocated", block->size); + Test_MgbaPrintf(": %d bytes allocated", block->size); } block = block->next; } diff --git a/graphics/pokemon/terapagos/anim_front.png b/graphics/pokemon/terapagos/anim_front.png new file mode 100644 index 0000000000..4ef2270bd3 Binary files /dev/null and b/graphics/pokemon/terapagos/anim_front.png differ diff --git a/graphics/pokemon/terapagos/back.png b/graphics/pokemon/terapagos/back.png new file mode 100644 index 0000000000..8ec4f6c5b0 Binary files /dev/null and b/graphics/pokemon/terapagos/back.png differ diff --git a/graphics/pokemon/terapagos/normal.pal b/graphics/pokemon/terapagos/normal.pal new file mode 100644 index 0000000000..533a2e7c68 --- /dev/null +++ b/graphics/pokemon/terapagos/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +38 26 108 +49 34 133 +103 230 225 +60 76 160 +160 64 109 +228 103 181 +0 0 0 +115 162 235 +52 201 163 +76 244 204 +153 228 201 +230 244 173 +205 251 128 +63 50 194 +255 255 255 diff --git a/graphics/pokemon/terapagos/shiny.pal b/graphics/pokemon/terapagos/shiny.pal new file mode 100644 index 0000000000..1a59467bd6 --- /dev/null +++ b/graphics/pokemon/terapagos/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +37 114 136 +66 151 189 +151 58 210 +63 209 230 +160 64 109 +234 243 49 +0 0 0 +218 32 48 +52 201 163 +76 244 204 +153 228 201 +230 244 173 +205 251 128 +63 50 194 +255 255 255 diff --git a/graphics/pokemon/terapagos/terastal/anim_front.png b/graphics/pokemon/terapagos/terastal/anim_front.png new file mode 100644 index 0000000000..90a42f88b5 Binary files /dev/null and b/graphics/pokemon/terapagos/terastal/anim_front.png differ diff --git a/graphics/pokemon/terapagos/terastal/back.png b/graphics/pokemon/terapagos/terastal/back.png new file mode 100644 index 0000000000..cfa96b0ab0 Binary files /dev/null and b/graphics/pokemon/terapagos/terastal/back.png differ diff --git a/graphics/pokemon/terapagos/terastal/normal.pal b/graphics/pokemon/terapagos/terastal/normal.pal new file mode 100644 index 0000000000..453f7ce70c --- /dev/null +++ b/graphics/pokemon/terapagos/terastal/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +90 53 7 +42 121 78 +70 70 70 +215 38 89 +41 45 164 +77 151 158 +78 190 242 +170 172 227 +122 228 243 +147 245 227 +252 252 182 +255 255 255 +52 66 152 +0 200 255 +197 34 91 diff --git a/graphics/pokemon/terapagos/terastal/shiny.pal b/graphics/pokemon/terapagos/terastal/shiny.pal new file mode 100644 index 0000000000..f6103ac9f6 --- /dev/null +++ b/graphics/pokemon/terapagos/terastal/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +90 53 7 +42 121 78 +70 70 70 +215 38 89 +41 45 164 +77 151 158 +78 190 242 +170 172 227 +122 228 243 +147 245 227 +252 252 182 +255 255 255 +84 215 251 +255 0 0 +244 255 0 diff --git a/graphics/types/none.png b/graphics/types/none.png new file mode 100644 index 0000000000..a2ea01d556 Binary files /dev/null and b/graphics/types/none.png differ diff --git a/graphics_file_rules.mk b/graphics_file_rules.mk index 9f5d9d6c79..1b514b8ed3 100644 --- a/graphics_file_rules.mk +++ b/graphics_file_rules.mk @@ -22,7 +22,7 @@ STARTERGFXDIR := graphics/starter_choose NAMINGGFXDIR := graphics/naming_screen SPINDAGFXDIR := graphics/pokemon/spinda/spots -types := normal fight flying poison ground rock bug ghost steel mystery fire water grass electric psychic ice dragon dark fairy stellar +types := none normal fight flying poison ground rock bug ghost steel mystery fire water grass electric psychic ice dragon dark fairy stellar contest_types := cool beauty cute smart tough ### Tilesets ### diff --git a/include/battle.h b/include/battle.h index 72239928e0..15e8d26366 100644 --- a/include/battle.h +++ b/include/battle.h @@ -738,7 +738,10 @@ struct BattleStruct u8 magnitudeBasePower; u8 presentBasePower; u8 roostTypes[MAX_BATTLERS_COUNT][2]; - u8 savedBattlerTarget; + u8 savedBattlerTarget[5]; + u8 savedBattlerAttacker[5]; + u8 savedTargetCount:4; + u8 savedAttackerCount:4; bool8 ateBoost[MAX_BATTLERS_COUNT]; u8 activeAbilityPopUps; // as bits for each battler u8 abilityPopUpSpriteIds[MAX_BATTLERS_COUNT][2]; // two per battler @@ -1146,6 +1149,7 @@ extern u16 gLastThrownBall; extern u16 gBallToDisplay; extern bool8 gLastUsedBallMenuPresent; extern u8 gPartyCriticalHits[PARTY_SIZE]; +extern u8 gCategoryIconSpriteId; static inline u32 GetBattlerPosition(u32 battler) { diff --git a/include/battle_ai_main.h b/include/battle_ai_main.h index e2c7804091..ce92296b67 100644 --- a/include/battle_ai_main.h +++ b/include/battle_ai_main.h @@ -32,23 +32,21 @@ #define BEST_DAMAGE_MOVE 1 // Move with the most amount of hits with the best accuracy/effect #define POWERFUL_STATUS_MOVE 10 // Moves with this score will be chosen over a move that faints target -// Temporary scores that are added together to determine a final score at the at of AI_CalcMoveEffectScore +// Scores given in AI_CalcMoveEffectScore #define WEAK_EFFECT 1 #define DECENT_EFFECT 2 -#define GOOD_EFFECT 4 -#define BEST_EFFECT 6 - -// AI_CalcMoveEffectScore final score -#define NOT_GOOD_ENOUGH 0 // Not worth using over a damaging move -#define GOOD_MOVE_EFFECTS 2 // Worth using over a damaging move -#define PREFERRED_MOVE_EFFECTS 3 // Worth using over a damagin move and is better then DECENT_EFFECT -#define BEST_MOVE_EFFECTS 4 // Best possible move effects. E.g. stat boosting moves that boost multiply moves +#define GOOD_EFFECT 3 +#define BEST_EFFECT 4 // AI_TryToFaint #define FAST_KILL 6 // AI is faster and faints target #define SLOW_KILL 4 // AI is slower and faints target #define LAST_CHANCE 2 // AI faints to target. It should try and do damage with a priority move +// AI_Risky +#define STRONG_RISKY_EFFECT 3 +#define AVERAGE_RISKY_EFFECT 2 + #include "test_runner.h" // Logs for debugging AI tests. diff --git a/include/battle_ai_util.h b/include/battle_ai_util.h index b6319b7f66..ffb5d3ca77 100644 --- a/include/battle_ai_util.h +++ b/include/battle_ai_util.h @@ -3,15 +3,20 @@ #define FOE(battler) ((BATTLE_OPPOSITE(battler)) & BIT_SIDE) -#define AI_STRIKES_FIRST(battlerAi, battlerDef, move)((AI_WhoStrikesFirst(battlerAi, battlerDef, move) == AI_IS_FASTER)) +// Roll boundaries used by AI when scoring. Doesn't affect actual damage dealt. +#define MAX_ROLL_PERCENTAGE DMG_ROLL_PERCENT_HI +#define MIN_ROLL_PERCENTAGE DMG_ROLL_PERCENT_LO +#define DMG_ROLL_PERCENTAGE ((MAX_ROLL_PERCENTAGE + MIN_ROLL_PERCENTAGE + 1) / 2) // Controls the damage roll the AI sees for the default roll. By default the 9th roll is seen enum { DMG_ROLL_LOWEST, - DMG_ROLL_AVERAGE, + DMG_ROLL_DEFAULT, DMG_ROLL_HIGHEST, }; +bool32 AI_IsFaster(u32 battlerAi, u32 battlerDef, u32 move); +bool32 AI_IsSlower(u32 battlerAi, u32 battlerDef, u32 move); bool32 AI_RandLessThan(u32 val); bool32 IsAiVsAiBattle(void); bool32 BattlerHasAi(u32 battlerId); diff --git a/include/battle_anim_scripts.h b/include/battle_anim_scripts.h new file mode 100644 index 0000000000..d97aaa421d --- /dev/null +++ b/include/battle_anim_scripts.h @@ -0,0 +1,940 @@ +#ifndef GUARD_BATTLE_ANIM_SCRIPTS_H +#define GUARD_BATTLE_ANIM_SCRIPTS_H + +extern const u8 Move_NONE[]; +extern const u8 Move_POUND[]; +extern const u8 Move_KARATE_CHOP[]; +extern const u8 Move_DOUBLE_SLAP[]; +extern const u8 Move_COMET_PUNCH[]; +extern const u8 Move_MEGA_PUNCH[]; +extern const u8 Move_PAY_DAY[]; +extern const u8 Move_FIRE_PUNCH[]; +extern const u8 Move_ICE_PUNCH[]; +extern const u8 Move_THUNDER_PUNCH[]; +extern const u8 Move_SCRATCH[]; +extern const u8 Move_VISE_GRIP[]; +extern const u8 Move_GUILLOTINE[]; +extern const u8 Move_RAZOR_WIND[]; +extern const u8 Move_SWORDS_DANCE[]; +extern const u8 Move_CUT[]; +extern const u8 Move_GUST[]; +extern const u8 Move_WING_ATTACK[]; +extern const u8 Move_WHIRLWIND[]; +extern const u8 Move_FLY[]; +extern const u8 Move_BIND[]; +extern const u8 Move_SLAM[]; +extern const u8 Move_VINE_WHIP[]; +extern const u8 Move_STOMP[]; +extern const u8 Move_DOUBLE_KICK[]; +extern const u8 Move_MEGA_KICK[]; +extern const u8 Move_JUMP_KICK[]; +extern const u8 Move_ROLLING_KICK[]; +extern const u8 Move_SAND_ATTACK[]; +extern const u8 Move_HEADBUTT[]; +extern const u8 Move_HORN_ATTACK[]; +extern const u8 Move_FURY_ATTACK[]; +extern const u8 Move_HORN_DRILL[]; +extern const u8 Move_TACKLE[]; +extern const u8 Move_BODY_SLAM[]; +extern const u8 Move_WRAP[]; +extern const u8 Move_TAKE_DOWN[]; +extern const u8 Move_THRASH[]; +extern const u8 Move_DOUBLE_EDGE[]; +extern const u8 Move_TAIL_WHIP[]; +extern const u8 Move_POISON_STING[]; +extern const u8 Move_TWINEEDLE[]; +extern const u8 Move_PIN_MISSILE[]; +extern const u8 Move_LEER[]; +extern const u8 Move_BITE[]; +extern const u8 Move_GROWL[]; +extern const u8 Move_ROAR[]; +extern const u8 Move_SING[]; +extern const u8 Move_SUPERSONIC[]; +extern const u8 Move_SONIC_BOOM[]; +extern const u8 Move_DISABLE[]; +extern const u8 Move_ACID[]; +extern const u8 Move_EMBER[]; +extern const u8 Move_FLAMETHROWER[]; +extern const u8 Move_MIST[]; +extern const u8 Move_WATER_GUN[]; +extern const u8 Move_HYDRO_PUMP[]; +extern const u8 Move_SURF[]; +extern const u8 Move_ICE_BEAM[]; +extern const u8 Move_BLIZZARD[]; +extern const u8 Move_PSYBEAM[]; +extern const u8 Move_BUBBLE_BEAM[]; +extern const u8 Move_AURORA_BEAM[]; +extern const u8 Move_HYPER_BEAM[]; +extern const u8 Move_PECK[]; +extern const u8 Move_DRILL_PECK[]; +extern const u8 Move_SUBMISSION[]; +extern const u8 Move_LOW_KICK[]; +extern const u8 Move_COUNTER[]; +extern const u8 Move_SEISMIC_TOSS[]; +extern const u8 Move_STRENGTH[]; +extern const u8 Move_ABSORB[]; +extern const u8 Move_MEGA_DRAIN[]; +extern const u8 Move_LEECH_SEED[]; +extern const u8 Move_GROWTH[]; +extern const u8 Move_RAZOR_LEAF[]; +extern const u8 Move_SOLAR_BEAM[]; +extern const u8 Move_POISON_POWDER[]; +extern const u8 Move_STUN_SPORE[]; +extern const u8 Move_SLEEP_POWDER[]; +extern const u8 Move_PETAL_DANCE[]; +extern const u8 Move_STRING_SHOT[]; +extern const u8 Move_DRAGON_RAGE[]; +extern const u8 Move_FIRE_SPIN[]; +extern const u8 Move_THUNDER_SHOCK[]; +extern const u8 Move_THUNDERBOLT[]; +extern const u8 Move_THUNDER_WAVE[]; +extern const u8 Move_THUNDER[]; +extern const u8 Move_ROCK_THROW[]; +extern const u8 Move_EARTHQUAKE[]; +extern const u8 Move_FISSURE[]; +extern const u8 Move_DIG[]; +extern const u8 Move_TOXIC[]; +extern const u8 Move_CONFUSION[]; +extern const u8 Move_PSYCHIC[]; +extern const u8 Move_HYPNOSIS[]; +extern const u8 Move_MEDITATE[]; +extern const u8 Move_AGILITY[]; +extern const u8 Move_QUICK_ATTACK[]; +extern const u8 Move_RAGE[]; +extern const u8 Move_TELEPORT[]; +extern const u8 Move_NIGHT_SHADE[]; +extern const u8 Move_MIMIC[]; +extern const u8 Move_SCREECH[]; +extern const u8 Move_DOUBLE_TEAM[]; +extern const u8 Move_RECOVER[]; +extern const u8 Move_HARDEN[]; +extern const u8 Move_MINIMIZE[]; +extern const u8 Move_SMOKESCREEN[]; +extern const u8 Move_CONFUSE_RAY[]; +extern const u8 Move_WITHDRAW[]; +extern const u8 Move_DEFENSE_CURL[]; +extern const u8 Move_BARRIER[]; +extern const u8 Move_LIGHT_SCREEN[]; +extern const u8 Move_HAZE[]; +extern const u8 Move_REFLECT[]; +extern const u8 Move_FOCUS_ENERGY[]; +extern const u8 Move_BIDE[]; +extern const u8 Move_METRONOME[]; +extern const u8 Move_MIRROR_MOVE[]; +extern const u8 Move_SELF_DESTRUCT[]; +extern const u8 Move_EGG_BOMB[]; +extern const u8 Move_LICK[]; +extern const u8 Move_SMOG[]; +extern const u8 Move_SLUDGE[]; +extern const u8 Move_BONE_CLUB[]; +extern const u8 Move_FIRE_BLAST[]; +extern const u8 Move_WATERFALL[]; +extern const u8 Move_CLAMP[]; +extern const u8 Move_SWIFT[]; +extern const u8 Move_SKULL_BASH[]; +extern const u8 Move_SPIKE_CANNON[]; +extern const u8 Move_CONSTRICT[]; +extern const u8 Move_AMNESIA[]; +extern const u8 Move_KINESIS[]; +extern const u8 Move_SOFT_BOILED[]; +extern const u8 Move_HIGH_JUMP_KICK[]; +extern const u8 Move_GLARE[]; +extern const u8 Move_DREAM_EATER[]; +extern const u8 Move_POISON_GAS[]; +extern const u8 Move_BARRAGE[]; +extern const u8 Move_LEECH_LIFE[]; +extern const u8 Move_LOVELY_KISS[]; +extern const u8 Move_SKY_ATTACK[]; +extern const u8 Move_TRANSFORM[]; +extern const u8 Move_BUBBLE[]; +extern const u8 Move_DIZZY_PUNCH[]; +extern const u8 Move_SPORE[]; +extern const u8 Move_FLASH[]; +extern const u8 Move_PSYWAVE[]; +extern const u8 Move_SPLASH[]; +extern const u8 Move_ACID_ARMOR[]; +extern const u8 Move_CRABHAMMER[]; +extern const u8 Move_EXPLOSION[]; +extern const u8 Move_FURY_SWIPES[]; +extern const u8 Move_BONEMERANG[]; +extern const u8 Move_REST[]; +extern const u8 Move_ROCK_SLIDE[]; +extern const u8 Move_HYPER_FANG[]; +extern const u8 Move_SHARPEN[]; +extern const u8 Move_CONVERSION[]; +extern const u8 Move_TRI_ATTACK[]; +extern const u8 Move_SUPER_FANG[]; +extern const u8 Move_SLASH[]; +extern const u8 Move_SUBSTITUTE[]; +extern const u8 Move_STRUGGLE[]; +extern const u8 Move_SKETCH[]; +extern const u8 Move_TRIPLE_KICK[]; +extern const u8 Move_THIEF[]; +extern const u8 Move_SPIDER_WEB[]; +extern const u8 Move_MIND_READER[]; +extern const u8 Move_NIGHTMARE[]; +extern const u8 Move_FLAME_WHEEL[]; +extern const u8 Move_SNORE[]; +extern const u8 Move_CURSE[]; +extern const u8 Move_FLAIL[]; +extern const u8 Move_CONVERSION_2[]; +extern const u8 Move_AEROBLAST[]; +extern const u8 Move_COTTON_SPORE[]; +extern const u8 Move_REVERSAL[]; +extern const u8 Move_SPITE[]; +extern const u8 Move_POWDER_SNOW[]; +extern const u8 Move_PROTECT[]; +extern const u8 Move_MACH_PUNCH[]; +extern const u8 Move_SCARY_FACE[]; +extern const u8 Move_FEINT_ATTACK[]; +extern const u8 Move_SWEET_KISS[]; +extern const u8 Move_BELLY_DRUM[]; +extern const u8 Move_SLUDGE_BOMB[]; +extern const u8 Move_MUD_SLAP[]; +extern const u8 Move_OCTAZOOKA[]; +extern const u8 Move_SPIKES[]; +extern const u8 Move_ZAP_CANNON[]; +extern const u8 Move_FORESIGHT[]; +extern const u8 Move_DESTINY_BOND[]; +extern const u8 Move_PERISH_SONG[]; +extern const u8 Move_ICY_WIND[]; +extern const u8 Move_DETECT[]; +extern const u8 Move_BONE_RUSH[]; +extern const u8 Move_LOCK_ON[]; +extern const u8 Move_OUTRAGE[]; +extern const u8 Move_SANDSTORM[]; +extern const u8 Move_GIGA_DRAIN[]; +extern const u8 Move_ENDURE[]; +extern const u8 Move_CHARM[]; +extern const u8 Move_ROLLOUT[]; +extern const u8 Move_FALSE_SWIPE[]; +extern const u8 Move_SWAGGER[]; +extern const u8 Move_MILK_DRINK[]; +extern const u8 Move_SPARK[]; +extern const u8 Move_FURY_CUTTER[]; +extern const u8 Move_STEEL_WING[]; +extern const u8 Move_MEAN_LOOK[]; +extern const u8 Move_ATTRACT[]; +extern const u8 Move_SLEEP_TALK[]; +extern const u8 Move_HEAL_BELL[]; +extern const u8 Move_RETURN[]; +extern const u8 Move_PRESENT[]; +extern const u8 Move_FRUSTRATION[]; +extern const u8 Move_SAFEGUARD[]; +extern const u8 Move_PAIN_SPLIT[]; +extern const u8 Move_SACRED_FIRE[]; +extern const u8 Move_MAGNITUDE[]; +extern const u8 Move_DYNAMIC_PUNCH[]; +extern const u8 Move_MEGAHORN[]; +extern const u8 Move_DRAGON_BREATH[]; +extern const u8 Move_BATON_PASS[]; +extern const u8 Move_ENCORE[]; +extern const u8 Move_PURSUIT[]; +extern const u8 Move_RAPID_SPIN[]; +extern const u8 Move_SWEET_SCENT[]; +extern const u8 Move_IRON_TAIL[]; +extern const u8 Move_METAL_CLAW[]; +extern const u8 Move_VITAL_THROW[]; +extern const u8 Move_MORNING_SUN[]; +extern const u8 Move_SYNTHESIS[]; +extern const u8 Move_MOONLIGHT[]; +extern const u8 Move_HIDDEN_POWER[]; +extern const u8 Move_CROSS_CHOP[]; +extern const u8 Move_TWISTER[]; +extern const u8 Move_RAIN_DANCE[]; +extern const u8 Move_SUNNY_DAY[]; +extern const u8 Move_CRUNCH[]; +extern const u8 Move_MIRROR_COAT[]; +extern const u8 Move_PSYCH_UP[]; +extern const u8 Move_EXTREME_SPEED[]; +extern const u8 Move_ANCIENT_POWER[]; +extern const u8 Move_SHADOW_BALL[]; +extern const u8 Move_FUTURE_SIGHT[]; +extern const u8 Move_ROCK_SMASH[]; +extern const u8 Move_WHIRLPOOL[]; +extern const u8 Move_BEAT_UP[]; +extern const u8 Move_FAKE_OUT[]; +extern const u8 Move_UPROAR[]; +extern const u8 Move_STOCKPILE[]; +extern const u8 Move_SPIT_UP[]; +extern const u8 Move_SWALLOW[]; +extern const u8 Move_HEAT_WAVE[]; +extern const u8 Move_HAIL[]; +extern const u8 Move_TORMENT[]; +extern const u8 Move_FLATTER[]; +extern const u8 Move_WILL_O_WISP[]; +extern const u8 Move_MEMENTO[]; +extern const u8 Move_FACADE[]; +extern const u8 Move_FOCUS_PUNCH[]; +extern const u8 Move_SMELLING_SALTS[]; +extern const u8 Move_FOLLOW_ME[]; +extern const u8 Move_NATURE_POWER[]; +extern const u8 Move_CHARGE[]; +extern const u8 Move_TAUNT[]; +extern const u8 Move_HELPING_HAND[]; +extern const u8 Move_TRICK[]; +extern const u8 Move_ROLE_PLAY[]; +extern const u8 Move_WISH[]; +extern const u8 Move_ASSIST[]; +extern const u8 Move_INGRAIN[]; +extern const u8 Move_SUPERPOWER[]; +extern const u8 Move_MAGIC_COAT[]; +extern const u8 Move_RECYCLE[]; +extern const u8 Move_REVENGE[]; +extern const u8 Move_BRICK_BREAK[]; +extern const u8 Move_YAWN[]; +extern const u8 Move_KNOCK_OFF[]; +extern const u8 Move_ENDEAVOR[]; +extern const u8 Move_ERUPTION[]; +extern const u8 Move_SKILL_SWAP[]; +extern const u8 Move_IMPRISON[]; +extern const u8 Move_REFRESH[]; +extern const u8 Move_GRUDGE[]; +extern const u8 Move_SNATCH[]; +extern const u8 Move_SECRET_POWER[]; +extern const u8 Move_DIVE[]; +extern const u8 Move_ARM_THRUST[]; +extern const u8 Move_CAMOUFLAGE[]; +extern const u8 Move_TAIL_GLOW[]; +extern const u8 Move_LUSTER_PURGE[]; +extern const u8 Move_MIST_BALL[]; +extern const u8 Move_FEATHER_DANCE[]; +extern const u8 Move_TEETER_DANCE[]; +extern const u8 Move_BLAZE_KICK[]; +extern const u8 Move_MUD_SPORT[]; +extern const u8 Move_ICE_BALL[]; +extern const u8 Move_NEEDLE_ARM[]; +extern const u8 Move_SLACK_OFF[]; +extern const u8 Move_HYPER_VOICE[]; +extern const u8 Move_POISON_FANG[]; +extern const u8 Move_CRUSH_CLAW[]; +extern const u8 Move_BLAST_BURN[]; +extern const u8 Move_HYDRO_CANNON[]; +extern const u8 Move_METEOR_MASH[]; +extern const u8 Move_ASTONISH[]; +extern const u8 Move_WEATHER_BALL[]; +extern const u8 Move_AROMATHERAPY[]; +extern const u8 Move_FAKE_TEARS[]; +extern const u8 Move_AIR_CUTTER[]; +extern const u8 Move_OVERHEAT[]; +extern const u8 Move_ODOR_SLEUTH[]; +extern const u8 Move_ROCK_TOMB[]; +extern const u8 Move_SILVER_WIND[]; +extern const u8 Move_METAL_SOUND[]; +extern const u8 Move_GRASS_WHISTLE[]; +extern const u8 Move_TICKLE[]; +extern const u8 Move_COSMIC_POWER[]; +extern const u8 Move_WATER_SPOUT[]; +extern const u8 Move_SIGNAL_BEAM[]; +extern const u8 Move_SHADOW_PUNCH[]; +extern const u8 Move_EXTRASENSORY[]; +extern const u8 Move_SKY_UPPERCUT[]; +extern const u8 Move_SAND_TOMB[]; +extern const u8 Move_SHEER_COLD[]; +extern const u8 Move_MUDDY_WATER[]; +extern const u8 Move_BULLET_SEED[]; +extern const u8 Move_AERIAL_ACE[]; +extern const u8 Move_ICICLE_SPEAR[]; +extern const u8 Move_IRON_DEFENSE[]; +extern const u8 Move_BLOCK[]; +extern const u8 Move_HOWL[]; +extern const u8 Move_DRAGON_CLAW[]; +extern const u8 Move_FRENZY_PLANT[]; +extern const u8 Move_BULK_UP[]; +extern const u8 Move_BOUNCE[]; +extern const u8 Move_MUD_SHOT[]; +extern const u8 Move_POISON_TAIL[]; +extern const u8 Move_COVET[]; +extern const u8 Move_VOLT_TACKLE[]; +extern const u8 Move_MAGICAL_LEAF[]; +extern const u8 Move_WATER_SPORT[]; +extern const u8 Move_CALM_MIND[]; +extern const u8 Move_LEAF_BLADE[]; +extern const u8 Move_DRAGON_DANCE[]; +extern const u8 Move_ROCK_BLAST[]; +extern const u8 Move_SHOCK_WAVE[]; +extern const u8 Move_WATER_PULSE[]; +extern const u8 Move_DOOM_DESIRE[]; +extern const u8 Move_PSYCHO_BOOST[]; +extern const u8 Move_ROOST[]; +extern const u8 Move_GRAVITY[]; +extern const u8 Move_MIRACLE_EYE[]; +extern const u8 Move_WAKE_UP_SLAP[]; +extern const u8 Move_HAMMER_ARM[]; +extern const u8 Move_GYRO_BALL[]; +extern const u8 Move_HEALING_WISH[]; +extern const u8 Move_BRINE[]; +extern const u8 Move_NATURAL_GIFT[]; +extern const u8 Move_FEINT[]; +extern const u8 Move_PLUCK[]; +extern const u8 Move_TAILWIND[]; +extern const u8 Move_ACUPRESSURE[]; +extern const u8 Move_METAL_BURST[]; +extern const u8 Move_U_TURN[]; +extern const u8 Move_CLOSE_COMBAT[]; +extern const u8 Move_PAYBACK[]; +extern const u8 Move_ASSURANCE[]; +extern const u8 Move_EMBARGO[]; +extern const u8 Move_FLING[]; +extern const u8 Move_PSYCHO_SHIFT[]; +extern const u8 Move_TRUMP_CARD[]; +extern const u8 Move_HEAL_BLOCK[]; +extern const u8 Move_WRING_OUT[]; +extern const u8 Move_POWER_TRICK[]; +extern const u8 Move_GASTRO_ACID[]; +extern const u8 Move_LUCKY_CHANT[]; +extern const u8 Move_ME_FIRST[]; +extern const u8 Move_COPYCAT[]; +extern const u8 Move_POWER_SWAP[]; +extern const u8 Move_GUARD_SWAP[]; +extern const u8 Move_PUNISHMENT[]; +extern const u8 Move_LAST_RESORT[]; +extern const u8 Move_WORRY_SEED[]; +extern const u8 Move_SUCKER_PUNCH[]; +extern const u8 Move_TOXIC_SPIKES[]; +extern const u8 Move_HEART_SWAP[]; +extern const u8 Move_AQUA_RING[]; +extern const u8 Move_MAGNET_RISE[]; +extern const u8 Move_FLARE_BLITZ[]; +extern const u8 Move_FORCE_PALM[]; +extern const u8 Move_AURA_SPHERE[]; +extern const u8 Move_ROCK_POLISH[]; +extern const u8 Move_POISON_JAB[]; +extern const u8 Move_DARK_PULSE[]; +extern const u8 Move_NIGHT_SLASH[]; +extern const u8 Move_AQUA_TAIL[]; +extern const u8 Move_SEED_BOMB[]; +extern const u8 Move_AIR_SLASH[]; +extern const u8 Move_X_SCISSOR[]; +extern const u8 Move_BUG_BUZZ[]; +extern const u8 Move_DRAGON_PULSE[]; +extern const u8 Move_DRAGON_RUSH[]; +extern const u8 Move_POWER_GEM[]; +extern const u8 Move_DRAIN_PUNCH[]; +extern const u8 Move_VACUUM_WAVE[]; +extern const u8 Move_FOCUS_BLAST[]; +extern const u8 Move_ENERGY_BALL[]; +extern const u8 Move_BRAVE_BIRD[]; +extern const u8 Move_EARTH_POWER[]; +extern const u8 Move_SWITCHEROO[]; +extern const u8 Move_GIGA_IMPACT[]; +extern const u8 Move_NASTY_PLOT[]; +extern const u8 Move_BULLET_PUNCH[]; +extern const u8 Move_AVALANCHE[]; +extern const u8 Move_ICE_SHARD[]; +extern const u8 Move_SHADOW_CLAW[]; +extern const u8 Move_THUNDER_FANG[]; +extern const u8 Move_ICE_FANG[]; +extern const u8 Move_FIRE_FANG[]; +extern const u8 Move_SHADOW_SNEAK[]; +extern const u8 Move_MUD_BOMB[]; +extern const u8 Move_PSYCHO_CUT[]; +extern const u8 Move_ZEN_HEADBUTT[]; +extern const u8 Move_MIRROR_SHOT[]; +extern const u8 Move_FLASH_CANNON[]; +extern const u8 Move_ROCK_CLIMB[]; +extern const u8 Move_DEFOG[]; +extern const u8 Move_TRICK_ROOM[]; +extern const u8 Move_DRACO_METEOR[]; +extern const u8 Move_DISCHARGE[]; +extern const u8 Move_LAVA_PLUME[]; +extern const u8 Move_LEAF_STORM[]; +extern const u8 Move_POWER_WHIP[]; +extern const u8 Move_ROCK_WRECKER[]; +extern const u8 Move_CROSS_POISON[]; +extern const u8 Move_GUNK_SHOT[]; +extern const u8 Move_IRON_HEAD[]; +extern const u8 Move_MAGNET_BOMB[]; +extern const u8 Move_STONE_EDGE[]; +extern const u8 Move_CAPTIVATE[]; +extern const u8 Move_STEALTH_ROCK[]; +extern const u8 Move_GRASS_KNOT[]; +extern const u8 Move_CHATTER[]; +extern const u8 Move_JUDGMENT[]; +extern const u8 Move_BUG_BITE[]; +extern const u8 Move_CHARGE_BEAM[]; +extern const u8 Move_WOOD_HAMMER[]; +extern const u8 Move_AQUA_JET[]; +extern const u8 Move_ATTACK_ORDER[]; +extern const u8 Move_DEFEND_ORDER[]; +extern const u8 Move_HEAL_ORDER[]; +extern const u8 Move_HEAD_SMASH[]; +extern const u8 Move_DOUBLE_HIT[]; +extern const u8 Move_ROAR_OF_TIME[]; +extern const u8 Move_SPACIAL_REND[]; +extern const u8 Move_LUNAR_DANCE[]; +extern const u8 Move_CRUSH_GRIP[]; +extern const u8 Move_MAGMA_STORM[]; +extern const u8 Move_DARK_VOID[]; +extern const u8 Move_SEED_FLARE[]; +extern const u8 Move_OMINOUS_WIND[]; +extern const u8 Move_SHADOW_FORCE[]; +extern const u8 Move_HONE_CLAWS[]; +extern const u8 Move_WIDE_GUARD[]; +extern const u8 Move_GUARD_SPLIT[]; +extern const u8 Move_POWER_SPLIT[]; +extern const u8 Move_WONDER_ROOM[]; +extern const u8 Move_PSYSHOCK[]; +extern const u8 Move_VENOSHOCK[]; +extern const u8 Move_AUTOTOMIZE[]; +extern const u8 Move_RAGE_POWDER[]; +extern const u8 Move_TELEKINESIS[]; +extern const u8 Move_MAGIC_ROOM[]; +extern const u8 Move_SMACK_DOWN[]; +extern const u8 Move_STORM_THROW[]; +extern const u8 Move_FLAME_BURST[]; +extern const u8 Move_SLUDGE_WAVE[]; +extern const u8 Move_QUIVER_DANCE[]; +extern const u8 Move_HEAVY_SLAM[]; +extern const u8 Move_SYNCHRONOISE[]; +extern const u8 Move_ELECTRO_BALL[]; +extern const u8 Move_SOAK[]; +extern const u8 Move_FLAME_CHARGE[]; +extern const u8 Move_COIL[]; +extern const u8 Move_LOW_SWEEP[]; +extern const u8 Move_ACID_SPRAY[]; +extern const u8 Move_FOUL_PLAY[]; +extern const u8 Move_SIMPLE_BEAM[]; +extern const u8 Move_ENTRAINMENT[]; +extern const u8 Move_AFTER_YOU[]; +extern const u8 Move_ROUND[]; +extern const u8 Move_ECHOED_VOICE[]; +extern const u8 Move_CHIP_AWAY[]; +extern const u8 Move_CLEAR_SMOG[]; +extern const u8 Move_STORED_POWER[]; +extern const u8 Move_QUICK_GUARD[]; +extern const u8 Move_ALLY_SWITCH[]; +extern const u8 Move_SCALD[]; +extern const u8 Move_SHELL_SMASH[]; +extern const u8 Move_HEAL_PULSE[]; +extern const u8 Move_HEX[]; +extern const u8 Move_SKY_DROP[]; +extern const u8 Move_SHIFT_GEAR[]; +extern const u8 Move_CIRCLE_THROW[]; +extern const u8 Move_INCINERATE[]; +extern const u8 Move_QUASH[]; +extern const u8 Move_ACROBATICS[]; +extern const u8 Move_REFLECT_TYPE[]; +extern const u8 Move_RETALIATE[]; +extern const u8 Move_FINAL_GAMBIT[]; +extern const u8 Move_BESTOW[]; +extern const u8 Move_INFERNO[]; +extern const u8 Move_WATER_PLEDGE[]; +extern const u8 Move_FIRE_PLEDGE[]; +extern const u8 Move_GRASS_PLEDGE[]; +extern const u8 Move_VOLT_SWITCH[]; +extern const u8 Move_STRUGGLE_BUG[]; +extern const u8 Move_BULLDOZE[]; +extern const u8 Move_FROST_BREATH[]; +extern const u8 Move_DRAGON_TAIL[]; +extern const u8 Move_WORK_UP[]; +extern const u8 Move_ELECTROWEB[]; +extern const u8 Move_WILD_CHARGE[]; +extern const u8 Move_DRILL_RUN[]; +extern const u8 Move_DUAL_CHOP[]; +extern const u8 Move_HEART_STAMP[]; +extern const u8 Move_HORN_LEECH[]; +extern const u8 Move_SACRED_SWORD[]; +extern const u8 Move_RAZOR_SHELL[]; +extern const u8 Move_HEAT_CRASH[]; +extern const u8 Move_LEAF_TORNADO[]; +extern const u8 Move_STEAMROLLER[]; +extern const u8 Move_COTTON_GUARD[]; +extern const u8 Move_NIGHT_DAZE[]; +extern const u8 Move_PSYSTRIKE[]; +extern const u8 Move_TAIL_SLAP[]; +extern const u8 Move_HURRICANE[]; +extern const u8 Move_HEAD_CHARGE[]; +extern const u8 Move_GEAR_GRIND[]; +extern const u8 Move_SEARING_SHOT[]; +extern const u8 Move_TECHNO_BLAST[]; +extern const u8 Move_RELIC_SONG[]; +extern const u8 Move_SECRET_SWORD[]; +extern const u8 Move_GLACIATE[]; +extern const u8 Move_BOLT_STRIKE[]; +extern const u8 Move_BLUE_FLARE[]; +extern const u8 Move_FIERY_DANCE[]; +extern const u8 Move_FREEZE_SHOCK[]; +extern const u8 Move_ICE_BURN[]; +extern const u8 Move_SNARL[]; +extern const u8 Move_ICICLE_CRASH[]; +extern const u8 Move_V_CREATE[]; +extern const u8 Move_FUSION_FLARE[]; +extern const u8 Move_FUSION_BOLT[]; +extern const u8 Move_FLYING_PRESS[]; +extern const u8 Move_MAT_BLOCK[]; +extern const u8 Move_BELCH[]; +extern const u8 Move_ROTOTILLER[]; +extern const u8 Move_STICKY_WEB[]; +extern const u8 Move_FELL_STINGER[]; +extern const u8 Move_PHANTOM_FORCE[]; +extern const u8 Move_TRICK_OR_TREAT[]; +extern const u8 Move_NOBLE_ROAR[]; +extern const u8 Move_ION_DELUGE[]; +extern const u8 Move_PARABOLIC_CHARGE[]; +extern const u8 Move_FORESTS_CURSE[]; +extern const u8 Move_PETAL_BLIZZARD[]; +extern const u8 Move_FREEZE_DRY[]; +extern const u8 Move_DISARMING_VOICE[]; +extern const u8 Move_PARTING_SHOT[]; +extern const u8 Move_TOPSY_TURVY[]; +extern const u8 Move_DRAINING_KISS[]; +extern const u8 Move_CRAFTY_SHIELD[]; +extern const u8 Move_FLOWER_SHIELD[]; +extern const u8 Move_GRASSY_TERRAIN[]; +extern const u8 Move_MISTY_TERRAIN[]; +extern const u8 Move_ELECTRIFY[]; +extern const u8 Move_PLAY_ROUGH[]; +extern const u8 Move_FAIRY_WIND[]; +extern const u8 Move_MOONBLAST[]; +extern const u8 Move_BOOMBURST[]; +extern const u8 Move_FAIRY_LOCK[]; +extern const u8 Move_KINGS_SHIELD[]; +extern const u8 Move_PLAY_NICE[]; +extern const u8 Move_CONFIDE[]; +extern const u8 Move_DIAMOND_STORM[]; +extern const u8 Move_STEAM_ERUPTION[]; +extern const u8 Move_HYPERSPACE_HOLE[]; +extern const u8 Move_WATER_SHURIKEN[]; +extern const u8 Move_MYSTICAL_FIRE[]; +extern const u8 Move_SPIKY_SHIELD[]; +extern const u8 Move_AROMATIC_MIST[]; +extern const u8 Move_EERIE_IMPULSE[]; +extern const u8 Move_VENOM_DRENCH[]; +extern const u8 Move_POWDER[]; +extern const u8 Move_GEOMANCY[]; +extern const u8 Move_MAGNETIC_FLUX[]; +extern const u8 Move_HAPPY_HOUR[]; +extern const u8 Move_ELECTRIC_TERRAIN[]; +extern const u8 Move_DAZZLING_GLEAM[]; +extern const u8 Move_CELEBRATE[]; +extern const u8 Move_HOLD_HANDS[]; +extern const u8 Move_BABY_DOLL_EYES[]; +extern const u8 Move_NUZZLE[]; +extern const u8 Move_HOLD_BACK[]; +extern const u8 Move_INFESTATION[]; +extern const u8 Move_POWER_UP_PUNCH[]; +extern const u8 Move_OBLIVION_WING[]; +extern const u8 Move_THOUSAND_ARROWS[]; +extern const u8 Move_THOUSAND_WAVES[]; +extern const u8 Move_LANDS_WRATH[]; +extern const u8 Move_LIGHT_OF_RUIN[]; +extern const u8 Move_ORIGIN_PULSE[]; +extern const u8 Move_PRECIPICE_BLADES[]; +extern const u8 Move_DRAGON_ASCENT[]; +extern const u8 Move_HYPERSPACE_FURY[]; +extern const u8 Move_SHORE_UP[]; +extern const u8 Move_FIRST_IMPRESSION[]; +extern const u8 Move_BANEFUL_BUNKER[]; +extern const u8 Move_SPIRIT_SHACKLE[]; +extern const u8 Move_DARKEST_LARIAT[]; +extern const u8 Move_SPARKLING_ARIA[]; +extern const u8 Move_ICE_HAMMER[]; +extern const u8 Move_FLORAL_HEALING[]; +extern const u8 Move_HIGH_HORSEPOWER[]; +extern const u8 Move_STRENGTH_SAP[]; +extern const u8 Move_SOLAR_BLADE[]; +extern const u8 Move_LEAFAGE[]; +extern const u8 Move_SPOTLIGHT[]; +extern const u8 Move_TOXIC_THREAD[]; +extern const u8 Move_LASER_FOCUS[]; +extern const u8 Move_GEAR_UP[]; +extern const u8 Move_THROAT_CHOP[]; +extern const u8 Move_POLLEN_PUFF[]; +extern const u8 Move_ANCHOR_SHOT[]; +extern const u8 Move_PSYCHIC_TERRAIN[]; +extern const u8 Move_LUNGE[]; +extern const u8 Move_FIRE_LASH[]; +extern const u8 Move_POWER_TRIP[]; +extern const u8 Move_BURN_UP[]; +extern const u8 Move_SPEED_SWAP[]; +extern const u8 Move_SMART_STRIKE[]; +extern const u8 Move_PURIFY[]; +extern const u8 Move_REVELATION_DANCE[]; +extern const u8 Move_CORE_ENFORCER[]; +extern const u8 Move_TROP_KICK[]; +extern const u8 Move_INSTRUCT[]; +extern const u8 Move_BEAK_BLAST[]; +extern const u8 Move_CLANGING_SCALES[]; +extern const u8 Move_DRAGON_HAMMER[]; +extern const u8 Move_BRUTAL_SWING[]; +extern const u8 Move_AURORA_VEIL[]; +extern const u8 Move_SHELL_TRAP[]; +extern const u8 Move_FLEUR_CANNON[]; +extern const u8 Move_PSYCHIC_FANGS[]; +extern const u8 Move_STOMPING_TANTRUM[]; +extern const u8 Move_SHADOW_BONE[]; +extern const u8 Move_ACCELEROCK[]; +extern const u8 Move_LIQUIDATION[]; +extern const u8 Move_PRISMATIC_LASER[]; +extern const u8 Move_SPECTRAL_THIEF[]; +extern const u8 Move_SUNSTEEL_STRIKE[]; +extern const u8 Move_MOONGEIST_BEAM[]; +extern const u8 Move_TEARFUL_LOOK[]; +extern const u8 Move_ZING_ZAP[]; +extern const u8 Move_NATURES_MADNESS[]; +extern const u8 Move_MULTI_ATTACK[]; +extern const u8 Move_MIND_BLOWN[]; +extern const u8 Move_PLASMA_FISTS[]; +extern const u8 Move_PHOTON_GEYSER[]; +extern const u8 Move_ZIPPY_ZAP[]; +extern const u8 Move_SPLISHY_SPLASH[]; +extern const u8 Move_FLOATY_FALL[]; +extern const u8 Move_PIKA_PAPOW[]; +extern const u8 Move_BOUNCY_BUBBLE[]; +extern const u8 Move_BUZZY_BUZZ[]; +extern const u8 Move_SIZZLY_SLIDE[]; +extern const u8 Move_GLITZY_GLOW[]; +extern const u8 Move_BADDY_BAD[]; +extern const u8 Move_SAPPY_SEED[]; +extern const u8 Move_FREEZY_FROST[]; +extern const u8 Move_SPARKLY_SWIRL[]; +extern const u8 Move_VEEVEE_VOLLEY[]; +extern const u8 Move_DOUBLE_IRON_BASH[]; +extern const u8 Move_DYNAMAX_CANNON[]; +extern const u8 Move_SNIPE_SHOT[]; +extern const u8 Move_JAW_LOCK[]; +extern const u8 Move_STUFF_CHEEKS[]; +extern const u8 Move_NO_RETREAT[]; +extern const u8 Move_TAR_SHOT[]; +extern const u8 Move_MAGIC_POWDER[]; +extern const u8 Move_DRAGON_DARTS[]; +extern const u8 Move_TEATIME[]; +extern const u8 Move_OCTOLOCK[]; +extern const u8 Move_BOLT_BEAK[]; +extern const u8 Move_FISHIOUS_REND[]; +extern const u8 Move_COURT_CHANGE[]; +extern const u8 Move_CLANGOROUS_SOUL[]; +extern const u8 Move_BODY_PRESS[]; +extern const u8 Move_DECORATE[]; +extern const u8 Move_DRUM_BEATING[]; +extern const u8 Move_SNAP_TRAP[]; +extern const u8 Move_PYRO_BALL[]; +extern const u8 Move_BEHEMOTH_BLADE[]; +extern const u8 Move_BEHEMOTH_BASH[]; +extern const u8 Move_AURA_WHEEL[]; +extern const u8 Move_BREAKING_SWIPE[]; +extern const u8 Move_BRANCH_POKE[]; +extern const u8 Move_OVERDRIVE[]; +extern const u8 Move_APPLE_ACID[]; +extern const u8 Move_GRAV_APPLE[]; +extern const u8 Move_SPIRIT_BREAK[]; +extern const u8 Move_STRANGE_STEAM[]; +extern const u8 Move_LIFE_DEW[]; +extern const u8 Move_OBSTRUCT[]; +extern const u8 Move_FALSE_SURRENDER[]; +extern const u8 Move_METEOR_ASSAULT[]; +extern const u8 Move_ETERNABEAM[]; +extern const u8 Move_STEEL_BEAM[]; +extern const u8 Move_EXPANDING_FORCE[]; +extern const u8 Move_STEEL_ROLLER[]; +extern const u8 Move_SCALE_SHOT[]; +extern const u8 Move_METEOR_BEAM[]; +extern const u8 Move_SHELL_SIDE_ARM[]; +extern const u8 Move_MISTY_EXPLOSION[]; +extern const u8 Move_GRASSY_GLIDE[]; +extern const u8 Move_RISING_VOLTAGE[]; +extern const u8 Move_TERRAIN_PULSE[]; +extern const u8 Move_SKITTER_SMACK[]; +extern const u8 Move_BURNING_JEALOUSY[]; +extern const u8 Move_LASH_OUT[]; +extern const u8 Move_POLTERGEIST[]; +extern const u8 Move_CORROSIVE_GAS[]; +extern const u8 Move_COACHING[]; +extern const u8 Move_FLIP_TURN[]; +extern const u8 Move_TRIPLE_AXEL[]; +extern const u8 Move_DUAL_WINGBEAT[]; +extern const u8 Move_SCORCHING_SANDS[]; +extern const u8 Move_JUNGLE_HEALING[]; +extern const u8 Move_WICKED_BLOW[]; +extern const u8 Move_SURGING_STRIKES[]; +extern const u8 Move_THUNDER_CAGE[]; +extern const u8 Move_DRAGON_ENERGY[]; +extern const u8 Move_FREEZING_GLARE[]; +extern const u8 Move_FIERY_WRATH[]; +extern const u8 Move_THUNDEROUS_KICK[]; +extern const u8 Move_GLACIAL_LANCE[]; +extern const u8 Move_ASTRAL_BARRAGE[]; +extern const u8 Move_EERIE_SPELL[]; +extern const u8 Move_DIRE_CLAW[]; +extern const u8 Move_PSYSHIELD_BASH[]; +extern const u8 Move_POWER_SHIFT[]; +extern const u8 Move_STONE_AXE[]; +extern const u8 Move_SPRINGTIDE_STORM[]; +extern const u8 Move_MYSTICAL_POWER[]; +extern const u8 Move_RAGING_FURY[]; +extern const u8 Move_WAVE_CRASH[]; +extern const u8 Move_CHLOROBLAST[]; +extern const u8 Move_MOUNTAIN_GALE[]; +extern const u8 Move_VICTORY_DANCE[]; +extern const u8 Move_HEADLONG_RUSH[]; +extern const u8 Move_BARB_BARRAGE[]; +extern const u8 Move_ESPER_WING[]; +extern const u8 Move_BITTER_MALICE[]; +extern const u8 Move_SHELTER[]; +extern const u8 Move_TRIPLE_ARROWS[]; +extern const u8 Move_INFERNAL_PARADE[]; +extern const u8 Move_CEASELESS_EDGE[]; +extern const u8 Move_BLEAKWIND_STORM[]; +extern const u8 Move_WILDBOLT_STORM[]; +extern const u8 Move_SANDSEAR_STORM[]; +extern const u8 Move_LUNAR_BLESSING[]; +extern const u8 Move_TAKE_HEART[]; +extern const u8 Move_TERA_BLAST[]; +extern const u8 Move_SILK_TRAP[]; +extern const u8 Move_AXE_KICK[]; +extern const u8 Move_LAST_RESPECTS[]; +extern const u8 Move_LUMINA_CRASH[]; +extern const u8 Move_ORDER_UP[]; +extern const u8 Move_JET_PUNCH[]; +extern const u8 Move_SPICY_EXTRACT[]; +extern const u8 Move_SPIN_OUT[]; +extern const u8 Move_POPULATION_BOMB[]; +extern const u8 Move_ICE_SPINNER[]; +extern const u8 Move_GLAIVE_RUSH[]; +extern const u8 Move_REVIVAL_BLESSING[]; +extern const u8 Move_SALT_CURE[]; +extern const u8 Move_TRIPLE_DIVE[]; +extern const u8 Move_MORTAL_SPIN[]; +extern const u8 Move_DOODLE[]; +extern const u8 Move_FILLET_AWAY[]; +extern const u8 Move_KOWTOW_CLEAVE[]; +extern const u8 Move_FLOWER_TRICK[]; +extern const u8 Move_TORCH_SONG[]; +extern const u8 Move_AQUA_STEP[]; +extern const u8 Move_RAGING_BULL[]; +extern const u8 Move_MAKE_IT_RAIN[]; +extern const u8 Move_RUINATION[]; +extern const u8 Move_COLLISION_COURSE[]; +extern const u8 Move_ELECTRO_DRIFT[]; +extern const u8 Move_SHED_TAIL[]; +extern const u8 Move_CHILLY_RECEPTION[]; +extern const u8 Move_TIDY_UP[]; +extern const u8 Move_SNOWSCAPE[]; +extern const u8 Move_POUNCE[]; +extern const u8 Move_TRAILBLAZE[]; +extern const u8 Move_CHILLING_WATER[]; +extern const u8 Move_HYPER_DRILL[]; +extern const u8 Move_TWIN_BEAM[]; +extern const u8 Move_RAGE_FIST[]; +extern const u8 Move_ARMOR_CANNON[]; +extern const u8 Move_BITTER_BLADE[]; +extern const u8 Move_DOUBLE_SHOCK[]; +extern const u8 Move_GIGATON_HAMMER[]; +extern const u8 Move_COMEUPPANCE[]; +extern const u8 Move_AQUA_CUTTER[]; +extern const u8 Move_BLAZING_TORQUE[]; +extern const u8 Move_WICKED_TORQUE[]; +extern const u8 Move_NOXIOUS_TORQUE[]; +extern const u8 Move_COMBAT_TORQUE[]; +extern const u8 Move_MAGICAL_TORQUE[]; +extern const u8 Move_PSYBLADE[]; +extern const u8 Move_HYDRO_STEAM[]; +extern const u8 Move_BLOOD_MOON[]; +extern const u8 Move_MATCHA_GOTCHA[]; +extern const u8 Move_SYRUP_BOMB[]; +extern const u8 Move_IVY_CUDGEL[]; +extern const u8 Move_ELECTRO_SHOT[]; +extern const u8 Move_TERA_STARSTORM[]; +extern const u8 Move_FICKLE_BEAM[]; +extern const u8 Move_BURNING_BULWARK[]; +extern const u8 Move_THUNDERCLAP[]; +extern const u8 Move_MIGHTY_CLEAVE[]; +extern const u8 Move_TACHYON_CUTTER[]; +extern const u8 Move_HARD_PRESS[]; +extern const u8 Move_DRAGON_CHEER[]; +extern const u8 Move_ALLURING_VOICE[]; +extern const u8 Move_TEMPER_FLARE[]; +extern const u8 Move_SUPERCELL_SLAM[]; +extern const u8 Move_PSYCHIC_NOISE[]; +extern const u8 Move_UPPER_HAND[]; +extern const u8 Move_MALIGNANT_CHAIN[]; +extern const u8 Move_BREAKNECK_BLITZ[]; +extern const u8 Move_ALL_OUT_PUMMELING[]; +extern const u8 Move_SUPERSONIC_SKYSTRIKE[]; +extern const u8 Move_ACID_DOWNPOUR[]; +extern const u8 Move_TECTONIC_RAGE[]; +extern const u8 Move_CONTINENTAL_CRUSH[]; +extern const u8 Move_SAVAGE_SPIN_OUT[]; +extern const u8 Move_NEVER_ENDING_NIGHTMARE[]; +extern const u8 Move_CORKSCREW_CRASH[]; +extern const u8 Move_INFERNO_OVERDRIVE[]; +extern const u8 Move_HYDRO_VORTEX[]; +extern const u8 Move_BLOOM_DOOM[]; +extern const u8 Move_GIGAVOLT_HAVOC[]; +extern const u8 Move_SHATTERED_PSYCHE[]; +extern const u8 Move_SUBZERO_SLAMMER[]; +extern const u8 Move_DEVASTATING_DRAKE[]; +extern const u8 Move_BLACK_HOLE_ECLIPSE[]; +extern const u8 Move_TWINKLE_TACKLE[]; +extern const u8 Move_CATASTROPIKA[]; +extern const u8 Move_10000000_VOLT_THUNDERBOLT[]; +extern const u8 Move_STOKED_SPARKSURFER[]; +extern const u8 Move_EXTREME_EVOBOOST[]; +extern const u8 Move_PULVERIZING_PANCAKE[]; +extern const u8 Move_GENESIS_SUPERNOVA[]; +extern const u8 Move_SINISTER_ARROW_RAID[]; +extern const u8 Move_MALICIOUS_MOONSAULT[]; +extern const u8 Move_OCEANIC_OPERETTA[]; +extern const u8 Move_SPLINTERED_STORMSHARDS[]; +extern const u8 Move_LETS_SNUGGLE_FOREVER[]; +extern const u8 Move_CLANGOROUS_SOULBLAZE[]; +extern const u8 Move_GUARDIAN_OF_ALOLA[]; +extern const u8 Move_SEARING_SUNRAZE_SMASH[]; +extern const u8 Move_MENACING_MOONRAZE_MAELSTROM[]; +extern const u8 Move_LIGHT_THAT_BURNS_THE_SKY[]; +extern const u8 Move_SOUL_STEALING_7_STAR_STRIKE[]; +extern const u8 Move_MAX_GUARD[]; +extern const u8 Move_MAX_FLARE[]; +extern const u8 Move_MAX_FLUTTERBY[]; +extern const u8 Move_MAX_LIGHTNING[]; +extern const u8 Move_MAX_STRIKE[]; +extern const u8 Move_MAX_KNUCKLE[]; +extern const u8 Move_MAX_PHANTASM[]; +extern const u8 Move_MAX_HAILSTORM[]; +extern const u8 Move_MAX_OOZE[]; +extern const u8 Move_MAX_GEYSER[]; +extern const u8 Move_MAX_AIRSTREAM[]; +extern const u8 Move_MAX_STARFALL[]; +extern const u8 Move_MAX_WYRMWIND[]; +extern const u8 Move_MAX_MINDSTORM[]; +extern const u8 Move_MAX_ROCKFALL[]; +extern const u8 Move_MAX_QUAKE[]; +extern const u8 Move_MAX_DARKNESS[]; +extern const u8 Move_MAX_OVERGROWTH[]; +extern const u8 Move_MAX_STEELSPIKE[]; +extern const u8 Move_G_MAX_VINE_LASH[]; +extern const u8 Move_G_MAX_WILDFIRE[]; +extern const u8 Move_G_MAX_CANNONADE[]; +extern const u8 Move_G_MAX_BEFUDDLE[]; +extern const u8 Move_G_MAX_VOLT_CRASH[]; +extern const u8 Move_G_MAX_GOLD_RUSH[]; +extern const u8 Move_G_MAX_CHI_STRIKE[]; +extern const u8 Move_G_MAX_TERROR[]; +extern const u8 Move_G_MAX_FOAM_BURST[]; +extern const u8 Move_G_MAX_RESONANCE[]; +extern const u8 Move_G_MAX_CUDDLE[]; +extern const u8 Move_G_MAX_REPLENISH[]; +extern const u8 Move_G_MAX_MALODOR[]; +extern const u8 Move_G_MAX_MELTDOWN[]; +extern const u8 Move_G_MAX_DRUM_SOLO[]; +extern const u8 Move_G_MAX_FIREBALL[]; +extern const u8 Move_G_MAX_HYDROSNIPE[]; +extern const u8 Move_G_MAX_WIND_RAGE[]; +extern const u8 Move_G_MAX_GRAVITAS[]; +extern const u8 Move_G_MAX_STONESURGE[]; +extern const u8 Move_G_MAX_VOLCALITH[]; +extern const u8 Move_G_MAX_TARTNESS[]; +extern const u8 Move_G_MAX_SWEETNESS[]; +extern const u8 Move_G_MAX_SANDBLAST[]; +extern const u8 Move_G_MAX_STUN_SHOCK[]; +extern const u8 Move_G_MAX_CENTIFERNO[]; +extern const u8 Move_G_MAX_SMITE[]; +extern const u8 Move_G_MAX_SNOOZE[]; +extern const u8 Move_G_MAX_FINALE[]; +extern const u8 Move_G_MAX_STEELSURGE[]; +extern const u8 Move_G_MAX_DEPLETION[]; +extern const u8 Move_G_MAX_ONE_BLOW[]; +extern const u8 Move_G_MAX_RAPID_FLOW[]; + +#endif // GUARD_BATTLE_ANIM_SCRIPTS_H diff --git a/include/battle_interface.h b/include/battle_interface.h index f32017745f..903483e1d5 100644 --- a/include/battle_interface.h +++ b/include/battle_interface.h @@ -144,5 +144,6 @@ void TryAddLastUsedBallItemSprites(void); void SwapBallToDisplay(bool32 sameBall); void ArrowsChangeColorLastBallCycle(bool32 showArrows); void UpdateAbilityPopup(u8 battlerId); +void CategoryIcons_LoadSpritesGfx(void); #endif // GUARD_BATTLE_INTERFACE_H diff --git a/include/battle_main.h b/include/battle_main.h index f75fa960f9..da7fcaab84 100644 --- a/include/battle_main.h +++ b/include/battle_main.h @@ -78,6 +78,7 @@ extern const struct SpriteTemplate gUnusedBattleInitSprite; extern const struct OamData gOamData_BattleSpriteOpponentSide; extern const struct OamData gOamData_BattleSpritePlayerSide; extern const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES]; +extern const uq4_12_t gTypeEffectivenessTable[NUMBER_OF_MON_TYPES][NUMBER_OF_MON_TYPES]; extern const u8 gStatusConditionString_PoisonJpn[8]; extern const u8 gStatusConditionString_SleepJpn[8]; diff --git a/include/battle_util.h b/include/battle_util.h index a64269082f..7861966a7b 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -66,6 +66,10 @@ enum { #define IS_WHOLE_SIDE_ALIVE(battler) ((IsBattlerAlive(battler) && IsBattlerAlive(BATTLE_PARTNER(battler)))) #define IS_ALIVE_AND_PRESENT(battler) (IsBattlerAlive(battler) && IsBattlerSpritePresent(battler)) +// Lowest and highest percentages used for damage roll calculations +#define DMG_ROLL_PERCENT_LO 85 +#define DMG_ROLL_PERCENT_HI 100 + // for Natural Gift and Fling struct TypePower { diff --git a/include/config/battle.h b/include/config/battle.h index 1a272f358f..c072cb7993 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -43,7 +43,7 @@ #define B_GHOSTS_ESCAPE GEN_LATEST // In Gen6+, abilities like Shadow Tag or moves like Mean Look fail on Ghost-type Pokémon. They can also escape any Wild Battle. #define B_PARALYZE_ELECTRIC GEN_LATEST // In Gen6+, Electric-type Pokémon can't be paralyzed. #define B_POWDER_GRASS GEN_LATEST // In Gen6+, Grass-type Pokémon are immune to powder and spore moves. -#define B_UPDATED_TYPE_MATCHUPS GEN_LATEST // Updates Type matchups. Refer to sTypeEffectivenessTable for details. +#define B_UPDATED_TYPE_MATCHUPS GEN_LATEST // Updates Type matchups. src/data/types_info.h for details. #define B_PRANKSTER_DARK_TYPES GEN_LATEST // In Gen7+, Prankster-elevated status moves do not affect Dark type Pokémon. #define B_SHEER_COLD_IMMUNITY GEN_LATEST // In Gen7+, Ice-types are immune to Sheer Cold #define B_ROOST_PURE_FLYING GEN_LATEST // In Gen5+, Roost makes pure Flying-types into Normal-type. diff --git a/include/constants/battle.h b/include/constants/battle.h index f195ea7e8c..1f11adbd5f 100644 --- a/include/constants/battle.h +++ b/include/constants/battle.h @@ -477,6 +477,7 @@ #define B_WIN_VS_OUTCOME_DRAW 21 #define B_WIN_VS_OUTCOME_LEFT 22 #define B_WIN_VS_OUTCOME_RIGHT 23 +#define B_WIN_MOVE_DESCRIPTION 24 // The following are duplicate id values for windows that Battle Arena uses differently. #define ARENA_WIN_PLAYER_NAME 15 diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h index 7228954f21..3435537681 100644 --- a/include/constants/battle_script_commands.h +++ b/include/constants/battle_script_commands.h @@ -118,125 +118,123 @@ #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_INVERT_STAT_STAGES 42 -#define VARIOUS_TRY_ME_FIRST 43 -#define VARIOUS_JUMP_IF_BATTLE_END 44 -#define VARIOUS_TRY_ELECTRIFY 45 -#define VARIOUS_TRY_REFLECT_TYPE 46 -#define VARIOUS_TRY_SOAK 47 -#define VARIOUS_HANDLE_MEGA_EVO 48 -#define VARIOUS_TRY_LAST_RESORT 49 -#define VARIOUS_SET_ARG_TO_BATTLE_DAMAGE 50 -#define VARIOUS_TRY_HIT_SWITCH_TARGET 51 -#define VARIOUS_TRY_AUTOTOMIZE 52 -#define VARIOUS_ABILITY_POPUP 53 -#define VARIOUS_JUMP_IF_TARGET_ALLY 54 -#define VARIOUS_TRY_SYNCHRONOISE 55 -#define VARIOUS_PSYCHO_SHIFT 56 -#define VARIOUS_CURE_STATUS 57 -#define VARIOUS_POWER_TRICK 58 -#define VARIOUS_AFTER_YOU 59 -#define VARIOUS_BESTOW 60 -#define VARIOUS_JUMP_IF_NOT_GROUNDED 61 -#define VARIOUS_HANDLE_TRAINER_SLIDE_MSG 62 -#define VARIOUS_TRY_TRAINER_SLIDE_MSG_FIRST_OFF 63 -#define VARIOUS_TRY_TRAINER_SLIDE_MSG_LAST_ON 64 -#define VARIOUS_SET_AURORA_VEIL 65 -#define VARIOUS_TRY_THIRD_TYPE 66 -#define VARIOUS_ACUPRESSURE 67 -#define VARIOUS_SET_POWDER 68 -#define VARIOUS_SPECTRAL_THIEF 69 -#define VARIOUS_GRAVITY_ON_AIRBORNE_MONS 70 -#define VARIOUS_CHECK_IF_GRASSY_TERRAIN_HEALS 71 -#define VARIOUS_JUMP_IF_ROAR_FAILS 72 -#define VARIOUS_TRY_INSTRUCT 73 -#define VARIOUS_JUMP_IF_NOT_BERRY 74 -#define VARIOUS_TRACE_ABILITY 75 -#define VARIOUS_UPDATE_NICK 76 -#define VARIOUS_TRY_ILLUSION_OFF 77 -#define VARIOUS_SET_SPRITEIGNORE0HP 78 -#define VARIOUS_HANDLE_FORM_CHANGE 79 -#define VARIOUS_GET_STAT_VALUE 80 -#define VARIOUS_JUMP_IF_FULL_HP 81 -#define VARIOUS_LOSE_TYPE 82 -#define VARIOUS_TRY_ACTIVATE_SOULHEART 83 -#define VARIOUS_TRY_ACTIVATE_RECEIVER 84 -#define VARIOUS_TRY_ACTIVATE_BEAST_BOOST 85 -#define VARIOUS_TRY_FRISK 86 -#define VARIOUS_JUMP_IF_SHIELDS_DOWN_PROTECTED 87 -#define VARIOUS_TRY_FAIRY_LOCK 88 -#define VARIOUS_JUMP_IF_NO_ALLY 89 -#define VARIOUS_POISON_TYPE_IMMUNITY 90 -#define VARIOUS_JUMP_IF_HOLD_EFFECT 91 -#define VARIOUS_INFATUATE_WITH_BATTLER 92 -#define VARIOUS_SET_LAST_USED_ITEM 93 -#define VARIOUS_PARALYZE_TYPE_IMMUNITY 94 -#define VARIOUS_JUMP_IF_ABSENT 95 -#define VARIOUS_DESTROY_ABILITY_POPUP 96 -#define VARIOUS_TOTEM_BOOST 97 -#define VARIOUS_TRY_ACTIVATE_GRIM_NEIGH 98 -#define VARIOUS_MOVEEND_ITEM_EFFECTS 99 -#define VARIOUS_TERRAIN_SEED 100 -#define VARIOUS_MAKE_INVISIBLE 101 -#define VARIOUS_ROOM_SERVICE 102 -#define VARIOUS_EERIE_SPELL_PP_REDUCE 103 -#define VARIOUS_JUMP_IF_TEAM_HEALTHY 104 -#define VARIOUS_TRY_HEAL_QUARTER_HP 105 -#define VARIOUS_REMOVE_TERRAIN 106 -#define VARIOUS_JUMP_IF_PRANKSTER_BLOCKED 107 -#define VARIOUS_TRY_TO_CLEAR_PRIMAL_WEATHER 108 -#define VARIOUS_GET_ROTOTILLER_TARGETS 109 -#define VARIOUS_JUMP_IF_NOT_ROTOTILLER_AFFECTED 110 -#define VARIOUS_TRY_ACTIVATE_BATTLE_BOND 111 -#define VARIOUS_CONSUME_BERRY 112 -#define VARIOUS_JUMP_IF_CANT_REVERT_TO_PRIMAL 113 -#define VARIOUS_JUMP_IF_SPECIES 114 -#define VARIOUS_UPDATE_ABILITY_POPUP 115 -#define VARIOUS_JUMP_IF_WEATHER_AFFECTED 116 -#define VARIOUS_JUMP_IF_LEAF_GUARD_PROTECTED 117 -#define VARIOUS_SET_ATTACKER_STICKY_WEB_USER 118 -#define VARIOUS_SHELL_SIDE_ARM_CHECK 119 -#define VARIOUS_TRY_NO_RETREAT 120 -#define VARIOUS_TRY_TAR_SHOT 121 -#define VARIOUS_CAN_TAR_SHOT_WORK 122 -#define VARIOUS_CHECK_POLTERGEIST 123 -#define VARIOUS_CUT_1_3_HP_RAISE_STATS 124 -#define VARIOUS_TRY_END_NEUTRALIZING_GAS 125 -#define VARIOUS_JUMP_IF_UNDER_200 126 -#define VARIOUS_SET_SKY_DROP 127 -#define VARIOUS_CLEAR_SKY_DROP 128 -#define VARIOUS_SKY_DROP_YAWN 129 -#define VARIOUS_CURE_CERTAIN_STATUSES 130 -#define VARIOUS_TRY_RESET_NEGATIVE_STAT_STAGES 131 -#define VARIOUS_JUMP_IF_LAST_USED_ITEM_BERRY 132 -#define VARIOUS_JUMP_IF_LAST_USED_ITEM_HOLD_EFFECT 133 -#define VARIOUS_SAVE_BATTLER_ITEM 134 -#define VARIOUS_RESTORE_BATTLER_ITEM 135 -#define VARIOUS_BATTLER_ITEM_TO_LAST_USED_ITEM 136 -#define VARIOUS_SET_BEAK_BLAST 137 -#define VARIOUS_SWAP_SIDE_STATUSES 138 -#define VARIOUS_SWAP_STATS 139 -#define VARIOUS_TEATIME_INVUL 140 -#define VARIOUS_TEATIME_TARGETS 141 -#define VARIOUS_TRY_WIND_RIDER_POWER 142 -#define VARIOUS_ACTIVATE_WEATHER_CHANGE_ABILITIES 143 -#define VARIOUS_ACTIVATE_TERRAIN_CHANGE_ABILITIES 144 -#define VARIOUS_STORE_HEALING_WISH 145 -#define VARIOUS_HIT_SWITCH_TARGET_FAILED 146 -#define VARIOUS_TRY_REVIVAL_BLESSING 147 +#define VARIOUS_INSTANT_HP_DROP 29 +#define VARIOUS_CLEAR_STATUS 30 +#define VARIOUS_RESTORE_PP 31 +#define VARIOUS_TRY_ACTIVATE_MOXIE 32 +#define VARIOUS_TRY_ACTIVATE_FELL_STINGER 33 +#define VARIOUS_PLAY_MOVE_ANIMATION 34 +#define VARIOUS_SET_LUCKY_CHANT 35 +#define VARIOUS_SUCKER_PUNCH_CHECK 36 +#define VARIOUS_SET_SIMPLE_BEAM 37 +#define VARIOUS_TRY_ENTRAINMENT 38 +#define VARIOUS_SET_LAST_USED_ABILITY 39 +#define VARIOUS_INVERT_STAT_STAGES 40 +#define VARIOUS_TRY_ME_FIRST 41 +#define VARIOUS_JUMP_IF_BATTLE_END 42 +#define VARIOUS_TRY_ELECTRIFY 43 +#define VARIOUS_TRY_REFLECT_TYPE 44 +#define VARIOUS_TRY_SOAK 45 +#define VARIOUS_HANDLE_MEGA_EVO 46 +#define VARIOUS_TRY_LAST_RESORT 47 +#define VARIOUS_SET_ARG_TO_BATTLE_DAMAGE 48 +#define VARIOUS_TRY_HIT_SWITCH_TARGET 49 +#define VARIOUS_TRY_AUTOTOMIZE 50 +#define VARIOUS_ABILITY_POPUP 51 +#define VARIOUS_JUMP_IF_TARGET_ALLY 52 +#define VARIOUS_TRY_SYNCHRONOISE 53 +#define VARIOUS_PSYCHO_SHIFT 54 +#define VARIOUS_CURE_STATUS 55 +#define VARIOUS_POWER_TRICK 56 +#define VARIOUS_AFTER_YOU 57 +#define VARIOUS_BESTOW 58 +#define VARIOUS_JUMP_IF_NOT_GROUNDED 59 +#define VARIOUS_HANDLE_TRAINER_SLIDE_MSG 60 +#define VARIOUS_TRY_TRAINER_SLIDE_MSG_FIRST_OFF 61 +#define VARIOUS_TRY_TRAINER_SLIDE_MSG_LAST_ON 62 +#define VARIOUS_SET_AURORA_VEIL 63 +#define VARIOUS_TRY_THIRD_TYPE 64 +#define VARIOUS_ACUPRESSURE 65 +#define VARIOUS_SET_POWDER 66 +#define VARIOUS_SPECTRAL_THIEF 67 +#define VARIOUS_GRAVITY_ON_AIRBORNE_MONS 68 +#define VARIOUS_CHECK_IF_GRASSY_TERRAIN_HEALS 69 +#define VARIOUS_JUMP_IF_ROAR_FAILS 70 +#define VARIOUS_TRY_INSTRUCT 71 +#define VARIOUS_JUMP_IF_NOT_BERRY 72 +#define VARIOUS_TRACE_ABILITY 73 +#define VARIOUS_UPDATE_NICK 74 +#define VARIOUS_TRY_ILLUSION_OFF 75 +#define VARIOUS_SET_SPRITEIGNORE0HP 76 +#define VARIOUS_HANDLE_FORM_CHANGE 77 +#define VARIOUS_GET_STAT_VALUE 78 +#define VARIOUS_JUMP_IF_FULL_HP 79 +#define VARIOUS_LOSE_TYPE 80 +#define VARIOUS_TRY_ACTIVATE_SOULHEART 81 +#define VARIOUS_TRY_ACTIVATE_RECEIVER 82 +#define VARIOUS_TRY_ACTIVATE_BEAST_BOOST 83 +#define VARIOUS_TRY_FRISK 84 +#define VARIOUS_JUMP_IF_SHIELDS_DOWN_PROTECTED 85 +#define VARIOUS_TRY_FAIRY_LOCK 86 +#define VARIOUS_JUMP_IF_NO_ALLY 87 +#define VARIOUS_POISON_TYPE_IMMUNITY 88 +#define VARIOUS_JUMP_IF_HOLD_EFFECT 89 +#define VARIOUS_INFATUATE_WITH_BATTLER 90 +#define VARIOUS_SET_LAST_USED_ITEM 91 +#define VARIOUS_PARALYZE_TYPE_IMMUNITY 92 +#define VARIOUS_JUMP_IF_ABSENT 93 +#define VARIOUS_DESTROY_ABILITY_POPUP 94 +#define VARIOUS_TOTEM_BOOST 95 +#define VARIOUS_TRY_ACTIVATE_GRIM_NEIGH 96 +#define VARIOUS_MOVEEND_ITEM_EFFECTS 97 +#define VARIOUS_TERRAIN_SEED 98 +#define VARIOUS_MAKE_INVISIBLE 99 +#define VARIOUS_ROOM_SERVICE 100 +#define VARIOUS_EERIE_SPELL_PP_REDUCE 101 +#define VARIOUS_JUMP_IF_TEAM_HEALTHY 102 +#define VARIOUS_TRY_HEAL_QUARTER_HP 103 +#define VARIOUS_REMOVE_TERRAIN 104 +#define VARIOUS_JUMP_IF_PRANKSTER_BLOCKED 105 +#define VARIOUS_TRY_TO_CLEAR_PRIMAL_WEATHER 106 +#define VARIOUS_GET_ROTOTILLER_TARGETS 107 +#define VARIOUS_JUMP_IF_NOT_ROTOTILLER_AFFECTED 108 +#define VARIOUS_TRY_ACTIVATE_BATTLE_BOND 109 +#define VARIOUS_CONSUME_BERRY 110 +#define VARIOUS_JUMP_IF_CANT_REVERT_TO_PRIMAL 111 +#define VARIOUS_JUMP_IF_SPECIES 112 +#define VARIOUS_UPDATE_ABILITY_POPUP 113 +#define VARIOUS_JUMP_IF_WEATHER_AFFECTED 114 +#define VARIOUS_JUMP_IF_LEAF_GUARD_PROTECTED 115 +#define VARIOUS_SET_ATTACKER_STICKY_WEB_USER 116 +#define VARIOUS_SHELL_SIDE_ARM_CHECK 117 +#define VARIOUS_TRY_NO_RETREAT 118 +#define VARIOUS_TRY_TAR_SHOT 119 +#define VARIOUS_CAN_TAR_SHOT_WORK 120 +#define VARIOUS_CHECK_POLTERGEIST 121 +#define VARIOUS_CUT_1_3_HP_RAISE_STATS 122 +#define VARIOUS_TRY_END_NEUTRALIZING_GAS 123 +#define VARIOUS_JUMP_IF_UNDER_200 124 +#define VARIOUS_SET_SKY_DROP 125 +#define VARIOUS_CLEAR_SKY_DROP 126 +#define VARIOUS_SKY_DROP_YAWN 127 +#define VARIOUS_CURE_CERTAIN_STATUSES 128 +#define VARIOUS_TRY_RESET_NEGATIVE_STAT_STAGES 129 +#define VARIOUS_JUMP_IF_LAST_USED_ITEM_BERRY 130 +#define VARIOUS_JUMP_IF_LAST_USED_ITEM_HOLD_EFFECT 131 +#define VARIOUS_SAVE_BATTLER_ITEM 132 +#define VARIOUS_RESTORE_BATTLER_ITEM 133 +#define VARIOUS_BATTLER_ITEM_TO_LAST_USED_ITEM 134 +#define VARIOUS_SET_BEAK_BLAST 135 +#define VARIOUS_SWAP_SIDE_STATUSES 136 +#define VARIOUS_SWAP_STATS 137 +#define VARIOUS_TEATIME_INVUL 138 +#define VARIOUS_TEATIME_TARGETS 139 +#define VARIOUS_TRY_WIND_RIDER_POWER 140 +#define VARIOUS_ACTIVATE_WEATHER_CHANGE_ABILITIES 141 +#define VARIOUS_ACTIVATE_TERRAIN_CHANGE_ABILITIES 142 +#define VARIOUS_STORE_HEALING_WISH 143 +#define VARIOUS_HIT_SWITCH_TARGET_FAILED 144 +#define VARIOUS_TRY_REVIVAL_BLESSING 145 // Cmd_manipulatedamage #define DMG_CHANGE_SIGN 0 diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h index 4bc1bd348e..6d50fac4df 100644 --- a/include/constants/pokemon.h +++ b/include/constants/pokemon.h @@ -2,28 +2,28 @@ #define GUARD_CONSTANTS_POKEMON_H // Pokémon types -#define TYPE_NONE 255 -#define TYPE_NORMAL 0 -#define TYPE_FIGHTING 1 -#define TYPE_FLYING 2 -#define TYPE_POISON 3 -#define TYPE_GROUND 4 -#define TYPE_ROCK 5 -#define TYPE_BUG 6 -#define TYPE_GHOST 7 -#define TYPE_STEEL 8 -#define TYPE_MYSTERY 9 -#define TYPE_FIRE 10 -#define TYPE_WATER 11 -#define TYPE_GRASS 12 -#define TYPE_ELECTRIC 13 -#define TYPE_PSYCHIC 14 -#define TYPE_ICE 15 -#define TYPE_DRAGON 16 -#define TYPE_DARK 17 -#define TYPE_FAIRY 18 -#define TYPE_STELLAR 19 -#define NUMBER_OF_MON_TYPES 20 +#define TYPE_NONE 0 +#define TYPE_NORMAL 1 +#define TYPE_FIGHTING 2 +#define TYPE_FLYING 3 +#define TYPE_POISON 4 +#define TYPE_GROUND 5 +#define TYPE_ROCK 6 +#define TYPE_BUG 7 +#define TYPE_GHOST 8 +#define TYPE_STEEL 9 +#define TYPE_MYSTERY 10 +#define TYPE_FIRE 11 +#define TYPE_WATER 12 +#define TYPE_GRASS 13 +#define TYPE_ELECTRIC 14 +#define TYPE_PSYCHIC 15 +#define TYPE_ICE 16 +#define TYPE_DRAGON 17 +#define TYPE_DARK 18 +#define TYPE_FAIRY 19 +#define TYPE_STELLAR 20 +#define NUMBER_OF_MON_TYPES 21 // Pokémon egg groups #define EGG_GROUP_NONE 0 diff --git a/include/data.h b/include/data.h index f0efe1d0b3..ef803aa1bb 100644 --- a/include/data.h +++ b/include/data.h @@ -109,6 +109,9 @@ struct TypeInfo u8 palette; u16 zMove; u16 maxMove; + u16 teraTypeRGBValue; // Most values pulled from the Tera type icon palette. + u16 damageCategory:2; // Used for B_PHYSICAL_SPECIAL_SPLIT <= GEN_3 + u16 padding:14; const u32 *const paletteTMHM; //u16 enhanceItem; //u16 berry; diff --git a/include/graphics.h b/include/graphics.h index 488f9f5616..fc60c29ebf 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -1983,6 +1983,8 @@ extern const u32 gSummaryMoveSelect_Gfx[]; extern const u32 gSummaryMoveSelect_Pal[]; extern const u32 gStatusGfx_Icons[]; extern const u32 gStatusPal_Icons[]; +extern const u16 gCategoryIcons_Pal[]; +extern const u32 gCategoryIcons_Gfx[]; extern const u32 gShopMenu_Gfx[]; extern const u32 gShopMenu_Tilemap[]; diff --git a/include/pokemon.h b/include/pokemon.h index 0691c6f734..c7a59cb840 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -524,6 +524,7 @@ struct MoveInfo u32 parentalBondBanned:1; u32 skyBattleBanned:1; u32 sketchBanned:1; + u32 padding:5; // end of word u32 argument; @@ -535,6 +536,7 @@ struct MoveInfo u8 contestCategory:3; u8 contestComboStarterId; u8 contestComboMoves[MAX_COMBO_MOVES]; + const u8 *battleAnimScript; }; #define EFFECTS_ARR(...) (const struct AdditionalEffect[]) {__VA_ARGS__} @@ -873,5 +875,6 @@ u16 GetSpeciesPreEvolution(u16 species); void HealPokemon(struct Pokemon *mon); void HealBoxPokemon(struct BoxPokemon *boxMon); const u8 *GetMoveName(u16 moveId); +const u8 *GetMoveAnimationScript(u16 moveId); #endif // GUARD_POKEMON_H diff --git a/include/pokemon_summary_screen.h b/include/pokemon_summary_screen.h index 3a1f5c38ab..924702baf9 100755 --- a/include/pokemon_summary_screen.h +++ b/include/pokemon_summary_screen.h @@ -5,10 +5,12 @@ extern u8 gLastViewedMonIndex; -extern const u8 *const gMoveDescriptionPointers[]; extern const u8 gNotDoneYetDescription[]; extern const struct SpriteTemplate gSpriteTemplate_MoveTypes; extern const struct CompressedSpriteSheet gSpriteSheet_MoveTypes; +extern const struct CompressedSpriteSheet gSpriteSheet_CategoryIcons; +extern const struct SpritePalette gSpritePal_CategoryIcons; +extern const struct SpriteTemplate gSpriteTemplate_CategoryIcons; void ShowPokemonSummaryScreen(u8 mode, void *mons, u8 monIndex, u8 maxMonIndex, void (*callback)(void)); void ShowSelectMovePokemonSummaryScreen(struct Pokemon *mons, u8 monIndex, u8 maxMonIndex, void (*callback)(void), u16 newMove); diff --git a/include/test/battle.h b/include/test/battle.h index c4bd89f91b..95a67a4607 100644 --- a/include/test/battle.h +++ b/include/test/battle.h @@ -824,6 +824,12 @@ struct moveWithPP { #define SpAttack(spAttack) SpAttack_(__LINE__, spAttack) #define SpDefense(spDefense) SpDefense_(__LINE__, spDefense) #define Speed(speed) Speed_(__LINE__, speed) +#define HPIV(hpIV) HPIV_(__LINE__, hpIV) +#define AttackIV(attackIV) AttackIV_(__LINE__, attackIV) +#define DefenseIV(defenseIV) DefenseIV_(__LINE__, defenseIV) +#define SpAttackIV(spAttackIV) SpAttackIV_(__LINE__, spAttackIV) +#define SpDefenseIV(spDefenseIV) SpDefenseIV_(__LINE__, spDefenseIV) +#define SpeedIV(speedIV) SpeedIV_(__LINE__, speedIV) #define Item(item) Item_(__LINE__, item) #define Moves(move1, ...) do { u16 moves_[MAX_MON_MOVES] = {move1, __VA_ARGS__}; Moves_(__LINE__, moves_); } while(0) #define MovesWithPP(movewithpp1, ...) MovesWithPP_(__LINE__, (struct moveWithPP[MAX_MON_MOVES]) {movewithpp1, __VA_ARGS__}) @@ -854,6 +860,12 @@ void Defense_(u32 sourceLine, u32 defense); void SpAttack_(u32 sourceLine, u32 spAttack); void SpDefense_(u32 sourceLine, u32 spDefense); void Speed_(u32 sourceLine, u32 speed); +void HPIV_(u32 sourceLine, u32 hpIV); +void AttackIV_(u32 sourceLine, u32 attackIV); +void DefenseIV_(u32 sourceLine, u32 defenseIV); +void SpAttackIV_(u32 sourceLine, u32 spAttackIV); +void SpDefenseIV_(u32 sourceLine, u32 spDefenseIV); +void SpeedIV_(u32 sourceLine, u32 speedIV); void Item_(u32 sourceLine, u32 item); void Moves_(u32 sourceLine, u16 moves[MAX_MON_MOVES]); void MovesWithPP_(u32 sourceLine, struct moveWithPP moveWithPP[MAX_MON_MOVES]); diff --git a/include/test/test.h b/include/test/test.h index dbd547ba9f..5a543a52b9 100644 --- a/include/test/test.h +++ b/include/test/test.h @@ -75,7 +75,7 @@ void Test_ExpectedResult(enum TestResult); void Test_ExpectLeaks(bool32); void Test_ExitWithResult(enum TestResult, const char *fmt, ...); -s32 MgbaPrintf_(const char *fmt, ...); +s32 Test_MgbaPrintf(const char *fmt, ...); #define TEST(_name) \ static void CAT(Test, __LINE__)(void); \ @@ -193,7 +193,7 @@ static inline struct Benchmark BenchmarkStop(void) do \ { \ u32 a_ = (a).ticks; u32 b_ = (b).ticks; \ - MgbaPrintf_(#a ": %d ticks, " #b ": %d ticks", a_, b_); \ + Test_MgbaPrintf(#a ": %d ticks, " #b ": %d ticks", a_, b_); \ if (((a_ - BENCHMARK_ABS) * BENCHMARK_REL) >= (b_ * 100)) \ Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: EXPECT_FASTER(" #a ", " #b ") failed", gTestRunnerState.test->filename, __LINE__); \ } while (0) @@ -202,7 +202,7 @@ static inline struct Benchmark BenchmarkStop(void) do \ { \ u32 a_ = (a).ticks; u32 b_ = (b).ticks; \ - MgbaPrintf_(#a ": %d ticks, " #b ": %d ticks", a_, b_); \ + Test_MgbaPrintf(#a ": %d ticks, " #b ": %d ticks", a_, b_); \ if ((a_ * 100) <= ((b_ - BENCHMARK_ABS) * BENCHMARK_REL)) \ Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: EXPECT_SLOWER(" #a ", " #b ") failed", gTestRunnerState.test->filename, __LINE__); \ } while (0) @@ -215,7 +215,7 @@ static inline struct Benchmark BenchmarkStop(void) #define PARAMETRIZE if (gFunctionTestRunnerState->parameters++ == gFunctionTestRunnerState->runParameter) -#define PARAMETRIZE_LABEL(f, label) if (gFunctionTestRunnerState->parameters++ == gFunctionTestRunnerState->runParameter && (MgbaPrintf_(":N%s: " f " (%d/%d)", gTestRunnerState.test->name, label, gFunctionTestRunnerState->runParameter + 1, gFunctionTestRunnerState->parameters), 1)) +#define PARAMETRIZE_LABEL(f, label) if (gFunctionTestRunnerState->parameters++ == gFunctionTestRunnerState->runParameter && (Test_MgbaPrintf(":N%s: " f " (%d/%d)", gTestRunnerState.test->name, label, gFunctionTestRunnerState->runParameter + 1, gFunctionTestRunnerState->parameters), 1)) #define TO_DO \ do { \ diff --git a/migration_scripts/battle_anim_moves_refactor.py b/migration_scripts/battle_anim_moves_refactor.py new file mode 100644 index 0000000000..116d3964c0 --- /dev/null +++ b/migration_scripts/battle_anim_moves_refactor.py @@ -0,0 +1,63 @@ +import re + +def IsCommaMissing(line: str): + sanitized_line = line.removesuffix('\n').strip() + if sanitized_line.endswith('{') or sanitized_line.endswith('(') or sanitized_line.endswith(','): + return False + if not re.search(r'\.[A-Za-z0-9_]+', sanitized_line): + return False + return True + +input_file = open('./src/data/moves_info.h', 'r') +lines = input_file.readlines() +input_file.close() + + +battle_anim_lines = [] +moves_info_lines = [] + +move = None +bracketCount = 0 +for line in lines: + m = re.search(r'\[MOVE_([A-Za-z0-9_]+)\] =', line) + if m: + move = m.group(1) + bracketCount = 0 + battle_anim_lines.append('extern const u8 Move_' + move + '[];\n') + + if move and re.search(r'\{', line): + bracketCount = bracketCount + 1 + + if move and re.search(r'\}', line): + if (bracketCount == 1): + moves_info_lines.append(8 * ' ' + '.battleAnimScript = Move_' + move + ',\n') + move = None + bracketCount = bracketCount - 1 + + comment_split = line.split('//') + if move and IsCommaMissing(comment_split[0]): + line = comment_split[0].removesuffix('\n') + ',' + line[len(comment_split[0]):-1] + '\n' + + + moves_info_lines.append(line) + +output_file_mi = open('./src/data/moves_info.h', 'w') +output_file_mi.writelines(moves_info_lines) +output_file_mi.close() + +output_file_bas = open('./include/battle_anim_scripts.h', 'w') +output_file_bas.writelines('#ifndef GUARD_BATTLE_ANIM_SCRIPTS_H\n') +output_file_bas.writelines('#define GUARD_BATTLE_ANIM_SCRIPTS_H\n\n') +output_file_bas.writelines(battle_anim_lines) +output_file_bas.writelines('\n#endif // GUARD_BATTLE_ANIM_SCRIPTS_H\n') +output_file_bas.close() + +b_anim_scripts_s = open('./data/battle_anim_scripts.s', 'r') +lines = b_anim_scripts_s.read() +b_anim_scripts_s.close() + +lines = re.sub(r'(Move_[A-Za-z0-9_]*)([:]+)', r'\1::', lines) + +b_anim_scripts_s = open('./data/battle_anim_scripts.s', 'w') +b_anim_scripts_s.write(lines) +b_anim_scripts_s.close() diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index fda99dcafe..10ad41d1fc 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -464,7 +464,7 @@ static void SetBattlerAiMovesData(struct AiLogicData *aiData, u32 battlerAtk, u3 else if (AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_CONSERVATIVE) dmg = AI_CalcDamage(move, battlerAtk, battlerDef, &effectiveness, TRUE, weather, DMG_ROLL_LOWEST); else - dmg = AI_CalcDamage(move, battlerAtk, battlerDef, &effectiveness, TRUE, weather, DMG_ROLL_AVERAGE); + dmg = AI_CalcDamage(move, battlerAtk, battlerDef, &effectiveness, TRUE, weather, DMG_ROLL_DEFAULT); aiData->moveAccuracy[battlerAtk][battlerDef][i] = Ai_SetMoveAccuracy(aiData, battlerAtk, battlerDef, move); } aiData->simulatedDmg[battlerAtk][battlerDef][i] = dmg; @@ -834,7 +834,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) if (gMovesInfo[move].powderMove && !IsAffectedByPowder(battlerDef, aiData->abilities[battlerDef], aiData->holdEffects[battlerDef])) RETURN_SCORE_MINUS(10); - if (IsSemiInvulnerable(battlerDef, move) && moveEffect != EFFECT_SEMI_INVULNERABLE && AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) + if (IsSemiInvulnerable(battlerDef, move) && moveEffect != EFFECT_SEMI_INVULNERABLE && AI_IsFaster(battlerAtk, battlerDef, move)) RETURN_SCORE_MINUS(10); if (IsTwoTurnNotSemiInvulnerableMove(battlerAtk, move) && CanTargetFaintAi(battlerDef, battlerAtk)) @@ -1079,7 +1079,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) switch (moveEffect) { case EFFECT_HIT: // only applies to Vital Throw - if (gMovesInfo[move].priority < 0 && AI_STRIKES_FIRST(battlerAtk, battlerDef, move) && aiData->hpPercents[battlerAtk] < 40) + if (gMovesInfo[move].priority < 0 && AI_IsFaster(battlerAtk, battlerDef, move) && aiData->hpPercents[battlerAtk] < 40) ADJUST_SCORE(-2); // don't want to move last break; default: @@ -1434,8 +1434,9 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case EFFECT_MIRROR_COAT: if (IsBattlerIncapacitated(battlerDef, aiData->abilities[battlerDef]) || gBattleMons[battlerDef].status2 & (STATUS2_INFATUATION | STATUS2_CONFUSION)) ADJUST_SCORE(-1); - if (predictedMove == MOVE_NONE || GetBattleMoveCategory(predictedMove) == DAMAGE_CATEGORY_STATUS + if ((predictedMove == MOVE_NONE || GetBattleMoveCategory(predictedMove) == DAMAGE_CATEGORY_STATUS || DoesSubstituteBlockMove(battlerAtk, BATTLE_PARTNER(battlerDef), predictedMove)) + && !(predictedMove == MOVE_NONE && (AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_RISKY))) // Let Risky AI predict blindly based on stats ADJUST_SCORE(-10); break; @@ -1522,7 +1523,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) && (B_MENTAL_HERB < GEN_5 || aiData->holdEffects[battlerDef] != HOLD_EFFECT_MENTAL_HERB) && !PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove)) { - if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) // Attacker should go first + if (AI_IsFaster(battlerAtk, battlerDef, move)) // Attacker should go first { if (gLastMoves[battlerDef] == MOVE_NONE || gLastMoves[battlerDef] == 0xFFFF) ADJUST_SCORE(-10); // no anticipated move to disable @@ -1544,7 +1545,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) && (B_MENTAL_HERB < GEN_5 || aiData->holdEffects[battlerDef] != HOLD_EFFECT_MENTAL_HERB) && !DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) { - if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) // Attacker should go first + if (AI_IsFaster(battlerAtk, battlerDef, move)) // Attacker should go first { if (gLastMoves[battlerDef] == MOVE_NONE || gLastMoves[battlerDef] == 0xFFFF) ADJUST_SCORE(-10); // no anticipated move to encore @@ -1911,7 +1912,8 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) ADJUST_SCORE(-8); //No point in healing, but should at least do it if nothing better break; case EFFECT_RECOIL_IF_MISS: - if (aiData->abilities[battlerAtk] != ABILITY_MAGIC_GUARD && AI_DATA->moveAccuracy[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex] < 75) + if (aiData->abilities[battlerAtk] != ABILITY_MAGIC_GUARD && AI_DATA->moveAccuracy[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex] < 75 + && !(AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_RISKY)) ADJUST_SCORE(-6); break; case EFFECT_TRANSFORM: @@ -1921,7 +1923,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) break; case EFFECT_SPITE: case EFFECT_MIMIC: - if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) // Attacker should go first + if (AI_IsFaster(battlerAtk, battlerDef, move)) // Attacker should go first { if (gLastMoves[battlerDef] == MOVE_NONE || gLastMoves[battlerDef] == 0xFFFF) @@ -2066,7 +2068,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) if (isDoubleBattle) { if (IsHazardMoveEffect(gMovesInfo[aiData->partnerMove].effect) // partner is going to set up hazards - && AI_WhoStrikesFirst(BATTLE_PARTNER(battlerAtk), battlerAtk, aiData->partnerMove) == AI_IS_FASTER) // partner is going to set up before the potential Defog + && AI_IsFaster(BATTLE_PARTNER(battlerAtk), battlerAtk, aiData->partnerMove)) // partner is going to set up before the potential Defog { ADJUST_SCORE(-10); break; // Don't use Defog if partner is going to set up hazards @@ -2094,7 +2096,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) break; case EFFECT_SEMI_INVULNERABLE: if (predictedMove != MOVE_NONE - && AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER + && AI_IsSlower(battlerAtk, battlerDef, move) && gMovesInfo[predictedMove].effect == EFFECT_SEMI_INVULNERABLE) ADJUST_SCORE(-10); // Don't Fly/dig/etc if opponent is going to fly/dig/etc after you @@ -2278,7 +2280,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case EFFECT_ME_FIRST: if (predictedMove != MOVE_NONE) { - if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER) + if (AI_IsSlower(battlerAtk, battlerDef, move)) ADJUST_SCORE(-10); // Target is predicted to go first, Me First will fail else return AI_CheckBadMove(battlerAtk, battlerDef, predictedMove, score); @@ -2461,7 +2463,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) } break; case EFFECT_ELECTRIFY: - if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER + if (AI_IsSlower(battlerAtk, battlerDef, move) //|| GetMoveTypeSpecial(battlerDef, predictedMove) == TYPE_ELECTRIC // Move will already be electric type || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) ADJUST_SCORE(-10); @@ -2490,7 +2492,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case EFFECT_INSTRUCT: { u16 instructedMove; - if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER) + if (AI_IsSlower(battlerAtk, battlerDef, move)) instructedMove = predictedMove; else instructedMove = gLastMoves[battlerDef]; @@ -2529,21 +2531,21 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) break; case EFFECT_QUASH: if (!isDoubleBattle - || AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER + || AI_IsSlower(battlerAtk, battlerDef, move) || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) ADJUST_SCORE(-10); break; case EFFECT_AFTER_YOU: if (!IS_TARGETING_PARTNER(battlerAtk, battlerDef) || !isDoubleBattle - || AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER + || AI_IsSlower(battlerAtk, battlerDef, move) || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) ADJUST_SCORE(-10); break; case EFFECT_SUCKER_PUNCH: if (predictedMove != MOVE_NONE) { - if (IS_MOVE_STATUS(predictedMove) || AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER) // Opponent going first + if (IS_MOVE_STATUS(predictedMove) || AI_IsSlower(battlerAtk, battlerDef, move)) // Opponent going first ADJUST_SCORE(-10); } break; @@ -2585,8 +2587,8 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) ADJUST_SCORE(-1); break; case EFFECT_FLAIL: - if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER // Opponent should go first - || aiData->hpPercents[battlerAtk] > 50) + if (AI_IsSlower(battlerAtk, battlerDef, move) // Opponent should go first + || aiData->hpPercents[battlerAtk] > 50) ADJUST_SCORE(-4); break; //TODO @@ -2622,7 +2624,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) else if (CanAIFaintTarget(battlerAtk, battlerDef, 0)) ADJUST_SCORE(-10); else if (CanTargetFaintAi(battlerDef, battlerAtk) - && AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER) + && AI_IsSlower(battlerAtk, battlerDef, move)) ADJUST_SCORE(-10); break; case EFFECT_JUNGLE_HEALING: @@ -2650,7 +2652,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) ADJUST_SCORE(-10); break; case EFFECT_UPPER_HAND: - if (predictedMove == MOVE_NONE || IS_MOVE_STATUS(predictedMove) || AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER || GetMovePriority(battlerDef, move) < 1 || GetMovePriority(battlerDef, move) > 3) // Opponent going first or not using priority move + if (predictedMove == MOVE_NONE || IS_MOVE_STATUS(predictedMove) || AI_IsSlower(battlerAtk, battlerDef, move) || GetMovePriority(battlerDef, move) < 1 || GetMovePriority(battlerDef, move) > 3) // Opponent going first or not using priority move ADJUST_SCORE(-10); break; case EFFECT_PLACEHOLDER: @@ -2675,7 +2677,7 @@ static s32 AI_TryToFaint(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) if (CanIndexMoveFaintTarget(battlerAtk, battlerDef, movesetIndex, 0) && gMovesInfo[move].effect != EFFECT_EXPLOSION) { - if (AI_STRIKES_FIRST(battlerAtk, battlerDef, move)) + if (AI_IsFaster(battlerAtk, battlerDef, move)) ADJUST_SCORE(FAST_KILL); else ADJUST_SCORE(SLOW_KILL); @@ -2741,7 +2743,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) // Adjust for always crit moves if (gMovesInfo[aiData->partnerMove].alwaysCriticalHit && aiData->abilities[battlerAtk] == ABILITY_ANGER_POINT) { - if (AI_WhoStrikesFirst(battlerAtk, battlerAtkPartner, move) == AI_IS_SLOWER) // Partner moving first + if (AI_IsSlower(battlerAtk, battlerAtkPartner, move)) // Partner moving first { // discourage raising our attack since it's about to be maxed out if (IsAttackBoostMoveEffect(effect)) @@ -3021,7 +3023,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case EFFECT_INSTRUCT: { u16 instructedMove; - if (AI_WhoStrikesFirst(battlerAtk, battlerAtkPartner, move) == AI_IS_FASTER) + if (AI_IsFaster(battlerAtk, battlerAtkPartner, move)) instructedMove = aiData->partnerMove; else instructedMove = gLastMoves[battlerAtkPartner]; @@ -3035,8 +3037,8 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) } break; case EFFECT_AFTER_YOU: - if (AI_WhoStrikesFirst(battlerAtkPartner, FOE(battlerAtkPartner), aiData->partnerMove) == AI_IS_SLOWER // Opponent mon 1 goes before partner - || AI_WhoStrikesFirst(battlerAtkPartner, BATTLE_PARTNER(FOE(battlerAtkPartner)), aiData->partnerMove) == AI_IS_SLOWER) // Opponent mon 2 goes before partner + if (AI_IsSlower(battlerAtkPartner, FOE(battlerAtkPartner), aiData->partnerMove) // Opponent mon 1 goes before partner + || AI_IsSlower(battlerAtkPartner, BATTLE_PARTNER(FOE(battlerAtkPartner)), aiData->partnerMove)) // Opponent mon 2 goes before partner { if (gMovesInfo[aiData->partnerMove].effect == EFFECT_COUNTER || gMovesInfo[aiData->partnerMove].effect == EFFECT_MIRROR_COAT) break; // These moves need to go last @@ -3045,9 +3047,9 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) break; case EFFECT_HEAL_PULSE: case EFFECT_HIT_ENEMY_HEAL_ALLY: - if (AI_WhoStrikesFirst(battlerAtk, FOE(battlerAtk), move) == AI_IS_FASTER - && AI_WhoStrikesFirst(battlerAtk, BATTLE_PARTNER(FOE(battlerAtk)), move) == AI_IS_FASTER - && gBattleMons[battlerAtkPartner].hp < gBattleMons[battlerAtkPartner].maxHP / 2) + if (AI_IsFaster(battlerAtk, FOE(battlerAtk), move) + && AI_IsFaster(battlerAtk, BATTLE_PARTNER(FOE(battlerAtk)), move) + && gBattleMons[battlerAtkPartner].hp < gBattleMons[battlerAtkPartner].maxHP / 2) RETURN_SCORE_PLUS(WEAK_EFFECT); break; } // attacker move effects @@ -3154,7 +3156,7 @@ static s32 AI_CompareDamagingMoves(u32 battlerAtk, u32 battlerDef, u32 currId) isTwoTurnNotSemiInvulnerableMove[i] = FALSE; } /* - MgbaPrintf_("%S: required hits: %d Dmg: %d", gMoveNames[moves[i]], noOfHits[i], AI_DATA->simulatedDmg[battlerAtk][battlerDef][i]); + Test_MgbaPrintf("%S: required hits: %d Dmg: %d", gMoveNames[moves[i]], noOfHits[i], AI_DATA->simulatedDmg[battlerAtk][battlerDef][i]); */ } @@ -3341,7 +3343,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) break; case EFFECT_SPEED_DOWN: case EFFECT_SPEED_DOWN_2: - if (AI_STRIKES_FIRST(battlerAtk, battlerDef, move)) + if (AI_IsFaster(battlerAtk, battlerDef, move)) ADJUST_SCORE(-3); else if (!AI_RandLessThan(70)) ADJUST_SCORE(DECENT_EFFECT); @@ -3556,7 +3558,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) ADJUST_SCORE(WEAK_EFFECT); break; case EFFECT_MIMIC: - if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) + if (AI_IsFaster(battlerAtk, battlerDef, move)) { if (gLastMoves[battlerDef] != MOVE_NONE && gLastMoves[battlerDef] != 0xFFFF) return AI_CheckViability(battlerAtk, battlerDef, gLastMoves[battlerDef], score); @@ -3618,7 +3620,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) && (gLastMoves[battlerDef] != MOVE_NONE) && (gLastMoves[battlerDef] != 0xFFFF) && (B_MENTAL_HERB < GEN_5 || aiData->holdEffects[battlerDef] != HOLD_EFFECT_MENTAL_HERB) - && (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER)) + && (AI_IsFaster(battlerAtk, battlerDef, move))) { if (CanTargetMoveFaintAi(gLastMoves[battlerDef], battlerDef, battlerAtk, 1)) ADJUST_SCORE(GOOD_EFFECT); // Disable move that can kill attacker @@ -3646,7 +3648,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) case EFFECT_DESTINY_BOND: if (IsDynamaxed(battlerDef)) break; - else if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER && CanTargetFaintAi(battlerDef, battlerAtk)) + else if (AI_IsFaster(battlerAtk, battlerDef, move) && CanTargetFaintAi(battlerDef, battlerAtk)) ADJUST_SCORE(GOOD_EFFECT); break; case EFFECT_SPITE: @@ -3846,7 +3848,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) case EFFECT_SEMI_INVULNERABLE: if (predictedMove != MOVE_NONE && !isDoubleBattle) { - if ((AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) + if ((AI_IsFaster(battlerAtk, battlerDef, move)) && (gMovesInfo[predictedMove].effect == EFFECT_EXPLOSION || gMovesInfo[predictedMove].effect == EFFECT_PROTECT)) ADJUST_SCORE(GOOD_EFFECT); else if (gMovesInfo[predictedMove].effect == EFFECT_SEMI_INVULNERABLE && !(gStatuses3[battlerDef] & STATUS3_SEMI_INVULNERABLE)) @@ -3888,7 +3890,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) break; case EFFECT_ATTRACT: if (!isDoubleBattle - && (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER) + && (AI_IsSlower(battlerAtk, battlerDef, move)) && BattlerWillFaintFromSecondaryDamage(battlerDef, aiData->abilities[battlerDef])) break; // Don't use if the attract won't have a change to activate if (gBattleMons[battlerDef].status1 & STATUS1_ANY @@ -3922,7 +3924,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) if (isDoubleBattle) { if (IsHazardMoveEffect(gMovesInfo[aiData->partnerMove].effect) // Partner is going to set up hazards - && AI_WhoStrikesFirst(battlerAtk, BATTLE_PARTNER(battlerAtk), move) == AI_IS_SLOWER) // Partner going first + && AI_IsSlower(battlerAtk, BATTLE_PARTNER(battlerAtk), move)) // Partner going first break; // Don't use Defog if partner is going to set up hazards } if (ShouldLowerEvasion(battlerAtk, battlerDef, aiData->abilities[battlerDef])) @@ -4083,6 +4085,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) ADJUST_SCORE(WEAK_EFFECT); // Recycle healing berry if we can't otherwise faint the target and the target wont kill us after we activate the berry } break; + case EFFECT_RAGING_BULL: case EFFECT_BRICK_BREAK: if (gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_REFLECT) ADJUST_SCORE(DECENT_EFFECT); @@ -4348,7 +4351,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) ADJUST_SCORE(DECENT_EFFECT); break; case EFFECT_HEAL_BLOCK: - if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER && predictedMove != MOVE_NONE && IsHealingMove(predictedMove)) + if (AI_IsFaster(battlerAtk, battlerDef, move) && predictedMove != MOVE_NONE && IsHealingMove(predictedMove)) ADJUST_SCORE(DECENT_EFFECT); // Try to cancel healing move else if (HasHealingEffect(battlerDef) || aiData->holdEffects[battlerDef] == HOLD_EFFECT_LEFTOVERS || (aiData->holdEffects[battlerDef] == HOLD_EFFECT_BLACK_SLUDGE && IS_BATTLER_OF_TYPE(battlerDef, TYPE_POISON))) @@ -4380,7 +4383,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) ADJUST_SCORE(BEST_EFFECT); break; case EFFECT_QUASH: - if (isDoubleBattle && AI_WhoStrikesFirst(BATTLE_PARTNER(battlerAtk), battlerDef, aiData->partnerMove) == AI_IS_SLOWER) + if (isDoubleBattle && AI_IsSlower(BATTLE_PARTNER(battlerAtk), battlerDef, aiData->partnerMove)) ADJUST_SCORE(DECENT_EFFECT); // Attacker partner wouldn't go before target break; case EFFECT_TAILWIND: @@ -4395,7 +4398,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) if (IsBattlerGrounded(battlerAtk) && HasDamagingMoveOfType(battlerDef, TYPE_ELECTRIC) && !(AI_GetTypeEffectiveness(MOVE_EARTHQUAKE, battlerDef, battlerAtk) == AI_EFFECTIVENESS_x0)) // Doesn't resist ground move { - if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) // Attacker goes first + if (AI_IsFaster(battlerAtk, battlerDef, move)) // Attacker goes first { if (gMovesInfo[predictedMove].type == TYPE_GROUND) ADJUST_SCORE(GOOD_EFFECT); // Cause the enemy's move to fail @@ -4410,7 +4413,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) } break; case EFFECT_CAMOUFLAGE: - if (predictedMove != MOVE_NONE && AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER // Attacker goes first + if (predictedMove != MOVE_NONE && AI_IsFaster(battlerAtk, battlerDef, move) // Attacker goes first && !IS_MOVE_STATUS(move) && AI_GetTypeEffectiveness(predictedMove, battlerDef, battlerAtk) != AI_EFFECTIVENESS_x0) ADJUST_SCORE(DECENT_EFFECT); break; @@ -4446,7 +4449,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) } break; case EFFECT_ENDEAVOR: - if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER && !CanTargetFaintAi(battlerDef, battlerAtk)) + if (AI_IsSlower(battlerAtk, battlerDef, move) && !CanTargetFaintAi(battlerDef, battlerAtk)) ADJUST_SCORE(DECENT_EFFECT); break; case EFFECT_REVIVAL_BLESSING: @@ -4706,7 +4709,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) case MOVE_EFFECT_THROAT_CHOP: if (gMovesInfo[GetBestDmgMoveFromBattler(battlerDef, battlerAtk)].soundMove) { - if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) + if (AI_IsFaster(battlerAtk, battlerDef, move)) ADJUST_SCORE(GOOD_EFFECT); else ADJUST_SCORE(DECENT_EFFECT); @@ -4720,14 +4723,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) } } - if (score <= 1) - return NOT_GOOD_ENOUGH; - else if (score <= 3) - return GOOD_MOVE_EFFECTS; - else if (score <= 5) - return PREFERRED_MOVE_EFFECTS; - else - return BEST_MOVE_EFFECTS; + return score; } // AI_FLAG_CHECK_VIABILITY - Chooses best possible move to hit player @@ -4742,7 +4738,12 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score if (GetNoOfHitsToKOBattler(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex) == 0) ADJUST_SCORE(-20); else - score += AI_CompareDamagingMoves(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex); + { + if ((AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_RISKY) && GetBestDmgMoveFromBattler(battlerAtk, battlerDef) == move) + score += 1; + else + score += AI_CompareDamagingMoves(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex); + } } score += AI_CalcMoveEffectScore(battlerAtk, battlerDef, move); @@ -4759,7 +4760,7 @@ static s32 AI_SetupFirstTurn(u32 battlerAtk, u32 battlerDef, u32 move, s32 score return score; if (AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_SMART_SWITCHING - && AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER + && AI_IsSlower(battlerAtk, battlerDef, move) && CanTargetFaintAi(battlerDef, battlerAtk) && GetMovePriority(battlerAtk, move) == 0) { @@ -4888,27 +4889,37 @@ static s32 AI_Risky(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) if (gMovesInfo[move].criticalHitStage > 0) ADJUST_SCORE(DECENT_EFFECT); + // +3 Score switch (gMovesInfo[move].effect) { - case EFFECT_SLEEP: - case EFFECT_EXPLOSION: - case EFFECT_MIRROR_MOVE: - case EFFECT_OHKO: - case EFFECT_CONFUSE: - case EFFECT_METRONOME: - case EFFECT_PSYWAVE: case EFFECT_COUNTER: - case EFFECT_DESTINY_BOND: - case EFFECT_SWAGGER: - case EFFECT_ATTRACT: - case EFFECT_PRESENT: - case EFFECT_BELLY_DRUM: + if (gSpeciesInfo[gBattleMons[battlerDef].species].baseAttack >= gSpeciesInfo[gBattleMons[battlerDef].species].baseSpAttack + 10) + ADJUST_SCORE(STRONG_RISKY_EFFECT); + break; case EFFECT_MIRROR_COAT: - case EFFECT_FOCUS_PUNCH: + if (gSpeciesInfo[gBattleMons[battlerDef].species].baseSpAttack >= gSpeciesInfo[gBattleMons[battlerDef].species].baseAttack + 10) + ADJUST_SCORE(STRONG_RISKY_EFFECT); + break; + case EFFECT_EXPLOSION: + ADJUST_SCORE(STRONG_RISKY_EFFECT); + break; + + // +2 Score case EFFECT_REVENGE: - case EFFECT_FILLET_AWAY: - if (Random() & 1) - ADJUST_SCORE(DECENT_EFFECT); + if (gSpeciesInfo[gBattleMons[battlerDef].species].baseSpeed >= gSpeciesInfo[gBattleMons[battlerAtk].species].baseSpeed + 10) + ADJUST_SCORE(AVERAGE_RISKY_EFFECT); + break; + case EFFECT_BELLY_DRUM: + if (gBattleMons[battlerAtk].hp >= gBattleMons[battlerAtk].maxHP * 90 / 100) + ADJUST_SCORE(AVERAGE_RISKY_EFFECT); + break; + case EFFECT_MAX_HP_50_RECOIL: + case EFFECT_MIND_BLOWN: + case EFFECT_SWAGGER: + case EFFECT_FLATTER: + case EFFECT_ATTRACT: + case EFFECT_OHKO: + ADJUST_SCORE(AVERAGE_RISKY_EFFECT); break; case EFFECT_HIT: { @@ -4920,7 +4931,7 @@ static s32 AI_Risky(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) { case MOVE_EFFECT_ALL_STATS_UP: if (Random() & 1) - ADJUST_SCORE(DECENT_EFFECT); + ADJUST_SCORE(AVERAGE_RISKY_EFFECT); break; default: break; diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index 2dac845c47..77552ccae9 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -29,6 +29,7 @@ static bool32 AiExpectsToFaintPlayer(u32 battler); static bool32 AI_ShouldHeal(u32 battler, u32 healAmount); static bool32 AI_OpponentCanFaintAiWithMod(u32 battler, u32 healAmount); static u32 GetSwitchinHazardsDamage(u32 battler, struct BattlePokemon *battleMon); +static bool32 CanAbilityTrapOpponent(u16 ability, u32 opponent); static void InitializeSwitchinCandidate(struct Pokemon *mon) { @@ -162,7 +163,7 @@ static bool32 HasBadOdds(u32 battler, bool32 emitResult) // Check if current mon can outspeed and KO in spite of bad matchup, and don't switch out if it can if(damageDealt > gBattleMons[opposingBattler].hp) { - if (AI_WhoStrikesFirst(battler, opposingBattler, aiBestMove) == AI_IS_FASTER) + if (AI_IsFaster(battler, opposingBattler, aiBestMove)) return FALSE; } @@ -414,6 +415,48 @@ static bool32 FindMonThatAbsorbsOpponentsMove(u32 battler, bool32 emitResult) return FALSE; } +static bool32 FindMonThatTrapsOpponent(u32 battler, bool32 emitResult) +{ + s32 firstId; + s32 lastId; + struct Pokemon *party; + s32 i; + u16 monAbility; + s32 opposingBattler = GetBattlerAtPosition(BATTLE_OPPOSITE(GetBattlerPosition(battler))); + + // Only use this if AI_FLAG_SMART_SWITCHING is set for the trainer + if (!(AI_THINKING_STRUCT->aiFlags[battler] & AI_FLAG_SMART_SWITCHING)) + return FALSE; + + // Check if current mon has an ability that traps opponent + if (CanAbilityTrapOpponent(gBattleMons[battler].ability, opposingBattler)) + return FALSE; + + // Check party for mon with ability that traps opponent + GetAIPartyIndexes(battler, &firstId, &lastId); + + if (GetBattlerSide(battler) == B_SIDE_PLAYER) + party = gPlayerParty; + else + party = gEnemyParty; + + for (i = firstId; i < lastId; i++) + { + monAbility = GetMonAbility(&party[i]); + if (CanAbilityTrapOpponent(monAbility, opposingBattler)) + { + if (i == AI_DATA->mostSuitableMonId[battler]) // If mon in slot i is the most suitable switchin candidate, then it's a trapper than wins 1v1 + { + gBattleStruct->AI_monToSwitchIntoId[battler] = i; + if (emitResult) + BtlController_EmitTwoReturnValues(battler, 1, B_ACTION_SWITCH, 0); + return TRUE; + } + } + } + return FALSE; +} + static bool32 ShouldSwitchIfGameStatePrompt(u32 battler, bool32 emitResult) { bool32 switchMon = FALSE; @@ -569,7 +612,7 @@ static bool32 ShouldSwitchIfGameStatePrompt(u32 battler, bool32 emitResult) && AnyStatIsRaised(battler)) switchMon = FALSE; if (AiExpectsToFaintPlayer(battler) - && !AI_STRIKES_FIRST(battler, opposingBattler, 0) + && AI_IsSlower(battler, opposingBattler, 0) && !AI_OpponentCanFaintAiWithMod(battler, 0)) switchMon = FALSE; } @@ -1017,6 +1060,8 @@ bool32 ShouldSwitch(u32 battler, bool32 emitResult) return TRUE; if (ShouldSwitchIfGameStatePrompt(battler, emitResult)) return TRUE; + if (FindMonThatTrapsOpponent(battler, emitResult)) + return TRUE; if (FindMonThatAbsorbsOpponentsMove(battler, emitResult)) return TRUE; @@ -1234,7 +1279,7 @@ static u32 GetBestMonDmg(struct Pokemon *party, int firstId, int lastId, u8 inva if (aiMove != MOVE_NONE && gMovesInfo[aiMove].power != 0) { aiMove = GetMonData(&party[i], MON_DATA_MOVE1 + j); - dmg = AI_CalcPartyMonDamage(aiMove, battler, opposingBattler, AI_DATA->switchinCandidate.battleMon, TRUE, DMG_ROLL_AVERAGE); + dmg = AI_CalcPartyMonDamage(aiMove, battler, opposingBattler, AI_DATA->switchinCandidate.battleMon, TRUE, DMG_ROLL_DEFAULT); if (bestDmg < dmg) { bestDmg = dmg; @@ -1691,6 +1736,25 @@ static s32 GetMaxDamagePlayerCouldDealToSwitchin(u32 battler, u32 opposingBattle return maxDamageTaken; } +static bool32 CanAbilityTrapOpponent(u16 ability, u32 opponent) +{ + if ((B_GHOSTS_ESCAPE >= GEN_6 && IS_BATTLER_OF_TYPE(opponent, TYPE_GHOST))) + return FALSE; + else if (ability == ABILITY_SHADOW_TAG) + { + if (B_SHADOW_TAG_ESCAPE >= GEN_4 && GetBattlerAbility(opponent) == ABILITY_SHADOW_TAG) // Check if ability exists in species + return FALSE; + else + return TRUE; + } + else if (ability == ABILITY_ARENA_TRAP && IsBattlerGrounded(opponent)) + return TRUE; + else if (ability == ABILITY_MAGNET_PULL && IS_BATTLER_OF_TYPE(opponent, TYPE_STEEL)) + return TRUE; + else + return FALSE; +} + // This function splits switching behaviour mid-battle from after a KO. // Mid battle, it integrates GetBestMonTypeMatchup (vanilla with modifications), GetBestMonDefensive (custom), and GetBestMonBatonPass (vanilla with modifications) // After a KO, integrates GetBestMonRevengeKiller (custom), GetBestMonTypeMatchup (vanilla with modifications), GetBestMonBatonPass (vanilla with modifications), and GetBestMonDmg (vanilla) @@ -1704,17 +1768,17 @@ static s32 GetMaxDamagePlayerCouldDealToSwitchin(u32 battler, u32 opposingBattle static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, u32 battler, u32 opposingBattler, u8 battlerIn1, u8 battlerIn2, bool32 isSwitchAfterKO) { int revengeKillerId = PARTY_SIZE, slowRevengeKillerId = PARTY_SIZE, fastThreatenId = PARTY_SIZE, slowThreatenId = PARTY_SIZE, damageMonId = PARTY_SIZE; - int batonPassId = PARTY_SIZE, typeMatchupId = PARTY_SIZE, typeMatchupEffectiveId = PARTY_SIZE, defensiveMonId = PARTY_SIZE, aceMonId = PARTY_SIZE; + int batonPassId = PARTY_SIZE, typeMatchupId = PARTY_SIZE, typeMatchupEffectiveId = PARTY_SIZE, defensiveMonId = PARTY_SIZE, aceMonId = PARTY_SIZE, trapperId = PARTY_SIZE; int i, j, aliveCount = 0, bits = 0; s32 defensiveMonHitKOThreshold = 3; // 3HKO threshold that candidate defensive mons must exceed - u32 aiMove, hitsToKO, hitsToKOThreshold, maxHitsToKO = 0; - s32 playerMonSpeed = gBattleMons[opposingBattler].speed, playerMonHP = gBattleMons[opposingBattler].hp, aiMonSpeed, maxDamageDealt = 0, damageDealt = 0; + u32 aiMove, hitsToKOAI, hitsToKOPlayer, hitsToKOAIThreshold, maxHitsToKO = 0; + s32 playerMonSpeed = gBattleMons[opposingBattler].speed, playerMonHP = gBattleMons[opposingBattler].hp, aiMonSpeed, aiMovePriority = 0, maxDamageDealt = 0, damageDealt = 0; u16 bestResist = UQ_4_12(1.0), bestResistEffective = UQ_4_12(1.0), typeMatchup; if (isSwitchAfterKO) - hitsToKOThreshold = 1; // After a KO, mons at minimum need to not be 1-shot, as they switch in for free + hitsToKOAIThreshold = 1; // After a KO, mons at minimum need to not be 1-shot, as they switch in for free else - hitsToKOThreshold = 2; // When switching in otherwise need to not be 2-shot, as they do not switch in for free + hitsToKOAIThreshold = 2; // When switching in otherwise need to not be 2-shot, as they do not switch in for free // Iterate through mons for (i = firstId; i < lastId; i++) @@ -1744,12 +1808,12 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, continue; // Get max number of hits for player to KO AI mon - hitsToKO = GetSwitchinHitsToKO(GetMaxDamagePlayerCouldDealToSwitchin(battler, opposingBattler, AI_DATA->switchinCandidate.battleMon), battler); + hitsToKOAI = GetSwitchinHitsToKO(GetMaxDamagePlayerCouldDealToSwitchin(battler, opposingBattler, AI_DATA->switchinCandidate.battleMon), battler); // Track max hits to KO and set GetBestMonDefensive if applicable - if(hitsToKO > maxHitsToKO) + if(hitsToKOAI > maxHitsToKO) { - maxHitsToKO = hitsToKO; + maxHitsToKO = hitsToKOAI; if(maxHitsToKO > defensiveMonHitKOThreshold) defensiveMonId = i; } @@ -1759,7 +1823,7 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, // Check that good type matchups gets at least two turns and set GetBestMonTypeMatchup if applicable if (typeMatchup < bestResist) { - if ((hitsToKO > hitsToKOThreshold && AI_DATA->switchinCandidate.battleMon.speed > playerMonSpeed) || hitsToKO > hitsToKOThreshold + 1) // Need to take an extra hit if slower + if ((hitsToKOAI > hitsToKOAIThreshold && AI_DATA->switchinCandidate.battleMon.speed > playerMonSpeed) || hitsToKOAI > hitsToKOAIThreshold + 1) // Need to take an extra hit if slower { bestResist = typeMatchup; typeMatchupId = i; @@ -1772,13 +1836,14 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, for (j = 0; j < MAX_MON_MOVES; j++) { aiMove = AI_DATA->switchinCandidate.battleMon.moves[j]; + aiMovePriority = gMovesInfo[aiMove].priority; // Only do damage calc if switching after KO, don't need it otherwise and saves ~0.02s per turn if (isSwitchAfterKO && aiMove != MOVE_NONE && gMovesInfo[aiMove].power != 0) - damageDealt = AI_CalcPartyMonDamage(aiMove, battler, opposingBattler, AI_DATA->switchinCandidate.battleMon, TRUE, DMG_ROLL_AVERAGE); + damageDealt = AI_CalcPartyMonDamage(aiMove, battler, opposingBattler, AI_DATA->switchinCandidate.battleMon, TRUE, DMG_ROLL_DEFAULT); // Check for Baton Pass; hitsToKO requirements mean mon can boost and BP without dying whether it's slower or not - if (aiMove == MOVE_BATON_PASS && ((hitsToKO > hitsToKOThreshold + 1 && AI_DATA->switchinCandidate.battleMon.speed < playerMonSpeed) || (hitsToKO > hitsToKOThreshold && AI_DATA->switchinCandidate.battleMon.speed > playerMonSpeed))) + if (aiMove == MOVE_BATON_PASS && ((hitsToKOAI > hitsToKOAIThreshold + 1 && AI_DATA->switchinCandidate.battleMon.speed < playerMonSpeed) || (hitsToKOAI > hitsToKOAIThreshold && AI_DATA->switchinCandidate.battleMon.speed > playerMonSpeed))) bits |= gBitTable[i]; // Check for mon with resistance and super effective move for GetBestMonTypeMatchup @@ -1789,7 +1854,7 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, if (AI_GetTypeEffectiveness(aiMove, battler, opposingBattler) >= UQ_4_12(2.0)) { // Assuming a super effective move would do significant damage or scare the player out, so not being as conservative here - if (hitsToKO > hitsToKOThreshold) + if (hitsToKOAI > hitsToKOAIThreshold) { bestResistEffective = typeMatchup; typeMatchupEffectiveId = i; @@ -1804,7 +1869,7 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, // Check that mon isn't one shot and set GetBestMonDmg if applicable if (damageDealt > maxDamageDealt) { - if(hitsToKO > hitsToKOThreshold) + if(hitsToKOAI > hitsToKOAIThreshold) { maxDamageDealt = damageDealt; damageMonId = i; @@ -1816,7 +1881,7 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, if (damageDealt > playerMonHP) { // If AI mon is faster and doesn't die to hazards - if ((aiMonSpeed > playerMonSpeed || gMovesInfo[aiMove].priority > 0) && AI_DATA->switchinCandidate.battleMon.hp > GetSwitchinHazardsDamage(battler, &AI_DATA->switchinCandidate.battleMon)) + if ((aiMonSpeed > playerMonSpeed || aiMovePriority > 0) && AI_DATA->switchinCandidate.battleMon.hp > GetSwitchinHazardsDamage(battler, &AI_DATA->switchinCandidate.battleMon)) { // We have a revenge killer revengeKillerId = i; @@ -1826,7 +1891,7 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, else { // If AI mon can't be OHKO'd - if (hitsToKO > hitsToKOThreshold) + if (hitsToKOAI > hitsToKOAIThreshold) { // We have a slow revenge killer slowRevengeKillerId = i; @@ -1838,10 +1903,10 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, if (damageDealt > playerMonHP / 2) { // If AI mon is faster - if (aiMonSpeed > playerMonSpeed || gMovesInfo[aiMove].priority > 0) + if (aiMonSpeed > playerMonSpeed || aiMovePriority > 0) { // If AI mon can't be OHKO'd - if (hitsToKO > hitsToKOThreshold) + if (hitsToKOAI > hitsToKOAIThreshold) { // We have a fast threaten fastThreatenId = i; @@ -1851,13 +1916,25 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, else { // If AI mon can't be 2HKO'd - if (hitsToKO > hitsToKOThreshold + 1) + if (hitsToKOAI > hitsToKOAIThreshold + 1) { // We have a slow threaten slowThreatenId = i; } } } + + // If mon can trap + if (CanAbilityTrapOpponent(AI_DATA->switchinCandidate.battleMon.ability, opposingBattler)) + { + hitsToKOPlayer = GetNoOfHitsToKOBattlerDmg(damageDealt, opposingBattler); + if (CountUsablePartyMons(opposingBattler) > 0 + && (((hitsToKOAI > hitsToKOPlayer && isSwitchAfterKO) // If can 1v1 after a KO + || (hitsToKOAI == hitsToKOPlayer && isSwitchAfterKO && (aiMonSpeed > playerMonSpeed || aiMovePriority > 0))) + || ((hitsToKOAI > hitsToKOPlayer + 1 && !isSwitchAfterKO) // If can 1v1 after mid battle + || (hitsToKOAI == hitsToKOPlayer + 1 && !isSwitchAfterKO && (aiMonSpeed > playerMonSpeed || aiMovePriority > 0))))) + trapperId = i; + } } } } @@ -1867,43 +1944,37 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, // Different switching priorities depending on switching mid battle vs switching after a KO if (isSwitchAfterKO) { - // Return GetBestMonRevengeKiller > GetBestMonTypeMatchup > GetBestMonBatonPass > GetBestMonDmg - if (revengeKillerId != PARTY_SIZE) + // Return Trapper > GetBestMonRevengeKiller > GetBestMonTypeMatchup > GetBestMonBatonPass > GetBestMonDmg + if (trapperId != PARTY_SIZE) + return trapperId; + else if (revengeKillerId != PARTY_SIZE) return revengeKillerId; - else if (slowRevengeKillerId != PARTY_SIZE) return slowRevengeKillerId; - else if (fastThreatenId != PARTY_SIZE) return fastThreatenId; - else if (slowThreatenId != PARTY_SIZE) return slowThreatenId; - else if (typeMatchupEffectiveId != PARTY_SIZE) return typeMatchupEffectiveId; - else if (typeMatchupId != PARTY_SIZE) return typeMatchupId; - else if (batonPassId != PARTY_SIZE) return batonPassId; - else if (damageMonId != PARTY_SIZE) return damageMonId; } else { - // Return GetBestMonTypeMatchup > GetBestMonDefensive > GetBestMonBatonPass - if (typeMatchupEffectiveId != PARTY_SIZE) + // Return Trapper > GetBestMonTypeMatchup > GetBestMonDefensive > GetBestMonBatonPass + if (trapperId != PARTY_SIZE) + return trapperId; + else if (typeMatchupEffectiveId != PARTY_SIZE) return typeMatchupEffectiveId; - else if (typeMatchupId != PARTY_SIZE) return typeMatchupId; - else if (defensiveMonId != PARTY_SIZE) return defensiveMonId; - else if (batonPassId != PARTY_SIZE) return batonPassId; @@ -2019,7 +2090,7 @@ static bool32 AiExpectsToFaintPlayer(u32 battler) if (GetBattlerSide(target) != GetBattlerSide(battler) && CanIndexMoveFaintTarget(battler, target, gBattleStruct->aiMoveOrAction[battler], 0) - && AI_WhoStrikesFirst(battler, target, GetAIChosenMove(battler)) == AI_IS_FASTER) + && AI_IsFaster(battler, target, GetAIChosenMove(battler))) { // We expect to faint the target and move first -> dont use an item return TRUE; diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 6afc4b65ae..7efee7ae05 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -35,6 +35,16 @@ static u32 AI_GetEffectiveness(uq4_12_t multiplier); // Functions +bool32 AI_IsFaster(u32 battlerAi, u32 battlerDef, u32 move) +{ + return (AI_WhoStrikesFirst(battlerAi, battlerDef, move) == AI_IS_FASTER); +} + +bool32 AI_IsSlower(u32 battlerAi, u32 battlerDef, u32 move) +{ + return (AI_WhoStrikesFirst(battlerAi, battlerDef, move) == AI_IS_SLOWER); +} + u32 GetAIChosenMove(u32 battlerId) { return (gBattleMons[battlerId].moves[gBattleStruct->aiMoveOrAction[battlerId]]); @@ -311,7 +321,7 @@ bool32 IsTruantMonVulnerable(u32 battlerAI, u32 opposingBattler) u32 move = gBattleResources->battleHistory->usedMoves[opposingBattler][i]; if (gMovesInfo[move].effect == EFFECT_PROTECT && move != MOVE_ENDURE) return TRUE; - if (gMovesInfo[move].effect == EFFECT_SEMI_INVULNERABLE && AI_WhoStrikesFirst(battlerAI, opposingBattler, GetAIChosenMove(battlerAI)) == AI_IS_SLOWER) + if (gMovesInfo[move].effect == EFFECT_SEMI_INVULNERABLE && AI_IsSlower(battlerAI, opposingBattler, GetAIChosenMove(battlerAI))) return TRUE; } return FALSE; @@ -369,19 +379,21 @@ s32 AI_CalcDamageSaveBattlers(u32 move, u32 battlerAtk, u32 battlerDef, u8 *type static inline s32 LowestRollDmg(s32 dmg) { - dmg *= 100 - 15; + dmg *= MIN_ROLL_PERCENTAGE; dmg /= 100; return dmg; } static inline s32 HighestRollDmg(s32 dmg) { + dmg *= MAX_ROLL_PERCENTAGE; + dmg /= 100; return dmg; } -static inline s32 AverageRollDmg(s32 dmg) +static inline s32 DmgRoll(s32 dmg) { - dmg = ((HighestRollDmg(dmg) + LowestRollDmg(dmg)) * 100) / 2; + dmg *= DMG_ROLL_PERCENTAGE; dmg /= 100; return dmg; } @@ -466,6 +478,14 @@ bool32 IsDamageMoveUnusable(u32 move, u32 battlerAtk, u32 battlerDef) if (!(gFieldStatuses & STATUS_FIELD_TERRAIN_ANY) && gMovesInfo[move].argument == ARG_TRY_REMOVE_TERRAIN_FAIL) return TRUE; break; + case EFFECT_POLTERGEIST: + if (AI_DATA->items[battlerDef] == ITEM_NONE) + return TRUE; + break; + case EFFECT_FIRST_TURN_ONLY: + if (!gDisableStructs[battlerAtk].isFirstTurn) + return TRUE; + break; } return FALSE; @@ -546,8 +566,8 @@ s32 AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u8 *typeEffectivenes aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); u32 critChance = GetCritHitChance(critChanceIndex); // With critChance getting closer to 1, dmg gets closer to critDmg. - if (dmgRoll == DMG_ROLL_AVERAGE) - dmg = AverageRollDmg((critDmg + normalDmg * (critChance - 1)) / (critChance)); + if (dmgRoll == DMG_ROLL_DEFAULT) + dmg = DmgRoll((critDmg + normalDmg * (critChance - 1)) / (critChance)); else if (dmgRoll == DMG_ROLL_HIGHEST) dmg = HighestRollDmg((critDmg + normalDmg * (critChance - 1)) / (critChance)); else @@ -555,8 +575,8 @@ s32 AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u8 *typeEffectivenes } else { - if (dmgRoll == DMG_ROLL_AVERAGE) - dmg = AverageRollDmg(normalDmg); + if (dmgRoll == DMG_ROLL_DEFAULT) + dmg = DmgRoll(normalDmg); else if (dmgRoll == DMG_ROLL_HIGHEST) dmg = HighestRollDmg(normalDmg); else @@ -963,48 +983,21 @@ static u32 AI_GetEffectiveness(uq4_12_t multiplier) */ s32 AI_WhoStrikesFirst(u32 battlerAI, u32 battler2, u32 moveConsidered) { - u32 fasterAI = 0, fasterPlayer = 0, i; s8 prioAI = 0; s8 prioBattler2 = 0; - u16 *battler2Moves = GetMovesArray(battler2); - - // Check move priorities first. prioAI = GetMovePriority(battlerAI, moveConsidered); - for (i = 0; i < MAX_MON_MOVES; i++) - { - prioBattler2 = GetMovePriority(battler2, battler2Moves[i]); - if (battler2Moves[i] == MOVE_NONE || battler2Moves[i] == MOVE_UNAVAILABLE - || (prioBattler2 > prioAI && !CanIndexMoveFaintTarget(battler2, battlerAI, i , 2))) - continue; - if (prioAI > prioBattler2) - fasterAI++; - else if (prioBattler2 > prioAI) - fasterPlayer++; - } - - if (fasterAI > fasterPlayer) - { + if (prioAI > prioBattler2) + return AI_IS_FASTER; + + if (GetWhichBattlerFasterArgs(battlerAI, battler2, TRUE, + AI_DATA->abilities[battlerAI], AI_DATA->abilities[battler2], + AI_DATA->holdEffects[battlerAI], AI_DATA->holdEffects[battler2], + AI_DATA->speedStats[battlerAI], AI_DATA->speedStats[battler2], + prioAI, prioBattler2) == 1) return AI_IS_FASTER; - } - else if (fasterAI < fasterPlayer) - { - return AI_IS_SLOWER; - } else - { - if (prioAI > prioBattler2) - return AI_IS_FASTER; // if we didn't know any of battler 2's moves to compare priorities, assume they don't have a prio+ move - // Priorities are the same(at least comparing to moves the AI is aware of), decide by speed. - if (GetWhichBattlerFasterArgs(battlerAI, battler2, TRUE, - AI_DATA->abilities[battlerAI], AI_DATA->abilities[battler2], - AI_DATA->holdEffects[battlerAI], AI_DATA->holdEffects[battler2], - AI_DATA->speedStats[battlerAI], AI_DATA->speedStats[battler2], - prioAI, prioBattler2) == 1) - return AI_IS_FASTER; - else - return AI_IS_SLOWER; - } + return AI_IS_SLOWER; } // Check if target has means to faint ai mon. @@ -1612,7 +1605,7 @@ bool32 ShouldLowerStat(u32 battler, u32 battlerAbility, u32 stat) return !(battlerAbility == ABILITY_BIG_PECKS); case STAT_SPEED: // If AI is faster and doesn't have any mons left, lowering speed doesn't give any - return !(AI_WhoStrikesFirst(sBattler_AI, battler, AI_THINKING_STRUCT->moveConsidered) == AI_IS_FASTER + return !(AI_IsFaster(sBattler_AI, battler, AI_THINKING_STRUCT->moveConsidered) && CountUsablePartyMons(sBattler_AI) == 0 && !HasMoveEffect(sBattler_AI, EFFECT_ELECTRO_BALL)); case STAT_ACC: @@ -1681,7 +1674,7 @@ u32 CountNegativeStatStages(u32 battlerId) bool32 ShouldLowerAttack(u32 battlerAtk, u32 battlerDef, u32 defAbility) { - if (AI_STRIKES_FIRST(battlerAtk, battlerDef, AI_THINKING_STRUCT->moveConsidered) + if (AI_IsFaster(battlerAtk, battlerDef, AI_THINKING_STRUCT->moveConsidered) && (AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_TRY_TO_FAINT) && CanAIFaintTarget(battlerAtk, battlerDef, 0)) return FALSE; // Don't bother lowering stats if can kill enemy. @@ -1700,7 +1693,7 @@ bool32 ShouldLowerAttack(u32 battlerAtk, u32 battlerDef, u32 defAbility) bool32 ShouldLowerDefense(u32 battlerAtk, u32 battlerDef, u32 defAbility) { - if (AI_STRIKES_FIRST(battlerAtk, battlerDef, AI_THINKING_STRUCT->moveConsidered) + if (AI_IsFaster(battlerAtk, battlerDef, AI_THINKING_STRUCT->moveConsidered) && (AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_TRY_TO_FAINT) && CanAIFaintTarget(battlerAtk, battlerDef, 0)) return FALSE; // Don't bother lowering stats if can kill enemy. @@ -1719,24 +1712,19 @@ bool32 ShouldLowerDefense(u32 battlerAtk, u32 battlerDef, u32 defAbility) bool32 ShouldLowerSpeed(u32 battlerAtk, u32 battlerDef, u32 defAbility) { - if (AI_STRIKES_FIRST(battlerAtk, battlerDef, AI_THINKING_STRUCT->moveConsidered) - && (AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_TRY_TO_FAINT) - && CanAIFaintTarget(battlerAtk, battlerDef, 0)) - return FALSE; // Don't bother lowering stats if can kill enemy. + if (defAbility == ABILITY_CONTRARY + || defAbility == ABILITY_CLEAR_BODY + || defAbility == ABILITY_FULL_METAL_BODY + || defAbility == ABILITY_WHITE_SMOKE + || AI_DATA->holdEffects[battlerDef] == HOLD_EFFECT_CLEAR_AMULET) + return FALSE; - if (!AI_STRIKES_FIRST(battlerAtk, battlerDef, AI_THINKING_STRUCT->moveConsidered) - && defAbility != ABILITY_CONTRARY - && defAbility != ABILITY_CLEAR_BODY - && defAbility != ABILITY_FULL_METAL_BODY - && defAbility != ABILITY_WHITE_SMOKE - && AI_DATA->holdEffects[battlerDef] != HOLD_EFFECT_CLEAR_AMULET) - return TRUE; - return FALSE; + return (AI_IsSlower(battlerAtk, battlerDef, AI_THINKING_STRUCT->moveConsidered)); } bool32 ShouldLowerSpAtk(u32 battlerAtk, u32 battlerDef, u32 defAbility) { - if (AI_STRIKES_FIRST(battlerAtk, battlerDef, AI_THINKING_STRUCT->moveConsidered) + if (AI_IsFaster(battlerAtk, battlerDef, AI_THINKING_STRUCT->moveConsidered) && (AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_TRY_TO_FAINT) && CanAIFaintTarget(battlerAtk, battlerDef, 0)) return FALSE; // Don't bother lowering stats if can kill enemy. @@ -1754,7 +1742,7 @@ bool32 ShouldLowerSpAtk(u32 battlerAtk, u32 battlerDef, u32 defAbility) bool32 ShouldLowerSpDef(u32 battlerAtk, u32 battlerDef, u32 defAbility) { - if (AI_STRIKES_FIRST(battlerAtk, battlerDef, AI_THINKING_STRUCT->moveConsidered) + if (AI_IsFaster(battlerAtk, battlerDef, AI_THINKING_STRUCT->moveConsidered) && (AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_TRY_TO_FAINT) && CanAIFaintTarget(battlerAtk, battlerDef, 0)) return FALSE; // Don't bother lowering stats if can kill enemy. @@ -1772,7 +1760,7 @@ bool32 ShouldLowerSpDef(u32 battlerAtk, u32 battlerDef, u32 defAbility) bool32 ShouldLowerAccuracy(u32 battlerAtk, u32 battlerDef, u32 defAbility) { - if (AI_STRIKES_FIRST(battlerAtk, battlerDef, AI_THINKING_STRUCT->moveConsidered) + if (AI_IsFaster(battlerAtk, battlerDef, AI_THINKING_STRUCT->moveConsidered) && (AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_TRY_TO_FAINT) && CanAIFaintTarget(battlerAtk, battlerDef, 0)) return FALSE; // Don't bother lowering stats if can kill enemy. @@ -1791,7 +1779,7 @@ bool32 ShouldLowerAccuracy(u32 battlerAtk, u32 battlerDef, u32 defAbility) bool32 ShouldLowerEvasion(u32 battlerAtk, u32 battlerDef, u32 defAbility) { - if (AI_STRIKES_FIRST(battlerAtk, battlerDef, AI_THINKING_STRUCT->moveConsidered) + if (AI_IsFaster(battlerAtk, battlerDef, AI_THINKING_STRUCT->moveConsidered) && (AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_TRY_TO_FAINT) && CanAIFaintTarget(battlerAtk, battlerDef, 0)) return FALSE; // Don't bother lowering stats if can kill enemy. @@ -2512,7 +2500,7 @@ bool32 ShouldPivot(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 move, u32 /*if (IsPredictedToSwitch(battlerDef, battlerAtk) && !hasStatBoost) return PIVOT; // Try pivoting so you can switch to a better matchup to counter your new opponent*/ - if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) // Attacker goes first + if (AI_IsFaster(battlerAtk, battlerDef, move)) // Attacker goes first { if (!CanAIFaintTarget(battlerAtk, battlerDef, 0)) // Can't KO foe otherwise { @@ -2896,7 +2884,7 @@ u32 ShouldTryToFlinch(u32 battlerAtk, u32 battlerDef, u32 atkAbility, u32 defAbi if (((!IsMoldBreakerTypeAbility(AI_DATA->abilities[battlerAtk]) && (defAbility == ABILITY_SHIELD_DUST || defAbility == ABILITY_INNER_FOCUS)) || AI_DATA->holdEffects[battlerDef] == HOLD_EFFECT_COVERT_CLOAK || DoesSubstituteBlockMove(battlerAtk, battlerDef, move) - || AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER)) // Opponent goes first + || AI_IsSlower(battlerAtk, battlerDef, move))) // Opponent goes first { return 0; } @@ -2904,7 +2892,7 @@ u32 ShouldTryToFlinch(u32 battlerAtk, u32 battlerDef, u32 atkAbility, u32 defAbi || gBattleMons[battlerDef].status1 & STATUS1_PARALYSIS || gBattleMons[battlerDef].status2 & STATUS2_INFATUATION || gBattleMons[battlerDef].status2 & STATUS2_CONFUSION) - || ((AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) && CanTargetFaintAi(battlerDef, battlerAtk))) + || ((AI_IsFaster(battlerAtk, battlerDef, move)) && CanTargetFaintAi(battlerDef, battlerAtk))) { return 2; // good idea to flinch } @@ -3022,7 +3010,7 @@ bool32 ShouldUseRecoilMove(u32 battlerAtk, u32 battlerDef, u32 recoilDmg, u32 mo bool32 ShouldAbsorb(u32 battlerAtk, u32 battlerDef, u32 move, s32 damage) { - if (move == 0xFFFF || AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) + if (move == 0xFFFF || AI_IsFaster(battlerAtk, battlerDef, move)) { // using item or user goes first u32 healPercent = (gMovesInfo[move].argument == 0) ? 50 : gMovesInfo[move].argument; @@ -3049,7 +3037,7 @@ bool32 ShouldAbsorb(u32 battlerAtk, u32 battlerDef, u32 move, s32 damage) bool32 ShouldRecover(u32 battlerAtk, u32 battlerDef, u32 move, u32 healPercent) { - if (move == 0xFFFF || AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) + if (move == 0xFFFF || AI_IsFaster(battlerAtk, battlerDef, move)) { // using item or user going first s32 damage = AI_DATA->simulatedDmg[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex]; @@ -3070,7 +3058,9 @@ bool32 ShouldSetScreen(u32 battlerAtk, u32 battlerDef, u32 moveEffect) { u32 atkSide = GetBattlerSide(battlerAtk); - if (HasMoveEffect(battlerDef, EFFECT_BRICK_BREAK)) // Don't waste a turn if screens will be broken + // Don't waste a turn if screens will be broken + if (HasMoveEffect(battlerDef, EFFECT_BRICK_BREAK) + || HasMoveEffect(battlerDef, EFFECT_RAGING_BULL)) return FALSE; switch (moveEffect) @@ -3508,7 +3498,7 @@ bool32 IsRecycleEncouragedItem(u32 item) static void IncreaseStatUpScoreInternal(u32 battlerAtk, u32 battlerDef, u32 statId, s32 *score, bool32 considerContrary) { u32 noOfHitsToFaint = NoOfHitsForTargetToFaintAI(battlerDef, battlerAtk); - u32 aiIsFaster = GetWhichBattlerFaster(battlerAtk, battlerDef, TRUE) == AI_IS_FASTER; + u32 aiIsFaster = AI_IsFaster(battlerAtk, battlerDef, TRUE); u32 shouldSetUp = ((noOfHitsToFaint >= 2 && aiIsFaster) || (noOfHitsToFaint >= 3 && !aiIsFaster) || noOfHitsToFaint == UNKNOWN_NO_OF_HITS); if (considerContrary && AI_DATA->abilities[battlerAtk] == ABILITY_CONTRARY) @@ -3773,7 +3763,7 @@ bool32 ShouldUseZMove(u32 battlerAtk, u32 battlerDef, u32 chosenMove) else if (!IS_MOVE_STATUS(chosenMove) && IS_MOVE_STATUS(gBattleStruct->zmove.chosenZMove)) return FALSE; - if (!IS_MOVE_STATUS(chosenMove) && AI_CalcDamageSaveBattlers(chosenMove, battlerAtk, battlerDef, &effectiveness, FALSE, DMG_ROLL_AVERAGE) >= gBattleMons[battlerDef].hp) + if (!IS_MOVE_STATUS(chosenMove) && AI_CalcDamageSaveBattlers(chosenMove, battlerAtk, battlerDef, &effectiveness, FALSE, DMG_ROLL_DEFAULT) >= gBattleMons[battlerDef].hp) return FALSE; // don't waste damaging z move if can otherwise faint target return TRUE; @@ -3842,7 +3832,7 @@ void IncreaseTidyUpScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score) if (gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_HAZARDS_ANY && CountUsablePartyMons(battlerDef) != 0) ADJUST_SCORE_PTR(-2); - if (gBattleMons[battlerAtk].status2 & STATUS2_SUBSTITUTE && AI_STRIKES_FIRST(battlerAtk, battlerDef, move)) + if (gBattleMons[battlerAtk].status2 & STATUS2_SUBSTITUTE && AI_IsFaster(battlerAtk, battlerDef, move)) ADJUST_SCORE_PTR(-10); if (gBattleMons[battlerDef].status2 & STATUS2_SUBSTITUTE) ADJUST_SCORE_PTR(GOOD_EFFECT); @@ -3888,6 +3878,6 @@ bool32 AI_ShouldSpicyExtract(u32 battlerAtk, u32 battlerAtkPartner, u32 move, st } return (preventsStatLoss - && AI_STRIKES_FIRST(battlerAtk, battlerAtkPartner, TRUE) + && AI_IsFaster(battlerAtk, battlerAtkPartner, TRUE) && HasMoveWithCategory(battlerAtkPartner, DAMAGE_CATEGORY_PHYSICAL)); } diff --git a/src/battle_anim.c b/src/battle_anim.c index d944aac562..33691a2e95 100644 --- a/src/battle_anim.c +++ b/src/battle_anim.c @@ -30,7 +30,6 @@ extern const u16 gMovesWithQuietBGM[]; extern const u8 *const gBattleAnims_General[]; -extern const u8 *const gBattleAnims_Moves[]; extern const u8 *const gBattleAnims_Special[]; extern const u8 *const gBattleAnims_StatusConditions[]; @@ -234,7 +233,6 @@ static void Nop(void) void LaunchBattleAnimation(u32 animType, u32 animId) { s32 i; - const u8 *const *animsTable; if (gTestRunnerEnabled) { @@ -249,23 +247,6 @@ void LaunchBattleAnimation(u32 animType, u32 animId) } } - switch (animType) - { - case ANIM_TYPE_GENERAL: - default: - animsTable = gBattleAnims_General; - break; - case ANIM_TYPE_MOVE: - animsTable = gBattleAnims_Moves; - break; - case ANIM_TYPE_STATUS: - animsTable = gBattleAnims_StatusConditions; - break; - case ANIM_TYPE_SPECIAL: - animsTable = gBattleAnims_Special; - break; - } - sAnimHideHpBoxes = !(animType == ANIM_TYPE_MOVE && animId == MOVE_TRANSFORM); if (animType != ANIM_TYPE_MOVE) { @@ -322,7 +303,23 @@ void LaunchBattleAnimation(u32 animType, u32 animId) sMonAnimTaskIdArray[0] = TASK_NONE; sMonAnimTaskIdArray[1] = TASK_NONE; - sBattleAnimScriptPtr = animsTable[animId]; + + switch (animType) + { + case ANIM_TYPE_GENERAL: + default: + sBattleAnimScriptPtr = gBattleAnims_General[animId]; + break; + case ANIM_TYPE_MOVE: + sBattleAnimScriptPtr = GetMoveAnimationScript(animId); + break; + case ANIM_TYPE_STATUS: + sBattleAnimScriptPtr = gBattleAnims_StatusConditions[animId]; + break; + case ANIM_TYPE_SPECIAL: + sBattleAnimScriptPtr = gBattleAnims_Special[animId]; + break; + } gAnimScriptActive = TRUE; sAnimFramesToWait = 0; gAnimScriptCallback = RunAnimScriptCommand; diff --git a/src/battle_bg.c b/src/battle_bg.c index 0f802d52de..328f990653 100644 --- a/src/battle_bg.c +++ b/src/battle_bg.c @@ -371,6 +371,15 @@ static const struct WindowTemplate sStandardBattleWindowTemplates[] = .paletteNum = 0, .baseBlock = 0x00b0, }, + [B_WIN_MOVE_DESCRIPTION] = { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 47, + .width = 18, + .height = 6, + .paletteNum = 5, + .baseBlock = 0x0350, + }, DUMMY_WIN_TEMPLATE }; @@ -583,6 +592,15 @@ static const struct WindowTemplate sBattleArenaWindowTemplates[] = .paletteNum = 7, .baseBlock = 0x0090, }, + [B_WIN_MOVE_DESCRIPTION] = { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 47, + .width = 18, + .height = 6, + .paletteNum = 5, + .baseBlock = 0x0350, + }, DUMMY_WIN_TEMPLATE }; diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index be6a63e00b..5bf12e2cc7 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -31,6 +31,7 @@ #include "util.h" #include "window.h" #include "constants/battle_anim.h" +#include "constants/battle_move_effects.h" #include "constants/battle_partner.h" #include "constants/hold_effects.h" #include "constants/items.h" @@ -40,6 +41,8 @@ #include "constants/trainers.h" #include "constants/rgb.h" #include "level_caps.h" +#include "menu.h" +#include "pokemon_summary_screen.h" static void PlayerBufferExecCompleted(u32 battler); static void PlayerHandleLoadMonSprite(u32 battler); @@ -83,6 +86,7 @@ static void MoveSelectionDisplayPpNumber(u32 battler); static void MoveSelectionDisplayPpString(u32 battler); static void MoveSelectionDisplayMoveType(u32 battler); static void MoveSelectionDisplayMoveNames(u32 battler); +static void MoveSelectionDisplayMoveDescription(u32 battler); static void HandleMoveSwitching(u32 battler); static void SwitchIn_HandleSoundAndEnd(u32 battler); static void WaitForMonSelection(u32 battler); @@ -158,6 +162,8 @@ static void (*const sPlayerBufferCommands[CONTROLLER_CMDS_COUNT])(u32 battler) = [CONTROLLER_TERMINATOR_NOP] = BtlController_TerminatorNop }; +static EWRAM_DATA bool8 sDescriptionSubmenu = 0; + static EWRAM_DATA bool8 sAckBallUseBtn = FALSE; static EWRAM_DATA bool8 sBallSwapped = FALSE; @@ -690,7 +696,7 @@ static void HandleInputChooseMove(u32 battler) else gPlayerDpadHoldFrames = 0; - if (JOY_NEW(A_BUTTON)) + if (JOY_NEW(A_BUTTON) && !sDescriptionSubmenu) { PlaySE(SE_SELECT); @@ -797,7 +803,7 @@ static void HandleInputChooseMove(u32 battler) break; } } - else if (JOY_NEW(B_BUTTON) || gPlayerDpadHoldFrames > 59) + else if ((JOY_NEW(B_BUTTON) || gPlayerDpadHoldFrames > 59) && !sDescriptionSubmenu) { PlaySE(SE_SELECT); if (gBattleStruct->zmove.viewing) @@ -826,6 +832,8 @@ static void HandleInputChooseMove(u32 battler) MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 0); MoveSelectionDisplayPpNumber(battler); MoveSelectionDisplayMoveType(battler); + if (sDescriptionSubmenu) + MoveSelectionDisplayMoveDescription(battler); TryChangeZIndicator(battler, gMoveSelectionCursor[battler]); } } @@ -840,6 +848,8 @@ static void HandleInputChooseMove(u32 battler) MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 0); MoveSelectionDisplayPpNumber(battler); MoveSelectionDisplayMoveType(battler); + if (sDescriptionSubmenu) + MoveSelectionDisplayMoveDescription(battler); TryChangeZIndicator(battler, gMoveSelectionCursor[battler]); } } @@ -853,6 +863,8 @@ static void HandleInputChooseMove(u32 battler) MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 0); MoveSelectionDisplayPpNumber(battler); MoveSelectionDisplayMoveType(battler); + if (sDescriptionSubmenu) + MoveSelectionDisplayMoveDescription(battler); TryChangeZIndicator(battler, gMoveSelectionCursor[battler]); } } @@ -867,10 +879,12 @@ static void HandleInputChooseMove(u32 battler) MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 0); MoveSelectionDisplayPpNumber(battler); MoveSelectionDisplayMoveType(battler); + if (sDescriptionSubmenu) + MoveSelectionDisplayMoveDescription(battler); TryChangeZIndicator(battler, gMoveSelectionCursor[battler]); } } - else if (JOY_NEW(SELECT_BUTTON) && !gBattleStruct->zmove.viewing) + else if (JOY_NEW(SELECT_BUTTON) && !gBattleStruct->zmove.viewing && !sDescriptionSubmenu) { if (gNumberOfMovesToChoose > 1 && !(gBattleTypeFlags & BATTLE_TYPE_LINK)) { @@ -886,6 +900,30 @@ static void HandleInputChooseMove(u32 battler) gBattlerControllerFuncs[battler] = HandleMoveSwitching; } } + else if (sDescriptionSubmenu) + { + if (JOY_NEW(L_BUTTON) || JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) + { + sDescriptionSubmenu = FALSE; + if (gCategoryIconSpriteId != 0xFF) + { + DestroySprite(&gSprites[gCategoryIconSpriteId]); + gCategoryIconSpriteId = 0xFF; + } + + FillWindowPixelBuffer(B_WIN_MOVE_DESCRIPTION, PIXEL_FILL(0)); + ClearStdWindowAndFrame(B_WIN_MOVE_DESCRIPTION, FALSE); + CopyWindowToVram(B_WIN_MOVE_DESCRIPTION, COPYWIN_GFX); + PlaySE(SE_SELECT); + MoveSelectionDisplayPpNumber(battler); + MoveSelectionDisplayMoveType(battler); + } + } + else if (JOY_NEW(L_BUTTON)) + { + sDescriptionSubmenu = TRUE; + MoveSelectionDisplayMoveDescription(battler); + } else if (JOY_NEW(START_BUTTON)) { if (CanMegaEvolve(battler)) @@ -1772,6 +1810,54 @@ static void MoveSelectionDisplayMoveType(u32 battler) BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MOVE_TYPE); } +static void MoveSelectionDisplayMoveDescription(u32 battler) +{ + struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct*)(&gBattleResources->bufferA[battler][4]); + u16 move = moveInfo->moves[gMoveSelectionCursor[battler]]; + u16 pwr = gMovesInfo[move].power; + u16 acc = gMovesInfo[move].accuracy; + u8 cat = gMovesInfo[move].category; + + u8 pwr_num[3], acc_num[3]; + u8 cat_desc[7] = _("CAT: "); + u8 pwr_desc[7] = _("PWR: "); + u8 acc_desc[7] = _("ACC: "); + u8 cat_start[] = _("{CLEAR_TO 0x03}"); + u8 pwr_start[] = _("{CLEAR_TO 0x38}"); + u8 acc_start[] = _("{CLEAR_TO 0x6D}"); + LoadMessageBoxAndBorderGfx(); + DrawStdWindowFrame(B_WIN_MOVE_DESCRIPTION, FALSE); + if (pwr < 2) + StringCopy(pwr_num, gText_BattleSwitchWhich5); + else + ConvertIntToDecimalStringN(pwr_num, pwr, STR_CONV_MODE_LEFT_ALIGN, 3); + if (acc < 2) + StringCopy(acc_num, gText_BattleSwitchWhich5); + else + ConvertIntToDecimalStringN(acc_num, acc, STR_CONV_MODE_LEFT_ALIGN, 3); + StringCopy(gDisplayedStringBattle, cat_start); + StringAppend(gDisplayedStringBattle, cat_desc); + StringAppend(gDisplayedStringBattle, pwr_start); + StringAppend(gDisplayedStringBattle, pwr_desc); + StringAppend(gDisplayedStringBattle, pwr_num); + StringAppend(gDisplayedStringBattle, acc_start); + StringAppend(gDisplayedStringBattle, acc_desc); + StringAppend(gDisplayedStringBattle, acc_num); + StringAppend(gDisplayedStringBattle, gText_NewLine); + if (gMovesInfo[move].effect == EFFECT_PLACEHOLDER) + StringAppend(gDisplayedStringBattle, gNotDoneYetDescription); + else + StringAppend(gDisplayedStringBattle, gMovesInfo[move].description); + BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MOVE_DESCRIPTION); + + if (gCategoryIconSpriteId == 0xFF) + gCategoryIconSpriteId = CreateSprite(&gSpriteTemplate_CategoryIcons, 38, 64, 1); + + StartSpriteAnim(&gSprites[gCategoryIconSpriteId], cat); + + CopyWindowToVram(B_WIN_MOVE_DESCRIPTION, COPYWIN_FULL); +} + void MoveSelectionCreateCursorAt(u8 cursorPosition, u8 baseTileNum) { u16 src[2]; diff --git a/src/battle_dynamax.c b/src/battle_dynamax.c index 5075e18ea6..19b9d8a51d 100644 --- a/src/battle_dynamax.c +++ b/src/battle_dynamax.c @@ -207,6 +207,7 @@ void UndoDynamax(u16 battlerId) u16 mult = UQ_4_12(1.0/1.5); // placeholder gBattleMons[battlerId].hp = UQ_4_12_TO_INT((GetMonData(mon, MON_DATA_HP) * mult + 1) + UQ_4_12_ROUND); // round up SetMonData(mon, MON_DATA_HP, &gBattleMons[battlerId].hp); + CalculateMonStats(mon); } // Makes sure there are no Dynamax flags set, including on switch / faint. diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index 2bf3a5e910..4a3c3c50de 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -707,6 +707,7 @@ bool8 BattleLoadAllHealthBoxesGfx(u8 state) LoadSpritePalette(&sSpritePalettes_HealthBoxHealthBar[1]); MegaIndicator_LoadSpritesGfx(); TeraIndicator_LoadSpriteGfx(); + CategoryIcons_LoadSpritesGfx(); } else if (!IsDoubleBattle()) { diff --git a/src/battle_interface.c b/src/battle_interface.c index bf148fc0d0..0dd61d5597 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -3753,3 +3753,9 @@ void ArrowsChangeColorLastBallCycle(bool32 showArrows) } #endif } + +void CategoryIcons_LoadSpritesGfx(void) +{ + LoadCompressedSpriteSheet(&gSpriteSheet_CategoryIcons); + LoadSpritePalette(&gSpritePal_CategoryIcons); +} diff --git a/src/battle_main.c b/src/battle_main.c index 2993147e3c..f55f481659 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -54,6 +54,7 @@ #include "wild_encounter.h" #include "window.h" #include "constants/abilities.h" +#include "constants/battle_ai.h" #include "constants/battle_move_effects.h" #include "constants/battle_string_ids.h" #include "constants/battle_partner.h" @@ -229,6 +230,7 @@ EWRAM_DATA u16 gBallToDisplay = 0; EWRAM_DATA bool8 gLastUsedBallMenuPresent = FALSE; EWRAM_DATA u8 gPartyCriticalHits[PARTY_SIZE] = {0}; EWRAM_DATA static u8 sTriedEvolving = 0; +EWRAM_DATA u8 gCategoryIconSpriteId = 0; void (*gPreBattleCallback1)(void); void (*gBattleMainFunc)(void); @@ -294,336 +296,7 @@ const struct OamData gOamData_BattleSpritePlayerSide = static const s8 sCenterToCornerVecXs[8] ={-32, -16, -16, -32, -32}; -#if B_EXPANDED_TYPE_NAMES == TRUE -#define HANDLE_EXPANDED_TYPE_NAME(_name, ...) _(DEFAULT(_name, __VA_ARGS__)) -#else -#define HANDLE_EXPANDED_TYPE_NAME(_name, ...) _(_name) -#endif - -// .generic is large enough that the text for TYPE_ELECTRIC will exceed TEXT_BUFF_ARRAY_COUNT. -const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = -{ - [TYPE_NORMAL] = - { - .name = _("Normal"), - .generic = _("a NORMAL move"), - .palette = 13, - .zMove = MOVE_BREAKNECK_BLITZ, - .maxMove = MOVE_MAX_STRIKE, - .paletteTMHM = gItemIconPalette_NormalTMHM, - //.enhanceItem = ITEM_SILK_SCARF, - //.berry = ITEM_CHILAN_BERRY, - //.gem = ITEM_NORMAL_GEM, - //.zCrystal = ITEM_NORMALIUM_Z, - //.teraShard = ITEM_NORMAL_TERA_SHARD, - //.arceusForm = SPECIES_ARCEUS_NORMAL, - }, - [TYPE_FIGHTING] = - { - .name = HANDLE_EXPANDED_TYPE_NAME("Fight", "Fighting"), - .generic = _("a FIGHTING move"), - .palette = 13, - .zMove = MOVE_ALL_OUT_PUMMELING, - .maxMove = MOVE_MAX_KNUCKLE, - .paletteTMHM = gItemIconPalette_FightingTMHM, - //.enhanceItem = ITEM_BLACK_BELT, - //.berry = ITEM_CHOPLE_BERRY, - //.gem = ITEM_FIGHTING_GEM, - //.zCrystal = ITEM_FIGHTINIUM_Z, - //.plate = ITEM_FIST_PLATE, - //.memory = ITEM_FIGHTING_MEMORY, - //.teraShard = ITEM_FIGHTING_TERA_SHARD, - //.arceusForm = SPECIES_ARCEUS_FIGHTING, - }, - [TYPE_FLYING] = - { - .name = _("Flying"), - .generic = _("a FLYING move"), - .palette = 14, - .zMove = MOVE_SUPERSONIC_SKYSTRIKE, - .maxMove = MOVE_MAX_AIRSTREAM, - .paletteTMHM = gItemIconPalette_FlyingTMHM, - //.enhanceItem = ITEM_SHARP_BEAK, - //.berry = ITEM_COBA_BERRY, - //.gem = ITEM_FLYING_GEM, - //.zCrystal = ITEM_FLYINIUM_Z, - //.plate = ITEM_SKY_PLATE, - //.memory = ITEM_FLYING_MEMORY, - //.teraShard = ITEM_FLYING_TERA_SHARD, - //.arceusForm = SPECIES_ARCEUS_FLYING, - }, - [TYPE_POISON] = - { - .name = _("Poison"), - .generic = _("a POISON move"), - .palette = 14, - .zMove = MOVE_ACID_DOWNPOUR, - .maxMove = MOVE_MAX_OOZE, - .paletteTMHM = gItemIconPalette_PoisonTMHM, - //.enhanceItem = ITEM_POISON_BARB, - //.berry = ITEM_KEBIA_BERRY, - //.gem = ITEM_POISON_GEM, - //.zCrystal = ITEM_POISONIUM_Z, - //.plate = ITEM_TOXIC_PLATE, - //.memory = ITEM_POISON_MEMORY, - //.teraShard = ITEM_POISON_TERA_SHARD, - //.arceusForm = SPECIES_ARCEUS_POISON, - }, - [TYPE_GROUND] = - { - .name = _("Ground"), - .generic = _("a GROUND move"), - .palette = 13, - .zMove = MOVE_TECTONIC_RAGE, - .maxMove = MOVE_MAX_QUAKE, - .paletteTMHM = gItemIconPalette_GroundTMHM, - //.enhanceItem = ITEM_SOFT_SAND, - //.berry = ITEM_SHUCA_BERRY, - //.gem = ITEM_GROUND_GEM, - //.zCrystal = ITEM_GROUNDIUM_Z, - //.plate = ITEM_EARTH_PLATE, - //.memory = ITEM_GROUND_MEMORY, - //.teraShard = ITEM_GROUND_TERA_SHARD, - //.arceusForm = SPECIES_ARCEUS_GROUND, - }, - [TYPE_ROCK] = - { - .name = _("Rock"), - .generic = _("a ROCK move"), - .palette = 13, - .zMove = MOVE_CONTINENTAL_CRUSH, - .maxMove = MOVE_MAX_ROCKFALL, - .paletteTMHM = gItemIconPalette_RockTMHM, - //.enhanceItem = ITEM_HARD_STONE, - //.berry = ITEM_CHARTI_BERRY, - //.gem = ITEM_ROCK_GEM, - //.zCrystal = ITEM_ROCKIUM_Z, - //.plate = ITEM_STONE_PLATE, - //.memory = ITEM_ROCK_MEMORY, - //.teraShard = ITEM_ROCK_TERA_SHARD, - //.arceusForm = SPECIES_ARCEUS_ROCK, - }, - [TYPE_BUG] = - { - .name = _("Bug"), - .generic = _("a BUG move"), - .palette = 15, - .zMove = MOVE_SAVAGE_SPIN_OUT, - .maxMove = MOVE_MAX_FLUTTERBY, - .paletteTMHM = gItemIconPalette_BugTMHM, - //.enhanceItem = ITEM_SILVER_POWDER, - //.berry = ITEM_TANGA_BERRY, - //.gem = ITEM_BUG_GEM, - //.zCrystal = ITEM_BUGINIUM_Z, - //.plate = ITEM_INSECT_PLATE, - //.memory = ITEM_BUG_MEMORY, - //.teraShard = ITEM_BUG_TERA_SHARD, - //.arceusForm = SPECIES_ARCEUS_BUG, - }, - [TYPE_GHOST] = - { - .name = _("Ghost"), - .generic = _("a GHOST move"), - .palette = 14, - .zMove = MOVE_NEVER_ENDING_NIGHTMARE, - .maxMove = MOVE_MAX_PHANTASM, - .paletteTMHM = gItemIconPalette_GhostTMHM, - //.enhanceItem = ITEM_SPELL_TAG, - //.berry = ITEM_KASIB_BERRY, - //.gem = ITEM_GHOST_GEM, - //.zCrystal = ITEM_GHOSTIUM_Z, - //.plate = ITEM_SPOOKY_PLATE, - //.memory = ITEM_GHOST_MEMORY, - //.teraShard = ITEM_GHOST_TERA_SHARD, - //.arceusForm = SPECIES_ARCEUS_GHOST, - }, - [TYPE_STEEL] = - { - .name = _("Steel"), - .generic = _("a STEEL move"), - .palette = 13, - .zMove = MOVE_CORKSCREW_CRASH, - .maxMove = MOVE_MAX_STEELSPIKE, - .paletteTMHM = gItemIconPalette_SteelTMHM, - //.enhanceItem = ITEM_METAL_COAT, - //.berry = ITEM_BABIRI_BERRY, - //.gem = ITEM_STEEL_GEM, - //.zCrystal = ITEM_STEELIUM_Z, - //.plate = ITEM_IRON_PLATE, - //.memory = ITEM_STEEL_MEMORY, - //.teraShard = ITEM_STEEL_TERA_SHARD, - //.arceusForm = SPECIES_ARCEUS_STEEL, - }, - [TYPE_MYSTERY] = - { - .name = _("???"), - .generic = _("a ??? move"), - .palette = 15, - }, - [TYPE_FIRE] = - { - .name = _("Fire"), - .generic = _("a FIRE move"), - .palette = 13, - .zMove = MOVE_INFERNO_OVERDRIVE, - .maxMove = MOVE_MAX_FLARE, - .paletteTMHM = gItemIconPalette_FireTMHM, - //.enhanceItem = ITEM_CHARCOAL, - //.berry = ITEM_OCCA_BERRY, - //.gem = ITEM_FIRE_GEM, - //.zCrystal = ITEM_FIRIUM_Z, - //.plate = ITEM_FLAME_PLATE, - //.memory = ITEM_FIRE_MEMORY, - //.teraShard = ITEM_FIRE_TERA_SHARD, - //.arceusForm = SPECIES_ARCEUS_FIRE, - }, - [TYPE_WATER] = - { - .name = _("Water"), - .generic = _("a WATER move"), - .palette = 14, - .zMove = MOVE_HYDRO_VORTEX, - .maxMove = MOVE_MAX_GEYSER, - .paletteTMHM = gItemIconPalette_WaterTMHM, - //.enhanceItem = ITEM_MYSTIC_WATER, - //.berry = ITEM_PASSHO_BERRY, - //.gem = ITEM_WATER_GEM, - //.zCrystal = ITEM_WATERIUM_Z, - //.plate = ITEM_SPLASH_PLATE, - //.memory = ITEM_WATER_MEMORY, - //.teraShard = ITEM_WATER_TERA_SHARD, - //.arceusForm = SPECIES_ARCEUS_WATER, - }, - [TYPE_GRASS] = - { - .name = _("Grass"), - .generic = _("a GRASS move"), - .palette = 15, - .zMove = MOVE_BLOOM_DOOM, - .maxMove = MOVE_MAX_OVERGROWTH, - .paletteTMHM = gItemIconPalette_GrassTMHM, - //.enhanceItem = ITEM_MIRACLE_SEED, - //.berry = ITEM_RINDO_BERRY, - //.gem = ITEM_GRASS_GEM, - //.zCrystal = ITEM_GRASSIUM_Z, - //.plate = ITEM_MEADOW_PLATE, - //.memory = ITEM_GRASS_MEMORY, - //.teraShard = ITEM_GRASS_TERA_SHARD, - //.arceusForm = SPECIES_ARCEUS_GRASS, - }, - [TYPE_ELECTRIC] = - { - .name = HANDLE_EXPANDED_TYPE_NAME("Electr", "Electric"), - .generic = _("an ELECTRIC move"), - .palette = 13, - .zMove = MOVE_GIGAVOLT_HAVOC, - .maxMove = MOVE_MAX_LIGHTNING, - .paletteTMHM = gItemIconPalette_ElectricTMHM, - //.enhanceItem = ITEM_MAGNET, - //.berry = ITEM_WACAN_BERRY, - //.gem = ITEM_ELECTRIC_GEM, - //.zCrystal = ITEM_ELECTRIUM_Z, - //.plate = ITEM_ZAP_PLATE, - //.memory = ITEM_ELECTRIC_MEMORY, - //.teraShard = ITEM_ELECTRIC_TERA_SHARD, - //.arceusForm = SPECIES_ARCEUS_ELECTRIC, - }, - [TYPE_PSYCHIC] = - { - .name = HANDLE_EXPANDED_TYPE_NAME("Psychc", "Psychic"), - .generic = _("a PSYCHIC move"), - .palette = 14, - .zMove = MOVE_SHATTERED_PSYCHE, - .maxMove = MOVE_MAX_MINDSTORM, - .paletteTMHM = gItemIconPalette_PsychicTMHM, - //.enhanceItem = ITEM_TWISTED_SPOON, - //.berry = ITEM_PAYAPA_BERRY, - //.gem = ITEM_PSYCHIC_GEM, - //.zCrystal = ITEM_PSYCHIUM_Z, - //.plate = ITEM_MIND_PLATE, - //.memory = ITEM_PSYCHIC_MEMORY, - //.teraShard = ITEM_PSYCHIC_TERA_SHARD, - //.arceusForm = SPECIES_ARCEUS_PSYCHIC, - }, - [TYPE_ICE] = - { - .name = _("Ice"), - .generic = _("an ICE move"), - .palette = 14, - .zMove = MOVE_SUBZERO_SLAMMER, - .maxMove = MOVE_MAX_HAILSTORM, - .paletteTMHM = gItemIconPalette_IceTMHM, - //.enhanceItem = ITEM_NEVER_MELT_ICE, - //.berry = ITEM_YACHE_BERRY, - //.gem = ITEM_ICE_GEM, - //.zCrystal = ITEM_ICIUM_Z, - //.plate = ITEM_ICICLE_PLATE, - //.memory = ITEM_ICE_MEMORY, - //.teraShard = ITEM_ICE_TERA_SHARD, - //.arceusForm = SPECIES_ARCEUS_ICE, - }, - [TYPE_DRAGON] = - { - .name = _("Dragon"), - .generic = _("a DRAGON move"), - .palette = 15, - .zMove = MOVE_DEVASTATING_DRAKE, - .maxMove = MOVE_MAX_WYRMWIND, - .paletteTMHM = gItemIconPalette_DragonTMHM, - //.enhanceItem = ITEM_DRAGON_FANG, - //.berry = ITEM_HABAN_BERRY, - //.gem = ITEM_DRAGON_GEM, - //.zCrystal = ITEM_DRAGONIUM_Z, - //.plate = ITEM_DRACO_PLATE, - //.memory = ITEM_DRAGON_MEMORY, - //.teraShard = ITEM_DRAGON_TERA_SHARD, - //.arceusForm = SPECIES_ARCEUS_DRAGON, - }, - [TYPE_DARK] = - { - .name = _("Dark"), - .generic = _("a DARK move"), - .palette = 13, - .zMove = MOVE_BLACK_HOLE_ECLIPSE, - .maxMove = MOVE_MAX_DARKNESS, - .paletteTMHM = gItemIconPalette_DarkTMHM, - //.enhanceItem = ITEM_BLACK_GLASSES, - //.berry = ITEM_COLBUR_BERRY, - //.gem = ITEM_DARK_GEM, - //.zCrystal = ITEM_DARKINIUM_Z, - //.plate = ITEM_DREAD_PLATE, - //.memory = ITEM_DARK_MEMORY, - //.teraShard = ITEM_DARK_TERA_SHARD, - //.arceusForm = SPECIES_ARCEUS_DARK, - }, - [TYPE_FAIRY] = - { - .name = _("Fairy"), - .generic = _("a FAIRY move"), - .palette = 14, - .zMove = MOVE_TWINKLE_TACKLE, - .maxMove = MOVE_MAX_STARFALL, - .paletteTMHM = gItemIconPalette_FairyTMHM, - //.enhanceItem = ITEM_FAIRY_FEATHER, - //.berry = ITEM_ROSELI_BERRY, - //.gem = ITEM_FAIRY_GEM, - //.zCrystal = ITEM_FAIRIUM_Z, - //.plate = ITEM_PIXIE_PLATE, - //.memory = ITEM_FAIRY_MEMORY, - //.teraShard = ITEM_FAIRY_TERA_SHARD, - //.arceusForm = SPECIES_ARCEUS_FAIRY, - }, - [TYPE_STELLAR] = - { - .name = HANDLE_EXPANDED_TYPE_NAME("Stellr", "Stellar"), - .generic = _("a STELLAR move"), - .palette = 15, - .zMove = MOVE_BREAKNECK_BLITZ, - .maxMove = MOVE_MAX_STRIKE, - .paletteTMHM = gItemIconPalette_NormalTMHM, // failsafe - // .teraShard = ITEM_STELLAR_TERA_SHARD, - }, -}; +#include "data/types_info.h" // extra args are money and ball #define TRAINER_CLASS(trainerClass, trainerName, ...) \ @@ -3446,6 +3119,7 @@ static void BattleStartClearSetData(void) gBattleStruct->swapDamageCategory = FALSE; // Photon Geyser, Shell Side Arm, Light That Burns the Sky gSelectedMonPartyId = PARTY_SIZE; // Revival Blessing + gCategoryIconSpriteId = 0xFF; } void SwitchInClearSetData(u32 battler) @@ -3746,6 +3420,9 @@ const u8* FaintClearSetData(u32 battler) gBattleStruct->zmove.active = FALSE; gBattleStruct->zmove.toBeUsed[battler] = MOVE_NONE; gBattleStruct->zmove.effect = EFFECT_HIT; + // Clear Dynamax data + UndoDynamax(battler); + return result; } @@ -4469,7 +4146,10 @@ static void HandleTurnActionSelectionState(void) if ((gBattleTypeFlags & BATTLE_TYPE_HAS_AI || IsWildMonSmart()) && (BattlerHasAi(battler) && !(gBattleTypeFlags & BATTLE_TYPE_PALACE))) { - AI_DATA->mostSuitableMonId[battler] = GetMostSuitableMonToSwitchInto(battler, FALSE); + if (AI_THINKING_STRUCT->aiFlags[battler] & AI_FLAG_RISKY) // Risky AI switches aggressively even mid battle + AI_DATA->mostSuitableMonId[battler] = GetMostSuitableMonToSwitchInto(battler, TRUE); + else + AI_DATA->mostSuitableMonId[battler] = GetMostSuitableMonToSwitchInto(battler, FALSE); gBattleStruct->aiMoveOrAction[battler] = ComputeBattleAiScores(battler); } // fallthrough @@ -5122,7 +4802,7 @@ s8 GetMovePriority(u32 battler, u16 move) gProtectStructs[battler].pranksterElevated = 1; priority++; } - else if (gMovesInfo[move].effect == EFFECT_GRASSY_GLIDE && gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN && IsBattlerGrounded(battler)) + else if (gMovesInfo[move].effect == EFFECT_GRASSY_GLIDE && gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN && IsBattlerGrounded(battler) && !IsDynamaxed(battler) && !(gBattleStruct->dynamax.toDynamax & gBitTable[battler])) { priority++; } @@ -6001,9 +5681,59 @@ void RunBattleScriptCommands(void) gBattleScriptingCommandsTable[gBattlescriptCurrInstr[0]](); } +bool32 TrySetAteType(u32 move, u32 battlerAtk, u32 attackerAbility) +{ + u32 ateType; + + switch (gMovesInfo[move].effect) + { + case EFFECT_TERA_BLAST: + if (IsTerastallized(battlerAtk)) + return FALSE; + break; + case EFFECT_TERA_STARSTORM: + if (gBattleMons[battlerAtk].species == SPECIES_TERAPAGOS_STELLAR) + return FALSE; + break; + case EFFECT_HIDDEN_POWER: + case EFFECT_WEATHER_BALL: + case EFFECT_CHANGE_TYPE_ON_ITEM: + case EFFECT_NATURAL_GIFT: + return FALSE; + } + + ateType = TYPE_NONE; + switch (attackerAbility) + { + case ABILITY_PIXILATE: + ateType = TYPE_FAIRY; + break; + case ABILITY_REFRIGERATE: + ateType = TYPE_ICE; + break; + case ABILITY_AERILATE: + ateType = TYPE_FLYING; + break; + case ABILITY_GALVANIZE: + ateType = TYPE_ELECTRIC; + break; + default: + ateType = TYPE_NONE; + break; + } + + if (ateType != TYPE_NONE) + { + gBattleStruct->dynamicMoveType = ateType | F_DYNAMIC_TYPE_SET; + return TRUE; + } + + return FALSE; +} + void SetTypeBeforeUsingMove(u32 move, u32 battlerAtk) { - u32 moveType, ateType, attackerAbility; + u32 moveType, attackerAbility; u16 holdEffect = GetBattlerHoldEffect(battlerAtk, TRUE); if (move == MOVE_STRUGGLE) @@ -6038,9 +5768,9 @@ void SetTypeBeforeUsingMove(u32 move, u32 battlerAtk) | ((gBattleMons[battlerAtk].spAttackIV & 1) << 4) | ((gBattleMons[battlerAtk].spDefenseIV & 1) << 5); - // Subtract 4 instead of 1 below because 3 types are excluded (TYPE_NORMAL and TYPE_MYSTERY and TYPE_FAIRY) - // The final + 1 skips past Normal, and the following conditional skips TYPE_MYSTERY - gBattleStruct->dynamicMoveType = ((NUMBER_OF_MON_TYPES - 4) * typeBits) / 63 + 1; + // Subtract 6 instead of 1 below because 5 types are excluded (TYPE_NONE, TYPE_NORMAL, TYPE_MYSTERY, TYPE_FAIRY and TYPE_STELLAR) + // The final + 2 skips past TYPE_NONE and Normal. + gBattleStruct->dynamicMoveType = ((NUMBER_OF_MON_TYPES - 6) * typeBits) / 63 + 2; if (gBattleStruct->dynamicMoveType >= TYPE_MYSTERY) gBattleStruct->dynamicMoveType++; gBattleStruct->dynamicMoveType |= F_DYNAMIC_TYPE_IGNORE_PHYSICALITY | F_DYNAMIC_TYPE_SET; @@ -6105,29 +5835,15 @@ void SetTypeBeforeUsingMove(u32 move, u32 battlerAtk) } attackerAbility = GetBattlerAbility(battlerAtk); - - if (gMovesInfo[move].type == TYPE_NORMAL - && gMovesInfo[move].effect != EFFECT_HIDDEN_POWER - && gMovesInfo[move].effect != EFFECT_WEATHER_BALL - && gMovesInfo[move].effect != EFFECT_CHANGE_TYPE_ON_ITEM - && gMovesInfo[move].effect != EFFECT_NATURAL_GIFT - && !(gMovesInfo[move].effect == EFFECT_TERA_BLAST && IsTerastallized(battlerAtk)) - && !(gMovesInfo[move].effect == EFFECT_TERA_STARSTORM && gBattleMons[battlerAtk].species == SPECIES_TERAPAGOS_STELLAR) - && ((attackerAbility == ABILITY_PIXILATE && (ateType = TYPE_FAIRY)) - || (attackerAbility == ABILITY_REFRIGERATE && (ateType = TYPE_ICE)) - || (attackerAbility == ABILITY_AERILATE && (ateType = TYPE_FLYING)) - || ((attackerAbility == ABILITY_GALVANIZE) && (ateType = TYPE_ELECTRIC)) - ) - ) + if (gMovesInfo[move].type == TYPE_NORMAL && TrySetAteType(move, battlerAtk, attackerAbility)) { - gBattleStruct->dynamicMoveType = ateType | F_DYNAMIC_TYPE_SET; if (!IsDynamaxed(battlerAtk)) gBattleStruct->ateBoost[battlerAtk] = 1; } else if (gMovesInfo[move].type != TYPE_NORMAL - && gMovesInfo[move].effect != EFFECT_HIDDEN_POWER - && gMovesInfo[move].effect != EFFECT_WEATHER_BALL - && attackerAbility == ABILITY_NORMALIZE) + && gMovesInfo[move].effect != EFFECT_HIDDEN_POWER + && gMovesInfo[move].effect != EFFECT_WEATHER_BALL + && attackerAbility == ABILITY_NORMALIZE) { gBattleStruct->dynamicMoveType = TYPE_NORMAL | F_DYNAMIC_TYPE_SET; if (!IsDynamaxed(battlerAtk)) diff --git a/src/battle_message.c b/src/battle_message.c index 0e71bc7ca3..23cea6b231 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -91,7 +91,7 @@ static const u8 sText_CantEscape2[] = _("Can't escape!\p"); static const u8 sText_AttackerCantEscape[] = _("{B_ATK_NAME_WITH_PREFIX} can't escape!"); static const u8 sText_HitXTimes[] = _("Hit {B_BUFF1} time(s)!"); static const u8 sText_PkmnFellAsleep[] = _("{B_EFF_NAME_WITH_PREFIX}\nfell asleep!"); -static const u8 sText_PkmnMadeSleep[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nmade {B_EFF_NAME_WITH_PREFIX} sleep!"); +static const u8 sText_PkmnMadeSleep[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_BUFF1}\nmade {B_EFF_NAME_WITH_PREFIX} sleep!"); static const u8 sText_PkmnAlreadyAsleep[] = _("{B_DEF_NAME_WITH_PREFIX} is\nalready asleep!"); static const u8 sText_PkmnAlreadyAsleep2[] = _("{B_ATK_NAME_WITH_PREFIX} is\nalready asleep!"); static const u8 sText_PkmnWasntAffected[] = _("{B_DEF_NAME_WITH_PREFIX}\nwasn't affected!"); @@ -103,12 +103,12 @@ static const u8 sText_PkmnBadlyPoisoned[] = _("{B_EFF_NAME_WITH_PREFIX} is badly 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_PkmnBurnedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_BUFF1}\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!"); +static const u8 sText_PkmnFrozenBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_BUFF1}\nfroze {B_EFF_NAME_WITH_PREFIX} solid!"); static const u8 sText_PkmnIsFrozen[] = _("{B_ATK_NAME_WITH_PREFIX} is\nfrozen solid!"); static const u8 sText_PkmnWasDefrosted[] = _("{B_DEF_NAME_WITH_PREFIX} was\ndefrosted!"); static const u8 sText_PkmnWasDefrosted2[] = _("{B_ATK_NAME_WITH_PREFIX} was\ndefrosted!"); @@ -117,7 +117,7 @@ static const u8 sText_PkmnFrostbiteHealed[] = _("{B_DEF_NAME_WITH_PREFIX}'s\nfro 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_PkmnWasParalyzedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_BUFF1}\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!"); static const u8 sText_PkmnIsAlreadyParalyzed[] = _("{B_DEF_NAME_WITH_PREFIX} is\nalready paralyzed!"); static const u8 sText_PkmnHealedParalysis[] = _("{B_DEF_NAME_WITH_PREFIX} was\nhealed of paralysis!"); @@ -2492,6 +2492,18 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = .fgColor = 1, .shadowColor = 6, }, + [B_WIN_MOVE_DESCRIPTION] = { + .fillValue = PIXEL_FILL(0xE), + .fontId = FONT_NARROW, + .x = 0, + .y = 1, + .letterSpacing = 0, + .lineSpacing = 0, + .speed = 0, + .fgColor = TEXT_DYNAMIC_COLOR_4, + .bgColor = TEXT_DYNAMIC_COLOR_5, + .shadowColor = TEXT_DYNAMIC_COLOR_6, + }, }; static const struct BattleWindowText sTextOnWindowsInfo_Arena[] = @@ -2725,6 +2737,18 @@ static const struct BattleWindowText sTextOnWindowsInfo_Arena[] = .bgColor = 1, .shadowColor = 3, }, + [B_WIN_MOVE_DESCRIPTION] = { + .fillValue = PIXEL_FILL(0xE), + .fontId = FONT_NARROW, + .x = 0, + .y = 1, + .letterSpacing = 0, + .lineSpacing = 0, + .speed = 0, + .fgColor = TEXT_DYNAMIC_COLOR_4, + .bgColor = TEXT_DYNAMIC_COLOR_5, + .shadowColor = TEXT_DYNAMIC_COLOR_6, + }, }; static const struct BattleWindowText *const sBattleTextOnWindowsInfo[] = diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 31601e5d92..66f819cf88 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -337,6 +337,8 @@ static bool8 CanBurnHitThaw(u16 move); static u32 GetNextTarget(u32 moveTarget, bool32 excludeCurrent); static void TryUpdateEvolutionTracker(u32 evolutionMethod, u32 upAmount, u16 usedMove); static void AccuracyCheck(bool32 recalcDragonDarts, const u8 *nextInstr, const u8 *failInstr, u16 move); +static void SaveBattlerAttacker(u32 battler); +static void SaveBattlerTarget(u32 battler); static void Cmd_attackcanceler(void); static void Cmd_accuracycheck(void); @@ -6168,7 +6170,8 @@ static void Cmd_moveend(void) && CanBattlerSwitch(gBattlerAttacker)) { gLastUsedItem = gBattleMons[battler].item; - gBattleStruct->savedBattlerTarget = gBattleScripting.battler = battler; // Battler with red card + SaveBattlerTarget(battler); // save battler with red card + gBattleScripting.battler = battler; gEffectBattler = gBattlerAttacker; if (gMovesInfo[gCurrentMove].effect == EFFECT_HIT_ESCAPE) gBattlescriptCurrInstr = BattleScript_MoveEnd; // Prevent user switch-in selection @@ -6228,8 +6231,19 @@ static void Cmd_moveend(void) case MOVEEND_DANCER: // Special case because it's so annoying if (gMovesInfo[gCurrentMove].danceMove) { - u8 battler, nextDancer = 0; + u32 battler, nextDancer = 0; + bool32 turnOnHitmarker = FALSE; + for (battler = 0; battler < MAX_BATTLERS_COUNT; battler++) + { + if (gSpecialStatuses[battler].dancerUsedMove) + { + // in case a battler fails to act on a Dancer-called move + turnOnHitmarker = TRUE; + break; + } + } + if (!(gBattleStruct->lastMoveFailed & gBitTable[gBattlerAttacker] || (!gSpecialStatuses[gBattlerAttacker].dancerUsedMove && gBattleStruct->bouncedMoveIsUsed))) @@ -6245,6 +6259,8 @@ static void Cmd_moveend(void) { if (GetBattlerAbility(battler) == ABILITY_DANCER && !gSpecialStatuses[battler].dancerUsedMove) { + if (turnOnHitmarker) + gHitMarker |= HITMARKER_ATTACKSTRING_PRINTED; if (!nextDancer || (gBattleMons[battler].speed < gBattleMons[nextDancer & 0x3].speed)) nextDancer = battler | 0x4; } @@ -6325,6 +6341,25 @@ static void Cmd_moveend(void) && (gMoveResultFlags & MOVE_RESULT_NO_EFFECT) // And it is unusable && (gBattleMons[gBattlerAttacker].status2 & STATUS2_LOCK_CONFUSE) != STATUS2_LOCK_CONFUSE_TURN(1)) // And won't end this turn CancelMultiTurnMoves(gBattlerAttacker); // Cancel it + + + + if (gBattleStruct->savedAttackerCount > 0) + { + // #if TESTING + // Test_ExitWithResult(TEST_RESULT_ERROR, "savedAttackerCount is greater than 0! More calls to SaveBattlerAttacker than RestoreBattlerAttacker!"); + // #else + DebugPrintfLevel(MGBA_LOG_WARN, "savedAttackerCount is greater than 0! More calls to SaveBattlerAttacker than RestoreBattlerAttacker!"); + // #endif + } + if (gBattleStruct->savedTargetCount > 0) + { + // #if TESTING + // Test_ExitWithResult(TEST_RESULT_ERROR, "savedTargetCount is greater than 0! More calls to SaveBattlerTarget than RestoreBattlerTarget!"); + // #else + DebugPrintfLevel(MGBA_LOG_WARN, "savedTargetCount is greater than 0! More calls to SaveBattlerTarget than RestoreBattlerTarget!"); + // #endif + } gBattleStruct->targetsDone[gBattlerAttacker] = 0; gProtectStructs[gBattlerAttacker].targetAffected = FALSE; @@ -9379,18 +9414,6 @@ static void Cmd_various(void) AbilityBattleEffects(ABILITYEFFECT_OPPORTUNIST, battler, 0, 0, 0); return; } - case VARIOUS_SAVE_TARGET: - { - VARIOUS_ARGS(); - gBattleStruct->savedBattlerTarget = gBattlerTarget; - break; - } - case VARIOUS_RESTORE_TARGET: - { - VARIOUS_ARGS(); - gBattlerTarget = gBattleStruct->savedBattlerTarget; - break; - } case VARIOUS_INSTANT_HP_DROP: { VARIOUS_ARGS(); @@ -15655,6 +15678,75 @@ static void Cmd_callnative(void) } // Callnative Funcs + +static void SaveBattlerTarget(u32 battler) +{ + if (gBattleStruct->savedTargetCount < NELEMS(gBattleStruct->savedBattlerTarget)) + gBattleStruct->savedBattlerTarget[gBattleStruct->savedTargetCount++] = battler; + else + DebugPrintfLevel(MGBA_LOG_WARN, "Attempting to exceed savedBattlerTarget array size!"); +} + +static void SaveBattlerAttacker(u32 battler) +{ + if (gBattleStruct->savedAttackerCount < NELEMS(gBattleStruct->savedBattlerAttacker)) + gBattleStruct->savedBattlerAttacker[gBattleStruct->savedAttackerCount++] = battler; + else + DebugPrintfLevel(MGBA_LOG_WARN, "Attempting to exceed savedBattlerAttacker array size!"); +} + +void BS_SaveTarget(void) +{ + NATIVE_ARGS(); + SaveBattlerTarget(gBattlerTarget); + gBattlescriptCurrInstr = cmd->nextInstr; +} + +void BS_RestoreTarget(void) +{ + NATIVE_ARGS(); + if (gBattleStruct->savedTargetCount > 0) + { + gBattleStruct->savedTargetCount--; + gBattlerTarget = gBattleStruct->savedBattlerTarget[gBattleStruct->savedTargetCount]; + } + else + { + // #if TESTING + // Test_ExitWithResult(TEST_RESULT_ERROR, "BS_RestoreTarget attempting to restore an empty target!"); + // #else + DebugPrintfLevel(MGBA_LOG_WARN, "BS_RestoreTarget attempting to restore an empty target!"); + // #endif + } + gBattlescriptCurrInstr = cmd->nextInstr; +} + +void BS_SaveAttacker(void) +{ + NATIVE_ARGS(); + SaveBattlerAttacker(gBattlerAttacker); + gBattlescriptCurrInstr = cmd->nextInstr; +} + +void BS_RestoreAttacker(void) +{ + NATIVE_ARGS(); + if (gBattleStruct->savedAttackerCount > 0) + { + gBattleStruct->savedAttackerCount--; + gBattlerAttacker = gBattleStruct->savedBattlerAttacker[gBattleStruct->savedAttackerCount]; + } + else + { + // #if TESTING + // Test_ExitWithResult(TEST_RESULT_ERROR, "BS_RestoreAttacker attempting to restore an empty attacker!"); + // #else + DebugPrintfLevel(MGBA_LOG_WARN, "BS_RestoreAttacker attempting to restore an empty attacker!"); + // #endif + } + gBattlescriptCurrInstr = cmd->nextInstr; +} + void BS_CalcMetalBurstDmg(void) { NATIVE_ARGS(const u8 *failInstr); diff --git a/src/battle_terastal.c b/src/battle_terastal.c index 796cc4ba08..afe7f3a5ce 100644 --- a/src/battle_terastal.c +++ b/src/battle_terastal.c @@ -169,33 +169,9 @@ uq4_12_t GetTeraMultiplier(u32 battler, u32 type) } } -// Most values pulled from the Tera type icon palette. -const u16 sTeraTypeRGBValues[NUMBER_OF_MON_TYPES] = { - [TYPE_NORMAL] = RGB_WHITE, // custom - [TYPE_FIGHTING] = RGB(26, 8, 14), - [TYPE_FLYING] = RGB(31, 26, 7), - [TYPE_POISON] = RGB(26, 10, 25), // custom - [TYPE_GROUND] = RGB(25, 23, 18), - [TYPE_ROCK] = RGB(18, 16, 8), // custom - [TYPE_BUG] = RGB(18, 24, 6), - [TYPE_GHOST] = RGB(12, 10, 16), - [TYPE_STEEL] = RGB(19, 19, 20), - [TYPE_MYSTERY] = RGB_WHITE, - [TYPE_FIRE] = RGB(31, 20, 11), - [TYPE_WATER] = RGB(10, 18, 27), - [TYPE_GRASS] = RGB(12, 24, 11), - [TYPE_ELECTRIC] = RGB(30, 26, 7), - [TYPE_PSYCHIC] = RGB(31, 14, 15), - [TYPE_ICE] = RGB(14, 26, 25), - [TYPE_DRAGON] = RGB(10, 18, 27), - [TYPE_DARK] = RGB(6, 5, 8), - [TYPE_FAIRY] = RGB(31, 15, 21), - [TYPE_STELLAR] = RGB(10, 18, 27), -}; - u16 GetTeraTypeRGB(u32 type) { - return sTeraTypeRGBValues[type]; + return gTypesInfo[type].teraTypeRGBValue; } // TERASTAL TRIGGER: @@ -636,6 +612,7 @@ static const struct SpriteTemplate sSpriteTemplate_StellarIndicator = static const struct SpriteSheet sTeraIndicatorSpriteSheets[NUMBER_OF_MON_TYPES + 1] = { + {sNormalIndicatorGfx, sizeof(sNormalIndicatorGfx), TAG_NORMAL_INDICATOR_TILE}, // TYPE_NONE {sNormalIndicatorGfx, sizeof(sNormalIndicatorGfx), TAG_NORMAL_INDICATOR_TILE}, {sFightingIndicatorGfx, sizeof(sFightingIndicatorGfx), TAG_FIGHTING_INDICATOR_TILE}, {sFlyingIndicatorGfx, sizeof(sFlyingIndicatorGfx), TAG_FLYING_INDICATOR_TILE}, @@ -661,6 +638,7 @@ static const struct SpriteSheet sTeraIndicatorSpriteSheets[NUMBER_OF_MON_TYPES + static const struct SpriteTemplate * const sTeraIndicatorSpriteTemplates[NUMBER_OF_MON_TYPES] = { + [TYPE_NONE] = &sSpriteTemplate_NormalIndicator, // just in case [TYPE_NORMAL] = &sSpriteTemplate_NormalIndicator, [TYPE_FIGHTING] = &sSpriteTemplate_FightingIndicator, [TYPE_FLYING] = &sSpriteTemplate_FlyingIndicator, diff --git a/src/battle_util.c b/src/battle_util.c index 729b1aee23..2e1cbd2d42 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -903,44 +903,6 @@ static const uq4_12_t sPercentToModifier[] = UQ_4_12(1.00), // 100 }; -#define X UQ_4_12 -#define ______ X(1.0) // Regular effectiveness. - -// Type matchup updates. Attacker Defender -#define STL_RS (B_UPDATED_TYPE_MATCHUPS >= GEN_6 ? X(1.0) : X(0.5)) // Ghost/Dark -> Steel -#define PSN_RS (B_UPDATED_TYPE_MATCHUPS >= GEN_2 ? X(0.5) : X(2.0)) // Bug -> Poison -#define BUG_RS (B_UPDATED_TYPE_MATCHUPS >= GEN_2 ? X(1.0) : X(2.0)) // Poison -> Bug -#define PSY_RS (B_UPDATED_TYPE_MATCHUPS >= GEN_2 ? X(2.0) : X(0.0)) // Ghost -> Psychic -#define FIR_RS (B_UPDATED_TYPE_MATCHUPS >= GEN_2 ? X(0.5) : X(1.0)) // Ice -> Fire - -static const uq4_12_t sTypeEffectivenessTable[NUMBER_OF_MON_TYPES][NUMBER_OF_MON_TYPES] = -{// Defender --> - // Attacker Normal Fighting Flying Poison Ground Rock Bug Ghost Steel Mystery Fire Water Grass Electric Psychic Ice Dragon Dark Fairy Stellar - [TYPE_NORMAL] = {______, ______, ______, ______, ______, X(0.5), ______, X(0.0), X(0.5), ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______}, - [TYPE_FIGHTING] = {X(2.0), ______, X(0.5), X(0.5), ______, X(2.0), X(0.5), X(0.0), X(2.0), ______, ______, ______, ______, ______, X(0.5), X(2.0), ______, X(2.0), X(0.5), ______}, - [TYPE_FLYING] = {______, X(2.0), ______, ______, ______, X(0.5), X(2.0), ______, X(0.5), ______, ______, ______, X(2.0), X(0.5), ______, ______, ______, ______, ______, ______}, - [TYPE_POISON] = {______, ______, ______, X(0.5), X(0.5), X(0.5), BUG_RS, X(0.5), X(0.0), ______, ______, ______, X(2.0), ______, ______, ______, ______, ______, X(2.0), ______}, - [TYPE_GROUND] = {______, ______, X(0.0), X(2.0), ______, X(2.0), X(0.5), ______, X(2.0), ______, X(2.0), ______, X(0.5), X(2.0), ______, ______, ______, ______, ______, ______}, - [TYPE_ROCK] = {______, X(0.5), X(2.0), ______, X(0.5), ______, X(2.0), ______, X(0.5), ______, X(2.0), ______, ______, ______, ______, X(2.0), ______, ______, ______, ______}, - [TYPE_BUG] = {______, X(0.5), X(0.5), PSN_RS, ______, ______, ______, X(0.5), X(0.5), ______, X(0.5), ______, X(2.0), ______, X(2.0), ______, ______, X(2.0), X(0.5), ______}, - [TYPE_GHOST] = {X(0.0), ______, ______, ______, ______, ______, ______, X(2.0), STL_RS, ______, ______, ______, ______, ______, PSY_RS, ______, ______, X(0.5), ______, ______}, - [TYPE_STEEL] = {______, ______, ______, ______, ______, X(2.0), ______, ______, X(0.5), ______, X(0.5), X(0.5), ______, X(0.5), ______, X(2.0), ______, ______, X(2.0), ______}, - [TYPE_MYSTERY] = {______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______}, - [TYPE_FIRE] = {______, ______, ______, ______, ______, X(0.5), X(2.0), ______, X(2.0), ______, X(0.5), X(0.5), X(2.0), ______, ______, X(2.0), X(0.5), ______, ______, ______}, - [TYPE_WATER] = {______, ______, ______, ______, X(2.0), X(2.0), ______, ______, ______, ______, X(2.0), X(0.5), X(0.5), ______, ______, ______, X(0.5), ______, ______, ______}, - [TYPE_GRASS] = {______, ______, X(0.5), X(0.5), X(2.0), X(2.0), X(0.5), ______, X(0.5), ______, X(0.5), X(2.0), X(0.5), ______, ______, ______, X(0.5), ______, ______, ______}, - [TYPE_ELECTRIC] = {______, ______, X(2.0), ______, X(0.0), ______, ______, ______, ______, ______, ______, X(2.0), X(0.5), X(0.5), ______, ______, X(0.5), ______, ______, ______}, - [TYPE_PSYCHIC] = {______, X(2.0), ______, X(2.0), ______, ______, ______, ______, X(0.5), ______, ______, ______, ______, ______, X(0.5), ______, ______, X(0.0), ______, ______}, - [TYPE_ICE] = {______, ______, X(2.0), ______, X(2.0), ______, ______, ______, X(0.5), ______, FIR_RS, X(0.5), X(2.0), ______, ______, X(0.5), X(2.0), ______, ______, ______}, - [TYPE_DRAGON] = {______, ______, ______, ______, ______, ______, ______, ______, X(0.5), ______, ______, ______, ______, ______, ______, ______, X(2.0), ______, X(0.0), ______}, - [TYPE_DARK] = {______, X(0.5), ______, ______, ______, ______, ______, X(2.0), STL_RS, ______, ______, ______, ______, ______, X(2.0), ______, ______, X(0.5), X(0.5), ______}, - [TYPE_FAIRY] = {______, X(2.0), ______, X(0.5), ______, ______, ______, ______, X(0.5), ______, X(0.5), ______, ______, ______, ______, ______, X(2.0), X(2.0), ______, ______}, - [TYPE_STELLAR] = {______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______}, -}; - -#undef ______ -#undef X - // code u8 GetBattlerForBattleScript(u8 caseId) { @@ -4408,7 +4370,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 if (!gSpecialStatuses[battler].switchInAbilityDone) { gSpecialStatuses[battler].switchInAbilityDone = TRUE; - gBattlerAttacker = battler; + gBattleScripting.battler = battler; BattleScriptPushCursorAndCallback(BattleScript_FriskActivates); // Try activate effect++; } @@ -4970,10 +4932,10 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 BattleScriptPushCursorAndCallback(BattleScript_BadDreamsActivates); effect++; break; - SOLAR_POWER_HP_DROP: case ABILITY_SOLAR_POWER: if (IsBattlerWeatherAffected(battler, B_WEATHER_SUN)) { + SOLAR_POWER_HP_DROP: BattleScriptPushCursorAndCallback(BattleScript_SolarPowerActivates); gBattleMoveDamage = GetNonDynamaxMaxHP(battler) / 8; if (gBattleMoveDamage == 0) @@ -5045,31 +5007,70 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 case ABILITYEFFECT_WOULD_BLOCK: { u16 moveTarget = GetBattlerMoveTargetType(battler, move); - u16 battlerAbility = GetBattlerAbility(battler); - u16 targetAbility = GetBattlerAbility(gBattlerTarget); const u8 * battleScriptBlocksMove = NULL; - if ((gLastUsedAbility == ABILITY_SOUNDPROOF && gMovesInfo[move].soundMove && !(moveTarget & MOVE_TARGET_USER)) - || (gLastUsedAbility == ABILITY_BULLETPROOF && gMovesInfo[move].ballisticMove)) + switch (gLastUsedAbility) + { + case ABILITY_SOUNDPROOF: + if (gMovesInfo[move].soundMove && !(moveTarget & MOVE_TARGET_USER)) + effect = 1; + break; + case ABILITY_BULLETPROOF: + if (gMovesInfo[move].ballisticMove) + effect = 1; + break; + case ABILITY_DAZZLING: + case ABILITY_QUEENLY_MAJESTY: + case ABILITY_ARMOR_TAIL: + if (GetChosenMovePriority(gBattlerAttacker) > 0 && GetBattlerSide(gBattlerAttacker) != GetBattlerSide(battler)) + effect = 2; + break; + case ABILITY_GOOD_AS_GOLD: + if (IS_MOVE_STATUS(gCurrentMove) + && !(moveTarget & MOVE_TARGET_USER) + && !(moveTarget & MOVE_TARGET_OPPONENTS_FIELD) + && !(moveTarget & MOVE_TARGET_ALL_BATTLERS)) + effect = 3; + break; + } + + if (!effect) + { + switch (GetBattlerAbility(BATTLE_PARTNER(battler))) + { + case ABILITY_DAZZLING: + case ABILITY_QUEENLY_MAJESTY: + case ABILITY_ARMOR_TAIL: + if (GetChosenMovePriority(gBattlerAttacker) > 0 && GetBattlerSide(gBattlerAttacker) != GetBattlerSide(battler)) + effect = 4; + break; + } + } + + if (effect == 1) { if (gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS) gHitMarker |= HITMARKER_NO_PPDEDUCT; battleScriptBlocksMove = BattleScript_SoundproofProtected; - effect = 1; } - else if ((gLastUsedAbility == ABILITY_DAZZLING || gLastUsedAbility == ABILITY_QUEENLY_MAJESTY || gLastUsedAbility == ABILITY_ARMOR_TAIL || IsBattlerAlive(battler ^= BIT_FLANK)) - && (battlerAbility == ABILITY_DAZZLING || battlerAbility == ABILITY_QUEENLY_MAJESTY || battlerAbility == ABILITY_ARMOR_TAIL) - && GetChosenMovePriority(gBattlerAttacker) > 0 - && GetBattlerSide(gBattlerAttacker) != GetBattlerSide(battler)) + else if (effect == 2 || effect == 4) { + if (effect == 4) + gBattleScripting.battler = BATTLE_PARTNER(battler); + else + gBattleScripting.battler = battler; + if (gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS) gHitMarker |= HITMARKER_NO_PPDEDUCT; battleScriptBlocksMove = BattleScript_DazzlingProtected; - effect = 1; + } + else if (effect == 3) + { + battleScriptBlocksMove = BattleScript_GoodAsGoldActivates; } else if (GetChosenMovePriority(gBattlerAttacker) > 0 - && BlocksPrankster(move, gBattlerAttacker, gBattlerTarget, TRUE) - && !(IS_MOVE_STATUS(move) && (targetAbility == ABILITY_MAGIC_BOUNCE || gProtectStructs[gBattlerTarget].bounceMove))) + && BlocksPrankster(move, gBattlerAttacker, gBattlerTarget, TRUE) + && !(IS_MOVE_STATUS(move) && (gLastUsedAbility == ABILITY_MAGIC_BOUNCE || gProtectStructs[gBattlerTarget].bounceMove))) { if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE) || !(moveTarget & (MOVE_TARGET_BOTH | MOVE_TARGET_FOES_AND_ALLY))) CancelMultiTurnMoves(gBattlerAttacker); // Don't cancel moves that can hit two targets bc one target might not be protected @@ -5077,15 +5078,6 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 battleScriptBlocksMove = BattleScript_DarkTypePreventsPrankster; effect = 1; } - else if (GetBattlerAbility(gBattlerTarget) == ABILITY_GOOD_AS_GOLD - && IS_MOVE_STATUS(gCurrentMove) - && !(moveTarget & MOVE_TARGET_USER) - && !(moveTarget & MOVE_TARGET_OPPONENTS_FIELD) - && !(moveTarget & MOVE_TARGET_ALL_BATTLERS)) - { - battleScriptBlocksMove = BattleScript_GoodAsGoldActivates; - effect = 1; - } if (caseID == ABILITYEFFECT_WOULD_BLOCK) { if (effect && gLastUsedAbility != 0xFFFF) @@ -5562,6 +5554,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 && RandomWeighted(RNG_STATIC, 2, 1)) { gBattleScripting.moveEffect = MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_PARALYSIS; + PREPARE_ABILITY_BUFFER(gBattleTextBuff1, gLastUsedAbility); BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_AbilityStatusEffect; gHitMarker |= HITMARKER_STATUS_ABILITY_EFFECT; @@ -5579,6 +5572,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 && RandomWeighted(RNG_FLAME_BODY, 2, 1)) { gBattleScripting.moveEffect = MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_BURN; + PREPARE_ABILITY_BUFFER(gBattleTextBuff1, gLastUsedAbility); BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_AbilityStatusEffect; gHitMarker |= HITMARKER_STATUS_ABILITY_EFFECT; @@ -5851,6 +5845,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 if (IsBattlerAlive(battler) && (gMovesInfo[gCurrentMove].danceMove) && !gSpecialStatuses[battler].dancerUsedMove + && (gHitMarker & HITMARKER_ATTACKSTRING_PRINTED) && gBattlerAttacker != battler) { // Set bit and save Dancer mon's original target @@ -9994,7 +9989,7 @@ static inline s32 DoMoveDamageCalcVars(u32 move, u32 battlerAtk, u32 battlerDef, if (randomFactor) { - dmg *= 100 - RandomUniform(RNG_DAMAGE_MODIFIER, 0, 15); + dmg *= DMG_ROLL_PERCENT_HI - RandomUniform(RNG_DAMAGE_MODIFIER, 0, DMG_ROLL_PERCENT_HI - DMG_ROLL_PERCENT_LO); dmg /= 100; } @@ -10055,7 +10050,7 @@ static inline s32 DoFutureSightAttackDamageCalcVars(u32 move, u32 battlerAtk, u3 if (randomFactor) { - dmg *= 100 - RandomUniform(RNG_DAMAGE_MODIFIER, 0, 15); + dmg *= DMG_ROLL_PERCENT_HI - RandomUniform(RNG_DAMAGE_MODIFIER, 0, DMG_ROLL_PERCENT_HI - DMG_ROLL_PERCENT_LO); dmg /= 100; } @@ -10366,8 +10361,8 @@ uq4_12_t GetTypeEffectiveness(struct Pokemon *mon, u8 moveType) uq4_12_t GetTypeModifier(u32 atkType, u32 defType) { if (B_FLAG_INVERSE_BATTLE != 0 && FlagGet(B_FLAG_INVERSE_BATTLE)) - return GetInverseTypeMultiplier(sTypeEffectivenessTable[atkType][defType]); - return sTypeEffectivenessTable[atkType][defType]; + return GetInverseTypeMultiplier(gTypeEffectivenessTable[atkType][defType]); + return gTypeEffectivenessTable[atkType][defType]; } s32 GetStealthHazardDamageByTypesAndHP(u8 hazardType, u8 type1, u8 type2, u32 maxHp) @@ -10911,10 +10906,8 @@ u8 GetBattleMoveCategory(u32 moveId) if (IS_MOVE_STATUS(moveId)) return DAMAGE_CATEGORY_STATUS; - else if (gMovesInfo[moveId].type < TYPE_MYSTERY) - return DAMAGE_CATEGORY_PHYSICAL; else - return DAMAGE_CATEGORY_SPECIAL; + return gTypesInfo[gMovesInfo[moveId].type].damageCategory; } static bool32 TryRemoveScreens(u32 battler) diff --git a/src/data/abilities.h b/src/data/abilities.h index a65d4e8c24..8b81057b4f 100644 --- a/src/data/abilities.h +++ b/src/data/abilities.h @@ -1602,6 +1602,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = .name = _("Disguise"), .description = COMPOUND_STRING("Decoy protects it once."), .aiRating = 8, + .breakable = TRUE, .cantBeCopied = TRUE, .cantBeSwapped = TRUE, .cantBeTraced = TRUE, diff --git a/src/data/graphics/pokemon.h b/src/data/graphics/pokemon.h index b7818db6bd..bbcf22e258 100644 --- a/src/data/graphics/pokemon.h +++ b/src/data/graphics/pokemon.h @@ -21934,10 +21934,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //P_FAMILY_IRON_CROWN #if P_FAMILY_TERAPAGOS - // const u32 gMonFrontPic_TerapagosNormal[] = INCBIN_U32("graphics/pokemon/terapagos/front.4bpp.lz"); - // const u32 gMonPalette_TerapagosNormal[] = INCBIN_U32("graphics/pokemon/terapagos/normal.gbapal.lz"); - // const u32 gMonBackPic_TerapagosNormal[] = INCBIN_U32("graphics/pokemon/terapagos/back.4bpp.lz"); - // const u32 gMonShinyPalette_TerapagosNormal[] = INCBIN_U32("graphics/pokemon/terapagos/shiny.gbapal.lz"); + const u32 gMonFrontPic_TerapagosNormal[] = INCBIN_U32("graphics/pokemon/terapagos/anim_front.4bpp.lz"); + const u32 gMonPalette_TerapagosNormal[] = INCBIN_U32("graphics/pokemon/terapagos/normal.gbapal.lz"); + const u32 gMonBackPic_TerapagosNormal[] = INCBIN_U32("graphics/pokemon/terapagos/back.4bpp.lz"); + const u32 gMonShinyPalette_TerapagosNormal[] = INCBIN_U32("graphics/pokemon/terapagos/shiny.gbapal.lz"); const u8 gMonIcon_TerapagosNormal[] = INCBIN_U8("graphics/pokemon/terapagos/icon.4bpp"); #if P_FOOTPRINTS const u8 gMonFootprint_TerapagosNormal[] = INCBIN_U8("graphics/pokemon/terapagos/footprint.1bpp"); @@ -21950,10 +21950,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_FOLLOWERS_SHARE_PALETTE #endif //OW_FOLLOWERS_ENABLED - // const u32 gMonFrontPic_TerapagosTerastal[] = INCBIN_U32("graphics/pokemon/terapagos/terastal/front.4bpp.lz"); - // const u32 gMonPalette_TerapagosTerastal[] = INCBIN_U32("graphics/pokemon/terapagos/terastal/normal.gbapal.lz"); - // const u32 gMonBackPic_TerapagosTerastal[] = INCBIN_U32("graphics/pokemon/terapagos/terastal/back.4bpp.lz"); - // const u32 gMonShinyPalette_TerapagosTerastal[] = INCBIN_U32("graphics/pokemon/terapagos/terastal/shiny.gbapal.lz"); + const u32 gMonFrontPic_TerapagosTerastal[] = INCBIN_U32("graphics/pokemon/terapagos/terastal/anim_front.4bpp.lz"); + const u32 gMonPalette_TerapagosTerastal[] = INCBIN_U32("graphics/pokemon/terapagos/terastal/normal.gbapal.lz"); + const u32 gMonBackPic_TerapagosTerastal[] = INCBIN_U32("graphics/pokemon/terapagos/terastal/back.4bpp.lz"); + const u32 gMonShinyPalette_TerapagosTerastal[] = INCBIN_U32("graphics/pokemon/terapagos/terastal/shiny.gbapal.lz"); const u8 gMonIcon_TerapagosTerastal[] = INCBIN_U8("graphics/pokemon/terapagos/terastal/icon.4bpp"); #if P_FOOTPRINTS const u8 gMonFootprint_TerapagosTerastal[] = INCBIN_U8("graphics/pokemon/terapagos/terastal/footprint.1bpp"); diff --git a/src/data/item_icon_table.h b/src/data/item_icon_table.h index e69de29bb2..8b13789179 100644 --- a/src/data/item_icon_table.h +++ b/src/data/item_icon_table.h @@ -0,0 +1 @@ + diff --git a/src/data/moves_info.h b/src/data/moves_info.h index b58bc18444..2a4846955d 100644 --- a/src/data/moves_info.h +++ b/src/data/moves_info.h @@ -1,4 +1,5 @@ #include "battle_dynamax.h" +#include "battle_anim_scripts.h" #include "constants/battle.h" #include "constants/battle_move_effects.h" #include "constants/battle_script_commands.h" @@ -133,6 +134,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .mirrorMoveBanned = TRUE, .sketchBanned = TRUE, .assistBanned = TRUE, + .battleAnimScript = Move_NONE, }, [MOVE_POUND] = @@ -154,7 +156,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_POUND, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_POUND, }, [MOVE_KARATE_CHOP] = @@ -177,6 +180,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY}, + .battleAnimScript = Move_KARATE_CHOP, }, [MOVE_DOUBLE_SLAP] = @@ -198,6 +202,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_POUND}, + .battleAnimScript = Move_DOUBLE_SLAP, }, [MOVE_COMET_PUNCH] = @@ -219,7 +224,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_COMET_PUNCH, }, [MOVE_MEGA_PUNCH] = @@ -242,6 +248,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY, COMBO_STARTER_MIND_READER}, + .battleAnimScript = Move_MEGA_PUNCH, }, [MOVE_PAY_DAY] = @@ -264,7 +271,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_PAY_DAY, }, [MOVE_FIRE_PUNCH] = @@ -291,6 +299,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = COMBO_STARTER_FIRE_PUNCH, .contestComboMoves = {COMBO_STARTER_ICE_PUNCH, COMBO_STARTER_SUNNY_DAY, COMBO_STARTER_THUNDER_PUNCH}, + .battleAnimScript = Move_FIRE_PUNCH, }, [MOVE_ICE_PUNCH] = @@ -321,6 +330,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = COMBO_STARTER_ICE_PUNCH, .contestComboMoves = {COMBO_STARTER_FIRE_PUNCH, COMBO_STARTER_THUNDER_PUNCH}, + .battleAnimScript = Move_ICE_PUNCH, }, [MOVE_THUNDER_PUNCH] = @@ -347,6 +357,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = COMBO_STARTER_THUNDER_PUNCH, .contestComboMoves = {COMBO_STARTER_CHARGE, COMBO_STARTER_FIRE_PUNCH, COMBO_STARTER_ICE_PUNCH}, + .battleAnimScript = Move_THUNDER_PUNCH, }, [MOVE_SCRATCH] = @@ -368,6 +379,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_SCRATCH, .contestComboMoves = {COMBO_STARTER_LEER}, + .battleAnimScript = Move_SCRATCH, }, [MOVE_VISE_GRIP] = @@ -388,7 +400,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_VICE_GRIP, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_VISE_GRIP, }, [MOVE_GUILLOTINE] = @@ -410,6 +423,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_VICE_GRIP}, + .battleAnimScript = Move_GUILLOTINE, }, [MOVE_RAZOR_WIND] = @@ -434,7 +448,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_RAZOR_WIND, }, [MOVE_SWORDS_DANCE] = @@ -457,7 +472,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = COMBO_STARTER_SWORDS_DANCE, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SWORDS_DANCE, }, [MOVE_CUT] = @@ -480,6 +496,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SWORDS_DANCE}, + .battleAnimScript = Move_CUT, }, [MOVE_GUST] = @@ -502,7 +519,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_GUST, }, [MOVE_WING_ATTACK] = @@ -523,7 +541,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_WING_ATTACK, }, [MOVE_WHIRLWIND] = @@ -550,7 +569,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_WHIRLWIND, }, [MOVE_FLY] = @@ -576,7 +596,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FLY, }, [MOVE_BIND] = @@ -602,6 +623,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_VICE_GRIP}, + .battleAnimScript = Move_BIND, }, [MOVE_SLAM] = @@ -624,6 +646,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_POUND}, + .battleAnimScript = Move_SLAM, }, [MOVE_VINE_WHIP] = @@ -651,6 +674,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_GROWTH}, + .battleAnimScript = Move_VINE_WHIP, }, [MOVE_STOMP] = @@ -678,6 +702,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_LEER}, + .battleAnimScript = Move_STOMP, }, [MOVE_DOUBLE_KICK] = @@ -699,7 +724,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_DOUBLE_KICK, }, [MOVE_MEGA_KICK] = @@ -721,6 +747,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY, COMBO_STARTER_MIND_READER}, + .battleAnimScript = Move_MEGA_KICK, }, [MOVE_JUMP_KICK] = @@ -749,6 +776,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_MIND_READER}, + .battleAnimScript = Move_JUMP_KICK, }, [MOVE_ROLLING_KICK] = @@ -774,7 +802,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ROLLING_KICK, }, [MOVE_SAND_ATTACK] = @@ -797,6 +826,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = COMBO_STARTER_SAND_ATTACK, .contestComboMoves = {COMBO_STARTER_MUD_SLAP, COMBO_STARTER_SANDSTORM}, + .battleAnimScript = Move_SAND_ATTACK, }, [MOVE_HEADBUTT] = @@ -822,6 +852,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY}, + .battleAnimScript = Move_HEADBUTT, }, [MOVE_HORN_ATTACK] = @@ -843,6 +874,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = COMBO_STARTER_HORN_ATTACK, .contestComboMoves = {COMBO_STARTER_LEER}, + .battleAnimScript = Move_HORN_ATTACK, }, [MOVE_FURY_ATTACK] = @@ -864,6 +896,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_HORN_ATTACK, COMBO_STARTER_PECK}, + .battleAnimScript = Move_FURY_ATTACK, }, [MOVE_HORN_DRILL] = @@ -885,6 +918,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_HORN_ATTACK}, + .battleAnimScript = Move_HORN_DRILL, }, [MOVE_TACKLE] = @@ -912,6 +946,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_DEFENSE_CURL, COMBO_STARTER_HARDEN, COMBO_STARTER_LEER}, + .battleAnimScript = Move_TACKLE, }, [MOVE_BODY_SLAM] = @@ -938,7 +973,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_BODY_SLAM, }, [MOVE_WRAP] = @@ -962,7 +998,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_WRAP, }, [MOVE_TAKE_DOWN] = @@ -985,6 +1022,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY, COMBO_STARTER_HARDEN}, + .battleAnimScript = Move_TAKE_DOWN, }, [MOVE_THRASH] = @@ -1011,6 +1049,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAGE}, + .battleAnimScript = Move_THRASH, }, [MOVE_DOUBLE_EDGE] = @@ -1033,6 +1072,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY, COMBO_STARTER_HARDEN}, + .battleAnimScript = Move_DOUBLE_EDGE, }, [MOVE_TAIL_WHIP] = @@ -1055,6 +1095,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARM}, + .battleAnimScript = Move_TAIL_WHIP, }, [MOVE_POISON_STING] = @@ -1078,7 +1119,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_PREV_MON, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_POISON_STING, }, [MOVE_TWINEEDLE] = @@ -1104,7 +1146,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_PREV_MON, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_TWINEEDLE, }, [MOVE_PIN_MISSILE] = @@ -1124,7 +1167,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_PIN_MISSILE, }, [MOVE_LEER] = @@ -1147,6 +1191,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = COMBO_STARTER_LEER, .contestComboMoves = {COMBO_STARTER_RAGE, COMBO_STARTER_SCARY_FACE}, + .battleAnimScript = Move_LEER, }, [MOVE_BITE] = @@ -1173,6 +1218,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_LEER, COMBO_STARTER_SCARY_FACE}, + .battleAnimScript = Move_BITE, }, [MOVE_GROWL] = @@ -1197,6 +1243,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARM}, + .battleAnimScript = Move_GROWL, }, [MOVE_ROAR] = @@ -1223,7 +1270,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ROAR, }, [MOVE_SING] = @@ -1247,7 +1295,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = COMBO_STARTER_SING, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SING, }, [MOVE_SUPERSONIC] = @@ -1271,7 +1320,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SUPERSONIC, }, [MOVE_SONIC_BOOM] = @@ -1292,7 +1342,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SONIC_BOOM, }, [MOVE_DISABLE] = @@ -1321,7 +1372,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_DISABLE, }, [MOVE_ACID] = @@ -1349,7 +1401,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ACID, }, [MOVE_EMBER] = @@ -1374,6 +1427,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, + .battleAnimScript = Move_EMBER, }, [MOVE_FLAMETHROWER] = @@ -1398,6 +1452,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, + .battleAnimScript = Move_FLAMETHROWER, }, [MOVE_MIST] = @@ -1421,7 +1476,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_MIST, }, [MOVE_WATER_GUN] = @@ -1442,6 +1498,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_MUD_SPORT, COMBO_STARTER_RAIN_DANCE, COMBO_STARTER_WATER_SPORT}, + .battleAnimScript = Move_WATER_GUN, }, [MOVE_HYDRO_PUMP] = @@ -1462,6 +1519,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, + .battleAnimScript = Move_HYDRO_PUMP, }, [MOVE_SURF] = @@ -1484,6 +1542,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = COMBO_STARTER_SURF, .contestComboMoves = {COMBO_STARTER_DIVE, COMBO_STARTER_RAIN_DANCE}, + .battleAnimScript = Move_SURF, }, [MOVE_ICE_BEAM] = @@ -1514,6 +1573,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_HAIL}, + .battleAnimScript = Move_ICE_BEAM, }, [MOVE_BLIZZARD] = @@ -1543,6 +1603,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_HAIL, COMBO_STARTER_POWDER_SNOW}, + .battleAnimScript = Move_BLIZZARD, }, [MOVE_PSYBEAM] = @@ -1567,6 +1628,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CALM_MIND}, + .battleAnimScript = Move_PSYBEAM, }, [MOVE_BUBBLE_BEAM] = @@ -1591,6 +1653,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, + .battleAnimScript = Move_BUBBLE_BEAM, }, [MOVE_AURORA_BEAM] = @@ -1615,6 +1678,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_HAIL}, + .battleAnimScript = Move_AURORA_BEAM, }, [MOVE_HYPER_BEAM] = @@ -1637,7 +1701,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_HYPER_BEAM, }, [MOVE_PECK] = @@ -1658,7 +1723,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = COMBO_STARTER_PECK, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_PECK, }, [MOVE_DRILL_PECK] = @@ -1680,6 +1746,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_PECK}, + .battleAnimScript = Move_DRILL_PECK, }, [MOVE_SUBMISSION] = @@ -1702,6 +1769,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_MIND_READER}, + .battleAnimScript = Move_SUBMISSION, }, [MOVE_LOW_KICK] = @@ -1722,7 +1790,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_LOW_KICK, }, [MOVE_COUNTER] = @@ -1749,6 +1818,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_TAUNT}, + .battleAnimScript = Move_COUNTER, }, [MOVE_SEISMIC_TOSS] = @@ -1771,6 +1841,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FAKE_OUT}, + .battleAnimScript = Move_SEISMIC_TOSS, }, [MOVE_STRENGTH] = @@ -1791,7 +1862,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_STRENGTH, }, [MOVE_ABSORB] = @@ -1814,6 +1886,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_GROWTH}, + .battleAnimScript = Move_ABSORB, }, [MOVE_MEGA_DRAIN] = @@ -1835,6 +1908,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_GROWTH}, + .battleAnimScript = Move_MEGA_DRAIN, }, [MOVE_LEECH_SEED] = @@ -1857,6 +1931,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_LEECH_SEED, .contestComboMoves = {COMBO_STARTER_GROWTH, COMBO_STARTER_WORRY_SEED}, + .battleAnimScript = Move_LEECH_SEED, }, [MOVE_GROWTH] = @@ -1880,7 +1955,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = COMBO_STARTER_GROWTH, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_GROWTH, }, [MOVE_RAZOR_LEAF] = @@ -1903,6 +1979,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_GROWTH}, + .battleAnimScript = Move_RAZOR_LEAF, }, [MOVE_SOLAR_BEAM] = @@ -1926,6 +2003,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_GROWTH, COMBO_STARTER_SUNNY_DAY}, + .battleAnimScript = Move_SOLAR_BEAM, }, [MOVE_POISON_POWDER] = @@ -1949,6 +2027,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SWEET_SCENT}, + .battleAnimScript = Move_POISON_POWDER, }, [MOVE_STUN_SPORE] = @@ -1972,6 +2051,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SWEET_SCENT}, + .battleAnimScript = Move_STUN_SPORE, }, [MOVE_SLEEP_POWDER] = @@ -1995,6 +2075,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SWEET_SCENT}, + .battleAnimScript = Move_SLEEP_POWDER, }, [MOVE_PETAL_DANCE] = @@ -2028,6 +2109,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_GROWTH}, + .battleAnimScript = Move_PETAL_DANCE, }, [MOVE_STRING_SHOT] = @@ -2049,7 +2131,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_PREV_MON, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_STRING_SHOT, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_STRING_SHOT, }, [MOVE_DRAGON_RAGE] = @@ -2072,6 +2155,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = COMBO_STARTER_DRAGON_RAGE, .contestComboMoves = {COMBO_STARTER_DRAGON_BREATH, COMBO_STARTER_DRAGON_DANCE, COMBO_STARTER_DRAGON_RUSH, COMBO_STARTER_DRAGON_TAIL}, + .battleAnimScript = Move_DRAGON_RAGE, }, [MOVE_FIRE_SPIN] = @@ -2096,6 +2180,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, + .battleAnimScript = Move_FIRE_SPIN, }, [MOVE_THUNDER_SHOCK] = @@ -2120,6 +2205,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARGE}, + .battleAnimScript = Move_THUNDER_SHOCK, }, [MOVE_THUNDERBOLT] = @@ -2144,6 +2230,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARGE}, + .battleAnimScript = Move_THUNDERBOLT, }, [MOVE_THUNDER_WAVE] = @@ -2166,6 +2253,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARGE}, + .battleAnimScript = Move_THUNDER_WAVE, }, [MOVE_THUNDER] = @@ -2191,6 +2279,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARGE, COMBO_STARTER_LOCK_ON, COMBO_STARTER_RAIN_DANCE}, + .battleAnimScript = Move_THUNDER, }, [MOVE_ROCK_THROW] = @@ -2210,7 +2299,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_ROCK_THROW, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ROCK_THROW, }, [MOVE_EARTHQUAKE] = @@ -2233,7 +2323,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_EARTHQUAKE, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_EARTHQUAKE, }, [MOVE_FISSURE] = @@ -2256,6 +2347,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_EARTHQUAKE}, + .battleAnimScript = Move_FISSURE, }, [MOVE_DIG] = @@ -2281,7 +2373,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_DIG, }, [MOVE_TOXIC] = @@ -2303,7 +2396,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_TOXIC, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_TOXIC, }, [MOVE_CONFUSION] = @@ -2328,6 +2422,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_CONFUSION, .contestComboMoves = {COMBO_STARTER_CALM_MIND, COMBO_STARTER_KINESIS, COMBO_STARTER_PSYCHIC}, + .battleAnimScript = Move_CONFUSION, }, [MOVE_PSYCHIC] = @@ -2352,6 +2447,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_PSYCHIC, .contestComboMoves = {COMBO_STARTER_CALM_MIND, COMBO_STARTER_CONFUSION, COMBO_STARTER_KINESIS}, + .battleAnimScript = Move_PSYCHIC, }, [MOVE_HYPNOSIS] = @@ -2373,7 +2469,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_HYPNOSIS, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_HYPNOSIS, }, [MOVE_MEDITATE] = @@ -2398,6 +2495,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CALM_MIND}, + .battleAnimScript = Move_MEDITATE, }, [MOVE_AGILITY] = @@ -2422,6 +2520,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_DOUBLE_TEAM}, + .battleAnimScript = Move_AGILITY, }, [MOVE_QUICK_ATTACK] = @@ -2443,6 +2542,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_DOUBLE_TEAM}, + .battleAnimScript = Move_QUICK_ATTACK, }, [MOVE_RAGE] = @@ -2463,7 +2563,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_REPETITION_NOT_BORING, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = COMBO_STARTER_RAGE, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_RAGE, }, [MOVE_TELEPORT] = @@ -2487,6 +2588,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CONFUSION, COMBO_STARTER_DOUBLE_TEAM, COMBO_STARTER_KINESIS, COMBO_STARTER_PSYCHIC}, + .battleAnimScript = Move_TELEPORT, }, [MOVE_NIGHT_SHADE] = @@ -2506,7 +2608,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_NIGHT_SHADE, }, [MOVE_MIMIC] = @@ -2535,7 +2638,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONE, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_MIMIC, }, [MOVE_SCREECH] = @@ -2559,7 +2663,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SCREECH, }, [MOVE_DOUBLE_TEAM] = @@ -2583,7 +2688,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE_ONCE, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = COMBO_STARTER_DOUBLE_TEAM, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_DOUBLE_TEAM, }, [MOVE_RECOVER] = @@ -2614,7 +2720,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_RECOVER, }, [MOVE_HARDEN] = @@ -2638,7 +2745,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE_ONCE, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_HARDEN, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_HARDEN, }, [MOVE_MINIMIZE] = @@ -2662,7 +2770,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE_ONCE, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_MINIMIZE, }, [MOVE_SMOKESCREEN] = @@ -2685,6 +2794,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SMOG}, + .battleAnimScript = Move_SMOKESCREEN, }, [MOVE_CONFUSE_RAY] = @@ -2706,7 +2816,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_CONFUSE_RAY, }, [MOVE_WITHDRAW] = @@ -2731,6 +2842,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, + .battleAnimScript = Move_WITHDRAW, }, [MOVE_DEFENSE_CURL] = @@ -2754,7 +2866,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE_ONCE, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = COMBO_STARTER_DEFENSE_CURL, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_DEFENSE_CURL, }, [MOVE_BARRIER] = @@ -2778,7 +2891,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_BARRIER, }, [MOVE_LIGHT_SCREEN] = @@ -2803,6 +2917,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CALM_MIND}, + .battleAnimScript = Move_LIGHT_SCREEN, }, [MOVE_HAZE] = @@ -2827,6 +2942,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_HAIL}, + .battleAnimScript = Move_HAZE, }, [MOVE_REFLECT] = @@ -2851,6 +2967,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CALM_MIND}, + .battleAnimScript = Move_REFLECT, }, [MOVE_FOCUS_ENERGY] = @@ -2875,7 +2992,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = COMBO_STARTER_FOCUS_ENERGY, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FOCUS_ENERGY, }, [MOVE_BIDE] = @@ -2899,7 +3017,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_BIDE, }, [MOVE_METRONOME] = @@ -2928,7 +3047,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_REPETITION_NOT_BORING, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_METRONOME, }, [MOVE_MIRROR_MOVE] = @@ -2956,7 +3076,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONE, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_MIRROR_MOVE, }, [MOVE_SELF_DESTRUCT] = @@ -2977,7 +3098,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SELF_DESTRUCT, }, [MOVE_EGG_BOMB] = @@ -2999,6 +3121,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SOFT_BOILED}, + .battleAnimScript = Move_EGG_BOMB, }, [MOVE_LICK] = @@ -3023,7 +3146,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_LICK, }, [MOVE_SMOG] = @@ -3047,7 +3171,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_SMOG, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SMOG, }, [MOVE_SLUDGE] = @@ -3072,6 +3197,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_SLUDGE, .contestComboMoves = {COMBO_STARTER_SLUDGE_BOMB}, + .battleAnimScript = Move_SLUDGE, }, [MOVE_BONE_CLUB] = @@ -3096,6 +3222,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_BONE_CLUB, .contestComboMoves = {COMBO_STARTER_BONEMERANG, COMBO_STARTER_BONE_RUSH, COMBO_STARTER_SHADOW_BONE}, + .battleAnimScript = Move_BONE_CLUB, }, [MOVE_FIRE_BLAST] = @@ -3120,6 +3247,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, + .battleAnimScript = Move_FIRE_BLAST, }, [MOVE_WATERFALL] = @@ -3147,6 +3275,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, + .battleAnimScript = Move_WATERFALL, }, [MOVE_CLAMP] = @@ -3172,6 +3301,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, + .battleAnimScript = Move_CLAMP, }, [MOVE_SWIFT] = @@ -3191,7 +3321,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_FIRST, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SWIFT, }, [MOVE_SKULL_BASH] = @@ -3220,7 +3351,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SKULL_BASH, }, [MOVE_SPIKE_CANNON] = @@ -3240,7 +3372,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SPIKE_CANNON, }, [MOVE_CONSTRICT] = @@ -3265,7 +3398,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_PREV_MON, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_CONSTRICT, }, [MOVE_AMNESIA] = @@ -3289,7 +3423,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_AMNESIA, }, [MOVE_KINESIS] = @@ -3312,6 +3447,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_KINESIS, .contestComboMoves = {COMBO_STARTER_CONFUSION, COMBO_STARTER_PSYCHIC}, + .battleAnimScript = Move_KINESIS, }, [MOVE_SOFT_BOILED] = @@ -3336,7 +3472,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = COMBO_STARTER_SOFT_BOILED, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SOFT_BOILED, }, [MOVE_HIGH_JUMP_KICK] = @@ -3365,6 +3502,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_MIND_READER}, + .battleAnimScript = Move_HIGH_JUMP_KICK, }, [MOVE_GLARE] = @@ -3393,6 +3531,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_LEER}, + .battleAnimScript = Move_GLARE, }, [MOVE_DREAM_EATER] = @@ -3414,6 +3553,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CALM_MIND, COMBO_STARTER_HYPNOSIS}, + .battleAnimScript = Move_DREAM_EATER, }, [MOVE_POISON_GAS] = @@ -3441,7 +3581,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_POISON_GAS, }, [MOVE_BARRAGE] = @@ -3462,7 +3603,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_BARRAGE, }, [MOVE_LEECH_LIFE] = @@ -3485,7 +3627,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_PREV_MON, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_LEECH_LIFE, }, [MOVE_LOVELY_KISS] = @@ -3507,7 +3650,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_LOVELY_KISS, }, [MOVE_SKY_ATTACK] = @@ -3537,7 +3681,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SKY_ATTACK, }, [MOVE_TRANSFORM] = @@ -3566,7 +3711,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_REPETITION_NOT_BORING, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_TRANSFORM, }, [MOVE_BUBBLE] = @@ -3591,6 +3737,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, + .battleAnimScript = Move_BUBBLE, }, [MOVE_DIZZY_PUNCH] = @@ -3616,7 +3763,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_DIZZY_PUNCH, }, [MOVE_SPORE] = @@ -3639,7 +3787,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SPORE, }, [MOVE_FLASH] = @@ -3661,7 +3810,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FLASH, }, [MOVE_PSYWAVE] = @@ -3682,6 +3832,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CALM_MIND}, + .battleAnimScript = Move_PSYWAVE, }, [MOVE_SPLASH] = @@ -3705,7 +3856,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_LAST, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SPLASH, }, [MOVE_ACID_ARMOR] = @@ -3729,7 +3881,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ACID_ARMOR, }, [MOVE_CRABHAMMER] = @@ -3752,6 +3905,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE, COMBO_STARTER_SWORDS_DANCE}, + .battleAnimScript = Move_CRABHAMMER, }, [MOVE_EXPLOSION] = @@ -3772,7 +3926,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_EXPLOSION, }, [MOVE_FURY_SWIPES] = @@ -3794,6 +3949,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SCRATCH}, + .battleAnimScript = Move_FURY_SWIPES, }, [MOVE_BONEMERANG] = @@ -3815,6 +3971,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_BONEMERANG, .contestComboMoves = {COMBO_STARTER_BONE_CLUB, COMBO_STARTER_BONE_RUSH, COMBO_STARTER_SHADOW_BONE}, + .battleAnimScript = Move_BONEMERANG, }, [MOVE_REST] = @@ -3840,6 +3997,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = COMBO_STARTER_REST, .contestComboMoves = {COMBO_STARTER_BELLY_DRUM, COMBO_STARTER_CHARM, COMBO_STARTER_YAWN}, + .battleAnimScript = Move_REST, }, [MOVE_ROCK_SLIDE] = @@ -3864,6 +4022,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_ROCK_THROW}, + .battleAnimScript = Move_ROCK_SLIDE, }, [MOVE_HYPER_FANG] = @@ -3889,7 +4048,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_HYPER_FANG, }, [MOVE_SHARPEN] = @@ -3913,7 +4073,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SHARPEN, }, [MOVE_CONVERSION] = @@ -3937,7 +4098,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_CONVERSION, }, [MOVE_TRI_ATTACK] = @@ -3962,6 +4124,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_LOCK_ON}, + .battleAnimScript = Move_TRI_ATTACK, }, [MOVE_SUPER_FANG] = @@ -3984,6 +4147,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SCARY_FACE}, + .battleAnimScript = Move_SUPER_FANG, }, [MOVE_SLASH] = @@ -4007,6 +4171,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SCRATCH, COMBO_STARTER_SWORDS_DANCE}, + .battleAnimScript = Move_SLASH, }, [MOVE_SUBSTITUTE] = @@ -4031,7 +4196,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE_ONCE, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SUBSTITUTE, }, [MOVE_STRUGGLE] = @@ -4069,6 +4235,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .encoreBanned = TRUE, .assistBanned = TRUE, .sketchBanned = TRUE, + .battleAnimScript = Move_STRUGGLE, }, [MOVE_SKETCH] = @@ -4100,7 +4267,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONE, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SKETCH, }, [MOVE_TRIPLE_KICK] = @@ -4123,6 +4291,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY}, + .battleAnimScript = Move_TRIPLE_KICK, }, [MOVE_THIEF] = @@ -4151,7 +4320,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_THIEF, }, [MOVE_SPIDER_WEB] = @@ -4175,6 +4345,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_STRING_SHOT}, + .battleAnimScript = Move_SPIDER_WEB, }, [MOVE_MIND_READER] = @@ -4195,7 +4366,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_MIND_READER, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_MIND_READER, }, [MOVE_NIGHTMARE] = @@ -4217,7 +4389,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_NIGHTMARE, }, [MOVE_FLAME_WHEEL] = @@ -4244,6 +4417,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, + .battleAnimScript = Move_FLAME_WHEEL, }, [MOVE_SNORE] = @@ -4271,6 +4445,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_REST}, + .battleAnimScript = Move_SNORE, }, [MOVE_CURSE] = @@ -4294,7 +4469,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_NEXT_APPEAL_LATER, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_CURSE, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_CURSE, }, [MOVE_FLAIL] = @@ -4316,6 +4492,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_ENDURE}, + .battleAnimScript = Move_FLAIL, }, [MOVE_CONVERSION_2] = @@ -4339,7 +4516,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_CONVERSION_2, }, [MOVE_AEROBLAST] = @@ -4361,7 +4539,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_AEROBLAST, }, [MOVE_COTTON_SPORE] = @@ -4384,7 +4563,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_COTTON_SPORE, }, [MOVE_REVERSAL] = @@ -4406,6 +4586,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_ENDURE}, + .battleAnimScript = Move_REVERSAL, }, [MOVE_SPITE] = @@ -4429,6 +4610,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CURSE}, + .battleAnimScript = Move_SPITE, }, [MOVE_POWDER_SNOW] = @@ -4457,6 +4639,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = COMBO_STARTER_POWDER_SNOW, .contestComboMoves = {COMBO_STARTER_HAIL}, + .battleAnimScript = Move_POWDER_SNOW, }, [MOVE_PROTECT] = @@ -4481,6 +4664,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_HARDEN}, + .battleAnimScript = Move_PROTECT, }, [MOVE_MACH_PUNCH] = @@ -4502,7 +4686,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_MACH_PUNCH, }, [MOVE_SCARY_FACE] = @@ -4525,6 +4710,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_SCARY_FACE, .contestComboMoves = {COMBO_STARTER_LEER, COMBO_STARTER_RAGE}, + .battleAnimScript = Move_SCARY_FACE, }, [MOVE_FEINT_ATTACK] = @@ -4546,6 +4732,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FAKE_OUT, COMBO_STARTER_LEER, COMBO_STARTER_POUND}, + .battleAnimScript = Move_FEINT_ATTACK, }, [MOVE_SWEET_KISS] = @@ -4568,6 +4755,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARM}, + .battleAnimScript = Move_SWEET_KISS, }, [MOVE_BELLY_DRUM] = @@ -4591,7 +4779,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = COMBO_STARTER_BELLY_DRUM, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_BELLY_DRUM, }, [MOVE_SLUDGE_BOMB] = @@ -4617,6 +4806,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_SLUDGE_BOMB, .contestComboMoves = {COMBO_STARTER_SLUDGE}, + .battleAnimScript = Move_SLUDGE_BOMB, }, [MOVE_MUD_SLAP] = @@ -4641,6 +4831,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = COMBO_STARTER_MUD_SLAP, .contestComboMoves = {COMBO_STARTER_MUD_SPORT, COMBO_STARTER_SAND_ATTACK, COMBO_STARTER_SANDSTORM}, + .battleAnimScript = Move_MUD_SLAP, }, [MOVE_OCTAZOOKA] = @@ -4666,6 +4857,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_LOCK_ON, COMBO_STARTER_RAIN_DANCE}, + .battleAnimScript = Move_OCTAZOOKA, }, [MOVE_SPIKES] = @@ -4691,7 +4883,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SPIKES, }, [MOVE_ZAP_CANNON] = @@ -4717,6 +4910,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARGE, COMBO_STARTER_LOCK_ON}, + .battleAnimScript = Move_ZAP_CANNON, }, [MOVE_FORESIGHT] = @@ -4739,7 +4933,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FORESIGHT, }, [MOVE_DESTINY_BOND] = @@ -4767,6 +4962,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CURSE, COMBO_STARTER_ENDURE, COMBO_STARTER_MEAN_LOOK}, + .battleAnimScript = Move_DESTINY_BOND, }, [MOVE_PERISH_SONG] = @@ -4792,6 +4988,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_MEAN_LOOK, COMBO_STARTER_SING}, + .battleAnimScript = Move_PERISH_SONG, }, [MOVE_ICY_WIND] = @@ -4817,6 +5014,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_HAIL}, + .battleAnimScript = Move_ICY_WIND, }, [MOVE_DETECT] = @@ -4843,6 +5041,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_TAUNT}, + .battleAnimScript = Move_DETECT, }, [MOVE_BONE_RUSH] = @@ -4863,6 +5062,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_BONE_RUSH, .contestComboMoves = {COMBO_STARTER_BONE_CLUB, COMBO_STARTER_BONEMERANG, COMBO_STARTER_FOCUS_ENERGY, COMBO_STARTER_SHADOW_BONE}, + .battleAnimScript = Move_BONE_RUSH, }, [MOVE_LOCK_ON] = @@ -4883,7 +5083,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_LOCK_ON, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_LOCK_ON, }, [MOVE_OUTRAGE] = @@ -4909,7 +5110,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_OUTRAGE, }, [MOVE_SANDSTORM] = @@ -4933,7 +5135,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_SANDSTORM, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SANDSTORM, }, [MOVE_GIGA_DRAIN] = @@ -4956,6 +5159,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_GROWTH}, + .battleAnimScript = Move_GIGA_DRAIN, }, [MOVE_ENDURE] = @@ -4981,7 +5185,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE_ONCE, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_ENDURE, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ENDURE, }, [MOVE_CHARM] = @@ -5003,7 +5208,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = COMBO_STARTER_CHARM, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_CHARM, }, [MOVE_ROLLOUT] = @@ -5027,6 +5233,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_DEFENSE_CURL, COMBO_STARTER_HARDEN}, + .battleAnimScript = Move_ROLLOUT, }, [MOVE_FALSE_SWIPE] = @@ -5046,6 +5253,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SWORDS_DANCE}, + .battleAnimScript = Move_FALSE_SWIPE, }, [MOVE_SWAGGER] = @@ -5067,7 +5275,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_FIRST, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SWAGGER, }, [MOVE_MILK_DRINK] = @@ -5092,7 +5301,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_MILK_DRINK, }, [MOVE_SPARK] = @@ -5118,6 +5328,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARGE}, + .battleAnimScript = Move_SPARK, }, [MOVE_FURY_CUTTER] = @@ -5146,6 +5357,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SWORDS_DANCE}, + .battleAnimScript = Move_FURY_CUTTER, }, [MOVE_STEEL_WING] = @@ -5171,7 +5383,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_STEEL_WING, }, [MOVE_MEAN_LOOK] = @@ -5195,6 +5408,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = COMBO_STARTER_MEAN_LOOK, .contestComboMoves = {COMBO_STARTER_CURSE}, + .battleAnimScript = Move_MEAN_LOOK, }, [MOVE_ATTRACT] = @@ -5217,7 +5431,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ATTRACT, }, [MOVE_SLEEP_TALK] = @@ -5248,6 +5463,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_REST}, + .battleAnimScript = Move_SLEEP_TALK, }, [MOVE_HEAL_BELL] = @@ -5274,6 +5490,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = COMBO_STARTER_HEAL_BELL, .contestComboMoves = {COMBO_STARTER_LUCKY_CHANT}, + .battleAnimScript = Move_HEAL_BELL, }, [MOVE_RETURN] = @@ -5294,7 +5511,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_EXCITE_AUDIENCE_IN_ANY_CONTEST, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_RETURN, }, [MOVE_PRESENT] = @@ -5315,7 +5533,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_REPETITION_NOT_BORING, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_PRESENT, }, [MOVE_FRUSTRATION] = @@ -5336,7 +5555,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_EXCITE_AUDIENCE_IN_ANY_CONTEST, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FRUSTRATION, }, [MOVE_SAFEGUARD] = @@ -5360,7 +5580,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SAFEGUARD, }, [MOVE_PAIN_SPLIT] = @@ -5382,6 +5603,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_ENDURE}, + .battleAnimScript = Move_PAIN_SPLIT, }, [MOVE_SACRED_FIRE] = @@ -5407,6 +5629,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, + .battleAnimScript = Move_SACRED_FIRE, }, [MOVE_MAGNITUDE] = @@ -5428,7 +5651,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_MAGNITUDE, }, [MOVE_DYNAMIC_PUNCH] = @@ -5455,6 +5679,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY, COMBO_STARTER_MIND_READER}, + .battleAnimScript = Move_DYNAMIC_PUNCH, }, [MOVE_MEGAHORN] = @@ -5475,7 +5700,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_MEGAHORN, }, [MOVE_DRAGON_BREATH] = @@ -5501,6 +5727,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = COMBO_STARTER_DRAGON_BREATH, .contestComboMoves = {COMBO_STARTER_DRAGON_DANCE, COMBO_STARTER_DRAGON_RAGE, COMBO_STARTER_DRAGON_RUSH, COMBO_STARTER_DRAGON_TAIL}, + .battleAnimScript = Move_DRAGON_BREATH, }, [MOVE_BATON_PASS] = @@ -5523,7 +5750,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_BATON_PASS, }, [MOVE_ENCORE] = @@ -5547,7 +5775,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ENCORE, }, [MOVE_PURSUIT] = @@ -5569,7 +5798,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_PURSUIT, }, [MOVE_RAPID_SPIN] = @@ -5602,7 +5832,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE_ONCE, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_RAPID_SPIN, }, [MOVE_SWEET_SCENT] = @@ -5624,7 +5855,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = COMBO_STARTER_SWEET_SCENT, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SWEET_SCENT, }, [MOVE_IRON_TAIL] = @@ -5649,7 +5881,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_IRON_TAIL, }, [MOVE_METAL_CLAW] = @@ -5676,6 +5909,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_METAL_SOUND}, + .battleAnimScript = Move_METAL_CLAW, }, [MOVE_VITAL_THROW] = @@ -5697,6 +5931,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FAKE_OUT}, + .battleAnimScript = Move_VITAL_THROW, }, [MOVE_MORNING_SUN] = @@ -5722,6 +5957,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, + .battleAnimScript = Move_MORNING_SUN, }, [MOVE_SYNTHESIS] = @@ -5747,6 +5983,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, + .battleAnimScript = Move_SYNTHESIS, }, [MOVE_MOONLIGHT] = @@ -5772,6 +6009,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, + .battleAnimScript = Move_MOONLIGHT, }, [MOVE_HIDDEN_POWER] = @@ -5791,7 +6029,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_REPETITION_NOT_BORING, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_HIDDEN_POWER, }, [MOVE_CROSS_CHOP] = @@ -5814,6 +6053,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY}, + .battleAnimScript = Move_CROSS_CHOP, }, [MOVE_TWISTER] = @@ -5839,7 +6079,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_TWISTER, }, [MOVE_RAIN_DANCE] = @@ -5862,7 +6103,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_RAIN_DANCE, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_RAIN_DANCE, }, [MOVE_SUNNY_DAY] = @@ -5885,7 +6127,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = COMBO_STARTER_SUNNY_DAY, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SUNNY_DAY, }, [MOVE_CRUNCH] = @@ -5920,6 +6163,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SCARY_FACE}, + .battleAnimScript = Move_CRUNCH, }, [MOVE_MIRROR_COAT] = @@ -5944,6 +6188,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_TAUNT}, + .battleAnimScript = Move_MIRROR_COAT, }, [MOVE_PSYCH_UP] = @@ -5968,7 +6213,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_PSYCH_UP, }, [MOVE_EXTREME_SPEED] = @@ -5989,7 +6235,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_EXTREME_SPEED, }, [MOVE_ANCIENT_POWER] = @@ -6015,7 +6262,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ANCIENT_POWER, }, [MOVE_SHADOW_BALL] = @@ -6040,7 +6288,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SHADOW_BALL, }, [MOVE_FUTURE_SIGHT] = @@ -6069,6 +6318,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CALM_MIND, COMBO_STARTER_CONFUSION, COMBO_STARTER_KINESIS, COMBO_STARTER_PSYCHIC}, + .battleAnimScript = Move_FUTURE_SIGHT, }, [MOVE_ROCK_SMASH] = @@ -6093,7 +6343,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_WITH_GOOD_CONDITION, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ROCK_SMASH, }, [MOVE_WHIRLPOOL] = @@ -6118,6 +6369,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, + .battleAnimScript = Move_WHIRLPOOL, }, [MOVE_BEAT_UP] = @@ -6137,7 +6389,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_BEAT_UP, }, [MOVE_FAKE_OUT] = @@ -6162,7 +6415,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = COMBO_STARTER_FAKE_OUT, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FAKE_OUT, }, [MOVE_UPROAR] = @@ -6194,7 +6448,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_UPROAR, }, [MOVE_STOCKPILE] = @@ -6218,7 +6473,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE_ONCE, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_STOCKPILE, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_STOCKPILE, }, [MOVE_SPIT_UP] = @@ -6240,6 +6496,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_STOCKPILE}, + .battleAnimScript = Move_SPIT_UP, }, [MOVE_SWALLOW] = @@ -6265,6 +6522,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_STOCKPILE}, + .battleAnimScript = Move_SWALLOW, }, [MOVE_HEAT_WAVE] = @@ -6290,6 +6548,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, + .battleAnimScript = Move_HEAT_WAVE, }, [MOVE_HAIL] = @@ -6312,7 +6571,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = COMBO_STARTER_HAIL, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_HAIL, }, [MOVE_TORMENT] = @@ -6334,7 +6594,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_TORMENT, }, [MOVE_FLATTER] = @@ -6357,6 +6618,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARM}, + .battleAnimScript = Move_FLATTER, }, [MOVE_WILL_O_WISP] = @@ -6379,6 +6641,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, + .battleAnimScript = Move_WILL_O_WISP, }, [MOVE_MEMENTO] = @@ -6399,7 +6662,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_MEMENTO, }, [MOVE_FACADE] = @@ -6421,6 +6685,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, + .battleAnimScript = Move_FACADE, }, [MOVE_FOCUS_PUNCH] = @@ -6450,6 +6715,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY}, + .battleAnimScript = Move_FOCUS_PUNCH, }, [MOVE_SMELLING_SALTS] = @@ -6474,7 +6740,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_PREV_MON, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SMELLING_SALTS, }, [MOVE_FOLLOW_ME] = @@ -6500,7 +6767,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FOLLOW_ME, }, [MOVE_NATURE_POWER] = @@ -6527,7 +6795,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_NATURE_POWER, }, [MOVE_CHARGE] = @@ -6551,7 +6820,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_CHARGE, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_CHARGE, }, [MOVE_TAUNT] = @@ -6574,7 +6844,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_TAUNT, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_TAUNT, }, [MOVE_HELPING_HAND] = @@ -6601,7 +6872,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_HELPING_HAND, }, [MOVE_TRICK] = @@ -6625,7 +6897,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_TRICK, }, [MOVE_ROLE_PLAY] = @@ -6649,7 +6922,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ROLE_PLAY, }, [MOVE_WISH] = @@ -6674,7 +6948,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_WISH, }, [MOVE_ASSIST] = @@ -6703,7 +6978,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_QUALITY_DEPENDS_ON_TIMING, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ASSIST, }, [MOVE_INGRAIN] = @@ -6728,7 +7004,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_INGRAIN, }, [MOVE_SUPERPOWER] = @@ -6754,6 +7031,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_LOCK_ON, COMBO_STARTER_MIND_READER}, + .battleAnimScript = Move_SUPERPOWER, }, [MOVE_MAGIC_COAT] = @@ -6776,7 +7054,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_MAGIC_COAT, }, [MOVE_RECYCLE] = @@ -6800,7 +7079,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_REPETITION_NOT_BORING, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_RECYCLE, }, [MOVE_REVENGE] = @@ -6820,6 +7100,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_REVENGE, .contestComboMoves = {COMBO_STARTER_PAYBACK}, + .battleAnimScript = Move_REVENGE, }, [MOVE_BRICK_BREAK] = @@ -6841,6 +7122,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY}, + .battleAnimScript = Move_BRICK_BREAK, }, [MOVE_YAWN] = @@ -6862,7 +7144,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = COMBO_STARTER_YAWN, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_YAWN, }, [MOVE_KNOCK_OFF] = @@ -6887,6 +7170,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FAKE_OUT}, + .battleAnimScript = Move_KNOCK_OFF, }, [MOVE_ENDEAVOR] = @@ -6909,6 +7193,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_ENDURE}, + .battleAnimScript = Move_ENDEAVOR, }, [MOVE_ERUPTION] = @@ -6929,6 +7214,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_EARTHQUAKE, COMBO_STARTER_ENDURE, COMBO_STARTER_SUNNY_DAY}, + .battleAnimScript = Move_ERUPTION, }, [MOVE_SKILL_SWAP] = @@ -6950,7 +7236,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SKILL_SWAP, }, [MOVE_IMPRISON] = @@ -6976,7 +7263,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_IMPRISON, }, [MOVE_REFRESH] = @@ -7001,6 +7289,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SING, COMBO_STARTER_WATER_SPORT}, + .battleAnimScript = Move_REFRESH, }, [MOVE_GRUDGE] = @@ -7025,6 +7314,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CURSE}, + .battleAnimScript = Move_GRUDGE, }, [MOVE_SNATCH] = @@ -7050,7 +7340,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SNATCH, }, [MOVE_SECRET_POWER] = @@ -7074,7 +7365,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_WITH_GOOD_CONDITION, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SECRET_POWER, }, [MOVE_DIVE] = @@ -7101,6 +7393,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = COMBO_STARTER_DIVE, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE, COMBO_STARTER_SURF}, + .battleAnimScript = Move_DIVE, }, [MOVE_ARM_THRUST] = @@ -7122,6 +7415,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FAKE_OUT, COMBO_STARTER_FOCUS_ENERGY}, + .battleAnimScript = Move_ARM_THRUST, }, [MOVE_CAMOUFLAGE] = @@ -7145,7 +7439,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_CAMOUFLAGE, }, [MOVE_TAIL_GLOW] = @@ -7169,7 +7464,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_TAIL_GLOW, }, [MOVE_LUSTER_PURGE] = @@ -7194,6 +7490,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CALM_MIND}, + .battleAnimScript = Move_LUSTER_PURGE, }, [MOVE_MIST_BALL] = @@ -7219,6 +7516,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CALM_MIND}, + .battleAnimScript = Move_MIST_BALL, }, [MOVE_FEATHER_DANCE] = @@ -7241,7 +7539,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_LAST, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FEATHER_DANCE, }, [MOVE_TEETER_DANCE] = @@ -7264,7 +7563,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_TEETER_DANCE, }, [MOVE_BLAZE_KICK] = @@ -7291,6 +7591,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, + .battleAnimScript = Move_BLAZE_KICK, }, [MOVE_MUD_SPORT] = @@ -7315,6 +7616,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = COMBO_STARTER_MUD_SPORT, .contestComboMoves = {COMBO_STARTER_MUD_SLAP, COMBO_STARTER_SANDSTORM, COMBO_STARTER_WATER_SPORT}, + .battleAnimScript = Move_MUD_SPORT, }, [MOVE_ICE_BALL] = @@ -7339,6 +7641,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_HAIL}, + .battleAnimScript = Move_ICE_BALL, }, [MOVE_NEEDLE_ARM] = @@ -7364,7 +7667,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_NEEDLE_ARM, }, [MOVE_SLACK_OFF] = @@ -7389,7 +7693,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_WHEN_LATER, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SLACK_OFF, }, [MOVE_HYPER_VOICE] = @@ -7411,7 +7716,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_HYPER_VOICE, }, [MOVE_POISON_FANG] = @@ -7437,7 +7743,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_POISON_FANG, }, [MOVE_CRUSH_CLAW] = @@ -7463,6 +7770,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SWORDS_DANCE}, + .battleAnimScript = Move_CRUSH_CLAW, }, [MOVE_BLAST_BURN] = @@ -7487,6 +7795,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, + .battleAnimScript = Move_BLAST_BURN, }, [MOVE_HYDRO_CANNON] = @@ -7511,6 +7820,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, + .battleAnimScript = Move_HYDRO_CANNON, }, [MOVE_METEOR_MASH] = @@ -7537,7 +7847,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_METEOR_MASH, }, [MOVE_ASTONISH] = @@ -7563,7 +7874,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_PREV_MON, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ASTONISH, }, [MOVE_WEATHER_BALL] = @@ -7586,6 +7898,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_HAIL, COMBO_STARTER_RAIN_DANCE, COMBO_STARTER_SANDSTORM, COMBO_STARTER_SUNNY_DAY}, + .battleAnimScript = Move_WEATHER_BALL, }, [MOVE_AROMATHERAPY] = @@ -7609,7 +7922,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_LAST, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_AROMATHERAPY, }, [MOVE_FAKE_TEARS] = @@ -7631,7 +7945,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_LAST, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FAKE_TEARS, }, [MOVE_AIR_CUTTER] = @@ -7654,7 +7969,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_AIR_CUTTER, }, [MOVE_OVERHEAT] = @@ -7680,6 +7996,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, + .battleAnimScript = Move_OVERHEAT, }, [MOVE_ODOR_SLEUTH] = @@ -7702,7 +8019,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ODOR_SLEUTH, }, [MOVE_ROCK_TOMB] = @@ -7727,6 +8045,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_ROCK_THROW}, + .battleAnimScript = Move_ROCK_TOMB, }, [MOVE_SILVER_WIND] = @@ -7752,7 +8071,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SILVER_WIND, }, [MOVE_METAL_SOUND] = @@ -7776,7 +8096,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_METAL_SOUND, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_METAL_SOUND, }, [MOVE_GRASS_WHISTLE] = @@ -7800,7 +8121,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_GRASS_WHISTLE, }, [MOVE_TICKLE] = @@ -7822,7 +8144,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_TICKLE, }, [MOVE_COSMIC_POWER] = @@ -7846,7 +8169,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_COSMIC_POWER, }, [MOVE_WATER_SPOUT] = @@ -7867,6 +8191,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, + .battleAnimScript = Move_WATER_SPOUT, }, [MOVE_SIGNAL_BEAM] = @@ -7890,7 +8215,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SIGNAL_BEAM, }, [MOVE_SHADOW_PUNCH] = @@ -7912,7 +8238,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_FIRST, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SHADOW_PUNCH, }, [MOVE_EXTRASENSORY] = @@ -7937,7 +8264,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_EXTRASENSORY, }, [MOVE_SKY_UPPERCUT] = @@ -7961,6 +8289,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY}, + .battleAnimScript = Move_SKY_UPPERCUT, }, [MOVE_SAND_TOMB] = @@ -7984,6 +8313,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SANDSTORM}, + .battleAnimScript = Move_SAND_TOMB, }, [MOVE_SHEER_COLD] = @@ -8004,6 +8334,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_HAIL, COMBO_STARTER_MIND_READER}, + .battleAnimScript = Move_SHEER_COLD, }, [MOVE_MUDDY_WATER] = @@ -8029,6 +8360,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, + .battleAnimScript = Move_MUDDY_WATER, }, [MOVE_BULLET_SEED] = @@ -8050,6 +8382,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_GROWTH}, + .battleAnimScript = Move_BULLET_SEED, }, [MOVE_AERIAL_ACE] = @@ -8071,7 +8404,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_FIRST, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_AERIAL_ACE, }, [MOVE_ICICLE_SPEAR] = @@ -8091,7 +8425,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ICICLE_SPEAR, }, [MOVE_IRON_DEFENSE] = @@ -8115,7 +8450,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_IRON_DEFENSE, }, [MOVE_BLOCK] = @@ -8138,7 +8474,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_BLOCK, }, [MOVE_HOWL] = @@ -8163,7 +8500,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_HOWL, }, [MOVE_DRAGON_CLAW] = @@ -8185,6 +8523,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_DRAGON_BREATH, COMBO_STARTER_DRAGON_DANCE, COMBO_STARTER_DRAGON_RAGE, COMBO_STARTER_DRAGON_RUSH, COMBO_STARTER_DRAGON_TAIL}, + .battleAnimScript = Move_DRAGON_CLAW, }, [MOVE_FRENZY_PLANT] = @@ -8210,6 +8549,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_GROWTH}, + .battleAnimScript = Move_FRENZY_PLANT, }, [MOVE_BULK_UP] = @@ -8233,7 +8573,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_BULK_UP, }, [MOVE_BOUNCE] = @@ -8263,7 +8604,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_BOUNCE, }, [MOVE_MUD_SHOT] = @@ -8288,6 +8630,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SANDSTORM}, + .battleAnimScript = Move_MUD_SHOT, }, [MOVE_POISON_TAIL] = @@ -8313,7 +8656,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_POISON_TAIL, }, [MOVE_COVET] = @@ -8341,7 +8685,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_COVET, }, [MOVE_VOLT_TACKLE] = @@ -8369,7 +8714,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_VOLT_TACKLE, }, [MOVE_MAGICAL_LEAF] = @@ -8390,6 +8736,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_GROWTH}, + .battleAnimScript = Move_MAGICAL_LEAF, }, [MOVE_WATER_SPORT] = @@ -8414,6 +8761,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = COMBO_STARTER_WATER_SPORT, .contestComboMoves = {COMBO_STARTER_MUD_SPORT, COMBO_STARTER_RAIN_DANCE}, + .battleAnimScript = Move_WATER_SPORT, }, [MOVE_CALM_MIND] = @@ -8437,7 +8785,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE_ONCE, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_CALM_MIND, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_CALM_MIND, }, [MOVE_LEAF_BLADE] = @@ -8460,7 +8809,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_LEAF_BLADE, }, [MOVE_DRAGON_DANCE] = @@ -8486,6 +8836,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = COMBO_STARTER_DRAGON_DANCE, .contestComboMoves = {COMBO_STARTER_DRAGON_BREATH, COMBO_STARTER_DRAGON_RAGE, COMBO_STARTER_DRAGON_RUSH, COMBO_STARTER_DRAGON_TAIL}, + .battleAnimScript = Move_DRAGON_DANCE, }, [MOVE_ROCK_BLAST] = @@ -8506,7 +8857,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ROCK_BLAST, }, [MOVE_SHOCK_WAVE] = @@ -8527,6 +8879,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARGE}, + .battleAnimScript = Move_SHOCK_WAVE, }, [MOVE_WATER_PULSE] = @@ -8552,6 +8905,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, + .battleAnimScript = Move_WATER_PULSE, }, [MOVE_DOOM_DESIRE] = @@ -8573,7 +8927,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_DOOM_DESIRE, }, [MOVE_PSYCHO_BOOST] = @@ -8598,6 +8953,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CALM_MIND}, + .battleAnimScript = Move_PSYCHO_BOOST, }, [MOVE_ROOST] = @@ -8623,6 +8979,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_BRAVE_BIRD}, + .battleAnimScript = Move_ROOST, }, [MOVE_GRAVITY] = @@ -8646,7 +9003,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_GRAVITY, }, [MOVE_MIRACLE_EYE] = @@ -8669,7 +9027,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_MIRACLE_EYE, }, [MOVE_WAKE_UP_SLAP] = @@ -8694,7 +9053,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_PREV_MON, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_WAKE_UP_SLAP, }, [MOVE_HAMMER_ARM] = @@ -8721,6 +9081,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY}, + .battleAnimScript = Move_HAMMER_ARM, }, [MOVE_GYRO_BALL] = @@ -8742,7 +9103,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_LAST, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_GYRO_BALL, }, [MOVE_HEALING_WISH] = @@ -8764,7 +9126,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_HEALING_WISH, }, [MOVE_BRINE] = @@ -8785,6 +9148,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, + .battleAnimScript = Move_BRINE, }, [MOVE_NATURAL_GIFT] = @@ -8804,7 +9168,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_WHEN_LATER, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_NATURAL_GIFT, }, [MOVE_FEINT] = @@ -8830,7 +9195,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FEINT, }, [MOVE_PLUCK] = @@ -8852,7 +9218,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_PLUCK, }, [MOVE_TAILWIND] = @@ -8877,7 +9244,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_TAILWIND, }, [MOVE_ACUPRESSURE] = @@ -8901,7 +9269,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ACUPRESSURE, }, [MOVE_METAL_BURST] = @@ -8923,6 +9292,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_METAL_SOUND}, + .battleAnimScript = Move_METAL_BURST, }, [MOVE_U_TURN] = @@ -8941,7 +9311,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_U_TURN, }, [MOVE_CLOSE_COMBAT] = @@ -8965,6 +9336,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY, COMBO_STARTER_MIND_READER}, + .battleAnimScript = Move_CLOSE_COMBAT, }, [MOVE_PAYBACK] = @@ -8986,6 +9358,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = COMBO_STARTER_PAYBACK, .contestComboMoves = {COMBO_STARTER_REVENGE}, + .battleAnimScript = Move_PAYBACK, }, [MOVE_ASSURANCE] = @@ -9007,6 +9380,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_PAYBACK, COMBO_STARTER_REVENGE}, + .battleAnimScript = Move_ASSURANCE, }, [MOVE_EMBARGO] = @@ -9028,7 +9402,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_EMBARGO, }, [MOVE_FLING] = @@ -9049,7 +9424,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FLING, }, [MOVE_PSYCHO_SHIFT] = @@ -9070,7 +9446,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_PSYCHO_SHIFT, }, [MOVE_TRUMP_CARD] = @@ -9091,7 +9468,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_WHEN_LATER, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_TRUMP_CARD, }, [MOVE_HEAL_BLOCK] = @@ -9113,7 +9491,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_HEAL_BLOCK, }, [MOVE_WRING_OUT] = @@ -9133,7 +9512,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_PREV_MON, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_WRING_OUT, }, [MOVE_POWER_TRICK] = @@ -9157,7 +9537,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_POWER_TRICK, }, [MOVE_GASTRO_ACID] = @@ -9179,7 +9560,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_GASTRO_ACID, }, [MOVE_LUCKY_CHANT] = @@ -9204,6 +9586,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = COMBO_STARTER_LUCKY_CHANT, .contestComboMoves = {COMBO_STARTER_HEAL_BELL}, + .battleAnimScript = Move_LUCKY_CHANT, }, [MOVE_ME_FIRST] = @@ -9234,7 +9617,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ME_FIRST, }, [MOVE_COPYCAT] = @@ -9264,7 +9648,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONE, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_COPYCAT, }, [MOVE_POWER_SWAP] = @@ -9286,7 +9671,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_POWER_SWAP, }, [MOVE_GUARD_SWAP] = @@ -9308,7 +9694,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_GUARD_SWAP, }, [MOVE_PUNISHMENT] = @@ -9329,7 +9716,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_WHEN_LATER, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_PUNISHMENT, }, [MOVE_LAST_RESORT] = @@ -9350,7 +9738,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_LAST_RESORT, }, [MOVE_WORRY_SEED] = @@ -9373,6 +9762,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = COMBO_STARTER_WORRY_SEED, .contestComboMoves = {COMBO_STARTER_LEECH_SEED}, + .battleAnimScript = Move_WORRY_SEED, }, [MOVE_SUCKER_PUNCH] = @@ -9391,7 +9781,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_FIRST, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SUCKER_PUNCH, }, [MOVE_TOXIC_SPIKES] = @@ -9417,7 +9808,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_TOXIC_SPIKES, }, [MOVE_HEART_SWAP] = @@ -9439,7 +9831,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_HEART_SWAP, }, [MOVE_AQUA_RING] = @@ -9463,7 +9856,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_AQUA_RING, }, [MOVE_MAGNET_RISE] = @@ -9488,7 +9882,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_MAGNET_RISE, }, [MOVE_FLARE_BLITZ] = @@ -9516,6 +9911,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, + .battleAnimScript = Move_FLARE_BLITZ, }, [MOVE_FORCE_PALM] = @@ -9540,7 +9936,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FORCE_PALM, }, [MOVE_AURA_SPHERE] = @@ -9562,7 +9959,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_FIRST, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_AURA_SPHERE, }, [MOVE_ROCK_POLISH] = @@ -9586,7 +9984,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ROCK_POLISH, }, [MOVE_POISON_JAB] = @@ -9611,7 +10010,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_POISON_JAB, }, [MOVE_DARK_PULSE] = @@ -9636,7 +10036,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_LAST, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_DARK_PULSE, }, [MOVE_NIGHT_SLASH] = @@ -9659,7 +10060,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_NIGHT_SLASH, }, [MOVE_AQUA_TAIL] = @@ -9681,6 +10083,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, + .battleAnimScript = Move_AQUA_TAIL, }, [MOVE_SEED_BOMB] = @@ -9701,7 +10104,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SEED_BOMB, }, [MOVE_AIR_SLASH] = @@ -9726,7 +10130,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_AIR_SLASH, }, [MOVE_X_SCISSOR] = @@ -9749,6 +10154,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SWORDS_DANCE}, + .battleAnimScript = Move_X_SCISSOR, }, [MOVE_BUG_BUZZ] = @@ -9774,7 +10180,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_BUG_BUZZ, }, [MOVE_DRAGON_PULSE] = @@ -9795,7 +10202,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_DRAGON_PULSE, }, [MOVE_DRAGON_RUSH] = @@ -9822,6 +10230,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = COMBO_STARTER_DRAGON_RUSH, .contestComboMoves = {COMBO_STARTER_DRAGON_BREATH, COMBO_STARTER_DRAGON_DANCE, COMBO_STARTER_DRAGON_RAGE, COMBO_STARTER_DRAGON_TAIL}, + .battleAnimScript = Move_DRAGON_RUSH, }, [MOVE_POWER_GEM] = @@ -9841,7 +10250,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_POWER_GEM, }, [MOVE_DRAIN_PUNCH] = @@ -9863,6 +10273,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY}, + .battleAnimScript = Move_DRAIN_PUNCH, }, [MOVE_VACUUM_WAVE] = @@ -9882,7 +10293,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_VACUUM_WAVE, }, [MOVE_FOCUS_BLAST] = @@ -9908,6 +10320,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY}, + .battleAnimScript = Move_FOCUS_BLAST, }, [MOVE_ENERGY_BALL] = @@ -9933,6 +10346,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_GROWTH}, + .battleAnimScript = Move_ENERGY_BALL, }, [MOVE_BRAVE_BIRD] = @@ -9954,7 +10368,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = COMBO_STARTER_BRAVE_BIRD, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_BRAVE_BIRD, }, [MOVE_EARTH_POWER] = @@ -9979,7 +10394,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_EARTH_POWER, }, [MOVE_SWITCHEROO] = @@ -10003,7 +10419,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SWITCHEROO, }, [MOVE_GIGA_IMPACT] = @@ -10026,7 +10443,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_GIGA_IMPACT, }, [MOVE_NASTY_PLOT] = @@ -10050,7 +10468,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_NASTY_PLOT, }, [MOVE_BULLET_PUNCH] = @@ -10072,7 +10491,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_BULLET_PUNCH, }, [MOVE_AVALANCHE] = @@ -10091,7 +10511,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_NEXT_APPEAL_LATER, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_AVALANCHE, }, [MOVE_ICE_SHARD] = @@ -10111,7 +10532,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ICE_SHARD, }, [MOVE_SHADOW_CLAW] = @@ -10133,7 +10555,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SHADOW_CLAW, }, [MOVE_THUNDER_FANG] = @@ -10164,6 +10587,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_THUNDER_FANG, .contestComboMoves = {COMBO_STARTER_CHARGE, COMBO_STARTER_FIRE_FANG, COMBO_STARTER_ICE_FANG}, + .battleAnimScript = Move_THUNDER_FANG, }, [MOVE_ICE_FANG] = @@ -10198,6 +10622,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = COMBO_STARTER_ICE_FANG, .contestComboMoves = {COMBO_STARTER_FIRE_FANG, COMBO_STARTER_THUNDER_FANG}, + .battleAnimScript = Move_ICE_FANG, }, [MOVE_FIRE_FANG] = @@ -10228,6 +10653,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = COMBO_STARTER_FIRE_FANG, .contestComboMoves = {COMBO_STARTER_ICE_FANG, COMBO_STARTER_THUNDER_FANG}, + .battleAnimScript = Move_FIRE_FANG, }, [MOVE_SHADOW_SNEAK] = @@ -10248,7 +10674,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SHADOW_SNEAK, }, [MOVE_MUD_BOMB] = @@ -10273,7 +10700,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_MUD_BOMB, }, [MOVE_PSYCHO_CUT] = @@ -10295,7 +10723,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_PSYCHO_CUT, }, [MOVE_ZEN_HEADBUTT] = @@ -10320,7 +10749,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ZEN_HEADBUTT, }, [MOVE_MIRROR_SHOT] = @@ -10344,7 +10774,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_MIRROR_SHOT, }, [MOVE_FLASH_CANNON] = @@ -10368,7 +10799,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FLASH_CANNON, }, [MOVE_ROCK_CLIMB] = @@ -10393,7 +10825,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_WITH_GOOD_CONDITION, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ROCK_CLIMB, }, [MOVE_DEFOG] = @@ -10416,7 +10849,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_DEFOG, }, [MOVE_TRICK_ROOM] = @@ -10438,7 +10872,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_NEXT_APPEAL_LATER, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_TRICK_ROOM, }, [MOVE_DRACO_METEOR] = @@ -10462,7 +10897,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_DRACO_METEOR, }, [MOVE_DISCHARGE] = @@ -10487,6 +10923,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARGE}, + .battleAnimScript = Move_DISCHARGE, }, [MOVE_LAVA_PLUME] = @@ -10509,6 +10946,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, + .battleAnimScript = Move_LAVA_PLUME, }, [MOVE_LEAF_STORM] = @@ -10532,7 +10970,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_LEAF_STORM, }, [MOVE_POWER_WHIP] = @@ -10554,6 +10993,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_GROWTH}, + .battleAnimScript = Move_POWER_WHIP, }, [MOVE_ROCK_WRECKER] = @@ -10576,7 +11016,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ROCK_WRECKER, }, [MOVE_CROSS_POISON] = @@ -10603,7 +11044,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_CROSS_POISON, }, [MOVE_GUNK_SHOT] = @@ -10627,7 +11069,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_GUNK_SHOT, }, [MOVE_IRON_HEAD] = @@ -10652,7 +11095,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_IRON_HEAD, }, [MOVE_MAGNET_BOMB] = @@ -10673,7 +11117,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_FIRST, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_MAGNET_BOMB, }, [MOVE_STONE_EDGE] = @@ -10694,7 +11139,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_STONE_EDGE, }, [MOVE_CAPTIVATE] = @@ -10717,6 +11163,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARM}, + .battleAnimScript = Move_CAPTIVATE, }, [MOVE_STEALTH_ROCK] = @@ -10741,7 +11188,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_STEALTH_ROCK, }, [MOVE_GRASS_KNOT] = @@ -10763,7 +11211,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_GRASS_KNOT, }, [MOVE_CHATTER] = @@ -10802,7 +11251,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_CHATTER, }, [MOVE_JUDGMENT] = @@ -10823,7 +11273,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_JUDGMENT, }, [MOVE_BUG_BITE] = @@ -10845,7 +11296,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_BUG_BITE, }, [MOVE_CHARGE_BEAM] = @@ -10871,6 +11323,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARGE}, + .battleAnimScript = Move_CHARGE_BEAM, }, [MOVE_WOOD_HAMMER] = @@ -10892,7 +11345,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_WOOD_HAMMER, }, [MOVE_AQUA_JET] = @@ -10914,6 +11368,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, + .battleAnimScript = Move_AQUA_JET, }, [MOVE_ATTACK_ORDER] = @@ -10935,6 +11390,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_ATTACK_ORDER, .contestComboMoves = {COMBO_STARTER_DEFEND_ORDER, COMBO_STARTER_HEAL_ORDER}, + .battleAnimScript = Move_ATTACK_ORDER, }, [MOVE_DEFEND_ORDER] = @@ -10959,6 +11415,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_DEFEND_ORDER, .contestComboMoves = {COMBO_STARTER_ATTACK_ORDER, COMBO_STARTER_HEAL_ORDER}, + .battleAnimScript = Move_DEFEND_ORDER, }, [MOVE_HEAL_ORDER] = @@ -10984,6 +11441,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_HEAL_ORDER, .contestComboMoves = {COMBO_STARTER_ATTACK_ORDER, COMBO_STARTER_DEFEND_ORDER}, + .battleAnimScript = Move_HEAL_ORDER, }, [MOVE_HEAD_SMASH] = @@ -11005,7 +11463,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_HEAD_SMASH, }, [MOVE_DOUBLE_HIT] = @@ -11027,7 +11486,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_REPETITION_NOT_BORING, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_DOUBLE_HIT, }, [MOVE_ROAR_OF_TIME] = @@ -11051,7 +11511,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ROAR_OF_TIME, }, [MOVE_SPACIAL_REND] = @@ -11072,7 +11533,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SPACIAL_REND, }, [MOVE_LUNAR_DANCE] = @@ -11095,7 +11557,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_LUNAR_DANCE, }, [MOVE_CRUSH_GRIP] = @@ -11115,7 +11578,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_CRUSH_GRIP, }, [MOVE_MAGMA_STORM] = @@ -11139,6 +11603,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, + .battleAnimScript = Move_MAGMA_STORM, }, [MOVE_DARK_VOID] = @@ -11161,7 +11626,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_DARK_VOID, }, [MOVE_SEED_FLARE] = @@ -11185,7 +11651,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SEED_FLARE, }, [MOVE_OMINOUS_WIND] = @@ -11211,7 +11678,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_OMINOUS_WIND, }, [MOVE_SHADOW_FORCE] = @@ -11239,7 +11707,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE_ONCE, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SHADOW_FORCE, }, [MOVE_HONE_CLAWS] = @@ -11263,7 +11732,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_HONE_CLAWS, }, [MOVE_WIDE_GUARD] = @@ -11289,7 +11759,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_WIDE_GUARD, }, [MOVE_GUARD_SPLIT] = @@ -11311,7 +11782,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_GUARD_SPLIT, }, [MOVE_POWER_SPLIT] = @@ -11333,7 +11805,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_POWER_SPLIT, }, [MOVE_WONDER_ROOM] = @@ -11355,7 +11828,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_WONDER_ROOM, }, [MOVE_PSYSHOCK] = @@ -11373,7 +11847,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_PSYSHOCK, }, [MOVE_VENOSHOCK] = @@ -11395,6 +11870,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_TOXIC}, + .battleAnimScript = Move_VENOSHOCK, }, [MOVE_AUTOTOMIZE] = @@ -11418,7 +11894,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_AUTOTOMIZE, }, [MOVE_RAGE_POWDER] = @@ -11445,7 +11922,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_RAGE_POWDER, }, [MOVE_TELEKINESIS] = @@ -11468,7 +11946,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_TELEKINESIS, }, [MOVE_MAGIC_ROOM] = @@ -11490,7 +11969,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_MAGIC_ROOM, }, [MOVE_SMACK_DOWN] = @@ -11515,7 +11995,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SMACK_DOWN, }, [MOVE_STORM_THROW] = @@ -11535,7 +12016,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_STORM_THROW, }, [MOVE_FLAME_BURST] = @@ -11559,7 +12041,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FLAME_BURST, }, [MOVE_SLUDGE_WAVE] = @@ -11583,7 +12066,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SLUDGE_WAVE, }, [MOVE_QUIVER_DANCE] = @@ -11608,7 +12092,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_QUIVER_DANCE, }, [MOVE_HEAVY_SLAM] = @@ -11629,7 +12114,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_HEAVY_SLAM, }, [MOVE_SYNCHRONOISE] = @@ -11649,7 +12135,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SYNCHRONOISE, }, [MOVE_ELECTRO_BALL] = @@ -11670,7 +12157,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ELECTRO_BALL, }, [MOVE_SOAK] = @@ -11692,7 +12180,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SOAK, }, [MOVE_FLAME_CHARGE] = @@ -11718,7 +12207,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FLAME_CHARGE, }, [MOVE_COIL] = @@ -11742,7 +12232,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_COIL, }, [MOVE_LOW_SWEEP] = @@ -11767,7 +12258,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_LOW_SWEEP, }, [MOVE_ACID_SPRAY] = @@ -11792,7 +12284,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ACID_SPRAY, }, [MOVE_FOUL_PLAY] = @@ -11813,7 +12306,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FOUL_PLAY, }, [MOVE_SIMPLE_BEAM] = @@ -11835,7 +12329,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SIMPLE_BEAM, }, [MOVE_ENTRAINMENT] = @@ -11857,7 +12352,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ENTRAINMENT, }, [MOVE_AFTER_YOU] = @@ -11882,7 +12378,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_NEXT_APPEAL_LATER, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_AFTER_YOU, }, [MOVE_ROUND] = @@ -11907,7 +12404,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_REPETITION_NOT_BORING, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ROUND, }, [MOVE_ECHOED_VOICE] = @@ -11929,7 +12427,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_REPETITION_NOT_BORING, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ECHOED_VOICE, }, [MOVE_CHIP_AWAY] = @@ -11949,7 +12448,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_REPETITION_NOT_BORING, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_CHIP_AWAY, }, [MOVE_CLEAR_SMOG] = @@ -11972,7 +12472,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_CLEAR_SMOG, }, [MOVE_STORED_POWER] = @@ -11992,7 +12493,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_WHEN_LATER, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_STORED_POWER, }, [MOVE_QUICK_GUARD] = @@ -12018,7 +12520,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE_ONCE, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_QUICK_GUARD, }, [MOVE_ALLY_SWITCH] = @@ -12041,7 +12544,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ALLY_SWITCH, }, [MOVE_SCALD] = @@ -12066,7 +12570,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_SCALD, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SCALD, }, [MOVE_SHELL_SMASH] = @@ -12090,7 +12595,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SHELL_SMASH, }, [MOVE_HEAL_PULSE] = @@ -12115,7 +12621,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_HEAL_PULSE, }, [MOVE_HEX] = @@ -12138,6 +12645,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_TOXIC}, + .battleAnimScript = Move_HEX, }, [MOVE_SKY_DROP] = @@ -12163,7 +12671,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SKY_DROP, }, [MOVE_SHIFT_GEAR] = @@ -12187,7 +12696,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SHIFT_GEAR, }, [MOVE_CIRCLE_THROW] = @@ -12208,7 +12718,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_CIRCLE_THROW, }, [MOVE_INCINERATE] = @@ -12231,7 +12742,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_INCINERATE, }, [MOVE_QUASH] = @@ -12253,7 +12765,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_NEXT_APPEAL_LATER, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_QUASH, }, [MOVE_ACROBATICS] = @@ -12274,7 +12787,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ACROBATICS, }, [MOVE_REFLECT_TYPE] = @@ -12297,7 +12811,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_REFLECT_TYPE, }, [MOVE_RETALIATE] = @@ -12318,7 +12833,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_NEXT_APPEAL_LATER, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_RETALIATE, }, [MOVE_FINAL_GAMBIT] = @@ -12340,7 +12856,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FINAL_GAMBIT, }, [MOVE_BESTOW] = @@ -12366,7 +12883,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_BESTOW, }, [MOVE_INFERNO] = @@ -12390,7 +12908,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_INFERNO, }, [MOVE_WATER_PLEDGE] = @@ -12411,7 +12930,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_WATER_PLEDGE, }, [MOVE_FIRE_PLEDGE] = @@ -12432,7 +12952,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FIRE_PLEDGE, }, [MOVE_GRASS_PLEDGE] = @@ -12453,7 +12974,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_GRASS_PLEDGE, }, [MOVE_VOLT_SWITCH] = @@ -12471,7 +12993,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_VOLT_SWITCH, }, [MOVE_STRUGGLE_BUG] = @@ -12495,7 +13018,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_STRUGGLE_BUG, }, [MOVE_BULLDOZE] = @@ -12520,7 +13044,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_BULLDOZE, }, [MOVE_FROST_BREATH] = @@ -12539,7 +13064,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FROST_BREATH, }, [MOVE_DRAGON_TAIL] = @@ -12561,6 +13087,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = COMBO_STARTER_DRAGON_TAIL, .contestComboMoves = {COMBO_STARTER_DRAGON_BREATH, COMBO_STARTER_DRAGON_DANCE, COMBO_STARTER_DRAGON_RAGE, COMBO_STARTER_DRAGON_RUSH}, + .battleAnimScript = Move_DRAGON_TAIL, }, [MOVE_WORK_UP] = @@ -12584,7 +13111,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_WORK_UP, }, [MOVE_ELECTROWEB] = @@ -12608,7 +13136,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ELECTROWEB, }, [MOVE_WILD_CHARGE] = @@ -12630,7 +13159,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_WILD_CHARGE, }, [MOVE_DRILL_RUN] = @@ -12652,7 +13182,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_DRILL_RUN, }, [MOVE_DUAL_CHOP] = @@ -12674,7 +13205,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_REPETITION_NOT_BORING, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_DUAL_CHOP, }, [MOVE_HEART_STAMP] = @@ -12699,7 +13231,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_HEART_STAMP, }, [MOVE_HORN_LEECH] = @@ -12719,7 +13252,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_HORN_LEECH, }, [MOVE_SACRED_SWORD] = @@ -12740,7 +13274,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SACRED_SWORD, }, [MOVE_RAZOR_SHELL] = @@ -12766,7 +13301,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_RAZOR_SHELL, }, [MOVE_HEAT_CRASH] = @@ -12786,7 +13322,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_HEAT_CRASH, }, [MOVE_LEAF_TORNADO] = @@ -12811,7 +13348,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_LEAF_TORNADO, }, [MOVE_STEAMROLLER] = @@ -12837,7 +13375,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_STEAMROLLER, }, [MOVE_COTTON_GUARD] = @@ -12861,7 +13400,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_COTTON_GUARD, }, [MOVE_NIGHT_DAZE] = @@ -12885,7 +13425,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_NIGHT_DAZE, }, [MOVE_PSYSTRIKE] = @@ -12903,7 +13444,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_PSYSTRIKE, }, [MOVE_TAIL_SLAP] = @@ -12924,7 +13466,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_TAIL_SLAP, }, [MOVE_HURRICANE] = @@ -12950,7 +13493,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_HURRICANE, }, [MOVE_HEAD_CHARGE] = @@ -12972,7 +13516,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_HEAD_CHARGE, }, [MOVE_GEAR_GRIND] = @@ -12995,7 +13540,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_REPETITION_NOT_BORING, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_GEAR_GRIND, }, [MOVE_SEARING_SHOT] = @@ -13018,7 +13564,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SEARING_SHOT, }, [MOVE_TECHNO_BLAST] = @@ -13040,7 +13587,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_EXCITE_AUDIENCE_IN_ANY_CONTEST, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_TECHNO_BLAST, }, [MOVE_RELIC_SONG] = @@ -13068,7 +13616,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_RELIC_SONG, }, [MOVE_SECRET_SWORD] = @@ -13090,7 +13639,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SECRET_SWORD, }, [MOVE_GLACIATE] = @@ -13114,7 +13664,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_GLACIATE, }, [MOVE_BOLT_STRIKE] = @@ -13139,7 +13690,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_BOLT_STRIKE, }, [MOVE_BLUE_FLARE] = @@ -13163,7 +13715,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_BLUE_FLARE, }, [MOVE_FIERY_DANCE] = @@ -13189,7 +13742,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FIERY_DANCE, }, [MOVE_FREEZE_SHOCK] = @@ -13217,7 +13771,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FREEZE_SHOCK, }, [MOVE_ICE_BURN] = @@ -13245,7 +13800,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ICE_BURN, }, [MOVE_SNARL] = @@ -13272,7 +13828,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SNARL, }, [MOVE_ICICLE_CRASH] = @@ -13296,7 +13853,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_PREV_MON, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ICICLE_CRASH, }, [MOVE_V_CREATE] = @@ -13323,7 +13881,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_V_CREATE, }, [MOVE_FUSION_FLARE] = @@ -13344,7 +13903,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FUSION_FLARE, }, [MOVE_FUSION_BOLT] = @@ -13364,7 +13924,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FUSION_BOLT, }, [MOVE_FLYING_PRESS] = @@ -13390,7 +13951,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FLYING_PRESS, }, [MOVE_MAT_BLOCK] = @@ -13419,7 +13981,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_MAT_BLOCK, }, [MOVE_BELCH] = @@ -13447,7 +14010,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_BELCH, }, [MOVE_ROTOTILLER] = @@ -13471,7 +14035,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ROTOTILLER, }, [MOVE_STICKY_WEB] = @@ -13496,7 +14061,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_STICKY_WEB, }, [MOVE_FELL_STINGER] = @@ -13517,7 +14083,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_LAST, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FELL_STINGER, }, [MOVE_PHANTOM_FORCE] = @@ -13545,7 +14112,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE_ONCE, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_PHANTOM_FORCE, }, [MOVE_TRICK_OR_TREAT] = @@ -13568,7 +14136,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_TRICK_OR_TREAT, }, [MOVE_NOBLE_ROAR] = @@ -13592,7 +14161,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_LAST, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_NOBLE_ROAR, }, [MOVE_ION_DELUGE] = @@ -13615,7 +14185,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ION_DELUGE, }, [MOVE_PARABOLIC_CHARGE] = @@ -13636,7 +14207,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_PARABOLIC_CHARGE, }, [MOVE_FORESTS_CURSE] = @@ -13659,7 +14231,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FORESTS_CURSE, }, [MOVE_PETAL_BLIZZARD] = @@ -13680,7 +14253,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_PETAL_BLIZZARD, }, [MOVE_FREEZE_DRY] = @@ -13709,7 +14283,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FREEZE_DRY, }, [MOVE_DISARMING_VOICE] = @@ -13731,7 +14306,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_FIRST, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_DISARMING_VOICE, }, [MOVE_PARTING_SHOT] = @@ -13755,7 +14331,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_PARTING_SHOT, }, [MOVE_TOPSY_TURVY] = @@ -13777,7 +14354,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_TOPSY_TURVY, }, [MOVE_DRAINING_KISS] = @@ -13798,7 +14376,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_DRAINING_KISS, }, [MOVE_CRAFTY_SHIELD] = @@ -13823,7 +14402,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE_ONCE, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_CRAFTY_SHIELD, }, [MOVE_FLOWER_SHIELD] = @@ -13846,7 +14426,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FLOWER_SHIELD, }, [MOVE_GRASSY_TERRAIN] = @@ -13870,7 +14451,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_GRASSY_TERRAIN, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_GRASSY_TERRAIN, }, [MOVE_MISTY_TERRAIN] = @@ -13894,7 +14476,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = COMBO_STARTER_MISTY_TERRAIN, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_MISTY_TERRAIN, }, [MOVE_ELECTRIFY] = @@ -13915,7 +14498,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ELECTRIFY, }, [MOVE_PLAY_ROUGH] = @@ -13940,7 +14524,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_PLAY_ROUGH, }, [MOVE_FAIRY_WIND] = @@ -13961,7 +14546,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FAIRY_WIND, }, [MOVE_MOONBLAST] = @@ -13985,7 +14571,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_MOONBLAST, }, [MOVE_BOOMBURST] = @@ -14007,7 +14594,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_BOOMBURST, }, [MOVE_FAIRY_LOCK] = @@ -14030,7 +14618,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FAIRY_LOCK, }, [MOVE_KINGS_SHIELD] = @@ -14057,7 +14646,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_KINGS_SHIELD, }, [MOVE_PLAY_NICE] = @@ -14081,7 +14671,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_LAST, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_PLAY_NICE, }, [MOVE_CONFIDE] = @@ -14106,7 +14697,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_LAST, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_CONFIDE, }, [MOVE_DIAMOND_STORM] = @@ -14131,7 +14723,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_DIAMOND_STORM, }, [MOVE_STEAM_ERUPTION] = @@ -14158,6 +14751,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SCALD}, + .battleAnimScript = Move_STEAM_ERUPTION, }, [MOVE_HYPERSPACE_HOLE] = @@ -14182,6 +14776,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_HYPERSPACE_HOLE, .contestComboMoves = {COMBO_STARTER_HYPERSPACE_FURY}, + .battleAnimScript = Move_HYPERSPACE_HOLE, }, [MOVE_WATER_SHURIKEN] = @@ -14201,7 +14796,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_WATER_SHURIKEN, }, [MOVE_MYSTICAL_FIRE] = @@ -14225,7 +14821,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_MYSTICAL_FIRE, }, [MOVE_SPIKY_SHIELD] = @@ -14251,7 +14848,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SPIKY_SHIELD, }, [MOVE_AROMATIC_MIST] = @@ -14275,7 +14873,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_AROMATIC_MIST, }, [MOVE_EERIE_IMPULSE] = @@ -14297,7 +14896,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_EERIE_IMPULSE, }, [MOVE_VENOM_DRENCH] = @@ -14320,6 +14920,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_TOXIC}, + .battleAnimScript = Move_VENOM_DRENCH, }, [MOVE_POWDER] = @@ -14342,7 +14943,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_POWDER, }, [MOVE_GEOMANCY] = @@ -14367,7 +14969,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_GEOMANCY, }, [MOVE_MAGNETIC_FLUX] = @@ -14392,7 +14995,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_MAGNETIC_FLUX, }, [MOVE_HAPPY_HOUR] = @@ -14415,7 +15019,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_HAPPY_HOUR, }, [MOVE_ELECTRIC_TERRAIN] = @@ -14439,7 +15044,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = COMBO_STARTER_ELECTRIC_TERRAIN, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ELECTRIC_TERRAIN, }, [MOVE_DAZZLING_GLEAM] = @@ -14459,7 +15065,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_DAZZLING_GLEAM, }, [MOVE_CELEBRATE] = @@ -14488,7 +15095,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_FIRST, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_CELEBRATE, }, [MOVE_HOLD_HANDS] = @@ -14517,7 +15125,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_HOLD_HANDS, }, [MOVE_BABY_DOLL_EYES] = @@ -14539,7 +15148,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_BABY_DOLL_EYES, }, [MOVE_NUZZLE] = @@ -14564,7 +15174,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_NUZZLE, }, [MOVE_HOLD_BACK] = @@ -14583,7 +15194,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_HOLD_BACK, }, [MOVE_INFESTATION] = @@ -14607,7 +15219,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_INFESTATION, }, [MOVE_POWER_UP_PUNCH] = @@ -14634,7 +15247,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_POWER_UP_PUNCH, }, [MOVE_OBLIVION_WING] = @@ -14654,7 +15268,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_OBLIVION_WING, }, [MOVE_THOUSAND_ARROWS] = @@ -14682,6 +15297,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_THOUSAND_ARROWS, .contestComboMoves = {COMBO_STARTER_THOUSAND_WAVES}, + .battleAnimScript = Move_THOUSAND_ARROWS, }, [MOVE_THOUSAND_WAVES] = @@ -14707,6 +15323,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_THOUSAND_WAVES, .contestComboMoves = {COMBO_STARTER_THOUSAND_ARROWS}, + .battleAnimScript = Move_THOUSAND_WAVES, }, [MOVE_LANDS_WRATH] = @@ -14727,7 +15344,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_LANDS_WRATH, }, [MOVE_LIGHT_OF_RUIN] = @@ -14746,6 +15364,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_SPECIAL, .metronomeBanned = TRUE, + .battleAnimScript = Move_LIGHT_OF_RUIN, }, [MOVE_ORIGIN_PULSE] = @@ -14767,7 +15386,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_FIRST, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ORIGIN_PULSE, }, [MOVE_PRECIPICE_BLADES] = @@ -14788,7 +15408,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_LAST, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_PRECIPICE_BLADES, }, [MOVE_DRAGON_ASCENT] = @@ -14812,7 +15433,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_DRAGON_ASCENT, }, [MOVE_HYPERSPACE_FURY] = @@ -14840,6 +15462,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_HYPERSPACE_FURY, .contestComboMoves = {COMBO_STARTER_HYPERSPACE_HOLE}, + .battleAnimScript = Move_HYPERSPACE_FURY, }, [MOVE_SHORE_UP] = @@ -14864,7 +15487,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_QUALITY_DEPENDS_ON_TIMING, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {COMBO_STARTER_SANDSTORM} + .contestComboMoves = {COMBO_STARTER_SANDSTORM}, + .battleAnimScript = Move_SHORE_UP, }, [MOVE_FIRST_IMPRESSION] = @@ -14886,7 +15510,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_FIRST, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FIRST_IMPRESSION, }, [MOVE_BANEFUL_BUNKER] = @@ -14912,7 +15537,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_BANEFUL_BUNKER, }, [MOVE_SPIRIT_SHACKLE] = @@ -14936,7 +15562,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SPIRIT_SHACKLE, }, [MOVE_DARKEST_LARIAT] = @@ -14958,7 +15585,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_DARKEST_LARIAT, }, [MOVE_SPARKLING_ARIA] = @@ -14986,6 +15614,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SCALD}, + .battleAnimScript = Move_SPARKLING_ARIA, }, [MOVE_ICE_HAMMER] = @@ -15012,6 +15641,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_HAIL}, + .battleAnimScript = Move_ICE_HAMMER, }, [MOVE_FLORAL_HEALING] = @@ -15036,7 +15666,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_QUALITY_DEPENDS_ON_TIMING, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FLORAL_HEALING, }, [MOVE_HIGH_HORSEPOWER] = @@ -15057,7 +15688,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_HIGH_HORSEPOWER, }, [MOVE_STRENGTH_SAP] = @@ -15080,7 +15712,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_STRENGTH_SAP, }, [MOVE_SOLAR_BLADE] = @@ -15106,6 +15739,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, + .battleAnimScript = Move_SOLAR_BLADE, }, [MOVE_LEAFAGE] = @@ -15126,6 +15760,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_GROWTH}, + .battleAnimScript = Move_LEAFAGE, }, [MOVE_SPOTLIGHT] = @@ -15151,7 +15786,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SPOTLIGHT, }, [MOVE_TOXIC_THREAD] = @@ -15174,6 +15810,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_TOXIC}, + .battleAnimScript = Move_TOXIC_THREAD, }, [MOVE_LASER_FOCUS] = @@ -15197,7 +15834,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_LASER_FOCUS, }, [MOVE_GEAR_UP] = @@ -15222,7 +15860,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_GEAR_UP, }, [MOVE_THROAT_CHOP] = @@ -15247,7 +15886,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_THROAT_CHOP, }, [MOVE_POLLEN_PUFF] = @@ -15268,7 +15908,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_POLLEN_PUFF, }, [MOVE_ANCHOR_SHOT] = @@ -15293,7 +15934,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ANCHOR_SHOT, }, [MOVE_PSYCHIC_TERRAIN] = @@ -15316,7 +15958,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_PSYCHIC_TERRAIN, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_PSYCHIC_TERRAIN, }, [MOVE_LUNGE] = @@ -15341,7 +15984,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_LUNGE, }, [MOVE_FIRE_LASH] = @@ -15367,6 +16011,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, + .battleAnimScript = Move_FIRE_LASH, }, [MOVE_POWER_TRIP] = @@ -15387,7 +16032,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_WHEN_LATER, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_POWER_TRIP, }, [MOVE_BURN_UP] = @@ -15414,6 +16060,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, + .battleAnimScript = Move_BURN_UP, }, [MOVE_SPEED_SWAP] = @@ -15435,7 +16082,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SPEED_SWAP, }, [MOVE_SMART_STRIKE] = @@ -15456,7 +16104,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_FIRST, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SMART_STRIKE, }, [MOVE_PURIFY] = @@ -15480,7 +16129,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_PURIFY, }, [MOVE_REVELATION_DANCE] = @@ -15501,7 +16151,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_REPETITION_NOT_BORING, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_REVELATION_DANCE, }, [MOVE_CORE_ENFORCER] = @@ -15525,7 +16176,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_CORE_ENFORCER, }, [MOVE_TROP_KICK] = @@ -15550,7 +16202,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_TROP_KICK, }, [MOVE_INSTRUCT] = @@ -15575,7 +16228,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONE, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_INSTRUCT, }, [MOVE_BEAK_BLAST] = @@ -15603,7 +16257,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_BEAK_BLAST, }, [MOVE_CLANGING_SCALES] = @@ -15629,7 +16284,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_CLANGING_SCALES, }, [MOVE_DRAGON_HAMMER] = @@ -15651,6 +16307,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_DRAGON_BREATH, COMBO_STARTER_DRAGON_DANCE, COMBO_STARTER_DRAGON_RAGE, COMBO_STARTER_DRAGON_RUSH, COMBO_STARTER_DRAGON_TAIL}, + .battleAnimScript = Move_DRAGON_HAMMER, }, [MOVE_BRUTAL_SWING] = @@ -15671,7 +16328,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_BRUTAL_SWING, }, [MOVE_AURORA_VEIL] = @@ -15696,6 +16354,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_HAIL}, + .battleAnimScript = Move_AURORA_VEIL, }, [MOVE_SHELL_TRAP] = @@ -15722,7 +16381,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_LAST, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SHELL_TRAP, }, [MOVE_FLEUR_CANNON] = @@ -15747,7 +16407,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FLEUR_CANNON, }, [MOVE_PSYCHIC_FANGS] = @@ -15769,7 +16430,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_PSYCHIC_FANGS, }, [MOVE_STOMPING_TANTRUM] = @@ -15791,7 +16453,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_STOMPING_TANTRUM, }, [MOVE_SHADOW_BONE] = @@ -15816,6 +16479,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_SHADOW_BONE, .contestComboMoves = {COMBO_STARTER_BONE_CLUB, COMBO_STARTER_BONEMERANG, COMBO_STARTER_BONE_RUSH}, + .battleAnimScript = Move_SHADOW_BONE, }, [MOVE_ACCELEROCK] = @@ -15836,7 +16500,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ACCELEROCK, }, [MOVE_LIQUIDATION] = @@ -15862,6 +16527,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, + .battleAnimScript = Move_LIQUIDATION, }, [MOVE_PRISMATIC_LASER] = @@ -15885,7 +16551,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_PRISMATIC_LASER, }, [MOVE_SPECTRAL_THIEF] = @@ -15911,7 +16578,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SPECTRAL_THIEF, }, [MOVE_SUNSTEEL_STRIKE] = @@ -15934,7 +16602,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SUNSTEEL_STRIKE, }, [MOVE_MOONGEIST_BEAM] = @@ -15956,7 +16625,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_MOONGEIST_BEAM, }, [MOVE_TEARFUL_LOOK] = @@ -15979,7 +16649,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_LAST, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_TEARFUL_LOOK, }, [MOVE_ZING_ZAP] = @@ -16005,6 +16676,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARGE}, + .battleAnimScript = Move_ZING_ZAP, }, [MOVE_NATURES_MADNESS] = @@ -16025,7 +16697,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_NATURES_MADNESS, }, [MOVE_MULTI_ATTACK] = @@ -16047,7 +16720,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_MULTI_ATTACK, }, [MOVE_MIND_BLOWN] = @@ -16068,7 +16742,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_MIND_BLOWN, }, [MOVE_PLASMA_FISTS] = @@ -16091,7 +16766,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_PLASMA_FISTS, }, [MOVE_PHOTON_GEYSER] = @@ -16113,7 +16789,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_PHOTON_GEYSER, }, [MOVE_ZIPPY_ZAP] = @@ -16140,6 +16817,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .chance = 100, }), #endif + .battleAnimScript = Move_ZIPPY_ZAP, }, [MOVE_SPLISHY_SPLASH] = @@ -16162,6 +16840,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_PARALYSIS, .chance = 30, }), + .battleAnimScript = Move_SPLISHY_SPLASH, }, [MOVE_FLOATY_FALL] = @@ -16186,6 +16865,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_FLINCH, .chance = 30, }), + .battleAnimScript = Move_FLOATY_FALL, }, [MOVE_PIKA_PAPOW] = @@ -16204,6 +16884,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_SPECIAL, .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8, .metronomeBanned = TRUE, + .battleAnimScript = Move_PIKA_PAPOW, }, [MOVE_BOUNCY_BUBBLE] = @@ -16228,6 +16909,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8, .metronomeBanned = TRUE, .healingMove = B_HEAL_BLOCKING >= GEN_6, + .battleAnimScript = Move_BOUNCY_BUBBLE, }, [MOVE_BUZZY_BUZZ] = @@ -16250,6 +16932,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_PARALYSIS, .chance = 100, }), + .battleAnimScript = Move_BUZZY_BUZZ, }, [MOVE_SIZZLY_SLIDE] = @@ -16274,6 +16957,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_BURN, .chance = 100, }), + .battleAnimScript = Move_SIZZLY_SLIDE, }, [MOVE_GLITZY_GLOW] = @@ -16292,6 +16976,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_SPECIAL, .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8, .metronomeBanned = TRUE, + .battleAnimScript = Move_GLITZY_GLOW, }, [MOVE_BADDY_BAD] = @@ -16310,6 +16995,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_SPECIAL, .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8, .metronomeBanned = TRUE, + .battleAnimScript = Move_BADDY_BAD, }, [MOVE_SAPPY_SEED] = @@ -16329,6 +17015,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8, .magicCoatAffected = TRUE, .metronomeBanned = TRUE, + .battleAnimScript = Move_SAPPY_SEED, }, [MOVE_FREEZY_FROST] = @@ -16347,6 +17034,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_SPECIAL, .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8, .metronomeBanned = TRUE, + .battleAnimScript = Move_FREEZY_FROST, }, [MOVE_SPARKLY_SWIRL] = @@ -16365,6 +17053,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_SPECIAL, .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8, .metronomeBanned = TRUE, + .battleAnimScript = Move_SPARKLY_SWIRL, }, [MOVE_VEEVEE_VOLLEY] = @@ -16384,6 +17073,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .makesContact = TRUE, .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8, .metronomeBanned = TRUE, + .battleAnimScript = Move_VEEVEE_VOLLEY, }, [MOVE_DOUBLE_IRON_BASH] = @@ -16412,7 +17102,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_REPETITION_NOT_BORING, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_DOUBLE_IRON_BASH, }, [MOVE_DYNAMAX_CANNON] = @@ -16442,6 +17133,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, + .battleAnimScript = Move_DYNAMAX_CANNON, }, [MOVE_SNIPE_SHOT] = @@ -16462,7 +17154,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SNIPE_SHOT, }, [MOVE_JAW_LOCK] = @@ -16487,7 +17180,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_JAW_LOCK, }, [MOVE_STUFF_CHEEKS] = @@ -16510,7 +17204,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_STUFF_CHEEKS, }, [MOVE_NO_RETREAT] = @@ -16533,7 +17228,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_NO_RETREAT, }, [MOVE_TAR_SHOT] = @@ -16554,7 +17250,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_TAR_SHOT, }, [MOVE_MAGIC_POWDER] = @@ -16577,7 +17274,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_MAGIC_POWDER, }, [MOVE_DRAGON_DARTS] = @@ -16600,6 +17298,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, + .battleAnimScript = Move_DRAGON_DARTS, }, [MOVE_TEATIME] = @@ -16623,6 +17322,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, + .battleAnimScript = Move_TEATIME, }, [MOVE_OCTOLOCK] = @@ -16642,7 +17342,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_OCTOLOCK, }, [MOVE_BOLT_BEAK] = @@ -16663,7 +17364,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_FIRST, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_BOLT_BEAK, }, [MOVE_FISHIOUS_REND] = @@ -16685,7 +17387,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_FIRST, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FISHIOUS_REND, }, [MOVE_COURT_CHANGE] = @@ -16706,7 +17409,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_COURT_CHANGE, }, [MOVE_CLANGOROUS_SOUL] = @@ -16732,7 +17436,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_CLANGOROUS_SOUL, }, [MOVE_BODY_PRESS] = @@ -16755,7 +17460,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_BODY_PRESS, }, [MOVE_DECORATE] = @@ -16778,7 +17484,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_DECORATE, }, [MOVE_DRUM_BEATING] = @@ -16803,7 +17510,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_DRUM_BEATING, }, [MOVE_SNAP_TRAP] = @@ -16829,7 +17537,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SNAP_TRAP, }, [MOVE_PYRO_BALL] = @@ -16856,7 +17565,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_PYRO_BALL, }, [MOVE_BEHEMOTH_BLADE] = @@ -16883,6 +17593,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, + .battleAnimScript = Move_BEHEMOTH_BLADE, }, [MOVE_BEHEMOTH_BASH] = @@ -16908,6 +17619,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, + .battleAnimScript = Move_BEHEMOTH_BASH, }, [MOVE_AURA_WHEEL] = @@ -16933,7 +17645,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_FIRST, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_AURA_WHEEL, }, [MOVE_BREAKING_SWIPE] = @@ -16960,6 +17673,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, + .battleAnimScript = Move_BREAKING_SWIPE, }, [MOVE_BRANCH_POKE] = @@ -16981,7 +17695,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_BRANCH_POKE, }, [MOVE_OVERDRIVE] = @@ -17005,6 +17720,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, + .battleAnimScript = Move_OVERDRIVE, }, [MOVE_APPLE_ACID] = @@ -17029,7 +17745,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_APPLE_ACID, }, [MOVE_GRAV_APPLE] = @@ -17055,6 +17772,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, + .battleAnimScript = Move_GRAV_APPLE, }, [MOVE_SPIRIT_BREAK] = @@ -17080,7 +17798,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SPIRIT_BREAK, }, [MOVE_STRANGE_STEAM] = @@ -17105,7 +17824,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_STRANGE_STEAM, }, [MOVE_LIFE_DEW] = @@ -17131,7 +17851,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_QUALITY_DEPENDS_ON_TIMING, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_LIFE_DEW, }, [MOVE_OBSTRUCT] = @@ -17156,6 +17877,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, + .battleAnimScript = Move_OBSTRUCT, }, [MOVE_FALSE_SURRENDER] = @@ -17177,7 +17899,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_FIRST, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FALSE_SURRENDER, }, [MOVE_METEOR_ASSAULT] = @@ -17203,7 +17926,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_METEOR_ASSAULT, }, [MOVE_ETERNABEAM] = @@ -17228,7 +17952,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_ETERNABEAM, }, [MOVE_STEEL_BEAM] = @@ -17249,7 +17974,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_STEEL_BEAM, }, [MOVE_EXPANDING_FORCE] = @@ -17269,7 +17995,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {COMBO_STARTER_PSYCHIC_TERRAIN} + .contestComboMoves = {COMBO_STARTER_PSYCHIC_TERRAIN}, + .battleAnimScript = Move_EXPANDING_FORCE, }, [MOVE_STEEL_ROLLER] = @@ -17293,6 +18020,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, + .battleAnimScript = Move_STEEL_ROLLER, }, [MOVE_SCALE_SHOT] = @@ -17314,6 +18042,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, + .battleAnimScript = Move_SCALE_SHOT, }, [MOVE_METEOR_BEAM] = @@ -17341,6 +18070,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, + .battleAnimScript = Move_METEOR_BEAM, }, [MOVE_SHELL_SIDE_ARM] = @@ -17364,7 +18094,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SHELL_SIDE_ARM, }, [MOVE_MISTY_EXPLOSION] = @@ -17384,7 +18115,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {COMBO_STARTER_MISTY_TERRAIN} + .contestComboMoves = {COMBO_STARTER_MISTY_TERRAIN}, + .battleAnimScript = Move_MISTY_EXPLOSION, }, [MOVE_GRASSY_GLIDE] = @@ -17406,7 +18138,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {COMBO_STARTER_GRASSY_TERRAIN} + .contestComboMoves = {COMBO_STARTER_GRASSY_TERRAIN}, + .battleAnimScript = Move_GRASSY_GLIDE, }, [MOVE_RISING_VOLTAGE] = @@ -17426,7 +18159,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {COMBO_STARTER_ELECTRIC_TERRAIN} + .contestComboMoves = {COMBO_STARTER_ELECTRIC_TERRAIN}, + .battleAnimScript = Move_RISING_VOLTAGE, }, [MOVE_TERRAIN_PULSE] = @@ -17448,6 +18182,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_ELECTRIC_TERRAIN, COMBO_STARTER_MISTY_TERRAIN, COMBO_STARTER_GRASSY_TERRAIN, COMBO_STARTER_PSYCHIC_TERRAIN}, + .battleAnimScript = Move_TERRAIN_PULSE, }, [MOVE_SKITTER_SMACK] = @@ -17472,7 +18207,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SKITTER_SMACK, }, [MOVE_BURNING_JEALOUSY] = @@ -17497,7 +18233,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_BURNING_JEALOUSY, }, [MOVE_LASH_OUT] = @@ -17518,7 +18255,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_PREV_MON, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_LASH_OUT, }, [MOVE_POLTERGEIST] = @@ -17539,6 +18277,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, + .battleAnimScript = Move_POLTERGEIST, }, [MOVE_CORROSIVE_GAS] = @@ -17559,7 +18298,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_CORROSIVE_GAS, }, [MOVE_COACHING] = @@ -17582,7 +18322,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_COACHING, }, [MOVE_FLIP_TURN] = @@ -17603,7 +18344,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_AVOID_STARTLE, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FLIP_TURN, }, [MOVE_TRIPLE_AXEL] = @@ -17625,7 +18367,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE, .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_TRIPLE_AXEL, }, [MOVE_DUAL_WINGBEAT] = @@ -17648,6 +18391,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, + .battleAnimScript = Move_DUAL_WINGBEAT, }, [MOVE_SCORCHING_SANDS] = @@ -17672,7 +18416,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SCORCHING_SANDS, }, [MOVE_JUNGLE_HEALING] = @@ -17698,6 +18443,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, + .battleAnimScript = Move_JUNGLE_HEALING, }, [MOVE_WICKED_BLOW] = @@ -17721,7 +18467,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_WICKED_BLOW, }, [MOVE_SURGING_STRIKES] = @@ -17746,7 +18493,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL, .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_SURGING_STRIKES, }, [MOVE_THUNDER_CAGE] = @@ -17770,7 +18518,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_THUNDER_CAGE, }, [MOVE_DRAGON_ENERGY] = @@ -17791,7 +18540,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_WHEN_LATER, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_DRAGON_ENERGY, }, [MOVE_FREEZING_GLARE] = @@ -17820,7 +18570,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_FREEZING_GLARE, }, [MOVE_FIERY_WRATH] = @@ -17846,6 +18597,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, + .battleAnimScript = Move_FIERY_WRATH, }, [MOVE_THUNDEROUS_KICK] = @@ -17872,6 +18624,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, + .battleAnimScript = Move_THUNDEROUS_KICK, }, [MOVE_GLACIAL_LANCE] = @@ -17893,6 +18646,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, + .battleAnimScript = Move_GLACIAL_LANCE, }, [MOVE_ASTRAL_BARRAGE] = @@ -17914,6 +18668,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, + .battleAnimScript = Move_ASTRAL_BARRAGE, }, [MOVE_EERIE_SPELL] = @@ -17935,7 +18690,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestEffect = CONTEST_EFFECT_BETTER_WHEN_LATER, .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, - .contestComboMoves = {0} + .contestComboMoves = {0}, + .battleAnimScript = Move_EERIE_SPELL, }, [MOVE_DIRE_CLAW] = @@ -17957,6 +18713,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_DIRE_CLAW, .chance = 50, }), + .battleAnimScript = Move_DIRE_CLAW, }, [MOVE_PSYSHIELD_BASH] = @@ -17979,6 +18736,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .self = TRUE, .chance = 100, }), + .battleAnimScript = Move_PSYSHIELD_BASH, }, [MOVE_POWER_SHIFT] = @@ -17999,6 +18757,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .ignoresProtect = TRUE, .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, + .battleAnimScript = Move_POWER_SHIFT, }, [MOVE_STONE_AXE] = @@ -18021,6 +18780,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_STEALTH_ROCK, .chance = 100, }), + .battleAnimScript = Move_STONE_AXE, }, [MOVE_SPRINGTIDE_STORM] = @@ -18043,6 +18803,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_ATK_MINUS_1, .chance = 30, }), + .battleAnimScript = Move_SPRINGTIDE_STORM, }, [MOVE_MYSTICAL_POWER] = @@ -18064,6 +18825,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .self = TRUE, .chance = 100, }), + .battleAnimScript = Move_MYSTICAL_POWER, }, [MOVE_RAGING_FURY] = @@ -18085,6 +18847,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_THRASH, .self = TRUE, }), + .battleAnimScript = Move_RAGING_FURY, }, [MOVE_WAVE_CRASH] = @@ -18104,6 +18867,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_PHYSICAL, .makesContact = TRUE, .skyBattleBanned = B_EXTRAPOLATED_MOVE_FLAGS, + .battleAnimScript = Move_WAVE_CRASH, }, [MOVE_CHLOROBLAST] = @@ -18120,6 +18884,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_SPECIAL, + .battleAnimScript = Move_CHLOROBLAST, }, [MOVE_MOUNTAIN_GALE] = @@ -18140,6 +18905,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_FLINCH, .chance = 30, }), + .battleAnimScript = Move_MOUNTAIN_GALE, }, [MOVE_VICTORY_DANCE] = @@ -18160,6 +18926,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .snatchAffected = TRUE, .ignoresProtect = TRUE, .mirrorMoveBanned = TRUE, + .battleAnimScript = Move_VICTORY_DANCE, }, [MOVE_HEADLONG_RUSH] = @@ -18182,6 +18949,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_DEF_SPDEF_DOWN, .self = TRUE, }), + .battleAnimScript = Move_HEADLONG_RUSH, }, [MOVE_BARB_BARRAGE] = @@ -18203,6 +18971,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_POISON, .chance = 50, }), + .battleAnimScript = Move_BARB_BARRAGE, }, [MOVE_ESPER_WING] = @@ -18225,6 +18994,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .self = TRUE, .chance = 100, }), + .battleAnimScript = Move_ESPER_WING, }, [MOVE_BITTER_MALICE] = @@ -18245,6 +19015,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_ATK_MINUS_1, .chance = 100, }), + .battleAnimScript = Move_BITTER_MALICE, }, [MOVE_SHELTER] = @@ -18264,6 +19035,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .snatchAffected = TRUE, .ignoresProtect = TRUE, .mirrorMoveBanned = TRUE, + .battleAnimScript = Move_SHELTER, }, [MOVE_TRIPLE_ARROWS] = @@ -18289,6 +19061,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_FLINCH, .chance = 30, }), + .battleAnimScript = Move_TRIPLE_ARROWS, }, [MOVE_INFERNAL_PARADE] = @@ -18310,6 +19083,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_BURN, .chance = 30, }), + .battleAnimScript = Move_INFERNAL_PARADE, }, [MOVE_CEASELESS_EDGE] = @@ -18332,6 +19106,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_SPIKES, .chance = 100, }), + .battleAnimScript = Move_CEASELESS_EDGE, }, [MOVE_BLEAKWIND_STORM] = @@ -18353,6 +19128,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_SPD_MINUS_1, .chance = 30, }), + .battleAnimScript = Move_BLEAKWIND_STORM, }, [MOVE_WILDBOLT_STORM] = @@ -18374,6 +19150,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_PARALYSIS, .chance = 20, }), + .battleAnimScript = Move_WILDBOLT_STORM, }, [MOVE_SANDSEAR_STORM] = @@ -18395,6 +19172,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_BURN, .chance = 20, }), + .battleAnimScript = Move_SANDSEAR_STORM, }, [MOVE_LUNAR_BLESSING] = @@ -18415,6 +19193,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .ignoresProtect = TRUE, .mirrorMoveBanned = TRUE, .healingMove = TRUE, + .battleAnimScript = Move_LUNAR_BLESSING, }, [MOVE_TAKE_HEART] = @@ -18434,6 +19213,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .snatchAffected = TRUE, .ignoresProtect = TRUE, .mirrorMoveBanned = TRUE, + .battleAnimScript = Move_TAKE_HEART, }, [MOVE_TERA_BLAST] = @@ -18455,6 +19235,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_TERA_BLAST, .self = TRUE, }), + .battleAnimScript = Move_TERA_BLAST, }, [MOVE_SILK_TRAP] = @@ -18474,6 +19255,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .ignoresProtect = TRUE, .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, + .battleAnimScript = Move_SILK_TRAP, }, [MOVE_AXE_KICK] = @@ -18495,6 +19277,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_CONFUSION, .chance = 30, }), + .battleAnimScript = Move_AXE_KICK, }, [MOVE_LAST_RESPECTS] = @@ -18512,6 +19295,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .metronomeBanned = TRUE, // Only since it isn't implemented yet + .battleAnimScript = Move_LAST_RESPECTS, }, [MOVE_LUMINA_CRASH] = @@ -18532,6 +19316,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_SP_DEF_MINUS_2, .chance = 100, }), + .battleAnimScript = Move_LUMINA_CRASH, }, [MOVE_ORDER_UP] = @@ -18550,6 +19335,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_PHYSICAL, .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, + .battleAnimScript = Move_ORDER_UP, }, [MOVE_JET_PUNCH] = @@ -18569,6 +19355,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .makesContact = TRUE, .punchingMove = TRUE, .metronomeBanned = TRUE, + .battleAnimScript = Move_JET_PUNCH, }, [MOVE_SPICY_EXTRACT] = @@ -18587,6 +19374,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_STATUS, .magicCoatAffected = TRUE, .metronomeBanned = TRUE, + .battleAnimScript = Move_SPICY_EXTRACT, }, [MOVE_SPIN_OUT] = @@ -18609,6 +19397,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_SPD_MINUS_2, .self = TRUE, }), + .battleAnimScript = Move_SPIN_OUT, }, [MOVE_POPULATION_BOMB] = @@ -18629,6 +19418,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .slicingMove = TRUE, .metronomeBanned = TRUE, .strikeCount = 10, + .battleAnimScript = Move_POPULATION_BOMB, }, [MOVE_ICE_SPINNER] = @@ -18648,6 +19438,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .makesContact = TRUE, .argument = ARG_TRY_REMOVE_TERRAIN_HIT, // Remove the active field terrain if there is one. .skyBattleBanned = B_EXTRAPOLATED_MOVE_FLAGS, + .battleAnimScript = Move_ICE_SPINNER, }, [MOVE_GLAIVE_RUSH] = @@ -18665,6 +19456,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .makesContact = TRUE, + .battleAnimScript = Move_GLAIVE_RUSH, }, [MOVE_REVIVAL_BLESSING] = @@ -18686,6 +19478,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .metronomeBanned = TRUE, .healingMove = TRUE, .sketchBanned = (B_SKETCH_BANS >= GEN_9), + .battleAnimScript = Move_REVIVAL_BLESSING, }, [MOVE_SALT_CURE] = @@ -18703,6 +19496,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .metronomeBanned = TRUE, + .battleAnimScript = Move_SALT_CURE, }, [MOVE_TRIPLE_DIVE] = @@ -18721,6 +19515,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_PHYSICAL, .makesContact = TRUE, .strikeCount = 3, + .battleAnimScript = Move_TRIPLE_DIVE, }, [MOVE_MORTAL_SPIN] = @@ -18746,6 +19541,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_POISON, .chance = 100, }), + .battleAnimScript = Move_MORTAL_SPIN, }, [MOVE_DOODLE] = @@ -18765,6 +19561,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .ignoresProtect = TRUE, .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, + .battleAnimScript = Move_DOODLE, }, [MOVE_FILLET_AWAY] = @@ -18786,6 +19583,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .ignoresProtect = TRUE, .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, + .battleAnimScript = Move_FILLET_AWAY, }, [MOVE_KOWTOW_CLEAVE] = @@ -18804,6 +19602,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_PHYSICAL, .makesContact = TRUE, .slicingMove = TRUE, + .battleAnimScript = Move_KOWTOW_CLEAVE, }, [MOVE_FLOWER_TRICK] = @@ -18821,6 +19620,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .alwaysCriticalHit = TRUE, + .battleAnimScript = Move_FLOWER_TRICK, }, [MOVE_TORCH_SONG] = @@ -18844,6 +19644,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .self = TRUE, .chance = 100, }), + .battleAnimScript = Move_TORCH_SONG, }, [MOVE_AQUA_STEP] = @@ -18867,6 +19668,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .self = TRUE, .chance = 100, }), + .battleAnimScript = Move_AQUA_STEP, }, [MOVE_RAGING_BULL] = @@ -18885,6 +19687,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_PHYSICAL, .makesContact = TRUE, .metronomeBanned = TRUE, + .battleAnimScript = Move_RAGING_BULL, }, [MOVE_MAKE_IT_RAIN] = @@ -18909,6 +19712,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_SP_ATK_MINUS_1, .self = TRUE, }), + .battleAnimScript = Move_MAKE_IT_RAIN, }, [MOVE_RUINATION] = @@ -18926,6 +19730,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_SPECIAL, .metronomeBanned = TRUE, + .battleAnimScript = Move_RUINATION, }, [MOVE_COLLISION_COURSE] = @@ -18944,6 +19749,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_PHYSICAL, .makesContact = TRUE, .metronomeBanned = TRUE, + .battleAnimScript = Move_COLLISION_COURSE, }, [MOVE_ELECTRO_DRIFT] = @@ -18962,6 +19768,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_SPECIAL, .makesContact = TRUE, .metronomeBanned = TRUE, + .battleAnimScript = Move_ELECTRO_DRIFT, }, [MOVE_SHED_TAIL] = @@ -18982,6 +19789,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .ignoresProtect = TRUE, .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, + .battleAnimScript = Move_SHED_TAIL, }, [MOVE_CHILLY_RECEPTION] = @@ -19002,6 +19810,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .ignoresProtect = TRUE, .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, + .battleAnimScript = Move_CHILLY_RECEPTION, }, [MOVE_TIDY_UP] = @@ -19021,6 +19830,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .ignoresProtect = TRUE, .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, + .battleAnimScript = Move_TIDY_UP, }, [MOVE_SNOWSCAPE] = @@ -19041,6 +19851,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .ignoresProtect = TRUE, .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, + .battleAnimScript = Move_SNOWSCAPE, }, [MOVE_POUNCE] = @@ -19063,6 +19874,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_SPD_MINUS_1, .chance = 100, }), + .battleAnimScript = Move_POUNCE, }, [MOVE_TRAILBLAZE] = @@ -19086,6 +19898,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .self = TRUE, .chance = 100, }), + .battleAnimScript = Move_TRAILBLAZE, }, [MOVE_CHILLING_WATER] = @@ -19107,6 +19920,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_ATK_MINUS_1, .chance = 100, }), + .battleAnimScript = Move_CHILLING_WATER, }, [MOVE_HYPER_DRILL] = @@ -19126,6 +19940,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .makesContact = TRUE, .ignoresProtect = TRUE, .metronomeBanned = TRUE, + .battleAnimScript = Move_HYPER_DRILL, }, [MOVE_TWIN_BEAM] = @@ -19144,6 +19959,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_SPECIAL, .strikeCount = 2, .metronomeBanned = TRUE, + .battleAnimScript = Move_TWIN_BEAM, }, [MOVE_RAGE_FIST] = @@ -19163,6 +19979,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .makesContact = TRUE, .punchingMove = TRUE, .metronomeBanned = TRUE, + .battleAnimScript = Move_RAGE_FIST, }, [MOVE_ARMOR_CANNON] = @@ -19184,6 +20001,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_DEF_SPDEF_DOWN, .self = TRUE, }), + .battleAnimScript = Move_ARMOR_CANNON, }, [MOVE_BITTER_BLADE] = @@ -19203,6 +20021,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .makesContact = TRUE, .slicingMove = TRUE, .healingMove = TRUE, + .battleAnimScript = Move_BITTER_BLADE, }, [MOVE_DOUBLE_SHOCK] = @@ -19226,6 +20045,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_REMOVE_ARG_TYPE, .self = TRUE, }), + .battleAnimScript = Move_DOUBLE_SHOCK, }, [MOVE_GIGATON_HAMMER] = @@ -19243,6 +20063,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .cantUseTwice = TRUE, + .battleAnimScript = Move_GIGATON_HAMMER, }, [MOVE_COMEUPPANCE] = @@ -19262,6 +20083,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .makesContact = TRUE, .meFirstBanned = TRUE, .metronomeBanned = TRUE, + .battleAnimScript = Move_COMEUPPANCE, }, [MOVE_AQUA_CUTTER] = @@ -19280,6 +20102,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .slicingMove = TRUE, + .battleAnimScript = Move_AQUA_CUTTER, }, [MOVE_BLAZING_TORQUE] = @@ -19308,6 +20131,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_BURN, .chance = 30, }), + .battleAnimScript = Move_BLAZING_TORQUE, }, [MOVE_WICKED_TORQUE] = @@ -19336,6 +20160,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_SLEEP, .chance = 10, }), + .battleAnimScript = Move_WICKED_TORQUE, }, [MOVE_NOXIOUS_TORQUE] = @@ -19364,6 +20189,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_POISON, .chance = 30, }), + .battleAnimScript = Move_NOXIOUS_TORQUE, }, [MOVE_COMBAT_TORQUE] = @@ -19392,6 +20218,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_PARALYSIS, .chance = 30, }), + .battleAnimScript = Move_COMBAT_TORQUE, }, [MOVE_MAGICAL_TORQUE] = @@ -19420,6 +20247,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_CONFUSION, .chance = 30, }), + .battleAnimScript = Move_MAGICAL_TORQUE, }, [MOVE_PSYBLADE] = @@ -19438,6 +20266,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_PHYSICAL, .makesContact = TRUE, .slicingMove = TRUE, + .battleAnimScript = Move_PSYBLADE, }, [MOVE_HYDRO_STEAM] = @@ -19455,6 +20284,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_SPECIAL, .thawsUser = TRUE, + .battleAnimScript = Move_HYDRO_STEAM, }, [MOVE_BLOOD_MOON] = @@ -19472,6 +20302,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_SPECIAL, .cantUseTwice = TRUE, + .battleAnimScript = Move_BLOOD_MOON, }, [MOVE_MATCHA_GOTCHA] = @@ -19495,6 +20326,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_BURN, .chance = 20, }), + .battleAnimScript = Move_MATCHA_GOTCHA, }, [MOVE_SYRUP_BOMB] = @@ -19517,6 +20349,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_SYRUP_BOMB, .chance = 100, }), + .battleAnimScript = Move_SYRUP_BOMB, }, [MOVE_IVY_CUDGEL] = @@ -19535,6 +20368,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .metronomeBanned = TRUE, + .battleAnimScript = Move_IVY_CUDGEL, }, [MOVE_ELECTRO_SHOT] = @@ -19557,6 +20391,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .self = TRUE, .onChargeTurnOnly = TRUE, }, SHEER_FORCE_HACK), + .battleAnimScript = Move_ELECTRO_SHOT, }, [MOVE_TERA_STARSTORM] = @@ -19577,6 +20412,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .copycatBanned = TRUE, .mimicBanned = TRUE, .sketchBanned = (B_SKETCH_BANS >= GEN_9), + .battleAnimScript = Move_TERA_STARSTORM, }, [MOVE_FICKLE_BEAM] = @@ -19593,6 +20429,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_SPECIAL, + .battleAnimScript = Move_FICKLE_BEAM, }, [MOVE_BURNING_BULWARK] = @@ -19615,6 +20452,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .metronomeBanned = TRUE, .copycatBanned = TRUE, .assistBanned = TRUE, + .battleAnimScript = Move_BURNING_BULWARK, }, [MOVE_THUNDERCLAP] = @@ -19629,6 +20467,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 1, .category = DAMAGE_CATEGORY_SPECIAL, + .battleAnimScript = Move_THUNDERCLAP, }, [MOVE_MIGHTY_CLEAVE] = @@ -19646,6 +20485,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .makesContact = TRUE, .ignoresProtect = TRUE, .slicingMove = TRUE, + .battleAnimScript = Move_MIGHTY_CLEAVE, }, [MOVE_TACHYON_CUTTER] = @@ -19664,6 +20504,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_SPECIAL, .strikeCount = 2, .slicingMove = TRUE, + .battleAnimScript = Move_TACHYON_CUTTER, }, [MOVE_HARD_PRESS] = @@ -19680,6 +20521,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_PHYSICAL, .argument = 100, .makesContact = TRUE, + .battleAnimScript = Move_HARD_PRESS, }, [MOVE_DRAGON_CHEER] = @@ -19697,6 +20539,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_STATUS, .ignoresSubstitute = TRUE, + .battleAnimScript = Move_DRAGON_CHEER, }, [MOVE_ALLURING_VOICE] = @@ -19720,6 +20563,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .onlyIfTargetRaisedStats = TRUE, .chance = 100, }), + .battleAnimScript = Move_ALLURING_VOICE, }, [MOVE_TEMPER_FLARE] = @@ -19737,6 +20581,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .makesContact = TRUE, + .battleAnimScript = Move_TEMPER_FLARE, }, [MOVE_SUPERCELL_SLAM] = @@ -19754,6 +20599,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .makesContact = TRUE, + .battleAnimScript = Move_SUPERCELL_SLAM, }, [MOVE_PSYCHIC_NOISE] = @@ -19776,6 +20622,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_PSYCHIC_NOISE, .chance = 100, }), + .battleAnimScript = Move_PSYCHIC_NOISE, }, [MOVE_UPPER_HAND] = @@ -19797,6 +20644,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_FLINCH, .chance = 100, }), + .battleAnimScript = Move_UPPER_HAND, }, [MOVE_MALIGNANT_CHAIN] = @@ -19817,6 +20665,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_TOXIC, .chance = 50, }), + .battleAnimScript = Move_MALIGNANT_CHAIN, }, // Z-Moves @@ -19832,6 +20681,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, //determined from move type + .battleAnimScript = Move_BREAKNECK_BLITZ, }, [MOVE_ALL_OUT_PUMMELING] = { @@ -19845,6 +20695,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, + .battleAnimScript = Move_ALL_OUT_PUMMELING, }, [MOVE_SUPERSONIC_SKYSTRIKE] = { @@ -19858,6 +20709,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, + .battleAnimScript = Move_SUPERSONIC_SKYSTRIKE, }, [MOVE_ACID_DOWNPOUR] = { @@ -19871,6 +20723,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, + .battleAnimScript = Move_ACID_DOWNPOUR, }, [MOVE_TECTONIC_RAGE] = { @@ -19885,6 +20738,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .skyBattleBanned = B_EXTRAPOLATED_MOVE_FLAGS, + .battleAnimScript = Move_TECTONIC_RAGE, }, [MOVE_CONTINENTAL_CRUSH] = { @@ -19898,6 +20752,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, + .battleAnimScript = Move_CONTINENTAL_CRUSH, }, [MOVE_SAVAGE_SPIN_OUT] = { @@ -19911,6 +20766,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, + .battleAnimScript = Move_SAVAGE_SPIN_OUT, }, [MOVE_NEVER_ENDING_NIGHTMARE] = { @@ -19924,6 +20780,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, + .battleAnimScript = Move_NEVER_ENDING_NIGHTMARE, }, [MOVE_CORKSCREW_CRASH] = { @@ -19937,6 +20794,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, + .battleAnimScript = Move_CORKSCREW_CRASH, }, [MOVE_INFERNO_OVERDRIVE] = { @@ -19950,6 +20808,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, + .battleAnimScript = Move_INFERNO_OVERDRIVE, }, [MOVE_HYDRO_VORTEX] = { @@ -19963,6 +20822,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, + .battleAnimScript = Move_HYDRO_VORTEX, }, [MOVE_BLOOM_DOOM] = { @@ -19976,6 +20836,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, + .battleAnimScript = Move_BLOOM_DOOM, }, [MOVE_GIGAVOLT_HAVOC] = { @@ -19989,6 +20850,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, + .battleAnimScript = Move_GIGAVOLT_HAVOC, }, [MOVE_SHATTERED_PSYCHE] = { @@ -20002,6 +20864,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, + .battleAnimScript = Move_SHATTERED_PSYCHE, }, [MOVE_SUBZERO_SLAMMER] = { @@ -20015,6 +20878,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, + .battleAnimScript = Move_SUBZERO_SLAMMER, }, [MOVE_DEVASTATING_DRAKE] = { @@ -20028,6 +20892,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, + .battleAnimScript = Move_DEVASTATING_DRAKE, }, [MOVE_BLACK_HOLE_ECLIPSE] = { @@ -20041,6 +20906,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, + .battleAnimScript = Move_BLACK_HOLE_ECLIPSE, }, [MOVE_TWINKLE_TACKLE] = { @@ -20054,6 +20920,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, + .battleAnimScript = Move_TWINKLE_TACKLE, }, [MOVE_CATASTROPIKA] = { @@ -20067,6 +20934,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, + .battleAnimScript = Move_CATASTROPIKA, }, [MOVE_10000000_VOLT_THUNDERBOLT] = { @@ -20081,6 +20949,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_SPECIAL, + .battleAnimScript = Move_10000000_VOLT_THUNDERBOLT, }, [MOVE_STOKED_SPARKSURFER] = { @@ -20098,6 +20967,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_PARALYSIS, .chance = 100, }), + .battleAnimScript = Move_STOKED_SPARKSURFER, }, [MOVE_EXTREME_EVOBOOST] = { @@ -20111,6 +20981,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_USER, .priority = 0, .category = DAMAGE_CATEGORY_STATUS, + .battleAnimScript = Move_EXTREME_EVOBOOST, }, [MOVE_PULVERIZING_PANCAKE] = { @@ -20124,6 +20995,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, + .battleAnimScript = Move_PULVERIZING_PANCAKE, }, [MOVE_GENESIS_SUPERNOVA] = { @@ -20138,6 +21010,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_SPECIAL, .argument = ARG_SET_PSYCHIC_TERRAIN, // Set Psychic Terrain. If there's a different field terrain active, overwrite it. + .battleAnimScript = Move_GENESIS_SUPERNOVA, }, [MOVE_SINISTER_ARROW_RAID] = { @@ -20151,6 +21024,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, + .battleAnimScript = Move_SINISTER_ARROW_RAID, }, [MOVE_MALICIOUS_MOONSAULT] = { @@ -20164,6 +21038,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, + .battleAnimScript = Move_MALICIOUS_MOONSAULT, }, [MOVE_OCEANIC_OPERETTA] = { @@ -20177,6 +21052,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_SPECIAL, + .battleAnimScript = Move_OCEANIC_OPERETTA, }, [MOVE_SPLINTERED_STORMSHARDS] = { @@ -20191,6 +21067,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = ARG_TRY_REMOVE_TERRAIN_HIT, // Remove the active field terrain if there is one. + .battleAnimScript = Move_SPLINTERED_STORMSHARDS, }, [MOVE_LETS_SNUGGLE_FOREVER] = { @@ -20204,6 +21081,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, + .battleAnimScript = Move_LETS_SNUGGLE_FOREVER, }, [MOVE_CLANGOROUS_SOULBLAZE] = { @@ -20224,6 +21102,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .self = TRUE, .chance = 100, }), + .battleAnimScript = Move_CLANGOROUS_SOULBLAZE, }, [MOVE_GUARDIAN_OF_ALOLA] = { @@ -20237,6 +21116,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_SPECIAL, + .battleAnimScript = Move_GUARDIAN_OF_ALOLA, }, [MOVE_SEARING_SUNRAZE_SMASH] = { @@ -20251,6 +21131,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .ignoresTargetAbility = TRUE, + .battleAnimScript = Move_SEARING_SUNRAZE_SMASH, }, [MOVE_MENACING_MOONRAZE_MAELSTROM] = { @@ -20265,6 +21146,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_SPECIAL, .ignoresTargetAbility = TRUE, + .battleAnimScript = Move_MENACING_MOONRAZE_MAELSTROM, }, [MOVE_LIGHT_THAT_BURNS_THE_SKY] = { @@ -20279,6 +21161,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_SPECIAL, .ignoresTargetAbility = TRUE, + .battleAnimScript = Move_LIGHT_THAT_BURNS_THE_SKY, }, [MOVE_SOUL_STEALING_7_STAR_STRIKE] = { @@ -20292,6 +21175,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, + .battleAnimScript = Move_SOUL_STEALING_7_STAR_STRIKE, }, [MOVE_MAX_GUARD] = @@ -20306,6 +21190,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_USER, .priority = 4, .category = DAMAGE_CATEGORY_STATUS, + .battleAnimScript = Move_MAX_GUARD, }, [MOVE_MAX_FLARE] = @@ -20321,6 +21206,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_SUN, + .battleAnimScript = Move_MAX_FLARE, }, [MOVE_MAX_FLUTTERBY] = @@ -20336,6 +21222,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_LOWER_SP_ATK, + .battleAnimScript = Move_MAX_FLUTTERBY, }, [MOVE_MAX_LIGHTNING] = @@ -20351,6 +21238,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_ELECTRIC_TERRAIN, + .battleAnimScript = Move_MAX_LIGHTNING, }, [MOVE_MAX_STRIKE] = @@ -20366,6 +21254,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_LOWER_SPEED, + .battleAnimScript = Move_MAX_STRIKE, }, [MOVE_MAX_KNUCKLE] = @@ -20381,6 +21270,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_RAISE_TEAM_ATTACK, + .battleAnimScript = Move_MAX_KNUCKLE, }, [MOVE_MAX_PHANTASM] = @@ -20396,6 +21286,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_LOWER_DEFENSE, + .battleAnimScript = Move_MAX_PHANTASM, }, [MOVE_MAX_HAILSTORM] = @@ -20411,6 +21302,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_HAIL, + .battleAnimScript = Move_MAX_HAILSTORM, }, [MOVE_MAX_OOZE] = @@ -20426,6 +21318,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_RAISE_TEAM_SP_ATK, + .battleAnimScript = Move_MAX_OOZE, }, [MOVE_MAX_GEYSER] = @@ -20441,6 +21334,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_RAIN, + .battleAnimScript = Move_MAX_GEYSER, }, [MOVE_MAX_AIRSTREAM] = @@ -20456,6 +21350,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_RAISE_TEAM_SPEED, + .battleAnimScript = Move_MAX_AIRSTREAM, }, [MOVE_MAX_STARFALL] = @@ -20471,6 +21366,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_MISTY_TERRAIN, + .battleAnimScript = Move_MAX_STARFALL, }, [MOVE_MAX_WYRMWIND] = @@ -20486,6 +21382,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_LOWER_ATTACK, + .battleAnimScript = Move_MAX_WYRMWIND, }, [MOVE_MAX_MINDSTORM] = @@ -20501,6 +21398,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_PSYCHIC_TERRAIN, + .battleAnimScript = Move_MAX_MINDSTORM, }, [MOVE_MAX_ROCKFALL] = @@ -20516,6 +21414,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_SANDSTORM, + .battleAnimScript = Move_MAX_ROCKFALL, }, [MOVE_MAX_QUAKE] = @@ -20532,6 +21431,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_RAISE_TEAM_SP_DEF, .skyBattleBanned = B_EXTRAPOLATED_MOVE_FLAGS, + .battleAnimScript = Move_MAX_QUAKE, }, [MOVE_MAX_DARKNESS] = @@ -20547,6 +21447,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_LOWER_SP_DEF, + .battleAnimScript = Move_MAX_DARKNESS, }, [MOVE_MAX_OVERGROWTH] = @@ -20562,6 +21463,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_GRASSY_TERRAIN, + .battleAnimScript = Move_MAX_OVERGROWTH, }, [MOVE_MAX_STEELSPIKE] = @@ -20577,6 +21479,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_RAISE_TEAM_DEFENSE, + .battleAnimScript = Move_MAX_STEELSPIKE, }, [MOVE_G_MAX_VINE_LASH] = @@ -20592,6 +21495,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_VINE_LASH, + .battleAnimScript = Move_G_MAX_VINE_LASH, }, [MOVE_G_MAX_WILDFIRE] = @@ -20607,6 +21511,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_WILDFIRE, + .battleAnimScript = Move_G_MAX_WILDFIRE, }, [MOVE_G_MAX_CANNONADE] = @@ -20622,6 +21527,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_CANNONADE, + .battleAnimScript = Move_G_MAX_CANNONADE, }, [MOVE_G_MAX_BEFUDDLE] = @@ -20637,6 +21543,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_EFFECT_SPORE_FOES, + .battleAnimScript = Move_G_MAX_BEFUDDLE, }, [MOVE_G_MAX_VOLT_CRASH] = @@ -20652,6 +21559,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_PARALYZE_FOES, + .battleAnimScript = Move_G_MAX_VOLT_CRASH, }, [MOVE_G_MAX_GOLD_RUSH] = @@ -20667,6 +21575,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_CONFUSE_FOES_PAY_DAY, + .battleAnimScript = Move_G_MAX_GOLD_RUSH, }, [MOVE_G_MAX_CHI_STRIKE] = @@ -20682,6 +21591,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_CRIT_PLUS, + .battleAnimScript = Move_G_MAX_CHI_STRIKE, }, [MOVE_G_MAX_TERROR] = @@ -20697,6 +21607,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_MEAN_LOOK, + .battleAnimScript = Move_G_MAX_TERROR, }, [MOVE_G_MAX_FOAM_BURST] = @@ -20712,6 +21623,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_LOWER_SPEED_2_FOES, + .battleAnimScript = Move_G_MAX_FOAM_BURST, }, [MOVE_G_MAX_RESONANCE] = @@ -20727,6 +21639,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_AURORA_VEIL, + .battleAnimScript = Move_G_MAX_RESONANCE, }, [MOVE_G_MAX_CUDDLE] = @@ -20742,6 +21655,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_INFATUATE_FOES, + .battleAnimScript = Move_G_MAX_CUDDLE, }, [MOVE_G_MAX_REPLENISH] = @@ -20757,6 +21671,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_RECYCLE_BERRIES, + .battleAnimScript = Move_G_MAX_REPLENISH, }, [MOVE_G_MAX_MALODOR] = @@ -20772,6 +21687,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_POISON_FOES, + .battleAnimScript = Move_G_MAX_MALODOR, }, [MOVE_G_MAX_MELTDOWN] = @@ -20787,6 +21703,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_TORMENT_FOES, + .battleAnimScript = Move_G_MAX_MELTDOWN, }, [MOVE_G_MAX_DRUM_SOLO] = @@ -20803,6 +21720,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_FIXED_POWER, //EFFECT TODO .ignoresTargetAbility = TRUE, + .battleAnimScript = Move_G_MAX_DRUM_SOLO, }, [MOVE_G_MAX_FIREBALL] = @@ -20819,6 +21737,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_FIXED_POWER, //EFFECT TODO .ignoresTargetAbility = TRUE, + .battleAnimScript = Move_G_MAX_FIREBALL, }, [MOVE_G_MAX_HYDROSNIPE] = @@ -20835,6 +21754,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_FIXED_POWER, //EFFECT TODO .ignoresTargetAbility = TRUE, + .battleAnimScript = Move_G_MAX_HYDROSNIPE, }, [MOVE_G_MAX_WIND_RAGE] = @@ -20850,6 +21770,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_DEFOG, + .battleAnimScript = Move_G_MAX_WIND_RAGE, }, [MOVE_G_MAX_GRAVITAS] = @@ -20865,6 +21786,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_GRAVITY, + .battleAnimScript = Move_G_MAX_GRAVITAS, }, [MOVE_G_MAX_STONESURGE] = @@ -20880,6 +21802,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_STEALTH_ROCK, + .battleAnimScript = Move_G_MAX_STONESURGE, }, [MOVE_G_MAX_VOLCALITH] = @@ -20895,6 +21818,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_VOLCALITH, + .battleAnimScript = Move_G_MAX_VOLCALITH, }, [MOVE_G_MAX_TARTNESS] = @@ -20910,6 +21834,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_LOWER_EVASIVENESS_FOES, + .battleAnimScript = Move_G_MAX_TARTNESS, }, [MOVE_G_MAX_SWEETNESS] = @@ -20925,6 +21850,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_AROMATHERAPY, + .battleAnimScript = Move_G_MAX_SWEETNESS, }, [MOVE_G_MAX_SANDBLAST] = @@ -20940,6 +21866,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_SANDBLAST_FOES, + .battleAnimScript = Move_G_MAX_SANDBLAST, }, [MOVE_G_MAX_STUN_SHOCK] = @@ -20955,6 +21882,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_POISON_PARALYZE_FOES, + .battleAnimScript = Move_G_MAX_STUN_SHOCK, }, [MOVE_G_MAX_CENTIFERNO] = @@ -20970,6 +21898,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_FIRE_SPIN_FOES, + .battleAnimScript = Move_G_MAX_CENTIFERNO, }, [MOVE_G_MAX_SMITE] = @@ -20985,6 +21914,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_CONFUSE_FOES, + .battleAnimScript = Move_G_MAX_SMITE, }, @@ -21001,6 +21931,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_YAWN_FOE, + .battleAnimScript = Move_G_MAX_SNOOZE, }, [MOVE_G_MAX_FINALE] = @@ -21016,6 +21947,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_HEAL_TEAM, + .battleAnimScript = Move_G_MAX_FINALE, }, [MOVE_G_MAX_STEELSURGE] = @@ -21031,6 +21963,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_STEELSURGE, + .battleAnimScript = Move_G_MAX_STEELSURGE, }, [MOVE_G_MAX_DEPLETION] = @@ -21046,6 +21979,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_SPITE, + .battleAnimScript = Move_G_MAX_DEPLETION, }, [MOVE_G_MAX_ONE_BLOW] = @@ -21061,6 +21995,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_BYPASS_PROTECT, //EFFECT TODO + .battleAnimScript = Move_G_MAX_ONE_BLOW, }, [MOVE_G_MAX_RAPID_FLOW] = @@ -21076,6 +22011,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_BYPASS_PROTECT, //EFFECT TODO + .battleAnimScript = Move_G_MAX_RAPID_FLOW, }, }; diff --git a/src/data/pokemon/species_info/gen_9_families.h b/src/data/pokemon/species_info/gen_9_families.h index 538a121725..901134e3ad 100644 --- a/src/data/pokemon/species_info/gen_9_families.h +++ b/src/data/pokemon/species_info/gen_9_families.h @@ -6619,17 +6619,18 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .pokemonOffset = 0, .trainerScale = 365, .trainerOffset = 7, - //.frontPic = gMonFrontPic_TerapagosNormal, - //.frontPicSize = MON_COORDS_SIZE(64, 64), + .frontPic = gMonFrontPic_TerapagosNormal, + .frontPicSize = MON_COORDS_SIZE(64, 64), .frontPicYOffset = 0, .frontAnimFrames = sAnims_TerapagosNormal, - //.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, - //.backPic = gMonBackPic_TerapagosNormal, - //.backPicSize = MON_COORDS_SIZE(64, 64), + .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, + .enemyMonElevation = 1, + .backPic = gMonBackPic_TerapagosNormal, + .backPicSize = MON_COORDS_SIZE(64, 64), .backPicYOffset = 0, - //.backAnimId = BACK_ANIM_NONE, - //.palette = gMonPalette_TerapagosNormal, - //.shinyPalette = gMonShinyPalette_TerapagosNormal, + .backAnimId = BACK_ANIM_NONE, + .palette = gMonPalette_TerapagosNormal, + .shinyPalette = gMonShinyPalette_TerapagosNormal, .iconSprite = gMonIcon_TerapagosNormal, .iconPalIndex = 0, FOOTPRINT(TerapagosNormal) @@ -6676,17 +6677,18 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .pokemonOffset = 0, .trainerScale = 365, .trainerOffset = 7, - //.frontPic = gMonFrontPic_TerapagosTerastal, - //.frontPicSize = MON_COORDS_SIZE(64, 64), - .frontPicYOffset = 0, + .frontPic = gMonFrontPic_TerapagosTerastal, + .frontPicSize = MON_COORDS_SIZE(64, 64), + .frontPicYOffset = 8, .frontAnimFrames = sAnims_TerapagosTerastal, - //.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, - //.backPic = gMonBackPic_TerapagosTerastal, - //.backPicSize = MON_COORDS_SIZE(64, 64), + .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, + .enemyMonElevation = 1, + .backPic = gMonBackPic_TerapagosTerastal, + .backPicSize = MON_COORDS_SIZE(64, 64), .backPicYOffset = 0, - //.backAnimId = BACK_ANIM_NONE, - //.palette = gMonPalette_TerapagosTerastal, - //.shinyPalette = gMonShinyPalette_TerapagosTerastal, + .backAnimId = BACK_ANIM_NONE, + .palette = gMonPalette_TerapagosTerastal, + .shinyPalette = gMonShinyPalette_TerapagosTerastal, .iconSprite = gMonIcon_TerapagosTerastal, .iconPalIndex = 0, FOOTPRINT(TerapagosTerastal) diff --git a/src/data/pokemon_graphics/front_pic_anims.h b/src/data/pokemon_graphics/front_pic_anims.h index ab8707ac5d..d802521afe 100644 --- a/src/data/pokemon_graphics/front_pic_anims.h +++ b/src/data/pokemon_graphics/front_pic_anims.h @@ -10120,8 +10120,20 @@ PLACEHOLDER_ANIM_SINGLE_FRAME(IronCrown); #endif //P_FAMILY_IRON_CROWN #if P_FAMILY_TERAPAGOS -PLACEHOLDER_ANIM_SINGLE_FRAME(TerapagosNormal); -PLACEHOLDER_ANIM_SINGLE_FRAME(TerapagosTerastal); +static const union AnimCmd sAnim_TerapagosNormal_1[] = +{ + ANIMCMD_FRAME(0, 30), + ANIMCMD_FRAME(1, 30), + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; +static const union AnimCmd sAnim_TerapagosTerastal_1[] = +{ + ANIMCMD_FRAME(0, 30), + ANIMCMD_FRAME(1, 30), + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; PLACEHOLDER_ANIM_SINGLE_FRAME(TerapagosStellar); #endif //P_FAMILY_TERAPAGOS diff --git a/src/data/types_info.h b/src/data/types_info.h new file mode 100644 index 0000000000..f9bd233ca6 --- /dev/null +++ b/src/data/types_info.h @@ -0,0 +1,423 @@ +#include "constants/battle.h" +#include "constants/pokemon.h" + +#define X UQ_4_12 +#define ______ X(1.0) // Regular effectiveness. + +// Type matchup updates. Attacker Defender +#define STL_RS (B_UPDATED_TYPE_MATCHUPS >= GEN_6 ? X(1.0) : X(0.5)) // Ghost/Dark -> Steel +#define PSN_RS (B_UPDATED_TYPE_MATCHUPS >= GEN_2 ? X(0.5) : X(2.0)) // Bug -> Poison +#define BUG_RS (B_UPDATED_TYPE_MATCHUPS >= GEN_2 ? X(1.0) : X(2.0)) // Poison -> Bug +#define PSY_RS (B_UPDATED_TYPE_MATCHUPS >= GEN_2 ? X(2.0) : X(0.0)) // Ghost -> Psychic +#define FIR_RS (B_UPDATED_TYPE_MATCHUPS >= GEN_2 ? X(0.5) : X(1.0)) // Ice -> Fire + +const uq4_12_t gTypeEffectivenessTable[NUMBER_OF_MON_TYPES][NUMBER_OF_MON_TYPES] = +{// Defender --> + // Attacker None Normal Fighting Flying Poison Ground Rock Bug Ghost Steel Mystery Fire Water Grass Electric Psychic Ice Dragon Dark Fairy Stellar + [TYPE_NONE] = {______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______}, + [TYPE_NORMAL] = {______, ______, ______, ______, ______, ______, X(0.5), ______, X(0.0), X(0.5), ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______}, + [TYPE_FIGHTING] = {______, X(2.0), ______, X(0.5), X(0.5), ______, X(2.0), X(0.5), X(0.0), X(2.0), ______, ______, ______, ______, ______, X(0.5), X(2.0), ______, X(2.0), X(0.5), ______}, + [TYPE_FLYING] = {______, ______, X(2.0), ______, ______, ______, X(0.5), X(2.0), ______, X(0.5), ______, ______, ______, X(2.0), X(0.5), ______, ______, ______, ______, ______, ______}, + [TYPE_POISON] = {______, ______, ______, ______, X(0.5), X(0.5), X(0.5), BUG_RS, X(0.5), X(0.0), ______, ______, ______, X(2.0), ______, ______, ______, ______, ______, X(2.0), ______}, + [TYPE_GROUND] = {______, ______, ______, X(0.0), X(2.0), ______, X(2.0), X(0.5), ______, X(2.0), ______, X(2.0), ______, X(0.5), X(2.0), ______, ______, ______, ______, ______, ______}, + [TYPE_ROCK] = {______, ______, X(0.5), X(2.0), ______, X(0.5), ______, X(2.0), ______, X(0.5), ______, X(2.0), ______, ______, ______, ______, X(2.0), ______, ______, ______, ______}, + [TYPE_BUG] = {______, ______, X(0.5), X(0.5), PSN_RS, ______, ______, ______, X(0.5), X(0.5), ______, X(0.5), ______, X(2.0), ______, X(2.0), ______, ______, X(2.0), X(0.5), ______}, + [TYPE_GHOST] = {______, X(0.0), ______, ______, ______, ______, ______, ______, X(2.0), STL_RS, ______, ______, ______, ______, ______, PSY_RS, ______, ______, X(0.5), ______, ______}, + [TYPE_STEEL] = {______, ______, ______, ______, ______, ______, X(2.0), ______, ______, X(0.5), ______, X(0.5), X(0.5), ______, X(0.5), ______, X(2.0), ______, ______, X(2.0), ______}, + [TYPE_MYSTERY] = {______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______}, + [TYPE_FIRE] = {______, ______, ______, ______, ______, ______, X(0.5), X(2.0), ______, X(2.0), ______, X(0.5), X(0.5), X(2.0), ______, ______, X(2.0), X(0.5), ______, ______, ______}, + [TYPE_WATER] = {______, ______, ______, ______, ______, X(2.0), X(2.0), ______, ______, ______, ______, X(2.0), X(0.5), X(0.5), ______, ______, ______, X(0.5), ______, ______, ______}, + [TYPE_GRASS] = {______, ______, ______, X(0.5), X(0.5), X(2.0), X(2.0), X(0.5), ______, X(0.5), ______, X(0.5), X(2.0), X(0.5), ______, ______, ______, X(0.5), ______, ______, ______}, + [TYPE_ELECTRIC] = {______, ______, ______, X(2.0), ______, X(0.0), ______, ______, ______, ______, ______, ______, X(2.0), X(0.5), X(0.5), ______, ______, X(0.5), ______, ______, ______}, + [TYPE_PSYCHIC] = {______, ______, X(2.0), ______, X(2.0), ______, ______, ______, ______, X(0.5), ______, ______, ______, ______, ______, X(0.5), ______, ______, X(0.0), ______, ______}, + [TYPE_ICE] = {______, ______, ______, X(2.0), ______, X(2.0), ______, ______, ______, X(0.5), ______, FIR_RS, X(0.5), X(2.0), ______, ______, X(0.5), X(2.0), ______, ______, ______}, + [TYPE_DRAGON] = {______, ______, ______, ______, ______, ______, ______, ______, ______, X(0.5), ______, ______, ______, ______, ______, ______, ______, X(2.0), ______, X(0.0), ______}, + [TYPE_DARK] = {______, ______, X(0.5), ______, ______, ______, ______, ______, X(2.0), STL_RS, ______, ______, ______, ______, ______, X(2.0), ______, ______, X(0.5), X(0.5), ______}, + [TYPE_FAIRY] = {______, ______, X(2.0), ______, X(0.5), ______, ______, ______, ______, X(0.5), ______, X(0.5), ______, ______, ______, ______, ______, X(2.0), X(2.0), ______, ______}, + [TYPE_STELLAR] = {______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______}, +}; + +#undef ______ +#undef X + +#if B_EXPANDED_TYPE_NAMES == TRUE +#define HANDLE_EXPANDED_TYPE_NAME(_name, ...) _(DEFAULT(_name, __VA_ARGS__)) +#else +#define HANDLE_EXPANDED_TYPE_NAME(_name, ...) _(_name) +#endif + +// .generic is large enough that the text for TYPE_ELECTRIC will exceed TEXT_BUFF_ARRAY_COUNT. +// In this array there's commented-out data such as references to type-resist berries that would otherwise would go unused. +// However, we figured this information would be useful for users that want to add their own types as a reminder of +// what data would they need to add in order to have their new types be fully fledged like official types. +const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = +{ + [TYPE_NONE] = + { + .name = _("None"), + .generic = _("a move"), + .palette = 15, // Uses TYPE_MYSTERY's icon + .teraTypeRGBValue = RGB_WHITE, + .damageCategory = DAMAGE_CATEGORY_PHYSICAL, + .paletteTMHM = gItemIconPalette_NormalTMHM, + }, + [TYPE_NORMAL] = + { + .name = _("Normal"), + .generic = _("a NORMAL move"), + .palette = 13, + .zMove = MOVE_BREAKNECK_BLITZ, + .maxMove = MOVE_MAX_STRIKE, + .teraTypeRGBValue = RGB_WHITE, // custom + .damageCategory = DAMAGE_CATEGORY_PHYSICAL, + .paletteTMHM = gItemIconPalette_NormalTMHM, + //.enhanceItem = ITEM_SILK_SCARF, + //.berry = ITEM_CHILAN_BERRY, + //.gem = ITEM_NORMAL_GEM, + //.zCrystal = ITEM_NORMALIUM_Z, + //.teraShard = ITEM_NORMAL_TERA_SHARD, + //.arceusForm = SPECIES_ARCEUS_NORMAL, + }, + [TYPE_FIGHTING] = + { + .name = HANDLE_EXPANDED_TYPE_NAME("Fight", "Fighting"), + .generic = _("a FIGHTING move"), + .palette = 13, + .zMove = MOVE_ALL_OUT_PUMMELING, + .maxMove = MOVE_MAX_KNUCKLE, + .teraTypeRGBValue = RGB(26, 8, 14), + .damageCategory = DAMAGE_CATEGORY_PHYSICAL, + .paletteTMHM = gItemIconPalette_FightingTMHM, + //.enhanceItem = ITEM_BLACK_BELT, + //.berry = ITEM_CHOPLE_BERRY, + //.gem = ITEM_FIGHTING_GEM, + //.zCrystal = ITEM_FIGHTINIUM_Z, + //.plate = ITEM_FIST_PLATE, + //.memory = ITEM_FIGHTING_MEMORY, + //.teraShard = ITEM_FIGHTING_TERA_SHARD, + //.arceusForm = SPECIES_ARCEUS_FIGHTING, + }, + [TYPE_FLYING] = + { + .name = _("Flying"), + .generic = _("a FLYING move"), + .palette = 14, + .zMove = MOVE_SUPERSONIC_SKYSTRIKE, + .maxMove = MOVE_MAX_AIRSTREAM, + .teraTypeRGBValue = RGB(31, 26, 7), + .damageCategory = DAMAGE_CATEGORY_PHYSICAL, + .paletteTMHM = gItemIconPalette_FlyingTMHM, + //.enhanceItem = ITEM_SHARP_BEAK, + //.berry = ITEM_COBA_BERRY, + //.gem = ITEM_FLYING_GEM, + //.zCrystal = ITEM_FLYINIUM_Z, + //.plate = ITEM_SKY_PLATE, + //.memory = ITEM_FLYING_MEMORY, + //.teraShard = ITEM_FLYING_TERA_SHARD, + //.arceusForm = SPECIES_ARCEUS_FLYING, + }, + [TYPE_POISON] = + { + .name = _("Poison"), + .generic = _("a POISON move"), + .palette = 14, + .zMove = MOVE_ACID_DOWNPOUR, + .maxMove = MOVE_MAX_OOZE, + .teraTypeRGBValue = RGB(26, 10, 25), // custom + .damageCategory = DAMAGE_CATEGORY_PHYSICAL, + .paletteTMHM = gItemIconPalette_PoisonTMHM, + //.enhanceItem = ITEM_POISON_BARB, + //.berry = ITEM_KEBIA_BERRY, + //.gem = ITEM_POISON_GEM, + //.zCrystal = ITEM_POISONIUM_Z, + //.plate = ITEM_TOXIC_PLATE, + //.memory = ITEM_POISON_MEMORY, + //.teraShard = ITEM_POISON_TERA_SHARD, + //.arceusForm = SPECIES_ARCEUS_POISON, + }, + [TYPE_GROUND] = + { + .name = _("Ground"), + .generic = _("a GROUND move"), + .palette = 13, + .zMove = MOVE_TECTONIC_RAGE, + .maxMove = MOVE_MAX_QUAKE, + .teraTypeRGBValue = RGB(25, 23, 18), + .damageCategory = DAMAGE_CATEGORY_PHYSICAL, + .paletteTMHM = gItemIconPalette_GroundTMHM, + //.enhanceItem = ITEM_SOFT_SAND, + //.berry = ITEM_SHUCA_BERRY, + //.gem = ITEM_GROUND_GEM, + //.zCrystal = ITEM_GROUNDIUM_Z, + //.plate = ITEM_EARTH_PLATE, + //.memory = ITEM_GROUND_MEMORY, + //.teraShard = ITEM_GROUND_TERA_SHARD, + //.arceusForm = SPECIES_ARCEUS_GROUND, + }, + [TYPE_ROCK] = + { + .name = _("Rock"), + .generic = _("a ROCK move"), + .palette = 13, + .zMove = MOVE_CONTINENTAL_CRUSH, + .maxMove = MOVE_MAX_ROCKFALL, + .teraTypeRGBValue = RGB(18, 16, 8), // custom + .damageCategory = DAMAGE_CATEGORY_PHYSICAL, + .paletteTMHM = gItemIconPalette_RockTMHM, + //.enhanceItem = ITEM_HARD_STONE, + //.berry = ITEM_CHARTI_BERRY, + //.gem = ITEM_ROCK_GEM, + //.zCrystal = ITEM_ROCKIUM_Z, + //.plate = ITEM_STONE_PLATE, + //.memory = ITEM_ROCK_MEMORY, + //.teraShard = ITEM_ROCK_TERA_SHARD, + //.arceusForm = SPECIES_ARCEUS_ROCK, + }, + [TYPE_BUG] = + { + .name = _("Bug"), + .generic = _("a BUG move"), + .palette = 15, + .zMove = MOVE_SAVAGE_SPIN_OUT, + .maxMove = MOVE_MAX_FLUTTERBY, + .teraTypeRGBValue = RGB(18, 24, 6), + .damageCategory = DAMAGE_CATEGORY_PHYSICAL, + .paletteTMHM = gItemIconPalette_BugTMHM, + //.enhanceItem = ITEM_SILVER_POWDER, + //.berry = ITEM_TANGA_BERRY, + //.gem = ITEM_BUG_GEM, + //.zCrystal = ITEM_BUGINIUM_Z, + //.plate = ITEM_INSECT_PLATE, + //.memory = ITEM_BUG_MEMORY, + //.teraShard = ITEM_BUG_TERA_SHARD, + //.arceusForm = SPECIES_ARCEUS_BUG, + }, + [TYPE_GHOST] = + { + .name = _("Ghost"), + .generic = _("a GHOST move"), + .palette = 14, + .zMove = MOVE_NEVER_ENDING_NIGHTMARE, + .maxMove = MOVE_MAX_PHANTASM, + .teraTypeRGBValue = RGB(12, 10, 16), + .damageCategory = DAMAGE_CATEGORY_PHYSICAL, + .paletteTMHM = gItemIconPalette_GhostTMHM, + //.enhanceItem = ITEM_SPELL_TAG, + //.berry = ITEM_KASIB_BERRY, + //.gem = ITEM_GHOST_GEM, + //.zCrystal = ITEM_GHOSTIUM_Z, + //.plate = ITEM_SPOOKY_PLATE, + //.memory = ITEM_GHOST_MEMORY, + //.teraShard = ITEM_GHOST_TERA_SHARD, + //.arceusForm = SPECIES_ARCEUS_GHOST, + }, + [TYPE_STEEL] = + { + .name = _("Steel"), + .generic = _("a STEEL move"), + .palette = 13, + .zMove = MOVE_CORKSCREW_CRASH, + .maxMove = MOVE_MAX_STEELSPIKE, + .teraTypeRGBValue = RGB(19, 19, 20), + .damageCategory = DAMAGE_CATEGORY_PHYSICAL, + .paletteTMHM = gItemIconPalette_SteelTMHM, + //.enhanceItem = ITEM_METAL_COAT, + //.berry = ITEM_BABIRI_BERRY, + //.gem = ITEM_STEEL_GEM, + //.zCrystal = ITEM_STEELIUM_Z, + //.plate = ITEM_IRON_PLATE, + //.memory = ITEM_STEEL_MEMORY, + //.teraShard = ITEM_STEEL_TERA_SHARD, + //.arceusForm = SPECIES_ARCEUS_STEEL, + }, + [TYPE_MYSTERY] = + { + .name = _("???"), + .generic = _("a ??? move"), + .palette = 15, + .teraTypeRGBValue = RGB_WHITE, + .damageCategory = DAMAGE_CATEGORY_SPECIAL, + }, + [TYPE_FIRE] = + { + .name = _("Fire"), + .generic = _("a FIRE move"), + .palette = 13, + .zMove = MOVE_INFERNO_OVERDRIVE, + .maxMove = MOVE_MAX_FLARE, + .teraTypeRGBValue = RGB(31, 20, 11), + .damageCategory = DAMAGE_CATEGORY_SPECIAL, + .paletteTMHM = gItemIconPalette_FireTMHM, + //.enhanceItem = ITEM_CHARCOAL, + //.berry = ITEM_OCCA_BERRY, + //.gem = ITEM_FIRE_GEM, + //.zCrystal = ITEM_FIRIUM_Z, + //.plate = ITEM_FLAME_PLATE, + //.memory = ITEM_FIRE_MEMORY, + //.teraShard = ITEM_FIRE_TERA_SHARD, + //.arceusForm = SPECIES_ARCEUS_FIRE, + }, + [TYPE_WATER] = + { + .name = _("Water"), + .generic = _("a WATER move"), + .palette = 14, + .zMove = MOVE_HYDRO_VORTEX, + .maxMove = MOVE_MAX_GEYSER, + .teraTypeRGBValue = RGB(10, 18, 27), + .damageCategory = DAMAGE_CATEGORY_SPECIAL, + .paletteTMHM = gItemIconPalette_WaterTMHM, + //.enhanceItem = ITEM_MYSTIC_WATER, + //.berry = ITEM_PASSHO_BERRY, + //.gem = ITEM_WATER_GEM, + //.zCrystal = ITEM_WATERIUM_Z, + //.plate = ITEM_SPLASH_PLATE, + //.memory = ITEM_WATER_MEMORY, + //.teraShard = ITEM_WATER_TERA_SHARD, + //.arceusForm = SPECIES_ARCEUS_WATER, + }, + [TYPE_GRASS] = + { + .name = _("Grass"), + .generic = _("a GRASS move"), + .palette = 15, + .zMove = MOVE_BLOOM_DOOM, + .maxMove = MOVE_MAX_OVERGROWTH, + .teraTypeRGBValue = RGB(12, 24, 11), + .damageCategory = DAMAGE_CATEGORY_SPECIAL, + .paletteTMHM = gItemIconPalette_GrassTMHM, + //.enhanceItem = ITEM_MIRACLE_SEED, + //.berry = ITEM_RINDO_BERRY, + //.gem = ITEM_GRASS_GEM, + //.zCrystal = ITEM_GRASSIUM_Z, + //.plate = ITEM_MEADOW_PLATE, + //.memory = ITEM_GRASS_MEMORY, + //.teraShard = ITEM_GRASS_TERA_SHARD, + //.arceusForm = SPECIES_ARCEUS_GRASS, + }, + [TYPE_ELECTRIC] = + { + .name = HANDLE_EXPANDED_TYPE_NAME("Electr", "Electric"), + .generic = _("an ELECTRIC move"), + .palette = 13, + .zMove = MOVE_GIGAVOLT_HAVOC, + .maxMove = MOVE_MAX_LIGHTNING, + .teraTypeRGBValue = RGB(30, 26, 7), + .damageCategory = DAMAGE_CATEGORY_SPECIAL, + .paletteTMHM = gItemIconPalette_ElectricTMHM, + //.enhanceItem = ITEM_MAGNET, + //.berry = ITEM_WACAN_BERRY, + //.gem = ITEM_ELECTRIC_GEM, + //.zCrystal = ITEM_ELECTRIUM_Z, + //.plate = ITEM_ZAP_PLATE, + //.memory = ITEM_ELECTRIC_MEMORY, + //.teraShard = ITEM_ELECTRIC_TERA_SHARD, + //.arceusForm = SPECIES_ARCEUS_ELECTRIC, + }, + [TYPE_PSYCHIC] = + { + .name = HANDLE_EXPANDED_TYPE_NAME("Psychc", "Psychic"), + .generic = _("a PSYCHIC move"), + .palette = 14, + .zMove = MOVE_SHATTERED_PSYCHE, + .maxMove = MOVE_MAX_MINDSTORM, + .teraTypeRGBValue = RGB(31, 14, 15), + .damageCategory = DAMAGE_CATEGORY_SPECIAL, + .paletteTMHM = gItemIconPalette_PsychicTMHM, + //.enhanceItem = ITEM_TWISTED_SPOON, + //.berry = ITEM_PAYAPA_BERRY, + //.gem = ITEM_PSYCHIC_GEM, + //.zCrystal = ITEM_PSYCHIUM_Z, + //.plate = ITEM_MIND_PLATE, + //.memory = ITEM_PSYCHIC_MEMORY, + //.teraShard = ITEM_PSYCHIC_TERA_SHARD, + //.arceusForm = SPECIES_ARCEUS_PSYCHIC, + }, + [TYPE_ICE] = + { + .name = _("Ice"), + .generic = _("an ICE move"), + .palette = 14, + .zMove = MOVE_SUBZERO_SLAMMER, + .maxMove = MOVE_MAX_HAILSTORM, + .teraTypeRGBValue = RGB(14, 26, 25), + .damageCategory = DAMAGE_CATEGORY_SPECIAL, + .paletteTMHM = gItemIconPalette_IceTMHM, + //.enhanceItem = ITEM_NEVER_MELT_ICE, + //.berry = ITEM_YACHE_BERRY, + //.gem = ITEM_ICE_GEM, + //.zCrystal = ITEM_ICIUM_Z, + //.plate = ITEM_ICICLE_PLATE, + //.memory = ITEM_ICE_MEMORY, + //.teraShard = ITEM_ICE_TERA_SHARD, + //.arceusForm = SPECIES_ARCEUS_ICE, + }, + [TYPE_DRAGON] = + { + .name = _("Dragon"), + .generic = _("a DRAGON move"), + .palette = 15, + .zMove = MOVE_DEVASTATING_DRAKE, + .maxMove = MOVE_MAX_WYRMWIND, + .teraTypeRGBValue = RGB(10, 18, 27), + .damageCategory = DAMAGE_CATEGORY_SPECIAL, + .paletteTMHM = gItemIconPalette_DragonTMHM, + //.enhanceItem = ITEM_DRAGON_FANG, + //.berry = ITEM_HABAN_BERRY, + //.gem = ITEM_DRAGON_GEM, + //.zCrystal = ITEM_DRAGONIUM_Z, + //.plate = ITEM_DRACO_PLATE, + //.memory = ITEM_DRAGON_MEMORY, + //.teraShard = ITEM_DRAGON_TERA_SHARD, + //.arceusForm = SPECIES_ARCEUS_DRAGON, + }, + [TYPE_DARK] = + { + .name = _("Dark"), + .generic = _("a DARK move"), + .palette = 13, + .zMove = MOVE_BLACK_HOLE_ECLIPSE, + .maxMove = MOVE_MAX_DARKNESS, + .teraTypeRGBValue = RGB(6, 5, 8), + .damageCategory = DAMAGE_CATEGORY_SPECIAL, + .paletteTMHM = gItemIconPalette_DarkTMHM, + //.enhanceItem = ITEM_BLACK_GLASSES, + //.berry = ITEM_COLBUR_BERRY, + //.gem = ITEM_DARK_GEM, + //.zCrystal = ITEM_DARKINIUM_Z, + //.plate = ITEM_DREAD_PLATE, + //.memory = ITEM_DARK_MEMORY, + //.teraShard = ITEM_DARK_TERA_SHARD, + //.arceusForm = SPECIES_ARCEUS_DARK, + }, + [TYPE_FAIRY] = + { + .name = _("Fairy"), + .generic = _("a FAIRY move"), + .palette = 14, + .zMove = MOVE_TWINKLE_TACKLE, + .maxMove = MOVE_MAX_STARFALL, + .teraTypeRGBValue = RGB(31, 15, 21), + .damageCategory = DAMAGE_CATEGORY_SPECIAL, + .paletteTMHM = gItemIconPalette_FairyTMHM, + //.enhanceItem = ITEM_FAIRY_FEATHER, + //.berry = ITEM_ROSELI_BERRY, + //.gem = ITEM_FAIRY_GEM, + //.zCrystal = ITEM_FAIRIUM_Z, + //.plate = ITEM_PIXIE_PLATE, + //.memory = ITEM_FAIRY_MEMORY, + //.teraShard = ITEM_FAIRY_TERA_SHARD, + //.arceusForm = SPECIES_ARCEUS_FAIRY, + }, + [TYPE_STELLAR] = + { + .name = HANDLE_EXPANDED_TYPE_NAME("Stellr", "Stellar"), + .generic = _("a STELLAR move"), + .palette = 15, + .zMove = MOVE_BREAKNECK_BLITZ, + .maxMove = MOVE_MAX_STRIKE, + .teraTypeRGBValue = RGB(10, 18, 27), + .paletteTMHM = gItemIconPalette_NormalTMHM, // failsafe + // .teraShard = ITEM_STELLAR_TERA_SHARD, + }, +}; diff --git a/src/graphics.c b/src/graphics.c index 72e9925599..58c629fbc9 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -1629,6 +1629,9 @@ const u32 gPartyMenuPokeball_Pal[] = INCBIN_U32("graphics/party_menu/pokeball.gb const u32 gStatusGfx_Icons[] = INCBIN_U32("graphics/interface/status_icons.4bpp.lz"); const u32 gStatusPal_Icons[] = INCBIN_U32("graphics/interface/status_icons.gbapal.lz"); +const u16 gCategoryIcons_Pal[] = INCBIN_U16("graphics/interface/category_icons.gbapal"); +const u32 gCategoryIcons_Gfx[] = INCBIN_U32("graphics/interface/category_icons.4bpp.lz"); + const u32 gMoveTypes_Gfx[] = INCBIN_U32("graphics/types/move_types.4bpp.lz"); const u32 gMoveTypes_Pal[] = INCBIN_U32("graphics/types/move_types.gbapal.lz"); diff --git a/src/menu.c b/src/menu.c index a6bd9ae2bc..1952ec5ed4 100644 --- a/src/menu.c +++ b/src/menu.c @@ -112,6 +112,7 @@ static const u8 sTextColors[] = { TEXT_DYNAMIC_COLOR_6, TEXT_COLOR_WHITE, TEXT_C static const struct MenuInfoIcon sMenuInfoIcons[] = { // { width, height, offset } { 12, 12, 0x00 }, // Unused + [TYPE_NONE + 1] = { 32, 12, 0xA4 }, // Copy of TYPE_MYSTERY's [TYPE_NORMAL + 1] = { 32, 12, 0x20 }, [TYPE_FIGHTING + 1] = { 32, 12, 0x64 }, [TYPE_FLYING + 1] = { 32, 12, 0x60 }, diff --git a/src/pokedex.c b/src/pokedex.c index 6153e72213..8b70529a93 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -1389,7 +1389,7 @@ static const struct SearchOptionText sDexSearchColorOptions[] = static const struct SearchOptionText sDexSearchTypeOptions[NUMBER_OF_MON_TYPES] = // + 2 for "None" and terminator, - 2 for Mystery and Stellar { - {gText_DexEmptyString, gText_DexSearchTypeNone}, + {gText_DexEmptyString, gTypesInfo[TYPE_NONE].name}, {gText_DexEmptyString, gTypesInfo[TYPE_NORMAL].name}, {gText_DexEmptyString, gTypesInfo[TYPE_FIGHTING].name}, {gText_DexEmptyString, gTypesInfo[TYPE_FLYING].name}, diff --git a/src/pokedex_plus_hgss.c b/src/pokedex_plus_hgss.c index 9f657d1673..22cbd5ba14 100644 --- a/src/pokedex_plus_hgss.c +++ b/src/pokedex_plus_hgss.c @@ -622,60 +622,6 @@ static void DestroyCategoryIcon(void); static u16 NationalPokedexNumToSpeciesHGSS(u16 nationalNum); -#define TAG_CATEGORY_ICONS 30004 - -static const u16 sCategoryIcons_Pal[] = INCBIN_U16("graphics/interface/category_icons.gbapal"); -static const u32 sCategoryIcons_Gfx[] = INCBIN_U32("graphics/interface/category_icons.4bpp.lz"); - -static const struct OamData sOamData_CategoryIcons = -{ - .size = SPRITE_SIZE(16x16), - .shape = SPRITE_SHAPE(16x16), - .priority = 0, -}; -static const struct CompressedSpriteSheet sSpriteSheet_CategoryIcons = -{ - .data = sCategoryIcons_Gfx, - .size = 16*16*3/2, - .tag = TAG_CATEGORY_ICONS, -}; -static const struct SpritePalette sSpritePal_CategoryIcons = -{ - .data = sCategoryIcons_Pal, - .tag = TAG_CATEGORY_ICONS -}; -static const union AnimCmd sSpriteAnim_CategoryIcon0[] = -{ - ANIMCMD_FRAME(0, 0), - ANIMCMD_END -}; -static const union AnimCmd sSpriteAnim_CategoryIcon1[] = -{ - ANIMCMD_FRAME(4, 0), - ANIMCMD_END -}; -static const union AnimCmd sSpriteAnim_CategoryIcon2[] = -{ - ANIMCMD_FRAME(8, 0), - ANIMCMD_END -}; -static const union AnimCmd *const sSpriteAnimTable_CategoryIcons[] = -{ - sSpriteAnim_CategoryIcon0, - sSpriteAnim_CategoryIcon1, - sSpriteAnim_CategoryIcon2, -}; -static const struct SpriteTemplate sSpriteTemplate_CategoryIcons = -{ - .tileTag = TAG_CATEGORY_ICONS, - .paletteTag = TAG_CATEGORY_ICONS, - .oam = &sOamData_CategoryIcons, - .anims = sSpriteAnimTable_CategoryIcons, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCallbackDummy -}; - //Stat bars by DizzyEgg #define TAG_STAT_BAR 4097 #define TAG_STAT_BAR_BG 4098 @@ -1955,7 +1901,7 @@ static const struct SearchOptionText sDexSearchColorOptions[] = static const struct SearchOptionText sDexSearchTypeOptions[NUMBER_OF_MON_TYPES] = // + 2 for "None" and terminator, - 2 for Mystery and Stellar { - {gText_DexEmptyString, gText_DexSearchTypeNone}, + {gText_DexEmptyString, gTypesInfo[TYPE_NONE].name}, {gText_DexEmptyString, gTypesInfo[TYPE_NORMAL].name}, {gText_DexEmptyString, gTypesInfo[TYPE_FIGHTING].name}, {gText_DexEmptyString, gTypesInfo[TYPE_FLYING].name}, @@ -4769,7 +4715,7 @@ static void LoadTilesetTilemapHGSS(u8 page) static u8 ShowCategoryIcon(u32 category) { if (sPokedexView->categoryIconSpriteId == 0xFF) - sPokedexView->categoryIconSpriteId = CreateSprite(&sSpriteTemplate_CategoryIcons, 139, 90, 0); + sPokedexView->categoryIconSpriteId = CreateSprite(&gSpriteTemplate_CategoryIcons, 139, 90, 0); gSprites[sPokedexView->categoryIconSpriteId].invisible = FALSE; StartSpriteAnim(&gSprites[sPokedexView->categoryIconSpriteId], category); @@ -4912,8 +4858,8 @@ static void Task_LoadStatsScreen(u8 taskId) CreateTypeIconSprites(); sPokedexView->categoryIconSpriteId = 0xFF; LoadCompressedPalette(gMoveTypes_Pal, 0x1D0, 0x60); - LoadCompressedSpriteSheet(&sSpriteSheet_CategoryIcons); - LoadSpritePalette(&sSpritePal_CategoryIcons); + LoadCompressedSpriteSheet(&gSpriteSheet_CategoryIcons); + LoadSpritePalette(&gSpritePal_CategoryIcons); gMain.state++; break; case 4: diff --git a/src/pokemon.c b/src/pokemon.c index 23ef046682..6371b38719 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -2774,14 +2774,14 @@ u32 GetBoxMonData3(struct BoxPokemon *boxMon, s32 field, u8 *data) break; case MON_DATA_TERA_TYPE: { - if (substruct0->teraType == 0) + if (substruct0->teraType == TYPE_NONE) { const u8 *types = gSpeciesInfo[substruct0->species].types; retVal = (boxMon->personality & 0x1) == 0 ? types[0] : types[1]; } else { - retVal = substruct0->teraType - 1; + retVal = substruct0->teraType; } break; } @@ -3210,7 +3210,7 @@ void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const void *dataArg) { u32 teraType; SET8(teraType); - substruct0->teraType = 1 + teraType; + substruct0->teraType = teraType; break; } case MON_DATA_EVOLUTION_TRACKER: @@ -6840,3 +6840,13 @@ const u8 *GetMoveName(u16 moveId) { return gMovesInfo[moveId].name; } + +const u8 *GetMoveAnimationScript(u16 moveId) +{ + if (gMovesInfo[moveId].battleAnimScript == NULL) + { + DebugPrintfLevel(MGBA_LOG_WARN, "No animation for moveId=%u", moveId); + return Move_TACKLE; + } + return gMovesInfo[moveId].battleAnimScript; +} diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index 78f27b3888..70b82a3edc 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -740,9 +740,6 @@ static const u8 sMovesPPLayout[] = _("{PP}{DYNAMIC 0}/{DYNAMIC 1}"); #define TAG_MON_MARKINGS 30003 #define TAG_CATEGORY_ICONS 30004 -static const u16 sCategoryIcons_Pal[] = INCBIN_U16("graphics/interface/category_icons.gbapal"); -static const u32 sCategoryIcons_Gfx[] = INCBIN_U32("graphics/interface/category_icons.4bpp.lz"); - static const struct OamData sOamData_CategoryIcons = { .size = SPRITE_SIZE(16x16), @@ -750,16 +747,16 @@ static const struct OamData sOamData_CategoryIcons = .priority = 0, }; -static const struct CompressedSpriteSheet sSpriteSheet_CategoryIcons = +const struct CompressedSpriteSheet gSpriteSheet_CategoryIcons = { - .data = sCategoryIcons_Gfx, + .data = gCategoryIcons_Gfx, .size = 16*16*3/2, .tag = TAG_CATEGORY_ICONS, }; -static const struct SpritePalette sSpritePal_CategoryIcons = +const struct SpritePalette gSpritePal_CategoryIcons = { - .data = sCategoryIcons_Pal, + .data = gCategoryIcons_Pal, .tag = TAG_CATEGORY_ICONS }; @@ -788,7 +785,7 @@ static const union AnimCmd *const sSpriteAnimTable_CategoryIcons[] = sSpriteAnim_CategoryIcon2, }; -static const struct SpriteTemplate sSpriteTemplate_CategoryIcons = +const struct SpriteTemplate gSpriteTemplate_CategoryIcons = { .tileTag = TAG_CATEGORY_ICONS, .paletteTag = TAG_CATEGORY_ICONS, @@ -815,6 +812,10 @@ static const struct OamData sOamData_MoveTypes = .paletteNum = 0, .affineParam = 0, }; +static const union AnimCmd sSpriteAnim_TypeNone[] = { + ANIMCMD_FRAME(TYPE_NONE * 8, 0, FALSE, FALSE), + ANIMCMD_END +}; static const union AnimCmd sSpriteAnim_TypeNormal[] = { ANIMCMD_FRAME(TYPE_NORMAL * 8, 0, FALSE, FALSE), ANIMCMD_END @@ -916,31 +917,32 @@ static const union AnimCmd sSpriteAnim_CategoryTough[] = { ANIMCMD_END }; static const union AnimCmd *const sSpriteAnimTable_MoveTypes[NUMBER_OF_MON_TYPES + CONTEST_CATEGORIES_COUNT] = { - sSpriteAnim_TypeNormal, - sSpriteAnim_TypeFighting, - sSpriteAnim_TypeFlying, - sSpriteAnim_TypePoison, - sSpriteAnim_TypeGround, - sSpriteAnim_TypeRock, - sSpriteAnim_TypeBug, - sSpriteAnim_TypeGhost, - sSpriteAnim_TypeSteel, - sSpriteAnim_TypeMystery, - sSpriteAnim_TypeFire, - sSpriteAnim_TypeWater, - sSpriteAnim_TypeGrass, - sSpriteAnim_TypeElectric, - sSpriteAnim_TypePsychic, - sSpriteAnim_TypeIce, - sSpriteAnim_TypeDragon, - sSpriteAnim_TypeDark, - sSpriteAnim_TypeFairy, - sSpriteAnim_TypeStellar, - sSpriteAnim_CategoryCool, - sSpriteAnim_CategoryBeauty, - sSpriteAnim_CategoryCute, - sSpriteAnim_CategorySmart, - sSpriteAnim_CategoryTough, + [TYPE_NONE] = sSpriteAnim_TypeNone, + [TYPE_NORMAL] = sSpriteAnim_TypeNormal, + [TYPE_FIGHTING] = sSpriteAnim_TypeFighting, + [TYPE_FLYING] = sSpriteAnim_TypeFlying, + [TYPE_POISON] = sSpriteAnim_TypePoison, + [TYPE_GROUND] = sSpriteAnim_TypeGround, + [TYPE_ROCK] = sSpriteAnim_TypeRock, + [TYPE_BUG] = sSpriteAnim_TypeBug, + [TYPE_GHOST] = sSpriteAnim_TypeGhost, + [TYPE_STEEL] = sSpriteAnim_TypeSteel, + [TYPE_MYSTERY] = sSpriteAnim_TypeMystery, + [TYPE_FIRE] = sSpriteAnim_TypeFire, + [TYPE_WATER] = sSpriteAnim_TypeWater, + [TYPE_GRASS] = sSpriteAnim_TypeGrass, + [TYPE_ELECTRIC] = sSpriteAnim_TypeElectric, + [TYPE_PSYCHIC] = sSpriteAnim_TypePsychic, + [TYPE_ICE] = sSpriteAnim_TypeIce, + [TYPE_DRAGON] = sSpriteAnim_TypeDragon, + [TYPE_DARK] = sSpriteAnim_TypeDark, + [TYPE_FAIRY] = sSpriteAnim_TypeFairy, + [TYPE_STELLAR] = sSpriteAnim_TypeStellar, + [NUMBER_OF_MON_TYPES + CONTEST_CATEGORY_COOL] = sSpriteAnim_CategoryCool, + [NUMBER_OF_MON_TYPES + CONTEST_CATEGORY_BEAUTY] = sSpriteAnim_CategoryBeauty, + [NUMBER_OF_MON_TYPES + CONTEST_CATEGORY_CUTE] = sSpriteAnim_CategoryCute, + [NUMBER_OF_MON_TYPES + CONTEST_CATEGORY_SMART] = sSpriteAnim_CategorySmart, + [NUMBER_OF_MON_TYPES + CONTEST_CATEGORY_TOUGH] = sSpriteAnim_CategoryTough, }; const struct CompressedSpriteSheet gSpriteSheet_MoveTypes = @@ -1142,7 +1144,7 @@ static const u16 sMarkings_Pal[] = INCBIN_U16("graphics/summary_screen/markings. static u8 ShowCategoryIcon(u32 category) { if (sMonSummaryScreen->categoryIconSpriteId == 0xFF) - sMonSummaryScreen->categoryIconSpriteId = CreateSprite(&sSpriteTemplate_CategoryIcons, 48, 129, 0); + sMonSummaryScreen->categoryIconSpriteId = CreateSprite(&gSpriteTemplate_CategoryIcons, 48, 129, 0); gSprites[sMonSummaryScreen->categoryIconSpriteId].invisible = FALSE; StartSpriteAnim(&gSprites[sMonSummaryScreen->categoryIconSpriteId], category); @@ -1437,8 +1439,8 @@ static bool8 DecompressGraphics(void) break; case 12: LoadCompressedPalette(gMoveTypes_Pal, OBJ_PLTT_ID(13), 3 * PLTT_SIZE_4BPP); - LoadCompressedSpriteSheet(&sSpriteSheet_CategoryIcons); - LoadSpritePalette(&sSpritePal_CategoryIcons); + LoadCompressedSpriteSheet(&gSpriteSheet_CategoryIcons); + LoadSpritePalette(&gSpritePal_CategoryIcons); sMonSummaryScreen->switchCounter = 0; return TRUE; } diff --git a/src/script_pokemon_util.c b/src/script_pokemon_util.c index f7dacbbfb7..0946ec1d15 100644 --- a/src/script_pokemon_util.c +++ b/src/script_pokemon_util.c @@ -352,7 +352,7 @@ u32 ScriptGiveMonParameterized(u16 species, u8 level, u16 item, u8 ball, u8 natu // tera type if (teraType >= NUMBER_OF_MON_TYPES) - teraType = gSpeciesInfo[species].types[0]; + teraType = TYPE_NONE; SetMonData(&mon, MON_DATA_TERA_TYPE, &teraType); // EV and IV diff --git a/test/battle/ability/armor_tail.c b/test/battle/ability/armor_tail.c new file mode 100644 index 0000000000..ac2f7dbfcf --- /dev/null +++ b/test/battle/ability/armor_tail.c @@ -0,0 +1,4 @@ +#include "global.h" +#include "test/battle.h" + +// Tests for Armor Tail are handled in test/battle/ability/dazzling.c diff --git a/test/battle/ability/ate_abilities.c b/test/battle/ability/ate_abilities.c new file mode 100644 index 0000000000..12ee75722a --- /dev/null +++ b/test/battle/ability/ate_abilities.c @@ -0,0 +1,85 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gMovesInfo[MOVE_TACKLE].type == TYPE_NORMAL); + ASSUME(gMovesInfo[MOVE_TACKLE].power > 0); +} + +SINGLE_BATTLE_TEST("Galvanize can not turn certain moves into Electric type moves") +{ + u32 move; + + PARAMETRIZE { move = MOVE_HIDDEN_POWER; } + PARAMETRIZE { move = MOVE_WEATHER_BALL; } + PARAMETRIZE { move = MOVE_MULTI_ATTACK; } + + ASSUME(gMovesInfo[MOVE_HIDDEN_POWER].effect == EFFECT_HIDDEN_POWER); + ASSUME(gMovesInfo[MOVE_WEATHER_BALL].effect == EFFECT_WEATHER_BALL); + ASSUME(gMovesInfo[MOVE_MULTI_ATTACK].effect == EFFECT_CHANGE_TYPE_ON_ITEM); + GIVEN { + PLAYER(SPECIES_KRABBY); + OPPONENT(SPECIES_GEODUDE_ALOLAN) { Ability(ABILITY_GALVANIZE); } + } WHEN { + TURN { MOVE(opponent, move); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, move, opponent); + NOT MESSAGE("It's super effective!"); + } +} + +SINGLE_BATTLE_TEST("Galvanize turns a normal type move into Electric") +{ + GIVEN { + PLAYER(SPECIES_KRABBY); + OPPONENT(SPECIES_GEODUDE_ALOLAN) { Ability(ABILITY_GALVANIZE); } + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + MESSAGE("It's super effective!"); + } +} + +SINGLE_BATTLE_TEST("Pixilate turns a normal type move into Fairy") +{ + GIVEN { + PLAYER(SPECIES_DRAGONITE); + OPPONENT(SPECIES_ALTARIA) { Item(ITEM_ALTARIANITE); } + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE, megaEvolve: TRUE); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + MESSAGE("It's super effective!"); + } +} + +SINGLE_BATTLE_TEST("Refrigerate turns a normal type move into Ice") +{ + GIVEN { + PLAYER(SPECIES_MEGANIUM); + OPPONENT(SPECIES_AMAURA) { Ability(ABILITY_REFRIGERATE); } + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE, megaEvolve: TRUE); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + MESSAGE("It's super effective!"); + } +} + +SINGLE_BATTLE_TEST("Aerilate turns a normal type move into Flying") +{ + GIVEN { + PLAYER(SPECIES_MEGANIUM); + OPPONENT(SPECIES_SALAMENCE) { Item(ITEM_SALAMENCITE); } + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE, megaEvolve: TRUE); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + MESSAGE("It's super effective!"); + } +} diff --git a/test/battle/ability/dancer.c b/test/battle/ability/dancer.c index 34af26e75e..f54f7ab76a 100644 --- a/test/battle/ability/dancer.c +++ b/test/battle/ability/dancer.c @@ -53,3 +53,76 @@ DOUBLE_BATTLE_TEST("Dancer can copy Teeter Dance and confuse both opposing targe MESSAGE("Wynaut became confused!"); } } + +DOUBLE_BATTLE_TEST("Dancer triggers from slowest to fastest") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_DRAGON_DANCE].danceMove == TRUE); + PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_DANCER); Speed(10); } + PLAYER(SPECIES_WYNAUT) { Speed(50); } + OPPONENT(SPECIES_ORICORIO) { Ability(ABILITY_DANCER); Speed(20); } + OPPONENT(SPECIES_WOBBUFFET) { Ability(ABILITY_DANCER); Speed(3); } + } WHEN { + TURN { MOVE(playerRight, MOVE_DRAGON_DANCE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DANCE, playerRight); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); + ABILITY_POPUP(opponentRight, ABILITY_DANCER); + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DANCE, opponentRight); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); + ABILITY_POPUP(playerLeft, ABILITY_DANCER); + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DANCE, playerLeft); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); + ABILITY_POPUP(opponentLeft, ABILITY_DANCER); + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DANCE, opponentLeft); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); + } +} + +SINGLE_BATTLE_TEST("Dancer doesn't trigger if the original user flinches") +{ + GIVEN { + ASSUME(MoveHasAdditionalEffectWithChance(MOVE_FAKE_OUT, MOVE_EFFECT_FLINCH, 100)); + ASSUME(gMovesInfo[MOVE_DRAGON_DANCE].danceMove == TRUE); + PLAYER(SPECIES_WOBBUFFET) + OPPONENT(SPECIES_ORICORIO) { Ability(ABILITY_DANCER); } + } WHEN { + TURN { MOVE(opponent, MOVE_FAKE_OUT); MOVE(player, MOVE_DRAGON_DANCE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FAKE_OUT, opponent); + MESSAGE("Wobbuffet flinched!"); + NONE_OF { + ABILITY_POPUP(opponent, ABILITY_DANCER); + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DANCE, opponent); + } + } +} + +DOUBLE_BATTLE_TEST("Dancer still triggers if another dancer flinches") +{ + GIVEN { + ASSUME(MoveHasAdditionalEffectWithChance(MOVE_FAKE_OUT, MOVE_EFFECT_FLINCH, 100)); + ASSUME(gMovesInfo[MOVE_DRAGON_DANCE].danceMove == TRUE); + PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_DANCER); Speed(10); } + PLAYER(SPECIES_WYNAUT) { Speed(5); } + OPPONENT(SPECIES_ORICORIO) { Ability(ABILITY_DANCER); Speed(20); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(3); } + } WHEN { + TURN { MOVE(opponentLeft, MOVE_FAKE_OUT, target: playerLeft); MOVE(playerRight, MOVE_DRAGON_DANCE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FAKE_OUT, opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DANCE, playerRight); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); + ABILITY_POPUP(playerLeft, ABILITY_DANCER); + MESSAGE("Wobbuffet flinched!"); + NONE_OF { + MESSAGE("Wobbuffet used Dragon Dance!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DANCE, playerLeft); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); + } + ABILITY_POPUP(opponentLeft, ABILITY_DANCER); + MESSAGE("Foe Oricorio used Dragon Dance!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DANCE, opponentLeft); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); + } +} diff --git a/test/battle/ability/dazzling.c b/test/battle/ability/dazzling.c new file mode 100644 index 0000000000..9eedb56a49 --- /dev/null +++ b/test/battle/ability/dazzling.c @@ -0,0 +1,52 @@ +#include "global.h" +#include "test/battle.h" + + +ASSUMPTIONS +{ + ASSUME(gMovesInfo[MOVE_QUICK_ATTACK].priority > 0); +} + +DOUBLE_BATTLE_TEST("Dazzling, Queenly Majesty and Armor Tail protect the user from priority moves") +{ + u32 species, ability; + + PARAMETRIZE { species = SPECIES_BRUXISH; ability = ABILITY_DAZZLING; } + PARAMETRIZE { species = SPECIES_FARIGIRAF; ability = ABILITY_ARMOR_TAIL; } + PARAMETRIZE { species = SPECIES_TSAREENA; ability = ABILITY_QUEENLY_MAJESTY; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(species) { Ability(ability); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerLeft, MOVE_QUICK_ATTACK, target: opponentLeft); } + } SCENE { + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_ATTACK, opponentRight); + ABILITY_POPUP(opponentLeft, ability); + MESSAGE("Wobbuffet cannot use Quick Attack!"); + } +} + +DOUBLE_BATTLE_TEST("Dazzling, Queenly Majesty and Armor Tail protect users partner from priority moves") +{ + u32 species, ability; + + PARAMETRIZE { species = SPECIES_BRUXISH; ability = ABILITY_DAZZLING; } + PARAMETRIZE { species = SPECIES_FARIGIRAF; ability = ABILITY_ARMOR_TAIL; } + PARAMETRIZE { species = SPECIES_TSAREENA; ability = ABILITY_QUEENLY_MAJESTY; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(species) { Ability(ability); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerLeft, MOVE_QUICK_ATTACK, target: opponentRight); } + } SCENE { + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_ATTACK, opponentRight); + ABILITY_POPUP(opponentLeft, ability); + MESSAGE("Wobbuffet cannot use Quick Attack!"); + } +} diff --git a/test/battle/ability/good_as_gold.c b/test/battle/ability/good_as_gold.c new file mode 100644 index 0000000000..596bb6c4c7 --- /dev/null +++ b/test/battle/ability/good_as_gold.c @@ -0,0 +1,70 @@ +#include "global.h" +#include "test/battle.h" + + +SINGLE_BATTLE_TEST("Good as Gold protects from status moves") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_TOXIC].category == DAMAGE_CATEGORY_STATUS); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_GHOLDENGO) { Ability(ABILITY_GOOD_AS_GOLD); } + } WHEN { + TURN { MOVE(player, MOVE_TOXIC); } + } SCENE { + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC, player); + ABILITY_POPUP(opponent, ABILITY_GOOD_AS_GOLD); + MESSAGE("It doesn't affect Foe Gholdengo…"); + } +} + +SINGLE_BATTLE_TEST("Good as Gold doesn't protect the user from it's own moves") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_NASTY_PLOT].category == DAMAGE_CATEGORY_STATUS); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_GHOLDENGO) { Ability(ABILITY_GOOD_AS_GOLD); } + } WHEN { + TURN { MOVE(opponent, MOVE_NASTY_PLOT); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_NASTY_PLOT, opponent); + NONE_OF { + ABILITY_POPUP(opponent, ABILITY_GOOD_AS_GOLD); + MESSAGE("It doesn't affect Foe Gholdengo…"); + } + } +} + +SINGLE_BATTLE_TEST("Good as Gold doesn't protect from moves that target the field") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_STEALTH_ROCK].category == DAMAGE_CATEGORY_STATUS); + ASSUME(gMovesInfo[MOVE_STEALTH_ROCK].target == MOVE_TARGET_OPPONENTS_FIELD); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_GHOLDENGO) { Ability(ABILITY_GOOD_AS_GOLD); } + } WHEN { + TURN { MOVE(player, MOVE_STEALTH_ROCK); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_STEALTH_ROCK, player); + NONE_OF { + ABILITY_POPUP(opponent, ABILITY_GOOD_AS_GOLD); + MESSAGE("It doesn't affect Foe Gholdengo…"); + } + } +} + +DOUBLE_BATTLE_TEST("Good as Gold protects from partner's status moves") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_HELPING_HAND].category == DAMAGE_CATEGORY_STATUS); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_GHOLDENGO) { Ability(ABILITY_GOOD_AS_GOLD); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponentRight, MOVE_HELPING_HAND); } + } SCENE { + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_HELPING_HAND, opponentRight); + ABILITY_POPUP(opponentLeft, ABILITY_GOOD_AS_GOLD); + MESSAGE("It doesn't affect Foe Gholdengo…"); + } +} diff --git a/test/battle/ability/intimidate.c b/test/battle/ability/intimidate.c index 08560ccb00..0bb34a977e 100644 --- a/test/battle/ability/intimidate.c +++ b/test/battle/ability/intimidate.c @@ -107,9 +107,9 @@ SINGLE_BATTLE_TEST("Intimidate and Eject Button force the opponent to Attack") OPPONENT(SPECIES_HITMONTOP) { Moves(MOVE_TACKLE); } } WHEN { TURN { - MOVE(player, MOVE_QUICK_ATTACK); - MOVE(opponent, MOVE_TACKLE); - SEND_OUT(opponent, 1); + MOVE(player, MOVE_QUICK_ATTACK); + MOVE(opponent, MOVE_TACKLE); + SEND_OUT(opponent, 1); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_ATTACK, player); @@ -210,3 +210,21 @@ SINGLE_BATTLE_TEST("Intimidate can not further lower opponents Atk stat if it is EXPECT_EQ(player->statStages[STAT_ATK], MIN_STAT_STAGE); } } + +SINGLE_BATTLE_TEST("Intimidate activates when it's no longer effected by Neutralizing Gas") +{ + GIVEN { + PLAYER(SPECIES_WEEZING) { Ability(ABILITY_NEUTRALIZING_GAS); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_ARBOK) { Ability(ABILITY_INTIMIDATE); } + } WHEN { + TURN { SWITCH(player, 1); } + } SCENE { + ABILITY_POPUP(player, ABILITY_NEUTRALIZING_GAS); + MESSAGE("Neutralizing Gas filled the area!"); + MESSAGE("Weezing, that's enough! Come back!"); + MESSAGE("The effects of Neutralizing Gas wore off!"); + ABILITY_POPUP(opponent, ABILITY_INTIMIDATE); + MESSAGE("Go! Wobbuffet!"); + } +} diff --git a/test/battle/ability/queenly_majesty.c b/test/battle/ability/queenly_majesty.c new file mode 100644 index 0000000000..fcee95f6fa --- /dev/null +++ b/test/battle/ability/queenly_majesty.c @@ -0,0 +1,4 @@ +#include "global.h" +#include "test/battle.h" + +// Tests for Queenly Majesty are handled in test/battle/ability/dazzling.c diff --git a/test/battle/ai.c b/test/battle/ai.c index e673be4e6a..2d804446d5 100644 --- a/test/battle/ai.c +++ b/test/battle/ai.c @@ -2,26 +2,6 @@ #include "test/battle.h" #include "battle_ai_util.h" -AI_SINGLE_BATTLE_TEST("AI gets baited by Protect Switch tactics") // This behavior is to be fixed. -{ - GIVEN { - AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING); - PLAYER(SPECIES_STUNFISK); - PLAYER(SPECIES_PELIPPER); - OPPONENT(SPECIES_DARKRAI) { Moves(MOVE_TACKLE, MOVE_PECK, MOVE_EARTHQUAKE, MOVE_THUNDERBOLT); } - OPPONENT(SPECIES_SCIZOR) { Moves(MOVE_HYPER_BEAM, MOVE_FACADE, MOVE_GIGA_IMPACT, MOVE_EXTREME_SPEED); } - } WHEN { - - TURN { MOVE(player, MOVE_PROTECT); EXPECT_MOVE(opponent, MOVE_EARTHQUAKE); } // E-quake - TURN { SWITCH(player, 1); EXPECT_MOVE(opponent, MOVE_EARTHQUAKE); } // E-quake - TURN { MOVE(player, MOVE_PROTECT); EXPECT_MOVE(opponent, MOVE_THUNDERBOLT); } // T-Bolt - TURN { SWITCH(player, 0); EXPECT_MOVE(opponent, MOVE_THUNDERBOLT); } // T-Bolt - TURN { MOVE(player, MOVE_PROTECT); EXPECT_MOVE(opponent, MOVE_EARTHQUAKE); } // E-quake - TURN { SWITCH(player, 1); EXPECT_MOVE(opponent, MOVE_EARTHQUAKE);} // E-quake - TURN { MOVE(player, MOVE_PROTECT); EXPECT_MOVE(opponent, MOVE_THUNDERBOLT); } // T-Bolt - } -} - AI_SINGLE_BATTLE_TEST("AI prefers Bubble over Water Gun if it's slower") { u32 speedPlayer, speedAi; @@ -526,222 +506,6 @@ AI_SINGLE_BATTLE_TEST("AI will choose either Rock Tomb or Bulldoze if Stat drop } } -AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Number of hits to KO calculation checks whether incoming damage is less than recurring healing to avoid an infinite loop") -{ - GIVEN { - AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_SMART_SWITCHING | AI_FLAG_SMART_MON_CHOICES); - PLAYER(SPECIES_VENUSAUR) { Level(30); Moves(MOVE_TACKLE); } - // Opponent party courtesy of Skolgrahd, who triggered the bug in the first place - OPPONENT(SPECIES_PIKACHU) { Level(100); Moves(MOVE_ZIPPY_ZAP, MOVE_EXTREME_SPEED, MOVE_IRON_TAIL, MOVE_KNOCK_OFF); } - OPPONENT(SPECIES_NINETALES_ALOLAN) { Level(100); Moves(MOVE_AURORA_VEIL, MOVE_BLIZZARD, MOVE_MOONBLAST, MOVE_DISABLE); } - OPPONENT(SPECIES_WEAVILE) { Level(100); Moves(MOVE_NIGHT_SLASH, MOVE_TRIPLE_AXEL, MOVE_ICE_SHARD, MOVE_FAKE_OUT); } - OPPONENT(SPECIES_DITTO) { Level(100); Moves(MOVE_TRANSFORM); } - OPPONENT(SPECIES_TYPHLOSION) { Level(100); Moves(MOVE_ERUPTION, MOVE_HEAT_WAVE, MOVE_FOCUS_BLAST, MOVE_EXTRASENSORY); } - OPPONENT(SPECIES_UMBREON) { Level(100); Item(ITEM_LEFTOVERS); Moves(MOVE_FOUL_PLAY, MOVE_SNARL, MOVE_HELPING_HAND, MOVE_THUNDER_WAVE); } - } WHEN { - TURN { MOVE(player, MOVE_TACKLE); EXPECT_MOVES(opponent, MOVE_ZIPPY_ZAP, MOVE_EXTREME_SPEED, MOVE_IRON_TAIL, MOVE_KNOCK_OFF); } - } SCENE { - MESSAGE("Venusaur fainted!"); - } -} - -AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Number of hits to KO calculation checks whether incoming damage is zero to avoid an infinite loop") -{ - GIVEN { - ASSUME(gItemsInfo[ITEM_LEFTOVERS].holdEffect == HOLD_EFFECT_LEFTOVERS); - AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_SMART_SWITCHING | AI_FLAG_SMART_MON_CHOICES); - PLAYER(SPECIES_BULBASAUR) { Level(5); Moves(MOVE_SWORDS_DANCE, MOVE_WHIRLWIND, MOVE_SAND_ATTACK, MOVE_TAIL_WHIP); } - // Scenario courtesy of Duke, who triggered the bug in the first place - OPPONENT(SPECIES_GEODUDE) { Level(100); Moves(MOVE_TACKLE); } - OPPONENT(SPECIES_GEODUDE) { Level(100); Moves(MOVE_TACKLE); } - OPPONENT(SPECIES_NOSEPASS) { Level(100); Moves(MOVE_TACKLE); } - } WHEN { - TURN { MOVE(player, MOVE_SWORDS_DANCE); EXPECT_MOVES(opponent, MOVE_TACKLE); } - } SCENE { - MESSAGE("Bulbasaur fainted!"); - } -} - -AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Avoid infinite loop if damage taken is equal to recurring healing") -{ - GIVEN { - ASSUME(gItemsInfo[ITEM_LEFTOVERS].holdEffect == HOLD_EFFECT_LEFTOVERS); - AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_SMART_SWITCHING | AI_FLAG_SMART_MON_CHOICES); - PLAYER(SPECIES_MEOWTH_GALARIAN) { Level(100); Moves(MOVE_GROWL, MOVE_FAKE_OUT, MOVE_HONE_CLAWS); } - // Scenario courtesy of Duke, who triggered the bug in the first place - OPPONENT(SPECIES_MEOWTH_GALARIAN) { Level(5); Moves(MOVE_GROWL, MOVE_FAKE_OUT, MOVE_HONE_CLAWS); } - OPPONENT(SPECIES_GEODUDE) { Level(5); Moves(MOVE_DOUBLE_EDGE); } - OPPONENT(SPECIES_GEODUDE) { Level(5); Moves(MOVE_DOUBLE_EDGE); } - OPPONENT(SPECIES_NOSEPASS) { Level(5); Moves(MOVE_DOUBLE_EDGE); } - OPPONENT(SPECIES_HOUNDSTONE) { Level(5); Moves(MOVE_NIGHT_SHADE, MOVE_BODY_PRESS, MOVE_WILL_O_WISP, MOVE_PROTECT); Item(ITEM_LEFTOVERS); } - } WHEN { - TURN { MOVE(player, MOVE_FAKE_OUT); EXPECT_MOVES(opponent, MOVE_FAKE_OUT); } - } -} - -AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: AI will not switch in a Pokemon which is slower and gets 1HKOed after fainting") -{ - bool32 alakazamFirst; - u32 speedAlakazm; - u32 aiSmartSwitchFlags = 0; - - PARAMETRIZE{ speedAlakazm = 200; alakazamFirst = TRUE; } // AI will always send out Alakazan as it sees a KO with Focus Blast, even if Alakazam dies before it can get it off - PARAMETRIZE{ speedAlakazm = 200; alakazamFirst = FALSE; aiSmartSwitchFlags = AI_FLAG_SMART_SWITCHING | AI_FLAG_SMART_MON_CHOICES; } // AI_FLAG_SMART_MON_CHOICES lets AI see that Alakazam would be KO'd before it can KO, and won't switch it in - PARAMETRIZE{ speedAlakazm = 400; alakazamFirst = TRUE; aiSmartSwitchFlags = AI_FLAG_SMART_SWITCHING | AI_FLAG_SMART_MON_CHOICES; } // AI_FLAG_SMART_MON_CHOICES recognizes that Alakazam is faster and can KO, and will switch it in - - GIVEN { - ASSUME(gMovesInfo[MOVE_PSYCHIC].category == DAMAGE_CATEGORY_SPECIAL); - ASSUME(gMovesInfo[MOVE_FOCUS_BLAST].category == DAMAGE_CATEGORY_SPECIAL); - ASSUME(gMovesInfo[MOVE_BUBBLE_BEAM].category == DAMAGE_CATEGORY_SPECIAL); - ASSUME(gMovesInfo[MOVE_WATER_GUN].category == DAMAGE_CATEGORY_SPECIAL); - ASSUME(gMovesInfo[MOVE_STRENGTH].category == DAMAGE_CATEGORY_PHYSICAL); - AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiSmartSwitchFlags); - PLAYER(SPECIES_WEAVILE) { Speed(300); Ability(ABILITY_SHADOW_TAG); } // Weavile has Shadow Tag, so AI can't switch on the first turn, but has to do it after fainting. - OPPONENT(SPECIES_KADABRA) { Speed(200); Moves(MOVE_PSYCHIC, MOVE_DISABLE, MOVE_TAUNT, MOVE_CALM_MIND); } - OPPONENT(SPECIES_ALAKAZAM) { Speed(speedAlakazm); Moves(MOVE_FOCUS_BLAST, MOVE_PSYCHIC); } // Alakazam has a move which OHKOes Weavile, but it doesn't matter if he's getting KO-ed first. - OPPONENT(SPECIES_BLASTOISE) { Speed(200); Moves(MOVE_BUBBLE_BEAM, MOVE_WATER_GUN, MOVE_LEER, MOVE_STRENGTH); } // Can't OHKO, but survives a hit from Weavile's Night Slash. - } WHEN { - TURN { MOVE(player, MOVE_NIGHT_SLASH) ; EXPECT_SEND_OUT(opponent, alakazamFirst ? 1 : 2); } // AI doesn't send out Alakazam if it gets outsped - } SCENE { - MESSAGE("Foe Kadabra fainted!"); - if (alakazamFirst) { - MESSAGE("{PKMN} TRAINER LEAF sent out Alakazam!"); - } else { - MESSAGE("{PKMN} TRAINER LEAF sent out Blastoise!"); - } - } -} - -AI_SINGLE_BATTLE_TEST("AI switches if Perish Song is about to kill") -{ - GIVEN { - AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); - PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET) {Moves(MOVE_TACKLE); } - OPPONENT(SPECIES_CROBAT) {Moves(MOVE_TACKLE); } - } WHEN { - TURN { MOVE(player, MOVE_PERISH_SONG); } - TURN { ; } - TURN { ; } - TURN { EXPECT_SWITCH(opponent, 1); } - } SCENE { - MESSAGE("{PKMN} TRAINER LEAF sent out Crobat!"); - } -} - -AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: AI considers hazard damage when choosing which Pokemon to switch in") -{ - u32 aiIsSmart = 0; - u32 aiSmartSwitchFlags = 0; - - PARAMETRIZE{ aiIsSmart = 0; aiSmartSwitchFlags = 0; } // AI doesn't care about hazard damage resulting in Pokemon being KO'd - PARAMETRIZE{ aiIsSmart = 1; aiSmartSwitchFlags = AI_FLAG_SMART_MON_CHOICES; } // AI_FLAG_SMART_MON_CHOICES avoids being KO'd as a result of hazards damage - - GIVEN { - AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiSmartSwitchFlags); - PLAYER(SPECIES_MEGANIUM) { Speed(100); SpDefense(328); SpAttack(265); Moves(MOVE_STEALTH_ROCK, MOVE_SURF); } // Meganium does ~56% minimum ~66% maximum, enough to KO Charizard after rocks and never KO Typhlosion after rocks - OPPONENT(SPECIES_PONYTA) { Level(5); Speed(5); Moves(MOVE_TACKLE); } - OPPONENT(SPECIES_CHARIZARD) { Speed(200); Moves(MOVE_FLAMETHROWER); SpAttack(317); SpDefense(207); MaxHP(297); } // Outspeends and 2HKOs Meganium - OPPONENT(SPECIES_TYPHLOSION) { Speed(200); Moves(MOVE_FLAMETHROWER); SpAttack(317); SpDefense(207); MaxHP(297); } // Outspeends and 2HKOs Meganium - } WHEN { - TURN { MOVE(player, MOVE_STEALTH_ROCK) ;} - TURN { MOVE(player, MOVE_SURF); EXPECT_SEND_OUT(opponent, aiIsSmart ? 2 : 1); } // AI sends out Typhlosion to get the KO with the flag rather than Charizard - } -} - -AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Mid-battle switches prioritize type matchup + SE move, then type matchup") -{ - u32 aiSmartSwitchFlags = 0; - u32 move1; - u32 move2; - u32 expectedIndex; - - PARAMETRIZE{ expectedIndex = 3; move1 = MOVE_TACKLE; move2 = MOVE_TACKLE; aiSmartSwitchFlags = 0; } // When not smart, AI will only switch in a defensive mon if it has a SE move, otherwise will just default to damage - PARAMETRIZE{ expectedIndex = 1; move1 = MOVE_GIGA_DRAIN; move2 = MOVE_TACKLE; aiSmartSwitchFlags = 0; } - PARAMETRIZE{ expectedIndex = 2; move1 = MOVE_TACKLE; move2 = MOVE_TACKLE; aiSmartSwitchFlags = AI_FLAG_SMART_MON_CHOICES; } // When smart, AI will prioritize SE move, but still switch in good type matchup without SE move - PARAMETRIZE{ expectedIndex = 1; move1 = MOVE_GIGA_DRAIN; move2 = MOVE_TACKLE; aiSmartSwitchFlags = AI_FLAG_SMART_MON_CHOICES; } - - GIVEN { - AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiSmartSwitchFlags); - PLAYER(SPECIES_MARSHTOMP) { Level(30); Moves(MOVE_MUD_BOMB, MOVE_WATER_GUN, MOVE_GROWL, MOVE_MUD_SHOT); Speed(5); } - OPPONENT(SPECIES_PONYTA) { Level(1); Moves(MOVE_NONE); Speed(6); } // Forces switchout - OPPONENT(SPECIES_TANGELA) { Level(30); Moves(move1); Speed(4); } - OPPONENT(SPECIES_LOMBRE) { Level(30); Moves(move2); Speed(4); } - OPPONENT(SPECIES_HARIYAMA) { Level(30); Moves(MOVE_VITAL_THROW); Speed(4); } - } WHEN { - TURN { MOVE(player, MOVE_GROWL); EXPECT_SWITCH(opponent, expectedIndex); } - } -} - -AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Mid-battle switches prioritize defensive options") -{ - GIVEN { - AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_MON_CHOICES); - PLAYER(SPECIES_SWELLOW) { Level(30); Moves(MOVE_WING_ATTACK, MOVE_BOOMBURST); Speed(5); } - OPPONENT(SPECIES_PONYTA) { Level(1); Moves(MOVE_NONE); Speed(4); } // Forces switchout - OPPONENT(SPECIES_ARON) { Level(30); Moves(MOVE_HEADBUTT); Speed(4); SpDefense(41); } // Mid battle, AI sends out Aron - OPPONENT(SPECIES_ELECTRODE) { Level(30); Moves(MOVE_CHARGE_BEAM); Speed(6); } - } WHEN { - TURN { MOVE(player, MOVE_WING_ATTACK); EXPECT_SWITCH(opponent, 1); } - } -} - -AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Post-KO switches prioritize offensive options") -{ - GIVEN { - AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_MON_CHOICES); - PLAYER(SPECIES_SWELLOW) { Level(30); Moves(MOVE_WING_ATTACK, MOVE_BOOMBURST); Speed(5); } - OPPONENT(SPECIES_PONYTA) { Level(1); Moves(MOVE_TACKLE); Speed(4); } - OPPONENT(SPECIES_ARON) { Level(30); Moves(MOVE_HEADBUTT); Speed(4); } // Mid battle, AI sends out Aron - OPPONENT(SPECIES_ELECTRODE) { Level(30); Moves(MOVE_CHARGE_BEAM); Speed(6); } - } WHEN { - TURN { MOVE(player, MOVE_WING_ATTACK); EXPECT_SEND_OUT(opponent, 2); } - } -} - -AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI switches out after sufficient stat drops") -{ - GIVEN { - AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING); - PLAYER(SPECIES_HITMONTOP) { Level(30); Moves(MOVE_CHARM, MOVE_TACKLE); Ability(ABILITY_INTIMIDATE); Speed(5); } - OPPONENT(SPECIES_GRIMER) { Level(30); Moves(MOVE_TACKLE); Speed(4); } - OPPONENT(SPECIES_PONYTA) { Level(30); Moves(MOVE_HEADBUTT); Speed(4); } - } WHEN { - TURN { MOVE(player, MOVE_CHARM); } - TURN { MOVE(player, MOVE_TACKLE); EXPECT_SWITCH(opponent, 1); } - } -} - -AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will not switch out if Pokemon would faint to hazards unless party member can clear them") -{ - u32 move1; - - PARAMETRIZE{ move1 = MOVE_TACKLE; } - PARAMETRIZE{ move1 = MOVE_RAPID_SPIN; } - - GIVEN { - ASSUME(gMovesInfo[MOVE_TACKLE].category == DAMAGE_CATEGORY_PHYSICAL); - ASSUME(gMovesInfo[MOVE_RAPID_SPIN].category == DAMAGE_CATEGORY_PHYSICAL); - ASSUME(gMovesInfo[MOVE_EARTHQUAKE].category == DAMAGE_CATEGORY_PHYSICAL); - ASSUME(gMovesInfo[MOVE_HEADBUTT].category == DAMAGE_CATEGORY_PHYSICAL); - AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING); - PLAYER(SPECIES_HITMONTOP) { Level(30); Moves(MOVE_CHARM, MOVE_TACKLE, MOVE_STEALTH_ROCK, MOVE_EARTHQUAKE); Ability(ABILITY_INTIMIDATE); Speed(5); } - OPPONENT(SPECIES_GRIMER) { Level(30); Moves(MOVE_TACKLE); Item(ITEM_FOCUS_SASH); Speed(4); } - OPPONENT(SPECIES_PONYTA) { Level(30); Moves(MOVE_HEADBUTT, move1); Speed(4); } - } WHEN { - TURN { MOVE(player, MOVE_STEALTH_ROCK); } - TURN { MOVE(player, MOVE_EARTHQUAKE); } - TURN { MOVE(player, MOVE_CHARM); } - TURN { // If the AI has a mon that can remove hazards, don't prevent them switching out - MOVE(player, MOVE_CHARM); - if (move1 == MOVE_RAPID_SPIN) - EXPECT_SWITCH(opponent, 1); - else if (move1 == MOVE_TACKLE) - EXPECT_MOVE(opponent, MOVE_TACKLE); - } - } -} - AI_SINGLE_BATTLE_TEST("First Impression is preferred on the first turn of the species if it's the best dmg move") { GIVEN { @@ -778,34 +542,6 @@ AI_SINGLE_BATTLE_TEST("First Impression is not chosen if it's blocked by certain } } -AI_DOUBLE_BATTLE_TEST("AI will not try to switch for the same pokemon for 2 spots in a double battle") -{ - u32 flags; - - PARAMETRIZE {flags = AI_FLAG_SMART_SWITCHING; } - PARAMETRIZE {flags = 0; } - - GIVEN { - AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | flags); - PLAYER(SPECIES_RATTATA); - PLAYER(SPECIES_RATTATA); - // No moves to damage player. - OPPONENT(SPECIES_GENGAR) { Moves(MOVE_SHADOW_BALL); } - OPPONENT(SPECIES_HAUNTER) { Moves(MOVE_SHADOW_BALL); } - OPPONENT(SPECIES_GENGAR) { Moves(MOVE_SHADOW_BALL); } - OPPONENT(SPECIES_RATICATE) { Moves(MOVE_HEADBUTT); } - } WHEN { - TURN { EXPECT_SWITCH(opponentLeft, 3); }; - } SCENE { - MESSAGE("{PKMN} TRAINER LEAF withdrew Gengar!"); - MESSAGE("{PKMN} TRAINER LEAF sent out Raticate!"); - NONE_OF { - MESSAGE("{PKMN} TRAINER LEAF withdrew Haunter!"); - MESSAGE("{PKMN} TRAINER LEAF sent out Raticate!"); - } - } -} - AI_SINGLE_BATTLE_TEST("AI will not choose Burn Up if the user lost the Fire typing") { GIVEN { diff --git a/test/battle/ai_flag_risky.c b/test/battle/ai_flag_risky.c new file mode 100644 index 0000000000..eeef2fbe4e --- /dev/null +++ b/test/battle/ai_flag_risky.c @@ -0,0 +1,91 @@ +#include "global.h" +#include "test/battle.h" + +AI_SINGLE_BATTLE_TEST("AI_FLAG_RISKY: AI will blindly Mirror Coat against special attackers") +{ + u32 aiRiskyFlag = 0; + + PARAMETRIZE{ aiRiskyFlag = 0; } + PARAMETRIZE{ aiRiskyFlag = AI_FLAG_RISKY; } + + GIVEN { + ASSUME(gMovesInfo[MOVE_MIRROR_COAT].effect == EFFECT_MIRROR_COAT); + ASSUME(gSpeciesInfo[SPECIES_GROVYLE].baseSpAttack == 85); + ASSUME(gSpeciesInfo[SPECIES_GROVYLE].baseAttack == 65); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiRiskyFlag); + PLAYER(SPECIES_GROVYLE) { Level(20); Moves(MOVE_ENERGY_BALL); } + OPPONENT(SPECIES_CASTFORM) { Level(20); Moves(MOVE_TACKLE, MOVE_MIRROR_COAT); } + } WHEN { + TURN { MOVE(player, MOVE_ENERGY_BALL) ; EXPECT_MOVE(opponent, aiRiskyFlag ? MOVE_MIRROR_COAT : MOVE_TACKLE); } + } +} + +AI_SINGLE_BATTLE_TEST("AI_FLAG_RISKY: AI will blindly Counter against physical attackers") +{ + u32 aiRiskyFlag = 0; + + PARAMETRIZE{ aiRiskyFlag = 0; } + PARAMETRIZE{ aiRiskyFlag = AI_FLAG_RISKY; } + + GIVEN { + ASSUME(gMovesInfo[MOVE_COUNTER].effect == EFFECT_COUNTER); + ASSUME(gSpeciesInfo[SPECIES_MARSHTOMP].baseAttack == 85); + ASSUME(gSpeciesInfo[SPECIES_MARSHTOMP].baseSpAttack == 60); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiRiskyFlag); + PLAYER(SPECIES_MARSHTOMP) { Level(20); Moves(MOVE_WATERFALL); } + OPPONENT(SPECIES_CASTFORM) { Level(20); Moves(MOVE_TACKLE, MOVE_COUNTER); } + } WHEN { + TURN { MOVE(player, MOVE_WATERFALL) ; EXPECT_MOVE(opponent, aiRiskyFlag ? MOVE_COUNTER : MOVE_TACKLE); } + } +} + +AI_SINGLE_BATTLE_TEST("AI_FLAG_RISKY: AI will prioritize Revenge if slower") +{ + u32 aiRiskyFlag = 0; + + PARAMETRIZE{ aiRiskyFlag = 0; } + PARAMETRIZE{ aiRiskyFlag = AI_FLAG_RISKY; } + + GIVEN { + ASSUME(gMovesInfo[MOVE_REVENGE].effect == EFFECT_REVENGE); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiRiskyFlag); + PLAYER(SPECIES_GROVYLE) { Level(20); Speed(4); Moves(MOVE_ENERGY_BALL); } + OPPONENT(SPECIES_CASTFORM) { Level(19); Speed(3); Moves(MOVE_TACKLE, MOVE_REVENGE); } + } WHEN { + TURN { MOVE(player, MOVE_ENERGY_BALL) ; EXPECT_MOVE(opponent, aiRiskyFlag ? MOVE_REVENGE : MOVE_TACKLE); } + } +} + +AI_SINGLE_BATTLE_TEST("AI_FLAG_RISKY: Mid-battle switches prioritize offensive options") +{ + u32 aiRiskyFlag = 0; + + PARAMETRIZE{ aiRiskyFlag = 0; } + PARAMETRIZE{ aiRiskyFlag = AI_FLAG_RISKY; } + + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_MON_CHOICES | aiRiskyFlag); + PLAYER(SPECIES_SWELLOW) { Level(30); Moves(MOVE_WING_ATTACK, MOVE_BOOMBURST); Speed(5); } + OPPONENT(SPECIES_PONYTA) { Level(1); Moves(MOVE_NONE); Speed(4); } // Forces switchout + OPPONENT(SPECIES_ARON) { Level(30); Moves(MOVE_HEADBUTT); Speed(4); SpDefense(41); } // Mid battle, AI sends out Aron + OPPONENT(SPECIES_ELECTRODE) { Level(30); Moves(MOVE_CHARGE_BEAM); Speed(6); } + } WHEN { + TURN { MOVE(player, MOVE_WING_ATTACK); EXPECT_SWITCH(opponent, aiRiskyFlag? 2 : 1); } + } +} + +AI_SINGLE_BATTLE_TEST("AI_FLAG_RISKY: AI prefers high damage moves at the expense of accuracy regardless of KO thresholds") +{ + u32 aiRiskyFlag = 0; + + PARAMETRIZE{ aiRiskyFlag = 0; } + PARAMETRIZE{ aiRiskyFlag = AI_FLAG_RISKY; } + + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiRiskyFlag); + PLAYER(SPECIES_GOLDEEN) { Level(5); Moves(MOVE_TACKLE); } + OPPONENT(SPECIES_CASTFORM) { Level(20); Moves(MOVE_THUNDER, MOVE_THUNDERBOLT); } + } WHEN { + TURN { MOVE(player, MOVE_TACKLE); EXPECT_MOVE(opponent, aiRiskyFlag ? MOVE_THUNDER : MOVE_THUNDERBOLT); } + } +} diff --git a/test/battle/ai_switching.c b/test/battle/ai_switching.c new file mode 100644 index 0000000000..fb5085a791 --- /dev/null +++ b/test/battle/ai_switching.c @@ -0,0 +1,331 @@ +#include "global.h" +#include "test/battle.h" + +AI_SINGLE_BATTLE_TEST("AI gets baited by Protect Switch tactics") // This behavior is to be fixed. +{ + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING); + PLAYER(SPECIES_STUNFISK); + PLAYER(SPECIES_PELIPPER); + OPPONENT(SPECIES_DARKRAI) { Moves(MOVE_TACKLE, MOVE_PECK, MOVE_EARTHQUAKE, MOVE_THUNDERBOLT); } + OPPONENT(SPECIES_SCIZOR) { Moves(MOVE_HYPER_BEAM, MOVE_FACADE, MOVE_GIGA_IMPACT, MOVE_EXTREME_SPEED); } + } WHEN { + + TURN { MOVE(player, MOVE_PROTECT); EXPECT_MOVE(opponent, MOVE_EARTHQUAKE); } // E-quake + TURN { SWITCH(player, 1); EXPECT_MOVE(opponent, MOVE_EARTHQUAKE); } // E-quake + TURN { MOVE(player, MOVE_PROTECT); EXPECT_MOVE(opponent, MOVE_THUNDERBOLT); } // T-Bolt + TURN { SWITCH(player, 0); EXPECT_MOVE(opponent, MOVE_THUNDERBOLT); } // T-Bolt + TURN { MOVE(player, MOVE_PROTECT); EXPECT_MOVE(opponent, MOVE_EARTHQUAKE); } // E-quake + TURN { SWITCH(player, 1); EXPECT_MOVE(opponent, MOVE_EARTHQUAKE);} // E-quake + TURN { MOVE(player, MOVE_PROTECT); EXPECT_MOVE(opponent, MOVE_THUNDERBOLT); } // T-Bolt + } +} + +// General switching behaviour +AI_SINGLE_BATTLE_TEST("AI switches if Perish Song is about to kill") +{ + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) {Moves(MOVE_TACKLE); } + OPPONENT(SPECIES_CROBAT) {Moves(MOVE_TACKLE); } + } WHEN { + TURN { MOVE(player, MOVE_PERISH_SONG); } + TURN { ; } + TURN { ; } + TURN { EXPECT_SWITCH(opponent, 1); } + } SCENE { + MESSAGE("{PKMN} TRAINER LEAF sent out Crobat!"); + } +} + +AI_DOUBLE_BATTLE_TEST("AI will not try to switch for the same pokemon for 2 spots in a double battle") +{ + u32 flags; + + PARAMETRIZE {flags = AI_FLAG_SMART_SWITCHING; } + PARAMETRIZE {flags = 0; } + + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | flags); + PLAYER(SPECIES_RATTATA); + PLAYER(SPECIES_RATTATA); + // No moves to damage player. + OPPONENT(SPECIES_GENGAR) { Moves(MOVE_SHADOW_BALL); } + OPPONENT(SPECIES_HAUNTER) { Moves(MOVE_SHADOW_BALL); } + OPPONENT(SPECIES_GENGAR) { Moves(MOVE_SHADOW_BALL); } + OPPONENT(SPECIES_RATICATE) { Moves(MOVE_HEADBUTT); } + } WHEN { + TURN { EXPECT_SWITCH(opponentLeft, 3); }; + } SCENE { + MESSAGE("{PKMN} TRAINER LEAF withdrew Gengar!"); + MESSAGE("{PKMN} TRAINER LEAF sent out Raticate!"); + NONE_OF { + MESSAGE("{PKMN} TRAINER LEAF withdrew Haunter!"); + MESSAGE("{PKMN} TRAINER LEAF sent out Raticate!"); + } + } +} + +// General AI_FLAG_SMART_MON_CHOICES behaviour +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Number of hits to KO calculation checks whether incoming damage is less than recurring healing to avoid an infinite loop") +{ + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_SMART_SWITCHING | AI_FLAG_SMART_MON_CHOICES); + PLAYER(SPECIES_VENUSAUR) { Level(30); Moves(MOVE_TACKLE); } + // Opponent party courtesy of Skolgrahd, who triggered the bug in the first place + OPPONENT(SPECIES_PIKACHU) { Level(100); Moves(MOVE_ZIPPY_ZAP, MOVE_EXTREME_SPEED, MOVE_IRON_TAIL, MOVE_KNOCK_OFF); } + OPPONENT(SPECIES_NINETALES_ALOLAN) { Level(100); Moves(MOVE_AURORA_VEIL, MOVE_BLIZZARD, MOVE_MOONBLAST, MOVE_DISABLE); } + OPPONENT(SPECIES_WEAVILE) { Level(100); Moves(MOVE_NIGHT_SLASH, MOVE_TRIPLE_AXEL, MOVE_ICE_SHARD, MOVE_FAKE_OUT); } + OPPONENT(SPECIES_DITTO) { Level(100); Moves(MOVE_TRANSFORM); } + OPPONENT(SPECIES_TYPHLOSION) { Level(100); Moves(MOVE_ERUPTION, MOVE_HEAT_WAVE, MOVE_FOCUS_BLAST, MOVE_EXTRASENSORY); } + OPPONENT(SPECIES_UMBREON) { Level(100); Item(ITEM_LEFTOVERS); Moves(MOVE_FOUL_PLAY, MOVE_SNARL, MOVE_HELPING_HAND, MOVE_THUNDER_WAVE); } + } WHEN { + TURN { MOVE(player, MOVE_TACKLE); EXPECT_MOVES(opponent, MOVE_ZIPPY_ZAP, MOVE_EXTREME_SPEED, MOVE_IRON_TAIL, MOVE_KNOCK_OFF); } + } SCENE { + MESSAGE("Venusaur fainted!"); + } +} + +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Number of hits to KO calculation checks whether incoming damage is zero to avoid an infinite loop") +{ + GIVEN { + ASSUME(gItemsInfo[ITEM_LEFTOVERS].holdEffect == HOLD_EFFECT_LEFTOVERS); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_SMART_SWITCHING | AI_FLAG_SMART_MON_CHOICES); + PLAYER(SPECIES_BULBASAUR) { Level(5); Moves(MOVE_SWORDS_DANCE, MOVE_WHIRLWIND, MOVE_SAND_ATTACK, MOVE_TAIL_WHIP); } + // Scenario courtesy of Duke, who triggered the bug in the first place + OPPONENT(SPECIES_GEODUDE) { Level(100); Moves(MOVE_TACKLE); } + OPPONENT(SPECIES_GEODUDE) { Level(100); Moves(MOVE_TACKLE); } + OPPONENT(SPECIES_NOSEPASS) { Level(100); Moves(MOVE_TACKLE); } + } WHEN { + TURN { MOVE(player, MOVE_SWORDS_DANCE); EXPECT_MOVES(opponent, MOVE_TACKLE); } + } SCENE { + MESSAGE("Bulbasaur fainted!"); + } +} + +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Avoid infinite loop if damage taken is equal to recurring healing") +{ + GIVEN { + ASSUME(gItemsInfo[ITEM_LEFTOVERS].holdEffect == HOLD_EFFECT_LEFTOVERS); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_SMART_SWITCHING | AI_FLAG_SMART_MON_CHOICES); + PLAYER(SPECIES_MEOWTH_GALARIAN) { Level(100); Moves(MOVE_GROWL, MOVE_FAKE_OUT, MOVE_HONE_CLAWS); } + // Scenario courtesy of Duke, who triggered the bug in the first place + OPPONENT(SPECIES_MEOWTH_GALARIAN) { Level(5); Moves(MOVE_GROWL, MOVE_FAKE_OUT, MOVE_HONE_CLAWS); } + OPPONENT(SPECIES_GEODUDE) { Level(5); Moves(MOVE_DOUBLE_EDGE); } + OPPONENT(SPECIES_GEODUDE) { Level(5); Moves(MOVE_DOUBLE_EDGE); } + OPPONENT(SPECIES_NOSEPASS) { Level(5); Moves(MOVE_DOUBLE_EDGE); } + OPPONENT(SPECIES_HOUNDSTONE) { Level(5); Moves(MOVE_NIGHT_SHADE, MOVE_BODY_PRESS, MOVE_WILL_O_WISP, MOVE_PROTECT); Item(ITEM_LEFTOVERS); } + } WHEN { + TURN { MOVE(player, MOVE_FAKE_OUT); EXPECT_MOVES(opponent, MOVE_FAKE_OUT); } + } +} + +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: AI will not switch in a Pokemon which is slower and gets 1HKOed after fainting") +{ + bool32 alakazamFirst; + u32 speedAlakazm; + u32 aiSmartSwitchFlags = 0; + + PARAMETRIZE{ speedAlakazm = 200; alakazamFirst = TRUE; } // AI will always send out Alakazan as it sees a KO with Focus Blast, even if Alakazam dies before it can get it off + PARAMETRIZE{ speedAlakazm = 200; alakazamFirst = FALSE; aiSmartSwitchFlags = AI_FLAG_SMART_SWITCHING | AI_FLAG_SMART_MON_CHOICES; } // AI_FLAG_SMART_MON_CHOICES lets AI see that Alakazam would be KO'd before it can KO, and won't switch it in + PARAMETRIZE{ speedAlakazm = 400; alakazamFirst = TRUE; aiSmartSwitchFlags = AI_FLAG_SMART_SWITCHING | AI_FLAG_SMART_MON_CHOICES; } // AI_FLAG_SMART_MON_CHOICES recognizes that Alakazam is faster and can KO, and will switch it in + + GIVEN { + ASSUME(gMovesInfo[MOVE_PSYCHIC].category == DAMAGE_CATEGORY_SPECIAL); + ASSUME(gMovesInfo[MOVE_FOCUS_BLAST].category == DAMAGE_CATEGORY_SPECIAL); + ASSUME(gMovesInfo[MOVE_BUBBLE_BEAM].category == DAMAGE_CATEGORY_SPECIAL); + ASSUME(gMovesInfo[MOVE_WATER_GUN].category == DAMAGE_CATEGORY_SPECIAL); + ASSUME(gMovesInfo[MOVE_STRENGTH].category == DAMAGE_CATEGORY_PHYSICAL); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiSmartSwitchFlags); + PLAYER(SPECIES_WEAVILE) { Speed(300); Ability(ABILITY_SHADOW_TAG); } // Weavile has Shadow Tag, so AI can't switch on the first turn, but has to do it after fainting. + OPPONENT(SPECIES_KADABRA) { Speed(200); Moves(MOVE_PSYCHIC, MOVE_DISABLE, MOVE_TAUNT, MOVE_CALM_MIND); } + OPPONENT(SPECIES_ALAKAZAM) { Speed(speedAlakazm); Moves(MOVE_FOCUS_BLAST, MOVE_PSYCHIC); } // Alakazam has a move which OHKOes Weavile, but it doesn't matter if he's getting KO-ed first. + OPPONENT(SPECIES_BLASTOISE) { Speed(200); Moves(MOVE_BUBBLE_BEAM, MOVE_WATER_GUN, MOVE_LEER, MOVE_STRENGTH); } // Can't OHKO, but survives a hit from Weavile's Night Slash. + } WHEN { + TURN { MOVE(player, MOVE_NIGHT_SLASH) ; EXPECT_SEND_OUT(opponent, alakazamFirst ? 1 : 2); } // AI doesn't send out Alakazam if it gets outsped + } SCENE { + MESSAGE("Foe Kadabra fainted!"); + if (alakazamFirst) { + MESSAGE("{PKMN} TRAINER LEAF sent out Alakazam!"); + } else { + MESSAGE("{PKMN} TRAINER LEAF sent out Blastoise!"); + } + } +} + +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: AI considers hazard damage when choosing which Pokemon to switch in") +{ + u32 aiIsSmart = 0; + u32 aiSmartSwitchFlags = 0; + + PARAMETRIZE{ aiIsSmart = 0; aiSmartSwitchFlags = 0; } // AI doesn't care about hazard damage resulting in Pokemon being KO'd + PARAMETRIZE{ aiIsSmart = 1; aiSmartSwitchFlags = AI_FLAG_SMART_MON_CHOICES; } // AI_FLAG_SMART_MON_CHOICES avoids being KO'd as a result of hazards damage + + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiSmartSwitchFlags); + PLAYER(SPECIES_MEGANIUM) { Speed(100); SpDefense(328); SpAttack(265); Moves(MOVE_STEALTH_ROCK, MOVE_SURF); } // Meganium does ~56% minimum ~66% maximum, enough to KO Charizard after rocks and never KO Typhlosion after rocks + OPPONENT(SPECIES_PONYTA) { Level(5); Speed(5); Moves(MOVE_TACKLE); } + OPPONENT(SPECIES_CHARIZARD) { Speed(200); Moves(MOVE_FLAMETHROWER); SpAttack(317); SpDefense(207); MaxHP(297); } // Outspeends and 2HKOs Meganium + OPPONENT(SPECIES_TYPHLOSION) { Speed(200); Moves(MOVE_FLAMETHROWER); SpAttack(317); SpDefense(207); MaxHP(297); } // Outspeends and 2HKOs Meganium + } WHEN { + TURN { MOVE(player, MOVE_STEALTH_ROCK) ;} + TURN { MOVE(player, MOVE_SURF); EXPECT_SEND_OUT(opponent, aiIsSmart ? 2 : 1); } // AI sends out Typhlosion to get the KO with the flag rather than Charizard + } +} + +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Mid-battle switches prioritize type matchup + SE move, then type matchup") +{ + u32 aiSmartSwitchFlags = 0; + u32 move1; + u32 move2; + u32 expectedIndex; + + PARAMETRIZE{ expectedIndex = 3; move1 = MOVE_TACKLE; move2 = MOVE_TACKLE; aiSmartSwitchFlags = 0; } // When not smart, AI will only switch in a defensive mon if it has a SE move, otherwise will just default to damage + PARAMETRIZE{ expectedIndex = 1; move1 = MOVE_GIGA_DRAIN; move2 = MOVE_TACKLE; aiSmartSwitchFlags = 0; } + PARAMETRIZE{ expectedIndex = 2; move1 = MOVE_TACKLE; move2 = MOVE_TACKLE; aiSmartSwitchFlags = AI_FLAG_SMART_MON_CHOICES; } // When smart, AI will prioritize SE move, but still switch in good type matchup without SE move + PARAMETRIZE{ expectedIndex = 1; move1 = MOVE_GIGA_DRAIN; move2 = MOVE_TACKLE; aiSmartSwitchFlags = AI_FLAG_SMART_MON_CHOICES; } + + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiSmartSwitchFlags); + PLAYER(SPECIES_MARSHTOMP) { Level(30); Moves(MOVE_MUD_BOMB, MOVE_WATER_GUN, MOVE_GROWL, MOVE_MUD_SHOT); Speed(5); } + OPPONENT(SPECIES_PONYTA) { Level(1); Moves(MOVE_NONE); Speed(6); } // Forces switchout + OPPONENT(SPECIES_TANGELA) { Level(30); Moves(move1); Speed(4); } + OPPONENT(SPECIES_LOMBRE) { Level(30); Moves(move2); Speed(4); } + OPPONENT(SPECIES_HARIYAMA) { Level(30); Moves(MOVE_VITAL_THROW); Speed(4); } + } WHEN { + TURN { MOVE(player, MOVE_GROWL); EXPECT_SWITCH(opponent, expectedIndex); } + } +} + +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Mid-battle switches prioritize defensive options") +{ + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_MON_CHOICES); + PLAYER(SPECIES_SWELLOW) { Level(30); Moves(MOVE_WING_ATTACK, MOVE_BOOMBURST); Speed(5); } + OPPONENT(SPECIES_PONYTA) { Level(1); Moves(MOVE_NONE); Speed(4); } // Forces switchout + OPPONENT(SPECIES_ARON) { Level(30); Moves(MOVE_HEADBUTT); Speed(4); SpDefense(41); } // Mid battle, AI sends out Aron + OPPONENT(SPECIES_ELECTRODE) { Level(30); Moves(MOVE_CHARGE_BEAM); Speed(6); } + } WHEN { + TURN { MOVE(player, MOVE_WING_ATTACK); EXPECT_SWITCH(opponent, 1); } + } +} + +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Post-KO switches prioritize offensive options") +{ + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_MON_CHOICES); + PLAYER(SPECIES_SWELLOW) { Level(30); Moves(MOVE_WING_ATTACK, MOVE_BOOMBURST); Speed(5); } + OPPONENT(SPECIES_PONYTA) { Level(1); Moves(MOVE_TACKLE); Speed(4); } + OPPONENT(SPECIES_ARON) { Level(30); Moves(MOVE_HEADBUTT); Speed(4); } // Mid battle, AI sends out Aron + OPPONENT(SPECIES_ELECTRODE) { Level(30); Moves(MOVE_CHARGE_BEAM); Speed(6); } + } WHEN { + TURN { MOVE(player, MOVE_WING_ATTACK); EXPECT_SEND_OUT(opponent, 2); } + } +} + +// General AI_FLAG_SMART_SWITCHING behaviour +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI switches out after sufficient stat drops") +{ + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING); + PLAYER(SPECIES_HITMONTOP) { Level(30); Moves(MOVE_CHARM, MOVE_TACKLE); Ability(ABILITY_INTIMIDATE); Speed(5); } + OPPONENT(SPECIES_GRIMER) { Level(30); Moves(MOVE_TACKLE); Speed(4); } + OPPONENT(SPECIES_PONYTA) { Level(30); Moves(MOVE_HEADBUTT); Speed(4); } + } WHEN { + TURN { MOVE(player, MOVE_CHARM); } + TURN { MOVE(player, MOVE_TACKLE); EXPECT_SWITCH(opponent, 1); } + } +} + +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will not switch out if Pokemon would faint to hazards unless party member can clear them") +{ + u32 move1; + + PARAMETRIZE{ move1 = MOVE_TACKLE; } + PARAMETRIZE{ move1 = MOVE_RAPID_SPIN; } + + GIVEN { + ASSUME(gMovesInfo[MOVE_TACKLE].category == DAMAGE_CATEGORY_PHYSICAL); + ASSUME(gMovesInfo[MOVE_RAPID_SPIN].category == DAMAGE_CATEGORY_PHYSICAL); + ASSUME(gMovesInfo[MOVE_EARTHQUAKE].category == DAMAGE_CATEGORY_PHYSICAL); + ASSUME(gMovesInfo[MOVE_HEADBUTT].category == DAMAGE_CATEGORY_PHYSICAL); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING); + PLAYER(SPECIES_HITMONTOP) { Level(30); Moves(MOVE_CHARM, MOVE_TACKLE, MOVE_STEALTH_ROCK, MOVE_EARTHQUAKE); Ability(ABILITY_INTIMIDATE); Speed(5); } + OPPONENT(SPECIES_GRIMER) { Level(30); Moves(MOVE_TACKLE); Item(ITEM_FOCUS_SASH); Speed(4); } + OPPONENT(SPECIES_PONYTA) { Level(30); Moves(MOVE_HEADBUTT, move1); Speed(4); } + } WHEN { + TURN { MOVE(player, MOVE_STEALTH_ROCK); } + TURN { MOVE(player, MOVE_EARTHQUAKE); } + TURN { MOVE(player, MOVE_CHARM); } + TURN { // If the AI has a mon that can remove hazards, don't prevent them switching out + MOVE(player, MOVE_CHARM); + if (move1 == MOVE_RAPID_SPIN) + EXPECT_SWITCH(opponent, 1); + else if (move1 == MOVE_TACKLE) + EXPECT_MOVE(opponent, MOVE_TACKLE); + } + } +} + +// Trapping behaviour +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch in trapping mon mid battle") +{ + u32 aiSmartSwitchingFlag = 0; + PARAMETRIZE { aiSmartSwitchingFlag = 0; } + PARAMETRIZE { aiSmartSwitchingFlag = AI_FLAG_SMART_SWITCHING; } + + GIVEN { + ASSUME(gSpeciesInfo[SPECIES_GOLURK].types[0] == TYPE_GROUND); + ASSUME(gSpeciesInfo[SPECIES_GOLURK].types[1] == TYPE_GHOST); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiSmartSwitchingFlag); + PLAYER(SPECIES_ELECTRODE) { Speed(4); Moves(MOVE_THUNDERBOLT, MOVE_AURA_SPHERE, MOVE_PROTECT); } + PLAYER(SPECIES_WOBBUFFET) { Speed(1); }; + OPPONENT(SPECIES_SNORLAX) { Speed(1); Moves(MOVE_HEADBUTT); } + OPPONENT(SPECIES_DUGTRIO) { Speed(3); Ability(ABILITY_ARENA_TRAP); Moves(MOVE_EARTHQUAKE); } + OPPONENT(SPECIES_GOLURK) { Speed(5); Moves(MOVE_EARTHQUAKE); } + } WHEN { + if (aiSmartSwitchingFlag == AI_FLAG_SMART_SWITCHING) + TURN { MOVE(player, MOVE_AURA_SPHERE) ; EXPECT_SWITCH(opponent, 1); } + else + TURN { MOVE(player, MOVE_AURA_SPHERE) ; EXPECT_MOVE(opponent, MOVE_HEADBUTT); } + } +} + +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: AI will switch in trapping mon after KO") +{ + u32 aiSmartMonChoicesFlag = 0; // Enables trapping behaviour after KOs + PARAMETRIZE { aiSmartMonChoicesFlag = 0; } // No trapping behaviour + PARAMETRIZE { aiSmartMonChoicesFlag = AI_FLAG_SMART_MON_CHOICES; } // Traps with mid battle switches + GIVEN{ + ASSUME(gSpeciesInfo[SPECIES_MAWILE].types[0] == TYPE_STEEL); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiSmartMonChoicesFlag); + PLAYER(SPECIES_MAWILE) { Speed(2); Moves(MOVE_PROTECT, MOVE_TACKLE); } + PLAYER(SPECIES_WOBBUFFET) { Speed(1); } + OPPONENT(SPECIES_SNORLAX) { Speed(3); Moves(MOVE_SELF_DESTRUCT); } + OPPONENT(SPECIES_MAGNEZONE) { Speed(1); Ability(ABILITY_MAGNET_PULL); Moves(MOVE_SHOCK_WAVE); } + OPPONENT(SPECIES_MEGANIUM) { Speed(3); Moves(MOVE_EARTH_POWER); } + } WHEN { + if (aiSmartMonChoicesFlag == AI_FLAG_SMART_MON_CHOICES) + TURN{ MOVE(player, MOVE_PROTECT); EXPECT_MOVE(opponent, MOVE_SELF_DESTRUCT); EXPECT_SEND_OUT(opponent, 1); } + else + TURN{ MOVE(player, MOVE_PROTECT); EXPECT_MOVE(opponent, MOVE_SELF_DESTRUCT); EXPECT_SEND_OUT(opponent, 2); } + } +} + +AI_SINGLE_BATTLE_TEST("AI won't use trapping behaviour if player only has 1 mon left") +{ + u32 aiSmartMonChoicesFlag = 0; // Enables trapping behaviour after KOs + PARAMETRIZE { aiSmartMonChoicesFlag = 0; } // No trapping behaviour + PARAMETRIZE { aiSmartMonChoicesFlag = AI_FLAG_SMART_MON_CHOICES; } // Traps with mid battle switches + GIVEN{ + ASSUME(gSpeciesInfo[SPECIES_MAWILE].types[0] == TYPE_STEEL); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiSmartMonChoicesFlag); + PLAYER(SPECIES_MAWILE) { Speed(2); Moves(MOVE_PROTECT, MOVE_TACKLE); } + OPPONENT(SPECIES_SNORLAX) { Speed(3); Moves(MOVE_SELF_DESTRUCT); } + OPPONENT(SPECIES_MAGNEZONE) { Speed(1); Ability(ABILITY_MAGNET_PULL); Moves(MOVE_SHOCK_WAVE); } + OPPONENT(SPECIES_MEGANIUM) { Speed(3); Moves(MOVE_EARTH_POWER); } + } WHEN { + TURN{ MOVE(player, MOVE_PROTECT); EXPECT_MOVE(opponent, MOVE_SELF_DESTRUCT); EXPECT_SEND_OUT(opponent, 2); } + } +} diff --git a/test/battle/gimmick/dynamax.c b/test/battle/gimmick/dynamax.c index 1e90703f33..4892e3ce47 100644 --- a/test/battle/gimmick/dynamax.c +++ b/test/battle/gimmick/dynamax.c @@ -1158,6 +1158,8 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Terror traps both opponents") } } +TO_DO_BATTLE_TEST("(DYNAMAX) Baton Pass passes G-Max Terror's escape prevention effect"); + DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Meltdown torments both opponents for 3 turns") { GIVEN { @@ -1391,6 +1393,8 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Chi Strike boosts allies' crit chance") } } +TO_DO_BATTLE_TEST("(DYNAMAX) Baton Pass doesn't pass G-Max Chi Strike's effect"); + DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Depletion takes away 2 PP from the target's last move") { GIVEN { diff --git a/test/battle/gimmick/terastal.c b/test/battle/gimmick/terastal.c index 18eab992af..c40b6823e7 100644 --- a/test/battle/gimmick/terastal.c +++ b/test/battle/gimmick/terastal.c @@ -765,6 +765,7 @@ SINGLE_BATTLE_TEST("(TERA) Stellar type's one-time boost factors in dynamically- SINGLE_BATTLE_TEST("(TERA) All type indicators function correctly") { u32 type; + PARAMETRIZE { type = TYPE_NONE; } PARAMETRIZE { type = TYPE_NORMAL; } PARAMETRIZE { type = TYPE_FIGHTING; } PARAMETRIZE { type = TYPE_FLYING; } diff --git a/test/battle/move_effect/aqua_ring.c b/test/battle/move_effect/aqua_ring.c index c31bfbd8df..158c839d79 100644 --- a/test/battle/move_effect/aqua_ring.c +++ b/test/battle/move_effect/aqua_ring.c @@ -3,4 +3,4 @@ TO_DO_BATTLE_TEST("Aqua Ring recovers 1/16th HP at end of turn"); TO_DO_BATTLE_TEST("Aqua Ring can be used under Heal Block but will not heal the user"); -TO_DO_BATTLE_TEST("Aqua Ring can be Baton Passed"); +TO_DO_BATTLE_TEST("Baton Pass passes Aqua Ring's effect"); diff --git a/test/battle/move_effect/baddy_bad.c b/test/battle/move_effect/baddy_bad.c new file mode 100644 index 0000000000..e2ee4a6d84 --- /dev/null +++ b/test/battle/move_effect/baddy_bad.c @@ -0,0 +1,6 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Baddy Bad sets up Reflect, reducing physical damage"); +TO_DO_BATTLE_TEST("Baddy Bad's Reflect lasts for 5 turns"); +TO_DO_BATTLE_TEST("Baddy Bad can still damage the target when Reflect is already set up"); diff --git a/test/battle/move_effect/baton_pass.c b/test/battle/move_effect/baton_pass.c new file mode 100644 index 0000000000..6fad1c1605 --- /dev/null +++ b/test/battle/move_effect/baton_pass.c @@ -0,0 +1,54 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Baton Pass switches out the user"); +TO_DO_BATTLE_TEST("Baton Pass fails if there's no valid party Pokémon left"); +TO_DO_BATTLE_TEST("Baton Pass passes both positive and negative stat changes"); +TO_DO_BATTLE_TEST("AI doesn't choose Baton Pass if the Ace Pokémon is the last one available to switch in"); +TO_DO_BATTLE_TEST("Baton Pass doesn't pass non-volatile status conditions"); // Status1 +TO_DO_BATTLE_TEST("Baton Pass doesn't pass infatuation"); +TO_DO_BATTLE_TEST("Baton Pass doesn't pass type changes"); +TO_DO_BATTLE_TEST("Baton Pass doesn't pass ability changes"); + +// +// Move these to the corresponding effect files. +// +TO_DO_BATTLE_TEST("Baton Pass passes confusion status"); // test/battle/status2/confusion.c + +TO_DO_BATTLE_TEST("Baton Pass passes Cursed status"); // test/battle/move_effect/curse.c +TO_DO_BATTLE_TEST("Baton Pass doesn't pass Disable's effect"); // test/battle/move_effect/disable.c +TO_DO_BATTLE_TEST("Baton Pass passes Dragon Cheer's effect"); // test/battle/move_effect/dragon_cheer.c +TO_DO_BATTLE_TEST("Baton Pass passes Fairy lock's escape prevention effect"); // test/battle/move_effect/fairy_lock.c +TO_DO_BATTLE_TEST("Baton Pass passes Focus Energy's effect"); // test/battle/move_effect/focus_energy.c +TO_DO_BATTLE_TEST("Baton Pass passes Heal Block's effect"); // test/battle/move_effect/heal_block.c +TO_DO_BATTLE_TEST("Baton Pass doesn't pass Imprison's effect"); // test/battle/move_effect/imprison.c +TO_DO_BATTLE_TEST("Baton Pass passes Ingrain's effect"); // test/battle/move_effect/ingrain.c +TO_DO_BATTLE_TEST("Baton Pass passes Magnet Rise's effect"); // test/battle/move_effect/magnet_rise.c +TO_DO_BATTLE_TEST("Baton Pass passes escape prevention primary effect if it's used by the target"); // test/battle/move_effect/mean_look.c (Spider Web, Mean Look, Block) +TO_DO_BATTLE_TEST("Baton Pass doesn't pass escape prevention primary effects if it's used by the user"); // test/battle/move_effect/mean_look.c (Spider Web, Mean Look, Block) +TO_DO_BATTLE_TEST("Baton Pass doesn't pass Mimic's learnt move"); // test/battle/move_effect/mimic.c +TO_DO_BATTLE_TEST("Baton Pass passes Minimize's evasion but not the weakness to stomping moves"); // test/battle/move_effect/minimize.c +TO_DO_BATTLE_TEST("Baton Pass passes No Retreat's escape prevention effect"); // test/battle/move_effect/no_retreat.c +TO_DO_BATTLE_TEST("Baton Pass passes Octolock's escape prevention effect"); // test/battle/move_effect/octolock.c +TO_DO_BATTLE_TEST("Baton Pass passes Perish Song's effect"); // test/battle/move_effect/perish_song.c +TO_DO_BATTLE_TEST("Baton Pass passes Power Trick's effect"); // test/battle/move_effect/power_trick.c +TO_DO_BATTLE_TEST("Baton Pass doesn't pass Rollout's multiplier"); // test/battle/move_effect/rollout.c +TO_DO_BATTLE_TEST("Baton Pass passes Sappy Seed's effect"); // test/battle/move_effect/sappy_seed.c +TO_DO_BATTLE_TEST("Baton Pass doesn't pass Transformations"); // test/battle/move_effect/transform.c +TO_DO_BATTLE_TEST("Baton Pass doesn't pass Yawn's effect"); // test/battle/move_effect/yawn.c + +TO_DO_BATTLE_TEST("Baton Pass passes Core Enforcer's effect"); // test/battle/move_effect_secondary/core_enforcer.c +TO_DO_BATTLE_TEST("Baton Pass passes escape prevention secondary effect"); // test/battle/move_effect_secondary/prevent_escape.c (Thousand Waves, Spirit Shackle, Anchor Shot) +TO_DO_BATTLE_TEST("Baton Pass doesn't pass escape prevention secondary effect if it's used by the user"); // test/battle/move_effect_secondary/prevent_escape.c (Thousand Waves, Spirit Shackle, Anchor Shot) + +// Unconfirmed by Bulbapedia, should be tested in-game: +// - Nightmare +// - Encore +// - Spotlight +// - Taunt +// - Throat Chop +// - Torment +// - Splinters +// - Power Boost +// - Power Drop +// - Guard Boost diff --git a/test/battle/move_effect/beak_blast.c b/test/battle/move_effect/beak_blast.c index eeb3d59bf0..d3c8d01919 100644 --- a/test/battle/move_effect/beak_blast.c +++ b/test/battle/move_effect/beak_blast.c @@ -111,3 +111,6 @@ SINGLE_BATTLE_TEST("Beak Blast burns only when contact moves are used") HP_BAR(opponent); } } + +TO_DO_BATTLE_TEST("Beak Blast's charging message is shown regardless if it would've missed"); +TO_DO_BATTLE_TEST("Bulletproof is immune to Beak Blast but not to the burn it causes"); diff --git a/test/battle/move_effect/beat_up.c b/test/battle/move_effect/beat_up.c new file mode 100644 index 0000000000..5e11360531 --- /dev/null +++ b/test/battle/move_effect/beat_up.c @@ -0,0 +1,31 @@ +#include "global.h" +#include "test/battle.h" + +// General +TO_DO_BATTLE_TEST("Beat Up hits the target for each non-fainted, non-statused member in the party"); +TO_DO_BATTLE_TEST("Beat Up's strikes have each an independent chance of a critical hit"); + +// B_BEAT_UP Gen2-4 +TO_DO_BATTLE_TEST("Beat Up lists each party member's name"); +TO_DO_BATTLE_TEST("Beat Up's damage is typeless"); +TO_DO_BATTLE_TEST("Beat Up's damage doesn't consider STAB"); +TO_DO_BATTLE_TEST("Beat Up's last strike-only can trigger King's Rock"); +TO_DO_BATTLE_TEST("Beat Up's base power is the same for each strike"); +TO_DO_BATTLE_TEST("Beat Up's damage is determined by each striking Pokémon's base attack and level and the target's defense"); +TO_DO_BATTLE_TEST("Beat Up ignores stat stage changes"); //eg. Swords Dance +TO_DO_BATTLE_TEST("Beat Up ignores Huge Power"); +TO_DO_BATTLE_TEST("Beat Up ignores Choice Band"); + +// B_BEAT_UP Gen5+ +TO_DO_BATTLE_TEST("Beat Up doesn't list party member's name"); +TO_DO_BATTLE_TEST("Beat Up's damage is Dark-typed"); +TO_DO_BATTLE_TEST("Beat Up's damage receives STAB"); +TO_DO_BATTLE_TEST("Beat Up's can trigger King's Rock on all strikes"); +TO_DO_BATTLE_TEST("Beat Up's base power is determined by each striking Pokémon"); +TO_DO_BATTLE_TEST("Beat Up's damage is determined by the user's attack and the target's defense"); +TO_DO_BATTLE_TEST("Beat Up's damage considers stat stage changes"); //eg. Swords Dance +TO_DO_BATTLE_TEST("Beat Up's damage considers Huge Power"); +TO_DO_BATTLE_TEST("Beat Up's damage considers Choice Band"); + +// Unconfirmed by Bulbapedia +// - Technician interacion diff --git a/test/battle/move_effect/belch.c b/test/battle/move_effect/belch.c index 34e026abe5..2a732e0e45 100644 --- a/test/battle/move_effect/belch.c +++ b/test/battle/move_effect/belch.c @@ -39,6 +39,7 @@ SINGLE_BATTLE_TEST("Belch cannot be used if the user has not eaten a berry") else { TURN { MOVE(player, MOVE_STUFF_CHEEKS); } TURN { MOVE(player, MOVE_BELCH); } + TURN { MOVE(player, MOVE_BELCH); } } } SCENE { if (item == ITEM_NONE) { @@ -47,6 +48,11 @@ SINGLE_BATTLE_TEST("Belch cannot be used if the user has not eaten a berry") else { ANIMATION(ANIM_TYPE_MOVE, MOVE_STUFF_CHEEKS, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_BELCH, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_BELCH, player); } } } + +TO_DO_BATTLE_TEST("Belch can still be used after switching out"); +TO_DO_BATTLE_TEST("Belch can still be used after fainting"); +TO_DO_BATTLE_TEST("Belch can still be used after restoring the consumed berry"); diff --git a/test/battle/move_effect/belly_drum.c b/test/battle/move_effect/belly_drum.c index bbaa910d27..82abaf30c4 100644 --- a/test/battle/move_effect/belly_drum.c +++ b/test/battle/move_effect/belly_drum.c @@ -104,3 +104,8 @@ SINGLE_BATTLE_TEST("Belly Drum's HP cost doesn't trigger effects that trigger on NOT MESSAGE("Wobbuffet's Air Balloon popped!"); } } + +TO_DO_BATTLE_TEST("Belly Drum maximizes the user's Attack stat, even when below 0"); +TO_DO_BATTLE_TEST("Belly Drum minimizes the user's Attack stat if it has Contrary"); // Should still say "maximized attack" +TO_DO_BATTLE_TEST("Belly Drum fails if the user's Attack is already at +6, even with Contrary"); +TO_DO_BATTLE_TEST("Belly Drum deducts HP if the user has contrary and is at -6"); diff --git a/test/battle/move_effect/bestow.c b/test/battle/move_effect/bestow.c new file mode 100644 index 0000000000..1161cdf8ae --- /dev/null +++ b/test/battle/move_effect/bestow.c @@ -0,0 +1,10 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Bestow transfers its held item to the target"); +TO_DO_BATTLE_TEST("Bestow fails if the user has no held item"); +TO_DO_BATTLE_TEST("Bestow fails if the target already has a held item"); +TO_DO_BATTLE_TEST("Bestow fails if the target is behind a Substitute"); +TO_DO_BATTLE_TEST("Bestow fails if the user is holding Mail"); +TO_DO_BATTLE_TEST("Bestow fails if the user's held item changes its form"); +TO_DO_BATTLE_TEST("Bestow fails if the user's held item is a Z-Crystal"); diff --git a/test/battle/move_effect/bide.c b/test/battle/move_effect/bide.c index 39efe281ec..41a6e01416 100644 --- a/test/battle/move_effect/bide.c +++ b/test/battle/move_effect/bide.c @@ -32,3 +32,6 @@ SINGLE_BATTLE_TEST("Bide deals twice the taken damage over two turns") EXPECT_EQ(bideDamage, 2 * (damage1 + damage2)); } } + +TO_DO_BATTLE_TEST("Bide hits the last Pokémon that attacked the user, even allies"); +TO_DO_BATTLE_TEST("Bide has +1 priority if called via a different move"); // Gen 5 onwards diff --git a/test/battle/move_effect/blizzard.c b/test/battle/move_effect/blizzard.c new file mode 100644 index 0000000000..1e566f98fc --- /dev/null +++ b/test/battle/move_effect/blizzard.c @@ -0,0 +1,4 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Blizzard ignores accuracy check durin Hail and Snow"); diff --git a/test/battle/move_effect/body_press.c b/test/battle/move_effect/body_press.c index a88a9bcaa5..ffbd477ea7 100644 --- a/test/battle/move_effect/body_press.c +++ b/test/battle/move_effect/body_press.c @@ -4,6 +4,7 @@ ASSUMPTIONS { ASSUME(gMovesInfo[MOVE_BODY_PRESS].effect == EFFECT_BODY_PRESS); + ASSUME(gMovesInfo[MOVE_BODY_PRESS].category == DAMAGE_CATEGORY_PHYSICAL); } SINGLE_BATTLE_TEST("Body Press uses physical defense stat of target", s16 damage) @@ -16,6 +17,7 @@ SINGLE_BATTLE_TEST("Body Press uses physical defense stat of target", s16 damage GIVEN { ASSUME(gMovesInfo[MOVE_DRILL_PECK].power == gMovesInfo[MOVE_BODY_PRESS].power); ASSUME(gMovesInfo[MOVE_CHARM].effect == EFFECT_ATTACK_DOWN_2); + ASSUME(gMovesInfo[MOVE_CHARM].effect == EFFECT_ATTACK_DOWN_2); PLAYER(SPECIES_MEW); OPPONENT(SPECIES_SHELLDER); } WHEN { @@ -27,3 +29,13 @@ SINGLE_BATTLE_TEST("Body Press uses physical defense stat of target", s16 damage EXPECT_MUL_EQ(results[0].damage, Q_4_12(2.0), results[1].damage); } } + +TO_DO_BATTLE_TEST("Body Press's damage depends on the user's base Defense instead of its base Attack"); +TO_DO_BATTLE_TEST("Body Press's damage depends on the user's Defense stat stages"); + +// Could be split into multiple tests or maybe to separate files based on the modifier? +TO_DO_BATTLE_TEST("Body Press's damage is influenced by all other Attack modifiers that are not stat stages"); +TO_DO_BATTLE_TEST("Body Press's damage is NOT influenced by any other Defense besides stat stages"); + +// Unconfirmed by Bulbapedia: +// - Defeatist interaction diff --git a/test/battle/move_effect/bolt_beak.c b/test/battle/move_effect/bolt_beak.c new file mode 100644 index 0000000000..fdd95da700 --- /dev/null +++ b/test/battle/move_effect/bolt_beak.c @@ -0,0 +1,5 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Bolt Beak's base power is doubled if it attacks before the target"); +TO_DO_BATTLE_TEST("Bolt Beak's base power is doubled the target switches out"); diff --git a/test/battle/move_effect/brick_break.c b/test/battle/move_effect/brick_break.c index 4fbc65a4d5..513369b5a1 100644 --- a/test/battle/move_effect/brick_break.c +++ b/test/battle/move_effect/brick_break.c @@ -137,24 +137,3 @@ DOUBLE_BATTLE_TEST("Brick Break can remove Light Screen, Reflect and Aurora Veil HP_BAR(playerLeft); } } - -SINGLE_BATTLE_TEST("Move Raging Bull changes it's type depending on the Tauros Form") -{ - u16 speciesPlayer; - u16 speciesOpponent; - - PARAMETRIZE { speciesPlayer = SPECIES_TAUROS_PALDEAN_COMBAT_BREED; speciesOpponent = SPECIES_CHARIZARD; } - PARAMETRIZE { speciesPlayer = SPECIES_TAUROS_PALDEAN_BLAZE_BREED; speciesOpponent = SPECIES_BLASTOISE; } - PARAMETRIZE { speciesPlayer = SPECIES_TAUROS_PALDEAN_AQUA_BREED; speciesOpponent = SPECIES_VENUSAUR; } - - GIVEN { - PLAYER(speciesPlayer); - OPPONENT(speciesOpponent); - } WHEN { - TURN { MOVE(player, MOVE_RAGING_BULL); } - } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_RAGING_BULL, player); - HP_BAR(opponent); - MESSAGE("It's not very effective…"); - } -} diff --git a/test/battle/move_effect/brine.c b/test/battle/move_effect/brine.c new file mode 100644 index 0000000000..9165257859 --- /dev/null +++ b/test/battle/move_effect/brine.c @@ -0,0 +1,4 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Brine's power doubles if the target is at 50% or below max HP"); diff --git a/test/battle/move_effect/bulk_up.c b/test/battle/move_effect/bulk_up.c new file mode 100644 index 0000000000..7f47d5d48e --- /dev/null +++ b/test/battle/move_effect/bulk_up.c @@ -0,0 +1,4 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Bulk Up increases the user's Attack and Defense"); diff --git a/test/battle/move_effect/earthquake.c b/test/battle/move_effect/earthquake.c new file mode 100644 index 0000000000..93955e15b4 --- /dev/null +++ b/test/battle/move_effect/earthquake.c @@ -0,0 +1,28 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Earthquake's and Bulldoze's damage is halved when Grassy Terrain is in effect", 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(gMovesInfo[MOVE_EARTHQUAKE].effect == EFFECT_EARTHQUAKE); + ASSUME(gMovesInfo[MOVE_BULLDOZE].effect == EFFECT_EARTHQUAKE); + 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/battle/move_effect/embargo.c b/test/battle/move_effect/embargo.c index 0d69496efc..5b78ed2c10 100644 --- a/test/battle/move_effect/embargo.c +++ b/test/battle/move_effect/embargo.c @@ -203,7 +203,7 @@ SINGLE_BATTLE_TEST("Embargo doesn't stop an item flung at an affected target fro } } -SINGLE_BATTLE_TEST("Embargo is passed via Baton Pass") +SINGLE_BATTLE_TEST("Baton Pass passes Embargo's effect") { GIVEN { PLAYER(SPECIES_WOBBUFFET); diff --git a/test/battle/move_effect/gastro_acid.c b/test/battle/move_effect/gastro_acid.c index 2f5b04dab9..e4f1aa5354 100644 --- a/test/battle/move_effect/gastro_acid.c +++ b/test/battle/move_effect/gastro_acid.c @@ -39,3 +39,6 @@ SINGLE_BATTLE_TEST("Gastro Acid fails if target has a banned ability") MESSAGE("But it failed!"); } } + +TO_DO_BATTLE_TEST("Baton Pass passes Gastro Acid's effect"); +TO_DO_BATTLE_TEST("Baton Pass removes Gastro Acid if its ability cannot be surpressed"); diff --git a/test/battle/move_effect/hidden_power.c b/test/battle/move_effect/hidden_power.c new file mode 100644 index 0000000000..8ec63c21a7 --- /dev/null +++ b/test/battle/move_effect/hidden_power.c @@ -0,0 +1,106 @@ +#include "global.h" +#include "test/battle.h" + +// IV combinations sourced from https://www.smogon.com/forums/threads/hidden-power-iv-combinations.78083/ +SINGLE_BATTLE_TEST("Hidden Power's type is determined by IVs") +{ + u32 type, j, foeType, foeSpecies; + u32 hp, atk, def, spAtk, spDef, speed; + bool32 hidden; + + PARAMETRIZE { type = TYPE_NONE; hidden = FALSE; } + PARAMETRIZE { type = TYPE_NORMAL; hidden = FALSE; } + PARAMETRIZE { type = TYPE_FIGHTING; hidden = TRUE; foeType = TYPE_PSYCHIC; foeSpecies = SPECIES_WOBBUFFET; hp = 30; atk = 2; def = 31; spAtk = 30; spDef = 30; speed = 30; } + PARAMETRIZE { type = TYPE_FIGHTING; hidden = TRUE; foeType = TYPE_PSYCHIC; foeSpecies = SPECIES_WOBBUFFET; hp = 31; atk = 15; def = 30; spAtk = 30; spDef = 30; speed = 30; } + PARAMETRIZE { type = TYPE_FIGHTING; hidden = TRUE; foeType = TYPE_PSYCHIC; foeSpecies = SPECIES_WOBBUFFET; hp = 30; atk = 22; def = 31; spAtk = 30; spDef = 30; speed = 30; } + PARAMETRIZE { type = TYPE_FIGHTING; hidden = TRUE; foeType = TYPE_PSYCHIC; foeSpecies = SPECIES_WOBBUFFET; hp = 31; atk = 31; def = 30; spAtk = 30; spDef = 30; speed = 30; } + PARAMETRIZE { type = TYPE_FLYING; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_REGISTEEL; hp = 31; atk = 2; def = 31; spAtk = 30; spDef = 30; speed = 30; } + PARAMETRIZE { type = TYPE_FLYING; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_REGISTEEL; hp = 31; atk = 15; def = 31; spAtk = 30; spDef = 30; speed = 30; } + PARAMETRIZE { type = TYPE_FLYING; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_REGISTEEL; hp = 31; atk = 22; def = 31; spAtk = 30; spDef = 30; speed = 30; } + PARAMETRIZE { type = TYPE_FLYING; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_REGISTEEL; hp = 31; atk = 31; def = 31; spAtk = 30; spDef = 30; speed = 30; } + PARAMETRIZE { type = TYPE_POISON; hidden = TRUE; foeType = TYPE_POISON; foeSpecies = SPECIES_ARBOK; hp = 30; atk = 2; def = 31; spAtk = 30; spDef = 30; speed = 31; } + PARAMETRIZE { type = TYPE_POISON; hidden = TRUE; foeType = TYPE_POISON; foeSpecies = SPECIES_ARBOK; hp = 31; atk = 15; def = 30; spAtk = 30; spDef = 30; speed = 31; } + PARAMETRIZE { type = TYPE_POISON; hidden = TRUE; foeType = TYPE_POISON; foeSpecies = SPECIES_ARBOK; hp = 30; atk = 22; def = 31; spAtk = 30; spDef = 30; speed = 31; } + PARAMETRIZE { type = TYPE_POISON; hidden = TRUE; foeType = TYPE_POISON; foeSpecies = SPECIES_ARBOK; hp = 31; atk = 31; def = 30; spAtk = 30; spDef = 30; speed = 31; } + PARAMETRIZE { type = TYPE_GROUND; hidden = TRUE; foeType = TYPE_GRASS; foeSpecies = SPECIES_TANGELA; hp = 31; atk = 2; def = 31; spAtk = 30; spDef = 30; speed = 31; } + PARAMETRIZE { type = TYPE_GROUND; hidden = TRUE; foeType = TYPE_GRASS; foeSpecies = SPECIES_TANGELA; hp = 31; atk = 15; def = 31; spAtk = 30; spDef = 30; speed = 31; } + PARAMETRIZE { type = TYPE_GROUND; hidden = TRUE; foeType = TYPE_GRASS; foeSpecies = SPECIES_TANGELA; hp = 31; atk = 22; def = 31; spAtk = 30; spDef = 30; speed = 31; } + PARAMETRIZE { type = TYPE_GROUND; hidden = TRUE; foeType = TYPE_GRASS; foeSpecies = SPECIES_TANGELA; hp = 31; atk = 31; def = 31; spAtk = 30; spDef = 30; speed = 31; } + PARAMETRIZE { type = TYPE_ROCK; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 31; atk = 2; def = 30; spAtk = 31; spDef = 30; speed = 30; } + PARAMETRIZE { type = TYPE_ROCK; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 31; atk = 15; def = 30; spAtk = 31; spDef = 30; speed = 30; } + PARAMETRIZE { type = TYPE_ROCK; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 31; atk = 22; def = 30; spAtk = 31; spDef = 30; speed = 30; } + PARAMETRIZE { type = TYPE_ROCK; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 31; atk = 31; def = 30; spAtk = 31; spDef = 30; speed = 30; } + PARAMETRIZE { type = TYPE_BUG; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 31; atk = 2; def = 31; spAtk = 31; spDef = 30; speed = 30; } + PARAMETRIZE { type = TYPE_BUG; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 31; atk = 15; def = 31; spAtk = 31; spDef = 30; speed = 30; } + PARAMETRIZE { type = TYPE_BUG; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 31; atk = 22; def = 31; spAtk = 31; spDef = 30; speed = 30; } + PARAMETRIZE { type = TYPE_BUG; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 31; atk = 31; def = 31; spAtk = 31; spDef = 30; speed = 30; } + PARAMETRIZE { type = TYPE_GHOST; hidden = TRUE; foeType = TYPE_DARK; foeSpecies = SPECIES_UMBREON; hp = 31; atk = 2; def = 31; spAtk = 31; spDef = 30; speed = 31; } + PARAMETRIZE { type = TYPE_GHOST; hidden = TRUE; foeType = TYPE_DARK; foeSpecies = SPECIES_UMBREON; hp = 31; atk = 15; def = 30; spAtk = 31; spDef = 30; speed = 31; } + PARAMETRIZE { type = TYPE_GHOST; hidden = TRUE; foeType = TYPE_DARK; foeSpecies = SPECIES_UMBREON; hp = 31; atk = 22; def = 31; spAtk = 31; spDef = 30; speed = 31; } + PARAMETRIZE { type = TYPE_GHOST; hidden = TRUE; foeType = TYPE_DARK; foeSpecies = SPECIES_UMBREON; hp = 31; atk = 31; def = 30; spAtk = 31; spDef = 30; speed = 31; } + PARAMETRIZE { type = TYPE_STEEL; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 31; atk = 2; def = 30; spAtk = 30; spDef = 31; speed = 30; } + PARAMETRIZE { type = TYPE_STEEL; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 31; atk = 15; def = 31; spAtk = 31; spDef = 30; speed = 31; } + PARAMETRIZE { type = TYPE_STEEL; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 31; atk = 22; def = 30; spAtk = 30; spDef = 31; speed = 30; } + PARAMETRIZE { type = TYPE_STEEL; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 31; atk = 31; def = 31; spAtk = 31; spDef = 30; speed = 31; } + PARAMETRIZE { type = TYPE_FIRE; hidden = TRUE; foeType = TYPE_WATER; foeSpecies = SPECIES_BLASTOISE; hp = 31; atk = 2; def = 31; spAtk = 30; spDef = 31; speed = 30; } + PARAMETRIZE { type = TYPE_FIRE; hidden = TRUE; foeType = TYPE_WATER; foeSpecies = SPECIES_BLASTOISE; hp = 31; atk = 15; def = 30; spAtk = 30; spDef = 31; speed = 30; } + PARAMETRIZE { type = TYPE_FIRE; hidden = TRUE; foeType = TYPE_WATER; foeSpecies = SPECIES_BLASTOISE; hp = 31; atk = 22; def = 31; spAtk = 30; spDef = 31; speed = 30; } + PARAMETRIZE { type = TYPE_FIRE; hidden = TRUE; foeType = TYPE_WATER; foeSpecies = SPECIES_BLASTOISE; hp = 31; atk = 31; def = 30; spAtk = 30; spDef = 31; speed = 30; } + PARAMETRIZE { type = TYPE_WATER; hidden = TRUE; foeType = TYPE_WATER; foeSpecies = SPECIES_BLASTOISE; hp = 31; atk = 2; def = 30; spAtk = 30; spDef = 31; speed = 31; } + PARAMETRIZE { type = TYPE_WATER; hidden = TRUE; foeType = TYPE_WATER; foeSpecies = SPECIES_BLASTOISE; hp = 31; atk = 15; def = 31; spAtk = 30; spDef = 31; speed = 30; } + PARAMETRIZE { type = TYPE_WATER; hidden = TRUE; foeType = TYPE_WATER; foeSpecies = SPECIES_BLASTOISE; hp = 31; atk = 22; def = 30; spAtk = 30; spDef = 31; speed = 31; } + PARAMETRIZE { type = TYPE_WATER; hidden = TRUE; foeType = TYPE_WATER; foeSpecies = SPECIES_BLASTOISE; hp = 31; atk = 31; def = 31; spAtk = 30; spDef = 31; speed = 30; } + PARAMETRIZE { type = TYPE_GRASS; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 30; atk = 2; def = 31; spAtk = 30; spDef = 31; speed = 31; } + PARAMETRIZE { type = TYPE_GRASS; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 30; atk = 15; def = 31; spAtk = 30; spDef = 31; speed = 31; } + PARAMETRIZE { type = TYPE_GRASS; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 30; atk = 22; def = 31; spAtk = 30; spDef = 31; speed = 31; } + PARAMETRIZE { type = TYPE_GRASS; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 30; atk = 31; def = 31; spAtk = 30; spDef = 31; speed = 31; } + PARAMETRIZE { type = TYPE_ELECTRIC; hidden = TRUE; foeType = TYPE_GRASS; foeSpecies = SPECIES_TANGELA; hp = 31; atk = 2; def = 30; spAtk = 31; spDef = 31; speed = 30; } + PARAMETRIZE { type = TYPE_ELECTRIC; hidden = TRUE; foeType = TYPE_GRASS; foeSpecies = SPECIES_TANGELA; hp = 30; atk = 15; def = 30; spAtk = 31; spDef = 31; speed = 30; } + PARAMETRIZE { type = TYPE_ELECTRIC; hidden = TRUE; foeType = TYPE_GRASS; foeSpecies = SPECIES_TANGELA; hp = 31; atk = 22; def = 30; spAtk = 31; spDef = 31; speed = 30; } + PARAMETRIZE { type = TYPE_ELECTRIC; hidden = TRUE; foeType = TYPE_GRASS; foeSpecies = SPECIES_TANGELA; hp = 30; atk = 31; def = 30; spAtk = 31; spDef = 31; speed = 30; } + PARAMETRIZE { type = TYPE_PSYCHIC; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 31; atk = 2; def = 31; spAtk = 31; spDef = 31; speed = 30; } + PARAMETRIZE { type = TYPE_PSYCHIC; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 30; atk = 15; def = 31; spAtk = 31; spDef = 31; speed = 30; } + PARAMETRIZE { type = TYPE_PSYCHIC; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 31; atk = 22; def = 31; spAtk = 31; spDef = 31; speed = 30; } + PARAMETRIZE { type = TYPE_PSYCHIC; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 30; atk = 31; def = 31; spAtk = 31; spDef = 31; speed = 30; } + PARAMETRIZE { type = TYPE_ICE; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 30; atk = 2; def = 30; spAtk = 31; spDef = 31; speed = 31; } + PARAMETRIZE { type = TYPE_ICE; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 30; atk = 15; def = 30; spAtk = 31; spDef = 31; speed = 31; } + PARAMETRIZE { type = TYPE_ICE; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 30; atk = 22; def = 30; spAtk = 31; spDef = 31; speed = 31; } + PARAMETRIZE { type = TYPE_ICE; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 30; atk = 31; def = 30; spAtk = 31; spDef = 31; speed = 31; } + PARAMETRIZE { type = TYPE_MYSTERY; hidden = FALSE; } + PARAMETRIZE { type = TYPE_DRAGON; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 30; atk = 2; def = 31; spAtk = 31; spDef = 31; speed = 31; } + PARAMETRIZE { type = TYPE_DRAGON; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 30; atk = 15; def = 31; spAtk = 31; spDef = 31; speed = 31; } + PARAMETRIZE { type = TYPE_DRAGON; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 30; atk = 22; def = 31; spAtk = 31; spDef = 31; speed = 31; } + PARAMETRIZE { type = TYPE_DRAGON; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 30; atk = 31; def = 31; spAtk = 31; spDef = 31; speed = 31; } + PARAMETRIZE { type = TYPE_DARK; hidden = TRUE; foeType = TYPE_DARK; foeSpecies = SPECIES_UMBREON; hp = 31; atk = 3; def = 31; spAtk = 31; spDef = 31; speed = 31; } + PARAMETRIZE { type = TYPE_DARK; hidden = TRUE; foeType = TYPE_DARK; foeSpecies = SPECIES_UMBREON; hp = 31; atk = 15; def = 31; spAtk = 31; spDef = 31; speed = 31; } + PARAMETRIZE { type = TYPE_DARK; hidden = TRUE; foeType = TYPE_DARK; foeSpecies = SPECIES_UMBREON; hp = 31; atk = 23; def = 31; spAtk = 31; spDef = 31; speed = 31; } + PARAMETRIZE { type = TYPE_DARK; hidden = TRUE; foeType = TYPE_DARK; foeSpecies = SPECIES_UMBREON; hp = 31; atk = 31; def = 31; spAtk = 31; spDef = 31; speed = 31; } + + // Any type after Dark shouldn't be part of Hidden Power officially. + for (j = TYPE_DARK + 1; j < NUMBER_OF_MON_TYPES; j++) { + PARAMETRIZE { type = j; hidden = FALSE; } + } + + GIVEN { + if (hidden) { + ASSUME(gTypeEffectivenessTable[type][foeType] == UQ_4_12(0.5)); // Foe's Type resists + ASSUME(gSpeciesInfo[foeSpecies].types[0] == gSpeciesInfo[foeSpecies].types[1]); // Foe's pure type + ASSUME(gSpeciesInfo[foeSpecies].types[0] == foeType); // Foe is the resisted type + PLAYER(SPECIES_DUNSPARCE) { HPIV(hp); AttackIV(atk); DefenseIV(def); SpAttackIV(spAtk); SpDefenseIV(spDef); SpeedIV(speed); } + } else { + PLAYER(SPECIES_DUNSPARCE); + } + OPPONENT(foeSpecies); + } WHEN { + TURN { MOVE(player, MOVE_HIDDEN_POWER); } + } SCENE { + // Only test valid Hidden Power types + if (hidden) { + ANIMATION(ANIM_TYPE_MOVE, MOVE_HIDDEN_POWER, player); + HP_BAR(opponent); + MESSAGE("It's not very effective…"); + } + } +} + +TO_DO_BATTLE_TEST("Hidden Power's power is determined by IVs before Gen6"); diff --git a/test/battle/move_effect/leech_seed.c b/test/battle/move_effect/leech_seed.c index 6faf4e8031..1e71437f80 100644 --- a/test/battle/move_effect/leech_seed.c +++ b/test/battle/move_effect/leech_seed.c @@ -24,3 +24,4 @@ TO_DO_BATTLE_TEST("Leech Seed doesn't affect already seeded targets") TO_DO_BATTLE_TEST("Leech Seeded targets lose 1/8 of its max HP every turn and give it to the user") TO_DO_BATTLE_TEST("Leech Seed's effect is paused until a new battler replaces the original user's position") // Faint, can't be replaced, then revived. TO_DO_BATTLE_TEST("Leech Seed's effect pause still prevents it from being seeded again") +TO_DO_BATTLE_TEST("Baton Pass passes Leech Seed's effect"); diff --git a/test/battle/move_effect/pursuit.c b/test/battle/move_effect/pursuit.c index 4cc1662413..0b517d4228 100644 --- a/test/battle/move_effect/pursuit.c +++ b/test/battle/move_effect/pursuit.c @@ -24,3 +24,5 @@ SINGLE_BATTLE_TEST("Pursuited mon correctly switches out after it got hit and ac MESSAGE("Go! Wobbuffet!"); } } + +TO_DO_BATTLE_TEST("Baton Pass doesn't cause Pursuit to increase its power or priority"); diff --git a/test/battle/move_effect/raging_bull.c b/test/battle/move_effect/raging_bull.c new file mode 100644 index 0000000000..23b138ca41 --- /dev/null +++ b/test/battle/move_effect/raging_bull.c @@ -0,0 +1,160 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gMovesInfo[MOVE_RAGING_BULL].effect == EFFECT_RAGING_BULL); + ASSUME(gMovesInfo[MOVE_SNOWSCAPE].effect == EFFECT_SNOWSCAPE); + ASSUME(gMovesInfo[MOVE_LIGHT_SCREEN].effect == EFFECT_LIGHT_SCREEN); + ASSUME(gMovesInfo[MOVE_REFLECT].effect == EFFECT_REFLECT); + ASSUME(gMovesInfo[MOVE_AURORA_VEIL].effect == EFFECT_AURORA_VEIL); +} + +SINGLE_BATTLE_TEST("Raging Bull removes Light Screen, Reflect and Aurora Veil from the target's side of the field") +{ + u16 move; + + PARAMETRIZE { move = MOVE_LIGHT_SCREEN; } + PARAMETRIZE { move = MOVE_REFLECT; } + PARAMETRIZE { move = MOVE_AURORA_VEIL; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_SNOWSCAPE); } + TURN { MOVE(opponent, move); MOVE(player, MOVE_RAGING_BULL); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SNOWSCAPE, player); + ANIMATION(ANIM_TYPE_MOVE, move, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_RAGING_BULL, player); + MESSAGE("The wall shattered!"); + HP_BAR(opponent); + } +} + +SINGLE_BATTLE_TEST("Raging Bull doesn't remove Light Screen, Reflect and Aurora Veil if the target is immune") +{ + u16 move; + + PARAMETRIZE { move = MOVE_LIGHT_SCREEN; } + PARAMETRIZE { move = MOVE_REFLECT; } + PARAMETRIZE { move = MOVE_AURORA_VEIL; } + + KNOWN_FAILING; + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_GASTLY); + } WHEN { + TURN { MOVE(player, MOVE_SNOWSCAPE); } + TURN { MOVE(opponent, move); MOVE(player, MOVE_RAGING_BULL); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SNOWSCAPE, player); + ANIMATION(ANIM_TYPE_MOVE, move, opponent); + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_RAGING_BULL, player); + MESSAGE("The wall shattered!"); + HP_BAR(opponent); + } + } +} + +SINGLE_BATTLE_TEST("Raging Bull doesn't remove Light Screen, Reflect and Aurora Veil if the target Protected") +{ + u16 move; + + PARAMETRIZE { move = MOVE_LIGHT_SCREEN; } + PARAMETRIZE { move = MOVE_REFLECT; } + PARAMETRIZE { move = MOVE_AURORA_VEIL; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_SNOWSCAPE); MOVE(opponent, move); } + TURN { MOVE(player, MOVE_RAGING_BULL); MOVE(opponent, MOVE_PROTECT); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SNOWSCAPE, player); + ANIMATION(ANIM_TYPE_MOVE, move, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_PROTECT, opponent); + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_RAGING_BULL, player); + MESSAGE("The wall shattered!"); + HP_BAR(opponent); + } + } +} + +SINGLE_BATTLE_TEST("Raging Bull doesn't remove Light Screen, Reflect and Aurora Veil if it misses") +{ + u16 move; + + PARAMETRIZE { move = MOVE_LIGHT_SCREEN; } + PARAMETRIZE { move = MOVE_REFLECT; } + PARAMETRIZE { move = MOVE_AURORA_VEIL; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_BRIGHT_POWDER); } + } WHEN { + TURN { MOVE(player, MOVE_SNOWSCAPE); MOVE(opponent, move); } + TURN { MOVE(player, MOVE_RAGING_BULL, hit: FALSE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SNOWSCAPE, player); + ANIMATION(ANIM_TYPE_MOVE, move, opponent); + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_RAGING_BULL, player); + MESSAGE("The wall shattered!"); + HP_BAR(opponent); + } + } +} + +DOUBLE_BATTLE_TEST("Raging Bull can remove Light Screen, Reflect and Aurora Veil on users side") +{ + u16 move; + + PARAMETRIZE { move = MOVE_LIGHT_SCREEN; } + PARAMETRIZE { move = MOVE_REFLECT; } + PARAMETRIZE { move = MOVE_AURORA_VEIL; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { + MOVE(opponentLeft, MOVE_SNOWSCAPE); + MOVE(playerLeft, move); + MOVE(playerRight, MOVE_RAGING_BULL, target: playerLeft); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SNOWSCAPE, opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, move, playerLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_RAGING_BULL, playerRight); + MESSAGE("The wall shattered!"); + HP_BAR(playerLeft); + } +} + +SINGLE_BATTLE_TEST("Move Raging Bull changes it's type depending on the Tauros Form") +{ + u16 speciesPlayer; + u16 speciesOpponent; + + PARAMETRIZE { speciesPlayer = SPECIES_TAUROS_PALDEAN_COMBAT_BREED; speciesOpponent = SPECIES_CHARIZARD; } + PARAMETRIZE { speciesPlayer = SPECIES_TAUROS_PALDEAN_BLAZE_BREED; speciesOpponent = SPECIES_BLASTOISE; } + PARAMETRIZE { speciesPlayer = SPECIES_TAUROS_PALDEAN_AQUA_BREED; speciesOpponent = SPECIES_VENUSAUR; } + + GIVEN { + PLAYER(speciesPlayer); + OPPONENT(speciesOpponent); + } WHEN { + TURN { MOVE(player, MOVE_RAGING_BULL); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_RAGING_BULL, player); + HP_BAR(opponent); + MESSAGE("It's not very effective…"); + } +} diff --git a/test/battle/move_effect/substitute.c b/test/battle/move_effect/substitute.c index a2e4c686ec..5a3c973ebb 100644 --- a/test/battle/move_effect/substitute.c +++ b/test/battle/move_effect/substitute.c @@ -68,3 +68,5 @@ SINGLE_BATTLE_TEST("Substitute's HP cost doesn't trigger effects that trigger on NOT MESSAGE("Wobbuffet's Air Balloon popped!"); } } + +TO_DO_BATTLE_TEST("Baton Pass passes Substitutes"); diff --git a/test/battle/move_effect/telekinesis.c b/test/battle/move_effect/telekinesis.c index 6e8ef409f0..4210b1865b 100644 --- a/test/battle/move_effect/telekinesis.c +++ b/test/battle/move_effect/telekinesis.c @@ -68,3 +68,7 @@ SINGLE_BATTLE_TEST("Telekinesis makes the target immune to Ground-type attacks") MESSAGE("It doesn't affect Foe Wynaut…"); } } + +TO_DO_BATTLE_TEST("Baton Pass passes Telekinesis' effect"); +//Bulbapedia doesn't confirm what happens with Diglett, Dugtrio, Sandygast and Palossand, so it needs to be tested in-game. +TO_DO_BATTLE_TEST("Baton Pass removes Telekinesis' effect disappears if the switching-in mon is Mega Gengar"); diff --git a/test/battle/move_effect/tera_blast.c b/test/battle/move_effect/tera_blast.c index 4592cf32a5..ca1413d2e8 100644 --- a/test/battle/move_effect/tera_blast.c +++ b/test/battle/move_effect/tera_blast.c @@ -21,6 +21,57 @@ SINGLE_BATTLE_TEST("Tera Blast changes from Normal-type to the user's Tera Type" } } +SINGLE_BATTLE_TEST("Tera Blast has correct effectiveness for every Tera Type") +{ + u32 species; + u32 type; + + PARAMETRIZE { species = SPECIES_CHIKORITA; type = TYPE_FLYING; } + PARAMETRIZE { species = SPECIES_CHIKORITA; type = TYPE_POISON; } + PARAMETRIZE { species = SPECIES_CHIKORITA; type = TYPE_FIRE; } + PARAMETRIZE { species = SPECIES_CHIKORITA; type = TYPE_BUG; } + PARAMETRIZE { species = SPECIES_CHIKORITA; type = TYPE_ICE; } + PARAMETRIZE { species = SPECIES_CYNDAQUIL; type = TYPE_GROUND; } + PARAMETRIZE { species = SPECIES_CYNDAQUIL; type = TYPE_ROCK; } + PARAMETRIZE { species = SPECIES_CYNDAQUIL; type = TYPE_WATER; } + PARAMETRIZE { species = SPECIES_GASTLY; type = TYPE_NORMAL; } + PARAMETRIZE { species = SPECIES_GASTLY; type = TYPE_GHOST; } + PARAMETRIZE { species = SPECIES_GASTLY; type = TYPE_PSYCHIC; } + PARAMETRIZE { species = SPECIES_TOTODILE; type = TYPE_GRASS; } + PARAMETRIZE { species = SPECIES_TOTODILE; type = TYPE_ELECTRIC; } + PARAMETRIZE { species = SPECIES_DRATINI; type = TYPE_DRAGON; } + PARAMETRIZE { species = SPECIES_DRATINI; type = TYPE_FAIRY; } + PARAMETRIZE { species = SPECIES_SNEASEL; type = TYPE_FIGHTING; } + PARAMETRIZE { species = SPECIES_SNEASEL; type = TYPE_STEEL; } + PARAMETRIZE { species = SPECIES_ABRA; type = TYPE_DARK; } + + GIVEN { + ASSUME(gSpeciesInfo[SPECIES_CHIKORITA].types[0] == TYPE_GRASS); + ASSUME(gSpeciesInfo[SPECIES_CHIKORITA].types[1] == TYPE_GRASS); + ASSUME(gSpeciesInfo[SPECIES_CYNDAQUIL].types[0] == TYPE_FIRE); + ASSUME(gSpeciesInfo[SPECIES_CYNDAQUIL].types[1] == TYPE_FIRE); + ASSUME(gSpeciesInfo[SPECIES_GASTLY].types[0] == TYPE_GHOST); + ASSUME(gSpeciesInfo[SPECIES_GASTLY].types[1] == TYPE_POISON); + ASSUME(gSpeciesInfo[SPECIES_TOTODILE].types[0] == TYPE_WATER); + ASSUME(gSpeciesInfo[SPECIES_TOTODILE].types[1] == TYPE_WATER); + ASSUME(gSpeciesInfo[SPECIES_DRATINI].types[0] == TYPE_DRAGON); + ASSUME(gSpeciesInfo[SPECIES_DRATINI].types[1] == TYPE_DRAGON); + ASSUME(gSpeciesInfo[SPECIES_SNEASEL].types[0] == TYPE_DARK); + ASSUME(gSpeciesInfo[SPECIES_SNEASEL].types[1] == TYPE_ICE); + ASSUME(gSpeciesInfo[SPECIES_ABRA].types[0] == TYPE_PSYCHIC); + ASSUME(gSpeciesInfo[SPECIES_ABRA].types[1] == TYPE_PSYCHIC); + PLAYER(SPECIES_WOBBUFFET) { TeraType(type); } + OPPONENT(species); + } WHEN { + TURN { MOVE(player, MOVE_TERA_BLAST, tera: TRUE); } + } SCENE { + if (species == SPECIES_GASTLY && type == TYPE_NORMAL) + MESSAGE("It doesn't affect Foe Gastly…"); + else + MESSAGE("It's super effective!"); + } +} + SINGLE_BATTLE_TEST("Tera Blast becomes a physical move if the user is Terastallized and has a higher Attack stat", s16 damage) { bool32 tera; diff --git a/test/battle/terrain/grassy.c b/test/battle/terrain/grassy.c index af0776d3df..678352dc5e 100644 --- a/test/battle/terrain/grassy.c +++ b/test/battle/terrain/grassy.c @@ -57,33 +57,6 @@ SINGLE_BATTLE_TEST("Grassy Terrain increases power of Grass-type moves by 30/50 } } -// 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(gMovesInfo[MOVE_EARTHQUAKE].effect == EFFECT_EARTHQUAKE); - ASSUME(gMovesInfo[MOVE_BULLDOZE].effect == EFFECT_EARTHQUAKE); - 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); - } -} - SINGLE_BATTLE_TEST("Grassy Terrain lasts for 5 turns") { GIVEN { diff --git a/test/pokemon.c b/test/pokemon.c index 2e35896027..fa96b47f26 100644 --- a/test/pokemon.c +++ b/test/pokemon.c @@ -33,11 +33,11 @@ TEST("Terastallization type defaults to primary or secondary type") || teraType == gSpeciesInfo[SPECIES_PIDGEY].types[1]); } -TEST("Terastallization type can be set to any type") +TEST("Terastallization type can be set to any type except TYPE_NONE") { u32 i, teraType; struct Pokemon mon; - for (i = 0; i < NUMBER_OF_MON_TYPES; i++) + for (i = 1; i < NUMBER_OF_MON_TYPES; i++) { PARAMETRIZE { teraType = i; } } @@ -46,6 +46,23 @@ TEST("Terastallization type can be set to any type") EXPECT_EQ(teraType, GetMonData(&mon, MON_DATA_TERA_TYPE)); } +TEST("Terastallization type is reset to the default types when setting Tera Type back to TYPE_NONE") +{ + u32 i, teraType, typeNone; + struct Pokemon mon; + for (i = 1; i < NUMBER_OF_MON_TYPES; i++) + { + PARAMETRIZE { teraType = i; typeNone = TYPE_NONE; } + } + CreateMon(&mon, SPECIES_PIDGEY, 100, 0, FALSE, 0, OT_ID_PRESET, 0); + SetMonData(&mon, MON_DATA_TERA_TYPE, &teraType); + EXPECT_EQ(teraType, GetMonData(&mon, MON_DATA_TERA_TYPE)); + SetMonData(&mon, MON_DATA_TERA_TYPE, &typeNone); + typeNone = GetMonData(&mon, MON_DATA_TERA_TYPE); + EXPECT(typeNone == gSpeciesInfo[SPECIES_PIDGEY].types[0] + || typeNone == gSpeciesInfo[SPECIES_PIDGEY].types[1]); +} + TEST("Shininess independent from PID and OTID") { u32 pid, otId, data; diff --git a/test/test_runner.c b/test/test_runner.c index f5b7224523..27fa623836 100644 --- a/test/test_runner.c +++ b/test/test_runner.c @@ -124,6 +124,8 @@ top: gIntrTable[7] = Intr_Timer2; + gSaveBlock2Ptr->optionsBattleStyle = OPTIONS_BATTLE_STYLE_SET; + // The current test restarted the ROM (e.g. by jumping to NULL). if (sCurrentTest.address != 0) { @@ -178,7 +180,7 @@ top: break; } - MgbaPrintf_(":N%s", gTestRunnerState.test->name); + Test_MgbaPrintf(":N%s", gTestRunnerState.test->name); gTestRunnerState.result = TEST_RESULT_PASS; gTestRunnerState.expectedResult = TEST_RESULT_PASS; gTestRunnerState.expectLeaks = FALSE; @@ -247,7 +249,7 @@ top: || !(EWRAM_START <= (uintptr_t)block->next && (uintptr_t)block->next < EWRAM_END) || (block->next <= block && block->next != head)) { - MgbaPrintf_("gHeap corrupted block at 0x%p", block); + Test_MgbaPrintf("gHeap corrupted block at 0x%p", block); gTestRunnerState.result = TEST_RESULT_ERROR; break; } @@ -256,9 +258,9 @@ top: { const char *location = MemBlockLocation(block); if (location) - MgbaPrintf_("%s: %d bytes not freed", location, block->size); + Test_MgbaPrintf("%s: %d bytes not freed", location, block->size); else - MgbaPrintf_(": %d bytes not freed", block->size); + Test_MgbaPrintf(": %d bytes not freed", block->size); gTestRunnerState.result = TEST_RESULT_FAIL; } block = block->next; @@ -281,7 +283,7 @@ top: if (gTestRunnerState.result == gTestRunnerState.expectedResult) { color = "\e[32m"; - MgbaPrintf_(":N%s", gTestRunnerState.test->name); + Test_MgbaPrintf(":N%s", gTestRunnerState.test->name); } else if (gTestRunnerState.result != TEST_RESULT_ASSUMPTION_FAIL || gTestRunnerSkipIsFail) { @@ -340,18 +342,18 @@ top: if (gTestRunnerState.result == TEST_RESULT_PASS) { if (gTestRunnerState.result != gTestRunnerState.expectedResult) - MgbaPrintf_(":U%s%s\e[0m", color, result); + Test_MgbaPrintf(":U%s%s\e[0m", color, result); else - MgbaPrintf_(":P%s%s\e[0m", color, result); + Test_MgbaPrintf(":P%s%s\e[0m", color, result); } else if (gTestRunnerState.result == TEST_RESULT_ASSUMPTION_FAIL) - MgbaPrintf_(":A%s%s\e[0m", color, result); + Test_MgbaPrintf(":A%s%s\e[0m", color, result); else if (gTestRunnerState.result == TEST_RESULT_TODO) - MgbaPrintf_(":T%s%s\e[0m", color, result); + Test_MgbaPrintf(":T%s%s\e[0m", color, result); else if (gTestRunnerState.expectedResult == gTestRunnerState.result) - MgbaPrintf_(":K%s%s\e[0m", color, result); + Test_MgbaPrintf(":K%s%s\e[0m", color, result); else - MgbaPrintf_(":F%s%s\e[0m", color, result); + Test_MgbaPrintf(":F%s%s\e[0m", color, result); } break; @@ -393,7 +395,7 @@ static void FunctionTest_Run(void *data) do { if (gFunctionTestRunnerState->parameters) - MgbaPrintf_(":N%s %d/%d", gTestRunnerState.test->name, gFunctionTestRunnerState->runParameter + 1, gFunctionTestRunnerState->parameters); + Test_MgbaPrintf(":N%s %d/%d", gTestRunnerState.test->name, gFunctionTestRunnerState->runParameter + 1, gFunctionTestRunnerState->parameters); gFunctionTestRunnerState->parameters = 0; function(); } while (++gFunctionTestRunnerState->runParameter < gFunctionTestRunnerState->parameters); @@ -515,7 +517,7 @@ static void MgbaExit_(u8 exitCode) asm("swi 0x3" :: "r" (_exitCode)); } -s32 MgbaPrintf_(const char *fmt, ...) +s32 Test_MgbaPrintf(const char *fmt, ...) { va_list va; va_start(va, fmt); diff --git a/test/test_runner_battle.c b/test/test_runner_battle.c index afc996a326..b2cc4725ce 100644 --- a/test/test_runner_battle.c +++ b/test/test_runner_battle.c @@ -208,20 +208,20 @@ 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); + Test_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); + Test_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); + Test_MgbaPrintf(":N%s (%d/?)", gTestRunnerState.test->name, STATE->runTrial + 1); else - MgbaPrintf_(":N%s (%d/%d)", gTestRunnerState.test->name, STATE->runTrial + 1, STATE->trials); + Test_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); + Test_MgbaPrintf(":N%s %d/%d", gTestRunnerState.test->name, STATE->runParameter + 1, STATE->parameters); } } @@ -956,7 +956,7 @@ static void PrintAiMoveLog(u32 battlerId, u32 moveSlot, u32 moveId, s32 totalSco if (DATA.aiLogPrintedForMove[battlerId] & gBitTable[moveSlot]) return; DATA.aiLogPrintedForMove[battlerId] |= gBitTable[moveSlot]; - MgbaPrintf_("Score Log for move %S:\n", GetMoveName(moveId)); + Test_MgbaPrintf("Score Log for move %S:\n", GetMoveName(moveId)); for (i = 0; i < MAX_AI_LOG_LINES; i++) { struct AILogLine *log = &DATA.aiLogLines[battlerId][moveSlot][i]; @@ -965,17 +965,17 @@ static void PrintAiMoveLog(u32 battlerId, u32 moveSlot, u32 moveId, s32 totalSco if (log->set) { scoreFromLogs = log->score; - MgbaPrintf_("%s:%d: = %d\n", log->file, log->line, log->score); + Test_MgbaPrintf("%s:%d: = %d\n", log->file, log->line, log->score); } else if (log->score > 0) { scoreFromLogs += log->score; - MgbaPrintf_("%s:%d: +%d\n", log->file, log->line, log->score); + Test_MgbaPrintf("%s:%d: +%d\n", log->file, log->line, log->score); } else { scoreFromLogs += log->score; - MgbaPrintf_("%s:%d: %d\n", log->file, log->line, log->score); + Test_MgbaPrintf("%s:%d: %d\n", log->file, log->line, log->score); } } else @@ -987,7 +987,7 @@ static void PrintAiMoveLog(u32 battlerId, u32 moveSlot, u32 moveId, s32 totalSco { Test_ExitWithResult(TEST_RESULT_ERROR, "Warning! Score from logs(%d) is different than actual score(%d). Make sure all of the score adjustments use the ADJUST_SCORE macro\n", scoreFromLogs, totalScore); } - MgbaPrintf_("Total: %d\n", totalScore); + Test_MgbaPrintf("Total: %d\n", totalScore); } static void ClearAiLog(u32 battlerId) @@ -1163,7 +1163,7 @@ static s32 TryMessage(s32 i, s32 n, const u8 *string) continue; event = &DATA.queuedEvents[i].as.message; - // MgbaPrintf_("Looking for: %S Found: %S\n", event->pattern, string); // Useful for debugging. + // Test_MgbaPrintf("Looking for: %S Found: %S\n", event->pattern, string); // Useful for debugging. for (j = k = 0; ; j++, k++) { if (event->pattern[k] == CHAR_SPACE) @@ -1717,6 +1717,48 @@ void Speed_(u32 sourceLine, u32 speed) DATA.explicitSpeeds[DATA.currentSide] |= 1 << DATA.currentPartyIndex; } +void HPIV_(u32 sourceLine, u32 hpIV) +{ + INVALID_IF(!DATA.currentMon, "HP IV outside of PLAYER/OPPONENT"); + INVALID_IF(hpIV > MAX_PER_STAT_IVS, "Illegal HP IV: %d", hpIV); + SetMonData(DATA.currentMon, MON_DATA_HP_IV, &hpIV); +} + +void AttackIV_(u32 sourceLine, u32 attackIV) +{ + INVALID_IF(!DATA.currentMon, "Attack IV outside of PLAYER/OPPONENT"); + INVALID_IF(attackIV > MAX_PER_STAT_IVS, "Illegal attack IV: %d", attackIV); + SetMonData(DATA.currentMon, MON_DATA_ATK_IV, &attackIV); +} + +void DefenseIV_(u32 sourceLine, u32 defenseIV) +{ + INVALID_IF(!DATA.currentMon, "Defense IV outside of PLAYER/OPPONENT"); + INVALID_IF(defenseIV > MAX_PER_STAT_IVS, "Illegal defense IV: %d", defenseIV); + SetMonData(DATA.currentMon, MON_DATA_DEF_IV, &defenseIV); +} + +void SpAttackIV_(u32 sourceLine, u32 spAttackIV) +{ + INVALID_IF(!DATA.currentMon, "SpAttack IV outside of PLAYER/OPPONENT"); + INVALID_IF(spAttackIV > MAX_PER_STAT_IVS, "Illegal special attack IV: %d", spAttackIV); + SetMonData(DATA.currentMon, MON_DATA_SPATK_IV, &spAttackIV); +} + +void SpDefenseIV_(u32 sourceLine, u32 spDefenseIV) +{ + INVALID_IF(!DATA.currentMon, "SpDefense IV outside of PLAYER/OPPONENT"); + INVALID_IF(spDefenseIV > MAX_PER_STAT_IVS, "Illegal special defense IV: %d", spDefenseIV); + SetMonData(DATA.currentMon, MON_DATA_SPDEF_IV, &spDefenseIV); +} + +void SpeedIV_(u32 sourceLine, u32 speedIV) +{ + INVALID_IF(!DATA.currentMon, "Speed IV outside of PLAYER/OPPONENT"); + INVALID_IF(speedIV > MAX_PER_STAT_IVS, "Illegal speed IV: %d", speedIV); + SetMonData(DATA.currentMon, MON_DATA_SPEED_IV, &speedIV); +} + void Item_(u32 sourceLine, u32 item) { INVALID_IF(!DATA.currentMon, "Item outside of PLAYER/OPPONENT");