diff options
Diffstat (limited to 'src/battle/anim/slice.c')
-rw-r--r-- | src/battle/anim/slice.c | 62 |
1 files changed, 50 insertions, 12 deletions
diff --git a/src/battle/anim/slice.c b/src/battle/anim/slice.c index 80c58dddf..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 @@ -17,9 +55,9 @@ static void AnimSliceStep(struct Sprite* sprite); // arg 2: slice direction; 0 = right-to-left, 1 = left-to-right void AnimCuttingSlice(struct Sprite* sprite) { - sprite->pos1.x = GetBankPosition(gAnimBankTarget, 0); - sprite->pos1.y = GetBankPosition(gAnimBankTarget, 1); - if (GetBankSide(gAnimBankTarget) == 0) + sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankTarget, 0); + sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankTarget, 1); + if (GetBattlerSide(gAnimBankTarget) == 0) sprite->pos1.y += 8; sprite->callback = AnimSliceStep; @@ -48,28 +86,28 @@ void sub_80CC9BC(struct Sprite* sprite) switch (gBattleAnimArgs[3]) { case 1: - a = GetBankPosition(gAnimBankTarget ^ 2, 0); - b = GetBankPosition(gAnimBankTarget ^ 2, 1); + a = GetBattlerSpriteCoord(gAnimBankTarget ^ 2, 0); + b = GetBattlerSpriteCoord(gAnimBankTarget ^ 2, 1); break; case 2: - a = GetBankPosition(gAnimBankTarget, 0); - b = GetBankPosition(gAnimBankTarget, 1); + a = GetBattlerSpriteCoord(gAnimBankTarget, 0); + b = GetBattlerSpriteCoord(gAnimBankTarget, 1); if (IsAnimBankSpriteVisible(gAnimBankTarget ^ 2)) { - a = (GetBankPosition(gAnimBankTarget ^ 2, 0) + a) / 2; - b = (GetBankPosition(gAnimBankTarget ^ 2, 1) + b) / 2; + a = (GetBattlerSpriteCoord(gAnimBankTarget ^ 2, 0) + a) / 2; + b = (GetBattlerSpriteCoord(gAnimBankTarget ^ 2, 1) + b) / 2; } break; case 0: default: - a = GetBankPosition(gAnimBankTarget, 0); - b = GetBankPosition(gAnimBankTarget, 1); + a = GetBattlerSpriteCoord(gAnimBankTarget, 0); + b = GetBattlerSpriteCoord(gAnimBankTarget, 1); break; } sprite->pos1.x = a; sprite->pos1.y = b; - if (GetBankSide(gAnimBankTarget) == 0) + if (GetBattlerSide(gAnimBankTarget) == 0) sprite->pos1.y += 8; sprite->callback = AnimSliceStep; |