summaryrefslogtreecommitdiff
path: root/src/battle
diff options
context:
space:
mode:
Diffstat (limited to 'src/battle')
-rw-r--r--src/battle/anim/aurora.c34
-rw-r--r--src/battle/anim/current.c2
-rw-r--r--src/battle/anim/fight.c14
-rw-r--r--src/battle/anim/flying.c2247
-rw-r--r--src/battle/anim/ghost.c23
-rw-r--r--src/battle/anim/ground.c2
-rw-r--r--src/battle/anim/heal.c2
-rw-r--r--src/battle/anim/hop_2.c2
-rw-r--r--src/battle/anim/ice.c1953
-rw-r--r--src/battle/anim/normal.c38
-rw-r--r--src/battle/anim/orbit.c2
-rw-r--r--src/battle/anim/orbs.c2
-rw-r--r--src/battle/anim/psychic.c4
-rw-r--r--src/battle/anim/rock.c30
-rw-r--r--src/battle/anim/splash.c11
-rw-r--r--src/battle/anim/tendrils.c2
-rw-r--r--src/battle/anim/tile.c2
-rw-r--r--src/battle/anim/water.c4
-rw-r--r--src/battle/anim/wisp_fire.c5
-rw-r--r--src/battle/battle_4.c167
-rw-r--r--src/battle/battle_anim.c1156
-rw-r--r--src/battle/battle_anim_812C144.c1169
-rwxr-xr-xsrc/battle/battle_anim_813F0F4.c285
-rw-r--r--src/battle/battle_interface.c4
24 files changed, 6137 insertions, 1023 deletions
diff --git a/src/battle/anim/aurora.c b/src/battle/anim/aurora.c
index c17748440..3564da811 100644
--- a/src/battle/anim/aurora.c
+++ b/src/battle/anim/aurora.c
@@ -9,9 +9,9 @@ extern s16 gBattleAnimArgs[8];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
-void sub_80D33B4(struct Sprite *sprite);
-static void sub_80D344C(struct Sprite *);
-static void sub_80D34D4(u8);
+void AnimAuroraRings(struct Sprite *sprite);
+static void AnimGrowAuroraRings(struct Sprite *);
+static void AnimTask_RotateMonPalette2(u8);
const union AnimCmd gSpriteAnim_83D9190[] =
{
@@ -43,7 +43,8 @@ const union AffineAnimCmd *const gSpriteAffineAnimTable_83D91C0[] =
gSpriteAffineAnim_83D91A8,
};
-const struct SpriteTemplate gBattleAnimSpriteTemplate_83D91C4 =
+// Multi-colored rings used in Aurora Beam.
+const struct SpriteTemplate RainbowRingSpriteTemplate =
{
.tileTag = 10140,
.paletteTag = 10140,
@@ -51,10 +52,16 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D91C4 =
.anims = gSpriteAnimTable_83D91A0,
.images = NULL,
.affineAnims = gSpriteAffineAnimTable_83D91C0,
- .callback = sub_80D33B4,
+ .callback = AnimAuroraRings,
};
-void sub_80D33B4(struct Sprite *sprite)
+// Animates the colorful rings in Aurora Beam linearly towards the target mon.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: target x offset
+// arg 3: target y offset
+// arg 4: duration
+void AnimAuroraRings(struct Sprite *sprite)
{
s16 r6;
@@ -69,12 +76,14 @@ void sub_80D33B4(struct Sprite *sprite)
sprite->data[3] = sprite->pos1.y;
sprite->data[4] = GetBattlerSpriteCoord(gAnimBankTarget, 3) + gBattleAnimArgs[3];
InitAnimLinearTranslation(sprite);
- sprite->callback = sub_80D344C;
+ sprite->callback = AnimGrowAuroraRings;
sprite->affineAnimPaused = TRUE;
sprite->callback(sprite);
}
-static void sub_80D344C(struct Sprite *sprite)
+// Grows the rings in Aurora Beam.
+// arg 7: if -1, grow the rings
+static void AnimGrowAuroraRings(struct Sprite *sprite)
{
if ((u16)gBattleAnimArgs[7] == 0xFFFF)
{
@@ -85,14 +94,17 @@ static void sub_80D344C(struct Sprite *sprite)
DestroyAnimSprite(sprite);
}
-void sub_80D3490(u8 taskId)
+// This seems to rotate the palette of the attacking mon, but the visual
+// effect is not noticeable in-game.
+// arg 0: duration
+void AnimTask_RotateMonPalette1(u8 taskId)
{
gTasks[taskId].data[0] = gBattleAnimArgs[0];
gTasks[taskId].data[2] = 0x100 + IndexOfSpritePaletteTag(0x279C) * 16;
- gTasks[taskId].func = sub_80D34D4;
+ gTasks[taskId].func = AnimTask_RotateMonPalette2;
}
-static void sub_80D34D4(u8 taskId)
+static void AnimTask_RotateMonPalette2(u8 taskId)
{
gTasks[taskId].data[10]++;
if (gTasks[taskId].data[10] == 3)
diff --git a/src/battle/anim/current.c b/src/battle/anim/current.c
index fb7bc4e1c..ea73b0116 100644
--- a/src/battle/anim/current.c
+++ b/src/battle/anim/current.c
@@ -463,7 +463,7 @@ static void sub_80D672C(struct Sprite *sprite)
void sub_80D679C(struct Sprite *sprite)
{
- sub_8078764(sprite, 0);
+ sub_8078764(sprite, FALSE);
sprite->oam.tileNum += gBattleAnimArgs[3] * 4;
if (gBattleAnimArgs[3] == 1)
diff --git a/src/battle/anim/fight.c b/src/battle/anim/fight.c
index 1a534aec7..505356a57 100644
--- a/src/battle/anim/fight.c
+++ b/src/battle/anim/fight.c
@@ -480,7 +480,7 @@ void AnimBasicFistOrFoot(struct Sprite *sprite)
if (gBattleAnimArgs[3] == 0)
InitAnimSpritePos(sprite, 1);
else
- sub_8078764(sprite, 1);
+ sub_8078764(sprite, TRUE);
sprite->data[0] = gBattleAnimArgs[2];
sprite->callback = WaitAnimForDuration;
@@ -553,7 +553,7 @@ static void sub_80D927C(struct Sprite *sprite)
void sub_80D92D0(struct Sprite *sprite)
{
- sub_8078764(sprite, 1);
+ sub_8078764(sprite, TRUE);
sprite->data[0] = 30;
if (gBattleAnimArgs[2] == 0)
@@ -593,7 +593,7 @@ void sub_80D9378(struct Sprite *sprite)
if ((gAnimBankAttacker ^ 2) == gAnimBankTarget && GetBattlerPosition(gAnimBankTarget) < 2)
gBattleAnimArgs[0] *= -1;
- sub_8078764(sprite, 1);
+ sub_8078764(sprite, TRUE);
if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER)
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
@@ -634,7 +634,7 @@ static void sub_80D9404(struct Sprite *sprite)
// arg 3: spin duration
void AnimSpinningKickOrPunch(struct Sprite *sprite)
{
- sub_8078764(sprite, 1);
+ sub_8078764(sprite, TRUE);
StartSpriteAnim(sprite, gBattleAnimArgs[2]);
sprite->data[0] = gBattleAnimArgs[3];
@@ -658,7 +658,7 @@ static void AnimSpinningKickOrPunchFinish(struct Sprite *sprite)
// arg 2: initial wait duration
void AnimStompFoot(struct Sprite *sprite)
{
- sub_8078764(sprite, 1);
+ sub_8078764(sprite, TRUE);
sprite->data[0] = gBattleAnimArgs[2];
sprite->callback = AnimStompFootStep;
@@ -689,7 +689,7 @@ void sub_80D9540(struct Sprite *sprite)
{
if (sprite->data[0] == 0)
{
- sub_8078764(sprite, 1);
+ sub_8078764(sprite, TRUE);
sprite->data[1] = gBattleAnimArgs[2];
sprite->data[2] = gBattleAnimArgs[3];
sprite->data[0]++;
@@ -986,7 +986,7 @@ void sub_80D9BD4(struct Sprite *sprite)
if (gBattleAnimArgs[2] == 0)
InitAnimSpritePos(sprite, 0);
else
- sub_8078764(sprite, 0);
+ sub_8078764(sprite, FALSE);
if (IsContest())
{
diff --git a/src/battle/anim/flying.c b/src/battle/anim/flying.c
index 35022db1f..646c80c53 100644
--- a/src/battle/anim/flying.c
+++ b/src/battle/anim/flying.c
@@ -4,11 +4,16 @@
#include "palette.h"
#include "rom_8077ABC.h"
#include "trig.h"
+#include "main.h"
+#include "random.h"
extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
extern u8 gAnimVisualTaskCount;
+extern struct OamMatrix gOamMatrices[];
+extern u8 gBanksBySide[];
+extern const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB538;
void sub_80785E4(struct Sprite *sprite);
void sub_80DA034(struct Sprite *sprite);
@@ -21,16 +26,24 @@ void sub_80DA348(struct Sprite *sprite);
void sub_80DA38C(struct Sprite *sprite);
void sub_80DA4D8(struct Sprite *sprite);
void sub_80DA410(struct Sprite *sprite);
+void sub_80DA6F0(struct Sprite *sprite);
void sub_80DAD30(struct Sprite *sprite);
void sub_80DAD84(struct Sprite *sprite);
+void sub_80DAF0C(struct Sprite *sprite);
void sub_80DB000(struct Sprite *sprite);
+void sub_80DB0A0(struct Sprite *sprite);
void sub_80DB194(struct Sprite *sprite);
void sub_80DB1F4(struct Sprite *sprite);
void sub_80DB288(struct Sprite *sprite);
+void sub_80DB2D0(struct Sprite *sprite);
+void sub_80DB330(struct Sprite *sprite);
void sub_80DB374(struct Sprite *sprite);
void sub_80DB458(struct Sprite *sprite);
+void sub_80DB508(struct Sprite *sprite);
void sub_80DB564(struct Sprite *sprite);
+void sub_80DB578(struct Sprite *sprite);
void sub_80DB5E4(struct Sprite *sprite);
+void sub_80DB6A0(struct Sprite *sprite);
void sub_80DA0DC(u8 taskId);
@@ -104,7 +117,7 @@ const union AffineAnimCmd gSpriteAffineAnim_83DA3FC[] =
const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA424[] =
{
- gSpriteAffineAnim_83DA3FC,
+ gSpriteAffineAnim_83DA3FC,
};
const union AffineAnimCmd gSpriteAffineAnim_83DA428[] =
@@ -356,27 +369,25 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA65C =
.callback = sub_80DB5E4,
};
-void sub_80DA034(struct Sprite *sprite)
+void sub_80DA034(struct Sprite *sprite)
{
- sub_8078764(sprite, 0);
+ sub_8078764(sprite, FALSE);
sprite->pos1.y += 20;
sprite->data[1] = 0xBF;
sprite->callback = sub_80DA05C;
sub_80DA05C(sprite);
}
-void sub_80DA05C(struct Sprite *sprite)
-{
+void sub_80DA05C(struct Sprite *sprite) {
sprite->pos2.x = Sin(sprite->data[1], 0x20);
sprite->pos2.y = Cos(sprite->data[1], 0x8);
sprite->data[1] = (sprite->data[1] + 5) & 0xFF;
- if(++sprite->data[0] == 0x47)
- {
+ if (++sprite->data[0] == 0x47) {
DestroyAnimSprite(sprite);
}
}
-void sub_80DA09C(u8 taskId)
+void sub_80DA09C(u8 taskId)
{
gTasks[taskId].data[0] = gBattleAnimArgs[1];
gTasks[taskId].data[1] = gBattleAnimArgs[0];
@@ -384,113 +395,45 @@ void sub_80DA09C(u8 taskId)
gTasks[taskId].func = sub_80DA0DC;
}
-#ifdef NONMATCHING
void sub_80DA0DC(u8 taskId)
{
- gTasks[taskId].data[10]++;
- if(gTasks[taskId].data[10] == gTasks[taskId].data[1])
+ u8 data2;
+ u16 temp;
+ int i, base;
+
+ if (gTasks[taskId].data[10]++ == gTasks[taskId].data[1])
{
- u16 r0;
- u16 r2;
- s32 i;
-
gTasks[taskId].data[10] = 0;
- r0 = gTasks[taskId].data[2];
- r2 = gPlttBufferFaded[r0 * 8];
- for(i = 0; i < 8; i++)
- gPlttBufferFaded[r0 * 8 + i + 0x107] = gPlttBufferFaded[r0 * 8 + i + 0x107];
- gTasks[taskId].data[2] = ((r0 + 0x101) * 2) + r2;
+
+ data2 = gTasks[taskId].data[2];
+ temp = gPlttBufferFaded[16 * data2 + 0x108];
+
+ i = 7;
+ base = data2 * 16;
+
+ do
+ {
+ gPlttBufferFaded[base + 0x101 + i] = gPlttBufferFaded[base + 0x100 + i];
+ i--;
+ }
+ while (i > 0);
+
+ gPlttBufferFaded[base + 0x101] = temp;
}
- gTasks[taskId].data[0] = gTasks[taskId].data[0] * 32;
- if(gTasks[taskId].data[0] == 0)
+
+ if (--gTasks[taskId].data[0] == 0)
{
DestroyAnimVisualTask(taskId);
}
}
-#else
-NAKED
-void sub_80DA0DC(u8 taskId)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- lsls r0, 24\n\
- lsrs r5, r0, 24\n\
- ldr r2, _080DA15C @ =gTasks\n\
- lsls r0, r5, 2\n\
- adds r0, r5\n\
- lsls r0, 3\n\
- adds r3, r0, r2\n\
- ldrh r0, [r3, 0x1C]\n\
- adds r1, r0, 0x1\n\
- strh r1, [r3, 0x1C]\n\
- lsls r0, 16\n\
- asrs r0, 16\n\
- movs r4, 0xA\n\
- ldrsh r1, [r3, r4]\n\
- adds r7, r2, 0\n\
- cmp r0, r1\n\
- bne _080DA13A\n\
- movs r0, 0\n\
- strh r0, [r3, 0x1C]\n\
- ldrb r0, [r3, 0xC]\n\
- ldr r2, _080DA160 @ =gPlttBufferFaded\n\
- lsls r0, 4\n\
- movs r3, 0x84\n\
- lsls r3, 1\n\
- adds r1, r0, r3\n\
- lsls r1, 1\n\
- adds r1, r2\n\
- ldrh r6, [r1]\n\
- movs r4, 0x7\n\
- mov r12, r0\n\
- ldr r0, _080DA164 @ =0x00000107\n\
- add r0, r12\n\
- lsls r0, 1\n\
- adds r3, r0, r2\n\
-_080DA122:\n\
- ldrh r0, [r3]\n\
- strh r0, [r1]\n\
- subs r3, 0x2\n\
- subs r1, 0x2\n\
- subs r4, 0x1\n\
- cmp r4, 0\n\
- bgt _080DA122\n\
- ldr r0, _080DA168 @ =0x00000101\n\
- add r0, r12\n\
- lsls r0, 1\n\
- adds r0, r2\n\
- strh r6, [r0]\n\
-_080DA13A:\n\
- lsls r0, r5, 2\n\
- adds r0, r5\n\
- lsls r0, 3\n\
- adds r0, r7\n\
- ldrh r1, [r0, 0x8]\n\
- subs r1, 0x1\n\
- strh r1, [r0, 0x8]\n\
- lsls r1, 16\n\
- cmp r1, 0\n\
- bne _080DA154\n\
- adds r0, r5, 0\n\
- bl DestroyAnimVisualTask\n\
-_080DA154:\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_080DA15C: .4byte gTasks\n\
-_080DA160: .4byte gPlttBufferFaded\n\
-_080DA164: .4byte 0x00000107\n\
-_080DA168: .4byte 0x00000101\n\
- .syntax divided\n");
-}
-#endif
void sub_80DA16C(struct Sprite *sprite)
{
InitAnimSpritePos(sprite, 1);
if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER)
+ {
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
+ }
sprite->data[0] = gBattleAnimArgs[4];
sprite->data[1] = sprite->pos1.x;
sprite->data[2] = GetBattlerSpriteCoord(gAnimBankTarget, 2) + gBattleAnimArgs[2];
@@ -605,14 +548,14 @@ void sub_80DA410(struct Sprite *sprite)
sprite->data[0] = 1;
TranslateAnimLinear(sprite);
- if (((u16)sprite->data[3] >> 8) > 200)
+ if (((u16) sprite->data[3] >> 8) > 200)
{
sprite->pos1.x += sprite->pos2.x;
sprite->pos2.x = 0;
sprite->data[3] &= 0xFF;
}
- if ((u32)(sprite->pos1.x + sprite->pos2.x + 32) > 304 || sprite->pos1.y + sprite->pos2.y > 160)
+ if ((u32) (sprite->pos1.x + sprite->pos2.x + 32) > 304 || sprite->pos1.y + sprite->pos2.y > 160)
{
gSprites[GetAnimBattlerSpriteId(0)].invisible = 0;
DestroyAnimSprite(sprite);
@@ -628,8 +571,2106 @@ void sub_80DA48C(struct Sprite *sprite)
FreeOamMatrix(sprite->oam.matrixNum);
sprite->oam.affineMode = 0;
}
-
+
DestroySprite(sprite);
gAnimVisualTaskCount--;
}
}
+
+// FAKEMATCHING
+void sub_80DA4D8(struct Sprite *sprite)
+{
+ s16 *data;
+ u8 slot;
+ s16 spriteCoord;
+ int t1, t2;
+ u32 arg2;
+ u32 matrixNum;
+ u8 sinIndex;
+ register s16 sinVal asm ("r4");
+ register int sinVal2 asm ("r0");
+
+ data = sprite->data;
+
+ if (gBattleAnimArgs[7] & 0x100)
+ {
+ slot = gAnimBankAttacker;
+ }
+ else
+ {
+ slot = gAnimBankTarget;
+ }
+
+ if (GetBattlerSide(slot) == 0)
+ {
+ gBattleAnimArgs[0] = -gBattleAnimArgs[0];
+ }
+
+ sprite->pos1.x = GetBattlerSpriteCoord(slot, 0) + gBattleAnimArgs[0];
+ spriteCoord = GetBattlerSpriteCoord(slot, 1);
+ sprite->pos1.y = spriteCoord + gBattleAnimArgs[1];
+ data[4] = sprite->pos1.y << 8;
+
+ t1 = (spriteCoord + (u16) gBattleAnimArgs[6]) << 1;
+ data[7] = (data[7] & 1) | t1;
+ ((u8 *) data)[0] |= 4;
+
+ arg2 = (u16) gBattleAnimArgs[2];
+ data[1] = (u8) gBattleAnimArgs[2];
+ arg2 <<= 16;
+ data[5] = arg2 >> 24;
+ data[2] = gBattleAnimArgs[3];
+ data[3] = gBattleAnimArgs[4];
+ data[6] = gBattleAnimArgs[5];
+
+ if ((u16) (data[1] - 64) <= 0x7f)
+ {
+ if (gMain.inBattle)
+ {
+ sprite->oam.priority = sub_8079ED4(slot) + 1;
+ }
+ else
+ {
+ sprite->oam.priority = sub_8079ED4(slot);
+ }
+
+ ((u8 *) data)[14] = data[7] & -2;
+
+ if (!(data[2] & 0x8000))
+ {
+ sprite->hFlip ^= 1;
+ sprite->animNum = sprite->hFlip;
+
+ sprite->animBeginning = 1;
+ sprite->animEnded = 0;
+ }
+ }
+ else
+ {
+ sprite->oam.priority = sub_8079ED4(slot);
+ ((u8 *) data)[14] |= 1;
+
+ if (data[2] & 0x8000)
+ {
+ sprite->hFlip ^= 1;
+ sprite->animNum = sprite->hFlip;
+
+ sprite->animBeginning = 1;
+ sprite->animEnded = 0;
+ }
+ }
+
+ t2 = (u16) data[1] >> 6 << 4;
+ ((u8 *) data)[0] = (15 & data[0]) | t2;
+
+ sprite->pos2.x = (gSineTable[(u16) data[1]] * (u8) data[6]) >> 8;
+
+ matrixNum = sprite->oam.matrixNum;
+
+ sinIndex = (-sprite->pos2.x >> 1) + data[5];
+ sinVal = gSineTable[sinIndex];
+
+ gOamMatrices[matrixNum].a = gOamMatrices[matrixNum].d = gSineTable[sinIndex + 64];
+ gOamMatrices[matrixNum].b = sinVal;
+ sinVal2 = -sinVal;
+ gOamMatrices[matrixNum].c = sinVal2;
+
+ sprite->callback = sub_80DA6F0;
+}
+
+#ifdef NONMATCHING
+void sub_80DA6F0(struct Sprite * sprite)
+{
+ // (Probably) Functionally equivalent
+
+ struct dataStruct {
+ u8 one:1;
+ u8 two:1;
+ u8 three:1;
+ u8 four:1;
+ u8 fiveeight:4;
+ };
+
+ u8 zero;
+ s16 * data;
+ u8 * dataByte;
+
+ u16 r8;
+ u32 matrixNum;
+ u8 sinIndex;
+ s16 sinVal;
+
+ zero = 0;
+ data = sprite->data;
+ dataByte = (u8 *)data;
+
+ if (dataByte[0] & 1)
+ {
+ u32 t1;
+
+ t1 = dataByte[1];
+ dataByte[1] += 0xff;
+
+ t1 <<= 24;
+ if (t1 == 0)
+ {
+ // 080da724
+ ((struct dataStruct *)dataByte)[0].one = 0;
+ dataByte[1] = zero;
+ }
+
+ }
+ else
+ {
+ // 080da730
+ u16 tData;
+ u16 t2;
+
+ tData = data[1];
+ t2 = tData >> 6;
+ r8 = tData;
+
+ switch (t2)
+ {
+ case (0):
+ // 080da756
+
+ if (dataByte[0] >> 4 == 1)
+ {
+ dataByte[0] |= 8;
+ dataByte[0] |= 1;
+ dataByte[1] = zero;
+ }
+ else if (dataByte[0] >> 4 == 3)
+ {
+ /*080da76c*/
+ ((struct dataStruct *)dataByte)[0].two ^= 1;
+ ((struct dataStruct *)dataByte)[0].one = 1;
+ dataByte[1] = zero;
+ }
+ else
+ {
+ // 080da790
+ if (dataByte[0] & 8)
+ {
+ sprite->hFlip ^= 1;
+ sprite->animNum = sprite->hFlip;
+ sprite->animBeginning = 1;
+ sprite->animEnded = 0;
+
+ if ((dataByte)[0] & 4)
+ {
+ u8 b;
+ if (gMain.inBattle)
+ {
+ if (!(dataByte[14] & 1))
+ {
+ sprite->oam.priority -= 1;
+ }
+ else
+ {
+ // 080da814
+ sprite->oam.priority += 1;
+ }
+ }
+ else
+ {
+ // 080da82e
+ if (!(dataByte[14] & 1))
+ {
+ sprite->subpriority -= 12;
+ }
+ else
+ {
+ // 080da85c
+ sprite->subpriority += 12;
+ }
+ }
+ b = (((u32)(dataByte[14] << 31) >> 31) ^ 1) & 1;
+ dataByte[14] = (dataByte[14] & -2) | b;
+ }
+ // 080da87a
+ ((struct dataStruct *)dataByte)[0].four = 0;
+ r8 = data[1];
+ }
+ }
+
+ // 080da88a
+ dataByte[0] &= 15;
+ // 080dac52
+ break;
+ case (1):
+ // 080da896
+ if (dataByte[0] >> 4 == 0)
+ {
+ dataByte[0] |= 8;
+ dataByte[0] |= 1;
+ dataByte[1] = zero;
+ }
+ else/*080da8ac*/if (dataByte[0] >> 4 == 2)
+ {
+ dataByte[0] |= 1;
+ dataByte[1] = zero;
+ }
+ else
+ {
+ // 080da8be
+ if (dataByte[0] & 8)
+ {
+ sprite->hFlip ^= 1;
+ sprite->animNum = sprite->hFlip;
+ sprite->animBeginning = 1;
+ sprite->animEnded = 0;
+
+ if (dataByte[0] & 4)
+ {
+ u8 b;
+ if (gMain.inBattle)
+ {
+ if (!(dataByte[14] & 1))
+ {
+ sprite->oam.priority -= 1;
+ }
+ else
+ {
+ // 080da948
+ sprite->oam.priority += 1;
+ }
+ }
+ else
+ {
+ // 080da962
+ if (!(dataByte[14] & 1))
+ {
+ sprite->subpriority -=12;
+ }
+ else
+ {
+ // 080da98c
+ sprite->subpriority += 12;
+ }
+ }
+ // 080da978 + 080da996
+ b = (((u32)(dataByte[14] << 31) >> 31) ^ 1) & 1;
+ dataByte[14] = (dataByte[14] & -2) | b;
+ }
+ // 080da9ac
+ ((struct dataStruct *)dataByte)[0].four = 0;
+ r8 = data[1];
+ }
+ }
+ // 080da9bc
+ dataByte[0] &= 15;
+ dataByte[0] |= 16;
+ // 080dac52
+ break;
+ case (2):
+ // 080da9c8
+ if (dataByte[0] >> 4 == 3)
+ {
+ dataByte[0] |= 8;
+ dataByte[0] |= 1;
+ dataByte[1] = zero;
+ }
+ else/*080da9de*/if (dataByte[0] >> 4 == 1)
+ {
+ dataByte[0] |= 1;
+ dataByte[1] = zero;
+ }
+ else
+ {
+ // 080da9f0
+ if (dataByte[0] & 8)
+ {
+ // 080da9fa
+ sprite->hFlip ^= 1;
+ sprite->animNum = sprite->hFlip;
+ sprite->animBeginning = 1;
+ sprite->animEnded = 0;
+
+ if (dataByte[0] & 4)
+ {
+ u8 b;
+ if (gMain.inBattle)
+ {
+ if (!(dataByte[14] & 1))
+ {
+ sprite->oam.priority -= 1;
+ }
+ else
+ {
+ // 080daa74
+ sprite->oam.priority += 1;
+ }
+ }
+ else
+ {
+ // 080daaa4
+ if (!(dataByte[14] & 1))
+ {
+ sprite->subpriority -= 12;
+ }
+ else
+ {
+ // 080daace
+ sprite->subpriority += 12;
+ }
+ }
+ b = (((u32)(dataByte[14] << 31) >> 31) ^ 1) & 1;
+ dataByte[14] = (dataByte[14] & -2) | b;
+ }
+ // 080daaec
+ ((struct dataStruct *)dataByte)[0].four = 0;
+ r8 = data[1];
+ }
+ }
+ // 080daafe
+ dataByte[0] &= 15;
+ dataByte[0] |= 32;
+ // 080dac52
+ break;
+ case (3):
+ // 080dab0e
+ if (dataByte[0] >> 4 == 2)
+ {
+ dataByte[0] |= 8;
+ // 080dac42
+ }
+ else/*080dab20*/if (dataByte[0] >> 4 == 0)
+ {
+ ((struct dataStruct *)dataByte)[0].two ^= 1;
+ ((struct dataStruct *)dataByte)[0].one = 1;
+ dataByte[1] = zero;
+ // 080dac42
+ }
+ else
+ {
+ // 080dab44
+ if (dataByte[0] & 8)
+ {
+ sprite->hFlip ^= 1;
+ sprite->animNum = sprite->hFlip;
+ sprite->animBeginning = 1;
+ sprite->animEnded = 0;
+
+ if (dataByte[0] & 4)
+ {
+ u8 b;
+ if (gMain.inBattle)
+ {
+ if (!(dataByte[14] & 1))
+ {
+ sprite->oam.priority -= 1;
+ }
+ else
+ {
+ // 080dabcc
+ sprite->oam.priority += 1;
+ }
+ }
+ else
+ {
+ // 080dabe6
+ if (!(dataByte[14] & 1))
+ {
+ sprite->subpriority -= 12;
+ }
+ else
+ {
+ // 080dac14
+ sprite->subpriority += 12;
+ }
+ }
+ // 080dac00 + 080dac1e
+ b = (((u32)(dataByte[14]) << 31 >> 31) ^ 1) & 1;
+ dataByte[14] = (-2 & dataByte[14]) | b;
+ }
+ // 080dac32
+ ((struct dataStruct *)dataByte)[0].four = 0;
+ r8 = data[1];
+ }
+ }
+ // 080dac42
+ dataByte[0] &= 15;
+ dataByte[0] |= 48;
+ break;
+ }
+
+ // 080dac52
+
+ sprite->pos2.x = (dataByte[12 + ((struct dataStruct *)dataByte)[0].two] * gSineTable[r8]) >> 8;
+
+ matrixNum = sprite->oam.matrixNum;
+
+ sinIndex = (-sprite->pos2.x >> 1) + dataByte[10];
+ sinVal = gSineTable[sinIndex];
+
+ gOamMatrices[matrixNum].a = gOamMatrices[matrixNum].d = gSineTable[sinIndex + 64];
+ gOamMatrices[matrixNum].b = sinVal;
+ gOamMatrices[matrixNum].c = -sinVal;
+
+ data[4] += data[3];
+
+ sprite->pos1.y = (u16)data[4] >> 8;
+
+ if (data[2] & (0x80 << 8))
+ {
+ data[1] = (data[1] - (data[2] & ((0x80 << 8) - 1))) & 0xff;
+ }
+ else
+ {
+ // 080dace8
+ data[1] = ((data[2] & 0x7fff) + data[1]) & 0xff;
+ }
+ // 080dacfe
+ if (sprite->pos1.y + sprite->pos2.y >= (u16)data[7] / 2)
+ {
+ sprite->data[0] = 0;
+ sprite->callback = sub_80DA48C;
+ }
+ }
+}
+#else
+NAKED
+void sub_80DA6F0(struct Sprite *sprite)
+{
+ asm_unified("push {r4-r7,lr}\n\
+ mov r7, r9\n\
+ mov r6, r8\n\
+ push {r6,r7}\n\
+ adds r5, r0, 0\n\
+ movs r6, 0\n\
+ movs r0, 0x2E\n\
+ adds r0, r5\n\
+ mov r12, r0\n\
+ ldrb r2, [r0]\n\
+ movs r7, 0x1\n\
+ movs r1, 0x1\n\
+ mov r9, r1\n\
+ mov r0, r9\n\
+ ands r0, r2\n\
+ cmp r0, 0\n\
+ beq _080DA730\n\
+ mov r3, r12\n\
+ ldrb r0, [r3, 0x1]\n\
+ adds r1, r0, 0\n\
+ adds r1, 0xFF\n\
+ strb r1, [r3, 0x1]\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ beq _080DA724\n\
+ b _080DAD1A\n\
+_080DA724:\n\
+ movs r0, 0x2\n\
+ negs r0, r0\n\
+ ands r0, r2\n\
+ strb r0, [r3]\n\
+ strb r6, [r3, 0x1]\n\
+ b _080DAD1A\n\
+_080DA730:\n\
+ mov r4, r12\n\
+ ldrh r0, [r4, 0x2]\n\
+ lsrs r4, r0, 6\n\
+ mov r8, r0\n\
+ cmp r4, 0x1\n\
+ bne _080DA73E\n\
+ b _080DA896\n\
+_080DA73E:\n\
+ cmp r4, 0x1\n\
+ bgt _080DA748\n\
+ cmp r4, 0\n\
+ beq _080DA756\n\
+ b _080DAC52\n\
+_080DA748:\n\
+ cmp r4, 0x2\n\
+ bne _080DA74E\n\
+ b _080DA9C8\n\
+_080DA74E:\n\
+ cmp r4, 0x3\n\
+ bne _080DA754\n\
+ b _080DAB0E\n\
+_080DA754:\n\
+ b _080DAC52\n\
+_080DA756:\n\
+ lsls r1, r2, 24\n\
+ lsrs r0, r1, 28\n\
+ cmp r0, 0x1\n\
+ bne _080DA76C\n\
+ movs r0, 0x8\n\
+ orrs r0, r2\n\
+ orrs r0, r7\n\
+ mov r1, r12\n\
+ strb r0, [r1]\n\
+ strb r6, [r1, 0x1]\n\
+ b _080DA88A\n\
+_080DA76C:\n\
+ lsrs r0, r1, 28\n\
+ cmp r0, 0x3\n\
+ bne _080DA790\n\
+ lsls r0, r2, 30\n\
+ lsrs r0, 31\n\
+ movs r1, 0x1\n\
+ eors r0, r1\n\
+ ands r0, r7\n\
+ lsls r0, 1\n\
+ movs r1, 0x3\n\
+ negs r1, r1\n\
+ ands r1, r2\n\
+ orrs r1, r0\n\
+ orrs r1, r7\n\
+ mov r2, r12\n\
+ strb r1, [r2]\n\
+ strb r6, [r2, 0x1]\n\
+ b _080DA88A\n\
+_080DA790:\n\
+ movs r0, 0x8\n\
+ ands r0, r2\n\
+ cmp r0, 0\n\
+ beq _080DA88A\n\
+ adds r3, r5, 0\n\
+ adds r3, 0x3F\n\
+ ldrb r2, [r3]\n\
+ lsls r1, r2, 31\n\
+ lsrs r1, 31\n\
+ movs r4, 0x1\n\
+ eors r1, r4\n\
+ ands r1, r7\n\
+ movs r6, 0x2\n\
+ negs r6, r6\n\
+ adds r0, r6, 0\n\
+ ands r0, r2\n\
+ orrs r0, r1\n\
+ strb r0, [r3]\n\
+ lsls r0, 31\n\
+ lsrs r0, 31\n\
+ adds r1, r5, 0\n\
+ adds r1, 0x2A\n\
+ strb r0, [r1]\n\
+ ldrb r0, [r3]\n\
+ movs r1, 0x4\n\
+ orrs r0, r1\n\
+ movs r1, 0x11\n\
+ negs r1, r1\n\
+ ands r0, r1\n\
+ strb r0, [r3]\n\
+ mov r3, r12\n\
+ ldrb r1, [r3]\n\
+ movs r0, 0x4\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _080DA87A\n\
+ ldr r0, _080DA80C @ =gMain\n\
+ ldr r1, _080DA810 @ =0x0000043d\n\
+ adds r0, r1\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0x2\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _080DA82E\n\
+ ldrb r1, [r3, 0xE]\n\
+ mov r0, r9\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _080DA814\n\
+ ldrb r2, [r5, 0x5]\n\
+ lsls r1, r2, 28\n\
+ lsrs r1, 30\n\
+ subs r1, 0x1\n\
+ movs r0, 0x3\n\
+ ands r1, r0\n\
+ lsls r1, 2\n\
+ movs r0, 0xD\n\
+ negs r0, r0\n\
+ ands r0, r2\n\
+ orrs r0, r1\n\
+ strb r0, [r5, 0x5]\n\
+ b _080DA868\n\
+ .align 2, 0\n\
+_080DA80C: .4byte gMain\n\
+_080DA810: .4byte 0x0000043d\n\
+_080DA814:\n\
+ ldrb r2, [r5, 0x5]\n\
+ lsls r1, r2, 28\n\
+ lsrs r1, 30\n\
+ adds r1, 0x1\n\
+ movs r0, 0x3\n\
+ ands r1, r0\n\
+ lsls r1, 2\n\
+ movs r0, 0xD\n\
+ negs r0, r0\n\
+ ands r0, r2\n\
+ orrs r0, r1\n\
+ strb r0, [r5, 0x5]\n\
+ b _080DA866\n\
+_080DA82E:\n\
+ mov r0, r12\n\
+ ldrb r1, [r0, 0xE]\n\
+ mov r0, r9\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _080DA85C\n\
+ adds r1, r5, 0\n\
+ adds r1, 0x43\n\
+ ldrb r0, [r1]\n\
+ subs r0, 0xC\n\
+ strb r0, [r1]\n\
+ mov r1, r12\n\
+ ldrb r2, [r1, 0xE]\n\
+ lsls r0, r2, 31\n\
+ lsrs r0, 31\n\
+ eors r0, r4\n\
+ ands r0, r7\n\
+ adds r1, r6, 0\n\
+ ands r1, r2\n\
+ orrs r1, r0\n\
+ mov r2, r12\n\
+ strb r1, [r2, 0xE]\n\
+ b _080DA87A\n\
+_080DA85C:\n\
+ adds r1, r5, 0\n\
+ adds r1, 0x43\n\
+ ldrb r0, [r1]\n\
+ adds r0, 0xC\n\
+ strb r0, [r1]\n\
+_080DA866:\n\
+ mov r3, r12\n\
+_080DA868:\n\
+ ldrb r2, [r3, 0xE]\n\
+ lsls r0, r2, 31\n\
+ lsrs r0, 31\n\
+ eors r0, r4\n\
+ ands r0, r7\n\
+ adds r1, r6, 0\n\
+ ands r1, r2\n\
+ orrs r1, r0\n\
+ strb r1, [r3, 0xE]\n\
+_080DA87A:\n\
+ mov r4, r12\n\
+ ldrb r1, [r4]\n\
+ movs r0, 0x9\n\
+ negs r0, r0\n\
+ ands r0, r1\n\
+ strb r0, [r4]\n\
+ ldrh r0, [r4, 0x2]\n\
+ mov r8, r0\n\
+_080DA88A:\n\
+ mov r2, r12\n\
+ ldrb r1, [r2]\n\
+ movs r0, 0xF\n\
+ ands r0, r1\n\
+ strb r0, [r2]\n\
+ b _080DAC52\n\
+_080DA896:\n\
+ lsls r1, r2, 24\n\
+ lsrs r0, r1, 28\n\
+ cmp r0, 0\n\
+ bne _080DA8AC\n\
+ movs r0, 0x8\n\
+ orrs r0, r2\n\
+ orrs r0, r7\n\
+ mov r3, r12\n\
+ strb r0, [r3]\n\
+ strb r6, [r3, 0x1]\n\
+ b _080DA9BC\n\
+_080DA8AC:\n\
+ lsrs r0, r1, 28\n\
+ cmp r0, 0x2\n\
+ bne _080DA8BE\n\
+ adds r0, r2, 0\n\
+ orrs r0, r7\n\
+ mov r4, r12\n\
+ strb r0, [r4]\n\
+ strb r6, [r4, 0x1]\n\
+ b _080DA9BC\n\
+_080DA8BE:\n\
+ movs r0, 0x8\n\
+ ands r0, r2\n\
+ cmp r0, 0\n\
+ beq _080DA9BC\n\
+ adds r3, r5, 0\n\
+ adds r3, 0x3F\n\
+ ldrb r2, [r3]\n\
+ lsls r1, r2, 31\n\
+ lsrs r1, 31\n\
+ movs r4, 0x1\n\
+ eors r1, r4\n\
+ ands r1, r7\n\
+ movs r6, 0x2\n\
+ negs r6, r6\n\
+ adds r0, r6, 0\n\
+ ands r0, r2\n\
+ orrs r0, r1\n\
+ strb r0, [r3]\n\
+ lsls r0, 31\n\
+ lsrs r0, 31\n\
+ adds r1, r5, 0\n\
+ adds r1, 0x2A\n\
+ strb r0, [r1]\n\
+ ldrb r0, [r3]\n\
+ movs r1, 0x4\n\
+ orrs r0, r1\n\
+ movs r1, 0x11\n\
+ negs r1, r1\n\
+ ands r0, r1\n\
+ strb r0, [r3]\n\
+ mov r0, r12\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0x4\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _080DA9AC\n\
+ ldr r0, _080DA940 @ =gMain\n\
+ ldr r1, _080DA944 @ =0x0000043d\n\
+ adds r0, r1\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0x2\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _080DA962\n\
+ mov r2, r12\n\
+ ldrb r1, [r2, 0xE]\n\
+ mov r0, r9\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _080DA948\n\
+ ldrb r2, [r5, 0x5]\n\
+ lsls r1, r2, 28\n\
+ lsrs r1, 30\n\
+ subs r1, 0x1\n\
+ movs r0, 0x3\n\
+ ands r1, r0\n\
+ lsls r1, 2\n\
+ movs r0, 0xD\n\
+ negs r0, r0\n\
+ ands r0, r2\n\
+ orrs r0, r1\n\
+ strb r0, [r5, 0x5]\n\
+ mov r3, r12\n\
+ b _080DA978\n\
+ .align 2, 0\n\
+_080DA940: .4byte gMain\n\
+_080DA944: .4byte 0x0000043d\n\
+_080DA948:\n\
+ ldrb r2, [r5, 0x5]\n\
+ lsls r1, r2, 28\n\
+ lsrs r1, 30\n\
+ adds r1, 0x1\n\
+ movs r0, 0x3\n\
+ ands r1, r0\n\
+ lsls r1, 2\n\
+ movs r0, 0xD\n\
+ negs r0, r0\n\
+ ands r0, r2\n\
+ orrs r0, r1\n\
+ strb r0, [r5, 0x5]\n\
+ b _080DA996\n\
+_080DA962:\n\
+ mov r3, r12\n\
+ ldrb r1, [r3, 0xE]\n\
+ mov r0, r9\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _080DA98C\n\
+ adds r1, r5, 0\n\
+ adds r1, 0x43\n\
+ ldrb r0, [r1]\n\
+ subs r0, 0xC\n\
+ strb r0, [r1]\n\
+_080DA978:\n\
+ ldrb r2, [r3, 0xE]\n\
+ lsls r0, r2, 31\n\
+ lsrs r0, 31\n\
+ eors r0, r4\n\
+ ands r0, r7\n\
+ adds r1, r6, 0\n\
+ ands r1, r2\n\
+ orrs r1, r0\n\
+ strb r1, [r3, 0xE]\n\
+ b _080DA9AC\n\
+_080DA98C:\n\
+ adds r1, r5, 0\n\
+ adds r1, 0x43\n\
+ ldrb r0, [r1]\n\
+ adds r0, 0xC\n\
+ strb r0, [r1]\n\
+_080DA996:\n\
+ mov r0, r12\n\
+ ldrb r2, [r0, 0xE]\n\
+ lsls r0, r2, 31\n\
+ lsrs r0, 31\n\
+ eors r0, r4\n\
+ ands r0, r7\n\
+ adds r1, r6, 0\n\
+ ands r1, r2\n\
+ orrs r1, r0\n\
+ mov r2, r12\n\
+ strb r1, [r2, 0xE]\n\
+_080DA9AC:\n\
+ mov r3, r12\n\
+ ldrb r1, [r3]\n\
+ movs r0, 0x9\n\
+ negs r0, r0\n\
+ ands r0, r1\n\
+ strb r0, [r3]\n\
+ ldrh r4, [r3, 0x2]\n\
+ mov r8, r4\n\
+_080DA9BC:\n\
+ mov r1, r12\n\
+ ldrb r0, [r1]\n\
+ movs r1, 0xF\n\
+ ands r1, r0\n\
+ movs r0, 0x10\n\
+ b _080DAC4C\n\
+_080DA9C8:\n\
+ lsls r1, r2, 24\n\
+ lsrs r0, r1, 28\n\
+ cmp r0, 0x3\n\
+ bne _080DA9DE\n\
+ movs r0, 0x8\n\
+ orrs r0, r2\n\
+ orrs r0, r7\n\
+ mov r3, r12\n\
+ strb r0, [r3]\n\
+ strb r6, [r3, 0x1]\n\
+ b _080DAAFE\n\
+_080DA9DE:\n\
+ lsrs r0, r1, 28\n\
+ cmp r0, 0x1\n\
+ bne _080DA9F0\n\
+ adds r0, r2, 0\n\
+ orrs r0, r7\n\
+ mov r4, r12\n\
+ strb r0, [r4]\n\
+ strb r6, [r4, 0x1]\n\
+ b _080DAAFE\n\
+_080DA9F0:\n\
+ movs r0, 0x8\n\
+ ands r0, r2\n\
+ cmp r0, 0\n\
+ bne _080DA9FA\n\
+ b _080DAAFE\n\
+_080DA9FA:\n\
+ adds r3, r5, 0\n\
+ adds r3, 0x3F\n\
+ ldrb r2, [r3]\n\
+ lsls r1, r2, 31\n\
+ lsrs r1, 31\n\
+ movs r6, 0x1\n\
+ eors r1, r6\n\
+ ands r1, r7\n\
+ movs r0, 0x2\n\
+ negs r0, r0\n\
+ mov r8, r0\n\
+ ands r0, r2\n\
+ orrs r0, r1\n\
+ strb r0, [r3]\n\
+ lsls r0, 31\n\
+ lsrs r0, 31\n\
+ adds r1, r5, 0\n\
+ adds r1, 0x2A\n\
+ strb r0, [r1]\n\
+ ldrb r0, [r3]\n\
+ movs r1, 0x4\n\
+ orrs r0, r1\n\
+ movs r1, 0x11\n\
+ negs r1, r1\n\
+ ands r0, r1\n\
+ strb r0, [r3]\n\
+ mov r2, r12\n\
+ ldrb r1, [r2]\n\
+ movs r0, 0x4\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _080DAAEC\n\
+ ldr r0, _080DAA6C @ =gMain\n\
+ ldr r3, _080DAA70 @ =0x0000043d\n\
+ adds r0, r3\n\
+ ldrb r0, [r0]\n\
+ ands r4, r0\n\
+ cmp r4, 0\n\
+ beq _080DAAA4\n\
+ ldrb r1, [r2, 0xE]\n\
+ mov r0, r9\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _080DAA74\n\
+ ldrb r2, [r5, 0x5]\n\
+ lsls r1, r2, 28\n\
+ lsrs r1, 30\n\
+ subs r1, 0x1\n\
+ movs r0, 0x3\n\
+ ands r1, r0\n\
+ lsls r1, 2\n\
+ movs r0, 0xD\n\
+ negs r0, r0\n\
+ ands r0, r2\n\
+ orrs r0, r1\n\
+ strb r0, [r5, 0x5]\n\
+ b _080DAAD8\n\
+ .align 2, 0\n\
+_080DAA6C: .4byte gMain\n\
+_080DAA70: .4byte 0x0000043d\n\
+_080DAA74:\n\
+ ldrb r2, [r5, 0x5]\n\
+ lsls r1, r2, 28\n\
+ lsrs r1, 30\n\
+ adds r1, 0x1\n\
+ movs r0, 0x3\n\
+ ands r1, r0\n\
+ lsls r1, 2\n\
+ movs r0, 0xD\n\
+ negs r0, r0\n\
+ ands r0, r2\n\
+ orrs r0, r1\n\
+ strb r0, [r5, 0x5]\n\
+ mov r0, r12\n\
+ ldrb r2, [r0, 0xE]\n\
+ lsls r0, r2, 31\n\
+ lsrs r0, 31\n\
+ eors r0, r6\n\
+ ands r0, r7\n\
+ mov r1, r8\n\
+ ands r1, r2\n\
+ orrs r1, r0\n\
+ mov r2, r12\n\
+ strb r1, [r2, 0xE]\n\
+ b _080DAAEC\n\
+_080DAAA4:\n\
+ mov r3, r12\n\
+ ldrb r1, [r3, 0xE]\n\
+ mov r0, r9\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _080DAACE\n\
+ adds r1, r5, 0\n\
+ adds r1, 0x43\n\
+ ldrb r0, [r1]\n\
+ subs r0, 0xC\n\
+ strb r0, [r1]\n\
+ ldrb r2, [r3, 0xE]\n\
+ lsls r0, r2, 31\n\
+ lsrs r0, 31\n\
+ eors r0, r6\n\
+ ands r0, r7\n\
+ mov r1, r8\n\
+ ands r1, r2\n\
+ orrs r1, r0\n\
+ strb r1, [r3, 0xE]\n\
+ b _080DAAEC\n\
+_080DAACE:\n\
+ adds r1, r5, 0\n\
+ adds r1, 0x43\n\
+ ldrb r0, [r1]\n\
+ adds r0, 0xC\n\
+ strb r0, [r1]\n\
+_080DAAD8:\n\
+ mov r4, r12\n\
+ ldrb r2, [r4, 0xE]\n\
+ lsls r0, r2, 31\n\
+ lsrs r0, 31\n\
+ eors r0, r6\n\
+ ands r0, r7\n\
+ mov r1, r8\n\
+ ands r1, r2\n\
+ orrs r1, r0\n\
+ strb r1, [r4, 0xE]\n\
+_080DAAEC:\n\
+ mov r0, r12\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0x9\n\
+ negs r0, r0\n\
+ ands r0, r1\n\
+ mov r1, r12\n\
+ strb r0, [r1]\n\
+ ldrh r2, [r1, 0x2]\n\
+ mov r8, r2\n\
+_080DAAFE:\n\
+ mov r3, r12\n\
+ ldrb r0, [r3]\n\
+ movs r1, 0xF\n\
+ ands r1, r0\n\
+ movs r0, 0x20\n\
+ orrs r1, r0\n\
+ strb r1, [r3]\n\
+ b _080DAC52\n\
+_080DAB0E:\n\
+ lsls r1, r2, 24\n\
+ lsrs r0, r1, 28\n\
+ cmp r0, 0x2\n\
+ bne _080DAB20\n\
+ movs r0, 0x8\n\
+ orrs r0, r2\n\
+ mov r4, r12\n\
+ strb r0, [r4]\n\
+ b _080DAC42\n\
+_080DAB20:\n\
+ lsrs r0, r1, 28\n\
+ cmp r0, 0\n\
+ bne _080DAB44\n\
+ lsls r0, r2, 30\n\
+ lsrs r0, 31\n\
+ movs r1, 0x1\n\
+ eors r0, r1\n\
+ ands r0, r7\n\
+ lsls r0, 1\n\
+ movs r1, 0x3\n\
+ negs r1, r1\n\
+ ands r1, r2\n\
+ orrs r1, r0\n\
+ orrs r1, r7\n\
+ mov r0, r12\n\
+ strb r1, [r0]\n\
+ strb r6, [r0, 0x1]\n\
+ b _080DAC42\n\
+_080DAB44:\n\
+ movs r0, 0x8\n\
+ ands r0, r2\n\
+ cmp r0, 0\n\
+ beq _080DAC42\n\
+ adds r3, r5, 0\n\
+ adds r3, 0x3F\n\
+ ldrb r2, [r3]\n\
+ lsls r1, r2, 31\n\
+ lsrs r1, 31\n\
+ movs r4, 0x1\n\
+ eors r1, r4\n\
+ ands r1, r7\n\
+ movs r6, 0x2\n\
+ negs r6, r6\n\
+ adds r0, r6, 0\n\
+ ands r0, r2\n\
+ orrs r0, r1\n\
+ strb r0, [r3]\n\
+ lsls r0, 31\n\
+ lsrs r0, 31\n\
+ adds r1, r5, 0\n\
+ adds r1, 0x2A\n\
+ strb r0, [r1]\n\
+ ldrb r0, [r3]\n\
+ movs r1, 0x4\n\
+ orrs r0, r1\n\
+ movs r1, 0x11\n\
+ negs r1, r1\n\
+ ands r0, r1\n\
+ strb r0, [r3]\n\
+ mov r2, r12\n\
+ ldrb r1, [r2]\n\
+ movs r0, 0x4\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _080DAC32\n\
+ ldr r0, _080DABC4 @ =gMain\n\
+ ldr r3, _080DABC8 @ =0x0000043d\n\
+ adds r0, r3\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0x2\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _080DABE6\n\
+ ldrb r1, [r2, 0xE]\n\
+ mov r0, r9\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _080DABCC\n\
+ ldrb r2, [r5, 0x5]\n\
+ lsls r1, r2, 28\n\
+ lsrs r1, 30\n\
+ subs r1, 0x1\n\
+ movs r0, 0x3\n\
+ ands r1, r0\n\
+ lsls r1, 2\n\
+ movs r0, 0xD\n\
+ negs r0, r0\n\
+ ands r0, r2\n\
+ orrs r0, r1\n\
+ strb r0, [r5, 0x5]\n\
+ mov r0, r12\n\
+ ldrb r2, [r0, 0xE]\n\
+ b _080DAC00\n\
+ .align 2, 0\n\
+_080DABC4: .4byte gMain\n\
+_080DABC8: .4byte 0x0000043d\n\
+_080DABCC:\n\
+ ldrb r2, [r5, 0x5]\n\
+ lsls r1, r2, 28\n\
+ lsrs r1, 30\n\
+ adds r1, 0x1\n\
+ movs r0, 0x3\n\
+ ands r1, r0\n\
+ lsls r1, 2\n\
+ movs r0, 0xD\n\
+ negs r0, r0\n\
+ ands r0, r2\n\
+ orrs r0, r1\n\
+ strb r0, [r5, 0x5]\n\
+ b _080DAC1E\n\
+_080DABE6:\n\
+ mov r0, r12\n\
+ ldrb r1, [r0, 0xE]\n\
+ mov r0, r9\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _080DAC14\n\
+ adds r1, r5, 0\n\
+ adds r1, 0x43\n\
+ ldrb r0, [r1]\n\
+ subs r0, 0xC\n\
+ strb r0, [r1]\n\
+ mov r1, r12\n\
+ ldrb r2, [r1, 0xE]\n\
+_080DAC00:\n\
+ lsls r0, r2, 31\n\
+ lsrs r0, 31\n\
+ eors r0, r4\n\
+ ands r0, r7\n\
+ adds r1, r6, 0\n\
+ ands r1, r2\n\
+ orrs r1, r0\n\
+ mov r2, r12\n\
+ strb r1, [r2, 0xE]\n\
+ b _080DAC32\n\
+_080DAC14:\n\
+ adds r1, r5, 0\n\
+ adds r1, 0x43\n\
+ ldrb r0, [r1]\n\
+ adds r0, 0xC\n\
+ strb r0, [r1]\n\
+_080DAC1E:\n\
+ mov r3, r12\n\
+ ldrb r2, [r3, 0xE]\n\
+ lsls r0, r2, 31\n\
+ lsrs r0, 31\n\
+ eors r0, r4\n\
+ ands r0, r7\n\
+ adds r1, r6, 0\n\
+ ands r1, r2\n\
+ orrs r1, r0\n\
+ strb r1, [r3, 0xE]\n\
+_080DAC32:\n\
+ mov r4, r12\n\
+ ldrb r1, [r4]\n\
+ movs r0, 0x9\n\
+ negs r0, r0\n\
+ ands r0, r1\n\
+ strb r0, [r4]\n\
+ ldrh r0, [r4, 0x2]\n\
+ mov r8, r0\n\
+_080DAC42:\n\
+ mov r1, r12\n\
+ ldrb r0, [r1]\n\
+ movs r1, 0xF\n\
+ ands r1, r0\n\
+ movs r0, 0x30\n\
+_080DAC4C:\n\
+ orrs r1, r0\n\
+ mov r2, r12\n\
+ strb r1, [r2]\n\
+_080DAC52:\n\
+ mov r3, r12\n\
+ ldrb r1, [r3]\n\
+ lsls r1, 30\n\
+ lsrs r1, 31\n\
+ mov r0, r12\n\
+ adds r0, 0xC\n\
+ adds r0, r1\n\
+ ldrb r1, [r0]\n\
+ ldr r3, _080DACE0 @ =gSineTable\n\
+ mov r4, r8\n\
+ lsls r0, r4, 1\n\
+ adds r0, r3\n\
+ movs r2, 0\n\
+ ldrsh r0, [r0, r2]\n\
+ muls r0, r1\n\
+ asrs r0, 8\n\
+ strh r0, [r5, 0x24]\n\
+ ldrb r2, [r5, 0x3]\n\
+ lsls r2, 26\n\
+ lsrs r2, 27\n\
+ movs r4, 0x24\n\
+ ldrsh r0, [r5, r4]\n\
+ negs r0, r0\n\
+ asrs r0, 1\n\
+ mov r1, r12\n\
+ ldrb r1, [r1, 0xA]\n\
+ adds r0, r1\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ lsls r1, r0, 1\n\
+ adds r1, r3\n\
+ ldrh r6, [r1]\n\
+ ldr r1, _080DACE4 @ =gOamMatrices\n\
+ lsls r2, 3\n\
+ adds r2, r1\n\
+ adds r0, 0x40\n\
+ lsls r0, 1\n\
+ adds r0, r3\n\
+ ldrh r0, [r0]\n\
+ strh r0, [r2, 0x6]\n\
+ strh r0, [r2]\n\
+ strh r6, [r2, 0x2]\n\
+ lsls r0, r6, 16\n\
+ asrs r0, 16\n\
+ negs r0, r0\n\
+ strh r0, [r2, 0x4]\n\
+ mov r2, r12\n\
+ ldrh r0, [r2, 0x6]\n\
+ ldrh r3, [r2, 0x8]\n\
+ adds r0, r3\n\
+ strh r0, [r2, 0x8]\n\
+ lsls r0, 16\n\
+ lsrs r0, 24\n\
+ strh r0, [r5, 0x22]\n\
+ movs r4, 0x4\n\
+ ldrsh r0, [r2, r4]\n\
+ movs r1, 0x80\n\
+ lsls r1, 8\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _080DACE8\n\
+ ldrh r0, [r2, 0x4]\n\
+ subs r1, 0x1\n\
+ ands r1, r0\n\
+ ldrh r0, [r2, 0x2]\n\
+ subs r0, r1\n\
+ movs r1, 0xFF\n\
+ ands r0, r1\n\
+ strh r0, [r2, 0x2]\n\
+ b _080DACFE\n\
+ .align 2, 0\n\
+_080DACE0: .4byte gSineTable\n\
+_080DACE4: .4byte gOamMatrices\n\
+_080DACE8:\n\
+ mov r1, r12\n\
+ ldrh r0, [r1, 0x4]\n\
+ ldr r1, _080DAD28 @ =0x00007fff\n\
+ ands r1, r0\n\
+ mov r2, r12\n\
+ ldrh r2, [r2, 0x2]\n\
+ adds r1, r2\n\
+ movs r0, 0xFF\n\
+ ands r1, r0\n\
+ mov r3, r12\n\
+ strh r1, [r3, 0x2]\n\
+_080DACFE:\n\
+ movs r4, 0x22\n\
+ ldrsh r1, [r5, r4]\n\
+ movs r2, 0x26\n\
+ ldrsh r0, [r5, r2]\n\
+ adds r1, r0\n\
+ mov r3, r12\n\
+ ldrh r0, [r3, 0xE]\n\
+ lsrs r0, 1\n\
+ cmp r1, r0\n\
+ blt _080DAD1A\n\
+ movs r0, 0\n\
+ strh r0, [r5, 0x2E]\n\
+ ldr r0, _080DAD2C @ =sub_80DA48C\n\
+ str r0, [r5, 0x1C]\n\
+_080DAD1A:\n\
+ pop {r3,r4}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_080DAD28: .4byte 0x00007fff\n\
+_080DAD2C: .4byte sub_80DA48C\n");
+};
+#endif
+
+void sub_80DAD30(struct Sprite *sprite)
+{
+ sprite->oam.priority = sub_8079ED4(gAnimBankTarget);
+ sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3);
+ sprite->callback = TranslateAnimSpriteToTargetMonLocation;
+}
+
+void sub_80DAD84(struct Sprite * sprite)
+{
+ s16 matrixNum;
+ s16 rand;
+ s16 sinVal;
+
+ sprite->data[1] = gBattleAnimArgs[0];
+ sprite->data[2] = gBattleAnimArgs[1];
+ sprite->data[3] = gBattleAnimArgs[2];
+
+ if (gMain.inBattle)
+ {
+ if (gBanksBySide[gAnimBankTarget] & 1)
+ {
+ sprite->data[7] = GetBattlerSpriteCoord(gAnimBankTarget, 1) + gBattleAnimArgs[3];
+ }
+ else
+ {
+ // 080dade0
+ sprite->data[7] = GetBattlerSpriteCoord(gAnimBankTarget, 1) + 40;
+ }
+
+ if (gBattleAnimArgs[4])
+ {
+ sprite->oam.priority = sub_8079ED4(gAnimBankTarget) + 1;
+ // 080dae24
+ }
+ else
+ {
+ sprite->oam.priority = sub_8079ED4(gAnimBankTarget);
+ }
+ }
+ else
+ {
+ sprite->data[7] = GetBattlerSpriteCoord(gAnimBankTarget, 1) + gBattleAnimArgs[3];
+ }
+
+ sprite->data[4] = gSineTable[sprite->data[1] & 0xff];
+ sprite->data[5] = -gSineTable[(sprite->data[1] & 0xff) + 64];
+ sprite->data[6] = 0;
+ sprite->pos2.x = sprite->pos2.y = 0;
+
+ matrixNum = sprite->oam.matrixNum;
+ sprite->data[1] = (u8) (sprite->data[1] >> 8);
+
+ rand = Random();
+ if (rand & 0x8000)
+ {
+ sprite->data[1] = 0xff - sprite->data[1];
+ }
+
+ sinVal = gSineTable[sprite->data[1]];
+
+ gOamMatrices[matrixNum].a = gOamMatrices[matrixNum].d = gSineTable[sprite->data[1] + 64];
+ gOamMatrices[matrixNum].b = sinVal;
+ gOamMatrices[matrixNum].c = -sinVal;
+
+ sprite->animBeginning = 1;
+ sprite->animEnded = 0;
+
+ if (rand & 1)
+ {
+ sprite->animNum = 1;
+ sprite->hFlip = 1;
+ }
+
+ sprite->callback = sub_80DAF0C;
+
+}
+
+#ifdef NONMATCHING
+void sub_80DAF0C(struct Sprite *sprite)
+{
+
+ /* NONMATCHING - Functionally equivalent
+ *
+ * differences:
+ *
+ * asm contains useless:
+ * movs r1, 0
+ * mov r8, r1
+ * where r8 is never used can't be matched
+ *
+ * 0x8001 and 0x8002 loaded then added with 0 to r0 instead of loaded straight there */
+
+ u16 *data;
+ u16 dataCpy[8];
+ int higher;
+
+ data = sprite->data;
+
+ if (++sprite->data[0] > 4)
+ {
+ sprite->pos2.x = (sprite->data[4] * sprite->data[6]) >> 8;
+ sprite->pos2.y = (sprite->data[5] * sprite->data[6]) >> 8;
+
+ sprite->data[6] += sprite->data[3] & 0xff;
+
+ if (sprite->data[6] >= (sprite->data[2] & 0xff))
+ {
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos1.y += sprite->pos2.y;
+
+ sprite->pos2.x = 0;
+ sprite->pos2.y = 0;
+
+ memcpy(dataCpy, data, 16);
+ memset(data, 0, 16);
+
+ data[4] = sprite->pos1.y << 8;
+ data[3] = dataCpy[3] >> 8;
+ data[1] = 0;
+ data[5] = dataCpy[1];
+
+ if (sprite->animNum != 0)
+ {
+ if (data[3] & 8)
+ {
+ data[2] = 0x8001;
+ }
+ else
+ {
+ data[2] = 0x8002;
+ }
+ }
+ else
+ {
+ if (data[3] & 8)
+ {
+ data[2] = 1;
+ }
+ else
+ {
+ data[2] = 2;
+ }
+ }
+
+ ((u8 *) data)[12] = dataCpy[2] >> 8;
+ ((u8 *) data)[13] = (u8) data[6] - 2;
+
+ higher = dataCpy[7] << 1;
+ data[7] = (data[7] & 1) | higher;
+
+ sprite->callback = sub_80DA6F0;
+ }
+ }
+}
+#else
+NAKED
+void sub_80DAF0C(struct Sprite *sprite)
+{
+ asm_unified("push {r4-r7,lr}\n\
+ mov r7, r8\n\
+ push {r7}\n\
+ sub sp, 0x10\n\
+ adds r4, r0, 0\n\
+ adds r5, r4, 0\n\
+ adds r5, 0x2E\n\
+ ldrh r0, [r4, 0x2E]\n\
+ adds r0, 0x1\n\
+ movs r1, 0\n\
+ mov r8, r1\n\
+ movs r7, 0\n\
+ strh r0, [r4, 0x2E]\n\
+ lsls r0, 16\n\
+ asrs r0, 16\n\
+ cmp r0, 0x4\n\
+ ble _080DAFF0\n\
+ movs r2, 0x36\n\
+ ldrsh r1, [r4, r2]\n\
+ movs r2, 0x3A\n\
+ ldrsh r0, [r4, r2]\n\
+ muls r0, r1\n\
+ asrs r6, r0, 8\n\
+ strh r6, [r4, 0x24]\n\
+ movs r0, 0x38\n\
+ ldrsh r1, [r4, r0]\n\
+ movs r2, 0x3A\n\
+ ldrsh r0, [r4, r2]\n\
+ muls r0, r1\n\
+ asrs r3, r0, 8\n\
+ strh r3, [r4, 0x26]\n\
+ ldrh r2, [r4, 0x34]\n\
+ movs r1, 0xFF\n\
+ adds r0, r1, 0\n\
+ ands r0, r2\n\
+ ldrh r2, [r4, 0x3A]\n\
+ adds r0, r2\n\
+ strh r0, [r4, 0x3A]\n\
+ ldrh r2, [r4, 0x32]\n\
+ lsls r0, 16\n\
+ asrs r0, 16\n\
+ ands r1, r2\n\
+ cmp r0, r1\n\
+ blt _080DAFF0\n\
+ ldrh r0, [r4, 0x20]\n\
+ adds r0, r6\n\
+ strh r0, [r4, 0x20]\n\
+ ldrh r0, [r4, 0x22]\n\
+ adds r0, r3\n\
+ strh r0, [r4, 0x22]\n\
+ strh r7, [r4, 0x24]\n\
+ strh r7, [r4, 0x26]\n\
+ mov r0, sp\n\
+ adds r1, r5, 0\n\
+ movs r2, 0x10\n\
+ bl memcpy\n\
+ adds r0, r5, 0\n\
+ movs r1, 0\n\
+ movs r2, 0x10\n\
+ bl memset\n\
+ ldrh r0, [r4, 0x22]\n\
+ lsls r0, 8\n\
+ strh r0, [r5, 0x8]\n\
+ mov r0, sp\n\
+ ldrh r0, [r0, 0x6]\n\
+ lsrs r1, r0, 8\n\
+ strh r1, [r5, 0x6]\n\
+ strh r7, [r5, 0x2]\n\
+ mov r0, sp\n\
+ ldrh r0, [r0, 0x2]\n\
+ strh r0, [r5, 0xA]\n\
+ adds r0, r4, 0\n\
+ adds r0, 0x2A\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0\n\
+ beq _080DAFC0\n\
+ movs r0, 0x8\n\
+ ands r1, r0\n\
+ cmp r1, 0\n\
+ beq _080DAFB8\n\
+ ldr r0, _080DAFB4 @ =0x00008001\n\
+ b _080DAFCE\n\
+ .align 2, 0\n\
+ _080DAFB4: .4byte 0x00008001\n\
+ _080DAFB8:\n\
+ ldr r0, _080DAFBC @ =0x00008002\n\
+ b _080DAFCE\n\
+ .align 2, 0\n\
+ _080DAFBC: .4byte 0x00008002\n\
+ _080DAFC0:\n\
+ movs r0, 0x8\n\
+ ands r1, r0\n\
+ cmp r1, 0\n\
+ beq _080DAFCC\n\
+ movs r0, 0x1\n\
+ b _080DAFCE\n\
+ _080DAFCC:\n\
+ movs r0, 0x2\n\
+ _080DAFCE:\n\
+ strh r0, [r5, 0x4]\n\
+ mov r0, sp\n\
+ ldrh r0, [r0, 0x4]\n\
+ lsrs r0, 8\n\
+ strb r0, [r5, 0xC]\n\
+ subs r0, 0x2\n\
+ strb r0, [r5, 0xD]\n\
+ mov r0, sp\n\
+ ldrh r1, [r0, 0xE]\n\
+ lsls r1, 1\n\
+ ldrh r2, [r5, 0xE]\n\
+ movs r0, 0x1\n\
+ ands r0, r2\n\
+ orrs r0, r1\n\
+ strh r0, [r5, 0xE]\n\
+ ldr r0, _080DAFFC @ =sub_80DA6F0\n\
+ str r0, [r4, 0x1C]\n\
+ _080DAFF0:\n\
+ add sp, 0x10\n\
+ pop {r3}\n\
+ mov r8, r3\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+ _080DAFFC: .4byte sub_80DA6F0\n");
+
+}
+#endif
+
+void sub_80DB000(struct Sprite *sprite)
+{
+ u16 arg;
+ u8 mult;
+
+ if (gBattleAnimArgs[2] == 0)
+ {
+ InitAnimSpritePos(sprite, 0);
+ }
+ else
+ {
+ sub_8078764(sprite, FALSE);
+ }
+
+ if ((!gBattleAnimArgs[2] && !GetBattlerSide(gAnimBankAttacker))
+ || (gBattleAnimArgs[2] == 1 && !GetBattlerSide(gAnimBankTarget)))
+ {
+ sprite->pos1.x += 8;
+ }
+
+ SeekSpriteAnim(sprite, gBattleAnimArgs[4]);
+ sprite->pos1.x -= 32;
+ sprite->data[1] = 0x0ccc;
+
+ arg = gBattleAnimArgs[4];
+ mult = 12;
+ sprite->pos2.x += mult * arg;
+ sprite->data[0] = arg;
+ sprite->data[7] = gBattleAnimArgs[3];
+ sprite->callback = sub_80DB0A0;
+}
+
+void sub_80DB0A0(struct Sprite *sprite)
+{
+ sprite->pos2.x += sprite->data[1] >> 8;
+
+ if (++sprite->data[0] == 6)
+ {
+ sprite->data[0] = 0;
+ sprite->pos2.x = 0;
+ StartSpriteAnim(sprite, 0);
+ }
+
+ if (--sprite->data[7] == -1)
+ {
+ DestroyAnimSprite(sprite);
+ }
+}
+
+void sub_80DB0E8(u8 task)
+{
+ u16 data = gTasks[task].data[0];
+ if ((data & 31) == 0)
+ {
+ ++gAnimVisualTaskCount;
+
+ gBattleAnimArgs[0] = Sin(gTasks[task].data[0], -13);
+ gBattleAnimArgs[1] = Cos(gTasks[task].data[0], -13);
+ gBattleAnimArgs[2] = 1;
+ gBattleAnimArgs[3] = 3;
+
+ CreateSpriteAndAnimate(&gBattleAnimSpriteTemplate_83DB538,
+ GetBattlerSpriteCoord(gAnimBankTarget, 2),
+ GetBattlerSpriteCoord(gAnimBankTarget, 3),
+ 3);
+ }
+
+ gTasks[task].data[0] += 8;
+
+ if (gTasks[task].data[0] > 0xff)
+ {
+ DestroyAnimVisualTask(task);
+ }
+}
+
+void sub_80DB194(struct Sprite *sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ InitAnimSpritePos(sprite, 1);
+ gSprites[GetAnimBattlerSpriteId(0)].invisible = 1;
+ ++sprite->data[0];
+ break;
+ case 1:
+ if (sprite->affineAnimEnded)
+ {
+ DestroyAnimSprite(sprite);
+ }
+ }
+}
+
+void sub_80DB1F4(struct Sprite *sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankTarget, 1);
+ sprite->pos2.y = -sprite->pos1.y - 32;
+ ++sprite->data[0];
+ break;
+ case 1:
+ sprite->pos2.y += 10;
+ if (sprite->pos2.y >= 0)
+ {
+ ++sprite->data[0];
+ }
+ break;
+ case 2:
+ sprite->pos2.y -= 10;
+ if (sprite->pos1.y + sprite->pos2.y < -32)
+ {
+ gSprites[GetAnimBattlerSpriteId(0)].invisible = 0;
+ DestroyAnimSprite(sprite);
+ }
+ }
+}
+
+void sub_80DB288(struct Sprite *sprite)
+{
+ InitAnimSpritePos(sprite, 1);
+ sprite->data[0] = gBattleAnimArgs[2];
+ sprite->data[1] = gBattleAnimArgs[3];
+ sprite->callback = sub_80DB2D0;
+ gSprites[GetAnimBattlerSpriteId(0)].invisible = 1;
+}
+
+void sub_80DB2D0(struct Sprite *sprite)
+{
+ if (sprite->data[0] > 0)
+ {
+ --sprite->data[0];
+ }
+ else if (sprite->pos1.y + sprite->pos2.y > -32)
+ {
+ sprite->data[2] += sprite->data[1];
+ sprite->pos2.y -= (sprite->data[2] >> 8);
+ }
+ else
+ {
+ sprite->invisible = 1;
+ if (sprite->data[3]++ > 20)
+ {
+ sprite->callback = sub_80DB330;
+ }
+ }
+}
+
+void sub_80DB330(struct Sprite *sprite)
+{
+ sprite->pos2.y += sprite->data[2] >> 8;
+
+ if (sprite->pos1.y + sprite->pos2.y > -32)
+ {
+ sprite->invisible = 0;
+ }
+
+ if (sprite->pos2.y > 0)
+ {
+ DestroyAnimSprite(sprite);
+ }
+}
+
+#ifdef NONMATCHING
+void sub_80DB374(struct Sprite *sprite)
+{
+ // NONMATCHING - Functionally equivalent - slight register swap at end
+
+ u32 matrixNum;
+ int t1, t3;
+ s16 t2;
+
+ switch (sprite->data[0])
+ {
+
+ case 0:
+ if (!gBattleAnimArgs[0])
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 0);
+ sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 1);
+ }
+ else
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankTarget, 0);
+ sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankTarget, 1);
+ }
+
+ sprite->data[1] = 512;
+
+ sub_8078FDC(sprite, 0, 256, sprite->data[1], 0);
+ ++sprite->data[0];
+ break;
+ case 1:
+ if (sprite->data[2] <= 11)
+ {
+ sprite->data[1] -= 40;
+ }
+ else
+ {
+ sprite->data[1] += 40;
+ }
+
+ ++sprite->data[2];
+
+ sub_8078FDC(sprite, 0, 256, sprite->data[1], 0);
+
+ matrixNum = sprite->oam.matrixNum;
+
+ t1 = 15616;
+ t2 = gOamMatrices[matrixNum].d;
+ t3 = t1 / t2 + 1;
+
+ if (t3 > 128)
+ {
+ t3 = 128;
+ }
+
+ /* NONMATCHING
+ * compiles to:
+ * asr r0, r0, #0x1
+ strh r0, [r5, #0x26]
+ * needed:
+ * asrs r1, r0, 1
+ * strh r1, [r5, 0x26] */
+ sprite->pos2.y = (64 - t3) / 2;
+
+ if (sprite->data[2] == 24)
+ {
+ sub_8079098(sprite);
+ DestroyAnimSprite(sprite);
+ }
+ }
+}
+#else
+NAKED
+void sub_80DB374(struct Sprite *sprite)
+{
+ asm_unified("push {r4,r5,lr}\n\
+ sub sp, 0x4\n\
+ adds r5, r0, 0\n\
+ movs r1, 0x2E\n\
+ ldrsh r0, [r5, r1]\n\
+ cmp r0, 0\n\
+ beq _080DB388\n\
+ cmp r0, 0x1\n\
+ beq _080DB3E0\n\
+ b _080DB44C\n\
+_080DB388:\n\
+ ldr r0, _080DB398 @ =gBattleAnimArgs\n\
+ movs r2, 0\n\
+ ldrsh r0, [r0, r2]\n\
+ cmp r0, 0\n\
+ bne _080DB3A0\n\
+ ldr r4, _080DB39C @ =gAnimBankAttacker\n\
+ b _080DB3A2\n\
+ .align 2, 0\n\
+_080DB398: .4byte gBattleAnimArgs\n\
+_080DB39C: .4byte gAnimBankAttacker\n\
+_080DB3A0:\n\
+ ldr r4, _080DB3DC @ =gAnimBankTarget\n\
+_080DB3A2:\n\
+ ldrb r0, [r4]\n\
+ movs r1, 0\n\
+ bl GetBattlerSpriteCoord\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ strh r0, [r5, 0x20]\n\
+ ldrb r0, [r4]\n\
+ movs r1, 0x1\n\
+ bl GetBattlerSpriteCoord\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ strh r0, [r5, 0x22]\n\
+ movs r0, 0\n\
+ movs r3, 0x80\n\
+ lsls r3, 2\n\
+ strh r3, [r5, 0x30]\n\
+ movs r2, 0x80\n\
+ lsls r2, 1\n\
+ str r0, [sp]\n\
+ adds r0, r5, 0\n\
+ movs r1, 0\n\
+ bl sub_8078FDC\n\
+ ldrh r0, [r5, 0x2E]\n\
+ adds r0, 0x1\n\
+ strh r0, [r5, 0x2E]\n\
+ b _080DB44C\n\
+ .align 2, 0\n\
+_080DB3DC: .4byte gAnimBankTarget\n\
+_080DB3E0:\n\
+ movs r1, 0x32\n\
+ ldrsh r0, [r5, r1]\n\
+ cmp r0, 0xB\n\
+ bgt _080DB3EE\n\
+ ldrh r0, [r5, 0x30]\n\
+ subs r0, 0x28\n\
+ b _080DB3F2\n\
+_080DB3EE:\n\
+ ldrh r0, [r5, 0x30]\n\
+ adds r0, 0x28\n\
+_080DB3F2:\n\
+ strh r0, [r5, 0x30]\n\
+ ldrh r0, [r5, 0x32]\n\
+ adds r0, 0x1\n\
+ movs r1, 0\n\
+ strh r0, [r5, 0x32]\n\
+ movs r2, 0x80\n\
+ lsls r2, 1\n\
+ movs r0, 0x30\n\
+ ldrsh r3, [r5, r0]\n\
+ str r1, [sp]\n\
+ adds r0, r5, 0\n\
+ bl sub_8078FDC\n\
+ ldrb r1, [r5, 0x3]\n\
+ lsls r1, 26\n\
+ lsrs r1, 27\n\
+ movs r0, 0xF4\n\
+ lsls r0, 6\n\
+ ldr r2, _080DB454 @ =gOamMatrices\n\
+ lsls r1, 3\n\
+ adds r1, r2\n\
+ movs r2, 0x6\n\
+ ldrsh r1, [r1, r2]\n\
+ bl __divsi3\n\
+ adds r1, r0, 0x1\n\
+ cmp r1, 0x80\n\
+ ble _080DB42C\n\
+ movs r1, 0x80\n\
+_080DB42C:\n\
+ movs r0, 0x40\n\
+ subs r0, r1\n\
+ lsrs r1, r0, 31\n\
+ adds r0, r1\n\
+ asrs r1, r0, 1\n\
+ strh r1, [r5, 0x26]\n\
+ movs r1, 0x32\n\
+ ldrsh r0, [r5, r1]\n\
+ cmp r0, 0x18\n\
+ bne _080DB44C\n\
+ adds r0, r5, 0\n\
+ bl sub_8079098\n\
+ adds r0, r5, 0\n\
+ bl DestroyAnimSprite\n\
+_080DB44C:\n\
+ add sp, 0x4\n\
+ pop {r4,r5}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_080DB454: .4byte gOamMatrices\n");
+}
+#endif
+
+void sub_80DB458(struct Sprite *sprite)
+{
+ int v1, v2;
+
+ v1 = 0x1ff & Random();
+ v2 = 0x7f & Random();
+
+ if (v1 & 1)
+ {
+ sprite->data[0] = 736 + v1;
+ }
+ else
+ {
+ sprite->data[0] = 736 - v1;
+ }
+
+ if (v2 & 1)
+ {
+ sprite->data[1] = 896 + v2;
+ }
+ else
+ {
+ sprite->data[1] = 896 - v2;
+ }
+
+ sprite->data[2] = gBattleAnimArgs[0];
+
+ if (sprite->data[2])
+ {
+ sprite->oam.matrixNum = 8;
+ }
+
+ if (gBattleAnimArgs[1] == 0)
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 0);
+ sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 1) + 32;
+ }
+ else
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankTarget, 0);
+ sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankTarget, 1) + 32;
+ }
+
+ sprite->callback = sub_80DB508;
+}
+
+void sub_80DB508(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] = sprite->data[0];
+ sprite->data[1] -= 32;
+
+ if (sprite->data[0] < 0)
+ {
+ sprite->data[0] = 0;
+ }
+
+ if (++sprite->data[3] == 31)
+ {
+ DestroyAnimSprite(sprite);
+ }
+}
+
+void sub_80DB564(struct Sprite *sprite)
+{
+ sprite->data[6] = 0;
+ sprite->data[7] = 0x40;
+ sprite->callback = sub_80DB578;
+}
+
+void sub_80DB578(struct Sprite *sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ if (++sprite->data[1] > 8)
+ {
+ sprite->data[1] = 0;
+ sprite->invisible ^= 1;
+ if (++sprite->data[2] > 5 && sprite->invisible)
+ {
+ sprite->data[0]++;
+ }
+ }
+ break;
+ case 1:
+ DestroyAnimSprite(sprite);
+ }
+}
+
+void sub_80DB5E4(struct Sprite *sprite)
+{
+ s16 posx, posy;
+ u16 rotation;
+
+ posx = sprite->pos1.x;
+ posy = sprite->pos1.y;
+
+ sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3);
+
+ sprite->data[4] = sprite->pos1.x << 4;
+ sprite->data[5] = sprite->pos1.y << 4;
+
+ sprite->data[6] = ((posx - sprite->pos1.x) << 4) / 12;
+ sprite->data[7] = ((posy - sprite->pos1.y) << 4) / 12;
+
+ rotation = ArcTan2Neg(posx - sprite->pos1.x, posy - sprite->pos1.y);
+ rotation += 0xc000;
+
+ sub_8078FDC(sprite, 1, 0x100, 0x100, rotation);
+
+ sprite->callback = sub_80DB6A0;
+}
+
+void sub_80DB6A0(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;
+
+ if ((u16) (sprite->pos1.x + 0x2d) > 0x14a || sprite->pos1.y > 0x9d || sprite->pos1.y < -0x2d)
+ {
+ move_anim_8074EE0(sprite);
+ }
+}
+
+void unref_sub_80DB6E4(u8 taskId)
+{
+ if (gBattleAnimArgs[0] == 0)
+ {
+ u8 spriteId = GetAnimBattlerSpriteId(0);
+ gSprites[spriteId].invisible = 1;
+ }
+ else
+ {
+ u8 spriteId = GetAnimBattlerSpriteId(0);
+ gSprites[spriteId].invisible = 0;
+ }
+
+ DestroyAnimVisualTask(taskId);
+} \ No newline at end of file
diff --git a/src/battle/anim/ghost.c b/src/battle/anim/ghost.c
index c11cea5a0..cba7b2b82 100644
--- a/src/battle/anim/ghost.c
+++ b/src/battle/anim/ghost.c
@@ -24,8 +24,8 @@ static void sub_80DDD58(struct Sprite *sprite);
static void sub_80DDD78(struct Sprite *);
static void sub_80DDE7C(u8 taskId);
static void sub_80DDED0(u8 taskId);
-static void sub_80DDF40(struct Sprite *sprite);
-static void sub_80DDFE8(struct Sprite *);
+static void InitAnimShadowBall(struct Sprite *sprite);
+static void AnimShadowBallStep(struct Sprite *);
static void sub_80DE0FC(struct Sprite *sprite);
static void sub_80DE114(struct Sprite *);
static void sub_80DE2DC(u8 taskId);
@@ -94,7 +94,7 @@ const union AffineAnimCmd *const gSpriteAffineAnimTable_83DAEA4[] =
gSpriteAffineAnim_83DAE94,
};
-const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAEA8 =
+const struct SpriteTemplate gShadowBallSpriteTemplate =
{
.tileTag = 10176,
.paletteTag = 10176,
@@ -102,7 +102,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAEA8 =
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gSpriteAffineAnimTable_83DAEA4,
- .callback = sub_80DDF40,
+ .callback = InitAnimShadowBall,
};
const union AnimCmd gSpriteAnim_83DAEC0[] =
@@ -320,7 +320,7 @@ static void sub_80DDCC8(struct Sprite *sprite)
static void sub_80DDD58(struct Sprite *sprite)
{
- sub_8078764(sprite, 1);
+ sub_8078764(sprite, TRUE);
sprite->callback = sub_80DDD78;
sub_80DDD78(sprite);
}
@@ -399,7 +399,12 @@ static void sub_80DDED0(u8 taskId)
}
}
-static void sub_80DDF40(struct Sprite *sprite)
+// Spins a sprite towards the target, pausing in the middle.
+// Used in Shadow Ball.
+// arg 0: duration step 1 (attacker -> center)
+// arg 1: duration step 2 (spin center)
+// arg 2: duration step 3 (center -> target)
+static void InitAnimShadowBall(struct Sprite *sprite)
{
u16 r5, r6;
r5 = sprite->pos1.x;
@@ -414,10 +419,10 @@ static void sub_80DDF40(struct Sprite *sprite)
sprite->data[5] = sprite->pos1.y << 4;
sprite->data[6] = (((s16)r5 - sprite->pos1.x) << 4) / (gBattleAnimArgs[0] << 1);
sprite->data[7] = (((s16)r6 - sprite->pos1.y) << 4) / (gBattleAnimArgs[0] << 1);
- sprite->callback = sub_80DDFE8;
+ sprite->callback = AnimShadowBallStep;
}
-static void sub_80DDFE8(struct Sprite *sprite)
+static void AnimShadowBallStep(struct Sprite *sprite)
{
switch (sprite->data[0])
{
@@ -463,7 +468,7 @@ static void sub_80DDFE8(struct Sprite *sprite)
static void sub_80DE0FC(struct Sprite *sprite)
{
- sub_8078764(sprite, 1);
+ sub_8078764(sprite, TRUE);
sprite->callback = sub_80DE114;
}
diff --git a/src/battle/anim/ground.c b/src/battle/anim/ground.c
index cf73ead2f..407abeddc 100644
--- a/src/battle/anim/ground.c
+++ b/src/battle/anim/ground.c
@@ -196,7 +196,7 @@ static void AnimBonemerangProjectileEnd(struct Sprite *sprite)
// arg 4: duration
static void AnimBoneHitProjectile(struct Sprite *sprite)
{
- sub_8078764(sprite, 1);
+ sub_8078764(sprite, TRUE);
if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER)
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
diff --git a/src/battle/anim/heal.c b/src/battle/anim/heal.c
index c2bce0e77..e0b8f9b9e 100644
--- a/src/battle/anim/heal.c
+++ b/src/battle/anim/heal.c
@@ -41,7 +41,7 @@ void sub_80CBAA4(struct Sprite* sprite)
{
if (sprite->data[0] == 0)
{
- sub_8078764(sprite, 0);
+ sub_8078764(sprite, FALSE);
sprite->data[1] = gBattleAnimArgs[2];
}
diff --git a/src/battle/anim/hop_2.c b/src/battle/anim/hop_2.c
index ab239f3c4..108b06c60 100644
--- a/src/battle/anim/hop_2.c
+++ b/src/battle/anim/hop_2.c
@@ -35,7 +35,7 @@ void sub_80CBAE8(struct Sprite* sprite)
{
s16 p1;
s16 p2;
- sub_8078764(sprite, 0);
+ sub_8078764(sprite, FALSE);
p1 = GetBattlerSpriteCoord(gAnimBankAttacker, 0);
p2 = GetBattlerSpriteCoord(gAnimBankAttacker, 1);
if ((gAnimBankTarget ^ 2) == gAnimBankAttacker)
diff --git a/src/battle/anim/ice.c b/src/battle/anim/ice.c
index 50c8b9030..e2288e704 100644
--- a/src/battle/anim/ice.c
+++ b/src/battle/anim/ice.c
@@ -1,25 +1,59 @@
#include "global.h"
+#include "main.h"
+#include "trig.h"
#include "rom_8077ABC.h"
+#include "battle.h"
#include "battle_anim.h"
+#include "constants/battle_constants.h"
+#include "task.h"
+#include "decompress.h"
+#include "palette.h"
+#include "random.h"
extern s16 gBattleAnimArgs[];
-extern u8 gAnimBankAttacker;
-extern u8 gAnimBankTarget;
-
-void sub_80D7704(struct Sprite *sprite);
-void sub_80D78EC(struct Sprite *sprite);
-void sub_80D792C(struct Sprite *sprite);
-void sub_80D79B4(struct Sprite *sprite);
-void sub_80D7A64(struct Sprite *sprite);
-void sub_80D7CD4(struct Sprite *sprite);
-void sub_80D7E88(struct Sprite *sprite);
-void sub_80D7F10(struct Sprite *sprite);
-void sub_80D83E0(struct Sprite *sprite);
-void sub_80D8700(struct Sprite *sprite);
-void sub_80D8D1C(struct Sprite *sprite);
+extern u8 gAnimBankAttacker;
+extern u8 gAnimBankTarget;
+extern u8 gAnimVisualTaskCount;
+extern u8 gBanksBySide[];
+extern u8 gBankSpriteIds[];
+
+extern u16 gBattle_BG1_X;
+extern u16 gBattle_BG1_Y;
+
+extern const u8 gUnknown_083970E8[];
+
+extern struct INCBIN_U8 gBattleAnimFogTilemap;
+extern struct INCBIN_U8 gWeatherFog1Tiles;
+
+static void sub_80D7704(struct Sprite *sprite);
+static void AnimIcePunchSwirlingParticle(struct Sprite *sprite);
+static void AnimIceBeamParticle(struct Sprite *sprite);
+static void AnimIceEffectParticle(struct Sprite *sprite);
+static void AnimFlickerIceEffectParticle(struct Sprite *sprite);
+static void AnimMoveParticleBeyondTarget(struct Sprite *sprite);
+static void AnimWaveFromCenterOfTarget(struct Sprite *sprite);
+static void InitSwirlingFogAnim(struct Sprite *sprite);
+static void AnimThrowMistBall(struct Sprite *sprite);
+static void InitPoisonGasCloudAnim(struct Sprite *sprite);
+static void AnimHailBegin(struct Sprite *sprite);
void sub_807A9BC(struct Sprite *sprite);
-void unc_080B06FC(struct Sprite *sprite);
-void sub_80D8F10(struct Sprite *sprite);
+static void InitIceBallAnim(struct Sprite *sprite);
+static void InitIceBallParticle(struct Sprite *sprite);
+static void AnimSwirlingSnowball_Step1(struct Sprite *sprite);
+static void AnimSwirlingSnowball_Step2(struct Sprite *sprite);
+static void AnimSwirlingSnowball_Step3(struct Sprite *sprite);
+static void AnimSwirlingSnowball_End(struct Sprite *sprite);
+static void AnimWiggleParticleTowardsTarget(struct Sprite *sprite);
+static void AnimSwirlingFogAnim(struct Sprite *sprite);
+static void sub_80D8874(struct Sprite *sprite);
+static void AnimHailContinue(struct Sprite *sprite);
+static void AnimThrowIceBall(struct Sprite *sprite);
+static void AnimIceBallParticle(struct Sprite *sprite);
+
+static void AnimTask_Haze2(u8 taskId);
+static void AnimTask_OverlayFogTiles(u8 taskId);
+static void AnimTask_Hail2(u8 taskId);
+bool8 sub_80D8BA8(u8 a1, u8 a2, u8 a3, u8 a4);
const union AnimCmd gSpriteAnim_83D9B58[] =
{
@@ -33,6 +67,7 @@ const union AnimCmd *const gSpriteAnimTable_83D9B64[] =
gSpriteAnim_83D9B58,
};
+// unknown sprite template
const struct SpriteTemplate gSpriteTemplate_83D9B68 =
{
.tileTag = 10141,
@@ -122,7 +157,7 @@ const union AffineAnimCmd *const gSpriteAffineAnimTable_83D9BDC[] =
gSpriteAffineAnim_83D9BCC,
};
-const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9BE0 =
+const struct SpriteTemplate gLargeIcePunchCrystalSpriteTemplate =
{
.tileTag = 10141,
.paletteTag = 10141,
@@ -130,10 +165,10 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9BE0 =
.anims = gSpriteAnimTable_83D9BB8,
.images = NULL,
.affineAnims = gSpriteAffineAnimTable_83D9BDC,
- .callback = sub_80D78EC,
+ .callback = AnimIcePunchSwirlingParticle,
};
-const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9BF8 =
+const struct SpriteTemplate gSmallIcePunchCrystalSpriteTemplate =
{
.tileTag = 10141,
.paletteTag = 10141,
@@ -141,7 +176,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9BF8 =
.anims = gSpriteAnimTable_83D9BBC,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80D78EC,
+ .callback = AnimIcePunchSwirlingParticle,
};
const union AffineAnimCmd gSpriteAffineAnim_83D9C10[] =
@@ -155,7 +190,7 @@ const union AffineAnimCmd *const gSpriteAffineAnimTable_83D9C20[] =
gSpriteAffineAnim_83D9C10,
};
-const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9C24 =
+const struct SpriteTemplate IceBeamCenterParticleSpriteTemplate =
{
.tileTag = 10141,
.paletteTag = 10141,
@@ -163,10 +198,10 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9C24 =
.anims = gSpriteAnimTable_83D9BB8,
.images = NULL,
.affineAnims = gSpriteAffineAnimTable_83D9C20,
- .callback = sub_80D792C,
+ .callback = AnimIceBeamParticle,
};
-const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9C3C =
+const struct SpriteTemplate gIceBeamOuterParticleSpriteTemplate =
{
.tileTag = 10141,
.paletteTag = 10141,
@@ -174,7 +209,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9C3C =
.anims = gSpriteAnimTable_83D9BBC,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80D792C,
+ .callback = AnimIceBeamParticle,
};
const union AffineAnimCmd gSpriteAffineAnim_83D9C54[] =
@@ -190,7 +225,7 @@ const union AffineAnimCmd *const gSpriteAffineAnimTable_83D9C74[] =
gSpriteAffineAnim_83D9C54,
};
-const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9C78 =
+const struct SpriteTemplate gLargeIceEffectParticleSpriteTemplate =
{
.tileTag = 10141,
.paletteTag = 10141,
@@ -198,10 +233,10 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9C78 =
.anims = gSpriteAnimTable_83D9BB8,
.images = NULL,
.affineAnims = gSpriteAffineAnimTable_83D9C74,
- .callback = sub_80D79B4,
+ .callback = AnimIceEffectParticle,
};
-const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9C90 =
+const struct SpriteTemplate gSmallIceEffectParticleSpriteTemplate =
{
.tileTag = 10141,
.paletteTag = 10141,
@@ -209,10 +244,10 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9C90 =
.anims = gSpriteAnimTable_83D9BBC,
.images = NULL,
.affineAnims = gSpriteAffineAnimTable_83D9C74,
- .callback = sub_80D79B4,
+ .callback = AnimIceEffectParticle,
};
-const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9CA8 =
+const struct SpriteTemplate gSmallSnowballSpriteTemplate1 =
{
.tileTag = 10141,
.paletteTag = 10141,
@@ -220,10 +255,10 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9CA8 =
.anims = gSpriteAnimTable_83D9BC0,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80D7A64,
+ .callback = AnimSwirlingSnowball_Step1,
};
-const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9CC0 =
+const struct SpriteTemplate gLargeSnowballSpriteTemplate =
{
.tileTag = 10141,
.paletteTag = 10141,
@@ -231,10 +266,10 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9CC0 =
.anims = gSpriteAnimTable_83D9BC4,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80D7CD4,
+ .callback = AnimMoveParticleBeyondTarget,
};
-const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9CD8 =
+const struct SpriteTemplate gSmallSnowballSpriteTemplate2 =
{
.tileTag = 10141,
.paletteTag = 10141,
@@ -242,7 +277,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9CD8 =
.anims = gSpriteAnimTable_83D9BC0,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80D7CD4,
+ .callback = AnimMoveParticleBeyondTarget,
};
const union AnimCmd gSpriteAnim_83D9CF0[] =
@@ -262,7 +297,7 @@ const union AnimCmd *const gSpriteAnimTable_83D9D10[] =
gSpriteAnim_83D9CF0,
};
-const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9D14 =
+const struct SpriteTemplate gIceSpikeSpriteTemplate =
{
.tileTag = 10142,
.paletteTag = 10142,
@@ -270,7 +305,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9D14 =
.anims = gSpriteAnimTable_83D9D10,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80D7E88,
+ .callback = AnimWaveFromCenterOfTarget,
};
const union AnimCmd gSpriteAnim_83D9D2C[] =
@@ -285,7 +320,7 @@ const union AnimCmd *const gSpriteAnimTable_83D9D38[] =
gSpriteAnim_83D9D2C,
};
-const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9D3C =
+const struct SpriteTemplate gMistCloudSpriteTemplate =
{
.tileTag = 10144,
.paletteTag = 10144,
@@ -293,10 +328,10 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9D3C =
.anims = gSpriteAnimTable_83D9D38,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80D7F10,
+ .callback = InitSwirlingFogAnim,
};
-const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9D54 =
+const struct SpriteTemplate gSmogCloudSpriteTemplate =
{
.tileTag = 10172,
.paletteTag = 10172,
@@ -304,7 +339,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9D54 =
.anims = gSpriteAnimTable_83D9D38,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80D7F10,
+ .callback = InitSwirlingFogAnim,
};
const u8 gUnknown_083D9D6C[] =
@@ -312,7 +347,7 @@ const u8 gUnknown_083D9D6C[] =
0, 1, 2, 2, 2, 2, 3, 4, 4, 4, 5, 6, 6, 6, 6, 7, 8, 8, 8, 9,
};
-const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9D80 =
+const struct SpriteTemplate gMistBallSpriteTemplate =
{
.tileTag = 10155,
.paletteTag = 10155,
@@ -320,7 +355,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9D80 =
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80D83E0,
+ .callback = AnimThrowMistBall,
};
const u8 gUnknown_083D9D98[] =
@@ -328,7 +363,7 @@ const u8 gUnknown_083D9D98[] =
0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5,
};
-const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9DAC =
+const struct SpriteTemplate gPoisonGasCloudSpriteTemplate =
{
.tileTag = 10172,
.paletteTag = 10172,
@@ -336,22 +371,21 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9DAC =
.anims = gSpriteAnimTable_83D9D38,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80D8700,
+ .callback = InitPoisonGasCloudAnim,
};
-// bitfield array
-const u32 gUnknown_083D9DC4[] =
+const u8 gUnknown_083D9DC4[][4] =
{
- 0x2001E064,
- 0x0001E055,
- 0x1011E0F2,
- 0x1021E042,
- 0x0031E0B6,
- 0x2001E03C,
- 0x0011E0D6,
- 0x1001E071,
- 0x1031E0D2,
- 0x0021E026,
+ {0x64, 0xE0, 0x01, 0x20},
+ {0x55, 0xE0, 0x01, 0x00},
+ {0xF2, 0xE0, 0x11, 0x10},
+ {0x42, 0xE0, 0x21, 0x10},
+ {0xB6, 0xE0, 0x31, 0x00},
+ {0x3C, 0xE0, 0x01, 0x20},
+ {0xD6, 0xE0, 0x11, 0x00},
+ {0x71, 0xE0, 0x01, 0x10},
+ {0xD2, 0xE0, 0x31, 0x10},
+ {0x26, 0xE0, 0x21, 0x00},
};
const union AffineAnimCmd gSpriteAffineAnim_83D9DEC[] =
@@ -390,7 +424,7 @@ const union AffineAnimCmd *const gSpriteAffineAnimTable_83D9E38[] =
gSpriteAffineAnim_83D9E1C,
};
-const struct SpriteTemplate gSpriteTemplate_83D9E3C =
+const struct SpriteTemplate gHailSpriteTemplate =
{
.tileTag = 10263,
.paletteTag = 10263,
@@ -398,10 +432,10 @@ const struct SpriteTemplate gSpriteTemplate_83D9E3C =
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gSpriteAffineAnimTable_83D9E2C,
- .callback = sub_80D8D1C,
+ .callback = AnimHailBegin,
};
-const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9E54 =
+const struct SpriteTemplate gWeatherBallHailSpriteTemplate =
{
.tileTag = 10263,
.paletteTag = 10263,
@@ -472,7 +506,7 @@ const union AffineAnimCmd *const gSpriteAffineAnimTable_83D9EE0[] =
gSpriteAffineAnim_83D9ED0,
};
-const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9EF4 =
+const struct SpriteTemplate gIceBallSpriteTemplate =
{
.tileTag = 10043,
.paletteTag = 10043,
@@ -480,10 +514,10 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9EF4 =
.anims = gSpriteAnimTable_83D9E88,
.images = NULL,
.affineAnims = gSpriteAffineAnimTable_83D9EE0,
- .callback = unc_080B06FC,
+ .callback = InitIceBallAnim,
};
-const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9F0C =
+const struct SpriteTemplate gIceBallParticleSpriteTemplate =
{
.tileTag = 10141,
.paletteTag = 10141,
@@ -491,5 +525,1798 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9F0C =
.anims = gSpriteAnimTable_83D9BBC,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80D8F10,
+ .callback = InitIceBallParticle,
};
+
+// unknown - potentially used in weather ball
+// TODO: decompile function and name it
+/*
+// NOT EQUIVALENT
+static void sub_80D7704(struct Sprite *sprite)
+{
+ //
+ //u16 battler1, battler2, battler3, battler4; //
+ u16 r9, r8, r3, r6;
+ //s16 r4, r10;
+
+ sprite->oam.tileNum += 7;
+
+ //u8 battler1, battler2, battler3, battler4;
+
+ //battler1 = GetBattlerSpriteCoord(gAnimBankTarget, 2);
+ //battler2 = GetBattlerSpriteCoord(gAnimBankTarget, 3);
+ //battler3 = GetBattlerSpriteCoord(gAnimBankAttacker, 2);
+ //battler4 = GetBattlerSpriteCoord(gAnimBankAttacker, 3);
+
+ //sprite->oam.tileNum += 7;
+
+ //sprite->data[0] = gBattleAnimArgs[4];
+
+ //sprite->data[1] = battler3 + gBattleAnimArgs[0]; //???
+ //sprite->data[2] = battler1 + gBattleAnimArgs[2];
+ //sprite->data[3] = battler4 + gBattleAnimArgs[1];
+ //sprite->data[4] = battler2 + gBattleAnimArgs[3];
+
+ r9 = GetBattlerSpriteCoord(gAnimBankTarget, 2);
+ r8 = GetBattlerSpriteCoord(gAnimBankTarget, 3);
+ r3 = GetBattlerSpriteCoord(gAnimBankAttacker, 2);
+ r6 = GetBattlerSpriteCoord(gAnimBankAttacker, 3);
+
+ sprite->data[0] = gBattleAnimArgs[4];
+
+ sprite->data[1] = r3 + gBattleAnimArgs[0]; //???
+ sprite->data[2] = r9 + gBattleAnimArgs[2];
+ sprite->data[3] = r6 + gBattleAnimArgs[1];
+ sprite->data[4] = r8 + gBattleAnimArgs[3];
+
+ //sprite->data[0] = gBattleAnimArgs;
+
+
+ sub_8078314(sprite);
+
+ if ((u32)(r9 + 32) <= 304 || (u32)(r8 + 32) <= 224) // cmp 1
+ {
+ r4 = sprite->data[1];
+ r10 = 304;
+
+ // _080D77AA
+ for (int i = 0; i < 3; i++)
+ {
+ //
+ if (((u32)((s16)r9 + r4) + (0x80 << 14)) >> 16 > 304
+ || ((u32)((s16)r8 + r4) + (0x80 << 14)) >> 16 > 0xE0)
+ {
+ break;
+ }
+ }
+ }
+ // _080D77DE
+}
+*/
+
+NAKED static void sub_80D7704(struct Sprite *sprite)
+{
+ asm_unified("\tpush {r4-r7,lr}\n"
+ "\tmov r7, r10\n"
+ "\tmov r6, r9\n"
+ "\tmov r5, r8\n"
+ "\tpush {r5-r7}\n"
+ "\tsub sp, 0x4\n"
+ "\tadds r5, r0, 0\n"
+ "\tldrh r2, [r5, 0x4]\n"
+ "\tlsls r1, r2, 22\n"
+ "\tlsrs r1, 22\n"
+ "\tadds r1, 0x7\n"
+ "\tldr r3, _080D780C @ =0x000003ff\n"
+ "\tadds r0, r3, 0\n"
+ "\tands r1, r0\n"
+ "\tldr r0, _080D7810 @ =0xfffffc00\n"
+ "\tands r0, r2\n"
+ "\torrs r0, r1\n"
+ "\tstrh r0, [r5, 0x4]\n"
+ "\tldr r4, _080D7814 @ =gAnimBankTarget\n"
+ "\tldrb r0, [r4]\n"
+ "\tmovs r1, 0x2\n"
+ "\tbl GetBattlerSpriteCoord\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r0, 24\n"
+ "\tmov r9, r0\n"
+ "\tldrb r0, [r4]\n"
+ "\tmovs r1, 0x3\n"
+ "\tbl GetBattlerSpriteCoord\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r0, 24\n"
+ "\tmov r8, r0\n"
+ "\tldr r4, _080D7818 @ =gAnimBankAttacker\n"
+ "\tldrb r0, [r4]\n"
+ "\tmovs r1, 0x2\n"
+ "\tbl GetBattlerSpriteCoord\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r3, r0, 24\n"
+ "\tldrb r0, [r4]\n"
+ "\tmovs r1, 0x3\n"
+ "\tstr r3, [sp]\n"
+ "\tbl GetBattlerSpriteCoord\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r6, r0, 24\n"
+ "\tldr r1, _080D781C @ =gBattleAnimArgs\n"
+ "\tldrh r0, [r1, 0x8]\n"
+ "\tstrh r0, [r5, 0x2E]\n"
+ "\tldrh r0, [r1]\n"
+ "\tldr r3, [sp]\n"
+ "\tadds r0, r3\n"
+ "\tstrh r0, [r5, 0x30]\n"
+ "\t ldrh r0, [r1, 0x4]\n"
+ "\t mov r4, r9\n"
+ "\t adds r0, r4, r0\n"
+ "\tstrh r0, [r5, 0x32]\n"
+ "\tldrh r0, [r1, 0x2]\n"
+ "\tadds r0, r6\n"
+ "\tstrh r0, [r5, 0x34]\n"
+ "\tldrh r0, [r1, 0x6]\n"
+ "\tmov r7, r8\n"
+ "\tadds r0, r7, r0\n"
+ "\tstrh r0, [r5, 0x36]\n"
+ "\tadds r0, r5, 0\n"
+ "\tbl sub_8078314\n"
+ "\tadds r4, 0x20\n"
+ "\tmovs r0, 0x98\n"
+ "\tlsls r0, 1\n"
+ "\tmov r12, r0\n"
+ "\tldr r3, [sp]\n"
+ "\tcmp r4, r12\n"
+ "\tbhi _080D77DE\n"
+ "\tadds r0, r7, 0\n"
+ "\tadds r0, 0x20\n"
+ "\tldrh r1, [r5, 0x30]\n"
+ "\tldrh r2, [r5, 0x32]\n"
+ "\tcmp r0, 0xE0\n"
+ "\tbhi _080D77DE\n"
+ "\tadds r4, r1, 0\n"
+ "\tmov r10, r12\n"
+ "_080D77AA:\n"
+ "\tmov r7, r9\n"
+ "\tlsls r1, r7, 16\n"
+ "\tasrs r1, 16\n"
+ "\tadds r1, r4\n"
+ "\tlsls r1, 16\n"
+ "\tmov r7, r8\n"
+ "\tlsls r0, r7, 16\n"
+ "\tasrs r0, 16\n"
+ "\tadds r0, r2\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r0, 16\n"
+ "\tmov r8, r0\n"
+ "\tlsrs r0, r1, 16\n"
+ "\tmov r9, r0\n"
+ "\tmovs r7, 0x80\n"
+ "\tlsls r7, 14\n"
+ "\tadds r1, r7\n"
+ "\tlsrs r1, 16\n"
+ "\tcmp r1, r10\n"
+ "\tbhi _080D77DE\n"
+ "\tmov r1, r8\n"
+ "\tlsls r0, r1, 16\n"
+ "\tadds r0, r7\n"
+ "\tlsrs r0, 16\n"
+ "\tcmp r0, 0xE0\n"
+ "\tbls _080D77AA\n"
+ "_080D77DE:\n"
+ "\tldrh r0, [r5, 0x30]\n"
+ "\tnegs r7, r0\n"
+ "\tstrh r7, [r5, 0x30]\n"
+ "\tldrh r0, [r5, 0x32]\n"
+ "\tnegs r4, r0\n"
+ "\tstrh r4, [r5, 0x32]\n"
+ "\tlsls r0, r3, 16\n"
+ "\tmovs r1, 0x80\n"
+ "\tlsls r1, 14\n"
+ "\tadds r0, r1\n"
+ "\tlsrs r0, 16\n"
+ "\tmovs r2, 0x98\n"
+ "\tlsls r2, 1\n"
+ "\tmov r12, r2\n"
+ "\tldr r1, _080D781C @ =gBattleAnimArgs\n"
+ "\tmov r10, r1\n"
+ "\tcmp r0, r12\n"
+ "\tbhi _080D784A\n"
+ "\tlsls r1, r6, 16\n"
+ "\tmovs r2, 0x80\n"
+ "\tlsls r2, 14\n"
+ "\tadds r0, r1, r2\n"
+ "\tb _080D7842\n"
+ "\t.align 2, 0\n"
+ "_080D780C: .4byte 0x000003ff\n"
+ "_080D7810: .4byte 0xfffffc00\n"
+ "_080D7814: .4byte gAnimBankTarget\n"
+ "_080D7818: .4byte gAnimBankAttacker\n"
+ "_080D781C: .4byte gBattleAnimArgs\n"
+ "_080D7820:\n"
+ "\tlsls r1, r3, 16\n"
+ "\tasrs r1, 16\n"
+ "\tadds r1, r7\n"
+ "\tlsls r1, 16\n"
+ "\tasrs r0, r2, 16\n"
+ "\tadds r0, r4\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r6, r0, 16\n"
+ "\tlsrs r3, r1, 16\n"
+ "\tmovs r0, 0x80\n"
+ "\tlsls r0, 14\n"
+ "\tadds r1, r0\n"
+ "\tlsrs r1, 16\n"
+ "\tcmp r1, r12\n"
+ "\tbhi _080D784A\n"
+ "\tlsls r1, r6, 16\n"
+ "\tadds r0, r1, r0\n"
+ "_080D7842:\n"
+ "\tlsrs r0, 16\n"
+ "\tadds r2, r1, 0\n"
+ "\tcmp r0, 0xE0\n"
+ "\tbls _080D7820\n"
+ "_080D784A:\n"
+ "\tstrh r3, [r5, 0x20]\n"
+ "\tstrh r6, [r5, 0x22]\n"
+ "\tmov r1, r10\n"
+ "\tldrh r0, [r1, 0x8]\n"
+ "\tstrh r0, [r5, 0x2E]\n"
+ "\tstrh r3, [r5, 0x30]\n"
+ "\tmov r2, r9\n"
+ "\tstrh r2, [r5, 0x32]\n"
+ "\tstrh r6, [r5, 0x34]\n"
+ "\tmov r3, r8\n"
+ "\tstrh r3, [r5, 0x36]\n"
+ "\tadds r0, r5, 0\n"
+ "\tbl sub_8078314\n"
+ "\tmov r7, r10\n"
+ "\tldrh r0, [r7, 0xA]\n"
+ "\tstrh r0, [r5, 0x34]\n"
+ "\tldrh r0, [r7, 0xC]\n"
+ "\tstrh r0, [r5, 0x36]\n"
+ "\tldr r0, _080D7884 @ =sub_80D7888\n"
+ "\tstr r0, [r5, 0x1C]\n"
+ "\tadd sp, 0x4\n"
+ "\tpop {r3-r5}\n"
+ "\tmov r8, r3\n"
+ "\tmov r9, r4\n"
+ "\tmov r10, r5\n"
+ "\tpop {r4-r7}\n"
+ "\tpop {r0}\n"
+ "\tbx r0\n"
+ "\t.align 2, 0\n"
+ "_080D7884: .4byte sub_80D7888");
+}
+
+void sub_80D7888(struct Sprite *sprite)
+{
+ if (sprite->data[0] != 0)
+ {
+ sprite->data[5] += sprite->data[1];
+ sprite->data[6] += sprite->data[2];
+ sprite->pos2.x = sprite->data[5];
+ sprite->pos2.y = sprite->data[6];
+ sprite->pos2.x += Sin(sprite->data[7], sprite->data[3]);
+ sprite->pos2.y += Sin(sprite->data[7], sprite->data[3]);
+ sprite->data[7] = (sprite->data[7] + sprite->data[4]) & 0xFF;
+ sprite->data[0] -= 1;
+ }
+ else
+ {
+ DestroyAnimSprite(sprite);
+ }
+}
+
+// Animates the swirling ice crystals in Ice Punch.
+// arg 0: initial position angle around circle (0-256)
+static void AnimIcePunchSwirlingParticle(struct Sprite *sprite)
+{
+ sprite->data[0] = gBattleAnimArgs[0];
+ sprite->data[1] = 60;
+ sprite->data[2] = 9;
+ sprite->data[3] = 30;
+ sprite->data[4] = 65024;
+ StoreSpriteCallbackInData(sprite, DestroyAnimSprite);
+ sprite->callback = sub_8078174;
+ sub_8078174(sprite);
+}
+
+// Animates the ice particles in Ice Beam.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: target x offset
+// arg 3: target y offset
+// arg 4: duration
+static void AnimIceBeamParticle(struct Sprite *sprite)
+{
+ InitAnimSpritePos(sprite, 1);
+ sprite->data[2] = GetBattlerSpriteCoord(gAnimBankTarget, 2);
+
+ if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER)
+ sprite->data[2] -= gBattleAnimArgs[2];
+ else
+ sprite->data[2] += gBattleAnimArgs[2];
+
+ sprite->data[4] = GetBattlerSpriteCoord(gAnimBankTarget, 3) + gBattleAnimArgs[3];
+ sprite->data[0] = gBattleAnimArgs[4];
+ StoreSpriteCallbackInData(sprite, DestroyAnimSprite);
+ sprite->callback = StartAnimLinearTranslation;
+}
+
+// Animates the ice crystals at the end of Ice Punch, Ice Beam, Tri Attack,
+// Weather Ball (Hail), Blizzard, and Powder Snow.
+// arg 0: target x offset
+// arg 1: target y offset
+// arg 2: ??? unknown boolean
+static void AnimIceEffectParticle(struct Sprite *sprite)
+{
+ if (gBattleAnimArgs[2] == 0)
+ {
+ sub_8078764(sprite, TRUE);
+ }
+ else
+ {
+ SetAverageBattlerPositions(gAnimBankTarget, 1, &sprite->pos1.x, &sprite->pos1.y);
+ if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER)
+ gBattleAnimArgs[0] = -gBattleAnimArgs[0];
+
+ sprite->pos1.x += gBattleAnimArgs[0];
+ sprite->pos1.y += gBattleAnimArgs[1];
+ }
+
+ StoreSpriteCallbackInData(sprite, AnimFlickerIceEffectParticle);
+ sprite->callback = sub_80785E4;
+}
+
+static void AnimFlickerIceEffectParticle(struct Sprite *sprite)
+{
+ sprite->invisible ^= 1;
+ sprite->data[0] += 1;
+ if (sprite->data[0] == 20)
+ move_anim_8074EE0(sprite);
+}
+
+// Animates the small snowballs that swirl around the target in Blizzard and Icy Wind.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: target x offset
+// arg 3: target y offset
+// arg 4: particle speed
+// arg 5: multiple targets? (boolean)
+static void AnimSwirlingSnowball_Step1(struct Sprite *sprite)
+{
+ int i;
+ s16 tempDataHolder[8];
+
+ InitAnimSpritePos(sprite, 1);
+
+ sprite->data[0] = gBattleAnimArgs[4];
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[3] = sprite->pos1.y;
+
+ if (!gBattleAnimArgs[5])
+ {
+ sprite->data[2] = GetBattlerSpriteCoord(gAnimBankTarget, 2);
+ sprite->data[4] = GetBattlerSpriteCoord(gAnimBankTarget, 3) + gBattleAnimArgs[3];
+ }
+ else
+ {
+ SetAverageBattlerPositions(gAnimBankTarget, 1, &sprite->data[2], &sprite->data[4]);
+ }
+
+ if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER)
+ sprite->data[2] -= gBattleAnimArgs[2];
+ else
+ sprite->data[2] += gBattleAnimArgs[2];
+
+ for (i = 0; i < 8; i++)
+ tempDataHolder[i] = sprite->data[i];
+
+ sub_8078D60(sprite);
+ sprite->data[1] ^= 1;
+ sprite->data[2] ^= 1;
+
+ while (1)
+ {
+ sprite->data[0] = 1;
+ sub_8078CE8(sprite);
+
+ if ((u32)(sprite->pos1.x + sprite->pos2.x + 16) > 272
+ || sprite->pos1.y + sprite->pos2.y > 160
+ || sprite->pos1.y + sprite->pos2.y < -16)
+ break;
+ }
+
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->pos2.y = 0;
+ sprite->pos2.x = 0;
+
+ for (i = 0; i < 8; i++)
+ sprite->data[i] = tempDataHolder[i];
+
+ sprite->callback = sub_8078D8C;
+ StoreSpriteCallbackInData(sprite, AnimSwirlingSnowball_Step2);
+}
+
+static void AnimSwirlingSnowball_Step2(struct Sprite *sprite)
+{
+ s16 tempVar;
+
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->pos2.y = 0;
+ sprite->pos2.x = 0;
+ sprite->data[0] = 128;
+
+ tempVar = GetBattlerSide(gAnimBankAttacker) != 0 ? 20 : 65516;
+
+ sprite->data[3] = Sin(sprite->data[0], tempVar);
+ sprite->data[4] = Cos(sprite->data[0], 0xF);
+ sprite->data[5] = 0;
+ sprite->callback = AnimSwirlingSnowball_Step3;
+ AnimSwirlingSnowball_Step3(sprite);
+}
+
+static void AnimSwirlingSnowball_Step3(struct Sprite *sprite)
+{
+ s16 tempVar;
+ tempVar = GetBattlerSide(gAnimBankAttacker) != 0 ? 20 : 65516;
+
+ if (sprite->data[5] <= 31)
+ {
+ sprite->pos2.x = Sin(sprite->data[0], tempVar) - sprite->data[3];
+ sprite->pos2.y = Cos(sprite->data[0], 15) - sprite->data[4];
+ sprite->data[0] = (sprite->data[0] + 16) & 0xFF;
+ sprite->data[5] += 1;
+ }
+ else
+ {
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->pos2.y = 0;
+ sprite->pos2.x = 0;
+ sprite->data[4] = 0;
+ sprite->data[3] = 0;
+ sprite->callback = AnimSwirlingSnowball_End;
+ }
+}
+
+static void AnimSwirlingSnowball_End(struct Sprite *sprite)
+{
+ sprite->data[0] = 1;
+ sub_8078CE8(sprite);
+
+ if ((u32)(sprite->pos1.x + sprite->pos2.x + 16) > 272
+ || sprite->pos1.y + sprite->pos2.y > 256
+ || sprite->pos1.y + sprite->pos2.y < -16)
+ DestroyAnimSprite(sprite);
+}
+
+// Moves particles towards the target mon and off the screen. Used to animate
+// the large snowballs in Blizzard and the small snowballs in Powder Snow.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: target x offset
+// arg 3: target y offset
+// arg 4: speed
+// arg 5: wave amplitude
+// arg 6: wave frequency
+// arg 7: multiple targets? (boolean)
+static void AnimMoveParticleBeyondTarget(struct Sprite *sprite)
+{
+ int i;
+ s16 tempDataHolder[8];
+
+ InitAnimSpritePos(sprite, 1);
+
+ sprite->data[0] = gBattleAnimArgs[4];
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[3] = sprite->pos1.y;
+
+ if (!gBattleAnimArgs[7])
+ {
+ sprite->data[2] = GetBattlerSpriteCoord(gAnimBankTarget, 2);
+ sprite->data[4] = GetBattlerSpriteCoord(gAnimBankTarget, 3);
+ }
+ else
+ {
+ SetAverageBattlerPositions(gAnimBankTarget, 1, &sprite->data[2], &sprite->data[4]);
+ }
+
+ if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER)
+ sprite->data[2] -= gBattleAnimArgs[2];
+ else
+ sprite->data[2] += gBattleAnimArgs[2];
+
+ sprite->data[4] += gBattleAnimArgs[3];
+ sub_8078D60(sprite);
+ for (i = 0; i < 8; i++)
+ tempDataHolder[i] = sprite->data[i];
+
+ sprite->data[1] ^= 1;
+ sprite->data[2] ^= 1;
+
+ while (1)
+ {
+ sprite->data[0] = 1;
+ sub_8078CE8(sprite);
+ if ((u32)(sprite->pos1.x + sprite->pos2.x + 16) > 272
+ || sprite->pos1.y + sprite->pos2.y > 160
+ || sprite->pos1.y + sprite->pos2.y < -16)
+ break;
+ }
+
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->pos2.y = 0;
+ sprite->pos2.x = 0;
+
+ for (i = 0; i < 8; i++)
+ sprite->data[i] = tempDataHolder[i];
+
+ sprite->data[5] = gBattleAnimArgs[5];
+ sprite->data[6] = gBattleAnimArgs[6];
+ sprite->callback = AnimWiggleParticleTowardsTarget;
+}
+
+// Moves particles in a sine wave towards the target.
+static void AnimWiggleParticleTowardsTarget(struct Sprite *sprite)
+{
+ sub_8078CE8(sprite);
+ if (sprite->data[0] == 0)
+ sprite->data[0] = 1;
+
+ sprite->pos2.y += Sin(sprite->data[7], sprite->data[5]);
+ sprite->data[7] = (sprite->data[7] + sprite->data[6]) & 0xFF;
+ if (sprite->data[0] == 1)
+ {
+ if ((u32)(sprite->pos1.x + sprite->pos2.x + 16) > 272
+ || sprite->pos1.y + sprite->pos2.y > 160
+ || sprite->pos1.y + sprite->pos2.y < -16)
+ DestroyAnimSprite(sprite);
+ }
+}
+
+// Animates the ice pilar wave used by Icy Wind.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: ??? unknown boolean
+static void AnimWaveFromCenterOfTarget(struct Sprite *sprite)
+{
+ if (sprite->data[0] == 0)
+ {
+ if (gBattleAnimArgs[2] == 0)
+ {
+ sub_8078764(sprite, FALSE);
+ }
+ else
+ {
+ SetAverageBattlerPositions(gAnimBankTarget, 0, &sprite->pos1.x, &sprite->pos1.y);
+
+ if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER)
+ gBattleAnimArgs[0] = -gBattleAnimArgs[0];
+
+ sprite->pos1.x += gBattleAnimArgs[0];
+ sprite->pos1.y += gBattleAnimArgs[1];
+ }
+
+ sprite->data[0]++;
+ }
+ else
+ {
+ if (sprite->animEnded)
+ DestroyAnimSprite(sprite);
+ }
+}
+
+// Animates the fog that swirls around the mon in Mist and Smog.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: change in y pixels per rotation
+// arg 3: duration
+// arg 4: animate on opponent? (boolean)
+// arg 5: ??? unknown boolean
+static void InitSwirlingFogAnim(struct Sprite *sprite)
+{
+ s16 tempVar;
+ u8 battler;
+
+ if (gBattleAnimArgs[4] == 0)
+ {
+ if (gBattleAnimArgs[5] == 0)
+ {
+ InitAnimSpritePos(sprite, 0);
+ }
+ else
+ {
+ SetAverageBattlerPositions(gAnimBankAttacker, 0, &sprite->pos1.x, &sprite->pos1.y);
+ if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER)
+ sprite->pos1.x -= gBattleAnimArgs[0];
+ else
+ sprite->pos1.x += gBattleAnimArgs[0];
+
+ sprite->pos1.y += gBattleAnimArgs[1];
+ }
+
+ battler = gAnimBankAttacker;
+ }
+ else
+ {
+ if (gBattleAnimArgs[5] == 0)
+ {
+ sub_8078764(sprite, FALSE);
+ }
+ else
+ {
+ SetAverageBattlerPositions(gAnimBankTarget, 0, &sprite->pos1.x, &sprite->pos1.y);
+ if (GetBattlerSide(gAnimBankTarget) != B_SIDE_PLAYER)
+ sprite->pos1.x -= gBattleAnimArgs[0];
+ else
+ sprite->pos1.x += gBattleAnimArgs[0];
+
+ sprite->pos1.y += gBattleAnimArgs[1];
+ }
+
+ battler = gAnimBankTarget;
+ }
+
+ sprite->data[7] = battler;
+ if (gBattleAnimArgs[5] == 0 || !IsDoubleBattle())
+ tempVar = 0x20;
+ else
+ tempVar = 0x40;
+
+ sprite->data[6] = tempVar;
+ if (GetBattlerSide(gAnimBankTarget) == B_SIDE_PLAYER)
+ sprite->pos1.y += 8;
+
+ sprite->data[0] = gBattleAnimArgs[3];
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[2] = sprite->pos1.x;
+ sprite->data[3] = sprite->pos1.y;
+ sprite->data[4] = sprite->pos1.y + gBattleAnimArgs[2];
+
+ InitAnimLinearTranslation(sprite);
+
+ sprite->data[5] = 64;
+ sprite->callback = AnimSwirlingFogAnim;
+ AnimSwirlingFogAnim(sprite);
+}
+
+// Animates swirling fog initialized by InitSwirlingFogAnim.
+static void AnimSwirlingFogAnim(struct Sprite *sprite)
+{
+ if (!TranslateAnimLinear(sprite))
+ {
+ sprite->pos2.x += Sin(sprite->data[5], sprite->data[6]);
+ sprite->pos2.y += Cos(sprite->data[5], -6);
+
+ if ((u16)(sprite->data[5] - 64) <= 0x7F)
+ sprite->oam.priority = sub_8079ED4(sprite->data[7]);
+ else
+ sprite->oam.priority = sub_8079ED4(sprite->data[7]) + 1;
+
+ sprite->data[5] = (sprite->data[5] + 3) & 0xFF;
+ }
+ else
+ {
+ DestroyAnimSprite(sprite);
+ }
+}
+
+// Fades mons to black and places foggy overlay in Haze.
+void AnimTask_Haze1(u8 taskId)
+{
+ struct Struct_sub_8078914 subStruct;
+
+ REG_BLDCNT = 0x3F42;
+ REG_BLDALPHA = 0x1000;
+ REG_BG1CNT_BITFIELD.priority = 1;
+ REG_BG1CNT_BITFIELD.screenSize = 0;
+
+ if (!IsContest())
+ REG_BG1CNT_BITFIELD.charBaseBlock = 1;
+
+ gBattle_BG1_X = 0;
+ gBattle_BG1_Y = 0;
+ REG_BG1HOFS = 0;
+ REG_BG1VOFS = 0;
+
+ sub_8078914(&subStruct);
+ DmaFill32Defvars(3, 0, subStruct.field_4, 0x1000);
+ DmaCopy16Defvars(3, &gWeatherFog1Tiles, subStruct.field_0, 0x800);
+ LZDecompressVram(&gBattleAnimFogTilemap, subStruct.field_4);
+ LoadPalette(&gUnknown_083970E8, subStruct.field_8 * 16, 32);
+
+ if (IsContest())
+ sub_80763FC(subStruct.field_8, (u16 *)subStruct.field_4, 0, 0);
+
+ gTasks[taskId].func = AnimTask_Haze2;
+}
+
+static void AnimTask_Haze2(u8 taskId)
+{
+ struct Struct_sub_8078914 subStruct;
+
+ gBattle_BG1_X += 0xFFFF;
+ gBattle_BG1_Y += 0;
+
+ switch (gTasks[taskId].data[12])
+ {
+ case 0:
+ if (++gTasks[taskId].data[10] == 4)
+ {
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].data[9]++;
+ gTasks[taskId].data[11] = gUnknown_083D9D6C[gTasks[taskId].data[9]];
+
+ REG_BLDALPHA = gTasks[taskId].data[11] | ((16 - gTasks[taskId].data[11]) << 8);
+ if (gTasks[taskId].data[11] == 9)
+ {
+ gTasks[taskId].data[12]++;
+ gTasks[taskId].data[11] = 0;
+ }
+ }
+ break;
+ case 1:
+ if (++gTasks[taskId].data[11] == 0x51)
+ {
+ gTasks[taskId].data[11] = 9;
+ gTasks[taskId].data[12]++;
+ }
+ break;
+ case 2:
+ if (++gTasks[taskId].data[10] == 4)
+ {
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].data[11]--;
+
+ REG_BLDALPHA = gTasks[taskId].data[11] | ((16 - gTasks[taskId].data[11]) << 8);
+ if (gTasks[taskId].data[11] == 0)
+ {
+ gTasks[taskId].data[12]++;
+ gTasks[taskId].data[11] = 0;
+ }
+ }
+ break;
+ case 3:
+ sub_8078914(&subStruct);
+ DmaFill32Large(3, 0, subStruct.field_0, 0x2000, 0x1000);
+ DmaClear32(3, subStruct.field_4, 0x800);
+
+ if (!IsContest())
+ REG_BG1CNT_BITFIELD.charBaseBlock = 0;
+
+ gTasks[taskId].data[12]++;
+ // fall through
+ case 4:
+ gBattle_BG1_X = 0;
+ gBattle_BG1_Y = 0;
+ REG_BLDCNT = 0;
+ REG_BLDALPHA = 0;
+ REG_BG1CNT_BITFIELD.priority = 1;
+ DestroyAnimVisualTask(taskId);
+ }
+}
+
+// Throws the ball in Mist Ball.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: targey x offset
+// arg 3: target y offset
+// arg 4: duration
+// arg 5: ??? unknown (seems to vibrate target mon somehow)
+static void AnimThrowMistBall(struct Sprite *sprite)
+{
+ sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3);
+ sprite->callback = TranslateAnimSpriteToTargetMonLocation;
+}
+
+// Displays misty background in Mist Ball.
+void AnimTask_LoadMistTiles(u8 taskId)
+{
+ struct Struct_sub_8078914 subStruct;
+
+ REG_BLDCNT = 0x3F42;
+ REG_BLDALPHA = 0x1000;
+ REG_BG1CNT_BITFIELD.priority = 1;
+ REG_BG1CNT_BITFIELD.screenSize = 0;
+
+ if (!IsContest())
+ REG_BG1CNT_BITFIELD.charBaseBlock = 1;
+
+ gBattle_BG1_X = 0;
+ gBattle_BG1_Y = 0;
+ REG_BG1HOFS = 0;
+ REG_BG1VOFS = 0;
+
+ sub_8078914(&subStruct);
+ DmaFill32Defvars(3, 0, subStruct.field_4, 0x1000);
+ DmaCopy16Defvars(3, &gWeatherFog1Tiles, subStruct.field_0, 0x800);
+ LZDecompressVram(&gBattleAnimFogTilemap, subStruct.field_4);
+ LoadPalette(&gUnknown_083970E8, subStruct.field_8 * 16, 32);
+
+ if (IsContest())
+ sub_80763FC(subStruct.field_8, (u16 *)subStruct.field_4, 0, 0);
+
+ gTasks[taskId].data[15] = -1;
+ gTasks[taskId].func = AnimTask_OverlayFogTiles;
+}
+
+static void AnimTask_OverlayFogTiles(u8 taskId)
+{
+ struct Struct_sub_8078914 subStruct;
+
+ gBattle_BG1_X += gTasks[taskId].data[15];
+ gBattle_BG1_Y += 0;
+
+ switch (gTasks[taskId].data[12])
+ {
+ case 0:
+ gTasks[taskId].data[9] += 1;
+ gTasks[taskId].data[11] = gUnknown_083D9D98[gTasks[taskId].data[9]];
+ REG_BLDALPHA = gTasks[taskId].data[11] | ((17 - gTasks[taskId].data[11]) << 8);
+ if (gTasks[taskId].data[11] == 5)
+ {
+ gTasks[taskId].data[12]++;
+ gTasks[taskId].data[11] = 0;
+ }
+ break;
+ case 1:
+ if (++gTasks[taskId].data[11] == 0x51)
+ {
+ gTasks[taskId].data[11] = 5;
+ gTasks[taskId].data[12]++;
+ }
+ break;
+ case 2:
+ if (++gTasks[taskId].data[10] == 4)
+ {
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].data[11] -= 1;
+ REG_BLDALPHA = gTasks[taskId].data[11] | ((16 - gTasks[taskId].data[11]) << 8);
+ if (gTasks[taskId].data[11] == 0)
+ {
+ gTasks[taskId].data[12]++;
+ gTasks[taskId].data[11] = 0;
+ }
+ }
+ break;
+ case 3:
+ sub_8078914(&subStruct);
+ DmaFill32Large(3, 0, subStruct.field_0, 0x2000, 0x1000);
+ DmaClear32(3, subStruct.field_4, 0x800);
+
+ if (!IsContest())
+ REG_BG1CNT_BITFIELD.charBaseBlock = 0;
+
+ gTasks[taskId].data[12]++;
+ // fall through
+ case 4:
+ gBattle_BG1_X = 0;
+ gBattle_BG1_Y = 0;
+ REG_BLDCNT = 0;
+ REG_BLDALPHA = 0;
+ REG_BG1CNT_BITFIELD.priority = 1;
+ DestroyAnimVisualTask(taskId);
+ }
+}
+
+// Initializes gas clouds in the Poison Gas animation.
+// arg 0: duration
+// arg 1: ? target x offset
+// arg 2: ? target y offset
+// arg 3: ? swirl start x
+// arg 4: ? swirl start y
+// arg 5: ??? unknown
+// arg 6: ??? unknown
+// arg 7: ??? unknown boolean
+static void InitPoisonGasCloudAnim(struct Sprite *sprite)
+{
+ sprite->data[0] = gBattleAnimArgs[0];
+
+ if (GetBattlerSpriteCoord(gAnimBankAttacker, 2) < GetBattlerSpriteCoord(gAnimBankTarget, 2))
+ sprite->data[7] = 0x8000;
+
+ if (!(gBanksBySide[gAnimBankTarget] & 1))
+ {
+ gBattleAnimArgs[1] = -gBattleAnimArgs[1];
+ gBattleAnimArgs[3] = -gBattleAnimArgs[3];
+
+ if ((sprite->data[7] & 0x8000) && !(gBanksBySide[gAnimBankAttacker] & 1))
+ sprite->subpriority = gSprites[GetAnimBattlerSpriteId(1)].subpriority + 1;
+
+ sprite->data[6] = 1;
+ }
+
+ sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3);
+ if (gBattleAnimArgs[7])
+ {
+ sprite->data[1] = sprite->pos1.x + gBattleAnimArgs[1];
+ sprite->data[2] = GetBattlerSpriteCoord(gAnimBankTarget, 2) + gBattleAnimArgs[3];
+ sprite->data[3] = sprite->pos1.y + gBattleAnimArgs[2];
+ sprite->data[4] = GetBattlerSpriteCoord(gAnimBankTarget, 3) + gBattleAnimArgs[4];
+ sprite->data[7] |= sub_8079ED4(gAnimBankTarget) << 8;
+ }
+ else
+ {
+ sprite->data[1] = sprite->pos1.x + gBattleAnimArgs[1];
+ sprite->data[2] = GetBattlerSpriteCoord(gAnimBankTarget, 0) + gBattleAnimArgs[3];
+ sprite->data[3] = sprite->pos1.y + gBattleAnimArgs[2];
+ sprite->data[4] = GetBattlerSpriteCoord(gAnimBankTarget, 1) + gBattleAnimArgs[4];
+ sprite->data[7] |= sub_8079ED4(gAnimBankTarget) << 8;
+ }
+
+ if (IsContest())
+ {
+ sprite->data[6] = 1;
+ sprite->subpriority = 0x80;
+ }
+
+ InitAnimLinearTranslation(sprite);
+ sprite->callback = sub_80D8874;
+}
+
+// Animates the gas clouds towards the target mon in Poison Gas.
+// functionally correct, but there appears to be an unused local variable causing
+// switch case 1 to not match
+#ifdef NONMATCHING
+static void sub_80D8874(struct Sprite *sprite)
+{
+ int value;
+ register s16 value2 asm("r5");
+
+ switch (sprite->data[7] & 0xFF)
+ {
+ case 0:
+ TranslateAnimLinear(sprite);
+ value = gSineTable[sprite->data[5]];
+ sprite->pos2.x += value >> 4;
+ if (sprite->data[6])
+ sprite->data[5] = (sprite->data[5] - 8) & 0xFF;
+ else
+ sprite->data[5] = (sprite->data[5] + 8) & 0xFF;
+
+ if (sprite->data[0] <= 0)
+ {
+ value2 = 80;
+ sprite->data[0] = value2;
+ sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankTarget, 0);
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[2] = sprite->pos1.x;
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->data[3] = sprite->pos1.y;
+ sprite->data[4] = sprite->pos1.y + 29;
+ sprite->data[7]++;
+ if (gMain.inBattle && gBanksBySide[gAnimBankTarget] & 1)
+ sprite->data[5] = 204;
+ else
+ sprite->data[5] = value2;
+
+ sprite->pos2.y = 0;
+ value = gSineTable[sprite->data[5]];
+ sprite->pos2.x = value >> 3;
+ sprite->data[5] = (sprite->data[5] + 2) & 0xFF;
+ InitAnimLinearTranslation(sprite);
+ }
+ break;
+ case 1:
+ TranslateAnimLinear(sprite);
+ value = gSineTable[sprite->data[5]];
+ sprite->pos2.x += value >> 3;
+ sprite->pos2.y += (gSineTable[sprite->data[5] + 0x40] * -3) >> 8;
+ if (gMain.inBattle)
+ {
+ u16 var0 = sprite->data[5] - 0x40;
+ if (var0 <= 0x7F)
+ sprite->oam.priority = sprite->data[7] >> 8;
+ else
+ sprite->oam.priority = (sprite->data[7] >> 8) + 1;
+
+ sprite->data[5] = (sprite->data[5] + 4) & 0xFF;
+ }
+ else
+ {
+ u16 var0 = sprite->data[5] - 0x40;
+ if (var0 <= 0x7F)
+ sprite->subpriority = 128;
+ else
+ sprite->subpriority = 140;
+
+ sprite->data[5] = (sprite->data[5] - 4) & 0xFF;
+ }
+
+ if (sprite->data[0] <= 0)
+ {
+ asm("mov r2, #0"); // unused local variable?
+ sprite->data[0] = 0x300;
+ sprite->data[1] = sprite->pos1.x += sprite->pos2.x;
+ sprite->data[3] = sprite->pos1.y += sprite->pos2.y;
+ sprite->data[4] = sprite->pos1.y + 4;
+ if (gMain.inBattle && gBanksBySide[gAnimBankTarget] & 1)
+ sprite->data[2] = 0x100;
+ else
+ sprite->data[2] = -0x10;
+
+ sprite->data[7]++;
+ sprite->pos2.x = sprite->pos2.y = 0;
+ sub_8078BD4(sprite);
+ }
+ break;
+ case 2:
+ if (TranslateAnimLinear(sprite))
+ {
+ if (sprite->oam.affineMode & 1)
+ {
+ FreeOamMatrix(sprite->oam.matrixNum);
+ sprite->oam.affineMode = ST_OAM_AFFINE_OFF;
+ }
+
+ DestroySprite(sprite);
+ gAnimVisualTaskCount--;
+ }
+ break;
+ }
+}
+#else
+NAKED static void sub_80D8874(struct Sprite *sprite)
+{
+ asm_unified("\tpush {r4-r6,lr}\n"
+ "\tadds r4, r0, 0\n"
+ "\tldrh r0, [r4, 0x3C]\n"
+ "\tmovs r5, 0xFF\n"
+ "\tmovs r1, 0xFF\n"
+ "\tands r1, r0\n"
+ "\tcmp r1, 0x1\n"
+ "\tbeq _080D8968\n"
+ "\tcmp r1, 0x1\n"
+ "\tbgt _080D888E\n"
+ "\tcmp r1, 0\n"
+ "\tbeq _080D8896\n"
+ "\tb _080D8AD0\n"
+ "_080D888E:\n"
+ "\tcmp r1, 0x2\n"
+ "\tbne _080D8894\n"
+ "\tb _080D8A94\n"
+ "_080D8894:\n"
+ "\tb _080D8AD0\n"
+ "_080D8896:\n"
+ "\tadds r0, r4, 0\n"
+ "\tbl TranslateAnimLinear\n"
+ "\tldr r1, _080D88C0 @ =gSineTable\n"
+ "\tmovs r2, 0x38\n"
+ "\tldrsh r0, [r4, r2]\n"
+ "\tlsls r0, 1\n"
+ "\tadds r0, r1\n"
+ "\tmovs r1, 0\n"
+ "\tldrsh r0, [r0, r1]\n"
+ "\tasrs r0, 4\n"
+ "\tldrh r2, [r4, 0x24]\n"
+ "\tadds r0, r2\n"
+ "\tstrh r0, [r4, 0x24]\n"
+ "\tmovs r1, 0x3A\n"
+ "\tldrsh r0, [r4, r1]\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _080D88C4\n"
+ "\tldrh r0, [r4, 0x38]\n"
+ "\tsubs r0, 0x8\n"
+ "\tb _080D88C8\n"
+ "\t.align 2, 0\n"
+ "_080D88C0: .4byte gSineTable\n"
+ "_080D88C4:\n"
+ "\tldrh r0, [r4, 0x38]\n"
+ "\tadds r0, 0x8\n"
+ "_080D88C8:\n"
+ "\tands r0, r5\n"
+ "\tstrh r0, [r4, 0x38]\n"
+ "\tmovs r2, 0x2E\n"
+ "\tldrsh r0, [r4, r2]\n"
+ "\tcmp r0, 0\n"
+ "\tble _080D88D6\n"
+ "\tb _080D8AD0\n"
+ "_080D88D6:\n"
+ "\tmovs r5, 0x50\n"
+ "\tstrh r5, [r4, 0x2E]\n"
+ "\tldr r6, _080D8928 @ =gAnimBankTarget\n"
+ "\tldrb r0, [r6]\n"
+ "\tmovs r1, 0\n"
+ "\tbl GetBattlerSpriteCoord\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r0, 24\n"
+ "\tstrh r0, [r4, 0x20]\n"
+ "\tstrh r0, [r4, 0x30]\n"
+ "\tstrh r0, [r4, 0x32]\n"
+ "\tldrh r0, [r4, 0x26]\n"
+ "\tldrh r1, [r4, 0x22]\n"
+ "\tadds r0, r1\n"
+ "\tstrh r0, [r4, 0x22]\n"
+ "\tstrh r0, [r4, 0x34]\n"
+ "\tadds r0, 0x1D\n"
+ "\tstrh r0, [r4, 0x36]\n"
+ "\tldrh r0, [r4, 0x3C]\n"
+ "\tadds r0, 0x1\n"
+ "\tstrh r0, [r4, 0x3C]\n"
+ "\tldr r0, _080D892C @ =gMain\n"
+ "\tldr r2, _080D8930 @ =0x0000043d\n"
+ "\tadds r0, r2\n"
+ "\tldrb r1, [r0]\n"
+ "\tmovs r0, 0x2\n"
+ "\tands r0, r1\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _080D8938\n"
+ "\tldr r1, _080D8934 @ =gBanksBySide\n"
+ "\tldrb r0, [r6]\n"
+ "\tadds r0, r1\n"
+ "\tldrb r1, [r0]\n"
+ "\tmovs r0, 0x1\n"
+ "\tands r0, r1\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _080D8938\n"
+ "\tmovs r0, 0xCC\n"
+ "\tstrh r0, [r4, 0x38]\n"
+ "\tb _080D893A\n"
+ "\t.align 2, 0\n"
+ "_080D8928: .4byte gAnimBankTarget\n"
+ "_080D892C: .4byte gMain\n"
+ "_080D8930: .4byte 0x0000043d\n"
+ "_080D8934: .4byte gBanksBySide\n"
+ "_080D8938:\n"
+ "\tstrh r5, [r4, 0x38]\n"
+ "_080D893A:\n"
+ "\tmovs r0, 0\n"
+ "\tstrh r0, [r4, 0x26]\n"
+ "\tldr r1, _080D8964 @ =gSineTable\n"
+ "\tmovs r2, 0x38\n"
+ "\tldrsh r0, [r4, r2]\n"
+ "\tlsls r0, 1\n"
+ "\tadds r0, r1\n"
+ "\tmovs r1, 0\n"
+ "\tldrsh r0, [r0, r1]\n"
+ "\tasrs r0, 3\n"
+ "\tstrh r0, [r4, 0x24]\n"
+ "\tldrh r0, [r4, 0x38]\n"
+ "\tadds r0, 0x2\n"
+ "\tmovs r1, 0xFF\n"
+ "\tands r0, r1\n"
+ "\tstrh r0, [r4, 0x38]\n"
+ "\tadds r0, r4, 0\n"
+ "\tbl InitAnimLinearTranslation\n"
+ "\tb _080D8AD0\n"
+ "\t.align 2, 0\n"
+ "_080D8964: .4byte gSineTable\n"
+ "_080D8968:\n"
+ "\tadds r0, r4, 0\n"
+ "\tbl TranslateAnimLinear\n"
+ "\tldr r1, _080D89C8 @ =gSineTable\n"
+ "\tmovs r2, 0x38\n"
+ "\tldrsh r0, [r4, r2]\n"
+ "\tlsls r0, 1\n"
+ "\tadds r0, r1\n"
+ "\tmovs r2, 0\n"
+ "\tldrsh r0, [r0, r2]\n"
+ "\tasrs r0, 3\n"
+ "\tldrh r2, [r4, 0x24]\n"
+ "\tadds r0, r2\n"
+ "\tstrh r0, [r4, 0x24]\n"
+ "\tmovs r2, 0x38\n"
+ "\tldrsh r0, [r4, r2]\n"
+ "\tadds r0, 0x40\n"
+ "\tlsls r0, 1\n"
+ "\tadds r0, r1\n"
+ "\tmovs r2, 0\n"
+ "\tldrsh r1, [r0, r2]\n"
+ "\tlsls r0, r1, 1\n"
+ "\tadds r0, r1\n"
+ "\tnegs r0, r0\n"
+ "\tasrs r0, 8\n"
+ "\tldrh r1, [r4, 0x26]\n"
+ "\tadds r0, r1\n"
+ "\tstrh r0, [r4, 0x26]\n"
+ "\tldr r0, _080D89CC @ =gMain\n"
+ "\tldr r2, _080D89D0 @ =0x0000043d\n"
+ "\tadds r0, r2\n"
+ "\tldrb r1, [r0]\n"
+ "\tmovs r0, 0x2\n"
+ "\tands r0, r1\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _080D89F2\n"
+ "\tldrh r1, [r4, 0x38]\n"
+ "\tadds r0, r1, 0\n"
+ "\tsubs r0, 0x40\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r0, 16\n"
+ "\tadds r3, r1, 0\n"
+ "\tcmp r0, 0x7F\n"
+ "\tbhi _080D89D4\n"
+ "\tldrh r1, [r4, 0x3C]\n"
+ "\tlsls r1, 16\n"
+ "\tasrs r1, 24\n"
+ "\tb _080D89DC\n"
+ "\t.align 2, 0\n"
+ "_080D89C8: .4byte gSineTable\n"
+ "_080D89CC: .4byte gMain\n"
+ "_080D89D0: .4byte 0x0000043d\n"
+ "_080D89D4:\n"
+ "\tldrh r1, [r4, 0x3C]\n"
+ "\tlsls r1, 16\n"
+ "\tasrs r1, 24\n"
+ "\tadds r1, 0x1\n"
+ "_080D89DC:\n"
+ "\tmovs r0, 0x3\n"
+ "\tands r1, r0\n"
+ "\tlsls r1, 2\n"
+ "\tldrb r2, [r4, 0x5]\n"
+ "\tmovs r0, 0xD\n"
+ "\tnegs r0, r0\n"
+ "\tands r0, r2\n"
+ "\torrs r0, r1\n"
+ "\tstrb r0, [r4, 0x5]\n"
+ "\tadds r0, r3, 0x4\n"
+ "\tb _080D8A12\n"
+ "_080D89F2:\n"
+ "\tldrh r0, [r4, 0x38]\n"
+ "\tsubs r0, 0x40\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r0, 16\n"
+ "\tcmp r0, 0x7F\n"
+ "\tbhi _080D8A06\n"
+ "\tadds r1, r4, 0\n"
+ "\tadds r1, 0x43\n"
+ "\tmovs r0, 0x80\n"
+ "\tb _080D8A0C\n"
+ "_080D8A06:\n"
+ "\tadds r1, r4, 0\n"
+ "\tadds r1, 0x43\n"
+ "\tmovs r0, 0x8C\n"
+ "_080D8A0C:\n"
+ "\tstrb r0, [r1]\n"
+ "\tldrh r0, [r4, 0x38]\n"
+ "\tsubs r0, 0x4\n"
+ "_080D8A12:\n"
+ "\tmovs r1, 0xFF\n"
+ "\tands r0, r1\n"
+ "\tstrh r0, [r4, 0x38]\n"
+ "\tmovs r1, 0x2E\n"
+ "\tldrsh r0, [r4, r1]\n"
+ "\tcmp r0, 0\n"
+ "\tbgt _080D8AD0\n"
+ "\tmovs r2, 0\n"
+ "\tmovs r0, 0xC0\n"
+ "\tlsls r0, 2\n"
+ "\tstrh r0, [r4, 0x2E]\n"
+ "\tldrh r0, [r4, 0x24]\n"
+ "\tldrh r1, [r4, 0x20]\n"
+ "\tadds r0, r1\n"
+ "\tstrh r0, [r4, 0x20]\n"
+ "\tstrh r0, [r4, 0x30]\n"
+ "\tldrh r0, [r4, 0x26]\n"
+ "\tldrh r1, [r4, 0x22]\n"
+ "\tadds r0, r1\n"
+ "\tstrh r0, [r4, 0x22]\n"
+ "\tstrh r0, [r4, 0x34]\n"
+ "\tadds r0, 0x4\n"
+ "\tstrh r0, [r4, 0x36]\n"
+ "\tldr r0, _080D8A68 @ =gMain\n"
+ "\tldr r1, _080D8A6C @ =0x0000043d\n"
+ "\tadds r0, r1\n"
+ "\tldrb r1, [r0]\n"
+ "\tmovs r0, 0x2\n"
+ "\tands r0, r1\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _080D8A78\n"
+ "\tldr r1, _080D8A70 @ =gBanksBySide\n"
+ "\tldr r0, _080D8A74 @ =gAnimBankTarget\n"
+ "\tldrb r0, [r0]\n"
+ "\tadds r0, r1\n"
+ "\tldrb r1, [r0]\n"
+ "\tmovs r0, 0x1\n"
+ "\tands r0, r1\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _080D8A78\n"
+ "\tmovs r0, 0x80\n"
+ "\tlsls r0, 1\n"
+ "\tb _080D8A7A\n"
+ "\t.align 2, 0\n"
+ "_080D8A68: .4byte gMain\n"
+ "_080D8A6C: .4byte 0x0000043d\n"
+ "_080D8A70: .4byte gBanksBySide\n"
+ "_080D8A74: .4byte gAnimBankTarget\n"
+ "_080D8A78:\n"
+ "\tldr r0, _080D8A90 @ =0x0000fff0\n"
+ "_080D8A7A:\n"
+ "\tstrh r0, [r4, 0x32]\n"
+ "\tldrh r0, [r4, 0x3C]\n"
+ "\tadds r0, 0x1\n"
+ "\tmovs r1, 0\n"
+ "\tstrh r0, [r4, 0x3C]\n"
+ "\tstrh r1, [r4, 0x26]\n"
+ "\tstrh r1, [r4, 0x24]\n"
+ "\tadds r0, r4, 0\n"
+ "\tbl sub_8078BD4\n"
+ "\tb _080D8AD0\n"
+ "\t.align 2, 0\n"
+ "_080D8A90: .4byte 0x0000fff0\n"
+ "_080D8A94:\n"
+ "\tadds r0, r4, 0\n"
+ "\tbl TranslateAnimLinear\n"
+ "\tlsls r0, 24\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _080D8AD0\n"
+ "\tldrb r0, [r4, 0x1]\n"
+ "\tlsls r0, 30\n"
+ "\tlsrs r0, 30\n"
+ "\tmovs r1, 0x1\n"
+ "\tands r0, r1\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _080D8AC2\n"
+ "\tldrb r0, [r4, 0x3]\n"
+ "\tlsls r0, 26\n"
+ "\tlsrs r0, 27\n"
+ "\tbl FreeOamMatrix\n"
+ "\tldrb r1, [r4, 0x1]\n"
+ "\tmovs r0, 0x4\n"
+ "\tnegs r0, r0\n"
+ "\tands r0, r1\n"
+ "\tstrb r0, [r4, 0x1]\n"
+ "_080D8AC2:\n"
+ "\tadds r0, r4, 0\n"
+ "\tbl DestroySprite\n"
+ "\tldr r1, _080D8AD8 @ =gAnimVisualTaskCount\n"
+ "\tldrb r0, [r1]\n"
+ "\tsubs r0, 0x1\n"
+ "\tstrb r0, [r1]\n"
+ "_080D8AD0:\n"
+ "\tpop {r4-r6}\n"
+ "\tpop {r0}\n"
+ "\tbx r0\n"
+ "\t.align 2, 0\n"
+ "_080D8AD8: .4byte gAnimVisualTaskCount");
+}
+#endif // NONMATCHING
+
+// Creates Hail.
+void AnimTask_Hail1(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ task->func = AnimTask_Hail2;
+}
+
+static void AnimTask_Hail2(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+ switch (task->data[0])
+ {
+ case 0:
+ if (++task->data[4] > 2)
+ {
+ task->data[4] = 0;
+ task->data[5] = 0;
+ task->data[2] = 0;
+ task->data[0]++;
+ }
+ break;
+ case 1:
+ if (task->data[5] == 0)
+ {
+ if (sub_80D8BA8(task->data[3], task->data[2], taskId, 1))
+ task->data[1]++;
+
+ if (++task->data[2] == 3)
+ {
+ if (++task->data[3] == 10)
+ task->data[0]++;
+ else
+ task->data[0]--;
+ }
+ else
+ {
+ task->data[5] = 1;
+ }
+
+ }
+ else
+ {
+ task->data[5]--;
+ }
+ break;
+ case 2:
+ if (task->data[1] == 0)
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+
+/*
+// Something to do with Hail.
+// possibly equivalent, possibly not
+bool8 sub_80D8BA8(u8 a1, u8 a2, u8 a3, u8 a4)//(u8 spriteId, u8 taskId, u8 a3)//(u8 taskId)
+{
+ //
+ //struct Task *task = &gTasks[a2];
+ //u16 i, j;
+ //task->data[3]++;
+ //u8 r5bank = ;
+
+ //const struct SpriteTemplate *spriteTemplate;
+ u8 spriteId;
+
+ s16 r6, r7;
+
+ u32 tempA, tempB; // u32? s16? u16? u8? int?
+
+ //u8 r6, r7;
+
+ tempA = a3 + 0;
+ tempB = 0;
+
+ // is that gunknown a tempvar?
+
+ if (gUnknown_083D9DC4[a1][3] != 2
+ || IsAnimBankSpriteVisible(GetBattlerAtPosition(gUnknown_083D9DC4[a1][2])))
+ {
+ //return TRUE;
+ tempB = 1;
+
+ r7 = GetBattlerSpriteCoord(GetBattlerAtPosition(gUnknown_083D9DC4[a1][2]), 2);
+ r6 = GetBattlerSpriteCoord(GetBattlerAtPosition(gUnknown_083D9DC4[a1][2]), 3);
+
+ switch (gUnknown_083D9DC4[a1][3])
+ {
+ case 0:
+ //
+ r7 -= sub_807A100(GetBattlerAtPosition(gUnknown_083D9DC4[a1][2]), 1) / 6;
+ r6 -= sub_807A100(GetBattlerAtPosition(gUnknown_083D9DC4[a1][2]), 0) / 6;
+ break;
+ case 1:
+ //
+ r7 += sub_807A100(GetBattlerAtPosition(gUnknown_083D9DC4[a1][2]), 1) / 6;
+ r6 += sub_807A100(GetBattlerAtPosition(gUnknown_083D9DC4[a1][2]), 0) / 6;
+ }
+ }
+
+ else
+ {
+ // _94
+ r7 = gUnknown_083D9DC4[a1][0];
+ r6 = gUnknown_083D9DC4[a1][1];
+ }
+
+ spriteId = CreateSprite(&HailSpriteTemplate, r7 - r6, -0x8, 0x12);
+
+ if (spriteId != 0x40)
+ {
+ //
+ StartSpriteAffineAnim(&gSprites[spriteId], a2);
+
+ gSprites[spriteId].data[0] = tempB;
+ gSprites[spriteId].data[3] = r7;
+ gSprites[spriteId].data[4] = r6;
+
+ gSprites[spriteId].data[5] = a2;
+ gSprites[spriteId].data[6] = tempA;
+ gSprites[spriteId].data[7] = a4;
+
+ return TRUE;
+ }
+
+ return FALSE;
+
+}
+//*/
+
+//*
+NAKED bool8 sub_80D8BA8(u8 a1, u8 a2, u8 a3, u8 a4)
+{
+ asm_unified("\tpush {r4-r7,lr}\n"
+ "\tmov r7, r10\n"
+ "\tmov r6, r9\n"
+ "\tmov r5, r8\n"
+ "\tpush {r5-r7}\n"
+ "\tsub sp, 0x8\n"
+ "\tlsls r0, 24\n"
+ "\tlsls r1, 24\n"
+ "\tlsrs r1, 24\n"
+ "\tmov r9, r1\n"
+ "\tlsls r2, 24\n"
+ "\tlsrs r2, 24\n"
+ "\tstr r2, [sp]\n"
+ "\tlsls r3, 24\n"
+ "\tlsrs r3, 24\n"
+ "\tmov r10, r3\n"
+ "\tmovs r1, 0\n"
+ "\tstr r1, [sp, 0x4]\n"
+ "\tldr r1, _080D8C20 @ =gUnknown_083D9DC4\n"
+ "\tlsrs r0, 22\n"
+ "\tadds r4, r0, r1\n"
+ "\tldrb r0, [r4, 0x3]\n"
+ "\tlsls r0, 24\n"
+ "\tasrs r0, 28\n"
+ "\tmov r8, r0\n"
+ "\tcmp r0, 0x2\n"
+ "\tbeq _080D8C94\n"
+ "\tldrh r0, [r4, 0x2]\n"
+ "\tlsls r0, 20\n"
+ "\tlsrs r0, 24\n"
+ "\tbl GetBattlerAtPosition\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r5, r0, 24\n"
+ "\tadds r0, r5, 0\n"
+ "\tbl IsAnimBankSpriteVisible\n"
+ "\tlsls r0, 24\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _080D8C94\n"
+ "\tmovs r0, 0x1\n"
+ "\tstr r0, [sp, 0x4]\n"
+ "\tadds r0, r5, 0\n"
+ "\tmovs r1, 0x2\n"
+ "\tbl GetBattlerSpriteCoord\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r7, r0, 24\n"
+ "\tadds r0, r5, 0\n"
+ "\tmovs r1, 0x3\n"
+ "\tbl GetBattlerSpriteCoord\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r6, r0, 24\n"
+ "\tmov r1, r8\n"
+ "\tcmp r1, 0\n"
+ "\tbeq _080D8C24\n"
+ "\tcmp r1, 0x1\n"
+ "\tbeq _080D8C5A\n"
+ "\tb _080D8CA6\n"
+ "\t.align 2, 0\n"
+ "_080D8C20: .4byte gUnknown_083D9DC4\n"
+ "_080D8C24:\n"
+ "\tadds r0, r5, 0\n"
+ "\tmovs r1, 0x1\n"
+ "\tbl sub_807A100\n"
+ "\tlsls r0, 16\n"
+ "\tasrs r0, 16\n"
+ "\tmovs r1, 0x6\n"
+ "\tbl __divsi3\n"
+ "\tlsls r1, r7, 16\n"
+ "\tasrs r1, 16\n"
+ "\tsubs r1, r0\n"
+ "\tlsls r1, 16\n"
+ "\tlsrs r7, r1, 16\n"
+ "\tadds r0, r5, 0\n"
+ "\tmovs r1, 0\n"
+ "\tbl sub_807A100\n"
+ "\tlsls r0, 16\n"
+ "\tasrs r0, 16\n"
+ "\tmovs r1, 0x6\n"
+ "\tbl __divsi3\n"
+ "\tlsls r1, r6, 16\n"
+ "\tasrs r1, 16\n"
+ "\tsubs r1, r0\n"
+ "\tb _080D8C8E\n"
+ "_080D8C5A:\n"
+ "\tadds r0, r5, 0\n"
+ "\tmovs r1, 0x1\n"
+ "\tbl sub_807A100\n"
+ "\tlsls r0, 16\n"
+ "\tasrs r0, 16\n"
+ "\tmovs r1, 0x6\n"
+ "\tbl __divsi3\n"
+ "\tlsls r1, r7, 16\n"
+ "\tasrs r1, 16\n"
+ "\tadds r1, r0\n"
+ "\tlsls r1, 16\n"
+ "\tlsrs r7, r1, 16\n"
+ "\tadds r0, r5, 0\n"
+ "\tmovs r1, 0\n"
+ "\tbl sub_807A100\n"
+ "\tlsls r0, 16\n"
+ "\tasrs r0, 16\n"
+ "\tmovs r1, 0x6\n"
+ "\tbl __divsi3\n"
+ "\tlsls r1, r6, 16\n"
+ "\tasrs r1, 16\n"
+ "\tadds r1, r0\n"
+ "_080D8C8E:\n"
+ "\tlsls r1, 16\n"
+ "\tlsrs r6, r1, 16\n"
+ "\tb _080D8CA6\n"
+ "_080D8C94:\n"
+ "\tldrh r0, [r4]\n"
+ "\tlsls r0, 22\n"
+ "\tasrs r0, 6\n"
+ "\tlsrs r7, r0, 16\n"
+ "\tldr r0, [r4]\n"
+ "\tlsls r0, 12\n"
+ "\tasrs r0, 22\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r6, r0, 16\n"
+ "_080D8CA6:\n"
+ "\tlsls r0, r6, 16\n"
+ "\tasrs r0, 16\n"
+ "\tadds r0, 0x8\n"
+ "\tlsrs r1, r0, 31\n"
+ "\tadds r0, r1\n"
+ "\tasrs r0, 1\n"
+ "\tlsls r1, r7, 16\n"
+ "\tasrs r1, 16\n"
+ "\tsubs r1, r0\n"
+ "\tldr r0, _080D8D00 @ =HailSpriteTemplate\n"
+ "\tlsls r1, 16\n"
+ "\tasrs r1, 16\n"
+ "\tmovs r2, 0x8\n"
+ "\tnegs r2, r2\n"
+ "\tmovs r3, 0x12\n"
+ "\tbl CreateSprite\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r5, r0, 24\n"
+ "\tcmp r5, 0x40\n"
+ "\tbeq _080D8D08\n"
+ "\tlsls r4, r5, 4\n"
+ "\tadds r4, r5\n"
+ "\tlsls r4, 2\n"
+ "\tldr r0, _080D8D04 @ =gSprites\n"
+ "\tadds r4, r0\n"
+ "\tadds r0, r4, 0\n"
+ "\tmov r1, r9\n"
+ "\tbl StartSpriteAffineAnim\n"
+ "\tmov r0, sp\n"
+ "\tldrh r0, [r0, 0x4]\n"
+ "\tstrh r0, [r4, 0x2E]\n"
+ "\tstrh r7, [r4, 0x34]\n"
+ "\tstrh r6, [r4, 0x36]\n"
+ "\tmov r1, r9\n"
+ "\tstrh r1, [r4, 0x38]\n"
+ "\tmov r0, sp\n"
+ "\tldrh r0, [r0]\n"
+ "\tstrh r0, [r4, 0x3A]\n"
+ "\tmov r1, r10\n"
+ "\tstrh r1, [r4, 0x3C]\n"
+ "\tmovs r0, 0x1\n"
+ "\tb _080D8D0A\n"
+ "\t.align 2, 0\n"
+ "_080D8D00: .4byte gHailSpriteTemplate\n"
+ "_080D8D04: .4byte gSprites\n"
+ "_080D8D08:\n"
+ "\tmovs r0, 0\n"
+ "_080D8D0A:\n"
+ "\tadd sp, 0x8\n"
+ "\tpop {r3-r5}\n"
+ "\tmov r8, r3\n"
+ "\tmov r9, r4\n"
+ "\tmov r10, r5\n"
+ "\tpop {r4-r7}\n"
+ "\tpop {r1}\n"
+ "\tbx r1");
+}
+//*/
+
+static void AnimHailBegin(struct Sprite *sprite)
+{
+ u8 spriteId;
+
+ sprite->pos1.x += 4;
+ sprite->pos1.y += 8;
+
+ if (sprite->pos1.x < sprite->data[3] && sprite->pos1.y < sprite->data[4])
+ return;
+
+ if (sprite->data[0] == 1 && sprite->data[5] == 0)
+ {
+ spriteId = CreateSprite(&gLargeIceEffectParticleSpriteTemplate,
+ sprite->data[3], sprite->data[4], sprite->subpriority);
+
+ sprite->data[0] = spriteId;
+ if (spriteId != 64)
+ {
+ gSprites[sprite->data[0]].callback = AnimHailContinue;
+ gSprites[sprite->data[0]].data[6] = sprite->data[6];
+ gSprites[sprite->data[0]].data[7] = sprite->data[7];
+ }
+
+ FreeOamMatrix(sprite->oam.matrixNum);
+ DestroySprite(sprite);
+ }
+ else
+ {
+ gTasks[sprite->data[6]].data[sprite->data[7]]--;
+ FreeOamMatrix(sprite->oam.matrixNum);
+ DestroySprite(sprite);
+ }
+}
+
+static void AnimHailContinue(struct Sprite *sprite)
+{
+ if (++sprite->data[0] == 20)
+ {
+ gTasks[sprite->data[6]].data[sprite->data[7]]--;
+ FreeOamMatrix(sprite->oam.matrixNum);
+ DestroySprite(sprite);
+ }
+}
+
+// Initializes the animation for Ice Ball.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: target x offset
+// arg 3: target y offset
+// arg 4: duration
+// arg 5: arc height (negative)
+static void InitIceBallAnim(struct Sprite *sprite)
+{
+ u8 animNum = gAnimDisableStructPtr->rolloutTimer2 - gAnimDisableStructPtr->rolloutTimer1 - 1;
+
+ if (animNum > 4)
+ animNum = 4;
+
+ StartSpriteAffineAnim(sprite, animNum);
+ InitAnimSpritePos(sprite, 1);
+
+ sprite->data[0] = gBattleAnimArgs[4];
+
+ if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER)
+ gBattleAnimArgs[2] = -gBattleAnimArgs[2];
+
+ sprite->data[2] = GetBattlerSpriteCoord(gAnimBankTarget, 2) + gBattleAnimArgs[2];
+ sprite->data[4] = GetBattlerSpriteCoord(gAnimBankTarget, 3) + gBattleAnimArgs[3];
+ sprite->data[5] = gBattleAnimArgs[5];
+
+ InitAnimArcTranslation(sprite);
+
+ sprite->callback = AnimThrowIceBall;
+}
+
+// Throws the ball of ice in Ice Ball.
+static void AnimThrowIceBall(struct Sprite *sprite)
+{
+ if (!TranslateAnimArc(sprite))
+ return;
+
+ StartSpriteAnim(sprite, 1);
+ sprite->callback = sub_8078600;
+ StoreSpriteCallbackInData(sprite, DestroyAnimSprite);
+}
+
+// Initializes the particles that scatter at the end of the Ice Ball animation.
+static void InitIceBallParticle(struct Sprite *sprite)
+{
+ s16 randA, randB;
+
+ sprite->oam.tileNum += 8;
+ sub_8078764(sprite, TRUE);
+
+ randA = (Random() & 0xFF) + 256;
+ randB = Random() & 0x1FF;
+
+ if (randB > 0xFF)
+ randB = 256 - randB;
+
+ sprite->data[1] = randA;
+ sprite->data[2] = randB;
+ sprite->callback = AnimIceBallParticle;
+}
+
+// Animates the particles created by InitIceBallParticle.
+static void AnimIceBallParticle(struct Sprite *sprite)
+{
+ sprite->data[3] += sprite->data[1];
+ sprite->data[4] += sprite->data[2];
+
+ if (sprite->data[1] & 1)
+ sprite->pos2.x = -(sprite->data[3] >> 8);
+ else
+ sprite->pos2.x = sprite->data[3] >> 8;
+
+ sprite->pos2.y = sprite->data[4] >> 8;
+
+ if (++sprite->data[0] == 21)
+ DestroyAnimSprite(sprite);
+}
+
+// Counter for Ice Ball.
+void AnimTask_CountIceBallThrows(u8 taskId)
+{
+ u8 arg = gBattleAnimArgs[0];
+
+ gBattleAnimArgs[arg] = gAnimDisableStructPtr->rolloutTimer2 - gAnimDisableStructPtr->rolloutTimer1 - 1;
+ DestroyAnimVisualTask(taskId);
+}
diff --git a/src/battle/anim/normal.c b/src/battle/anim/normal.c
index 7564c529c..54524f2ef 100644
--- a/src/battle/anim/normal.c
+++ b/src/battle/anim/normal.c
@@ -69,8 +69,8 @@ static void sub_80E260C(void);
static void sub_80E255C(struct Sprite *sprite);
static void sub_80E2710(u8 taskId);
static void sub_80E29FC(struct Sprite *sprite);
-static void sub_80E2C8C(u8 taskId, u32 selectedPalettes);
-static void sub_80E2CD0(u8 taskId);
+static void AnimTask_BlendSpriteColor_Step1(u8 taskId, u32 selectedPalettes);
+static void AnimTask_BlendSpriteColor_Step2(u8 taskId);
static void sub_80E2DB8(u8 taskId);
static void sub_80E2E10(u8 taskId);
static void sub_80E2EE8(struct Sprite *sprite);
@@ -854,7 +854,7 @@ static void sub_80E27A0(struct Sprite *sprite)
if (gBattleAnimArgs[2] == 0)
InitAnimSpritePos(sprite, 1);
else
- sub_8078764(sprite, 1);
+ sub_8078764(sprite, TRUE);
sprite->callback = sub_80785E4;
StoreSpriteCallbackInData(sprite, DestroyAnimSprite);
@@ -866,7 +866,7 @@ static void sub_80E27E8(struct Sprite *sprite)
if (gBattleAnimArgs[2] == 0)
InitAnimSpritePos(sprite, 1);
else
- sub_8078764(sprite, 1);
+ sub_8078764(sprite, TRUE);
sprite->data[0] = gBattleAnimArgs[4];
sprite->callback = sub_80785E4;
@@ -890,7 +890,7 @@ static void sub_80E2870(struct Sprite *sprite)
if (gBattleAnimArgs[0] == 0)
InitAnimSpritePos(sprite, 0);
else
- sub_8078764(sprite, 0);
+ sub_8078764(sprite, FALSE);
sprite->pos2.x += (Random() % 48) - 24;
sprite->pos2.y += (Random() % 24) - 12;
@@ -916,7 +916,7 @@ static void sub_80E2978(struct Sprite *sprite)
if (gBattleAnimArgs[2] == 0)
InitAnimSpritePos(sprite, 1);
else
- sub_8078764(sprite, 1);
+ sub_8078764(sprite, TRUE);
sprite->data[0] = gBattleAnimArgs[3];
StoreSpriteCallbackInData(sprite, DestroyAnimSprite);
@@ -929,7 +929,7 @@ static void sub_80E29C0(struct Sprite *sprite)
if (gBattleAnimArgs[2] == 0)
InitAnimSpritePos(sprite, 1);
else
- sub_8078764(sprite, 1);
+ sub_8078764(sprite, TRUE);
sprite->callback = sub_80E29FC;
}
@@ -950,7 +950,7 @@ void sub_80E2A38(u8 taskId)
(gBattleAnimArgs[0] >> 9) & 1,
(gBattleAnimArgs[0] >> 10) & 1);
- sub_80E2C8C(taskId, selectedPalettes);
+ AnimTask_BlendSpriteColor_Step1(taskId, selectedPalettes);
}
void sub_80E2A7C(u8 taskId)
@@ -1001,7 +1001,7 @@ void sub_80E2A7C(u8 taskId)
}
}
- sub_80E2C8C(taskId, selectedPalettes);
+ AnimTask_BlendSpriteColor_Step1(taskId, selectedPalettes);
}
void sub_80E2B74(u8 taskId)
@@ -1042,16 +1042,22 @@ void sub_80E2B74(u8 taskId)
break;
}
- sub_80E2C8C(taskId, selectedPalettes);
+ AnimTask_BlendSpriteColor_Step1(taskId, selectedPalettes);
}
-void sub_80E2C60(u8 taskId)
+// Used to add a color mask to a Sprite.
+// arg 0: spriteId
+// arg 1: ??? unknown
+// arg 2: ??? unknown
+// arg 3: coefficient
+// arg 4: color code
+void AnimTask_BlendSpriteColor(u8 taskId)
{
u8 paletteIndex = IndexOfSpritePaletteTag(gBattleAnimArgs[0]);
- sub_80E2C8C(taskId, 1 << (paletteIndex + 16));
+ AnimTask_BlendSpriteColor_Step1(taskId, 1 << (paletteIndex + 16));
}
-static void sub_80E2C8C(u8 taskId, u32 selectedPalettes)
+static void AnimTask_BlendSpriteColor_Step1(u8 taskId, u32 selectedPalettes)
{
gTasks[taskId].data[0] = selectedPalettes;
gTasks[taskId].data[1] = selectedPalettes >> 16;
@@ -1060,11 +1066,11 @@ static void sub_80E2C8C(u8 taskId, u32 selectedPalettes)
gTasks[taskId].data[4] = gBattleAnimArgs[3];
gTasks[taskId].data[5] = gBattleAnimArgs[4];
gTasks[taskId].data[10] = gBattleAnimArgs[2];
- gTasks[taskId].func = sub_80E2CD0;
+ gTasks[taskId].func = AnimTask_BlendSpriteColor_Step2;
gTasks[taskId].func(taskId);
}
-static void sub_80E2CD0(u8 taskId)
+static void AnimTask_BlendSpriteColor_Step2(u8 taskId)
{
u32 selectedPalettes;
u16 singlePaletteMask = 0;
@@ -1577,7 +1583,7 @@ void sub_80E3A08(u8 taskId)
for (j = 5; j != 0; j--)
gBattleAnimArgs[j] = gBattleAnimArgs[j - 1];
- sub_80E2C8C(taskId, selectedPalettes);
+ AnimTask_BlendSpriteColor_Step1(taskId, selectedPalettes);
}
void sub_80E3A58(u8 taskId)
diff --git a/src/battle/anim/orbit.c b/src/battle/anim/orbit.c
index f938a2707..5d82b2842 100644
--- a/src/battle/anim/orbit.c
+++ b/src/battle/anim/orbit.c
@@ -89,7 +89,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6440 =
void sub_80CABF8(struct Sprite* sprite)
{
- sub_8078764(sprite, 1);
+ sub_8078764(sprite, TRUE);
StartSpriteAnim(sprite, gBattleAnimArgs[4]);
if (gBattleAnimArgs[4] == 1)
{
diff --git a/src/battle/anim/orbs.c b/src/battle/anim/orbs.c
index b97f0c246..d4886d1f8 100644
--- a/src/battle/anim/orbs.c
+++ b/src/battle/anim/orbs.c
@@ -267,7 +267,7 @@ void sub_80CA928(u8 taskId)
void sub_80CA9A8(struct Sprite* sprite)
{
- sub_8078764(sprite, 1);
+ sub_8078764(sprite, TRUE);
sprite->data[0] = gBattleAnimArgs[3];
sprite->data[2] = GetBattlerSpriteCoord(gAnimBankAttacker, 2);
sprite->data[4] = GetBattlerSpriteCoord(gAnimBankAttacker, 3);
diff --git a/src/battle/anim/psychic.c b/src/battle/anim/psychic.c
index 704fa0306..ef263b971 100644
--- a/src/battle/anim/psychic.c
+++ b/src/battle/anim/psychic.c
@@ -562,9 +562,9 @@ void sub_80DBA4C(struct Sprite *sprite)
if (sprite->data[0] == 0)
{
int arg3 = gBattleAnimArgs[3];
- u8 var0 = 0;
+ bool8 var0 = FALSE;
if (arg3 == 0)
- var0 = 1;
+ var0 = TRUE;
if (!IsContest() && IsDoubleBattle())
{
diff --git a/src/battle/anim/rock.c b/src/battle/anim/rock.c
index 7738e4d0c..fa53df5b8 100644
--- a/src/battle/anim/rock.c
+++ b/src/battle/anim/rock.c
@@ -28,8 +28,8 @@ extern void AnimMoveTwisterParticle(struct Sprite *sprite);
void sub_80DCE9C(struct Sprite *sprite);
void sub_80DCF60(struct Sprite *sprite);
void sub_80DCFE4(struct Sprite *sprite);
-void sub_80DD3AC(struct Sprite *sprite);
-void sub_80DD490(struct Sprite *sprite);
+void AnimDirtParticleAcrossScreen(struct Sprite *sprite);
+void AnimRaiseSprite(struct Sprite *sprite);
void sub_80DD87C(struct Sprite *sprite);
void sub_80DD8E8(struct Sprite *sprite);
void sub_80DD978(struct Sprite *sprite);
@@ -136,7 +136,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83DACD0 =
.callback = sub_80DCFE4,
};
-const struct SpriteTemplate gBattleAnimSpriteTemplate_83DACE8 =
+const struct SpriteTemplate gFlyingDirtSpriteTemplate =
{
.tileTag = 10261,
.paletteTag = 10261,
@@ -144,7 +144,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83DACE8 =
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80DD3AC,
+ .callback = AnimDirtParticleAcrossScreen,
};
const struct Subsprite gSubspriteTable_83DAD00[] =
@@ -212,7 +212,7 @@ const union AnimCmd *const gSpriteAnimTable_83DAD58[] =
gSpriteAnim_83DAD40,
};
-const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAD60 =
+const struct SpriteTemplate gAncientPowerRockSpriteTemplate =
{
.tileTag = 10058,
.paletteTag = 10058,
@@ -220,7 +220,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAD60 =
.anims = gSpriteAnimTable_83DAD48,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80DD490,
+ .callback = AnimRaiseSprite,
};
const struct SpriteTemplate gSpriteTemplate_83DAD78 =
@@ -387,7 +387,7 @@ void sub_80DCFE4(struct Sprite *sprite)
if (gBattleAnimArgs[6] == 0)
InitAnimSpritePos(sprite, 0);
else
- sub_8078764(sprite, 0);
+ sub_8078764(sprite, FALSE);
sprite->data[0] = gBattleAnimArgs[3];
sprite->data[1] = gBattleAnimArgs[2];
@@ -510,7 +510,13 @@ static void sub_80DD190(u8 taskId)
}
}
-void sub_80DD3AC(struct Sprite *sprite)
+// Animates the sprites that fly diagonally across the screen
+// in Sandstorm and Heat Wave.
+// arg 0: initial y pixel offset
+// arg 1: projectile speed
+// arg 2: y pixel drop
+// arg 3: ??? unknown (possibly a color bit)
+void AnimDirtParticleAcrossScreen(struct Sprite *sprite)
{
if (sprite->data[0] == 0)
{
@@ -555,7 +561,13 @@ void sub_80DD3AC(struct Sprite *sprite)
}
}
-void sub_80DD490(struct Sprite *sprite)
+// Animates the rising rocks in Ancient Power.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: terminal y offset
+// arg 3: duration
+// arg 4: sprite size [1,5]
+void AnimRaiseSprite(struct Sprite *sprite)
{
StartSpriteAnim(sprite, gBattleAnimArgs[4]);
InitAnimSpritePos(sprite, 0);
diff --git a/src/battle/anim/splash.c b/src/battle/anim/splash.c
index c01748953..7e3d08554 100644
--- a/src/battle/anim/splash.c
+++ b/src/battle/anim/splash.c
@@ -8,7 +8,7 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
-static void sub_80D07AC(u8 taskId);
+static void AnimTask_SplashStep(u8 taskId);
// splash (splash effect of hopping up and down)
// Used in Splash, Mud Sport, and Sketch.
@@ -21,7 +21,10 @@ const union AffineAnimCmd gSpriteAffineAnim_83D76F4[] =
AFFINEANIMCMD_END,
};
-void sub_80D074C(u8 taskId)
+// 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)
@@ -37,11 +40,11 @@ void sub_80D074C(u8 taskId)
task->data[3] = 0;
task->data[4] = 0;
sub_80798F4(task, spriteId, &gSpriteAffineAnim_83D76F4);
- task->func = sub_80D07AC;
+ task->func = AnimTask_SplashStep;
}
}
-void sub_80D07AC(u8 taskId)
+void AnimTask_SplashStep(u8 taskId)
{
struct Task* task = &gTasks[taskId];
switch (task->data[1])
diff --git a/src/battle/anim/tendrils.c b/src/battle/anim/tendrils.c
index 55e2c21bb..cee45b648 100644
--- a/src/battle/anim/tendrils.c
+++ b/src/battle/anim/tendrils.c
@@ -70,7 +70,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D65A0 =
void sub_80CB25C(struct Sprite* sprite)
{
- sub_8078764(sprite, 0);
+ sub_8078764(sprite, FALSE);
sprite->affineAnimPaused = 1;
StartSpriteAffineAnim(sprite, gBattleAnimArgs[2]);
sprite->data[6] = gBattleAnimArgs[2];
diff --git a/src/battle/anim/tile.c b/src/battle/anim/tile.c
index 12cfd53b3..0442321d6 100644
--- a/src/battle/anim/tile.c
+++ b/src/battle/anim/tile.c
@@ -157,7 +157,7 @@ void sub_80CE108(u8 taskId)
void sub_80CE17C(struct Sprite* sprite)
{
- sub_8078764(sprite, 0);
+ sub_8078764(sprite, FALSE);
sprite->animPaused = 1;
sprite->data[0] = gBattleAnimArgs[2];
sprite->callback = sub_80CE1AC;
diff --git a/src/battle/anim/water.c b/src/battle/anim/water.c
index 1c354d916..487624224 100644
--- a/src/battle/anim/water.c
+++ b/src/battle/anim/water.c
@@ -192,7 +192,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9438 =
void sub_80D37FC(struct Sprite *sprite)
{
- sub_8078764(sprite, 1);
+ sub_8078764(sprite, TRUE);
sprite->data[0] = gBattleAnimArgs[4];
sprite->data[2] = sprite->pos1.x + gBattleAnimArgs[2];
@@ -206,7 +206,7 @@ void sub_80D3838(struct Sprite *sprite)
{
if (gBattleAnimArgs[3] != 0)
{
- sub_8078764(sprite, 1);
+ sub_8078764(sprite, TRUE);
}
else
{
diff --git a/src/battle/anim/wisp_fire.c b/src/battle/anim/wisp_fire.c
index c96a3a86f..a8ced992a 100644
--- a/src/battle/anim/wisp_fire.c
+++ b/src/battle/anim/wisp_fire.c
@@ -186,7 +186,10 @@ static void sub_80D5E4C(u8 taskId)
}
}
-void sub_80D6080(u8 taskId)
+// Used to add a color mask to the battle interface / HUD in Heat Wave.
+// arg 0: opacity
+// arg 1: color code
+void AnimTask_BlendInterfaceColor(u8 taskId)
{
struct Struct_sub_8078914 unk;
sub_8078914(&unk);
diff --git a/src/battle/battle_4.c b/src/battle/battle_4.c
index 54cacd0cb..39ba0318b 100644
--- a/src/battle/battle_4.c
+++ b/src/battle/battle_4.c
@@ -13996,153 +13996,30 @@ static void atkC0_recoverbasedonsunlight(void)
}
}
-NAKED
static void atkC1_hiddenpowercalc(void)
{
- asm(".syntax unified\n\
-push {r4-r7,lr}\n\
- mov r7, r10\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5-r7}\n\
- ldr r2, _08029894 @ =gBattleMons\n\
- ldr r0, _08029898 @ =gBankAttacker\n\
- ldrb r1, [r0]\n\
- movs r0, 0x58\n\
- adds r4, r1, 0\n\
- muls r4, r0\n\
- adds r4, r2\n\
- ldrb r0, [r4, 0x14]\n\
- mov r10, r0\n\
- mov r7, r10\n\
- lsls r7, 27\n\
- adds r0, r7, 0\n\
- lsrs r0, 27\n\
- mov r10, r0\n\
- movs r1, 0x2\n\
- mov r2, r10\n\
- ands r2, r1\n\
- asrs r2, 1\n\
- ldrh r7, [r4, 0x14]\n\
- mov r9, r7\n\
- mov r0, r9\n\
- lsls r0, 22\n\
- mov r9, r0\n\
- lsrs r3, r0, 27\n\
- adds r0, r1, 0\n\
- ands r0, r3\n\
- orrs r2, r0\n\
- ldrb r7, [r4, 0x15]\n\
- mov r8, r7\n\
- mov r0, r8\n\
- lsls r0, 25\n\
- mov r8, r0\n\
- lsrs r3, r0, 27\n\
- adds r0, r1, 0\n\
- ands r0, r3\n\
- lsls r0, 1\n\
- orrs r2, r0\n\
- ldr r6, [r4, 0x14]\n\
- lsls r6, 12\n\
- lsrs r3, r6, 27\n\
- adds r0, r1, 0\n\
- ands r0, r3\n\
- lsls r0, 2\n\
- orrs r2, r0\n\
- ldrh r5, [r4, 0x16]\n\
- lsls r5, 23\n\
- lsrs r3, r5, 27\n\
- adds r0, r1, 0\n\
- ands r0, r3\n\
- lsls r0, 3\n\
- orrs r2, r0\n\
- ldrb r3, [r4, 0x17]\n\
- lsls r3, 26\n\
- lsrs r0, r3, 27\n\
- ands r1, r0\n\
- lsls r1, 4\n\
- orrs r2, r1\n\
- movs r1, 0x1\n\
- adds r4, r1, 0\n\
- mov r7, r10\n\
- ands r4, r7\n\
- mov r0, r9\n\
- lsrs r0, 27\n\
- mov r9, r0\n\
- adds r0, r1, 0\n\
- mov r7, r9\n\
- ands r0, r7\n\
- lsls r0, 1\n\
- orrs r4, r0\n\
- mov r0, r8\n\
- lsrs r0, 27\n\
- mov r8, r0\n\
- adds r0, r1, 0\n\
- mov r7, r8\n\
- ands r0, r7\n\
- lsls r0, 2\n\
- orrs r4, r0\n\
- lsrs r6, 27\n\
- adds r0, r1, 0\n\
- ands r0, r6\n\
- lsls r0, 3\n\
- orrs r4, r0\n\
- lsrs r5, 27\n\
- adds r0, r1, 0\n\
- ands r0, r5\n\
- lsls r0, 4\n\
- orrs r4, r0\n\
- lsrs r3, 27\n\
- ands r1, r3\n\
- lsls r1, 5\n\
- orrs r4, r1\n\
- ldr r5, _0802989C @ =gDynamicBasePower\n\
- lsls r0, r2, 2\n\
- adds r0, r2\n\
- lsls r0, 3\n\
- movs r1, 0x3F\n\
- bl __divsi3\n\
- adds r0, 0x1E\n\
- strh r0, [r5]\n\
- ldr r5, _080298A0 @ =gSharedMem\n\
- lsls r0, r4, 4\n\
- subs r0, r4\n\
- movs r1, 0x3F\n\
- bl __divsi3\n\
- adds r1, r0, 0x1\n\
- ldr r0, _080298A4 @ =0x0001601c\n\
- adds r5, r0\n\
- strb r1, [r5]\n\
- lsls r0, r1, 24\n\
- lsrs r0, 24\n\
- cmp r0, 0x8\n\
- bls _08029876\n\
- adds r0, r1, 0x1\n\
- strb r0, [r5]\n\
-_08029876:\n\
- ldrb r0, [r5]\n\
- movs r1, 0xC0\n\
- orrs r0, r1\n\
- strb r0, [r5]\n\
- ldr r1, _080298A8 @ =gBattlescriptCurrInstr\n\
- ldr r0, [r1]\n\
- adds r0, 0x1\n\
- str r0, [r1]\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_08029894: .4byte gBattleMons\n\
-_08029898: .4byte gBankAttacker\n\
-_0802989C: .4byte gDynamicBasePower\n\
-_080298A0: .4byte gSharedMem\n\
-_080298A4: .4byte 0x0001601c\n\
-_080298A8: .4byte gBattlescriptCurrInstr\n\
- .syntax divided");
+ u8 power = ((gBattleMons[gBankAttacker].hpIV & 2) >> 1) |
+ ((gBattleMons[gBankAttacker].attackIV & 2)) |
+ ((gBattleMons[gBankAttacker].defenseIV & 2) << 1) |
+ ((gBattleMons[gBankAttacker].speedIV & 2) << 2) |
+ ((gBattleMons[gBankAttacker].spAttackIV & 2) << 3) |
+ ((gBattleMons[gBankAttacker].spDefenseIV & 2) << 4);
+ u8 type = ((gBattleMons[gBankAttacker].hpIV & 1)) |
+ ((gBattleMons[gBankAttacker].attackIV & 1) << 1) |
+ ((gBattleMons[gBankAttacker].defenseIV & 1) << 2) |
+ ((gBattleMons[gBankAttacker].speedIV & 1) << 3) |
+ ((gBattleMons[gBankAttacker].spAttackIV & 1) << 4) |
+ ((gBattleMons[gBankAttacker].spDefenseIV & 1) << 5);
+
+ gDynamicBasePower = 30 + (power * 40 / 63);
+
+ gBattleStruct->dynamicMoveType = ((type * 15) / 63) + 1;
+ if (gBattleStruct->dynamicMoveType >= TYPE_MYSTERY)
+ gBattleStruct->dynamicMoveType++;
+
+ gBattleStruct->dynamicMoveType |= 0xC0;
+
+ gBattlescriptCurrInstr++;
}
static void atkC2_selectfirstvalidtarget(void)
diff --git a/src/battle/battle_anim.c b/src/battle/battle_anim.c
index 8b729d2ab..7420e3e2e 100644
--- a/src/battle/battle_anim.c
+++ b/src/battle/battle_anim.c
@@ -672,588 +672,588 @@ const struct OamData gOamData_837E15C =
const struct CompressedSpriteSheet gBattleAnimPicTable[] =
{
- { (u8 *) &gBattleAnimSpriteSheet_000, 0x200, 10000 },
- { (u8 *) &gBattleAnimSpriteSheet_001, 0x300, 10001 },
- { (u8 *) &gBattleAnimSpriteSheet_002, 0x200, 10002 },
- { (u8 *) &gBattleAnimSpriteSheet_003, 0x100, 10003 },
- { (u8 *) &gBattleAnimSpriteSheet_004, 0x200, 10004 },
- { (u8 *) &gBattleAnimSpriteSheet_005, 0x400, 10005 },
- { (u8 *) &gBattleAnimSpriteSheet_006, 0x180, 10006 },
- { (u8 *) &gBattleAnimSpriteSheet_007, 0x800, 10007 },
- { (u8 *) &gBattleAnimSpriteSheet_008, 0x20, 10008 },
- { (u8 *) &gBattleAnimSpriteSheet_009, 0x400, 10009 },
- { (u8 *) &gBattleAnimSpriteSheet_010, 0x1200, 10010 },
- { (u8 *) &gBattleAnimSpriteSheet_011, 0x180, 10011 },
- { (u8 *) &gBattleAnimSpriteSheet_012, 0x80, 10012 },
- { (u8 *) &gBattleAnimSpriteSheet_013, 0x80, 10013 },
- { (u8 *) &gBattleAnimSpriteSheet_014, 0x280, 10014 },
- { (u8 *) &gBattleAnimSpriteSheet_015, 0x80, 10015 },
- { (u8 *) &gBattleAnimSpriteSheet_016, 0x100, 10016 },
- { (u8 *) &gBattleAnimSpriteSheet_017, 0x20, 10017 },
- { (u8 *) &gBattleAnimSpriteSheet_018, 0x80, 10018 },
- { (u8 *) &gBattleAnimSpriteSheet_019, 0x400, 10019 },
- { (u8 *) &gBattleAnimSpriteSheet_020, 0x200, 10020 },
- { (u8 *) &gBattleAnimSpriteSheet_021, 0xA00, 10021 },
- { (u8 *) &gBattleAnimSpriteSheet_021, 0xA00, 10022 },
- { (u8 *) &gBattleAnimSpriteSheet_023, 0x380, 10023 },
- { (u8 *) &gBattleAnimSpriteSheet_024, 0x300, 10024 },
- { (u8 *) &gBattleAnimSpriteSheet_025, 0xA00, 10025 },
- { (u8 *) &gBattleAnimSpriteSheet_026, 0xA00, 10026 },
- { (u8 *) &gBattleAnimSpriteSheet_027, 0xA00, 10027 },
- { (u8 *) &gBattleAnimSpriteSheet_028, 0xA00, 10028 },
- { (u8 *) &gBattleAnimSpriteSheet_029, 0xA00, 10029 },
- { (u8 *) &gBattleAnimSpriteSheet_030, 0xA00, 10030 },
- { (u8 *) &gBattleAnimSpriteSheet_031, 0xE00, 10031 },
- { (u8 *) &gBattleAnimSpriteSheet_032, 0x380, 10032 },
- { (u8 *) &gBattleAnimSpriteSheet_033, 0x1000, 10033 },
- { (u8 *) &gBattleAnimSpriteSheet_034, 0x800, 10034 },
- { (u8 *) &gBattleAnimSpriteSheet_035, 0xA00, 10035 },
- { (u8 *) &gBattleAnimSpriteSheet_036, 0x800, 10036 },
- { (u8 *) &gBattleAnimSpriteSheet_037, 0xA00, 10037 },
- { (u8 *) &gBattleAnimSpriteSheet_038, 0xA00, 10038 },
- { (u8 *) &gBattleAnimSpriteSheet_039, 0xA00, 10039 },
- { (u8 *) &gBattleAnimSpriteSheet_040, 0xA00, 10040 },
- { (u8 *) &gBattleAnimSpriteSheet_041, 0xA00, 10041 },
- { (u8 *) &gBattleAnimSpriteSheet_042, 0xA00, 10042 },
- { (u8 *) &gBattleAnimSpriteSheet_043, 0xA00, 10043 },
- { (u8 *) &gBattleAnimSpriteSheet_044, 0xA00, 10044 },
- { (u8 *) &gBattleAnimSpriteSheet_045, 0xA00, 10045 },
- { (u8 *) &gBattleAnimSpriteSheet_046, 0x1000, 10046 },
- { (u8 *) &gBattleAnimSpriteSheet_046, 0x1000, 10047 },
- { (u8 *) &gBattleAnimSpriteSheet_048, 0x1000, 10048 },
- { (u8 *) &gBattleAnimSpriteSheet_048, 0x1000, 10049 },
- { (u8 *) &gBattleAnimSpriteSheet_050, 0x200, 10050 },
- { (u8 *) &gBattleAnimSpriteSheet_051, 0x200, 10051 },
- { (u8 *) &gBattleAnimSpriteSheet_052, 0x200, 10052 },
- { (u8 *) &gBattleAnimSpriteSheet_053, 0x800, 10053 },
- { (u8 *) &gBattleAnimSpriteSheet_054, 0x80, 10054 },
- { (u8 *) &gBattleAnimSpriteSheet_055, 0x200, 10055 },
- { (u8 *) &gBattleAnimSpriteSheet_056, 0x1000, 10056 },
- { (u8 *) &gBattleAnimSpriteSheet_057, 0x180, 10057 },
- { (u8 *) &gBattleAnimSpriteSheet_058, 0xC00, 10058 },
- { (u8 *) &gBattleAnimSpriteSheet_059, 0x100, 10059 },
- { (u8 *) &gBattleAnimSpriteSheet_060, 0x40, 10060 },
- { (u8 *) &gBattleAnimSpriteSheet_061, 0x180, 10061 },
- { (u8 *) &gBattleAnimSpriteSheet_062, 0x800, 10062 },
- { (u8 *) &gBattleAnimSpriteSheet_063, 0x480, 10063 },
- { (u8 *) &gBattleAnimSpriteSheet_064, 0x200, 10064 },
- { (u8 *) &gBattleAnimSpriteSheet_065, 0x200, 10065 },
- { (u8 *) &gBattleAnimSpriteSheet_066, 0x100, 10066 },
- { (u8 *) &gBattleAnimSpriteSheet_065, 0x200, 10067 },
- { (u8 *) &gBattleAnimSpriteSheet_065, 0x200, 10068 },
- { (u8 *) &gBattleAnimSpriteSheet_065, 0x200, 10069 },
- { (u8 *) &gBattleAnimSpriteSheet_070, 0x200, 10070 },
- { (u8 *) &gBattleAnimSpriteSheet_071, 0xA00, 10071 },
- { (u8 *) &gBattleAnimSpriteSheet_072, 0x300, 10072 },
- { (u8 *) &gBattleAnimSpriteSheet_073, 0x180, 10073 },
- { (u8 *) &gBattleAnimSpriteSheet_074, 0xA0, 10074 },
- { (u8 *) &gBattleAnimSpriteSheet_075, 0x700, 10075 },
- { (u8 *) &gBattleAnimSpriteSheet_076, 0x400, 10076 },
- { (u8 *) &gBattleAnimSpriteSheet_077, 0x200, 10077 },
- { (u8 *) &gBattleAnimSpriteSheet_078, 0x300, 10078 },
- { (u8 *) &gBattleAnimSpriteSheet_079, 0xC00, 10079 },
- { (u8 *) &gBattleAnimSpriteSheet_080, 0xA00, 10080 },
- { (u8 *) &gBattleAnimSpriteSheet_081, 0x80, 10081 },
- { (u8 *) &gBattleAnimSpriteSheet_082, 0x40, 10082 },
- { (u8 *) &gBattleAnimSpriteSheet_083, 0xE00, 10083 },
- { (u8 *) &gBattleAnimSpriteSheet_084, 0xE00, 10084 },
- { (u8 *) &gBattleAnimSpriteSheet_085, 0x280, 10085 },
- { (u8 *) &gBattleAnimSpriteSheet_086, 0x200, 10086 },
- { (u8 *) &gBattleAnimSpriteSheet_087, 0x80, 10087 },
- { (u8 *) &gBattleAnimSpriteSheet_088, 0xC0, 10088 },
- { (u8 *) &gBattleAnimSpriteSheet_089, 0xA00, 10089 },
- { (u8 *) &gBattleAnimSpriteSheet_090, 0x200, 10090 },
- { (u8 *) &gBattleAnimSpriteSheet_091, 0x180, 10091 },
- { (u8 *) &gBattleAnimSpriteSheet_092, 0x80, 10092 },
- { (u8 *) &gBattleAnimSpriteSheet_093, 0x1000, 10093 },
- { (u8 *) &gBattleAnimSpriteSheet_094, 0xA00, 10094 },
- { (u8 *) &gBattleAnimSpriteSheet_095, 0x180, 10095 },
- { (u8 *) &gBattleAnimSpriteSheet_096, 0x380, 10096 },
- { (u8 *) &gBattleAnimSpriteSheet_097, 0xC00, 10097 },
- { (u8 *) &gBattleAnimSpriteSheet_098, 0x200, 10098 },
- { (u8 *) &gBattleAnimSpriteSheet_099, 0x200, 10099 },
- { (u8 *) &gBattleAnimSpriteSheet_100, 0x200, 10100 },
- { (u8 *) &gBattleAnimSpriteSheet_101, 0x200, 10101 },
- { (u8 *) &gBattleAnimSpriteSheet_102, 0x400, 10102 },
- { (u8 *) &gBattleAnimSpriteSheet_103, 0x80, 10103 },
- { (u8 *) &gBattleAnimSpriteSheet_104, 0x400, 10104 },
- { (u8 *) &gBattleAnimSpriteSheet_105, 0xC00, 10105 },
- { (u8 *) &gBattleAnimSpriteSheet_106, 0x200, 10106 },
- { (u8 *) &gBattleAnimSpriteSheet_107, 0x1000, 10107 },
- { (u8 *) &gBattleAnimSpriteSheet_108, 0xA00, 10108 },
- { (u8 *) &gBattleAnimSpriteSheet_109, 0x20, 10109 },
- { (u8 *) &gBattleAnimSpriteSheet_110, 0xE00, 10110 },
- { (u8 *) &gBattleAnimSpriteSheet_111, 0x80, 10111 },
- { (u8 *) &gBattleAnimSpriteSheet_112, 0xA00, 10112 },
- { (u8 *) &gBattleAnimSpriteSheet_113, 0x400, 10113 },
- { (u8 *) &gBattleAnimSpriteSheet_114, 0x200, 10114 },
- { (u8 *) &gBattleAnimSpriteSheet_115, 0x700, 10115 },
- { (u8 *) &gBattleAnimSpriteSheet_116, 0x800, 10116 },
- { (u8 *) &gBattleAnimSpriteSheet_117, 0xA00, 10117 },
- { (u8 *) &gBattleAnimSpriteSheet_118, 0x600, 10118 },
- { (u8 *) &gBattleAnimSpriteSheet_119, 0x800, 10119 },
- { (u8 *) &gBattleAnimSpriteSheet_120, 0x200, 10120 },
- { (u8 *) &gBattleAnimSpriteSheet_121, 0x40, 10121 },
- { (u8 *) &gBattleAnimSpriteSheet_122, 0x180, 10122 },
- { (u8 *) &gBattleAnimSpriteSheet_123, 0x600, 10123 },
- { (u8 *) &gBattleAnimSpriteSheet_124, 0x600, 10124 },
- { (u8 *) &gBattleAnimSpriteSheet_125, 0x200, 10125 },
- { (u8 *) &gBattleAnimSpriteSheet_126, 0x80, 10126 },
- { (u8 *) &gBattleAnimSpriteSheet_127, 0x200, 10127 },
- { (u8 *) &gBattleAnimSpriteSheet_128, 0x800, 10128 },
- { (u8 *) &gBattleAnimSpriteSheet_129, 0x80, 10129 },
- { (u8 *) &gBattleAnimSpriteSheet_130, 0xA00, 10130 },
- { (u8 *) &gBattleAnimSpriteSheet_131, 0x280, 10131 },
- { (u8 *) &gBattleAnimSpriteSheet_132, 0x280, 10132 },
- { (u8 *) &gBattleAnimSpriteSheet_133, 0x100, 10133 },
- { (u8 *) &gBattleAnimSpriteSheet_134, 0x200, 10134 },
- { (u8 *) &gBattleAnimSpriteSheet_135, 0x200, 10135 },
- { (u8 *) &gBattleAnimSpriteSheet_136, 0x20, 10136 },
- { (u8 *) &gBattleAnimSpriteSheet_137, 0xA00, 10137 },
- { (u8 *) &gBattleAnimSpriteSheet_138, 0x800, 10138 },
- { (u8 *) &gBattleAnimSpriteSheet_139, 0x800, 10139 },
- { (u8 *) &gBattleAnimSpriteSheet_140, 0xC0, 10140 },
- { (u8 *) &gBattleAnimSpriteSheet_141, 0x1C0, 10141 },
- { (u8 *) &gBattleAnimSpriteSheet_142, 0x100, 10142 },
- { (u8 *) &gBattleAnimSpriteSheet_143, 0x800, 10143 },
- { (u8 *) &gBattleAnimSpriteSheet_144, 0x200, 10144 },
- { (u8 *) &gBattleAnimSpriteSheet_145, 0x800, 10145 },
- { (u8 *) &gBattleAnimSpriteSheet_146, 0x180, 10146 },
- { (u8 *) &gBattleAnimSpriteSheet_147, 0x180, 10147 },
- { (u8 *) &gBattleAnimSpriteSheet_148, 0x200, 10148 },
- { (u8 *) &gBattleAnimSpriteSheet_149, 0x200, 10149 },
- { (u8 *) &gBattleAnimSpriteSheet_150, 0x180, 10150 },
- { (u8 *) &gBattleAnimSpriteSheet_151, 0x400, 10151 },
- { (u8 *) &gBattleAnimSpriteSheet_152, 0x80, 10152 },
- { (u8 *) &gBattleAnimSpriteSheet_153, 0x100, 10153 },
- { (u8 *) &gBattleAnimSpriteSheet_154, 0x100, 10154 },
- { (u8 *) &gBattleAnimSpriteSheet_155, 0x140, 10155 },
- { (u8 *) &gBattleAnimSpriteSheet_156, 0x800, 10156 },
- { (u8 *) &gBattleAnimSpriteSheet_157, 0x200, 10157 },
- { (u8 *) &gBattleAnimSpriteSheet_158, 0x100, 10158 },
- { (u8 *) &gBattleAnimSpriteSheet_159, 0xA0, 10159 },
- { (u8 *) &gBattleAnimSpriteSheet_160, 0x100, 10160 },
- { (u8 *) &gBattleAnimSpriteSheet_161, 0x80, 10161 },
- { (u8 *) &gBattleAnimSpriteSheet_162, 0x300, 10162 },
- { (u8 *) &gBattleAnimSpriteSheet_163, 0x100, 10163 },
- { (u8 *) &gBattleAnimSpriteSheet_163, 0x100, 10164 },
- { (u8 *) &gBattleAnimSpriteSheet_163, 0x100, 10165 },
- { (u8 *) &gBattleAnimSpriteSheet_166, 0x800, 10166 },
- { (u8 *) &gBattleAnimSpriteSheet_166, 0x800, 10167 },
- { (u8 *) &gBattleAnimSpriteSheet_166, 0x800, 10168 },
- { (u8 *) &gBattleAnimSpriteSheet_166, 0x800, 10169 },
- { (u8 *) &gBattleAnimSpriteSheet_166, 0x800, 10170 },
- { (u8 *) &gBattleAnimSpriteSheet_171, 0x80, 10171 },
- { (u8 *) &gBattleAnimSpriteSheet_144, 0x200, 10172 },
- { (u8 *) &gBattleAnimSpriteSheet_173, 0x200, 10173 },
- { (u8 *) &gBattleAnimSpriteSheet_174, 0x200, 10174 },
- { (u8 *) &gBattleAnimSpriteSheet_175, 0x80, 10175 },
- { (u8 *) &gBattleAnimSpriteSheet_176, 0x200, 10176 },
- { (u8 *) &gBattleAnimSpriteSheet_177, 0x500, 10177 },
- { (u8 *) &gBattleAnimSpriteSheet_178, 0x800, 10178 },
- { (u8 *) &gBattleAnimSpriteSheet_179, 0x400, 10179 },
- { (u8 *) &gBattleAnimSpriteSheet_180, 0x20, 10180 },
- { (u8 *) &gBattleAnimSpriteSheet_181, 0x800, 10181 },
- { (u8 *) &gBattleAnimSpriteSheet_182, 0x100, 10182 },
- { (u8 *) &gBattleAnimSpriteSheet_183, 0x800, 10183 },
- { (u8 *) &gBattleAnimSpriteSheet_184, 0x400, 10184 },
- { (u8 *) &gBattleAnimSpriteSheet_185, 0xA00, 10185 },
- { (u8 *) &gBattleAnimSpriteSheet_186, 0x1000, 10186 },
- { (u8 *) &gBattleAnimSpriteSheet_187, 0x800, 10187 },
- { (u8 *) &gBattleAnimSpriteSheet_188, 0x400, 10188 },
- { (u8 *) &gBattleAnimSpriteSheet_189, 0x200, 10189 },
- { (u8 *) &gBattleAnimSpriteSheet_190, 0x800, 10190 },
- { (u8 *) &gBattleAnimSpriteSheet_191, 0x800, 10191 },
- { (u8 *) &gBattleAnimSpriteSheet_192, 0x800, 10192 },
- { (u8 *) &gBattleAnimSpriteSheet_193, 0x200, 10193 },
- { (u8 *) &gBattleAnimSpriteSheet_194, 0x800, 10194 },
- { (u8 *) &gBattleAnimSpriteSheet_195, 0x200, 10195 },
- { (u8 *) &gBattleAnimSpriteSheet_196, 0x800, 10196 },
- { (u8 *) &gBattleAnimSpriteSheet_197, 0x200, 10197 },
- { (u8 *) &gBattleAnimSpriteSheet_198, 0x800, 10198 },
- { (u8 *) &gBattleAnimSpriteSheet_199, 0x400, 10199 },
- { (u8 *) &gBattleAnimSpriteSheet_200, 0x200, 10200 },
- { (u8 *) &gBattleAnimSpriteSheet_201, 0xA80, 10201 },
- { (u8 *) &gBattleAnimSpriteSheet_202, 0x600, 10202 },
- { (u8 *) &gBattleAnimSpriteSheet_203, 0x800, 10203 },
- { (u8 *) &gBattleAnimSpriteSheet_204, 0x200, 10204 },
- { (u8 *) &gBattleAnimSpriteSheet_205, 0x600, 10205 },
- { (u8 *) &gBattleAnimSpriteSheet_206, 0x800, 10206 },
- { (u8 *) &gBattleAnimSpriteSheet_207, 0x180, 10207 },
- { (u8 *) &gBattleAnimSpriteSheet_208, 0x800, 10208 },
- { (u8 *) &gBattleAnimSpriteSheet_209, 0x800, 10209 },
- { (u8 *) &gBattleAnimSpriteSheet_210, 0x80, 10210 },
- { (u8 *) &gBattleAnimSpriteSheet_211, 0x80, 10211 },
- { (u8 *) &gBattleAnimSpriteSheet_212, 0x800, 10212 },
- { (u8 *) &gBattleAnimSpriteSheet_213, 0x800, 10213 },
- { (u8 *) &gBattleAnimSpriteSheet_214, 0x600, 10214 },
- { (u8 *) &gBattleAnimSpriteSheet_215, 0x600, 10215 },
- { (u8 *) &gBattleAnimSpriteSheet_210, 0x80, 10216 },
- { (u8 *) &gBattleAnimSpriteSheet_217, 0x80, 10217 },
- { (u8 *) &gBattleAnimSpriteSheet_218, 0x180, 10218 },
- { (u8 *) &gBattleAnimSpriteSheet_210, 0x80, 10219 },
- { (u8 *) &gBattleAnimSpriteSheet_220, 0x200, 10220 },
- { (u8 *) &gBattleAnimSpriteSheet_221, 0x400, 10221 },
- { (u8 *) &gBattleAnimSpriteSheet_222, 0xA00, 10222 },
- { (u8 *) &gBattleAnimSpriteSheet_223, 0x800, 10223 },
- { (u8 *) &gBattleAnimSpriteSheet_224, 0x200, 10224 },
- { (u8 *) &gBattleAnimSpriteSheet_225, 0x400, 10225 },
- { (u8 *) &gBattleAnimSpriteSheet_226, 0x80, 10226 },
- { (u8 *) &gBattleAnimSpriteSheet_227, 0x800, 10227 },
- { (u8 *) &gBattleAnimSpriteSheet_228, 0x200, 10228 },
- { (u8 *) &gBattleAnimSpriteSheet_229, 0x300, 10229 },
- { (u8 *) &gBattleAnimSpriteSheet_230, 0x800, 10230 },
- { (u8 *) &gBattleAnimSpriteSheet_231, 0x380, 10231 },
- { (u8 *) &gBattleAnimSpriteSheet_232, 0x800, 10232 },
- { (u8 *) &gBattleAnimSpriteSheet_233, 0xC0, 10233 },
- { (u8 *) &gBattleAnimSpriteSheet_234, 0x800, 10234 },
- { (u8 *) &gBattleAnimSpriteSheet_235, 0x60, 10235 },
- { (u8 *) &gBattleAnimSpriteSheet_235, 0x60, 10236 },
- { (u8 *) &gBattleAnimSpriteSheet_235, 0x60, 10237 },
- { (u8 *) &gBattleAnimSpriteSheet_238, 0x80, 10238 },
- { (u8 *) &gBattleAnimSpriteSheet_239, 0x180, 10239 },
- { (u8 *) &gBattleAnimSpriteSheet_240, 0x180, 10240 },
- { (u8 *) &gBattleAnimSpriteSheet_241, 0x200, 10241 },
- { (u8 *) &gBattleAnimSpriteSheet_242, 0x200, 10242 },
- { (u8 *) &gBattleAnimSpriteSheet_243, 0x20, 10243 },
- { (u8 *) &gBattleAnimSpriteSheet_244, 0x400, 10244 },
- { (u8 *) &gBattleAnimSpriteSheet_245, 0x600, 10245 },
- { (u8 *) &gBattleAnimSpriteSheet_246, 0x1000, 10246 },
- { (u8 *) &gBattleAnimSpriteSheet_247, 0x400, 10247 },
- { (u8 *) &gBattleAnimSpriteSheet_248, 0x20, 10248 },
- { (u8 *) &gBattleAnimSpriteSheet_249, 0x80, 10249 },
- { (u8 *) &gBattleAnimSpriteSheet_250, 0x800, 10250 },
- { (u8 *) &gBattleAnimSpriteSheet_251, 0x80, 10251 },
- { (u8 *) &gBattleAnimSpriteSheet_252, 0x200, 10252 },
- { (u8 *) &gBattleAnimSpriteSheet_253, 0x400, 10253 },
- { (u8 *) &gBattleAnimSpriteSheet_254, 0x200, 10254 },
- { (u8 *) &gBattleAnimSpriteSheet_255, 0x200, 10255 },
- { (u8 *) &gBattleAnimSpriteSheet_256, 0x800, 10256 },
- { (u8 *) &gBattleAnimSpriteSheet_257, 0x280, 10257 },
- { (u8 *) &gBattleAnimSpriteSheet_258, 0x200, 10258 },
- { (u8 *) &gBattleAnimSpriteSheet_149, 0x200, 10259 },
- { (u8 *) &gBattleAnimSpriteSheet_260, 0x400, 10260 },
- { (u8 *) &gBattleAnimSpriteSheet_261, 0x200, 10261 },
- { (u8 *) &gBattleAnimSpriteSheet_262, 0x200, 10262 },
- { (u8 *) &gBattleAnimSpriteSheet_263, 0x80, 10263 },
- { (u8 *) &gBattleAnimSpriteSheet_264, 0x20, 10264 },
- { (u8 *) &gBattleAnimSpriteSheet_264, 0x20, 10265 },
- { (u8 *) &gBattleAnimSpriteSheet_266, 0x80, 10266 },
- { (u8 *) &gBattleAnimSpriteSheet_212, 0x800, 10267 },
- { (u8 *) &gBattleAnimSpriteSheet_264, 0x20, 10268 },
- { (u8 *) &gBattleAnimSpriteSheet_269, 0x80, 10269 },
- { (u8 *) &gBattleAnimSpriteSheet_270, 0x400, 10270 },
- { (u8 *) &gBattleAnimSpriteSheet_271, 0x80, 10271 },
- { (u8 *) &gBattleAnimSpriteSheet_272, 0x800, 10272 },
- { (u8 *) &gBattleAnimSpriteSheet_273, 0x20, 10273 },
- { (u8 *) &gBattleAnimSpriteSheet_274, 0x800, 10274 },
- { (u8 *) &gBattleAnimSpriteSheet_275, 0x800, 10275 },
- { (u8 *) &gBattleAnimSpriteSheet_276, 0x800, 10276 },
- { (u8 *) &gBattleAnimSpriteSheet_277, 0x1000, 10277 },
- { (u8 *) &gBattleAnimSpriteSheet_278, 0x800, 10278 },
- { (u8 *) &gBattleAnimSpriteSheet_279, 0xA0, 10279 },
- { (u8 *) &gBattleAnimSpriteSheet_280, 0x800, 10280 },
- { (u8 *) &gBattleAnimSpriteSheet_281, 0x200, 10281 },
- { (u8 *) &gBattleAnimSpriteSheet_282, 0x600, 10282 },
- { (u8 *) &gBattleAnimSpriteSheet_283, 0x200, 10283 },
- { (u8 *) &gBattleAnimSpriteSheet_284, 0x800, 10284 },
- { (u8 *) &gBattleAnimSpriteSheet_285, 0x200, 10285 },
- { (u8 *) &gBattleAnimSpriteSheet_183, 0x800, 10286 },
- { (u8 *) &gBattleAnimSpriteSheet_056, 0x1000, 10287 },
- { (u8 *) &gBattleAnimSpriteSheet_163, 0x100, 10288 },
+ { gBattleAnimSpriteSheet_000, 0x200, 10000 },
+ { gBattleAnimSpriteSheet_001, 0x300, 10001 },
+ { gBattleAnimSpriteSheet_002, 0x200, 10002 },
+ { gBattleAnimSpriteSheet_003, 0x100, 10003 },
+ { gBattleAnimSpriteSheet_004, 0x200, 10004 },
+ { gBattleAnimSpriteSheet_005, 0x400, 10005 },
+ { gBattleAnimSpriteSheet_006, 0x180, 10006 },
+ { gBattleAnimSpriteSheet_007, 0x800, 10007 },
+ { gBattleAnimSpriteSheet_008, 0x20, 10008 },
+ { gBattleAnimSpriteSheet_009, 0x400, 10009 },
+ { gBattleAnimSpriteSheet_010, 0x1200, 10010 },
+ { gBattleAnimSpriteSheet_011, 0x180, 10011 },
+ { gBattleAnimSpriteSheet_012, 0x80, 10012 },
+ { gBattleAnimSpriteSheet_013, 0x80, 10013 },
+ { gBattleAnimSpriteSheet_014, 0x280, 10014 },
+ { gBattleAnimSpriteSheet_015, 0x80, 10015 },
+ { gBattleAnimSpriteSheet_016, 0x100, 10016 },
+ { gBattleAnimSpriteSheet_017, 0x20, 10017 },
+ { gBattleAnimSpriteSheet_018, 0x80, 10018 },
+ { gBattleAnimSpriteSheet_019, 0x400, 10019 },
+ { gBattleAnimSpriteSheet_020, 0x200, 10020 },
+ { gBattleAnimSpriteSheet_021, 0xA00, 10021 },
+ { gBattleAnimSpriteSheet_021, 0xA00, 10022 },
+ { gBattleAnimSpriteSheet_023, 0x380, 10023 },
+ { gBattleAnimSpriteSheet_024, 0x300, 10024 },
+ { gBattleAnimSpriteSheet_025, 0xA00, 10025 },
+ { gBattleAnimSpriteSheet_026, 0xA00, 10026 },
+ { gBattleAnimSpriteSheet_027, 0xA00, 10027 },
+ { gBattleAnimSpriteSheet_028, 0xA00, 10028 },
+ { gBattleAnimSpriteSheet_029, 0xA00, 10029 },
+ { gBattleAnimSpriteSheet_030, 0xA00, 10030 },
+ { gBattleAnimSpriteSheet_031, 0xE00, 10031 },
+ { gBattleAnimSpriteSheet_032, 0x380, 10032 },
+ { gBattleAnimSpriteSheet_033, 0x1000, 10033 },
+ { gBattleAnimSpriteSheet_034, 0x800, 10034 },
+ { gBattleAnimSpriteSheet_035, 0xA00, 10035 },
+ { gBattleAnimSpriteSheet_036, 0x800, 10036 },
+ { gBattleAnimSpriteSheet_037, 0xA00, 10037 },
+ { gBattleAnimSpriteSheet_038, 0xA00, 10038 },
+ { gBattleAnimSpriteSheet_039, 0xA00, 10039 },
+ { gBattleAnimSpriteSheet_040, 0xA00, 10040 },
+ { gBattleAnimSpriteSheet_041, 0xA00, 10041 },
+ { gBattleAnimSpriteSheet_042, 0xA00, 10042 },
+ { gBattleAnimSpriteSheet_043, 0xA00, 10043 },
+ { gBattleAnimSpriteSheet_044, 0xA00, 10044 },
+ { gBattleAnimSpriteSheet_045, 0xA00, 10045 },
+ { gBattleAnimSpriteSheet_046, 0x1000, 10046 },
+ { gBattleAnimSpriteSheet_046, 0x1000, 10047 },
+ { gBattleAnimSpriteSheet_048, 0x1000, 10048 },
+ { gBattleAnimSpriteSheet_048, 0x1000, 10049 },
+ { gBattleAnimSpriteSheet_050, 0x200, 10050 },
+ { gBattleAnimSpriteSheet_051, 0x200, 10051 },
+ { gBattleAnimSpriteSheet_052, 0x200, 10052 },
+ { gBattleAnimSpriteSheet_053, 0x800, 10053 },
+ { gBattleAnimSpriteSheet_054, 0x80, 10054 },
+ { gBattleAnimSpriteSheet_055, 0x200, 10055 },
+ { gBattleAnimSpriteSheet_056, 0x1000, 10056 },
+ { gBattleAnimSpriteSheet_057, 0x180, 10057 },
+ { gBattleAnimSpriteSheet_058, 0xC00, 10058 },
+ { gBattleAnimSpriteSheet_059, 0x100, 10059 },
+ { gBattleAnimSpriteSheet_060, 0x40, 10060 },
+ { gBattleAnimSpriteSheet_061, 0x180, 10061 },
+ { gBattleAnimSpriteSheet_062, 0x800, 10062 },
+ { gBattleAnimSpriteSheet_063, 0x480, 10063 },
+ { gBattleAnimSpriteSheet_064, 0x200, 10064 },
+ { gBattleAnimSpriteSheet_065, 0x200, 10065 },
+ { gBattleAnimSpriteSheet_066, 0x100, 10066 },
+ { gBattleAnimSpriteSheet_065, 0x200, 10067 },
+ { gBattleAnimSpriteSheet_065, 0x200, 10068 },
+ { gBattleAnimSpriteSheet_065, 0x200, 10069 },
+ { gBattleAnimSpriteSheet_070, 0x200, 10070 },
+ { gBattleAnimSpriteSheet_071, 0xA00, 10071 },
+ { gBattleAnimSpriteSheet_072, 0x300, 10072 },
+ { gBattleAnimSpriteSheet_073, 0x180, 10073 },
+ { gBattleAnimSpriteSheet_074, 0xA0, 10074 },
+ { gBattleAnimSpriteSheet_075, 0x700, 10075 },
+ { gBattleAnimSpriteSheet_076, 0x400, 10076 },
+ { gBattleAnimSpriteSheet_077, 0x200, 10077 },
+ { gBattleAnimSpriteSheet_078, 0x300, 10078 },
+ { gBattleAnimSpriteSheet_079, 0xC00, 10079 },
+ { gBattleAnimSpriteSheet_080, 0xA00, 10080 },
+ { gBattleAnimSpriteSheet_081, 0x80, 10081 },
+ { gBattleAnimSpriteSheet_082, 0x40, 10082 },
+ { gBattleAnimSpriteSheet_083, 0xE00, 10083 },
+ { gBattleAnimSpriteSheet_084, 0xE00, 10084 },
+ { gBattleAnimSpriteSheet_085, 0x280, 10085 },
+ { gBattleAnimSpriteSheet_086, 0x200, 10086 },
+ { gBattleAnimSpriteSheet_087, 0x80, 10087 },
+ { gBattleAnimSpriteSheet_088, 0xC0, 10088 },
+ { gBattleAnimSpriteSheet_089, 0xA00, 10089 },
+ { gBattleAnimSpriteSheet_090, 0x200, 10090 },
+ { gBattleAnimSpriteSheet_091, 0x180, 10091 },
+ { gBattleAnimSpriteSheet_092, 0x80, 10092 },
+ { gBattleAnimSpriteSheet_093, 0x1000, 10093 },
+ { gBattleAnimSpriteSheet_094, 0xA00, 10094 },
+ { gBattleAnimSpriteSheet_095, 0x180, 10095 },
+ { gBattleAnimSpriteSheet_096, 0x380, 10096 },
+ { gBattleAnimSpriteSheet_097, 0xC00, 10097 },
+ { gBattleAnimSpriteSheet_098, 0x200, 10098 },
+ { gBattleAnimSpriteSheet_099, 0x200, 10099 },
+ { gBattleAnimSpriteSheet_100, 0x200, 10100 },
+ { gBattleAnimSpriteSheet_101, 0x200, 10101 },
+ { gBattleAnimSpriteSheet_102, 0x400, 10102 },
+ { gBattleAnimSpriteSheet_103, 0x80, 10103 },
+ { gBattleAnimSpriteSheet_104, 0x400, 10104 },
+ { gBattleAnimSpriteSheet_105, 0xC00, 10105 },
+ { gBattleAnimSpriteSheet_106, 0x200, 10106 },
+ { gBattleAnimSpriteSheet_107, 0x1000, 10107 },
+ { gBattleAnimSpriteSheet_108, 0xA00, 10108 },
+ { gBattleAnimSpriteSheet_109, 0x20, 10109 },
+ { gBattleAnimSpriteSheet_110, 0xE00, 10110 },
+ { gBattleAnimSpriteSheet_111, 0x80, 10111 },
+ { gBattleAnimSpriteSheet_112, 0xA00, 10112 },
+ { gBattleAnimSpriteSheet_113, 0x400, 10113 },
+ { gBattleAnimSpriteSheet_114, 0x200, 10114 },
+ { gBattleAnimSpriteSheet_115, 0x700, 10115 },
+ { gBattleAnimSpriteSheet_116, 0x800, 10116 },
+ { gBattleAnimSpriteSheet_117, 0xA00, 10117 },
+ { gBattleAnimSpriteSheet_118, 0x600, 10118 },
+ { gBattleAnimSpriteSheet_119, 0x800, 10119 },
+ { gBattleAnimSpriteSheet_120, 0x200, 10120 },
+ { gBattleAnimSpriteSheet_121, 0x40, 10121 },
+ { gBattleAnimSpriteSheet_122, 0x180, 10122 },
+ { gBattleAnimSpriteSheet_123, 0x600, 10123 },
+ { gBattleAnimSpriteSheet_124, 0x600, 10124 },
+ { gBattleAnimSpriteSheet_125, 0x200, 10125 },
+ { gBattleAnimSpriteSheet_126, 0x80, 10126 },
+ { gBattleAnimSpriteSheet_127, 0x200, 10127 },
+ { gBattleAnimSpriteSheet_128, 0x800, 10128 },
+ { gBattleAnimSpriteSheet_129, 0x80, 10129 },
+ { gBattleAnimSpriteSheet_130, 0xA00, 10130 },
+ { gBattleAnimSpriteSheet_131, 0x280, 10131 },
+ { gBattleAnimSpriteSheet_132, 0x280, 10132 },
+ { gBattleAnimSpriteSheet_133, 0x100, 10133 },
+ { gBattleAnimSpriteSheet_134, 0x200, 10134 },
+ { gBattleAnimSpriteSheet_135, 0x200, 10135 },
+ { gBattleAnimSpriteSheet_136, 0x20, 10136 },
+ { gBattleAnimSpriteSheet_137, 0xA00, 10137 },
+ { gBattleAnimSpriteSheet_138, 0x800, 10138 },
+ { gBattleAnimSpriteSheet_139, 0x800, 10139 },
+ { gBattleAnimSpriteSheet_140, 0xC0, 10140 },
+ { gBattleAnimSpriteSheet_141, 0x1C0, 10141 },
+ { gBattleAnimSpriteSheet_142, 0x100, 10142 },
+ { gBattleAnimSpriteSheet_143, 0x800, 10143 },
+ { gBattleAnimSpriteSheet_144, 0x200, 10144 },
+ { gBattleAnimSpriteSheet_145, 0x800, 10145 },
+ { gBattleAnimSpriteSheet_146, 0x180, 10146 },
+ { gBattleAnimSpriteSheet_147, 0x180, 10147 },
+ { gBattleAnimSpriteSheet_148, 0x200, 10148 },
+ { gBattleAnimSpriteSheet_149, 0x200, 10149 },
+ { gBattleAnimSpriteSheet_150, 0x180, 10150 },
+ { gBattleAnimSpriteSheet_151, 0x400, 10151 },
+ { gBattleAnimSpriteSheet_152, 0x80, 10152 },
+ { gBattleAnimSpriteSheet_153, 0x100, 10153 },
+ { gBattleAnimSpriteSheet_154, 0x100, 10154 },
+ { gBattleAnimSpriteSheet_155, 0x140, 10155 },
+ { gBattleAnimSpriteSheet_156, 0x800, 10156 },
+ { gBattleAnimSpriteSheet_157, 0x200, 10157 },
+ { gBattleAnimSpriteSheet_158, 0x100, 10158 },
+ { gBattleAnimSpriteSheet_159, 0xA0, 10159 },
+ { gBattleAnimSpriteSheet_160, 0x100, 10160 },
+ { gBattleAnimSpriteSheet_161, 0x80, 10161 },
+ { gBattleAnimSpriteSheet_162, 0x300, 10162 },
+ { gBattleAnimSpriteSheet_163, 0x100, 10163 },
+ { gBattleAnimSpriteSheet_163, 0x100, 10164 },
+ { gBattleAnimSpriteSheet_163, 0x100, 10165 },
+ { gBattleAnimSpriteSheet_166, 0x800, 10166 },
+ { gBattleAnimSpriteSheet_166, 0x800, 10167 },
+ { gBattleAnimSpriteSheet_166, 0x800, 10168 },
+ { gBattleAnimSpriteSheet_166, 0x800, 10169 },
+ { gBattleAnimSpriteSheet_166, 0x800, 10170 },
+ { gBattleAnimSpriteSheet_171, 0x80, 10171 },
+ { gBattleAnimSpriteSheet_144, 0x200, 10172 },
+ { gBattleAnimSpriteSheet_173, 0x200, 10173 },
+ { gBattleAnimSpriteSheet_174, 0x200, 10174 },
+ { gBattleAnimSpriteSheet_175, 0x80, 10175 },
+ { gBattleAnimSpriteSheet_176, 0x200, 10176 },
+ { gBattleAnimSpriteSheet_177, 0x500, 10177 },
+ { gBattleAnimSpriteSheet_178, 0x800, 10178 },
+ { gBattleAnimSpriteSheet_179, 0x400, 10179 },
+ { gBattleAnimSpriteSheet_180, 0x20, 10180 },
+ { gBattleAnimSpriteSheet_181, 0x800, 10181 },
+ { gBattleAnimSpriteSheet_182, 0x100, 10182 },
+ { gBattleAnimSpriteSheet_183, 0x800, 10183 },
+ { gBattleAnimSpriteSheet_184, 0x400, 10184 },
+ { gBattleAnimSpriteSheet_185, 0xA00, 10185 },
+ { gBattleAnimSpriteSheet_186, 0x1000, 10186 },
+ { gBattleAnimSpriteSheet_187, 0x800, 10187 },
+ { gBattleAnimSpriteSheet_188, 0x400, 10188 },
+ { gBattleAnimSpriteSheet_189, 0x200, 10189 },
+ { gBattleAnimSpriteSheet_190, 0x800, 10190 },
+ { gBattleAnimSpriteSheet_191, 0x800, 10191 },
+ { gBattleAnimSpriteSheet_192, 0x800, 10192 },
+ { gBattleAnimSpriteSheet_193, 0x200, 10193 },
+ { gBattleAnimSpriteSheet_194, 0x800, 10194 },
+ { gBattleAnimSpriteSheet_195, 0x200, 10195 },
+ { gBattleAnimSpriteSheet_196, 0x800, 10196 },
+ { gBattleAnimSpriteSheet_197, 0x200, 10197 },
+ { gBattleAnimSpriteSheet_198, 0x800, 10198 },
+ { gBattleAnimSpriteSheet_199, 0x400, 10199 },
+ { gBattleAnimSpriteSheet_200, 0x200, 10200 },
+ { gBattleAnimSpriteSheet_201, 0xA80, 10201 },
+ { gBattleAnimSpriteSheet_202, 0x600, 10202 },
+ { gBattleAnimSpriteSheet_203, 0x800, 10203 },
+ { gBattleAnimSpriteSheet_204, 0x200, 10204 },
+ { gBattleAnimSpriteSheet_205, 0x600, 10205 },
+ { gBattleAnimSpriteSheet_206, 0x800, 10206 },
+ { gBattleAnimSpriteSheet_207, 0x180, 10207 },
+ { gBattleAnimSpriteSheet_208, 0x800, 10208 },
+ { gBattleAnimSpriteSheet_209, 0x800, 10209 },
+ { gBattleAnimSpriteSheet_210, 0x80, 10210 },
+ { gBattleAnimSpriteSheet_211, 0x80, 10211 },
+ { gBattleAnimSpriteSheet_212, 0x800, 10212 },
+ { gBattleAnimSpriteSheet_213, 0x800, 10213 },
+ { gBattleAnimSpriteSheet_214, 0x600, 10214 },
+ { gBattleAnimSpriteSheet_215, 0x600, 10215 },
+ { gBattleAnimSpriteSheet_210, 0x80, 10216 },
+ { gBattleAnimSpriteSheet_217, 0x80, 10217 },
+ { gBattleAnimSpriteSheet_218, 0x180, 10218 },
+ { gBattleAnimSpriteSheet_210, 0x80, 10219 },
+ { gBattleAnimSpriteSheet_220, 0x200, 10220 },
+ { gBattleAnimSpriteSheet_221, 0x400, 10221 },
+ { gBattleAnimSpriteSheet_222, 0xA00, 10222 },
+ { gBattleAnimSpriteSheet_223, 0x800, 10223 },
+ { gBattleAnimSpriteSheet_224, 0x200, 10224 },
+ { gBattleAnimSpriteSheet_225, 0x400, 10225 },
+ { gBattleAnimSpriteSheet_226, 0x80, 10226 },
+ { gBattleAnimSpriteSheet_227, 0x800, 10227 },
+ { gBattleAnimSpriteSheet_228, 0x200, 10228 },
+ { gBattleAnimSpriteSheet_229, 0x300, 10229 },
+ { gBattleAnimSpriteSheet_230, 0x800, 10230 },
+ { gBattleAnimSpriteSheet_231, 0x380, 10231 },
+ { gBattleAnimSpriteSheet_232, 0x800, 10232 },
+ { gBattleAnimSpriteSheet_233, 0xC0, 10233 },
+ { gBattleAnimSpriteSheet_234, 0x800, 10234 },
+ { gBattleAnimSpriteSheet_235, 0x60, 10235 },
+ { gBattleAnimSpriteSheet_235, 0x60, 10236 },
+ { gBattleAnimSpriteSheet_235, 0x60, 10237 },
+ { gBattleAnimSpriteSheet_238, 0x80, 10238 },
+ { gBattleAnimSpriteSheet_239, 0x180, 10239 },
+ { gBattleAnimSpriteSheet_240, 0x180, 10240 },
+ { gBattleAnimSpriteSheet_241, 0x200, 10241 },
+ { gBattleAnimSpriteSheet_242, 0x200, 10242 },
+ { gBattleAnimSpriteSheet_243, 0x20, 10243 },
+ { gBattleAnimSpriteSheet_244, 0x400, 10244 },
+ { gBattleAnimSpriteSheet_245, 0x600, 10245 },
+ { gBattleAnimSpriteSheet_246, 0x1000, 10246 },
+ { gBattleAnimSpriteSheet_247, 0x400, 10247 },
+ { gBattleAnimSpriteSheet_248, 0x20, 10248 },
+ { gBattleAnimSpriteSheet_249, 0x80, 10249 },
+ { gBattleAnimSpriteSheet_250, 0x800, 10250 },
+ { gBattleAnimSpriteSheet_251, 0x80, 10251 },
+ { gBattleAnimSpriteSheet_252, 0x200, 10252 },
+ { gBattleAnimSpriteSheet_253, 0x400, 10253 },
+ { gBattleAnimSpriteSheet_254, 0x200, 10254 },
+ { gBattleAnimSpriteSheet_255, 0x200, 10255 },
+ { gBattleAnimSpriteSheet_256, 0x800, 10256 },
+ { gBattleAnimSpriteSheet_257, 0x280, 10257 },
+ { gBattleAnimSpriteSheet_258, 0x200, 10258 },
+ { gBattleAnimSpriteSheet_149, 0x200, 10259 },
+ { gBattleAnimSpriteSheet_260, 0x400, 10260 },
+ { gBattleAnimSpriteSheet_261, 0x200, 10261 },
+ { gBattleAnimSpriteSheet_262, 0x200, 10262 },
+ { gBattleAnimSpriteSheet_263, 0x80, 10263 },
+ { gBattleAnimSpriteSheet_264, 0x20, 10264 },
+ { gBattleAnimSpriteSheet_264, 0x20, 10265 },
+ { gBattleAnimSpriteSheet_266, 0x80, 10266 },
+ { gBattleAnimSpriteSheet_212, 0x800, 10267 },
+ { gBattleAnimSpriteSheet_264, 0x20, 10268 },
+ { gBattleAnimSpriteSheet_269, 0x80, 10269 },
+ { gBattleAnimSpriteSheet_270, 0x400, 10270 },
+ { gBattleAnimSpriteSheet_271, 0x80, 10271 },
+ { gBattleAnimSpriteSheet_272, 0x800, 10272 },
+ { gBattleAnimSpriteSheet_273, 0x20, 10273 },
+ { gBattleAnimSpriteSheet_274, 0x800, 10274 },
+ { gBattleAnimSpriteSheet_275, 0x800, 10275 },
+ { gBattleAnimSpriteSheet_276, 0x800, 10276 },
+ { gBattleAnimSpriteSheet_277, 0x1000, 10277 },
+ { gBattleAnimSpriteSheet_278, 0x800, 10278 },
+ { gBattleAnimSpriteSheet_279, 0xA0, 10279 },
+ { gBattleAnimSpriteSheet_280, 0x800, 10280 },
+ { gBattleAnimSpriteSheet_281, 0x200, 10281 },
+ { gBattleAnimSpriteSheet_282, 0x600, 10282 },
+ { gBattleAnimSpriteSheet_283, 0x200, 10283 },
+ { gBattleAnimSpriteSheet_284, 0x800, 10284 },
+ { gBattleAnimSpriteSheet_285, 0x200, 10285 },
+ { gBattleAnimSpriteSheet_183, 0x800, 10286 },
+ { gBattleAnimSpriteSheet_056, 0x1000, 10287 },
+ { gBattleAnimSpriteSheet_163, 0x100, 10288 },
};
const struct CompressedSpritePalette gBattleAnimPaletteTable[] =
{
- { (u8 *) &gBattleAnimSpritePalette_000, 10000 },
- { (u8 *) &gBattleAnimSpritePalette_001, 10001 },
- { (u8 *) &gBattleAnimSpritePalette_002, 10002 },
- { (u8 *) &gBattleAnimSpritePalette_003, 10003 },
- { (u8 *) &gBattleAnimSpritePalette_004, 10004 },
- { (u8 *) &gBattleAnimSpritePalette_005, 10005 },
- { (u8 *) &gBattleAnimSpritePalette_006, 10006 },
- { (u8 *) &gBattleAnimSpritePalette_007, 10007 },
- { (u8 *) &gBattleAnimSpritePalette_008, 10008 },
- { (u8 *) &gBattleAnimSpritePalette_009, 10009 },
- { (u8 *) &gBattleAnimSpritePalette_010, 10010 },
- { (u8 *) &gBattleAnimSpritePalette_011, 10011 },
- { (u8 *) &gBattleAnimSpritePalette_012, 10012 },
- { (u8 *) &gBattleAnimSpritePalette_013, 10013 },
- { (u8 *) &gBattleAnimSpritePalette_014, 10014 },
- { (u8 *) &gBattleAnimSpritePalette_015, 10015 },
- { (u8 *) &gBattleAnimSpritePalette_016, 10016 },
- { (u8 *) &gBattleAnimSpritePalette_016, 10017 },
- { (u8 *) &gBattleAnimSpritePalette_018, 10018 },
- { (u8 *) &gBattleAnimSpritePalette_019, 10019 },
- { (u8 *) &gBattleAnimSpritePalette_020, 10020 },
- { (u8 *) &gBattleAnimSpritePalette_021, 10021 },
- { (u8 *) &gBattleAnimSpritePalette_022, 10022 },
- { (u8 *) &gBattleAnimSpritePalette_023, 10023 },
- { (u8 *) &gBattleAnimSpritePalette_024, 10024 },
- { (u8 *) &gBattleAnimSpritePalette_025, 10025 },
- { (u8 *) &gBattleAnimSpritePalette_026, 10026 },
- { (u8 *) &gBattleAnimSpritePalette_027, 10027 },
- { (u8 *) &gBattleAnimSpritePalette_028, 10028 },
- { (u8 *) &gBattleAnimSpritePalette_029, 10029 },
- { (u8 *) &gBattleAnimSpritePalette_030, 10030 },
- { (u8 *) &gBattleAnimSpritePalette_031, 10031 },
- { (u8 *) &gBattleAnimSpritePalette_032, 10032 },
- { (u8 *) &gBattleAnimSpritePalette_033, 10033 },
- { (u8 *) &gBattleAnimSpritePalette_033, 10034 },
- { (u8 *) &gBattleAnimSpritePalette_033, 10035 },
- { (u8 *) &gBattleAnimSpritePalette_036, 10036 },
- { (u8 *) &gBattleAnimSpritePalette_036, 10037 },
- { (u8 *) &gBattleAnimSpritePalette_038, 10038 },
- { (u8 *) &gBattleAnimSpritePalette_039, 10039 },
- { (u8 *) &gBattleAnimSpritePalette_038, 10040 },
- { (u8 *) &gBattleAnimSpritePalette_038, 10041 },
- { (u8 *) &gBattleAnimSpritePalette_042, 10042 },
- { (u8 *) &gBattleAnimSpritePalette_043, 10043 },
- { (u8 *) &gBattleAnimSpritePalette_044, 10044 },
- { (u8 *) &gBattleAnimSpritePalette_045, 10045 },
- { (u8 *) &gBattleAnimSpritePalette_046, 10046 },
- { (u8 *) &gBattleAnimSpritePalette_047, 10046 },
- { (u8 *) &gBattleAnimSpritePalette_048, 10048 },
- { (u8 *) &gBattleAnimSpritePalette_049, 10049 },
- { (u8 *) &gBattleAnimSpritePalette_050, 10050 },
- { (u8 *) &gBattleAnimSpritePalette_050, 10051 },
- { (u8 *) &gBattleAnimSpritePalette_050, 10052 },
- { (u8 *) &gBattleAnimSpritePalette_026, 10053 },
- { (u8 *) &gBattleAnimSpritePalette_054, 10054 },
- { (u8 *) &gBattleAnimSpritePalette_050, 10055 },
- { (u8 *) &gBattleAnimSpritePalette_056, 10056 },
- { (u8 *) &gBattleAnimSpritePalette_057, 10057 },
- { (u8 *) &gBattleAnimSpritePalette_058, 10058 },
- { (u8 *) &gBattleAnimSpritePalette_059, 10059 },
- { (u8 *) &gBattleAnimSpritePalette_060, 10060 },
- { (u8 *) &gBattleAnimSpritePalette_061, 10061 },
- { (u8 *) &gBattleAnimSpritePalette_062, 10062 },
- { (u8 *) &gBattleAnimSpritePalette_063, 10063 },
- { (u8 *) &gBattleAnimSpritePalette_064, 10064 },
- { (u8 *) &gBattleAnimSpritePalette_065, 10065 },
- { (u8 *) &gBattleAnimSpritePalette_066, 10066 },
- { (u8 *) &gBattleAnimSpritePalette_067, 10067 },
- { (u8 *) &gBattleAnimSpritePalette_068, 10068 },
- { (u8 *) &gBattleAnimSpritePalette_065, 10069 },
- { (u8 *) &gBattleAnimSpritePalette_070, 10070 },
- { (u8 *) &gBattleAnimSpritePalette_070, 10071 },
- { (u8 *) &gBattleAnimSpritePalette_072, 10072 },
- { (u8 *) &gBattleAnimSpritePalette_073, 10073 },
- { (u8 *) &gBattleAnimSpritePalette_074, 10074 },
- { (u8 *) &gBattleAnimSpritePalette_075, 10075 },
- { (u8 *) &gBattleAnimSpritePalette_076, 10076 },
- { (u8 *) &gBattleAnimSpritePalette_076, 10077 },
- { (u8 *) &gBattleAnimSpritePalette_078, 10078 },
- { (u8 *) &gBattleAnimSpritePalette_078, 10079 },
- { (u8 *) &gBattleAnimSpritePalette_080, 10080 },
- { (u8 *) &gBattleAnimSpritePalette_081, 10081 },
- { (u8 *) &gBattleAnimSpritePalette_082, 10082 },
- { (u8 *) &gBattleAnimSpritePalette_083, 10083 },
- { (u8 *) &gBattleAnimSpritePalette_084, 10084 },
- { (u8 *) &gBattleAnimSpritePalette_085, 10085 },
- { (u8 *) &gBattleAnimSpritePalette_086, 10086 },
- { (u8 *) &gBattleAnimSpritePalette_087, 10087 },
- { (u8 *) &gBattleAnimSpritePalette_088, 10088 },
- { (u8 *) &gBattleAnimSpritePalette_089, 10089 },
- { (u8 *) &gBattleAnimSpritePalette_090, 10090 },
- { (u8 *) &gBattleAnimSpritePalette_091, 10091 },
- { (u8 *) &gBattleAnimSpritePalette_092, 10092 },
- { (u8 *) &gBattleAnimSpritePalette_093, 10093 },
- { (u8 *) &gBattleAnimSpritePalette_094, 10094 },
- { (u8 *) &gBattleAnimSpritePalette_095, 10095 },
- { (u8 *) &gBattleAnimSpritePalette_096, 10096 },
- { (u8 *) &gBattleAnimSpritePalette_097, 10097 },
- { (u8 *) &gBattleAnimSpritePalette_094, 10098 },
- { (u8 *) &gBattleAnimSpritePalette_099, 10099 },
- { (u8 *) &gBattleAnimSpritePalette_100, 10100 },
- { (u8 *) &gBattleAnimSpritePalette_101, 10101 },
- { (u8 *) &gBattleAnimSpritePalette_101, 10102 },
- { (u8 *) &gBattleAnimSpritePalette_103, 10103 },
- { (u8 *) &gBattleAnimSpritePalette_104, 10104 },
- { (u8 *) &gBattleAnimSpritePalette_105, 10105 },
- { (u8 *) &gBattleAnimSpritePalette_105, 10106 },
- { (u8 *) &gBattleAnimSpritePalette_107, 10107 },
- { (u8 *) &gBattleAnimSpritePalette_107, 10108 },
- { (u8 *) &gBattleAnimSpritePalette_109, 10109 },
- { (u8 *) &gBattleAnimSpritePalette_109, 10110 },
- { (u8 *) &gBattleAnimSpritePalette_111, 10111 },
- { (u8 *) &gBattleAnimSpritePalette_112, 10112 },
- { (u8 *) &gBattleAnimSpritePalette_113, 10113 },
- { (u8 *) &gBattleAnimSpritePalette_114, 10114 },
- { (u8 *) &gBattleAnimSpritePalette_115, 10115 },
- { (u8 *) &gBattleAnimSpritePalette_116, 10116 },
- { (u8 *) &gBattleAnimSpritePalette_117, 10117 },
- { (u8 *) &gBattleAnimSpritePalette_118, 10118 },
- { (u8 *) &gBattleAnimSpritePalette_119, 10119 },
- { (u8 *) &gBattleAnimSpritePalette_120, 10120 },
- { (u8 *) &gBattleAnimSpritePalette_121, 10121 },
- { (u8 *) &gBattleAnimSpritePalette_122, 10122 },
- { (u8 *) &gBattleAnimSpritePalette_122, 10123 },
- { (u8 *) &gBattleAnimSpritePalette_124, 10124 },
- { (u8 *) &gBattleAnimSpritePalette_125, 10125 },
- { (u8 *) &gBattleAnimSpritePalette_126, 10126 },
- { (u8 *) &gBattleAnimSpritePalette_127, 10127 },
- { (u8 *) &gBattleAnimSpritePalette_128, 10128 },
- { (u8 *) &gBattleAnimSpritePalette_128, 10129 },
- { (u8 *) &gBattleAnimSpritePalette_130, 10130 },
- { (u8 *) &gBattleAnimSpritePalette_130, 10131 },
- { (u8 *) &gBattleAnimSpritePalette_132, 10132 },
- { (u8 *) &gBattleAnimSpritePalette_133, 10133 },
- { (u8 *) &gBattleAnimSpritePalette_133, 10134 },
- { (u8 *) &gBattleAnimSpritePalette_135, 10135 },
- { (u8 *) &gBattleAnimSpritePalette_136, 10136 },
- { (u8 *) &gBattleAnimSpritePalette_135, 10137 },
- { (u8 *) &gBattleAnimSpritePalette_135, 10138 },
- { (u8 *) &gBattleAnimSpritePalette_139, 10139 },
- { (u8 *) &gBattleAnimSpritePalette_140, 10140 },
- { (u8 *) &gBattleAnimSpritePalette_141, 10141 },
- { (u8 *) &gBattleAnimSpritePalette_141, 10142 },
- { (u8 *) &gBattleAnimSpritePalette_143, 10143 },
- { (u8 *) &gBattleAnimSpritePalette_144, 10144 },
- { (u8 *) &gBattleAnimSpritePalette_139, 10145 },
- { (u8 *) &gBattleAnimSpritePalette_115, 10146 },
- { (u8 *) &gBattleAnimSpritePalette_147, 10147 },
- { (u8 *) &gBattleAnimSpritePalette_148, 10148 },
- { (u8 *) &gBattleAnimSpritePalette_148, 10149 },
- { (u8 *) &gBattleAnimSpritePalette_150, 10150 },
- { (u8 *) &gBattleAnimSpritePalette_150, 10151 },
- { (u8 *) &gBattleAnimSpritePalette_152, 10152 },
- { (u8 *) &gBattleAnimSpritePalette_153, 10153 },
- { (u8 *) &gBattleAnimSpritePalette_154, 10154 },
- { (u8 *) &gBattleAnimSpritePalette_155, 10155 },
- { (u8 *) &gBattleAnimSpritePalette_156, 10156 },
- { (u8 *) &gBattleAnimSpritePalette_157, 10157 },
- { (u8 *) &gBattleAnimSpritePalette_158, 10158 },
- { (u8 *) &gBattleAnimSpritePalette_159, 10159 },
- { (u8 *) &gBattleAnimSpritePalette_160, 10160 },
- { (u8 *) &gBattleAnimSpritePalette_161, 10161 },
- { (u8 *) &gBattleAnimSpritePalette_162, 10162 },
- { (u8 *) &gBattleAnimSpritePalette_163, 10163 },
- { (u8 *) &gBattleAnimSpritePalette_164, 10164 },
- { (u8 *) &gBattleAnimSpritePalette_165, 10165 },
- { (u8 *) &gBattleAnimSpritePalette_166, 10166 },
- { (u8 *) &gBattleAnimSpritePalette_167, 10167 },
- { (u8 *) &gBattleAnimSpritePalette_168, 10168 },
- { (u8 *) &gBattleAnimSpritePalette_169, 10169 },
- { (u8 *) &gBattleAnimSpritePalette_170, 10170 },
- { (u8 *) &gBattleAnimSpritePalette_171, 10171 },
- { (u8 *) &gBattleAnimSpritePalette_172, 10172 },
- { (u8 *) &gBattleAnimSpritePalette_001, 10173 },
- { (u8 *) &gBattleAnimSpritePalette_174, 10174 },
- { (u8 *) &gBattleAnimSpritePalette_175, 10175 },
- { (u8 *) &gBattleAnimSpritePalette_176, 10176 },
- { (u8 *) &gBattleAnimSpritePalette_177, 10177 },
- { (u8 *) &gBattleAnimSpritePalette_178, 10178 },
- { (u8 *) &gBattleAnimSpritePalette_179, 10179 },
- { (u8 *) &gBattleAnimSpritePalette_179, 10180 },
- { (u8 *) &gBattleAnimSpritePalette_179, 10181 },
- { (u8 *) &gBattleAnimSpritePalette_182, 10182 },
- { (u8 *) &gBattleAnimSpritePalette_183, 10183 },
- { (u8 *) &gBattleAnimSpritePalette_184, 10184 },
- { (u8 *) &gBattleAnimSpritePalette_185, 10185 },
- { (u8 *) &gBattleAnimSpritePalette_186, 10186 },
- { (u8 *) &gBattleAnimSpritePalette_187, 10187 },
- { (u8 *) &gBattleAnimSpritePalette_188, 10188 },
- { (u8 *) &gBattleAnimSpritePalette_189, 10189 },
- { (u8 *) &gBattleAnimSpritePalette_190, 10190 },
- { (u8 *) &gBattleAnimSpritePalette_191, 10191 },
- { (u8 *) &gBattleAnimSpritePalette_192, 10192 },
- { (u8 *) &gBattleAnimSpritePalette_193, 10193 },
- { (u8 *) &gBattleAnimSpritePalette_194, 10194 },
- { (u8 *) &gBattleAnimSpritePalette_195, 10195 },
- { (u8 *) &gBattleAnimSpritePalette_196, 10196 },
- { (u8 *) &gBattleAnimSpritePalette_197, 10197 },
- { (u8 *) &gBattleAnimSpritePalette_198, 10198 },
- { (u8 *) &gBattleAnimSpritePalette_199, 10199 },
- { (u8 *) &gBattleAnimSpritePalette_200, 10200 },
- { (u8 *) &gBattleAnimSpritePalette_201, 10201 },
- { (u8 *) &gBattleAnimSpritePalette_202, 10202 },
- { (u8 *) &gBattleAnimSpritePalette_203, 10203 },
- { (u8 *) &gBattleAnimSpritePalette_204, 10204 },
- { (u8 *) &gBattleAnimSpritePalette_205, 10205 },
- { (u8 *) &gBattleAnimSpritePalette_206, 10206 },
- { (u8 *) &gBattleAnimSpritePalette_207, 10207 },
- { (u8 *) &gBattleAnimSpritePalette_167, 10208 },
- { (u8 *) &gBattleAnimSpritePalette_209, 10209 },
- { (u8 *) &gBattleAnimSpritePalette_210, 10210 },
- { (u8 *) &gBattleAnimSpritePalette_211, 10211 },
- { (u8 *) &gBattleAnimSpritePalette_211, 10212 },
- { (u8 *) &gBattleAnimSpritePalette_211, 10213 },
- { (u8 *) &gBattleAnimSpritePalette_064, 10214 },
- { (u8 *) &gBattleAnimSpritePalette_215, 10215 },
- { (u8 *) &gBattleAnimSpritePalette_216, 10216 },
- { (u8 *) &gBattleAnimSpritePalette_217, 10217 },
- { (u8 *) &gBattleAnimSpritePalette_218, 10218 },
- { (u8 *) &gBattleAnimSpritePalette_219, 10219 },
- { (u8 *) &gBattleAnimSpritePalette_220, 10220 },
- { (u8 *) &gBattleAnimSpritePalette_221, 10221 },
- { (u8 *) &gBattleAnimSpritePalette_222, 10222 },
- { (u8 *) &gBattleAnimSpritePalette_223, 10223 },
- { (u8 *) &gBattleAnimSpritePalette_224, 10224 },
- { (u8 *) &gBattleAnimSpritePalette_225, 10225 },
- { (u8 *) &gBattleAnimSpritePalette_226, 10226 },
- { (u8 *) &gBattleAnimSpritePalette_226, 10227 },
- { (u8 *) &gBattleAnimSpritePalette_228, 10228 },
- { (u8 *) &gBattleAnimSpritePalette_229, 10229 },
- { (u8 *) &gBattleAnimSpritePalette_230, 10230 },
- { (u8 *) &gBattleAnimSpritePalette_231, 10231 },
- { (u8 *) &gBattleAnimSpritePalette_231, 10232 },
- { (u8 *) &gBattleAnimSpritePalette_233, 10233 },
- { (u8 *) &gBattleAnimSpritePalette_234, 10234 },
- { (u8 *) &gBattleAnimSpritePalette_235, 10235 },
- { (u8 *) &gBattleAnimSpritePalette_236, 10236 },
- { (u8 *) &gBattleAnimSpritePalette_237, 10237 },
- { (u8 *) &gBattleAnimSpritePalette_238, 10238 },
- { (u8 *) &gBattleAnimSpritePalette_239, 10239 },
- { (u8 *) &gBattleAnimSpritePalette_240, 10240 },
- { (u8 *) &gBattleAnimSpritePalette_241, 10241 },
- { (u8 *) &gBattleAnimSpritePalette_242, 10242 },
- { (u8 *) &gBattleAnimSpritePalette_243, 10243 },
- { (u8 *) &gBattleAnimSpritePalette_244, 10244 },
- { (u8 *) &gBattleAnimSpritePalette_245, 10245 },
- { (u8 *) &gBattleAnimSpritePalette_245, 10246 },
- { (u8 *) &gBattleAnimSpritePalette_064, 10247 },
- { (u8 *) &gBattleAnimSpritePalette_248, 10248 },
- { (u8 *) &gBattleAnimSpritePalette_249, 10249 },
- { (u8 *) &gBattleAnimSpritePalette_249, 10250 },
- { (u8 *) &gBattleAnimSpritePalette_251, 10251 },
- { (u8 *) &gBattleAnimSpritePalette_252, 10252 },
- { (u8 *) &gBattleAnimSpritePalette_253, 10253 },
- { (u8 *) &gBattleAnimSpritePalette_254, 10254 },
- { (u8 *) &gBattleAnimSpritePalette_255, 10255 },
- { (u8 *) &gBattleAnimSpritePalette_256, 10256 },
- { (u8 *) &gBattleAnimSpritePalette_257, 10257 },
- { (u8 *) &gBattleAnimSpritePalette_258, 10258 },
- { (u8 *) &gBattleAnimSpritePalette_259, 10259 },
- { (u8 *) &gBattleAnimSpritePalette_260, 10260 },
- { (u8 *) &gBattleAnimSpritePalette_261, 10261 },
- { (u8 *) &gBattleAnimSpritePalette_262, 10262 },
- { (u8 *) &gBattleAnimSpritePalette_263, 10263 },
- { (u8 *) &gBattleAnimSpritePalette_264, 10264 },
- { (u8 *) &gBattleAnimSpritePalette_265, 10265 },
- { (u8 *) &gBattleAnimSpritePalette_266, 10266 },
- { (u8 *) &gBattleAnimSpritePalette_267, 10267 },
- { (u8 *) &gBattleAnimSpritePalette_268, 10268 },
- { (u8 *) &gBattleAnimSpritePalette_269, 10269 },
- { (u8 *) &gBattleAnimSpritePalette_270, 10270 },
- { (u8 *) &gBattleAnimSpritePalette_271, 10271 },
- { (u8 *) &gBattleAnimSpritePalette_272, 10272 },
- { (u8 *) &gBattleAnimSpritePalette_272, 10273 },
- { (u8 *) &gBattleAnimSpritePalette_274, 10274 },
- { (u8 *) &gBattleAnimSpritePalette_274, 10275 },
- { (u8 *) &gBattleAnimSpritePalette_274, 10276 },
- { (u8 *) &gBattleAnimSpritePalette_277, 10277 },
- { (u8 *) &gBattleAnimSpritePalette_278, 10278 },
- { (u8 *) &gBattleAnimSpritePalette_279, 10279 },
- { (u8 *) &gBattleAnimSpritePalette_280, 10280 },
- { (u8 *) &gBattleAnimSpritePalette_281, 10281 },
- { (u8 *) &gBattleAnimSpritePalette_282, 10282 },
- { (u8 *) &gBattleAnimSpritePalette_283, 10283 },
- { (u8 *) &gBattleAnimSpritePalette_284, 10284 },
- { (u8 *) &gBattleAnimSpritePalette_285, 10285 },
- { (u8 *) &gBattleAnimSpritePalette_286, 10286 },
- { (u8 *) &gBattleAnimSpritePalette_287, 10287 },
- { (u8 *) &gBattleAnimSpritePalette_288, 10288 },
+ { gBattleAnimSpritePalette_000, 10000 },
+ { gBattleAnimSpritePalette_001, 10001 },
+ { gBattleAnimSpritePalette_002, 10002 },
+ { gBattleAnimSpritePalette_003, 10003 },
+ { gBattleAnimSpritePalette_004, 10004 },
+ { gBattleAnimSpritePalette_005, 10005 },
+ { gBattleAnimSpritePalette_006, 10006 },
+ { gBattleAnimSpritePalette_007, 10007 },
+ { gBattleAnimSpritePalette_008, 10008 },
+ { gBattleAnimSpritePalette_009, 10009 },
+ { gBattleAnimSpritePalette_010, 10010 },
+ { gBattleAnimSpritePalette_011, 10011 },
+ { gBattleAnimSpritePalette_012, 10012 },
+ { gBattleAnimSpritePalette_013, 10013 },
+ { gBattleAnimSpritePalette_014, 10014 },
+ { gBattleAnimSpritePalette_015, 10015 },
+ { gBattleAnimSpritePalette_016, 10016 },
+ { gBattleAnimSpritePalette_016, 10017 },
+ { gBattleAnimSpritePalette_018, 10018 },
+ { gBattleAnimSpritePalette_019, 10019 },
+ { gBattleAnimSpritePalette_020, 10020 },
+ { gBattleAnimSpritePalette_021, 10021 },
+ { gBattleAnimSpritePalette_022, 10022 },
+ { gBattleAnimSpritePalette_023, 10023 },
+ { gBattleAnimSpritePalette_024, 10024 },
+ { gBattleAnimSpritePalette_025, 10025 },
+ { gBattleAnimSpritePalette_026, 10026 },
+ { gBattleAnimSpritePalette_027, 10027 },
+ { gBattleAnimSpritePalette_028, 10028 },
+ { gBattleAnimSpritePalette_029, 10029 },
+ { gBattleAnimSpritePalette_030, 10030 },
+ { gBattleAnimSpritePalette_031, 10031 },
+ { gBattleAnimSpritePalette_032, 10032 },
+ { gBattleAnimSpritePalette_033, 10033 },
+ { gBattleAnimSpritePalette_033, 10034 },
+ { gBattleAnimSpritePalette_033, 10035 },
+ { gBattleAnimSpritePalette_036, 10036 },
+ { gBattleAnimSpritePalette_036, 10037 },
+ { gBattleAnimSpritePalette_038, 10038 },
+ { gBattleAnimSpritePalette_039, 10039 },
+ { gBattleAnimSpritePalette_038, 10040 },
+ { gBattleAnimSpritePalette_038, 10041 },
+ { gBattleAnimSpritePalette_042, 10042 },
+ { gBattleAnimSpritePalette_043, 10043 },
+ { gBattleAnimSpritePalette_044, 10044 },
+ { gBattleAnimSpritePalette_045, 10045 },
+ { gBattleAnimSpritePalette_046, 10046 },
+ { gBattleAnimSpritePalette_047, 10046 },
+ { gBattleAnimSpritePalette_048, 10048 },
+ { gBattleAnimSpritePalette_049, 10049 },
+ { gBattleAnimSpritePalette_050, 10050 },
+ { gBattleAnimSpritePalette_050, 10051 },
+ { gBattleAnimSpritePalette_050, 10052 },
+ { gBattleAnimSpritePalette_026, 10053 },
+ { gBattleAnimSpritePalette_054, 10054 },
+ { gBattleAnimSpritePalette_050, 10055 },
+ { gBattleAnimSpritePalette_056, 10056 },
+ { gBattleAnimSpritePalette_057, 10057 },
+ { gBattleAnimSpritePalette_058, 10058 },
+ { gBattleAnimSpritePalette_059, 10059 },
+ { gBattleAnimSpritePalette_060, 10060 },
+ { gBattleAnimSpritePalette_061, 10061 },
+ { gBattleAnimSpritePalette_062, 10062 },
+ { gBattleAnimSpritePalette_063, 10063 },
+ { gBattleAnimSpritePalette_064, 10064 },
+ { gBattleAnimSpritePalette_065, 10065 },
+ { gBattleAnimSpritePalette_066, 10066 },
+ { gBattleAnimSpritePalette_067, 10067 },
+ { gBattleAnimSpritePalette_068, 10068 },
+ { gBattleAnimSpritePalette_065, 10069 },
+ { gBattleAnimSpritePalette_070, 10070 },
+ { gBattleAnimSpritePalette_070, 10071 },
+ { gBattleAnimSpritePalette_072, 10072 },
+ { gBattleAnimSpritePalette_073, 10073 },
+ { gBattleAnimSpritePalette_074, 10074 },
+ { gBattleAnimSpritePalette_075, 10075 },
+ { gBattleAnimSpritePalette_076, 10076 },
+ { gBattleAnimSpritePalette_076, 10077 },
+ { gBattleAnimSpritePalette_078, 10078 },
+ { gBattleAnimSpritePalette_078, 10079 },
+ { gBattleAnimSpritePalette_080, 10080 },
+ { gBattleAnimSpritePalette_081, 10081 },
+ { gBattleAnimSpritePalette_082, 10082 },
+ { gBattleAnimSpritePalette_083, 10083 },
+ { gBattleAnimSpritePalette_084, 10084 },
+ { gBattleAnimSpritePalette_085, 10085 },
+ { gBattleAnimSpritePalette_086, 10086 },
+ { gBattleAnimSpritePalette_087, 10087 },
+ { gBattleAnimSpritePalette_088, 10088 },
+ { gBattleAnimSpritePalette_089, 10089 },
+ { gBattleAnimSpritePalette_090, 10090 },
+ { gBattleAnimSpritePalette_091, 10091 },
+ { gBattleAnimSpritePalette_092, 10092 },
+ { gBattleAnimSpritePalette_093, 10093 },
+ { gBattleAnimSpritePalette_094, 10094 },
+ { gBattleAnimSpritePalette_095, 10095 },
+ { gBattleAnimSpritePalette_096, 10096 },
+ { gBattleAnimSpritePalette_097, 10097 },
+ { gBattleAnimSpritePalette_094, 10098 },
+ { gBattleAnimSpritePalette_099, 10099 },
+ { gBattleAnimSpritePalette_100, 10100 },
+ { gBattleAnimSpritePalette_101, 10101 },
+ { gBattleAnimSpritePalette_101, 10102 },
+ { gBattleAnimSpritePalette_103, 10103 },
+ { gBattleAnimSpritePalette_104, 10104 },
+ { gBattleAnimSpritePalette_105, 10105 },
+ { gBattleAnimSpritePalette_105, 10106 },
+ { gBattleAnimSpritePalette_107, 10107 },
+ { gBattleAnimSpritePalette_107, 10108 },
+ { gBattleAnimSpritePalette_109, 10109 },
+ { gBattleAnimSpritePalette_109, 10110 },
+ { gBattleAnimSpritePalette_111, 10111 },
+ { gBattleAnimSpritePalette_112, 10112 },
+ { gBattleAnimSpritePalette_113, 10113 },
+ { gBattleAnimSpritePalette_114, 10114 },
+ { gBattleAnimSpritePalette_115, 10115 },
+ { gBattleAnimSpritePalette_116, 10116 },
+ { gBattleAnimSpritePalette_117, 10117 },
+ { gBattleAnimSpritePalette_118, 10118 },
+ { gBattleAnimSpritePalette_119, 10119 },
+ { gBattleAnimSpritePalette_120, 10120 },
+ { gBattleAnimSpritePalette_121, 10121 },
+ { gBattleAnimSpritePalette_122, 10122 },
+ { gBattleAnimSpritePalette_122, 10123 },
+ { gBattleAnimSpritePalette_124, 10124 },
+ { gBattleAnimSpritePalette_125, 10125 },
+ { gBattleAnimSpritePalette_126, 10126 },
+ { gBattleAnimSpritePalette_127, 10127 },
+ { gBattleAnimSpritePalette_128, 10128 },
+ { gBattleAnimSpritePalette_128, 10129 },
+ { gBattleAnimSpritePalette_130, 10130 },
+ { gBattleAnimSpritePalette_130, 10131 },
+ { gBattleAnimSpritePalette_132, 10132 },
+ { gBattleAnimSpritePalette_133, 10133 },
+ { gBattleAnimSpritePalette_133, 10134 },
+ { gBattleAnimSpritePalette_135, 10135 },
+ { gBattleAnimSpritePalette_136, 10136 },
+ { gBattleAnimSpritePalette_135, 10137 },
+ { gBattleAnimSpritePalette_135, 10138 },
+ { gBattleAnimSpritePalette_139, 10139 },
+ { gBattleAnimSpritePalette_140, 10140 },
+ { gBattleAnimSpritePalette_141, 10141 },
+ { gBattleAnimSpritePalette_141, 10142 },
+ { gBattleAnimSpritePalette_143, 10143 },
+ { gBattleAnimSpritePalette_144, 10144 },
+ { gBattleAnimSpritePalette_139, 10145 },
+ { gBattleAnimSpritePalette_115, 10146 },
+ { gBattleAnimSpritePalette_147, 10147 },
+ { gBattleAnimSpritePalette_148, 10148 },
+ { gBattleAnimSpritePalette_148, 10149 },
+ { gBattleAnimSpritePalette_150, 10150 },
+ { gBattleAnimSpritePalette_150, 10151 },
+ { gBattleAnimSpritePalette_152, 10152 },
+ { gBattleAnimSpritePalette_153, 10153 },
+ { gBattleAnimSpritePalette_154, 10154 },
+ { gBattleAnimSpritePalette_155, 10155 },
+ { gBattleAnimSpritePalette_156, 10156 },
+ { gBattleAnimSpritePalette_157, 10157 },
+ { gBattleAnimSpritePalette_158, 10158 },
+ { gBattleAnimSpritePalette_159, 10159 },
+ { gBattleAnimSpritePalette_160, 10160 },
+ { gBattleAnimSpritePalette_161, 10161 },
+ { gBattleAnimSpritePalette_162, 10162 },
+ { gBattleAnimSpritePalette_163, 10163 },
+ { gBattleAnimSpritePalette_164, 10164 },
+ { gBattleAnimSpritePalette_165, 10165 },
+ { gBattleAnimSpritePalette_166, 10166 },
+ { gBattleAnimSpritePalette_167, 10167 },
+ { gBattleAnimSpritePalette_168, 10168 },
+ { gBattleAnimSpritePalette_169, 10169 },
+ { gBattleAnimSpritePalette_170, 10170 },
+ { gBattleAnimSpritePalette_171, 10171 },
+ { gBattleAnimSpritePalette_172, 10172 },
+ { gBattleAnimSpritePalette_001, 10173 },
+ { gBattleAnimSpritePalette_174, 10174 },
+ { gBattleAnimSpritePalette_175, 10175 },
+ { gBattleAnimSpritePalette_176, 10176 },
+ { gBattleAnimSpritePalette_177, 10177 },
+ { gBattleAnimSpritePalette_178, 10178 },
+ { gBattleAnimSpritePalette_179, 10179 },
+ { gBattleAnimSpritePalette_179, 10180 },
+ { gBattleAnimSpritePalette_179, 10181 },
+ { gBattleAnimSpritePalette_182, 10182 },
+ { gBattleAnimSpritePalette_183, 10183 },
+ { gBattleAnimSpritePalette_184, 10184 },
+ { gBattleAnimSpritePalette_185, 10185 },
+ { gBattleAnimSpritePalette_186, 10186 },
+ { gBattleAnimSpritePalette_187, 10187 },
+ { gBattleAnimSpritePalette_188, 10188 },
+ { gBattleAnimSpritePalette_189, 10189 },
+ { gBattleAnimSpritePalette_190, 10190 },
+ { gBattleAnimSpritePalette_191, 10191 },
+ { gBattleAnimSpritePalette_192, 10192 },
+ { gBattleAnimSpritePalette_193, 10193 },
+ { gBattleAnimSpritePalette_194, 10194 },
+ { gBattleAnimSpritePalette_195, 10195 },
+ { gBattleAnimSpritePalette_196, 10196 },
+ { gBattleAnimSpritePalette_197, 10197 },
+ { gBattleAnimSpritePalette_198, 10198 },
+ { gBattleAnimSpritePalette_199, 10199 },
+ { gBattleAnimSpritePalette_200, 10200 },
+ { gBattleAnimSpritePalette_201, 10201 },
+ { gBattleAnimSpritePalette_202, 10202 },
+ { gBattleAnimSpritePalette_203, 10203 },
+ { gBattleAnimSpritePalette_204, 10204 },
+ { gBattleAnimSpritePalette_205, 10205 },
+ { gBattleAnimSpritePalette_206, 10206 },
+ { gBattleAnimSpritePalette_207, 10207 },
+ { gBattleAnimSpritePalette_167, 10208 },
+ { gBattleAnimSpritePalette_209, 10209 },
+ { gBattleAnimSpritePalette_210, 10210 },
+ { gBattleAnimSpritePalette_211, 10211 },
+ { gBattleAnimSpritePalette_211, 10212 },
+ { gBattleAnimSpritePalette_211, 10213 },
+ { gBattleAnimSpritePalette_064, 10214 },
+ { gBattleAnimSpritePalette_215, 10215 },
+ { gBattleAnimSpritePalette_216, 10216 },
+ { gBattleAnimSpritePalette_217, 10217 },
+ { gBattleAnimSpritePalette_218, 10218 },
+ { gBattleAnimSpritePalette_219, 10219 },
+ { gBattleAnimSpritePalette_220, 10220 },
+ { gBattleAnimSpritePalette_221, 10221 },
+ { gBattleAnimSpritePalette_222, 10222 },
+ { gBattleAnimSpritePalette_223, 10223 },
+ { gBattleAnimSpritePalette_224, 10224 },
+ { gBattleAnimSpritePalette_225, 10225 },
+ { gBattleAnimSpritePalette_226, 10226 },
+ { gBattleAnimSpritePalette_226, 10227 },
+ { gBattleAnimSpritePalette_228, 10228 },
+ { gBattleAnimSpritePalette_229, 10229 },
+ { gBattleAnimSpritePalette_230, 10230 },
+ { gBattleAnimSpritePalette_231, 10231 },
+ { gBattleAnimSpritePalette_231, 10232 },
+ { gBattleAnimSpritePalette_233, 10233 },
+ { gBattleAnimSpritePalette_234, 10234 },
+ { gBattleAnimSpritePalette_235, 10235 },
+ { gBattleAnimSpritePalette_236, 10236 },
+ { gBattleAnimSpritePalette_237, 10237 },
+ { gBattleAnimSpritePalette_238, 10238 },
+ { gBattleAnimSpritePalette_239, 10239 },
+ { gBattleAnimSpritePalette_240, 10240 },
+ { gBattleAnimSpritePalette_241, 10241 },
+ { gBattleAnimSpritePalette_242, 10242 },
+ { gBattleAnimSpritePalette_243, 10243 },
+ { gBattleAnimSpritePalette_244, 10244 },
+ { gBattleAnimSpritePalette_245, 10245 },
+ { gBattleAnimSpritePalette_245, 10246 },
+ { gBattleAnimSpritePalette_064, 10247 },
+ { gBattleAnimSpritePalette_248, 10248 },
+ { gBattleAnimSpritePalette_249, 10249 },
+ { gBattleAnimSpritePalette_249, 10250 },
+ { gBattleAnimSpritePalette_251, 10251 },
+ { gBattleAnimSpritePalette_252, 10252 },
+ { gBattleAnimSpritePalette_253, 10253 },
+ { gBattleAnimSpritePalette_254, 10254 },
+ { gBattleAnimSpritePalette_255, 10255 },
+ { gBattleAnimSpritePalette_256, 10256 },
+ { gBattleAnimSpritePalette_257, 10257 },
+ { gBattleAnimSpritePalette_258, 10258 },
+ { gBattleAnimSpritePalette_259, 10259 },
+ { gBattleAnimSpritePalette_260, 10260 },
+ { gBattleAnimSpritePalette_261, 10261 },
+ { gBattleAnimSpritePalette_262, 10262 },
+ { gBattleAnimSpritePalette_263, 10263 },
+ { gBattleAnimSpritePalette_264, 10264 },
+ { gBattleAnimSpritePalette_265, 10265 },
+ { gBattleAnimSpritePalette_266, 10266 },
+ { gBattleAnimSpritePalette_267, 10267 },
+ { gBattleAnimSpritePalette_268, 10268 },
+ { gBattleAnimSpritePalette_269, 10269 },
+ { gBattleAnimSpritePalette_270, 10270 },
+ { gBattleAnimSpritePalette_271, 10271 },
+ { gBattleAnimSpritePalette_272, 10272 },
+ { gBattleAnimSpritePalette_272, 10273 },
+ { gBattleAnimSpritePalette_274, 10274 },
+ { gBattleAnimSpritePalette_274, 10275 },
+ { gBattleAnimSpritePalette_274, 10276 },
+ { gBattleAnimSpritePalette_277, 10277 },
+ { gBattleAnimSpritePalette_278, 10278 },
+ { gBattleAnimSpritePalette_279, 10279 },
+ { gBattleAnimSpritePalette_280, 10280 },
+ { gBattleAnimSpritePalette_281, 10281 },
+ { gBattleAnimSpritePalette_282, 10282 },
+ { gBattleAnimSpritePalette_283, 10283 },
+ { gBattleAnimSpritePalette_284, 10284 },
+ { gBattleAnimSpritePalette_285, 10285 },
+ { gBattleAnimSpritePalette_286, 10286 },
+ { gBattleAnimSpritePalette_287, 10287 },
+ { gBattleAnimSpritePalette_288, 10288 },
};
const struct BattleAnimBackground gBattleAnimBackgroundTable[] =
diff --git a/src/battle/battle_anim_812C144.c b/src/battle/battle_anim_812C144.c
index 6edc56549..4614f9aa9 100644
--- a/src/battle/battle_anim_812C144.c
+++ b/src/battle/battle_anim_812C144.c
@@ -31,35 +31,17 @@ extern u16 gBattle_BG2_X;
extern u16 gBattle_BG2_Y;
extern const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7220;
-extern const struct SpriteTemplate gSpriteTemplate_8402500;
-extern const struct SpriteTemplate gSpriteTemplate_84028CC;
-extern const struct SpriteTemplate gSpriteTemplate_840294C;
-extern const struct SpriteTemplate gSpriteTemplate_84029AC;
extern const union AffineAnimCmd *const gSpriteAffineAnimTable_81E7C18[];
extern const union AffineAnimCmd *const gSpriteAffineAnimTable_81E7BEC[];
-extern const union AffineAnimCmd gUnknown_08402400[];
-extern const union AffineAnimCmd gUnknown_084024B0[];
-extern const union AffineAnimCmd gUnknown_08402518[];
-extern const union AffineAnimCmd gUnknown_08402540[];
-extern const union AffineAnimCmd gUnknown_08402590[];
-extern const union AffineAnimCmd gUnknown_08402610[];
-extern const union AffineAnimCmd gUnknown_08402750[];
-extern const union AffineAnimCmd gUnknown_084028AC[];
-extern const union AffineAnimCmd gUnknown_084029DC[];
extern const u32 gUnknown_08D2AA98[];
extern const u32 gUnknown_08D2A9E0[];
extern const u16 gUnknown_08D2AA80[];
-extern const s8 gUnknown_084025C0[];
-extern const s8 gUnknown_08402604[];
-extern const u8 gUnknown_08402608[];
-extern const struct SpriteTemplate gBattleAnimSpriteTemplate_84025EC;
extern const u8 gUnknown_08D2E014[];
extern const u8 gUnknown_08D2E170[];
extern const u16 gUnknown_08D2E150[];
extern u8 gBattleMonForms[];
extern u8 gBankSpriteIds[];
extern u16 gBattlerPartyIndexes[];
-extern s16 gUnknown_084028E4[];
extern u8 sub_8046234(s16 x, s16 y, u8 a3);
extern void sub_80DA48C(struct Sprite *);
@@ -116,9 +98,1082 @@ static void sub_8131408(u8 taskId);
static void sub_81315C8(struct Sprite *sprite);
static void sub_8131810(u8 taskId);
static void sub_8131838(struct Sprite *sprite);
+static void sub_812C144(struct Sprite *sprite);
+static void sub_812C220(struct Sprite *sprite);
+static void sub_812C2BC(struct Sprite *sprite);
+static void sub_812C358(struct Sprite *sprite);
+static void sub_812C720(struct Sprite *sprite);
+static void sub_812C80C(struct Sprite *sprite);
+static void sub_812C848(struct Sprite *sprite);
+static void sub_812C908(struct Sprite *sprite);
+static void sub_812C990(struct Sprite *sprite);
+static void sub_812CAFC(struct Sprite *sprite);
+static void sub_812CC28(struct Sprite *sprite);
+static void sub_812CCE8(struct Sprite *sprite);
+static void sub_812D294(struct Sprite *sprite);
+static void sub_812D3AC(struct Sprite *sprite);
+static void sub_812D4B4(struct Sprite *sprite);
+static void sub_812D588(struct Sprite *sprite);
+static void sub_812DEAC(struct Sprite *sprite);
+static void sub_812D724(struct Sprite *sprite);
+static void sub_812E4F0(struct Sprite *sprite);
+static void sub_812E7A0(struct Sprite *sprite);
+static void sub_812EA4C(struct Sprite *sprite);
+static void sub_812EC78(struct Sprite *sprite);
+static void sub_812ED84(struct Sprite *sprite);
+static void sub_812EEA4(struct Sprite *sprite);
+static void sub_812F88C(struct Sprite *sprite);
+static void sub_812F948(struct Sprite *sprite);
+static void sub_812FF94(struct Sprite *sprite);
+static void sub_81300F4(struct Sprite *sprite);
+static void sub_81304DC(struct Sprite *sprite);
+static void sub_813051C(struct Sprite *sprite);
+static void sub_81307B0(struct Sprite *sprite);
+static void sub_8130A2C(struct Sprite *sprite);
+static void sub_8130AEC(struct Sprite *sprite);
+static void sub_8130F5C(struct Sprite *sprite);
+static void sub_8131264(struct Sprite *sprite);
+extern void sub_80D1FDC(struct Sprite *sprite);// kiss_fountain.c
+static void sub_8131564(struct Sprite *sprite);
+
+/*static*/ void sub_8131EB8(struct Sprite *sprite);// rest not yet decompiled
+/*static*/ void sub_8132370(struct Sprite *sprite);
+/*static*/ void sub_81323E0(struct Sprite *sprite);
+
+const union AnimCmd gSpriteAnim_8402164[] =
+{
+ 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 gSpriteAnimTable_840217C[] =
+{
+ gSpriteAnim_8402164,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_8402180 =
+{
+ .tileTag = 10137,
+ .paletteTag = 10137,
+ .oam = &gOamData_837E054,
+ .anims = gSpriteAnimTable_840217C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80793C4,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_8402198 =
+{
+ .tileTag = 10016,
+ .paletteTag = 10016,
+ .oam = &gOamData_837DF54,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_812C144,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_84021B0 =
+{
+ .tileTag = 10017,
+ .paletteTag = 10017,
+ .oam = &gOamData_837DF24,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80794A8,
+};
+
+const union AnimCmd gSpriteAnim_84021C8[] =
+{
+ ANIMCMD_FRAME(0, 40),
+ ANIMCMD_FRAME(16, 8),
+ ANIMCMD_FRAME(32, 40),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_84021D8[] =
+{
+ gSpriteAnim_84021C8,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_84021DC =
+{
+ .tileTag = 10190,
+ .paletteTag = 10190,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_84021D8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80793C4,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_84021F4 =
+{
+ .tileTag = 10191,
+ .paletteTag = 10191,
+ .oam = &gOamData_837E05C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_812C220,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_840220C =
+{
+ .tileTag = 10189,
+ .paletteTag = 10189,
+ .oam = &gOamData_837DF94,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_812C2BC,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_8402224[] =
+{
+ AFFINEANIMCMD_FRAME(0x180, 0x180, 0, 0),
+ AFFINEANIMCMD_FRAME(0xFFE0, 0x18, 0, 5),
+ AFFINEANIMCMD_FRAME(0x18, 0xFFE0, 0, 5),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_8402244[] =
+{
+ AFFINEANIMCMD_FRAME(0x30, 0x30, 0, 0),
+ AFFINEANIMCMD_FRAME(0x20, 0x20, 0, 6),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_840225C[] =
+{
+ gSpriteAffineAnim_8402224,
+ gSpriteAffineAnim_8402244,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_8402264 =
+{
+ .tileTag = 10187,
+ .paletteTag = 10187,
+ .oam = &gOamData_837E11C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_840225C,
+ .callback = sub_812C358,
+};
+const struct SpriteTemplate gBattleAnimSpriteTemplate_840227C =
+{
+ .tileTag = 10152,
+ .paletteTag = 10152,
+ .oam = &gOamData_837DF2C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_812C720,
+};
-void sub_812C144(struct Sprite *sprite)
+const union AnimCmd gSpriteAnim_8402294[] =
+{
+ 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 gSpriteAnimTable_84022AC[] =
+{
+ gSpriteAnim_8402294,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_84022B0 =
+{
+ .tileTag = 10027,
+ .paletteTag = 10027,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_84022AC,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_812C80C,
+};
+
+const union AnimCmd gSpriteAnim_84022C8[] =
+{
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_84022D0[] =
+{
+ gSpriteAnim_84022C8,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_84022D4[] =
+{
+ AFFINEANIMCMD_FRAME(0xFFF9, 0xFFF9, -3, 16),
+ AFFINEANIMCMD_FRAME(0x7, 0x7, 3, 16),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_84022EC[] =
+{
+ gSpriteAffineAnim_84022D4,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_84022F0 =
+{
+ .tileTag = 10228,
+ .paletteTag = 10228,
+ .oam = &gOamData_837DF94,
+ .anims = gSpriteAnimTable_84022D0,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_84022EC,
+ .callback = sub_812C848,
+};
+
+const union AnimCmd gSpriteAnim_8402308[] =
+{
+ ANIMCMD_FRAME(0, 8),
+ ANIMCMD_FRAME(16, 16),
+ ANIMCMD_FRAME(32, 4),
+ ANIMCMD_FRAME(48, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_840231C[] =
+{
+ gSpriteAnim_8402308,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_8402320[] =
+{
+ AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0),
+ AFFINEANIMCMD_FRAME(0xFFE0, 0xFFE0, 0, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_8402338[] =
+{
+ gSpriteAffineAnim_8402320,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_840233C =
+{
+ .tileTag = 10192,
+ .paletteTag = 10192,
+ .oam = &gOamData_837DFF4,
+ .anims = gSpriteAnimTable_840231C,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_8402338,
+ .callback = sub_812C908,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_8402354[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x180, 0, 0),
+ AFFINEANIMCMD_FRAME(0x10, 0x0, 0, 20),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_840236C[] =
+{
+ AFFINEANIMCMD_FRAME(0x140, 0x180, 0, 0),
+ AFFINEANIMCMD_FRAME(0xFFF0, 0x0, 0, 19),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_8402384[] =
+{
+ gSpriteAffineAnim_8402354,
+ gSpriteAffineAnim_840236C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_840238C =
+{
+ .tileTag = 10227,
+ .paletteTag = 10227,
+ .oam = &gOamData_837DFFC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_8402384,
+ .callback = sub_812C990,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_84023A4 =
+{
+ .tileTag = 10247,
+ .paletteTag = 10247,
+ .oam = &gOamData_837DF34,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_812CAFC,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_84023BC =
+{
+ .tileTag = 10247,
+ .paletteTag = 10247,
+ .oam = &gOamData_837DF34,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_812CC28,
+};
+
+const union AnimCmd gSpriteAnim_84023D4[] =
+{
+ ANIMCMD_FRAME(0, 2),
+ ANIMCMD_FRAME(8, 2),
+ ANIMCMD_FRAME(16, 2),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_84023E4[] =
+{
+ gSpriteAnim_84023D4,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_84023E8 =
+{
+ .tileTag = 10229,
+ .paletteTag = 10229,
+ .oam = &gOamData_837DF54,
+ .anims = gSpriteAnimTable_84023E4,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_812CCE8,
+};
+
+const union AffineAnimCmd gUnknown_08402400[] =
+{
+ AFFINEANIMCMD_FRAME(-12, 8, 0, 4),
+ AFFINEANIMCMD_FRAME(20, -20, 0, 4),
+ AFFINEANIMCMD_FRAME(-8, 12, 0, 4),
+ AFFINEANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_8402420[] =
+{
+ ANIMCMD_FRAME(0, 8),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_8402428[] =
+{
+ gSpriteAnim_8402420,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_840242C[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 5, 40),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 10, 10),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 15, 10),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 20, 40),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_8402454[] =
+{
+ gSpriteAffineAnim_840242C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_8402458 =
+{
+ .tileTag = 10230,
+ .paletteTag = 10230,
+ .oam = &gOamData_837DFFC,
+ .anims = gSpriteAnimTable_8402428,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_8402454,
+ .callback = sub_812D294,
+};
+
+const union AnimCmd gSpriteAnim_8402470[] =
+{
+ 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 gSpriteAnimTable_8402494[] =
+{
+ gSpriteAnim_8402470,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_8402498 =
+{
+ .tileTag = 10234,
+ .paletteTag = 10234,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_8402494,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80793C4,
+};
+
+const union AffineAnimCmd gUnknown_084024B0[] =
+{
+ AFFINEANIMCMD_FRAME(-12, 20, 0, 8),
+ AFFINEANIMCMD_FRAME(12, -20, 0, 8),
+ AFFINEANIMCMD_LOOP(2),
+ AFFINEANIMCMD_END,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_84024D0 =
+{
+ .tileTag = 10226,
+ .paletteTag = 10226,
+ .oam = &gOamData_837DF2C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_812D3AC,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_84024E8 =
+{
+ .tileTag = 10233,
+ .paletteTag = 10233,
+ .oam = &gOamData_837DF2C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_812D4B4,
+};
+
+const struct SpriteTemplate gSpriteTemplate_8402500 =
+{
+ .tileTag = 10233,
+ .paletteTag = 10233,
+ .oam = &gOamData_837DF24,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_812D588,
+};
+
+const union AffineAnimCmd gUnknown_08402518[] =
+{
+ 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_08402540[] =
+{
+ 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 gBattleAnimSpriteTemplate_8402578 =
+{
+ .tileTag = 10236,
+ .paletteTag = 10236,
+ .oam = &gOamData_837DF24,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_812D724,
+};
+
+const union AffineAnimCmd gUnknown_08402590[] =
+{
+ 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_084025C0[] =
+{
+ 0xE8,
+ 0x18,
+ 0xFC,
+ 0x00,
+};
+
+const union AnimCmd gSpriteAnim_84025C4[] =
+{
+ ANIMCMD_FRAME(0, 6),
+ ANIMCMD_FRAME(4, 6),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd gSpriteAnim_84025D0[] =
+{
+ ANIMCMD_FRAME(8, 6),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_84025D8[] =
+{
+ ANIMCMD_FRAME(12, 6),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_84025E0[] =
+{
+ gSpriteAnim_84025C4,
+ gSpriteAnim_84025D0,
+ gSpriteAnim_84025D8,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_84025EC =
+{
+ .tileTag = 10241,
+ .paletteTag = 10241,
+ .oam = &gOamData_837DF2C,
+ .anims = gSpriteAnimTable_84025E0,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_812DEAC,
+};
+
+const s8 gUnknown_08402604[] =
+{
+ 0x78,
+ 0x50,
+ 0x28,
+ 0x00,
+};
+
+const u8 gUnknown_08402608[] =
+{
+ 0,
+ 0,
+ 0,
+ 0,
+ 50,
+};
+
+const union AffineAnimCmd gUnknown_08402610[] =
+{
+ AFFINEANIMCMD_FRAME(0, -15, 0, 7),
+ AFFINEANIMCMD_FRAME(0, 15, 0, 7),
+ AFFINEANIMCMD_LOOP(2),
+ AFFINEANIMCMD_END,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_8402630 =
+{
+ .tileTag = 10087,
+ .paletteTag = 10087,
+ .oam = &gOamData_837DF2C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_812E4F0,
+};
+
+const union AnimCmd gSpriteAnim_8402648[] =
+{
+ 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 gSpriteAnim_840266C[] =
+{
+ 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 gSpriteAnim_8402690[] =
+{
+ ANIMCMD_FRAME(0, 8),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_8402698[] =
+{
+ gSpriteAnim_8402648,
+ gSpriteAnim_840266C,
+ gSpriteAnim_8402690,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_84026A4 =
+{
+ .tileTag = 10238,
+ .paletteTag = 10238,
+ .oam = &gOamData_837DF24,
+ .anims = gSpriteAnimTable_8402698,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_812E7A0,
+};
+
+const u16 gUnknown_4026BC[] = INCBIN_U16("graphics/unknown/unknown_4026BC.gbapal");
+
+const union AnimCmd gSpriteAnim_84026DC[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_FRAME(4, 9),
+ ANIMCMD_FRAME(8, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_84026EC[] =
+{
+ gSpriteAnim_84026DC,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_84026F0 =
+{
+ .tileTag = 10239,
+ .paletteTag = 10239,
+ .oam = &gOamData_837DF2C,
+ .anims = gSpriteAnimTable_84026EC,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_812EA4C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_8402708 =
+{
+ .tileTag = 10240,
+ .paletteTag = 10240,
+ .oam = &gOamData_837DF24,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_812EC78,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_8402720 =
+{
+ .tileTag = 10227,
+ .paletteTag = 10227,
+ .oam = &gOamData_837DFFC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_8402384,
+ .callback = sub_812ED84,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_8402738 =
+{
+ .tileTag = 10236,
+ .paletteTag = 10236,
+ .oam = &gOamData_837DF24,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_812EEA4,
+};
+
+const union AffineAnimCmd gUnknown_08402750[] =
+{
+ 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 gSpriteAffineAnim_8402780[] =
+{
+ AFFINEANIMCMD_FRAME(0x80, 0x80, 0, 0),
+ AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 8),
+ AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 8),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_84027A0[] =
+{
+ AFFINEANIMCMD_FRAME(0xC0, 0xC0, 0, 0),
+ AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 8),
+ AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 8),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_84027C0[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 8),
+ AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 8),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_84027E0[] =
+{
+ gSpriteAffineAnim_8402780,
+ gSpriteAffineAnim_84027A0,
+ gSpriteAffineAnim_84027C0,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_84027EC =
+{
+ .tileTag = 10242,
+ .paletteTag = 10242,
+ .oam = &gOamData_837DF94,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_84027E0,
+ .callback = sub_812F88C,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_8402804[] =
+{
+ AFFINEANIMCMD_FRAME(0x80, 0x80, 0, 0),
+ AFFINEANIMCMD_FRAME(0xFFFC, 0xFFFA, 0, 16),
+ AFFINEANIMCMD_FRAME(0x4, 0x6, 0, 16),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_8402824[] =
+{
+ AFFINEANIMCMD_FRAME(0xC0, 0xC0, 0, 0),
+ AFFINEANIMCMD_FRAME(0x4, 0x6, 0, 16),
+ AFFINEANIMCMD_FRAME(0xFFFC, 0xFFFA, 0, 16),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_8402844[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0x4, 0x6, 0, 16),
+ AFFINEANIMCMD_FRAME(0xFFFC, 0xFFFA, 0, 16),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_8402864[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0x8, 0xA, 0, 30),
+ AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF6, 0, 16),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_8402884[] =
+{
+ gSpriteAffineAnim_8402804,
+ gSpriteAffineAnim_8402824,
+ gSpriteAffineAnim_8402844,
+ gSpriteAffineAnim_8402864,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_8402894 =
+{
+ .tileTag = 10242,
+ .paletteTag = 10242,
+ .oam = &gOamData_837DFF4,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_8402884,
+ .callback = sub_812F948,
+};
+
+const union AffineAnimCmd gUnknown_084028AC[] =
+{
+ AFFINEANIMCMD_FRAME(-16, 16, 0, 6),
+ AFFINEANIMCMD_FRAME(16, -16, 0, 12),
+ AFFINEANIMCMD_FRAME(-16, 16, 0, 6),
+ AFFINEANIMCMD_END,
+};
+
+const struct SpriteTemplate gSpriteTemplate_84028CC =
+{
+ .tileTag = 10243,
+ .paletteTag = 10243,
+ .oam = &gOamData_837DF24,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_812FF94,
+};
+
+const u16 gUnknown_084028E4[] = INCBIN_U16("graphics/battle_anims/sprites/effect.gbapal");
+
+const union AnimCmd gSpriteAnim_8402914[] =
+{
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_FRAME(16, 3),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd gSpriteAnim_8402920[] =
+{
+ ANIMCMD_FRAME(32, 3),
+ ANIMCMD_FRAME(48, 3),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_840292C[] =
+{
+ gSpriteAnim_8402914,
+ gSpriteAnim_8402920,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_8402934 =
+{
+ .tileTag = 10053,
+ .paletteTag = 10053,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_840292C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_81300F4,
+};
+
+const struct SpriteTemplate gSpriteTemplate_840294C =
+{
+ .tileTag = 10248,
+ .paletteTag = 10248,
+ .oam = &gOamData_837DF24,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_81304DC,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_8402964 =
+{
+ .tileTag = 10252,
+ .paletteTag = 10252,
+ .oam = &gOamData_837DF34,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_813051C,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_840297C[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -4, 24),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_840298C[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, -64, 0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 4, 24),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_84029A4[] =
+{
+ gSpriteAffineAnim_840297C,
+ gSpriteAffineAnim_840298C,
+};
+
+const struct SpriteTemplate gSpriteTemplate_84029AC =
+{
+ .tileTag = 10254,
+ .paletteTag = 10254,
+ .oam = &gOamData_837DF94,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_84029A4,
+ .callback = SpriteCallbackDummy,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_84029C4 =
+{
+ .tileTag = 10247,
+ .paletteTag = 10247,
+ .oam = &gOamData_837DF34,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_81307B0,
+};
+
+const union AffineAnimCmd gUnknown_084029DC[] =
+{
+ AFFINEANIMCMD_FRAME(0, -16, 0, 6),
+ AFFINEANIMCMD_FRAME(0, 16, 0, 6),
+ AFFINEANIMCMD_END,//0
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_84029F4 =
+{
+ .tileTag = 10255,
+ .paletteTag = 10255,
+ .oam = &gOamData_837DF34,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8130A2C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_8402A0C =
+{
+ .tileTag = 10247,
+ .paletteTag = 10247,
+ .oam = &gOamData_837DF34,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8130AEC,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_8402A24 =
+{
+ .tileTag = 10258,
+ .paletteTag = 10258,
+ .oam = &gOamData_837E054,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8130F5C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_8402A3C =
+{
+ .tileTag = 10233,
+ .paletteTag = 10233,
+ .oam = &gOamData_837DF2C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8131264,
+};
+
+const struct SpriteTemplate gSpriteTemplate_8402A54 =
+{
+ .tileTag = 10233,
+ .paletteTag = 10233,
+ .oam = &gOamData_837DF2C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D1FDC,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_8402A6C =
+{
+ .tileTag = 10250,
+ .paletteTag = 10250,
+ .oam = &gOamData_837DF3C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8131564,
+};
+
+const struct SpriteTemplate gSpriteTemplate_8402A84 =
+{
+ .tileTag = 10224,
+ .paletteTag = 10224,
+ .oam = &gOamData_837DF34,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8131EB8,
+};
+
+const union AnimCmd gSpriteAnim_8402A9C[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(64, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_8402AA8[] =
+{
+ gSpriteAnim_8402A9C,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_8402AAC[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -4, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_8402AC4[] =
+{
+ AFFINEANIMCMD_FRAME(0xFF00, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 4, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_8402ADC[] =
+{
+ gSpriteAffineAnim_8402AAC,
+ gSpriteAffineAnim_8402AC4,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_8402AE4 =
+{
+ .tileTag = 10277,
+ .paletteTag = 10277,
+ .oam = &gOamData_837DF9C,
+ .anims = gSpriteAnimTable_8402AA8,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_8402ADC,
+ .callback = sub_8132370,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_8402AFC[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -4, 64),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_8402B0C[] =
+{
+ gSpriteAffineAnim_8402AFC,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_8402B10 =
+{
+ .tileTag = 10278,
+ .paletteTag = 10278,
+ .oam = &gOamData_837E0BC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_8402B0C,
+ .callback = sub_81323E0,
+};
+
+const union AffineAnimCmd gUnknown_08402B28[] =
+{
+ 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,
+};
+
+static void sub_812C144(struct Sprite *sprite)
{
sprite->pos1.x += gBattleAnimArgs[0];
sprite->pos1.y += gBattleAnimArgs[1];
@@ -157,7 +1212,7 @@ void sub_812C1D0(u8 taskId)
}
-void sub_812C220(struct Sprite *sprite)
+static void sub_812C220(struct Sprite *sprite)
{
sprite->data[0] = 90;
sprite->callback = WaitAnimForDuration;
@@ -184,13 +1239,13 @@ static void sub_812C2A4(struct Sprite *sprite)
DestroyAnimSprite(sprite);
}
-void sub_812C2BC(struct Sprite *sprite)
+static void sub_812C2BC(struct Sprite *sprite)
{
u16 rotation;
u8 x = GetBattlerSpriteCoord(gAnimBankTarget, 2);
u8 y = GetBattlerSpriteCoord(gAnimBankTarget, 3);
- sub_8078764(sprite, 1);
+ sub_8078764(sprite, TRUE);
rotation = ArcTan2Neg(sprite->pos1.x - x, sprite->pos1.y - y);
rotation += 0x6000;
@@ -206,7 +1261,7 @@ void sub_812C2BC(struct Sprite *sprite)
StoreSpriteCallbackInData(sprite, DestroyAnimSprite);
}
-void sub_812C358(struct Sprite *sprite)
+static void sub_812C358(struct Sprite *sprite)
{
REG_BLDCNT = 0x3F40;
REG_BLDALPHA = 0x1000;
@@ -366,7 +1421,7 @@ static void sub_812C64C(u8 taskId)
DestroyTask(taskId);
}
-void sub_812C720(struct Sprite *sprite)
+static void sub_812C720(struct Sprite *sprite)
{
u16 x;
u16 y;
@@ -406,7 +1461,7 @@ static void sub_812C7C8(struct Sprite *sprite)
DestroyAnimSprite(sprite);
}
-void sub_812C80C(struct Sprite *sprite)
+static void sub_812C80C(struct Sprite *sprite)
{
sub_8078650(sprite);
sub_807867C(sprite, gBattleAnimArgs[0]);
@@ -416,7 +1471,7 @@ void sub_812C80C(struct Sprite *sprite)
}
// This is likely fakematching due to some strange type casting behavior.
-void sub_812C848(struct Sprite *sprite)
+static void sub_812C848(struct Sprite *sprite)
{
int var0;
int var1;
@@ -459,7 +1514,7 @@ void sub_812C848(struct Sprite *sprite)
DestroyAnimSprite(sprite);
}
-void sub_812C908(struct Sprite *sprite)
+static void sub_812C908(struct Sprite *sprite)
{
if (sprite->animEnded)
DestroyAnimSprite(sprite);
@@ -485,7 +1540,7 @@ void sub_812C960(u8 taskId)
DestroyAnimVisualTask(taskId);
}
-void sub_812C990(struct Sprite *sprite)
+static void sub_812C990(struct Sprite *sprite)
{
REG_WINOUT = 0x1F3F;
REG_DISPCNT |= DISPCNT_OBJWIN_ON;
@@ -494,7 +1549,7 @@ void sub_812C990(struct Sprite *sprite)
REG_WIN0H = 0;
REG_WIN0V = 0;
- sub_8078764(sprite, 0);
+ sub_8078764(sprite, FALSE);
sprite->oam.objMode = ST_OAM_OBJ_WINDOW;
sprite->invisible = 1;
@@ -550,7 +1605,7 @@ static void sub_812CAD0(struct Sprite *sprite)
DestroyAnimSprite(sprite);
}
-void sub_812CAFC(struct Sprite *sprite)
+static void sub_812CAFC(struct Sprite *sprite)
{
if (gBattleAnimArgs[3] == 0)
{
@@ -611,7 +1666,7 @@ static void sub_812CBB4(struct Sprite *sprite)
DestroyAnimSprite(sprite);
}
-void sub_812CC28(struct Sprite *sprite)
+static void sub_812CC28(struct Sprite *sprite)
{
sprite->oam.objMode = ST_OAM_OBJ_WINDOW;
sprite->data[3] = 255;
@@ -644,7 +1699,7 @@ void sub_812CCA8(u8 taskId)
DestroyAnimVisualTask(taskId);
}
-void sub_812CCE8(struct Sprite *sprite)
+static void sub_812CCE8(struct Sprite *sprite)
{
int var0;
if (gBattleAnimArgs[0] == 0)
@@ -955,7 +2010,7 @@ static void sub_812D254(struct Sprite *sprite)
}
}
-void sub_812D294(struct Sprite *sprite)
+static void sub_812D294(struct Sprite *sprite)
{
if (sprite->data[0] == 0)
InitAnimSpritePos(sprite, 0);
@@ -1002,7 +2057,7 @@ void sub_812D350(u8 taskId)
}
}
-void sub_812D3AC(struct Sprite *sprite)
+static void sub_812D3AC(struct Sprite *sprite)
{
u8 spriteId = GetAnimBattlerSpriteId(0);
@@ -1045,7 +2100,7 @@ void sub_812D3AC(struct Sprite *sprite)
}
}
-void sub_812D4B4(struct Sprite *sprite)
+static void sub_812D4B4(struct Sprite *sprite)
{
if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER)
sprite->pos1.x = -16;
@@ -1083,7 +2138,7 @@ static void sub_812D4EC(struct Sprite *sprite)
DestroyAnimSprite(sprite);
}
-void sub_812D588(struct Sprite *sprite)
+static void sub_812D588(struct Sprite *sprite)
{
u8 rand;
s8 y;
@@ -1158,7 +2213,7 @@ void sub_812D6CC(u8 taskId)
}
}
-void sub_812D724(struct Sprite *sprite)
+static void sub_812D724(struct Sprite *sprite)
{
switch (sprite->data[0])
{
@@ -1414,7 +2469,7 @@ void sub_812DB84(u8 taskId)
}
}
-void sub_812DEAC(struct Sprite *sprite)
+static void sub_812DEAC(struct Sprite *sprite)
{
s16 var0;
u8 spriteId1;
@@ -1635,7 +2690,7 @@ void sub_812E498(u8 taskId)
}
}
-void sub_812E4F0(struct Sprite *sprite)
+static void sub_812E4F0(struct Sprite *sprite)
{
if (sprite->data[0] == 0)
{
@@ -1752,7 +2807,7 @@ static void sub_812E638(u8 taskId)
}
}
-void sub_812E7A0(struct Sprite *sprite)
+static void sub_812E7A0(struct Sprite *sprite)
{
if (GetBattlerSide(gAnimBankAttacker) == B_SIDE_PLAYER)
{
@@ -1883,7 +2938,7 @@ static void sub_812E8B4(u8 taskId)
}
}
-void sub_812EA4C(struct Sprite *sprite)
+static void sub_812EA4C(struct Sprite *sprite)
{
if (sprite->data[0] == 0)
{
@@ -1974,7 +3029,7 @@ void sub_812EB10(u8 taskId)
}
}
-void sub_812EC78(struct Sprite *sprite)
+static void sub_812EC78(struct Sprite *sprite)
{
u8 tileOffset;
int rand1;
@@ -2027,7 +3082,7 @@ static void sub_812ED24(struct Sprite *sprite)
DestroyAnimSprite(sprite);
}
-void sub_812ED84(struct Sprite *sprite)
+static void sub_812ED84(struct Sprite *sprite)
{
REG_WINOUT = 0x1F3F;
REG_DISPCNT |= DISPCNT_OBJWIN_ON;
@@ -2037,7 +3092,7 @@ void sub_812ED84(struct Sprite *sprite)
REG_WIN0V = 0;
sprite->data[0] = gBattleAnimArgs[2];
- sub_8078764(sprite, 0);
+ sub_8078764(sprite, FALSE);
sprite->oam.objMode = ST_OAM_OBJ_WINDOW;
sprite->invisible = 1;
sprite->callback = sub_812EE00;
@@ -2074,7 +3129,7 @@ static void sub_812EE00(struct Sprite *sprite)
}
}
-void sub_812EEA4(struct Sprite *sprite)
+static void sub_812EEA4(struct Sprite *sprite)
{
sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2);
sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3);
@@ -2757,7 +3812,7 @@ void sub_812F86C(struct Sprite *sprite)
sprite->pos1.y = sprite->data[5] >> 4;
}
-void sub_812F88C(struct Sprite *sprite)
+static void sub_812F88C(struct Sprite *sprite)
{
s16 x = sprite->pos1.x;
s16 y = sprite->pos1.y;
@@ -2790,7 +3845,7 @@ static void sub_812F8DC(struct Sprite *sprite)
}
}
-void sub_812F948(struct Sprite *sprite)
+static void sub_812F948(struct Sprite *sprite)
{
sprite->data[0] = gBattleAnimArgs[3];
StartSpriteAffineAnim(sprite, gBattleAnimArgs[0]);
@@ -3039,7 +4094,7 @@ static void sub_812FEB8(u8 taskId, bool8 arg1)
}
}
-void sub_812FF94(struct Sprite *sprite)
+static void sub_812FF94(struct Sprite *sprite)
{
sprite->pos1.x += sprite->data[1];
sprite->pos1.y += sprite->data[2];
@@ -3094,7 +4149,7 @@ void sub_81300A4(u8 taskId)
gUnknown_08D2E150);
}
-void sub_81300F4(struct Sprite *sprite)
+static void sub_81300F4(struct Sprite *sprite)
{
if (GetBattlerSide(gAnimBankAttacker) == B_SIDE_OPPONENT)
gBattleAnimArgs[0] = -gBattleAnimArgs[0];
@@ -3259,7 +4314,7 @@ static void sub_8130424(s16 arg0, s16 arg1, s16 arg2, s16 arg3, u8 arg4, u8 arg5
*y = y2 >> 8;
}
-void sub_81304DC(struct Sprite *sprite)
+static void sub_81304DC(struct Sprite *sprite)
{
if (++sprite->data[0] > 36)
{
@@ -3268,7 +4323,7 @@ void sub_81304DC(struct Sprite *sprite)
}
}
-void sub_813051C(struct Sprite *sprite)
+static void sub_813051C(struct Sprite *sprite)
{
sprite->pos1.x = gBattleAnimArgs[0];
sprite->pos1.y = gBattleAnimArgs[1];
@@ -3349,7 +4404,7 @@ static void sub_81306A4(u8 taskId)
}
}
-void sub_81307B0(struct Sprite *sprite)
+static void sub_81307B0(struct Sprite *sprite)
{
u8 battler;
@@ -3465,7 +4520,7 @@ static void sub_8130970(u8 taskId)
}
}
-void sub_8130A2C(struct Sprite *sprite)
+static void sub_8130A2C(struct Sprite *sprite)
{
if (gBattleAnimArgs[0] == 0)
{
@@ -3500,7 +4555,7 @@ static void sub_8130A94(struct Sprite *sprite)
}
}
-void sub_8130AEC(struct Sprite *sprite)
+static void sub_8130AEC(struct Sprite *sprite)
{
if (gBattleAnimArgs[0] == 0)
{
@@ -3715,7 +4770,7 @@ static void sub_8130DBC(u8 taskId)
}
}
-void sub_8130F5C(struct Sprite *sprite)
+static void sub_8130F5C(struct Sprite *sprite)
{
if (gBattleAnimArgs[0] == 0)
{
@@ -3855,7 +4910,7 @@ static void sub_81311E4(struct Sprite *sprite)
sprite->data[5]++;
}
-void sub_8131264(struct Sprite *sprite)
+static void sub_8131264(struct Sprite *sprite)
{
GetBattlerSpriteCoord(gAnimBankTarget, 2); // unused local variable
GetBattlerSpriteCoord(gAnimBankTarget, 3); // unused local variable
@@ -3973,7 +5028,7 @@ static void sub_8131408(u8 taskId)
}
}
-void sub_8131564(struct Sprite *sprite)
+static void sub_8131564(struct Sprite *sprite)
{
s16 y2;
diff --git a/src/battle/battle_anim_813F0F4.c b/src/battle/battle_anim_813F0F4.c
index f112c59aa..312cdf8c9 100755
--- a/src/battle/battle_anim_813F0F4.c
+++ b/src/battle/battle_anim_813F0F4.c
@@ -36,14 +36,9 @@ extern u8 gEffectBank;
extern const u8 gUnknown_08D2EE48[];
extern const u8 gUnknown_08D2EDFC[];
extern const u16 gUnknown_08D2E150[];
-extern const struct CompressedSpritePalette gBallOpenParticlePalettes[];
extern const struct SpriteTemplate gSpriteTemplates_840B3B4[];
extern const struct SpriteTemplate gSpriteTemplate_8402500;
extern const struct SpriteTemplate gBattleAnimSpriteTemplate_84024E8;
-extern const u8 gBallOpenParticleAnimNums[];
-extern const struct CompressedSpriteSheet gBallOpenParticleSpritesheets[];
-extern const TaskFunc gBallOpenParticleAnimationFuncs[];
-extern const u16 gUnknown_0840B4D4[];
extern const struct CompressedSpriteSheet gBattleAnimPicTable[];
extern const struct CompressedSpritePalette gBattleAnimPaletteTable[];
@@ -86,6 +81,284 @@ static void sub_8141CBC(struct Sprite *sprite);
static void sub_8141CF4(struct Sprite *sprite);
static void sub_8141D20(struct Sprite *sprite);
+extern const u8 gBattleAnimSpriteSheet_Particles[];
+const struct CompressedSpriteSheet gBallOpenParticleSpritesheets[] =
+{
+ {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6EC},
+ {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6ED},
+ {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6EE},
+ {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6EF},
+ {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6F0},
+ {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6F1},
+ {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6F2},
+ {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6F3},
+ {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6F4},
+ {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6F5},
+ {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6F6},
+ {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6F7},
+};
+
+extern const u8 gBattleAnimSpritePalette_136[];
+const struct CompressedSpritePalette gBallOpenParticlePalettes[] =
+{
+ {gBattleAnimSpritePalette_136, 0xD6EC},
+ {gBattleAnimSpritePalette_136, 0xD6ED},
+ {gBattleAnimSpritePalette_136, 0xD6EE},
+ {gBattleAnimSpritePalette_136, 0xD6EF},
+ {gBattleAnimSpritePalette_136, 0xD6F0},
+ {gBattleAnimSpritePalette_136, 0xD6F1},
+ {gBattleAnimSpritePalette_136, 0xD6F2},
+ {gBattleAnimSpritePalette_136, 0xD6F3},
+ {gBattleAnimSpritePalette_136, 0xD6F4},
+ {gBattleAnimSpritePalette_136, 0xD6F5},
+ {gBattleAnimSpritePalette_136, 0xD6F6},
+ {gBattleAnimSpritePalette_136, 0xD6F7},
+};
+
+const union AnimCmd gSpriteAnim_840B318[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_FRAME(1, 1),
+ ANIMCMD_FRAME(2, 1),
+ ANIMCMD_FRAME(0, 1, .hFlip = TRUE),
+ ANIMCMD_FRAME(2, 1),
+ ANIMCMD_FRAME(1, 1),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd gSpriteAnim_840B334[] =
+{
+ ANIMCMD_FRAME(3, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_840B33C[] =
+{
+ ANIMCMD_FRAME(4, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_840B344[] =
+{
+ ANIMCMD_FRAME(5, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_840B34C[] =
+{
+ ANIMCMD_FRAME(6, 4),
+ ANIMCMD_FRAME(7, 4),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd gSpriteAnim_840B358[] =
+{
+ ANIMCMD_FRAME(7, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_840B360[] =
+{
+ gSpriteAnim_840B318,
+ gSpriteAnim_840B334,
+ gSpriteAnim_840B33C,
+ gSpriteAnim_840B344,
+ gSpriteAnim_840B34C,
+ gSpriteAnim_840B358,
+};
+
+const u8 gBallOpenParticleAnimNums[] =
+{
+ 0,
+ 0,
+ 0,
+ 5,
+ 1,
+ 2,
+ 2,
+ 3,
+ 5,
+ 5,
+ 4,
+ 4,
+};
+
+void PokeBallOpenParticleAnimation(u8);
+void GreatBallOpenParticleAnimation(u8);
+void SafariBallOpenParticleAnimation(u8);
+void UltraBallOpenParticleAnimation(u8);
+void MasterBallOpenParticleAnimation(u8);
+void SafariBallOpenParticleAnimation(u8);
+void DiveBallOpenParticleAnimation(u8);
+void UltraBallOpenParticleAnimation(u8);
+void RepeatBallOpenParticleAnimation(u8);
+void TimerBallOpenParticleAnimation(u8);
+void GreatBallOpenParticleAnimation(u8);
+void PremierBallOpenParticleAnimation(u8);
+
+const TaskFunc gBallOpenParticleAnimationFuncs[] =
+{
+ PokeBallOpenParticleAnimation,
+ GreatBallOpenParticleAnimation,
+ SafariBallOpenParticleAnimation,
+ UltraBallOpenParticleAnimation,
+ MasterBallOpenParticleAnimation,
+ SafariBallOpenParticleAnimation,
+ DiveBallOpenParticleAnimation,
+ UltraBallOpenParticleAnimation,
+ RepeatBallOpenParticleAnimation,
+ TimerBallOpenParticleAnimation,
+ GreatBallOpenParticleAnimation,
+ PremierBallOpenParticleAnimation,
+};
+
+const struct SpriteTemplate gSpriteTemplates_840B3B4[] =
+{
+ {
+ .tileTag = 55020,
+ .paletteTag = 55020,
+ .oam = &gOamData_837DF24,
+ .anims = gSpriteAnimTable_840B360,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+ },
+ {
+ .tileTag = 55021,
+ .paletteTag = 55021,
+ .oam = &gOamData_837DF24,
+ .anims = gSpriteAnimTable_840B360,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+ },
+ {
+ .tileTag = 55022,
+ .paletteTag = 55022,
+ .oam = &gOamData_837DF24,
+ .anims = gSpriteAnimTable_840B360,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+ },
+ {
+ .tileTag = 55023,
+ .paletteTag = 55023,
+ .oam = &gOamData_837DF24,
+ .anims = gSpriteAnimTable_840B360,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+ },
+ {
+ .tileTag = 55024,
+ .paletteTag = 55024,
+ .oam = &gOamData_837DF24,
+ .anims = gSpriteAnimTable_840B360,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+ },
+ {
+ .tileTag = 55025,
+ .paletteTag = 55025,
+ .oam = &gOamData_837DF24,
+ .anims = gSpriteAnimTable_840B360,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+ },
+ {
+ .tileTag = 55026,
+ .paletteTag = 55026,
+ .oam = &gOamData_837DF24,
+ .anims = gSpriteAnimTable_840B360,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+ },
+ {
+ .tileTag = 55027,
+ .paletteTag = 55027,
+ .oam = &gOamData_837DF24,
+ .anims = gSpriteAnimTable_840B360,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+ },
+ {
+ .tileTag = 55028,
+ .paletteTag = 55028,
+ .oam = &gOamData_837DF24,
+ .anims = gSpriteAnimTable_840B360,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+ },
+ {
+ .tileTag = 55029,
+ .paletteTag = 55029,
+ .oam = &gOamData_837DF24,
+ .anims = gSpriteAnimTable_840B360,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+ },
+ {
+ .tileTag = 55030,
+ .paletteTag = 55030,
+ .oam = &gOamData_837DF24,
+ .anims = gSpriteAnimTable_840B360,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+ },
+ {
+ .tileTag = 55031,
+ .paletteTag = 55031,
+ .oam = &gOamData_837DF24,
+ .anims = gSpriteAnimTable_840B360,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+ },
+};
+
+const u16 gUnknown_0840B4D4[] =
+{
+ 0x7ADF,
+ 0x7AF0,
+ 0x53D7,
+ 0x3FFF,
+ 0x7297,
+ 0x67F5,
+ 0x7B2C,
+ 0x2B7E,
+ 0x431F,
+ 0x7BDD,
+ 0x2A3F,
+ 0x293F,
+ 0x0000,
+ 0x0201,
+ 0x0403,
+ 0x0101,
+ 0x0100,
+ 0x0503,
+ 0x0506,
+ 0x0004,
+};
+
+static void sub_8141C30(struct Sprite *sprite);
+const struct SpriteTemplate gBattleAnimSpriteTemplate_840B4FC =
+{
+ .tileTag = 10269,
+ .paletteTag = 10269,
+ .oam = &gOamData_837DF2C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8141C30,
+};
void unref_sub_813F0F4(u8 taskId)
{
@@ -1826,7 +2099,7 @@ void sub_8141C08(u8 taskId)
DestroyAnimVisualTask(taskId);
}
-void sub_8141C30(struct Sprite *sprite)
+static void sub_8141C30(struct Sprite *sprite)
{
InitAnimSpritePos(sprite, 0);
sprite->data[0] = 30;
diff --git a/src/battle/battle_interface.c b/src/battle/battle_interface.c
index ec882bcce..dedde2cb3 100644
--- a/src/battle/battle_interface.c
+++ b/src/battle/battle_interface.c
@@ -433,7 +433,7 @@ extern u16 gBattleTypeFlags;
extern const u8 BattleText_SafariBalls[];
extern const u8 BattleText_SafariBallsLeft[];
extern const u8 BattleText_HighlightRed[];
-extern const u8 gUnknown_08D1216C[][32];
+extern const u8 gHealthboxElementsGfxTable[][32];
extern const u16 gBattleInterfaceStatusIcons_DynPal[];
@@ -870,7 +870,7 @@ u8 battle_make_oam_safari_battle(void)
static const void *sub_8043CDC(u8 a)
{
- return gUnknown_08D1216C[a];
+ return gHealthboxElementsGfxTable[a];
}
static void sub_8043CEC(struct Sprite *sprite)