From ecda59a40619e178d79d67f5570caecbe7c56344 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Thu, 20 Dec 2018 11:58:21 -0600 Subject: [PATCH] Add Poison Jab animation --- data/battle_anim_scripts.s | 49 ++++++++++++++++++++++++++ graphics/battle_anims/sprites/290.png | Bin 0 -> 282 bytes include/constants/battle_anim.h | 1 + include/graphics.h | 2 ++ src/battle_anim.c | 2 ++ src/effects_1.c | 35 ++++++++++++++++++ src/graphics.c | 3 ++ 7 files changed, 92 insertions(+) create mode 100755 graphics/battle_anims/sprites/290.png diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index fad691e397..dac93b4675 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -1386,6 +1386,7 @@ Move_ROCK_POLISH: createsprite gRockPolishStreakSpriteTemplate, ANIM_ATTACKER, 2, -21, -16 delay 2 waitforvisualfinish + playsewithpan SE_W213, SOUND_PAN_ATTACKER createsprite gRockPolishSparkleSpriteTemplate, ANIM_ATTACKER, 2, -20, 9 createsprite gRockPolishSparkleSpriteTemplate, ANIM_ATTACKER, 2, -10, -15 createsprite gRockPolishSparkleSpriteTemplate, ANIM_ATTACKER, 2, 1, 17 @@ -1409,6 +1410,54 @@ Move_ROCK_POLISH: end Move_POISON_JAB: + loadspritegfx ANIM_TAG_PURPLE_JAB + loadspritegfx ANIM_TAG_IMPACT + setalpha 12, 8 + createsprite gPoisonJabProjectileSpriteTemplate, ANIM_TARGET, 2, 3, -31, 10 + delay 2 + createsprite gPoisonJabProjectileSpriteTemplate, ANIM_TARGET, 2, -18, -25, 10 + delay 2 + createsprite gPoisonJabProjectileSpriteTemplate, ANIM_TARGET, 2, 27, 17, 10 + delay 2 + createsprite gPoisonJabProjectileSpriteTemplate, ANIM_TARGET, 2, -26, 18, 10 + delay 2 + createsprite gPoisonJabProjectileSpriteTemplate, ANIM_TARGET, 2, 10, 30, 10 + delay 2 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -7, 4, 1, 3 + playsewithpan SE_W004, SOUND_PAN_TARGET + createsprite gPoisonJabProjectileSpriteTemplate, ANIM_TARGET, 2, -17, -27, 10 + delay 2 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -4, -6, 1, 3 + playsewithpan SE_W004, SOUND_PAN_TARGET + createsprite gPoisonJabProjectileSpriteTemplate, ANIM_TARGET, 2, 2, 31, 10 + createvisualtask AnimTask_SwayMon, 5, 0, 3, 0x2000, 6, ANIM_TARGET + createvisualtask AnimTask_BlendMonInAndOut, 5, ANIM_TARGET, RGB(16, 0, 16), 12, 0, 1 + delay 2 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 6, 4, 1, 3 + playsewithpan SE_W004, SOUND_PAN_TARGET + createsprite gPoisonJabProjectileSpriteTemplate, ANIM_TARGET, 2, 15, -27, 10 + delay 2 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -6, 8, 1, 3 + playsewithpan SE_W004, SOUND_PAN_TARGET + createsprite gPoisonJabProjectileSpriteTemplate, ANIM_TARGET, 2, -31, -2, 10 + delay 2 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 12, 6, 1, 3 + playsewithpan SE_W004, SOUND_PAN_TARGET + createsprite gPoisonJabProjectileSpriteTemplate, ANIM_TARGET, 2, -26, -18, 10 + delay 2 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -6, -8, 1, 3 + playsewithpan SE_W004, SOUND_PAN_TARGET + delay 2 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 8, 1, 3 + playsewithpan SE_W004, SOUND_PAN_TARGET + delay 2 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -8, 0, 1, 3 + playsewithpan SE_W004, SOUND_PAN_TARGET + delay 2 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -7, -5, 1, 3 + playsewithpan SE_W004, SOUND_PAN_TARGET + waitforvisualfinish + blendoff end Move_DARK_PULSE: diff --git a/graphics/battle_anims/sprites/290.png b/graphics/battle_anims/sprites/290.png new file mode 100755 index 0000000000000000000000000000000000000000..2c15153b9387bad96eced0fee7988640ff00efdc GIT binary patch literal 282 zcmeAS@N?(olHy`uVBq!ia0vp^3P3Et!VDx^^%Amx6nlxMuPgf_9uYxxfpFKbWk4bE z64!{5;QX|b^2DN426rD9pfL(%sYMFLdM1UfOCAE1aFi7IxdUa4fouk^22FV&#ggvm z>&U>cv7h@-A}f$@5a1Kyx@1cCYK9MW4Da{gM1&m4F?k)@+tg;?J zj-98AV@SoEmdKI;Vst08c4J0{{R3 literal 0 HcmV?d00001 diff --git a/include/constants/battle_anim.h b/include/constants/battle_anim.h index 2f7dde697e..dea8eca1b0 100644 --- a/include/constants/battle_anim.h +++ b/include/constants/battle_anim.h @@ -297,6 +297,7 @@ #define ANIM_TAG_WHIP_HIT (ANIM_SPRITES_START + 287) #define ANIM_TAG_BLUE_RING_2 (ANIM_SPRITES_START + 288) #define ANIM_TAG_WHITE_STREAK (ANIM_SPRITES_START + 289) +#define ANIM_TAG_PURPLE_JAB (ANIM_SPRITES_START + 290) // battlers #define ANIM_ATTACKER 0 diff --git a/include/graphics.h b/include/graphics.h index 18394edeac..758879494f 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -4374,6 +4374,7 @@ extern const u32 gBattleAnimSpriteSheet_283[]; extern const u32 gBattleAnimSpriteSheet_284[]; extern const u32 gBattleAnimSpriteSheet_285[]; extern const u32 gBattleAnimSpriteSheet_289[]; +extern const u32 gBattleAnimSpriteSheet_290[]; extern const u32 gBattleAnimSpritePalette_000[]; extern const u32 gBattleAnimSpritePalette_001[]; @@ -4650,6 +4651,7 @@ extern const u32 gBattleAnimSpritePalette_286[]; extern const u32 gBattleAnimSpritePalette_287[]; extern const u32 gBattleAnimSpritePalette_288[]; extern const u32 gBattleAnimSpritePalette_289[]; +extern const u32 gBattleAnimSpritePalette_290[]; extern const u32 gBattleAnimBackgroundImage_00[]; extern const u32 gBattleAnimBackgroundImage_02[]; diff --git a/src/battle_anim.c b/src/battle_anim.c index 0e6eb0f2a7..40e214afda 100644 --- a/src/battle_anim.c +++ b/src/battle_anim.c @@ -1058,6 +1058,7 @@ const struct CompressedSpriteSheet gBattleAnimPicTable[] = {gBattleAnimSpriteSheet_056, 0x1000, ANIM_TAG_WHIP_HIT}, {gBattleAnimSpriteSheet_163, 0x0100, ANIM_TAG_BLUE_RING_2}, {gBattleAnimSpriteSheet_289, 0x1000, ANIM_TAG_WHITE_STREAK}, + {gBattleAnimSpriteSheet_290, 0x800, ANIM_TAG_PURPLE_JAB}, }; @@ -1353,6 +1354,7 @@ const struct CompressedSpritePalette gBattleAnimPaletteTable[] = {gBattleAnimSpritePalette_287, ANIM_TAG_WHIP_HIT}, {gBattleAnimSpritePalette_288, ANIM_TAG_BLUE_RING_2}, {gBattleAnimSpritePalette_289, ANIM_TAG_WHITE_STREAK}, + {gBattleAnimSpritePalette_290, ANIM_TAG_PURPLE_JAB}, }; const struct BattleAnimBackground gBattleAnimBackgroundTable[] = diff --git a/src/effects_1.c b/src/effects_1.c index 7b0946ed63..fc29fe6a28 100644 --- a/src/effects_1.c +++ b/src/effects_1.c @@ -2107,6 +2107,7 @@ const struct SpriteTemplate gPowerOrbs_Float = void AnimRockPolishStreak(struct Sprite *); void AnimRockPolishSparkle(struct Sprite *); +void AnimPoisonJabProjectile(struct Sprite *); const union AnimCmd gRockPolishStreak_AnimCmd[] = { @@ -2298,3 +2299,37 @@ void AnimRockPolishSparkle(struct Sprite *sprite) StoreSpriteCallbackInData6(sprite, move_anim_8074EE0); sprite->callback = sub_80A67D8; } + +const struct SpriteTemplate gPoisonJabProjectileSpriteTemplate = +{ + .tileTag = ANIM_TAG_PURPLE_JAB, + .paletteTag = ANIM_TAG_PURPLE_JAB, + .oam = &gUnknown_08524B14, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimPoisonJabProjectile, +}; + +// Moves a projectile towards the center of the target mon. The sprite is rotated to look +// like it's traveling along that path. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: duration +void AnimPoisonJabProjectile(struct Sprite *sprite) +{ + s16 targetXPos; + s16 targetYPos; + u16 rotation; + + sub_80A6980(sprite, TRUE); + targetXPos = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + targetYPos = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_3); + rotation = ArcTan2Neg(targetXPos - sprite->pos1.x, targetYPos - sprite->pos1.y); + sub_80A73E0(sprite, FALSE, 0x100, 0x100, rotation); + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[2] = targetXPos; + sprite->data[4] = targetYPos; + sprite->callback = StartAnimLinearTranslation; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); +} diff --git a/src/graphics.c b/src/graphics.c index bad142badf..a90a809cb8 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -568,6 +568,9 @@ const u32 gBattleAnimSpritePalette_288[] = INCBIN_U32("graphics/battle_anims/spr const u32 gBattleAnimSpriteSheet_289[] = INCBIN_U32("graphics/battle_anims/sprites/289.4bpp.lz"); const u32 gBattleAnimSpritePalette_289[] = INCBIN_U32("graphics/battle_anims/sprites/289.gbapal.lz"); +const u32 gBattleAnimSpriteSheet_290[] = INCBIN_U32("graphics/battle_anims/sprites/290.4bpp.lz"); +const u32 gBattleAnimSpritePalette_290[] = INCBIN_U32("graphics/battle_anims/sprites/290.gbapal.lz"); + const u32 gBattleAnimSpritePalette_164[] = INCBIN_U32("graphics/battle_anims/sprites/164.gbapal.lz"); const u32 gBattleAnimSpritePalette_165[] = INCBIN_U32("graphics/battle_anims/sprites/165.gbapal.lz");