diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index 73f357dc7c..fad691e397 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -1344,6 +1344,68 @@ 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 + 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: 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/include/battle_anim.h b/include/battle_anim.h index 8d73ea9b3b..b45545845d 100644 --- a/include/battle_anim.h +++ b/include/battle_anim.h @@ -177,49 +177,77 @@ 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; #endif // GUARD_BATTLE_ANIM_H diff --git a/include/constants/battle_anim.h b/include/constants/battle_anim.h index 35da5b48b7..2f7dde697e 100644 --- a/include/constants/battle_anim.h +++ b/include/constants/battle_anim.h @@ -296,6 +296,7 @@ #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) // battlers #define ANIM_ATTACKER 0 diff --git a/include/graphics.h b/include/graphics.h index b51926b8dc..18394edeac 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -4373,6 +4373,7 @@ extern const u32 gBattleAnimSpriteSheet_282[]; extern const u32 gBattleAnimSpriteSheet_283[]; extern const u32 gBattleAnimSpriteSheet_284[]; extern const u32 gBattleAnimSpriteSheet_285[]; +extern const u32 gBattleAnimSpriteSheet_289[]; extern const u32 gBattleAnimSpritePalette_000[]; extern const u32 gBattleAnimSpritePalette_001[]; @@ -4648,6 +4649,7 @@ 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 gBattleAnimBackgroundImage_00[]; extern const u32 gBattleAnimBackgroundImage_02[]; diff --git a/ld_script.txt b/ld_script.txt index fbeeb9682e..d0d8627fcb 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -156,6 +156,7 @@ SECTIONS { asm/contest_link_80FC4F4.o(.text); src/item_use.o(.text); asm/battle_anim_effects_1.o(.text); + src/effects_1.o(.text); asm/battle_anim_effects_2.o(.text); asm/water.o(.text); src/fire.o(.text); diff --git a/src/battle_anim.c b/src/battle_anim.c index 95c6f7b3c4..0e6eb0f2a7 100644 --- a/src/battle_anim.c +++ b/src/battle_anim.c @@ -1057,6 +1057,7 @@ 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}, }; @@ -1351,6 +1352,7 @@ 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}, }; const struct BattleAnimBackground gBattleAnimBackgroundTable[] = diff --git a/src/effects_1.c b/src/effects_1.c index 7cf32137c1..7b0946ed63 100644 --- a/src/effects_1.c +++ b/src/effects_1.c @@ -2102,3 +2102,199 @@ const struct SpriteTemplate gPowerOrbs_Float = .affineAnims = gDummySpriteAffineAnimTable, .callback = sub_80FED28, }; + +#include "random.h" + +void AnimRockPolishStreak(struct Sprite *); +void AnimRockPolishSparkle(struct Sprite *); + +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, +}; + +// 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); + InitAnimSpritePos(sprite, TRUE); + StartSpriteAffineAnim(sprite, affineAnimNum); + StoreSpriteCallbackInData6(sprite, move_anim_8074EE0); + sprite->callback = sub_80A67D8; +} + +// 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) +{ + InitAnimSpritePos(sprite, TRUE); + StoreSpriteCallbackInData6(sprite, move_anim_8074EE0); + sprite->callback = sub_80A67D8; +} diff --git a/src/graphics.c b/src/graphics.c index b2de074bc1..bad142badf 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -564,6 +564,10 @@ 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 gBattleAnimSpritePalette_164[] = INCBIN_U32("graphics/battle_anims/sprites/164.gbapal.lz"); const u32 gBattleAnimSpritePalette_165[] = INCBIN_U32("graphics/battle_anims/sprites/165.gbapal.lz");