diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index 012c2f5577..773057c748 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -692,26 +692,26 @@ gBattleAnims_Special:: Move_ROOST: loadspritegfx ANIM_TAG_WHITE_FEATHER loadspritegfx ANIM_TAG_BLUE_STAR - monbg ANIM_DEF_PARTNER + monbg ANIM_ATTACKER monbgprio_29 playsewithpan SE_W080, SOUND_PAN_TARGET delay 0 - createsprite gUnknown_08596388, ANIM_TARGET, 0, 0, -16, 64, 2, 104, 11304, 32, 1 + createsprite gUnknown_08596388, ANIM_ATTACKER, 0, 0, -16, 64, 2, 104, 11304, 32, 1 delay 6 - createsprite gUnknown_08596388, ANIM_TARGET, 0, 0, -16, 32, 2, 104, 11304, 32, 1 - createsprite gUnknown_08596388, ANIM_TARGET, 0, 0, -16, 0, 2, 104, 11304, 32, 1 + createsprite gUnknown_08596388, ANIM_ATTACKER, 0, 0, -16, 32, 2, 104, 11304, 32, 1 + createsprite gUnknown_08596388, ANIM_ATTACKER, 0, 0, -16, 0, 2, 104, 11304, 32, 1 delay 6 - createsprite gUnknown_08596388, ANIM_TARGET, 0, 0, -16, 224, 2, 104, 11304, 32, 1 - createsprite gUnknown_08596388, ANIM_TARGET, 0, 0, -16, 128, 2, 104, 11304, 32, 1 + createsprite gUnknown_08596388, ANIM_ATTACKER, 0, 0, -16, 224, 2, 104, 11304, 32, 1 + createsprite gUnknown_08596388, ANIM_ATTACKER, 0, 0, -16, 128, 2, 104, 11304, 32, 1 delay 6 - createsprite gUnknown_08596388, ANIM_TARGET, 0, 0, -16, 192, 2, 104, 11304, 32, 1 - createsprite gUnknown_08596388, ANIM_TARGET, 0, 0, -16, 160, 2, 104, 11304, 32, 1 + createsprite gUnknown_08596388, ANIM_ATTACKER, 0, 0, -16, 192, 2, 104, 11304, 32, 1 + createsprite gUnknown_08596388, ANIM_ATTACKER, 0, 0, -16, 160, 2, 104, 11304, 32, 1 delay 6 - createsprite gUnknown_08596388, ANIM_TARGET, 0, 0, -16, 96, 2, 104, 11304, 32, 1 + createsprite gUnknown_08596388, ANIM_ATTACKER, 0, 0, -16, 96, 2, 104, 11304, 32, 1 waitforvisualfinish + clearmonbg ANIM_ATTACKER call HealingEffect waitforvisualfinish - clearmonbg ANIM_DEF_PARTNER end Move_GRAVITY: @@ -1344,15 +1344,146 @@ Move_AURA_SPHERE: end Move_ROCK_POLISH: + loadspritegfx ANIM_TAG_WHITE_STREAK + loadspritegfx ANIM_TAG_SPARKLE_3 + setalpha 12, 8 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 1, 3, 0, 12, RGB_BLACK + waitforvisualfinish + createsprite gRockPolishStreakSpriteTemplate, ANIM_ATTACKER, 2, -10, 3 + delay 1 + createsprite gRockPolishStreakSpriteTemplate, ANIM_ATTACKER, 2, 24, -19 + delay 1 + createsprite gRockPolishStreakSpriteTemplate, ANIM_ATTACKER, 2, -28, -15 + delay 2 + createsprite gRockPolishStreakSpriteTemplate, ANIM_ATTACKER, 2, -6, -30 + delay 1 + createsprite gRockPolishStreakSpriteTemplate, ANIM_ATTACKER, 2, -20, 6 + delay 1 + createsprite gRockPolishStreakSpriteTemplate, ANIM_ATTACKER, 2, 28, 2 + delay 2 + createsprite gRockPolishStreakSpriteTemplate, ANIM_ATTACKER, 2, -14, -25 + delay 1 + createsprite gRockPolishStreakSpriteTemplate, ANIM_ATTACKER, 2, 9, -2 + delay 2 + createsprite gRockPolishStreakSpriteTemplate, ANIM_ATTACKER, 2, -1, 0 + delay 1 + createsprite gRockPolishStreakSpriteTemplate, ANIM_ATTACKER, 2, 21, 4 + delay 2 + createsprite gRockPolishStreakSpriteTemplate, ANIM_ATTACKER, 2, 28, 20 + delay 2 + createsprite gRockPolishStreakSpriteTemplate, ANIM_ATTACKER, 2, -7, 24 + delay 2 + createsprite gRockPolishStreakSpriteTemplate, ANIM_ATTACKER, 2, -11, 1 + delay 2 + createsprite gRockPolishStreakSpriteTemplate, ANIM_ATTACKER, 2, 12, -18 + delay 2 + createsprite gRockPolishStreakSpriteTemplate, ANIM_ATTACKER, 2, -21, -14 + delay 1 + createsprite gRockPolishStreakSpriteTemplate, ANIM_ATTACKER, 2, -29, 7 + delay 2 + createsprite gRockPolishStreakSpriteTemplate, ANIM_ATTACKER, 2, 15, 28 + delay 1 + 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 + delay 1 + createsprite gRockPolishSparkleSpriteTemplate, ANIM_ATTACKER, 2, -23, -16 + createsprite gRockPolishSparkleSpriteTemplate, ANIM_ATTACKER, 2, 10, -6 + delay 1 + createsprite gRockPolishSparkleSpriteTemplate, ANIM_ATTACKER, 2, -16, -7 + delay 1 + createsprite gRockPolishSparkleSpriteTemplate, ANIM_ATTACKER, 2, 22, -7 + delay 1 + createsprite gRockPolishSparkleSpriteTemplate, ANIM_ATTACKER, 2, -19, 11 + delay 1 + createsprite gRockPolishSparkleSpriteTemplate, ANIM_ATTACKER, 2, 12, 12 + delay 1 + createsprite gRockPolishSparkleSpriteTemplate, ANIM_ATTACKER, 2, 0, -17 + waitforvisualfinish + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 1, 3, 12, 0, RGB_BLACK + waitforvisualfinish + blendoff end Move_POISON_JAB: + loadspritegfx ANIM_TAG_PURPLE_JAB + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_POISON_BUBBLE + 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 + call PoisonBubblesEffect + waitforvisualfinish + blendoff end Move_DARK_PULSE: end Move_NIGHT_SLASH: + loadspritegfx ANIM_TAG_SLASH + createvisualtask AnimTask_BlendNightSlash, 2, ANIM_TARGET, 2, 0, 8, 1 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 1, 3, 0, 12, RGB_BLACK + waitforvisualfinish + createsprite gNightSlashLeftSpriteTemplate, ANIM_TARGET, 2, 1, -8, 0 + playsewithpan SE_W013, SOUND_PAN_TARGET + delay 4 + createsprite gNightSlashLeftSpriteTemplate, ANIM_TARGET, 2, 1, 8, 0 + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 8, 1 + delay 40 + createsprite gNightSlashRightSpriteTemplate, ANIM_TARGET, 2, 1, -8, 0 + createsprite gNightSlashRightSpriteTemplate, ANIM_TARGET, 2, 1, 8, 0 + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 18, 1 + playsewithpan SE_W013, SOUND_PAN_TARGET + waitforvisualfinish + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 1, 3, 12, 0, RGB_BLACK + waitforvisualfinish end Move_AQUA_TAIL: diff --git a/graphics/battle_anims/sprites/289.png b/graphics/battle_anims/sprites/289.png new file mode 100755 index 0000000000..7328ff1512 Binary files /dev/null and b/graphics/battle_anims/sprites/289.png differ diff --git a/graphics/battle_anims/sprites/290.png b/graphics/battle_anims/sprites/290.png new file mode 100755 index 0000000000..2c15153b93 Binary files /dev/null and b/graphics/battle_anims/sprites/290.png differ diff --git a/include/battle_anim.h b/include/battle_anim.h index 248e2a9f57..c494b80a45 100644 --- a/include/battle_anim.h +++ b/include/battle_anim.h @@ -204,50 +204,78 @@ u32 UnpackSelectedBattleAnimPalettes(s16); u8 GetBattlerSpriteFinal_Y(u8, u16, u8); -extern const struct OamData gUnknown_08524944; -extern const struct OamData gUnknown_08524A8C; extern const struct OamData gUnknown_08524904; -extern const struct OamData gUnknown_085249C4; extern const struct OamData gUnknown_0852490C; -extern const struct OamData gUnknown_08524934; -extern const struct OamData gUnknown_08524974; -extern const struct OamData gUnknown_0852499C; -extern const struct OamData gUnknown_085249CC; extern const struct OamData gUnknown_08524914; -extern const struct OamData gUnknown_0852496C; -extern const struct OamData gUnknown_08524A34; -extern const struct OamData gUnknown_08524A3C; -extern const struct OamData gUnknown_08524A94; +extern const struct OamData gUnknown_0852491C; +extern const struct OamData gUnknown_08524924; +extern const struct OamData gUnknown_0852492C; +extern const struct OamData gUnknown_08524934; +extern const struct OamData gUnknown_0852493C; +extern const struct OamData gUnknown_08524944; +extern const struct OamData gUnknown_0852494C; extern const struct OamData gUnknown_08524954; -extern const struct OamData gUnknown_08524AE4; +extern const struct OamData gUnknown_0852495C; +extern const struct OamData gUnknown_08524964; +extern const struct OamData gUnknown_0852496C; +extern const struct OamData gUnknown_08524974; +extern const struct OamData gUnknown_0852497C; +extern const struct OamData gUnknown_08524984; +extern const struct OamData gUnknown_0852498C; +extern const struct OamData gUnknown_08524994; +extern const struct OamData gUnknown_0852499C; +extern const struct OamData gUnknown_085249A4; +extern const struct OamData gUnknown_085249AC; +extern const struct OamData gUnknown_085249B4; +extern const struct OamData gUnknown_085249BC; +extern const struct OamData gUnknown_085249C4; +extern const struct OamData gUnknown_085249CC; extern const struct OamData gUnknown_085249D4; -extern const struct OamData gUnknown_08524A9C; -extern const struct OamData gUnknown_08524ADC; -extern const struct OamData gUnknown_08524B14; -extern const struct OamData gUnknown_08524A54; +extern const struct OamData gUnknown_085249DC; +extern const struct OamData gUnknown_085249E4; +extern const struct OamData gUnknown_085249EC; +extern const struct OamData gUnknown_085249F4; +extern const struct OamData gUnknown_085249FC; +extern const struct OamData gUnknown_08524A04; +extern const struct OamData gUnknown_08524A0C; extern const struct OamData gUnknown_08524A14; extern const struct OamData gUnknown_08524A1C; -extern const struct OamData gUnknown_085249BC; -extern const struct OamData gUnknown_08524AF4; -extern const struct OamData gUnknown_085249DC; -extern const struct OamData gUnknown_08524AFC; -extern const struct OamData gUnknown_08524B1C; -extern const struct OamData gUnknown_08524A04; -extern const struct OamData gUnknown_08524A2C; -extern const struct OamData gUnknown_08524AEC; -extern const struct OamData gUnknown_08524964; -extern const struct OamData gUnknown_08524B24; extern const struct OamData gUnknown_08524A24; -extern const struct OamData gUnknown_08524AC4; -extern const struct OamData gUnknown_08524A84; -extern const struct OamData gUnknown_08524A64; -extern const struct OamData gUnknown_0852491C; -extern const struct OamData gUnknown_0852495C; -extern const struct OamData gUnknown_0852497C; -extern const struct OamData gUnknown_085249F4; -extern const struct OamData gUnknown_0852493C; +extern const struct OamData gUnknown_08524A2C; +extern const struct OamData gUnknown_08524A34; +extern const struct OamData gUnknown_08524A3C; +extern const struct OamData gUnknown_08524A44; +extern const struct OamData gUnknown_08524A4C; +extern const struct OamData gUnknown_08524A54; extern const struct OamData gUnknown_08524A5C; +extern const struct OamData gUnknown_08524A64; +extern const struct OamData gUnknown_08524A6C; extern const struct OamData gUnknown_08524A74; +extern const struct OamData gUnknown_08524A7C; +extern const struct OamData gUnknown_08524A84; +extern const struct OamData gUnknown_08524A8C; +extern const struct OamData gUnknown_08524A94; +extern const struct OamData gUnknown_08524A9C; +extern const struct OamData gUnknown_08524AA4; +extern const struct OamData gUnknown_08524AAC; +extern const struct OamData gUnknown_08524AB4; +extern const struct OamData gUnknown_08524ABC; +extern const struct OamData gUnknown_08524AC4; +extern const struct OamData gUnknown_08524ACC; +extern const struct OamData gUnknown_08524AD4; +extern const struct OamData gUnknown_08524ADC; +extern const struct OamData gUnknown_08524AE4; +extern const struct OamData gUnknown_08524AEC; +extern const struct OamData gUnknown_08524AF4; +extern const struct OamData gUnknown_08524AFC; +extern const struct OamData gUnknown_08524B04; +extern const struct OamData gUnknown_08524B0C; +extern const struct OamData gUnknown_08524B14; +extern const struct OamData gUnknown_08524B1C; +extern const struct OamData gUnknown_08524B24; +extern const struct OamData gUnknown_08524B2C; +extern const struct OamData gUnknown_08524B34; +extern const struct OamData gUnknown_08524B3C; extern const struct CompressedSpriteSheet gBattleAnimPicTable[]; extern const struct CompressedSpritePalette gBattleAnimPaletteTable[]; diff --git a/include/constants/battle_anim.h b/include/constants/battle_anim.h index 35da5b48b7..dea8eca1b0 100644 --- a/include/constants/battle_anim.h +++ b/include/constants/battle_anim.h @@ -296,6 +296,8 @@ #define ANIM_TAG_SLASH_2 (ANIM_SPRITES_START + 286) #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 5cb6354aa4..bdbed16866 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -4384,6 +4384,8 @@ extern const u32 gBattleAnimBackgroundTilemap_ScaryFaceOpponent[]; extern const u32 gBattleAnimBackgroundTilemap_ScaryFaceContest[]; 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[]; @@ -4667,6 +4669,8 @@ extern const u32 gBattleAnimSpritePalette_285[]; 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 7dd1526dd2..90e87aa137 100644 --- a/src/battle_anim.c +++ b/src/battle_anim.c @@ -1055,6 +1055,8 @@ const struct CompressedSpriteSheet gBattleAnimPicTable[] = {gBattleAnimSpriteSheet_183, 0x0800, ANIM_TAG_SLASH_2}, {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}, }; @@ -1349,6 +1351,8 @@ const struct CompressedSpritePalette gBattleAnimPaletteTable[] = {gBattleAnimSpritePalette_286, ANIM_TAG_SLASH_2}, {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/battle_anim_effects_1.c b/src/battle_anim_effects_1.c index c03abd051a..8446567de3 100644 --- a/src/battle_anim_effects_1.c +++ b/src/battle_anim_effects_1.c @@ -78,6 +78,10 @@ void sub_8103164(struct Sprite *); void sub_8103208(struct Sprite *); void sub_8103284(struct Sprite *); void sub_8103390(struct Sprite *); +void AnimRockPolishStreak(struct Sprite *); +void AnimRockPolishSparkle(struct Sprite *); +void AnimPoisonJabProjectile(struct Sprite *); +void AnimNightSlash(struct Sprite *); static void AnimMovePowderParticleStep(struct Sprite *); static void AnimSolarbeamSmallOrbStep(struct Sprite *); static void AnimAbsorptionOrbStep(struct Sprite *); @@ -2186,6 +2190,250 @@ const struct SpriteTemplate gPowerOrbs_Float = .callback = AnimSporeParticle, }; +const union AnimCmd gRockPolishStreak_AnimCmd[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(4, 2), + ANIMCMD_FRAME(8, 3), + ANIMCMD_FRAME(12, 15), + ANIMCMD_FRAME(8, 3), + ANIMCMD_FRAME(4, 2), + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd *const gRockPolishStreak_AnimCmds[] = +{ + gRockPolishStreak_AnimCmd, +}; + +const union AffineAnimCmd gRockPolishStreak_AffineAnimCmd0[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0x0, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gRockPolishStreak_AffineAnimCmd1[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0x10, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gRockPolishStreak_AffineAnimCmd2[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0x20, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gRockPolishStreak_AffineAnimCmd3[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0x30, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gRockPolishStreak_AffineAnimCmd4[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0x40, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gRockPolishStreak_AffineAnimCmd5[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0x50, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gRockPolishStreak_AffineAnimCmd6[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0x60, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gRockPolishStreak_AffineAnimCmd7[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0x70, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gRockPolishStreak_AffineAnimCmd8[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0x80, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gRockPolishStreak_AffineAnimCmd9[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0x90, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gRockPolishStreak_AffineAnimCmdA[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0xA0, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gRockPolishStreak_AffineAnimCmdB[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0xB0, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gRockPolishStreak_AffineAnimCmdC[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0xC0, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gRockPolishStreak_AffineAnimCmdD[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0xD0, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gRockPolishStreak_AffineAnimCmdE[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0xE0, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gRockPolishStreak_AffineAnimCmdF[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0xF0, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gRockPolishStreak_AffineAnimCmds[] = +{ + gRockPolishStreak_AffineAnimCmd0, + gRockPolishStreak_AffineAnimCmd1, + gRockPolishStreak_AffineAnimCmd2, + gRockPolishStreak_AffineAnimCmd3, + gRockPolishStreak_AffineAnimCmd4, + gRockPolishStreak_AffineAnimCmd5, + gRockPolishStreak_AffineAnimCmd6, + gRockPolishStreak_AffineAnimCmd7, + gRockPolishStreak_AffineAnimCmd8, + gRockPolishStreak_AffineAnimCmd9, + gRockPolishStreak_AffineAnimCmdA, + gRockPolishStreak_AffineAnimCmdB, + gRockPolishStreak_AffineAnimCmdC, + gRockPolishStreak_AffineAnimCmdD, + gRockPolishStreak_AffineAnimCmdE, + gRockPolishStreak_AffineAnimCmdF, +}; + +const struct SpriteTemplate gRockPolishStreakSpriteTemplate = +{ + .tileTag = ANIM_TAG_WHITE_STREAK, + .paletteTag = ANIM_TAG_WHITE_STREAK, + .oam = &gUnknown_08524B0C, + .anims = gRockPolishStreak_AnimCmds, + .images = NULL, + .affineAnims = gRockPolishStreak_AffineAnimCmds, + .callback = AnimRockPolishStreak, +}; + +const union AnimCmd gRockPolishSparkle_AnimCmd1[] = +{ + ANIMCMD_FRAME(0, 7), + ANIMCMD_FRAME(4, 7), + ANIMCMD_FRAME(8, 7), + ANIMCMD_FRAME(12, 7), + ANIMCMD_END, +}; + +const union AnimCmd *const gRockPolishSparkle_AnimCmds[] = +{ + gRockPolishSparkle_AnimCmd1, +}; + +const struct SpriteTemplate gRockPolishSparkleSpriteTemplate = +{ + .tileTag = ANIM_TAG_SPARKLE_3, + .paletteTag = ANIM_TAG_SPARKLE_3, + .oam = &gUnknown_0852490C, + .anims = gRockPolishSparkle_AnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimRockPolishSparkle, +}; + +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, +}; + +const union AnimCmd gNightSlashLeftAnimCmd0[] = +{ + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(16, 4), + ANIMCMD_FRAME(32, 4), + ANIMCMD_FRAME(48, 4), + ANIMCMD_END, +}; + +const union AnimCmd gNightSlashLeftAnimCmd1[] = +{ + ANIMCMD_FRAME(48, 4), + ANIMCMD_END, +}; + +const union AnimCmd *const gNightSlashLeftAnimTable[] = +{ + gNightSlashLeftAnimCmd0, + gNightSlashLeftAnimCmd1, +}; + +const struct SpriteTemplate gNightSlashLeftSpriteTemplate = +{ + .tileTag = ANIM_TAG_SLASH, + .paletteTag = ANIM_TAG_SLASH, + .oam = &gUnknown_08524914, + .anims = gNightSlashLeftAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimNightSlash, +}; + +const union AnimCmd gNightSlashRightAnimCmd0[] = +{ + ANIMCMD_FRAME(0, 4, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_FRAME(16, 4, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_FRAME(32, 4, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_FRAME(48, 4, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd gNightSlashRightAnimCmd1[] = +{ + ANIMCMD_FRAME(48, 4, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd *const gNightSlashRightAnimTable[] = +{ + gNightSlashRightAnimCmd0, + gNightSlashRightAnimCmd1, +}; + +const struct SpriteTemplate gNightSlashRightSpriteTemplate = +{ + .tileTag = ANIM_TAG_SLASH, + .paletteTag = ANIM_TAG_SLASH, + .oam = &gUnknown_08524914, + .anims = gNightSlashRightAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimNightSlash, +}; + // Animates the falling particles that horizontally wave back and forth. // Used by Sleep Powder, Stun Spore, and Poison Powder. // arg 0: initial x pixel offset @@ -5618,3 +5866,61 @@ static void sub_810342C(struct Sprite* sprite) if (++sprite->data[1] > 5) DestroyAnimSprite(sprite); } + +// Animates a white streak by giving it a random rotation. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +void AnimRockPolishStreak(struct Sprite *sprite) +{ + int affineAnimNum = Random2() % ARRAY_COUNT(gRockPolishStreak_AffineAnimCmds); + InitSpritePosToAnimAttacker(sprite, TRUE); + StartSpriteAffineAnim(sprite, affineAnimNum); + StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); + sprite->callback = RunStoredCallbackWhenAnimEnds; +} + +// Places a blue sparkle that plays its default animation. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +void AnimRockPolishSparkle(struct Sprite *sprite) +{ + InitSpritePosToAnimAttacker(sprite, TRUE); + StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); + sprite->callback = RunStoredCallbackWhenAnimEnds; +} + +// 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; + + InitSpritePosToAnimTarget(sprite, TRUE); + targetXPos = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + targetYPos = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); + rotation = ArcTan2Neg(targetXPos - sprite->pos1.x, targetYPos - sprite->pos1.y); + TrySetSpriteRotScale(sprite, FALSE, 0x100, 0x100, rotation); + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[2] = targetXPos; + sprite->data[4] = targetYPos; + sprite->callback = StartAnimLinearTranslation; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); +} + +void AnimTask_BlendNightSlash(u8 taskId) +{ + int paletteOffset = IndexOfSpritePaletteTag(ANIM_TAG_SLASH) * 16 + 256; + BlendPalette(paletteOffset, 16, 6, RGB_RED); + DestroyAnimVisualTask(taskId); +} + +void AnimNightSlash(struct Sprite *sprite) +{ + sprite->callback = sub_8101F40; + sprite->callback(sprite); +} diff --git a/src/graphics.c b/src/graphics.c index c0deb2883f..767eb3dc4f 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -564,6 +564,13 @@ const u32 gBattleAnimSpriteSheet_163[] = INCBIN_U32("graphics/battle_anims/sprit const u32 gBattleAnimSpritePalette_163[] = INCBIN_U32("graphics/battle_anims/sprites/163.gbapal.lz"); const u32 gBattleAnimSpritePalette_288[] = INCBIN_U32("graphics/battle_anims/sprites/288.gbapal.lz"); + +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");