diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index 58d9ddafd8..ceca0ee2d9 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -18215,10 +18215,50 @@ TeraStarstormCreateBeam:: createsprite gTeraStarstormBeamSpriteTemplate, ANIM_BATTLER, 1, 2, 0, 0, 0, 20 return +gBattleAnimMove_TachyonCutter:: + loadspritegfx ANIM_TAG_CUT + loadspritegfx ANIM_TAG_BUBBLE + createsprite gTachyonCutterSpriteTemplate, ANIM_ATTACKER, 2, 40, -32, 0 + createsprite gTachyonCutterSpriteTemplate, ANIM_ATTACKER, 2, 40, -32, 1 + playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER + waitforvisualfinish + end + +gBattleAnimMove_SaltCure:: + loadspritegfx ANIM_TAG_SALT_PARTICLE + loadspritegfx ANIM_TAG_WATER_ORB + call SaltCureEffect + call SaltCureEffect + call SaltCureEffect + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + waitforvisualfinish + call gBattleAnimGeneral_SaltCureDamage + end + +SaltCureEffect: + createsprite gSaltCureSwirlSpriteTemplate, ANIM_TARGET, 2, 0, 28, 384, 50, 8, 50, ANIM_TARGET + delay 2 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + createsprite gSaltCureSwirlSpriteTemplate, ANIM_TARGET, 2, 0, 32, 240, 40, 11, -46, ANIM_TARGET + delay 2 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + createsprite gSaltCureSwirlSpriteTemplate, ANIM_TARGET, 2, 0, 33, 416, 40, 4, 42, ANIM_TARGET + delay 2 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + createsprite gSaltCureSwirlSpriteTemplate, ANIM_TARGET, 2, 0, 31, 288, 45, 6, -42, ANIM_TARGET + delay 2 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + createsprite gSaltCureSwirlSpriteTemplate, ANIM_TARGET, 2, 0, 28, 448, 45, 11, 46, ANIM_TARGET + delay 2 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + createsprite gSaltCureSwirlSpriteTemplate, ANIM_TARGET, 2, 0, 33, 464, 50, 10, -50, ANIM_TARGET + delay 2 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + return + gBattleAnimMove_TeraBlast:: gBattleAnimMove_OrderUp:: gBattleAnimMove_GlaiveRush:: -gBattleAnimMove_SaltCure:: gBattleAnimMove_TripleDive:: gBattleAnimMove_Doodle:: gBattleAnimMove_Ruination:: @@ -18233,7 +18273,6 @@ gBattleAnimMove_MagicalTorque:: gBattleAnimMove_Psyblade:: gBattleAnimMove_MatchaGotcha:: gBattleAnimMove_MightyCleave:: -gBattleAnimMove_TachyonCutter:: gBattleAnimMove_SupercellSlam:: end @to do @@ -28927,7 +28966,41 @@ General_AffectionHangedOn_3Hearts: end gBattleAnimGeneral_SaltCureDamage:: - goto gBattleAnimStatus_Freeze + loadspritegfx ANIM_TAG_SALT_PARTICLE + createsprite gSaltCureCrystalSpriteTemplate, ANIM_TARGET, 2, -10, -10, 1 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + delay 4 + createsprite gSaltCureCrystalSpriteTemplate, ANIM_TARGET, 2, 10, 20, 1 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + delay 4 + createsprite gSaltCureCrystalSpriteTemplate, ANIM_TARGET, 2, -29, 0, 1 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + delay 4 + createsprite gSaltCureCrystalSpriteTemplate, ANIM_TARGET, 2, 29, -20, 1 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + delay 4 + createsprite gSaltCureCrystalSpriteTemplate, ANIM_TARGET, 2, -5, 10, 1 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + delay 4 + createsprite gSaltCureCrystalSpriteTemplate, ANIM_TARGET, 2, 17, -12, 1 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + delay 4 + createsprite gSaltCureCrystalSpriteTemplate, ANIM_TARGET, 2, -20, 0, 1 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + delay 4 + createsprite gSaltCureCrystalSpriteTemplate, ANIM_TARGET, 2, -15, 15, 1 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + delay 4 + createsprite gSaltCureCrystalSpriteTemplate, ANIM_TARGET, 2, 26, -5, 1 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + delay 4 + createsprite gSaltCureCrystalSpriteTemplate, ANIM_TARGET, 2, 0, 0, 1 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + delay 4 + createsprite gSaltCureCrystalSpriteTemplate, ANIM_TARGET, 2, 20, 2, 1 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + waitforvisualfinish + end gBattleAnimGeneral_Rainbow:: call RainDrops diff --git a/graphics/battle_anims/sprites/salt_particle.png b/graphics/battle_anims/sprites/salt_particle.png new file mode 100644 index 0000000000..a418f0a172 Binary files /dev/null and b/graphics/battle_anims/sprites/salt_particle.png differ diff --git a/include/constants/battle_anim.h b/include/constants/battle_anim.h index 4026a91c81..b5ccb7bf25 100644 --- a/include/constants/battle_anim.h +++ b/include/constants/battle_anim.h @@ -418,6 +418,7 @@ #define ANIM_TAG_PURPLE_CHAIN (ANIM_SPRITES_START + 404) #define ANIM_TAG_PINKVIO_ORB (ANIM_SPRITES_START + 405) #define ANIM_TAG_STARSTORM (ANIM_SPRITES_START + 406) +#define ANIM_TAG_SALT_PARTICLE (ANIM_SPRITES_START + 407) // battlers #define ANIM_ATTACKER 0 diff --git a/include/graphics.h b/include/graphics.h index 87ccadacc9..e0109f8b20 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -2895,6 +2895,8 @@ extern const u32 gBattleAnimSpriteGfx_PinkVioletOrb[]; extern const u32 gBattleAnimSpritePal_PinkVioletOrb[]; extern const u32 gBattleAnimSpriteGfx_TeraStarstormBeam[]; extern const u32 gBattleAnimSpritePal_TeraStarstormBeam[]; +extern const u32 gBattleAnimSpriteGfx_SaltParticle[]; +extern const u32 gBattleAnimSpritePal_SaltParticle[]; extern const u32 gBattleAnimBgImage_Dark[]; extern const u32 gBattleAnimBgImage_Ghost[]; diff --git a/src/battle_anim_mons.c b/src/battle_anim_mons.c index f5517366ac..718ffb0a49 100644 --- a/src/battle_anim_mons.c +++ b/src/battle_anim_mons.c @@ -1502,6 +1502,12 @@ void TranslateAnimSpriteToTargetMonLocation(struct Sprite *sprite) StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); } +// arg0: start x offset +// arg1: start y offset +// arg2: end x offset +// arg3: end y offset +// arg4: duration +// arg5: arc amplitude void AnimThrowProjectile(struct Sprite *sprite) { InitSpritePosToAnimAttacker(sprite, TRUE); diff --git a/src/battle_anim_psychic.c b/src/battle_anim_psychic.c index a9c1f0cf67..0b4b67f3b7 100644 --- a/src/battle_anim_psychic.c +++ b/src/battle_anim_psychic.c @@ -1379,3 +1379,14 @@ void AnimPsychoBoost(struct Sprite *sprite) break; } } + +const struct SpriteTemplate gTachyonCutterSpriteTemplate = +{ + .tileTag = ANIM_TAG_CUT, + .paletteTag = ANIM_TAG_BUBBLE, + .oam = &gOamData_AffineOff_ObjBlend_32x32, + .anims = gCuttingSliceAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimCuttingSlice, +}; diff --git a/src/battle_anim_rock.c b/src/battle_anim_rock.c index ec7bc535df..0aaf5f1609 100644 --- a/src/battle_anim_rock.c +++ b/src/battle_anim_rock.c @@ -1026,3 +1026,25 @@ void AnimTask_SeismicTossBgAccelerateDownAtEnd(u8 taskId) DestroyAnimVisualTask(taskId); } } + +const struct SpriteTemplate gSaltCureCrystalSpriteTemplate = +{ + .tileTag = ANIM_TAG_SALT_PARTICLE, + .paletteTag = ANIM_TAG_SALT_PARTICLE, + .oam = &gOamData_AffineNormal_ObjBlend_16x16, + .anims = gAnims_IceCrystalLarge, + .images = NULL, + .affineAnims = gAffineAnims_IceCrystalHit, + .callback = AnimIceEffectParticle, +}; + +const struct SpriteTemplate gSaltCureSwirlSpriteTemplate = +{ + .tileTag = ANIM_TAG_SALT_PARTICLE, + .paletteTag = ANIM_TAG_SALT_PARTICLE, + .oam = &gOamData_AffineNormal_ObjBlend_16x16, + .anims = gAnims_WaterMudOrb, + .images = NULL, + .affineAnims = gAffineAnims_Whirlpool, + .callback = AnimParticleInVortex, +}; diff --git a/src/data/battle_anim.h b/src/data/battle_anim.h index 5f1643f82d..ad0d2d13d8 100644 --- a/src/data/battle_anim.h +++ b/src/data/battle_anim.h @@ -1467,6 +1467,7 @@ const struct CompressedSpriteSheet gBattleAnimPicTable[] = {gBattleAnimSpriteGfx_PurpleChain, 0x1000, ANIM_TAG_PURPLE_CHAIN}, {gBattleAnimSpriteGfx_PinkVioletOrb, 0x0080, ANIM_TAG_PINKVIO_ORB}, {gBattleAnimSpriteGfx_TeraStarstormBeam, 0x200, ANIM_TAG_STARSTORM}, + {gBattleAnimSpriteGfx_SaltParticle, 0x400, ANIM_TAG_SALT_PARTICLE}, }; const struct CompressedSpritePalette gBattleAnimPaletteTable[] = @@ -1935,6 +1936,7 @@ const struct CompressedSpritePalette gBattleAnimPaletteTable[] = {gBattleAnimSpritePal_PurpleChain, ANIM_TAG_PURPLE_CHAIN}, {gBattleAnimSpritePal_PinkVioletOrb, ANIM_TAG_PINKVIO_ORB}, {gBattleAnimSpritePal_TeraStarstormBeam, ANIM_TAG_STARSTORM}, + {gBattleAnimSpritePal_SaltParticle, ANIM_TAG_SALT_PARTICLE}, }; const struct BattleAnimBackground gBattleAnimBackgroundTable[] = diff --git a/src/graphics.c b/src/graphics.c index 19b9570079..b8c95be297 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -1290,6 +1290,9 @@ const u32 gBattleAnimSpritePal_FlatRock[] = INCBIN_U32("graphics/battle_anims/sp const u32 gBattleAnimSpriteGfx_TeraStarstormBeam[] = INCBIN_U32("graphics/battle_anims/sprites/starstorm_beam.4bpp.lz"); const u32 gBattleAnimSpritePal_TeraStarstormBeam[] = INCBIN_U32("graphics/battle_anims/sprites/starstorm_beam.gbapal.lz"); +const u32 gBattleAnimSpriteGfx_SaltParticle[] = INCBIN_U32("graphics/battle_anims/sprites/salt_particle.4bpp.lz"); +const u32 gBattleAnimSpritePal_SaltParticle[] = INCBIN_U32("graphics/battle_anims/sprites/salt_particle.gbapal.lz"); + const u32 gBattleAnimUnusedPal_Unknown2[] = INCBIN_U32("graphics/battle_anims/unused/unknown_2.gbapal.lz"); #include "data/graphics/trainers.h"