diff options
Diffstat (limited to 'src/battle/anim/switch.c')
-rw-r--r-- | src/battle/anim/switch.c | 70 |
1 files changed, 61 insertions, 9 deletions
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); |