Sync battle anim - poison, psychic
This commit is contained in:
+12
-12
@@ -7,10 +7,10 @@ static void AnimAcidPoisonBubble(struct Sprite *sprite);
|
||||
static void AnimSludgeBombHitParticle(struct Sprite *sprite);
|
||||
static void AnimAcidPoisonDroplet(struct Sprite *sprite);
|
||||
static void AnimBubbleEffect(struct Sprite *sprite);
|
||||
static void sub_80B1684(struct Sprite *sprite);
|
||||
static void sub_80B1728(struct Sprite *sprite);
|
||||
static void sub_80B1798(struct Sprite *sprite);
|
||||
static void AnimBubbleEffectStep(struct Sprite *sprite);
|
||||
static void AnimSludgeProjectile_Step(struct Sprite *sprite);
|
||||
static void AnimAcidPoisonBubble_Step(struct Sprite *sprite);
|
||||
static void AnimSludgeBombHitParticle_Step(struct Sprite *sprite);
|
||||
static void AnimBubbleEffect_Step(struct Sprite *sprite);
|
||||
|
||||
static const union AnimCmd sAnim_ToxicBubble[] =
|
||||
{
|
||||
@@ -194,10 +194,10 @@ static void AnimSludgeProjectile(struct Sprite *sprite)
|
||||
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
|
||||
sprite->data[5] = -30;
|
||||
InitAnimArcTranslation(sprite);
|
||||
sprite->callback = sub_80B1684;
|
||||
sprite->callback = AnimSludgeProjectile_Step;
|
||||
}
|
||||
|
||||
static void sub_80B1684(struct Sprite *sprite)
|
||||
static void AnimSludgeProjectile_Step(struct Sprite *sprite)
|
||||
{
|
||||
if (TranslateAnimHorizontalArc(sprite))
|
||||
DestroyAnimSprite(sprite);
|
||||
@@ -218,10 +218,10 @@ static void AnimAcidPoisonBubble(struct Sprite *sprite)
|
||||
sprite->data[4] = l2 + gBattleAnimArgs[5];
|
||||
sprite->data[5] = -30;
|
||||
InitAnimArcTranslation(sprite);
|
||||
sprite->callback = sub_80B1728;
|
||||
sprite->callback = AnimAcidPoisonBubble_Step;
|
||||
}
|
||||
|
||||
static void sub_80B1728(struct Sprite *sprite)
|
||||
static void AnimAcidPoisonBubble_Step(struct Sprite *sprite)
|
||||
{
|
||||
if (TranslateAnimHorizontalArc(sprite))
|
||||
DestroyAnimSprite(sprite);
|
||||
@@ -237,10 +237,10 @@ static void AnimSludgeBombHitParticle(struct Sprite *sprite)
|
||||
InitSpriteDataForLinearTranslation(sprite);
|
||||
sprite->data[5] = sprite->data[1] / gBattleAnimArgs[2];
|
||||
sprite->data[6] = sprite->data[2] / gBattleAnimArgs[2];
|
||||
sprite->callback = sub_80B1798;
|
||||
sprite->callback = AnimSludgeBombHitParticle_Step;
|
||||
}
|
||||
|
||||
static void sub_80B1798(struct Sprite *sprite)
|
||||
static void AnimSludgeBombHitParticle_Step(struct Sprite *sprite)
|
||||
{
|
||||
TranslateSpriteLinearFixedPoint(sprite);
|
||||
sprite->data[1] -= sprite->data[5];
|
||||
@@ -284,10 +284,10 @@ static void AnimBubbleEffect(struct Sprite *sprite)
|
||||
sprite->x += gBattleAnimArgs[0];
|
||||
sprite->y += gBattleAnimArgs[1];
|
||||
}
|
||||
sprite->callback = AnimBubbleEffectStep;
|
||||
sprite->callback = AnimBubbleEffect_Step;
|
||||
}
|
||||
|
||||
static void AnimBubbleEffectStep(struct Sprite *sprite)
|
||||
static void AnimBubbleEffect_Step(struct Sprite *sprite)
|
||||
{
|
||||
sprite->data[0] = (sprite->data[0] + 0xB) & 0xFF;
|
||||
sprite->x2 = Sin(sprite->data[0], 4);
|
||||
|
||||
+53
-44
@@ -12,18 +12,18 @@ static void AnimQuestionMark(struct Sprite *sprite);
|
||||
static void AnimRedX(struct Sprite *sprite);
|
||||
static void AnimSkillSwapOrb(struct Sprite *sprite);
|
||||
static void AnimPsychoBoost(struct Sprite *sprite);
|
||||
static void sub_80B300C(struct Sprite *sprite);
|
||||
static void sub_80B3044(struct Sprite *sprite);
|
||||
static void sub_80B30B0(struct Sprite *sprite);
|
||||
static void sub_80B3168(struct Sprite *sprite);
|
||||
static void sub_80B3384(struct Sprite *sprite);
|
||||
static void sub_80B33B8(struct Sprite *sprite);
|
||||
static void sub_80B3454(u8 taskId);
|
||||
static void sub_80B34DC(u8 taskId);
|
||||
static void sub_80B3618(u8 taskId);
|
||||
static void sub_80B3980(u8 taskId);
|
||||
static void sub_80B3B78(u8 taskId);
|
||||
static void sub_80B3D78(u8 taskId);
|
||||
static void AnimDefensiveWall_Step2(struct Sprite *sprite);
|
||||
static void AnimDefensiveWall_Step3(struct Sprite *sprite);
|
||||
static void AnimDefensiveWall_Step4(struct Sprite *sprite);
|
||||
static void AnimDefensiveWall_Step5(struct Sprite *sprite);
|
||||
static void AnimQuestionMark_Step1(struct Sprite *sprite);
|
||||
static void AnimQuestionMark_Step2(struct Sprite *sprite);
|
||||
static void AnimTask_MeditateStretchAttacker_Step(u8 taskId);
|
||||
static void AnimTask_Teleport_Step(u8 taskId);
|
||||
static void AnimTask_ImprisonOrbs_Step(u8 taskId);
|
||||
static void AnimTask_SkillSwap_Step(u8 taskId);
|
||||
static void AnimTask_ExtrasensoryDistortion_Step(u8 taskId);
|
||||
static void AnimTask_TransparentCloneGrowAndShrink_Step(u8 taskId);
|
||||
|
||||
static const union AffineAnimCmd sAffineAnim_PsychUpSpiral[] =
|
||||
{
|
||||
@@ -415,6 +415,7 @@ const struct SpriteTemplate gPsychoBoostOrbSpriteTemplate =
|
||||
.callback = AnimPsychoBoost,
|
||||
};
|
||||
|
||||
// For the rectangular wall sprite used by Reflect, Mirror Coat, etc
|
||||
static void AnimDefensiveWall(struct Sprite *sprite)
|
||||
{
|
||||
if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER || IsContest())
|
||||
@@ -459,20 +460,22 @@ static void AnimDefensiveWall(struct Sprite *sprite)
|
||||
if (IsContest())
|
||||
sprite->y += 9;
|
||||
sprite->data[0] = 256 + IndexOfSpritePaletteTag(gBattleAnimArgs[2]) * 16;
|
||||
sprite->callback = sub_80B300C;
|
||||
sub_80B300C(sprite);
|
||||
sprite->callback = AnimDefensiveWall_Step2;
|
||||
sprite->callback(sprite);
|
||||
}
|
||||
|
||||
static void sub_80B300C(struct Sprite *sprite)
|
||||
// AnimDefensiveWall_Step1 is removed in FRLG from the removal of Contest handling
|
||||
|
||||
static void AnimDefensiveWall_Step2(struct Sprite *sprite)
|
||||
{
|
||||
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[3], 16 - sprite->data[3]));
|
||||
if (sprite->data[3] == 13)
|
||||
sprite->callback = sub_80B3044;
|
||||
sprite->callback = AnimDefensiveWall_Step3;
|
||||
else
|
||||
++sprite->data[3];
|
||||
}
|
||||
|
||||
static void sub_80B3044(struct Sprite *sprite)
|
||||
static void AnimDefensiveWall_Step3(struct Sprite *sprite)
|
||||
{
|
||||
u16 color;
|
||||
u16 startOffset;
|
||||
@@ -487,11 +490,11 @@ static void sub_80B3044(struct Sprite *sprite)
|
||||
gPlttBufferFaded[startOffset + i] = gPlttBufferFaded[startOffset + i - 1];
|
||||
gPlttBufferFaded[startOffset + 1] = color;
|
||||
if (++sprite->data[2] == 16)
|
||||
sprite->callback = sub_80B30B0;
|
||||
sprite->callback = AnimDefensiveWall_Step4;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80B30B0(struct Sprite *sprite)
|
||||
static void AnimDefensiveWall_Step4(struct Sprite *sprite)
|
||||
{
|
||||
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[3], 16 - sprite->data[3]));
|
||||
if (--sprite->data[3] == -1)
|
||||
@@ -508,11 +511,11 @@ static void sub_80B30B0(struct Sprite *sprite)
|
||||
gSprites[gBattlerSpriteIds[battler]].invisible = FALSE;
|
||||
}
|
||||
sprite->invisible = TRUE;
|
||||
sprite->callback = sub_80B3168;
|
||||
sprite->callback = AnimDefensiveWall_Step5;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80B3168(struct Sprite *sprite)
|
||||
static void AnimDefensiveWall_Step5(struct Sprite *sprite)
|
||||
{
|
||||
if (!IsContest())
|
||||
{
|
||||
@@ -531,13 +534,14 @@ static void sub_80B3168(struct Sprite *sprite)
|
||||
sprite->callback = DestroyAnimSprite;
|
||||
}
|
||||
|
||||
// Animates the sparkle that appears during Reflect or Light Screen/Mirror Coat
|
||||
static void AnimWallSparkle(struct Sprite *sprite)
|
||||
{
|
||||
if (sprite->data[0] == 0)
|
||||
{
|
||||
int arg3 = gBattleAnimArgs[3];
|
||||
bool32 ignoreOffsets = gBattleAnimArgs[3];
|
||||
bool8 respectMonPicOffsets = FALSE;
|
||||
if (arg3 == 0)
|
||||
if (!ignoreOffsets)
|
||||
respectMonPicOffsets = TRUE;
|
||||
if (!IsContest() && IsDoubleBattle())
|
||||
{
|
||||
@@ -589,6 +593,7 @@ static void AnimBentSpoon(struct Sprite *sprite)
|
||||
sprite->callback = RunStoredCallbackWhenAnimEnds;
|
||||
}
|
||||
|
||||
// Used by Amnesia
|
||||
static void AnimQuestionMark(struct Sprite *sprite)
|
||||
{
|
||||
s16 x = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_WIDTH) / 2;
|
||||
@@ -600,20 +605,20 @@ static void AnimQuestionMark(struct Sprite *sprite)
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + y;
|
||||
if (sprite->y < 16)
|
||||
sprite->y = 16;
|
||||
StoreSpriteCallbackInData6(sprite, sub_80B3384);
|
||||
StoreSpriteCallbackInData6(sprite, AnimQuestionMark_Step1);
|
||||
sprite->callback = RunStoredCallbackWhenAnimEnds;
|
||||
}
|
||||
|
||||
static void sub_80B3384(struct Sprite *sprite)
|
||||
static void AnimQuestionMark_Step1(struct Sprite *sprite)
|
||||
{
|
||||
sprite->oam.affineMode = ST_OAM_AFFINE_NORMAL;
|
||||
sprite->affineAnims = sAffineAnims_QuestionMark;
|
||||
sprite->data[0] = 0;
|
||||
InitSpriteAffineAnim(sprite);
|
||||
sprite->callback = sub_80B33B8;
|
||||
sprite->callback = AnimQuestionMark_Step2;
|
||||
}
|
||||
|
||||
static void sub_80B33B8(struct Sprite *sprite)
|
||||
static void AnimQuestionMark_Step2(struct Sprite *sprite)
|
||||
{
|
||||
switch (sprite->data[0])
|
||||
{
|
||||
@@ -640,10 +645,10 @@ void AnimTask_MeditateStretchAttacker(u8 taskId)
|
||||
|
||||
task->data[0] = spriteId;
|
||||
PrepareAffineAnimInTaskData(task, spriteId, sAffineAnim_MeditateStretchAttacker);
|
||||
task->func = sub_80B3454;
|
||||
task->func = AnimTask_MeditateStretchAttacker_Step;
|
||||
}
|
||||
|
||||
static void sub_80B3454(u8 taskId)
|
||||
static void AnimTask_MeditateStretchAttacker_Step(u8 taskId)
|
||||
{
|
||||
if (!RunAffineAnimFromTaskData(&gTasks[taskId]))
|
||||
DestroyAnimVisualTask(taskId);
|
||||
@@ -659,10 +664,10 @@ void AnimTask_Teleport(u8 taskId)
|
||||
task->data[2] = 0;
|
||||
task->data[3] = GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER ? 4 : 8;
|
||||
PrepareAffineAnimInTaskData(task, task->data[0], sAffineAnim_Teleport);
|
||||
task->func = sub_80B34DC;
|
||||
task->func = AnimTask_Teleport_Step;
|
||||
}
|
||||
|
||||
static void sub_80B34DC(u8 taskId)
|
||||
static void AnimTask_Teleport_Step(u8 taskId)
|
||||
{
|
||||
struct Task *task = &gTasks[taskId];
|
||||
|
||||
@@ -682,7 +687,7 @@ static void sub_80B34DC(u8 taskId)
|
||||
else
|
||||
{
|
||||
gSprites[task->data[0]].invisible = TRUE;
|
||||
gSprites[task->data[0]].x = 272;
|
||||
gSprites[task->data[0]].x = DISPLAY_WIDTH + 32;
|
||||
ResetSpriteRotScale(task->data[0]);
|
||||
DestroyAnimVisualTask(taskId);
|
||||
}
|
||||
@@ -704,10 +709,10 @@ void AnimTask_ImprisonOrbs(u8 taskId)
|
||||
task->data[12] = var0 > var1 ? var0 : var1;
|
||||
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND);
|
||||
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 0));
|
||||
task->func = sub_80B3618;
|
||||
task->func = AnimTask_ImprisonOrbs_Step;
|
||||
}
|
||||
|
||||
static void sub_80B3618(u8 taskId)
|
||||
static void AnimTask_ImprisonOrbs_Step(u8 taskId)
|
||||
{
|
||||
u16 i;
|
||||
u8 spriteId;
|
||||
@@ -757,7 +762,7 @@ static void sub_80B3618(u8 taskId)
|
||||
if (++task->data[1] == 32)
|
||||
{
|
||||
for (i = 8; i < 13; ++i)
|
||||
if (task->data[i] != 64)
|
||||
if (task->data[i] != MAX_SPRITES)
|
||||
DestroySprite(&gSprites[task->data[i]]);
|
||||
++task->data[0];
|
||||
}
|
||||
@@ -773,7 +778,7 @@ static void sub_80B3618(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80B37A4(struct Sprite *sprite)
|
||||
static void AnimRedX_Step(struct Sprite *sprite)
|
||||
{
|
||||
if (sprite->data[1] > sprite->data[0] - 10)
|
||||
sprite->invisible = sprite->data[1] & 1;
|
||||
@@ -790,7 +795,7 @@ static void AnimRedX(struct Sprite *sprite)
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
|
||||
}
|
||||
sprite->data[0] = gBattleAnimArgs[1];
|
||||
sprite->callback = sub_80B37A4;
|
||||
sprite->callback = AnimRedX_Step;
|
||||
}
|
||||
|
||||
void AnimTask_SkillSwap(u8 taskId)
|
||||
@@ -799,7 +804,7 @@ void AnimTask_SkillSwap(u8 taskId)
|
||||
|
||||
if (IsContest())
|
||||
{
|
||||
if (gBattleAnimArgs[0] == 1)
|
||||
if (gBattleAnimArgs[0] == ANIM_TARGET)
|
||||
{
|
||||
task->data[10] = -10;
|
||||
task->data[11] = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_RIGHT) - 8;
|
||||
@@ -836,10 +841,10 @@ void AnimTask_SkillSwap(u8 taskId)
|
||||
}
|
||||
}
|
||||
task->data[1] = 6;
|
||||
task->func = sub_80B3980;
|
||||
task->func = AnimTask_SkillSwap_Step;
|
||||
}
|
||||
|
||||
static void sub_80B3980(u8 taskId)
|
||||
static void AnimTask_SkillSwap_Step(u8 taskId)
|
||||
{
|
||||
u8 spriteId;
|
||||
struct Task *task = &gTasks[taskId];
|
||||
@@ -881,6 +886,8 @@ static void AnimSkillSwapOrb(struct Sprite *sprite)
|
||||
}
|
||||
}
|
||||
|
||||
// The scanline effect that distorts the target during Extrasensory by segmenting the mon vertically and shifting the slices
|
||||
// arg0: Stage. Stage 0 is a slight right distortion, 1 is a medium left distortion, and 2 is a severe right distortion
|
||||
void AnimTask_ExtrasensoryDistortion(u8 taskId)
|
||||
{
|
||||
s16 i;
|
||||
@@ -932,10 +939,10 @@ void AnimTask_ExtrasensoryDistortion(u8 taskId)
|
||||
scanlineParams.initState = 1;
|
||||
scanlineParams.unused9 = 0;
|
||||
ScanlineEffect_SetParams(scanlineParams);
|
||||
task->func = sub_80B3B78;
|
||||
task->func = AnimTask_ExtrasensoryDistortion_Step;
|
||||
}
|
||||
|
||||
static void sub_80B3B78(u8 taskId)
|
||||
static void AnimTask_ExtrasensoryDistortion_Step(u8 taskId)
|
||||
{
|
||||
s16 sineIndex, i;
|
||||
struct Task *task = &gTasks[taskId];
|
||||
@@ -969,6 +976,8 @@ static void sub_80B3B78(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
// Creates a cloned transparent sprite of the battler that grows and then shrinks back to original size. Used by Extrasensory
|
||||
// arg0: battler
|
||||
void AnimTask_TransparentCloneGrowAndShrink(u8 taskId)
|
||||
{
|
||||
s16 spriteId;
|
||||
@@ -998,10 +1007,10 @@ void AnimTask_TransparentCloneGrowAndShrink(u8 taskId)
|
||||
task->data[13] = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
|
||||
task->data[14] = matrixNum;
|
||||
task->data[15] = spriteId;
|
||||
task->func = sub_80B3D78;
|
||||
task->func = AnimTask_TransparentCloneGrowAndShrink_Step;
|
||||
}
|
||||
|
||||
static void sub_80B3D78(u8 taskId)
|
||||
static void AnimTask_TransparentCloneGrowAndShrink_Step(u8 taskId)
|
||||
{
|
||||
struct Task *task = &gTasks[taskId];
|
||||
|
||||
|
||||
Reference in New Issue
Block a user