diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index 2faa39dec..3aa322ed8 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -4958,6 +4958,14 @@ Move_FLAME_BURST: delay 18 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 16, 1 createsprite gExplosionSpriteTemplate, ANIM_TARGET, 4, 0, 0, 1, 0 + call FlameBurstSpread + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + delay 3 + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 4, 14, -14, 1, 0 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + waitforvisualfinish + end +FlameBurstSpread: createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 0, 192, 76, 70 createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 0, -192, 76, 70 createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 0, 20, 140, 70 @@ -4972,12 +4980,8 @@ Move_FLAME_BURST: createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 0, -224, -32, 70 createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 0, 112, -128, 70 createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 0, -112, -128, 70 - playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET - delay 3 - createsprite gExplosionSpriteTemplate, ANIM_TARGET, 4, 14, -14, 1, 0 - playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET - waitforvisualfinish - end + return + Move_SLUDGE_WAVE: panse SE_M_WHIRLPOOL, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0 @@ -5532,8 +5536,8 @@ Move_SHELL_SMASH: loadspritegfx ANIM_TAG_ROCKS loadspritegfx ANIM_TAG_HANDS_AND_FEET playsewithpan SE_M_SCRATCH, SOUND_PAN_ATTACKER - createsprite gShellSmashRightShellSpriteTemplate, ANIM_ATTACKER, 2, 0xffd7, 0x0, 0x2, 0x333, 0x0, 0xa - createsprite gShellSmashLeftShellSpriteTemplate, ANIM_ATTACKER, 2, 0x20, 0x0, 0x6, 0xfccd, 0x0, 0xa + createsprite gShellSmashRightShellSpriteTemplate, ANIM_ATTACKER, 2, 0xffd7, 0x0, 0x2, 0x333, 0x0, 10, 30 + createsprite gShellSmashLeftShellSpriteTemplate, ANIM_ATTACKER, 2, 0x20, 0x0, 0x6, 0xfccd, 0x0, 10, 30 delay 10 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1, 0x1 createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x8, 0x1, 0x0 @@ -6138,37 +6142,8 @@ Move_GRASS_PLEDGE: createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 @middle fountain (also continues left fountain) - - playsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET - createsprite gVineWhipSpriteTemplate, ANIM_TARGET, 2, 0, 0 - - createvisualtask AnimTask_BlendColorCycle, 2, 4, 2, 2, 0, 11, RGB_GREEN - createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 3, 0, 37, 1 - - createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 - createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 - delay 4 - createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 - createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 - delay 4 - createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 - createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 - delay 4 - createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 - createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 - delay 4 - createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 - createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 - delay 4 - createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 - createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 - delay 4 - createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 - createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 - delay 4 - createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 - createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 - delay 4 + + call GrassPledgeMiddleFountain @right fountain (also continues middle and left fountains) @@ -6213,6 +6188,39 @@ Move_GRASS_PLEDGE: blendoff end +GrassPledgeMiddleFountain: + playsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET + createsprite gVineWhipSpriteTemplate, ANIM_TARGET, 2, 0, 0 + + createvisualtask AnimTask_BlendColorCycle, 2, 4, 2, 2, 0, 11, RGB_GREEN + createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 3, 0, 37, 1 + + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 + createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2 + delay 4 + return + Move_VOLT_SWITCH: loadspritegfx ANIM_TAG_SPARK loadspritegfx ANIM_TAG_SPARK_2 @@ -13973,8 +13981,32 @@ SmallAppleShower: delay 0x2 return +@ credits to Skeli Move_SPIRIT_BREAK:: - goto Move_PSYCHIC + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT + loadspritegfx ANIM_TAG_TEAL_ALERT + loadspritegfx ANIM_TAG_EXPLOSION_2 + createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_CIRCLE_OF_LIGHT, 0x0, 0x10, 0x10, 0x7FFF + createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_TEAL_ALERT, 0x0, 0xA, 0xA, 0x7DDE + createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_EXPLOSION_2, 0x0, 0xA, 0xA, 0x7DDE + monbg ANIM_DEF_PARTNER + createvisualtask AnimTask_WindUpLunge, 0x5, ANIM_ATTACKER, 0xffec, 0x8, 0x30, 0x8, 0x38, 0x6 + playsewithpan SE_M_MEGA_KICK, SOUND_PAN_TARGET + createsprite gSpriteTemplate_SpiritBreakChargeBall, ANIM_TARGET, 1, ANIM_TARGET + call MindReaderEyeSpikeEffect + call MindReaderEyeSpikeEffect + call MindReaderEyeSpikeEffect + call MindReaderEyeSpikeEffect + waitforvisualfinish + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x0, 0x5, 0x5, 0x1 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + createsprite gSpriteTemplate_SpiritBreakExplode, ANIM_TARGET, 3, 0x0, 0x0, 0x1, 0x1 + waitforvisualfinish + delay 0x5 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x5 + clearmonbg ANIM_DEF_PARTNER + waitforvisualfinish + end Move_STRANGE_STEAM:: loadspritegfx ANIM_TAG_PINK_CLOUD @@ -14056,8 +14088,44 @@ Move_OBSTRUCT:: clearmonbg ANIM_ATK_PARTNER end +@Credits to Skeli Move_FALSE_SURRENDER:: - goto Move_FEINT + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_CROSS_IMPACT + monbg ANIM_ATTACKER + fadetobg BG_DARK + waitbgfadein + delay 0x0 + playsewithpan SE_M_FAINT_ATTACK, 0xc0 + createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 0x2, 0x0, 0x12, 0x6, 0x1, 0x3 + createvisualtask AnimTask_AttackerFadeToInvisible, 0x2, 0x1 + waitforvisualfinish + clearmonbg ANIM_ATTACKER + invisible ANIM_ATTACKER + delay 0x1 + createvisualtask AnimTask_SetAttackerInvisibleWaitForSignal, 0x2, + monbg ANIM_TARGET + setalpha 12, 8 + delay 0x1 + playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 0x1f, 0x3, 0x1, 0x7fff, 0xa, 0x0, 0xa + createsprite gSpriteTemplate_LargeCrossImpact, ANIM_ATTACKER, 3, 0x0, 0x0, 0x1, 0x14 + createvisualtask AnimTask_ShakeMon, 0x5, 0x1, 0x7, 0x0, 0x9, 0x1 + waitforvisualfinish + clearmonbg ANIM_TARGET + blendoff + delay 0x1 + setarg 0x7, 0x1000 + delay 0x1 + createvisualtask AnimTask_InitAttackerFadeFromInvisible, 0x2, + monbg ANIM_ATTACKER + createvisualtask AnimTask_AttackerFadeFromInvisible, 0x2, 0x1 + waitforvisualfinish + clearmonbg ANIM_ATTACKER + delay 0x1 + restorebg + waitbgfadein + end Move_METEOR_ASSAULT:: loadspritegfx ANIM_TAG_ELECTRIC_ORBS @@ -14161,17 +14229,216 @@ SetSteelBeamBackground: SetSteelBeamBgPlayer: fadetobg BG_STEEL_BEAM_PLAYER +@Credits to Skeli Move_EXPANDING_FORCE:: - end @to do: + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT + loadspritegfx ANIM_TAG_EXPLOSION_2 + createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_CIRCLE_OF_LIGHT, 0x0, 0xA, 0xA, 0x7DDE + createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_EXPLOSION_2, 0x0, 0xA, 0xA, 0x7DDE + monbg ANIM_DEF_PARTNER + call SetPsychicBackground + createvisualtask AnimTask_ShakeMon2, 0x2, ANIM_ATTACKER, 0x1, 0x0, 0xa, 0x1 + createvisualtask AnimTask_BlendColorCycle, 0x2, 0x2, F_PAL_ATTACKER, 0x2, 0x0, 0x8, 0x2ff + waitforvisualfinish + playsewithpan SE_M_MEGA_KICK, SOUND_PAN_TARGET + choosetwoturnanim EXPANDING_FORCE_SINGLE_TARGET EXPANDING_FORCE_BOTH_TARGETS +EXPANDING_FORCE_SINGLE_TARGET: + createsprite gSpriteTemplate_SpiritBreakChargeBall, ANIM_TARGET, 1, ANIM_TARGET + waitforvisualfinish + createvisualtask AnimTask_ShakeTargetBasedOnMovePowerOrDmg, 0x2, 0x0, 0x1, 0x18, 0x1, 0x0 + call MaxKnuckleExplosionGeyser + waitforvisualfinish + call UnsetPsychicBg + clearmonbg ANIM_DEF_PARTNER + end + +EXPANDING_FORCE_BOTH_TARGETS: + createsprite gSpriteTemplate_SpiritBreakChargeBall, ANIM_TARGET, 1, ANIM_TARGET + createsprite gSpriteTemplate_SpiritBreakChargeBall, ANIM_TARGET, 1, ANIM_DEF_PARTNER + waitforvisualfinish + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x5, 0x0, 0x18, 0x1 @;High power + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_DEF_PARTNER, 0x5, 0x0, 0x18, 0x1 + call ExpandingForceExplosionGeyser + waitforvisualfinish + call UnsetPsychicBg + clearmonbg ANIM_DEF_PARTNER + end + +ExpandingForceExplosionGeyser: + createsprite gSpriteTemplate_ExpandingForceExplode, ANIM_TARGET, 4, 0x0003, 0x0005, ANIM_TARGET + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + delay 0x0 + createsprite gSpriteTemplate_ExpandingForceExplode, ANIM_TARGET, 4, 0xfff5, 0xfff1, ANIM_TARGET + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + delay 0x0 + createsprite gSpriteTemplate_ExpandingForceExplode, ANIM_TARGET, 4, 0x0008, 0xfffb, ANIM_TARGET + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + delay 0x0 + createsprite gSpriteTemplate_ExpandingForceExplode, ANIM_TARGET, 4, 0xfffa, 0x0012, ANIM_TARGET + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + delay 0x0 + createsprite gSpriteTemplate_ExpandingForceExplode, ANIM_TARGET, 4, 0x0000, 0x0005, ANIM_TARGET + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + delay 0x0 + createsprite gSpriteTemplate_ExpandingForceExplode, ANIM_TARGET, 4, 0x0003, 0xfff5, ANIM_TARGET + delay 0x0 + createsprite gSpriteTemplate_ExpandingForceExplode, ANIM_TARGET, 4, 0xfff5, 0xffe1, ANIM_TARGET + delay 0x0 + createsprite gSpriteTemplate_ExpandingForceExplode, ANIM_TARGET, 4, 0x0008, 0xffeb, ANIM_TARGET + delay 0x0 + createsprite gSpriteTemplate_ExpandingForceExplode, ANIM_TARGET, 4, 0xfffa, 0x0002, ANIM_TARGET + delay 0x0 + createsprite gSpriteTemplate_ExpandingForceExplode, ANIM_TARGET, 4, 0x0000, 0xfff5, ANIM_TARGET + delay 0x0 + createsprite gSpriteTemplate_ExpandingForceExplode, ANIM_TARGET, 4, 0x0003, 0xffe5, ANIM_TARGET + delay 0x0 + createsprite gSpriteTemplate_ExpandingForceExplode, ANIM_TARGET, 4, 0xfff5, 0xffd1, ANIM_TARGET + delay 0x0 + createsprite gSpriteTemplate_ExpandingForceExplode, ANIM_TARGET, 4, 0x0008, 0xffdb, ANIM_TARGET + delay 0x0 + createsprite gSpriteTemplate_ExpandingForceExplode, ANIM_TARGET, 4, 0xfffa, 0xfff2, ANIM_TARGET + delay 0x0 + createsprite gSpriteTemplate_ExpandingForceExplode, ANIM_TARGET, 4, 0x0000, 0xffe5, ANIM_TARGET + return + +MaxKnuckleExplosionGeyser: + createsprite gLightThatBurnsTheSkyExplosionSpriteTemplate, ANIM_TARGET, 4, 0x0003, 0x0005, ANIM_TARGET, 0x0 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + delay 0x0 + createsprite gLightThatBurnsTheSkyExplosionSpriteTemplate, ANIM_TARGET, 4, 0xfff5, 0xfff1, ANIM_TARGET, 0x0 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + delay 0x0 + createsprite gLightThatBurnsTheSkyExplosionSpriteTemplate, ANIM_TARGET, 4, 0x0008, 0xfffb, ANIM_TARGET, 0x0 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + delay 0x0 + createsprite gLightThatBurnsTheSkyExplosionSpriteTemplate, ANIM_TARGET, 4, 0xfffa, 0x0012, ANIM_TARGET, 0x0 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + delay 0x0 + createsprite gLightThatBurnsTheSkyExplosionSpriteTemplate, ANIM_TARGET, 4, 0x0000, 0x0005, ANIM_TARGET, 0x0 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + delay 0x0 + createsprite gLightThatBurnsTheSkyExplosionSpriteTemplate, ANIM_TARGET, 4, 0x0003, 0xfff5, ANIM_TARGET, 0x0 + delay 0x0 + createsprite gLightThatBurnsTheSkyExplosionSpriteTemplate, ANIM_TARGET, 4, 0xfff5, 0xffe1, ANIM_TARGET, 0x0 + delay 0x0 + createsprite gLightThatBurnsTheSkyExplosionSpriteTemplate, ANIM_TARGET, 4, 0x0008, 0xffeb, ANIM_TARGET, 0x0 + delay 0x0 + createsprite gLightThatBurnsTheSkyExplosionSpriteTemplate, ANIM_TARGET, 4, 0xfffa, 0x0002, ANIM_TARGET, 0x0 + delay 0x0 + createsprite gLightThatBurnsTheSkyExplosionSpriteTemplate, ANIM_TARGET, 4, 0x0000, 0xfff5, ANIM_TARGET, 0x0 + delay 0x0 + createsprite gLightThatBurnsTheSkyExplosionSpriteTemplate, ANIM_TARGET, 4, 0x0003, 0xffe5, ANIM_TARGET, 0x0 + delay 0x0 + createsprite gLightThatBurnsTheSkyExplosionSpriteTemplate, ANIM_TARGET, 4, 0xfff5, 0xffd1, ANIM_TARGET, 0x0 + delay 0x0 + createsprite gLightThatBurnsTheSkyExplosionSpriteTemplate, ANIM_TARGET, 4, 0x0008, 0xffdb, ANIM_TARGET, 0x0 + delay 0x0 + createsprite gLightThatBurnsTheSkyExplosionSpriteTemplate, ANIM_TARGET, 4, 0xfffa, 0xfff2, ANIM_TARGET, 0x0 + delay 0x0 + createsprite gLightThatBurnsTheSkyExplosionSpriteTemplate, ANIM_TARGET, 4, 0x0000, 0xffe5, ANIM_TARGET, 0x0 + return + + +@Credits to Skeli Move_STEEL_ROLLER:: - goto Move_GYRO_BALL + loadspritegfx ANIM_TAG_STEAMROLLER + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_ROCKS + playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_TARGET + createsprite gSpriteTemplate_SteelRoller, ANIM_TARGET, 3, 0, -40, 2, 50, 3 + delay 1 + createvisualtask AnimTask_SquishTarget, 0x2, + delay 14 + call SteelRollerRocks + delay 33 + call SteelRollerRocks + waitforvisualfinish + end +SteelRollerRocks: + playsewithpan SE_M_STRENGTH, SOUND_PAN_TARGET + createsprite gRockScatterSpriteTemplate, ANIM_TARGET, 2, 0xfff4, 0x1b, 0x2, 0x3 + createsprite gRockScatterSpriteTemplate, ANIM_TARGET, 2, 0x8, 0x1c, 0x3, 0x4 + createsprite gRockScatterSpriteTemplate, ANIM_TARGET, 2, 0xfffc, 0x1e, 0x2, 0x3 + createsprite gRockScatterSpriteTemplate, ANIM_TARGET, 2, 0xc, 0x19, 0x4, 0x4 + return +@Credits to Skeli Move_SCALE_SHOT:: - end @to do: + loadspritegfx ANIM_TAG_SHELL_RIGHT + loadspritegfx ANIM_TAG_IMPACT + createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 0x4, 0x6 + delay 0x3 + playsewithpan SE_M_BONEMERANG, SOUND_PAN_ATTACKER + createsprite gSpriteTemplate_ScaleShotScale, ANIM_TARGET, 2, 0x10, 0x0, 0x0, 0x0, 0x14, 0x101 + waitforvisualfinish + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, 0x1, 0x1 + createvisualtask AnimTask_ShakeMon, 0x2, 0x1, 0x3, 0x0, 0x5, 0x1 + delay 0x10 + stopsound + waitforvisualfinish + end +@Credits to Skeli Move_METEOR_BEAM:: - end @to do: + loadspritegfx ANIM_TAG_ROCKS + fadetobg BG_COSMIC + waitbgfadeout + choosetwoturnanim METEOR_BEAM_CHARGE METEOR_BEAM_BLAST + +METEOR_BEAM_CHARGE: + createvisualtask AnimTask_StartSlidingBg, 0x5, 0x0, 0xFC00, FALSE, 0xffff + waitbgfadein + monbg ANIM_ATK_PARTNER + playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER + call ContinentalCrushStockpileRocks + playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER + call ContinentalCrushStockpileRocks + waitforvisualfinish + clearmonbg ANIM_ATK_PARTNER + call UnsetPsychicBg + end + +METEOR_BEAM_BLAST: + createvisualtask AnimTask_StartSlidingBg, 0x5, 0xf700, 0x0, TRUE, 0xffff @;Scroll right/left + waitbgfadein + monbg ANIM_TARGET + panse SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER SOUND_PAN_TARGET 0x2 0x0 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_ATTACKER, 0x0, 0x4, 0x57, 0x1 + call MeteorBeamRockLaunch + call MeteorBeamRockLaunch + call MeteorBeamRockLaunch + createvisualtask AnimTask_ShakeMon2, 0x2, 0x1, 0x0, 0x4, 0x51, 0x1 + call MeteorBeamRockLaunch + call MeteorBeamRockLaunch + call MeteorBeamRockLaunch + call MeteorBeamRockLaunch + call MeteorBeamRockLaunch + call MeteorBeamRockLaunch + call MeteorBeamRockLaunch + call MeteorBeamRockLaunch + call MeteorBeamRockLaunch + call MeteorBeamRockLaunch + call MeteorBeamRockLaunch + call MeteorBeamRockLaunch + call MeteorBeamRockLaunch + call MeteorBeamRockLaunch + call MeteorBeamRockLaunch + call MeteorBeamRockLaunch + call MeteorBeamRockLaunch + call MeteorBeamRockLaunch + waitforvisualfinish + clearmonbg ANIM_TARGET + call UnsetPsychicBg + end + +MeteorBeamRockLaunch: + createsprite gSpriteTemplate_MeteorBeamRock, ANIM_TARGET, 2, 0, 0, 0x10 + delay 0x2 + createsprite gSpriteTemplate_MeteorBeamRock, ANIM_TARGET, 2, 0, 0, 0x10 + delay 0x2 + return Move_SHELL_SIDE_ARM:: createvisualtask AnimTask_ShellSideArm, 0x5 @@ -14219,14 +14486,110 @@ Move_SHELL_SIDE_ARM_SPECIAL: @ Modified Snipe Shot, placeholder waitforvisualfinish end +@Credits to Skeli Move_MISTY_EXPLOSION:: - end @to do: + loadspritegfx ANIM_TAG_EXPLOSION + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x8, 0x9, 0x7A5B, 0x8, 0x0, 0x8 + createvisualtask AnimTask_ShakeMon2, 0x5, 0x4, 0x8, 0x0, 0x28, 0x1 + createvisualtask AnimTask_ShakeMon2, 0x5, 0x5, 0x8, 0x0, 0x28, 0x1 + createvisualtask AnimTask_ShakeMon2, 0x5, 0x6, 0x8, 0x0, 0x28, 0x1 + createvisualtask AnimTask_ShakeMon2, 0x5, 0x7, 0x8, 0x0, 0x28, 0x1 + createvisualtask AnimTask_ShakeMon2, 0x5, 0x8, 0x8, 0x0, 0x28, 0x1 + call Explosion1 + call Explosion1 + waitforvisualfinish + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, 0x1, 0x1, 0x10, 0x10, 0x7F7F @;White Pink + delay 0x32 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, 0x1, 0x3, 0x10, 0x0, 0x7F7F @;White Pink + end +@Credits to Skeli Move_GRASSY_GLIDE:: - end @to do: - + loadspritegfx ANIM_TAG_LEAF @leaves + loadspritegfx ANIM_TAG_IMPACT @hits + createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_IMPACT, 0x0, 0xD, 0xD, 0x0266 @;Leaf Green + createvisualtask AnimTask_BlendColorCycle, 0x2, F_PAL_ATTACKER, 0x0, 0x2, 0x0, 0x8, 0x03AC + delay 0x2 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, -120, 0, 0, 10 @;Slide off off, screen + waitforvisualfinish + call GrassPledgeMiddleFountain + waitforvisualfinish + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x2 + end + +@Credits to Skeli Move_RISING_VOLTAGE:: - end @to do: + loadspritegfx ANIM_TAG_ELECTRIC_ORBS + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT + loadspritegfx ANIM_TAG_SPARK_2 + loadspritegfx ANIM_TAG_LIGHTNING + monbg ANIM_ATTACKER + setalpha 12, 8 + createvisualtask AnimTask_GetBattleTerrain, 0x5, + jumpargeq 0x0, BG_ELECTRIC_TERRAIN, ANIM_RISING_VOLTAGE_STRONGER +ANIM_RISING_VOLTAGE_NORMAL: + createvisualtask AnimTask_BlendBattleAnimPal, 0x2, F_PAL_BG, 0x1, 0x0, 0x4, 0x0 @;To black + waitforvisualfinish + createvisualtask AnimTask_ElectricChargingParticles, 0x2, ANIM_ATTACKER, 30, 0, 3 @;Amount, Slowness, Slowness, Compaction + playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER + delay 0xc + createsprite gGrowingShockWaveOrbSpriteTemplate, ANIM_ATTACKER, 0, 0x0 + waitforvisualfinish + createvisualtask AnimTask_ShakeTargetBasedOnMovePowerOrDmg, 0x2, 0x0, 0x1, 0x34, 0x1, 0x0 + createvisualtask AnimTask_BlendColorCycle, 0x2, F_PAL_TARGET, 0x1, 0x4, 0x0, 0xC, 0x079D + playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x10 + delay 0x1 + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0x0, 0xfff0 + delay 0x1 + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0x0, 0xffe0 + call StokedSparksurferSparkGeyser + call StokedSparksurferSparkGeyser + waitforvisualfinish + createvisualtask AnimTask_BlendBattleAnimPal, 0x2, F_PAL_BG, 0x1, 0x4, 0x0, 0x0 @;From black + waitforvisualfinish + clearmonbg ANIM_ATTACKER + end + +ANIM_RISING_VOLTAGE_STRONGER: + createvisualtask AnimTask_BlendBattleAnimPal, 0x2, F_PAL_BG, 0x1, 0x0, 0xC, 0x0 @;To black + waitforvisualfinish + createvisualtask AnimTask_ElectricChargingParticles, 0x2, ANIM_ATTACKER, 55, 0, 0 @;Amount, Slowness, Slowness, Compaction + playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER + delay 0xc + createsprite gGrowingShockWaveOrbSpriteTemplate, ANIM_ATTACKER, 2, + waitforvisualfinish + createvisualtask AnimTask_ShakeTargetBasedOnMovePowerOrDmg, 0x2, 0x0, 0x1, 0x54, 0x1, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x4, 0x0, 0x10, 0x079D + playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0x10, 0x10 + delay 0x1 + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0x10, 0xfff0 + delay 0x1 + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0x10, 0xffe0 + call StokedSparksurferSparkGeyser + playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, -0x18, 0x10 + delay 0x1 + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, -0x18, 0xfff0 + delay 0x1 + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, -0x18, 0xffe0 + call StokedSparksurferSparkGeyser + playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x10 + delay 0x1 + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0x0, 0xfff0 + delay 0x1 + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0x0, 0xffe0 + call StokedSparksurferSparkGeyser + waitforvisualfinish + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x1, 0x10, 0x0, 0x079D @;From Yellow + createvisualtask AnimTask_BlendBattleAnimPal, 0x2, F_PAL_BG, 0x1, 0xC, 0x0, 0x0 @;From black + waitforvisualfinish + clearmonbg ANIM_ATTACKER + end + Move_TERRAIN_PULSE:: loadspritegfx ANIM_TAG_DRAGON_PULSE @@ -14312,13 +14675,147 @@ TerrainPulseEnd: end Move_SKITTER_SMACK:: - end @to do: + loadspritegfx ANIM_TAG_IMPACT @Hits + loadspritegfx ANIM_TAG_WHITE_SHADOW @Destiny Bond + loadspritegfx ANIM_TAG_QUICK_GUARD_HAND @Black Colour + loadspritegfx ANIM_TAG_RAZOR_LEAF + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x10, 0x7FFF + waitforvisualfinish + playsewithpan SE_M_FAINT_ATTACK, SOUND_PAN_ATTACKER + invisible ANIM_ATTACKER + delay 1 + visible ANIM_ATTACKER + delay 1 + invisible ANIM_ATTACKER + delay 1 + visible ANIM_ATTACKER + delay 1 + invisible ANIM_ATTACKER + waitsound + createvisualtask AnimTask_DestinyBondWhiteShadow, 0x5, 0x0, 0x30 + delay 0x17 + createvisualtask AnimTask_IsTargetSameSide, 0x2, + createvisualtask AnimTask_SnatchOpposingMonMove, 0x2, + delay 0x19 + visible ANIM_ATTACKER + invisible ANIM_ATTACKER + delay 5 + createsprite gSkitterSmackImpactTemplate, ANIM_TARGET, 2, 0xfff6, 0xfff6, 0x0 + call HyperspaceHoleMovement + createsprite gSkitterSmackImpactTemplate, ANIM_TARGET, 2, 0xa, 0x14, 0x0 + call HyperspaceHoleMovement + createsprite gSkitterSmackImpactTemplate, ANIM_TARGET, 2, 0xfffb, 0xa, 0x0 + call HyperspaceHoleMovement + createsprite gSkitterSmackImpactTemplate, ANIM_TARGET, 2, 0x11, 0xfff4, 0x0 + call HyperspaceHoleMovement + waitforvisualfinish + visible ANIM_ATTACKER + delay 1 + invisible ANIM_ATTACKER + delay 1 + visible ANIM_ATTACKER + delay 1 + invisible ANIM_ATTACKER + delay 1 + visible ANIM_ATTACKER + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x10, 0x0, 0x7FFF + waitforvisualfinish + end +@Credits to Skeli Move_BURNING_JEALOUSY:: - goto Move_OVERHEAT + loadspritegfx ANIM_TAG_SMALL_EMBER + playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER + createvisualtask AnimTask_ShakeMon, 0x5, ANIM_ATTACKER, 0x0, 0x2, 0x2A, 0x1 + createvisualtask AnimTask_BlendColorCycle, 0x2, F_PAL_ATTACKER, 0x2, 0x2, 0x0, 0x8, 0x1F + call BurningJealousyFireBuffEffect + delay 0x8 + call BurningJealousyFireBuffEffect + createvisualtask AnimTask_BlendColorCycle, 0x2, F_PAL_ATTACKER, 0x2, 0x2, 0x0, 0x8, 0x1F + delay 0x4 + call BurningJealousyFireBuffEffect + waitforvisualfinish + monbg ANIM_TARGET + playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_ATTACKER + createvisualtask AnimTask_FlailMovement, 0x2, ANIM_ATTACKER + call BurningJealousyFlames + delay 0x8 + call BurningJealousyFlames + delay 0x8 + call BurningJealousyFlames + playsewithpan SE_M_FIRE_PUNCH, SOUND_PAN_TARGET + createvisualtask AnimTask_ShakeMon2, 0x2, ANIM_TARGET, 0x2, 0x0, 0xC, 0x1 + createvisualtask AnimTask_ShakeMon2, 0x2, ANIM_DEF_PARTNER, 0x2, 0x0, 0xC, 0x1 + createvisualtask AnimTask_BlendMonInAndOut, 0x3, ANIM_TARGET, 0x1f, 0xc, 0x1, 0x1 + createvisualtask AnimTask_BlendMonInAndOut, 0x3, ANIM_DEF_PARTNER, 0x1f, 0xc, 0x1, 0x1 + call FireSpreadEffect @ INCINERATE_BURN_CHANCE + waitforvisualfinish + clearmonbg ANIM_TARGET + end +BurningJealousyFireBuffEffect: + createsprite gSpriteTemplate_BurningJealousyFireBuff, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0xffe8, 0x1a, 0x2, 0x18 + delay 0x3 + createsprite gSpriteTemplate_BurningJealousyFireBuff, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0xe, 0x1c, 0x1, 0x18 + delay 0x3 + createsprite gSpriteTemplate_BurningJealousyFireBuff, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0xfffb, 0xa, 0x2, 0x18 + delay 0x3 + createsprite gSpriteTemplate_BurningJealousyFireBuff, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x1c, 0x1a, 0x3, 0x18 + delay 0x3 + return + +BurningJealousyFlames: + createsprite gSpriteTemplate_BurningJealousyEmit, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1e, 0xfb00, 0x0, 0x3 + createsprite gSpriteTemplate_BurningJealousyEmit, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1e, 0x0, 0x0500, 0x3 + createsprite gSpriteTemplate_BurningJealousyEmit, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1e, 0x0, 0xfb00, 0x3 + createsprite gSpriteTemplate_BurningJealousyEmit, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1e, 0x0500, 0x0300, 0x3 + createsprite gSpriteTemplate_BurningJealousyEmit, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1e, 0xfb00, 0x0300, 0x3 + createsprite gSpriteTemplate_BurningJealousyEmit, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1e, 0x0500, 0xfd00, 0x3 + createsprite gSpriteTemplate_BurningJealousyEmit, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1e, 0xfb00, 0xfd00, 0x3 + return + + +@Credits to Skeli Move_LASH_OUT:: - end @to do: + loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy + loadspritegfx ANIM_TAG_HANDS_AND_FEET @black color + loadspritegfx ANIM_TAG_SLAM_HIT_2 + loadspritegfx ANIM_TAG_IMPACT @hit + createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_SLAM_HIT_2, 0x0, 0xA, 0xA, 0x1F + monbg ANIM_DEF_PARTNER + playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER + call PowerTripBuffUp + delay 0x8 + createvisualtask AnimTask_BlendColorCycle, 0x2, F_PAL_ATTACKER, 0x2, 0x2, 0x0, 0xb, 0x1F + createvisualtask AnimTask_ShakeMon2, 0x2, 0x0, 0x1, 0x0, 0x20, 0x1 + call PowerTripBuffUp + delay 0x8 + call PowerTripBuffUp + waitforvisualfinish + fadetobg BG_DARK + waitbgfadein + playsewithpan SE_M_VITAL_THROW, SOUND_PAN_TARGET + createsprite gSpriteTemplate_LashOutStrike, ANIM_TARGET, 2, 0xfff0, 0xfff0, FALSE + delay 0x8 + createsprite gFoulPlayImpactTemplate, ANIM_TARGET, 3, 10, 0x0, ANIM_TARGET, 0x1 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0xfff4, 0xa, 0x0, 0x3 + delay 0x8 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x5 + delay 0x8 + playsewithpan SE_M_VITAL_THROW, SOUND_PAN_TARGET + createsprite gSpriteTemplate_LashOutStrike, ANIM_TARGET, 2, 0xfff0, 0xfff0, TRUE + delay 0x8 + createsprite gFoulPlayImpactTemplate, ANIM_TARGET, 3, -10, 0x0, ANIM_TARGET, 0x1 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0xC, 0xa, 0x0, 0x3 + delay 0x8 + waitforvisualfinish + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x5 + restorebg + clearmonbg ANIM_DEF_PARTNER + end + Move_POLTERGEIST:: loadspritegfx ANIM_TAG_EYE_SPARKLE @@ -14358,17 +14855,234 @@ Move_POLTERGEIST:: blendoff end +@Credits to Skeli Move_CORROSIVE_GAS:: + loadspritegfx ANIM_TAG_PINK_CLOUD @Fumes + createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_PINK_CLOUD, 0x0, 0xE, 0xE, 0x19EF @;Garbage green + monbg ANIM_ATTACKER + loopsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_ATTACKER, 0x8, 0x3 + delay 0x0 + createvisualtask AnimTask_BlendColorCycle, 0x2, F_PAL_ATTACKER, 0x1, 0x2, 0x0, 0xF, 0x19EF @;Garbage green + createsprite gSpriteTemplate_CorrosiveGasSmoke, ANIM_ATTACKER, 0x7a, 0x3, 0xfff2, 0x12, 0x2e + delay 0x0 + createsprite gSpriteTemplate_CorrosiveGasSmoke, ANIM_ATTACKER, 0x79, 0x3, 0xe, 0xfff2, 0x2e + delay 0x0 + createsprite gSpriteTemplate_CorrosiveGasSmoke, ANIM_ATTACKER, 0x78, 0x3, 0xfff4, 0xfff6, 0x2e + delay 0x0 + createsprite gSpriteTemplate_CorrosiveGasSmoke, ANIM_ATTACKER, 0x77, 0x3, 0xe, 0xe, 0x2e + delay 0x0 + createsprite gSpriteTemplate_CorrosiveGasSmoke, ANIM_ATTACKER, 0x76, 0x3, 0x0, 0x0, 0x2e + delay 0x0 + createsprite gSpriteTemplate_CorrosiveGasSmoke, ANIM_ATTACKER, 0x7b, 0x3, 0x4, 0x4, 0x1e + waitforvisualfinish + playsewithpan SE_M_TOXIC, SOUND_PAN_TARGET + createvisualtask AnimTask_BlendColorCycle, 0x2, (F_PAL_BG | F_PAL_TARGET | F_PAL_ATK_PARTNER | F_PAL_DEF_PARTNER), 0x1, 0x2, 0x0, 0xE, 0x19EF @;Garbage green + waitforvisualfinish + clearmonbg ANIM_ATTACKER + end + + +@Credits to Skeli Move_COACHING:: + playsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER + createvisualtask AnimTask_Splash, 0x2, ANIM_ATTACKER, 0x1 + waitforvisualfinish + playsewithpan SE_M_TAIL_WHIP, SOUND_PAN_TARGET + createvisualtask AnimTask_BlendColorCycle, 0x2, F_PAL_TARGET, 0x1, 0x2, 0x0, 0xA, 0x1E5D + createvisualtask AnimTask_Splash, 0x2, ANIM_TARGET, 0x1 + waitforvisualfinish + end + +@Credits to Skeli Move_FLIP_TURN:: + loadspritegfx ANIM_TAG_ICE_CRYSTALS @;Bubbles + loadspritegfx ANIM_TAG_HYDRO_PUMP + loadspritegfx ANIM_TAG_WATER_IMPACT + monbg ANIM_TARGET + setalpha 12, 8 + call WaterfallBubblesOnAttacker + waitforvisualfinish + invisible ANIM_ATTACKER + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER + createsprite gSpriteTemplate_FlipTurnThere, ANIM_TARGET, 2, 0x0, 0x0, 0x15 + waitforvisualfinish + playsewithpan SE_M_TAIL_WHIP, SOUND_PAN_TARGET + createsprite gWaterHitSplatSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x1, 0x2 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x3, 0x0, 0x6, 0x1 + createsprite gSpriteTemplate_FlipTurnBack, ANIM_ATTACKER, 3, 0x0, 0xFFF1, 0xFFF0, 0x24 + waitforvisualfinish + visible ANIM_ATTACKER + clearmonbg ANIM_TARGET + blendoff + end + + +@Credits to Skeli Move_TRIPLE_AXEL:: + loadspritegfx ANIM_TAG_HANDS_AND_FEET + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_ICE_CRYSTALS + monbg ANIM_DEF_PARTNER + setalpha 12, 8 + playsewithpan SE_M_VITAL_THROW2, 0x3f + jumpifmoveturn 0, TripleAxelTurn0 + jumpifmoveturn 1, TripleAxelTurn1 + goto TripleAxelTurn2 +TripleAxelTurn0: + createsprite gFistFootSpriteTemplate, ANIM_TARGET, 4, 0xfff0, 0xfff8, 0x14, 0x1, 0x2 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0xfff0, 0xfff0, 0x1, 0x2 + createsprite gTripleAxelIceCrystalSpriteTemplate, ANIM_TARGET, 1, 0xfff0, 0xfff8, 0xff00, 0xffd8 + createsprite gTripleAxelIceCrystalSpriteTemplate, ANIM_TARGET, 1, 0xfff0, 0xfff8, 0x1a0, 0xffda + createvisualtask AnimTask_ShakeMon, 0x5, ANIM_TARGET, 0x4, 0x0, 0x4, 0x1 + goto TripleAxelEnd +TripleAxelTurn1: + createsprite gFistFootSpriteTemplate, ANIM_TARGET, 4, 0x8, 0x8, 0x14, 0x1, 0x2 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x8, 0x0, 0x1, 0x2 + createsprite gTripleAxelIceCrystalSpriteTemplate, ANIM_TARGET, 1, 0x8, 0x8, 0xa0, 0xffe0 + createsprite gTripleAxelIceCrystalSpriteTemplate, ANIM_TARGET, 1, 0x8, 0x8, 0xff00, 0xffd8 + createsprite gTripleAxelIceCrystalSpriteTemplate, ANIM_TARGET, 1, 0x8, 0x8, 0x1a0, 0xffda + createsprite gTripleAxelIceCrystalSpriteTemplate, ANIM_TARGET, 1, 0x8, 0x8, 0xfe80, 0xffe1 + createvisualtask AnimTask_ShakeMon, 0x5, ANIM_TARGET, 0x4, 0x0, 0x6, 0x1 + goto TripleAxelEnd +TripleAxelTurn2: + createsprite gFistFootSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x14, 0x1, 0x2 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x0, 0xfff8, 0x1, 0x1 + createsprite gTripleAxelIceCrystalSpriteTemplate, ANIM_TARGET, 1, 0x0, 0x0, 0xa0, 0xffe0 + createsprite gTripleAxelIceCrystalSpriteTemplate, ANIM_TARGET, 1, 0x0, 0x0, 0xff00, 0xffd8 + createsprite gTripleAxelIceCrystalSpriteTemplate, ANIM_TARGET, 1, 0x0, 0x0, 0x80, 0xfff0 + createsprite gTripleAxelIceCrystalSpriteTemplate, ANIM_TARGET, 1, 0x0, 0x0, 0x1a0, 0xffda + createsprite gTripleAxelIceCrystalSpriteTemplate, ANIM_TARGET, 1, 0x0, 0x0, 0xff80, 0xffea + createsprite gTripleAxelIceCrystalSpriteTemplate, ANIM_TARGET, 1, 0x0, 0x0, 0xfe80, 0xffe1 + createvisualtask AnimTask_ShakeMon, 0x5, ANIM_TARGET, 0x6, 0x0, 0x8, 0x1 +TripleAxelEnd: + delay 4 + playsewithpan SE_M_ICY_WIND, 0x3f + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + blendoff + end + +@Credits to Skeli Move_DUAL_WINGBEAT:: + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_WHITE_FEATHER + setalpha 12, 8 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x3, 0x0, 10, 0x1 + playsewithpan SE_M_WING_ATTACK, SOUND_PAN_TARGET + jumpifmoveturn 1, DualWingbeatRightSide +DualWingbeatLeftSide: + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, -20, 10, ANIM_TARGET, 0x2 + delay 1 + playsewithpan SE_M_WING_ATTACK, SOUND_PAN_TARGET + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -20, 0, ANIM_TARGET, 0x2 + call DualWingbeatFeatherScatterLeft + delay 1 + playsewithpan SE_M_WING_ATTACK, SOUND_PAN_TARGET + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, -20, -10, ANIM_TARGET, 0x2 + delay 1 + playsewithpan SE_M_WING_ATTACK, SOUND_PAN_TARGET + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 5, -20, -20, ANIM_TARGET, 0x2 + delay 1 + playsewithpan SE_M_WING_ATTACK, SOUND_PAN_TARGET + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 6, -20, -30, ANIM_TARGET, 0x2 + waitforvisualfinish + blendoff + end +DualWingbeatRightSide: + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 10, 10, ANIM_TARGET, 0x2 + delay 1 + playsewithpan SE_M_WING_ATTACK, SOUND_PAN_TARGET + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 10, 0, ANIM_TARGET, 0x2 + call DualWingbeatFeatherScatterRight + delay 1 + playsewithpan SE_M_WING_ATTACK, SOUND_PAN_TARGET + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, 10, -10, ANIM_TARGET, 0x2 + delay 1 + playsewithpan SE_M_WING_ATTACK, SOUND_PAN_TARGET + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 5, 10, -20, ANIM_TARGET, 0x2 + delay 1 + playsewithpan SE_M_WING_ATTACK, SOUND_PAN_TARGET + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 6, 10, -30, ANIM_TARGET, 0x2 + waitforvisualfinish + blendoff + end +DualWingbeatFeatherScatterLeft: + createsprite gDualWingbeatFeatherSpriteTemplate, ANIM_TARGET, 1, 0xfff0, 0xfff8, 0xa0, 0xffe0 + createsprite gDualWingbeatFeatherSpriteTemplate, ANIM_TARGET, 1, 0xfff0, 0xfff8, 0xff00, 0xffd8 + createsprite gDualWingbeatFeatherSpriteTemplate, ANIM_TARGET, 1, 0xfff0, 0xfff8, 0x1a0, 0xffda + createsprite gDualWingbeatFeatherSpriteTemplate, ANIM_TARGET, 1, 0xfff0, 0xfff8, 0xfe80, 0xffe1 + return +DualWingbeatFeatherScatterRight: + createsprite gDualWingbeatFeatherSpriteTemplate, ANIM_TARGET, 1, 0, 0xfff8, 0xa0, 0xffe0 + createsprite gDualWingbeatFeatherSpriteTemplate, ANIM_TARGET, 1, 0, 0xfff8, 0xff00, 0xffd8 + createsprite gDualWingbeatFeatherSpriteTemplate, ANIM_TARGET, 1, 0, 0xfff8, 0x1a0, 0xffda + createsprite gDualWingbeatFeatherSpriteTemplate, ANIM_TARGET, 1, 0, 0xfff8, 0xfe80, 0xffe1 + return + +@ credits to Skeli Move_SCORCHING_SANDS:: - end @to do + loadspritegfx ANIM_TAG_MUD_SAND + loadspritegfx ANIM_TAG_SMALL_EMBER + monbg ANIM_ATK_PARTNER + splitbgprio ANIM_ATTACKER + setalpha 12, 8 + playsewithpan SE_M_SAND_ATTACK, SOUND_PAN_ATTACKER + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff6, 0x0, 0x0, 0x3 + waitforvisualfinish + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x2 + call SandAttackDirt + call SandAttackDirt + call SandAttackDirt + call SandAttackDirt + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x2, 0x0, 25, 0x1 + call SandAttackDirt + call SandAttackDirt + playsewithpan SE_M_FIRE_PUNCH, SOUND_PAN_TARGET + call FireSpreadEffect + waitforvisualfinish + clearmonbg ANIM_ATK_PARTNER + blendoff + end +@ credits to skeli Move_JUNGLE_HEALING:: - goto Move_AROMATHERAPY + loadspritegfx ANIM_TAG_ROOTS + loadspritegfx ANIM_TAG_ORBS + loadspritegfx ANIM_TAG_SPARKLE_2 + fadetobg BG_SNUGGLE_FOREVER + waitbgfadeout + createsprite gIngrainRootSpriteTemplate, ANIM_ATTACKER, 2, 0x10, 0x1a, 0xffff, 0x2, 0x96 + playsewithpan SE_M_SCRATCH, SOUND_PAN_ATTACKER + delay 0xa + createsprite gIngrainRootSpriteTemplate, ANIM_ATTACKER, 2, 0xffe0, 0x14, 0x1, 0x1, 0x8c + playsewithpan SE_M_SCRATCH, SOUND_PAN_ATTACKER + delay 0xa + createsprite gIngrainRootSpriteTemplate, ANIM_ATTACKER, 2, 0x20, 0x16, 0x1, 0x0, 0x82 + playsewithpan SE_M_SCRATCH, SOUND_PAN_ATTACKER + delay 0xa + createsprite gIngrainRootSpriteTemplate, ANIM_ATTACKER, 2, 0xfff0, 0x19, 0xffff, 0x3, 0x78 + playsewithpan SE_M_SCRATCH, SOUND_PAN_ATTACKER + delay 0x28 + createsprite gIngrainOrbSpriteTemplate, ANIM_ATTACKER, 3, 0x20, 0x1a, 0xffff, 0x3, 0x1e + delay 0x5 + playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER + delay 0x5 + createsprite gIngrainOrbSpriteTemplate, ANIM_ATTACKER, 3, 0xffd0, 0x14, 0x1, 0x2, 0x1e + playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER + delay 0x5 + playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER + delay 0x5 + createsprite gIngrainOrbSpriteTemplate, ANIM_ATTACKER, 3, 0x30, 0x1a, 0xfffe, 0x3, 0x12 + playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER + delay 0xa + playsewithpan SE_M_STAT_INCREASE, 0xc0 + createvisualtask AnimTask_StatusClearedEffect, 0x2, 0x1 + waitforvisualfinish + restorebg + waitbgfadein + end +@ credits to ghoulslash Move_SILK_TRAP:: loadspritegfx ANIM_TAG_PROTECT loadspritegfx ANIM_TAG_SPIDER_WEB @@ -14396,40 +15110,1276 @@ Move_SNOWSCAPE:: createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 3, 6, 0, RGB_BLACK end +@Credits to Skeli Move_WICKED_BLOW:: + loadspritegfx ANIM_TAG_FOCUS_ENERGY + loadspritegfx ANIM_TAG_HANDS_AND_FEET + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_PAIN_SPLIT + loadspritegfx ANIM_TAG_SPARKLE_4 + createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_PAIN_SPLIT, 0x0, 0x9, 0x9, 0x1F + createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_FOCUS_ENERGY, 0x0, 0x8, 0x8, 0x1F + playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER + call WickedBlowBuffEffect + delay 0x8 + createvisualtask AnimTask_BlendColorCycle, 0x2, F_PAL_ATTACKER, 0x2, 0x2, 0x0, 0xb, 0x0 + createvisualtask AnimTask_ShakeMon2, 0x2, 0x0, 0x1, 0x0, 0x20, 0x1 + call WickedBlowBuffEffect + delay 0x8 + call WickedBlowBuffEffect + waitforvisualfinish + fadetobg BG_DARK + waitbgfadeout + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x1c, 0x0, 0x0, 0x5 + delay 0x5 + createsprite gSpriteTemplate_WickedBlowFist, ANIM_TARGET, 4, ANIM_TARGET, 0, 0, 16, 32 + delay 6 + loopsewithpan SE_M_STRENGTH, SOUND_PAN_TARGET, 0x4, 0x6 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, 0x1, 0x1 + createsprite gSpriteTemplate_WickedBlowBlackStars, ANIM_TARGET, 2, 0xfff0, 0xfff8, 0xfe80, 0xffe1 + createsprite gSpriteTemplate_WickedBlowRedStars, ANIM_TARGET, 2, 0xfff0, 0xfff8, 0xff00, 0xffd8 + createsprite gSpriteTemplate_WickedBlowBlackStars, ANIM_TARGET, 2, 0xfff0, 0xfff8, 0xff80, 0xffea + createsprite gSpriteTemplate_WickedBlowRedStars, ANIM_TARGET, 2, 0xfff0, 0xfff8, 0x80, 0xfff0 + createsprite gSpriteTemplate_WickedBlowBlackStars, ANIM_TARGET, 2, 0xfff0, 0xfff8, 0xa0, 0xffe0 + createsprite gSpriteTemplate_WickedBlowRedStars, ANIM_TARGET, 2, 0xfff0, 0xfff8, 0x1a0, 0xffda + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x0, 0x4, 0xA, 0x1 + delay 20 + createvisualtask AnimTask_TwinkleTackleLaunch, 0x2, 50 + delay 50 + playsewithpan SE_M_DETECT, SOUND_PAN_TARGET + createsprite gTwinkleTackleTwinkleSpriteTemplate, ANIM_TARGET, 13, 0x0, 0x0, ANIM_TARGET @detect star + waitforvisualfinish + blendoff + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x6 + restorebg + waitbgfadeout + visible ANIM_TARGET + waitforvisualfinish + waitbgfadein + end + +WickedBlowBuffEffect: + createsprite gPowerTripFocusEnergyTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x1a, 0x2 + delay 0x4 + createsprite gPowerTripFocusEnergyTemplate, ANIM_ATTACKER, 2, 0x0, 0xe, 0x1c, 0x1 + delay 0x4 + createsprite gPowerTripFocusEnergyTemplate, ANIM_ATTACKER, 2, 0x0, 0xfffb, 0xa, 0x2 + delay 0x4 + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1c, 0x1a, 0x3 + delay 0x4 + createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff4, 0x0, 0x1 + return + + + +@Credits to Skeli Move_SURGING_STRIKES:: + loadspritegfx ANIM_TAG_IMPACT_2 + loadspritegfx ANIM_TAG_WATER_IMPACT + jumpifmoveturn 1 SURGING_STRIKES_1 + jumpifmoveturn 2 SURGING_STRIKES_2 + +SURGING_STRIKES_0: + playsewithpan SE_M_GIGA_DRAIN, SOUND_PAN_TARGET + createsprite gSpriteTemplate_SurgingStrikesImpact, ANIM_TARGET, 2, -40, -20, 0, 0, 10, -20 @Top left + delay 5 + playsewithpan SE_M_GIGA_DRAIN, SOUND_PAN_TARGET + createsprite gSpriteTemplate_SurgingStrikesImpact, ANIM_TARGET, 2, 40, 20, 0, 0, 10, 20 @Bottom right + createsprite gWaterHitSplatSpriteTemplate, ANIM_TARGET, 1, -5, -5, ANIM_TARGET, 0x1 + createvisualtask AnimTask_ShakeMon2, 0x2, 0x1, 0x4, 0x0, 0x8, 0x1 + delay 5 + createsprite gWaterHitSplatSpriteTemplate, ANIM_TARGET, 1, 5, 5, ANIM_TARGET, 0x1 + waitforvisualfinish + end + +SURGING_STRIKES_1: + playsewithpan SE_M_GIGA_DRAIN, SOUND_PAN_TARGET + createsprite gSpriteTemplate_SurgingStrikesImpact, ANIM_TARGET, 2, 40, -20, 0, 0, 10, -20 @Top Right + delay 5 + playsewithpan SE_M_GIGA_DRAIN, SOUND_PAN_TARGET + createsprite gSpriteTemplate_SurgingStrikesImpact, ANIM_TARGET, 2, -40, 20, 0, 0, 10, 20 @Bottom left + createsprite gWaterHitSplatSpriteTemplate, ANIM_TARGET, 1, 5, -5, ANIM_TARGET, 0x1 + createvisualtask AnimTask_ShakeMon2, 0x2, 0x1, 0x4, 0x0, 0x8, 0x1 + delay 5 + createsprite gWaterHitSplatSpriteTemplate, ANIM_TARGET, 1, -5, 5, ANIM_TARGET, 0x1 + waitforvisualfinish + end + +SURGING_STRIKES_2: + playsewithpan SE_M_GIGA_DRAIN, SOUND_PAN_TARGET + createsprite gSpriteTemplate_SurgingStrikesImpact, ANIM_TARGET, 2, -40, -20, 0, 0, 10, -20 @Top left + delay 5 + playsewithpan SE_M_GIGA_DRAIN, SOUND_PAN_TARGET + createsprite gSpriteTemplate_SurgingStrikesImpact, ANIM_TARGET, 2, 40, -20, 0, 0, 10, -20 @Top Right + createsprite gWaterHitSplatSpriteTemplate, ANIM_TARGET, 1, -5, -5, ANIM_TARGET, 0x1 + createvisualtask AnimTask_ShakeMon2, 0x2, 0x1, 0x0, 0x4, 0x8, 0x1 + delay 5 + createsprite gWaterHitSplatSpriteTemplate, ANIM_TARGET, 1, 5, -5, ANIM_TARGET, 0x1 + waitforvisualfinish + end + + +@Credits to Skeli Move_THUNDER_CAGE:: + loadspritegfx ANIM_TAG_SHOCK_3 @Thunderbolt Ball + loadspritegfx ANIM_TAG_SPARK @Electric lines + loadspritegfx ANIM_TAG_SPARK_H @Thunder Wave + loadspritegfx ANIM_TAG_SPARK_2 + monbg ANIM_TARGET + splitbgprio ANIM_TARGET + loopsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_TARGET, 0xA, 0x9 + createsprite gThunderboltOrbSpriteTemplate, ANIM_TARGET, 3, 100, -25, -30, 0x0 + createsprite gThunderboltOrbSpriteTemplate, ANIM_TARGET, 3, 100, 0, -30, 0x0 + createsprite gThunderboltOrbSpriteTemplate, ANIM_TARGET, 3, 100, 25, -30, 0x0 + createsprite gThunderWaveSpriteTemplate, ANIM_TARGET, 2, -16, -16 + delay 4 + createsprite gThunderWaveSpriteTemplate, ANIM_TARGET, 2, -16, 0 + delay 4 + createsprite gThunderWaveSpriteTemplate, ANIM_TARGET, 2, -16, 16 + createvisualtask AnimTask_ShakeMon, 0x5, ANIM_TARGET, 0x3, 0x0, 0x32, 0x1 + call ThunderCageBolts + delay 0x4 + createsprite gThunderWaveSpriteTemplate, ANIM_TARGET, 2, -16, -16 + delay 4 + createsprite gThunderWaveSpriteTemplate, ANIM_TARGET, 2, -16, 0 + delay 4 + createsprite gThunderWaveSpriteTemplate, ANIM_TARGET, 2, -16, 16 + call ThunderCageBolts + waitforvisualfinish + clearmonbg ANIM_TARGET + end +ThunderCageBolts: + createvisualtask AnimTask_ElectricBolt, 2, 25, -40, 1 + delay 0x9 + createvisualtask AnimTask_ElectricBolt, 2, -25, -40, 1 + delay 0x9 + createvisualtask AnimTask_ElectricBolt, 2, 0, -40, 1 + delay 0x9 + return + + +@Credits to Skeli Move_DRAGON_ENERGY:: + loadspritegfx ANIM_TAG_HYDRO_PUMP + createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_HYDRO_PUMP, 0x0, 0xC, 0xC, 0x2C5E @;Regidrago Reddish Reddish, Purple + monbg ANIM_TARGET + playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER + createvisualtask AnimTask_BlendColorCycle, 0x2, F_PAL_ATTACKER, 0x0, 0x4, 0x0, 0xB, 0x7F9F @;Pinkish White + waitforvisualfinish + playsewithpan SE_M_DETECT, SOUND_PAN_TARGET + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS), 0x1, 0x10, 0x0, 0x2C5E @;Regidrago Reddish Reddish, Purple + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, -120, 0, 0, 1 @;Slide off off, screen + waitforvisualfinish + playsewithpan SE_M_SOLAR_BEAM, SOUND_PAN_TARGET + call DragonEnergyShot + call DragonEnergyShot + createvisualtask AnimTask_ShakeMon, 0x5, ANIM_TARGET, 0x4, 0x0, 0x5E, 0x1 + createvisualtask AnimTask_ShakeMon, 0x5, ANIM_DEF_PARTNER, 0x4, 0x0, 0x5E, 0x1 + call DragonEnergyShot + call DragonEnergyShot + call DragonEnergyShot + call DragonEnergyShot + call DragonEnergyShot + call DragonEnergyShot + call DragonEnergyShot + call DragonEnergyShot + call DragonEnergyShot + call DragonEnergyShot + call DragonEnergyShot + call DragonEnergyShot + call DragonEnergyShot + call DragonEnergyShot + call DragonEnergyShot + call DragonEnergyShot + call DragonEnergyShot + call DragonEnergyShot + call DragonEnergyShot + call DragonEnergyShot + call DragonEnergyShot + call DragonEnergyShot + call DragonEnergyShot + call DragonEnergyShot + call DragonEnergyShot + call DragonEnergyShot + call DragonEnergyShot + call DragonEnergyShot + waitforvisualfinish + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 10 + clearmonbg ANIM_TARGET + waitforvisualfinish + end + +DragonEnergyShot: + createsprite gSpriteTemplate_DragonEnergyShot, ANIM_TARGET, 2, 0x19 + delay 0x1 + createsprite gSpriteTemplate_DragonEnergyShot, ANIM_TARGET, 2, 0x19 + delay 0x1 + return + + +@Credits to Skeli Move_FREEZING_GLARE:: + loadspritegfx ANIM_TAG_SMALL_RED_EYE + loadspritegfx ANIM_TAG_EYE_SPARKLE + loadspritegfx ANIM_TAG_ICE_CRYSTALS @ice + call SetPsychicBackground + createsprite gEyeSparkleSpriteTemplate, ANIM_ATTACKER, 0, 0xfff0, 0xfff8 + createsprite gEyeSparkleSpriteTemplate, ANIM_ATTACKER, 0, 0x10, 0xfff8 + createvisualtask AnimTask_GlareEyeDots, 0x5, 0x0 + playsewithpan SE_M_PSYBEAM2, SOUND_PAN_ATTACKER + waitforvisualfinish + createvisualtask AnimTask_BlendColorCycle, 0x2, F_PAL_TARGET, 0x2, 0x2, 0x0, 0xC, 0x7f4c @;Ice blue + createvisualtask AnimTask_ShakeMon, 0x5, ANIM_TARGET, 0x0, 0x4, 0x1C, 0x1 + call IceCrystalEffectShort + waitforvisualfinish + call UnsetPsychicBg + end + + +@Credits to Skeli Move_FIERY_WRATH:: + loadspritegfx ANIM_TAG_SMALL_EMBER + loadspritegfx ANIM_TAG_PURPLE_RING + playsewithpan SE_M_SACRED_FIRE2, 0xc0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x2, 0x0, 0xE, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x4, 0x0, 0x8, 0x1F + createvisualtask AnimTask_ShakeMon, 0x5, ANIM_ATTACKER, 0x0, 0x2, 0x20, 0x1 + call DragonClawFireSpiral + call DragonClawFireSpiral + waitforvisualfinish + loopsewithpan SE_M_PSYBEAM, SOUND_PAN_TARGET, 20, 3 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_DEF_SIDE, 0x4, 0x0, 0xF, 0x3006 + createvisualtask AnimTask_ShakeMon2, 0x2, ANIM_TARGET, 0x4, 0x0, 0x3C, 0x1 + createvisualtask AnimTask_ShakeMon2, 0x2, ANIM_DEF_PARTNER, 0x4, 0x0, 0x3C, 0x1 + call FieryWrathGeyser + call FieryWrathGeyser + call FieryWrathGeyser + call FieryWrathGeyser + waitforvisualfinish + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x2, 0x8, 0x0, 0x1F + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_DEF_SIDE, 0x2, 0x9, 0x0, 0x3006 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xE, 0x0, 0x0 + waitforvisualfinish + end + +FieryWrathGeyser: + createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_TARGET, 0xfffc, 0x10 + createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_DEF_PARTNER, 0xfffc, 0x10 + delay 0x0 + createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_TARGET, 0x100D, 0x10 + createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_DEF_PARTNER, 0x100D, 0x10 + delay 0x0 + createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_TARGET, 0x4, 0x10 + createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_DEF_PARTNER, 0x4, 0x10 + delay 0x0 + createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_TARGET, 0xfff0, 0x10 + createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_DEF_PARTNER, 0xfff0, 0x10 + delay 0x0 + createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_TARGET, 0xfffc, 0x10 + createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_DEF_PARTNER, 0xfffc, 0x10 + createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_TARGET, 0x100D, 0x10 + createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_DEF_PARTNER, 0x100D, 0x10 + delay 0x0 + createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_TARGET, 0x4, 0x10 + createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_DEF_PARTNER, 0x4, 0x10 + delay 0x0 + createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_TARGET, 0xfff0, 0x10 + createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_DEF_PARTNER, 0xfff0, 0x10 + delay 0x0 + createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_TARGET, 0xfffc, 0x10 + createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_DEF_PARTNER, 0xfffc, 0x10 + delay 0x0 + createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_TARGET, 0x100D, 0x10 + createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_DEF_PARTNER, 0x100D, 0x10 + delay 0x0 + createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_TARGET, 0x4, 0x10 + createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_DEF_PARTNER, 0x4, 0x10 + delay 0x0 + createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_TARGET, 0xfff0, 0x10 + createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_DEF_PARTNER, 0xfff0, 0x10 + delay 0x0 + createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_TARGET, 0xfffc, 0x10 + createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_DEF_PARTNER, 0xfffc, 0x10 + delay 0x0 + createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_TARGET, 0x100D, 0x10 + createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_DEF_PARTNER, 0x100D, 0x10 + delay 0x0 + createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_TARGET, 0x4, 0x10 + createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_DEF_PARTNER, 0x4, 0x10 + delay 0x0 + createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_TARGET, 0xfff0, 0x10 + createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_DEF_PARTNER, 0xfff0, 0x10 + return + + + +@Credits to Skeli Move_THUNDEROUS_KICK:: + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_HANDS_AND_FEET + loadspritegfx ANIM_TAG_SPARK_2 + monbg ANIM_TARGET + fadetobg BG_MAX_LIGHTNING + waitbgfadeout + createvisualtask AnimTask_StartSlidingBg, 0x5, 0xff00, 0x0, 0x1, 0xffff + setalpha 12, 8 + playsewithpan SE_M_MEGA_KICK, SOUND_PAN_TARGET + createsprite gMegaPunchKickSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x1, 0x32 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, 0x4, 0x2, 0x0, 0x7, 0x7fff + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_ATTACKER, 0x2, 0x0, 0x16, 0x1 + call ZingZapSparks1 + delay 0xA + call ZingZapSparks2 + delay 0xA + call ZingZapSparks1 + delay 0xA + call ZingZapSparks2 + delay 0x3 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x30, 0x3, 0x0, 0x4 + delay 0x7 + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1, 0x0 + createvisualtask AnimTask_ShakeMon2, 0x2, ANIM_TARGET, 0x4, 0x0, 0x16, 0x1 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x0, 0x10, 0x0, 0x7fff + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 0x1f, 0x3, 0x1, 0x0, 0x8, 0x0, 0x0 + waitforvisualfinish + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x5 + clearmonbg ANIM_TARGET + blendoff + call UnsetPsychicBg + end + + +@Credits to Skeli Move_GLACIAL_LANCE:: + loadspritegfx ANIM_TAG_ICICLE_SPEAR + loadspritegfx ANIM_TAG_ICE_CUBE + loadspritegfx ANIM_TAG_ICE_CRYSTALS @ice + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xA, 0x3C00 @;Royal Blue + monbg ANIM_TARGET + playsewithpan SE_M_HAIL, SOUND_PAN_TARGET + createvisualtask AnimTask_CentredFrozenIceCube, ANIM_TARGET, 0x0 + createsprite gSpriteTemplate_GlacialLance, ANIM_TARGET, 2, 0, 40, 0, 0, 40, 50, 10 + delay 60 + createvisualtask AnimTask_FlashAnimTagWithColor, 0x2, ANIM_TAG_ICICLE_SPEAR, 0x4, 0x1, 0x7FFF, 0x10, 0x0, 0x0 + playsewithpan SE_M_DETECT, SOUND_PAN_TARGET + delay 38 + playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET + createvisualtask AnimTask_ShakeMon, 0x5, ANIM_TARGET, 0x6, 0x0, 0x34, 0x1 + createvisualtask AnimTask_ShakeMon, 0x5, ANIM_DEF_PARTNER, 0x6, 0x0, 0x34, 0x1 + delay 4 + call IceCrystalEffectLong + waitforvisualfinish + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x0, 0xA, 0x0, 0x3C00 @;Royal Blue + waitforvisualfinish + clearmonbg ANIM_TARGET + end + + Move_ASTRAL_BARRAGE:: + goto Move_SHADOW_BALL + + +@Credits to Skeli Move_EERIE_SPELL:: + loadspritegfx ANIM_TAG_PURPLE_FLAME + call SetPsychicBackground + waitforvisualfinish + monbg ANIM_TARGET + splitbgprio_all + loopsewithpan SE_M_PSYBEAM, SOUND_PAN_TARGET, 0x14, 0x5 + createvisualtask AnimTask_SpiteTargetShadow 0x0 + call EerieSpellConvergingFlames + call EerieSpellConvergingFlames + call EerieSpellConvergingFlames + waitforvisualfinish + clearmonbg ANIM_TARGET + call UnsetPsychicBg + waitforvisualfinish + end + +EerieSpellConvergingFlames: + createsprite gSpriteTemplate_EerieSpellFlame, ANIM_TARGET, 2, 0x1, 0x0, 0x0, 0xffe0, 0x10 + delay 0x2 + createsprite gSpriteTemplate_EerieSpellFlame, ANIM_TARGET, 2, 0x1, 0x0, 0x16, 0xffea, 0x10 + delay 0x2 + createsprite gSpriteTemplate_EerieSpellFlame, ANIM_TARGET, 2, 0x1, 0x0, 0x1e, 0x0, 0x10 + delay 0x2 + createsprite gSpriteTemplate_EerieSpellFlame, ANIM_TARGET, 2, 0x1, 0x0, 0x14, 0x14, 0x10 + delay 0x2 + createsprite gSpriteTemplate_EerieSpellFlame, ANIM_TARGET, 2, 0x1, 0x0, 0x0, 0x1c, 0x10 + delay 0x2 + createsprite gSpriteTemplate_EerieSpellFlame, ANIM_TARGET, 2, 0x1, 0x0, 0xffed, 0x13, 0x10 + delay 0x2 + createsprite gSpriteTemplate_EerieSpellFlame, ANIM_TARGET, 2, 0x1, 0x0, 0xffe5, 0x0, 0x10 + delay 0x2 + createsprite gSpriteTemplate_EerieSpellFlame, ANIM_TARGET, 2, 0x1, 0x0, 0xffee, 0xffee, 0x10 + delay 0x2 + createsprite gSpriteTemplate_EerieSpellFlame, ANIM_TARGET, 2, 0x1, 0x0, 0x0, 0xffe7, 0x10 + delay 0x2 + createsprite gSpriteTemplate_EerieSpellFlame, ANIM_TARGET, 2, 0x1, 0x0, 0x11, 0xffef, 0x10 + delay 0x2 + createsprite gSpriteTemplate_EerieSpellFlame, ANIM_TARGET, 2, 0x1, 0x0, 0x17, 0x0, 0x10 + return + +@@@@@@@@@@@@@@@@@@@@@@@ GEN 9 @@@@@@@@@@@@@@@@@@@@@@@ +@ credits to Skeli Move_DIRE_CLAW:: + loadspritegfx ANIM_TAG_SLASH + loadspritegfx ANIM_TAG_POISON_BUBBLE + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SLASH, 0x0, 0xC, 0xC, 0x6038 @;Purple + createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 4 + delay 6 + playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET + createsprite gSlashSliceSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0xfff0, 0x0 + delay 0x2 + playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET + createsprite gSlashSliceSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x0, 0x0 + createvisualtask AnimTask_ShakeMon2, 0x2, 0x1, 0x4, 0x0, 0x24, 0x1 + delay 0x2 + playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET + createsprite gSlashSliceSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x0, 0x0 + call PoisonBubblesEffect + waitforvisualfinish + end + + +@ credits to Skeli Move_PSYSHIELD_BASH:: + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_WATER_GUN @Blue colour + call SetPsychicBackground + monbg ANIM_DEF_PARTNER + setalpha 12, 8 + playsewithpan SE_M_SUPERSONIC, SOUND_PAN_ATTACKER + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x1, 0x0, 0xB, 0x7FAF @;Light blue + createvisualtask AnimTask_WindUpLunge, 0x5, 0x0, 0xffe8, 0x8, 0x17, 0xa, 0x38, 0xa + delay 0x23 + createsprite gSpriteTemplate_PsyshieldBashHit, ANIM_ATTACKER, 4, -10, 0x0, 0x1, 0x0 + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET + delay 0x1 + createsprite gSlideMonToOffsetSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0xfff0, 0x0, 0x0, 0x4 + waitforvisualfinish + createvisualtask AnimTask_ShakeMonInPlace, 0x2, ANIM_TARGET, 0x4, 0x0, 0xc, 0x1 + waitforvisualfinish + delay 0x2 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x1, 0xB, 0x0, 0x7FAF @;Light blue + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x5 + delay 0x3 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x0, 0x7 + waitforvisualfinish + call UnsetPsychicBg + clearmonbg ANIM_DEF_PARTNER + blendoff + end + +@ credits to skeli Move_POWER_SHIFT:: + loadspritegfx ANIM_TAG_BLUEGREEN_ORB + loadspritegfx ANIM_TAG_RED_HEART @Red colour for orb + monbg ANIM_ATK_PARTNER + playsewithpan SE_M_REVERSAL, SOUND_PAN_ATTACKER + createsprite gSpriteTemplate_PowerShiftOffenseBall, ANIM_ATTACKER, 2, POWER_SHIFT_LEFT_X, 0, POWER_SHIFT_RIGHT_X, 0, POWER_SHIFT_DELAY, POWER_SHIFT_ARC + createsprite gSpriteTemplate_PowerShiftDefenseBall, ANIM_ATTACKER, 2, POWER_SHIFT_RIGHT_X, 0, POWER_SHIFT_LEFT_X, 0, POWER_SHIFT_DELAY, POWER_SHIFT_ARC + waitforvisualfinish + playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER + createvisualtask AnimTask_BlendColorCycle, 0x2, F_PAL_ATTACKER, 0x0, 0x2, 0x0, 0xa, 0x7fff + waitforvisualfinish + clearmonbg ANIM_ATK_PARTNER + end + + +@ credits to skeli Move_STONE_AXE:: + loadspritegfx ANIM_TAG_SLAM_HIT_2 @Cut + loadspritegfx ANIM_TAG_ROCKS + monbg ANIM_TARGET + splitbgprio ANIM_TARGET + playsewithpan SE_M_CUT, SOUND_PAN_TARGET + createsprite gSpriteTemplate_StoneAxeSlash, ANIM_TARGET, 2, 50, -10, 100, 8, 1 @;Move left + delay 0x5 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x0, 0x4, 0x10, 0x1 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + call StoneAxeRockFragments + delay 0x8 + call StoneAxeRockFragments + waitforvisualfinish + clearmonbg ANIM_TARGET + end + +StoneAxeRockFragments: + createsprite gRockFragmentSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x14, 0x18, 0xe, 0x2 + createsprite gRockFragmentSpriteTemplate, ANIM_TARGET, 4, 0x5, 0x0, 0xffec, 0x18, 0xe, 0x1 + createsprite gRockFragmentSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x5, 0x14, 0xffe8, 0xe, 0x2 + createsprite gRockFragmentSpriteTemplate, ANIM_TARGET, 4, 0xfffb, 0x0, 0xffec, 0xffe8, 0xe, 0x2 + createsprite gRockFragmentSpriteTemplate, ANIM_TARGET, 4, 0x0, 0xfffb, 0x1e, 0x12, 0x8, 0x2 + createsprite gRockFragmentSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x1e, 0xffee, 0x8, 0x2 + createsprite gRockFragmentSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0xffe2, 0x12, 0x8, 0x2 + createsprite gRockFragmentSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0xffe2, 0xffee, 0x8, 0x2 + return + + +@Credits to Skeli Move_SPRINGTIDE_STORM:: + loadspritegfx ANIM_TAG_GUST + loadspritegfx ANIM_TAG_RED_HEART + playsewithpan SE_M_GUST, SOUND_PAN_TARGET + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x0, 0x4, 0x58, 0x1 + createvisualtask AnimTask_BlendColorCycle, 0x2, F_PAL_TARGET, 0x2, 0x6, 0x0, 0xB, 0x7ADF + call HurricaneGust + call SpringtideStormHeartSwirl + call HurricaneGust + call SpringtideStormHeartSwirl + call HurricaneGust + call SpringtideStormHeartSwirl + call HurricaneGust + call SpringtideStormHeartSwirl + call HurricaneGust + call SpringtideStormHeartSwirl + call HurricaneGust + call SpringtideStormHeartSwirl + waitforvisualfinish + stopsound + end + +SpringtideStormHeartSwirl: + createsprite gSpriteTemplate_SpringtideHeart, ANIM_TARGET, 2, 0x0, 0x20, 0x210, 0x1e, 0xa, 0x32, ANIM_TARGET + delay 0x2 + createsprite gSpriteTemplate_SpringtideHeart, ANIM_TARGET, 2, 0x0, 0x24, 0x1e0, 0x14, 0xd, 0xffd2, ANIM_TARGET + delay 0x2 + createsprite gSpriteTemplate_SpringtideHeart, ANIM_TARGET, 2, 0x0, 0x25, 0x240, 0x14, 0x5, 0x2a, ANIM_TARGET + delay 0x2 + createsprite gSpriteTemplate_SpringtideHeart, ANIM_TARGET, 2, 0x0, 0x23, 0x190, 0x19, 0x8, 0xffd6, ANIM_TARGET + delay 0x2 + createsprite gSpriteTemplate_SpringtideHeart, ANIM_TARGET, 2, 0x0, 0x20, 0x200, 0x19, 0xd, 0x2e, ANIM_TARGET + delay 0x2 + createsprite gSpriteTemplate_SpringtideHeart, ANIM_TARGET, 2, 0x0, 0x25, 0x1d0, 0x1e, 0xc, 0xffce, ANIM_TARGET + return + + +@Credits to Skeli Move_MYSTICAL_POWER:: + loadspritegfx ANIM_TAG_THIN_RING + loadspritegfx ANIM_TAG_POISON_BUBBLE @Purple Colour + loadspritegfx ANIM_TAG_HYDRO_PUMP @Blue colour + setalpha 12, 8 + call SetPsychicBackground + monbg ANIM_TARGET + splitbgprio ANIM_TARGET + call PsystrikeInwardRing + delay 0xA + call PsystrikeInwardRing + delay 0xA + call PsystrikeInwardRing + delay 0xA + waitforvisualfinish + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x6, 0x0, 0xB, 0x7FAF @;Light blue + createvisualtask AnimTask_ExtrasensoryDistortion, 0x5, 0x0 + call MysticalPowerFoeRings + createvisualtask AnimTask_ExtrasensoryDistortion, 0x5, 0x1 + call MysticalPowerFoeRings + createvisualtask AnimTask_ExtrasensoryDistortion, 0x5, 0x2 + call MysticalPowerFoeTwoRingsOnly + waitforvisualfinish + clearmonbg ANIM_TARGET + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x1, 0xB, 0x0, 0x7FAF @;Light blue + call UnsetPsychicBg + blendoff + end + +@ TODO port cfru psystrike anim +PsystrikeInwardRing: + createsprite gSpriteTemplate_VioletMind, ANIM_ATTACKER, 0x28, 0x0, 0x0, 0x0, 0x0 + playsewithpan SE_M_SUPERSONIC, SOUND_PAN_ATTACKER + return + +MysticalPowerFoeRings: + playsewithpan SE_M_BIND, SOUND_PAN_TARGET + createsprite gSpriteTemplate_MysticalPowerRing, ANIM_TARGET, 2, -20, -10, ANIM_TARGET, 0x0 + delay MYSTICAL_POWER_RING_PAUSE + createsprite gSpriteTemplate_MysticalPowerRing, ANIM_TARGET, 2, 0, 10, ANIM_TARGET, 0x0 + delay MYSTICAL_POWER_RING_PAUSE + createsprite gSpriteTemplate_MysticalPowerRing, ANIM_TARGET, 2, 10, -20, ANIM_TARGET, 0x0 + delay MYSTICAL_POWER_RING_PAUSE + return + +MysticalPowerFoeTwoRingsOnly: + playsewithpan SE_M_BIND, SOUND_PAN_TARGET + createsprite gSpriteTemplate_MysticalPowerRing, ANIM_TARGET, 2, -20, -10, ANIM_TARGET, 0x0 + delay MYSTICAL_POWER_RING_PAUSE + createsprite gSpriteTemplate_MysticalPowerRing, ANIM_TARGET, 2, 0, 10, ANIM_TARGET, 0x0 + delay MYSTICAL_POWER_RING_PAUSE + return + + +@Credits to Skeli Move_RAGING_FURY:: + loadspritegfx ANIM_TAG_SMALL_EMBER + loopsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER, 0x8, 0x3 + createvisualtask AnimTask_BlendColorCycle, 0x2, (F_PAL_BG | F_PAL_ATTACKER | F_PAL_TARGET), 0x2, 0x5, 0x3, 0x8, 0x1f + createvisualtask AnimTask_WindUpLunge, 0x5, ANIM_ATTACKER, 0xffec, 0x8, 0x20, 0x8, 0x38, 0x6 + call OutrageFlames + call OutrageFlames + delay 10 + createvisualtask AnimTask_ShakeMon2, 0x2, ANIM_TARGET, 0x4, 0x0, 0x18, 0x1 + playsewithpan SE_M_FIRE_PUNCH, SOUND_PAN_TARGET + call FlameBurstSpread + waitforvisualfinish + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x5 + waitforvisualfinish + end + +@Credits to Skeli Move_WAVE_CRASH:: + loadspritegfx ANIM_TAG_WATER_IMPACT + loadspritegfx ANIM_TAG_SMALL_BUBBLES + loadspritegfx ANIM_TAG_ICE_CRYSTALS @Bubbles on attacker + monbg ANIM_DEF_PARTNER + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x2, 0x0, 0xB, 0x726A + createvisualtask AnimTask_WindUpLunge, 0x5, ANIM_ATTACKER, 0xffec, 0x8, 0x30, 0x8, 0x38, 0x6 + call WaterfallBubblesOnAttacker + waitforvisualfinish + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x0, 0x5, 0x5, 0x1 + call RisingWaterHitEffect + waitforvisualfinish + delay 0x5 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x5 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x1, 0xB, 0x0, 0x726A + clearmonbg ANIM_DEF_PARTNER + waitforvisualfinish + end + + +@Credits to Skeli Move_CHLOROBLAST:: + loadspritegfx ANIM_TAG_THIN_RING + loadspritegfx ANIM_TAG_HYDRO_PUMP + createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_THIN_RING, 0x0, 0xA, 0xA, 0x03AC + createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_HYDRO_PUMP, 0x0, 0xC, 0xC, 0x03AC + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x2, 0x0, 0x10, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x2, 0x0, 0x10, 0x03AC + createvisualtask AnimTask_BlendNonAttackerPalettes, 0x2, 0x2, 0x0, 0x10, 0x0 + playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER + createsprite gThinRingShrinkingSpriteTemplate ANIM_ATTACKER, 0x28, 0, 0, 0, 0 + delay 0xe + createsprite gThinRingShrinkingSpriteTemplate ANIM_ATTACKER, 0x28, 0, 0, 0, 0 + delay 0xe + createsprite gThinRingShrinkingSpriteTemplate ANIM_ATTACKER, 0x28, 0, 0, 0, 0 + waitforvisualfinish + createvisualtask AnimTask_AllBattlersInvisibleExceptAttackerAndTarget, 0xA, + fadetobg BG_CHLOROBLAST + waitbgfadeout + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x0, 0x10, 0x0, 0x0 + delay 0x10 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_ATTACKER, 0x0, 0x4, 0x4A, 0x1 + createsoundtask SoundTask_LoopSEAdjustPanning, 0xf0, 0xFF00 | SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x1, 0x17, 0x0, 0x5 + createvisualtask AnimTask_HorizontalShake, 0x5, 5, 1, 67 + call ChloroblastShot + call ChloroblastShot + call ChloroblastShot + createvisualtask AnimTask_ShakeMon, 0x5, ANIM_TARGET, 0x4, 0x0, 0x4A, 0x1 + call ChloroblastShot + call ChloroblastShot + call ChloroblastShot + call ChloroblastShot + call ChloroblastShot + call ChloroblastShot + call ChloroblastShot + call ChloroblastShot + call ChloroblastShot + call ChloroblastShot + call ChloroblastShot + call ChloroblastShot + call ChloroblastShot + call ChloroblastShot + call ChloroblastShot + waitforvisualfinish + delay 0x5 + createvisualtask AnimTask_BlendNonAttackerPalettes, 0x2, 0x2, 0x0, 0x0, 0x0 @;From Black + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x0, 0x10, 0x0, 0x03AC + restorebg + waitbgfadeout + createvisualtask AnimTask_AllBattlersVisible, 0xA, + clearmonbg ANIM_DEF_PARTNER + waitbgfadein + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS), 0x2, 0x0, 0x0, 0x0 @;From Black + end +ChloroblastShot: + createsprite gSpriteTemplate_ChloroblastShot, ANIM_TARGET, 2, 0, 0, 0x19 + delay 0x2 + createsprite gSpriteTemplate_ChloroblastShot, ANIM_TARGET, 2, 0, 0, 0x19 + delay 0x2 + return + +@Credits to Skeli Move_MOUNTAIN_GALE:: + loadspritegfx ANIM_TAG_ROCKS @Rocks + loadspritegfx ANIM_TAG_DRAGON_ASCENT_FOE @White Rock Colour + monbg ANIM_TARGET + call MountainGaleIceRock + delay 0x6 + call MountainGaleIceRock + delay 0x6 + call MountainGaleIceRock + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x0, 0x4, 0x18, 0x1 + playsewithpan SE_M_STRENGTH, SOUND_PAN_TARGET + delay 0x6 + call MountainGaleIceRock + playsewithpan SE_M_STRENGTH, SOUND_PAN_TARGET + delay 0x6 + call MountainGaleIceRock + playsewithpan SE_M_STRENGTH, SOUND_PAN_TARGET + delay 0x6 + playsewithpan SE_M_STRENGTH, SOUND_PAN_TARGET + delay 0x6 + playsewithpan SE_M_STRENGTH, SOUND_PAN_TARGET + waitforvisualfinish + clearmonbg ANIM_TARGET + end + +MountainGaleIceRock: + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + createsprite gSpriteTemplate_MountainGaleRock, ANIM_ATTACKER, 2, 0x14, 0xfff8, 0xfff8, 0xfff8, 0x14, 0xffe0 + return + + + +@Credits to Skeli Move_VICTORY_DANCE:: + loadspritegfx ANIM_TAG_HOLLOW_ORB + createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 0x2, ANIM_ATTACKER, 0x28, 0x6, 0x3, 0x3 + playsewithpan SE_M_TELEPORT, SOUND_PAN_ATTACKER + delay 0x8 + createvisualtask AnimTask_BlendPalInAndOutByTag, 0x5, ANIM_TAG_HOLLOW_ORB, 0x0B1D, 0xe, 0x0, 0x3 @;Light orange + createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 0x0 + createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 0x2b + createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 0x55 + createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 0x80 + createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 0xaa + createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 0xd5 + delay 0x1e + playsewithpan SE_M_TELEPORT, SOUND_PAN_ATTACKER + delay 0x1e + playsewithpan SE_M_TELEPORT, SOUND_PAN_ATTACKER + waitforvisualfinish + end + +@Credits to Skeli Move_HEADLONG_RUSH:: + loadspritegfx ANIM_TAG_MUD_SAND @Dig + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_EXPLOSION_2 + loadspritegfx ANIM_TAG_ROCKS + fadetobg BG_ROCK_WRECKER + waitbgfadeout + createvisualtask AnimTask_StartSlidingBg, 0x5, 0xF000, 0x0, 0x0, 0xffff + waitbgfadein + createvisualtask AnimTask_ShakeMon, 0x5, ANIM_ATTACKER, 0x0, 0x2, 0x26, 0x1 + call PulverizingPancakeDiggingRun + call PulverizingPancakeDiggingRun + call PulverizingPancakeDiggingRun + call PulverizingPancakeDiggingRun + call PulverizingPancakeDiggingRun + call PulverizingPancakeDiggingRun + call PulverizingPancakeDiggingRun + call PulverizingPancakeDiggingRun + call PulverizingPancakeDiggingRun + waitforvisualfinish + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x2a, 0x0, 0x0, 0x5 + createsprite gSpriteTemplate_HeadlongRushImpact, ANIM_TARGET, 4, 0xfff6, 0x0, 0x1, 0x0 + delay 0x5 + createvisualtask AnimTask_ShakeMon2, 0x5, ANIM_TARGET, 0x4, 0x0, 0x2C, 0x1 + call MaxQuake_DirtGeyser + call MaxQuake_DirtGeyser + waitforvisualfinish + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x5 + call UnsetPsychicBg + waitforvisualfinish + end +@ from max quake +MaxQuake_DirtGeyser: + createsprite gTectonicRageExplosionSpriteTemplate, ANIM_TARGET, 2, 0x0003, 0x0005, 0x1, 0x0 + createsprite gSpriteTemplate_MaxQuakeRockGeyser, ANIM_TARGET, 4, ANIM_TARGET, 0xfffc, 0x10 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + delay 0x0 + createsprite gTectonicRageExplosionSpriteTemplate, ANIM_TARGET, 2, 0xfff5, 0xfff1, 0x1, 0x0 + createsprite gSpriteTemplate_MaxQuakeDirtGeyser, ANIM_TARGET, 4, 0, 0x100D, 0x10 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + delay 0x0 + createsprite gTectonicRageExplosionSpriteTemplate, ANIM_TARGET, 2, 0x0008, 0xfffb, 0x1, 0x0 + createsprite gSpriteTemplate_MaxQuakeDirtGeyser, ANIM_TARGET, 4, 0, 0x4, 0x10 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + delay 0x0 + createsprite gTectonicRageExplosionSpriteTemplate, ANIM_TARGET, 2, 0xfffa, 0x0012, 0x1, 0x0 + createsprite gSpriteTemplate_MaxQuakeRockGeyser, ANIM_TARGET, 4, ANIM_TARGET, 0xfff0, 0x10 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + delay 0x0 + createsprite gTectonicRageExplosionSpriteTemplate, ANIM_TARGET, 2, 0x0000, 0x0005, 0x1, 0x0 + createsprite gSpriteTemplate_MaxQuakeDirtGeyser, ANIM_TARGET, 4, 0, 0xfffc, 0x10 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + createsprite gTectonicRageExplosionSpriteTemplate, ANIM_TARGET, 2, 0x0003, 0xfff5, ANIM_TARGET, 0x0 + createsprite gSpriteTemplate_MaxQuakeDirtGeyser, ANIM_TARGET, 4, 0, 0x100D, 0x10 + delay 0x0 + createsprite gTectonicRageExplosionSpriteTemplate, ANIM_TARGET, 2, 0xfff5, 0xffe1, ANIM_TARGET, 0x0 + createsprite gSpriteTemplate_MaxQuakeRockGeyser, ANIM_TARGET, 4, ANIM_TARGET, 0x4, 0x10 + delay 0x0 + createsprite gTectonicRageExplosionSpriteTemplate, ANIM_TARGET, 2, 0x0008, 0xffeb, ANIM_TARGET, 0x0 + createsprite gSpriteTemplate_MaxQuakeDirtGeyser, ANIM_TARGET, 4, 0, 0xfff0, 0x10 + delay 0x0 + createsprite gTectonicRageExplosionSpriteTemplate, ANIM_TARGET, 2, 0xfffa, 0x0002, ANIM_TARGET, 0x0 + createsprite gSpriteTemplate_MaxQuakeDirtGeyser, ANIM_TARGET, 4, 0, 0xfffc, 0x10 + delay 0x0 + createsprite gTectonicRageExplosionSpriteTemplate, ANIM_TARGET, 2, 0x0000, 0xfff5, ANIM_TARGET, 0x0 + createsprite gSpriteTemplate_MaxQuakeRockGeyser, ANIM_TARGET, 4, ANIM_TARGET, 0x100D, 0x10 + delay 0x0 + createsprite gTectonicRageExplosionSpriteTemplate, ANIM_TARGET, 2, 0x0003, 0xffe5, ANIM_TARGET, 0x0 + createsprite gSpriteTemplate_MaxQuakeDirtGeyser, ANIM_TARGET, 4, 0, 0x4, 0x10 + delay 0x0 + createsprite gTectonicRageExplosionSpriteTemplate, ANIM_TARGET, 2, 0xfff5, 0xffd1, ANIM_TARGET, 0x0 + createsprite gSpriteTemplate_MaxQuakeDirtGeyser, ANIM_TARGET, 4, 0, 0xfff0, 0x10 + delay 0x0 + createsprite gTectonicRageExplosionSpriteTemplate, ANIM_TARGET, 2, 0x0008, 0xffdb, ANIM_TARGET, 0x0 + createsprite gSpriteTemplate_MaxQuakeRockGeyser, ANIM_TARGET, 4, ANIM_TARGET, 0xfffc, 0x10 + delay 0x0 + createsprite gTectonicRageExplosionSpriteTemplate, ANIM_TARGET, 2, 0xfffa, 0xfff2, ANIM_TARGET, 0x0 + createsprite gSpriteTemplate_MaxQuakeDirtGeyser, ANIM_TARGET, 4, 0, 0x100D, 0x10 + delay 0x0 + createsprite gTectonicRageExplosionSpriteTemplate, ANIM_TARGET, 2, 0x0000, 0xffe5, ANIM_TARGET, 0x0 + createsprite gSpriteTemplate_MaxQuakeDirtGeyser, ANIM_TARGET, 4, 0, 0x4, 0x10 + delay 0x0 + createsprite gSpriteTemplate_MaxQuakeRockGeyser, ANIM_TARGET, 4, ANIM_TARGET, 0xfff0, 0x10 + return + + +@Credits to Skeli Move_BARB_BARRAGE:: + loadspritegfx ANIM_TAG_SPIKES + loadspritegfx ANIM_TAG_SHADOW_BALL @Spikes colour + loadspritegfx ANIM_TAG_POISON_BUBBLE + monbg ANIM_TARGET + call BarbBarrageSpikeShoot + loopsewithpan SE_M_DIG, SOUND_PAN_ATTACKER, 0x7, 0x3 + createvisualtask AnimTask_FlailMovement, 0x2, ANIM_ATTACKER + delay 0x14 + createvisualtask AnimTask_ShakeMon, 0x5, 0x1, 0x7, 0x0, 0x20, 0x1 + call PoisonBubblesEffect + clearmonbg ANIM_TARGET + end +BarbBarrageSpikeShoot: + delay 0x3 + createsprite gSpriteTemplate_BarbBarrage, ANIM_TARGET, 2, 0x0, 0x0, 0x1e, 0xfb00, 0x0, 0x3 + delay 0x0 + createsprite gSpriteTemplate_BarbBarrage, ANIM_TARGET, 2, 0x0, 0x0, 0x1e, 0x0, 0x0500, 0x3 + delay 0x0 + createsprite gSpriteTemplate_BarbBarrage, ANIM_TARGET, 2, 0x0, 0x0, 0x1e, 0x0, 0xfb00, 0x3 + delay 0x0 + createsprite gSpriteTemplate_BarbBarrage, ANIM_TARGET, 2, 0x0, 0x0, 0x1e, 0x0500, 0x0300, 0x3 + delay 0x0 + createsprite gSpriteTemplate_BarbBarrage, ANIM_TARGET, 2, 0x0, 0x0, 0x1e, 0xfb00, 0x0300, 0x3 + delay 0x0 + createsprite gSpriteTemplate_BarbBarrage, ANIM_TARGET, 2, 0x0, 0x0, 0x1e, 0x0500, 0xfd00, 0x3 + delay 0x0 + createsprite gSpriteTemplate_BarbBarrage, ANIM_TARGET, 2, 0x0, 0x0, 0x1e, 0xfb00, 0xfd00, 0x3 + return + + + +@Credits to Skeli Move_ESPER_WING:: + loadspritegfx ANIM_TAG_PUNISHMENT_BLADES @Punishment Blade + loadspritegfx ANIM_TAG_WHITE_FEATHER + createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_WHITE_FEATHER, 0x0, 0xA, 0xA, 0x7DDE + monbg ANIM_TARGET + call SetPsychicBackground + playsewithpan SE_M_SUPERSONIC, SOUND_PAN_ATTACKER + createvisualtask AnimTask_BlendColorCycle, 0x2, 0x2, 0x0, 0x2, 0x0, 0x8, 0x2ff + waitforvisualfinish + playsewithpan SE_M_WING_ATTACK, SOUND_PAN_ATTACKER + call EsperWingBlade + playsewithpan SE_M_WING_ATTACK, SOUND_PAN_ATTACKER + delay ESPER_WING_SPEED / 2 + playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET + createvisualtask AnimTask_ShakeMon2, 0x2, ANIM_TARGET, 0x4, 0x0, 0xC, 0x1 + call WingAttackFeatherScatter + waitforvisualfinish + call UnsetPsychicBg + clearmonbg ANIM_DEF_PARTNER + end + +EsperWingBlade: + createsprite gPsychoCutSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, ESPER_WING_SPEED + delay ESPER_WING_SPEED / 2 + createsprite gPsychoCutSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, ESPER_WING_SPEED + return + +@ TODO update wing attack anim with this +WingAttackFeatherScatter: + createsprite gSpriteTemplate_WingAttackFeather, ANIM_TARGET, 1, 0xfff8, 0xfff8, 0xa0, 0xffe0 + createsprite gSpriteTemplate_WingAttackFeather, ANIM_TARGET, 1, 0xfff8, 0xfff8, 0xff00, 0xffd8 + createsprite gSpriteTemplate_WingAttackFeather, ANIM_TARGET, 1, 0xfff8, 0xfff8, 0x1a0, 0xffda + createsprite gSpriteTemplate_WingAttackFeather, ANIM_TARGET, 1, 0xfff8, 0xfff8, 0xfe80, 0xffe1 + return + + +@Credits to Skeli Move_BITTER_MALICE:: + loadspritegfx ANIM_TAG_PURPLE_RING + loadspritegfx ANIM_TAG_EYE_SPARKLE + loadspritegfx ANIM_TAG_ICE_CRYSTALS + playsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_TARGET + createvisualtask AnimTask_ScaryFace, 0x5 @ internally checks side + createvisualtask AnimTask_ShakeMon2, 0x5, 0x1, 0x2, 0x0, 0x4C, 0x1 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x4, 0x0, 0xF, 0x3006 @;Dark Purple + createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_PURPLE_RING, 0x4, 0x0, 0xE, 0x3006 @;Dark Purple + call BitterMaliceSwirl + call BitterMaliceSwirl + call BitterMaliceSwirl + delay 0x4 @;Wait until the blends are reset after the scary face fades out + call IceCrystalEffectShort + waitforvisualfinish + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x1, 0xF, 0x0, 0x3006 @;Dark Purple + end + +BitterMaliceSwirl: + createsprite gSpriteTemplate_BitterMaliceRing, ANIM_TARGET, 2, 0x0, 0x1c, 0x210, 0x1e, 0xd, 0x32, 0x1 + delay 0x2 + createsprite gSpriteTemplate_BitterMaliceRing, ANIM_TARGET, 2, 0x0, 0x20, 0x1e0, 0x14, 0x10, 0xffd2, 0x1 + delay 0x2 + createsprite gSpriteTemplate_BitterMaliceRing, ANIM_TARGET, 2, 0x0, 0x21, 0x240, 0x14, 0x8, 0x2a, 0x1 + delay 0x2 + createsprite gSpriteTemplate_BitterMaliceRing, ANIM_TARGET, 2, 0x0, 0x1f, 0x190, 0x19, 0xb, 0xffd6, 0x1 + delay 0x2 + createsprite gSpriteTemplate_BitterMaliceRing, ANIM_TARGET, 2, 0x0, 0x1c, 0x200, 0x19, 0x10, 0x2e, 0x1 + delay 0x2 + createsprite gSpriteTemplate_BitterMaliceRing, ANIM_TARGET, 2, 0x0, 0x21, 0x1d0, 0x1e, 0xf, 0xffce, 0x1 + delay 0x2 + return + +@ credits to Skeli Move_SHELTER:: + loadspritegfx ANIM_TAG_SHELL_LEFT + loadspritegfx ANIM_TAG_SHELL_RIGHT + playsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER + createvisualtask AnimTask_ShellSmashShrinkAttacker, 0x2 + createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_SHELL_LEFT, 0x1, 0x0, 0xE, 0x6B5A @ light light, gray + createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_SHELL_RIGHT, 0x1, 0x0, 0xE, 0x6B5A @ light light, gray + createsprite gShellSmashRightShellSpriteTemplate, ANIM_ATTACKER, 2, 0xffd7, 0x0, 0x2, 0x333, 0x0, 10, 30 + createsprite gShellSmashLeftShellSpriteTemplate, ANIM_ATTACKER, 2, 0x20, 0x0, 0x6, 0xfccd, 0x0, 10, 30 + createvisualtask AnimTask_FadeOutParticles, 0x2, 0 + waitforvisualfinish + blendoff + end + + +@Credits to Skeli Move_TRIPLE_ARROWS:: + loadspritegfx ANIM_TAG_SPIRIT_ARROW @Arrow + loadspritegfx ANIM_TAG_HANDS_AND_FEET + monbg ANIM_DEF_PARTNER + splitbgprio ANIM_TARGET + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET + createsprite gSpriteTemplate_TripleArrowKick, ANIM_TARGET, 2, -30, -20, 0x10, -20 + waitforvisualfinish + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x0, 0x6, 0x6, 0x1 + delay 0x4 + playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER + createsprite gSpiritShackleArrowTemplate, ANIM_TARGET, 2, -40, 0, 0, 0, TRIPLE_ARROW_FLY_TIME + delay 0x3 + playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER + createsprite gSpiritShackleArrowTemplate, ANIM_TARGET, 2, 40, 0, 0, 0, TRIPLE_ARROW_FLY_TIME + delay 0x3 + createvisualtask AnimTask_ShakeMon2, 0x2, ANIM_TARGET, 0x3, 0x0, 0xa, 0x1 + playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER + createvisualtask AnimTask_IsAttackerPlayerSide, 0x2, + jumpargeq 0x7, FALSE, TripleArrowsOnOpponent + createsprite gSpiritShackleArrowTemplate, ANIM_TARGET, 2, 0, -60, 0, 0, TRIPLE_ARROW_FLY_TIME +TripleArrowsEnd: + delay 0x3 + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + end +TripleArrowsOnOpponent: + createsprite gSpiritShackleArrowTemplate, ANIM_TARGET, 2, 0, 50, 0, 0, TRIPLE_ARROW_FLY_TIME @Below becomes becomes, above + goto TripleArrowsEnd + + + +@Credits to Skeli Move_INFERNAL_PARADE:: + loadspritegfx ANIM_TAG_PURPLE_FLAME + loadspritegfx ANIM_TAG_WISP_FIRE + monbg ANIM_TARGET + splitbgprio_foes ANIM_TARGET + fadetobg BG_GHOST + playsewithpan SE_M_PSYBEAM, 0xc0 + waitbgfadein + createsprite gSpriteTemplate_InfernalParadeFlame, ANIM_TARGET, 2, -30, 10, 20 @;Bottom left + delay 0x3 + createsprite gSpriteTemplate_InfernalParadeFlame, ANIM_TARGET, 2, 30, -30, -20 @;Top right + delay 0x3 + createsprite gSpriteTemplate_InfernalParadeFlame, ANIM_TARGET, 2, 30, 10, 20 @;Bottom right + delay 0x3 + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x0, 0x3, 0x32, 0x1 + call InfernalFlames + call InfernalFlames + call InfernalFlames + call InfernalFlames + playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_TARGET + createsprite gWillOWispFireSpriteTemplate, ANIM_TARGET, 2, 0x0 + createsprite gWillOWispFireSpriteTemplate, ANIM_TARGET, 2, 0x2a + createsprite gWillOWispFireSpriteTemplate, ANIM_TARGET, 2, 0x54 + createsprite gWillOWispFireSpriteTemplate, ANIM_TARGET, 2, 0x7e + createsprite gWillOWispFireSpriteTemplate, ANIM_TARGET, 2, 0xa8 + createsprite gWillOWispFireSpriteTemplate, ANIM_TARGET, 2, 0xd2 + waitforvisualfinish + delay 0xC + restorebg + waitbgfadein + clearmonbg ANIM_TARGET + end +InfernalFlames: + createsprite gSpriteTemplate_InfernalParadeFlame, ANIM_TARGET, 2, -30, -30, -20 @;Top left + delay 0x3 + createsprite gSpriteTemplate_InfernalParadeFlame, ANIM_TARGET, 2, -30, 10, 20 @;Bottom left + delay 0x3 + createsprite gSpriteTemplate_InfernalParadeFlame, ANIM_TARGET, 2, 30, -30, -20 @;Top right + delay 0x3 + createsprite gSpriteTemplate_InfernalParadeFlame, ANIM_TARGET, 2, 30, 10, 20 @;Bottom right + delay 0x3 + return + + + +@Credits to Skeli Move_CEASELESS_EDGE:: + loadspritegfx ANIM_TAG_SLASH + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x2C, 0x0, 0x0, 0x5 + waitforvisualfinish + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x0, 0x10, 0x10, 0x1F @;Fully to to, Red + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_ATTACKER | F_PAL_TARGET), 0x0, 0x10, 0x10, 0x0 @;Fully to to, Black + createvisualtask AnimTask_AllBattlersInvisibleExceptAttackerAndTarget, 0xa, + delay 0x10 + createvisualtask AnimTask_ShakeMon2, 0x2, ANIM_TARGET, 0x3, 0x0, 0x30, 0x1 + call CeaselessEdgeSlashes + call CeaselessEdgeSlashes + call CeaselessEdgeSlashes + waitforvisualfinish + delay 0x8 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x5 + waitforvisualfinish + createvisualtask AnimTask_AllBattlersVisible, 0xA, + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS), 0x1, 0x10, 0x0, 0x7FFF @;From White + waitforvisualfinish + end + +CeaselessEdgeSlashes: + playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET + createsprite gSpriteTemplate_CeaselessEdgeSlash, ANIM_TARGET, 2, 8, 0, FALSE, FALSE + delay 0x4 + playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET + createsprite gSpriteTemplate_CeaselessEdgeSlash, ANIM_TARGET, 2, -8, -8, TRUE, FALSE + delay 0x4 + playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET + createsprite gSpriteTemplate_CeaselessEdgeSlash, ANIM_TARGET, 2, -8, 0, TRUE, TRUE + delay 0x4 + playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET + createsprite gSpriteTemplate_CeaselessEdgeSlash, ANIM_TARGET, 2, 8, -4, FALSE, TRUE + return + + +@Credits to Skeli Move_BLEAKWIND_STORM:: + loadspritegfx ANIM_TAG_GUST + loadspritegfx ANIM_TAG_ICE_CRYSTALS + playsewithpan SE_M_GUST, SOUND_PAN_TARGET + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x0, 0x4, 0x58, 0x1 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x4, 0x0, 0xB, 0x7FFF + call HurricaneGust + call BleakwindStormIceSwirl + call HurricaneGust + call BleakwindStormIceSwirl + call HurricaneGust + call BleakwindStormIceSwirl + call HurricaneGust + call BleakwindStormIceSwirl + call HurricaneGust + call BleakwindStormIceSwirl + call HurricaneGust + call BleakwindStormIceSwirl + waitforvisualfinish + stopsound + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x1, 0xB, 0x0, 0x7FFF + waitforvisualfinish + end +BleakwindStormIceSwirl: + createsprite gSpriteTemplate_BleakwindIce, ANIM_TARGET, 2, 0x0, 0x20, 0x210, 0x1e, 0xa, 0x32, ANIM_TARGET + delay 0x2 + createsprite gSpriteTemplate_BleakwindIce, ANIM_TARGET, 2, 0x0, 0x24, 0x1e0, 0x14, 0xd, 0xffd2, ANIM_TARGET + delay 0x2 + createsprite gSpriteTemplate_BleakwindIce, ANIM_TARGET, 2, 0x0, 0x25, 0x240, 0x14, 0x5, 0x2a, ANIM_TARGET + delay 0x2 + createsprite gSpriteTemplate_BleakwindIce, ANIM_TARGET, 2, 0x0, 0x23, 0x190, 0x19, 0x8, 0xffd6, ANIM_TARGET + delay 0x2 + createsprite gSpriteTemplate_BleakwindIce, ANIM_TARGET, 2, 0x0, 0x20, 0x200, 0x19, 0xd, 0x2e, ANIM_TARGET + delay 0x2 + createsprite gSpriteTemplate_BleakwindIce, ANIM_TARGET, 2, 0x0, 0x25, 0x1d0, 0x1e, 0xc, 0xffce, ANIM_TARGET + return + + +@Credits to Skeli Move_WILDBOLT_STORM:: + loadspritegfx ANIM_TAG_GUST + loadspritegfx ANIM_TAG_SPARK_2 + fadetobg BG_MAX_LIGHTNING + waitbgfadeout + createvisualtask AnimTask_StartSlidingBg, 0x5, 0xff00, 0x0, 0x1, 0xffff + waitbgfadein + playsewithpan SE_M_GUST, SOUND_PAN_TARGET + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x0, 0x4, 0x58, 0x1 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x4, 0x0, 0xB, 0x07FE + call HurricaneGust + call WildboltStormSparkSwirl + call HurricaneGust + call WildboltStormSparkSwirl + call HurricaneGust + call WildboltStormSparkSwirl + call HurricaneGust + call WildboltStormSparkSwirl + call HurricaneGust + call WildboltStormSparkSwirl + call HurricaneGust + call WildboltStormSparkSwirl + waitforvisualfinish + stopsound + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x1, 0xB, 0x0, 0x07FE + call UnsetPsychicBg + waitforvisualfinish + end + +WildboltStormSparkSwirl: + createsprite gSpriteTemplate_WildboltStormSpark, ANIM_TARGET, 2, 0x0, 0x20, 0x210, 0x1e, 0xa, 0x32, ANIM_TARGET + delay 0x2 + createsprite gSpriteTemplate_WildboltStormSpark, ANIM_TARGET, 2, 0x0, 0x24, 0x1e0, 0x14, 0xd, 0xffd2, ANIM_TARGET + delay 0x2 + createsprite gSpriteTemplate_WildboltStormSpark, ANIM_TARGET, 2, 0x0, 0x25, 0x240, 0x14, 0x5, 0x2a, ANIM_TARGET + delay 0x2 + createsprite gSpriteTemplate_WildboltStormSpark, ANIM_TARGET, 2, 0x0, 0x23, 0x190, 0x19, 0x8, 0xffd6, ANIM_TARGET + delay 0x2 + createsprite gSpriteTemplate_WildboltStormSpark, ANIM_TARGET, 2, 0x0, 0x20, 0x200, 0x19, 0xd, 0x2e, ANIM_TARGET + delay 0x2 + createsprite gSpriteTemplate_WildboltStormSpark, ANIM_TARGET, 2, 0x0, 0x25, 0x1d0, 0x1e, 0xc, 0xffce, ANIM_TARGET + return + + +@Credits to Skeli Move_SANDSEAR_STORM:: + loadspritegfx ANIM_TAG_GUST + loadspritegfx ANIM_TAG_SMALL_EMBER + createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_GUST, 0x0, 0xA, 0xA, 0x190B + playsewithpan SE_M_GUST, SOUND_PAN_TARGET + createvisualtask AnimTask_ShakeMon, 0x2, ANIM_TARGET, 0x0, 0x4, 0x58, 0x1 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x4, 0x0, 0xB, 0x1F + call HurricaneGust + call SandsearStormFireSpin + call HurricaneGust + call SandsearStormFireSpin + call HurricaneGust + call SandsearStormFireSpin + call HurricaneGust + call SandsearStormFireSpin + call HurricaneGust + call SandsearStormFireSpin + call HurricaneGust + call SandsearStormFireSpin + waitforvisualfinish + stopsound + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x1, 0xB, 0x0, 0x1F + waitforvisualfinish + end + +SandsearStormFireSpin: + createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x210, 0x1e, 0xd, 0x32, ANIM_TARGET + delay 0x2 + createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x20, 0x1e0, 0x14, 0x10, 0xffd2, ANIM_TARGET + delay 0x2 + createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x240, 0x14, 0x8, 0x2a, ANIM_TARGET + delay 0x2 + createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1f, 0x190, 0x19, 0xb, 0xffd6, ANIM_TARGET + delay 0x2 + createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x200, 0x19, 0x10, 0x2e, ANIM_TARGET + delay 0x2 + createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1d0, 0x1e, 0xf, 0xffce, ANIM_TARGET + return + + +@Credits to Skeli Move_LUNAR_BLESSING:: + loadspritegfx ANIM_TAG_MOON + loadspritegfx ANIM_TAG_SPARKLE_2 + loadspritegfx ANIM_TAG_GUARD_RING + loadspritegfx ANIM_TAG_SMALL_EMBER @Yellow colour for ring + loadspritegfx ANIM_TAG_BLUE_STAR + monbg ANIM_ATK_PARTNER + setalpha 16, 0 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x10, 0x0 + createvisualtask AnimTask_BlendNonAttackerPalettes, 0x2, 0x1, 0x0, 0x10, 0x0 + waitforvisualfinish + createsprite gMoonSpriteTemplate, ANIM_ATTACKER, 2, 0x78, 0x38 + createvisualtask AnimTask_AlphaFadeIn, 0x3, 0x0, 0x10, 0x10, 0x0, 0x1 + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x7, 0x0, 0x10, 0x0 + loopsewithpan SE_M_HEAL_BELL, SOUND_PAN_ATTACKER, 0x10, 0x3 + call HealingEffect2 + createsprite gSpriteTemplate_LunarDanceRing, ANIM_ATTACKER, 2, + delay 0x4 + createsprite gSpriteTemplate_LunarDanceRing, ANIM_ATTACKER, 2, + delay 0x4 + createsprite gSpriteTemplate_LunarDanceRing, ANIM_ATTACKER, 2, + delay 0x24 + clearmonbg ANIM_ATK_PARTNER + call HealingEffect + delay 0x28 + createvisualtask AnimTask_AllBattlersInvisible, 0xA, + createvisualtask AnimTask_MoonlightEndFade, 0x2, + delay 0x10 + createvisualtask AnimTask_AllBattlersVisible, 0xA, + waitforvisualfinish + blendoff + end + + +@Credits to Skeli Move_TAKE_HEART:: + loadspritegfx ANIM_TAG_RED_HEART + loadspritegfx ANIM_TAG_SPARKLE_2 + loadspritegfx ANIM_TAG_GUARD_RING + playsewithpan SE_M_BUBBLE, SOUND_PAN_ATTACKER + createsprite gSpriteTemplate_TakeHeartFallingHeart, ANIM_ATTACKER, 2, 0, 0x3a, 4, ANIM_ATTACKER + delay 0x15 + loopsewithpan SE_M_HEAL_BELL, SOUND_PAN_ATTACKER, 0x10, 0x4 + createvisualtask AnimTask_StatusClearedEffect, 0x2, 0x0 + call TakeHeartRings + call TakeHeartRings + call TakeHeartRings + call TakeHeartRings + call TakeHeartRings + call TakeHeartRings + call TakeHeartRings + call TakeHeartRings + call TakeHeartRings + call TakeHeartRings + call TakeHeartRings + call TakeHeartRings + waitforvisualfinish + end + +TakeHeartRings: + createsprite gSpriteTemplate_TakeHeartRing, ANIM_ATTACKER, 2, + delay 0x4 + return + Move_TERA_BLAST:: Move_AXE_KICK:: Move_LAST_RESPECTS:: @@ -15609,6 +17559,17 @@ Move_WATERFALL: setalpha 12, 8 createvisualtask AnimTask_ShakeMon, 5, ANIM_ATTACKER, 0, 2, 23, 1 delay 5 + call WaterfallBubblesOnAttacker + delay 10 + createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 6, 5 + delay 6 + call RisingWaterHitEffect + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + blendoff + end + +WaterfallBubblesOnAttacker: playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER createsprite gSmallBubblePairSpriteTemplate, ANIM_ATTACKER, 2, 10, 10, 25, ANIM_ATTACKER delay 4 @@ -15633,14 +17594,7 @@ Move_WATERFALL: playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER createsprite gSmallBubblePairSpriteTemplate, ANIM_ATTACKER, 2, 12, 0, 25, ANIM_ATTACKER waitforvisualfinish - delay 10 - createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 6, 5 - delay 6 - call RisingWaterHitEffect - waitforvisualfinish - clearmonbg ANIM_DEF_PARTNER - blendoff - end + return RisingWaterHitEffect: playsewithpan SE_M_WATERFALL, SOUND_PAN_TARGET @@ -25207,7 +27161,7 @@ Move_BREAKNECK_BLITZ:: createsprite gBreakneckBlitzDanceSpriteTemplate, ANIM_ATTACKER, 2, 0xd5 waitforvisualfinish clearmonbg ANIM_ATTACKER - createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA + createvisualtask AnimTask_AllBattlersInvisibleExceptAttackerAndTarget, 10 waitforvisualfinish fadetobg BG_DRILL waitbgfadeout @@ -25253,7 +27207,7 @@ Move_BREAKNECK_BLITZ:: delay 0x10 blendoff clearmonbg ANIM_DEF_PARTNER - createvisualtask AnimTask_AllBanksVisible, 0xA + createvisualtask AnimTask_AllBattlersVisible, 0xA waitforvisualfinish call UnsetPsychicBg end @@ -25265,7 +27219,7 @@ Move_ALL_OUT_PUMMELING: loadspritegfx ANIM_TAG_METEOR loadspritegfx ANIM_TAG_FLAT_ROCK loadspritegfx ANIM_TAG_FOCUS_ENERGY - createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA + createvisualtask AnimTask_AllBattlersInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish call EndureEffect loopsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER 0x9 0x2 @@ -25343,7 +27297,7 @@ Move_ALL_OUT_PUMMELING: delay 0x10 blendoff clearmonbg ANIM_DEF_PARTNER - createvisualtask AnimTask_AllBanksVisible, 0xA + createvisualtask AnimTask_AllBattlersVisible, 0xA waitforvisualfinish call UnsetPsychicBg end @@ -25355,7 +27309,7 @@ Move_SUPERSONIC_SKYSTRIKE: loadspritegfx ANIM_TAG_FOCUS_ENERGY @ focus energy loadspritegfx ANIM_TAG_BIRD @ sky attack bird loadspritegfx ANIM_TAG_IMPACT @ hit - createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA + createvisualtask AnimTask_AllBattlersInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish monbg ANIM_DEF_PARTNER createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x1, 0x8, 0x0, 0x0 @@ -25415,7 +27369,7 @@ FinishSupersonicSkystrike: delay 0x30 clearmonbg ANIM_DEF_PARTNER blendoff - createvisualtask AnimTask_AllBanksVisible, 0xA + createvisualtask AnimTask_AllBattlersVisible, 0xA createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x10 call UnsetPsychicBg waitforvisualfinish @@ -25446,7 +27400,7 @@ FinishAcidDownpour: call AcidDownpourFlareOnAttacker delay 0x5 clearmonbg ANIM_ATTACKER - createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA + createvisualtask AnimTask_AllBattlersInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish blendoff delay 0x20 @@ -25474,7 +27428,7 @@ FinishAcidDownpour: restorebg waitbgfadeout setarg 0x7 0xffff - createvisualtask AnimTask_AllBanksVisible, 0xA + createvisualtask AnimTask_AllBattlersVisible, 0xA waitbgfadein waitforvisualfinish end @@ -25535,7 +27489,7 @@ Move_TECTONIC_RAGE: delay 0xa waitforvisualfinish clearmonbg ANIM_TARGET - createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA + createvisualtask AnimTask_AllBattlersInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish invisible ANIM_TARGET delay 0x5 @@ -25602,7 +27556,7 @@ Move_TECTONIC_RAGE: waitforvisualfinish call UnsetPsychicBg waitbgfadein - createvisualtask AnimTask_AllBanksVisible, 0xA + createvisualtask AnimTask_AllBattlersVisible, 0xA waitforvisualfinish end TectonicRageExplosion: @@ -25631,7 +27585,7 @@ Move_CONTINENTAL_CRUSH:: loadspritegfx ANIM_TAG_FOCUS_ENERGY @ focus energy loadspritegfx ANIM_TAG_IMPACT @ hit loadspritegfx ANIM_TAG_REALLY_BIG_ROCK - createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA + createvisualtask AnimTask_AllBattlersInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call ContinentalCrashBuffEffect @@ -25728,7 +27682,7 @@ FinishContinentalCrush: restorebg waitbgfadeout setarg 0x7 0xffff - createvisualtask AnimTask_AllBanksVisible, 0xA + createvisualtask AnimTask_AllBattlersVisible, 0xA waitbgfadein delay 0x4 waitforvisualfinish @@ -25778,7 +27732,7 @@ Move_SAVAGE_SPIN_OUT:: loadspritegfx ANIM_TAG_STRING @string shot loadspritegfx ANIM_TAG_SPIDER_WEB @spider web loadspritegfx ANIM_TAG_MUD_SAND @rocks - createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA + createvisualtask AnimTask_AllBattlersInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish monbg ANIM_ATTACKER setalpha 12, 8 @@ -25793,7 +27747,7 @@ Move_SAVAGE_SPIN_OUT:: waitforvisualfinish createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x4, 0x0, 0x0 clearmonbg ANIM_ATTACKER - createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA + createvisualtask AnimTask_AllBattlersInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish unloadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT call gSavageSpinOutStringBlastSpriteTemplateSHOT @@ -25882,7 +27836,7 @@ FinishSavageSpinOut: createsprite gSavageSpinOutWhiteExplosionSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x10, ANIM_TARGET, 0x1 delay 0x6 waitforvisualfinish - createvisualtask AnimTask_AllBanksVisible, 0xA + createvisualtask AnimTask_AllBattlersVisible, 0xA waitforvisualfinish end gSavageSpinOutStringBlastSpriteTemplateSHOT: @@ -25932,7 +27886,7 @@ Move_NEVER_ENDING_NIGHTMARE:: loadspritegfx ANIM_TAG_FIRE_PLUME @blast burn loadspritegfx ANIM_TAG_POISON_BUBBLE @purple loadspritegfx ANIM_TAG_VERTICAL_HEX @hex - createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA + createvisualtask AnimTask_AllBattlersInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call NeverendingNightmareBuffEffect @@ -26007,7 +27961,7 @@ Move_NEVER_ENDING_NIGHTMARE:: waitforvisualfinish restorebg waitbgfadeout - createvisualtask AnimTask_AllBanksVisible, 0xA + createvisualtask AnimTask_AllBattlersVisible, 0xA waitforvisualfinish end NeverendingNightmareBuffEffect: @@ -26117,7 +28071,7 @@ Move_CORKSCREW_CRASH:: loadspritegfx ANIM_TAG_MUD_SAND @rock monbg ANIM_ATTACKER invisible ANIM_TARGET - createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA + createvisualtask AnimTask_AllBattlersInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x2, 0x0, 0xb, 0x6318 @fade atker to gray createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_SPIKES, 0x0, 0xC, 0xC, 0x6318 @;Gray @@ -26240,7 +28194,7 @@ Move_INFERNO_OVERDRIVE:: loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge loadspritegfx ANIM_TAG_SMALL_EMBER @fire createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_CIRCLE_OF_LIGHT, 0x0, 0xA, 0xA, 0x1F - createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA + createvisualtask AnimTask_AllBattlersInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish fadetobg BG_INFERNO_OVERDRIVE waitbgfadeout @@ -26353,7 +28307,7 @@ Move_HYDRO_VORTEX:: loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy loadspritegfx ANIM_TAG_METEOR @superpower loadspritegfx ANIM_TAG_WATER_ORB @whirlpool - createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA + createvisualtask AnimTask_AllBattlersInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish createvisualtask AnimTask_CreateSurfWave, 0x2, 0x0 delay 0x18 @@ -26409,7 +28363,7 @@ Move_HYDRO_VORTEX:: waitforvisualfinish restorebg waitbgfadeout - createvisualtask AnimTask_AllBanksVisible, 0xA + createvisualtask AnimTask_AllBattlersVisible, 0xA waitforvisualfinish end HydroVortexBubbles: @@ -26467,7 +28421,7 @@ Move_BLOOM_DOOM:: loadspritegfx ANIM_TAG_GUST @hurricane loadspritegfx ANIM_TAG_VERTICAL_HEX @hex diamond monbg ANIM_ATTACKER - createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA + createvisualtask AnimTask_AllBattlersInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish setalpha 12, 8 createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x4, 0x0 @@ -26639,13 +28593,13 @@ BloomDoomPetalBlast: delay 0x2 return ResetFromGreenScreen: - createvisualtask AnimTask_AllBanksInvisible, 0xA + createvisualtask AnimTask_AllBattlersInvisible, 0xA waitforvisualfinish createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BATTLERS, 0x2, 0x0, 0x0, 0x33ED @Everything from green restorebg waitbgfadeout setarg 0x7 0xffff - createvisualtask AnimTask_AllBanksVisible, 0xA + createvisualtask AnimTask_AllBattlersVisible, 0xA waitbgfadein waitforvisualfinish delay 0x5 @@ -26662,7 +28616,7 @@ Move_GIGAVOLT_HAVOC:: loadspritegfx ANIM_TAG_SPARK_2 loadspritegfx ANIM_TAG_GRAY_SMOKE loadspritegfx ANIM_TAG_THIN_RING - createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA + createvisualtask AnimTask_AllBattlersInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x6, 0x0, 0x10, 0x0000 playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER @@ -26803,7 +28757,7 @@ Move_GIGAVOLT_HAVOC:: waitforvisualfinish createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x10, 0x0, 0x0000 waitforvisualfinish - createvisualtask AnimTask_AllBanksVisible, 0xa + createvisualtask AnimTask_AllBattlersVisible, 0xa waitforvisualfinish end HavocSpearGeyser: @@ -26835,7 +28789,7 @@ Move_SHATTERED_PSYCHE:: loadspritegfx ANIM_TAG_THIN_RING @ring loadspritegfx ANIM_TAG_PINK_PETAL @pink loadspritegfx ANIM_TAG_TORN_METAL @brick break shatter - createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA + createvisualtask AnimTask_AllBattlersInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish createvisualtask AnimTask_BlendBattleAnimPalExclude, 0x5, 0x0, 0x0, 0x0, 0x10, 0x0 waitforvisualfinish @@ -26896,7 +28850,7 @@ ShatteredPsycheFinish: createsprite gBrickBreakWallShardSpriteTemplate ANIM_TARGET, 2, 0x1, 0x2, 0x0, 0x0 createsprite gBrickBreakWallShardSpriteTemplate ANIM_TARGET, 2, 0x1, 0x3, 0x0, 0x0 waitbgfadeout - createvisualtask AnimTask_AllBanksVisible, 0xA + createvisualtask AnimTask_AllBattlersVisible, 0xA waitforvisualfinish end ShatteredPsycheFlingOpponent: @@ -26994,7 +28948,7 @@ Move_SUBZERO_SLAMMER:: loadspritegfx ANIM_TAG_ICE_CUBE @glacier loadspritegfx ANIM_TAG_EXPLOSION_2 @explosion createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_EXPLOSION_2, 0x0, 0xC, 0xC, 0x6A23 - createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA + createvisualtask AnimTask_AllBattlersInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish fadetobg BG_ICE waitbgfadeout @@ -27085,7 +29039,7 @@ SubzeroSlammerFinish: restorebg waitbgfadeout setarg 0x7 0xffff - createvisualtask AnimTask_AllBanksVisible, 0xA + createvisualtask AnimTask_AllBattlersVisible, 0xA waitbgfadein waitforvisualfinish end @@ -27166,7 +29120,7 @@ Move_DEVASTATING_DRAKE:: fadetobg BG_SKY invisible ANIM_ATTACKER invisible ANIM_TARGET - createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA + createvisualtask AnimTask_AllBattlersInvisibleExceptAttackerAndTarget, 0xA waitbgfadeout createvisualtask AnimTask_StartSlidingBg, 0x5, 0x0, 0x1000, 0x0, 0xffff waitbgfadein @@ -27267,7 +29221,7 @@ DevastatingDrakeUniversalEnding: waitforvisualfinish createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BATTLERS, 0x2, 0x0, 0x0, 0x0 @ reset all colours waitforvisualfinish - createvisualtask AnimTask_AllBanksVisible, 0xA + createvisualtask AnimTask_AllBattlersVisible, 0xA waitforvisualfinish end DevastatingDrakeFadeTargetPartner: @@ -27368,7 +29322,7 @@ Move_BLACK_HOLE_ECLIPSE:: loadspritegfx ANIM_TAG_ICE_CHUNK @blue loadspritegfx ANIM_TAG_BLACK_BALL_2 @black invisible ANIM_TARGET - createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA + createvisualtask AnimTask_AllBattlersInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call EndureEffect @@ -27487,13 +29441,13 @@ BlackHoleEclipseExplosion: delay 0x6 return ResetFromWhiteScreen: - createvisualtask AnimTask_AllBanksInvisible, 0xA + createvisualtask AnimTask_AllBattlersInvisible, 0xA waitforvisualfinish createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BATTLERS, 0x2, 0x0, 0x0, 0x7FFF @everything from white restorebg waitbgfadeout setarg 0x7 0xffff - createvisualtask AnimTask_AllBanksVisible, 0xA + createvisualtask AnimTask_AllBattlersVisible, 0xA waitbgfadein waitforvisualfinish delay 0x5 @@ -27506,7 +29460,7 @@ Move_TWINKLE_TACKLE:: loadspritegfx ANIM_TAG_SPARKLE_2 @star loadspritegfx ANIM_TAG_PINK_PETAL @pink loadspritegfx ANIM_TAG_THIN_RING @ring - createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA + createvisualtask AnimTask_AllBattlersInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish playsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER call TwinkleTacklePinkStars @@ -27553,7 +29507,7 @@ TwinkleTackleFinish: delay 0x10 restorebg delay 0x18 - createvisualtask AnimTask_AllBanksVisible, 0xA + createvisualtask AnimTask_AllBattlersVisible, 0xA waitforvisualfinish end TwinkleTacklePinkStars: @@ -27664,7 +29618,7 @@ Move_CATASTROPIKA:: loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy loadspritegfx ANIM_TAG_ROUND_SHADOW @fly invisible ANIM_TARGET - createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA + createvisualtask AnimTask_AllBattlersInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call EndureEffect @@ -27814,7 +29768,7 @@ CatastropikaFinish: createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS), 0x4, 0x10, 0x0, 0x7fff @ bg to white createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x10 @fix tgt position waitforvisualfinish - createvisualtask AnimTask_AllBanksVisible, 0xA + createvisualtask AnimTask_AllBattlersVisible, 0xA waitforvisualfinish end CatastropikaThundering: @@ -27841,7 +29795,7 @@ Move_10000000_VOLT_THUNDERBOLT:: loadspritegfx ANIM_TAG_SPARK_2 @sparks loadspritegfx ANIM_TAG_LIGHTNING @lightning invisible ANIM_TARGET - createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA + createvisualtask AnimTask_AllBattlersInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call EndureEffect @@ -28021,7 +29975,7 @@ Move_10000000_VOLT_THUNDERBOLT:: delay 0x10 createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS), 0x3, 0x10, 0x0, 0x7fff waitforvisualfinish - createvisualtask AnimTask_AllBanksVisible, 0xA + createvisualtask AnimTask_AllBattlersVisible, 0xA waitforvisualfinish end TenMillionVoltThunderboltBeamRed: @@ -28102,7 +30056,7 @@ Move_STOKED_SPARKSURFER:: loadspritegfx ANIM_TAG_ROUND_SHADOW @fly loadspritegfx ANIM_TAG_SPARK_2 @spark invisible ANIM_TARGET - createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA + createvisualtask AnimTask_AllBattlersInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER createsprite gStokedSparksurferFlySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0xd, 0x150 @@ -28199,7 +30153,7 @@ StokedSparksurferFinish: createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_TARGET | F_PAL_ATTACKER), 0x2, 0x10, 0x0, 0x5bff restorebg delay 0x18 - createvisualtask AnimTask_AllBanksVisible, 0xA + createvisualtask AnimTask_AllBattlersVisible, 0xA waitforvisualfinish end @@ -28237,8 +30191,8 @@ Move_EXTREME_EVOBOOST:: loadspritegfx ANIM_TAG_LEER @leer createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS), 0x3, 0x0, 0x10, 0x0000 waitforvisualfinish - createvisualtask AnimTask_AllBanksInvisible, 0xA - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BATTLERS, 3, 0, 0, 0 @;Remove fading on everyone + createvisualtask AnimTask_AllBattlersInvisible, 0xA + createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BATTLERS, 3, 0, 0, 0 @Remove fading on everyone waitforvisualfinish playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER createsprite gLeerSpriteTemplate, ANIM_ATTACKER, 2, 0x18, 0xfff4 @@ -28377,7 +30331,7 @@ Move_PULVERIZING_PANCAKE:: loadspritegfx ANIM_TAG_MUD_SAND @dig loadspritegfx ANIM_TAG_IMPACT @hit loadspritegfx ANIM_TAG_QUICK_GUARD_HAND @black colour - createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA + createvisualtask AnimTask_AllBattlersInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish createvisualtask AnimTask_IsTargetPlayerSide, 0x2 jumpargeq 0x7 ANIM_TARGET PulverizingPancakeOnPlayer @@ -28489,7 +30443,7 @@ Move_GENESIS_SUPERNOVA:: loadspritegfx ANIM_TAG_BLUE_ORB @reversal loadspritegfx ANIM_TAG_POISON_BUBBLE @poison bubble loadspritegfx ANIM_TAG_POISON_JAB @purple - createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA + createvisualtask AnimTask_AllBattlersInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish call SetPsychicBackground loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy @@ -28677,7 +30631,7 @@ Move_SINISTER_ARROW_RAID:: loadspritegfx ANIM_TAG_SPIRIT_ARROW @arrow loadspritegfx ANIM_TAG_LEAF @green invisible ANIM_TARGET - createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA + createvisualtask AnimTask_AllBattlersInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER createsprite gArrowRaidFlyUpSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0xd, 0x150 @@ -28814,7 +30768,7 @@ SinisterArrowRaidFinish: waitforvisualfinish createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x10, 0x00, 0x388C @ bg to nrml delay 0x5 - createvisualtask AnimTask_AllBanksVisible, 0xA + createvisualtask AnimTask_AllBattlersVisible, 0xA waitforvisualfinish end SinisterArrowRaidFlyStrike: @@ -29008,7 +30962,7 @@ Move_MALICIOUS_MOONSAULT:: call MaliciousMoonsaultFireSpin call MaliciousMoonsaultFireSpin clearmonbg ANIM_ATTACKER - createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA + createvisualtask AnimTask_AllBattlersInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER createsprite gMaliciousMoonsaultRedFlySpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xd, 0x150 @@ -29101,7 +31055,7 @@ MaliciousMoonsaultExplosion: Move_OCEANIC_OPERETTA:: - createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA + createvisualtask AnimTask_AllBattlersInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish loadspritegfx ANIM_TAG_SPOTLIGHT createvisualtask AnimTask_CreateSpotlight, 0x2 @@ -29251,7 +31205,7 @@ Move_OCEANIC_OPERETTA:: waitforvisualfinish createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x6, 0x0, 0x5da0 waitforvisualfinish - createvisualtask AnimTask_AllBanksVisible, 0xA + createvisualtask AnimTask_AllBattlersVisible, 0xA waitforvisualfinish end OceanicOperettaBuffEffect: @@ -29289,7 +31243,7 @@ OceanicOperettaExplosion: Move_SPLINTERED_STORMSHARDS:: loadspritegfx ANIM_TAG_ROCKS @rock loadspritegfx ANIM_TAG_ICICLE_SPEAR @spear - createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA + createvisualtask AnimTask_AllBattlersInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish createvisualtask AnimTask_GetLycanrocForm, 0x2 jumpargeq 0x0 0x1 SplinteredStormshardsNightForme @@ -29351,7 +31305,7 @@ SplinteredStormshardsEnd: waitforvisualfinish createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS), 0x4, 0x10, 0x0, 0x7fff waitforvisualfinish - createvisualtask AnimTask_AllBanksVisible, 0xA + createvisualtask AnimTask_AllBattlersVisible, 0xA waitforvisualfinish waitforvisualfinish end @@ -29550,7 +31504,7 @@ Move_LETS_SNUGGLE_FOREVER:: loadspritegfx ANIM_TAG_MUSIC_NOTES @music note loadspritegfx ANIM_TAG_SMALL_BUBBLES @fake tears loadspritegfx ANIM_TAG_VERTICAL_HEX @red - createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA + createvisualtask AnimTask_AllBattlersInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish createvisualtask AnimTask_RockMonBackAndForth, 0x5, 0x0, 0x2, 0x0 createsprite gSnuggleForeverHeartSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x14 @@ -29961,7 +31915,7 @@ Move_GUARDIAN_OF_ALOLA:: loadspritegfx ANIM_TAG_THIN_RING @ring loadspritegfx ANIM_TAG_MUD_SAND @dig loadspritegfx ANIM_TAG_SPEED_DUST @extremespeed - createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA + createvisualtask AnimTask_AllBattlersInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish createsprite gThinRingExpandingSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0 playsewithpan SE_SHINY, SOUND_PAN_ATTACKER @@ -30059,7 +32013,7 @@ Move_SEARING_SUNRAZE_SMASH:: loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy loadspritegfx ANIM_TAG_SPARKLE_2 @sparkles invisible ANIM_TARGET - createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA + createvisualtask AnimTask_AllBattlersInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x0, 0x0, 0xe, 0x001b playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER @@ -30271,13 +32225,13 @@ SearingSunrazeSmashCharge: delay 0x1 return ResetFromRedScreen: - createvisualtask AnimTask_AllBanksInvisible, 0xA + createvisualtask AnimTask_AllBattlersInvisible, 0xA waitforvisualfinish createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BATTLERS, 0x2, 0x0, 0x0, 0x1B @Everything from red restorebg waitbgfadeout setarg 0x7 0xffff - createvisualtask AnimTask_AllBanksVisible, 0xA + createvisualtask AnimTask_AllBattlersVisible, 0xA waitbgfadein createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x0, 0x0, 0x0, 0x33ED waitforvisualfinish @@ -30291,7 +32245,7 @@ Move_MENACING_MOONRAZE_MAELSTROM:: loadspritegfx ANIM_TAG_SHADOW_BALL @shadow ball loadspritegfx ANIM_TAG_HANDS_AND_FEET @black invisible ANIM_TARGET - createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA + createvisualtask AnimTask_AllBattlersInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x0, 0x0, 0xe, 0x40c0 playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER @@ -30639,7 +32593,7 @@ Move_SOUL_STEALING_7_STAR_STRIKE:: loadspritegfx ANIM_TAG_WISP_FIRE @will o wisp loadspritegfx ANIM_TAG_FIRE_PLUME @blast burn loadspritegfx ANIM_TAG_HANDS_AND_FEET @fist - createvisualtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget, 0xA + createvisualtask AnimTask_AllBattlersInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish setalpha 12, 8 playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_TARGET @@ -30756,7 +32710,7 @@ Move_SOUL_STEALING_7_STAR_STRIKE:: waitforvisualfinish createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BATTLERS, 0x2, 0x0, 0x0, 0x0 waitforvisualfinish - createvisualtask AnimTask_AllBanksVisible, 0xA + createvisualtask AnimTask_AllBattlersVisible, 0xA waitforvisualfinish end SoulStealingSevenStarStrikeBuffEffect: diff --git a/graphics/battle_anims/backgrounds/chloroblast.pal b/graphics/battle_anims/backgrounds/chloroblast.pal new file mode 100644 index 000000000..8d40958f4 --- /dev/null +++ b/graphics/battle_anims/backgrounds/chloroblast.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 164 255 +16 123 41 +32 164 82 +57 205 131 +82 238 172 +139 246 205 +197 255 230 +238 255 238 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/include/battle_anim.h b/include/battle_anim.h index a3677bd98..4b5471d41 100644 --- a/include/battle_anim.h +++ b/include/battle_anim.h @@ -213,7 +213,7 @@ 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[]; +extern const union AnimCmd *const gAnims_SpinningSparkle[]; // battle_anim_ground.c void AnimTask_HorizontalShake(u8 taskId); @@ -235,6 +235,7 @@ void InitStatsChangeAnimation(u8); void StartMonScrollingBgMask(u8 taskId, int unused, u16 scrollSpeed, u8 battler, bool8 includePartner, u8 numFadeSteps, u8 fadeStepDelay, u8 duration, const u32 *gfx, const u32 *tilemap, const u32 *palette); // battle_anim_effects_1.c +void AnimFalseSwipeSlice_Step3(struct Sprite *); void SetSpriteNextToMonHead(u8 battler, struct Sprite *sprite); void AnimMoveTwisterParticle(struct Sprite *sprite); void AnimParticleBurst(struct Sprite *); @@ -283,6 +284,7 @@ extern const union AnimCmd *const gIngrainRootAnimTable[]; extern const union AffineAnimCmd *const gSwiftStarAffineAnimTable[]; extern const union AnimCmd *const gMetronomeThroughtBubbleAnimTable[]; extern const union AffineAnimCmd *const gStockpileAbsorptionOrbAffineAnimTable[]; +extern const union AnimCmd *const gSlashSliceAnimTable[]; // battle_anim_effects_2.c void AnimUproarRing(struct Sprite *sprite); @@ -301,8 +303,10 @@ extern const union AffineAnimCmd *const gWaterPulseRingAffineAnimTable[]; extern const union AffineAnimCmd *const gHyperVoiceRingAffineAnimTable[]; extern const union AnimCmd *const gCoinAnimTable[]; extern const union AffineAnimCmd *const gHiddenPowerOrbAffineAnimTable[]; +extern const union AffineAnimCmd *const gBulletSeedAffineAnimTable[]; // battle_anim_effects_3.c +void AnimKnockOffStrike_Step(struct Sprite *sprite); void AnimBlackSmoke(struct Sprite *sprite); void AnimSweetScentPetal(struct Sprite *sprite); void AnimTealAlert(struct Sprite *sprite); @@ -314,6 +318,10 @@ void AnimFlatterSpotlight_Step(struct Sprite *sprite); extern const union AnimCmd *const gOpeningEyeAnimTable[]; extern const union AnimCmd *const gEclipsingOrbAnimTable[]; extern const union AffineAnimCmd *const gSpotlightAffineAnimTable[]; +extern const union AffineAnimCmd *const gSmokeBallEscapeCloudAffineAnimTable[]; +extern void AnimSmokeBallEscapeCloud(struct Sprite *sprite); +extern const union AffineAnimCmd *const gKnockOffStrikeAffineAnimTable[]; +extern const union AnimCmd *const gKnockOffStrikeAnimTable[]; // battle_anim_water.c void AnimWaterPulseRing(struct Sprite *sprite); @@ -337,6 +345,7 @@ 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[]; +extern const union AnimCmd *const gAnims_FallingFeather[]; // battle_anim_poison.c void AnimSludgeBombHitParticle(struct Sprite *); @@ -352,6 +361,7 @@ void AnimGhostStatusSprite(struct Sprite *sprite); void AnimShadowBall(struct Sprite *sprite); void AnimTask_GrudgeFlames_Step(u8 taskId); extern const union AffineAnimCmd *const gAffineAnims_ShadowBall[]; +extern const union AnimCmd *const gAnims_GrudgeFlame[]; // battle_anim_psychic.c extern const union AffineAnimCmd *const gAffineAnims_PsychoBoostOrb[]; @@ -474,6 +484,7 @@ void AnimRaiseSprite(struct Sprite *sprite); void AnimFallingRock_Step(struct Sprite *sprite); void AnimFlyingSandCrescent(struct Sprite *sprite); void AnimRockFragment(struct Sprite *); +void AnimRockBlastRock(struct Sprite *sprite); // battle_anim_dark.c void AnimClawSlash(struct Sprite *sprite); @@ -496,6 +507,7 @@ void AnimSwirlingSnowball_Step1(struct Sprite *sprite); extern const union AnimCmd *const gAnims_Snowball[]; extern const union AffineAnimCmd *const gAffineAnims_IceCrystalHit[]; extern const union AnimCmd *const gAnims_IceCrystalLarge[]; +extern const union AnimCmd *const gAnims_IceCrystalSmall[]; extern const union AnimCmd *const gAnims_IceBallChunk[]; extern const union AnimCmd *const gAnims_BlizzardIceCrystal[]; @@ -520,6 +532,7 @@ void AnimDragonRageFirePlume(struct Sprite *sprite); void AnimDragonFireToTarget(struct Sprite *sprite); void AnimDragonDanceOrb(struct Sprite *sprite); void AnimOverheatFlame(struct Sprite *sprite); +void AnimOutrageFlame(struct Sprite *sprite); // battle_anim_new.c void CoreEnforcerLoadBeamTarget(struct Sprite *sprite); diff --git a/include/battle_util.h b/include/battle_util.h index 79bdfaf9a..ec0c1b35b 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -212,6 +212,8 @@ bool8 IsMoveAffectedByParentalBond(u16 move, u8 battlerId); void CopyMonLevelAndBaseStatsToBattleMon(u32 battler, struct Pokemon *mon); void CopyMonAbilityAndTypesToBattleMon(u32 battler, struct Pokemon *mon); void RecalcBattlerStats(u32 battler, struct Pokemon *mon); +bool32 IsAlly(u32 battlerAtk, u32 battlerDef); + // Ability checks bool32 IsRolePlayBannedAbilityAtk(u16 ability); bool32 IsRolePlayBannedAbility(u16 ability); diff --git a/include/constants/battle_anim.h b/include/constants/battle_anim.h index dd91b42c8..60e044130 100644 --- a/include/constants/battle_anim.h +++ b/include/constants/battle_anim.h @@ -1,6 +1,8 @@ #ifndef GUARD_CONSTANTS_BATTLE_ANIM_H #define GUARD_CONSTANTS_BATTLE_ANIM_H +#include "battle_anim_scripts.h" + // Sprites start at 10000 and thus must be subtracted of 10000 to account for the true index. #define GET_TRUE_SPRITE_INDEX(i) ((i - ANIM_SPRITES_START)) @@ -505,6 +507,7 @@ #define BG_AURA_SPHERE 77 #define BG_STEEL_BEAM_OPPONENT 78 #define BG_STEEL_BEAM_PLAYER 79 +#define BG_CHLOROBLAST 80 // table ids for general animations (gBattleAnims_General) #define B_ANIM_CASTFORM_CHANGE 0 diff --git a/include/constants/battle_anim_scripts.h b/include/constants/battle_anim_scripts.h new file mode 100644 index 000000000..49184bb45 --- /dev/null +++ b/include/constants/battle_anim_scripts.h @@ -0,0 +1,28 @@ +#ifndef GUARD_CONSTANTS_BATTLE_ANIM_SCRIPTS_H +#define GUARD_CONSTANTS_BATTLE_ANIM_SCRIPTS_H + +// shell smash +#define SHELL_SMASH_STARTING_X 40 +#define SHELL_SMASH_MOVEMENT_DISTANCE 34 +#define SHELL_SMASH_SHELL_MOVE_IN_DURATION 16 +#define SHELL_SMASH_PAUSE_DURATION 48 + +// thunder cage +#define THUNDER_CAGE_BALL_TIME 0x64 + +// power shift +#define POWER_SHIFT_LEFT_X -20 +#define POWER_SHIFT_RIGHT_X 20 +#define POWER_SHIFT_DELAY 0x30 +#define POWER_SHIFT_ARC -50 + +// mysitcal power +#define MYSTICAL_POWER_RING_PAUSE 7 + +// esper wing +#define ESPER_WING_SPEED 16 + +// triple arrows +#define TRIPLE_ARROW_FLY_TIME 9 + +#endif // GUARD_CONSTANTS_BATTLE_ANIM_SCRIPTS_H diff --git a/include/graphics.h b/include/graphics.h index ad23dc67c..22a52265d 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -10111,6 +10111,7 @@ extern const u32 gBattleAnimBgPalette_GunkShot[]; extern const u32 gBattleAnimBgImage_HydroCannon[]; extern const u32 gBattleAnimBgPalette_HydroCannon[]; extern const u32 gBattleAnimBgTilemap_HydroCannon[]; +extern const u32 gBattleAnimBgPalette_Chloroblast[]; extern const u32 gBattleAnimBgImage_HydroPump[]; extern const u32 gBattleAnimBgPalette_HydroPump[]; extern const u32 gBattleAnimBgTilemap_HydroPump[]; diff --git a/src/battle_anim_dragon.c b/src/battle_anim_dragon.c index 54304732e..376fb6dd4 100644 --- a/src/battle_anim_dragon.c +++ b/src/battle_anim_dragon.c @@ -5,7 +5,6 @@ #include "trig.h" #include "constants/rgb.h" -static void AnimOutrageFlame(struct Sprite *); static void AnimDragonDanceOrb_Step(struct Sprite *); static void AnimOverheatFlame_Step(struct Sprite *); static void AnimTask_DragonDanceWaver_Step(u8); @@ -316,7 +315,7 @@ static void AnimSpinningDracoMeteor(struct Sprite *sprite) StoreSpriteCallbackInData6(sprite, AnimSpinningDracoMeteorFinish); } -static void AnimOutrageFlame(struct Sprite *sprite) +void AnimOutrageFlame(struct Sprite *sprite) { sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); diff --git a/src/battle_anim_effects_1.c b/src/battle_anim_effects_1.c index a9111bce3..7e3a6dc20 100644 --- a/src/battle_anim_effects_1.c +++ b/src/battle_anim_effects_1.c @@ -97,7 +97,6 @@ static void AnimSlashSlice(struct Sprite *); static void AnimFalseSwipeSlice(struct Sprite *); static void AnimFalseSwipeSlice_Step1(struct Sprite *); static void AnimFalseSwipeSlice_Step2(struct Sprite *); -static void AnimFalseSwipeSlice_Step3(struct Sprite *); static void AnimFalseSwipePositionedSlice(struct Sprite *); static void AnimEndureEnergy_Step(struct Sprite *); static void AnimSharpenSphere(struct Sprite *); @@ -5914,7 +5913,7 @@ static void AnimFalseSwipeSlice_Step2(struct Sprite *sprite) sprite->callback = AnimFalseSwipeSlice_Step3; } -static void AnimFalseSwipeSlice_Step3(struct Sprite *sprite) +void AnimFalseSwipeSlice_Step3(struct Sprite *sprite) { if (++sprite->data[0] > 1) { diff --git a/src/battle_anim_effects_2.c b/src/battle_anim_effects_2.c index b3aedb300..716069944 100755 --- a/src/battle_anim_effects_2.c +++ b/src/battle_anim_effects_2.c @@ -15,6 +15,7 @@ #include "util.h" #include "constants/rgb.h" #include "constants/songs.h" +#include "constants/moves.h" static void AnimCirclingFinger(struct Sprite *); static void AnimBouncingMusicNote(struct Sprite *); @@ -3358,6 +3359,12 @@ static void AnimTask_HeartsBackground_Step(u8 taskId) void AnimTask_ScaryFace(u8 taskId) { struct BattleAnimBgData animBg; + bool32 onPlayer; + + if (gAnimMoveIndex == MOVE_BITTER_MALICE) + onPlayer = GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER; + else + onPlayer = GetBattlerSide(gBattleAnimTarget) == B_SIDE_OPPONENT; SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_BLEND); SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16)); @@ -3373,7 +3380,7 @@ void AnimTask_ScaryFace(u8 taskId) GetBattleAnimBg1Data(&animBg); if (IsContest()) AnimLoadCompressedBgTilemapHandleContest(&animBg, &gBattleAnimBgTilemap_ScaryFaceContest, FALSE); - else if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_OPPONENT) + else if (onPlayer) AnimLoadCompressedBgTilemapHandleContest(&animBg, &gBattleAnimBgTilemap_ScaryFacePlayer, FALSE); else AnimLoadCompressedBgTilemapHandleContest(&animBg, &gBattleAnimBgTilemap_ScaryFaceOpponent, FALSE); diff --git a/src/battle_anim_effects_3.c b/src/battle_anim_effects_3.c index 513a992fe..9f110b958 100755 --- a/src/battle_anim_effects_3.c +++ b/src/battle_anim_effects_3.c @@ -69,7 +69,6 @@ static void AnimFlatterSpotlight(struct Sprite *); static void AnimReversalOrb_Step(struct Sprite *); static void AnimYawnCloud(struct Sprite *); static void AnimYawnCloud_Step(struct Sprite *); -static void AnimSmokeBallEscapeCloud(struct Sprite *); static void AnimFacadeSweatDrop(struct Sprite *); static void AnimRoarNoiseLine(struct Sprite *); static void AnimRoarNoiseLine_Step(struct Sprite *); @@ -87,7 +86,6 @@ static void AnimMeteorMashStar_Step(struct Sprite *sprite); static void AnimBlockX_Step(struct Sprite *); static void AnimUnusedItemBagSteal(struct Sprite *); static void AnimKnockOffStrike(struct Sprite *); -static void AnimKnockOffStrike_Step(struct Sprite *sprite); static void AnimRecycle(struct Sprite *); static void AnimRecycle_Step(struct Sprite *); static void SetPsychicBackground_Step(u8); @@ -3652,7 +3650,7 @@ static void AnimYawnCloud_Step(struct Sprite *sprite) // arg 1: initial x pixel offset // arg 2: initial y pixel offset // arg 3: time until destroyed -static void AnimSmokeBallEscapeCloud(struct Sprite *sprite) +void AnimSmokeBallEscapeCloud(struct Sprite *sprite) { sprite->data[0] = gBattleAnimArgs[3]; StartSpriteAffineAnim(sprite, gBattleAnimArgs[0]); @@ -5469,7 +5467,7 @@ static void AnimTask_TeeterDanceMovement_Step(u8 taskId) } } -static void AnimKnockOffStrike_Step(struct Sprite *sprite) +void AnimKnockOffStrike_Step(struct Sprite *sprite) { // These two cases are identical. if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER) diff --git a/src/battle_anim_electric.c b/src/battle_anim_electric.c index aee824b39..415f112d3 100644 --- a/src/battle_anim_electric.c +++ b/src/battle_anim_electric.c @@ -874,7 +874,7 @@ void AnimThunderWave(struct Sprite *sprite) sprite->x += gBattleAnimArgs[0]; sprite->y += gBattleAnimArgs[1]; - if (gAnimMoveIndex == MOVE_THUNDER_WAVE) + if (gAnimMoveIndex != MOVE_ANCHOR_SHOT) spriteId = CreateSprite(&gThunderWaveSpriteTemplate, sprite->x + 32, sprite->y, sprite->subpriority); else spriteId = CreateSprite(&gAnchorShotChainTemplate, sprite->x + 32, sprite->y, sprite->subpriority); diff --git a/src/battle_anim_flying.c b/src/battle_anim_flying.c index f595de962..8dd5a7ff7 100644 --- a/src/battle_anim_flying.c +++ b/src/battle_anim_flying.c @@ -157,7 +157,7 @@ static const union AnimCmd sAnim_FallingFeather_1[] = ANIMCMD_END, }; -static const union AnimCmd *const sAnims_FallingFeather[] = +const union AnimCmd *const gAnims_FallingFeather[] = { sAnim_FallingFeather_0, sAnim_FallingFeather_1, @@ -168,7 +168,7 @@ const struct SpriteTemplate gFallingFeatherSpriteTemplate = .tileTag = ANIM_TAG_WHITE_FEATHER, .paletteTag = ANIM_TAG_WHITE_FEATHER, .oam = &gOamData_AffineNormal_ObjNormal_32x32, - .anims = sAnims_FallingFeather, + .anims = gAnims_FallingFeather, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = AnimFallingFeather, diff --git a/src/battle_anim_ghost.c b/src/battle_anim_ghost.c index 870c83f60..3c49b0dd7 100644 --- a/src/battle_anim_ghost.c +++ b/src/battle_anim_ghost.c @@ -233,7 +233,7 @@ static const union AnimCmd sAnim_GrudgeFlame[] = ANIMCMD_JUMP(0), }; -static const union AnimCmd *const sAnims_GrudgeFlame[] = +const union AnimCmd *const gAnims_GrudgeFlame[] = { sAnim_GrudgeFlame, }; @@ -243,7 +243,7 @@ const struct SpriteTemplate gGrudgeFlameSpriteTemplate = .tileTag = ANIM_TAG_PURPLE_FLAME, .paletteTag = ANIM_TAG_PURPLE_FLAME, .oam = &gOamData_AffineOff_ObjBlend_16x32, - .anims = sAnims_GrudgeFlame, + .anims = gAnims_GrudgeFlame, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = AnimGrudgeFlame, diff --git a/src/battle_anim_ice.c b/src/battle_anim_ice.c index e6a5607b5..d4e444202 100644 --- a/src/battle_anim_ice.c +++ b/src/battle_anim_ice.c @@ -119,7 +119,7 @@ const union AnimCmd *const gAnims_IceCrystalLarge[] = sAnim_IceCrystalLarge, }; -static const union AnimCmd *const sAnims_IceCrystalSmall[] = +const union AnimCmd *const gAnims_IceCrystalSmall[] = { sAnim_IceCrystalSmall, }; @@ -166,7 +166,7 @@ const struct SpriteTemplate gIceCrystalSpiralInwardSmall = .tileTag = ANIM_TAG_ICE_CRYSTALS, .paletteTag = ANIM_TAG_ICE_CRYSTALS, .oam = &gOamData_AffineOff_ObjBlend_8x8, - .anims = sAnims_IceCrystalSmall, + .anims = gAnims_IceCrystalSmall, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = AnimIcePunchSwirlingParticle, @@ -199,7 +199,7 @@ const struct SpriteTemplate gIceBeamOuterCrystalSpriteTemplate = .tileTag = ANIM_TAG_ICE_CRYSTALS, .paletteTag = ANIM_TAG_ICE_CRYSTALS, .oam = &gOamData_AffineOff_ObjBlend_8x8, - .anims = sAnims_IceCrystalSmall, + .anims = gAnims_IceCrystalSmall, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = AnimIceBeamParticle, @@ -234,7 +234,7 @@ const struct SpriteTemplate gIceCrystalHitSmallSpriteTemplate = .tileTag = ANIM_TAG_ICE_CRYSTALS, .paletteTag = ANIM_TAG_ICE_CRYSTALS, .oam = &gOamData_AffineNormal_ObjBlend_8x8, - .anims = sAnims_IceCrystalSmall, + .anims = gAnims_IceCrystalSmall, .images = NULL, .affineAnims = gAffineAnims_IceCrystalHit, .callback = AnimIceEffectParticle, @@ -515,7 +515,7 @@ const struct SpriteTemplate gIceBallImpactShardSpriteTemplate = .tileTag = ANIM_TAG_ICE_CRYSTALS, .paletteTag = ANIM_TAG_ICE_CRYSTALS, .oam = &gOamData_AffineOff_ObjNormal_8x8, - .anims = sAnims_IceCrystalSmall, + .anims = gAnims_IceCrystalSmall, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = InitIceBallParticle, diff --git a/src/battle_anim_new.c b/src/battle_anim_new.c index 715e5b3e2..608e6ae94 100644 --- a/src/battle_anim_new.c +++ b/src/battle_anim_new.c @@ -20,8 +20,10 @@ #include "constants/items.h" #include "constants/pokemon.h" #include "battle_util.h" +#include "constants/songs.h" // function declarations +static void AnimTask_DynamaxGrowthStep(u8 taskId); static void SpriteCB_SpriteToCentreOfSide(struct Sprite *sprite); static void SpriteCB_SpriteOnMonForDuration(struct Sprite *sprite); static void SpriteCB_ToxicThreadWrap(struct Sprite *sprite); @@ -73,6 +75,32 @@ 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); +static void SpriteCB_PowerShiftBallStep(struct Sprite *sprite); +static void SpriteCB_PowerShiftBall(struct Sprite* sprite); +static void SpriteCB_HorizontalSliceStep(struct Sprite *sprite); +static void SpriteCB_HorizontalSlice(struct Sprite *sprite); +static void SpriteCB_LashOutStrike(struct Sprite* sprite); +static void AnimTask_TwinkleTackleLaunchStep(u8 taskId); +static void SpriteCB_ShellSmashShell(struct Sprite* sprite); +static void SpriteCB_ShellSmashShell_DestroyDuringFadeOut(struct Sprite* sprite); +static void SpriteCB_AnimSpriteOnTargetSideCentre(struct Sprite *sprite); +static void SpriteCB_SpriteOnMonUntilAffineAnimEnds(struct Sprite* sprite); +static void SpriteCB_MoveSpriteUpwardsForDurationStep(struct Sprite* sprite); +static void SpriteCB_MoveSpriteUpwardsForDuration(struct Sprite* sprite); +static void SpriteCB_SpriteOnMonForDurationUseY(struct Sprite *sprite); +static void SpriteCB_SurgingStrikes(struct Sprite* sprite); +static void SpriteCB_SteelRoller_Down(struct Sprite *sprite); +static void SpriteCB_SteelRoller_LeftRight(struct Sprite* sprite); +static void SpriteCB_SteelRoller(struct Sprite* sprite); +static void SpriteCB_FlippableSlash(struct Sprite* sprite); +static void SpriteCB_DragonEnergyShot(struct Sprite* sprite); +static void SpriteCB_MaxFlutterbyStep1(struct Sprite* sprite); +static void SpriteCB_MaxFlutterbyStep2(struct Sprite* sprite); +static void SpriteCB_MaxFlutterby(struct Sprite* sprite); +static void SpriteCB_GlacialLance_Step1(struct Sprite* sprite); +static void SpriteCB_GlacialLance_Step2(struct Sprite* sprite); +static void SpriteCB_GlacialLance(struct Sprite* sprite); +static void SpriteCB_TripleArrowKick(struct Sprite* sprite); // const data // general @@ -120,7 +148,7 @@ const struct SpriteTemplate gShellSmashLeftShellSpriteTemplate = .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gAffineAnims_Bite, - .callback = AnimBite + .callback = SpriteCB_LockingJaw }; const struct SpriteTemplate gShellSmashRightShellSpriteTemplate = @@ -131,7 +159,7 @@ const struct SpriteTemplate gShellSmashRightShellSpriteTemplate = .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gAffineAnims_Bite, - .callback = AnimBite + .callback = SpriteCB_LockingJaw }; const struct SpriteTemplate gShellSmashPurpleRocksSpriteTemplate = @@ -4110,6 +4138,629 @@ const struct SpriteTemplate gSteelBeamSpikeShardTemplate = .callback = AnimDirtScatter }; +// skitter smack +const struct SpriteTemplate gSkitterSmackImpactTemplate = +{ + .tileTag = ANIM_TAG_IMPACT, + .paletteTag = ANIM_TAG_RAZOR_LEAF, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_IceCrystalHit, + .callback = AnimIceEffectParticle +}; + +// triple axel +const struct SpriteTemplate gTripleAxelIceCrystalSpriteTemplate = +{ + .tileTag = ANIM_TAG_ICE_CRYSTALS, + .paletteTag = ANIM_TAG_ICE_CRYSTALS, + .oam = &gOamData_AffineOff_ObjBlend_8x8, + .anims = gAnims_IceCrystalSmall, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimDizzyPunchDuck +}; + +// dual wingbeat +static const union AffineAnimCmd sSpriteAffineAnim_WingAttackFeather[] = +{ + AFFINEANIMCMD_FRAME(0, 0, -1, 14), //Rotate a little right + AFFINEANIMCMD_FRAME(0, 0, 1, 28), //Rotate a little left + AFFINEANIMCMD_END, +}; +static const union AffineAnimCmd* const sSpriteAffineAnimTable_WingAttackFeather[] = +{ + sSpriteAffineAnim_WingAttackFeather, +}; +const struct SpriteTemplate gDualWingbeatFeatherSpriteTemplate = +{ + .tileTag = ANIM_TAG_WHITE_FEATHER, + .paletteTag = ANIM_TAG_WHITE_FEATHER, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gAnims_FallingFeather, + .images = NULL, + .affineAnims = sSpriteAffineAnimTable_WingAttackFeather, + .callback = AnimDizzyPunchDuck +}; + +// false surrender +const struct SpriteTemplate gSpriteTemplate_LargeCrossImpact = { + .tileTag = ANIM_TAG_CROSS_IMPACT, + .paletteTag = ANIM_TAG_CROSS_IMPACT, + .oam = &gOamData_AffineDouble_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sSpriteAffineAnimTable_LargeHailRock, + .callback = AnimCrossImpact +}; + +// expanding force +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 gSpriteTemplate_ExpandingForceExplode = { + .tileTag = ANIM_TAG_EXPLOSION_2, + .paletteTag = ANIM_TAG_EXPLOSION_2, + .oam = &sGeyserOam, + .anims = gExplosionAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_AnimSpriteOnTargetSideCentre +}; + +// spirit break +static const union AffineAnimCmd sSpriteAffineAnim_SpiritBreakBall[] = { + AFFINEANIMCMD_FRAME(16, 16, 0, 0), + AFFINEANIMCMD_FRAME(2, 2, 0, 50), //Grow slowly to half size + AFFINEANIMCMD_END, +}; +static const union AffineAnimCmd* const sSpriteAffineAnimTable_SpiritBreakBall[] = { + sSpriteAffineAnim_SpiritBreakBall, +}; +const struct SpriteTemplate gSpriteTemplate_SpiritBreakChargeBall = { + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .oam = &gOamData_AffineNormal_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sSpriteAffineAnimTable_SpiritBreakBall, + .callback = SpriteCB_SpriteOnMonUntilAffineAnimEnds +}; + +const struct SpriteTemplate gSpriteTemplate_SpiritBreakExplode = { + .tileTag = ANIM_TAG_EXPLOSION_2, + .paletteTag = ANIM_TAG_EXPLOSION_2, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gExplosionAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; + +// chloroblast +static const union AffineAnimCmd sSpriteAffineAnim_HydroCannonBall[] = { + AFFINEANIMCMD_FRAME(16, 16, 0, 16), //Double in size + AFFINEANIMCMD_END +}; +static const union AffineAnimCmd* const sSpriteAffineAnimTable_HydroCannonBall[] = { + sSpriteAffineAnim_HydroCannonBall, +}; +const struct SpriteTemplate gSpriteTemplate_ChloroblastShot = { + .tileTag = ANIM_TAG_HYDRO_PUMP, + .paletteTag = ANIM_TAG_HYDRO_PUMP, + .oam = &gOamData_AffineDouble_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sSpriteAffineAnimTable_HydroCannonBall, + .callback = AnimShadowBall +}; + +// steel roller +const struct SpriteTemplate gSpriteTemplate_SteelRoller = { + .tileTag = ANIM_TAG_STEAMROLLER, + .paletteTag = ANIM_TAG_STEAMROLLER, + .oam = &gOamData_AffineOff_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_SteelRoller +}; + +// scale shot +const struct SpriteTemplate gSpriteTemplate_ScaleShotScale = { + .tileTag = ANIM_TAG_SHELL_RIGHT, + .paletteTag = ANIM_TAG_SHELL_RIGHT, + .oam = &gOamData_AffineNormal_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_BasicRock, + .callback = AnimRockBlastRock +}; + +// meteor beam +const struct SpriteTemplate gSpriteTemplate_MeteorBeamRock = { + .tileTag = ANIM_TAG_ROCKS, + .paletteTag = ANIM_TAG_ROCKS, + .oam = &gOamData_AffineDouble_ObjNormal_32x32, + .anims = gAnims_FlyingRock, + .images = NULL, + .affineAnims = sSpriteAffineAnimTable_HydroCannonBall, + .callback = AnimShadowBall +}; + +// burning jealousy +const struct SpriteTemplate gSpriteTemplate_BurningJealousyFireBuff = { + .tileTag = ANIM_TAG_SMALL_EMBER, + .paletteTag = ANIM_TAG_SMALL_EMBER, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gAnims_FireBlastCross, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_MoveSpriteUpwardsForDuration +}; +const struct SpriteTemplate gSpriteTemplate_BurningJealousyEmit = { + .tileTag = ANIM_TAG_SMALL_EMBER, + .paletteTag = ANIM_TAG_SMALL_EMBER, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gAnims_FireBlastCross, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimOutrageFlame +}; + +// lash out +const struct SpriteTemplate gSpriteTemplate_LashOutStrike = { + .tileTag = ANIM_TAG_SLAM_HIT_2, + .paletteTag = ANIM_TAG_SLAM_HIT_2, + .oam = &gOamData_AffineNormal_ObjNormal_64x64, + .anims = gKnockOffStrikeAnimTable, + .images = NULL, + .affineAnims = gKnockOffStrikeAffineAnimTable, + .callback = SpriteCB_LashOutStrike +}; + +// corrosize gas +const struct SpriteTemplate gSpriteTemplate_CorrosiveGasSmoke = { + .tileTag = ANIM_TAG_PINK_CLOUD, + .paletteTag = ANIM_TAG_PINK_CLOUD, + .oam = &gOamData_AffineDouble_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSmokeBallEscapeCloudAffineAnimTable, + .callback = AnimSmokeBallEscapeCloud +}; + +// flip turn +const struct SpriteTemplate gSpriteTemplate_FlipTurnThere = { + .tileTag = ANIM_TAG_HYDRO_PUMP, + .paletteTag = ANIM_TAG_HYDRO_PUMP, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_ShadowBall, + .callback = AnimShadowBall +}; +const struct SpriteTemplate gSpriteTemplate_FlipTurnBack = { + .tileTag = ANIM_TAG_HYDRO_PUMP, + .paletteTag = ANIM_TAG_HYDRO_PUMP, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_ShadowBall, + .callback = AnimAbsorptionOrb +}; + +// wicked blow +static const union AffineAnimCmd sSpriteAffineAnim_DrainPunchFist[] = { + AFFINEANIMCMD_FRAME(256, 256, 0, 1), //Double sprite size + AFFINEANIMCMD_FRAME(-32, -32, 0, 8), + AFFINEANIMCMD_END, +}; +static const union AffineAnimCmd* const sSpriteAffineAnimTable_DrainPunchFist[] = { + sSpriteAffineAnim_DrainPunchFist, +}; + +const struct SpriteTemplate gSpriteTemplate_WickedBlowFist = { + .tileTag = ANIM_TAG_HANDS_AND_FEET, + .paletteTag = ANIM_TAG_HANDS_AND_FEET, + .oam = &gOamData_AffineDouble_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sSpriteAffineAnimTable_DrainPunchFist, + .callback = SpriteCB_SpriteOnMonForDurationUseY +}; +const struct SpriteTemplate gSpriteTemplate_WickedBlowBlackStars = { + .tileTag = ANIM_TAG_PAIN_SPLIT, + .paletteTag = ANIM_TAG_HANDS_AND_FEET, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimDizzyPunchDuck +}; +const struct SpriteTemplate gSpriteTemplate_WickedBlowRedStars = { + .tileTag = ANIM_TAG_PAIN_SPLIT, + .paletteTag = ANIM_TAG_PAIN_SPLIT, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimDizzyPunchDuck +}; + +// surging strikes +static const union AnimCmd sAnimCmdSurgingStrike[] = { + //Only tthe first three frames of the animation + ANIMCMD_FRAME(64, 4), + ANIMCMD_FRAME(48, 4), + ANIMCMD_FRAME(32, 4), + ANIMCMD_END, +}; +static const union AnimCmd *const sAnimCmdTable_SurgingStrike[] = { + sAnimCmdSurgingStrike, +}; +const struct SpriteTemplate gSpriteTemplate_SurgingStrikesImpact = { + .tileTag = ANIM_TAG_IMPACT_2, + .paletteTag = ANIM_TAG_IMPACT_2, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = sAnimCmdTable_SurgingStrike, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_SurgingStrikes +}; + +// dragon energy +const struct SpriteTemplate gSpriteTemplate_DragonEnergyShot = { + .tileTag = ANIM_TAG_HYDRO_PUMP, + .paletteTag = ANIM_TAG_HYDRO_PUMP, + .oam = &gOamData_AffineDouble_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sSpriteAffineAnimTable_HydroCannonBall, + .callback = SpriteCB_DragonEnergyShot +}; + +// fiery wrath +const struct SpriteTemplate gSpriteTemplate_FieryWrathGeyser = { + .tileTag = ANIM_TAG_PURPLE_RING, + .paletteTag = ANIM_TAG_PURPLE_RING, + .oam = &gOamData_AffineDouble_ObjNormal_16x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_ShadowBall, + .callback = SpriteCB_Geyser +}; + +// glacial lance +static const union AffineAnimCmd sSpriteAffineAnim_GlacialLance_Grow[] = { + AFFINEANIMCMD_FRAME(0x20, 0x20, 0, 0), + AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 30), //Double sprite size + AFFINEANIMCMD_END, +}; +static const union AffineAnimCmd sSpriteAffineAnim_GlacialLance_OnFoe[] = { + AFFINEANIMCMD_FRAME(256, 256, 0, 1), //Double sprite size + AFFINEANIMCMD_FRAME(0, 0, -8, 4), //Rotate 45 degrees right + AFFINEANIMCMD_END, +}; +static const union AffineAnimCmd sSpriteAffineAnim_GlacialLance_OnPlayer[] = { + AFFINEANIMCMD_FRAME(256, 256, 0, 1), //Double sprite size + AFFINEANIMCMD_FRAME(0, 0, 24, 4), //Rotate 135 degrees left + AFFINEANIMCMD_END, +}; +static const union AffineAnimCmd* const sSpriteAffineAnimTable_GlacialLance[] = { + sSpriteAffineAnim_GlacialLance_Grow, + sSpriteAffineAnim_GlacialLance_OnFoe, + sSpriteAffineAnim_GlacialLance_OnPlayer, +}; +const struct SpriteTemplate gSpriteTemplate_GlacialLance = { + .tileTag = ANIM_TAG_ICICLE_SPEAR, + .paletteTag = ANIM_TAG_ICICLE_SPEAR, + .oam = &gOamData_AffineDouble_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sSpriteAffineAnimTable_GlacialLance, + .callback = SpriteCB_GlacialLance +}; + +// eerie spell +static const struct OamData sOamData_EerieSpellFlame = { + .y = 0, + .affineMode = ST_OAM_AFFINE_NORMAL, + .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(32x16), + .x = 0, + .size = SPRITE_SIZE(32x16), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; +const struct SpriteTemplate gSpriteTemplate_EerieSpellFlame = { + .tileTag = ANIM_TAG_PURPLE_FLAME, + .paletteTag = ANIM_TAG_PURPLE_FLAME, + .oam = &sOamData_EerieSpellFlame, + .anims = gAnims_GrudgeFlame, + .images = NULL, + .affineAnims = gAffineAnims_ShadowBall, + .callback = AnimNeedleArmSpike +}; + + +//// GEN 9 +// Psyshield bash +const struct SpriteTemplate gSpriteTemplate_PsyshieldBashHit = { + .tileTag = ANIM_TAG_IMPACT, + .paletteTag = ANIM_TAG_WATER_GUN, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_HitSplat, + .callback = AnimHitSplatBasic +}; + +// power shift +const struct SpriteTemplate gSpriteTemplate_PowerShiftOffenseBall = { + .tileTag = ANIM_TAG_BLUEGREEN_ORB, + .paletteTag = ANIM_TAG_RED_HEART, + .oam = &gOamData_AffineDouble_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sSpriteAffineAnimTable_LargeHailRock, + .callback = SpriteCB_PowerShiftBall +}; +const struct SpriteTemplate gSpriteTemplate_PowerShiftDefenseBall = { + .tileTag = ANIM_TAG_BLUEGREEN_ORB, + .paletteTag = ANIM_TAG_BLUEGREEN_ORB, + .oam = &gOamData_AffineDouble_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sSpriteAffineAnimTable_LargeHailRock, + .callback = SpriteCB_PowerShiftBall +}; + +// stone axe +static const union AnimCmd sAnimCmdFlippedX[] = { + ANIMCMD_FRAME(0, 1, .hFlip = TRUE), + ANIMCMD_END, +}; +static const union AnimCmd *const sAnimCmdTable_FlippedX[] = { + sAnimCmdFlippedX, +}; +const struct SpriteTemplate gSpriteTemplate_StoneAxeSlash = { + .tileTag = ANIM_TAG_SLAM_HIT_2, + .paletteTag = ANIM_TAG_SLAM_HIT_2, + .oam = &gOamData_AffineOff_ObjNormal_64x64, + .anims = sAnimCmdTable_FlippedX, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_HorizontalSlice, +}; + +// springtide storm +const struct SpriteTemplate gSpriteTemplate_SpringtideHeart = { + .tileTag = ANIM_TAG_RED_HEART, + .paletteTag = ANIM_TAG_RED_HEART, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimParticleInVortex +}; + +// mystical power +const struct SpriteTemplate gSpriteTemplate_VioletMind = { // also psystrike + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineDouble_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gThinRingShrinkingAffineAnimTable, + .callback = AnimSpriteOnMonPos +}; +static const union AffineAnimCmd sSpriteAffineAnim_MysticalPowerRing[] = { + AFFINEANIMCMD_FRAME(16, 16, 0, 0), //Start small + AFFINEANIMCMD_FRAME(16, 16, 0, 15), //Grow sprite + AFFINEANIMCMD_END, +}; +static const union AffineAnimCmd* const sSpriteAffineAnimTable_MysticalPowerRing[] = { + sSpriteAffineAnim_MysticalPowerRing, +}; +const struct SpriteTemplate gSpriteTemplate_MysticalPowerRing = { + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_HYDRO_PUMP, + .oam = &gOamData_AffineNormal_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sSpriteAffineAnimTable_MysticalPowerRing, + .callback = AnimHitSplatBasic +}; + +// mountain gale +const struct SpriteTemplate gSpriteTemplate_MountainGaleRock = { + .tileTag = ANIM_TAG_ROCKS, + .paletteTag = ANIM_TAG_DRAGON_ASCENT_FOE, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gAnims_FlyingRock, + .images = NULL, + .affineAnims = gBulletSeedAffineAnimTable, + .callback = AnimMissileArc +}; + +// bleakwind storm +const struct SpriteTemplate gSpriteTemplate_BleakwindIce = { + .tileTag = ANIM_TAG_ICE_CRYSTALS, + .paletteTag = ANIM_TAG_ICE_CRYSTALS, + .oam = &gOamData_AffineOff_ObjNormal_8x16, + .anims = gAnims_IceCrystalLarge, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimParticleInVortex +}; + +// headlong rush +const struct SpriteTemplate gSpriteTemplate_HeadlongRushImpact = { + .tileTag = ANIM_TAG_IMPACT, + .paletteTag = ANIM_TAG_IMPACT, + .oam = &gOamData_AffineDouble_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sSpriteAffineAnimTable_DrainPunchFist, + .callback = AnimHitSplatBasic +}; +const struct SpriteTemplate gSpriteTemplate_MaxQuakeDirtGeyser = { + .tileTag = ANIM_TAG_MUD_SAND, + .paletteTag = ANIM_TAG_MUD_SAND, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimMudSportDirt +}; +const struct SpriteTemplate gSpriteTemplate_MaxQuakeRockGeyser = { + .tileTag = ANIM_TAG_ROCKS, + .paletteTag = ANIM_TAG_ROCKS, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gAnims_FlyingRock, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_Geyser +}; + +// barb barrage +const struct SpriteTemplate gSpriteTemplate_BarbBarrage = { + .tileTag = ANIM_TAG_SPIKES, + .paletteTag = ANIM_TAG_SHADOW_BALL, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimOutrageFlame +}; + +// esper wing +const struct SpriteTemplate gSpriteTemplate_WingAttackFeather = { // TODo update wing attaack anim + .tileTag = ANIM_TAG_WHITE_FEATHER, + .paletteTag = ANIM_TAG_WHITE_FEATHER, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gAnims_FallingFeather, + .images = NULL, + .affineAnims = sSpriteAffineAnimTable_WingAttackFeather, + .callback = AnimDizzyPunchDuck +}; + +// triple arrows +const struct SpriteTemplate gSpriteTemplate_TripleArrowKick = { + .tileTag = ANIM_TAG_HANDS_AND_FEET, + .paletteTag = ANIM_TAG_HANDS_AND_FEET, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gAnims_HandsAndFeet, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_TripleArrowKick +}; + +// infernal parade +static const union AffineAnimCmd sSpriteAffineAnim_FlutterbyPulsate[] = { + AFFINEANIMCMD_FRAME(16, 16, 0, 4), + AFFINEANIMCMD_FRAME(-16, -16, 0, 4), + AFFINEANIMCMD_JUMP(0), +}; +static const union AffineAnimCmd sSpriteAffineAnim_FlutterbyGrow[] = { + AFFINEANIMCMD_FRAME(8, 8, 0, 16), //Double in size + AFFINEANIMCMD_END, +}; +static const union AffineAnimCmd* const sSpriteAffineAnimTable_Flutterby[] = { + sSpriteAffineAnim_FlutterbyPulsate, + sSpriteAffineAnim_FlutterbyGrow, +}; +const struct SpriteTemplate gSpriteTemplate_InfernalParadeFlame = { + .tileTag = ANIM_TAG_PURPLE_FLAME, + .paletteTag = ANIM_TAG_PURPLE_FLAME, + .oam = &gOamData_AffineDouble_ObjBlend_32x16, + .anims = gAnims_GrudgeFlame, + .images = NULL, + .affineAnims = sSpriteAffineAnimTable_Flutterby, + .callback = SpriteCB_MaxFlutterby +}; + +// ceaseless edge +const struct SpriteTemplate gSpriteTemplate_CeaselessEdgeSlash = { + .tileTag = ANIM_TAG_SLASH, + .paletteTag = ANIM_TAG_SLASH, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gSlashSliceAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_FlippableSlash +}; + +// wildbolt storm +static const union AnimCmd sAnimCmdAnimatedSpark2[] = { + ANIMCMD_FRAME((16 * 16) / (8 * 8) * 0, 8), + ANIMCMD_FRAME((16 * 16) / (8 * 8) * 1, 8), + ANIMCMD_FRAME((16 * 16) / (8 * 8) * 2, 8), + ANIMCMD_JUMP(0) +}; +static const union AnimCmd *const sAnimCmdTable_AnimatedSpark2[] = { + sAnimCmdAnimatedSpark2, +}; +const struct SpriteTemplate gSpriteTemplate_WildboltStormSpark = { + .tileTag = ANIM_TAG_SPARK_2, + .paletteTag = ANIM_TAG_SPARK_2, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = sAnimCmdTable_AnimatedSpark2, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimParticleInVortex +}; + +// lunar blessing/dance +const struct SpriteTemplate gSpriteTemplate_LunarDanceRing = { + .tileTag = ANIM_TAG_GUARD_RING, + .paletteTag = ANIM_TAG_SMALL_EMBER, + .oam = &gOamData_AffineDouble_ObjBlend_64x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gGuardRingAffineAnimTable, + .callback = SpriteCB_SurroundingRing +}; + +// take heart +const struct SpriteTemplate gSpriteTemplate_TakeHeartFallingHeart = { + .tileTag = ANIM_TAG_RED_HEART, + .paletteTag = ANIM_TAG_RED_HEART, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_FallingObject +}; +const struct SpriteTemplate gSpriteTemplate_TakeHeartRing = { + .tileTag = ANIM_TAG_GUARD_RING, + .paletteTag = ANIM_TAG_RED_HEART, + .oam = &gOamData_AffineDouble_ObjBlend_64x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gGuardRingAffineAnimTable, + .callback = SpriteCB_SurroundingRing +}; + +// bitter malice +const struct SpriteTemplate gSpriteTemplate_BitterMaliceRing = { + .tileTag = ANIM_TAG_PURPLE_RING, + .paletteTag = ANIM_TAG_PURPLE_RING, + .oam = &gOamData_AffineDouble_ObjNormal_16x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_ShadowBall, + .callback = AnimParticleInVortex +}; + // Z MOVES //activate const struct SpriteTemplate gZMoveSymbolSpriteTemplate = @@ -5078,7 +5729,7 @@ const struct SpriteTemplate gTargetTwinkleSpriteTemplate = .tileTag = ANIM_TAG_SPARKLE_4, .paletteTag = ANIM_TAG_SPARKLE_4, .oam = &gOamData_AffineOff_ObjNormal_32x32, - .anims = sAnims_SpinningSparkle, + .anims = gAnims_SpinningSparkle, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCB_TwinkleOnBattler @@ -5134,7 +5785,7 @@ const struct SpriteTemplate gTwinkleTackleTwinkleSpriteTemplate = .tileTag = ANIM_TAG_SPARKLE_4, .paletteTag = ANIM_TAG_SPARKLE_4, .oam = &gOamData_AffineOff_ObjNormal_32x32, - .anims = sAnims_SpinningSparkle, + .anims = gAnims_SpinningSparkle, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCB_TwinkleOnBattler @@ -5524,7 +6175,7 @@ const struct SpriteTemplate gPulverizingPancakeRedDetectSpriteTemplate = .tileTag = ANIM_TAG_SPARKLE_4, .paletteTag = ANIM_TAG_VERTICAL_HEX, .oam = &gOamData_AffineOff_ObjNormal_32x32, - .anims = sAnims_SpinningSparkle, + .anims = gAnims_SpinningSparkle, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = AnimSpinningSparkle @@ -6088,7 +6739,7 @@ const struct SpriteTemplate gSnuggleForeverEyesSpriteTemplate = .tileTag = ANIM_TAG_SPARKLE_4, .paletteTag = ANIM_TAG_VERTICAL_HEX, .oam = &gOamData_AffineOff_ObjNormal_32x32, - .anims = sAnims_SpinningSparkle, + .anims = gAnims_SpinningSparkle, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = AnimSpinningSparkle @@ -6419,14 +7070,6 @@ const struct SpriteTemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate = .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, @@ -6532,44 +7175,6 @@ void AnimTask_IsTargetPartner(u8 taskId) 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; @@ -7593,7 +8198,113 @@ static void SpriteCB_GeyserTarget(struct Sprite *sprite) sprite->callback = AnimMudSportDirtRising; } -// Anim Tasks Functions +//// Anim Tasks Functions +void AnimTask_IsAttackerPlayerSide(u8 taskId) +{ + if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT) + gBattleAnimArgs[7] = 0; + else + gBattleAnimArgs[7] = 1; + + DestroyAnimVisualTask(taskId); +} + +static void AnimTask_FadeOutParticlesHelper(u8 taskId) +{ + if (gTasks[taskId].data[1] == 0) //Target reached + { + DestroyAnimVisualTask(taskId); + } + else if (gTasks[taskId].data[4]++ >= gTasks[taskId].data[3]) + { + gTasks[taskId].data[4] = 0; //Reset timer + gTasks[taskId].data[1]--; + gTasks[taskId].data[2]++; + SetGpuReg(REG_OFFSET_BLDALPHA, (gTasks[taskId].data[2] * 256) + gTasks[taskId].data[1]); + } +} + +void AnimTask_FadeOutParticles(u8 taskId) +{ + u8 existingTaskId = FindTaskIdByFunc(AnimTask_FadeOutParticlesHelper); + if (existingTaskId != 0xFF) + DestroyAnimVisualTask(existingTaskId); //Can only have one of these tasks going at a time + + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 0)); + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL); //Blend sprites out + gTasks[taskId].data[1] = 16; + gTasks[taskId].data[2] = 0; + gTasks[taskId].data[3] = gBattleAnimArgs[0]; //Delay + gTasks[taskId].data[4] = 0; //Delay Timer + gTasks[taskId].func = AnimTask_FadeOutParticlesHelper; +} + + +static const union AffineAnimCmd sShellSmashShrinkAffineAnimCmds[] = +{ + AFFINEANIMCMD_FRAME(64, 64, 0, 16), //Flatten + AFFINEANIMCMD_FRAME(0, 0, 0, 48), + AFFINEANIMCMD_FRAME(-64, -64, 0, 16), + AFFINEANIMCMD_END, +}; +//Shrinks the attacker, pauses, then scales up the attacker again +void AnimTask_ShellSmashShrinkAttacker(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + u8 spriteId; + + task->data[0] = gBattleAnimArgs[0]; //Pause + spriteId = GetAnimBattlerSpriteId(ANIM_TARGET); + PrepareAffineAnimInTaskData(task, spriteId, sShellSmashShrinkAffineAnimCmds); + task->func = AnimTask_DynamaxGrowthStep; +} + +static void AnimTask_DynamaxGrowthStep(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + if (!RunAffineAnimFromTaskData(task)) + DestroyAnimVisualTask(taskId); +} + +void AnimTask_AllBattlersInvisible(u8 taskId) +{ + u32 i, spriteId; + for (i = 0; i < gBattlersCount; i++) + { + spriteId = gBattlerSpriteIds[i]; + if (spriteId != 0xFF) + gSprites[spriteId].invisible = TRUE; + } + DestroyAnimVisualTask(taskId); +} + +void AnimTask_AllBattlersVisible(u8 taskId) +{ + u32 i, spriteId; + for (i = 0; i < gBattlersCount; ++i) + { + spriteId = gBattlerSpriteIds[i]; + if (IsBattlerSpriteVisible(i) && spriteId != 0xFF) + gSprites[spriteId].invisible = FALSE; + } + + DestroyAnimVisualTask(taskId); +} + +void AnimTask_AllBattlersInvisibleExceptAttackerAndTarget(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); +} + #define tSpriteId data[0] #define tTimer data[1] #define tInitialXPos data[2] @@ -7900,3 +8611,467 @@ void AnimTask_AffectionHangedOn(u8 taskId) gBattleAnimArgs[0] = GetBattlerFriendshipScore(gBattleAnimTarget); DestroyAnimVisualTask(taskId); } + + +//Launches the stat ball for Power Shift +//arg 0: X starting offset +//arg 1: Y starting offset +//arg 2: X finishing offset +//arg 3: Y finishing offset +//arg 4: Duration +//arg 5: Wave Amplitude +static void SpriteCB_PowerShiftBall(struct Sprite* sprite) +{ + InitSpritePosToAnimAttacker(sprite, TRUE); + + if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT) + gBattleAnimArgs[2] *= -1; //Flip X + + sprite->data[0] = gBattleAnimArgs[4]; //Duration + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + gBattleAnimArgs[2]; //Target X + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3]; //Target Y + sprite->data[5] = gBattleAnimArgs[5]; //Wave Amplitude + + InitAnimArcTranslation(sprite); + sprite->callback = SpriteCB_PowerShiftBallStep; +} + +static void SpriteCB_PowerShiftBallStep(struct Sprite* sprite) // Also used by Triple Arrows +{ + if (TranslateAnimHorizontalArc(sprite)) + DestroySpriteAndMatrix(sprite); +} + +//Creates a sprite that moves left or right along the target. +//arg 0: Initial x-pixel offset +//arg 1: Initial y-pixel offset +//arg 2: Slice distance +//arg 3: Speed +//arg 4: direction +static void SpriteCB_HorizontalSlice(struct Sprite *sprite) +{ + sprite->x2 = gBattleAnimArgs[0]; + sprite->y2 = gBattleAnimArgs[1]; + + sprite->data[0] = gBattleAnimArgs[2]; //Slice distance + sprite->data[1] = gBattleAnimArgs[3]; //Slice speed + sprite->data[2] = gBattleAnimArgs[4]; //Slice direction + sprite->data[3] = 0; //Timer + + sprite->callback = SpriteCB_HorizontalSliceStep; +} + +void SpriteCB_HorizontalSliceStep(struct Sprite *sprite) +{ + if (sprite->data[2] == 1) //Move left + sprite->x2 -= sprite->data[1]; + else + sprite->x2 += sprite->data[1]; + + sprite->data[3] += sprite->data[1]; + + if (sprite->data[3] >= sprite->data[0]) + DestroySpriteAndMatrix(sprite); +} + +//Creates the slam hit for LashOut +//arg 0: initial x pixel offset +//arg 1: initial y pixel offset +//arg 2: flip +static void SpriteCB_LashOutStrike(struct Sprite* sprite) +{ + bool8 flip = GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER; + + if (gBattleAnimArgs[2]) + flip ^= 1; + + sprite->data[0] = 11; + + if (flip) + { + sprite->x -= gBattleAnimArgs[0]; + sprite->data[0] *= -1; + StartSpriteAffineAnim(sprite, 1); + } + else + { + sprite->x += gBattleAnimArgs[0]; + } + + sprite->y += gBattleAnimArgs[1]; + sprite->data[1] = 192; + sprite->callback = AnimKnockOffStrike_Step; +} + +//Moves the shells towards the attacker and leaves them there until they fade out +//arg 0: Initial x-pos +//arg 1: Final x-pos +//arg 2: Movement duration +//arg 3: Affine anim +static void SpriteCB_ShellSmashShell(struct Sprite* sprite) +{ + //Init Position + sprite->x = GetBattlerSpriteCoord2(gBattleAnimAttacker, BATTLER_COORD_X_2) + gBattleAnimArgs[0]; + sprite->y = GetBattlerSpriteCoord2(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + 2; //2 to slightly encompass the entire sprite + + //Prepare linear movement + sprite->data[0] = gBattleAnimArgs[2]; //Duration + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + gBattleAnimArgs[1]; + sprite->data[4] = sprite->y; + sprite->callback = StartAnimLinearTranslation; + StoreSpriteCallbackInData6(sprite, SpriteCB_ShellSmashShell_DestroyDuringFadeOut); + + //Rotate properly + StartSpriteAffineAnim(sprite, gBattleAnimArgs[3]); +} + +static void SpriteCB_ShellSmashShell_DestroyDuringFadeOut(struct Sprite* sprite) +{ + if (GetGpuReg(REG_OFFSET_BLDALPHA) >= BLDALPHA_BLEND(0, 8)) //Fade out 1/2 done + DestroyAnimSprite(sprite); +} + +static void SpriteCB_AnimSpriteOnTargetSideCentre(struct Sprite *sprite) +{ + u8 target = LoadBattleAnimTarget(2); + + if (!sprite->data[0]) + { + if (IsAlly(gBattleAnimAttacker, target)) + { + if (IsDoubleBattle()) + InitSpritePosToAnimAttackersCentre(sprite, FALSE); + else + InitSpritePosToAnimAttacker(sprite, FALSE); + } + else + { + if (IsDoubleBattle()) + InitSpritePosToAnimTargetsCentre(sprite, FALSE); + else + InitSpritePosToAnimTarget(sprite, FALSE); + } + + sprite->data[0]++; + } + else if (sprite->animEnded || sprite->affineAnimEnded) + { + DestroySpriteAndMatrix(sprite); + } +} + +static void SpriteCB_SpriteOnMonUntilAffineAnimEnds(struct Sprite* sprite) +{ + u8 target = LoadBattleAnimTarget(0); + + if (!IsBattlerSpriteVisible(target)) + DestroyAnimSprite(sprite); + else + { + sprite->x = GetBattlerSpriteCoord(target, BATTLER_COORD_X_2); + sprite->y = GetBattlerSpriteCoord(target, BATTLER_COORD_Y_PIC_OFFSET); + StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); + sprite->callback = RunStoredCallbackWhenAffineAnimEnds; + } +} + +static void SpriteCB_SpriteOnMonForDurationUseY(struct Sprite *sprite) +{ + u8 target = LoadBattleAnimTarget(0); + + if (!IsBattlerSpriteVisible(target)) + DestroyAnimSprite(sprite); + else + { + sprite->x = GetBattlerSpriteCoord(target, BATTLER_COORD_X); + sprite->y = GetBattlerSpriteCoord(target, BATTLER_COORD_Y_PIC_OFFSET); + + sprite->x2 = gBattleAnimArgs[1]; + sprite->y2 = gBattleAnimArgs[2]; + sprite->data[0] = 0; + sprite->data[1] = gBattleAnimArgs[3]; + sprite->data[2] = gBattleAnimArgs[4]; + sprite->data[3] = 0; + sprite->callback = AnimBrickBreakWall_Step; + } +} + +//Moves a sprite upward for set amount of time +//arg 0: Bank +//arg 1: X-Offset +//arg 2: Y-Offset +//arg 3: Speed +//arg 4: Duration +static void SpriteCB_MoveSpriteUpwardsForDuration(struct Sprite* sprite) +{ + if (gBattleAnimArgs[0] == ANIM_ATTACKER) + { + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0) + gBattleAnimArgs[1]; + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + gBattleAnimArgs[2]; + } + else + { + sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 0) + gBattleAnimArgs[1]; + sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + gBattleAnimArgs[2]; + } + + sprite->data[0] = 0; + sprite->data[1] = gBattleAnimArgs[3]; //Speed + sprite->data[2] = gBattleAnimArgs[4]; //Duration + sprite->callback = SpriteCB_MoveSpriteUpwardsForDurationStep; +} + +static void SpriteCB_MoveSpriteUpwardsForDurationStep(struct Sprite* sprite) +{ + sprite->y -= sprite->data[1]; + if (sprite->data[0]++ > sprite->data[2]) + DestroyAnimSprite(sprite); +} + +//Creates arc impacts for Surging Strikes +//arg 0: initial x pixel offset (from target) +//arg 1: initial y pixel offset (from target) +//arg 2: target x pixel offset (from target) +//arg 3: target y pixel offset (from target) +//arg 4: duration +//arg 5: wave amplitude +static void SpriteCB_SurgingStrikes(struct Sprite* sprite) +{ + InitSpritePosToAnimTarget(sprite, TRUE); + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2]; //Target X + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3]; //Target Y + sprite->data[5] = gBattleAnimArgs[5]; + InitAnimArcTranslation(sprite); + sprite->callback = AnimMissileArc_Step; +} + +//Creates the moving Steel Wheel for Steel Roller +//arg 0: initial x pixel offset +//arg 1: initial y pixel offset +//arg 2: falling speed +//arg 3: horizontal distance +//arg 4: horizontal speed +static void SpriteCB_SteelRoller(struct Sprite* sprite) +{ + sprite->x = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_X); + sprite->y = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_Y); + + sprite->x2 = gBattleAnimArgs[0]; + sprite->y2 += gBattleAnimArgs[1]; + + sprite->data[4] = gBattleAnimArgs[3]; //Left/Right distance + sprite->data[5] = gBattleAnimArgs[4]; //Left/Right speed + + sprite->data[3] = gBattleAnimArgs[2]; //Falling Speed + sprite->callback = SpriteCB_SteelRoller_Down; +} + +static void SpriteCB_SteelRoller_Down(struct Sprite *sprite) +{ + sprite->y2 += sprite->data[3]; + if (sprite->y2 >= 0) + { + sprite->y2 = 0; + sprite->callback = SpriteCB_SteelRoller_LeftRight; + } +} + +static void SpriteCB_SteelRoller_LeftRight(struct Sprite* sprite) +{ + sprite->data[0] = -sprite->data[4]; //Slice distance + sprite->data[1] = sprite->data[5]; //Slice speed + sprite->callback = SpriteCB_LeftRightSliceStep0; +} + +//Creates slashes that can be flipped. +//arg 0: x pixel offset (from target) +//arg 1: y pixel offset (from target) +//arg 2: flip x +//arg 3: flip y +static void SpriteCB_FlippableSlash(struct Sprite* sprite) +{ + InitSpritePosToAnimTarget(sprite, TRUE); + + if (gBattleAnimArgs[2]) //Flip X + sprite->hFlip = TRUE; + + if (gBattleAnimArgs[3]) //Flip Y + sprite->vFlip = TRUE; + + sprite->data[0] = 0; + sprite->data[1] = 0; + StoreSpriteCallbackInData6(sprite, AnimFalseSwipeSlice_Step3); + sprite->callback = RunStoredCallbackWhenAnimEnds; +} + +//Moves the balls for Dragon Energy sideways along the target side +//arg 0: Duration +static void SpriteCB_DragonEnergyShot(struct Sprite* sprite) +{ + s16 startingX, finishingX, y; + u8 def1 = gBattleAnimTarget; + u8 def2 = BATTLE_PARTNER(def1); + + if (!IsDoubleBattle() || IsAlly(gBattleAnimAttacker, gBattleAnimTarget)) + y = GetBattlerSpriteCoord(def1, BATTLER_COORD_Y_PIC_OFFSET); + else + { + y = 0; + + if (IsBattlerSpritePresent(def1)) + y = GetBattlerSpriteCoord(def1, BATTLER_COORD_Y_PIC_OFFSET); + + if (IsBattlerSpritePresent(def2)) + y += GetBattlerSpriteCoord(def2, BATTLER_COORD_Y_PIC_OFFSET); + + if (IsBattlerSpritePresent(def1) && IsBattlerSpritePresent(def2)) //Both targets are visible + y /= 2; + } + + if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_OPPONENT) + { + startingX = 0; + finishingX = 255; + } + else + { + startingX = 255; + finishingX = 0; + } + + sprite->x = startingX; + sprite->y = y; + sprite->x2 = 0; + sprite->data[0] = gBattleAnimArgs[0]; + sprite->data[2] = finishingX; + sprite->data[4] = y; + sprite->callback = StartAnimLinearTranslation; + StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); +} + +//Moves the butterflies created in Max Flutterby +//arg 0: initial x pixel offset +//arg 1: initial y pixel offset +//arg 2: wave amplitude +static void SpriteCB_MaxFlutterby(struct Sprite* sprite) +{ + InitSpritePosToAnimAttacker(sprite, FALSE); + + sprite->data[0] = 0x10; //Speed delay + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); //Target X + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); //Target Y + sprite->data[5] = gBattleAnimArgs[2]; //Wave amplitude + + sprite->callback = SpriteCB_MaxFlutterbyStep1; +} + +//The butterflies prepare to move towards the target +static void SpriteCB_MaxFlutterbyStep1(struct Sprite* sprite) +{ + if (!FuncIsActiveTask(AnimTask_DynamaxGrowthStep)) + { + if (gAnimMoveIndex != MOVE_INFERNAL_PARADE) + PlaySE(SE_M_SAND_ATTACK); + + StartSpriteAffineAnim(sprite, 1); + InitAnimArcTranslation(sprite); + sprite->callback = SpriteCB_MaxFlutterbyStep2; + } +} + +//Destroys the butterflies when they reach the target +static void SpriteCB_MaxFlutterbyStep2(struct Sprite* sprite) +{ + sprite->invisible = FALSE; + + if (TranslateAnimHorizontalArc(sprite)) + { + if (gAnimMoveIndex == MOVE_INFERNAL_PARADE) + PlaySE(SE_M_FLAME_WHEEL2); + + DestroySpriteAndMatrix(sprite); + } +} + +//Moves the ice lance for Glacial Lance +//arg 0: initial x pixel offset (from attacker) +//arg 1: initial y pixel offset (from attacker) +//arg 2: target x pixel offset (from target) +//arg 3: target y pixel offset (from target) +//arg 4: distance moved up +//arg 5: pause in middle +//arg 6: duration to target +static void SpriteCB_GlacialLance(struct Sprite* sprite) +{ + u8 def1 = gBattleAnimTarget; + u8 def2 = BATTLE_PARTNER(def1); + + InitSpritePosToAnimAttacker(sprite, TRUE); + sprite->data[5] = gBattleAnimArgs[4]; + sprite->data[6] = gBattleAnimArgs[5]; + + sprite->data[0] = gBattleAnimArgs[6]; + + if (!IsDoubleBattle() || IsAlly(gBattleAnimAttacker, gBattleAnimTarget)) + { + sprite->data[2] = GetBattlerSpriteCoord(def1, BATTLER_COORD_X_2) + gBattleAnimArgs[2]; //Converge on target + sprite->data[4] = GetBattlerSpriteCoord(def1, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3]; + } + else + { + sprite->data[2] = (GetBattlerSpriteCoord(def1, BATTLER_COORD_X_2) + GetBattlerSpriteCoord(def2, BATTLER_COORD_X_2)) / 2 + gBattleAnimArgs[2]; //Converge on target + sprite->data[4] = (GetBattlerSpriteCoord(def1, BATTLER_COORD_Y_PIC_OFFSET) + GetBattlerSpriteCoord(def2, BATTLER_COORD_Y_PIC_OFFSET)) / 2 + gBattleAnimArgs[3]; + } + + sprite->oam.priority = 1; //Above the ice cube + sprite->callback = SpriteCB_GlacialLance_Step1; +} + +static void SpriteCB_GlacialLance_Step1(struct Sprite* sprite) +{ + if (sprite->data[7]++ >= sprite->data[5]) + { + sprite->data[7] = 0; + sprite->callback = SpriteCB_GlacialLance_Step2; + } + else + --sprite->y; //Move up +} + +static void SpriteCB_GlacialLance_Step2(struct Sprite* sprite) +{ + if (sprite->data[7]++ >= sprite->data[6]) + { + if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER) + StartSpriteAffineAnim(sprite, 2); + else + StartSpriteAffineAnim(sprite, 1); + + sprite->data[5] = 0; + sprite->data[6] = 0; + sprite->data[7] = 0; + sprite->callback = StartAnimLinearTranslation; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); + } +} + + +//Delivers a rainbow kick for Triple Arrows +//arg 0: Initial x pixel offset +//arg 1: Initial y pixel offset +//arg 2: Duration +//arg 3: Wave Amplitude +static void SpriteCB_TripleArrowKick(struct Sprite* sprite) +{ + InitSpritePosToAnimTarget(sprite, TRUE); + StartSpriteAnim(sprite, 1); //Feet + + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); //Target X + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); //Target Y + sprite->data[5] = gBattleAnimArgs[3]; + + InitAnimArcTranslation(sprite); + sprite->callback = SpriteCB_PowerShiftBallStep; //Arc until complete +} diff --git a/src/battle_anim_rock.c b/src/battle_anim_rock.c index 2257f9c04..c1dc754c1 100644 --- a/src/battle_anim_rock.c +++ b/src/battle_anim_rock.c @@ -13,7 +13,6 @@ static void AnimTask_Rollout_Step(u8 taskId); static void AnimRolloutParticle(struct Sprite *); static void AnimRockTomb(struct Sprite *); static void AnimRockTomb_Step(struct Sprite *sprite); -static void AnimRockBlastRock(struct Sprite *); static void AnimRockScatter(struct Sprite *); static void AnimRockScatter_Step(struct Sprite *sprite); static void AnimParticleInVortex_Step(struct Sprite *sprite); @@ -921,7 +920,7 @@ static void AnimRockTomb_Step(struct Sprite *sprite) } } -static void AnimRockBlastRock(struct Sprite *sprite) +void AnimRockBlastRock(struct Sprite *sprite) { if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT) StartSpriteAffineAnim(sprite, 1); diff --git a/src/battle_anim_status_effects.c b/src/battle_anim_status_effects.c index da5cd346e..b7919759f 100644 --- a/src/battle_anim_status_effects.c +++ b/src/battle_anim_status_effects.c @@ -106,7 +106,7 @@ static const union AnimCmd sAnim_SpinningSparkle[] = ANIMCMD_END }; -const union AnimCmd *const sAnims_SpinningSparkle[] = +const union AnimCmd *const gAnims_SpinningSparkle[] = { sAnim_SpinningSparkle }; @@ -116,7 +116,7 @@ const struct SpriteTemplate gSpinningSparkleSpriteTemplate = .tileTag = ANIM_TAG_SPARKLE_4, .paletteTag = ANIM_TAG_SPARKLE_4, .oam = &gOamData_AffineOff_ObjNormal_32x32, - .anims = sAnims_SpinningSparkle, + .anims = gAnims_SpinningSparkle, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = AnimSpinningSparkle, @@ -396,6 +396,36 @@ void AnimTask_FrozenIceCubeAttacker(u8 taskId) gTasks[taskId].func = AnimTask_FrozenIceCube_Step1; } +void AnimTask_CentredFrozenIceCube(u8 taskId) +{ + // same as AnimTask_FrozenIceCube but center position on target(s) + s16 x, y; + u8 spriteId; + u8 battler1 = gBattleAnimTarget; + u8 battler2 = BATTLE_PARTNER(battler1); + + if (!IsDoubleBattle() || IsAlly(gBattleAnimAttacker, gBattleAnimTarget)) + { + x = GetBattlerSpriteCoord(battler1, BATTLER_COORD_X_2); + y = GetBattlerSpriteCoord(battler1, BATTLER_COORD_Y_PIC_OFFSET); + } + else + { + x = (GetBattlerSpriteCoord(battler1, BATTLER_COORD_X_2) + GetBattlerSpriteCoord(battler2, BATTLER_COORD_X_2)) / 2; + y = (GetBattlerSpriteCoord(battler1, BATTLER_COORD_Y_PIC_OFFSET) + GetBattlerSpriteCoord(battler2, BATTLER_COORD_Y_PIC_OFFSET)) / 2; + } + + x -= 32; + y -= 36; + + 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) { diff --git a/src/battle_util.c b/src/battle_util.c index ee4e50cf3..fc5693264 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -10937,3 +10937,8 @@ u32 CalcSecondaryEffectChance(u8 battlerId, u8 secondaryEffectChance) return secondaryEffectChance; } + +bool32 IsAlly(u32 battlerAtk, u32 battlerDef) +{ + return (GetBattlerSide(battlerAtk) == GetBattlerSide(battlerDef)); +} diff --git a/src/data/battle_anim.h b/src/data/battle_anim.h index 46293e3a0..be1c7f07c 100644 --- a/src/data/battle_anim.h +++ b/src/data/battle_anim.h @@ -1987,4 +1987,5 @@ const struct BattleAnimBackground gBattleAnimBackgroundTable[] = [BG_AURA_SPHERE] = {gBattleAnimBgImage_FocusBlast, gBattleAnimBgPalette_AuraSphere, gBattleAnimBgTilemap_FocusBlast}, [BG_STEEL_BEAM_OPPONENT] = {gBattleAnimBgImage_Highspeed, gBattleAnimBgPalette_SteelBeam, gBattleAnimBgTilemap_HighspeedOpponent}, [BG_STEEL_BEAM_PLAYER] = {gBattleAnimBgImage_Highspeed, gBattleAnimBgPalette_SteelBeam, gBattleAnimBgTilemap_HighspeedPlayer}, + [BG_CHLOROBLAST] = {gBattleAnimBgImage_HydroCannon, gBattleAnimBgPalette_Chloroblast, gBattleAnimBgTilemap_HydroCannon}, }; diff --git a/src/graphics.c b/src/graphics.c index e7a0cbe64..de65ac1c1 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -1438,6 +1438,7 @@ const u32 gBattleAnimBgPalette_GunkShot[] = INCBIN_U32("graphics/battle_anims/ba const u32 gBattleAnimBgImage_HydroCannon[] = INCBIN_U32("graphics/battle_anims/backgrounds/hydro_cannon.4bpp.lz"); const u32 gBattleAnimBgPalette_HydroCannon[] = INCBIN_U32("graphics/battle_anims/backgrounds/hydro_cannon.gbapal.lz"); const u32 gBattleAnimBgTilemap_HydroCannon[] = INCBIN_U32("graphics/battle_anims/backgrounds/hydro_cannon.bin.lz"); +const u32 gBattleAnimBgPalette_Chloroblast[] = INCBIN_U32("graphics/battle_anims/backgrounds/chloroblast.gbapal.lz"); const u32 gBattleAnimBgImage_HydroPump[] = INCBIN_U32("graphics/battle_anims/backgrounds/hydro_pump.4bpp.lz"); const u32 gBattleAnimBgPalette_HydroPump[] = INCBIN_U32("graphics/battle_anims/backgrounds/hydro_pump.gbapal.lz");