diff options
Diffstat (limited to 'src/battle/anim/espeed.c')
-rw-r--r-- | src/battle/anim/espeed.c | 58 |
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); + } +} |