Sync battle anim - electric

This commit is contained in:
GriffinR
2022-08-16 14:35:37 -04:00
parent 0c74385de7
commit ba6bb34226
4 changed files with 86 additions and 78 deletions
+1 -1
View File
@@ -361,7 +361,7 @@ u8 GetGhostSpriteDefault_Y(u8 battlerId);
u8 GetBattlerYCoordWithElevation(u8 battlerId); u8 GetBattlerYCoordWithElevation(u8 battlerId);
u8 GetAnimBattlerSpriteId(u8 animBattler); u8 GetAnimBattlerSpriteId(u8 animBattler);
void StoreSpriteCallbackInData6(struct Sprite *sprite, SpriteCallback callback); void StoreSpriteCallbackInData6(struct Sprite *sprite, SpriteCallback callback);
void TranslateSpriteInCircleOverDuration(struct Sprite *sprite); void TranslateSpriteInCircle(struct Sprite *sprite);
void TranslateSpriteInGrowingCircleOverDuration(struct Sprite *sprite); void TranslateSpriteInGrowingCircleOverDuration(struct Sprite *sprite);
void TranslateSpriteInEllipse(struct Sprite *sprite); void TranslateSpriteInEllipse(struct Sprite *sprite);
void WaitAnimForDuration(struct Sprite *sprite); void WaitAnimForDuration(struct Sprite *sprite);
+1 -1
View File
@@ -1847,7 +1847,7 @@ void AnimRazorWindTornado(struct Sprite *sprite)
sprite->data[2] = gBattleAnimArgs[5]; sprite->data[2] = gBattleAnimArgs[5];
sprite->data[3] = gBattleAnimArgs[6]; sprite->data[3] = gBattleAnimArgs[6];
sprite->data[4] = gBattleAnimArgs[3]; sprite->data[4] = gBattleAnimArgs[3];
sprite->callback = TranslateSpriteInCircleOverDuration; sprite->callback = TranslateSpriteInCircle;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
sprite->callback(sprite); sprite->callback(sprite);
} }
+83 -75
View File
@@ -5,9 +5,9 @@
#include "constants/songs.h" #include "constants/songs.h"
static void AnimLightning(struct Sprite *sprite); static void AnimLightning(struct Sprite *sprite);
static void sub_80ADC58(struct Sprite *sprite); static void AnimUnusedSpinningFist(struct Sprite *sprite);
static void sub_80ADCB8(struct Sprite *sprite); static void AnimUnusedCirclingShock(struct Sprite *sprite);
static void sub_80ADD4C(struct Sprite *sprite); static void AnimSparkElectricity(struct Sprite *sprite);
static void AnimZapCannonSpark(struct Sprite *sprite); static void AnimZapCannonSpark(struct Sprite *sprite);
static void AnimThunderboltOrb(struct Sprite *sprite); static void AnimThunderboltOrb(struct Sprite *sprite);
static void AnimSparkElectricityFlashing(struct Sprite *sprite); static void AnimSparkElectricityFlashing(struct Sprite *sprite);
@@ -20,19 +20,19 @@ static void AnimVoltTackleOrbSlide(struct Sprite *sprite);
static void AnimVoltTackleBolt(struct Sprite *sprite); static void AnimVoltTackleBolt(struct Sprite *sprite);
static void AnimGrowingShockWaveOrb(struct Sprite *sprite); static void AnimGrowingShockWaveOrb(struct Sprite *sprite);
static void AnimShockWaveProgressingBolt(struct Sprite *sprite); static void AnimShockWaveProgressingBolt(struct Sprite *sprite);
static void sub_80ADC3C(struct Sprite *sprite); static void AnimLightning_Step(struct Sprite *sprite);
static void sub_80ADC9C(struct Sprite *sprite); static void AnimUnusedSpinningFist_Step(struct Sprite *sprite);
static void sub_80ADF38(struct Sprite *sprite); static void AnimZapCannonSpark_Step(struct Sprite *sprite);
static void sub_80AE130(struct Sprite *sprite); static void AnimSparkElectricityFlashing_Step(struct Sprite *sprite);
static void sub_80AE278(u8 taskId); static void AnimTask_ElectricBolt_Step(u8 taskId);
static void sub_80AE4F4(struct Sprite *sprite); static void AnimThunderWave_Step(struct Sprite *sprite);
static void sub_80AE5BC(u8 taskId); static void AnimTask_ElectricChargingParticles_Step(u8 taskId);
static void sub_80AE704(struct Sprite *sprite); static void AnimElectricChargingParticles(struct Sprite *sprite);
static void sub_80AE83C(struct Sprite *sprite); static void AnimVoltTackleOrbSlide_Step(struct Sprite *sprite);
static bool8 sub_80AEB98(struct Task *task, u8 taskId); static bool8 CreateVoltTackleBolt(struct Task *task, u8 taskId);
static bool8 sub_80AEE74(struct Task *task, u8 taskId); static bool8 CreateShockWaveBoltSprite(struct Task *task, u8 taskId);
static bool8 sub_80AF058(struct Task *task, u8 taskId); static bool8 CreateShockWaveLightningSprite(struct Task *task, u8 taskId);
static void sub_80AF0C8(struct Sprite *sprite); static void AnimShockWaveLightning(struct Sprite *sprite);
static const union AnimCmd sAnim_Lightning[] = static const union AnimCmd sAnim_Lightning[] =
{ {
@@ -60,7 +60,7 @@ const struct SpriteTemplate gLightningSpriteTemplate =
.callback = AnimLightning, .callback = AnimLightning,
}; };
static const union AffineAnimCmd gUnknown_83E5F50[] = static const union AffineAnimCmd sAffineAnim_UnusedSpinningFist[] =
{ {
AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 20), AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 20),
@@ -68,23 +68,23 @@ static const union AffineAnimCmd gUnknown_83E5F50[] =
AFFINEANIMCMD_END, AFFINEANIMCMD_END,
}; };
static const union AffineAnimCmd *const gUnknown_83E5F70[] = static const union AffineAnimCmd *const sAffineAnims_UnusedSpinningFist[] =
{ {
gUnknown_83E5F50, sAffineAnim_UnusedSpinningFist,
}; };
const struct SpriteTemplate gUnknown_83E5F74 = static const struct SpriteTemplate sUnusedSpinningFistSpriteTemplate =
{ {
.tileTag = ANIM_TAG_HANDS_AND_FEET, .tileTag = ANIM_TAG_HANDS_AND_FEET,
.paletteTag = ANIM_TAG_HANDS_AND_FEET, .paletteTag = ANIM_TAG_HANDS_AND_FEET,
.oam = &gOamData_AffineNormal_ObjNormal_32x32, .oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gDummySpriteAnimTable, .anims = gDummySpriteAnimTable,
.images = NULL, .images = NULL,
.affineAnims = gUnknown_83E5F70, .affineAnims = sAffineAnims_UnusedSpinningFist,
.callback = sub_80ADC58, .callback = AnimUnusedSpinningFist,
}; };
static const union AnimCmd gUnknown_83E5F8C[] = static const union AnimCmd sAnim_UnusedCirclingShock[] =
{ {
ANIMCMD_FRAME(0, 5), ANIMCMD_FRAME(0, 5),
ANIMCMD_FRAME(16, 5), ANIMCMD_FRAME(16, 5),
@@ -95,20 +95,20 @@ static const union AnimCmd gUnknown_83E5F8C[] =
ANIMCMD_JUMP(0), ANIMCMD_JUMP(0),
}; };
static const union AnimCmd *const gUnknown_83E5FA8[] = static const union AnimCmd *const sAnims_UnusedCirclingShock[] =
{ {
gUnknown_83E5F8C, sAnim_UnusedCirclingShock,
}; };
const struct SpriteTemplate gUnknown_83E5FAC = static const struct SpriteTemplate sUnusedCirclingShockSpriteTemplate =
{ {
.tileTag = ANIM_TAG_SHOCK, .tileTag = ANIM_TAG_SHOCK,
.paletteTag = ANIM_TAG_SHOCK, .paletteTag = ANIM_TAG_SHOCK,
.oam = &gOamData_AffineOff_ObjNormal_32x32, .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gUnknown_83E5FA8, .anims = sAnims_UnusedCirclingShock,
.images = NULL, .images = NULL,
.affineAnims = gDummySpriteAffineAnimTable, .affineAnims = gDummySpriteAffineAnimTable,
.callback = sub_80ADCB8, .callback = AnimUnusedCirclingShock,
}; };
const struct SpriteTemplate gSparkElectricitySpriteTemplate = const struct SpriteTemplate gSparkElectricitySpriteTemplate =
@@ -119,7 +119,7 @@ const struct SpriteTemplate gSparkElectricitySpriteTemplate =
.anims = gDummySpriteAnimTable, .anims = gDummySpriteAnimTable,
.images = NULL, .images = NULL,
.affineAnims = gDummySpriteAffineAnimTable, .affineAnims = gDummySpriteAffineAnimTable,
.callback = sub_80ADD4C, .callback = AnimSparkElectricity,
}; };
const struct SpriteTemplate gZapCannonBallSpriteTemplate = const struct SpriteTemplate gZapCannonBallSpriteTemplate =
@@ -458,31 +458,31 @@ static void AnimLightning(struct Sprite *sprite)
else else
sprite->x += gBattleAnimArgs[0]; sprite->x += gBattleAnimArgs[0];
sprite->y += gBattleAnimArgs[1]; sprite->y += gBattleAnimArgs[1];
sprite->callback = sub_80ADC3C; sprite->callback = AnimLightning_Step;
} }
static void sub_80ADC3C(struct Sprite *sprite) static void AnimLightning_Step(struct Sprite *sprite)
{ {
if (sprite->animEnded) if (sprite->animEnded)
DestroyAnimSprite(sprite); DestroyAnimSprite(sprite);
} }
static void sub_80ADC58(struct Sprite *sprite) static void AnimUnusedSpinningFist(struct Sprite *sprite)
{ {
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
sprite->x -= gBattleAnimArgs[0]; sprite->x -= gBattleAnimArgs[0];
else else
sprite->x += gBattleAnimArgs[0]; sprite->x += gBattleAnimArgs[0];
sprite->callback = sub_80ADC9C; sprite->callback = AnimUnusedSpinningFist_Step;
} }
static void sub_80ADC9C(struct Sprite *sprite) static void AnimUnusedSpinningFist_Step(struct Sprite *sprite)
{ {
if (sprite->affineAnimEnded) if (sprite->affineAnimEnded)
DestroySpriteAndMatrix(sprite); DestroySpriteAndMatrix(sprite);
} }
static void sub_80ADCB8(struct Sprite *sprite) static void AnimUnusedCirclingShock(struct Sprite *sprite)
{ {
sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
@@ -501,10 +501,10 @@ static void sub_80ADCB8(struct Sprite *sprite)
sprite->data[2] = gBattleAnimArgs[3]; sprite->data[2] = gBattleAnimArgs[3];
sprite->data[3] = gBattleAnimArgs[4]; sprite->data[3] = gBattleAnimArgs[4];
StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
sprite->callback = TranslateSpriteInCircleOverDuration; sprite->callback = TranslateSpriteInCircle;
} }
static void sub_80ADD4C(struct Sprite *sprite) static void AnimSparkElectricity(struct Sprite *sprite)
{ {
u8 battler; u8 battler;
u32 matrixNum; u32 matrixNum;
@@ -512,20 +512,20 @@ static void sub_80ADD4C(struct Sprite *sprite)
switch (gBattleAnimArgs[4]) switch (gBattleAnimArgs[4])
{ {
case 0: case ANIM_ATTACKER:
battler = gBattleAnimAttacker; battler = gBattleAnimAttacker;
break; break;
case 1: case ANIM_TARGET:
default: default:
battler = gBattleAnimTarget; battler = gBattleAnimTarget;
break; break;
case 2: case ANIM_ATK_PARTNER:
if (!IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker))) if (!IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker)))
battler = gBattleAnimAttacker; battler = gBattleAnimAttacker;
else else
battler = BATTLE_PARTNER(gBattleAnimAttacker); battler = BATTLE_PARTNER(gBattleAnimAttacker);
break; break;
case 3: case ANIM_DEF_PARTNER:
if (IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker))) if (IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker)))
battler = BATTLE_PARTNER(gBattleAnimTarget); battler = BATTLE_PARTNER(gBattleAnimTarget);
else else
@@ -568,11 +568,11 @@ static void AnimZapCannonSpark(struct Sprite *sprite)
sprite->data[6] = gBattleAnimArgs[5]; sprite->data[6] = gBattleAnimArgs[5];
sprite->data[7] = gBattleAnimArgs[4]; sprite->data[7] = gBattleAnimArgs[4];
sprite->oam.tileNum += gBattleAnimArgs[6] * 4; sprite->oam.tileNum += gBattleAnimArgs[6] * 4;
sprite->callback = sub_80ADF38; sprite->callback = AnimZapCannonSpark_Step;
sprite->callback(sprite); sprite->callback(sprite);
} }
static void sub_80ADF38(struct Sprite *sprite) static void AnimZapCannonSpark_Step(struct Sprite *sprite)
{ {
if (!AnimTranslateLinear(sprite)) if (!AnimTranslateLinear(sprite))
{ {
@@ -588,7 +588,7 @@ static void sub_80ADF38(struct Sprite *sprite)
} }
} }
static void sub_80ADFB0(struct Sprite *sprite) static void AnimThunderboltOrb_Step(struct Sprite *sprite)
{ {
if (--sprite->data[5] == -1) if (--sprite->data[5] == -1)
{ {
@@ -608,7 +608,7 @@ static void AnimThunderboltOrb(struct Sprite *sprite)
sprite->data[3] = gBattleAnimArgs[0]; sprite->data[3] = gBattleAnimArgs[0];
sprite->data[4] = gBattleAnimArgs[3]; sprite->data[4] = gBattleAnimArgs[3];
sprite->data[5] = gBattleAnimArgs[3]; sprite->data[5] = gBattleAnimArgs[3];
sprite->callback = sub_80ADFB0; sprite->callback = AnimThunderboltOrb_Step;
} }
static void AnimSparkElectricityFlashing(struct Sprite *sprite) static void AnimSparkElectricityFlashing(struct Sprite *sprite)
@@ -629,11 +629,11 @@ static void AnimSparkElectricityFlashing(struct Sprite *sprite)
sprite->data[6] = gBattleAnimArgs[5]; sprite->data[6] = gBattleAnimArgs[5];
sprite->data[7] = gBattleAnimArgs[4]; sprite->data[7] = gBattleAnimArgs[4];
sprite->oam.tileNum += gBattleAnimArgs[6] * 4; sprite->oam.tileNum += gBattleAnimArgs[6] * 4;
sprite->callback = sub_80AE130; sprite->callback = AnimSparkElectricityFlashing_Step;
sprite->callback(sprite); sprite->callback(sprite);
} }
static void sub_80AE130(struct Sprite *sprite) static void AnimSparkElectricityFlashing_Step(struct Sprite *sprite)
{ {
sprite->x2 = Sin(sprite->data[7], sprite->data[5]); sprite->x2 = Sin(sprite->data[7], sprite->data[5]);
sprite->y2 = Cos(sprite->data[7], sprite->data[5]); sprite->y2 = Cos(sprite->data[7], sprite->data[5]);
@@ -644,6 +644,7 @@ static void sub_80AE130(struct Sprite *sprite)
DestroyAnimSprite(sprite); DestroyAnimSprite(sprite);
} }
// Electricity arcs around the target. Used for Paralysis and various electric move hits
static void AnimElectricity(struct Sprite *sprite) static void AnimElectricity(struct Sprite *sprite)
{ {
InitSpritePosToAnimTarget(sprite, FALSE); InitSpritePosToAnimTarget(sprite, FALSE);
@@ -657,15 +658,16 @@ static void AnimElectricity(struct Sprite *sprite)
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
} }
// The vertical falling thunder bolt used in Thunder Wave/Shock/Bolt
void AnimTask_ElectricBolt(u8 taskId) void AnimTask_ElectricBolt(u8 taskId)
{ {
gTasks[taskId].data[0] = GetBattlerSpriteCoord(gBattleAnimTarget, 0) + gBattleAnimArgs[0]; gTasks[taskId].data[0] = GetBattlerSpriteCoord(gBattleAnimTarget, 0) + gBattleAnimArgs[0];
gTasks[taskId].data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + gBattleAnimArgs[1]; gTasks[taskId].data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + gBattleAnimArgs[1];
gTasks[taskId].data[2] = gBattleAnimArgs[2]; gTasks[taskId].data[2] = gBattleAnimArgs[2];
gTasks[taskId].func = sub_80AE278; gTasks[taskId].func = AnimTask_ElectricBolt_Step;
} }
static void sub_80AE278(u8 taskId) static void AnimTask_ElectricBolt_Step(u8 taskId)
{ {
u16 r8; u16 r8;
u16 r2; u16 r2;
@@ -735,18 +737,19 @@ static void AnimElectricBoltSegment(struct Sprite *sprite)
{ {
if (!sprite->data[0]) if (!sprite->data[0])
{ {
sprite->oam.shape = ST_OAM_V_RECTANGLE; sprite->oam.shape = SPRITE_SHAPE(8x16);
sprite->oam.size = ST_OAM_SIZE_0; sprite->oam.size = SPRITE_SIZE(8x16);
} }
else else
{ {
sprite->oam.shape = ST_OAM_SQUARE; sprite->oam.shape = SPRITE_SHAPE(16x16);
sprite->oam.size = ST_OAM_SIZE_1; sprite->oam.size = SPRITE_SIZE(16x16);
} }
if (++sprite->data[1] == 15) if (++sprite->data[1] == 15)
DestroySprite(sprite); DestroySprite(sprite);
} }
// The horizontal bands of electricity used in Thunder Wave
static void AnimThunderWave(struct Sprite *sprite) static void AnimThunderWave(struct Sprite *sprite)
{ {
u8 spriteId; u8 spriteId;
@@ -756,11 +759,11 @@ static void AnimThunderWave(struct Sprite *sprite)
spriteId = CreateSprite(&gThunderWaveSpriteTemplate, sprite->x + 32, sprite->y, sprite->subpriority); spriteId = CreateSprite(&gThunderWaveSpriteTemplate, sprite->x + 32, sprite->y, sprite->subpriority);
gSprites[spriteId].oam.tileNum += 8; gSprites[spriteId].oam.tileNum += 8;
++gAnimVisualTaskCount; ++gAnimVisualTaskCount;
gSprites[spriteId].callback = sub_80AE4F4; gSprites[spriteId].callback = AnimThunderWave_Step;
sprite->callback = sub_80AE4F4; sprite->callback = AnimThunderWave_Step;
} }
static void sub_80AE4F4(struct Sprite *sprite) static void AnimThunderWave_Step(struct Sprite *sprite)
{ {
if (++sprite->data[0] == 3) if (++sprite->data[0] == 3)
{ {
@@ -771,6 +774,7 @@ static void sub_80AE4F4(struct Sprite *sprite)
DestroyAnimSprite(sprite); DestroyAnimSprite(sprite);
} }
// Animates small electric orbs moving from around the battler inward. For Charge/Shock Wave
void AnimTask_ElectricChargingParticles(u8 taskId) void AnimTask_ElectricChargingParticles(u8 taskId)
{ {
struct Task *task = &gTasks[taskId]; struct Task *task = &gTasks[taskId];
@@ -793,10 +797,10 @@ void AnimTask_ElectricChargingParticles(u8 taskId)
task->data[11] = gBattleAnimArgs[3]; task->data[11] = gBattleAnimArgs[3];
task->data[12] = 0; task->data[12] = 0;
task->data[13] = gBattleAnimArgs[2]; task->data[13] = gBattleAnimArgs[2];
task->func = sub_80AE5BC; task->func = AnimTask_ElectricChargingParticles_Step;
} }
static void sub_80AE5BC(u8 taskId) static void AnimTask_ElectricChargingParticles_Step(u8 taskId)
{ {
struct Task *task = &gTasks[taskId]; struct Task *task = &gTasks[taskId];
@@ -821,7 +825,7 @@ static void sub_80AE5BC(u8 taskId)
sprite->data[4] = task->data[15]; sprite->data[4] = task->data[15];
sprite->data[5] = taskId; sprite->data[5] = taskId;
InitAnimLinearTranslation(sprite); InitAnimLinearTranslation(sprite);
StoreSpriteCallbackInData6(sprite, sub_80AE704); StoreSpriteCallbackInData6(sprite, AnimElectricChargingParticles);
sprite->callback = RunStoredCallbackWhenAnimEnds; sprite->callback = RunStoredCallbackWhenAnimEnds;
if (++task->data[9] > 15) if (++task->data[9] > 15)
task->data[9] = 0; task->data[9] = 0;
@@ -842,7 +846,7 @@ static void sub_80AE5BC(u8 taskId)
} }
} }
static void sub_80AE6D0(struct Sprite *sprite) static void AnimElectricChargingParticles_Step(struct Sprite *sprite)
{ {
if (AnimTranslateLinear(sprite)) if (AnimTranslateLinear(sprite))
{ {
@@ -851,15 +855,15 @@ static void sub_80AE6D0(struct Sprite *sprite)
} }
} }
static void sub_80AE704(struct Sprite *sprite) static void AnimElectricChargingParticles(struct Sprite *sprite)
{ {
StartSpriteAnim(sprite, 1); StartSpriteAnim(sprite, 1);
sprite->callback = sub_80AE6D0; sprite->callback = AnimElectricChargingParticles_Step;
} }
static void AnimGrowingChargeOrb(struct Sprite *sprite) static void AnimGrowingChargeOrb(struct Sprite *sprite)
{ {
if (!gBattleAnimArgs[0]) if (gBattleAnimArgs[0] == ANIM_ATTACKER)
{ {
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
@@ -873,9 +877,10 @@ static void AnimGrowingChargeOrb(struct Sprite *sprite)
sprite->callback = RunStoredCallbackWhenAffineAnimEnds; sprite->callback = RunStoredCallbackWhenAffineAnimEnds;
} }
// The quick electric burst at the end of Charge / during the Volt Tackle hit
static void AnimElectricPuff(struct Sprite *sprite) static void AnimElectricPuff(struct Sprite *sprite)
{ {
if (!gBattleAnimArgs[0]) if (gBattleAnimArgs[0] == ANIM_ATTACKER)
{ {
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
@@ -891,6 +896,7 @@ static void AnimElectricPuff(struct Sprite *sprite)
sprite->callback = RunStoredCallbackWhenAnimEnds; sprite->callback = RunStoredCallbackWhenAnimEnds;
} }
// Creates an orb of electricity that grows then slides off-screen. The attacker slides with it
static void AnimVoltTackleOrbSlide(struct Sprite *sprite) static void AnimVoltTackleOrbSlide(struct Sprite *sprite)
{ {
StartSpriteAffineAnim(sprite, 1); StartSpriteAffineAnim(sprite, 1);
@@ -900,10 +906,10 @@ static void AnimVoltTackleOrbSlide(struct Sprite *sprite)
sprite->data[7] = 16; sprite->data[7] = 16;
if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT) if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT)
sprite->data[7] *= -1; sprite->data[7] *= -1;
sprite->callback = sub_80AE83C; sprite->callback = AnimVoltTackleOrbSlide_Step;
} }
static void sub_80AE83C(struct Sprite *sprite) static void AnimVoltTackleOrbSlide_Step(struct Sprite *sprite)
{ {
switch (sprite->data[0]) switch (sprite->data[0])
{ {
@@ -975,6 +981,7 @@ void AnimTask_VoltTackleAttackerReappear(u8 taskId)
} }
} }
// The horizontal bolts of electricity for Volt Tackle
void AnimTask_VoltTackleBolt(u8 taskId) void AnimTask_VoltTackleBolt(u8 taskId)
{ {
struct Task *task = &gTasks[taskId]; struct Task *task = &gTasks[taskId];
@@ -1036,7 +1043,7 @@ void AnimTask_VoltTackleBolt(u8 taskId)
if (++task->data[2] > 0) if (++task->data[2] > 0)
{ {
task->data[2] = 0; task->data[2] = 0;
if (sub_80AEB98(task, taskId) || sub_80AEB98(task, taskId)) if (CreateVoltTackleBolt(task, taskId) || CreateVoltTackleBolt(task, taskId))
++task->data[0]; ++task->data[0];
} }
break; break;
@@ -1047,7 +1054,7 @@ void AnimTask_VoltTackleBolt(u8 taskId)
} }
} }
static bool8 sub_80AEB98(struct Task *task, u8 taskId) static bool8 CreateVoltTackleBolt(struct Task *task, u8 taskId)
{ {
u8 spriteId = CreateSprite(&gVoltTackleBoltSpriteTemplate, task->data[3], task->data[5], 35); u8 spriteId = CreateSprite(&gVoltTackleBoltSpriteTemplate, task->data[3], task->data[5], 35);
@@ -1112,7 +1119,7 @@ void AnimTask_ShockWaveProgressingBolt(u8 taskId)
task->data[4] = 7; task->data[4] = 7;
task->data[5] = -1; task->data[5] = -1;
task->data[11] = 12; task->data[11] = 12;
task->data[12] = BattleAnimAdjustPanning(task->data[11] - 76); task->data[12] = BattleAnimAdjustPanning(SOUND_PAN_ATTACKER);
task->data[13] = BattleAnimAdjustPanning(SOUND_PAN_TARGET); task->data[13] = BattleAnimAdjustPanning(SOUND_PAN_TARGET);
task->data[14] = task->data[12]; task->data[14] = task->data[12];
task->data[15] = (task->data[13] - task->data[12]) / 3; task->data[15] = (task->data[13] - task->data[12]) / 3;
@@ -1122,7 +1129,7 @@ void AnimTask_ShockWaveProgressingBolt(u8 taskId)
if (++task->data[1] > 0) if (++task->data[1] > 0)
{ {
task->data[1] = 0; task->data[1] = 0;
if (sub_80AEE74(task, taskId)) if (CreateShockWaveBoltSprite(task, taskId))
{ {
if (task->data[2] == 5) if (task->data[2] == 5)
task->data[0] = 3; task->data[0] = 3;
@@ -1172,7 +1179,7 @@ void AnimTask_ShockWaveProgressingBolt(u8 taskId)
} }
} }
static bool8 sub_80AEE74(struct Task *task, u8 taskId) static bool8 CreateShockWaveBoltSprite(struct Task *task, u8 taskId)
{ {
u8 spriteId = CreateSprite(&sShockWaveProgressingBoltSpriteTemplate, task->data[6], task->data[7], 35); u8 spriteId = CreateSprite(&sShockWaveProgressingBoltSpriteTemplate, task->data[6], task->data[7], 35);
if (spriteId != MAX_SPRITES) if (spriteId != MAX_SPRITES)
@@ -1206,6 +1213,7 @@ static bool8 sub_80AEE74(struct Task *task, u8 taskId)
} }
} }
// Just runs timer for sprite. See AnimTask_ShockWaveProgressingBolt
static void AnimShockWaveProgressingBolt(struct Sprite *sprite) static void AnimShockWaveProgressingBolt(struct Sprite *sprite)
{ {
if (++sprite->data[0] > 12) if (++sprite->data[0] > 12)
@@ -1234,7 +1242,7 @@ void AnimTask_ShockWaveLightning(u8 taskId)
if (++task->data[1] > 1) if (++task->data[1] > 1)
{ {
task->data[1] = 0; task->data[1] = 0;
if (sub_80AF058(task, taskId)) if (CreateShockWaveLightningSprite(task, taskId))
++task->data[0]; ++task->data[0];
} }
break; break;
@@ -1245,13 +1253,13 @@ void AnimTask_ShockWaveLightning(u8 taskId)
} }
} }
static bool8 sub_80AF058(struct Task *task, u8 taskId) static bool8 CreateShockWaveLightningSprite(struct Task *task, u8 taskId)
{ {
u8 spriteId = CreateSprite(&gLightningSpriteTemplate, task->data[13], task->data[14], task->data[12]); u8 spriteId = CreateSprite(&gLightningSpriteTemplate, task->data[13], task->data[14], task->data[12]);
if (spriteId != MAX_SPRITES) if (spriteId != MAX_SPRITES)
{ {
gSprites[spriteId].callback = sub_80AF0C8; gSprites[spriteId].callback = AnimShockWaveLightning;
gSprites[spriteId].data[6] = taskId; gSprites[spriteId].data[6] = taskId;
gSprites[spriteId].data[7] = 10; gSprites[spriteId].data[7] = 10;
++task->data[10]; ++task->data[10];
@@ -1262,7 +1270,7 @@ static bool8 sub_80AF058(struct Task *task, u8 taskId)
return FALSE; return FALSE;
} }
static void sub_80AF0C8(struct Sprite *sprite) static void AnimShockWaveLightning(struct Sprite *sprite)
{ {
if (sprite->animEnded) if (sprite->animEnded)
{ {
+1 -1
View File
@@ -392,7 +392,7 @@ static void SetCallbackToStoredInData6(struct Sprite *sprite)
// x = a * sin(theta0 + dtheta * t) // x = a * sin(theta0 + dtheta * t)
// y = a * cos(theta0 + dtheta * t) // y = a * cos(theta0 + dtheta * t)
void TranslateSpriteInCircleOverDuration(struct Sprite *sprite) void TranslateSpriteInCircle(struct Sprite *sprite)
{ {
if (sprite->data[3]) if (sprite->data[3])
{ {