summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/battle/anim/copy_orb.c31
-rw-r--r--src/battle/anim/cutter.c144
-rw-r--r--src/battle/anim/flying_path.c74
-rw-r--r--src/battle/anim/flying_petals.c100
-rw-r--r--src/battle/anim/heal.c27
-rw-r--r--src/battle/anim/homing.c14
-rw-r--r--src/battle/anim/hop.c58
-rw-r--r--src/battle/anim/hop_2.c16
-rw-r--r--src/battle/anim/leaf.c240
-rw-r--r--src/battle/anim/orbit.c83
-rw-r--r--src/battle/anim/orbs.c181
-rw-r--r--src/battle/anim/osmose.c27
-rw-r--r--src/battle/anim/powder.c52
-rw-r--r--src/battle/anim/roots.c69
-rw-r--r--src/battle/anim/seed.c31
-rw-r--r--src/battle/anim/shimmer.c17
-rw-r--r--src/battle/anim/switch.c70
-rw-r--r--src/battle/anim/tendrils.c59
-rw-r--r--src/battle/anim/unused_1.c64
-rw-r--r--src/battle/anim/whip.c89
-rw-r--r--src/rom_8077ABC.c5
21 files changed, 1263 insertions, 188 deletions
diff --git a/src/battle/anim/copy_orb.c b/src/battle/anim/copy_orb.c
index ac60d2c2b..d554a7e26 100644
--- a/src/battle/anim/copy_orb.c
+++ b/src/battle/anim/copy_orb.c
@@ -7,9 +7,40 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+extern const union AnimCmd *const gSpriteAnimTable_83D62D4[];
+
+void sub_80CB4CC(struct Sprite* sprite);
+
// copy_orb
// Used in Mimic.
+const union AffineAnimCmd gSpriteAffineAnim_83D65B8[] = {
+ AFFINEANIMCMD_FRAME(0, 0, 0, 0),
+ AFFINEANIMCMD_FRAME(48, 48, 0, 14),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D65D0[] = {
+ AFFINEANIMCMD_FRAME(-16, -16, 0, 1),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D65E0[] = {
+ gSpriteAffineAnim_83D65B8,
+ gSpriteAffineAnim_83D65D0,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D65E8 =
+{
+ .tileTag = 10147,
+ .paletteTag = 10147,
+ .oam = &gOamData_837DFEC,
+ .anims = gSpriteAnimTable_83D62D4,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D65E0,
+ .callback = sub_80CB4CC,
+};
+
void sub_80CB4CC(struct Sprite* sprite)
{
switch (sprite->data[0])
diff --git a/src/battle/anim/cutter.c b/src/battle/anim/cutter.c
deleted file mode 100644
index bc7478053..000000000
--- a/src/battle/anim/cutter.c
+++ /dev/null
@@ -1,144 +0,0 @@
-#include "global.h"
-#include "battle.h"
-#include "rom_8077ABC.h"
-#include "trig.h"
-#include "battle_anim.h"
-
-extern s16 gBattleAnimArgs[];
-extern u8 gAnimBankAttacker;
-extern u8 gAnimBankTarget;
-
-static void AnimTranslateLinearSingleSineWaveStep(struct Sprite* sprite);
-static void AnimMoveTwisterParticleStep(struct Sprite* sprite);
-
-// Animates a sprite that moves linearly from one location to another, with a
-// single-cycle sine wave added to the y position along the way.
-// Used by Razor Leaf and Magical Leaf.
-// arg 0: initial x offset
-// arg 1: initial y offset
-// arg 2: target x offset
-// arg 3: target y offset
-// arg 4: translation duration
-// arg 5: wave amplitude
-// arg 6: target between double battle opponents (boolean)
-void AnimTranslateLinearSingleSineWave(struct Sprite* sprite)
-{
- InitAnimSpritePos(sprite, 1);
- if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER)
- {
- gBattleAnimArgs[2] = -gBattleAnimArgs[2];
- }
-
- sprite->data[0] = gBattleAnimArgs[4];
- if (!gBattleAnimArgs[6])
- {
- sprite->data[2] = GetBattlerSpriteCoord(gAnimBankTarget, 2) + gBattleAnimArgs[2];
- sprite->data[4] = GetBattlerSpriteCoord(gAnimBankTarget, 3) + gBattleAnimArgs[3];
- }
- else
- {
- SetAverageBattlerPositions(gAnimBankTarget, 1, &sprite->data[2], &sprite->data[4]);
- sprite->data[2] += gBattleAnimArgs[2];
- sprite->data[4] += gBattleAnimArgs[3];
- }
-
- sprite->data[5] = gBattleAnimArgs[5];
- InitAnimSpriteTranslationOverDuration(sprite);
- if (GetBattlerSide(gAnimBankAttacker) == GetBattlerSide(gAnimBankTarget))
- {
- sprite->data[0] = 1;
- }
- else
- {
- sprite->data[0] = 0;
- }
-
- sprite->callback = AnimTranslateLinearSingleSineWaveStep;
-}
-
-static void AnimTranslateLinearSingleSineWaveStep(struct Sprite* sprite)
-{
- bool8 destroy = FALSE;
- s16 a = sprite->data[0];
- s16 b = sprite->data[7];
- s16 r0;
-
- sprite->data[0] = 1;
- TranslateAnimSpriteLinearAndSine(sprite);
- r0 = sprite->data[7];
- sprite->data[0] = a;
- if (b > 0xC8 && r0 <= 0x37 && sprite->oam.affineParam == 0)
- sprite->oam.affineParam++;
-
- if (sprite->oam.affineParam != 0 && sprite->data[0] != 0)
- {
- sprite->invisible ^= 1;
- sprite->oam.affineParam++;
- if (sprite->oam.affineParam == 0x1E)
- destroy = TRUE;
- }
-
- if (sprite->pos1.x + sprite->pos2.x > 256
- || sprite->pos1.x + sprite->pos2.x < -16
- || sprite->pos1.y + sprite->pos2.y > 160
- || sprite->pos1.y + sprite->pos2.y < -16)
- destroy = TRUE;
-
- if (destroy)
- DestroyAnimSprite(sprite);
-}
-
-// Animates particles in the Twister move animation.
-// arg 0: duration
-// arg 1: total y delta (the particles rise upward)
-// arg 2: wave period (higher means faster wave)
-// arg 3: wave amplitude
-// arg 4: speedup frame (particles move faster at the end of the animation)
-void AnimMoveTwisterParticle(struct Sprite* sprite)
-{
- if (!IsContest() && IsDoubleBattle() == TRUE)
- {
- SetAverageBattlerPositions(gAnimBankTarget, 1, &sprite->pos1.x, &sprite->pos1.y);
- }
-
- sprite->pos1.y += 32;
- sprite->data[0] = gBattleAnimArgs[0];
- sprite->data[1] = gBattleAnimArgs[1];
- sprite->data[2] = gBattleAnimArgs[2];
- sprite->data[3] = gBattleAnimArgs[3];
- sprite->data[4] = gBattleAnimArgs[4];
- sprite->callback = AnimMoveTwisterParticleStep;
-}
-
-static void AnimMoveTwisterParticleStep(struct Sprite* sprite)
-{
- if (sprite->data[1] == 0xFF)
- {
- sprite->pos1.y -= 2;
- }
- else if (sprite->data[1] > 0)
- {
- sprite->pos1.y -= 2;
- sprite->data[1] -= 2;
- }
-
- sprite->data[5] += sprite->data[2];
- if (sprite->data[0] < sprite->data[4])
- sprite->data[5] += sprite->data[2];
-
- sprite->data[5] &= 0xFF;
- sprite->pos2.x = Cos(sprite->data[5], sprite->data[3]);
- sprite->pos2.y = Sin(sprite->data[5], 5);
- if (sprite->data[5] <= 0x7F)
- {
- sprite->oam.priority = sub_8079ED4(gAnimBankTarget) - 1;
- }
- else
- {
- sprite->oam.priority = sub_8079ED4(gAnimBankTarget) + 1;
- }
-
- sprite->data[0]--;
- if (!sprite->data[0])
- DestroyAnimSprite(sprite);
-}
diff --git a/src/battle/anim/flying_path.c b/src/battle/anim/flying_path.c
index 5e9de8cb1..b190e9e8c 100644
--- a/src/battle/anim/flying_path.c
+++ b/src/battle/anim/flying_path.c
@@ -8,8 +8,6 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
-extern struct SpriteTemplate gSpriteTemplate_83D6884;
-
static void sub_80CBF5C(u8 taskId);
static s16 sub_80CC338(struct Sprite* sprite);
static void sub_80CC358(struct Task* task, u8 taskId);
@@ -18,6 +16,70 @@ static void sub_80CC408(struct Sprite* sprite);
// flying_path (guides a sprite along a specific path.)
// Used by Leaf Blade.
+const union AnimCmd gSpriteAnim_83D6830[] =
+{
+ ANIMCMD_FRAME(28, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D6838[] =
+{
+ ANIMCMD_FRAME(32, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D6840[] =
+{
+ ANIMCMD_FRAME(20, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D6848[] =
+{
+ ANIMCMD_FRAME(28, 1, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D6850[] =
+{
+ ANIMCMD_FRAME(16, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D6858[] =
+{
+ ANIMCMD_FRAME(16, 1, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D6860[] =
+{
+ ANIMCMD_FRAME(28, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D6868[] =
+{
+ gSpriteAnim_83D6830,
+ gSpriteAnim_83D6838,
+ gSpriteAnim_83D6840,
+ gSpriteAnim_83D6848,
+ gSpriteAnim_83D6850,
+ gSpriteAnim_83D6858,
+ gSpriteAnim_83D6860,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83D6884 =
+{
+ .tileTag = 10063,
+ .paletteTag = 10063,
+ .oam = &gOamData_837DF2C,
+ .anims = gSpriteAnimTable_83D6868,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+};
+
void sub_80CBDF4(u8 taskId)
{
struct Task *task = &gTasks[taskId];
@@ -44,7 +106,7 @@ void sub_80CBDF4(u8 taskId)
task->func = sub_80CBF5C;
}
-void sub_80CBF5C(u8 taskId)
+static void sub_80CBF5C(u8 taskId)
{
struct Task* task = &gTasks[taskId];
struct Sprite* sprite = &gSprites[task->data[2]];
@@ -244,7 +306,7 @@ void sub_80CBF5C(u8 taskId)
}
}
-s16 sub_80CC338(struct Sprite* sprite)
+static s16 sub_80CC338(struct Sprite* sprite)
{
s16 var = 8;
if (sprite->data[4] < sprite->pos1.y)
@@ -253,7 +315,7 @@ s16 sub_80CC338(struct Sprite* sprite)
return var;
}
-void sub_80CC358(struct Task* task, u8 taskId)
+static void sub_80CC358(struct Task* task, u8 taskId)
{
task->data[14]++;
if (task->data[14] > 0)
@@ -279,7 +341,7 @@ void sub_80CC358(struct Task* task, u8 taskId)
}
}
-void sub_80CC408(struct Sprite* sprite)
+static void sub_80CC408(struct Sprite* sprite)
{
sprite->data[0]++;
if (sprite->data[0] > 1)
diff --git a/src/battle/anim/flying_petals.c b/src/battle/anim/flying_petals.c
index c7a596b56..4696cbc6c 100644
--- a/src/battle/anim/flying_petals.c
+++ b/src/battle/anim/flying_petals.c
@@ -7,12 +7,110 @@
extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+extern const union AnimCmd *const gSpriteAnimTable_83D6424[];
+extern const union AnimCmd *const gSpriteAnimTable_83D6420[];
+void sub_80CC474(struct Sprite* sprite);
static void sub_80CC580(struct Sprite* sprite);
// flying_petals (petals fly across the screen.)
// Used by Aromatherapy.
+const union AffineAnimCmd gSpriteAffineAnim_83D689C[] = {
+ AFFINEANIMCMD_FRAME(256, 256, 0, 0),
+ AFFINEANIMCMD_FRAME(0, 0, 4, 1),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D68B4[] = {
+ gSpriteAffineAnim_83D689C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D68B8 =
+{
+ .tileTag = 10159,
+ .paletteTag = 10159,
+ .oam = &gOamData_837DF24,
+ .anims = gSpriteAnimTable_83D6424,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CC474,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D68D0 =
+{
+ .tileTag = 10159,
+ .paletteTag = 10159,
+ .oam = &gOamData_837DF8C,
+ .anims = gSpriteAnimTable_83D6420,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D68B4,
+ .callback = sub_80CC474,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D68E8[] = {
+ AFFINEANIMCMD_FRAME(256, 256, 0, 0),
+ AFFINEANIMCMD_FRAME(0, 0, -10, 1),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D6900[] = {
+ AFFINEANIMCMD_FRAME(192, 192, 0, 0),
+ AFFINEANIMCMD_FRAME(0, 0, -12, 1),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D6918[] = {
+ AFFINEANIMCMD_FRAME(143, 143, 0, 0),
+ AFFINEANIMCMD_FRAME(0, 0, -15, 1),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D6930[] = {
+ gSpriteAffineAnim_83D68E8,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D6934[] = {
+ gSpriteAffineAnim_83D6900,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D6938[] = {
+ gSpriteAffineAnim_83D6918,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D693C =
+{
+ .tileTag = 10271,
+ .paletteTag = 10271,
+ .oam = &gOamData_837DF8C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D6930,
+ .callback = sub_80CC474,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6954 =
+{
+ .tileTag = 10271,
+ .paletteTag = 10271,
+ .oam = &gOamData_837DF8C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D6934,
+ .callback = sub_80CC474,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D696C =
+{
+ .tileTag = 10271,
+ .paletteTag = 10271,
+ .oam = &gOamData_837DF8C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D6938,
+ .callback = sub_80CC474,
+};
+
void sub_80CC474(struct Sprite* sprite)
{
u8 bank;
@@ -61,7 +159,7 @@ void sub_80CC474(struct Sprite* sprite)
sprite->callback = sub_80CC580;
}
-void sub_80CC580(struct Sprite* sprite)
+static void sub_80CC580(struct Sprite* sprite)
{
int a = sprite->data[7];
sprite->data[7]++;
diff --git a/src/battle/anim/heal.c b/src/battle/anim/heal.c
index a8c14ea1c..c2bce0e77 100644
--- a/src/battle/anim/heal.c
+++ b/src/battle/anim/heal.c
@@ -7,9 +7,36 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CBAA4(struct Sprite* sprite);
+
// heal (healing sparkles on a Pokemon)
// Used in Present, if the move heals instead of damages.
+const union AnimCmd gSpriteAnim_83D674C[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(4, 4),
+ ANIMCMD_FRAME(8, 4),
+ ANIMCMD_FRAME(12, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D6760[] =
+{
+ gSpriteAnim_83D674C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6764 =
+{
+ .tileTag = 10195,
+ .paletteTag = 10195,
+ .oam = &gOamData_837DF2C,
+ .anims = gSpriteAnimTable_83D6760,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CBAA4,
+};
+
void sub_80CBAA4(struct Sprite* sprite)
{
if (sprite->data[0] == 0)
diff --git a/src/battle/anim/homing.c b/src/battle/anim/homing.c
index b24fcf4b1..5cd2a3ddb 100644
--- a/src/battle/anim/homing.c
+++ b/src/battle/anim/homing.c
@@ -8,11 +8,23 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CC6CC(struct Sprite* sprite);
static void sub_80CC7D4(struct Sprite* sprite);
// homing (the spinning effect of sprites going inward in a static rotation.)
// Used by Needle Arm.
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6994 =
+{
+ .tileTag = 10266,
+ .paletteTag = 10266,
+ .oam = &gOamData_837DF8C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CC6CC,
+};
+
void sub_80CC6CC(struct Sprite* sprite)
{
u8 a;
@@ -69,7 +81,7 @@ void sub_80CC6CC(struct Sprite* sprite)
}
}
-void sub_80CC7D4(struct Sprite* sprite)
+static void sub_80CC7D4(struct Sprite* sprite)
{
if (sprite->data[0])
{
diff --git a/src/battle/anim/hop.c b/src/battle/anim/hop.c
index 7d1b2fd01..3aba79511 100644
--- a/src/battle/anim/hop.c
+++ b/src/battle/anim/hop.c
@@ -7,9 +7,67 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CB94C(struct Sprite* sprite);
+void sub_80CBA28(struct Sprite* sprite);
+
// hop (where a sprite "hops" across the screen)
// Used by Present, Trick, and the item knock off effect.
+const union AnimCmd gSpriteAnim_83D66B0[] =
+{
+ ANIMCMD_FRAME(0, 30),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D66B8[] =
+{
+ gSpriteAnim_83D66B0,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D66BC[] = {
+ AFFINEANIMCMD_FRAME(0, 0, -4, 10),
+ AFFINEANIMCMD_FRAME(0, 0, 4, 20),
+ AFFINEANIMCMD_FRAME(0, 0, -4, 10),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D66DC[] = {
+ AFFINEANIMCMD_FRAME(0, 0, -1, 2),
+ AFFINEANIMCMD_FRAME(0, 0, 1, 4),
+ AFFINEANIMCMD_FRAME(0, 0, -1, 4),
+ AFFINEANIMCMD_FRAME(0, 0, 1, 4),
+ AFFINEANIMCMD_FRAME(0, 0, -1, 4),
+ AFFINEANIMCMD_FRAME(0, 0, 1, 2),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D6714[] = {
+ gSpriteAffineAnim_83D66BC,
+ gSpriteAffineAnim_83D66DC,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D671C =
+{
+ .tileTag = 10224,
+ .paletteTag = 10224,
+ .oam = &gOamData_837DF94,
+ .anims = gSpriteAnimTable_83D66B8,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D6714,
+ .callback = sub_80CB94C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6734 =
+{
+ .tileTag = 10224,
+ .paletteTag = 10224,
+ .oam = &gOamData_837DF94,
+ .anims = gSpriteAnimTable_83D66B8,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D6714,
+ .callback = sub_80CBA28,
+};
+
void sub_80CB7EC(struct Sprite* sprite, s16 c)
{
s32 a = (sprite->pos1.x * 256) | sprite->pos1.y;
diff --git a/src/battle/anim/hop_2.c b/src/battle/anim/hop_2.c
index 861f428da..ab239f3c4 100644
--- a/src/battle/anim/hop_2.c
+++ b/src/battle/anim/hop_2.c
@@ -11,12 +11,26 @@ extern u8 gAnimBankTarget;
extern void sub_80CB7EC(struct Sprite* sprite, s16 c);
extern bool8 sub_80CB814(struct Sprite* sprite);
extern void sub_80CB8B8(struct Sprite* sprite);
+extern const union AnimCmd *const gSpriteAnimTable_83D66B8[];
+extern const union AffineAnimCmd *const gSpriteAffineAnimTable_83D6714[];
+void sub_80CBAE8(struct Sprite* sprite);
static void sub_80CBB60(struct Sprite* sprite);
// hop_2
// Used in item steal.
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D677C =
+{
+ .tileTag = 10224,
+ .paletteTag = 10224,
+ .oam = &gOamData_837DF94,
+ .anims = gSpriteAnimTable_83D66B8,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D6714,
+ .callback = sub_80CBAE8,
+};
+
void sub_80CBAE8(struct Sprite* sprite)
{
s16 p1;
@@ -43,7 +57,7 @@ void sub_80CBAE8(struct Sprite* sprite)
sprite->callback = sub_80CBB60;
}
-void sub_80CBB60(struct Sprite* sprite)
+static void sub_80CBB60(struct Sprite* sprite)
{
int zero;
sprite->data[0] += ((sprite->data[3] * 128) / sprite->data[4]);
diff --git a/src/battle/anim/leaf.c b/src/battle/anim/leaf.c
index ca2af257d..d31e4dbd6 100644
--- a/src/battle/anim/leaf.c
+++ b/src/battle/anim/leaf.c
@@ -1,18 +1,120 @@
#include "global.h"
+#include "battle.h"
+#include "battle_anim.h"
#include "rom_8077ABC.h"
#include "trig.h"
-#include "battle_anim.h"
extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CAED8(struct Sprite* sprite);
+void AnimMoveTwisterParticle(struct Sprite* sprite);
+void AnimTranslateLinearSingleSineWave(struct Sprite* sprite);
static void sub_80CAF20(struct Sprite* sprite);
static void sub_80CAF6C(struct Sprite* sprite);
+static void AnimTranslateLinearSingleSineWaveStep(struct Sprite* sprite);
+static void AnimMoveTwisterParticleStep(struct Sprite* sprite);
// leaf
// Used by Razor Leaf and Twister.
+const union AnimCmd gSpriteAnim_83D6458[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_FRAME(4, 5),
+ ANIMCMD_FRAME(8, 5),
+ ANIMCMD_FRAME(12, 5),
+ ANIMCMD_FRAME(16, 5),
+ ANIMCMD_FRAME(20, 5),
+ ANIMCMD_FRAME(16, 5),
+ ANIMCMD_FRAME(12, 5),
+ ANIMCMD_FRAME(8, 5),
+ ANIMCMD_FRAME(4, 5),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd gSpriteAnim_83D6484[] =
+{
+ ANIMCMD_FRAME(24, 5),
+ ANIMCMD_FRAME(28, 5),
+ ANIMCMD_FRAME(32, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D6494[] =
+{
+ gSpriteAnim_83D6458,
+ gSpriteAnim_83D6484,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D649C =
+{
+ .tileTag = 10063,
+ .paletteTag = 10063,
+ .oam = &gOamData_837DF2C,
+ .anims = gSpriteAnimTable_83D6494,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CAED8,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D64B4 =
+{
+ .tileTag = 10063,
+ .paletteTag = 10063,
+ .oam = &gOamData_837DF2C,
+ .anims = gSpriteAnimTable_83D6494,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimMoveTwisterParticle,
+};
+
+const union AnimCmd gSpriteAnim_83D64CC[] =
+{
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_FRAME(0, 3, .hFlip = TRUE),
+ ANIMCMD_FRAME(0, 3, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(0, 3, .vFlip = TRUE),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D64E0[] =
+{
+ gSpriteAnim_83D64CC,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D64E4 =
+{
+ .tileTag = 10160,
+ .paletteTag = 10160,
+ .oam = &gOamData_837DF54,
+ .anims = gSpriteAnimTable_83D64E0,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimTranslateLinearSingleSineWave,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D64FC[] = {
+ AFFINEANIMCMD_FRAME(0, 0, 0, 1),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D650C[] = {
+ gSpriteAffineAnim_83D64FC,
+};
+
+const struct SpriteTemplate gSwiftStarSpriteTemplate =
+{
+ .tileTag = 10174,
+ .paletteTag = 10174,
+ .oam = &gOamData_837DF94,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D650C,
+ .callback = AnimTranslateLinearSingleSineWave,
+};
+
void sub_80CAED8(struct Sprite* sprite)
{
sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2);
@@ -23,7 +125,7 @@ void sub_80CAED8(struct Sprite* sprite)
sprite->callback = sub_80CAF20;
}
-void sub_80CAF20(struct Sprite* sprite)
+static void sub_80CAF20(struct Sprite* sprite)
{
if (!sprite->data[2])
{
@@ -49,7 +151,7 @@ void sub_80CAF20(struct Sprite* sprite)
}
}
-void sub_80CAF6C(struct Sprite* sprite)
+static void sub_80CAF6C(struct Sprite* sprite)
{
if (GetBattlerSide(gAnimBankAttacker))
{
@@ -72,3 +174,135 @@ void sub_80CAF6C(struct Sprite* sprite)
DestroyAnimSprite(sprite);
}
}
+
+// Animates a sprite that moves linearly from one location to another, with a
+// single-cycle sine wave added to the y position along the way.
+// Used by Razor Leaf and Magical Leaf.
+// arg 0: initial x offset
+// arg 1: initial y offset
+// arg 2: target x offset
+// arg 3: target y offset
+// arg 4: translation duration
+// arg 5: wave amplitude
+// arg 6: target between double battle opponents (boolean)
+void AnimTranslateLinearSingleSineWave(struct Sprite* sprite)
+{
+ InitAnimSpritePos(sprite, 1);
+ if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER)
+ {
+ gBattleAnimArgs[2] = -gBattleAnimArgs[2];
+ }
+
+ sprite->data[0] = gBattleAnimArgs[4];
+ if (!gBattleAnimArgs[6])
+ {
+ sprite->data[2] = GetBattlerSpriteCoord(gAnimBankTarget, 2) + gBattleAnimArgs[2];
+ sprite->data[4] = GetBattlerSpriteCoord(gAnimBankTarget, 3) + gBattleAnimArgs[3];
+ }
+ else
+ {
+ SetAverageBattlerPositions(gAnimBankTarget, 1, &sprite->data[2], &sprite->data[4]);
+ sprite->data[2] += gBattleAnimArgs[2];
+ sprite->data[4] += gBattleAnimArgs[3];
+ }
+
+ sprite->data[5] = gBattleAnimArgs[5];
+ InitAnimSpriteTranslationOverDuration(sprite);
+ if (GetBattlerSide(gAnimBankAttacker) == GetBattlerSide(gAnimBankTarget))
+ {
+ sprite->data[0] = 1;
+ }
+ else
+ {
+ sprite->data[0] = 0;
+ }
+
+ sprite->callback = AnimTranslateLinearSingleSineWaveStep;
+}
+
+static void AnimTranslateLinearSingleSineWaveStep(struct Sprite* sprite)
+{
+ bool8 destroy = FALSE;
+ s16 a = sprite->data[0];
+ s16 b = sprite->data[7];
+ s16 r0;
+
+ sprite->data[0] = 1;
+ TranslateAnimSpriteLinearAndSine(sprite);
+ r0 = sprite->data[7];
+ sprite->data[0] = a;
+ if (b > 0xC8 && r0 <= 0x37 && sprite->oam.affineParam == 0)
+ sprite->oam.affineParam++;
+
+ if (sprite->oam.affineParam != 0 && sprite->data[0] != 0)
+ {
+ sprite->invisible ^= 1;
+ sprite->oam.affineParam++;
+ if (sprite->oam.affineParam == 0x1E)
+ destroy = TRUE;
+ }
+
+ if (sprite->pos1.x + sprite->pos2.x > 256
+ || sprite->pos1.x + sprite->pos2.x < -16
+ || sprite->pos1.y + sprite->pos2.y > 160
+ || sprite->pos1.y + sprite->pos2.y < -16)
+ destroy = TRUE;
+
+ if (destroy)
+ DestroyAnimSprite(sprite);
+}
+
+// Animates particles in the Twister move animation.
+// arg 0: duration
+// arg 1: total y delta (the particles rise upward)
+// arg 2: wave period (higher means faster wave)
+// arg 3: wave amplitude
+// arg 4: speedup frame (particles move faster at the end of the animation)
+void AnimMoveTwisterParticle(struct Sprite* sprite)
+{
+ if (!IsContest() && IsDoubleBattle() == TRUE)
+ {
+ SetAverageBattlerPositions(gAnimBankTarget, 1, &sprite->pos1.x, &sprite->pos1.y);
+ }
+
+ sprite->pos1.y += 32;
+ sprite->data[0] = gBattleAnimArgs[0];
+ sprite->data[1] = gBattleAnimArgs[1];
+ sprite->data[2] = gBattleAnimArgs[2];
+ sprite->data[3] = gBattleAnimArgs[3];
+ sprite->data[4] = gBattleAnimArgs[4];
+ sprite->callback = AnimMoveTwisterParticleStep;
+}
+
+static void AnimMoveTwisterParticleStep(struct Sprite* sprite)
+{
+ if (sprite->data[1] == 0xFF)
+ {
+ sprite->pos1.y -= 2;
+ }
+ else if (sprite->data[1] > 0)
+ {
+ sprite->pos1.y -= 2;
+ sprite->data[1] -= 2;
+ }
+
+ sprite->data[5] += sprite->data[2];
+ if (sprite->data[0] < sprite->data[4])
+ sprite->data[5] += sprite->data[2];
+
+ sprite->data[5] &= 0xFF;
+ sprite->pos2.x = Cos(sprite->data[5], sprite->data[3]);
+ sprite->pos2.y = Sin(sprite->data[5], 5);
+ if (sprite->data[5] <= 0x7F)
+ {
+ sprite->oam.priority = sub_8079ED4(gAnimBankTarget) - 1;
+ }
+ else
+ {
+ sprite->oam.priority = sub_8079ED4(gAnimBankTarget) + 1;
+ }
+
+ sprite->data[0]--;
+ if (!sprite->data[0])
+ DestroyAnimSprite(sprite);
+}
diff --git a/src/battle/anim/orbit.c b/src/battle/anim/orbit.c
index b4a641cc2..e76e0923e 100644
--- a/src/battle/anim/orbit.c
+++ b/src/battle/anim/orbit.c
@@ -7,12 +7,85 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CABF8(struct Sprite* sprite);
+void sub_80CAD54(struct Sprite* sprite);
+void sub_80CAE20(struct Sprite* sprite);
static void sub_80CAC44(struct Sprite* sprite);
static void sub_80CADA8(struct Sprite* sprite);
static void sub_80CAE74(struct Sprite* sprite);
-// orbit (The effect of a sprite rotating around another one in a pseudo 3D effect.)
-// Used by Spore, Cotton Spore, and Petal Dance.
+const union AnimCmd gSpriteAnim_83D63E0[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D63E8[] =
+{
+ ANIMCMD_FRAME(4, 7),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D63F0[] =
+{
+ gSpriteAnim_83D63E0,
+ gSpriteAnim_83D63E8,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D63F8 =
+{
+ .tileTag = 10158,
+ .paletteTag = 10158,
+ .oam = &gOamData_837DF2C,
+ .anims = gSpriteAnimTable_83D63F0,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CABF8,
+};
+
+const union AnimCmd gSpriteAnim_83D6410[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D6418[] =
+{
+ ANIMCMD_FRAME(4, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D6420[] =
+{
+ gSpriteAnim_83D6410,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D6424[] =
+{
+ gSpriteAnim_83D6418,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6428 =
+{
+ .tileTag = 10159,
+ .paletteTag = 10159,
+ .oam = &gOamData_837DF2C,
+ .anims = gSpriteAnimTable_83D6420,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CAD54,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6440 =
+{
+ .tileTag = 10159,
+ .paletteTag = 10159,
+ .oam = &gOamData_837DF24,
+ .anims = gSpriteAnimTable_83D6424,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CAE20,
+};
void sub_80CABF8(struct Sprite* sprite)
{
@@ -29,7 +102,7 @@ void sub_80CABF8(struct Sprite* sprite)
sub_80CAC44(sprite);
}
-void sub_80CAC44(struct Sprite* sprite)
+static void sub_80CAC44(struct Sprite* sprite)
{
u8 var1;
@@ -91,7 +164,7 @@ void sub_80CAD54(struct Sprite* sprite)
sub_80CADA8(sprite);
}
-void sub_80CADA8(struct Sprite* sprite)
+static void sub_80CADA8(struct Sprite* sprite)
{
if (!TranslateAnimSpriteByDeltas(sprite))
{
@@ -128,7 +201,7 @@ void sub_80CAE20(struct Sprite* sprite)
sub_80CAE74(sprite);
}
-void sub_80CAE74(struct Sprite* sprite)
+static void sub_80CAE74(struct Sprite* sprite)
{
if (!TranslateAnimSpriteByDeltas(sprite))
{
diff --git a/src/battle/anim/orbs.c b/src/battle/anim/orbs.c
index 53c16d8d7..af6568bd8 100644
--- a/src/battle/anim/orbs.c
+++ b/src/battle/anim/orbs.c
@@ -8,11 +8,184 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CA7B0(struct Sprite* sprite);
+void sub_80CA800(struct Sprite* sprite);
+void sub_80CA858(struct Sprite* sprite);
+void sub_80CA9A8(struct Sprite* sprite);
+void sub_80CAA14(struct Sprite* sprite);
static void sub_80CA8B4(struct Sprite* sprite);
static void sub_80CA9F8(struct Sprite* sprite);
static void sub_80CAACC(struct Sprite* sprite);
-extern struct SpriteTemplate gSpriteTemplate_83D631C;
+const union AnimCmd gSpriteAnim_83D626C[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D6274[] =
+{
+ ANIMCMD_FRAME(1, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D627C[] =
+{
+ ANIMCMD_FRAME(2, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D6284[] =
+{
+ ANIMCMD_FRAME(3, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D628C[] =
+{
+ ANIMCMD_FRAME(4, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D6294[] =
+{
+ ANIMCMD_FRAME(5, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D629C[] =
+{
+ ANIMCMD_FRAME(6, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D62A4[] =
+{
+ ANIMCMD_FRAME(7, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D62AC[] =
+{
+ ANIMCMD_FRAME(8, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D62B4[] =
+{
+ gSpriteAnim_83D626C,
+ gSpriteAnim_83D6274,
+ gSpriteAnim_83D627C,
+ gSpriteAnim_83D6284,
+ gSpriteAnim_83D628C,
+ gSpriteAnim_83D6294,
+ gSpriteAnim_83D629C,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D62D0[] =
+{
+ gSpriteAnim_83D62A4,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D62D4[] =
+{
+ gSpriteAnim_83D62AC,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D62D8[] = {
+ AFFINEANIMCMD_FRAME(-5, -5, 0, 1),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D62E8[] = {
+ gSpriteAffineAnim_83D62D8,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D62EC =
+{
+ .tileTag = 10147,
+ .paletteTag = 10147,
+ .oam = &gOamData_837E0AC,
+ .anims = gSpriteAnimTable_83D62D4,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D62E8,
+ .callback = sub_80CA7B0,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6304 =
+{
+ .tileTag = 10147,
+ .paletteTag = 10147,
+ .oam = &gOamData_837DF24,
+ .anims = gSpriteAnimTable_83D62B4,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CA800,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83D631C =
+{
+ .tileTag = 10147,
+ .paletteTag = 10147,
+ .oam = &gOamData_837DF24,
+ .anims = gSpriteAnimTable_83D62D0,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CA858,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D6334[] = {
+ AFFINEANIMCMD_FRAME(320, 320, 0, 0),
+ AFFINEANIMCMD_FRAME(-14, -14, 0, 1),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D634C[] = {
+ gSpriteAffineAnim_83D6334,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6350 =
+{
+ .tileTag = 10235,
+ .paletteTag = 10235,
+ .oam = &gOamData_837DFE4,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D634C,
+ .callback = sub_80CA7B0,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D6368[] = {
+ AFFINEANIMCMD_FRAME(-5, -5, 0, 1),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D6378[] = {
+ gSpriteAffineAnim_83D6368,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D637C =
+{
+ .tileTag = 10147,
+ .paletteTag = 10147,
+ .oam = &gOamData_837E0AC,
+ .anims = gSpriteAnimTable_83D62D4,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D6378,
+ .callback = sub_80CA9A8,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6394 =
+{
+ .tileTag = 10147,
+ .paletteTag = 10147,
+ .oam = &gOamData_837DF24,
+ .anims = gSpriteAnimTable_83D62B4,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CAA14,
+};
+
// orbs
// Used by Solar Beam, Absorb, Hyper Beam, and Leech Seed.
@@ -52,7 +225,7 @@ void sub_80CA858(struct Sprite* sprite)
sub_80CA8B4(sprite);
}
-void sub_80CA8B4(struct Sprite* sprite)
+static void sub_80CA8B4(struct Sprite* sprite)
{
if (TranslateAnimSpriteByDeltas(sprite))
{
@@ -103,7 +276,7 @@ void sub_80CA9A8(struct Sprite* sprite)
sprite->callback = sub_80CA9F8;
}
-void sub_80CA9F8(struct Sprite* sprite)
+static void sub_80CA9F8(struct Sprite* sprite)
{
if (TranslateAnimSpriteLinearAndSine(sprite))
DestroyAnimSprite(sprite);
@@ -139,7 +312,7 @@ void sub_80CAA14(struct Sprite* sprite)
sub_80CAACC(sprite);
}
-void sub_80CAACC(struct Sprite* sprite)
+static void sub_80CAACC(struct Sprite* sprite)
{
if (sub_8078CE8(sprite))
{
diff --git a/src/battle/anim/osmose.c b/src/battle/anim/osmose.c
index cca7af76e..dad5605f7 100644
--- a/src/battle/anim/osmose.c
+++ b/src/battle/anim/osmose.c
@@ -7,9 +7,34 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
-// osmose (I didn't want to use "absorb" as thats confusing)
+void sub_80CB768(struct Sprite* sprite);
+
+// osmose
// Used by Ingrain.
+const union AnimCmd gSpriteAnim_83D6688[] =
+{
+ ANIMCMD_FRAME(3, 3),
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D6694[] =
+{
+ gSpriteAnim_83D6688,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6698 =
+{
+ .tileTag = 10147,
+ .paletteTag = 10147,
+ .oam = &gOamData_837DF24,
+ .anims = gSpriteAnimTable_83D6694,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CB768,
+};
+
void sub_80CB768(struct Sprite* sprite)
{
if (!sprite->data[0])
diff --git a/src/battle/anim/powder.c b/src/battle/anim/powder.c
index 88339522e..046d3c20c 100644
--- a/src/battle/anim/powder.c
+++ b/src/battle/anim/powder.c
@@ -6,8 +6,60 @@
extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
+void AnimMovePowderParticle(struct Sprite* sprite);
static void AnimMovePowderParticleStep(struct Sprite* sprite);
+const union AnimCmd gSpriteAnim_83D61FC[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_FRAME(2, 5),
+ ANIMCMD_FRAME(4, 5),
+ ANIMCMD_FRAME(6, 5),
+ ANIMCMD_FRAME(8, 5),
+ ANIMCMD_FRAME(10, 5),
+ ANIMCMD_FRAME(12, 5),
+ ANIMCMD_FRAME(14, 5),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D6220[] =
+{
+ gSpriteAnim_83D61FC,
+};
+
+const struct SpriteTemplate gSleepPowderParticleSpriteTemplate =
+{
+ .tileTag = 10067,
+ .paletteTag = 10067,
+ .oam = &gOamData_837DF64,
+ .anims = gSpriteAnimTable_83D6220,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimMovePowderParticle,
+};
+
+const struct SpriteTemplate gStunSporeParticleSpriteTemplate =
+{
+ .tileTag = 10068,
+ .paletteTag = 10068,
+ .oam = &gOamData_837DF64,
+ .anims = gSpriteAnimTable_83D6220,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimMovePowderParticle,
+};
+
+const struct SpriteTemplate gPoisonPowderParticleSpriteTemplate =
+{
+ .tileTag = 10065,
+ .paletteTag = 10065,
+ .oam = &gOamData_837DF64,
+ .anims = gSpriteAnimTable_83D6220,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimMovePowderParticle,
+};
+
// Animates the falling particles that horizontally wave back and forth.
// Used by Sleep Powder, Stun Spore, and Poison Powder.
// arg 0: initial x pixel offset
diff --git a/src/battle/anim/roots.c b/src/battle/anim/roots.c
index 30c2d9652..b9b76c584 100644
--- a/src/battle/anim/roots.c
+++ b/src/battle/anim/roots.c
@@ -6,14 +6,79 @@
extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
-
extern s16 gUnknown_03000728[];
+void sub_80CB59C(struct Sprite* sprite);
+void sub_80CB620(struct Sprite *sprite);
static void sub_80CB710(struct Sprite* sprite);
// roots
// Used by Ingrain and Frenzy Plant.
+const union AnimCmd gSpriteAnim_83D6600[] =
+{
+ ANIMCMD_FRAME(0, 7),
+ ANIMCMD_FRAME(16, 7),
+ ANIMCMD_FRAME(32, 7),
+ ANIMCMD_FRAME(48, 7),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D6614[] =
+{
+ ANIMCMD_FRAME(0, 7, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 7, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 7, .hFlip = TRUE),
+ ANIMCMD_FRAME(48, 7, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D6628[] =
+{
+ ANIMCMD_FRAME(0, 7),
+ ANIMCMD_FRAME(16, 7),
+ ANIMCMD_FRAME(32, 7),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D6638[] =
+{
+ ANIMCMD_FRAME(0, 7, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 7, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 7, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D6648[] =
+{
+ gSpriteAnim_83D6600,
+ gSpriteAnim_83D6614,
+ gSpriteAnim_83D6628,
+ gSpriteAnim_83D6638,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6658 =
+{
+ .tileTag = 10223,
+ .paletteTag = 10223,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D6648,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CB59C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6670 =
+{
+ .tileTag = 10223,
+ .paletteTag = 10223,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D6648,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CB620,
+};
+
void sub_80CB59C(struct Sprite* sprite)
{
if (!sprite->data[0])
@@ -57,7 +122,7 @@ void sub_80CB620(struct Sprite *sprite)
gUnknown_03000728[3] = e2;
}
-void sub_80CB710(struct Sprite* sprite)
+static void sub_80CB710(struct Sprite* sprite)
{
if (++sprite->data[0] > (sprite->data[2] - 10))
sprite->invisible = sprite->data[0] % 2;
diff --git a/src/battle/anim/seed.c b/src/battle/anim/seed.c
index d7c56e7a8..11eebada0 100644
--- a/src/battle/anim/seed.c
+++ b/src/battle/anim/seed.c
@@ -7,9 +7,40 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void AnimLeechSeed(struct Sprite* sprite);
static void AnimLeechSeedStep(struct Sprite* sprite);
static void AnimLeechSeedSprouts(struct Sprite* sprite);
+const union AnimCmd gSpriteAnim_83D63AC[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D63B4[] =
+{
+ ANIMCMD_FRAME(4, 7),
+ ANIMCMD_FRAME(8, 7),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D63C0[] =
+{
+ gSpriteAnim_83D63AC,
+ gSpriteAnim_83D63B4,
+};
+
+const struct SpriteTemplate gLeechSeedSpriteTemplate =
+{
+ .tileTag = 10006,
+ .paletteTag = 10006,
+ .oam = &gOamData_837DF2C,
+ .anims = gSpriteAnimTable_83D63C0,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimLeechSeed,
+};
+
// seed (sprouts a sapling from a seed.)
// Used by Leech Seed.
// arg 0: initial x pixel offset
diff --git a/src/battle/anim/shimmer.c b/src/battle/anim/shimmer.c
index 9e7bea1e4..78b430094 100644
--- a/src/battle/anim/shimmer.c
+++ b/src/battle/anim/shimmer.c
@@ -9,11 +9,20 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
-extern u16 gUnknown_083D6984[];
-
// shimmer
// Used by Magical Leaf.
+static const u16 sMagicalLeafBlendColors[] =
+{
+ RGB(31, 0, 0),
+ RGB(31, 19, 0),
+ RGB(31, 31, 0),
+ RGB(0, 31, 0),
+ RGB(5, 14, 31),
+ RGB(22, 10, 31),
+ RGB(22, 21, 31),
+};
+
void sub_80CC5F8(u8 taskId)
{
struct Task* task = &gTasks[taskId];
@@ -29,8 +38,8 @@ void sub_80CC5F8(u8 taskId)
if (task->data[9] >= 0)
{
task->data[9] = 0;
- BlendPalette(task->data[8], 0x10, task->data[10], gUnknown_083D6984[task->data[11]]);
- BlendPalette(task->data[12], 0x10, task->data[10], gUnknown_083D6984[task->data[11]]);
+ BlendPalette(task->data[8], 0x10, task->data[10], sMagicalLeafBlendColors[task->data[11]]);
+ BlendPalette(task->data[12], 0x10, task->data[10], sMagicalLeafBlendColors[task->data[11]]);
task->data[10]++;
if (task->data[10] == 17)
{
diff --git a/src/battle/anim/switch.c b/src/battle/anim/switch.c
index c4082b6aa..fcb1d9fc3 100644
--- a/src/battle/anim/switch.c
+++ b/src/battle/anim/switch.c
@@ -7,9 +7,11 @@
extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+extern const union AffineAnimCmd gSpriteAffineAnim_83D66BC[];
+extern const union AffineAnimCmd gSpriteAffineAnim_83D66DC[];
+extern const union AnimCmd *const gSpriteAnimTable_83D66B8[];
-extern s8 gUnknown_083D680C[11][3];
-
+void sub_80CBBF0(struct Sprite* sprite);
static void sub_80CBC8C(struct Sprite* sprite);
static void sub_80CBCF8(struct Sprite* sprite);
static void sub_80CBDB0(struct Sprite* sprite);
@@ -17,6 +19,56 @@ static void sub_80CBDB0(struct Sprite* sprite);
// switch (makes an item and circles it from side to side on the field.)
// Used in Trick.
+
+const union AffineAnimCmd gSpriteAffineAnim_83D6794[] = {
+ AFFINEANIMCMD_FRAME(0, 0, 0, 3),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D67A4[] = {
+ AFFINEANIMCMD_FRAME(0, -10, 0, 3),
+ AFFINEANIMCMD_FRAME(0, -6, 0, 3),
+ AFFINEANIMCMD_FRAME(0, -2, 0, 3),
+ AFFINEANIMCMD_FRAME(0, 0, 0, 3),
+ AFFINEANIMCMD_FRAME(0, 2, 0, 3),
+ AFFINEANIMCMD_FRAME(0, 6, 0, 3),
+ AFFINEANIMCMD_FRAME(0, 10, 0, 3),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D67E4[] = {
+ gSpriteAffineAnim_83D6794,
+ gSpriteAffineAnim_83D67A4,
+ gSpriteAffineAnim_83D66BC,
+ gSpriteAffineAnim_83D66DC,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D67F4 =
+{
+ .tileTag = 10224,
+ .paletteTag = 10224,
+ .oam = &gOamData_837DF94,
+ .anims = gSpriteAnimTable_83D66B8,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D67E4,
+ .callback = sub_80CBBF0,
+};
+
+const s8 gUnknown_083D680C[][3] =
+{
+ {5, 24, 1},
+ {0, 4, 0},
+ {8, 16, -1},
+ {0, 2, 0},
+ {8, 16, 1},
+ {0, 2, 0},
+ {8, 16, 1},
+ {0, 2, 0},
+ {8, 16, 1},
+ {0, 16, 0},
+ {0, 0, 127},
+};
+
void sub_80CBBF0(struct Sprite* sprite)
{
int a;
@@ -27,7 +79,7 @@ void sub_80CBBF0(struct Sprite* sprite)
if (!IsContest())
{
sprite->data[1] = gBattleAnimArgs[1];
- sprite->pos1.x = 0x78;
+ sprite->pos1.x = 120;
}
else
{
@@ -38,13 +90,13 @@ void sub_80CBBF0(struct Sprite* sprite)
b = a;
sprite->data[1] = a - ((b >> 8) << 8);
- sprite->pos1.x = 0x46;
+ sprite->pos1.x = 70;
}
sprite->pos1.y = gBattleAnimArgs[0];
sprite->data[2] = gBattleAnimArgs[0];
sprite->data[4] = 20;
- sprite->pos2.x = Cos(sprite->data[1], 0x3C);
+ sprite->pos2.x = Cos(sprite->data[1], 60);
sprite->pos2.y = Sin(sprite->data[1], 20);
sprite->callback = sub_80CBC8C;
if (sprite->data[1] > 0 && sprite->data[1] < 0xC0)
@@ -54,7 +106,7 @@ void sub_80CBBF0(struct Sprite* sprite)
}
}
-void sub_80CBC8C(struct Sprite* sprite)
+static void sub_80CBC8C(struct Sprite* sprite)
{
switch (sprite->data[3])
{
@@ -84,7 +136,7 @@ void sub_80CBC8C(struct Sprite* sprite)
}
}
-void sub_80CBCF8(struct Sprite* sprite)
+static void sub_80CBCF8(struct Sprite* sprite)
{
if (sprite->data[2] == gUnknown_083D680C[sprite->data[0]][1])
{
@@ -113,12 +165,12 @@ void sub_80CBCF8(struct Sprite* sprite)
}
}
- sprite->pos2.x = Cos(sprite->data[1], 0x3C);
+ sprite->pos2.x = Cos(sprite->data[1], 60);
sprite->pos2.y = Sin(sprite->data[1], 20);
}
}
-void sub_80CBDB0(struct Sprite* sprite)
+static void sub_80CBDB0(struct Sprite* sprite)
{
if (sprite->data[0] > 20)
DestroyAnimSprite(sprite);
diff --git a/src/battle/anim/tendrils.c b/src/battle/anim/tendrils.c
index 4ef704f3a..55e2c21bb 100644
--- a/src/battle/anim/tendrils.c
+++ b/src/battle/anim/tendrils.c
@@ -7,12 +7,67 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CB25C(struct Sprite* sprite);
static void sub_80CB298(struct Sprite* sprite);
static void sub_80CB2D4(struct Sprite* sprite);
// tendrils
// Used by Constrict.
+const union AnimCmd gSpriteAnim_83D6528[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(32, 4),
+ ANIMCMD_FRAME(64, 4),
+ ANIMCMD_FRAME(96, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D653C[] =
+{
+ ANIMCMD_FRAME(0, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(64, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(96, 4, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D6550[] =
+{
+ gSpriteAnim_83D6528,
+ gSpriteAnim_83D653C,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D6558[] = {
+ AFFINEANIMCMD_FRAME(256, 256, 0, 0),
+ AFFINEANIMCMD_FRAME(-11, 0, 0, 6),
+ AFFINEANIMCMD_FRAME(11, 0, 0, 6),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D6578[] = {
+ AFFINEANIMCMD_FRAME(-256, 256, 0, 0),
+ AFFINEANIMCMD_FRAME(11, 0, 0, 6),
+ AFFINEANIMCMD_FRAME(-11, 0, 0, 6),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D6598[] = {
+ gSpriteAffineAnim_83D6558,
+ gSpriteAffineAnim_83D6578,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D65A0 =
+{
+ .tileTag = 10186,
+ .paletteTag = 10186,
+ .oam = &gOamData_837DFBC,
+ .anims = gSpriteAnimTable_83D6550,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D6598,
+ .callback = sub_80CB25C,
+};
+
void sub_80CB25C(struct Sprite* sprite)
{
sub_8078764(sprite, 0);
@@ -23,7 +78,7 @@ void sub_80CB25C(struct Sprite* sprite)
sprite->callback = sub_80CB298;
}
-void sub_80CB298(struct Sprite* sprite)
+static void sub_80CB298(struct Sprite* sprite)
{
if ((u16)gBattleAnimArgs[7] == 0xFFFF)
{
@@ -34,7 +89,7 @@ void sub_80CB298(struct Sprite* sprite)
}
}
-void sub_80CB2D4(struct Sprite* sprite)
+static void sub_80CB2D4(struct Sprite* sprite)
{
GetAnimBattlerSpriteId(1);
if (!sprite->data[2])
diff --git a/src/battle/anim/unused_1.c b/src/battle/anim/unused_1.c
index d7e5fbfe4..15050b54c 100644
--- a/src/battle/anim/unused_1.c
+++ b/src/battle/anim/unused_1.c
@@ -8,9 +8,73 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CC8C8(struct Sprite* sprite);
+
// unused effect file.
// Seems to be a beta effect for Beat Up, possibly.
+const union AffineAnimCmd gSpriteAffineAnim_83D6A58[] = {
+ AFFINEANIMCMD_FRAME(256, 256, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D6A68[] = {
+ AFFINEANIMCMD_FRAME(256, 256, 32, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D6A78[] = {
+ AFFINEANIMCMD_FRAME(256, 256, 64, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D6A88[] = {
+ AFFINEANIMCMD_FRAME(256, 256, 96, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D6A98[] = {
+ AFFINEANIMCMD_FRAME(256, 256, -128, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D6AA8[] = {
+ AFFINEANIMCMD_FRAME(256, 256, -96, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D6AB8[] = {
+ AFFINEANIMCMD_FRAME(256, 256, -64, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D6AC8[] = {
+ AFFINEANIMCMD_FRAME(256, 256, -32, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D6AD8[] = {
+ gSpriteAffineAnim_83D6A58,
+ gSpriteAffineAnim_83D6A68,
+ gSpriteAffineAnim_83D6A78,
+ gSpriteAffineAnim_83D6A88,
+ gSpriteAffineAnim_83D6A98,
+ gSpriteAffineAnim_83D6AA8,
+ gSpriteAffineAnim_83D6AB8,
+ gSpriteAffineAnim_83D6AC8,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83D6AF8 =
+{
+ .tileTag = 10143,
+ .paletteTag = 10143,
+ .oam = &gOamData_837DF94,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D6AD8,
+ .callback = sub_80CC8C8,
+};
+
void sub_80CC8C8(struct Sprite* sprite)
{
sprite->pos1.x += gBattleAnimArgs[0];
diff --git a/src/battle/anim/whip.c b/src/battle/anim/whip.c
index 08b24369d..e6e004932 100644
--- a/src/battle/anim/whip.c
+++ b/src/battle/anim/whip.c
@@ -8,16 +8,101 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CC82C(struct Sprite* sprite);
+void sub_80CC884(struct Sprite* sprite);
+
// whip (does a hitting animation that uses a rotating sprite to invoke the sprite getting hit.)
// Used by Slam and Vine Whip.
-void sub_80CC810(struct Sprite* sprite)
+const union AnimCmd gSpriteAnim_83D69AC[] =
+{
+ ANIMCMD_FRAME(64, 3),
+ ANIMCMD_FRAME(80, 3),
+ ANIMCMD_FRAME(96, 3),
+ ANIMCMD_FRAME(112, 6),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D69C0[] =
+{
+ ANIMCMD_FRAME(64, 3, .hFlip = TRUE),
+ ANIMCMD_FRAME(80, 3, .hFlip = TRUE),
+ ANIMCMD_FRAME(96, 3, .hFlip = TRUE),
+ ANIMCMD_FRAME(112, 6, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D69D4[] =
+{
+ gSpriteAnim_83D69AC,
+ gSpriteAnim_83D69C0,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D69DC =
+{
+ .tileTag = 10056,
+ .paletteTag = 10056,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D69D4,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CC884,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D69F4 =
+{
+ .tileTag = 10287,
+ .paletteTag = 10287,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D69D4,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CC884,
+};
+
+const union AnimCmd gSpriteAnim_83D6A0C[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(16, 4),
+ ANIMCMD_FRAME(32, 4),
+ ANIMCMD_FRAME(48, 4),
+ ANIMCMD_FRAME(64, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D6A24[] =
+{
+ gSpriteAnim_83D6A0C,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83D6A28 =
+{
+ .tileTag = 10021,
+ .paletteTag = 10021,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D6A24,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CC82C,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83D6A40 =
+{
+ .tileTag = 10022,
+ .paletteTag = 10022,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D6A24,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CC82C,
+};
+
+static void sub_80CC810(struct Sprite* sprite)
{
if (sprite->animEnded)
DestroyAnimSprite(sprite);
}
-// unused, beta effect for diagonal sprite movement?
void sub_80CC82C(struct Sprite* sprite)
{
if (GetBattlerSide(gAnimBankAttacker) != 0)
diff --git a/src/rom_8077ABC.c b/src/rom_8077ABC.c
index cccedc89c..a10fd45b8 100644
--- a/src/rom_8077ABC.c
+++ b/src/rom_8077ABC.c
@@ -56,7 +56,6 @@ struct Struct_2017810
#define BG2CNT (*(vBgCnt *)REG_ADDR_BG2CNT)
#define BG3CNT (*(vBgCnt *)REG_ADDR_BG3CNT)
-extern struct OamData gOamData_837DF9C[];
extern const union AnimCmd *const gDummySpriteAnimTable[];
extern const union AffineAnimCmd *const gDummySpriteAffineAnimTable[];
@@ -129,7 +128,7 @@ const struct SpriteTemplate gSpriteTemplate_837F5B0[] =
{
.tileTag = 55125,
.paletteTag = 55125,
- .oam = gOamData_837DF9C,
+ .oam = &gOamData_837DF9C,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -138,7 +137,7 @@ const struct SpriteTemplate gSpriteTemplate_837F5B0[] =
{
.tileTag = 55126,
.paletteTag = 55126,
- .oam = gOamData_837DF9C,
+ .oam = &gOamData_837DF9C,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,