diff options
author | Marcus Huderle <huderlem@gmail.com> | 2018-04-28 19:11:47 -0700 |
---|---|---|
committer | Marcus Huderle <huderlem@gmail.com> | 2018-04-28 19:11:47 -0700 |
commit | db5067c512a33ef913bb3e2d4cbef589d32a48a6 (patch) | |
tree | 94b50831d41c29064c31a7149a6f1c9e7fc24acb /src | |
parent | bceafd3a21512167deb76fb46c3f5c4499361409 (diff) |
Move more .rodata into battle anim files
Diffstat (limited to 'src')
-rw-r--r-- | src/battle/anim/bottle.c | 38 | ||||
-rw-r--r-- | src/battle/anim/brace.c | 28 | ||||
-rw-r--r-- | src/battle/anim/cube.c | 38 | ||||
-rw-r--r-- | src/battle/anim/fang.c | 27 | ||||
-rw-r--r-- | src/battle/anim/glitter.c | 43 | ||||
-rw-r--r-- | src/battle/anim/lunge.c | 339 | ||||
-rw-r--r-- | src/battle/anim/lunge_1.c | 124 | ||||
-rw-r--r-- | src/battle/anim/lunge_2.c | 163 | ||||
-rw-r--r-- | src/battle/anim/moon.c | 14 | ||||
-rw-r--r-- | src/battle/anim/scan.c | 46 | ||||
-rw-r--r-- | src/battle/anim/shield.c | 14 | ||||
-rw-r--r-- | src/battle/anim/slash.c | 63 | ||||
-rw-r--r-- | src/battle/anim/sleep.c | 59 | ||||
-rw-r--r-- | src/battle/anim/slice.c | 38 | ||||
-rw-r--r-- | src/battle/anim/strike.c | 43 | ||||
-rw-r--r-- | src/battle/anim/tile.c | 219 | ||||
-rw-r--r-- | src/battle/anim/tile_in.c | 51 | ||||
-rw-r--r-- | src/battle/anim/tile_out.c | 81 | ||||
-rw-r--r-- | src/battle/anim/twinkle.c | 28 | ||||
-rw-r--r-- | src/battle/anim/unused_2.c | 88 | ||||
-rw-r--r-- | src/battle/anim/unused_3.c | 47 | ||||
-rw-r--r-- | src/battle/anim/unused_4.c | 58 |
22 files changed, 1149 insertions, 500 deletions
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/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/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/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/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/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/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/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/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/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/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_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; - } -} |