summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDiegoisawesome <diego@domoreaweso.me>2018-12-18 19:31:04 -0600
committerDiegoisawesome <diego@domoreaweso.me>2018-12-18 19:54:27 -0600
commit2592803460fcaeb2dd804080eb8770c85613773e (patch)
treeba53079591d9629dcf4672b544f13651f346d425 /src
parentcd994f4935b9de81383d8e0a17d790414652a4d6 (diff)
parentb2ac3b6d6f06ed4a2d64af90e97796c66bcdeb5f (diff)
Merge branch 'master' of github.com:pret/pokeemerald into trade
Diffstat (limited to 'src')
-rw-r--r--src/battle_anim.c4
-rw-r--r--src/battle_anim_80A5C6C.c325
-rw-r--r--src/battle_anim_80A9C70.c2
-rw-r--r--src/battle_anim_80D51AC.c16
-rwxr-xr-xsrc/battle_anim_8170478.c16
-rw-r--r--src/battle_anim_effects_1.c126
-rwxr-xr-xsrc/battle_anim_effects_2.c3884
-rwxr-xr-xsrc/battle_anim_effects_3.c4889
-rw-r--r--src/battle_anim_utility_funcs.c2
-rw-r--r--src/battle_controller_link_opponent.c6
-rw-r--r--src/battle_controller_link_partner.c6
-rw-r--r--src/battle_controller_opponent.c6
-rw-r--r--src/battle_controller_player.c6
-rw-r--r--src/battle_controller_player_partner.c8
-rw-r--r--src/battle_controller_recorded_opponent.c8
-rw-r--r--src/battle_controller_recorded_player.c8
-rw-r--r--src/battle_controller_wally.c2
-rw-r--r--src/battle_factory.c8
-rw-r--r--src/battle_gfx_sfx_util.c6
-rw-r--r--src/battle_main.c4
-rw-r--r--src/battle_script_commands.c2
-rw-r--r--src/battle_tent.c7
-rw-r--r--src/bug.c8
-rw-r--r--src/contest.c2
-rw-r--r--src/data/pokemon_graphics/front_anims.h885
-rw-r--r--src/data/pokemon_graphics/still_front_pic_table.h884
-rw-r--r--src/dragon.c10
-rw-r--r--src/effects_2.c1197
-rw-r--r--src/electric.c137
-rw-r--r--src/fight.c10
-rw-r--r--src/fire.c18
-rw-r--r--src/ghost.c20
-rw-r--r--src/graphics.c6
-rw-r--r--src/ground.c2
-rw-r--r--src/hall_of_fame.c2
-rw-r--r--src/normal.c16
-rw-r--r--src/poison.c2
-rw-r--r--src/pokemon.c8
-rw-r--r--src/reshow_battle_screen.c8
-rw-r--r--src/rock.c6
-rw-r--r--src/tv.c2
41 files changed, 10070 insertions, 2494 deletions
diff --git a/src/battle_anim.c b/src/battle_anim.c
index c3fa2e2aa..88c548208 100644
--- a/src/battle_anim.c
+++ b/src/battle_anim.c
@@ -1656,7 +1656,7 @@ static void ScriptCmd_createsprite(void)
else
argVar *= -1;
- subpriority = GetBattlerSubpriority(gBattleAnimTarget) + (s8)(argVar);
+ subpriority = GetBattlerSpriteSubpriority(gBattleAnimTarget) + (s8)(argVar);
}
else
{
@@ -1665,7 +1665,7 @@ static void ScriptCmd_createsprite(void)
else
argVar *= -1;
- subpriority = GetBattlerSubpriority(gBattleAnimAttacker) + (s8)(argVar);
+ subpriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker) + (s8)(argVar);
}
if (subpriority < 3)
diff --git a/src/battle_anim_80A5C6C.c b/src/battle_anim_80A5C6C.c
index c4cf1600b..15a4d2b63 100644
--- a/src/battle_anim_80A5C6C.c
+++ b/src/battle_anim_80A5C6C.c
@@ -40,18 +40,17 @@ void sub_80A7144(struct Sprite *sprite);
void sub_80A791C(struct Sprite *sprite);
void sub_80A8DFC(struct Sprite *sprite);
void sub_80A8E88(struct Sprite *sprite);
-void sub_80A7E6C(u8 spriteId);
-u16 sub_80A7F18(u8 spriteId);
+void SetBattlerSpriteYOffsetFromYScale(u8 spriteId);
+u16 GetBattlerYDeltaFromSpriteId(u8 spriteId);
void AnimTask_BlendMonInAndOutSetup(struct Task *task);
void sub_80A7AFC(u8 taskId);
void sub_80A8CAC(u8 taskId);
void AnimTask_BlendMonInAndOutStep(u8 taskId);
bool8 sub_80A7238(void);
-u8 GetBattlerSubpriority(u8 battlerId);
void sub_80A8D78(struct Task *task, u8 taskId);
// EWRAM vars
-EWRAM_DATA static union AffineAnimCmd *gUnknown_02038444 = NULL;
+EWRAM_DATA static union AffineAnimCmd *gAnimTaskAffineAnim = NULL;
// Const rom data
static const struct UCoords8 sBattlerCoords[][4] =
@@ -124,8 +123,7 @@ static const struct SpriteSheet sUnknown_08525FC0[] =
{ gMiscBlank_Gfx, 0x800, 55126, },
};
-// code
-u8 GetBattlerSpriteCoord(u8 battlerId, u8 attributeId)
+u8 GetBattlerSpriteCoord(u8 battlerId, u8 coordType)
{
u8 retVal;
u16 species;
@@ -133,11 +131,11 @@ u8 GetBattlerSpriteCoord(u8 battlerId, u8 attributeId)
if (IsContest())
{
- if (attributeId == BATTLER_COORD_3 && battlerId == 3)
- attributeId = BATTLER_COORD_Y;
+ if (coordType == BATTLER_COORD_Y_PIC_OFFSET && battlerId == 3)
+ coordType = BATTLER_COORD_Y;
}
- switch (attributeId)
+ switch (coordType)
{
case BATTLER_COORD_X:
case BATTLER_COORD_X_2:
@@ -146,15 +144,15 @@ u8 GetBattlerSpriteCoord(u8 battlerId, u8 attributeId)
case BATTLER_COORD_Y:
retVal = sBattlerCoords[IS_DOUBLE_BATTLE()][GetBattlerPosition(battlerId)].y;
break;
- case BATTLER_COORD_3:
- case BATTLER_COORD_4:
+ case BATTLER_COORD_Y_PIC_OFFSET:
+ case BATTLER_COORD_Y_PIC_OFFSET_DEFAULT:
default:
if (IsContest())
{
- if (shared19348.unk4_0)
- species = shared19348.unk2;
+ if (gContestResources->field_18->unk4_0)
+ species = gContestResources->field_18->unk2;
else
- species = shared19348.species;
+ species = gContestResources->field_18->species;
}
else
{
@@ -175,7 +173,7 @@ u8 GetBattlerSpriteCoord(u8 battlerId, u8 attributeId)
species = spriteInfo[battlerId].transformSpecies;
}
}
- if (attributeId == BATTLER_COORD_3)
+ if (coordType == BATTLER_COORD_Y_PIC_OFFSET)
retVal = GetBattlerSpriteFinal_Y(battlerId, species, TRUE);
else
retVal = GetBattlerSpriteFinal_Y(battlerId, species, FALSE);
@@ -199,10 +197,10 @@ u8 GetBattlerYDelta(u8 battlerId, u16 species)
{
if (IsContest())
{
- if (shared19348.unk4_0)
- personality = shared19348.unk10;
+ if (gContestResources->field_18->unk4_0)
+ personality = gContestResources->field_18->unk10;
else
- personality = shared19348.unk8;
+ personality = gContestResources->field_18->unk8;
}
else
{
@@ -307,19 +305,19 @@ u8 GetBattlerSpriteFinal_Y(u8 battlerId, u16 species, bool8 a3)
return y;
}
-u8 GetBattlerSpriteCoord2(u8 battlerId, u8 attributeId)
+u8 GetBattlerSpriteCoord2(u8 battlerId, u8 coordType)
{
u16 species;
struct BattleSpriteInfo *spriteInfo;
- if (attributeId == BATTLER_COORD_3 || attributeId == BATTLER_COORD_4)
+ if (coordType == BATTLER_COORD_Y_PIC_OFFSET || coordType == BATTLER_COORD_Y_PIC_OFFSET_DEFAULT)
{
if (IsContest())
{
- if (shared19348.unk4_0)
- species = shared19348.unk2;
+ if (gContestResources->field_18->unk4_0)
+ species = gContestResources->field_18->unk2;
else
- species = shared19348.species;
+ species = gContestResources->field_18->species;
}
else
{
@@ -329,20 +327,20 @@ u8 GetBattlerSpriteCoord2(u8 battlerId, u8 attributeId)
else
species = spriteInfo[battlerId].transformSpecies;
}
- if (attributeId == BATTLER_COORD_3)
+ if (coordType == BATTLER_COORD_Y_PIC_OFFSET)
return GetBattlerSpriteFinal_Y(battlerId, species, TRUE);
else
return GetBattlerSpriteFinal_Y(battlerId, species, FALSE);
}
else
{
- return GetBattlerSpriteCoord(battlerId, attributeId);
+ return GetBattlerSpriteCoord(battlerId, coordType);
}
}
u8 GetBattlerSpriteDefault_Y(u8 battlerId)
{
- return GetBattlerSpriteCoord(battlerId, BATTLER_COORD_4);
+ return GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y_PIC_OFFSET_DEFAULT);
}
u8 GetSubstituteSpriteDefault_Y(u8 battlerId)
@@ -386,11 +384,11 @@ u8 GetBattlerYCoordWithElevation(u8 battlerId)
return y;
}
-u8 GetAnimBattlerSpriteId(u8 which)
+u8 GetAnimBattlerSpriteId(u8 animBattler)
{
u8 *sprites;
- if (which == ANIM_ATTACKER)
+ if (animBattler == ANIM_ATTACKER)
{
if (IsBattlerSpritePresent(gBattleAnimAttacker))
{
@@ -402,7 +400,7 @@ u8 GetAnimBattlerSpriteId(u8 which)
return 0xff;
}
}
- else if (which == ANIM_TARGET)
+ else if (animBattler == ANIM_TARGET)
{
if (IsBattlerSpritePresent(gBattleAnimTarget))
{
@@ -414,7 +412,7 @@ u8 GetAnimBattlerSpriteId(u8 which)
return 0xff;
}
}
- else if (which == ANIM_ATK_PARTNER)
+ else if (animBattler == ANIM_ATK_PARTNER)
{
if (!IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker)))
return 0xff;
@@ -442,7 +440,7 @@ void SetCallbackToStoredInData6(struct Sprite *sprite)
sprite->callback = (void (*)(struct Sprite *))callback;
}
-void sub_80A62EC(struct Sprite *sprite)
+void TranslateSpriteInCircleOverDuration(struct Sprite *sprite)
{
if (sprite->data[3])
{
@@ -461,7 +459,7 @@ void sub_80A62EC(struct Sprite *sprite)
}
}
-void sub_80A634C(struct Sprite *sprite)
+void TranslateSpriteInGrowingCircleOverDuration(struct Sprite *sprite)
{
if (sprite->data[3])
{
@@ -570,7 +568,7 @@ void TranslateSpriteOverDuration(struct Sprite *sprite)
}
}
-void sub_80A656C(struct Sprite *sprite)
+void TranslateAnimLinearSimple(struct Sprite *sprite)
{
if (sprite->data[0] > 0)
{
@@ -665,7 +663,7 @@ void sub_80A66DC(struct Sprite *sprite)
}
}
-void move_anim_8074EE0(struct Sprite *sprite)
+void DestroySpriteAndMatrix(struct Sprite *sprite)
{
FreeSpriteOamMatrix(sprite);
DestroyAnimSprite(sprite);
@@ -683,16 +681,16 @@ void sub_80A6760(struct Sprite *sprite)
void sub_80A67A4(struct Sprite *sprite)
{
ResetPaletteStructByUid(sprite->data[5]);
- move_anim_8074EE0(sprite);
+ DestroySpriteAndMatrix(sprite);
}
-void sub_80A67BC(struct Sprite *sprite)
+void RunStoredCallbackWhenAffineAnimEnds(struct Sprite *sprite)
{
if (sprite->affineAnimEnded)
SetCallbackToStoredInData6(sprite);
}
-void sub_80A67D8(struct Sprite *sprite)
+void RunStoredCallbackWhenAnimEnds(struct Sprite *sprite)
{
if (sprite->animEnded)
SetCallbackToStoredInData6(sprite);
@@ -712,31 +710,31 @@ void sub_80A6814(u8 taskId)
DestroyAnimVisualTask(taskId);
}
-void sub_80A6838(struct Sprite *sprite)
+void SetSpriteCoordsToAnimAttackerCoords(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);
}
-void sub_80A6864(struct Sprite *sprite, s16 a2)
+void sub_80A6864(struct Sprite *sprite, s16 xOffset)
{
- u16 v1 = GetBattlerSpriteCoord(gBattleAnimAttacker, 0);
- u16 v2 = GetBattlerSpriteCoord(gBattleAnimTarget, 0);
+ u16 attackerX = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X);
+ u16 targetX = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X);
- if (v1 > v2)
+ if (attackerX > targetX)
{
- sprite->pos1.x -= a2;
+ sprite->pos1.x -= xOffset;
}
- else if (v1 < v2)
+ else if (attackerX < targetX)
{
- sprite->pos1.x += a2;
+ sprite->pos1.x += xOffset;
}
else
{
- if (GetBattlerSide(gBattleAnimAttacker) != 0)
- sprite->pos1.x -= a2;
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ sprite->pos1.x -= xOffset;
else
- sprite->pos1.x += a2;
+ sprite->pos1.x += xOffset;
}
}
@@ -779,24 +777,24 @@ void sub_80A6980(struct Sprite *sprite, bool8 a2)
{
if (!a2)
{
- sprite->pos1.x = GetBattlerSpriteCoord2(gBattleAnimTarget, 0);
- sprite->pos1.y = GetBattlerSpriteCoord2(gBattleAnimTarget, 1);
+ sprite->pos1.x = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_X);
+ sprite->pos1.y = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_Y);
}
sub_80A6864(sprite, gBattleAnimArgs[0]);
sprite->pos1.y += gBattleAnimArgs[1];
}
-void InitAnimSpritePos(struct Sprite *sprite, u8 a2)
+void InitAnimSpritePos(struct Sprite *sprite, u8 respectMonPicOffsets)
{
- if (!a2)
+ if (!respectMonPicOffsets)
{
- sprite->pos1.x = GetBattlerSpriteCoord2(gBattleAnimAttacker, 0);
- sprite->pos1.y = GetBattlerSpriteCoord2(gBattleAnimAttacker, 1);
+ sprite->pos1.x = GetBattlerSpriteCoord2(gBattleAnimAttacker, BATTLER_COORD_X);
+ sprite->pos1.y = GetBattlerSpriteCoord2(gBattleAnimAttacker, BATTLER_COORD_Y);
}
else
{
- sprite->pos1.x = GetBattlerSpriteCoord2(gBattleAnimAttacker, 2);
- sprite->pos1.y = GetBattlerSpriteCoord2(gBattleAnimAttacker, 3);
+ sprite->pos1.x = GetBattlerSpriteCoord2(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ sprite->pos1.y = GetBattlerSpriteCoord2(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
}
sub_80A6864(sprite, gBattleAnimArgs[0]);
sprite->pos1.y += gBattleAnimArgs[1];
@@ -908,7 +906,7 @@ void sub_80A6B90(struct UnknownAnimStruct2 *unk, u32 arg1)
}
}
-void sub_80A6BFC(struct UnknownAnimStruct2 *unk)
+void sub_80A6BFC(struct UnknownAnimStruct2 *unk, u8 unused)
{
unk->bgTiles = gUnknown_0202305C;
unk->unk4 = (u16 *)gUnknown_02023060;
@@ -1208,7 +1206,7 @@ void sub_80A718C(struct Sprite *sprite)
sprite->callback(sprite);
}
-void obj_id_set_rotscale(u8 spriteId, s16 xScale, s16 yScale, u16 rotation)
+void SetSpriteRotScale(u8 spriteId, s16 xScale, s16 yScale, u16 rotation)
{
int i;
struct ObjAffineSrcData src;
@@ -1242,7 +1240,7 @@ bool8 sub_80A7238(void)
}
}
-void sub_80A7270(u8 spriteId, u8 objMode)
+void PrepareBattlerSpriteForRotScale(u8 spriteId, u8 objMode)
{
u8 battlerId = gSprites[spriteId].data[0];
@@ -1251,32 +1249,34 @@ void sub_80A7270(u8 spriteId, u8 objMode)
gSprites[spriteId].oam.objMode = objMode;
gSprites[spriteId].affineAnimPaused = TRUE;
if (!IsContest() && !gSprites[spriteId].oam.affineMode)
- gSprites[spriteId].oam.matrixNum = gBattleSpritesDataPtr->healthBoxesData[battlerId].field_6;
- gSprites[spriteId].oam.affineMode = 3;
+ gSprites[spriteId].oam.matrixNum = gBattleSpritesDataPtr->healthBoxesData[battlerId].matrixNum;
+ gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_DOUBLE;
CalcCenterToCornerVec(&gSprites[spriteId], gSprites[spriteId].oam.shape, gSprites[spriteId].oam.size, gSprites[spriteId].oam.affineMode);
}
-void sub_80A7344(u8 spriteId)
+void ResetSpriteRotScale(u8 spriteId)
{
- obj_id_set_rotscale(spriteId, 0x100, 0x100, 0);
- gSprites[spriteId].oam.affineMode = 1;
+ SetSpriteRotScale(spriteId, 0x100, 0x100, 0);
+ gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL;
gSprites[spriteId].oam.objMode = 0;
gSprites[spriteId].affineAnimPaused = FALSE;
CalcCenterToCornerVec(&gSprites[spriteId], gSprites[spriteId].oam.shape, gSprites[spriteId].oam.size, gSprites[spriteId].oam.affineMode);
}
-void sub_80A73A0(u8 spriteId)
+// Sets the sprite's y offset equal to the y displacement caused by the
+// matrix's rotation.
+void SetBattlerSpriteYOffsetFromRotation(u8 spriteId)
{
- u16 matrix = gSprites[spriteId].oam.matrixNum;
- s16 c = gOamMatrices[matrix].c;
-
+ u16 matrixNum = gSprites[spriteId].oam.matrixNum;
+ // The "c" component of the battler sprite matrix contains the sine of the rotation angle divided by some scale amount.
+ s16 c = gOamMatrices[matrixNum].c;
if (c < 0)
c = -c;
+
gSprites[spriteId].pos2.y = c >> 3;
}
-// related to obj_id_set_rotscale
-void sub_80A73E0(struct Sprite *sprite, bool8 a2, s16 xScale, s16 yScale, u16 rotation)
+void TrySetSpriteRotScale(struct Sprite *sprite, bool8 recalcCenterVector, s16 xScale, s16 yScale, u16 rotation)
{
int i;
struct ObjAffineSrcData src;
@@ -1285,7 +1285,7 @@ void sub_80A73E0(struct Sprite *sprite, bool8 a2, s16 xScale, s16 yScale, u16 ro
if (sprite->oam.affineMode & 1)
{
sprite->affineAnimPaused = TRUE;
- if (a2)
+ if (recalcCenterVector)
CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, sprite->oam.affineMode);
src.xScale = xScale;
src.yScale = yScale;
@@ -1303,7 +1303,7 @@ void sub_80A73E0(struct Sprite *sprite, bool8 a2, s16 xScale, s16 yScale, u16 ro
void sub_80A749C(struct Sprite *sprite)
{
- sub_80A73E0(sprite, TRUE, 0x100, 0x100, 0);
+ TrySetSpriteRotScale(sprite, TRUE, 0x100, 0x100, 0);
sprite->affineAnimPaused = FALSE;
CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, sprite->oam.affineMode);
}
@@ -1319,32 +1319,32 @@ u16 ArcTan2Neg(s16 a, s16 b)
return -var;
}
-void sub_80A750C(u16 a1, bool8 a2)
+void SetGreyscaleOrOriginalPalette(u16 paletteNum, bool8 restoreOriginalColor)
{
int i;
- struct PlttData *c;
- struct PlttData *c2;
+ struct PlttData *originalColor;
+ struct PlttData *destColor;
u16 average;
- a1 *= 0x10;
+ paletteNum *= 16;
- if (!a2)
+ if (!restoreOriginalColor)
{
- for (i = 0; i < 0x10; i++)
+ for (i = 0; i < 16; i++)
{
- c = (struct PlttData *)&gPlttBufferUnfaded[a1 + i];
- average = c->r + c->g + c->b;
+ originalColor = (struct PlttData *)&gPlttBufferUnfaded[paletteNum + i];
+ average = originalColor->r + originalColor->g + originalColor->b;
average /= 3;
- c2 = (struct PlttData *)&gPlttBufferFaded[a1 + i];
- c2->r = average;
- c2->g = average;
- c2->b = average;
+ destColor = (struct PlttData *)&gPlttBufferFaded[paletteNum + i];
+ destColor->r = average;
+ destColor->g = average;
+ destColor->b = average;
}
}
else
{
- CpuCopy32(&gPlttBufferUnfaded[a1], &gPlttBufferFaded[a1], 0x20);
+ CpuCopy32(&gPlttBufferUnfaded[paletteNum], &gPlttBufferFaded[paletteNum], 32);
}
}
@@ -1479,7 +1479,7 @@ void sub_80A77C8(struct Sprite *sprite)
}
else if (sprite->animEnded || sprite->affineAnimEnded)
{
- move_anim_8074EE0(sprite);
+ DestroySpriteAndMatrix(sprite);
}
}
@@ -1494,7 +1494,7 @@ void sub_80A77C8(struct Sprite *sprite)
void TranslateAnimSpriteToTargetMonLocation(struct Sprite *sprite)
{
bool8 v1;
- u8 attributeId;
+ u8 coordType;
if (!(gBattleAnimArgs[5] & 0xff00))
v1 = TRUE;
@@ -1502,9 +1502,9 @@ void TranslateAnimSpriteToTargetMonLocation(struct Sprite *sprite)
v1 = FALSE;
if (!(gBattleAnimArgs[5] & 0xff))
- attributeId = BATTLER_COORD_3;
+ coordType = BATTLER_COORD_Y_PIC_OFFSET;
else
- attributeId = BATTLER_COORD_Y;
+ coordType = BATTLER_COORD_Y;
InitAnimSpritePos(sprite, v1);
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
@@ -1512,7 +1512,7 @@ void TranslateAnimSpriteToTargetMonLocation(struct Sprite *sprite)
sprite->data[0] = gBattleAnimArgs[4];
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2];
- sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, attributeId) + gBattleAnimArgs[3];
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, coordType) + gBattleAnimArgs[3];
sprite->callback = StartAnimLinearTranslation;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
@@ -1544,7 +1544,7 @@ void sub_80A7938(struct Sprite *sprite)
if (!gBattleAnimArgs[6])
{
r4 = TRUE;
- attributeId = BATTLER_COORD_3;
+ attributeId = BATTLER_COORD_Y_PIC_OFFSET;
}
else
{
@@ -1571,19 +1571,19 @@ void sub_80A7938(struct Sprite *sprite)
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
-s16 duplicate_obj_of_side_rel2move_in_transparent_mode(u8 whichBattler)
+s16 CloneBattlerSpriteWithBlend(u8 animBattler)
{
u16 i;
- u8 spriteId = GetAnimBattlerSpriteId(whichBattler);
+ u8 spriteId = GetAnimBattlerSpriteId(animBattler);
- if (spriteId != 0xff)
+ if (spriteId != 0xFF)
{
for (i = 0; i < MAX_SPRITES; i++)
{
if (!gSprites[i].inUse)
{
gSprites[i] = gSprites[spriteId];
- gSprites[i].oam.objMode = 1;
+ gSprites[i].oam.objMode = ST_OAM_OBJ_BLEND;
gSprites[i].invisible = FALSE;
return i;
}
@@ -1730,49 +1730,49 @@ void sub_80A7CB4(u8 task)
AnimTask_BlendMonInAndOutSetup(&gTasks[task]);
}
-void sub_80A7CFC(struct Task *task, u8 a2, const void *a3)
+void PrepareAffineAnimInTaskData(struct Task *task, u8 spriteId, const union AffineAnimCmd *affineAnimCmds)
{
task->data[7] = 0;
task->data[8] = 0;
task->data[9] = 0;
- task->data[15] = a2;
+ task->data[15] = spriteId;
task->data[10] = 0x100;
task->data[11] = 0x100;
task->data[12] = 0;
- sub_80A8048(&task->data[13], &task->data[14], a3);
- sub_80A7270(a2, 0);
+ StorePointerInVars(&task->data[13], &task->data[14], affineAnimCmds);
+ PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_NORMAL);
}
-bool8 sub_80A7D34(struct Task *task)
+bool8 RunAffineAnimFromTaskData(struct Task *task)
{
- gUnknown_02038444 = sub_80A8050(task->data[13], task->data[14]) + (task->data[7] << 3);
- switch (gUnknown_02038444->type)
+ gAnimTaskAffineAnim = LoadPointerFromVars(task->data[13], task->data[14]) + (task->data[7] << 3);
+ switch (gAnimTaskAffineAnim->type)
{
default:
- if (!gUnknown_02038444->frame.duration)
+ if (!gAnimTaskAffineAnim->frame.duration)
{
- task->data[10] = gUnknown_02038444->frame.xScale;
- task->data[11] = gUnknown_02038444->frame.yScale;
- task->data[12] = gUnknown_02038444->frame.rotation;
+ task->data[10] = gAnimTaskAffineAnim->frame.xScale;
+ task->data[11] = gAnimTaskAffineAnim->frame.yScale;
+ task->data[12] = gAnimTaskAffineAnim->frame.rotation;
task->data[7]++;
- gUnknown_02038444++;
+ gAnimTaskAffineAnim++;
}
- task->data[10] += gUnknown_02038444->frame.xScale;
- task->data[11] += gUnknown_02038444->frame.yScale;
- task->data[12] += gUnknown_02038444->frame.rotation;
- obj_id_set_rotscale(task->data[15], task->data[10], task->data[11], task->data[12]);
- sub_80A7E6C(task->data[15]);
- if (++task->data[8] >= gUnknown_02038444->frame.duration)
+ task->data[10] += gAnimTaskAffineAnim->frame.xScale;
+ task->data[11] += gAnimTaskAffineAnim->frame.yScale;
+ task->data[12] += gAnimTaskAffineAnim->frame.rotation;
+ SetSpriteRotScale(task->data[15], task->data[10], task->data[11], task->data[12]);
+ SetBattlerSpriteYOffsetFromYScale(task->data[15]);
+ if (++task->data[8] >= gAnimTaskAffineAnim->frame.duration)
{
task->data[8] = 0;
task->data[7]++;
}
break;
case AFFINEANIMCMDTYPE_JUMP:
- task->data[7] = gUnknown_02038444->jump.target;
+ task->data[7] = gAnimTaskAffineAnim->jump.target;
break;
case AFFINEANIMCMDTYPE_LOOP:
- if (gUnknown_02038444->loop.count)
+ if (gAnimTaskAffineAnim->loop.count)
{
if (task->data[9])
{
@@ -1784,7 +1784,7 @@ bool8 sub_80A7D34(struct Task *task)
}
else
{
- task->data[9] = gUnknown_02038444->loop.count;
+ task->data[9] = gAnimTaskAffineAnim->loop.count;
}
if (!task->data[7])
{
@@ -1793,8 +1793,8 @@ bool8 sub_80A7D34(struct Task *task)
for (;;)
{
task->data[7]--;
- gUnknown_02038444--;
- if (gUnknown_02038444->type == AFFINEANIMCMDTYPE_LOOP)
+ gAnimTaskAffineAnim--;
+ if (gAnimTaskAffineAnim->type == AFFINEANIMCMDTYPE_LOOP)
{
task->data[7]++;
return TRUE;
@@ -1807,36 +1807,40 @@ bool8 sub_80A7D34(struct Task *task)
break;
case AFFINEANIMCMDTYPE_END:
gSprites[task->data[15]].pos2.y = 0;
- sub_80A7344(task->data[15]);
+ ResetSpriteRotScale(task->data[15]);
return FALSE;
}
return TRUE;
}
-void sub_80A7E6C(u8 spriteId)
+// Sets the sprite's y offset equal to the y displacement caused by the
+// matrix's scale in the y dimension.
+void SetBattlerSpriteYOffsetFromYScale(u8 spriteId)
{
- int var = 0x40 - sub_80A7F18(spriteId) * 2;
+ int var = 64 - GetBattlerYDeltaFromSpriteId(spriteId) * 2;
u16 matrix = gSprites[spriteId].oam.matrixNum;
int var2 = (var << 8) / gOamMatrices[matrix].d;
- if (var2 > 0x80)
- var2 = 0x80;
+ if (var2 > 128)
+ var2 = 128;
gSprites[spriteId].pos2.y = (var - var2) / 2;
}
-void sub_80A7EC0(u8 spriteId, u8 spriteId2)
+// Sets the sprite's y offset equal to the y displacement caused by another sprite
+// matrix's scale in the y dimension.
+void SetBattlerSpriteYOffsetFromOtherYScale(u8 spriteId, u8 otherSpriteId)
{
- int var = 0x40 - sub_80A7F18(spriteId2) * 2;
+ int var = 64 - GetBattlerYDeltaFromSpriteId(otherSpriteId) * 2;
u16 matrix = gSprites[spriteId].oam.matrixNum;
int var2 = (var << 8) / gOamMatrices[matrix].d;
- if (var2 > 0x80)
- var2 = 0x80;
+ if (var2 > 128)
+ var2 = 128;
gSprites[spriteId].pos2.y = (var - var2) / 2;
}
-u16 sub_80A7F18(u8 spriteId)
+u16 GetBattlerYDeltaFromSpriteId(u8 spriteId)
{
struct BattleSpriteInfo *spriteInfo;
u8 battlerId = gSprites[spriteId].data[0];
@@ -1849,7 +1853,7 @@ u16 sub_80A7F18(u8 spriteId)
{
if (IsContest())
{
- species = shared19348.species;
+ species = gContestResources->field_18->species;
return gMonBackPicCoords[species].y_offset;
}
else
@@ -1883,18 +1887,18 @@ u16 sub_80A7F18(u8 spriteId)
}
}
}
- return 0x40;
+ return 64;
}
-void sub_80A8048(s16 *bottom, s16 *top, const void *ptr)
+void StorePointerInVars(s16 *lo, s16 *hi, const void *ptr)
{
- *bottom = ((intptr_t) ptr) & 0xffff;
- *top = (((intptr_t) ptr) >> 16) & 0xffff;
+ *lo = ((intptr_t) ptr) & 0xffff;
+ *hi = (((intptr_t) ptr) >> 16) & 0xffff;
}
-void *sub_80A8050(s16 bottom, s16 top)
+void *LoadPointerFromVars(s16 lo, s16 hi)
{
- return (void *)((u16)bottom | ((u16)top << 16));
+ return (void *)((u16)lo | ((u16)hi << 16));
}
void sub_80A805C(struct Task *task, u8 a2, s16 a3, s16 a4, s16 a5, s16 a6, u16 a7)
@@ -1924,9 +1928,9 @@ u8 sub_80A80C8(struct Task *task)
task->data[9] = task->data[13];
task->data[10] = task->data[14];
}
- obj_id_set_rotscale(task->data[15], task->data[9], task->data[10], 0);
+ SetSpriteRotScale(task->data[15], task->data[9], task->data[10], 0);
if (task->data[8])
- sub_80A7E6C(task->data[15]);
+ SetBattlerSpriteYOffsetFromYScale(task->data[15]);
else
gSprites[task->data[15]].pos2.y = 0;
return task->data[8];
@@ -1968,16 +1972,16 @@ void sub_80A8278(void)
{
if (IsBattlerSpriteVisible(i))
{
- gSprites[gBattlerSpriteIds[i]].subpriority = GetBattlerSubpriority(i);
+ gSprites[gBattlerSpriteIds[i]].subpriority = GetBattlerSpriteSubpriority(i);
gSprites[gBattlerSpriteIds[i]].oam.priority = 2;
}
}
}
-u8 GetBattlerSubpriority(u8 battlerId)
+u8 GetBattlerSpriteSubpriority(u8 battlerId)
{
u8 position;
- u8 ret;
+ u8 subpriority;
if (IsContest())
{
@@ -1990,15 +1994,16 @@ u8 GetBattlerSubpriority(u8 battlerId)
{
position = GetBattlerPosition(battlerId);
if (position == B_POSITION_PLAYER_LEFT)
- ret = 30;
+ subpriority = 30;
else if (position == B_POSITION_PLAYER_RIGHT)
- ret = 20;
+ subpriority = 20;
else if (position == B_POSITION_OPPONENT_LEFT)
- ret = 40;
+ subpriority = 40;
else
- ret = 50;
+ subpriority = 50;
}
- return ret;
+
+ return subpriority;
}
u8 sub_80A8328(u8 battlerId)
@@ -2100,15 +2105,15 @@ s16 sub_80A861C(u8 battlerId, u8 a2)
if (IsContest())
{
- if (shared19348.unk4_0)
+ if (gContestResources->field_18->unk4_0)
{
- species = shared19348.unk2;
- personality = shared19348.unk10;
+ species = gContestResources->field_18->unk2;
+ personality = gContestResources->field_18->unk10;
}
else
{
- species = shared19348.species;
- personality = shared19348.unk8;
+ species = gContestResources->field_18->species;
+ personality = gContestResources->field_18->unk8;
}
if (species == SPECIES_UNOWN)
{
@@ -2270,7 +2275,7 @@ u8 sub_80A89C8(int battlerId, u8 spriteId, int species)
void sub_80A8A6C(struct Sprite *sprite)
{
- sub_80A6838(sprite);
+ SetSpriteCoordsToAnimAttackerCoords(sprite);
if (GetBattlerSide(gBattleAnimAttacker))
{
sprite->pos1.x -= gBattleAnimArgs[0];
@@ -2286,7 +2291,7 @@ void sub_80A8A6C(struct Sprite *sprite)
sprite->data[1] = gBattleAnimArgs[3];
sprite->data[3] = gBattleAnimArgs[4];
sprite->data[5] = gBattleAnimArgs[5];
- StoreSpriteCallbackInData6(sprite, move_anim_8074EE0);
+ StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
sprite->callback = sub_80A66DC;
}
@@ -2307,19 +2312,19 @@ void sub_80A8AEC(struct Sprite *sprite)
sprite->data[3] = gBattleAnimArgs[4];
sprite->data[5] = gBattleAnimArgs[5];
StartSpriteAnim(sprite, gBattleAnimArgs[6]);
- StoreSpriteCallbackInData6(sprite, move_anim_8074EE0);
+ StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
sprite->callback = sub_80A66DC;
}
void sub_80A8B64(struct Sprite *sprite)
{
- sub_80A6838(sprite);
+ SetSpriteCoordsToAnimAttackerCoords(sprite);
if (GetBattlerSide(gBattleAnimAttacker))
sprite->pos1.x -= gBattleAnimArgs[0];
else
sprite->pos1.x += gBattleAnimArgs[0];
sprite->pos1.y += gBattleAnimArgs[1];
- sprite->callback = sub_80A67D8;
+ sprite->callback = RunStoredCallbackWhenAnimEnds;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
@@ -2339,7 +2344,7 @@ void sub_80A8BC4(u8 taskId)
dest = (task->data[4] + 0x10) * 0x10;
src = (gSprites[task->data[0]].oam.paletteNum + 0x10) * 0x10;
- task->data[6] = GetBattlerSubpriority(gBattleAnimAttacker);
+ task->data[6] = GetBattlerSpriteSubpriority(gBattleAnimAttacker);
if (task->data[6] == 20 || task->data[6] == 40)
task->data[6] = 2;
else
@@ -2384,7 +2389,7 @@ void sub_80A8CAC(u8 taskId)
void sub_80A8D78(struct Task *task, u8 taskId)
{
- s16 spriteId = duplicate_obj_of_side_rel2move_in_transparent_mode(0);
+ s16 spriteId = CloneBattlerSpriteWithBlend(0);
if (spriteId >= 0)
{
gSprites[spriteId].oam.priority = task->data[6];
@@ -2410,7 +2415,7 @@ void sub_80A8DFC(struct Sprite *sprite)
void sub_80A8E30(struct Sprite *sprite)
{
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
- sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_3);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
if (!GetBattlerSide(gBattleAnimAttacker))
sprite->data[0] = 5;
else
diff --git a/src/battle_anim_80A9C70.c b/src/battle_anim_80A9C70.c
index f1245a032..2eea276a1 100644
--- a/src/battle_anim_80A9C70.c
+++ b/src/battle_anim_80A9C70.c
@@ -175,7 +175,7 @@ static void sub_80A9E78(struct Sprite *sprite)
void sub_80A9EF4(u8 taskId)
{
s16 x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) - 32;
- s16 y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_3) - 36;
+ s16 y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) - 36;
u8 spriteId;
if (IsContest())
diff --git a/src/battle_anim_80D51AC.c b/src/battle_anim_80D51AC.c
index 51be7bbe9..34eee7376 100644
--- a/src/battle_anim_80D51AC.c
+++ b/src/battle_anim_80D51AC.c
@@ -834,7 +834,7 @@ void AnimTask_ScaleMonAndRestore(u8 taskId)
{
u8 spriteId;
spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[3]);
- sub_80A7270(spriteId, gBattleAnimArgs[4]);
+ PrepareBattlerSpriteForRotScale(spriteId, gBattleAnimArgs[4]);
gTasks[taskId].data[0] = gBattleAnimArgs[0];
gTasks[taskId].data[1] = gBattleAnimArgs[1];
gTasks[taskId].data[2] = gBattleAnimArgs[2];
@@ -851,7 +851,7 @@ void AnimTask_ScaleMonAndRestoreStep(u8 taskId)
gTasks[taskId].data[10] += gTasks[taskId].data[0];
gTasks[taskId].data[11] += gTasks[taskId].data[1];
spriteId = gTasks[taskId].data[4];
- obj_id_set_rotscale(spriteId, gTasks[taskId].data[10], gTasks[taskId].data[11], 0);
+ SetSpriteRotScale(spriteId, gTasks[taskId].data[10], gTasks[taskId].data[11], 0);
if (--gTasks[taskId].data[2] == 0)
{
if (gTasks[taskId].data[3] > 0)
@@ -863,7 +863,7 @@ void AnimTask_ScaleMonAndRestoreStep(u8 taskId)
}
else
{
- sub_80A7344(spriteId);
+ ResetSpriteRotScale(spriteId);
DestroyAnimVisualTask(taskId);
return;
}
@@ -874,7 +874,7 @@ void sub_80D6134(u8 taskId)
{
u8 spriteId;
spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[2]);
- sub_80A7270(spriteId, 0);
+ PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_NORMAL);
gTasks[taskId].data[1] = 0;
gTasks[taskId].data[2] = gBattleAnimArgs[0];
if (gBattleAnimArgs[3] != 1)
@@ -918,7 +918,7 @@ void sub_80D622C(u8 taskId)
{
u8 spriteId;
spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[2]);
- sub_80A7270(spriteId, 0);
+ PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_NORMAL);
gTasks[taskId].data[1] = 0;
gTasks[taskId].data[2] = gBattleAnimArgs[0];
if (gBattleAnimArgs[2] == 0)
@@ -955,17 +955,17 @@ void sub_80D622C(u8 taskId)
void sub_80D6308(u8 taskId)
{
gTasks[taskId].data[3] += gTasks[taskId].data[4];
- obj_id_set_rotscale(gTasks[taskId].data[5], 0x100, 0x100, gTasks[taskId].data[3]);
+ SetSpriteRotScale(gTasks[taskId].data[5], 0x100, 0x100, gTasks[taskId].data[3]);
if (gTasks[taskId].data[7])
{
- sub_80A73A0(gTasks[taskId].data[5]);
+ SetBattlerSpriteYOffsetFromRotation(gTasks[taskId].data[5]);
}
if (++gTasks[taskId].data[1] >= gTasks[taskId].data[2])
{
switch (gTasks[taskId].data[6])
{
case 1:
- sub_80A7344(gTasks[taskId].data[5]);
+ ResetSpriteRotScale(gTasks[taskId].data[5]);
case 0:
default:
DestroyAnimVisualTask(taskId);
diff --git a/src/battle_anim_8170478.c b/src/battle_anim_8170478.c
index a570e1bfa..34898899c 100755
--- a/src/battle_anim_8170478.c
+++ b/src/battle_anim_8170478.c
@@ -604,19 +604,19 @@ void sub_8170B04(u8 taskId)
switch (gTasks[taskId].data[0])
{
case 0:
- sub_80A7270(spriteId, 0);
+ PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_NORMAL);
gTasks[taskId].data[10] = 0x100;
gTasks[taskId].data[0]++;
break;
case 1:
gTasks[taskId].data[10] += 0x30;
- obj_id_set_rotscale(spriteId, gTasks[taskId].data[10], gTasks[taskId].data[10], 0);
- sub_80A7E6C(spriteId);
+ SetSpriteRotScale(spriteId, gTasks[taskId].data[10], gTasks[taskId].data[10], 0);
+ SetBattlerSpriteYOffsetFromYScale(spriteId);
if (gTasks[taskId].data[10] >= 0x2D0)
gTasks[taskId].data[0]++;
break;
case 2:
- sub_80A7344(spriteId);
+ ResetSpriteRotScale(spriteId);
gSprites[spriteId].invisible = 1;
DestroyAnimVisualTask(taskId);
break;
@@ -756,7 +756,7 @@ void sub_8170F2C(u8 taskId)
}
ballId = ItemIdToBallId(gLastUsedItem);
- subpriority = GetBattlerSubpriority(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)) + 1;
+ subpriority = GetBattlerSpriteSubpriority(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)) + 1;
spriteId = CreateSprite(&gBallSpriteTemplates[ballId], x + 32, y | 80, subpriority);
gSprites[spriteId].data[0] = 34;
gSprites[spriteId].data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, 0);
@@ -862,7 +862,7 @@ static void sub_8171240(struct Sprite *sprite)
switch (gTasks[taskId].data[0])
{
case 0:
- sub_80A7270(spriteId, 0);
+ PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_NORMAL);
gTasks[taskId].data[10] = 256;
gUnknown_030062DC = 28;
gUnknown_030062E4 = (gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y) - (sprite->pos1.y + sprite->pos2.y);
@@ -872,14 +872,14 @@ static void sub_8171240(struct Sprite *sprite)
break;
case 1:
gTasks[taskId].data[10] += 0x20;
- obj_id_set_rotscale(spriteId, gTasks[taskId].data[10], gTasks[taskId].data[10], 0);
+ SetSpriteRotScale(spriteId, gTasks[taskId].data[10], gTasks[taskId].data[10], 0);
gTasks[taskId].data[3] += gTasks[taskId].data[2];
gSprites[spriteId].pos2.y = -gTasks[taskId].data[3] >> 8;
if (gTasks[taskId].data[10] >= 0x480)
gTasks[taskId].data[0]++;
break;
case 2:
- sub_80A7344(spriteId);
+ ResetSpriteRotScale(spriteId);
gSprites[spriteId].invisible = 1;
gTasks[taskId].data[0]++;
break;
diff --git a/src/battle_anim_effects_1.c b/src/battle_anim_effects_1.c
index 78e0608e1..3b1b49e34 100644
--- a/src/battle_anim_effects_1.c
+++ b/src/battle_anim_effects_1.c
@@ -1,9 +1,15 @@
#include "global.h"
+#include "alloc.h"
#include "battle_anim.h"
#include "battle_interface.h"
+#include "decompress.h"
#include "gpu_regs.h"
+#include "graphics.h"
+#include "main.h"
+#include "math_util.h"
#include "palette.h"
#include "random.h"
+#include "scanline_effect.h"
#include "sound.h"
#include "trig.h"
#include "util.h"
@@ -2220,7 +2226,7 @@ void sub_80FE8E0(struct Sprite* sprite)
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
sprite->callback = StartAnimLinearTranslation;
- StoreSpriteCallbackInData6(sprite, move_anim_8074EE0);
+ StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
}
void sub_80FE930(struct Sprite* sprite)
@@ -2257,9 +2263,9 @@ static void sub_80FE9E4(struct Sprite* sprite)
else
{
if (sprite->data[5] > 0x7F)
- sprite->subpriority = GetBattlerSubpriority(gBattleAnimTarget) + 1;
+ sprite->subpriority = GetBattlerSpriteSubpriority(gBattleAnimTarget) + 1;
else
- sprite->subpriority = GetBattlerSubpriority(gBattleAnimTarget) + 6;
+ sprite->subpriority = GetBattlerSpriteSubpriority(gBattleAnimTarget) + 6;
sprite->pos2.x += Sin(sprite->data[5], 5);
sprite->pos2.y += Cos(sprite->data[5], 14);
@@ -2278,7 +2284,7 @@ void sub_80FEA58(u8 taskId)
gBattleAnimArgs[1] = 0;
gBattleAnimArgs[2] = 80;
gBattleAnimArgs[3] = 0;
- CreateSpriteAndAnimate(&gUnknown_08592210, 0, 0, GetBattlerSubpriority(gBattleAnimTarget) + 1);
+ CreateSpriteAndAnimate(&gUnknown_08592210, 0, 0, GetBattlerSpriteSubpriority(gBattleAnimTarget) + 1);
}
if (gTasks[taskId].data[1] == 15)
@@ -2465,9 +2471,9 @@ static void sub_80FEECC(struct Sprite* sprite)
sprite->pos2.x += Sin(sprite->data[5], 32);
sprite->pos2.y += Cos(sprite->data[5], -5);
if ((u16)(sprite->data[5] - 0x40) < 0x80)
- sprite->subpriority = GetBattlerSubpriority(gBattleAnimAttacker) - 1;
+ sprite->subpriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker) - 1;
else
- sprite->subpriority = GetBattlerSubpriority(gBattleAnimAttacker) + 1;
+ sprite->subpriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker) + 1;
sprite->data[5] = (sprite->data[5] + 5) & 0xFF;
}
@@ -2731,7 +2737,7 @@ void sub_80FF458(u8 taskId)
}
else
{
- sub_80A7270(spriteId, 1);
+ PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_BLEND);
gTasks[taskId].data[14] = gSprites[spriteId].oam.priority;
gSprites[spriteId].oam.priority = sub_80A8328(gBattleAnimTarget);
spriteId = GetAnimBattlerSpriteId(ANIM_DEF_PARTNER);
@@ -2753,8 +2759,8 @@ static void sub_80FF53C(u8 taskId)
gSprites[spriteId].pos2.x = -gSprites[spriteId].pos2.x;
gTasks[taskId].data[11] += 16;
- obj_id_set_rotscale(spriteId, gTasks[taskId].data[11], gTasks[taskId].data[11], 0);
- sub_80A7E6C(spriteId);
+ SetSpriteRotScale(spriteId, gTasks[taskId].data[11], gTasks[taskId].data[11], 0);
+ SetBattlerSpriteYOffsetFromYScale(spriteId);
if (--gTasks[taskId].data[1] == 0)
{
gTasks[taskId].data[0] = 0;
@@ -2769,7 +2775,7 @@ static void sub_80FF5CC(u8 taskId)
if (gTasks[taskId].data[0] == 0)
{
u8 spriteId = GetAnimBattlerSpriteId(ANIM_TARGET);
- sub_80A7344(spriteId);
+ ResetSpriteRotScale(spriteId);
gSprites[spriteId].pos2.x = 0;
gSprites[spriteId].pos2.y = 0;
gSprites[spriteId].oam.priority = gTasks[taskId].data[14];
@@ -2795,7 +2801,6 @@ void sub_80FF698(struct Sprite* sprite)
switch (sprite->data[0])
{
case 0:
- {
if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER)
gBattleAnimArgs[0] *= -1;
@@ -2804,9 +2809,7 @@ void sub_80FF698(struct Sprite* sprite)
sprite->invisible = 1;
sprite->data[0]++;
break;
- }
case 1:
- {
sprite->invisible = 0;
if (sprite->affineAnimEnded)
{
@@ -2819,7 +2822,6 @@ void sub_80FF698(struct Sprite* sprite)
break;
}
}
- }
}
void sub_80FF768(struct Sprite* sprite)
@@ -3205,7 +3207,7 @@ void sub_80FFFC0(u8 taskId)
{
struct Task *task = &gTasks[taskId];
- task->data[4] = GetBattlerSubpriority(gBattleAnimTarget) - 1;
+ task->data[4] = GetBattlerSpriteSubpriority(gBattleAnimTarget) - 1;
task->data[6] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
task->data[7] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
task->data[10] = sub_80A861C(gBattleAnimTarget, 1);
@@ -3529,7 +3531,7 @@ static void sub_810074C(struct Sprite* sprite)
return;
}
- move_anim_8074EE0(sprite);
+ DestroySpriteAndMatrix(sprite);
}
void sub_81007C4(u8 taskId)
@@ -3613,7 +3615,7 @@ void sub_8100898(struct Sprite* sprite)
if (IsContest())
c -= 0x8000;
- sub_80A73E0(sprite, 0, 0x100, 0x100, c);
+ TrySetSpriteRotScale(sprite, 0, 0x100, 0x100, c);
sprite->callback = sub_81009A0;
}
}
@@ -3630,7 +3632,7 @@ static void sub_81009A0(struct Sprite* sprite)
}
else
{
- move_anim_8074EE0(sprite);
+ DestroySpriteAndMatrix(sprite);
}
}
@@ -3653,7 +3655,7 @@ void sub_81009F8(struct Sprite* sprite)
sprite->pos1.y += gBattleAnimArgs[1];
}
- sprite->callback = sub_80A67D8;
+ sprite->callback = RunStoredCallbackWhenAnimEnds;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
@@ -3676,7 +3678,7 @@ void sub_8100A94(struct Sprite* sprite)
sprite->data[3] = gBattleAnimArgs[4];
sprite->data[5] = gBattleAnimArgs[5];
StartSpriteAffineAnim(sprite, gBattleAnimArgs[6]);
- StoreSpriteCallbackInData6(sprite, move_anim_8074EE0);
+ StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
sprite->callback = sub_80A66DC;
}
@@ -4024,7 +4026,7 @@ static void sub_8101298(struct Sprite* sprite, int unk1, int unk2)
void sub_810130C(struct Sprite* sprite)
{
if (!gBattleAnimArgs[2])
- sub_80A6838(sprite);
+ SetSpriteCoordsToAnimAttackerCoords(sprite);
sub_80A6864(sprite, gBattleAnimArgs[0]);
sprite->pos1.y += gBattleAnimArgs[1];
@@ -4032,7 +4034,7 @@ void sub_810130C(struct Sprite* sprite)
sprite->data[1] = gBattleAnimArgs[3];
sprite->data[2] = gBattleAnimArgs[4];
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
- sprite->callback = sub_80A656C;
+ sprite->callback = TranslateAnimLinearSimple;
}
void sub_810135C(struct Sprite* sprite)
@@ -4069,13 +4071,13 @@ void sub_810135C(struct Sprite* sprite)
sprite->data[1] = gBattleAnimArgs[3];
sprite->data[2] = gBattleAnimArgs[4];
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
- sprite->callback = sub_80A656C;
+ sprite->callback = TranslateAnimLinearSimple;
}
void sub_8101440(struct Sprite* sprite)
{
- sub_80A6838(sprite);
- if (GetBattlerSide(gBattleAnimAttacker) == 0)
+ SetSpriteCoordsToAnimAttackerCoords(sprite);
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
{
sprite->pos1.x += gBattleAnimArgs[0];
sprite->pos1.y += gBattleAnimArgs[1];
@@ -4105,7 +4107,7 @@ static void sub_81014A0(struct Sprite* sprite)
void sub_81014F4(struct Sprite* sprite)
{
- sub_80A6838(sprite);
+ SetSpriteCoordsToAnimAttackerCoords(sprite);
if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
{
sprite->pos1.x += gBattleAnimArgs[0];
@@ -4130,7 +4132,7 @@ static void sub_8101560(struct Sprite* sprite)
sprite->data[4] += sprite->data[3] * 2;
sprite->data[0] += sprite->data[1];
if (++sprite->data[1] > 60)
- move_anim_8074EE0(sprite);
+ DestroySpriteAndMatrix(sprite);
}
void sub_81015AC(struct Sprite* sprite)
@@ -4347,14 +4349,14 @@ static void sub_81019E8(struct Sprite* sprite)
if (sprite->data[0] == 0)
{
sprite->data[3] = gBattlerSpriteIds[gBattleAnimAttacker];
- sub_80A7270(sprite->data[3], 0);
+ PrepareBattlerSpriteForRotScale(sprite->data[3], ST_OAM_OBJ_NORMAL);
sprite->data[4] = (sprite->data[6] = GetBattlerSide(gBattleAnimAttacker)) ? 0x300 : 0xFFFFFD00;
sprite->data[5] = 0;
}
sprite->data[5] += sprite->data[4];
- obj_id_set_rotscale(sprite->data[3], 0x100, 0x100, sprite->data[5]);
- sub_80A73A0(sprite->data[3]);
+ SetSpriteRotScale(sprite->data[3], 0x100, 0x100, sprite->data[5]);
+ SetBattlerSpriteYOffsetFromRotation(sprite->data[3]);
if (++sprite->data[0] > 3)
{
sprite->data[0] = 0;
@@ -4400,11 +4402,11 @@ static void sub_8101AE8(struct Sprite* sprite)
}
sprite->data[5] += sprite->data[4];
- obj_id_set_rotscale(sprite->data[3], 0x100, 0x100, sprite->data[5]);
- sub_80A73A0(sprite->data[3]);
+ SetSpriteRotScale(sprite->data[3], 0x100, 0x100, sprite->data[5]);
+ SetBattlerSpriteYOffsetFromRotation(sprite->data[3]);
if (++sprite->data[0] > 2)
{
- sub_80A7344(sprite->data[3]);
+ ResetSpriteRotScale(sprite->data[3]);
sprite->callback = sub_8101B84;
}
}
@@ -4430,13 +4432,13 @@ static void sub_8101BA0(struct Sprite *sprite)
sprite->data[3] = GetBattlerSide(gBattleAnimAttacker);
sprite->data[4] = (sprite->data[3] != B_SIDE_PLAYER) ? 0x200 : -0x200;
sprite->data[5] = 0;
- sub_80A7270(sprite->data[2], 0);
+ PrepareBattlerSpriteForRotScale(sprite->data[2], ST_OAM_OBJ_NORMAL);
sprite->data[0]++;
// fall through
case 1:
sprite->data[5] += sprite->data[4];
- obj_id_set_rotscale(sprite->data[2], 0x100, 0x100, sprite->data[5]);
- sub_80A73A0(sprite->data[2]);
+ SetSpriteRotScale(sprite->data[2], 0x100, 0x100, sprite->data[5]);
+ SetBattlerSpriteYOffsetFromRotation(sprite->data[2]);
if (++sprite->data[1] > 3)
{
sprite->data[1] = 0;
@@ -4446,11 +4448,11 @@ static void sub_8101BA0(struct Sprite *sprite)
break;
case 2:
sprite->data[5] += sprite->data[4];
- obj_id_set_rotscale(sprite->data[2], 0x100, 0x100, sprite->data[5]);
- sub_80A73A0(sprite->data[2]);
+ SetSpriteRotScale(sprite->data[2], 0x100, 0x100, sprite->data[5]);
+ SetBattlerSpriteYOffsetFromRotation(sprite->data[2]);
if (++sprite->data[1] > 3)
{
- sub_80A7344(sprite->data[2]);
+ ResetSpriteRotScale(sprite->data[2]);
DestroyAnimSprite(sprite);
}
break;
@@ -4512,7 +4514,7 @@ static void sub_8101D2C(u8 taskId)
task->data[3] = 8;
task->data[4] = 0;
task->data[5] = (task->data[1] == 0) ? -0xC0 : 0xC0;
- sub_80A7270(task->data[0], 0);
+ PrepareBattlerSpriteForRotScale(task->data[0], ST_OAM_OBJ_NORMAL);
task->data[2]++;
}
break;
@@ -4520,8 +4522,8 @@ static void sub_8101D2C(u8 taskId)
if (task->data[3])
{
task->data[4] += task->data[5];
- obj_id_set_rotscale(task->data[0], 0x100, 0x100, task->data[4]);
- sub_80A73A0(task->data[0]);
+ SetSpriteRotScale(task->data[0], 0x100, 0x100, task->data[4]);
+ SetBattlerSpriteYOffsetFromRotation(task->data[0]);
task->data[3]--;
}
else
@@ -4592,13 +4594,13 @@ static void sub_8101EEC(u8 taskId)
if (task->data[3])
{
task->data[4] -= task->data[5];
- obj_id_set_rotscale(task->data[0], 0x100, 0x100, task->data[4]);
- sub_80A73A0(task->data[0]);
+ SetSpriteRotScale(task->data[0], 0x100, 0x100, task->data[4]);
+ SetBattlerSpriteYOffsetFromRotation(task->data[0]);
task->data[3]--;
}
else
{
- sub_80A7344(task->data[0]);
+ ResetSpriteRotScale(task->data[0]);
DestroyAnimVisualTask(taskId);
}
}
@@ -4619,7 +4621,7 @@ void sub_8101F40(struct Sprite* sprite)
sprite->data[0] = 0;
sprite->data[1] = 0;
StoreSpriteCallbackInData6(sprite, sub_810208C);
- sprite->callback = sub_80A67D8;
+ sprite->callback = RunStoredCallbackWhenAnimEnds;
}
void sub_8101FA8(struct Sprite* sprite)
@@ -4627,7 +4629,7 @@ void sub_8101FA8(struct Sprite* sprite)
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + 0xFFD0;
sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
StoreSpriteCallbackInData6(sprite, sub_8102044);
- sprite->callback = sub_80A67D8;
+ sprite->callback = RunStoredCallbackWhenAnimEnds;
}
void sub_8101FF0(struct Sprite* sprite)
@@ -4914,7 +4916,7 @@ void sub_81025C0(u8 taskId)
gTasks[taskId].data[9] = 15;
b = sub_80A76C4(1, 1, 1, 1);
c = a | b;
- sub_80A8048(&gTasks[taskId].data[14], &gTasks[taskId].data[15], (void*)c);
+ StorePointerInVars(&gTasks[taskId].data[14], &gTasks[taskId].data[15], (void*)c);
b = b | (0x10000 << IndexOfSpritePaletteTag(ANIM_TAG_MOON));
d = IndexOfSpritePaletteTag(ANIM_TAG_GREEN_SPARKLE);
BeginNormalPaletteFade((0x10000 << d) | b, 0, 0, 16, RGB(27, 29, 31));
@@ -4989,7 +4991,7 @@ void sub_81026A8(u8 taskId)
case 2:
if (++task->data[1] > 30)
{
- BeginNormalPaletteFade((u32)sub_80A8050(task->data[14], task->data[15]), 0, 16, 0, RGB(27, 29, 31));
+ BeginNormalPaletteFade((u32)LoadPointerFromVars(task->data[14], task->data[15]), 0, 16, 0, RGB(27, 29, 31));
task->data[0]++;
}
break;
@@ -5080,7 +5082,7 @@ void sub_81029B4(u8 taskId)
BlendPalette(r3, 16, 11, RGB(0, 0, 0));
task->data[3] = 0;
i = 0;
- while (i < 2 && (obj = duplicate_obj_of_side_rel2move_in_transparent_mode(0)) >= 0)
+ while (i < 2 && (obj = CloneBattlerSpriteWithBlend(0)) >= 0)
{
gSprites[obj].oam.paletteNum = task->data[1];
gSprites[obj].data[0] = 0;
@@ -5138,7 +5140,7 @@ static void sub_8102B3C(struct Sprite* sprite)
void sub_8102BCC(struct Sprite* sprite)
{
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
- sprite->callback = sub_80A67D8;
+ sprite->callback = RunStoredCallbackWhenAnimEnds;
}
void sub_8102BE8(u8 taskId)
@@ -5183,7 +5185,7 @@ void sub_8102CD4(struct Sprite* sprite)
u8 index;
u8 a;
u8 b;
- sub_80A6838(sprite);
+ SetSpriteCoordsToAnimAttackerCoords(sprite);
StartSpriteAnim(sprite, gBattleAnimArgs[0]);
if ((index = IndexOfSpritePaletteTag(gUnknown_08593020[gBattleAnimArgs[1]][0])) != 0xFF)
sprite->oam.paletteNum = index;
@@ -5242,7 +5244,7 @@ static void sub_8102DE4(struct Sprite* sprite)
if ((u32)((c + 16) << 16) > (0x110) << 16 || a < -16 || a > 0x80)
{
- move_anim_8074EE0(sprite);
+ DestroySpriteAndMatrix(sprite);
}
else
{
@@ -5296,7 +5298,7 @@ static void sub_8102F40(struct Sprite* sprite)
}
if (++sprite->data[0] == 48)
- move_anim_8074EE0(sprite);
+ DestroySpriteAndMatrix(sprite);
}
void sub_8102FB8(struct Sprite* sprite)
@@ -5323,7 +5325,7 @@ void sub_8103028(struct Sprite* sprite)
{
s16 xDiff;
u8 index;
- sub_80A6838(sprite);
+ SetSpriteCoordsToAnimAttackerCoords(sprite);
sprite->pos1.y += 8;
StartSpriteAnim(sprite, gBattleAnimArgs[1]);
index = IndexOfSpritePaletteTag(gUnknown_08593020[gBattleAnimArgs[2]][0]);
@@ -5385,7 +5387,7 @@ void sub_8103164(struct Sprite* sprite)
sprite->data[1] = a + 2;
StartSpriteAnim(sprite, a);
StoreSpriteCallbackInData6(sprite, sub_81031D0);
- sprite->callback = sub_80A67D8;
+ sprite->callback = RunStoredCallbackWhenAnimEnds;
}
static void sub_81031D0(struct Sprite* sprite)
@@ -5394,7 +5396,7 @@ static void sub_81031D0(struct Sprite* sprite)
{
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
StartSpriteAnim(sprite, sprite->data[1]);
- sprite->callback = sub_80A67D8;
+ sprite->callback = RunStoredCallbackWhenAnimEnds;
}
}
@@ -5409,7 +5411,7 @@ void sub_8103208(struct Sprite* sprite)
sub_810310C(battler, sprite);
sprite->data[0] = 0;
StoreSpriteCallbackInData6(sprite, sub_8103250);
- sprite->callback = sub_80A67BC;
+ sprite->callback = RunStoredCallbackWhenAffineAnimEnds;
}
static void sub_8103250(struct Sprite* sprite)
@@ -5417,8 +5419,8 @@ static void sub_8103250(struct Sprite* sprite)
if (++sprite->data[0] > 16)
{
StartSpriteAffineAnim(sprite, 1);
- StoreSpriteCallbackInData6(sprite, move_anim_8074EE0);
- sprite->callback = sub_80A67BC;
+ StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
+ sprite->callback = RunStoredCallbackWhenAffineAnimEnds;
}
}
@@ -5441,7 +5443,7 @@ void sub_8103284(struct Sprite* sprite)
sprite->data[3] = sprite->subpriority + 4;
sprite->data[4] = 0;
StoreSpriteCallbackInData6(sprite, sub_8103300);
- sprite->callback = sub_80A67BC;
+ sprite->callback = RunStoredCallbackWhenAffineAnimEnds;
}
static void sub_8103300(struct Sprite* sprite)
@@ -5509,7 +5511,7 @@ static void sub_81033F0(struct Sprite* sprite)
sprite->data[1] = 0;
StartSpriteAnim(sprite, sprite->data[0]);
StoreSpriteCallbackInData6(sprite, sub_810342C);
- sprite->callback = sub_80A67D8;
+ sprite->callback = RunStoredCallbackWhenAnimEnds;
}
}
diff --git a/src/battle_anim_effects_2.c b/src/battle_anim_effects_2.c
new file mode 100755
index 000000000..244823d13
--- /dev/null
+++ b/src/battle_anim_effects_2.c
@@ -0,0 +1,3884 @@
+#include "global.h"
+#include "alloc.h"
+#include "battle_anim.h"
+#include "battle_interface.h"
+#include "decompress.h"
+#include "gpu_regs.h"
+#include "graphics.h"
+#include "main.h"
+#include "math_util.h"
+#include "palette.h"
+#include "random.h"
+#include "scanline_effect.h"
+#include "sound.h"
+#include "trig.h"
+#include "util.h"
+#include "constants/rgb.h"
+#include "constants/songs.h"
+
+extern void sub_8108C94(struct Sprite *);
+extern void sub_810310C(u8, struct Sprite *);
+
+void sub_8103448(struct Sprite *);
+void sub_8103498(struct Sprite *);
+void sub_810358C(struct Sprite *);
+void sub_8103620(struct Sprite *);
+void Anim_KinesisZapEnergy(struct Sprite *);
+void Anim_SwordsDanceBlade(struct Sprite *);
+void AnimSonicBoomProjectile(struct Sprite *);
+void sub_8103AA4(struct Sprite *);
+void sub_8103FE8(struct Sprite *);
+void sub_8104088(struct Sprite *);
+void sub_810413C(struct Sprite *);
+void sub_81041C4(struct Sprite *);
+void Anim_RazorWindTornado(struct Sprite *);
+void Anim_ViceGripPincer(struct Sprite *);
+void Anim_GuillotinePincer(struct Sprite *);
+void Anim_BreathPuff(struct Sprite *);
+void Anim_AngerMark(struct Sprite *);
+void sub_810501C(struct Sprite *);
+void sub_81051C4(struct Sprite *);
+void sub_81052A4(struct Sprite *);
+void sub_81054E8(struct Sprite *);
+void sub_8105538(struct Sprite *);
+void sub_8105C48(struct Sprite *);
+void sub_8105DE8(struct Sprite *);
+void sub_8105E60(struct Sprite *);
+void sub_8106140(struct Sprite *);
+void sub_81061C4(struct Sprite *);
+void sub_810624C(struct Sprite *);
+void AnimOrbitFast(struct Sprite *);
+void AnimOrbitScatter(struct Sprite *);
+void sub_8106944(struct Sprite *);
+void sub_81069B8(struct Sprite *);
+void sub_81069D0(struct Sprite *);
+void sub_8106AD0(struct Sprite *);
+void sub_8106B54(struct Sprite *);
+void sub_8106C80(struct Sprite *);
+void sub_8106CD0(struct Sprite *);
+void sub_8106E00(struct Sprite *);
+void sub_8106F00(struct Sprite *);
+void sub_8106F60(struct Sprite *);
+void sub_81070AC(struct Sprite *);
+static void sub_81034D8(struct Sprite *);
+static void sub_8103658(struct Sprite *);
+static void sub_8103680(struct Sprite *);
+static void AnimTask_WithdrawStep(u8);
+static void Anim_SwordsDanceBladeStep(struct Sprite *);
+static void sub_8104018(struct Sprite *);
+static void sub_8104154(struct Sprite *);
+static void sub_810421C(struct Sprite *);
+static void sub_81042A0(struct Sprite *);
+static void Anim_ViceGripPincerStep(struct Sprite *);
+static void Anim_GuillotinePincerStep1(struct Sprite *);
+static void Anim_GuillotinePincerStep2(struct Sprite *);
+static void Anim_GuillotinePincerStep3(struct Sprite *);
+static void AnimTask_GrowAndGreyscaleStep(u8);
+static void AnimTask_MinimizeStep1(u8);
+static void CreateMinimizeSprite(struct Task *, u8);
+static void ClonedMinizeSprite_Step(struct Sprite *);
+static void AnimTask_SplashStep(u8);
+static void AnimTask_GrowAndShrinkStep(u8);
+static void sub_8104C78(u8);
+static void sub_8104D28(u8);
+static void sub_8104F54(u8);
+static void sub_8105078(struct Sprite *);
+static void sub_810557C(struct Sprite *);
+static void sub_81055F4(struct Sprite *);
+static void sub_810561C(struct Sprite *);
+static void sub_8105694(struct Sprite *);
+static void sub_81056D4(struct Sprite *);
+static void sub_810571C(struct Sprite *);
+static void sub_810575C(struct Sprite *);
+static void sub_81057B8(u8);
+static void sub_8105878(u8);
+static void sub_81059E0(u8);
+static void sub_8105B08(u8);
+static void sub_8105F30(u8);
+static void sub_8105F84(u8);
+static void sub_810618C(struct Sprite *);
+static void sub_810627C(struct Sprite *);
+static void sub_81063A8(u8);
+static void sub_81065EC(u8);
+static void AnimOrbitFastStep(struct Sprite *);
+static void AnimOrbitScatterStep(struct Sprite *);
+static void sub_8106D5C(struct Sprite *);
+static void sub_8106DD4(u8);
+static void sub_8106EC8(struct Sprite *);
+static void sub_8107018(struct Sprite *);
+static void sub_810703C(struct Sprite *);
+
+const struct SpriteTemplate gUnknown_08593264 =
+{
+ .tileTag = ANIM_TAG_FINGER,
+ .paletteTag = ANIM_TAG_FINGER,
+ .oam = &gUnknown_08524914,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8103448,
+};
+
+const union AnimCmd gUnknown_0859327C[] =
+{
+ ANIMCMD_FRAME(4, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_08593284[] =
+{
+ gUnknown_0859327C,
+};
+
+const struct SpriteTemplate gUnknown_08593288 =
+{
+ .tileTag = ANIM_TAG_MUSIC_NOTES,
+ .paletteTag = ANIM_TAG_MUSIC_NOTES,
+ .oam = &gUnknown_0852490C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8103498,
+};
+
+const struct SpriteTemplate gUnknown_085932A0 =
+{
+ .tileTag = 0,
+ .paletteTag = 0,
+ .oam = &gDummyOamData,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_810358C,
+};
+
+extern const union AffineAnimCmd *const gUnknown_08597060[];
+const struct SpriteTemplate gUnknown_085932B8 =
+{
+ .tileTag = ANIM_TAG_CLAMP,
+ .paletteTag = ANIM_TAG_CLAMP,
+ .oam = &gUnknown_08524A9C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_08597060,
+ .callback = sub_8103620,
+};
+
+const union AnimCmd gUnknown_085932D0[] =
+{
+ ANIMCMD_FRAME(0, 9),
+ ANIMCMD_FRAME(16, 3),
+ ANIMCMD_FRAME(32, 3),
+ ANIMCMD_FRAME(48, 3),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_085932E4[] =
+{
+ gUnknown_085932D0,
+};
+
+const union AffineAnimCmd gUnknown_085932E8[] =
+{
+ AFFINEANIMCMD_FRAME(0x50, 0x50, 0, 0),
+ AFFINEANIMCMD_FRAME(0x9, 0x9, 0, 18),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gUnknown_08593300[] =
+{
+ gUnknown_085932E8,
+};
+
+const struct SpriteTemplate gUnknown_08593304 =
+{
+ .tileTag = ANIM_TAG_UNUSED_EXPLOSION,
+ .paletteTag = ANIM_TAG_UNUSED_EXPLOSION,
+ .oam = &gUnknown_08524974,
+ .anims = gUnknown_085932E4,
+ .images = NULL,
+ .affineAnims = gUnknown_08593300,
+ .callback = sub_80A77C8,
+};
+
+const union AnimCmd gUnknown_0859331C[] =
+{
+ ANIMCMD_FRAME(0, 3, .hFlip = TRUE),
+ ANIMCMD_FRAME(8, 3, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 3, .hFlip = TRUE),
+ ANIMCMD_FRAME(24, 3, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 3, .hFlip = TRUE),
+ ANIMCMD_FRAME(40, 3, .hFlip = TRUE),
+ ANIMCMD_FRAME(48, 3, .hFlip = TRUE),
+ ANIMCMD_LOOP(1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_08593340[] =
+{
+ gUnknown_0859331C,
+};
+
+const struct SpriteTemplate gKinesisZapEnergySpriteTemplate =
+{
+ .tileTag = ANIM_TAG_ALERT,
+ .paletteTag = ANIM_TAG_ALERT,
+ .oam = &gUnknown_08524934,
+ .anims = gUnknown_08593340,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = Anim_KinesisZapEnergy,
+};
+
+const union AffineAnimCmd gUnknown_0859335C[] =
+{
+ AFFINEANIMCMD_FRAME(0x10, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0x14, 0x0, 0, 12),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 32),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gUnknown_0859337C[] =
+{
+ gUnknown_0859335C,
+};
+
+const struct SpriteTemplate gSwordsDanceBladeSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_SWORD,
+ .paletteTag = ANIM_TAG_SWORD,
+ .oam = &gUnknown_08524ADC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_0859337C,
+ .callback = Anim_SwordsDanceBlade,
+};
+
+const struct SpriteTemplate gSonicBoomSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_AIR_WAVE,
+ .paletteTag = ANIM_TAG_AIR_WAVE,
+ .oam = &gUnknown_08524B14,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSonicBoomProjectile,
+};
+
+const struct SpriteTemplate gUnknown_085933B0 =
+{
+ .tileTag = ANIM_TAG_AIR_WAVE,
+ .paletteTag = ANIM_TAG_AIR_WAVE,
+ .oam = &gUnknown_08524A54,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8103AA4,
+};
+
+const union AffineAnimCmd gUnknown_085933C8[] =
+{
+ AFFINEANIMCMD_FRAME(0x20, 0x20, 0, 0),
+ AFFINEANIMCMD_FRAME(0x7, 0x7, 0, -56),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gUnknown_085933E0[] =
+{
+ AFFINEANIMCMD_FRAME(0x5, 0x5, 0, 10),
+ AFFINEANIMCMD_FRAME(0xFFF6, 0xFFF6, 0, 10),
+ AFFINEANIMCMD_FRAME(0xA, 0xA, 0, 10),
+ AFFINEANIMCMD_FRAME(0xFFF6, 0xFFF6, 0, 10),
+ AFFINEANIMCMD_FRAME(0xA, 0xA, 0, 10),
+ AFFINEANIMCMD_FRAME(0xFFF6, 0xFFF6, 0, 10),
+ AFFINEANIMCMD_FRAME(0xA, 0xA, 0, 10),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gUnknown_08593420[] =
+{
+ gUnknown_085933C8,
+};
+
+const union AffineAnimCmd *const gUnknown_08593424[] =
+{
+ gUnknown_085933E0,
+};
+
+const struct SpriteTemplate gSupersonicWaveSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_GOLD_RING,
+ .paletteTag = ANIM_TAG_GOLD_RING,
+ .oam = &gUnknown_08524A14,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_08593420,
+ .callback = TranslateAnimSpriteToTargetMonLocation,
+};
+
+const struct SpriteTemplate gScreechWaveSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_PURPLE_RING,
+ .paletteTag = ANIM_TAG_PURPLE_RING,
+ .oam = &gUnknown_08524A14,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_08593420,
+ .callback = TranslateAnimSpriteToTargetMonLocation,
+};
+
+const struct SpriteTemplate gUnknown_08593458 =
+{
+ .tileTag = ANIM_TAG_METAL_SOUND_WAVES,
+ .paletteTag = ANIM_TAG_METAL_SOUND_WAVES,
+ .oam = &gUnknown_08524A1C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_08593420,
+ .callback = TranslateAnimSpriteToTargetMonLocation,
+};
+
+const struct SpriteTemplate gUnknown_08593470 =
+{
+ .tileTag = ANIM_TAG_BLUE_RING_2,
+ .paletteTag = ANIM_TAG_BLUE_RING_2,
+ .oam = &gUnknown_08524A14,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_08593424,
+ .callback = sub_8108C94,
+};
+
+const struct SpriteTemplate gUnknown_08593488 =
+{
+ .tileTag = ANIM_TAG_LARGE_FRESH_EGG,
+ .paletteTag = ANIM_TAG_LARGE_FRESH_EGG,
+ .oam = &gUnknown_0852490C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80A78AC,
+};
+
+const struct SpriteTemplate gUnknown_085934A0 =
+{
+ .tileTag = ANIM_TAG_UNUSED_VOID_LINES,
+ .paletteTag = ANIM_TAG_UNUSED_VOID_LINES,
+ .oam = &gUnknown_08524A3C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8103FE8,
+};
+
+const union AnimCmd gUnknown_085934B8[] =
+{
+ ANIMCMD_FRAME(8, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_085934C0[] =
+{
+ gUnknown_085934B8,
+};
+
+const union AffineAnimCmd gUnknown_085934C4[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 10, 1),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gUnknown_085934D4[] =
+{
+ gUnknown_085934C4,
+};
+
+const struct SpriteTemplate gUnknown_085934D8 =
+{
+ .tileTag = ANIM_TAG_COIN,
+ .paletteTag = ANIM_TAG_COIN,
+ .oam = &gUnknown_0852496C,
+ .anims = gUnknown_085934C0,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8104088,
+};
+
+const struct SpriteTemplate gUnknown_085934F0 =
+{
+ .tileTag = ANIM_TAG_COIN,
+ .paletteTag = ANIM_TAG_COIN,
+ .oam = &gUnknown_0852496C,
+ .anims = gUnknown_085934C0,
+ .images = NULL,
+ .affineAnims = gUnknown_085934D4,
+ .callback = sub_810413C,
+};
+
+const union AffineAnimCmd gUnknown_08593508[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 20, 1),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gUnknown_08593518[] =
+{
+ gUnknown_08593508,
+};
+
+const struct SpriteTemplate gUnknown_0859351C =
+{
+ .tileTag = ANIM_TAG_SEED,
+ .paletteTag = ANIM_TAG_SEED,
+ .oam = &gUnknown_0852496C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_08593518,
+ .callback = sub_81041C4,
+};
+
+const union AffineAnimCmd gUnknown_08593534[] =
+{
+ AFFINEANIMCMD_FRAME(0x10, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0x4, 0x0, 0, 40),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gUnknown_0859354C[] =
+{
+ gUnknown_08593534,
+};
+
+const struct SpriteTemplate gRazorWindTornadoSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_GUST,
+ .paletteTag = ANIM_TAG_GUST,
+ .oam = &gUnknown_085249BC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_0859354C,
+ .callback = Anim_RazorWindTornado,
+};
+
+const union AnimCmd gUnknown_08593568[] =
+{
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_FRAME(16, 3),
+ ANIMCMD_FRAME(32, 20),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_08593578[] =
+{
+ ANIMCMD_FRAME(0, 3, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 3, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 20, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_08593588[] =
+{
+ gUnknown_08593568,
+ gUnknown_08593578,
+};
+
+const struct SpriteTemplate gViceGripSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_CUT,
+ .paletteTag = ANIM_TAG_CUT,
+ .oam = &gUnknown_08524A34,
+ .anims = gUnknown_08593588,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = Anim_ViceGripPincer,
+};
+
+const union AnimCmd gUnknown_085935A8[] =
+{
+ ANIMCMD_FRAME(0, 2),
+ ANIMCMD_FRAME(16, 2),
+ ANIMCMD_FRAME(32, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_085935B8[] =
+{
+ ANIMCMD_FRAME(0, 2, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 2, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 1, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_085935C8[] =
+{
+ gUnknown_085935A8,
+ gUnknown_085935B8,
+};
+
+const struct SpriteTemplate gGuillotineSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_CUT,
+ .paletteTag = ANIM_TAG_CUT,
+ .oam = &gUnknown_08524A34,
+ .anims = gUnknown_085935C8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = Anim_GuillotinePincer,
+};
+
+const union AffineAnimCmd gSplashEffectAffineAnimCmds[] =
+{
+ AFFINEANIMCMD_FRAME(-6, 4, 0, 8),
+ AFFINEANIMCMD_FRAME(10, -10, 0, 8),
+ AFFINEANIMCMD_FRAME(-4, 6, 0, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gGrowAndShrinkAffineAnimCmds[] =
+{
+ AFFINEANIMCMD_FRAME(-4, -5, 0, 12),
+ AFFINEANIMCMD_FRAME(0, 0, 0, 24),
+ AFFINEANIMCMD_FRAME(4, 5, 0, 12),
+ AFFINEANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_08593628[] =
+{
+ ANIMCMD_FRAME(0, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(4, 40, .hFlip = TRUE),
+ ANIMCMD_FRAME(8, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(12, 4, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_0859363C[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(4, 40),
+ ANIMCMD_FRAME(8, 4),
+ ANIMCMD_FRAME(12, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_08593650[] =
+{
+ gUnknown_08593628,
+ gUnknown_0859363C,
+};
+
+const struct SpriteTemplate gBreathPuffSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_BREATH,
+ .paletteTag = ANIM_TAG_BREATH,
+ .oam = &gUnknown_0852490C,
+ .anims = gUnknown_08593650,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = Anim_BreathPuff,
+};
+
+const union AffineAnimCmd gUnknown_08593670[] =
+{
+ AFFINEANIMCMD_FRAME(0xB, 0xB, 0, 8),
+ AFFINEANIMCMD_FRAME(0xFFF5, 0xFFF5, 0, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gUnknown_08593688[] =
+{
+ gUnknown_08593670,
+};
+
+const struct SpriteTemplate gAngerMarkSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_ANGER,
+ .paletteTag = ANIM_TAG_ANGER,
+ .oam = &gUnknown_0852496C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_08593688,
+ .callback = Anim_AngerMark,
+};
+
+const union AffineAnimCmd gUnknown_085936A4[] =
+{
+ AFFINEANIMCMD_FRAME(-10, 9, 0, 7),
+ AFFINEANIMCMD_FRAME(20, -20, 0, 7),
+ AFFINEANIMCMD_FRAME(-20, 20, 0, 7),
+ AFFINEANIMCMD_FRAME(10, -9, 0, 7),
+ AFFINEANIMCMD_LOOP(2),
+ AFFINEANIMCMD_END,
+};
+
+const struct SpriteTemplate gUnknown_085936D4 =
+{
+ .tileTag = ANIM_TAG_PENCIL,
+ .paletteTag = ANIM_TAG_PENCIL,
+ .oam = &gUnknown_08524914,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_810501C,
+};
+
+const struct SpriteTemplate gUnknown_085936EC =
+{
+ .tileTag = ANIM_TAG_SNORE_Z,
+ .paletteTag = ANIM_TAG_SNORE_Z,
+ .oam = &gUnknown_08524914,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80A7938,
+};
+
+const union AnimCmd gUnknown_08593704[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_FRAME(16, 5),
+ ANIMCMD_FRAME(32, 5),
+ ANIMCMD_FRAME(48, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_08593718[] =
+{
+ gUnknown_08593704,
+};
+//*
+const struct SpriteTemplate gBattleAnimSpriteTemplate_859371C =
+{
+ .tileTag = ANIM_TAG_EXPLOSION,
+ .paletteTag = ANIM_TAG_EXPLOSION,
+ .oam = &gUnknown_08524914,
+ .anims = gUnknown_08593718,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80A77C8,
+};
+
+const union AffineAnimCmd gUnknown_08593734[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 2),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 4),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 2),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd gUnknown_08593754[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gUnknown_08593764[] =
+{
+ AFFINEANIMCMD_FRAME(0xFFF8, 0x4, 0, 8),
+ AFFINEANIMCMD_LOOP(0),
+ AFFINEANIMCMD_FRAME(0x10, 0xFFF8, 0, 8),
+ AFFINEANIMCMD_FRAME(0xFFF0, 0x8, 0, 8),
+ AFFINEANIMCMD_LOOP(1),
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 15),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gUnknown_085937A4[] =
+{
+ gUnknown_08593734,
+ gUnknown_08593754,
+ gUnknown_08593764,
+};
+//*
+const struct SpriteTemplate gUnknown_085937B0 =
+{
+ .tileTag = ANIM_TAG_BREAKING_EGG,
+ .paletteTag = ANIM_TAG_BREAKING_EGG,
+ .oam = &gUnknown_08524AF4,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_085937A4,
+ .callback = sub_8105538,
+};
+
+const union AffineAnimCmd gUnknown_085937C8[] =
+{
+ AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0),
+ AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 30),
+ AFFINEANIMCMD_END_ALT(1),
+};
+
+const union AffineAnimCmd gUnknown_085937E0[] =
+{
+ AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0),
+ AFFINEANIMCMD_FRAME(0x20, 0x20, 0, 15),
+ AFFINEANIMCMD_END_ALT(1),
+};
+
+const union AffineAnimCmd gUnknown_085937F8[] =
+{
+ AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0),
+ AFFINEANIMCMD_FRAME(0xB, 0xB, 0, 45),
+ AFFINEANIMCMD_END_ALT(1),
+};
+
+const union AffineAnimCmd *const gUnknown_08593810[] =
+{
+ gUnknown_085937C8,
+ gUnknown_085937E0,
+};
+
+const union AffineAnimCmd *const gUnknown_08593818[] =
+{
+ gUnknown_085937F8,
+};
+
+const struct SpriteTemplate gUnknown_0859381C =
+{
+ .tileTag = ANIM_TAG_THIN_RING,
+ .paletteTag = ANIM_TAG_THIN_RING,
+ .oam = &gUnknown_085249DC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_08593810,
+ .callback = sub_80A77C8,
+};
+//*
+const union AffineAnimCmd gUnknown_08593834[] =
+{
+ AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0),
+ AFFINEANIMCMD_FRAME(0xFFF0, 0xFFF0, 0, 30),
+ AFFINEANIMCMD_END_ALT(1),
+};
+
+const union AffineAnimCmd *const gUnknown_0859384C[] =
+{
+ gUnknown_08593834,
+};
+
+const struct SpriteTemplate gUnknown_08593850 =
+{
+ .tileTag = ANIM_TAG_THIN_RING,
+ .paletteTag = ANIM_TAG_THIN_RING,
+ .oam = &gUnknown_08524AFC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_0859384C,
+ .callback = sub_80A77C8,
+};
+
+const struct SpriteTemplate gUnknown_08593868 =
+{
+ .tileTag = ANIM_TAG_THIN_RING,
+ .paletteTag = ANIM_TAG_THIN_RING,
+ .oam = &gUnknown_08524AFC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_08593810,
+ .callback = sub_81051C4,
+};
+
+const struct SpriteTemplate gUnknown_08593880 =
+{
+ .tileTag = ANIM_TAG_THIN_RING,
+ .paletteTag = ANIM_TAG_THIN_RING,
+ .oam = &gUnknown_08524AFC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_08593818,
+ .callback = sub_81052A4,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_8593898 =
+{
+ .tileTag = ANIM_TAG_THIN_RING,
+ .paletteTag = ANIM_TAG_THIN_RING,
+ .oam = &gUnknown_08524AFC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_08593810,
+ .callback = sub_81054E8,
+};
+
+const union AffineAnimCmd gUnknown_085938B0[] =
+{
+ AFFINEANIMCMD_FRAME(96, -13, 0, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_085938C0[] =
+{
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_FRAME(4, 3),
+ ANIMCMD_FRAME(8, 3),
+ ANIMCMD_FRAME(4, 3),
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_085938D8[] =
+{
+ gUnknown_085938C0,
+};
+
+const struct SpriteTemplate gUnknown_085938DC =
+{
+ .tileTag = ANIM_TAG_SPEED_DUST,
+ .paletteTag = ANIM_TAG_SPEED_DUST,
+ .oam = &gUnknown_0852490C,
+ .anims = gUnknown_085938D8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8105C48,
+};
+
+const s8 gUnknown_085938F4[][2] =
+{
+ {30, 28},
+ {-20, 24},
+ {16, 26},
+ {-10, 28},
+};
+
+const union AnimCmd gUnknown_085938FC[] =
+{
+ ANIMCMD_FRAME(0, 6),
+ ANIMCMD_FRAME(16, 6),
+ ANIMCMD_FRAME(32, 15),
+ ANIMCMD_FRAME(16, 6),
+ ANIMCMD_FRAME(0, 6),
+ ANIMCMD_FRAME(16, 6, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 15, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 6, .hFlip = TRUE),
+ ANIMCMD_FRAME(0, 6),
+ ANIMCMD_FRAME(16, 6),
+ ANIMCMD_FRAME(32, 15),
+ ANIMCMD_FRAME(16, 6),
+ ANIMCMD_FRAME(0, 6),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_08593934[] =
+{
+ gUnknown_085938FC,
+};
+
+const struct SpriteTemplate gUnknown_08593938 =
+{
+ .tileTag = ANIM_TAG_BELL,
+ .paletteTag = ANIM_TAG_BELL,
+ .oam = &gUnknown_08524914,
+ .anims = gUnknown_08593934,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80A77C8,
+};
+
+const u16 gUnknown_08593950[] =
+{
+ ANIM_TAG_MUSIC_NOTES_2,
+ ANIM_SPRITES_START - 1,
+ ANIM_SPRITES_START - 2,
+};
+
+const struct SpriteTemplate gUnknown_08593958 =
+{
+ .tileTag = ANIM_TAG_MUSIC_NOTES_2,
+ .paletteTag = ANIM_TAG_MUSIC_NOTES_2,
+ .oam = &gUnknown_0852490C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8105DE8,
+};
+
+const struct SpriteTemplate gUnknown_08593970 =
+{
+ .tileTag = ANIM_TAG_MAGENTA_HEART,
+ .paletteTag = ANIM_TAG_MAGENTA_HEART,
+ .oam = &gUnknown_0852490C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8105E60,
+};
+
+const union AffineAnimCmd gUnknown_08593988[] =
+{
+ AFFINEANIMCMD_FRAME(0x000A, 0xFFF3, 0x00, 0x0A),
+ AFFINEANIMCMD_FRAME(0xFFF6, 0x000D, 0x00, 0x0A),
+ AFFINEANIMCMD_END,
+};
+
+const struct SpriteTemplate gUnknown_085939A0 =
+{
+ .tileTag = ANIM_TAG_RED_HEART,
+ .paletteTag = ANIM_TAG_RED_HEART,
+ .oam = &gUnknown_0852490C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8106140,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_85939B8 =
+{
+ .tileTag = ANIM_TAG_RED_HEART,
+ .paletteTag = ANIM_TAG_RED_HEART,
+ .oam = &gUnknown_0852490C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_81061C4,
+};
+
+const struct SpriteTemplate gUnknown_085939D0 =
+{
+ .tileTag = ANIM_TAG_RED_HEART,
+ .paletteTag = ANIM_TAG_RED_HEART,
+ .oam = &gUnknown_0852490C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_810624C,
+};
+
+const union AffineAnimCmd gUnknown_085939E8[] =
+{
+ AFFINEANIMCMD_FRAME(0x80, 0x80, 0, 0),
+ AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 1),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+const union AffineAnimCmd *const gUnknown_08593A00[] =
+{
+ gUnknown_085939E8,
+};
+
+const struct SpriteTemplate gHiddenPowerOrbSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_RED_ORB,
+ .paletteTag = ANIM_TAG_RED_ORB,
+ .oam = &gUnknown_0852496C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_08593A00,
+ .callback = AnimOrbitFast,
+};
+
+const struct SpriteTemplate gHiddenPowerOrbScatterSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_RED_ORB,
+ .paletteTag = ANIM_TAG_RED_ORB,
+ .oam = &gUnknown_085249CC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_08593A00,
+ .callback = AnimOrbitScatter,
+};
+
+const union AffineAnimCmd gUnknown_08593A34[] =
+{
+ AFFINEANIMCMD_FRAME(0x80, 0x80, 0, 0),
+ AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 1),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+const union AffineAnimCmd *const gUnknown_08593A4C[] =
+{
+ gUnknown_08593A34,
+};
+
+const struct SpriteTemplate gUnknown_08593A50 =
+{
+ .tileTag = ANIM_TAG_RED_ORB_2,
+ .paletteTag = ANIM_TAG_RED_ORB_2,
+ .oam = &gUnknown_085249C4,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_08593A4C,
+ .callback = sub_8106944,
+};
+
+const union AnimCmd gUnknown_08593A68[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(4, 4),
+ ANIMCMD_FRAME(8, 4),
+ ANIMCMD_FRAME(4, 4),
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_08593A80[] =
+{
+ gUnknown_08593A68,
+};
+
+const struct SpriteTemplate gUnknown_08593A84 =
+{
+ .tileTag = ANIM_TAG_EYE_SPARKLE,
+ .paletteTag = ANIM_TAG_EYE_SPARKLE,
+ .oam = &gUnknown_0852490C,
+ .anims = gUnknown_08593A80,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_81069B8,
+};
+
+const union AnimCmd gUnknown_08593A9C[] =
+{
+ ANIMCMD_FRAME(0, 24),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_08593AA4[] =
+{
+ gUnknown_08593A9C,
+};
+
+const struct SpriteTemplate gUnknown_08593AA8 =
+{
+ .tileTag = ANIM_TAG_ANGEL,
+ .paletteTag = ANIM_TAG_ANGEL,
+ .oam = &gUnknown_08524914,
+ .anims = gUnknown_08593AA4,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_81069D0,
+};
+
+const struct SpriteTemplate gUnknown_08593AC0 =
+{
+ .tileTag = ANIM_TAG_PINK_HEART,
+ .paletteTag = ANIM_TAG_PINK_HEART,
+ .oam = &gUnknown_0852490C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8106AD0,
+};
+
+const union AnimCmd gUnknown_08593AD8[] =
+{
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd gUnknown_08593AE0[] =
+{
+ ANIMCMD_FRAME(16, 3),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gUnknown_08593AE8[] =
+{
+ gUnknown_08593AD8,
+ gUnknown_08593AE0,
+};
+
+const struct SpriteTemplate gUnknown_08593AF0 =
+{
+ .tileTag = ANIM_TAG_DEVIL,
+ .paletteTag = ANIM_TAG_DEVIL,
+ .oam = &gUnknown_08524914,
+ .anims = gUnknown_08593AE8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8106B54,
+};
+
+const union AnimCmd gUnknown_08593B08[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(16, 4),
+ ANIMCMD_FRAME(32, 4),
+ ANIMCMD_FRAME(48, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_08593B1C[] =
+{
+ ANIMCMD_FRAME(0, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(48, 4, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_08593B30[] =
+{
+ gUnknown_08593B08,
+ gUnknown_08593B1C,
+};
+
+const struct SpriteTemplate gUnknown_08593B38 =
+{
+ .tileTag = ANIM_TAG_SWIPE,
+ .paletteTag = ANIM_TAG_SWIPE,
+ .oam = &gUnknown_08524914,
+ .anims = gUnknown_08593B30,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8106C80,
+};
+
+const union AnimCmd gUnknown_08593B50[] =
+{
+ ANIMCMD_FRAME(0, 8),
+ ANIMCMD_FRAME(16, 8),
+ ANIMCMD_FRAME(32, 8),
+ ANIMCMD_FRAME(16, 8),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_08593B64[] =
+{
+ ANIMCMD_FRAME(16, 8, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 8, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 8, .hFlip = TRUE),
+ ANIMCMD_FRAME(0, 8, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_08593B78[] =
+{
+ gUnknown_08593B50,
+ gUnknown_08593B64,
+};
+
+const struct SpriteTemplate gUnknown_08593B80 =
+{
+ .tileTag = ANIM_TAG_MOVEMENT_WAVES,
+ .paletteTag = ANIM_TAG_MOVEMENT_WAVES,
+ .oam = &gUnknown_08524914,
+ .anims = gUnknown_08593B78,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8106CD0,
+};
+
+const union AffineAnimCmd gUnknown_08593B98[] =
+{
+ AFFINEANIMCMD_FRAME(-12, 8, 0, 4),
+ AFFINEANIMCMD_FRAME(20, -20, 0, 4),
+ AFFINEANIMCMD_FRAME(-8, 12, 0, 4),
+ AFFINEANIMCMD_END,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_8593BB8 =
+{
+ .tileTag = ANIM_TAG_JAGGED_MUSIC_NOTE,
+ .paletteTag = ANIM_TAG_JAGGED_MUSIC_NOTE,
+ .oam = &gUnknown_08524914,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8106E00,
+};
+
+const union AffineAnimCmd gUnknown_08593BD0[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 5),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gUnknown_08593BE0[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 16),
+ AFFINEANIMCMD_END_ALT(1),
+};
+
+const union AffineAnimCmd gUnknown_08593BF0[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 16),
+ AFFINEANIMCMD_END_ALT(1),
+};
+
+const union AffineAnimCmd *const gUnknown_08593C00[] =
+{
+ gUnknown_08593BD0,
+ gUnknown_08593BE0,
+ gUnknown_08593BF0,
+};
+
+extern const union AnimCmd *const gUnknown_08592FCC[];
+const struct SpriteTemplate gUnknown_08593C0C =
+{
+ .tileTag = ANIM_TAG_MUSIC_NOTES_2,
+ .paletteTag = ANIM_TAG_MUSIC_NOTES_2,
+ .oam = &gUnknown_0852496C,
+ .anims = gUnknown_08592FCC,
+ .images = NULL,
+ .affineAnims = gUnknown_08593C00,
+ .callback = sub_8106F60,
+};
+
+const struct SpriteTemplate gUnknown_08593C24 =
+{
+ .tileTag = ANIM_TAG_MUSIC_NOTES_2,
+ .paletteTag = ANIM_TAG_MUSIC_NOTES_2,
+ .oam = &gUnknown_0852496C,
+ .anims = gUnknown_08592FCC,
+ .images = NULL,
+ .affineAnims = gUnknown_08593C00,
+ .callback = sub_8106F00,
+};
+
+const union AffineAnimCmd gUnknown_08593C3C[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gUnknown_08593C4C[] =
+{
+ AFFINEANIMCMD_FRAME(0x200, 0x100, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gUnknown_08593C5C[] =
+{
+ gUnknown_08593C3C,
+ gUnknown_08593C4C,
+};
+
+const struct SpriteTemplate gUnknown_08593C64 =
+{
+ .tileTag = ANIM_TAG_GUARD_RING,
+ .paletteTag = ANIM_TAG_GUARD_RING,
+ .oam = &gUnknown_08524B1C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_08593C5C,
+ .callback = sub_81070AC,
+};
+
+void sub_8103448(struct Sprite *sprite)
+{
+ SetSpriteCoordsToAnimAttackerCoords(sprite);
+ sub_80A6864(sprite, gBattleAnimArgs[0]);
+ sprite->pos1.y += gBattleAnimArgs[1];
+ sprite->data[1] = gBattleAnimArgs[2];
+ sprite->data[2] = gBattleAnimArgs[4];
+ sprite->data[3] = gBattleAnimArgs[5];
+ sprite->data[4] = gBattleAnimArgs[3];
+ StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
+ sprite->callback = sub_80A6450;
+ sprite->callback(sprite);
+}
+
+void sub_8103498(struct Sprite *sprite)
+{
+ u8 battler;
+ if (gBattleAnimArgs[0] == 0)
+ battler = gBattleAnimAttacker;
+ else
+ battler = gBattleAnimTarget;
+
+ sub_810310C(battler, sprite);
+ sprite->data[0] = 0;
+ sprite->data[1] = 0;
+ sprite->callback = sub_81034D8;
+}
+
+static void sub_81034D8(struct Sprite *sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ sprite->pos2.y -= 3;
+ if (++sprite->data[1] == 6)
+ sprite->data[0]++;
+ break;
+ case 1:
+ sprite->pos2.y += 3;
+ if (--sprite->data[1] == 0)
+ sprite->data[0]++;
+ break;
+ case 2:
+ if (++sprite->data[1] == 64)
+ DestroyAnimSprite(sprite);
+ break;
+ }
+}
+
+static void sub_810353C(struct Sprite *sprite)
+{
+ s16 temp;
+ gSprites[sprite->data[2]].pos2.x += sprite->data[1];
+ temp = sprite->data[1];
+ sprite->data[1] = -temp;
+ if (sprite->data[0] == 0)
+ {
+ gSprites[sprite->data[2]].pos2.x = 0;
+ DestroySpriteAndMatrix(sprite);
+ }
+
+ sprite->data[0]--;
+}
+
+void sub_810358C(struct Sprite *sprite)
+{
+ u8 spriteId;
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ spriteId = gBattlerSpriteIds[gBattleAnimTarget];
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ sprite->pos1.x -= gBattleAnimArgs[0];
+ else
+ sprite->pos1.x += gBattleAnimArgs[0];
+
+ sprite->pos1.y += gBattleAnimArgs[1];
+ sprite->data[0] = gBattleAnimArgs[2];
+ sprite->data[1] = gBattleAnimArgs[3];
+ sprite->data[2] = spriteId;
+ sprite->callback = sub_810353C;
+ sprite->invisible = 1;
+}
+
+void sub_8103620(struct Sprite *sprite)
+{
+ InitAnimSpritePos(sprite, TRUE);
+ sprite->data[0] = gBattleAnimArgs[2];
+ sprite->data[1] = gBattleAnimArgs[3];
+ sprite->data[5] = gBattleAnimArgs[4];
+ sprite->callback = WaitAnimForDuration;
+ StoreSpriteCallbackInData6(sprite, sub_8103658);
+}
+
+static void sub_8103658(struct Sprite *sprite)
+{
+ sprite->data[0] = sprite->data[1];
+ sprite->data[2] = sprite->pos1.x;
+ sprite->data[4] = sprite->pos1.y + 15;
+ sprite->callback = StartAnimLinearTranslation;
+ StoreSpriteCallbackInData6(sprite, sub_8103680);
+}
+
+static void sub_8103680(struct Sprite *sprite)
+{
+ if (sprite->data[5] == 0)
+ DestroyAnimSprite(sprite);
+ else
+ sprite->data[5]--;
+}
+
+// Rotates the attacking mon sprite downwards and then back upwards to its original position.
+// No args.
+void AnimTask_Withdraw(u8 taskId)
+{
+ PrepareBattlerSpriteForRotScale(gBattlerSpriteIds[gBattleAnimAttacker], ST_OAM_OBJ_NORMAL);
+ gTasks[taskId].func = AnimTask_WithdrawStep;
+}
+
+static void AnimTask_WithdrawStep(u8 taskId)
+{
+ u8 spriteId = gBattlerSpriteIds[gBattleAnimAttacker];
+ s16 rotation;
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
+ rotation = -gTasks[taskId].data[0];
+ else
+ rotation = gTasks[taskId].data[0];
+
+ SetSpriteRotScale(spriteId, 0x100, 0x100, rotation);
+ if (gTasks[taskId].data[1] == 0)
+ {
+ gTasks[taskId].data[0] += 0xB0;
+ // this y position update gets overwritten by SetBattlerSpriteYOffsetFromRotation()
+ gSprites[spriteId].pos2.y++;
+ }
+ else if (gTasks[taskId].data[1] == 1)
+ {
+ if (++gTasks[taskId].data[3] == 30)
+ gTasks[taskId].data[1] = 2;
+
+ return;
+ }
+ else
+ {
+ gTasks[taskId].data[0] -= 0xB0;
+ // this y position update gets overwritten by SetBattlerSpriteYOffsetFromRotation()
+ gSprites[spriteId].pos2.y--;
+ }
+
+ SetBattlerSpriteYOffsetFromRotation(spriteId);
+ if (gTasks[taskId].data[0] == 0xF20 || gTasks[taskId].data[0] == 0)
+ {
+ if (gTasks[taskId].data[1] == 2)
+ {
+ ResetSpriteRotScale(spriteId);
+ DestroyAnimVisualTask(taskId);
+ }
+ else
+ {
+ gTasks[taskId].data[1]++;
+ }
+ }
+}
+
+// Animates a "zap of energy" used in KINESIS.
+// arg 0: x pixel offset
+// arg 1: y pixel offset
+// arg 2: vertical flip
+void Anim_KinesisZapEnergy(struct Sprite *sprite)
+{
+ SetSpriteCoordsToAnimAttackerCoords(sprite);
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ sprite->pos1.x -= gBattleAnimArgs[0];
+ else
+ sprite->pos1.x += gBattleAnimArgs[0];
+
+ sprite->pos1.y += gBattleAnimArgs[1];
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ {
+ sprite->hFlip = 1;
+ if (gBattleAnimArgs[2])
+ sprite->vFlip = 1;
+ }
+ else
+ {
+ if (gBattleAnimArgs[2])
+ sprite->vFlip = 1;
+ }
+
+ sprite->callback = RunStoredCallbackWhenAnimEnds;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+}
+
+// Animates a sword that rises into the air after a brief pause.
+// arg 0: x pixel offset
+// arg 1: y pixel offset
+void Anim_SwordsDanceBlade(struct Sprite *sprite)
+{
+ InitAnimSpritePos(sprite, FALSE);
+ sprite->callback = RunStoredCallbackWhenAffineAnimEnds;
+ StoreSpriteCallbackInData6(sprite, Anim_SwordsDanceBladeStep);
+}
+
+static void Anim_SwordsDanceBladeStep(struct Sprite *sprite)
+{
+ sprite->data[0] = 6;
+ sprite->data[2] = sprite->pos1.x;
+ sprite->data[4] = sprite->pos1.y - 32;
+ sprite->callback = StartAnimLinearTranslation;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+}
+
+// Moves a projectile towards the target mon. The sprite is rotated to be pointing
+// in the same direction it's moving.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: target x pixel offset
+// arg 3: target y pixel offset
+// arg 4: duration
+void AnimSonicBoomProjectile(struct Sprite *sprite)
+{
+ s16 targetXPos;
+ s16 targetYPos;
+ u16 rotation;
+
+ if (IsContest())
+ {
+ gBattleAnimArgs[2] = -gBattleAnimArgs[2];
+ }
+ else if (GetBattlerSide(gBattleAnimAttacker) != 0)
+ {
+ gBattleAnimArgs[2] = -gBattleAnimArgs[2];
+ gBattleAnimArgs[1] = -gBattleAnimArgs[1];
+ gBattleAnimArgs[3] = -gBattleAnimArgs[3];
+ }
+
+ InitAnimSpritePos(sprite, TRUE);
+ targetXPos = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[2];
+ targetYPos = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3];
+ rotation = ArcTan2Neg(targetXPos - sprite->pos1.x, targetYPos - sprite->pos1.y);
+ rotation += 0xF000;
+ if (IsContest())
+ rotation -= 0x6000;
+
+ TrySetSpriteRotScale(sprite, FALSE, 0x100, 0x100, rotation);
+ sprite->data[0] = gBattleAnimArgs[4];
+ sprite->data[2] = targetXPos;
+ sprite->data[4] = targetYPos;
+ sprite->callback = StartAnimLinearTranslation;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+}
+
+static void sub_81039CC(struct Sprite *sprite)
+{
+ if (sprite->data[0]-- <= 0)
+ {
+ gTasks[sprite->data[7]].data[1]--;
+ DestroySprite(sprite);
+ }
+}
+
+static void sub_8103A00(struct Sprite *sprite)
+{
+ struct Task* task = &gTasks[sprite->data[7]];
+ if (sprite->data[0] > task->data[5])
+ {
+ sprite->data[5] += sprite->data[3];
+ sprite->data[6] += sprite->data[4];
+ }
+ else
+ {
+ sprite->data[5] -= sprite->data[3];
+ sprite->data[6] -= sprite->data[4];
+ }
+
+ sprite->data[1] += sprite->data[5];
+ sprite->data[2] += sprite->data[6];
+ if (1 & task->data[7])
+ sprite->pos2.x = ((u16)sprite->data[1] >> 8) * -1;
+ else
+ sprite->pos2.x = (u16)sprite->data[1] >> 8;
+
+ if (1 & task->data[8])
+ sprite->pos2.y = ((u16)sprite->data[2] / 256u) * -1;
+ else
+ sprite->pos2.y = (u16)sprite->data[2] / 256u;
+
+ if (sprite->data[0]-- <= 0)
+ {
+ sprite->data[0] = 30;
+ sprite->callback = sub_81039CC;
+ }
+}
+
+void sub_8103AA4(struct Sprite *sprite)
+{
+ s16 a;
+ s16 b;
+ s16 c;
+
+ struct Task* task = &gTasks[sprite->data[7]];
+ sprite->data[1] += (-2 & task->data[7]);
+ sprite->data[2] += (-2 & task->data[8]);
+ if (1 & task->data[7])
+ sprite->pos2.x = ((u16)sprite->data[1] >> 8) * -1;
+ else
+ sprite->pos2.x = (u16)sprite->data[1] >> 8;
+
+ if (1 & task->data[8])
+ sprite->pos2.y = ((u16)sprite->data[2] / 256u) * -1;
+ else
+ sprite->pos2.y = (u16)sprite->data[2] / 256u;
+
+ if (sprite->data[0]-- <= 0)
+ {
+ sprite->data[0] = 8;
+ task->data[5] = 4;
+ a = sub_8151624(0x1000);
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->pos2.y = 0;
+ sprite->pos2.x = 0;
+ if (task->data[11] >= sprite->pos1.x)
+ b = (task->data[11] - sprite->pos1.x) << 8;
+ else
+ b = (sprite->pos1.x - task->data[11]) << 8;
+
+ if (task->data[12] >= sprite->pos1.y)
+ c = (task->data[12] - sprite->pos1.y) << 8;
+ else
+ c = (sprite->pos1.y - task->data[12]) << 8;
+
+ sprite->data[2] = 0;
+ sprite->data[1] = 0;
+ sprite->data[6] = 0;
+ sprite->data[5] = 0;
+ sprite->data[3] = sub_8151534(sub_8151534(b, a), sub_8151624(0x1C0));
+ sprite->data[4] = sub_8151534(sub_8151534(c, a), sub_8151624(0x1C0));
+ sprite->callback = sub_8103A00;
+ }
+}
+
+static void sub_8103BE4(u8 taskId)
+{
+ if (gTasks[taskId].data[1] == 0)
+ DestroyAnimVisualTask(taskId);
+}
+
+static void sub_8103C0C(u8 taskId)
+{
+ if (gTasks[taskId].data[0]-- <= 0)
+ {
+ u8 spriteId;
+ struct Sprite *sprite;
+ spriteId = CreateSprite(&gUnknown_085933B0, gTasks[taskId].data[9], gTasks[taskId].data[10], gTasks[taskId].data[2] - gTasks[taskId].data[1]);
+ sprite = &gSprites[spriteId];
+ switch (gTasks[taskId].data[4])
+ {
+ case 1:
+ sprite->oam.matrixNum |= 24;
+ break;
+ case 2:
+ sprite->oam.matrixNum = 8;
+ break;
+ }
+
+ sprite->data[0] = gTasks[taskId].data[5] - gTasks[taskId].data[6];
+ sprite->data[7] = taskId;
+ gTasks[taskId].data[gTasks[taskId].data[1] + 13] = spriteId;
+ gTasks[taskId].data[0] = gTasks[taskId].data[3];
+ gTasks[taskId].data[1]++;
+ PlaySE12WithPanning(SE_W059B, BattleAnimAdjustPanning(-63));
+ if (gTasks[taskId].data[1] > 2)
+ gTasks[taskId].func = sub_8103BE4;
+ }
+}
+
+void sub_8103CF0(u8 taskId)
+{
+ s16 attackerY = 0;
+ s16 attackerX = 0;
+ s16 targetX = 0;
+ s16 targetY = 0;
+ s16 xDiff, yDiff;
+
+ if (IsContest())
+ {
+ gTasks[taskId].data[4] = 2;
+ gBattleAnimArgs[0] = -gBattleAnimArgs[0];
+ if (gBattleAnimArgs[2] & 1)
+ gBattleAnimArgs[2] &= ~1;
+ else
+ gBattleAnimArgs[2] |= 1;
+ }
+ else
+ {
+ if ((gBattlerPositions[gBattleAnimTarget] & 1) == 0)
+ {
+ gTasks[taskId].data[4] = 1;
+ gBattleAnimArgs[0] = -gBattleAnimArgs[0];
+ gBattleAnimArgs[1] = -gBattleAnimArgs[1];
+ if (gBattleAnimArgs[2] & 1)
+ gBattleAnimArgs[2] &= ~1;
+ else
+ gBattleAnimArgs[2] |= 1;
+ }
+ }
+
+ attackerX = gTasks[taskId].data[9] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X);
+ attackerY = gTasks[taskId].data[10] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y);
+ if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ && IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimTarget)))
+ {
+ SetAverageBattlerPositions(gBattleAnimTarget, 0, &targetX, &targetY);
+ }
+ else
+ {
+ targetX = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X);
+ targetY = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y);
+ }
+
+ targetX = gTasks[taskId].data[11] = targetX + gBattleAnimArgs[0];
+ targetY = gTasks[taskId].data[12] = targetY + gBattleAnimArgs[1];
+ if (targetX >= attackerX)
+ xDiff = targetX - attackerX;
+ else
+ xDiff = attackerX - targetX;
+
+ gTasks[taskId].data[5] = sub_8151534(xDiff, sub_8151624(gBattleAnimArgs[2] & ~1));
+ gTasks[taskId].data[6] = sub_8151534(gTasks[taskId].data[5], 0x80);
+ gTasks[taskId].data[7] = gBattleAnimArgs[2];
+ if (targetY >= attackerY)
+ {
+ yDiff = targetY - attackerY;
+ gTasks[taskId].data[8] = sub_8151534(yDiff, sub_8151624(gTasks[taskId].data[5])) & ~1;
+ }
+ else
+ {
+ yDiff = attackerY - targetY;
+ gTasks[taskId].data[8] = sub_8151534(yDiff, sub_8151624(gTasks[taskId].data[5])) | 1;
+ }
+
+ gTasks[taskId].data[3] = gBattleAnimArgs[3];
+ if (gBattleAnimArgs[4] & 0x80)
+ {
+ gBattleAnimArgs[4] ^= 0x80;
+ if (gBattleAnimArgs[4] >= 64)
+ {
+ u16 var = GetBattlerSpriteSubpriority(gBattleAnimTarget) + (gBattleAnimArgs[4] - 64);
+ gTasks[taskId].data[2] = var;
+ }
+ else
+ {
+ u16 var = GetBattlerSpriteSubpriority(gBattleAnimTarget) - gBattleAnimArgs[4];
+ gTasks[taskId].data[2] = var;
+ }
+ }
+ else
+ {
+ if (gBattleAnimArgs[4] >= 64)
+ {
+ u16 var = GetBattlerSpriteSubpriority(gBattleAnimTarget) + (gBattleAnimArgs[4] - 64);
+ gTasks[taskId].data[2] = var;
+ }
+ else
+ {
+ u16 var = GetBattlerSpriteSubpriority(gBattleAnimTarget) - gBattleAnimArgs[4];
+ gTasks[taskId].data[2] = var;
+ }
+ }
+
+ if (gTasks[taskId].data[2] < 3)
+ gTasks[taskId].data[2] = 3;
+
+ gTasks[taskId].func = sub_8103C0C;
+}
+
+void sub_8103FE8(struct Sprite *sprite)
+{
+ InitAnimSpritePos(sprite, FALSE);
+ sprite->data[0] = 0x100 + (IndexOfSpritePaletteTag(gUnknown_085934A0.paletteTag) << 4);
+ sprite->callback = sub_8104018;
+}
+
+#ifdef NONMATCHING
+static void sub_8104018(struct Sprite *sprite)
+{
+ u16 r7;
+ u16 r5;
+ int i;
+ if (++sprite->data[1] == 2)
+ {
+ sprite->data[1] = 0;
+ r5 = sprite->data[0];
+ r7 = gPlttBufferFaded[8 + r5];
+ for (i = 0; i < 8; i++)
+ {
+ gPlttBufferFaded[i + r5 + 8] = gPlttBufferFaded[i + r5 + 9];
+ }
+ gPlttBufferFaded[r5 + 15] = r7;
+
+ if (++sprite->data[2] == 24)
+ DestroyAnimSprite(sprite);
+ }
+}
+#else
+NAKED
+static void sub_8104018(struct Sprite *sprite)
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ adds r4, r0, 0\n\
+ ldrh r0, [r4, 0x30]\n\
+ adds r0, 0x1\n\
+ strh r0, [r4, 0x30]\n\
+ lsls r0, 16\n\
+ asrs r0, 16\n\
+ cmp r0, 0x2\n\
+ bne _0810407C\n\
+ movs r0, 0\n\
+ strh r0, [r4, 0x30]\n\
+ ldrh r5, [r4, 0x2E]\n\
+ ldr r1, =gPlttBufferFaded\n\
+ adds r0, r5, 0\n\
+ adds r0, 0x8\n\
+ lsls r0, 1\n\
+ adds r0, r1 \n\
+ ldrh r7, [r0]\n\
+ adds r6, r1, 0\n\
+ adds r1, r5, 0\n\
+ adds r1, 0x9\n\
+ lsls r0, r5, 1\n\
+ adds r0, r6\n\
+ adds r2, r0, 0\n\
+ adds r2, 0x10\n\
+ movs r3, 0x7\n\
+ lsls r1, 1\n\
+ adds r1, r6\n\
+_08104050:\n\
+ ldrh r0, [r1]\n\
+ strh r0, [r2]\n\
+ adds r1, 0x2\n\
+ adds r2, 0x2\n\
+ subs r3, 0x1\n\
+ cmp r3, 0\n\
+ bge _08104050\n\
+ adds r0, r5, 0\n\
+ adds r0, 0xF\n\
+ lsls r0, 1\n\
+ adds r0, r6\n\
+ strh r7, [r0]\n\
+ ldrh r0, [r4, 0x32]\n\
+ adds r0, 0x1\n\
+ strh r0, [r4, 0x32]\n\
+ lsls r0, 16\n\
+ asrs r0, 16\n\
+ cmp r0, 0x18\n\
+ bne _0810407C\n\
+ adds r0, r4, 0\n\
+ bl DestroyAnimSprite\n\
+_0810407C:\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .pool\n\
+.syntax divided\n");
+}
+#endif
+
+void sub_8104088(struct Sprite *sprite)
+{
+ s16 r6;
+ s16 r7;
+ u16 var;
+
+ InitAnimSpritePos(sprite, TRUE);
+ r6 = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ r7 = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3];
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ gBattleAnimArgs[2] = -gBattleAnimArgs[2];
+
+ r6 += gBattleAnimArgs[2];
+ var = ArcTan2Neg(r6 - sprite->pos1.x, r7 - sprite->pos1.y);
+ var += 0xC000;
+ TrySetSpriteRotScale(sprite, FALSE, 0x100, 0x100, var);
+ sprite->data[0] = gBattleAnimArgs[4];
+ sprite->data[2] = r6;
+ sprite->data[4] = r7;
+ sprite->callback = sub_80A7000;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+}
+
+void sub_810413C(struct Sprite *sprite)
+{
+ sprite->data[2] = -16;
+ sprite->pos1.y += 8;
+ sprite->callback = sub_8104154;
+}
+
+static void sub_8104154(struct Sprite *sprite)
+{
+ sprite->data[0] += 0x80;
+ sprite->pos2.x = sprite->data[0] >> 8;
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
+ sprite->pos2.x = -sprite->pos2.x;
+
+ sprite->pos2.y = Sin(sprite->data[1], sprite->data[2]);
+ sprite->data[1] += 5;
+ if (sprite->data[1] > 126)
+ {
+ sprite->data[1] = 0;
+ sprite->data[2] /= 2;
+ if (++sprite->data[3] == 2)
+ DestroyAnimSprite(sprite);
+ }
+}
+
+void sub_81041C4(struct Sprite *sprite)
+{
+ InitAnimSpritePos(sprite, TRUE);
+ sprite->data[0] = 20;
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
+ sprite->callback = StartAnimLinearTranslation;
+ sprite->affineAnimPaused = 1;
+ StoreSpriteCallbackInData6(sprite, sub_810421C);
+}
+
+static void sub_810421C(struct Sprite *sprite)
+{
+ int i;
+ u16 rand;
+ s16* ptr;
+ PlaySE12WithPanning(SE_W030, BattleAnimAdjustPanning(63));
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->pos2.y = 0;
+ sprite->pos2.x = 0;
+ ptr = &sprite->data[7];
+ for (i = 0; i < 8; i++)
+ ptr[i - 7] = 0;
+
+ rand = Random2();
+ sprite->data[6] = 0xFFF4 - (rand & 7);
+ rand = Random2();
+ sprite->data[7] = (rand % 0xA0) + 0xA0;
+ sprite->callback = sub_81042A0;
+ sprite->affineAnimPaused = 0;
+}
+
+static void sub_81042A0(struct Sprite *sprite)
+{
+ sprite->data[0] += sprite->data[7];
+ sprite->pos2.x = sprite->data[0] >> 8;
+ if (sprite->data[7] & 1)
+ sprite->pos2.x = -sprite->pos2.x;
+
+ sprite->pos2.y = Sin(sprite->data[1], sprite->data[6]);
+ sprite->data[1] += 8;
+ if (sprite->data[1] > 126)
+ {
+ sprite->data[1] = 0;
+ sprite->data[2] /= 2;
+ if (++sprite->data[3] == 1)
+ DestroyAnimSprite(sprite);
+ }
+}
+
+// Moves a tornado in a circlular motion.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: wave amplitude
+// arg 3: unused
+// arg 4: initial wave offset
+// arg 5: wave period (higher means faster wave)
+// arg 6: duration
+void Anim_RazorWindTornado(struct Sprite *sprite)
+{
+ InitAnimSpritePos(sprite, FALSE);
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
+ sprite->pos1.y += 16;
+
+ sprite->data[0] = gBattleAnimArgs[4];
+ sprite->data[1] = gBattleAnimArgs[2];
+ sprite->data[2] = gBattleAnimArgs[5];
+ sprite->data[3] = gBattleAnimArgs[6];
+ sprite->data[4] = gBattleAnimArgs[3];
+ sprite->callback = TranslateSpriteInCircleOverDuration;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+ sprite->callback(sprite);
+}
+
+// Animates a single pincer line that extends towards the center of the target mon.
+// arg 0: invert
+void Anim_ViceGripPincer(struct Sprite *sprite)
+{
+ s16 startXOffset = 32;
+ s16 startYOffset = -32;
+ s16 endXOffset = 16;
+ s16 endYOffset = -16;
+ if (gBattleAnimArgs[0])
+ {
+ startXOffset = -32;
+ startYOffset = 32;
+ endXOffset = -16;
+ endYOffset = 16;
+ StartSpriteAnim(sprite, 1);
+ }
+
+ sprite->pos1.x += startXOffset;
+ sprite->pos1.y += startYOffset;
+ sprite->data[0] = 6;
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + endXOffset;
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + endYOffset;
+ sprite->callback = StartAnimLinearTranslation;
+ StoreSpriteCallbackInData6(sprite, Anim_ViceGripPincerStep);
+}
+
+static void Anim_ViceGripPincerStep(struct Sprite *sprite)
+{
+ if (sprite->animEnded)
+ DestroyAnimSprite(sprite);
+}
+
+// Animates a single pincer line that extends towards the center of the target mon, and then back out.
+// arg 0: animation id
+void Anim_GuillotinePincer(struct Sprite *sprite)
+{
+ s16 startXOffset = 32;
+ s16 startYOffset = -32;
+ s16 endXOffset = 16;
+ s16 endYOffset = -16;
+ if (gBattleAnimArgs[0])
+ {
+ startXOffset = -32;
+ startYOffset = 32;
+ endXOffset = -16;
+ endYOffset = 16;
+ StartSpriteAnim(sprite, gBattleAnimArgs[0]);
+ }
+
+ sprite->pos1.x += startXOffset;
+ sprite->pos1.y += startYOffset;
+ sprite->data[0] = 6;
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + endXOffset;
+ sprite->data[3] = sprite->pos1.y;
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + endYOffset;
+ InitAnimLinearTranslation(sprite);
+ sprite->data[5] = gBattleAnimArgs[0];
+ sprite->data[6] = sprite->data[0];
+ sprite->callback = Anim_GuillotinePincerStep1;
+}
+
+static void Anim_GuillotinePincerStep1(struct Sprite *sprite)
+{
+ if (TranslateAnimLinear(sprite) && sprite->animEnded)
+ {
+ SeekSpriteAnim(sprite, 0);
+ sprite->animPaused = 1;
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->pos2.x = 2;
+ sprite->pos2.y = -2;
+ sprite->data[0] = sprite->data[6];
+ sprite->data[1] ^= 1;
+ sprite->data[2] ^= 1;
+ sprite->data[4] = 0;
+ sprite->data[3] = 0;
+ sprite->callback = Anim_GuillotinePincerStep2;
+ }
+}
+
+static void Anim_GuillotinePincerStep2(struct Sprite *sprite)
+{
+ if (sprite->data[3])
+ {
+ sprite->pos2.x = -sprite->pos2.x;
+ sprite->pos2.y = -sprite->pos2.y;
+ }
+
+ sprite->data[3] ^= 1;
+ if (++sprite->data[4] == 51)
+ {
+ sprite->pos2.y = 0;
+ sprite->pos2.x = 0;
+ sprite->data[4] = 0;
+ sprite->data[3] = 0;
+ sprite->animPaused = 0;
+ StartSpriteAnim(sprite, sprite->data[5] ^ 1);
+ sprite->callback = Anim_GuillotinePincerStep3;
+ }
+}
+
+static void Anim_GuillotinePincerStep3(struct Sprite *sprite)
+{
+ if (TranslateAnimLinear(sprite))
+ DestroyAnimSprite(sprite);
+}
+
+// Scales up the target mon sprite, and sets the palette to greyscale.
+// Used in MOVE_DISABLE.
+// No args.
+void AnimTask_GrowAndGreyscale(u8 taskId)
+{
+ u8 spriteId = GetAnimBattlerSpriteId(ANIM_TARGET);
+ PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_BLEND);
+ SetSpriteRotScale(spriteId, 0xD0, 0xD0, 0);
+ SetGreyscaleOrOriginalPalette(gSprites[spriteId].oam.paletteNum + 16, FALSE);
+ gTasks[taskId].data[0] = 80;
+ gTasks[taskId].func = AnimTask_GrowAndGreyscaleStep;
+}
+
+static void AnimTask_GrowAndGreyscaleStep(u8 taskId)
+{
+ if (--gTasks[taskId].data[0] == -1)
+ {
+ u8 spriteId = GetAnimBattlerSpriteId(ANIM_TARGET);
+ ResetSpriteRotScale(spriteId);
+ SetGreyscaleOrOriginalPalette(gSprites[spriteId].oam.paletteNum + 16, TRUE);
+ DestroyAnimVisualTask(taskId);
+ }
+}
+
+// Shrinks and grows the attacking mon several times. Also creates transparent versions of the
+// mon's sprite while it is shrinking.
+// No args.
+void AnimTask_Minimize(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
+ task->data[0] = spriteId;
+ PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_NORMAL);
+ task->data[1] = 0;
+ task->data[2] = 0;
+ task->data[3] = 0;
+ task->data[4] = 0x100;
+ task->data[5] = 0;
+ task->data[6] = 0;
+ task->data[7] = GetBattlerSpriteSubpriority(gBattleAnimAttacker);
+ task->func = AnimTask_MinimizeStep1;
+}
+
+static void AnimTask_MinimizeStep1(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ switch (task->data[1])
+ {
+ case 0:
+ if (task->data[2] == 0 || task->data[2] == 3 || task->data[2] == 6)
+ CreateMinimizeSprite(task, taskId);
+ task->data[2]++;
+ task->data[4] += 0x28;
+ SetSpriteRotScale(task->data[0], task->data[4], task->data[4], 0);
+ SetBattlerSpriteYOffsetFromYScale(task->data[0]);
+ if (task->data[2] == 32)
+ {
+ task->data[5]++;
+ task->data[1]++;
+ }
+ break;
+ case 1:
+ if (task->data[6] == 0)
+ {
+ if (task->data[5] == 3)
+ {
+ task->data[2] = 0;
+ task->data[1] = 3;
+ }
+ else
+ {
+ task->data[2] = 0;
+ task->data[3] = 0;
+ task->data[4] = 0x100;
+ SetSpriteRotScale(task->data[0], task->data[4], task->data[4], 0);
+ SetBattlerSpriteYOffsetFromYScale(task->data[0]);
+ task->data[1] = 2;
+ }
+ }
+ break;
+ case 2:
+ task->data[1] = 0;
+ break;
+ case 3:
+ if (++task->data[2] > 32)
+ {
+ task->data[2] = 0;
+ task->data[1]++;
+ }
+ break;
+ case 4:
+ task->data[2] += 2;
+ task->data[4] -= 0x50;
+ SetSpriteRotScale(task->data[0], task->data[4], task->data[4], 0);
+ SetBattlerSpriteYOffsetFromYScale(task->data[0]);
+ if (task->data[2] == 32)
+ {
+ task->data[2] = 0;
+ task->data[1]++;
+ }
+ break;
+ case 5:
+ ResetSpriteRotScale(task->data[0]);
+ gSprites[task->data[15]].pos2.y = 0;
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+static void CreateMinimizeSprite(struct Task* task, u8 taskId)
+{
+ u16 matrixNum;
+ s16 spriteId = CloneBattlerSpriteWithBlend(ANIM_ATTACKER);
+ if (spriteId >= 0)
+ {
+ if ((matrixNum = AllocOamMatrix()) == 0xFF)
+ {
+ obj_delete_but_dont_free_vram(&gSprites[spriteId]);
+ }
+ else
+ {
+ gSprites[spriteId].oam.objMode = ST_OAM_OBJ_BLEND;
+ gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_DOUBLE;
+ gSprites[spriteId].affineAnimPaused = TRUE;
+ gSprites[spriteId].oam.matrixNum = matrixNum;
+ gSprites[spriteId].subpriority = task->data[7] - task->data[3];
+ task->data[3]++;
+ task->data[6]++;
+ gSprites[spriteId].data[0] = 16;
+ gSprites[spriteId].data[1] = taskId;
+ gSprites[spriteId].data[2] = 6;
+ gSprites[spriteId].callback = ClonedMinizeSprite_Step;
+ SetSpriteRotScale(spriteId, task->data[4], task->data[4], 0);
+ gSprites[spriteId].oam.affineMode = 1;
+ CalcCenterToCornerVec(&gSprites[spriteId], gSprites[spriteId].oam.shape, gSprites[spriteId].oam.size, gSprites[spriteId].oam.affineMode);
+ }
+ }
+}
+
+static void ClonedMinizeSprite_Step(struct Sprite *sprite)
+{
+ if (--sprite->data[0] == 0)
+ {
+ gTasks[sprite->data[1]].data[sprite->data[2]]--;
+ FreeOamMatrix(sprite->oam.matrixNum);
+ obj_delete_but_dont_free_vram(sprite);
+ }
+}
+
+// Task to facilitate expanding and hopping effect seen in Splash.
+// arg 0: anim battler
+// arg 1: num hops
+void AnimTask_Splash(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ if (gBattleAnimArgs[1] == 0)
+ {
+ DestroyAnimVisualTask(taskId);
+ }
+ else
+ {
+ u8 spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
+ task->data[0] = spriteId;
+ task->data[1] = 0;
+ task->data[2] = gBattleAnimArgs[1];
+ task->data[3] = 0;
+ task->data[4] = 0;
+ PrepareAffineAnimInTaskData(task, spriteId, gSplashEffectAffineAnimCmds);
+ task->func = AnimTask_SplashStep;
+ }
+}
+
+static void AnimTask_SplashStep(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ switch (task->data[1])
+ {
+ case 0:
+ RunAffineAnimFromTaskData(task);
+ task->data[4] += 3;
+ gSprites[task->data[0]].pos2.y += task->data[4];
+ if (++task->data[3] > 7)
+ {
+ task->data[3] = 0;
+ task->data[1]++;
+ }
+ break;
+ case 1:
+ RunAffineAnimFromTaskData(task);
+ gSprites[task->data[0]].pos2.y += task->data[4];
+ if (++task->data[3] > 7)
+ {
+ task->data[3] = 0;
+ task->data[1]++;
+ }
+ break;
+ case 2:
+ if (task->data[4] != 0)
+ {
+ gSprites[task->data[0]].pos2.y -= 2;
+ task->data[4] -= 2;
+ }
+ else
+ task->data[1]++;
+ break;
+ case 3:
+ if (!RunAffineAnimFromTaskData(task))
+ {
+ if (--task->data[2] == 0)
+ {
+ gSprites[task->data[0]].pos2.y = 0;
+ DestroyAnimVisualTask(taskId);
+ }
+ else
+ {
+ PrepareAffineAnimInTaskData(task, task->data[0], gSplashEffectAffineAnimCmds);
+ task->data[1] = 0;
+ }
+ }
+ break;
+ }
+}
+
+// Grows, pauses, then shrinks the attacking mon.
+// Used by MOVE_SWAGGER and MOVE_BULK_UP
+// No args.
+void AnimTask_GrowAndShrink(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
+ PrepareAffineAnimInTaskData(task, spriteId, gGrowAndShrinkAffineAnimCmds);
+ task->func = AnimTask_GrowAndShrinkStep;
+}
+
+static void AnimTask_GrowAndShrinkStep(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ if (!RunAffineAnimFromTaskData(task))
+ DestroyAnimVisualTask(taskId);
+}
+
+// Animates a little puff of the mon's breath.
+// Used by MOVE_SWAGGER and MOVE_BULK_UP
+// No args.
+void Anim_BreathPuff(struct Sprite *sprite)
+{
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
+ {
+ StartSpriteAnim(sprite, 0);
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + 32;
+ sprite->data[1] = 64;
+ }
+ else
+ {
+ StartSpriteAnim(sprite, 1);
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) - 32;
+ sprite->data[1] = -64;
+ }
+
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
+ sprite->data[0] = 52;
+ sprite->data[2] = 0;
+ sprite->data[3] = 0;
+ sprite->data[4] = 0;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+ sprite->callback = TranslateAnimLinearSimple;
+}
+
+// Animates an "angry" mark above a mon's head.
+// arg 0: target mon (0 = attacker, 1 = target)
+// arg 1: x pixel offset
+// arg 2: y pixel offset
+void Anim_AngerMark(struct Sprite *sprite)
+{
+ u8 battler;
+ if (!gBattleAnimArgs[0])
+ battler = gBattleAnimAttacker;
+ else
+ battler = gBattleAnimTarget;
+
+ if (GetBattlerSide(battler) == B_SIDE_OPPONENT)
+ gBattleAnimArgs[1] *= -1;
+
+ sprite->pos1.x = GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2) + gBattleAnimArgs[1];
+ sprite->pos1.y = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[2];
+ if (sprite->pos1.y < 8)
+ sprite->pos1.y = 8;
+
+ StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
+ sprite->callback = RunStoredCallbackWhenAffineAnimEnds;
+}
+
+// left/right movements
+void sub_8104C38(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
+ task->data[0] = spriteId;
+ task->data[1] = 0;
+ PrepareAffineAnimInTaskData(task, spriteId, gUnknown_085936A4);
+ task->func = sub_8104C78;
+}
+
+static void sub_8104C78(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ if (!RunAffineAnimFromTaskData(task))
+ DestroyAnimVisualTask(taskId);
+}
+
+// up/down movements
+void sub_8104CA4(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ task->data[0] = GetAnimBattlerSpriteId(ANIM_ATTACKER);
+ task->data[1] = 0;
+ task->data[2] = 4;
+ task->data[3] = 7;
+ task->data[4] = 3;
+ task->data[5] = gSprites[task->data[0]].pos1.x;
+ task->data[6] = gSprites[task->data[0]].pos1.y;
+ task->data[7] = 0;
+ task->data[8] = 0;
+ task->data[9] = 2;
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT)
+ task->data[2] *= -1;
+
+ task->func = sub_8104D28;
+}
+
+static void sub_8104D28(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ if (++task->data[7] > 2)
+ {
+ task->data[7] = 0;
+ task->data[8]++;
+ if (task->data[8] & 1)
+ gSprites[task->data[0]].pos1.y += task->data[9];
+ else
+ gSprites[task->data[0]].pos1.y -= task->data[9];
+ }
+ switch (task->data[1])
+ {
+ case 0:
+ gSprites[task->data[0]].pos1.x += task->data[2];
+ if (--task->data[3] == 0)
+ {
+ task->data[3] = 14;
+ task->data[1] = 1;
+ }
+ break;
+ case 1:
+ gSprites[task->data[0]].pos1.x -= task->data[2];
+ if (--task->data[3] == 0)
+ {
+ task->data[3] = 7;
+ task->data[1] = 2;
+ }
+ break;
+ case 2:
+ gSprites[task->data[0]].pos1.x += task->data[2];
+ if (--task->data[3] == 0)
+ {
+ if (--task->data[4] != 0)
+ {
+ task->data[3] = 7;
+ task->data[1] = 0;
+ }
+ else
+ {
+ if ((task->data[8] & 1) != 0)
+ gSprites[task->data[0]].pos1.y -= task->data[9];
+
+ DestroyAnimVisualTask(taskId);
+ }
+ }
+ break;
+ }
+}
+
+void sub_8104E74(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ struct ScanlineEffectParams params;
+
+ s16 i;
+ task->data[0] = GetBattlerYCoordWithElevation(gBattleAnimTarget) + 32;
+ task->data[1] = 4;
+ task->data[2] = 0;
+ task->data[3] = 0;
+ task->data[4] = 0;
+ task->data[5] = 0;
+ task->data[15] = sub_80A861C(gBattleAnimTarget, 0);
+
+ if (sub_80A8364(gBattleAnimTarget) == 1)
+ {
+ task->data[6] = gBattle_BG1_X;
+ params.dmaDest = (u16 *)REG_ADDR_BG1HOFS;
+ }
+ else
+ {
+ task->data[6] = gBattle_BG2_X;
+ params.dmaDest = (u16 *)REG_ADDR_BG2HOFS;
+ }
+
+ for (i = task->data[0] - 0x40; i <= task->data[0]; i++)
+ {
+ if (i >= 0)
+ {
+ gScanlineEffectRegBuffers[0][i] = task->data[6] + 0xF0;
+ gScanlineEffectRegBuffers[1][i] = task->data[6] + 0xF0;
+ }
+ }
+
+ params.dmaControl = SCANLINE_EFFECT_DMACNT_16BIT;
+ params.initState = 1;
+ params.unused9 = 0;
+ ScanlineEffect_SetParams(params);
+ task->func = sub_8104F54;
+}
+
+static void sub_8104F54(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+
+ switch (task->data[4])
+ {
+ case 0:
+ if (++task->data[5] > 20)
+ task->data[4]++;
+ break;
+ case 1:
+ if (++task->data[1] > 3)
+ {
+ task->data[1] = 0;
+ task->data[2] = task->data[3] & 3;
+ task->data[5] = task->data[0] - task->data[3];
+ switch (task->data[2])
+ {
+ case 0:
+ break;
+ case 1:
+ task->data[5] -= 2;
+ break;
+ case 2:
+ task->data[5] += 1;
+ break;
+ case 3:
+ task->data[5] += 1;
+ break;
+ }
+
+ if (task->data[5] >= 0)
+ {
+ gScanlineEffectRegBuffers[0][task->data[5]] = task->data[6];
+ gScanlineEffectRegBuffers[1][task->data[5]] = task->data[6];
+ }
+
+ if (++task->data[3] >= task->data[15])
+ {
+ gScanlineEffect.state = 3;
+ DestroyAnimVisualTask(taskId);
+ }
+ }
+ break;
+ }
+}
+
+void sub_810501C(struct Sprite *sprite)
+{
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 0) - 16;
+ sprite->pos1.y = GetBattlerYCoordWithElevation(gBattleAnimTarget) + 16;
+ sprite->data[0] = 0;
+ sprite->data[1] = 0;
+ sprite->data[2] = 0;
+ sprite->data[3] = 16;
+ sprite->data[4] = 0;
+ sprite->data[5] = sub_80A861C(gBattleAnimTarget, 0) + 2;
+ sprite->data[6] = BattleAnimAdjustPanning(63);
+ sprite->callback = sub_8105078;
+}
+
+static void sub_8105078(struct Sprite *sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ if (++sprite->data[2] > 1)
+ {
+ sprite->data[2] = 0;
+ sprite->invisible = !sprite->invisible;
+ }
+ if (++sprite->data[1] > 16)
+ {
+ sprite->invisible = 0;
+ sprite->data[0]++;
+ }
+ break;
+ case 1:
+ if (++sprite->data[1] > 3 && sprite->data[2] < sprite->data[5])
+ {
+ sprite->data[1] = 0;
+ sprite->pos1.y -= 1;
+ sprite->data[2]++;
+ if (sprite->data[2] % 10 == 0)
+ PlaySE12WithPanning(SE_W166, sprite->data[6]);
+ }
+ sprite->data[4] += sprite->data[3];
+ if (sprite->data[4] > 31)
+ {
+ sprite->data[4] = 0x40 - sprite->data[4];
+ sprite->data[3] *= -1;
+ }
+ else if (sprite->data[4] <= -32)
+ {
+ sprite->data[4] = -0x40 - sprite->data[4];
+ sprite->data[3] *= -1;
+ }
+ sprite->pos2.x = sprite->data[4];
+ if (sprite->data[5] == sprite->data[2])
+ {
+ sprite->data[1] = 0;
+ sprite->data[2] = 0;
+ sprite->data[0]++;
+ }
+ break;
+ case 2:
+ if (++sprite->data[2] > 1)
+ {
+ sprite->data[2] = 0;
+ sprite->invisible = !sprite->invisible;
+ }
+ if (++sprite->data[1] > 16)
+ {
+ sprite->invisible = 0;
+ DestroyAnimSprite(sprite);
+ }
+ break;
+ }
+}
+
+void sub_81051C4(struct Sprite *sprite)
+{
+ u8 battler = 0;
+ u16 sp0 = 0;
+ u16 sp1 = 0;
+ u8 r4;
+
+ if (gBattleAnimArgs[2] == 0)
+ battler = gBattleAnimAttacker;
+ else
+ battler = gBattleAnimTarget;
+
+ r4 = gBattleAnimArgs[3] ^ 1;
+ if (IsDoubleBattle() && IsBattlerSpriteVisible(BATTLE_PARTNER(battler)))
+ {
+ SetAverageBattlerPositions(battler, r4, &sp0, &sp1);
+ if (r4 == 0)
+ r4 = GetBattlerSpriteCoord(battler, 0);
+ else
+ r4 = GetBattlerSpriteCoord(battler, 2);
+
+ if (GetBattlerSide(battler) != B_SIDE_PLAYER)
+ gBattleAnimArgs[0] -= (sp0 - r4) - gBattleAnimArgs[0]; // This is weird.
+ else
+ gBattleAnimArgs[0] = sp0 - r4;
+ }
+
+ sprite->callback = sub_80A77C8;
+ sprite->callback(sprite);
+}
+
+void sub_8105284(struct Sprite *sprite)
+{
+ if (TranslateAnimLinear(sprite))
+ {
+ FreeSpriteOamMatrix(sprite);
+ DestroyAnimSprite(sprite);
+ }
+}
+
+void sub_81052A4(struct Sprite *sprite)
+{
+ u16 r9 = 0;
+ u16 r6 = 0;
+ s16 sp0 = 0;
+ s16 sp1 = 0;
+ u8 sp4;
+ u8 battler1;
+ u8 battler2;
+ u8 r10;
+
+ if (gBattleAnimArgs[5] == 0)
+ {
+ battler1 = gBattleAnimAttacker;
+ battler2 = gBattleAnimTarget;
+ }
+ else
+ {
+ battler1 = gBattleAnimTarget;
+ battler2 = gBattleAnimAttacker;
+ }
+
+ if (!gBattleAnimArgs[6])
+ {
+ r10 = 0;
+ sp4 = 1;
+ }
+ else
+ {
+ r10 = 2;
+ sp4 = 3;
+ }
+
+ if (GetBattlerSide(battler1) != B_SIDE_PLAYER)
+ {
+ r9 = GetBattlerSpriteCoord(battler1, r10) + gBattleAnimArgs[0];
+ if (IsBattlerSpriteVisible(BATTLE_PARTNER(battler2)))
+ sprite->subpriority = gSprites[gBattlerSpriteIds[BATTLE_PARTNER(battler2)]].subpriority - 1;
+ else
+ sprite->subpriority = gSprites[gBattlerSpriteIds[battler2]].subpriority - 1;
+ }
+ else
+ {
+ r9 = GetBattlerSpriteCoord(battler1, r10) - gBattleAnimArgs[0];
+ if (!IsContest() && IsBattlerSpriteVisible(BATTLE_PARTNER(battler1)))
+ {
+ if (gSprites[gBattlerSpriteIds[battler1]].pos1.x < gSprites[gBattlerSpriteIds[BATTLE_PARTNER(battler1)]].pos1.x)
+ sprite->subpriority = gSprites[gBattlerSpriteIds[BATTLE_PARTNER(battler1)]].subpriority + 1;
+ else
+ sprite->subpriority = gSprites[gBattlerSpriteIds[battler1]].subpriority - 1;
+ }
+ else
+ {
+ sprite->subpriority = gSprites[gBattlerSpriteIds[battler1]].subpriority - 1;
+ }
+
+ }
+
+ r6 = GetBattlerSpriteCoord(battler1, sp4) + gBattleAnimArgs[1];
+ if (!IsContest() && IsBattlerSpriteVisible(BATTLE_PARTNER(battler2)))
+ {
+ SetAverageBattlerPositions(battler2, gBattleAnimArgs[6], &sp0, &sp1);
+ }
+ else
+ {
+ sp0 = GetBattlerSpriteCoord(battler2, r10);
+ sp1 = GetBattlerSpriteCoord(battler2, sp4);
+ }
+
+ if (GetBattlerSide(battler2))
+ sp0 += gBattleAnimArgs[3];
+ else
+ sp0 -= gBattleAnimArgs[3];
+
+ sp1 += gBattleAnimArgs[4];
+ sprite->pos1.x = sprite->data[1] = r9;
+ sprite->pos1.y = sprite->data[3] = r6;
+ sprite->data[2] = sp0;
+ sprite->data[4] = sp1;
+ sprite->data[0] = gBattleAnimArgs[0];
+ InitAnimLinearTranslation(sprite);
+ sprite->callback = sub_8105284;
+ sprite->callback(sprite);
+}
+
+void sub_81054E8(struct Sprite *sprite)
+{
+ u8 index = IndexOfSpritePaletteTag(ANIM_TAG_THIN_RING);
+ if (index != 0xFF)
+ {
+ BlendPalette(((index << 20) + 0x1010000) >> 16, 15, gBattleAnimArgs[5], gBattleAnimArgs[4]);
+ }
+
+ StartSpriteAffineAnim(sprite, 1);
+ sprite->callback = sub_80A77C8;
+ sprite->callback(sprite);
+}
+
+void sub_8105538(struct Sprite *sprite)
+{
+ s16 r1;
+ InitAnimSpritePos(sprite, FALSE);
+ r1 = GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER ? -160 : 160;
+ sprite->data[0] = 0x380;
+ sprite->data[1] = r1;
+ sprite->data[7] = gBattleAnimArgs[2];
+ sprite->callback = sub_810557C;
+}
+
+static void sub_810557C(struct Sprite *sprite)
+{
+ s16 add;
+ sprite->pos2.y -= (sprite->data[0] >> 8);
+ sprite->pos2.x = sprite->data[1] >> 8;
+ sprite->data[0] -= 32;
+ add = GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER ? -160 : 160;
+ sprite->data[1] += add;
+ if (sprite->pos2.y > 0)
+ {
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos2.y = 0;
+ sprite->pos2.x = 0;
+ sprite->data[0] = 0;
+ StartSpriteAffineAnim(sprite, 1);
+ sprite->callback = sub_81055F4;
+ }
+}
+
+static void sub_81055F4(struct Sprite *sprite)
+{
+ if (sprite->data[0]++ > 19)
+ {
+ StartSpriteAffineAnim(sprite, 2);
+ sprite->callback = sub_810561C;
+ }
+}
+
+static void sub_810561C(struct Sprite *sprite)
+{
+ if (sprite->affineAnimEnded)
+ {
+ StartSpriteAffineAnim(sprite, 1);
+ sprite->data[0] = 0;
+ if (sprite->data[7] == 0)
+ {
+ sprite->oam.tileNum += 16;
+ sprite->callback = sub_8105694;
+ }
+ else
+ {
+ sprite->oam.tileNum += 32;
+ sprite->callback = sub_810571C;
+ }
+ }
+}
+
+static void sub_8105694(struct Sprite *sprite)
+{
+ sprite->pos2.y -= 2;
+ if (++sprite->data[0] == 9)
+ {
+ sprite->data[0] = 16;
+ sprite->data[1] = 0;
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND((u16)sprite->data[0], 0));
+ sprite->callback = sub_81056D4;
+ }
+}
+
+static void sub_81056D4(struct Sprite *sprite)
+{
+ if (sprite->data[1]++ % 3 == 0)
+ {
+ sprite->data[0]--;
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[0], 16 - sprite->data[0]));
+ if (sprite->data[0] == 0)
+ sprite->callback = sub_810571C;
+ }
+}
+
+static void sub_810571C(struct Sprite *sprite)
+{
+ if ((u16)gBattleAnimArgs[7] == 0xFFFF)
+ {
+ sprite->invisible = 1;
+ if (sprite->data[7] == 0)
+ sprite->callback = sub_810575C;
+ else
+ sprite->callback = DestroyAnimSprite;
+ }
+}
+
+static void sub_810575C(struct Sprite *sprite)
+{
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ DestroyAnimSprite(sprite);
+}
+
+void sub_810577C(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
+ task->data[0] = spriteId;
+ PrepareAffineAnimInTaskData(task, spriteId, gUnknown_085938B0);
+ task->func = sub_81057B8;
+}
+
+static void sub_81057B8(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ if (!RunAffineAnimFromTaskData(task))
+ {
+ gSprites[task->data[0]].pos2.y = 0;
+ gSprites[task->data[0]].invisible = 1;
+ DestroyAnimVisualTask(taskId);
+ }
+}
+
+void sub_8105810(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ task->data[0] = 0;
+ task->data[1] = 0;
+ task->data[2] = 0;
+ task->data[3] = 0;
+ task->data[12] = 3;
+ if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER)
+ {
+ task->data[13] = 0xFFFF;
+ task->data[14] = 8;
+ }
+ else
+ {
+ task->data[13] = 1;
+ task->data[14] = -8;
+ }
+
+ task->data[15] = GetAnimBattlerSpriteId(ANIM_TARGET);
+ task->func = sub_8105878;
+}
+
+static void sub_8105878(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+
+ switch (task->data[0])
+ {
+ case 0:
+ gSprites[task->data[15]].pos2.x += task->data[14];
+ task->data[1] = 0;
+ task->data[2] = 0;
+ task->data[3] = 0;
+ task->data[0]++;
+ break;
+ case 1:
+ if (++task->data[1] > 1)
+ {
+ task->data[1] = 0;
+ task->data[2]++;
+ if (task->data[2] & 1)
+ gSprites[task->data[15]].pos2.x += 6;
+ else
+ gSprites[task->data[15]].pos2.x -= 6;
+
+ if (++task->data[3] > 4)
+ {
+ if (task->data[2] & 1)
+ gSprites[task->data[15]].pos2.x -= 6;
+
+ task->data[0]++;
+ }
+ }
+ break;
+ case 2:
+ if (--task->data[12] != 0)
+ task->data[0] = 0;
+ else
+ task->data[0]++;
+ break;
+ case 3:
+ gSprites[task->data[15]].pos2.x += task->data[13];
+ if (gSprites[task->data[15]].pos2.x == 0)
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+void sub_810599C(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ task->data[0] = 0;
+ task->data[1] = 0;
+ task->data[2] = 0;
+ task->data[3] = 0;
+ task->data[4] = 1;
+ task->data[13] = 14;
+ task->data[14] = 2;
+ task->data[15] = GetAnimBattlerSpriteId(ANIM_ATTACKER);
+ task->func = sub_81059E0;
+}
+
+static void sub_81059E0(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ if (task->data[0] == 0 && ++task->data[1] > task->data[4])
+ {
+ task->data[1] = 0;
+ if (++task->data[2] & 1)
+ gSprites[task->data[15]].invisible = 0;
+ else
+ gSprites[task->data[15]].invisible = 1;
+
+ if (++task->data[3] >= task->data[13])
+ {
+ if (++task->data[4] < task->data[14])
+ {
+ task->data[1] = 0;
+ task->data[2] = 0;
+ task->data[3] = 0;
+ }
+ else
+ {
+ gSprites[task->data[15]].invisible = 0;
+ DestroyAnimVisualTask(taskId);
+ }
+ }
+ }
+}
+
+void sub_8105AAC(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ task->data[0] = 0;
+ task->data[1] = 4;
+ task->data[2] = 0;
+ task->data[3] = 0;
+ task->data[4] = 0;
+ task->data[5] = 0;
+ task->data[6] = 0;
+ task->data[7] = 0;
+ task->data[8] = 0;
+ task->data[13] = 0;
+ task->data[14] = GetBattlerSpriteCoord(gBattleAnimAttacker, ANIM_ATTACKER);
+ task->data[15] = GetBattlerSpriteCoord(gBattleAnimAttacker, ANIM_TARGET);
+ task->func = sub_8105B08;
+}
+
+static void sub_8105B08(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ switch (task->data[8])
+ {
+ case 0:
+ if (++task->data[4] > 1)
+ {
+ task->data[4] = 0;
+ task->data[5] = (task->data[5] + 1) & 1;
+ if (++task->data[6] > 20)
+ {
+ if (task->data[7] == 0)
+ {
+ task->data[6] = 0;
+ task->data[8] = 1;
+ }
+ else
+ task->data[8] = 2;
+ }
+ }
+ break;
+ case 1:
+ task->data[5] = 0;
+ if (++task->data[4] > 20)
+ {
+ task->data[7] = 1;
+ task->data[8] = 0;
+ }
+ break;
+ case 2:
+ task->data[5] = 1;
+ break;
+ }
+
+ switch (task->data[0])
+ {
+ case 0:
+ if (++task->data[1] > 4)
+ {
+ u8 spriteId;
+ task->data[1] = 0;
+ spriteId = CreateSprite(&gUnknown_085938DC, task->data[14], task->data[15], 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].data[0] = taskId;
+ gSprites[spriteId].data[1] = 13;
+ gSprites[spriteId].pos2.x = gUnknown_085938F4[task->data[2]][0];
+ gSprites[spriteId].pos2.y = gUnknown_085938F4[task->data[2]][1];
+ task->data[13]++;
+ if (++task->data[2] > 3)
+ {
+ task->data[2] = 0;
+ if (++task->data[3] > 5)
+ task->data[0]++;
+ }
+ }
+ }
+ break;
+ case 1:
+ if (task->data[13] == 0)
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+void sub_8105C48(struct Sprite *sprite)
+{
+ sprite->invisible = gTasks[sprite->data[0]].data[5];
+ if (sprite->animEnded)
+ {
+ gTasks[sprite->data[0]].data[sprite->data[1]]--;
+ DestroySprite(sprite);
+ }
+}
+
+void sub_8105CB4(u8 taskId)
+{
+ int i;
+ u8 paletteNums[3];
+
+ paletteNums[0] = IndexOfSpritePaletteTag(ANIM_TAG_MUSIC_NOTES_2);
+ for (i = 1; i < 3; i++)
+ paletteNums[i] = AllocSpritePalette(ANIM_SPRITES_START - i);
+
+ gMonSpritesGfxPtr->field_17C = AllocZeroed(0x2000);
+ LZDecompressWram(gBattleAnimSpritePalette_206, gMonSpritesGfxPtr->field_17C);
+ for (i = 0; i < 3; i++)
+ LoadPalette(&gMonSpritesGfxPtr->field_17C[i * 32], (u16)((paletteNums[i] << 4) + 0x100), 32);
+
+ FREE_AND_SET_NULL(gMonSpritesGfxPtr->field_17C);
+ DestroyAnimVisualTask(taskId);
+}
+
+void sub_8105D60(u8 taskId)
+{
+ int i;
+ for (i = 0; i < 3; i++)
+ FreeSpritePaletteByTag(gUnknown_08593950[i]);
+
+ DestroyAnimVisualTask(taskId);
+}
+
+static void sub_8105D88(struct Sprite *sprite, u8 a, u8 b)
+{
+ u8 tile;
+ tile = (b & 1);
+ tile = ((-tile | tile) >> 31) & 32;
+ sprite->oam.tileNum += tile + (a << 2);
+ sprite->oam.paletteNum = IndexOfSpritePaletteTag(gUnknown_08593950[b >> 1]);
+}
+
+void sub_8105DE8(struct Sprite *sprite)
+{
+ InitAnimSpritePos(sprite, FALSE);
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ gBattleAnimArgs[2] = -gBattleAnimArgs[2];
+
+ sprite->data[0] = gBattleAnimArgs[4];
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, 0) + gBattleAnimArgs[2];
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + gBattleAnimArgs[3];
+ sprite->callback = StartAnimLinearTranslation;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+ sub_8105D88(sprite, gBattleAnimArgs[5], gBattleAnimArgs[6]);
+}
+
+void sub_8105E60(struct Sprite *sprite)
+{
+ if (++sprite->data[0] == 1)
+ InitAnimSpritePos(sprite, FALSE);
+
+ sprite->pos2.x = Sin(sprite->data[1], 8);
+ sprite->pos2.y = sprite->data[2] >> 8;
+ sprite->data[1] = (sprite->data[1] + 7) & 0xFF;
+ sprite->data[2] -= 0x80;
+ if (sprite->data[0] == 60)
+ DestroyAnimSprite(sprite);
+}
+
+void sub_8105EB0(u8 taskId)
+{
+ u16 win0h = IsContest() ? 0x98 : 0xF0;
+ u16 win0v = 0;
+
+ gBattle_WIN0H = win0h;
+ gBattle_WIN0V = 0xA0;
+ SetGpuReg(REG_OFFSET_WIN0H, gBattle_WIN0H);
+ SetGpuReg(REG_OFFSET_WIN0V, gBattle_WIN0V);
+ SetGpuReg(REG_OFFSET_WININ, 0x3F1F);
+ SetGpuReg(REG_OFFSET_WINOUT, 0x3F3F);
+ SetGpuReg(REG_OFFSET_BLDCNT, 0xC8);
+ SetGpuReg(REG_OFFSET_BLDY, 0x10);
+ gTasks[taskId].data[0] = win0v;
+ gTasks[taskId].data[1] = win0h;
+ gTasks[taskId].func = sub_8105F30;
+}
+
+static void sub_8105F30(u8 taskId)
+{
+ gTasks[taskId].data[0] += 13;
+ gTasks[taskId].data[1] -= 13;
+ if (gTasks[taskId].data[0] >= gTasks[taskId].data[1])
+ {
+ gBattle_WIN0H = 0;
+ gTasks[taskId].func = sub_8105F84;
+ }
+ else
+ {
+ gBattle_WIN0H = gTasks[taskId].data[1] | (gTasks[taskId].data[0] << 8);
+ }
+}
+
+static void sub_8105F84(u8 taskId)
+{
+ if (++gTasks[taskId].data[10] == 5)
+ {
+ gTasks[taskId].data[11] = 0x88;
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG3 | BLDCNT_EFFECT_LIGHTEN);
+ BlendPalettes(sub_80A75AC(1, 0, 0, 0, 0, 0, 0), 16, RGB(31, 31, 31));
+ }
+ else if (gTasks[taskId].data[10] > 4)
+ {
+ gBattle_WIN0H = 0;
+ gBattle_WIN0V = 0;
+ SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR);
+ SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR);
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDY, 0);
+ DestroyAnimVisualTask(taskId);
+ }
+}
+
+void sub_8106020(u8 taskId)
+{
+ u8 spriteId = GetAnimBattlerSpriteId(ANIM_TARGET);
+ if (++gTasks[taskId].data[0] == 1)
+ {
+ PrepareAffineAnimInTaskData(&gTasks[taskId], GetAnimBattlerSpriteId(1), gUnknown_08593988);
+ gSprites[spriteId].pos2.x = 4;
+ }
+ else
+ {
+ gSprites[spriteId].pos2.x = -gSprites[spriteId].pos2.x;
+ if (!RunAffineAnimFromTaskData(&gTasks[taskId]))
+ {
+ gSprites[spriteId].pos2.x = 0;
+ gSprites[spriteId].pos2.y = 0;
+ DestroyAnimVisualTask(taskId);
+ }
+ }
+}
+
+void sub_81060B0(u8 taskId)
+{
+ u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
+ if (++gTasks[taskId].data[0] == 1)
+ {
+ PrepareAffineAnimInTaskData(&gTasks[taskId], GetAnimBattlerSpriteId(0), gUnknown_08593988);
+ gSprites[spriteId].pos2.x = 4;
+ }
+ else
+ {
+ gSprites[spriteId].pos2.x = -gSprites[spriteId].pos2.x;
+ if (!RunAffineAnimFromTaskData(&gTasks[taskId]))
+ {
+ gSprites[spriteId].pos2.x = 0;
+ gSprites[spriteId].pos2.y = 0;
+ DestroyAnimVisualTask(taskId);
+ }
+ }
+}
+
+void sub_8106140(struct Sprite *sprite)
+{
+ InitAnimSpritePos(sprite, TRUE);
+ sprite->data[0] = 95;
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ sprite->data[3] = sprite->pos1.y;
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ InitAnimLinearTranslation(sprite);
+ sprite->callback = sub_810618C;
+}
+
+static void sub_810618C(struct Sprite *sprite)
+{
+ if (!TranslateAnimLinear(sprite))
+ {
+ sprite->pos2.y += Sin(sprite->data[5], 14);
+ sprite->data[5] = (sprite->data[5] + 4) & 0xFF;
+ }
+ else
+ {
+ DestroyAnimSprite(sprite);
+ }
+}
+
+void sub_81061C4(struct Sprite *sprite)
+{
+ if (sprite->data[0] == 0)
+ {
+ sprite->data[1] = gBattleAnimArgs[0];
+ sprite->data[2] = gBattleAnimArgs[1];
+ sprite->data[0]++;
+ }
+ else
+ {
+ sprite->data[4] += sprite->data[1];
+ sprite->pos2.x = sprite->data[4] >> 8;
+ sprite->pos2.y = Sin(sprite->data[3], sprite->data[2]);
+ sprite->data[3] = (sprite->data[3] + 3) & 0xFF;
+ if (sprite->data[3] > 100)
+ sprite->invisible = sprite->data[3] % 2;
+
+ if (sprite->data[3] > 120)
+ DestroyAnimSprite(sprite);
+ }
+}
+
+void sub_810624C(struct Sprite *sprite)
+{
+ sprite->pos1.x = gBattleAnimArgs[0];
+ sprite->pos1.y = 160;
+ sprite->data[0] = gBattleAnimArgs[2];
+ sprite->data[1] = gBattleAnimArgs[1];
+ sprite->callback = WaitAnimForDuration;
+ StoreSpriteCallbackInData6(sprite, sub_810627C);
+}
+
+static void sub_810627C(struct Sprite *sprite)
+{
+ s16 y;
+ sprite->data[2] += sprite->data[1];
+ sprite->pos2.y = -((u16)sprite->data[2] >> 8);
+ sprite->pos2.x = Sin(sprite->data[3], 4);
+ sprite->data[3] = (sprite->data[3] + 3) & 0xFF;
+ y = sprite->pos1.y + sprite->pos2.y;
+ if (y <= 72)
+ {
+ sprite->invisible = sprite->data[3] % 2;
+ if (y <= 64)
+ DestroyAnimSprite(sprite);
+ }
+}
+
+void sub_81062E8(u8 taskId)
+{
+ struct UnknownAnimStruct2 unknownStruct;
+
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_BLEND);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16));
+ SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 3);
+ SetAnimBgAttribute(1, BG_ANIM_SCREEN_SIZE, 0);
+ if (!IsContest())
+ SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 1);
+
+ gBattle_BG1_X = 0;
+ gBattle_BG1_Y = 0;
+ SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X);
+ SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y);
+ sub_80A6B30(&unknownStruct);
+ sub_80A6CC0(unknownStruct.bgId, &gUnknown_08C232E0, unknownStruct.tilesOffset);
+ sub_80A6D60(&unknownStruct, &gUnknown_08C23D78, 0);
+ LoadCompressedPalette(&gUnknown_08C23D50, unknownStruct.unk8 << 4, 32);
+ gTasks[taskId].func = sub_81063A8;
+}
+
+static void sub_81063A8(u8 taskId)
+{
+ struct UnknownAnimStruct2 unknownStruct;
+
+ switch (gTasks[taskId].data[12])
+ {
+ case 0:
+ if (++gTasks[taskId].data[10] == 4)
+ {
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].data[11]++;
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[11], 16 - gTasks[taskId].data[11]));
+ if (gTasks[taskId].data[11] == 16)
+ {
+ gTasks[taskId].data[12]++;
+ gTasks[taskId].data[11] = 0;
+ }
+ }
+ break;
+ case 1:
+ if (++gTasks[taskId].data[11] == 141)
+ {
+ gTasks[taskId].data[11] = 16;
+ gTasks[taskId].data[12]++;
+ }
+ break;
+ case 2:
+ if (++gTasks[taskId].data[10] == 4)
+ {
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].data[11]--;
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[11], 16 - gTasks[taskId].data[11]));
+ if (gTasks[taskId].data[11] == 0)
+ {
+ gTasks[taskId].data[12]++;
+ gTasks[taskId].data[11] = 0;
+ }
+ }
+ break;
+ case 3:
+ sub_80A6B30(&unknownStruct);
+ sub_80A6C68(unknownStruct.bgId);
+ gTasks[taskId].data[12]++;
+ break;
+ case 4:
+ if (!IsContest())
+ SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 0);
+
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1);
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+void sub_81064F8(u8 taskId)
+{
+ struct UnknownAnimStruct2 unknownStruct;
+
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_BLEND);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16));
+ SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1);
+ SetAnimBgAttribute(1, BG_ANIM_SCREEN_SIZE, 0);
+ if (!IsContest())
+ SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 1);
+
+ gBattle_BG1_X = 0;
+ gBattle_BG1_Y = 0;
+ SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X);
+ SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y);
+ sub_80A6B30(&unknownStruct);
+ if (IsContest())
+ sub_80A6D60(&unknownStruct, &gBattleAnimBackgroundTilemap_ScaryFaceContest, 0);
+ else if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_OPPONENT)
+ sub_80A6D60(&unknownStruct, &gBattleAnimBackgroundTilemap_ScaryFacePlayer, 0);
+ else
+ sub_80A6D60(&unknownStruct, &gBattleAnimBackgroundTilemap_ScaryFaceOpponent, 0);
+
+ sub_80A6CC0(unknownStruct.bgId, &gUnknown_08C249F8, unknownStruct.tilesOffset);
+ LoadCompressedPalette(&gUnknown_08C249D0, unknownStruct.unk8 << 4, 32);
+ gTasks[taskId].func = sub_81065EC;
+}
+
+static void sub_81065EC(u8 taskId)
+{
+ struct UnknownAnimStruct2 unknownStruct;
+
+ switch (gTasks[taskId].data[12])
+ {
+ case 0:
+ if (++gTasks[taskId].data[10] == 2)
+ {
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].data[11]++;
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[11], 16 - gTasks[taskId].data[11]));
+ if (gTasks[taskId].data[11] == 14)
+ {
+ gTasks[taskId].data[12]++;
+ gTasks[taskId].data[11] = 0;
+ }
+ }
+ break;
+ case 1:
+ if (++gTasks[taskId].data[11] == 21)
+ {
+ gTasks[taskId].data[11] = 14;
+ gTasks[taskId].data[12]++;
+ }
+ break;
+ case 2:
+ if (++gTasks[taskId].data[10] == 2)
+ {
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].data[11]--;
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[11], 16 - gTasks[taskId].data[11]));
+ if (gTasks[taskId].data[11] == 0)
+ {
+ gTasks[taskId].data[12]++;
+ gTasks[taskId].data[11] = 0;
+ }
+ }
+ break;
+ case 3:
+ sub_80A6B30(&unknownStruct);
+ sub_80A6C68(1);
+ sub_80A6C68(2);
+ gTasks[taskId].data[12]++;
+ // fall through
+ case 4:
+ if (!IsContest())
+ SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 0);
+
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1);
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+// Orbits a sphere in an ellipse around the mon.
+// Used by MOVE_HIDDEN_POWER
+// arg 0: duration
+// arg 1: initial wave offset
+void AnimOrbitFast(struct Sprite *sprite)
+{
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ sprite->affineAnimPaused = 1;
+ sprite->data[0] = gBattleAnimArgs[0];
+ sprite->data[1] = gBattleAnimArgs[1];
+ sprite->data[7] = GetBattlerSpriteSubpriority(gBattleAnimAttacker);
+ sprite->callback = AnimOrbitFastStep;
+ sprite->callback(sprite);
+}
+
+static void AnimOrbitFastStep(struct Sprite *sprite)
+{
+ if ((u16)(sprite->data[1] - 64) < 128)
+ sprite->subpriority = sprite->data[7] + 1;
+ else
+ sprite->subpriority = sprite->data[7] - 1;
+
+ sprite->pos2.x = Sin(sprite->data[1], sprite->data[2] >> 8);
+ sprite->pos2.y = Cos(sprite->data[1], sprite->data[3] >> 8);
+ sprite->data[1] = (sprite->data[1] + 9) & 0xFF;
+ switch (sprite->data[5])
+ {
+ case 1:
+ sprite->data[2] -= 0x400;
+ sprite->data[3] -= 0x100;
+ if (++sprite->data[4] == sprite->data[0])
+ {
+ sprite->data[5] = 2;
+ return;
+ }
+ break;
+ case 0:
+ sprite->data[2] += 0x400;
+ sprite->data[3] += 0x100;
+ if (++sprite->data[4] == sprite->data[0])
+ {
+ sprite->data[4] = 0;
+ sprite->data[5] = 1;
+ }
+ break;
+ }
+
+ if ((u16)gBattleAnimArgs[7] == 0xFFFF)
+ DestroyAnimSprite(sprite);
+}
+
+// Moves orbs away from the mon, based on where they are in their orbit.
+// Used in MOVE_HIDDEN_POWER.
+// arg 0: initial wave offset
+void AnimOrbitScatter(struct Sprite *sprite)
+{
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ sprite->data[0] = Sin(gBattleAnimArgs[0], 10);
+ sprite->data[1] = Cos(gBattleAnimArgs[0], 7);
+ sprite->callback = AnimOrbitScatterStep;
+}
+
+static void AnimOrbitScatterStep(struct Sprite *sprite)
+{
+ sprite->pos2.x += sprite->data[0];
+ sprite->pos2.y += sprite->data[1];
+ if (sprite->pos1.x + sprite->pos2.x + 16 > 272u || sprite->pos1.y + sprite->pos2.y > 160 || sprite->pos1.y + sprite->pos2.y < -16)
+ DestroyAnimSprite(sprite);
+}
+
+static void sub_8106914(struct Sprite *sprite)
+{
+ sprite->pos2.x += sprite->data[0];
+ sprite->pos2.y += sprite->data[1];
+ if (sprite->data[3]++ >= sprite->data[2])
+ DestroyAnimSprite(sprite);
+}
+
+void sub_8106944(struct Sprite *sprite)
+{
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ sprite->data[0] = Sin(gBattleAnimArgs[0], 10);
+ sprite->data[1] = Cos(gBattleAnimArgs[0], 7);
+ sprite->data[2] = gBattleAnimArgs[1];
+ sprite->callback = sub_8106914;
+}
+
+static void sub_810699C(struct Sprite *sprite)
+{
+ if (sprite->animEnded)
+ DestroyAnimSprite(sprite);
+}
+
+void sub_81069B8(struct Sprite *sprite)
+{
+ InitAnimSpritePos(sprite, TRUE);
+ sprite->callback = sub_810699C;
+}
+
+void sub_81069D0(struct Sprite *sprite)
+{
+ s16 var0;
+ if (!sprite->data[0])
+ {
+ sprite->pos1.x += gBattleAnimArgs[0];
+ sprite->pos1.y += gBattleAnimArgs[1];
+ }
+
+ sprite->data[0]++;
+ var0 = (sprite->data[0] * 10) & 0xFF;
+ sprite->pos2.x = Sin(var0, 80) >> 8;
+ if (sprite->data[0] < 80)
+ sprite->pos2.y = (sprite->data[0] / 2) + (Cos(var0, 80) >> 8);
+
+ if (sprite->data[0] > 90)
+ {
+ sprite->data[2]++;
+ sprite->pos2.x -= sprite->data[2] / 2;
+ }
+
+ if (sprite->data[0] > 100)
+ DestroyAnimSprite(sprite);
+}
+
+static void sub_8106A64(struct Sprite *sprite)
+{
+ sprite->data[5]++;
+ sprite->pos2.x = Sin(sprite->data[3], 5);
+ sprite->pos2.y = sprite->data[5] / 2;
+ sprite->data[3] = (sprite->data[3] + 3) & 0xFF;
+ if (sprite->data[5] > 20)
+ sprite->invisible = sprite->data[5] % 2;
+
+ if (sprite->data[5] > 30)
+ DestroyAnimSprite(sprite);
+}
+
+void sub_8106AD0(struct Sprite *sprite)
+{
+ if (sprite->data[0] == 0)
+ {
+ sprite->data[1] = gBattleAnimArgs[0];
+ sprite->data[2] = gBattleAnimArgs[1];
+ sprite->data[0]++;
+ }
+ else
+ {
+ sprite->data[4] += sprite->data[1];
+ sprite->pos2.x = sprite->data[4] >> 8;
+ sprite->pos2.y = Sin(sprite->data[3], sprite->data[2]);
+ sprite->data[3] = (sprite->data[3] + 3) & 0xFF;
+ if (sprite->data[3] > 70)
+ {
+ sprite->callback = sub_8106A64;
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->pos2.x = 0;
+ sprite->pos2.y = 0;
+ sprite->data[3] = Random2() % 180;
+ }
+ }
+}
+
+void sub_8106B54(struct Sprite *sprite)
+{
+ if (sprite->data[3] == 0)
+ {
+ sprite->pos1.x += gBattleAnimArgs[0];
+ sprite->pos1.y += gBattleAnimArgs[1];
+ StartSpriteAnim(sprite, 0);
+ sprite->subpriority = GetBattlerSpriteSubpriority(gBattleAnimTarget) - 1;
+ sprite->data[2] = 1;
+ }
+ sprite->data[0] += sprite->data[2];
+ sprite->data[1] = (sprite->data[0] * 4) % 256;
+ if (sprite->data[1] < 0)
+ sprite->data[1] = 0;
+ sprite->pos2.x = Cos(sprite->data[1], 30 - sprite->data[0] / 4);
+ sprite->pos2.y = Sin(sprite->data[1], 10 - sprite->data[0] / 8);
+ if (sprite->data[1] > 128 && sprite->data[2] > 0)
+ sprite->data[2] = -1;
+ if (sprite->data[1] == 0 && sprite->data[2] < 0)
+ sprite->data[2] = 1;
+ sprite->data[3]++;
+ if (sprite->data[3] < 10 || sprite->data[3] > 80)
+ sprite->invisible = sprite->data[0] % 2;
+ else
+ sprite->invisible = FALSE;
+ if (sprite->data[3] > 90)
+ DestroyAnimSprite(sprite);
+}
+
+void sub_8106C80(struct Sprite *sprite)
+{
+ if (sprite->data[0] == 0)
+ {
+ sprite->pos1.x += gBattleAnimArgs[0];
+ sprite->pos1.y += gBattleAnimArgs[1];
+ StartSpriteAnim(sprite, gBattleAnimArgs[2]);
+ sprite->data[0]++;
+ }
+ else if (sprite->animEnded)
+ {
+ DestroyAnimSprite(sprite);
+ }
+}
+
+void sub_8106CD0(struct Sprite *sprite)
+{
+ if (!gBattleAnimArgs[2])
+ {
+ DestroyAnimSprite(sprite);
+ }
+ else
+ {
+ if (!gBattleAnimArgs[0])
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ }
+ else
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ }
+
+ if (!gBattleAnimArgs[1])
+ sprite->pos1.x += 32;
+ else
+ sprite->pos1.x -= 32;
+
+ sprite->data[0] = gBattleAnimArgs[2];
+ sprite->data[1] = gBattleAnimArgs[1];
+ StartSpriteAnim(sprite, sprite->data[1]);
+ sprite->callback = sub_8106D5C;
+ }
+}
+
+static void sub_8106D5C(struct Sprite *sprite)
+{
+ if (sprite->animEnded)
+ {
+ if (--sprite->data[0])
+ StartSpriteAnim(sprite, sprite->data[1]);
+ else
+ DestroyAnimSprite(sprite);
+ }
+}
+
+void sub_8106D90(u8 taskId)
+{
+ u8 spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
+
+ PrepareAffineAnimInTaskData(&gTasks[taskId], spriteId, gUnknown_08593B98);
+ gTasks[taskId].func = sub_8106DD4;
+}
+
+static void sub_8106DD4(u8 taskId)
+{
+ if (!RunAffineAnimFromTaskData(&gTasks[taskId]))
+ DestroyAnimVisualTask(taskId);
+}
+
+void sub_8106E00(struct Sprite *sprite)
+{
+ int var1;
+ u8 battler = !gBattleAnimArgs[0] ? gBattleAnimAttacker : gBattleAnimTarget;
+
+ if (GetBattlerSide(battler) == B_SIDE_OPPONENT)
+ gBattleAnimArgs[1] *= -1;
+
+ sprite->pos1.x = GetBattlerSpriteCoord(battler, 2) + gBattleAnimArgs[1];
+ sprite->pos1.y = GetBattlerSpriteCoord(battler, 3) + gBattleAnimArgs[2];
+ sprite->data[0] = 0;
+ sprite->data[1] = (u16)sprite->pos1.x << 3;
+ sprite->data[2] = (u16)sprite->pos1.y << 3;
+
+ var1 = gBattleAnimArgs[1] << 3;
+ if (var1 < 0)
+ var1 += 7;
+ sprite->data[3] = var1 >> 3;
+
+ var1 = gBattleAnimArgs[2] << 3;
+ if (var1 < 0)
+ var1 += 7;
+ sprite->data[4] = var1 >> 3;
+
+ sprite->oam.tileNum += gBattleAnimArgs[3] * 16;
+ sprite->callback = sub_8106EC8;
+}
+
+static void sub_8106EC8(struct Sprite *sprite)
+{
+ sprite->data[1] += sprite->data[3];
+ sprite->data[2] += sprite->data[4];
+ sprite->pos1.x = sprite->data[1] >> 3;
+ sprite->pos1.y = sprite->data[2] >> 3;
+ if (++sprite->data[0] > 16)
+ DestroyAnimSprite(sprite);
+}
+
+void sub_8106F00(struct Sprite *sprite)
+{
+ if (!sprite->data[0])
+ {
+ sprite->data[1] = 120 - gBattleAnimArgs[0];
+ sprite->invisible = 1;
+ }
+
+ if (++sprite->data[0] == sprite->data[1])
+ SetGreyscaleOrOriginalPalette(sprite->oam.paletteNum + 16, 0);
+
+ if (sprite->data[0] == sprite->data[1] + 80)
+ DestroyAnimSprite(sprite);
+}
+
+void sub_8106F60(struct Sprite *sprite)
+{
+ int index;
+ int var2;
+
+ if (!sprite->data[0])
+ {
+ sprite->pos1.x = 120;
+ sprite->pos1.y = (gBattleAnimArgs[0] + (((u16)gBattleAnimArgs[0]) >> 31)) / 2 - 15;
+
+ StartSpriteAnim(sprite, gBattleAnimArgs[1]);
+
+ sprite->data[5] = 120;
+ sprite->data[3] = gBattleAnimArgs[2];
+ }
+
+ sprite->data[0]++;
+
+ sprite->data[1] = (sprite->data[0] + ((u16)sprite->data[0] >> 31)) / 2;
+ index = ((sprite->data[0] * 3) + (u16)sprite->data[3]);
+ var2 = 0xFF;
+ sprite->data[6] = (sprite->data[6] + 10) & 0xFF;
+
+ index &= var2;
+ sprite->pos2.x = Cos(index, 100);
+
+ sprite->pos2.y = sprite->data[1] + Sin(index, 10) + Cos(sprite->data[6], 4);
+
+ if (sprite->data[0] > sprite->data[5])
+ {
+ sprite->callback = sub_8107018;
+
+ sprite->data[0] = 0;
+ oamt_add_pos2_onto_pos1(sprite);
+ sprite->data[2] = 5;
+ sprite->data[4] = 0;
+ sprite->data[3] = 0;
+
+ StartSpriteAffineAnim(sprite, 1);
+ }
+}
+
+static void sub_8107018(struct Sprite *sprite)
+{
+ if (++sprite->data[0] > 10)
+ {
+ sprite->data[0] = 0;
+ sprite->callback = sub_810703C;
+ }
+}
+
+static void sub_810703C(struct Sprite *sprite)
+{
+ sprite->data[3] += sprite->data[2];
+ sprite->pos2.y = sprite->data[3];
+
+ sprite->data[2]++;
+
+ if (sprite->data[3] > 48 && sprite->data[2] > 0)
+ {
+ sprite->data[2] = sprite->data[4] - 5;
+ sprite->data[4]++;
+ }
+
+ if (sprite->data[4] > 3)
+ {
+ int var1 = sprite->data[2];
+ sprite->invisible = var1 - (((s32)(var1 + ((u32)var1 >> 31)) >> 1) << 1);
+ DestroyAnimSprite(sprite);
+ }
+
+ if (sprite->data[4] == 4)
+ {
+ DestroyAnimSprite(sprite);
+ }
+}
+
+void sub_81070AC(struct Sprite *sprite)
+{
+ if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker)))
+ {
+ SetAverageBattlerPositions(gBattleAnimAttacker, 0, &sprite->pos1.x, &sprite->pos1.y);
+ sprite->pos1.y += 40;
+
+ StartSpriteAffineAnim(sprite, 1);
+ }
+ else
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + 40;
+ }
+
+ sprite->data[0] = 13;
+ sprite->data[2] = sprite->pos1.x;
+ sprite->data[4] = sprite->pos1.y - 72;
+
+ sprite->callback = StartAnimLinearTranslation;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+}
+
+void AnimTask_IsFuryCutterHitRight(u8 taskId)
+{
+ gBattleAnimArgs[7] = gAnimDisableStructPtr->furyCutterCounter & 1;
+ DestroyAnimVisualTask(taskId);
+}
+
+void AnimTask_GetFuryCutterHitCount(u8 taskId)
+{
+ gBattleAnimArgs[7] = gAnimDisableStructPtr->furyCutterCounter;
+ DestroyAnimVisualTask(taskId);
+}
diff --git a/src/battle_anim_effects_3.c b/src/battle_anim_effects_3.c
new file mode 100755
index 000000000..5f65cb31f
--- /dev/null
+++ b/src/battle_anim_effects_3.c
@@ -0,0 +1,4889 @@
+#include "global.h"
+#include "alloc.h"
+#include "battle.h"
+#include "battle_anim.h"
+#include "bg.h"
+#include "contest.h"
+#include "data2.h"
+#include "decompress.h"
+#include "dma3.h"
+#include "gpu_regs.h"
+#include "graphics.h"
+#include "palette.h"
+#include "pokemon_icon.h"
+#include "random.h"
+#include "scanline_effect.h"
+#include "sound.h"
+#include "sprite.h"
+#include "task.h"
+#include "trig.h"
+#include "util.h"
+#include "constants/battle_anim.h"
+#include "constants/rgb.h"
+#include "constants/songs.h"
+#include "constants/species.h"
+
+extern u8 sub_807521C(s16 x, s16 y, u8 a3);
+extern void sub_810E2C8(struct Sprite *);
+
+extern const struct SpriteTemplate gUnknown_08593114;
+extern const union AffineAnimCmd *const gUnknown_082FF6C0[];
+extern const union AffineAnimCmd *const gUnknown_082FF694[];
+
+void sub_815A0D4(struct Sprite *);
+void sub_815A1B0(struct Sprite *);
+void sub_815A254(struct Sprite *);
+void sub_815A2F0(struct Sprite *);
+void sub_815A6C4(struct Sprite *);
+void sub_815A7B0(struct Sprite *);
+void sub_815A7EC(struct Sprite *);
+void sub_815A8AC(struct Sprite *);
+void sub_815A934(struct Sprite *);
+void sub_815AAA4(struct Sprite *);
+void sub_815ABD0(struct Sprite *);
+void sub_815ACD0(struct Sprite *);
+void sub_815B27C(struct Sprite *);
+void sub_815B394(struct Sprite *);
+void sub_815B49C(struct Sprite *);
+void sub_815B570(struct Sprite *);
+void sub_815B70C(struct Sprite *);
+void sub_815BE04(struct Sprite *);
+void sub_815C400(struct Sprite *);
+void sub_815C6B0(struct Sprite *);
+void sub_815C95C(struct Sprite *);
+void sub_815CB88(struct Sprite *);
+void sub_815CC94(struct Sprite *);
+void sub_815CDB4(struct Sprite *);
+void sub_815D7B4(struct Sprite *);
+void sub_815D870(struct Sprite *);
+void sub_815DEBC(struct Sprite *);
+void sub_815E01C(struct Sprite *);
+void sub_815E404(struct Sprite *);
+void sub_815E444(struct Sprite *);
+void sub_815E6D8(struct Sprite *);
+void sub_815E954(struct Sprite *);
+void sub_815EA14(struct Sprite *);
+void sub_815EE84(struct Sprite *);
+void sub_815F18C(struct Sprite *);
+void sub_815F48C(struct Sprite *);
+void sub_815FE80(struct Sprite *);
+void sub_81061C4(struct Sprite *);
+void sub_8160338(struct Sprite *);
+void sub_81603A8(struct Sprite *);
+static void sub_815A114(struct Sprite *);
+static void sub_815A1F4(struct Sprite *);
+static void sub_815A234(struct Sprite *);
+static void sub_815A31C(struct Sprite *);
+static void sub_815A3AC(struct Sprite *);
+static void sub_815A3F0(struct Sprite *);
+static void sub_815A49C(struct Sprite *);
+static void sub_815A52C(u8);
+static void sub_815A5F0(u8);
+static void sub_815A73C(struct Sprite *);
+static void sub_815A76C(struct Sprite *);
+static void sub_815A9A0(struct Sprite *);
+static void sub_815AA6C(struct Sprite *);
+static void sub_815AB5C(struct Sprite *);
+static void sub_815AD4C(struct Sprite *);
+static void sub_815AED8(u8);
+static void sub_815B054(u8);
+static void sub_815B23C(struct Sprite *);
+static void sub_815B4D4(struct Sprite *);
+static void sub_815B5D0(struct Sprite *);
+static void sub_815BF44(struct Sprite *);
+static void sub_815BFF4(struct Sprite *);
+static void sub_815C050(struct Sprite *);
+static void sub_815C548(u8);
+static void sub_815C700(struct Sprite *);
+static void sub_815C7C4(u8);
+static void sub_815CC34(struct Sprite *);
+static void sub_815CD0C(struct Sprite *);
+static void sub_815CDFC(struct Sprite *);
+static void sub_815D1BC(u8);
+static void sub_815D398(u8);
+static void sub_815D694(u8);
+static void sub_815D804(struct Sprite *);
+static void sub_815DD48(u8);
+static void sub_815DDE0(u8, bool8);
+static void sub_815DF64(u8);
+static void sub_815E0DC(struct Sprite *);
+static void sub_815E20C(u8);
+static void sub_815E34C(s16, s16, s16, s16, u8, u8, s16 *, s16 *);
+static void sub_815E5CC(u8);
+static void sub_815E784(struct Sprite *);
+static void sub_815E898(u8);
+static void sub_815E9BC(struct Sprite *);
+static void sub_815EA60(struct Sprite *);
+static void sub_815ECE4(u8);
+static void sub_815EF08(struct Sprite *);
+static void sub_815F330(u8);
+static void sub_815F4F0(struct Sprite *);
+static void sub_815F79C(u8);
+static void sub_815F7C4(struct Sprite *);
+
+const union AnimCmd gUnknown_085CE004[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(16, 4),
+ ANIMCMD_FRAME(32, 4),
+ ANIMCMD_FRAME(48, 4),
+ ANIMCMD_FRAME(64, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_085CE01C[] =
+{
+ gUnknown_085CE004,
+};
+
+const struct SpriteTemplate gUnknown_085CE020 =
+{
+ .tileTag = ANIM_TAG_SCRATCH,
+ .paletteTag = ANIM_TAG_SCRATCH,
+ .oam = &gUnknown_08524A34,
+ .anims = gUnknown_085CE01C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80A77C8,
+};
+
+const struct SpriteTemplate gUnknown_085CE038 =
+{
+ .tileTag = ANIM_TAG_BLACK_SMOKE,
+ .paletteTag = ANIM_TAG_BLACK_SMOKE,
+ .oam = &gUnknown_08524934,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_815A0D4,
+};
+
+const struct SpriteTemplate gUnknown_085CE050 =
+{
+ .tileTag = ANIM_TAG_BLACK_BALL,
+ .paletteTag = ANIM_TAG_BLACK_BALL,
+ .oam = &gUnknown_08524904,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80A78AC,
+};
+
+const union AnimCmd gUnknown_085CE068[] =
+{
+ ANIMCMD_FRAME(0, 40),
+ ANIMCMD_FRAME(16, 8),
+ ANIMCMD_FRAME(32, 40),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_085CE078[] =
+{
+ gUnknown_085CE068,
+};
+
+const struct SpriteTemplate gUnknown_085CE07C =
+{
+ .tileTag = ANIM_TAG_OPENING_EYE,
+ .paletteTag = ANIM_TAG_OPENING_EYE,
+ .oam = &gUnknown_08524914,
+ .anims = gUnknown_085CE078,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80A77C8,
+};
+
+const struct SpriteTemplate gUnknown_085CE094 =
+{
+ .tileTag = ANIM_TAG_ROUND_WHITE_HALO,
+ .paletteTag = ANIM_TAG_ROUND_WHITE_HALO,
+ .oam = &gUnknown_08524A3C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_815A1B0,
+};
+
+const struct SpriteTemplate gUnknown_085CE0AC =
+{
+ .tileTag = ANIM_TAG_TEAL_ALERT,
+ .paletteTag = ANIM_TAG_TEAL_ALERT,
+ .oam = &gUnknown_08524974,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_815A254,
+};
+
+const union AffineAnimCmd gUnknown_085CE0C4[] =
+{
+ AFFINEANIMCMD_FRAME(0x180, 0x180, 0, 0),
+ AFFINEANIMCMD_FRAME(-0x20, 0x18, 0, 5),
+ AFFINEANIMCMD_FRAME(0x18, -0x20, 0, 5),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+const union AffineAnimCmd gUnknown_085CE0E4[] =
+{
+ AFFINEANIMCMD_FRAME(0x30, 0x30, 0, 0),
+ AFFINEANIMCMD_FRAME(0x20, 0x20, 0, 6),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gUnknown_085CE0FC[] =
+{
+ gUnknown_085CE0C4,
+ gUnknown_085CE0E4,
+};
+
+const struct SpriteTemplate gUnknown_085CE104 =
+{
+ .tileTag = ANIM_TAG_EYE,
+ .paletteTag = ANIM_TAG_EYE,
+ .oam = &gUnknown_08524AFC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_085CE0FC,
+ .callback = sub_815A2F0,
+};
+
+const struct SpriteTemplate gUnknown_085CE11C =
+{
+ .tileTag = ANIM_TAG_SPIKES,
+ .paletteTag = ANIM_TAG_SPIKES,
+ .oam = &gUnknown_0852490C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_815A6C4,
+};
+
+const union AnimCmd gUnknown_085CE134[] =
+{
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_FRAME(16, 3),
+ ANIMCMD_FRAME(32, 3),
+ ANIMCMD_FRAME(48, 3),
+ ANIMCMD_FRAME(64, 3),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_085CE14C[] =
+{
+ gUnknown_085CE134,
+};
+
+const struct SpriteTemplate gUnknown_085CE150 =
+{
+ .tileTag = ANIM_TAG_LEER,
+ .paletteTag = ANIM_TAG_LEER,
+ .oam = &gUnknown_08524914,
+ .anims = gUnknown_085CE14C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_815A7B0,
+};
+
+const union AnimCmd gUnknown_085CE168[] =
+{
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_085CE170[] =
+{
+ gUnknown_085CE168,
+};
+
+const union AffineAnimCmd gUnknown_085CE174[] =
+{
+ AFFINEANIMCMD_FRAME(-7, -7, -3, 16),
+ AFFINEANIMCMD_FRAME(7, 7, 3, 16),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gUnknown_085CE18C[] =
+{
+ gUnknown_085CE174,
+};
+
+const struct SpriteTemplate gUnknown_085CE190 =
+{
+ .tileTag = ANIM_TAG_LETTER_Z,
+ .paletteTag = ANIM_TAG_LETTER_Z,
+ .oam = &gUnknown_08524974,
+ .anims = gUnknown_085CE170,
+ .images = NULL,
+ .affineAnims = gUnknown_085CE18C,
+ .callback = sub_815A7EC,
+};
+
+const union AnimCmd gUnknown_085CE1A8[] =
+{
+ ANIMCMD_FRAME(0, 8),
+ ANIMCMD_FRAME(16, 16),
+ ANIMCMD_FRAME(32, 4),
+ ANIMCMD_FRAME(48, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_085CE1BC[] =
+{
+ gUnknown_085CE1A8,
+};
+
+const union AffineAnimCmd gUnknown_085CE1C0[] =
+{
+ AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0),
+ AFFINEANIMCMD_FRAME(-0x20, -0x20, 0, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gUnknown_085CE1D8[] =
+{
+ gUnknown_085CE1C0,
+};
+
+const struct SpriteTemplate gUnknown_085CE1DC =
+{
+ .tileTag = ANIM_TAG_FANG_ATTACK,
+ .paletteTag = ANIM_TAG_FANG_ATTACK,
+ .oam = &gUnknown_085249D4,
+ .anims = gUnknown_085CE1BC,
+ .images = NULL,
+ .affineAnims = gUnknown_085CE1D8,
+ .callback = sub_815A8AC,
+};
+
+const union AffineAnimCmd gUnknown_085CE1F4[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x180, 0, 0),
+ AFFINEANIMCMD_FRAME(0x10, 0x0, 0, 20),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gUnknown_085CE20C[] =
+{
+ AFFINEANIMCMD_FRAME(0x140, 0x180, 0, 0),
+ AFFINEANIMCMD_FRAME(-0x10, 0x0, 0, 19),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gUnknown_085CE224[] =
+{
+ gUnknown_085CE1F4,
+ gUnknown_085CE20C,
+};
+
+const struct SpriteTemplate gUnknown_085CE22C =
+{
+ .tileTag = ANIM_TAG_SPOTLIGHT,
+ .paletteTag = ANIM_TAG_SPOTLIGHT,
+ .oam = &gUnknown_085249DC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_085CE224,
+ .callback = sub_815A934,
+};
+
+const struct SpriteTemplate gUnknown_085CE244 =
+{
+ .tileTag = ANIM_TAG_TAG_HAND,
+ .paletteTag = ANIM_TAG_TAG_HAND,
+ .oam = &gUnknown_08524914,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_815AAA4,
+};
+
+const struct SpriteTemplate gUnknown_085CE25C =
+{
+ .tileTag = ANIM_TAG_TAG_HAND,
+ .paletteTag = ANIM_TAG_TAG_HAND,
+ .oam = &gUnknown_08524914,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_815ABD0,
+};
+
+const union AnimCmd gUnknown_085CE274[] =
+{
+ ANIMCMD_FRAME(0, 2),
+ ANIMCMD_FRAME(8, 2),
+ ANIMCMD_FRAME(16, 2),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gUnknown_085CE284[] =
+{
+ gUnknown_085CE274,
+};
+
+const struct SpriteTemplate gUnknown_085CE288 =
+{
+ .tileTag = ANIM_TAG_RAPID_SPIN,
+ .paletteTag = ANIM_TAG_RAPID_SPIN,
+ .oam = &gUnknown_08524934,
+ .anims = gUnknown_085CE284,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_815ACD0,
+};
+
+const union AffineAnimCmd gUnknown_085CE2A0[] =
+{
+ AFFINEANIMCMD_FRAME(-12, 8, 0, 4),
+ AFFINEANIMCMD_FRAME(20, -20, 0, 4),
+ AFFINEANIMCMD_FRAME(-8, 12, 0, 4),
+ AFFINEANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_085CE2C0[] =
+{
+ ANIMCMD_FRAME(0, 8),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_085CE2C8[] =
+{
+ gUnknown_085CE2C0,
+};
+
+const union AffineAnimCmd gUnknown_085CE2CC[] =
+{
+ AFFINEANIMCMD_FRAME(0, 0, 5, 40),
+ AFFINEANIMCMD_FRAME(0, 0, 10, 10),
+ AFFINEANIMCMD_FRAME(0, 0, 15, 10),
+ AFFINEANIMCMD_FRAME(0, 0, 20, 40),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gUnknown_085CE2F4[] =
+{
+ gUnknown_085CE2CC,
+};
+
+const struct SpriteTemplate gUnknown_085CE2F8 =
+{
+ .tileTag = ANIM_TAG_TRI_FORCE_TRIANGLE,
+ .paletteTag = ANIM_TAG_TRI_FORCE_TRIANGLE,
+ .oam = &gUnknown_085249DC,
+ .anims = gUnknown_085CE2C8,
+ .images = NULL,
+ .affineAnims = gUnknown_085CE2F4,
+ .callback = sub_815B27C,
+};
+
+const union AnimCmd gUnknown_085CE310[] =
+{
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_FRAME(16, 3),
+ ANIMCMD_FRAME(32, 3),
+ ANIMCMD_FRAME(48, 3),
+ ANIMCMD_FRAME(32, 3, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 3, .hFlip = TRUE),
+ ANIMCMD_FRAME(0, 3, .hFlip = TRUE),
+ ANIMCMD_LOOP(1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_085CE334[] =
+{
+ gUnknown_085CE310,
+};
+
+const struct SpriteTemplate gUnknown_085CE338 =
+{
+ .tileTag = ANIM_TAG_ECLIPSING_ORB,
+ .paletteTag = ANIM_TAG_ECLIPSING_ORB,
+ .oam = &gUnknown_08524914,
+ .anims = gUnknown_085CE334,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80A77C8,
+};
+
+const union AffineAnimCmd gUnknown_085CE350[] =
+{
+ AFFINEANIMCMD_FRAME(-12, 20, 0, 8),
+ AFFINEANIMCMD_FRAME(12, -20, 0, 8),
+ AFFINEANIMCMD_LOOP(2),
+ AFFINEANIMCMD_END,
+};
+
+const struct SpriteTemplate gUnknown_085CE370 =
+{
+ .tileTag = ANIM_TAG_POKEBALL,
+ .paletteTag = ANIM_TAG_POKEBALL,
+ .oam = &gUnknown_0852490C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_815B394,
+};
+
+const struct SpriteTemplate gUnknown_085CE388 =
+{
+ .tileTag = ANIM_TAG_GOLD_STARS,
+ .paletteTag = ANIM_TAG_GOLD_STARS,
+ .oam = &gUnknown_0852490C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_815B49C,
+};
+
+const struct SpriteTemplate gUnknown_085CE3A0 =
+{
+ .tileTag = ANIM_TAG_GOLD_STARS,
+ .paletteTag = ANIM_TAG_GOLD_STARS,
+ .oam = &gUnknown_08524904,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_815B570,
+};
+
+const union AffineAnimCmd gUnknown_085CE3B8[] =
+{
+ AFFINEANIMCMD_FRAME(8, -8, 0, 12),
+ AFFINEANIMCMD_FRAME(-16, 16, 0, 12),
+ AFFINEANIMCMD_FRAME(8, -8, 0, 12),
+ AFFINEANIMCMD_LOOP(1),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gUnknown_085CE3E0[] =
+{
+ AFFINEANIMCMD_FRAME(0, 6, 0, 20),
+ AFFINEANIMCMD_FRAME(0, 0, 0, 20),
+ AFFINEANIMCMD_FRAME(0, -18, 0, 6),
+ AFFINEANIMCMD_FRAME(-18, -18, 0, 3),
+ AFFINEANIMCMD_FRAME(0, 0, 0, 15),
+ AFFINEANIMCMD_FRAME(4, 4, 0, 13),
+ AFFINEANIMCMD_END,
+};
+
+const struct SpriteTemplate gUnknown_085CE418 =
+{
+ .tileTag = ANIM_TAG_BLUE_ORB,
+ .paletteTag = ANIM_TAG_BLUE_ORB,
+ .oam = &gUnknown_08524904,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_815B70C,
+};
+
+const union AffineAnimCmd gUnknown_085CE430[] =
+{
+ AFFINEANIMCMD_FRAME(0, 6, 0, 20),
+ AFFINEANIMCMD_FRAME(0, 0, 0, 20),
+ AFFINEANIMCMD_FRAME(7, -30, 0, 6),
+ AFFINEANIMCMD_FRAME(0, 0, 0, 20),
+ AFFINEANIMCMD_FRAME(-2, 3, 0, 20),
+ AFFINEANIMCMD_END,
+};
+
+const s8 gUnknown_085CE460[] =
+{
+ 0xE8,
+ 0x18,
+ 0xFC,
+ 0x00,
+};
+
+const union AnimCmd gUnknown_085CE464[] =
+{
+ ANIMCMD_FRAME(0, 6),
+ ANIMCMD_FRAME(4, 6),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd gUnknown_085CE470[] =
+{
+ ANIMCMD_FRAME(8, 6),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_085CE478[] =
+{
+ ANIMCMD_FRAME(12, 6),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_085CE480[] =
+{
+ gUnknown_085CE464,
+ gUnknown_085CE470,
+ gUnknown_085CE478,
+};
+
+const struct SpriteTemplate gUnknown_085CE48C =
+{
+ .tileTag = ANIM_TAG_GREEN_STAR,
+ .paletteTag = ANIM_TAG_GREEN_STAR,
+ .oam = &gUnknown_0852490C,
+ .anims = gUnknown_085CE480,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_815BE04,
+};
+
+const s8 gUnknown_085CE4A4[] =
+{
+ 0x78,
+ 0x50,
+ 0x28,
+ 0x00,
+};
+
+const u8 gUnknown_085CE4A8[] =
+{
+ 0,
+ 0,
+ 0,
+ 0,
+ 50,
+};
+
+const union AffineAnimCmd gUnknown_085CE4B0[] =
+{
+ AFFINEANIMCMD_FRAME(0, -15, 0, 7),
+ AFFINEANIMCMD_FRAME(0, 15, 0, 7),
+ AFFINEANIMCMD_LOOP(2),
+ AFFINEANIMCMD_END,
+};
+
+const struct SpriteTemplate gUnknown_085CE4D0 =
+{
+ .tileTag = ANIM_TAG_ANGER,
+ .paletteTag = ANIM_TAG_ANGER,
+ .oam = &gUnknown_0852490C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_815C400,
+};
+
+const union AnimCmd gUnknown_085CE4E8[] =
+{
+ ANIMCMD_FRAME(0, 8),
+ ANIMCMD_FRAME(1, 8),
+ ANIMCMD_FRAME(2, 8),
+ ANIMCMD_FRAME(3, 8),
+ ANIMCMD_FRAME(3, 8, .vFlip = TRUE),
+ ANIMCMD_FRAME(2, 8, .vFlip = TRUE),
+ ANIMCMD_FRAME(0, 8, .vFlip = TRUE),
+ ANIMCMD_FRAME(1, 8, .vFlip = TRUE),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd gUnknown_085CE50C[] =
+{
+ ANIMCMD_FRAME(0, 8, .hFlip = TRUE),
+ ANIMCMD_FRAME(1, 8, .hFlip = TRUE),
+ ANIMCMD_FRAME(2, 8, .hFlip = TRUE),
+ ANIMCMD_FRAME(3, 8, .hFlip = TRUE),
+ ANIMCMD_FRAME(3, 8, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(2, 8, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(0, 8, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(1, 8, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd gUnknown_085CE530[] =
+{
+ ANIMCMD_FRAME(0, 8),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_085CE538[] =
+{
+ gUnknown_085CE4E8,
+ gUnknown_085CE50C,
+ gUnknown_085CE530,
+};
+
+const struct SpriteTemplate gUnknown_085CE544 =
+{
+ .tileTag = ANIM_TAG_PINK_PETAL,
+ .paletteTag = ANIM_TAG_PINK_PETAL,
+ .oam = &gUnknown_08524904,
+ .anims = gUnknown_085CE538,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_815C6B0,
+};
+
+const u16 gUnknown_085CE55C[] = INCBIN_U16("graphics/unknown/unknown_85CE55C.gbapal");
+
+const union AnimCmd gUnknown_085CE57C[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_FRAME(4, 9),
+ ANIMCMD_FRAME(8, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_085CE58C[] =
+{
+ gUnknown_085CE57C,
+};
+
+const struct SpriteTemplate gUnknown_085CE590 =
+{
+ .tileTag = ANIM_TAG_PAIN_SPLIT,
+ .paletteTag = ANIM_TAG_PAIN_SPLIT,
+ .oam = &gUnknown_0852490C,
+ .anims = gUnknown_085CE58C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_815C95C,
+};
+
+const struct SpriteTemplate gUnknown_085CE5A8 =
+{
+ .tileTag = ANIM_TAG_CONFETTI,
+ .paletteTag = ANIM_TAG_CONFETTI,
+ .oam = &gUnknown_08524904,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_815CB88,
+};
+
+const struct SpriteTemplate gUnknown_085CE5C0 =
+{
+ .tileTag = ANIM_TAG_SPOTLIGHT,
+ .paletteTag = ANIM_TAG_SPOTLIGHT,
+ .oam = &gUnknown_085249DC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_085CE224,
+ .callback = sub_815CC94,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_85CE5D8 =
+{
+ .tileTag = ANIM_TAG_BLUE_ORB,
+ .paletteTag = ANIM_TAG_BLUE_ORB,
+ .oam = &gUnknown_08524904,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_815CDB4,
+};
+
+const union AffineAnimCmd gUnknown_085CE5F0[] =
+{
+ AFFINEANIMCMD_FRAME(16, 0, 0, 4),
+ AFFINEANIMCMD_FRAME(0, -3, 0, 16),
+ AFFINEANIMCMD_FRAME(4, 0, 0, 4),
+ AFFINEANIMCMD_FRAME(0, 0, 0, 24),
+ AFFINEANIMCMD_FRAME(-5, 3, 0, 16),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gUnknown_085CE620[] =
+{
+ AFFINEANIMCMD_FRAME(0x80, 0x80, 0, 0),
+ AFFINEANIMCMD_FRAME(-8, -8, 0, 8),
+ AFFINEANIMCMD_FRAME(8, 8, 0, 8),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd gUnknown_085CE640[] =
+{
+ AFFINEANIMCMD_FRAME(0xC0, 0xC0, 0, 0),
+ AFFINEANIMCMD_FRAME(8, 8, 0, 8),
+ AFFINEANIMCMD_FRAME(-8, -8, 0, 8),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd gUnknown_085CE660[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(8, 8, 0, 8),
+ AFFINEANIMCMD_FRAME(-8, -8, 0, 8),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gUnknown_085CE680[] =
+{
+ gUnknown_085CE620,
+ gUnknown_085CE640,
+ gUnknown_085CE660,
+};
+
+const struct SpriteTemplate gUnknown_085CE68C =
+{
+ .tileTag = ANIM_TAG_PINK_CLOUD,
+ .paletteTag = ANIM_TAG_PINK_CLOUD,
+ .oam = &gUnknown_08524974,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_085CE680,
+ .callback = sub_815D7B4,
+};
+
+const union AffineAnimCmd gUnknown_085CE6A4[] =
+{
+ AFFINEANIMCMD_FRAME(0x80, 0x80, 0, 0),
+ AFFINEANIMCMD_FRAME(-4, -6, 0, 16),
+ AFFINEANIMCMD_FRAME(4, 6, 0, 16),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd gUnknown_085CE6C4[] =
+{
+ AFFINEANIMCMD_FRAME(0xC0, 0xC0, 0, 0),
+ AFFINEANIMCMD_FRAME(4, 6, 0, 16),
+ AFFINEANIMCMD_FRAME(-4, -6, 0, 16),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd gUnknown_085CE6E4[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(4, 6, 0, 16),
+ AFFINEANIMCMD_FRAME(-4, -6, 0, 16),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd gUnknown_085CE704[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(8, 10, 0, 30),
+ AFFINEANIMCMD_FRAME(-8, -10, 0, 16),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gUnknown_085CE724[] =
+{
+ gUnknown_085CE6A4,
+ gUnknown_085CE6C4,
+ gUnknown_085CE6E4,
+ gUnknown_085CE704,
+};
+
+const struct SpriteTemplate gUnknown_085CE734 =
+{
+ .tileTag = ANIM_TAG_PINK_CLOUD,
+ .paletteTag = ANIM_TAG_PINK_CLOUD,
+ .oam = &gUnknown_085249D4,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_085CE724,
+ .callback = sub_815D870,
+};
+
+const union AffineAnimCmd gUnknown_085CE74C[] =
+{
+ AFFINEANIMCMD_FRAME(-16, 16, 0, 6),
+ AFFINEANIMCMD_FRAME(16, -16, 0, 12),
+ AFFINEANIMCMD_FRAME(-16, 16, 0, 6),
+ AFFINEANIMCMD_END,
+};
+
+const struct SpriteTemplate gUnknown_085CE76C =
+{
+ .tileTag = ANIM_TAG_SWEAT_DROP,
+ .paletteTag = ANIM_TAG_SWEAT_DROP,
+ .oam = &gUnknown_08524904,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_815DEBC,
+};
+
+const u16 gUnknown_085CE784[] = INCBIN_U16("graphics/battle_anims/sprites/effect.gbapal");
+
+const union AnimCmd gUnknown_085CE7B4[] =
+{
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_FRAME(16, 3),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd gUnknown_085CE7C0[] =
+{
+ ANIMCMD_FRAME(32, 3),
+ ANIMCMD_FRAME(48, 3),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gUnknown_085CE7CC[] =
+{
+ gUnknown_085CE7B4,
+ gUnknown_085CE7C0,
+};
+
+const struct SpriteTemplate gUnknown_085CE7D4 =
+{
+ .tileTag = ANIM_TAG_NOISE_LINE,
+ .paletteTag = ANIM_TAG_NOISE_LINE,
+ .oam = &gUnknown_08524914,
+ .anims = gUnknown_085CE7CC,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_815E01C,
+};
+
+const struct SpriteTemplate gUnknown_085CE7EC =
+{
+ .tileTag = ANIM_TAG_SMALL_RED_EYE,
+ .paletteTag = ANIM_TAG_SMALL_RED_EYE,
+ .oam = &gUnknown_08524904,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_815E404,
+};
+
+const struct SpriteTemplate gUnknown_085CE804 =
+{
+ .tileTag = ANIM_TAG_PAW_PRINT,
+ .paletteTag = ANIM_TAG_PAW_PRINT,
+ .oam = &gUnknown_08524914,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_815E444,
+};
+
+const union AffineAnimCmd gUnknown_085CE81C[] =
+{
+ AFFINEANIMCMD_FRAME(0, 0, -4, 24),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gUnknown_085CE82C[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, -64, 0),
+ AFFINEANIMCMD_FRAME(0, 0, 4, 24),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gUnknown_085CE844[] =
+{
+ gUnknown_085CE81C,
+ gUnknown_085CE82C,
+};
+
+const struct SpriteTemplate gUnknown_085CE84C =
+{
+ .tileTag = ANIM_TAG_RED_BALL,
+ .paletteTag = ANIM_TAG_RED_BALL,
+ .oam = &gUnknown_08524974,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_085CE844,
+ .callback = SpriteCallbackDummy,
+};
+
+const struct SpriteTemplate gUnknown_085CE864 =
+{
+ .tileTag = ANIM_TAG_TAG_HAND,
+ .paletteTag = ANIM_TAG_TAG_HAND,
+ .oam = &gUnknown_08524914,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_815E6D8,
+};
+
+const union AffineAnimCmd gUnknown_085CE87C[] =
+{
+ AFFINEANIMCMD_FRAME(0, -16, 0, 6),
+ AFFINEANIMCMD_FRAME(0, 16, 0, 6),
+ AFFINEANIMCMD_END,
+};
+
+const struct SpriteTemplate gUnknown_085CE894 =
+{
+ .tileTag = ANIM_TAG_SMELLINGSALT_EFFECT,
+ .paletteTag = ANIM_TAG_SMELLINGSALT_EFFECT,
+ .oam = &gUnknown_08524914,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_815E954,
+};
+
+const struct SpriteTemplate gUnknown_085CE8AC =
+{
+ .tileTag = ANIM_TAG_TAG_HAND,
+ .paletteTag = ANIM_TAG_TAG_HAND,
+ .oam = &gUnknown_08524914,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_815EA14,
+};
+
+const struct SpriteTemplate gUnknown_085CE8C4 =
+{
+ .tileTag = ANIM_TAG_MAGNIFYING_GLASS,
+ .paletteTag = ANIM_TAG_MAGNIFYING_GLASS,
+ .oam = &gUnknown_08524A34,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_815EE84,
+};
+
+const struct SpriteTemplate gUnknown_085CE8DC =
+{
+ .tileTag = ANIM_TAG_GOLD_STARS,
+ .paletteTag = ANIM_TAG_GOLD_STARS,
+ .oam = &gUnknown_0852490C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_815F18C,
+};
+
+const struct SpriteTemplate gUnknown_085CE8F4 =
+{
+ .tileTag = ANIM_TAG_GOLD_STARS,
+ .paletteTag = ANIM_TAG_GOLD_STARS,
+ .oam = &gUnknown_0852490C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_81061C4,
+};
+
+const struct SpriteTemplate gUnknown_085CE90C =
+{
+ .tileTag = ANIM_TAG_X_SIGN,
+ .paletteTag = ANIM_TAG_X_SIGN,
+ .oam = &gUnknown_0852491C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_815F48C,
+};
+
+const struct SpriteTemplate gUnknown_085CE924 =
+{
+ .tileTag = ANIM_TAG_ITEM_BAG,
+ .paletteTag = ANIM_TAG_ITEM_BAG,
+ .oam = &gUnknown_08524914,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_815FE80,
+};
+
+const union AnimCmd gUnknown_085CE93C[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(64, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_085CE948[] =
+{
+ gUnknown_085CE93C,
+};
+
+const union AffineAnimCmd gUnknown_085CE94C[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0, 0, -4, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gUnknown_085CE964[] =
+{
+ AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0, 0, 4, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gUnknown_085CE97C[] =
+{
+ gUnknown_085CE94C,
+ gUnknown_085CE964,
+};
+
+const struct SpriteTemplate gUnknown_085CE984 =
+{
+ .tileTag = ANIM_TAG_SLAM_HIT_2,
+ .paletteTag = ANIM_TAG_SLAM_HIT_2,
+ .oam = &gUnknown_0852497C,
+ .anims = gUnknown_085CE948,
+ .images = NULL,
+ .affineAnims = gUnknown_085CE97C,
+ .callback = sub_8160338,
+};
+
+const union AffineAnimCmd gUnknown_085CE99C[] =
+{
+ AFFINEANIMCMD_FRAME(0, 0, -4, 64),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gUnknown_085CE9AC[] =
+{
+ gUnknown_085CE99C,
+};
+
+const struct SpriteTemplate gUnknown_085CE9B0 =
+{
+ .tileTag = ANIM_TAG_RECYCLE,
+ .paletteTag = ANIM_TAG_RECYCLE,
+ .oam = &gUnknown_08524A9C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_085CE9AC,
+ .callback = sub_81603A8,
+};
+
+const union AffineAnimCmd gUnknown_085CE9C8[] =
+{
+ AFFINEANIMCMD_FRAME(0, 16, 0, 4),
+ AFFINEANIMCMD_FRAME(-2, 0, 0, 8),
+ AFFINEANIMCMD_FRAME(0, 4, 0, 4),
+ AFFINEANIMCMD_FRAME(0, 0, 0, 24),
+ AFFINEANIMCMD_FRAME(1, -5, 0, 16),
+ AFFINEANIMCMD_END,
+};
+
+void sub_815A0D4(struct Sprite *sprite)
+{
+ sprite->pos1.x += gBattleAnimArgs[0];
+ sprite->pos1.y += gBattleAnimArgs[1];
+
+ if (!gBattleAnimArgs[3])
+ sprite->data[0] = gBattleAnimArgs[2];
+ else
+ sprite->data[0] = -gBattleAnimArgs[2];
+
+ sprite->data[1] = gBattleAnimArgs[4];
+ sprite->callback = sub_815A114;
+}
+
+static void sub_815A114(struct Sprite *sprite)
+{
+ if (sprite->data[1] > 0)
+ {
+ sprite->pos2.x = sprite->data[2] >> 8;
+ sprite->data[2] += sprite->data[0];
+ sprite->invisible ^= 1;
+ sprite->data[1]--;
+ }
+ else
+ {
+ DestroyAnimSprite(sprite);
+ }
+}
+
+void sub_815A160(u8 taskId)
+{
+ sub_807521C(
+ GetBattlerSpriteCoord(gBattleAnimTarget, 2) + 8,
+ GetBattlerSpriteCoord(gBattleAnimTarget, 3) + 8,
+ 0);
+ DestroyAnimVisualTask(taskId);
+}
+
+void sub_815A1B0(struct Sprite *sprite)
+{
+ sprite->data[0] = 90;
+ sprite->callback = WaitAnimForDuration;
+ sprite->data[1] = 7;
+ StoreSpriteCallbackInData6(sprite, sub_815A1F4);
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[1], 16 - sprite->data[1]));
+}
+
+static void sub_815A1F4(struct Sprite *sprite)
+{
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[1], 16 - sprite->data[1]));
+ if (--sprite->data[1] < 0)
+ {
+ sprite->invisible = 1;
+ sprite->callback = sub_815A234;
+ }
+}
+
+static void sub_815A234(struct Sprite *sprite)
+{
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ DestroyAnimSprite(sprite);
+}
+
+void sub_815A254(struct Sprite *sprite)
+{
+ u16 rotation;
+ u8 x = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ u8 y = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+
+ sub_80A6980(sprite, TRUE);
+
+ rotation = ArcTan2Neg(sprite->pos1.x - x, sprite->pos1.y - y);
+ rotation += 0x6000;
+ if (IsContest())
+ rotation += 0x4000;
+
+ TrySetSpriteRotScale(sprite, FALSE, 0x100, 0x100, rotation);
+
+ sprite->data[0] = gBattleAnimArgs[2];
+ sprite->data[2] = x;
+ sprite->data[4] = y;
+ sprite->callback = StartAnimLinearTranslation;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+}
+
+void sub_815A2F0(struct Sprite *sprite)
+{
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16));
+ sprite->data[0] = 4;
+ sprite->callback = sub_815A31C;
+}
+
+static void sub_815A31C(struct Sprite *sprite)
+{
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[0], 16 - sprite->data[0]));
+
+ if (sprite->data[1])
+ sprite->data[0]--;
+ else
+ sprite->data[0]++;
+
+ if (sprite->data[0] == 15 || sprite->data[0] == 4)
+ sprite->data[1] ^= 1;
+
+ if (sprite->data[2]++ > 70)
+ {
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ StartSpriteAffineAnim(sprite, 1);
+ sprite->data[2] = 0;
+ sprite->invisible = 1;
+ sprite->affineAnimPaused = 1;
+ sprite->callback = sub_815A3AC;
+ }
+}
+
+static void sub_815A3AC(struct Sprite *sprite)
+{
+ if (sprite->data[2]++ > 9)
+ {
+ sprite->invisible = 0;
+ sprite->affineAnimPaused = 0;
+ if (sprite->affineAnimEnded)
+ sprite->callback = sub_815A3F0;
+ }
+}
+
+static void sub_815A3F0(struct Sprite *sprite)
+{
+ switch (sprite->data[3])
+ {
+ case 0:
+ case 1:
+ sprite->pos2.x = 1;
+ sprite->pos2.y = 0;
+ break;
+ case 2:
+ case 3:
+ sprite->pos2.x = -1;
+ sprite->pos2.y = 0;
+ break;
+ case 4:
+ case 5:
+ sprite->pos2.x = 0;
+ sprite->pos2.y = 1;
+ break;
+ case 6:
+ default:
+ sprite->pos2.x = 0;
+ sprite->pos2.y = -1;
+ break;
+ }
+
+ if (++sprite->data[3] > 7)
+ sprite->data[3] = 0;
+
+ if (sprite->data[4]++ > 15)
+ {
+ sprite->data[0] = 16;
+ sprite->data[1] = 0;
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[0], 0));
+ sprite->callback = sub_815A49C;
+ }
+}
+
+static void sub_815A49C(struct Sprite *sprite)
+{
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[0], 16 - sprite->data[0]));
+
+ if (sprite->data[1]++ > 1)
+ {
+ sprite->data[0]--;
+ sprite->data[1] = 0;
+ }
+
+ if (sprite->data[0] == 0)
+ sprite->invisible = 1;
+
+ if (sprite->data[0] < 0)
+ {
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ DestroyAnimSprite(sprite);
+ }
+}
+
+void sub_815A504(u8 taskId)
+{
+ gTasks[taskId].func = sub_815A52C;
+ gAnimVisualTaskCount--;
+}
+
+static void sub_815A52C(u8 taskId)
+{
+ int i;
+ u16 lastColor;
+ u8 paletteIndex = sub_80A6D94();
+
+ if (++gTasks[taskId].data[5] == 4)
+ {
+ lastColor = gPlttBufferFaded[paletteIndex * 16 + 11];
+ for (i = 10; i > 0; i--)
+ gPlttBufferFaded[paletteIndex * 16 + i + 1] = gPlttBufferFaded[paletteIndex * 16 + i];
+
+ gPlttBufferFaded[paletteIndex * 16 + 1] = lastColor;
+ gTasks[taskId].data[5] = 0;
+ }
+
+ if ((u16)gBattleAnimArgs[7] == 0xFFFF)
+ DestroyTask(taskId);
+}
+
+void sub_815A5C8(u8 taskId)
+{
+ gTasks[taskId].func = sub_815A5F0;
+ gAnimVisualTaskCount--;
+}
+
+static void sub_815A5F0(u8 taskId)
+{
+ int i;
+ u16 lastColor;
+ u8 paletteIndex = sub_80A6D94();
+
+ if (++gTasks[taskId].data[5] == 4)
+ {
+ lastColor = gPlttBufferFaded[paletteIndex * 16 + 11];
+ for (i = 10; i > 0; i--)
+ gPlttBufferFaded[paletteIndex * 16 + i + 1] = gPlttBufferFaded[paletteIndex * 16 + i];
+ gPlttBufferFaded[paletteIndex * 16 + 1] = lastColor;
+
+ lastColor = gPlttBufferUnfaded[paletteIndex * 16 + 11];
+ for (i = 10; i > 0; i--)
+ gPlttBufferUnfaded[paletteIndex * 16 + i + 1] = gPlttBufferUnfaded[paletteIndex * 16 + i];
+ gPlttBufferUnfaded[paletteIndex * 16 + 1] = lastColor;
+
+ gTasks[taskId].data[5] = 0;
+ }
+
+ if ((u16)gBattleAnimArgs[7] == 0xFFFF)
+ DestroyTask(taskId);
+}
+
+void sub_815A6C4(struct Sprite *sprite)
+{
+ u16 x;
+ u16 y;
+
+ InitAnimSpritePos(sprite, TRUE);
+ SetAverageBattlerPositions(gBattleAnimTarget, FALSE, &x, &y);
+
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ gBattleAnimArgs[2] = -gBattleAnimArgs[2];
+
+ sprite->data[0] = gBattleAnimArgs[4];
+ sprite->data[2] = x + gBattleAnimArgs[2];
+ sprite->data[4] = y + gBattleAnimArgs[3];
+ sprite->data[5] = -50;
+
+ InitAnimArcTranslation(sprite);
+ sprite->callback = sub_815A73C;
+}
+
+static void sub_815A73C(struct Sprite *sprite)
+{
+ if (TranslateAnimArc(sprite))
+ {
+ sprite->data[0] = 30;
+ sprite->data[1] = 0;
+ sprite->callback = WaitAnimForDuration;
+ StoreSpriteCallbackInData6(sprite, sub_815A76C);
+ }
+}
+
+static void sub_815A76C(struct Sprite *sprite)
+{
+ if (sprite->data[1] & 1)
+ sprite->invisible ^= 1;
+
+ if (++sprite->data[1] == 16)
+ DestroyAnimSprite(sprite);
+}
+
+void sub_815A7B0(struct Sprite *sprite)
+{
+ SetSpriteCoordsToAnimAttackerCoords(sprite);
+ sub_80A6864(sprite, gBattleAnimArgs[0]);
+ sprite->pos1.y += gBattleAnimArgs[1];
+ sprite->callback = RunStoredCallbackWhenAnimEnds;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+}
+
+// This is likely fakematching due to some strange type casting behavior.
+void sub_815A7EC(struct Sprite *sprite)
+{
+ int var0;
+ int var1;
+ if (sprite->data[0] == 0)
+ {
+ SetSpriteCoordsToAnimAttackerCoords(sprite);
+ sub_80A6864(sprite, gBattleAnimArgs[0]);
+ if (!IsContest())
+ {
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
+ {
+ sprite->data[1] = gBattleAnimArgs[2];
+ sprite->data[2] = gBattleAnimArgs[3];
+ }
+ else
+ {
+ var1 = -gBattleAnimArgs[2];
+ sprite->data[1] = var1;
+ var1 = -gBattleAnimArgs[3];
+ sprite->data[2] = var1;
+ }
+ }
+ else
+ {
+ var1 = -gBattleAnimArgs[2];
+ sprite->data[1] = var1;
+ sprite->data[2] = gBattleAnimArgs[3];
+ }
+ }
+
+ sprite->data[0]++;
+ var0 = (sprite->data[0] * 20) & 0xFF;
+ sprite->data[3] += sprite->data[1];
+ sprite->data[4] += sprite->data[2];
+ sprite->pos2.x = (sprite->data[3] + (s32)((u32)sprite->data[3] >> 31)) >> 1;
+ sprite->pos2.y = Sin(var0 & 0xFF, 5) + ((s32)(sprite->data[4] + ((u32)sprite->data[4] >> 31)) >> 1);
+
+ if ((u16)(sprite->pos1.x + sprite->pos2.x) > 240)
+ DestroyAnimSprite(sprite);
+}
+
+void sub_815A8AC(struct Sprite *sprite)
+{
+ if (sprite->animEnded)
+ DestroyAnimSprite(sprite);
+}
+
+void AnimTask_IsTargetPlayerSide(u8 taskId)
+{
+ if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_OPPONENT)
+ gBattleAnimArgs[7] = 0;
+ else
+ gBattleAnimArgs[7] = 1;
+
+ DestroyAnimVisualTask(taskId);
+}
+
+void AnimTask_IsHealingMove(u8 taskId)
+{
+ if (gAnimMoveDmg > 0)
+ gBattleAnimArgs[7] = 0;
+ else
+ gBattleAnimArgs[7] = 1;
+
+ DestroyAnimVisualTask(taskId);
+}
+
+void sub_815A934(struct Sprite *sprite)
+{
+ SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ);
+ SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJWIN_ON);
+ gBattle_WIN0H = 0;
+ gBattle_WIN0V = 0;
+ SetGpuReg(REG_OFFSET_WIN0H, gBattle_WIN0H);
+ SetGpuReg(REG_OFFSET_WIN0V, gBattle_WIN0V);
+
+ sub_80A6980(sprite, FALSE);
+
+ sprite->oam.objMode = ST_OAM_OBJ_WINDOW;
+ sprite->invisible = 1;
+ sprite->callback = sub_815A9A0;
+}
+
+static void sub_815A9A0(struct Sprite *sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ sprite->invisible = 0;
+ if (sprite->affineAnimEnded)
+ sprite->data[0]++;
+ break;
+ case 1:
+ case 3:
+ sprite->data[1] += 117;
+ sprite->pos2.x = sprite->data[1] >> 8;
+ if (++sprite->data[2] == 21)
+ {
+ sprite->data[2] = 0;
+ sprite->data[0]++;
+ }
+ break;
+ case 2:
+ sprite->data[1] -= 117;
+ sprite->pos2.x = sprite->data[1] >> 8;
+ if (++sprite->data[2] == 41)
+ {
+ sprite->data[2] = 0;
+ sprite->data[0]++;
+ }
+ break;
+ case 4:
+ ChangeSpriteAffineAnim(sprite, 1);
+ sprite->data[0]++;
+ break;
+ case 5:
+ if (sprite->affineAnimEnded)
+ {
+ sprite->invisible = 1;
+ sprite->callback = sub_815AA6C;
+ }
+ break;
+ }
+}
+
+static void sub_815AA6C(struct Sprite *sprite)
+{
+ SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR);
+ SetGpuReg(REG_OFFSET_DISPCNT, GetGpuReg(REG_OFFSET_DISPCNT) ^ DISPCNT_OBJWIN_ON);
+ DestroyAnimSprite(sprite);
+}
+
+void sub_815AAA4(struct Sprite *sprite)
+{
+ if (gBattleAnimArgs[3] == 0)
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1);
+ }
+
+ sprite->pos1.x += gBattleAnimArgs[0];
+ sprite->pos1.y += gBattleAnimArgs[1];
+ sprite->oam.tileNum += 16;
+
+ if (gBattleAnimArgs[2] == 0)
+ {
+ sprite->oam.matrixNum = 8;
+ sprite->pos2.x = -12;
+ sprite->data[1] = 2;
+ }
+ else
+ {
+ sprite->pos2.x = 12;
+ sprite->data[1] = -2;
+ }
+
+ sprite->data[0] = gBattleAnimArgs[4];
+
+ if (sprite->data[3] != 255)
+ sprite->data[3] = gBattleAnimArgs[2];
+
+ sprite->callback = sub_815AB5C;
+}
+
+static void sub_815AB5C(struct Sprite *sprite)
+{
+ if (sprite->data[2] == 0)
+ {
+ sprite->pos2.x += sprite->data[1];
+ if (sprite->pos2.x == 0)
+ {
+ sprite->data[2]++;
+ if (sprite->data[3] == 0)
+ {
+ PlaySE1WithPanning(SE_W227, BattleAnimAdjustPanning(-64));
+ }
+ }
+ }
+ else
+ {
+ sprite->pos2.x -= sprite->data[1];
+ if (abs(sprite->pos2.x) == 12)
+ {
+ sprite->data[0]--;
+ sprite->data[2]--;
+ }
+
+ }
+
+ if (sprite->data[0] == 0)
+ DestroyAnimSprite(sprite);
+}
+
+void sub_815ABD0(struct Sprite *sprite)
+{
+ sprite->oam.objMode = ST_OAM_OBJ_WINDOW;
+ sprite->data[3] = 255;
+ sub_815AAA4(sprite);
+}
+
+void sub_815ABEC(u8 taskId)
+{
+ if (IsContest())
+ {
+ SetGpuReg(REG_OFFSET_WININ, 0x1F3F);
+ gBattle_WIN1H = 0x98F0;
+ gBattle_WIN1V = 0x00A0;
+ SetGpuReg(REG_OFFSET_WIN1H, gBattle_WIN0H);
+ SetGpuReg(REG_OFFSET_WIN1V, gBattle_WIN0V);
+ }
+ else
+ {
+ SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ);
+ gBattle_WIN1H = 0x00F0;
+ gBattle_WIN1V = 0x78A0;
+ SetGpuReg(REG_OFFSET_WIN1H, 0x00F0);
+ SetGpuReg(REG_OFFSET_WIN1V, gBattle_WIN1V);
+ SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN1_ON);
+ }
+
+ DestroyAnimVisualTask(taskId);
+}
+
+void sub_815AC8C(u8 taskId)
+{
+ SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR);
+ gBattle_WIN1H = 0;
+ gBattle_WIN1V = 0;
+ if (!IsContest())
+ ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN1_ON);
+
+ DestroyAnimVisualTask(taskId);
+}
+
+void sub_815ACD0(struct Sprite *sprite)
+{
+ int var0;
+ if (gBattleAnimArgs[0] == 0)
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0) + gBattleAnimArgs[1];
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1);
+ }
+ else
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 0) + gBattleAnimArgs[1];
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 1);
+ }
+
+ sprite->pos2.y = gBattleAnimArgs[2];
+ var0 = 0;
+ if (sprite->pos2.y > gBattleAnimArgs[3])
+ var0 = 1;
+
+ sprite->data[0] = var0;
+ sprite->data[1] = 0;
+ sprite->data[2] = gBattleAnimArgs[4];
+ sprite->data[3] = gBattleAnimArgs[5];
+ sprite->data[4] = gBattleAnimArgs[3];
+ sprite->callback = sub_815AD4C;
+}
+
+static void sub_815AD4C(struct Sprite *sprite)
+{
+ sprite->data[1] = (sprite->data[1] + sprite->data[2]) & 0xFF;
+ sprite->pos2.x = gSineTable[sprite->data[1]] >> 4;
+ sprite->pos2.y += sprite->data[3];
+
+ if (sprite->data[0])
+ {
+ if (sprite->pos2.y < sprite->data[4])
+ DestroyAnimSprite(sprite);
+ }
+ else
+ {
+ if (sprite->pos2.y > sprite->data[4])
+ DestroyAnimSprite(sprite);
+ }
+}
+
+void sub_815ADB0(u8 taskId)
+{
+ s16 var0;
+ u8 toBG2;
+ s16 var2;
+ int var3;
+ int var4;
+ s16 i;
+ struct ScanlineEffectParams scanlineParams;
+ struct Task *task = &gTasks[taskId];
+
+ if (!gBattleAnimArgs[0])
+ {
+ var0 = GetBattlerYCoordWithElevation(gBattleAnimAttacker);
+ toBG2 = sub_80A8364(gBattleAnimAttacker);
+ }
+ else
+ {
+ var0 = GetBattlerYCoordWithElevation(gBattleAnimTarget);
+ toBG2 = sub_80A8364(gBattleAnimTarget);
+ }
+
+ task->data[0] = var0 + 36;
+ task->data[1] = task->data[0];
+ task->data[2] = var0 - 33;
+ if (task->data[2] < 0)
+ task->data[2] = 0;
+
+ task->data[3] = task->data[0];
+ task->data[4] = 8;
+ task->data[5] = gBattleAnimArgs[1];
+ task->data[6] = 0;
+ task->data[7] = 0;
+
+ if (toBG2 == 1)
+ {
+ var3 = gBattle_BG1_X;
+ task->data[8] = var3;
+ var4 = var3 + 240;
+ }
+ else
+ {
+ var3 = gBattle_BG2_X;
+ task->data[8] = var3;
+ var4 = var3 + 240;
+ }
+
+ task->data[9] = var4;
+ task->data[10] = gBattleAnimArgs[2];
+
+ if (!gBattleAnimArgs[2])
+ {
+ task->data[11] = var4;
+ var2 = task->data[8];
+ }
+ else
+ {
+ task->data[11] = var3;
+ var2 = task->data[9];
+ }
+
+ task->data[15] = 0;
+
+ i = task->data[2];
+ while (i <= task->data[3])
+ {
+ gScanlineEffectRegBuffers[0][i] = var2;
+ gScanlineEffectRegBuffers[1][i] = var2;
+ i++;
+ }
+
+ if (toBG2 == 1)
+ scanlineParams.dmaDest = &REG_BG1HOFS;
+ else
+ scanlineParams.dmaDest = &REG_BG2HOFS;
+
+ scanlineParams.dmaControl = SCANLINE_EFFECT_DMACNT_16BIT;
+ scanlineParams.initState = 1;
+ scanlineParams.unused9 = 0;
+ ScanlineEffect_SetParams(scanlineParams);
+
+ task->func = sub_815AED8;
+}
+
+static void sub_815AED8(u8 taskId)
+{
+ s16 i;
+ struct Task *task = &gTasks[taskId];
+
+ task->data[0] -= task->data[5];
+ if (task->data[0] < task->data[2])
+ task->data[0] = task->data[2];
+
+ if (task->data[4] == 0)
+ {
+ task->data[1] -= task->data[5];
+ if (task->data[1] < task->data[2])
+ {
+ task->data[1] = task->data[2];
+ task->data[15] = 1;
+ }
+ }
+ else
+ {
+ task->data[4]--;
+ }
+
+ if (++task->data[6] > 1)
+ {
+ task->data[6] = 0;
+ task->data[7] = task->data[7] == 0 ? 1 : 0;
+
+ if (task->data[7])
+ task->data[12] = task->data[8];
+ else
+ task->data[12] = task->data[9];
+ }
+
+ i = task->data[0];
+ while (i < task->data[1])
+ {
+ gScanlineEffectRegBuffers[0][i] = task->data[12];
+ gScanlineEffectRegBuffers[1][i] = task->data[12];
+ i++;
+ }
+
+ i = task->data[1];
+ while (i <= task->data[3])
+ {
+ gScanlineEffectRegBuffers[0][i] = task->data[11];
+ gScanlineEffectRegBuffers[1][i] = task->data[11];
+ i++;
+ }
+
+ if (task->data[15])
+ {
+ if (task->data[10])
+ gScanlineEffect.state = 3;
+
+ DestroyAnimVisualTask(taskId);
+ }
+}
+
+void sub_815AFF0(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ task->data[0] = 0;
+ task->data[1] = 0;
+ task->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
+ task->data[3] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ task->data[4] = 32;
+ task->data[5] = -20;
+ task->data[6] = 0;
+ task->data[15] = GetAnimBattlerSpriteId(ANIM_ATTACKER);
+ task->func = sub_815B054;
+}
+
+static void sub_815B054(u8 taskId)
+{
+ int var0, var1;
+ s16 x, y;
+ u16 i, j;
+ u8 spriteId;
+ struct Task *task = &gTasks[taskId];
+
+ switch (task->data[0])
+ {
+ case 0:
+ var0 = task->data[2];
+ if (task->data[1] & 1)
+ {
+ var1 = task->data[4];
+ x = var0 - var1;
+ }
+ else
+ {
+ var1 = task->data[4];
+ x = var0 + var1;
+ }
+
+ y = task->data[3] + task->data[5];
+ spriteId = CreateSprite(&gUnknown_08593114, x, y, 6 - task->data[1]);
+ PlaySE12WithPanning(SE_W118, BattleAnimAdjustPanning(-64));
+
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].hFlip = task->data[1] & 1;
+ gSprites[spriteId].callback = SpriteCallbackDummy;
+ }
+
+ if (task->data[1] & 1)
+ {
+ task->data[4] -= 6;
+ task->data[5] -= 6;
+ }
+
+ PrepareAffineAnimInTaskData(task, task->data[15], gUnknown_085CE2A0);
+ task->data[1]++;
+ task->data[0] = 1;
+ break;
+ case 1:
+ if (!RunAffineAnimFromTaskData(task))
+ {
+ if (task->data[1] == 6)
+ {
+ task->data[6] = 8;
+ task->data[0] = 3;
+ }
+ else
+ {
+ if (task->data[1] <= 2)
+ task->data[6] = 10;
+ else
+ task->data[6] = 0;
+
+ task->data[0] = 2;
+ }
+ }
+ break;
+ case 2:
+ if (task->data[6] != 0)
+ task->data[6]--;
+ else
+ task->data[0] = 0;
+ break;
+ case 3:
+ if (task->data[6] != 0)
+ task->data[6]--;
+ else
+ task->data[0] = 4;
+ break;
+ case 4:
+ for (i = 0, j = 0; i < MAX_SPRITES; i++)
+ {
+ if (gSprites[i].template == &gUnknown_08593114)
+ {
+ gSprites[i].data[0] = taskId;
+ gSprites[i].data[1] = 6;
+ StartSpriteAnim(&gSprites[i], 2);
+ gSprites[i].callback = sub_815B23C;
+
+ if (++j == 6)
+ break;
+ }
+ }
+
+ task->data[6] = j;
+ task->data[0] = 5;
+ break;
+ case 5:
+ if (task->data[6] == 0)
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+static void sub_815B23C(struct Sprite *sprite)
+{
+ if (sprite->animEnded)
+ {
+ gTasks[sprite->data[0]].data[sprite->data[1]]--;
+ DestroySprite(sprite);
+ }
+}
+
+void sub_815B27C(struct Sprite *sprite)
+{
+ if (sprite->data[0] == 0)
+ InitAnimSpritePos(sprite, FALSE);
+
+ if (++sprite->data[0] < 40)
+ {
+ u16 var = sprite->data[0];
+ if ((var & 1) == 0)
+ sprite->invisible = 1;
+ else
+ sprite->invisible = 0;
+ }
+
+ if (sprite->data[0] > 30)
+ sprite->invisible = 0;
+
+ if (sprite->data[0] == 61)
+ {
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->pos2.x = 0;
+ sprite->pos2.y = 0;
+ sprite->data[0] = 20;
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ sprite->callback = StartAnimLinearTranslation;
+ }
+}
+
+void sub_815B338(u8 taskId)
+{
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ PrepareAffineAnimInTaskData(&gTasks[taskId], GetAnimBattlerSpriteId(ANIM_ATTACKER), gUnknown_085CE350);
+ gTasks[taskId].data[0]++;
+ break;
+ case 1:
+ if (!RunAffineAnimFromTaskData(&gTasks[taskId]))
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+void sub_815B394(struct Sprite *sprite)
+{
+ u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
+
+ switch (sprite->data[0])
+ {
+ case 0:
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_NORMAL);
+ sprite->data[1] = 256;
+ sprite->data[2] = 256;
+ sprite->data[0]++;
+ break;
+ case 1:
+ sprite->data[1] += 96;
+ sprite->data[2] -= 26;
+ SetSpriteRotScale(spriteId, sprite->data[1], sprite->data[2], 0);
+
+ if (++sprite->data[3] == 5)
+ sprite->data[0]++;
+ // fall through
+ case 2:
+ sprite->data[1] += 96;
+ sprite->data[2] += 48;
+ SetSpriteRotScale(spriteId, sprite->data[1], sprite->data[2], 0);
+
+ if (++sprite->data[3] == 9)
+ {
+ sprite->data[3] = 0;
+ gSprites[spriteId].invisible = 1;
+ ResetSpriteRotScale(spriteId);
+ sprite->data[0]++;
+ }
+ break;
+ case 3:
+ sprite->pos2.y -= 6;
+ if (sprite->pos1.y + sprite->pos2.y < -32)
+ DestroyAnimSprite(sprite);
+ break;
+ }
+}
+
+void sub_815B49C(struct Sprite *sprite)
+{
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ sprite->pos1.x = -16;
+ else
+ sprite->pos1.x = 256;
+
+ sprite->pos1.y = 0;
+ sprite->callback = sub_815B4D4;
+}
+
+static void sub_815B4D4(struct Sprite *sprite)
+{
+ u32 newX;
+
+ sprite->data[0] += 72;
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ sprite->pos2.x = sprite->data[0] >> 4;
+ else
+ sprite->pos2.x = -(sprite->data[0] >> 4);
+
+ sprite->data[1] += 16;
+ sprite->pos2.y += sprite->data[1] >> 8;
+
+ if (++sprite->data[2] % 3 == 0)
+ {
+ CreateSpriteAndAnimate(
+ &gUnknown_085CE3A0,
+ sprite->pos1.x + sprite->pos2.x,
+ sprite->pos1.y + sprite->pos2.y,
+ sprite->subpriority + 1);
+ }
+
+ newX = sprite->pos1.x + sprite->pos2.x + 32;
+ if (newX > 304)
+ DestroyAnimSprite(sprite);
+}
+
+void sub_815B570(struct Sprite *sprite)
+{
+ u8 rand;
+ s8 y;
+
+ rand = Random2() & 3;
+ if (rand == 0)
+ sprite->oam.tileNum += 4;
+ else
+ sprite->oam.tileNum += 5;
+
+ y = Random2() & 7;
+ if (y > 3)
+ y = -y;
+
+ sprite->pos2.y = y;
+ sprite->callback = sub_815B5D0;
+}
+
+static void sub_815B5D0(struct Sprite *sprite)
+{
+ if (++sprite->data[0] < 30)
+ {
+ if (++sprite->data[1] == 2)
+ {
+ sprite->invisible ^= 1;
+ sprite->data[1] = 0;
+ }
+ }
+ else
+ {
+ if (sprite->data[1] == 2)
+ sprite->invisible = 0;
+
+ if (sprite->data[1] == 3)
+ {
+ sprite->invisible = 1;
+ sprite->data[1] = -1;
+ }
+
+ sprite->data[1]++;
+ }
+
+ if (sprite->data[0] > 60)
+ DestroySprite(sprite);
+}
+
+void sub_815B65C(u8 taskId)
+{
+ if (!gTasks[taskId].data[0])
+ {
+ PrepareAffineAnimInTaskData(&gTasks[taskId], GetAnimBattlerSpriteId(ANIM_ATTACKER), gUnknown_085CE3B8);
+ gTasks[taskId].data[0]++;
+ }
+ else
+ {
+ if (!RunAffineAnimFromTaskData(&gTasks[taskId]))
+ DestroyAnimVisualTask(taskId);
+ }
+}
+
+void sub_815B6B4(u8 taskId)
+{
+ if (!gTasks[taskId].data[0])
+ {
+ PrepareAffineAnimInTaskData(&gTasks[taskId], GetAnimBattlerSpriteId(ANIM_ATTACKER), gUnknown_085CE3E0);
+ gTasks[taskId].data[0]++;
+ }
+ else
+ {
+ if (!RunAffineAnimFromTaskData(&gTasks[taskId]))
+ DestroyAnimVisualTask(taskId);
+ }
+}
+
+void sub_815B70C(struct Sprite *sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ InitAnimSpritePos(sprite, FALSE);
+ sprite->data[1] = 0x900;
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ sprite->data[0]++;
+ break;
+ case 1:
+ sprite->pos2.y -= sprite->data[1] >> 8;
+ sprite->data[1] -= 96;
+ if (sprite->pos1.y + sprite->pos2.y > sprite->data[2])
+ DestroyAnimSprite(sprite);
+ break;
+ }
+}
+
+void sub_815B778(u8 taskId)
+{
+ if (!gTasks[taskId].data[0])
+ {
+ PrepareAffineAnimInTaskData(&gTasks[taskId], GetAnimBattlerSpriteId(ANIM_ATTACKER), gUnknown_085CE430);
+ gTasks[taskId].data[0]++;
+ }
+ else
+ {
+ if (!RunAffineAnimFromTaskData(&gTasks[taskId]))
+ DestroyAnimVisualTask(taskId);
+ }
+}
+
+void sub_815B7D0(u8 taskId)
+{
+ int i, j;
+ u8 position;
+ struct UnknownAnimStruct2 unknownStruct;
+ u8 *dest;
+ u8 *src;
+ u16 *unk4;
+ u16 stretch;
+
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ SetGpuReg(REG_OFFSET_MOSAIC, 0);
+ if (sub_80A8364(gBattleAnimAttacker) == 1)
+ SetAnimBgAttribute(1, BG_ANIM_MOSAIC, 1);
+ else
+ SetAnimBgAttribute(2, BG_ANIM_MOSAIC, 1);
+
+ gTasks[taskId].data[10] = gBattleAnimArgs[0];
+ gTasks[taskId].data[0]++;
+ break;
+ case 1:
+ if (gTasks[taskId].data[2]++ > 1)
+ {
+ gTasks[taskId].data[2] = 0;
+ gTasks[taskId].data[1]++;
+ stretch = gTasks[taskId].data[1];
+ SetGpuReg(REG_OFFSET_MOSAIC, (stretch << 4) | stretch);
+ if (stretch == 15)
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 2:
+ HandleSpeciesGfxDataChange(gBattleAnimAttacker, gBattleAnimTarget, gTasks[taskId].data[10]);
+ sub_80A6BFC(&unknownStruct, gBattleAnimAttacker);
+
+ if (IsContest())
+ position = 0;
+ else
+ position = GetBattlerPosition(gBattleAnimAttacker);
+
+ src = gMonSpritesGfxPtr->sprites[position] + (gBattleMonForms[gBattleAnimAttacker] << 11);
+ dest = unknownStruct.bgTiles;
+ CpuCopy32(src, dest, 0x800);
+ LoadBgTiles(1, unknownStruct.bgTiles, 0x800, unknownStruct.tilesOffset);
+ if (IsContest())
+ {
+ if (IsSpeciesNotUnown(gContestResources->field_18->species) != IsSpeciesNotUnown(gContestResources->field_18->unk2))
+ {
+ unk4 = (u16 *)unknownStruct.unk4;
+ for (i = 0; i < 8; i++)
+ {
+ for (j = 0; j < 4; j++)
+ {
+ u16 temp = unk4[j + i * 0x20];
+ unk4[j + i * 0x20] = unk4[(7 - j) + i * 0x20];
+ unk4[(7 - j) + i * 0x20] = temp;
+ }
+ }
+
+ for (i = 0; i < 8; i++)
+ {
+ for (j = 0; j < 8; j++)
+ {
+ unk4[j + i * 0x20] ^= 0x400;
+ }
+ }
+ }
+
+ if (IsSpeciesNotUnown(gContestResources->field_18->unk2))
+ gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].affineAnims = gUnknown_082FF6C0;
+ else
+ gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].affineAnims = gUnknown_082FF694;
+
+ StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[gBattleAnimAttacker]], 0);
+ }
+
+ gTasks[taskId].data[0]++;
+ break;
+ case 3:
+ if (gTasks[taskId].data[2]++ > 1)
+ {
+ gTasks[taskId].data[2] = 0;
+ gTasks[taskId].data[1]--;
+ stretch = gTasks[taskId].data[1];
+ SetGpuReg(REG_OFFSET_MOSAIC, (stretch << 4) | stretch);
+
+ if (stretch == 0)
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 4:
+ SetGpuReg(REG_OFFSET_MOSAIC, 0);
+ if (sub_80A8364(gBattleAnimAttacker) == 1)
+ SetAnimBgAttribute(1, BG_ANIM_MOSAIC, 0);
+ else
+ SetAnimBgAttribute(2, BG_ANIM_MOSAIC, 0);
+
+ if (!IsContest())
+ {
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT)
+ {
+ if (gTasks[taskId].data[10] == 0)
+ SetBattlerShadowSpriteCallback(gBattleAnimAttacker, gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].transformSpecies);
+ }
+ }
+
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+void sub_815BB18(u8 taskId)
+{
+ gBattleAnimArgs[7] = gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].invisible;
+ DestroyAnimVisualTask(taskId);
+}
+
+void sub_815BB58(u8 taskId)
+{
+ HandleSpeciesGfxDataChange(gBattleAnimAttacker, gBattleAnimTarget, TRUE);
+ DestroyAnimVisualTask(taskId);
+}
+
+void sub_815BB84(u8 taskId)
+{
+ struct UnknownAnimStruct2 unknownStruct;
+
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND | BLDCNT_TGT1_BG1);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16));
+ SetAnimBgAttribute(1, BG_ANIM_SCREEN_SIZE, 0);
+ SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1);
+ if (!IsContest())
+ SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 1);
+
+ sub_80A6B30(&unknownStruct);
+ sub_80A6D60(&unknownStruct, &gUnknown_08C2A6EC, 0);
+ if (IsContest())
+ {
+ gBattle_BG1_X = -56;
+ gBattle_BG1_Y = 0;
+ }
+ else
+ {
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ gBattle_BG1_X = -135;
+ else
+ gBattle_BG1_X = -10;
+
+ gBattle_BG1_Y = 0;
+ }
+
+ sub_80A6CC0(unknownStruct.bgId, &gUnknown_08C2A634, unknownStruct.tilesOffset);
+ LoadCompressedPalette(&gUnknown_08C2A6D4, unknownStruct.unk8 << 4, 32);
+
+ gTasks[taskId].data[10] = gBattle_BG1_X;
+ gTasks[taskId].data[11] = gBattle_BG1_Y;
+
+ gTasks[taskId].data[0]++;
+ PlaySE12WithPanning(SE_W234, BattleAnimAdjustPanning(-64));
+ break;
+ case 1:
+ if (gTasks[taskId].data[4]++ > 0)
+ {
+ gTasks[taskId].data[4] = 0;
+ if (++gTasks[taskId].data[1] > 12)
+ gTasks[taskId].data[1] = 12;
+
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[1], 16 - gTasks[taskId].data[1]));
+
+ if (gTasks[taskId].data[1] == 12)
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 2:
+ if (--gTasks[taskId].data[1] < 0)
+ gTasks[taskId].data[1] = 0;
+
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[1], 16 - gTasks[taskId].data[1]));
+
+ if (!gTasks[taskId].data[1])
+ {
+ gBattle_BG1_X = gUnknown_085CE460[gTasks[taskId].data[2]] + gTasks[taskId].data[10];
+ if (++gTasks[taskId].data[2] == 4)
+ gTasks[taskId].data[0] = 4;
+ else
+ gTasks[taskId].data[0] = 3;
+ }
+ break;
+ case 3:
+ if (++gTasks[taskId].data[3] == 4)
+ {
+ gTasks[taskId].data[3] = 0;
+ gTasks[taskId].data[0] = 1;
+ PlaySE12WithPanning(SE_W234, BattleAnimAdjustPanning(-64));
+ }
+ break;
+ case 4:
+ sub_80A6B30(&unknownStruct);
+ sub_80A6C68(unknownStruct.bgId);
+ if (!IsContest())
+ SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 0);
+
+ SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1);
+ gBattle_BG1_X = 0;
+ gBattle_BG1_Y = 0;
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+void sub_815BE04(struct Sprite *sprite)
+{
+ s16 xOffset;
+ u8 spriteId1;
+ u8 spriteId2;
+
+ xOffset = Random2();
+ xOffset &= 0x3F;
+ if (xOffset > 31)
+ xOffset = 32 - xOffset;
+
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0) + xOffset;
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + 32;
+ sprite->data[1] = gBattleAnimArgs[0];
+ sprite->data[2] = gBattleAnimArgs[1];
+
+ spriteId1 = CreateSprite(&gUnknown_085CE48C, sprite->pos1.x, sprite->pos1.y, sprite->subpriority + 1);
+ spriteId2 = CreateSprite(&gUnknown_085CE48C, sprite->pos1.x, sprite->pos1.y, sprite->subpriority + 1);
+ StartSpriteAnim(&gSprites[spriteId1], 1);
+ StartSpriteAnim(&gSprites[spriteId2], 2);
+
+ gSprites[spriteId1].data[1] = gBattleAnimArgs[0];
+ gSprites[spriteId1].data[2] = gBattleAnimArgs[1];
+ gSprites[spriteId2].data[1] = gBattleAnimArgs[0];
+ gSprites[spriteId2].data[2] = gBattleAnimArgs[1];
+ gSprites[spriteId1].data[7] = -1;
+ gSprites[spriteId2].data[7] = -1;
+ gSprites[spriteId1].invisible = 1;
+ gSprites[spriteId2].invisible = 1;
+ gSprites[spriteId1].callback = sub_815C050;
+ gSprites[spriteId2].callback = sub_815C050;
+
+ sprite->data[6] = spriteId1;
+ sprite->data[7] = spriteId2;
+ sprite->callback = sub_815BF44;
+}
+
+static void sub_815BF44(struct Sprite *sprite)
+{
+ int var0;
+ s8 var1;
+
+ var0 = (u16)sprite->data[2] + (u16)sprite->data[3];
+ var1 = var0 >> 8;
+ sprite->pos2.y -= var1;
+ sprite->data[3] = var0 & 0xFF;
+ if (sprite->data[4] == 0 && sprite->pos2.y < -8)
+ {
+ gSprites[sprite->data[6]].invisible = 0;
+ sprite->data[4]++;
+ }
+
+ if (sprite->data[4] == 1 && sprite->pos2.y < -16)
+ {
+ gSprites[sprite->data[7]].invisible = 0;
+ sprite->data[4]++;
+ }
+
+ if (--sprite->data[1] == -1)
+ {
+ sprite->invisible = 1;
+ sprite->callback = sub_815BFF4;
+ }
+}
+
+static void sub_815BFF4(struct Sprite *sprite)
+{
+ if (gSprites[sprite->data[6]].callback == SpriteCallbackDummy
+ && gSprites[sprite->data[7]].callback == SpriteCallbackDummy)
+ {
+ DestroySprite(&gSprites[sprite->data[6]]);
+ DestroySprite(&gSprites[sprite->data[7]]);
+ DestroyAnimSprite(sprite);
+ }
+}
+
+static void sub_815C050(struct Sprite *sprite)
+{
+ u16 d2;
+ register u16 d3 asm("r1");
+ int var0;
+ s8 var1;
+
+ if (!sprite->invisible)
+ {
+ d2 = sprite->data[2];
+ d3 = sprite->data[3];
+ var0 = d2 + d3;
+ var1 = var0 >> 8;
+ sprite->pos2.y -= var1;
+ sprite->data[3] = var0 & 0xFF;
+ if (--sprite->data[1] == -1)
+ {
+ sprite->invisible = 1;
+ sprite->callback = SpriteCallbackDummy;
+ }
+ }
+}
+
+void sub_815C0A4(u8 taskId)
+{
+ struct UnknownAnimStruct2 unknownStruct;
+
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND | BLDCNT_TGT1_BG1);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(3, 13));
+ SetAnimBgAttribute(1, BG_ANIM_SCREEN_SIZE, 0);
+ SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1);
+ if (!IsContest())
+ SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 1);
+
+ sub_80A6B30(&unknownStruct);
+ sub_80A6D60(&unknownStruct, &gUnknown_08C2A6EC, 0);
+ if (IsContest())
+ {
+ gBattle_BG1_X = -56;
+ gBattle_BG1_Y = 0;
+ }
+ else
+ {
+ u8 position = GetBattlerPosition(gBattleAnimTarget);
+ if (IsDoubleBattle() == TRUE)
+ {
+ if (position == B_POSITION_OPPONENT_LEFT)
+ gBattle_BG1_X = -155;
+ if (position == B_POSITION_OPPONENT_RIGHT)
+ gBattle_BG1_X = -115;
+ if (position == B_POSITION_PLAYER_LEFT)
+ gBattle_BG1_X = 14;
+ if (position == B_POSITION_PLAYER_RIGHT)
+ gBattle_BG1_X = -20;
+ }
+ else
+ {
+ if (position == B_POSITION_OPPONENT_LEFT)
+ gBattle_BG1_X = -135;
+ if (position == B_POSITION_PLAYER_LEFT)
+ gBattle_BG1_X = -10;
+ }
+
+ gBattle_BG1_Y = 0;
+ }
+
+ sub_80A6CC0(unknownStruct.bgId, &gUnknown_08C2A634, unknownStruct.tilesOffset);
+ LoadCompressedPalette(&gUnknown_08C2A6D4, unknownStruct.unk8 << 4, 32);
+ gTasks[taskId].data[10] = gBattle_BG1_X;
+ gTasks[taskId].data[11] = gBattle_BG1_Y;
+ gTasks[taskId].data[0]++;
+ break;
+ case 1:
+ gTasks[taskId].data[3] = 0;
+ if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_OPPONENT)
+ gBattle_BG1_X = gTasks[taskId].data[10] + gUnknown_085CE4A4[gTasks[taskId].data[2]];
+ else
+ gBattle_BG1_X = gTasks[taskId].data[10] - gUnknown_085CE4A4[gTasks[taskId].data[2]];
+
+ if (++gTasks[taskId].data[2] == 5)
+ gTasks[taskId].data[0] = 5;
+ else
+ gTasks[taskId].data[0]++;
+ break;
+ case 2:
+ if (--gTasks[taskId].data[1] <= 4)
+ gTasks[taskId].data[1] = 5;
+
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(3, gTasks[taskId].data[1]));
+ if (gTasks[taskId].data[1] == 5)
+ gTasks[taskId].data[0]++;
+ break;
+ case 3:
+ if (++gTasks[taskId].data[3] > gUnknown_085CE4A8[gTasks[taskId].data[2]])
+ gTasks[taskId].data[0]++;
+ break;
+ case 4:
+ if (++gTasks[taskId].data[1] > 13)
+ gTasks[taskId].data[1] = 13;
+
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(3, gTasks[taskId].data[1]));
+ if (gTasks[taskId].data[1] == 13)
+ gTasks[taskId].data[0] = 1;
+ break;
+ case 5:
+ sub_80A6B30(&unknownStruct);
+ sub_80A6C68(unknownStruct.bgId);
+ if (!IsContest())
+ SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 0);
+
+ SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1);
+ gBattle_BG1_X = 0;
+ gBattle_BG1_Y = 0;
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+void sub_815C3A8(u8 taskId)
+{
+ if (gTasks[taskId].data[0] == 0)
+ {
+ PrepareAffineAnimInTaskData(&gTasks[taskId], GetAnimBattlerSpriteId(0), gUnknown_085CE4B0);
+ gTasks[taskId].data[0]++;
+ }
+ else
+ {
+ if (!RunAffineAnimFromTaskData(&gTasks[taskId]))
+ DestroyAnimVisualTask(taskId);
+ }
+}
+
+void sub_815C400(struct Sprite *sprite)
+{
+ if (sprite->data[0] == 0)
+ {
+ InitAnimSpritePos(sprite, 0);
+ sprite->data[0]++;
+ }
+ else if (sprite->data[0]++ > 20)
+ {
+ sprite->data[1] += 160;
+ sprite->data[2] += 128;
+
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ sprite->pos2.x = -(sprite->data[1] >> 8);
+ else
+ sprite->pos2.x = sprite->data[1] >> 8;
+
+ sprite->pos2.y += sprite->data[2] >> 8;
+ if (sprite->pos2.y > 64)
+ DestroyAnimSprite(sprite);
+ }
+}
+
+void sub_815C478(u8 taskId)
+{
+ u8 side;
+ struct Task *task = &gTasks[taskId];
+
+ if (!gBattleAnimArgs[1])
+ {
+ DestroyAnimVisualTask(taskId);
+ return;
+ }
+
+ if (gBattleAnimArgs[2] < 0)
+ gBattleAnimArgs[2] = 0;
+ if (gBattleAnimArgs[2] > 2)
+ gBattleAnimArgs[2] = 2;
+
+ task->data[0] = 0;
+ task->data[1] = 0;
+ task->data[2] = 0;
+ task->data[3] = 8 - (2 * gBattleAnimArgs[2]);
+ task->data[4] = 0x100 + (gBattleAnimArgs[2] * 128);
+ task->data[5] = gBattleAnimArgs[2] + 2;
+ task->data[6] = gBattleAnimArgs[1] - 1;
+ task->data[15] = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
+
+ if (!gBattleAnimArgs[0])
+ side = GetBattlerSide(gBattleAnimAttacker);
+ else
+ side = GetBattlerSide(gBattleAnimTarget);
+
+ if (side == B_SIDE_OPPONENT)
+ {
+ task->data[4] *= -1;
+ task->data[5] *= -1;
+ }
+
+ PrepareBattlerSpriteForRotScale(task->data[15], ST_OAM_OBJ_NORMAL);
+ task->func = sub_815C548;
+}
+
+static void sub_815C548(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ switch (task->data[0])
+ {
+ case 0:
+ gSprites[task->data[15]].pos2.x += task->data[5];
+ task->data[2] -= task->data[4];
+ SetSpriteRotScale(task->data[15], 0x100, 0x100, task->data[2]);
+ SetBattlerSpriteYOffsetFromRotation(task->data[15]);
+ if (++task->data[1] >= task->data[3])
+ {
+ task->data[1] = 0;
+ task->data[0]++;
+ }
+ break;
+ case 1:
+ gSprites[task->data[15]].pos2.x -= task->data[5];
+ task->data[2] += task->data[4];
+ SetSpriteRotScale(task->data[15], 0x100, 0x100, task->data[2]);
+ SetBattlerSpriteYOffsetFromRotation(task->data[15]);
+ if (++task->data[1] >= task->data[3] * 2)
+ {
+ task->data[1] = 0;
+ task->data[0]++;
+ }
+ break;
+ case 2:
+ gSprites[task->data[15]].pos2.x += task->data[5];
+ task->data[2] -= task->data[4];
+ SetSpriteRotScale(task->data[15], 0x100, 0x100, task->data[2]);
+ SetBattlerSpriteYOffsetFromRotation(task->data[15]);
+ if (++task->data[1] >= task->data[3])
+ {
+ if (task->data[6])
+ {
+ task->data[6]--;
+ task->data[1] = 0;
+ task->data[0] = 0;
+ }
+ else
+ {
+ task->data[0]++;
+ }
+ }
+ break;
+ case 3:
+ ResetSpriteRotScale(task->data[15]);
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+void sub_815C6B0(struct Sprite *sprite)
+{
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
+ {
+ sprite->pos1.x = 0;
+ sprite->pos1.y = gBattleAnimArgs[0];
+ }
+ else
+ {
+ sprite->pos1.x = 240;
+ sprite->pos1.y = gBattleAnimArgs[0] - 30;
+ }
+
+ sprite->data[2] = gBattleAnimArgs[2];
+ StartSpriteAnim(sprite, gBattleAnimArgs[1]);
+ sprite->callback = sub_815C700;
+}
+
+static void sub_815C700(struct Sprite *sprite)
+{
+ sprite->data[0] += 3;
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
+ {
+ sprite->pos1.x += 5;
+ sprite->pos1.y -= 1;
+
+ if (sprite->pos1.x > 240)
+ DestroyAnimSprite(sprite);
+
+ sprite->pos2.y = Sin(sprite->data[0] & 0xFF, 16);
+ }
+ else
+ {
+ sprite->pos1.x -= 5;
+ sprite->pos1.y += 1;
+
+ if (sprite->pos1.x < 0)
+ DestroyAnimSprite(sprite);
+
+ sprite->pos2.y = Cos(sprite->data[0] & 0xFF, 16);
+ }
+}
+
+void sub_815C770(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ task->data[0] = 0;
+ task->data[1] = 0;
+ task->data[2] = 0;
+ task->data[3] = 0;
+ task->data[12] = 0x20;
+ task->data[13] = 0x40;
+ task->data[14] = 0x800;
+ task->data[15] = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
+
+ PrepareBattlerSpriteForRotScale(task->data[15], ST_OAM_OBJ_NORMAL);
+ task->func = sub_815C7C4;
+}
+
+static void sub_815C7C4(u8 taskId)
+{
+ int temp;
+ struct Task *task = &gTasks[taskId];
+
+ switch (task->data[0])
+ {
+ case 0:
+ task->data[2] += 0x200;
+ if (task->data[2] >= task->data[14])
+ {
+ s16 diff = task->data[14] - task->data[2];
+ s16 div = diff / (task->data[14] * 2);
+ s16 mod = diff % (task->data[14] * 2);
+
+ if ((div & 1) == 0)
+ {
+ task->data[2] = task->data[14] - mod;
+ task->data[0] = 1;
+ }
+ else
+ {
+ task->data[2] = mod - task->data[14];
+ }
+ }
+ break;
+ case 1:
+ task->data[2] -= 0x200;
+ if (task->data[2] <= -task->data[14])
+ {
+ s16 diff = task->data[14] - task->data[2];
+ s16 div = diff / (task->data[14] * 2);
+ s16 mod = diff % (task->data[14] * 2);
+
+ if ((1 & div) == 0)
+ {
+ task->data[2] = mod - task->data[14];
+ task->data[0] = 0;
+ }
+ else
+ {
+ task->data[2] = task->data[14] - mod;
+ }
+ }
+ break;
+ case 2:
+ ResetSpriteRotScale(task->data[15]);
+ DestroyAnimVisualTask(taskId);
+ return;
+ }
+
+ SetSpriteRotScale(task->data[15], 0x100, 0x100, task->data[2]);
+ SetBattlerSpriteYOffsetFromRotation(task->data[15]);
+ gSprites[task->data[15]].pos2.x = -(((temp = task->data[2]) >= 0 ? task->data[2] : temp + 63) >> 6);
+
+ if (++task->data[1] > 8)
+ {
+ if (task->data[12])
+ {
+ task->data[12]--;
+ task->data[14] -= task->data[13];
+ if (task->data[14] < 16)
+ task->data[14] = 16;
+ }
+ else
+ {
+ task->data[0] = 2;
+ }
+ }
+}
+
+void sub_815C95C(struct Sprite *sprite)
+{
+ if (!sprite->data[0])
+ {
+ if (!gBattleAnimArgs[2])
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ }
+
+ sprite->pos1.x += gBattleAnimArgs[0];
+ sprite->pos1.y += gBattleAnimArgs[1];
+ sprite->data[1] = 0x80;
+ sprite->data[2] = 0x300;
+ sprite->data[3] = gBattleAnimArgs[1];
+ sprite->data[0]++;
+ }
+ else
+ {
+ sprite->pos2.x = sprite->data[1] >> 8;
+ sprite->pos2.y += sprite->data[2] >> 8;
+ if (sprite->data[4] == 0 && sprite->pos2.y > -sprite->data[3])
+ {
+ sprite->data[4] = 1;
+ sprite->data[2] = (-sprite->data[2] / 3) * 2;
+ }
+
+ sprite->data[1] += 192;
+ sprite->data[2] += 128;
+ if (sprite->animEnded)
+ DestroyAnimSprite(sprite);
+ }
+}
+
+void sub_815CA20(u8 taskId)
+{
+ u8 spriteId;
+
+ if (gTasks[taskId].data[0] == 0)
+ {
+ if (gBattleAnimArgs[0] == 0)
+ gTasks[taskId].data[11] = gBattleAnimAttacker;
+ else
+ gTasks[taskId].data[11] = gBattleAnimTarget;
+
+ spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
+ gTasks[taskId].data[10] = spriteId;
+ PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_NORMAL);
+
+ switch (gBattleAnimArgs[1])
+ {
+ case 0:
+ SetSpriteRotScale(spriteId, 0xE0, 0x140, 0);
+ SetBattlerSpriteYOffsetFromYScale(spriteId);
+ break;
+ case 1:
+ SetSpriteRotScale(spriteId, 0xD0, 0x130, 0xF00);
+ SetBattlerSpriteYOffsetFromYScale(spriteId);
+ if (IsContest() || GetBattlerSide(gTasks[taskId].data[11]) == B_SIDE_PLAYER)
+ gSprites[spriteId].pos2.y += 16;
+ break;
+ case 2:
+ SetSpriteRotScale(spriteId, 0xD0, 0x130, 0xF100);
+ SetBattlerSpriteYOffsetFromYScale(spriteId);
+ if (IsContest() || GetBattlerSide(gTasks[taskId].data[11]) == B_SIDE_PLAYER)
+ gSprites[spriteId].pos2.y += 16;
+ break;
+ }
+
+ gSprites[spriteId].pos2.x = 2;
+ gTasks[taskId].data[0]++;
+ }
+ else
+ {
+ spriteId = gTasks[taskId].data[10];
+ if (++gTasks[taskId].data[2] == 3)
+ {
+ gTasks[taskId].data[2] = 0;
+ gSprites[spriteId].pos2.x = -gSprites[spriteId].pos2.x;
+ }
+
+ if (++gTasks[taskId].data[1] == 13)
+ {
+ ResetSpriteRotScale(spriteId);
+ gSprites[spriteId].pos2.x = 0;
+ gSprites[spriteId].pos2.y = 0;
+ DestroyAnimVisualTask(taskId);
+ }
+ }
+}
+
+void sub_815CB88(struct Sprite *sprite)
+{
+ u8 tileOffset;
+ int rand1;
+ int rand2;
+
+ tileOffset = Random2() % 12;
+ sprite->oam.tileNum += tileOffset;
+ rand1 = Random2() & 0x1FF;
+ rand2 = Random2() & 0xFF;
+
+ if (rand1 & 1)
+ sprite->data[0] = 0x5E0 + rand1;
+ else
+ sprite->data[0] = 0x5E0 - rand1;
+
+ if (rand2 & 1)
+ sprite->data[1] = 0x480 + rand2;
+ else
+ sprite->data[1] = 0x480 - rand2;
+
+ sprite->data[2] = gBattleAnimArgs[0];
+ if (sprite->data[2] == 0)
+ sprite->pos1.x = -8;
+ else
+ sprite->pos1.x = 248;
+
+ sprite->pos1.y = 104;
+ sprite->callback = sub_815CC34;
+}
+
+static void sub_815CC34(struct Sprite *sprite)
+{
+ if (sprite->data[2] == 0)
+ {
+ sprite->pos2.x += sprite->data[0] >> 8;
+ sprite->pos2.y -= sprite->data[1] >> 8;
+ }
+ else
+ {
+ sprite->pos2.x -= sprite->data[0] >> 8;
+ sprite->pos2.y -= sprite->data[1] >> 8;
+ }
+
+ sprite->data[0] -= 22;
+ sprite->data[1] -= 48;
+ if (sprite->data[0] < 0)
+ sprite->data[0] = 0;
+
+ if (++sprite->data[3] == 31)
+ DestroyAnimSprite(sprite);
+}
+
+void sub_815CC94(struct Sprite *sprite)
+{
+ SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ);
+ SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJWIN_ON);
+ gBattle_WIN0H = 0;
+ gBattle_WIN0V = 0;
+ SetGpuReg(REG_OFFSET_WIN0H, gBattle_WIN0H);
+ SetGpuReg(REG_OFFSET_WIN0V, gBattle_WIN0V);
+
+ sprite->data[0] = gBattleAnimArgs[2];
+ sub_80A6980(sprite, FALSE);
+ sprite->oam.objMode = ST_OAM_OBJ_WINDOW;
+ sprite->invisible = 1;
+ sprite->callback = sub_815CD0C;
+}
+
+static void sub_815CD0C(struct Sprite *sprite)
+{
+ switch (sprite->data[1])
+ {
+ case 0:
+ sprite->invisible = 0;
+ if (sprite->affineAnimEnded)
+ sprite->data[1]++;
+ break;
+ case 1:
+ if (--sprite->data[0] == 0)
+ {
+ ChangeSpriteAffineAnim(sprite, 1);
+ sprite->data[1]++;
+ }
+ break;
+ case 2:
+ if (sprite->affineAnimEnded)
+ {
+ sprite->invisible = 1;
+ sprite->data[1]++;
+ }
+ break;
+ case 3:
+ SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR);
+ SetGpuReg(REG_OFFSET_DISPCNT, GetGpuReg(REG_OFFSET_DISPCNT) ^ DISPCNT_OBJWIN_ON);
+ DestroyAnimSprite(sprite);
+ break;
+ }
+}
+
+void sub_815CDB4(struct Sprite *sprite)
+{
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ sprite->data[0] = gBattleAnimArgs[0];
+ sprite->data[1] = gBattleAnimArgs[1];
+ sprite->callback = sub_815CDFC;
+ sprite->callback(sprite);
+}
+
+static void sub_815CDFC(struct Sprite *sprite)
+{
+ sprite->pos2.x = Sin(sprite->data[1], sprite->data[2] >> 8);
+ sprite->pos2.y = Cos(sprite->data[1], sprite->data[3] >> 8);
+ sprite->data[1] = (sprite->data[1] + 9) & 0xFF;
+
+ if ((u16)sprite->data[1] < 64 || sprite->data[1] > 195)
+ sprite->subpriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker) - 1;
+ else
+ sprite->subpriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker) + 1;
+
+ if (!sprite->data[5])
+ {
+ sprite->data[2] += 0x400;
+ sprite->data[3] += 0x100;
+ sprite->data[4]++;
+ if (sprite->data[4] == sprite->data[0])
+ {
+ sprite->data[4] = 0;
+ sprite->data[5] = 1;
+ }
+ }
+ else if (sprite->data[5] == 1)
+ {
+ sprite->data[2] -= 0x400;
+ sprite->data[3] -= 0x100;
+ sprite->data[4]++;
+ if (sprite->data[4] == sprite->data[0])
+ DestroyAnimSprite(sprite);
+ }
+}
+
+
+
+extern void sub_815D160(u8);
+
+void sub_815CED8(u8 taskId)
+{
+ u8 isBackPic;
+ u32 personality;
+ u32 otId;
+ u16 species;
+ s16 xOffset;
+ u32 priority;
+ u8 spriteId;
+ s16 coord1, coord2;
+
+ GetAnimBattlerSpriteId(ANIM_ATTACKER);
+ if (IsContest())
+ {
+ isBackPic = 1;
+ personality = gContestResources->field_18->unk10;
+ otId = gContestResources->field_18->unkC;
+ species = gContestResources->field_18->unk2;
+ xOffset = 20;
+ priority = sub_80A8328(gBattleAnimAttacker);
+ }
+ else
+ {
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ {
+ isBackPic = 0;
+ personality = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimTarget]], MON_DATA_PERSONALITY);
+ otId = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimTarget]], MON_DATA_OT_ID);
+ if (gBattleSpritesDataPtr->battlerData[gBattleAnimTarget].transformSpecies == SPECIES_NONE)
+ {
+ if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER)
+ species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimTarget]], MON_DATA_SPECIES);
+ else
+ species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimTarget]], MON_DATA_SPECIES);
+ }
+ else
+ {
+ species = gBattleSpritesDataPtr->battlerData[gBattleAnimTarget].transformSpecies;
+ }
+
+ xOffset = 20;
+ priority = sub_80A8328(gBattleAnimAttacker);
+ }
+ else
+ {
+ isBackPic = 1;
+ personality = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimTarget]], MON_DATA_PERSONALITY);
+ otId = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimTarget]], MON_DATA_OT_ID);
+ if (gBattleSpritesDataPtr->battlerData[gBattleAnimTarget].transformSpecies == SPECIES_NONE)
+ {
+ if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER)
+ species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimTarget]], MON_DATA_SPECIES);
+ else
+ species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimTarget]], MON_DATA_SPECIES);
+ }
+ else
+ {
+ species = gBattleSpritesDataPtr->battlerData[gBattleAnimTarget].transformSpecies;
+ }
+
+ xOffset = -20;
+ priority = sub_80A8328(gBattleAnimAttacker);
+ }
+ }
+
+ coord1 = GetBattlerSpriteCoord(gBattleAnimAttacker, 0);
+ coord2 = GetBattlerSpriteCoord(gBattleAnimAttacker, 1);
+ spriteId = sub_80A8394(species, isBackPic, 0, coord1 + xOffset, coord2, 5, personality, otId, gBattleAnimTarget, 1);
+
+ gSprites[spriteId].oam.priority = priority;
+ gSprites[spriteId].oam.objMode = ST_OAM_OBJ_BLEND;
+ FillPalette(RGB(31, 31, 31), (gSprites[spriteId].oam.paletteNum << 4) + 0x100, 32);
+ gSprites[spriteId].oam.priority = priority;
+ SetGpuReg(REG_OFFSET_BLDCNT, 0x3F40);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[1], 16 - gTasks[taskId].data[1]));
+
+ gTasks[taskId].data[0] = spriteId;
+ gTasks[taskId].func = sub_815D160;
+}
+
+void sub_815D160(u8 taskId)
+{
+ if (gTasks[taskId].data[10]++ > 1)
+ {
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].data[1]++;
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[1], 16 - gTasks[taskId].data[1]));
+ if (gTasks[taskId].data[1] == 10)
+ {
+ gTasks[taskId].data[10] = 256;
+ gTasks[taskId].data[11] = 256;
+ gTasks[taskId].func = sub_815D1BC;
+ }
+ }
+}
+
+static void sub_815D1BC(u8 taskId)
+{
+ u8 spriteId = gTasks[taskId].data[0];
+ gTasks[taskId].data[10] -= 16;
+ gTasks[taskId].data[11] += 128;
+ gSprites[spriteId].oam.affineMode |= ST_OAM_AFFINE_DOUBLE_MASK;
+ TrySetSpriteRotScale(&gSprites[spriteId], TRUE, gTasks[taskId].data[10], gTasks[taskId].data[11], 0);
+ if (++gTasks[taskId].data[12] == 9)
+ {
+ sub_80A749C(&gSprites[spriteId]);
+ sub_80A8610(&gSprites[spriteId]);
+ gTasks[taskId].func = sub_80A6814;
+ }
+}
+
+void sub_815D240(u8 taskId)
+{
+ u8 battler;
+ u16 bgX, bgY;
+ s16 y, i;
+ struct ScanlineEffectParams scanlineParams;
+ struct Task *task = &gTasks[taskId];
+
+ if (gBattleAnimArgs[0] == 0)
+ battler = gBattleAnimAttacker;
+ else
+ battler = gBattleAnimTarget;
+
+ task->data[0] = 0;
+ task->data[1] = 0;
+ task->data[2] = 0;
+ task->data[3] = 16;
+ task->data[4] = 0;
+ task->data[5] = battler;
+ task->data[6] = 32;
+ task->data[7] = 0;
+ task->data[8] = 24;
+
+ if (GetBattlerSide(battler) == B_SIDE_OPPONENT)
+ task->data[8] *= -1;
+
+ task->data[13] = GetBattlerYCoordWithElevation(battler) - 34;
+ if (task->data[13] < 0)
+ task->data[13] = 0;
+
+ task->data[14] = task->data[13] + 66;
+ task->data[15] = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
+ if (sub_80A8364(battler) == 1)
+ {
+ scanlineParams.dmaDest = &REG_BG1HOFS;
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND | BLDCNT_TGT1_BG1);
+ bgX = gBattle_BG1_X;
+ bgY = gBattle_BG1_Y;
+ }
+ else
+ {
+ scanlineParams.dmaDest = &REG_BG2HOFS;
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND | BLDCNT_TGT1_BG2);
+ bgX = gBattle_BG2_X;
+ bgY = gBattle_BG2_Y;
+ }
+
+ for (y = 0, i = 0; y < 160; y++, i += 2)
+ {
+ gScanlineEffectRegBuffers[0][i] = bgX;
+ gScanlineEffectRegBuffers[1][i] = bgX;
+ gScanlineEffectRegBuffers[0][i + 1] = bgY;
+ gScanlineEffectRegBuffers[1][i + 1] = bgY;
+ }
+
+ scanlineParams.dmaControl = SCANLINE_EFFECT_DMACNT_32BIT;
+ scanlineParams.initState = 1;
+ scanlineParams.unused9 = 0;
+ ScanlineEffect_SetParams(scanlineParams);
+ task->func = sub_815D398;
+}
+
+static void sub_815D398(u8 taskId)
+{
+ struct Task *task;
+ s16 var1;
+ s16 var2;
+ s16 bgX, bgY;
+ s16 offset;
+ s16 var0;
+ s16 i;
+ s16 sineIndex;
+ s16 var3;
+
+ task = &gTasks[taskId];
+ if (sub_80A8364(task->data[5]) == 1)
+ {
+ bgX = gBattle_BG1_X;
+ bgY = gBattle_BG1_Y;
+ }
+ else
+ {
+ bgX = gBattle_BG2_X;
+ bgY = gBattle_BG2_Y;
+ }
+
+ switch (task->data[0])
+ {
+ case 0:
+ offset = task->data[14] * 2;
+ var1 = 0;
+ var2 = 0;
+ i = 0;
+ task->data[1] = (task->data[1] + 2) & 0xFF;
+ sineIndex = task->data[1];
+ task->data[9] = 0x7E0 / task->data[6];
+ task->data[10] = -((task->data[7] * 2) / task->data[9]);
+ task->data[11] = task->data[7];
+ var3 = task->data[11] >> 5;
+ task->data[12] = var3;
+ var0 = task->data[14];
+ while (var0 > task->data[13])
+ {
+ gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][offset + 1] = (i - var2) + bgY;
+ gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][offset] = bgX + var3 + (gSineTable[sineIndex] >> 5);
+ sineIndex = (sineIndex + 10) & 0xFF;
+ task->data[11] += task->data[10];
+ var3 = task->data[11] >> 5;
+ task->data[12] = var3;
+
+ i++;
+ offset -= 2;
+ var1 += task->data[6];
+ var2 = var1 >> 5;
+ var0--;
+ }
+
+ var0 *= 2;
+ while (var0 >= 0)
+ {
+ gScanlineEffectRegBuffers[0][var0] = bgX + 240;
+ gScanlineEffectRegBuffers[1][var0] = bgX + 240;
+ var0 -= 2;
+ }
+
+ if (++task->data[6] > 63)
+ {
+ task->data[6] = 64;
+ task->data[2]++;
+ if (task->data[2] & 1)
+ task->data[3]--;
+ else
+ task->data[4]++;
+
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(task->data[3], task->data[4]));
+ if (task->data[3] == 0 && task->data[4] == 16)
+ {
+ task->data[2] = 0;
+ task->data[3] = 0;
+ task->data[0]++;
+ }
+ }
+ else
+ {
+ task->data[7] += task->data[8];
+ }
+ break;
+ case 1:
+ if (++task->data[2] > 12)
+ {
+ gScanlineEffect.state = 3;
+ task->data[2] = 0;
+ task->data[0]++;
+ }
+ break;
+ case 2:
+ task->data[2]++;
+ if (task->data[2] & 1)
+ task->data[3]++;
+ else
+ task->data[4]--;
+
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(task->data[3], task->data[4]));
+ if (task->data[3] == 16 && task->data[4] == 0)
+ {
+ task->data[2] = 0;
+ task->data[3] = 0;
+ task->data[0]++;
+ }
+ break;
+ case 3:
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+void sub_815D64C(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+ task->data[0] = 0;
+ task->data[15] = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
+ PrepareAffineAnimInTaskData(&gTasks[taskId], task->data[15], gUnknown_085CE5F0);
+ task->func = sub_815D694;
+}
+
+static void sub_815D694(u8 taskId)
+{
+ u16 var0;
+
+ struct Task *task = &gTasks[taskId];
+ var0 = task->data[0];
+ task->data[0]++;
+ var0 -= 20;
+ if (var0 < 23)
+ {
+ if (++task->data[1] > 1)
+ {
+ task->data[1] = 0;
+ task->data[2]++;
+ if (task->data[2] & 1)
+ gSprites[task->data[15]].pos2.x = 1;
+ else
+ gSprites[task->data[15]].pos2.x = -1;
+ }
+ }
+ else
+ {
+ gSprites[task->data[15]].pos2.x = 0;
+ }
+
+ if (!RunAffineAnimFromTaskData(&gTasks[taskId]))
+ DestroyAnimVisualTask(taskId);
+}
+
+void sub_815D72C(struct Sprite *sprite, s16 b, s16 c, s16 d, s16 e, u16 f)
+{
+ sprite->pos1.x = b;
+ sprite->pos1.y = c;
+ sprite->data[4] = b << 4;
+ sprite->data[5] = c << 4;
+ sprite->data[6] = ((d - b) << 4) / f;
+ sprite->data[7] = ((e - c) << 4) / f;
+}
+
+void sub_815D794(struct Sprite *sprite)
+{
+ sprite->data[4] += sprite->data[6];
+ sprite->data[5] += sprite->data[7];
+ sprite->pos1.x = sprite->data[4] >> 4;
+ sprite->pos1.y = sprite->data[5] >> 4;
+}
+
+void sub_815D7B4(struct Sprite *sprite)
+{
+ s16 x = sprite->pos1.x;
+ s16 y = sprite->pos1.y;
+
+ SetSpriteCoordsToAnimAttackerCoords(sprite);
+ StartSpriteAffineAnim(sprite, gBattleAnimArgs[0]);
+ sub_815D72C(sprite, sprite->pos1.x, sprite->pos1.y, x, y, 64);
+ sprite->data[0] = 0;
+ sprite->callback = sub_815D804;
+}
+
+static void sub_815D804(struct Sprite *sprite)
+{
+ int index;
+
+ sprite->data[0]++;
+ index = (sprite->data[0] * 8) & 0xFF;
+ sub_815D794(sprite);
+ sprite->pos2.y = Sin(index, 8);
+ if (sprite->data[0] > 58)
+ {
+ if (++sprite->data[1] > 1)
+ {
+ sprite->data[1] = 0;
+ sprite->data[2]++;
+ sprite->invisible = sprite->data[2] & 1;
+ if (sprite->data[2] > 3)
+ DestroySpriteAndMatrix(sprite);
+ }
+ }
+}
+
+void sub_815D870(struct Sprite *sprite)
+{
+ sprite->data[0] = gBattleAnimArgs[3];
+ StartSpriteAffineAnim(sprite, gBattleAnimArgs[0]);
+ if (GetBattlerSide(gBattleAnimTarget) != B_SIDE_PLAYER)
+ gBattleAnimArgs[1] = -gBattleAnimArgs[1];
+
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + gBattleAnimArgs[1];
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + gBattleAnimArgs[2];
+ sprite->callback = sub_810E2C8;
+}
+
+static void sub_815D8D8(u8 taskId)
+{
+ u16 var0 = 0;
+ u16 var1 = 0;
+
+ gTasks[taskId].data[0]--;
+ if ((gTasks[taskId].data[6] & 0x8000) && (--gTasks[taskId].data[1] == -1))
+ {
+ if (gTasks[taskId].data[9] == 0)
+ {
+ gTasks[taskId].data[9] = gTasks[taskId].data[4];
+ gTasks[taskId].data[4] = -gTasks[taskId].data[4];
+ }
+ else
+ {
+ gTasks[taskId].data[9] = 0;
+ }
+
+ if (gTasks[taskId].data[10] == 0)
+ {
+ gTasks[taskId].data[10] = gTasks[taskId].data[5];
+ gTasks[taskId].data[5] = -gTasks[taskId].data[5];
+ }
+ else
+ {
+ gTasks[taskId].data[10] = 0;
+ }
+
+ gTasks[taskId].data[1] = gTasks[taskId].data[13];
+ }
+
+ var0 = gTasks[taskId].data[7];
+ var1 = gTasks[taskId].data[8];
+ if (gTasks[taskId].data[2] & 0x8000)
+ gSprites[gTasks[taskId].data[15]].pos2.x = gTasks[taskId].data[9] - (var0 >> 8);
+ else
+ gSprites[gTasks[taskId].data[15]].pos2.x = gTasks[taskId].data[9] + (var0 >> 8);
+
+ if (gTasks[taskId].data[3] & 0x8000)
+ gSprites[gTasks[taskId].data[15]].pos2.y = gTasks[taskId].data[10] - (var1 >> 8);
+ else
+ gSprites[gTasks[taskId].data[15]].pos2.y = gTasks[taskId].data[10] + (var1 >> 8);
+
+ if (gTasks[taskId].data[0] < 1)
+ {
+ DestroyTask(taskId);
+ gAnimVisualTaskCount--;
+ }
+}
+
+static void sub_815DA20(u8 taskId)
+{
+ u16 var0 = 0;
+ u16 var1 = 0;
+
+ gTasks[taskId].data[0]--;
+ if ((gTasks[taskId].data[6] & 0x8000) && (--gTasks[taskId].data[1] == -1))
+ {
+ if (gTasks[taskId].data[9] == 0)
+ {
+ gTasks[taskId].data[9] = gTasks[taskId].data[4];
+ gTasks[taskId].data[4] = -gTasks[taskId].data[4];
+ }
+ else
+ {
+ gTasks[taskId].data[9] = var0;
+ }
+
+ if (gTasks[taskId].data[10] == 0)
+ {
+ gTasks[taskId].data[10] = gTasks[taskId].data[5];
+ gTasks[taskId].data[5] = -gTasks[taskId].data[5];
+ }
+ else
+ {
+ gTasks[taskId].data[10] = 0;
+ }
+
+ gTasks[taskId].data[1] = gTasks[taskId].data[13];
+ }
+
+ var0 = (gTasks[taskId].data[2] & 0x7FFF) + gTasks[taskId].data[7];
+ var1 = (gTasks[taskId].data[3] & 0x7FFF) + gTasks[taskId].data[8];
+ if (gTasks[taskId].data[2] & 0x8000)
+ gSprites[gTasks[taskId].data[15]].pos2.x = gTasks[taskId].data[9] - (var0 >> 8);
+ else
+ gSprites[gTasks[taskId].data[15]].pos2.x = gTasks[taskId].data[9] + (var0 >> 8);
+
+ if (gTasks[taskId].data[3] & 0x8000)
+ gSprites[gTasks[taskId].data[15]].pos2.y = gTasks[taskId].data[10] - (var1 >> 8);
+ else
+ gSprites[gTasks[taskId].data[15]].pos2.y = gTasks[taskId].data[10] + (var1 >> 8);
+
+ gTasks[taskId].data[7] = var0;
+ gTasks[taskId].data[8] = var1;
+ if (gTasks[taskId].data[0] < 1)
+ {
+ gTasks[taskId].data[0] = 30;
+ gTasks[taskId].data[13] = 0;
+ gTasks[taskId].func = sub_815D8D8;
+ }
+}
+
+void sub_815DB90(u8 taskId)
+{
+ gTasks[taskId].data[15] = gBattlerSpriteIds[gBattleAnimAttacker];
+ gTasks[taskId].data[14] = gBattleAnimArgs[0];
+ gTasks[taskId].data[0] = gBattleAnimArgs[0];
+ gTasks[taskId].data[13] = gBattleAnimArgs[6];
+ if (gBattleAnimArgs[3])
+ gTasks[taskId].data[6] = gTasks[taskId].data[6] | -0x8000;
+
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ {
+ gTasks[taskId].data[2] = gBattleAnimArgs[1];
+ gTasks[taskId].data[3] = gBattleAnimArgs[2];
+ }
+ else
+ {
+ if (gBattleAnimArgs[1] & 0x8000)
+ gTasks[taskId].data[2] = gBattleAnimArgs[1] & 0x7FFF;
+ else
+ gTasks[taskId].data[2] = gBattleAnimArgs[1] | -0x8000;
+
+ if (gBattleAnimArgs[2] & 0x8000)
+ gTasks[taskId].data[3] = gBattleAnimArgs[2] & 0x7FFF;
+ else
+ gTasks[taskId].data[3] = gBattleAnimArgs[2] | -0x8000;
+ }
+
+ gTasks[taskId].data[8] = 0;
+ gTasks[taskId].data[7] = 0;
+ gTasks[taskId].data[4] = gBattleAnimArgs[4];
+ gTasks[taskId].data[5] = gBattleAnimArgs[5];
+ gTasks[taskId].func = sub_815DA20;
+}
+
+void sub_815DCA4(u8 taskId)
+{
+ u8 battler;
+ struct Task *task = &gTasks[taskId];
+
+ if (!gBattleAnimArgs[1])
+ DestroyAnimVisualTask(taskId);
+
+ task->data[0] = 0;
+ task->data[1] = 0;
+ task->data[2] = 0;
+ task->data[3] = gBattleAnimArgs[1];
+ if (gBattleAnimArgs[0] == 0)
+ battler = gBattleAnimAttacker;
+ else
+ battler = gBattleAnimTarget;
+
+ task->data[4] = GetBattlerSpriteCoord(battler, 0);
+ task->data[5] = GetBattlerSpriteCoord(battler, 1);
+ task->data[6] = GetBattlerSpriteSubpriority(battler);
+ task->data[15] = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
+ PrepareAffineAnimInTaskData(task, task->data[15], gUnknown_085CE74C);
+ task->func = sub_815DD48;
+}
+
+static void sub_815DD48(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ switch (task->data[0])
+ {
+ case 0:
+ if (++task->data[1] == 6)
+ sub_815DDE0(taskId, TRUE);
+
+ if (task->data[1] == 18)
+ sub_815DDE0(taskId, FALSE);
+
+ if (!RunAffineAnimFromTaskData(task))
+ {
+ if (--task->data[3] == 0)
+ {
+ task->data[0]++;
+ }
+ else
+ {
+ task->data[1] = 0;
+ PrepareAffineAnimInTaskData(task, task->data[15], gUnknown_085CE74C);
+ }
+ }
+ break;
+ case 1:
+ if (task->data[2] == 0)
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+static void sub_815DDE0(u8 taskId, bool8 arg1)
+{
+ u8 i;
+ s8 xOffset, yOffset;
+ struct Task *task;
+ s16 xCoords[4];
+ s16 yCoords[2];
+
+ task = &gTasks[taskId];
+ if (!arg1)
+ {
+ xOffset = 18;
+ yOffset = -20;
+ }
+ else
+ {
+ xOffset = 30;
+ yOffset = 20;
+ }
+
+ xCoords[0] = task->data[4] - xOffset;
+ xCoords[1] = task->data[4] - xOffset - 4;
+ xCoords[2] = task->data[4] + xOffset;
+ xCoords[3] = task->data[4] + xOffset + 4;
+ yCoords[0] = task->data[5] + yOffset;
+ yCoords[1] = task->data[5] + yOffset + 6;
+
+ for (i = 0; i < 4; i++)
+ {
+ u8 spriteId = CreateSprite(&gUnknown_085CE76C, xCoords[i], yCoords[i & 1], task->data[6] - 5);
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].data[0] = 0;
+ gSprites[spriteId].data[1] = i < 2 ? -2 : 2;
+ gSprites[spriteId].data[2] = -1;
+ gSprites[spriteId].data[3] = taskId;
+ gSprites[spriteId].data[4] = 2;
+ task->data[2]++;
+ }
+ }
+}
+
+void sub_815DEBC(struct Sprite *sprite)
+{
+ sprite->pos1.x += sprite->data[1];
+ sprite->pos1.y += sprite->data[2];
+ if (++sprite->data[0] > 6)
+ {
+ gTasks[sprite->data[3]].data[sprite->data[4]]--;
+ DestroySprite(sprite);
+ }
+}
+
+void sub_815DF0C(u8 taskId)
+{
+ u8 spriteId;
+
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].data[1] = gBattleAnimArgs[1];
+ spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
+ gTasks[taskId].data[2] = 0x100 + gSprites[spriteId].oam.paletteNum * 16;
+ gTasks[taskId].func = sub_815DF64;
+}
+
+static void sub_815DF64(u8 taskId)
+{
+ if (gTasks[taskId].data[1])
+ {
+ BlendPalette(gTasks[taskId].data[2], 16, 8, gUnknown_085CE784[gTasks[taskId].data[0]]);
+ if (++gTasks[taskId].data[0] > 23)
+ gTasks[taskId].data[0] = 0;
+
+ gTasks[taskId].data[1]--;
+ }
+ else
+ {
+ BlendPalette(gTasks[taskId].data[2], 16, 0, RGB(0, 0, 0));
+ DestroyAnimVisualTask(taskId);
+ }
+}
+
+void sub_815DFCC(u8 taskId)
+{
+ sub_8117854(
+ taskId,
+ 0,
+ 0x1A0,
+ gBattleAnimAttacker,
+ gBattleAnimArgs[0],
+ 10,
+ 2,
+ 30,
+ gUnknown_08C2DC68,
+ gUnknown_08C2DDC4,
+ gUnknown_08C2DDA4);
+}
+
+void sub_815E01C(struct Sprite *sprite)
+{
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT)
+ gBattleAnimArgs[0] = -gBattleAnimArgs[0];
+
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0) + gBattleAnimArgs[0];
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + gBattleAnimArgs[1];
+ if (gBattleAnimArgs[2] == 0)
+ {
+ sprite->data[0] = 640;
+ sprite->data[1] = -640;
+ }
+ else if (gBattleAnimArgs[2] == 1)
+ {
+ sprite->vFlip = 1;
+ sprite->data[0] = 640;
+ sprite->data[1] = 640;
+ }
+ else
+ {
+ StartSpriteAnim(sprite, 1);
+ sprite->data[0] = 640;
+ }
+
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ {
+ sprite->data[0] = -sprite->data[0];
+ sprite->hFlip = 1;
+ }
+
+ sprite->callback = sub_815E0DC;
+}
+
+static void sub_815E0DC(struct Sprite *sprite)
+{
+ sprite->data[6] += sprite->data[0];
+ sprite->data[7] += sprite->data[1];
+ sprite->pos2.x = sprite->data[6] >> 8;
+ sprite->pos2.y = sprite->data[7] >> 8;
+ if (++sprite->data[5] == 14)
+ DestroyAnimSprite(sprite);
+}
+
+void sub_815E114(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ if (IsContest())
+ {
+ task->data[5] = 8;
+ task->data[6] = 3;
+ task->data[7] = 1;
+ }
+ else
+ {
+ task->data[5] = 12;
+ task->data[6] = 3;
+ task->data[7] = 0;
+ }
+
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
+ task->data[11] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + sub_80A861C(gBattleAnimAttacker, 0) / 4;
+ else
+ task->data[11] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) - sub_80A861C(gBattleAnimAttacker, 0) / 4;
+
+ task->data[12] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) - sub_80A861C(gBattleAnimAttacker, 0) / 4;
+ task->data[13] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ task->data[14] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ task->func = sub_815E20C;
+}
+
+static void sub_815E20C(u8 taskId)
+{
+ u8 i;
+ s16 x, y;
+ struct Task *task = &gTasks[taskId];
+
+ switch (task->data[0])
+ {
+ case 0:
+ if (++task->data[1] > 3)
+ {
+ task->data[1] = 0;
+ sub_815E34C(
+ task->data[11],
+ task->data[12],
+ task->data[13],
+ task->data[14],
+ task->data[5],
+ task->data[2],
+ &x,
+ &y);
+
+ for (i = 0; i < 2; i++)
+ {
+ u8 spriteId = CreateSprite(&gUnknown_085CE7EC, x, y, 35);
+ if (spriteId != MAX_SPRITES)
+ {
+ if (task->data[7] == 0)
+ {
+ if (i == 0)
+ gSprites[spriteId].pos2.x = gSprites[spriteId].pos2.y = -task->data[6];
+ else
+ gSprites[spriteId].pos2.x = gSprites[spriteId].pos2.y = task->data[6];
+ }
+ else
+ {
+ if (i == 0)
+ {
+ gSprites[spriteId].pos2.x = -task->data[6];
+ gSprites[spriteId].pos2.y = task->data[6];
+ }
+ else
+ {
+ gSprites[spriteId].pos2.x = task->data[6];
+ gSprites[spriteId].pos2.y = -task->data[6];
+ }
+ }
+
+ gSprites[spriteId].data[0] = 0;
+ gSprites[spriteId].data[1] = taskId;
+ gSprites[spriteId].data[2] = 10;
+ task->data[10]++;
+ }
+ }
+
+ if (task->data[2] == task->data[5])
+ task->data[0]++;
+
+ task->data[2]++;
+ }
+ break;
+ case 1:
+ if (task->data[10] == 0)
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+static void sub_815E34C(s16 arg0, s16 arg1, s16 arg2, s16 arg3, u8 arg4, u8 arg5, s16 *x, s16 *y)
+{
+ int x2;
+ int y2;
+
+ if (arg5 == 0)
+ {
+ *x = arg0;
+ *y = arg1;
+ return;
+ }
+
+ if (arg5 >= arg4)
+ {
+ *x = arg2;
+ *y = arg3;
+ return;
+ }
+
+ arg4--;
+ x2 = (arg0 << 8) + arg5 * (((arg2 - arg0) << 8) / arg4);
+ y2 = (arg1 << 8) + arg5 * (((arg3 - arg1) << 8) / arg4);
+ *x = x2 >> 8;
+ *y = y2 >> 8;
+}
+
+void sub_815E404(struct Sprite *sprite)
+{
+ if (++sprite->data[0] > 36)
+ {
+ gTasks[sprite->data[1]].data[sprite->data[2]]--;
+ DestroySprite(sprite);
+ }
+}
+
+void sub_815E444(struct Sprite *sprite)
+{
+ sprite->pos1.x = gBattleAnimArgs[0];
+ sprite->pos1.y = gBattleAnimArgs[1];
+ sprite->data[2] = gBattleAnimArgs[2];
+ sprite->data[4] = gBattleAnimArgs[3];
+ sprite->data[0] = gBattleAnimArgs[4];
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+ sprite->callback = sub_80A70C0;
+}
+
+void sub_815E47C(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ task->data[11] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
+ task->data[12] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ task->data[13] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ task->data[14] = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + sub_80A861C(gBattleAnimTarget, 0) / 4;
+ task->data[15] = CreateSprite(&gUnknown_085CE84C, task->data[11], task->data[12], GetBattlerSpriteSubpriority(gBattleAnimTarget) - 5);
+ if (task->data[15] != MAX_SPRITES)
+ {
+ gSprites[task->data[15]].data[0] = 16;
+ gSprites[task->data[15]].data[2] = task->data[13];
+ gSprites[task->data[15]].data[4] = task->data[14];
+ gSprites[task->data[15]].data[5] = -32;
+ InitAnimArcTranslation(&gSprites[task->data[15]]);
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT)
+ StartSpriteAffineAnim(&gSprites[task->data[15]], 1);
+
+ task->func = sub_815E5CC;
+ }
+ else
+ {
+ DestroyAnimVisualTask(taskId);
+ }
+}
+
+static void sub_815E5CC(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ switch (task->data[0])
+ {
+ case 0:
+ if (++task->data[1] > 1)
+ {
+ task->data[1] = 0;
+ TranslateAnimArc(&gSprites[task->data[15]]);
+ if (++task->data[2] > 7)
+ task->data[0]++;
+ }
+ break;
+ case 1:
+ if (TranslateAnimArc(&gSprites[task->data[15]]))
+ {
+ task->data[1] = 0;
+ task->data[2] = 0;
+ task->data[0]++;
+ }
+ break;
+ case 2:
+ if (++task->data[1] > 1)
+ {
+ task->data[1] = 0;
+ task->data[2]++;
+ gSprites[task->data[15]].invisible = task->data[2] & 1;
+ if (task->data[2] == 16)
+ {
+ FreeOamMatrix(gSprites[task->data[15]].oam.matrixNum);
+ DestroySprite(&gSprites[task->data[15]]);
+ task->data[0]++;
+ }
+ }
+ break;
+ case 3:
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+void sub_815E6D8(struct Sprite *sprite)
+{
+ u8 battler;
+
+ if (gBattleAnimArgs[0] == 0)
+ battler = gBattleAnimAttacker;
+ else
+ battler = gBattleAnimTarget;
+
+ sprite->oam.tileNum += 16;
+ sprite->data[6] = gBattleAnimArgs[2];
+ sprite->data[7] = gBattleAnimArgs[1] == 0 ? -1 : 1;
+ sprite->pos1.y = GetBattlerSpriteCoord(battler, 3);
+ if (gBattleAnimArgs[1] == 0)
+ {
+ sprite->oam.matrixNum |= 0x8;
+ sprite->pos1.x = sub_80A861C(battler, 4) - 8;
+ }
+ else
+ {
+ sprite->pos1.x = sub_80A861C(battler, 5) + 8;
+ }
+
+ sprite->callback = sub_815E784;
+}
+
+static void sub_815E784(struct Sprite *sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ if (++sprite->data[1] > 1)
+ {
+ sprite->data[1] = 0;
+ sprite->pos2.x += sprite->data[7];
+ if (++sprite->data[2] == 12)
+ sprite->data[0]++;
+ }
+ break;
+ case 1:
+ if (++sprite->data[1] == 8)
+ {
+ sprite->data[1] = 0;
+ sprite->data[0]++;
+ }
+ break;
+ case 2:
+ sprite->pos2.x -= sprite->data[7] * 4;
+ if (++sprite->data[1] == 6)
+ {
+ sprite->data[1] = 0;
+ sprite->data[0]++;
+ }
+ break;
+ case 3:
+ sprite->pos2.x += sprite->data[7] * 3;
+ if (++sprite->data[1] == 8)
+ {
+ if (--sprite->data[6])
+ {
+ sprite->data[1] = 0;
+ sprite->data[0]--;
+ }
+ else
+ {
+ DestroyAnimSprite(sprite);
+ }
+ }
+ break;
+ }
+}
+
+void sub_815E840(u8 taskId)
+{
+ if (gBattleAnimArgs[0] == 0)
+ {
+ DestroyAnimVisualTask(taskId);
+ }
+ else
+ {
+ gTasks[taskId].data[0] = gBattleAnimArgs[1];
+ gTasks[taskId].data[15] = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
+ PrepareAffineAnimInTaskData(&gTasks[taskId], gTasks[taskId].data[15], gUnknown_085CE87C);
+ gTasks[taskId].func = sub_815E898;
+ }
+}
+
+static void sub_815E898(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ if (++task->data[1] > 1)
+ {
+ task->data[1] = 0;
+ if (!(task->data[2] & 1))
+ gSprites[task->data[15]].pos2.x = 2;
+ else
+ gSprites[task->data[15]].pos2.x = -2;
+ }
+
+ if (!RunAffineAnimFromTaskData(task))
+ {
+ gSprites[task->data[15]].pos2.x = 0;
+ if (--task->data[0])
+ {
+ PrepareAffineAnimInTaskData(&gTasks[taskId], gTasks[taskId].data[15], gUnknown_085CE87C);
+ task->data[1] = 0;
+ task->data[2] = 0;
+ }
+ else
+ {
+ DestroyAnimVisualTask(taskId);
+ }
+ }
+}
+
+void sub_815E954(struct Sprite *sprite)
+{
+ if (gBattleAnimArgs[0] == 0)
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
+ sprite->pos1.y = sub_80A861C(gBattleAnimAttacker, 2);
+ }
+ else
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ sprite->pos1.y = sub_80A861C(gBattleAnimTarget, 2);
+ }
+
+ if (sprite->pos1.y < 8)
+ sprite->pos1.y = 8;
+
+ sprite->data[0] = 0;
+ sprite->data[1] = gBattleAnimArgs[1];
+ sprite->data[2] = 0;
+ sprite->data[3] = gBattleAnimArgs[2];
+ sprite->callback = sub_815E9BC;
+}
+
+static void sub_815E9BC(struct Sprite *sprite)
+{
+ if (++sprite->data[0] >= sprite->data[1])
+ {
+ sprite->data[0] = 0;
+ sprite->data[2] = (sprite->data[2] + 1) & 1;
+ sprite->invisible = sprite->data[2];
+ if (sprite->data[2] && --sprite->data[3] == 0)
+ DestroyAnimSprite(sprite);
+ }
+}
+
+void sub_815EA14(struct Sprite *sprite)
+{
+ if (gBattleAnimArgs[0] == 0)
+ {
+ sprite->oam.matrixNum |= 0x8;
+ sprite->pos1.x = 100;
+ sprite->data[7] = 1;
+ }
+ else
+ {
+ sprite->pos1.x = 140;
+ sprite->data[7] = -1;
+ }
+
+ sprite->pos1.y = 56;
+ sprite->callback = sub_815EA60;
+}
+
+static void sub_815EA60(struct Sprite *sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ sprite->pos1.y -= sprite->data[7] * 2;
+ if (sprite->data[1] & 1)
+ sprite->pos1.x -= sprite->data[7] * 2;
+
+ if (++sprite->data[1] == 9)
+ {
+ sprite->data[1] = 0;
+ sprite->data[0]++;
+ }
+ break;
+ case 1:
+ if (++sprite->data[1] == 4)
+ {
+ sprite->data[1] = 0;
+ sprite->data[0]++;
+ }
+ break;
+ case 2:
+ sprite->data[1]++;
+ sprite->pos1.y += sprite->data[7] * 3;
+ sprite->pos2.x = sprite->data[7] * (gSineTable[sprite->data[1] * 10] >> 3);
+ if (sprite->data[1] == 12)
+ {
+ sprite->data[1] = 0;
+ sprite->data[0]++;
+ }
+ break;
+ case 3:
+ if (++sprite->data[1] == 2)
+ {
+ sprite->data[1] = 0;
+ sprite->data[0]++;
+ }
+ break;
+ case 4:
+ sprite->data[1]++;
+ sprite->pos1.y -= sprite->data[7] * 3;
+ sprite->pos2.x = sprite->data[7] * (gSineTable[sprite->data[1] * 10] >> 3);
+ if (sprite->data[1] == 12)
+ sprite->data[0]++;
+ break;
+ case 5:
+ sprite->data[1]++;
+ sprite->pos1.y += sprite->data[7] * 3;
+ sprite->pos2.x = sprite->data[7] * (gSineTable[sprite->data[1] * 10] >> 3);
+ if (sprite->data[1] == 15)
+ sprite->oam.tileNum += 16;
+
+ if (sprite->data[1] == 18)
+ {
+ sprite->data[1] = 0;
+ sprite->data[0]++;
+ }
+ break;
+ case 6:
+ sprite->pos1.x += sprite->data[7] * 6;
+ if (++sprite->data[1] == 9)
+ {
+ sprite->data[1] = 0;
+ sprite->data[0]++;
+ }
+ break;
+ case 7:
+ sprite->pos1.x += sprite->data[7] * 2;
+ if (++sprite->data[1] == 1)
+ {
+ sprite->data[1] = 0;
+ sprite->data[0]++;
+ }
+ break;
+ case 8:
+ sprite->pos1.x -= sprite->data[7] * 3;
+ if (++sprite->data[1] == 5)
+ DestroyAnimSprite(sprite);
+ break;
+ }
+}
+
+void sub_815EC48(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ task->data[15] = GetAnimBattlerSpriteId(ANIM_ATTACKER);
+ if (!IsContest())
+ {
+ if (IsDoubleBattle() == TRUE)
+ {
+ int x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0);
+ int y = GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimAttacker), 0);
+ if (x > y)
+ task->data[14] = 1;
+ else
+ task->data[14] = -1;
+ }
+ else
+ {
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
+ task->data[14] = -1;
+ else
+ task->data[14] = 1;
+ }
+ }
+ else
+ {
+ task->data[14] = 1;
+ }
+
+ task->func = sub_815ECE4;
+}
+
+static void sub_815ECE4(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ switch (task->data[0])
+ {
+ case 0:
+ if (++task->data[1] == 13)
+ {
+ task->data[1] = 0;
+ task->data[0]++;
+ }
+ break;
+ case 1:
+ gSprites[task->data[15]].pos2.x -= task->data[14] * 3;
+ if (++task->data[1] == 6)
+ {
+ task->data[1] = 0;
+ task->data[0]++;
+ }
+ break;
+ case 2:
+ gSprites[task->data[15]].pos2.x += task->data[14] * 3;
+ if (++task->data[1] == 6)
+ {
+ task->data[1] = 0;
+ task->data[0]++;
+ }
+ break;
+ case 3:
+ if (++task->data[1] == 2)
+ {
+ task->data[1] = 0;
+ if (task->data[2] == 0)
+ {
+ task->data[2]++;
+ task->data[0] = 1;
+ }
+ else
+ {
+ task->data[0]++;
+ }
+ }
+ break;
+ case 4:
+ gSprites[task->data[15]].pos2.x += task->data[14];
+ if (++task->data[1] == 3)
+ {
+ task->data[1] = 0;
+ task->data[0]++;
+ }
+ break;
+ case 5:
+ if (++task->data[1] == 6)
+ {
+ task->data[1] = 0;
+ task->data[0]++;
+ }
+ break;
+ case 6:
+ gSprites[task->data[15]].pos2.x -= task->data[14] * 4;
+ if (++task->data[1] == 5)
+ {
+ task->data[1] = 0;
+ task->data[0]++;
+ }
+ break;
+ case 7:
+ gSprites[task->data[15]].pos2.x += task->data[14] * 4;
+ if (++task->data[1] == 5)
+ {
+ task->data[1] = 0;
+ task->data[0]++;
+ }
+ break;
+ case 8:
+ gSprites[task->data[15]].pos2.x = 0;
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+void sub_815EE84(struct Sprite *sprite)
+{
+ if (gBattleAnimArgs[0] == 0)
+ {
+ InitAnimSpritePos(sprite, TRUE);
+ sprite->data[7] = gBattleAnimAttacker;
+ }
+ else
+ {
+ sprite->data[7] = gBattleAnimTarget;
+ }
+
+ if (GetBattlerSide(sprite->data[7]) == B_SIDE_OPPONENT)
+ sprite->oam.matrixNum = 8;
+
+ sprite->oam.priority = sub_80A8328(sprite->data[7]);
+ sprite->oam.objMode = ST_OAM_OBJ_BLEND;
+ sprite->callback = sub_815EF08;
+}
+
+static void sub_815EF08(struct Sprite *sprite)
+{
+ u16 x, y;
+
+ switch (sprite->data[5])
+ {
+ case 0:
+ switch (sprite->data[6])
+ {
+ default:
+ sprite->data[6] = 0;
+ case 0:
+ case 4:
+ x = sub_80A861C(sprite->data[7], 5) - 4;
+ y = sub_80A861C(sprite->data[7], 3) - 4;
+ break;
+ case 1:
+ x = sub_80A861C(sprite->data[7], 5) - 4;
+ y = sub_80A861C(sprite->data[7], 2) + 4;
+ break;
+ case 2:
+ x = sub_80A861C(sprite->data[7], 4) + 4;
+ y = sub_80A861C(sprite->data[7], 3) - 4;
+ break;
+ case 3:
+ x = sub_80A861C(sprite->data[7], 4) + 4;
+ y = sub_80A861C(sprite->data[7], 2) - 4;
+ break;
+ case 5:
+ x = GetBattlerSpriteCoord(sprite->data[7], 2);
+ y = GetBattlerSpriteCoord(sprite->data[7], 3);
+ break;
+ }
+
+ if (sprite->data[6] == 4)
+ sprite->data[0] = 24;
+ else if (sprite->data[6] == 5)
+ sprite->data[0] = 6;
+ else
+ sprite->data[0] = 12;
+
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[2] = x;
+ sprite->data[3] = sprite->pos1.y;
+ sprite->data[4] = y;
+ InitAnimLinearTranslation(sprite);
+ sprite->data[5]++;
+ break;
+ case 1:
+ if (TranslateAnimLinear(sprite))
+ {
+ switch (sprite->data[6])
+ {
+ default:
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->pos2.y = 0;
+ sprite->pos2.x = 0;
+ sprite->data[0] = 0;
+ sprite->data[5]++;
+ sprite->data[6]++;
+ break;
+ case 4:
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->pos2.y = 0;
+ sprite->pos2.x = 0;
+ sprite->data[5] = 0;
+ sprite->data[6]++;
+ break;
+ case 5:
+ sprite->data[0] = 0;
+ sprite->data[1] = 16;
+ sprite->data[2] = 0;
+ sprite->data[5] = 3;
+ break;
+ }
+ }
+ break;
+ case 2:
+ if (++sprite->data[0] == 4)
+ sprite->data[5] = 0;
+ break;
+ case 3:
+ if (!(sprite->data[0] & 1))
+ sprite->data[1]--;
+ else
+ sprite->data[2]++;
+
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[1], sprite->data[2]));
+ if (++sprite->data[0] == 32)
+ {
+ sprite->invisible = 1;
+ sprite->data[5]++;
+ }
+ break;
+ case 4:
+ DestroyAnimSprite(sprite);
+ break;
+ }
+}
+
+static void sub_815F10C(struct Sprite *sprite)
+{
+ sprite->pos2.x = ((sprite->data[2] - sprite->data[0]) * sprite->data[5]) / sprite->data[4];
+ sprite->pos2.y = ((sprite->data[3] - sprite->data[1]) * sprite->data[5]) / sprite->data[4];
+ if (!(sprite->data[5] & 1))
+ {
+ CreateSprite(
+ &gUnknown_085CE3A0,
+ sprite->pos1.x + sprite->pos2.x,
+ sprite->pos1.y + sprite->pos2.y, 5);
+ }
+
+ if (sprite->data[5] == sprite->data[4])
+ DestroyAnimSprite(sprite);
+
+ sprite->data[5]++;
+}
+
+void sub_815F18C(struct Sprite *sprite)
+{
+ GetBattlerSpriteCoord(gBattleAnimTarget, 2); // unused local variable
+ GetBattlerSpriteCoord(gBattleAnimTarget, 3); // unused local variable
+
+ if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER || IsContest())
+ {
+ sprite->data[0] = sprite->pos1.x - gBattleAnimArgs[0];
+ sprite->data[2] = sprite->pos1.x - gBattleAnimArgs[2];
+ }
+ else
+ {
+ sprite->data[0] = sprite->pos1.x + gBattleAnimArgs[0];
+ sprite->data[2] = sprite->pos1.x + gBattleAnimArgs[2];
+ }
+
+ sprite->data[1] = sprite->pos1.y + gBattleAnimArgs[1];
+ sprite->data[3] = sprite->pos1.y + gBattleAnimArgs[3];
+ sprite->data[4] = gBattleAnimArgs[4];
+ sprite->pos1.x = sprite->data[0];
+ sprite->pos1.y = sprite->data[1];
+ sprite->callback = sub_815F10C;
+}
+
+void AnimTask_MonToSubstitute(u8 taskId)
+{
+ int i;
+ u8 spriteId = GetAnimBattlerSpriteId(0);
+
+ if (gTasks[taskId].data[0] == 0)
+ {
+ PrepareBattlerSpriteForRotScale(spriteId, FALSE);
+ gTasks[taskId].data[1] = 0x100;
+ gTasks[taskId].data[2] = 0x100;
+ gTasks[taskId].data[0]++;
+ }
+ else if (gTasks[taskId].data[0] == 1)
+ {
+ gTasks[taskId].data[1] += 0x60;
+ gTasks[taskId].data[2] -= 0xD;
+ SetSpriteRotScale(spriteId, gTasks[taskId].data[1], gTasks[taskId].data[2], 0);
+ if (++gTasks[taskId].data[3] == 9)
+ {
+ gTasks[taskId].data[3] = 0;
+ ResetSpriteRotScale(spriteId);
+ gSprites[spriteId].invisible = 1;
+ gTasks[taskId].data[0]++;
+ }
+ }
+ else
+ {
+ LoadBattleMonGfxAndAnimate(gBattleAnimAttacker, 0, spriteId);
+ if (IsContest())
+ {
+ gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].affineAnims = gUnknown_082FF6C0;
+ StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[gBattleAnimAttacker]], 0);
+ }
+
+ for (i = 0; i < 16; i++)
+ gTasks[taskId].data[i] = 0;
+
+ gTasks[taskId].func = sub_815F330;
+ }
+}
+
+static void sub_815F330(u8 taskId)
+{
+ u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
+
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ gSprites[spriteId].pos2.y = -200;
+ gSprites[spriteId].pos2.x = 200;
+ gSprites[spriteId].invisible = 0;
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].data[0]++;
+ break;
+ case 1:
+ gTasks[taskId].data[10] += 112;
+ gSprites[spriteId].pos2.y += gTasks[taskId].data[10] >> 8;
+ if (gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y >= -32)
+ gSprites[spriteId].pos2.x = 0;
+
+ if (gSprites[spriteId].pos2.y > 0)
+ gSprites[spriteId].pos2.y = 0;
+
+ if (gSprites[spriteId].pos2.y == 0)
+ {
+ PlaySE12WithPanning(SE_W145B, BattleAnimAdjustPanning(-64));
+ gTasks[taskId].data[10] -= 0x800;
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 2:
+ gTasks[taskId].data[10] -= 112;
+ if (gTasks[taskId].data[10] < 0)
+ gTasks[taskId].data[10] = 0;
+
+ gSprites[spriteId].pos2.y -= gTasks[taskId].data[10] >> 8;
+ if (gTasks[taskId].data[10] == 0)
+ gTasks[taskId].data[0]++;
+ break;
+ case 3:
+ gTasks[taskId].data[10] += 112;
+ gSprites[spriteId].pos2.y += gTasks[taskId].data[10] >> 8;
+ if (gSprites[spriteId].pos2.y > 0)
+ gSprites[spriteId].pos2.y = 0;
+
+ if (gSprites[spriteId].pos2.y == 0)
+ {
+ PlaySE12WithPanning(SE_W145B, BattleAnimAdjustPanning(-64));
+ DestroyAnimVisualTask(taskId);
+ }
+ break;
+ }
+}
+
+void sub_815F48C(struct Sprite *sprite)
+{
+ s16 y2;
+
+ if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER)
+ {
+ sprite->subpriority = GetBattlerSpriteSubpriority(gBattleAnimTarget) - 2;
+ y2 = -144;
+ }
+ else
+ {
+ sprite->subpriority = GetBattlerSpriteSubpriority(gBattleAnimTarget) + 2;
+ y2 = -96;
+ }
+
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ sprite->pos2.y = y2;
+ sprite->callback = sub_815F4F0;
+}
+
+static void sub_815F4F0(struct Sprite *sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ sprite->pos2.y += 10;
+ if (sprite->pos2.y >= 0)
+ {
+ PlaySE12WithPanning(SE_W166, BattleAnimAdjustPanning(63));
+ sprite->pos2.y = 0;
+ sprite->data[0]++;
+ }
+ break;
+ case 1:
+ sprite->data[1] += 4;
+ sprite->pos2.y = -(gSineTable[sprite->data[1]] >> 3);
+ if (sprite->data[1] > 127)
+ {
+ PlaySE12WithPanning(SE_W166, BattleAnimAdjustPanning(63));
+ sprite->data[1] = 0;
+ sprite->pos2.y = 0;
+ sprite->data[0]++;
+ }
+ break;
+ case 2:
+ sprite->data[1] += 6;
+ sprite->pos2.y = -(gSineTable[sprite->data[1]] >> 4);
+ if (sprite->data[1] > 127)
+ {
+ sprite->data[1] = 0;
+ sprite->pos2.y = 0;
+ sprite->data[0]++;
+ }
+ break;
+ case 3:
+ if (++sprite->data[1] > 8)
+ {
+ PlaySE12WithPanning(SE_W043, BattleAnimAdjustPanning(63));
+ sprite->data[1] = 0;
+ sprite->data[0]++;
+ }
+ break;
+ case 4:
+ if (++sprite->data[1] > 8)
+ {
+ sprite->data[1] = 0;
+ sprite->data[2]++;
+ sprite->invisible = sprite->data[2] & 1;
+ if (sprite->data[2] == 7)
+ DestroyAnimSprite(sprite);
+ }
+ break;
+ }
+}
+
+void sub_815F620(u8 taskId)
+{
+ s16 spriteId1, spriteId2;
+
+ if (IsContest())
+ {
+ DestroyAnimVisualTask(taskId);
+ return;
+ }
+
+ spriteId1 = CloneBattlerSpriteWithBlend(ANIM_TARGET);
+ if (spriteId1 < 0)
+ {
+ DestroyAnimVisualTask(taskId);
+ return;
+ }
+
+ spriteId2 = CloneBattlerSpriteWithBlend(ANIM_TARGET);
+ if (spriteId2 < 0)
+ {
+ obj_delete_but_dont_free_vram(&gSprites[spriteId1]);
+ DestroyAnimVisualTask(taskId);
+ return;
+ }
+
+ gSprites[spriteId2].pos2.x += 24;
+ gSprites[spriteId1].pos2.x -= 24;
+ gSprites[spriteId2].data[0] = 0;
+ gSprites[spriteId1].data[0] = 0;
+ gSprites[spriteId2].data[1] = 0;
+ gSprites[spriteId1].data[1] = 0;
+ gSprites[spriteId2].data[2] = 0;
+ gSprites[spriteId1].data[2] = 0;
+ gSprites[spriteId2].data[3] = 16;
+ gSprites[spriteId1].data[3] = -16;
+ gSprites[spriteId2].data[4] = 0;
+ gSprites[spriteId1].data[4] = 128;
+ gSprites[spriteId2].data[5] = 24;
+ gSprites[spriteId1].data[5] = 24;
+ gSprites[spriteId2].data[6] = taskId;
+ gSprites[spriteId1].data[6] = taskId;
+ gSprites[spriteId2].data[7] = 0;
+ gSprites[spriteId1].data[7] = 0;
+ gTasks[taskId].data[0] = 2;
+
+ if (!gBattleSpritesDataPtr->battlerData[gBattleAnimTarget].invisible)
+ {
+ gSprites[spriteId2].invisible = 0;
+ gSprites[spriteId1].invisible = 1;
+ }
+ else
+ {
+ gSprites[spriteId2].invisible = 1;
+ gSprites[spriteId1].invisible = 1;
+ }
+
+
+ gSprites[spriteId2].oam.objMode = ST_OAM_OBJ_NORMAL;
+ gSprites[spriteId1].oam.objMode = ST_OAM_OBJ_NORMAL;
+ gSprites[spriteId2].callback = sub_815F7C4;
+ gSprites[spriteId1].callback = sub_815F7C4;
+ gTasks[taskId].func = sub_815F79C;
+}
+
+static void sub_815F79C(u8 taskId)
+{
+ if (gTasks[taskId].data[0] == 0)
+ DestroyAnimVisualTask(taskId);
+}
+
+static void sub_815F7C4(struct Sprite *sprite)
+{
+ int zero = 0;
+ if (++sprite->data[1] > 1)
+ {
+ sprite->data[1] = 0;
+ if (!gBattleSpritesDataPtr->battlerData[gBattleAnimTarget].invisible)
+ sprite->invisible ^= 1;
+ }
+
+ sprite->data[4] = sprite->data[4] + sprite->data[3];
+ sprite->data[4] &= 0xFF;
+ sprite->pos2.x = Cos(sprite->data[4], sprite->data[5]);
+ switch (sprite->data[0])
+ {
+ case 0:
+ if (++sprite->data[2] == 60)
+ {
+ sprite->data[2] = 0;
+ sprite->data[0]++;
+ }
+ break;
+ case 1:
+ if (++sprite->data[2] > 0)
+ {
+ sprite->data[2] = 0;
+ sprite->data[5] -= 2;
+ if (sprite->data[5] < 0)
+ {
+ gTasks[sprite->data[6]].data[sprite->data[7]]--;
+ obj_delete_but_dont_free_vram(sprite);
+ }
+ }
+ break;
+ }
+}
diff --git a/src/battle_anim_utility_funcs.c b/src/battle_anim_utility_funcs.c
index 85ff692b3..f99b1aeac 100644
--- a/src/battle_anim_utility_funcs.c
+++ b/src/battle_anim_utility_funcs.c
@@ -236,7 +236,7 @@ static void sub_81169F8(u8 taskId)
}
else
{
- task->data[6] = duplicate_obj_of_side_rel2move_in_transparent_mode(task->data[0]);
+ task->data[6] = CloneBattlerSpriteWithBlend(task->data[0]);
if (task->data[6] >= 0)
{
gSprites[task->data[6]].oam.priority = task->data[0] ? 1 : 2;
diff --git a/src/battle_controller_link_opponent.c b/src/battle_controller_link_opponent.c
index 32a9e926a..e81035fc7 100644
--- a/src/battle_controller_link_opponent.c
+++ b/src/battle_controller_link_opponent.c
@@ -1136,7 +1136,7 @@ static void LinkOpponentHandleLoadMonSprite(void)
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(gActiveBattler, 2),
GetBattlerSpriteDefault_Y(gActiveBattler),
- GetBattlerSubpriority(gActiveBattler));
+ GetBattlerSpriteSubpriority(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = -240;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = gActiveBattler;
@@ -1170,7 +1170,7 @@ static void sub_8066494(u8 battlerId, bool8 dontClearSubstituteBit)
&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(battlerId, 2),
GetBattlerSpriteDefault_Y(battlerId),
- GetBattlerSubpriority(battlerId));
+ GetBattlerSpriteSubpriority(battlerId));
gSprites[gUnknown_03005D7C[battlerId]].data[1] = gBattlerSpriteIds[battlerId];
gSprites[gUnknown_03005D7C[battlerId]].data[2] = battlerId;
@@ -1302,7 +1302,7 @@ static void LinkOpponentHandleDrawTrainerPic(void)
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
xPos,
(8 - gTrainerFrontPicCoords[trainerPicId].coords) * 4 + 40,
- GetBattlerSubpriority(gActiveBattler));
+ GetBattlerSpriteSubpriority(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = -240;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 2;
diff --git a/src/battle_controller_link_partner.c b/src/battle_controller_link_partner.c
index e4cc0ac34..533ec39de 100644
--- a/src/battle_controller_link_partner.c
+++ b/src/battle_controller_link_partner.c
@@ -1024,7 +1024,7 @@ static void LinkPartnerHandleLoadMonSprite(void)
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(gActiveBattler, 2),
GetBattlerSpriteDefault_Y(gActiveBattler),
- GetBattlerSubpriority(gActiveBattler));
+ GetBattlerSpriteSubpriority(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = -240;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
@@ -1055,7 +1055,7 @@ static void sub_814CC98(u8 battlerId, bool8 dontClearSubstituteBit)
&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(battlerId, 2),
GetBattlerSpriteDefault_Y(battlerId),
- GetBattlerSubpriority(battlerId));
+ GetBattlerSpriteSubpriority(battlerId));
gSprites[gUnknown_03005D7C[battlerId]].data[1] = gBattlerSpriteIds[battlerId];
gSprites[gUnknown_03005D7C[battlerId]].data[2] = battlerId;
@@ -1143,7 +1143,7 @@ static void LinkPartnerHandleDrawTrainerPic(void)
DecompressTrainerBackPic(trainerPicId, gActiveBattler);
SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler));
- gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, (8 - gTrainerBackPicCoords[trainerPicId].coords) * 4 + 80, GetBattlerSubpriority(gActiveBattler));
+ gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, (8 - gTrainerBackPicCoords[trainerPicId].coords) * 4 + 80, GetBattlerSpriteSubpriority(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240;
diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c
index 516e7192a..30aa3217b 100644
--- a/src/battle_controller_opponent.c
+++ b/src/battle_controller_opponent.c
@@ -1128,7 +1128,7 @@ static void OpponentHandleLoadMonSprite(void)
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(gActiveBattler, 2),
GetBattlerSpriteDefault_Y(gActiveBattler),
- GetBattlerSubpriority(gActiveBattler));
+ GetBattlerSpriteSubpriority(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = -240;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = gActiveBattler;
@@ -1163,7 +1163,7 @@ static void sub_80613DC(u8 battlerId, bool8 dontClearSubstituteBit)
gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(battlerId, 2),
GetBattlerSpriteDefault_Y(battlerId),
- GetBattlerSubpriority(battlerId));
+ GetBattlerSpriteSubpriority(battlerId));
gSprites[gBattlerSpriteIds[battlerId]].data[0] = battlerId;
gSprites[gBattlerSpriteIds[battlerId]].data[2] = species;
@@ -1293,7 +1293,7 @@ static void OpponentHandleDrawTrainerPic(void)
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
xPos,
(8 - gTrainerFrontPicCoords[trainerPicId].coords) * 4 + 40,
- GetBattlerSubpriority(gActiveBattler));
+ GetBattlerSpriteSubpriority(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = -240;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 2;
diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c
index e0e618918..2d8fba63a 100644
--- a/src/battle_controller_player.c
+++ b/src/battle_controller_player.c
@@ -2200,7 +2200,7 @@ static void sub_805B258(u8 battlerId, bool8 dontClearSubstituteBit)
&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(battlerId, 2),
GetBattlerSpriteDefault_Y(battlerId),
- GetBattlerSubpriority(battlerId));
+ GetBattlerSpriteSubpriority(battlerId));
gSprites[gUnknown_03005D7C[battlerId]].data[1] = gBattlerSpriteIds[battlerId];
gSprites[gUnknown_03005D7C[battlerId]].data[2] = battlerId;
@@ -2314,7 +2314,7 @@ static void PlayerHandleDrawTrainerPic(void)
trainerPicId = PlayerGenderToFrontTrainerPicId(gSaveBlock2Ptr->playerGender);
DecompressTrainerFrontPic(trainerPicId, gActiveBattler);
SetMultiuseSpriteTemplateToTrainerFront(trainerPicId, GetBattlerPosition(gActiveBattler));
- gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, yPos, GetBattlerSubpriority(gActiveBattler));
+ gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, yPos, GetBattlerSpriteSubpriority(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[trainerPicId].tag);
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240;
@@ -2329,7 +2329,7 @@ static void PlayerHandleDrawTrainerPic(void)
{
DecompressTrainerBackPic(trainerPicId, gActiveBattler);
SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler));
- gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, yPos, GetBattlerSubpriority(gActiveBattler));
+ gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, yPos, GetBattlerSpriteSubpriority(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240;
diff --git a/src/battle_controller_player_partner.c b/src/battle_controller_player_partner.c
index 2e8a4a079..22018add4 100644
--- a/src/battle_controller_player_partner.c
+++ b/src/battle_controller_player_partner.c
@@ -1211,7 +1211,7 @@ static void PlayerPartnerHandleLoadMonSprite(void)
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(gActiveBattler, 2),
GetBattlerSpriteDefault_Y(gActiveBattler),
- GetBattlerSubpriority(gActiveBattler));
+ GetBattlerSpriteSubpriority(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = -240;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
@@ -1242,7 +1242,7 @@ static void sub_81BD0E4(u8 battlerId, bool8 dontClearSubstituteBit)
&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(battlerId, 2),
GetBattlerSpriteDefault_Y(battlerId),
- GetBattlerSubpriority(battlerId));
+ GetBattlerSpriteSubpriority(battlerId));
gSprites[gUnknown_03005D7C[battlerId]].data[1] = gBattlerSpriteIds[battlerId];
gSprites[gUnknown_03005D7C[battlerId]].data[2] = battlerId;
@@ -1322,7 +1322,7 @@ static void PlayerPartnerHandleDrawTrainerPic(void)
{
DecompressTrainerBackPic(trainerPicId, gActiveBattler);
SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler));
- gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, yPos, GetBattlerSubpriority(gActiveBattler));
+ gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, yPos, GetBattlerSpriteSubpriority(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240;
@@ -1333,7 +1333,7 @@ static void PlayerPartnerHandleDrawTrainerPic(void)
{
DecompressTrainerFrontPic(trainerPicId, gActiveBattler);
SetMultiuseSpriteTemplateToTrainerFront(trainerPicId, GetBattlerPosition(gActiveBattler));
- gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, yPos, GetBattlerSubpriority(gActiveBattler));
+ gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, yPos, GetBattlerSpriteSubpriority(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[trainerPicId].tag);
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240;
diff --git a/src/battle_controller_recorded_opponent.c b/src/battle_controller_recorded_opponent.c
index 52c147c1f..1cf780264 100644
--- a/src/battle_controller_recorded_opponent.c
+++ b/src/battle_controller_recorded_opponent.c
@@ -1119,9 +1119,7 @@ static void RecordedOpponentHandleLoadMonSprite(void)
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(gActiveBattler, 2),
GetBattlerSpriteDefault_Y(gActiveBattler),
- GetBattlerSubpriority(gActiveBattler));
-
-
+ GetBattlerSpriteSubpriority(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = -240;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = gActiveBattler;
@@ -1154,7 +1152,7 @@ static void sub_81885D8(u8 battlerId, bool8 dontClearSubstituteBit)
gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(battlerId, 2),
GetBattlerSpriteDefault_Y(battlerId),
- GetBattlerSubpriority(battlerId));
+ GetBattlerSpriteSubpriority(battlerId));
gSprites[gUnknown_03005D7C[battlerId]].data[1] = gBattlerSpriteIds[battlerId];
gSprites[gUnknown_03005D7C[battlerId]].data[2] = battlerId;
@@ -1251,7 +1249,7 @@ static void RecordedOpponentHandleDrawTrainerPic(void)
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
xPos,
(8 - gTrainerFrontPicCoords[trainerPicId].coords) * 4 + 40,
- GetBattlerSubpriority(gActiveBattler));
+ GetBattlerSpriteSubpriority(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = -240;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 2;
diff --git a/src/battle_controller_recorded_player.c b/src/battle_controller_recorded_player.c
index b11be2e47..a788d6be3 100644
--- a/src/battle_controller_recorded_player.c
+++ b/src/battle_controller_recorded_player.c
@@ -1105,7 +1105,7 @@ static void RecordedPlayerHandleLoadMonSprite(void)
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(gActiveBattler, 2),
GetBattlerSpriteDefault_Y(gActiveBattler),
- GetBattlerSubpriority(gActiveBattler));
+ GetBattlerSpriteSubpriority(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = -240;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
@@ -1136,7 +1136,7 @@ static void sub_818BA6C(u8 battlerId, bool8 dontClearSubstituteBit)
&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(battlerId, 2),
GetBattlerSpriteDefault_Y(battlerId),
- GetBattlerSubpriority(battlerId));
+ GetBattlerSpriteSubpriority(battlerId));
gSprites[gUnknown_03005D7C[battlerId]].data[1] = gBattlerSpriteIds[battlerId];
gSprites[gUnknown_03005D7C[battlerId]].data[2] = battlerId;
@@ -1236,7 +1236,7 @@ static void RecordedPlayerHandleDrawTrainerPic(void)
trainerPicId = PlayerGenderToFrontTrainerPicId(gSaveBlock2Ptr->playerGender);
DecompressTrainerFrontPic(trainerPicId, gActiveBattler);
SetMultiuseSpriteTemplateToTrainerFront(trainerPicId, GetBattlerPosition(gActiveBattler));
- gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, yPos, GetBattlerSubpriority(gActiveBattler));
+ gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, yPos, GetBattlerSpriteSubpriority(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[trainerPicId].tag);
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240;
@@ -1250,7 +1250,7 @@ static void RecordedPlayerHandleDrawTrainerPic(void)
{
DecompressTrainerBackPic(trainerPicId, gActiveBattler);
SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler));
- gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, yPos, GetBattlerSubpriority(gActiveBattler));
+ gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, yPos, GetBattlerSpriteSubpriority(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240;
diff --git a/src/battle_controller_wally.c b/src/battle_controller_wally.c
index 2d5eb69fd..c0b496e47 100644
--- a/src/battle_controller_wally.c
+++ b/src/battle_controller_wally.c
@@ -1464,7 +1464,7 @@ static void sub_816AA80(u8 battlerId)
gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(battlerId, 2),
GetBattlerSpriteDefault_Y(battlerId),
- GetBattlerSubpriority(battlerId));
+ GetBattlerSpriteSubpriority(battlerId));
gSprites[gUnknown_03005D7C[battlerId]].data[1] = gBattlerSpriteIds[battlerId];
gSprites[gUnknown_03005D7C[battlerId]].data[2] = battlerId;
diff --git a/src/battle_factory.c b/src/battle_factory.c
index a693acfb6..801b33ba7 100644
--- a/src/battle_factory.c
+++ b/src/battle_factory.c
@@ -526,7 +526,7 @@ static void sub_81A67EC(void)
}
var_40 = sub_81A6F70(factoryBattleMode, factoryLvlMode);
- currSpecies = 0;
+ currSpecies = SPECIES_NONE;
i = 0;
while (i != PARTY_SIZE)
{
@@ -546,7 +546,7 @@ static void sub_81A67EC(void)
break;
if (species[j] == gFacilityTrainerMons[monSetId].species)
{
- if (currSpecies == 0)
+ if (currSpecies == SPECIES_NONE)
currSpecies = gFacilityTrainerMons[monSetId].species;
else
break;
@@ -561,7 +561,7 @@ static void sub_81A67EC(void)
if (heldItems[j] != 0 && heldItems[j] == gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId])
{
if (gFacilityTrainerMons[monSetId].species == currSpecies)
- currSpecies = 0;
+ currSpecies = SPECIES_NONE;
break;
}
}
@@ -579,7 +579,7 @@ static void sub_81A67EC(void)
static void sub_81A6A08(void)
{
u8 i;
- u8 typesCount[18];
+ u8 typesCount[NUMBER_OF_MON_TYPES];
u8 usedType[2];
gFacilityTrainerMons = gBattleFrontierMons;
diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c
index 8d7ed2dce..f53a6281d 100644
--- a/src/battle_gfx_sfx_util.c
+++ b/src/battle_gfx_sfx_util.c
@@ -1097,14 +1097,14 @@ void sub_805EB9C(u8 affineMode)
if (IsBattlerSpritePresent(i))
{
gSprites[gBattlerSpriteIds[i]].oam.affineMode = affineMode;
- if (affineMode == 0)
+ if (affineMode == ST_OAM_AFFINE_OFF)
{
- gBattleSpritesDataPtr->healthBoxesData[i].field_6 = gSprites[gBattlerSpriteIds[i]].oam.matrixNum;
+ gBattleSpritesDataPtr->healthBoxesData[i].matrixNum = gSprites[gBattlerSpriteIds[i]].oam.matrixNum;
gSprites[gBattlerSpriteIds[i]].oam.matrixNum = 0;
}
else
{
- gSprites[gBattlerSpriteIds[i]].oam.matrixNum = gBattleSpritesDataPtr->healthBoxesData[i].field_6;
+ gSprites[gBattlerSpriteIds[i]].oam.matrixNum = gBattleSpritesDataPtr->healthBoxesData[i].matrixNum;
}
}
}
diff --git a/src/battle_main.c b/src/battle_main.c
index fb2e5105a..16025a455 100644
--- a/src/battle_main.c
+++ b/src/battle_main.c
@@ -2122,12 +2122,12 @@ static void sub_8038B94(u8 taskId)
if (species != SPECIES_EGG && hp != 0 && status == 0)
r7 |= 1 << i * 2;
- if (species == 0)
+ if (species == SPECIES_NONE)
continue;
if (hp != 0 && (species == SPECIES_EGG || status != 0))
r7 |= 2 << i * 2;
- if (species == 0)
+ if (species == SPECIES_NONE)
continue;
if (species != SPECIES_EGG && hp == 0)
r7 |= 3 << i * 2;
diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c
index 475b16c98..f1e7143dc 100644
--- a/src/battle_script_commands.c
+++ b/src/battle_script_commands.c
@@ -8648,7 +8648,7 @@ static void atkAE_healpartystatus(void)
u16 species = GetMonData(&party[i], MON_DATA_SPECIES2);
u8 abilityBit = GetMonData(&party[i], MON_DATA_ALT_ABILITY);
- if (species != 0 && species != SPECIES_EGG)
+ if (species != SPECIES_NONE && species != SPECIES_EGG)
{
u8 ability;
diff --git a/src/battle_tent.c b/src/battle_tent.c
index d66c093e9..c358deaa5 100644
--- a/src/battle_tent.c
+++ b/src/battle_tent.c
@@ -13,6 +13,7 @@
#include "string_util.h"
#include "constants/items.h"
#include "constants/region_map_sections.h"
+#include "constants/species.h"
// This file's functions.
static void sub_81B99D4(void);
@@ -292,7 +293,7 @@ static void sub_81B9EC0(void)
heldItems[i] = 0;
}
gFacilityTrainerMons = gSlateportBattleTentMons;
- currSpecies = 0;
+ currSpecies = SPECIES_NONE;
i = 0;
while (i != PARTY_SIZE)
{
@@ -305,7 +306,7 @@ static void sub_81B9EC0(void)
break;
if (species[j] == gFacilityTrainerMons[monSetId].species)
{
- if (currSpecies == 0)
+ if (currSpecies == SPECIES_NONE)
currSpecies = gFacilityTrainerMons[monSetId].species;
else
break;
@@ -320,7 +321,7 @@ static void sub_81B9EC0(void)
if (heldItems[j] != 0 && heldItems[j] == gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId])
{
if (gFacilityTrainerMons[monSetId].species == currSpecies)
- currSpecies = 0;
+ currSpecies = SPECIES_NONE;
break;
}
}
diff --git a/src/bug.c b/src/bug.c
index 59b31b37d..535e8946a 100644
--- a/src/bug.c
+++ b/src/bug.c
@@ -395,7 +395,7 @@ void AnimTranslateStinger(struct Sprite *sprite)
lVarY = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3];
rot = ArcTan2Neg(lVarX - sprite->pos1.x, lVarY - sprite->pos1.y);
rot += 0xC000;
- sub_80A73E0(sprite, FALSE, 0x100, 0x100, rot);
+ TrySetSpriteRotScale(sprite, FALSE, 0x100, 0x100, rot);
sprite->data[0] = gBattleAnimArgs[4];
sprite->data[2] = lVarX;
@@ -458,7 +458,7 @@ static void AnimMissileArcStep(struct Sprite *sprite)
u16 rotation = ArcTan2Neg(sprite->pos1.x + sprite->pos2.x - x2,
sprite->pos1.y + sprite->pos2.y - y2);
rotation += 0xC000;
- sub_80A73E0(sprite, FALSE, 0x100, 0x100, rotation);
+ TrySetSpriteRotScale(sprite, FALSE, 0x100, 0x100, rotation);
for (i = 0; i < 8; i++)
data[i] = tempData[i];
@@ -479,6 +479,6 @@ void sub_8110994(struct Sprite *sprite)
sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + 18;
}
- StoreSpriteCallbackInData6(sprite, move_anim_8074EE0);
- sprite->callback = sub_80A67BC;
+ StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
+ sprite->callback = RunStoredCallbackWhenAffineAnimEnds;
}
diff --git a/src/contest.c b/src/contest.c
index 201a7472e..3d74109cb 100644
--- a/src/contest.c
+++ b/src/contest.c
@@ -2520,7 +2520,7 @@ u8 sub_80DB174(u16 species, u32 otId, u32 personality, u32 index)
spriteId = CreateSprite(&gMultiuseSpriteTemplate, 0x70, GetBattlerSpriteFinal_Y(2, species, FALSE), 30);
gSprites[spriteId].oam.paletteNum = 2;
gSprites[spriteId].oam.priority = 2;
- gSprites[spriteId].subpriority = GetBattlerSubpriority(2);
+ gSprites[spriteId].subpriority = GetBattlerSpriteSubpriority(2);
gSprites[spriteId].callback = SpriteCallbackDummy;
gSprites[spriteId].data[0] = gSprites[spriteId].oam.paletteNum;
gSprites[spriteId].data[2] = species;
diff --git a/src/data/pokemon_graphics/front_anims.h b/src/data/pokemon_graphics/front_anims.h
index 0e7b75bde..8a42eb5c9 100644
--- a/src/data/pokemon_graphics/front_anims.h
+++ b/src/data/pokemon_graphics/front_anims.h
@@ -1,4 +1,4 @@
-
+
const union AnimCmd gAnimCmd_NONE_1[] =
{
ANIMCMD_FRAME(0, 30),
@@ -6946,446 +6946,449 @@ const union AnimCmd *const gAnims_UNOWN_QMARK[] ={
gAnimCmd_UNOWN_QMARK_1,
};
+#define ANIM_CMD(name) [SPECIES_##name] = gAnims_##name
+#define ANIM_CMD_FULL(name, anims) [SPECIES_##name] = anims
+
const union AnimCmd* const * const gMonAnimationsSpriteAnimsPtrTable[] =
{
- gAnims_NONE,
- gAnims_BULBASAUR,
- gAnims_IVYSAUR,
- gAnims_VENUSAUR,
- gAnims_CHARMANDER,
- gAnims_CHARMELEON,
- gAnims_CHARIZARD,
- gAnims_SQUIRTLE,
- gAnims_WARTORTLE,
- gAnims_BLASTOISE,
- gAnims_CATERPIE,
- gAnims_METAPOD,
- gAnims_BUTTERFREE,
- gAnims_WEEDLE,
- gAnims_KAKUNA,
- gAnims_BEEDRILL,
- gAnims_PIDGEY,
- gAnims_PIDGEOTTO,
- gAnims_PIDGEOT,
- gAnims_RATTATA,
- gAnims_RATICATE,
- gAnims_SPEAROW,
- gAnims_FEAROW,
- gAnims_EKANS,
- gAnims_ARBOK,
- gAnims_PIKACHU,
- gAnims_RAICHU,
- gAnims_SANDSHREW,
- gAnims_SANDSLASH,
- gAnims_NIDORAN_F,
- gAnims_NIDORINA,
- gAnims_NIDOQUEEN,
- gAnims_NIDORAN_M,
- gAnims_NIDORINO,
- gAnims_NIDOKING,
- gAnims_CLEFAIRY,
- gAnims_CLEFABLE,
- gAnims_VULPIX,
- gAnims_NINETALES,
- gAnims_JIGGLYPUFF,
- gAnims_WIGGLYTUFF,
- gAnims_ZUBAT,
- gAnims_GOLBAT,
- gAnims_ODDISH,
- gAnims_GLOOM,
- gAnims_VILEPLUME,
- gAnims_PARAS,
- gAnims_PARASECT,
- gAnims_VENONAT,
- gAnims_VENOMOTH,
- gAnims_DIGLETT,
- gAnims_DUGTRIO,
- gAnims_MEOWTH,
- gAnims_PERSIAN,
- gAnims_PSYDUCK,
- gAnims_GOLDUCK,
- gAnims_MANKEY,
- gAnims_PRIMEAPE,
- gAnims_GROWLITHE,
- gAnims_ARCANINE,
- gAnims_POLIWAG,
- gAnims_POLIWHIRL,
- gAnims_POLIWRATH,
- gAnims_ABRA,
- gAnims_KADABRA,
- gAnims_ALAKAZAM,
- gAnims_MACHOP,
- gAnims_MACHOKE,
- gAnims_MACHAMP,
- gAnims_BELLSPROUT,
- gAnims_WEEPINBELL,
- gAnims_VICTREEBEL,
- gAnims_TENTACOOL,
- gAnims_TENTACRUEL,
- gAnims_GEODUDE,
- gAnims_GRAVELER,
- gAnims_GOLEM,
- gAnims_PONYTA,
- gAnims_RAPIDASH,
- gAnims_SLOWPOKE,
- gAnims_SLOWBRO,
- gAnims_MAGNEMITE,
- gAnims_MAGNETON,
- gAnims_FARFETCHD,
- gAnims_DODUO,
- gAnims_DODRIO,
- gAnims_SEEL,
- gAnims_DEWGONG,
- gAnims_GRIMER,
- gAnims_MUK,
- gAnims_SHELLDER,
- gAnims_CLOYSTER,
- gAnims_GASTLY,
- gAnims_HAUNTER,
- gAnims_GENGAR,
- gAnims_ONIX,
- gAnims_DROWZEE,
- gAnims_HYPNO,
- gAnims_KRABBY,
- gAnims_KINGLER,
- gAnims_VOLTORB,
- gAnims_ELECTRODE,
- gAnims_EXEGGCUTE,
- gAnims_EXEGGUTOR,
- gAnims_CUBONE,
- gAnims_MAROWAK,
- gAnims_HITMONLEE,
- gAnims_HITMONCHAN,
- gAnims_LICKITUNG,
- gAnims_KOFFING,
- gAnims_WEEZING,
- gAnims_RHYHORN,
- gAnims_RHYDON,
- gAnims_CHANSEY,
- gAnims_TANGELA,
- gAnims_KANGASKHAN,
- gAnims_HORSEA,
- gAnims_SEADRA,
- gAnims_GOLDEEN,
- gAnims_SEAKING,
- gAnims_STARYU,
- gAnims_STARMIE,
- gAnims_MR_MIME,
- gAnims_SCYTHER,
- gAnims_JYNX,
- gAnims_ELECTABUZZ,
- gAnims_MAGMAR,
- gAnims_PINSIR,
- gAnims_TAUROS,
- gAnims_MAGIKARP,
- gAnims_GYARADOS,
- gAnims_LAPRAS,
- gAnims_DITTO,
- gAnims_EEVEE,
- gAnims_VAPOREON,
- gAnims_JOLTEON,
- gAnims_FLAREON,
- gAnims_PORYGON,
- gAnims_OMANYTE,
- gAnims_OMASTAR,
- gAnims_KABUTO,
- gAnims_KABUTOPS,
- gAnims_AERODACTYL,
- gAnims_SNORLAX,
- gAnims_ARTICUNO,
- gAnims_ZAPDOS,
- gAnims_MOLTRES,
- gAnims_DRATINI,
- gAnims_DRAGONAIR,
- gAnims_DRAGONITE,
- gAnims_MEWTWO,
- gAnims_MEW,
- gAnims_CHIKORITA,
- gAnims_BAYLEEF,
- gAnims_MEGANIUM,
- gAnims_CYNDAQUIL,
- gAnims_QUILAVA,
- gAnims_TYPHLOSION,
- gAnims_TOTODILE,
- gAnims_CROCONAW,
- gAnims_FERALIGATR,
- gAnims_SENTRET,
- gAnims_FURRET,
- gAnims_HOOTHOOT,
- gAnims_NOCTOWL,
- gAnims_LEDYBA,
- gAnims_LEDIAN,
- gAnims_SPINARAK,
- gAnims_ARIADOS,
- gAnims_CROBAT,
- gAnims_CHINCHOU,
- gAnims_LANTURN,
- gAnims_PICHU,
- gAnims_CLEFFA,
- gAnims_IGGLYBUFF,
- gAnims_TOGEPI,
- gAnims_TOGETIC,
- gAnims_NATU,
- gAnims_XATU,
- gAnims_MAREEP,
- gAnims_FLAAFFY,
- gAnims_AMPHAROS,
- gAnims_BELLOSSOM,
- gAnims_MARILL,
- gAnims_AZUMARILL,
- gAnims_SUDOWOODO,
- gAnims_POLITOED,
- gAnims_HOPPIP,
- gAnims_SKIPLOOM,
- gAnims_JUMPLUFF,
- gAnims_AIPOM,
- gAnims_SUNKERN,
- gAnims_SUNFLORA,
- gAnims_YANMA,
- gAnims_WOOPER,
- gAnims_QUAGSIRE,
- gAnims_ESPEON,
- gAnims_UMBREON,
- gAnims_MURKROW,
- gAnims_SLOWKING,
- gAnims_MISDREAVUS,
- gAnims_UNOWN,
- gAnims_WOBBUFFET,
- gAnims_GIRAFARIG,
- gAnims_PINECO,
- gAnims_FORRETRESS,
- gAnims_DUNSPARCE,
- gAnims_GLIGAR,
- gAnims_STEELIX,
- gAnims_SNUBBULL,
- gAnims_GRANBULL,
- gAnims_QWILFISH,
- gAnims_SCIZOR,
- gAnims_SHUCKLE,
- gAnims_HERACROSS,
- gAnims_SNEASEL,
- gAnims_TEDDIURSA,
- gAnims_URSARING,
- gAnims_SLUGMA,
- gAnims_MAGCARGO,
- gAnims_SWINUB,
- gAnims_PILOSWINE,
- gAnims_CORSOLA,
- gAnims_REMORAID,
- gAnims_OCTILLERY,
- gAnims_DELIBIRD,
- gAnims_MANTINE,
- gAnims_SKARMORY,
- gAnims_HOUNDOUR,
- gAnims_HOUNDOOM,
- gAnims_KINGDRA,
- gAnims_PHANPY,
- gAnims_DONPHAN,
- gAnims_PORYGON2,
- gAnims_STANTLER,
- gAnims_SMEARGLE,
- gAnims_TYROGUE,
- gAnims_HITMONTOP,
- gAnims_SMOOCHUM,
- gAnims_ELEKID,
- gAnims_MAGBY,
- gAnims_MILTANK,
- gAnims_BLISSEY,
- gAnims_RAIKOU,
- gAnims_ENTEI,
- gAnims_SUICUNE,
- gAnims_LARVITAR,
- gAnims_PUPITAR,
- gAnims_TYRANITAR,
- gAnims_LUGIA,
- gAnims_HO_OH,
- gAnims_CELEBI,
- gAnims_OLD_UNOWN_B,
- gAnims_OLD_UNOWN_B,
- gAnims_OLD_UNOWN_B,
- gAnims_OLD_UNOWN_B,
- gAnims_OLD_UNOWN_B,
- gAnims_OLD_UNOWN_B,
- gAnims_OLD_UNOWN_B,
- gAnims_OLD_UNOWN_B,
- gAnims_OLD_UNOWN_B,
- gAnims_OLD_UNOWN_B,
- gAnims_OLD_UNOWN_B,
- gAnims_OLD_UNOWN_B,
- gAnims_OLD_UNOWN_B,
- gAnims_OLD_UNOWN_B,
- gAnims_OLD_UNOWN_B,
- gAnims_OLD_UNOWN_B,
- gAnims_OLD_UNOWN_B,
- gAnims_OLD_UNOWN_B,
- gAnims_OLD_UNOWN_B,
- gAnims_OLD_UNOWN_B,
- gAnims_OLD_UNOWN_B,
- gAnims_OLD_UNOWN_B,
- gAnims_OLD_UNOWN_B,
- gAnims_OLD_UNOWN_B,
- gAnims_OLD_UNOWN_B,
- gAnims_TREECKO,
- gAnims_GROVYLE,
- gAnims_SCEPTILE,
- gAnims_TORCHIC,
- gAnims_COMBUSKEN,
- gAnims_BLAZIKEN,
- gAnims_MUDKIP,
- gAnims_MARSHTOMP,
- gAnims_SWAMPERT,
- gAnims_POOCHYENA,
- gAnims_MIGHTYENA,
- gAnims_ZIGZAGOON,
- gAnims_LINOONE,
- gAnims_WURMPLE,
- gAnims_SILCOON,
- gAnims_BEAUTIFLY,
- gAnims_CASCOON,
- gAnims_DUSTOX,
- gAnims_LOTAD,
- gAnims_LOMBRE,
- gAnims_LUDICOLO,
- gAnims_SEEDOT,
- gAnims_NUZLEAF,
- gAnims_SHIFTRY,
- gAnims_NINCADA,
- gAnims_NINJASK,
- gAnims_SHEDINJA,
- gAnims_TAILLOW,
- gAnims_SWELLOW,
- gAnims_SHROOMISH,
- gAnims_BRELOOM,
- gAnims_SPINDA,
- gAnims_WINGULL,
- gAnims_PELIPPER,
- gAnims_SURSKIT,
- gAnims_MASQUERAIN,
- gAnims_WAILMER,
- gAnims_WAILORD,
- gAnims_SKITTY,
- gAnims_DELCATTY,
- gAnims_KECLEON,
- gAnims_BALTOY,
- gAnims_CLAYDOL,
- gAnims_NOSEPASS,
- gAnims_TORKOAL,
- gAnims_SABLEYE,
- gAnims_BARBOACH,
- gAnims_WHISCASH,
- gAnims_LUVDISC,
- gAnims_CORPHISH,
- gAnims_CRAWDAUNT,
- gAnims_FEEBAS,
- gAnims_MILOTIC,
- gAnims_CARVANHA,
- gAnims_SHARPEDO,
- gAnims_TRAPINCH,
- gAnims_VIBRAVA,
- gAnims_FLYGON,
- gAnims_MAKUHITA,
- gAnims_HARIYAMA,
- gAnims_ELECTRIKE,
- gAnims_MANECTRIC,
- gAnims_NUMEL,
- gAnims_CAMERUPT,
- gAnims_SPHEAL,
- gAnims_SEALEO,
- gAnims_WALREIN,
- gAnims_CACNEA,
- gAnims_CACTURNE,
- gAnims_SNORUNT,
- gAnims_GLALIE,
- gAnims_LUNATONE,
- gAnims_SOLROCK,
- gAnims_AZURILL,
- gAnims_SPOINK,
- gAnims_GRUMPIG,
- gAnims_PLUSLE,
- gAnims_MINUN,
- gAnims_MAWILE,
- gAnims_MEDITITE,
- gAnims_MEDICHAM,
- gAnims_SWABLU,
- gAnims_ALTARIA,
- gAnims_WYNAUT,
- gAnims_DUSKULL,
- gAnims_DUSCLOPS,
- gAnims_ROSELIA,
- gAnims_SLAKOTH,
- gAnims_VIGOROTH,
- gAnims_SLAKING,
- gAnims_GULPIN,
- gAnims_SWALOT,
- gAnims_TROPIUS,
- gAnims_WHISMUR,
- gAnims_LOUDRED,
- gAnims_EXPLOUD,
- gAnims_CLAMPERL,
- gAnims_HUNTAIL,
- gAnims_GOREBYSS,
- gAnims_ABSOL,
- gAnims_SHUPPET,
- gAnims_BANETTE,
- gAnims_SEVIPER,
- gAnims_ZANGOOSE,
- gAnims_RELICANTH,
- gAnims_ARON,
- gAnims_LAIRON,
- gAnims_AGGRON,
- gAnims_CASTFORM,
- gAnims_VOLBEAT,
- gAnims_ILLUMISE,
- gAnims_LILEEP,
- gAnims_CRADILY,
- gAnims_ANORITH,
- gAnims_ARMALDO,
- gAnims_RALTS,
- gAnims_KIRLIA,
- gAnims_GARDEVOIR,
- gAnims_BAGON,
- gAnims_SHELGON,
- gAnims_SALAMENCE,
- gAnims_BELDUM,
- gAnims_METANG,
- gAnims_METAGROSS,
- gAnims_REGIROCK,
- gAnims_REGICE,
- gAnims_REGISTEEL,
- gAnims_KYOGRE,
- gAnims_GROUDON,
- gAnims_RAYQUAZA,
- gAnims_LATIAS,
- gAnims_LATIOS,
- gAnims_JIRACHI,
- gAnims_DEOXYS,
- gAnims_CHIMECHO,
- gAnims_EGG,
- gAnims_UNOWN_B,
- gAnims_UNOWN_C,
- gAnims_UNOWN_D,
- gAnims_UNOWN_E,
- gAnims_UNOWN_F,
- gAnims_UNOWN_G,
- gAnims_UNOWN_H,
- gAnims_UNOWN_I,
- gAnims_UNOWN_J,
- gAnims_UNOWN_K,
- gAnims_UNOWN_L,
- gAnims_UNOWN_M,
- gAnims_UNOWN_N,
- gAnims_UNOWN_O,
- gAnims_UNOWN_P,
- gAnims_UNOWN_Q,
- gAnims_UNOWN_R,
- gAnims_UNOWN_S,
- gAnims_UNOWN_T,
- gAnims_UNOWN_U,
- gAnims_UNOWN_V,
- gAnims_UNOWN_W,
- gAnims_UNOWN_X,
- gAnims_UNOWN_Y,
- gAnims_UNOWN_Z,
- gAnims_UNOWN_EMARK,
- gAnims_UNOWN_QMARK,
+ ANIM_CMD(NONE),
+ ANIM_CMD(BULBASAUR),
+ ANIM_CMD(IVYSAUR),
+ ANIM_CMD(VENUSAUR),
+ ANIM_CMD(CHARMANDER),
+ ANIM_CMD(CHARMELEON),
+ ANIM_CMD(CHARIZARD),
+ ANIM_CMD(SQUIRTLE),
+ ANIM_CMD(WARTORTLE),
+ ANIM_CMD(BLASTOISE),
+ ANIM_CMD(CATERPIE),
+ ANIM_CMD(METAPOD),
+ ANIM_CMD(BUTTERFREE),
+ ANIM_CMD(WEEDLE),
+ ANIM_CMD(KAKUNA),
+ ANIM_CMD(BEEDRILL),
+ ANIM_CMD(PIDGEY),
+ ANIM_CMD(PIDGEOTTO),
+ ANIM_CMD(PIDGEOT),
+ ANIM_CMD(RATTATA),
+ ANIM_CMD(RATICATE),
+ ANIM_CMD(SPEAROW),
+ ANIM_CMD(FEAROW),
+ ANIM_CMD(EKANS),
+ ANIM_CMD(ARBOK),
+ ANIM_CMD(PIKACHU),
+ ANIM_CMD(RAICHU),
+ ANIM_CMD(SANDSHREW),
+ ANIM_CMD(SANDSLASH),
+ ANIM_CMD(NIDORAN_F),
+ ANIM_CMD(NIDORINA),
+ ANIM_CMD(NIDOQUEEN),
+ ANIM_CMD(NIDORAN_M),
+ ANIM_CMD(NIDORINO),
+ ANIM_CMD(NIDOKING),
+ ANIM_CMD(CLEFAIRY),
+ ANIM_CMD(CLEFABLE),
+ ANIM_CMD(VULPIX),
+ ANIM_CMD(NINETALES),
+ ANIM_CMD(JIGGLYPUFF),
+ ANIM_CMD(WIGGLYTUFF),
+ ANIM_CMD(ZUBAT),
+ ANIM_CMD(GOLBAT),
+ ANIM_CMD(ODDISH),
+ ANIM_CMD(GLOOM),
+ ANIM_CMD(VILEPLUME),
+ ANIM_CMD(PARAS),
+ ANIM_CMD(PARASECT),
+ ANIM_CMD(VENONAT),
+ ANIM_CMD(VENOMOTH),
+ ANIM_CMD(DIGLETT),
+ ANIM_CMD(DUGTRIO),
+ ANIM_CMD(MEOWTH),
+ ANIM_CMD(PERSIAN),
+ ANIM_CMD(PSYDUCK),
+ ANIM_CMD(GOLDUCK),
+ ANIM_CMD(MANKEY),
+ ANIM_CMD(PRIMEAPE),
+ ANIM_CMD(GROWLITHE),
+ ANIM_CMD(ARCANINE),
+ ANIM_CMD(POLIWAG),
+ ANIM_CMD(POLIWHIRL),
+ ANIM_CMD(POLIWRATH),
+ ANIM_CMD(ABRA),
+ ANIM_CMD(KADABRA),
+ ANIM_CMD(ALAKAZAM),
+ ANIM_CMD(MACHOP),
+ ANIM_CMD(MACHOKE),
+ ANIM_CMD(MACHAMP),
+ ANIM_CMD(BELLSPROUT),
+ ANIM_CMD(WEEPINBELL),
+ ANIM_CMD(VICTREEBEL),
+ ANIM_CMD(TENTACOOL),
+ ANIM_CMD(TENTACRUEL),
+ ANIM_CMD(GEODUDE),
+ ANIM_CMD(GRAVELER),
+ ANIM_CMD(GOLEM),
+ ANIM_CMD(PONYTA),
+ ANIM_CMD(RAPIDASH),
+ ANIM_CMD(SLOWPOKE),
+ ANIM_CMD(SLOWBRO),
+ ANIM_CMD(MAGNEMITE),
+ ANIM_CMD(MAGNETON),
+ ANIM_CMD(FARFETCHD),
+ ANIM_CMD(DODUO),
+ ANIM_CMD(DODRIO),
+ ANIM_CMD(SEEL),
+ ANIM_CMD(DEWGONG),
+ ANIM_CMD(GRIMER),
+ ANIM_CMD(MUK),
+ ANIM_CMD(SHELLDER),
+ ANIM_CMD(CLOYSTER),
+ ANIM_CMD(GASTLY),
+ ANIM_CMD(HAUNTER),
+ ANIM_CMD(GENGAR),
+ ANIM_CMD(ONIX),
+ ANIM_CMD(DROWZEE),
+ ANIM_CMD(HYPNO),
+ ANIM_CMD(KRABBY),
+ ANIM_CMD(KINGLER),
+ ANIM_CMD(VOLTORB),
+ ANIM_CMD(ELECTRODE),
+ ANIM_CMD(EXEGGCUTE),
+ ANIM_CMD(EXEGGUTOR),
+ ANIM_CMD(CUBONE),
+ ANIM_CMD(MAROWAK),
+ ANIM_CMD(HITMONLEE),
+ ANIM_CMD(HITMONCHAN),
+ ANIM_CMD(LICKITUNG),
+ ANIM_CMD(KOFFING),
+ ANIM_CMD(WEEZING),
+ ANIM_CMD(RHYHORN),
+ ANIM_CMD(RHYDON),
+ ANIM_CMD(CHANSEY),
+ ANIM_CMD(TANGELA),
+ ANIM_CMD(KANGASKHAN),
+ ANIM_CMD(HORSEA),
+ ANIM_CMD(SEADRA),
+ ANIM_CMD(GOLDEEN),
+ ANIM_CMD(SEAKING),
+ ANIM_CMD(STARYU),
+ ANIM_CMD(STARMIE),
+ ANIM_CMD(MR_MIME),
+ ANIM_CMD(SCYTHER),
+ ANIM_CMD(JYNX),
+ ANIM_CMD(ELECTABUZZ),
+ ANIM_CMD(MAGMAR),
+ ANIM_CMD(PINSIR),
+ ANIM_CMD(TAUROS),
+ ANIM_CMD(MAGIKARP),
+ ANIM_CMD(GYARADOS),
+ ANIM_CMD(LAPRAS),
+ ANIM_CMD(DITTO),
+ ANIM_CMD(EEVEE),
+ ANIM_CMD(VAPOREON),
+ ANIM_CMD(JOLTEON),
+ ANIM_CMD(FLAREON),
+ ANIM_CMD(PORYGON),
+ ANIM_CMD(OMANYTE),
+ ANIM_CMD(OMASTAR),
+ ANIM_CMD(KABUTO),
+ ANIM_CMD(KABUTOPS),
+ ANIM_CMD(AERODACTYL),
+ ANIM_CMD(SNORLAX),
+ ANIM_CMD(ARTICUNO),
+ ANIM_CMD(ZAPDOS),
+ ANIM_CMD(MOLTRES),
+ ANIM_CMD(DRATINI),
+ ANIM_CMD(DRAGONAIR),
+ ANIM_CMD(DRAGONITE),
+ ANIM_CMD(MEWTWO),
+ ANIM_CMD(MEW),
+ ANIM_CMD(CHIKORITA),
+ ANIM_CMD(BAYLEEF),
+ ANIM_CMD(MEGANIUM),
+ ANIM_CMD(CYNDAQUIL),
+ ANIM_CMD(QUILAVA),
+ ANIM_CMD(TYPHLOSION),
+ ANIM_CMD(TOTODILE),
+ ANIM_CMD(CROCONAW),
+ ANIM_CMD(FERALIGATR),
+ ANIM_CMD(SENTRET),
+ ANIM_CMD(FURRET),
+ ANIM_CMD(HOOTHOOT),
+ ANIM_CMD(NOCTOWL),
+ ANIM_CMD(LEDYBA),
+ ANIM_CMD(LEDIAN),
+ ANIM_CMD(SPINARAK),
+ ANIM_CMD(ARIADOS),
+ ANIM_CMD(CROBAT),
+ ANIM_CMD(CHINCHOU),
+ ANIM_CMD(LANTURN),
+ ANIM_CMD(PICHU),
+ ANIM_CMD(CLEFFA),
+ ANIM_CMD(IGGLYBUFF),
+ ANIM_CMD(TOGEPI),
+ ANIM_CMD(TOGETIC),
+ ANIM_CMD(NATU),
+ ANIM_CMD(XATU),
+ ANIM_CMD(MAREEP),
+ ANIM_CMD(FLAAFFY),
+ ANIM_CMD(AMPHAROS),
+ ANIM_CMD(BELLOSSOM),
+ ANIM_CMD(MARILL),
+ ANIM_CMD(AZUMARILL),
+ ANIM_CMD(SUDOWOODO),
+ ANIM_CMD(POLITOED),
+ ANIM_CMD(HOPPIP),
+ ANIM_CMD(SKIPLOOM),
+ ANIM_CMD(JUMPLUFF),
+ ANIM_CMD(AIPOM),
+ ANIM_CMD(SUNKERN),
+ ANIM_CMD(SUNFLORA),
+ ANIM_CMD(YANMA),
+ ANIM_CMD(WOOPER),
+ ANIM_CMD(QUAGSIRE),
+ ANIM_CMD(ESPEON),
+ ANIM_CMD(UMBREON),
+ ANIM_CMD(MURKROW),
+ ANIM_CMD(SLOWKING),
+ ANIM_CMD(MISDREAVUS),
+ ANIM_CMD(UNOWN),
+ ANIM_CMD(WOBBUFFET),
+ ANIM_CMD(GIRAFARIG),
+ ANIM_CMD(PINECO),
+ ANIM_CMD(FORRETRESS),
+ ANIM_CMD(DUNSPARCE),
+ ANIM_CMD(GLIGAR),
+ ANIM_CMD(STEELIX),
+ ANIM_CMD(SNUBBULL),
+ ANIM_CMD(GRANBULL),
+ ANIM_CMD(QWILFISH),
+ ANIM_CMD(SCIZOR),
+ ANIM_CMD(SHUCKLE),
+ ANIM_CMD(HERACROSS),
+ ANIM_CMD(SNEASEL),
+ ANIM_CMD(TEDDIURSA),
+ ANIM_CMD(URSARING),
+ ANIM_CMD(SLUGMA),
+ ANIM_CMD(MAGCARGO),
+ ANIM_CMD(SWINUB),
+ ANIM_CMD(PILOSWINE),
+ ANIM_CMD(CORSOLA),
+ ANIM_CMD(REMORAID),
+ ANIM_CMD(OCTILLERY),
+ ANIM_CMD(DELIBIRD),
+ ANIM_CMD(MANTINE),
+ ANIM_CMD(SKARMORY),
+ ANIM_CMD(HOUNDOUR),
+ ANIM_CMD(HOUNDOOM),
+ ANIM_CMD(KINGDRA),
+ ANIM_CMD(PHANPY),
+ ANIM_CMD(DONPHAN),
+ ANIM_CMD(PORYGON2),
+ ANIM_CMD(STANTLER),
+ ANIM_CMD(SMEARGLE),
+ ANIM_CMD(TYROGUE),
+ ANIM_CMD(HITMONTOP),
+ ANIM_CMD(SMOOCHUM),
+ ANIM_CMD(ELEKID),
+ ANIM_CMD(MAGBY),
+ ANIM_CMD(MILTANK),
+ ANIM_CMD(BLISSEY),
+ ANIM_CMD(RAIKOU),
+ ANIM_CMD(ENTEI),
+ ANIM_CMD(SUICUNE),
+ ANIM_CMD(LARVITAR),
+ ANIM_CMD(PUPITAR),
+ ANIM_CMD(TYRANITAR),
+ ANIM_CMD(LUGIA),
+ ANIM_CMD(HO_OH),
+ ANIM_CMD(CELEBI),
+ ANIM_CMD(OLD_UNOWN_B),
+ ANIM_CMD_FULL(OLD_UNOWN_C, gAnims_OLD_UNOWN_B),
+ ANIM_CMD_FULL(OLD_UNOWN_D, gAnims_OLD_UNOWN_B),
+ ANIM_CMD_FULL(OLD_UNOWN_E, gAnims_OLD_UNOWN_B),
+ ANIM_CMD_FULL(OLD_UNOWN_F, gAnims_OLD_UNOWN_B),
+ ANIM_CMD_FULL(OLD_UNOWN_G, gAnims_OLD_UNOWN_B),
+ ANIM_CMD_FULL(OLD_UNOWN_H, gAnims_OLD_UNOWN_B),
+ ANIM_CMD_FULL(OLD_UNOWN_I, gAnims_OLD_UNOWN_B),
+ ANIM_CMD_FULL(OLD_UNOWN_J, gAnims_OLD_UNOWN_B),
+ ANIM_CMD_FULL(OLD_UNOWN_K, gAnims_OLD_UNOWN_B),
+ ANIM_CMD_FULL(OLD_UNOWN_L, gAnims_OLD_UNOWN_B),
+ ANIM_CMD_FULL(OLD_UNOWN_M, gAnims_OLD_UNOWN_B),
+ ANIM_CMD_FULL(OLD_UNOWN_N, gAnims_OLD_UNOWN_B),
+ ANIM_CMD_FULL(OLD_UNOWN_O, gAnims_OLD_UNOWN_B),
+ ANIM_CMD_FULL(OLD_UNOWN_P, gAnims_OLD_UNOWN_B),
+ ANIM_CMD_FULL(OLD_UNOWN_Q, gAnims_OLD_UNOWN_B),
+ ANIM_CMD_FULL(OLD_UNOWN_R, gAnims_OLD_UNOWN_B),
+ ANIM_CMD_FULL(OLD_UNOWN_S, gAnims_OLD_UNOWN_B),
+ ANIM_CMD_FULL(OLD_UNOWN_T, gAnims_OLD_UNOWN_B),
+ ANIM_CMD_FULL(OLD_UNOWN_U, gAnims_OLD_UNOWN_B),
+ ANIM_CMD_FULL(OLD_UNOWN_V, gAnims_OLD_UNOWN_B),
+ ANIM_CMD_FULL(OLD_UNOWN_W, gAnims_OLD_UNOWN_B),
+ ANIM_CMD_FULL(OLD_UNOWN_X, gAnims_OLD_UNOWN_B),
+ ANIM_CMD_FULL(OLD_UNOWN_Y, gAnims_OLD_UNOWN_B),
+ ANIM_CMD_FULL(OLD_UNOWN_Z, gAnims_OLD_UNOWN_B),
+ ANIM_CMD(TREECKO),
+ ANIM_CMD(GROVYLE),
+ ANIM_CMD(SCEPTILE),
+ ANIM_CMD(TORCHIC),
+ ANIM_CMD(COMBUSKEN),
+ ANIM_CMD(BLAZIKEN),
+ ANIM_CMD(MUDKIP),
+ ANIM_CMD(MARSHTOMP),
+ ANIM_CMD(SWAMPERT),
+ ANIM_CMD(POOCHYENA),
+ ANIM_CMD(MIGHTYENA),
+ ANIM_CMD(ZIGZAGOON),
+ ANIM_CMD(LINOONE),
+ ANIM_CMD(WURMPLE),
+ ANIM_CMD(SILCOON),
+ ANIM_CMD(BEAUTIFLY),
+ ANIM_CMD(CASCOON),
+ ANIM_CMD(DUSTOX),
+ ANIM_CMD(LOTAD),
+ ANIM_CMD(LOMBRE),
+ ANIM_CMD(LUDICOLO),
+ ANIM_CMD(SEEDOT),
+ ANIM_CMD(NUZLEAF),
+ ANIM_CMD(SHIFTRY),
+ ANIM_CMD(NINCADA),
+ ANIM_CMD(NINJASK),
+ ANIM_CMD(SHEDINJA),
+ ANIM_CMD(TAILLOW),
+ ANIM_CMD(SWELLOW),
+ ANIM_CMD(SHROOMISH),
+ ANIM_CMD(BRELOOM),
+ ANIM_CMD(SPINDA),
+ ANIM_CMD(WINGULL),
+ ANIM_CMD(PELIPPER),
+ ANIM_CMD(SURSKIT),
+ ANIM_CMD(MASQUERAIN),
+ ANIM_CMD(WAILMER),
+ ANIM_CMD(WAILORD),
+ ANIM_CMD(SKITTY),
+ ANIM_CMD(DELCATTY),
+ ANIM_CMD(KECLEON),
+ ANIM_CMD(BALTOY),
+ ANIM_CMD(CLAYDOL),
+ ANIM_CMD(NOSEPASS),
+ ANIM_CMD(TORKOAL),
+ ANIM_CMD(SABLEYE),
+ ANIM_CMD(BARBOACH),
+ ANIM_CMD(WHISCASH),
+ ANIM_CMD(LUVDISC),
+ ANIM_CMD(CORPHISH),
+ ANIM_CMD(CRAWDAUNT),
+ ANIM_CMD(FEEBAS),
+ ANIM_CMD(MILOTIC),
+ ANIM_CMD(CARVANHA),
+ ANIM_CMD(SHARPEDO),
+ ANIM_CMD(TRAPINCH),
+ ANIM_CMD(VIBRAVA),
+ ANIM_CMD(FLYGON),
+ ANIM_CMD(MAKUHITA),
+ ANIM_CMD(HARIYAMA),
+ ANIM_CMD(ELECTRIKE),
+ ANIM_CMD(MANECTRIC),
+ ANIM_CMD(NUMEL),
+ ANIM_CMD(CAMERUPT),
+ ANIM_CMD(SPHEAL),
+ ANIM_CMD(SEALEO),
+ ANIM_CMD(WALREIN),
+ ANIM_CMD(CACNEA),
+ ANIM_CMD(CACTURNE),
+ ANIM_CMD(SNORUNT),
+ ANIM_CMD(GLALIE),
+ ANIM_CMD(LUNATONE),
+ ANIM_CMD(SOLROCK),
+ ANIM_CMD(AZURILL),
+ ANIM_CMD(SPOINK),
+ ANIM_CMD(GRUMPIG),
+ ANIM_CMD(PLUSLE),
+ ANIM_CMD(MINUN),
+ ANIM_CMD(MAWILE),
+ ANIM_CMD(MEDITITE),
+ ANIM_CMD(MEDICHAM),
+ ANIM_CMD(SWABLU),
+ ANIM_CMD(ALTARIA),
+ ANIM_CMD(WYNAUT),
+ ANIM_CMD(DUSKULL),
+ ANIM_CMD(DUSCLOPS),
+ ANIM_CMD(ROSELIA),
+ ANIM_CMD(SLAKOTH),
+ ANIM_CMD(VIGOROTH),
+ ANIM_CMD(SLAKING),
+ ANIM_CMD(GULPIN),
+ ANIM_CMD(SWALOT),
+ ANIM_CMD(TROPIUS),
+ ANIM_CMD(WHISMUR),
+ ANIM_CMD(LOUDRED),
+ ANIM_CMD(EXPLOUD),
+ ANIM_CMD(CLAMPERL),
+ ANIM_CMD(HUNTAIL),
+ ANIM_CMD(GOREBYSS),
+ ANIM_CMD(ABSOL),
+ ANIM_CMD(SHUPPET),
+ ANIM_CMD(BANETTE),
+ ANIM_CMD(SEVIPER),
+ ANIM_CMD(ZANGOOSE),
+ ANIM_CMD(RELICANTH),
+ ANIM_CMD(ARON),
+ ANIM_CMD(LAIRON),
+ ANIM_CMD(AGGRON),
+ ANIM_CMD(CASTFORM),
+ ANIM_CMD(VOLBEAT),
+ ANIM_CMD(ILLUMISE),
+ ANIM_CMD(LILEEP),
+ ANIM_CMD(CRADILY),
+ ANIM_CMD(ANORITH),
+ ANIM_CMD(ARMALDO),
+ ANIM_CMD(RALTS),
+ ANIM_CMD(KIRLIA),
+ ANIM_CMD(GARDEVOIR),
+ ANIM_CMD(BAGON),
+ ANIM_CMD(SHELGON),
+ ANIM_CMD(SALAMENCE),
+ ANIM_CMD(BELDUM),
+ ANIM_CMD(METANG),
+ ANIM_CMD(METAGROSS),
+ ANIM_CMD(REGIROCK),
+ ANIM_CMD(REGICE),
+ ANIM_CMD(REGISTEEL),
+ ANIM_CMD(KYOGRE),
+ ANIM_CMD(GROUDON),
+ ANIM_CMD(RAYQUAZA),
+ ANIM_CMD(LATIAS),
+ ANIM_CMD(LATIOS),
+ ANIM_CMD(JIRACHI),
+ ANIM_CMD(DEOXYS),
+ ANIM_CMD(CHIMECHO),
+ ANIM_CMD(EGG),
+ ANIM_CMD(UNOWN_B),
+ ANIM_CMD(UNOWN_C),
+ ANIM_CMD(UNOWN_D),
+ ANIM_CMD(UNOWN_E),
+ ANIM_CMD(UNOWN_F),
+ ANIM_CMD(UNOWN_G),
+ ANIM_CMD(UNOWN_H),
+ ANIM_CMD(UNOWN_I),
+ ANIM_CMD(UNOWN_J),
+ ANIM_CMD(UNOWN_K),
+ ANIM_CMD(UNOWN_L),
+ ANIM_CMD(UNOWN_M),
+ ANIM_CMD(UNOWN_N),
+ ANIM_CMD(UNOWN_O),
+ ANIM_CMD(UNOWN_P),
+ ANIM_CMD(UNOWN_Q),
+ ANIM_CMD(UNOWN_R),
+ ANIM_CMD(UNOWN_S),
+ ANIM_CMD(UNOWN_T),
+ ANIM_CMD(UNOWN_U),
+ ANIM_CMD(UNOWN_V),
+ ANIM_CMD(UNOWN_W),
+ ANIM_CMD(UNOWN_X),
+ ANIM_CMD(UNOWN_Y),
+ ANIM_CMD(UNOWN_Z),
+ ANIM_CMD(UNOWN_EMARK),
+ ANIM_CMD(UNOWN_QMARK),
};
diff --git a/src/data/pokemon_graphics/still_front_pic_table.h b/src/data/pokemon_graphics/still_front_pic_table.h
index a345a3d43..308a872b4 100644
--- a/src/data/pokemon_graphics/still_front_pic_table.h
+++ b/src/data/pokemon_graphics/still_front_pic_table.h
@@ -1,446 +1,448 @@
+#define STILL_FRONT_PIC(species, frontpic) [SPECIES_##species] = {frontpic, 0x800, SPECIES_##species}
+
const struct CompressedSpriteSheet gMonStillFrontPicTable[] =
-{ //.data .size .tag
- gMonStillFrontPic_CircledQuestionMark, 0x800, 0,
- gMonStillFrontPic_Bulbasaur, 0x800, 1,
- gMonStillFrontPic_Ivysaur, 0x800, 2,
- gMonStillFrontPic_Venusaur, 0x800, 3,
- gMonStillFrontPic_Charmander, 0x800, 4,
- gMonStillFrontPic_Charmeleon, 0x800, 5,
- gMonStillFrontPic_Charizard, 0x800, 6,
- gMonStillFrontPic_Squirtle, 0x800, 7,
- gMonStillFrontPic_Wartortle, 0x800, 8,
- gMonStillFrontPic_Blastoise, 0x800, 9,
- gMonStillFrontPic_Caterpie, 0x800, 10,
- gMonStillFrontPic_Metapod, 0x800, 11,
- gMonStillFrontPic_Butterfree, 0x800, 12,
- gMonStillFrontPic_Weedle, 0x800, 13,
- gMonStillFrontPic_Kakuna, 0x800, 14,
- gMonStillFrontPic_Beedrill, 0x800, 15,
- gMonStillFrontPic_Pidgey, 0x800, 16,
- gMonStillFrontPic_Pidgeotto, 0x800, 17,
- gMonStillFrontPic_Pidgeot, 0x800, 18,
- gMonStillFrontPic_Rattata, 0x800, 19,
- gMonStillFrontPic_Raticate, 0x800, 20,
- gMonStillFrontPic_Spearow, 0x800, 21,
- gMonStillFrontPic_Fearow, 0x800, 22,
- gMonStillFrontPic_Ekans, 0x800, 23,
- gMonStillFrontPic_Arbok, 0x800, 24,
- gMonStillFrontPic_Pikachu, 0x800, 25,
- gMonStillFrontPic_Raichu, 0x800, 26,
- gMonStillFrontPic_Sandshrew, 0x800, 27,
- gMonStillFrontPic_Sandslash, 0x800, 28,
- gMonStillFrontPic_NidoranF, 0x800, 29,
- gMonStillFrontPic_Nidorina, 0x800, 30,
- gMonStillFrontPic_Nidoqueen, 0x800, 31,
- gMonStillFrontPic_NidoranM, 0x800, 32,
- gMonStillFrontPic_Nidorino, 0x800, 33,
- gMonStillFrontPic_Nidoking, 0x800, 34,
- gMonStillFrontPic_Clefairy, 0x800, 35,
- gMonStillFrontPic_Clefable, 0x800, 36,
- gMonStillFrontPic_Vulpix, 0x800, 37,
- gMonStillFrontPic_Ninetales, 0x800, 38,
- gMonStillFrontPic_Jigglypuff, 0x800, 39,
- gMonStillFrontPic_Wigglytuff, 0x800, 40,
- gMonStillFrontPic_Zubat, 0x800, 41,
- gMonStillFrontPic_Golbat, 0x800, 42,
- gMonStillFrontPic_Oddish, 0x800, 43,
- gMonStillFrontPic_Gloom, 0x800, 44,
- gMonStillFrontPic_Vileplume, 0x800, 45,
- gMonStillFrontPic_Paras, 0x800, 46,
- gMonStillFrontPic_Parasect, 0x800, 47,
- gMonStillFrontPic_Venonat, 0x800, 48,
- gMonStillFrontPic_Venomoth, 0x800, 49,
- gMonStillFrontPic_Diglett, 0x800, 50,
- gMonStillFrontPic_Dugtrio, 0x800, 51,
- gMonStillFrontPic_Meowth, 0x800, 52,
- gMonStillFrontPic_Persian, 0x800, 53,
- gMonStillFrontPic_Psyduck, 0x800, 54,
- gMonStillFrontPic_Golduck, 0x800, 55,
- gMonStillFrontPic_Mankey, 0x800, 56,
- gMonStillFrontPic_Primeape, 0x800, 57,
- gMonStillFrontPic_Growlithe, 0x800, 58,
- gMonStillFrontPic_Arcanine, 0x800, 59,
- gMonStillFrontPic_Poliwag, 0x800, 60,
- gMonStillFrontPic_Poliwhirl, 0x800, 61,
- gMonStillFrontPic_Poliwrath, 0x800, 62,
- gMonStillFrontPic_Abra, 0x800, 63,
- gMonStillFrontPic_Kadabra, 0x800, 64,
- gMonStillFrontPic_Alakazam, 0x800, 65,
- gMonStillFrontPic_Machop, 0x800, 66,
- gMonStillFrontPic_Machoke, 0x800, 67,
- gMonStillFrontPic_Machamp, 0x800, 68,
- gMonStillFrontPic_Bellsprout, 0x800, 69,
- gMonStillFrontPic_Weepinbell, 0x800, 70,
- gMonStillFrontPic_Victreebel, 0x800, 71,
- gMonStillFrontPic_Tentacool, 0x800, 72,
- gMonStillFrontPic_Tentacruel, 0x800, 73,
- gMonStillFrontPic_Geodude, 0x800, 74,
- gMonStillFrontPic_Graveler, 0x800, 75,
- gMonStillFrontPic_Golem, 0x800, 76,
- gMonStillFrontPic_Ponyta, 0x800, 77,
- gMonStillFrontPic_Rapidash, 0x800, 78,
- gMonStillFrontPic_Slowpoke, 0x800, 79,
- gMonStillFrontPic_Slowbro, 0x800, 80,
- gMonStillFrontPic_Magnemite, 0x800, 81,
- gMonStillFrontPic_Magneton, 0x800, 82,
- gMonStillFrontPic_Farfetchd, 0x800, 83,
- gMonStillFrontPic_Doduo, 0x800, 84,
- gMonStillFrontPic_Dodrio, 0x800, 85,
- gMonStillFrontPic_Seel, 0x800, 86,
- gMonStillFrontPic_Dewgong, 0x800, 87,
- gMonStillFrontPic_Grimer, 0x800, 88,
- gMonStillFrontPic_Muk, 0x800, 89,
- gMonStillFrontPic_Shellder, 0x800, 90,
- gMonStillFrontPic_Cloyster, 0x800, 91,
- gMonStillFrontPic_Gastly, 0x800, 92,
- gMonStillFrontPic_Haunter, 0x800, 93,
- gMonStillFrontPic_Gengar, 0x800, 94,
- gMonStillFrontPic_Onix, 0x800, 95,
- gMonStillFrontPic_Drowzee, 0x800, 96,
- gMonStillFrontPic_Hypno, 0x800, 97,
- gMonStillFrontPic_Krabby, 0x800, 98,
- gMonStillFrontPic_Kingler, 0x800, 99,
- gMonStillFrontPic_Voltorb, 0x800, 100,
- gMonStillFrontPic_Electrode, 0x800, 101,
- gMonStillFrontPic_Exeggcute, 0x800, 102,
- gMonStillFrontPic_Exeggutor, 0x800, 103,
- gMonStillFrontPic_Cubone, 0x800, 104,
- gMonStillFrontPic_Marowak, 0x800, 105,
- gMonStillFrontPic_Hitmonlee, 0x800, 106,
- gMonStillFrontPic_Hitmonchan, 0x800, 107,
- gMonStillFrontPic_Lickitung, 0x800, 108,
- gMonStillFrontPic_Koffing, 0x800, 109,
- gMonStillFrontPic_Weezing, 0x800, 110,
- gMonStillFrontPic_Rhyhorn, 0x800, 111,
- gMonStillFrontPic_Rhydon, 0x800, 112,
- gMonStillFrontPic_Chansey, 0x800, 113,
- gMonStillFrontPic_Tangela, 0x800, 114,
- gMonStillFrontPic_Kangaskhan, 0x800, 115,
- gMonStillFrontPic_Horsea, 0x800, 116,
- gMonStillFrontPic_Seadra, 0x800, 117,
- gMonStillFrontPic_Goldeen, 0x800, 118,
- gMonStillFrontPic_Seaking, 0x800, 119,
- gMonStillFrontPic_Staryu, 0x800, 120,
- gMonStillFrontPic_Starmie, 0x800, 121,
- gMonStillFrontPic_Mrmime, 0x800, 122,
- gMonStillFrontPic_Scyther, 0x800, 123,
- gMonStillFrontPic_Jynx, 0x800, 124,
- gMonStillFrontPic_Electabuzz, 0x800, 125,
- gMonStillFrontPic_Magmar, 0x800, 126,
- gMonStillFrontPic_Pinsir, 0x800, 127,
- gMonStillFrontPic_Tauros, 0x800, 128,
- gMonStillFrontPic_Magikarp, 0x800, 129,
- gMonStillFrontPic_Gyarados, 0x800, 130,
- gMonStillFrontPic_Lapras, 0x800, 131,
- gMonStillFrontPic_Ditto, 0x800, 132,
- gMonStillFrontPic_Eevee, 0x800, 133,
- gMonStillFrontPic_Vaporeon, 0x800, 134,
- gMonStillFrontPic_Jolteon, 0x800, 135,
- gMonStillFrontPic_Flareon, 0x800, 136,
- gMonStillFrontPic_Porygon, 0x800, 137,
- gMonStillFrontPic_Omanyte, 0x800, 138,
- gMonStillFrontPic_Omastar, 0x800, 139,
- gMonStillFrontPic_Kabuto, 0x800, 140,
- gMonStillFrontPic_Kabutops, 0x800, 141,
- gMonStillFrontPic_Aerodactyl, 0x800, 142,
- gMonStillFrontPic_Snorlax, 0x800, 143,
- gMonStillFrontPic_Articuno, 0x800, 144,
- gMonStillFrontPic_Zapdos, 0x800, 145,
- gMonStillFrontPic_Moltres, 0x800, 146,
- gMonStillFrontPic_Dratini, 0x800, 147,
- gMonStillFrontPic_Dragonair, 0x800, 148,
- gMonStillFrontPic_Dragonite, 0x800, 149,
- gMonStillFrontPic_Mewtwo, 0x800, 150,
- gMonStillFrontPic_Mew, 0x800, 151,
+{
+ STILL_FRONT_PIC(NONE, gMonStillFrontPic_CircledQuestionMark),
+ STILL_FRONT_PIC(BULBASAUR, gMonStillFrontPic_Bulbasaur),
+ STILL_FRONT_PIC(IVYSAUR, gMonStillFrontPic_Ivysaur),
+ STILL_FRONT_PIC(VENUSAUR, gMonStillFrontPic_Venusaur),
+ STILL_FRONT_PIC(CHARMANDER, gMonStillFrontPic_Charmander),
+ STILL_FRONT_PIC(CHARMELEON, gMonStillFrontPic_Charmeleon),
+ STILL_FRONT_PIC(CHARIZARD, gMonStillFrontPic_Charizard),
+ STILL_FRONT_PIC(SQUIRTLE, gMonStillFrontPic_Squirtle),
+ STILL_FRONT_PIC(WARTORTLE, gMonStillFrontPic_Wartortle),
+ STILL_FRONT_PIC(BLASTOISE, gMonStillFrontPic_Blastoise),
+ STILL_FRONT_PIC(CATERPIE, gMonStillFrontPic_Caterpie),
+ STILL_FRONT_PIC(METAPOD, gMonStillFrontPic_Metapod),
+ STILL_FRONT_PIC(BUTTERFREE, gMonStillFrontPic_Butterfree),
+ STILL_FRONT_PIC(WEEDLE, gMonStillFrontPic_Weedle),
+ STILL_FRONT_PIC(KAKUNA, gMonStillFrontPic_Kakuna),
+ STILL_FRONT_PIC(BEEDRILL, gMonStillFrontPic_Beedrill),
+ STILL_FRONT_PIC(PIDGEY, gMonStillFrontPic_Pidgey),
+ STILL_FRONT_PIC(PIDGEOTTO, gMonStillFrontPic_Pidgeotto),
+ STILL_FRONT_PIC(PIDGEOT, gMonStillFrontPic_Pidgeot),
+ STILL_FRONT_PIC(RATTATA, gMonStillFrontPic_Rattata),
+ STILL_FRONT_PIC(RATICATE, gMonStillFrontPic_Raticate),
+ STILL_FRONT_PIC(SPEAROW, gMonStillFrontPic_Spearow),
+ STILL_FRONT_PIC(FEAROW, gMonStillFrontPic_Fearow),
+ STILL_FRONT_PIC(EKANS, gMonStillFrontPic_Ekans),
+ STILL_FRONT_PIC(ARBOK, gMonStillFrontPic_Arbok),
+ STILL_FRONT_PIC(PIKACHU, gMonStillFrontPic_Pikachu),
+ STILL_FRONT_PIC(RAICHU, gMonStillFrontPic_Raichu),
+ STILL_FRONT_PIC(SANDSHREW, gMonStillFrontPic_Sandshrew),
+ STILL_FRONT_PIC(SANDSLASH, gMonStillFrontPic_Sandslash),
+ STILL_FRONT_PIC(NIDORAN_F, gMonStillFrontPic_NidoranF),
+ STILL_FRONT_PIC(NIDORINA, gMonStillFrontPic_Nidorina),
+ STILL_FRONT_PIC(NIDOQUEEN, gMonStillFrontPic_Nidoqueen),
+ STILL_FRONT_PIC(NIDORAN_M, gMonStillFrontPic_NidoranM),
+ STILL_FRONT_PIC(NIDORINO, gMonStillFrontPic_Nidorino),
+ STILL_FRONT_PIC(NIDOKING, gMonStillFrontPic_Nidoking),
+ STILL_FRONT_PIC(CLEFAIRY, gMonStillFrontPic_Clefairy),
+ STILL_FRONT_PIC(CLEFABLE, gMonStillFrontPic_Clefable),
+ STILL_FRONT_PIC(VULPIX, gMonStillFrontPic_Vulpix),
+ STILL_FRONT_PIC(NINETALES, gMonStillFrontPic_Ninetales),
+ STILL_FRONT_PIC(JIGGLYPUFF, gMonStillFrontPic_Jigglypuff),
+ STILL_FRONT_PIC(WIGGLYTUFF, gMonStillFrontPic_Wigglytuff),
+ STILL_FRONT_PIC(ZUBAT, gMonStillFrontPic_Zubat),
+ STILL_FRONT_PIC(GOLBAT, gMonStillFrontPic_Golbat),
+ STILL_FRONT_PIC(ODDISH, gMonStillFrontPic_Oddish),
+ STILL_FRONT_PIC(GLOOM, gMonStillFrontPic_Gloom),
+ STILL_FRONT_PIC(VILEPLUME, gMonStillFrontPic_Vileplume),
+ STILL_FRONT_PIC(PARAS, gMonStillFrontPic_Paras),
+ STILL_FRONT_PIC(PARASECT, gMonStillFrontPic_Parasect),
+ STILL_FRONT_PIC(VENONAT, gMonStillFrontPic_Venonat),
+ STILL_FRONT_PIC(VENOMOTH, gMonStillFrontPic_Venomoth),
+ STILL_FRONT_PIC(DIGLETT, gMonStillFrontPic_Diglett),
+ STILL_FRONT_PIC(DUGTRIO, gMonStillFrontPic_Dugtrio),
+ STILL_FRONT_PIC(MEOWTH, gMonStillFrontPic_Meowth),
+ STILL_FRONT_PIC(PERSIAN, gMonStillFrontPic_Persian),
+ STILL_FRONT_PIC(PSYDUCK, gMonStillFrontPic_Psyduck),
+ STILL_FRONT_PIC(GOLDUCK, gMonStillFrontPic_Golduck),
+ STILL_FRONT_PIC(MANKEY, gMonStillFrontPic_Mankey),
+ STILL_FRONT_PIC(PRIMEAPE, gMonStillFrontPic_Primeape),
+ STILL_FRONT_PIC(GROWLITHE, gMonStillFrontPic_Growlithe),
+ STILL_FRONT_PIC(ARCANINE, gMonStillFrontPic_Arcanine),
+ STILL_FRONT_PIC(POLIWAG, gMonStillFrontPic_Poliwag),
+ STILL_FRONT_PIC(POLIWHIRL, gMonStillFrontPic_Poliwhirl),
+ STILL_FRONT_PIC(POLIWRATH, gMonStillFrontPic_Poliwrath),
+ STILL_FRONT_PIC(ABRA, gMonStillFrontPic_Abra),
+ STILL_FRONT_PIC(KADABRA, gMonStillFrontPic_Kadabra),
+ STILL_FRONT_PIC(ALAKAZAM, gMonStillFrontPic_Alakazam),
+ STILL_FRONT_PIC(MACHOP, gMonStillFrontPic_Machop),
+ STILL_FRONT_PIC(MACHOKE, gMonStillFrontPic_Machoke),
+ STILL_FRONT_PIC(MACHAMP, gMonStillFrontPic_Machamp),
+ STILL_FRONT_PIC(BELLSPROUT, gMonStillFrontPic_Bellsprout),
+ STILL_FRONT_PIC(WEEPINBELL, gMonStillFrontPic_Weepinbell),
+ STILL_FRONT_PIC(VICTREEBEL, gMonStillFrontPic_Victreebel),
+ STILL_FRONT_PIC(TENTACOOL, gMonStillFrontPic_Tentacool),
+ STILL_FRONT_PIC(TENTACRUEL, gMonStillFrontPic_Tentacruel),
+ STILL_FRONT_PIC(GEODUDE, gMonStillFrontPic_Geodude),
+ STILL_FRONT_PIC(GRAVELER, gMonStillFrontPic_Graveler),
+ STILL_FRONT_PIC(GOLEM, gMonStillFrontPic_Golem),
+ STILL_FRONT_PIC(PONYTA, gMonStillFrontPic_Ponyta),
+ STILL_FRONT_PIC(RAPIDASH, gMonStillFrontPic_Rapidash),
+ STILL_FRONT_PIC(SLOWPOKE, gMonStillFrontPic_Slowpoke),
+ STILL_FRONT_PIC(SLOWBRO, gMonStillFrontPic_Slowbro),
+ STILL_FRONT_PIC(MAGNEMITE, gMonStillFrontPic_Magnemite),
+ STILL_FRONT_PIC(MAGNETON, gMonStillFrontPic_Magneton),
+ STILL_FRONT_PIC(FARFETCHD, gMonStillFrontPic_Farfetchd),
+ STILL_FRONT_PIC(DODUO, gMonStillFrontPic_Doduo),
+ STILL_FRONT_PIC(DODRIO, gMonStillFrontPic_Dodrio),
+ STILL_FRONT_PIC(SEEL, gMonStillFrontPic_Seel),
+ STILL_FRONT_PIC(DEWGONG, gMonStillFrontPic_Dewgong),
+ STILL_FRONT_PIC(GRIMER, gMonStillFrontPic_Grimer),
+ STILL_FRONT_PIC(MUK, gMonStillFrontPic_Muk),
+ STILL_FRONT_PIC(SHELLDER, gMonStillFrontPic_Shellder),
+ STILL_FRONT_PIC(CLOYSTER, gMonStillFrontPic_Cloyster),
+ STILL_FRONT_PIC(GASTLY, gMonStillFrontPic_Gastly),
+ STILL_FRONT_PIC(HAUNTER, gMonStillFrontPic_Haunter),
+ STILL_FRONT_PIC(GENGAR, gMonStillFrontPic_Gengar),
+ STILL_FRONT_PIC(ONIX, gMonStillFrontPic_Onix),
+ STILL_FRONT_PIC(DROWZEE, gMonStillFrontPic_Drowzee),
+ STILL_FRONT_PIC(HYPNO, gMonStillFrontPic_Hypno),
+ STILL_FRONT_PIC(KRABBY, gMonStillFrontPic_Krabby),
+ STILL_FRONT_PIC(KINGLER, gMonStillFrontPic_Kingler),
+ STILL_FRONT_PIC(VOLTORB, gMonStillFrontPic_Voltorb),
+ STILL_FRONT_PIC(ELECTRODE, gMonStillFrontPic_Electrode),
+ STILL_FRONT_PIC(EXEGGCUTE, gMonStillFrontPic_Exeggcute),
+ STILL_FRONT_PIC(EXEGGUTOR, gMonStillFrontPic_Exeggutor),
+ STILL_FRONT_PIC(CUBONE, gMonStillFrontPic_Cubone),
+ STILL_FRONT_PIC(MAROWAK, gMonStillFrontPic_Marowak),
+ STILL_FRONT_PIC(HITMONLEE, gMonStillFrontPic_Hitmonlee),
+ STILL_FRONT_PIC(HITMONCHAN, gMonStillFrontPic_Hitmonchan),
+ STILL_FRONT_PIC(LICKITUNG, gMonStillFrontPic_Lickitung),
+ STILL_FRONT_PIC(KOFFING, gMonStillFrontPic_Koffing),
+ STILL_FRONT_PIC(WEEZING, gMonStillFrontPic_Weezing),
+ STILL_FRONT_PIC(RHYHORN, gMonStillFrontPic_Rhyhorn),
+ STILL_FRONT_PIC(RHYDON, gMonStillFrontPic_Rhydon),
+ STILL_FRONT_PIC(CHANSEY, gMonStillFrontPic_Chansey),
+ STILL_FRONT_PIC(TANGELA, gMonStillFrontPic_Tangela),
+ STILL_FRONT_PIC(KANGASKHAN, gMonStillFrontPic_Kangaskhan),
+ STILL_FRONT_PIC(HORSEA, gMonStillFrontPic_Horsea),
+ STILL_FRONT_PIC(SEADRA, gMonStillFrontPic_Seadra),
+ STILL_FRONT_PIC(GOLDEEN, gMonStillFrontPic_Goldeen),
+ STILL_FRONT_PIC(SEAKING, gMonStillFrontPic_Seaking),
+ STILL_FRONT_PIC(STARYU, gMonStillFrontPic_Staryu),
+ STILL_FRONT_PIC(STARMIE, gMonStillFrontPic_Starmie),
+ STILL_FRONT_PIC(MR_MIME, gMonStillFrontPic_Mrmime),
+ STILL_FRONT_PIC(SCYTHER, gMonStillFrontPic_Scyther),
+ STILL_FRONT_PIC(JYNX, gMonStillFrontPic_Jynx),
+ STILL_FRONT_PIC(ELECTABUZZ, gMonStillFrontPic_Electabuzz),
+ STILL_FRONT_PIC(MAGMAR, gMonStillFrontPic_Magmar),
+ STILL_FRONT_PIC(PINSIR, gMonStillFrontPic_Pinsir),
+ STILL_FRONT_PIC(TAUROS, gMonStillFrontPic_Tauros),
+ STILL_FRONT_PIC(MAGIKARP, gMonStillFrontPic_Magikarp),
+ STILL_FRONT_PIC(GYARADOS, gMonStillFrontPic_Gyarados),
+ STILL_FRONT_PIC(LAPRAS, gMonStillFrontPic_Lapras),
+ STILL_FRONT_PIC(DITTO, gMonStillFrontPic_Ditto),
+ STILL_FRONT_PIC(EEVEE, gMonStillFrontPic_Eevee),
+ STILL_FRONT_PIC(VAPOREON, gMonStillFrontPic_Vaporeon),
+ STILL_FRONT_PIC(JOLTEON, gMonStillFrontPic_Jolteon),
+ STILL_FRONT_PIC(FLAREON, gMonStillFrontPic_Flareon),
+ STILL_FRONT_PIC(PORYGON, gMonStillFrontPic_Porygon),
+ STILL_FRONT_PIC(OMANYTE, gMonStillFrontPic_Omanyte),
+ STILL_FRONT_PIC(OMASTAR, gMonStillFrontPic_Omastar),
+ STILL_FRONT_PIC(KABUTO, gMonStillFrontPic_Kabuto),
+ STILL_FRONT_PIC(KABUTOPS, gMonStillFrontPic_Kabutops),
+ STILL_FRONT_PIC(AERODACTYL, gMonStillFrontPic_Aerodactyl),
+ STILL_FRONT_PIC(SNORLAX, gMonStillFrontPic_Snorlax),
+ STILL_FRONT_PIC(ARTICUNO, gMonStillFrontPic_Articuno),
+ STILL_FRONT_PIC(ZAPDOS, gMonStillFrontPic_Zapdos),
+ STILL_FRONT_PIC(MOLTRES, gMonStillFrontPic_Moltres),
+ STILL_FRONT_PIC(DRATINI, gMonStillFrontPic_Dratini),
+ STILL_FRONT_PIC(DRAGONAIR, gMonStillFrontPic_Dragonair),
+ STILL_FRONT_PIC(DRAGONITE, gMonStillFrontPic_Dragonite),
+ STILL_FRONT_PIC(MEWTWO, gMonStillFrontPic_Mewtwo),
+ STILL_FRONT_PIC(MEW, gMonStillFrontPic_Mew),
// Gen II
- gMonStillFrontPic_Chikorita, 0x800, 152,
- gMonStillFrontPic_Bayleef, 0x800, 153,
- gMonStillFrontPic_Meganium, 0x800, 154,
- gMonStillFrontPic_Cyndaquil, 0x800, 155,
- gMonStillFrontPic_Quilava, 0x800, 156,
- gMonStillFrontPic_Typhlosion, 0x800, 157,
- gMonStillFrontPic_Totodile, 0x800, 158,
- gMonStillFrontPic_Croconaw, 0x800, 159,
- gMonStillFrontPic_Feraligatr, 0x800, 160,
- gMonStillFrontPic_Sentret, 0x800, 161,
- gMonStillFrontPic_Furret, 0x800, 162,
- gMonStillFrontPic_Hoothoot, 0x800, 163,
- gMonStillFrontPic_Noctowl, 0x800, 164,
- gMonStillFrontPic_Ledyba, 0x800, 165,
- gMonStillFrontPic_Ledian, 0x800, 166,
- gMonStillFrontPic_Spinarak, 0x800, 167,
- gMonStillFrontPic_Ariados, 0x800, 168,
- gMonStillFrontPic_Crobat, 0x800, 169,
- gMonStillFrontPic_Chinchou, 0x800, 170,
- gMonStillFrontPic_Lanturn, 0x800, 171,
- gMonStillFrontPic_Pichu, 0x800, 172,
- gMonStillFrontPic_Cleffa, 0x800, 173,
- gMonStillFrontPic_Igglybuff, 0x800, 174,
- gMonStillFrontPic_Togepi, 0x800, 175,
- gMonStillFrontPic_Togetic, 0x800, 176,
- gMonStillFrontPic_Natu, 0x800, 177,
- gMonStillFrontPic_Xatu, 0x800, 178,
- gMonStillFrontPic_Mareep, 0x800, 179,
- gMonStillFrontPic_Flaaffy, 0x800, 180,
- gMonStillFrontPic_Ampharos, 0x800, 181,
- gMonStillFrontPic_Bellossom, 0x800, 182,
- gMonStillFrontPic_Marill, 0x800, 183,
- gMonStillFrontPic_Azumarill, 0x800, 184,
- gMonStillFrontPic_Sudowoodo, 0x800, 185,
- gMonStillFrontPic_Politoed, 0x800, 186,
- gMonStillFrontPic_Hoppip, 0x800, 187,
- gMonStillFrontPic_Skiploom, 0x800, 188,
- gMonStillFrontPic_Jumpluff, 0x800, 189,
- gMonStillFrontPic_Aipom, 0x800, 190,
- gMonStillFrontPic_Sunkern, 0x800, 191,
- gMonStillFrontPic_Sunflora, 0x800, 192,
- gMonStillFrontPic_Yanma, 0x800, 193,
- gMonStillFrontPic_Wooper, 0x800, 194,
- gMonStillFrontPic_Quagsire, 0x800, 195,
- gMonStillFrontPic_Espeon, 0x800, 196,
- gMonStillFrontPic_Umbreon, 0x800, 197,
- gMonStillFrontPic_Murkrow, 0x800, 198,
- gMonStillFrontPic_Slowking, 0x800, 199,
- gMonStillFrontPic_Misdreavus, 0x800, 200,
- gMonStillFrontPic_UnownA, 0x800, 201,
- gMonStillFrontPic_Wobbuffet, 0x800, 202,
- gMonStillFrontPic_Girafarig, 0x800, 203,
- gMonStillFrontPic_Pineco, 0x800, 204,
- gMonStillFrontPic_Forretress, 0x800, 205,
- gMonStillFrontPic_Dunsparce, 0x800, 206,
- gMonStillFrontPic_Gligar, 0x800, 207,
- gMonStillFrontPic_Steelix, 0x800, 208,
- gMonStillFrontPic_Snubbull, 0x800, 209,
- gMonStillFrontPic_Granbull, 0x800, 210,
- gMonStillFrontPic_Qwilfish, 0x800, 211,
- gMonStillFrontPic_Scizor, 0x800, 212,
- gMonStillFrontPic_Shuckle, 0x800, 213,
- gMonStillFrontPic_Heracross, 0x800, 214,
- gMonStillFrontPic_Sneasel, 0x800, 215,
- gMonStillFrontPic_Teddiursa, 0x800, 216,
- gMonStillFrontPic_Ursaring, 0x800, 217,
- gMonStillFrontPic_Slugma, 0x800, 218,
- gMonStillFrontPic_Magcargo, 0x800, 219,
- gMonStillFrontPic_Swinub, 0x800, 220,
- gMonStillFrontPic_Piloswine, 0x800, 221,
- gMonStillFrontPic_Corsola, 0x800, 222,
- gMonStillFrontPic_Remoraid, 0x800, 223,
- gMonStillFrontPic_Octillery, 0x800, 224,
- gMonStillFrontPic_Delibird, 0x800, 225,
- gMonStillFrontPic_Mantine, 0x800, 226,
- gMonStillFrontPic_Skarmory, 0x800, 227,
- gMonStillFrontPic_Houndour, 0x800, 228,
- gMonStillFrontPic_Houndoom, 0x800, 229,
- gMonStillFrontPic_Kingdra, 0x800, 230,
- gMonStillFrontPic_Phanpy, 0x800, 231,
- gMonStillFrontPic_Donphan, 0x800, 232,
- gMonStillFrontPic_Porygon2, 0x800, 233,
- gMonStillFrontPic_Stantler, 0x800, 234,
- gMonStillFrontPic_Smeargle, 0x800, 235,
- gMonStillFrontPic_Tyrogue, 0x800, 236,
- gMonStillFrontPic_Hitmontop, 0x800, 237,
- gMonStillFrontPic_Smoochum, 0x800, 238,
- gMonStillFrontPic_Elekid, 0x800, 239,
- gMonStillFrontPic_Magby, 0x800, 240,
- gMonStillFrontPic_Miltank, 0x800, 241,
- gMonStillFrontPic_Blissey, 0x800, 242,
- gMonStillFrontPic_Raikou, 0x800, 243,
- gMonStillFrontPic_Entei, 0x800, 244,
- gMonStillFrontPic_Suicune, 0x800, 245,
- gMonStillFrontPic_Larvitar, 0x800, 246,
- gMonStillFrontPic_Pupitar, 0x800, 247,
- gMonStillFrontPic_Tyranitar, 0x800, 248,
- gMonStillFrontPic_Lugia, 0x800, 249,
- gMonStillFrontPic_HoOh, 0x800, 250,
- gMonStillFrontPic_Celebi, 0x800, 251,
+ STILL_FRONT_PIC(CHIKORITA, gMonStillFrontPic_Chikorita),
+ STILL_FRONT_PIC(BAYLEEF, gMonStillFrontPic_Bayleef),
+ STILL_FRONT_PIC(MEGANIUM, gMonStillFrontPic_Meganium),
+ STILL_FRONT_PIC(CYNDAQUIL, gMonStillFrontPic_Cyndaquil),
+ STILL_FRONT_PIC(QUILAVA, gMonStillFrontPic_Quilava),
+ STILL_FRONT_PIC(TYPHLOSION, gMonStillFrontPic_Typhlosion),
+ STILL_FRONT_PIC(TOTODILE, gMonStillFrontPic_Totodile),
+ STILL_FRONT_PIC(CROCONAW, gMonStillFrontPic_Croconaw),
+ STILL_FRONT_PIC(FERALIGATR, gMonStillFrontPic_Feraligatr),
+ STILL_FRONT_PIC(SENTRET, gMonStillFrontPic_Sentret),
+ STILL_FRONT_PIC(FURRET, gMonStillFrontPic_Furret),
+ STILL_FRONT_PIC(HOOTHOOT, gMonStillFrontPic_Hoothoot),
+ STILL_FRONT_PIC(NOCTOWL, gMonStillFrontPic_Noctowl),
+ STILL_FRONT_PIC(LEDYBA, gMonStillFrontPic_Ledyba),
+ STILL_FRONT_PIC(LEDIAN, gMonStillFrontPic_Ledian),
+ STILL_FRONT_PIC(SPINARAK, gMonStillFrontPic_Spinarak),
+ STILL_FRONT_PIC(ARIADOS, gMonStillFrontPic_Ariados),
+ STILL_FRONT_PIC(CROBAT, gMonStillFrontPic_Crobat),
+ STILL_FRONT_PIC(CHINCHOU, gMonStillFrontPic_Chinchou),
+ STILL_FRONT_PIC(LANTURN, gMonStillFrontPic_Lanturn),
+ STILL_FRONT_PIC(PICHU, gMonStillFrontPic_Pichu),
+ STILL_FRONT_PIC(CLEFFA, gMonStillFrontPic_Cleffa),
+ STILL_FRONT_PIC(IGGLYBUFF, gMonStillFrontPic_Igglybuff),
+ STILL_FRONT_PIC(TOGEPI, gMonStillFrontPic_Togepi),
+ STILL_FRONT_PIC(TOGETIC, gMonStillFrontPic_Togetic),
+ STILL_FRONT_PIC(NATU, gMonStillFrontPic_Natu),
+ STILL_FRONT_PIC(XATU, gMonStillFrontPic_Xatu),
+ STILL_FRONT_PIC(MAREEP, gMonStillFrontPic_Mareep),
+ STILL_FRONT_PIC(FLAAFFY, gMonStillFrontPic_Flaaffy),
+ STILL_FRONT_PIC(AMPHAROS, gMonStillFrontPic_Ampharos),
+ STILL_FRONT_PIC(BELLOSSOM, gMonStillFrontPic_Bellossom),
+ STILL_FRONT_PIC(MARILL, gMonStillFrontPic_Marill),
+ STILL_FRONT_PIC(AZUMARILL, gMonStillFrontPic_Azumarill),
+ STILL_FRONT_PIC(SUDOWOODO, gMonStillFrontPic_Sudowoodo),
+ STILL_FRONT_PIC(POLITOED, gMonStillFrontPic_Politoed),
+ STILL_FRONT_PIC(HOPPIP, gMonStillFrontPic_Hoppip),
+ STILL_FRONT_PIC(SKIPLOOM, gMonStillFrontPic_Skiploom),
+ STILL_FRONT_PIC(JUMPLUFF, gMonStillFrontPic_Jumpluff),
+ STILL_FRONT_PIC(AIPOM, gMonStillFrontPic_Aipom),
+ STILL_FRONT_PIC(SUNKERN, gMonStillFrontPic_Sunkern),
+ STILL_FRONT_PIC(SUNFLORA, gMonStillFrontPic_Sunflora),
+ STILL_FRONT_PIC(YANMA, gMonStillFrontPic_Yanma),
+ STILL_FRONT_PIC(WOOPER, gMonStillFrontPic_Wooper),
+ STILL_FRONT_PIC(QUAGSIRE, gMonStillFrontPic_Quagsire),
+ STILL_FRONT_PIC(ESPEON, gMonStillFrontPic_Espeon),
+ STILL_FRONT_PIC(UMBREON, gMonStillFrontPic_Umbreon),
+ STILL_FRONT_PIC(MURKROW, gMonStillFrontPic_Murkrow),
+ STILL_FRONT_PIC(SLOWKING, gMonStillFrontPic_Slowking),
+ STILL_FRONT_PIC(MISDREAVUS, gMonStillFrontPic_Misdreavus),
+ STILL_FRONT_PIC(UNOWN, gMonStillFrontPic_UnownA),
+ STILL_FRONT_PIC(WOBBUFFET, gMonStillFrontPic_Wobbuffet),
+ STILL_FRONT_PIC(GIRAFARIG, gMonStillFrontPic_Girafarig),
+ STILL_FRONT_PIC(PINECO, gMonStillFrontPic_Pineco),
+ STILL_FRONT_PIC(FORRETRESS, gMonStillFrontPic_Forretress),
+ STILL_FRONT_PIC(DUNSPARCE, gMonStillFrontPic_Dunsparce),
+ STILL_FRONT_PIC(GLIGAR, gMonStillFrontPic_Gligar),
+ STILL_FRONT_PIC(STEELIX, gMonStillFrontPic_Steelix),
+ STILL_FRONT_PIC(SNUBBULL, gMonStillFrontPic_Snubbull),
+ STILL_FRONT_PIC(GRANBULL, gMonStillFrontPic_Granbull),
+ STILL_FRONT_PIC(QWILFISH, gMonStillFrontPic_Qwilfish),
+ STILL_FRONT_PIC(SCIZOR, gMonStillFrontPic_Scizor),
+ STILL_FRONT_PIC(SHUCKLE, gMonStillFrontPic_Shuckle),
+ STILL_FRONT_PIC(HERACROSS, gMonStillFrontPic_Heracross),
+ STILL_FRONT_PIC(SNEASEL, gMonStillFrontPic_Sneasel),
+ STILL_FRONT_PIC(TEDDIURSA, gMonStillFrontPic_Teddiursa),
+ STILL_FRONT_PIC(URSARING, gMonStillFrontPic_Ursaring),
+ STILL_FRONT_PIC(SLUGMA, gMonStillFrontPic_Slugma),
+ STILL_FRONT_PIC(MAGCARGO, gMonStillFrontPic_Magcargo),
+ STILL_FRONT_PIC(SWINUB, gMonStillFrontPic_Swinub),
+ STILL_FRONT_PIC(PILOSWINE, gMonStillFrontPic_Piloswine),
+ STILL_FRONT_PIC(CORSOLA, gMonStillFrontPic_Corsola),
+ STILL_FRONT_PIC(REMORAID, gMonStillFrontPic_Remoraid),
+ STILL_FRONT_PIC(OCTILLERY, gMonStillFrontPic_Octillery),
+ STILL_FRONT_PIC(DELIBIRD, gMonStillFrontPic_Delibird),
+ STILL_FRONT_PIC(MANTINE, gMonStillFrontPic_Mantine),
+ STILL_FRONT_PIC(SKARMORY, gMonStillFrontPic_Skarmory),
+ STILL_FRONT_PIC(HOUNDOUR, gMonStillFrontPic_Houndour),
+ STILL_FRONT_PIC(HOUNDOOM, gMonStillFrontPic_Houndoom),
+ STILL_FRONT_PIC(KINGDRA, gMonStillFrontPic_Kingdra),
+ STILL_FRONT_PIC(PHANPY, gMonStillFrontPic_Phanpy),
+ STILL_FRONT_PIC(DONPHAN, gMonStillFrontPic_Donphan),
+ STILL_FRONT_PIC(PORYGON2, gMonStillFrontPic_Porygon2),
+ STILL_FRONT_PIC(STANTLER, gMonStillFrontPic_Stantler),
+ STILL_FRONT_PIC(SMEARGLE, gMonStillFrontPic_Smeargle),
+ STILL_FRONT_PIC(TYROGUE, gMonStillFrontPic_Tyrogue),
+ STILL_FRONT_PIC(HITMONTOP, gMonStillFrontPic_Hitmontop),
+ STILL_FRONT_PIC(SMOOCHUM, gMonStillFrontPic_Smoochum),
+ STILL_FRONT_PIC(ELEKID, gMonStillFrontPic_Elekid),
+ STILL_FRONT_PIC(MAGBY, gMonStillFrontPic_Magby),
+ STILL_FRONT_PIC(MILTANK, gMonStillFrontPic_Miltank),
+ STILL_FRONT_PIC(BLISSEY, gMonStillFrontPic_Blissey),
+ STILL_FRONT_PIC(RAIKOU, gMonStillFrontPic_Raikou),
+ STILL_FRONT_PIC(ENTEI, gMonStillFrontPic_Entei),
+ STILL_FRONT_PIC(SUICUNE, gMonStillFrontPic_Suicune),
+ STILL_FRONT_PIC(LARVITAR, gMonStillFrontPic_Larvitar),
+ STILL_FRONT_PIC(PUPITAR, gMonStillFrontPic_Pupitar),
+ STILL_FRONT_PIC(TYRANITAR, gMonStillFrontPic_Tyranitar),
+ STILL_FRONT_PIC(LUGIA, gMonStillFrontPic_Lugia),
+ STILL_FRONT_PIC(HO_OH, gMonStillFrontPic_HoOh),
+ STILL_FRONT_PIC(CELEBI, gMonStillFrontPic_Celebi),
// Empty slots
- gMonStillFrontPic_DoubleQuestionMark, 0x800, 252,
- gMonStillFrontPic_DoubleQuestionMark, 0x800, 253,
- gMonStillFrontPic_DoubleQuestionMark, 0x800, 254,
- gMonStillFrontPic_DoubleQuestionMark, 0x800, 255,
- gMonStillFrontPic_DoubleQuestionMark, 0x800, 256,
- gMonStillFrontPic_DoubleQuestionMark, 0x800, 257,
- gMonStillFrontPic_DoubleQuestionMark, 0x800, 258,
- gMonStillFrontPic_DoubleQuestionMark, 0x800, 259,
- gMonStillFrontPic_DoubleQuestionMark, 0x800, 260,
- gMonStillFrontPic_DoubleQuestionMark, 0x800, 261,
- gMonStillFrontPic_DoubleQuestionMark, 0x800, 262,
- gMonStillFrontPic_DoubleQuestionMark, 0x800, 263,
- gMonStillFrontPic_DoubleQuestionMark, 0x800, 264,
- gMonStillFrontPic_DoubleQuestionMark, 0x800, 265,
- gMonStillFrontPic_DoubleQuestionMark, 0x800, 266,
- gMonStillFrontPic_DoubleQuestionMark, 0x800, 267,
- gMonStillFrontPic_DoubleQuestionMark, 0x800, 268,
- gMonStillFrontPic_DoubleQuestionMark, 0x800, 269,
- gMonStillFrontPic_DoubleQuestionMark, 0x800, 270,
- gMonStillFrontPic_DoubleQuestionMark, 0x800, 271,
- gMonStillFrontPic_DoubleQuestionMark, 0x800, 272,
- gMonStillFrontPic_DoubleQuestionMark, 0x800, 273,
- gMonStillFrontPic_DoubleQuestionMark, 0x800, 274,
- gMonStillFrontPic_DoubleQuestionMark, 0x800, 275,
- gMonStillFrontPic_DoubleQuestionMark, 0x800, 276,
+ STILL_FRONT_PIC(OLD_UNOWN_B, gMonStillFrontPic_DoubleQuestionMark),
+ STILL_FRONT_PIC(OLD_UNOWN_C, gMonStillFrontPic_DoubleQuestionMark),
+ STILL_FRONT_PIC(OLD_UNOWN_D, gMonStillFrontPic_DoubleQuestionMark),
+ STILL_FRONT_PIC(OLD_UNOWN_E, gMonStillFrontPic_DoubleQuestionMark),
+ STILL_FRONT_PIC(OLD_UNOWN_F, gMonStillFrontPic_DoubleQuestionMark),
+ STILL_FRONT_PIC(OLD_UNOWN_G, gMonStillFrontPic_DoubleQuestionMark),
+ STILL_FRONT_PIC(OLD_UNOWN_H, gMonStillFrontPic_DoubleQuestionMark),
+ STILL_FRONT_PIC(OLD_UNOWN_I, gMonStillFrontPic_DoubleQuestionMark),
+ STILL_FRONT_PIC(OLD_UNOWN_J, gMonStillFrontPic_DoubleQuestionMark),
+ STILL_FRONT_PIC(OLD_UNOWN_K, gMonStillFrontPic_DoubleQuestionMark),
+ STILL_FRONT_PIC(OLD_UNOWN_L, gMonStillFrontPic_DoubleQuestionMark),
+ STILL_FRONT_PIC(OLD_UNOWN_M, gMonStillFrontPic_DoubleQuestionMark),
+ STILL_FRONT_PIC(OLD_UNOWN_N, gMonStillFrontPic_DoubleQuestionMark),
+ STILL_FRONT_PIC(OLD_UNOWN_O, gMonStillFrontPic_DoubleQuestionMark),
+ STILL_FRONT_PIC(OLD_UNOWN_P, gMonStillFrontPic_DoubleQuestionMark),
+ STILL_FRONT_PIC(OLD_UNOWN_Q, gMonStillFrontPic_DoubleQuestionMark),
+ STILL_FRONT_PIC(OLD_UNOWN_R, gMonStillFrontPic_DoubleQuestionMark),
+ STILL_FRONT_PIC(OLD_UNOWN_S, gMonStillFrontPic_DoubleQuestionMark),
+ STILL_FRONT_PIC(OLD_UNOWN_T, gMonStillFrontPic_DoubleQuestionMark),
+ STILL_FRONT_PIC(OLD_UNOWN_U, gMonStillFrontPic_DoubleQuestionMark),
+ STILL_FRONT_PIC(OLD_UNOWN_V, gMonStillFrontPic_DoubleQuestionMark),
+ STILL_FRONT_PIC(OLD_UNOWN_W, gMonStillFrontPic_DoubleQuestionMark),
+ STILL_FRONT_PIC(OLD_UNOWN_X, gMonStillFrontPic_DoubleQuestionMark),
+ STILL_FRONT_PIC(OLD_UNOWN_Y, gMonStillFrontPic_DoubleQuestionMark),
+ STILL_FRONT_PIC(OLD_UNOWN_Z, gMonStillFrontPic_DoubleQuestionMark),
// Gen III
- gMonStillFrontPic_Treecko, 0x800, 277,
- gMonStillFrontPic_Grovyle, 0x800, 278,
- gMonStillFrontPic_Sceptile, 0x800, 279,
- gMonStillFrontPic_Torchic, 0x800, 280,
- gMonStillFrontPic_Combusken, 0x800, 281,
- gMonStillFrontPic_Blaziken, 0x800, 282,
- gMonStillFrontPic_Mudkip, 0x800, 283,
- gMonStillFrontPic_Marshtomp, 0x800, 284,
- gMonStillFrontPic_Swampert, 0x800, 285,
- gMonStillFrontPic_Poochyena, 0x800, 286,
- gMonStillFrontPic_Mightyena, 0x800, 287,
- gMonStillFrontPic_Zigzagoon, 0x800, 288,
- gMonStillFrontPic_Linoone, 0x800, 289,
- gMonStillFrontPic_Wurmple, 0x800, 290,
- gMonStillFrontPic_Silcoon, 0x800, 291,
- gMonStillFrontPic_Beautifly, 0x800, 292,
- gMonStillFrontPic_Cascoon, 0x800, 293,
- gMonStillFrontPic_Dustox, 0x800, 294,
- gMonStillFrontPic_Lotad, 0x800, 295,
- gMonStillFrontPic_Lombre, 0x800, 296,
- gMonStillFrontPic_Ludicolo, 0x800, 297,
- gMonStillFrontPic_Seedot, 0x800, 298,
- gMonStillFrontPic_Nuzleaf, 0x800, 299,
- gMonStillFrontPic_Shiftry, 0x800, 300,
- gMonStillFrontPic_Nincada, 0x800, 301,
- gMonStillFrontPic_Ninjask, 0x800, 302,
- gMonStillFrontPic_Shedinja, 0x800, 303,
- gMonStillFrontPic_Taillow, 0x800, 304,
- gMonStillFrontPic_Swellow, 0x800, 305,
- gMonStillFrontPic_Shroomish, 0x800, 306,
- gMonStillFrontPic_Breloom, 0x800, 307,
- gMonStillFrontPic_Spinda, 0x800, 308,
- gMonStillFrontPic_Wingull, 0x800, 309,
- gMonStillFrontPic_Pelipper, 0x800, 310,
- gMonStillFrontPic_Surskit, 0x800, 311,
- gMonStillFrontPic_Masquerain, 0x800, 312,
- gMonStillFrontPic_Wailmer, 0x800, 313,
- gMonStillFrontPic_Wailord, 0x800, 314,
- gMonStillFrontPic_Skitty, 0x800, 315,
- gMonStillFrontPic_Delcatty, 0x800, 316,
- gMonStillFrontPic_Kecleon, 0x800, 317,
- gMonStillFrontPic_Baltoy, 0x800, 318,
- gMonStillFrontPic_Claydol, 0x800, 319,
- gMonStillFrontPic_Nosepass, 0x800, 320,
- gMonStillFrontPic_Torkoal, 0x800, 321,
- gMonStillFrontPic_Sableye, 0x800, 322,
- gMonStillFrontPic_Barboach, 0x800, 323,
- gMonStillFrontPic_Whiscash, 0x800, 324,
- gMonStillFrontPic_Luvdisc, 0x800, 325,
- gMonStillFrontPic_Corphish, 0x800, 326,
- gMonStillFrontPic_Crawdaunt, 0x800, 327,
- gMonStillFrontPic_Feebas, 0x800, 328,
- gMonStillFrontPic_Milotic, 0x800, 329,
- gMonStillFrontPic_Carvanha, 0x800, 330,
- gMonStillFrontPic_Sharpedo, 0x800, 331,
- gMonStillFrontPic_Trapinch, 0x800, 332,
- gMonStillFrontPic_Vibrava, 0x800, 333,
- gMonStillFrontPic_Flygon, 0x800, 334,
- gMonStillFrontPic_Makuhita, 0x800, 335,
- gMonStillFrontPic_Hariyama, 0x800, 336,
- gMonStillFrontPic_Electrike, 0x800, 337,
- gMonStillFrontPic_Manectric, 0x800, 338,
- gMonStillFrontPic_Numel, 0x800, 339,
- gMonStillFrontPic_Camerupt, 0x800, 340,
- gMonStillFrontPic_Spheal, 0x800, 341,
- gMonStillFrontPic_Sealeo, 0x800, 342,
- gMonStillFrontPic_Walrein, 0x800, 343,
- gMonStillFrontPic_Cacnea, 0x800, 344,
- gMonStillFrontPic_Cacturne, 0x800, 345,
- gMonStillFrontPic_Snorunt, 0x800, 346,
- gMonStillFrontPic_Glalie, 0x800, 347,
- gMonStillFrontPic_Lunatone, 0x800, 348,
- gMonStillFrontPic_Solrock, 0x800, 349,
- gMonStillFrontPic_Azurill, 0x800, 350,
- gMonStillFrontPic_Spoink, 0x800, 351,
- gMonStillFrontPic_Grumpig, 0x800, 352,
- gMonStillFrontPic_Plusle, 0x800, 353,
- gMonStillFrontPic_Minun, 0x800, 354,
- gMonStillFrontPic_Mawile, 0x800, 355,
- gMonStillFrontPic_Meditite, 0x800, 356,
- gMonStillFrontPic_Medicham, 0x800, 357,
- gMonStillFrontPic_Swablu, 0x800, 358,
- gMonStillFrontPic_Altaria, 0x800, 359,
- gMonStillFrontPic_Wynaut, 0x800, 360,
- gMonStillFrontPic_Duskull, 0x800, 361,
- gMonStillFrontPic_Dusclops, 0x800, 362,
- gMonStillFrontPic_Roselia, 0x800, 363,
- gMonStillFrontPic_Slakoth, 0x800, 364,
- gMonStillFrontPic_Vigoroth, 0x800, 365,
- gMonStillFrontPic_Slaking, 0x800, 366,
- gMonStillFrontPic_Gulpin, 0x800, 367,
- gMonStillFrontPic_Swalot, 0x800, 368,
- gMonStillFrontPic_Tropius, 0x800, 369,
- gMonStillFrontPic_Whismur, 0x800, 370,
- gMonStillFrontPic_Loudred, 0x800, 371,
- gMonStillFrontPic_Exploud, 0x800, 372,
- gMonStillFrontPic_Clamperl, 0x800, 373,
- gMonStillFrontPic_Huntail, 0x800, 374,
- gMonStillFrontPic_Gorebyss, 0x800, 375,
- gMonStillFrontPic_Absol, 0x800, 376,
- gMonStillFrontPic_Shuppet, 0x800, 377,
- gMonStillFrontPic_Banette, 0x800, 378,
- gMonStillFrontPic_Seviper, 0x800, 379,
- gMonStillFrontPic_Zangoose, 0x800, 380,
- gMonStillFrontPic_Relicanth, 0x800, 381,
- gMonStillFrontPic_Aron, 0x800, 382,
- gMonStillFrontPic_Lairon, 0x800, 383,
- gMonStillFrontPic_Aggron, 0x800, 384,
- gMonStillFrontPic_Castform, 0x800, 385,
- gMonStillFrontPic_Volbeat, 0x800, 386,
- gMonStillFrontPic_Illumise, 0x800, 387,
- gMonStillFrontPic_Lileep, 0x800, 388,
- gMonStillFrontPic_Cradily, 0x800, 389,
- gMonStillFrontPic_Anorith, 0x800, 390,
- gMonStillFrontPic_Armaldo, 0x800, 391,
- gMonStillFrontPic_Ralts, 0x800, 392,
- gMonStillFrontPic_Kirlia, 0x800, 393,
- gMonStillFrontPic_Gardevoir, 0x800, 394,
- gMonStillFrontPic_Bagon, 0x800, 395,
- gMonStillFrontPic_Shelgon, 0x800, 396,
- gMonStillFrontPic_Salamence, 0x800, 397,
- gMonStillFrontPic_Beldum, 0x800, 398,
- gMonStillFrontPic_Metang, 0x800, 399,
- gMonStillFrontPic_Metagross, 0x800, 400,
- gMonStillFrontPic_Regirock, 0x800, 401,
- gMonStillFrontPic_Regice, 0x800, 402,
- gMonStillFrontPic_Registeel, 0x800, 403,
- gMonStillFrontPic_Kyogre, 0x800, 404,
- gMonStillFrontPic_Groudon, 0x800, 405,
- gMonStillFrontPic_Rayquaza, 0x800, 406,
- gMonStillFrontPic_Latias, 0x800, 407,
- gMonStillFrontPic_Latios, 0x800, 408,
- gMonStillFrontPic_Jirachi, 0x800, 409,
- gMonStillFrontPic_Deoxys, 0x800, 410,
- gMonStillFrontPic_Chimecho, 0x800, 411,
- gMonStillFrontPic_Egg, 0x800, 412,
- gMonStillFrontPic_UnownB, 0x800, 413,
- gMonStillFrontPic_UnownC, 0x800, 414,
- gMonStillFrontPic_UnownD, 0x800, 415,
- gMonStillFrontPic_UnownE, 0x800, 416,
- gMonStillFrontPic_UnownF, 0x800, 417,
- gMonStillFrontPic_UnownG, 0x800, 418,
- gMonStillFrontPic_UnownH, 0x800, 419,
- gMonStillFrontPic_UnownI, 0x800, 420,
- gMonStillFrontPic_UnownJ, 0x800, 421,
- gMonStillFrontPic_UnownK, 0x800, 422,
- gMonStillFrontPic_UnownL, 0x800, 423,
- gMonStillFrontPic_UnownM, 0x800, 424,
- gMonStillFrontPic_UnownN, 0x800, 425,
- gMonStillFrontPic_UnownO, 0x800, 426,
- gMonStillFrontPic_UnownP, 0x800, 427,
- gMonStillFrontPic_UnownQ, 0x800, 428,
- gMonStillFrontPic_UnownR, 0x800, 429,
- gMonStillFrontPic_UnownS, 0x800, 430,
- gMonStillFrontPic_UnownT, 0x800, 431,
- gMonStillFrontPic_UnownU, 0x800, 432,
- gMonStillFrontPic_UnownV, 0x800, 433,
- gMonStillFrontPic_UnownW, 0x800, 434,
- gMonStillFrontPic_UnownX, 0x800, 435,
- gMonStillFrontPic_UnownY, 0x800, 436,
- gMonStillFrontPic_UnownZ, 0x800, 437,
- gMonStillFrontPic_UnownExclamationMark, 0x800, 438,
- gMonStillFrontPic_UnownQuestionMark, 0x800, 439,
+ STILL_FRONT_PIC(TREECKO, gMonStillFrontPic_Treecko),
+ STILL_FRONT_PIC(GROVYLE, gMonStillFrontPic_Grovyle),
+ STILL_FRONT_PIC(SCEPTILE, gMonStillFrontPic_Sceptile),
+ STILL_FRONT_PIC(TORCHIC, gMonStillFrontPic_Torchic),
+ STILL_FRONT_PIC(COMBUSKEN, gMonStillFrontPic_Combusken),
+ STILL_FRONT_PIC(BLAZIKEN, gMonStillFrontPic_Blaziken),
+ STILL_FRONT_PIC(MUDKIP, gMonStillFrontPic_Mudkip),
+ STILL_FRONT_PIC(MARSHTOMP, gMonStillFrontPic_Marshtomp),
+ STILL_FRONT_PIC(SWAMPERT, gMonStillFrontPic_Swampert),
+ STILL_FRONT_PIC(POOCHYENA, gMonStillFrontPic_Poochyena),
+ STILL_FRONT_PIC(MIGHTYENA, gMonStillFrontPic_Mightyena),
+ STILL_FRONT_PIC(ZIGZAGOON, gMonStillFrontPic_Zigzagoon),
+ STILL_FRONT_PIC(LINOONE, gMonStillFrontPic_Linoone),
+ STILL_FRONT_PIC(WURMPLE, gMonStillFrontPic_Wurmple),
+ STILL_FRONT_PIC(SILCOON, gMonStillFrontPic_Silcoon),
+ STILL_FRONT_PIC(BEAUTIFLY, gMonStillFrontPic_Beautifly),
+ STILL_FRONT_PIC(CASCOON, gMonStillFrontPic_Cascoon),
+ STILL_FRONT_PIC(DUSTOX, gMonStillFrontPic_Dustox),
+ STILL_FRONT_PIC(LOTAD, gMonStillFrontPic_Lotad),
+ STILL_FRONT_PIC(LOMBRE, gMonStillFrontPic_Lombre),
+ STILL_FRONT_PIC(LUDICOLO, gMonStillFrontPic_Ludicolo),
+ STILL_FRONT_PIC(SEEDOT, gMonStillFrontPic_Seedot),
+ STILL_FRONT_PIC(NUZLEAF, gMonStillFrontPic_Nuzleaf),
+ STILL_FRONT_PIC(SHIFTRY, gMonStillFrontPic_Shiftry),
+ STILL_FRONT_PIC(NINCADA, gMonStillFrontPic_Nincada),
+ STILL_FRONT_PIC(NINJASK, gMonStillFrontPic_Ninjask),
+ STILL_FRONT_PIC(SHEDINJA, gMonStillFrontPic_Shedinja),
+ STILL_FRONT_PIC(TAILLOW, gMonStillFrontPic_Taillow),
+ STILL_FRONT_PIC(SWELLOW, gMonStillFrontPic_Swellow),
+ STILL_FRONT_PIC(SHROOMISH, gMonStillFrontPic_Shroomish),
+ STILL_FRONT_PIC(BRELOOM, gMonStillFrontPic_Breloom),
+ STILL_FRONT_PIC(SPINDA, gMonStillFrontPic_Spinda),
+ STILL_FRONT_PIC(WINGULL, gMonStillFrontPic_Wingull),
+ STILL_FRONT_PIC(PELIPPER, gMonStillFrontPic_Pelipper),
+ STILL_FRONT_PIC(SURSKIT, gMonStillFrontPic_Surskit),
+ STILL_FRONT_PIC(MASQUERAIN, gMonStillFrontPic_Masquerain),
+ STILL_FRONT_PIC(WAILMER, gMonStillFrontPic_Wailmer),
+ STILL_FRONT_PIC(WAILORD, gMonStillFrontPic_Wailord),
+ STILL_FRONT_PIC(SKITTY, gMonStillFrontPic_Skitty),
+ STILL_FRONT_PIC(DELCATTY, gMonStillFrontPic_Delcatty),
+ STILL_FRONT_PIC(KECLEON, gMonStillFrontPic_Kecleon),
+ STILL_FRONT_PIC(BALTOY, gMonStillFrontPic_Baltoy),
+ STILL_FRONT_PIC(CLAYDOL, gMonStillFrontPic_Claydol),
+ STILL_FRONT_PIC(NOSEPASS, gMonStillFrontPic_Nosepass),
+ STILL_FRONT_PIC(TORKOAL, gMonStillFrontPic_Torkoal),
+ STILL_FRONT_PIC(SABLEYE, gMonStillFrontPic_Sableye),
+ STILL_FRONT_PIC(BARBOACH, gMonStillFrontPic_Barboach),
+ STILL_FRONT_PIC(WHISCASH, gMonStillFrontPic_Whiscash),
+ STILL_FRONT_PIC(LUVDISC, gMonStillFrontPic_Luvdisc),
+ STILL_FRONT_PIC(CORPHISH, gMonStillFrontPic_Corphish),
+ STILL_FRONT_PIC(CRAWDAUNT, gMonStillFrontPic_Crawdaunt),
+ STILL_FRONT_PIC(FEEBAS, gMonStillFrontPic_Feebas),
+ STILL_FRONT_PIC(MILOTIC, gMonStillFrontPic_Milotic),
+ STILL_FRONT_PIC(CARVANHA, gMonStillFrontPic_Carvanha),
+ STILL_FRONT_PIC(SHARPEDO, gMonStillFrontPic_Sharpedo),
+ STILL_FRONT_PIC(TRAPINCH, gMonStillFrontPic_Trapinch),
+ STILL_FRONT_PIC(VIBRAVA, gMonStillFrontPic_Vibrava),
+ STILL_FRONT_PIC(FLYGON, gMonStillFrontPic_Flygon),
+ STILL_FRONT_PIC(MAKUHITA, gMonStillFrontPic_Makuhita),
+ STILL_FRONT_PIC(HARIYAMA, gMonStillFrontPic_Hariyama),
+ STILL_FRONT_PIC(ELECTRIKE, gMonStillFrontPic_Electrike),
+ STILL_FRONT_PIC(MANECTRIC, gMonStillFrontPic_Manectric),
+ STILL_FRONT_PIC(NUMEL, gMonStillFrontPic_Numel),
+ STILL_FRONT_PIC(CAMERUPT, gMonStillFrontPic_Camerupt),
+ STILL_FRONT_PIC(SPHEAL, gMonStillFrontPic_Spheal),
+ STILL_FRONT_PIC(SEALEO, gMonStillFrontPic_Sealeo),
+ STILL_FRONT_PIC(WALREIN, gMonStillFrontPic_Walrein),
+ STILL_FRONT_PIC(CACNEA, gMonStillFrontPic_Cacnea),
+ STILL_FRONT_PIC(CACTURNE, gMonStillFrontPic_Cacturne),
+ STILL_FRONT_PIC(SNORUNT, gMonStillFrontPic_Snorunt),
+ STILL_FRONT_PIC(GLALIE, gMonStillFrontPic_Glalie),
+ STILL_FRONT_PIC(LUNATONE, gMonStillFrontPic_Lunatone),
+ STILL_FRONT_PIC(SOLROCK, gMonStillFrontPic_Solrock),
+ STILL_FRONT_PIC(AZURILL, gMonStillFrontPic_Azurill),
+ STILL_FRONT_PIC(SPOINK, gMonStillFrontPic_Spoink),
+ STILL_FRONT_PIC(GRUMPIG, gMonStillFrontPic_Grumpig),
+ STILL_FRONT_PIC(PLUSLE, gMonStillFrontPic_Plusle),
+ STILL_FRONT_PIC(MINUN, gMonStillFrontPic_Minun),
+ STILL_FRONT_PIC(MAWILE, gMonStillFrontPic_Mawile),
+ STILL_FRONT_PIC(MEDITITE, gMonStillFrontPic_Meditite),
+ STILL_FRONT_PIC(MEDICHAM, gMonStillFrontPic_Medicham),
+ STILL_FRONT_PIC(SWABLU, gMonStillFrontPic_Swablu),
+ STILL_FRONT_PIC(ALTARIA, gMonStillFrontPic_Altaria),
+ STILL_FRONT_PIC(WYNAUT, gMonStillFrontPic_Wynaut),
+ STILL_FRONT_PIC(DUSKULL, gMonStillFrontPic_Duskull),
+ STILL_FRONT_PIC(DUSCLOPS, gMonStillFrontPic_Dusclops),
+ STILL_FRONT_PIC(ROSELIA, gMonStillFrontPic_Roselia),
+ STILL_FRONT_PIC(SLAKOTH, gMonStillFrontPic_Slakoth),
+ STILL_FRONT_PIC(VIGOROTH, gMonStillFrontPic_Vigoroth),
+ STILL_FRONT_PIC(SLAKING, gMonStillFrontPic_Slaking),
+ STILL_FRONT_PIC(GULPIN, gMonStillFrontPic_Gulpin),
+ STILL_FRONT_PIC(SWALOT, gMonStillFrontPic_Swalot),
+ STILL_FRONT_PIC(TROPIUS, gMonStillFrontPic_Tropius),
+ STILL_FRONT_PIC(WHISMUR, gMonStillFrontPic_Whismur),
+ STILL_FRONT_PIC(LOUDRED, gMonStillFrontPic_Loudred),
+ STILL_FRONT_PIC(EXPLOUD, gMonStillFrontPic_Exploud),
+ STILL_FRONT_PIC(CLAMPERL, gMonStillFrontPic_Clamperl),
+ STILL_FRONT_PIC(HUNTAIL, gMonStillFrontPic_Huntail),
+ STILL_FRONT_PIC(GOREBYSS, gMonStillFrontPic_Gorebyss),
+ STILL_FRONT_PIC(ABSOL, gMonStillFrontPic_Absol),
+ STILL_FRONT_PIC(SHUPPET, gMonStillFrontPic_Shuppet),
+ STILL_FRONT_PIC(BANETTE, gMonStillFrontPic_Banette),
+ STILL_FRONT_PIC(SEVIPER, gMonStillFrontPic_Seviper),
+ STILL_FRONT_PIC(ZANGOOSE, gMonStillFrontPic_Zangoose),
+ STILL_FRONT_PIC(RELICANTH, gMonStillFrontPic_Relicanth),
+ STILL_FRONT_PIC(ARON, gMonStillFrontPic_Aron),
+ STILL_FRONT_PIC(LAIRON, gMonStillFrontPic_Lairon),
+ STILL_FRONT_PIC(AGGRON, gMonStillFrontPic_Aggron),
+ STILL_FRONT_PIC(CASTFORM, gMonStillFrontPic_Castform),
+ STILL_FRONT_PIC(VOLBEAT, gMonStillFrontPic_Volbeat),
+ STILL_FRONT_PIC(ILLUMISE, gMonStillFrontPic_Illumise),
+ STILL_FRONT_PIC(LILEEP, gMonStillFrontPic_Lileep),
+ STILL_FRONT_PIC(CRADILY, gMonStillFrontPic_Cradily),
+ STILL_FRONT_PIC(ANORITH, gMonStillFrontPic_Anorith),
+ STILL_FRONT_PIC(ARMALDO, gMonStillFrontPic_Armaldo),
+ STILL_FRONT_PIC(RALTS, gMonStillFrontPic_Ralts),
+ STILL_FRONT_PIC(KIRLIA, gMonStillFrontPic_Kirlia),
+ STILL_FRONT_PIC(GARDEVOIR, gMonStillFrontPic_Gardevoir),
+ STILL_FRONT_PIC(BAGON, gMonStillFrontPic_Bagon),
+ STILL_FRONT_PIC(SHELGON, gMonStillFrontPic_Shelgon),
+ STILL_FRONT_PIC(SALAMENCE, gMonStillFrontPic_Salamence),
+ STILL_FRONT_PIC(BELDUM, gMonStillFrontPic_Beldum),
+ STILL_FRONT_PIC(METANG, gMonStillFrontPic_Metang),
+ STILL_FRONT_PIC(METAGROSS, gMonStillFrontPic_Metagross),
+ STILL_FRONT_PIC(REGIROCK, gMonStillFrontPic_Regirock),
+ STILL_FRONT_PIC(REGICE, gMonStillFrontPic_Regice),
+ STILL_FRONT_PIC(REGISTEEL, gMonStillFrontPic_Registeel),
+ STILL_FRONT_PIC(KYOGRE, gMonStillFrontPic_Kyogre),
+ STILL_FRONT_PIC(GROUDON, gMonStillFrontPic_Groudon),
+ STILL_FRONT_PIC(RAYQUAZA, gMonStillFrontPic_Rayquaza),
+ STILL_FRONT_PIC(LATIAS, gMonStillFrontPic_Latias),
+ STILL_FRONT_PIC(LATIOS, gMonStillFrontPic_Latios),
+ STILL_FRONT_PIC(JIRACHI, gMonStillFrontPic_Jirachi),
+ STILL_FRONT_PIC(DEOXYS, gMonStillFrontPic_Deoxys),
+ STILL_FRONT_PIC(CHIMECHO, gMonStillFrontPic_Chimecho),
+ STILL_FRONT_PIC(EGG, gMonStillFrontPic_Egg),
+ STILL_FRONT_PIC(UNOWN_B, gMonStillFrontPic_UnownB),
+ STILL_FRONT_PIC(UNOWN_C, gMonStillFrontPic_UnownC),
+ STILL_FRONT_PIC(UNOWN_D, gMonStillFrontPic_UnownD),
+ STILL_FRONT_PIC(UNOWN_E, gMonStillFrontPic_UnownE),
+ STILL_FRONT_PIC(UNOWN_F, gMonStillFrontPic_UnownF),
+ STILL_FRONT_PIC(UNOWN_G, gMonStillFrontPic_UnownG),
+ STILL_FRONT_PIC(UNOWN_H, gMonStillFrontPic_UnownH),
+ STILL_FRONT_PIC(UNOWN_I, gMonStillFrontPic_UnownI),
+ STILL_FRONT_PIC(UNOWN_J, gMonStillFrontPic_UnownJ),
+ STILL_FRONT_PIC(UNOWN_K, gMonStillFrontPic_UnownK),
+ STILL_FRONT_PIC(UNOWN_L, gMonStillFrontPic_UnownL),
+ STILL_FRONT_PIC(UNOWN_M, gMonStillFrontPic_UnownM),
+ STILL_FRONT_PIC(UNOWN_N, gMonStillFrontPic_UnownN),
+ STILL_FRONT_PIC(UNOWN_O, gMonStillFrontPic_UnownO),
+ STILL_FRONT_PIC(UNOWN_P, gMonStillFrontPic_UnownP),
+ STILL_FRONT_PIC(UNOWN_Q, gMonStillFrontPic_UnownQ),
+ STILL_FRONT_PIC(UNOWN_R, gMonStillFrontPic_UnownR),
+ STILL_FRONT_PIC(UNOWN_S, gMonStillFrontPic_UnownS),
+ STILL_FRONT_PIC(UNOWN_T, gMonStillFrontPic_UnownT),
+ STILL_FRONT_PIC(UNOWN_U, gMonStillFrontPic_UnownU),
+ STILL_FRONT_PIC(UNOWN_V, gMonStillFrontPic_UnownV),
+ STILL_FRONT_PIC(UNOWN_W, gMonStillFrontPic_UnownW),
+ STILL_FRONT_PIC(UNOWN_X, gMonStillFrontPic_UnownX),
+ STILL_FRONT_PIC(UNOWN_Y, gMonStillFrontPic_UnownY),
+ STILL_FRONT_PIC(UNOWN_Z, gMonStillFrontPic_UnownZ),
+ STILL_FRONT_PIC(UNOWN_EMARK, gMonStillFrontPic_UnownExclamationMark),
+ STILL_FRONT_PIC(UNOWN_QMARK, gMonStillFrontPic_UnownQuestionMark),
};
diff --git a/src/dragon.c b/src/dragon.c
index 49f1b57c8..156d10ce1 100644
--- a/src/dragon.c
+++ b/src/dragon.c
@@ -208,13 +208,13 @@ void sub_8113064(struct Sprite *sprite)
sprite->data[3] = gBattleAnimArgs[4];
sprite->data[5] = gBattleAnimArgs[5];
sprite->invisible = 1;
- StoreSpriteCallbackInData6(sprite, move_anim_8074EE0);
+ StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
sprite->callback = sub_80A66DC;
}
static void sub_8113100(struct Sprite *sprite)
{
- sub_80A6838(sprite);
+ SetSpriteCoordsToAnimAttackerCoords(sprite);
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
@@ -235,7 +235,7 @@ static void sub_8113100(struct Sprite *sprite)
sprite->data[0] = gBattleAnimArgs[4];
sprite->callback = StartAnimLinearTranslation;
- StoreSpriteCallbackInData6(sprite, move_anim_8074EE0);
+ StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
}
void sub_81131B4(struct Sprite *sprite)
@@ -253,8 +253,8 @@ void sub_81131B4(struct Sprite *sprite)
sub_80A6864(sprite, gBattleAnimArgs[1]);
sprite->pos1.y += gBattleAnimArgs[2];
- sprite->callback = sub_80A67D8;
- StoreSpriteCallbackInData6(sprite, move_anim_8074EE0);
+ sprite->callback = RunStoredCallbackWhenAnimEnds;
+ StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
}
void sub_8113224(struct Sprite *sprite)
diff --git a/src/effects_2.c b/src/effects_2.c
deleted file mode 100644
index 82336be5c..000000000
--- a/src/effects_2.c
+++ /dev/null
@@ -1,1197 +0,0 @@
-#include "global.h"
-#include "battle_anim.h"
-#include "constants/rgb.h"
-
-extern void sub_8103448(struct Sprite *);
-extern void sub_8103498(struct Sprite *);
-extern void sub_810358C(struct Sprite *);
-extern void sub_8103620(struct Sprite *);
-extern void sub_80A77C8(struct Sprite *);
-extern void sub_81037D8(struct Sprite *);
-extern void sub_810387C(struct Sprite *);
-extern void sub_81038C8(struct Sprite *);
-extern void sub_8103AA4(struct Sprite *);
-extern void TranslateAnimSpriteToTargetMonLocation(struct Sprite *);
-extern void sub_8108C94(struct Sprite *);
-extern void sub_80A78AC(struct Sprite *);
-extern void sub_8103FE8(struct Sprite *);
-extern void sub_8104088(struct Sprite *);
-extern void sub_810413C(struct Sprite *);
-extern void sub_81041C4(struct Sprite *);
-extern void sub_8104304(struct Sprite *);
-extern void sub_8104364(struct Sprite *);
-extern void sub_8104414(struct Sprite *);
-extern void sub_8104B1C(struct Sprite *);
-extern void sub_8104BAC(struct Sprite *);
-extern void sub_810501C(struct Sprite *);
-extern void sub_80A7938(struct Sprite *);
-extern void sub_8105538(struct Sprite *);
-extern void sub_81051C4(struct Sprite *);
-extern void sub_81052A4(struct Sprite *);
-extern void sub_81054E8(struct Sprite *);
-extern void sub_8105C48(struct Sprite *);
-extern void sub_8105DE8(struct Sprite *);
-extern void sub_8105E60(struct Sprite *);
-extern void sub_8106140(struct Sprite *);
-extern void sub_81061C4(struct Sprite *);
-extern void sub_810624C(struct Sprite *);
-extern void sub_810673C(struct Sprite *);
-extern void sub_8106878(struct Sprite *);
-extern void sub_8106944(struct Sprite *);
-extern void sub_81069B8(struct Sprite *);
-extern void sub_81069D0(struct Sprite *);
-extern void sub_8106AD0(struct Sprite *);
-extern void sub_8106B54(struct Sprite *);
-extern void sub_8106C80(struct Sprite *);
-extern void sub_8106CD0(struct Sprite *);
-extern void sub_8106E00(struct Sprite *);
-extern void sub_8106F60(struct Sprite *);
-extern void sub_8106F00(struct Sprite *);
-extern void sub_81070AC(struct Sprite *);
-
-const struct SpriteTemplate gUnknown_08593264 =
-{
- .tileTag = ANIM_TAG_FINGER,
- .paletteTag = ANIM_TAG_FINGER,
- .oam = &gUnknown_08524914,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8103448,
-};
-
-const union AnimCmd gUnknown_0859327C[] =
-{
- ANIMCMD_FRAME(4, 1),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_08593284[] =
-{
- gUnknown_0859327C,
-};
-
-const struct SpriteTemplate gUnknown_08593288 =
-{
- .tileTag = ANIM_TAG_MUSIC_NOTES,
- .paletteTag = ANIM_TAG_MUSIC_NOTES,
- .oam = &gUnknown_0852490C,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8103498,
-};
-
-const struct SpriteTemplate gUnknown_085932A0 =
-{
- .tileTag = 0,
- .paletteTag = 0,
- .oam = &gDummyOamData,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_810358C,
-};
-
-extern const union AffineAnimCmd *const gUnknown_08597060[];
-const struct SpriteTemplate gUnknown_085932B8 =
-{
- .tileTag = ANIM_TAG_CLAMP,
- .paletteTag = ANIM_TAG_CLAMP,
- .oam = &gUnknown_08524A9C,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gUnknown_08597060,
- .callback = sub_8103620,
-};
-
-const union AnimCmd gUnknown_085932D0[] =
-{
- ANIMCMD_FRAME(0, 9),
- ANIMCMD_FRAME(16, 3),
- ANIMCMD_FRAME(32, 3),
- ANIMCMD_FRAME(48, 3),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_085932E4[] =
-{
- gUnknown_085932D0,
-};
-
-const union AffineAnimCmd gUnknown_085932E8[] =
-{
- AFFINEANIMCMD_FRAME(0x50, 0x50, 0, 0),
- AFFINEANIMCMD_FRAME(0x9, 0x9, 0, 18),
- AFFINEANIMCMD_END,
-};
-
-const union AffineAnimCmd *const gUnknown_08593300[] =
-{
- gUnknown_085932E8,
-};
-
-const struct SpriteTemplate gUnknown_08593304 =
-{
- .tileTag = ANIM_TAG_UNUSED_EXPLOSION,
- .paletteTag = ANIM_TAG_UNUSED_EXPLOSION,
- .oam = &gUnknown_08524974,
- .anims = gUnknown_085932E4,
- .images = NULL,
- .affineAnims = gUnknown_08593300,
- .callback = sub_80A77C8,
-};
-
-const union AnimCmd gUnknown_0859331C[] =
-{
- ANIMCMD_FRAME(0, 3, .hFlip = TRUE),
- ANIMCMD_FRAME(8, 3, .hFlip = TRUE),
- ANIMCMD_FRAME(16, 3, .hFlip = TRUE),
- ANIMCMD_FRAME(24, 3, .hFlip = TRUE),
- ANIMCMD_FRAME(32, 3, .hFlip = TRUE),
- ANIMCMD_FRAME(40, 3, .hFlip = TRUE),
- ANIMCMD_FRAME(48, 3, .hFlip = TRUE),
- ANIMCMD_LOOP(1),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_08593340[] =
-{
- gUnknown_0859331C,
-};
-
-const struct SpriteTemplate gUnknown_08593344 =
-{
- .tileTag = ANIM_TAG_ALERT,
- .paletteTag = ANIM_TAG_ALERT,
- .oam = &gUnknown_08524934,
- .anims = gUnknown_08593340,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_81037D8,
-};
-
-const union AffineAnimCmd gUnknown_0859335C[] =
-{
- AFFINEANIMCMD_FRAME(0x10, 0x100, 0, 0),
- AFFINEANIMCMD_FRAME(0x14, 0x0, 0, 12),
- AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 32),
- AFFINEANIMCMD_END,
-};
-
-const union AffineAnimCmd *const gUnknown_0859337C[] =
-{
- gUnknown_0859335C,
-};
-
-const struct SpriteTemplate gBattleAnimSpriteTemplate_8593380 =
-{
- .tileTag = ANIM_TAG_SWORD,
- .paletteTag = ANIM_TAG_SWORD,
- .oam = &gUnknown_08524ADC,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gUnknown_0859337C,
- .callback = sub_810387C,
-};
-
-const struct SpriteTemplate gSonicBoomSpriteTemplate =
-{
- .tileTag = ANIM_TAG_AIR_WAVE,
- .paletteTag = ANIM_TAG_AIR_WAVE,
- .oam = &gUnknown_08524B14,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_81038C8,
-};
-
-const struct SpriteTemplate gUnknown_085933B0 =
-{
- .tileTag = ANIM_TAG_AIR_WAVE,
- .paletteTag = ANIM_TAG_AIR_WAVE,
- .oam = &gUnknown_08524A54,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8103AA4,
-};
-
-const union AffineAnimCmd gUnknown_085933C8[] =
-{
- AFFINEANIMCMD_FRAME(0x20, 0x20, 0, 0),
- AFFINEANIMCMD_FRAME(0x7, 0x7, 0, -56),
- AFFINEANIMCMD_END,
-};
-
-const union AffineAnimCmd gUnknown_085933E0[] =
-{
- AFFINEANIMCMD_FRAME(0x5, 0x5, 0, 10),
- AFFINEANIMCMD_FRAME(0xFFF6, 0xFFF6, 0, 10),
- AFFINEANIMCMD_FRAME(0xA, 0xA, 0, 10),
- AFFINEANIMCMD_FRAME(0xFFF6, 0xFFF6, 0, 10),
- AFFINEANIMCMD_FRAME(0xA, 0xA, 0, 10),
- AFFINEANIMCMD_FRAME(0xFFF6, 0xFFF6, 0, 10),
- AFFINEANIMCMD_FRAME(0xA, 0xA, 0, 10),
- AFFINEANIMCMD_END,
-};
-
-const union AffineAnimCmd *const gUnknown_08593420[] =
-{
- gUnknown_085933C8,
-};
-
-const union AffineAnimCmd *const gUnknown_08593424[] =
-{
- gUnknown_085933E0,
-};
-
-const struct SpriteTemplate gSupersonicWaveSpriteTemplate =
-{
- .tileTag = ANIM_TAG_GOLD_RING,
- .paletteTag = ANIM_TAG_GOLD_RING,
- .oam = &gUnknown_08524A14,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gUnknown_08593420,
- .callback = TranslateAnimSpriteToTargetMonLocation,
-};
-
-const struct SpriteTemplate gScreechWaveSpriteTemplate =
-{
- .tileTag = ANIM_TAG_PURPLE_RING,
- .paletteTag = ANIM_TAG_PURPLE_RING,
- .oam = &gUnknown_08524A14,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gUnknown_08593420,
- .callback = TranslateAnimSpriteToTargetMonLocation,
-};
-
-const struct SpriteTemplate gUnknown_08593458 =
-{
- .tileTag = ANIM_TAG_METAL_SOUND_WAVES,
- .paletteTag = ANIM_TAG_METAL_SOUND_WAVES,
- .oam = &gUnknown_08524A1C,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gUnknown_08593420,
- .callback = TranslateAnimSpriteToTargetMonLocation,
-};
-
-const struct SpriteTemplate gUnknown_08593470 =
-{
- .tileTag = ANIM_TAG_BLUE_RING_2,
- .paletteTag = ANIM_TAG_BLUE_RING_2,
- .oam = &gUnknown_08524A14,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gUnknown_08593424,
- .callback = sub_8108C94,
-};
-
-const struct SpriteTemplate gUnknown_08593488 =
-{
- .tileTag = ANIM_TAG_LARGE_FRESH_EGG,
- .paletteTag = ANIM_TAG_LARGE_FRESH_EGG,
- .oam = &gUnknown_0852490C,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80A78AC,
-};
-
-const struct SpriteTemplate gUnknown_085934A0 =
-{
- .tileTag = ANIM_TAG_UNUSED_VOID_LINES,
- .paletteTag = ANIM_TAG_UNUSED_VOID_LINES,
- .oam = &gUnknown_08524A3C,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8103FE8,
-};
-
-const union AnimCmd gUnknown_085934B8[] =
-{
- ANIMCMD_FRAME(8, 1),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_085934C0[] =
-{
- gUnknown_085934B8,
-};
-
-const union AffineAnimCmd gUnknown_085934C4[] =
-{
- AFFINEANIMCMD_FRAME(0x0, 0x0, 10, 1),
- AFFINEANIMCMD_JUMP(0),
-};
-
-const union AffineAnimCmd *const gUnknown_085934D4[] =
-{
- gUnknown_085934C4,
-};
-
-const struct SpriteTemplate gUnknown_085934D8 =
-{
- .tileTag = ANIM_TAG_COIN,
- .paletteTag = ANIM_TAG_COIN,
- .oam = &gUnknown_0852496C,
- .anims = gUnknown_085934C0,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8104088,
-};
-
-const struct SpriteTemplate gUnknown_085934F0 =
-{
- .tileTag = ANIM_TAG_COIN,
- .paletteTag = ANIM_TAG_COIN,
- .oam = &gUnknown_0852496C,
- .anims = gUnknown_085934C0,
- .images = NULL,
- .affineAnims = gUnknown_085934D4,
- .callback = sub_810413C,
-};
-
-const union AffineAnimCmd gUnknown_08593508[] =
-{
- AFFINEANIMCMD_FRAME(0x0, 0x0, 20, 1),
- AFFINEANIMCMD_JUMP(0),
-};
-
-const union AffineAnimCmd *const gUnknown_08593518[] =
-{
- gUnknown_08593508,
-};
-
-const struct SpriteTemplate gUnknown_0859351C =
-{
- .tileTag = ANIM_TAG_SEED,
- .paletteTag = ANIM_TAG_SEED,
- .oam = &gUnknown_0852496C,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gUnknown_08593518,
- .callback = sub_81041C4,
-};
-
-const union AffineAnimCmd gUnknown_08593534[] =
-{
- AFFINEANIMCMD_FRAME(0x10, 0x100, 0, 0),
- AFFINEANIMCMD_FRAME(0x4, 0x0, 0, 40),
- AFFINEANIMCMD_END,
-};
-
-const union AffineAnimCmd *const gUnknown_0859354C[] =
-{
- gUnknown_08593534,
-};
-
-const struct SpriteTemplate gUnknown_08593550 =
-{
- .tileTag = ANIM_TAG_GUST,
- .paletteTag = ANIM_TAG_GUST,
- .oam = &gUnknown_085249BC,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gUnknown_0859354C,
- .callback = sub_8104304,
-};
-
-const union AnimCmd gUnknown_08593568[] =
-{
- ANIMCMD_FRAME(0, 3),
- ANIMCMD_FRAME(16, 3),
- ANIMCMD_FRAME(32, 20),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_08593578[] =
-{
- ANIMCMD_FRAME(0, 3, .vFlip = TRUE, .hFlip = TRUE),
- ANIMCMD_FRAME(16, 3, .vFlip = TRUE, .hFlip = TRUE),
- ANIMCMD_FRAME(32, 20, .vFlip = TRUE, .hFlip = TRUE),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_08593588[] =
-{
- gUnknown_08593568,
- gUnknown_08593578,
-};
-
-const struct SpriteTemplate gUnknown_08593590 =
-{
- .tileTag = ANIM_TAG_CUT,
- .paletteTag = ANIM_TAG_CUT,
- .oam = &gUnknown_08524A34,
- .anims = gUnknown_08593588,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8104364,
-};
-
-const union AnimCmd gUnknown_085935A8[] =
-{
- ANIMCMD_FRAME(0, 2),
- ANIMCMD_FRAME(16, 2),
- ANIMCMD_FRAME(32, 1),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_085935B8[] =
-{
- ANIMCMD_FRAME(0, 2, .vFlip = TRUE, .hFlip = TRUE),
- ANIMCMD_FRAME(16, 2, .vFlip = TRUE, .hFlip = TRUE),
- ANIMCMD_FRAME(32, 1, .vFlip = TRUE, .hFlip = TRUE),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_085935C8[] =
-{
- gUnknown_085935A8,
- gUnknown_085935B8,
-};
-
-const struct SpriteTemplate gUnknown_085935D0 =
-{
- .tileTag = ANIM_TAG_CUT,
- .paletteTag = ANIM_TAG_CUT,
- .oam = &gUnknown_08524A34,
- .anims = gUnknown_085935C8,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8104414,
-};
-
-const union AffineAnimCmd gUnknown_085935E8[] =
-{
- AFFINEANIMCMD_FRAME(-6, 4, 0, 8),
- AFFINEANIMCMD_FRAME(10, -10, 0, 8),
- AFFINEANIMCMD_FRAME(-4, 6, 0, 8),
- AFFINEANIMCMD_END,
-};
-
-const union AffineAnimCmd gUnknown_08593608[] =
-{
- AFFINEANIMCMD_FRAME(-4, -5, 0, 12),
- AFFINEANIMCMD_FRAME(0, 0, 0, 24),
- AFFINEANIMCMD_FRAME(4, 5, 0, 12),
- AFFINEANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_08593628[] =
-{
- ANIMCMD_FRAME(0, 4, .hFlip = TRUE),
- ANIMCMD_FRAME(4, 40, .hFlip = TRUE),
- ANIMCMD_FRAME(8, 4, .hFlip = TRUE),
- ANIMCMD_FRAME(12, 4, .hFlip = TRUE),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_0859363C[] =
-{
- ANIMCMD_FRAME(0, 4),
- ANIMCMD_FRAME(4, 40),
- ANIMCMD_FRAME(8, 4),
- ANIMCMD_FRAME(12, 4),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_08593650[] =
-{
- gUnknown_08593628,
- gUnknown_0859363C,
-};
-
-const struct SpriteTemplate gUnknown_08593658 =
-{
- .tileTag = ANIM_TAG_BREATH,
- .paletteTag = ANIM_TAG_BREATH,
- .oam = &gUnknown_0852490C,
- .anims = gUnknown_08593650,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8104B1C,
-};
-
-const union AffineAnimCmd gUnknown_08593670[] =
-{
- AFFINEANIMCMD_FRAME(0xB, 0xB, 0, 8),
- AFFINEANIMCMD_FRAME(0xFFF5, 0xFFF5, 0, 8),
- AFFINEANIMCMD_END,
-};
-
-const union AffineAnimCmd *const gUnknown_08593688[] =
-{
- gUnknown_08593670,
-};
-
-const struct SpriteTemplate gUnknown_0859368C =
-{
- .tileTag = ANIM_TAG_ANGER,
- .paletteTag = ANIM_TAG_ANGER,
- .oam = &gUnknown_0852496C,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gUnknown_08593688,
- .callback = sub_8104BAC,
-};
-
-const union AffineAnimCmd gUnknown_085936A4[] =
-{
- AFFINEANIMCMD_FRAME(-10, 9, 0, 7),
- AFFINEANIMCMD_FRAME(20, -20, 0, 7),
- AFFINEANIMCMD_FRAME(-20, 20, 0, 7),
- AFFINEANIMCMD_FRAME(10, -9, 0, 7),
- AFFINEANIMCMD_LOOP(2),
- AFFINEANIMCMD_END,
-};
-
-const struct SpriteTemplate gUnknown_085936D4 =
-{
- .tileTag = ANIM_TAG_PENCIL,
- .paletteTag = ANIM_TAG_PENCIL,
- .oam = &gUnknown_08524914,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_810501C,
-};
-
-const struct SpriteTemplate gUnknown_085936EC =
-{
- .tileTag = ANIM_TAG_SNORE_Z,
- .paletteTag = ANIM_TAG_SNORE_Z,
- .oam = &gUnknown_08524914,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80A7938,
-};
-
-const union AnimCmd gUnknown_08593704[] =
-{
- ANIMCMD_FRAME(0, 5),
- ANIMCMD_FRAME(16, 5),
- ANIMCMD_FRAME(32, 5),
- ANIMCMD_FRAME(48, 5),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_08593718[] =
-{
- gUnknown_08593704,
-};
-//*
-const struct SpriteTemplate gBattleAnimSpriteTemplate_859371C =
-{
- .tileTag = ANIM_TAG_EXPLOSION,
- .paletteTag = ANIM_TAG_EXPLOSION,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_08593718,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80A77C8,
-};
-
-const union AffineAnimCmd gUnknown_08593734[] =
-{
- AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 2),
- AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 4),
- AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 2),
- AFFINEANIMCMD_JUMP(0),
-};
-
-const union AffineAnimCmd gUnknown_08593754[] =
-{
- AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
- AFFINEANIMCMD_END,
-};
-
-const union AffineAnimCmd gUnknown_08593764[] =
-{
- AFFINEANIMCMD_FRAME(0xFFF8, 0x4, 0, 8),
- AFFINEANIMCMD_LOOP(0),
- AFFINEANIMCMD_FRAME(0x10, 0xFFF8, 0, 8),
- AFFINEANIMCMD_FRAME(0xFFF0, 0x8, 0, 8),
- AFFINEANIMCMD_LOOP(1),
- AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
- AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 15),
- AFFINEANIMCMD_END,
-};
-
-const union AffineAnimCmd *const gUnknown_085937A4[] =
-{
- gUnknown_08593734,
- gUnknown_08593754,
- gUnknown_08593764,
-};
-//*
-const struct SpriteTemplate gUnknown_085937B0 =
-{
- .tileTag = ANIM_TAG_BREAKING_EGG,
- .paletteTag = ANIM_TAG_BREAKING_EGG,
- .oam = &gUnknown_08524AF4,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gUnknown_085937A4,
- .callback = sub_8105538,
-};
-
-const union AffineAnimCmd gUnknown_085937C8[] =
-{
- AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0),
- AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 30),
- AFFINEANIMCMD_END_ALT(1),
-};
-
-const union AffineAnimCmd gUnknown_085937E0[] =
-{
- AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0),
- AFFINEANIMCMD_FRAME(0x20, 0x20, 0, 15),
- AFFINEANIMCMD_END_ALT(1),
-};
-
-const union AffineAnimCmd gUnknown_085937F8[] =
-{
- AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0),
- AFFINEANIMCMD_FRAME(0xB, 0xB, 0, 45),
- AFFINEANIMCMD_END_ALT(1),
-};
-
-const union AffineAnimCmd *const gUnknown_08593810[] =
-{
- gUnknown_085937C8,
- gUnknown_085937E0,
-};
-
-const union AffineAnimCmd *const gUnknown_08593818[] =
-{
- gUnknown_085937F8,
-};
-
-const struct SpriteTemplate gUnknown_0859381C =
-{
- .tileTag = ANIM_TAG_THIN_RING,
- .paletteTag = ANIM_TAG_THIN_RING,
- .oam = &gUnknown_085249DC,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gUnknown_08593810,
- .callback = sub_80A77C8,
-};
-//*
-const union AffineAnimCmd gUnknown_08593834[] =
-{
- AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0),
- AFFINEANIMCMD_FRAME(0xFFF0, 0xFFF0, 0, 30),
- AFFINEANIMCMD_END_ALT(1),
-};
-
-const union AffineAnimCmd *const gUnknown_0859384C[] =
-{
- gUnknown_08593834,
-};
-
-const struct SpriteTemplate gUnknown_08593850 =
-{
- .tileTag = ANIM_TAG_THIN_RING,
- .paletteTag = ANIM_TAG_THIN_RING,
- .oam = &gUnknown_08524AFC,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gUnknown_0859384C,
- .callback = sub_80A77C8,
-};
-
-const struct SpriteTemplate gUnknown_08593868 =
-{
- .tileTag = ANIM_TAG_THIN_RING,
- .paletteTag = ANIM_TAG_THIN_RING,
- .oam = &gUnknown_08524AFC,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gUnknown_08593810,
- .callback = sub_81051C4,
-};
-
-const struct SpriteTemplate gUnknown_08593880 =
-{
- .tileTag = ANIM_TAG_THIN_RING,
- .paletteTag = ANIM_TAG_THIN_RING,
- .oam = &gUnknown_08524AFC,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gUnknown_08593818,
- .callback = sub_81052A4,
-};
-
-const struct SpriteTemplate gBattleAnimSpriteTemplate_8593898 =
-{
- .tileTag = ANIM_TAG_THIN_RING,
- .paletteTag = ANIM_TAG_THIN_RING,
- .oam = &gUnknown_08524AFC,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gUnknown_08593810,
- .callback = sub_81054E8,
-};
-
-const union AffineAnimCmd gUnknown_085938B0[] =
-{
- AFFINEANIMCMD_FRAME(96, -13, 0, 8),
- AFFINEANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_085938C0[] =
-{
- ANIMCMD_FRAME(0, 3),
- ANIMCMD_FRAME(4, 3),
- ANIMCMD_FRAME(8, 3),
- ANIMCMD_FRAME(4, 3),
- ANIMCMD_FRAME(0, 3),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_085938D8[] =
-{
- gUnknown_085938C0,
-};
-
-const struct SpriteTemplate gUnknown_085938DC =
-{
- .tileTag = ANIM_TAG_SPEED_DUST,
- .paletteTag = ANIM_TAG_SPEED_DUST,
- .oam = &gUnknown_0852490C,
- .anims = gUnknown_085938D8,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8105C48,
-};
-
-const s8 gUnknown_085938F4[][2] =
-{
- {30, 28},
- {-20, 24},
- {16, 26},
- {-10, 28},
-};
-
-const union AnimCmd gUnknown_085938FC[] =
-{
- ANIMCMD_FRAME(0, 6),
- ANIMCMD_FRAME(16, 6),
- ANIMCMD_FRAME(32, 15),
- ANIMCMD_FRAME(16, 6),
- ANIMCMD_FRAME(0, 6),
- ANIMCMD_FRAME(16, 6, .hFlip = TRUE),
- ANIMCMD_FRAME(32, 15, .hFlip = TRUE),
- ANIMCMD_FRAME(16, 6, .hFlip = TRUE),
- ANIMCMD_FRAME(0, 6),
- ANIMCMD_FRAME(16, 6),
- ANIMCMD_FRAME(32, 15),
- ANIMCMD_FRAME(16, 6),
- ANIMCMD_FRAME(0, 6),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_08593934[] =
-{
- gUnknown_085938FC,
-};
-
-const struct SpriteTemplate gUnknown_08593938 =
-{
- .tileTag = ANIM_TAG_BELL,
- .paletteTag = ANIM_TAG_BELL,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_08593934,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80A77C8,
-};
-
-const u16 gUnknown_08593950[] =
-{
- 10206,
- 9999,
- 9998,
- 0,
-};
-
-const struct SpriteTemplate gUnknown_08593958 =
-{
- .tileTag = ANIM_TAG_MUSIC_NOTES_2,
- .paletteTag = ANIM_TAG_MUSIC_NOTES_2,
- .oam = &gUnknown_0852490C,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8105DE8,
-};
-
-const struct SpriteTemplate gUnknown_08593970 =
-{
- .tileTag = ANIM_TAG_MAGENTA_HEART,
- .paletteTag = ANIM_TAG_MAGENTA_HEART,
- .oam = &gUnknown_0852490C,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8105E60,
-};
-
-const union AffineAnimCmd gUnknown_08593988[] =
-{
- AFFINEANIMCMD_FRAME(0x000A, 0xFFF3, 0x00, 0x0A),
- AFFINEANIMCMD_FRAME(0xFFF6, 0x000D, 0x00, 0x0A),
- AFFINEANIMCMD_END,
-};
-
-const struct SpriteTemplate gUnknown_085939A0 =
-{
- .tileTag = ANIM_TAG_RED_HEART,
- .paletteTag = ANIM_TAG_RED_HEART,
- .oam = &gUnknown_0852490C,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8106140,
-};
-
-const struct SpriteTemplate gBattleAnimSpriteTemplate_85939B8 =
-{
- .tileTag = ANIM_TAG_RED_HEART,
- .paletteTag = ANIM_TAG_RED_HEART,
- .oam = &gUnknown_0852490C,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_81061C4,
-};
-
-const struct SpriteTemplate gUnknown_085939D0 =
-{
- .tileTag = ANIM_TAG_RED_HEART,
- .paletteTag = ANIM_TAG_RED_HEART,
- .oam = &gUnknown_0852490C,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_810624C,
-};
-
-const union AffineAnimCmd gUnknown_085939E8[] =
-{
- AFFINEANIMCMD_FRAME(0x80, 0x80, 0, 0),
- AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 1),
- AFFINEANIMCMD_JUMP(1),
-};
-
-const union AffineAnimCmd *const gUnknown_08593A00[] =
-{
- gUnknown_085939E8,
-};
-
-const struct SpriteTemplate gHiddenPowerOrbSpriteTemplate =
-{
- .tileTag = ANIM_TAG_RED_ORB,
- .paletteTag = ANIM_TAG_RED_ORB,
- .oam = &gUnknown_0852496C,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gUnknown_08593A00,
- .callback = sub_810673C,
-};
-
-const struct SpriteTemplate gHiddenPowerOrbScatterSpriteTemplate =
-{
- .tileTag = ANIM_TAG_RED_ORB,
- .paletteTag = ANIM_TAG_RED_ORB,
- .oam = &gUnknown_085249CC,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gUnknown_08593A00,
- .callback = sub_8106878,
-};
-
-const union AffineAnimCmd gUnknown_08593A34[] =
-{
- AFFINEANIMCMD_FRAME(0x80, 0x80, 0, 0),
- AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 1),
- AFFINEANIMCMD_JUMP(1),
-};
-
-const union AffineAnimCmd *const gUnknown_08593A4C[] =
-{
- gUnknown_08593A34,
-};
-
-const struct SpriteTemplate gUnknown_08593A50 =
-{
- .tileTag = ANIM_TAG_RED_ORB_2,
- .paletteTag = ANIM_TAG_RED_ORB_2,
- .oam = &gUnknown_085249C4,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gUnknown_08593A4C,
- .callback = sub_8106944,
-};
-
-const union AnimCmd gUnknown_08593A68[] =
-{
- ANIMCMD_FRAME(0, 4),
- ANIMCMD_FRAME(4, 4),
- ANIMCMD_FRAME(8, 4),
- ANIMCMD_FRAME(4, 4),
- ANIMCMD_FRAME(0, 4),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_08593A80[] =
-{
- gUnknown_08593A68,
-};
-
-const struct SpriteTemplate gUnknown_08593A84 =
-{
- .tileTag = ANIM_TAG_EYE_SPARKLE,
- .paletteTag = ANIM_TAG_EYE_SPARKLE,
- .oam = &gUnknown_0852490C,
- .anims = gUnknown_08593A80,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_81069B8,
-};
-
-const union AnimCmd gUnknown_08593A9C[] =
-{
- ANIMCMD_FRAME(0, 24),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_08593AA4[] =
-{
- gUnknown_08593A9C,
-};
-
-const struct SpriteTemplate gUnknown_08593AA8 =
-{
- .tileTag = ANIM_TAG_ANGEL,
- .paletteTag = ANIM_TAG_ANGEL,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_08593AA4,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_81069D0,
-};
-
-const struct SpriteTemplate gUnknown_08593AC0 =
-{
- .tileTag = ANIM_TAG_PINK_HEART,
- .paletteTag = ANIM_TAG_PINK_HEART,
- .oam = &gUnknown_0852490C,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8106AD0,
-};
-
-const union AnimCmd gUnknown_08593AD8[] =
-{
- ANIMCMD_FRAME(0, 3),
- ANIMCMD_JUMP(0),
-};
-
-const union AnimCmd gUnknown_08593AE0[] =
-{
- ANIMCMD_FRAME(16, 3),
- ANIMCMD_JUMP(0),
-};
-
-const union AnimCmd *const gUnknown_08593AE8[] =
-{
- gUnknown_08593AD8,
- gUnknown_08593AE0,
-};
-
-const struct SpriteTemplate gUnknown_08593AF0 =
-{
- .tileTag = ANIM_TAG_DEVIL,
- .paletteTag = ANIM_TAG_DEVIL,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_08593AE8,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8106B54,
-};
-
-const union AnimCmd gUnknown_08593B08[] =
-{
- ANIMCMD_FRAME(0, 4),
- ANIMCMD_FRAME(16, 4),
- ANIMCMD_FRAME(32, 4),
- ANIMCMD_FRAME(48, 4),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_08593B1C[] =
-{
- ANIMCMD_FRAME(0, 4, .hFlip = TRUE),
- ANIMCMD_FRAME(16, 4, .hFlip = TRUE),
- ANIMCMD_FRAME(32, 4, .hFlip = TRUE),
- ANIMCMD_FRAME(48, 4, .hFlip = TRUE),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_08593B30[] =
-{
- gUnknown_08593B08,
- gUnknown_08593B1C,
-};
-
-const struct SpriteTemplate gUnknown_08593B38 =
-{
- .tileTag = ANIM_TAG_SWIPE,
- .paletteTag = ANIM_TAG_SWIPE,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_08593B30,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8106C80,
-};
-
-const union AnimCmd gUnknown_08593B50[] =
-{
- ANIMCMD_FRAME(0, 8),
- ANIMCMD_FRAME(16, 8),
- ANIMCMD_FRAME(32, 8),
- ANIMCMD_FRAME(16, 8),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_08593B64[] =
-{
- ANIMCMD_FRAME(16, 8, .hFlip = TRUE),
- ANIMCMD_FRAME(32, 8, .hFlip = TRUE),
- ANIMCMD_FRAME(16, 8, .hFlip = TRUE),
- ANIMCMD_FRAME(0, 8, .hFlip = TRUE),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_08593B78[] =
-{
- gUnknown_08593B50,
- gUnknown_08593B64,
-};
-
-const struct SpriteTemplate gUnknown_08593B80 =
-{
- .tileTag = ANIM_TAG_MOVEMENT_WAVES,
- .paletteTag = ANIM_TAG_MOVEMENT_WAVES,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_08593B78,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8106CD0,
-};
-
-const union AffineAnimCmd gUnknown_08593B98[] =
-{
- AFFINEANIMCMD_FRAME(-12, 8, 0, 4),
- AFFINEANIMCMD_FRAME(20, -20, 0, 4),
- AFFINEANIMCMD_FRAME(-8, 12, 0, 4),
- AFFINEANIMCMD_END,
-};
-
-const struct SpriteTemplate gBattleAnimSpriteTemplate_8593BB8 =
-{
- .tileTag = ANIM_TAG_JAGGED_MUSIC_NOTE,
- .paletteTag = ANIM_TAG_JAGGED_MUSIC_NOTE,
- .oam = &gUnknown_08524914,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8106E00,
-};
-
-const union AffineAnimCmd gUnknown_08593BD0[] =
-{
- AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 5),
- AFFINEANIMCMD_END,
-};
-
-const union AffineAnimCmd gUnknown_08593BE0[] =
-{
- AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 16),
- AFFINEANIMCMD_END_ALT(1),
-};
-
-const union AffineAnimCmd gUnknown_08593BF0[] =
-{
- AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 16),
- AFFINEANIMCMD_END_ALT(1),
-};
-
-const union AffineAnimCmd *const gUnknown_08593C00[] =
-{
- gUnknown_08593BD0,
- gUnknown_08593BE0,
- gUnknown_08593BF0,
-};
-
-extern const union AnimCmd *const gUnknown_08592FCC[];
-const struct SpriteTemplate gUnknown_08593C0C =
-{
- .tileTag = ANIM_TAG_MUSIC_NOTES_2,
- .paletteTag = ANIM_TAG_MUSIC_NOTES_2,
- .oam = &gUnknown_0852496C,
- .anims = gUnknown_08592FCC,
- .images = NULL,
- .affineAnims = gUnknown_08593C00,
- .callback = sub_8106F60,
-};
-
-const struct SpriteTemplate gUnknown_08593C24 =
-{
- .tileTag = ANIM_TAG_MUSIC_NOTES_2,
- .paletteTag = ANIM_TAG_MUSIC_NOTES_2,
- .oam = &gUnknown_0852496C,
- .anims = gUnknown_08592FCC,
- .images = NULL,
- .affineAnims = gUnknown_08593C00,
- .callback = sub_8106F00,
-};
-
-const union AffineAnimCmd gUnknown_08593C3C[] =
-{
- AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
- AFFINEANIMCMD_END,
-};
-
-const union AffineAnimCmd gUnknown_08593C4C[] =
-{
- AFFINEANIMCMD_FRAME(0x200, 0x100, 0, 0),
- AFFINEANIMCMD_END,
-};
-
-const union AffineAnimCmd *const gUnknown_08593C5C[] =
-{
- gUnknown_08593C3C,
- gUnknown_08593C4C,
-};
-
-const struct SpriteTemplate gUnknown_08593C64 =
-{
- .tileTag = ANIM_TAG_GUARD_RING,
- .paletteTag = ANIM_TAG_GUARD_RING,
- .oam = &gUnknown_08524B1C,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gUnknown_08593C5C,
- .callback = sub_81070AC,
-};
diff --git a/src/electric.c b/src/electric.c
index 4a0c5525e..5d772e042 100644
--- a/src/electric.c
+++ b/src/electric.c
@@ -5,7 +5,6 @@
#include "constants/songs.h"
#include "sound.h"
-extern void sub_80A62EC(struct Sprite *);
extern void sub_810E2C8(struct Sprite *);
extern bool8 sub_810B614(struct Task *task, u8 taskId);
extern void TranslateAnimSpriteToTargetMonLocation(struct Sprite *);
@@ -487,13 +486,13 @@ static void sub_810A214(struct Sprite *sprite)
static void sub_810A258(struct Sprite *sprite)
{
if (sprite->affineAnimEnded)
- move_anim_8074EE0(sprite);
+ DestroySpriteAndMatrix(sprite);
}
static void sub_810A274(struct Sprite *sprite)
{
- sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
- sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
{
@@ -509,65 +508,55 @@ static void sub_810A274(struct Sprite *sprite)
sprite->data[1] = gBattleAnimArgs[2];
sprite->data[2] = gBattleAnimArgs[3];
sprite->data[3] = gBattleAnimArgs[4];
- StoreSpriteCallbackInData6(sprite, move_anim_8074EE0);
- sprite->callback = sub_80A62EC;
+ StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
+ sprite->callback = TranslateSpriteInCircleOverDuration;
}
static void sub_810A308(struct Sprite *sprite)
{
- u8 slot;
+ u8 battler;
u32 matrixNum;
s16 sineVal;
switch (gBattleAnimArgs[4])
{
case 0:
- slot = gBattleAnimAttacker;
+ battler = gBattleAnimAttacker;
break;
case 1:
default:
- slot = gBattleAnimTarget;
+ battler = gBattleAnimTarget;
break;
case 2:
- if (!IsBattlerSpriteVisible(gBattleAnimAttacker ^ 2))
- {
- slot = gBattleAnimAttacker;
- }
+ if (!IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker)))
+ battler = gBattleAnimAttacker;
else
- {
- slot = gBattleAnimAttacker ^ 2;
- }
+ battler = BATTLE_PARTNER(gBattleAnimAttacker);
break;
case 3:
- if (IsBattlerSpriteVisible(gBattleAnimAttacker ^ 2))
- {
- slot = gBattleAnimTarget ^ 2;
- }
+ if (IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker)))
+ battler = BATTLE_PARTNER(gBattleAnimTarget);
else
- {
- slot = gBattleAnimTarget;
- }
+ battler = gBattleAnimTarget;
break;
}
if (gBattleAnimArgs[5] == 0)
{
- sprite->pos1.x = GetBattlerSpriteCoord(slot, 0);
- sprite->pos1.y = GetBattlerSpriteCoord(slot, 1);
+ sprite->pos1.x = GetBattlerSpriteCoord(battler, BATTLER_COORD_X);
+ sprite->pos1.y = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y);
}
else
{
- sprite->pos1.x = GetBattlerSpriteCoord(slot, 2);
- sprite->pos1.y = GetBattlerSpriteCoord(slot, 3);
+ sprite->pos1.x = GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2);
+ sprite->pos1.y = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y_PIC_OFFSET);
}
sprite->pos2.x = (gSineTable[gBattleAnimArgs[0]] * gBattleAnimArgs[1]) >> 8;
sprite->pos2.y = (gSineTable[gBattleAnimArgs[0] + 64] * gBattleAnimArgs[1]) >> 8;
if (gBattleAnimArgs[6] & 1)
- {
- sprite->oam.priority = sub_80A8328(slot) + 1;
- }
+ sprite->oam.priority = sub_80A8328(battler) + 1;
matrixNum = sprite->oam.matrixNum;
sineVal = gSineTable[gBattleAnimArgs[2]];
@@ -585,9 +574,9 @@ static void sub_810A46C(struct Sprite *sprite)
InitAnimSpritePos(sprite, 1);
sprite->data[0] = gBattleAnimArgs[3];
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[2];
sprite->data[6] = gBattleAnimArgs[5];
@@ -627,8 +616,8 @@ static void sub_810A5BC(struct Sprite *sprite)
if (IsContest() || GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER)
gBattleAnimArgs[1] = -gBattleAnimArgs[1];
- sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[1];
- sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[2];
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[1];
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[2];
sprite->data[3] = gBattleAnimArgs[0];
sprite->data[4] = gBattleAnimArgs[3];
sprite->data[5] = gBattleAnimArgs[3];
@@ -637,19 +626,19 @@ static void sub_810A5BC(struct Sprite *sprite)
static void sub_810A628(struct Sprite *sprite)
{
- u8 bank;
+ u8 battler;
sprite->data[0] = gBattleAnimArgs[3];
if (gBattleAnimArgs[7] & 0x8000)
- bank = gBattleAnimTarget;
+ battler = gBattleAnimTarget;
else
- bank = gBattleAnimAttacker;
+ battler = gBattleAnimAttacker;
- if (IsContest() || GetBattlerSide(bank) == B_SIDE_PLAYER)
+ if (IsContest() || GetBattlerSide(battler) == B_SIDE_PLAYER)
gBattleAnimArgs[0] = -gBattleAnimArgs[0];
- sprite->pos1.x = GetBattlerSpriteCoord(bank, 2) + gBattleAnimArgs[0];
- sprite->pos1.y = GetBattlerSpriteCoord(bank, 3) + gBattleAnimArgs[1];
+ sprite->pos1.x = GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2) + gBattleAnimArgs[0];
+ sprite->pos1.y = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[1];
sprite->data[4] = gBattleAnimArgs[7] & 0x7FFF;
sprite->data[5] = gBattleAnimArgs[2];
@@ -658,7 +647,7 @@ static void sub_810A628(struct Sprite *sprite)
sprite->oam.tileNum += gBattleAnimArgs[6] * 4;
sprite->callback = sub_810A6EC;
- sub_810A6EC(sprite);
+ sprite->callback(sprite);
}
static void sub_810A6EC(struct Sprite *sprite)
@@ -1015,13 +1004,13 @@ void sub_810AAFC(u8 taskId)
if (!gBattleAnimArgs[0])
{
- task->data[14] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
- task->data[15] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ task->data[14] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ task->data[15] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
}
else
{
- task->data[14] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
- task->data[15] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ task->data[14] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ task->data[15] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
}
task->data[6] = gBattleAnimArgs[1];
@@ -1061,7 +1050,7 @@ void sub_810AB78(u8 taskId)
InitAnimLinearTranslation(sprite);
StoreSpriteCallbackInData6(sprite, sub_810ACC0);
- sprite->callback = sub_80A67D8;
+ sprite->callback = RunStoredCallbackWhenAnimEnds;
if (++task->data[9] > 15)
task->data[9] = 0;
@@ -1101,43 +1090,43 @@ static void sub_810ACD8(struct Sprite *sprite)
{
if (!gBattleAnimArgs[0])
{
- 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);
}
else
{
- sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
- sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
}
- StoreSpriteCallbackInData6(sprite, move_anim_8074EE0);
- sprite->callback = sub_80A67BC;
+ StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
+ sprite->callback = RunStoredCallbackWhenAffineAnimEnds;
}
static void sub_810AD30(struct Sprite *sprite)
{
if (!gBattleAnimArgs[0])
{
- 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);
}
else
{
- sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
- sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
}
sprite->pos2.x = gBattleAnimArgs[1];
sprite->pos2.y = gBattleAnimArgs[2];
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
- sprite->callback = sub_80A67D8;
+ sprite->callback = RunStoredCallbackWhenAnimEnds;
}
static void sub_810AD98(struct Sprite *sprite)
{
StartSpriteAffineAnim(sprite, 1);
- 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[6] = GetAnimBattlerSpriteId(0);
sprite->data[7] = 16;
@@ -1159,7 +1148,7 @@ static void sub_810ADF8(struct Sprite *sprite)
sprite->pos1.x += sprite->data[7];
gSprites[sprite->data[6]].pos2.x += sprite->data[7];
if ((u16)(sprite->pos1.x + 80) > 400)
- move_anim_8074EE0(sprite);
+ DestroySpriteAndMatrix(sprite);
}
}
@@ -1171,7 +1160,7 @@ void sub_810AE5C(u8 taskId)
{
case 0:
task->data[15] = GetAnimBattlerSpriteId(0);
- task->data[14] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
+ task->data[14] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
{
task->data[14] = -32;
@@ -1230,14 +1219,14 @@ void sub_810AFCC(u8 taskId)
switch (gBattleAnimArgs[0])
{
case 0:
- task->data[3] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
- task->data[5] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ task->data[3] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ task->data[5] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
task->data[4] = (task->data[1] * 128) + 120;
break;
case 4:
task->data[3] = 120 - (task->data[1] * 128);
- task->data[5] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
- task->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 2) - (task->data[1] * 32);
+ task->data[5] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
+ task->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) - (task->data[1] * 32);
break;
default:
if ((gBattleAnimArgs[0] & 1) != 0)
@@ -1337,14 +1326,14 @@ static void sub_810B23C(struct Sprite *sprite)
switch (sprite->data[0])
{
case 0:
- 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);
StartSpriteAffineAnim(sprite, 2);
sprite->data[0]++;
break;
case 1:
if (sprite->affineAnimEnded)
- move_anim_8074EE0(sprite);
+ DestroySpriteAndMatrix(sprite);
}
}
@@ -1355,10 +1344,10 @@ void sub_810B29C(u8 taskId)
switch (task->data[0])
{
case 0:
- task->data[6] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
- task->data[7] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ task->data[6] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ task->data[7] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
task->data[8] = 4;
- task->data[10] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ task->data[10] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
task->data[9] = (task->data[10] - task->data[6]) / 5;
task->data[4] = 7;
task->data[5] = -1;
@@ -1479,15 +1468,15 @@ void sub_810B55C(u8 taskId)
switch (task->data[0])
{
case 0:
- task->data[15] = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + 32;
+ task->data[15] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + 32;
task->data[14] = task->data[15];
while (task->data[14] > 16)
{
task->data[14] -= 32;
}
- task->data[13] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
- task->data[12] = GetBattlerSubpriority(gBattleAnimTarget) - 2;
+ task->data[13] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ task->data[12] = GetBattlerSpriteSubpriority(gBattleAnimTarget) - 2;
task->data[0]++;
break;
case 1:
diff --git a/src/fight.c b/src/fight.c
index c9000fae4..fb1c01b78 100644
--- a/src/fight.c
+++ b/src/fight.c
@@ -828,7 +828,7 @@ static void sub_810D6A8(struct Sprite *sprite)
sprite->data[4] = GetBattlerSpriteCoord(sprite->data[7], 3);
InitAnimLinearTranslation(sprite);
- StoreSpriteCallbackInData6(sprite, move_anim_8074EE0);
+ StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
sprite->callback = sub_80A6F98;
}
}
@@ -839,7 +839,7 @@ void sub_810D714(struct Sprite *sprite)
sprite->pos1.y = 120;
sprite->data[0] = gBattleAnimArgs[3];
- sub_80A8048(&sprite->data[4], &sprite->data[5], (void *)(sprite->pos1.y << 8));
+ StorePointerInVars(&sprite->data[4], &sprite->data[5], (void *)(sprite->pos1.y << 8));
sprite->data[6] = gBattleAnimArgs[1];
sprite->oam.tileNum += gBattleAnimArgs[2] * 4;
@@ -853,9 +853,9 @@ static void sub_810D770(struct Sprite *sprite)
if (sprite->data[0] != 0)
{
- var0 = sub_80A8050(sprite->data[4], sprite->data[5]);
+ var0 = LoadPointerFromVars(sprite->data[4], sprite->data[5]);
var0 -= sprite->data[6];
- sub_80A8048(&sprite->data[4], &sprite->data[5], var0);
+ StorePointerInVars(&sprite->data[4], &sprite->data[5], var0);
var0 = (void *)(((intptr_t)var0) >> 8);
sprite->pos1.y = (intptr_t)var0;
@@ -978,7 +978,7 @@ void sub_810DA10(struct Sprite *sprite)
StartSpriteAnim(sprite, 1);
}
- sprite->callback = sub_80A67D8;
+ sprite->callback = RunStoredCallbackWhenAnimEnds;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
diff --git a/src/fire.c b/src/fire.c
index 44ae9d320..18ec7b95c 100644
--- a/src/fire.c
+++ b/src/fire.c
@@ -466,7 +466,7 @@ static void sub_8108EC8(struct Sprite *sprite)
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
- sprite->callback = sub_80A634C;
+ sprite->callback = TranslateSpriteInGrowingCircleOverDuration;
sprite->callback(sprite);
}
@@ -479,13 +479,13 @@ static void sub_8108F08(struct Sprite *sprite)
sprite->data[1] = gBattleAnimArgs[2];
sprite->data[2] = gBattleAnimArgs[3];
- sprite->callback = sub_80A656C;
+ sprite->callback = TranslateAnimLinearSimple;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
static void sub_8108F4C(struct Sprite *sprite)
{
- sub_80A6838(sprite);
+ SetSpriteCoordsToAnimAttackerCoords(sprite);
if (GetBattlerSide(gBattleAnimAttacker))
{
@@ -538,12 +538,12 @@ static void sub_8109028(struct Sprite *sprite)
}
if (sprite->data[0] == sprite->data[1])
- move_anim_8074EE0(sprite);
+ DestroySpriteAndMatrix(sprite);
}
static void sub_8109064(struct Sprite *sprite)
{
- sub_80A6838(sprite);
+ SetSpriteCoordsToAnimAttackerCoords(sprite);
if (GetBattlerSide(gBattleAnimAttacker))
{
@@ -588,7 +588,7 @@ static void sub_81090D8(struct Sprite *sprite)
}
else
{
- move_anim_8074EE0(sprite);
+ DestroySpriteAndMatrix(sprite);
}
}
@@ -779,7 +779,7 @@ void sub_8109460(u8 taskId) // initialize animation task for Move_ERUPTION?
task->data[5] = GetBattlerSide(gBattleAnimAttacker);
task->data[6] = 0;
- sub_80A7270(task->data[15], 0);
+ PrepareBattlerSpriteForRotScale(task->data[15], ST_OAM_OBJ_NORMAL);
task->func = sub_81094D0;
}
@@ -816,7 +816,7 @@ static void sub_81094D0(u8 taskId) // animate Move_ERUPTION?
if(!sub_80A80C8(task))
{
- sub_80A7E6C(task->data[15]);
+ SetBattlerSpriteYOffsetFromYScale(task->data[15]);
gSprites[task->data[15]].pos2.x = 0;
task->data[1] = 0;
@@ -879,7 +879,7 @@ static void sub_81094D0(u8 taskId) // animate Move_ERUPTION?
if (!sub_80A80C8(task))
{
gSprites[task->data[15]].pos1.y = task->data[4];
- sub_80A7344(task->data[15]);
+ ResetSpriteRotScale(task->data[15]);
task->data[2] = 0;
task->data[0]++;
diff --git a/src/ghost.c b/src/ghost.c
index 3135004da..d4f6512a8 100644
--- a/src/ghost.c
+++ b/src/ghost.c
@@ -342,8 +342,8 @@ void sub_811188C(u8 taskId)
SetGpuReg(REG_OFFSET_BLDCNT, (BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL));
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 0x10));
spriteId = GetAnimBattlerSpriteId(0);
- sub_80A7270(spriteId, 1);
- obj_id_set_rotscale(spriteId, 128, 128, 0);
+ PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_BLEND);
+ SetSpriteRotScale(spriteId, 128, 128, 0);
gSprites[spriteId].invisible = FALSE;
gTasks[taskId].data[0] = 128;
gTasks[taskId].data[1] = *gBattleAnimArgs;
@@ -381,11 +381,11 @@ static void sub_811196C(u8 taskId)
gTasks[taskId].data[0] += 8;
if (gTasks[taskId].data[0] <= 0xFF)
{
- obj_id_set_rotscale(spriteId, gTasks[taskId].data[0], gTasks[taskId].data[0], 0);
+ SetSpriteRotScale(spriteId, gTasks[taskId].data[0], gTasks[taskId].data[0], 0);
}
else
{
- sub_80A7344(spriteId);
+ ResetSpriteRotScale(spriteId);
DestroyAnimVisualTask(taskId);
SetGpuReg(REG_OFFSET_BLDCNT, 0);
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
@@ -454,7 +454,7 @@ static void AnimShadowBallStep(struct Sprite *sprite)
sprite->data[0] += 1;
break;
case 3:
- move_anim_8074EE0(sprite);
+ DestroySpriteAndMatrix(sprite);
break;
}
}
@@ -510,7 +510,7 @@ void sub_8111C50(u8 taskId)
struct Task *task;
task = &gTasks[taskId];
- task->data[0] = duplicate_obj_of_side_rel2move_in_transparent_mode(1);
+ task->data[0] = CloneBattlerSpriteWithBlend(1);
if (task->data[0] < 0)
{
DestroyAnimVisualTask(taskId);
@@ -536,7 +536,7 @@ void sub_8111C50(u8 taskId)
gSprites[task->data[0]].data[3] = 0;
gSprites[task->data[0]].data[4] = 0;
StoreSpriteCallbackInData6(&gSprites[task->data[0]], SpriteCallbackDummy);
- gSprites[task->data[0]].callback = sub_80A656C;
+ gSprites[task->data[0]].callback = TranslateAnimLinearSimple;
task->func = sub_8111D78;
}
@@ -602,7 +602,7 @@ static void sub_8111E78(u8 taskId)
}
else
{
- task->data[0] = duplicate_obj_of_side_rel2move_in_transparent_mode(1);
+ task->data[0] = CloneBattlerSpriteWithBlend(1);
if (task->data[0] < 0)
{
FreeSpritePaletteByTag(0x2771);
@@ -1171,7 +1171,7 @@ void sub_8112C6C(u8 taskId)
task->data[11] = (sub_80A861C(gBattleAnimAttacker, 1) / 2) + 8;
task->data[7] = 0;
task->data[5] = sub_80A8328(gBattleAnimAttacker);
- task->data[6] = GetBattlerSubpriority(gBattleAnimAttacker) - 2;
+ task->data[6] = GetBattlerSpriteSubpriority(gBattleAnimAttacker) - 2;
task->data[3] = 0;
task->data[4] = 16;
SetGpuReg(REG_OFFSET_BLDCNT, (BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL));
@@ -1322,6 +1322,6 @@ static void sub_8112FB8(struct Sprite *sprite)
gSprites[sprite->data[5]].pos2.x = 0;
gSprites[sprite->data[5]].pos2.y = 0;
gSprites[sprite->data[5]].pos1.y -= 8;
- sprite->callback = move_anim_8074EE0;
+ sprite->callback = DestroySpriteAndMatrix;
}
}
diff --git a/src/graphics.c b/src/graphics.c
index b2de074bc..c0deb2883 100644
--- a/src/graphics.c
+++ b/src/graphics.c
@@ -897,9 +897,9 @@ const u32 gBattleStatMask6_Pal[] = INCBIN_U32("graphics/battle_anims/masks/stat6
const u32 gBattleStatMask7_Pal[] = INCBIN_U32("graphics/battle_anims/masks/stat7.gbapal.lz");
const u32 gBattleStatMask8_Pal[] = INCBIN_U32("graphics/battle_anims/masks/stat8.gbapal.lz");
-const u32 gUnknown_08C2DC68[] = INCBIN_U32("graphics/battle_anims/masks/cure_bubbles.4bpp.lz");
-const u32 gUnknown_08C2DDA4[] = INCBIN_U32("graphics/battle_anims/masks/cure_bubbles.gbapal.lz");
-const u32 gUnknown_08C2DDC4[] = INCBIN_U32("graphics/battle_anims/masks/cure_bubbles.bin.lz");
+const u8 gUnknown_08C2DC68[] = INCBIN_U8("graphics/battle_anims/masks/cure_bubbles.4bpp.lz");
+const u16 gUnknown_08C2DDA4[] = INCBIN_U16("graphics/battle_anims/masks/cure_bubbles.gbapal.lz");
+const u8 gUnknown_08C2DDC4[] = INCBIN_U8("graphics/battle_anims/masks/cure_bubbles.bin.lz");
const u32 gBattleAnimSpritePalette_245[] = INCBIN_U32("graphics/battle_anims/sprites/245.gbapal.lz");
const u32 gBattleAnimSpriteSheet_245[] = INCBIN_U32("graphics/battle_anims/sprites/245.4bpp.lz");
diff --git a/src/ground.c b/src/ground.c
index 6cb7b8557..77acd3919 100644
--- a/src/ground.c
+++ b/src/ground.c
@@ -221,7 +221,7 @@ void AnimDirtScatter(struct Sprite *sprite)
sprite->data[2] = targetXPos + xOffset;
sprite->data[4] = targetYPos + yOffset;
sprite->callback = StartAnimLinearTranslation;
- StoreSpriteCallbackInData6(sprite, move_anim_8074EE0);
+ StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
}
// Moves a particle of dirt in the Mud Sport animation.
diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c
index ad5673036..f7792e935 100644
--- a/src/hall_of_fame.c
+++ b/src/hall_of_fame.c
@@ -497,7 +497,7 @@ static void Task_Hof_InitTeamSaveData(u8 taskId)
for (i = 0; i < HALL_OF_FAME_MAX_TEAMS; i++, lastSavedTeam++)
{
- if (lastSavedTeam->mon[0].species == 0)
+ if (lastSavedTeam->mon[0].species == SPECIES_NONE)
break;
}
if (i >= HALL_OF_FAME_MAX_TEAMS)
diff --git a/src/normal.c b/src/normal.c
index 3de8b1157..e20f74588 100644
--- a/src/normal.c
+++ b/src/normal.c
@@ -410,8 +410,8 @@ void sub_81159B4(struct Sprite *sprite)
sprite->data[3] = 40;
sprite->data[4] = 112;
sprite->data[5] = 0;
- StoreSpriteCallbackInData6(sprite, move_anim_8074EE0);
- sprite->callback = sub_80A634C;
+ StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
+ sprite->callback = TranslateSpriteInGrowingCircleOverDuration;
sprite->callback(sprite);
}
@@ -884,7 +884,7 @@ void sub_8116388(struct Sprite *sprite)
else
sub_80A6980(sprite, TRUE);
- sprite->callback = sub_80A67BC;
+ sprite->callback = RunStoredCallbackWhenAffineAnimEnds;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
@@ -897,7 +897,7 @@ static void sub_81163D0(struct Sprite *sprite)
sub_80A6980(sprite, TRUE);
sprite->data[0] = gBattleAnimArgs[4];
- sprite->callback = sub_80A67BC;
+ sprite->callback = RunStoredCallbackWhenAffineAnimEnds;
StoreSpriteCallbackInData6(sprite, sub_810E2C8);
}
@@ -923,8 +923,8 @@ void sub_8116458(struct Sprite *sprite)
sprite->pos2.x += (Random2() % 48) - 24;
sprite->pos2.y += (Random2() % 24) - 12;
- StoreSpriteCallbackInData6(sprite, move_anim_8074EE0);
- sprite->callback = sub_80A67BC;
+ StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
+ sprite->callback = RunStoredCallbackWhenAffineAnimEnds;
}
void sub_81164F0(struct Sprite *sprite)
@@ -935,8 +935,8 @@ void sub_81164F0(struct Sprite *sprite)
sprite->pos2.x = gBattleAnimArgs[1];
sprite->pos2.y = gBattleAnimArgs[2];
StartSpriteAffineAnim(sprite, gBattleAnimArgs[3]);
- StoreSpriteCallbackInData6(sprite, move_anim_8074EE0);
- sprite->callback = sub_80A67BC;
+ StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
+ sprite->callback = RunStoredCallbackWhenAffineAnimEnds;
}
void sub_8116560(struct Sprite *sprite)
diff --git a/src/poison.c b/src/poison.c
index efa89ec13..c52299e3a 100644
--- a/src/poison.c
+++ b/src/poison.c
@@ -258,7 +258,7 @@ void sub_810DCD0(struct Sprite *sprite)
static void sub_810DD24(struct Sprite *sprite)
{
- sub_80A656C(sprite);
+ TranslateAnimLinearSimple(sprite);
sprite->data[1] -= sprite->data[5];
sprite->data[2] -= sprite->data[6];
diff --git a/src/pokemon.c b/src/pokemon.c
index 14b4ea388..640d70776 100644
--- a/src/pokemon.c
+++ b/src/pokemon.c
@@ -5929,13 +5929,13 @@ u16 HoennToNationalOrder(u16 hoennNum)
u16 SpeciesToCryId(u16 species)
{
- if (species <= 250)
+ if (species <= SPECIES_CELEBI - 1)
return species;
- if (species < 276)
- return 200;
+ if (species < SPECIES_TREECKO - 1)
+ return SPECIES_UNOWN - 1;
- return gSpeciesIdToCryId[species - 276];
+ return gSpeciesIdToCryId[species - (SPECIES_TREECKO - 1)];
}
void sub_806D544(u16 species, u32 personality, u8 *dest)
diff --git a/src/reshow_battle_screen.c b/src/reshow_battle_screen.c
index 1a5221616..06d2af5b7 100644
--- a/src/reshow_battle_screen.c
+++ b/src/reshow_battle_screen.c
@@ -226,7 +226,7 @@ static void CreateBattlerSprite(u8 battler)
return;
SetMultiuseSpriteTemplateToPokemon(GetMonData(&gEnemyParty[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES), GetBattlerPosition(battler));
- gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, GetBattlerSpriteCoord(battler, 2), posY, GetBattlerSubpriority(battler));
+ gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, GetBattlerSpriteCoord(battler, 2), posY, GetBattlerSpriteSubpriority(battler));
gSprites[gBattlerSpriteIds[battler]].oam.paletteNum = battler;
gSprites[gBattlerSpriteIds[battler]].callback = SpriteCallbackDummy;
gSprites[gBattlerSpriteIds[battler]].data[0] = battler;
@@ -241,7 +241,7 @@ static void CreateBattlerSprite(u8 battler)
SetMultiuseSpriteTemplateToTrainerBack(gSaveBlock2Ptr->playerGender, GetBattlerPosition(B_POSITION_PLAYER_LEFT));
gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, 0x50,
(8 - gTrainerBackPicCoords[gSaveBlock2Ptr->playerGender].coords) * 4 + 80,
- GetBattlerSubpriority(0));
+ GetBattlerSpriteSubpriority(0));
gSprites[gBattlerSpriteIds[battler]].oam.paletteNum = battler;
gSprites[gBattlerSpriteIds[battler]].callback = SpriteCallbackDummy;
gSprites[gBattlerSpriteIds[battler]].data[0] = battler;
@@ -251,7 +251,7 @@ static void CreateBattlerSprite(u8 battler)
SetMultiuseSpriteTemplateToTrainerBack(TRAINER_BACK_PIC_WALLY, GetBattlerPosition(0));
gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, 0x50,
(8 - gTrainerBackPicCoords[TRAINER_BACK_PIC_WALLY].coords) * 4 + 80,
- GetBattlerSubpriority(0));
+ GetBattlerSpriteSubpriority(0));
gSprites[gBattlerSpriteIds[battler]].oam.paletteNum = battler;
gSprites[gBattlerSpriteIds[battler]].callback = SpriteCallbackDummy;
gSprites[gBattlerSpriteIds[battler]].data[0] = battler;
@@ -262,7 +262,7 @@ static void CreateBattlerSprite(u8 battler)
return;
SetMultiuseSpriteTemplateToPokemon(GetMonData(&gPlayerParty[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES), GetBattlerPosition(battler));
- gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, GetBattlerSpriteCoord(battler, 2), posY, GetBattlerSubpriority(battler));
+ gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, GetBattlerSpriteCoord(battler, 2), posY, GetBattlerSpriteSubpriority(battler));
gSprites[gBattlerSpriteIds[battler]].oam.paletteNum = battler;
gSprites[gBattlerSpriteIds[battler]].callback = SpriteCallbackDummy;
gSprites[gBattlerSpriteIds[battler]].data[0] = battler;
diff --git a/src/rock.c b/src/rock.c
index 3b8e505d8..20d4ea738 100644
--- a/src/rock.c
+++ b/src/rock.c
@@ -340,7 +340,7 @@ static void sub_8110A70(struct Sprite *sprite)
sprite->data[3] = 32;
sprite->data[4] = -24;
- StoreSpriteCallbackInData6(sprite, move_anim_8074EE0);
+ StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
sprite->callback = sub_80A6450;
sprite->callback(sprite);
}
@@ -367,8 +367,8 @@ void sub_8110AB4(struct Sprite *sprite)
sprite->data[3] = 0;
sprite->data[4] = 0;
- sprite->callback = sub_80A656C;
- StoreSpriteCallbackInData6(sprite, move_anim_8074EE0);
+ sprite->callback = TranslateAnimLinearSimple;
+ StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
}
void sub_8110B38(struct Sprite *sprite)
diff --git a/src/tv.c b/src/tv.c
index 0d6e12279..267520095 100644
--- a/src/tv.c
+++ b/src/tv.c
@@ -3231,7 +3231,7 @@ u16 TV_GetSomeOtherSpeciesAlreadySeenByPlayer(u16 passedSpecies)
initSpecies = species;
while (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_SEEN) != TRUE || species == passedSpecies)
{
- if (species == 1)
+ if (species == SPECIES_NONE + 1)
{
species = NUM_SPECIES - 1;
}