Sync battle anim - sound tasks

This commit is contained in:
GriffinR
2022-08-17 14:44:26 -04:00
parent 8601b4fff3
commit 4e106d86e3
2 changed files with 56 additions and 37 deletions
+2 -2
View File
@@ -891,7 +891,7 @@ Move_TWINEEDLE::
Move_FIRE_BLAST:: Move_FIRE_BLAST::
loadspritegfx ANIM_TAG_SMALL_EMBER loadspritegfx ANIM_TAG_SMALL_EMBER
createsoundtask sub_80DCE10, SE_M_FLAME_WHEEL, SE_M_FLAME_WHEEL2 createsoundtask SoundTask_FireBlast, SE_M_FLAME_WHEEL, SE_M_FLAME_WHEEL2
call FireBlastRing call FireBlastRing
call FireBlastRing call FireBlastRing
call FireBlastRing call FireBlastRing
@@ -8656,7 +8656,7 @@ Move_HYPER_VOICE::
end end
HyperVoiceEffect:: HyperVoiceEffect::
createvisualtask sub_80DD334, 5 createvisualtask SoundTask_PlayCryWithEcho, 5
createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 8, 0, 1023 createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 8, 0, 1023
createvisualtask AnimTask_ScaleMonAndRestore, 5, -5, -5, 5, 0, 0 createvisualtask AnimTask_ScaleMonAndRestore, 5, -5, -5, 5, 0, 0
createsprite gHyperVoiceRingSpriteTemplate, ANIM_ATTACKER, 0, 45, 0, 0, 0, 0, 0, 1 createsprite gHyperVoiceRingSpriteTemplate, ANIM_ATTACKER, 0, 45, 0, 0, 0, 0, 0, 1
+54 -35
View File
@@ -6,14 +6,21 @@
#include "constants/battle_anim.h" #include "constants/battle_anim.h"
#include "constants/sound.h" #include "constants/sound.h"
static void sub_80DCE78(u8 taskId); static void SoundTask_FireBlast_Step1(u8 taskId);
static void sub_80DCEE4(u8 taskId); static void SoundTask_FireBlast_Step2(u8 taskId);
static void sub_80DCFE8(u8 taskId); static void SoundTask_LoopSEAdjustPanning_Step(u8 taskId);
static void sub_80DD270(u8 taskId); static void SoundTask_PlayDoubleCry_Step(u8 taskId);
static void sub_80DD390(u8 taskId); static void SoundTask_PlayCryWithEcho_Step(u8 taskId);
static void sub_80DD4D4(u8 taskId); static void SoundTask_AdjustPanningVar_Step(u8 taskId);
void sub_80DCE10(u8 taskId) // Loops the specified sound effect and pans from the
// attacker to the target. The second specified sound effect
// is played at the very end. This task is effectively
// hardcoded to the move FIRE_BLAST due to the baked-in
// durations.
// arg 0: looped sound effect
// arg 1: ending sound effect
void SoundTask_FireBlast(u8 taskId)
{ {
s8 pan1, pan2, panIncrement; s8 pan1, pan2, panIncrement;
@@ -26,10 +33,10 @@ void sub_80DCE10(u8 taskId)
gTasks[taskId].data[3] = pan2; gTasks[taskId].data[3] = pan2;
gTasks[taskId].data[4] = panIncrement; gTasks[taskId].data[4] = panIncrement;
gTasks[taskId].data[10] = 10; gTasks[taskId].data[10] = 10;
gTasks[taskId].func = sub_80DCE78; gTasks[taskId].func = SoundTask_FireBlast_Step1;
} }
static void sub_80DCE78(u8 taskId) static void SoundTask_FireBlast_Step1(u8 taskId)
{ {
s16 pan = gTasks[taskId].data[2]; s16 pan = gTasks[taskId].data[2];
s8 panIncrement = gTasks[taskId].data[4]; s8 panIncrement = gTasks[taskId].data[4];
@@ -38,7 +45,7 @@ static void sub_80DCE78(u8 taskId)
{ {
gTasks[taskId].data[10] = 5; gTasks[taskId].data[10] = 5;
gTasks[taskId].data[11] = 0; gTasks[taskId].data[11] = 0;
gTasks[taskId].func = sub_80DCEE4; gTasks[taskId].func = SoundTask_FireBlast_Step2;
} }
else else
{ {
@@ -52,7 +59,7 @@ static void sub_80DCE78(u8 taskId)
} }
} }
static void sub_80DCEE4(u8 taskId) static void SoundTask_FireBlast_Step2(u8 taskId)
{ {
if (++gTasks[taskId].data[10] == 6) if (++gTasks[taskId].data[10] == 6)
{ {
@@ -88,11 +95,11 @@ void SoundTask_LoopSEAdjustPanning(u8 taskId)
gTasks[taskId].data[10] = 0; gTasks[taskId].data[10] = 0;
gTasks[taskId].data[11] = sourcePan; gTasks[taskId].data[11] = sourcePan;
gTasks[taskId].data[12] = r9; gTasks[taskId].data[12] = r9;
gTasks[taskId].func = sub_80DCFE8; gTasks[taskId].func = SoundTask_LoopSEAdjustPanning_Step;
sub_80DCFE8(taskId); gTasks[taskId].func(taskId);
} }
static void sub_80DCFE8(u8 taskId) static void SoundTask_LoopSEAdjustPanning_Step(u8 taskId)
{ {
if (gTasks[taskId].data[12]++ == gTasks[taskId].data[6]) if (gTasks[taskId].data[12]++ == gTasks[taskId].data[6])
{ {
@@ -131,6 +138,7 @@ void SoundTask_PlayCryHighPitch(u8 taskId)
battlerId = BATTLE_PARTNER(gBattleAnimAttacker); battlerId = BATTLE_PARTNER(gBattleAnimAttacker);
else else
battlerId = BATTLE_PARTNER(gBattleAnimTarget); battlerId = BATTLE_PARTNER(gBattleAnimTarget);
// Check if battler is visible. // Check if battler is visible.
if ((gBattleAnimArgs[0] == ANIM_TARGET || gBattleAnimArgs[0] == ANIM_DEF_PARTNER) if ((gBattleAnimArgs[0] == ANIM_TARGET || gBattleAnimArgs[0] == ANIM_DEF_PARTNER)
&& !IsBattlerSpriteVisible(battlerId)) && !IsBattlerSpriteVisible(battlerId))
@@ -182,7 +190,7 @@ void SoundTask_PlayDoubleCry(u8 taskId)
PlayCry_ByMode(species, pan, CRY_MODE_GROWL_1); PlayCry_ByMode(species, pan, CRY_MODE_GROWL_1);
else // DOUBLE_CRY_ROAR else // DOUBLE_CRY_ROAR
PlayCry_ByMode(species, pan, CRY_MODE_ROAR_1); PlayCry_ByMode(species, pan, CRY_MODE_ROAR_1);
gTasks[taskId].func = sub_80DD270; gTasks[taskId].func = SoundTask_PlayDoubleCry_Step;
} }
else else
{ {
@@ -190,7 +198,7 @@ void SoundTask_PlayDoubleCry(u8 taskId)
} }
} }
static void sub_80DD270(u8 taskId) static void SoundTask_PlayDoubleCry_Step(u8 taskId)
{ {
u16 species = gTasks[taskId].data[1]; u16 species = gTasks[taskId].data[1];
s8 pan = gTasks[taskId].data[2]; s8 pan = gTasks[taskId].data[2];
@@ -199,7 +207,7 @@ static void sub_80DD270(u8 taskId)
{ {
++gTasks[taskId].data[9]; ++gTasks[taskId].data[9];
} }
else if (gTasks[taskId].data[0] == TAIL_SENTINEL) else if (gTasks[taskId].data[0] == DOUBLE_CRY_GROWL)
{ {
if (!IsCryPlaying()) if (!IsCryPlaying())
{ {
@@ -207,10 +215,13 @@ static void sub_80DD270(u8 taskId)
DestroyAnimVisualTask(taskId); DestroyAnimVisualTask(taskId);
} }
} }
else if (!IsCryPlaying()) else // DOUBLE_CRY_ROAR
{ {
PlayCry_ByMode(species, pan, CRY_MODE_ROAR_2); if (!IsCryPlaying())
DestroyAnimVisualTask(taskId); {
PlayCry_ByMode(species, pan, CRY_MODE_ROAR_2);
DestroyAnimVisualTask(taskId);
}
} }
} }
@@ -222,19 +233,21 @@ void SoundTask_WaitForCry(u8 taskId)
DestroyAnimVisualTask(taskId); DestroyAnimVisualTask(taskId);
} }
void sub_80DD334(u8 taskId) #define tSpecies data[1]
#define tPan data[2]
#define tState data[9]
void SoundTask_PlayCryWithEcho(u8 taskId)
{ {
u16 species; u16 species;
s8 pan; s8 pan = BattleAnimAdjustPanning(SOUND_PAN_ATTACKER);
pan = BattleAnimAdjustPanning(SOUND_PAN_ATTACKER);
species = gAnimBattlerSpecies[gBattleAnimAttacker]; species = gAnimBattlerSpecies[gBattleAnimAttacker];
gTasks[taskId].data[1] = species; gTasks[taskId].tSpecies = species;
gTasks[taskId].data[2] = pan; gTasks[taskId].tPan = pan;
if (species != SPECIES_NONE) if (species != SPECIES_NONE)
{ {
PlayCry_ByMode(species, pan, CRY_MODE_ECHO_START); PlayCry_ByMode(species, pan, CRY_MODE_ECHO_START);
gTasks[taskId].func = sub_80DD390; gTasks[taskId].func = SoundTask_PlayCryWithEcho_Step;
} }
else else
{ {
@@ -242,23 +255,27 @@ void sub_80DD334(u8 taskId)
} }
} }
static void sub_80DD390(u8 taskId) static void SoundTask_PlayCryWithEcho_Step(u8 taskId)
{ {
if (gTasks[taskId].data[9] < 2) if (gTasks[taskId].tState < 2)
{ {
++gTasks[taskId].data[9]; gTasks[taskId].tState++;
} }
else if (!IsCryPlaying()) else if (!IsCryPlaying())
{ {
u16 species = gTasks[taskId].data[1]; u16 species = gTasks[taskId].tSpecies;
s8 pan = gTasks[taskId].data[2]; s8 pan = gTasks[taskId].tPan;
PlayCry_ByMode(species, pan, CRY_MODE_ECHO_END); PlayCry_ByMode(species, pan, CRY_MODE_ECHO_END);
DestroyAnimVisualTask(taskId); DestroyAnimVisualTask(taskId);
} }
} }
#undef tSpecies
#undef tPan
#undef tState
void SoundTask_PlaySE1WithPanning(u8 taskId) void SoundTask_PlaySE1WithPanning(u8 taskId)
{ {
u16 songId = gBattleAnimArgs[0]; u16 songId = gBattleAnimArgs[0];
@@ -277,6 +294,8 @@ void SoundTask_PlaySE2WithPanning(u8 taskId)
DestroyAnimVisualTask(taskId); DestroyAnimVisualTask(taskId);
} }
// Adjusts panning and assigns it to gAnimCustomPanning. Doesnt play sound.
// Used by Confuse Ray and Will-O-Wisp (see uses of gAnimCustomPanning)
void SoundTask_AdjustPanningVar(u8 taskId) void SoundTask_AdjustPanningVar(u8 taskId)
{ {
s8 targetPan = gBattleAnimArgs[1]; s8 targetPan = gBattleAnimArgs[1];
@@ -292,11 +311,11 @@ void SoundTask_AdjustPanningVar(u8 taskId)
gTasks[taskId].data[5] = r9; gTasks[taskId].data[5] = r9;
gTasks[taskId].data[10] = 0; gTasks[taskId].data[10] = 0;
gTasks[taskId].data[11] = sourcePan; gTasks[taskId].data[11] = sourcePan;
gTasks[taskId].func = sub_80DD4D4; gTasks[taskId].func = SoundTask_AdjustPanningVar_Step;
sub_80DD4D4(taskId); gTasks[taskId].func(taskId);
} }
static void sub_80DD4D4(u8 taskId) static void SoundTask_AdjustPanningVar_Step(u8 taskId)
{ {
u16 oldPan, panIncrement = gTasks[taskId].data[3]; u16 oldPan, panIncrement = gTasks[taskId].data[3];