diff --git a/asm/macros/battle_anim_script.inc b/asm/macros/battle_anim_script.inc index 79599e928..8dda8979e 100644 --- a/asm/macros/battle_anim_script.inc +++ b/asm/macros/battle_anim_script.inc @@ -288,43 +288,57 @@ createvisualtask AnimTask_IsDoubleBattle, 0 jumprettrue \ptr .endm - + @ keep CFRU macros cause I'm lazy. todo: update to createsprite and createvisualtask, respectively .macro launchtemplate launchtemplatePtr launchtemplatePriority launchtemplateArgsNo launchtemplatearg0 launchtemplatearg1 launchtemplatearg2 launchtemplatearg3 launchtemplatearg4 launchtemplatearg5 launchtemplatearg6 launchtemplatearg7 launchtemplatearg8 - .byte 0x2 - .word \launchtemplatePtr - .byte \launchtemplatePriority - .byte \launchtemplateArgsNo - .hword \launchtemplatearg0 - .hword \launchtemplatearg1 - .hword \launchtemplatearg2 - .hword \launchtemplatearg3 - .hword \launchtemplatearg4 - .hword \launchtemplatearg5 - .hword \launchtemplatearg6 - .hword \launchtemplatearg7 - .hword \launchtemplatearg8 - .endm - + .byte 0x2 + .word \launchtemplatePtr + .byte \launchtemplatePriority + .byte \launchtemplateArgsNo + .hword \launchtemplatearg0 + .hword \launchtemplatearg1 + .hword \launchtemplatearg2 + .hword \launchtemplatearg3 + .hword \launchtemplatearg4 + .hword \launchtemplatearg5 + .hword \launchtemplatearg6 + .hword \launchtemplatearg7 + .hword \launchtemplatearg8 + .endm + .macro launchtask launchtaskPtr launchtaskPriority launchtaskArgsNo launchtaskarg0 launchtaskarg1 launchtaskarg2 launchtaskarg3 launchtaskarg4 launchtaskarg5 launchtaskarg6 launchtaskarg7 launchtaskarg8 - .byte 0x3 - .word \launchtaskPtr - .byte \launchtaskPriority - .byte \launchtaskArgsNo - .hword \launchtaskarg0 - .hword \launchtaskarg1 - .hword \launchtaskarg2 - .hword \launchtaskarg3 - .hword \launchtaskarg4 - .hword \launchtaskarg5 - .hword \launchtaskarg6 - .hword \launchtaskarg7 - .hword \launchtaskarg8 - .endm - + .byte 0x3 + .word \launchtaskPtr + .byte \launchtaskPriority + .byte \launchtaskArgsNo + .hword \launchtaskarg0 + .hword \launchtaskarg1 + .hword \launchtaskarg2 + .hword \launchtaskarg3 + .hword \launchtaskarg4 + .hword \launchtaskarg5 + .hword \launchtaskarg6 + .hword \launchtaskarg7 + .hword \launchtaskarg8 + .endm + .macro setblends setblends_value -.byte 0xC -.hword \setblends_value -.endm + .byte 0xC + .hword \setblends_value + .endm +.macro launchsoundtask launchsoundtaskPtr launchsoundtaskArgsNo launchsoundtaskarg0 launchsoundtaskarg1 launchsoundtaskarg2 launchsoundtaskarg3 launchsoundtaskarg4 launchsoundtaskarg5 launchsoundtaskarg6 launchsoundtaskarg7 launchsoundtaskarg8 + .byte 0x1F + .word \launchsoundtaskPtr + .byte \launchsoundtaskArgsNo + .hword \launchsoundtaskarg0 + .hword \launchsoundtaskarg1 + .hword \launchsoundtaskarg2 + .hword \launchsoundtaskarg3 + .hword \launchsoundtaskarg4 + .hword \launchsoundtaskarg5 + .hword \launchsoundtaskarg6 + .hword \launchsoundtaskarg7 + .hword \launchsoundtaskarg8 + .endm diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index b43433205..ff246955a 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -1785,6 +1785,10 @@ various \battler, VARIOUS_TRY_ACTIVATE_GRIM_NEIGH .endm + .macro setzeffect + various BS_ATTACKER, VARIOUS_SET_Z_EFFECT + .endm + .macro consumeberry battler:req, restoreItem=FALSE various \battler, VARIOUS_CONSUME_BERRY .byte \restoreItem @@ -1924,8 +1928,8 @@ .4byte \ptr .endm - .macro photongeysercheck - various BS_ATTACKER, VARIOUS_PHOTON_GEYSER_CHECK + .macro photongeysercheck battler:req + various \battler, VARIOUS_PHOTON_GEYSER_CHECK .endm .macro shellsidearmcheck diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index 74ebf237a..dcafffe50 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -779,7 +779,44 @@ gBattleAnims_Moves:: .4byte Move_GLACIAL_LANCE .4byte Move_ASTRAL_BARRAGE .4byte Move_EERIE_SPELL - .4byte Move_COUNT @ cannot be reached, because last move is Eerie Spell +@@@@ 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 +@@@ Last Move - cannot be reached + .4byte Move_COUNT .align 2 gBattleAnims_StatusConditions:: @@ -831,6 +868,7 @@ gBattleAnims_General:: .4byte General_AquaRingHeal @ B_ANIM_AQUA_RING_HEAL .4byte General_BeakBlastSetUp @ B_ANIM_BEAK_BLAST_SETUP .4byte General_ShellTrapSetUp @ B_ANIM_SHELL_TRAP_SETUP + .4byte General_ZMoveActivate @ B_ANIM_ZMOVE_ACTIVATE .align 2 gBattleAnims_Special:: @@ -24680,6 +24718,43 @@ General_RestoreBg: restorebg waitbgfadein end + +end + +General_ZMoveActivate: + loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy + loadspritegfx ANIM_TAG_Z_MOVE_SYMBOL @Z-Move Symbol + loadspritegfx ANIM_TAG_WHIP_HIT @green color + loadspritegfx ANIM_TAG_SWEAT_BEAD @blue color + loadspritegfx ANIM_TAG_PAW_PRINT @yellow color + monbg ANIM_ATTACKER + setblends 0x80c + fadetobg BG_ZMOVE_ACTIVATE + waitbgfadein + launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0 0x0 0x0 0xFFFF + playsewithpan SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER + launchtask AnimTask_BlendColorCycle, 0x2, 0x6, ANIM_PAL_ATK, 0x0, 0x6, 0x0, 0xb, 0x76BC + call ZMoveBuffEffect + call ZMoveBuffEffect + call ZMoveBuffEffect + launchtemplate gZMoveSymbolSpriteTemplate 0x29 0x4 0x0 0x0 0x0 0x0 + call ZMoveBuffEffect + call ZMoveBuffEffect + waitforvisualfinish + call UnsetPsychicBg + blendoff + clearmonbg ANIM_ATTACKER + end +ZMoveBuffEffect: + launchtemplate gBlueZMoveEnergySpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2 + delay 0x3 + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1 @Red Buff + delay 0x3 + launchtemplate gGreenZMoveEnergySpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2 + delay 0x3 + launchtemplate gYellowZMoveEnergySpriteTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3 + delay 0x3 + return General_TotemFlare:: loadspritegfx ANIM_TAG_FOCUS_ENERGY @@ -24901,3 +24976,5632 @@ Special_CriticalCaptureBallThrow: createvisualtask AnimTask_IsBallBlockedByTrainer, 2 jumpreteq -1, BallThrowTrainerBlock goto BallThrowEnd + +@@@@@@@@@@ Z MOVES @@@@@@@@@@ +Move_BREAKNECK_BLITZ:: + loadspritegfx ANIM_TAG_HOLLOW_ORB + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_HANDS_AND_FEET + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT + loadspritegfx ANIM_TAG_METEOR + loadspritegfx ANIM_TAG_FLAT_ROCK + launchtask AnimTask_HorizontalShake 0x5 0x3 0x5 0x5 0x20 @ shake screen + launchtask AnimTask_HorizontalShake 0x5 0x3 0x4 0x5 0x20 @ shake banks + playsewithpan SE_M_EARTHQUAKE, 0x0 + monbg ANIM_ATTACKER + splitbgprio ANIM_ATTACKER + delay 0x1 + launchtask AnimTask_BlendPalInAndOutByTag, 0x5, 0x5, ANIM_TAG_HOLLOW_ORB, 0x4c00, 0xe, 0x0, 0x3 + launchtemplate gBreakneckBlitzDanceSpriteTemplate 0x2 0x1 0x0 + launchtemplate gBreakneckBlitzDanceSpriteTemplate 0x2 0x1 0x2b + launchtemplate gBreakneckBlitzDanceSpriteTemplate 0x2 0x1 0x55 + launchtemplate gBreakneckBlitzDanceSpriteTemplate 0x2 0x1 0x80 + launchtemplate gBreakneckBlitzDanceSpriteTemplate 0x2 0x1 0xaa + launchtemplate gBreakneckBlitzDanceSpriteTemplate 0x2 0x1 0xd5 + delay 0xf + launchtemplate gBreakneckBlitzDanceSpriteTemplate 0x2 0x1 0x0 + launchtemplate gBreakneckBlitzDanceSpriteTemplate 0x2 0x1 0x2b + launchtemplate gBreakneckBlitzDanceSpriteTemplate 0x2 0x1 0x55 + launchtemplate gBreakneckBlitzDanceSpriteTemplate 0x2 0x1 0x80 + launchtemplate gBreakneckBlitzDanceSpriteTemplate 0x2 0x1 0xaa + launchtemplate gBreakneckBlitzDanceSpriteTemplate 0x2 0x1 0xd5 + waitforvisualfinish + clearmonbg ANIM_ATTACKER + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + fadetobg BG_DRILL + waitbgfadeout + launchtask AnimTask_StartSlidingBg 0x5 0x4 0xf700 0x300 0x1 0xffff + waitbgfadein + setblends 0x80c + delay 0x10 + launchtask AnimTask_WindUpLunge 0x5 0x7 0x0 0xffe8 0x8 0x17 0xa 0x28 0xa + delay 0x23 + invisible ANIM_ATTACKER + launchtemplate gGrowingSuperpowerTemplate 0x83 0x1 0x0 + playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER + delay 0x8 + playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER + launchtemplate gBreakneckBlitzHitSpriteTemplate 0x83 0x4 0x0 0x0 0x1 0x1 @ 0, 0 + delay 0x1 + playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER + launchtemplate gBreakneckBlitzHitSpriteTemplate 0x83 0x4 0xa 0xfff6 0x1 0x1 @ +10, -10 + playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER + delay 0x1 + playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER + launchtemplate gBreakneckBlitzHitSpriteTemplate 0x83 0x4 0xf 0xfff1 0x1 0x1 @ +15, -15 + delay 0x1 + playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER + launchtemplate gBreakneckBlitzHitSpriteTemplate 0x83 0x4 0x14 0xffec 0x1 0x1 @ +20, -20 + delay 0x1 + playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER + launchtemplate gBreakneckBlitzHitSpriteTemplate 0x83 0x4 0x19 0xffe7 0x1 0x1 @ +25, -25 + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xffe6 0x10 0x1 0x4 + waitforvisualfinish + launchtask AnimTask_RotateMonSpriteToSide 0x2 0x4 0x8 0xfe00 0x1 0x0 + launchtask AnimTask_ShakeMonInPlace 0x2 0x5 0x0 0x4 0x0 0xc 0x1 + launchtask AnimTask_ShakeMonInPlace 0x2 0x5 0x1 0x4 0x0 0xc 0x1 + waitforvisualfinish + delay 0x4 + launchtask AnimTask_RotateMonSpriteToSide 0x2 0x4 0x8 0xfe00 0x1 0x1 + delay 0xa + delay 0x19 + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x6 + delay 0x2 + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0x0 0x5 + waitforvisualfinish + delay 0x10 + blendoff + clearmonbg ANIM_DEF_PARTNER + launchtask AnimTask_AllBanksVisible 0xA 0x0 + waitforvisualfinish + call UnsetPsychicBg + end + + +Move_ALL_OUT_PUMMELING: + loadspritegfx ANIM_TAG_HANDS_AND_FEET + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_METEOR + loadspritegfx ANIM_TAG_FLAT_ROCK + loadspritegfx ANIM_TAG_FOCUS_ENERGY + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + call EndureEffect + loopsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER 0x9 0x2 + launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xb 0x1f + launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1 + call EndureEffect + waitforvisualfinish + fadetobg BG_ROCK_WRECKER + waitbgfadeout + launchtask AnimTask_StartSlidingBg 0x5 0x4 0x800 0x0 0x0 0xffff + waitbgfadein + setblends 0x80c + monbg ANIM_DEF_PARTNER + launchtask AnimTask_ShakeMon 0x5 0x5 0x1 0x0 0x2 SOUND_PAN_TARGET 0x1 + launchtemplate gAllOutPummelingOnslaughtSpriteTemplate 0x2 0x8 0xffd0 0x18 0x0 0x0 0xa 0x1 ANIM_FOOT_1 0x1 + delay 0x2 + launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x1 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET + delay 0x8 + launchtemplate gAllOutPummelingOnslaughtSpriteTemplate 0x2 0x8 0xfffa 0x12 0x0 0x0 0xa 0x1 ANIM_CHOP 0x1 + delay 0x2 + launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x1 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET + delay 0x8 + launchtemplate gAllOutPummelingOnslaughtSpriteTemplate 0x2 0x8 0xffc0 0x10 0x0 0x0 0xa 0x1 ANIM_FIST_1 0x1 + delay 0x2 + launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x1 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET + delay 0x8 + launchtemplate gAllOutPummelingOnslaughtSpriteTemplate 0x2 0x8 0xffd0 0x15 0x0 0x0 0xa 0x1 ANIM_FOOT_2 0x1 + delay 0x2 + launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x1 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET + delay 0x8 + launchtemplate gAllOutPummelingOnslaughtSpriteTemplate 0x2 0x8 0xffd0 0x14 0x0 0x0 0xa 0x1 ANIM_FIST_1 0x1 + delay 0x2 + launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x1 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET + delay 0x8 + launchtemplate gAllOutPummelingOnslaughtSpriteTemplate 0x2 0x8 0xffe0 0x17 0x0 0x0 0xa 0x1 ANIM_CHOP 0x1 + delay 0x2 + launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x1 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET + delay 0x8 + launchtemplate gAllOutPummelingOnslaughtSpriteTemplate 0x2 0x8 0xffc0 0x11 0x0 0x0 0xa 0x1 ANIM_FOOT_1 0x1 + delay 0x2 + launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x1 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET + delay 0x8 + launchtemplate gAllOutPummelingOnslaughtSpriteTemplate 0x2 0x8 0xffb0 0x10 0x0 0x0 0xa 0x1 ANIM_FOOT_2 0x1 + delay 0x2 + launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x1 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET + delay 0x8 + launchtemplate gAllOutPummelingOnslaughtSpriteTemplate 0x2 0x8 0xffa0 0x15 0x0 0x0 0xa 0x1 ANIM_CHOP 0x1 + delay 0x2 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET + launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x1 + playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET + delay 0x10 + launchtask AnimTask_WindUpLunge 0x5 0x7 0x0 0xffe8 0x8 0x17 0xa 0x28 0xa + delay 0x23 + invisible ANIM_ATTACKER + launchtemplate gGrowingSuperpowerTemplate 0x83 0x1 0x0 + playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER + delay 0xc + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xffd0 0x0 0x0 0x4 + waitforvisualfinish + delay 0x30 + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x7 + delay 0x2 + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0x0 0x5 + waitforvisualfinish + delay 0x10 + blendoff + clearmonbg ANIM_DEF_PARTNER + launchtask AnimTask_AllBanksVisible 0xA 0x0 + waitforvisualfinish + call UnsetPsychicBg + end + + +Move_SUPERSONIC_SKYSTRIKE: + loadspritegfx ANIM_TAG_ROUND_SHADOW @ fly + loadspritegfx ANIM_TAG_MUD_SAND @ dig + loadspritegfx ANIM_TAG_FOCUS_ENERGY @ focus energy + loadspritegfx ANIM_TAG_BIRD @ sky attack bird + loadspritegfx ANIM_TAG_IMPACT @ hit + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + monbg ANIM_DEF_PARTNER + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x1 0x8 0x0 0x0 + launchtask AnimTask_HorizontalShake 0x5 0x3 0x0 0x2 0x10 + playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x1 0xf 0x0 0x7fff + clearmonbg ANIM_DEF_PARTNER + call EndureEffect + delay 0x8 + call EndureEffect + delay 0x20 + delay 0xA + playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER + launchtemplate gFlyBallUpSpriteTemplate 0x2 0x4 0x0 0x0 0xd 0x150 + delay 0x2 + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x0 0xc 0x4 0xfff0 0x12 + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x0 0x10 0x4 0xfff6 0x12 + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x1 0xe 0x4 0xffee 0x12 + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x1 0xc 0x4 0xfff0 0x12 + delay 0x30 + launchtask AnimTask_DoomDesireLightBeam 0x5 0x0 + delay 0x9 + playsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER + delay 0x9 + playsewithpan SE_M_MORNING_SUN, 0x0 + delay 0x9 + playsewithpan SE_M_MORNING_SUN, SOUND_PAN_TARGET + delay 0x19 + fadetobg BG_SKY + waitbgfadeout + launchtask AnimTask_IsTargetPlayerSide 0x2 0x0 + jumpargeq 0x7 0x1 SupersonicSkystrikeOnPlayer +SupersonicSkystrikeOnOpponent: + launchtask AnimTask_StartSlidingBg 0x5 0x4 0xf800 0x800 0x0 0xffff + goto FinishSupersonicSkystrike +SupersonicSkystrikeOnPlayer: + launchtask AnimTask_StartSlidingBg 0x5 0x4 0x800 0xf800 0x0 0xffff +FinishSupersonicSkystrike: + waitbgfadein + waitforvisualfinish + monbg ANIM_DEF_PARTNER + setblends 0x80c + playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER + launchtemplate gSupersonicSkystrikeFlySpriteTemplate 0x2 0x1 0x14 + delay 0x10 + launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x0 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xff00 0x15 0x0 0x4 + launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 ANIM_TARGET 0x0 0xc 0xffe8 0xfff0 0x18 @ 12, -48, -16, 24 + launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 ANIM_TARGET 0x0 0x10 0xffda 0xfff6 0x18 @ 16, -16, -10, 24 + launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 ANIM_TARGET 0x1 0xe 0xffec 0xffee 0x18 @ 14, -52, -18, 24 + launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 ANIM_TARGET 0x1 0xc 0xffdc 0xfff0 0x18 @ 12, -32, -16, 24 + launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 ANIM_TARGET 0x0 0xc 0xffd0 0xfff0 0x18 @ 12, -24, -16, 24 + launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 ANIM_TARGET 0x0 0x10 0xfff0 0xfff6 0x18 @ 16, -38, -10, 24 + launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 ANIM_TARGET 0x1 0xe 0xffcc 0xffee 0x18 @ 14, -20, -18, 24 + launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 ANIM_TARGET 0x1 0xc 0xffe0 0xfff0 0x18 @ 12, -36, -16, 24 + delay 0x30 + clearmonbg ANIM_DEF_PARTNER + blendoff + launchtask AnimTask_AllBanksVisible 0xA 0x0 + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x10 + call UnsetPsychicBg + waitforvisualfinish + end + + +Move_ACID_DOWNPOUR: + loadspritegfx ANIM_TAG_BLUE_ORB @ reversal + loadspritegfx ANIM_TAG_POISON_JAB @ poison jab + loadspritegfx ANIM_TAG_POISON_BUBBLE @ poison bubbles + fadetobg BG_POISON + waitbgfadeout + launchtask AnimTask_IsTargetPlayerSide 0x2 0x0 + jumpargeq 0x7 0x1 AcidDownpourOnPlayer +AcidDownpourOnOpponent: + launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0 0xff10 0x1 0xffff + goto FinishAcidDownpour +AcidDownpourOnPlayer: + launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0 0xf0 0x1 0xffff +FinishAcidDownpour: + waitbgfadein + setblends 0x80c + monbg ANIM_ATTACKER + loopsewithpan SE_M_TOXIC, SOUND_PAN_TARGET, 0xd, 0x6 + launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_ATTACKER 0x0 0x2 0x32 0x1 + call AcidDownpourFlareOnAttacker + call AcidDownpourFlareOnAttacker + call AcidDownpourFlareOnAttacker + delay 0x5 + clearmonbg ANIM_ATTACKER + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + blendoff + delay 0x20 + loopsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET, 0xd, 0x3 + launchtemplate gAcidDownpourReversalSpriteTemplate 0x2 0x2 0x1a 0x0 + launchtemplate gAcidDownpourReversalSpriteTemplate 0x2 0x2 0x1a 0x2a + launchtemplate gAcidDownpourReversalSpriteTemplate 0x2 0x2 0x1a 0x54 + launchtemplate gAcidDownpourReversalSpriteTemplate 0x2 0x2 0x1a 0x7e + launchtemplate gAcidDownpourReversalSpriteTemplate 0x2 0x2 0x1a 0xa8 + launchtemplate gAcidDownpourReversalSpriteTemplate 0x2 0x2 0x1a 0xd2 + delay 0x20 + panse SE_M_WHIRLPOOL, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0 + launchtask AnimTask_CreateSurfWave 0x2 0x1 ANIM_SURF_PAL_SLUDGE_WAVE + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 0x4 0x2 0x0 0x7 0xd87c + launchtask AnimTask_ShakeMon 0x5 0x5 0x1 0x0 0x2 0x32 0x1 + call AcidDownpourFlare + call AcidDownpourFlare + delay 0x15 + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xfd00 0x15 0x0 0x2a + delay 0x2c + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 0x4 0x2 0x7 0x0 0xd87c + invisible ANIM_TARGET + waitforvisualfinish + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x10 + restorebg + waitbgfadeout + setarg 0x7 0xffff + launchtask AnimTask_AllBanksVisible 0xA 0x0 + waitbgfadein + waitforvisualfinish + end +AcidDownpourFlare: + launchtemplate gAcidDownpourAuraSpriteTemplate 0x82 0x7 0x0 0x1c 0x180 0x32 0x8 0x32 ANIM_TARGET + delay 0x2 + launchtemplate gAcidDownpourAuraSpriteTemplate 0x82 0x7 0x0 0x20 0xf0 0x28 0xb 0xffd2 ANIM_TARGET + delay 0x2 + launchtemplate gAcidDownpourAuraSpriteTemplate 0x82 0x7 0x0 0x21 0x1a0 0x28 0x4 0x2a ANIM_TARGET + delay 0x2 + launchtemplate gAcidDownpourAuraSpriteTemplate 0x82 0x7 0x0 0x1f 0x120 0x2d 0x6 0xffd6 ANIM_TARGET + delay 0x2 + launchtemplate gAcidDownpourAuraSpriteTemplate 0x82 0x7 0x0 0x1c 0x1c0 0x2d 0xb 0x2e ANIM_TARGET + delay 0x2 + launchtemplate gAcidDownpourAuraSpriteTemplate 0x82 0x7 0x0 0x21 0x1d0 0x32 0xa 0xffce ANIM_TARGET + delay 0x2 + return +AcidDownpourFlareOnAttacker: + launchtemplate gAcidDownpourAuraSpriteTemplate 0x82 0x7 0x0 0x1c 0x210 0x1e 0xd 0x32 ANIM_ATTACKER + delay 0x2 + launchtemplate gAcidDownpourAuraSpriteTemplate 0x82 0x7 0x0 0x20 0x1e0 0x14 0x10 0xffd2 ANIM_ATTACKER + delay 0x2 + launchtemplate gAcidDownpourAuraSpriteTemplate 0x82 0x7 0x0 0x21 0x240 0x14 0x8 0x2a ANIM_ATTACKER + delay 0x2 + launchtemplate gAcidDownpourAuraSpriteTemplate 0x82 0x7 0x0 0x1f 0x190 0x19 0xb 0xffd6 ANIM_ATTACKER + delay 0x2 + launchtemplate gAcidDownpourAuraSpriteTemplate 0x82 0x7 0x0 0x1c 0x200 0x19 0x10 0x2e ANIM_ATTACKER + delay 0x2 + launchtemplate gAcidDownpourAuraSpriteTemplate 0x82 0x7 0x0 0x21 0x1d0 0x1e 0xf 0xffce ANIM_ATTACKER + delay 0x2 + return + + +Move_TECTONIC_RAGE: + loadspritegfx ANIM_TAG_DIRT_MOUND @ dig + loadspritegfx ANIM_TAG_MUD_SAND @ rollout small rocks + loadspritegfx ANIM_TAG_ROCKS @ rollout + loadspritegfx ANIM_TAG_IMPACT @ hit + launchtemplate gDirtMoundSpriteTemplate 0x1 0x3 0x0 0x0 0xb4 + launchtemplate gDirtMoundSpriteTemplate 0x1 0x3 0x0 0x1 0xb4 + monbg_static ANIM_ATTACKER + delay 0x1 + launchtask AnimTask_DigDownMovement 0x2 0x1 0x0 + delay 0x6 + call DigThrowDirt + call DigThrowDirt + call DigThrowDirt + call DigThrowDirt + launchtask AnimTask_TectonicRageRollout 0x2 0x0 + call DigThrowDirt + setblends 0x80c + delay 0x20 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + monbg ANIM_TARGET + launchtemplate gBasicHitSplatSpriteTemplate 0x4 0x4 0x0 0x0 0x1 0x2 + delay 0x1 + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xff00 0x15 0x0 0x4 + delay 0xa + waitforvisualfinish + clearmonbg ANIM_TARGET + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + invisible ANIM_TARGET + delay 0x5 + invisible ANIM_ATTACKER + waitforvisualfinish + delay 0xa + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x10 + fadetobg BG_TECTONIC_RAGE @ brown/yellow sky uppercut + unloadspritegfx ANIM_TAG_DIRT_MOUND @ dig + unloadspritegfx ANIM_TAG_MUD_SAND @ rollout small rocks + unloadspritegfx ANIM_TAG_ROCKS @ rollout + unloadspritegfx ANIM_TAG_IMPACT @ hit + loadspritegfx ANIM_TAG_WARM_ROCK @ eruption + loadspritegfx ANIM_TAG_FIRE_PLUME @ blast burn + loadspritegfx ANIM_TAG_EXPLOSION_2 @ explosion + waitbgfadeout + visible ANIM_TARGET + launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0 0xf800 0x0 0xffff + waitbgfadein + playsewithpan SE_FALL, SOUND_PAN_ATTACKER @;Falling sound + delay 0x1e + launchtemplate gEruptionFallingRockSpriteTemplate 0x28 0x5 0xc8 0xffe0 0x0 0x64 0x0 + launchtemplate gEruptionFallingRockSpriteTemplate 0x28 0x5 0x1e 0xffe0 0x10 0x5a 0x1 + launchtemplate gEruptionFallingRockSpriteTemplate 0x28 0x5 0x96 0xffe0 0x20 0x3c 0x2 + launchtemplate gEruptionFallingRockSpriteTemplate 0x28 0x5 0x5a 0xffe0 0x30 0x50 0x3 + launchtemplate gEruptionFallingRockSpriteTemplate 0x28 0x5 0x6e 0xffe0 0x40 0x32 0x0 + launchtemplate gEruptionFallingRockSpriteTemplate 0x28 0x5 0x3c 0xffe0 0x50 0x46 0x1 + delay 0x16 + launchtask AnimTask_HorizontalShake 0x5 0x3 0x5 0x8 0x3c + launchtask AnimTask_HorizontalShake 0x5 0x3 0x4 0x8 0x3c + loopsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET, 0x10, 0xc + delay 0x30 + call TectonicRageExplosion + playsewithpan SE_M_SACRED_FIRE, SOUND_PAN_ATTACKER + launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x2 0x6 0xffe0 0x0 0x18 0x0 0x0 0x0 + launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x2 0x6 0xffec 0xfff6 0x18 0x0 0x0 0x0 + launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x42 0x6 0x0 0xfff0 0x18 0x0 0x0 0x0 + launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x42 0x6 0x14 0xfff6 0x18 0x0 0x0 0x0 + launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x42 0x6 0x20 0x0 0x18 0x0 0x0 0x0 + launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x42 0x6 0x14 0xa 0x18 0x0 0x0 0x0 + launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x2 0x6 0x0 0x10 0x18 0x0 0x0 0x0 + launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x2 0x6 0xffec 0xa 0x18 0x0 0x0 0x0 + call TectonicRageExplosion + playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_ATTACKER + launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x2 0x6 0xffc0 0x0 0x18 0x0 0x0 0x0 + launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x6 0x6 0xffd8 0xffec 0x18 0x0 0x0 0x0 + launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x46 0x6 0x0 0xffe0 0x18 0x0 0x0 0x0 + launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x46 0x6 0x28 0xffec 0x18 0x0 0x0 0x0 + launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x42 0x6 0x40 0x0 0x18 0x0 0x0 0x0 + launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x42 0x6 0x28 0x14 0x18 0x0 0x0 0x0 + launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x2 0x6 0x0 0x20 0x18 0x0 0x0 0x0 + launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x2 0x6 0xffd8 0x14 0x18 0x0 0x0 0x0 + call TectonicRageExplosion + playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_ATTACKER + launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x2 0x6 0xffa0 0x0 0x18 0x0 0x0 0x0 + launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x6 0x6 0xffc4 0xffe2 0x18 0x0 0x0 0x0 + launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x46 0x6 0x0 0xffd0 0x18 0x0 0x0 0x0 + launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x46 0x6 0x3c 0xffe2 0x18 0x0 0x0 0x0 + launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x42 0x6 0x60 0x0 0x18 0x0 0x0 0x0 + launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x42 0x6 0x3c 0x1e 0x18 0x0 0x0 0x0 + launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x2 0x6 0x0 0x30 0x18 0x0 0x0 0x0 + launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x2 0x6 0xffc4 0x1e 0x18 0x0 0x0 0x0 + call TectonicRageExplosion + waitforvisualfinish + call UnsetPsychicBg + waitbgfadein + launchtask AnimTask_AllBanksVisible 0xA 0x0 + waitforvisualfinish + end +TectonicRageExplosion: + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gTectonicRageExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gTectonicRageExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gTectonicRageExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gTectonicRageExplosionSpriteTemplate 0x83 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gTectonicRageExplosionSpriteTemplate 0x83 0x4 0x10 0x10 ANIM_TARGET 0x1 + delay 0x6 + return + + +Move_CONTINENTAL_CRUSH:: + loadspritegfx ANIM_TAG_ROUND_SHADOW @ fly + loadspritegfx ANIM_TAG_MUD_SAND @ dig + loadspritegfx ANIM_TAG_ROCKS @ rocks + loadspritegfx ANIM_TAG_FOCUS_ENERGY @ focus energy + loadspritegfx ANIM_TAG_IMPACT @ hit + loadspritegfx ANIM_TAG_REALLY_BIG_ROCK + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER + call ContinentalCrashBuffEffect + delay 0x8 + launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xb 0x2dd3 + launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1 + call ContinentalCrashBuffEffect + delay 0x8 + call ContinentalCrashBuffEffect + delay 0x4 + delay 0xA + playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER + launchtemplate gFlyBallUpSpriteTemplate 0x2 0x4 0x0 0x0 0xd 0x150 + delay 0x2 + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x0 0xc 0x4 0xfff0 0x12 + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x0 0x10 0x4 0xfff6 0x12 + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x1 0xe 0x4 0xffee 0x12 + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x1 0xc 0x4 0xfff0 0x12 + delay 0x30 + launchtask AnimTask_GetTimeOfDay 0x2 0x0 + jumpargeq 0x0 0x0 ContinentalCrushDay + jumpargeq 0x0 0x2 ContinentalCrushAfternoon +ContinentalCrushNight: + fadetobg BG_BLUE_SKY_NIGHT + goto FinishContinentalCrush +ContinentalCrushDay: + fadetobg BG_BLUE_SKY_DAY + goto FinishContinentalCrush +ContinentalCrushAfternoon: + fadetobg BG_BLUE_SKY_AFTERNOON +FinishContinentalCrush: + delay 0x18 + invisible ANIM_TARGET + waitbgfadeout + delay 0x5 + visible ANIM_ATTACKER + delay 0x4 + launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xb 0x2dd3 + launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1 + playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER + call ContinentalCrushStockpileRocks + playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER + call ContinentalCrushStockpileRocks + launchtemplate gContinentalCrushGrowingRockSpriteTemplate 0x2 0x1 0x0 + launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xb 0x2dd3 + launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1 + playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER + call ContinentalCrushStockpileRocks + playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER + call ContinentalCrushStockpileRocks + invisible ANIM_ATTACKER + waitforvisualfinish + fadetobg BG_IN_AIR + waitbgfadeout + visible ANIM_TARGET + launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0 0xf800 0x0 0xffff + waitbgfadein + loopsewithpan SE_FALL, SOUND_PAN_ATTACKER, 0x20, 0x4 @;Falling sound + delay 0x1e + launchtemplate gContinentalCrushEruptionSpriteTemplate 0x28 0x5 0xc8 0xffe0 0x0 0x64 0x0 + launchtemplate gContinentalCrushEruptionSpriteTemplate 0x28 0x5 0x1e 0xffe0 0x10 0x5a 0x1 + launchtemplate gContinentalCrushEruptionSpriteTemplate 0x28 0x5 0x96 0xffe0 0x20 0x3c 0x2 + launchtemplate gContinentalCrushEruptionSpriteTemplate 0x28 0x5 0x5a 0xffe0 0x30 0x50 0x3 + launchtemplate gContinentalCrushEruptionSpriteTemplate 0x28 0x5 0x6e 0xffe0 0x40 0x32 0x0 + launchtemplate gContinentalCrushEruptionSpriteTemplate 0x28 0x5 0x3c 0xffe0 0x50 0x46 0x1 + delay 0x16 + launchtask AnimTask_HorizontalShake 0x5 0x3 0x5 0x8 0x1c + launchtask AnimTask_HorizontalShake 0x5 0x3 0x4 0x8 0x1c + unloadspritegfx ANIM_TAG_ROUND_SHADOW @ fly + unloadspritegfx ANIM_TAG_MUD_SAND @ dig + unloadspritegfx ANIM_TAG_FOCUS_ENERGY @ focus energy + unloadspritegfx ANIM_TAG_IMPACT @ hit + loadspritegfx ANIM_TAG_REALLY_BIG_ROCK + delay 0x30 + launchtemplate gContinentalCrushBigRockStompSpriteTemplate, 0x82, 0x4, 0, 0x3c, 3, ANIM_TARGET + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 0x4 0x2 0x0 0x7 0x0000 + delay 0x5 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xff00 0x15 0x0 0x4 + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 ANIM_TARGET 0x0 0xc 0xffe8 0xfff0 0x18 @ 12, -48, -16, 24 + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 ANIM_TARGET 0x0 0x10 0xffda 0xfff6 0x18 @ 16, -16, -10, 24 + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 ANIM_TARGET 0x1 0xe 0xffec 0xffee 0x18 @ 14, -52, -18, 24 + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 ANIM_TARGET 0x1 0xc 0xffdc 0xfff0 0x18 @ 12, -32, -16, 24 + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 ANIM_TARGET 0x0 0xc 0xffd0 0xfff0 0x18 @ 12, -24, -16, 24 + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 ANIM_TARGET 0x0 0x10 0xfff0 0xfff6 0x18 @ 16, -38, -10, 24 + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 ANIM_TARGET 0x1 0xe 0xffcc 0xffee 0x18 @ 14, -20, -18, 24 + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 ANIM_TARGET 0x1 0xc 0xffe0 0xfff0 0x18 @ 12, -36, -16, 24 + delay 0x5 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 0x4 0x2 0x7 0x0 0x0000 @undo pal change on tgt + delay 0x10 + waitforvisualfinish + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x10 + waitforvisualfinish + restorebg + waitbgfadeout + setarg 0x7 0xffff + launchtask AnimTask_AllBanksVisible 0xA 0x0 + waitbgfadein + delay 0x4 + waitforvisualfinish + end +ContinentalCrashBuffEffect: + launchtemplate gContinentalCrushFocusEnergySpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2 + delay 0x4 + launchtemplate gContinentalCrushFocusEnergySpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1 + delay 0x4 + launchtemplate gContinentalCrushFocusEnergySpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2 + delay 0x4 + launchtemplate gContinentalCrushFocusEnergySpriteTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3 + delay 0x4 + launchtemplate gContinentalCrushFocusEnergySpriteTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1 + return +ContinentalCrushStockpileRocks: + launchtemplate gContinentalCrushNeedleArmSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x0 0x0 0xffc0 0x20 @ 0,-32 + delay 0x2 + launchtemplate gContinentalCrushNeedleArmSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x0 0x2c 0xffd4 0x20 @ +44,-44 + delay 0x2 + launchtemplate gContinentalCrushNeedleArmSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x0 0x3c 0x0 0x20 @ +60,0 + delay 0x2 + launchtemplate gContinentalCrushNeedleArmSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x0 0x28 0x28 0x20 @ +40,+40 + delay 0x2 + launchtemplate gContinentalCrushNeedleArmSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x0 0x0 0x38 0x20 @ +0,+56 + delay 0x2 + launchtemplate gContinentalCrushNeedleArmSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x0 0xffda 0x26 0x20 @ -38,+38 + delay 0x2 + launchtemplate gContinentalCrushNeedleArmSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x0 0xffca 0x0 0x20 @ -54, +0 + delay 0x2 + launchtemplate gContinentalCrushNeedleArmSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x0 0xffdc 0xffdc 0x20 @ -36, -36 + delay 0x2 + launchtemplate gContinentalCrushNeedleArmSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x0 0x0 0xffce 0x20 @ 0, -50 + delay 0x2 + launchtemplate gContinentalCrushNeedleArmSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x0 0x22 0xffde 0x20 @ +34, -34 + delay 0x2 + launchtemplate gContinentalCrushNeedleArmSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x0 0x2e 0x0 0x20 @ +46, +0 + delay 0x2 + launchtemplate gContinentalCrushNeedleArmSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x0 0x20 0x20 0x20 @ +32, +32 + delay 0x2 + return + + +Move_SAVAGE_SPIN_OUT:: + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge + loadspritegfx ANIM_TAG_RAZOR_LEAF @green color + loadspritegfx ANIM_TAG_STRING @string shot + loadspritegfx ANIM_TAG_SPIDER_WEB @spider web + loadspritegfx ANIM_TAG_MUD_SAND @rocks + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + monbg ANIM_ATTACKER + setblends 0x80c + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x4 0x0 + launchtemplate gSavageSpinOutGreenChargeSpriteTemplate 0x2 0x1 0x0 + delay 0x19 + playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER + delay 0x14 + playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER + delay 0xf + playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x4 0x0 0x0 + clearmonbg ANIM_ATTACKER + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + unloadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT + call gSavageSpinOutStringBlastSpriteTemplateSHOT + launchtask AnimTask_ShakeMon 0x5 0x5 0x1 0x5 0x0 0x32 0x1 + call gSavageSpinOutStringBlastSpriteTemplateSHOT + call gSavageSpinOutStringBlastSpriteTemplateSHOT + call gSavageSpinOutStringBlastSpriteTemplateSHOT + launchtemplate gSpiderWebSpriteTemplate 0x82 0x0 @ spider web + call gSavageSpinOutStringBlastSpriteTemplateSHOT + delay 0xe + blendoff + waitforvisualfinish + unloadspritegfx ANIM_TAG_STRING + unloadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT + loadspritegfx ANIM_TAG_COCOON + loadspritegfx ANIM_TAG_IMPACT @hit + delay 0x1 + invisible ANIM_TARGET + delay 0x0 + launchtask AnimTask_IsTargetPlayerSide 0x2 0x0 + delay 0x0 + jumpargeq 0x7 ANIM_TARGET SavageSpinOutOnPlayer +SavageSpinOutOnOpponent: + launchtemplate gSavageSpinOutCacoonSpriteTemplate 0x82 0x6 0x0 ANIM_TARGET 0x2 0x0 0x0 0x80 + goto FinishSavageSpinOut +SavageSpinOutOnPlayer: + launchtemplate gSavageSpinOutCacoonSpriteTemplate 0x3 0x6 0x0 ANIM_TARGET 0x2 0x0 0x0 0x80 +FinishSavageSpinOut: + fadetobg BG_IN_AIR + waitbgfadeout + launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0 0x1000 0x0 0xffff @+0x1000 + waitbgfadein + delay 0x10 + call SlowSavageSpinOutBackgroundSpeed + call SlowSavageSpinOutBackgroundSpeed + call SlowSavageSpinOutBackgroundSpeed + call SlowSavageSpinOutBackgroundSpeed + call SlowSavageSpinOutBackgroundSpeed + call SlowSavageSpinOutBackgroundSpeed @0 + call SlowSavageSpinOutBackgroundSpeed + call SlowSavageSpinOutBackgroundSpeed + call SlowSavageSpinOutBackgroundSpeed + call SlowSavageSpinOutBackgroundSpeed + call SlowSavageSpinOutBackgroundSpeed + call SlowSavageSpinOutBackgroundSpeed @-0x1000 + delay 0x4 + call SavageSpinOutCrash_2 @SeismicToss2 + delay 0xa + call SavageSpinOutCrash_1 @SeismicToss1 + delay 0xa + call SavageSpinOutCrash_2 @SeismicToss2 + delay 0xa + call SavageSpinOutCrash_1 @SeismicToss1 + delay 0xc + call UnsetPsychicBg + setarg 0x7 0x0 @;Clear arg 7 so task works properly in Link battles - no idea why though - something to do with the background scrolling + launchtask AnimTask_SnatchOpposingMonMove 0x2 0x0 @ user fly on screen on enemy side + playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER + delay 0x1E + unloadspritegfx ANIM_TAG_MUD_SAND + unloadspritegfx ANIM_TAG_IMPACT @hit + loadspritegfx ANIM_TAG_CUT @cut + loadspritegfx ANIM_TAG_EXPLOSION_2 @explosion + loadspritegfx ANIM_TAG_AIR_WAVE_2 @white/gray + launchtask AnimTask_ShakeMonInPlace 0x82 0x5 ANIM_TARGET 0x4 0x0 0xc 0x1 + launchtask AnimTask_ShakeMonInPlace 0x82 0x5 ANIM_TARGET 0x4 0x0 0xc 0x1 + createsprite gSavageSpinOutGreenCutSpriteTemplate, ANIM_TARGET, 2, 0x28, 0xffe0, 0x0 + createsprite gSavageSpinOutGreenCutSpriteTemplate, ANIM_TARGET, 2, 0x28, 0xffd0, 0x0 + playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET + delay 0xc + playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + launchtemplate gSavageSpinOutWhiteExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + launchtemplate gSavageSpinOutWhiteExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1 + delay 0x6 + launchtemplate gSpiderWebSpriteTemplate 0x82 0x0 @ spider web + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + launchtemplate gSavageSpinOutWhiteExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + launchtemplate gSavageSpinOutWhiteExplosionSpriteTemplate 0x83 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + launchtemplate gSavageSpinOutWhiteExplosionSpriteTemplate 0x83 0x4 0x10 0x10 ANIM_TARGET 0x1 + delay 0x6 + waitforvisualfinish + launchtask AnimTask_AllBanksVisible 0xA 0x0 + waitforvisualfinish + end +gSavageSpinOutStringBlastSpriteTemplateSHOT: + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER + launchtemplate gSavageSpinOutStringBlastSpriteTemplate 0x82 0x7 0xe 0xfff4 0x0 0xfff4 0xf 0x0 0x0 + launchtemplate gSavageSpinOutStringBlastSpriteTemplate 0x82 0x7 0x1a 0x8 0xc 0x8 0xf 0x0 0x0 + delay 0x3 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER + launchtemplate gSavageSpinOutStringBlastSpriteTemplate 0x82 0x7 0xe 0xfff4 0x0 0xfff4 0xf 0x1 0x0 + launchtemplate gSavageSpinOutStringBlastSpriteTemplate 0x82 0x7 0x1a 0x8 0xc 0x8 0xf 0x1 0x0 + delay 0x3 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER + launchtemplate gSavageSpinOutStringBlastSpriteTemplate 0x82 0x7 0xe 0xfff4 0x0 0xfff4 0xf 0x2 0x0 + launchtemplate gSavageSpinOutStringBlastSpriteTemplate 0x82 0x7 0x1a 0x8 0xc 0x8 0xf 0x2 0x0 + delay 0x3 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER + launchtemplate gSavageSpinOutStringBlastSpriteTemplate 0x82 0x7 0xe 0xfff4 0x0 0xfff4 0xf 0x3 0x0 + launchtemplate gSavageSpinOutStringBlastSpriteTemplate 0x82 0x7 0x1a 0x8 0xc 0x8 0xf 0x3 0x0 + delay 0x3 + return +SavageSpinOutCrash_1: + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0xfff6, 0xfff8, 0x1, 0x1 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 0x1 0x0 0xc 0xffe8 0xfff0 0x18 + launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 0x1 0x0 0x10 0xffda 0xfff6 0x18 + launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 0x1 0x1 0xe 0xffec 0xffee 0x18 + launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 0x1 0x1 0xc 0xffdc 0xfff0 0x18 + return +SavageSpinOutCrash_2: + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0xa, 0xfff8, 0x1, 0x1 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 0x1 0x0 0xc 0xffd0 0xfff0 0x18 + launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 0x1 0x0 0x10 0xfff0 0xfff6 0x18 + launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 0x1 0x1 0xe 0xffcc 0xffee 0x18 + launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 0x1 0x1 0xc 0xffe0 0xfff0 0x18 + return +SlowSavageSpinOutBackgroundSpeed: + launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0 0xfd56 0x0 0xffff @-0x2aa + delay 0x1 + return + + +Move_NEVER_ENDING_NIGHTMARE:: + loadspritegfx ANIM_TAG_THIN_RING @ring + loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy + loadspritegfx ANIM_TAG_ASSURANCE_HAND @purple hand + loadspritegfx ANIM_TAG_FIRE_PLUME @blast burn + loadspritegfx ANIM_TAG_POISON_BUBBLE @purple + loadspritegfx ANIM_TAG_VERTICAL_HEX @hex + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER + call NeverendingNightmareBuffEffect + delay 0x8 + launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xb 0x40c0 + launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1 + call NeverendingNightmareBuffEffect + delay 0x8 + call NeverendingNightmareBuffEffect + playsewithpan SE_M_STRING_SHOT2, SOUND_PAN_TARGET + call NeverendingNightmareAttackerRings + delay 0x1 + call NeverendingNightmareAttackerRings + delay 0x1 + call NeverendingNightmareAttackerRings + delay 0xa + playsewithpan SE_M_STRING_SHOT2, SOUND_PAN_TARGET + call NeverendingNightmareTargetRings + delay 0x1 + call NeverendingNightmareTargetRings + delay 0x1 + call NeverendingNightmareTargetRings + delay 0x1 + waitforvisualfinish + fadetobg BG_NEVERENDING_NIGHTMARE + waitbgfadein + launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_TARGET 0x0 0x4 0x78 0x1 + playsewithpan SE_M_WHIRLPOOL, SOUND_PAN_TARGET + call NeverendingNightmareHands + call NeverendingNightmareHands + delay 0xa + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 0x4 0x2 0x0 0x10 0x40c0 @ fade to purple + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + loadspritegfx ANIM_TAG_EXPLOSION_2 + unloadspritegfx ANIM_TAG_THIN_RING + launchtask AnimTask_BlendParticle, 0x5, 0x5, ANIM_TAG_VERTICAL_HEX, 0x2, 0xA, 0xA, 0x580A @;Purple + call NeverendingNightmareGeyser + playsewithpan SE_M_SACRED_FIRE, SOUND_PAN_TARGET + launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x2 0x6 0xffe0 0x0 0x18 0x0 0x0 0x0 + launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x2 0x6 0xffec 0xfff6 0x18 0x0 0x0 0x0 + launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x42 0x6 0x0 0xfff0 0x18 0x0 0x0 0x0 + launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x42 0x6 0x14 0xfff6 0x18 0x0 0x0 0x0 + launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x42 0x6 0x20 0x0 0x18 0x0 0x0 0x0 + launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x42 0x6 0x14 0xa 0x18 0x0 0x0 0x0 + launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x2 0x6 0x0 0x10 0x18 0x0 0x0 0x0 + launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x2 0x6 0xffec 0xa 0x18 0x0 0x0 0x0 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + call NeverendingNightmareGeyser + playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_TARGET + launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x2 0x6 0xffc0 0x0 0x18 0x0 0x0 0x0 + launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x6 0x6 0xffd8 0xffec 0x18 0x0 0x0 0x0 + launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x46 0x6 0x0 0xffe0 0x18 0x0 0x0 0x0 + launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x46 0x6 0x28 0xffec 0x18 0x0 0x0 0x0 + launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x42 0x6 0x40 0x0 0x18 0x0 0x0 0x0 + launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x42 0x6 0x28 0x14 0x18 0x0 0x0 0x0 + launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x2 0x6 0x0 0x20 0x18 0x0 0x0 0x0 + launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x2 0x6 0xffd8 0x14 0x18 0x0 0x0 0x0 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + call NeverendingNightmareGeyser + playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_TARGET + launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x2 0x6 0xffa0 0x0 0x18 0x0 0x0 0x0 + launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x6 0x6 0xffc4 0xffe2 0x18 0x0 0x0 0x0 + launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x46 0x6 0x0 0xffd0 0x18 0x0 0x0 0x0 + launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x46 0x6 0x3c 0xffe2 0x18 0x0 0x0 0x0 + launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x42 0x6 0x60 0x0 0x18 0x0 0x0 0x0 + launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x42 0x6 0x3c 0x1e 0x18 0x0 0x0 0x0 + launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x2 0x6 0x0 0x30 0x18 0x0 0x0 0x0 + launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x2 0x6 0xffc4 0x1e 0x18 0x0 0x0 0x0 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + call NeverendingNightmareGeyser + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 0x4 0x2 0x10 0x0 0x40c0 @ fade to normal + waitforvisualfinish + restorebg + waitbgfadeout + launchtask AnimTask_AllBanksVisible 0xA 0x0 + waitforvisualfinish + end +NeverendingNightmareBuffEffect: + launchtemplate gNeverEndingNightmareFocusEnergySpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2 + delay 0x4 + launchtemplate gNeverEndingNightmareFocusEnergySpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1 + delay 0x4 + launchtemplate gNeverEndingNightmareFocusEnergySpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2 + delay 0x4 + launchtemplate gNeverEndingNightmareFocusEnergySpriteTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3 + delay 0x4 + launchtemplate gNeverEndingNightmareFocusEnergySpriteTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1 + return +NeverendingNightmareTargetRings: + launchtemplate gNeverEndingNightmareRingTargetSpriteTemplate 0x83 0x4 0x0 0x0 0x100 0x0 + delay 0x8 + return +NeverendingNightmareAttackerRings: + launchtemplate gNeverEndingNightmareRingAttackerSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0 + delay 0xe + return +NeverendingNightmareHands: + launchtemplate gNeverEndingNightmareHandSpriteTemplate 0x82 0x5 ANIM_TARGET 0x0 0x0 0xffc0 0x20 @ 0,-32 + delay 0x2 + launchtemplate gNeverEndingNightmareHandSpriteTemplate 0x82 0x5 ANIM_TARGET 0x0 0x2c 0xffd4 0x20 @ +44,-44 + delay 0x2 + launchtemplate gNeverEndingNightmareHandSpriteTemplate 0x82 0x5 ANIM_TARGET 0x0 0x3c 0x0 0x20 @ +60,0 + delay 0x2 + launchtemplate gNeverEndingNightmareHandSpriteTemplate 0x82 0x5 ANIM_TARGET 0x0 0x28 0x28 0x20 @ +40,+40 + delay 0x2 + launchtemplate gNeverEndingNightmareHandSpriteTemplate 0x82 0x5 ANIM_TARGET 0x0 0x0 0x38 0x20 @ +0,+56 + delay 0x2 + launchtemplate gNeverEndingNightmareHandSpriteTemplate 0x82 0x5 ANIM_TARGET 0x0 0xffda 0x26 0x20 @ -38,+38 + delay 0x2 + launchtemplate gNeverEndingNightmareHandSpriteTemplate 0x82 0x5 ANIM_TARGET 0x0 0xffca 0x0 0x20 @ -54, +0 + delay 0x2 + launchtemplate gNeverEndingNightmareHandSpriteTemplate 0x82 0x5 ANIM_TARGET 0x0 0xffdc 0xffdc 0x20 @ -36, -36 + delay 0x2 + launchtemplate gNeverEndingNightmareHandSpriteTemplate 0x82 0x5 ANIM_TARGET 0x0 0x0 0xffce 0x20 @ 0, -50 + delay 0x2 + launchtemplate gNeverEndingNightmareHandSpriteTemplate 0x82 0x5 ANIM_TARGET 0x0 0x22 0xffde 0x20 @ +34, -34 + delay 0x2 + launchtemplate gNeverEndingNightmareHandSpriteTemplate 0x82 0x5 ANIM_TARGET 0x0 0x2e 0x0 0x20 @ +46, +0 + delay 0x2 + launchtemplate gNeverEndingNightmareHandSpriteTemplate 0x82 0x5 ANIM_TARGET 0x0 0x20 0x20 0x20 @ +32, +32 + delay 0x2 + return +NeverendingNightmareGeyser: + createsprite gNeverEndingNightmareExplosionSpriteTemplate, ANIM_TARGET, 4, 0x0003, 0x0005, ANIM_TARGET, 0x0 + createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0xfffc, 0x10 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + delay 0x0 + createsprite gNeverEndingNightmareExplosionSpriteTemplate ANIM_TARGET, 4, 0xfff5, 0xfff1, ANIM_TARGET, 0x0 + createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0x100D, 0x10 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + delay 0x0 + createsprite gNeverEndingNightmareExplosionSpriteTemplate ANIM_TARGET, 4, 0x0008, 0xfffb, ANIM_TARGET, 0x0 + createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0x4, 0x10 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + delay 0x0 + createsprite gNeverEndingNightmareExplosionSpriteTemplate ANIM_TARGET, 4, 0xfffa, 0x0012, ANIM_TARGET, 0x0 + createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0xfff0, 0x10 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + delay 0x0 + createsprite gNeverEndingNightmareExplosionSpriteTemplate ANIM_TARGET, 4, 0x0000, 0x0005, ANIM_TARGET, 0x0 + createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0xfffc, 0x10 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + createsprite gNeverEndingNightmareExplosionSpriteTemplate ANIM_TARGET, 4, 0x0003, 0xfff5, ANIM_TARGET, 0x0 + createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0x100D, 0x10 + delay 0x0 + createsprite gNeverEndingNightmareExplosionSpriteTemplate ANIM_TARGET, 4, 0xfff5, 0xffe1, ANIM_TARGET, 0x0 + createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0x4, 0x10 + delay 0x0 + createsprite gNeverEndingNightmareExplosionSpriteTemplate ANIM_TARGET, 4, 0x0008, 0xffeb, ANIM_TARGET, 0x0 + createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0xfff0, 0x10 + delay 0x0 + createsprite gNeverEndingNightmareExplosionSpriteTemplate ANIM_TARGET, 4, 0xfffa, 0x0002, ANIM_TARGET, 0x0 + createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0xfffc, 0x10 + delay 0x0 + createsprite gNeverEndingNightmareExplosionSpriteTemplate ANIM_TARGET, 4, 0x0000, 0xfff5, ANIM_TARGET, 0x0 + createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0x100D, 0x10 + delay 0x0 + createsprite gNeverEndingNightmareExplosionSpriteTemplate ANIM_TARGET, 4, 0x0003, 0xffe5, ANIM_TARGET, 0x0 + createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0x4, 0x10 + delay 0x0 + createsprite gNeverEndingNightmareExplosionSpriteTemplate ANIM_TARGET, 4, 0xfff5, 0xffd1, ANIM_TARGET, 0x0 + createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0xfff0, 0x10 + delay 0x0 + createsprite gNeverEndingNightmareExplosionSpriteTemplate ANIM_TARGET, 4, 0x0008, 0xffdb, ANIM_TARGET, 0x0 + createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0xfffc, 0x10 + delay 0x0 + createsprite gNeverEndingNightmareExplosionSpriteTemplate ANIM_TARGET, 4, 0xfffa, 0xfff2, ANIM_TARGET, 0x0 + createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0x100D, 0x10 + delay 0x0 + createsprite gNeverEndingNightmareExplosionSpriteTemplate ANIM_TARGET, 4, 0x0000, 0xffe5, ANIM_TARGET, 0x0 + createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0x4, 0x10 + delay 0x0 + createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0xfff0, 0x10 + return + + +Move_CORKSCREW_CRASH:: + loadspritegfx ANIM_TAG_SPIKES @metal bits + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge + loadspritegfx ANIM_TAG_CORKSCREW @drill + loadspritegfx ANIM_TAG_WHIRLWIND_LINES @whirlwind + loadspritegfx ANIM_TAG_MUD_SAND @rock + monbg ANIM_ATTACKER + invisible ANIM_TARGET + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x2 0x0 0xb 0x6318 @fade atker to gray + launchtask AnimTask_BlendParticle, 0x5, 0x5, ANIM_TAG_SPIKES, 0x0, 0xC, 0xC, 0x6318 @;Gray + playsewithpan SE_ESCALATOR, SOUND_PAN_ATTACKER + launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_ATTACKER 0x0 0x2 0x4f 0x1 + launchtemplate gCorkscrewCrashChargeSpriteTemplate 0x2 0x1 0x0 + call CorkscrewCrashMetalFlare + call CorkscrewCrashMetalFlare + call CorkscrewCrashMetalFlare + call CorkscrewCrashMetalFlare + call CorkscrewCrashMetalFlare + waitforvisualfinish + clearmonbg ANIM_ATTACKER + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x0 0xb 0x0 0x6318 @fade atker back + waitforvisualfinish + stopsound + invisible ANIM_ATTACKER + launchtemplate gCorkscrewCrashCorkscrewFlyUpSpriteTemplate 0x2 0x7 0x0 0x0 0x4e0 0x24 0x15 0x1 ANIM_ATTACKER + playsewithpan SE_ESCALATOR, SOUND_PAN_ATTACKER + fadetobg BG_HIGHSPEED_OPPONENT + waitbgfadeout + launchtask AnimTask_StartSlidingBg 0x5 0x4 0xf700 0x0 0x1 0xffff + waitbgfadein + launchtask AnimTask_IsTargetPlayerSide 0x2 0x0 + jumpargeq 0x7 ANIM_TARGET CorkscrewCrashOnPlayer +CorkscrewCrashOnOpponent: + launchtemplate gCorkscrewCrashRightUpSpriteTemplate 0x32 0x5 0xfff0 0x88 0x100 0x38 0x15 + waitforvisualfinish + delay 0xa + launchtemplate gCorkscrewCrashLeftUpSpriteTemplate 0x32 0x5 0x0120 0x38 0xfff0 0x38 0x15 + waitforvisualfinish + visible ANIM_TARGET + delay 0x5 + goto FinishCorkscrewCrash +CorkscrewCrashOnPlayer: + launchtemplate gCorkscrewCrashLeftDownSpriteTemplate 0x32 0x5 0x0120 0x08 0xfff0 0x0f 0x15 + waitforvisualfinish + delay 0xa + launchtemplate gCorkscrewCrashRightDownSpriteTemplate 0x32 0x5 0xfff0 0x38 0x100 0x38 0x15 + waitforvisualfinish + visible ANIM_TARGET + delay 0x5 +FinishCorkscrewCrash: + launchtemplate gCorkscrewCrashStrikeSpriteTemplate 0x82 0x1 0x14 + loadspritegfx ANIM_TAG_IMPACT @hit + delay 0x10 + stopsound + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gBasicHitSplatSpriteTemplate 0x83 0x4 0x0 0x0 0x1 0x0 + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xff00 0xf 0x0 0x4 @ shove target down a bit + waitforvisualfinish + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x10 + playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_TARGET + launchtemplate gCorkscrewCrashCorkscrewFlyDownSpriteTemplate 0x83 0x3 0x0 0xffc0 0x0f + delay 0xf + launchtask AnimTask_HorizontalShake 0x5 0x3 ANIM_TARGET 0x2 0x30 + launchtemplate gCorkscrewCrashCorkscrewFlyDownSpriteTemplate 0x83 0x3 0x0 0xfffe 0x03 + call CorkscrewCrashSpinningWind + call CorkscrewCrashSprayRocks + delay 0x6 + call CorkscrewCrashSprayRocks + delay 0x6 + call CorkscrewCrashSprayRocks + delay 0x6 + call CorkscrewCrashSprayRocks + delay 0x0 + launchtemplate gCorkscrewCrashCorkscrewFlyDownSpriteTemplate 0x83 0x3 0x0 0xfffe 0x03 + delay 0x6 + call CorkscrewCrashSprayRocks + delay 0x6 + call CorkscrewCrashSprayRocks + delay 0x6 + call CorkscrewCrashSprayRocks + delay 0x1 + launchtemplate gCorkscrewCrashCorkscrewFlyDownSpriteTemplate 0x83 0x3 0x0 0xfffe 0x03 + delay 0x4 + call CorkscrewCrashSprayRocks + delay 0x6 + call CorkscrewCrashSprayRocks + delay 0x6 + call CorkscrewCrashSprayRocks + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_ALL_BATTLERS | ANIM_PAL_BG, 0x2, 0x0, 0x10, 0x7fff + waitforvisualfinish + delay 0x10 + call ResetFromWhiteScreen + waitforvisualfinish + end +CorkscrewCrashSpinningWind: + launchtemplate gWhirlwindLineSpriteTemplate 0x3 0x5 0x0 0xfff8 0x1 0x2c 0x0 + launchtemplate gWhirlwindLineSpriteTemplate 0x3 0x5 0x0 0x0 0x1 0x3c 0x1 + launchtemplate gWhirlwindLineSpriteTemplate 0x3 0x5 0x0 0x8 0x1 0x3c 0x2 + launchtemplate gWhirlwindLineSpriteTemplate 0x3 0x5 0x0 0x10 0x1 0x3c 0x3 + launchtemplate gWhirlwindLineSpriteTemplate 0x3 0x5 0x0 0x18 0x1 0x3c 0x4 + launchtemplate gWhirlwindLineSpriteTemplate 0x3 0x5 0x0 0x20 0x1 0x3c 0x0 + return +CorkscrewCrashMetalFlare: + launchtemplate gCorkscrewCrashMetalBitSpriteTemplate 0x82 0x7 0x0 0x1c 0x210 0x1e 0xd 0x32 ANIM_ATTACKER + delay 0x2 + launchtemplate gCorkscrewCrashMetalBitSpriteTemplate 0x82 0x7 0x0 0x20 0x1e0 0x14 0x10 0xffd2 ANIM_ATTACKER + delay 0x2 + launchtemplate gCorkscrewCrashMetalBitSpriteTemplate 0x82 0x7 0x0 0x21 0x240 0x14 0x8 0x2a ANIM_ATTACKER + delay 0x2 + launchtemplate gCorkscrewCrashMetalBitSpriteTemplate 0x82 0x7 0x0 0x1f 0x190 0x19 0xb 0xffd6 ANIM_ATTACKER + delay 0x2 + launchtemplate gCorkscrewCrashMetalBitSpriteTemplate 0x82 0x7 0x0 0x1c 0x200 0x19 0x10 0x2e ANIM_ATTACKER + delay 0x2 + launchtemplate gCorkscrewCrashMetalBitSpriteTemplate 0x82 0x7 0x0 0x21 0x1d0 0x1e 0xf 0xffce ANIM_ATTACKER + delay 0x2 + return +CorkscrewCrashSprayRocks: + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 0x1 0x0 0xc 0xffe8 0xfff0 0x18 + launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 0x1 0x0 0x10 0xffda 0xfff6 0x18 + launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 0x1 0x1 0xe 0xffec 0xffee 0x18 + launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 0x1 0x1 0xc 0xffdc 0xfff0 0x18 + return + + +Move_INFERNO_OVERDRIVE:: + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge + loadspritegfx ANIM_TAG_SMALL_EMBER @fire + launchtask AnimTask_BlendParticle, 0x5, 0x5, ANIM_TAG_CIRCLE_OF_LIGHT, 0x0, 0xA, 0xA, 0x1F + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + fadetobg BG_INFERNO_OVERDRIVE + waitbgfadeout + launchtask AnimTask_IsTargetPlayerSide 0x2 0x0 + jumpargeq 0x7 ANIM_TARGET InfernoOverdriveOnPlayer +InfernoOverdriveOnOpponent: + launchtask AnimTask_StartSlidingBg 0x5 0x4 0xfb00 0x0 0x0 0xFFFF + goto FinishInfernoOverdrive +InfernoOverdriveOnPlayer: + launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0500 0x0 0x0 0xFFFF +FinishInfernoOverdrive: + waitbgfadein + monbg ANIM_ATTACKER + setblends 0x80c + loopsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_ATTACKER, 0x13, 0x8 + launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_ATTACKER 0x0 0x2 0x4f 0x1 + launchtemplate gInfernoOverdriveChargeSpriteTemplate 0x2 0x1 0x0 + call InfernoOverdriveFireSpin + call InfernoOverdriveFireSpin + call InfernoOverdriveFireSpin + call InfernoOverdriveFireSpin + call InfernoOverdriveFireSpin + waitforvisualfinish + stopsound + unloadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge + unloadspritegfx ANIM_TAG_SMALL_EMBER @fire + loadspritegfx ANIM_TAG_EXPLOSION + loadspritegfx ANIM_TAG_EXPLOSION_2 @explosion + loadspritegfx ANIM_TAG_METEOR @superpower + loadspritegfx ANIM_TAG_VERTICAL_HEX @red color + clearmonbg ANIM_ATTACKER + launchtemplate gInfernoOverdriveSuperpowerSpriteTemplate 0x83 0x1 0x0 @ super power shot + playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_ATTACKER + delay 0x10 + launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x8 0x0 0x10 0x1 + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET + unloadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT + launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_TARGET 0x0 0x2 0x4f 0x1 + call InfernoOverdriveExplosion + delay 0x6 + call InfernoOverdriveExplosion + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_ALL_BATTLERS | ANIM_PAL_BG, 0x1, 0x0, 0x10, 0x001b @ red bg pal + delay 0x6 + call InfernoOverdriveExplosion + waitforvisualfinish + call ResetFromRedScreen + blendoff + end +InfernoOverdriveFireSpin: + launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x1c 0x210 0x1e 0xd 0x32 ANIM_ATTACKER + delay 0x2 + launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x20 0x1e0 0x14 0x10 0xffd2 ANIM_ATTACKER + delay 0x2 + launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x21 0x240 0x14 0x8 0x2a ANIM_ATTACKER + delay 0x2 + launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x1f 0x190 0x19 0xb 0xffd6 ANIM_ATTACKER + delay 0x2 + launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x1c 0x200 0x19 0x10 0x2e ANIM_ATTACKER + delay 0x2 + launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x21 0x1d0 0x1e 0xf 0xffce ANIM_ATTACKER + delay 0x2 + return +InfernoOverdriveExplosion: + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1 + launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xa 0x0 0xfffe + launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0xfffe 0x0 + launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0x2 0x0 + launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0xfffe 0x2 + launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0x2 0x2 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1 + launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xa 0x0 0xfffe + launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0xfffe 0x0 + launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0x2 0x0 + launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0xfffe 0x2 + launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0x2 0x2 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xa 0x0 0xfffe + launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0xfffe 0x0 + launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0x2 0x0 + launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0xfffe 0x2 + launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0x2 0x2 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gExplosionSpriteTemplate 0x3 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 + launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xa 0x0 0xfffe + launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0xfffe 0x0 + launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0x2 0x0 + launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0xfffe 0x2 + launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0x2 0x2 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x10 0x10 ANIM_TARGET 0x1 + launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xa 0x0 0xfffe + launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0xfffe 0x0 + launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0x2 0x0 + launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0xfffe 0x2 + launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0x2 0x2 + return + + +Move_HYDRO_VORTEX:: + loadspritegfx ANIM_TAG_SPLASH @dive + loadspritegfx ANIM_TAG_SWEAT_BEAD @dive + loadspritegfx ANIM_TAG_ICE_CRYSTALS @crabhammer bubbles + loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy + loadspritegfx ANIM_TAG_METEOR @superpower + loadspritegfx ANIM_TAG_WATER_ORB @whirlpool + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + launchtask AnimTask_CreateSurfWave 0x2 0x1 0x0 + delay 0x18 + panse SE_M_SURF, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0 + waitforvisualfinish + loadspritegfx ANIM_TAG_ROUND_SHADOW + playsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER + launchtemplate gDiveBallSpriteTemplate 0x2 0x4 0x0 0x0 0xd 0x150 + waitforvisualfinish + playsewithpan SE_M_DIVE, SOUND_PAN_ATTACKER + launchtemplate gDiveWaterSplashSpriteTemplate 0x3 0x1 0x0 + call DiveSetUpWaterDroplets + call DiveSetUpWaterDroplets + call DiveSetUpWaterDroplets + call DiveSetUpWaterDroplets + call DiveSetUpWaterDroplets + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xfd00 0x15 0x0 0x1a + delay 0x1a + invisible ANIM_TARGET + waitforvisualfinish + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x7 + delay 0x5 + fadetobg BG_WATER_PULSE + waitbgfadeout + delay 0x5 + visible ANIM_ATTACKER + visible ANIM_TARGET + loopsewithpan SE_M_CRABHAMMER, SOUND_PAN_TARGET, 0x14, 0x3 + call HydroVortexBubbles + loadspritegfx ANIM_TAG_FOCUS_ENERGY + playsewithpan SE_M_WATERFALL, SOUND_PAN_ATTACKER + launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xb 0x5da0 + launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1 + waitforvisualfinish + unloadspritegfx ANIM_TAG_SPLASH + unloadspritegfx ANIM_TAG_SWEAT_BEAD + loadspritegfx ANIM_TAG_IMPACT + launchtemplate gHydroVortexSuperpowerSpriteTemplate 0x83 0x1 0x0 + playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER + invisible ANIM_ATTACKER + delay 0x10 + launchtemplate gHydroVortexImpactSpriteTemplate 0x83 0x4 0xa 0xfff8 0x1 0x1 + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 0x4 0x2 0x0 0x10 0x5da0 + loadspritegfx ANIM_TAG_GUST + launchtask AnimTask_HorizontalShake 0x5 0x3 0x1 0x8 0x3c + call HydroVortexWhirlpoolHurricane + call HydroVortexWhirlpoolHurricane + call HydroVortexWhirlpoolHurricane + call HydroVortexWhirlpoolHurricane + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 0x4 0x2 0x10 0x0 0x5da0 + waitforvisualfinish + restorebg + waitbgfadeout + launchtask AnimTask_AllBanksVisible 0xA 0x0 + waitforvisualfinish + end +HydroVortexBubbles: + launchtemplate gSmallBubblePairSpriteTemplate 0x2 0x4 0xa 0xa 0x14 ANIM_ATTACKER + createsprite gSmallBubblePairSpriteTemplate, ANIM_TARGET, 2, 0xa, 0xa, 0x14, ANIM_TARGET + delay 0x4 + launchtemplate gSmallBubblePairSpriteTemplate 0x2 0x4 0x14 0xffec 0x14 ANIM_ATTACKER + createsprite gSmallBubblePairSpriteTemplate, ANIM_TARGET, 2, 0x14, 0xffec, 0x14, ANIM_TARGET + delay 0x4 + launchtemplate gSmallBubblePairSpriteTemplate 0x2 0x4 0xfff1 0xf 0x14 ANIM_ATTACKER + createsprite gSmallBubblePairSpriteTemplate ANIM_TARGET, 2, 0xfff1, 0xf, 0x14, ANIM_TARGET + delay 0x4 + launchtemplate gSmallBubblePairSpriteTemplate 0x2 0x4 0x0 0x0 0x14 ANIM_ATTACKER + createsprite gSmallBubblePairSpriteTemplate ANIM_TARGET, 2, 0x0, 0x0, 0x14, ANIM_TARGET + delay 0x4 + launchtemplate gSmallBubblePairSpriteTemplate 0x2 0x4 0xfff6 0xffec 0x14 ANIM_ATTACKER + createsprite gSmallBubblePairSpriteTemplate ANIM_TARGET, 2, 0xfff6, 0xffec, 0x14, ANIM_TARGET + delay 0x4 + launchtemplate gSmallBubblePairSpriteTemplate 0x2 0x4 0x10 0xfff8 0x14 ANIM_ATTACKER + createsprite gSmallBubblePairSpriteTemplate ANIM_TARGET, 2, 0x10, 0xfff8, 0x14, ANIM_TARGET + delay 0x4 + launchtemplate gSmallBubblePairSpriteTemplate 0x2 0x4 0x5 0x8 0x14 ANIM_ATTACKER + createsprite gSmallBubblePairSpriteTemplate ANIM_TARGET, 2, 0x5, 0x8, 0x14, ANIM_TARGET + delay 0x4 + launchtemplate gSmallBubblePairSpriteTemplate 0x2 0x4 0xfff0 0x0 0x14 ANIM_ATTACKER + createsprite gSmallBubblePairSpriteTemplate ANIM_TARGET, 2, 0xfff0, 0x0, 0x14, ANIM_TARGET + return +HydroVortexWhirlpoolHurricane: + playsewithpan SE_M_WHIRLPOOL, SOUND_PAN_TARGET + launchtemplate gHydroVortexHurricaneSpriteTemplate 0x82 0x2 0x0 0xfff0 + launchtemplate gHydroVortexImpactSpriteTemplate 0x83 0x4 0xfff6 0xfff8 0x1 0x1 + launchtask AnimTask_AnimateGustTornadoPalette 0x5 0x2 0x1 0x46 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1c 0x180 0x32 0x8 0x32 0x1 + delay 0x2 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x20 0xf0 0x28 0xb 0xffd2 0x1 + delay 0x2 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x21 0x1a0 0x28 0x4 0x2a 0x1 + delay 0x2 + launchtemplate gHydroVortexImpactSpriteTemplate 0x83 0x4 0xa 0xfff8 0x1 0x1 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1f 0x120 0x2d 0x6 0xffd6 0x1 + delay 0x2 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1c 0x1c0 0x2d 0xb 0x2e 0x1 + launchtemplate gHydroVortexHurricaneSpriteTemplate 0x82 0x2 0x0 0xfff0 + launchtask AnimTask_AnimateGustTornadoPalette 0x5 0x2 0x1 0x46 + delay 0x2 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x21 0x1d0 0x32 0xa 0xffce 0x1 + delay 0x2 + return + + +Move_BLOOM_DOOM:: + loadspritegfx ANIM_TAG_FLOWER @petal + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge + loadspritegfx ANIM_TAG_RAZOR_LEAF @green + loadspritegfx ANIM_TAG_GUST @hurricane + loadspritegfx ANIM_TAG_VERTICAL_HEX @hex diamond + monbg ANIM_ATTACKER + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + setblends 0x80c + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x4 0x0 + loopsewithpan SE_SHINY, SOUND_PAN_ATTACKER, 0x9, 0x3 + launchtemplate gBloomDoomGreenChargeSpriteTemplate 0x2 0x1 0x0 + delay 0x3C + blendoff + launchtemplate gBloomDoomPetalSpinSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x0 + playsewithpan SE_M_ATTRACT, SOUND_PAN_ATTACKER + delay 0x2 + launchtemplate gBloomDoomPetalSpinSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x4 + delay 0x2 + launchtemplate gBloomDoomPetalSpinSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x8 + playsewithpan SE_M_ATTRACT, SOUND_PAN_ATTACKER + delay 0x2 + launchtemplate gBloomDoomPetalSpinSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0xc + delay 0x2 + launchtemplate gBloomDoomPetalSpinSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x10 + playsewithpan SE_M_ATTRACT, SOUND_PAN_ATTACKER + delay 0x2 + launchtemplate gBloomDoomPetalSpinSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x14 + delay 0x2 + launchtemplate gBloomDoomPetalSpinSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x18 + playsewithpan SE_M_ATTRACT, SOUND_PAN_ATTACKER + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x4 0x0 0x0 + waitforvisualfinish + unloadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT + call BloomDoomHurricane + playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER + call BloomDoomFlowerGeyser + call BloomDoomFlowerGeyser + call BloomDoomHurricane + playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER + call BloomDoomFlowerGeyser + call BloomDoomFlowerGeyser + call BloomDoomHurricane + playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER + call BloomDoomFlowerGeyser + call BloomDoomFlowerGeyser + call BloomDoomHurricane + playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER + call BloomDoomFlowerGeyser + call BloomDoomFlowerGeyser + call BloomDoomHurricane + playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER + call BloomDoomFlowerGeyser + call BloomDoomFlowerGeyser + call BloomDoomHurricane + playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER + call BloomDoomFlowerGeyser + call BloomDoomFlowerGeyser + fadetobg BG_BLOOM_DOOM + waitbgfadein + loadspritegfx ANIM_TAG_ORBS + delay 0x5 + launchtemplate gAromatherapySmallFlowerSpriteTemplate 0x0 0x7 0x18 0x10 0x0 0x2 0x2 0x0 0x0 + launchtemplate gAromatherapySmallFlowerSpriteTemplate 0x42 0x7 0x40 0x18 0x0 0x3 0x1 0x1 0x0 + launchtemplate gAromatherapyBigFlowerSpriteTemplate 0x0 0x7 0x10 0x18 0x0 0x2 0x1 0x0 0x0 + delay 0x5 + launchsoundtask SoundTask_LoopSEAdjustPanning, 0x7, 0xf0, 0xffc0, SOUND_PAN_TARGET, 0x1, 0xf, 0x0, 0x5 + launchtask AnimTask_ShakeMon 0x2 0x5 0x0 0x0 0x4 0x32 0x1 @ shake attacker + call BloomDoomHyperBeam + call BloomDoomHyperBeam + call BloomDoomHyperBeam + call BloomDoomHyperBeam + call BloomDoomHyperBeam + launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x4 0x0 0x72 0x1 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 0x4 0x2 0x0 0xb 0x33ed + call BloomDoomHyperBeam + call BloomDoomHyperBeam + call BloomDoomHyperBeam + call BloomDoomHyperBeam + call BloomDoomHyperBeam + call BloomDoomHyperBeam + call BloomDoomHyperBeam + call BloomDoomHyperBeam + call BloomDoomHyperBeam + call BloomDoomHyperBeam + call BloomDoomHyperBeam + launchtemplate gAromatherapySmallFlowerSpriteTemplate 0x42 0x7 0x30 0xc 0x0 0x4 0x3 0x1 0x0 + launchtemplate gAromatherapySmallFlowerSpriteTemplate 0x0 0x7 0x64 0x10 0x0 0x3 0x2 0x0 0x0 + launchtemplate gAromatherapySmallFlowerSpriteTemplate 0x0 0x7 0x4a 0x18 0xb4 0x3 0x2 0x0 0x0 + call BloomDoomHyperBeam + call BloomDoomHyperBeam + call BloomDoomHyperBeam + call BloomDoomHyperBeam + call BloomDoomHyperBeam + call BloomDoomHyperBeam + call BloomDoomHyperBeam + call BloomDoomHyperBeam + call BloomDoomHyperBeam + call BloomDoomHyperBeam + launchtemplate gAromatherapySmallFlowerSpriteTemplate 0x42 0x7 0x50 0x1e 0x0 0x4 0x1 0x1 0x0 + launchtemplate gAromatherapySmallFlowerSpriteTemplate 0x0 0x7 0x80 0xc 0x0 0x3 0x3 0x0 0x0 + launchtemplate gAromatherapyBigFlowerSpriteTemplate 0x0 0x7 0x5a 0x10 0x0 0x2 0x1 0x0 0x0 + delay 0x5 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 0x4 0x2 0xb 0x0 0x33ed + loadspritegfx ANIM_TAG_EXPLOSION @explosion + call BloomDoomPetalBlast + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_DEF, 0x1, 0x0, 0x10, 0x33ed + call BloomDoomPetalBlast + launchtask AnimTask_IsTargetPartner 0x5 0x0 + jumpargeq 0x0 0x1 BloomDoomFadeScreenTargetPartner + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_ALL - ANIM_PAL_DEF, 0x1, 0x0, 0x10, 0x33ed @ green bg pal +BloomDoomEnding: + call BloomDoomPetalBlast + waitforvisualfinish + clearmonbg ANIM_ATTACKER + call ResetFromGreenScreen + end +BloomDoomFadeScreenTargetPartner: + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG | ANIM_PAL_ATK | ANIM_PAL_OPPONENT1 | ANIM_PAL_OPPONENT2, 0x1, 0x0, 0x10, 0x33ed @ green bg pal + goto BloomDoomEnding +BloomDoomHurricane: + launchtemplate gBloomDoomHurricaneSpriteTemplate 0x2 0x2 0x0 0xfff0 + launchtask AnimTask_AnimateGustTornadoPalette 0x5 0x2 0x1 0x46 + return +BloomDoomFlowerGeyser: + launchtemplate gBloomDoomFlowerGeyserSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0xfffc 0x10 @ -4, -0x10 + delay 0x0 + launchtemplate gBloomDoomFlowerGeyserSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0x100D 0x10 @ + delay 0x0 + launchtemplate gBloomDoomFlowerGeyserSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0x4 0x10 + delay 0x0 + launchtemplate gBloomDoomFlowerGeyserSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0xfff0 0x10 + delay 0x0 + return +BloomDoomHyperBeam: + launchtemplate gBloomDoomGreenBeamSpriteTemplate 0x82 0x0 + launchtemplate gBloomDoomGreenBeamSpriteTemplate 0x82 0x0 + delay 0x1 + return +BloomDoomPetalBlast: + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gBloomDoomExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1 + launchtemplate gBloomDoomPetalStarSpriteTemplate 0x82 0x5 0x1 0x0 0x0 0xffe0 0x10 + delay 0x2 + launchtemplate gBloomDoomPetalStarSpriteTemplate 0x82 0x5 0x1 0x0 0x16 0xffea 0x10 + delay 0x2 + launchtemplate gBloomDoomPetalStarSpriteTemplate 0x82 0x5 0x1 0x0 0x1e 0x0 0x10 + delay 0x2 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gBloomDoomExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1 + launchtemplate gBloomDoomPetalStarSpriteTemplate 0x82 0x5 0x1 0x0 0x14 0x14 0x10 + delay 0x2 + launchtemplate gBloomDoomPetalStarSpriteTemplate 0x82 0x5 0x1 0x0 0x0 0x1c 0x10 + delay 0x2 + launchtemplate gBloomDoomPetalStarSpriteTemplate 0x82 0x5 0x1 0x0 0xffed 0x13 0x10 + delay 0x2 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gBloomDoomExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + launchtemplate gBloomDoomPetalStarSpriteTemplate 0x82 0x5 0x1 0x0 0xffe5 0x0 0x10 + delay 0x2 + launchtemplate gBloomDoomPetalStarSpriteTemplate 0x82 0x5 0x1 0x0 0xffee 0xffee 0x10 + delay 0x2 + launchtemplate gBloomDoomPetalStarSpriteTemplate 0x82 0x5 0x1 0x0 0x0 0xffe7 0x10 + delay 0x2 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gBloomDoomExplosionSpriteTemplate 0x3 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 + launchtemplate gBloomDoomPetalStarSpriteTemplate 0x82 0x5 0x1 0x0 0x11 0xffef 0x10 + delay 0x2 + launchtemplate gBloomDoomPetalStarSpriteTemplate 0x82 0x5 0x1 0x0 0x17 0x0 0x10 + delay 0x2 + launchtemplate gBloomDoomPetalStarSpriteTemplate 0x82 0x5 0x1 0x0 0x10 0x10 0x10 + delay 0x2 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gBloomDoomExplosionSpriteTemplate 0x3 0x4 0x10 0x10 ANIM_TARGET 0x1 + delay 0x2 + return +ResetFromGreenScreen: + launchtask AnimTask_AllBanksInvisible 0xA 0x0 + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_ALL_BATTLERS, 0x2, 0x0, 0x0, 0x33ED @Everything from green + restorebg + waitbgfadeout + setarg 0x7 0xffff + launchtask AnimTask_AllBanksVisible 0xA 0x0 + waitbgfadein + waitforvisualfinish + delay 0x5 + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG, 0x1, 0x0, 0x0, 0x33ED + waitforvisualfinish + return + + +Move_GIGAVOLT_HAVOC:: + loadspritegfx ANIM_TAG_HAVOC_SPEAR + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT + loadspritegfx ANIM_TAG_ELECTRIC_ORBS + loadspritegfx ANIM_TAG_ELECTRICITY + loadspritegfx ANIM_TAG_SPARK_2 + loadspritegfx ANIM_TAG_GRAY_SMOKE + loadspritegfx ANIM_TAG_THIN_RING + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x6 0x0 0x10 0x0000 + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + launchtemplate gGigavoltHavocChargingSpearSpriteTemplate 0x2 0x1 ANIM_ATTACKER + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1 + delay 0xa + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1 + delay 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1 + delay 0x0 + delay 0x5 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1 + delay 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1 + delay 0x5 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x4 0x8 0x0 0x0 0x10 0xc 0x20 0x14 0x0 0x0 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x4 0x8 0x0 0x0 0x10 0xc 0x60 0x14 0x1 0x0 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x4 0x8 0x0 0x0 0x10 0xc 0xa0 0x14 0x0 0x0 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x4 0x8 0x0 0x0 0x10 0xc 0xe0 0x14 0x2 0x0 + delay 0x5 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1 + delay 0x0 + launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1 + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + monbg ANIM_ATTACKER + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER +@ launchtask AnimTask_ElectricChargingParticles 0x2 0x4 0x0 0x3c 0x2 0xc @charge particles to user +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x82 0x8 0x0 0x0 0x10 0x2c 0x20 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x82 0x8 0x0 0x0 0x10 0x2c 0x60 0x28 0x1 0x3 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x82 0x8 0x0 0x0 0x10 0x2c 0xa0 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x82 0x8 0x0 0x0 0x10 0x2c 0xe0 0x28 0x2 0x3 + delay 0x14 + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x82 0x8 0x0 0x0 0x12 0x2c 0x0 0x28 0x0 0x3 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x82 0x8 0x0 0x0 0x12 0x2c 0x40 0x28 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x82 0x8 0x0 0x0 0x12 0x2c 0x80 0x28 0x0 0x3 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x82 0x8 0x0 0x0 0x12 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + delay 0x14 + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x82 0x8 0x0 0x0 0x14 0x2c 0x0 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x82 0x8 0x0 0x0 0x14 0x2c 0x40 0x28 0x1 0x3 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x82 0x8 0x0 0x0 0x14 0x2c 0x80 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x82 0x8 0x0 0x0 0x14 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + delay 0x14 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x0 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x40 0x28 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x80 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + delay 0x14 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x0 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x40 0x28 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x80 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + delay 0x14 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x0 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x40 0x28 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x80 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + delay 0x14 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x0 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x40 0x28 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x80 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + delay 0x14 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x0 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x40 0x28 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x80 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + delay 0x14 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x0 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x40 0x28 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x80 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + delay 0x14 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x0 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x40 0x28 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x80 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + delay 0x14 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x0 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x40 0x28 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x80 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + delay 0x14 + waitforvisualfinish + playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET + launchtemplate gGigavoltHavocLaunchSpearSpriteTemplate 0x83 0x1 0x0 + launchtemplate gElectricPuffSpriteTemplate 0x2 0x3 0x0 0x10 0x10 + delay 0x2 + launchtemplate gElectricPuffSpriteTemplate 0x2 0x3 0x0 0xfff0 0xfff0 + delay 0xe + clearmonbg ANIM_ATTACKER + launchtask AnimTask_HorizontalShake 0x5 0x3 ANIM_TARGET 0x8 0x1c @shake target + unloadspritegfx ANIM_TAG_HAVOC_SPEAR + loadspritegfx ANIM_TAG_SHOCK_3 @thunderbolt + launchtemplate gThunderboltOrbSpriteTemplate 0x83 0x4 0x2c 0x0 0x0 0x3 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x0 0x0 0xc 0x5bff +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x20 0x2c 0x0 0x28 0x0 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x20 0x2c 0x40 0x28 0x1 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x20 0x2c 0x80 0x28 0x0 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x20 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x10 0x2c 0x20 0x28 0x0 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x10 0x2c 0x60 0x28 0x1 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x10 0x2c 0xa0 0x28 0x0 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x10 0x2c 0xe0 0x28 0x2 0x8003 + playsewithpan SE_M_HYPER_BEAM, SOUND_PAN_TARGET + delay 0x19 + loadspritegfx ANIM_TAG_VERTICAL_HEX + playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET +@ call HavocSpearSparkTarget + call HavocSpearGeyser + playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET +@ call HavocSpearSparkTarget + call HavocSpearGeyser + playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET +@ call HavocSpearSparkTarget + call HavocSpearGeyser + playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET +@ call HavocSpearSparkTarget + call HavocSpearGeyser + playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET +@ call HavocSpearSparkTarget + call HavocSpearGeyser + playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET +@ call HavocSpearSparkTarget + call HavocSpearGeyser + playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET +@ call HavocSpearSparkTarget + call HavocSpearGeyser + playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_DEF, 0x2, 0xc, 0x0, 0x5bff + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG, 0x1, 0x10, 0x0, 0x0000 + waitforvisualfinish + launchtask AnimTask_AllBanksVisible 0xa 0x0 + waitforvisualfinish + end +HavocSpearGeyser: + createsprite gGigavoltHavocGeyserSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0xfffc, 0x10 @ -4, -0x10 + delay 1 + createsprite gGigavoltHavocGeyserSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0x100D, 0x10 @ + delay 1 + createsprite gGigavoltHavocGeyserSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0x4, 0x10 + delay 1 + createsprite gGigavoltHavocGeyserSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0xfff0, 0x10 + delay 1 + return +HavocSpearSparkTarget: +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x4 0x8 0x0 0x0 0x20 0xc 0x0 0x14 0x0 0x8000 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x4 0x8 0x0 0x0 0x10 0xc 0x0 0x14 0x0 0x8000 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x4 0x8 0x0 0x0 0x20 0xc 0x40 0x14 0x1 0x8000 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x4 0x8 0x0 0x0 0x10 0xc 0x40 0x14 0x1 0x8000 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x4 0x8 0x0 0x0 0x20 0xc 0x80 0x14 0x0 0x8000 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x4 0x8 0x0 0x0 0x10 0xc 0x80 0x14 0x0 0x8000 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x4 0x8 0x0 0x0 0x20 0xc SOUND_PAN_ATTACKER 0x14 0x2 0x8000 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x4 0x8 0x0 0x0 0x10 0xc SOUND_PAN_ATTACKER 0x14 0x2 0x8000 + return + + +Move_SHATTERED_PSYCHE:: + loadspritegfx ANIM_TAG_IMPACT @hit + loadspritegfx ANIM_TAG_BLUE_LIGHT_WALL @reflect + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge + loadspritegfx ANIM_TAG_THIN_RING @ring + loadspritegfx ANIM_TAG_PINK_PETAL @pink + loadspritegfx ANIM_TAG_TORN_METAL @brick break shatter + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPalExclude 0x5 0x5 0x0 0x0 0x0 0x10 0x0 + waitforvisualfinish + launchtask AnimTask_SetAllNonAttackersInvisiblity 0x5 0x1 0x1 + waitforvisualfinish + launchtemplate gShatteredPsychePinkChargeSpriteTemplate 0x2 0x1 0x0 + launchtemplate gShatteredPsycheRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0 + playsewithpan SE_M_SUPERSONIC, SOUND_PAN_ATTACKER + delay 0xc + launchtemplate gShatteredPsycheRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0 + delay 0xc + launchtemplate gShatteredPsycheRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0 + playsewithpan SE_M_SUPERSONIC, SOUND_PAN_ATTACKER + delay 0xc + launchtemplate gShatteredPsycheRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0 + delay 0xc + launchtemplate gShatteredPsycheRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0 + playsewithpan SE_M_SUPERSONIC, SOUND_PAN_ATTACKER + delay 0xc + launchtemplate gShatteredPsycheRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0 + delay 0xc + launchtemplate gShatteredPsycheRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0 + playsewithpan SE_M_SUPERSONIC, SOUND_PAN_ATTACKER + delay 0xc + launchtemplate gShatteredPsycheRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0 + delay 0xc + launchtemplate gShatteredPsycheRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0 + playsewithpan SE_M_SUPERSONIC, SOUND_PAN_ATTACKER + delay 0x4 + fadetobg BG_SHATTERED_PSYCHE + delay 0x4 + launchtask AnimTask_BlendBattleAnimPalExclude 0x5 0x5 0x0 0x0 0x10 0x0 0x0 + delay 0x7 + playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER + launchtask AnimTask_ShakeMon 0x2 0x5 0x1 0x3 0x0 0xf 0x1 + launchtask AnimTask_ScaleMonAndRestore 0x5 0x5 0xfffc 0xfffc 0xf 0x1 0x1 + waitforvisualfinish +ShatteredPsycheCheckBattler: + launchtask AnimTask_IsTargetPlayerSide 0x2 0x0 + jumpargeq 0x7 ANIM_TARGET ShatteredPsycheOnPlayer +ShatteredPsycheOnOpponent: + call ShatteredPsycheFlingOpponent + waitforvisualfinish + goto ShatteredPsycheFinish +ShatteredPsycheOnPlayer: + call ShatteredPsycheFlingPlayer + waitforvisualfinish + call ShatteredPsycheFlingPlayer + waitforvisualfinish +ShatteredPsycheFinish: + delay 0x8 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + restorebg + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0xf 0x1 + launchtask AnimTask_ScaleMonAndRestore 0x5 0x5 0xfffc 0xfffc 0xf 0x1 0x1 + createsprite gBrickBreakWallShardSpriteTemplate ANIM_TARGET, 2, 0x1, 0x0, 0x0, 0x0 @ -8, -12 + createsprite gBrickBreakWallShardSpriteTemplate ANIM_TARGET, 2, 0x1, 0x1, 0x0, 0x0 + createsprite gBrickBreakWallShardSpriteTemplate ANIM_TARGET, 2, 0x1, 0x2, 0x0, 0x0 + createsprite gBrickBreakWallShardSpriteTemplate ANIM_TARGET, 2, 0x1, 0x3, 0x0, 0x0 + waitbgfadeout + launchtask AnimTask_AllBanksVisible 0xA 0x0 + waitforvisualfinish + end +ShatteredPsycheFlingOpponent: + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xffe6 0x10 0x1 0x4 @ -26, +16 + waitforvisualfinish + launchtemplate gShatteredPsycheReflectHitSpriteTemplate 0x83 0x4 0x1a 0xfff0 0x1 0x1 @ 26, -16 + playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET + delay 0x2 + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x4 + waitforvisualfinish + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0x1a 0xfff0 0x1 0x4 @ -26,-16 + waitforvisualfinish + launchtemplate gShatteredPsycheReflectHitSpriteTemplate 0x83 0x4 0xffe6 0x10 0x1 0x1 @ 26, 16 + playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET + delay 0x2 + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x4 + waitforvisualfinish + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0x0 0x20 0x1 0x4 @ 0,32 + waitforvisualfinish + launchtemplate gShatteredPsycheReflectHitSpriteTemplate 0x83 0x4 0x0 0xffe0 0x1 0x1 @ 0, -32 + playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET + delay 0x2 + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x4 + waitforvisualfinish + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0x0 0xffe0 0x1 0x4 @ 0,-32 + waitforvisualfinish + launchtemplate gShatteredPsycheReflectHitSpriteTemplate 0x83 0x4 0x0 0x20 0x1 0x1 @ 0, 32 + playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET + delay 0x2 + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x4 + waitforvisualfinish + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0x1a 0x10 0x1 0x4 @ 26,16 + waitforvisualfinish + launchtemplate gShatteredPsycheReflectHitSpriteTemplate 0x83 0x4 0xffe6 0xfff0 0x1 0x1 @ -26, -16 + playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET + delay 0x2 + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x4 + waitforvisualfinish + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xffe6 0xffe0 0x1 0x4 @ 26,-16 + waitforvisualfinish + launchtemplate gShatteredPsycheReflectHitSpriteTemplate 0x83 0x4 0x1a 0x10 0x1 0x1 @ 0, 32 + playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET + delay 0x2 + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x5 + waitforvisualfinish + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xffe6 0x10 0x1 0x4 @ -26, +16 + waitforvisualfinish + launchtemplate gShatteredPsycheReflectHitSpriteTemplate 0x83 0x4 0x1a 0xfff0 0x1 0x1 @ 26, -16 + playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET + delay 0x2 + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x4 + waitforvisualfinish + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0x1a 0xfff0 0x1 0x4 @ -26,-16 + waitforvisualfinish + launchtemplate gShatteredPsycheReflectHitSpriteTemplate 0x83 0x4 0xffe6 0x10 0x1 0x1 @ 26, 16 + playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET + delay 0x2 + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x4 + waitforvisualfinish + return +ShatteredPsycheFlingPlayer: + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xffe6 0x10 0x1 0x4 @ -26,-16 + waitforvisualfinish + launchtemplate gShatteredPsycheReflectHitSpriteTemplate 0x83 0x4 0x1a 0xfff0 0x1 0x1 @ 26, 16 + playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET + delay 0x2 + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x4 + waitforvisualfinish + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0x20 0x0 0x1 0x4 @ 32,0 + waitforvisualfinish + launchtemplate gShatteredPsycheReflectHitSpriteTemplate 0x83 0x4 0xffe0 0x0 0x1 0x1 @ + playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET + delay 0x2 + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x4 + waitforvisualfinish + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xffe0 0x0 0x1 0x4 @ -32,0 + waitforvisualfinish + launchtemplate gShatteredPsycheReflectHitSpriteTemplate 0x83 0x4 0x20 0x0 0x1 0x1 @ 32, 0 + playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET + delay 0x2 + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x4 + waitforvisualfinish + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xa 0x20 0x1 0x4 @ 10, -32 + waitforvisualfinish + launchtemplate gShatteredPsycheReflectHitSpriteTemplate 0x83 0x4 0xfff6 0x5 0x1 0x1 @ 10, -32 + playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET + delay 0x2 + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x5 + waitforvisualfinish + return + + +Move_SUBZERO_SLAMMER:: + loadspritegfx ANIM_TAG_ICE_CRYSTALS @ice + loadspritegfx ANIM_TAG_ICE_CUBE @glacier + loadspritegfx ANIM_TAG_EXPLOSION_2 @explosion + launchtask AnimTask_BlendParticle, 0x5, 0x5, ANIM_TAG_EXPLOSION_2, 0x0, 0xC, 0xC, 0x6A23 + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + fadetobg BG_ICE + waitbgfadeout + launchtask AnimTask_IsTargetPlayerSide 0x2 0x0 + jumpargeq 0x7 ANIM_TARGET SubzeroSlammerOnPlayer +SubzeroSlammerOnOpponent: + launchtask AnimTask_StartSlidingBg 0x5 0x4 0xfd00 0x0 0x0 0xFFFF + goto SubzeroSlammerFinish +SubzeroSlammerOnPlayer: + launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0300 0x0 0x0 0xFFFF +SubzeroSlammerFinish: + waitbgfadein + monbg ANIM_ATK_PARTNER + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x0 0x0 0xb 0x7e80 + launchtemplate gSubzeroSlammerIceSpinSpriteTemplate 0x83 0x4 0x0 0x0 0x38 0x0 + playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER + delay 0x2 + launchtemplate gSubzeroSlammerIceSpinSpriteTemplate 0x83 0x4 0x0 0x0 0x38 0x4 + playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER + delay 0x2 + launchtemplate gSubzeroSlammerIceSpinSpriteTemplate 0x83 0x4 0x0 0x0 0x38 0x8 + playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER + delay 0x2 + launchtemplate gSubzeroSlammerIceSpinSpriteTemplate 0x83 0x4 0x0 0x0 0x38 0xc + playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER + delay 0x2 + launchtemplate gSubzeroSlammerIceSpinSpriteTemplate 0x83 0x4 0x0 0x0 0x38 0x10 + playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER + delay 0x2 + launchtemplate gSubzeroSlammerIceSpinSpriteTemplate 0x83 0x4 0x0 0x0 0x38 0x14 + playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER + delay 0x2 + launchtemplate gSubzeroSlammerIceSpinSpriteTemplate 0x83 0x4 0x0 0x0 0x38 0x18 + playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER + delay 0x20 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x0 0xb 0x0 0x7e80 + delay 0x20 + launchtask AnimTask_FrozenIceCubeAttacker 0x2 0x0 + waitplaysewithpan SE_M_HAIL, SOUND_PAN_TARGET, 0x11 + waitforvisualfinish + call SubzeroSlammerIceSwirl + launchtask AnimTask_BlendColorCycle 0x2 0x6 ANIM_PAL_ATK 0x2 0x2 0x0 0xb 0x7e80 + launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1 + call SubzeroSlammerIceSwirl + call SubzeroSlammerIceSwirl + delay 0xa + clearmonbg ANIM_ATK_PARTNER + launchsoundtask SoundTask_LoopSEAdjustPanning 0x7 0xb0 0xffc0 SOUND_PAN_TARGET 0x4 0x4 0x0 0xa + launchtemplate gIceBeamOuterCrystalSpriteTemplate 0x2 0x5 0x14 0xc 0x0 0xc 0x14 + launchtemplate gIceBeamOuterCrystalSpriteTemplate 0x2 0x5 0x14 0xfff4 0x0 0xfff4 0x14 + delay 0x1 + call IceBeamCreateCrystals + call IceBeamCreateCrystals + call IceBeamCreateCrystals + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x4 0x0 0x7 0x7e80 + launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x2 0x0 0x19 0x1 + call IceBeamCreateCrystals + call IceBeamCreateCrystals + call IceBeamCreateCrystals + call IceBeamCreateCrystals + call IceBeamCreateCrystals + call IceBeamCreateCrystals + call IceBeamCreateCrystals + call IceBeamCreateCrystals + call IceBeamCreateCrystals + call IceBeamCreateCrystals + call IceBeamCreateCrystals + call IceBeamCreateCrystals + call IceCrystalEffectShort + delay 0x5 + monbg ANIM_DEF_PARTNER + launchtask AnimTask_FrozenIceCube 0x82 0x0 + playsewithpan SE_M_HAIL, SOUND_PAN_TARGET + waitforvisualfinish + loadspritegfx ANIM_TAG_TORN_METAL + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET + delay 0x3 + createsprite gBrickBreakWallShardSpriteTemplate ANIM_TARGET, 2, 0x1, 0x0, 0x0, 0x0 @ -8, -12 + createsprite gBrickBreakWallShardSpriteTemplate ANIM_TARGET, 2, 0x1, 0x1, 0x0, 0x0 + createsprite gBrickBreakWallShardSpriteTemplate ANIM_TARGET, 2, 0x1, 0x2, 0x0, 0x0 + createsprite gBrickBreakWallShardSpriteTemplate ANIM_TARGET, 2, 0x1, 0x3, 0x0, 0x0 + launchtask AnimTask_HorizontalShake 0x5 0x3 ANIM_TARGET 0x8 0x1c + call SubzeroSlammerExplosion + call SubzeroSlammerExplosion + clearmonbg ANIM_DEF_PARTNER + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x5 0x7 0x0 0x7e80 + waitforvisualfinish + restorebg + waitbgfadeout + setarg 0x7 0xffff + launchtask AnimTask_AllBanksVisible 0xA 0x0 + waitbgfadein + waitforvisualfinish + end +SubzeroSlammerExplosion: + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + launchtemplate gSubzeroSlammerExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1 + launchtemplate gIceCrystalHitLargeSpriteTemplate 0x82, 0x3, 0xfff6 0xfff6 0x0 + delay 0x3 + launchtemplate gIceCrystalHitSmallSpriteTemplate 0x82, 0x3, 0xa 0x14 0x0 + delay 0x3 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + launchtemplate gSubzeroSlammerExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1 + launchtemplate gIceCrystalHitLargeSpriteTemplate 0x82, 0x3, 0xfffb 0xa 0x0 + delay 0x3 + launchtemplate gIceCrystalHitSmallSpriteTemplate 0x82, 0x3, 0x11 0xfff4 0x0 + delay 0x3 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + launchtemplate gSubzeroSlammerExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + launchtemplate gIceCrystalHitSmallSpriteTemplate 0x82, 0x3, 0xfff1 0xf 0x0 + delay 0x3 + launchtemplate gIceCrystalHitSmallSpriteTemplate 0x82, 0x3, 0x0 0x0 0x0 + delay 0x3 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + launchtemplate gSubzeroSlammerExplosionSpriteTemplate 0x83 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 + launchtemplate gIceCrystalHitLargeSpriteTemplate 0x82, 0x3, 0x14 0x2 0x0 + delay 0x3 + launchtemplate gIceCrystalHitLargeSpriteTemplate 0x82, 0x3, 0xfff6 0xfff6 0x0 + delay 0x3 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + launchtemplate gSubzeroSlammerExplosionSpriteTemplate 0x83 0x4 0x10 0x10 ANIM_TARGET 0x1 + launchtemplate gIceCrystalHitSmallSpriteTemplate 0x82, 0x3, 0x11 0xfff4 0x0 + delay 0x3 + launchtemplate gIceCrystalHitSmallSpriteTemplate 0x82, 0x3, 0xfff1 0xf 0x0 + delay 0x3 + return +SubzeroSlammerIceSwirl: + playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER + launchtemplate gSubzeroSlammerIceSwirlSpriteTemplate 0x82 0x7 0x0 0x1c 0x180 0x32 0x8 0x32 ANIM_ATTACKER + delay 0x2 + launchtemplate gSubzeroSlammerIceSwirlSpriteTemplate 0x82 0x7 0x0 0x20 0xf0 0x28 0xb 0xffd2 ANIM_ATTACKER + delay 0x2 + playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER + launchtemplate gSubzeroSlammerIceSwirlSpriteTemplate 0x82 0x7 0x0 0x21 0x1a0 0x28 0x4 0x2a ANIM_ATTACKER + delay 0x2 + launchtemplate gSubzeroSlammerIceSwirlSpriteTemplate 0x82 0x7 0x0 0x1f 0x120 0x2d 0x6 0xffd6 ANIM_ATTACKER + delay 0x2 + playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER + launchtemplate gSubzeroSlammerIceSwirlSpriteTemplate 0x82 0x7 0x0 0x1c 0x1c0 0x2d 0xb 0x2e ANIM_ATTACKER + delay 0x2 + launchtemplate gSubzeroSlammerIceSwirlSpriteTemplate 0x82 0x7 0x0 0x21 0x1d0 0x32 0xa 0xffce ANIM_ATTACKER + delay 0x2 + return + + +Move_DEVASTATING_DRAKE:: + loadspritegfx ANIM_TAG_PURPLE_DRAKE + loadspritegfx ANIM_TAG_POISON_BUBBLE @ purple + loadspritegfx ANIM_TAG_FOCUS_ENERGY @ focus energy + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @ shock wave + playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER + call DevastatingDrakeBuffEffect + delay 0x8 + launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xb 0x40c0 + launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1 + call DevastatingDrakeBuffEffect + delay 0x8 + call DevastatingDrakeBuffEffect + waitforvisualfinish + unloadspritegfx ANIM_TAG_FOCUS_ENERGY + playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER + launchtemplate gDevastatingDrakeShockwaveSpriteTemplate 0x2 0x0 + delay 0x2a + unloadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT + monbg ANIM_ATTACKER + playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER + launchtemplate gDevastatingDrakeDrakeUpSpriteTemplate 0x2 0x7 0x0 0x0 0x4e0 0x24 0x15 0x1 ANIM_ATTACKER + clearmonbg ANIM_ATTACKER + fadetobg BG_SKY + invisible ANIM_ATTACKER + invisible ANIM_TARGET + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitbgfadeout + launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0 0x1000 0x0 0xffff + waitbgfadein + launchtask AnimTask_IsTargetPlayerSide 0x2 0x0 + jumpargeq 0x7 ANIM_TARGET DevastatingDrakeOnPlayer +DevastatingDrakeOnOpponent: + playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER + launchtemplate gDevastatingDrakeRightSpriteTemplate 0x32 0x5 0xfff0 0x88 0x100 0x38 0x15 @left to right + waitforvisualfinish + delay 0xa + playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER + launchtemplate gDevastatingDrakeLeftSpriteTemplate 0x32 0x5 0x0120 0x38 0xfff0 0x38 0x15 @right to left + waitforvisualfinish + delay 0xa + playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER + launchtemplate gDevastatingDrakeRightSpriteTemplate 0x32 0x5 0xfff0 0x08 0x100 0x0f 0x15 @left to right + goto DevastatingDrakeFinish +DevastatingDrakeOnPlayer: + playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER + launchtemplate gDevastatingDrakeLeftSpriteTemplate 0x32 0x5 0x0120 0x08 0xfff0 0x0f 0x15 @right to left + waitforvisualfinish + delay 0xa + playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER + launchtemplate gDevastatingDrakeRightSpriteTemplate 0x32 0x5 0xfff0 0x38 0x100 0x38 0x15 @left to right + waitforvisualfinish + delay 0xa + playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER + launchtemplate gDevastatingDrakeLeftSpriteTemplate 0x32 0x5 0x0120 0x78 0xfff0 0x58 0x15 @right to left +DevastatingDrakeFinish: + call UnsetPsychicBg + waitforvisualfinish + visible ANIM_TARGET + delay 0xa + playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER + launchtemplate gDevastatingDrakeStrikeSpriteTemplate 0x82 0x1 0x14 + delay 0x10 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + loadspritegfx ANIM_TAG_EXPLOSION + launchtask AnimTask_BlendParticle, 0x5, 0x5, ANIM_TAG_EXPLOSION, 0x0, 0xC, 0xC, 0x502B + launchtask AnimTask_HorizontalShake 0x5 0x3 0x1 0x5 0x35 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x0 0x10 0x40c0 @ fade to purple + call DevastatingDrakeExplosion + delay 0x6 + launchtask AnimTask_IsTargetPartner 0x5 0x0 + jumpargeq 0x0 0x1 DevastatingDrakeFadeTargetPartner + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_ALL - ANIM_PAL_DEF, 0x6, 0x0, 0x10, 0x40c0 + call DevastatingDrakeExplosion + waitforvisualfinish + playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_ALL - ANIM_PAL_DEF, 0x0, 0x10, 0x0, 0x40c0 @ fade all but target back +DevastatingDrakeUniversalEnding: + loadspritegfx ANIM_TAG_FIRE_PLUME + loadspritegfx ANIM_TAG_VERTICAL_HEX + loadspritegfx ANIM_TAG_EXPLOSION_2 @explosion + unloadspritegfx ANIM_TAG_PURPLE_DRAKE + launchtask AnimTask_BlendParticle, 0x5, 0x5, ANIM_TAG_FIRE_PLUME, 0x0, 0xC, 0xC, 0x502B + launchtask AnimTask_BlendParticle, 0x5, 0x5, ANIM_TAG_VERTICAL_HEX, 0x0, 0xC, 0xC, 0x502B + launchtask AnimTask_BlendParticle, 0x5, 0x5, ANIM_TAG_EXPLOSION_2, 0x0, 0xC, 0xC, 0x502B + launchtask AnimTask_HorizontalShake 0x5 0x3 0x1 0x5 0x20 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + call DevastatingDrakeGeyser + playsewithpan SE_M_SACRED_FIRE, SOUND_PAN_ATTACKER + launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x2 0x6 0xffe0 0x0 0x18 0x0 0x0 0x0 + launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x2 0x6 0xffec 0xfff6 0x18 0x0 0x0 0x0 + launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x42 0x6 0x0 0xfff0 0x18 0x0 0x0 0x0 + launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x42 0x6 0x14 0xfff6 0x18 0x0 0x0 0x0 + launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x42 0x6 0x20 0x0 0x18 0x0 0x0 0x0 + launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x42 0x6 0x14 0xa 0x18 0x0 0x0 0x0 + launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x2 0x6 0x0 0x10 0x18 0x0 0x0 0x0 + launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x2 0x6 0xffec 0xa 0x18 0x0 0x0 0x0 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + call DevastatingDrakeGeyser + playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_ATTACKER + launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x2 0x6 0xffc0 0x0 0x18 0x0 0x0 0x0 + launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x6 0x6 0xffd8 0xffec 0x18 0x0 0x0 0x0 + launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x46 0x6 0x0 0xffe0 0x18 0x0 0x0 0x0 + launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x46 0x6 0x28 0xffec 0x18 0x0 0x0 0x0 + launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x42 0x6 0x40 0x0 0x18 0x0 0x0 0x0 + launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x42 0x6 0x28 0x14 0x18 0x0 0x0 0x0 + launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x2 0x6 0x0 0x20 0x18 0x0 0x0 0x0 + launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x2 0x6 0xffd8 0x14 0x18 0x0 0x0 0x0 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + call DevastatingDrakeGeyser + playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_ATTACKER + launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x2 0x6 0xffa0 0x0 0x18 0x0 0x0 0x0 + launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x6 0x6 0xffc4 0xffe2 0x18 0x0 0x0 0x0 + launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x46 0x6 0x0 0xffd0 0x18 0x0 0x0 0x0 + launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x46 0x6 0x3c 0xffe2 0x18 0x0 0x0 0x0 + launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x42 0x6 0x60 0x0 0x18 0x0 0x0 0x0 + launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x42 0x6 0x3c 0x1e 0x18 0x0 0x0 0x0 + launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x2 0x6 0x0 0x30 0x18 0x0 0x0 0x0 + launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x2 0x6 0xffc4 0x1e 0x18 0x0 0x0 0x0 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + call DevastatingDrakeGeyser + delay 0x4 + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x10 0x0 0x40c0 @ fade from purple + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ALL_BATTLERS 0x2 0x0 0x0 0x0 @ reset all colours + waitforvisualfinish + launchtask AnimTask_AllBanksVisible 0xA 0x0 + waitforvisualfinish + end +DevastatingDrakeFadeTargetPartner: + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG | ANIM_PAL_ATK | ANIM_PAL_OPPONENT1 | ANIM_PAL_OPPONENT2, 0x6, 0x0, 0x10, 0x40c0 + call DevastatingDrakeExplosion + waitforvisualfinish + playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG | ANIM_PAL_ATK | ANIM_PAL_OPPONENT1 | ANIM_PAL_OPPONENT2, 0x0, 0x10, 0x0, 0x40c0 @ fade all but target back + goto DevastatingDrakeUniversalEnding +DevastatingDrakeBuffEffect: + launchtemplate gDevastatingDrakePurpleEnergySpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2 + delay 0x4 + launchtemplate gDevastatingDrakePurpleEnergySpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1 + delay 0x4 + launchtemplate gDevastatingDrakePurpleEnergySpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2 + delay 0x4 + launchtemplate gDevastatingDrakePurpleEnergySpriteTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3 + delay 0x4 + launchtemplate gDevastatingDrakePurpleEnergySpriteTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1 + return +DevastatingDrakeGeyser: + launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x84, 0x4, 0x0003 0x0005 0x1 0x0 + launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0xfffc 0x10 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + delay 0x0 + launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x84, 0x4, 0xfff5 0xfff1 0x1 0x0 + launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0x100D 0x10 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + delay 0x0 + launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x84, 0x4, 0x0008 0xfffb 0x1 0x0 + launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0x4 0x10 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + delay 0x0 + launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x84, 0x4, 0xfffa 0x0012 0x1 0x0 + launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0xfff0 0x10 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + delay 0x0 + launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x84, 0x4, 0x0000 0x0005 0x1 0x0 + launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0xfffc 0x10 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x84, 0x4, 0x0003 0xfff5 ANIM_TARGET 0x0 + launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0x100D 0x10 + delay 0x0 + launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x84, 0x4, 0xfff5 0xffe1 ANIM_TARGET 0x0 + launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0x4 0x10 + delay 0x0 + launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x84, 0x4, 0x0008 0xffeb ANIM_TARGET 0x0 + launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0xfff0 0x10 + delay 0x0 + launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x84, 0x4, 0xfffa 0x0002 ANIM_TARGET 0x0 + launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0xfffc 0x10 + delay 0x0 + launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x84, 0x4, 0x0000 0xfff5 ANIM_TARGET 0x0 + launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0x100D 0x10 + delay 0x0 + launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x84, 0x4, 0x0003 0xffe5 ANIM_TARGET 0x0 + launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0x4 0x10 + delay 0x0 + launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x84, 0x4, 0xfff5 0xffd1 ANIM_TARGET 0x0 + launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0xfff0 0x10 + delay 0x0 + launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x84, 0x4, 0x0008 0xffdb ANIM_TARGET 0x0 + launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0xfffc 0x10 + delay 0x0 + launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x84, 0x4, 0xfffa 0xfff2 ANIM_TARGET 0x0 + launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0x100D 0x10 + delay 0x0 + launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x84, 0x4, 0x0000 0xffe5 ANIM_TARGET 0x0 + launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0x4 0x10 + delay 0x0 + launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0xfff0 0x10 + return +DevastatingDrakeExplosion: + launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x83 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x83 0x4 0x10 0x10 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + return + + +Move_BLACK_HOLE_ECLIPSE:: + loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @shock wave + loadspritegfx ANIM_TAG_SHADOW_BALL @shadow ball + loadspritegfx ANIM_TAG_THIN_RING @ring + loadspritegfx ANIM_TAG_ICE_CHUNK @blue + loadspritegfx ANIM_TAG_BLACK_BALL_2 @black + invisible ANIM_TARGET + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER + call EndureEffect + delay 0x8 + launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xb 0x0000 + launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1 + call EndureEffect + delay 0x8 + call EndureEffect + waitforvisualfinish + unloadspritegfx ANIM_TAG_FOCUS_ENERGY + playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER + launchtemplate gBlackHoleEclipseShockwaveSpriteTemplate 0x2 0x0 + waitforvisualfinish + unloadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT + loadspritegfx ANIM_TAG_HANDS_AND_FEET @black + playsewithpan SE_M_NIGHTMARE, SOUND_PAN_ATTACKER + launchtemplate gBlackHoleEclipseHoleUserSpriteTemplate 0x2 0x4 0x0 0x0 ANIM_ATTACKER 0x0 + launchtemplate gBlackHoleEclipseBlueRingSpriteTemplate 0x3 0x4 0x0 0x0 0x0 0x0 + delay 0x8 + launchtemplate gBlackHoleEclipseBlackRingSpriteTemplate 0x3 0x4 0x0 0x0 0x0 0x0 + delay 0x8 + launchtemplate gBlackHoleEclipseBlueRingSpriteTemplate 0x3 0x4 0x0 0x0 0x0 0x0 + delay 0x8 + launchtemplate gBlackHoleEclipseBlackRingSpriteTemplate 0x3 0x4 0x0 0x0 0x0 0x0 + delay 0x8 + waitforvisualfinish + stopsound + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x07 0x0000 + loadspritegfx ANIM_TAG_WISP_ORB @will o wisp + invisible ANIM_ATTACKER + loopsewithpan SE_M_FLAMETHROWER, SOUND_PAN_TARGET, 0x10, 0x5 + launchtemplate gBlackHoleEclipseWispSpriteTemplate 0x2 0x3 0x0 0x10 0x0 + delay 0x3 + launchtemplate gBlackHoleEclipseWispSpriteTemplate 0x3 0x3 0x0 0x10 0x1 + delay 0x3 + launchtemplate gBlackHoleEclipseWispSpriteTemplate 0x4 0x3 0x0 0x10 0x2 + delay 0x3 + launchtemplate gBlackHoleEclipseWispSpriteTemplate 0x4 0x3 0x0 0x10 0x3 + waitforvisualfinish + fadetobg BG_BLACKHOLE_ECLIPSE + playsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_TARGET + loadspritegfx ANIM_TAG_VERTICAL_HEX @red + launchtemplate gBlackHoleEclipseRedRingSpriteTemplate 0x3 0x4 0x0 0x0 0x100 0x0 + delay 0x4 + launchtemplate gBlackHoleEclipseRedRingSpriteTemplate 0x3 0x4 0x0 0x0 0x100 0x0 + delay 0x4 + launchtemplate gBlackHoleEclipseRedRingSpriteTemplate 0x3 0x4 0x0 0x0 0x100 0x0 + waitbgfadeout + unloadspritegfx ANIM_TAG_WISP_ORB + launchtemplate gBlackHoleEclipseHoleSpriteTemplate 0x2 0x4 0x0 0x0 ANIM_TARGET 0x0 @ eclipse at target origin + delay 0x10 + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0x35 0xffed 0x1 0x2 @ target down and left (instantaneously (last arg)) + delay 0x2 + visible ANIM_TARGET + loopsewithpan SE_M_SUPERSONIC, SOUND_PAN_TARGET, 0xa, 0x5 + launchtask AnimTask_RotateMonSpriteToSide 0x2 0x4 0x50 0xfc00 ANIM_TARGET 0x0 @ spin target around (0x50 (time), -0x400 (rot speed)) + launchtemplate gBlackHoleEclipseBlueRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + delay 0x8 + launchtemplate gBlackHoleEclipseRedRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + delay 0x8 + launchtemplate gBlackHoleEclipseRedRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + delay 0x8 + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x30 @ target back to origin (slowly) + launchtemplate gBlackHoleEclipseBlueRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + delay 0x8 + launchtemplate gBlackHoleEclipseRedRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + delay 0x8 + launchtemplate gBlackHoleEclipseRedRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + delay 0x15 + invisible ANIM_TARGET + delay 0x8 + launchtemplate gBlackHoleEclipseBlueRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + delay 0x8 + launchtemplate gBlackHoleEclipseRedRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + delay 0x8 + launchtemplate gBlackHoleEclipseRedRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + delay 0x8 + launchtemplate gBlackHoleEclipseHoleShrinkSpriteTemplate 0x2 0x4 0x0 0x0 ANIM_TARGET 0x0 + waitforvisualfinish + loadspritegfx ANIM_TAG_SPARKLE_4 @detect + launchtemplate gTargetTwinkleSpriteTemplate 0xd 0x3 0x0 0x0 ANIM_TARGET @detect star + delay 0x2 + unloadspritegfx ANIM_TAG_SHADOW_BALL + unloadspritegfx ANIM_TAG_THIN_RING + unloadspritegfx ANIM_TAG_ICE_CHUNK + unloadspritegfx ANIM_TAG_BLACK_BALL_2 + loadspritegfx ANIM_TAG_EXPLOSION_2 + call BlackHoleEclipseExplosion + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_ALL_BATTLERS | ANIM_PAL_BG, 0x1, 0x0, 0x10, 0x7fff @ bg to white pal + call BlackHoleEclipseExplosion + waitforvisualfinish + delay 0x18 + invisible ANIM_TARGET + launchtask AnimTask_RotateMonSpriteToSide 0x2 0x4 0x1 0x0 ANIM_TARGET 0x1 @ fix rotation + invisible ANIM_TARGET + delay 0x1 + waitforvisualfinish + call ResetFromWhiteScreen + end +BlackHoleEclipseExplosion: + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gBlackHoleEclipseRedExplosionSpriteTemplate 0x3 0x4 0x0 0x0 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gBlackHoleEclipseRedExplosionSpriteTemplate 0x3 0x4 0x18 0xffe8 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gBlackHoleEclipseRedExplosionSpriteTemplate 0x3 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gBlackHoleEclipseRedExplosionSpriteTemplate 0x3 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gBlackHoleEclipseRedExplosionSpriteTemplate 0x3 0x4 0x10 0x10 ANIM_TARGET 0x1 + delay 0x6 + return +ResetFromWhiteScreen: + launchtask AnimTask_AllBanksInvisible 0xA 0x0 + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ALL_BATTLERS 0x2 0x0 0x0 0x7FFF @everything from white + restorebg + waitbgfadeout + setarg 0x7 0xffff + launchtask AnimTask_AllBanksVisible 0xA 0x0 + waitbgfadein + waitforvisualfinish + delay 0x5 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x0 0x0 0x0 0x7fff + waitforvisualfinish + return + + +Move_TWINKLE_TACKLE:: + loadspritegfx ANIM_TAG_SPARKLE_2 @star + loadspritegfx ANIM_TAG_PINK_PETAL @pink + loadspritegfx ANIM_TAG_THIN_RING @ring + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + playsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER + call TwinkleTacklePinkStars + delay 0x8 + fadetobg BG_TWINKLE_TACKLE + launchtemplate gTwinkleTacklePinkRingSpriteTemplate 0x3 0x4 0x0 0x0 0x0 0x0 + waitbgfadeout + invisible ANIM_TARGET + delay 0x1 + loadspritegfx ANIM_TAG_YELLOW_STAR + launchtemplate gTwinkleTackleStarGrowSpriteTemplate 0x3 0x4 0x0 0x0 0x0 0x0 + waitforvisualfinish + launchtask AnimTask_IsTargetPlayerSide 0x2 0x0 + jumpargeq 0x7 ANIM_TARGET TwinkleTackleOnPlayer +TwinkleTackleOnOpponent: + call PlayerTwinkling + goto TwinkleTackleFinish +TwinkleTackleOnPlayer: + call OpponentTwinkling +TwinkleTackleFinish: + waitforvisualfinish + delay 0x5 + visible ANIM_ATTACKER + visible ANIM_TARGET + launchtask AnimTask_SwayMon 0x5 0x5, 0x0 0x8 2048 1 ANIM_ATTACKER + call TwinkleTackleStars + waitforvisualfinish + launchtask AnimTask_SwayMon 0x5 0x5, 0x0 0x8 2048 1 ANIM_ATTACKER + call TwinkleTackleStars + waitforvisualfinish + loadspritegfx ANIM_TAG_SPARKLE_4 @detect + loadspritegfx ANIM_TAG_IMPACT @hit + loadspritegfx ANIM_TAG_PAIN_SPLIT @pain-split + delay 0x1 + launchtemplate gTwinkleTackleYellowImpactSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x0 + call TwinkleTackleStarsTarget + playsewithpan SE_M_WATERFALL, SOUND_PAN_TARGET + delay 0x5 + launchtask AnimTask_TwinkleTackleLaunch 0x2 0x1 89 + delay 89 + playsewithpan SE_M_DETECT, SOUND_PAN_TARGET + launchtemplate gTwinkleTackleTwinkleSpriteTemplate 0x8d, 0x3, 0x0 0x0 ANIM_TARGET @detect star + waitforvisualfinish + delay 0x10 + restorebg + delay 0x18 + launchtask AnimTask_AllBanksVisible 0xA 0x0 + waitforvisualfinish + end +TwinkleTacklePinkStars: + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0xfff1 0x0 0x0 0x0 0x20 0x3c + launchtemplate gTwinkleTacklePinkRingSpriteTemplate 0x3 0x4 0x0 0x0 0x0 0x0 + delay 0x8 + launchtemplate gTwinkleTacklePinkRingSpriteTemplate 0x3 0x4 0x0 0x0 0x0 0x0 + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0xc 0xfffb 0x0 0x0 0x20 0x3c + delay 0x8 + launchtemplate gTwinkleTacklePinkRingSpriteTemplate 0x3 0x4 0x0 0x0 0x0 0x0 + return +PlayerTwinkling: + playsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER + setarg 0x7 0x0 @;Clear arg 7 so task works properly in Link battles + launchtask AnimTask_SnatchOpposingMonMove 0x2 0x0 @ user fly on screen on enemy side + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x12 0x0 0x0 0x0 0x20 0x1c + delay 0x3 + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x1f 0xfffb 0x0 0x0 0x20 0x1c + delay 0x16 + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x90 0xffc0 0x0 0x0 0x20 0x1c + delay 0x1 + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x80 0xffc0 0x0 0x0 0x20 0x1c + delay 0x1 + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x70 0xffc0 0x0 0x0 0x20 0x1c + delay 0x1 + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x60 0xffc0 0x0 0x0 0x20 0x1c + delay 0x1 + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x50 0xffc0 0x0 0x0 0x20 0x1c + delay 0x1 + playsewithpan SE_M_MORNING_SUN, SOUND_PAN_TARGET + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x40 0xffc0 0x0 0x0 0x20 0x1c + delay 0x1 + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x30 0xffc0 0x0 0x0 0x20 0x1c + delay 0x1 + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x20 0xffc0 0x0 0x0 0x20 0x1c + delay 0x1 + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x10 0xffc0 0x0 0x0 0x20 0x1c + delay 0x1 + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x0 0xffc0 0x0 0x0 0x20 0x1c + delay 0x1 + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0xfff0 0xffc0 0x0 0x0 0x20 0x1c + delay 0x1 + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0xffe0 0xffc0 0x0 0x0 0x20 0x1c + delay 0x1 + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0xffd0 0xffc0 0x0 0x0 0x20 0x1c + delay 0x1 + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0xffc0 0xffc0 0x0 0x0 0x20 0x1c + return +OpponentTwinkling: + playsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER + setarg 0x7 0x0 @;Clear arg 7 so task works properly in Link battles + launchtask AnimTask_SnatchOpposingMonMove 0x2 0x0 @ user fly on screen on enemy side + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x10 0xfffb 0x0 0x0 0x20 0x1c + delay 0x1 + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x20 0xfffb 0x0 0x0 0x20 0x1c + delay 0x1 + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x30 0xfffb 0x0 0x0 0x20 0x1c + delay 0x1 + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x40 0xfffb 0x0 0x0 0x20 0x1c + delay 0x1 + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x50 0xfffb 0x0 0x0 0x20 0x1c + delay 0x1 + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x60 0xfffb 0x0 0x0 0x20 0x1c + delay 0x1 + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x70 0xfffb 0x0 0x0 0x20 0x1c + delay 0x1 + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x80 0xfffb 0x0 0x0 0x20 0x1c + delay 0x1 + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x90 0xfffb 0x0 0x0 0x20 0x1c + delay 0x1 + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0xa0 0xfffb 0x0 0x0 0x20 0x1c + delay 0x5 + playsewithpan SE_M_MORNING_SUN, SOUND_PAN_TARGET + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0xa0 0x2c 0x0 0x0 0x20 0x1c + delay 0x1 + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x90 0x2c 0x0 0x0 0x20 0x1c + delay 0x1 + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x80 0x2c 0x0 0x0 0x20 0x1c + delay 0x1 + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x70 0x2c 0x0 0x0 0x20 0x1c + delay 0x1 + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x60 0x2c 0x0 0x0 0x20 0x1c + delay 0x1 + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x50 0x2c 0x0 0x0 0x20 0x1c + delay 0x1 + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x40 0x2c 0x0 0x0 0x20 0x1c + delay 0x1 + launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x30 0x2c 0x0 0x0 0x20 0x1c + return +TwinkleTackleStars: + playsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER + launchtemplate gTwinkleTackleDigStarSpriteTemplate 0x2 0x6 0x0 0x0 0xc 0x4 0xfff0 0x12 + launchtemplate gTwinkleTackleDigStarSpriteTemplate 0x2 0x6 0x0 0x0 0x10 0x4 0xfff6 0x12 + launchtemplate gTwinkleTackleDigStarSpriteTemplate 0x2 0x6 0x0 0x1 0xe 0x4 0xffee 0x12 + launchtemplate gTwinkleTackleDigStarSpriteTemplate 0x2 0x6 0x0 0x1 0xc 0x4 0xfff0 0x12 + return +TwinkleTackleStarsTarget: + launchtemplate gTwinkleTackleImpactStarsSpriteTemplate 0x83 0x4 0xfff0 0xfff8 0xa0 0xffe0 + launchtemplate gTwinkleTackleImpactStarsSpriteTemplate 0x83 0x4 0xfff0 0xfff8 0xff00 0xffd8 + launchtemplate gTwinkleTackleImpactStarsSpriteTemplate 0x83 0x4 0xfff0 0xfff8 0x80 0xfff0 + launchtemplate gTwinkleTackleImpactStarsSpriteTemplate 0x83 0x4 0xfff0 0xfff8 0x1a0 0xffda + launchtemplate gTwinkleTackleImpactStarsSpriteTemplate 0x83 0x4 0xfff0 0xfff8 0xff80 0xffea + launchtemplate gTwinkleTackleImpactStarsSpriteTemplate 0x83 0x4 0xfff0 0xfff8 0xfe80 0xffe1 + return + +@ signature z moves +Move_CATASTROPIKA:: + loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy + loadspritegfx ANIM_TAG_ROUND_SHADOW @fly + invisible ANIM_TARGET + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER + call EndureEffect + delay 0x8 + launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xb 0x5bff + launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1 + call EndureEffect + delay 0x8 + call EndureEffect + delay 0x8 + playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER + launchtemplate gFlyBallUpSpriteTemplate 0x2 0x4 0x0 0x0 0xd 0x150 + waitforvisualfinish + unloadspritegfx ANIM_TAG_FOCUS_ENERGY + unloadspritegfx ANIM_TAG_ROUND_SHADOW + launchtask AnimTask_GetTimeOfDay 0x2 0x0 + jumpargeq 0x0 0x0 CatastropikaDaytime + jumpargeq 0x0 0x2 CatastropikaAfternoon +CatastropikaNight: + fadetobg BG_BLUE_SKY_NIGHT + goto CatastropikaFinish +CatastropikaDaytime: + fadetobg BG_BLUE_SKY_DAY + goto CatastropikaFinish +CatastropikaAfternoon: + fadetobg BG_BLUE_SKY_AFTERNOON +CatastropikaFinish: + waitbgfadeout + visible ANIM_ATTACKER + loadspritegfx ANIM_TAG_ELECTRIC_ORBS @charge + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge + loadspritegfx ANIM_TAG_SPARK_2 @spark + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + launchtask AnimTask_ElectricChargingParticles 0x2 0x4 0x0 0x3c 0x2 0xc @charge particles to user + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x10 0x2c 0x20 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x10 0x2c 0x60 0x28 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x10 0x2c 0xa0 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x10 0x2c 0xe0 0x28 0x2 0x3 +@ delay 0x14 +@ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x12 0x2c 0x0 0x28 0x0 0x3 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x12 0x2c 0x40 0x28 0x1 0x3 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x12 0x2c 0x80 0x28 0x0 0x3 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x12 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 +@ delay 0x14 +@ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x14 0x2c 0x0 0x28 0x0 0x3 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x14 0x2c 0x40 0x28 0x1 0x3 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x14 0x2c 0x80 0x28 0x0 0x3 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x14 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + delay 0x14 + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + launchtemplate gGrowingChargeOrbSpriteTemplate 0x2 0x1 ANIM_ATTACKER @ charge + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x16 0x2c 0x20 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x16 0x2c 0x60 0x28 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x16 0x2c 0xa0 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x16 0x2c 0xe0 0x28 0x2 0x3 + delay 0x14 + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x18 0x2c 0x0 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x18 0x2c 0x40 0x28 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x18 0x2c 0x80 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x18 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + delay 0x14 + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1a 0x2c 0x0 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1a 0x2c 0x40 0x28 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1a 0x2c 0x80 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1a 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + delay 0x14 + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1c 0x2c 0x0 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1c 0x2c 0x40 0x28 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1c 0x2c 0x80 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1c 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + delay 0x14 + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1e 0x2c 0x0 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1e 0x2c 0x40 0x28 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1e 0x2c 0x80 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1e 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + delay 0x14 + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1e 0x2c 0x0 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1e 0x2c 0x40 0x28 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1e 0x2c 0x80 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1e 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + delay 0x14 + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x0 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x40 0x28 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x80 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + delay 0x14 + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x0 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x40 0x28 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x80 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + delay 0x14 + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x0 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x40 0x28 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x80 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + delay 0x14 + restorebg + waitbgfadeout + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + waitforvisualfinish + loadspritegfx ANIM_TAG_METEOR + invisible ANIM_ATTACKER + visible ANIM_TARGET + playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET + launchtemplate gCatastrokpikaSuperpowerSpriteTemplate 0x83 0x1 0x0 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffe0 0xfff0 0x25 0x2c 0x20 0x8 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffe0 0xfff0 0x25 0x2c 0x60 0x8 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffe0 0xfff0 0x25 0x2c 0xa0 0x8 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffe0 0xfff0 0x25 0x2c 0xe0 0x8 0x2 0x3 + delay 0x1 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffd0 0xffe4 0x25 0x2c 0x20 0x8 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffd0 0xffe4 0x25 0x2c 0x60 0x8 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffd0 0xffe4 0x25 0x2c 0xa0 0x8 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffd0 0xffe4 0x25 0x2c 0xe0 0x8 0x2 0x3 + delay 0x1 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffc0 0xffd8 0x25 0x2c 0x20 0x8 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffc0 0xffd8 0x25 0x2c 0x60 0x8 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffc0 0xffd8 0x25 0x2c 0xa0 0x8 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffc0 0xffd8 0x25 0x2c 0xe0 0x8 0x2 0x3 + delay 0xd + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xff00 0x15 0x0 0x4 + loadspritegfx ANIM_TAG_MUD_SAND + launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 ANIM_TARGET 0x0 0xc 0xffe8 0xfff0 0x18 @ 12, -48, -16, 24 + launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 ANIM_TARGET 0x0 0x10 0xffda 0xfff6 0x18 @ 16, -16, -10, 24 + launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 ANIM_TARGET 0x1 0xe 0xffec 0xffee 0x18 @ 14, -52, -18, 24 + launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 ANIM_TARGET 0x1 0xc 0xffdc 0xfff0 0x18 @ 12, -32, -16, 24 + loadspritegfx ANIM_TAG_LIGHTNING @thunder + call CatastropikaThundering + invisible ANIM_TARGET + unloadspritegfx ANIM_TAG_MUD_SAND + call CatastropikaThundering + call CatastropikaThundering + call CatastropikaThundering + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_ALL_BATTLERS | ANIM_PAL_BG, 0x4, 0x0, 0x10, 0x7fff @ bg to white + call CatastropikaThundering + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_ALL_BATTLERS | ANIM_PAL_BG, 0x4, 0x10, 0x0, 0x7fff @ bg to white + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x10 @fix tgt position + waitforvisualfinish + launchtask AnimTask_AllBanksVisible 0xA 0x0 + waitforvisualfinish + end +CatastropikaThundering: + playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET + launchtemplate gLightningSpriteTemplate 0x82 0x2 0x0 0xfff0 + delay 2 + launchtemplate gLightningSpriteTemplate 0x82 0x2 0x0 0x10 + delay 2 + launchtemplate gLightningSpriteTemplate 0x82 0x2 0x0 0xfff0 + delay 2 + launchtemplate gLightningSpriteTemplate 0x82 0x2 0x0 0x10 + delay 2 + launchtemplate gLightningSpriteTemplate 0x82 0x2 0x0 0xfff0 + delay 2 + launchtemplate gLightningSpriteTemplate 0x82 0x2 0x0 0x10 + delay 2 + return + + +Move_10000000_VOLT_THUNDERBOLT:: + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge + loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy + loadspritegfx ANIM_TAG_ROUND_SHADOW @fly + loadspritegfx ANIM_TAG_SPARK_2 @sparks + loadspritegfx ANIM_TAG_LIGHTNING @lightning + invisible ANIM_TARGET + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER + call EndureEffect + waitforvisualfinish + playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER + launchtemplate g10MillionVoltBoltYellowFlySpriteTemplate 0x2 0x4 0x0 0x0 0xd 0x150 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x20 0x2c 0x20 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x20 0x2c 0x60 0x28 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x20 0x2c 0xa0 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x20 0x2c 0xe0 0x28 0x2 0x3 + delay 0x2 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffe0 0x20 0x2c 0x20 0x28 0x0 0x3 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffe0 0x20 0x2c 0x60 0x28 0x1 0x3 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffe0 0x20 0x2c 0xa0 0x28 0x0 0x3 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffe0 0x20 0x2c 0xe0 0x28 0x2 0x3 + delay 0x2 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffd0 0x20 0x2c 0x20 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffd0 0x20 0x2c 0x60 0x28 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffd0 0x20 0x2c 0xa0 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffd0 0x20 0x2c 0xe0 0x28 0x2 0x3 + waitforvisualfinish + unloadspritegfx ANIM_TAG_ROUND_SHADOW + unloadspritegfx ANIM_TAG_FOCUS_ENERGY + fadetobg BG_THUNDER + waitbgfadeout + loadspritegfx ANIM_TAG_ELECTRIC_ORBS @charge + launchtask AnimTask_StartSlidingBg 0x5 0x4 0xff00 0x0 0x1 0xffff + waitbgfadein + visible ANIM_ATTACKER + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + launchtask AnimTask_ElectricChargingParticles 0x2 0x4 0x0 0x3c 0x2 0xc @charge particles to user + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x10 0x2c 0x20 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x10 0x2c 0x60 0x28 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x10 0x2c 0xa0 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x10 0x2c 0xe0 0x28 0x2 0x3 + delay 0x14 + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + delay 0x14 + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x14 0x2c 0x0 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x14 0x2c 0x40 0x28 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x14 0x2c 0x80 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x14 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + delay 0x10 + playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET + launchtask AnimTask_InvertScreenColor 0x2 0x3 0x101 0x101 0x101 @thunder flash + launchtemplate gGrowingChargeOrbSpriteTemplate 0x2 0x1 ANIM_ATTACKER @ charge + launchtemplate gLightningSpriteTemplate 0x82 0x2 0x40 0xffdc + delay 0x1 + launchtemplate gLightningSpriteTemplate 0x82 0x2 0x40 0xffec + delay 0x1 + launchtemplate gLightningSpriteTemplate 0x82 0x2 0x40 0xc + delay 0x14 + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x18 0x2c 0x0 0x28 0x0 0x3 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x18 0x2c 0x40 0x28 0x1 0x3 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x18 0x2c 0x80 0x28 0x0 0x3 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x18 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + delay 0x14 + playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET + launchtask AnimTask_InvertScreenColor 0x2 0x3 0x101 0x101 0x101 @thunder flash + launchtemplate gLightningSpriteTemplate 0x82 0x2 0xffc0 0xffdc + delay 0x1 + launchtemplate gLightningSpriteTemplate 0x82 0x2 0xffc0 0xffec + delay 0x1 + launchtemplate gLightningSpriteTemplate 0x82 0x2 0xffc0 0xc + delay 0x14 + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1c 0x2c 0x0 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1c 0x2c 0x40 0x28 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1c 0x2c 0x80 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1c 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + delay 0x14 + playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET + launchtask AnimTask_InvertScreenColor 0x2 0x3 0x101 0x101 0x101 @thunder flash + launchtemplate gLightningSpriteTemplate 0x82 0x2 0xff90 0xffdc + delay 0x1 + launchtemplate gLightningSpriteTemplate 0x82 0x2 0xff90 0xffec + delay 0x1 + launchtemplate gLightningSpriteTemplate 0x82 0x2 0xff90 0xc + delay 0x14 + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x20 0x2c 0x0 0x28 0x0 0x3 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x20 0x2c 0x40 0x28 0x1 0x3 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x20 0x2c 0x80 0x28 0x0 0x3 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x20 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + delay 0x10 + playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET + launchtask AnimTask_InvertScreenColor 0x2 0x3 0x101 0x101 0x101 @thunder flash + launchtemplate gLightningSpriteTemplate 0x82 0x2 0xffd0 0xffdc + delay 0x1 + launchtemplate gLightningSpriteTemplate 0x82 0x2 0xffd0 0xffec + delay 0x1 + launchtemplate gLightningSpriteTemplate 0x82 0x2 0xffd0 0xc + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x2a 0x2c 0x0 0x28 0x0 0x3 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x2a 0x2c 0x40 0x28 0x1 0x3 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x2a 0x2c 0x80 0x28 0x0 0x3 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x2a 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + waitforvisualfinish + call UnsetPsychicBg + visible ANIM_TARGET + loadspritegfx ANIM_TAG_ORBS @hyper beam + loadspritegfx ANIM_TAG_VERTICAL_HEX @red + loadspritegfx ANIM_TAG_WATER_ORB @blue + loadspritegfx ANIM_TAG_BERRY_EATEN @pink + loadspritegfx ANIM_TAG_LEAF @green + loadspritegfx ANIM_TAG_POISON_BUBBLE @purple + loopsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER, 0x5, 0xA + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_ATTACKER 0x0 0x4 0x32 0x1 +@ launchtask AnimTask_FlashAnimTagWithColor, 0x2, 0x7, ANIM_TAG_ORBS, 0x1, 0xc, 0x1f, 0x10, 0x0, 0x0 + call TenMillionVoltThunderboltBeamRed + call TenMillionVoltThunderboltBeamBlue + launchtask AnimTask_ShakeMon2 0x2 0x5 ANIM_TARGET 0x4 0x0 0x32 0x1 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x0 0x9 0x07FE + call TenMillionVoltThunderboltBeamPink + call TenMillionVoltThunderboltBeamYellow + call TenMillionVoltThunderboltBeamGreen + launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x4 0x0 0x32 0x1 + call TenMillionVoltThunderboltBeamPurple + call TenMillionVoltThunderboltBeamRed + call TenMillionVoltThunderboltBeamBlue + call TenMillionVoltThunderboltBeamPink + call TenMillionVoltThunderboltBeamYellow + call TenMillionVoltThunderboltBeamGreen + call TenMillionVoltThunderboltBeamPurple + call TenMillionVoltThunderboltBeamRed + call TenMillionVoltThunderboltBeamBlue + call TenMillionVoltThunderboltBeamPink + call TenMillionVoltThunderboltBeamYellow + call TenMillionVoltThunderboltBeamGreen +@ call TenMillionVoltThunderboltBeamPurple +@ call TenMillionVoltThunderboltBeamRed +@ call TenMillionVoltThunderboltBeamBlue +@ call TenMillionVoltThunderboltBeamPink +@ call TenMillionVoltThunderboltBeamYellow +@ call TenMillionVoltThunderboltBeamGreen +@ call TenMillionVoltThunderboltBeamPurple + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x25 0x2c 0x0 0x28 0x0 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x25 0x2c 0x40 0x28 0x1 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x25 0x2c 0x80 0x28 0x0 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x25 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x8003 +@ delay 0x6 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x35 0x2c 0x0 0x28 0x0 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x35 0x2c 0x40 0x28 0x1 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x35 0x2c 0x80 0x28 0x0 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x35 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x8003 +@ delay 0x6 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x40 0x2c 0x0 0x28 0x0 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x40 0x2c 0x40 0x28 0x1 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x40 0x2c 0x80 0x28 0x0 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x40 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x8003 + playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER + launchtemplate g10MillionVoltBoltShockwaveSpriteTemplate 0x82 0x0 @ charge out and in + waitforvisualfinish + unloadspritegfx ANIM_TAG_ORBS @hyper beam + unloadspritegfx ANIM_TAG_VERTICAL_HEX @red + unloadspritegfx ANIM_TAG_WATER_ORB @blue + unloadspritegfx ANIM_TAG_BERRY_EATEN @pink + unloadspritegfx ANIM_TAG_LEAF @green + unloadspritegfx ANIM_TAG_POISON_BUBBLE @purple + loadspritegfx ANIM_TAG_EXPLOSION @explosion + launchtask AnimTask_HorizontalShake 0x5 0x3 ANIM_TARGET 0x2 0x2c +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x30 0x2c 0x0 0x28 0x0 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x30 0x2c 0x40 0x28 0x1 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x30 0x2c 0x80 0x28 0x0 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x00 0x30 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x8003 + call TenMillionVoltThunderboltSparkGeyser +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x37 0x2c 0x0 0x28 0x0 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x37 0x2c 0x40 0x28 0x1 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x37 0x2c 0x80 0x28 0x0 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x00 0x37 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x8003 + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG | ANIM_PAL_ALL_BATTLERS, 0x2, 0x0, 0x10, 0x7fff + call TenMillionVoltThunderboltSparkGeyser + waitforvisualfinish + delay 0x10 + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG | ANIM_PAL_ALL_BATTLERS, 0x3, 0x10, 0x0, 0x7fff + waitforvisualfinish + launchtask AnimTask_AllBanksVisible 0xA 0x0 + waitforvisualfinish + end +TenMillionVoltThunderboltBeamRed: + launchtemplate g10MillionVoltBoltRedBeamSpriteTemplate 0x82 0x0 + launchtemplate g10MillionVoltBoltRedBeamSpriteTemplate 0x82 0x0 + delay 4 + return +TenMillionVoltThunderboltBeamBlue: + launchtemplate g10MillionVoltBoltBlueBeamSpriteTemplate 0x82 0x0 + launchtemplate g10MillionVoltBoltBlueBeamSpriteTemplate 0x82 0x0 + delay 4 + return +TenMillionVoltThunderboltBeamPink: + launchtemplate g10MillionVoltBoltPinkBeamSpriteTemplate 0x82 0x0 + launchtemplate g10MillionVoltBoltPinkBeamSpriteTemplate 0x82 0x0 + delay 4 + return +TenMillionVoltThunderboltBeamYellow: + launchtemplate g10MillionVoltBoltYellowBeamSpriteTemplate 0x82 0x0 + launchtemplate g10MillionVoltBoltYellowBeamSpriteTemplate 0x82 0x0 + delay 4 + return +TenMillionVoltThunderboltBeamGreen: + launchtemplate g10MillionVoltBoltGreenBeamSpriteTemplate 0x82 0x0 + launchtemplate g10MillionVoltBoltGreenBeamSpriteTemplate 0x82 0x0 + delay 4 + return +TenMillionVoltThunderboltBeamPurple: + launchtemplate g10MillionVoltBoltPurpleBeamSpriteTemplate 0x82 0x0 + launchtemplate g10MillionVoltBoltPurpleBeamSpriteTemplate 0x82 0x0 + delay 4 + return +TenMillionVoltThunderboltSparkGeyser: + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x5 0x2c 0x0 0x28 0x0 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x5 0x2c 0x40 0x28 0x1 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x5 0x2c 0x80 0x28 0x0 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x15 0x2c 0x0 0x28 0x0 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x15 0x2c 0x40 0x28 0x1 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x15 0x2c 0x80 0x28 0x0 0x8003 + delay 0x4 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffea 0x5 0x2c 0x0 0x28 0x0 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffea 0x5 0x2c 0x40 0x28 0x1 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffea 0x5 0x2c 0x80 0x28 0x0 0x8003 + delay 0x4 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffd4 0x5 0x2c 0x0 0x28 0x0 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffd4 0x5 0x2c 0x40 0x28 0x1 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffd4 0x5 0x2c 0x80 0x28 0x0 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffd4 0x15 0x2c 0x0 0x28 0x0 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffd4 0x15 0x2c 0x40 0x28 0x1 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffd4 0x15 0x2c 0x80 0x28 0x0 0x8003 + delay 0x4 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffbe 0x5 0x2c 0x0 0x28 0x0 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffbe 0x5 0x2c 0x40 0x28 0x1 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffbe 0x5 0x2c 0x80 0x28 0x0 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffbe 0x15 0x2c 0x0 0x28 0x0 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffbe 0x15 0x2c 0x40 0x28 0x1 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffbe 0x15 0x2c 0x80 0x28 0x0 0x8003 + delay 0x4 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + launchtemplate gExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + delay 0x8 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + launchtemplate gExplosionSpriteTemplate 0x83 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 + delay 0x8 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x10 0x10 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + launchtemplate gExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + return + + +Move_STOKED_SPARKSURFER:: + loadspritegfx ANIM_TAG_ROUND_SHADOW @fly + loadspritegfx ANIM_TAG_SPARK_2 @spark + invisible ANIM_TARGET + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER + launchtemplate gStokedSparksurferFlySpriteTemplate 0x2 0x4 0x0 0x0 0xd 0x150 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x20 0x2c 0x20 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x20 0x2c 0x60 0x28 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x20 0x2c 0xa0 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x20 0x2c 0xe0 0x28 0x2 0x3 + delay 0x2 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffe0 0x20 0x2c 0x20 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffe0 0x20 0x2c 0x60 0x28 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffe0 0x20 0x2c 0xa0 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffe0 0x20 0x2c 0xe0 0x28 0x2 0x3 + delay 0x2 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffd0 0x20 0x2c 0x20 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffd0 0x20 0x2c 0x60 0x28 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffd0 0x20 0x2c 0xa0 0x28 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffd0 0x20 0x2c 0xe0 0x28 0x2 0x3 + waitforvisualfinish + unloadspritegfx ANIM_TAG_ROUND_SHADOW + launchtask AnimTask_GetTimeOfDay 0x2 0x0 + jumpargeq 0x0 0x0 StokedSparksurferDay + jumpargeq 0x0 0x2 StokedSparksurferAfternoon +StokedSparksurferNight: + fadetobg BG_BLUE_SKY_NIGHT + goto StokedSparksurferFinish +StokedSparksurferAfternoon: + fadetobg BG_BLUE_SKY_AFTERNOON +StokedSparksurferDay: + fadetobg BG_BLUE_SKY_DAY +StokedSparksurferFinish: + waitbgfadeout + visible ANIM_ATTACKER + loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy + loadspritegfx ANIM_TAG_ELECTRIC_ORBS @charge + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge + playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER + launchtask AnimTask_ElectricChargingParticles 0x2 0x4 0x0 0x1c 0x2 0xc + launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x3c 0x1 + call EndureEffect + delay 0x8 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x5 0x0 0x10 0x5bff + call EndureEffect + delay 0x8 + call EndureEffect + delay 0x2 + loadspritegfx ANIM_TAG_SPARK + loadspritegfx ANIM_TAG_ELECTRICITY + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x0 0x10 0x0 0x5bff + launchtemplate gVoltTackleOrbSlideSpriteTemplate 0x1 0x0 + playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER + waitforvisualfinish + launchtask AnimTask_VoltTackleBolt 0x5 0x1 0x0 + playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_ATTACKER + waitforvisualfinish + launchtask AnimTask_VoltTackleBolt 0x5 0x1 0x1 + playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_TARGET + waitforvisualfinish + launchtask AnimTask_VoltTackleBolt 0x5 0x1 0x2 + playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_ATTACKER + waitforvisualfinish + launchtask AnimTask_VoltTackleBolt 0x5 0x1 0x3 + playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_TARGET + delay 0x1 + fadetobg BG_ZMOVE_ACTIVATE + waitbgfadeout + visible ANIM_TARGET + launchtask AnimTask_VoltTackleBolt 0x5 0x1 0x4 + playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_TARGET + waitforvisualfinish + unloadspritegfx ANIM_TAG_SPARK + unloadspritegfx ANIM_TAG_FOCUS_ENERGY + unloadspritegfx ANIM_TAG_ELECTRIC_ORBS + unloadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT + launchtask AnimTask_HorizontalShake 0x5 0x3 ANIM_TARGET 0x5 0x1c + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x30 0x2c 0x0 0x28 0x0 0x8003 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x30 0x2c 0x40 0x28 0x1 0x8003 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x30 0x2c 0x80 0x28 0x0 0x8003 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x00 0x30 0x2c 0xc0 0x28 0x2 0x8003 + call StokedSparksurferSparkGeyser + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_DEF | ANIM_PAL_ATK, 0x2, 0x0, 0x10, 0x5bff + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x37 0x2c 0x0 0x28 0x0 0x8003 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x37 0x2c 0x40 0x28 0x1 0x8003 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x37 0x2c 0x80 0x28 0x0 0x8003 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x00 0x37 0x2c 0xc0 0x28 0x2 0x8003 + call StokedSparksurferSparkGeyser + launchtask AnimTask_VoltTackleAttackerReappear 0x5 0x0 @ attacker flicker back + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_TARGET + delay 0x4 + launchtemplate gElectricPuffSpriteTemplate 0x2 0x3 0x0 0x10 0x10 + delay 0x2 + launchtemplate gElectricPuffSpriteTemplate 0x2 0x3 0x0 0xfff0 0xfff0 + delay 0x4 + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_DEF | ANIM_PAL_ATK, 0x2, 0x10, 0x0, 0x5bff + restorebg + delay 0x18 + launchtask AnimTask_AllBanksVisible 0xA 0x0 + waitforvisualfinish + end + +StokedSparksurferSparkGeyser: + playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x5 0x2c 0x0 0x28 0x0 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x5 0x2c 0x40 0x28 0x1 0x8003 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x5 0x2c 0x80 0x28 0x0 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x15 0x2c 0x0 0x28 0x0 0x8003 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x15 0x2c 0x40 0x28 0x1 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x15 0x2c 0x80 0x28 0x0 0x8003 + delay 0x4 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffea 0x5 0x2c 0x0 0x28 0x0 0x8003 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffea 0x5 0x2c 0x40 0x28 0x1 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffea 0x5 0x2c 0x80 0x28 0x0 0x8003 + delay 0x4 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffd4 0x5 0x2c 0x0 0x28 0x0 0x8003 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffd4 0x5 0x2c 0x40 0x28 0x1 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffd4 0x5 0x2c 0x80 0x28 0x0 0x8003 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffd4 0x15 0x2c 0x0 0x28 0x0 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffd4 0x15 0x2c 0x40 0x28 0x1 0x8003 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffd4 0x15 0x2c 0x80 0x28 0x0 0x8003 + delay 0x4 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffbe 0x5 0x2c 0x0 0x28 0x0 0x8003 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffbe 0x5 0x2c 0x40 0x28 0x1 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffbe 0x5 0x2c 0x80 0x28 0x0 0x8003 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffbe 0x15 0x2c 0x0 0x28 0x0 0x8003 +@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffbe 0x15 0x2c 0x40 0x28 0x1 0x8003 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffbe 0x15 0x2c 0x80 0x28 0x0 0x8003 + delay 0x1a + return + + +Move_EXTREME_EVOBOOST:: + loadspritegfx ANIM_TAG_LEER @leer + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG | ANIM_PAL_ATK | ANIM_PAL_ATK_PARTNER | ANIM_PAL_OPPONENT1 | ANIM_PAL_OPPONENT2, 0x3, 0x0, 0x10, 0x0000 + waitforvisualfinish + launchtask AnimTask_AllBanksInvisible 0xA 0x0 + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_ATK | ANIM_PAL_ATK_PARTNER | ANIM_PAL_OPPONENT1 | ANIM_PAL_OPPONENT2, 3, 0, 0, 0 @;Remove fading on everyone + waitforvisualfinish + playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER + launchtemplate gLeerSpriteTemplate 0x2 0x2 0x18 0xfff4 + launchtemplate gLeerSpriteTemplate 0x2 0x2 0xffe8 0xfff4 + delay 0xa + playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER + launchtemplate gLeerSpriteTemplate 0x2 0x2 0x28 0xfff0 + launchtemplate gLeerSpriteTemplate 0x2 0x2 0xfff8 0xfff0 + delay 0xa + playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER + launchtemplate gLeerSpriteTemplate 0x2 0x2 0x8 0xfffe + launchtemplate gLeerSpriteTemplate 0x2 0x2 0xffd8 0xfffe + delay 0xa + playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER + launchtemplate gLeerSpriteTemplate 0x2 0x2 0x10 0x5 + launchtemplate gLeerSpriteTemplate 0x2 0x2 0xffe0 0x5 + delay 0xa + playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER + launchtemplate gLeerSpriteTemplate 0x2 0x2 0x20 0xfff0 + launchtemplate gLeerSpriteTemplate 0x2 0x2 0xfff0 0xfff0 + delay 0xa + playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER + launchtemplate gLeerSpriteTemplate 0x2 0x2 0x5 0x0 + launchtemplate gLeerSpriteTemplate 0x2 0x2 0xffd5 0x0 + delay 0xa + playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER + launchtemplate gLeerSpriteTemplate 0x2 0x2 0x1c 0x5 + launchtemplate gLeerSpriteTemplate 0x2 0x2 0xffec 0x5 + delay 0xa + playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER + launchtemplate gLeerSpriteTemplate 0x2 0x2 0xf 0xfff4 + launchtemplate gLeerSpriteTemplate 0x2 0x2 0xffdf 0xfff4 + waitforvisualfinish + fadetobg BG_ZMOVE_ACTIVATE + waitbgfadeout + unloadspritegfx ANIM_TAG_LEER + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge + loadspritegfx ANIM_TAG_VERTICAL_HEX @red + loadspritegfx ANIM_TAG_BERRY_EATEN @pink + loadspritegfx ANIM_TAG_ICE_CHUNK @ice + loadspritegfx ANIM_TAG_WISP_ORB @will o wisp + loadspritegfx ANIM_TAG_WATER_ORB @blue + loadspritegfx ANIM_TAG_POISON_BUBBLE @purple + loadspritegfx ANIM_TAG_LEAF @green + launchtask AnimTask_BlendParticle, 0x5, 0x5, ANIM_TAG_CIRCLE_OF_LIGHT, 0x0, 0x10, 0x10, 0x5bff + waitforvisualfinish + playsewithpan SE_M_REVERSAL, SOUND_PAN_ATTACKER + launchtemplate gExtremeEvoboostRedChargeUpSpriteTemplate 0x82 0x7 0x0 0x1c 0x510 0x1e 0xd 0x32 ANIM_ATTACKER + delay 0x2 + launchtemplate gExtremeEvoboostPinkChargeUpSpriteTemplate 0x82 0x7 0x0 0x20 0x4e0 0x14 0x10 0xffd2 ANIM_ATTACKER + delay 0x2 + launchtemplate gExtremeEvoboostIceChargeUpSpriteTemplate 0x82 0x7 0x0 0x21 0x540 0x14 0x8 0x2a ANIM_ATTACKER + delay 0x2 + launchtemplate gExtremeEvoboostBlackChargeUpSpriteTemplate 0x82 0x7 0x0 0x1f 0x490 0x19 0xb 0xffd6 ANIM_ATTACKER + delay 0x2 + launchtemplate gExtremeEvoboostBlueChargeUpSpriteTemplate 0x82 0x7 0x0 0x1c 0x500 0x19 0x10 0x2e ANIM_ATTACKER + delay 0x2 + launchtemplate gExtremeEvoboostPurpleChargeUpSpriteTemplate 0x82 0x7 0x0 0x21 0x4d0 0x1e 0xf 0xffce ANIM_ATTACKER + delay 0x2 + launchtemplate gExtremeEvoboostYellowChargeUpSpriteTemplate 0x82 0x7 0x0 0x1c 0x510 0x1e 0xd 0x32 ANIM_ATTACKER + delay 0x2 + launchtemplate gExtremeEvoboostGreenChargeUpSpriteTemplate 0x82 0x7 0x0 0x20 0x4e0 0x14 0x10 0xffd2 ANIM_ATTACKER + delay 0x2 + waitforvisualfinish + visible ANIM_ATTACKER + loopsewithpan SE_M_REFLECT, SOUND_PAN_ATTACKER, 0x15, 0xd + call ExtremeEvoboostColorCircle + launchtask AnimTask_StockpileDeformMon 0x5 0x0 @stockpile movement + call ExtremeEvoboostColorCharge + call ExtremeEvoboostColorCharge + call ExtremeEvoboostColorCharge + waitforvisualfinish + playsewithpan SE_SHINY, SOUND_PAN_ATTACKER + delay 0x5 + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_ATK | ANIM_PAL_BG, 0x0, 0x0, 0x10, 0x7fff + delay 0x18 + call ResetFromWhiteScreen + end +ExtremeEvoboostColorCircle: + launchtemplate gExtremeEvoboostRedChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0 + delay 0x2 + launchtemplate gExtremeEvoboostPinkChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0 + delay 0x2 + launchtemplate gExtremeEvoboostIceChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0 + delay 0x2 + launchtemplate gExtremeEvoboostBlackChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0 + delay 0x2 + launchtemplate gExtremeEvoboostBlueChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0 + delay 0x2 + launchtemplate gExtremeEvoboostPurpleChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0 + delay 0x2 + launchtemplate gExtremeEvoboostYellowChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0 + delay 0x2 + launchtemplate gExtremeEvoboostGreenChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0 + delay 0x2 + return +ExtremeEvoboostColorCharge: + launchtemplate gExtremeEvoboostRedChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0 + delay 0x2 + launchtemplate gExtremeEvoboostRedStockpileSpriteTemplate 0x2 0x3 0x37 0x37 0xd + delay 0x2 + launchtemplate gExtremeEvoboostPinkChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0 + delay 0x2 + launchtemplate gExtremeEvoboostPinkStockpileSpriteTemplate 0x2 0x3 0xffc9 0xffc9 0xd + delay 0x2 + launchtemplate gExtremeEvoboostIceChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0 + delay 0x2 + launchtemplate gExtremeEvoboostIceStockpileSpriteTemplate 0x2 0x3 0x0 0x37 0xd + delay 0x2 + launchtemplate gExtremeEvoboostBlackChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0 + delay 0x2 + launchtemplate gExtremeEvoboostBlackStockpileSpriteTemplate 0x2 0x3 0x0 0xffc9 0xd + delay 0x2 + launchtemplate gExtremeEvoboostBlueChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0 + delay 0x2 + launchtemplate gExtremeEvoboostBlueStockpileSpriteTemplate 0x2 0x3 0x37 0xffde 0xd + delay 0x2 + launchtemplate gExtremeEvoboostPurpleChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0 + delay 0x2 + launchtemplate gExtremeEvoboostPurpleStockpileSpriteTemplate 0x2 0x3 0x37 0x22 0xd + delay 0x2 + launchtemplate gExtremeEvoboostYellowChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0 + delay 0x2 + launchtemplate gExtremeEvoboostYellowStockpileSpriteTemplate 0x2 0x3 0xffc9 0xffde 0xd + delay 0x2 + launchtemplate gExtremeEvoboostGreenChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0 + delay 0x2 + launchtemplate gExtremeEvoboostGreenStockpileSpriteTemplate 0x2 0x3 0xffc9 0x22 0xd + delay 0x2 + return + + +Move_PULVERIZING_PANCAKE:: + loadspritegfx ANIM_TAG_SPARKLE_4 @detect + loadspritegfx ANIM_TAG_VERTICAL_HEX @red + loadspritegfx ANIM_TAG_MUD_SAND @dig + loadspritegfx ANIM_TAG_IMPACT @hit + loadspritegfx ANIM_TAG_QUICK_GUARD_HAND @black colour + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + launchtask AnimTask_IsTargetPlayerSide 0x2 0x0 + jumpargeq 0x7 ANIM_TARGET PulverizingPancakeOnPlayer +PulverizingPancakeOnOpponent: + launchtemplate gPulverizingPancakeRedDetectSpriteTemplate 0xd 0x2 0x14 0xffec + goto PulverizingPancakeFinish +PulverizingPancakeOnPlayer: + launchtemplate gPulverizingPancakeRedDetectSpriteTemplate 0xd 0x2 0xa 0xfff2 + launchtemplate gPulverizingPancakeRedDetectSpriteTemplate 0xd 0x2 0xfff6 0xfff2 +PulverizingPancakeFinish: + playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER + waitforvisualfinish + fadetobg BG_SOLAR_BEAM_OPPONENT + waitbgfadeout + launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_ATTACKER 0x0 0x2 0x32 0x1 + call PulverizingPancakeDiggingRun + call PulverizingPancakeDiggingRun + call PulverizingPancakeDiggingRun + call PulverizingPancakeDiggingRun + call PulverizingPancakeDiggingRun + call PulverizingPancakeDiggingRun + call PulverizingPancakeDiggingRun + call PulverizingPancakeDiggingRun + call PulverizingPancakeDiggingRun + loadspritegfx ANIM_TAG_ROUND_SHADOW @fly + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET + launchtemplate gFlyBallUpSpriteTemplate 0x2 0x4 0x0 0x0 0xd 0x150 + delay 0x2 + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x0 0xc 0x4 0xfff0 0x22 + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x0 0x10 0x4 0xfff6 0x22 + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x1 0xe 0x4 0xffee 0x22 + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x1 0xc 0x4 0xfff0 0x22 + unloadspritegfx ANIM_TAG_SPARKLE_4 + unloadspritegfx ANIM_TAG_VERTICAL_HEX + fadetobg BG_IN_AIR + waitbgfadeout + launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0 0x1000 0x0 0xffff + waitbgfadein + loadspritegfx ANIM_TAG_WHITE_SHADOW + launchtask AnimTask_PulverizingPancakeWhiteShadow 0x5 0x2 0x33 0x33 @first arg is duration, last arg is move speed + delay 0x10 + call PulverizingPancakeSlowBackground + call PulverizingPancakeSlowBackground + call PulverizingPancakeSlowBackground + call PulverizingPancakeSlowBackground + call PulverizingPancakeSlowBackground + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 0x4 0x2 0x0 0xb 0x0000 @ target darkens + call PulverizingPancakeSlowBackground @0 + call PulverizingPancakeSlowBackground + call PulverizingPancakeSlowBackground + call PulverizingPancakeSlowBackground + call PulverizingPancakeSlowBackground + call PulverizingPancakeSlowBackground + call PulverizingPancakeSlowBackground @-0x1000 + delay 0x1 + waitbgfadein + loadspritegfx ANIM_TAG_THIN_RING @ring + unloadspritegfx ANIM_TAG_MUD_SAND @dig + loadspritegfx ANIM_TAG_ELECTRIC_ORBS @yellow + launchtemplate gBounceBallLandSpriteTemplate 0x83 0x0 + delay 0x7 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gBasicHitSplatSpriteTemplate 0x82, 0x4, 0x0 0x0 0x1 0x0 @big hit marker + delay 0x0 + launchtask AnimTask_HorizontalShake 0x5 0x3 ANIM_TARGET 0x4 0x2c + launchtemplate gPulverizingPancakeYellowRingSpriteTemplate 0x83 0x4 0x0 0x0 0x100 0x0 + delay 0x5 + loadspritegfx ANIM_TAG_EXPLOSION @explosion + call PulverizingPancakeExplosion + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG | ANIM_PAL_ALL_BATTLERS, 0x2, 0x0, 0x10, 0x7fff @ everything goes white + call PulverizingPancakeExplosion + waitforvisualfinish + call ResetFromWhiteScreen + end +PulverizingPancakeDiggingRun: + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x0 0xc 0x4 0xfff0 0x12 + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x0 0x10 0x4 0xfff6 0x12 + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x1 0xe 0x4 0xffee 0x12 + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x1 0xc 0x4 0xfff0 0x12 + playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER + delay 0x5 + return +PulverizingPancakeSlowBackground: + launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0 0xfd56 0x0 0xffff @-0x2aa + delay 0x1 + return +PulverizingPancakeExplosion: + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gPulverizingPancakeExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gPulverizingPancakeYellowRingSpriteTemplate 0x83 0x4 0x0 0x0 0x100 0x0 + launchtemplate gPulverizingPancakeExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gPulverizingPancakeExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gPulverizingPancakeExplosionSpriteTemplate 0x83 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gPulverizingPancakeYellowRingSpriteTemplate 0x83 0x4 0x0 0x0 0x100 0x0 + launchtemplate gPulverizingPancakeExplosionSpriteTemplate 0x83 0x4 0x10 0x10 ANIM_TARGET 0x1 + delay 0x6 + return + + +Move_GENESIS_SUPERNOVA:: + loadspritegfx ANIM_TAG_BLUE_ORB @reversal + loadspritegfx ANIM_TAG_POISON_BUBBLE @poison bubble + loadspritegfx ANIM_TAG_POISON_JAB @purple + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + call SetPsychicBackground + loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy + playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER + launchtask AnimTask_IsTargetPlayerSide 0x2 0x0 + jumpargeq 0x7 ANIM_TARGET GenesisSupernovaOnPlayer +GenesisSupernovaOnOpponent: + call GenesisSupernovaBuffEffectPlayer_1 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x2 0x0 0xb 0xd87c + launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x70 0x1 + call GenesisSupernovaBuffEffectPlayer_2 + call GenesisSupernovaBuffEffectPlayer_1 + goto GenesisSupernovaFinish +GenesisSupernovaOnPlayer: + call GenesisSupernovaBuffOpponent_1 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x2 0x0 0xb 0xd87c + launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x70 0x1 + call GenesisSupernovaBuffOpponent_2 + call GenesisSupernovaBuffOpponent_1 +GenesisSupernovaFinish: + loopsewithpan SE_M_REVERSAL, SOUND_PAN_ATTACKER, 0x18, 0x6 + call GenesisSupernovaReversalWave + call GenesisSupernovaReversalWave + call GenesisSupernovaReversalWave + delay 0x15 + unloadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge + monbg ANIM_ATTACKER + setblends 0x80c + launchtemplate gGenesisSupernovaChargeSpriteTemplate 0x2 0x1 0x0 @charge + call GenesisSupernovaFlare @delay 12 per + call GenesisSupernovaFlare + call GenesisSupernovaFlare + call GenesisSupernovaFlare + call GenesisSupernovaFlare + delay 0x4 + unloadspritegfx ANIM_TAG_BLUE_ORB @reversal + loadspritegfx ANIM_TAG_WISP_ORB @will-o-wisp + loadspritegfx ANIM_TAG_METEOR @superpower + loadspritegfx ANIM_TAG_SPARKLE_2 @sparkles + launchtemplate gGenesisSupernovaSuperpowerSpriteTemplate 0x83 0x1 0x0 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x0 0xb 0x0 0xd87c + playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER + launchtask AnimTask_BlendParticle, 0x2, 0x5, ANIM_TAG_SPARKLE_2, 0x0, 0x0, 0xc, 0x7fff + delay 0x8 + invisible ANIM_TARGET + loadspritegfx ANIM_TAG_EXPLOSION @explosion + unloadspritegfx ANIM_TAG_METEOR @superpower + call GenesisSupernovaBubbleExplosion + call GenesisSupernovaBubbleExplosion + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG | ANIM_PAL_ALL_BATTLERS, 0x3, 0x0, 0x10, 0x7fff + call GenesisSupernovaBubbleExplosion + waitforvisualfinish + delay 0x10 + launchtask AnimTask_BlendParticle, 0x2, 0x5, ANIM_TAG_SPARKLE_2, 0x0, 0xc, 0x0, 0x7fff + clearmonbg ANIM_ATTACKER + blendoff + delay 0x0 + call ResetFromWhiteScreen + waitforvisualfinish + end +GenesisSupernovaBubbleExplosion: + launchtemplate gGrantingStarsSpriteTemplate 0x2 0x6 0xfff1 0x0 ANIM_TARGET 0x0 0x20 0x3c + launchtemplate gGenesisSupernovaBubbleSpriteTemplate 0x82, 0x3, 0xa 0xa 0x0 + launchtemplate gGenesisSupernovaExplosionSpriteTemplate 0x3 0x4 0x0 0x0 ANIM_TARGET 0x1 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + delay 0x6 + launchtemplate gGenesisSupernovaBubbleSpriteTemplate 0x82, 0x3, 0x14 0xffec 0x0 + launchtemplate gGenesisSupernovaExplosionSpriteTemplate 0x3 0x4 0x18 0xffe8 ANIM_TARGET 0x1 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + delay 0x6 + launchtemplate gGrantingStarsSpriteTemplate 0x2 0x6 0xc 0xfffb ANIM_TARGET 0x0 0x20 0x3c + launchtemplate gGenesisSupernovaBubbleSpriteTemplate 0x82, 0x3, 0xffec 0xf 0x0 + launchtemplate gGenesisSupernovaExplosionSpriteTemplate 0x3 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + delay 0x6 + launchtemplate gGenesisSupernovaBubbleSpriteTemplate 0x82, 0x3, 0x0 0x0 0x0 + launchtemplate gGenesisSupernovaExplosionSpriteTemplate 0x3 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + delay 0x6 + launchtemplate gGenesisSupernovaBubbleSpriteTemplate 0x82, 0x3, 0xffec 0xffec 0x0 + launchtemplate gGenesisSupernovaExplosionSpriteTemplate 0x3 0x4 0x10 0x10 ANIM_TARGET 0x1 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + delay 0x6 + launchtemplate gGenesisSupernovaBubbleSpriteTemplate 0x82, 0x3, 0x10 0xfff8 0x0 + launchtemplate gGenesisSupernovaExplosionSpriteTemplate 0x3 0x4 0xffe0 0xffe8 ANIM_TARGET 0x1 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + return +GenesisSupernovaBuffEffectPlayer_1: + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2 + launchtemplate gGenesisSupernovaOrbRiseSpriteTemplate 0x32 0x5 0x24 0x80 0x24 0x30 0x30 + delay 0x2 + launchtemplate gGenesisSupernovaOrbRiseSpriteTemplate 0x32 0x5 0x10 0x80 0x10 0x35 0x30 + delay 0x2 + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1 + launchtemplate gGenesisSupernovaOrbRiseSpriteTemplate 0x32 0x5 0x45 0x80 0x45 0x3a 0x30 + delay 0x2 + launchtemplate gGenesisSupernovaOrbRiseSpriteTemplate 0x32 0x5 0x60 0x80 0x60 0x30 0x30 + delay 0x2 + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2 + launchtemplate gGenesisSupernovaOrbRiseSpriteTemplate 0x32 0x5 0x30 0x80 0x30 0x3c 0x30 + delay 0x2 + launchtemplate gGenesisSupernovaOrbRiseSpriteTemplate 0x32 0x5 0x55 0x80 0x55 0x33 0x30 + delay 0x2 + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1 + return +GenesisSupernovaBuffEffectPlayer_2: + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2 + launchtemplate gGenesisSupernovaOrbRiseSpriteTemplate 0x32 0x5 0x29 0x80 0x29 0x31 0x30 + delay 0x2 + launchtemplate gGenesisSupernovaOrbRiseSpriteTemplate 0x32 0x5 0x73 0x80 0x73 0x32 0x30 + delay 0x2 + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1 + launchtemplate gGenesisSupernovaOrbRiseSpriteTemplate 0x32 0x5 0x4a 0x80 0x4a 0x3c 0x30 + delay 0x2 + launchtemplate gGenesisSupernovaOrbRiseSpriteTemplate 0x32 0x5 0x64 0x80 0x64 0x33 0x30 + delay 0x2 + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2 + launchtemplate gGenesisSupernovaOrbRiseSpriteTemplate 0x32 0x5 0x2c 0x80 0x2c 0x3d 0x30 + delay 0x2 + launchtemplate gGenesisSupernovaOrbRiseSpriteTemplate 0x32 0x5 0x6c 0x80 0x6c 0x30 0x30 + delay 0x2 + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1 + return +GenesisSupernovaReversalWave: + launchtemplate gGenesisSupernovaReversalSpriteTemplate 0x2 0x2 0x1a 0x0 + launchtemplate gGenesisSupernovaReversalSpriteTemplate 0x2 0x2 0x1a 0x2a + launchtemplate gGenesisSupernovaReversalSpriteTemplate 0x2 0x2 0x1a 0x54 + launchtemplate gGenesisSupernovaReversalSpriteTemplate 0x2 0x2 0x1a 0x7e + return +GenesisSupernovaFlare: + launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x82 0x7 0x0 0x1c 0x180 0x32 0x8 0x32 ANIM_ATTACKER + delay 0x2 + launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x82 0x7 0x0 0x20 0xf0 0x28 0xb 0xffd2 ANIM_ATTACKER + delay 0x2 + launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x82 0x7 0x0 0x21 0x1a0 0x28 0x4 0x2a ANIM_ATTACKER + delay 0x2 + launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x82 0x7 0x0 0x1f 0x120 0x2d 0x6 0xffd6 ANIM_ATTACKER + delay 0x2 + launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x82 0x7 0x0 0x1c 0x1c0 0x2d 0xb 0x2e ANIM_ATTACKER + delay 0x2 + launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x82 0x7 0x0 0x21 0x1d0 0x32 0xa 0xffce ANIM_ATTACKER + delay 0x2 + return +GenesisSupernovaBuffOpponent_1: + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2 + launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x32 0x5 0x94 0x40 0x94 0x0 0x30 + delay 0x2 + launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x32 0x5 0x80 0x40 0x80 0x0 0x30 + delay 0x2 + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1 + launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x32 0x5 0xb5 0x40 0xb5 0x0 0x30 + delay 0x2 + launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x32 0x5 0xd0 0x40 0xd0 0x0 0x30 + delay 0x2 + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2 + launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x32 0x5 0xa0 0x40 0xa0 0x0 0x30 + delay 0x2 + launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x32 0x5 0xc5 0x40 0xc5 0x0 0x30 + delay 0x2 + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1 + return +GenesisSupernovaBuffOpponent_2: + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2 + launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x32 0x5 0x99 0x40 0x99 0x0 0x30 + delay 0x2 + launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x32 0x5 0xe3 0x40 0xe3 0x0 0x30 + delay 0x2 + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1 + launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x32 0x5 0xba 0x40 0xba 0x0 0x30 + delay 0x2 + launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x32 0x5 0xd4 0x40 0xd4 0x0 0x30 + delay 0x2 + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2 + launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x32 0x5 0x9c 0x40 0x9c 0x0 0x30 + delay 0x2 + launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x32 0x5 0xdc 0x40 0xdc 0x0 0x30 + delay 0x2 + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1 + return + + +Move_SINISTER_ARROW_RAID:: + loadspritegfx ANIM_TAG_ROUND_SHADOW @fly + loadspritegfx ANIM_TAG_SPIRIT_ARROW @arrow + loadspritegfx ANIM_TAG_LEAF @green + invisible ANIM_TARGET + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER + launchtemplate gArrowRaidFlyUpSpriteTemplate 0x2 0x4 0x0 0x0 0xd 0x150 + waitforvisualfinish + unloadspritegfx ANIM_TAG_ROUND_SHADOW + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x10 0x388C @ bg to purple + waitforvisualfinish + visible ANIM_ATTACKER + playsewithpan SE_M_WHIRLPOOL, SOUND_PAN_TARGET + launchtemplate gArrowRaidArrowUpSpriteTemplate 0x2 0x7 0x0 0x1c 0x210 0x1e 0xd 0x32 ANIM_ATTACKER + delay 0x2 + launchtemplate gArrowRaidArrowUpSpriteTemplate 0x2 0x7 0x0 0x20 0x1e0 0x14 0x10 0xffd2 ANIM_ATTACKER + delay 0x2 + launchtemplate gArrowRaidArrowUpSpriteTemplate 0x2 0x7 0x0 0x21 0x240 0x14 0x8 0x2a ANIM_ATTACKER + delay 0x2 + launchtemplate gArrowRaidArrowUpSpriteTemplate 0x2 0x7 0x0 0x1f 0x190 0x19 0xb 0xffd6 ANIM_ATTACKER + delay 0x2 + launchtemplate gArrowRaidArrowUpSpriteTemplate 0x2 0x7 0x0 0x1c 0x200 0x19 0x10 0x2e ANIM_ATTACKER + delay 0x2 + launchtemplate gArrowRaidArrowUpSpriteTemplate 0x2 0x7 0x0 0x21 0x1d0 0x1e 0xf 0xffce ANIM_ATTACKER + delay 0x2 + waitforvisualfinish + invisible ANIM_ATTACKER + loadspritegfx ANIM_TAG_BIRD @sky attack + loadspritegfx ANIM_TAG_EXPLOSION_2 @explosion + loadspritegfx ANIM_TAG_POISON_BUBBLE @purple + launchtask AnimTask_IsTargetPlayerSide 0x2 0x0 + jumpargeq 0x7 ANIM_TARGET SinisterArrowRaidOnPlayer +SinisterArrowRaidOnOpponent: + playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER + launchtemplate gArrowRaidFlyRightSpriteTemplate 0x32 0x5 0xfff0 0x88 0x100 0x38 0x15 @left to right + delay 0x5 + launchtemplate gArrowRaidRightUpSpriteTemplate 0x32 0x5 0xfff0 0x8a 0x100 0x3a 0x15 @left to right + delay 0x1 + launchtemplate gArrowRaidRightUpSpriteTemplate 0x32 0x5 0xfff0 0x8c 0x100 0x3c 0x15 + delay 0x1 + launchtemplate gArrowRaidRightUpSpriteTemplate 0x32 0x5 0xfff0 0x86 0x100 0x36 0x15 + delay 0x1 + launchtemplate gArrowRaidRightUpSpriteTemplate 0x32 0x5 0xfff0 0x84 0x100 0x34 0x15 + delay 0x1 + launchtemplate gArrowRaidRightUpSpriteTemplate 0x32 0x5 0xfff0 0x88 0x100 0x38 0x15 + waitforvisualfinish + delay 0xa + playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER @[x0] [y0] [xf] [yf] + launchtemplate gArrowRaidFlyLeftSpriteTemplate 0x32 0x5 0x0120 0x38 0xfff0 0x38 0x15 @right to left + delay 0x5 + launchtemplate gArrowRaidLeftUpSpriteTemplate 0x32 0x5 0x0120 0x36 0xfff0 0x36 0x15 + delay 0x1 + launchtemplate gArrowRaidLeftUpSpriteTemplate 0x32 0x5 0x0120 0x3a 0xfff0 0x3a 0x15 + delay 0x1 + launchtemplate gArrowRaidLeftUpSpriteTemplate 0x32 0x5 0x0120 0x37 0xfff0 0x37 0x15 + delay 0x1 + launchtemplate gArrowRaidLeftUpSpriteTemplate 0x32 0x5 0x0120 0x3c 0xfff0 0x3c 0x15 + delay 0x1 + launchtemplate gArrowRaidLeftUpSpriteTemplate 0x32 0x5 0x0120 0x38 0xfff0 0x38 0x15 + waitforvisualfinish + delay 0xa + playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER + launchtemplate gArrowRaidFlyRightSpriteTemplate 0x32 0x5 0xfff0 0x08 0x100 0x0f 0x15 @left to right + delay 0x5 + launchtemplate gArrowRaidRightDownSpriteTemplate 0x32 0x5 0xfff0 0x0a 0x100 0x11 0x15 + delay 0x1 + launchtemplate gArrowRaidRightDownSpriteTemplate 0x32 0x5 0xfff0 0x0c 0x100 0x13 0x15 + delay 0x1 + launchtemplate gArrowRaidRightDownSpriteTemplate 0x32 0x5 0xfff0 0x06 0x100 0xd 0x15 + delay 0x1 + launchtemplate gArrowRaidRightDownSpriteTemplate 0x32 0x5 0xfff0 0x04 0x100 0xb 0x15 + delay 0x1 + launchtemplate gArrowRaidRightDownSpriteTemplate 0x32 0x5 0xfff0 0x08 0x100 0xf 0x15 + waitforvisualfinish + call SinisterArrowRaidFlyStrike + launchtask AnimTask_HorizontalShake 0x5 0x3 ANIM_TARGET 0x3 0x4b + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x4 0x0 0x10 0x40c0 @ defender to purple + call SinisterArrowRaidStrikeOpponent + call SinisterArrowRaidOpponentExplosion + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gArrowRaidExplosionSpriteTemplate 0x3 0x4 0x10 0x10 ANIM_TARGET 0x1 + call SinisterArrowRaidFinalExplosion + goto SinisterArrowRaidFinish +@on player +SinisterArrowRaidOnPlayer: + playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER + launchtemplate gArrowRaidFlyLeftSpriteTemplate 0x32 0x5 0x0120 0x08 0xfff0 0x0f 0x15 @right to left + delay 0x5 + launchtemplate gArrowRaidFaceUpLeftSpriteTemplate 0x32 0x5 0x0120 0x0a 0xfff0 0x11 0x15 + delay 0x1 + launchtemplate gArrowRaidFaceUpLeftSpriteTemplate 0x32 0x5 0x0120 0x0c 0xfff0 0x13 0x15 + delay 0x1 + launchtemplate gArrowRaidFaceUpLeftSpriteTemplate 0x32 0x5 0x0120 0x06 0xfff0 0xd 0x15 + delay 0x1 + launchtemplate gArrowRaidFaceUpLeftSpriteTemplate 0x32 0x5 0x0120 0x04 0xfff0 0xb 0x15 + delay 0x1 + launchtemplate gArrowRaidFaceUpLeftSpriteTemplate 0x32 0x5 0x0120 0x08 0xfff0 0xf 0x15 + waitforvisualfinish + delay 0xa + playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER + launchtemplate gArrowRaidFlyRightSpriteTemplate 0x32 0x5 0xfff0 0x38 0x100 0x38 0x15 @left to right + delay 0x5 + launchtemplate gArrowRaidRightSpriteTemplate 0x32 0x5 0xfff0 0x36 0x100 0x36 0x15 + delay 0x1 + launchtemplate gArrowRaidRightSpriteTemplate 0x32 0x5 0xfff0 0x3a 0x100 0x3a 0x15 + delay 0x1 + launchtemplate gArrowRaidRightSpriteTemplate 0x32 0x5 0xfff0 0x37 0x100 0x37 0x15 + delay 0x1 + launchtemplate gArrowRaidRightSpriteTemplate 0x32 0x5 0xfff0 0x3c 0x100 0x3c 0x15 + delay 0x1 + launchtemplate gArrowRaidRightSpriteTemplate 0x32 0x5 0xfff0 0x38 0x100 0x38 0x15 + waitforvisualfinish + delay 0xa + playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER + launchtemplate gArrowRaidFlyLeftSpriteTemplate 0x32 0x5 0x0120 0x78 0xfff0 0x58 0x15 @right to left + delay 0x5 + launchtemplate gArrowRaidLeftDownSpriteTemplate 0x32 0x5 0x100 0x8a 0xfff0 0x3a 0x15 + delay 0x1 + launchtemplate gArrowRaidLeftDownSpriteTemplate 0x32 0x5 0x100 0x8c 0xfff0 0x3c 0x15 + delay 0x1 + launchtemplate gArrowRaidLeftDownSpriteTemplate 0x32 0x5 0x100 0x86 0xfff0 0x36 0x15 + delay 0x1 + launchtemplate gArrowRaidLeftDownSpriteTemplate 0x32 0x5 0x100 0x84 0xfff0 0x34 0x15 + delay 0x1 + launchtemplate gArrowRaidLeftDownSpriteTemplate 0x32 0x5 0x100 0x88 0xfff0 0x38 0x15 + waitforvisualfinish + call SinisterArrowRaidFlyStrike + launchtask AnimTask_HorizontalShake 0x5 0x3 ANIM_TARGET 0x3 0x4b + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x4 0x0 0x10 0x40c0 @ defender to purple + call SinisterArrowRaidArrowsStrikePlayer + call SinisterArrowRaidPlayerExplosion + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gArrowRaidExplosionSpriteTemplate 0x3 0x4 0x10 0x10 ANIM_TARGET 0x1 + call SinisterArrowRaidFinalExplosion +@ finish +SinisterArrowRaidFinish: + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x4 0x10 0x0 0x40c0 @ return tgt to normal + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x10 0x00 0x388C @ bg to nrml + delay 0x5 + launchtask AnimTask_AllBanksVisible 0xA 0x0 + waitforvisualfinish + end +SinisterArrowRaidFlyStrike: + visible ANIM_TARGET + delay 0xa + playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER + launchtemplate gArrowRaidFlyStrikeSpriteTemplate 0x82 0x1 0x14 + waitforvisualfinish + delay 0x5 + return +SinisterArrowRaidStrikeOpponent: + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x85 0xfff0 0xa5 0x40 0x4 + playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x95 0xfff0 0xb5 0x40 0x4 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x75 0xfff0 0x95 0x40 0x4 + delay 0x1 + playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xa5 0xfff0 0xc5 0x40 0x4 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x6f 0xfff0 0x8f 0x40 0x4 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x7b 0xfff0 0x9b 0x40 0x4 + delay 0x1 + playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x85 0xfff0 0xa5 0x40 0x4 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xa2 0xfff0 0xc2 0x40 0x4 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x82 0xfff0 0xa2 0x40 0x4 + delay 0x1 + playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x87 0xfff0 0xa7 0x40 0x4 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x72 0xfff0 0x92 0x40 0x4 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x85 0xfff0 0xa5 0x40 0x4 + delay 0x1 + playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x8b 0xfff0 0xab 0x40 0x4 + delay 0x1 + return +SinisterArrowRaidOpponentExplosion: + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gArrowRaidExplosionSpriteTemplate 0x3 0x4 0x0 0x0 ANIM_TARGET 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x85 0xfff0 0xa5 0x40 0x4 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x95 0xfff0 0xb5 0x40 0x4 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x75 0xfff0 0x95 0x40 0x4 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xa5 0xfff0 0xc5 0x40 0x4 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x6f 0xfff0 0x8f 0x40 0x4 + launchtemplate gArrowRaidExplosionSpriteTemplate 0x3 0x4 0x18 0xffe8 ANIM_TARGET 0x1 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x7b 0xfff0 0x9b 0x40 0x4 + delay 0x1 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x85 0xfff0 0xa5 0x40 0x4 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xa2 0xfff0 0xc2 0x40 0x4 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x82 0xfff0 0xa2 0x40 0x4 + launchtemplate gArrowRaidExplosionSpriteTemplate 0x3 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x87 0xfff0 0xa7 0x40 0x4 + delay 0x1 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x72 0xfff0 0x92 0x40 0x4 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x85 0xfff0 0xa5 0x40 0x4 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x8b 0xfff0 0xab 0x40 0x4 + launchtemplate gArrowRaidExplosionSpriteTemplate 0x3 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 + delay 0x1 + return +SinisterArrowRaidArrowsStrikePlayer: + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xfff5 0xfff0 0x45 0x90 0x4 + playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x5 0xfff0 0x55 0x90 0x4 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xffe5 0xfff0 0x35 0x90 0x4 + delay 0x1 + playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x15 0xfff0 0x65 0x90 0x4 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xffdf 0xfff0 0x2f 0x90 0x4 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xffeb 0xfff0 0x3b 0x90 0x4 + delay 0x1 + playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xfff5 0xfff0 0x45 0x90 0x4 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x12 0xfff0 0x62 0x90 0x4 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xfff2 0xfff0 0x42 0x90 0x4 + delay 0x1 + playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xfff7 0xfff0 0x47 0x90 0x4 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xffe2 0xfff0 0x32 0x90 0x4 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xfff5 0xfff0 0x45 0x90 0x4 + delay 0x1 + playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xfffb 0xfff0 0x4b 0x90 0x4 + delay 0x1 + return +SinisterArrowRaidPlayerExplosion: + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gArrowRaidExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xfff5 0xfff0 0x45 0x90 0x4 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x5 0xfff0 0x55 0x90 0x4 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xffe5 0xfff0 0x35 0x90 0x4 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x15 0xfff0 0x65 0x90 0x4 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xffdf 0xfff0 0x2f 0x90 0x4 + launchtemplate gArrowRaidExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xffeb 0xfff0 0x3b 0x90 0x4 + delay 0x1 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xfff5 0xfff0 0x45 0x90 0x4 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x12 0xfff0 0x62 0x90 0x4 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xfff2 0xfff0 0x42 0x90 0x4 + launchtemplate gArrowRaidExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xfff7 0xfff0 0x47 0x90 0x4 + delay 0x1 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xffe2 0xfff0 0x32 0x90 0x4 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xfff5 0xfff0 0x45 0x90 0x4 + delay 0x1 + launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xfffb 0xfff0 0x4b 0x90 0x4 + launchtemplate gArrowRaidExplosionSpriteTemplate 0x83 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 + delay 0x1 + return +SinisterArrowRaidFinalExplosion: + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gArrowRaidExplosionSpriteTemplate 0x3 0x4 0x0 0x0 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gArrowRaidExplosionSpriteTemplate 0x3 0x4 0x18 0xffe8 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gArrowRaidExplosionSpriteTemplate 0x3 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gArrowRaidExplosionSpriteTemplate 0x3 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gArrowRaidExplosionSpriteTemplate 0x3 0x4 0x10 0x10 ANIM_TARGET 0x1 + delay 0x6 + return + + +Move_MALICIOUS_MOONSAULT:: + loadspritegfx ANIM_TAG_FIRE_PLUME @dragon rage + loadspritegfx ANIM_TAG_ROUND_SHADOW @fly + loadspritegfx ANIM_TAG_VERTICAL_HEX @red + loadspritegfx ANIM_TAG_SMALL_EMBER @fire + loadspritegfx ANIM_TAG_IMPACT @hit + loadspritegfx ANIM_TAG_EXPLOSION_2 @explosion + fadetobg BG_MALICIOUS_MOONSAULT + waitbgfadeout + setblends 0x80c + playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_ATTACKER + launchtemplate gVerticalDipSpriteTemplate 0x2 0x3 0x6 0x1 0x0 + delay 0x1 + launchtemplate gFirePlumeSpriteTemplate 0x2 0x6 0xffe0 0x0 0x18 0x0 0x0 0x0 + launchtemplate gFirePlumeSpriteTemplate 0x42 0x6 0xffec 0xfff6 0x18 0x0 0x0 0x0 + launchtemplate gFirePlumeSpriteTemplate 0x42 0x6 0x0 0xfff0 0x18 0x0 0x0 0x0 + launchtemplate gFirePlumeSpriteTemplate 0x42 0x6 0x14 0xfff6 0x18 0x0 0x0 0x0 + launchtemplate gFirePlumeSpriteTemplate 0x42 0x6 0x20 0x0 0x18 0x0 0x0 0x0 + launchtemplate gFirePlumeSpriteTemplate 0x42 0x6 0x14 0xa 0x18 0x0 0x0 0x0 + launchtemplate gFirePlumeSpriteTemplate 0x2 0x6 0x0 0x10 0x18 0x0 0x0 0x0 + launchtemplate gFirePlumeSpriteTemplate 0x2 0x6 0xffec 0xa 0x18 0x0 0x0 0x0 + waitforvisualfinish + delay 0x0 + monbg ANIM_ATTACKER + playsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_TARGET + call MaliciousMoonsaultFireSpin + call MaliciousMoonsaultFireSpin + clearmonbg ANIM_ATTACKER + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER + launchtemplate gMaliciousMoonsaultRedFlySpriteTemplate 0x82, 0x4, 0x0 0x0 0xd 0x150 + call MaliciousMoonsaultFireSpin + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x5 0x0 0xa 0x0000 @ target darkens + delay 0x1a + playsewithpan SE_M_SWAGGER, SOUND_PAN_TARGET + launchtemplate gMaliciousMoonsaultRedBounceSpriteTemplate 0x83 0x0 + delay 0x7 + launchtemplate gMaliciousMoonsaultRedImpactSpriteTemplate 0x82, 0x4, 0x0 0x0 0x1 0x0 + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xff00 0x15 0x0 0x4 + call MaliciousMoonsaultExplosion + delay 0x6 + call MaliciousMoonsaultExplosion + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG | ANIM_PAL_ALL_BATTLERS, 0x1, 0x0, 0x10, 0x001b @ fade all to red + delay 0x6 + call MaliciousMoonsaultExplosion + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x10 + waitforvisualfinish + call ResetFromRedScreen + blendoff + end +MaliciousMoonsaultFireSpin: + launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x2c 0x510 0x1e 0xd 0x32 ANIM_ATTACKER + delay 0x1 + launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x2f 0x490 0x19 0xb 0xffd6 ANIM_ATTACKER + delay 0x1 + launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x30 0x4e0 0x14 0x10 0xffd2 ANIM_ATTACKER + delay 0x1 + launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x2c 0x500 0x19 0x10 0x2e ANIM_ATTACKER + delay 0x1 + launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x31 0x540 0x14 0x8 0x2a ANIM_ATTACKER + delay 0x1 + launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x31 0x4d0 0x1e 0xf 0xffce ANIM_ATTACKER + delay 0x1 + launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x2f 0x490 0x19 0xb 0xffd6 ANIM_ATTACKER + delay 0x1 + launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x2c 0x510 0x1e 0xd 0x32 ANIM_ATTACKER + delay 0x1 + launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x2c 0x500 0x19 0x10 0x2e ANIM_ATTACKER + delay 0x1 + launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x30 0x4e0 0x14 0x10 0xffd2 ANIM_ATTACKER + delay 0x1 + launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x31 0x4d0 0x1e 0xf 0xffce ANIM_ATTACKER + delay 0x1 + launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x31 0x540 0x14 0x8 0x2a ANIM_ATTACKER + delay 0x1 + return +MaliciousMoonsaultExplosion: + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gMaliciousMoonsaultExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1 + launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xa 0x0 0xfffe + launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0xfffe 0x0 + launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0x2 0x0 + launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0xfffe 0x2 + launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0x2 0x2 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gMaliciousMoonsaultExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1 + launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xa 0x0 0xfffe + launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0xfffe 0x0 + launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0x2 0x0 + launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0xfffe 0x2 + launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0x2 0x2 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gMaliciousMoonsaultExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xa 0x0 0xfffe + launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0xfffe 0x0 + launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0x2 0x0 + launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0xfffe 0x2 + launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0x2 0x2 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gMaliciousMoonsaultExplosionSpriteTemplate 0x3 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 + launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xa 0x0 0xfffe + launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0xfffe 0x0 + launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0x2 0x0 + launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0xfffe 0x2 + launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0x2 0x2 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gMaliciousMoonsaultExplosionSpriteTemplate 0x3 0x4 0x10 0x10 ANIM_TARGET 0x1 + launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xa 0x0 0xfffe + launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0xfffe 0x0 + launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0x2 0x0 + launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0xfffe 0x2 + launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0x2 0x2 + return + + +Move_OCEANIC_OPERETTA:: + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + loadspritegfx ANIM_TAG_SPOTLIGHT + launchtask AnimTask_CreateSpotlight 0x2 0x0 + launchtask AnimTask_HardwarePaletteFade 0x2 0x5 0xf8 0x3 0x0 0xa 0x0 + waitforvisualfinish + launchtemplate gOceanOperaSpotlightSpriteTemplate 0x82, 0x3, 0x0 0xfff8 0x50 @spotlight + loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy + loadspritegfx ANIM_TAG_WATER_ORB @blue + playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER + call OceanicOperettaBuffEffect + delay 0x8 + launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xb 0x7fff + launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1 + call OceanicOperettaBuffEffect + delay 0x8 + call OceanicOperettaBuffEffect + waitforvisualfinish + unloadspritegfx ANIM_TAG_FOCUS_ENERGY + unloadspritegfx ANIM_TAG_SPOTLIGHT + launchtask AnimTask_HardwarePaletteFade 0x2 0x5 0xf8 0x3 0xa 0x0 0x1 + waitforvisualfinish + launchtask AnimTask_RemoveSpotlight 0x2 0x0 + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x6 0x5da0 + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT + loadspritegfx ANIM_TAG_THIN_RING + invisible ANIM_ATTACKER + launchtemplate gOceanOperaBlueChargeSpriteTemplate 0x2 0x1 0x0 @charge + delay 0x2 + launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_ATTACKER 0x0 0x2 0x50 0x1 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1c 0x180 0x32 0x8 0x32 ANIM_ATTACKER + launchtemplate gOceanOperaBlueRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0 + delay 0x2 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x20 0xf0 0x28 0xb 0xffd2 ANIM_ATTACKER + delay 0x2 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x21 0x1a0 0x28 0x4 0x2a ANIM_ATTACKER + delay 0x2 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1f 0x120 0x2d 0x6 0xffd6 ANIM_ATTACKER + delay 0x2 + launchtemplate gOceanOperaBlueRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1c 0x1c0 0x2d 0xb 0x2e ANIM_ATTACKER + delay 0x2 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x21 0x1d0 0x32 0xa 0xffce ANIM_ATTACKER + delay 0x2 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1c 0x180 0x32 0x8 0x32 ANIM_ATTACKER + delay 0x2 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x20 0xf0 0x28 0xb 0xffd2 ANIM_ATTACKER + delay 0x2 + launchtemplate gOceanOperaBlueRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0 + playsewithpan SE_M_GRASSWHISTLE, SOUND_PAN_ATTACKER + launchtemplate gOceanOperaBlueRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x21 0x1a0 0x28 0x4 0x2a ANIM_ATTACKER + delay 0x2 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1f 0x120 0x2d 0x6 0xffd6 ANIM_ATTACKER + delay 0x2 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1c 0x1c0 0x2d 0xb 0x2e ANIM_ATTACKER + delay 0x2 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x21 0x1d0 0x32 0xa 0xffce ANIM_ATTACKER + delay 0x2 + launchtemplate gOceanOperaBlueRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1c 0x180 0x32 0x8 0x32 ANIM_ATTACKER + delay 0x2 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x20 0xf0 0x28 0xb 0xffd2 ANIM_ATTACKER + delay 0x2 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x21 0x1a0 0x28 0x4 0x2a ANIM_ATTACKER + delay 0x2 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1f 0x120 0x2d 0x6 0xffd6 ANIM_ATTACKER + delay 0x2 + launchtemplate gOceanOperaBlueRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1c 0x1c0 0x2d 0xb 0x2e ANIM_ATTACKER + delay 0x2 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x21 0x1d0 0x32 0xa 0xffce ANIM_ATTACKER + delay 0x2 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1c 0x180 0x32 0x8 0x32 ANIM_ATTACKER + delay 0x2 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x20 0xf0 0x28 0xb 0xffd2 ANIM_ATTACKER + delay 0x2 + launchtemplate gOceanOperaBlueRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x21 0x1a0 0x28 0x4 0x2a ANIM_ATTACKER + delay 0x2 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1f 0x120 0x2d 0x6 0xffd6 ANIM_ATTACKER + delay 0x2 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1c 0x1c0 0x2d 0xb 0x2e ANIM_ATTACKER + delay 0x2 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x21 0x1d0 0x32 0xa 0xffce ANIM_ATTACKER + delay 0x2 + launchtemplate gOceanOperaBlueRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1c 0x180 0x32 0x8 0x32 ANIM_ATTACKER + delay 0x2 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x20 0xf0 0x28 0xb 0xffd2 ANIM_ATTACKER + delay 0x2 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x21 0x1a0 0x28 0x4 0x2a ANIM_ATTACKER + delay 0x2 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1f 0x120 0x2d 0x6 0xffd6 ANIM_ATTACKER + delay 0x2 + launchtemplate gOceanOperaBlueRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1c 0x1c0 0x2d 0xb 0x2e ANIM_ATTACKER + delay 0x2 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x21 0x1d0 0x32 0xa 0xffce ANIM_ATTACKER + delay 0x2 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1c 0x180 0x32 0x8 0x32 ANIM_ATTACKER + delay 0x2 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x20 0xf0 0x28 0xb 0xffd2 ANIM_ATTACKER + delay 0x2 + launchtemplate gOceanOperaBlueRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x21 0x1a0 0x28 0x4 0x2a ANIM_ATTACKER + delay 0x2 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1f 0x120 0x2d 0x6 0xffd6 ANIM_ATTACKER + delay 0x2 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1c 0x1c0 0x2d 0xb 0x2e ANIM_ATTACKER + delay 0x2 + launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x21 0x1d0 0x32 0xa 0xffce ANIM_ATTACKER + delay 0x1a + visible ANIM_TARGET + loopsewithpan SE_M_CRABHAMMER, SOUND_PAN_TARGET, 0x14, 0x5 + launchtemplate gOceanOperaMovingOrbsSpriteTemplate 0x32 0x6 0x0 0x0 0x0 0x0 0x60 0x0 @mist ball + delay 0x5c + visible ANIM_ATTACKER + delay 0x0 + loopsewithpan SE_M_CRABHAMMER, SOUND_PAN_TARGET, 0x14, 0x1 + launchtemplate gOceanOperaBlueOrbsSpriteTemplate 0x32 0x6 0x0 ANIM_TARGET 0x0 0x0 0x0 0x35 + delay 0x5 + playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER + launchtemplate gOceanOperaExpandingRingSpriteTemplate 0x2 0x4 0x0 0x0 0x0 0x0 + delay 0x4 + launchtemplate gOceanOperaExpandingRingSpriteTemplate 0x2 0x4 0x0 0x0 0x0 0x0 + delay 0x4 + launchtemplate gOceanOperaExpandingRingSpriteTemplate 0x2 0x4 0x0 0x0 0x0 0x0 + delay 0x4 + launchtemplate gOceanOperaExpandingRingSpriteTemplate 0x2 0x4 0x0 0x0 0x0 0x0 + delay 0x4 + launchtemplate gOceanOperaExpandingRingSpriteTemplate 0x2 0x4 0x0 0x0 0x0 0x0 + delay 0x10 + loadspritegfx ANIM_TAG_EXPLOSION @explosion + loadspritegfx ANIM_TAG_SPARKLE_2 @sparkle + loadspritegfx ANIM_TAG_RAIN_DROPS @rain + launchtask AnimTask_HorizontalShake 0x5 0x3 ANIM_TARGET 0x8 0x40 + call OceanicOperettaExplosion + launchtask AnimTask_BlendBattleAnimPal 0x2 0x5 ANIM_PAL_DEF 0x2 0x0 0xb 0x5da0 + launchtask AnimTask_CreateRaindrops 0x2 0x3 0x0 0x3 0x78 + call OceanicOperettaExplosion + call OceanicOperettaExplosion + playsewithpan SE_M_RAIN_DANCE, SOUND_PAN_ATTACKER + launchtask AnimTask_CreateRaindrops 0x2 0x3 0x0 0x3 0x78 + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0x2 0x5 ANIM_PAL_DEF 0x2 0xb 0x0 0x5da0 + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x6 0x0 0x5da0 + waitforvisualfinish + launchtask AnimTask_AllBanksVisible 0xA 0x0 + waitforvisualfinish + end +OceanicOperettaBuffEffect: + launchtemplate gOceanOperaBlueFlareSpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2 + delay 0x4 + launchtemplate gOceanOperaBlueFlareSpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1 + delay 0x4 + launchtemplate gOceanOperaBlueFlareSpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2 + delay 0x4 + launchtemplate gOceanOperaBlueFlareSpriteTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3 + delay 0x4 + launchtemplate gOceanOperaBlueFlareSpriteTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1 + return +OceanicOperettaExplosion: + launchtemplate gOceanOperaSparkleSpriteTemplate 0x33 0x6 0xfff1 0x0 ANIM_TARGET 0x0 0x20 0x3c + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gOceanOperaExplosionSpriteTemplate 0x33 0x4 0x0 0x0 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gOceanOperaExplosionSpriteTemplate 0x33 0x4 0x18 0xffe8 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gOceanOperaExplosionSpriteTemplate 0x33 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + launchtemplate gOceanOperaSparkleSpriteTemplate 0x33 0x6 0xc 0xfffb ANIM_TARGET 0x0 0x20 0x3c + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gOceanOperaExplosionSpriteTemplate 0x33 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gOceanOperaExplosionSpriteTemplate 0x33 0x4 0x10 0x10 ANIM_TARGET 0x1 + delay 0x6 + return + + +Move_SPLINTERED_STORMSHARDS:: + loadspritegfx ANIM_TAG_ROCKS @rock + loadspritegfx ANIM_TAG_ICICLE_SPEAR @spear + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + launchtask AnimTask_GetLycanrocForm 0x2 0x0 + jumpargeq 0x0 0x1 SplinteredStormshardsNightForme +SplinteredStormshardsDayForme: + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xc 0x5bff + goto SplinteredStormshardsFinishFade +SplinteredStormshardsNightForme: + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xc 0x0000 +SplinteredStormshardsFinishFade: + waitforvisualfinish + setblends 0x80c + playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER + launchtask AnimTask_IsTargetPlayerSide 0x2 0x0 + jumpargeq 0x7 ANIM_TARGET SplinteredStormshardsByOpponent +SplinteredStormshardsByPlayer: + loopsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET, 0x10, 0xc + call SplinteredStormshardsPlayer_Rising1 + delay 0x2 + loadspritegfx ANIM_TAG_ROUND_SHADOW @fly + invisible ANIM_TARGET + playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER + launchtemplate gSplinteredShardsFlySpriteTemplate 0x2 0x4 0x0 0x0 0xd 0x150 + call SplinteredStormshardsPlayer_Rising1 + call SplinteredStormshardsPlayer_Rising2 + visible ANIM_ATTACKER + delay 0x1 + launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x60 0x80 0x60 0x30 0x30 + launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xb 0x5bff + launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1 + delay 0x2 + call SplinteredStormshardsPlayer_Rising2 + call SplinteredStormshardsPlayer_Rising1 + delay 16 + waitforvisualfinish + visible ANIM_TARGET + call SplinteredStormshardsFixBackgroundFade + waitforvisualfinish + loadspritegfx ANIM_TAG_METEOR @superpower + loadspritegfx ANIM_TAG_EXPLOSION @explosion + playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER + launchtemplate gHorizontalLungeSpriteTemplate 0x2 0x2 0x4 0x4 @lunge forward + delay 0x2 + invisible ANIM_ATTACKER + launchtemplate gGrowingSuperpowerTemplate 0x83 0x1 0x0 @superpower + launchtask AnimTask_ShakeMon 0x5 0x5 0x1 0x0 0x4 0x60 0x1 @shake target up and down + launchtemplate gSplinteredShardsSplinterOpponentSteepSpriteTemplate 0x2 0x8 0xffd0 0x18 0x0 0x0 0xa 0x1 0x0 0x1 + delay 0x4 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + delay 0x4 + launchtemplate gSplinteredShardsSplinterOpponentShallowSpriteTemplate 0x2 0x8 0xffd0 0x1 0x0 0x0 0xa 0x1 0x0 0x1 + delay 0x4 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + delay 0x4 + call SplinteredStormshardsExplosionOpponent + call SplinteredStormshardsExplosionOpponent +SplinteredStormshardsEnd: + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG | ANIM_PAL_ALL_BATTLERS, 0x4, 0x0, 0x10, 0x7fff + call SplinteredStormshardsBrownExplode + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG | ANIM_PAL_ALL_BATTLERS, 0x4, 0x10, 0x0, 0x7fff + waitforvisualfinish + launchtask AnimTask_AllBanksVisible 0xA 0x0 + waitforvisualfinish + waitforvisualfinish + end +SplinteredStormshardsExplosionOpponent: + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gSplinteredShardsExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1 + launchtemplate gSplinteredShardsSplinterOpponentSteepSpriteTemplate 0x82 0x8 0xffd0 0x20 0x0 0x0 0xa 0x1 0x0 0x1 + delay 0x4 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + delay 0x2 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gSplinteredShardsExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1 + launchtemplate gSplinteredShardsSplinterOpponentShallowSpriteTemplate 0x82 0x8 0xffd0 0x0 0x0 0x0 0xa 0x1 0x0 0x1 + delay 0x4 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + delay 0x2 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gSplinteredShardsExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + launchtemplate gSplinteredShardsSplinterOpponentShallowSpriteTemplate 0x82 0x8 0xffd0 0xfff8 0x0 0x0 0xa 0x1 0x0 0x1 + delay 0x4 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + delay 0x2 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gSplinteredShardsExplosionSpriteTemplate 0x83 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 + launchtemplate gSplinteredShardsSplinterOpponentSteepSpriteTemplate 0x82 0x8 0xffd0 0x20 0x0 0x0 0xa 0x1 0x0 0x1 + delay 0x4 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + delay 0x2 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gSplinteredShardsExplosionSpriteTemplate 0x83 0x4 0x10 0x10 ANIM_TARGET 0x1 + launchtemplate gSplinteredShardsSplinterOpponentShallowSpriteTemplate 0x82 0x8 0xffd0 0x0 0x0 0x0 0xa 0x1 0x0 0x1 + delay 0x4 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + delay 0x2 + return +SplinteredStormshardsByOpponent: + loopsewithpan SE_M_ROCK_THROW SOUND_PAN_TARGET 0x10 0xc + call SplinteredStormshardsOpponent_Rising1 + delay 0x2 + loadspritegfx ANIM_TAG_ROUND_SHADOW @fly + invisible ANIM_TARGET + launchtemplate gSplinteredShardsFlySpriteTemplate 0x2 0x4 0x0 0x0 0xd 0x150 + call SplinteredStormshardsOpponent_Rising1 + call SplinteredStormshardsOpponent_Rising2 + visible ANIM_ATTACKER + delay 0x1 + launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0xd0 0x40 0xd0 0x0 0x30 + launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xb 0x5bff + launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1 + delay 0x2 + call SplinteredStormshardsOpponent_Rising2 + call SplinteredStormshardsOpponent_Rising1 + delay 16 + waitforvisualfinish + visible ANIM_TARGET + call SplinteredStormshardsFixBackgroundFade + waitforvisualfinish + visible ANIM_TARGET + loadspritegfx ANIM_TAG_METEOR @superpower + loadspritegfx ANIM_TAG_EXPLOSION @explosion + playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER + launchtemplate gHorizontalLungeSpriteTemplate 0x2 0x2 0x4 0x4 @lunge forward + delay 0x2 + invisible ANIM_ATTACKER + launchtemplate gGrowingSuperpowerTemplate 0x83 0x1 0x0 @superpower + launchtask AnimTask_ShakeMon 0x5 0x5 0x1 0x0 0x4 0x60 0x1 @shake target up and down + launchtemplate gSplinteredShardsSplinterPlayerShallowSpriteTemplate 0x82 0x8 0xffd0 0x18 0x0 0x0 0xa 0x1 0x0 0x1 + delay 0x4 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + delay 0x4 + launchtemplate gSplinteredShardsSplinterPlayerSteepSpriteTemplate 0x82 0x8 0xffd0 0x30 0x0 0x0 0xa 0x1 0x0 0x1 + delay 0x4 + delay 0x4 + call SplinteredStormshardsExplosionOnPlayer + call SplinteredStormshardsExplosionOnPlayer + goto SplinteredStormshardsEnd +SplinteredStormshardsExplosionOnPlayer: + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gSplinteredShardsExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1 + launchtemplate gSplinteredShardsSplinterPlayerShallowSpriteTemplate 0x82 0x8 0xffd0 0x20 0x0 0x0 0xa 0x1 0x0 0x1 + delay 0x4 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + delay 0x2 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gSplinteredShardsExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1 + launchtemplate gSplinteredShardsSplinterPlayerSteepSpriteTemplate 0x82 0x8 0xffd0 0x35 0x0 0x0 0xa 0x1 0x0 0x1 + delay 0x4 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + delay 0x2 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gSplinteredShardsExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + launchtemplate gSplinteredShardsSplinterPlayerShallowSpriteTemplate 0x82 0x8 0xffd0 0x1c 0x0 0x0 0xa 0x1 0x0 0x1 + delay 0x4 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + delay 0x2 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gSplinteredShardsExplosionSpriteTemplate 0x83 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 + launchtemplate gSplinteredShardsSplinterPlayerShallowSpriteTemplate 0x82 0x8 0xffd0 0x16 0x0 0x0 0xa 0x1 0x0 0x1 + delay 0x4 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + delay 0x2 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gSplinteredShardsExplosionSpriteTemplate 0x83 0x4 0x10 0x10 ANIM_TARGET 0x1 + launchtemplate gSplinteredShardsSplinterPlayerSteepSpriteTemplate 0x82 0x8 0xffd0 0x2d 0x0 0x0 0xa 0x1 0x0 0x1 + delay 0x4 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + delay 0x2 + return +SplinteredStormshardsBrownExplode: + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gSplinteredShardsExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gSplinteredShardsExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gSplinteredShardsExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gSplinteredShardsExplosionSpriteTemplate 0x83 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gSplinteredShardsExplosionSpriteTemplate 0x83 0x4 0x10 0x10 ANIM_TARGET 0x1 + delay 0x6 + return +SplinteredStormshardsPlayer_Rising1: + launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x24 0x80 0x24 0x30 0x30 + delay 0x2 + launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x10 0x80 0x10 0x35 0x30 + delay 0x2 + launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x45 0x80 0x45 0x3a 0x30 + delay 0x2 + launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x60 0x80 0x60 0x30 0x30 + delay 0x2 + launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x30 0x80 0x30 0x3c 0x30 + delay 0x2 + launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x55 0x80 0x55 0x33 0x30 + delay 0x2 + return +SplinteredStormshardsPlayer_Rising2: + launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x29 0x80 0x29 0x31 0x30 + delay 0x2 + launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x73 0x80 0x73 0x32 0x30 + delay 0x2 + launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x4a 0x80 0x4a 0x3c 0x30 + delay 0x2 + launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x64 0x80 0x64 0x33 0x30 + delay 0x2 + launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x2c 0x80 0x2c 0x3d 0x30 + delay 0x2 + launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x6c 0x80 0x6c 0x30 0x30 + delay 0x2 + return +SplinteredStormshardsOpponent_Rising1: + launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x94 0x40 0x94 0x0 0x30 + delay 0x2 + launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x80 0x40 0x80 0x0 0x30 + delay 0x2 + launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0xb5 0x40 0xb5 0x0 0x30 + delay 0x2 + launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0xd0 0x40 0xd0 0x0 0x30 + delay 0x2 + launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0xa0 0x40 0xa0 0x0 0x30 + delay 0x2 + launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0xc5 0x40 0xc5 0x0 0x30 + delay 0x2 + return +SplinteredStormshardsOpponent_Rising2: + launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x99 0x40 0x99 0x0 0x30 + delay 0x2 + launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0xe3 0x40 0xe3 0x0 0x30 + delay 0x2 + launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0xba 0x40 0xba 0x0 0x30 + delay 0x2 + launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0xd4 0x40 0xd4 0x0 0x30 + delay 0x2 + launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x9c 0x40 0x9c 0x0 0x30 + delay 0x2 + launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0xdc 0x40 0xdc 0x0 0x30 + delay 0x2 + return +SplinteredStormshardsFixBackgroundFade: + launchtask AnimTask_GetLycanrocForm 0x2 0x0 + jumpargeq 0x0 0x1 SplinteredStormshardsNightFormeReturn +SplinteredStormshardsDayFormeReturn: + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xc 0x0 0x5bff + goto SplinteredStormshardsFinishFadeReturn +SplinteredStormshardsNightFormeReturn: + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xc 0x0 0x0000 +SplinteredStormshardsFinishFadeReturn: + return + + +Move_LETS_SNUGGLE_FOREVER:: + loadspritegfx ANIM_TAG_MAGENTA_HEART @sharm + loadspritegfx ANIM_TAG_MUSIC_NOTES @music note + loadspritegfx ANIM_TAG_SMALL_BUBBLES @fake tears + loadspritegfx ANIM_TAG_VERTICAL_HEX @red + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + launchtask AnimTask_RockMonBackAndForth 0x5 0x3 0x0 0x2 0x0 + launchtemplate gSnuggleForeverHeartSpriteTemplate 0x3 0x2 0x0 0x14 + playsewithpan SE_M_CHARM, SOUND_PAN_ATTACKER + launchtemplate gSlowFlyingMusicNotesSpriteTemplate 0x2 0x4 0x1 0x1 0x1 0x0 + delay 0x7 + launchtemplate gSlowFlyingMusicNotesSpriteTemplate 0x2 0x4 0x0 0x3 0x3 0x80 + delay 0x8 + playsewithpan SE_M_CHARM, SOUND_PAN_ATTACKER + launchtemplate gSlowFlyingMusicNotesSpriteTemplate 0x2 0x4 0x1 0x2 0x0 0x80 + delay 0x7 + launchtemplate gSlowFlyingMusicNotesSpriteTemplate 0x2 0x4 0x0 0x1 0x1 0x0 + delay 0x8 + playsewithpan SE_M_CHARM, SOUND_PAN_ATTACKER + delay 0x7 + launchtemplate gSlowFlyingMusicNotesSpriteTemplate 0x2 0x4 0x1 0x0 0x3 0x0 + delay 0x7 + fadetobg BG_SNUGGLE_FOREVER + waitbgfadeout + invisible ANIM_ATTACKER + delay 0x1 + setarg 0x7 0x0 @;Clear arg 7 so task works properly in Link battles + launchtask AnimTask_SnatchOpposingMonMove 0x2 0x0 + delay 0x10 + playsewithpan SE_M_FAINT_ATTACK, SOUND_PAN_ATTACKER + waitforvisualfinish + setarg 0x7 0x0 @;Clear arg 7 so task works properly in Link battles + launchtask AnimTask_SnatchOpposingMonMove 0x2 0x0 + delay 0x10 + playsewithpan SE_M_FAINT_ATTACK, SOUND_PAN_ATTACKER + waitforvisualfinish + setarg 0x7 0x0 @;Clear arg 7 so task works properly in Link battles + launchtask AnimTask_SnatchOpposingMonMove 0x2 0x0 + delay 0x10 + playsewithpan SE_M_FAINT_ATTACK, SOUND_PAN_ATTACKER + launchtask AnimTask_ShakeMon 0x5 0x5 0x1 0x0 0x2 0x32 0x1 + call LetsSnuggleForeverTears + delay 0x8 + call LetsSnuggleForeverTears + delay 0x8 + call LetsSnuggleForeverTears + delay 0x8 + call LetsSnuggleForeverTears + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG | ANIM_PAL_ALL_BATTLERS, 0x2, 0x0, 0x10, 0x0000 + waitforvisualfinish + loadspritegfx ANIM_TAG_SPARKLE_4 @detect + playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER + launchtemplate gSnuggleForeverEyesSpriteTemplate 0xd 0x2 0xa 0xfff2 + launchtemplate gSnuggleForeverEyesSpriteTemplate 0xd 0x2 0xfff6 0xfff2 + delay 0x20 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x1 0x0 0x10 0x579D + launchtask AnimTask_GrowTarget 0x5 0x0 + delay 0x5 + loadspritegfx ANIM_TAG_IMPACT @hit + loadspritegfx ANIM_TAG_PAIN_SPLIT @painsplit + loadspritegfx ANIM_TAG_DUCK @duck + loopsewithpan SE_M_CRABHAMMER, SOUND_PAN_TARGET, 0x14, 10 + launchtask AnimTask_TranslateMonElliptical 0x2 0x5 0x0 0xffee 0xa 0xa 0x4 + launchtask AnimTask_TranslateMonElliptical 0x2 0x5 0x1 0x12 0xa 0xa 0x4 + call LetsSnuggleForeverStars_1 + call LetsSnuggleForeverImpacts + call LetsSnuggleForeverStars_2 + call LetsSnuggleForeverImpacts + call LetsSnuggleForeverStars_1 + playsewithpan SE_M_FLAMETHROWER, SOUND_PAN_TARGET + call LetsSnuggleForeverStars_2 + call LetsSnuggleForeverImpacts + launchtask AnimTask_TranslateMonElliptical 0x2 0x5 0x0 0xffee 0x6 0x6 0x4 + launchtask AnimTask_TranslateMonElliptical 0x2 0x5 0x1 0x12 0x6 0x6 0x4 + call LetsSnuggleForeverStars_1 + delay 0x0 + call LetsSnuggleForeverImpacts + call LetsSnuggleForeverStars_2 + delay 0x0 + call LetsSnuggleForeverImpacts + call LetsSnuggleForeverStars_1 + delay 0x0 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ALL-ANIM_PAL_DEF 0x2 0x0 0x10 0x7fff + playsewithpan SE_M_FLAMETHROWER, SOUND_PAN_TARGET + call LetsSnuggleForeverStars_2 + delay 0x0 + call LetsSnuggleForeverImpacts + invisible ANIM_TARGET + stopsound + waitforvisualfinish + call ResetFromWhiteScreen + end +LetsSnuggleForeverTears: + playsewithpan SE_M_TAIL_WHIP, SOUND_PAN_TARGET + launchtemplate gTearDropSpriteTemplate 0x82 0x2 ANIM_TARGET 0x0 + launchtemplate gTearDropSpriteTemplate 0x82 0x2 ANIM_TARGET 0x1 + delay 0x8 + launchtemplate gTearDropSpriteTemplate 0x82 0x2 ANIM_TARGET 0x2 + launchtemplate gTearDropSpriteTemplate 0x82 0x2 ANIM_TARGET 0x3 + return +LetsSnuggleForeverImpacts: + launchtemplate gBasicHitSplatSpriteTemplate 0x83 0x4 0x0 0xfff4 0x1 0x0 + delay 0x8 + launchtemplate gBasicHitSplatSpriteTemplate 0x83 0x4 0xfff4 0x8 0x1 0x0 + delay 0x8 + launchtemplate gBasicHitSplatSpriteTemplate 0x83 0x4 0xc 0x0 0x1 0x0 + delay 0x8 + return +LetsSnuggleForeverStars_1: + launchtemplate gSnuggleForeverStarSpriteTemplate 0x83 0x4 0xfff0 0xfff8 0xa0 0xffe0 + launchtemplate gSnuggleForeverStarSpriteTemplate 0x83 0x4 0xfff0 0xfff8 0xff00 0xffd8 + launchtemplate gSnuggleForeverStarSpriteTemplate 0x83 0x4 0xfff0 0xfff8 0x80 0xfff0 + launchtemplate gSnuggleForeverStarSpriteTemplate 0x83 0x4 0xfff0 0xfff8 0x1a0 0xffda + launchtemplate gSnuggleForeverStarSpriteTemplate 0x83 0x4 0xfff0 0xfff8 0xff80 0xffea + launchtemplate gSnuggleForeverStarSpriteTemplate 0x83 0x4 0xfff0 0xfff8 0xfe80 0xffe1 + return +LetsSnuggleForeverStars_2: + launchtemplate gSnuggleForeverStarSpriteTemplate 0x83 0x4 0x10 0x8 0xa0 0xffe0 + launchtemplate gSnuggleForeverStarSpriteTemplate 0x83 0x4 0x10 0x8 0xff00 0xffd8 + launchtemplate gSnuggleForeverStarSpriteTemplate 0x83 0x4 0x10 0x8 0x80 0xfff0 + launchtemplate gSnuggleForeverStarSpriteTemplate 0x83 0x4 0x10 0x8 0x1a0 0xffda + launchtemplate gSnuggleForeverStarSpriteTemplate 0x83 0x4 0x10 0x8 0xff80 0xffea + launchtemplate gSnuggleForeverStarSpriteTemplate 0x83 0x4 0x10 0x8 0xfe80 0xffe1 + return + + +Move_CLANGOROUS_SOULBLAZE:: + loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy + loadspritegfx ANIM_TAG_WATER_ORB @blue + loadspritegfx ANIM_TAG_POISON_BUBBLE @purple + loadspritegfx ANIM_TAG_AIR_WAVE_2 @white/grey + loadspritegfx ANIM_TAG_SPARKLE_2 @stars + fadetobg BG_CLANGOROUS_SOULBLAZE + waitbgfadein + launchtask AnimTask_RockMonBackAndForth 0x5 0x3 0x0 0x2 0x0 + call ClangorousSoulblazeBuffEffect + call ClangorousSoulblazeBuffEffect + call ClangorousSoulblazeBuffEffect + waitforvisualfinish + loadspritegfx ANIM_TAG_VERTICAL_HEX @red + loadspritegfx ANIM_TAG_HORSESHOE_SIDE_FIST @fist + launchtemplate gClangorousSoulRedFistTemplate 0x2 0x8 0xfff0 0x0 0x0 0x0 0xa ANIM_ATTACKER ANIM_RIGHT_FIST 0x1 + launchtemplate gClangorousSoulRedFistTemplate 0x2 0x8 0x10 0x0 0x0 0x0 0xa ANIM_ATTACKER ANIM_LEFT_FIST 0x1 + playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET + waitforvisualfinish + loadspritegfx ANIM_TAG_THIN_RING @ring + playsewithpan SE_SHINY, SOUND_PAN_ATTACKER + launchtemplate gClangorousSoulRedRingTemplate 0x3 0x4 0x0 0x0 0x0 0x0 + waitforvisualfinish + unloadspritegfx ANIM_TAG_HORSESHOE_SIDE_FIST + unloadspritegfx ANIM_TAG_SPARKLE_2 @stars + loadspritegfx ANIM_TAG_ROUND_SHADOW @ fly + playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER + launchtemplate gClangoorousSoulblazeWhiteFlySpriteTemplate 0x2 0x4 0x0 0x0 0xd 0x150 + delay 0x2 + launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0 0xFFE0 0x1 0xffff + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xfd00 0xa 0x0 0x2a + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_DEF_PARTNER 0xfd00 0xa 0x0 0x2a + delay 0x20 + launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0 0x20 0x1 0xffff + delay 0xC + setblends 0x80c + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x4 0x0 + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge + visible ANIM_ATTACKER + monbg ANIM_ATTACKER + loopsewithpan SE_M_PSYBEAM2, SOUND_PAN_ATTACKER, 0xe, 0xa + launchtemplate gClangoorousSoulblazePurpleChargeSpriteTemplate 0x2 0x1 0x0 @charge + call ClangorousSoulblazeEnergySwirl + call ClangorousSoulblazeEnergySwirl + call ClangorousSoulblazeEnergySwirl + call ClangorousSoulblazeEnergySwirl + call ClangorousSoulblazeEnergySwirl + waitforvisualfinish + unloadspritegfx ANIM_TAG_WATER_ORB @whirlpool + unloadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge + unloadspritegfx ANIM_TAG_ROUND_SHADOW @fly + unloadspritegfx ANIM_TAG_AIR_WAVE_2 @white + unloadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy + loadspritegfx ANIM_TAG_MUSIC_NOTES @music note + clearmonbg ANIM_ATTACKER + invisible ANIM_ATTACKER + invisible ANIM_ATK_PARTNER + delay 0x0 + monbg ANIM_TARGET + playsewithpan SE_M_GIGA_DRAIN, SOUND_PAN_ATTACKER + launchtemplate gClangoorousSoulblazePulseSpriteTemplate 0x2 0x6 0x10 0x0 0x0 0x0 0x1d 0x0 + launchtemplate gSlowFlyingMusicNotesSpriteTemplate 0x2 0x4 0x0 0x0 0x0 0x0 @music note + delay 0x5 + launchtask AnimTask_HorizontalShake 0x5 0x3 ANIM_TARGET 0x2 0x3c + launchtask AnimTask_HorizontalShake 0x5 0x3 ANIM_DEF_PARTNER 0x2 0x3c + call ClangorousSoulblazePulse_1 + delay 0x5 + call ClangorousSoulblazePulse_2 + delay 0x5 + call ClangorousSoulblazePulse_3 + delay 0x5 + call ClangorousSoulblazePulse_4 + loadspritegfx ANIM_TAG_EXPLOSION + launchtask AnimTask_IsTargetPlayerSide 0x2 0x0 + jumpargeq 0x7 ANIM_TARGET ClangorousSoulblazeOnOpponent +ClangorousSoulblazeOnPlayer: + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x10 0xfff0 ANIM_ATTACKER 0x1 + delay 0x5 + call ClangorousSoulblazePulse_5 + launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x10 0x10 ANIM_ATTACKER 0x1 + delay 0x5 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x20 0xffe0 ANIM_ATTACKER 0x1 + call ClangorousSoulblazePulse_1 + delay 0x5 + launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x20 0x0 ANIM_ATTACKER 0x1 + call ClangorousSoulblazePulse_2 + delay 0x5 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x30 0xffe0 ANIM_ATTACKER 0x1 + call ClangorousSoulblazePulse_3 + delay 0x5 + launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x30 0xfff0 ANIM_ATTACKER 0x1 + call ClangorousSoulblazePulse_4 + delay 0x5 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x35 0x0 ANIM_ATTACKER 0x1 + call ClangorousSoulblazePulse_5 + delay 0x5 + launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x40 0x10 ANIM_ATTACKER 0x1 + call ClangorousSoulblazePulse_1 + delay 0x5 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x40 0x0 ANIM_ATTACKER 0x1 + call ClangorousSoulblazePulse_2 + delay 0x5 + launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x45 0xfff0 ANIM_ATTACKER 0x1 + call ClangorousSoulblazePulse_3 + delay 0x5 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x50 0x10 ANIM_ATTACKER 0x1 + call ClangorousSoulblazePulse_4 + delay 0x5 + launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x50 0xffe0 ANIM_ATTACKER 0x1 + call ClangorousSoulblazePulse_5 + delay 0x5 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x60 0xfff0 ANIM_ATTACKER 0x1 + call ClangorousSoulblazePulse_1 + delay 0x5 + launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x60 0xffe0 ANIM_ATTACKER 0x1 + call ClangorousSoulblazePulse_2 + delay 0x5 + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG | ANIM_PAL_ALL_BATTLERS, 0x4, 0x0, 0x10, 0x7fff + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x65 0xfff0 ANIM_ATTACKER 0x1 + call ClangorousSoulblazePulse_3 + delay 0x5 + launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x65 0xffe0 ANIM_ATTACKER 0x1 + launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x0 0x0 ANIM_TARGET 0x1 + call ClangorousSoulblazePulse_4 + delay 0x5 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x18 0xffe8 ANIM_TARGET 0x1 + call ClangorousSoulblazePulse_5 + delay 0x5 + launchtemplate gExplosionSpriteTemplate 0x3 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + call ClangorousSoulblazePulse_1 + delay 0x5 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gExplosionSpriteTemplate 0x3 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 + call ClangorousSoulblazePulse_2 + delay 0x5 + launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x10 0x10 ANIM_TARGET 0x1 + goto FINISH_SOULBLAZE +ClangorousSoulblazeOnOpponent: + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x10 0x15 ANIM_ATTACKER 0x1 + delay 0x5 + call ClangorousSoulblazePulse_5 + launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x10 0x0 ANIM_ATTACKER 0x1 + delay 0x5 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x20 0x25 ANIM_ATTACKER 0x1 + call ClangorousSoulblazePulse_1 + delay 0x5 + launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x20 0x5 ANIM_ATTACKER 0x1 + call ClangorousSoulblazePulse_2 + delay 0x5 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x30 0x25 ANIM_ATTACKER 0x1 + call ClangorousSoulblazePulse_3 + delay 0x5 + launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x30 0x15 ANIM_ATTACKER 0x1 + call ClangorousSoulblazePulse_4 + delay 0x5 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x35 0x0 ANIM_ATTACKER 0x1 + call ClangorousSoulblazePulse_5 + delay 0x5 + launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x40 0xa ANIM_ATTACKER 0x1 + call ClangorousSoulblazePulse_1 + delay 0x5 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x40 0x0 ANIM_ATTACKER 0x1 + call ClangorousSoulblazePulse_2 + delay 0x5 + launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x45 0x10 ANIM_ATTACKER 0x1 + call ClangorousSoulblazePulse_3 + delay 0x5 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x50 0x30 ANIM_ATTACKER 0x1 + call ClangorousSoulblazePulse_4 + delay 0x5 + launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x50 0x25 ANIM_ATTACKER 0x1 + call ClangorousSoulblazePulse_5 + delay 0x5 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x60 0x40 ANIM_ATTACKER 0x1 + call ClangorousSoulblazePulse_1 + delay 0x5 + launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x60 0x45 ANIM_ATTACKER 0x1 + call ClangorousSoulblazePulse_2 + delay 0x5 + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_ALL_BATTLERS | ANIM_PAL_BG, 0x4, 0x0, 0x10, 0x7fff + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x65 0x35 ANIM_ATTACKER 0x1 + call ClangorousSoulblazePulse_3 + delay 0x5 + launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x65 0x40 ANIM_ATTACKER 0x1 + launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1 + call ClangorousSoulblazePulse_4 + delay 0x5 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1 + call ClangorousSoulblazePulse_5 + delay 0x5 + launchtemplate gExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + call ClangorousSoulblazePulse_1 + delay 0x5 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gExplosionSpriteTemplate 0x83 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 + call ClangorousSoulblazePulse_2 + delay 0x5 + launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x10 0x10 ANIM_TARGET 0x1 +FINISH_SOULBLAZE: + waitforvisualfinish + clearmonbg ANIM_TARGET + delay 0x5 + call ResetFromWhiteScreen + blendoff + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x10 + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_DEF_PARTNER 0x0 0x10 + waitforvisualfinish + end +ClangorousSoulblazeEnergySwirl: + launchtemplate gClangoorousSoulblazePurpleSwirlSpriteTemplate 0x82 0x7 0x0 0x1c 0x180 0x32 0x8 0x32 ANIM_ATTACKER + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2 + delay 0x2 + launchtemplate gClangoorousSoulblazePurpleSwirlSpriteTemplate 0x82 0x7 0x0 0x20 0xf0 0x28 0xb 0xffd2 ANIM_ATTACKER + delay 0x2 + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1 + launchtemplate gClangoorousSoulblazePurpleSwirlSpriteTemplate 0x82 0x7 0x0 0x21 0x1a0 0x28 0x4 0x2a ANIM_ATTACKER + delay 0x2 + launchtemplate gClangoorousSoulblazePurpleSwirlSpriteTemplate 0x82 0x7 0x0 0x1f 0x120 0x2d 0x6 0xffd6 ANIM_ATTACKER + delay 0x2 + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2 + launchtemplate gClangoorousSoulblazePurpleSwirlSpriteTemplate 0x82 0x7 0x0 0x1c 0x1c0 0x2d 0xb 0x2e ANIM_ATTACKER + delay 0x2 + launchtemplate gClangoorousSoulblazePurpleSwirlSpriteTemplate 0x82 0x7 0x0 0x21 0x1d0 0x32 0xa 0xffce ANIM_ATTACKER + delay 0x2 + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3 + return +ClangorousSoulblazeBuffEffect: + playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER + launchtemplate gClangorousSoulBlueBuffTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2 + delay 0x4 + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1 + delay 0x4 + launchtemplate gClangorousSoulPurpleBuffTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2 + launchtemplate gGrantingStarsSpriteTemplate 0x2 0x6 0xfff1 0x0 0x0 0x0 0x20 0x3c + delay 0x4 + launchtemplate gClangorousSoulWhiteBuffTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3 + delay 0x4 + launchtemplate gGrantingStarsSpriteTemplate 0x2 0x6 0xc 0xfffb 0x0 0x0 0x20 0x3c + return +ClangorousSoulblazePulse_1: + playsewithpan SE_M_UPROAR, SOUND_PAN_ATTACKER + launchtemplate gClangoorousSoulblazePulseSpriteTemplate 0x2 0x6 0x10 0x0 0x0 0x0 0x1d 0x0 + launchtemplate gSlowFlyingMusicNotesSpriteTemplate 0x2 0x4 0x1 0x1 0x1 0x0 + return +ClangorousSoulblazePulse_2: + playsewithpan SE_M_UPROAR, SOUND_PAN_ATTACKER + launchtemplate gClangoorousSoulblazePulseSpriteTemplate 0x2 0x6 0x10 0x0 0x0 0x0 0x1d 0x0 + launchtemplate gSlowFlyingMusicNotesSpriteTemplate 0x2 0x4 0x0 0x3 0x3 0x80 + return +ClangorousSoulblazePulse_3: + playsewithpan SE_M_UPROAR, SOUND_PAN_ATTACKER + launchtemplate gClangoorousSoulblazePulseSpriteTemplate 0x2 0x6 0x10 0x0 0x0 0x0 0x1d 0x0 + launchtemplate gSlowFlyingMusicNotesSpriteTemplate 0x2 0x4 0x1 0x2 0x0 0x80 + return +ClangorousSoulblazePulse_4: + playsewithpan SE_M_UPROAR, SOUND_PAN_ATTACKER + launchtemplate gClangoorousSoulblazePulseSpriteTemplate 0x2 0x6 0x10 0x0 0x0 0x0 0x1d 0x0 + launchtemplate gSlowFlyingMusicNotesSpriteTemplate 0x2 0x4 0x0 0x1 0x1 0x0 + return +ClangorousSoulblazePulse_5: + playsewithpan SE_M_UPROAR, SOUND_PAN_ATTACKER + launchtemplate gClangoorousSoulblazePulseSpriteTemplate 0x2 0x6 0x10 0x0 0x0 0x0 0x1d 0x0 + launchtemplate gSlowFlyingMusicNotesSpriteTemplate 0x2 0x4 0x1 0x0 0x3 0x0 + return + + +Move_GUARDIAN_OF_ALOLA:: + loadspritegfx ANIM_TAG_THIN_RING @ring + loadspritegfx ANIM_TAG_MUD_SAND @dig + loadspritegfx ANIM_TAG_SPEED_DUST @extremespeed + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + launchtemplate gThinRingExpandingSpriteTemplate 0x3 0x4 0x0 0x0 0x0 0x0 + playsewithpan SE_SHINY, SOUND_PAN_ATTACKER + waitforvisualfinish + unloadspritegfx ANIM_TAG_THIN_RING + playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0xff00 0xf 0x0 0x4 + call GuardianOfAlolaRocksPlayer + delay 0xa + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0x0 0x10 + call GuardianOfAlolaRocksPlayer + waitforvisualfinish + delay 0xa + playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0xff00 0xf 0x0 0x4 + call GuardianOfAlolaRocksPlayer + delay 0xa + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0x0 0x10 + call GuardianOfAlolaRocksPlayer + waitforvisualfinish + delay 0xa + delay 0x10 + call GuardianOfAlolaRocksPlayer + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x2 0xC 0xC 0x277f @;Yellow + launchtask AnimTask_NightShadeClone 0x5 0x1 0x75 + delay 0x10 + call GuardianOfAlolaRocksPlayer + delay 0x10 + call GuardianOfAlolaRocksPlayer + delay 0x10 + loadspritegfx ANIM_TAG_HORSESHOE_SIDE_FIST + call GuardianOfAlolaRocksPlayer + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x3 0x0 0xb 0x0000 + delay 0x1 + launchtask AnimTask_BlendParticle, 0x2, 0x5, ANIM_TAG_HORSESHOE_SIDE_FIST, 0x0, 0xC, 0xc, 0x277f + fadetobg BG_FISSURE + waitbgfadeout + call GuardianOfAlolaRocksPlayer + launchtask AnimTask_PositionFissureBgOnBattler 0x5 0x3 0x1 0x5 0xffff + waitbgfadein + playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_TARGET + launchtemplate gGuardianOfAlolaFistSpriteTemplate 0x83 0x3 0x0 0xffd0 0x1f + delay 0x24 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x0 0xb 0x0 0x0000 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + launchtask AnimTask_HorizontalShake 0x3 0x3 ANIM_TARGET 0xa 0x25 + loopsewithpan SE_M_ROCK_THROW SOUND_PAN_TARGET 0x10 0x9 + call GuardianOfAlolaRocksTarget + call GuardianOfAlolaRockGeyser + call GuardianOfAlolaRockGeyser + call GuardianOfAlolaRockGeyser + call GuardianOfAlolaRocksTarget + call GuardianOfAlolaRockGeyser + call GuardianOfAlolaRockGeyser + call GuardianOfAlolaRockGeyser + call GuardianOfAlolaRocksTarget + call GuardianOfAlolaRockGeyser + call GuardianOfAlolaRockGeyser + call GuardianOfAlolaRockGeyser + call GuardianOfAlolaRocksTarget + launchtask AnimTask_BlendBattleAnimPal 0x2 0x5 ANIM_PAL_ALL 0x3 0x0 0x10 0x7fff + call GuardianOfAlolaRockGeyser + call GuardianOfAlolaRockGeyser + call GuardianOfAlolaRockGeyser + call GuardianOfAlolaRocksTarget + waitforvisualfinish + call ResetFromWhiteScreen + end +GuardianOfAlolaRocksPlayer: + playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x0 0xc 0x4 0xfff0 0x12 + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x0 0x10 0x4 0xfff6 0x12 + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x1 0xe 0x4 0xffee 0x12 + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x1 0xc 0x4 0xfff0 0x12 + return +GuardianOfAlolaRocksTarget: + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 ANIM_TARGET 0x0 0xc 0x4 0xfff0 0x12 + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 ANIM_TARGET 0x0 0x10 0x4 0xfff6 0x12 + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 ANIM_TARGET 0x1 0xe 0x4 0xffee 0x12 + launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 ANIM_TARGET 0x1 0xc 0x4 0xfff0 0x12 + return +GuardianOfAlolaRockGeyser: + launchtemplate gGuardianOfAlolaDirtGeyserSpriteTemplate 0x82, 0x3, 0 0xfffc 0x10 @ -4, -0x10 + delay 0x0 + launchtemplate gGuardianOfAlolaDirtGeyserSpriteTemplate 0x82, 0x3, 0 0x100D 0x10 @ + delay 0x0 + launchtemplate gGuardianOfAlolaDirtGeyserSpriteTemplate 0x82, 0x3, 0 0x4 0x10 + delay 0x0 + launchtemplate gGuardianOfAlolaDirtGeyserSpriteTemplate 0x82, 0x3, 0 0xfff0 0x10 + delay 0x0 + return + + +Move_SEARING_SUNRAZE_SMASH:: + loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy + loadspritegfx ANIM_TAG_SPARKLE_2 @sparkles + invisible ANIM_TARGET + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x0 0x0 0xe 0x001b + playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER + call SearingSunrazeSmashFlare + delay 0x8 + playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER + launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xb 0x7fff + launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1 + call SearingSunrazeSmashFlare + delay 0x8 + call SearingSunrazeSmashFlare + waitforvisualfinish + unloadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy + unloadspritegfx ANIM_TAG_SPARKLE_2 @sparkles + loadspritegfx ANIM_TAG_WATER_ORB @blue + loadspritegfx ANIM_TAG_THIN_RING @ring + loadspritegfx ANIM_TAG_SHADOW_BALL @shadow ball + loadspritegfx ANIM_TAG_AIR_WAVE_2 @white/grey + playsewithpan SE_M_NIGHTMARE, SOUND_PAN_ATTACKER + launchtemplate gSearingSunrazeSmashGrowWormholeSpriteTemplate 0x2 0x4 0x0 0x0 ANIM_TARGET 0x0 + delay 0x10 + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0x35 0xffed 0x1 0x2 + delay 0x2 + loadspritegfx ANIM_TAG_METEOR @superpower + visible ANIM_TARGET + launchtask AnimTask_RotateMonSpriteToSide 0x2 0x4 0x50 0xfc00 ANIM_TARGET 0x0 @ spin up target + call SearingSunrazeSmashRingsInward + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x30 @ target back to origin (slowly) + call SearingSunrazeSmashRingsInward + delay 0xD + invisible ANIM_TARGET + launchtemplate gSearingSunrazeSmashBlueRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + delay 0x8 + launchtemplate gSearingSunrazeSmashWhiteRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + delay 0x6 + launchtemplate gHorizontalLungeSpriteTemplate 0x2 0x2 0x4 0x4 @lunge forward + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER + delay 0x2 + invisible ANIM_ATTACKER + launchtemplate gGrowingSuperpowerTemplate 0x83 0x1 0x0 @superpower + launchtemplate gSearingSunrazeSmashBlueRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + delay 0x8 + playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_ATTACKER + fadetobg BG_COSMIC + waitbgfadeout + launchtask AnimTask_StartSlidingBg 0x5 0x4 0xf700 0x0 0x1 0xffff + launchtask AnimTask_RotateMonSpriteToSide 0x2 0x4 0x1 0x0 ANIM_TARGET 0x1 @ fix tgt rotation + invisible ANIM_TARGET + waitbgfadein + visible ANIM_ATTACKER + visible ANIM_TARGET + loadspritegfx ANIM_TAG_VERTICAL_HEX @red + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge + loadspritegfx ANIM_TAG_SMALL_EMBER @fire + launchtemplate gSearingSunrazeSmashInfernoOrbSpriteTemplate 0x2 0x1 ANIM_ATTACKER + loopsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER, 0x13, 0x8 + call SearingSunrazeSmashCharge + call SearingSunrazeSmashCharge + call SearingSunrazeSmashCharge + call SearingSunrazeSmashCharge + waitforvisualfinish + unloadspritegfx ANIM_TAG_WATER_ORB @blue + unloadspritegfx ANIM_TAG_THIN_RING @ring + loadspritegfx ANIM_TAG_ROUND_SHADOW @fly + playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_TARGET + launchtemplate gSearingSunrazeSmashRedFlySpriteTemplate 0x2 0x4 0x0 0x0 0xd 0x150 + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG+ANIM_PAL_ATK 0x3 0x0 0xF 0x0 + waitforvisualfinish + playsewithpan SE_ORB, SOUND_PAN_ATTACKER + unloadspritegfx ANIM_TAG_ROUND_SHADOW @fly + unloadspritegfx ANIM_TAG_SHADOW_BALL @shadow ball + loadspritegfx ANIM_TAG_GOLD_RING @beam + loadspritegfx ANIM_TAG_SMALL_RED_EYE @beam colour + invisible ANIM_ATTACKER + call SunsteelStrikeBeam + call SunsteelStrikeBeam + call SunsteelStrikeBeam + call SunsteelStrikeBeam + call SunsteelStrikeBeam + call SunsteelStrikeBeam + call SunsteelStrikeBeam + call SunsteelStrikeBeam + call SunsteelStrikeBeam + call SunsteelStrikeBeam + call SunsteelStrikeBeam + stopsound + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET + loadspritegfx ANIM_TAG_CUT @cut + launchtemplate gSunsteelStrikeSuperpowerTemplate 0x82 0x1 0x14 +SearingSunrazeSmashImpact: + delay 0x8 + delay 0x1 + unloadspritegfx ANIM_TAG_GOLD_RING @beam + launchtask AnimTask_HorizontalShake 0x5 0x3 ANIM_TARGET 0x4 0x3c + playsewithpan SE_M_CUT, SOUND_PAN_TARGET + launchtemplate gSearingSunrazeSmashWhiteCutSpriteTemplate 0x82, 0x3, 0x20 0xffe0 0x0 + delay 0x2 + playsewithpan SE_M_CUT, SOUND_PAN_TARGET + launchtemplate gSearingSunrazeSmashWhiteCutSpriteTemplate 0x82, 0x3, 0x20 0xffe0 0x1 + delay 0x2 + playsewithpan SE_M_CUT, SOUND_PAN_TARGET + launchtemplate gSearingSunrazeSmashWhiteCutSpriteTemplate 0x82, 0x3, 0x1c 0xffe0 0x0 + delay 0x2 + playsewithpan SE_M_CUT, SOUND_PAN_TARGET + launchtemplate gSearingSunrazeSmashWhiteCutSpriteTemplate 0x82, 0x3, 0x1c 0xffe0 0x1 + delay 0x2 + playsewithpan SE_M_CUT, SOUND_PAN_TARGET + launchtemplate gSearingSunrazeSmashWhiteCutSpriteTemplate 0x82, 0x3, 0x2c 0xffe0 0x0 + delay 0x2 + playsewithpan SE_M_CUT, SOUND_PAN_TARGET + launchtemplate gSearingSunrazeSmashWhiteCutSpriteTemplate 0x82, 0x3, 0x2c 0xffe0 0x1 + delay 0x2 + loadspritegfx ANIM_TAG_CROSS_IMPACT @x + delay 0x0 + unloadspritegfx ANIM_TAG_METEOR @superpower + unloadspritegfx ANIM_TAG_DRAGON_ASCENT @dragon ascent 1 + unloadspritegfx ANIM_TAG_DRAGON_ASCENT_FOE @dragon ascent 2 + launchtemplate gSearingSunrazeSmashCrossImpactSpriteTemplate 0x82, 0x4, 0x0 0x0 0x1 0x24 + playsewithpan SE_M_LEER, SOUND_PAN_TARGET + visible ANIM_ATTACKER + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG | ANIM_PAL_ATK, 0x3, 0xF, 0x0, 0x0 + visible ANIM_ATTACKER + playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x0 0x10 0x0000 + launchtemplate gSearingSunrazeSmashShockwaveSpriteTemplate 0x82 0x0 @ charge out and in + delay 0x1c + invisible ANIM_TARGET + unloadspritegfx ANIM_TAG_CUT @cut + unloadspritegfx ANIM_TAG_CROSS_IMPACT @x + call SearingSunrazeSmashInferno + call SearingSunrazeSmashInferno + call SearingSunrazeSmashInferno + call SearingSunrazeSmashInferno + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_ALL_BATTLERS | ANIM_PAL_BG, 0x4, 0x0, 0x10, 0x001b @full red + call SearingSunrazeSmashInferno + call SearingSunrazeSmashInferno + call SearingSunrazeSmashInferno + waitforvisualfinish + delay 0x10 + call ResetFromRedScreen + end +SearingSunrazeSmashFlare: + launchtemplate gGrantingStarsSpriteTemplate 0x2 0x6 0xfff1 0x0 0x0 0x0 0x20 0x3c + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2 + delay 0x4 + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1 + delay 0x4 + launchtemplate gGrantingStarsSpriteTemplate 0x2 0x6 0xc 0xfffb 0x0 0x0 0x20 0x3c + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2 + delay 0x4 + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3 + delay 0x4 + launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1 + return + +SearingSunrazeSmashRingsInward: + launchtemplate gSearingSunrazeSmashBlueRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + delay 0x8 + launchtemplate gSearingSunrazeSmashWhiteRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + delay 0x8 + launchtemplate gSearingSunrazeSmashBlueRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + delay 0x8 + return +SearingSunrazeSmashInferno: + playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_ATTACKER + launchtemplate gFireBlastCrossSpriteTemplate 0x82 0x5 0x0 0x0 0xa 0x0 0xfffe + launchtemplate gFireBlastCrossSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0xfffe 0x0 + launchtemplate gFireBlastCrossSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0x2 0x0 + launchtemplate gFireBlastCrossSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0xfffe 0x2 + launchtemplate gFireBlastCrossSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0x2 0x2 + delay 0x3 + launchtemplate gFireBlastCrossSpriteTemplate 0x82 0x5 0x0 0x0 0xa 0x0 0xfffe + launchtemplate gFireBlastCrossSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0xfffe 0x0 + launchtemplate gFireBlastCrossSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0x2 0x0 + launchtemplate gFireBlastCrossSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0xfffe 0x2 + launchtemplate gFireBlastCrossSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0x2 0x2 + delay 0x3 + launchtemplate gFireBlastCrossSpriteTemplate 0x82 0x5 0x0 0x0 0xa 0x0 0xfffe + launchtemplate gFireBlastCrossSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0xfffe 0x0 + launchtemplate gFireBlastCrossSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0x2 0x0 + launchtemplate gFireBlastCrossSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0xfffe 0x2 + launchtemplate gFireBlastCrossSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0x2 0x2 + delay 0x3 + return +SearingSunrazeSmashCharge: + launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x2c 0x510 0x1e 0xd 0x32 ANIM_ATTACKER + delay 0x1 + launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x2f 0x490 0x19 0xb 0xffd6 ANIM_ATTACKER + delay 0x1 + launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x30 0x4e0 0x14 0x10 0xffd2 ANIM_ATTACKER + delay 0x1 + launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x2c 0x500 0x19 0x10 0x2e ANIM_ATTACKER + delay 0x1 + launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x31 0x540 0x14 0x8 0x2a ANIM_ATTACKER + delay 0x1 + launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x31 0x4d0 0x1e 0xf 0xffce ANIM_ATTACKER + delay 0x1 + launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x2f 0x490 0x19 0xb 0xffd6 ANIM_ATTACKER + delay 0x1 + launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x2c 0x510 0x1e 0xd 0x32 ANIM_ATTACKER + delay 0x1 + launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x2c 0x500 0x19 0x10 0x2e ANIM_ATTACKER + delay 0x1 + launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x30 0x4e0 0x14 0x10 0xffd2 ANIM_ATTACKER + delay 0x1 + launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x31 0x4d0 0x1e 0xf 0xffce ANIM_ATTACKER + delay 0x1 + launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x31 0x540 0x14 0x8 0x2a ANIM_ATTACKER + delay 0x1 + return +ResetFromRedScreen: + launchtask AnimTask_AllBanksInvisible 0xA 0x0 + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ALL_BATTLERS 0x2 0x0 0x0 0x1B @Everything from red + restorebg + waitbgfadeout + setarg 0x7 0xffff + launchtask AnimTask_AllBanksVisible 0xA 0x0 + waitbgfadein + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x0 0x0 0x0 0x33ED + waitforvisualfinish + return + + +Move_MENACING_MOONRAZE_MAELSTROM:: + loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy + loadspritegfx ANIM_TAG_SPARKLE_2 @sparkles + loadspritegfx ANIM_TAG_WATER_ORB @blue + loadspritegfx ANIM_TAG_SHADOW_BALL @shadow ball + loadspritegfx ANIM_TAG_HANDS_AND_FEET @black + invisible ANIM_TARGET + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x0 0x0 0xe 0x40c0 + playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER + call MenacingMoonrazeMaelstromFlare + delay 0x8 + launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xc 0x0000 + launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1 + call MenacingMoonrazeMaelstromFlare + playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER + delay 0x8 + call MenacingMoonrazeMaelstromFlare + waitforvisualfinish + unloadspritegfx ANIM_TAG_SPARKLE_2 @sparkles + loadspritegfx ANIM_TAG_THIN_RING @ring + loadspritegfx ANIM_TAG_AIR_WAVE_2 @white/grey + playsewithpan SE_M_NIGHTMARE, SOUND_PAN_ATTACKER + launchtemplate gMoonrazeMaelstromWormholeSpriteTemplate 0x2 0x4 0x0 0x0 ANIM_TARGET 0x0 + delay 0x10 + launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0x35 0xffed 0x1 0x2 @ target down and left (instantaneously (last arg)) + delay 0x2 + loadspritegfx ANIM_TAG_METEOR @superpower + visible ANIM_TARGET + launchtask AnimTask_RotateMonSpriteToSide 0x2 0x4 0x50 0xfc00 ANIM_TARGET 0x0 @ spin up target + call MenacingMoonrazeMaelstromRingsInward + launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x30 @ target back to origin (slowly) + call MenacingMoonrazeMaelstromRingsInward + delay 0xD + invisible ANIM_TARGET + launchtemplate gMoonrazeMaelstromBlueRingSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + delay 0x8 + launchtemplate gMoonrazeMaelstromWhiteRingSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + delay 0x6 + launchtemplate gHorizontalLungeSpriteTemplate 0x2 0x2 0x4 0x4 @lunge forward + playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER + delay 0x2 + invisible ANIM_ATTACKER + launchtemplate gMoonrazeMaelstromSuperpowerSpriteTemplate 0x83 0x1 0x0 @superpower + launchtemplate gMoonrazeMaelstromBlueRingSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + delay 0x8 + playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_ATTACKER + fadetobg BG_COSMIC + waitbgfadeout + launchtask AnimTask_IsTargetPlayerSide 0x2 0x0 + jumpargeq 0x7 ANIM_TARGET MenacingMoonrazeMaelstromOnPlayer +MenacingMoonrazeMaelstromOnOpponent: + launchtask AnimTask_StartSlidingBg 0x5 0x4 0xfd00 0x200 0x1 0xffff + goto MenacingMoonrazeMaelstromFinish +MenacingMoonrazeMaelstromOnPlayer: + launchtask AnimTask_StartSlidingBg 0x5 0x4 0x200 0xfd00 0x1 0xffff +MenacingMoonrazeMaelstromFinish: + launchtask AnimTask_RotateMonSpriteToSide 0x2 0x4 0x1 0x0 ANIM_TARGET 0x1 @ fix tgt rotation + invisible ANIM_TARGET + waitbgfadein + visible ANIM_ATTACKER + delay 0x2 + visible ANIM_TARGET + waitforvisualfinish + loadspritegfx ANIM_TAG_POISON_BUBBLE @poison bubble + loadspritegfx ANIM_TAG_ORBS @hyper beam + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @shock wave + unloadspritegfx ANIM_TAG_THIN_RING @ring + unloadspritegfx ANIM_TAG_AIR_WAVE_2 @white/grey + unloadspritegfx ANIM_TAG_METEOR @superpower + playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER + call MenacingMoonrazeMaelstromChargeUp + launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xc 0x0000 + launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1 + call MenacingMoonrazeMaelstromChargeUp + call MenacingMoonrazeMaelstromChargeUp + launchsoundtask SoundTask_LoopSEAdjustPanning 0x7 0xf0 0xffc0 SOUND_PAN_TARGET 0x1 0xf 0x0 0x5 + call MenacingMoonrazeMaelstromBeam + call MenacingMoonrazeMaelstromBeam + call MenacingMoonrazeMaelstromBeam + call MenacingMoonrazeMaelstromBeam + call MenacingMoonrazeMaelstromBeam + launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x4 0x0 0x3c 0x1 + launchtask AnimTask_BlendBattleAnimPal 0x2 0x5 ANIM_PAL_DEF 0x4 0x0 0xc 0x0000 + call MenacingMoonrazeMaelstromBeam + call MenacingMoonrazeMaelstromBeam + call MenacingMoonrazeMaelstromBeam + call MenacingMoonrazeMaelstromBeam + call MenacingMoonrazeMaelstromBeam + call MenacingMoonrazeMaelstromBeam + call MenacingMoonrazeMaelstromBeam + call MenacingMoonrazeMaelstromBeam + call MenacingMoonrazeMaelstromBeam + call MenacingMoonrazeMaelstromBeam + call MenacingMoonrazeMaelstromBeam + call MenacingMoonrazeMaelstromBeam + call MenacingMoonrazeMaelstromBeam + call MenacingMoonrazeMaelstromBeam + call MenacingMoonrazeMaelstromBeam + call MenacingMoonrazeMaelstromBeam + call MenacingMoonrazeMaelstromBeam + call MenacingMoonrazeMaelstromBeam + call MenacingMoonrazeMaelstromBeam + call MenacingMoonrazeMaelstromBeam + call MenacingMoonrazeMaelstromBeam + call MenacingMoonrazeMaelstromBeam + call MenacingMoonrazeMaelstromBeam + playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER + launchtemplate gMoonrazeMaelstromShockwaveSpriteTemplate 0x82 0x0 + call MenacingMoonrazeMaelstromBeam + waitforvisualfinish + unloadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @shock wave + unloadspritegfx ANIM_TAG_ORBS @hyper beam + unloadspritegfx ANIM_TAG_HANDS_AND_FEET @black + loadspritegfx ANIM_TAG_EXPLOSION_2 @explosion + launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x4 0x0 0x4c 0x1 + call MenacingMoonrazeMaelstromExplosion + call MenacingMoonrazeMaelstromExplosion + launchtask AnimTask_BlendBattleAnimPal 0x2 0x5 ANIM_PAL_ALL 0x2 0x0 0x10 0x7fff + call MenacingMoonrazeMaelstromExplosion + waitforvisualfinish + call ResetFromWhiteScreen + end +MenacingMoonrazeMaelstromExplosion: + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gMoonrazeMaelstromExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gMoonrazeMaelstromExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gMoonrazeMaelstromExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gMoonrazeMaelstromExplosionSpriteTemplate 0x83 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gMoonrazeMaelstromExplosionSpriteTemplate 0x83 0x4 0x10 0x10 ANIM_TARGET 0x1 + delay 0x6 + return +MenacingMoonrazeMaelstromFlare: + launchtemplate gMoonrazeMaelstromBlackSparklesSpriteTemplate 0x2 0x6 0xfff1 0x0 0x0 0x0 0x20 0x3c + launchtemplate gMoonrazeMaelstromBlueBuffSpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2 + delay 0x4 + launchtemplate gMoonrazeMaelstromBlueBuffSpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1 + delay 0x4 + launchtemplate gMoonrazeMaelstromBlackSparklesSpriteTemplate 0x2 0x6 0xc 0xfffb 0x0 0x0 0x20 0x3c + launchtemplate gMoonrazeMaelstromBlackBuffSpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2 + delay 0x4 + launchtemplate gMoonrazeMaelstromBlackBuffSpriteTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3 + delay 0x4 + launchtemplate gMoonrazeMaelstromBlackBuffSpriteTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1 + return +MenacingMoonrazeMaelstromRingsInward: + launchtemplate gMoonrazeMaelstromBlueRingSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + delay 0x8 + launchtemplate gMoonrazeMaelstromWhiteRingSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + delay 0x8 + launchtemplate gMoonrazeMaelstromBlueRingSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0 + delay 0x8 + return +MenacingMoonrazeMaelstromChargeUp: + launchtemplate gMoonrazeMaelstromPurpleBuffSpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2 + launchtemplate gMoonrazeMaelstromBlackOrbsSpriteTemplate 0x2 0x7 0x0 0x1c 0x210 0x1e 0xd 0x32 ANIM_ATTACKER + delay 0x2 + launchtemplate gMoonrazeMaelstromBlackOrbsSpriteTemplate 0x2 0x7 0x0 0x20 0x1e0 0x14 0x10 0xffd2 ANIM_ATTACKER + delay 0x2 + launchtemplate gMoonrazeMaelstromPurpleBuffSpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1 + launchtemplate gMoonrazeMaelstromBlackOrbsSpriteTemplate 0x2 0x7 0x0 0x21 0x240 0x14 0x8 0x2a ANIM_ATTACKER + delay 0x2 + launchtemplate gMoonrazeMaelstromBlackOrbsSpriteTemplate 0x2 0x7 0x0 0x1f 0x190 0x19 0xb 0xffd6 ANIM_ATTACKER + delay 0x2 + launchtemplate gMoonrazeMaelstromBlackOrbsSpriteTemplate 0x2 0x7 0x0 0x1c 0x200 0x19 0x10 0x2e ANIM_ATTACKER + delay 0x2 + launchtemplate gMoonrazeMaelstromBlackOrbsSpriteTemplate 0x2 0x7 0x0 0x21 0x1d0 0x1e 0xf 0xffce ANIM_ATTACKER + delay 0x2 + launchtemplate gMoonrazeMaelstromPurpleBuffSpriteTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3 + launchtemplate gMoonrazeMaelstromBlackOrbsSpriteTemplate 0x2 0x7 0x0 0x21 0x240 0x14 0x8 0x2a ANIM_ATTACKER + delay 0x2 + launchtemplate gMoonrazeMaelstromBlackOrbsSpriteTemplate 0x2 0x7 0x0 0x1f 0x190 0x19 0xb 0xffd6 ANIM_ATTACKER + delay 0x2 + launchtemplate gMoonrazeMaelstromPurpleBuffSpriteTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1 + return +MenacingMoonrazeMaelstromBeam: + launchtemplate gMoonrazeMaelstromBeamSpriteTemplate 0x82 0x0 + launchtemplate gMoonrazeMaelstromBeamSpriteTemplate 0x82 0x0 + delay 0x1 + return + + +Move_LIGHT_THAT_BURNS_THE_SKY:: + loadspritegfx ANIM_TAG_SPARK_2 @spark + loadspritegfx ANIM_TAG_LEAF @green + loadspritegfx ANIM_TAG_ELECTRIC_ORBS @charge particles + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @psycho boost + fadetobg BG_ZMOVE_MOUNTAIN + waitbgfadeout + loadspritegfx ANIM_TAG_FOCUS_ENERGY + playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER + call EndureEffect + delay 0x8 + launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xb 0x5bff + launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1 + call EndureEffect + delay 0x8 + call EndureEffect + delay 0x8 + unloadspritegfx ANIM_TAG_FOCUS_ENERGY + monbg ANIM_ATTACKER + setblends 0x80c + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ALL-ANIM_PAL_ATK 0x2 0x0 0xF 0x0000 + waitforvisualfinish + launchtask AnimTask_ElectricChargingParticles 0x2 0x4 0x0 0x3c 0x2 0xc @ charge particles to attacker + delay 0x1e + loopsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER, 0xe, 0xa + launchtemplate gSuperpowerOrbSpriteTemplate, 0x83, 0x1, 0x0 + call LightThatBurnsTheSkyGreenSparks + call LightThatBurnsTheSkyGreenSparks + call LightThatBurnsTheSkyGreenSparks + call LightThatBurnsTheSkyGreenSparks + call LightThatBurnsTheSkyGreenSparks + call LightThatBurnsTheSkyGreenSparks + call LightThatBurnsTheSkyGreenSparks + call LightThatBurnsTheSkyGreenSparks + call LightThatBurnsTheSkyGreenSparks + delay 0xe + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x0 0x4 0x0000 + clearmonbg ANIM_ATTACKER + blendoff + playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffe0 0xfff0 0x25 0x2c 0x20 0x8 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffe0 0xfff0 0x25 0x2c 0x60 0x8 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffe0 0xfff0 0x25 0x2c 0xa0 0x8 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffe0 0xfff0 0x25 0x2c 0xe0 0x8 0x2 0x3 + delay 0x1 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffd0 0xffe4 0x25 0x2c 0x20 0x8 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffd0 0xffe4 0x25 0x2c 0x60 0x8 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffd0 0xffe4 0x25 0x2c 0xa0 0x8 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffd0 0xffe4 0x25 0x2c 0xe0 0x8 0x2 0x3 + delay 0x1 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffc0 0xffd8 0x25 0x2c 0x20 0x8 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffc0 0xffd8 0x25 0x2c 0x60 0x8 0x1 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffc0 0xffd8 0x25 0x2c 0xa0 0x8 0x0 0x3 + launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffc0 0xffd8 0x25 0x2c 0xe0 0x8 0x2 0x3 + delay 0x6 + launchtask AnimTask_HorizontalShake 0x5 0x3 ANIM_TARGET 0x3 0x3c + unloadspritegfx ANIM_TAG_LEAF @green + unloadspritegfx ANIM_TAG_ELECTRIC_ORBS @charge + loadspritegfx ANIM_TAG_FIRE_PLUME @blast burn + loadspritegfx ANIM_TAG_EXPLOSION_2 @explode + loadspritegfx ANIM_TAG_STRAIGHT_BEAM + panse SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0 + monbg ANIM_TARGET + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x6 0x0 0x10 0x43FF @;Light yellow + call PhotonGeyserBeam + call LightThatBurnsTheSkyGeyser + call LightThatBurnsTheSkyBlast_1 + call LightThatBurnsTheSkyGeyser + call LightThatBurnsTheSkyBlast_2 + call LightThatBurnsTheSkyGeyser + launchtask AnimTask_BlendBattleAnimPal, 0x2, 0x5, ANIM_PAL_ALL - ANIM_PAL_DEF, 0x4, 0x0, 0x10, 0x43FF + call LightThatBurnsTheSkyBlast_3 + clearmonbg ANIM_TARGET + waitforvisualfinish + delay 0x10 + launchtask AnimTask_BlendBattleAnimPal 0x2 0x5 ANIM_PAL_ALL 0x0 0x10 0x0 0x43FF + restorebg + waitbgfadeout + end +LightThatBurnsTheSkyBlast_1: + launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x2 0x6 0xffe0 0x0 0x18 0x0 0x0 0x0 + launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x2 0x6 0xffec 0xfff6 0x18 0x0 0x0 0x0 + launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x42 0x6 0x0 0xfff0 0x18 0x0 0x0 0x0 + launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x42 0x6 0x14 0xfff6 0x18 0x0 0x0 0x0 + launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x42 0x6 0x20 0x0 0x18 0x0 0x0 0x0 + launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x42 0x6 0x14 0xa 0x18 0x0 0x0 0x0 + launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x2 0x6 0x0 0x10 0x18 0x0 0x0 0x0 + launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x2 0x6 0xffec 0xa 0x18 0x0 0x0 0x0 + return +LightThatBurnsTheSkyBlast_2: + launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x2 0x6 0xffc0 0x0 0x18 0x0 0x0 0x0 + launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x6 0x6 0xffd8 0xffec 0x18 0x0 0x0 0x0 + launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x46 0x6 0x0 0xffe0 0x18 0x0 0x0 0x0 + launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x46 0x6 0x28 0xffec 0x18 0x0 0x0 0x0 + launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x42 0x6 0x40 0x0 0x18 0x0 0x0 0x0 + launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x42 0x6 0x28 0x14 0x18 0x0 0x0 0x0 + launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x2 0x6 0x0 0x20 0x18 0x0 0x0 0x0 + launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x2 0x6 0xffd8 0x14 0x18 0x0 0x0 0x0 + return +LightThatBurnsTheSkyBlast_3: + launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x2 0x6 0xffa0 0x0 0x18 0x0 0x0 0x0 + launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x6 0x6 0xffc4 0xffe2 0x18 0x0 0x0 0x0 + launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x46 0x6 0x0 0xffd0 0x18 0x0 0x0 0x0 + launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x46 0x6 0x3c 0xffe2 0x18 0x0 0x0 0x0 + launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x42 0x6 0x60 0x0 0x18 0x0 0x0 0x0 + launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x42 0x6 0x3c 0x1e 0x18 0x0 0x0 0x0 + launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x2 0x6 0x0 0x30 0x18 0x0 0x0 0x0 + launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x2 0x6 0xffc4 0x1e 0x18 0x0 0x0 0x0 + return +LightThatBurnsTheSkyGeyser: + launchtemplate gLightThatBurnsTheSkyExplosionSpriteTemplate 0x84, 0x4, 0x0003 0x0005 0x1 0x0 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + delay 0x0 + launchtemplate gLightThatBurnsTheSkyExplosionSpriteTemplate 0x84, 0x4, 0xfff5 0xfff1 0x1 0x0 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + delay 0x0 + launchtemplate gLightThatBurnsTheSkyExplosionSpriteTemplate 0x84, 0x4, 0x0008 0xfffb 0x1 0x0 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + delay 0x0 + launchtemplate gLightThatBurnsTheSkyExplosionSpriteTemplate 0x84, 0x4, 0xfffa 0x0012 0x1 0x0 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + delay 0x0 + launchtemplate gLightThatBurnsTheSkyExplosionSpriteTemplate 0x84, 0x4, 0x0000 0x0005 0x1 0x0 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + launchtemplate gLightThatBurnsTheSkyExplosionSpriteTemplate 0x84, 0x4, 0x0003 0xfff5 ANIM_TARGET 0x0 + delay 0x0 + launchtemplate gLightThatBurnsTheSkyExplosionSpriteTemplate 0x84, 0x4, 0xfff5 0xffe1 ANIM_TARGET 0x0 + delay 0x0 + launchtemplate gLightThatBurnsTheSkyExplosionSpriteTemplate 0x84, 0x4, 0x0008 0xffeb ANIM_TARGET 0x0 + delay 0x0 + launchtemplate gLightThatBurnsTheSkyExplosionSpriteTemplate 0x84, 0x4, 0xfffa 0x0002 ANIM_TARGET 0x0 + delay 0x0 + launchtemplate gLightThatBurnsTheSkyExplosionSpriteTemplate 0x84, 0x4, 0x0000 0xfff5 ANIM_TARGET 0x0 + delay 0x0 + launchtemplate gLightThatBurnsTheSkyExplosionSpriteTemplate 0x84, 0x4, 0x0003 0xffe5 ANIM_TARGET 0x0 + delay 0x0 + launchtemplate gLightThatBurnsTheSkyExplosionSpriteTemplate 0x84, 0x4, 0xfff5 0xffd1 ANIM_TARGET 0x0 + delay 0x0 + launchtemplate gLightThatBurnsTheSkyExplosionSpriteTemplate 0x84, 0x4, 0x0008 0xffdb ANIM_TARGET 0x0 + delay 0x0 + launchtemplate gLightThatBurnsTheSkyExplosionSpriteTemplate 0x84, 0x4, 0xfffa 0xfff2 ANIM_TARGET 0x0 + delay 0x0 + launchtemplate gLightThatBurnsTheSkyExplosionSpriteTemplate 0x84, 0x4, 0x0000 0xffe5 ANIM_TARGET 0x0 + delay 0x0 + return +LightThatBurnsTheSkyGreenSparks: + launchtemplate gLightThatBurnsTheSkyGreenSparkSpriteTemplate 0x83 0x8 0x0 0x0 0x30 0x2c 0x0 0x28 0x0 0x3 + launchtemplate gLightThatBurnsTheSkyGreenSparkSpriteTemplate 0x83 0x8 0x0 0x0 0x30 0x2c 0x40 0x28 0x1 0x3 + launchtemplate gLightThatBurnsTheSkyGreenSparkSpriteTemplate 0x83 0x8 0x0 0x0 0x30 0x2c 0x80 0x28 0x0 0x3 + launchtemplate gLightThatBurnsTheSkyGreenSparkSpriteTemplate 0x83 0x8 0x0 0x0 0x30 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + launchtemplate gLightThatBurnsTheSkyGreenSparkSpriteTemplate 0x83 0x8 0x0 0x0 0x15 0x2c 0x0 0x28 0x0 0x3 + launchtemplate gLightThatBurnsTheSkyGreenSparkSpriteTemplate 0x83 0x8 0x0 0x0 0x15 0x2c 0x40 0x28 0x1 0x3 + launchtemplate gLightThatBurnsTheSkyGreenSparkSpriteTemplate 0x83 0x8 0x0 0x0 0x15 0x2c 0x80 0x28 0x0 0x3 + launchtemplate gLightThatBurnsTheSkyGreenSparkSpriteTemplate 0x83 0x8 0x0 0x0 0x15 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 + delay 0x10 + return + + +Move_SOUL_STEALING_7_STAR_STRIKE:: + loadspritegfx ANIM_TAG_ROUND_SHADOW @bounce + loadspritegfx ANIM_TAG_ICE_CRYSTALS @ice blue + loadspritegfx ANIM_TAG_WISP_FIRE @will o wisp + loadspritegfx ANIM_TAG_FIRE_PLUME @blast burn + loadspritegfx ANIM_TAG_HANDS_AND_FEET @fist + launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0 + waitforvisualfinish + setblends 0x80c + playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_TARGET + launchtemplate gSoulStealBlastburnSpriteTemplate 0x2 0x6 0xffe0 0x0 0x18 0x0 0x0 0x0 + launchtemplate gSoulStealBlastburnSpriteTemplate 0x42 0x6 0xffec 0xfff6 0x18 0x0 0x0 0x0 + launchtemplate gSoulStealBlastburnSpriteTemplate 0x42 0x6 0x0 0xfff0 0x18 0x0 0x0 0x0 + launchtemplate gSoulStealBlastburnSpriteTemplate 0x42 0x6 0x14 0xfff6 0x18 0x0 0x0 0x0 + launchtemplate gSoulStealBlastburnSpriteTemplate 0x42 0x6 0x20 0x0 0x18 0x0 0x0 0x0 + launchtemplate gSoulStealBlastburnSpriteTemplate 0x42 0x6 0x14 0xa 0x18 0x0 0x0 0x0 + launchtemplate gSoulStealBlastburnSpriteTemplate 0x2 0x6 0x0 0x10 0x18 0x0 0x0 0x0 + launchtemplate gSoulStealBlastburnSpriteTemplate 0x2 0x6 0xffec 0xa 0x18 0x0 0x0 0x0 + delay 0x5 + playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER + launchtemplate gSoulStealBlackFlySpriteTemplate 0x2 0x4 0x0 0x0 0xd 0x150 + waitforvisualfinish + invisible ANIM_TARGET + fadetobg BG_SOULSTEALING_7STAR_STRIKE + waitbgfadeout + visible ANIM_ATTACKER + loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy + playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER + call SoulStealingSevenStarStrikeBuffEffect + delay 0x8 + launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xb 0x0 + launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1 + call SoulStealingSevenStarStrikeBuffEffect + delay 0x8 + call SoulStealingSevenStarStrikeBuffEffect + delay 0x4 + visible ANIM_TARGET + waitforvisualfinish + unloadspritegfx ANIM_TAG_FIRE_PLUME + loadspritegfx ANIM_TAG_PAIN_SPLIT @pain split + launchtask AnimTask_ShakeMon 0x5 0x5 0x1 0x0 0x4 0x25 0x1 + launchtemplate gSoulStealBlueFistSpriteTemplate 0x82 0x8 0xffc0 0x14 0x0 0x0 0xa 0x1 0x0 0x1 + delay 0x4 + launchtemplate gSoulStealBlueStarSpriteTemplate 0x84 0x6 0x0 ANIM_TARGET 0x2 0x0 0x0 0x30 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET + delay 0x4 + launchtemplate gSoulStealBlueFistSpriteTemplate 0x82 0x8 0xffc0 0x10 0x0 0x0 0xa 0x1 0x0 0x1 + delay 0x4 + launchtemplate gSoulStealBlueStarSpriteTemplate 0x84 0x6 0x0 ANIM_TARGET 0x12 0x0 0x0 0x2c + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET + delay 0x4 + launchtemplate gSoulStealBlueFistSpriteTemplate 0x82 0x8 0xffc0 0x08 0x0 0x0 0xa 0x1 0x0 0x1 + delay 0x4 + launchtemplate gSoulStealBlueStarSpriteTemplate 0x84 0x6 0xffeb 0xfff8 0x2 0x0 0x0 0x28 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET + launchtemplate gSoulStealBlueFistSpriteTemplate 0x82 0x8 0xffc0 0x12 0x0 0x0 0xa 0x1 0x0 0x1 + delay 0x4 + launchtemplate gSoulStealBlueStarSpriteTemplate 0x84 0x6 0xfffb 0xfff4 0x2 0x0 0x0 0x24 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET + launchtemplate gSoulStealBlueFistSpriteTemplate 0x82 0x8 0xffc0 0x15 0x0 0x0 0xa 0x1 0x0 0x1 + delay 0x4 + launchtemplate gSoulStealBlueStarSpriteTemplate 0x84 0x6 0x5 0xfff8 0x2 0x0 0x0 0x20 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET + launchtemplate gSoulStealBlueFistSpriteTemplate 0x82 0x8 0xffc0 0x0c 0x0 0x0 0xa 0x1 0x0 0x1 + delay 0x4 + launchtemplate gSoulStealBlueStarSpriteTemplate 0x84 0x6 0xfff0 0x1 0x2 0x0 0x0 0x1c + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET + launchtemplate gSoulStealBlueFistSpriteTemplate 0x82 0x8 0xffc0 0x13 0x0 0x0 0xa 0x1 0x0 0x1 + delay 0x4 + launchtemplate gSoulStealBlueStarSpriteTemplate 0x84 0x6 0x0 0x1 0x2 0x0 0x0 0x18 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET + launchtemplate gSoulStealBlueFistSpriteTemplate 0x82 0x8 0xffc0 0x0e 0x0 0x0 0xa 0x1 0x0 0x1 + delay 0x4 + launchtemplate gSoulStealBlueStarSpriteTemplate 0x84 0x6 0xfff0 0x10 0x2 0x0 0x0 0x14 + launchtemplate gSoulStealBlueFistSpriteTemplate 0x82 0x8 0xffc0 0x12 0x0 0x0 0xa 0x1 0x0 0x1 + delay 0x4 + launchtemplate gSoulStealBlueStarSpriteTemplate 0x84 0x6 0x0 0x10 0x2 0x0 0x0 0x10 + delay 0x4 + playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER + launchtemplate gSoulStealBlackFlySpriteTemplate 0x82, 0x4, 0x0 0x0 0xd 0x150 + delay 0x20 + unloadspritegfx ANIM_TAG_PAIN_SPLIT + unloadspritegfx ANIM_TAG_ROUND_SHADOW + unloadspritegfx ANIM_TAG_HANDS_AND_FEET + loadspritegfx ANIM_TAG_SPARK_2 @paralyze + loadspritegfx ANIM_TAG_SNORE_Z @z + playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER + setarg 0x7 0x0 @;Clear arg 7 so task works properly in Link battles + launchtask AnimTask_SnatchOpposingMonMove 0x2 0x0 + delay 0x1c + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x0 0x0 0x10 0x0000 + delay 0x1 + launchtemplate gSoulStealZStarSpriteTemplate 0x82, 0x4, 0x0 0x0 0x1 0x24 + launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x6 0x1 + launchtemplate gWillOWispFireSpriteTemplate 0x82 0x1 0x0 + launchtemplate gWillOWispFireSpriteTemplate 0x82 0x1 0x2a + launchtemplate gWillOWispFireSpriteTemplate 0x82 0x1 0x54 + launchtemplate gWillOWispFireSpriteTemplate 0x82 0x1 0x7e + launchtemplate gWillOWispFireSpriteTemplate 0x82 0x1 0xa8 + launchtemplate gWillOWispFireSpriteTemplate 0x82 0x1 0xd2 + playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_TARGET + call SoulStealingSevenStarStrikeBlueParalysis + call SoulStealingSevenStarStrikeBlueParalysis + waitforvisualfinish + visible ANIM_ATTACKER + unloadspritegfx ANIM_TAG_ROUND_SHADOW + loadspritegfx ANIM_TAG_SPARKLE_4 @ detect + loadspritegfx ANIM_TAG_EXPLOSION @ explosion + playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER + launchtemplate gTargetTwinkleSpriteTemplate 0x8d 0x3 0x0 0x0 ANIM_TARGET @detect star + delay 0xa + launchtask AnimTask_HorizontalShake 0x5 0x3 ANIM_TARGET 0x8 0x20 + call SoulStealingSevenStarStrikeExplosion + call SoulStealingSevenStarStrikeExplosion + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_ALL - ANIM_PAL_DEF, 0x2, 0x0, 0x10, 0x0 @everything to black + call SoulStealingSevenStarStrikeExplosion + waitforvisualfinish + blendoff + restorebg + launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG | ANIM_PAL_ALL_BATTLERS, 0x2, 0x10, 0x0, 0x0 @everything from black + waitforvisualfinish + launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ALL_BATTLERS 0x2 0x0 0x0 0x0 + waitforvisualfinish + launchtask AnimTask_AllBanksVisible 0xA 0x0 + waitforvisualfinish + end +SoulStealingSevenStarStrikeBuffEffect: + launchtemplate gSoulStealIceBuffSpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2 + delay 0x4 + launchtemplate gSoulStealIceBuffSpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1 + delay 0x4 + launchtemplate gSoulStealIceBuffSpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2 + delay 0x4 + launchtemplate gSoulStealIceBuffSpriteTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3 + delay 0x4 + launchtemplate gSoulStealIceBuffSpriteTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1 + return +SoulStealingSevenStarStrikeBlueParalysis: + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_TARGET + launchtemplate gSoulStealBlueParalyzeSpriteTemplate 0x82, 0x4, 0x5 0x0 0x5 0x0 + delay 0x2 + launchtemplate gSoulStealBlueParalyzeSpriteTemplate 0x82, 0x4, 0xfffb 0xa 0x5 0x1 + delay 0x2 + launchtemplate gSoulStealBlueParalyzeSpriteTemplate 0x82, 0x4, 0xf 0x14 0x5 0x2 + delay 0x2 + launchtemplate gSoulStealBlueParalyzeSpriteTemplate 0x82, 0x4, 0xfff1 0xfff6 0x5 0x0 + delay 0x2 + launchtemplate gSoulStealBlueParalyzeSpriteTemplate 0x82, 0x4, 0x19 0x0 0x5 0x1 + delay 0x2 + launchtemplate gSoulStealBlueParalyzeSpriteTemplate 0x82, 0x4, 0xfff8 0x8 0x5 0x2 + delay 0x2 + launchtemplate gSoulStealBlueParalyzeSpriteTemplate 0x82, 0x4, 0x2 0xfff8 0x5 0x0 + delay 0x2 + launchtemplate gSoulStealBlueParalyzeSpriteTemplate 0x82, 0x4, 0xffec 0xf 0x5 0x1 + return +SoulStealingSevenStarStrikeExplosion: + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gSoulStealExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gSoulStealExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gSoulStealExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gSoulStealExplosionSpriteTemplate 0x83 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1 + delay 0x6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + launchtemplate gSoulStealExplosionSpriteTemplate 0x83 0x4 0x10 0x10 ANIM_TARGET 0x1 + delay 0x6 + return diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 9aae5a872..4afb9c87e 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -411,6 +411,8 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectHit @ EFFECT_BEAK_BLAST .4byte BattleScript_EffectCourtChange @ EFFECT_COURT_CHANGE .4byte BattleScript_EffectSteelBeam @ EFFECT_STEEL_BEAM + .4byte BattleScript_EffectExtremeEvoboost @ EFFECT_EXTREME_EVOBOOST + .4byte BattleScript_EffectTerrainHit @ EFFECT_DAMAGE_SET_TERRAIN BattleScript_EffectSteelBeam:: attackcanceler @@ -720,7 +722,7 @@ BattleScript_EffectPhotonGeyser: critcalc damagecalc adjustdamage - photongeysercheck + photongeysercheck BS_ATTACKER attackanimation waitanimation effectivenesssound @@ -9514,6 +9516,124 @@ BattleScript_JabocaRowapBerryActivate_Dmg: removeitem BS_TARGET return +@ z moves / effects +BattleScript_ZMoveActivateDamaging:: + printstring STRINGID_ZPOWERSURROUNDS + playanimation BS_ATTACKER, B_ANIM_ZMOVE_ACTIVATE, NULL + printstring STRINGID_ZMOVEUNLEASHED + waitmessage 0x40 + return + +BattleScript_ZMoveActivateStatus:: + savetarget + printstring STRINGID_ZPOWERSURROUNDS + playanimation BS_ATTACKER, B_ANIM_ZMOVE_ACTIVATE, NULL + setzeffect + restoretarget + copybyte sSTATCHANGER, sSAVED_STAT_CHANGER + return + +BattleScript_ZEffectPrintString:: + printfromtable gZEffectStringIds + waitmessage 0x40 + return + +BattleScript_RecoverHPZMove:: + healthbarupdate BS_SCRIPTING + datahpupdate BS_SCRIPTING + printfromtable gZEffectStringIds + waitmessage 0x40 + return + +BattleScript_StatUpZMove:: + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_BUFF_ALLOW_PTR, BattleScript_StatUpZMoveEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_StatUpZMoveEnd + setgraphicalstatchangevalues + playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + printstring STRINGID_ZMOVESTATUP + waitmessage 0x40 + printfromtable gStatUpStringIds + waitmessage 0x40 +BattleScript_StatUpZMoveEnd: + return + +BattleScript_HealReplacementZMove:: + playanimation BS_SCRIPTING B_ANIM_WISH_HEAL 0x0 + printfromtable gZEffectStringIds + waitmessage 0x40 + healthbarupdate BS_SCRIPTING + datahpupdate BS_SCRIPTING + return + +BattleScript_EffectExtremeEvoboost:: + attackcanceler + attackstring + ppreduce + jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_ATK, MAX_STAT_STAGE, BattleScript_ExtremeEvoboostAnim + jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_DEF, MAX_STAT_STAGE, BattleScript_ExtremeEvoboostAnim + jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_SPEED, MAX_STAT_STAGE, BattleScript_ExtremeEvoboostAnim + jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_SPATK, MAX_STAT_STAGE, BattleScript_ExtremeEvoboostAnim + jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_SPDEF, MAX_STAT_STAGE, BattleScript_ExtremeEvoboostAnim + goto BattleScript_ButItFailed +BattleScript_ExtremeEvoboostAnim: + attackanimation + waitanimation +BattleScript_ExtremeEvoboostAtk:: + setbyte sSTAT_ANIM_PLAYED, FALSE + playstatchangeanimation BS_ATTACKER, BIT_ATK | BIT_DEF | BIT_SPEED | BIT_SPATK | BIT_SPDEF, 0x0 + setstatchanger STAT_ATK, 2, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_BUFF_ALLOW_PTR, BattleScript_ExtremeEvoboostDef + printfromtable gStatUpStringIds + waitmessage 0x40 +BattleScript_ExtremeEvoboostDef:: + setstatchanger STAT_DEF, 2, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_BUFF_ALLOW_PTR, BattleScript_ExtremeEvoboostSpeed + printfromtable gStatUpStringIds + waitmessage 0x40 +BattleScript_ExtremeEvoboostSpeed:: + setstatchanger STAT_SPEED, 2, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_BUFF_ALLOW_PTR, BattleScript_ExtremeEvoboostSpAtk + printfromtable gStatUpStringIds + waitmessage 0x40 +BattleScript_ExtremeEvoboostSpAtk:: + setstatchanger STAT_SPATK, 2, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_BUFF_ALLOW_PTR, BattleScript_ExtremeEvoboostSpDef + printfromtable gStatUpStringIds + waitmessage 0x40 +BattleScript_ExtremeEvoboostSpDef:: + setstatchanger STAT_SPDEF, 2, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_BUFF_ALLOW_PTR, BattleScript_ExtremeEvoboostEnd + printfromtable gStatUpStringIds + waitmessage 0x40 +BattleScript_ExtremeEvoboostEnd:: + goto BattleScript_MoveEnd + +BattleScript_EffectTerrainHit: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + critcalc + damagecalc + adjustdamage + attackanimation + waitanimation + effectivenesssound + hitanimation BS_TARGET + waitstate + healthbarupdate BS_TARGET + datahpupdate BS_TARGET + critmessage + waitmessage 0x40 + resultmessage + waitmessage 0x40 + setterrain BattleScript_TryFaint + playanimation BS_ATTACKER, B_ANIM_RESTORE_BG + printfromtable gTerrainStringIds +BattleScript_TryFaint: + tryfaintmon BS_TARGET + goto BattleScript_MoveEnd + BattleScript_Pickpocket:: call BattleScript_AbilityPopUp jumpifability BS_ATTACKER, ABILITY_STICKY_HOLD, BattleScript_PickpocketPrevented diff --git a/graphics/battle_interface/z_move_trigger.png b/graphics/battle_interface/z_move_trigger.png new file mode 100644 index 000000000..5e27dbabb Binary files /dev/null and b/graphics/battle_interface/z_move_trigger.png differ diff --git a/include/battle.h b/include/battle.h index ba3115a98..b56b381e7 100644 --- a/include/battle.h +++ b/include/battle.h @@ -467,6 +467,25 @@ struct Illusion struct Pokemon *mon; }; +struct ZMoveData +{ + u8 viable:1; // current move can become a z move + u8 viewing:1; // if player is viewing the z move name instead of regular moves + u8 active:1; // is z move being used this turn + u8 zStatusActive:1; + u8 healReplacement:1; + u8 activeSplit:2; // active z move split + u8 zUnused:1; + u8 triggerSpriteId; + u8 possibleZMoves[MAX_BATTLERS_COUNT]; + u16 chosenZMove; // z move of move cursor is on + u8 effect; + u8 used[MAX_BATTLERS_COUNT]; //one per bank for multi-battles + u16 toBeUsed[MAX_BATTLERS_COUNT]; // z moves per battler to be used + u16 baseMoves[MAX_BATTLERS_COUNT]; + u8 splits[MAX_BATTLERS_COUNT]; +}; + struct StolenItem { u16 originalItem:15; @@ -571,6 +590,7 @@ struct BattleStruct u8 abilityPopUpSpriteIds[MAX_BATTLERS_COUNT][2]; // two per battler bool8 throwingPokeBall; struct MegaEvolutionData mega; + struct ZMoveData zmove; const u8 *trainerSlideMsg; bool8 trainerSlideLowHpMsgDone; u8 introState; @@ -595,6 +615,7 @@ struct BattleStruct u8 quickClawBattlerId; struct StolenItem itemStolen[PARTY_SIZE]; // Player's team that had items stolen (two bytes per party member) u8 blunderPolicy:1; // should blunder policy activate + u8 swapDamageCategory:1; // Photon Geyser, Shell Side Arm, Light That Burns the Sky u8 ballSpriteIds[2]; // item gfx, window gfx u8 stickyWebUser; u8 appearedInBattle; // Bitfield to track which Pokemon appeared in battle. Used for Burmy's form change @@ -811,7 +832,7 @@ extern u16 gBattle_WIN1V; extern u8 gDisplayedStringBattle[400]; extern u8 gBattleTextBuff1[TEXT_BUFF_ARRAY_COUNT]; extern u8 gBattleTextBuff2[TEXT_BUFF_ARRAY_COUNT]; -extern u8 gBattleTextBuff3[TEXT_BUFF_ARRAY_COUNT]; +extern u8 gBattleTextBuff3[30]; //to handle stupidly large z move names extern u32 gBattleTypeFlags; extern u8 gBattleTerrain; extern u32 gUnusedFirstBattleVar1; @@ -918,7 +939,6 @@ extern u8 gBattleControllerData[MAX_BATTLERS_COUNT]; extern bool8 gHasFetchedBall; extern u8 gLastUsedBall; extern u16 gLastThrownBall; -extern bool8 gSwapDamageCategory; // Photon Geyser, Shell Side Arm, Light That Burns the Sky extern u8 gPartyCriticalHits[PARTY_SIZE]; #endif // GUARD_BATTLE_H diff --git a/include/battle_ai_util.h b/include/battle_ai_util.h index d80fbbf51..5e66577e3 100644 --- a/include/battle_ai_util.h +++ b/include/battle_ai_util.h @@ -62,6 +62,7 @@ s8 GetAbilityRating(u16 ability); bool32 AI_IsAbilityOnSide(u32 battlerId, u32 ability); bool32 AI_MoveMakesContact(u32 ability, u32 holdEffect, u16 move); u32 AI_GetBattlerMoveTargetType(u8 battlerId, u16 move); +bool32 ShouldUseZMove(u8 activeId, u8 targetId, u16 chosenMove); // stat stage checks bool32 AnyStatIsRaised(u8 battlerId); @@ -82,7 +83,7 @@ bool32 ShouldLowerEvasion(u8 battlerAtk, u8 battlerDef, u16 defAbility); // move checks bool32 IsAffectedByPowder(u8 battler, u16 ability, u16 holdEffect); bool32 MovesWithSplitUnusable(u32 attacker, u32 target, u32 split); -s32 AI_CalcDamage(u16 move, u8 battlerAtk, u8 battlerDef, u8 *effectiveness); +s32 AI_CalcDamage(u16 move, u8 battlerAtk, u8 battlerDef, u8 *effectiveness, bool32 considerZPower); u8 GetMoveDamageResult(u16 move); u32 GetCurrDamageHpPercent(u8 battlerAtk, u8 battlerDef); u16 AI_GetTypeEffectiveness(u16 move, u8 battlerAtk, u8 battlerDef); diff --git a/include/battle_anim.h b/include/battle_anim.h index aa2b86527..95944c8b5 100644 --- a/include/battle_anim.h +++ b/include/battle_anim.h @@ -205,12 +205,14 @@ u8 GetSubstituteSpriteDefault_Y(u8 battlerId); #define STAT_ANIM_MULTIPLE_MINUS1 57 #define STAT_ANIM_MULTIPLE_MINUS2 58 void LaunchStatusAnimation(u8 battlerId, u8 statusAnimId); +extern const union AnimCmd *const sAnims_SpinningSparkle[]; // battle_anim_ground.c void AnimTask_HorizontalShake(u8 taskId); void AnimMudSportDirt(struct Sprite *sprite); void AnimDirtScatter(struct Sprite *sprite); void AnimMudSportDirtRising(struct Sprite *sprite); +void AnimDirtPlumeParticle(struct Sprite *); extern const union AffineAnimCmd *const gAffineAnims_SpinningBone[]; // battle_anim_throw.c @@ -272,6 +274,7 @@ extern const union AnimCmd *const gScratchAnimTable[]; extern const union AnimCmd *const gIngrainRootAnimTable[]; extern const union AffineAnimCmd *const gSwiftStarAffineAnimTable[]; extern const union AnimCmd *const gMetronomeThroughtBubbleAnimTable[]; +extern const union AffineAnimCmd *const gStockpileAbsorptionOrbAffineAnimTable[]; // battle_anim_effects_2.c void AnimUproarRing(struct Sprite *sprite); @@ -280,6 +283,7 @@ void AnimOrbitFast(struct Sprite *sprite); void AnimOrbitScatter(struct Sprite *sprite); void AnimAngerMark(struct Sprite *sprite); void AnimHyperVoiceRing(struct Sprite *sprite); +void AnimMagentaHeart(struct Sprite *); extern const union AffineAnimCmd *const gThinRingShrinkingAffineAnimTable[]; extern const union AffineAnimCmd *const gThinRingExpandingAffineAnimTable[]; extern const union AnimCmd *const gExplosionAnimTable[]; @@ -295,8 +299,13 @@ void AnimBlackSmoke(struct Sprite *sprite); void AnimSweetScentPetal(struct Sprite *sprite); void AnimTealAlert(struct Sprite *sprite); void AnimBlockX(struct Sprite *sprite); +void AnimFlatterSpotlight_Step(struct Sprite *); +void AnimAssistPawprint(struct Sprite *); +void AnimReversalOrb(struct Sprite *); +void AnimFlatterSpotlight_Step(struct Sprite *sprite); extern const union AnimCmd *const gOpeningEyeAnimTable[]; extern const union AnimCmd *const gEclipsingOrbAnimTable[]; +extern const union AffineAnimCmd *const gSpotlightAffineAnimTable[]; // battle_anim_water.c void AnimWaterPulseRing(struct Sprite *sprite); @@ -314,16 +323,21 @@ void AnimFlyBallUp(struct Sprite *sprite); void AnimFlyBallAttack(struct Sprite *sprite); void AnimFlyBallAttack_Step(struct Sprite *sprite); void AnimFlyBallUp_Step(struct Sprite *sprite); +void AnimBounceBallLand(struct Sprite *); +void AnimEllipticalGust(struct Sprite *); extern const union AnimCmd *const gAffineAnims_AirWaveCrescent[]; extern const union AffineAnimCmd *const gAffineAnims_FlyBallUp[]; extern const union AffineAnimCmd *const gAffineAnims_FlyBallAttack[]; +extern const union AffineAnimCmd *const gAffineAnims_BounceBallLand[]; // battle_anim_poison.c void AnimSludgeBombHitParticle(struct Sprite *); void AnimAcidPoisonBubble_Step(struct Sprite *sprite); +void AnimBubbleEffect(struct Sprite *); extern const union AffineAnimCmd *const gAffineAnims_PoisonProjectile[]; extern const union AnimCmd *const gAnims_PoisonProjectile[]; extern const union AnimCmd *const gAnims_AcidPoisonDroplet[]; +extern const union AffineAnimCmd *const gAffineAnims_Bubble[]; // battle_anim_ghost.c void AnimGhostStatusSprite(struct Sprite *sprite); @@ -419,6 +433,7 @@ void AnimSparkElectricity(struct Sprite *sprite); void AnimElectricPuff(struct Sprite *sprite); void AnimSparkElectricityFlashing(struct Sprite *sprite); void AnimGrowingShockWaveOrb(struct Sprite *sprite); +void AnimElectricity(struct Sprite *); extern const union AffineAnimCmd *const gAffineAnims_GrowingElectricOrb[]; extern const union AffineAnimCmd *const gAffineAnims_FlashingSpark[]; extern const union AnimCmd *const gAnims_ThunderboltOrb[]; @@ -434,6 +449,7 @@ void AnimBasicFistOrFoot(struct Sprite *sprite); void AnimSpinningKickOrPunchFinish(struct Sprite *sprite); void AnimRevengeScratch(struct Sprite *sprite); void AnimDizzyPunchDuck(struct Sprite *sprite); +void AnimSuperpowerFireball(struct Sprite *); extern const union AnimCmd *const gAnims_HandsAndFeet[]; extern const union AffineAnimCmd *const gAffineAnims_MegaPunchKick[]; extern const union AffineAnimCmd *const gAffineAnims_SpinningHandOrFoot[]; @@ -443,6 +459,7 @@ extern const union AnimCmd *const gAnims_RevengeBigScratch[]; extern const union AnimCmd *const gAnims_FlyingRock[]; extern const union AffineAnimCmd *const gAffineAnims_Whirlpool[]; extern const union AffineAnimCmd *const gAffineAnims_BasicRock[]; +extern const union AnimCmd *const gAnims_FlyingRock[]; void AnimParticleInVortex(struct Sprite *sprite); void AnimFallingRock(struct Sprite *sprite); void AnimRaiseSprite(struct Sprite *sprite); @@ -477,7 +494,13 @@ extern const union AnimCmd *const gAnims_BlizzardIceCrystal[]; // battle_anim_fire.c void AnimFireSpread(struct Sprite *sprite); void AnimFireSpiralOutward(struct Sprite *sprite); +void AnimWillOWispOrb(struct Sprite *); +void AnimEruptionFallingRock(struct Sprite *); +void AnimFireCross(struct Sprite *); +void AnimFirePlume(struct Sprite *); extern const union AnimCmd *const gAnims_FireBlastCross[]; +extern const union AnimCmd *const gAnims_WillOWispOrb[]; +extern const union AnimCmd *const gAnims_FirePlume[]; // battle_anim_dragon.c extern const union AnimCmd *const gAnims_DragonBreathFire[]; diff --git a/include/battle_controllers.h b/include/battle_controllers.h index 2474b982b..71c1f3af0 100644 --- a/include/battle_controllers.h +++ b/include/battle_controllers.h @@ -129,6 +129,7 @@ struct ChooseMoveStruct u8 monType2; u8 monType3; struct MegaEvolutionData mega; + struct ZMoveData zmove; }; enum @@ -276,6 +277,8 @@ void Task_PlayerController_RestoreBgmAfterCry(u8 taskId); void ActionSelectionCreateCursorAt(u8 cursorPos, u8 unused); void ActionSelectionDestroyCursorAt(u8 cursorPos); void InitMoveSelectionsVarsAndStrings(void); +void MoveSelectionCreateCursorAt(u8 cursorPos, u8 arg1); +void MoveSelectionDestroyCursorAt(u8 cursorPosition); // recorded player controller void SetControllerToRecordedPlayer(void); diff --git a/include/battle_interface.h b/include/battle_interface.h index a6187c4ce..29cb45b0f 100644 --- a/include/battle_interface.h +++ b/include/battle_interface.h @@ -43,6 +43,7 @@ enum #define TAG_MEGA_INDICATOR_TILE 0xD778 #define TAG_ALPHA_INDICATOR_TILE 0xD779 #define TAG_OMEGA_INDICATOR_TILE 0xD77A +#define TAG_ZMOVE_TRIGGER_TILE 0xD77B #define TAG_HEALTHBOX_PAL 0xD6FF #define TAG_HEALTHBAR_PAL 0xD704 @@ -53,6 +54,7 @@ enum #define TAG_MEGA_INDICATOR_PAL 0xD778 #define TAG_ALPHA_INDICATOR_PAL 0xD779 #define TAG_OMEGA_INDICATOR_PAL 0xD77A +#define TAG_ZMOVE_TRIGGER_PAL 0xD77B enum { @@ -97,6 +99,7 @@ u8 GetScaledHPFraction(s16 hp, s16 maxhp, u8 scale); u8 GetHPBarLevel(s16 hp, s16 maxhp); void CreateAbilityPopUp(u8 battlerId, u32 ability, bool32 isDoubleBattle); void DestroyAbilityPopUp(u8 battlerId); +void HideTriggerSprites(void); bool32 CanThrowLastUsedBall(void); void TryHideLastUsedBall(void); void TryRestoreLastUsedBall(void); diff --git a/include/battle_message.h b/include/battle_message.h index 09ee27c08..1a74b44e8 100644 --- a/include/battle_message.h +++ b/include/battle_message.h @@ -240,6 +240,7 @@ void BattlePutTextOnWindow(const u8* text, u8 windowId); void SetPpNumbersPaletteInMoveSelection(void); u8 GetCurrentPpToMaxPpState(u8 currentPp, u8 maxPp); bool32 ShouldDoTrainerSlide(u32 battlerId, u32 trainerId, u32 which); +void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst); extern struct BattleMsgData *gBattleMsgDataPtr; diff --git a/include/battle_scripts.h b/include/battle_scripts.h index 4134a87dc..09e11bd8c 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -421,4 +421,13 @@ extern const u8 BattleScript_BeakBlastSetUp[]; extern const u8 BattleScript_BeakBlastBurn[]; extern const u8 BattleScript_DefDownSpeedUp[]; +// zmoves +extern const u8 BattleScript_ZMoveActivateDamaging[]; +extern const u8 BattleScript_ZMoveActivateStatus[]; +extern const u8 BattleScript_ZEffectPrintString[]; +extern const u8 BattleScript_RecoverHPZMove[]; +extern const u8 BattleScript_StatUpZMove[]; +extern const u8 BattleScript_HealReplacementZMove[]; +extern const u8 BattleScript_EffectExtremeEvoboost[]; + #endif // GUARD_BATTLE_SCRIPTS_H diff --git a/include/battle_util.h b/include/battle_util.h index 479f23d5b..e45acdb89 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -153,6 +153,8 @@ bool32 CanFling(u8 battlerId); bool32 IsTelekinesisBannedSpecies(u16 species); bool32 IsHealBlockPreventingMove(u32 battler, u32 move); bool32 HasEnoughHpToEatBerry(u32 battlerId, u32 hpFraction, u32 itemId); +bool32 IsPartnerMonFromSameTrainer(u8 battlerId); +u8 GetSplitBasedOnStats(u8 battlerId); void SortBattlersBySpeed(u8 *battlers, bool8 slowToFast); bool32 TestSheerForceFlag(u8 battler, u16 move); void TryRestoreStolenItems(void); diff --git a/include/battle_z_move.h b/include/battle_z_move.h new file mode 100644 index 000000000..5d34e25a9 --- /dev/null +++ b/include/battle_z_move.h @@ -0,0 +1,29 @@ +#ifndef GUARD_BATTLE_Z_MOVE_H +#define GUARD_BATTLE_Z_MOVE_H + +#include "constants/z_move_effects.h" + +#define MOVE_Z_STATUS 0xFFFF + +struct SignatureZMove +{ + u16 species; + u16 item; + u16 move; + u16 zmove; +}; + +void QueueZMove(u8 battlerId, u16 baseMove); +bool32 IsViableZMove(u8 battlerId, u16 move); +bool32 TryChangeZIndicator(u8 battlerId, u8 moveIndex); +void CreateZMoveTriggerSprite(u8, bool8); +void HideZMoveTriggerSprite(void); +bool32 IsZMoveTriggerSpriteActive(void); +void DestroyZMoveTriggerSprite(void); +bool32 MoveSelectionDisplayZMove(u16 zmove); +const u8* GetZMoveName(u16 move); +void SetZEffect(void); +bool32 IsZMoveUsable(u8 battlerId, u16 moveIndex); +void GetUsableZMoves(u8 battlerId, u16 *moves); + +#endif // GUARD_BATTLE_Z_MOVE_H \ No newline at end of file diff --git a/include/constants/battle_anim.h b/include/constants/battle_anim.h index f4f8ff266..d15b6876e 100644 --- a/include/constants/battle_anim.h +++ b/include/constants/battle_anim.h @@ -535,6 +535,7 @@ #define B_ANIM_AQUA_RING_HEAL 32 #define B_ANIM_BEAK_BLAST_SETUP 33 #define B_ANIM_SHELL_TRAP_SETUP 34 +#define B_ANIM_ZMOVE_ACTIVATE 35 // Using Z Moves // special animations table (gBattleAnims_Special) #define B_ANIM_LVL_UP 0 @@ -601,6 +602,12 @@ #define ANIM_RIGHT_FIST 0 #define ANIM_LEFT_FIST 2 +// fist/chop frames +#define ANIM_FIST_1 0 +#define ANIM_FOOT_1 1 +#define ANIM_FOOT_2 2 +#define ANIM_CHOP 3 + // surf wave palettes #define ANIM_SURF_PAL_SURF 0 #define ANIM_SURF_PAL_MUDDY_WATER 1 diff --git a/include/constants/battle_config.h b/include/constants/battle_config.h index a6f24a0c6..c9b64d1a5 100644 --- a/include/constants/battle_config.h +++ b/include/constants/battle_config.h @@ -87,6 +87,41 @@ #define ITEM_RINDO_BERRY 207 #define ITEM_YACHE_BERRY 208 #define ITEM_GRISEOUS_ORB 369 + // z crystals + #define ITEM_NORMALIUM_Z 568 + #define ITEM_FIGHTINIUM_Z 569 + #define ITEM_FLYINIUM_Z 570 + #define ITEM_POISONIUM_Z 571 + #define ITEM_GROUNDIUM_Z 572 + #define ITEM_ROCKIUM_Z 573 + #define ITEM_BUGINIUM_Z 574 + #define ITEM_GHOSTIUM_Z 575 + #define ITEM_STEELIUM_Z 576 + #define ITEM_FIRIUM_Z 577 + #define ITEM_WATERIUM_Z 578 + #define ITEM_GRASSIUM_Z 579 + #define ITEM_ELECTRIUM_Z 580 + #define ITEM_PSYCHIUM_Z 581 + #define ITEM_ICIUM_Z 582 + #define ITEM_DRAGONIUM_Z 583 + #define ITEM_DARKINIUM_Z 584 + #define ITEM_FAIRIUM_Z 585 + #define ITEM_ALORAICHIUM_Z 586 + #define ITEM_DECIDIUM_Z 587 + #define ITEM_EEVIUM_Z 588 + #define ITEM_INCINIUM_Z 589 + #define ITEM_KOMMONIUM_Z 590 + #define ITEM_LUNALIUM_Z 591 + #define ITEM_LYCANIUM_Z 592 + #define ITEM_MARSHADIUM_Z 593 + #define ITEM_MEWNIUM_Z 594 + #define ITEM_MIMIKIUM_Z 595 + #define ITEM_PIKANIUM_Z 596 + #define ITEM_PIKASHUNIUM_Z 597 + #define ITEM_PRIMARIUM_Z 598 + #define ITEM_SNORLIUM_Z 599 + #define ITEM_SOLGANIUM_Z 600 + #define ITEM_TAPUNIUM_Z 601 #endif #ifndef GEN_3 diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h index c3460bcfe..f217ecd33 100644 --- a/include/constants/battle_move_effects.h +++ b/include/constants/battle_move_effects.h @@ -394,7 +394,9 @@ #define EFFECT_BEAK_BLAST 388 #define EFFECT_COURT_CHANGE 389 #define EFFECT_STEEL_BEAM 390 +#define EFFECT_EXTREME_EVOBOOST 391 +#define EFFECT_DAMAGE_SET_TERRAIN 392 // genesis supernova -#define NUM_BATTLE_MOVE_EFFECTS 391 +#define NUM_BATTLE_MOVE_EFFECTS 393 #endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h index da44714e2..4a954906a 100644 --- a/include/constants/battle_script_commands.h +++ b/include/constants/battle_script_commands.h @@ -241,6 +241,7 @@ #define VARIOUS_BATTLER_ITEM_TO_LAST_USED_ITEM 150 #define VARIOUS_SET_BEAK_BLAST 151 #define VARIOUS_SWAP_SIDE_STATUSES 152 +#define VARIOUS_SET_Z_EFFECT 153 // Cmd_manipulatedamage #define DMG_CHANGE_SIGN 0 diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index 7b53a9dfc..39092410a 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -615,8 +615,17 @@ #define STRINGID_COURTCHANGE 613 #define STRINGID_PLAYERLOSTTOENEMYTRAINER 614 #define STRINGID_PLAYERPAIDPRIZEMONEY 615 +#define STRINGID_ZPOWERSURROUNDS 616 +#define STRINGID_ZMOVEUNLEASHED 617 +#define STRINGID_ZMOVERESETSSTATS 618 +#define STRINGID_ZMOVEALLSTATSUP 619 +#define STRINGID_ZMOVEZBOOSTCRIT 620 +#define STRINGID_ZMOVERESTOREHP 621 +#define STRINGID_ZMOVESTATUP 622 +#define STRINGID_ZMOVEHPTRAP 623 +#define STRINGID_TERRAINREMOVED 624 -#define BATTLESTRINGS_COUNT 616 +#define BATTLESTRINGS_COUNT 625 // This is the string id that gBattleStringsTable starts with. // String ids before this (e.g. STRINGID_INTROMSG) are not in the table, @@ -886,4 +895,13 @@ #define B_MSG_WRAPPED_SNAP_TRAP 8 #define NUM_TRAPPING_MOVES 9 +// z effects +#define B_MSG_Z_RESET_STATS 0 +#define B_MSG_Z_ALL_STATS_UP 1 +#define B_MSG_Z_BOOST_CRITS 2 +#define B_MSG_Z_FOLLOW_ME 3 +#define B_MSG_Z_RECOVER_HP 4 +#define B_MSG_Z_STAT_UP 5 +#define B_MSG_Z_HP_TRAP 6 + #endif // GUARD_CONSTANTS_BATTLE_STRING_IDS_H diff --git a/include/constants/moves.h b/include/constants/moves.h index 58a43d78e..218bebdb8 100644 --- a/include/constants/moves.h +++ b/include/constants/moves.h @@ -784,7 +784,49 @@ #define MOVES_COUNT_GEN8 755 -#define MOVES_COUNT MOVES_COUNT_GEN8 +// Z Moves +#define MOVE_BREAKNECK_BLITZ (MOVES_COUNT_GEN8 + 0) +#define MOVE_ALL_OUT_PUMMELING (MOVES_COUNT_GEN8 + 1) +#define MOVE_SUPERSONIC_SKYSTRIKE (MOVES_COUNT_GEN8 + 2) +#define MOVE_ACID_DOWNPOUR (MOVES_COUNT_GEN8 + 3) +#define MOVE_TECTONIC_RAGE (MOVES_COUNT_GEN8 + 4) +#define MOVE_CONTINENTAL_CRUSH (MOVES_COUNT_GEN8 + 5) +#define MOVE_SAVAGE_SPIN_OUT (MOVES_COUNT_GEN8 + 6) +#define MOVE_NEVER_ENDING_NIGHTMARE (MOVES_COUNT_GEN8 + 7) +#define MOVE_CORKSCREW_CRASH (MOVES_COUNT_GEN8 + 8) +#define MOVE_INFERNO_OVERDRIVE (MOVES_COUNT_GEN8 + 9) +#define MOVE_HYDRO_VORTEX (MOVES_COUNT_GEN8 + 10) +#define MOVE_BLOOM_DOOM (MOVES_COUNT_GEN8 + 11) +#define MOVE_GIGAVOLT_HAVOC (MOVES_COUNT_GEN8 + 12) +#define MOVE_SHATTERED_PSYCHE (MOVES_COUNT_GEN8 + 13) +#define MOVE_SUBZERO_SLAMMER (MOVES_COUNT_GEN8 + 14) +#define MOVE_DEVASTATING_DRAKE (MOVES_COUNT_GEN8 + 15) +#define MOVE_BLACK_HOLE_ECLIPSE (MOVES_COUNT_GEN8 + 16) +#define MOVE_TWINKLE_TACKLE (MOVES_COUNT_GEN8 + 17) +//signature z moves +#define MOVE_CATASTROPIKA (MOVES_COUNT_GEN8 + 18) +#define MOVE_10000000_VOLT_THUNDERBOLT (MOVES_COUNT_GEN8 + 19) +#define MOVE_STOKED_SPARKSURFER (MOVES_COUNT_GEN8 + 20) +#define MOVE_EXTREME_EVOBOOST (MOVES_COUNT_GEN8 + 21) +#define MOVE_PULVERIZING_PANCAKE (MOVES_COUNT_GEN8 + 22) +#define MOVE_GENESIS_SUPERNOVA (MOVES_COUNT_GEN8 + 23) +#define MOVE_SINISTER_ARROW_RAID (MOVES_COUNT_GEN8 + 24) +#define MOVE_MALICIOUS_MOONSAULT (MOVES_COUNT_GEN8 + 25) +#define MOVE_OCEANIC_OPERETTA (MOVES_COUNT_GEN8 + 26) +#define MOVE_SPLINTERED_STORMSHARDS (MOVES_COUNT_GEN8 + 27) +#define MOVE_LETS_SNUGGLE_FOREVER (MOVES_COUNT_GEN8 + 28) +#define MOVE_CLANGOROUS_SOULBLAZE (MOVES_COUNT_GEN8 + 29) +#define MOVE_GUARDIAN_OF_ALOLA (MOVES_COUNT_GEN8 + 30) +#define MOVE_SEARING_SUNRAZE_SMASH (MOVES_COUNT_GEN8 + 31) +#define MOVE_MENACING_MOONRAZE_MAELSTROM (MOVES_COUNT_GEN8 + 32) +#define MOVE_LIGHT_THAT_BURNS_THE_SKY (MOVES_COUNT_GEN8 + 33) +#define MOVE_SOUL_STEALING_7_STAR_STRIKE (MOVES_COUNT_GEN8 + 34) + +#define FIRST_Z_MOVE MOVE_BREAKNECK_BLITZ +#define LAST_Z_MOVE MOVE_SOUL_STEALING_7_STAR_STRIKE + +#define MOVES_COUNT MOVES_COUNT_GEN8 +#define MOVES_COUNT_Z (MOVE_SOUL_STEALING_7_STAR_STRIKE + 1) // Used for checks for moves affected by Disable, Mimic, etc. #define MOVE_UNAVAILABLE 0xFFFF diff --git a/include/constants/z_move_effects.h b/include/constants/z_move_effects.h new file mode 100644 index 000000000..ce4d5c4ad --- /dev/null +++ b/include/constants/z_move_effects.h @@ -0,0 +1,38 @@ +#ifndef GUARD_Z_MOVE_EFFECTS_H +#define GUARD_Z_MOVE_EFFECTS_H + +#define Z_EFFECT_NONE 0 +#define Z_EFFECT_RESET_STATS 1 +#define Z_EFFECT_ALL_STATS_UP_1 2 +#define Z_EFFECT_BOOST_CRITS 3 +#define Z_EFFECT_FOLLOW_ME 4 +#define Z_EFFECT_CURSE 5 +#define Z_EFFECT_RECOVER_HP 6 +#define Z_EFFECT_RESTORE_REPLACEMENT_HP 7 + +#define Z_EFFECT_ATK_UP_1 8 +#define Z_EFFECT_DEF_UP_1 9 +#define Z_EFFECT_SPD_UP_1 10 +#define Z_EFFECT_SPATK_UP_1 11 +#define Z_EFFECT_SPDEF_UP_1 12 +#define Z_EFFECT_ACC_UP_1 13 +#define Z_EFFECT_EVSN_UP_1 14 + +#define Z_EFFECT_ATK_UP_2 15 +#define Z_EFFECT_DEF_UP_2 16 +#define Z_EFFECT_SPD_UP_2 17 +#define Z_EFFECT_SPATK_UP_2 18 +#define Z_EFFECT_SPDEF_UP_2 19 +#define Z_EFFECT_ACC_UP_2 20 +#define Z_EFFECT_EVSN_UP_2 21 + +#define Z_EFFECT_ATK_UP_3 22 +#define Z_EFFECT_DEF_UP_3 23 +#define Z_EFFECT_SPD_UP_3 24 +#define Z_EFFECT_SPATK_UP_3 25 +#define Z_EFFECT_SPDEF_UP_3 26 +#define Z_EFFECT_ACC_UP_3 27 +#define Z_EFFECT_EVSN_UP_3 28 + + +#endif // GUARD_Z_MOVE_EFFECTS_H diff --git a/include/data.h b/include/data.h index 2d3619e67..ea7443a51 100644 --- a/include/data.h +++ b/include/data.h @@ -126,5 +126,6 @@ extern const struct Trainer gTrainers[]; extern const u8 gTrainerClassNames[][13]; extern const u8 gSpeciesNames[][POKEMON_NAME_LENGTH + 1]; extern const u8 gMoveNames[MOVES_COUNT][MOVE_NAME_LENGTH + 1]; +extern const u8 *const gZMoveNames[]; #endif // GUARD_DATA_H diff --git a/include/pokemon.h b/include/pokemon.h index 147939350..4a9ab8d08 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -231,7 +231,7 @@ struct BaseStats struct BattleMove { u16 effect; - u8 power; + u16 power; //higher than 255 for z moves u8 type; u8 accuracy; u8 pp; @@ -241,6 +241,8 @@ struct BattleMove u32 flags; u8 split; u8 argument; + u8 zMovePower; + u8 zMoveEffect; }; #define SPINDA_SPOT_WIDTH 16 diff --git a/ld_script.txt b/ld_script.txt index 57254e1b2..9ec1326d9 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -91,6 +91,7 @@ SECTIONS { src/battle_bg.o(.text); src/battle_main.o(.text); src/battle_util.o(.text); + src/battle_z_move.o(.text); src/battle_script_commands.o(.text); src/battle_util2.o(.text); src/battle_controller_player.o(.text); @@ -481,6 +482,7 @@ SECTIONS { src/battle_bg.o(.rodata); src/battle_main.o(.rodata); src/battle_util.o(.rodata); + src/battle_z_move.o(.rodata); src/battle_script_commands.o(.rodata); src/battle_controller_player.o(.rodata); src/battle_anim_smokescreen.o(.rodata); diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 11b672bca..f924728d2 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -291,7 +291,7 @@ void GetAiLogicData(void) && move != 0xFFFF //&& gBattleMoves[move].power != 0 /* we want to get effectiveness of status moves */ && !(AI_DATA->moveLimitations[battlerAtk] & gBitTable[i])) { - dmg = AI_CalcDamage(move, battlerAtk, battlerDef, &effectiveness); + dmg = AI_CalcDamage(move, battlerAtk, battlerDef, &effectiveness, TRUE); } AI_DATA->simulatedDmg[battlerAtk][battlerDef][i] = dmg; diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index d04f9d7ee..b8c42ed0c 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -1,4 +1,5 @@ #include "global.h" +#include "battle_z_move.h" #include "malloc.h" #include "battle.h" #include "battle_anim.h" @@ -720,12 +721,19 @@ static bool32 AI_GetIfCrit(u32 move, u8 battlerAtk, u8 battlerDef) return isCrit; } -s32 AI_CalcDamage(u16 move, u8 battlerAtk, u8 battlerDef, u8 *typeEffectiveness) +s32 AI_CalcDamage(u16 move, u8 battlerAtk, u8 battlerDef, u8 *typeEffectiveness, bool32 considerZPower) { s32 dmg, moveType, critDmg, normalDmg; s8 critChance; u16 effectivenessMultiplier; + if (considerZPower && IsViableZMove(battlerAtk, move)) + { + //temporarily enable z moves for damage calcs + gBattleStruct->zmove.baseMoves[battlerAtk] = move; + gBattleStruct->zmove.active = TRUE; + } + SaveBattlerData(battlerAtk); SaveBattlerData(battlerDef); @@ -800,6 +808,8 @@ s32 AI_CalcDamage(u16 move, u8 battlerAtk, u8 battlerDef, u8 *typeEffectiveness) // convert multiper to AI_EFFECTIVENESS_xX *typeEffectiveness = AI_GetEffectiveness(effectivenessMultiplier); + gBattleStruct->zmove.active = FALSE; + gBattleStruct->zmove.baseMoves[battlerAtk] = MOVE_NONE; return dmg; } @@ -1102,7 +1112,7 @@ bool32 CanMoveFaintBattler(u16 move, u8 battlerDef, u8 battlerAtk, u8 nHits) if (move != MOVE_NONE && move != 0xFFFF && !(unusable & gBitTable[i]) - && AI_CalcDamage(move, battlerDef, battlerAtk, &effectiveness) >= gBattleMons[battlerAtk].hp) + && AI_CalcDamage(move, battlerDef, battlerAtk, &effectiveness, FALSE) >= gBattleMons[battlerAtk].hp) return TRUE; return FALSE; @@ -3219,7 +3229,7 @@ s32 AI_CalcPartyMonDamage(u16 move, u8 battlerAtk, u8 battlerDef, struct Pokemon battleMons[i] = gBattleMons[i]; PokemonToBattleMon(mon, &gBattleMons[battlerAtk]); - dmg = AI_CalcDamage(move, battlerAtk, battlerDef, &effectiveness); + dmg = AI_CalcDamage(move, battlerAtk, battlerDef, &effectiveness, FALSE); for (i = 0; i < MAX_BATTLERS_COUNT; i++) gBattleMons[i] = battleMons[i]; @@ -3599,3 +3609,37 @@ bool32 AI_MoveMakesContact(u32 ability, u32 holdEffect, u16 move) return TRUE; return FALSE; } + +//TODO - this could use some more sophisticated logic +bool32 ShouldUseZMove(u8 battlerAtk, u8 battlerDef, u16 chosenMove) +{ + // simple logic. just upgrades chosen move to z move if possible, unless regular move would kill opponent + if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && battlerDef == BATTLE_PARTNER(battlerAtk)) + return FALSE; //don't use z move on partner + if (gBattleStruct->zmove.used[battlerAtk]) + return FALSE; //cant use z move twice + + if (IsViableZMove(battlerAtk, chosenMove)) + { + u8 effectiveness; + + #ifdef POKEMON_EXPANSION + if (gBattleMons[battlerDef].ability == ABILITY_DISGUISE && gBattleMons[battlerDef].species == SPECIES_MIMIKYU) + return FALSE; // Don't waste a Z-Move busting disguise + if (gBattleMons[battlerDef].ability == ABILITY_ICE_FACE && gBattleMons[battlerDef].species == SPECIES_EISCUE && IS_MOVE_PHYSICAL(chosenMove)) + return FALSE; // Don't waste a Z-Move busting Ice Face + #endif + + if (IS_MOVE_STATUS(chosenMove) && !IS_MOVE_STATUS(gBattleStruct->zmove.chosenZMove)) + return FALSE; + else if (!IS_MOVE_STATUS(chosenMove) && IS_MOVE_STATUS(gBattleStruct->zmove.chosenZMove)) + return FALSE; + + if (!IS_MOVE_STATUS(chosenMove) && AI_CalcDamage(chosenMove, battlerAtk, battlerDef, &effectiveness, FALSE) >= gBattleMons[battlerDef].hp) + return FALSE; // don't waste damaging z move if can otherwise faint target + + return TRUE; + } + + return FALSE; +} diff --git a/src/battle_anim_effects_2.c b/src/battle_anim_effects_2.c index 7f232b7c6..f1ed8a473 100755 --- a/src/battle_anim_effects_2.c +++ b/src/battle_anim_effects_2.c @@ -58,7 +58,6 @@ static void AnimSoftBoiledEgg_Step4(struct Sprite *); static void AnimSoftBoiledEgg_Step4_Callback(struct Sprite *); static void AnimSpeedDust(struct Sprite *); static void AnimHealBellMusicNote(struct Sprite *); -static void AnimMagentaHeart(struct Sprite *); static void AnimRedHeartProjectile(struct Sprite *); static void AnimRedHeartProjectile_Step(struct Sprite *); static void AnimRedHeartRising(struct Sprite *); @@ -3101,7 +3100,7 @@ static void AnimHealBellMusicNote(struct Sprite *sprite) SetMusicNotePalette(sprite, gBattleAnimArgs[5], gBattleAnimArgs[6]); } -static void AnimMagentaHeart(struct Sprite *sprite) +void AnimMagentaHeart(struct Sprite *sprite) { if (++sprite->data[0] == 1) InitSpritePosToAnimAttacker(sprite, FALSE); diff --git a/src/battle_anim_effects_3.c b/src/battle_anim_effects_3.c index 322946a44..6a12331ed 100755 --- a/src/battle_anim_effects_3.c +++ b/src/battle_anim_effects_3.c @@ -66,8 +66,6 @@ static void AnimPainSplitProjectile(struct Sprite *); static void AnimFlatterConfetti(struct Sprite *); static void AnimFlatterConfetti_Step(struct Sprite *); static void AnimFlatterSpotlight(struct Sprite *); -static void AnimFlatterSpotlight_Step(struct Sprite *); -static void AnimReversalOrb(struct Sprite *); static void AnimReversalOrb_Step(struct Sprite *); static void AnimYawnCloud(struct Sprite *); static void AnimYawnCloud_Step(struct Sprite *); @@ -76,7 +74,6 @@ static void AnimFacadeSweatDrop(struct Sprite *); static void AnimRoarNoiseLine(struct Sprite *); static void AnimRoarNoiseLine_Step(struct Sprite *); static void AnimGlareEyeDot(struct Sprite *); -static void AnimAssistPawprint(struct Sprite *); static void AnimSmellingSaltsHand(struct Sprite *); static void AnimSmellingSaltsHand_Step(struct Sprite *); static void AnimSmellingSaltExclamation(struct Sprite *); @@ -3200,7 +3197,7 @@ static void AnimFlatterSpotlight(struct Sprite *sprite) sprite->callback = AnimFlatterSpotlight_Step; } -static void AnimFlatterSpotlight_Step(struct Sprite *sprite) +void AnimFlatterSpotlight_Step(struct Sprite *sprite) { switch (sprite->data[1]) { @@ -3234,7 +3231,7 @@ static void AnimFlatterSpotlight_Step(struct Sprite *sprite) // Spins an orb around the attacking mon, while its path radius grows and shrinks. // arg 0: duration // arg 1: initial wave offset -static void AnimReversalOrb(struct Sprite *sprite) +void AnimReversalOrb(struct Sprite *sprite) { sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); @@ -4239,7 +4236,7 @@ static void AnimGlareEyeDot(struct Sprite *sprite) // arg 2: destination x position // arg 3: destination y position // arg 4: duration -static void AnimAssistPawprint(struct Sprite *sprite) +void AnimAssistPawprint(struct Sprite *sprite) { sprite->x = gBattleAnimArgs[0]; sprite->y = gBattleAnimArgs[1]; diff --git a/src/battle_anim_electric.c b/src/battle_anim_electric.c index dbb7b33dd..1ec887c9e 100644 --- a/src/battle_anim_electric.c +++ b/src/battle_anim_electric.c @@ -15,7 +15,6 @@ static void AnimZapCannonSpark_Step(struct Sprite *); static void AnimThunderboltOrb(struct Sprite *); static void AnimThunderboltOrb_Step(struct Sprite *); static void AnimSparkElectricityFlashing_Step(struct Sprite *); -static void AnimElectricity(struct Sprite *); static void AnimTask_ElectricBolt_Step(u8 taskId); static void AnimElectricBoltSegment(struct Sprite *); static void AnimThunderWave_Step(struct Sprite *); @@ -758,7 +757,7 @@ static void AnimSparkElectricityFlashing_Step(struct Sprite *sprite) } // Electricity arcs around the target. Used for Paralysis and various electric move hits -static void AnimElectricity(struct Sprite *sprite) +void AnimElectricity(struct Sprite *sprite) { if (!InitSpritePosToAnimBattler(gBattleAnimArgs[4], sprite, FALSE)) return; diff --git a/src/battle_anim_fight.c b/src/battle_anim_fight.c index fabcb73ac..050aa1a13 100644 --- a/src/battle_anim_fight.c +++ b/src/battle_anim_fight.c @@ -24,7 +24,6 @@ static void AnimSuperpowerOrb_Step(struct Sprite *); static void AnimSuperpowerRock(struct Sprite *); static void AnimSuperpowerRock_Step1(struct Sprite *); static void AnimSuperpowerRock_Step2(struct Sprite *); -static void AnimSuperpowerFireball(struct Sprite *); static void AnimArmThrustHit(struct Sprite *); static void AnimArmThrustHit_Step(struct Sprite *sprite); static void AnimFocusPunchFist(struct Sprite *); @@ -966,7 +965,7 @@ static void AnimSuperpowerRock_Step2(struct Sprite *sprite) DestroyAnimSprite(sprite); } -static void AnimSuperpowerFireball(struct Sprite *sprite) +void AnimSuperpowerFireball(struct Sprite *sprite) { u8 battler; diff --git a/src/battle_anim_fire.c b/src/battle_anim_fire.c index 8d0818d7a..e898d9cc4 100644 --- a/src/battle_anim_fire.c +++ b/src/battle_anim_fire.c @@ -8,7 +8,6 @@ #include "trig.h" static void AnimFireSpiralInward(struct Sprite *); -static void AnimFirePlume(struct Sprite *); static void AnimLargeFlame(struct Sprite *); static void AnimLargeFlame_Step(struct Sprite *); static void AnimUnusedSmallEmber(struct Sprite *); @@ -21,7 +20,6 @@ static void AnimFireRing_Step1(struct Sprite *); static void AnimFireRing_Step2(struct Sprite *); static void AnimFireRing_Step3(struct Sprite *); static void UpdateFireRingCircleOffset(struct Sprite *); -static void AnimFireCross(struct Sprite *); static void AnimFireSpiralOutward_Step1(struct Sprite *); static void AnimFireSpiralOutward_Step2(struct Sprite *); static void AnimTask_EruptionLaunchRocks_Step(u8); @@ -30,9 +28,7 @@ static void AnimEruptionLaunchRock(struct Sprite *); static u16 GetEruptionLaunchRockInitialYPos(u8); static void InitEruptionLaunchRockCoordData(struct Sprite *, s16, s16); static void UpdateEruptionLaunchRockPos(struct Sprite *); -static void AnimEruptionFallingRock(struct Sprite *); static void AnimEruptionFallingRock_Step(struct Sprite *); -static void AnimWillOWispOrb(struct Sprite *); static void AnimWillOWispOrb_Step(struct Sprite *); static void AnimWillOWispFire(struct Sprite *); static void AnimTask_MoveHeatWaveTargets_Step(u8); @@ -111,7 +107,7 @@ static const union AnimCmd sAnim_FirePlume[] = ANIMCMD_JUMP(0), }; -static const union AnimCmd *const sAnims_FirePlume[] = +const union AnimCmd *const gAnims_FirePlume[] = { sAnim_FirePlume, }; @@ -155,7 +151,7 @@ const struct SpriteTemplate gFirePlumeSpriteTemplate = .tileTag = ANIM_TAG_FIRE_PLUME, .paletteTag = ANIM_TAG_FIRE_PLUME, .oam = &gOamData_AffineOff_ObjNormal_32x32, - .anims = sAnims_FirePlume, + .anims = gAnims_FirePlume, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = AnimFirePlume, @@ -167,7 +163,7 @@ static const struct SpriteTemplate sUnusedEmberFirePlumeSpriteTemplate = .tileTag = ANIM_TAG_SMALL_EMBER, .paletteTag = ANIM_TAG_SMALL_EMBER, .oam = &gOamData_AffineOff_ObjNormal_32x32, - .anims = sAnims_FirePlume, + .anims = gAnims_FirePlume, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = AnimFirePlume, @@ -428,7 +424,7 @@ static const union AnimCmd sAnim_WillOWispOrb_3[] = ANIMCMD_END, }; -static const union AnimCmd *const sAnims_WillOWispOrb[] = +const union AnimCmd *const gAnims_WillOWispOrb[] = { sAnim_WillOWispOrb_0, sAnim_WillOWispOrb_1, @@ -441,7 +437,7 @@ const struct SpriteTemplate gWillOWispOrbSpriteTemplate = .tileTag = ANIM_TAG_WISP_ORB, .paletteTag = ANIM_TAG_WISP_ORB, .oam = &gOamData_AffineOff_ObjNormal_16x16, - .anims = sAnims_WillOWispOrb, + .anims = gAnims_WillOWispOrb, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = AnimWillOWispOrb, @@ -502,7 +498,7 @@ const struct SpriteTemplate gLavaPlumeSpriteTemplate = .tileTag = ANIM_TAG_FIRE_PLUME, .paletteTag = ANIM_TAG_FIRE_PLUME, .oam = &gOamData_AffineOff_ObjNormal_32x32, - .anims = sAnims_FirePlume, + .anims = gAnims_FirePlume, .images = NULL, .affineAnims = gLavaPlumeAffineAnims, .callback = AnimLavaPlumeOrbitScatter, @@ -576,7 +572,7 @@ void AnimFireSpread(struct Sprite *sprite) StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); } -static void AnimFirePlume(struct Sprite *sprite) +void AnimFirePlume(struct Sprite *sprite) { SetSpriteCoordsToAnimAttackerCoords(sprite); @@ -806,7 +802,7 @@ static void UpdateFireRingCircleOffset(struct Sprite *sprite) // arg 3: x delta // arg 4: y delta // AnimFireCross(struct Sprite *sprite) -static void AnimFireCross(struct Sprite *sprite) +void AnimFireCross(struct Sprite *sprite) { sprite->x += gBattleAnimArgs[0]; sprite->y += gBattleAnimArgs[1]; @@ -1121,7 +1117,7 @@ static void UpdateEruptionLaunchRockPos(struct Sprite *sprite) #define sFallDelay data[6] #define sTargetY data[7] -static void AnimEruptionFallingRock(struct Sprite *sprite) +void AnimEruptionFallingRock(struct Sprite *sprite) { sprite->x = gBattleAnimArgs[0]; sprite->y = gBattleAnimArgs[1]; @@ -1183,7 +1179,7 @@ static void AnimEruptionFallingRock_Step(struct Sprite *sprite) #undef sFallDelay #undef sTargetY -static void AnimWillOWispOrb(struct Sprite *sprite) +void AnimWillOWispOrb(struct Sprite *sprite) { switch (sprite->data[0]) { diff --git a/src/battle_anim_flying.c b/src/battle_anim_flying.c index da52881d9..d70114e10 100644 --- a/src/battle_anim_flying.c +++ b/src/battle_anim_flying.c @@ -10,7 +10,6 @@ extern const struct SpriteTemplate gFlashingHitSplatSpriteTemplate; -static void AnimEllipticalGust(struct Sprite *); static void AnimEllipticalGust_Step(struct Sprite *); static void AnimGustToTarget(struct Sprite *); static void AnimGustToTarget_Step(struct Sprite *); @@ -20,7 +19,6 @@ static void AnimWhirlwindLine_Step(struct Sprite *); static void AnimUnusedBubbleThrow(struct Sprite *); static void AnimWhirlwindLine(struct Sprite *); static void AnimBounceBallShrink(struct Sprite *); -static void AnimBounceBallLand(struct Sprite *); static void AnimDiveBall(struct Sprite *); static void AnimDiveBall_Step1(struct Sprite *); static void AnimDiveBall_Step2(struct Sprite *); @@ -246,7 +244,7 @@ static const union AffineAnimCmd sAffineAnim_BounceBallLand[] = AFFINEANIMCMD_END, }; -static const union AffineAnimCmd *const sAffineAnims_BounceBallLand[] = +const union AffineAnimCmd *const gAffineAnims_BounceBallLand[] = { sAffineAnim_BounceBallLand, }; @@ -258,7 +256,7 @@ const struct SpriteTemplate gBounceBallLandSpriteTemplate = .oam = &gOamData_AffineDouble_ObjNormal_64x64, .anims = gDummySpriteAnimTable, .images = NULL, - .affineAnims = sAffineAnims_BounceBallLand, + .affineAnims = gAffineAnims_BounceBallLand, .callback = AnimBounceBallLand, }; @@ -347,7 +345,7 @@ const struct SpriteTemplate gSkyAttackBirdSpriteTemplate = }; -static void AnimEllipticalGust(struct Sprite *sprite) +void AnimEllipticalGust(struct Sprite *sprite) { InitSpritePosToAnimTarget(sprite, FALSE); sprite->y += 20; @@ -980,7 +978,7 @@ static void AnimBounceBallShrink(struct Sprite *sprite) } } -static void AnimBounceBallLand(struct Sprite *sprite) +void AnimBounceBallLand(struct Sprite *sprite) { switch (sprite->data[0]) { diff --git a/src/battle_anim_ghost.c b/src/battle_anim_ghost.c index 9be11b450..eb270cf40 100644 --- a/src/battle_anim_ghost.c +++ b/src/battle_anim_ghost.c @@ -1442,3 +1442,68 @@ static void AnimPoltergeistItem(struct Sprite *sprite) if (sprite->data[2] == 256) DestroyAnimSprite(sprite); } + +//pulverizing pancake - destiny bond shadow from attacker to target +void AnimTask_PulverizingPancakeWhiteShadow(u8 taskId) +{ + struct Task *task; + s16 battler; + u8 spriteId; + s16 baseX, baseY; + s16 x, y; + + task = &gTasks[taskId]; + SetGpuReg(REG_OFFSET_BLDCNT, (BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL)); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 0x10)); + task->data[5] = 0; + task->data[6] = 0; + task->data[7] = 0; + task->data[8] = 0; + task->data[9] = 16; + task->data[10] = gBattleAnimArgs[0]; + + baseX = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); + baseY = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_BOTTOM); + if (!IsContest()) + { + spriteId = CreateSprite(&gDestinyBondWhiteShadowSpriteTemplate, baseX, baseY, 55); + if (spriteId != MAX_SPRITES) + { + x = GetBattlerSpriteCoord(gBattleAnimTarget, 2); + y = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_BOTTOM); + gSprites[spriteId].data[0] = baseX << 4; + gSprites[spriteId].data[1] = baseY << 4; + gSprites[spriteId].data[2] = ((x - baseX) << 4) / gBattleAnimArgs[1]; + gSprites[spriteId].data[3] = ((y - baseY) << 4) / gBattleAnimArgs[1]; + gSprites[spriteId].data[4] = gBattleAnimArgs[1]; + gSprites[spriteId].data[5] = x; + gSprites[spriteId].data[6] = y; + gSprites[spriteId].callback = AnimDestinyBondWhiteShadow_Step; + + task->data[task->data[12] + 13] = spriteId; + task->data[12]++; + } + } + else + { + spriteId = CreateSprite(&gDestinyBondWhiteShadowSpriteTemplate, baseX, baseY, 55); + if (spriteId != MAX_SPRITES) + { + x = 48; + y = 40; + gSprites[spriteId].data[0] = baseX << 4; + gSprites[spriteId].data[1] = baseY << 4; + gSprites[spriteId].data[2] = ((x - baseX) << 4) / gBattleAnimArgs[1]; + gSprites[spriteId].data[3] = ((y - baseY) << 4) / gBattleAnimArgs[1]; + gSprites[spriteId].data[4] = gBattleAnimArgs[1]; + gSprites[spriteId].data[5] = x; + gSprites[spriteId].data[6] = y; + gSprites[spriteId].callback = AnimDestinyBondWhiteShadow_Step; + + task->data[13] = spriteId; + task->data[12] = 1; + } + } + + task->func = AnimTask_DestinyBondWhiteShadow_Step; +} diff --git a/src/battle_anim_ground.c b/src/battle_anim_ground.c index b362c3bb2..fc943aaf5 100644 --- a/src/battle_anim_ground.c +++ b/src/battle_anim_ground.c @@ -8,7 +8,6 @@ static void AnimBonemerangProjectile(struct Sprite *); static void AnimBoneHitProjectile(struct Sprite *); -static void AnimDirtPlumeParticle(struct Sprite *); static void AnimDirtPlumeParticle_Step(struct Sprite *); static void AnimDigDirtMound(struct Sprite *); static void AnimBonemerangProjectile_Step(struct Sprite *); diff --git a/src/battle_anim_new.c b/src/battle_anim_new.c index 1392fc626..96faf23dd 100644 --- a/src/battle_anim_new.c +++ b/src/battle_anim_new.c @@ -5,11 +5,13 @@ #include "random.h" #include "gpu_regs.h" #include "item.h" +#include "rtc.h" #include "item_icon.h" #include "sound.h" #include "menu.h" #include "malloc.h" #include "util.h" +#include "trig.h" #include "graphics.h" #include "battle_scripts.h" #include "battle_controllers.h" @@ -17,7 +19,7 @@ #include "constants/hold_effects.h" #include "constants/items.h" -//// function declarations +// function declarations static void SpriteCB_SpriteToCentreOfSide(struct Sprite* sprite); static void SpriteCB_SpriteOnMonForDuration(struct Sprite *sprite); static void SpriteCB_ToxicThreadWrap(struct Sprite *sprite); @@ -55,9 +57,23 @@ static void AnimSkyDropBallUp(struct Sprite *sprite); static void SpriteCB_SearingShotRock(struct Sprite* sprite); static void AnimHappyHourCoinShower(struct Sprite *sprite); static void SpriteCB_Geyser(struct Sprite* sprite); +static void SpriteCB_GeyserTarget(struct Sprite* sprite); +static void SpriteCB_TwinkleOnBattler(struct Sprite *sprite); +static void AnimBlastBurnTargetPlume_Step1(struct Sprite *sprite); +static void AnimBlastBurnTargetPlume(struct Sprite *sprite); +static void AnimEllipticalGustAttacker(struct Sprite *sprite); +static void AnimEllipticalGustAttacker_Step(struct Sprite *sprite); +static void AnimGrowingShockWaveOrbOnTarget(struct Sprite *sprite); +static void AnimTask_GrowStep(u8 taskId); +static void AnimExtremeEvoboostCircle(struct Sprite *sprite); +static void AnimExtremeEvoboostCircle_Step(struct Sprite *sprite); +static void AnimOceanicOperettaSpotlight(struct Sprite *sprite); +static void AnimSoulStealingStar(struct Sprite *sprite); +static void AnimSoulStealingStar_Step1(struct Sprite *sprite); +static void AnimSoulStealingStar_Step2(struct Sprite *sprite); -//////// const data -//// general +// const data +// general static const union AffineAnimCmd sSquishTargetAffineAnimCmds[] = { AFFINEANIMCMD_FRAME(0, 64, 0, 16), //Flatten @@ -66,7 +82,7 @@ static const union AffineAnimCmd sSquishTargetAffineAnimCmds[] = AFFINEANIMCMD_END, }; -//// GEN 4 +// GEN 4 // shadow sneak const struct SpriteTemplate gShadowSneakImpactSpriteTemplate = { @@ -396,7 +412,7 @@ const struct SpriteTemplate gQuickGuardArmImpactTemplate = //sky drop static const union AffineAnimCmd sSkyDropFlyBallAffineAnimCmd_0[] = { - AFFINEANIMCMD_FRAME(0xa0, 0x100, 0x50, 0x0), //.hword 0xa0, 0x100, 0x50, 0x0, + AFFINEANIMCMD_FRAME(0xa0, 0x100, 0x50, 0x0), AFFINEANIMCMD_END }; static const union AffineAnimCmd *const sSkyDropFlyBallAffineAnimCmds[] = @@ -1182,13 +1198,13 @@ const struct SpriteTemplate gFusionFlareRedRingTemplate = //fusion bolt static const union AffineAnimCmd sSpriteAffineAnim_DrakeStrikePlayer[] = { - AFFINEANIMCMD_FRAME(0, 0, 0xb9, 1), //.hword 0,0,0x01b9 - AFFINEANIMCMD_END, //.hword 0,0x7fff,0,0,0 + AFFINEANIMCMD_FRAME(0, 0, 0xb9, 1), + AFFINEANIMCMD_END, }; static const union AffineAnimCmd sSpriteAffineAnim_DrakeStrikeOpponent[] = { - AFFINEANIMCMD_FRAME(0, 0, 0x50, 1), //.hword 0,0,0x0150,0, - AFFINEANIMCMD_END, //.hword 0x7fff,0,0,0 + AFFINEANIMCMD_FRAME(0, 0, 0x50, 1), + AFFINEANIMCMD_END, }; static const union AffineAnimCmd* const sAffineAnimCmdTable_DrakeStriking[] = //devestating drake, fusion bolt { @@ -1206,7 +1222,7 @@ const struct SpriteTemplate gFusionBoltBallTemplate = .callback = AnimFlyBallAttack }; -//// GEN 6 +// GEN 6 //mat block const struct SpriteTemplate gMatBlockGreenConversionTemplate = { @@ -1253,10 +1269,6 @@ const struct SpriteTemplate gForestsCurseIngrainTemplate = }; //petal blizzard -/* -PB_TEMPLATE_1: .hword 0x0,0xa,0xfffe,0x0 - 00 00 00 0A FE FF 00 00 -*/ static const union AnimCmd sAnimCmd_PetalBlizzard1_0[] = { ANIMCMD_FRAME(0, 10), @@ -2093,7 +2105,7 @@ const struct SpriteTemplate gHyperspaceFuryImpactTemplate = .callback = AnimHitSplatRandom }; -//// GEN 7 +// GEN 7 //first impression const struct SpriteTemplate gFirstImpressionPoundTemplate = { @@ -3557,7 +3569,7 @@ const struct SpriteTemplate gPhotonGeyserZapBallTemplate = }; -//// GEN 8 +// GEN 8 //snipe shot static const union AffineAnimCmd sSpriteAffineAnim_LargeSpikePointedLeft[] = { @@ -4096,8 +4108,2466 @@ const struct SpriteTemplate gSteelBeamSpikeShardTemplate = .callback = AnimDirtScatter }; -//// functions +// Z MOVES +//activate +const struct SpriteTemplate gZMoveSymbolSpriteTemplate = +{ + .tileTag = ANIM_TAG_Z_MOVE_SYMBOL, + .paletteTag = ANIM_TAG_Z_MOVE_SYMBOL, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_LusterPurgeCircle, + .callback = AnimSpriteOnMonPos +}; +const struct SpriteTemplate gBlueZMoveEnergySpriteTemplate = +{ + .tileTag = ANIM_TAG_FOCUS_ENERGY, + .paletteTag = ANIM_TAG_SWEAT_BEAD, + .oam = &gOamData_AffineOff_ObjNormal_16x32, + .anims = gEndureEnergyAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimEndureEnergy, +}; +const struct SpriteTemplate gGreenZMoveEnergySpriteTemplate = +{ + .tileTag = ANIM_TAG_FOCUS_ENERGY, + .paletteTag = ANIM_TAG_WHIP_HIT, + .oam = &gOamData_AffineOff_ObjNormal_16x32, + .anims = gEndureEnergyAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimEndureEnergy, +}; +const struct SpriteTemplate gYellowZMoveEnergySpriteTemplate = +{ + .tileTag = ANIM_TAG_FOCUS_ENERGY, + .paletteTag = ANIM_TAG_PAW_PRINT, + .oam = &gOamData_AffineOff_ObjNormal_16x32, + .anims = gEndureEnergyAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimEndureEnergy, +}; +// breakneck blitz +const struct SpriteTemplate gBreakneckBlitzDanceSpriteTemplate = +{ + .tileTag = ANIM_TAG_HOLLOW_ORB, + .paletteTag = ANIM_TAG_FLAT_ROCK, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimDragonDanceOrb +}; +const struct SpriteTemplate gBreakneckBlitzHitSpriteTemplate = +{ + .tileTag = ANIM_TAG_IMPACT, + .paletteTag = ANIM_TAG_FLAT_ROCK, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_HitSplat, + .callback = AnimHitSplatBasic +}; +// all out pummelling +const struct SpriteTemplate gAllOutPummelingOnslaughtSpriteTemplate = +{ + .tileTag = ANIM_TAG_HANDS_AND_FEET, + .paletteTag = ANIM_TAG_IMPACT, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gAnims_HandsAndFeet, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimJumpKick +}; +// supersonic skystrike +static const union AffineAnimCmd sSupersonicSkystrikeAffinePlayerSide[] = { + AFFINEANIMCMD_FRAME(0, 0, 0xb9, 1), + AFFINEANIMCMD_END, +}; +static const union AffineAnimCmd sSupersonicSkystrikeAffineOpponentSide[] = { + AFFINEANIMCMD_FRAME(0, 0, 0x50, 1), + AFFINEANIMCMD_END, +}; +static const union AffineAnimCmd* const sSupersonicSkystrikeAffineAnimTable[] = { + sSupersonicSkystrikeAffinePlayerSide, + sSupersonicSkystrikeAffineOpponentSide, +}; +const struct SpriteTemplate gSupersonicSkystrikeFlySpriteTemplate = +{ + .tileTag = ANIM_TAG_BIRD, + .paletteTag = ANIM_TAG_BIRD, + .oam = &gOamData_AffineNormal_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sSupersonicSkystrikeAffineAnimTable, + .callback = AnimFlyBallAttack +}; +//acid downpour +const struct SpriteTemplate gAcidDownpourReversalSpriteTemplate = +{ + .tileTag = ANIM_TAG_POISON_BUBBLE, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimReversalOrb +}; +const struct SpriteTemplate gAcidDownpourAuraSpriteTemplate = +{ + .tileTag = ANIM_TAG_POISON_BUBBLE, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimParticleInVortex +}; +//tectonic rage +const struct SpriteTemplate gTectonicRageBlastBurnSpriteTemplate = +{ + .tileTag = ANIM_TAG_FIRE_PLUME, + .paletteTag = ANIM_TAG_FIRE_PLUME, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gAnims_FirePlume, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimBlastBurnTargetPlume +}; +const struct SpriteTemplate gTectonicRageExplosionSpriteTemplate = +{ + .tileTag = ANIM_TAG_EXPLOSION_2, + .paletteTag = ANIM_TAG_EXPLOSION_2, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gExplosionAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; + +// continental crush +const struct SpriteTemplate gContinentalCrushNeedleArmSpriteTemplate = +{ + .tileTag = ANIM_TAG_ROCKS, + .paletteTag = ANIM_TAG_ROCKS, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gAnims_FlyingRock, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimNeedleArmSpike +}; +const struct SpriteTemplate gContinentalCrushBigRockStompSpriteTemplate = +{ + .tileTag = ANIM_TAG_REALLY_BIG_ROCK, + .paletteTag = ANIM_TAG_REALLY_BIG_ROCK, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sSpriteAffineAnimTable_LargeHailRock, + .callback = SpriteCB_FallingObject +}; +const struct SpriteTemplate gContinentalCrushFocusEnergySpriteTemplate = +{ + .tileTag = ANIM_TAG_FOCUS_ENERGY, + .paletteTag = ANIM_TAG_ROCKS, + .oam = &gOamData_AffineOff_ObjNormal_16x32, + .anims = gEndureEnergyAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimEndureEnergy +}; +const struct SpriteTemplate gContinentalCrushGrowingRockSpriteTemplate = +{ + .tileTag = ANIM_TAG_REALLY_BIG_ROCK, + .paletteTag = ANIM_TAG_REALLY_BIG_ROCK, + .oam = &gOamData_AffineNormal_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_GrowingElectricOrb, + .callback = AnimGrowingChargeOrb +}; +const struct SpriteTemplate gContinentalCrushEruptionSpriteTemplate = +{ + .tileTag = ANIM_TAG_ROCKS, + .paletteTag = ANIM_TAG_ROCKS, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimEruptionFallingRock +}; + +// savage spin out +const struct SpriteTemplate gSavageSpinOutStringBlastSpriteTemplate = +{ + .tileTag = ANIM_TAG_STRING, + .paletteTag = ANIM_TAG_STRING, + .oam = &gOamData_AffineOff_ObjNormal_64x32, + .anims = gAffineAnims_AirWaveCrescent, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimAirWaveCrescent +}; +const struct SpriteTemplate gSavageSpinOutCacoonSpriteTemplate = +{ + .tileTag = ANIM_TAG_COCOON, + .paletteTag = ANIM_TAG_COCOON, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_Bite, + .callback = AnimBite +}; +const struct SpriteTemplate gSavageSpinOutGreenChargeSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_RAZOR_LEAF, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_GrowingElectricOrb, + .callback = AnimGrowingChargeOrb +}; +const struct SpriteTemplate gSavageSpinOutGreenCutSpriteTemplate = +{ + .tileTag = ANIM_TAG_CUT, + .paletteTag = ANIM_TAG_RAZOR_LEAF, + .oam = &gOamData_AffineOff_ObjBlend_32x32, + .anims = gCuttingSliceAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimCuttingSlice +}; +const struct SpriteTemplate gSavageSpinOutWhiteExplosionSpriteTemplate = +{ + .tileTag = ANIM_TAG_EXPLOSION_2, + .paletteTag = ANIM_TAG_AIR_WAVE_2, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gExplosionAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; + +// never ending nightmare +const struct SpriteTemplate gNeverEndingNightmareRingAttackerSpriteTemplate = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gThinRingExpandingAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; +const struct SpriteTemplate gNeverEndingNightmareRingTargetSpriteTemplate = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineDouble_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gThinRingShrinkingAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; +const struct SpriteTemplate gNeverEndingNightmareFocusEnergySpriteTemplate = +{ + .tileTag = ANIM_TAG_FOCUS_ENERGY, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineOff_ObjNormal_16x32, + .anims = gEndureEnergyAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimEndureEnergy +}; +const struct SpriteTemplate gNeverEndingNightmareHandSpriteTemplate = +{ + .tileTag = ANIM_TAG_ASSURANCE_HAND, + .paletteTag = ANIM_TAG_ASSURANCE_HAND, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimNeedleArmSpike +}; +const struct SpriteTemplate gNeverEndingNightmareBlastBurnSpriteTemplate = +{ + .tileTag = ANIM_TAG_FIRE_PLUME, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gAnims_FirePlume, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimBlastBurnTargetPlume +}; +const struct SpriteTemplate gNeverEndingNightmareGeyserHexSpriteTemplate = +{ + .tileTag = ANIM_TAG_VERTICAL_HEX, + .paletteTag = ANIM_TAG_VERTICAL_HEX, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gRazorLeafParticleAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_GeyserTarget +}; +const struct SpriteTemplate gNeverEndingNightmareExplosionSpriteTemplate = +{ + .tileTag = ANIM_TAG_EXPLOSION_2, + .paletteTag = ANIM_TAG_VERTICAL_HEX, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gExplosionAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; + +// corkscrew crash +const struct SpriteTemplate gCorkscrewCrashMetalBitSpriteTemplate = +{ + .tileTag = ANIM_TAG_SPIKES, + .paletteTag = ANIM_TAG_SPIKES, + .oam = &gOamData_AffineNormal_ObjBlend_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_TearDrop, + .callback = AnimParticleInVortex +}; +const struct SpriteTemplate gCorkscrewCrashChargeSpriteTemplate = +{ + .tileTag = ANIM_TAG_CORKSCREW, + .paletteTag = ANIM_TAG_CORKSCREW, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_GrowingElectricOrb, + .callback = AnimGrowingChargeOrb +}; +const struct SpriteTemplate gCorkscrewCrashCorkscrewFlyUpSpriteTemplate = +{ + .tileTag = ANIM_TAG_CORKSCREW, + .paletteTag = ANIM_TAG_CORKSCREW, + .oam = &gOamData_AffineNormal_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_FlyBallUp, + .callback = AnimParticleInVortex +}; +static const union AffineAnimCmd sCorkscrewCrashFlyDownAffineOpponentSide[] = { + AFFINEANIMCMD_FRAME(0, 0, 0x80, 1), + AFFINEANIMCMD_END, +}; +static const union AffineAnimCmd* const sCorkscrewCrashFlyDownAffineAnimTable[] = { + sCorkscrewCrashFlyDownAffineOpponentSide, +}; +const struct SpriteTemplate gCorkscrewCrashCorkscrewFlyDownSpriteTemplate = +{ + .tileTag = ANIM_TAG_CORKSCREW, + .paletteTag = ANIM_TAG_CORKSCREW, + .oam = &gOamData_AffineNormal_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sCorkscrewCrashFlyDownAffineAnimTable, + .callback = AnimStompFoot +}; +static const union AffineAnimCmd sCorkscrewCrashStrikePlayerAffineAnims[] = { + AFFINEANIMCMD_FRAME(0, 0, 0xb9, 1), + AFFINEANIMCMD_END, +}; +static const union AffineAnimCmd sCorkscrewCrashStrikeTargetAffineAnims[] = { + AFFINEANIMCMD_FRAME(0, 0, 0x50, 1), + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd* const sCorkscrewCrashStrikeAffineAnimTable[] = { + sCorkscrewCrashStrikePlayerAffineAnims, + sCorkscrewCrashStrikeTargetAffineAnims, +}; +const struct SpriteTemplate gCorkscrewCrashStrikeSpriteTemplate = +{ + .tileTag = ANIM_TAG_CORKSCREW, + .paletteTag = ANIM_TAG_CORKSCREW, + .oam = &gOamData_AffineNormal_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sCorkscrewCrashStrikeAffineAnimTable, + .callback = AnimFlyBallAttack +}; +static const union AffineAnimCmd sCorkscrewCrashLeftAffineAnims[] = { + AFFINEANIMCMD_FRAME(0, 0, 0x40, 1), + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd* const sCorkscrewCrashLeftAffineAnimTable[] = { + sCorkscrewCrashLeftAffineAnims, +}; +const struct SpriteTemplate gCorkscrewCrashLeftUpSpriteTemplate = +{ + .tileTag = ANIM_TAG_CORKSCREW, + .paletteTag = ANIM_TAG_CORKSCREW, + .oam = &gOamData_AffineNormal_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sCorkscrewCrashLeftAffineAnimTable, + .callback = AnimAssistPawprint +}; +const struct SpriteTemplate gCorkscrewCrashLeftDownSpriteTemplate = +{ + .tileTag = ANIM_TAG_CORKSCREW, + .paletteTag = ANIM_TAG_CORKSCREW, + .oam = &gOamData_AffineNormal_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sCorkscrewCrashLeftAffineAnimTable, + .callback = AnimAssistPawprint +}; +static const union AffineAnimCmd sCorkscrewCrashRightUpAffineAnims[] = { + AFFINEANIMCMD_FRAME(0, 0, 0xc2, 1), + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd* const sCorkscrewCrashRightUpAffineAnimTable[] = { + sCorkscrewCrashRightUpAffineAnims, +}; +const struct SpriteTemplate gCorkscrewCrashRightUpSpriteTemplate = +{ + .tileTag = ANIM_TAG_CORKSCREW, + .paletteTag = ANIM_TAG_CORKSCREW, + .oam = &gOamData_AffineNormal_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sCorkscrewCrashRightUpAffineAnimTable, + .callback = AnimAssistPawprint +}; +static const union AffineAnimCmd sCorkscrewCrashRightDownAffineAnims[] = { + AFFINEANIMCMD_FRAME(0, 0, 0xba, 1), + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd* const sCorkscrewCrashRightDownAffineAnimTable[] = { + sCorkscrewCrashRightDownAffineAnims, +}; +const struct SpriteTemplate gCorkscrewCrashRightDownSpriteTemplate = +{ + .tileTag = ANIM_TAG_CORKSCREW, + .paletteTag = ANIM_TAG_CORKSCREW, + .oam = &gOamData_AffineNormal_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sCorkscrewCrashRightDownAffineAnimTable, + .callback = AnimAssistPawprint +}; + +// inferno overdrive +const struct SpriteTemplate gInfernoOverdriveSuperpowerSpriteTemplate = +{ + .tileTag = ANIM_TAG_METEOR, + .paletteTag = ANIM_TAG_VERTICAL_HEX, + .oam = &sGrowingSuperpowerOAM, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sSpriteAffineAnimTable_GrowingSuperpower, + .callback = SpriteCB_GrowingSuperpower +}; +const struct SpriteTemplate gInfernoOverdriveChargeSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_GrowingElectricOrb, + .callback = AnimGrowingChargeOrb +}; +const struct SpriteTemplate gInfernoOverdriveExplosionSpriteTemplate = +{ + .tileTag = ANIM_TAG_EXPLOSION_2, + .paletteTag = ANIM_TAG_EXPLOSION_2, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gExplosionAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; + +// hydro vortex +const struct SpriteTemplate gHydroVortexSuperpowerSpriteTemplate = +{ + .tileTag = ANIM_TAG_METEOR, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &sGrowingSuperpowerOAM, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sSpriteAffineAnimTable_GrowingSuperpower, + .callback = SpriteCB_GrowingSuperpower +}; +const struct SpriteTemplate gHydroVortexHurricaneSpriteTemplate = +{ + .tileTag = ANIM_TAG_GUST, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &gOamData_AffineOff_ObjNormal_32x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimEllipticalGust +}; +const struct SpriteTemplate gHydroVortexImpactSpriteTemplate = +{ + .tileTag = ANIM_TAG_IMPACT, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_HitSplat, + .callback = AnimHitSplatBasic +}; + +// bloom doom +const struct SpriteTemplate gBloomDoomPetalSpinSpriteTemplate = +{ + .tileTag = ANIM_TAG_FLOWER, + .paletteTag = ANIM_TAG_FLOWER, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gPetalDanceBigFlowerAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimFireSpiralOutward +}; +const struct SpriteTemplate gBloomDoomGreenChargeSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_RAZOR_LEAF, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_GrowingElectricOrb, + .callback = AnimGrowingChargeOrb +}; +const struct SpriteTemplate gBloomDoomHurricaneSpriteTemplate = +{ + .tileTag = ANIM_TAG_GUST, + .paletteTag = ANIM_TAG_RAZOR_LEAF, + .oam = &gOamData_AffineOff_ObjNormal_32x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimEllipticalGustAttacker, +}; +const struct SpriteTemplate gBloomDoomFlowerGeyserSpriteTemplate = +{ + .tileTag = ANIM_TAG_FLOWER, + .paletteTag = ANIM_TAG_FLOWER, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gPetalDanceBigFlowerAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_Geyser +}; +const struct SpriteTemplate gBloomDoomGreenBeamSpriteTemplate = +{ + .tileTag = ANIM_TAG_ORBS, + .paletteTag = ANIM_TAG_RAZOR_LEAF, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = gSolarBeamBigOrbAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimHyperBeamOrb +}; +const struct SpriteTemplate gBloomDoomPetalStarSpriteTemplate = +{ + .tileTag = ANIM_TAG_FLOWER, + .paletteTag = ANIM_TAG_FLOWER, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gPetalDanceBigFlowerAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimNeedleArmSpike +}; +const struct SpriteTemplate gBloomDoomExplosionSpriteTemplate = +{ + .tileTag = ANIM_TAG_EXPLOSION, + .paletteTag = ANIM_TAG_RAZOR_LEAF, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gExplosionAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; + +// gigavolt havoc +const struct SpriteTemplate gGigavoltHavocChargingSpearSpriteTemplate = +{ + .tileTag = ANIM_TAG_HAVOC_SPEAR, + .paletteTag = ANIM_TAG_HAVOC_SPEAR, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_GrowingElectricOrb, + .callback = AnimGrowingChargeOrb +}; +const struct SpriteTemplate gGigavoltHavocLaunchSpearSpriteTemplate = +{ + .tileTag = ANIM_TAG_HAVOC_SPEAR, + .paletteTag = ANIM_TAG_HAVOC_SPEAR, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSuperpowerFireball +}; +const struct SpriteTemplate gGigavoltHavocRingsSpriteTemplate = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gThinRingExpandingAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; +const struct SpriteTemplate gGigavoltHavocGeyserSpriteTemplate = +{ + .tileTag = ANIM_TAG_VERTICAL_HEX, + .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gRazorLeafParticleAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_GeyserTarget +}; + +// shattered psyche +const struct SpriteTemplate gShatteredPsycheReflectHitSpriteTemplate = +{ + .tileTag = ANIM_TAG_BLUE_LIGHT_WALL, + .paletteTag = ANIM_TAG_BLUE_LIGHT_WALL, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_HitSplat, + .callback = AnimHitSplatBasic +}; +const struct SpriteTemplate gShatteredPsychePinkChargeSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_PINK_PETAL, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_GrowingElectricOrb, + .callback = AnimGrowingChargeOrb +}; +const struct SpriteTemplate gShatteredPsycheRingSpriteTemplate = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_PINK_PETAL, + .oam = &gOamData_AffineDouble_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gThinRingShrinkingAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; + +// subzero slammer +const struct SpriteTemplate gSubzeroSlammerIceSpinSpriteTemplate = +{ + .tileTag = ANIM_TAG_ICE_CRYSTALS, + .paletteTag = ANIM_TAG_ICE_CRYSTALS, + .oam = &gOamData_AffineNormal_ObjBlend_8x16, + .anims = gAnims_IceCrystalLarge, + .images = NULL, + .affineAnims = gAffineAnims_IceCrystalHit, + .callback = AnimFireSpiralOutward +}; +const struct SpriteTemplate gSubzeroSlammerExplosionSpriteTemplate = +{ + .tileTag = ANIM_TAG_EXPLOSION_2, + .paletteTag = ANIM_TAG_EXPLOSION_2, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gExplosionAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; +const struct SpriteTemplate gSubzeroSlammerIceSwirlSpriteTemplate = +{ + .tileTag = ANIM_TAG_ICE_CRYSTALS, + .paletteTag = ANIM_TAG_ICE_CRYSTALS, + .oam = &gOamData_AffineNormal_ObjBlend_8x16, + .anims = gAnims_IceCrystalLarge, + .images = NULL, + .affineAnims = gAffineAnims_IceCrystalHit, + .callback = AnimParticleInVortex +}; + +// devastating drake +static const union AffineAnimCmd sDevastatingDrakeStrikePlayer[] = { + AFFINEANIMCMD_FRAME(0, 0, 0xb9, 1), + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd sDevastatingDrakeStrikeOpponent[] = { + AFFINEANIMCMD_FRAME(0, 0, 0x50, 1), + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd* const sDevastatingDrakeStrikeAffineAnimTable[] = { + sDevastatingDrakeStrikePlayer, + sDevastatingDrakeStrikeOpponent, +}; +static const union AffineAnimCmd sDevastatingDrakeFlyUpAffineAnims[] = { + AFFINEANIMCMD_FRAME(0, 0, 0, 1), + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd* const sDevastatingDrakeFlyUpAffineAnimTable[] = { + sDevastatingDrakeFlyUpAffineAnims, + sDevastatingDrakeFlyUpAffineAnims +}; +static const union AffineAnimCmd sDevastatingDrakeRightAffineAnims[] = { + AFFINEANIMCMD_FRAME(0, 0, 0xc2, 1), + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd* const sDevastatingDrakeRightAffineAnimTable[] = { + sDevastatingDrakeRightAffineAnims, + sDevastatingDrakeRightAffineAnims +}; +static const union AffineAnimCmd sDevastatingDrakeLeftAffineAnims[] = { + AFFINEANIMCMD_FRAME(0, 0, 0x40, 1), + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd* const sDevastatingDrakeLeftAffineAnimTable[] = { + sDevastatingDrakeLeftAffineAnims, + sDevastatingDrakeLeftAffineAnims, +}; +const struct SpriteTemplate gDevastatingDrakePurpleEnergySpriteTemplate = +{ + .tileTag = ANIM_TAG_FOCUS_ENERGY, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineOff_ObjNormal_16x32, + .anims = gEndureEnergyAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimEndureEnergy +}; +const struct SpriteTemplate gDevastatingDrakeShockwaveSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_GrowingElectricOrb, + .callback = AnimGrowingShockWaveOrb +}; +const struct SpriteTemplate gDevastatingDrakeDrakeUpSpriteTemplate = +{ + .tileTag = ANIM_TAG_PURPLE_DRAKE, + .paletteTag = ANIM_TAG_PURPLE_DRAKE, + .oam = &gOamData_AffineNormal_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sDevastatingDrakeFlyUpAffineAnimTable, + .callback = AnimParticleInVortex +}; +const struct SpriteTemplate gDevastatingDrakeRightSpriteTemplate = +{ + .tileTag = ANIM_TAG_PURPLE_DRAKE, + .paletteTag = ANIM_TAG_PURPLE_DRAKE, + .oam = &gOamData_AffineNormal_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sDevastatingDrakeRightAffineAnimTable, + .callback = AnimAssistPawprint +}; +const struct SpriteTemplate gDevastatingDrakeLeftSpriteTemplate = +{ + .tileTag = ANIM_TAG_PURPLE_DRAKE, + .paletteTag = ANIM_TAG_PURPLE_DRAKE, + .oam = &gOamData_AffineNormal_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sDevastatingDrakeLeftAffineAnimTable, + .callback = AnimAssistPawprint +}; +const struct SpriteTemplate gDevastatingDrakeStrikeSpriteTemplate = +{ + .tileTag = ANIM_TAG_PURPLE_DRAKE, + .paletteTag = ANIM_TAG_PURPLE_DRAKE, + .oam = &gOamData_AffineNormal_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sDevastatingDrakeStrikeAffineAnimTable, + .callback = AnimFlyBallAttack +}; +const struct SpriteTemplate gDevastatingDrakePurpleBlastSpriteTemplate = +{ + .tileTag = ANIM_TAG_FIRE_PLUME, + .paletteTag = ANIM_TAG_FIRE_PLUME, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gAnims_FirePlume, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimBlastBurnTargetPlume +}; +const struct SpriteTemplate gDevastatingDrakeHexSpriteTemplate = +{ + .tileTag = ANIM_TAG_VERTICAL_HEX, + .paletteTag = ANIM_TAG_VERTICAL_HEX, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gRazorLeafParticleAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_Geyser +}; +const struct SpriteTemplate gDevastatingDrakeExplosionSpriteTemplate = +{ + .tileTag = ANIM_TAG_EXPLOSION, + .paletteTag = ANIM_TAG_EXPLOSION, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gExplosionAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; +const struct SpriteTemplate gDevastatingDrakeExplosion2SpriteTemplate = +{ + .tileTag = ANIM_TAG_EXPLOSION_2, + .paletteTag = ANIM_TAG_EXPLOSION_2, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gExplosionAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; + +// black hole eclipse +const struct SpriteTemplate gBlackHoleEclipseShockwaveSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_BLACK_BALL_2, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_GrowingElectricOrb, + .callback = AnimGrowingShockWaveOrb +}; +const struct SpriteTemplate gBlackHoleEclipseBlueRingSpriteTemplate = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_ICE_CHUNK, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gThinRingExpandingAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; +const struct SpriteTemplate gBlackHoleEclipseBlackRingSpriteTemplate = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_HANDS_AND_FEET, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gThinRingExpandingAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; +const struct SpriteTemplate gBlackHoleEclipseRedExplosionSpriteTemplate = +{ + .tileTag = ANIM_TAG_EXPLOSION_2, + .paletteTag = ANIM_TAG_VERTICAL_HEX, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gExplosionAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; +const struct SpriteTemplate gBlackHoleEclipseWispSpriteTemplate = +{ + .tileTag = ANIM_TAG_WISP_ORB, + .paletteTag = ANIM_TAG_HANDS_AND_FEET, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gAnims_WillOWispOrb, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimWillOWispOrb +}; +const struct SpriteTemplate gBlackHoleEclipseRedRingSpriteTemplate = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_VERTICAL_HEX, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gThinRingExpandingAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; +const struct SpriteTemplate gBlackHoleEclipseBlueRingInwardsSpriteTemplate = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_ICE_CHUNK, + .oam = &gOamData_AffineDouble_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gThinRingShrinkingAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; +const struct SpriteTemplate gBlackHoleEclipseRedRingInwardsSpriteTemplate = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_VERTICAL_HEX, + .oam = &gOamData_AffineDouble_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gThinRingShrinkingAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; +static const union AffineAnimCmd gGrowingBackHoleTargetAffineCmds[] = { + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0, 0, -10, 0x88), + AFFINEANIMCMD_END, +}; +static const union AffineAnimCmd *const gGrowingBlackHoleTargetAffineAnimTable[] = { + gGrowingBackHoleTargetAffineCmds, +}; +const struct SpriteTemplate gBlackHoleEclipseHoleSpriteTemplate = +{ + .tileTag = ANIM_TAG_SHADOW_BALL, + .paletteTag = ANIM_TAG_VERTICAL_HEX, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gGrowingBlackHoleTargetAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; +static const union AffineAnimCmd gShrinkingBlackHoleAffineCmds[] = { + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(-0x10, -0x10, 0xf6, 8), + AFFINEANIMCMD_END_ALT(1), +}; +static const union AffineAnimCmd *const gShrinkingBlackHoleAffineAnimTable[] = { + gShrinkingBlackHoleAffineCmds, +}; +const struct SpriteTemplate gBlackHoleEclipseHoleShrinkSpriteTemplate = +{ + .tileTag = ANIM_TAG_SHADOW_BALL, + .paletteTag = ANIM_TAG_VERTICAL_HEX, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gShrinkingBlackHoleAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; +static const union AffineAnimCmd gGrowingBackHoleAffineCmds[] = { + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0, 0, -10, 0x48), + AFFINEANIMCMD_END, +}; +static const union AffineAnimCmd *const gGrowingBlackHoleAffineAnimTable[] = { + gGrowingBackHoleAffineCmds, +}; +const struct SpriteTemplate gBlackHoleEclipseHoleUserSpriteTemplate = +{ + .tileTag = ANIM_TAG_SHADOW_BALL, + .paletteTag = ANIM_TAG_HANDS_AND_FEET, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gGrowingBlackHoleAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; +const struct SpriteTemplate gTargetTwinkleSpriteTemplate = +{ + .tileTag = ANIM_TAG_SPARKLE_4, + .paletteTag = ANIM_TAG_SPARKLE_4, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = sAnims_SpinningSparkle, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_TwinkleOnBattler +}; + +// twinkle tackle +static const union AffineAnimCmd sTwinkleTackleStarPlayerAffineAnims[] = { + AFFINEANIMCMD_FRAME(8, 8, 0, 0), + AFFINEANIMCMD_FRAME(0x10, 0x10, 0x0, 0x1e), + AFFINEANIMCMD_END_ALT(1), +}; +static const union AffineAnimCmd sTwinkleTackleStarOpponentAffineAnims[] = { + AFFINEANIMCMD_FRAME(8, 8, 0, 0), + AFFINEANIMCMD_FRAME(0x20, 0x20, 0, 0xf), + AFFINEANIMCMD_END_ALT(1), +}; +static const union AffineAnimCmd *const sTwinkleTackleStarAffineAnimTable[] = { + sTwinkleTackleStarPlayerAffineAnims, + sTwinkleTackleStarOpponentAffineAnims +}; +const struct SpriteTemplate gTwinkleTacklePinkStarSpriteTemplate = +{ + .tileTag = ANIM_TAG_SPARKLE_2, + .paletteTag = ANIM_TAG_PINK_PETAL, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gGrantingStarsAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimGrantingStars +}; +const struct SpriteTemplate gTwinkleTacklePinkRingSpriteTemplate = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_PINK_PETAL, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gThinRingExpandingAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; +const struct SpriteTemplate gTwinkleTackleStarGrowSpriteTemplate = +{ + .tileTag = ANIM_TAG_YELLOW_STAR, + .paletteTag = ANIM_TAG_YELLOW_STAR, + .oam = &gOamData_AffineDouble_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sTwinkleTackleStarAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; +const struct SpriteTemplate gTwinkleTackleTwinkleSpriteTemplate = +{ + .tileTag = ANIM_TAG_SPARKLE_4, + .paletteTag = ANIM_TAG_SPARKLE_4, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = sAnims_SpinningSparkle, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_TwinkleOnBattler +}; +const struct SpriteTemplate gTwinkleTackleDigStarSpriteTemplate = +{ + .tileTag = ANIM_TAG_YELLOW_STAR, + .paletteTag = ANIM_TAG_YELLOW_STAR, + .oam = &gOamData_AffineDouble_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimDirtPlumeParticle +}; +const struct SpriteTemplate gTwinkleTackleYellowImpactSpriteTemplate = +{ + .tileTag = ANIM_TAG_IMPACT, + .paletteTag = ANIM_TAG_YELLOW_STAR, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_HitSplat, + .callback = AnimHitSplatBasic +}; +const struct SpriteTemplate gTwinkleTackleImpactStarsSpriteTemplate = +{ + .tileTag = ANIM_TAG_PAIN_SPLIT, + .paletteTag = ANIM_TAG_YELLOW_STAR, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimDizzyPunchDuck +}; + +// catastrokpika +const struct SpriteTemplate gCatastrokpikaSuperpowerSpriteTemplate = +{ + .tileTag = ANIM_TAG_METEOR, + .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .oam = &sGrowingSuperpowerOAM, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sSpriteAffineAnimTable_GrowingSuperpower, + .callback = SpriteCB_GrowingSuperpower +}; + +// 10e6 volt thunderbolt +const struct SpriteTemplate g10MillionVoltBoltYellowFlySpriteTemplate = +{ + .tileTag = ANIM_TAG_ROUND_SHADOW, + .paletteTag = ANIM_TAG_SPARK_2, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_FlyBallUp, + .callback = AnimFlyBallUp +}; +const struct SpriteTemplate g10MillionVoltBoltShockwaveSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_GrowingElectricOrb, + .callback = AnimGrowingShockWaveOrbOnTarget, +}; +const struct SpriteTemplate g10MillionVoltBoltRedBeamSpriteTemplate = +{ + .tileTag = ANIM_TAG_ORBS, + .paletteTag = ANIM_TAG_VERTICAL_HEX, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = gSolarBeamBigOrbAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimHyperBeamOrb +}; +const struct SpriteTemplate g10MillionVoltBoltBlueBeamSpriteTemplate = +{ + .tileTag = ANIM_TAG_ORBS, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = gSolarBeamBigOrbAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimHyperBeamOrb +}; +const struct SpriteTemplate g10MillionVoltBoltPinkBeamSpriteTemplate = +{ + .tileTag = ANIM_TAG_ORBS, + .paletteTag = ANIM_TAG_BERRY_EATEN, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = gSolarBeamBigOrbAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimHyperBeamOrb +}; +const struct SpriteTemplate g10MillionVoltBoltYellowBeamSpriteTemplate = +{ + .tileTag = ANIM_TAG_ORBS, + .paletteTag = ANIM_TAG_ELECTRIC_ORBS, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = gSolarBeamBigOrbAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimHyperBeamOrb +}; +const struct SpriteTemplate g10MillionVoltBoltGreenBeamSpriteTemplate = +{ + .tileTag = ANIM_TAG_ORBS, + .paletteTag = ANIM_TAG_LEAF, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = gSolarBeamBigOrbAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimHyperBeamOrb +}; +const struct SpriteTemplate g10MillionVoltBoltPurpleBeamSpriteTemplate = +{ + .tileTag = ANIM_TAG_ORBS, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = gSolarBeamBigOrbAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimHyperBeamOrb +}; + +// stoked sparksurfer +const struct SpriteTemplate gStokedSparksurferFlySpriteTemplate = +{ + .tileTag = ANIM_TAG_ROUND_SHADOW, + .paletteTag = ANIM_TAG_SPARK_2, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_FlyBallUp, + .callback = AnimFlyBallUp +}; + +// extreme evoboost +const struct SpriteTemplate gExtremeEvoboostRedChargeUpSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_VERTICAL_HEX, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimParticleInVortex +}; +const struct SpriteTemplate gExtremeEvoboostPinkChargeUpSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_BERRY_EATEN, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimParticleInVortex +}; +const struct SpriteTemplate gExtremeEvoboostIceChargeUpSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_ICE_CHUNK, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimParticleInVortex +}; +const struct SpriteTemplate gExtremeEvoboostBlackChargeUpSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_WISP_ORB, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimParticleInVortex +}; +const struct SpriteTemplate gExtremeEvoboostBlueChargeUpSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimParticleInVortex +}; +const struct SpriteTemplate gExtremeEvoboostPurpleChargeUpSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimParticleInVortex +}; +const struct SpriteTemplate gExtremeEvoboostYellowChargeUpSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimParticleInVortex +}; +const struct SpriteTemplate gExtremeEvoboostGreenChargeUpSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_LEAF, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimParticleInVortex +}; +const struct SpriteTemplate gExtremeEvoboostRedChargeCircleSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_VERTICAL_HEX, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimExtremeEvoboostCircle +}; +const struct SpriteTemplate gExtremeEvoboostPinkChargeCircleSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_BERRY_EATEN, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimExtremeEvoboostCircle +}; +const struct SpriteTemplate gExtremeEvoboostIceChargeCircleSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_ICE_CHUNK, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimExtremeEvoboostCircle +}; +const struct SpriteTemplate gExtremeEvoboostBlackChargeCircleSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_WISP_ORB, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimExtremeEvoboostCircle +}; +const struct SpriteTemplate gExtremeEvoboostBlueChargeCircleSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimExtremeEvoboostCircle +}; +const struct SpriteTemplate gExtremeEvoboostPurpleChargeCircleSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimExtremeEvoboostCircle +}; +const struct SpriteTemplate gExtremeEvoboostYellowChargeCircleSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimExtremeEvoboostCircle +}; +const struct SpriteTemplate gExtremeEvoboostGreenChargeCircleSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_LEAF, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimExtremeEvoboostCircle +}; +const struct SpriteTemplate gExtremeEvoboostRedStockpileSpriteTemplate = +{ + .tileTag = ANIM_TAG_WATER_ORB, + .paletteTag = ANIM_TAG_VERTICAL_HEX, + .oam = &gOamData_AffineNormal_ObjBlend_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gStockpileAbsorptionOrbAffineAnimTable, + .callback = AnimPowerAbsorptionOrb +}; +const struct SpriteTemplate gExtremeEvoboostPinkStockpileSpriteTemplate = +{ + .tileTag = ANIM_TAG_WATER_ORB, + .paletteTag = ANIM_TAG_BERRY_EATEN, + .oam = &gOamData_AffineNormal_ObjBlend_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gStockpileAbsorptionOrbAffineAnimTable, + .callback = AnimPowerAbsorptionOrb +}; +const struct SpriteTemplate gExtremeEvoboostIceStockpileSpriteTemplate = +{ + .tileTag = ANIM_TAG_WATER_ORB, + .paletteTag = ANIM_TAG_ICE_CHUNK, + .oam = &gOamData_AffineNormal_ObjBlend_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gStockpileAbsorptionOrbAffineAnimTable, + .callback = AnimPowerAbsorptionOrb +}; +const struct SpriteTemplate gExtremeEvoboostBlackStockpileSpriteTemplate = +{ + .tileTag = ANIM_TAG_WATER_ORB, + .paletteTag = ANIM_TAG_WISP_ORB, + .oam = &gOamData_AffineNormal_ObjBlend_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gStockpileAbsorptionOrbAffineAnimTable, + .callback = AnimPowerAbsorptionOrb +}; +const struct SpriteTemplate gExtremeEvoboostBlueStockpileSpriteTemplate = +{ + .tileTag = ANIM_TAG_WATER_ORB, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &gOamData_AffineNormal_ObjBlend_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gStockpileAbsorptionOrbAffineAnimTable, + .callback = AnimPowerAbsorptionOrb +}; +const struct SpriteTemplate gExtremeEvoboostPurpleStockpileSpriteTemplate = +{ + .tileTag = ANIM_TAG_WATER_ORB, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineNormal_ObjBlend_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gStockpileAbsorptionOrbAffineAnimTable, + .callback = AnimPowerAbsorptionOrb +}; +const struct SpriteTemplate gExtremeEvoboostYellowStockpileSpriteTemplate = +{ + .tileTag = ANIM_TAG_WATER_ORB, + .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .oam = &gOamData_AffineNormal_ObjBlend_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gStockpileAbsorptionOrbAffineAnimTable, + .callback = AnimPowerAbsorptionOrb +}; +const struct SpriteTemplate gExtremeEvoboostGreenStockpileSpriteTemplate = +{ + .tileTag = ANIM_TAG_WATER_ORB, + .paletteTag = ANIM_TAG_LEAF, + .oam = &gOamData_AffineNormal_ObjBlend_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gStockpileAbsorptionOrbAffineAnimTable, + .callback = AnimPowerAbsorptionOrb +}; + +// pulverizing pancake +const struct SpriteTemplate gPulverizingPancakeRedDetectSpriteTemplate = +{ + .tileTag = ANIM_TAG_SPARKLE_4, + .paletteTag = ANIM_TAG_VERTICAL_HEX, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = sAnims_SpinningSparkle, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpinningSparkle +}; +const struct SpriteTemplate gPulverizingPancakeExplosionSpriteTemplate = +{ + .tileTag = ANIM_TAG_EXPLOSION, + .paletteTag = ANIM_TAG_ELECTRIC_ORBS, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gExplosionAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; +const struct SpriteTemplate gPulverizingPancakeYellowRingSpriteTemplate = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_ELECTRIC_ORBS, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gThinRingExpandingAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; + +// genesis supernova +const struct SpriteTemplate gGenesisSupernovaOrbRiseSpriteTemplate = +{ + .tileTag = ANIM_TAG_POISON_BUBBLE, + .paletteTag = ANIM_TAG_POISON_JAB, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gAnims_PoisonProjectile, + .images = NULL, + .affineAnims = gAffineAnims_Bubble, + .callback = AnimAssistPawprint +}; +const struct SpriteTemplate gGenesisSupernovaReversalSpriteTemplate = +{ + .tileTag = ANIM_TAG_POISON_BUBBLE, + .paletteTag = ANIM_TAG_POISON_JAB, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimReversalOrb +}; +const struct SpriteTemplate gGenesisSupernovaSpinUpSpriteTemplate = +{ + .tileTag = ANIM_TAG_POISON_BUBBLE, + .paletteTag = ANIM_TAG_POISON_JAB, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimParticleInVortex +}; +const struct SpriteTemplate gGenesisSupernovaChargeSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_POISON_JAB, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_GrowingElectricOrb, + .callback = AnimGrowingChargeOrb +}; +const struct SpriteTemplate gGenesisSupernovaSuperpowerSpriteTemplate = +{ + .tileTag = ANIM_TAG_METEOR, + .paletteTag = ANIM_TAG_WISP_ORB, + .oam = &sGrowingSuperpowerOAM, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sSpriteAffineAnimTable_GrowingSuperpower, + .callback = SpriteCB_GrowingSuperpower +}; +const struct SpriteTemplate gGenesisSupernovaBubbleSpriteTemplate = +{ + .tileTag = ANIM_TAG_POISON_BUBBLE, + .paletteTag = ANIM_TAG_POISON_JAB, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gAnims_PoisonProjectile, + .images = NULL, + .affineAnims = gAffineAnims_Bubble, + .callback = AnimBubbleEffect +}; +const struct SpriteTemplate gGenesisSupernovaExplosionSpriteTemplate = +{ + .tileTag = ANIM_TAG_EXPLOSION, + .paletteTag = ANIM_TAG_WISP_ORB, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gExplosionAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; + +// sinister arrow raid +static const union AffineAnimCmd sArrowRaidFlyStrikePlayerAffineAnims[] = { + AFFINEANIMCMD_FRAME(0, 0, 0xb9, 1), + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd sArrowRaidFlyStrikeOpponentAffineAnims[] = { + AFFINEANIMCMD_FRAME(0, 0, 0x50, 1), + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd *const sArrowRaidFlyStrikeAffineAnimTable[] = { + sArrowRaidFlyStrikePlayerAffineAnims, + sArrowRaidFlyStrikeOpponentAffineAnims +}; +static const union AffineAnimCmd sArrowRaidFlyRightAffineAnims[] = { + AFFINEANIMCMD_FRAME(0, 0, 0xc2, 1), + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd *const sArrowRaidFlyRightAffineAnimTable[] = { + sArrowRaidFlyRightAffineAnims, + sArrowRaidFlyRightAffineAnims +}; +static const union AffineAnimCmd sArrowRaidFlyLeftAffineAnims[] = { + AFFINEANIMCMD_FRAME(0, 0, 0x40, 1), + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd *const sArrowRaidFlyLeftAffineAnimTable[] = { + sArrowRaidFlyLeftAffineAnims, + sArrowRaidFlyLeftAffineAnims +}; +const struct SpriteTemplate gArrowRaidExplosionSpriteTemplate = +{ + .tileTag = ANIM_TAG_EXPLOSION_2, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gExplosionAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; +const struct SpriteTemplate gArrowRaidFlyUpSpriteTemplate = +{ + .tileTag = ANIM_TAG_ROUND_SHADOW, + .paletteTag = ANIM_TAG_LEAF, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_FlyBallUp, + .callback = AnimFlyBallUp +}; +const struct SpriteTemplate gArrowRaidFlyRightSpriteTemplate = +{ + .tileTag = ANIM_TAG_BIRD, + .paletteTag = ANIM_TAG_LEAF, + .oam = &gOamData_AffineNormal_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sArrowRaidFlyRightAffineAnimTable, + .callback = AnimAssistPawprint +}; +const struct SpriteTemplate gArrowRaidFlyLeftSpriteTemplate = +{ + .tileTag = ANIM_TAG_BIRD, + .paletteTag = ANIM_TAG_LEAF, + .oam = &gOamData_AffineNormal_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sArrowRaidFlyLeftAffineAnimTable, + .callback = AnimAssistPawprint +}; +const struct SpriteTemplate gArrowRaidFlyStrikeSpriteTemplate = +{ + .tileTag = ANIM_TAG_BIRD, + .paletteTag = ANIM_TAG_LEAF, + .oam = &gOamData_AffineNormal_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sArrowRaidFlyStrikeAffineAnimTable, + .callback = AnimFlyBallAttack +}; +static const union AffineAnimCmd sArrowRaidArrowUpAffineAnims[] = { + AFFINEANIMCMD_FRAME(0, 0, 0xa0, 1), + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd *const sArrowRaidArrowUpAffineAnimTable[] = { + sArrowRaidArrowUpAffineAnims, +}; +const struct SpriteTemplate gArrowRaidArrowUpSpriteTemplate = +{ + .tileTag = ANIM_TAG_SPIRIT_ARROW, + .paletteTag = ANIM_TAG_SPIRIT_ARROW, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sArrowRaidArrowUpAffineAnimTable, + .callback = AnimParticleInVortex +}; +static const union AffineAnimCmd sArrowRaidArrowRightUpAffineAnims[] = { + AFFINEANIMCMD_FRAME(0, 0, 0x75, 1), + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd *const sArrowRaidArrowRightUpAffineAnimTable[] = { + sArrowRaidArrowRightUpAffineAnims, +}; +const struct SpriteTemplate gArrowRaidRightUpSpriteTemplate = +{ + .tileTag = ANIM_TAG_SPIRIT_ARROW, + .paletteTag = ANIM_TAG_SPIRIT_ARROW, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sArrowRaidArrowRightUpAffineAnimTable, + .callback = AnimAssistPawprint +}; +static const union AffineAnimCmd sArrowRaidRightDownAffineAnims[] = { + AFFINEANIMCMD_FRAME(0, 0, 0x60, 1), + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd *const sArrowRaidRightDownAffineAnimTable[] = { + sArrowRaidRightDownAffineAnims, +}; +const struct SpriteTemplate gArrowRaidRightDownSpriteTemplate = +{ + .tileTag = ANIM_TAG_SPIRIT_ARROW, + .paletteTag = ANIM_TAG_SPIRIT_ARROW, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sArrowRaidRightDownAffineAnimTable, + .callback = AnimAssistPawprint +}; +static const union AffineAnimCmd sArrowRaidArrowLeftUpAffineAnims[] = { + AFFINEANIMCMD_FRAME(0, 0, 0xe0, 1), + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd *const sArrowRaidLeftUpAffineAnimTable[] = { + sArrowRaidArrowLeftUpAffineAnims, +}; +const struct SpriteTemplate gArrowRaidLeftUpSpriteTemplate = +{ + .tileTag = ANIM_TAG_SPIRIT_ARROW, + .paletteTag = ANIM_TAG_SPIRIT_ARROW, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sArrowRaidLeftUpAffineAnimTable, + .callback = AnimAssistPawprint +}; +static const union AffineAnimCmd sArrowRaidFaceUpLeftAffineAnims[] = { + AFFINEANIMCMD_FRAME(0, 0, 0xe0, 1), + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd *const sArrowRaidFaceUpLeftAffineAnimTable[] = { + sArrowRaidFaceUpLeftAffineAnims, +}; +const struct SpriteTemplate gArrowRaidFaceUpLeftSpriteTemplate = +{ + .tileTag = ANIM_TAG_SPIRIT_ARROW, + .paletteTag = ANIM_TAG_SPIRIT_ARROW, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sArrowRaidFaceUpLeftAffineAnimTable, + .callback = AnimAssistPawprint +}; +static const union AffineAnimCmd sArrowRaidArrowFaceRightAffineAnims[] = { + AFFINEANIMCMD_FRAME(0, 0, 0x60, 1), + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd *const sArrowRaidArrowFaceRightAffineAnimTable[] = { + sArrowRaidArrowFaceRightAffineAnims +}; +const struct SpriteTemplate gArrowRaidRightSpriteTemplate = +{ + .tileTag = ANIM_TAG_SPIRIT_ARROW, + .paletteTag = ANIM_TAG_SPIRIT_ARROW, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sArrowRaidArrowFaceRightAffineAnimTable, + .callback = AnimAssistPawprint +}; +static const union AffineAnimCmd sArrowRaidLeftDownAffineAnims[] = { + AFFINEANIMCMD_FRAME(0, 0, 0xd0, 1), + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd *const sArrowRaidLeftDownAffineAnimTable[] = { + sArrowRaidLeftDownAffineAnims +}; +const struct SpriteTemplate gArrowRaidLeftDownSpriteTemplate = +{ + .tileTag = ANIM_TAG_SPIRIT_ARROW, + .paletteTag = ANIM_TAG_SPIRIT_ARROW, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sArrowRaidLeftDownAffineAnimTable, + .callback = AnimAssistPawprint +}; +static const union AffineAnimCmd sArrowRaidOnslaughtAffineAnims[] = { + AFFINEANIMCMD_FRAME(0, 0, 0x30, 1), + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd *const sArrowRaidOnslaughtAffineAnimTable[] = { + sArrowRaidOnslaughtAffineAnims +}; +const struct SpriteTemplate gArrowRaidArrowOnslaughtSpriteTemplate = +{ + .tileTag = ANIM_TAG_SPIRIT_ARROW, + .paletteTag = ANIM_TAG_SPIRIT_ARROW, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sArrowRaidOnslaughtAffineAnimTable, + .callback = AnimAssistPawprint +}; + +// malicious moonsault +const struct SpriteTemplate gMaliciousMoonsaultRedFlySpriteTemplate = +{ + .tileTag = ANIM_TAG_ROUND_SHADOW, + .paletteTag = ANIM_TAG_VERTICAL_HEX, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_FlyBallUp, + .callback = AnimFlyBallUp +}; +const struct SpriteTemplate gMaliciousMoonsaultRedBounceSpriteTemplate = +{ + .tileTag = ANIM_TAG_ROUND_SHADOW, + .paletteTag = ANIM_TAG_VERTICAL_HEX, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_BounceBallLand, + .callback = AnimBounceBallLand +}; +const struct SpriteTemplate gMaliciousMoonsaultRedImpactSpriteTemplate = +{ + .tileTag = ANIM_TAG_IMPACT, + .paletteTag = ANIM_TAG_VERTICAL_HEX, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_HitSplat, + .callback = AnimHitSplatBasic +}; +const struct SpriteTemplate gMaliciousMoonsaultFireblastSpriteTemplate = +{ + .tileTag = ANIM_TAG_SMALL_EMBER, + .paletteTag = ANIM_TAG_VERTICAL_HEX, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gAnims_FireBlastCross, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimFireCross +}; +const struct SpriteTemplate gMaliciousMoonsaultExplosionSpriteTemplate = +{ + .tileTag = ANIM_TAG_EXPLOSION_2, + .paletteTag = ANIM_TAG_EXPLOSION_2, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gExplosionAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; + +// oceanic operetta +const struct SpriteTemplate gOceanOperaSpotlightSpriteTemplate = +{ + .tileTag = ANIM_TAG_SPOTLIGHT, + .paletteTag = ANIM_TAG_SPOTLIGHT, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpotlightAffineAnimTable, + .callback = AnimOceanicOperettaSpotlight, +}; +const struct SpriteTemplate gOceanOperaBlueFlareSpriteTemplate = +{ + .tileTag = ANIM_TAG_FOCUS_ENERGY, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &gOamData_AffineOff_ObjNormal_16x32, + .anims = gEndureEnergyAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimEndureEnergy +}; +const struct SpriteTemplate gOceanOperaBlueChargeSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_GrowingElectricOrb, + .callback = AnimGrowingChargeOrb +}; +const struct SpriteTemplate gOceanOperaBlueRingSpriteTemplate = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &gOamData_AffineDouble_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gThinRingShrinkingAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; +const struct SpriteTemplate gOceanOperaMovingOrbsSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimThrowMistBall +}; +const struct SpriteTemplate gOceanOperaBlueOrbsSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimBite +}; +const struct SpriteTemplate gOceanOperaExpandingRingSpriteTemplate = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gThinRingExpandingAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; +const struct SpriteTemplate gOceanOperaExplosionSpriteTemplate = +{ + .tileTag = ANIM_TAG_EXPLOSION, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gExplosionAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; +const struct SpriteTemplate gOceanOperaSparkleSpriteTemplate = +{ + .tileTag = ANIM_TAG_SPARKLE_2, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gGrantingStarsAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimGrantingStars +}; + +// splintered stormshards +const struct SpriteTemplate gSplinteredShardsFlySpriteTemplate = +{ + .tileTag = ANIM_TAG_ROUND_SHADOW, + .paletteTag = ANIM_TAG_ROCKS, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_FlyBallUp, + .callback = AnimFlyBallUp +}; +const struct SpriteTemplate gSplinteredShardsExplosionSpriteTemplate = +{ + .tileTag = ANIM_TAG_EXPLOSION, + .paletteTag = ANIM_TAG_ROCKS, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gExplosionAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; +const struct SpriteTemplate gSplinteredShardsRisingSpearSpriteTemplate = +{ + .tileTag = ANIM_TAG_ICICLE_SPEAR, + .paletteTag = ANIM_TAG_ROCKS, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimAssistPawprint +}; +static const union AffineAnimCmd sSplinteredShardsOpponentSteepAffineAnims[] = { + AFFINEANIMCMD_FRAME(0, 0, 0xca, 1), + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd *const sSplinteredShardsOpponentSteepAffineAnimTable[] = { + sSplinteredShardsOpponentSteepAffineAnims, +}; +const struct SpriteTemplate gSplinteredShardsSplinterOpponentSteepSpriteTemplate = +{ + .tileTag = ANIM_TAG_ICICLE_SPEAR, + .paletteTag = ANIM_TAG_ROCKS, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sSplinteredShardsOpponentSteepAffineAnimTable, + .callback = AnimJumpKick +}; +static const union AffineAnimCmd sSplinteredShardsOpponentShallowAffineAnims[] = { + AFFINEANIMCMD_FRAME(0, 0, 0xb9, 1), + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd *const sSplinteredShardsOpponentShallowAffineAnimTable[] = { + sSplinteredShardsOpponentShallowAffineAnims +}; +const struct SpriteTemplate gSplinteredShardsSplinterOpponentShallowSpriteTemplate = +{ + .tileTag = ANIM_TAG_ICICLE_SPEAR, + .paletteTag = ANIM_TAG_ROCKS, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sSplinteredShardsOpponentShallowAffineAnimTable, + .callback = AnimJumpKick +}; +static const union AffineAnimCmd sSplinteredShardsPlayerSteepAffineAnims[] = { + AFFINEANIMCMD_FRAME(0, 0, 0x60, 1), + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd *const sSplinteredShardsPlayerSteepAffineAnimTable[] = { + sSplinteredShardsPlayerSteepAffineAnims +}; +const struct SpriteTemplate gSplinteredShardsSplinterPlayerSteepSpriteTemplate = +{ + .tileTag = ANIM_TAG_ICICLE_SPEAR, + .paletteTag = ANIM_TAG_ROCKS, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sSplinteredShardsPlayerSteepAffineAnimTable, + .callback = AnimJumpKick +}; +static const union AffineAnimCmd sSplinteredShardsPlayerShallowAffineAnims[] = { + AFFINEANIMCMD_FRAME(0, 0, 0x50, 1), + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd *const sSplinteredShardsPlayerShallowAffineAnimTable[] = { + sSplinteredShardsPlayerShallowAffineAnims +}; +const struct SpriteTemplate gSplinteredShardsSplinterPlayerShallowSpriteTemplate = +{ + .tileTag = ANIM_TAG_ICICLE_SPEAR, + .paletteTag = ANIM_TAG_ROCKS, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sSplinteredShardsPlayerShallowAffineAnimTable, + .callback = AnimJumpKick +}; + +// lets snuggle forever +const struct SpriteTemplate gSnuggleForeverEyesSpriteTemplate = +{ + .tileTag = ANIM_TAG_SPARKLE_4, + .paletteTag = ANIM_TAG_VERTICAL_HEX, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = sAnims_SpinningSparkle, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpinningSparkle +}; +const struct SpriteTemplate gSnuggleForeverStarSpriteTemplate = +{ + .tileTag = ANIM_TAG_PAIN_SPLIT, + .paletteTag = ANIM_TAG_DUCK, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimDizzyPunchDuck +}; +const struct SpriteTemplate gSnuggleForeverHeartSpriteTemplate = +{ + .tileTag = ANIM_TAG_MAGENTA_HEART, + .paletteTag = ANIM_TAG_VERTICAL_HEX, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimMagentaHeart +}; + +// clangorous soulblaze +const struct SpriteTemplate gClangoorousSoulblazeWhiteFlySpriteTemplate = +{ + .tileTag = ANIM_TAG_ROUND_SHADOW, + .paletteTag = ANIM_TAG_AIR_WAVE_2, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_FlyBallUp, + .callback = AnimFlyBallUp +}; +const struct SpriteTemplate gClangoorousSoulblazePurpleSwirlSpriteTemplate = +{ + .tileTag = ANIM_TAG_WATER_ORB, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineNormal_ObjBlend_16x16, + .anims = gAnims_WaterMudOrb, + .images = NULL, + .affineAnims = gAffineAnims_Whirlpool, + .callback = AnimParticleInVortex +}; +const struct SpriteTemplate gClangoorousSoulblazePurpleChargeSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_GrowingElectricOrb, + .callback = AnimGrowingChargeOrb +}; +const struct SpriteTemplate gClangoorousSoulblazePulseSpriteTemplate = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineOff_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = TranslateAnimSpriteToTargetMonLocation +}; + +// guardian of alola +const struct SpriteTemplate gGuardianOfAlolaFistSpriteTemplate = +{ + .tileTag = ANIM_TAG_HORSESHOE_SIDE_FIST, + .paletteTag = ANIM_TAG_HORSESHOE_SIDE_FIST, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimStompFoot +}; +const struct SpriteTemplate gGuardianOfAlolaDirtGeyserSpriteTemplate = +{ + .tileTag = ANIM_TAG_MUD_SAND, + .paletteTag = ANIM_TAG_MUD_SAND, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimMudSportDirt +}; + +// seering sunraze smash +static const union AffineAnimCmd sSearingSunrazeSmashWormholeGrowingAffineAnims[] = { + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0, 0, 0xf8, 0x88), + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd *const sSearingSunrazeSmashWormholeGrowingAffineAnimTable[] = { + sSearingSunrazeSmashWormholeGrowingAffineAnims +}; +const struct SpriteTemplate gSearingSunrazeSmashGrowWormholeSpriteTemplate = +{ + .tileTag = ANIM_TAG_SHADOW_BALL, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sSearingSunrazeSmashWormholeGrowingAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; +const struct SpriteTemplate gSearingSunrazeSmashBlueRingInwardsSpriteTemplate = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &gOamData_AffineDouble_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gThinRingShrinkingAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; +const struct SpriteTemplate gSearingSunrazeSmashWhiteRingInwardsSpriteTemplate = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_AIR_WAVE_2, + .oam = &gOamData_AffineDouble_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gThinRingShrinkingAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; +const struct SpriteTemplate gSearingSunrazeSmashCrossImpactSpriteTemplate = +{ + .tileTag = ANIM_TAG_CROSS_IMPACT, + .paletteTag = ANIM_TAG_AIR_WAVE_2, + .oam = &gOamData_AffineOff_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimCrossImpact +}; +const struct SpriteTemplate gSearingSunrazeSmashWhiteCutSpriteTemplate = +{ + .tileTag = ANIM_TAG_CUT, + .paletteTag = ANIM_TAG_AIR_WAVE_2, + .oam = &gOamData_AffineOff_ObjBlend_32x32, + .anims = gCuttingSliceAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimCuttingSlice +}; +const struct SpriteTemplate gSearingSunrazeSmashInfernoOrbSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_VERTICAL_HEX, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_GrowingElectricOrb, + .callback = AnimGrowingChargeOrb +}; +const struct SpriteTemplate gSearingSunrazeSmashShockwaveSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_VERTICAL_HEX, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_GrowingElectricOrb, + .callback = AnimGrowingShockWaveOrbOnTarget +}; +const struct SpriteTemplate gSearingSunrazeSmashRedFlySpriteTemplate = +{ + .tileTag = ANIM_TAG_ROUND_SHADOW, + .paletteTag = ANIM_TAG_VERTICAL_HEX, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_FlyBallUp, + .callback = AnimFlyBallUp +}; + +// menacing moonraze maelstrom +const struct SpriteTemplate gMoonrazeMaelstromBlueBuffSpriteTemplate = +{ + .tileTag = ANIM_TAG_FOCUS_ENERGY, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &gOamData_AffineOff_ObjNormal_16x32, + .anims = gEndureEnergyAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimEndureEnergy +}; +const struct SpriteTemplate gMoonrazeMaelstromBlackBuffSpriteTemplate = +{ + .tileTag = ANIM_TAG_FOCUS_ENERGY, + .paletteTag = ANIM_TAG_HANDS_AND_FEET, + .oam = &gOamData_AffineOff_ObjNormal_16x32, + .anims = gEndureEnergyAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimEndureEnergy +}; +const struct SpriteTemplate gMoonrazeMaelstromPurpleBuffSpriteTemplate = +{ + .tileTag = ANIM_TAG_FOCUS_ENERGY, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineOff_ObjNormal_16x32, + .anims = gEndureEnergyAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimEndureEnergy +}; +const struct SpriteTemplate gMoonrazeMaelstromBlackSparklesSpriteTemplate = +{ + .tileTag = ANIM_TAG_SPARKLE_2, + .paletteTag = ANIM_TAG_HANDS_AND_FEET, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gGrantingStarsAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimGrantingStars +}; +const struct SpriteTemplate gMoonrazeMaelstromBlueRingSpriteTemplate = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &gOamData_AffineDouble_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gThinRingShrinkingAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; +const struct SpriteTemplate gMoonrazeMaelstromWhiteRingSpriteTemplate = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_AIR_WAVE_2, + .oam = &gOamData_AffineDouble_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gThinRingShrinkingAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; +const struct SpriteTemplate gMoonrazeMaelstromSuperpowerSpriteTemplate = +{ + .tileTag = ANIM_TAG_METEOR, + .paletteTag = ANIM_TAG_HANDS_AND_FEET, + .oam = &gOamData_AffineOff_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSuperpowerFireball +}; +const struct SpriteTemplate gMoonrazeMaelstromBlackOrbsSpriteTemplate = +{ + .tileTag = ANIM_TAG_POISON_BUBBLE, + .paletteTag = ANIM_TAG_HANDS_AND_FEET, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimParticleInVortex +}; +const struct SpriteTemplate gMoonrazeMaelstromBeamSpriteTemplate = +{ + .tileTag = ANIM_TAG_ORBS, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = gSolarBeamBigOrbAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimHyperBeamOrb +}; +const struct SpriteTemplate gMoonrazeMaelstromExplosionSpriteTemplate = +{ + .tileTag = ANIM_TAG_EXPLOSION_2, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gExplosionAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; +const struct SpriteTemplate gMoonrazeMaelstromShockwaveSpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_GrowingElectricOrb, + .callback = AnimGrowingShockWaveOrbOnTarget +}; +static const union AffineAnimCmd sMoonrazeMaelstromWormholeAffineAnims[] = { + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0, 0, 0xf6, 0x88), + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd *const sMoonrazeMaelstromWormholeAffineAnimTable[] = { + sMoonrazeMaelstromWormholeAffineAnims +}; +const struct SpriteTemplate gMoonrazeMaelstromWormholeSpriteTemplate = +{ + .tileTag = ANIM_TAG_SHADOW_BALL, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sMoonrazeMaelstromWormholeAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; + +// light that burns the sky +const struct SpriteTemplate gLightThatBurnsTheSkyGreenSparkSpriteTemplate = +{ + .tileTag = ANIM_TAG_SPARK_2, + .paletteTag = ANIM_TAG_LEAF, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_FlashingSpark, + .callback = AnimSparkElectricityFlashing +}; +const struct SpriteTemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate = +{ + .tileTag = ANIM_TAG_FIRE_PLUME, + .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gAnims_FirePlume, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimBlastBurnTargetPlume +}; +static const struct OamData sGeyserOam = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(32x32), + .size = SPRITE_SIZE(32x32), + .priority = 1, //Above sprites +}; +const struct SpriteTemplate gLightThatBurnsTheSkyExplosionSpriteTemplate = +{ + .tileTag = ANIM_TAG_EXPLOSION_2, + .paletteTag = ANIM_TAG_EXPLOSION_2, + .oam = &sGeyserOam, + .anims = gExplosionAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; + +// soul stealing 7star strike +const struct SpriteTemplate gSoulStealBlackFlySpriteTemplate = +{ + .tileTag = ANIM_TAG_ROUND_SHADOW, + .paletteTag = ANIM_TAG_HANDS_AND_FEET, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_FlyBallUp, + .callback = AnimFlyBallUp +}; +const struct SpriteTemplate gSoulStealIceBuffSpriteTemplate = +{ + .tileTag = ANIM_TAG_FOCUS_ENERGY, + .paletteTag = ANIM_TAG_ICE_CRYSTALS, + .oam = &gOamData_AffineOff_ObjNormal_16x32, + .anims = gEndureEnergyAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimEndureEnergy +}; +const struct SpriteTemplate gSoulStealBlueFistSpriteTemplate = +{ + .tileTag = ANIM_TAG_HANDS_AND_FEET, + .paletteTag = ANIM_TAG_ICE_CRYSTALS, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gAnims_HandsAndFeet, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimJumpKick +}; +const struct SpriteTemplate gSoulStealBlueStarSpriteTemplate = +{ + .tileTag = ANIM_TAG_PAIN_SPLIT, + .paletteTag = ANIM_TAG_ICE_CRYSTALS, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_Bite, + .callback = AnimSoulStealingStar +}; +const struct SpriteTemplate gSoulStealBlueParalyzeSpriteTemplate = +{ + .tileTag = ANIM_TAG_SPARK_2, + .paletteTag = ANIM_TAG_ICE_CRYSTALS, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimElectricity +}; +const struct SpriteTemplate gSoulStealBlastburnSpriteTemplate = +{ + .tileTag = ANIM_TAG_FIRE_PLUME, + .paletteTag = ANIM_TAG_WISP_FIRE, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gAnims_FirePlume, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimFirePlume +}; +const struct SpriteTemplate gSoulStealExplosionSpriteTemplate = +{ + .tileTag = ANIM_TAG_EXPLOSION, + .paletteTag = ANIM_TAG_WISP_FIRE, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gExplosionAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; +const struct SpriteTemplate gSoulStealZStarSpriteTemplate = +{ + .tileTag = ANIM_TAG_SNORE_Z, + .paletteTag = ANIM_TAG_SNORE_Z, + .oam = &gOamData_AffineOff_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimCrossImpact +}; + +// functions //general +void AnimTask_IsTargetPartner(u8 taskId) +{ + if (gBattleAnimTarget == (gBattleAnimAttacker ^ BIT_FLANK)) + gBattleAnimArgs[0] = 1; + else + gBattleAnimArgs[0] = 0; + + DestroyAnimVisualTask(taskId); +} + +void AnimTask_AllBanksInvisible(u8 taskId) +{ + u32 i; + for (i = 0; i < gBattlersCount; i++) + { + u8 spriteId = gBattlerSpriteIds[i]; + if (spriteId != 0xFF) + gSprites[spriteId].invisible = TRUE; + } + DestroyAnimVisualTask(taskId); +} + +void AnimTask_AllBanksVisible(u8 taskId) +{ + u32 i; + for (i = 0; i < gBattlersCount; i++) + { + u8 spriteId = gBattlerSpriteIds[i]; + if (spriteId != 0xFF) + gSprites[spriteId].invisible = FALSE; + } + DestroyAnimVisualTask(taskId); +} + +void AnimTask_AllBanksInvisibleExceptAttackerAndTarget(u8 taskId) +{ + u32 i; + for (i = 0; i < gBattlersCount; ++i) + { + u8 spriteId = gBattlerSpriteIds[i]; + if (spriteId == GetAnimBattlerSpriteId(ANIM_ATTACKER) || spriteId == GetAnimBattlerSpriteId(ANIM_TARGET)) + continue; + if (spriteId != 0xFF || !IsBattlerSpriteVisible(i)) //Pokemon that are already hidden + gSprites[spriteId].invisible = TRUE; + } + DestroyAnimVisualTask(taskId); +} + static u8 LoadBattleAnimTarget(u8 arg) { u8 battler; @@ -4184,6 +6654,132 @@ static void InitSpritePosToAnimAttackersCentre(struct Sprite *sprite, bool8 resp } //sprite callbacks +static void AnimSoulStealingStar(struct Sprite *sprite) +{ + sprite->x += gBattleAnimArgs[0]; + sprite->y += gBattleAnimArgs[1]; + sprite->data[0] = gBattleAnimArgs[3]; + sprite->data[1] = gBattleAnimArgs[4]; + sprite->data[2] = gBattleAnimArgs[5]; + sprite->callback = AnimSoulStealingStar_Step1; +} + +static void AnimSoulStealingStar_Step1(struct Sprite *sprite) +{ + sprite->data[4] += sprite->data[0]; + sprite->data[5] += sprite->data[1]; + sprite->x2 = sprite->data[4] >> 8; + sprite->y2 = sprite->data[5] >> 8; + if (++sprite->data[3] == sprite->data[2]) + sprite->callback = AnimSoulStealingStar_Step2; +} + +static void AnimSoulStealingStar_Step2(struct Sprite *sprite) +{ + sprite->data[4] -= sprite->data[0]; + sprite->data[5] -= sprite->data[1]; + sprite->x2 = sprite->data[4] >> 8; + sprite->y2 = sprite->data[5] >> 8; + if (--sprite->data[3] == 0) + DestroySpriteAndMatrix(sprite); +} + +//Creates The Extreme Evoboost Circles +static void AnimExtremeEvoboostCircle(struct Sprite *sprite) +{ + InitSpritePosToAnimAttacker(sprite, FALSE); + sprite->y += 20; + sprite->data[1] = 191; + sprite->callback = AnimExtremeEvoboostCircle_Step; + sprite->callback(sprite); +} + +static void AnimExtremeEvoboostCircle_Step(struct Sprite *sprite) +{ + sprite->x2 = Sin(sprite->data[1], 32); + sprite->y2 = Cos(sprite->data[1], 8); + sprite->data[1] += 5; + sprite->data[1] &= 0xFF; + if (++sprite->data[0] == 71) + DestroyAnimSprite(sprite); +} + +static void AnimGrowingShockWaveOrbOnTarget(struct Sprite *sprite) +{ + switch (sprite->data[0]) + { + case 0: + sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); + StartSpriteAffineAnim(sprite, 2); + sprite->data[0]++; + break; + case 1: + if (sprite->affineAnimEnded) + DestroySpriteAndMatrix(sprite); + break; + } +} + +static void AnimEllipticalGustAttacker(struct Sprite *sprite) +{ + InitSpritePosToAnimAttacker(sprite, FALSE); + sprite->y += 20; + sprite->data[1] = 191; + sprite->callback = AnimEllipticalGustAttacker_Step; + sprite->callback(sprite); +} + +static void AnimEllipticalGustAttacker_Step(struct Sprite *sprite) +{ + sprite->x2 = Sin(sprite->data[1], 32); + sprite->y2 = Cos(sprite->data[1], 8); + sprite->data[1] += 5; + sprite->data[1] &= 0xFF; + if (++sprite->data[0] == 71) + DestroyAnimSprite(sprite); +} + +static void SetSpriteCoordsToAnimTargetCoords(struct Sprite *sprite) +{ + sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); +} + +static void AnimBlastBurnTargetPlume(struct Sprite *sprite) +{ + SetSpriteCoordsToAnimTargetCoords(sprite); + if (GetBattlerSide(gBattleAnimTarget)) + { + sprite->x -= gBattleAnimArgs[0]; + sprite->y += gBattleAnimArgs[1]; + sprite->data[2] = -gBattleAnimArgs[4]; + } + else + { + sprite->x += gBattleAnimArgs[0]; + sprite->y += gBattleAnimArgs[1]; + sprite->data[2] = gBattleAnimArgs[4]; + } + + sprite->data[1] = gBattleAnimArgs[2]; + sprite->data[4] = gBattleAnimArgs[3]; + sprite->data[3] = gBattleAnimArgs[5]; + + sprite->callback = AnimBlastBurnTargetPlume_Step1; +} +static void AnimBlastBurnTargetPlume_Step1(struct Sprite *sprite) +{ + if (++sprite->data[0] < sprite->data[4]) + { + sprite->x2 += sprite->data[2]; + sprite->y2 += sprite->data[3]; + } + + if (sprite->data[0] == sprite->data[1]) + DestroySpriteAndMatrix(sprite); +} + static void SpriteCB_SpriteToCentreOfSide(struct Sprite* sprite) { bool8 var; @@ -4982,7 +7578,193 @@ static void SpriteCB_Geyser(struct Sprite* sprite) sprite->callback = AnimMudSportDirtRising; } -// Anim Task Functions +//Launches an object upwards like they were being shot from a geyser +//arg 0: null +//arg 1: initial x pixel offset +//arg 2: initial y pixel offset +static void SpriteCB_GeyserTarget(struct Sprite* sprite) +{ + sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[1]; + sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[2]; + + sprite->data[0] = gBattleAnimArgs[1] > 0 ? 1 : -1; + sprite->callback = AnimMudSportDirtRising; +} + +// Anim Tasks Functions +#define tSpriteId data[0] +#define tTimer data[1] +#define tInitialXPos data[2] +#define tInitialYPos data[3] +#define tSide data[4] +#define tAnimLengthTime data[5] +static const s8 sHomerunEnemyHorizontalMovement[] = +{ + 3, 3, 3, 3, + 3, 3, 2, 2, + 1, 1, 1, 1, + 1, 1, 1, 1, + 0, 1, 0, 1, + 0, 1, 0, 0, + 1, 0, 0, 1, + 0, 0, 0, 1, + 0, 0, 0, 1, +}; + +static const s8 sHomerunEnemyVerticalMovement[] = +{ + -4, -4, -4, -4, + -4, -3, -3, -2, + -2, -1, -1, -1, + -1, -1, -1, -1, + 0, -1, 0, -1, + 0, -1, 0, 0, + 0, 0, -1, 0, + 0, -1, 0, 0, + -1, 0, 0, 0, +}; + +void AnimTask_TwinkleTackleLaunchStep(u8 taskId) +{ + u16 rotation; + s16 xScale, yScale; + struct Task* task = &gTasks[taskId]; + struct Sprite* sprite = &gSprites[task->tSpriteId]; + + if (task->tTimer > task->tAnimLengthTime) + { + if (task->tTimer > task->tAnimLengthTime + 5) //Wait an extra few frames so the glint can be placed on the target + { + sprite->x = task->tInitialXPos; + sprite->y = task->tInitialYPos; + ResetSpriteRotScale(task->tSpriteId); + DestroyAnimVisualTask(taskId); + } + else + ++task->tTimer; + return; + } + else if ((u16) task->tTimer < NELEMS(sHomerunEnemyHorizontalMovement)) + { + s8 movement = sHomerunEnemyHorizontalMovement[task->tTimer]; + if (task->tSide == B_SIDE_PLAYER) + movement *= -1; + sprite->x += movement; + + movement = sHomerunEnemyVerticalMovement[task->tTimer]; + if (task->tSide == B_SIDE_PLAYER) + movement *= -1; + sprite->y += movement; + } + + xScale = 0x180; + yScale = 0x180; + rotation = (task->tTimer << 4) + (task->tTimer << 3); + + xScale += rotation; + yScale += rotation; + rotation <<= 7; + + if (task->tSide == B_SIDE_OPPONENT) + rotation *= -1; + + SetSpriteRotScale(task->tSpriteId, xScale, yScale, rotation); + + if (++task->tTimer > task->tAnimLengthTime) + sprite->invisible = TRUE; +} + +//Launches the target in Twinkle Tackle +//arg 0: Anim time +void AnimTask_TwinkleTackleLaunch(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + + task->tSpriteId = GetAnimBattlerSpriteId(ANIM_TARGET); + task->tSide = GetBattlerSide(gBattleAnimTarget); + task->tAnimLengthTime = gBattleAnimArgs[0]; + task->tInitialXPos = gSprites[task->tSpriteId].x; + task->tInitialYPos = gSprites[task->tSpriteId].y; + task->tTimer = 0; + task->func = AnimTask_TwinkleTackleLaunchStep; + + PrepareBattlerSpriteForRotScale(task->tSpriteId, ST_OAM_OBJ_NORMAL); +} +#undef tSpriteId +#undef tTimer +#undef tInitialXPos +#undef tInitialYPos +#undef tSide +#undef tAnimLengthTime + +void AnimTask_GetTimeOfDay(u8 taskId) +{ + gBattleAnimArgs[0] = 0; //Daytime is default + + RtcCalcLocalTime(); + if (gLocalTime.hours >= 20 || gLocalTime.hours < 4) + gBattleAnimArgs[0] = 1; + else if (gLocalTime.hours >= 17 && gLocalTime.hours < 20) + gBattleAnimArgs[0] = 2; + + DestroyAnimVisualTask(taskId); +} + +void AnimTask_GetLycanrocForm(u8 taskId) +{ + + #ifdef POKEMON_EXPANSION + if (GetMonData(GetIllusionMonPtr(gBattleAnimAttacker), MON_DATA_SPECIES) == SPECIES_LYCANROC_MIDNIGHT) + gBattleAnimArgs[0] = 1; + else + #endif + gBattleAnimArgs[0] = 0; + + gBattleAnimArgs[0] = 0; + DestroyAnimVisualTask(taskId); +} + +// Scales up the target mon sprite +// Used in Let's Snuggle Forever +// No args. +void AnimTask_GrowTarget(u8 taskId) +{ + u8 spriteId = GetAnimBattlerSpriteId(ANIM_TARGET); + PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_BLEND); + SetSpriteRotScale(spriteId, 208, 208, 0); + gTasks[taskId].data[0] = 120; + gTasks[taskId].func = AnimTask_GrowStep; +} +static void AnimTask_GrowStep(u8 taskId) +{ + if (--gTasks[taskId].data[0] == -1) + { + u8 spriteId = GetAnimBattlerSpriteId(ANIM_TARGET); + ResetSpriteRotScale(spriteId); + DestroyAnimVisualTask(taskId); + } +} + +// Uses a spotlight sprite as a light mask to illuminate the attacker. The spotlight grows and shrinks. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: duration of fully-opened spotlight +static void AnimOceanicOperettaSpotlight(struct Sprite *sprite) +{ + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ); + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJWIN_ON); + gBattle_WIN0H = 0; + gBattle_WIN0V = 0; + SetGpuReg(REG_OFFSET_WIN0H, gBattle_WIN0H); + SetGpuReg(REG_OFFSET_WIN0V, gBattle_WIN0V); + + sprite->data[0] = gBattleAnimArgs[2]; + InitSpritePosToAnimAttacker(sprite, FALSE); + sprite->oam.objMode = ST_OAM_OBJ_WINDOW; + sprite->invisible = TRUE; + sprite->callback = AnimFlatterSpotlight_Step; +} + static void AnimTask_WaitAffineAnim(u8 taskId) { struct Task* task = &gTasks[taskId]; @@ -5055,6 +7837,25 @@ void AnimTask_TechnoBlast(u8 taskId) DestroyAnimVisualTask(taskId); } +// Z MOVES +//Creates a twinkle at the location the target was knocked too in Twinkle Tackle +static void SpriteCB_TwinkleOnBattler(struct Sprite *sprite) +{ + struct Sprite* monSprite; + + if (gBattleAnimArgs[2] == ANIM_TARGET) + monSprite = &gSprites[GetAnimBattlerSpriteId(ANIM_TARGET)]; + else + monSprite = &gSprites[GetAnimBattlerSpriteId(ANIM_ATTACKER)]; + + sprite->x = monSprite->x; + sprite->y = monSprite->y; + sprite->x2 = monSprite->x2; + sprite->y2 = monSprite->y2; + sprite->callback = RunStoredCallbackWhenAnimEnds; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); +} + void AnimTask_PrimalReversion(u8 taskId) { if (ItemId_GetId(gBattleMons[gBattleAnimAttacker].item) == ITEM_RED_ORB) @@ -5066,7 +7867,7 @@ void AnimTask_PrimalReversion(u8 taskId) void AnimTask_ShellSideArm(u8 taskId) { - if (gSwapDamageCategory) + if (gBattleStruct->swapDamageCategory) gBattleAnimArgs[0] = TRUE; else gBattleAnimArgs[0] = FALSE; diff --git a/src/battle_anim_poison.c b/src/battle_anim_poison.c index dc24e658b..00fa95d32 100644 --- a/src/battle_anim_poison.c +++ b/src/battle_anim_poison.c @@ -8,7 +8,6 @@ static void AnimSludgeProjectile_Step(struct Sprite *); static void AnimAcidPoisonBubble(struct Sprite *); static void AnimSludgeBombHitParticle_Step(struct Sprite *); static void AnimAcidPoisonDroplet(struct Sprite *); -static void AnimBubbleEffect(struct Sprite *); static void AnimBubbleEffect_Step(struct Sprite *); static void AnimSuckerPunchStep(struct Sprite *sprite); static void AnimSuckerPunch(struct Sprite *sprite); @@ -161,7 +160,7 @@ static const union AffineAnimCmd sAffineAnim_Bubble[] = AFFINEANIMCMD_END, }; -static const union AffineAnimCmd *const sAffineAnims_Bubble[] = +const union AffineAnimCmd *const gAffineAnims_Bubble[] = { sAffineAnim_Bubble, }; @@ -173,7 +172,7 @@ const struct SpriteTemplate gPoisonBubbleSpriteTemplate = .oam = &gOamData_AffineNormal_ObjNormal_16x16, .anims = gAnims_PoisonProjectile, .images = NULL, - .affineAnims = sAffineAnims_Bubble, + .affineAnims = gAffineAnims_Bubble, .callback = AnimBubbleEffect, }; @@ -184,7 +183,7 @@ const struct SpriteTemplate gWaterBubbleSpriteTemplate = .oam = &gOamData_AffineNormal_ObjBlend_16x16, .anims = gAnims_WaterBubble, .images = NULL, - .affineAnims = sAffineAnims_Bubble, + .affineAnims = gAffineAnims_Bubble, .callback = AnimBubbleEffect, }; @@ -505,7 +504,7 @@ static void AnimAcidPoisonDroplet(struct Sprite *sprite) // arg 0: initial x pixel offset // arg 1: initial y pixel offset // arg 2: 0 = single-target, 1 = multi-target -static void AnimBubbleEffect(struct Sprite *sprite) +void AnimBubbleEffect(struct Sprite *sprite) { if (!gBattleAnimArgs[2]) { diff --git a/src/battle_anim_rock.c b/src/battle_anim_rock.c index 444496484..52a669cfe 100644 --- a/src/battle_anim_rock.c +++ b/src/battle_anim_rock.c @@ -703,6 +703,54 @@ void AnimTask_Rollout(u8 taskId) task->func = AnimTask_Rollout_Step; } +void AnimTask_TectonicRageRollout(u8 taskId) +{ + u16 var0, var1, var2, var3; + int var5; + s16 pan1, pan2; + struct Task *task; + u8 rolloutCounter = 1; + + task = &gTasks[taskId]; + + var0 = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); + var1 = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + 24; + var2 = GetBattlerSpriteCoord(gBattleAnimTarget, 2); + var3 = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + 24; + + if (BATTLE_PARTNER(gBattleAnimAttacker) == gBattleAnimTarget) + var3 = var1; + + task->data[8] = 48 - (rolloutCounter * 8); //rollout speed + task->data[0] = 0; + task->data[11] = 0; + task->data[9] = 0; + task->data[12] = 1; + + var5 = task->data[8]; + if (var5 < 0) + var5 += 7; + + task->data[10] = (var5 >> 3) - 1; + + task->data[2] = var0 * 8; + task->data[3] = var1 * 8; + task->data[4] = ((var2 - var0) * 8) / task->data[8]; + task->data[5] = ((var3 - var1) * 8) / task->data[8]; + task->data[6] = 0; + task->data[7] = 0; + + pan1 = BattleAnimAdjustPanning(-64); + pan2 = BattleAnimAdjustPanning(63); + + task->data[13] = pan1; + task->data[14] = (pan2 - pan1) / task->data[8]; + task->data[1] = rolloutCounter; + task->data[15] = GetAnimBattlerSpriteId(ANIM_ATTACKER); + + task->func = AnimTask_Rollout_Step; +} + static void AnimTask_Rollout_Step(u8 taskId) { struct Task *task; diff --git a/src/battle_anim_status_effects.c b/src/battle_anim_status_effects.c index f56d04ccd..fb2f97956 100644 --- a/src/battle_anim_status_effects.c +++ b/src/battle_anim_status_effects.c @@ -107,7 +107,7 @@ static const union AnimCmd sAnim_SpinningSparkle[] = ANIMCMD_END }; -static const union AnimCmd *const sAnims_SpinningSparkle[] = +const union AnimCmd *const sAnims_SpinningSparkle[] = { sAnim_SpinningSparkle }; @@ -379,6 +379,25 @@ static void AnimFlashingCircleImpact_Step(struct Sprite *sprite) } } +void AnimTask_FrozenIceCubeAttacker(u8 taskId) +{ + s16 x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) - 32; + s16 y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) - 36; + u8 spriteId; + + if (IsContest()) + x -= 6; + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16)); + spriteId = CreateSprite(&sFrozenIceCubeSpriteTemplate, x, y, 4); + if (GetSpriteTileStartByTag(ANIM_TAG_ICE_CUBE) == 0xFFFF) + gSprites[spriteId].invisible = TRUE; + SetSubspriteTables(&gSprites[spriteId], sFrozenIceCubeSubspriteTable); + gTasks[taskId].data[15] = spriteId; + gTasks[taskId].func = AnimTask_FrozenIceCube_Step1; +} + + void AnimTask_FrozenIceCube(u8 taskId) { s16 x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) - 32; diff --git a/src/battle_bg.c b/src/battle_bg.c index 040c834c9..60519b8a8 100644 --- a/src/battle_bg.c +++ b/src/battle_bg.c @@ -194,7 +194,7 @@ static const struct WindowTemplate sStandardBattleWindowTemplates[] = .bg = 0, .tilemapLeft = 2, .tilemapTop = 55, - .width = 8, + .width = 12, //for z move names .height = 2, .paletteNum = 5, .baseBlock = 0x0300, @@ -206,7 +206,7 @@ static const struct WindowTemplate sStandardBattleWindowTemplates[] = .width = 8, .height = 2, .paletteNum = 5, - .baseBlock = 0x0310, + .baseBlock = 0x0318, }, [B_WIN_MOVE_NAME_3] = { .bg = 0, @@ -215,7 +215,7 @@ static const struct WindowTemplate sStandardBattleWindowTemplates[] = .width = 8, .height = 2, .paletteNum = 5, - .baseBlock = 0x0320, + .baseBlock = 0x0328, }, [B_WIN_MOVE_NAME_4] = { .bg = 0, @@ -224,7 +224,7 @@ static const struct WindowTemplate sStandardBattleWindowTemplates[] = .width = 8, .height = 2, .paletteNum = 5, - .baseBlock = 0x0330, + .baseBlock = 0x0338, }, [B_WIN_PP] = { .bg = 0, diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c index 9c262405b..44e8bf08f 100644 --- a/src/battle_controller_opponent.c +++ b/src/battle_controller_opponent.c @@ -1,6 +1,7 @@ #include "global.h" #include "battle.h" #include "battle_ai_main.h" +#include "battle_ai_util.h" #include "battle_anim.h" #include "battle_arena.h" #include "battle_controllers.h" @@ -9,6 +10,7 @@ #include "battle_setup.h" #include "battle_tower.h" #include "battle_tv.h" +#include "battle_z_move.h" #include "bg.h" #include "data.h" #include "frontier_util.h" @@ -1580,16 +1582,25 @@ static void OpponentHandleChooseMove(void) gBattlerTarget = gActiveBattler; if (GetBattlerMoveTargetType(gActiveBattler, moveInfo->moves[chosenMoveId]) & MOVE_TARGET_BOTH) { - gBattlerTarget = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); - if (gAbsentBattlerFlags & gBitTable[gBattlerTarget]) - gBattlerTarget = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT); + u16 chosenMove = moveInfo->moves[chosenMoveId]; + + if (gBattleMoves[chosenMove].target & (MOVE_TARGET_USER_OR_SELECTED | MOVE_TARGET_USER)) + gBattlerTarget = gActiveBattler; + if (gBattleMoves[chosenMove].target & MOVE_TARGET_BOTH) + { + gBattlerTarget = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); + if (gAbsentBattlerFlags & gBitTable[gBattlerTarget]) + gBattlerTarget = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT); + } + + if (ShouldUseZMove(gActiveBattler, gBattlerTarget, chosenMove)) + QueueZMove(gActiveBattler, chosenMove); + + if (CanMegaEvolve(gActiveBattler)) // If opponent can mega evolve, do it. + BtlController_EmitTwoReturnValues(BUFFER_B, 10, (chosenMoveId) | (RET_MEGA_EVOLUTION) | (gBattlerTarget << 8)); + else + BtlController_EmitTwoReturnValues(BUFFER_B, 10, (chosenMoveId) | (gBattlerTarget << 8)); } - - // If opponent can mega evolve, do it. - if (CanMegaEvolve(gActiveBattler)) - BtlController_EmitTwoReturnValues(BUFFER_B, 10, (chosenMoveId) | (RET_MEGA_EVOLUTION) | (gBattlerTarget << 8)); - else - BtlController_EmitTwoReturnValues(BUFFER_B, 10, (chosenMoveId) | (gBattlerTarget << 8)); break; } OpponentBufferExecCompleted(); diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index 2f12a954d..ee939a612 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -8,6 +8,7 @@ #include "battle_message.h" #include "battle_setup.h" #include "battle_tv.h" +#include "battle_z_move.h" #include "bg.h" #include "data.h" #include "item.h" @@ -98,8 +99,6 @@ static void PlayerCmdEnd(void); static void PlayerBufferRunCommand(void); static void HandleInputChooseTarget(void); static void HandleInputChooseMove(void); -static void MoveSelectionCreateCursorAt(u8, u8); -static void MoveSelectionDestroyCursorAt(u8); static void MoveSelectionDisplayPpNumber(void); static void MoveSelectionDisplayPpString(void); static void MoveSelectionDisplayMoveType(void); @@ -122,6 +121,8 @@ static void PlayerDoMoveAnimation(void); static void Task_StartSendOutAnim(u8); static void EndDrawPartyStatusSummary(void); +static void ReloadMoveNames(void); + static void (*const sPlayerBufferCommands[CONTROLLER_CMDS_COUNT])(void) = { [CONTROLLER_GETMONDATA] = PlayerHandleGetMonData, @@ -381,7 +382,7 @@ static void HandleInputChooseTarget(void) BtlController_EmitTwoReturnValues(BUFFER_B, 10, gMoveSelectionCursor[gActiveBattler] | (gMultiUsePlayerCursor << 8)); EndBounceEffect(gMultiUsePlayerCursor, BOUNCE_HEALTHBOX); TryHideLastUsedBall(); - HideMegaTriggerSprite(); + HideTriggerSprites(); PlayerBufferExecCompleted(); } else if (JOY_NEW(B_BUTTON) || gPlayerDpadHoldFrames > 59) @@ -565,7 +566,7 @@ static void HandleInputShowTargets(void) BtlController_EmitTwoReturnValues(BUFFER_B, 10, gMoveSelectionCursor[gActiveBattler] | RET_MEGA_EVOLUTION | (gMultiUsePlayerCursor << 8)); else BtlController_EmitTwoReturnValues(BUFFER_B, 10, gMoveSelectionCursor[gActiveBattler] | (gMultiUsePlayerCursor << 8)); - HideMegaTriggerSprite(); + HideTriggerSprites(); TryHideLastUsedBall(); PlayerBufferExecCompleted(); } @@ -613,7 +614,17 @@ static void HandleInputChooseMove(void) { moveTarget = GetBattlerMoveTargetType(gActiveBattler, moveInfo->moves[gMoveSelectionCursor[gActiveBattler]]); } - + + if (gBattleStruct->zmove.viewing) + { + u16 chosenMove = moveInfo->moves[gMoveSelectionCursor[gActiveBattler]]; + + QueueZMove(gActiveBattler, chosenMove); + gBattleStruct->zmove.viewing = FALSE; + if (gBattleMoves[moveInfo->moves[gMoveSelectionCursor[gActiveBattler]]].split != SPLIT_STATUS) + moveTarget = MOVE_TARGET_SELECTED; //damaging z moves always have selected target + } + if (moveTarget & MOVE_TARGET_USER) gMultiUsePlayerCursor = gActiveBattler; else @@ -671,7 +682,7 @@ static void HandleInputChooseMove(void) BtlController_EmitTwoReturnValues(BUFFER_B, 10, gMoveSelectionCursor[gActiveBattler] | RET_MEGA_EVOLUTION | (gMultiUsePlayerCursor << 8)); else BtlController_EmitTwoReturnValues(BUFFER_B, 10, gMoveSelectionCursor[gActiveBattler] | (gMultiUsePlayerCursor << 8)); - HideMegaTriggerSprite(); + HideTriggerSprites(); TryHideLastUsedBall(); PlayerBufferExecCompleted(); break; @@ -698,12 +709,20 @@ static void HandleInputChooseMove(void) else if (JOY_NEW(B_BUTTON) || gPlayerDpadHoldFrames > 59) { PlaySE(SE_SELECT); - gBattleStruct->mega.playerSelect = FALSE; - BtlController_EmitTwoReturnValues(BUFFER_B, 10, 0xFFFF); - HideMegaTriggerSprite(); - PlayerBufferExecCompleted(); + if (gBattleStruct->zmove.viewing) + { + ReloadMoveNames(); + } + else + { + gBattleStruct->mega.playerSelect = FALSE; + gBattleStruct->zmove.viable = FALSE; + BtlController_EmitTwoReturnValues(BUFFER_B, 10, 0xFFFF); + HideTriggerSprites(); + PlayerBufferExecCompleted(); + } } - else if (JOY_NEW(DPAD_LEFT)) + else if (JOY_NEW(DPAD_LEFT) && !gBattleStruct->zmove.viewing) { if (gMoveSelectionCursor[gActiveBattler] & 1) { @@ -713,9 +732,10 @@ static void HandleInputChooseMove(void) MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 0); MoveSelectionDisplayPpNumber(); MoveSelectionDisplayMoveType(); + TryChangeZIndicator(gActiveBattler, gMoveSelectionCursor[gActiveBattler]); } } - else if (JOY_NEW(DPAD_RIGHT)) + else if (JOY_NEW(DPAD_RIGHT) && !gBattleStruct->zmove.viewing) { if (!(gMoveSelectionCursor[gActiveBattler] & 1) && (gMoveSelectionCursor[gActiveBattler] ^ 1) < gNumberOfMovesToChoose) @@ -726,9 +746,10 @@ static void HandleInputChooseMove(void) MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 0); MoveSelectionDisplayPpNumber(); MoveSelectionDisplayMoveType(); + TryChangeZIndicator(gActiveBattler, gMoveSelectionCursor[gActiveBattler]); } } - else if (JOY_NEW(DPAD_UP)) + else if (JOY_NEW(DPAD_UP) && !gBattleStruct->zmove.viewing) { if (gMoveSelectionCursor[gActiveBattler] & 2) { @@ -738,9 +759,10 @@ static void HandleInputChooseMove(void) MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 0); MoveSelectionDisplayPpNumber(); MoveSelectionDisplayMoveType(); + TryChangeZIndicator(gActiveBattler, gMoveSelectionCursor[gActiveBattler]); } } - else if (JOY_NEW(DPAD_DOWN)) + else if (JOY_NEW(DPAD_DOWN) && !gBattleStruct->zmove.viewing) { if (!(gMoveSelectionCursor[gActiveBattler] & 2) && (gMoveSelectionCursor[gActiveBattler] ^ 2) < gNumberOfMovesToChoose) @@ -751,9 +773,10 @@ static void HandleInputChooseMove(void) MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 0); MoveSelectionDisplayPpNumber(); MoveSelectionDisplayMoveType(); + TryChangeZIndicator(gActiveBattler, gMoveSelectionCursor[gActiveBattler]); } } - else if (JOY_NEW(SELECT_BUTTON)) + else if (JOY_NEW(SELECT_BUTTON) && !gBattleStruct->zmove.viewing) { if (gNumberOfMovesToChoose > 1 && !(gBattleTypeFlags & BATTLE_TYPE_LINK)) { @@ -769,7 +792,7 @@ static void HandleInputChooseMove(void) gBattlerControllerFuncs[gActiveBattler] = HandleMoveSwitching; } } - else if (gMain.newKeys & START_BUTTON) + else if (JOY_NEW(START_BUTTON)) { if (CanMegaEvolve(gActiveBattler)) { @@ -777,9 +800,30 @@ static void HandleInputChooseMove(void) ChangeMegaTriggerSprite(gBattleStruct->mega.triggerSpriteId, gBattleStruct->mega.playerSelect); PlaySE(SE_SELECT); } + else if (gBattleStruct->zmove.viable) + { + // show z move name / info + //TODO: brighten z move symbol + PlaySE(SE_SELECT); + if (!gBattleStruct->zmove.viewing) + MoveSelectionDisplayZMove(gBattleStruct->zmove.chosenZMove); + else + ReloadMoveNames(); + } } } +static void ReloadMoveNames(void) +{ + gBattleStruct->mega.playerSelect = FALSE; + gBattleStruct->zmove.viewing = FALSE; + MoveSelectionDestroyCursorAt(0); + MoveSelectionDisplayMoveNames(); + MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 0); + MoveSelectionDisplayPpNumber(); + MoveSelectionDisplayMoveType(); +} + static u32 HandleMoveInputUnused(void) { u32 var = 0; @@ -1684,7 +1728,7 @@ static void MoveSelectionDisplayMoveType(void) BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MOVE_TYPE); } -static void MoveSelectionCreateCursorAt(u8 cursorPosition, u8 baseTileNum) +void MoveSelectionCreateCursorAt(u8 cursorPosition, u8 baseTileNum) { u16 src[2]; src[0] = baseTileNum + 1; @@ -1694,7 +1738,7 @@ static void MoveSelectionCreateCursorAt(u8 cursorPosition, u8 baseTileNum) CopyBgTilemapBufferToVram(0); } -static void MoveSelectionDestroyCursorAt(u8 cursorPosition) +void MoveSelectionDestroyCursorAt(u8 cursorPosition) { u16 src[2]; src[0] = 0x1016; @@ -2813,12 +2857,20 @@ static void PlayerHandleChooseMove(void) } else { + struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct*)(&gBattleResources->bufferA[gActiveBattler][4]); + InitMoveSelectionsVarsAndStrings(); gBattleStruct->mega.playerSelect = FALSE; if (!IsMegaTriggerSpriteActive()) gBattleStruct->mega.triggerSpriteId = 0xFF; if (CanMegaEvolve(gActiveBattler)) CreateMegaTriggerSprite(gActiveBattler, 0); + if (!IsZMoveTriggerSpriteActive()) + gBattleStruct->zmove.triggerSpriteId = 0xFF; + + GetUsableZMoves(gActiveBattler, moveInfo->moves); + gBattleStruct->zmove.viable = IsZMoveUsable(gActiveBattler, gMoveSelectionCursor[gActiveBattler]); + CreateZMoveTriggerSprite(gActiveBattler, gBattleStruct->zmove.viable); gBattlerControllerFuncs[gActiveBattler] = HandleChooseMoveAfterDma3; } } diff --git a/src/battle_controller_player_partner.c b/src/battle_controller_player_partner.c index 4e41651de..a59841f15 100644 --- a/src/battle_controller_player_partner.c +++ b/src/battle_controller_player_partner.c @@ -1,12 +1,14 @@ #include "global.h" #include "battle.h" #include "battle_ai_main.h" +#include "battle_ai_util.h" #include "battle_anim.h" #include "battle_controllers.h" #include "battle_message.h" #include "battle_interface.h" #include "battle_setup.h" #include "battle_tower.h" +#include "battle_z_move.h" #include "bg.h" #include "data.h" #include "item_use.h" @@ -1526,6 +1528,9 @@ static void PlayerPartnerHandleChooseMove(void) if (gAbsentBattlerFlags & gBitTable[gBattlerTarget]) gBattlerTarget = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); } + + if (ShouldUseZMove(gActiveBattler, gBattlerTarget, moveInfo->moves[chosenMoveId])) + QueueZMove(gActiveBattler, moveInfo->moves[chosenMoveId]); // If partner can mega evolve, do it. if (CanMegaEvolve(gActiveBattler)) diff --git a/src/battle_interface.c b/src/battle_interface.c index 0a6265208..4dc19f207 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -4,6 +4,7 @@ #include "pokemon.h" #include "battle_controllers.h" #include "battle_interface.h" +#include "battle_z_move.h" #include "graphics.h" #include "sprite.h" #include "window.h" @@ -1530,6 +1531,12 @@ void HideMegaTriggerSprite(void) } } +void HideTriggerSprites(void) +{ + HideMegaTriggerSprite(); + HideZMoveTriggerSprite(); +} + void DestroyMegaTriggerSprite(void) { FreeSpritePaletteByTag(TAG_MEGA_TRIGGER_PAL); diff --git a/src/battle_main.c b/src/battle_main.c index d8678c54e..147c6ec41 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -134,7 +134,7 @@ EWRAM_DATA u16 gBattle_WIN1V = 0; EWRAM_DATA u8 gDisplayedStringBattle[400] = {0}; EWRAM_DATA u8 gBattleTextBuff1[TEXT_BUFF_ARRAY_COUNT] = {0}; EWRAM_DATA u8 gBattleTextBuff2[TEXT_BUFF_ARRAY_COUNT] = {0}; -EWRAM_DATA u8 gBattleTextBuff3[TEXT_BUFF_ARRAY_COUNT] = {0}; +EWRAM_DATA u8 gBattleTextBuff3[30] = {0}; //expanded for stupidly long z move names // The below array is never intentionally used. However, Juan's // defeat text (SootopolisCity_Gym_1F_Text_JuanDefeat) is too long // for gDisplayedStringBattle and overflows into this array. If it @@ -239,7 +239,6 @@ EWRAM_DATA struct TotemBoost gTotemBoosts[MAX_BATTLERS_COUNT] = {0}; EWRAM_DATA bool8 gHasFetchedBall = FALSE; EWRAM_DATA u8 gLastUsedBall = 0; EWRAM_DATA u16 gLastThrownBall = 0; -EWRAM_DATA bool8 gSwapDamageCategory = FALSE; // Photon Geyser, Shell Side Arm, Light That Burns the Sky EWRAM_DATA u8 gPartyCriticalHits[PARTY_SIZE] = {0}; EWRAM_DATA static u8 sTriedEvolving = 0; @@ -3004,7 +3003,7 @@ static void BattleStartClearSetData(void) gPartyCriticalHits[i] = 0; } - gSwapDamageCategory = FALSE; // Photon Geyser, Shell Side Arm, Light That Burns the Sky + gBattleStruct->swapDamageCategory = FALSE; // Photon Geyser, Shell Side Arm, Light That Burns the Sky } void SwitchInClearSetData(void) @@ -3989,6 +3988,7 @@ static void HandleTurnActionSelectionState(void) { struct ChooseMoveStruct moveInfo; + moveInfo.zmove = gBattleStruct->zmove; moveInfo.mega = gBattleStruct->mega; moveInfo.species = gBattleMons[gActiveBattler].species; moveInfo.monType1 = gBattleMons[gActiveBattler].type1; @@ -4104,6 +4104,7 @@ static void HandleTurnActionSelectionState(void) } gBattleStruct->mega.toEvolve &= ~(gBitTable[BATTLE_PARTNER(GetBattlerPosition(gActiveBattler))]); + gBattleStruct->zmove.toBeUsed[BATTLE_PARTNER(GetBattlerPosition(gActiveBattler))] = MOVE_NONE; BtlController_EmitEndBounceEffect(BUFFER_A); MarkBattlerForControllerExec(gActiveBattler); return; diff --git a/src/battle_message.c b/src/battle_message.c index 18839fc82..79467287f 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -5,6 +5,7 @@ #include "battle_message.h" #include "battle_setup.h" #include "battle_tower.h" +#include "battle_z_move.h" #include "data.h" #include "event_data.h" #include "frontier_util.h" @@ -48,7 +49,6 @@ struct BattleWindowText static void ChooseMoveUsedParticle(u8 *textPtr); static void ChooseTypeOfMoveUsedString(u8 *dst); -static void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst); static EWRAM_DATA u16 sBattlerAbilities[MAX_BATTLERS_COUNT] = {0}; EWRAM_DATA struct BattleMsgData *gBattleMsgDataPtr = NULL; @@ -700,6 +700,15 @@ static const u8 sText_CanActFaster[] = _("{B_ATK_NAME_WITH_PREFIX} can act faste static const u8 sText_MicleBerryActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} boosted the accuracy of its\nnext move using {B_LAST_ITEM}!"); static const u8 sText_PkmnShookOffTheTaunt[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} shook off\nthe taunt!"); static const u8 sText_PkmnGotOverItsInfatuation[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} got over\nits infatuation!"); +static const u8 sText_ZPowerSurrounds[] = _("{B_ATK_NAME_WITH_PREFIX} surrounds\nitself with its Z-Power!"); +static const u8 sText_ZPowerUnleashed[] = _("{B_ATK_NAME_WITH_PREFIX} unleashes\nits full-force Z-Move!"); +static const u8 sText_ZMoveResetsStats[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} returned its\ndecreased stats to normal using\lits Z-Power!"); +static const u8 sText_ZMoveAllStatsUp[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} boosted all\nof its stats using its Z-Power!"); +static const u8 sText_ZMoveBoostCrit[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} boosted its\ncritical-hit ratio using its Z-Power!"); +static const u8 sText_ZMoveRestoreHp[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} restored its\nHP using its Z-Power!"); +static const u8 sText_ZMoveStatUp[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} boosted\nits stats using its Z-Power!"); +static const u8 sText_ZMoveHpSwitchInTrap[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s HP was restored by the Z-Power!"); +static const u8 sText_TerrainReturnedToNormal[] = _("The terrain returned to\nnormal!"); static const u8 sText_ItemCannotBeRemoved[] = _("{B_ATK_NAME_WITH_PREFIX}'s item cannot be removed!"); static const u8 sText_StickyBarbTransfer[] = _("The {B_LAST_ITEM} attached itself to\n{B_ATK_NAME_WITH_PREFIX}!"); static const u8 sText_PkmnBurnHealed[] = _("{B_DEF_NAME_WITH_PREFIX}'s\nburn was healed."); @@ -745,8 +754,17 @@ static const u8 sText_MeteorBeamCharging[] = _("{B_ATK_NAME_WITH_PREFIX} is over static const u8 sText_HeatingUpBeak[] = _("{B_ATK_NAME_WITH_PREFIX} started\nheating up its beak!"); static const u8 sText_CourtChange[] = _("{B_ATK_NAME_WITH_PREFIX} swapped the battle\neffects affecting each side!"); + const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = { + [STRINGID_ZPOWERSURROUNDS - BATTLESTRINGS_TABLE_START] = sText_ZPowerSurrounds, + [STRINGID_ZMOVEUNLEASHED - BATTLESTRINGS_TABLE_START] = sText_ZPowerUnleashed, + [STRINGID_ZMOVERESETSSTATS - BATTLESTRINGS_TABLE_START] = sText_ZMoveResetsStats, + [STRINGID_ZMOVEALLSTATSUP - BATTLESTRINGS_TABLE_START] = sText_ZMoveAllStatsUp, + [STRINGID_ZMOVEZBOOSTCRIT - BATTLESTRINGS_TABLE_START] = sText_ZMoveBoostCrit, + [STRINGID_ZMOVERESTOREHP - BATTLESTRINGS_TABLE_START] = sText_ZMoveRestoreHp, + [STRINGID_ZMOVESTATUP - BATTLESTRINGS_TABLE_START] = sText_ZMoveStatUp, + [STRINGID_ZMOVEHPTRAP - BATTLESTRINGS_TABLE_START] = sText_ZMoveHpSwitchInTrap, [STRINGID_PLAYERLOSTTOENEMYTRAINER - BATTLESTRINGS_TABLE_START] = sText_PlayerLostToEnemyTrainer, [STRINGID_PLAYERPAIDPRIZEMONEY - BATTLESTRINGS_TABLE_START] = sText_PlayerPaidPrizeMoney, [STRINGID_COURTCHANGE - BATTLESTRINGS_TABLE_START] = sText_CourtChange, @@ -1353,6 +1371,17 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_TARGETTOOHEAVY - BATTLESTRINGS_TABLE_START] = sText_TargetTooHeavy, }; +const u16 gZEffectStringIds[] = +{ + [B_MSG_Z_RESET_STATS] = STRINGID_ZMOVERESETSSTATS, + [B_MSG_Z_ALL_STATS_UP]= STRINGID_ZMOVEALLSTATSUP, + [B_MSG_Z_BOOST_CRITS] = STRINGID_ZMOVEZBOOSTCRIT, + [B_MSG_Z_FOLLOW_ME] = STRINGID_PKMNCENTERATTENTION, + [B_MSG_Z_RECOVER_HP] = STRINGID_ZMOVERESTOREHP, + [B_MSG_Z_STAT_UP] = STRINGID_ZMOVESTATUP, + [B_MSG_Z_HP_TRAP] = STRINGID_ZMOVEHPTRAP, +}; + const u16 gMentalHerbCureStringIds[] = { [B_MSG_MENTALHERBCURE_INFATUATION] = STRINGID_ATKGOTOVERINFATUATION, @@ -1365,7 +1394,7 @@ const u16 gMentalHerbCureStringIds[] = const u16 gTerrainStringIds[] = { - STRINGID_TERRAINBECOMESMISTY, STRINGID_TERRAINBECOMESGRASSY, STRINGID_TERRAINBECOMESELECTRIC, STRINGID_TERRAINBECOMESPSYCHIC + STRINGID_TERRAINBECOMESMISTY, STRINGID_TERRAINBECOMESGRASSY, STRINGID_TERRAINBECOMESELECTRIC, STRINGID_TERRAINBECOMESPSYCHIC, STRINGID_TERRAINREMOVED, }; const u16 gTerrainEndingStringIds[] = @@ -2794,7 +2823,9 @@ void BufferStringBattle(u16 stringID) } break; case STRINGID_USEDMOVE: // pokemon used a move msg - if (gBattleMsgDataPtr->currentMove >= MOVES_COUNT) + if (gBattleStruct->zmove.active && gBattleStruct->zmove.activeSplit != SPLIT_STATUS) + StringCopy(gBattleTextBuff3, GetZMoveName(gBattleMsgDataPtr->currentMove)); + else if (gBattleMsgDataPtr->currentMove >= MOVES_COUNT) StringCopy(gBattleTextBuff3, sATypeMove_Table[*(&gBattleStruct->stringMoveType)]); else StringCopy(gBattleTextBuff3, gMoveNames[gBattleMsgDataPtr->currentMove]); @@ -3222,13 +3253,17 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst) HANDLE_NICKNAME_STRING_CASE(gBattleScripting.battler) break; case B_TXT_CURRENT_MOVE: // current move name - if (gBattleMsgDataPtr->currentMove >= MOVES_COUNT) + if (gBattleStruct->zmove.active) + toCpy = GetZMoveName(gBattleMsgDataPtr->currentMove); + else if (gBattleMsgDataPtr->currentMove >= MOVES_COUNT) toCpy = sATypeMove_Table[gBattleStruct->stringMoveType]; else toCpy = gMoveNames[gBattleMsgDataPtr->currentMove]; break; case B_TXT_LAST_MOVE: // originally used move name - if (gBattleMsgDataPtr->originallyUsedMove >= MOVES_COUNT) + if (gBattleStruct->zmove.active) + toCpy = GetZMoveName(gBattleMsgDataPtr->originallyUsedMove); + else if (gBattleMsgDataPtr->originallyUsedMove >= MOVES_COUNT) toCpy = sATypeMove_Table[gBattleStruct->stringMoveType]; else toCpy = gMoveNames[gBattleMsgDataPtr->originallyUsedMove]; @@ -3558,7 +3593,7 @@ static void IllusionNickHack(u32 battlerId, u32 partyId, u8 *dst) GetMonData(mon, MON_DATA_NICKNAME, dst); } -static void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst) +void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst) { u32 srcID = 1; u32 value = 0; diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 001063c0c..2b201962a 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -5,6 +5,9 @@ #include "battle_ai_main.h" #include "battle_ai_util.h" #include "battle_scripts.h" +#include "battle_z_move.h" +#include "constants/moves.h" +#include "constants/abilities.h" #include "item.h" #include "util.h" #include "pokemon.h" @@ -1618,6 +1621,12 @@ static bool32 AccuracyCalcHelper(u16 move) RecordAbilityBattle(gBattlerTarget, ABILITY_NO_GUARD); return TRUE; } + + if (gBattleStruct->zmove.active && !(gStatuses3[gBattlerTarget] & STATUS3_SEMI_INVULNERABLE)) + { + JumpIfMoveFailed(7, move); + return TRUE; + } if ((gStatuses3[gBattlerTarget] & STATUS3_PHANTOM_FORCE) || (!(gBattleMoves[move].flags & (FLAG_DMG_IN_AIR | FLAG_DMG_2X_IN_AIR)) && gStatuses3[gBattlerTarget] & STATUS3_ON_AIR) @@ -5630,6 +5639,10 @@ static void Cmd_moveend(void) gSpecialStatuses[gBattlerAttacker].damagedMons = 0; gSpecialStatuses[gBattlerTarget].berryReduced = FALSE; gBattleScripting.moveEffect = 0; + // clear attacker z move data + gBattleStruct->zmove.active = FALSE; + gBattleStruct->zmove.toBeUsed[gBattlerAttacker] = MOVE_NONE; + gBattleStruct->zmove.effect = EFFECT_HIT; gBattleScripting.moveendState++; break; case MOVEEND_COUNT: @@ -6408,6 +6421,16 @@ static void Cmd_switchineffects(void) BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_StickyWebOnSwitchIn; } + else if (gBattleMons[gActiveBattler].hp != gBattleMons[gActiveBattler].maxHP && gBattleStruct->zmove.healReplacement) + { + gBattleStruct->zmove.healReplacement = FALSE; + gBattleMoveDamage = -1 * (gBattleMons[gActiveBattler].maxHP); + gBattleScripting.battler = gActiveBattler; + BattleScriptPushCursor(); + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_Z_HP_TRAP; + gBattlescriptCurrInstr = BattleScript_HealReplacementZMove; + return; + } else { // There is a hack here to ensure the truant counter will be 0 when the battler's next turn starts. @@ -7506,12 +7529,12 @@ static bool32 HasAttackerFaintedTarget(void) return FALSE; } -static void HandleTerrainMove(u32 moveEffect) +static void HandleTerrainMove(u16 move) { u32 statusFlag = 0; u8 *timer = NULL; - switch (moveEffect) + switch (gBattleMoves[move].effect) { case EFFECT_MISTY_TERRAIN: statusFlag = STATUS_FIELD_MISTY_TERRAIN, timer = &gFieldTimers.terrainTimer; @@ -7529,6 +7552,31 @@ static void HandleTerrainMove(u32 moveEffect) statusFlag = STATUS_FIELD_PSYCHIC_TERRAIN, timer = &gFieldTimers.terrainTimer; gBattleCommunication[MULTISTRING_CHOOSER] = 3; break; + case EFFECT_DAMAGE_SET_TERRAIN: + switch (gBattleMoves[move].argument) + { + case 0: //genesis supernova + statusFlag = STATUS_FIELD_PSYCHIC_TERRAIN, timer = &gFieldTimers.terrainTimer; + gBattleCommunication[MULTISTRING_CHOOSER] = 3; + break; + case 1: //splintered stormshards + if (!(gFieldStatuses & (STATUS_FIELD_MISTY_TERRAIN | STATUS_FIELD_GRASSY_TERRAIN | STATUS_FIELD_ELECTRIC_TERRAIN | STATUS_FIELD_PSYCHIC_TERRAIN))) + { + //no terrain to remove -> jump to battle script pointer + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + } + else + { + // remove all terrain + gFieldStatuses &= ~(STATUS_FIELD_MISTY_TERRAIN | STATUS_FIELD_GRASSY_TERRAIN | STATUS_FIELD_ELECTRIC_TERRAIN | STATUS_FIELD_PSYCHIC_TERRAIN); + gBattleCommunication[MULTISTRING_CHOOSER] = 4; + gBattlescriptCurrInstr += 7; + } + return; + default: + break; + } + break; } if (gFieldStatuses & statusFlag || statusFlag == 0) @@ -8433,7 +8481,7 @@ static void Cmd_various(void) } break; case VARIOUS_SET_TERRAIN: - HandleTerrainMove(gBattleMoves[gCurrentMove].effect); + HandleTerrainMove(gCurrentMove); return; case VARIOUS_TRY_ME_FIRST: if (GetBattlerTurnOrderNum(gBattlerAttacker) > GetBattlerTurnOrderNum(gBattlerTarget)) @@ -8994,6 +9042,9 @@ static void Cmd_various(void) gBattlescriptCurrInstr += 7; // exit if loop failed (failsafe) } return; + case VARIOUS_SET_Z_EFFECT: + SetZEffect(); //handles battle script jumping internally + return; case VARIOUS_MOVEEND_ITEM_EFFECTS: if (ItemBattleEffects(ITEMEFFECT_NORMAL, gActiveBattler, FALSE)) return; @@ -9361,24 +9412,8 @@ static void Cmd_various(void) gBattlescriptCurrInstr += 9; return; case VARIOUS_PHOTON_GEYSER_CHECK: - { - u32 attackerAtkStat = gBattleMons[gBattlerAttacker].attack; - u8 attackerAtkStage = gBattleMons[gBattlerAttacker].statStages[STAT_ATK]; - u32 attackerSpAtkStat = gBattleMons[gBattlerAttacker].spAttack; - - gSwapDamageCategory = FALSE; - - attackerAtkStat *= gStatStageRatios[attackerAtkStage][0]; - attackerAtkStat /= gStatStageRatios[attackerAtkStage][1]; - - attackerAtkStage = gBattleMons[gBattlerAttacker].statStages[STAT_SPATK]; - attackerSpAtkStat *= gStatStageRatios[attackerAtkStage][0]; - attackerSpAtkStat /= gStatStageRatios[attackerAtkStage][1]; - - if (attackerAtkStat > attackerSpAtkStat) - gSwapDamageCategory = TRUE; + gBattleStruct->swapDamageCategory = (GetSplitBasedOnStats(gActiveBattler) == SPLIT_SPECIAL); break; - } case VARIOUS_SHELL_SIDE_ARM_CHECK: // 0% chance GameFreak actually checks this way according to DaWobblefet, but this is the only functional explanation at the moment { u32 attackerAtkStat = gBattleMons[gBattlerAttacker].attack; @@ -9389,7 +9424,7 @@ static void Cmd_various(void) u32 physical; u32 special; - gSwapDamageCategory = FALSE; + gBattleStruct->swapDamageCategory = FALSE; statStage = gBattleMons[gBattlerAttacker].statStages[STAT_ATK]; attackerAtkStat *= gStatStageRatios[statStage][0]; @@ -9412,7 +9447,7 @@ static void Cmd_various(void) special = ((((2 * gBattleMons[gBattlerAttacker].level / 5 + 2) * gBattleMoves[gCurrentMove].power * attackerSpAtkStat) / targetSpDefStat) / 50); if (((physical > special) || (physical == special && (Random() % 2) == 0))) - gSwapDamageCategory = TRUE; + gBattleStruct->swapDamageCategory = TRUE; break; } case VARIOUS_JUMP_IF_LEAF_GUARD_PROTECTED: @@ -13594,7 +13629,7 @@ static void Cmd_handleballthrow(void) else catchRate = gBaseStats[gBattleMons[gBattlerTarget].species].catchRate; - #ifdef POKEMON_EXPANSION + #if defined POKEMON_EXPANSION && defined ITEM_EXPANSION if (gBaseStats[gBattleMons[gBattlerTarget].species].flags & FLAG_ULTRA_BEAST) { if (gLastUsedItem == ITEM_BEAST_BALL) @@ -13772,7 +13807,7 @@ static void Cmd_handleballthrow(void) #endif } - #ifdef POKEMON_EXPANSION + #if defined POKEMON_EXPANSION && defined ITEM_EXPANSION } #endif diff --git a/src/battle_util.c b/src/battle_util.c index d01b55e2b..5e0cd117b 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -268,15 +268,15 @@ void HandleAction_UseMove(void) gCurrentMove = gChosenMove = gLockedMoves[gBattlerAttacker]; } // encore forces you to use the same move - else if (gDisableStructs[gBattlerAttacker].encoredMove != MOVE_NONE - && gDisableStructs[gBattlerAttacker].encoredMove == gBattleMons[gBattlerAttacker].moves[gDisableStructs[gBattlerAttacker].encoredMovePos]) + else if (!gBattleStruct->zmove.active && gDisableStructs[gBattlerAttacker].encoredMove != MOVE_NONE + && gDisableStructs[gBattlerAttacker].encoredMove == gBattleMons[gBattlerAttacker].moves[gDisableStructs[gBattlerAttacker].encoredMovePos]) { gCurrentMove = gChosenMove = gDisableStructs[gBattlerAttacker].encoredMove; gCurrMovePos = gChosenMovePos = gDisableStructs[gBattlerAttacker].encoredMovePos; *(gBattleStruct->moveTarget + gBattlerAttacker) = GetMoveTarget(gCurrentMove, NO_TARGET_OVERRIDE); } // check if the encored move wasn't overwritten - else if (gDisableStructs[gBattlerAttacker].encoredMove != MOVE_NONE + else if (!gBattleStruct->zmove.active && gDisableStructs[gBattlerAttacker].encoredMove != MOVE_NONE && gDisableStructs[gBattlerAttacker].encoredMove != gBattleMons[gBattlerAttacker].moves[gDisableStructs[gBattlerAttacker].encoredMovePos]) { gCurrMovePos = gChosenMovePos = gDisableStructs[gBattlerAttacker].encoredMovePos; @@ -295,6 +295,12 @@ void HandleAction_UseMove(void) { gCurrentMove = gChosenMove = gBattleMons[gBattlerAttacker].moves[gCurrMovePos]; } + + // check z move used + if (gBattleStruct->zmove.toBeUsed[gBattlerAttacker] != MOVE_NONE && !IS_MOVE_STATUS(gCurrentMove)) + { + gCurrentMove = gBattleStruct->zmove.toBeUsed[gBattlerAttacker]; + } if (gBattleMons[gBattlerAttacker].hp != 0) { @@ -1758,7 +1764,7 @@ u8 TrySetCantSelectMoveBattleScript(void) } } - if (gDisableStructs[gActiveBattler].tauntTimer != 0 && gBattleMoves[move].power == 0) + if (!gBattleStruct->zmove.active && gDisableStructs[gActiveBattler].tauntTimer != 0 && gBattleMoves[move].power == 0) { gCurrentMove = move; if (gBattleTypeFlags & BATTLE_TYPE_PALACE) @@ -1773,7 +1779,7 @@ u8 TrySetCantSelectMoveBattleScript(void) } } - if (gDisableStructs[gActiveBattler].throatChopTimer != 0 && gBattleMoves[move].flags & FLAG_SOUND) + if (!gBattleStruct->zmove.active && gDisableStructs[gActiveBattler].throatChopTimer != 0 && gBattleMoves[move].flags & FLAG_SOUND) { gCurrentMove = move; if (gBattleTypeFlags & BATTLE_TYPE_PALACE) @@ -1788,7 +1794,7 @@ u8 TrySetCantSelectMoveBattleScript(void) } } - if (GetImprisonedMovesCount(gActiveBattler, move)) + if (!gBattleStruct->zmove.active && GetImprisonedMovesCount(gActiveBattler, move)) { gCurrentMove = move; if (gBattleTypeFlags & BATTLE_TYPE_PALACE) @@ -1803,7 +1809,7 @@ u8 TrySetCantSelectMoveBattleScript(void) } } - if (IsGravityPreventingMove(move)) + if (!gBattleStruct->zmove.active && IsGravityPreventingMove(move)) { gCurrentMove = move; if (gBattleTypeFlags & BATTLE_TYPE_PALACE) @@ -1818,7 +1824,7 @@ u8 TrySetCantSelectMoveBattleScript(void) } } - if (IsHealBlockPreventingMove(gActiveBattler, move)) + if (!gBattleStruct->zmove.active && IsHealBlockPreventingMove(gActiveBattler, move)) { gCurrentMove = move; if (gBattleTypeFlags & BATTLE_TYPE_PALACE) @@ -1833,7 +1839,7 @@ u8 TrySetCantSelectMoveBattleScript(void) } } - if (IsBelchPreventingMove(gActiveBattler, move)) + if (!gBattleStruct->zmove.active && IsBelchPreventingMove(gActiveBattler, move)) { gCurrentMove = move; if (gBattleTypeFlags & BATTLE_TYPE_PALACE) @@ -3373,6 +3379,7 @@ enum CANCELLER_POWDER_MOVE, CANCELLER_POWDER_STATUS, CANCELLER_THROAT_CHOP, + CANCELLER_Z_MOVES, CANCELLER_END, CANCELLER_PSYCHIC_TERRAIN, CANCELLER_END2, @@ -3711,6 +3718,33 @@ u8 AtkCanceller_UnableToUseMove(void) } gBattleStruct->atkCancellerTracker++; break; + case CANCELLER_Z_MOVES: + if (gBattleStruct->zmove.toBeUsed[gBattlerAttacker] != MOVE_NONE) + { + //attacker has a queued z move + gBattleStruct->zmove.active = TRUE; + gBattleStruct->zmove.activeSplit = gBattleStruct->zmove.splits[gBattlerAttacker]; + RecordItemEffectBattle(gBattlerAttacker, HOLD_EFFECT_Z_CRYSTAL); + gBattleStruct->zmove.used[gBattlerAttacker] = TRUE; + if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && IsPartnerMonFromSameTrainer(gBattlerAttacker)) + gBattleStruct->zmove.used[BATTLE_PARTNER(gBattlerAttacker)] = TRUE; //if 1v1 double, set partner used flag as well + + gBattleScripting.battler = gBattlerAttacker; + if (gBattleStruct->zmove.activeSplit == SPLIT_STATUS) + { + gBattleStruct->zmove.effect = gBattleMoves[gBattleStruct->zmove.baseMoves[gBattlerAttacker]].zMoveEffect; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_ZMoveActivateStatus; + } + else + { + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_ZMoveActivateDamaging; + } + effect = 1; + } + gBattleStruct->atkCancellerTracker++; + break; case CANCELLER_END: break; } @@ -7706,7 +7740,7 @@ bool32 IsMoveMakingContact(u16 move, u8 battlerAtk) { if (!(gBattleMoves[move].flags & FLAG_MAKES_CONTACT)) { - if (gBattleMoves[move].effect == EFFECT_SHELL_SIDE_ARM && gSwapDamageCategory) + if (gBattleMoves[move].effect == EFFECT_SHELL_SIDE_ARM && gBattleStruct->swapDamageCategory) return TRUE; else return FALSE; @@ -7739,7 +7773,7 @@ bool32 IsBattlerProtected(u8 battlerId, u16 move) // Protective Pads doesn't stop Unseen Fist from bypassing Protect effects, so IsMoveMakingContact() isn't used here. // This means extra logic is needed to handle Shell Side Arm. if (GetBattlerAbility(gBattlerAttacker) == ABILITY_UNSEEN_FIST - && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT || (gBattleMoves[move].effect == EFFECT_SHELL_SIDE_ARM && gSwapDamageCategory))) + && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT || (gBattleMoves[move].effect == EFFECT_SHELL_SIDE_ARM && gBattleStruct->swapDamageCategory))) return FALSE; else if (!(gBattleMoves[move].flags & FLAG_PROTECT_AFFECTED)) return FALSE; @@ -8012,6 +8046,9 @@ static u16 CalcMoveBasePower(u16 move, u8 battlerAtk, u8 battlerDef) u32 i; u16 basePower = gBattleMoves[move].power; u32 weight, hpFraction, speed; + + if (gBattleStruct->zmove.active) + return gBattleMoves[gBattleStruct->zmove.baseMoves[battlerAtk]].zMovePower; switch (gBattleMoves[move].effect) { @@ -9396,6 +9433,11 @@ bool32 CanMegaEvolve(u8 battlerId) // Check if trainer already mega evolved a pokemon. if (mega->alreadyEvolved[battlerPosition]) return FALSE; + + // Cannot use z move and mega evolve on same turn + if (gBattleStruct->zmove.toBeUsed[battlerId]) + return FALSE; + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && IsPartnerMonFromSameTrainer(battlerId) && (mega->alreadyEvolved[partnerPosition] || (mega->toEvolve & gBitTable[BATTLE_PARTNER(battlerId)]))) @@ -9641,7 +9683,9 @@ bool8 ShouldGetStatBadgeBoost(u16 badgeFlag, u8 battlerId) u8 GetBattleMoveSplit(u32 moveId) { - if (gSwapDamageCategory) // Photon Geyser, Shell Side Arm, Light That Burns the Sky + if (gBattleStruct != NULL && gBattleStruct->zmove.active && !IS_MOVE_STATUS(moveId)) + return gBattleStruct->zmove.activeSplit; + if (gBattleStruct != NULL && gBattleStruct->swapDamageCategory) // Photon Geyser, Shell Side Arm, Light That Burns the Sky return SPLIT_PHYSICAL; else if (IS_MOVE_STATUS(moveId) || B_PHYSICAL_SPECIAL_SPLIT >= GEN_4) return gBattleMoves[moveId].split; @@ -9689,6 +9733,24 @@ static bool32 IsUnnerveAbilityOnOpposingSide(u8 battlerId) return FALSE; } +// Photon geyser & light that burns the sky +u8 GetSplitBasedOnStats(u8 battlerId) +{ + u32 attack = gBattleMons[battlerId].attack; + u32 spAttack = gBattleMons[battlerId].spAttack; + + attack = attack * gStatStageRatios[gBattleMons[battlerId].statStages[STAT_ATK]][0]; + attack = attack / gStatStageRatios[gBattleMons[battlerId].statStages[STAT_ATK]][1]; + + spAttack = spAttack * gStatStageRatios[gBattleMons[battlerId].statStages[STAT_SPATK]][0]; + spAttack = spAttack / gStatStageRatios[gBattleMons[battlerId].statStages[STAT_SPATK]][1]; + + if (spAttack >= attack) + return SPLIT_SPECIAL; + else + return SPLIT_PHYSICAL; +} + bool32 TestMoveFlags(u16 move, u32 flag) { if (gBattleMoves[move].flags & flag) @@ -9707,7 +9769,7 @@ struct Pokemon *GetBattlerPartyData(u8 battlerId) return mon; } -//Make sure the input bank is any bank on the specific mon's side +// Make sure the input bank is any bank on the specific mon's side bool32 CanFling(u8 battlerId) { u16 item = gBattleMons[battlerId].item; @@ -9726,7 +9788,7 @@ bool32 CanFling(u8 battlerId) return TRUE; } -// ability checks +// Ability checks bool32 IsRolePlayBannedAbilityAtk(u16 ability) { u32 i; diff --git a/src/battle_z_move.c b/src/battle_z_move.c new file mode 100644 index 000000000..a91c9ec5f --- /dev/null +++ b/src/battle_z_move.c @@ -0,0 +1,678 @@ +#include "global.h" +#include "malloc.h" +#include "battle.h" +#include "pokemon.h" +#include "battle_ai_main.h" +#include "battle_ai_util.h" +#include "battle_controllers.h" +#include "battle_interface.h" +#include "battle_message.h" +#include "battle_z_move.h" +#include "battle_scripts.h" +#include "graphics.h" +#include "sprite.h" +#include "window.h" +#include "string_util.h" +#include "text.h" +#include "item.h" +#include "strings.h" +#include "sound.h" +#include "constants/songs.h" +#include "decompress.h" +#include "task.h" +#include "util.h" +#include "gpu_regs.h" +#include "battle_message.h" +#include "pokedex.h" +#include "palette.h" +#include "international_string_util.h" +#include "safari_zone.h" +#include "battle_anim.h" +#include "constants/battle_anim.h" +#include "constants/rgb.h" +#include "battle_debug.h" +#include "constants/battle_config.h" +#include "data.h" +#include "pokemon_summary_screen.h" +#include "constants/songs.h" +#include "constants/items.h" +#include "constants/species.h" +#include "constants/hold_effects.h" +#include "constants/battle_string_ids.h" +#include "constants/battle_move_effects.h" +#include "constants/abilities.h" +#include "constants/moves.h" + +#define STAT_STAGE(battler, stat) (gBattleMons[battler].statStages[stat - 1]) + +// Function Declarations +static void SpriteCB_ZMoveTrigger(struct Sprite *sprite); +static u16 GetSignatureZMove(u16 move, u16 species, u16 item); +static u16 GetTypeBasedZMove(u16 move, u8 battler); +static void ZMoveSelectionDisplayPpNumber(void); +static void ZMoveSelectionDisplayPower(u16 move, u16 zMove); +static void ShowZMoveTriggerSprite(void); +static bool32 AreStatsMaxed(u8 battlerId, u8 n); +static u8 GetZMoveScore(u8 battlerAtk, u8 battlerDef, u16 baseMove, u16 zMove); + +// Const Data +static const struct SignatureZMove sSignatureZMoves[] = +{ + #ifdef POKEMON_EXPANSION + {SPECIES_PIKACHU_COSPLAY, ITEM_PIKANIUM_Z, MOVE_VOLT_TACKLE, MOVE_CATASTROPIKA}, + {SPECIES_PIKACHU_ROCK_STAR, ITEM_PIKANIUM_Z, MOVE_VOLT_TACKLE, MOVE_CATASTROPIKA}, + {SPECIES_PIKACHU_BELLE, ITEM_PIKANIUM_Z, MOVE_VOLT_TACKLE, MOVE_CATASTROPIKA}, + {SPECIES_PIKACHU_POP_STAR, ITEM_PIKANIUM_Z, MOVE_VOLT_TACKLE, MOVE_CATASTROPIKA}, + {SPECIES_PIKACHU_PH_D, ITEM_PIKANIUM_Z, MOVE_VOLT_TACKLE, MOVE_CATASTROPIKA}, + {SPECIES_PIKACHU_LIBRE, ITEM_PIKANIUM_Z, MOVE_VOLT_TACKLE, MOVE_CATASTROPIKA}, + + {SPECIES_RAICHU_ALOLAN, ITEM_ALORAICHIUM_Z, MOVE_THUNDERBOLT, MOVE_STOKED_SPARKSURFER}, + {SPECIES_DECIDUEYE, ITEM_DECIDIUM_Z, MOVE_SPIRIT_SHACKLE, MOVE_SINISTER_ARROW_RAID}, + {SPECIES_INCINEROAR, ITEM_INCINIUM_Z, MOVE_DARKEST_LARIAT, MOVE_MALICIOUS_MOONSAULT}, + {SPECIES_KOMMO_O, ITEM_KOMMONIUM_Z, MOVE_CLANGING_SCALES, MOVE_CLANGOROUS_SOULBLAZE}, + {SPECIES_LUNALA, ITEM_LUNALIUM_Z, MOVE_MOONGEIST_BEAM, MOVE_MENACING_MOONRAZE_MAELSTROM}, + {SPECIES_NECROZMA_DAWN_WINGS, ITEM_LUNALIUM_Z, MOVE_MOONGEIST_BEAM, MOVE_MENACING_MOONRAZE_MAELSTROM}, + {SPECIES_LYCANROC, ITEM_LYCANIUM_Z, MOVE_STONE_EDGE, MOVE_SPLINTERED_STORMSHARDS}, + {SPECIES_LYCANROC_MIDNIGHT, ITEM_LYCANIUM_Z, MOVE_STONE_EDGE, MOVE_SPLINTERED_STORMSHARDS}, + + {SPECIES_LYCANROC_DUSK, ITEM_LYCANIUM_Z, MOVE_STONE_EDGE, MOVE_SPLINTERED_STORMSHARDS}, + {SPECIES_MARSHADOW, ITEM_MARSHADIUM_Z, MOVE_SPECTRAL_THIEF, MOVE_SOUL_STEALING_7_STAR_STRIKE}, + {SPECIES_MIMIKYU, ITEM_MIMIKIUM_Z, MOVE_PLAY_ROUGH, MOVE_LETS_SNUGGLE_FOREVER}, + {SPECIES_MIMIKYU_BUSTED, ITEM_MIMIKIUM_Z, MOVE_PLAY_ROUGH, MOVE_LETS_SNUGGLE_FOREVER}, + {SPECIES_PIKACHU_ORIGINAL_CAP, ITEM_PIKASHUNIUM_Z, MOVE_THUNDERBOLT, MOVE_10000000_VOLT_THUNDERBOLT}, + {SPECIES_PIKACHU_HOENN_CAP, ITEM_PIKASHUNIUM_Z, MOVE_THUNDERBOLT, MOVE_10000000_VOLT_THUNDERBOLT}, + {SPECIES_PIKACHU_SINNOH_CAP, ITEM_PIKASHUNIUM_Z, MOVE_THUNDERBOLT, MOVE_10000000_VOLT_THUNDERBOLT}, + {SPECIES_PIKACHU_UNOVA_CAP, ITEM_PIKASHUNIUM_Z, MOVE_THUNDERBOLT, MOVE_10000000_VOLT_THUNDERBOLT}, + {SPECIES_PIKACHU_KALOS_CAP, ITEM_PIKASHUNIUM_Z, MOVE_THUNDERBOLT, MOVE_10000000_VOLT_THUNDERBOLT}, + {SPECIES_PIKACHU_ALOLA_CAP, ITEM_PIKASHUNIUM_Z, MOVE_THUNDERBOLT, MOVE_10000000_VOLT_THUNDERBOLT}, + {SPECIES_PIKACHU_PARTNER_CAP, ITEM_PIKASHUNIUM_Z, MOVE_THUNDERBOLT, MOVE_10000000_VOLT_THUNDERBOLT}, + {SPECIES_PIKACHU_WORLD_CAP, ITEM_PIKASHUNIUM_Z, MOVE_THUNDERBOLT, MOVE_10000000_VOLT_THUNDERBOLT}, + {SPECIES_PRIMARINA, ITEM_PRIMARIUM_Z, MOVE_SPARKLING_ARIA, MOVE_OCEANIC_OPERETTA}, + {SPECIES_SOLGALEO, ITEM_SOLGANIUM_Z, MOVE_SUNSTEEL_STRIKE, MOVE_SEARING_SUNRAZE_SMASH}, + {SPECIES_NECROZMA_DUSK_MANE, ITEM_SOLGANIUM_Z, MOVE_SUNSTEEL_STRIKE, MOVE_SEARING_SUNRAZE_SMASH}, + {SPECIES_TAPU_KOKO, ITEM_TAPUNIUM_Z, MOVE_NATURES_MADNESS, MOVE_GUARDIAN_OF_ALOLA}, + {SPECIES_TAPU_BULU, ITEM_TAPUNIUM_Z, MOVE_NATURES_MADNESS, MOVE_GUARDIAN_OF_ALOLA}, + {SPECIES_TAPU_LELE, ITEM_TAPUNIUM_Z, MOVE_NATURES_MADNESS, MOVE_GUARDIAN_OF_ALOLA}, + {SPECIES_TAPU_FINI, ITEM_TAPUNIUM_Z, MOVE_NATURES_MADNESS, MOVE_GUARDIAN_OF_ALOLA}, + {SPECIES_NECROZMA_ULTRA, ITEM_ULTRANECROZIUM_Z, MOVE_PHOTON_GEYSER, MOVE_LIGHT_THAT_BURNS_THE_SKY}, + #endif + {SPECIES_MEW, ITEM_MEWNIUM_Z, MOVE_PSYCHIC, MOVE_GENESIS_SUPERNOVA}, + {SPECIES_PIKACHU, ITEM_PIKANIUM_Z, MOVE_VOLT_TACKLE, MOVE_CATASTROPIKA}, + {SPECIES_EEVEE, ITEM_EEVIUM_Z, MOVE_LAST_RESORT, MOVE_EXTREME_EVOBOOST}, + {SPECIES_SNORLAX, ITEM_SNORLIUM_Z, MOVE_GIGA_IMPACT, MOVE_PULVERIZING_PANCAKE}, +}; + +static const u8 sText_ResetStats[] = _("Reset Lowered Stats"); +static const u8 sText_StatsPlus[] = _("+ All Stats"); +static const u8 sText_StatsPlus2[] = _("++ All Stats"); +static const u8 sText_CritHitsPlus[] = _("+ Critical Hit Chance"); +static const u8 sText_FollowMe[] = _("Follow Me"); +static const u8 sText_RecoverHP[] = _("Recover HP"); +static const u8 sText_HealAllyHP[] = _("Heal Replacement HP"); +static const u8 sText_PowerColon[] = _("Power: "); + +static const u32 sZMoveTriggerGfx[] = INCBIN_U32("graphics/battle_interface/z_move_trigger.4bpp.lz"); +static const u16 sZMoveTriggerPal[] = INCBIN_U16("graphics/battle_interface/z_move_trigger.gbapal"); + +static const struct CompressedSpriteSheet sSpriteSheet_ZMoveTrigger = { + sZMoveTriggerGfx, (32 * 32) / 2, TAG_ZMOVE_TRIGGER_TILE +}; + +static const struct SpritePalette sSpritePalette_ZMoveTrigger = { + sZMoveTriggerPal, TAG_ZMOVE_TRIGGER_PAL +}; + +static const struct OamData sOamData_ZMoveTrigger = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(32x32), + .size = SPRITE_SIZE(32x32), + .priority = 1, +}; + +static const struct SpriteTemplate sSpriteTemplate_ZMoveTrigger = +{ + .tileTag = TAG_ZMOVE_TRIGGER_TILE, + .paletteTag = TAG_ZMOVE_TRIGGER_PAL, + .oam = &sOamData_ZMoveTrigger, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_ZMoveTrigger +}; + +// Functions +bool8 IsZMove(u16 move) +{ + return move >= FIRST_Z_MOVE && move <= LAST_Z_MOVE; +} + +void QueueZMove(u8 battlerId, u16 baseMove) +{ + gBattleStruct->zmove.toBeUsed[battlerId] = gBattleStruct->zmove.chosenZMove; + gBattleStruct->zmove.baseMoves[battlerId] = baseMove; + if (gBattleStruct->zmove.chosenZMove == MOVE_LIGHT_THAT_BURNS_THE_SKY) + gBattleStruct->zmove.splits[battlerId] = GetSplitBasedOnStats(battlerId); + gBattleStruct->zmove.splits[battlerId] = gBattleMoves[baseMove].split; +} + +bool32 IsViableZMove(u8 battlerId, u16 move) +{ + struct Pokemon *mon; + struct MegaEvolutionData *mega = &(((struct ChooseMoveStruct*)(&gBattleResources->bufferA[gActiveBattler][4]))->mega); + u8 battlerPosition = GetBattlerPosition(battlerId); + u8 partnerPosition = GetBattlerPosition(BATTLE_PARTNER(battlerId)); + u32 item; + u16 holdEffect; + u16 species; + + if (gBattleStruct->zmove.used[battlerId]) + return FALSE; + + species = gBattleMons[battlerId].species; + item = gBattleMons[battlerId].item; + if (gBattleTypeFlags & (BATTLE_TYPE_SAFARI | BATTLE_TYPE_WALLY_TUTORIAL | BATTLE_TYPE_FRONTIER)) + return FALSE; + + #ifdef ITEM_Z_RING + if ((GetBattlerPosition(battlerId) == B_POSITION_PLAYER_LEFT || (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) && GetBattlerPosition(battlerId) == B_POSITION_PLAYER_RIGHT)) && !CheckBagHasItem(ITEM_Z_RING, 1)) + return FALSE; + #endif + + if (mega->alreadyEvolved[battlerPosition]) + return FALSE; // Trainer has mega evolved + + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + { + if (IsPartnerMonFromSameTrainer(battlerId) && (mega->alreadyEvolved[partnerPosition] || (mega->toEvolve & gBitTable[BATTLE_PARTNER(battlerId)]))) + return FALSE; // Partner has mega evolved or is about to mega evolve + } + + if (B_ENABLE_DEBUG && gBattleStruct->debugHoldEffects[battlerId]) + holdEffect = gBattleStruct->debugHoldEffects[battlerId]; + else if (item == ITEM_ENIGMA_BERRY) + return FALSE; // HoldEffect = gEnigmaBerries[battlerId].holdEffect; + else + holdEffect = ItemId_GetHoldEffect(item); + + #ifdef ITEM_ULTRANECROZIUM_Z + if (holdEffect == HOLD_EFFECT_Z_CRYSTAL || item == ITEM_ULTRANECROZIUM_Z) + #else + if (holdEffect == HOLD_EFFECT_Z_CRYSTAL) + #endif + { + u16 zMove = GetSignatureZMove(move, gBattleMons[battlerId].species, item); + if (zMove != MOVE_NONE) + { + gBattleStruct->zmove.chosenZMove = zMove; // Signature z move exists + return TRUE; + } + + if (move != MOVE_NONE && zMove != MOVE_Z_STATUS && gBattleMoves[move].type == ItemId_GetSecondaryId(item)) + { + if (IS_MOVE_STATUS(gBattleMoves[move].split)) + gBattleStruct->zmove.chosenZMove = move; + else + gBattleStruct->zmove.chosenZMove = GetTypeBasedZMove(move, battlerId); + + return TRUE; + } + } + + return FALSE; +} + +void GetUsableZMoves(u8 battlerId, u16 *moves) +{ + u32 i; + gBattleStruct->zmove.possibleZMoves[battlerId] = 0; + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (moves[i] != MOVE_NONE && IsViableZMove(battlerId, moves[i])) + gBattleStruct->zmove.possibleZMoves[battlerId] |= (1 << i); + } +} + +bool32 IsZMoveUsable(u8 battlerId, u16 moveIndex) +{ + if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && IsPartnerMonFromSameTrainer(battlerId) && gBattleStruct->zmove.toBeUsed[BATTLE_PARTNER(battlerId)] != MOVE_NONE) + return FALSE; // Player's other mon has a z move queued up already + if (gBattleStruct->zmove.possibleZMoves[battlerId] & (1 << moveIndex)) + return TRUE; + return FALSE; +} + +bool32 TryChangeZIndicator(u8 battlerId, u8 moveIndex) +{ + bool32 viableZMove = IsZMoveUsable(battlerId, moveIndex); + + if (gBattleStruct->zmove.viable && !viableZMove) + HideZMoveTriggerSprite(); // Was a viable z move, now is not -> slide out + else if (!gBattleStruct->zmove.viable && viableZMove) + ShowZMoveTriggerSprite(); // Was not a viable z move, now is -> slide back in +} + +#define SINGLES_Z_TRIGGER_POS_X_OPTIMAL (29) +#define SINGLES_Z_TRIGGER_POS_X_PRIORITY (29) +#define SINGLES_Z_TRIGGER_POS_X_SLIDE (15) +#define SINGLES_Z_TRIGGER_POS_Y_DIFF (-10) + +#define DOUBLES_Z_TRIGGER_POS_X_OPTIMAL SINGLES_Z_TRIGGER_POS_X_OPTIMAL +#define DOUBLES_Z_TRIGGER_POS_X_PRIORITY SINGLES_Z_TRIGGER_POS_X_PRIORITY +#define DOUBLES_Z_TRIGGER_POS_X_SLIDE SINGLES_Z_TRIGGER_POS_X_SLIDE +#define DOUBLES_Z_TRIGGER_POS_Y_DIFF (-4) + +#define tBattler data[0] +#define tHide data[1] + +void CreateZMoveTriggerSprite(u8 battlerId, bool8 viable) +{ + s16 x, y; + + LoadSpritePalette(&sSpritePalette_ZMoveTrigger); + if (GetSpriteTileStartByTag(TAG_ZMOVE_TRIGGER_TILE) == 0xFFFF) + LoadCompressedSpriteSheetUsingHeap(&sSpriteSheet_ZMoveTrigger); + + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + { + x = gSprites[gHealthboxSpriteIds[battlerId]].x - DOUBLES_Z_TRIGGER_POS_X_SLIDE; + y = gSprites[gHealthboxSpriteIds[battlerId]].y - DOUBLES_Z_TRIGGER_POS_Y_DIFF; + } + else + { + x = gSprites[gHealthboxSpriteIds[battlerId]].x - SINGLES_Z_TRIGGER_POS_X_SLIDE; + y = gSprites[gHealthboxSpriteIds[battlerId]].y - SINGLES_Z_TRIGGER_POS_Y_DIFF, 0; + } + + if (gBattleStruct->zmove.triggerSpriteId == 0xFF) + gBattleStruct->zmove.triggerSpriteId = CreateSprite(&sSpriteTemplate_ZMoveTrigger, x, y, 0); + + gSprites[gBattleStruct->zmove.triggerSpriteId].tBattler = battlerId; + gSprites[gBattleStruct->zmove.triggerSpriteId].tHide = (viable == TRUE) ? FALSE : TRUE; +} + +static void SpriteCB_ZMoveTrigger(struct Sprite *sprite) +{ + s32 xSlide, xPriority, xOptimal; + s32 yDiff; + + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + { + xSlide = DOUBLES_Z_TRIGGER_POS_X_SLIDE; + xPriority = DOUBLES_Z_TRIGGER_POS_X_PRIORITY; + xOptimal = DOUBLES_Z_TRIGGER_POS_X_OPTIMAL; + yDiff = DOUBLES_Z_TRIGGER_POS_Y_DIFF; + } + else + { + xSlide = SINGLES_Z_TRIGGER_POS_X_SLIDE; + xPriority = SINGLES_Z_TRIGGER_POS_X_PRIORITY; + xOptimal = SINGLES_Z_TRIGGER_POS_X_OPTIMAL; + yDiff = SINGLES_Z_TRIGGER_POS_Y_DIFF; + } + + if (sprite->tHide) + { + if (sprite->x != gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xSlide) + sprite->x++; + + if (sprite->x >= gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xPriority) + sprite->oam.priority = 2; + else + sprite->oam.priority = 1; + + sprite->y = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y - yDiff; + sprite->y2 = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y2 - yDiff; + if (sprite->x == gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xSlide) + DestroyZMoveTriggerSprite(); + } + else + { + if (sprite->x != gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xOptimal) + { + sprite->x--; + sprite->oam.priority = 2; + } + else + { + sprite->oam.priority = 1; + } + sprite->y = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y - yDiff; + sprite->y2 = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y2 - yDiff; + } +} + +bool32 IsZMoveTriggerSpriteActive(void) +{ + if (GetSpriteTileStartByTag(TAG_ZMOVE_TRIGGER_TILE) == 0xFFFF) + return FALSE; + else if (IndexOfSpritePaletteTag(TAG_ZMOVE_TRIGGER_PAL) != 0xFF) + return TRUE; + else + return FALSE; +} + +void HideZMoveTriggerSprite(void) +{ + struct Sprite *sprite = &gSprites[gBattleStruct->zmove.triggerSpriteId]; + sprite->tHide = TRUE; + gBattleStruct->zmove.viable = FALSE; +} + +static void ShowZMoveTriggerSprite(void) +{ + struct Sprite *sprite = &gSprites[gBattleStruct->zmove.triggerSpriteId]; + gBattleStruct->zmove.viable = TRUE; + CreateZMoveTriggerSprite(sprite->tBattler, TRUE); +} + +void DestroyZMoveTriggerSprite(void) +{ + FreeSpritePaletteByTag(TAG_ZMOVE_TRIGGER_PAL); + FreeSpriteTilesByTag(TAG_ZMOVE_TRIGGER_TILE); + if (gBattleStruct->zmove.triggerSpriteId != 0xFF) + DestroySprite(&gSprites[gBattleStruct->zmove.triggerSpriteId]); + + gBattleStruct->zmove.triggerSpriteId = 0xFF; +} + +static u16 GetSignatureZMove(u16 move, u16 species, u16 item) +{ + u32 i; + + // Check signature z move + for (i = 0; i < ARRAY_COUNT(sSignatureZMoves); ++i) + { + if (sSignatureZMoves[i].item == item && sSignatureZMoves[i].species == species && sSignatureZMoves[i].move == move) + return sSignatureZMoves[i].zmove; + } + + return MOVE_NONE; +} + +static u16 GetTypeBasedZMove(u16 move, u8 battler) +{ + u8 moveType = gBattleMoves[move].type; + + // Get z move from type + if (moveType < TYPE_FIRE) + return MOVE_BREAKNECK_BLITZ + moveType; + else if (moveType >= TYPE_FAIRY) + return MOVE_TWINKLE_TACKLE + (moveType - TYPE_FAIRY); + else + return MOVE_BREAKNECK_BLITZ + (moveType - 1); +} + +bool32 MoveSelectionDisplayZMove(u16 zmove) +{ + u32 i; + struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct*)(&gBattleResources->bufferA[gActiveBattler][4]); + u16 move = moveInfo->moves[gMoveSelectionCursor[gActiveBattler]]; + + PlaySE(SE_SELECT); + gBattleStruct->zmove.viewing = TRUE; + if (zmove != MOVE_NONE) + { + // Clear move slots + for (i = 0; i < MAX_MON_MOVES; ++i) + { + MoveSelectionDestroyCursorAt(i); + StringCopy(gDisplayedStringBattle, gText_EmptyString2); + BattlePutTextOnWindow(gDisplayedStringBattle, i + 3); + } + + if (IS_MOVE_STATUS(move)) + { + u8 zEffect = gBattleMoves[move].zMoveEffect; + + gDisplayedStringBattle[0] = EOS; + + if (zEffect == Z_EFFECT_CURSE) + { + if (moveInfo->monType1 == TYPE_GHOST || moveInfo->monType2 == TYPE_GHOST || moveInfo->monType3 == TYPE_GHOST) + zEffect = Z_EFFECT_RECOVER_HP; + else + zEffect = Z_EFFECT_ATK_UP_1; + } + + switch (zEffect) + { + case Z_EFFECT_RESET_STATS: + StringCopy(gDisplayedStringBattle, sText_ResetStats); + break; + case Z_EFFECT_ALL_STATS_UP_1: + StringCopy(gDisplayedStringBattle, sText_StatsPlus); + break; + case Z_EFFECT_BOOST_CRITS: + StringCopy(gDisplayedStringBattle, sText_CritHitsPlus); + break; + case Z_EFFECT_FOLLOW_ME: + StringCopy(gDisplayedStringBattle, sText_FollowMe); + break; + case Z_EFFECT_RECOVER_HP: + StringCopy(gDisplayedStringBattle, sText_RecoverHP); + break; + case Z_EFFECT_RESTORE_REPLACEMENT_HP: + StringCopy(gDisplayedStringBattle, sText_HealAllyHP); + break; + case Z_EFFECT_ATK_UP_1: + case Z_EFFECT_DEF_UP_1: + case Z_EFFECT_SPD_UP_1: + case Z_EFFECT_SPATK_UP_1: + case Z_EFFECT_SPDEF_UP_1: + case Z_EFFECT_ACC_UP_1: + case Z_EFFECT_EVSN_UP_1: + gDisplayedStringBattle[0] = CHAR_PLUS; + gDisplayedStringBattle[1] = 0; + gDisplayedStringBattle[2] = EOS; + PREPARE_STAT_BUFFER(gBattleTextBuff1, zEffect - Z_EFFECT_ATK_UP_1 + 1); + ExpandBattleTextBuffPlaceholders(gBattleTextBuff1, gDisplayedStringBattle + 2); + break; + case Z_EFFECT_ATK_UP_2: + case Z_EFFECT_DEF_UP_2: + case Z_EFFECT_SPD_UP_2: + case Z_EFFECT_SPATK_UP_2: + case Z_EFFECT_SPDEF_UP_2: + case Z_EFFECT_ACC_UP_2: + case Z_EFFECT_EVSN_UP_2: + gDisplayedStringBattle[0] = CHAR_PLUS; + gDisplayedStringBattle[1] = CHAR_PLUS; + gDisplayedStringBattle[2] = 0; + gDisplayedStringBattle[3] = EOS; + PREPARE_STAT_BUFFER(gBattleTextBuff1, zEffect - Z_EFFECT_ATK_UP_2 + 1); + ExpandBattleTextBuffPlaceholders(gBattleTextBuff1, gDisplayedStringBattle + 3); + break; + case Z_EFFECT_ATK_UP_3: + case Z_EFFECT_DEF_UP_3: + case Z_EFFECT_SPD_UP_3: + case Z_EFFECT_SPATK_UP_3: + case Z_EFFECT_SPDEF_UP_3: + case Z_EFFECT_ACC_UP_3: + case Z_EFFECT_EVSN_UP_3: + gDisplayedStringBattle[0] = CHAR_PLUS; + gDisplayedStringBattle[1] = CHAR_PLUS; + gDisplayedStringBattle[2] = CHAR_PLUS; + gDisplayedStringBattle[3] = 0; + gDisplayedStringBattle[4] = EOS; + PREPARE_STAT_BUFFER(gBattleTextBuff1, zEffect - Z_EFFECT_ATK_UP_3 + 1); + ExpandBattleTextBuffPlaceholders(gBattleTextBuff1, gDisplayedStringBattle + 4); + break; + } + + BattlePutTextOnWindow(gDisplayedStringBattle, 5); // Slot of Move 3 + gDisplayedStringBattle[0] = CHAR_Z; + gDisplayedStringBattle[1] = CHAR_HYPHEN; + StringCopy(gDisplayedStringBattle + 2, gMoveNames[move]); + } + else if (zmove == MOVE_EXTREME_EVOBOOST) + { + // Damaging move -> status z move + StringCopy(gDisplayedStringBattle, sText_StatsPlus2); + BattlePutTextOnWindow(gDisplayedStringBattle, 5); // Slot of Move 3 + StringCopy(gDisplayedStringBattle, GetZMoveName(zmove)); + } + else + { + ZMoveSelectionDisplayPower(move, zmove); + StringCopy(gDisplayedStringBattle, GetZMoveName(zmove)); + } + BattlePutTextOnWindow(gDisplayedStringBattle, 3); // First move slot + + ZMoveSelectionDisplayPpNumber(); + MoveSelectionCreateCursorAt(0, 0); + return TRUE; + } + + return FALSE; +} + +static void ZMoveSelectionDisplayPower(u16 move, u16 zMove) +{ + u8 *txtPtr; + u16 power = gBattleMoves[move].zMovePower; + + if (zMove >= MOVE_CATASTROPIKA) + power = gBattleMoves[zMove].power; + + if (gBattleMoves[move].split != SPLIT_STATUS) + { + txtPtr = StringCopy(gDisplayedStringBattle, sText_PowerColon); + ConvertIntToDecimalStringN(txtPtr, power, STR_CONV_MODE_LEFT_ALIGN, 3); + BattlePutTextOnWindow(gDisplayedStringBattle, 5); // Bottom left + } +} + +static void ZMoveSelectionDisplayPpNumber(void) +{ + u8 *txtPtr; + struct ChooseMoveStruct *moveInfo; + + if (gBattleResources->bufferA[gActiveBattler][2] == TRUE) // Check if we didn't want to display pp number + return; + + SetPpNumbersPaletteInMoveSelection(); + moveInfo = (struct ChooseMoveStruct*)(&gBattleResources->bufferA[gActiveBattler][4]); + txtPtr = ConvertIntToDecimalStringN(gDisplayedStringBattle, 1, STR_CONV_MODE_RIGHT_ALIGN, 2); + *(txtPtr)++ = CHAR_SLASH; + ConvertIntToDecimalStringN(txtPtr, 1, STR_CONV_MODE_RIGHT_ALIGN, 2); + BattlePutTextOnWindow(gDisplayedStringBattle, 9); +} + +const u8* GetZMoveName(u16 move) +{ + if (IsZMove(move)) + return gZMoveNames[move - MOVE_BREAKNECK_BLITZ]; + else + return gZMoveNames[0]; // Failsafe +} + +#define Z_EFFECT_BS_LENGTH 3 +// This function kinda cheats by setting a return battle script to after the setzeffect various command +// and then jumping to a z effect script +void SetZEffect(void) +{ + u32 i; + + gBattleStruct->zmove.zStatusActive = TRUE; + if (gBattleStruct->zmove.effect == Z_EFFECT_CURSE) + { + if (IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_GHOST)) + gBattleStruct->zmove.effect = Z_EFFECT_RECOVER_HP; + else + gBattleStruct->zmove.effect = Z_EFFECT_ATK_UP_1; + } + + gBattleScripting.savedStatChanger = gBattleScripting.statChanger; // Save used move's stat changer (e.g. for Z-Growl) + gBattleScripting.battler = gBattlerAttacker; + + switch (gBattleStruct->zmove.effect) + { + case Z_EFFECT_RESET_STATS: + for (i = 0; i < NUM_BATTLE_STATS - 1; i++) + { + if (gBattleMons[gBattlerAttacker].statStages[i] < DEFAULT_STAT_STAGE) + gBattleMons[gBattlerAttacker].statStages[i] = DEFAULT_STAT_STAGE; + } + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_Z_RESET_STATS; + BattleScriptPush(gBattlescriptCurrInstr + Z_EFFECT_BS_LENGTH); + gBattlescriptCurrInstr = BattleScript_ZEffectPrintString; + break; + case Z_EFFECT_ALL_STATS_UP_1: + if (!AreStatsMaxed(gBattlerAttacker, STAT_SPDEF)) + { + for (i = 0; i < STAT_ACC - 1; i++) // Doesn't increase Acc or Evsn + { + if (gBattleMons[gBattlerAttacker].statStages[i] < 12) + ++gBattleMons[gBattlerAttacker].statStages[i]; + } + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_Z_ALL_STATS_UP; + BattleScriptPush(gBattlescriptCurrInstr + Z_EFFECT_BS_LENGTH); + gBattlescriptCurrInstr = BattleScript_ZEffectPrintString; + } + break; + case Z_EFFECT_BOOST_CRITS: + if (!(gBattleMons[gBattlerAttacker].status2 & STATUS2_FOCUS_ENERGY)) + { + gBattleMons[gBattlerAttacker].status2 |= STATUS2_FOCUS_ENERGY; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_Z_BOOST_CRITS; + BattleScriptPush(gBattlescriptCurrInstr + Z_EFFECT_BS_LENGTH); + gBattlescriptCurrInstr = BattleScript_ZEffectPrintString; + } + break; + case Z_EFFECT_FOLLOW_ME: + gSideTimers[GetBattlerSide(gBattlerAttacker)].followmeTimer = 1; + gSideTimers[GetBattlerSide(gBattlerAttacker)].followmeTarget = gBattlerAttacker; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_Z_FOLLOW_ME; + BattleScriptPush(gBattlescriptCurrInstr + Z_EFFECT_BS_LENGTH); + gBattlescriptCurrInstr = BattleScript_ZEffectPrintString; + break; + case Z_EFFECT_RECOVER_HP: + if (gBattleMons[gBattlerAttacker].hp != gBattleMons[gBattlerAttacker].maxHP) + { + gBattleMoveDamage = (-1) * gBattleMons[gBattlerAttacker].maxHP; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_Z_RECOVER_HP; + BattleScriptPush(gBattlescriptCurrInstr + Z_EFFECT_BS_LENGTH); + gBattlescriptCurrInstr = BattleScript_RecoverHPZMove; + } + break; + case Z_EFFECT_RESTORE_REPLACEMENT_HP: + gBattleStruct->zmove.healReplacement = TRUE; + BattleScriptPush(gBattlescriptCurrInstr + Z_EFFECT_BS_LENGTH); + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_Z_HP_TRAP; + gBattlescriptCurrInstr = BattleScript_ZEffectPrintString; + break; + case Z_EFFECT_ATK_UP_1 ... Z_EFFECT_EVSN_UP_1: + SET_STATCHANGER(gBattleStruct->zmove.effect - Z_EFFECT_ATK_UP_1 + 1, 1, FALSE); + BattleScriptPush(gBattlescriptCurrInstr + Z_EFFECT_BS_LENGTH); + gBattlescriptCurrInstr = BattleScript_StatUpZMove; + break; + case Z_EFFECT_ATK_UP_2 ... Z_EFFECT_EVSN_UP_2: + SET_STATCHANGER(gBattleStruct->zmove.effect - Z_EFFECT_ATK_UP_2 + 1, 2, FALSE); + BattleScriptPush(gBattlescriptCurrInstr + Z_EFFECT_BS_LENGTH); + gBattlescriptCurrInstr = BattleScript_StatUpZMove; + break; + case Z_EFFECT_ATK_UP_3 ... Z_EFFECT_EVSN_UP_3: + SET_STATCHANGER(gBattleStruct->zmove.effect - Z_EFFECT_ATK_UP_3 + 1, 3, FALSE); + BattleScriptPush(gBattlescriptCurrInstr + Z_EFFECT_BS_LENGTH); + gBattlescriptCurrInstr = BattleScript_StatUpZMove; + break; + default: + gBattlescriptCurrInstr += 3; + break; + } + + gBattleStruct->zmove.zStatusActive = FALSE; +} + +static bool32 AreStatsMaxed(u8 battlerId, u8 n) +{ + u32 i; + for (i = STAT_ATK; i <= n; i++) + { + if (STAT_STAGE(battlerId, i) < MAX_STAT_STAGE) + return FALSE; + } + return TRUE; +} + diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index 2035acff7..6d7ec5dfc 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -1,4 +1,4 @@ -const struct BattleMove gBattleMoves[MOVES_COUNT] = +const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { [MOVE_NONE] = { @@ -26,6 +26,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_KARATE_CHOP] = @@ -40,6 +42,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_DOUBLE_SLAP] = @@ -54,6 +58,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_COMET_PUNCH] = @@ -68,6 +74,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_MEGA_PUNCH] = @@ -82,6 +90,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_PAY_DAY] = @@ -96,6 +106,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_FIRE_PUNCH] = @@ -110,6 +122,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_IRON_FIST_BOOST | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_ICE_PUNCH] = @@ -124,6 +138,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_IRON_FIST_BOOST | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_THUNDER_PUNCH] = @@ -138,6 +154,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_IRON_FIST_BOOST | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SCRATCH] = @@ -152,6 +170,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_VISE_GRIP] = @@ -166,6 +186,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_GUILLOTINE] = @@ -180,6 +202,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_RAZOR_WIND] = @@ -198,6 +222,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_BOTH, .priority = 0, .split = SPLIT_SPECIAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SWORDS_DANCE] = @@ -216,6 +242,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED | FLAG_DANCE, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_CUT] = @@ -230,6 +258,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_GUST] = @@ -244,6 +274,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DMG_2X_IN_AIR, .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_WING_ATTACK] = @@ -258,6 +290,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_WHIRLWIND] = @@ -280,6 +314,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = -6, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, [MOVE_FLY] = @@ -298,6 +334,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_BIND] = @@ -316,6 +354,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SLAM] = @@ -330,6 +370,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_VINE_WHIP] = @@ -352,6 +394,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_STOMP] = @@ -366,6 +410,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_DMG_MINIMIZE, .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_DOUBLE_KICK] = @@ -380,6 +426,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_TWO_STRIKES, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_MEGA_KICK] = @@ -394,6 +442,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 190, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_JUMP_KICK] = @@ -416,6 +466,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_RECKLESS_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_ROLLING_KICK] = @@ -434,6 +486,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SAND_ATTACK] = @@ -448,6 +502,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_EVSN_UP_1, }, [MOVE_HEADBUTT] = @@ -462,6 +518,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_HORN_ATTACK] = @@ -476,6 +534,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_FURY_ATTACK] = @@ -490,6 +550,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_HORN_DRILL] = @@ -504,6 +566,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_TACKLE] = @@ -526,6 +590,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_BODY_SLAM] = @@ -544,6 +610,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_WRAP] = @@ -562,6 +630,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_TAKE_DOWN] = @@ -576,6 +646,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_RECKLESS_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_THRASH] = @@ -595,6 +667,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 190, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_DOUBLE_EDGE] = @@ -609,6 +683,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_RECKLESS_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 190, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_TAIL_WHIP] = @@ -623,6 +699,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ATK_UP_1, }, [MOVE_POISON_STING] = @@ -637,6 +715,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_TWINEEDLE] = @@ -651,6 +731,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_TWO_STRIKES, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_PIN_MISSILE] = @@ -670,6 +752,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_LEER] = @@ -684,6 +768,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ATK_UP_1, }, [MOVE_BITE] = @@ -698,6 +784,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_STRONG_JAW_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_GROWL] = @@ -712,6 +800,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, }, [MOVE_ROAR] = @@ -734,6 +824,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = -6, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, }, [MOVE_SING] = @@ -748,6 +840,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, }, [MOVE_SUPERSONIC] = @@ -762,6 +856,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, }, [MOVE_SONIC_BOOM] = @@ -776,6 +872,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_DISABLE] = @@ -798,6 +896,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_ACID] = @@ -816,6 +916,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_EMBER] = @@ -830,6 +932,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_FLAMETHROWER] = @@ -848,6 +952,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_MIST] = @@ -862,6 +968,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RECOVER_HP, }, [MOVE_WATER_GUN] = @@ -876,6 +984,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_HYDRO_PUMP] = @@ -894,6 +1004,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, + .zMovePower = 185, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SURF] = @@ -916,6 +1028,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DMG_UNDERWATER, .split = SPLIT_SPECIAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_ICE_BEAM] = @@ -934,6 +1048,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_BLIZZARD] = @@ -952,6 +1068,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, + .zMovePower = 185, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_PSYBEAM] = @@ -966,6 +1084,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_BUBBLE_BEAM] = @@ -980,6 +1100,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_AURORA_BEAM] = @@ -994,6 +1116,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_HYPER_BEAM] = @@ -1008,6 +1132,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, + .zMovePower = 200, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_PECK] = @@ -1022,6 +1148,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_DRILL_PECK] = @@ -1036,6 +1164,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SUBMISSION] = @@ -1054,6 +1184,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_RECKLESS_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_LOW_KICK] = @@ -1068,6 +1200,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_COUNTER] = @@ -1088,6 +1222,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_DEPENDS, .priority = -5, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SEISMIC_TOSS] = @@ -1102,6 +1238,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_STRENGTH] = @@ -1116,6 +1254,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_ABSORB] = @@ -1134,6 +1274,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_MEGA_DRAIN] = @@ -1152,6 +1294,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_SPECIAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_LEECH_SEED] = @@ -1166,6 +1310,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_GROWTH] = @@ -1184,6 +1330,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, [MOVE_RAZOR_LEAF] = @@ -1198,6 +1346,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SOLAR_BEAM] = @@ -1212,6 +1362,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, + .zMovePower = 190, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_POISON_POWDER] = @@ -1226,6 +1378,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_POWDER, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, }, [MOVE_STUN_SPORE] = @@ -1240,6 +1394,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_POWDER, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, [MOVE_SLEEP_POWDER] = @@ -1254,6 +1410,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_POWDER, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, }, [MOVE_PETAL_DANCE] = @@ -1276,6 +1434,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DANCE, .split = SPLIT_SPECIAL, + .zMovePower = 190, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_STRING_SHOT] = @@ -1294,6 +1454,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, }, [MOVE_DRAGON_RAGE] = @@ -1308,6 +1470,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_FIRE_SPIN] = @@ -1327,6 +1491,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, + }, [MOVE_THUNDER_SHOCK] = @@ -1341,6 +1508,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_THUNDERBOLT] = @@ -1359,6 +1528,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_THUNDER_WAVE] = @@ -1377,6 +1548,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, [MOVE_THUNDER] = @@ -1395,6 +1568,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_DMG_IN_AIR, .split = SPLIT_SPECIAL, + .zMovePower = 185, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_ROCK_THROW] = @@ -1409,6 +1584,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_EARTHQUAKE] = @@ -1423,6 +1600,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DMG_UNDERGROUND, .split = SPLIT_PHYSICAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_FISSURE] = @@ -1437,6 +1616,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_DMG_UNDERGROUND, .split = SPLIT_PHYSICAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_DIG] = @@ -1455,6 +1636,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_TOXIC] = @@ -1473,6 +1656,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, }, [MOVE_CONFUSION] = @@ -1487,6 +1672,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_PSYCHIC] = @@ -1501,6 +1688,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_HYPNOSIS] = @@ -1515,6 +1704,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, }, [MOVE_MEDITATE] = @@ -1529,6 +1720,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ATK_UP_1, }, [MOVE_AGILITY] = @@ -1543,6 +1736,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_QUICK_ATTACK] = @@ -1557,6 +1752,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 1, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_RAGE] = @@ -1571,6 +1768,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_TELEPORT] = @@ -1585,6 +1784,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = -6, .flags = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RECOVER_HP, }, [MOVE_NIGHT_SHADE] = @@ -1599,6 +1800,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_MIMIC] = @@ -1613,6 +1816,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ACC_UP_1, }, [MOVE_SCREECH] = @@ -1627,6 +1832,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ATK_UP_1, }, [MOVE_DOUBLE_TEAM] = @@ -1641,6 +1848,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_RECOVER] = @@ -1659,6 +1868,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_HARDEN] = @@ -1673,6 +1884,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, }, [MOVE_MINIMIZE] = @@ -1691,6 +1904,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_SMOKESCREEN] = @@ -1705,6 +1920,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_EVSN_UP_1, }, [MOVE_CONFUSE_RAY] = @@ -1719,6 +1936,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, [MOVE_WITHDRAW] = @@ -1733,6 +1952,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, }, [MOVE_DEFENSE_CURL] = @@ -1747,6 +1968,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ACC_UP_1, }, [MOVE_BARRIER] = @@ -1765,6 +1988,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_LIGHT_SCREEN] = @@ -1779,6 +2004,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, [MOVE_HAZE] = @@ -1793,6 +2020,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RECOVER_HP, }, [MOVE_REFLECT] = @@ -1807,6 +2036,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, }, [MOVE_FOCUS_ENERGY] = @@ -1821,6 +2052,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ACC_UP_1, }, [MOVE_BIDE] = @@ -1840,6 +2073,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_USER, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_METRONOME] = @@ -1854,6 +2089,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_MIRROR_MOVE] = @@ -1868,6 +2105,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ATK_UP_2, }, [MOVE_SELF_DESTRUCT] = @@ -1882,6 +2121,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 200, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_EGG_BOMB] = @@ -1896,6 +2137,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC, .split = SPLIT_PHYSICAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_LICK] = @@ -1914,6 +2157,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SMOG] = @@ -1932,6 +2177,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SLUDGE] = @@ -1946,6 +2193,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_BONE_CLUB] = @@ -1960,6 +2209,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_FIRE_BLAST] = @@ -1978,6 +2229,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, + .zMovePower = 185, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_WATERFALL] = @@ -2000,6 +2253,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_CLAMP] = @@ -2019,6 +2274,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SWIFT] = @@ -2033,6 +2290,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SKULL_BASH] = @@ -2052,6 +2311,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 195, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SPIKE_CANNON] = @@ -2066,6 +2327,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_CONSTRICT] = @@ -2080,6 +2343,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_AMNESIA] = @@ -2094,6 +2359,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_KINESIS] = @@ -2112,6 +2379,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_EVSN_UP_1, }, [MOVE_SOFT_BOILED] = @@ -2126,6 +2395,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_HIGH_JUMP_KICK] = @@ -2148,6 +2419,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_RECKLESS_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 195, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_GLARE] = @@ -2168,6 +2441,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, [MOVE_DREAM_EATER] = @@ -2182,6 +2457,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_SPECIAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_POISON_GAS] = @@ -2204,6 +2481,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, }, [MOVE_BARRAGE] = @@ -2218,6 +2497,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_LEECH_LIFE] = @@ -2237,6 +2518,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_LOVELY_KISS] = @@ -2251,6 +2534,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, }, [MOVE_SKY_ATTACK] = @@ -2270,6 +2555,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .split = SPLIT_PHYSICAL, .argument = MOVE_EFFECT_FLINCH, + .zMovePower = 200, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_TRANSFORM] = @@ -2284,6 +2571,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RECOVER_HP, }, [MOVE_BUBBLE] = @@ -2302,6 +2591,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_DIZZY_PUNCH] = @@ -2316,6 +2607,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_IRON_FIST_BOOST | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SPORE] = @@ -2330,6 +2623,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_POWDER, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_FLASH] = @@ -2348,6 +2643,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_EVSN_UP_1, }, [MOVE_PSYWAVE] = @@ -2366,6 +2663,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SPLASH] = @@ -2380,6 +2679,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ATK_UP_3, }, [MOVE_ACID_ARMOR] = @@ -2398,6 +2699,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_CRABHAMMER] = @@ -2420,6 +2723,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT, .split = SPLIT_PHYSICAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_EXPLOSION] = @@ -2434,6 +2739,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 200, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_FURY_SWIPES] = @@ -2448,6 +2755,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_BONEMERANG] = @@ -2462,6 +2771,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_TWO_STRIKES, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_REST] = @@ -2476,6 +2787,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_ROCK_SLIDE] = @@ -2490,6 +2803,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_HYPER_FANG] = @@ -2504,6 +2819,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_STRONG_JAW_BOOST | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SHARPEN] = @@ -2518,6 +2835,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ATK_UP_1, }, [MOVE_CONVERSION] = @@ -2536,6 +2855,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_USER, .priority = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1, }, [MOVE_TRI_ATTACK] = @@ -2550,6 +2871,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SUPER_FANG] = @@ -2564,6 +2887,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SLASH] = @@ -2578,6 +2903,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT, .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SUBSTITUTE] = @@ -2592,6 +2919,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_STRUGGLE] = @@ -2612,6 +2941,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SKETCH] = @@ -2626,6 +2957,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1, }, [MOVE_TRIPLE_KICK] = @@ -2640,6 +2973,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_THIEF] = @@ -2659,6 +2994,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SPIDER_WEB] = @@ -2677,6 +3014,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, }, [MOVE_MIND_READER] = @@ -2695,6 +3034,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, [MOVE_NIGHTMARE] = @@ -2713,6 +3054,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, [MOVE_FLAME_WHEEL] = @@ -2727,6 +3070,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_THAW_USER, .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SNORE] = @@ -2749,6 +3094,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_CURSE] = @@ -2767,6 +3114,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_CURSE, }, [MOVE_FLAIL] = @@ -2781,6 +3130,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_CONVERSION_2] = @@ -2795,6 +3146,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RECOVER_HP, }, [MOVE_AEROBLAST] = @@ -2809,6 +3162,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT, .split = SPLIT_SPECIAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_COTTON_SPORE] = @@ -2831,6 +3186,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_POWDER, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_REVERSAL] = @@ -2845,6 +3202,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SPITE] = @@ -2863,6 +3222,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RECOVER_HP, }, [MOVE_POWDER_SNOW] = @@ -2877,6 +3238,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_PROTECT] = @@ -2895,6 +3258,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_USER, .flags = FLAG_PROTECTION_MOVE, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_MACH_PUNCH] = @@ -2909,6 +3274,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 1, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SCARY_FACE] = @@ -2927,6 +3294,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, }, [MOVE_FEINT_ATTACK] = @@ -2945,6 +3314,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SWEET_KISS] = @@ -2963,6 +3334,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, [MOVE_BELLY_DRUM] = @@ -2977,6 +3350,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RECOVER_HP, }, [MOVE_SLUDGE_BOMB] = @@ -2991,6 +3366,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_BALLISTIC, .split = SPLIT_SPECIAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_MUD_SLAP] = @@ -3005,6 +3382,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_OCTAZOOKA] = @@ -3019,6 +3398,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_BALLISTIC | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SPIKES] = @@ -3037,6 +3418,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_OPPONENTS_FIELD, .priority = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, }, [MOVE_ZAP_CANNON] = @@ -3055,6 +3438,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_BALLISTIC, .split = SPLIT_SPECIAL, + .zMovePower = 190, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_FORESIGHT] = @@ -3077,6 +3462,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_BOOST_CRITS, }, [MOVE_DESTINY_BOND] = @@ -3091,6 +3478,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_FOLLOW_ME, }, [MOVE_PERISH_SONG] = @@ -3105,6 +3494,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_SOUND, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_ICY_WIND] = @@ -3119,6 +3510,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_DETECT] = @@ -3137,6 +3530,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_USER, .flags = FLAG_PROTECTION_MOVE, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_EVSN_UP_1, }, [MOVE_BONE_RUSH] = @@ -3155,6 +3550,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_LOCK_ON] = @@ -3173,6 +3570,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, }, [MOVE_OUTRAGE] = @@ -3195,6 +3594,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 190, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SANDSTORM] = @@ -3209,6 +3610,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, }, [MOVE_GIGA_DRAIN] = @@ -3231,6 +3634,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_SPECIAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_ENDURE] = @@ -3249,6 +3654,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_USER, .flags = FLAG_PROTECTION_MOVE, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_CHARM] = @@ -3267,6 +3674,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, }, [MOVE_ROLLOUT] = @@ -3281,6 +3690,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_FALSE_SWIPE] = @@ -3295,6 +3706,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SWAGGER] = @@ -3313,6 +3726,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_MILK_DRINK] = @@ -3327,6 +3742,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_SPARK] = @@ -3341,6 +3758,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_FURY_CUTTER] = @@ -3361,6 +3780,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_STEEL_WING] = @@ -3375,6 +3796,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_MEAN_LOOK] = @@ -3393,6 +3816,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, [MOVE_ATTRACT] = @@ -3407,6 +3832,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_SLEEP_TALK] = @@ -3421,6 +3848,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_BOOST_CRITS, }, [MOVE_HEAL_BELL] = @@ -3439,6 +3868,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_USER, .priority = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RECOVER_HP, }, [MOVE_RETURN] = @@ -3453,6 +3884,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_PRESENT] = @@ -3467,6 +3900,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_FRUSTRATION] = @@ -3481,6 +3916,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SAFEGUARD] = @@ -3495,6 +3932,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, }, [MOVE_PAIN_SPLIT] = @@ -3509,6 +3948,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, }, [MOVE_SACRED_FIRE] = @@ -3523,6 +3964,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_THAW_USER, .split = SPLIT_PHYSICAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_MAGNITUDE] = @@ -3537,6 +3980,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DMG_UNDERGROUND, .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_DYNAMIC_PUNCH] = @@ -3551,6 +3996,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_IRON_FIST_BOOST | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_MEGAHORN] = @@ -3565,6 +4012,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 190, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_DRAGON_BREATH] = @@ -3579,6 +4028,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_BATON_PASS] = @@ -3593,6 +4044,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_ENCORE] = @@ -3611,6 +4064,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, }, [MOVE_PURSUIT] = @@ -3625,6 +4080,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_RAPID_SPIN] = @@ -3643,6 +4100,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SWEET_SCENT] = @@ -3661,6 +4120,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ACC_UP_1, }, [MOVE_IRON_TAIL] = @@ -3675,6 +4136,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_METAL_CLAW] = @@ -3689,6 +4152,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_VITAL_THROW] = @@ -3703,6 +4168,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = -1, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_MORNING_SUN] = @@ -3717,6 +4184,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_SYNTHESIS] = @@ -3731,6 +4200,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_MOONLIGHT] = @@ -3749,6 +4220,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_HIDDEN_POWER] = @@ -3767,6 +4240,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_CROSS_CHOP] = @@ -3781,6 +4256,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT, .split = SPLIT_PHYSICAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_TWISTER] = @@ -3799,6 +4276,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_BOTH, .priority = 0, .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_RAIN_DANCE] = @@ -3813,6 +4292,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, }, [MOVE_SUNNY_DAY] = @@ -3827,6 +4308,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, }, [MOVE_CRUNCH] = @@ -3845,6 +4328,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_STRONG_JAW_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_MIRROR_COAT] = @@ -3865,6 +4350,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_DEPENDS, .priority = -5, .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_PSYCH_UP] = @@ -3883,6 +4370,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RECOVER_HP, }, [MOVE_EXTREME_SPEED] = @@ -3901,6 +4390,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_ANCIENT_POWER] = @@ -3919,6 +4410,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_SPECIAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SHADOW_BALL] = @@ -3933,6 +4426,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_BALLISTIC, .split = SPLIT_SPECIAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_FUTURE_SIGHT] = @@ -3957,6 +4452,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = 0, .split = SPLIT_SPECIAL, + .zMovePower = 190, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_ROCK_SMASH] = @@ -3975,6 +4472,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_WHIRLPOOL] = @@ -3994,6 +4493,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DMG_UNDERWATER, .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_BEAT_UP] = @@ -4012,6 +4513,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_FAKE_OUT] = @@ -4034,6 +4537,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_UPROAR] = @@ -4052,6 +4557,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SOUND, .split = SPLIT_SPECIAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_STOCKPILE] = @@ -4070,6 +4577,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RECOVER_HP, }, [MOVE_SPIT_UP] = @@ -4088,6 +4597,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SWALLOW] = @@ -4102,6 +4613,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_HEAT_WAVE] = @@ -4120,6 +4633,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_HAIL] = @@ -4134,6 +4649,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, }, [MOVE_TORMENT] = @@ -4152,6 +4669,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, }, [MOVE_FLATTER] = @@ -4166,6 +4685,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, [MOVE_WILL_O_WISP] = @@ -4184,6 +4705,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ATK_UP_1, }, [MOVE_MEMENTO] = @@ -4198,6 +4721,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESTORE_REPLACEMENT_HP, }, [MOVE_FACADE] = @@ -4212,6 +4737,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_FOCUS_PUNCH] = @@ -4226,6 +4753,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = -3, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_IRON_FIST_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 200, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SMELLING_SALTS] = @@ -4245,6 +4774,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_PHYSICAL, .argument = STATUS1_PARALYSIS, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_FOLLOW_ME] = @@ -4263,6 +4794,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_USER, .flags = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_NATURE_POWER] = @@ -4277,6 +4810,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_CHARGE] = @@ -4291,6 +4826,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, [MOVE_TAUNT] = @@ -4311,6 +4848,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ATK_UP_1, }, [MOVE_HELPING_HAND] = @@ -4329,6 +4868,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 5, .flags = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_TRICK] = @@ -4343,6 +4884,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_2, }, [MOVE_ROLE_PLAY] = @@ -4357,6 +4900,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, }, [MOVE_WISH] = @@ -4375,6 +4920,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_USER, .priority = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, [MOVE_ASSIST] = @@ -4389,6 +4936,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_INGRAIN] = @@ -4403,6 +4952,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, [MOVE_SUPERPOWER] = @@ -4417,6 +4968,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 190, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_MAGIC_COAT] = @@ -4431,6 +4984,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 4, .flags = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPDEF_UP_2, }, [MOVE_RECYCLE] = @@ -4449,6 +5004,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_USER, .priority = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_2, }, [MOVE_REVENGE] = @@ -4463,6 +5020,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = -4, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_BRICK_BREAK] = @@ -4477,6 +5036,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_YAWN] = @@ -4491,6 +5052,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, }, [MOVE_KNOCK_OFF] = @@ -4509,6 +5072,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_ENDEAVOR] = @@ -4523,6 +5088,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_ERUPTION] = @@ -4537,6 +5104,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, + .zMovePower = 200, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SKILL_SWAP] = @@ -4551,6 +5120,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, }, [MOVE_IMPRISON] = @@ -4569,6 +5140,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_USER, .priority = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPDEF_UP_2, }, [MOVE_REFRESH] = @@ -4583,6 +5156,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RECOVER_HP, }, [MOVE_GRUDGE] = @@ -4597,6 +5172,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_FOLLOW_ME, }, [MOVE_SNATCH] = @@ -4611,6 +5188,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 4, .flags = FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_2, }, [MOVE_SECRET_POWER] = @@ -4625,6 +5204,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_DIVE] = @@ -4643,6 +5224,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_ARM_THRUST] = @@ -4657,6 +5240,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_CAMOUFLAGE] = @@ -4671,6 +5256,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_EVSN_UP_1, }, [MOVE_TAIL_GLOW] = @@ -4689,6 +5276,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_LUSTER_PURGE] = @@ -4703,6 +5292,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_MIST_BALL] = @@ -4717,6 +5308,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_BALLISTIC | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_FEATHER_DANCE] = @@ -4731,6 +5324,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_DANCE, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, }, [MOVE_TEETER_DANCE] = @@ -4749,6 +5344,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_FOES_AND_ALLY, .priority = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, [MOVE_BLAZE_KICK] = @@ -4763,6 +5360,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_HIGH_CRIT | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_MUD_SPORT] = @@ -4777,6 +5376,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, [MOVE_ICE_BALL] = @@ -4791,6 +5392,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_NEEDLE_ARM] = @@ -4809,6 +5412,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SLACK_OFF] = @@ -4823,6 +5428,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_HYPER_VOICE] = @@ -4837,6 +5444,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND, .split = SPLIT_SPECIAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_POISON_FANG] = @@ -4855,6 +5464,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_STRONG_JAW_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_CRUSH_CLAW] = @@ -4869,6 +5480,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_BLAST_BURN] = @@ -4883,6 +5496,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, + .zMovePower = 200, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_HYDRO_CANNON] = @@ -4897,6 +5512,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, + .zMovePower = 200, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_METEOR_MASH] = @@ -4916,6 +5533,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_ASTONISH] = @@ -4934,6 +5553,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_WEATHER_BALL] = @@ -4948,6 +5569,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC, .split = SPLIT_SPECIAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_AROMATHERAPY] = @@ -4962,6 +5585,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RECOVER_HP, }, [MOVE_FAKE_TEARS] = @@ -4976,6 +5601,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, [MOVE_AIR_CUTTER] = @@ -4994,6 +5621,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT, .split = SPLIT_SPECIAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_OVERHEAT] = @@ -5016,6 +5645,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_SPECIAL, + .zMovePower = 195, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_ODOR_SLEUTH] = @@ -5038,6 +5669,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ATK_UP_1, }, [MOVE_ROCK_TOMB] = @@ -5058,6 +5691,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SILVER_WIND] = @@ -5072,6 +5707,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_METAL_SOUND] = @@ -5086,6 +5723,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, [MOVE_GRASS_WHISTLE] = @@ -5100,6 +5739,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, }, [MOVE_TICKLE] = @@ -5114,6 +5755,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, }, [MOVE_COSMIC_POWER] = @@ -5128,6 +5771,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, [MOVE_WATER_SPOUT] = @@ -5142,6 +5787,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_SPECIAL, + .zMovePower = 200, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SIGNAL_BEAM] = @@ -5156,6 +5803,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SHADOW_PUNCH] = @@ -5170,6 +5819,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_EXTRASENSORY] = @@ -5192,6 +5843,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_SPECIAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SKY_UPPERCUT] = @@ -5206,6 +5859,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST | FLAG_DMG_IN_AIR, .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SAND_TOMB] = @@ -5225,6 +5880,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SHEER_COLD] = @@ -5239,6 +5896,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_SPECIAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_MUDDY_WATER] = @@ -5257,6 +5916,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_BULLET_SEED] = @@ -5275,6 +5936,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_AERIAL_ACE] = @@ -5289,6 +5952,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_ICICLE_SPEAR] = @@ -5307,6 +5972,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_IRON_DEFENSE] = @@ -5321,6 +5988,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_BLOCK] = @@ -5339,6 +6008,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, }, [MOVE_HOWL] = @@ -5357,6 +6028,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_USER, .priority = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ATK_UP_1, }, [MOVE_DRAGON_CLAW] = @@ -5371,6 +6044,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_FRENZY_PLANT] = @@ -5385,6 +6060,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, + .zMovePower = 200, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_BULK_UP] = @@ -5399,6 +6076,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ATK_UP_1, }, [MOVE_BOUNCE] = @@ -5414,6 +6093,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, .argument = MOVE_EFFECT_PARALYSIS, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_MUD_SHOT] = @@ -5428,6 +6109,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_POISON_TAIL] = @@ -5442,6 +6125,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_COVET] = @@ -5470,6 +6155,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_VOLT_TACKLE] = @@ -5489,6 +6176,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_RECKLESS_BOOST | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 190, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_MAGICAL_LEAF] = @@ -5503,6 +6192,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_WATER_SPORT] = @@ -5517,6 +6208,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, [MOVE_CALM_MIND] = @@ -5531,6 +6224,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_LEAF_BLADE] = @@ -5549,6 +6244,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT, .split = SPLIT_PHYSICAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_DRAGON_DANCE] = @@ -5563,6 +6260,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED | FLAG_DANCE, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_ROCK_BLAST] = @@ -5585,6 +6284,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SHOCK_WAVE] = @@ -5599,6 +6300,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_WATER_PULSE] = @@ -5613,6 +6316,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_MEGA_LAUNCHER_BOOST, .split = SPLIT_SPECIAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_DOOM_DESIRE] = @@ -5632,6 +6337,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = 0, .split = SPLIT_SPECIAL, + .zMovePower = 200, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_PSYCHO_BOOST] = @@ -5646,6 +6353,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, + .zMovePower = 200, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_ROOST] = @@ -5660,6 +6369,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_GRAVITY] = @@ -5674,6 +6385,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, [MOVE_MIRACLE_EYE] = @@ -5692,6 +6405,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, [MOVE_WAKE_UP_SLAP] = @@ -5711,6 +6426,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, .argument = STATUS1_SLEEP, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_HAMMER_ARM] = @@ -5725,6 +6442,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_GYRO_BALL] = @@ -5739,6 +6458,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC, .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_HEALING_WISH] = @@ -5757,6 +6478,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_USER, .priority = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_BRINE] = @@ -5771,6 +6494,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_NATURAL_GIFT] = @@ -5785,6 +6510,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_FEINT] = @@ -5807,6 +6534,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 2, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_PLUCK] = @@ -5821,6 +6550,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_TAILWIND] = @@ -5839,6 +6570,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_BOOST_CRITS, }, [MOVE_ACUPRESSURE] = @@ -5857,6 +6590,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_USER | MOVE_TARGET_ALLY, .priority = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_BOOST_CRITS, }, [MOVE_METAL_BURST] = @@ -5875,6 +6610,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_DEPENDS, .priority = 0, .split = SPLIT_PHYSICAL, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_U_TURN] = @@ -5889,6 +6625,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_CLOSE_COMBAT] = @@ -5903,6 +6641,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 190, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_PAYBACK] = @@ -5917,6 +6657,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_ASSURANCE] = @@ -5935,6 +6677,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_EMBARGO] = @@ -5953,6 +6697,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, [MOVE_FLING] = @@ -5967,6 +6713,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_PSYCHO_SHIFT] = @@ -5985,6 +6733,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPATK_UP_2, }, [MOVE_TRUMP_CARD] = @@ -6017,6 +6767,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPATK_UP_2, }, [MOVE_WRING_OUT] = @@ -6049,6 +6801,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_USER, .priority = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ATK_UP_1, }, [MOVE_GASTRO_ACID] = @@ -6063,6 +6817,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, }, [MOVE_LUCKY_CHANT] = @@ -6081,6 +6837,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_USER, .priority = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_EVSN_UP_1, }, [MOVE_ME_FIRST] = @@ -6095,6 +6853,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_2, }, [MOVE_COPYCAT] = @@ -6109,6 +6869,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ACC_UP_1, }, [MOVE_POWER_SWAP] = @@ -6123,6 +6885,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, }, [MOVE_GUARD_SWAP] = @@ -6137,6 +6901,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, }, [MOVE_PUNISHMENT] = @@ -6151,6 +6917,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_LAST_RESORT] = @@ -6169,6 +6937,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 200, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_WORRY_SEED] = @@ -6183,6 +6953,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, }, [MOVE_SUCKER_PUNCH] = @@ -6201,6 +6973,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 1, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_TOXIC_SPIKES] = @@ -6219,6 +6993,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_OPPONENTS_FIELD, .priority = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, }, [MOVE_HEART_SWAP] = @@ -6233,6 +7009,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_BOOST_CRITS, }, [MOVE_AQUA_RING] = @@ -6251,6 +7029,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_USER, .priority = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, }, [MOVE_MAGNET_RISE] = @@ -6269,6 +7049,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_USER, .priority = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_EVSN_UP_1, }, [MOVE_FLARE_BLITZ] = @@ -6284,6 +7066,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_RECKLESS_BOOST | FLAG_THAW_USER, .split = SPLIT_PHYSICAL, .argument = STATUS1_BURN, + .zMovePower = 190, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_FORCE_PALM] = @@ -6298,6 +7082,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_AURA_SPHERE] = @@ -6316,6 +7102,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_MEGA_LAUNCHER_BOOST | FLAG_BALLISTIC, .split = SPLIT_SPECIAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_ROCK_POLISH] = @@ -6330,6 +7118,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_POISON_JAB] = @@ -6344,6 +7134,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_DARK_PULSE] = @@ -6362,6 +7154,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_SPECIAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_NIGHT_SLASH] = @@ -6376,6 +7170,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT, .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_AQUA_TAIL] = @@ -6390,6 +7186,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SEED_BOMB] = @@ -6404,6 +7202,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC, .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_AIR_SLASH] = @@ -6426,6 +7226,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_SPECIAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_X_SCISSOR] = @@ -6440,6 +7242,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_BUG_BUZZ] = @@ -6454,6 +7258,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SOUND | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_DRAGON_PULSE] = @@ -6472,6 +7278,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_MEGA_LAUNCHER_BOOST, .split = SPLIT_SPECIAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_DRAGON_RUSH] = @@ -6492,6 +7300,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_POWER_GEM] = @@ -6510,6 +7320,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_DRAIN_PUNCH] = @@ -6529,6 +7341,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_VACUUM_WAVE] = @@ -6543,6 +7357,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 1, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_FOCUS_BLAST] = @@ -6557,6 +7373,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_BALLISTIC, .split = SPLIT_SPECIAL, + .zMovePower = 190, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_ENERGY_BALL] = @@ -6575,6 +7393,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_BALLISTIC | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_BRAVE_BIRD] = @@ -6589,6 +7409,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_RECKLESS_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 190, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_EARTH_POWER] = @@ -6603,6 +7425,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SWITCHEROO] = @@ -6617,6 +7441,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_2, }, [MOVE_GIGA_IMPACT] = @@ -6631,6 +7457,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 200, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_NASTY_PLOT] = @@ -6645,6 +7473,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_BULLET_PUNCH] = @@ -6659,6 +7489,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 1, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_AVALANCHE] = @@ -6673,6 +7505,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = -4, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_ICE_SHARD] = @@ -6687,6 +7521,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 1, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SHADOW_CLAW] = @@ -6701,6 +7537,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT, .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_THUNDER_FANG] = @@ -6720,6 +7558,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .split = SPLIT_PHYSICAL, .argument = STATUS1_PARALYSIS, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_ICE_FANG] = @@ -6739,6 +7579,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .split = SPLIT_PHYSICAL, .argument = STATUS1_FREEZE, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_FIRE_FANG] = @@ -6758,6 +7600,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .split = SPLIT_PHYSICAL, .argument = STATUS1_BURN, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SHADOW_SNEAK] = @@ -6772,6 +7616,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 1, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_MUD_BOMB] = @@ -6786,6 +7632,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_BALLISTIC, .split = SPLIT_SPECIAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_PSYCHO_CUT] = @@ -6800,6 +7648,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT, .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_ZEN_HEADBUTT] = @@ -6814,6 +7664,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_MIRROR_SHOT] = @@ -6828,6 +7680,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_FLASH_CANNON] = @@ -6842,6 +7696,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_ROCK_CLIMB] = @@ -6856,6 +7712,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_DEFOG] = @@ -6874,6 +7732,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ACC_UP_1, }, [MOVE_TRICK_ROOM] = @@ -6888,6 +7748,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = -7, .flags = FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ACC_UP_1, }, [MOVE_DRACO_METEOR] = @@ -6906,6 +7768,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, + .zMovePower = 195, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_DISCHARGE] = @@ -6920,6 +7784,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_LAVA_PLUME] = @@ -6934,6 +7800,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_LEAF_STORM] = @@ -6952,6 +7820,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, + .zMovePower = 195, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_POWER_WHIP] = @@ -6966,6 +7836,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 190, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_ROCK_WRECKER] = @@ -6980,6 +7852,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC, .split = SPLIT_PHYSICAL, + .zMovePower = 200, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_CROSS_POISON] = @@ -6994,6 +7868,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_GUNK_SHOT] = @@ -7012,6 +7888,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 190, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_IRON_HEAD] = @@ -7030,6 +7908,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_MAGNET_BOMB] = @@ -7044,6 +7924,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC, .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_STONE_EDGE] = @@ -7058,6 +7940,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT, .split = SPLIT_PHYSICAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_CAPTIVATE] = @@ -7072,6 +7956,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPDEF_UP_2, }, [MOVE_STEALTH_ROCK] = @@ -7090,6 +7976,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_OPPONENTS_FIELD, .priority = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, }, [MOVE_GRASS_KNOT] = @@ -7104,6 +7992,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_CHATTER] = @@ -7128,6 +8018,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_SPECIAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_JUDGMENT] = @@ -7143,6 +8035,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, .argument = HOLD_EFFECT_PLATE, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_BUG_BITE] = @@ -7157,6 +8051,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_CHARGE_BEAM] = @@ -7171,6 +8067,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_WOOD_HAMMER] = @@ -7185,6 +8083,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_RECKLESS_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 190, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_AQUA_JET] = @@ -7199,6 +8099,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 1, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_ATTACK_ORDER] = @@ -7213,6 +8115,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT, .split = SPLIT_PHYSICAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_DEFEND_ORDER] = @@ -7227,6 +8131,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, }, [MOVE_HEAL_ORDER] = @@ -7241,6 +8147,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_HEAD_SMASH] = @@ -7255,6 +8163,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_RECKLESS_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 200, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_DOUBLE_HIT] = @@ -7269,6 +8179,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_TWO_STRIKES, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_ROAR_OF_TIME] = @@ -7283,6 +8195,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, + .zMovePower = 200, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SPACIAL_REND] = @@ -7297,6 +8211,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT, .split = SPLIT_SPECIAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_LUNAR_DANCE] = @@ -7315,6 +8231,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_USER, .priority = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_CRUSH_GRIP] = @@ -7329,6 +8247,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 190, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_MAGMA_STORM] = @@ -7351,6 +8271,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_DARK_VOID] = @@ -7369,6 +8291,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_SEED_FLARE] = @@ -7383,6 +8307,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, + .zMovePower = 190, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_OMINOUS_WIND] = @@ -7397,6 +8323,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SHADOW_FORCE] = @@ -7415,6 +8343,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, + .zMovePower = 190, + .zMoveEffect = Z_EFFECT_NONE, .argument = MOVE_EFFECT_FEINT, }, @@ -7430,6 +8360,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ATK_UP_1, }, [MOVE_WIDE_GUARD] = @@ -7445,6 +8377,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .flags = FLAG_PROTECTION_MOVE | FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, .argument = TRUE, // Protects the whole side. + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, }, [MOVE_GUARD_SPLIT] = @@ -7459,6 +8393,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, }, [MOVE_POWER_SPLIT] = @@ -7473,6 +8409,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, }, [MOVE_WONDER_ROOM] = @@ -7491,6 +8429,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_ALL_BATTLERS, .flags = FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, [MOVE_PSYSHOCK] = @@ -7505,6 +8445,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_VENOSHOCK] = @@ -7519,6 +8461,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_AUTOTOMIZE] = @@ -7533,6 +8477,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_RAGE_POWDER] = @@ -7551,6 +8497,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_USER, .flags = FLAG_POWDER, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_TELEKINESIS] = @@ -7565,6 +8513,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, [MOVE_MAGIC_ROOM] = @@ -7583,6 +8533,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_ALL_BATTLERS, .flags = FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, [MOVE_SMACK_DOWN] = @@ -7597,6 +8549,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DMG_IN_AIR, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_STORM_THROW] = @@ -7615,6 +8569,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_FLAME_BURST] = @@ -7629,6 +8585,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SLUDGE_WAVE] = @@ -7643,6 +8601,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_QUIVER_DANCE] = @@ -7657,6 +8617,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED | FLAG_DANCE, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_HEAVY_SLAM] = @@ -7675,6 +8637,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SYNCHRONOISE] = @@ -7694,6 +8658,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, + .zMovePower = 190, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_ELECTRO_BALL] = @@ -7708,6 +8674,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC, .split = SPLIT_SPECIAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SOAK] = @@ -7722,6 +8690,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, [MOVE_FLAME_CHARGE] = @@ -7736,6 +8706,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_COIL] = @@ -7750,6 +8722,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_LOW_SWEEP] = @@ -7768,6 +8742,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_ACID_SPRAY] = @@ -7782,6 +8758,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_FOUL_PLAY] = @@ -7796,6 +8774,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SIMPLE_BEAM] = @@ -7810,6 +8790,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, [MOVE_ENTRAINMENT] = @@ -7824,6 +8806,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, [MOVE_AFTER_YOU] = @@ -7838,6 +8822,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, }, [MOVE_ROUND] = @@ -7850,8 +8836,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SOUND, .split = SPLIT_SPECIAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_ECHOED_VOICE] = @@ -7866,6 +8854,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SOUND, .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_CHIP_AWAY] = @@ -7880,6 +8870,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_STAT_STAGES_IGNORED, .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_CLEAR_SMOG] = @@ -7894,6 +8886,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_STORED_POWER] = @@ -7908,6 +8902,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_QUICK_GUARD] = @@ -7923,6 +8919,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .flags = FLAG_PROTECTION_MOVE | FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, .argument = TRUE, // Protects the whole side. + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, }, [MOVE_ALLY_SWITCH] = @@ -7941,6 +8939,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_USER, .flags = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_2, }, [MOVE_SCALD] = @@ -7959,6 +8959,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_THAW_USER, .split = SPLIT_SPECIAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SHELL_SMASH] = @@ -7973,6 +8975,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_HEAL_PULSE] = @@ -7987,6 +8991,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MEGA_LAUNCHER_BOOST, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_HEX] = @@ -8005,6 +9011,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SKY_DROP] = @@ -8019,6 +9027,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SHIFT_GEAR] = @@ -8033,6 +9043,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_CIRCLE_THROW] = @@ -8047,6 +9059,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = -6, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_INCINERATE] = @@ -8065,6 +9079,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_QUASH] = @@ -8079,6 +9095,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, }, [MOVE_ACROBATICS] = @@ -8093,6 +9111,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_REFLECT_TYPE] = @@ -8107,6 +9127,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, [MOVE_RETALIATE] = @@ -8121,6 +9143,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_FINAL_GAMBIT] = @@ -8135,6 +9159,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_BESTOW] = @@ -8153,6 +9179,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_2, }, [MOVE_INFERNO] = @@ -8167,6 +9195,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_WATER_PLEDGE] = @@ -8185,6 +9215,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_FIRE_PLEDGE] = @@ -8203,6 +9235,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_GRASS_PLEDGE] = @@ -8221,6 +9255,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_VOLT_SWITCH] = @@ -8235,6 +9271,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_STRUGGLE_BUG] = @@ -8253,6 +9291,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_BULLDOZE] = @@ -8267,6 +9307,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_FROST_BREATH] = @@ -8285,6 +9327,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_DRAGON_TAIL] = @@ -8299,6 +9343,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = -6, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_WORK_UP] = @@ -8313,6 +9359,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ATK_UP_1, }, [MOVE_ELECTROWEB] = @@ -8327,6 +9375,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_WILD_CHARGE] = @@ -8341,6 +9391,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_RECKLESS_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_DRILL_RUN] = @@ -8355,6 +9407,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT, .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_DUAL_CHOP] = @@ -8369,6 +9423,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_TWO_STRIKES, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_HEART_STAMP] = @@ -8383,6 +9439,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_HORN_LEECH] = @@ -8397,6 +9455,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SACRED_SWORD] = @@ -8415,6 +9475,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_STAT_STAGES_IGNORED, .split = SPLIT_PHYSICAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_RAZOR_SHELL] = @@ -8429,6 +9491,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_HEAT_CRASH] = @@ -8447,6 +9511,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_LEAF_TORNADO] = @@ -8461,6 +9527,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_STEAMROLLER] = @@ -8475,6 +9543,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .split = SPLIT_PHYSICAL, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_DMG_MINIMIZE, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_COTTON_GUARD] = @@ -8489,6 +9559,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_NIGHT_DAZE] = @@ -8503,6 +9575,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_PSYSTRIKE] = @@ -8517,6 +9591,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_TAIL_SLAP] = @@ -8531,6 +9607,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_HURRICANE] = @@ -8549,6 +9627,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_DMG_IN_AIR, .split = SPLIT_SPECIAL, + .zMovePower = 185, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_HEAD_CHARGE] = @@ -8563,6 +9643,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_RECKLESS_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 190, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_GEAR_GRIND] = @@ -8577,6 +9659,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_TWO_STRIKES, .split = SPLIT_PHYSICAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SEARING_SHOT] = @@ -8591,11 +9675,13 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_TECHNO_BLAST] = { - #if B_UPDATED_MOVE_DATA >= GEN_6 + #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 120, #else .power = 85, @@ -8609,7 +9695,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .argument = HOLD_EFFECT_DRIVE + .argument = HOLD_EFFECT_DRIVE, + .zMovePower = 190, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_RELIC_SONG] = @@ -8624,6 +9712,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, .argument = STATUS1_SLEEP, }, @@ -8639,6 +9729,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_GLACIATE] = @@ -8653,6 +9745,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_BOLT_STRIKE] = @@ -8667,6 +9761,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 195, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_BLUE_FLARE] = @@ -8681,6 +9777,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, + .zMovePower = 195, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_FIERY_DANCE] = @@ -8695,6 +9793,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DANCE | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_FREEZE_SHOCK] = @@ -8710,6 +9810,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, .argument = MOVE_EFFECT_PARALYSIS, + .zMovePower = 200, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_ICE_BURN] = @@ -8725,6 +9827,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, .argument = MOVE_EFFECT_BURN, + .zMovePower = 200, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SNARL] = @@ -8739,6 +9843,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_SOUND, .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_ICICLE_CRASH] = @@ -8753,6 +9859,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_V_CREATE] = @@ -8767,6 +9875,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 220, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_FUSION_FLARE] = @@ -8781,6 +9891,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_THAW_USER, .split = SPLIT_SPECIAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_FUSION_BOLT] = @@ -8795,6 +9907,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_FLYING_PRESS] = @@ -8814,6 +9928,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DMG_MINIMIZE, .split = SPLIT_PHYSICAL, .argument = TYPE_FLYING, + .zMovePower = 170, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_MAT_BLOCK] = @@ -8829,6 +9945,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, .argument = TRUE, // Protects the whole side. + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, }, [MOVE_BELCH] = @@ -8843,6 +9961,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED, .split = SPLIT_SPECIAL, + .zMovePower = 190, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_ROTOTILLER] = @@ -8857,6 +9977,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ATK_UP_1, }, [MOVE_STICKY_WEB] = @@ -8871,6 +9993,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAGIC_COAT_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, }, [MOVE_FELL_STINGER] = @@ -8889,6 +10013,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_PHANTOM_FORCE] = @@ -8908,6 +10034,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .split = SPLIT_PHYSICAL, .argument = MOVE_EFFECT_FEINT, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_TRICK_OR_TREAT] = @@ -8923,6 +10051,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, .argument = TYPE_GHOST, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1, }, [MOVE_NOBLE_ROAR] = @@ -8937,6 +10067,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, }, [MOVE_ION_DELUGE] = @@ -8951,6 +10083,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 1, .flags = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, [MOVE_PARABOLIC_CHARGE] = @@ -8969,6 +10103,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_FORESTS_CURSE] = @@ -8984,6 +10120,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, .argument = TYPE_GRASS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1, }, [MOVE_PETAL_BLIZZARD] = @@ -8998,6 +10136,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_FREEZE_DRY] = @@ -9012,6 +10152,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_DISARMING_VOICE] = @@ -9026,6 +10168,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SOUND, .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_PARTING_SHOT] = @@ -9040,6 +10184,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESTORE_REPLACEMENT_HP, }, [MOVE_TOPSY_TURVY] = @@ -9058,6 +10204,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ATK_UP_1, }, [MOVE_DRAINING_KISS] = @@ -9073,6 +10221,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, .argument = 75, // restores 75% HP instead of 50% HP + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, + }, [MOVE_CRAFTY_SHIELD] = @@ -9088,6 +10239,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .flags = 0, .split = SPLIT_STATUS, .argument = TRUE, // Protects the whole side. + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, [MOVE_FLOWER_SHIELD] = @@ -9102,6 +10255,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, }, [MOVE_GRASSY_TERRAIN] = @@ -9116,6 +10271,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, }, [MOVE_MISTY_TERRAIN] = @@ -9130,6 +10287,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, [MOVE_ELECTRIFY] = @@ -9144,6 +10303,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, [MOVE_PLAY_ROUGH] = @@ -9158,6 +10319,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_FAIRY_WIND] = @@ -9172,6 +10335,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_MOONBLAST] = @@ -9186,6 +10351,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_BOOMBURST] = @@ -9200,6 +10367,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SOUND, .split = SPLIT_SPECIAL, + .zMovePower = 200, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_FAIRY_LOCK] = @@ -9214,6 +10383,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, }, [MOVE_KINGS_SHIELD] = @@ -9228,6 +10399,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 4, .flags = FLAG_PROTECTION_MOVE, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_PLAY_NICE] = @@ -9242,6 +10415,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, }, [MOVE_CONFIDE] = @@ -9256,6 +10431,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, [MOVE_DIAMOND_STORM] = @@ -9274,6 +10451,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_STEAM_ERUPTION] = @@ -9288,6 +10467,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_THAW_USER, .split = SPLIT_SPECIAL, + .zMovePower = 185, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_HYPERSPACE_HOLE] = @@ -9302,6 +10483,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_WATER_SHURIKEN] = @@ -9320,6 +10503,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 1, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, + }, [MOVE_MYSTICAL_FIRE] = @@ -9338,6 +10524,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SPIKY_SHIELD] = @@ -9352,6 +10540,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 4, .flags = FLAG_PROTECTION_MOVE, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, }, [MOVE_AROMATIC_MIST] = @@ -9366,6 +10556,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPDEF_UP_2, }, [MOVE_EERIE_IMPULSE] = @@ -9380,6 +10572,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, [MOVE_VENOM_DRENCH] = @@ -9394,6 +10588,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, }, [MOVE_POWDER] = @@ -9408,6 +10604,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 1, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_POWDER, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPDEF_UP_2, }, [MOVE_GEOMANCY] = @@ -9422,6 +10620,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1, }, [MOVE_MAGNETIC_FLUX] = @@ -9436,6 +10636,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, [MOVE_HAPPY_HOUR] = @@ -9450,6 +10652,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1, }, [MOVE_ELECTRIC_TERRAIN] = @@ -9464,6 +10668,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, }, [MOVE_DAZZLING_GLEAM] = @@ -9478,6 +10684,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_CELEBRATE] = @@ -9492,6 +10700,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1, }, [MOVE_HOLD_HANDS] = @@ -9506,6 +10716,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1, }, [MOVE_BABY_DOLL_EYES] = @@ -9520,6 +10732,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 1, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, }, [MOVE_NUZZLE] = @@ -9534,6 +10748,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_HOLD_BACK] = @@ -9548,6 +10764,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_INFESTATION] = @@ -9562,6 +10780,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_POWER_UP_PUNCH] = @@ -9576,6 +10796,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_OBLIVION_WING] = @@ -9591,6 +10813,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, .argument = 75, // restores 75% HP instead of 50% HP + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_THOUSAND_ARROWS] = @@ -9605,6 +10829,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DMG_IN_AIR | FLAG_DMG_UNGROUNDED_IGNORE_TYPE_IF_FLYING, .split = SPLIT_PHYSICAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_THOUSAND_WAVES] = @@ -9619,6 +10845,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_LANDS_WRATH] = @@ -9633,6 +10861,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_LIGHT_OF_RUIN] = @@ -9647,6 +10877,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_RECKLESS_BOOST, .split = SPLIT_SPECIAL, + .zMovePower = 200, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_ORIGIN_PULSE] = @@ -9661,6 +10893,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_MEGA_LAUNCHER_BOOST, .split = SPLIT_SPECIAL, + .zMovePower = 185, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_PRECIPICE_BLADES] = @@ -9675,6 +10909,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 190, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_DRAGON_ASCENT] = @@ -9689,6 +10925,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 190, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_HYPERSPACE_FURY] = @@ -9717,6 +10955,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_FIRST_IMPRESSION] = @@ -9731,6 +10971,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 2, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_BANEFUL_BUNKER] = @@ -9745,6 +10987,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 4, .flags = FLAG_PROTECTION_MOVE, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, }, [MOVE_SPIRIT_SHACKLE] = @@ -9759,6 +11003,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_DARKEST_LARIAT] = @@ -9773,6 +11019,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_STAT_STAGES_IGNORED, .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SPARKLING_ARIA] = @@ -9788,6 +11036,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SOUND | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, .argument = STATUS1_BURN, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_ICE_HAMMER] = @@ -9802,6 +11052,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_FLORAL_HEALING] = @@ -9816,6 +11068,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_RESET_STATS, }, [MOVE_HIGH_HORSEPOWER] = @@ -9830,6 +11084,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_STRENGTH_SAP] = @@ -9844,6 +11100,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, }, [MOVE_SOLAR_BLADE] = @@ -9858,6 +11116,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 190, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_LEAFAGE] = @@ -9872,6 +11132,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SPOTLIGHT] = @@ -9886,6 +11148,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 3, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, [MOVE_TOXIC_THREAD] = @@ -9894,12 +11158,14 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .power = 0, .type = TYPE_POISON, .accuracy = 100, - .pp = 0, + .pp = 20, .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, }, [MOVE_LASER_FOCUS] = @@ -9914,6 +11180,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ATK_UP_1, }, [MOVE_GEAR_UP] = @@ -9928,6 +11196,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, [MOVE_THROAT_CHOP] = @@ -9942,6 +11212,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_POLLEN_PUFF] = @@ -9956,6 +11228,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC, .split = SPLIT_SPECIAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_ANCHOR_SHOT] = @@ -9970,6 +11244,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_PSYCHIC_TERRAIN] = @@ -9984,6 +11260,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, [MOVE_LUNGE] = @@ -9998,6 +11276,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_FIRE_LASH] = @@ -10012,6 +11292,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_POWER_TRIP] = @@ -10026,6 +11308,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_BURN_UP] = @@ -10040,6 +11324,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_THAW_USER, .split = SPLIT_SPECIAL, + .zMovePower = 195, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SPEED_SWAP] = @@ -10054,6 +11340,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, }, [MOVE_SMART_STRIKE] = @@ -10068,6 +11356,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_PURIFY] = @@ -10082,6 +11372,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1, }, [MOVE_REVELATION_DANCE] = @@ -10096,6 +11388,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DANCE, .split = SPLIT_SPECIAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_CORE_ENFORCER] = @@ -10110,6 +11404,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_TROP_KICK] = @@ -10124,6 +11420,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_INSTRUCT] = @@ -10138,6 +11436,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, [MOVE_BEAK_BLAST] = @@ -10152,6 +11452,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = -3, .flags = FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC, .split = SPLIT_PHYSICAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_CLANGING_SCALES] = @@ -10166,6 +11468,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SOUND, .split = SPLIT_SPECIAL, + .zMovePower = 185, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_DRAGON_HAMMER] = @@ -10180,6 +11484,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_BRUTAL_SWING] = @@ -10194,6 +11500,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_AURORA_VEIL] = @@ -10208,6 +11516,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_SPD_UP_1, }, [MOVE_SHELL_TRAP] = @@ -10222,6 +11532,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = -3, .flags = FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, + .zMovePower = 200, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_FLEUR_CANNON] = @@ -10236,6 +11548,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, + .zMovePower = 195, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_PSYCHIC_FANGS] = @@ -10250,6 +11564,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_STRONG_JAW_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_STOMPING_TANTRUM] = @@ -10264,6 +11580,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 140, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SHADOW_BONE] = @@ -10278,6 +11596,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_ACCELEROCK] = @@ -10292,6 +11612,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 1, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_LIQUIDATION] = @@ -10306,6 +11628,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_PRISMATIC_LASER] = @@ -10320,6 +11644,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, + .zMovePower = 200, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SPECTRAL_THIEF] = @@ -10334,6 +11660,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_SUNSTEEL_STRIKE] = @@ -10348,6 +11676,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_TARGET_ABILITY_IGNORED, .split = SPLIT_PHYSICAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_MOONGEIST_BEAM] = @@ -10362,6 +11692,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_TARGET_ABILITY_IGNORED, .split = SPLIT_SPECIAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_TEARFUL_LOOK] = @@ -10376,6 +11708,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, + .zMovePower = 0, + .zMoveEffect = Z_EFFECT_DEF_UP_1, }, [MOVE_ZING_ZAP] = @@ -10390,6 +11724,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_PHYSICAL, + .zMovePower = 160, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_NATURES_MADNESS] = @@ -10404,6 +11740,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, + .zMovePower = 100, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_MULTI_ATTACK] = @@ -10423,6 +11761,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, .argument = HOLD_EFFECT_MEMORY, + .zMovePower = 175, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_MIND_BLOWN] = @@ -10437,6 +11777,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, + .zMovePower = 200, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_PLASMA_FISTS] = @@ -10451,6 +11793,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST, .split = SPLIT_PHYSICAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_PHOTON_GEYSER] = @@ -10465,8 +11809,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_TARGET_ABILITY_IGNORED, .split = SPLIT_SPECIAL, + .zMovePower = 180, + .zMoveEffect = Z_EFFECT_NONE, }, - + [MOVE_ZIPPY_ZAP] = { #if B_UPDATED_MOVE_DATA >= GEN_8 @@ -10740,6 +12086,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, + .zMovePower = 120, + .zMoveEffect = Z_EFFECT_NONE, }, [MOVE_DYNAMAX_CANNON] = @@ -11539,7 +12887,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST, .split = SPLIT_PHYSICAL, }, - + [MOVE_THUNDER_CAGE] = { .effect = EFFECT_TRAP, @@ -11651,4 +12999,533 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_SOUND, .split = SPLIT_SPECIAL, }, + + // Z MOVES + [MOVE_BREAKNECK_BLITZ] = + { + .effect = EFFECT_HIT, + .power = 1, + .type = TYPE_NORMAL, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_PHYSICAL, //determined from move type + .zMoveEffect = 0 + }, + [MOVE_ALL_OUT_PUMMELING] = + { + .effect = EFFECT_HIT, + .power = 1, + .type = TYPE_FIGHTING, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_PHYSICAL, + .zMoveEffect = 0 + }, + [MOVE_SUPERSONIC_SKYSTRIKE] = + { + .effect = EFFECT_HIT, + .power = 1, + .type = TYPE_FLYING, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_PHYSICAL, + .zMoveEffect = 0 + }, + [MOVE_ACID_DOWNPOUR] = + { + .effect = EFFECT_HIT, + .power = 1, + .type = TYPE_POISON, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_PHYSICAL, + .zMoveEffect = 0 + }, + [MOVE_TECTONIC_RAGE] = + { + .effect = EFFECT_HIT, + .power = 1, + .type = TYPE_GROUND, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_PHYSICAL, + .zMoveEffect = 0 + }, + [MOVE_CONTINENTAL_CRUSH] = + { + .effect = EFFECT_HIT, + .power = 1, + .type = TYPE_ROCK, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_PHYSICAL, + .zMoveEffect = 0 + }, + [MOVE_SAVAGE_SPIN_OUT] = + { + .effect = EFFECT_HIT, + .power = 1, + .type = TYPE_BUG, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_PHYSICAL, + .zMoveEffect = 0 + }, + [MOVE_NEVER_ENDING_NIGHTMARE] = + { + .effect = EFFECT_HIT, + .power = 1, + .type = TYPE_GHOST, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_PHYSICAL, + .zMoveEffect = 0 + }, + [MOVE_CORKSCREW_CRASH] = + { + .effect = EFFECT_HIT, + .power = 1, + .type = TYPE_STEEL, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_PHYSICAL, + .zMoveEffect = 0 + }, + [MOVE_INFERNO_OVERDRIVE] = + { + .effect = EFFECT_HIT, + .power = 1, + .type = TYPE_FIRE, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_PHYSICAL, + .zMoveEffect = 0 + }, + [MOVE_HYDRO_VORTEX] = + { + .effect = EFFECT_HIT, + .power = 1, + .type = TYPE_WATER, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_PHYSICAL, + .zMoveEffect = 0 + }, + [MOVE_BLOOM_DOOM] = + { + .effect = EFFECT_HIT, + .power = 1, + .type = TYPE_GRASS, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_PHYSICAL, + .zMoveEffect = 0 + }, + [MOVE_GIGAVOLT_HAVOC] = + { + .effect = EFFECT_HIT, + .power = 1, + .type = TYPE_ELECTRIC, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_PHYSICAL, + .zMoveEffect = 0 + }, + [MOVE_SHATTERED_PSYCHE] = + { + .effect = EFFECT_HIT, + .power = 1, + .type = TYPE_PSYCHIC, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_PHYSICAL, + .zMoveEffect = 0 + }, + [MOVE_SUBZERO_SLAMMER] = + { + .effect = EFFECT_HIT, + .power = 1, + .type = TYPE_ICE, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_PHYSICAL, + .zMoveEffect = 0 + }, + [MOVE_DEVASTATING_DRAKE] = + { + .effect = EFFECT_HIT, + .power = 1, + .type = TYPE_DRAGON, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_PHYSICAL, + .zMoveEffect = 0 + }, + [MOVE_BLACK_HOLE_ECLIPSE] = + { + .effect = EFFECT_HIT, + .power = 1, + .type = TYPE_DARK, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_PHYSICAL, + .zMoveEffect = 0 + }, + [MOVE_TWINKLE_TACKLE] = + { + .effect = EFFECT_HIT, + .power = 1, + .type = TYPE_FAIRY, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_PHYSICAL, + .zMoveEffect = 0 + }, + [MOVE_CATASTROPIKA] = + { + .effect = EFFECT_HIT, + .power = 210, + .type = TYPE_ELECTRIC, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_PHYSICAL, + .zMoveEffect = 0 + }, + [MOVE_10000000_VOLT_THUNDERBOLT] = + { + .effect = EFFECT_HIT, + .power = 195, + .type = TYPE_ELECTRIC, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_HIGH_CRIT, + .zMovePower = 0, + .split = SPLIT_SPECIAL, + .zMoveEffect = 0 + }, + [MOVE_STOKED_SPARKSURFER] = + { + .effect = EFFECT_PARALYZE_HIT, + .power = 175, + .type = TYPE_ELECTRIC, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_SPECIAL, + .zMoveEffect = 0 + }, + [MOVE_EXTREME_EVOBOOST] = + { + .effect = EFFECT_EXTREME_EVOBOOST, + .power = 0, + .type = TYPE_NORMAL, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_USER, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_STATUS, + .zMoveEffect = 0 + }, + [MOVE_PULVERIZING_PANCAKE] = + { + .effect = EFFECT_HIT, + .power = 210, + .type = TYPE_NORMAL, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_PHYSICAL, + .zMoveEffect = 0 + }, + [MOVE_GENESIS_SUPERNOVA] = + { + .effect = EFFECT_DAMAGE_SET_TERRAIN, + .power = 185, + .type = TYPE_PSYCHIC, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_SPECIAL, + .argument = 0, //psychic terrain + .zMoveEffect = 0 + }, + [MOVE_SINISTER_ARROW_RAID] = + { + .effect = EFFECT_HIT, + .power = 180, + .type = TYPE_GHOST, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_PHYSICAL, + .zMoveEffect = 0 + }, + [MOVE_MALICIOUS_MOONSAULT] = + { + .effect = EFFECT_HIT, + .power = 180, + .type = TYPE_DARK, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_PHYSICAL, + .zMoveEffect = 0 + }, + [MOVE_OCEANIC_OPERETTA] = + { + .effect = EFFECT_HIT, + .power = 195, + .type = TYPE_WATER, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_SPECIAL, + .zMoveEffect = 0 + }, + [MOVE_SPLINTERED_STORMSHARDS] = + { + .effect = EFFECT_DAMAGE_SET_TERRAIN, + .power = 190, + .type = TYPE_ROCK, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_PHYSICAL, + .argument = 1, //remove terrain + .zMoveEffect = 0 + }, + [MOVE_LETS_SNUGGLE_FOREVER] = + { + .effect = EFFECT_HIT, + .power = 190, + .type = TYPE_FAIRY, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_PHYSICAL, + .zMoveEffect = 0 + }, + [MOVE_CLANGOROUS_SOULBLAZE] = + { + .effect = EFFECT_ALL_STATS_UP_HIT, + .power = 185, + .type = TYPE_DRAGON, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 100, + .target = MOVE_TARGET_BOTH, + .priority = 0, + .flags = FLAG_SOUND, + .zMovePower = 0, + .split = SPLIT_SPECIAL, + .zMoveEffect = 0 + }, + [MOVE_GUARDIAN_OF_ALOLA] = + { + .effect = EFFECT_SUPER_FANG, + .power = 1, + .type = TYPE_FAIRY, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_SPECIAL, + .zMoveEffect = 0 + }, + [MOVE_SEARING_SUNRAZE_SMASH] = + { + .effect = EFFECT_HIT, + .power = 200, + .type = TYPE_STEEL, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_PHYSICAL, + .zMoveEffect = 0 + }, + [MOVE_MENACING_MOONRAZE_MAELSTROM] = + { + .effect = EFFECT_HIT, + .power = 200, + .type = TYPE_GHOST, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_SPECIAL, + .zMoveEffect = 0 + }, + [MOVE_LIGHT_THAT_BURNS_THE_SKY] = + { + .effect = EFFECT_HIT, + .power = 200, + .type = TYPE_PSYCHIC, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_SPECIAL, + .zMoveEffect = 0 + }, + [MOVE_SOUL_STEALING_7_STAR_STRIKE] = + { + .effect = EFFECT_HIT, + .power = 195, + .type = TYPE_GHOST, + .accuracy = 0, + .pp = 1, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = 0, + .zMovePower = 0, + .split = SPLIT_PHYSICAL, + .zMoveEffect = 0 + }, }; diff --git a/src/data/text/move_names.h b/src/data/text/move_names.h index a5b9f4e75..6299244bb 100644 --- a/src/data/text/move_names.h +++ b/src/data/text/move_names.h @@ -757,3 +757,78 @@ const u8 gMoveNames[MOVES_COUNT][MOVE_NAME_LENGTH + 1] = [MOVE_ASTRAL_BARRAGE] = _("AstrlBarrage"), [MOVE_EERIE_SPELL] = _("Eerie Spell"), }; + +static const u8 sText_Breakneck_Blitz[] = _("Breakneck Blitz"); +static const u8 sText_All_Out_Pummeling[] = _("All Out Pummeling"); +static const u8 sText_Supersonic_Skystrike[] = _("Supersonic Skystrike"); +static const u8 sText_Acid_Downpour[] = _("Acid Downpour"); +static const u8 sText_Tectonic_Rage[] = _("Tectonic Rage"); +static const u8 sText_Continental_Crush[] = _("Continental Crush"); +static const u8 sText_Savage_Spin_Out[] = _("Savage Spin Out"); +static const u8 sText_Never_Ending_Nightmare[] = _("Never Ending Nightmare"); +static const u8 sText_Corkscrew_Crash[] = _("Corkscrew Crash"); +static const u8 sText_Inferno_Overdrive[] = _("Inferno Overdrive"); +static const u8 sText_Hydro_Vortex[] = _("Hydro Vortex"); +static const u8 sText_Bloom_Doom[] = _("Bloom Doom"); +static const u8 sText_Gigavolt_Havoc[] = _("Gigavolt Havoc"); +static const u8 sText_Shattered_Psyche[] = _("Shattered Psyche"); +static const u8 sText_Subzero_Slammer[] = _("Subzero Slammer"); +static const u8 sText_Devastating_Drake[] = _("Devastating Drake"); +static const u8 sText_Black_Hole_Eclipse[] = _("Black Hole Eclipse"); +static const u8 sText_Twinkle_Tackle[] = _("Twinkle Tackle"); +static const u8 sText_Catastropika[] = _("Catastropika"); +static const u8 sText_10000000_Volt_Thunderbolt[] = _("10000000 Volt Thunderbolt"); +static const u8 sText_Stoked_Sparksurfer[] = _("Stoked Sparksurfer"); +static const u8 sText_Extreme_Evoboost[] = _("Extreme Evoboost"); +static const u8 sText_Pulverizing_Pancake[] = _("Pulverizing Pancake"); +static const u8 sText_Genesis_Supernova[] = _("Genesis Supernova"); +static const u8 sText_Sinister_Arrow_Raid[] = _("Sinister Arrow Raid"); +static const u8 sText_Malicious_Moonsault[] = _("Malicious Moonsault"); +static const u8 sText_Oceanic_Operetta[] = _("Oceanic Operetta"); +static const u8 sText_Splintered_Stormshards[] = _("Splintered Stormshards"); +static const u8 sText_Lets_Snuggle_Forever[] = _("Let's Snuggle Forever"); +static const u8 sText_Clangorous_Soulblaze[] = _("Clangorous Soulblaze"); +static const u8 sText_Guardian_Of_Alola[] = _("Guardian Of Alola"); +static const u8 sText_Searing_Sunraze_Smash[] = _("Searing Sunraze Smash"); +static const u8 sText_Menacing_Moonraze_Maelstrom[] = _("Menacing Moonraze Maelstrom"); +static const u8 sText_Light_That_Burns_The_Sky[] = _("Light That Burns The Sky"); +static const u8 sText_Soul_Stealing_7_Star_Strike[] = _("Soul Stealing 7 Star Strike"); + +const u8 *const gZMoveNames[] = +{ + [MOVE_BREAKNECK_BLITZ - MOVE_BREAKNECK_BLITZ] = sText_Breakneck_Blitz, + [MOVE_ALL_OUT_PUMMELING - MOVE_BREAKNECK_BLITZ] = sText_All_Out_Pummeling, + [MOVE_SUPERSONIC_SKYSTRIKE - MOVE_BREAKNECK_BLITZ] = sText_Supersonic_Skystrike, + [MOVE_ACID_DOWNPOUR - MOVE_BREAKNECK_BLITZ] = sText_Acid_Downpour, + [MOVE_TECTONIC_RAGE - MOVE_BREAKNECK_BLITZ] = sText_Tectonic_Rage, + [MOVE_CONTINENTAL_CRUSH - MOVE_BREAKNECK_BLITZ] = sText_Continental_Crush, + [MOVE_SAVAGE_SPIN_OUT - MOVE_BREAKNECK_BLITZ] = sText_Savage_Spin_Out, + [MOVE_NEVER_ENDING_NIGHTMARE - MOVE_BREAKNECK_BLITZ] = sText_Never_Ending_Nightmare, + [MOVE_CORKSCREW_CRASH - MOVE_BREAKNECK_BLITZ] = sText_Corkscrew_Crash, + [MOVE_INFERNO_OVERDRIVE - MOVE_BREAKNECK_BLITZ] = sText_Inferno_Overdrive, + [MOVE_HYDRO_VORTEX - MOVE_BREAKNECK_BLITZ] = sText_Hydro_Vortex, + [MOVE_BLOOM_DOOM - MOVE_BREAKNECK_BLITZ] = sText_Bloom_Doom, + [MOVE_GIGAVOLT_HAVOC - MOVE_BREAKNECK_BLITZ] = sText_Gigavolt_Havoc, + [MOVE_SHATTERED_PSYCHE - MOVE_BREAKNECK_BLITZ] = sText_Shattered_Psyche, + [MOVE_SUBZERO_SLAMMER - MOVE_BREAKNECK_BLITZ] = sText_Subzero_Slammer, + [MOVE_DEVASTATING_DRAKE - MOVE_BREAKNECK_BLITZ] = sText_Devastating_Drake, + [MOVE_BLACK_HOLE_ECLIPSE - MOVE_BREAKNECK_BLITZ] = sText_Black_Hole_Eclipse, + [MOVE_TWINKLE_TACKLE - MOVE_BREAKNECK_BLITZ] = sText_Twinkle_Tackle, + [MOVE_CATASTROPIKA - MOVE_BREAKNECK_BLITZ] = sText_Catastropika, + [MOVE_10000000_VOLT_THUNDERBOLT - MOVE_BREAKNECK_BLITZ] = sText_10000000_Volt_Thunderbolt, + [MOVE_STOKED_SPARKSURFER - MOVE_BREAKNECK_BLITZ] = sText_Stoked_Sparksurfer, + [MOVE_EXTREME_EVOBOOST - MOVE_BREAKNECK_BLITZ] = sText_Extreme_Evoboost, + [MOVE_PULVERIZING_PANCAKE - MOVE_BREAKNECK_BLITZ] = sText_Pulverizing_Pancake, + [MOVE_GENESIS_SUPERNOVA - MOVE_BREAKNECK_BLITZ] = sText_Genesis_Supernova, + [MOVE_SINISTER_ARROW_RAID - MOVE_BREAKNECK_BLITZ] = sText_Sinister_Arrow_Raid, + [MOVE_MALICIOUS_MOONSAULT - MOVE_BREAKNECK_BLITZ] = sText_Malicious_Moonsault, + [MOVE_OCEANIC_OPERETTA - MOVE_BREAKNECK_BLITZ] = sText_Oceanic_Operetta, + [MOVE_SPLINTERED_STORMSHARDS - MOVE_BREAKNECK_BLITZ] = sText_Splintered_Stormshards, + [MOVE_LETS_SNUGGLE_FOREVER - MOVE_BREAKNECK_BLITZ] = sText_Lets_Snuggle_Forever, + [MOVE_CLANGOROUS_SOULBLAZE - MOVE_BREAKNECK_BLITZ] = sText_Clangorous_Soulblaze, + [MOVE_GUARDIAN_OF_ALOLA - MOVE_BREAKNECK_BLITZ] = sText_Guardian_Of_Alola, + [MOVE_SEARING_SUNRAZE_SMASH - MOVE_BREAKNECK_BLITZ] = sText_Searing_Sunraze_Smash, + [MOVE_MENACING_MOONRAZE_MAELSTROM - MOVE_BREAKNECK_BLITZ] = sText_Menacing_Moonraze_Maelstrom, + [MOVE_LIGHT_THAT_BURNS_THE_SKY - MOVE_BREAKNECK_BLITZ] = sText_Light_That_Burns_The_Sky, + [MOVE_SOUL_STEALING_7_STAR_STRIKE - MOVE_BREAKNECK_BLITZ] = sText_Soul_Stealing_7_Star_Strike, +}; diff --git a/src/pokemon.c b/src/pokemon.c index 9a1582f6d..874db8f12 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -9,6 +9,7 @@ #include "battle_pyramid.h" #include "battle_setup.h" #include "battle_tower.h" +#include "battle_z_move.h" #include "data.h" #include "event_data.h" #include "evolution_scene.h"