#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; static void sub_80D2704(struct Sprite* sprite); // orbit_fast (a quickly moving fast circular motion of a sprite around an object.) // Used by Hidden Power. void sub_80D26A4(struct Sprite* sprite) { sprite->pos1.x = GetBankPosition(gAnimBankAttacker, 2); sprite->pos1.y = GetBankPosition(gAnimBankAttacker, 3); sprite->affineAnimPaused = 1; sprite->data[0] = gBattleAnimArgs[0]; sprite->data[1] = gBattleAnimArgs[1]; sprite->data[7] = sub_8079E90(gAnimBankAttacker); sprite->callback = sub_80D2704; sub_80D2704(sprite); } void sub_80D2704(struct Sprite* sprite) { if ((u16)(sprite->data[1] - 0x40) <= 0x7F) sprite->subpriority = sprite->data[7] + 1; else sprite->subpriority = sprite->data[7] - 1; sprite->pos2.x = Sin(sprite->data[1], sprite->data[2] >> 8); sprite->pos2.y = Cos(sprite->data[1], sprite->data[3] >> 8); sprite->data[1] = (sprite->data[1] + 9) & 0xFF; switch (sprite->data[5]) { case 1: sprite->data[2] -= 0x400; sprite->data[3] -= 0x100; if (++sprite->data[4] == sprite->data[0]) { sprite->data[5] = 2; return; } break; case 0: sprite->data[2] += 0x400; sprite->data[3] += 0x100; if (++sprite->data[4] == sprite->data[0]) { sprite->data[4] = 0; sprite->data[5] = 1; } break; } if ((u16)gBattleAnimArgs[7] == 0xFFFF) DestroyAnimSprite(sprite); }