#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 gObjectBankIDs[]; 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] = gObjectBankIDs[gAnimBankAttacker]; a = GetBankSide(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); } }