diff options
author | YamaArashi <YamaArashi@users.noreply.github.com> | 2017-01-01 11:34:34 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-01-01 11:34:34 -0800 |
commit | ed6210dd257068df380ccec9851fb98fbb181f4c (patch) | |
tree | 687698d3bada5d1430a6dcb4362e5ade32028e73 /src | |
parent | 84c5030e2020324b701ca6b3349929d6124d16e1 (diff) | |
parent | b33f098d6e23b359236591c05e01632385860470 (diff) |
Merge pull request #143 from yenatch/battle-anim
Decompile battle_anim_80A7E7C
Diffstat (limited to 'src')
-rw-r--r-- | src/battle_anim_80A7E7C.c | 779 |
1 files changed, 779 insertions, 0 deletions
diff --git a/src/battle_anim_80A7E7C.c b/src/battle_anim_80A7E7C.c new file mode 100644 index 000000000..1e3bb706e --- /dev/null +++ b/src/battle_anim_80A7E7C.c @@ -0,0 +1,779 @@ +#include "global.h" +#include "task.h" +#include "sprite.h" +#include "trig.h" + +#define TASK gTasks[task] +#define SPRITE gSprites[TASK.data[0]] + +extern s16 gUnknown_03004B00[8]; + +extern u8 gUnknown_02024BE0[]; +extern s32 gUnknown_0202F7B8; +extern u16 gUnknown_0202F7BC; +extern u8 gUnknown_0202F7C8; +extern u8 gUnknown_0202F7C9; + +extern u8 obj_id_for_side_relative_to_move(u8 side); +extern void move_anim_task_del(u8 task); +extern bool8 b_side_obj__get_some_boolean(u8 side); +extern u8 battle_get_side_with_given_state(u8 state); +extern u8 battle_side_get_owner(u8 side); +extern void oamt_set_x3A_32(struct Sprite *sprite, void (*callback)(struct Sprite*)); +extern void sub_8078458(struct Sprite *sprite); +extern void move_anim_8072740(struct Sprite *sprite); +extern void sub_8078A5C(struct Sprite *sprite); +extern void sub_80784A8(struct Sprite *sprite); +extern void sub_8078E70(u8 sprite, u8); +extern void obj_id_set_rotscale(u8 sprite, int, int, u16); +extern void sub_8078F40(u8 sprite); +extern bool8 sub_8076BE0(); +extern void sub_8078F9C(u8 sprite); + +static void sub_80A7EF0(u8 task); +static void sub_80A808C(u8 task); +static void sub_80A81D8(u8 task); +static void sub_80A8374(u8 task); +static void sub_80A8488(u8 task); +static void sub_80A85A4(struct Sprite *sprite); +void sub_80A8614(struct Sprite* sprite); +static void sub_80A86F4(struct Sprite *sprite); +static void sub_80A88F0(struct Sprite *sprite); +static void sub_80A89B4(u8 task); +static void sub_80A8A18(u8 task); +static void sub_80A8C0C(u8 task); +static void sub_80A8D8C(u8 task); +void sub_80A8FD8(u8 task); +static void sub_80A913C(u8 taskId); + +void sub_80A7E7C(u8 task) { + u8 sprite; + sprite = obj_id_for_side_relative_to_move(gUnknown_03004B00[0]); + if (sprite == 0xff) { + move_anim_task_del(task); + return; + } + gSprites[sprite].pos2.x = gUnknown_03004B00[1]; + gSprites[sprite].pos2.y = gUnknown_03004B00[2]; + TASK.data[0] = sprite; + TASK.data[1] = gUnknown_03004B00[3]; + TASK.data[2] = gUnknown_03004B00[4]; + TASK.data[3] = gUnknown_03004B00[4]; + TASK.data[4] = gUnknown_03004B00[1]; + TASK.data[5] = gUnknown_03004B00[2]; + TASK.func = sub_80A7EF0; + sub_80A7EF0(task); +} + +static void sub_80A7EF0(u8 task) { + if (TASK.data[3] == 0) { + if (SPRITE.pos2.x == 0) { + SPRITE.pos2.x = TASK.data[4]; + } else { + SPRITE.pos2.x = 0; + } + if (SPRITE.pos2.y == 0) { + SPRITE.pos2.y = TASK.data[5]; + } else { + SPRITE.pos2.y = 0; + } + TASK.data[3] = TASK.data[2]; + if (--TASK.data[1] == 0) { + SPRITE.pos2.x = 0; + SPRITE.pos2.y = 0; + move_anim_task_del(task); + return; + } + } else { + TASK.data[3]--; + } +} + + +void sub_80A7FA0(u8 task) { + u8 sprite; + bool8 r6; + u8 side; + r6 = 0; + if (gUnknown_03004B00[0] < 4) { + sprite = obj_id_for_side_relative_to_move(gUnknown_03004B00[0]); + if (sprite == 0xff) { + move_anim_task_del(task); + return; + } + } else if (gUnknown_03004B00[0] != 8) { + switch (gUnknown_03004B00[0]) { + case 4: + side = battle_get_side_with_given_state(0); + break; + case 5: + side = battle_get_side_with_given_state(2); + break; + case 6: + side = battle_get_side_with_given_state(1); + break; + case 7: + default: + side = battle_get_side_with_given_state(3); + break; + } + if (b_side_obj__get_some_boolean(side) == FALSE) { + r6 = 1; + } + sprite = gUnknown_02024BE0[side]; + } else { + sprite = gUnknown_02024BE0[gUnknown_0202F7C8]; + } + if (r6) { + move_anim_task_del(task); + return; + } + gSprites[sprite].pos2.x = gUnknown_03004B00[1]; + gSprites[sprite].pos2.y = gUnknown_03004B00[2]; + TASK.data[0] = sprite; + TASK.data[1] = gUnknown_03004B00[3]; + TASK.data[2] = gUnknown_03004B00[4]; + TASK.data[3] = gUnknown_03004B00[4]; + TASK.data[4] = gUnknown_03004B00[1]; + TASK.data[5] = gUnknown_03004B00[2]; + TASK.func = sub_80A808C; + sub_80A808C(task); +} + +static void sub_80A808C(u8 task) { + if (TASK.data[3] == 0) { + if (SPRITE.pos2.x == TASK.data[4]) { + SPRITE.pos2.x = -TASK.data[4]; + } else { + SPRITE.pos2.x = TASK.data[4]; + } + if (SPRITE.pos2.y == TASK.data[5]) { + SPRITE.pos2.y = -TASK.data[5]; + } else { + SPRITE.pos2.y = TASK.data[5]; + } + TASK.data[3] = TASK.data[2]; + if (--TASK.data[1] == 0) { + SPRITE.pos2.x = 0; + SPRITE.pos2.y = 0; + move_anim_task_del(task); + return; + } + } else { + TASK.data[3]--; + } +} + +void sub_80A8154(u8 task) { + u8 sprite; + sprite = obj_id_for_side_relative_to_move(gUnknown_03004B00[0]); + if (sprite == 0xff) { + move_anim_task_del(task); + return; + } + gSprites[sprite].pos2.x += gUnknown_03004B00[1]; + gSprites[sprite].pos2.y += gUnknown_03004B00[2]; + TASK.data[0] = sprite; + TASK.data[1] = 0; + TASK.data[2] = gUnknown_03004B00[3]; + TASK.data[3] = 0; + TASK.data[4] = gUnknown_03004B00[4]; + TASK.data[5] = gUnknown_03004B00[1] * 2; + TASK.data[6] = gUnknown_03004B00[2] * 2; + TASK.func = sub_80A81D8; + sub_80A81D8(task); +} + +static void sub_80A81D8(u8 task) { + if (TASK.data[3] == 0) { + if (TASK.data[1] & 1) { + SPRITE.pos2.x += TASK.data[5]; + SPRITE.pos2.y += TASK.data[6]; + } else { + SPRITE.pos2.x -= TASK.data[5]; + SPRITE.pos2.y -= TASK.data[6]; + } + TASK.data[3] = TASK.data[4]; + if (++TASK.data[1] >= TASK.data[2]) { + if (TASK.data[1] & 1) { + SPRITE.pos2.x += TASK.data[5] / 2; + SPRITE.pos2.y += TASK.data[6] / 2; + } else { + SPRITE.pos2.x -= TASK.data[5] / 2; + SPRITE.pos2.y -= TASK.data[6] / 2; + } + move_anim_task_del(task); + return; + } + } else { + TASK.data[3]--; + } +} + +void sub_80A8314(u8 task) { + u8 sprite = obj_id_for_side_relative_to_move(gUnknown_03004B00[0]); + gSprites[sprite].pos2.x = gUnknown_03004B00[1]; + TASK.data[0] = sprite; + TASK.data[1] = gUnknown_03004B00[1]; + TASK.data[2] = gUnknown_03004B00[2]; + TASK.data[3] = gUnknown_03004B00[3]; + TASK.data[4] = gUnknown_03004B00[4]; + TASK.func = sub_80A8374; + sub_80A8374(task); +} + +static void sub_80A8374(u8 task) { + s16 x; + u8 sprite; + sprite = TASK.data[0]; + x = TASK.data[1]; + if (TASK.data[2] == TASK.data[8]++) { + TASK.data[8] = 0; + if (gSprites[sprite].pos2.x == x) { + x = -x; + } + gSprites[sprite].pos2.x += x; + } + TASK.data[1] = x; + TASK.data[9] += TASK.data[3]; + gSprites[sprite].pos2.y = TASK.data[9] >> 8; + if (--TASK.data[4] == 0) { + move_anim_task_del(task); + return; + } +} + +void sub_80A8408(u8 task) { + u8 i; + u8 sprite; + u8 v1; + v1 = 1; + sprite = obj_id_for_side_relative_to_move(gUnknown_03004B00[0]); + if (gUnknown_03004B00[4] > 5) { + gUnknown_03004B00[4] = 5; + } + for (i = 0; i < gUnknown_03004B00[4]; i++) { + v1 <<= 1; + } + TASK.data[0] = sprite; + TASK.data[1] = gUnknown_03004B00[1]; + TASK.data[2] = gUnknown_03004B00[2]; + TASK.data[3] = gUnknown_03004B00[3]; + TASK.data[4] = v1; + TASK.func = sub_80A8488; + sub_80A8488(task); +} + +static void sub_80A8488(u8 task) { + u8 sprite; + sprite = TASK.data[0]; + gSprites[sprite].pos2.x = Sin(TASK.data[5], TASK.data[1]); + gSprites[sprite].pos2.y = -Cos(TASK.data[5], TASK.data[2]); + gSprites[sprite].pos2.y += TASK.data[2]; + TASK.data[5] += TASK.data[4]; + TASK.data[5] &= 0xff; + if (TASK.data[5] == 0) { + TASK.data[3]--; + } + if (TASK.data[3] == 0) { + gSprites[sprite].pos2.x = 0; + gSprites[sprite].pos2.y = 0; + move_anim_task_del(task); + return; + } +} + +void sub_80A8500(u8 task) { + if (battle_side_get_owner(gUnknown_0202F7C8)) { + gUnknown_03004B00[1] = -gUnknown_03004B00[1]; + } + sub_80A8408(task); +} + +void sub_80A8530(struct Sprite *sprite) { + sprite->invisible = TRUE; + if (battle_side_get_owner(gUnknown_0202F7C8)) { + sprite->data1 = -gUnknown_03004B00[1]; + } else { + sprite->data1 = gUnknown_03004B00[1]; + } + sprite->data0 = gUnknown_03004B00[0]; + sprite->data2 = 0; + sprite->data3 = gUnknown_02024BE0[gUnknown_0202F7C8]; + sprite->data4 = gUnknown_03004B00[0]; + oamt_set_x3A_32(sprite, sub_80A85A4); + sprite->callback = sub_8078458; +} + +static void sub_80A85A4(struct Sprite *sprite) { + sprite->data0 = sprite->data4; + sprite->data1 = -sprite->data1; + sprite->callback = sub_8078458; + oamt_set_x3A_32(sprite, move_anim_8072740); +} + +void sub_80A85C8(struct Sprite *sprite) { + u8 spriteId; + sprite->invisible = TRUE; + spriteId = obj_id_for_side_relative_to_move(gUnknown_03004B00[2]); + sprite->data0 = gUnknown_03004B00[0]; + sprite->data1 = 0; + sprite->data2 = gUnknown_03004B00[1]; + sprite->data3 = spriteId; + sprite->data4 = gUnknown_03004B00[0]; + oamt_set_x3A_32(sprite, sub_80A8614); + sprite->callback = sub_8078458; +} + +void sub_80A8614(struct Sprite *sprite) { + sprite->data0 = sprite->data4; + sprite->data2 = -sprite->data2; + sprite->callback = sub_8078458; + oamt_set_x3A_32(sprite, move_anim_8072740); +} + +void sub_80A8638(struct Sprite *sprite) { + int something; + int spriteId; + if (!gUnknown_03004B00[0]) { + spriteId = gUnknown_02024BE0[gUnknown_0202F7C8]; + } else { + spriteId = gUnknown_02024BE0[gUnknown_0202F7C9]; + } + sprite->data0 = gUnknown_03004B00[2]; + sprite->data1 = gSprites[spriteId].pos1.x + gSprites[spriteId].pos2.x; + sprite->data2 = gSprites[spriteId].pos1.x; + sprite->data3 = gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y; + sprite->data4 = gSprites[spriteId].pos1.y; + something = 0; + sub_8078A5C(sprite); + sprite->data3 = something; + sprite->data4 = something; + sprite->data5 = gSprites[spriteId].pos2.x; + sprite->data6 = gSprites[spriteId].pos2.y; + sprite->invisible = TRUE; + if (gUnknown_03004B00[1] == 1) { + sprite->data2 = something; + } else if (gUnknown_03004B00[1] == 2) { + sprite->data1 = something; + } + sprite->data7 = gUnknown_03004B00[1]; + sprite->data7 |= spriteId << 8; + sprite->callback = sub_80A86F4; +} + +static void sub_80A86F4(struct Sprite *sprite) { + s8 spriteId; + u8 lo; + struct Sprite *sprite2; + lo = sprite->data7 & 0xff; + spriteId = sprite->data7 >> 8; + sprite2 = &gSprites[spriteId]; + if (sprite->data0 == 0) { + if (lo < 2) { + sprite2->pos2.x = 0; + } + if (lo == 2 || lo == 0) { + sprite2->pos2.y = 0; + } + move_anim_8072740(sprite); + } else { + sprite->data0--; + sprite->data3 += sprite->data1; + sprite->data4 += sprite->data2; + sprite2->pos2.x = (s8)(sprite->data3 >> 8) + sprite->data5; + sprite2->pos2.y = (s8)(sprite->data4 >> 8) + sprite->data6; + } +} + +void sub_80A8764(struct Sprite *sprite) { + u8 v1; + u8 spriteId; + if (!gUnknown_03004B00[0]) { + v1 = gUnknown_0202F7C8; + } else { + v1 = gUnknown_0202F7C9; + } + spriteId = gUnknown_02024BE0[v1]; + if (battle_side_get_owner(v1)) { + gUnknown_03004B00[1] = -gUnknown_03004B00[1]; + if (gUnknown_03004B00[3] == 1) { + gUnknown_03004B00[2] = -gUnknown_03004B00[2]; + } + } + sprite->data0 = gUnknown_03004B00[4]; + sprite->data1 = gSprites[spriteId].pos1.x; + sprite->data2 = gSprites[spriteId].pos1.x + gUnknown_03004B00[1]; + sprite->data3 = gSprites[spriteId].pos1.y; + sprite->data4 = gSprites[spriteId].pos1.y + gUnknown_03004B00[2]; + sub_8078A5C(sprite); + sprite->data3 = 0; + sprite->data4 = 0; + sprite->data5 = spriteId; + sprite->invisible = TRUE; + oamt_set_x3A_32(sprite, move_anim_8072740); + sprite->callback = sub_80784A8; +} + +void sub_80A8818(struct Sprite *sprite) { + u8 spriteId; + u8 v1; + sprite->invisible = TRUE; + if (!gUnknown_03004B00[0]) { + v1 = gUnknown_0202F7C8; + } else { + v1 = gUnknown_0202F7C9; + } + spriteId = gUnknown_02024BE0[v1]; + if (battle_side_get_owner(v1)) { + gUnknown_03004B00[1] = -gUnknown_03004B00[1]; + if (gUnknown_03004B00[3] == 1) { + gUnknown_03004B00[2] = -gUnknown_03004B00[2]; + } + } + sprite->data0 = gUnknown_03004B00[4]; + sprite->data1 = gSprites[spriteId].pos1.x + gSprites[spriteId].pos2.x; + sprite->data2 = sprite->data1 + gUnknown_03004B00[1]; + sprite->data3 = gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y; + sprite->data4 = sprite->data3 + gUnknown_03004B00[2]; + sub_8078A5C(sprite); + sprite->data3 = gSprites[spriteId].pos2.x << 8; + sprite->data4 = gSprites[spriteId].pos2.y << 8; + sprite->data5 = spriteId; + sprite->data6 = gUnknown_03004B00[5]; + if (!gUnknown_03004B00[5]) { + oamt_set_x3A_32(sprite, move_anim_8072740); + } else { + oamt_set_x3A_32(sprite, sub_80A88F0); + } + sprite->callback = sub_80784A8; +} + + +static void sub_80A88F0(struct Sprite *sprite) { + gSprites[sprite->data5].pos2.x = 0; + gSprites[sprite->data5].pos2.y = 0; + move_anim_8072740(sprite); +} + +void sub_80A8920(u8 task) { + s16 r7; + r7 = 0x8000 / gUnknown_03004B00[3]; + if (battle_side_get_owner(gUnknown_0202F7C8)) { + gUnknown_03004B00[1] = -gUnknown_03004B00[1]; + gUnknown_03004B00[5] = -gUnknown_03004B00[5]; + } + TASK.data[0] = obj_id_for_side_relative_to_move(gUnknown_03004B00[0]); + TASK.data[1] = (gUnknown_03004B00[1] << 8) / gUnknown_03004B00[3]; + TASK.data[2] = gUnknown_03004B00[2]; + TASK.data[3] = gUnknown_03004B00[3]; + TASK.data[4] = gUnknown_03004B00[4]; + TASK.data[5] = (gUnknown_03004B00[5] << 8) / gUnknown_03004B00[6]; + TASK.data[6] = gUnknown_03004B00[6]; + TASK.data[7] = r7; + TASK.func = sub_80A89B4; +} + +static void sub_80A89B4(u8 task) { + u8 spriteId; + spriteId = TASK.data[0]; + TASK.data[11] += TASK.data[1]; + gSprites[spriteId].pos2.x = TASK.data[11] >> 8; + gSprites[spriteId].pos2.y = Sin((u8)(TASK.data[10] >> 8), TASK.data[2]); + TASK.data[10] += TASK.data[7]; + if (--TASK.data[3] == 0) { + TASK.func = sub_80A8A18; + } +} + +static void sub_80A8A18(u8 task) { + u8 spriteId; + if (TASK.data[4] > 0) { + TASK.data[4]--; + } else { + spriteId = TASK.data[0]; + TASK.data[12] += TASK.data[5]; + gSprites[spriteId].pos2.x = (TASK.data[12] >> 8) + (TASK.data[11] >> 8); + if (--TASK.data[6] == 0) { + move_anim_task_del(task); + return; + } + } +} + +static void sub_80A8B3C(u8 task); + +void sub_80A8A80(u8 task) { + u8 spriteId; + u8 *r5; + switch (gUnknown_03004B00[0]) { + case 0: + case 1: + spriteId = obj_id_for_side_relative_to_move(gUnknown_03004B00[0]); + break; + case 2: + if (!b_side_obj__get_some_boolean(gUnknown_0202F7C8 ^ 2)) { + move_anim_task_del(task); + return; + } + spriteId = gUnknown_02024BE0[gUnknown_0202F7C8 ^ 2]; + break; + case 3: + if (!b_side_obj__get_some_boolean(gUnknown_0202F7C9 ^ 2)) { + move_anim_task_del(task); + return; + } + spriteId = gUnknown_02024BE0[gUnknown_0202F7C9 ^ 2]; + break; + default: + move_anim_task_del(task); + return; + } + TASK.data[0] = spriteId; + if (battle_side_get_owner(gUnknown_0202F7C9)) { + TASK.data[1] = gUnknown_03004B00[1]; + } else { + TASK.data[1] = -gUnknown_03004B00[1]; + } + TASK.func = sub_80A8B3C; +} + +static void sub_80A8B3C(u8 task) { + u8 spriteId = TASK.data[0]; + gSprites[spriteId].pos2.x += TASK.data[1]; + if (gSprites[spriteId].pos2.x + gSprites[spriteId].pos1.x + 0x20 > 0x130u) { + move_anim_task_del(task); + return; + } +} + +void sub_80A8B88(u8 task) { + u8 spriteId; + if (battle_side_get_owner(gUnknown_0202F7C8)) { + gUnknown_03004B00[1] = -gUnknown_03004B00[1]; + } + spriteId = obj_id_for_side_relative_to_move(gUnknown_03004B00[4]); + TASK.data[0] = gUnknown_03004B00[0]; + TASK.data[1] = gUnknown_03004B00[1]; + TASK.data[2] = gUnknown_03004B00[2]; + TASK.data[3] = gUnknown_03004B00[3]; + TASK.data[4] = spriteId; + if (gUnknown_03004B00[4] == 0) { + TASK.data[5] = gUnknown_0202F7C8; + } else { + TASK.data[5] = gUnknown_0202F7C9; + } + TASK.data[12] = 1; + TASK.func = sub_80A8C0C; +} + +static void sub_80A8C0C(u8 task) { + s16 y; + u8 spriteId; + int index; + u16 val; + spriteId = TASK.data[4]; + val = TASK.data[10] + TASK.data[2]; + TASK.data[10] = val; + index = val >> 8; + y = Sin(index, TASK.data[1]); + if (TASK.data[0] == 0) { + gSprites[spriteId].pos2.x = y; + } else { + if (battle_side_get_owner(TASK.data[5]) == 0) { + gSprites[spriteId].pos2.y = (y >= 0) ? y : -y; + } else { + gSprites[spriteId].pos2.y = (y >= 0) ? -y : y; + } + } + if (((index >= 0x80u) && (TASK.data[11] == 0) && (TASK.data[12] == 1)) + || ((index < 0x7fu) && (TASK.data[11] == 1) && (TASK.data[12] == 0))) { + TASK.data[11] ^= 1; + TASK.data[12] ^= 1; + if (--TASK.data[3] == 0) { + gSprites[spriteId].pos2.x = 0; + gSprites[spriteId].pos2.y = 0; + move_anim_task_del(task); + return; + } + } +} + +void sub_80A8D34(u8 task) { + u8 spriteId; + spriteId = obj_id_for_side_relative_to_move(gUnknown_03004B00[3]); + sub_8078E70(spriteId, gUnknown_03004B00[4]); + TASK.data[0] = gUnknown_03004B00[0]; + TASK.data[1] = gUnknown_03004B00[1]; + TASK.data[2] = gUnknown_03004B00[2]; + TASK.data[3] = gUnknown_03004B00[2]; + TASK.data[4] = spriteId; + TASK.data[10] = 0x100; + TASK.data[11] = 0x100; + TASK.func = sub_80A8D8C; +} + +static void sub_80A8D8C(u8 task) { + u8 spriteId; + TASK.data[10] += TASK.data[0]; + TASK.data[11] += TASK.data[1]; + spriteId = TASK.data[4]; + obj_id_set_rotscale(spriteId, TASK.data[10], TASK.data[11], 0); + if (--TASK.data[2] == 0) { + if (TASK.data[3] > 0) { + TASK.data[0] = -TASK.data[0]; + TASK.data[1] = -TASK.data[1]; + TASK.data[2] = TASK.data[3]; + TASK.data[3] = 0; + } else { + sub_8078F40(spriteId); + move_anim_task_del(task); + return; + } + } +} + +void sub_80A8E04(u8 task) { + u8 spriteId; + spriteId = obj_id_for_side_relative_to_move(gUnknown_03004B00[2]); + sub_8078E70(spriteId, 0); + TASK.data[1] = 0; + TASK.data[2] = gUnknown_03004B00[0]; + if (gUnknown_03004B00[3] != 1) { + TASK.data[3] = 0; + } else { + TASK.data[3] = gUnknown_03004B00[0] * gUnknown_03004B00[1]; + } + TASK.data[4] = gUnknown_03004B00[1]; + TASK.data[5] = spriteId; + TASK.data[6] = gUnknown_03004B00[3]; + if (sub_8076BE0()) { + TASK.data[7] = 1; + } else { + if (gUnknown_03004B00[2] == 0) { + TASK.data[7] = !battle_side_get_owner(gUnknown_0202F7C8); + } else { + TASK.data[7] = !battle_side_get_owner(gUnknown_0202F7C9); + } + } + if (TASK.data[7]) { + if (!sub_8076BE0()) { + TASK.data[3] *= -1; + TASK.data[4] *= -1; + } + } + TASK.func = sub_80A8FD8; +} + +void sub_80A8EFC(u8 task) { + u8 spriteId; + u8 side; + spriteId = obj_id_for_side_relative_to_move(gUnknown_03004B00[2]); + sub_8078E70(spriteId, 0); + TASK.data[1] = 0; + TASK.data[2] = gUnknown_03004B00[0]; + if (gUnknown_03004B00[2] == 0) { + if (battle_side_get_owner(gUnknown_0202F7C8)) { + gUnknown_03004B00[1] = -gUnknown_03004B00[1]; + } + } else { + if (battle_side_get_owner(gUnknown_0202F7C9)) { + gUnknown_03004B00[1] = -gUnknown_03004B00[1]; + } + } + if (gUnknown_03004B00[3] != 1) { + TASK.data[3] = 0; + } else { + TASK.data[3] = gUnknown_03004B00[0] * gUnknown_03004B00[1]; + } + TASK.data[4] = gUnknown_03004B00[1]; + TASK.data[5] = spriteId; + TASK.data[6] = gUnknown_03004B00[3]; + TASK.data[7] = 1; + TASK.data[3] *= -1; + TASK.data[4] *= -1; + TASK.func = sub_80A8FD8; +} + +void sub_80A8FD8(u8 task) { + TASK.data[3] += TASK.data[4]; + obj_id_set_rotscale(TASK.data[5], 0x100, 0x100, TASK.data[3]); + if (TASK.data[7]) { + sub_8078F9C(TASK.data[5]); + } + if (++TASK.data[1] >= TASK.data[2]) { + switch (TASK.data[6]) { + case 1: + sub_8078F40(TASK.data[5]); + case 0: + default: + move_anim_task_del(task); + return; + case 2: + TASK.data[1] = 0; + TASK.data[4] *= -1; + TASK.data[6] = 1; + break; + } + } +} + +void sub_80A9058(u8 task) { + if (!gUnknown_03004B00[0]) { + TASK.data[15] = gUnknown_0202F7BC / 12; + if (TASK.data[15] < 1) { + TASK.data[15] = 1; + } + if (TASK.data[15] > 16) { + TASK.data[15] = 16; + } + } else { + TASK.data[15] = gUnknown_0202F7B8 / 12; + if (TASK.data[15] < 1) { + TASK.data[15] = 1; + } + if (TASK.data[15] > 16) { + TASK.data[15] = 16; + } + } + TASK.data[14] = TASK.data[15] / 2; + TASK.data[13] = TASK.data[14] + (TASK.data[15] & 1); + TASK.data[12] = 0; + TASK.data[10] = gUnknown_03004B00[3]; + TASK.data[11] = gUnknown_03004B00[4]; + TASK.data[7] = obj_id_for_side_relative_to_move(1); + TASK.data[8] = gSprites[TASK.data[7]].pos2.x; + TASK.data[9] = gSprites[TASK.data[7]].pos2.y; + TASK.data[0] = 0; + TASK.data[1] = gUnknown_03004B00[1]; + TASK.data[2] = gUnknown_03004B00[2]; + TASK.func = sub_80A913C; +} + +static void sub_80A913C(u8 taskId) { + struct Task *task = &gTasks[taskId]; + if (++task->data[0] > task->data[1]) { + task->data[0] = 0; + task->data[12] = (task->data[12] + 1) & 1; + if (task->data[10]) { + if (task->data[12]) { + gSprites[task->data[7]].pos2.x = task->data[8] + task->data[13]; + } else { + gSprites[task->data[7]].pos2.x = task->data[8] - task->data[14]; + } + } + if (task->data[11]) { + if (task->data[12]) { + gSprites[task->data[7]].pos2.y = task->data[15]; + } else { + gSprites[task->data[7]].pos2.y = 0; + } + } + if (!--task->data[2]) { + gSprites[task->data[7]].pos2.x = 0; + gSprites[task->data[7]].pos2.y = 0; + move_anim_task_del(taskId); + return; + } + } +} |