summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMarcus Huderle <huderlem@gmail.com>2018-04-30 13:42:55 -0700
committerGitHub <noreply@github.com>2018-04-30 13:42:55 -0700
commit74f9ec9464e5346ae277c9c929ef4b965276fc02 (patch)
tree6e12c5e3f456ad444d37853f0bb8e0a03bd85003 /src
parente437b10eee6f843e1898ce9b0302afb17f8b81e9 (diff)
parentd68e8b09eecd136fc0dcc32c1e08b946b8981adc (diff)
Merge pull request #608 from huderlem/anim_rodata
Move battle anim .rodata
Diffstat (limited to 'src')
-rw-r--r--src/battle/anim/alert.c31
-rw-r--r--src/battle/anim/angel.c24
-rw-r--r--src/battle/anim/angel_kiss.c50
-rw-r--r--src/battle/anim/anger.c25
-rw-r--r--src/battle/anim/aurora.c42
-rw-r--r--src/battle/anim/beta_beat_up.c25
-rw-r--r--src/battle/anim/blow_kiss.c14
-rw-r--r--src/battle/anim/bottle.c38
-rw-r--r--src/battle/anim/brace.c28
-rw-r--r--src/battle/anim/breath.c37
-rw-r--r--src/battle/anim/bubble.c37
-rw-r--r--src/battle/anim/bug.c186
-rw-r--r--src/battle/anim/bullet.c27
-rw-r--r--src/battle/anim/copy_orb.c31
-rw-r--r--src/battle/anim/cube.c38
-rwxr-xr-xsrc/battle/anim/current.c335
-rw-r--r--src/battle/anim/cutter.c144
-rw-r--r--src/battle/anim/cyclone.c25
-rw-r--r--src/battle/anim/dark.c164
-rw-r--r--src/battle/anim/devil.c31
-rw-r--r--src/battle/anim/dragon.c196
-rw-r--r--src/battle/anim/draw.c16
-rw-r--r--src/battle/anim/drum.c32
-rwxr-xr-x[-rw-r--r--]src/battle/anim/egg.c130
-rw-r--r--src/battle/anim/energy_wave.c144
-rw-r--r--src/battle/anim/espeed.c58
-rw-r--r--src/battle/anim/fang.c27
-rw-r--r--src/battle/anim/fight.c394
-rw-r--r--src/battle/anim/finger.c256
-rw-r--r--src/battle/anim/fire.c172
-rw-r--r--src/battle/anim/fire_2.c302
-rwxr-xr-xsrc/battle/anim/flying.c346
-rw-r--r--src/battle/anim/flying_hearts.c14
-rw-r--r--src/battle/anim/flying_path.c74
-rw-r--r--src/battle/anim/flying_petals.c100
-rwxr-xr-xsrc/battle/anim/ghost.c191
-rw-r--r--src/battle/anim/glitter.c43
-rw-r--r--src/battle/anim/glow.c55
-rw-r--r--src/battle/anim/grip.c36
-rwxr-xr-xsrc/battle/anim/ground.c125
-rw-r--r--src/battle/anim/grow.c14
-rw-r--r--src/battle/anim/guard.c31
-rw-r--r--src/battle/anim/guillotine.c40
-rw-r--r--src/battle/anim/heal.c27
-rw-r--r--src/battle/anim/heal_bell.c132
-rw-r--r--src/battle/anim/heart_1.c13
-rw-r--r--src/battle/anim/heated_rock.c129
-rw-r--r--src/battle/anim/hidden_power_orbit.c120
-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
-rwxr-xr-xsrc/battle/anim/ice.c495
-rw-r--r--src/battle/anim/kiss_fountain.c13
-rw-r--r--src/battle/anim/leaf.c240
-rw-r--r--src/battle/anim/lunge.c339
-rw-r--r--src/battle/anim/lunge_1.c124
-rw-r--r--src/battle/anim/lunge_2.c163
-rw-r--r--src/battle/anim/money.c48
-rw-r--r--src/battle/anim/moon.c14
-rw-r--r--src/battle/anim/musical.c393
-rw-r--r--src/battle/anim/noise.c12
-rwxr-xr-xsrc/battle/anim/normal.c240
-rw-r--r--src/battle/anim/note_rain.c25
-rw-r--r--src/battle/anim/note_scatter.c54
-rw-r--r--src/battle/anim/note_scatter_2.c57
-rw-r--r--src/battle/anim/note_spin.c51
-rw-r--r--src/battle/anim/note_wave.c143
-rw-r--r--src/battle/anim/orbit.c83
-rw-r--r--src/battle/anim/orbit_fast.c63
-rw-r--r--src/battle/anim/orbit_scatter.c31
-rw-r--r--src/battle/anim/orbs.c181
-rw-r--r--src/battle/anim/osmose.c27
-rw-r--r--src/battle/anim/perceive.c30
-rw-r--r--src/battle/anim/poison.c192
-rw-r--r--src/battle/anim/powder.c52
-rw-r--r--src/battle/anim/psychic.c408
-rw-r--r--src/battle/anim/rain.c37
-rw-r--r--src/battle/anim/ring.c292
-rw-r--r--src/battle/anim/rock.c295
-rw-r--r--src/battle/anim/roots.c69
-rw-r--r--src/battle/anim/scan.c46
-rw-r--r--src/battle/anim/seed.c31
-rw-r--r--src/battle/anim/shield.c14
-rw-r--r--src/battle/anim/shimmer.c17
-rw-r--r--src/battle/anim/shock.c51
-rw-r--r--src/battle/anim/slash.c63
-rw-r--r--src/battle/anim/sleep.c59
-rw-r--r--src/battle/anim/slice.c38
-rw-r--r--src/battle/anim/smoke.c22
-rw-r--r--src/battle/anim/sonic.c237
-rw-r--r--src/battle/anim/sonic_task.c152
-rw-r--r--src/battle/anim/spin_finger.c73
-rw-r--r--src/battle/anim/spit.c27
-rw-r--r--src/battle/anim/splash.c14
-rw-r--r--src/battle/anim/startle.c13
-rw-r--r--src/battle/anim/strike.c43
-rw-r--r--src/battle/anim/struggle.c36
-rw-r--r--src/battle/anim/sunlight.c25
-rw-r--r--src/battle/anim/swipe.c37
-rw-r--r--src/battle/anim/switch.c70
-rw-r--r--src/battle/anim/sword.c27
-rw-r--r--src/battle/anim/taunt_finger.c56
-rw-r--r--src/battle/anim/tendrils.c59
-rw-r--r--src/battle/anim/thought.c58
-rw-r--r--src/battle/anim/thrashing.c18
-rw-r--r--src/battle/anim/thunder.c27
-rw-r--r--src/battle/anim/tile.c219
-rw-r--r--src/battle/anim/tile_in.c51
-rw-r--r--src/battle/anim/tile_out.c81
-rw-r--r--src/battle/anim/twinkle.c28
-rw-r--r--src/battle/anim/unused_1.c64
-rw-r--r--src/battle/anim/unused_2.c88
-rw-r--r--src/battle/anim/unused_3.c47
-rw-r--r--src/battle/anim/unused_4.c58
-rw-r--r--src/battle/anim/unused_5.c13
-rw-r--r--src/battle/anim/unused_6.c26
-rw-r--r--src/battle/anim/unused_7.c15
-rw-r--r--src/battle/anim/unused_8.c54
-rw-r--r--src/battle/anim/unused_9.c18
-rw-r--r--src/battle/anim/uproar.c14
-rw-r--r--src/battle/anim/water.c182
-rw-r--r--src/battle/anim/wave_finger.c39
-rw-r--r--src/battle/anim/whip.c89
-rw-r--r--src/battle/anim/wisp_fire.c43
-rw-r--r--src/battle/anim/wisp_orb.c47
-rw-r--r--src/rom_8077ABC.c5
126 files changed, 9412 insertions, 1890 deletions
diff --git a/src/battle/anim/alert.c b/src/battle/anim/alert.c
index 72f8ec947..04ae15a5e 100644
--- a/src/battle/anim/alert.c
+++ b/src/battle/anim/alert.c
@@ -8,9 +8,40 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CF610(struct Sprite* sprite);
+
// alert (red thunder from the sides of a Pokemon, simulating more alert behavior.)
// Used in Kinesis.
+const union AnimCmd gSpriteAnim_83D7428[] =
+{
+ ANIMCMD_FRAME(0, 3, .hFlip = TRUE),
+ ANIMCMD_FRAME(8, 3, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 3, .hFlip = TRUE),
+ ANIMCMD_FRAME(24, 3, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 3, .hFlip = TRUE),
+ ANIMCMD_FRAME(40, 3, .hFlip = TRUE),
+ ANIMCMD_FRAME(48, 3, .hFlip = TRUE),
+ ANIMCMD_LOOP(1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D744C[] =
+{
+ gSpriteAnim_83D7428,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7450 =
+{
+ .tileTag = 10075,
+ .paletteTag = 10075,
+ .oam = &gOamData_837DF54,
+ .anims = gSpriteAnimTable_83D744C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CF610,
+};
+
void sub_80CF610(struct Sprite* sprite)
{
sub_8078650(sprite);
diff --git a/src/battle/anim/angel.c b/src/battle/anim/angel.c
index 5ec083887..be5b82ea1 100644
--- a/src/battle/anim/angel.c
+++ b/src/battle/anim/angel.c
@@ -8,9 +8,33 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80D2938(struct Sprite* sprite);
+
// angel (a little angel descends from somewhere towards a position)
// Used in Sweet Kiss.
+const union AnimCmd gSpriteAnim_83D7BAC[] =
+{
+ ANIMCMD_FRAME(0, 24),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D7BB4[] =
+{
+ gSpriteAnim_83D7BAC,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7BB8 =
+{
+ .tileTag = 10220,
+ .paletteTag = 10220,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D7BB4,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D2938,
+};
+
void sub_80D2938(struct Sprite* sprite)
{
s16 r5;
diff --git a/src/battle/anim/angel_kiss.c b/src/battle/anim/angel_kiss.c
index d5be6e2af..64abff6cf 100644
--- a/src/battle/anim/angel_kiss.c
+++ b/src/battle/anim/angel_kiss.c
@@ -9,10 +9,23 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80D2A38(struct Sprite* sprite);
+
// angel_kiss (a different variation of kiss_fountain.)
// Used in Sweet Kiss.
-void sub_80D29CC(struct Sprite* sprite)
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7BD0 =
+{
+ .tileTag = 10219,
+ .paletteTag = 10219,
+ .oam = &gOamData_837DF2C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D2A38,
+};
+
+static void sub_80D29CC(struct Sprite* sprite)
{
sprite->data[5]++;
sprite->pos2.x = Sin(sprite->data[3], 5);
@@ -50,38 +63,3 @@ void sub_80D2A38(struct Sprite* sprite)
}
}
}
-
-// this is for the next file, but i didnt feel like deleting it from the original 80C file.
-/* void sub_80D2ABC(struct Sprite* sprite)
-{
- int var;
- s16 var2;
- int var3;
- if (sprite->data[3] == 0)
- {
- sprite->pos1.x += gBattleAnimArgs[0];
- sprite->pos1.y += gBattleAnimArgs[1];
- StartSpriteAnim(sprite, 0);
- sprite->subpriority = sub_8079E90(gAnimBankTarget) - 1;
- sprite->data[2] = 1;
- }
-
- sprite->data[0] += sprite->data[2];
- var = sprite->data[0] * 4;
- if (var < 0)
- var += 0xFF;
-
- sprite->data[1] = (sprite->data[0] * 4) -(((var) >> 8) << 8);
- if (sprite->data[1] < 0)
- sprite->data[1] = 0;
-
- var3 = sprite->data[1];
- var2 = sprite->data[0];
- var2 /= 4;
- sprite->pos2.x = Cos(var3, 30 - var2);
- var3 = sprite->data[1];
- var2 = sprite->data[0] / 8;
- sprite->pos2.x = Sin(var3, 10 - var2);
- if (sprite->data[1] > 0x80 && sprite->data[2] > 0)
- sprite->data[2] = 0xFFFF;
-} */
diff --git a/src/battle/anim/anger.c b/src/battle/anim/anger.c
index 4ea56636b..a50404ddf 100644
--- a/src/battle/anim/anger.c
+++ b/src/battle/anim/anger.c
@@ -8,9 +8,34 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80D09C0(struct Sprite* sprite);
+
// anger (anger emotes, usually above the Pokemon's head, indicating annoyed emotions.)
// Used in Frustration, Rage, Swagger, Torment, and Taunt.
+const union AffineAnimCmd gSpriteAffineAnim_83D777C[] =
+{
+ AFFINEANIMCMD_FRAME(0xB, 0xB, 0, 8),
+ AFFINEANIMCMD_FRAME(0xFFF5, 0xFFF5, 0, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D7794[] =
+{
+ gSpriteAffineAnim_83D777C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7798 =
+{
+ .tileTag = 10087,
+ .paletteTag = 10087,
+ .oam = &gOamData_837DF8C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D7794,
+ .callback = sub_80D09C0,
+};
+
void sub_80D09C0(struct Sprite* sprite)
{
u8 bank;
diff --git a/src/battle/anim/aurora.c b/src/battle/anim/aurora.c
index de145d6a4..5aff17f48 100644
--- a/src/battle/anim/aurora.c
+++ b/src/battle/anim/aurora.c
@@ -9,9 +9,51 @@ 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);
+const union AnimCmd gSpriteAnim_83D9190[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D9198[] =
+{
+ ANIMCMD_FRAME(4, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D91A0[] =
+{
+ gSpriteAnim_83D9190,
+ gSpriteAnim_83D9198,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D91A8[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 1),
+ AFFINEANIMCMD_FRAME(0x60, 0x60, 0, 1),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D91C0[] =
+{
+ gSpriteAffineAnim_83D91A8,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D91C4 =
+{
+ .tileTag = 10140,
+ .paletteTag = 10140,
+ .oam = &gOamData_837E024,
+ .anims = gSpriteAnimTable_83D91A0,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D91C0,
+ .callback = sub_80D33B4,
+};
+
void sub_80D33B4(struct Sprite *sprite)
{
s16 r6;
diff --git a/src/battle/anim/beta_beat_up.c b/src/battle/anim/beta_beat_up.c
index ee889492c..166782362 100644
--- a/src/battle/anim/beta_beat_up.c
+++ b/src/battle/anim/beta_beat_up.c
@@ -7,10 +7,35 @@ extern s16 gBattleAnimArgs[8];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80D6234(struct Sprite *sprite);
static void sub_80D6278(struct Sprite *);
// beta_beat_up
+const union AffineAnimCmd gSpriteAffineAnim_83D97E8[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 20),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -16, 60),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D9808[] =
+{
+ gSpriteAffineAnim_83D97E8,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83D980C =
+{
+ .tileTag = 10143,
+ .paletteTag = 10143,
+ .oam = &gOamData_837DF94,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D9808,
+ .callback = sub_80D6234,
+};
+
void sub_80D6234(struct Sprite *sprite)
{
if (GetBattlerSide(gAnimBankAttacker) != 0)
diff --git a/src/battle/anim/blow_kiss.c b/src/battle/anim/blow_kiss.c
index 6d762bc7f..0235794c2 100644
--- a/src/battle/anim/blow_kiss.c
+++ b/src/battle/anim/blow_kiss.c
@@ -8,11 +8,23 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80D1F58(struct Sprite* sprite);
static void sub_80D1FA4(struct Sprite* sprite);
// blow_kiss (a heart floating across the screen.)
// Used in Attract.
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7AB0 =
+{
+ .tileTag = 10216,
+ .paletteTag = 10216,
+ .oam = &gOamData_837DF2C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D1F58,
+};
+
void sub_80D1F58(struct Sprite* sprite)
{
InitAnimSpritePos(sprite, 1);
@@ -25,7 +37,7 @@ void sub_80D1F58(struct Sprite* sprite)
sprite->callback = sub_80D1FA4;
}
-void sub_80D1FA4(struct Sprite* sprite)
+static void sub_80D1FA4(struct Sprite* sprite)
{
if (TranslateAnimSpriteByDeltas(sprite) == 0)
{
diff --git a/src/battle/anim/bottle.c b/src/battle/anim/bottle.c
index 0d5a54e18..83a539f89 100644
--- a/src/battle/anim/bottle.c
+++ b/src/battle/anim/bottle.c
@@ -8,12 +8,46 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CCF04(struct Sprite* sprite);
static void sub_80CCF70(struct Sprite* sprite);
static void sub_80CD0CC(struct Sprite* sprite, int unk1, int unk2);
// bottle (shows a bottle swinging back and forth.)
// Used by Milk Drink.
+const union AffineAnimCmd gSpriteAffineAnim_83D6C00[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D6C10[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 2, 12),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 6),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -2, 24),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 6),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 2, 12),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D6C40[] =
+{
+ gSpriteAffineAnim_83D6C00,
+ gSpriteAffineAnim_83D6C10,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6C48 =
+{
+ .tileTag = 10099,
+ .paletteTag = 10099,
+ .oam = &gOamData_837E0B4,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D6C40,
+ .callback = sub_80CCF04,
+};
+
void sub_80CCF04(struct Sprite* sprite)
{
sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankTarget, 2);
@@ -30,7 +64,7 @@ void sub_80CCF04(struct Sprite* sprite)
sprite->callback = sub_80CCF70;
}
-void sub_80CCF70(struct Sprite* sprite)
+static void sub_80CCF70(struct Sprite* sprite)
{
switch (sprite->data[0])
{
@@ -103,7 +137,7 @@ void sub_80CCF70(struct Sprite* sprite)
}
}
-void sub_80CD0CC(struct Sprite* sprite, int unk1, int unk2)
+static void sub_80CD0CC(struct Sprite* sprite, int unk1, int unk2)
{
if (sprite->data[3] <= 11)
sprite->data[4] += 2;
diff --git a/src/battle/anim/brace.c b/src/battle/anim/brace.c
index a81af73ac..89330788c 100644
--- a/src/battle/anim/brace.c
+++ b/src/battle/anim/brace.c
@@ -8,11 +8,37 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CDF0C(struct Sprite* sprite);
static void sub_80CDF70(struct Sprite* sprite);
// brace (the Pokemon prepares to endure a hit)
// Used in Endure.
+const union AnimCmd gSpriteAnim_83D6E80[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(8, 12),
+ ANIMCMD_FRAME(16, 4),
+ ANIMCMD_FRAME(24, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D6E94[] =
+{
+ gSpriteAnim_83D6E80,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_EndureFlame =
+{
+ .tileTag = 10184,
+ .paletteTag = 10184,
+ .oam = &gOamData_837DF74,
+ .anims = gSpriteAnimTable_83D6E94,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CDF0C,
+};
+
void sub_80CDF0C(struct Sprite* sprite)
{
if (gBattleAnimArgs[0] == 0)
@@ -31,7 +57,7 @@ void sub_80CDF0C(struct Sprite* sprite)
sprite->callback = sub_80CDF70;
}
-void sub_80CDF70(struct Sprite* sprite)
+static void sub_80CDF70(struct Sprite* sprite)
{
if (++sprite->data[0] > sprite->data[1])
{
diff --git a/src/battle/anim/breath.c b/src/battle/anim/breath.c
index 58b5066c0..87c737fac 100644
--- a/src/battle/anim/breath.c
+++ b/src/battle/anim/breath.c
@@ -8,9 +8,46 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80D0930(struct Sprite* sprite);
+
// breath (a puff of smoke, usually from the mouth or nose of the Pokemon.)
// Used in Swagger and Bulk Up.
+const union AnimCmd gSpriteAnim_83D7734[] =
+{
+ ANIMCMD_FRAME(0, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(4, 40, .hFlip = TRUE),
+ ANIMCMD_FRAME(8, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(12, 4, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D7748[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(4, 40),
+ ANIMCMD_FRAME(8, 4),
+ ANIMCMD_FRAME(12, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D775C[] =
+{
+ gSpriteAnim_83D7734,
+ gSpriteAnim_83D7748,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7764 =
+{
+ .tileTag = 10086,
+ .paletteTag = 10086,
+ .oam = &gOamData_837DF2C,
+ .anims = gSpriteAnimTable_83D775C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D0930,
+};
+
void sub_80D0930(struct Sprite* sprite)
{
if (GetBattlerSide(gAnimBankAttacker) == 0)
diff --git a/src/battle/anim/bubble.c b/src/battle/anim/bubble.c
index 27791eedf..e024091d7 100644
--- a/src/battle/anim/bubble.c
+++ b/src/battle/anim/bubble.c
@@ -8,6 +8,7 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80D31C8(struct Sprite* sprite);
static void sub_80D32E8(struct Sprite *sprite);
static void sub_80D3370(struct Sprite *sprite);
static void sub_80D3398(struct Sprite *sprite);
@@ -15,6 +16,42 @@ static void sub_80D3398(struct Sprite *sprite);
// bubble (indidivual bubble that floats around)
// Used in Bubble and Bubblebeam
+const union AffineAnimCmd gSpriteAffineAnim_83D9148[] =
+{
+ AFFINEANIMCMD_FRAME(0xFFFB, 0xFFFB, 0, 10),
+ AFFINEANIMCMD_FRAME(0x5, 0x5, 0, 10),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D9160[] =
+{
+ gSpriteAffineAnim_83D9148,
+};
+
+const union AnimCmd gSpriteAnim_83D9164[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_FRAME(4, 5),
+ ANIMCMD_FRAME(8, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D9174[] =
+{
+ gSpriteAnim_83D9164,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9178 =
+{
+ .tileTag = 10146,
+ .paletteTag = 10146,
+ .oam = &gOamData_837E0AC,
+ .anims = gSpriteAnimTable_83D9174,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D9160,
+ .callback = sub_80D31C8,
+};
+
void sub_80D31C8(struct Sprite* sprite)
{
u8 newSpriteId;
diff --git a/src/battle/anim/bug.c b/src/battle/anim/bug.c
index 245e45774..c4c7fe937 100644
--- a/src/battle/anim/bug.c
+++ b/src/battle/anim/bug.c
@@ -3,18 +3,202 @@
#include "contest.h"
#include "rom_8077ABC.h"
#include "trig.h"
-// #include "util.h"
extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80DC824(struct Sprite *sprite);
+void sub_80DC8F4(struct Sprite *sprite);
+void sub_80DC9A0(struct Sprite *sprite);
+void sub_80DCA70(struct Sprite *sprite);
+void sub_80DCB38(struct Sprite *sprite);
+void AnimTranslateStinger(struct Sprite *sprite);
+void AnimMissileArc(struct Sprite *sprite);
+void sub_80DCE40(struct Sprite *sprite);
static void sub_80DCA38(struct Sprite *sprite);
static void sub_80DCAEC(struct Sprite *sprite);
static void sub_80DCB5C(struct Sprite *sprite);
static void sub_80DCBB4(struct Sprite *sprite);
static void AnimMissileArcStep(struct Sprite *sprite);
+const union AffineAnimCmd gSpriteAffineAnim_83DAA80[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 30, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DAA90[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, -99, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DAAA0[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 94, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DAAB0[] =
+{
+ gSpriteAffineAnim_83DAA80,
+ gSpriteAffineAnim_83DAA90,
+ gSpriteAffineAnim_83DAAA0,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAABC =
+{
+ .tileTag = 10153,
+ .paletteTag = 10153,
+ .oam = &gOamData_837E014,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DAAB0,
+ .callback = sub_80DC824,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DAAD4[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -33, 1),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DAAE4[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 96, 1),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DAAF4[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -96, 1),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DAB04[] =
+{
+ gSpriteAffineAnim_83DAAD4,
+ gSpriteAffineAnim_83DAAE4,
+ gSpriteAffineAnim_83DAAF4,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAB10 =
+{
+ .tileTag = 10161,
+ .paletteTag = 10161,
+ .oam = &gOamData_837DF8C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DAB04,
+ .callback = sub_80DC8F4,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAB28 =
+{
+ .tileTag = 10180,
+ .paletteTag = 10180,
+ .oam = &gOamData_837DF24,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DC9A0,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAB40 =
+{
+ .tileTag = 10179,
+ .paletteTag = 10179,
+ .oam = &gOamData_837DF5C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DCA70,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DAB58[] =
+{
+ AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0),
+ AFFINEANIMCMD_FRAME(0x6, 0x6, 0, 1),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DAB70[] =
+{
+ gSpriteAffineAnim_83DAB58,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAB74 =
+{
+ .tileTag = 10181,
+ .paletteTag = 10181,
+ .oam = &gOamData_837E11C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DAB70,
+ .callback = sub_80DCB38,
+};
+
+const struct SpriteTemplate gLinearStingerSpriteTemplate =
+{
+ .tileTag = 10161,
+ .paletteTag = 10161,
+ .oam = &gOamData_837DF8C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimTranslateStinger,
+};
+
+const struct SpriteTemplate gPinMissileSpriteTemplate =
+{
+ .tileTag = 10161,
+ .paletteTag = 10161,
+ .oam = &gOamData_837DF8C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimMissileArc,
+};
+
+const struct SpriteTemplate gIcicleSpearSpriteTemplate =
+{
+ .tileTag = 10262,
+ .paletteTag = 10262,
+ .oam = &gOamData_837DF94,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimMissileArc,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DABD4[] =
+{
+ AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0),
+ AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 18),
+ AFFINEANIMCMD_LOOP(0),
+ AFFINEANIMCMD_FRAME(0xFFFB, 0xFFFB, 0, 8),
+ AFFINEANIMCMD_FRAME(0x5, 0x5, 0, 8),
+ AFFINEANIMCMD_LOOP(5),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DAC0C[] =
+{
+ gSpriteAffineAnim_83DABD4,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAC10 =
+{
+ .tileTag = 10212,
+ .paletteTag = 10212,
+ .oam = &gOamData_837E0BC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DAC0C,
+ .callback = sub_80DCE40,
+};
+
// used in Move_MEGAHORN
void sub_80DC824(struct Sprite *sprite)
{
diff --git a/src/battle/anim/bullet.c b/src/battle/anim/bullet.c
index 035adf394..764903247 100644
--- a/src/battle/anim/bullet.c
+++ b/src/battle/anim/bullet.c
@@ -9,12 +9,35 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CFFD8(struct Sprite* sprite);
static void sub_80D0030(struct Sprite* sprite);
static void sub_80D00B4(struct Sprite* sprite);
// bullet (shoot seeds as ammunition.)
// Used by Bullet Seed.
+const union AffineAnimCmd gSpriteAffineAnim_83D7614[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 20, 1),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D7624[] =
+{
+ gSpriteAffineAnim_83D7614,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7628 =
+{
+ .tileTag = 10006,
+ .paletteTag = 10006,
+ .oam = &gOamData_837DF8C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D7624,
+ .callback = sub_80CFFD8,
+};
+
void sub_80CFFD8(struct Sprite* sprite)
{
InitAnimSpritePos(sprite, 1);
@@ -26,7 +49,7 @@ void sub_80CFFD8(struct Sprite* sprite)
StoreSpriteCallbackInData(sprite, sub_80D0030);
}
-void sub_80D0030(struct Sprite* sprite)
+static void sub_80D0030(struct Sprite* sprite)
{
int i;
u16 rand;
@@ -50,7 +73,7 @@ void sub_80D0030(struct Sprite* sprite)
sprite->affineAnimPaused = 0;
}
-void sub_80D00B4(struct Sprite* sprite)
+static void sub_80D00B4(struct Sprite* sprite)
{
sprite->data[0] += sprite->data[7];
sprite->pos2.x = sprite->data[0] >> 8;
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/cube.c b/src/battle/anim/cube.c
index 6fef2de69..9d713ba46 100644
--- a/src/battle/anim/cube.c
+++ b/src/battle/anim/cube.c
@@ -9,11 +9,47 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CDFB0(struct Sprite* sprite);
static void sub_80CE000(struct Sprite* sprite);
// cube (shows a sphere sharpening into a cube.)
// Used in Sharpen.
+const union AnimCmd gSpriteAnim_83D6EB0[] =
+{
+ ANIMCMD_FRAME(0, 18),
+ ANIMCMD_FRAME(0, 6),
+ ANIMCMD_FRAME(16, 18),
+ ANIMCMD_FRAME(0, 6),
+ ANIMCMD_FRAME(16, 6),
+ ANIMCMD_FRAME(32, 18),
+ ANIMCMD_FRAME(16, 6),
+ ANIMCMD_FRAME(32, 6),
+ ANIMCMD_FRAME(48, 18),
+ ANIMCMD_FRAME(32, 6),
+ ANIMCMD_FRAME(48, 6),
+ ANIMCMD_FRAME(64, 18),
+ ANIMCMD_FRAME(48, 6),
+ ANIMCMD_FRAME(64, 54),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D6EEC[] =
+{
+ gSpriteAnim_83D6EB0,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6EF0 =
+{
+ .tileTag = 10185,
+ .paletteTag = 10185,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D6EEC,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CDFB0,
+};
+
void sub_80CDFB0(struct Sprite* sprite)
{
sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2);
@@ -27,7 +63,7 @@ void sub_80CDFB0(struct Sprite* sprite)
sprite->callback = sub_80CE000;
}
-void sub_80CE000(struct Sprite* sprite)
+static void sub_80CE000(struct Sprite* sprite)
{
if (++sprite->data[0] >= sprite->data[1])
{
diff --git a/src/battle/anim/current.c b/src/battle/anim/current.c
index af9003e87..af72edef0 100755
--- a/src/battle/anim/current.c
+++ b/src/battle/anim/current.c
@@ -12,14 +12,20 @@ extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
extern u8 gAnimVisualTaskCount;
-extern const struct SpriteTemplate gSpriteTemplate_83D9938;
-extern const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9950;
-extern const struct SpriteTemplate gSpriteTemplate_83D99B8;
-extern const struct SpriteTemplate gSpriteTemplate_83D9B10;
-extern const struct SpriteTemplate gSpriteTemplate_83D9B40;
extern const struct SpriteTemplate gBattleAnimSpriteTemplate_83D97D0;
-extern s8 gUnknown_083D9968[][2];
+void sub_80D648C(struct Sprite *sprite);
+void sub_80D65DC(struct Sprite *sprite);
+void sub_80D6658(struct Sprite *sprite);
+void sub_80D679C(struct Sprite *sprite);
+void sub_80D6A1C(struct Sprite *sprite);
+void sub_80D6A6C(struct Sprite *sprite);
+void sub_80D6D18(struct Sprite *sprite);
+void sub_80D6D70(struct Sprite *sprite);
+void sub_80D6DD8(struct Sprite *sprite);
+void sub_80D7230(struct Sprite *sprite);
+void sub_80D727C(struct Sprite *sprite);
+void sub_80D755C(struct Sprite *sprite);
static void sub_80D6514(struct Sprite *sprite);
static void sub_80D672C(struct Sprite *sprite);
static void sub_80D6874(u8 taskId);
@@ -32,6 +38,323 @@ static bool8 sub_80D7470(struct Task *task, u8 taskId);
static bool8 sub_80D7654(struct Task *task, u8 taskId);
static void sub_80D76C4(struct Sprite *sprite);
+const union AffineAnimCmd gSpriteAffineAnim_83D988C[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 20, 1),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D989C[] =
+{
+ gSpriteAffineAnim_83D988C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D98A0 =
+{
+ .tileTag = 10011,
+ .paletteTag = 10011,
+ .oam = &gOamData_837DF8C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D989C,
+ .callback = sub_80D648C,
+};
+
+const union AnimCmd gSpriteAnim_83D98B8[] =
+{
+ ANIMCMD_FRAME(0, 6),
+ ANIMCMD_FRAME(16, 6),
+ ANIMCMD_FRAME(32, 6),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D98C8[] =
+{
+ gSpriteAnim_83D98B8,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D98CC[] =
+{
+ AFFINEANIMCMD_FRAME(0xE8, 0xE8, 0, 0),
+ AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 10),
+ AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 10),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D98EC[] =
+{
+ gSpriteAffineAnim_83D98CC,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D98F0 =
+{
+ .tileTag = 10282,
+ .paletteTag = 10282,
+ .oam = &gOamData_837DF94,
+ .anims = gSpriteAnimTable_83D98C8,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D98EC,
+ .callback = sub_80D65DC,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9908 =
+{
+ .tileTag = 10011,
+ .paletteTag = 10011,
+ .oam = &gOamData_837DF8C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D989C,
+ .callback = sub_80D6658,
+};
+
+const struct SpriteTemplate gElectricitySpriteTemplate =
+{
+ .tileTag = 10011,
+ .paletteTag = 10011,
+ .oam = &gOamData_837DF2C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D679C,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83D9938 =
+{
+ .tileTag = 10001,
+ .paletteTag = 10001,
+ .oam = &gOamData_837DF24,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D6A1C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9950 =
+{
+ .tileTag = 10173,
+ .paletteTag = 10173,
+ .oam = &gOamData_837DF54,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D6A6C,
+};
+
+const s8 gUnknown_083D9968[][2] =
+{
+ { 58, -60},
+ {-56, -36},
+ { 8, -56},
+ {-16, 56},
+ { 58, -10},
+ {-58, 10},
+ { 48, -18},
+ {-8, 56},
+ { 16, -56},
+ {-58, -42},
+ { 58, 30},
+ {-48, 40},
+ { 12, -48},
+ { 48, -12},
+ {-56, 18},
+ { 48, 48},
+};
+
+const union AnimCmd gSpriteAnim_83D9988[] =
+{
+ ANIMCMD_FRAME(3, 1),
+ ANIMCMD_FRAME(2, 1),
+ ANIMCMD_FRAME(1, 1),
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D999C[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_FRAME(1, 5),
+ ANIMCMD_FRAME(2, 5),
+ ANIMCMD_FRAME(3, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D99B0[] =
+{
+ gSpriteAnim_83D9988,
+ gSpriteAnim_83D999C,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83D99B8 =
+{
+ .tileTag = 10211,
+ .paletteTag = 10211,
+ .oam = &gOamData_837DF24,
+ .anims = gSpriteAnimTable_83D99B0,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D99D0[] =
+{
+ AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0),
+ AFFINEANIMCMD_FRAME(0x4, 0x4, 0, 60),
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_LOOP(0),
+ AFFINEANIMCMD_FRAME(0xFFFC, 0xFFFC, 0, 5),
+ AFFINEANIMCMD_FRAME(0x4, 0x4, 0, 5),
+ AFFINEANIMCMD_LOOP(10),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D9A10[] =
+{
+ AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0),
+ AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 30),
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0xFFFC, 0xFFFC, 0, 5),
+ AFFINEANIMCMD_FRAME(0x4, 0x4, 0, 5),
+ AFFINEANIMCMD_JUMP(3),
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D9A40[] =
+{
+ AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0),
+ AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 30),
+ AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 30),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D9A60[] =
+{
+ gSpriteAffineAnim_83D99D0,
+ gSpriteAffineAnim_83D9A10,
+ gSpriteAffineAnim_83D9A40,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9A6C =
+{
+ .tileTag = 10212,
+ .paletteTag = 10212,
+ .oam = &gOamData_837E0BC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D9A60,
+ .callback = sub_80D6D18,
+};
+
+const union AnimCmd gSpriteAnim_83D9A84[] =
+{
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_FRAME(16, 3),
+ ANIMCMD_FRAME(32, 3),
+ ANIMCMD_FRAME(48, 3),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D9A98[] =
+{
+ gSpriteAnim_83D9A84,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9A9C =
+{
+ .tileTag = 10213,
+ .paletteTag = 10213,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D9A98,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D6D70,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9AB4 =
+{
+ .tileTag = 10212,
+ .paletteTag = 10212,
+ .oam = &gOamData_837E0BC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D9A60,
+ .callback = sub_80D6DD8,
+};
+
+const union AnimCmd gSpriteAnim_83D9ACC[] =
+{
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D9AD4[] =
+{
+ ANIMCMD_FRAME(2, 3),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D9ADC[] =
+{
+ ANIMCMD_FRAME(4, 3),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D9AE4[] =
+{
+ ANIMCMD_FRAME(6, 3),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D9AEC[] =
+{
+ gSpriteAnim_83D9ACC,
+ gSpriteAnim_83D9AD4,
+ gSpriteAnim_83D9ADC,
+ gSpriteAnim_83D9AE4,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D9AFC[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 64, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D9B0C[] =
+{
+ gSpriteAffineAnim_83D9AFC,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83D9B10 =
+{
+ .tileTag = 10001,
+ .paletteTag = 10001,
+ .oam = &gOamData_837E024,
+ .anims = gSpriteAnimTable_83D9AEC,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D9B0C,
+ .callback = sub_80D7230,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9B28 =
+{
+ .tileTag = 10212,
+ .paletteTag = 10212,
+ .oam = &gOamData_837E0BC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D9A60,
+ .callback = sub_80D727C,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83D9B40 =
+{
+ .tileTag = 10001,
+ .paletteTag = 10001,
+ .oam = &gOamData_837DF24,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D755C,
+};
void sub_80D648C(struct Sprite *sprite)
{
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/cyclone.c b/src/battle/anim/cyclone.c
index 9bfa95e92..8b868a436 100644
--- a/src/battle/anim/cyclone.c
+++ b/src/battle/anim/cyclone.c
@@ -8,9 +8,34 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80D0118(struct Sprite* sprite);
+
// cyclone (creates a circling motion like a cyclone, usually a wind sprite.)
// Used in Razor Wind.
+const union AffineAnimCmd gSpriteAffineAnim_83D7640[] =
+{
+ AFFINEANIMCMD_FRAME(0x10, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0x4, 0x0, 0, 40),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D7658[] =
+{
+ gSpriteAffineAnim_83D7640,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D765C =
+{
+ .tileTag = 10009,
+ .paletteTag = 10009,
+ .oam = &gOamData_837DFDC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D7658,
+ .callback = sub_80D0118,
+};
+
void sub_80D0118(struct Sprite* sprite)
{
InitAnimSpritePos(sprite, 0);
diff --git a/src/battle/anim/dark.c b/src/battle/anim/dark.c
index 55d500950..a7026edff 100644
--- a/src/battle/anim/dark.c
+++ b/src/battle/anim/dark.c
@@ -28,6 +28,10 @@ extern const u8 gUnknown_08D1D574[];
extern const u8 gUnknown_08D1D410[];
extern const u16 gUnknown_08D1D54C[];
+void sub_80DFE14(struct Sprite *sprite);
+void sub_80DFF1C(struct Sprite *sprite);
+void sub_80DFFD0(struct Sprite *sprite);
+void sub_80E0A10(struct Sprite *sprite);
static void sub_80DFE90(struct Sprite *sprite);
static void sub_80DFC9C(u8 taskId);
static void sub_80DFD58(u8 taskId);
@@ -40,6 +44,166 @@ static void sub_80E08CC(u8 priority);
static void sub_80E079C(struct Task *task);
static void sub_80E0CD0(u8 taskId);
+const struct SpriteTemplate gSpriteTemplate_83DB118 =
+{
+ .tileTag = 10015,
+ .paletteTag = 10015,
+ .oam = &gOamData_837DF2C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DFE14,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DB130[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 1),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DB140[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 32, 1),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DB150[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 64, 1),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DB160[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 96, 1),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DB170[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -128, 1),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DB180[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -96, 1),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DB190[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -64, 1),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DB1A0[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -32, 1),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DB1B0[] =
+{
+ gSpriteAffineAnim_83DB130,
+ gSpriteAffineAnim_83DB140,
+ gSpriteAffineAnim_83DB150,
+ gSpriteAffineAnim_83DB160,
+ gSpriteAffineAnim_83DB170,
+ gSpriteAffineAnim_83DB180,
+ gSpriteAffineAnim_83DB190,
+ gSpriteAffineAnim_83DB1A0,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB1D0 =
+{
+ .tileTag = 10139,
+ .paletteTag = 10139,
+ .oam = &gOamData_837E0BC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DB1B0,
+ .callback = sub_80DFF1C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB1E8 =
+{
+ .tileTag = 10145,
+ .paletteTag = 10145,
+ .oam = &gOamData_837E0BC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DB1B0,
+ .callback = sub_80DFF1C,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DB200[] =
+{
+ AFFINEANIMCMD_FRAME(0xC0, 0xC0, 80, 0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -2, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DB218[] =
+{
+ AFFINEANIMCMD_FRAME(0xC0, 0xC0, -80, 0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 2, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DB230[] =
+{
+ gSpriteAffineAnim_83DB200,
+ gSpriteAffineAnim_83DB218,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB238 =
+{
+ .tileTag = 10155,
+ .paletteTag = 10155,
+ .oam = &gOamData_837DF8C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DB230,
+ .callback = sub_80DFFD0,
+};
+
+const union AnimCmd gSpriteAnim_83DB250[] =
+{
+ 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 gSpriteAnim_83DB268[] =
+{
+ ANIMCMD_FRAME(0, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(48, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(64, 4, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83DB280[] =
+{
+ gSpriteAnim_83DB250,
+ gSpriteAnim_83DB268,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB288 =
+{
+ .tileTag = 10039,
+ .paletteTag = 10039,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83DB280,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80E0A10,
+};
// used in Smoke Ball escape, Sky Attack, Feint Attack and Camouflage
void sub_80DFC24(u8 taskId)
diff --git a/src/battle/anim/devil.c b/src/battle/anim/devil.c
index c628abfc0..8183be2ba 100644
--- a/src/battle/anim/devil.c
+++ b/src/battle/anim/devil.c
@@ -7,6 +7,37 @@
extern s16 gBattleAnimArgs[8];
extern u8 gAnimBankTarget;
+void sub_80D2ABC(struct Sprite *sprite);
+
+const union AnimCmd gSpriteAnim_83D7BE8[] =
+{
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd gSpriteAnim_83D7BF0[] =
+{
+ ANIMCMD_FRAME(16, 3),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D7BF8[] =
+{
+ gSpriteAnim_83D7BE8,
+ gSpriteAnim_83D7BF0,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7C00 =
+{
+ .tileTag = 10221,
+ .paletteTag = 10221,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D7BF8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D2ABC,
+};
+
void sub_80D2ABC(struct Sprite *sprite)
{
if (sprite->data[3] == 0)
diff --git a/src/battle/anim/dragon.c b/src/battle/anim/dragon.c
index 4c8448636..163529ecb 100644
--- a/src/battle/anim/dragon.c
+++ b/src/battle/anim/dragon.c
@@ -5,13 +5,6 @@
#include "sound.h"
#include "scanline_effect.h"
-void sub_80DF81C(struct Sprite *sprite);
-void sub_80DFBD8(struct Sprite *sprite);
-
-void sub_80DF9F4(u8 taskId);
-
-void sub_80DFAB0(struct Task *task);
-
extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
@@ -21,6 +14,187 @@ extern u16 gBattle_BG2_X;
extern u16 gUnknown_03000730[];
extern u8 gBankSpriteIds[];
+void sub_80DF5A0(struct Sprite *sprite);
+void sub_80DF760(struct Sprite *sprite);
+void sub_80DF6F0(struct Sprite *sprite);
+void sub_80DF760(struct Sprite *sprite);
+void sub_80DF78C(struct Sprite *sprite);
+void sub_80DFB28(struct Sprite *sprite);
+static void sub_80DF81C(struct Sprite *sprite);
+static void sub_80DFBD8(struct Sprite *sprite);
+static void sub_80DF9F4(u8 taskId);
+static void sub_80DFAB0(struct Task *task);
+
+const union AnimCmd gSpriteAnim_83DAFB0[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(16, 4),
+ ANIMCMD_FRAME(32, 4),
+ ANIMCMD_FRAME(48, 4),
+ ANIMCMD_FRAME(64, 4),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_83DAFC8[] =
+{
+ gSpriteAnim_83DAFB0,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAFCC =
+{
+ .tileTag = 10029,
+ .paletteTag = 10029,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83DAFC8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DF5A0,
+};
+
+const union AnimCmd gSpriteAnim_83DAFE4[] =
+{
+ ANIMCMD_FRAME(16, 3),
+ ANIMCMD_FRAME(32, 3),
+ ANIMCMD_FRAME(48, 3),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd gSpriteAnim_83DAFF4[] =
+{
+ ANIMCMD_FRAME(16, 3, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 3, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(48, 3, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_83DB004[] =
+{
+ gSpriteAnim_83DAFE4,
+ gSpriteAnim_83DAFF4,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DB00C[] =
+{
+ AFFINEANIMCMD_FRAME(0x50, 0x50, 127, 0),
+ AFFINEANIMCMD_FRAME(0xD, 0xD, 0, 100),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DB024[] =
+{
+ AFFINEANIMCMD_FRAME(0x50, 0x50, 0, 0),
+ AFFINEANIMCMD_FRAME(0xD, 0xD, 0, 100),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DB03C[] =
+{
+ gSpriteAffineAnim_83DB00C,
+ gSpriteAffineAnim_83DB024,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB044 =
+{
+ .tileTag = 10029,
+ .paletteTag = 10029,
+ .oam = &gOamData_837DFF4,
+ .anims = gSpriteAnimTable_83DB004,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DB03C,
+ .callback = sub_80DF760,
+};
+
+const union AnimCmd gSpriteAnim_83DB05C[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_FRAME(16, 5),
+ ANIMCMD_FRAME(32, 5),
+ ANIMCMD_FRAME(48, 5),
+ ANIMCMD_FRAME(64, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83DB074[] =
+{
+ gSpriteAnim_83DB05C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB078 =
+{
+ .tileTag = 10035,
+ .paletteTag = 10035,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83DB074,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DF6F0,
+};
+
+const union AnimCmd gSpriteAnim_83DB090[] =
+{
+ ANIMCMD_FRAME(16, 3),
+ ANIMCMD_FRAME(32, 3),
+ ANIMCMD_FRAME(48, 3),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_83DB0A0[] =
+{
+ gSpriteAnim_83DB090,
+ gSpriteAnim_83DB090,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DB0A8[] =
+{
+ AFFINEANIMCMD_FRAME(0x64, 0x64, 127, 1),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DB0B8[] =
+{
+ AFFINEANIMCMD_FRAME(0x64, 0x64, 0, 1),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DB0C8[] =
+{
+ gSpriteAffineAnim_83DB0A8,
+ gSpriteAffineAnim_83DB0B8,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB0D0 =
+{
+ .tileTag = 10029,
+ .paletteTag = 10029,
+ .oam = &gOamData_837DFF4,
+ .anims = gSpriteAnimTable_83DB0A0,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DB0C8,
+ .callback = sub_80DF760,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB0E8 =
+{
+ .tileTag = 10249,
+ .paletteTag = 10249,
+ .oam = &gOamData_837DF2C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DF78C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB100 =
+{
+ .tileTag = 10029,
+ .paletteTag = 10029,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83DAFC8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DFB28,
+};
+
// Outrage
void sub_80DF5A0(struct Sprite *sprite)
@@ -123,7 +297,7 @@ void sub_80DF78C(struct Sprite *sprite)
sprite->callback = sub_80DF81C;
}
-void sub_80DF81C(struct Sprite *sprite)
+static void sub_80DF81C(struct Sprite *sprite)
{
switch (sprite->data[0])
{
@@ -196,7 +370,7 @@ void sub_80DF924(u8 taskId)
task->func = sub_80DF9F4;
}
-void sub_80DF9F4(u8 taskId)
+static void sub_80DF9F4(u8 taskId)
{
struct Task *task = &gTasks[taskId];
switch (task->data[0])
@@ -234,7 +408,7 @@ void sub_80DF9F4(u8 taskId)
}
}
-void sub_80DFAB0(struct Task *task)
+static void sub_80DFAB0(struct Task *task)
{
u16 r3 = task->data[5];
u16 i;
@@ -264,7 +438,7 @@ void sub_80DFB28(struct Sprite *sprite)
gUnknown_03000730[i] = sprite->data[i];
}
-void sub_80DFBD8(struct Sprite *sprite)
+static void sub_80DFBD8(struct Sprite *sprite)
{
sprite->data[4] += sprite->data[1];
sprite->data[5] += sprite->data[2];
diff --git a/src/battle/anim/draw.c b/src/battle/anim/draw.c
index 9eea43220..08b09337f 100644
--- a/src/battle/anim/draw.c
+++ b/src/battle/anim/draw.c
@@ -12,12 +12,24 @@ extern u8 gAnimBankTarget;
extern u16 gBattle_BG2_X;
extern u16 gBattle_BG1_X;
+void sub_80D0E30(struct Sprite* sprite);
static void sub_80D0D68(u8 taskId);
static void sub_80D0E8C(struct Sprite* sprite);
// draw (draws the Pokemon into the world using a pencil.)
// Used in Sketch.
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D77E0 =
+{
+ .tileTag = 10002,
+ .paletteTag = 10002,
+ .oam = &gOamData_837DF34,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D0E30,
+};
+
void sub_80D0C88(u8 taskId)
{
struct Task* task = &gTasks[taskId];
@@ -59,7 +71,7 @@ void sub_80D0C88(u8 taskId)
task->func = sub_80D0D68;
}
-void sub_80D0D68(u8 taskId)
+static void sub_80D0D68(u8 taskId)
{
struct Task* task = &gTasks[taskId];
@@ -120,7 +132,7 @@ void sub_80D0E30(struct Sprite* sprite)
sprite->callback = sub_80D0E8C;
}
-void sub_80D0E8C(struct Sprite* sprite)
+static void sub_80D0E8C(struct Sprite* sprite)
{
switch (sprite->data[0])
{
diff --git a/src/battle/anim/drum.c b/src/battle/anim/drum.c
deleted file mode 100644
index 8dea7e608..000000000
--- a/src/battle/anim/drum.c
+++ /dev/null
@@ -1,32 +0,0 @@
-#include "global.h"
-#include "rom_8077ABC.h"
-#include "trig.h"
-#include "battle_anim.h"
-#include "sound.h"
-
-extern s16 gBattleAnimArgs[];
-extern u8 gAnimBankAttacker;
-extern u8 gAnimBankTarget;
-
-// drum (using hands to slap the Pokemon's belly in a rhythm.)
-// Used in Belly Drum.
-
-void sub_80CEDF0(struct Sprite* sprite)
-{
- s16 a;
- if (gBattleAnimArgs[0] == 1)
- {
- sprite->oam.matrixNum = 8;
- a = 16;
- }
- else
- {
- a = -16;
- }
-
- sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2) + a;
- sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3) + 8;
- sprite->data[0] = 8;
- sprite->callback = WaitAnimForDuration;
- StoreSpriteCallbackInData(sprite, DestroyAnimSprite);
-}
diff --git a/src/battle/anim/egg.c b/src/battle/anim/egg.c
index 44ff484f2..5b6d56dac 100644..100755
--- a/src/battle/anim/egg.c
+++ b/src/battle/anim/egg.c
@@ -2,121 +2,15 @@
#include "rom_8077ABC.h"
#include "trig.h"
#include "battle_anim.h"
-#include "sound.h"
-
-extern s16 gBattleAnimArgs[];
-extern u8 gAnimBankAttacker;
-extern u8 gAnimBankTarget;
-
-static void sub_80D13AC(struct Sprite* sprite);
-static void sub_80D1424(struct Sprite* sprite);
-static void sub_80D144C(struct Sprite* sprite);
-static void sub_80D14C4(struct Sprite* sprite);
-static void sub_80D1504(struct Sprite* sprite);
-static void sub_80D154C(struct Sprite* sprite);
-static void sub_80D158C(struct Sprite* sprite);
-
-// egg (a hatching egg)
-// Used in Softboiled.
-
-void sub_80D1368(struct Sprite* sprite)
-{
- s16 r1;
- InitAnimSpritePos(sprite, 0);
- r1 = (GetBattlerSide(gAnimBankAttacker)) ? -0xA0 : 0xA0;
- sprite->data[0] = 0x380;
- sprite->data[1] = r1;
- sprite->data[7] = gBattleAnimArgs[2];
- sprite->callback = sub_80D13AC;
-}
-
-void sub_80D13AC(struct Sprite* sprite)
-{
- s16 add;
- sprite->pos2.y -= (sprite->data[0] >> 8);
- sprite->pos2.x = sprite->data[1] >> 8;
- sprite->data[0] -= 32;
- add = (GetBattlerSide(gAnimBankAttacker)) ? -0xA0 : 0xA0;
- sprite->data[1] += add;
- if (sprite->pos2.y > 0)
- {
- sprite->pos1.y += sprite->pos2.y;
- sprite->pos1.x += sprite->pos2.x;
- sprite->pos2.y = 0;
- sprite->pos2.x = 0;
- sprite->data[0] = 0;
- StartSpriteAffineAnim(sprite, 1);
- sprite->callback = sub_80D1424;
- }
-}
-
-void sub_80D1424(struct Sprite* sprite)
-{
- if (sprite->data[0]++ > 19)
- {
- StartSpriteAffineAnim(sprite, 2);
- sprite->callback = sub_80D144C;
- }
-}
-
-void sub_80D144C(struct Sprite* sprite)
-{
- if (sprite->affineAnimEnded)
- {
- StartSpriteAffineAnim(sprite, 1);
- sprite->data[0] = 0;
- if (sprite->data[7] == 0)
- {
- sprite->oam.tileNum += 16;
- sprite->callback = sub_80D14C4;
- }
- else
- {
- sprite->oam.tileNum += 32;
- sprite->callback = sub_80D154C;
- }
- }
-}
-
-void sub_80D14C4(struct Sprite* sprite)
-{
- sprite->pos2.y -= 2;
- if (++sprite->data[0] == 9)
- {
- sprite->data[0] = 16;
- sprite->data[1] = 0;
- REG_BLDCNT = 0x3F40;
- REG_BLDALPHA = sprite->data[0];
- sprite->callback = sub_80D1504;
- }
-}
-
-void sub_80D1504(struct Sprite* sprite)
-{
- if (sprite->data[1]++ % 3 == 0)
- {
- sprite->data[0]--;
- REG_BLDALPHA = sprite->data[0] | ((16 - sprite->data[0]) << 8);
- if (sprite->data[0] == 0)
- sprite->callback = sub_80D154C;
- }
-}
-
-void sub_80D154C(struct Sprite* sprite)
-{
- if ((u16)gBattleAnimArgs[7] == 0xFFFF)
- {
- sprite->invisible = 1;
- if (sprite->data[7] == 0)
- sprite->callback = sub_80D158C;
- else
- sprite->callback = DestroyAnimSprite;
- }
-}
-
-void sub_80D158C(struct Sprite* sprite)
-{
- REG_BLDCNT = 0;
- REG_BLDALPHA = 0;
- DestroyAnimSprite(sprite);
-}
+#include "random.h"
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7594 =
+{
+ .tileTag = 10175,
+ .paletteTag = 10175,
+ .oam = &gOamData_837DF2C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80794A8,
+};
diff --git a/src/battle/anim/energy_wave.c b/src/battle/anim/energy_wave.c
index 7980c7b34..9ac362b57 100644
--- a/src/battle/anim/energy_wave.c
+++ b/src/battle/anim/energy_wave.c
@@ -8,8 +8,11 @@
extern s16 gBattleAnimArgs[8];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
-extern const struct SpriteTemplate gSpriteTemplate_83D9130[];
+extern const union AffineAnimCmd *const gSpriteAffineAnimTable_83D752C[];
+void sub_80D3554(struct Sprite *sprite);
+void sub_80D3698(struct Sprite *sprite);
+void sub_80D3728(struct Sprite *sprite);
static void sub_80D35DC(struct Sprite *);
static void sub_80D365C(u8);
static void sub_80D370C(struct Sprite *);
@@ -18,6 +21,145 @@ static void sub_80D370C(struct Sprite *);
// Used in Hydro Pump, Mud Shot, Signal Beam, Flamethrower, Psywave, and
// Hydro Cannon.
+const union AnimCmd gSpriteAnim_83D91DC[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_FRAME(4, 1),
+ ANIMCMD_FRAME(8, 1),
+ ANIMCMD_FRAME(12, 1),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D91F0[] =
+{
+ gSpriteAnim_83D91DC,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D91F4 =
+{
+ .tileTag = 10149,
+ .paletteTag = 10149,
+ .oam = &gOamData_837E04C,
+ .anims = gSpriteAnimTable_83D91F0,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D3554,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D920C =
+{
+ .tileTag = 10259,
+ .paletteTag = 10259,
+ .oam = &gOamData_837E04C,
+ .anims = gSpriteAnimTable_83D91F0,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D3554,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9224 =
+{
+ .tileTag = 10264,
+ .paletteTag = 10264,
+ .oam = &gOamData_837DF24,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D3554,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D923C =
+{
+ .tileTag = 10265,
+ .paletteTag = 10265,
+ .oam = &gOamData_837DF24,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D3554,
+};
+
+const union AnimCmd gSpriteAnim_83D9254[] =
+{
+ ANIMCMD_FRAME(16, 2),
+ ANIMCMD_FRAME(32, 2),
+ ANIMCMD_FRAME(48, 2),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D9264[] =
+{
+ gSpriteAnim_83D9254,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9268 =
+{
+ .tileTag = 10029,
+ .paletteTag = 10029,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D9264,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D3554,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9280 =
+{
+ .tileTag = 10165,
+ .paletteTag = 10165,
+ .oam = &gOamData_837E034,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D752C,
+ .callback = sub_80D3554,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D9298[] =
+{
+ AFFINEANIMCMD_FRAME(0x3, 0x3, 10, 50),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 10),
+ AFFINEANIMCMD_FRAME(0xFFEC, 0xFFEC, -10, 20),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D92B8[] =
+{
+ AFFINEANIMCMD_FRAME(0x150, 0x150, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D92C8[] =
+{
+ gSpriteAffineAnim_83D9298,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D92CC[] =
+{
+ gSpriteAffineAnim_83D92B8,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D92D0 =
+{
+ .tileTag = 10149,
+ .paletteTag = 10149,
+ .oam = &gOamData_837E10C,
+ .anims = gSpriteAnimTable_83D91F0,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D92C8,
+ .callback = sub_80D3698,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D92E8 =
+{
+ .tileTag = 10149,
+ .paletteTag = 10149,
+ .oam = &gOamData_837E10C,
+ .anims = gSpriteAnimTable_83D91F0,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D92CC,
+ .callback = sub_80D3728,
+};
+
void sub_80D3554(struct Sprite *sprite)
{
InitAnimSpritePos(sprite, 1);
diff --git a/src/battle/anim/espeed.c b/src/battle/anim/espeed.c
index 2e80afff7..a4f11c823 100644
--- a/src/battle/anim/espeed.c
+++ b/src/battle/anim/espeed.c
@@ -8,11 +8,7 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
-extern s8 gUnknown_083D7A00[4][2];
-
-extern struct AffineAnimFrameCmd gUnknown_083D79BC;
-extern struct SpriteTemplate gSpriteTemplate_83D79E8;
-
+void sub_80D1A70(struct Sprite* sprite);
static void sub_80D15E0(u8 taskId);
static void sub_80D16A0(u8 taskId);
static void sub_80D1808(u8 taskId);
@@ -21,13 +17,53 @@ static void sub_80D1930(u8 taskId);
// espeed (the Pokemon's width decreases as the sprite becomes vertically compressed)
// Used in Extremespeed.
+const union AffineAnimCmd gSpriteAffineAnim_83D79BC[] =
+{
+ AFFINEANIMCMD_FRAME(96, -13, 0, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D79CC[] =
+{
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_FRAME(4, 3),
+ ANIMCMD_FRAME(8, 3),
+ ANIMCMD_FRAME(4, 3),
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D79E4[] =
+{
+ gSpriteAnim_83D79CC,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83D79E8 =
+{
+ .tileTag = 10207,
+ .paletteTag = 10207,
+ .oam = &gOamData_837DF2C,
+ .anims = gSpriteAnimTable_83D79E4,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D1A70,
+};
+
+const s8 gUnknown_083D7A00[][2] =
+{
+ {30, 28},
+ {-20, 24},
+ {16, 26},
+ {-10, 28},
+};
+
// apply espeed
void sub_80D15A4(u8 taskId)
{
struct Task* task = &gTasks[taskId];
u8 spriteId = GetAnimBattlerSpriteId(0);
task->data[0] = spriteId;
- sub_80798F4(task, spriteId, &gUnknown_083D79BC);
+ sub_80798F4(task, spriteId, &gSpriteAffineAnim_83D79BC);
task->func = sub_80D15E0;
}
@@ -239,3 +275,13 @@ void sub_80D1930(u8 taskId)
break;
}
}
+
+void sub_80D1A70(struct Sprite* sprite)
+{
+ sprite->invisible = gTasks[sprite->data[0]].data[5];
+ if (sprite->animEnded)
+ {
+ gTasks[sprite->data[0]].data[sprite->data[1]]--;
+ DestroySprite(sprite);
+ }
+}
diff --git a/src/battle/anim/fang.c b/src/battle/anim/fang.c
index 5ed7372a8..c35898eea 100644
--- a/src/battle/anim/fang.c
+++ b/src/battle/anim/fang.c
@@ -8,10 +8,37 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CEA04(struct Sprite* sprite);
+
// fang
// Used by Super Fang (and probably Hyper Fang, but the actual callbacks are not in this file.)
// (Look into this one later.)
+const union AnimCmd gSpriteAnim_83D7068[] =
+{
+ ANIMCMD_FRAME(0, 2),
+ ANIMCMD_FRAME(16, 2),
+ ANIMCMD_FRAME(32, 2),
+ ANIMCMD_FRAME(48, 2),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D707C[] =
+{
+ gSpriteAnim_83D7068,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7080 =
+{
+ .tileTag = 10192,
+ .paletteTag = 10192,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D707C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CEA04,
+};
+
void sub_80CEA04(struct Sprite* sprite)
{
StoreSpriteCallbackInData(sprite, DestroyAnimSprite);
diff --git a/src/battle/anim/fight.c b/src/battle/anim/fight.c
index 5e25d664a..af2af1981 100644
--- a/src/battle/anim/fight.c
+++ b/src/battle/anim/fight.c
@@ -26,6 +26,25 @@ extern u8 gAnimMoveTurn;
extern struct SpriteTemplate gBasicHitSplatSpriteTemplate;
+void sub_080B08A0(struct Sprite *sprite);
+void sub_80D902C(struct Sprite *sprite);
+void sub_80D9078(struct Sprite *sprite);
+void AnimBasicFistOrFoot(struct Sprite *sprite);
+void sub_80D90F4(struct Sprite *sprite);
+void sub_80D92D0(struct Sprite *sprite);
+void sub_80D9378(struct Sprite *sprite);
+void AnimSpinningKickOrPunch(struct Sprite *sprite);
+void AnimSpinningKickOrPunch(struct Sprite *sprite);
+void AnimStompFoot(struct Sprite *sprite);
+void sub_80D9540(struct Sprite *sprite);
+void sub_80D95D0(struct Sprite *sprite);
+void sub_80D96B8(struct Sprite *sprite);
+void sub_80D97CC(struct Sprite *sprite);
+void sub_80D98D8(struct Sprite *sprite);
+void sub_80D9A38(struct Sprite *sprite);
+void sub_80D9B48(struct Sprite *sprite);
+void sub_80D9BD4(struct Sprite *sprite);
+void sub_80D9C40(struct Sprite *sprite);
static void sub_80D927C(struct Sprite *sprite);
static void sub_80D9328(struct Sprite *sprite);
static void sub_80D9404(struct Sprite *sprite);
@@ -38,6 +57,381 @@ static void sub_80D986C(struct Sprite *sprite);
static void sub_80D9934(struct Sprite *sprite);
static void sub_80D99F4(struct Sprite *sprite);
+const struct SpriteTemplate gSpriteTemplate_83D9F24 =
+{
+ .tileTag = 10050,
+ .paletteTag = 10050,
+ .oam = &gOamData_837DF34,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_080B08A0,
+};
+
+const union AnimCmd gSpriteAnim_83D9F3C[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D9F44[] =
+{
+ ANIMCMD_FRAME(16, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D9F4C[] =
+{
+ ANIMCMD_FRAME(32, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D9F54[] =
+{
+ ANIMCMD_FRAME(48, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D9F5C[] =
+{
+ ANIMCMD_FRAME(48, 1, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D9F64[] =
+{
+ gSpriteAnim_83D9F3C,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D9F68[] =
+{
+ gSpriteAnim_83D9F44,
+ gSpriteAnim_83D9F4C,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D9F70[] =
+{
+ gSpriteAnim_83D9F54,
+ gSpriteAnim_83D9F5C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9F78 =
+{
+ .tileTag = 10143,
+ .paletteTag = 10143,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D9F64,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D902C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9F90 =
+{
+ .tileTag = 10143,
+ .paletteTag = 10143,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D9F64,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D9078,
+};
+
+const struct SpriteTemplate gFistFootSpriteTemplate =
+{
+ .tileTag = 10143,
+ .paletteTag = 10143,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D9F64,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimBasicFistOrFoot,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9FC0 =
+{
+ .tileTag = 10143,
+ .paletteTag = 10143,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D9F64,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D90F4,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9FD8 =
+{
+ .tileTag = 10143,
+ .paletteTag = 10143,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D9F70,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D92D0,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9FF0 =
+{
+ .tileTag = 10143,
+ .paletteTag = 10143,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D9F68,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D9378,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DA008[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 20, 1),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA020[] =
+{
+ gSpriteAffineAnim_83DA008,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA024 =
+{
+ .tileTag = 10143,
+ .paletteTag = 10143,
+ .oam = &gOamData_837DFF4,
+ .anims = gSpriteAnimTable_83D9F64,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DA020,
+ .callback = AnimSpinningKickOrPunch,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DA03C[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0xFFFC, 0xFFFC, 20, 1),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA054[] =
+{
+ gSpriteAffineAnim_83DA03C,
+};
+
+const struct SpriteTemplate gMegaPunchKickSpriteTemplate =
+{
+ .tileTag = 10143,
+ .paletteTag = 10143,
+ .oam = &gOamData_837DFF4,
+ .anims = gSpriteAnimTable_83D9F64,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DA054,
+ .callback = AnimSpinningKickOrPunch,
+};
+
+const struct SpriteTemplate gStompFootSpriteTemplate =
+{
+ .tileTag = 10143,
+ .paletteTag = 10143,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D9F68,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimStompFoot,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA088 =
+{
+ .tileTag = 10073,
+ .paletteTag = 10073,
+ .oam = &gOamData_837DF2C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D9540,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA0A0 =
+{
+ .tileTag = 10167,
+ .paletteTag = 10167,
+ .oam = &gOamData_837E05C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D95D0,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA0B8 =
+{
+ .tileTag = 10208,
+ .paletteTag = 10208,
+ .oam = &gOamData_837DF34,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D96B8,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DA0D0[] =
+{
+ AFFINEANIMCMD_FRAME(0x20, 0x20, 0, 0),
+ AFFINEANIMCMD_FRAME(0x4, 0x4, 0, 64),
+ AFFINEANIMCMD_FRAME(0xFFFA, 0xFFFA, 0, 8),
+ AFFINEANIMCMD_FRAME(0x6, 0x6, 0, 8),
+ AFFINEANIMCMD_JUMP(2),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA0F8[] =
+{
+ gSpriteAffineAnim_83DA0D0,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA0FC =
+{
+ .tileTag = 10212,
+ .paletteTag = 10212,
+ .oam = &gOamData_837E11C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DA0F8,
+ .callback = sub_80D97CC,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA114 =
+{
+ .tileTag = 10257,
+ .paletteTag = 10257,
+ .oam = &gOamData_837DF2C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D98D8,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA12C =
+{
+ .tileTag = 10256,
+ .paletteTag = 10256,
+ .oam = &gOamData_837DF3C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D9A38,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA144 =
+{
+ .tileTag = 10143,
+ .paletteTag = 10143,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D9F64,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D9B48,
+};
+
+const union AnimCmd gSpriteAnim_83DA15C[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(16, 4),
+ ANIMCMD_FRAME(32, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83DA16C[] =
+{
+ ANIMCMD_FRAME(0, 4, .vFlip = TRUE),
+ ANIMCMD_FRAME(16, 4, .vFlip = TRUE),
+ ANIMCMD_FRAME(32, 4, .vFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83DA17C[] =
+{
+ ANIMCMD_FRAME(0, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 4, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83DA18C[] =
+{
+ gSpriteAnim_83DA15C,
+ gSpriteAnim_83DA16C,
+ gSpriteAnim_83DA17C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA198 =
+{
+ .tileTag = 10245,
+ .paletteTag = 10245,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83DA18C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D9BD4,
+};
+
+const union AnimCmd gSpriteAnim_83DA1B0[] =
+{
+ ANIMCMD_FRAME(0, 6),
+ ANIMCMD_FRAME(64, 6),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83DA1BC[] =
+{
+ ANIMCMD_FRAME(0, 6, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(64, 6, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83DA1C8[] =
+{
+ ANIMCMD_FRAME(0, 6, .hFlip = TRUE),
+ ANIMCMD_FRAME(64, 6, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83DA1D4[] =
+{
+ gSpriteAnim_83DA1B0,
+ gSpriteAnim_83DA1BC,
+ gSpriteAnim_83DA1C8,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA1E0 =
+{
+ .tileTag = 10246,
+ .paletteTag = 10246,
+ .oam = &gOamData_837DF3C,
+ .anims = gSpriteAnimTable_83DA1D4,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D9BD4,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DA1F8[] =
+{
+ AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0),
+ AFFINEANIMCMD_FRAME(0xFFE0, 0xFFE0, 0, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA210[] =
+{
+ gSpriteAffineAnim_83DA1F8,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA214 =
+{
+ .tileTag = 10143,
+ .paletteTag = 10143,
+ .oam = &gOamData_837DFF4,
+ .anims = gSpriteAnimTable_83D9F64,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DA210,
+ .callback = sub_80D9C40,
+};
void sub_080B08A0(struct Sprite *sprite)
{
diff --git a/src/battle/anim/finger.c b/src/battle/anim/finger.c
new file mode 100644
index 000000000..66ca4ca06
--- /dev/null
+++ b/src/battle/anim/finger.c
@@ -0,0 +1,256 @@
+#include "global.h"
+#include "rom_8077ABC.h"
+#include "trig.h"
+#include "battle_anim.h"
+#include "sound.h"
+
+extern s16 gBattleAnimArgs[];
+extern u8 gAnimBankAttacker;
+extern u8 gAnimBankTarget;
+
+extern void sub_80CEF44(u8 bank, struct Sprite* sprite);
+
+void sub_80CF040(struct Sprite* sprite);
+void sub_80CF0BC(struct Sprite* sprite);
+void sub_80CF1C8(struct Sprite* sprite);
+static void sub_80CF088(struct Sprite* sprite);
+static void sub_80CF138(struct Sprite* sprite);
+static void sub_80CF158(struct Sprite* sprite);
+static void sub_80CF228(struct Sprite* sprite);
+static void sub_80CF264(struct Sprite* sprite);
+
+// wave_finger
+// Used by Metronome, Follow Me, and Taunt.
+
+const union AffineAnimCmd gSpriteAffineAnim_83D7238[] =
+{
+ AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0),
+ AFFINEANIMCMD_FRAME(0x1E, 0x1E, 0, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D7250[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 4, 11),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -4, 11),
+ AFFINEANIMCMD_LOOP(2),
+ AFFINEANIMCMD_FRAME(0xFFE2, 0xFFE2, 0, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D7278[] =
+{
+ AFFINEANIMCMD_FRAME(16, 16, 0, 0),
+ AFFINEANIMCMD_FRAME(30, 30, 0, 8),
+ AFFINEANIMCMD_FRAME(0, 0, 0, 16),
+ AFFINEANIMCMD_LOOP(0),
+ AFFINEANIMCMD_FRAME(0, 0, 4, 11),
+ AFFINEANIMCMD_FRAME(0, 0, -4, 11),
+ AFFINEANIMCMD_LOOP(2),
+ AFFINEANIMCMD_FRAME(-30, -30, 0, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D72C0[] =
+{
+ gSpriteAffineAnim_83D7238,
+ gSpriteAffineAnim_83D7250,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D72C8 =
+{
+ .tileTag = 10064,
+ .paletteTag = 10064,
+ .oam = &gOamData_837DFF4,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D72C0,
+ .callback = sub_80CF040,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D72E0 =
+{
+ .tileTag = 10064,
+ .paletteTag = 10064,
+ .oam = &gOamData_837DF94,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D72C0,
+ .callback = sub_80CF0BC,
+};
+
+const union AnimCmd gSpriteAnim_83D72F8[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D7300[] =
+{
+ ANIMCMD_FRAME(0, 1, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D7308[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(16, 4),
+ ANIMCMD_FRAME(32, 4),
+ ANIMCMD_FRAME(16, 4),
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(16, 4),
+ ANIMCMD_FRAME(32, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D7328[] =
+{
+ ANIMCMD_FRAME(0, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(0, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 4, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D7348[] =
+{
+ gSpriteAnim_83D72F8,
+ gSpriteAnim_83D7300,
+ gSpriteAnim_83D7308,
+ gSpriteAnim_83D7328,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7358 =
+{
+ .tileTag = 10214,
+ .paletteTag = 10214,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D7348,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CF1C8,
+};
+
+void sub_80CF040(struct Sprite* sprite)
+{
+ u8 bank;
+ if (gBattleAnimArgs[0] == 0)
+ bank = gAnimBankAttacker;
+ else
+ bank = gAnimBankTarget;
+
+ sub_80CEF44(bank, sprite);
+ sprite->data[0] = 0;
+ StoreSpriteCallbackInData(sprite, sub_80CF088);
+ sprite->callback = sub_80785E4;
+}
+
+static void sub_80CF088(struct Sprite* sprite)
+{
+ if (++sprite->data[0] > 16)
+ {
+ StartSpriteAffineAnim(sprite, 1);
+ StoreSpriteCallbackInData(sprite, move_anim_8074EE0);
+ sprite->callback = sub_80785E4;
+ }
+}
+
+void sub_80CF0BC(struct Sprite* sprite)
+{
+ u8 bank;
+ if (gBattleAnimArgs[0] == 0)
+ bank = gAnimBankAttacker;
+ else
+ bank = gAnimBankTarget;
+
+ sprite->pos1.x = GetBattlerSpriteCoord(bank, 0);
+ sprite->pos1.y = sub_807A100(bank, 2);
+ if (sprite->pos1.y <= 9)
+ sprite->pos1.y = 10;
+
+ sprite->data[0] = 1;
+ sprite->data[1] = 0;
+ sprite->data[2] = sprite->subpriority;
+ sprite->data[3] = sprite->subpriority + 4;
+ sprite->data[4] = 0;
+ StoreSpriteCallbackInData(sprite, sub_80CF138);
+ sprite->callback = sub_80785E4;
+}
+
+static void sub_80CF138(struct Sprite* sprite)
+{
+ if (++sprite->data[4] > 12)
+ sprite->callback = sub_80CF158;
+}
+
+static void sub_80CF158(struct Sprite* sprite)
+{
+ s16 temp;
+ s16 temp2;
+ sprite->data[1] += 4;
+ if (sprite->data[1] > 0xFE)
+ {
+ if (--sprite->data[0] == 0)
+ {
+ sprite->pos2.x = 0;
+ sprite->callback = sub_80CF088;
+ return;
+ }
+ else
+ {
+ sprite->data[1] &= 0xFF;
+ }
+ }
+
+ if (sprite->data[1] > 0x4F)
+ sprite->subpriority = sprite->data[3];
+
+ if (sprite->data[1] > 0x9F)
+ sprite->subpriority = sprite->data[2];
+
+ temp = gSineTable[sprite->data[1]];
+ sprite->pos2.x = (temp2 = temp >> 3) + (temp2 >> 1);
+}
+
+void sub_80CF1C8(struct Sprite* sprite)
+{
+ u8 bank;
+ if (gBattleAnimArgs[0] == 0)
+ bank = gAnimBankAttacker;
+ else
+ bank = gAnimBankTarget;
+
+ sub_80CEF44(bank, sprite);
+ if (GetBattlerSide(bank) == 0)
+ {
+ StartSpriteAnim(sprite, 0);
+ sprite->data[0] = 2;
+ }
+ else
+ {
+ StartSpriteAnim(sprite, 1);
+ sprite->data[0] = 3;
+ }
+
+ sprite->callback = sub_80CF228;
+}
+
+static void sub_80CF228(struct Sprite* sprite)
+{
+ if (++sprite->data[1] > 10)
+ {
+ sprite->data[1] = 0;
+ StartSpriteAnim(sprite, sprite->data[0]);
+ StoreSpriteCallbackInData(sprite, sub_80CF264);
+ sprite->callback = sub_8078600;
+ }
+}
+
+static void sub_80CF264(struct Sprite* sprite)
+{
+ if (++sprite->data[1] > 5)
+ DestroyAnimSprite(sprite);
+}
diff --git a/src/battle/anim/fire.c b/src/battle/anim/fire.c
index 0939c938c..929828ed4 100644
--- a/src/battle/anim/fire.c
+++ b/src/battle/anim/fire.c
@@ -6,8 +6,170 @@
extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
-void sub_80D5038(struct Sprite *);
-void sub_80D50E8(struct Sprite *);
+void sub_80D4ED8(struct Sprite *sprite);
+void sub_80D4F18(struct Sprite *sprite);
+void sub_80D4FCC(struct Sprite *sprite);
+void sub_80D4F5C(struct Sprite *sprite);
+void sub_80D5074(struct Sprite *sprite);
+static void sub_80D5038(struct Sprite *);
+static void sub_80D50E8(struct Sprite *);
+
+const union AnimCmd gSpriteAnim_83D9450[] =
+{
+ ANIMCMD_FRAME(16, 4),
+ ANIMCMD_FRAME(32, 4),
+ ANIMCMD_FRAME(48, 4),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd gSpriteAnim_83D9460[] =
+{
+ ANIMCMD_FRAME(16, 4, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 4, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(48, 4, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D9470[] =
+{
+ gSpriteAnim_83D9450,
+ gSpriteAnim_83D9460,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9478 =
+{
+ .tileTag = 10029,
+ .paletteTag = 10029,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D9470,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D4ED8,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9490 =
+{
+ .tileTag = 10029,
+ .paletteTag = 10029,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D9470,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D4F18,
+};
+
+const union AnimCmd gSpriteAnim_83D94A8[] =
+{
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_FRAME(16, 3),
+ ANIMCMD_FRAME(32, 3),
+ ANIMCMD_FRAME(48, 3),
+ ANIMCMD_FRAME(64, 3),
+ ANIMCMD_FRAME(80, 3),
+ ANIMCMD_FRAME(96, 3),
+ ANIMCMD_FRAME(112, 3),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D94CC[] =
+{
+ gSpriteAnim_83D94A8,
+};
+
+const union AnimCmd gSpriteAnim_83D94D0[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_FRAME(16, 5),
+ ANIMCMD_FRAME(32, 5),
+ ANIMCMD_FRAME(48, 5),
+ ANIMCMD_FRAME(64, 5),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D94E8[] =
+{
+ gSpriteAnim_83D94D0,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D94EC[] =
+{
+ AFFINEANIMCMD_FRAME(0x32, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0x20, 0x0, 0, 7),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D9504[] =
+{
+ gSpriteAffineAnim_83D94EC,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9508 =
+{
+ .tileTag = 10033,
+ .paletteTag = 10033,
+ .oam = &gOamData_837DF94,
+ .anims = gSpriteAnimTable_83D94CC,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D9504,
+ .callback = sub_80D4FCC,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9520 =
+{
+ .tileTag = 10033,
+ .paletteTag = 10033,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D94CC,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D4FCC,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9538 =
+{
+ .tileTag = 10035,
+ .paletteTag = 10035,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D94E8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D4F5C,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83D9550 =
+{
+ .tileTag = 10029,
+ .paletteTag = 10029,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D94E8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D4F5C,
+};
+
+const union AnimCmd gSpriteAnim_83D9568[] =
+{
+ ANIMCMD_FRAME(16, 6),
+ ANIMCMD_FRAME(32, 6),
+ ANIMCMD_FRAME(48, 6),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D9578[] =
+{
+ gSpriteAnim_83D9568,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83D957C =
+{
+ .tileTag = 10029,
+ .paletteTag = 10029,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D9578,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D5074,
+};
void sub_80D4ED8(struct Sprite *sprite)
{
@@ -20,7 +182,7 @@ void sub_80D4ED8(struct Sprite *sprite)
StoreSpriteCallbackInData(sprite, DestroyAnimSprite);
sprite->callback = sub_8078174;
- sub_8078174(sprite);
+ sprite->callback(sprite);
}
void sub_80D4F18(struct Sprite *sprite)
@@ -82,7 +244,7 @@ void sub_80D4FCC(struct Sprite *sprite)
sprite->callback = sub_80D5038;
}
-void sub_80D5038(struct Sprite *sprite)
+static void sub_80D5038(struct Sprite *sprite)
{
if (++sprite->data[0] < sprite->data[4])
{
@@ -119,7 +281,7 @@ void sub_80D5074(struct Sprite *sprite)
sprite->callback = sub_80D50E8;
}
-void sub_80D50E8(struct Sprite *sprite)
+static void sub_80D50E8(struct Sprite *sprite)
{
if (sprite->data[3])
{
diff --git a/src/battle/anim/fire_2.c b/src/battle/anim/fire_2.c
index 97ac2e933..b055d7c80 100644
--- a/src/battle/anim/fire_2.c
+++ b/src/battle/anim/fire_2.c
@@ -9,18 +9,180 @@
extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
-extern struct SpriteTemplate gSpriteTemplate_83D96C4;
-extern s16 gHeatedRockCoords[7][2];
+void AnimEmberFlare(struct Sprite *sprite);
+void sub_80D5210(struct Sprite *sprite);
+void AnimFireRing(struct Sprite *sprite);
+void AnimFireCross(struct Sprite *sprite);
+void sub_80D53B4(struct Sprite *sprite);
+void sub_80D58FC(struct Sprite *sprite);
+void sub_80D5A20(struct Sprite *sprite);
static void AnimFireRingStep1(struct Sprite *);
static void UpdateFireRingCircleOffset(struct Sprite *);
static void AnimFireRingStep2(struct Sprite *);
static void AnimFireRingStep3(struct Sprite *);
-void sub_80D53F4(struct Sprite *);
-void sub_80D541C(struct Sprite *);
-void sub_80D54E0(u8 taskId);
-void sub_80D57C4(u8 spriteId, u8 taskId, u8 a3);
+static void sub_80D53F4(struct Sprite *);
+static void sub_80D541C(struct Sprite *);
+static void sub_80D54E0(u8 taskId);
+static void sub_80D57C4(u8 spriteId, u8 taskId, u8 a3);
+static void sub_80D59B0(struct Sprite *);
+static void sub_80D5A74(struct Sprite *);
+
+const union AnimCmd gSpriteAnim_83D95C8[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(16, 4),
+ ANIMCMD_FRAME(32, 4),
+ ANIMCMD_FRAME(48, 4),
+ ANIMCMD_FRAME(64, 4),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D95E0[] =
+{
+ gSpriteAnim_83D95C8,
+};
+
+const struct SpriteTemplate gEmberSpriteTemplate =
+{
+ .tileTag = 10029,
+ .paletteTag = 10029,
+ .oam = &gOamData_837DF34,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = TranslateAnimSpriteToTargetMonLocation,
+};
+
+const struct SpriteTemplate gEmberFlareSpriteTemplate =
+{
+ .tileTag = 10029,
+ .paletteTag = 10029,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D95E0,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimEmberFlare,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9614 =
+{
+ .tileTag = 10029,
+ .paletteTag = 10029,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D95E0,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D5210,
+};
+
+const struct SpriteTemplate gFireRingSpriteTemplate =
+{
+ .tileTag = 10029,
+ .paletteTag = 10029,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D95E0,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimFireRing,
+};
+
+const union AnimCmd gSpriteAnim_83D9644[] =
+{
+ ANIMCMD_FRAME(32, 6),
+ ANIMCMD_FRAME(48, 6),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D9650[] =
+{
+ gSpriteAnim_83D9644,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D9654[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 1),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D9664[] =
+{
+ AFFINEANIMCMD_FRAME(0xA0, 0xA0, 0, 0),
+ AFFINEANIMCMD_END,
+};
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D9674[] =
+{
+ gSpriteAffineAnim_83D9654,
+ gSpriteAffineAnim_83D9664,
+};
+
+const struct SpriteTemplate gFireCrossSpriteTemplate =
+{
+ .tileTag = 10029,
+ .paletteTag = 10029,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D9650,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimFireCross,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9694 =
+{
+ .tileTag = 10029,
+ .paletteTag = 10029,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D95E0,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D53B4,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D96AC =
+{
+ .tileTag = 10029,
+ .paletteTag = 10029,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D95E0,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_807A9BC,
+};
+
+
+const struct SpriteTemplate gSpriteTemplate_83D96C4 =
+{
+ .tileTag = 10201,
+ .paletteTag = 10201,
+ .oam = &gOamData_837DF2C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D58FC,
+};
+
+const s16 gHeatedRockCoords[][2] =
+{
+ {-2, -5},
+ {-1, -1},
+ { 3, -6},
+ { 4, -2},
+ { 2, -8},
+ {-5, -5},
+ { 4, -7},
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D96F8 =
+{
+ .tileTag = 10201,
+ .paletteTag = 10201,
+ .oam = &gOamData_837DF34,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D5A20,
+};
// Animates the secondary effect of MOVE_EMBER, where the flames grow and slide
// horizontally a bit.
@@ -42,13 +204,12 @@ void AnimEmberFlare(struct Sprite *sprite)
sprite->callback(sprite);
}
-struct Sprite *sub_80D5210(struct Sprite *sprite)
+void sub_80D5210(struct Sprite *sprite)
{
gBattleAnimArgs[0] = -gBattleAnimArgs[0];
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
sprite->callback = sub_8079534;
- return sprite;
}
// Animates the a fire sprite in the first-half of the MOVE_FIRE_BLAST
@@ -157,7 +318,7 @@ void sub_80D53B4(struct Sprite *sprite)
StoreSpriteCallbackInData(sprite, sub_80D53F4);
}
-void sub_80D53F4(struct Sprite *sprite)
+static void sub_80D53F4(struct Sprite *sprite)
{
sprite->invisible = FALSE;
@@ -168,7 +329,7 @@ void sub_80D53F4(struct Sprite *sprite)
sub_80D541C(sprite);
}
-void sub_80D541C(struct Sprite *sprite)
+static void sub_80D541C(struct Sprite *sprite)
{
sprite->pos2.x = Sin(sprite->data[1], sprite->data[2] >> 8);
sprite->pos2.y = Cos(sprite->data[1], sprite->data[2] >> 8);
@@ -199,7 +360,7 @@ void sub_80D5470(u8 taskId) // initialize animation task for Move_ERUPTION?
task->func = sub_80D54E0;
}
-void sub_80D54E0(u8 taskId) // animate Move_ERUPTION?
+static void sub_80D54E0(u8 taskId) // animate Move_ERUPTION?
{
struct Task *task = &gTasks[taskId];
@@ -309,7 +470,7 @@ void sub_80D54E0(u8 taskId) // animate Move_ERUPTION?
}
}
-void sub_80D57C4(u8 spriteId, u8 taskId, u8 a3)
+static void sub_80D57C4(u8 spriteId, u8 taskId, u8 a3)
{
u16 i, j;
s8 sign;
@@ -346,4 +507,119 @@ void sub_80D57C4(u8 spriteId, u8 taskId, u8 a3)
gTasks[taskId].data[a3]++;
}
}
-} \ No newline at end of file
+}
+
+void sub_80D58FC(struct Sprite *sprite)
+{
+ sub_80D59B0(sprite);
+
+ if (sprite->invisible)
+ {
+ gTasks[sprite->data[6]].data[sprite->data[7]]--;
+ DestroySprite(sprite);
+ }
+}
+
+u16 sub_80D5940(u8 spriteId)
+{
+ u16 var1 = gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y + gSprites[spriteId].centerToCornerVecY;
+
+ if (GetBattlerSide(gAnimBankAttacker) == 0)
+ {
+ var1 = ((var1 << 16) + 0x4A0000) >> 16;
+ }
+ else
+ {
+ var1 = ((var1 << 16) + 0x2C0000) >> 16;
+ }
+
+ return var1;
+}
+
+void sub_80D5994(struct Sprite *sprite, s16 x, s16 y)
+{
+ sprite->data[0] = 0;
+ sprite->data[1] = 0;
+ sprite->data[2] = (u16)sprite->pos1.x * 8;
+ sprite->data[3] = (u16)sprite->pos1.y * 8;
+ sprite->data[4] = x * 8;
+ sprite->data[5] = y * 8;
+}
+
+static void sub_80D59B0(struct Sprite *sprite)
+{
+ int var1;
+ if (++sprite->data[0] > 2)
+ {
+ sprite->data[0] = 0;
+ ++sprite->data[1];
+ var1 = (u16)sprite->data[1] * (u16)sprite->data[1];
+ sprite->data[3] += var1;
+ }
+
+ sprite->data[2] += sprite->data[4];
+ sprite->pos1.x = sprite->data[2] >> 3;
+ sprite->data[3] += sprite->data[5];
+ sprite->pos1.y = sprite->data[3] >> 3;
+
+ if (sprite->pos1.x < -8 || sprite->pos1.x > 0xf8 || sprite->pos1.y < -8 || sprite->pos1.y > 120)
+ sprite->invisible = TRUE;
+}
+
+void sub_80D5A20(struct Sprite *sprite)
+{
+ sprite->pos1.x = gBattleAnimArgs[0];
+ sprite->pos1.y = gBattleAnimArgs[1];
+
+ sprite->data[0] = 0;
+ sprite->data[1] = 0;
+ sprite->data[2] = 0;
+ sprite->data[6] = gBattleAnimArgs[2];
+ sprite->data[7] = gBattleAnimArgs[3];
+
+ sprite->oam.tileNum += gBattleAnimArgs[4] * 16;
+ sprite->callback = sub_80D5A74;
+}
+
+static void sub_80D5A74(struct Sprite *sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ if (sprite->data[6] != 0)
+ {
+ sprite->data[6]--;
+ return;
+ }
+
+ sprite->data[0]++;
+ // fall through
+ case 1:
+ sprite->pos1.y += 8;
+ if (sprite->pos1.y >= sprite->data[7])
+ {
+ sprite->pos1.y = sprite->data[7];
+ sprite->data[0]++;
+ }
+ break;
+ case 2:
+ if (++sprite->data[1] > 1)
+ {
+ sprite->data[1] = 0;
+ if ((++sprite->data[2] & 1) != 0)
+ {
+ sprite->pos2.y = -3;
+ }
+ else
+ {
+ sprite->pos2.y = 3;
+ }
+ }
+
+ if (++sprite->data[3] > 16)
+ {
+ DestroyAnimSprite(sprite);
+ }
+ break;
+ }
+}
diff --git a/src/battle/anim/flying.c b/src/battle/anim/flying.c
new file mode 100755
index 000000000..ec40e26c4
--- /dev/null
+++ b/src/battle/anim/flying.c
@@ -0,0 +1,346 @@
+#include "global.h"
+#include "rom_8077ABC.h"
+#include "battle_anim.h"
+
+extern s16 gBattleAnimArgs[];
+extern u8 gAnimBankAttacker;
+extern u8 gAnimBankTarget;
+
+void sub_80DA034(struct Sprite *sprite);
+void sub_80DA16C(struct Sprite *sprite);
+void sub_80DA208(struct Sprite *sprite);
+void sub_80DA300(struct Sprite *sprite);
+void sub_80DA38C(struct Sprite *sprite);
+void sub_80DA4D8(struct Sprite *sprite);
+void sub_80DAD30(struct Sprite *sprite);
+void sub_80DAD84(struct Sprite *sprite);
+void sub_80DB000(struct Sprite *sprite);
+void sub_80DB194(struct Sprite *sprite);
+void sub_80DB1F4(struct Sprite *sprite);
+void sub_80DB288(struct Sprite *sprite);
+void sub_80DB374(struct Sprite *sprite);
+void sub_80DB458(struct Sprite *sprite);
+void sub_80DB564(struct Sprite *sprite);
+void sub_80DB5E4(struct Sprite *sprite);
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA380 =
+{
+ .tileTag = 10009,
+ .paletteTag = 10009,
+ .oam = &gOamData_837DF7C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DA034,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DA398[] =
+{
+ AFFINEANIMCMD_FRAME(0x10, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0xA, 0x0, 0, 24),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA3B0[] =
+{
+ gSpriteAffineAnim_83DA398,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA3B4 =
+{
+ .tileTag = 10009,
+ .paletteTag = 10009,
+ .oam = &gOamData_837DFDC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DA3B0,
+ .callback = sub_80DA16C,
+};
+
+const union AnimCmd gSpriteAnim_83DA3CC[] =
+{
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_FRAME(0, 3, .hFlip = TRUE),
+ ANIMCMD_FRAME(0, 3, .vFlip = TRUE),
+ ANIMCMD_FRAME(0, 3, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_83DA3E0[] =
+{
+ gSpriteAnim_83DA3CC,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA3E4 =
+{
+ .tileTag = 10154,
+ .paletteTag = 10154,
+ .oam = &gOamData_837DF54,
+ .anims = gSpriteAnimTable_83DA3E0,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DA208,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DA3FC[] =
+{
+ AFFINEANIMCMD_FRAME(0x10, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0x28, 0x0, 0, 6),
+ AFFINEANIMCMD_FRAME(0x0, 0xFFE0, 0, 5),
+ AFFINEANIMCMD_FRAME(0xFFF0, 0x20, 0, 10),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA424[] =
+{
+ gSpriteAffineAnim_83DA3FC,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DA428[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 50, 1),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DA438[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -40, 1),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA448[] =
+{
+ gSpriteAffineAnim_83DA428,
+ gSpriteAffineAnim_83DA438,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA450 =
+{
+ .tileTag = 10156,
+ .paletteTag = 10156,
+ .oam = &gOamData_837DFFC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DA424,
+ .callback = sub_80DA300,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA468 =
+{
+ .tileTag = 10156,
+ .paletteTag = 10156,
+ .oam = &gOamData_837DF9C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DA448,
+ .callback = sub_80DA38C,
+};
+
+const union AnimCmd gSpriteAnim_83DA480[] =
+{
+ ANIMCMD_FRAME(0, 0),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83DA488[] =
+{
+ ANIMCMD_FRAME(16, 0, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83DA490[] =
+{
+ gSpriteAnim_83DA480,
+ gSpriteAnim_83DA488,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA498 =
+{
+ .tileTag = 10270,
+ .paletteTag = 10270,
+ .oam = &gOamData_837DF94,
+ .anims = gSpriteAnimTable_83DA490,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DA4D8,
+};
+
+const u16 gUnknownPalette_83DA4B0[] = INCBIN_U16("graphics/unknown/unknown_3DA4B0.gbapal");
+
+const struct SpriteTemplate gSpriteTemplate_83DA4D0 =
+{
+ .tileTag = 10155,
+ .paletteTag = 10155,
+ .oam = &gOamData_837DF2C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DAD30,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83DA4E8 =
+{
+ .tileTag = 10270,
+ .paletteTag = 10270,
+ .oam = &gOamData_837DF94,
+ .anims = gSpriteAnimTable_83DA490,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DAD84,
+};
+
+const union AnimCmd gSpriteAnim_83DA500[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_FRAME(8, 1),
+ ANIMCMD_FRAME(16, 1),
+ ANIMCMD_FRAME(8, 1, .hFlip = TRUE),
+ ANIMCMD_FRAME(0, 1, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83DA518[] =
+{
+ gSpriteAnim_83DA500,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA51C =
+{
+ .tileTag = 10162,
+ .paletteTag = 10162,
+ .oam = &gOamData_837DF54,
+ .anims = gSpriteAnimTable_83DA518,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DB000,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DA534[] =
+{
+ AFFINEANIMCMD_FRAME(0x10, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0x28, 0x0, 0, 6),
+ AFFINEANIMCMD_FRAME(0x0, 0xFFE0, 0, 5),
+ AFFINEANIMCMD_FRAME(0xFFEC, 0x0, 0, 7),
+ AFFINEANIMCMD_FRAME(0xFFEC, 0xFFEC, 0, 5),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA564[] =
+{
+ gSpriteAffineAnim_83DA534,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA568 =
+{
+ .tileTag = 10156,
+ .paletteTag = 10156,
+ .oam = &gOamData_837DFFC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DA564,
+ .callback = sub_80DB194,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DA580[] =
+{
+ AFFINEANIMCMD_FRAME(0xA0, 0x100, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA590[] =
+{
+ gSpriteAffineAnim_83DA580,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA594 =
+{
+ .tileTag = 10156,
+ .paletteTag = 10156,
+ .oam = &gOamData_837DFFC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DA590,
+ .callback = sub_80DB1F4,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DA5AC[] =
+{
+ AFFINEANIMCMD_FRAME(0x10, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0x28, 0x0, 0, 6),
+ AFFINEANIMCMD_FRAME(0x0, 0xFFE0, 0, 5),
+ AFFINEANIMCMD_FRAME(0xFFF0, 0x20, 0, 10),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA5D4[] =
+{
+ gSpriteAffineAnim_83DA5AC,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA5D8 =
+{
+ .tileTag = 10156,
+ .paletteTag = 10156,
+ .oam = &gOamData_837DFFC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DA5D4,
+ .callback = sub_80DB288,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DA5F0[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x0, 0, 0),
+ AFFINEANIMCMD_FRAME(0x0, 0x20, 0, 12),
+ AFFINEANIMCMD_FRAME(0x0, 0xFFE0, 0, 11),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA610[] =
+{
+ gSpriteAffineAnim_83DA5F0,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA614 =
+{
+ .tileTag = 10272,
+ .paletteTag = 10272,
+ .oam = &gOamData_837DFFC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DB374,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA62C =
+{
+ .tileTag = 10273,
+ .paletteTag = 10273,
+ .oam = &gOamData_837DF24,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DB458,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83DA644 =
+{
+ .tileTag = 10212,
+ .paletteTag = 10212,
+ .oam = &gOamData_837E05C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DB564,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA65C =
+{
+ .tileTag = 10284,
+ .paletteTag = 10284,
+ .oam = &gOamData_837DFFC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DB5E4,
+};
diff --git a/src/battle/anim/flying_hearts.c b/src/battle/anim/flying_hearts.c
index f20416535..2bba6c4cb 100644
--- a/src/battle/anim/flying_hearts.c
+++ b/src/battle/anim/flying_hearts.c
@@ -8,11 +8,23 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80D2064(struct Sprite* sprite);
static void sub_80D2094(struct Sprite* sprite);
// flying_hearts (hearts float upward from the bottom of the screen.)
// Used in Attract.
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7AE0 =
+{
+ .tileTag = 10216,
+ .paletteTag = 10216,
+ .oam = &gOamData_837DF2C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D2064,
+};
+
void sub_80D2064(struct Sprite* sprite)
{
sprite->pos1.x = gBattleAnimArgs[0];
@@ -23,7 +35,7 @@ void sub_80D2064(struct Sprite* sprite)
StoreSpriteCallbackInData(sprite, sub_80D2094);
}
-void sub_80D2094(struct Sprite* sprite)
+static void sub_80D2094(struct Sprite* sprite)
{
s16 y;
sprite->data[2] += sprite->data[1];
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/ghost.c b/src/battle/anim/ghost.c
new file mode 100755
index 000000000..fd33d4782
--- /dev/null
+++ b/src/battle/anim/ghost.c
@@ -0,0 +1,191 @@
+#include "global.h"
+#include "rom_8077ABC.h"
+#include "battle_anim.h"
+
+extern s16 gBattleAnimArgs[];
+extern u8 gAnimBankAttacker;
+extern u8 gAnimBankTarget;
+
+void sub_80DDB6C(struct Sprite *sprite);
+void sub_80DDD58(struct Sprite *sprite);
+void sub_80DDF40(struct Sprite *sprite);
+void sub_80DE0FC(struct Sprite *sprite);
+void sub_80DE7B8(struct Sprite *sprite);
+void sub_80DEF3C(struct Sprite *sprite);
+void sub_80DF0B8(struct Sprite *sprite);
+void sub_80DF0B8(struct Sprite *sprite);
+void sub_80DF3D8(struct Sprite *sprite);
+void sub_80DF49C(struct Sprite *sprite);
+
+const union AffineAnimCmd gSpriteAffineAnim_83DAE48[] =
+{
+ AFFINEANIMCMD_FRAME(0x1E, 0x1E, 10, 5),
+ AFFINEANIMCMD_FRAME(0xFFE2, 0xFFE2, 10, 5),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DAE60[] =
+{
+ gSpriteAffineAnim_83DAE48,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAE64 =
+{
+ .tileTag = 10013,
+ .paletteTag = 10013,
+ .oam = &gOamData_837DFEC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DAE60,
+ .callback = sub_80DDB6C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAE7C =
+{
+ .tileTag = 10013,
+ .paletteTag = 10013,
+ .oam = &gOamData_837E04C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DDD58,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DAE94[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 10, 1),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DAEA4[] =
+{
+ gSpriteAffineAnim_83DAE94,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAEA8 =
+{
+ .tileTag = 10176,
+ .paletteTag = 10176,
+ .oam = &gOamData_837DF94,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DAEA4,
+ .callback = sub_80DDF40,
+};
+
+const union AnimCmd gSpriteAnim_83DAEC0[] =
+{
+ ANIMCMD_FRAME(0, 2),
+ ANIMCMD_FRAME(8, 2),
+ ANIMCMD_FRAME(16, 2),
+ ANIMCMD_FRAME(24, 2),
+ ANIMCMD_FRAME(32, 2),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83DAED8[] =
+{
+ gSpriteAnim_83DAEC0,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAEDC =
+{
+ .tileTag = 10177,
+ .paletteTag = 10177,
+ .oam = &gOamData_837DF74,
+ .anims = gSpriteAnimTable_83DAED8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DE0FC,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DAEF4[] =
+{
+ AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DAF04[] =
+{
+ gSpriteAffineAnim_83DAEF4,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83DAF08 =
+{
+ .tileTag = 10188,
+ .paletteTag = 10188,
+ .oam = &gOamData_837E07C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DE7B8,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAF20 =
+{
+ .tileTag = 10199,
+ .paletteTag = 10199,
+ .oam = &gOamData_837E074,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DEF3C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAF38 =
+{
+ .tileTag = 10200,
+ .paletteTag = 10200,
+ .oam = &gOamData_837E054,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DF0B8,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAF50 =
+{
+ .tileTag = 10221,
+ .paletteTag = 10221,
+ .oam = &gOamData_837E054,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DF0B8,
+};
+
+const union AnimCmd gSpriteAnim_83DAF68[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(8, 4),
+ ANIMCMD_FRAME(16, 4),
+ ANIMCMD_FRAME(24, 4),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_83DAF7C[] =
+{
+ gSpriteAnim_83DAF68,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83DAF80 =
+{
+ .tileTag = 10253,
+ .paletteTag = 10253,
+ .oam = &gOamData_837E094,
+ .anims = gSpriteAnimTable_83DAF7C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DF3D8,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83DAF98 =
+{
+ .tileTag = 0,
+ .paletteTag = 0,
+ .oam = &gDummyOamData,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DF49C,
+};
diff --git a/src/battle/anim/glitter.c b/src/battle/anim/glitter.c
index d73b46bbd..fb7443575 100644
--- a/src/battle/anim/glitter.c
+++ b/src/battle/anim/glitter.c
@@ -8,9 +8,52 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CD140(struct Sprite* sprite);
+void sub_80CD190(struct Sprite* sprite);
+
// glitter (the sparkling effect seen on Pokemon, usually after healing or a beneficial effect.)
// Used by Heal Bell, Cosmic Power, and Aromatherapy.
+const union AnimCmd gSpriteAnim_83D6C60[] =
+{
+ ANIMCMD_FRAME(0, 7),
+ ANIMCMD_FRAME(16, 7),
+ ANIMCMD_FRAME(32, 7),
+ ANIMCMD_FRAME(48, 7),
+ ANIMCMD_FRAME(64, 7),
+ ANIMCMD_FRAME(80, 7),
+ ANIMCMD_FRAME(96, 7),
+ ANIMCMD_FRAME(112, 7),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D6C84[] =
+{
+ gSpriteAnim_83D6C60,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6C88 =
+{
+ .tileTag = 10049,
+ .paletteTag = 10049,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D6C84,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CD140,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6CA0 =
+{
+ .tileTag = 10049,
+ .paletteTag = 10049,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D6C84,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CD190,
+};
+
void sub_80CD140(struct Sprite* sprite)
{
if (!gBattleAnimArgs[2])
diff --git a/src/battle/anim/glow.c b/src/battle/anim/glow.c
deleted file mode 100644
index 174655080..000000000
--- a/src/battle/anim/glow.c
+++ /dev/null
@@ -1,55 +0,0 @@
-#include "global.h"
-#include "rom_8077ABC.h"
-#include "trig.h"
-#include "battle_anim.h"
-#include "sound.h"
-#include "ewram.h"
-#include "palette.h"
-#include "decompress.h"
-
-extern s16 gBattleAnimArgs[];
-extern u8 gAnimBankAttacker;
-extern u8 gAnimBankTarget;
-
-extern u16 gUnknown_083D7A5C[5];
-
-extern const u8 gBattleAnimSpritePalette_206[];
-
-// glow (a whitening effect where the Pokemon glows white in a cycle.)
-// Used in Heal Bell.
-
-void sub_80D1ADC(u8 taskId)
-{
- int i;
- u8 sp[8];
- void* src;
- void* dest;
- void* what;
- sp[0] = IndexOfSpritePaletteTag(0x27DE);
- for (i = 1; i <= 4; i++)
- {
- sp[i] = AllocSpritePalette(0x2710 - i);
- }
-
- src = &gBattleAnimSpritePalette_206;
- dest = (IsContest()) ? gSharedMem + 0x18000 - 0x3800: gSharedMem + 0x18000;
- LZDecompressWram(src, dest);
- for (i = 0; i <= 4; i++)
- {
- what = ((IsContest()) ? gSharedMem + 0x14800 : gSharedMem + 0x18000) + (i << 5);
- LoadPalette(what, (u16)((sp[i] << 4) + 0x100), 32);
- }
-
- DestroyAnimVisualTask(taskId);
-}
-
-void sub_80D1B80(u8 taskId)
-{
- int i;
- for (i = 0; i < 5; i++)
- {
- FreeSpritePaletteByTag(gUnknown_083D7A5C[i]);
- }
-
- DestroyAnimVisualTask(taskId);
-}
diff --git a/src/battle/anim/grip.c b/src/battle/anim/grip.c
index a56a02d82..1ec779c09 100644
--- a/src/battle/anim/grip.c
+++ b/src/battle/anim/grip.c
@@ -8,11 +8,45 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80D0178(struct Sprite* sprite);
static void sub_80D020C(struct Sprite* sprite);
// grip (does a slash which is capable of mirroring for the effect of "gripping".)
// Used in Vice Grip.
+const union AnimCmd gSpriteAnim_83D7674[] =
+{
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_FRAME(16, 3),
+ ANIMCMD_FRAME(32, 20),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D7684[] =
+{
+ ANIMCMD_FRAME(0, 3, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 3, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 20, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D7694[] =
+{
+ gSpriteAnim_83D7674,
+ gSpriteAnim_83D7684,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D769C =
+{
+ .tileTag = 10138,
+ .paletteTag = 10138,
+ .oam = &gOamData_837E054,
+ .anims = gSpriteAnimTable_83D7694,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D0178,
+};
+
void sub_80D0178(struct Sprite* sprite)
{
s16 r7 = 32;
@@ -37,7 +71,7 @@ void sub_80D0178(struct Sprite* sprite)
StoreSpriteCallbackInData(sprite, sub_80D020C);
}
-void sub_80D020C(struct Sprite* sprite)
+static void sub_80D020C(struct Sprite* sprite)
{
if (sprite->animEnded == 1)
DestroyAnimSprite(sprite);
diff --git a/src/battle/anim/ground.c b/src/battle/anim/ground.c
new file mode 100755
index 000000000..a523df20e
--- /dev/null
+++ b/src/battle/anim/ground.c
@@ -0,0 +1,125 @@
+#include "global.h"
+#include "rom_8077ABC.h"
+#include "battle_anim.h"
+
+extern s16 gBattleAnimArgs[];
+extern u8 gAnimBankAttacker;
+extern u8 gAnimBankTarget;
+
+void sub_80E0F1C(struct Sprite *sprite);
+void sub_80E1004(struct Sprite *sprite);
+void sub_80E1078(struct Sprite *sprite);
+void sub_80E1078(struct Sprite *sprite);
+void sub_80E1108(struct Sprite *sprite);
+void sub_80E1728(struct Sprite *sprite);
+void sub_80E17CC(struct Sprite *sprite);
+
+const union AffineAnimCmd gSpriteAffineAnim_83DB2A0[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 15, 1),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DB2B0[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 20, 1),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DB2C0[] =
+{
+ gSpriteAffineAnim_83DB2A0,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DB2C4[] =
+{
+ gSpriteAffineAnim_83DB2B0,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB2C8 =
+{
+ .tileTag = 10000,
+ .paletteTag = 10000,
+ .oam = &gOamData_837DF94,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DB2C0,
+ .callback = sub_80E0F1C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB2E0 =
+{
+ .tileTag = 10000,
+ .paletteTag = 10000,
+ .oam = &gOamData_837DF94,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DB2C4,
+ .callback = sub_80E1004,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB2F8 =
+{
+ .tileTag = 10074,
+ .paletteTag = 10074,
+ .oam = &gOamData_837DF24,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80E1078,
+};
+
+const union AnimCmd gSpriteAnim_83DB310[] =
+{
+ ANIMCMD_FRAME(1, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83DB318[] =
+{
+ gSpriteAnim_83DB310,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB31C =
+{
+ .tileTag = 10074,
+ .paletteTag = 10074,
+ .oam = &gOamData_837DF2C,
+ .anims = gSpriteAnimTable_83DB318,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80E1078,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB334 =
+{
+ .tileTag = 10074,
+ .paletteTag = 10074,
+ .oam = &gOamData_837DF2C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80E1108,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB34C =
+{
+ .tileTag = 10074,
+ .paletteTag = 10074,
+ .oam = &gOamData_837DF24,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80E1728,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB364 =
+{
+ .tileTag = 10281,
+ .paletteTag = 10281,
+ .oam = &gOamData_837DF54,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80E17CC,
+};
diff --git a/src/battle/anim/grow.c b/src/battle/anim/grow.c
index 924629048..ad535ad7f 100644
--- a/src/battle/anim/grow.c
+++ b/src/battle/anim/grow.c
@@ -8,22 +8,28 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
-extern struct AffineAnimFrameCmd gUnknown_083D7714;
-
static void sub_80D0904(u8 taskId);
// grow (grows a Pokemon then shrinks back to normal size.)
// Used in Swagger and Bulk Up.
+const union AffineAnimCmd gSpriteAffineAnim_83D7714[] =
+{
+ AFFINEANIMCMD_FRAME(-4, -5, 0, 12),
+ AFFINEANIMCMD_FRAME(0, 0, 0, 24),
+ AFFINEANIMCMD_FRAME(4, 5, 0, 12),
+ AFFINEANIMCMD_END,
+};
+
void sub_80D08C8(u8 taskId)
{
struct Task* task = &gTasks[taskId];
u8 spriteId = GetAnimBattlerSpriteId(0);
- sub_80798F4(task, spriteId, &gUnknown_083D7714);
+ sub_80798F4(task, spriteId, &gSpriteAffineAnim_83D7714);
task->func = sub_80D0904;
}
-void sub_80D0904(u8 taskId)
+static void sub_80D0904(u8 taskId)
{
struct Task* task = &gTasks[taskId];
if (!sub_807992C(task))
diff --git a/src/battle/anim/guard.c b/src/battle/anim/guard.c
index d54fa4abc..341f74372 100644
--- a/src/battle/anim/guard.c
+++ b/src/battle/anim/guard.c
@@ -8,9 +8,40 @@ extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
extern u16 gBattleTypeFlags;
+void sub_80D3014(struct Sprite *sprite);
+
// guard (moves guard rings upwards)
// Used in Safeguard.
+const union AffineAnimCmd gSpriteAffineAnim_83D7D4C[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D7D5C[] =
+{
+ AFFINEANIMCMD_FRAME(0x200, 0x100, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D7D6C[] =
+{
+ gSpriteAffineAnim_83D7D4C,
+ gSpriteAffineAnim_83D7D5C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7D74 =
+{
+ .tileTag = 10244,
+ .paletteTag = 10244,
+ .oam = &gOamData_837E13C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D7D6C,
+ .callback = sub_80D3014,
+};
+
void sub_80D3014(struct Sprite *sprite)
{
if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && IsAnimBankSpriteVisible(gAnimBankAttacker ^ 2))
diff --git a/src/battle/anim/guillotine.c b/src/battle/anim/guillotine.c
index 0768e8334..eb1bc7733 100644
--- a/src/battle/anim/guillotine.c
+++ b/src/battle/anim/guillotine.c
@@ -8,6 +8,7 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80D0228(struct Sprite* sprite);
static void sub_80D02D0(struct Sprite* sprite);
static void sub_80D0344(struct Sprite* sprite);
static void sub_80D03A8(struct Sprite* sprite);
@@ -15,6 +16,39 @@ static void sub_80D03A8(struct Sprite* sprite);
// guillotine (does a reverse grip where the slices can reverse at a given period.)
// Used in Guillotine.
+const union AnimCmd gSpriteAnim_83D76B4[] =
+{
+ ANIMCMD_FRAME(0, 2),
+ ANIMCMD_FRAME(16, 2),
+ ANIMCMD_FRAME(32, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D76C4[] =
+{
+ ANIMCMD_FRAME(0, 2, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 2, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 1, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D76D4[] =
+{
+ gSpriteAnim_83D76B4,
+ gSpriteAnim_83D76C4,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D76DC =
+{
+ .tileTag = 10138,
+ .paletteTag = 10138,
+ .oam = &gOamData_837E054,
+ .anims = gSpriteAnimTable_83D76D4,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D0228,
+};
+
void sub_80D0228(struct Sprite* sprite)
{
s16 r8 = 32;
@@ -43,7 +77,7 @@ void sub_80D0228(struct Sprite* sprite)
sprite->callback = sub_80D02D0;
}
-void sub_80D02D0(struct Sprite* sprite)
+static void sub_80D02D0(struct Sprite* sprite)
{
if (TranslateAnimSpriteByDeltas(sprite) && sprite->animEnded == 1)
{
@@ -62,7 +96,7 @@ void sub_80D02D0(struct Sprite* sprite)
}
}
-void sub_80D0344(struct Sprite* sprite)
+static void sub_80D0344(struct Sprite* sprite)
{
if (sprite->data[3])
{
@@ -83,7 +117,7 @@ void sub_80D0344(struct Sprite* sprite)
}
}
-void sub_80D03A8(struct Sprite* sprite)
+static void sub_80D03A8(struct Sprite* sprite)
{
if (TranslateAnimSpriteByDeltas(sprite) != 0)
DestroyAnimSprite(sprite);
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/heal_bell.c b/src/battle/anim/heal_bell.c
new file mode 100644
index 000000000..09029c9ff
--- /dev/null
+++ b/src/battle/anim/heal_bell.c
@@ -0,0 +1,132 @@
+#include "global.h"
+#include "rom_8077ABC.h"
+#include "trig.h"
+#include "battle_anim.h"
+#include "sound.h"
+#include "ewram.h"
+#include "palette.h"
+#include "decompress.h"
+
+extern s16 gBattleAnimArgs[];
+extern u8 gAnimBankAttacker;
+extern u8 gAnimBankTarget;
+
+extern const u8 gBattleAnimSpritePalette_206[];
+
+void sub_80D1C08(struct Sprite* sprite);
+
+// Used in Heal Bell.
+
+const union AnimCmd gSpriteAnim_83D7A08[] =
+{
+ ANIMCMD_FRAME(0, 6),
+ ANIMCMD_FRAME(16, 6),
+ ANIMCMD_FRAME(32, 15),
+ ANIMCMD_FRAME(16, 6),
+ ANIMCMD_FRAME(0, 6),
+ ANIMCMD_FRAME(16, 6, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 15, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 6, .hFlip = TRUE),
+ ANIMCMD_FRAME(0, 6),
+ ANIMCMD_FRAME(16, 6),
+ ANIMCMD_FRAME(32, 15),
+ ANIMCMD_FRAME(16, 6),
+ ANIMCMD_FRAME(0, 6),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D7A40[] =
+{
+ gSpriteAnim_83D7A08,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7A44 =
+{
+ .tileTag = 10205,
+ .paletteTag = 10205,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D7A40,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80793C4,
+};
+
+const u16 gUnknown_083D7A5C[] =
+{
+ 10206,
+ 9999,
+ 9998,
+ 9997,
+ 9996,
+ 0,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7A68 =
+{
+ .tileTag = 10206,
+ .paletteTag = 10206,
+ .oam = &gOamData_837DF2C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D1C08,
+};
+
+void sub_80D1ADC(u8 taskId)
+{
+ int i;
+ u8 sp[8];
+ void* src;
+ void* dest;
+ void* what;
+ sp[0] = IndexOfSpritePaletteTag(0x27DE);
+ for (i = 1; i <= 4; i++)
+ {
+ sp[i] = AllocSpritePalette(0x2710 - i);
+ }
+
+ src = &gBattleAnimSpritePalette_206;
+ dest = (IsContest()) ? gSharedMem + 0x18000 - 0x3800: gSharedMem + 0x18000;
+ LZDecompressWram(src, dest);
+ for (i = 0; i <= 4; i++)
+ {
+ what = ((IsContest()) ? gSharedMem + 0x14800 : gSharedMem + 0x18000) + (i << 5);
+ LoadPalette(what, (u16)((sp[i] << 4) + 0x100), 32);
+ }
+
+ DestroyAnimVisualTask(taskId);
+}
+
+void sub_80D1B80(u8 taskId)
+{
+ int i;
+ for (i = 0; i < 5; i++)
+ {
+ FreeSpritePaletteByTag(gUnknown_083D7A5C[i]);
+ }
+
+ DestroyAnimVisualTask(taskId);
+}
+
+static void sub_80D1BA8(struct Sprite* sprite, u8 a, u8 b)
+{
+ u8 tile;
+ tile = (b & 1);
+ tile = ((-tile | tile) >> 31) & 32;
+ sprite->oam.tileNum += tile + (a << 2);
+ sprite->oam.paletteNum = IndexOfSpritePaletteTag(gUnknown_083D7A5C[b >> 1]);
+}
+
+void sub_80D1C08(struct Sprite* sprite)
+{
+ InitAnimSpritePos(sprite, 0);
+ if (GetBattlerSide(gAnimBankAttacker) != 0)
+ gBattleAnimArgs[2] = -gBattleAnimArgs[2];
+
+ sprite->data[0] = gBattleAnimArgs[4];
+ sprite->data[2] = GetBattlerSpriteCoord(gAnimBankAttacker, 0) + gBattleAnimArgs[2];
+ sprite->data[4] = GetBattlerSpriteCoord(gAnimBankAttacker, 1) + gBattleAnimArgs[3];
+ sprite->callback = StartTranslateAnimSpriteByDeltas;
+ StoreSpriteCallbackInData(sprite, DestroyAnimSprite);
+ sub_80D1BA8(sprite, gBattleAnimArgs[5], gBattleAnimArgs[6]);
+}
diff --git a/src/battle/anim/heart_1.c b/src/battle/anim/heart_1.c
index 857169e62..5522d4551 100644
--- a/src/battle/anim/heart_1.c
+++ b/src/battle/anim/heart_1.c
@@ -8,9 +8,22 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80D1C80(struct Sprite* sprite);
+
// heart_1 (a floating heart in a wave pattern upward.)
// Used in Charm, Covet, and when a Pokemon is infatuated.
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7A80 =
+{
+ .tileTag = 10210,
+ .paletteTag = 10210,
+ .oam = &gOamData_837DF2C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D1C80,
+};
+
void sub_80D1C80(struct Sprite* sprite)
{
if (++sprite->data[0] == 1)
diff --git a/src/battle/anim/heated_rock.c b/src/battle/anim/heated_rock.c
deleted file mode 100644
index 6f1a1344a..000000000
--- a/src/battle/anim/heated_rock.c
+++ /dev/null
@@ -1,129 +0,0 @@
-#include "global.h"
-#include "battle_anim.h"
-#include "rom_8077ABC.h"
-
-extern s16 gBattleAnimArgs[8];
-extern u8 gAnimBankAttacker;
-extern u8 gAnimBankTarget;
-extern u16 gBattleTypeFlags;
-
-void sub_80D59B0(struct Sprite *);
-static void sub_80D5A74(struct Sprite *);
-
-// heated_rock (moves heated rock sprites)
-// Used in Eruption.
-
-void sub_80D58FC(struct Sprite *sprite)
-{
- sub_80D59B0(sprite);
-
- if (sprite->invisible)
- {
- gTasks[sprite->data[6]].data[sprite->data[7]]--;
- DestroySprite(sprite);
- }
-}
-
-u16 sub_80D5940(u8 spriteId)
-{
- u16 var1 = gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y + gSprites[spriteId].centerToCornerVecY;
-
- if (GetBattlerSide(gAnimBankAttacker) == 0)
- {
- var1 = ((var1 << 16) + 0x4A0000) >> 16;
- }
- else
- {
- var1 = ((var1 << 16) + 0x2C0000) >> 16;
- }
-
- return var1;
-}
-
-void sub_80D5994(struct Sprite *sprite, s16 x, s16 y)
-{
- sprite->data[0] = 0;
- sprite->data[1] = 0;
- sprite->data[2] = (u16)sprite->pos1.x * 8;
- sprite->data[3] = (u16)sprite->pos1.y * 8;
- sprite->data[4] = x * 8;
- sprite->data[5] = y * 8;
-}
-
-void sub_80D59B0(struct Sprite *sprite)
-{
- int var1;
- if (++sprite->data[0] > 2)
- {
- sprite->data[0] = 0;
- ++sprite->data[1];
- var1 = (u16)sprite->data[1] * (u16)sprite->data[1];
- sprite->data[3] += var1;
- }
-
- sprite->data[2] += sprite->data[4];
- sprite->pos1.x = sprite->data[2] >> 3;
- sprite->data[3] += sprite->data[5];
- sprite->pos1.y = sprite->data[3] >> 3;
-
- if (sprite->pos1.x < -8 || sprite->pos1.x > 0xf8 || sprite->pos1.y < -8 || sprite->pos1.y > 120)
- sprite->invisible = TRUE;
-}
-
-void sub_80D5A20(struct Sprite *sprite)
-{
- sprite->pos1.x = gBattleAnimArgs[0];
- sprite->pos1.y = gBattleAnimArgs[1];
-
- sprite->data[0] = 0;
- sprite->data[1] = 0;
- sprite->data[2] = 0;
- sprite->data[6] = gBattleAnimArgs[2];
- sprite->data[7] = gBattleAnimArgs[3];
-
- sprite->oam.tileNum += gBattleAnimArgs[4] * 16;
- sprite->callback = sub_80D5A74;
-}
-
-static void sub_80D5A74(struct Sprite *sprite)
-{
- switch (sprite->data[0])
- {
- case 0:
- if (sprite->data[6] != 0)
- {
- sprite->data[6]--;
- return;
- }
-
- sprite->data[0]++;
- // fall through
- case 1:
- sprite->pos1.y += 8;
- if (sprite->pos1.y >= sprite->data[7])
- {
- sprite->pos1.y = sprite->data[7];
- sprite->data[0]++;
- }
- break;
- case 2:
- if (++sprite->data[1] > 1)
- {
- sprite->data[1] = 0;
- if ((++sprite->data[2] & 1) != 0)
- {
- sprite->pos2.y = -3;
- }
- else
- {
- sprite->pos2.y = 3;
- }
- }
-
- if (++sprite->data[3] > 16)
- {
- DestroyAnimSprite(sprite);
- }
- break;
- }
-}
diff --git a/src/battle/anim/hidden_power_orbit.c b/src/battle/anim/hidden_power_orbit.c
new file mode 100644
index 000000000..ed680b2bd
--- /dev/null
+++ b/src/battle/anim/hidden_power_orbit.c
@@ -0,0 +1,120 @@
+#include "global.h"
+#include "rom_8077ABC.h"
+#include "trig.h"
+#include "battle_anim.h"
+#include "sound.h"
+
+extern s16 gBattleAnimArgs[];
+extern u8 gAnimBankAttacker;
+extern u8 gAnimBankTarget;
+
+void AnimOrbitFast(struct Sprite* sprite);
+void AnimOrbitScatter(struct Sprite* sprite);
+static void AnimOrbitFastStep(struct Sprite* sprite);
+static void AnimOrbitScatterStep(struct Sprite* sprite);
+
+const union AffineAnimCmd gSpriteAffineAnim_83D7AF8[] =
+{
+ AFFINEANIMCMD_FRAME(0x80, 0x80, 0, 0),
+ AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 1),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D7B10[] =
+{
+ gSpriteAffineAnim_83D7AF8,
+};
+
+const struct SpriteTemplate gHiddenPowerOrbSpriteTemplate =
+{
+ .tileTag = 10217,
+ .paletteTag = 10217,
+ .oam = &gOamData_837DF8C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D7B10,
+ .callback = AnimOrbitFast,
+};
+
+const struct SpriteTemplate gHiddenPowerOrbScatterSpriteTemplate =
+{
+ .tileTag = 10217,
+ .paletteTag = 10217,
+ .oam = &gOamData_837DFEC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D7B10,
+ .callback = AnimOrbitScatter,
+};
+
+// Orbits a sphere in an ellipse around the mon.
+// Used by MOVE_HIDDEN_POWER
+// arg 0: duration
+// arg 1: initial wave offset
+void AnimOrbitFast(struct Sprite* sprite)
+{
+ sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3);
+ sprite->affineAnimPaused = 1;
+ sprite->data[0] = gBattleAnimArgs[0];
+ sprite->data[1] = gBattleAnimArgs[1];
+ sprite->data[7] = sub_8079E90(gAnimBankAttacker);
+ sprite->callback = AnimOrbitFastStep;
+ sprite->callback(sprite);
+}
+
+static void AnimOrbitFastStep(struct Sprite* sprite)
+{
+ if ((u16)(sprite->data[1] - 0x40) <= 0x7F)
+ sprite->subpriority = sprite->data[7] + 1;
+ else
+ sprite->subpriority = sprite->data[7] - 1;
+
+ sprite->pos2.x = Sin(sprite->data[1], sprite->data[2] >> 8);
+ sprite->pos2.y = Cos(sprite->data[1], sprite->data[3] >> 8);
+ sprite->data[1] = (sprite->data[1] + 9) & 0xFF;
+ switch (sprite->data[5])
+ {
+ case 1:
+ sprite->data[2] -= 0x400;
+ sprite->data[3] -= 0x100;
+ if (++sprite->data[4] == sprite->data[0])
+ {
+ sprite->data[5] = 2;
+ return;
+ }
+ break;
+ case 0:
+ sprite->data[2] += 0x400;
+ sprite->data[3] += 0x100;
+ if (++sprite->data[4] == sprite->data[0])
+ {
+ sprite->data[4] = 0;
+ sprite->data[5] = 1;
+ }
+ break;
+ }
+
+ if ((u16)gBattleAnimArgs[7] == 0xFFFF)
+ DestroyAnimSprite(sprite);
+}
+
+// Moves orbs away from the mon, based on where they are in their orbit.
+// Used in MOVE_HIDDEN_POWER.
+// arg 0: initial wave offset
+void AnimOrbitScatter(struct Sprite* sprite)
+{
+ sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3);
+ sprite->data[0] = Sin(gBattleAnimArgs[0], 10);
+ sprite->data[1] = Cos(gBattleAnimArgs[0], 7);
+ sprite->callback = AnimOrbitScatterStep;
+}
+
+static void AnimOrbitScatterStep(struct Sprite* sprite)
+{
+ sprite->pos2.x += sprite->data[0];
+ sprite->pos2.y += sprite->data[1];
+ if (sprite->pos1.x + sprite->pos2.x + 16 > 0x110u || sprite->pos1.y + sprite->pos2.y > 0xA0 || sprite->pos1.y + sprite->pos2.y < -16)
+ DestroyAnimSprite(sprite);
+}
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/ice.c b/src/battle/anim/ice.c
new file mode 100755
index 000000000..50c8b9030
--- /dev/null
+++ b/src/battle/anim/ice.c
@@ -0,0 +1,495 @@
+#include "global.h"
+#include "rom_8077ABC.h"
+#include "battle_anim.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);
+void sub_807A9BC(struct Sprite *sprite);
+void unc_080B06FC(struct Sprite *sprite);
+void sub_80D8F10(struct Sprite *sprite);
+
+const union AnimCmd gSpriteAnim_83D9B58[] =
+{
+ ANIMCMD_FRAME(0, 5, .hFlip = TRUE),
+ ANIMCMD_FRAME(1, 5, .hFlip = TRUE),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D9B64[] =
+{
+ gSpriteAnim_83D9B58,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83D9B68 =
+{
+ .tileTag = 10141,
+ .paletteTag = 10141,
+ .oam = &gOamData_837DF24,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D7704,
+};
+
+const union AnimCmd gSpriteAnim_83D9B80[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D9B88[] =
+{
+ ANIMCMD_FRAME(4, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D9B90[] =
+{
+ ANIMCMD_FRAME(6, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D9B98[] =
+{
+ ANIMCMD_FRAME(7, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D9BA0[] =
+{
+ ANIMCMD_FRAME(8, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D9BA8[] =
+{
+ ANIMCMD_FRAME(12, 6),
+ ANIMCMD_FRAME(13, 6),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D9BB4[] =
+{
+ gSpriteAnim_83D9B80,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D9BB8[] =
+{
+ gSpriteAnim_83D9B88,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D9BBC[] =
+{
+ gSpriteAnim_83D9B90,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D9BC0[] =
+{
+ gSpriteAnim_83D9B98,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D9BC4[] =
+{
+ gSpriteAnim_83D9BA0,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D9BC8[] =
+{
+ gSpriteAnim_83D9BA8,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D9BCC[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 40, 1),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D9BDC[] =
+{
+ gSpriteAffineAnim_83D9BCC,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9BE0 =
+{
+ .tileTag = 10141,
+ .paletteTag = 10141,
+ .oam = &gOamData_837E144,
+ .anims = gSpriteAnimTable_83D9BB8,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D9BDC,
+ .callback = sub_80D78EC,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9BF8 =
+{
+ .tileTag = 10141,
+ .paletteTag = 10141,
+ .oam = &gOamData_837E044,
+ .anims = gSpriteAnimTable_83D9BBC,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D78EC,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D9C10[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 10, 1),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D9C20[] =
+{
+ gSpriteAffineAnim_83D9C10,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9C24 =
+{
+ .tileTag = 10141,
+ .paletteTag = 10141,
+ .oam = &gOamData_837E0E4,
+ .anims = gSpriteAnimTable_83D9BB8,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D9C20,
+ .callback = sub_80D792C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9C3C =
+{
+ .tileTag = 10141,
+ .paletteTag = 10141,
+ .oam = &gOamData_837E044,
+ .anims = gSpriteAnimTable_83D9BBC,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D792C,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D9C54[] =
+{
+ AFFINEANIMCMD_FRAME(0xCE, 0xCE, 0, 0),
+ AFFINEANIMCMD_FRAME(0x5, 0x5, 0, 10),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 6),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D9C74[] =
+{
+ gSpriteAffineAnim_83D9C54,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9C78 =
+{
+ .tileTag = 10141,
+ .paletteTag = 10141,
+ .oam = &gOamData_837E0E4,
+ .anims = gSpriteAnimTable_83D9BB8,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D9C74,
+ .callback = sub_80D79B4,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9C90 =
+{
+ .tileTag = 10141,
+ .paletteTag = 10141,
+ .oam = &gOamData_837E0A4,
+ .anims = gSpriteAnimTable_83D9BBC,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D9C74,
+ .callback = sub_80D79B4,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9CA8 =
+{
+ .tileTag = 10141,
+ .paletteTag = 10141,
+ .oam = &gOamData_837DF24,
+ .anims = gSpriteAnimTable_83D9BC0,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D7A64,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9CC0 =
+{
+ .tileTag = 10141,
+ .paletteTag = 10141,
+ .oam = &gOamData_837DF2C,
+ .anims = gSpriteAnimTable_83D9BC4,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D7CD4,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9CD8 =
+{
+ .tileTag = 10141,
+ .paletteTag = 10141,
+ .oam = &gOamData_837DF24,
+ .anims = gSpriteAnimTable_83D9BC0,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D7CD4,
+};
+
+const union AnimCmd gSpriteAnim_83D9CF0[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_FRAME(2, 5),
+ ANIMCMD_FRAME(4, 5),
+ ANIMCMD_FRAME(6, 5),
+ ANIMCMD_FRAME(4, 5),
+ ANIMCMD_FRAME(2, 5),
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D9D10[] =
+{
+ gSpriteAnim_83D9CF0,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9D14 =
+{
+ .tileTag = 10142,
+ .paletteTag = 10142,
+ .oam = &gOamData_837E084,
+ .anims = gSpriteAnimTable_83D9D10,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D7E88,
+};
+
+const union AnimCmd gSpriteAnim_83D9D2C[] =
+{
+ ANIMCMD_FRAME(0, 8),
+ ANIMCMD_FRAME(8, 8),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D9D38[] =
+{
+ gSpriteAnim_83D9D2C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9D3C =
+{
+ .tileTag = 10144,
+ .paletteTag = 10144,
+ .oam = &gOamData_837E074,
+ .anims = gSpriteAnimTable_83D9D38,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D7F10,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9D54 =
+{
+ .tileTag = 10172,
+ .paletteTag = 10172,
+ .oam = &gOamData_837E074,
+ .anims = gSpriteAnimTable_83D9D38,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D7F10,
+};
+
+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 =
+{
+ .tileTag = 10155,
+ .paletteTag = 10155,
+ .oam = &gOamData_837DF2C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D83E0,
+};
+
+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 =
+{
+ .tileTag = 10172,
+ .paletteTag = 10172,
+ .oam = &gOamData_837E074,
+ .anims = gSpriteAnimTable_83D9D38,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D8700,
+};
+
+// bitfield array
+const u32 gUnknown_083D9DC4[] =
+{
+ 0x2001E064,
+ 0x0001E055,
+ 0x1011E0F2,
+ 0x1021E042,
+ 0x0031E0B6,
+ 0x2001E03C,
+ 0x0011E0D6,
+ 0x1001E071,
+ 0x1031E0D2,
+ 0x0021E026,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D9DEC[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D9DFC[] =
+{
+ AFFINEANIMCMD_FRAME(0xF0, 0xF0, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D9E0C[] =
+{
+ AFFINEANIMCMD_FRAME(0xE0, 0xE0, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D9E1C[] =
+{
+ AFFINEANIMCMD_FRAME(0x150, 0x150, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D9E2C[] =
+{
+ gSpriteAffineAnim_83D9DEC,
+ gSpriteAffineAnim_83D9DFC,
+ gSpriteAffineAnim_83D9E0C,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D9E38[] =
+{
+ gSpriteAffineAnim_83D9E1C,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83D9E3C =
+{
+ .tileTag = 10263,
+ .paletteTag = 10263,
+ .oam = &gOamData_837DF8C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D9E2C,
+ .callback = sub_80D8D1C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9E54 =
+{
+ .tileTag = 10263,
+ .paletteTag = 10263,
+ .oam = &gOamData_837DF8C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D9E38,
+ .callback = sub_807A9BC,
+};
+
+const union AnimCmd gSpriteAnim_83D9E6C[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D9E74[] =
+{
+ ANIMCMD_FRAME(16, 4),
+ ANIMCMD_FRAME(32, 4),
+ ANIMCMD_FRAME(48, 4),
+ ANIMCMD_FRAME(64, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D9E88[] =
+{
+ gSpriteAnim_83D9E6C,
+ gSpriteAnim_83D9E74,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D9E90[] =
+{
+ AFFINEANIMCMD_FRAME(0xE0, 0xE0, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D9EA0[] =
+{
+ AFFINEANIMCMD_FRAME(0x118, 0x118, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D9EB0[] =
+{
+ AFFINEANIMCMD_FRAME(0x150, 0x150, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D9EC0[] =
+{
+ AFFINEANIMCMD_FRAME(0x180, 0x180, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D9ED0[] =
+{
+ AFFINEANIMCMD_FRAME(0x1C0, 0x1C0, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D9EE0[] =
+{
+ gSpriteAffineAnim_83D9E90,
+ gSpriteAffineAnim_83D9EA0,
+ gSpriteAffineAnim_83D9EB0,
+ gSpriteAffineAnim_83D9EC0,
+ gSpriteAffineAnim_83D9ED0,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9EF4 =
+{
+ .tileTag = 10043,
+ .paletteTag = 10043,
+ .oam = &gOamData_837DFF4,
+ .anims = gSpriteAnimTable_83D9E88,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D9EE0,
+ .callback = unc_080B06FC,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9F0C =
+{
+ .tileTag = 10141,
+ .paletteTag = 10141,
+ .oam = &gOamData_837DF24,
+ .anims = gSpriteAnimTable_83D9BBC,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D8F10,
+};
diff --git a/src/battle/anim/kiss_fountain.c b/src/battle/anim/kiss_fountain.c
index d3270ee65..8ab3fcded 100644
--- a/src/battle/anim/kiss_fountain.c
+++ b/src/battle/anim/kiss_fountain.c
@@ -8,9 +8,22 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80D1FDC(struct Sprite* sprite);
+
// kiss_fountain (a series of hearts pour out of a target Pokemon.)
// Used in Attract and Sweet Kiss.
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7AC8 =
+{
+ .tileTag = 10216,
+ .paletteTag = 10216,
+ .oam = &gOamData_837DF2C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D1FDC,
+};
+
void sub_80D1FDC(struct Sprite* sprite)
{
if (sprite->data[0] == 0)
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/lunge.c b/src/battle/anim/lunge.c
new file mode 100644
index 000000000..13cabb422
--- /dev/null
+++ b/src/battle/anim/lunge.c
@@ -0,0 +1,339 @@
+#include "global.h"
+#include "rom_8077ABC.h"
+#include "trig.h"
+#include "battle_anim.h"
+#include "sound.h"
+
+extern s16 gBattleAnimArgs[];
+extern u8 gAnimBankAttacker;
+extern u8 gAnimBankTarget;
+
+extern u8 gBankSpriteIds[];
+
+void sub_80CD774(struct Sprite* sprite);
+void sub_80CD9C4(struct Sprite* sprite);
+static void sub_80CD7CC(struct Sprite* sprite);
+static void sub_80CD81C(struct Sprite* sprite);
+static void sub_80CD8A8(struct Sprite* sprite);
+static void sub_80CD8F8(struct Sprite* sprite);
+static void sub_80CD91C(struct Sprite* sprite);
+static void sub_80CD9B8(struct Sprite* sprite);
+static void sub_80CD9D4(struct Sprite* sprite);
+static void sub_80CDB60(u8 taskId);
+static void sub_80CDD20(u8 taskId);
+
+// lunge_1 (makes the pokemon sprite do a "lunge" where it leans back to attack, usually with its head or horn.)
+// Used in Drill Peck, Headbutt, Horn Attack, and Horn Drill.
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6DE4 =
+{
+ .tileTag = 0,
+ .paletteTag = 0,
+ .oam = &gDummyOamData,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CD774,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83D6DFC =
+{
+ .tileTag = 0,
+ .paletteTag = 0,
+ .oam = &gDummyOamData,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CD9C4,
+};
+
+void sub_80CD774(struct Sprite* sprite)
+{
+ sprite->invisible = 1;
+ sprite->data[0] = 0;
+ switch (gBattleAnimArgs[0])
+ {
+ case 0:
+ sprite->callback = sub_80CD7CC;
+ break;
+ case 1:
+ sprite->callback = sub_80CD8A8;
+ break;
+ case 2:
+ sprite->callback = sub_80CD8F8;
+ break;
+ default:
+ sprite->callback = sub_80CD9B8;
+ break;
+ }
+}
+
+static void sub_80CD7CC(struct Sprite* sprite)
+{
+ sprite->data[0] = 6;
+ sprite->data[1] = (GetBattlerSide(gAnimBankAttacker)) ? 2 : -2;
+ sprite->data[2] = 0;
+ sprite->data[3] = gBankSpriteIds[gAnimBankAttacker];
+ StoreSpriteCallbackInData(sprite, sub_80CD81C);
+ sprite->callback = TranslateMonBGUntil;
+}
+
+static void sub_80CD81C(struct Sprite* sprite)
+{
+ if (sprite->data[0] == 0)
+ {
+ sprite->data[3] = gBankSpriteIds[gAnimBankAttacker];
+ sub_8078E70(sprite->data[3], 0);
+ sprite->data[4] = (sprite->data[6] = GetBattlerSide(gAnimBankAttacker)) ? 0x300 : 0xFFFFFD00;
+ sprite->data[5] = 0;
+ }
+
+ sprite->data[5] += sprite->data[4];
+ obj_id_set_rotscale(sprite->data[3], 0x100, 0x100, sprite->data[5]);
+ sub_8078F9C(sprite->data[3]);
+ if (++sprite->data[0] > 3)
+ {
+ sprite->data[0] = 0;
+ sprite->callback = sub_80CD9B8;
+ }
+}
+
+static void sub_80CD8A8(struct Sprite* sprite)
+{
+ sprite->data[0] = 4;
+ sprite->data[1] = (GetBattlerSide(gAnimBankAttacker)) ? -3 : 3;
+ sprite->data[2] = 0;
+ sprite->data[3] = gBankSpriteIds[gAnimBankAttacker];
+ StoreSpriteCallbackInData(sprite, sub_80CD9B8);
+ sprite->callback = TranslateMonBGUntil;
+}
+
+static void sub_80CD8F8(struct Sprite* sprite)
+{
+ if (++sprite->data[0] > 8)
+ {
+ sprite->data[0] = 0;
+ sprite->callback = sub_80CD91C;
+ }
+}
+
+static void sub_80CD91C(struct Sprite* sprite)
+{
+ if (sprite->data[0] == 0)
+ {
+ sprite->data[3] = gBankSpriteIds[gAnimBankAttacker];
+ sprite->data[6] = GetBattlerSide(gAnimBankAttacker);
+ if (GetBattlerSide(gAnimBankAttacker))
+ {
+ sprite->data[4] = 0xFC00;
+ sprite->data[5] = 0xC00;
+ }
+ else
+ {
+ sprite->data[4] = 0x400;
+ sprite->data[5] = 0xF400;
+ }
+ }
+
+ sprite->data[5] += sprite->data[4];
+ obj_id_set_rotscale(sprite->data[3], 0x100, 0x100, sprite->data[5]);
+ sub_8078F9C(sprite->data[3]);
+ if (++sprite->data[0] > 2)
+ {
+ sub_8078F40(sprite->data[3]);
+ sprite->callback = sub_80CD9B8;
+ }
+}
+
+static void sub_80CD9B8(struct Sprite* sprite)
+{
+ DestroyAnimSprite(sprite);
+}
+
+void sub_80CD9C4(struct Sprite* sprite)
+{
+ sprite->data[0] = 0;
+ sprite->callback = sub_80CD9D4;
+}
+
+static void sub_80CD9D4(struct Sprite* sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ sprite->data[1] = 0;
+ sprite->data[2] = gBankSpriteIds[gAnimBankAttacker];
+ sprite->data[3] = GetBattlerSide(gAnimBankAttacker);
+ sprite->data[4] = (sprite->data[3] != 0) ? 0x200 : -0x200;
+ sprite->data[5] = 0;
+ sub_8078E70(sprite->data[2], 0);
+ sprite->data[0]++;
+ case 1:
+ sprite->data[5] += sprite->data[4];
+ obj_id_set_rotscale(sprite->data[2], 0x100, 0x100, sprite->data[5]);
+ sub_8078F9C(sprite->data[2]);
+ if (++sprite->data[1] > 3)
+ {
+ sprite->data[1] = 0;
+ sprite->data[4] *= -1;
+ sprite->data[0]++;
+ }
+ break;
+ case 2:
+ sprite->data[5] += sprite->data[4];
+ obj_id_set_rotscale(sprite->data[2], 0x100, 0x100, sprite->data[5]);
+ sub_8078F9C(sprite->data[2]);
+ if (++sprite->data[1] > 3)
+ {
+ sub_8078F40(sprite->data[2]);
+ DestroyAnimSprite(sprite);
+ }
+ break;
+ }
+}
+
+void sub_80CDAC8(u8 taskId)
+{
+ u8 a;
+
+ gTasks[taskId].data[0] = gBankSpriteIds[gAnimBankAttacker];
+ a = GetBattlerSide(gAnimBankAttacker);
+ gTasks[taskId].data[1] = a;
+ gTasks[taskId].data[2] = 0;
+ switch (gBattleAnimArgs[0])
+ {
+ default:
+ DestroyAnimVisualTask(taskId);
+ break;
+ case 0:
+ gTasks[taskId].data[2] = 0;
+ gTasks[taskId].data[3] = 8;
+ gTasks[taskId].data[4] = 0;
+ gTasks[taskId].data[5] = 3;
+ if (a == 0)
+ gTasks[taskId].data[5] *= -1;
+
+ gTasks[taskId].func = sub_80CDB60;
+ break;
+ case 1:
+ gTasks[taskId].data[3] = 8;
+ gTasks[taskId].data[4] = 0x600;
+ gTasks[taskId].data[5] = 0xC0;
+ if (a == 0)
+ {
+ gTasks[taskId].data[4] = -gTasks[taskId].data[4];
+ gTasks[taskId].data[5] = -gTasks[taskId].data[5];
+ }
+
+ gTasks[taskId].func = sub_80CDD20;
+ break;
+ }
+}
+
+void sub_80CDB60(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+ switch (task->data[2])
+ {
+ case 0:
+ if (task->data[3])
+ {
+ task->data[4] += task->data[5];
+ gSprites[task->data[0]].pos2.x = task->data[4];
+ task->data[3]--;
+ }
+ else
+ {
+ task->data[3] = 8;
+ task->data[4] = 0;
+ task->data[5] = (task->data[1] == 0) ? -0xC0 : 0xC0;
+ sub_8078E70(task->data[0], 0);
+ task->data[2]++;
+ }
+ break;
+ case 1:
+ if (task->data[3])
+ {
+ task->data[4] += task->data[5];
+ obj_id_set_rotscale(task->data[0], 0x100, 0x100, task->data[4]);
+ sub_8078F9C(task->data[0]);
+ task->data[3]--;
+ }
+ else
+ {
+ task->data[3] = 8;
+ task->data[4] = gSprites[task->data[0]].pos2.x;
+ task->data[5] = (task->data[1] == 0) ? 0x2 : -0x2;
+ task->data[6] = 1;
+ task->data[2]++;
+ }
+ break;
+ case 2:
+ if (task->data[3])
+ {
+ if (task->data[6])
+ {
+ task->data[6]--;
+ }
+ else
+ {
+ if (task->data[3] & 1)
+ gSprites[task->data[0]].pos2.x = task->data[4] + task->data[5];
+ else
+ gSprites[task->data[0]].pos2.x = task->data[4] - task->data[5];
+
+ task->data[6] = 1;
+ task->data[3]--;
+ }
+ }
+ else
+ {
+ gSprites[task->data[0]].pos2.x = task->data[4];
+ task->data[3] = 12;
+ task->data[2]++;
+ }
+ break;
+ case 3:
+ if (task->data[3])
+ {
+ task->data[3]--;
+ }
+ else
+ {
+ task->data[3] = 3;
+ task->data[4] = gSprites[task->data[0]].pos2.x;
+ task->data[5] = (task->data[1] == 0) ? 8 : -8;
+ task->data[2]++;
+ }
+ break;
+ case 4:
+ if (task->data[3])
+ {
+ task->data[4] += task->data[5];
+ gSprites[task->data[0]].pos2.x = task->data[4];
+ task->data[3]--;
+ }
+ else
+ {
+ DestroyAnimVisualTask(taskId);
+ }
+ break;
+ }
+}
+
+void sub_80CDD20(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ if (task->data[3])
+ {
+ task->data[4] -= task->data[5];
+ obj_id_set_rotscale(task->data[0], 0x100, 0x100, task->data[4]);
+ sub_8078F9C(task->data[0]);
+ task->data[3]--;
+ }
+ else
+ {
+ sub_8078F40(task->data[0]);
+ DestroyAnimVisualTask(taskId);
+ }
+}
diff --git a/src/battle/anim/lunge_1.c b/src/battle/anim/lunge_1.c
deleted file mode 100644
index 949fb89f4..000000000
--- a/src/battle/anim/lunge_1.c
+++ /dev/null
@@ -1,124 +0,0 @@
-#include "global.h"
-#include "rom_8077ABC.h"
-#include "trig.h"
-#include "battle_anim.h"
-#include "sound.h"
-
-extern s16 gBattleAnimArgs[];
-extern u8 gAnimBankAttacker;
-extern u8 gAnimBankTarget;
-
-extern u8 gBankSpriteIds[];
-
-static void sub_80CD7CC(struct Sprite* sprite);
-static void sub_80CD81C(struct Sprite* sprite);
-static void sub_80CD8A8(struct Sprite* sprite);
-static void sub_80CD8F8(struct Sprite* sprite);
-static void sub_80CD91C(struct Sprite* sprite);
-static void sub_80CD9B8(struct Sprite* sprite);
-
-// lunge_1 (makes the pokemon sprite do a "lunge" where it leans back to attack, usually with its head or horn.)
-// Used in Drill Peck, Headbutt, Horn Attack, and Horn Drill.
-
-void sub_80CD774(struct Sprite* sprite)
-{
- sprite->invisible = 1;
- sprite->data[0] = 0;
- switch (gBattleAnimArgs[0])
- {
- case 0:
- sprite->callback = sub_80CD7CC;
- break;
- case 1:
- sprite->callback = sub_80CD8A8;
- break;
- case 2:
- sprite->callback = sub_80CD8F8;
- break;
- default:
- sprite->callback = sub_80CD9B8;
- break;
- }
-}
-
-void sub_80CD7CC(struct Sprite* sprite)
-{
- sprite->data[0] = 6;
- sprite->data[1] = (GetBattlerSide(gAnimBankAttacker)) ? 2 : -2;
- sprite->data[2] = 0;
- sprite->data[3] = gBankSpriteIds[gAnimBankAttacker];
- StoreSpriteCallbackInData(sprite, sub_80CD81C);
- sprite->callback = TranslateMonBGUntil;
-}
-
-void sub_80CD81C(struct Sprite* sprite)
-{
- if (sprite->data[0] == 0)
- {
- sprite->data[3] = gBankSpriteIds[gAnimBankAttacker];
- sub_8078E70(sprite->data[3], 0);
- sprite->data[4] = (sprite->data[6] = GetBattlerSide(gAnimBankAttacker)) ? 0x300 : 0xFFFFFD00;
- sprite->data[5] = 0;
- }
-
- sprite->data[5] += sprite->data[4];
- obj_id_set_rotscale(sprite->data[3], 0x100, 0x100, sprite->data[5]);
- sub_8078F9C(sprite->data[3]);
- if (++sprite->data[0] > 3)
- {
- sprite->data[0] = 0;
- sprite->callback = sub_80CD9B8;
- }
-}
-
-void sub_80CD8A8(struct Sprite* sprite)
-{
- sprite->data[0] = 4;
- sprite->data[1] = (GetBattlerSide(gAnimBankAttacker)) ? -3 : 3;
- sprite->data[2] = 0;
- sprite->data[3] = gBankSpriteIds[gAnimBankAttacker];
- StoreSpriteCallbackInData(sprite, sub_80CD9B8);
- sprite->callback = TranslateMonBGUntil;
-}
-
-void sub_80CD8F8(struct Sprite* sprite)
-{
- if (++sprite->data[0] > 8)
- {
- sprite->data[0] = 0;
- sprite->callback = sub_80CD91C;
- }
-}
-
-void sub_80CD91C(struct Sprite* sprite)
-{
- if (sprite->data[0] == 0)
- {
- sprite->data[3] = gBankSpriteIds[gAnimBankAttacker];
- sprite->data[6] = GetBattlerSide(gAnimBankAttacker);
- if (GetBattlerSide(gAnimBankAttacker))
- {
- sprite->data[4] = 0xFC00;
- sprite->data[5] = 0xC00;
- }
- else
- {
- sprite->data[4] = 0x400;
- sprite->data[5] = 0xF400;
- }
- }
-
- sprite->data[5] += sprite->data[4];
- obj_id_set_rotscale(sprite->data[3], 0x100, 0x100, sprite->data[5]);
- sub_8078F9C(sprite->data[3]);
- if (++sprite->data[0] > 2)
- {
- sub_8078F40(sprite->data[3]);
- sprite->callback = sub_80CD9B8;
- }
-}
-
-void sub_80CD9B8(struct Sprite* sprite)
-{
- DestroyAnimSprite(sprite);
-}
diff --git a/src/battle/anim/lunge_2.c b/src/battle/anim/lunge_2.c
deleted file mode 100644
index c0100922c..000000000
--- a/src/battle/anim/lunge_2.c
+++ /dev/null
@@ -1,163 +0,0 @@
-#include "global.h"
-#include "rom_8077ABC.h"
-#include "trig.h"
-#include "battle_anim.h"
-#include "sound.h"
-
-extern s16 gBattleAnimArgs[];
-extern u8 gAnimBankAttacker;
-extern u8 gAnimBankTarget;
-
-extern u8 gBankSpriteIds[];
-
-static void sub_80CDB60(u8 taskId);
-static void sub_80CDD20(u8 taskId);
-
-// lunge_2
-// Drill Peck
-
-void sub_80CDAC8(u8 taskId)
-{
- u8 a;
-
- gTasks[taskId].data[0] = gBankSpriteIds[gAnimBankAttacker];
- a = GetBattlerSide(gAnimBankAttacker);
- gTasks[taskId].data[1] = a;
- gTasks[taskId].data[2] = 0;
- switch (gBattleAnimArgs[0])
- {
- default:
- DestroyAnimVisualTask(taskId);
- break;
- case 0:
- gTasks[taskId].data[2] = 0;
- gTasks[taskId].data[3] = 8;
- gTasks[taskId].data[4] = 0;
- gTasks[taskId].data[5] = 3;
- if (a == 0)
- gTasks[taskId].data[5] *= -1;
-
- gTasks[taskId].func = sub_80CDB60;
- break;
- case 1:
- gTasks[taskId].data[3] = 8;
- gTasks[taskId].data[4] = 0x600;
- gTasks[taskId].data[5] = 0xC0;
- if (a == 0)
- {
- gTasks[taskId].data[4] = -gTasks[taskId].data[4];
- gTasks[taskId].data[5] = -gTasks[taskId].data[5];
- }
-
- gTasks[taskId].func = sub_80CDD20;
- break;
- }
-}
-
-void sub_80CDB60(u8 taskId)
-{
- struct Task *task = &gTasks[taskId];
- switch (task->data[2])
- {
- case 0:
- if (task->data[3])
- {
- task->data[4] += task->data[5];
- gSprites[task->data[0]].pos2.x = task->data[4];
- task->data[3]--;
- }
- else
- {
- task->data[3] = 8;
- task->data[4] = 0;
- task->data[5] = (task->data[1] == 0) ? -0xC0 : 0xC0;
- sub_8078E70(task->data[0], 0);
- task->data[2]++;
- }
- break;
- case 1:
- if (task->data[3])
- {
- task->data[4] += task->data[5];
- obj_id_set_rotscale(task->data[0], 0x100, 0x100, task->data[4]);
- sub_8078F9C(task->data[0]);
- task->data[3]--;
- }
- else
- {
- task->data[3] = 8;
- task->data[4] = gSprites[task->data[0]].pos2.x;
- task->data[5] = (task->data[1] == 0) ? 0x2 : -0x2;
- task->data[6] = 1;
- task->data[2]++;
- }
- break;
- case 2:
- if (task->data[3])
- {
- if (task->data[6])
- {
- task->data[6]--;
- }
- else
- {
- if (task->data[3] & 1)
- gSprites[task->data[0]].pos2.x = task->data[4] + task->data[5];
- else
- gSprites[task->data[0]].pos2.x = task->data[4] - task->data[5];
-
- task->data[6] = 1;
- task->data[3]--;
- }
- }
- else
- {
- gSprites[task->data[0]].pos2.x = task->data[4];
- task->data[3] = 12;
- task->data[2]++;
- }
- break;
- case 3:
- if (task->data[3])
- {
- task->data[3]--;
- }
- else
- {
- task->data[3] = 3;
- task->data[4] = gSprites[task->data[0]].pos2.x;
- task->data[5] = (task->data[1] == 0) ? 8 : -8;
- task->data[2]++;
- }
- break;
- case 4:
- if (task->data[3])
- {
- task->data[4] += task->data[5];
- gSprites[task->data[0]].pos2.x = task->data[4];
- task->data[3]--;
- }
- else
- {
- DestroyAnimVisualTask(taskId);
- }
- break;
- }
-}
-
-void sub_80CDD20(u8 taskId)
-{
- struct Task* task = &gTasks[taskId];
- if (task->data[3])
- {
- task->data[4] -= task->data[5];
- obj_id_set_rotscale(task->data[0], 0x100, 0x100, task->data[4]);
- sub_8078F9C(task->data[0]);
- task->data[3]--;
- }
- else
- {
- sub_8078F40(task->data[0]);
- DestroyAnimVisualTask(taskId);
- }
-}
diff --git a/src/battle/anim/money.c b/src/battle/anim/money.c
index 1407e8cd7..3960b5e1a 100644
--- a/src/battle/anim/money.c
+++ b/src/battle/anim/money.c
@@ -8,11 +8,57 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CFE9C(struct Sprite* sprite);
+void sub_80CFF50(struct Sprite* sprite);
static void sub_80CFF68(struct Sprite* sprite);
// money
// Used by Pay Day.
+const union AnimCmd gSpriteAnim_83D75C4[] =
+{
+ ANIMCMD_FRAME(8, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D75CC[] =
+{
+ gSpriteAnim_83D75C4,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D75D0[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 10, 1),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D75E0[] =
+{
+ gSpriteAffineAnim_83D75D0,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D75E4 =
+{
+ .tileTag = 10100,
+ .paletteTag = 10100,
+ .oam = &gOamData_837DF8C,
+ .anims = gSpriteAnimTable_83D75CC,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CFE9C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D75FC =
+{
+ .tileTag = 10100,
+ .paletteTag = 10100,
+ .oam = &gOamData_837DF8C,
+ .anims = gSpriteAnimTable_83D75CC,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D75E0,
+ .callback = sub_80CFF50,
+};
+
void sub_80CFE9C(struct Sprite* sprite)
{
s16 r6;
@@ -43,7 +89,7 @@ void sub_80CFF50(struct Sprite* sprite)
sprite->callback = sub_80CFF68;
}
-void sub_80CFF68(struct Sprite* sprite)
+static void sub_80CFF68(struct Sprite* sprite)
{
sprite->data[0] += 0x80;
sprite->pos2.x = sprite->data[0] >> 8;
diff --git a/src/battle/anim/moon.c b/src/battle/anim/moon.c
index c532e8057..6e889008e 100644
--- a/src/battle/anim/moon.c
+++ b/src/battle/anim/moon.c
@@ -8,11 +8,23 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CE30C(struct Sprite* sprite);
static void sub_80CE354(struct Sprite* sprite);
// moon (shows a moon image.)
// Used in Moonlight.
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6FC8 =
+{
+ .tileTag = 10194,
+ .paletteTag = 10194,
+ .oam = &gOamData_837E05C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CE30C,
+};
+
void sub_80CE30C(struct Sprite* sprite)
{
if (IsContest())
@@ -32,7 +44,7 @@ void sub_80CE30C(struct Sprite* sprite)
sprite->callback = sub_80CE354;
}
-void sub_80CE354(struct Sprite* sprite)
+static void sub_80CE354(struct Sprite* sprite)
{
if (sprite->data[0])
DestroyAnimSprite(sprite);
diff --git a/src/battle/anim/musical.c b/src/battle/anim/musical.c
new file mode 100644
index 000000000..17836ace7
--- /dev/null
+++ b/src/battle/anim/musical.c
@@ -0,0 +1,393 @@
+#include "global.h"
+#include "rom_8077ABC.h"
+#include "trig.h"
+#include "battle_anim.h"
+#include "sound.h"
+#include "palette.h"
+
+extern s16 gBattleAnimArgs[];
+extern u8 gAnimBankAttacker;
+extern u8 gAnimBankTarget;
+
+void sub_80CEB0C(struct Sprite* sprite);
+void sub_80CECE8(struct Sprite* sprite);
+void sub_80CEDF0(struct Sprite* sprite);
+void sub_80CEE60(struct Sprite* sprite);
+static void sub_80CEBC4(s16 a, s16 b, s16* c, s16* d, s8 e);
+static void sub_80CEC1C(struct Sprite* sprite);
+static void sub_80CED78(struct Sprite* sprite);
+static void sub_80CEEE8(struct Sprite* sprite);
+
+const union AnimCmd gSpriteAnim_83D7098[] =
+{
+ ANIMCMD_FRAME(0, 10),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D70A0[] =
+{
+ ANIMCMD_FRAME(4, 10),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D70A8[] =
+{
+ ANIMCMD_FRAME(8, 41),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D70B0[] =
+{
+ ANIMCMD_FRAME(12, 10),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D70B8[] =
+{
+ ANIMCMD_FRAME(16, 10),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D70C0[] =
+{
+ ANIMCMD_FRAME(20, 10),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D70C8[] =
+{
+ ANIMCMD_FRAME(0, 10, .vFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D70D0[] =
+{
+ ANIMCMD_FRAME(4, 10, .vFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D70D8[] =
+{
+ gSpriteAnim_83D7098,
+ gSpriteAnim_83D70A0,
+ gSpriteAnim_83D70A8,
+ gSpriteAnim_83D70B0,
+ gSpriteAnim_83D70B8,
+ gSpriteAnim_83D70C0,
+ gSpriteAnim_83D70C8,
+ gSpriteAnim_83D70D0,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D70F8[] =
+{
+ AFFINEANIMCMD_FRAME(0xC, 0xC, 0, 16),
+ AFFINEANIMCMD_FRAME(0xFFF4, 0xFFF4, 0, 16),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D7110[] =
+{
+ gSpriteAffineAnim_83D70F8,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7114 =
+{
+ .tileTag = 10072,
+ .paletteTag = 10072,
+ .oam = &gOamData_837DFEC,
+ .anims = gSpriteAnimTable_83D70D8,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D7110,
+ .callback = sub_80CEB0C,
+};
+
+const u16 gUnknown_083D712C[][6] =
+{
+ {10072, RGB(31, 31, 31), RGB(31, 26, 28), RGB(31, 22, 26), RGB(31, 17, 24), RGB(31, 13, 22)},
+ {10097, RGB(31, 31, 31), RGB(25, 31, 26), RGB(20, 31, 21), RGB(15, 31, 16), RGB(10, 31, 12)},
+ {10185, RGB(31, 31, 31), RGB(31, 31, 24), RGB(31, 31, 17), RGB(31, 31, 10), RGB(31, 31, 3)},
+ {10175, RGB(31, 31, 31), RGB(26, 28, 31), RGB(21, 26, 31), RGB(16, 24, 31), RGB(12, 22, 31)},
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D715C =
+{
+ .tileTag = 10072,
+ .paletteTag = 10072,
+ .oam = &gOamData_837DFEC,
+ .anims = gSpriteAnimTable_83D70D8,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D7110,
+ .callback = sub_80CECE8,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7174 =
+{
+ .tileTag = 10193,
+ .paletteTag = 10193,
+ .oam = &gOamData_837DF34,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CEDF0,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D718C[] =
+{
+ AFFINEANIMCMD_FRAME(0xA0, 0xA0, 0, 0),
+ AFFINEANIMCMD_FRAME(0x4, 0x4, 0, 1),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D71A4[] =
+{
+ gSpriteAffineAnim_83D718C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D71A8 =
+{
+ .tileTag = 10072,
+ .paletteTag = 10072,
+ .oam = &gOamData_837DFEC,
+ .anims = gSpriteAnimTable_83D70D8,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D71A4,
+ .callback = sub_80CEE60,
+};
+
+// musical (music notes, drum)
+// Used by Grasswhistle, Belly Drum, and Sing.
+
+// rainbow effect for musical notes
+void sub_80CEA20(u8 taskId)
+{
+ u16 i;
+ u16 j;
+ u16 index;
+
+ index = IndexOfSpritePaletteTag(gUnknown_083D712C[0][0]);
+ if (index != 0xFF)
+ {
+ index = (index << 4) + 0x100;
+ for (i = 1; i < 6; i++)
+ {
+ gPlttBufferFaded[index + i] = gUnknown_083D712C[0][i];
+ }
+ }
+
+ for (j = 1; j < 4; j++)
+ {
+ index = AllocSpritePalette(gUnknown_083D712C[j][0]);
+ if (index != 0xFF)
+ {
+ index = (index << 4) + 0x100;
+ for (i = 1; i < 6; i++)
+ {
+ gPlttBufferFaded[index + i] = gUnknown_083D712C[j][i];
+ }
+ }
+ }
+ DestroyAnimVisualTask(taskId);
+}
+
+// clears the rainbow effect for musical notes.
+void sub_80CEAD8(u8 taskId)
+{
+ u16 i;
+ for (i = 1; i < 4; i++)
+ {
+ FreeSpritePaletteByTag(gUnknown_083D712C[i][0]);
+ }
+
+ DestroyAnimVisualTask(taskId);
+}
+
+void sub_80CEB0C(struct Sprite* sprite)
+{
+ u8 index;
+ u8 a;
+ u8 b;
+ sub_8078650(sprite);
+ StartSpriteAnim(sprite, gBattleAnimArgs[0]);
+ if ((index = IndexOfSpritePaletteTag(gUnknown_083D712C[gBattleAnimArgs[1]][0])) != 0xFF)
+ sprite->oam.paletteNum = index;
+
+ sprite->data[1] = gBattleAnimArgs[1];
+ sprite->data[2] = 0;
+ sprite->data[3] = gBattleAnimArgs[2];
+ if (IsContest())
+ {
+ a = 0x30;
+ b = 0x28;
+ }
+ else
+ {
+ a = GetBattlerSpriteCoord(gAnimBankTarget, 2);
+ b = GetBattlerSpriteCoord(gAnimBankTarget, 3);
+ }
+
+ sprite->data[4] = sprite->pos1.x << 4;
+ sprite->data[5] = sprite->pos1.y << 4;
+ sub_80CEBC4(a - sprite->pos1.x, b - sprite->pos1.y, &sprite->data[6], &sprite->data[7], 0x28);
+ sprite->callback = sub_80CEC1C;
+}
+
+static void sub_80CEBC4(s16 a, s16 b, s16* c, s16* d, s8 e)
+{
+ int f;
+ int g;
+ if (a < 0)
+ e = -e;
+
+ f = a << 8;
+ g = f / e;
+ if (g == 0)
+ g = 1;
+
+ *c = f / g;
+ *d = (b << 8) / g;
+}
+
+static void sub_80CEC1C(struct Sprite* sprite)
+{
+ int b;
+ s16 a;
+ int c;
+ u8 index;
+ sprite->data[0]++;
+ b = sprite->data[0] * 5 - ((sprite->data[0] * 5 / 256) << 8);
+ 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;
+ sprite->pos2.y = Sin(b, 15);
+ a = (u16)sprite->pos1.y;
+ c = (u16)sprite->pos1.x;
+
+ if ((u32)((c + 16) << 16) > (0x110) << 16 || a < -16 || a > 0x80)
+ {
+ move_anim_8074EE0(sprite);
+ }
+ else
+ {
+ if (sprite->data[3] && ++sprite->data[2] > sprite->data[3])
+ {
+ sprite->data[2] = 0;
+ if (++sprite->data[1] > 3)
+ sprite->data[1] = 0;
+
+ index = IndexOfSpritePaletteTag(gUnknown_083D712C[sprite->data[1]][0]);
+ if (index != 0xFF)
+ sprite->oam.paletteNum = index;
+ }
+ }
+}
+
+// note_scatter
+// Used by Teeter Dance.
+
+void sub_80CECE8(struct Sprite* sprite)
+{
+ int a;
+ if (GetBattlerSide(gAnimBankAttacker) == 1)
+ {
+ a = gBattleAnimArgs[1];
+ (u16)gBattleAnimArgs[1] = -a;
+ }
+
+ sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2) + gBattleAnimArgs[1];
+ sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3) + gBattleAnimArgs[2];
+ StartSpriteAnim(sprite, gBattleAnimArgs[0]);
+ sprite->data[2] = 0;
+ sprite->data[3] = 0;
+ sprite->data[4] = sprite->pos1.x << 4;
+ sprite->data[5] = sprite->pos1.y << 4;
+ sprite->data[6] = (gBattleAnimArgs[1] << 4) / 5;
+ sprite->data[7] = (gBattleAnimArgs[2] << 7) / 5;
+ sprite->callback = sub_80CED78;
+}
+
+static void sub_80CED78(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 (sprite->data[0] > 5 && sprite->data[3] == 0)
+ {
+ sprite->data[2] = (sprite->data[2] + 16) & 0xFF;
+ sprite->pos2.x = Cos(sprite->data[2], 18);
+ sprite->pos2.y = Sin(sprite->data[2], 18);
+ if (sprite->data[2] == 0)
+ sprite->data[3] = 1;
+ }
+
+ if (++sprite->data[0] == 0x30)
+ move_anim_8074EE0(sprite);
+}
+
+// drum (using hands to slap the Pokemon's belly in a rhythm.)
+// Used in Belly Drum.
+
+void sub_80CEDF0(struct Sprite* sprite)
+{
+ s16 a;
+ if (gBattleAnimArgs[0] == 1)
+ {
+ sprite->oam.matrixNum = 8;
+ a = 16;
+ }
+ else
+ {
+ a = -16;
+ }
+
+ sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2) + a;
+ sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3) + 8;
+ sprite->data[0] = 8;
+ sprite->callback = WaitAnimForDuration;
+ StoreSpriteCallbackInData(sprite, DestroyAnimSprite);
+}
+
+// note_scatter_2 (slower scatter of notes.)
+// Used in Belly Drum.
+
+void sub_80CEE60(struct Sprite* sprite)
+{
+ s16 a;
+ u8 index;
+ sub_8078650(sprite);
+ sprite->pos1.y += 8;
+ StartSpriteAnim(sprite, gBattleAnimArgs[1]);
+ index = IndexOfSpritePaletteTag(gUnknown_083D712C[gBattleAnimArgs[2]][0]);
+ if (index != 0xFF)
+ sprite->oam.paletteNum = index;
+
+ a = (gBattleAnimArgs[0] == 0) ? 0xFFE0 : 0x20;
+ sprite->data[0] = 40;
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[2] = a + sprite->data[1];
+ sprite->data[3] = sprite->pos1.y;
+ sprite->data[4] = sprite->data[3] - 40;
+ InitAnimSpriteTranslationDeltas(sprite);
+ sprite->data[5] = gBattleAnimArgs[3];
+ sprite->callback = sub_80CEEE8;
+}
+
+static void sub_80CEEE8(struct Sprite* sprite)
+{
+ if (TranslateAnimSpriteByDeltas(sprite) == 0)
+ {
+ s16 a;
+ a = Sin(sprite->data[5], 8);
+ if (sprite->pos2.x < 0)
+ a = -a;
+
+ sprite->pos2.x += a;
+ sprite->pos2.y += Sin(sprite->data[5], 4);
+ sprite->data[5] = (sprite->data[5] + 8) & 0xFF;
+ }
+ else
+ {
+ DestroyAnimSprite(sprite);
+ }
+}
diff --git a/src/battle/anim/noise.c b/src/battle/anim/noise.c
index 0b6498318..6a6f6c10a 100644
--- a/src/battle/anim/noise.c
+++ b/src/battle/anim/noise.c
@@ -6,11 +6,23 @@ extern s16 gBattleAnimArgs[8];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80D2D68(struct Sprite* sprite);
static void sub_80D2E30(struct Sprite *);
// noise (moving music note)
// Used in Uproar.
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7CC8 =
+{
+ .tileTag = 10225,
+ .paletteTag = 10225,
+ .oam = &gOamData_837DF34,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D2D68,
+};
+
void sub_80D2D68(struct Sprite* sprite)
{
int var1;
diff --git a/src/battle/anim/normal.c b/src/battle/anim/normal.c
new file mode 100755
index 000000000..8303e7c68
--- /dev/null
+++ b/src/battle/anim/normal.c
@@ -0,0 +1,240 @@
+#include "global.h"
+#include "rom_8077ABC.h"
+#include "battle_anim.h"
+
+extern s16 gBattleAnimArgs[];
+extern u8 gAnimBankAttacker;
+extern u8 gAnimBankTarget;
+
+void sub_80E1CB4(struct Sprite *sprite);
+void sub_80E1D84(struct Sprite *sprite);
+void sub_80E1E2C(struct Sprite *sprite);
+void sub_80E1F3C(struct Sprite *sprite);
+void sub_80E24B8(struct Sprite *sprite);
+void sub_80E27A0(struct Sprite *sprite);
+void sub_80E2838(struct Sprite *sprite);
+void sub_80E27A0(struct Sprite *sprite);
+void sub_80E2870(struct Sprite *sprite);
+void sub_80E2908(struct Sprite *sprite);
+void sub_80E2978(struct Sprite *sprite);
+void sub_80E29C0(struct Sprite *sprite);
+void sub_80E27E8(struct Sprite *sprite);
+
+const union AnimCmd gSpriteAnim_83DB37C[] =
+{
+ ANIMCMD_FRAME(0, 8),
+ ANIMCMD_FRAME(4, 8),
+ ANIMCMD_FRAME(0, 8, .hFlip = TRUE),
+ ANIMCMD_FRAME(8, 8),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd gSpriteAnim_83DB390[] =
+{
+ ANIMCMD_FRAME(0, 8, .hFlip = TRUE),
+ ANIMCMD_FRAME(4, 8),
+ ANIMCMD_FRAME(0, 8),
+ ANIMCMD_FRAME(8, 8),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_83DB3A4[] =
+{
+ gSpriteAnim_83DB37C,
+ gSpriteAnim_83DB390,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB3AC =
+{
+ .tileTag = 10073,
+ .paletteTag = 10073,
+ .oam = &gOamData_837DF2C,
+ .anims = gSpriteAnimTable_83DB3A4,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80E1CB4,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB3C4 =
+{
+ .tileTag = 0,
+ .paletteTag = 0,
+ .oam = &gDummyOamData,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80E1D84,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB3DC =
+{
+ .tileTag = 0,
+ .paletteTag = 0,
+ .oam = &gDummyOamData,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80E1E2C,
+};
+
+const union AnimCmd gSpriteAnim_83DB3F4[] =
+{
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_FRAME(16, 3),
+ ANIMCMD_FRAME(32, 3),
+ ANIMCMD_FRAME(48, 3),
+ ANIMCMD_FRAME(64, 3),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_83DB40C[] =
+{
+ gSpriteAnim_83DB3F4,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83DB410 =
+{
+ .tileTag = 10071,
+ .paletteTag = 10071,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83DB40C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80E1F3C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB428 =
+{
+ .tileTag = 0,
+ .paletteTag = 0,
+ .oam = &gDummyOamData,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80E24B8,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DB440[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DB450[] =
+{
+ AFFINEANIMCMD_FRAME(0xD8, 0xD8, 0, 0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DB468[] =
+{
+ AFFINEANIMCMD_FRAME(0xB0, 0xB0, 0, 0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DB480[] =
+{
+ AFFINEANIMCMD_FRAME(0x80, 0x80, 0, 0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DB498[] =
+{
+ gSpriteAffineAnim_83DB440,
+ gSpriteAffineAnim_83DB450,
+ gSpriteAffineAnim_83DB468,
+ gSpriteAffineAnim_83DB480,
+};
+
+const struct SpriteTemplate gBasicHitSplatSpriteTemplate =
+{
+ .tileTag = 10135,
+ .paletteTag = 10135,
+ .oam = &gOamData_837E0B4,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DB498,
+ .callback = sub_80E27A0,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB4C0 =
+{
+ .tileTag = 10135,
+ .paletteTag = 10135,
+ .oam = &gOamData_837E0B4,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DB498,
+ .callback = sub_80E2838,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB4D8 =
+{
+ .tileTag = 10148,
+ .paletteTag = 10148,
+ .oam = &gOamData_837E0B4,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DB498,
+ .callback = sub_80E27A0,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB4F0 =
+{
+ .tileTag = 10135,
+ .paletteTag = 10135,
+ .oam = &gOamData_837E0B4,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DB498,
+ .callback = sub_80E2870,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB508 =
+{
+ .tileTag = 10135,
+ .paletteTag = 10135,
+ .oam = &gOamData_837E0B4,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DB498,
+ .callback = sub_80E2908,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB520 =
+{
+ .tileTag = 10285,
+ .paletteTag = 10285,
+ .oam = &gOamData_837E054,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80E2978,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB538 =
+{
+ .tileTag = 10135,
+ .paletteTag = 10135,
+ .oam = &gOamData_837DF94,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DB498,
+ .callback = sub_80E29C0,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB550 =
+{
+ .tileTag = 10135,
+ .paletteTag = 10135,
+ .oam = &gOamData_837E0B4,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DB498,
+ .callback = sub_80E27E8,
+};
+
+const u16 gUnknown_083DB568 = RGB(31, 31, 31);
diff --git a/src/battle/anim/note_rain.c b/src/battle/anim/note_rain.c
index 4e12c7e1a..26ae96c3a 100644
--- a/src/battle/anim/note_rain.c
+++ b/src/battle/anim/note_rain.c
@@ -8,30 +8,5 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
-extern u16 gUnknown_083D7A5C[5];
-
// note_rain (notes rain from a source point, usually a bell.)
// Used in Heal Bell.
-
-void sub_80D1BA8(struct Sprite* sprite, u8 a, u8 b)
-{
- u8 tile;
- tile = (b & 1);
- tile = ((-tile | tile) >> 31) & 32;
- sprite->oam.tileNum += tile + (a << 2);
- sprite->oam.paletteNum = IndexOfSpritePaletteTag(gUnknown_083D7A5C[b >> 1]);
-}
-
-void sub_80D1C08(struct Sprite* sprite)
-{
- InitAnimSpritePos(sprite, 0);
- if (GetBattlerSide(gAnimBankAttacker) != 0)
- gBattleAnimArgs[2] = -gBattleAnimArgs[2];
-
- sprite->data[0] = gBattleAnimArgs[4];
- sprite->data[2] = GetBattlerSpriteCoord(gAnimBankAttacker, 0) + gBattleAnimArgs[2];
- sprite->data[4] = GetBattlerSpriteCoord(gAnimBankAttacker, 1) + gBattleAnimArgs[3];
- sprite->callback = StartTranslateAnimSpriteByDeltas;
- StoreSpriteCallbackInData(sprite, DestroyAnimSprite);
- sub_80D1BA8(sprite, gBattleAnimArgs[5], gBattleAnimArgs[6]);
-}
diff --git a/src/battle/anim/note_scatter.c b/src/battle/anim/note_scatter.c
deleted file mode 100644
index 53afa7d78..000000000
--- a/src/battle/anim/note_scatter.c
+++ /dev/null
@@ -1,54 +0,0 @@
-#include "global.h"
-#include "rom_8077ABC.h"
-#include "trig.h"
-#include "battle_anim.h"
-#include "sound.h"
-
-extern s16 gBattleAnimArgs[];
-extern u8 gAnimBankAttacker;
-extern u8 gAnimBankTarget;
-
-static void sub_80CED78(struct Sprite* sprite);
-
-// note_scatter
-// Used by Teeter Dance.
-
-void sub_80CECE8(struct Sprite* sprite)
-{
- int a;
- if (GetBattlerSide(gAnimBankAttacker) == 1)
- {
- a = gBattleAnimArgs[1];
- (u16)gBattleAnimArgs[1] = -a;
- }
-
- sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2) + gBattleAnimArgs[1];
- sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3) + gBattleAnimArgs[2];
- StartSpriteAnim(sprite, gBattleAnimArgs[0]);
- sprite->data[2] = 0;
- sprite->data[3] = 0;
- sprite->data[4] = sprite->pos1.x << 4;
- sprite->data[5] = sprite->pos1.y << 4;
- sprite->data[6] = (gBattleAnimArgs[1] << 4) / 5;
- sprite->data[7] = (gBattleAnimArgs[2] << 7) / 5;
- sprite->callback = sub_80CED78;
-}
-
-void sub_80CED78(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 (sprite->data[0] > 5 && sprite->data[3] == 0)
- {
- sprite->data[2] = (sprite->data[2] + 16) & 0xFF;
- sprite->pos2.x = Cos(sprite->data[2], 18);
- sprite->pos2.y = Sin(sprite->data[2], 18);
- if (sprite->data[2] == 0)
- sprite->data[3] = 1;
- }
-
- if (++sprite->data[0] == 0x30)
- move_anim_8074EE0(sprite);
-}
diff --git a/src/battle/anim/note_scatter_2.c b/src/battle/anim/note_scatter_2.c
deleted file mode 100644
index 262afb8bf..000000000
--- a/src/battle/anim/note_scatter_2.c
+++ /dev/null
@@ -1,57 +0,0 @@
-#include "global.h"
-#include "rom_8077ABC.h"
-#include "trig.h"
-#include "battle_anim.h"
-#include "sound.h"
-
-extern s16 gBattleAnimArgs[];
-extern u8 gAnimBankAttacker;
-extern u8 gAnimBankTarget;
-
-extern u16 gUnknown_083D712C[4][6];
-
-static void sub_80CEEE8(struct Sprite* sprite);
-
-// note_scatter_2 (slower scatter of notes.)
-// Used in Belly Drum.
-
-void sub_80CEE60(struct Sprite* sprite)
-{
- s16 a;
- u8 index;
- sub_8078650(sprite);
- sprite->pos1.y += 8;
- StartSpriteAnim(sprite, gBattleAnimArgs[1]);
- index = IndexOfSpritePaletteTag(gUnknown_083D712C[gBattleAnimArgs[2]][0]);
- if (index != 0xFF)
- sprite->oam.paletteNum = index;
-
- a = (gBattleAnimArgs[0] == 0) ? 0xFFE0 : 0x20;
- sprite->data[0] = 40;
- sprite->data[1] = sprite->pos1.x;
- sprite->data[2] = a + sprite->data[1];
- sprite->data[3] = sprite->pos1.y;
- sprite->data[4] = sprite->data[3] - 40;
- InitAnimSpriteTranslationDeltas(sprite);
- sprite->data[5] = gBattleAnimArgs[3];
- sprite->callback = sub_80CEEE8;
-}
-
-void sub_80CEEE8(struct Sprite* sprite)
-{
- if (TranslateAnimSpriteByDeltas(sprite) == 0)
- {
- s16 a;
- a = Sin(sprite->data[5], 8);
- if (sprite->pos2.x < 0)
- a = -a;
-
- sprite->pos2.x += a;
- sprite->pos2.y += Sin(sprite->data[5], 4);
- sprite->data[5] = (sprite->data[5] + 8) & 0xFF;
- }
- else
- {
- DestroyAnimSprite(sprite);
- }
-}
diff --git a/src/battle/anim/note_spin.c b/src/battle/anim/note_spin.c
index 026ee1856..c3d6bdf52 100644
--- a/src/battle/anim/note_spin.c
+++ b/src/battle/anim/note_spin.c
@@ -7,12 +7,63 @@ extern s16 gBattleAnimArgs[8];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+extern const union AnimCmd *const gSpriteAnimTable_83D70D8[];
+
+void sub_80D2E68(struct Sprite *sprite);
+void sub_80D2EC8(struct Sprite *sprite);
static void sub_80D2F80(struct Sprite *);
static void sub_80D2FA4(struct Sprite *);
// note_spin (spins music notes around, and rotates them)
// Used in Perish Song.
+const union AffineAnimCmd gSpriteAffineAnim_83D7CE0[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 5),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D7CF0[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 16),
+ AFFINEANIMCMD_END_ALT(1),
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D7D00[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 16),
+ AFFINEANIMCMD_END_ALT(1),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D7D10[] =
+{
+ gSpriteAffineAnim_83D7CE0,
+ gSpriteAffineAnim_83D7CF0,
+ gSpriteAffineAnim_83D7D00,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7D1C =
+{
+ .tileTag = 10206,
+ .paletteTag = 10206,
+ .oam = &gOamData_837DF8C,
+ .anims = gSpriteAnimTable_83D70D8,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D7D10,
+ .callback = sub_80D2EC8,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7D34 =
+{
+ .tileTag = 10206,
+ .paletteTag = 10206,
+ .oam = &gOamData_837DF8C,
+ .anims = gSpriteAnimTable_83D70D8,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D7D10,
+ .callback = sub_80D2E68,
+};
+
void sub_80D2E68(struct Sprite *sprite)
{
if (sprite->data[0] == 0)
diff --git a/src/battle/anim/note_wave.c b/src/battle/anim/note_wave.c
deleted file mode 100644
index 1f3db8c56..000000000
--- a/src/battle/anim/note_wave.c
+++ /dev/null
@@ -1,143 +0,0 @@
-#include "global.h"
-#include "rom_8077ABC.h"
-#include "trig.h"
-#include "battle_anim.h"
-#include "sound.h"
-#include "palette.h"
-
-extern s16 gBattleAnimArgs[];
-extern u8 gAnimBankAttacker;
-extern u8 gAnimBankTarget;
-
-extern u16 gUnknown_083D712C[4][6];
-
-static void sub_80CEBC4(s16 a, s16 b, s16* c, s16* d, s8 e);
-static void sub_80CEC1C(struct Sprite* sprite);
-
-// note_wave
-// Used by Grasswhistle, Belly Drum, and Sing.
-
-// rainbow effect for musical notes
-void sub_80CEA20(u8 taskId)
-{
- u16 i;
- u16 j;
- u16 index;
-
- index = IndexOfSpritePaletteTag(gUnknown_083D712C[0][0]);
- if (index != 0xFF)
- {
- index = (index << 4) + 0x100;
- for (i = 1; i < 6; i++)
- {
- gPlttBufferFaded[index + i] = gUnknown_083D712C[0][i];
- }
- }
-
- for (j = 1; j < 4; j++)
- {
- index = AllocSpritePalette(gUnknown_083D712C[j][0]);
- if (index != 0xFF)
- {
- index = (index << 4) + 0x100;
- for (i = 1; i < 6; i++)
- {
- gPlttBufferFaded[index + i] = gUnknown_083D712C[j][i];
- }
- }
- }
- DestroyAnimVisualTask(taskId);
-}
-
-// clears the rainbow effect for musical notes.
-void sub_80CEAD8(u8 taskId)
-{
- u16 i;
- for (i = 1; i < 4; i++)
- {
- FreeSpritePaletteByTag(gUnknown_083D712C[i][0]);
- }
-
- DestroyAnimVisualTask(taskId);
-}
-
-void sub_80CEB0C(struct Sprite* sprite)
-{
- u8 index;
- u8 a;
- u8 b;
- sub_8078650(sprite);
- StartSpriteAnim(sprite, gBattleAnimArgs[0]);
- if ((index = IndexOfSpritePaletteTag(gUnknown_083D712C[gBattleAnimArgs[1]][0])) != 0xFF)
- sprite->oam.paletteNum = index;
-
- sprite->data[1] = gBattleAnimArgs[1];
- sprite->data[2] = 0;
- sprite->data[3] = gBattleAnimArgs[2];
- if (IsContest())
- {
- a = 0x30;
- b = 0x28;
- }
- else
- {
- a = GetBattlerSpriteCoord(gAnimBankTarget, 2);
- b = GetBattlerSpriteCoord(gAnimBankTarget, 3);
- }
-
- sprite->data[4] = sprite->pos1.x << 4;
- sprite->data[5] = sprite->pos1.y << 4;
- sub_80CEBC4(a - sprite->pos1.x, b - sprite->pos1.y, &sprite->data[6], &sprite->data[7], 0x28);
- sprite->callback = sub_80CEC1C;
-}
-
-void sub_80CEBC4(s16 a, s16 b, s16* c, s16* d, s8 e)
-{
- int f;
- int g;
- if (a < 0)
- e = -e;
-
- f = a << 8;
- g = f / e;
- if (g == 0)
- g = 1;
-
- *c = f / g;
- *d = (b << 8) / g;
-}
-
-void sub_80CEC1C(struct Sprite* sprite)
-{
- int b;
- s16 a;
- int c;
- u8 index;
- sprite->data[0]++;
- b = sprite->data[0] * 5 - ((sprite->data[0] * 5 / 256) << 8);
- 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;
- sprite->pos2.y = Sin(b, 15);
- a = (u16)sprite->pos1.y;
- c = (u16)sprite->pos1.x;
-
- if ((u32)((c + 16) << 16) > (0x110) << 16 || a < -16 || a > 0x80)
- {
- move_anim_8074EE0(sprite);
- }
- else
- {
- if (sprite->data[3] && ++sprite->data[2] > sprite->data[3])
- {
- sprite->data[2] = 0;
- if (++sprite->data[1] > 3)
- sprite->data[1] = 0;
-
- index = IndexOfSpritePaletteTag(gUnknown_083D712C[sprite->data[1]][0]);
- if (index != 0xFF)
- sprite->oam.paletteNum = index;
- }
- }
-}
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/orbit_fast.c b/src/battle/anim/orbit_fast.c
deleted file mode 100644
index 67a59583f..000000000
--- a/src/battle/anim/orbit_fast.c
+++ /dev/null
@@ -1,63 +0,0 @@
-#include "global.h"
-#include "rom_8077ABC.h"
-#include "trig.h"
-#include "battle_anim.h"
-#include "sound.h"
-
-extern s16 gBattleAnimArgs[];
-extern u8 gAnimBankAttacker;
-extern u8 gAnimBankTarget;
-
-static void AnimOrbitFastStep(struct Sprite* sprite);
-
-// Orbits a sphere in an ellipse around the mon.
-// Used by MOVE_HIDDEN_POWER
-// arg 0: duration
-// arg 1: initial wave offset
-void AnimOrbitFast(struct Sprite* sprite)
-{
- sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2);
- sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3);
- sprite->affineAnimPaused = 1;
- sprite->data[0] = gBattleAnimArgs[0];
- sprite->data[1] = gBattleAnimArgs[1];
- sprite->data[7] = sub_8079E90(gAnimBankAttacker);
- sprite->callback = AnimOrbitFastStep;
- sprite->callback(sprite);
-}
-
-static void AnimOrbitFastStep(struct Sprite* sprite)
-{
- if ((u16)(sprite->data[1] - 0x40) <= 0x7F)
- sprite->subpriority = sprite->data[7] + 1;
- else
- sprite->subpriority = sprite->data[7] - 1;
-
- sprite->pos2.x = Sin(sprite->data[1], sprite->data[2] >> 8);
- sprite->pos2.y = Cos(sprite->data[1], sprite->data[3] >> 8);
- sprite->data[1] = (sprite->data[1] + 9) & 0xFF;
- switch (sprite->data[5])
- {
- case 1:
- sprite->data[2] -= 0x400;
- sprite->data[3] -= 0x100;
- if (++sprite->data[4] == sprite->data[0])
- {
- sprite->data[5] = 2;
- return;
- }
- break;
- case 0:
- sprite->data[2] += 0x400;
- sprite->data[3] += 0x100;
- if (++sprite->data[4] == sprite->data[0])
- {
- sprite->data[4] = 0;
- sprite->data[5] = 1;
- }
- break;
- }
-
- if ((u16)gBattleAnimArgs[7] == 0xFFFF)
- DestroyAnimSprite(sprite);
-}
diff --git a/src/battle/anim/orbit_scatter.c b/src/battle/anim/orbit_scatter.c
deleted file mode 100644
index bd03ee78c..000000000
--- a/src/battle/anim/orbit_scatter.c
+++ /dev/null
@@ -1,31 +0,0 @@
-#include "global.h"
-#include "rom_8077ABC.h"
-#include "trig.h"
-#include "battle_anim.h"
-#include "sound.h"
-
-extern s16 gBattleAnimArgs[];
-extern u8 gAnimBankAttacker;
-extern u8 gAnimBankTarget;
-
-static void AnimOrbitScatterStep(struct Sprite* sprite);
-
-// Moves orbs away from the mon, based on where they are in their orbit.
-// Used in MOVE_HIDDEN_POWER.
-// arg 0: initial wave offset
-void AnimOrbitScatter(struct Sprite* sprite)
-{
- sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2);
- sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3);
- sprite->data[0] = Sin(gBattleAnimArgs[0], 10);
- sprite->data[1] = Cos(gBattleAnimArgs[0], 7);
- sprite->callback = AnimOrbitScatterStep;
-}
-
-static void AnimOrbitScatterStep(struct Sprite* sprite)
-{
- sprite->pos2.x += sprite->data[0];
- sprite->pos2.y += sprite->data[1];
- if (sprite->pos1.x + sprite->pos2.x + 16 > 0x110u || sprite->pos1.y + sprite->pos2.y > 0xA0 || sprite->pos1.y + sprite->pos2.y < -16)
- DestroyAnimSprite(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/perceive.c b/src/battle/anim/perceive.c
index 14db096c6..ceca55141 100644
--- a/src/battle/anim/perceive.c
+++ b/src/battle/anim/perceive.c
@@ -8,10 +8,38 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80D2920(struct Sprite* sprite);
+
// perceive (shows a sparkle in a set of eyes, usually for heightened perception.)
// Used in Glare, Tickle, and Scary Face.
-void sub_80D2904(struct Sprite* sprite)
+const union AnimCmd gSpriteAnim_83D7B78[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(4, 4),
+ ANIMCMD_FRAME(8, 4),
+ ANIMCMD_FRAME(4, 4),
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D7B90[] =
+{
+ gSpriteAnim_83D7B78,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7B94 =
+{
+ .tileTag = 10218,
+ .paletteTag = 10218,
+ .oam = &gOamData_837DF2C,
+ .anims = gSpriteAnimTable_83D7B90,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D2920,
+};
+
+static void sub_80D2904(struct Sprite* sprite)
{
if (sprite->animEnded)
DestroyAnimSprite(sprite);
diff --git a/src/battle/anim/poison.c b/src/battle/anim/poison.c
index 2cc104c07..4d6673adf 100644
--- a/src/battle/anim/poison.c
+++ b/src/battle/anim/poison.c
@@ -7,11 +7,191 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
-void sub_80D9DD4(struct Sprite *sprite);
-void sub_80D9E78(struct Sprite *sprite);
-void sub_80D9EE8(struct Sprite *sprite);
+extern const union AnimCmd *const gSpriteAnimTable_83D9310[];
+
+void sub_80793C4(struct Sprite *sprite);
+void sub_80D9D70(struct Sprite *sprite);
+void sub_80D9DF0(struct Sprite *sprite);
+void sub_80D9E94(struct Sprite *sprite);
+void sub_80D9F14(struct Sprite *sprite);
+void AnimBubbleEffect(struct Sprite *sprite);
+static void sub_80D9DD4(struct Sprite *sprite);
+static void sub_80D9E78(struct Sprite *sprite);
+static void sub_80D9EE8(struct Sprite *sprite);
static void AnimBubbleEffectStep(struct Sprite *sprite);
+const union AnimCmd gSpriteAnim_83DA22C[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_FRAME(8, 5),
+ ANIMCMD_FRAME(16, 5),
+ ANIMCMD_FRAME(24, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83DA240[] =
+{
+ gSpriteAnim_83DA22C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA244 =
+{
+ .tileTag = 10151,
+ .paletteTag = 10151,
+ .oam = &gOamData_837DF74,
+ .anims = gSpriteAnimTable_83DA240,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80793C4,
+};
+
+const union AnimCmd gSpriteAnim_83DA25C[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83DA264[] =
+{
+ ANIMCMD_FRAME(4, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83DA26C[] =
+{
+ ANIMCMD_FRAME(8, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83DA274[] =
+{
+ gSpriteAnim_83DA25C,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83DA278[] =
+{
+ gSpriteAnim_83DA264,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83DA27C[] =
+{
+ gSpriteAnim_83DA26C,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DA280[] =
+{
+ AFFINEANIMCMD_FRAME(0x160, 0x160, 0, 0),
+ AFFINEANIMCMD_FRAME(0xFFF6, 0xFFF6, 0, 10),
+ AFFINEANIMCMD_FRAME(0xA, 0xA, 0, 10),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DA2A0[] =
+{
+ AFFINEANIMCMD_FRAME(0xEC, 0xEC, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA2B0[] =
+{
+ gSpriteAffineAnim_83DA280,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA2B4[] =
+{
+ gSpriteAffineAnim_83DA2A0,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA2B8 =
+{
+ .tileTag = 10150,
+ .paletteTag = 10150,
+ .oam = &gOamData_837DFEC,
+ .anims = gSpriteAnimTable_83DA274,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DA2B0,
+ .callback = sub_80D9D70,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA2D0 =
+{
+ .tileTag = 10150,
+ .paletteTag = 10150,
+ .oam = &gOamData_837DFEC,
+ .anims = gSpriteAnimTable_83DA274,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DA2B0,
+ .callback = sub_80D9DF0,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA2E8 =
+{
+ .tileTag = 10150,
+ .paletteTag = 10150,
+ .oam = &gOamData_837DF8C,
+ .anims = gSpriteAnimTable_83DA27C,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DA2B4,
+ .callback = sub_80D9E94,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DA300[] =
+{
+ AFFINEANIMCMD_FRAME(0xFFF0, 0x10, 0, 6),
+ AFFINEANIMCMD_FRAME(0x10, 0xFFF0, 0, 6),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA318[] =
+{
+ gSpriteAffineAnim_83DA300,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA31C =
+{
+ .tileTag = 10150,
+ .paletteTag = 10150,
+ .oam = &gOamData_837DFEC,
+ .anims = gSpriteAnimTable_83DA278,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DA318,
+ .callback = sub_80D9F14,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DA334[] =
+{
+ AFFINEANIMCMD_FRAME(0x9C, 0x9C, 0, 0),
+ AFFINEANIMCMD_FRAME(0x5, 0x5, 0, 20),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA34C[] =
+{
+ gSpriteAffineAnim_83DA334,
+};
+
+const struct SpriteTemplate gPoisonBubbleSpriteTemplate =
+{
+ .tileTag = 10150,
+ .paletteTag = 10150,
+ .oam = &gOamData_837DF8C,
+ .anims = gSpriteAnimTable_83DA274,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DA34C,
+ .callback = AnimBubbleEffect,
+};
+
+const struct SpriteTemplate gWaterBubbleSpriteTemplate =
+{
+ .tileTag = 10155,
+ .paletteTag = 10155,
+ .oam = &gOamData_837E0AC,
+ .anims = gSpriteAnimTable_83D9310,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DA34C,
+ .callback = AnimBubbleEffect,
+};
+
void sub_80D9D70(struct Sprite *sprite)
{
if (!gBattleAnimArgs[3])
@@ -29,7 +209,7 @@ void sub_80D9D70(struct Sprite *sprite)
sprite->callback = sub_80D9DD4;
}
-void sub_80D9DD4(struct Sprite *sprite) // same as sub_80D9E78
+static void sub_80D9DD4(struct Sprite *sprite) // same as sub_80D9E78
{
if (TranslateAnimSpriteLinearAndSine(sprite))
DestroyAnimSprite(sprite);
@@ -57,7 +237,7 @@ void sub_80D9DF0(struct Sprite *sprite)
sprite->callback = sub_80D9E78;
}
-void sub_80D9E78(struct Sprite *sprite) // same as sub_80D9DD4
+static void sub_80D9E78(struct Sprite *sprite) // same as sub_80D9DD4
{
if (TranslateAnimSpriteLinearAndSine(sprite))
DestroyAnimSprite(sprite);
@@ -79,7 +259,7 @@ void sub_80D9E94(struct Sprite *sprite)
sprite->callback = sub_80D9EE8;
}
-void sub_80D9EE8(struct Sprite *sprite)
+static void sub_80D9EE8(struct Sprite *sprite)
{
sub_8078394(sprite);
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/psychic.c b/src/battle/anim/psychic.c
index 7babb3a19..a63652646 100644
--- a/src/battle/anim/psychic.c
+++ b/src/battle/anim/psychic.c
@@ -16,12 +16,13 @@ extern u16 gBattle_BG1_X;
extern u16 gBattle_BG2_X;
extern u8 gBankSpriteIds[];
-extern const union AffineAnimCmd *const gUnknown_083DA888[];
-extern struct AffineAnimFrameCmd gUnknown_083DA8A4;
-extern struct AffineAnimFrameCmd gUnknown_083DA8C4;
-extern const struct SpriteTemplate gSpriteTemplate_83DA8DC;
-extern const struct SpriteTemplate gSpriteTemplate_83DA9AC;
-
+void sub_80DB74C(struct Sprite *sprite);
+void sub_80DBA4C(struct Sprite *sprite);
+void sub_80DBAF4(struct Sprite *sprite);
+void sub_80DBB70(struct Sprite *sprite);
+void sub_80DC068(struct Sprite *sprite);
+void sub_80DC2B0(struct Sprite *sprite);
+void sub_80DC700(struct Sprite *sprite);
static void sub_80DB88C(struct Sprite *sprite);
static void sub_80DB8C0(struct Sprite *sprite);
static void sub_80DB92C(struct Sprite *sprite);
@@ -35,6 +36,395 @@ static void sub_80DC1FC(u8 taskId);
static void sub_80DC3F4(u8 taskId);
void sub_80DC5F4(u8 taskId);
+const union AffineAnimCmd gSpriteAffineAnim_83DA674[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0xFFFE, 0xFFFE, -10, 120),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA68C[] =
+{
+ gSpriteAffineAnim_83DA674,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA690 =
+{
+ .tileTag = 10196,
+ .paletteTag = 10196,
+ .oam = &gOamData_837E0BC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DA68C,
+ .callback = sub_80793C4,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA6A8 =
+{
+ .tileTag = 10166,
+ .paletteTag = 10166,
+ .oam = &gOamData_837E05C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DB74C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA6C0 =
+{
+ .tileTag = 10167,
+ .paletteTag = 10167,
+ .oam = &gOamData_837E05C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DB74C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA6D8 =
+{
+ .tileTag = 10168,
+ .paletteTag = 10168,
+ .oam = &gOamData_837E05C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DB74C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA6F0 =
+{
+ .tileTag = 10169,
+ .paletteTag = 10169,
+ .oam = &gOamData_837E05C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DB74C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA708 =
+{
+ .tileTag = 10170,
+ .paletteTag = 10170,
+ .oam = &gOamData_837E05C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DB74C,
+};
+
+const union AnimCmd gSpriteAnim_83DA720[] =
+{
+ 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_83DA738[] =
+{
+ gSpriteAnim_83DA720,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA73C =
+{
+ .tileTag = 10071,
+ .paletteTag = 10071,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83DA738,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DBA4C,
+};
+
+const union AnimCmd gSpriteAnim_83DA754[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_FRAME(4, 5),
+ ANIMCMD_FRAME(8, 5),
+ ANIMCMD_FRAME(12, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83DA768[] =
+{
+ gSpriteAnim_83DA754,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA76C =
+{
+ .tileTag = 10070,
+ .paletteTag = 10070,
+ .oam = &gOamData_837DF2C,
+ .anims = gSpriteAnimTable_83DA768,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DBA4C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA784 =
+{
+ .tileTag = 10163,
+ .paletteTag = 10163,
+ .oam = &gOamData_837DF74,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = TranslateAnimSpriteToTargetMonLocation,
+};
+
+const union AnimCmd gSpriteAnim_83DA79C[] =
+{
+ ANIMCMD_FRAME(8, 60, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 5, .hFlip = TRUE),
+ ANIMCMD_FRAME(8, 5, .hFlip = TRUE),
+ ANIMCMD_FRAME(0, 5, .hFlip = TRUE),
+ ANIMCMD_FRAME(8, 22, .hFlip = TRUE),
+ ANIMCMD_LOOP(0),
+ ANIMCMD_FRAME(16, 5, .hFlip = TRUE),
+ ANIMCMD_FRAME(8, 5, .hFlip = TRUE),
+ ANIMCMD_FRAME(0, 5, .hFlip = TRUE),
+ ANIMCMD_FRAME(8, 5, .hFlip = TRUE),
+ ANIMCMD_LOOP(1),
+ ANIMCMD_FRAME(8, 22, .hFlip = TRUE),
+ ANIMCMD_FRAME(24, 3, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 3, .hFlip = TRUE),
+ ANIMCMD_FRAME(40, 22, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83DA7DC[] =
+{
+ ANIMCMD_FRAME(8, 60),
+ ANIMCMD_FRAME(16, 5),
+ ANIMCMD_FRAME(8, 5),
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_FRAME(8, 22),
+ ANIMCMD_LOOP(0),
+ ANIMCMD_FRAME(16, 5),
+ ANIMCMD_FRAME(8, 5),
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_FRAME(8, 5),
+ ANIMCMD_LOOP(1),
+ ANIMCMD_FRAME(8, 22),
+ ANIMCMD_FRAME(24, 3),
+ ANIMCMD_FRAME(32, 3),
+ ANIMCMD_FRAME(40, 22),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83DA81C[] =
+{
+ gSpriteAnim_83DA79C,
+ gSpriteAnim_83DA7DC,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA824 =
+{
+ .tileTag = 10097,
+ .paletteTag = 10097,
+ .oam = &gOamData_837DF74,
+ .anims = gSpriteAnimTable_83DA81C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DBAF4,
+};
+
+const union AnimCmd gSpriteAnim_83DA83C[] =
+{
+ ANIMCMD_FRAME(0, 6),
+ ANIMCMD_FRAME(16, 6),
+ ANIMCMD_FRAME(32, 6),
+ ANIMCMD_FRAME(48, 6),
+ ANIMCMD_FRAME(64, 6),
+ ANIMCMD_FRAME(80, 6),
+ ANIMCMD_FRAME(96, 18),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83DA85C[] =
+{
+ gSpriteAnim_83DA83C,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_3DA860[] =
+{
+ AFFINEANIMCMD_FRAME(0, 0, 4, 4),
+ AFFINEANIMCMD_FRAME(0, 0, -4, 8),
+ AFFINEANIMCMD_FRAME(0, 0, 4, 4),
+ AFFINEANIMCMD_LOOP(2),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_083DA888[] =
+{
+ gSpriteAffineAnim_3DA860,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA88C =
+{
+ .tileTag = 10093,
+ .paletteTag = 10093,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83DA85C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DBB70,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_083DA8A4[] =
+{
+ AFFINEANIMCMD_FRAME(-8, 10, 0, 16),
+ AFFINEANIMCMD_FRAME(18, -18, 0, 16),
+ AFFINEANIMCMD_FRAME(-20, 16, 0, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_083DA8C4[] =
+{
+ AFFINEANIMCMD_FRAME(64, -4, 0, 20),
+ AFFINEANIMCMD_FRAME(0, 0, 0, -56),
+ AFFINEANIMCMD_END,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83DA8DC =
+{
+ .tileTag = 10249,
+ .paletteTag = 10249,
+ .oam = &gOamData_837E04C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA8F4 =
+{
+ .tileTag = 10250,
+ .paletteTag = 10250,
+ .oam = &gOamData_837DF3C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DC068,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DA90C[] =
+{
+ AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 8),
+ AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 8),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DA924[] =
+{
+ AFFINEANIMCMD_FRAME(0xF0, 0xF0, 0, 0),
+ AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 6),
+ AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 8),
+ AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 2),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DA94C[] =
+{
+ AFFINEANIMCMD_FRAME(0xD0, 0xD0, 0, 0),
+ AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 4),
+ AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 8),
+ AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 4),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DA974[] =
+{
+ AFFINEANIMCMD_FRAME(0xB0, 0xB0, 0, 0),
+ AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 2),
+ AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 8),
+ AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 6),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA99C[] =
+{
+ gSpriteAffineAnim_83DA90C,
+ gSpriteAffineAnim_83DA924,
+ gSpriteAffineAnim_83DA94C,
+ gSpriteAffineAnim_83DA974,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83DA9AC =
+{
+ .tileTag = 10251,
+ .paletteTag = 10251,
+ .oam = &gOamData_837DF8C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DA99C,
+ .callback = sub_80DC2B0,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DA9C4[] =
+{
+ AFFINEANIMCMD_FRAME(0x20, 0x20, 0, 0),
+ AFFINEANIMCMD_FRAME(0x4, 0x4, 0, 120),
+ AFFINEANIMCMD_END_ALT(1),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA9DC[] =
+{
+ gSpriteAffineAnim_83DA9C4,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA9E0 =
+{
+ .tileTag = 10267,
+ .paletteTag = 10267,
+ .oam = &gOamData_837E11C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DA9DC,
+ .callback = sub_80793C4,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DA9F8[] =
+{
+ AFFINEANIMCMD_FRAME(0x20, 0x20, 0, 0),
+ AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 17),
+ AFFINEANIMCMD_LOOP(0),
+ AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 10),
+ AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 10),
+ AFFINEANIMCMD_LOOP(4),
+ AFFINEANIMCMD_LOOP(0),
+ AFFINEANIMCMD_FRAME(0xFFF0, 0xFFF0, 0, 5),
+ AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 5),
+ AFFINEANIMCMD_LOOP(7),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DAA50[] =
+{
+ AFFINEANIMCMD_FRAME(0xFFEC, 0x18, 0, 15),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DAA60[] =
+{
+ gSpriteAffineAnim_83DA9F8,
+ gSpriteAffineAnim_83DAA50,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAA68 =
+{
+ .tileTag = 10212,
+ .paletteTag = 10212,
+ .oam = &gOamData_837E11C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DAA60,
+ .callback = sub_80DC700,
+};
void sub_80DB74C(struct Sprite *sprite)
{
@@ -254,7 +644,7 @@ void sub_80DBB70(struct Sprite *sprite)
static void sub_80DBC00(struct Sprite *sprite)
{
sprite->oam.affineMode = 1;
- sprite->affineAnims = gUnknown_083DA888;
+ sprite->affineAnims = gSpriteAffineAnimTable_083DA888;
sprite->data[0] = 0;
InitSpriteAffineAnim(sprite);
sprite->callback = sub_80DBC34;
@@ -287,7 +677,7 @@ void sub_80DBC94(u8 taskId)
struct Task *task = &gTasks[taskId];
u8 spriteId = GetAnimBattlerSpriteId(0);
task->data[0] = spriteId;
- sub_80798F4(task, spriteId, &gUnknown_083DA8A4);
+ sub_80798F4(task, spriteId, &gSpriteAffineAnim_083DA8A4);
task->func = sub_80DBCD0;
}
@@ -308,7 +698,7 @@ void sub_80DBCFC(u8 taskId)
task->data[2] = 0;
task->data[3] = GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER ? 4 : 8;
- sub_80798F4(task, task->data[0], &gUnknown_083DA8C4);
+ sub_80798F4(task, task->data[0], &gSpriteAffineAnim_083DA8C4);
task->func = sub_80DBD58;
}
diff --git a/src/battle/anim/rain.c b/src/battle/anim/rain.c
index b38233e3c..421304be8 100644
--- a/src/battle/anim/rain.c
+++ b/src/battle/anim/rain.c
@@ -5,13 +5,44 @@
#include "task.h"
extern s16 gBattleAnimArgs[8];
-extern const struct SpriteTemplate gSpriteTemplate_83D9130[];
-static void MoveAnimRaindrop(struct Sprite *);
+void SetAnimRaindropCallback(struct Sprite *sprite);
+static void MoveAnimRaindrop(struct Sprite *sprite);
// rain (spawns and animates raindrops)
// Used in Rain Dance and general rain animation.
+ const u8 gUnknown_3D7D8C[] = INCBIN_U8("graphics/unknown/unknown_3D7D8C.4bpp");
+ const u8 gUnknown_3D810C[] = INCBIN_U8("graphics/unknown/unknown_3D810C.bin");
+
+ const union AnimCmd gSpriteAnim_83D910C[] =
+{
+ ANIMCMD_FRAME(0, 2),
+ ANIMCMD_FRAME(8, 2),
+ ANIMCMD_FRAME(16, 2),
+ ANIMCMD_FRAME(24, 6),
+ ANIMCMD_FRAME(32, 2),
+ ANIMCMD_FRAME(40, 2),
+ ANIMCMD_FRAME(48, 2),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D912C[] =
+{
+ gSpriteAnim_83D910C,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83D9130 =
+{
+ .tileTag = 10115,
+ .paletteTag = 10115,
+ .oam = &gOamData_837DF74,
+ .anims = gSpriteAnimTable_83D912C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SetAnimRaindropCallback,
+};
+
void CreateAnimRaindrops(u8 taskId)
{
if (gTasks[taskId].data[0] == 0)
@@ -27,7 +58,7 @@ void CreateAnimRaindrops(u8 taskId)
{
u8 x = Random() % 240;
u8 y = Random() % 80;
- CreateSprite(gSpriteTemplate_83D9130, x, y, 4);
+ CreateSprite(&gSpriteTemplate_83D9130, x, y, 4);
}
if (gTasks[taskId].data[0] == gTasks[taskId].data[3])
diff --git a/src/battle/anim/ring.c b/src/battle/anim/ring.c
index b317cdaed..024728ecc 100644
--- a/src/battle/anim/ring.c
+++ b/src/battle/anim/ring.c
@@ -12,11 +12,201 @@ extern u8 gAnimBankTarget;
extern u8 gBankSpriteIds[];
+void sub_80D0FD8(struct Sprite* sprite);
+void sub_80D10B8(struct Sprite* sprite);
+void sub_80D1318(struct Sprite* sprite);
+void sub_80D1368(struct Sprite* sprite);
static void sub_80D1098(struct Sprite* sprite);
+static void sub_80D13AC(struct Sprite* sprite);
+static void sub_80D1424(struct Sprite* sprite);
+static void sub_80D144C(struct Sprite* sprite);
+static void sub_80D14C4(struct Sprite* sprite);
+static void sub_80D1504(struct Sprite* sprite);
+static void sub_80D154C(struct Sprite* sprite);
+static void sub_80D158C(struct Sprite* sprite);
// ring (a ring that stretches outward from the Pokemon.)
// Used in Aromatherapy and Heal Bell.
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D77F8 =
+{
+ .tileTag = 10197,
+ .paletteTag = 10197,
+ .oam = &gOamData_837DF34,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8079534,
+};
+
+const union AnimCmd gSpriteAnim_83D7810[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_FRAME(16, 5),
+ ANIMCMD_FRAME(32, 5),
+ ANIMCMD_FRAME(48, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D7824[] =
+{
+ gSpriteAnim_83D7810,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7828 =
+{
+ .tileTag = 10198,
+ .paletteTag = 10198,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D7824,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80793C4,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D7840[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 2),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 4),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 2),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D7860[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D7870[] =
+{
+ AFFINEANIMCMD_FRAME(0xFFF8, 0x4, 0, 8),
+ AFFINEANIMCMD_LOOP(0),
+ AFFINEANIMCMD_FRAME(0x10, 0xFFF8, 0, 8),
+ AFFINEANIMCMD_FRAME(0xFFF0, 0x8, 0, 8),
+ AFFINEANIMCMD_LOOP(1),
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 15),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D78B0[] =
+{
+ gSpriteAffineAnim_83D7840,
+ gSpriteAffineAnim_83D7860,
+ gSpriteAffineAnim_83D7870,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D78BC =
+{
+ .tileTag = 10202,
+ .paletteTag = 10202,
+ .oam = &gOamData_837E114,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D78B0,
+ .callback = sub_80D1368,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D78D4[] =
+{
+ AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0),
+ AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 30),
+ AFFINEANIMCMD_END_ALT(1),
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D78EC[] =
+{
+ AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0),
+ AFFINEANIMCMD_FRAME(0x20, 0x20, 0, 15),
+ AFFINEANIMCMD_END_ALT(1),
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D7904[] =
+{
+ AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0),
+ AFFINEANIMCMD_FRAME(0xB, 0xB, 0, 45),
+ AFFINEANIMCMD_END_ALT(1),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D791C[] =
+{
+ gSpriteAffineAnim_83D78D4,
+ gSpriteAffineAnim_83D78EC,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D7924[] =
+{
+ gSpriteAffineAnim_83D7904,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7928 =
+{
+ .tileTag = 10203,
+ .paletteTag = 10203,
+ .oam = &gOamData_837DFFC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D791C,
+ .callback = sub_80793C4,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D7940[] =
+{
+ AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0),
+ AFFINEANIMCMD_FRAME(0xFFF0, 0xFFF0, 0, 30),
+ AFFINEANIMCMD_END_ALT(1),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D7958[] =
+{
+ gSpriteAffineAnim_83D7940,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D795C =
+{
+ .tileTag = 10203,
+ .paletteTag = 10203,
+ .oam = &gOamData_837E11C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D7958,
+ .callback = sub_80793C4,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7974 =
+{
+ .tileTag = 10203,
+ .paletteTag = 10203,
+ .oam = &gOamData_837E11C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D791C,
+ .callback = sub_80D0FD8,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D798C =
+{
+ .tileTag = 10203,
+ .paletteTag = 10203,
+ .oam = &gOamData_837E11C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D7924,
+ .callback = sub_80D10B8,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D79A4 =
+{
+ .tileTag = 10203,
+ .paletteTag = 10203,
+ .oam = &gOamData_837E11C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D791C,
+ .callback = sub_80D1318,
+};
+
void sub_80D0FD8(struct Sprite* sprite)
{
u8 bank = 0;
@@ -154,3 +344,105 @@ void sub_80D1318(struct Sprite* sprite)
sprite->callback = sub_80793C4;
sub_80793C4(sprite);
}
+
+void sub_80D1368(struct Sprite* sprite)
+{
+ s16 r1;
+ InitAnimSpritePos(sprite, 0);
+ r1 = (GetBattlerSide(gAnimBankAttacker)) ? -0xA0 : 0xA0;
+ sprite->data[0] = 0x380;
+ sprite->data[1] = r1;
+ sprite->data[7] = gBattleAnimArgs[2];
+ sprite->callback = sub_80D13AC;
+}
+
+static void sub_80D13AC(struct Sprite* sprite)
+{
+ s16 add;
+ sprite->pos2.y -= (sprite->data[0] >> 8);
+ sprite->pos2.x = sprite->data[1] >> 8;
+ sprite->data[0] -= 32;
+ add = (GetBattlerSide(gAnimBankAttacker)) ? -0xA0 : 0xA0;
+ sprite->data[1] += add;
+ if (sprite->pos2.y > 0)
+ {
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos2.y = 0;
+ sprite->pos2.x = 0;
+ sprite->data[0] = 0;
+ StartSpriteAffineAnim(sprite, 1);
+ sprite->callback = sub_80D1424;
+ }
+}
+
+static void sub_80D1424(struct Sprite* sprite)
+{
+ if (sprite->data[0]++ > 19)
+ {
+ StartSpriteAffineAnim(sprite, 2);
+ sprite->callback = sub_80D144C;
+ }
+}
+
+static void sub_80D144C(struct Sprite* sprite)
+{
+ if (sprite->affineAnimEnded)
+ {
+ StartSpriteAffineAnim(sprite, 1);
+ sprite->data[0] = 0;
+ if (sprite->data[7] == 0)
+ {
+ sprite->oam.tileNum += 16;
+ sprite->callback = sub_80D14C4;
+ }
+ else
+ {
+ sprite->oam.tileNum += 32;
+ sprite->callback = sub_80D154C;
+ }
+ }
+}
+
+static void sub_80D14C4(struct Sprite* sprite)
+{
+ sprite->pos2.y -= 2;
+ if (++sprite->data[0] == 9)
+ {
+ sprite->data[0] = 16;
+ sprite->data[1] = 0;
+ REG_BLDCNT = 0x3F40;
+ REG_BLDALPHA = sprite->data[0];
+ sprite->callback = sub_80D1504;
+ }
+}
+
+static void sub_80D1504(struct Sprite* sprite)
+{
+ if (sprite->data[1]++ % 3 == 0)
+ {
+ sprite->data[0]--;
+ REG_BLDALPHA = sprite->data[0] | ((16 - sprite->data[0]) << 8);
+ if (sprite->data[0] == 0)
+ sprite->callback = sub_80D154C;
+ }
+}
+
+static void sub_80D154C(struct Sprite* sprite)
+{
+ if ((u16)gBattleAnimArgs[7] == 0xFFFF)
+ {
+ sprite->invisible = 1;
+ if (sprite->data[7] == 0)
+ sprite->callback = sub_80D158C;
+ else
+ sprite->callback = DestroyAnimSprite;
+ }
+}
+
+static void sub_80D158C(struct Sprite* sprite)
+{
+ REG_BLDCNT = 0;
+ REG_BLDALPHA = 0;
+ DestroyAnimSprite(sprite);
+}
diff --git a/src/battle/anim/rock.c b/src/battle/anim/rock.c
index 73be7c42b..595df3168 100644
--- a/src/battle/anim/rock.c
+++ b/src/battle/anim/rock.c
@@ -20,11 +20,20 @@ extern u16 gBattle_BG3_Y;
extern const u8 gBattleAnimBackgroundTilemap_SandstormBrew[];
extern const u8 gBattleAnimBackgroundImage_SandstormBrew[];
extern const u16 gBattleAnimSpritePalette_261[];
-extern const struct SpriteTemplate gSpriteTemplate_83DAD78;
-extern const struct SpriteTemplate gSpriteTemplate_83DAD90;
-
-extern const struct SubspriteTable gUnknown_083DAD10;
-
+extern const union AnimCmd *const gSpriteAnimTable_83D91F0[];
+extern const union AnimCmd *const gSpriteAnimTable_83D95E0[];
+
+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 sub_80DD87C(struct Sprite *sprite);
+void sub_80DD8E8(struct Sprite *sprite);
+void sub_80DD978(struct Sprite *sprite);
+void sub_80DD9A4(struct Sprite *sprite);
static void sub_80DCF1C(struct Sprite *sprite);
static void sub_80DD02C(struct Sprite *sprite);
static void sub_80DD190(u8 taskId);
@@ -34,6 +43,280 @@ static u8 sub_80DD8BC(void);
static void sub_80DD928(struct Sprite *sprite);
static void sub_80DD9FC(struct Sprite *sprite);
+const union AnimCmd gSpriteAnim_83DAC28[] =
+{
+ ANIMCMD_FRAME(32, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83DAC30[] =
+{
+ ANIMCMD_FRAME(48, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83DAC38[] =
+{
+ ANIMCMD_FRAME(64, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83DAC40[] =
+{
+ gSpriteAnim_83DAC28,
+ gSpriteAnim_83DAC30,
+ gSpriteAnim_83DAC38,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAC4C =
+{
+ .tileTag = 10058,
+ .paletteTag = 10058,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83DAC40,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DCE9C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAC64 =
+{
+ .tileTag = 10058,
+ .paletteTag = 10058,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83DAC40,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DCF60,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAC7C =
+{
+ .tileTag = 10074,
+ .paletteTag = 10074,
+ .oam = &gOamData_837DF24,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DCFE4,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DAC94[] =
+{
+ AFFINEANIMCMD_FRAME(0xC0, 0xC0, 0, 0),
+ AFFINEANIMCMD_FRAME(0x2, 0xFFFD, 0, 5),
+ AFFINEANIMCMD_FRAME(0xFFFE, 0x3, 0, 5),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DACB4[] =
+{
+ gSpriteAffineAnim_83DAC94,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DACB8 =
+{
+ .tileTag = 10149,
+ .paletteTag = 10149,
+ .oam = &gOamData_837E0AC,
+ .anims = gSpriteAnimTable_83D91F0,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DACB4,
+ .callback = sub_80DCFE4,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DACD0 =
+{
+ .tileTag = 10029,
+ .paletteTag = 10029,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D95E0,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DCFE4,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DACE8 =
+{
+ .tileTag = 10261,
+ .paletteTag = 10261,
+ .oam = &gOamData_837DF54,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DD3AC,
+};
+
+const struct Subsprite gSubspriteTable_83DAD00[] =
+{
+ {.x = -16, .y = 0, .shape = ST_OAM_H_RECTANGLE, .size = 2, .tileOffset = 0, .priority = 1},
+ {.x = 16, .y = 0, .shape = ST_OAM_H_RECTANGLE, .size = 2, .tileOffset = 8, .priority = 1},
+};
+
+const struct SubspriteTable gSubspriteTables_83DAD10[] =
+{
+ {ARRAY_COUNT(gSubspriteTable_83DAD00), gSubspriteTable_83DAD00},
+};
+
+const union AnimCmd gSpriteAnim_83DAD18[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83DAD20[] =
+{
+ ANIMCMD_FRAME(16, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83DAD28[] =
+{
+ ANIMCMD_FRAME(32, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83DAD30[] =
+{
+ ANIMCMD_FRAME(48, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83DAD38[] =
+{
+ ANIMCMD_FRAME(64, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83DAD40[] =
+{
+ ANIMCMD_FRAME(80, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83DAD48[] =
+{
+ gSpriteAnim_83DAD18,
+ gSpriteAnim_83DAD20,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83DAD50[] =
+{
+ gSpriteAnim_83DAD28,
+ gSpriteAnim_83DAD30,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83DAD58[] =
+{
+ gSpriteAnim_83DAD38,
+ gSpriteAnim_83DAD40,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAD60 =
+{
+ .tileTag = 10058,
+ .paletteTag = 10058,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83DAD48,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DD490,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83DAD78 =
+{
+ .tileTag = 10074,
+ .paletteTag = 10074,
+ .oam = &gOamData_837DF24,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DD87C,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83DAD90 =
+{
+ .tileTag = 10058,
+ .paletteTag = 10058,
+ .oam = &gOamData_837DF34,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DD87C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DADA8 =
+{
+ .tileTag = 10058,
+ .paletteTag = 10058,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83DAD48,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DD8E8,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DADC0[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -5, 5),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DADD0[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 5, 5),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DADE0[] =
+{
+ gSpriteAffineAnim_83DADC0,
+ gSpriteAffineAnim_83DADD0,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DADE8 =
+{
+ .tileTag = 10058,
+ .paletteTag = 10058,
+ .oam = &gOamData_837DF94,
+ .anims = gSpriteAnimTable_83DAD48,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DADE0,
+ .callback = sub_80DD978,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAE00 =
+{
+ .tileTag = 10058,
+ .paletteTag = 10058,
+ .oam = &gOamData_837DF94,
+ .anims = gSpriteAnimTable_83DAD48,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DADE0,
+ .callback = sub_80DD9A4,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAE18 =
+{
+ .tileTag = 10058,
+ .paletteTag = 10058,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83DAD58,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DADE0,
+ .callback = AnimMoveTwisterParticle,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAE30 =
+{
+ .tileTag = 10058,
+ .paletteTag = 10058,
+ .oam = &gOamData_837DF94,
+ .anims = gSpriteAnimTable_83DAD50,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DADE0,
+ .callback = sub_807A9BC,
+};
void sub_80DCE9C(struct Sprite *sprite)
{
@@ -244,7 +527,7 @@ void sub_80DD3AC(struct Sprite *sprite)
}
sprite->pos1.y = gBattleAnimArgs[0];
- SetSubspriteTables(sprite, &gUnknown_083DAD10);
+ SetSubspriteTables(sprite, gSubspriteTables_83DAD10);
sprite->data[1] = gBattleAnimArgs[1];
sprite->data[2] = gBattleAnimArgs[2];
sprite->data[0]++;
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/scan.c b/src/battle/anim/scan.c
index abd54cef3..05859d31c 100644
--- a/src/battle/anim/scan.c
+++ b/src/battle/anim/scan.c
@@ -9,8 +9,8 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
-extern s8 gUnknown_083D6DDC[4][2];
-
+void sub_80CD3E0(struct Sprite* sprite);
+void sub_80CD6CC(struct Sprite* sprite);
static void sub_80CD408(struct Sprite* sprite);
static void sub_80CD4B8(struct Sprite* sprite);
static void sub_80CD4EC(struct Sprite* sprite);
@@ -21,6 +21,36 @@ static void sub_80CD67C(struct Sprite* sprite);
// scan
// Used by Lock-On.
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6DAC =
+{
+ .tileTag = 10014,
+ .paletteTag = 10014,
+ .oam = &gOamData_837DF34,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CD3E0,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6DC4 =
+{
+ .tileTag = 10014,
+ .paletteTag = 10014,
+ .oam = &gOamData_837DF2C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CD6CC,
+};
+
+const s8 gUnknown_083D6DDC[][2] =
+{
+ { 64, 64},
+ { 0, -64},
+ {-64, 64},
+ { 32, -32},
+};
+
void sub_80CD3E0(struct Sprite* sprite)
{
sprite->pos1.x -= 32;
@@ -30,7 +60,7 @@ void sub_80CD3E0(struct Sprite* sprite)
StoreSpriteCallbackInData(sprite, sub_80CD408);
}
-void sub_80CD408(struct Sprite* sprite)
+static void sub_80CD408(struct Sprite* sprite)
{
switch (sprite->data[5] & 1)
{
@@ -57,7 +87,7 @@ void sub_80CD408(struct Sprite* sprite)
sprite->data[5] ^= 1;
}
-void sub_80CD4B8(struct Sprite* sprite)
+static void sub_80CD4B8(struct Sprite* sprite)
{
if ((sprite->data[5] >> 8) == 4)
{
@@ -71,7 +101,7 @@ void sub_80CD4B8(struct Sprite* sprite)
}
}
-void sub_80CD4EC(struct Sprite* sprite)
+static void sub_80CD4EC(struct Sprite* sprite)
{
s16 a;
s16 b;
@@ -117,7 +147,7 @@ void sub_80CD4EC(struct Sprite* sprite)
}
}
-void sub_80CD5A8(struct Sprite* sprite)
+static void sub_80CD5A8(struct Sprite* sprite)
{
if (sprite->data[2] == 0)
{
@@ -144,7 +174,7 @@ void sub_80CD5A8(struct Sprite* sprite)
}
}
-void sub_80CD654(struct Sprite* sprite)
+static void sub_80CD654(struct Sprite* sprite)
{
if ((u16)gBattleAnimArgs[7] == 0xFFFF)
{
@@ -154,7 +184,7 @@ void sub_80CD654(struct Sprite* sprite)
}
}
-void sub_80CD67C(struct Sprite* sprite)
+static void sub_80CD67C(struct Sprite* sprite)
{
if (sprite->data[0] % 3 == 0)
{
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/shield.c b/src/battle/anim/shield.c
index 323df4ab2..d858f5100 100644
--- a/src/battle/anim/shield.c
+++ b/src/battle/anim/shield.c
@@ -9,11 +9,23 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CCD24(struct Sprite* sprite);
static void sub_80CCE0C(struct Sprite* sprite);
// shield
// Used by Protect.
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6BE8 =
+{
+ .tileTag = 10280,
+ .paletteTag = 10280,
+ .oam = &gOamData_837E05C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CCD24,
+};
+
void sub_80CCD24(struct Sprite* sprite)
{
if (IsContest() != 0)
@@ -36,7 +48,7 @@ void sub_80CCD24(struct Sprite* sprite)
sprite->callback = sub_80CCE0C;
}
-void sub_80CCE0C(struct Sprite* sprite)
+static void sub_80CCE0C(struct Sprite* sprite)
{
int a;
int i;
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/shock.c b/src/battle/anim/shock.c
index 19e4d0fb2..5b82d9319 100644
--- a/src/battle/anim/shock.c
+++ b/src/battle/anim/shock.c
@@ -8,11 +8,62 @@ extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
extern struct OamMatrix gOamMatrices[];
+void sub_80D6294(struct Sprite *sprite);
+void sub_80D6328(struct Sprite *sprite);
extern void sub_80DA48C(struct Sprite *);
// shock (moves the little electricity lines)
// Used in Shock.
+const union AnimCmd gSpriteAnim_83D9824[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_FRAME(16, 5),
+ ANIMCMD_FRAME(32, 5),
+ ANIMCMD_FRAME(48, 5),
+ ANIMCMD_FRAME(64, 5),
+ ANIMCMD_FRAME(80, 5),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D9840[] =
+{
+ gSpriteAnim_83D9824,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83D9844 =
+{
+ .tileTag = 10079,
+ .paletteTag = 10079,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D9840,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D6294,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D985C =
+{
+ .tileTag = 10011,
+ .paletteTag = 10011,
+ .oam = &gOamData_837DF8C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D6328,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9874 =
+{
+ .tileTag = 10171,
+ .paletteTag = 10171,
+ .oam = &gOamData_837DF2C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = TranslateAnimSpriteToTargetMonLocation,
+};
+
void sub_80D6294(struct Sprite *sprite)
{
sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankTarget, 2);
diff --git a/src/battle/anim/slash.c b/src/battle/anim/slash.c
index 68a1b81ef..f71bc6eaa 100644
--- a/src/battle/anim/slash.c
+++ b/src/battle/anim/slash.c
@@ -8,6 +8,9 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CDD74(struct Sprite* sprite);
+void sub_80CDDDC(struct Sprite* sprite);
+void sub_80CDE24(struct Sprite* sprite);
static void sub_80CDE78(struct Sprite* sprite);
static void sub_80CDEB0(struct Sprite* sprite);
static void sub_80CDEC0(struct Sprite* sprite);
@@ -15,6 +18,60 @@ static void sub_80CDEC0(struct Sprite* sprite);
// slash (a cutting animation)
// Used in Slash and False Swipe.
+const union AnimCmd gSpriteAnim_83D6E14[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(16, 4),
+ ANIMCMD_FRAME(32, 4),
+ ANIMCMD_FRAME(48, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D6E28[] =
+{
+ ANIMCMD_FRAME(48, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D6E30[] =
+{
+ gSpriteAnim_83D6E14,
+ gSpriteAnim_83D6E28,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6E38 =
+{
+ .tileTag = 10183,
+ .paletteTag = 10183,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D6E30,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CDD74,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6E50 =
+{
+ .tileTag = 10286,
+ .paletteTag = 10286,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D6E30,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CDDDC,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6E68 =
+{
+ .tileTag = 10286,
+ .paletteTag = 10286,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D6E30,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CDE24,
+};
+
void sub_80CDD74(struct Sprite* sprite)
{
if (gBattleAnimArgs[0] == 0)
@@ -52,7 +109,7 @@ void sub_80CDE24(struct Sprite* sprite)
sprite->callback = sub_80CDEC0;
}
-void sub_80CDE78(struct Sprite* sprite)
+static void sub_80CDE78(struct Sprite* sprite)
{
if (++sprite->data[0] > 8)
{
@@ -64,14 +121,14 @@ void sub_80CDE78(struct Sprite* sprite)
}
}
-void sub_80CDEB0(struct Sprite* sprite)
+static void sub_80CDEB0(struct Sprite* sprite)
{
sprite->data[0] = 0;
sprite->data[1] = 0;
sprite->callback = sub_80CDEC0;
}
-void sub_80CDEC0(struct Sprite* sprite)
+static void sub_80CDEC0(struct Sprite* sprite)
{
if (++sprite->data[0] > 1)
{
diff --git a/src/battle/anim/sleep.c b/src/battle/anim/sleep.c
index cc3518395..40b984be7 100644
--- a/src/battle/anim/sleep.c
+++ b/src/battle/anim/sleep.c
@@ -8,11 +8,68 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CD328(struct Sprite* sprite);
static void sub_80CD394(struct Sprite* sprite);
// sleep (the "ZZZ" graphical effect)
// Used by Rest and the sleep turn when the Pokemon is still asleep.
+const union AnimCmd gSpriteAnim_83D6D20[] =
+{
+ ANIMCMD_FRAME(0, 40),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D6D28[] =
+{
+ gSpriteAnim_83D6D20,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D6D2C[] =
+{
+ AFFINEANIMCMD_FRAME(0x14, 0x14, -30, 0),
+ AFFINEANIMCMD_FRAME(0x8, 0x8, 1, 24),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D6D44[] =
+{
+ AFFINEANIMCMD_LOOP(0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 24),
+ AFFINEANIMCMD_LOOP(10),
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D6D5C[] =
+{
+ AFFINEANIMCMD_FRAME(0x14, 0x14, 30, 0),
+ AFFINEANIMCMD_FRAME(0x8, 0x8, -1, 24),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D6D74[] =
+{
+ AFFINEANIMCMD_LOOP(0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 24),
+ AFFINEANIMCMD_LOOP(10),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D6D8C[] =
+{
+ gSpriteAffineAnim_83D6D2C,
+ gSpriteAffineAnim_83D6D5C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6D94 =
+{
+ .tileTag = 10228,
+ .paletteTag = 10228,
+ .oam = &gOamData_837DF94,
+ .anims = gSpriteAnimTable_83D6D28,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D6D8C,
+ .callback = sub_80CD328,
+};
+
void sub_80CD328(struct Sprite* sprite)
{
sub_8078650(sprite);
@@ -33,7 +90,7 @@ void sub_80CD328(struct Sprite* sprite)
sprite->callback = sub_80CD394;
}
-void sub_80CD394(struct Sprite* sprite)
+static void sub_80CD394(struct Sprite* sprite)
{
sprite->pos2.y = -(sprite->data[0] / 0x28);
sprite->pos2.x = sprite->data[4] / 10;
diff --git a/src/battle/anim/slice.c b/src/battle/anim/slice.c
index 8e7f35f46..4da414cbf 100644
--- a/src/battle/anim/slice.c
+++ b/src/battle/anim/slice.c
@@ -8,8 +8,46 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void AnimCuttingSlice(struct Sprite* sprite);
+void sub_80CC9BC(struct Sprite* sprite);
static void AnimSliceStep(struct Sprite* sprite);
+const union AnimCmd gSpriteAnim_83D6B10[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_FRAME(16, 5),
+ ANIMCMD_FRAME(32, 5),
+ ANIMCMD_FRAME(48, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D6B24[] =
+{
+ gSpriteAnim_83D6B10,
+};
+
+const struct SpriteTemplate gCuttingSliceSpriteTemplate =
+{
+ .tileTag = 10138,
+ .paletteTag = 10138,
+ .oam = &gOamData_837E054,
+ .anims = gSpriteAnimTable_83D6B24,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimCuttingSlice,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6B40 =
+{
+ .tileTag = 10138,
+ .paletteTag = 10138,
+ .oam = &gOamData_837E054,
+ .anims = gSpriteAnimTable_83D6B24,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CC9BC,
+};
+
// Moves the sprite in a diagonally slashing motion across the target mon.
// Used by moves such as MOVE_CUT and MOVE_AERIAL_ACE.
// arg 0: initial x pixel offset
diff --git a/src/battle/anim/smoke.c b/src/battle/anim/smoke.c
deleted file mode 100644
index 7ab873e63..000000000
--- a/src/battle/anim/smoke.c
+++ /dev/null
@@ -1,22 +0,0 @@
-#include "global.h"
-#include "rom_8077ABC.h"
-#include "trig.h"
-#include "battle_anim.h"
-#include "sound.h"
-
-extern s16 gBattleAnimArgs[];
-extern u8 gAnimBankAttacker;
-extern u8 gAnimBankTarget;
-
-// smoke (smoke on the ground around a sprite.)
-// Used in Extremespeed.
-
-void sub_80D1A70(struct Sprite* sprite)
-{
- sprite->invisible = gTasks[sprite->data[0]].data[5];
- if (sprite->animEnded)
- {
- gTasks[sprite->data[0]].data[sprite->data[1]]--;
- DestroySprite(sprite);
- }
-}
diff --git a/src/battle/anim/sonic.c b/src/battle/anim/sonic.c
index a882be73c..0494c42ed 100644
--- a/src/battle/anim/sonic.c
+++ b/src/battle/anim/sonic.c
@@ -3,11 +3,114 @@
#include "trig.h"
#include "battle_anim.h"
#include "sound.h"
+#include "battle.h"
#include "battle_anim_80CA710.h"
extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+extern u8 gBanksBySide[];
+extern u16 gBattleTypeFlags;
+
+extern void sub_80D4CA4(struct Sprite *sprite);
+
+void AnimSonicBoomProjectile(struct Sprite* sprite);
+void sub_80CF8B8(struct Sprite* sprite);
+
+const struct SpriteTemplate gSonicBoomSpriteTemplate =
+{
+ .tileTag = 10003,
+ .paletteTag = 10003,
+ .oam = &gOamData_837E134,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSonicBoomProjectile,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83D74BC =
+{
+ .tileTag = 10003,
+ .paletteTag = 10003,
+ .oam = &gOamData_837E074,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CF8B8,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D74D4[] =
+{
+ AFFINEANIMCMD_FRAME(0x20, 0x20, 0, 0),
+ AFFINEANIMCMD_FRAME(0x7, 0x7, 0, -56),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D74EC[] =
+{
+ AFFINEANIMCMD_FRAME(0x5, 0x5, 0, 10),
+ AFFINEANIMCMD_FRAME(0xFFF6, 0xFFF6, 0, 10),
+ AFFINEANIMCMD_FRAME(0xA, 0xA, 0, 10),
+ AFFINEANIMCMD_FRAME(0xFFF6, 0xFFF6, 0, 10),
+ AFFINEANIMCMD_FRAME(0xA, 0xA, 0, 10),
+ AFFINEANIMCMD_FRAME(0xFFF6, 0xFFF6, 0, 10),
+ AFFINEANIMCMD_FRAME(0xA, 0xA, 0, 10),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D752C[] =
+{
+ gSpriteAffineAnim_83D74D4,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D7530[] =
+{
+ gSpriteAffineAnim_83D74EC,
+};
+
+const struct SpriteTemplate gSupersonicWaveSpriteTemplate =
+{
+ .tileTag = 10163,
+ .paletteTag = 10163,
+ .oam = &gOamData_837E034,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D752C,
+ .callback = TranslateAnimSpriteToTargetMonLocation,
+};
+
+const struct SpriteTemplate gScreechWaveSpriteTemplate =
+{
+ .tileTag = 10164,
+ .paletteTag = 10164,
+ .oam = &gOamData_837E034,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D752C,
+ .callback = TranslateAnimSpriteToTargetMonLocation,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7564 =
+{
+ .tileTag = 10260,
+ .paletteTag = 10260,
+ .oam = &gOamData_837E03C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D752C,
+ .callback = TranslateAnimSpriteToTargetMonLocation,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D757C =
+{
+ .tileTag = 10288,
+ .paletteTag = 10288,
+ .oam = &gOamData_837E034,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D7530,
+ .callback = sub_80D4CA4,
+};
// Moves a projectile towards the target mon. The sprite is rotated to be pointing
// in the same direction it's moving.
@@ -138,3 +241,137 @@ void sub_80CF8B8(struct Sprite* sprite)
sprite->callback = sub_80CF814;
}
}
+
+void sub_80CF9F8(u8 taskId)
+{
+ if (gTasks[taskId].data[1] == 0)
+ DestroyAnimVisualTask(taskId);
+}
+
+void sub_80CFA20(u8 taskId)
+{
+ if (gTasks[taskId].data[0]-- <= 0)
+ {
+ u8 spriteId;
+ struct Sprite* sprite;
+ spriteId = CreateSprite(&gSpriteTemplate_83D74BC, gTasks[taskId].data[9], gTasks[taskId].data[10], gTasks[taskId].data[2] - gTasks[taskId].data[1]);
+ sprite = &gSprites[spriteId];
+ switch (gTasks[taskId].data[4])
+ {
+ case 1:
+ sprite->oam.matrixNum |= 24;
+ break;
+ case 2:
+ sprite->oam.matrixNum = 8;
+ break;
+ }
+
+ sprite->data[0] = gTasks[taskId].data[5] - gTasks[taskId].data[6];
+ sprite->data[7] = taskId;
+ gTasks[taskId].data[gTasks[taskId].data[1] + 13] = spriteId;
+ gTasks[taskId].data[0] = gTasks[taskId].data[3];
+ gTasks[taskId].data[1]++;
+ PlaySE12WithPanning(0x9A, BattleAnimAdjustPanning(-0x3F));
+ if (gTasks[taskId].data[1] > 2)
+ gTasks[taskId].func = sub_80CF9F8;
+ }
+}
+
+void sub_80CFB04(u8 taskId)
+{
+ s16 r9 = 0;
+ s16 r6 = 0;
+ s16 sp1 = 0;
+ s16 sp2 = 0;
+ s16 r4;
+
+ if (IsContest())
+ {
+ gTasks[taskId].data[4] = 2;
+ gBattleAnimArgs[0] = -gBattleAnimArgs[0];
+ if (gBattleAnimArgs[2] & 1)
+ gBattleAnimArgs[2] &= ~1;
+ else
+ gBattleAnimArgs[2] |= 1;
+ }
+ else
+ {
+ if ((gBanksBySide[gAnimBankTarget] & 1) == 0)
+ {
+ gTasks[taskId].data[4] = 1;
+ gBattleAnimArgs[0] = -gBattleAnimArgs[0];
+ gBattleAnimArgs[1] = -gBattleAnimArgs[1];
+ if (gBattleAnimArgs[2] & 1)
+ gBattleAnimArgs[2] &= ~1;
+ else
+ gBattleAnimArgs[2] |= 1;
+ }
+ }
+ r6 = gTasks[taskId].data[9] = GetBattlerSpriteCoord(gAnimBankAttacker, 0);
+ r9 = gTasks[taskId].data[10] = GetBattlerSpriteCoord(gAnimBankAttacker, 1);
+ if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ && IsAnimBankSpriteVisible(gAnimBankTarget ^ 2))
+ {
+ SetAverageBattlerPositions(gAnimBankTarget, 0, &sp1, &sp2);
+ }
+ else
+ {
+ sp1 = GetBattlerSpriteCoord(gAnimBankTarget, 0);
+ sp2 = GetBattlerSpriteCoord(gAnimBankTarget, 1);
+ }
+
+ sp1 = gTasks[taskId].data[11] = sp1 + gBattleAnimArgs[0];
+ sp2 = gTasks[taskId].data[12] = sp2 + gBattleAnimArgs[1];
+ if (sp1 >= r6)
+ r4 = sp1 - r6;
+ else
+ r4 = r6 - sp1;
+
+ gTasks[taskId].data[5] = sub_81174C4(r4, sub_81174E0(gBattleAnimArgs[2] & ~1));
+ gTasks[taskId].data[6] = sub_81174C4(gTasks[taskId].data[5], 0x80);
+ gTasks[taskId].data[7] = gBattleAnimArgs[2];
+ if (sp2 >= r9)
+ {
+ r4 = sp2 - r9;
+ gTasks[taskId].data[8] = sub_81174C4(r4, sub_81174E0(gTasks[taskId].data[5])) & ~1;
+ }
+ else
+ {
+ r4 = r9 - sp2;
+ gTasks[taskId].data[8] = sub_81174C4(r4, sub_81174E0(gTasks[taskId].data[5])) | 1;
+ }
+
+ gTasks[taskId].data[3] = gBattleAnimArgs[3];
+ if (gBattleAnimArgs[4] & 0x80)
+ {
+ gBattleAnimArgs[4] ^= 0x80;
+ if (gBattleAnimArgs[4] >= 64)
+ {
+ u16 var = sub_8079E90(gAnimBankTarget) + (gBattleAnimArgs[4] - 64);
+ gTasks[taskId].data[2] = var;
+ }
+ else
+ {
+ u16 var = sub_8079E90(gAnimBankTarget) - gBattleAnimArgs[4];
+ gTasks[taskId].data[2] = var;
+ }
+ }
+ else
+ {
+ if (gBattleAnimArgs[4] >= 64)
+ {
+ u16 var = sub_8079E90(gAnimBankTarget) + (gBattleAnimArgs[4] - 64);
+ gTasks[taskId].data[2] = var;
+ }
+ else
+ {
+ u16 var = sub_8079E90(gAnimBankTarget) - gBattleAnimArgs[4];
+ gTasks[taskId].data[2] = var;
+ }
+ }
+
+ if (gTasks[taskId].data[2] < 3)
+ gTasks[taskId].data[2] = 3;
+
+ gTasks[taskId].func = sub_80CFA20;
+}
diff --git a/src/battle/anim/sonic_task.c b/src/battle/anim/sonic_task.c
deleted file mode 100644
index dc5d60efa..000000000
--- a/src/battle/anim/sonic_task.c
+++ /dev/null
@@ -1,152 +0,0 @@
-#include "global.h"
-#include "rom_8077ABC.h"
-#include "trig.h"
-#include "battle_anim.h"
-#include "sound.h"
-#include "battle_anim_80CA710.h"
-#include "battle.h"
-
-extern s16 gBattleAnimArgs[];
-extern u8 gAnimBankAttacker;
-extern u8 gAnimBankTarget;
-
-extern u8 gBanksBySide[];
-extern u16 gBattleTypeFlags;
-extern struct SpriteTemplate gSpriteTemplate_83D74BC;
-
-// sonic_task (the task functions for the "sonic" effect.)
-// Used in Air Cutter and Sonic Boom.
-
-void sub_80CF9F8(u8 taskId)
-{
- if (gTasks[taskId].data[1] == 0)
- DestroyAnimVisualTask(taskId);
-}
-
-void sub_80CFA20(u8 taskId)
-{
- if (gTasks[taskId].data[0]-- <= 0)
- {
- u8 spriteId;
- struct Sprite* sprite;
- spriteId = CreateSprite(&gSpriteTemplate_83D74BC, gTasks[taskId].data[9], gTasks[taskId].data[10], gTasks[taskId].data[2] - gTasks[taskId].data[1]);
- sprite = &gSprites[spriteId];
- switch (gTasks[taskId].data[4])
- {
- case 1:
- sprite->oam.matrixNum |= 24;
- break;
- case 2:
- sprite->oam.matrixNum = 8;
- break;
- }
-
- sprite->data[0] = gTasks[taskId].data[5] - gTasks[taskId].data[6];
- sprite->data[7] = taskId;
- gTasks[taskId].data[gTasks[taskId].data[1] + 13] = spriteId;
- gTasks[taskId].data[0] = gTasks[taskId].data[3];
- gTasks[taskId].data[1]++;
- PlaySE12WithPanning(0x9A, BattleAnimAdjustPanning(-0x3F));
- if (gTasks[taskId].data[1] > 2)
- gTasks[taskId].func = sub_80CF9F8;
- }
-}
-
-void sub_80CFB04(u8 taskId)
-{
- s16 r9 = 0;
- s16 r6 = 0;
- s16 sp1 = 0;
- s16 sp2 = 0;
- s16 r4;
-
- if (IsContest())
- {
- gTasks[taskId].data[4] = 2;
- gBattleAnimArgs[0] = -gBattleAnimArgs[0];
- if (gBattleAnimArgs[2] & 1)
- gBattleAnimArgs[2] &= ~1;
- else
- gBattleAnimArgs[2] |= 1;
- }
- else
- {
- if ((gBanksBySide[gAnimBankTarget] & 1) == 0)
- {
- gTasks[taskId].data[4] = 1;
- gBattleAnimArgs[0] = -gBattleAnimArgs[0];
- gBattleAnimArgs[1] = -gBattleAnimArgs[1];
- if (gBattleAnimArgs[2] & 1)
- gBattleAnimArgs[2] &= ~1;
- else
- gBattleAnimArgs[2] |= 1;
- }
- }
- r6 = gTasks[taskId].data[9] = GetBattlerSpriteCoord(gAnimBankAttacker, 0);
- r9 = gTasks[taskId].data[10] = GetBattlerSpriteCoord(gAnimBankAttacker, 1);
- if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
- && IsAnimBankSpriteVisible(gAnimBankTarget ^ 2))
- {
- SetAverageBattlerPositions(gAnimBankTarget, 0, &sp1, &sp2);
- }
- else
- {
- sp1 = GetBattlerSpriteCoord(gAnimBankTarget, 0);
- sp2 = GetBattlerSpriteCoord(gAnimBankTarget, 1);
- }
-
- sp1 = gTasks[taskId].data[11] = sp1 + gBattleAnimArgs[0];
- sp2 = gTasks[taskId].data[12] = sp2 + gBattleAnimArgs[1];
- if (sp1 >= r6)
- r4 = sp1 - r6;
- else
- r4 = r6 - sp1;
-
- gTasks[taskId].data[5] = sub_81174C4(r4, sub_81174E0(gBattleAnimArgs[2] & ~1));
- gTasks[taskId].data[6] = sub_81174C4(gTasks[taskId].data[5], 0x80);
- gTasks[taskId].data[7] = gBattleAnimArgs[2];
- if (sp2 >= r9)
- {
- r4 = sp2 - r9;
- gTasks[taskId].data[8] = sub_81174C4(r4, sub_81174E0(gTasks[taskId].data[5])) & ~1;
- }
- else
- {
- r4 = r9 - sp2;
- gTasks[taskId].data[8] = sub_81174C4(r4, sub_81174E0(gTasks[taskId].data[5])) | 1;
- }
-
- gTasks[taskId].data[3] = gBattleAnimArgs[3];
- if (gBattleAnimArgs[4] & 0x80)
- {
- gBattleAnimArgs[4] ^= 0x80;
- if (gBattleAnimArgs[4] >= 64)
- {
- u16 var = sub_8079E90(gAnimBankTarget) + (gBattleAnimArgs[4] - 64);
- gTasks[taskId].data[2] = var;
- }
- else
- {
- u16 var = sub_8079E90(gAnimBankTarget) - gBattleAnimArgs[4];
- gTasks[taskId].data[2] = var;
- }
- }
- else
- {
- if (gBattleAnimArgs[4] >= 64)
- {
- u16 var = sub_8079E90(gAnimBankTarget) + (gBattleAnimArgs[4] - 64);
- gTasks[taskId].data[2] = var;
- }
- else
- {
- u16 var = sub_8079E90(gAnimBankTarget) - gBattleAnimArgs[4];
- gTasks[taskId].data[2] = var;
- }
- }
-
- if (gTasks[taskId].data[2] < 3)
- gTasks[taskId].data[2] = 3;
-
- gTasks[taskId].func = sub_80CFA20;
-}
diff --git a/src/battle/anim/spin_finger.c b/src/battle/anim/spin_finger.c
deleted file mode 100644
index 1ce3aa0d0..000000000
--- a/src/battle/anim/spin_finger.c
+++ /dev/null
@@ -1,73 +0,0 @@
-#include "global.h"
-#include "rom_8077ABC.h"
-#include "trig.h"
-#include "battle_anim.h"
-#include "sound.h"
-
-extern s16 gBattleAnimArgs[];
-extern u8 gAnimBankAttacker;
-extern u8 gAnimBankTarget;
-
-extern void sub_80CF088(struct Sprite* sprite);
-static void sub_80CF138(struct Sprite* sprite);
-static void sub_80CF158(struct Sprite* sprite);
-
-// spin_finger
-// Used in Follow Me.
-
-void sub_80CF0BC(struct Sprite* sprite)
-{
- u8 bank;
- if (gBattleAnimArgs[0] == 0)
- bank = gAnimBankAttacker;
- else
- bank = gAnimBankTarget;
-
- sprite->pos1.x = GetBattlerSpriteCoord(bank, 0);
- sprite->pos1.y = sub_807A100(bank, 2);
- if (sprite->pos1.y <= 9)
- sprite->pos1.y = 10;
-
- sprite->data[0] = 1;
- sprite->data[1] = 0;
- sprite->data[2] = sprite->subpriority;
- sprite->data[3] = sprite->subpriority + 4;
- sprite->data[4] = 0;
- StoreSpriteCallbackInData(sprite, sub_80CF138);
- sprite->callback = sub_80785E4;
-}
-
-void sub_80CF138(struct Sprite* sprite)
-{
- if (++sprite->data[4] > 12)
- sprite->callback = sub_80CF158;
-}
-
-void sub_80CF158(struct Sprite* sprite)
-{
- s16 temp;
- s16 temp2;
- sprite->data[1] += 4;
- if (sprite->data[1] > 0xFE)
- {
- if (--sprite->data[0] == 0)
- {
- sprite->pos2.x = 0;
- sprite->callback = sub_80CF088;
- return;
- }
- else
- {
- sprite->data[1] &= 0xFF;
- }
- }
-
- if (sprite->data[1] > 0x4F)
- sprite->subpriority = sprite->data[3];
-
- if (sprite->data[1] > 0x9F)
- sprite->subpriority = sprite->data[2];
-
- temp = gSineTable[sprite->data[1]];
- sprite->pos2.x = (temp2 = temp >> 3) + (temp2 >> 1);
-}
diff --git a/src/battle/anim/spit.c b/src/battle/anim/spit.c
index 36fcb788c..792d7e0eb 100644
--- a/src/battle/anim/spit.c
+++ b/src/battle/anim/spit.c
@@ -8,10 +8,35 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80D28AC(struct Sprite* sprite);
+
// spit (hurls sprites outward from the pokemon. Similar to orbit_fast, but takes another argument.)
// Used in Spit Up.
-void sub_80D287C(struct Sprite* sprite)
+const union AffineAnimCmd gSpriteAffineAnim_83D7B44[] =
+{
+ AFFINEANIMCMD_FRAME(0x80, 0x80, 0, 0),
+ AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 1),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D7B5C[] =
+{
+ gSpriteAffineAnim_83D7B44,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7B60 =
+{
+ .tileTag = 10237,
+ .paletteTag = 10237,
+ .oam = &gOamData_837DFE4,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D7B5C,
+ .callback = sub_80D28AC,
+};
+
+static void sub_80D287C(struct Sprite* sprite)
{
sprite->pos2.x += sprite->data[0];
sprite->pos2.y += sprite->data[1];
diff --git a/src/battle/anim/splash.c b/src/battle/anim/splash.c
index d6caaf0f6..c01748953 100644
--- a/src/battle/anim/splash.c
+++ b/src/battle/anim/splash.c
@@ -8,13 +8,19 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
-extern struct AffineAnimFrameCmd gUnknown_083D76F4;
-
static void sub_80D07AC(u8 taskId);
// splash (splash effect of hopping up and down)
// Used in Splash, Mud Sport, and Sketch.
+const union AffineAnimCmd gSpriteAffineAnim_83D76F4[] =
+{
+ AFFINEANIMCMD_FRAME(-6, 4, 0, 8),
+ AFFINEANIMCMD_FRAME(10, -10, 0, 8),
+ AFFINEANIMCMD_FRAME(-4, 6, 0, 8),
+ AFFINEANIMCMD_END,
+};
+
void sub_80D074C(u8 taskId)
{
struct Task* task = &gTasks[taskId];
@@ -30,7 +36,7 @@ void sub_80D074C(u8 taskId)
task->data[2] = gBattleAnimArgs[1];
task->data[3] = 0;
task->data[4] = 0;
- sub_80798F4(task, spriteId, &gUnknown_083D76F4);
+ sub_80798F4(task, spriteId, &gSpriteAffineAnim_83D76F4);
task->func = sub_80D07AC;
}
}
@@ -78,7 +84,7 @@ void sub_80D07AC(u8 taskId)
}
else
{
- sub_80798F4(task, task->data[0], &gUnknown_083D76F4);
+ sub_80798F4(task, task->data[0], &gSpriteAffineAnim_83D76F4);
task->data[1] = 0;
}
}
diff --git a/src/battle/anim/startle.c b/src/battle/anim/startle.c
index 95462bd9f..b23c7ac9e 100644
--- a/src/battle/anim/startle.c
+++ b/src/battle/anim/startle.c
@@ -8,18 +8,23 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
-extern struct AffineAnimFrameCmd gUnknown_083D7A98;
-
// startle (the pokemon sprite shrivels upward and restores after a brief time.)
// Used in Fake Out, Trick, and Astonish.
+const union AffineAnimCmd gSpriteAffineAnim_83D7A98[] =
+{
+ AFFINEANIMCMD_FRAME(0x000A, 0xFFF3, 0x00, 0x0A),
+ AFFINEANIMCMD_FRAME(0xFFF6, 0x000D, 0x00, 0x0A),
+ AFFINEANIMCMD_END,
+};
+
// opponent
void sub_80D1E38(u8 taskId)
{
u8 spriteId = GetAnimBattlerSpriteId(1);
if (++gTasks[taskId].data[0] == 1)
{
- sub_80798F4(&gTasks[taskId], GetAnimBattlerSpriteId(1), &gUnknown_083D7A98);
+ sub_80798F4(&gTasks[taskId], GetAnimBattlerSpriteId(1), &gSpriteAffineAnim_83D7A98);
gSprites[spriteId].pos2.x = 4;
}
else
@@ -40,7 +45,7 @@ void sub_80D1EC8(u8 taskId)
u8 spriteId = GetAnimBattlerSpriteId(0);
if (++gTasks[taskId].data[0] == 1)
{
- sub_80798F4(&gTasks[taskId], GetAnimBattlerSpriteId(0), &gUnknown_083D7A98);
+ sub_80798F4(&gTasks[taskId], GetAnimBattlerSpriteId(0), &gSpriteAffineAnim_83D7A98);
gSprites[spriteId].pos2.x = 4;
}
else
diff --git a/src/battle/anim/strike.c b/src/battle/anim/strike.c
index 775485a79..79dd833a9 100644
--- a/src/battle/anim/strike.c
+++ b/src/battle/anim/strike.c
@@ -8,11 +8,52 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CE670(struct Sprite* sprite);
static void sub_80CE798(struct Sprite* sprite);
// strike (A red strike towards the opponent.)
// Used in Horn Attack, Fury Attack, and Horn Drill.
+const union AnimCmd gSpriteAnim_83D7010[] =
+{
+ ANIMCMD_FRAME(0, 2),
+ ANIMCMD_FRAME(16, 2),
+ ANIMCMD_FRAME(32, 2),
+ ANIMCMD_FRAME(48, 3),
+ ANIMCMD_FRAME(64, 5),
+ ANIMCMD_FRAME(80, 3),
+ ANIMCMD_FRAME(96, 2),
+ ANIMCMD_FRAME(0, 2),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D7034[] =
+{
+ gSpriteAnim_83D7010,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7038 =
+{
+ .tileTag = 10031,
+ .paletteTag = 10031,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D7034,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80793C4,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7050 =
+{
+ .tileTag = 10020,
+ .paletteTag = 10020,
+ .oam = &gOamData_837DF34,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CE670,
+};
+
void sub_80CE670(struct Sprite* sprite)
{
if (gBattleAnimArgs[2] <= 1)
@@ -60,7 +101,7 @@ void sub_80CE670(struct Sprite* sprite)
sprite->callback = sub_80CE798;
}
-void sub_80CE798(struct Sprite* sprite)
+static void sub_80CE798(struct Sprite* sprite)
{
sprite->data[2] += sprite->data[3];
sprite->data[4] += sprite->data[5];
diff --git a/src/battle/anim/struggle.c b/src/battle/anim/struggle.c
index 6a1355e1b..2bcf3727e 100644
--- a/src/battle/anim/struggle.c
+++ b/src/battle/anim/struggle.c
@@ -7,8 +7,44 @@ extern s16 gBattleAnimArgs[8];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80D2C38(struct Sprite *sprite);
static void sub_80D2CC4(struct Sprite *);
+const union AnimCmd gSpriteAnim_83D7C60[] =
+{
+ ANIMCMD_FRAME(0, 8),
+ ANIMCMD_FRAME(16, 8),
+ ANIMCMD_FRAME(32, 8),
+ ANIMCMD_FRAME(16, 8),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D7C74[] =
+{
+ ANIMCMD_FRAME(16, 8, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 8, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 8, .hFlip = TRUE),
+ ANIMCMD_FRAME(0, 8, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D7C88[] =
+{
+ gSpriteAnim_83D7C60,
+ gSpriteAnim_83D7C74,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7C90 =
+{
+ .tileTag = 10215,
+ .paletteTag = 10215,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D7C88,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D2C38,
+};
+
void sub_80D2C38(struct Sprite *sprite)
{
if (gBattleAnimArgs[2] == 0)
diff --git a/src/battle/anim/sunlight.c b/src/battle/anim/sunlight.c
index 88112c74a..7efc85b37 100644
--- a/src/battle/anim/sunlight.c
+++ b/src/battle/anim/sunlight.c
@@ -2,9 +2,34 @@
#include "battle_anim.h"
#include "rom_8077ABC.h"
+void sub_80D517C(struct Sprite *sprite);
+
// sunlight (creates sunlight orbs)
// Used in Sunny Day
+const union AffineAnimCmd gSpriteAffineAnim_83D9594[] =
+{
+ AFFINEANIMCMD_FRAME(0x50, 0x50, 0, 0),
+ AFFINEANIMCMD_FRAME(0x2, 0x2, 10, 1),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D95AC[] =
+{
+ gSpriteAffineAnim_83D9594,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D95B0 =
+{
+ .tileTag = 10157,
+ .paletteTag = 10157,
+ .oam = &gOamData_837E0B4,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D95AC,
+ .callback = sub_80D517C,
+};
+
void sub_80D517C(struct Sprite *sprite)
{
sprite->pos1.x = 0;
diff --git a/src/battle/anim/swipe.c b/src/battle/anim/swipe.c
index 922b11a5f..df7a0e91f 100644
--- a/src/battle/anim/swipe.c
+++ b/src/battle/anim/swipe.c
@@ -4,6 +4,43 @@
extern s16 gBattleAnimArgs[8];
+void sub_80D2BE8(struct Sprite *sprite);
+
+const union AnimCmd gSpriteAnim_83D7C18[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(16, 4),
+ ANIMCMD_FRAME(32, 4),
+ ANIMCMD_FRAME(48, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D7C2C[] =
+{
+ ANIMCMD_FRAME(0, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(48, 4, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D7C40[] =
+{
+ gSpriteAnim_83D7C18,
+ gSpriteAnim_83D7C2C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7C48 =
+{
+ .tileTag = 10222,
+ .paletteTag = 10222,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D7C40,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D2BE8,
+};
+
void sub_80D2BE8(struct Sprite *sprite)
{
if (sprite->data[0] == 0)
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/sword.c b/src/battle/anim/sword.c
index 3367cca07..7fb410224 100644
--- a/src/battle/anim/sword.c
+++ b/src/battle/anim/sword.c
@@ -8,11 +8,36 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CF690(struct Sprite* sprite);
static void sub_80CF6B4(struct Sprite* sprite);
// sword (sword appears and floats upward.)
// Used in Swords Dance.
+const union AffineAnimCmd gSpriteAffineAnim_83D7468[] =
+{
+ AFFINEANIMCMD_FRAME(0x10, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0x14, 0x0, 0, 12),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 32),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D7488[] =
+{
+ gSpriteAffineAnim_83D7468,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D748C =
+{
+ .tileTag = 10005,
+ .paletteTag = 10005,
+ .oam = &gOamData_837E0FC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D7488,
+ .callback = sub_80CF690,
+};
+
void sub_80CF690(struct Sprite* sprite)
{
InitAnimSpritePos(sprite, 0);
@@ -20,7 +45,7 @@ void sub_80CF690(struct Sprite* sprite)
StoreSpriteCallbackInData(sprite, sub_80CF6B4);
}
-void sub_80CF6B4(struct Sprite* sprite)
+static void sub_80CF6B4(struct Sprite* sprite)
{
sprite->data[0] = 6;
sprite->data[2] = sprite->pos1.x;
diff --git a/src/battle/anim/taunt_finger.c b/src/battle/anim/taunt_finger.c
deleted file mode 100644
index c512f8cf4..000000000
--- a/src/battle/anim/taunt_finger.c
+++ /dev/null
@@ -1,56 +0,0 @@
-#include "global.h"
-#include "rom_8077ABC.h"
-#include "trig.h"
-#include "battle_anim.h"
-#include "sound.h"
-
-extern s16 gBattleAnimArgs[];
-extern u8 gAnimBankAttacker;
-extern u8 gAnimBankTarget;
-
-extern void sub_80CEF44(u8 bank, struct Sprite* sprite);
-static void sub_80CF228(struct Sprite* sprite);
-static void sub_80CF264(struct Sprite* sprite);
-
-// taunt_finger
-// Used in Taunt.
-
-void sub_80CF1C8(struct Sprite* sprite)
-{
- u8 bank;
- if (gBattleAnimArgs[0] == 0)
- bank = gAnimBankAttacker;
- else
- bank = gAnimBankTarget;
-
- sub_80CEF44(bank, sprite);
- if (GetBattlerSide(bank) == 0)
- {
- StartSpriteAnim(sprite, 0);
- sprite->data[0] = 2;
- }
- else
- {
- StartSpriteAnim(sprite, 1);
- sprite->data[0] = 3;
- }
-
- sprite->callback = sub_80CF228;
-}
-
-void sub_80CF228(struct Sprite* sprite)
-{
- if (++sprite->data[1] > 10)
- {
- sprite->data[1] = 0;
- StartSpriteAnim(sprite, sprite->data[0]);
- StoreSpriteCallbackInData(sprite, sub_80CF264);
- sprite->callback = sub_8078600;
- }
-}
-
-void sub_80CF264(struct Sprite* sprite)
-{
- if (++sprite->data[1] > 5)
- 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/thought.c b/src/battle/anim/thought.c
index 5163cbfad..d39520dac 100644
--- a/src/battle/anim/thought.c
+++ b/src/battle/anim/thought.c
@@ -8,11 +8,67 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CEF9C(struct Sprite* sprite);
static void sub_80CF008(struct Sprite* sprite);
// thought (thought bubble)
// Used in Metronome and Taunt.
+const union AnimCmd gSpriteAnim_83D71C0[] =
+{
+ ANIMCMD_FRAME(0, 2, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 2, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 2, .hFlip = TRUE),
+ ANIMCMD_FRAME(48, 2, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D71D4[] =
+{
+ ANIMCMD_FRAME(48, 2, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 2, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 2, .hFlip = TRUE),
+ ANIMCMD_FRAME(0, 2, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D71E8[] =
+{
+ ANIMCMD_FRAME(0, 2),
+ ANIMCMD_FRAME(16, 2),
+ ANIMCMD_FRAME(32, 2),
+ ANIMCMD_FRAME(48, 2),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D71FC[] =
+{
+ ANIMCMD_FRAME(48, 2),
+ ANIMCMD_FRAME(32, 2),
+ ANIMCMD_FRAME(16, 2),
+ ANIMCMD_FRAME(0, 2),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D7210[] =
+{
+ gSpriteAnim_83D71C0,
+ gSpriteAnim_83D71E8,
+ gSpriteAnim_83D71D4,
+ gSpriteAnim_83D71FC,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7220 =
+{
+ .tileTag = 10209,
+ .paletteTag = 10209,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D7210,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CEF9C,
+};
+
void sub_80CEF44(u8 bank, struct Sprite* sprite)
{
if (GetBattlerSide(bank) == 0)
@@ -41,7 +97,7 @@ void sub_80CEF9C(struct Sprite* sprite)
sprite->callback = sub_8078600;
}
-void sub_80CF008(struct Sprite* sprite)
+static void sub_80CF008(struct Sprite* sprite)
{
if (--sprite->data[0] == 0)
{
diff --git a/src/battle/anim/thrashing.c b/src/battle/anim/thrashing.c
index bc1fc4842..38dccb83f 100644
--- a/src/battle/anim/thrashing.c
+++ b/src/battle/anim/thrashing.c
@@ -8,14 +8,22 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
-extern struct AffineAnimFrameCmd gUnknown_083D77B0;
-
static void sub_80D0A8C(u8 taskId);
static void sub_80D0B3C(u8 taskId);
// thrashing (the movement of the Pokemon left/right repeatedly, with up/down movements below.)
// Used by Thrash.
+const union AffineAnimCmd gSpriteAffineAnim_83D77B0[] =
+{
+ AFFINEANIMCMD_FRAME(-10, 9, 0, 7),
+ AFFINEANIMCMD_FRAME(20, -20, 0, 7),
+ AFFINEANIMCMD_FRAME(-20, 20, 0, 7),
+ AFFINEANIMCMD_FRAME(10, -9, 0, 7),
+ AFFINEANIMCMD_LOOP(2),
+ AFFINEANIMCMD_END,
+};
+
// left/right movements
void sub_80D0A4C(u8 taskId)
{
@@ -23,11 +31,11 @@ void sub_80D0A4C(u8 taskId)
u8 spriteId = GetAnimBattlerSpriteId(0);
task->data[0] = spriteId;
task->data[1] = 0;
- sub_80798F4(task, spriteId, &gUnknown_083D77B0);
+ sub_80798F4(task, spriteId, &gSpriteAffineAnim_83D77B0);
task->func = sub_80D0A8C;
}
-void sub_80D0A8C(u8 taskId)
+static void sub_80D0A8C(u8 taskId)
{
struct Task* task = &gTasks[taskId];
if (!sub_807992C(task))
@@ -54,7 +62,7 @@ void sub_80D0AB8(u8 taskId)
task->func = sub_80D0B3C;
}
-void sub_80D0B3C(u8 taskId)
+static void sub_80D0B3C(u8 taskId)
{
struct Task* task = &gTasks[taskId];
if (++task->data[7] > 2)
diff --git a/src/battle/anim/thunder.c b/src/battle/anim/thunder.c
index 70d4dc232..9cd04e61f 100644
--- a/src/battle/anim/thunder.c
+++ b/src/battle/anim/thunder.c
@@ -7,11 +7,38 @@ extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
extern u16 gBattleTypeFlags;
+void sub_80D61C8(struct Sprite *sprite);
static void sub_80D6218(struct Sprite *);
// thunder (positions the lightning bolts)
// Used in Thunder, Thunder Punch, and Tri Attack.
+const union AnimCmd gSpriteAnim_83D97B4[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_FRAME(16, 5),
+ ANIMCMD_FRAME(32, 8),
+ ANIMCMD_FRAME(48, 5),
+ ANIMCMD_FRAME(64, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D97CC[] =
+{
+ gSpriteAnim_83D97B4,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D97D0 =
+{
+ .tileTag = 10037,
+ .paletteTag = 10037,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D97CC,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D61C8,
+};
+
void sub_80D61C8(struct Sprite *sprite)
{
if (GetBattlerSide(gAnimBankAttacker) != 0)
diff --git a/src/battle/anim/tile.c b/src/battle/anim/tile.c
new file mode 100644
index 000000000..a10850808
--- /dev/null
+++ b/src/battle/anim/tile.c
@@ -0,0 +1,219 @@
+#include "global.h"
+#include "battle_anim.h"
+#include "battle_interface.h"
+#include "rom_8077ABC.h"
+#include "trig.h"
+#include "sound.h"
+
+extern s16 gBattleAnimArgs[];
+extern u8 gAnimBankAttacker;
+extern u8 gAnimBankTarget;
+extern u8 gBattlersCount;
+extern u8 gHealthboxIDs[];
+
+void sub_80CE09C(struct Sprite* sprite);
+void sub_80CE17C(struct Sprite* sprite);
+static void sub_80CE1AC(struct Sprite* sprite);
+
+// tile_in (flips a white tile from the scene into facing the player.)
+// Used in Conversion.
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6F08 =
+{
+ .tileTag = 10017,
+ .paletteTag = 10017,
+ .oam = &gOamData_837DF24,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = TranslateAnimSpriteToTargetMonLocation,
+};
+
+const union AnimCmd gSpriteAnim_83D6F20[] =
+{
+ 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_83D6F38[] =
+{
+ gSpriteAnim_83D6F20,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6F3C =
+{
+ .tileTag = 10030,
+ .paletteTag = 10030,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D6F38,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80793C4,
+};
+
+const union AnimCmd gSpriteAnim_83D6F54[] =
+{
+ ANIMCMD_FRAME(3, 5),
+ ANIMCMD_FRAME(2, 5),
+ ANIMCMD_FRAME(1, 5),
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D6F68[] =
+{
+ gSpriteAnim_83D6F54,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D6F6C[] =
+{
+ AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D6F7C[] =
+{
+ gSpriteAffineAnim_83D6F6C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6F80 =
+{
+ .tileTag = 10018,
+ .paletteTag = 10018,
+ .oam = &gOamData_837E104,
+ .anims = gSpriteAnimTable_83D6F68,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D6F7C,
+ .callback = sub_80CE09C,
+};
+
+const union AnimCmd gSpriteAnim_83D6F98[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_FRAME(1, 5),
+ ANIMCMD_FRAME(2, 5),
+ ANIMCMD_FRAME(3, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D6FAC[] =
+{
+ gSpriteAnim_83D6F98,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6FB0 =
+{
+ .tileTag = 10018,
+ .paletteTag = 10018,
+ .oam = &gOamData_837E104,
+ .anims = gSpriteAnimTable_83D6FAC,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D6F7C,
+ .callback = sub_80CE17C,
+};
+
+void sub_80CE09C(struct Sprite* sprite)
+{
+ if (sprite->data[0] == 0)
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 0) + gBattleAnimArgs[0];
+ sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 1) + gBattleAnimArgs[1];
+ if (IsContest())
+ sprite->pos1.y += 10;
+ sprite->data[0]++;
+ }
+
+ if ((u16)gBattleAnimArgs[7] == 0xFFFF)
+ DestroyAnimSprite(sprite);
+}
+
+void sub_80CE108(u8 taskId)
+{
+ if (gTasks[taskId].data[2] == 1)
+ {
+ gBattleAnimArgs[7] = 0xFFFF;
+ gTasks[taskId].data[2]++;
+ }
+ else if (gTasks[taskId].data[2] == 2)
+ {
+ DestroyAnimVisualTask(taskId);
+ }
+ else
+ {
+ if (++gTasks[taskId].data[0] == 4)
+ {
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].data[1]++;
+ REG_BLDALPHA = (gTasks[taskId].data[1] << 8) | (16 - gTasks[taskId].data[1]);
+ if (gTasks[taskId].data[1] == 16)
+ gTasks[taskId].data[2]++;
+ }
+ }
+}
+
+void sub_80CE17C(struct Sprite* sprite)
+{
+ sub_8078764(sprite, 0);
+ sprite->animPaused = 1;
+ sprite->data[0] = gBattleAnimArgs[2];
+ sprite->callback = sub_80CE1AC;
+}
+
+static void sub_80CE1AC(struct Sprite* sprite)
+{
+ if (sprite->data[0])
+ {
+ sprite->data[0]--;
+ }
+ else
+ {
+ sprite->animPaused = 0;
+ sprite->data[0] = 30;
+ sprite->data[2] = GetBattlerSpriteCoord(gAnimBankAttacker, 2);
+ sprite->data[4] = GetBattlerSpriteCoord(gAnimBankAttacker, 3);
+ sprite->callback = StartTranslateAnimSpriteByDeltas;
+ StoreSpriteCallbackInData(sprite, DestroyAnimSprite);
+ }
+}
+
+void sub_80CE210(u8 taskId)
+{
+ if (++gTasks[taskId].data[0] == 4)
+ {
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].data[1]++;
+ REG_BLDALPHA = gTasks[taskId].data[1] | ((16 - gTasks[taskId].data[1]) << 8);
+ if (gTasks[taskId].data[1] == 16)
+ DestroyAnimVisualTask(taskId);
+ }
+}
+
+void unref_sub_80CE260(u8 taskId)
+{
+ u8 i;
+ for (i = 0; i < gBattlersCount; i++)
+ {
+ if (gBattleAnimArgs[0] == 1 && GetBattlerSide(i) == 0)
+ sub_8043DB0(gHealthboxIDs[i]);
+
+ if (gBattleAnimArgs[1] == 1 && GetBattlerSide(i) == 1)
+ sub_8043DB0(gHealthboxIDs[i]);
+ }
+
+ DestroyAnimVisualTask(taskId);
+}
+
+void unref_sub_80CE2D4(u8 taskId)
+{
+ u8 i;
+ for (i = 0; i < gBattlersCount; i++)
+ {
+ sub_8043DFC(gHealthboxIDs[i]);
+ }
+
+ DestroyAnimVisualTask(taskId);
+}
diff --git a/src/battle/anim/tile_in.c b/src/battle/anim/tile_in.c
deleted file mode 100644
index b1d804317..000000000
--- a/src/battle/anim/tile_in.c
+++ /dev/null
@@ -1,51 +0,0 @@
-#include "global.h"
-#include "rom_8077ABC.h"
-#include "trig.h"
-#include "battle_anim.h"
-#include "sound.h"
-
-extern s16 gBattleAnimArgs[];
-extern u8 gAnimBankAttacker;
-extern u8 gAnimBankTarget;
-
-// tile_in (flips a white tile from the scene into facing the player.)
-// Used in Conversion.
-
-void sub_80CE09C(struct Sprite* sprite)
-{
- if (sprite->data[0] == 0)
- {
- sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 0) + gBattleAnimArgs[0];
- sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 1) + gBattleAnimArgs[1];
- if (IsContest())
- sprite->pos1.y += 10;
- sprite->data[0]++;
- }
-
- if ((u16)gBattleAnimArgs[7] == 0xFFFF)
- DestroyAnimSprite(sprite);
-}
-
-void sub_80CE108(u8 taskId)
-{
- if (gTasks[taskId].data[2] == 1)
- {
- gBattleAnimArgs[7] = 0xFFFF;
- gTasks[taskId].data[2]++;
- }
- else if (gTasks[taskId].data[2] == 2)
- {
- DestroyAnimVisualTask(taskId);
- }
- else
- {
- if (++gTasks[taskId].data[0] == 4)
- {
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].data[1]++;
- REG_BLDALPHA = (gTasks[taskId].data[1] << 8) | (16 - gTasks[taskId].data[1]);
- if (gTasks[taskId].data[1] == 16)
- gTasks[taskId].data[2]++;
- }
- }
-}
diff --git a/src/battle/anim/tile_out.c b/src/battle/anim/tile_out.c
deleted file mode 100644
index 04f51e556..000000000
--- a/src/battle/anim/tile_out.c
+++ /dev/null
@@ -1,81 +0,0 @@
-#include "global.h"
-#include "rom_8077ABC.h"
-#include "trig.h"
-#include "battle_anim.h"
-#include "sound.h"
-#include "battle_interface.h"
-
-extern s16 gBattleAnimArgs[];
-extern u8 gAnimBankAttacker;
-extern u8 gAnimBankTarget;
-
-extern u8 gBattlersCount;
-extern u8 gHealthboxIDs[];
-
-static void sub_80CE1AC(struct Sprite* sprite);
-
-// tile_out (makes a tile fly inward into a center point.)
-// Used in Conversion 2.
-
-void sub_80CE17C(struct Sprite* sprite)
-{
- sub_8078764(sprite, 0);
- sprite->animPaused = 1;
- sprite->data[0] = gBattleAnimArgs[2];
- sprite->callback = sub_80CE1AC;
-}
-
-void sub_80CE1AC(struct Sprite* sprite)
-{
- if (sprite->data[0])
- {
- sprite->data[0]--;
- }
- else
- {
- sprite->animPaused = 0;
- sprite->data[0] = 30;
- sprite->data[2] = GetBattlerSpriteCoord(gAnimBankAttacker, 2);
- sprite->data[4] = GetBattlerSpriteCoord(gAnimBankAttacker, 3);
- sprite->callback = StartTranslateAnimSpriteByDeltas;
- StoreSpriteCallbackInData(sprite, DestroyAnimSprite);
- }
-}
-
-void sub_80CE210(u8 taskId)
-{
- if (++gTasks[taskId].data[0] == 4)
- {
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].data[1]++;
- REG_BLDALPHA = gTasks[taskId].data[1] | ((16 - gTasks[taskId].data[1]) << 8);
- if (gTasks[taskId].data[1] == 16)
- DestroyAnimVisualTask(taskId);
- }
-}
-
-void unref_sub_80CE260(u8 taskId)
-{
- u8 i;
- for (i = 0; i < gBattlersCount; i++)
- {
- if (gBattleAnimArgs[0] == 1 && GetBattlerSide(i) == 0)
- sub_8043DB0(gHealthboxIDs[i]);
-
- if (gBattleAnimArgs[1] == 1 && GetBattlerSide(i) == 1)
- sub_8043DB0(gHealthboxIDs[i]);
- }
-
- DestroyAnimVisualTask(taskId);
-}
-
-void unref_sub_80CE2D4(u8 taskId)
-{
- u8 i;
- for (i = 0; i < gBattlersCount; i++)
- {
- sub_8043DFC(gHealthboxIDs[i]);
- }
-
- DestroyAnimVisualTask(taskId);
-}
diff --git a/src/battle/anim/twinkle.c b/src/battle/anim/twinkle.c
index 34082cc2f..bfe0c8da2 100644
--- a/src/battle/anim/twinkle.c
+++ b/src/battle/anim/twinkle.c
@@ -8,11 +8,37 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CE36C(struct Sprite* sprite);
static void sub_80CE3B0(struct Sprite* sprite);
// twinkle (a tiny twinkling star appears above the Pokemon and descends toward the Pokemon.)
// Used in Moonlight.
+const union AnimCmd gSpriteAnim_83D6FE0[] =
+{
+ ANIMCMD_FRAME(0, 8),
+ ANIMCMD_FRAME(4, 8),
+ ANIMCMD_FRAME(8, 8),
+ ANIMCMD_FRAME(12, 8),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D6FF4[] =
+{
+ gSpriteAnim_83D6FE0,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6FF8 =
+{
+ .tileTag = 10195,
+ .paletteTag = 10195,
+ .oam = &gOamData_837DF2C,
+ .anims = gSpriteAnimTable_83D6FF4,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CE36C,
+};
+
void sub_80CE36C(struct Sprite* sprite)
{
sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2) + gBattleAnimArgs[0];
@@ -25,7 +51,7 @@ void sub_80CE36C(struct Sprite* sprite)
sprite->callback = sub_80CE3B0;
}
-void sub_80CE3B0(struct Sprite* sprite)
+static void sub_80CE3B0(struct Sprite* sprite)
{
if (++sprite->data[1] > 1)
{
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/unused_2.c b/src/battle/anim/unused_2.c
index 71e5e92d7..f4ebe0e74 100644
--- a/src/battle/anim/unused_2.c
+++ b/src/battle/anim/unused_2.c
@@ -8,11 +8,97 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CCC50(struct Sprite* sprite);
static void sub_80CCCB4(struct Sprite* sprite);
// unused_2 (unknown effect with music notes.)
// possibly another unused effect. Unknown usage.
+const union AnimCmd gSpriteAnim_83D6B58[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D6B60[] =
+{
+ ANIMCMD_FRAME(4, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D6B68[] =
+{
+ ANIMCMD_FRAME(8, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D6B70[] =
+{
+ ANIMCMD_FRAME(12, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D6B78[] =
+{
+ ANIMCMD_FRAME(16, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D6B80[] =
+{
+ ANIMCMD_FRAME(20, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D6B88[] =
+{
+ ANIMCMD_FRAME(0, 1, .vFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D6B90[] =
+{
+ ANIMCMD_FRAME(4, 1, .vFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D6B98[] =
+{
+ ANIMCMD_FRAME(8, 1, .vFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D6BA0[] =
+{
+ ANIMCMD_FRAME(12, 1, .vFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D6BA8[] =
+{
+ gSpriteAnim_83D6B58,
+ gSpriteAnim_83D6B60,
+ gSpriteAnim_83D6B68,
+ gSpriteAnim_83D6B70,
+ gSpriteAnim_83D6B78,
+ gSpriteAnim_83D6B80,
+ gSpriteAnim_83D6B88,
+ gSpriteAnim_83D6B90,
+ gSpriteAnim_83D6B98,
+ gSpriteAnim_83D6BA0,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83D6BD0 =
+{
+ .tileTag = 10072,
+ .paletteTag = 10072,
+ .oam = &gOamData_837DF2C,
+ .anims = gSpriteAnimTable_83D6BA8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CCC50,
+};
+
void unref_sub_80CCB6C(struct Sprite* sprite)
{
if (sprite->data[2] > 1)
@@ -62,7 +148,7 @@ void sub_80CCC50(struct Sprite* sprite)
sub_80CCCB4(sprite);
}
-void sub_80CCCB4(struct Sprite* sprite)
+static void sub_80CCCB4(struct Sprite* sprite)
{
sprite->pos2.x = Cos(sprite->data[0], 100);
sprite->pos2.y = Sin(sprite->data[0], 20);
diff --git a/src/battle/anim/unused_3.c b/src/battle/anim/unused_3.c
index a89ed0246..1c3ab978e 100644
--- a/src/battle/anim/unused_3.c
+++ b/src/battle/anim/unused_3.c
@@ -8,10 +8,53 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CD274(struct Sprite* sprite);
static void sub_80CD2D4(struct Sprite* sprite);
// unused_3 (seems to be some sort of popping effect with a growing diamond shape)
-// yet another unused effect...
+
+const union AnimCmd gSpriteAnim_83D6CB8[] =
+{
+ ANIMCMD_FRAME(0, 10),
+ ANIMCMD_FRAME(4, 10),
+ ANIMCMD_FRAME(8, 10),
+ ANIMCMD_FRAME(12, 10),
+ ANIMCMD_FRAME(16, 26),
+ ANIMCMD_FRAME(16, 5),
+ ANIMCMD_FRAME(20, 5),
+ ANIMCMD_FRAME(24, 15),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D6CDC[] =
+{
+ ANIMCMD_FRAME(0, 10, .hFlip = TRUE),
+ ANIMCMD_FRAME(4, 10, .hFlip = TRUE),
+ ANIMCMD_FRAME(8, 10, .hFlip = TRUE),
+ ANIMCMD_FRAME(12, 10, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 26, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 5, .hFlip = TRUE),
+ ANIMCMD_FRAME(20, 5, .hFlip = TRUE),
+ ANIMCMD_FRAME(24, 15, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D6D00[] =
+{
+ gSpriteAnim_83D6CB8,
+ gSpriteAnim_83D6CDC,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83D6D08 =
+{
+ .tileTag = 10032,
+ .paletteTag = 10032,
+ .oam = &gOamData_837DF2C,
+ .anims = gSpriteAnimTable_83D6D00,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CD274,
+};
void sub_80CD274(struct Sprite* sprite)
{
@@ -31,7 +74,7 @@ void sub_80CD274(struct Sprite* sprite)
sprite->callback = sub_80CD2D4;
}
-void sub_80CD2D4(struct Sprite* sprite)
+static void sub_80CD2D4(struct Sprite* sprite)
{
if (++sprite->data[0] > 30)
{
diff --git a/src/battle/anim/unused_4.c b/src/battle/anim/unused_4.c
deleted file mode 100644
index 63940f3e1..000000000
--- a/src/battle/anim/unused_4.c
+++ /dev/null
@@ -1,58 +0,0 @@
-#include "global.h"
-#include "rom_8077ABC.h"
-#include "trig.h"
-#include "battle_anim.h"
-#include "sound.h"
-
-extern s16 gBattleAnimArgs[];
-extern u8 gAnimBankAttacker;
-extern u8 gAnimBankTarget;
-
-extern u8 gBankSpriteIds[];
-
-static void sub_80CD9D4(struct Sprite* sprite);
-
-// unused_4
-// Unknown usage.
-
-void sub_80CD9C4(struct Sprite* sprite)
-{
- sprite->data[0] = 0;
- sprite->callback = sub_80CD9D4;
-}
-
-void sub_80CD9D4(struct Sprite* sprite)
-{
- switch (sprite->data[0])
- {
- case 0:
- sprite->data[1] = 0;
- sprite->data[2] = gBankSpriteIds[gAnimBankAttacker];
- sprite->data[3] = GetBattlerSide(gAnimBankAttacker);
- sprite->data[4] = (sprite->data[3] != 0) ? 0x200 : -0x200;
- sprite->data[5] = 0;
- sub_8078E70(sprite->data[2], 0);
- sprite->data[0]++;
- case 1:
- sprite->data[5] += sprite->data[4];
- obj_id_set_rotscale(sprite->data[2], 0x100, 0x100, sprite->data[5]);
- sub_8078F9C(sprite->data[2]);
- if (++sprite->data[1] > 3)
- {
- sprite->data[1] = 0;
- sprite->data[4] *= -1;
- sprite->data[0]++;
- }
- break;
- case 2:
- sprite->data[5] += sprite->data[4];
- obj_id_set_rotscale(sprite->data[2], 0x100, 0x100, sprite->data[5]);
- sub_8078F9C(sprite->data[2]);
- if (++sprite->data[1] > 3)
- {
- sub_8078F40(sprite->data[2]);
- DestroyAnimSprite(sprite);
- }
- break;
- }
-}
diff --git a/src/battle/anim/unused_5.c b/src/battle/anim/unused_5.c
index 421cdd6bf..af9a8a037 100644
--- a/src/battle/anim/unused_5.c
+++ b/src/battle/anim/unused_5.c
@@ -8,8 +8,21 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CF280(struct Sprite* sprite);
+
// unused_5
+const struct SpriteTemplate gSpriteTemplate_83D7370 =
+{
+ .tileTag = 10064,
+ .paletteTag = 10064,
+ .oam = &gOamData_837DF34,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CF280,
+};
+
void sub_80CF280(struct Sprite* sprite)
{
sub_8078650(sprite);
diff --git a/src/battle/anim/unused_6.c b/src/battle/anim/unused_6.c
index 37e2031b0..5b37d32c9 100644
--- a/src/battle/anim/unused_6.c
+++ b/src/battle/anim/unused_6.c
@@ -9,10 +9,34 @@ extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
extern void sub_80CEF44(u8 bank, struct Sprite* sprite);
+
+void sub_80CF2D0(struct Sprite* sprite);
static void sub_80CF310(struct Sprite* sprite);
// unused_6
+const union AnimCmd gSpriteAnim_83D7388[] =
+{
+ ANIMCMD_FRAME(4, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D7390[] =
+{
+ gSpriteAnim_83D7388,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83D7394 =
+{
+ .tileTag = 10072,
+ .paletteTag = 10072,
+ .oam = &gOamData_837DF2C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CF2D0,
+};
+
void sub_80CF2D0(struct Sprite* sprite)
{
u8 bank;
@@ -27,7 +51,7 @@ void sub_80CF2D0(struct Sprite* sprite)
sprite->callback = sub_80CF310;
}
-void sub_80CF310(struct Sprite* sprite)
+static void sub_80CF310(struct Sprite* sprite)
{
switch (sprite->data[0])
{
diff --git a/src/battle/anim/unused_7.c b/src/battle/anim/unused_7.c
index a2f00db31..fa3facdda 100644
--- a/src/battle/anim/unused_7.c
+++ b/src/battle/anim/unused_7.c
@@ -10,9 +10,22 @@ extern u8 gAnimBankTarget;
extern u8 gBankSpriteIds[];
+void sub_80CF3C4(struct Sprite* sprite);
+
// unused_7
-void sub_80CF374(struct Sprite* sprite)
+const struct SpriteTemplate gSpriteTemplate_83D73AC =
+{
+ .tileTag = 0,
+ .paletteTag = 0,
+ .oam = &gDummyOamData,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CF3C4,
+};
+
+static void sub_80CF374(struct Sprite* sprite)
{
s16 temp;
gSprites[sprite->data[2]].pos2.x += sprite->data[1];
diff --git a/src/battle/anim/unused_8.c b/src/battle/anim/unused_8.c
index c67ec2754..a005bee1c 100644
--- a/src/battle/anim/unused_8.c
+++ b/src/battle/anim/unused_8.c
@@ -7,12 +7,62 @@
extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+extern const union AffineAnimCmd *const gSpriteAffineAnimTable_83DB1B0[];
+void sub_80CF458(struct Sprite* sprite);
static void sub_80CF490(struct Sprite* sprite);
static void sub_80CF4B8(struct Sprite* sprite);
// unused_8
+const struct SpriteTemplate gSpriteTemplate_83D73C4 =
+{
+ .tileTag = 10145,
+ .paletteTag = 10145,
+ .oam = &gOamData_837E0BC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DB1B0,
+ .callback = sub_80CF458,
+};
+
+const union AnimCmd gSpriteAnim_83D73DC[] =
+{
+ ANIMCMD_FRAME(0, 9),
+ ANIMCMD_FRAME(16, 3),
+ ANIMCMD_FRAME(32, 3),
+ ANIMCMD_FRAME(48, 3),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D73F0[] =
+{
+ gSpriteAnim_83D73DC,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D73F4[] =
+{
+ AFFINEANIMCMD_FRAME(0x50, 0x50, 0, 0),
+ AFFINEANIMCMD_FRAME(0x9, 0x9, 0, 18),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D740C[] =
+{
+ gSpriteAffineAnim_83D73F4,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83D7410 =
+{
+ .tileTag = 10007,
+ .paletteTag = 10007,
+ .oam = &gOamData_837DF94,
+ .anims = gSpriteAnimTable_83D73F0,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D740C,
+ .callback = sub_80793C4,
+};
+
void sub_80CF458(struct Sprite* sprite)
{
InitAnimSpritePos(sprite, 1);
@@ -23,7 +73,7 @@ void sub_80CF458(struct Sprite* sprite)
StoreSpriteCallbackInData(sprite, sub_80CF490);
}
-void sub_80CF490(struct Sprite* sprite)
+static void sub_80CF490(struct Sprite* sprite)
{
sprite->data[0] = sprite->data[1];
sprite->data[2] = sprite->pos1.x;
@@ -32,7 +82,7 @@ void sub_80CF490(struct Sprite* sprite)
StoreSpriteCallbackInData(sprite, sub_80CF4B8);
}
-void sub_80CF4B8(struct Sprite* sprite)
+static void sub_80CF4B8(struct Sprite* sprite)
{
if (sprite->data[5] == 0)
DestroyAnimSprite(sprite);
diff --git a/src/battle/anim/unused_9.c b/src/battle/anim/unused_9.c
index 8e3f0a8b7..d8dda35b3 100644
--- a/src/battle/anim/unused_9.c
+++ b/src/battle/anim/unused_9.c
@@ -9,13 +9,23 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
-extern struct SpriteTemplate gSpriteTemplate_83D75AC;
-
+void sub_80CFDFC(struct Sprite* sprite);
static void sub_80CFE2C(struct Sprite* sprite);
// unused_9? (Most likely an unused effect.)
// I cannot find any reference to this sprite template used to call this.
+const struct SpriteTemplate gSpriteTemplate_83D75AC =
+{
+ .tileTag = 10178,
+ .paletteTag = 10178,
+ .oam = &gOamData_837E05C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CFDFC,
+};
+
void sub_80CFDFC(struct Sprite* sprite)
{
InitAnimSpritePos(sprite, 0);
@@ -24,7 +34,7 @@ void sub_80CFDFC(struct Sprite* sprite)
}
#ifdef NONMATCHING
-void sub_80CFE2C(struct Sprite* sprite)
+static void sub_80CFE2C(struct Sprite* sprite)
{
u16 r7;
u16 r5;
@@ -46,7 +56,7 @@ void sub_80CFE2C(struct Sprite* sprite)
}
#else
NAKED
-void sub_80CFE2C(struct Sprite* sprite)
+static void sub_80CFE2C(struct Sprite* sprite)
{
asm(".syntax unified\n\
push {r4-r7,lr}\n\
diff --git a/src/battle/anim/uproar.c b/src/battle/anim/uproar.c
index 538ca9b20..c78f89fef 100644
--- a/src/battle/anim/uproar.c
+++ b/src/battle/anim/uproar.c
@@ -6,19 +6,25 @@
extern s16 gBattleAnimArgs[8];
-extern const union AffineAnimCmd gUnknown_083D7CA8[];
+static void sub_80D2D3C(u8);
-void sub_80D2D3C(u8);
+const union AffineAnimCmd gSpriteAffineAnim_83D7CA8[] =
+{
+ AFFINEANIMCMD_FRAME(-12, 8, 0, 4),
+ AFFINEANIMCMD_FRAME(20, -20, 0, 4),
+ AFFINEANIMCMD_FRAME(-8, 12, 0, 4),
+ AFFINEANIMCMD_END,
+};
void sub_80D2CF8(u8 taskId)
{
u8 spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
- sub_80798F4(&gTasks[taskId], spriteId, gUnknown_083D7CA8);
+ sub_80798F4(&gTasks[taskId], spriteId, gSpriteAffineAnim_83D7CA8);
gTasks[taskId].func = sub_80D2D3C;
}
-void sub_80D2D3C(u8 taskId)
+static void sub_80D2D3C(u8 taskId)
{
if (!sub_807992C(&gTasks[taskId]))
DestroyAnimVisualTask(taskId);
diff --git a/src/battle/anim/water.c b/src/battle/anim/water.c
index a7e1883f3..0afe133f0 100644
--- a/src/battle/anim/water.c
+++ b/src/battle/anim/water.c
@@ -8,7 +8,187 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
-static void sub_80D3874(struct Sprite *);
+extern const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA318[];
+extern const union AnimCmd *const gSpriteAnimTable_83D9BC8[];
+
+void sub_80D37FC(struct Sprite *sprite);
+void sub_80D3838(struct Sprite *sprite);
+void sub_80D4044(struct Sprite *sprite);
+void sub_80D452C(struct Sprite *sprite);
+void sub_80D4BF0(struct Sprite *sprite);
+void sub_80D4C64(struct Sprite *sprite);
+static void sub_80D3874(struct Sprite *sprite);
+
+const union AnimCmd gSpriteAnim_83D9300[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D9308[] =
+{
+ ANIMCMD_FRAME(4, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D9310[] =
+{
+ gSpriteAnim_83D9300,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D9314[] =
+{
+ gSpriteAnim_83D9308,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9318 =
+{
+ .tileTag = 10155,
+ .paletteTag = 10155,
+ .oam = &gOamData_837E04C,
+ .anims = gSpriteAnimTable_83D9310,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80794A8,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9330 =
+{
+ .tileTag = 10155,
+ .paletteTag = 10155,
+ .oam = &gOamData_837E10C,
+ .anims = gSpriteAnimTable_83D9314,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DA318,
+ .callback = sub_80D37FC,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9348 =
+{
+ .tileTag = 10141,
+ .paletteTag = 10141,
+ .oam = &gOamData_837DF24,
+ .anims = gSpriteAnimTable_83D9BC8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D3838,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9360 =
+{
+ .tileTag = 10155,
+ .paletteTag = 10155,
+ .oam = &gOamData_837DF24,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D4044,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83D9378 =
+{
+ .tileTag = 10268,
+ .paletteTag = 10268,
+ .oam = &gOamData_837DF24,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D452C,
+};
+
+const union AnimCmd gSpriteAnim_83D9390[] =
+{
+ ANIMCMD_FRAME(8, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D9398[] =
+{
+ ANIMCMD_FRAME(9, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D93A0[] =
+{
+ ANIMCMD_FRAME(4, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D93A8[] =
+{
+ gSpriteAnim_83D9390,
+ gSpriteAnim_83D9398,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D93B0[] =
+{
+ gSpriteAnim_83D93A0,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D93B4[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0xFFF6, 0xFFF6, 0, 15),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D93CC[] =
+{
+ AFFINEANIMCMD_FRAME(0xE0, 0xE0, 0, 0),
+ AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 15),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D93E4[] =
+{
+ AFFINEANIMCMD_FRAME(0x150, 0x150, 0, 0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 15),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D93FC[] =
+{
+ gSpriteAffineAnim_83D93B4,
+ gSpriteAffineAnim_83D93CC,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D9404[] =
+{
+ gSpriteAffineAnim_83D93E4,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9408 =
+{
+ .tileTag = 10155,
+ .paletteTag = 10155,
+ .oam = &gOamData_837DF24,
+ .anims = gSpriteAnimTable_83D93A8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D4BF0,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83D9420 =
+{
+ .tileTag = 10155,
+ .paletteTag = 10155,
+ .oam = &gOamData_837DF84,
+ .anims = gSpriteAnimTable_83D93A8,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D93FC,
+ .callback = sub_80D4C64,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9438 =
+{
+ .tileTag = 10155,
+ .paletteTag = 10155,
+ .oam = &gOamData_837DF8C,
+ .anims = gSpriteAnimTable_83D93B0,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D9404,
+ .callback = sub_807A9BC,
+};
void sub_80D37FC(struct Sprite *sprite)
{
diff --git a/src/battle/anim/wave_finger.c b/src/battle/anim/wave_finger.c
deleted file mode 100644
index 2cf68c34c..000000000
--- a/src/battle/anim/wave_finger.c
+++ /dev/null
@@ -1,39 +0,0 @@
-#include "global.h"
-#include "rom_8077ABC.h"
-#include "trig.h"
-#include "battle_anim.h"
-#include "sound.h"
-
-extern s16 gBattleAnimArgs[];
-extern u8 gAnimBankAttacker;
-extern u8 gAnimBankTarget;
-
-extern void sub_80CEF44(u8 bank, struct Sprite* sprite);
-void sub_80CF088(struct Sprite* sprite);
-
-// wave_finger
-// Used by Metronome.
-
-void sub_80CF040(struct Sprite* sprite)
-{
- u8 bank;
- if (gBattleAnimArgs[0] == 0)
- bank = gAnimBankAttacker;
- else
- bank = gAnimBankTarget;
-
- sub_80CEF44(bank, sprite);
- sprite->data[0] = 0;
- StoreSpriteCallbackInData(sprite, sub_80CF088);
- sprite->callback = sub_80785E4;
-}
-
-void sub_80CF088(struct Sprite* sprite)
-{
- if (++sprite->data[0] > 16)
- {
- StartSpriteAffineAnim(sprite, 1);
- StoreSpriteCallbackInData(sprite, move_anim_8074EE0);
- sprite->callback = sub_80785E4;
- }
-}
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/battle/anim/wisp_fire.c b/src/battle/anim/wisp_fire.c
index 5a51986c7..c96a3a86f 100644
--- a/src/battle/anim/wisp_fire.c
+++ b/src/battle/anim/wisp_fire.c
@@ -9,12 +9,45 @@
extern s16 gBattleAnimArgs[];
extern u8 gAnimBankTarget;
extern u8 gAnimBankAttacker;
-
extern u8 gBankSpriteIds[];
-extern s8 gUnknown_083D9794[16];
-extern s8 gUnknown_083D97A4[16];
-void sub_80D5E4C(u8 taskId);
+void sub_80D5CC0(struct Sprite *sprite);
+static void sub_80D5E4C(u8 taskId);
+
+const union AnimCmd gSpriteAnim_83D9764[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_FRAME(16, 5),
+ ANIMCMD_FRAME(32, 5),
+ ANIMCMD_FRAME(48, 5),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D9778[] =
+{
+ gSpriteAnim_83D9764,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D977C =
+{
+ .tileTag = 10232,
+ .paletteTag = 10232,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D9778,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D5CC0,
+};
+
+const s8 gUnknown_083D9794[16] =
+{
+ -1, -1, 0, 1, 1, 0, 0, -1, -1, 1, 1, 0, 0, -1, 0, 1,
+};
+
+const s8 gUnknown_083D97A4[16] =
+{
+ -1, 0, 1, 0, -1, 1, 0, -1, 0, 1, 0, -1, 0, 1, 0, 1,
+};
void sub_80D5CC0(struct Sprite *sprite)
{
@@ -66,7 +99,7 @@ void sub_80D5DDC(u8 taskId)
task->func = sub_80D5E4C;
}
-void sub_80D5E4C(u8 taskId)
+static void sub_80D5E4C(u8 taskId)
{
struct Task *task = &gTasks[taskId];
diff --git a/src/battle/anim/wisp_orb.c b/src/battle/anim/wisp_orb.c
index 90b90acb7..32373ca2a 100644
--- a/src/battle/anim/wisp_orb.c
+++ b/src/battle/anim/wisp_orb.c
@@ -11,11 +11,58 @@ extern u8 gAnimBankTarget;
extern u16 gBattleTypeFlags;
extern u8 gUnknown_0202F7D2;
+void sub_80D5B0C(struct Sprite *sprite);
static void sub_80D5C5C(struct Sprite *);
// wisp_orb (animates the wisp orbs)
// Used in Will-O-Wisp
+const union AnimCmd gSpriteAnim_83D9710[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_FRAME(4, 5),
+ ANIMCMD_FRAME(8, 5),
+ ANIMCMD_FRAME(12, 5),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd gSpriteAnim_83D9724[] =
+{
+ ANIMCMD_FRAME(16, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D972C[] =
+{
+ ANIMCMD_FRAME(20, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D9734[] =
+{
+ ANIMCMD_FRAME(20, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D973C[] =
+{
+ gSpriteAnim_83D9710,
+ gSpriteAnim_83D9724,
+ gSpriteAnim_83D972C,
+ gSpriteAnim_83D9734,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D974C =
+{
+ .tileTag = 10231,
+ .paletteTag = 10231,
+ .oam = &gOamData_837DF2C,
+ .anims = gSpriteAnimTable_83D973C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D5B0C,
+};
+
void sub_80D5B0C(struct Sprite *sprite)
{
switch (sprite->data[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,