summaryrefslogtreecommitdiff
path: root/src/battle/anim/espeed.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/battle/anim/espeed.c')
-rw-r--r--src/battle/anim/espeed.c58
1 files changed, 52 insertions, 6 deletions
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);
+ }
+}