summaryrefslogtreecommitdiff
path: root/src/battle_anim_effects_1.c
diff options
context:
space:
mode:
authorDiegoisawesome <diego@domoreaweso.me>2018-12-25 15:03:13 -0600
committerDiegoisawesome <diego@domoreaweso.me>2018-12-25 15:03:13 -0600
commitd8948a5cda2e385c1d4b5c6190c4fe0fb53359fb (patch)
treefa882b0733f88cc17dcbaef8c25c30c7198bdca1 /src/battle_anim_effects_1.c
parentdea41e1a7e6e73789431153d6c28dac3a3a73ac6 (diff)
parenta54aa03d20dacc88879404b87a5f6a7eb7babc54 (diff)
Merge remote-tracking branch 'pret/master' into trade
Diffstat (limited to 'src/battle_anim_effects_1.c')
-rw-r--r--src/battle_anim_effects_1.c609
1 files changed, 348 insertions, 261 deletions
diff --git a/src/battle_anim_effects_1.c b/src/battle_anim_effects_1.c
index 3b1b49e34..e37d2b5b8 100644
--- a/src/battle_anim_effects_1.c
+++ b/src/battle_anim_effects_1.c
@@ -19,28 +19,28 @@
EWRAM_DATA s16 gUnknown_0203A0F8[4] = {0};
void AnimMovePowderParticle(struct Sprite *);
-void sub_80FE8E0(struct Sprite *);
-void sub_80FE930(struct Sprite *);
-void sub_80FE988(struct Sprite *);
-void sub_80FEAD8(struct Sprite *);
-void sub_80FEB44(struct Sprite *);
-void sub_80FED28(struct Sprite *);
-void sub_80FEE78(struct Sprite *);
-void sub_80FEF44(struct Sprite *);
-void sub_80FEFFC(struct Sprite *);
+void AnimPowerAbsorptionOrb(struct Sprite *);
+void AnimSolarbeamBigOrb(struct Sprite *);
+void AnimSolarbeamSmallOrb(struct Sprite *);
+void AnimAbsorptionOrb(struct Sprite *);
+void AnimHyperBeamOrb(struct Sprite *);
+void AnimSporeParticle(struct Sprite *);
+void AnimPetalDanceBigFlower(struct Sprite *);
+void AnimPetalDanceSmallFlower(struct Sprite *);
+void AnimRazorLeafParticle(struct Sprite *);
void AnimLeechSeed(struct Sprite *);
void AnimTranslateLinearSingleSineWave(struct Sprite *);
void AnimMoveTwisterParticle(struct Sprite *);
-void sub_80FF374(struct Sprite *);
-void sub_80FF698(struct Sprite *);
-void sub_80FF768(struct Sprite *);
-void sub_80FF7EC(struct Sprite *);
-void sub_80FF934(struct Sprite *);
-void sub_80FFB18(struct Sprite *);
-void sub_80FFBF4(struct Sprite *);
-void sub_80FFC70(struct Sprite *);
-void sub_80FFCB4(struct Sprite *);
-void sub_80FFDBC(struct Sprite *);
+void AnimConstrictBinding(struct Sprite *);
+void AnimMimicOrb(struct Sprite *);
+void AnimIngrainRoot(struct Sprite *);
+void AnimFrenzyPlantRoot(struct Sprite *);
+void AnimIngrainOrb(struct Sprite *);
+void AnimPresent(struct Sprite *);
+void AnimKnockOffItem(struct Sprite *);
+void AnimPresentHealParticle(struct Sprite *);
+void AnimItemSteal(struct Sprite *);
+void AnimTrickBag(struct Sprite *);
void sub_8100640(struct Sprite *);
void sub_8100898(struct Sprite *);
void sub_81009F8(struct Sprite *);
@@ -79,27 +79,27 @@ void sub_8103208(struct Sprite *);
void sub_8103284(struct Sprite *);
void sub_8103390(struct Sprite *);
static void AnimMovePowderParticleStep(struct Sprite *);
-static void sub_80FE9E4(struct Sprite *);
-static void sub_80FEB28(struct Sprite *);
-static void sub_80FEBFC(struct Sprite *);
+static void AnimSolarbeamSmallOrbStep(struct Sprite *);
+static void AnimAbsorptionOrbStep(struct Sprite *);
+static void AnimHyperBeamOrbStep(struct Sprite *);
static void AnimLeechSeedStep(struct Sprite *);
static void AnimLeechSeedSprouts(struct Sprite *);
-static void sub_80FED74(struct Sprite *);
-static void sub_80FEECC(struct Sprite *);
-static void sub_80FEF98(struct Sprite *);
-static void sub_80FF044(struct Sprite *);
-static void sub_80FF090(struct Sprite *);
+static void AnimSporeParticleStep(struct Sprite *);
+static void AnimPetalDanceBigFlowerStep(struct Sprite *);
+static void AnimPetalDanceSmallFlowerStep(struct Sprite *);
+static void AnimRazorLeafParticleStep1(struct Sprite *);
+static void AnimRazorLeafParticleStep2(struct Sprite *);
static void AnimTranslateLinearSingleSineWaveStep(struct Sprite *);
static void AnimMoveTwisterParticleStep(struct Sprite *);
-static void sub_80FF3B0(struct Sprite *);
-static void sub_80FF3EC(struct Sprite *);
+static void AnimConstrictBindingStep1(struct Sprite *);
+static void AnimConstrictBindingStep2(struct Sprite *);
static void sub_80FF53C(u8);
static void sub_80FF5CC(u8);
-static void sub_80FFD2C(struct Sprite *);
-static void sub_80FF8DC(struct Sprite *);
-static void sub_80FFE58(struct Sprite *);
-static void sub_80FFEC4(struct Sprite *);
-static void sub_80FFF7C(struct Sprite *);
+static void AnimItemStealStep(struct Sprite *);
+static void AnimRootFlickerOut(struct Sprite *);
+static void AnimTrickBagStep1(struct Sprite *);
+static void AnimTrickBagStep2(struct Sprite *);
+static void AnimTrickBagStep3(struct Sprite *);
static void sub_8100128(u8);
static s16 sub_8100504(struct Sprite *);
static void sub_8100524(struct Task *, u8);
@@ -285,7 +285,7 @@ const union AffineAnimCmd *const gUnknown_085921DC[] = {
gUnknown_085921CC,
};
-const struct SpriteTemplate gUnknown_085921E0 =
+const struct SpriteTemplate gPowerAbsorptionOrbSpriteTemplate =
{
.tileTag = ANIM_TAG_ORBS,
.paletteTag = ANIM_TAG_ORBS,
@@ -293,10 +293,10 @@ const struct SpriteTemplate gUnknown_085921E0 =
.anims = gUnknown_085921C8,
.images = NULL,
.affineAnims = gUnknown_085921DC,
- .callback = sub_80FE8E0,
+ .callback = AnimPowerAbsorptionOrb,
};
-const struct SpriteTemplate gUnknown_085921F8 =
+const struct SpriteTemplate gSolarbeamBigOrbSpriteTemplate =
{
.tileTag = ANIM_TAG_ORBS,
.paletteTag = ANIM_TAG_ORBS,
@@ -304,10 +304,10 @@ const struct SpriteTemplate gUnknown_085921F8 =
.anims = gUnknown_085921A8,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80FE930,
+ .callback = AnimSolarbeamBigOrb,
};
-const struct SpriteTemplate gUnknown_08592210 =
+const struct SpriteTemplate gSolarbeamSmallOrbSpriteTemplate =
{
.tileTag = ANIM_TAG_ORBS,
.paletteTag = ANIM_TAG_ORBS,
@@ -315,7 +315,7 @@ const struct SpriteTemplate gUnknown_08592210 =
.anims = gUnknown_085921C4,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80FE988,
+ .callback = AnimSolarbeamSmallOrb,
};
const union AffineAnimCmd gUnknown_08592228[] = {
@@ -328,7 +328,7 @@ const union AffineAnimCmd *const gUnknown_08592240[] = {
gUnknown_08592228,
};
-const struct SpriteTemplate gUnknown_08592244 =
+const struct SpriteTemplate gStockpileAbsorptionOrbSpriteTemplate =
{
.tileTag = ANIM_TAG_GRAY_ORB,
.paletteTag = ANIM_TAG_GRAY_ORB,
@@ -336,7 +336,7 @@ const struct SpriteTemplate gUnknown_08592244 =
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_08592240,
- .callback = sub_80FE8E0,
+ .callback = AnimPowerAbsorptionOrb,
};
const union AffineAnimCmd gUnknown_0859225C[] = {
@@ -348,7 +348,7 @@ const union AffineAnimCmd *const gUnknown_0859226C[] = {
gUnknown_0859225C,
};
-const struct SpriteTemplate gUnknown_08592270 =
+const struct SpriteTemplate gAbsorptionOrbSpriteTemplate =
{
.tileTag = ANIM_TAG_ORBS,
.paletteTag = ANIM_TAG_ORBS,
@@ -356,10 +356,10 @@ const struct SpriteTemplate gUnknown_08592270 =
.anims = gUnknown_085921C8,
.images = NULL,
.affineAnims = gUnknown_0859226C,
- .callback = sub_80FEAD8,
+ .callback = AnimAbsorptionOrb,
};
-const struct SpriteTemplate gUnknown_08592288 =
+const struct SpriteTemplate gHyperBeamOrbSpriteTemplate =
{
.tileTag = ANIM_TAG_ORBS,
.paletteTag = ANIM_TAG_ORBS,
@@ -367,7 +367,7 @@ const struct SpriteTemplate gUnknown_08592288 =
.anims = gUnknown_085921A8,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80FEB44,
+ .callback = AnimHyperBeamOrb,
};
const union AnimCmd gUnknown_085922A0[] =
@@ -418,7 +418,7 @@ const union AnimCmd *const gUnknown_085922E4[] =
gUnknown_085922DC,
};
-const struct SpriteTemplate gUnknown_085922EC =
+const struct SpriteTemplate gSporeParticleSpriteTemplate =
{
.tileTag = ANIM_TAG_SPORE,
.paletteTag = ANIM_TAG_SPORE,
@@ -426,7 +426,7 @@ const struct SpriteTemplate gUnknown_085922EC =
.anims = gUnknown_085922E4,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80FED28,
+ .callback = AnimSporeParticle,
};
const union AnimCmd gUnknown_08592304[] =
@@ -451,7 +451,7 @@ const union AnimCmd *const gUnknown_08592318[] =
gUnknown_0859230C,
};
-const struct SpriteTemplate gUnknown_0859231C =
+const struct SpriteTemplate gPetalDanceBigFlowerSpriteTemplate =
{
.tileTag = ANIM_TAG_FLOWER,
.paletteTag = ANIM_TAG_FLOWER,
@@ -459,10 +459,10 @@ const struct SpriteTemplate gUnknown_0859231C =
.anims = gUnknown_08592314,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80FEE78,
+ .callback = AnimPetalDanceBigFlower,
};
-const struct SpriteTemplate gUnknown_08592334 =
+const struct SpriteTemplate gPetalDanceSmallFlowerSpriteTemplate =
{
.tileTag = ANIM_TAG_FLOWER,
.paletteTag = ANIM_TAG_FLOWER,
@@ -470,7 +470,7 @@ const struct SpriteTemplate gUnknown_08592334 =
.anims = gUnknown_08592318,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80FEF44,
+ .callback = AnimPetalDanceSmallFlower,
};
const union AnimCmd gUnknown_0859234C[] =
@@ -502,7 +502,7 @@ const union AnimCmd *const gUnknown_08592388[] =
gUnknown_08592378,
};
-const struct SpriteTemplate gUnknown_08592390 =
+const struct SpriteTemplate gRazorLeafParticleSpriteTemplate =
{
.tileTag = ANIM_TAG_LEAF,
.paletteTag = ANIM_TAG_LEAF,
@@ -510,10 +510,10 @@ const struct SpriteTemplate gUnknown_08592390 =
.anims = gUnknown_08592388,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80FEFFC,
+ .callback = AnimRazorLeafParticle,
};
-const struct SpriteTemplate gUnknown_085923A8 =
+const struct SpriteTemplate gTwisterLeafParticleSpriteTemplate =
{
.tileTag = ANIM_TAG_LEAF,
.paletteTag = ANIM_TAG_LEAF,
@@ -538,7 +538,7 @@ const union AnimCmd *const gUnknown_085923D4[] =
gUnknown_085923C0,
};
-const struct SpriteTemplate gUnknown_085923D8 =
+const struct SpriteTemplate gRazorLeafCutterSpriteTemplate =
{
.tileTag = ANIM_TAG_RAZOR_LEAF,
.paletteTag = ANIM_TAG_RAZOR_LEAF,
@@ -594,14 +594,14 @@ const union AnimCmd *const gUnknown_08592444[] =
};
const union AffineAnimCmd gUnknown_0859244C[] = {
- AFFINEANIMCMD_FRAME(256, 256, 0, 0),
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
AFFINEANIMCMD_FRAME(-11, 0, 0, 6),
AFFINEANIMCMD_FRAME(11, 0, 0, 6),
AFFINEANIMCMD_END,
};
const union AffineAnimCmd gUnknown_0859246C[] = {
- AFFINEANIMCMD_FRAME(-256, 256, 0, 0),
+ AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0),
AFFINEANIMCMD_FRAME(11, 0, 0, 6),
AFFINEANIMCMD_FRAME(-11, 0, 0, 6),
AFFINEANIMCMD_END,
@@ -612,7 +612,7 @@ const union AffineAnimCmd *const gUnknown_0859248C[] = {
gUnknown_0859246C,
};
-const struct SpriteTemplate gUnknown_08592494 =
+const struct SpriteTemplate gConstrictBindingSpriteTemplate =
{
.tileTag = ANIM_TAG_TENDRILS,
.paletteTag = ANIM_TAG_TENDRILS,
@@ -620,7 +620,7 @@ const struct SpriteTemplate gUnknown_08592494 =
.anims = gUnknown_08592444,
.images = NULL,
.affineAnims = gUnknown_0859248C,
- .callback = sub_80FF374,
+ .callback = AnimConstrictBinding,
};
const union AffineAnimCmd gUnknown_085924AC[] = {
@@ -639,7 +639,7 @@ const union AffineAnimCmd *const gUnknown_085924D4[] = {
gUnknown_085924C4,
};
-const struct SpriteTemplate gUnknown_085924DC =
+const struct SpriteTemplate gMimicOrbSpriteTemplate =
{
.tileTag = ANIM_TAG_ORBS,
.paletteTag = ANIM_TAG_ORBS,
@@ -647,7 +647,7 @@ const struct SpriteTemplate gUnknown_085924DC =
.anims = gUnknown_085921C8,
.images = NULL,
.affineAnims = gUnknown_085924D4,
- .callback = sub_80FF698,
+ .callback = AnimMimicOrb,
};
const union AnimCmd gUnknown_085924F4[] =
@@ -692,7 +692,7 @@ const union AnimCmd *const gUnknown_0859253C[] =
gUnknown_0859252C,
};
-const struct SpriteTemplate gUnknown_0859254C =
+const struct SpriteTemplate gIngrainRootSpriteTemplate =
{
.tileTag = ANIM_TAG_ROOTS,
.paletteTag = ANIM_TAG_ROOTS,
@@ -700,10 +700,10 @@ const struct SpriteTemplate gUnknown_0859254C =
.anims = gUnknown_0859253C,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80FF768,
+ .callback = AnimIngrainRoot,
};
-const struct SpriteTemplate gUnknown_08592564 =
+const struct SpriteTemplate gFrenzyPlantRootSpriteTemplate =
{
.tileTag = ANIM_TAG_ROOTS,
.paletteTag = ANIM_TAG_ROOTS,
@@ -711,7 +711,7 @@ const struct SpriteTemplate gUnknown_08592564 =
.anims = gUnknown_0859253C,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80FF7EC,
+ .callback = AnimFrenzyPlantRoot,
};
const union AnimCmd gUnknown_0859257C[] =
@@ -726,7 +726,7 @@ const union AnimCmd *const gUnknown_08592588[] =
gUnknown_0859257C,
};
-const struct SpriteTemplate gUnknown_0859258C =
+const struct SpriteTemplate gIngrainOrbSpriteTemplate =
{
.tileTag = ANIM_TAG_ORBS,
.paletteTag = ANIM_TAG_ORBS,
@@ -734,7 +734,7 @@ const struct SpriteTemplate gUnknown_0859258C =
.anims = gUnknown_08592588,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80FF934,
+ .callback = AnimIngrainOrb,
};
const union AnimCmd gUnknown_085925A4[] =
@@ -770,7 +770,7 @@ const union AffineAnimCmd *const gUnknown_08592608[] = {
gUnknown_085925D0,
};
-const struct SpriteTemplate gUnknown_08592610 =
+const struct SpriteTemplate gPresentSpriteTemplate =
{
.tileTag = ANIM_TAG_ITEM_BAG,
.paletteTag = ANIM_TAG_ITEM_BAG,
@@ -778,10 +778,10 @@ const struct SpriteTemplate gUnknown_08592610 =
.anims = gUnknown_085925AC,
.images = NULL,
.affineAnims = gUnknown_08592608,
- .callback = sub_80FFB18,
+ .callback = AnimPresent,
};
-const struct SpriteTemplate gBattleAnimSpriteTemplate_8592628 =
+const struct SpriteTemplate gKnockOffItemSpriteTemplate =
{
.tileTag = ANIM_TAG_ITEM_BAG,
.paletteTag = ANIM_TAG_ITEM_BAG,
@@ -789,7 +789,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_8592628 =
.anims = gUnknown_085925AC,
.images = NULL,
.affineAnims = gUnknown_08592608,
- .callback = sub_80FFBF4,
+ .callback = AnimKnockOffItem,
};
const union AnimCmd gUnknown_08592640[] =
@@ -806,7 +806,7 @@ const union AnimCmd *const gUnknown_08592654[] =
gUnknown_08592640,
};
-const struct SpriteTemplate gUnknown_08592658 =
+const struct SpriteTemplate gPresentHealParticleSpriteTemplate =
{
.tileTag = ANIM_TAG_GREEN_SPARKLE,
.paletteTag = ANIM_TAG_GREEN_SPARKLE,
@@ -814,10 +814,10 @@ const struct SpriteTemplate gUnknown_08592658 =
.anims = gUnknown_08592654,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80FFC70,
+ .callback = AnimPresentHealParticle,
};
-const struct SpriteTemplate gUnknown_08592670 =
+const struct SpriteTemplate gItemStealSpriteTemplate =
{
.tileTag = ANIM_TAG_ITEM_BAG,
.paletteTag = ANIM_TAG_ITEM_BAG,
@@ -825,7 +825,7 @@ const struct SpriteTemplate gUnknown_08592670 =
.anims = gUnknown_085925AC,
.images = NULL,
.affineAnims = gUnknown_08592608,
- .callback = sub_80FFCB4,
+ .callback = AnimItemSteal,
};
const union AffineAnimCmd gUnknown_08592688[] = {
@@ -851,7 +851,7 @@ const union AffineAnimCmd *const gUnknown_085926D8[] = {
gUnknown_085925D0,
};
-const struct SpriteTemplate gUnknown_085926E8 =
+const struct SpriteTemplate gTrickBagSpriteTemplate =
{
.tileTag = ANIM_TAG_ITEM_BAG,
.paletteTag = ANIM_TAG_ITEM_BAG,
@@ -859,7 +859,7 @@ const struct SpriteTemplate gUnknown_085926E8 =
.anims = gUnknown_085925AC,
.images = NULL,
.affineAnims = gUnknown_085926D8,
- .callback = sub_80FFDBC,
+ .callback = AnimTrickBag,
};
const s8 gUnknown_08592700[][3] =
@@ -2219,44 +2219,59 @@ static void AnimMovePowderParticleStep(struct Sprite* sprite)
}
}
-void sub_80FE8E0(struct Sprite* sprite)
+// Moves an energy orb towards the center of the mon.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: duration
+void AnimPowerAbsorptionOrb(struct Sprite* sprite)
{
- InitAnimSpritePos(sprite, 1);
+ InitSpritePosToAnimAttacker(sprite, TRUE);
sprite->data[0] = gBattleAnimArgs[2];
- sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
- sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
sprite->callback = StartAnimLinearTranslation;
StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
}
-void sub_80FE930(struct Sprite* sprite)
+// Moves an orb in a straight line towards the target mon.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: duration
+// arg 3: sprite anim number
+void AnimSolarbeamBigOrb(struct Sprite* sprite)
{
- InitAnimSpritePos(sprite, 1);
+ InitSpritePosToAnimAttacker(sprite, TRUE);
StartSpriteAnim(sprite, gBattleAnimArgs[3]);
sprite->data[0] = gBattleAnimArgs[2];
- sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
- sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
sprite->callback = StartAnimLinearTranslation;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
-void sub_80FE988(struct Sprite* sprite)
+// Moves a small orb in a wavy pattern towards the target mon.
+// The small orb "circles" the big orbs in AnimSolarbeamBigOrb.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: duration
+// arg 3: initial wave offset
+void AnimSolarbeamSmallOrb(struct Sprite* sprite)
{
- InitAnimSpritePos(sprite, 1);
+ InitSpritePosToAnimAttacker(sprite, TRUE);
sprite->data[0] = gBattleAnimArgs[2];
sprite->data[1] = sprite->pos1.x;
- sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
sprite->data[3] = sprite->pos1.y;
- sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
InitAnimLinearTranslation(sprite);
sprite->data[5] = gBattleAnimArgs[3];
- sprite->callback = sub_80FE9E4;
+ sprite->callback = AnimSolarbeamSmallOrbStep;
sprite->callback(sprite);
}
-static void sub_80FE9E4(struct Sprite* sprite)
+static void AnimSolarbeamSmallOrbStep(struct Sprite* sprite)
{
- if (TranslateAnimLinear(sprite))
+ if (AnimTranslateLinear(sprite))
{
DestroySprite(sprite);
}
@@ -2273,10 +2288,12 @@ static void sub_80FE9E4(struct Sprite* sprite)
}
}
-void sub_80FEA58(u8 taskId)
+// Creates 15 small secondary orbs used in the solarbeam anim effect.
+// There is a 7-frame delay between each of them.
+// No args.
+void AnimTask_CreateSmallSolarbeamOrbs(u8 taskId)
{
- gTasks[taskId].data[0]--;
- if (gTasks[taskId].data[0] == -1)
+ if (--gTasks[taskId].data[0] == -1)
{
gTasks[taskId].data[1]++;
gTasks[taskId].data[0] = 6;
@@ -2284,63 +2301,66 @@ void sub_80FEA58(u8 taskId)
gBattleAnimArgs[1] = 0;
gBattleAnimArgs[2] = 80;
gBattleAnimArgs[3] = 0;
- CreateSpriteAndAnimate(&gUnknown_08592210, 0, 0, GetBattlerSpriteSubpriority(gBattleAnimTarget) + 1);
+ CreateSpriteAndAnimate(&gSolarbeamSmallOrbSpriteTemplate, 0, 0, GetBattlerSpriteSubpriority(gBattleAnimTarget) + 1);
}
if (gTasks[taskId].data[1] == 15)
DestroyAnimVisualTask(taskId);
}
-void sub_80FEAD8(struct Sprite* sprite)
+// Moves an orb from the target mon to the attacking mon in an arc-like fashion.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: wave amplitude
+// arg 3: wave period (lower means faster wave)
+void AnimAbsorptionOrb(struct Sprite* sprite)
{
- sub_80A6980(sprite, TRUE);
+ InitSpritePosToAnimTarget(sprite, TRUE);
sprite->data[0] = gBattleAnimArgs[3];
- sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
- sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
sprite->data[5] = gBattleAnimArgs[2];
InitAnimArcTranslation(sprite);
- sprite->callback = sub_80FEB28;
+ sprite->callback = AnimAbsorptionOrbStep;
}
-static void sub_80FEB28(struct Sprite* sprite)
+static void AnimAbsorptionOrbStep(struct Sprite* sprite)
{
if (TranslateAnimArc(sprite))
DestroyAnimSprite(sprite);
}
-void sub_80FEB44(struct Sprite* sprite)
+// Moves an orb in a wave-like fashion towards the target mon. The wave's
+// properties and the sprite anim are randomly determined.
+void AnimHyperBeamOrb(struct Sprite* sprite)
{
- u16 a = Random2();
- u16 b;
+ u16 speed;
+ u16 animNum = Random2();
- StartSpriteAnim(sprite, a & 7);
- sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
- sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
- if (GetBattlerSide(gBattleAnimAttacker))
- {
+ StartSpriteAnim(sprite, animNum % 8);
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
sprite->pos1.x -= 20;
- }
else
- {
sprite->pos1.x += 20;
- }
- b = Random2();
- sprite->data[0] = (b & 31) + 64;
+ speed = Random2();
+ sprite->data[0] = (speed & 31) + 64;
sprite->data[1] = sprite->pos1.x;
- sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
sprite->data[3] = sprite->pos1.y;
- sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
- sub_80A7160(sprite);
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
+ InitAnimFastLinearTranslationWithSpeed(sprite);
sprite->data[5] = Random2() & 0xFF;
sprite->data[6] = sprite->subpriority;
- sprite->callback = sub_80FEBFC;
+ sprite->callback = AnimHyperBeamOrbStep;
sprite->callback(sprite);
}
-static void sub_80FEBFC(struct Sprite* sprite)
+static void AnimHyperBeamOrbStep(struct Sprite* sprite)
{
- if (sub_80A70E8(sprite))
+ if (AnimFastTranslateLinear(sprite))
{
DestroyAnimSprite(sprite);
}
@@ -2352,7 +2372,8 @@ static void sub_80FEBFC(struct Sprite* sprite)
else
sprite->subpriority = sprite->data[6] + 1;
- sprite->data[5] = (sprite->data[5] + 24) & 0xFF;
+ sprite->data[5] += 24;
+ sprite->data[5] &= 0xFF;
}
}
@@ -2366,13 +2387,13 @@ static void sub_80FEBFC(struct Sprite* sprite)
// arg 5: wave amplitude
void AnimLeechSeed(struct Sprite* sprite)
{
- InitAnimSpritePos(sprite, 1);
- if (GetBattlerSide(gBattleAnimAttacker))
+ InitSpritePosToAnimAttacker(sprite, TRUE);
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
sprite->data[0] = gBattleAnimArgs[4];
- sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 0) + gBattleAnimArgs[2];
- sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + gBattleAnimArgs[3];
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X) + gBattleAnimArgs[2];
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + gBattleAnimArgs[3];
sprite->data[5] = gBattleAnimArgs[5];
InitAnimArcTranslation(sprite);
sprite->callback = AnimLeechSeedStep;
@@ -2398,42 +2419,54 @@ static void AnimLeechSeedSprouts(struct Sprite* sprite)
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
-void sub_80FED28(struct Sprite* sprite)
+// Moves a spore particle in a halo around the target mon.
+// The sprite's priority is updated to give the effect of going
+// behind the mon's sprite.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: initial wave offset
+// arg 3: duration
+// arg 4: blend (0 = off, 1 = on)
+void AnimSporeParticle(struct Sprite* sprite)
{
- sub_80A6980(sprite, TRUE);
+ InitSpritePosToAnimTarget(sprite, TRUE);
StartSpriteAnim(sprite, gBattleAnimArgs[4]);
if (gBattleAnimArgs[4] == 1)
sprite->oam.objMode = ST_OAM_OBJ_BLEND;
sprite->data[0] = gBattleAnimArgs[3];
sprite->data[1] = gBattleAnimArgs[2];
- sprite->callback = sub_80FED74;
+ sprite->callback = AnimSporeParticleStep;
sprite->callback(sprite);
}
-static void sub_80FED74(struct Sprite* sprite)
+static void AnimSporeParticleStep(struct Sprite* sprite)
{
sprite->pos2.x = Sin(sprite->data[1], 32);
sprite->pos2.y = Cos(sprite->data[1], -3) + ((sprite->data[2] += 24) >> 8);
if ((u16)(sprite->data[1] - 0x40) < 0x80)
{
- sprite->oam.priority = (sub_80A8328(gBattleAnimTarget) & 3);
+ sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimTarget);
}
else
{
- u8 priority = sub_80A8328(gBattleAnimTarget) + 1;
+ u8 priority = GetBattlerSpriteBGPriority(gBattleAnimTarget) + 1;
if (priority > 3)
priority = 3;
sprite->oam.priority = priority;
}
- sprite->data[1] = (sprite->data[1] + 2) & 0xFF;
+ sprite->data[1] += 2;
+ sprite->data[1] &= 0xFF;
if (--sprite->data[0] == -1)
DestroyAnimSprite(sprite);
}
-void sub_80FEE1C(u8 taskId)
+// In a double battle, Updates the mon sprite background priorities to allow
+// the circling effect controlled by AnimSporeParticle.
+// No args.
+void AnimTask_SporeDoubleBattle(u8 taskId)
{
if (IsContest() || !IsDoubleBattle())
{
@@ -2441,7 +2474,7 @@ void sub_80FEE1C(u8 taskId)
}
else
{
- if (sub_80A8364(gBattleAnimTarget) == 1)
+ if (GetBattlerSpriteBGPriorityRank(gBattleAnimTarget) == 1)
SetAnimBgAttribute(2, BG_ANIM_PRIORITY, 3);
else
SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1);
@@ -2450,23 +2483,29 @@ void sub_80FEE1C(u8 taskId)
}
}
-void sub_80FEE78(struct Sprite* sprite)
+// Rotates a big flower around the attacking mon, and slowly floats
+// downward.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: target y pixel offset
+// arg 3: duration
+void AnimPetalDanceBigFlower(struct Sprite* sprite)
{
- InitAnimSpritePos(sprite, 0);
+ InitSpritePosToAnimAttacker(sprite, FALSE);
sprite->data[0] = gBattleAnimArgs[3];
sprite->data[1] = sprite->pos1.x;
sprite->data[2] = sprite->pos1.x;
sprite->data[3] = sprite->pos1.y;
- sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + gBattleAnimArgs[2];
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[2];
InitAnimLinearTranslation(sprite);
sprite->data[5] = 0x40;
- sprite->callback = sub_80FEECC;
+ sprite->callback = AnimPetalDanceBigFlowerStep;
sprite->callback(sprite);
}
-static void sub_80FEECC(struct Sprite* sprite)
+static void AnimPetalDanceBigFlowerStep(struct Sprite* sprite)
{
- if (!TranslateAnimLinear(sprite))
+ if (!AnimTranslateLinear(sprite))
{
sprite->pos2.x += Sin(sprite->data[5], 32);
sprite->pos2.y += Cos(sprite->data[5], -5);
@@ -2483,9 +2522,14 @@ static void sub_80FEECC(struct Sprite* sprite)
}
}
-void sub_80FEF44(struct Sprite* sprite)
+// Slowly floats a small flower downard, while swaying from right to left.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: target y pixel offset
+// arg 3: duration
+void AnimPetalDanceSmallFlower(struct Sprite* sprite)
{
- InitAnimSpritePos(sprite, 1);
+ InitSpritePosToAnimAttacker(sprite, TRUE);
sprite->data[0] = gBattleAnimArgs[3];
sprite->data[1] = sprite->pos1.x;
sprite->data[2] = sprite->pos1.x;
@@ -2493,19 +2537,20 @@ void sub_80FEF44(struct Sprite* sprite)
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + gBattleAnimArgs[2];
InitAnimLinearTranslation(sprite);
sprite->data[5] = 0x40;
- sprite->callback = sub_80FEF98;
+ sprite->callback = AnimPetalDanceSmallFlowerStep;
sprite->callback(sprite);
}
-static void sub_80FEF98(struct Sprite* sprite)
+static void AnimPetalDanceSmallFlowerStep(struct Sprite* sprite)
{
- if (!TranslateAnimLinear(sprite))
+ if (!AnimTranslateLinear(sprite))
{
sprite->pos2.x += Sin(sprite->data[5], 8);
if ((u16)(sprite->data[5] - 59) < 5 || (u16)(sprite->data[5] - 187) < 5)
- sprite->oam.matrixNum ^= 0x8;
+ sprite->oam.matrixNum ^= 0x8; // horizontal flip
- sprite->data[5] = (sprite->data[5] + 5) & 0xFF;
+ sprite->data[5] += 5;
+ sprite->data[5] &= 0xFF;
}
else
{
@@ -2513,17 +2558,21 @@ static void sub_80FEF98(struct Sprite* sprite)
}
}
-void sub_80FEFFC(struct Sprite* sprite)
+// Shoots a leaf upward, then floats it downward while swaying back and forth.
+// arg 0: upward x delta per frame
+// arg 1: upward y delta per frame
+// arg 2: upward duration
+void AnimRazorLeafParticle(struct Sprite* sprite)
{
- sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
- sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
sprite->data[0] = gBattleAnimArgs[0];
sprite->data[1] = gBattleAnimArgs[1];
sprite->data[2] = gBattleAnimArgs[2];
- sprite->callback = sub_80FF044;
+ sprite->callback = AnimRazorLeafParticleStep1;
}
-static void sub_80FF044(struct Sprite* sprite)
+static void AnimRazorLeafParticleStep1(struct Sprite* sprite)
{
if (!sprite->data[2])
{
@@ -2535,11 +2584,11 @@ static void sub_80FF044(struct Sprite* sprite)
}
else
{
- sprite->data[0] = sprite->data[1] & 1;
- sprite->data[1] = sprite->data[1] & 1;
- sprite->data[2] = sprite->data[1] & 1;
+ sprite->data[0] = 0;
+ sprite->data[1] = 0;
+ sprite->data[2] = 0;
}
- sprite->callback = sub_80FF090;
+ sprite->callback = AnimRazorLeafParticleStep2;
}
else
{
@@ -2549,14 +2598,15 @@ static void sub_80FF044(struct Sprite* sprite)
}
}
-static void sub_80FF090(struct Sprite* sprite)
+static void AnimRazorLeafParticleStep2(struct Sprite* sprite)
{
if (GetBattlerSide(gBattleAnimAttacker))
sprite->pos2.x = -Sin(sprite->data[0], 25);
else
sprite->pos2.x = Sin(sprite->data[0], 25);
- sprite->data[0] = (sprite->data[0] + 2) & 0xFF;
+ sprite->data[0] += 2;
+ sprite->data[0] &= 0xFF;
sprite->data[1]++;
if (!(sprite->data[1] & 1))
sprite->pos2.y++;
@@ -2577,19 +2627,19 @@ static void sub_80FF090(struct Sprite* sprite)
// arg 6: target between double battle opponents (boolean)
void AnimTranslateLinearSingleSineWave(struct Sprite* sprite)
{
- InitAnimSpritePos(sprite, 1);
+ InitSpritePosToAnimAttacker(sprite, TRUE);
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
sprite->data[0] = gBattleAnimArgs[4];
if (!gBattleAnimArgs[6])
{
- sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[2];
- sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3];
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2];
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3];
}
else
{
- SetAverageBattlerPositions(gBattleAnimTarget, 1, &sprite->data[2], &sprite->data[4]);
+ SetAverageBattlerPositions(gBattleAnimTarget, TRUE, &sprite->data[2], &sprite->data[4]);
sprite->data[2] += gBattleAnimArgs[2];
sprite->data[4] += gBattleAnimArgs[3];
}
@@ -2676,38 +2726,45 @@ static void AnimMoveTwisterParticleStep(struct Sprite* sprite)
sprite->pos2.x = Cos(sprite->data[5], sprite->data[3]);
sprite->pos2.y = Sin(sprite->data[5], 5);
if (sprite->data[5] < 0x80)
- sprite->oam.priority = sub_80A8328(gBattleAnimTarget) - 1;
+ sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimTarget) - 1;
else
- sprite->oam.priority = sub_80A8328(gBattleAnimTarget) + 1;
+ sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimTarget) + 1;
if (--sprite->data[0] == 0)
DestroyAnimSprite(sprite);
}
-void sub_80FF374(struct Sprite* sprite)
+// Squeezes a constricting "rope" several times via affine animations.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: affine anim num
+// arg 3: num squeezes
+void AnimConstrictBinding(struct Sprite* sprite)
{
- sub_80A6980(sprite, FALSE);
+ InitSpritePosToAnimTarget(sprite, FALSE);
sprite->affineAnimPaused = 1;
StartSpriteAffineAnim(sprite, gBattleAnimArgs[2]);
sprite->data[6] = gBattleAnimArgs[2];
sprite->data[7] = gBattleAnimArgs[3];
- sprite->callback = sub_80FF3B0;
+ sprite->callback = AnimConstrictBindingStep1;
}
-static void sub_80FF3B0(struct Sprite* sprite)
+static void AnimConstrictBindingStep1(struct Sprite* sprite)
{
+ u8 spriteId;
+
if ((u16)gBattleAnimArgs[7] == 0xFFFF)
{
sprite->affineAnimPaused = 0;
- GetAnimBattlerSpriteId(1);
+ spriteId = GetAnimBattlerSpriteId(ANIM_TARGET);
sprite->data[0] = 0x100;
- sprite->callback = sub_80FF3EC;
+ sprite->callback = AnimConstrictBindingStep2;
}
}
-static void sub_80FF3EC(struct Sprite* sprite)
+static void AnimConstrictBindingStep2(struct Sprite* sprite)
{
- GetAnimBattlerSpriteId(1);
+ u8 spriteId = GetAnimBattlerSpriteId(ANIM_TARGET);
if (!sprite->data[2])
sprite->data[0] += 11;
else
@@ -2739,23 +2796,23 @@ void sub_80FF458(u8 taskId)
{
PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_BLEND);
gTasks[taskId].data[14] = gSprites[spriteId].oam.priority;
- gSprites[spriteId].oam.priority = sub_80A8328(gBattleAnimTarget);
+ gSprites[spriteId].oam.priority = GetBattlerSpriteBGPriority(gBattleAnimTarget);
spriteId = GetAnimBattlerSpriteId(ANIM_DEF_PARTNER);
gTasks[taskId].data[15] = gSprites[spriteId].oam.priority;
- gSprites[spriteId].oam.priority = sub_80A8328(BATTLE_PARTNER(gBattleAnimTarget));
+ gSprites[spriteId].oam.priority = GetBattlerSpriteBGPriority(BATTLE_PARTNER(gBattleAnimTarget));
gTasks[taskId].data[0] = gBattleAnimArgs[0];
gTasks[taskId].data[1] = gBattleAnimArgs[1];
- gTasks[taskId].data[11] = 256;
+ gTasks[taskId].data[11] = 0x100;
gTasks[taskId].func = sub_80FF53C;
}
}
static void sub_80FF53C(u8 taskId)
{
- u8 spriteId = GetAnimBattlerSpriteId(1);
+ u8 spriteId = GetAnimBattlerSpriteId(ANIM_TARGET);
gTasks[taskId].data[10] += gTasks[taskId].data[0];
gSprites[spriteId].pos2.x = gTasks[taskId].data[10] >> 8;
- if (GetBattlerSide(gBattleAnimTarget))
+ if (GetBattlerSide(gBattleAnimTarget) != B_SIDE_PLAYER)
gSprites[spriteId].pos2.x = -gSprites[spriteId].pos2.x;
gTasks[taskId].data[11] += 16;
@@ -2796,7 +2853,10 @@ static void sub_80FF5CC(u8 taskId)
DestroyAnimVisualTask(taskId);
}
-void sub_80FF698(struct Sprite* sprite)
+// Moves an orb from the target mon to the attacking mon.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+void AnimMimicOrb(struct Sprite* sprite)
{
switch (sprite->data[0])
{
@@ -2804,8 +2864,8 @@ void sub_80FF698(struct Sprite* sprite)
if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER)
gBattleAnimArgs[0] *= -1;
- sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 0) + gBattleAnimArgs[0];
- sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + gBattleAnimArgs[1];
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X) + gBattleAnimArgs[0];
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + gBattleAnimArgs[1];
sprite->invisible = 1;
sprite->data[0]++;
break;
@@ -2815,21 +2875,27 @@ void sub_80FF698(struct Sprite* sprite)
{
ChangeSpriteAffineAnim(sprite, 1);
sprite->data[0] = 25;
- sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
- sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
- sprite->callback = sub_80A70C0;
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
+ sprite->callback = InitAndRunAnimFastLinearTranslation;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
break;
}
}
}
-void sub_80FF768(struct Sprite* sprite)
+// Animates a root that flickers away after some time.
+// arg 0: x pixel offset
+// arg 1: y pixel offset
+// arg 2: sprite subpriority offset
+// arg 3: sprite anim num
+// arg 4: duration
+void AnimIngrainRoot(struct Sprite* sprite)
{
if (!sprite->data[0])
{
- sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
- sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1);
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y);
sprite->pos2.x = gBattleAnimArgs[0];
sprite->pos2.y = gBattleAnimArgs[1];
sprite->subpriority = gBattleAnimArgs[2] + 30;
@@ -2839,33 +2905,40 @@ void sub_80FF768(struct Sprite* sprite)
if (sprite->pos1.y + sprite->pos2.y > 120)
sprite->pos1.y += sprite->pos2.y + sprite->pos1.y - 120;
}
- sprite->callback = sub_80FF8DC;
+ sprite->callback = AnimRootFlickerOut;
}
-void sub_80FF7EC(struct Sprite *sprite)
+// Places a root on the path to the target mon that flickers away after some time.
+// arg 0: percent along the path to the target mon
+// arg 1: x pixel offset
+// arg 2: y pixel offset
+// arg 3: sprite subpriority offset
+// arg 4: sprite anum num
+// arg 5: duration
+void AnimFrenzyPlantRoot(struct Sprite *sprite)
{
- s16 p1 = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
- s16 p2 = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
- s16 e1 = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
- s16 e2 = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ s16 attackerX = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ s16 attackerY = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
+ s16 targetX = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ s16 targetY = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
- e1 -= p1;
- e2 -= p2;
- sprite->pos1.x = p1 + e1 * gBattleAnimArgs[0] / 100;
- sprite->pos1.y = p2 + e2 * gBattleAnimArgs[0] / 100;
+ targetX -= attackerX;
+ targetY -= attackerY;
+ sprite->pos1.x = attackerX + targetX * gBattleAnimArgs[0] / 100;
+ sprite->pos1.y = attackerY + targetY * gBattleAnimArgs[0] / 100;
sprite->pos2.x = gBattleAnimArgs[1];
sprite->pos2.y = gBattleAnimArgs[2];
sprite->subpriority = gBattleAnimArgs[3] + 30;
StartSpriteAnim(sprite, gBattleAnimArgs[4]);
sprite->data[2] = gBattleAnimArgs[5];
- sprite->callback = sub_80FF8DC;
+ sprite->callback = AnimRootFlickerOut;
gUnknown_0203A0F8[0] = sprite->pos1.x;
gUnknown_0203A0F8[1] = sprite->pos1.y;
- gUnknown_0203A0F8[2] = e1;
- gUnknown_0203A0F8[3] = e2;
+ gUnknown_0203A0F8[2] = targetX;
+ gUnknown_0203A0F8[3] = targetY;
}
-static void sub_80FF8DC(struct Sprite* sprite)
+static void AnimRootFlickerOut(struct Sprite* sprite)
{
if (++sprite->data[0] > (sprite->data[2] - 10))
sprite->invisible = sprite->data[0] % 2;
@@ -2874,7 +2947,13 @@ static void sub_80FF8DC(struct Sprite* sprite)
DestroyAnimSprite(sprite);
}
-void sub_80FF934(struct Sprite* sprite)
+// Moves an orb in a fast wavy path.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: horizontal velocity
+// arg 3: wave amplitude
+// arg 4: duration
+void AnimIngrainOrb(struct Sprite* sprite)
{
if (!sprite->data[0])
{
@@ -2892,11 +2971,11 @@ void sub_80FF934(struct Sprite* sprite)
DestroyAnimSprite(sprite);
}
-void sub_80FF9B8(struct Sprite* sprite, s16 c)
+static void sub_80FF9B8(struct Sprite* sprite, s16 c)
{
- s32 a = (sprite->pos1.x * 256) | sprite->pos1.y;
- s32 b = (sprite->data[6] * 256) | sprite->data[7];
- c *= 256;
+ int a = (sprite->pos1.x << 8) | sprite->pos1.y;
+ int b = (sprite->data[6] << 8) | sprite->data[7];
+ c <<= 8;
sprite->data[5] = a;
sprite->data[6] = b;
sprite->data[7] = c;
@@ -2961,24 +3040,24 @@ static void sub_80FFAB4(struct Sprite* sprite)
}
}
-void sub_80FFB18(struct Sprite* sprite)
+void AnimPresent(struct Sprite* sprite)
{
- s16 e1;
- s16 e2;
- InitAnimSpritePos(sprite, 0);
- e1 = GetBattlerSpriteCoord(gBattleAnimTarget, 0);
- e2 = GetBattlerSpriteCoord(gBattleAnimTarget, 1);
+ s16 targetX;
+ s16 targetY;
+ InitSpritePosToAnimAttacker(sprite, FALSE);
+ targetX = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X);
+ targetY = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y);
if (BATTLE_PARTNER(gBattleAnimAttacker) == gBattleAnimTarget)
{
- sprite->data[6] = e1;
- sprite->data[7] = e2 + 10;
+ sprite->data[6] = targetX;
+ sprite->data[7] = targetY + 10;
sub_80FF9B8(sprite, 60);
sprite->data[3] = 1;
}
else
{
- sprite->data[6] = e1;
- sprite->data[7] = e2 + 10;
+ sprite->data[6] = targetX;
+ sprite->data[7] = targetY + 10;
sub_80FF9B8(sprite, 60);
sprite->data[3] = 3;
}
@@ -3007,37 +3086,42 @@ static void sub_80FFB90(struct Sprite* sprite)
}
}
-void sub_80FFBF4(struct Sprite* sprite)
+void AnimKnockOffItem(struct Sprite* sprite)
{
- s16 e = GetBattlerSpriteCoord(gBattleAnimTarget, 1);
+ s16 targetY = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y);
if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER)
{
sprite->data[6] = 0;
- sprite->data[7] = e + 10;
+ sprite->data[7] = targetY + 10;
sub_80FF9B8(sprite, 40);
sprite->data[3] = 3;
- sprite->data[4] = 0x3C;
+ sprite->data[4] = 60;
sprite->callback = sub_80FFAB4;
}
else
{
sprite->data[6] = 255;
- sprite->data[7] = e + 10;
+ sprite->data[7] = targetY + 10;
if (IsContest())
sprite->data[6] = 0;
sub_80FF9B8(sprite, 40);
sprite->data[3] = 3;
- sprite->data[4] = 0x3C;
+ sprite->data[4] = 60;
sprite->callback = sub_80FFB90;
}
}
-void sub_80FFC70(struct Sprite* sprite)
+// Animates a heal particle upward.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: vertical velocity
+// arg 3: unused
+void AnimPresentHealParticle(struct Sprite* sprite)
{
- if (sprite->data[0] == 0)
+ if (!sprite->data[0])
{
- sub_80A6980(sprite, FALSE);
+ InitSpritePosToAnimTarget(sprite, FALSE);
sprite->data[1] = gBattleAnimArgs[2];
}
@@ -3047,33 +3131,33 @@ void sub_80FFC70(struct Sprite* sprite)
DestroyAnimSprite(sprite);
}
-void sub_80FFCB4(struct Sprite* sprite)
+void AnimItemSteal(struct Sprite* sprite)
{
- s16 p1;
- s16 p2;
- sub_80A6980(sprite, FALSE);
- p1 = GetBattlerSpriteCoord(gBattleAnimAttacker, 0);
- p2 = GetBattlerSpriteCoord(gBattleAnimAttacker, 1);
+ s16 attackerX;
+ s16 attackerY;
+ InitSpritePosToAnimTarget(sprite, FALSE);
+ attackerX = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X);
+ attackerY = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y);
if (BATTLE_PARTNER(gBattleAnimTarget) == gBattleAnimAttacker)
{
- sprite->data[6] = p1;
- sprite->data[7] = p2 + 10;
+ sprite->data[6] = attackerX;
+ sprite->data[7] = attackerY + 10;
sub_80FF9B8(sprite, 60);
sprite->data[3] = 1;
}
else
{
- sprite->data[6] = p1;
- sprite->data[7] = p2 + 10;
+ sprite->data[6] = attackerX;
+ sprite->data[7] = attackerY + 10;
sub_80FF9B8(sprite, 60);
sprite->data[3] = 3;
}
sprite->data[4] = 60;
- sprite->callback = sub_80FFD2C;
+ sprite->callback = AnimItemStealStep;
}
-static void sub_80FFD2C(struct Sprite* sprite)
+static void AnimItemStealStep(struct Sprite* sprite)
{
int zero;
sprite->data[0] += ((sprite->data[3] * 128) / sprite->data[4]);
@@ -3097,7 +3181,10 @@ static void sub_80FFD2C(struct Sprite* sprite)
}
}
-void sub_80FFDBC(struct Sprite* sprite)
+// Moves a bag in a circular motion.
+// arg 0: y position
+// arg 1: initial wave offset
+void AnimTrickBag(struct Sprite* sprite)
{
int a;
int b;
@@ -3126,7 +3213,7 @@ void sub_80FFDBC(struct Sprite* sprite)
sprite->data[4] = 20;
sprite->pos2.x = Cos(sprite->data[1], 60);
sprite->pos2.y = Sin(sprite->data[1], 20);
- sprite->callback = sub_80FFE58;
+ sprite->callback = AnimTrickBagStep1;
if (sprite->data[1] > 0 && sprite->data[1] < 192)
sprite->subpriority = 31;
else
@@ -3134,7 +3221,7 @@ void sub_80FFDBC(struct Sprite* sprite)
}
}
-static void sub_80FFE58(struct Sprite* sprite)
+static void AnimTrickBagStep1(struct Sprite* sprite)
{
switch (sprite->data[3])
{
@@ -3158,20 +3245,20 @@ static void sub_80FFE58(struct Sprite* sprite)
{
sprite->data[0] = 0;
sprite->data[2] = 0;
- sprite->callback = sub_80FFEC4;
+ sprite->callback = AnimTrickBagStep2;
}
break;
}
}
-static void sub_80FFEC4(struct Sprite* sprite)
+static void AnimTrickBagStep2(struct Sprite* sprite)
{
if (sprite->data[2] == gUnknown_08592700[sprite->data[0]][1])
{
if (gUnknown_08592700[sprite->data[0]][2] == 127)
{
sprite->data[0] = 0;
- sprite->callback = sub_80FFF7C;
+ sprite->callback = AnimTrickBagStep3;
}
sprite->data[2] = 0;
@@ -3194,7 +3281,7 @@ static void sub_80FFEC4(struct Sprite* sprite)
}
}
-static void sub_80FFF7C(struct Sprite* sprite)
+static void AnimTrickBagStep3(struct Sprite* sprite)
{
if (sprite->data[0] > 20)
DestroyAnimSprite(sprite);
@@ -3493,20 +3580,20 @@ void sub_8100640(struct Sprite* sprite)
{
case 0:
sprite->pos1.y = gBattleAnimArgs[0];
- sprite->oam.priority = sub_80A8328(battler);
+ sprite->oam.priority = GetBattlerSpriteBGPriority(battler);
break;
case 1:
sprite->pos1.y = gBattleAnimArgs[0];
- sprite->oam.priority = sub_80A8328(battler) + 1;
+ sprite->oam.priority = GetBattlerSpriteBGPriority(battler) + 1;
break;
case 2:
sprite->pos1.y = GetBattlerSpriteCoord(battler, 3) + gBattleAnimArgs[0];
- sprite->oam.priority = sub_80A8328(battler);
+ sprite->oam.priority = GetBattlerSpriteBGPriority(battler);
break;
case 3:
sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[0];
GetAnimBattlerSpriteId(ANIM_TARGET);
- sprite->oam.priority = sub_80A8328(battler) + 1;
+ sprite->oam.priority = GetBattlerSpriteBGPriority(battler) + 1;
break;
}
@@ -3665,7 +3752,7 @@ void sub_8100A50(struct Sprite* sprite)
StartSpriteAnim(sprite, 1);
sprite->callback = sub_81009DC;
- sub_80A6864(sprite, gBattleAnimArgs[0]);
+ SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]);
sprite->pos1.y += gBattleAnimArgs[1];
}
@@ -3858,9 +3945,9 @@ void sub_8100EF0(struct Sprite* sprite)
sprite->pos1.x = GetBattlerSpriteCoord2(gBattleAnimAttacker, 0) + gBattleAnimArgs[0];
sprite->pos1.y = GetBattlerSpriteCoord2(gBattleAnimAttacker, 1) + gBattleAnimArgs[1];
if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER || IsContest())
- sprite->oam.priority = sub_80A8328(gBattleAnimAttacker) + 1;
+ sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimAttacker) + 1;
else
- sprite->oam.priority = sub_80A8328(gBattleAnimAttacker);
+ sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimAttacker);
sprite->data[0] = gBattleAnimArgs[2];
sprite->data[2] = (IndexOfSpritePaletteTag(ANIM_TAG_PROTECT) << 4) + 0x100;
@@ -4028,13 +4115,13 @@ void sub_810130C(struct Sprite* sprite)
if (!gBattleAnimArgs[2])
SetSpriteCoordsToAnimAttackerCoords(sprite);
- sub_80A6864(sprite, gBattleAnimArgs[0]);
+ SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]);
sprite->pos1.y += gBattleAnimArgs[1];
sprite->data[0] = gBattleAnimArgs[5];
sprite->data[1] = gBattleAnimArgs[3];
sprite->data[2] = gBattleAnimArgs[4];
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
- sprite->callback = TranslateAnimLinearSimple;
+ sprite->callback = AnimTranslateLinearSimple;
}
void sub_810135C(struct Sprite* sprite)
@@ -4048,7 +4135,7 @@ void sub_810135C(struct Sprite* sprite)
if (IsDoubleBattle() && IsBattlerSpriteVisible(BATTLE_PARTNER(battler)))
{
SetAverageBattlerPositions(battler, gBattleAnimArgs[6], &sprite->pos1.x, &sprite->pos1.y);
- sub_80A6864(sprite, gBattleAnimArgs[0]);
+ SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]);
sprite->pos1.y += gBattleAnimArgs[1];
}
else
@@ -4064,14 +4151,14 @@ void sub_810135C(struct Sprite* sprite)
sprite->pos1.y = GetBattlerSpriteCoord(battler, 3) + gBattleAnimArgs[1];
}
- sub_80A6864(sprite, gBattleAnimArgs[0]);
+ SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]);
}
sprite->data[0] = gBattleAnimArgs[5];
sprite->data[1] = gBattleAnimArgs[3];
sprite->data[2] = gBattleAnimArgs[4];
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
- sprite->callback = TranslateAnimLinearSimple;
+ sprite->callback = AnimTranslateLinearSimple;
}
void sub_8101440(struct Sprite* sprite)
@@ -4782,7 +4869,7 @@ void sub_81022D4(u8 taskId)
void sub_810234C(struct Sprite* sprite)
{
- sub_80A6980(sprite, FALSE);
+ InitSpritePosToAnimTarget(sprite, FALSE);
sprite->animPaused = 1;
sprite->data[0] = gBattleAnimArgs[2];
sprite->callback = sub_810237C;
@@ -5094,7 +5181,7 @@ void sub_81029B4(u8 taskId)
}
task->func = sub_8102AE0;
- if (sub_80A8364(gBattleAnimAttacker) == 1)
+ if (GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker) == 1)
ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG1_ON);
else
ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG2_ON);
@@ -5105,7 +5192,7 @@ static void sub_8102AE0(u8 taskId)
struct Task* task = &gTasks[taskId];
if (!task->data[3])
{
- if (sub_80A8364(gBattleAnimAttacker) == 1)
+ if (GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker) == 1)
SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG1_ON);
else
SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG2_ON);
@@ -5345,7 +5432,7 @@ void sub_8103028(struct Sprite* sprite)
static void sub_81030B0(struct Sprite* sprite)
{
- if (TranslateAnimLinear(sprite) == 0)
+ if (AnimTranslateLinear(sprite) == 0)
{
s16 xDiff;
xDiff = Sin(sprite->data[5], 8);