From 91aafa2ebc7917e0e9c50eb804cef17abc844e77 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 9 Apr 2019 12:49:50 +0200 Subject: [PATCH] Heal Block anim with volume change task --- asm/macros/battle_anim_script.inc | 6 +-- data/battle_anim_scripts.s | 21 +++++++++++ src/battle_anim_sound_tasks.c | 62 +++++++++++++++++++++++++++++++ 3 files changed, 86 insertions(+), 3 deletions(-) diff --git a/asm/macros/battle_anim_script.inc b/asm/macros/battle_anim_script.inc index d3d8f01a7..994e84ccd 100644 --- a/asm/macros/battle_anim_script.inc +++ b/asm/macros/battle_anim_script.inc @@ -144,7 +144,7 @@ .byte \pan .endm - .macro panse_1B se:req, param1:req, param2:req, param3:req, param4 + .macro panse_1B se:req, param1:req, param2:req, param3:req, param4:req .byte 0x1b .2byte \se .byte \param1 @@ -215,7 +215,7 @@ .byte \param2 .endm - .macro panse_26 se:req, param1:req, param2:req, param3:req, param4 + .macro panse_26 se:req, param1:req, param2:req, param3:req, param4:req .byte 0x26 .2byte \se .byte \param1 @@ -224,7 +224,7 @@ .byte \param4 .endm - .macro panse_27 se:req, param1:req, param2:req, param3:req, param4 + .macro panse_27 se:req, param1:req, param2:req, param3:req, param4:req .byte 0x27 .2byte \se .byte \param1 diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index e38c17cab..6cbee2044 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -1132,6 +1132,27 @@ Move_TRUMP_CARD: end Move_HEAL_BLOCK: + loadspritegfx ANIM_TAG_BLUE_STAR + monbg ANIM_TARGET + createsoundtask AnimTask_PlaySeChangingVolume, SE_W071B, SOUND_PAN_TARGET, 256, -16, 0, 2 + createsprite gUnknown_08592F2C, ANIM_TARGET, 2, 0, -5, 1, 0 + delay 7 + createsprite gUnknown_08592F2C, ANIM_TARGET, 2, -15, 10, 1, 0 + delay 7 + createvisualtask sub_8116620, 10, 1 | 4, 4, 2, 12, 0, RGB_BLACK + createsprite gUnknown_08592F2C, ANIM_TARGET, 2, 0, -5, 1, 0 + delay 7 + createsprite gUnknown_08592F2C, ANIM_TARGET, 2, -15, 10, 1, 0 + delay 7 + createsprite gUnknown_08592F2C, ANIM_TARGET, 2, -15, -15, 1, 0 + delay 7 + createsprite gUnknown_08592F2C, ANIM_TARGET, 2, 10, -5, 1, 0 + delay 7 + waitforvisualfinish + delay 11 + createvisualtask sub_8116620, 10, 1 | 4, 4, 2, 0, 12, RGB_BLACK + waitforvisualfinish + clearmonbg ANIM_TARGET end Move_WRING_OUT: diff --git a/src/battle_anim_sound_tasks.c b/src/battle_anim_sound_tasks.c index e5f0cd165..eb7446755 100644 --- a/src/battle_anim_sound_tasks.c +++ b/src/battle_anim_sound_tasks.c @@ -2,11 +2,14 @@ #include "battle.h" #include "battle_anim.h" #include "contest.h" +#include "m4a.h" #include "sound.h" #include "task.h" #include "constants/battle_anim.h" #include "constants/species.h" +extern struct MusicPlayerInfo gMPlayInfo_SE1; + // this file's functions static void sub_8158B98(u8 taskId); static void sub_8158C04(u8 taskId); @@ -14,6 +17,7 @@ static void sub_8158D08(u8 taskId); static void sub_8158FF4(u8 taskId); static void sub_815913C(u8 taskId); static void sub_8159308(u8 taskId); +static void AnimTask_SeVolumeChange(u8 taskId); // task start void sub_8158B30(u8 taskId) @@ -436,3 +440,61 @@ _0815935A:\n\ .pool"); } #endif + +#define tSongNum data[0] +#define tPan data[1] +#define tCurrentVolume data[2] +#define tIncrementVal data[3] +#define tTargetVolume data[4] +#define tDelay data[5] +#define tFrameCounter data[6] +#define tInitialVolume data[7] + +void AnimTask_PlaySeChangingVolume(u8 taskId) +{ + gTasks[taskId].tSongNum = gBattleAnimArgs[0]; + gTasks[taskId].tPan = BattleAnimAdjustPanning(gBattleAnimArgs[1]); + gTasks[taskId].tCurrentVolume = gTasks[taskId].tInitialVolume = gBattleAnimArgs[2]; + gTasks[taskId].tIncrementVal = gBattleAnimArgs[3]; + gTasks[taskId].tTargetVolume = gBattleAnimArgs[4]; + gTasks[taskId].tDelay = gBattleAnimArgs[5]; + + PlaySE1WithPanning(gTasks[taskId].tSongNum, gTasks[taskId].tPan); + m4aMPlayVolumeControl(&gMPlayInfo_SE1, 0xFFFF, gTasks[taskId].tCurrentVolume); + if (gTasks[taskId].tIncrementVal == 0) // Either increase or decrease volume. + DestroyAnimSoundTask(taskId); + else + gTasks[taskId].func = AnimTask_SeVolumeChange; +} + +static void AnimTask_SeVolumeChange(u8 taskId) +{ + bool32 destroyTask = FALSE; + + if (gTasks[taskId].tFrameCounter++ >= gTasks[taskId].tDelay) + { + gTasks[taskId].tFrameCounter = 0; + gTasks[taskId].tCurrentVolume += gTasks[taskId].tIncrementVal; + + if (gTasks[taskId].tCurrentVolume < 0) + gTasks[taskId].tCurrentVolume = 0; + if (gTasks[taskId].tCurrentVolume > 256) + gTasks[taskId].tCurrentVolume = 256; + + if (gTasks[taskId].tInitialVolume < gTasks[taskId].tTargetVolume) // Volume increasing. + { + if (gTasks[taskId].tCurrentVolume >= gTasks[taskId].tTargetVolume) // Target reached. + destroyTask = TRUE; + } + else // Volume decreasing. + { + if (gTasks[taskId].tCurrentVolume <= gTasks[taskId].tTargetVolume) // Target reached. + destroyTask = TRUE; + } + + if (destroyTask) + DestroyAnimSoundTask(taskId); + + m4aMPlayVolumeControl(&gMPlayInfo_SE1, 0xFFFF, gTasks[taskId].tCurrentVolume); + } +}