From 1c73e61a2beb8d7d8f27a7a52a3d1d96cb5d4707 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 8 Apr 2019 16:48:04 +0200 Subject: [PATCH] Parabolic Charge anim --- data/battle_anim_scripts.s | 97 +++++++++++++++++++++++++++++--------- include/battle_anim.h | 1 + src/battle_anim.c | 12 +++++ src/electric.c | 10 ++-- 4 files changed, 93 insertions(+), 27 deletions(-) diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index 5ee343298f..e38c17cab8 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -2035,80 +2035,80 @@ Move_LEAF_STORM: waitforvisualfinish monbgprio_28 ANIM_TARGET setalpha 12, 8 - playsewithpan SE_W026, 192 + playsewithpan SE_W026, SOUND_PAN_ATTACKER createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 14, -12, 0, -12, 15, 0, 0 createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 26, 8, 12, 8, 15, 0, 0 delay 3 - playsewithpan SE_W026, 192 + playsewithpan SE_W026, SOUND_PAN_ATTACKER createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 14, -12, 0, -16, 19, 0, 0 createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 26, 8, 12, 12, 19, 0, 0 delay 3 - playsewithpan SE_W026, 192 + playsewithpan SE_W026, SOUND_PAN_ATTACKER createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 14, -12, 0, -20, 23, 0, 0 createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 26, 8, 12, 16, 23, 0, 0 delay 3 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 5, 0, 50, 1 - playsewithpan SE_W026, 192 + playsewithpan SE_W026, SOUND_PAN_ATTACKER createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 14, -12, 0, -24, 27, 0, 0 createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 26, 8, 12, 20, 27, 0, 0 delay 3 - playsewithpan SE_W026, 192 + playsewithpan SE_W026, SOUND_PAN_ATTACKER createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 14, -12, 0, -24, 27, 0, 0 createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 26, 8, 12, 20, 27, 0, 0 delay 3 - playsewithpan SE_W026, 192 + playsewithpan SE_W026, SOUND_PAN_ATTACKER createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 14, -12, 0, -20, 23, 0, 0 createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 26, 8, 12, 16, 23, 0, 0 delay 3 - playsewithpan SE_W026, 192 + playsewithpan SE_W026, SOUND_PAN_ATTACKER createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 14, -12, 0, -16, 19, 0, 0 createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 26, 8, 12, 12, 19, 0, 0 delay 3 - playsewithpan SE_W026, 192 + playsewithpan SE_W026, SOUND_PAN_ATTACKER createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 14, -12, 0, -12, 15, 0, 0 createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 26, 8, 12, 8, 15, 0, 0 delay 3 - playsewithpan SE_W026, 192 + playsewithpan SE_W026, SOUND_PAN_ATTACKER createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 14, -12, 0, -8, 11, 0, 0 createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 26, 8, 12, 8, 15, 0, 0 delay 3 - playsewithpan SE_W026, 192 + playsewithpan SE_W026, SOUND_PAN_ATTACKER createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 14, -12, 0, -16, 19, 0, 0 createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 26, 8, 12, 12, 19, 0, 0 delay 3 - playsewithpan SE_W026, 192 + playsewithpan SE_W026, SOUND_PAN_ATTACKER createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 14, -12, 0, -20, 23, 0, 0 createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 26, 8, 12, 16, 23, 0, 0 delay 3 - playsewithpan SE_W026, 192 + playsewithpan SE_W026, SOUND_PAN_ATTACKER createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 14, -12, 0, -24, 27, 0, 0 createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 26, 8, 12, 20, 27, 0, 0 delay 3 - playsewithpan SE_W026, 192 + playsewithpan SE_W026, SOUND_PAN_ATTACKER createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 14, -12, 0, -24, 27, 0, 0 createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 26, 8, 12, 20, 27, 0, 0 delay 3 - playsewithpan SE_W026, 192 + playsewithpan SE_W026, SOUND_PAN_ATTACKER createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 14, -12, 0, -20, 23, 0, 0 createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 26, 8, 12, 16, 23, 0, 0 delay 3 - playsewithpan SE_W026, 192 + playsewithpan SE_W026, SOUND_PAN_ATTACKER createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 14, -12, 0, -16, 19, 0, 0 createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 26, 8, 12, 12, 19, 0, 0 delay 3 - playsewithpan SE_W026, 192 + playsewithpan SE_W026, SOUND_PAN_ATTACKER createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 14, -12, 0, -12, 15, 0, 0 createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 26, 8, 12, 8, 15, 0, 0 delay 3 - playsewithpan SE_W026, 192 + playsewithpan SE_W026, SOUND_PAN_ATTACKER createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 14, -12, 0, -16, 19, 0, 0 createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 26, 8, 12, 12, 19, 0, 0 delay 3 - playsewithpan SE_W026, 192 + playsewithpan SE_W026, SOUND_PAN_ATTACKER createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 14, -12, 0, -20, 23, 0, 0 createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 26, 8, 12, 16, 23, 0, 0 delay 3 - playsewithpan SE_W026, 192 + playsewithpan SE_W026, SOUND_PAN_ATTACKER createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 14, -12, 0, -24, 27, 0, 0 createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 26, 8, 12, 20, 27, 0, 0 delay 3 @@ -2120,7 +2120,7 @@ Move_LEAF_STORM: createsprite gBattleAnimSpriteTemplate_LeafStorm2, ANIM_TARGET, 2, 1, 1, 0, 36, 10 createsprite gBattleAnimSpriteTemplate_LeafStorm2, ANIM_TARGET, 2, 1, 1, -24, 12, 10 createsprite gBattleAnimSpriteTemplate_LeafStorm2, ANIM_TARGET, 2, 1, 1, -24, -12, 10 - playsewithpan SE_W013, 63 + playsewithpan SE_W013, SOUND_PAN_TARGET delay 2 createsprite gBattleAnimSpriteTemplate_LeafStorm2, ANIM_TARGET, 2, 1, 1, 36, 0, 10 createsprite gBattleAnimSpriteTemplate_LeafStorm2, ANIM_TARGET, 2, 1, 1, 12, -24, 10 @@ -2129,7 +2129,6 @@ Move_LEAF_STORM: createsprite gBattleAnimSpriteTemplate_LeafStorm2, ANIM_TARGET, 2, 1, 1, -12, 24, 10 createsprite gBattleAnimSpriteTemplate_LeafStorm2, ANIM_TARGET, 2, 1, 1, -12, -24, 10 waitforvisualfinish - clearmonbg ANIM_DEF_PARTNER blendoff delay 0 createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 12, 0, RGB(13, 31, 12) @@ -2643,7 +2642,59 @@ Move_ION_DELUGE: end Move_PARABOLIC_CHARGE: + loadspritegfx ANIM_TAG_ELECTRIC_ORBS + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT + loadspritegfx ANIM_TAG_SPARK + loadspritegfx ANIM_TAG_LIGHTNING + loadspritegfx ANIM_TAG_ORBS + loadspritegfx ANIM_TAG_BLUE_STAR + monbg ANIM_ATTACKER + setalpha 12, 8 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 0, 6, RGB(18, 16, 3) + waitforvisualfinish + createvisualtask sub_810AAFC, 2, ANIM_ATTACKER, 3, 20, 20 + playsewithpan SE_W129, SOUND_PAN_ATTACKER + delay 12 + createsprite gUnknown_08595A18, ANIM_ATTACKER, 2 + delay 30 + jumpifdoublebattle ParabolicChargeDouble + createvisualtask sub_810B29C, 5, ANIM_TARGET + delay 12 + waitforvisualfinish + createvisualtask sub_810B55C, 5, ANIM_TARGET + playsewithpan SE_W070, SOUND_PAN_TARGET + waitforvisualfinish + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 6, 18, 1 + createvisualtask sub_8116620, 5, 4, 0, 16, 16, RGB_BLACK + delay 4 + createvisualtask sub_8116620, 5, 4, 0, 0, 0, RGB_BLACK +ParabolicChargeHeal: + waitforvisualfinish + clearmonbg ANIM_ATTACKER + waitforvisualfinish + call HealingEffect + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 6, 0, RGB(18, 16, 3) + waitforvisualfinish + blendoff end +ParabolicChargeDouble: + createvisualtask sub_810B29C, 5, ANIM_TARGET + createvisualtask sub_810B29C, 5, ANIM_DEF_PARTNER + createvisualtask sub_810B29C, 5, ANIM_ATK_PARTNER + delay 12 + waitforvisualfinish + createvisualtask sub_810B55C, 5, ANIM_TARGET + createvisualtask sub_810B55C, 5, ANIM_DEF_PARTNER + createvisualtask sub_810B55C, 5, ANIM_ATK_PARTNER + playsewithpan SE_W070, SOUND_PAN_TARGET + waitforvisualfinish + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 6, 18, 1 + createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 0, 6, 18, 1 + createvisualtask AnimTask_ShakeMon, 2, ANIM_ATK_PARTNER, 0, 6, 18, 1 + createvisualtask sub_8116620, 5, 4 | 8 | 0x10, 0, 16, 16, RGB_BLACK + delay 4 + createvisualtask sub_8116620, 5, 4 | 8 | 0x10, 0, 0, 0, RGB_BLACK + goto ParabolicChargeHeal; Move_FORESTS_CURSE: end @@ -6956,10 +7007,10 @@ Move_SHOCK_WAVE: delay 12 createsprite gUnknown_08595A18, ANIM_ATTACKER, 2 delay 30 - createvisualtask sub_810B29C, 5 + createvisualtask sub_810B29C, 5, ANIM_TARGET delay 12 waitforvisualfinish - createvisualtask sub_810B55C, 5 + createvisualtask sub_810B55C, 5, ANIM_TARGET playsewithpan SE_W161B, SOUND_PAN_TARGET waitforvisualfinish createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 6, 18, 1 diff --git a/include/battle_anim.h b/include/battle_anim.h index 51d3df794a..f7c5b6a886 100644 --- a/include/battle_anim.h +++ b/include/battle_anim.h @@ -57,6 +57,7 @@ void LaunchBattleAnimation(const u8 *const animsTable[], u16 tableId, bool8 isMo void DestroyAnimSprite(struct Sprite *sprite); void DestroyAnimVisualTask(u8 taskId); void DestroyAnimSoundTask(u8 taskId); +u8 GetAnimBattlerId(u8 wantedBattler); bool8 IsBattlerSpriteVisible(u8 battlerId); void MoveBattlerSpriteToBG(u8 battlerId, bool8 toBG_2, bool8 setSpriteInvisible); bool8 IsContest(void); diff --git a/src/battle_anim.c b/src/battle_anim.c index 96413e4998..a75891cc11 100644 --- a/src/battle_anim.c +++ b/src/battle_anim.c @@ -2269,6 +2269,18 @@ static void ScriptCmd_monbg(void) gAnimScriptCallback = WaitAnimFrameCount; } +u8 GetAnimBattlerId(u8 wantedBattler) +{ + if (wantedBattler == ANIM_ATTACKER) + return gBattleAnimAttacker; + else if (wantedBattler == ANIM_TARGET) + return gBattleAnimTarget; + else if (wantedBattler == ANIM_ATK_PARTNER) + return BATTLE_PARTNER(gBattleAnimAttacker); + else + return BATTLE_PARTNER(gBattleAnimTarget); +} + bool8 IsBattlerSpriteVisible(u8 battlerId) { if (IsContest()) diff --git a/src/electric.c b/src/electric.c index 5440c1ebf8..f19816a3f6 100644 --- a/src/electric.c +++ b/src/electric.c @@ -1137,6 +1137,7 @@ static void sub_810B23C(struct Sprite *sprite) void sub_810B29C(u8 taskId) { struct Task *task = &gTasks[taskId]; + u8 target = GetAnimBattlerId(gBattleAnimArgs[0]); switch (task->data[0]) { @@ -1144,7 +1145,7 @@ void sub_810B29C(u8 taskId) task->data[6] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); task->data[7] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); task->data[8] = 4; - task->data[10] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + task->data[10] = GetBattlerSpriteCoord(target, BATTLER_COORD_X_2); task->data[9] = (task->data[10] - task->data[6]) / 5; task->data[4] = 7; task->data[5] = -1; @@ -1261,19 +1262,20 @@ static void sub_810B51C(struct Sprite *sprite) void sub_810B55C(u8 taskId) { struct Task *task = &gTasks[taskId]; + u8 target = GetAnimBattlerId(gBattleAnimArgs[0]); switch (task->data[0]) { case 0: - task->data[15] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + 32; + task->data[15] = GetBattlerSpriteCoord(target, BATTLER_COORD_Y) + 32; task->data[14] = task->data[15]; while (task->data[14] > 16) { task->data[14] -= 32; } - task->data[13] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); - task->data[12] = GetBattlerSpriteSubpriority(gBattleAnimTarget) - 2; + task->data[13] = GetBattlerSpriteCoord(target, BATTLER_COORD_X_2); + task->data[12] = GetBattlerSpriteSubpriority(target) - 2; task->data[0]++; break; case 1: