From 1f16c437658db8348e87d8c5db48ef9f79c4371d Mon Sep 17 00:00:00 2001 From: "U-Maria-PC\\Maria" Date: Sun, 13 Aug 2017 18:04:58 -0400 Subject: fixed it up a little --- src/intro_credits_graphics.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/intro_credits_graphics.c b/src/intro_credits_graphics.c index 58e40da91..6d50581d2 100755 --- a/src/intro_credits_graphics.c +++ b/src/intro_credits_graphics.c @@ -374,7 +374,8 @@ void sub_8149020(u8 mode) case 0: default: /* stuff */ - if(gMain.vblankCounter1 & 3 || gPaletteFade.active) break; + if (gMain.vblankCounter1 & 3 || gPaletteFade.active) + break; if(gMain.vblankCounter1 & 4) { var1 = gPlttBufferUnfaded[9]; @@ -528,4 +529,4 @@ u8 intro_create_latias_sprite(s16 a, s16 b) StartSpriteAnim(&gSprites[latios], 1); gSprites[latios].callback = &sub_81493C4; return sprite; -} \ No newline at end of file +} -- cgit v1.2.3 From bdf7c67943d5e0f082036e9951b182e42192c364 Mon Sep 17 00:00:00 2001 From: "U-Maria-PC\\Maria" Date: Sun, 13 Aug 2017 19:00:47 -0400 Subject: more fixes --- ld_script.txt | 4 ++-- src/intro_credits_graphics.c | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/ld_script.txt b/ld_script.txt index ca99b5a80..8b3989c8d 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -182,7 +182,7 @@ SECTIONS { asm/contest_link_80C857C.o(.text); src/contest_link_80C857C.o(.text); src/item_use.o(.text); - src/battle_anim_80CA710.o(.text); + src/battle_anim_80CA710.o(.text); asm/battle_anim_80CA710.o(.text); src/bike.o(.text); asm/easy_chat.o(.text); @@ -266,7 +266,7 @@ SECTIONS { src/braille_puzzles.o(.text); asm/pokeblock_feed.o(.text); src/clear_save_data_menu.o(.text); - src/intro_credits_graphics.o(.text); + src/intro_credits_graphics.o(.text); asm/evolution_graphics.o(.text); src/bard_music.o(.text); src/fldeff_teleport.o(.text); diff --git a/src/intro_credits_graphics.c b/src/intro_credits_graphics.c index 6d50581d2..cd0589af8 100755 --- a/src/intro_credits_graphics.c +++ b/src/intro_credits_graphics.c @@ -376,7 +376,7 @@ void sub_8149020(u8 mode) /* stuff */ if (gMain.vblankCounter1 & 3 || gPaletteFade.active) break; - if(gMain.vblankCounter1 & 4) + if (gMain.vblankCounter1 & 4) { var1 = gPlttBufferUnfaded[9]; var2 = gPlttBufferUnfaded[10]; @@ -390,9 +390,9 @@ void sub_8149020(u8 mode) LoadPalette(&var2, 10, 2); break; case 2: - /* stuff */ - if(gMain.vblankCounter1 & 3 || gPaletteFade.active) break; - if(gMain.vblankCounter1 & 4) + if (gMain.vblankCounter1 & 3 || gPaletteFade.active) + break; + if (gMain.vblankCounter1 & 4) { var1 = 0x3D27; var2 = 0x295; @@ -412,7 +412,7 @@ void sub_8149020(u8 mode) void sub_814910C(struct Sprite *sprite) { - if(gUnknown_0203935C) + if (gUnknown_0203935C) { DestroySprite(sprite); } -- cgit v1.2.3 From e7a0e1a8406925ac94289bbe42bfe95c67464939 Mon Sep 17 00:00:00 2001 From: golemgalvanize Date: Sun, 13 Aug 2017 19:02:49 -0400 Subject: Update ld_script.txt --- ld_script.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/ld_script.txt b/ld_script.txt index 8b3989c8d..babcf5861 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -182,7 +182,6 @@ SECTIONS { asm/contest_link_80C857C.o(.text); src/contest_link_80C857C.o(.text); src/item_use.o(.text); - src/battle_anim_80CA710.o(.text); asm/battle_anim_80CA710.o(.text); src/bike.o(.text); asm/easy_chat.o(.text); -- cgit v1.2.3 From cd67e14e04c0fb58f876ddb96b0daabb4d0d1eac Mon Sep 17 00:00:00 2001 From: golemgalvanize Date: Sun, 13 Aug 2017 19:26:16 -0400 Subject: Delete battle_anim_80CA710.c --- src/battle_anim_80CA710.c | 2647 --------------------------------------------- 1 file changed, 2647 deletions(-) delete mode 100755 src/battle_anim_80CA710.c diff --git a/src/battle_anim_80CA710.c b/src/battle_anim_80CA710.c deleted file mode 100755 index 53494608a..000000000 --- a/src/battle_anim_80CA710.c +++ /dev/null @@ -1,2647 +0,0 @@ -#include "global.h" -#include "battle.h" -#include "battle_anim.h" -#include "blend_palette.h" -#include "decompress.h" -#include "palette.h" -#include "rng.h" -#include "rom_8077ABC.h" -#include "sound.h" -#include "sprite.h" -#include "task.h" -#include "trig.h" - -struct __attribute__((packed)) Some3ByteStruct { - u8 unkArr[3]; -}; - -extern s16 gBattleAnimArgs[8]; -extern u8 gBattleAnimPlayerMonIndex; -extern u8 gBattleAnimEnemyMonIndex; -extern struct SpriteTemplate gSpriteTemplate_83D631C; -extern struct SpriteTemplate gSpriteTemplate_83D6884; -extern s16 gUnknown_03000728[]; -extern s8 gUnknown_083D680C[11][3]; -extern u16 gUnknown_083D6984[]; - -void sub_80CA768(struct Sprite* sprite); -void sub_80CA8B4(struct Sprite* sprite); -void sub_80CA9F8(struct Sprite* sprite); -void sub_80CAACC(struct Sprite* sprite); -void sub_80CAB88(struct Sprite* sprite); -void sub_80CABC0(struct Sprite* sprite); -void sub_80CAC44(struct Sprite* sprite); -void sub_80CADA8(struct Sprite* sprite); -void sub_80CAE74(struct Sprite* sprite); -void sub_80CAF20(struct Sprite* sprite); -void sub_80CAF6C(struct Sprite* sprite); -void sub_80CB09C(struct Sprite* sprite); -void sub_80CB1A4(struct Sprite* sprite); -void sub_80CB298(struct Sprite* sprite); -void sub_80CB2D4(struct Sprite* sprite); -void sub_80CB710(struct Sprite* sprite); -void sub_80CBB60(struct Sprite* sprite); -void sub_80CBC8C(struct Sprite* sprite); -void sub_80CBCF8(struct Sprite* sprite); -void sub_80CBDB0(struct Sprite* sprite); -void sub_80CC408(struct Sprite* sprite); -void sub_80CC580(struct Sprite* sprite); -void sub_80CC7D4(struct Sprite* sprite); -void sub_80CCB00(struct Sprite* sprite); -void sub_80CCCB4(struct Sprite* sprite); -void sub_80CCE0C(struct Sprite* sprite); - -s16 sub_80CC338(struct Sprite* sprite); - -void sub_80787B0(struct Sprite *sprite, u8 a2); -void sub_8078764(struct Sprite *sprite, u8 a2); -void sub_8078B34(struct Sprite *sprite); -void sub_8078D60(struct Sprite *sprite); -void sub_80786EC(struct Sprite *sprite); -void sub_80782D8(struct Sprite *sprite); -void sub_8078CC0(struct Sprite *sprite); -void sub_8078600(struct Sprite *sprite); -void sub_8078504(struct Sprite *sprite); - -void sub_807A3FC(u8 slot, u8 a2, s16 *a3, s16 *a4); -u8 sub_8079ED4(u8 slot); -s8 sub_8076F98(s8 a); -int sub_807A100(u8 slot, u8 a2); -u16 sub_80790F0(s16 a, s16 b); -void sub_8078FDC(struct Sprite *sprite, bool8 a2, s16 xScale, s16 yScale, u16 rotation); -void sub_807867C(struct Sprite *sprite, s16 a2); -u8 sub_8077EE4(u8 slot, u8 a2); - -void move_anim_8074EE0(struct Sprite *sprite); -bool8 sub_8078718(struct Sprite *sprite); -bool8 sub_8078CE8(struct Sprite *sprite); - -void sub_80CB3A8(u8 taskId); -void sub_80CB438(u8 taskId); -void sub_80CBF5C(u8 taskId); -void sub_80CC358(struct Task* task, u8 taskId); - -void sub_80CA710(struct Sprite* sprite) -{ - sprite->pos1.x += gBattleAnimArgs[0]; - sprite->pos1.y += gBattleAnimArgs[1]; - sprite->data0 = gBattleAnimArgs[2]; - sprite->data1 = gBattleAnimArgs[3]; - if (GetBankSide(gBattleAnimPlayerMonIndex)) - { - sprite->data3 = -gBattleAnimArgs[4]; - } - else - { - sprite->data3 = gBattleAnimArgs[4]; - } - sprite->data4 = gBattleAnimArgs[5]; - sprite->callback = sub_80CA768; -} - -void sub_80CA768(struct Sprite* sprite) -{ - if (sprite->data0 > 0) - { - sprite->data0--; - sprite->pos2.y = sprite->data2 >> 8; - sprite->data2 += sprite->data1; - sprite->pos2.x = Sin(sprite->data5, sprite->data3); - sprite->data5 = (sprite->data5 + sprite->data4) & 0xFF; - } - else - { - move_anim_8072740(sprite); - } -} - -void sub_80CA7B0(struct Sprite* sprite) -{ - sub_80787B0(sprite, 1); - sprite->data0 = gBattleAnimArgs[2]; - sprite->data2 = sub_8077ABC(gBattleAnimPlayerMonIndex, 2); - sprite->data4 = sub_8077ABC(gBattleAnimPlayerMonIndex, 3); - sprite->callback = sub_8078B34; - oamt_set_x3A_32(sprite, move_anim_8074EE0); -} - -void sub_80CA800(struct Sprite* sprite) -{ - sub_80787B0(sprite, 1); - StartSpriteAnim(sprite, gBattleAnimArgs[3]); - sprite->data0 = gBattleAnimArgs[2]; - sprite->data2 = sub_8077ABC(gBattleAnimEnemyMonIndex, 2); - sprite->data4 = sub_8077ABC(gBattleAnimEnemyMonIndex, 3); - sprite->callback = sub_8078B34; - oamt_set_x3A_32(sprite, move_anim_8072740); -} - -void sub_80CA858(struct Sprite* sprite) -{ - sub_80787B0(sprite, 1); - sprite->data0 = gBattleAnimArgs[2]; - sprite->data1 = sprite->pos1.x; - sprite->data2 = sub_8077ABC(gBattleAnimEnemyMonIndex, 2); - sprite->data3 = sprite->pos1.y; - sprite->data4 = sub_8077ABC(gBattleAnimEnemyMonIndex, 3); - obj_translate_based_on_private_1_2_3_4(sprite); - sprite->data5 = gBattleAnimArgs[3]; - sprite->callback = sub_80CA8B4; - sub_80CA8B4(sprite); -} - -void sub_80CA8B4(struct Sprite* sprite) -{ - if(sub_8078B5C(sprite)) - { - DestroySprite(sprite); - } - else - { - if(sprite->data5 > 0x7F) - { - sprite->subpriority = sub_8079E90(gBattleAnimEnemyMonIndex) + 1; - } - else - { - sprite->subpriority = sub_8079E90(gBattleAnimEnemyMonIndex) + 6; - } - sprite->pos2.x += Sin(sprite->data5, 5); - sprite->pos2.y += Cos(sprite->data5, 14); - sprite->data5 = (sprite->data5 + 15) & 0xFF; - } -} - -void sub_80CA928(u8 taskId) -{ - gTasks[taskId].data[0]--; - if (gTasks[taskId].data[0] == -1) - { - gTasks[taskId].data[1]++; - gTasks[taskId].data[0] = 6; - gBattleAnimArgs[0] = 15; - gBattleAnimArgs[1] = 0; - gBattleAnimArgs[2] = 80; - gBattleAnimArgs[3] = 0; - CreateSpriteAndAnimate(&gSpriteTemplate_83D631C, 0, 0, sub_8079E90(gBattleAnimEnemyMonIndex) + 1); - } - if (gTasks[taskId].data[1] == 15) DestroyAnimVisualTask(taskId); -} - -void sub_80CA9A8(struct Sprite* sprite) -{ - sub_8078764(sprite, 1); - sprite->data0 = gBattleAnimArgs[3]; - sprite->data2 = sub_8077ABC(gBattleAnimPlayerMonIndex, 2); - sprite->data4 = sub_8077ABC(gBattleAnimPlayerMonIndex, 3); - sprite->data5 = gBattleAnimArgs[2]; - sub_80786EC(sprite); - sprite->callback = sub_80CA9F8; -} - -void sub_80CA9F8(struct Sprite* sprite) -{ - if (sub_8078718(sprite)) move_anim_8072740(sprite); -} - -void sub_80CAA14(struct Sprite* sprite) -{ - u16 a = Random(); - u16 b; - - StartSpriteAnim(sprite, a & 7); - sprite->pos1.x = sub_8077ABC(gBattleAnimPlayerMonIndex, 2); - sprite->pos1.y = sub_8077ABC(gBattleAnimPlayerMonIndex, 3); - if (GetBankSide(gBattleAnimPlayerMonIndex)) - { - sprite->pos1.x -= 20; - } - else - { - sprite->pos1.x += 20; - } - b = Random(); - sprite->data0 = (b & 31) + 64; - sprite->data1 = sprite->pos1.x; - sprite->data2 = sub_8077ABC(gBattleAnimEnemyMonIndex, 2); - sprite->data3 = sprite->pos1.y; - sprite->data4 = sub_8077ABC(gBattleAnimEnemyMonIndex, 3); - sub_8078D60(sprite); - sprite->data5 = Random() & 0xFF; - sprite->data6 = sprite->subpriority; - sprite->callback = sub_80CAACC; - sub_80CAACC(sprite); -} - -void sub_80CAACC(struct Sprite* sprite) -{ - if (sub_8078CE8(sprite)) - { - move_anim_8072740(sprite); - } - else - { - sprite->pos2.y += Cos(sprite->data5, 12); - if (sprite->data5 <= 0x7E) - { - sprite->subpriority = sprite->data6; - } - else - { - sprite->subpriority = sprite->data6 + 1; - } - sprite->data5 = (sprite->data5 + 24) & 0xFF; - } -} - -void sub_80CAB18(struct Sprite* sprite) -{ - sub_80787B0(sprite, 1); - if(GetBankSide(gBattleAnimPlayerMonIndex)) - { - gBattleAnimArgs[2] = -gBattleAnimArgs[2]; - } - sprite->data0 = gBattleAnimArgs[4]; - sprite->data2 = sub_8077ABC(gBattleAnimEnemyMonIndex, 0) + gBattleAnimArgs[2]; - sprite->data4 = sub_8077ABC(gBattleAnimEnemyMonIndex, 1) + gBattleAnimArgs[3]; - sprite->data5 = gBattleAnimArgs[5]; - sub_80786EC(sprite); - sprite->callback = sub_80CAB88; -} - -void sub_80CAB88(struct Sprite* sprite) -{ - if(sub_8078718(sprite)) - { - sprite->invisible = 1; - sprite->data0 = 10; - sprite->callback = sub_80782D8; - oamt_set_x3A_32(sprite, sub_80CABC0); - } -} - -void sub_80CABC0(struct Sprite* sprite) -{ - sprite->invisible = 0; - StartSpriteAnim(sprite, 1); - sprite->data0 = 60; - sprite->callback = sub_80782D8; - oamt_set_x3A_32(sprite, move_anim_8072740); -} - -void sub_80CABF8(struct Sprite* sprite) -{ - sub_8078764(sprite, 1); - StartSpriteAnim(sprite, gBattleAnimArgs[4]); - if (gBattleAnimArgs[4] == 1) - { - sprite->oam.objMode = 1; - } - sprite->data0 = gBattleAnimArgs[3]; - sprite->data1 = gBattleAnimArgs[2]; - sprite->callback = sub_80CAC44; - sub_80CAC44(sprite); -} - -void sub_80CAC44(struct Sprite* sprite) -{ - - u8 b; - - sprite->pos2.x = Sin(sprite->data1, 32); - sprite->pos2.y = Cos(sprite->data1, -3) + ((sprite->data2 += 24) >> 8); - if ((u16)(sprite->data1 - 0x40) < 0x80) - { - sprite->oam.priority = (sub_8079ED4(gBattleAnimEnemyMonIndex) & 3); - } - else - { - b = sub_8079ED4(gBattleAnimEnemyMonIndex) + 1; - if ( b > 3) - { - b = 3; - } - sprite->oam.priority = b; - } - sprite->data1 = (sprite->data1 + 2) & 0xFF; - sprite->data0--; - if (sprite->data0 == -1) move_anim_8072740(sprite); -} - -void sub_80CACEC(u8 taskId) -{ - if(IsContest() || !IsDoubleBattle()) - { - DestroyAnimVisualTask(taskId); - } - else - { - if (GetBankIdentity_permutated(gBattleAnimEnemyMonIndex) == 1) - { - REG_BG2CNT_BITFIELD.priority = 3; - } - else - { - REG_BG1CNT_BITFIELD.priority = 1; - } - DestroyAnimVisualTask(taskId); - } -} - -void sub_80CAD54(struct Sprite* sprite) -{ - sub_80787B0(sprite, 0); - sprite->data0 = gBattleAnimArgs[3]; - sprite->data1 = sprite->pos1.x; - sprite->data2 = sprite->pos1.x; - sprite->data3 = sprite->pos1.y; - sprite->data4 = sub_8077ABC(gBattleAnimPlayerMonIndex, 3) + gBattleAnimArgs[2]; - obj_translate_based_on_private_1_2_3_4(sprite); - sprite->data5 = 0x40; - sprite->callback = sub_80CADA8; - sub_80CADA8(sprite); -} - -void sub_80CADA8(struct Sprite* sprite) -{ - if(!sub_8078B5C(sprite)) - { - sprite->pos2.x += Sin(sprite->data5, 32); - sprite->pos2.y += Cos(sprite->data5, -5); - if ((u16)(sprite->data5 - 0x40) < 0x80) - { - sprite->subpriority = sub_8079E90(gBattleAnimPlayerMonIndex) - 1; - } - else - { - sprite->subpriority = sub_8079E90(gBattleAnimPlayerMonIndex) + 1; - } - sprite->data5 = (sprite->data5 + 5) & 0xFF; - } - else - { - move_anim_8072740(sprite); - } -} - -void sub_80CAE20(struct Sprite* sprite) -{ - sub_80787B0(sprite, 1); - sprite->data0 = gBattleAnimArgs[3]; - sprite->data1 = sprite->pos1.x; - sprite->data2 = sprite->pos1.x; - sprite->data3 = sprite->pos1.y; - sprite->data4 = sub_8077ABC(gBattleAnimPlayerMonIndex, 3) + gBattleAnimArgs[2]; - obj_translate_based_on_private_1_2_3_4(sprite); - sprite->data5 = 0x40; - sprite->callback = sub_80CAE74; - sub_80CAE74(sprite); -} - -void sub_80CAE74(struct Sprite* sprite) -{ - if(!sub_8078B5C(sprite)) - { - sprite->pos2.x += Sin(sprite->data5, 8); - if ((u16)(sprite->data5 - 0x3B) < 5 || (u16)(sprite->data5 - 0xBB) < 5) - { - sprite->oam.matrixNum ^= 8; - } - sprite->data5 = (sprite->data5 + 5) & 0xFF; - } - else - { - move_anim_8072740(sprite); - } -} - -void sub_80CAED8(struct Sprite* sprite) -{ - sprite->pos1.x = sub_8077ABC(gBattleAnimPlayerMonIndex, 2); - sprite->pos1.y = sub_8077ABC(gBattleAnimPlayerMonIndex, 3); - sprite->data0 = gBattleAnimArgs[0]; - sprite->data1 = gBattleAnimArgs[1]; - sprite->data2 = gBattleAnimArgs[2]; - sprite->callback = sub_80CAF20; -} - -void sub_80CAF20(struct Sprite* sprite) -{ - if(!sprite->data2) - { - if(sprite->data1 & 1) - { - sprite->data0 = 0x80; - sprite->data1 = 0; - sprite->data2 = 0; - } - else - { - sprite->data0 = sprite->data1 & 1; - sprite->data1 = sprite->data1 & 1; - sprite->data2 = sprite->data1 & 1; - } - sprite->callback = sub_80CAF6C; - } - else - { - sprite->data2--; - sprite->pos1.x += sprite->data0; - sprite->pos1.y += sprite->data1; - } -} - -void sub_80CAF6C(struct Sprite* sprite) -{ - if(GetBankSide(gBattleAnimPlayerMonIndex)) - { - sprite->pos2.x = -Sin(sprite->data0, 0x19); - } - else - { - sprite->pos2.x = Sin(sprite->data0, 0x19); - } - sprite->data0 = (sprite->data0 + 2) & 0xFF; - sprite->data1++; - if(!(sprite->data1 & 1)) - { - sprite->pos2.y++; - } - if(sprite->data1 > 0x50) - { - move_anim_8072740(sprite); - } -} - -void sub_80CAFD0(struct Sprite* sprite) -{ - sub_80787B0(sprite, 1); - if(GetBankSide(gBattleAnimPlayerMonIndex)) - { - gBattleAnimArgs[2] = -gBattleAnimArgs[2]; - } - sprite->data0 = gBattleAnimArgs[4]; - if(!(gBattleAnimArgs[6])) - { - sprite->data2 = sub_8077ABC(gBattleAnimEnemyMonIndex, 2) + gBattleAnimArgs[2]; - sprite->data4 = sub_8077ABC(gBattleAnimEnemyMonIndex, 3) + gBattleAnimArgs[3]; - } - else - { - sub_807A3FC(gBattleAnimEnemyMonIndex, 1, &sprite->data2, &sprite->data4); - sprite->data2 += gBattleAnimArgs[2]; - sprite->data4 += gBattleAnimArgs[3]; - } - sprite->data5 = gBattleAnimArgs[5]; - sub_80786EC(sprite); - if(GetBankSide(gBattleAnimPlayerMonIndex) == GetBankSide(gBattleAnimEnemyMonIndex)) - { - sprite->data0 = 1; - } - else - { - sprite->data0 = 0; - } - sprite->callback = sub_80CB09C; -} - -#ifdef NONMATCHING -void sub_80CB09C(struct Sprite* sprite) -{ - s16 c = 0; - s16 a = sprite->data0; - s16 b = sprite->data7; - sprite->data0 = 1; - sub_8078718(sprite); - sprite->data0 = a; - if (b > 0xC8 && sprite->data7 <= 0x37 && sprite->oam.affineParam == 0) - sprite->oam.affineParam++; - if (sprite->oam.affineParam != 0 && sprite->data0 != 0) - { - sprite->invisible ^= 1; - sprite->oam.affineParam++; - if(sprite->oam.affineParam == 0x1E) - { - c = 1; - } - } - if((sprite->pos1.x + sprite->pos2.x + 16) <= 0x110 && (sprite->pos1.y + sprite->pos2.y) <= 0xA0 && (sprite->pos1.y + sprite->pos2.y) < -16) - { - c = 1; - } - if (!c) move_anim_8072740(sprite); -} -#else -__attribute__((naked)) -void sub_80CB09C(struct Sprite* sprite) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - adds r6, r0, 0\n\ - movs r7, 0\n\ - ldrh r5, [r6, 0x2E]\n\ - ldrh r4, [r6, 0x3C]\n\ - movs r0, 0x1\n\ - strh r0, [r6, 0x2E]\n\ - adds r0, r6, 0\n\ - bl sub_8078718\n\ - ldrh r0, [r6, 0x3C]\n\ - strh r5, [r6, 0x2E]\n\ - lsls r4, 16\n\ - asrs r4, 16\n\ - cmp r4, 0xC8\n\ - ble _080CB0CE\n\ - lsls r0, 16\n\ - asrs r0, 16\n\ - cmp r0, 0x37\n\ - bgt _080CB0CE\n\ - ldrh r0, [r6, 0x6]\n\ - cmp r0, 0\n\ - bne _080CB0D4\n\ - adds r0, 0x1\n\ - strh r0, [r6, 0x6]\n\ -_080CB0CE:\n\ - ldrh r0, [r6, 0x6]\n\ - cmp r0, 0\n\ - beq _080CB106\n\ -_080CB0D4:\n\ - movs r1, 0x2E\n\ - ldrsh r0, [r6, r1]\n\ - cmp r0, 0\n\ - beq _080CB106\n\ - adds r3, r6, 0\n\ - adds r3, 0x3E\n\ - ldrb r2, [r3]\n\ - lsls r0, r2, 29\n\ - lsrs r0, 31\n\ - movs r1, 0x1\n\ - eors r1, r0\n\ - lsls r1, 2\n\ - movs r0, 0x5\n\ - negs r0, r0\n\ - ands r0, r2\n\ - orrs r0, r1\n\ - strb r0, [r3]\n\ - ldrh r0, [r6, 0x6]\n\ - adds r0, 0x1\n\ - strh r0, [r6, 0x6]\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - cmp r0, 0x1E\n\ - bne _080CB106\n\ - movs r7, 0x1\n\ -_080CB106:\n\ - movs r2, 0x20\n\ - ldrsh r0, [r6, r2]\n\ - movs r2, 0x24\n\ - ldrsh r1, [r6, r2]\n\ - adds r0, r1\n\ - adds r0, 0x10\n\ - movs r1, 0x88\n\ - lsls r1, 1\n\ - cmp r0, r1\n\ - bhi _080CB130\n\ - movs r0, 0x22\n\ - ldrsh r1, [r6, r0]\n\ - movs r2, 0x26\n\ - ldrsh r0, [r6, r2]\n\ - adds r1, r0\n\ - cmp r1, 0xA0\n\ - bgt _080CB130\n\ - movs r0, 0x10\n\ - negs r0, r0\n\ - cmp r1, r0\n\ - bge _080CB132\n\ -_080CB130:\n\ - movs r7, 0x1\n\ -_080CB132:\n\ - cmp r7, 0\n\ - beq _080CB13C\n\ - adds r0, r6, 0\n\ - bl move_anim_8072740\n\ -_080CB13C:\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .syntax divided\n"); -} -#endif - -void sub_80CB144(struct Sprite* sprite) -{ - if(!IsContest() && IsDoubleBattle() == TRUE) - { - sub_807A3FC(gBattleAnimEnemyMonIndex, 1, &sprite->pos1.x, &sprite->pos1.y); - } - sprite->pos1.y += 32; - sprite->data0 = gBattleAnimArgs[0]; - sprite->data1 = gBattleAnimArgs[1]; - sprite->data2 = gBattleAnimArgs[2]; - sprite->data3 = gBattleAnimArgs[3]; - sprite->data4 = gBattleAnimArgs[4]; - sprite->callback = sub_80CB1A4; -} - -void sub_80CB1A4(struct Sprite* sprite) -{ - if(sprite->data1 == 0xFF) - { - sprite->pos1.y -= 2; - } - else if(sprite->data1 > 0) - { - sprite->pos1.y -= 2; - sprite->data1 -= 2; - } - sprite->data5 += sprite->data2; - if(sprite->data0 < sprite->data4) sprite->data5 += sprite->data2; - sprite->data5 &= 0xFF; - sprite->pos2.x = Cos(sprite->data5, sprite->data3); - sprite->pos2.y = Sin(sprite->data5, 5); - if(sprite->data5 <= 0x7F) - { - sprite->oam.priority = sub_8079ED4(gBattleAnimEnemyMonIndex) - 1; - } - else - { - sprite->oam.priority = sub_8079ED4(gBattleAnimEnemyMonIndex) + 1; - } - sprite->data0--; - if(!sprite->data0) move_anim_8072740(sprite); -} - -void sub_80CB25C(struct Sprite* sprite) -{ - sub_8078764(sprite, 0); - sprite->affineAnimPaused = 1; - StartSpriteAffineAnim(sprite, gBattleAnimArgs[2]); - sprite->data6 = gBattleAnimArgs[2]; - sprite->data7 = gBattleAnimArgs[3]; - sprite->callback = sub_80CB298; -} - -void sub_80CB298(struct Sprite* sprite) -{ - if((u16)gBattleAnimArgs[7] == 0xFFFF) - { - sprite->affineAnimPaused = 0; - obj_id_for_side_relative_to_move(1); - sprite->data0 = 0x100; - sprite->callback = sub_80CB2D4; - } -} - -void sub_80CB2D4(struct Sprite* sprite) -{ - obj_id_for_side_relative_to_move(1); - if(!sprite->data2) - { - sprite->data0 += 11; - } - else - { - sprite->data0 -= 11; - } - sprite->data1++; - if(sprite->data1 == 6) - { - sprite->data1 = 0; - sprite->data2 ^= 1; - } - if(sprite->affineAnimEnded) - { - sprite->data7--; - if(sprite->data7 > 0) - { - StartSpriteAffineAnim(sprite, sprite->data6); - } - else - { - move_anim_8072740(sprite); - } - } -} - -void sub_80CB340(u8 taskId) -{ - u8 spriteId = obj_id_for_side_relative_to_move(1); - if(gSprites[spriteId].invisible) - { - DestroyAnimVisualTask(taskId); - } - else - { - sub_8078E70(spriteId, 1); - gTasks[taskId].data[0] = gBattleAnimArgs[0]; - gTasks[taskId].data[1] = gBattleAnimArgs[1]; - gTasks[taskId].data[11] = 256; - gTasks[taskId].func = sub_80CB3A8; - } -} - -void sub_80CB3A8(u8 taskId) -{ - u8 spriteId = obj_id_for_side_relative_to_move(1); - gTasks[taskId].data[10] += gTasks[taskId].data[0]; - gSprites[spriteId].pos2.x = gTasks[taskId].data[10] >> 8; - if(GetBankSide(gBattleAnimEnemyMonIndex)) - { - gSprites[spriteId].pos2.x = -gSprites[spriteId].pos2.x; - } - gTasks[taskId].data[11] += 16; - obj_id_set_rotscale(spriteId, gTasks[taskId].data[11], gTasks[taskId].data[11], 0); - sub_8079A64(spriteId); - gTasks[taskId].data[1]--; - if(!gTasks[taskId].data[1]) - { - gTasks[taskId].data[0] = 0; - gTasks[taskId].func = sub_80CB438; - } -} - -#ifdef NONMATCHING -void sub_80CB438(u8 taskId) -{ - if((u16)gBattleAnimArgs[7] == 0xFFFF) - { - if(!gTasks[taskId].data[0]) - { - u8 spriteId = obj_id_for_side_relative_to_move(1); - sub_8078F40(spriteId); - gSprites[spriteId].pos2.x = 0; - gSprites[spriteId].pos2.y = 0; - gTasks[taskId].data[0]++; - } - else - { - gTasks[taskId].data[0]++; - - } - } - else if(gTasks[taskId].data[0]) - { - gTasks[taskId].data[0]++; - } - if(gTasks[taskId].data[0] == 3) DestroyAnimVisualTask(taskId); -} -#else -__attribute__((naked)) -void sub_80CB438(u8 taskId) -{ - asm(".syntax unified\n\ - push {r4-r6,lr}\n\ - lsls r0, 24\n\ - lsrs r3, r0, 24\n\ - ldr r0, _080CB484 @ =gBattleAnimArgs\n\ - ldrh r1, [r0, 0xE]\n\ - ldr r0, _080CB488 @ =0x0000ffff\n\ - cmp r1, r0\n\ - bne _080CB494\n\ - ldr r0, _080CB48C @ =gTasks\n\ - lsls r2, r3, 2\n\ - adds r1, r2, r3\n\ - lsls r1, 3\n\ - adds r6, r1, r0\n\ - movs r1, 0x8\n\ - ldrsh r5, [r6, r1]\n\ - adds r4, r0, 0\n\ - cmp r5, 0\n\ - bne _080CB4A8\n\ - movs r0, 0x1\n\ - bl obj_id_for_side_relative_to_move\n\ - adds r4, r0, 0\n\ - lsls r4, 24\n\ - lsrs r4, 24\n\ - adds r0, r4, 0\n\ - bl sub_8078F40\n\ - ldr r1, _080CB490 @ =gSprites\n\ - lsls r0, r4, 4\n\ - adds r0, r4\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - strh r5, [r0, 0x24]\n\ - strh r5, [r0, 0x26]\n\ - ldrh r0, [r6, 0x8]\n\ - adds r0, 0x1\n\ - strh r0, [r6, 0x8]\n\ - b _080CB4C2\n\ - .align 2, 0\n\ -_080CB484: .4byte gBattleAnimArgs\n\ -_080CB488: .4byte 0x0000ffff\n\ -_080CB48C: .4byte gTasks\n\ -_080CB490: .4byte gSprites\n\ -_080CB494:\n\ - ldr r1, _080CB4C8 @ =gTasks\n\ - lsls r2, r3, 2\n\ - adds r0, r2, r3\n\ - lsls r0, 3\n\ - adds r0, r1\n\ - movs r4, 0x8\n\ - ldrsh r0, [r0, r4]\n\ - adds r4, r1, 0\n\ - cmp r0, 0\n\ - beq _080CB4C2\n\ -_080CB4A8:\n\ - adds r1, r2, r3\n\ - lsls r1, 3\n\ - adds r1, r4\n\ - ldrh r0, [r1, 0x8]\n\ - adds r0, 0x1\n\ - strh r0, [r1, 0x8]\n\ - lsls r0, 16\n\ - asrs r0, 16\n\ - cmp r0, 0x3\n\ - bne _080CB4C2\n\ - adds r0, r3, 0\n\ - bl DestroyAnimVisualTask\n\ -_080CB4C2:\n\ - pop {r4-r6}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080CB4C8: .4byte gTasks\n\ - .syntax divided\n"); -} -#endif - -void sub_80CB4CC(struct Sprite* sprite) -{ - switch(sprite->data0) - { - case 0: - { - if(GetBankSide(gBattleAnimEnemyMonIndex) == 0) - { - s16 a = gBattleAnimArgs[0]; - gBattleAnimArgs[0] = -a; - } - sprite->pos1.x = sub_8077ABC(gBattleAnimEnemyMonIndex, 0) + gBattleAnimArgs[0]; - sprite->pos1.y = sub_8077ABC(gBattleAnimEnemyMonIndex, 1) + gBattleAnimArgs[1]; - sprite->invisible = 1; - sprite->data0++; - break; - } - case 1: - { - sprite->invisible = 0; - if(sprite->affineAnimEnded) - { - ChangeSpriteAffineAnim(sprite, 1); - sprite->data0 = 25; - sprite->data2 = sub_8077ABC(gBattleAnimPlayerMonIndex, 2); - sprite->data4 = sub_8077ABC(gBattleAnimPlayerMonIndex, 3); - sprite->callback = sub_8078CC0; - oamt_set_x3A_32(sprite, move_anim_8072740); - break; - } - } - } -} - -void sub_80CB59C(struct Sprite* sprite) -{ - if(!sprite->data0) - { - sprite->pos1.x = sub_8077ABC(gBattleAnimPlayerMonIndex, 2); - sprite->pos1.y = sub_8077ABC(gBattleAnimPlayerMonIndex, 1); - sprite->pos2.x = gBattleAnimArgs[0]; - sprite->pos2.y = gBattleAnimArgs[1]; - sprite->subpriority = gBattleAnimArgs[2] + 30; - StartSpriteAnim(sprite, gBattleAnimArgs[3]); - sprite->data2 = gBattleAnimArgs[4]; - sprite->data0++; - if((sprite->pos1.y + sprite->pos2.y) > 120) - { - sprite->pos1.y += -120 + (sprite->pos2.y + sprite->pos1.y); - } - } - sprite->callback = sub_80CB710; -} - -#ifdef NONMATCHING -void sub_80CB620(struct Sprite* sprite) -{ - u8 p1 = sub_8077ABC(gBattleAnimPlayerMonIndex, 2); - u8 p2 = sub_8077ABC(gBattleAnimPlayerMonIndex, 3); - u8 e1 = sub_8077ABC(gBattleAnimEnemyMonIndex, 2); - u8 e2 = sub_8077ABC(gBattleAnimEnemyMonIndex, 3); - e1 -= p1; - e2 -= p2; - sprite->pos1.x = p1 + ((gBattleAnimArgs[0] * e1) / 100); - sprite->pos1.y = p2 + ((gBattleAnimArgs[0] * e2) / 100); - sprite->pos2.x = gBattleAnimArgs[1]; - sprite->pos2.y = gBattleAnimArgs[2]; - sprite->subpriority = gBattleAnimArgs[3] + 30; - StartSpriteAnim(sprite, gBattleAnimArgs[4]); - sprite->data2 = gBattleAnimArgs[5]; - sprite->callback = sub_80CB710; - gUnknown_03000728[0] = sprite->pos1.x; - gUnknown_03000728[1] = sprite->pos1.y; - gUnknown_03000728[2] = e1; - gUnknown_03000728[3] = e2; -} -#else -__attribute__((naked)) -void sub_80CB620(struct Sprite* sprite) -{ - asm(".syntax unified\n\ - push {r4-r6,lr}\n\ - mov r6, r10\n\ - mov r5, r9\n\ - mov r4, r8\n\ - push {r4-r6}\n\ - sub sp, 0x4\n\ - mov r9, r0\n\ - ldr r4, _080CB6FC @ =gBattleAnimPlayerMonIndex\n\ - ldrb r0, [r4]\n\ - movs r1, 0x2\n\ - bl sub_8077ABC\n\ - adds r5, r0, 0\n\ - lsls r5, 24\n\ - lsrs r5, 24\n\ - ldrb r0, [r4]\n\ - movs r1, 0x3\n\ - bl sub_8077ABC\n\ - mov r8, r0\n\ - mov r0, r8\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r8, r0\n\ - ldr r6, _080CB700 @ =gBattleAnimEnemyMonIndex\n\ - ldrb r0, [r6]\n\ - movs r1, 0x2\n\ - bl sub_8077ABC\n\ - adds r4, r0, 0\n\ - lsls r4, 24\n\ - lsrs r4, 24\n\ - ldrb r0, [r6]\n\ - movs r1, 0x3\n\ - bl sub_8077ABC\n\ - adds r2, r0, 0\n\ - lsls r2, 24\n\ - subs r4, r5\n\ - lsls r4, 16\n\ - lsrs r2, 24\n\ - mov r1, r8\n\ - subs r2, r1\n\ - lsls r2, 16\n\ - lsrs r2, 16\n\ - lsrs r3, r4, 16\n\ - mov r10, r3\n\ - asrs r4, 16\n\ - ldr r6, _080CB704 @ =gBattleAnimArgs\n\ - movs r1, 0\n\ - ldrsh r0, [r6, r1]\n\ - muls r0, r4\n\ - movs r1, 0x64\n\ - str r2, [sp]\n\ - bl __divsi3\n\ - adds r5, r0\n\ - mov r3, r9\n\ - strh r5, [r3, 0x20]\n\ - ldr r2, [sp]\n\ - lsls r0, r2, 16\n\ - asrs r0, 16\n\ - movs r3, 0\n\ - ldrsh r1, [r6, r3]\n\ - muls r0, r1\n\ - movs r1, 0x64\n\ - bl __divsi3\n\ - add r8, r0\n\ - mov r1, r8\n\ - mov r0, r9\n\ - strh r1, [r0, 0x22]\n\ - ldrh r0, [r6, 0x2]\n\ - mov r3, r9\n\ - strh r0, [r3, 0x24]\n\ - ldrh r0, [r6, 0x4]\n\ - strh r0, [r3, 0x26]\n\ - ldrb r0, [r6, 0x6]\n\ - adds r0, 0x1E\n\ - mov r1, r9\n\ - adds r1, 0x43\n\ - strb r0, [r1]\n\ - ldrb r1, [r6, 0x8]\n\ - mov r0, r9\n\ - bl StartSpriteAnim\n\ - ldrh r0, [r6, 0xA]\n\ - mov r1, r9\n\ - strh r0, [r1, 0x32]\n\ - ldr r0, _080CB708 @ =sub_80CB710\n\ - str r0, [r1, 0x1C]\n\ - ldr r1, _080CB70C @ =gUnknown_03000728\n\ - mov r3, r9\n\ - ldrh r0, [r3, 0x20]\n\ - strh r0, [r1]\n\ - ldrh r0, [r3, 0x22]\n\ - strh r0, [r1, 0x2]\n\ - mov r0, r10\n\ - strh r0, [r1, 0x4]\n\ - ldr r2, [sp]\n\ - strh r2, [r1, 0x6]\n\ - add sp, 0x4\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r6}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080CB6FC: .4byte gBattleAnimPlayerMonIndex\n\ -_080CB700: .4byte gBattleAnimEnemyMonIndex\n\ -_080CB704: .4byte gBattleAnimArgs\n\ -_080CB708: .4byte sub_80CB710\n\ -_080CB70C: .4byte gUnknown_03000728\n\ - .syntax divided\n"); -} -#endif - -void sub_80CB710(struct Sprite* sprite) -{ - if(++sprite->data0 > (sprite->data2 - 10)) - { - sprite->invisible = sprite->data0 % 2; - } - if(sprite->data0 > sprite->data2) move_anim_8072740(sprite); -} - -void sub_80CB768(struct Sprite* sprite) -{ - if(!sprite->data0) - { - sprite->pos1.x = sub_8077ABC(gBattleAnimPlayerMonIndex, 2) + gBattleAnimArgs[0]; - sprite->pos1.y = sub_8077ABC(gBattleAnimPlayerMonIndex, 1) + gBattleAnimArgs[1]; - sprite->data1 = gBattleAnimArgs[2]; - sprite->data2 = gBattleAnimArgs[3]; - sprite->data3 = gBattleAnimArgs[4]; - } - sprite->data0++; - sprite->pos2.x = sprite->data1 * sprite->data0; - sprite->pos2.y = Sin((sprite->data0 * 20) & 0xFF, sprite->data2); - if(sprite->data0 > sprite->data3) move_anim_8072740(sprite); -} - -void sub_80CB7EC(struct Sprite* sprite, s16 c) -{ - s32 a = (sprite->pos1.x * 256) | sprite->pos1.y; - s32 b = (sprite->data6 * 256) | sprite->data7; - c *= 256; - sprite->data5 = a; - sprite->data6 = b; - sprite->data7 = c; -} - -#ifdef NONMATCHING -bool8 sub_80CB814(struct Sprite* sprite) -{ - s32 a = sprite->data5 >> 8; - s16 d = sprite->data5; - s16 b = sprite->data6 >> 8; - s16 e = sprite->data6; - s16 c = sprite->data7 >> 8; - s16 f = c & 0xFF; - if(!b) - { - b = ~32; - } - else if(b == 255) - { - b = 0x110; - } - sprite->pos1.x = ((b - a) * f / a ) + (((e - d) * f) / a); - sprite->pos2.y = d; - f++; - if(f != a) - { - sprite->data7 = (f << 8) | c; - return FALSE; - } - return TRUE; -} -#else -__attribute__((naked)) -bool8 sub_80CB814(struct Sprite* sprite) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - mov r8, r0\n\ - ldrh r0, [r0, 0x38]\n\ - lsrs r1, r0, 8\n\ - mov r10, r1\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r9, r0\n\ - mov r1, r8\n\ - ldrh r0, [r1, 0x3A]\n\ - lsrs r2, r0, 8\n\ - lsls r0, 24\n\ - lsrs r4, r0, 24\n\ - ldrh r1, [r1, 0x3C]\n\ - lsls r0, r1, 16\n\ - asrs r0, 24\n\ - lsls r0, 16\n\ - lsrs r6, r0, 16\n\ - movs r3, 0xFF\n\ - ands r3, r1\n\ - cmp r2, 0\n\ - bne _080CB84E\n\ - movs r2, 0x20\n\ - negs r2, r2\n\ - b _080CB856\n\ -_080CB84E:\n\ - cmp r2, 0xFF\n\ - bne _080CB856\n\ - movs r2, 0x88\n\ - lsls r2, 1\n\ -_080CB856:\n\ - mov r0, r9\n\ - subs r4, r0\n\ - lsls r4, 16\n\ - lsrs r4, 16\n\ - mov r1, r10\n\ - subs r0, r2, r1\n\ - lsls r5, r3, 16\n\ - asrs r5, 16\n\ - muls r0, r5\n\ - lsls r1, r6, 16\n\ - asrs r7, r1, 16\n\ - adds r1, r7, 0\n\ - bl __divsi3\n\ - adds r6, r0, 0\n\ - lsls r4, 16\n\ - asrs r4, 16\n\ - adds r0, r4, 0\n\ - muls r0, r5\n\ - adds r1, r7, 0\n\ - bl __divsi3\n\ - add r6, r10\n\ - mov r1, r8\n\ - strh r6, [r1, 0x20]\n\ - add r0, r9\n\ - strh r0, [r1, 0x22]\n\ - adds r5, 0x1\n\ - lsls r5, 16\n\ - lsrs r3, r5, 16\n\ - asrs r5, 16\n\ - cmp r5, r7\n\ - beq _080CB8A8\n\ - lsls r1, r7, 8\n\ - lsls r0, r3, 16\n\ - asrs r0, 16\n\ - orrs r0, r1\n\ - mov r1, r8\n\ - strh r0, [r1, 0x3C]\n\ - movs r0, 0\n\ - b _080CB8AA\n\ -_080CB8A8:\n\ - movs r0, 0x1\n\ -_080CB8AA:\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r1}\n\ - bx r1\n\ - .syntax divided\n"); -} -#endif - -void sub_80CB8B8(struct Sprite* sprite) -{ - if(sprite->data0 == 10) - { - StartSpriteAffineAnim(sprite, 1); - } - sprite->data0++; - if(sprite->data0 > 50) move_anim_8072740(sprite); -} - -#ifdef NONMATCHING -void sub_80CB8E8(struct Sprite* sprite) -{ - int temp = ((sprite->data3 * 128) / sprite->data4) + sprite->data0; - int zero = 0; - sprite->data0 = temp; - if(sprite->data0 > 0x7F) - { - sprite->data1++; - sprite->data0 = zero; - } - sprite->pos2.y = Sin(sprite->data0 + 0x80, (sprite->data1 * 8) - 30); - if(!sub_80CB814(sprite)) - { - sprite->pos2.y = zero; - sprite->data0 = zero; - sprite->callback = sub_80CB8B8; - } -} -#else -__attribute__((naked)) -void sub_80CB8E8(struct Sprite* sprite) -{ - asm(".syntax unified\n\ - push {r4,r5,lr}\n\ - adds r4, r0, 0\n\ - movs r1, 0x34\n\ - ldrsh r0, [r4, r1]\n\ - lsls r0, 7\n\ - movs r2, 0x36\n\ - ldrsh r1, [r4, r2]\n\ - bl __divsi3\n\ - ldrh r1, [r4, 0x2E]\n\ - adds r1, r0\n\ - movs r5, 0\n\ - strh r1, [r4, 0x2E]\n\ - lsls r1, 16\n\ - asrs r1, 16\n\ - cmp r1, 0x7F\n\ - ble _080CB912\n\ - ldrh r0, [r4, 0x30]\n\ - adds r0, 0x1\n\ - strh r0, [r4, 0x30]\n\ - strh r5, [r4, 0x2E]\n\ -_080CB912:\n\ - ldrh r0, [r4, 0x2E]\n\ - adds r0, 0x80\n\ - lsls r0, 16\n\ - asrs r0, 16\n\ - movs r1, 0x30\n\ - ldrsh r2, [r4, r1]\n\ - lsls r2, 3\n\ - movs r1, 0x1E\n\ - subs r1, r2\n\ - lsls r1, 16\n\ - asrs r1, 16\n\ - bl Sin\n\ - strh r0, [r4, 0x26]\n\ - adds r0, r4, 0\n\ - bl sub_80CB814\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _080CB942\n\ - strh r5, [r4, 0x26]\n\ - strh r5, [r4, 0x2E]\n\ - ldr r0, _080CB948 @ =sub_80CB8B8\n\ - str r0, [r4, 0x1C]\n\ -_080CB942:\n\ - pop {r4,r5}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080CB948: .4byte sub_80CB8B8\n\ - .syntax divided\n"); -} -#endif - -void sub_80CB94C(struct Sprite* sprite) -{ - s16 e1; - s16 e2; - sub_80787B0(sprite, 0); - e1 = sub_8077ABC(gBattleAnimEnemyMonIndex, 0); - e2 = sub_8077ABC(gBattleAnimEnemyMonIndex, 1); - if((gBattleAnimPlayerMonIndex ^ 2) == gBattleAnimEnemyMonIndex) - { - sprite->data6 = e1; - sprite->data7 = e2 + 10; - sub_80CB7EC(sprite, 0x3C); - sprite->data3 = 1; - } - else - { - sprite->data6 = e1; - sprite->data7 = e2 + 10; - sub_80CB7EC(sprite, 0x3C); - sprite->data3 = 3; - } - sprite->data4 = 0x3C; - sprite->callback = sub_80CB8E8; -} - -void sub_80CB9C4(struct Sprite* sprite) -{ - int zero; - sprite->data0 += ((sprite->data3 * 128) / sprite->data4); - zero = 0; - if(sprite->data0 > 0x7F) - { - sprite->data1++; - sprite->data0 = zero; - } - sprite->pos2.y = Sin(sprite->data0 + 0x80, 30 - sprite->data1 * 8); - if(sub_80CB814(sprite)) - { - sprite->pos2.y = zero; - sprite->data0 = zero; - move_anim_8072740(sprite); - } -} - -void sub_80CBA28(struct Sprite* sprite) -{ - s16 e = sub_8077ABC(gBattleAnimEnemyMonIndex, 1); - if(GetBankSide(gBattleAnimEnemyMonIndex) == 0) - { - sprite->data6 = 0; - sprite->data7 = e + 10; - sub_80CB7EC(sprite, 0x28); - sprite->data3 = 3; - sprite->data4 = 0x3C; - sprite->callback = sub_80CB8E8; - } - else - { - sprite->data6 = 255; - sprite->data7 = e + 10; - if(IsContest()) sprite->data6 = 0; - sub_80CB7EC(sprite, 0x28); - sprite->data3 = 3; - sprite->data4 = 0x3C; - sprite->callback = sub_80CB9C4; - } -} - -void sub_80CBAA4(struct Sprite* sprite) -{ - if(sprite->data0 == 0) - { - sub_8078764(sprite, 0); - sprite->data1 = gBattleAnimArgs[2]; - } - sprite->data0++; - sprite->pos2.y = sprite->data1 * sprite->data0; - if(sprite->animEnded) move_anim_8072740(sprite); -} - -void sub_80CBAE8(struct Sprite* sprite) -{ - s16 p1; - s16 p2; - sub_8078764(sprite, 0); - p1 = sub_8077ABC(gBattleAnimPlayerMonIndex, 0); - p2 = sub_8077ABC(gBattleAnimPlayerMonIndex, 1); - if((gBattleAnimEnemyMonIndex ^ 2) == gBattleAnimPlayerMonIndex) - { - sprite->data6 = p1; - sprite->data7 = p2 + 10; - sub_80CB7EC(sprite, 0x3c); - sprite->data3 = 1; - } - else - { - sprite->data6 = p1; - sprite->data7 = p2 + 10; - sub_80CB7EC(sprite, 0x3c); - sprite->data3 = 3; - } - sprite->data4 = 0x3C; - sprite->callback = sub_80CBB60; -} - -void sub_80CBB60(struct Sprite* sprite) -{ - int zero; - sprite->data0 += ((sprite->data3 * 128) / sprite->data4); - zero = 0; - if(sprite->data0 > 0x7F) - { - sprite->data1++; - sprite->data0 = zero; - } - sprite->pos2.y = Sin(sprite->data0 + 0x80, 30 - sprite->data1 * 8); - if(sprite->pos2.y == 0) - { - PlaySE12WithPanning(0x7D, sub_8076F98(0x3F)); - } - if(sub_80CB814(sprite)) - { - sprite->pos2.y = 0; - sprite->data0 = 0; - sprite->callback = sub_80CB8B8; - PlaySE12WithPanning(0x7D, sub_8076F98(-0x40)); - } -} - -#ifdef NONMATCHING -void sub_80CBBF0(struct Sprite* sprite) -{ - int a; - int b; - if(sprite->data0 == 0) - { - if(!IsContest()) - { - sprite->data1 = gBattleAnimArgs[1]; - sprite->pos1.x = 0x78; - } - else - { - a = gBattleAnimArgs[1] - 32; - b = a; - if(a < 0) - { - b += gBattleAnimArgs[1] + 0xDF; - } - sprite->data1 = b - a; - sprite->pos1.x = 0x46; - - } - sprite->pos1.y = gBattleAnimArgs[0]; - sprite->data2 = gBattleAnimArgs[0]; - sprite->data4 = 20; - sprite->pos2.x = Cos(sprite->data1, 0x3C); - sprite->pos2.y = Sin(sprite->data1, 20); - sprite->callback = sub_80CBC8C; - if((sprite->data1 - 1) <= 0xBE) - { - sprite->subpriority = 30; - } - else - { - sprite->subpriority = 28; - } - } -} -#else -__attribute__((naked)) -void sub_80CBBF0(struct Sprite* sprite) -{ - asm(".syntax unified\n\ - push {r4,r5,lr}\n\ - adds r4, r0, 0\n\ - movs r1, 0x2E\n\ - ldrsh r0, [r4, r1]\n\ - cmp r0, 0\n\ - bne _080CBC84\n\ - bl IsContest\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - bne _080CBC18\n\ - ldr r0, _080CBC14 @ =gBattleAnimArgs\n\ - ldrh r1, [r0, 0x2]\n\ - strh r1, [r4, 0x30]\n\ - movs r1, 0x78\n\ - strh r1, [r4, 0x20]\n\ - adds r5, r0, 0\n\ - b _080CBC3A\n\ - .align 2, 0\n\ -_080CBC14: .4byte gBattleAnimArgs\n\ -_080CBC18:\n\ - ldr r0, _080CBC74 @ =gBattleAnimArgs\n\ - movs r1, 0x2\n\ - ldrsh r3, [r0, r1]\n\ - adds r1, r3, 0\n\ - subs r1, 0x20\n\ - adds r2, r1, 0\n\ - adds r5, r0, 0\n\ - cmp r1, 0\n\ - bge _080CBC2E\n\ - adds r2, r3, 0\n\ - adds r2, 0xDF\n\ -_080CBC2E:\n\ - asrs r0, r2, 8\n\ - lsls r0, 8\n\ - subs r0, r1, r0\n\ - strh r0, [r4, 0x30]\n\ - movs r0, 0x46\n\ - strh r0, [r4, 0x20]\n\ -_080CBC3A:\n\ - ldrh r0, [r5]\n\ - strh r0, [r4, 0x22]\n\ - strh r0, [r4, 0x32]\n\ - movs r0, 0x14\n\ - strh r0, [r4, 0x36]\n\ - movs r1, 0x30\n\ - ldrsh r0, [r4, r1]\n\ - movs r1, 0x3C\n\ - bl Cos\n\ - strh r0, [r4, 0x24]\n\ - movs r1, 0x30\n\ - ldrsh r0, [r4, r1]\n\ - movs r1, 0x14\n\ - bl Sin\n\ - strh r0, [r4, 0x26]\n\ - ldr r0, _080CBC78 @ =sub_80CBC8C\n\ - str r0, [r4, 0x1C]\n\ - ldrh r0, [r4, 0x30]\n\ - subs r0, 0x1\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - cmp r0, 0xBE\n\ - bhi _080CBC7C\n\ - adds r1, r4, 0\n\ - adds r1, 0x43\n\ - movs r0, 0x1F\n\ - b _080CBC82\n\ - .align 2, 0\n\ -_080CBC74: .4byte gBattleAnimArgs\n\ -_080CBC78: .4byte sub_80CBC8C\n\ -_080CBC7C:\n\ - adds r1, r4, 0\n\ - adds r1, 0x43\n\ - movs r0, 0x1D\n\ -_080CBC82:\n\ - strb r0, [r1]\n\ -_080CBC84:\n\ - pop {r4,r5}\n\ - pop {r0}\n\ - bx r0\n\ - .syntax divided\n"); -} -#endif - -void sub_80CBC8C(struct Sprite* sprite) -{ - switch(sprite->data3) - { - case 0: - { - if(sprite->data2 > 0x4E) - { - sprite->data3 = 1; - StartSpriteAffineAnim(sprite, 1); - break; - } - else - { - sprite->data2 += sprite->data4 / 10; - sprite->data4 += 3; - sprite->pos1.y = sprite->data2; - break; - } - } - case 1: - { - if(sprite->data3 && sprite->affineAnimEnded) - { - sprite->data0 = 0; - sprite->data2 = 0; - sprite->callback = sub_80CBCF8; - } - break; - } - } -} - - - -void sub_80CBCF8(struct Sprite* sprite) -{ - if(sprite->data2 == gUnknown_083D680C[sprite->data0][1]) - { - if(gUnknown_083D680C[sprite->data0][2] == 0x7F) - { - sprite->data0 = 0; - sprite->callback = sub_80CBDB0; - } - sprite->data2 = 0; - sprite->data0++; - } - else - { - sprite->data2++; - sprite->data1 = (gUnknown_083D680C[sprite->data0][0] * gUnknown_083D680C[sprite->data0][2] + sprite->data1) & 0xFF; - if (!IsContest()) - { - if((u16)(sprite->data1 - 1) <= 0xBE) - { - sprite->subpriority = 31; - } - else - { - sprite->subpriority = 29; - } - } - sprite->pos2.x = Cos(sprite->data1, 0x3C); - sprite->pos2.y = Sin(sprite->data1, 20); - } -} - -void sub_80CBDB0(struct Sprite* sprite) -{ - if(sprite->data0 > 20) move_anim_8072740(sprite); - sprite->invisible = sprite->data0 % 2; - sprite->data0++; -} - -#ifdef NONMATCHING -void sub_80CBDF4(u8 taskId) -{ - struct Task* task = &gTasks[taskId]; - task->data[4] = sub_8079E90(gBattleAnimEnemyMonIndex) - 1; - task->data[6] = sub_8077ABC(gBattleAnimEnemyMonIndex, 2); - task->data[7] = sub_8077ABC(gBattleAnimEnemyMonIndex, 3); - task->data[10] = sub_807A100(gBattleAnimEnemyMonIndex, 1); - task->data[11] = sub_807A100(gBattleAnimEnemyMonIndex, 0); - if(GetBankSide(gBattleAnimEnemyMonIndex) == 1) - { - task->data[5] = 1; - } - else - { - task->data[5] = -1; - } - task->data[9] = 0x38 - (task->data[5] * 64); - task->data[8] = task->data[7] - task->data[9] + task->data[6]; - task->data[2] = CreateSprite(&gSpriteTemplate_83D6884, task->data[8], task->data[9], task->data[4]); - if(task->data[2] == 0x40) DestroyAnimVisualTask(taskId); - gSprites[task->data[2]].data0 = 10; - gSprites[task->data[2]].data1 = task->data[8]; - gSprites[task->data[2]].data2 = task->data[6] - (((task->data[10] / 2) + 10) * task->data[5]); - gSprites[task->data[2]].data3 = task->data[9]; - gSprites[task->data[2]].data4 = ((task->data[11] / 2) + 10) * task->data[5] + task->data[7]; - gSprites[task->data[2]].data5 = sub_80CC338(&gSprites[task->data[2]]); - sub_80786EC(&gSprites[task->data[2]]); - task->func = sub_80CBF5C; -} -#else -__attribute__((naked)) -void sub_80CBDF4(u8 taskId) -{ - asm(".syntax unified\n\ - push {r4-r6,lr}\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - adds r6, r0, 0\n\ - lsls r0, r6, 2\n\ - adds r0, r6\n\ - lsls r0, 3\n\ - ldr r1, _080CBF48 @ =gTasks\n\ - adds r5, r0, r1\n\ - ldr r4, _080CBF4C @ =gBattleAnimEnemyMonIndex\n\ - ldrb r0, [r4]\n\ - bl sub_8079E90\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - subs r0, 0x1\n\ - strh r0, [r5, 0x10]\n\ - ldrb r0, [r4]\n\ - movs r1, 0x2\n\ - bl sub_8077ABC\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - strh r0, [r5, 0x14]\n\ - ldrb r0, [r4]\n\ - movs r1, 0x3\n\ - bl sub_8077ABC\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - strh r0, [r5, 0x16]\n\ - ldrb r0, [r4]\n\ - movs r1, 0x1\n\ - bl sub_807A100\n\ - strh r0, [r5, 0x1C]\n\ - ldrb r0, [r4]\n\ - movs r1, 0\n\ - bl sub_807A100\n\ - strh r0, [r5, 0x1E]\n\ - ldrb r0, [r4]\n\ - bl GetBankSide\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - movs r2, 0x1\n\ - negs r2, r2\n\ - adds r1, r2, 0\n\ - cmp r0, 0x1\n\ - bne _080CBE5C\n\ - movs r1, 0x1\n\ -_080CBE5C:\n\ - strh r1, [r5, 0x12]\n\ - movs r3, 0x12\n\ - ldrsh r0, [r5, r3]\n\ - lsls r0, 6\n\ - movs r1, 0x38\n\ - subs r1, r0\n\ - strh r1, [r5, 0x1A]\n\ - ldrh r0, [r5, 0x16]\n\ - subs r0, r1\n\ - ldrh r1, [r5, 0x14]\n\ - adds r0, r1\n\ - strh r0, [r5, 0x18]\n\ - ldr r0, _080CBF50 @ =gSpriteTemplate_83D6884\n\ - movs r2, 0x18\n\ - ldrsh r1, [r5, r2]\n\ - movs r3, 0x1A\n\ - ldrsh r2, [r5, r3]\n\ - ldrb r3, [r5, 0x10]\n\ - bl CreateSprite\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - strh r0, [r5, 0xC]\n\ - cmp r0, 0x40\n\ - bne _080CBE94\n\ - adds r0, r6, 0\n\ - bl DestroyAnimVisualTask\n\ -_080CBE94:\n\ - ldr r4, _080CBF54 @ =gSprites\n\ - movs r0, 0xC\n\ - ldrsh r1, [r5, r0]\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r4\n\ - movs r1, 0xA\n\ - strh r1, [r0, 0x2E]\n\ - movs r2, 0xC\n\ - ldrsh r1, [r5, r2]\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r4\n\ - ldrh r1, [r5, 0x18]\n\ - strh r1, [r0, 0x30]\n\ - movs r3, 0xC\n\ - ldrsh r0, [r5, r3]\n\ - lsls r2, r0, 4\n\ - adds r2, r0\n\ - lsls r2, 2\n\ - adds r2, r4\n\ - movs r1, 0x1C\n\ - ldrsh r0, [r5, r1]\n\ - lsrs r1, r0, 31\n\ - adds r0, r1\n\ - asrs r0, 1\n\ - adds r0, 0xA\n\ - movs r3, 0x12\n\ - ldrsh r1, [r5, r3]\n\ - muls r1, r0\n\ - ldrh r0, [r5, 0x14]\n\ - subs r0, r1\n\ - strh r0, [r2, 0x32]\n\ - movs r0, 0xC\n\ - ldrsh r1, [r5, r0]\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r4\n\ - ldrh r1, [r5, 0x1A]\n\ - strh r1, [r0, 0x34]\n\ - movs r1, 0xC\n\ - ldrsh r0, [r5, r1]\n\ - lsls r1, r0, 4\n\ - adds r1, r0\n\ - lsls r1, 2\n\ - adds r1, r4\n\ - movs r2, 0x1E\n\ - ldrsh r0, [r5, r2]\n\ - lsrs r2, r0, 31\n\ - adds r0, r2\n\ - asrs r0, 1\n\ - adds r0, 0xA\n\ - movs r3, 0x12\n\ - ldrsh r2, [r5, r3]\n\ - muls r0, r2\n\ - ldrh r2, [r5, 0x16]\n\ - adds r0, r2\n\ - strh r0, [r1, 0x36]\n\ - movs r3, 0xC\n\ - ldrsh r1, [r5, r3]\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r4\n\ - bl sub_80CC338\n\ - movs r1, 0xC\n\ - ldrsh r2, [r5, r1]\n\ - lsls r1, r2, 4\n\ - adds r1, r2\n\ - lsls r1, 2\n\ - adds r1, r4\n\ - strh r0, [r1, 0x38]\n\ - movs r2, 0xC\n\ - ldrsh r1, [r5, r2]\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r4\n\ - bl sub_80786EC\n\ - ldr r0, _080CBF58 @ =sub_80CBF5C\n\ - str r0, [r5]\n\ - pop {r4-r6}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080CBF48: .4byte gTasks\n\ -_080CBF4C: .4byte gBattleAnimEnemyMonIndex\n\ -_080CBF50: .4byte gSpriteTemplate_83D6884\n\ -_080CBF54: .4byte gSprites\n\ -_080CBF58: .4byte sub_80CBF5C\n\ - .syntax divided\n"); -} -#endif - -void sub_80CBF5C(u8 taskId) -{ - struct Task* task = &gTasks[taskId]; - struct Sprite* sprite = &gSprites[task->data[2]]; - int a = task->data[0]; - switch(a) - { - case 4: - { - sub_80CC358(task, taskId); - if(sub_8078718(sprite) == 0) - { - break; - } - else - { - task->data[15] = 5; - task->data[0] = 0xFF; - break; - } - } - case 8: - { - sub_80CC358(task, taskId); - if(sub_8078718(sprite) == 0) - { - break; - } - else - { - task->data[15] = 9; - task->data[0] = 0xFF; - break; - } - } - case 0: - { - sub_80CC358(task, taskId); - if(sub_8078718(sprite) == 0) - { - break; - } - task->data[15] = 1; - task->data[0] = 0xFF; - break; - } - case 1: - { - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.x = 0; - sprite->pos2.y = 0; - sprite->data0 = 10; - sprite->data1 = sprite->pos1.x; - sprite->data2 = task->data[6]; - sprite->data3 = sprite->pos1.y; - sprite->data4 = task->data[7]; - sprite->data5 = sub_80CC338(sprite); - task->data[4] += 2; - task->data[3] = a; - sprite->subpriority = task->data[4]; - StartSpriteAnim(sprite, task->data[3]); - sub_80786EC(sprite); - task->data[0]++; - break; - } - case 2: - { - sub_80CC358(task, taskId); - if(sub_8078718(sprite) == 0) - { - break; - } - task->data[15] = 3; - task->data[0] = 0xFF; - break; - } - case 3: - { - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.x = 0; - sprite->pos2.y = 0; - sprite->data0 = 10; - sprite->data1 = sprite->pos1.x; - sprite->data2 = task->data[6] - ((task->data[10] / 2) + 10) * task->data[5]; - sprite->data3 = sprite->pos1.y; - sprite->data4 = task->data[7] - ((task->data[11] / 2) + 10) * task->data[5]; - sprite->data5 = sub_80CC338(sprite); - task->data[3] = 2; - sprite->subpriority = task->data[4]; - StartSpriteAnim(sprite, task->data[3]); - sub_80786EC(sprite); - task->data[0]++; - break; - } - case 5: - { - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.x = 0; - sprite->pos2.y = 0; - sprite->data0 = 10; - sprite->data1 = sprite->pos1.x; - sprite->data2 = task->data[6] + ((task->data[10] / 2) + 10) * task->data[5]; - sprite->data3 = sprite->pos1.y; - sprite->data4 = task->data[7] + ((task->data[11] / 2) + 10) * task->data[5]; - sprite->data5 = sub_80CC338(sprite); - task->data[4] -= 2; - task->data[3] = 3; - sprite->subpriority = task->data[4]; - StartSpriteAnim(sprite, task->data[3]); - sub_80786EC(sprite); - task->data[0]++; - break; - } - case 6: - { - sub_80CC358(task, taskId); - if(sub_8078718(sprite) == 0) - { - break; - } - task->data[15] = 7; - task->data[0] = 0xFF; - break; - } - case 7: - { - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.x = 0; - sprite->pos2.y = 0; - sprite->data0 = 10; - sprite->data1 = sprite->pos1.x; - sprite->data2 = task->data[6]; - sprite->data3 = sprite->pos1.y; - sprite->data4 = task->data[7]; - sprite->data5 = sub_80CC338(sprite); - task->data[4] += 2; - task->data[3] = 4; - sprite->subpriority = task->data[4]; - StartSpriteAnim(sprite, task->data[3]); - sub_80786EC(sprite); - task->data[0]++; - break; - } - case 9: - { - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.x = 0; - sprite->pos2.y = 0; - sprite->data0 = 10; - sprite->data1 = sprite->pos1.x; - sprite->data2 = task->data[6] - ((task->data[10] / 2) + 10) * task->data[5]; - sprite->data3 = sprite->pos1.y; - sprite->data4 = task->data[7] + ((task->data[11] / 2) + 10) * task->data[5]; - sprite->data5 = sub_80CC338(sprite); - task->data[3] = 5; - sprite->subpriority = task->data[4]; - StartSpriteAnim(sprite, task->data[3]); - sub_80786EC(sprite); - task->data[0]++; - break; - } - case 10: - { - sub_80CC358(task, taskId); - if(sub_8078718(sprite) == 0) - { - break; - } - else - { - task->data[15] = 11; - task->data[0] = 0xFF; - break; - } - } - case 11: - { - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.x = 0; - sprite->pos2.y = 0; - sprite->data0 = 10; - sprite->data1 = sprite->pos1.x; - sprite->data2 = task->data[8]; - sprite->data3 = sprite->pos1.y; - sprite->data4 = task->data[9]; - sprite->data5 = sub_80CC338(sprite); - task->data[4] -= 2; - task->data[3] = 6; - sprite->subpriority = task->data[4]; - StartSpriteAnim(sprite, task->data[3]); - sub_80786EC(sprite); - task->data[0]++; - break; - } - case 12: - { - sub_80CC358(task, taskId); - if(sub_8078718(sprite) != 0) - { - DestroySprite(sprite); - task->data[0]++; - } - break; - } - case 13: - { - if(task->data[12] == 0) - { - DestroyAnimVisualTask(taskId); - break; - } - break; - } - case 255: - { - task->data[1]++; - if(task->data[1] > 5) - { - task->data[1] = 0; - task->data[0] = task->data[15]; - } - } - } -} - -s16 sub_80CC338(struct Sprite* sprite) -{ - s16 var = 8; - if(sprite->data4 < sprite->pos1.y) var = -var; - return var; -} - -void sub_80CC358(struct Task* task, u8 taskId) -{ - task->data[14]++; - if(task->data[14] > 0) - { - u8 spriteId; - s16 spriteX; - s16 spriteY; - task->data[14] = 0; - spriteX = gSprites[task->data[2]].pos1.x + gSprites[task->data[2]].pos2.x; - spriteY = gSprites[task->data[2]].pos1.y + gSprites[task->data[2]].pos2.y; - spriteId = CreateSprite(&gSpriteTemplate_83D6884, spriteX, spriteY, task->data[4]); - if (spriteId != 0x40) - { - gSprites[spriteId].data6 = taskId; - gSprites[spriteId].data7 = 12; - gTasks[taskId].data[12]++; - gSprites[spriteId].data0 = task->data[13] & 1; - gTasks[taskId].data[13]++; - StartSpriteAnim(&gSprites[spriteId], task->data[3]); - gSprites[spriteId].subpriority = task->data[4]; - gSprites[spriteId].callback = sub_80CC408; - } - } -} - -void sub_80CC408(struct Sprite* sprite) -{ - sprite->data0++; - if (sprite->data0 > 1) - { - sprite->data0 = 0; - sprite->invisible ^= 1; - sprite->data1++; - if(sprite->data1 > 8) - { - gTasks[sprite->data6].data[sprite->data7]--; - DestroySprite(sprite); - } - } -} - -void sub_80CC474(struct Sprite* sprite) -{ - u8 bank; - if (!gBattleAnimArgs[6]) - bank = gBattleAnimPlayerMonIndex; - else - bank = gBattleAnimEnemyMonIndex; - if (GetBankSide(bank) != 0) - { - sprite->data4 = 0; - sprite->data2 = gBattleAnimArgs[3]; - sprite->pos1.x = 0xFFF0; - } - else - { - sprite->data4 = 1; - sprite->data2 = -gBattleAnimArgs[3]; - sprite->pos1.x = 0x100; - } - sprite->data1 = gBattleAnimArgs[1]; - sprite->data0 = gBattleAnimArgs[2]; - sprite->data3 = gBattleAnimArgs[4]; - switch(gBattleAnimArgs[5]) - { - case 0: - { - sprite->pos1.y = gBattleAnimArgs[0]; - sprite->oam.priority = sub_8079ED4(bank); - break; - } - case 1: - { - sprite->pos1.y = gBattleAnimArgs[0]; - sprite->oam.priority = sub_8079ED4(bank) + 1; - break; - } - case 2: - { - sprite->pos1.y = sub_8077ABC(bank, 3) + gBattleAnimArgs[0]; - sprite->oam.priority = sub_8079ED4(bank); - break; - } - case 3: - { - sprite->pos1.y = sub_8077ABC(gBattleAnimEnemyMonIndex, 3) + gBattleAnimArgs[0]; - obj_id_for_side_relative_to_move(1); - sprite->oam.priority = sub_8079ED4(bank) + 1; - break; - } - } - sprite->callback = sub_80CC580; -} - -// why did you make me use gotos WHY -void sub_80CC580(struct Sprite* sprite) -{ - int a = sprite->data7; - sprite->data7++; - sprite->pos2.y = (sprite->data1 * gSineTable[sprite->data0]) >> 8; - sprite->pos2.x = sprite->data2 * a; - sprite->data0 = (sprite->data3 * a) & 0xFF; - if (sprite->data4 == 0) - { - if (sprite->pos2.x + sprite->pos1.x <= 0xF7) return; - else goto END; - } - else if (sprite->data4 != 0 && sprite->pos2.x + sprite->pos1.x <= -16) - { - goto END; - } - else - return; - - END: - move_anim_8074EE0(sprite); -} - -void sub_80CC5F8(u8 taskId) -{ - struct Task* task = &gTasks[taskId]; - switch(task->data[0]) - { - case 0: - { - task->data[8] = IndexOfSpritePaletteTag(0x274f) * 16 + 256; - task->data[12] = IndexOfSpritePaletteTag(0x27b0) * 16 + 256; - task->data[0]++; - break; - } - case 1: - { - task->data[9]++; - if(task->data[9] >= 0) - { - task->data[9] = 0; - BlendPalette(task->data[8], 0x10, task->data[10], gUnknown_083D6984[task->data[11]]); - BlendPalette(task->data[12], 0x10, task->data[10], gUnknown_083D6984[task->data[11]]); - task->data[10]++; - if(task->data[10] == 17) - { - task->data[10] = 0; - task->data[11]++; - if(task->data[11] == 7) task->data[11] = 0; - } - } - break; - } - } - if(gBattleAnimArgs[7] == -1) DestroyAnimVisualTask(taskId); -} - -#ifdef NONMATCHING -void sub_80CC6CC(struct Sprite* sprite) -{ - u8 a; - u8 b; - u8 bank; - int c; - u16 x; - u16 y; - if (gBattleAnimArgs[4] == 0) - { - move_anim_8072740(sprite); - } - else - { - - if (gBattleAnimArgs[0] == 0) bank = gBattleAnimPlayerMonIndex; - else - bank = gBattleAnimEnemyMonIndex; - a = sub_8077ABC(bank, 2); - b = sub_8077ABC(bank, 3); - sprite->data0 = gBattleAnimArgs[4]; - if (gBattleAnimArgs[1] == 0) - { - sprite->pos1.x = gBattleAnimArgs[2] + a; - sprite->pos1.y = gBattleAnimArgs[3] + b; - sprite->data5 = a; - sprite->data6 = b; - } - else - { - sprite->pos1.x = a; - sprite->pos1.y = b; - sprite->data5 = gBattleAnimArgs[2] + a; - sprite->data6 = gBattleAnimArgs[3] + b; - } - x = sprite->pos1.x; - sprite->data1 = x * 16; - y = sprite->pos1.y; - sprite->data2 = y * 16; - sprite->data3 = ((sprite->data5 - sprite->pos1.x) * 16) / gBattleAnimArgs[4]; - sprite->data4 = ((sprite->data6 - sprite->pos1.y) * 16) / gBattleAnimArgs[4]; - c = sub_80790F0(sprite->data5 - x, sprite->data6 - y); - if(IsContest() != 0) c = c + -0x8000; - sub_8078FDC(sprite, 0, 0x100, 0x100, c); - sprite->callback = sub_80CC7D4; - } -} -#else -__attribute__((naked)) -void sub_80CC6CC(struct Sprite* sprite) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - sub sp, 0x4\n\ - adds r6, r0, 0\n\ - ldr r1, _080CC6E4 @ =gBattleAnimArgs\n\ - movs r2, 0x8\n\ - ldrsh r0, [r1, r2]\n\ - cmp r0, 0\n\ - bne _080CC6E8\n\ - adds r0, r6, 0\n\ - bl move_anim_8072740\n\ - b _080CC7C2\n\ - .align 2, 0\n\ -_080CC6E4: .4byte gBattleAnimArgs\n\ -_080CC6E8:\n\ - movs r3, 0\n\ - ldrsh r0, [r1, r3]\n\ - cmp r0, 0\n\ - bne _080CC6F8\n\ - ldr r4, _080CC6F4 @ =gBattleAnimPlayerMonIndex\n\ - b _080CC6FA\n\ - .align 2, 0\n\ -_080CC6F4: .4byte gBattleAnimPlayerMonIndex\n\ -_080CC6F8:\n\ - ldr r4, _080CC734 @ =gBattleAnimEnemyMonIndex\n\ -_080CC6FA:\n\ - ldrb r0, [r4]\n\ - movs r1, 0x2\n\ - bl sub_8077ABC\n\ - lsls r0, 24\n\ - lsrs r5, r0, 24\n\ - ldrb r0, [r4]\n\ - movs r1, 0x3\n\ - bl sub_8077ABC\n\ - lsls r0, 24\n\ - lsrs r2, r0, 24\n\ - ldr r0, _080CC738 @ =gBattleAnimArgs\n\ - ldrh r1, [r0, 0x8]\n\ - strh r1, [r6, 0x2E]\n\ - movs r3, 0x2\n\ - ldrsh r1, [r0, r3]\n\ - adds r7, r0, 0\n\ - cmp r1, 0\n\ - bne _080CC73C\n\ - ldrh r0, [r7, 0x4]\n\ - adds r0, r5\n\ - strh r0, [r6, 0x20]\n\ - ldrh r0, [r7, 0x6]\n\ - adds r0, r2\n\ - strh r0, [r6, 0x22]\n\ - strh r5, [r6, 0x38]\n\ - strh r2, [r6, 0x3A]\n\ - b _080CC74C\n\ - .align 2, 0\n\ -_080CC734: .4byte gBattleAnimEnemyMonIndex\n\ -_080CC738: .4byte gBattleAnimArgs\n\ -_080CC73C:\n\ - strh r5, [r6, 0x20]\n\ - strh r2, [r6, 0x22]\n\ - ldrh r0, [r7, 0x4]\n\ - adds r0, r5\n\ - strh r0, [r6, 0x38]\n\ - ldrh r0, [r7, 0x6]\n\ - adds r0, r2\n\ - strh r0, [r6, 0x3A]\n\ -_080CC74C:\n\ - ldrh r4, [r6, 0x20]\n\ - lsls r0, r4, 4\n\ - strh r0, [r6, 0x30]\n\ - ldrh r5, [r6, 0x22]\n\ - lsls r0, r5, 4\n\ - strh r0, [r6, 0x32]\n\ - movs r1, 0x38\n\ - ldrsh r0, [r6, r1]\n\ - movs r2, 0x20\n\ - ldrsh r1, [r6, r2]\n\ - subs r0, r1\n\ - lsls r0, 4\n\ - movs r3, 0x8\n\ - ldrsh r1, [r7, r3]\n\ - bl __divsi3\n\ - strh r0, [r6, 0x34]\n\ - movs r1, 0x3A\n\ - ldrsh r0, [r6, r1]\n\ - movs r2, 0x22\n\ - ldrsh r1, [r6, r2]\n\ - subs r0, r1\n\ - lsls r0, 4\n\ - movs r3, 0x8\n\ - ldrsh r1, [r7, r3]\n\ - bl __divsi3\n\ - strh r0, [r6, 0x36]\n\ - ldrh r0, [r6, 0x38]\n\ - subs r0, r4\n\ - lsls r0, 16\n\ - asrs r0, 16\n\ - ldrh r1, [r6, 0x3A]\n\ - subs r1, r5\n\ - lsls r1, 16\n\ - asrs r1, 16\n\ - bl sub_80790F0\n\ - lsls r0, 16\n\ - lsrs r4, r0, 16\n\ - bl IsContest\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _080CC7AE\n\ - ldr r1, _080CC7CC @ =0xffff8000\n\ - adds r0, r4, r1\n\ - lsls r0, 16\n\ - lsrs r4, r0, 16\n\ -_080CC7AE:\n\ - movs r3, 0x80\n\ - lsls r3, 1\n\ - str r4, [sp]\n\ - adds r0, r6, 0\n\ - movs r1, 0\n\ - adds r2, r3, 0\n\ - bl sub_8078FDC\n\ - ldr r0, _080CC7D0 @ =sub_80CC7D4\n\ - str r0, [r6, 0x1C]\n\ -_080CC7C2:\n\ - add sp, 0x4\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080CC7CC: .4byte 0xffff8000\n\ -_080CC7D0: .4byte sub_80CC7D4\n\ - .syntax divided\n"); -} -#endif - -void sub_80CC7D4(struct Sprite* sprite) -{ - if(sprite->data0) - { - sprite->data1 += sprite->data3; - sprite->data2 += sprite->data4; - sprite->pos1.x = sprite->data1 >> 4 ; - sprite->pos1.y = sprite->data2 >> 4 ; - sprite->data0--; - } - else - move_anim_8074EE0(sprite); -} - -void sub_80CC810(struct Sprite* sprite) -{ - if(sprite->animEnded) - move_anim_8072740(sprite); -} - -void sub_80CC82C(struct Sprite* sprite) -{ - if(GetBankSide(gBattleAnimPlayerMonIndex) != 0) - { - sprite->pos1.x -= gBattleAnimArgs[0]; - sprite->pos1.y += gBattleAnimArgs[1]; - } - else - { - sprite->pos1.x += gBattleAnimArgs[0]; - sprite->pos1.y += gBattleAnimArgs[1]; - } - sprite->callback = sub_8078600; - oamt_set_x3A_32(sprite, move_anim_8072740); -} - -void sub_80CC884(struct Sprite* sprite) -{ - if(GetBankSide(gBattleAnimPlayerMonIndex) == 0) - StartSpriteAnim(sprite, 1); - sprite->callback = sub_80CC810; - sub_807867C(sprite, gBattleAnimArgs[0]); - sprite->pos1.y += gBattleAnimArgs[1]; -} - -void sub_80CC8C8(struct Sprite* sprite) -{ - sprite->pos1.x += gBattleAnimArgs[0]; - sprite->pos1.y += gBattleAnimArgs[1]; - sprite->data0 = gBattleAnimArgs[2]; - sprite->data1 = gBattleAnimArgs[3]; - sprite->data3 = gBattleAnimArgs[4]; - sprite->data5 = gBattleAnimArgs[5]; - StartSpriteAffineAnim(sprite, gBattleAnimArgs[6]); - oamt_set_x3A_32(sprite, move_anim_8074EE0); - sprite->callback = sub_8078504; -} - -void sub_80CC914(struct Sprite* sprite) -{ - sprite->pos1.x = sub_8077ABC(gBattleAnimEnemyMonIndex, 0); - sprite->pos1.y = sub_8077ABC(gBattleAnimEnemyMonIndex, 1); - if(GetBankSide(gBattleAnimEnemyMonIndex) == 0) - sprite->pos1.y += 8; - sprite->callback = sub_80CCB00; - if(gBattleAnimArgs[2] == 0) - sprite->pos1.x += gBattleAnimArgs[0]; - else - { - sprite->pos1.x -= gBattleAnimArgs[0]; - sprite->hFlip = 1; - } - sprite->pos1.y += gBattleAnimArgs[1]; - sprite->data1 -= 0x400; - sprite->data2 += 0x400; - sprite->data5 = gBattleAnimArgs[2]; - if(sprite->data5 == 1) - sprite->data1 = -sprite->data1; -} - -void sub_80CC9BC(struct Sprite* sprite) -{ - u8 a; - u8 b; - switch(gBattleAnimArgs[3]) - { - case 1: - { - a = sub_8077ABC(gBattleAnimEnemyMonIndex ^ 2, 0); - b = sub_8077ABC(gBattleAnimEnemyMonIndex ^ 2, 1); - break; - } - case 2: - { - a = sub_8077ABC(gBattleAnimEnemyMonIndex, 0); - b = sub_8077ABC(gBattleAnimEnemyMonIndex, 1); - if(b_side_obj__get_some_boolean(gBattleAnimEnemyMonIndex ^ 2)) - { - a = (sub_8077ABC(gBattleAnimEnemyMonIndex ^ 2, 0) + a) / 2; - b = (sub_8077ABC(gBattleAnimEnemyMonIndex ^ 2, 1) + b) / 2; - } - break; - } - case 0: - default: - { - a = sub_8077ABC(gBattleAnimEnemyMonIndex, 0); - b = sub_8077ABC(gBattleAnimEnemyMonIndex, 1); - break; - } - } - sprite->pos1.x = a; - sprite->pos1.y = b; - if(GetBankSide(gBattleAnimEnemyMonIndex) == 0) - sprite->pos1.y += 8; - sprite->callback = sub_80CCB00; - if(gBattleAnimArgs[2] == 0) - sprite->pos1.x += gBattleAnimArgs[0]; - else - { - sprite->pos1.x -= gBattleAnimArgs[0]; - sprite->hFlip = 1; - } - sprite->pos1.y += gBattleAnimArgs[1]; - sprite->data1 -= 0x400; - sprite->data2 += 0x400; - sprite->data5 = gBattleAnimArgs[2]; - if(sprite->data5 == 1) - sprite->data1 = -sprite->data1; -} - -void sub_80CCB00(struct Sprite* sprite) -{ - sprite->data3 += sprite->data1; - sprite->data4 += sprite->data2; - if(sprite->data5 == 0) - sprite->data1 += 0x18; - else - sprite->data1 -= 0x18; - sprite->data2 -= 0x18; - sprite->pos2.x = sprite->data3 >> 8; - sprite->pos2.y = sprite->data4 >> 8; - sprite->data0++; - if(sprite->data0 == 20) - { - oamt_set_x3A_32(sprite, move_anim_8072740); - sprite->data0 = 3; - sprite->callback = sub_80782D8; - } -} - -void unref_sub_80CCB6C(struct Sprite* sprite) -{ - if(sprite->data2 > 1) - { - if(sprite->data3 & 1) - { - sprite->invisible = 0; - gSprites[sprite->data0].invisible = 0; - gSprites[sprite->data1].invisible = 0; - } - else - { - sprite->invisible = 1; - gSprites[sprite->data0].invisible = 1; - gSprites[sprite->data1].invisible = 1; - } - sprite->data2 = 0; - sprite->data3++; - } - else - { - sprite->data2++; - } - if(sprite->data3 == 10) - { - DestroySprite(&gSprites[sprite->data0]); - DestroySprite(&gSprites[sprite->data1]); - move_anim_8072740(sprite); - } -} - -void sub_80CCC50(struct Sprite* sprite) -{ - sprite->data0 = gBattleAnimArgs[2]; - if(GetBankSide(gBattleAnimPlayerMonIndex) != 0) - sprite->pos1.x -= gBattleAnimArgs[0]; - else - sprite->pos1.x += gBattleAnimArgs[0]; - StartSpriteAnim(sprite, gBattleAnimArgs[5]); - sprite->data1 = -gBattleAnimArgs[3]; - sprite->pos1.y += gBattleAnimArgs[1]; - sprite->data3 = gBattleAnimArgs[4]; - sprite->callback = sub_80CCCB4; - sub_80CCCB4(sprite); -} - -void sub_80CCCB4(struct Sprite* sprite) -{ - sprite->pos2.x = Cos(sprite->data0, 100); - sprite->pos2.y = Sin(sprite->data0, 20); - if(sprite->data0 <= 0x7F) - sprite->subpriority = 0; - else - sprite->subpriority = 14; - sprite->data0 = (sprite->data0 + sprite->data1) & 0xFF; - sprite->data5 += 0x82; - sprite->pos2.y += sprite->data5 >> 8; - sprite->data2++; - if(sprite->data2 == sprite->data3) - move_anim_8072740(sprite); -} - -void sub_80CCD24(struct Sprite* sprite) -{ - if(IsContest() != 0) - { - gBattleAnimArgs[1] += 8; - } - sprite->pos1.x = sub_8077EE4(gBattleAnimPlayerMonIndex, 0) + gBattleAnimArgs[0]; - sprite->pos1.y = sub_8077EE4(gBattleAnimPlayerMonIndex, 1) + gBattleAnimArgs[1]; - if (GetBankSide(gBattleAnimPlayerMonIndex) == 0 || IsContest()) - sprite->oam.priority = sub_8079ED4(gBattleAnimPlayerMonIndex) + 1; - else - sprite->oam.priority = sub_8079ED4(gBattleAnimPlayerMonIndex); - sprite->data0 = gBattleAnimArgs[2]; - sprite->data2 = (IndexOfSpritePaletteTag(0x2828) << 4) + 0x100; - sprite->data7 = 16; - REG_BLDCNT = 0x3F40; - REG_BLDALPHA = (sprite->data7 << 8) | (16 - sprite->data7); - sprite->callback = sub_80CCE0C; -} - -- cgit v1.2.3 From 8db934fcdcbb0dced900996e860c06b956bec2dc Mon Sep 17 00:00:00 2001 From: golemgalvanize Date: Sun, 13 Aug 2017 19:32:13 -0400 Subject: Update battle_anim_80CA710.s reverted --- asm/battle_anim_80CA710.s | 5068 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 5068 insertions(+) diff --git a/asm/battle_anim_80CA710.s b/asm/battle_anim_80CA710.s index bc41f1d34..fd5b9fb88 100644 --- a/asm/battle_anim_80CA710.s +++ b/asm/battle_anim_80CA710.s @@ -6,6 +6,5074 @@ .text + thumb_func_start sub_80CA710 +sub_80CA710: @ 80CA710 + push {r4,r5,lr} + adds r4, r0, 0 + ldr r5, _080CA744 @ =gBattleAnimArgs + ldrh r0, [r5] + ldrh r1, [r4, 0x20] + adds r0, r1 + strh r0, [r4, 0x20] + ldrh r0, [r5, 0x2] + ldrh r1, [r4, 0x22] + adds r0, r1 + strh r0, [r4, 0x22] + ldrh r0, [r5, 0x4] + strh r0, [r4, 0x2E] + ldrh r0, [r5, 0x6] + strh r0, [r4, 0x30] + ldr r0, _080CA748 @ =gBattleAnimPlayerMonIndex + ldrb r0, [r0] + bl GetBankSide + lsls r0, 24 + cmp r0, 0 + beq _080CA74C + ldrh r0, [r5, 0x8] + negs r0, r0 + b _080CA74E + .align 2, 0 +_080CA744: .4byte gBattleAnimArgs +_080CA748: .4byte gBattleAnimPlayerMonIndex +_080CA74C: + ldrh r0, [r5, 0x8] +_080CA74E: + strh r0, [r4, 0x34] + ldr r0, _080CA760 @ =gBattleAnimArgs + ldrh r0, [r0, 0xA] + strh r0, [r4, 0x36] + ldr r0, _080CA764 @ =sub_80CA768 + str r0, [r4, 0x1C] + pop {r4,r5} + pop {r0} + bx r0 + .align 2, 0 +_080CA760: .4byte gBattleAnimArgs +_080CA764: .4byte sub_80CA768 + thumb_func_end sub_80CA710 + + thumb_func_start sub_80CA768 +sub_80CA768: @ 80CA768 + push {r4,lr} + adds r4, r0, 0 + ldrh r1, [r4, 0x2E] + movs r2, 0x2E + ldrsh r0, [r4, r2] + cmp r0, 0 + ble _080CA7A4 + subs r0, r1, 0x1 + strh r0, [r4, 0x2E] + ldrh r1, [r4, 0x32] + lsls r0, r1, 16 + asrs r0, 24 + strh r0, [r4, 0x26] + ldrh r0, [r4, 0x30] + adds r1, r0 + strh r1, [r4, 0x32] + movs r1, 0x38 + ldrsh r0, [r4, r1] + movs r2, 0x34 + ldrsh r1, [r4, r2] + bl Sin + strh r0, [r4, 0x24] + ldrh r0, [r4, 0x36] + ldrh r1, [r4, 0x38] + adds r0, r1 + movs r1, 0xFF + ands r0, r1 + strh r0, [r4, 0x38] + b _080CA7AA +_080CA7A4: + adds r0, r4, 0 + bl move_anim_8072740 +_080CA7AA: + pop {r4} + pop {r0} + bx r0 + thumb_func_end sub_80CA768 + + thumb_func_start sub_80CA7B0 +sub_80CA7B0: @ 80CA7B0 + push {r4,r5,lr} + adds r4, r0, 0 + movs r1, 0x1 + bl sub_80787B0 + ldr r0, _080CA7F0 @ =gBattleAnimArgs + ldrh r0, [r0, 0x4] + strh r0, [r4, 0x2E] + ldr r5, _080CA7F4 @ =gBattleAnimPlayerMonIndex + ldrb r0, [r5] + movs r1, 0x2 + bl sub_8077ABC + lsls r0, 24 + lsrs r0, 24 + strh r0, [r4, 0x32] + ldrb r0, [r5] + movs r1, 0x3 + bl sub_8077ABC + lsls r0, 24 + lsrs r0, 24 + strh r0, [r4, 0x36] + ldr r0, _080CA7F8 @ =sub_8078B34 + str r0, [r4, 0x1C] + ldr r1, _080CA7FC @ =move_anim_8074EE0 + adds r0, r4, 0 + bl oamt_set_x3A_32 + pop {r4,r5} + pop {r0} + bx r0 + .align 2, 0 +_080CA7F0: .4byte gBattleAnimArgs +_080CA7F4: .4byte gBattleAnimPlayerMonIndex +_080CA7F8: .4byte sub_8078B34 +_080CA7FC: .4byte move_anim_8074EE0 + thumb_func_end sub_80CA7B0 + + thumb_func_start sub_80CA800 +sub_80CA800: @ 80CA800 + push {r4,r5,lr} + adds r4, r0, 0 + movs r1, 0x1 + bl sub_80787B0 + ldr r5, _080CA848 @ =gBattleAnimArgs + ldrb r1, [r5, 0x6] + adds r0, r4, 0 + bl StartSpriteAnim + ldrh r0, [r5, 0x4] + strh r0, [r4, 0x2E] + ldr r5, _080CA84C @ =gBattleAnimEnemyMonIndex + ldrb r0, [r5] + movs r1, 0x2 + bl sub_8077ABC + lsls r0, 24 + lsrs r0, 24 + strh r0, [r4, 0x32] + ldrb r0, [r5] + movs r1, 0x3 + bl sub_8077ABC + lsls r0, 24 + lsrs r0, 24 + strh r0, [r4, 0x36] + ldr r0, _080CA850 @ =sub_8078B34 + str r0, [r4, 0x1C] + ldr r1, _080CA854 @ =move_anim_8072740 + adds r0, r4, 0 + bl oamt_set_x3A_32 + pop {r4,r5} + pop {r0} + bx r0 + .align 2, 0 +_080CA848: .4byte gBattleAnimArgs +_080CA84C: .4byte gBattleAnimEnemyMonIndex +_080CA850: .4byte sub_8078B34 +_080CA854: .4byte move_anim_8072740 + thumb_func_end sub_80CA800 + + thumb_func_start sub_80CA858 +sub_80CA858: @ 80CA858 + push {r4-r6,lr} + adds r4, r0, 0 + movs r1, 0x1 + bl sub_80787B0 + ldr r6, _080CA8A8 @ =gBattleAnimArgs + ldrh r0, [r6, 0x4] + strh r0, [r4, 0x2E] + ldrh r0, [r4, 0x20] + strh r0, [r4, 0x30] + ldr r5, _080CA8AC @ =gBattleAnimEnemyMonIndex + ldrb r0, [r5] + movs r1, 0x2 + bl sub_8077ABC + lsls r0, 24 + lsrs r0, 24 + strh r0, [r4, 0x32] + ldrh r0, [r4, 0x22] + strh r0, [r4, 0x34] + ldrb r0, [r5] + movs r1, 0x3 + bl sub_8077ABC + lsls r0, 24 + lsrs r0, 24 + strh r0, [r4, 0x36] + adds r0, r4, 0 + bl obj_translate_based_on_private_1_2_3_4 + ldrh r0, [r6, 0x6] + strh r0, [r4, 0x38] + ldr r1, _080CA8B0 @ =sub_80CA8B4 + str r1, [r4, 0x1C] + adds r0, r4, 0 + bl _call_via_r1 + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 +_080CA8A8: .4byte gBattleAnimArgs +_080CA8AC: .4byte gBattleAnimEnemyMonIndex +_080CA8B0: .4byte sub_80CA8B4 + thumb_func_end sub_80CA858 + + thumb_func_start sub_80CA8B4 +sub_80CA8B4: @ 80CA8B4 + push {r4,lr} + adds r4, r0, 0 + bl sub_8078B5C + lsls r0, 24 + cmp r0, 0 + beq _080CA8CA + adds r0, r4, 0 + bl DestroySprite + b _080CA91E +_080CA8CA: + movs r1, 0x38 + ldrsh r0, [r4, r1] + cmp r0, 0x7F + ble _080CA8E4 + ldr r0, _080CA8E0 @ =gBattleAnimEnemyMonIndex + ldrb r0, [r0] + bl sub_8079E90 + adds r0, 0x1 + b _080CA8EE + .align 2, 0 +_080CA8E0: .4byte gBattleAnimEnemyMonIndex +_080CA8E4: + ldr r0, _080CA924 @ =gBattleAnimEnemyMonIndex + ldrb r0, [r0] + bl sub_8079E90 + adds r0, 0x6 +_080CA8EE: + adds r1, r4, 0 + adds r1, 0x43 + strb r0, [r1] + movs r1, 0x38 + ldrsh r0, [r4, r1] + movs r1, 0x5 + bl Sin + ldrh r1, [r4, 0x24] + adds r0, r1 + strh r0, [r4, 0x24] + movs r1, 0x38 + ldrsh r0, [r4, r1] + movs r1, 0xE + bl Cos + ldrh r1, [r4, 0x26] + adds r0, r1 + strh r0, [r4, 0x26] + ldrh r0, [r4, 0x38] + adds r0, 0xF + movs r1, 0xFF + ands r0, r1 + strh r0, [r4, 0x38] +_080CA91E: + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_080CA924: .4byte gBattleAnimEnemyMonIndex + thumb_func_end sub_80CA8B4 + + thumb_func_start sub_80CA928 +sub_80CA928: @ 80CA928 + push {r4-r6,lr} + lsls r0, 24 + lsrs r0, 24 + adds r6, r0, 0 + ldr r1, _080CA998 @ =gTasks + lsls r0, r6, 2 + adds r0, r6 + lsls r0, 3 + adds r5, r0, r1 + ldrh r0, [r5, 0x8] + subs r0, 0x1 + movs r2, 0 + strh r0, [r5, 0x8] + lsls r0, 16 + asrs r0, 16 + movs r1, 0x1 + negs r1, r1 + cmp r0, r1 + bne _080CA982 + ldrh r0, [r5, 0xA] + adds r0, 0x1 + strh r0, [r5, 0xA] + movs r0, 0x6 + strh r0, [r5, 0x8] + ldr r1, _080CA99C @ =gBattleAnimArgs + movs r0, 0xF + strh r0, [r1] + strh r2, [r1, 0x2] + movs r0, 0x50 + strh r0, [r1, 0x4] + strh r2, [r1, 0x6] + ldr r4, _080CA9A0 @ =gSpriteTemplate_83D631C + ldr r0, _080CA9A4 @ =gBattleAnimEnemyMonIndex + ldrb r0, [r0] + bl sub_8079E90 + adds r3, r0, 0 + adds r3, 0x1 + lsls r3, 24 + lsrs r3, 24 + adds r0, r4, 0 + movs r1, 0 + movs r2, 0 + bl CreateSpriteAndAnimate +_080CA982: + movs r1, 0xA + ldrsh r0, [r5, r1] + cmp r0, 0xF + bne _080CA990 + adds r0, r6, 0 + bl DestroyAnimVisualTask +_080CA990: + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 +_080CA998: .4byte gTasks +_080CA99C: .4byte gBattleAnimArgs +_080CA9A0: .4byte gSpriteTemplate_83D631C +_080CA9A4: .4byte gBattleAnimEnemyMonIndex + thumb_func_end sub_80CA928 + + thumb_func_start sub_80CA9A8 +sub_80CA9A8: @ 80CA9A8 + push {r4-r6,lr} + adds r4, r0, 0 + movs r1, 0x1 + bl sub_8078764 + ldr r6, _080CA9EC @ =gBattleAnimArgs + ldrh r0, [r6, 0x6] + strh r0, [r4, 0x2E] + ldr r5, _080CA9F0 @ =gBattleAnimPlayerMonIndex + ldrb r0, [r5] + movs r1, 0x2 + bl sub_8077ABC + lsls r0, 24 + lsrs r0, 24 + strh r0, [r4, 0x32] + ldrb r0, [r5] + movs r1, 0x3 + bl sub_8077ABC + lsls r0, 24 + lsrs r0, 24 + strh r0, [r4, 0x36] + ldrh r0, [r6, 0x4] + strh r0, [r4, 0x38] + adds r0, r4, 0 + bl sub_80786EC + ldr r0, _080CA9F4 @ =sub_80CA9F8 + str r0, [r4, 0x1C] + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 +_080CA9EC: .4byte gBattleAnimArgs +_080CA9F0: .4byte gBattleAnimPlayerMonIndex +_080CA9F4: .4byte sub_80CA9F8 + thumb_func_end sub_80CA9A8 + + thumb_func_start sub_80CA9F8 +sub_80CA9F8: @ 80CA9F8 + push {r4,lr} + adds r4, r0, 0 + bl sub_8078718 + lsls r0, 24 + cmp r0, 0 + beq _080CAA0C + adds r0, r4, 0 + bl move_anim_8072740 +_080CAA0C: + pop {r4} + pop {r0} + bx r0 + thumb_func_end sub_80CA9F8 + + thumb_func_start sub_80CAA14 +sub_80CAA14: @ 80CAA14 + push {r4,r5,lr} + adds r5, r0, 0 + bl Random + adds r1, r0, 0 + lsls r1, 16 + lsrs r1, 16 + movs r0, 0x7 + ands r1, r0 + adds r0, r5, 0 + bl StartSpriteAnim + ldr r4, _080CAA5C @ =gBattleAnimPlayerMonIndex + ldrb r0, [r4] + movs r1, 0x2 + bl sub_8077ABC + lsls r0, 24 + lsrs r0, 24 + strh r0, [r5, 0x20] + ldrb r0, [r4] + movs r1, 0x3 + bl sub_8077ABC + lsls r0, 24 + lsrs r0, 24 + strh r0, [r5, 0x22] + ldrb r0, [r4] + bl GetBankSide + lsls r0, 24 + cmp r0, 0 + beq _080CAA60 + ldrh r0, [r5, 0x20] + subs r0, 0x14 + b _080CAA64 + .align 2, 0 +_080CAA5C: .4byte gBattleAnimPlayerMonIndex +_080CAA60: + ldrh r0, [r5, 0x20] + adds r0, 0x14 +_080CAA64: + strh r0, [r5, 0x20] + bl Random + lsls r0, 16 + lsrs r0, 16 + movs r1, 0x1F + ands r0, r1 + adds r0, 0x40 + strh r0, [r5, 0x2E] + ldrh r0, [r5, 0x20] + strh r0, [r5, 0x30] + ldr r4, _080CAAC4 @ =gBattleAnimEnemyMonIndex + ldrb r0, [r4] + movs r1, 0x2 + bl sub_8077ABC + lsls r0, 24 + lsrs r0, 24 + strh r0, [r5, 0x32] + ldrh r0, [r5, 0x22] + strh r0, [r5, 0x34] + ldrb r0, [r4] + movs r1, 0x3 + bl sub_8077ABC + lsls r0, 24 + lsrs r0, 24 + strh r0, [r5, 0x36] + adds r0, r5, 0 + bl sub_8078D60 + bl Random + movs r1, 0xFF + ands r1, r0 + strh r1, [r5, 0x38] + adds r0, r5, 0 + adds r0, 0x43 + ldrb r0, [r0] + strh r0, [r5, 0x3A] + ldr r1, _080CAAC8 @ =sub_80CAACC + str r1, [r5, 0x1C] + adds r0, r5, 0 + bl _call_via_r1 + pop {r4,r5} + pop {r0} + bx r0 + .align 2, 0 +_080CAAC4: .4byte gBattleAnimEnemyMonIndex +_080CAAC8: .4byte sub_80CAACC + thumb_func_end sub_80CAA14 + + thumb_func_start sub_80CAACC +sub_80CAACC: @ 80CAACC + push {r4,lr} + adds r4, r0, 0 + bl sub_8078CE8 + lsls r0, 24 + cmp r0, 0 + beq _080CAAE2 + adds r0, r4, 0 + bl move_anim_8072740 + b _080CAB12 +_080CAAE2: + movs r1, 0x38 + ldrsh r0, [r4, r1] + movs r1, 0xC + bl Cos + ldrh r1, [r4, 0x26] + adds r0, r1 + strh r0, [r4, 0x26] + movs r1, 0x38 + ldrsh r0, [r4, r1] + cmp r0, 0x7E + bgt _080CAAFE + ldrh r0, [r4, 0x3A] + b _080CAB02 +_080CAAFE: + ldrh r0, [r4, 0x3A] + adds r0, 0x1 +_080CAB02: + adds r1, r4, 0 + adds r1, 0x43 + strb r0, [r1] + ldrh r0, [r4, 0x38] + adds r0, 0x18 + movs r1, 0xFF + ands r0, r1 + strh r0, [r4, 0x38] +_080CAB12: + pop {r4} + pop {r0} + bx r0 + thumb_func_end sub_80CAACC + + thumb_func_start sub_80CAB18 +sub_80CAB18: @ 80CAB18 + push {r4-r6,lr} + adds r6, r0, 0 + movs r1, 0x1 + bl sub_80787B0 + ldr r0, _080CAB78 @ =gBattleAnimPlayerMonIndex + ldrb r0, [r0] + bl GetBankSide + lsls r0, 24 + cmp r0, 0 + beq _080CAB38 + ldr r1, _080CAB7C @ =gBattleAnimArgs + ldrh r0, [r1, 0x4] + negs r0, r0 + strh r0, [r1, 0x4] +_080CAB38: + ldr r4, _080CAB7C @ =gBattleAnimArgs + ldrh r0, [r4, 0x8] + strh r0, [r6, 0x2E] + ldr r5, _080CAB80 @ =gBattleAnimEnemyMonIndex + ldrb r0, [r5] + movs r1, 0 + bl sub_8077ABC + lsls r0, 24 + lsrs r0, 24 + ldrh r1, [r4, 0x4] + adds r0, r1 + strh r0, [r6, 0x32] + ldrb r0, [r5] + movs r1, 0x1 + bl sub_8077ABC + lsls r0, 24 + lsrs r0, 24 + ldrh r1, [r4, 0x6] + adds r0, r1 + strh r0, [r6, 0x36] + ldrh r0, [r4, 0xA] + strh r0, [r6, 0x38] + adds r0, r6, 0 + bl sub_80786EC + ldr r0, _080CAB84 @ =sub_80CAB88 + str r0, [r6, 0x1C] + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 +_080CAB78: .4byte gBattleAnimPlayerMonIndex +_080CAB7C: .4byte gBattleAnimArgs +_080CAB80: .4byte gBattleAnimEnemyMonIndex +_080CAB84: .4byte sub_80CAB88 + thumb_func_end sub_80CAB18 + + thumb_func_start sub_80CAB88 +sub_80CAB88: @ 80CAB88 + push {r4,lr} + adds r4, r0, 0 + bl sub_8078718 + lsls r0, 24 + cmp r0, 0 + beq _080CABB2 + adds r2, r4, 0 + adds r2, 0x3E + ldrb r0, [r2] + movs r1, 0x4 + orrs r0, r1 + strb r0, [r2] + movs r0, 0xA + strh r0, [r4, 0x2E] + ldr r0, _080CABB8 @ =sub_80782D8 + str r0, [r4, 0x1C] + ldr r1, _080CABBC @ =sub_80CABC0 + adds r0, r4, 0 + bl oamt_set_x3A_32 +_080CABB2: + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_080CABB8: .4byte sub_80782D8 +_080CABBC: .4byte sub_80CABC0 + thumb_func_end sub_80CAB88 + + thumb_func_start sub_80CABC0 +sub_80CABC0: @ 80CABC0 + push {r4,lr} + adds r4, r0, 0 + adds r2, r4, 0 + adds r2, 0x3E + ldrb r1, [r2] + movs r0, 0x5 + negs r0, r0 + ands r0, r1 + strb r0, [r2] + adds r0, r4, 0 + movs r1, 0x1 + bl StartSpriteAnim + movs r0, 0x3C + strh r0, [r4, 0x2E] + ldr r0, _080CABF0 @ =sub_80782D8 + str r0, [r4, 0x1C] + ldr r1, _080CABF4 @ =move_anim_8072740 + adds r0, r4, 0 + bl oamt_set_x3A_32 + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_080CABF0: .4byte sub_80782D8 +_080CABF4: .4byte move_anim_8072740 + thumb_func_end sub_80CABC0 + + thumb_func_start sub_80CABF8 +sub_80CABF8: @ 80CABF8 + push {r4,r5,lr} + adds r4, r0, 0 + movs r1, 0x1 + bl sub_8078764 + ldr r5, _080CAC3C @ =gBattleAnimArgs + ldrb r1, [r5, 0x8] + adds r0, r4, 0 + bl StartSpriteAnim + movs r1, 0x8 + ldrsh r0, [r5, r1] + cmp r0, 0x1 + bne _080CAC22 + ldrb r0, [r4, 0x1] + movs r1, 0xD + negs r1, r1 + ands r1, r0 + movs r0, 0x4 + orrs r1, r0 + strb r1, [r4, 0x1] +_080CAC22: + ldrh r0, [r5, 0x6] + strh r0, [r4, 0x2E] + ldrh r0, [r5, 0x4] + strh r0, [r4, 0x30] + ldr r1, _080CAC40 @ =sub_80CAC44 + str r1, [r4, 0x1C] + adds r0, r4, 0 + bl _call_via_r1 + pop {r4,r5} + pop {r0} + bx r0 + .align 2, 0 +_080CAC3C: .4byte gBattleAnimArgs +_080CAC40: .4byte sub_80CAC44 + thumb_func_end sub_80CABF8 + + thumb_func_start sub_80CAC44 +sub_80CAC44: @ 80CAC44 + push {r4,lr} + adds r4, r0, 0 + movs r1, 0x30 + ldrsh r0, [r4, r1] + movs r1, 0x20 + bl Sin + strh r0, [r4, 0x24] + movs r1, 0x30 + ldrsh r0, [r4, r1] + movs r1, 0x3 + negs r1, r1 + bl Cos + ldrh r1, [r4, 0x32] + adds r1, 0x18 + strh r1, [r4, 0x32] + lsls r1, 16 + asrs r1, 24 + adds r0, r1 + strh r0, [r4, 0x26] + ldrh r0, [r4, 0x30] + subs r0, 0x40 + lsls r0, 16 + lsrs r0, 16 + cmp r0, 0x7F + bhi _080CAC98 + ldr r0, _080CAC94 @ =gBattleAnimEnemyMonIndex + ldrb r0, [r0] + bl sub_8079ED4 + movs r1, 0x3 + ands r1, r0 + lsls r1, 2 + ldrb r2, [r4, 0x5] + movs r0, 0xD + negs r0, r0 + ands r0, r2 + orrs r0, r1 + b _080CACBC + .align 2, 0 +_080CAC94: .4byte gBattleAnimEnemyMonIndex +_080CAC98: + ldr r0, _080CACE8 @ =gBattleAnimEnemyMonIndex + ldrb r0, [r0] + bl sub_8079ED4 + adds r0, 0x1 + lsls r0, 24 + lsrs r2, r0, 24 + cmp r2, 0x3 + bls _080CACAC + movs r2, 0x3 +_080CACAC: + movs r0, 0x3 + ands r2, r0 + lsls r2, 2 + ldrb r1, [r4, 0x5] + movs r0, 0xD + negs r0, r0 + ands r0, r1 + orrs r0, r2 +_080CACBC: + strb r0, [r4, 0x5] + ldrh r0, [r4, 0x30] + adds r0, 0x2 + movs r1, 0xFF + ands r0, r1 + strh r0, [r4, 0x30] + ldrh r0, [r4, 0x2E] + subs r0, 0x1 + strh r0, [r4, 0x2E] + lsls r0, 16 + asrs r0, 16 + movs r1, 0x1 + negs r1, r1 + cmp r0, r1 + bne _080CACE0 + adds r0, r4, 0 + bl move_anim_8072740 +_080CACE0: + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_080CACE8: .4byte gBattleAnimEnemyMonIndex + thumb_func_end sub_80CAC44 + + thumb_func_start sub_80CACEC +sub_80CACEC: @ 80CACEC + push {r4,lr} + lsls r0, 24 + lsrs r4, r0, 24 + bl IsContest + lsls r0, 24 + cmp r0, 0 + bne _080CAD06 + bl IsDoubleBattle + lsls r0, 24 + cmp r0, 0 + bne _080CAD0E +_080CAD06: + adds r0, r4, 0 + bl DestroyAnimVisualTask + b _080CAD4A +_080CAD0E: + ldr r0, _080CAD2C @ =gBattleAnimEnemyMonIndex + ldrb r0, [r0] + bl GetBankIdentity_permutated + lsls r0, 24 + lsrs r0, 24 + cmp r0, 0x1 + bne _080CAD34 + ldr r0, _080CAD30 @ =REG_BG2CNT + ldrb r1, [r0] + movs r2, 0x3 + orrs r1, r2 + strb r1, [r0] + b _080CAD44 + .align 2, 0 +_080CAD2C: .4byte gBattleAnimEnemyMonIndex +_080CAD30: .4byte REG_BG2CNT +_080CAD34: + ldr r2, _080CAD50 @ =REG_BG1CNT + ldrb r1, [r2] + movs r0, 0x4 + negs r0, r0 + ands r0, r1 + movs r1, 0x1 + orrs r0, r1 + strb r0, [r2] +_080CAD44: + adds r0, r4, 0 + bl DestroyAnimVisualTask +_080CAD4A: + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_080CAD50: .4byte REG_BG1CNT + thumb_func_end sub_80CACEC + + thumb_func_start sub_80CAD54 +sub_80CAD54: @ 80CAD54 + push {r4,r5,lr} + adds r4, r0, 0 + movs r1, 0 + bl sub_80787B0 + ldr r5, _080CAD9C @ =gBattleAnimArgs + ldrh r0, [r5, 0x6] + strh r0, [r4, 0x2E] + ldrh r0, [r4, 0x20] + strh r0, [r4, 0x30] + strh r0, [r4, 0x32] + ldrh r0, [r4, 0x22] + strh r0, [r4, 0x34] + ldr r0, _080CADA0 @ =gBattleAnimPlayerMonIndex + ldrb r0, [r0] + movs r1, 0x3 + bl sub_8077ABC + lsls r0, 24 + lsrs r0, 24 + ldrh r5, [r5, 0x4] + adds r0, r5 + strh r0, [r4, 0x36] + adds r0, r4, 0 + bl obj_translate_based_on_private_1_2_3_4 + movs r0, 0x40 + strh r0, [r4, 0x38] + ldr r1, _080CADA4 @ =sub_80CADA8 + str r1, [r4, 0x1C] + adds r0, r4, 0 + bl _call_via_r1 + pop {r4,r5} + pop {r0} + bx r0 + .align 2, 0 +_080CAD9C: .4byte gBattleAnimArgs +_080CADA0: .4byte gBattleAnimPlayerMonIndex +_080CADA4: .4byte sub_80CADA8 + thumb_func_end sub_80CAD54 + + thumb_func_start sub_80CADA8 +sub_80CADA8: @ 80CADA8 + push {r4,lr} + adds r4, r0, 0 + bl sub_8078B5C + lsls r0, 24 + cmp r0, 0 + bne _080CAE14 + movs r1, 0x38 + ldrsh r0, [r4, r1] + movs r1, 0x20 + bl Sin + ldrh r1, [r4, 0x24] + adds r0, r1 + strh r0, [r4, 0x24] + movs r1, 0x38 + ldrsh r0, [r4, r1] + movs r1, 0x5 + negs r1, r1 + bl Cos + ldrh r1, [r4, 0x26] + adds r0, r1 + strh r0, [r4, 0x26] + ldrh r0, [r4, 0x38] + subs r0, 0x40 + lsls r0, 16 + lsrs r0, 16 + cmp r0, 0x7F + bhi _080CADF4 + ldr r0, _080CADF0 @ =gBattleAnimPlayerMonIndex + ldrb r0, [r0] + bl sub_8079E90 + subs r0, 0x1 + b _080CADFE + .align 2, 0 +_080CADF0: .4byte gBattleAnimPlayerMonIndex +_080CADF4: + ldr r0, _080CAE10 @ =gBattleAnimPlayerMonIndex + ldrb r0, [r0] + bl sub_8079E90 + adds r0, 0x1 +_080CADFE: + adds r1, r4, 0 + adds r1, 0x43 + strb r0, [r1] + ldrh r0, [r4, 0x38] + adds r0, 0x5 + movs r1, 0xFF + ands r0, r1 + strh r0, [r4, 0x38] + b _080CAE1A + .align 2, 0 +_080CAE10: .4byte gBattleAnimPlayerMonIndex +_080CAE14: + adds r0, r4, 0 + bl move_anim_8072740 +_080CAE1A: + pop {r4} + pop {r0} + bx r0 + thumb_func_end sub_80CADA8 + + thumb_func_start sub_80CAE20 +sub_80CAE20: @ 80CAE20 + push {r4,r5,lr} + adds r4, r0, 0 + movs r1, 0x1 + bl sub_80787B0 + ldr r5, _080CAE68 @ =gBattleAnimArgs + ldrh r0, [r5, 0x6] + strh r0, [r4, 0x2E] + ldrh r0, [r4, 0x20] + strh r0, [r4, 0x30] + strh r0, [r4, 0x32] + ldrh r0, [r4, 0x22] + strh r0, [r4, 0x34] + ldr r0, _080CAE6C @ =gBattleAnimPlayerMonIndex + ldrb r0, [r0] + movs r1, 0x3 + bl sub_8077ABC + lsls r0, 24 + lsrs r0, 24 + ldrh r5, [r5, 0x4] + adds r0, r5 + strh r0, [r4, 0x36] + adds r0, r4, 0 + bl obj_translate_based_on_private_1_2_3_4 + movs r0, 0x40 + strh r0, [r4, 0x38] + ldr r1, _080CAE70 @ =sub_80CAE74 + str r1, [r4, 0x1C] + adds r0, r4, 0 + bl _call_via_r1 + pop {r4,r5} + pop {r0} + bx r0 + .align 2, 0 +_080CAE68: .4byte gBattleAnimArgs +_080CAE6C: .4byte gBattleAnimPlayerMonIndex +_080CAE70: .4byte sub_80CAE74 + thumb_func_end sub_80CAE20 + + thumb_func_start sub_80CAE74 +sub_80CAE74: @ 80CAE74 + push {r4,lr} + adds r4, r0, 0 + bl sub_8078B5C + lsls r0, 24 + cmp r0, 0 + bne _080CAECC + movs r1, 0x38 + ldrsh r0, [r4, r1] + movs r1, 0x8 + bl Sin + ldrh r1, [r4, 0x24] + adds r0, r1 + strh r0, [r4, 0x24] + ldrh r1, [r4, 0x38] + adds r0, r1, 0 + subs r0, 0x3B + lsls r0, 16 + lsrs r0, 16 + cmp r0, 0x4 + bls _080CAEAC + adds r0, r1, 0 + subs r0, 0xBB + lsls r0, 16 + lsrs r0, 16 + cmp r0, 0x4 + bhi _080CAEC0 +_080CAEAC: + ldrb r2, [r4, 0x3] + lsls r1, r2, 26 + lsrs r1, 27 + movs r0, 0x8 + eors r1, r0 + lsls r1, 1 + subs r0, 0x47 + ands r0, r2 + orrs r0, r1 + strb r0, [r4, 0x3] +_080CAEC0: + ldrh r0, [r4, 0x38] + adds r0, 0x5 + movs r1, 0xFF + ands r0, r1 + strh r0, [r4, 0x38] + b _080CAED2 +_080CAECC: + adds r0, r4, 0 + bl move_anim_8072740 +_080CAED2: + pop {r4} + pop {r0} + bx r0 + thumb_func_end sub_80CAE74 + + thumb_func_start sub_80CAED8 +sub_80CAED8: @ 80CAED8 + push {r4,r5,lr} + adds r4, r0, 0 + ldr r5, _080CAF14 @ =gBattleAnimPlayerMonIndex + ldrb r0, [r5] + movs r1, 0x2 + bl sub_8077ABC + lsls r0, 24 + lsrs r0, 24 + strh r0, [r4, 0x20] + ldrb r0, [r5] + movs r1, 0x3 + bl sub_8077ABC + lsls r0, 24 + lsrs r0, 24 + strh r0, [r4, 0x22] + ldr r1, _080CAF18 @ =gBattleAnimArgs + ldrh r0, [r1] + strh r0, [r4, 0x2E] + ldrh r0, [r1, 0x2] + strh r0, [r4, 0x30] + ldrh r0, [r1, 0x4] + strh r0, [r4, 0x32] + ldr r0, _080CAF1C @ =sub_80CAF20 + str r0, [r4, 0x1C] + pop {r4,r5} + pop {r0} + bx r0 + .align 2, 0 +_080CAF14: .4byte gBattleAnimPlayerMonIndex +_080CAF18: .4byte gBattleAnimArgs +_080CAF1C: .4byte sub_80CAF20 + thumb_func_end sub_80CAED8 + + thumb_func_start sub_80CAF20 +sub_80CAF20: @ 80CAF20 + push {lr} + adds r1, r0, 0 + ldrh r0, [r1, 0x32] + movs r2, 0x32 + ldrsh r3, [r1, r2] + cmp r3, 0 + bne _080CAF54 + ldrh r0, [r1, 0x30] + movs r2, 0x1 + ands r2, r0 + cmp r2, 0 + beq _080CAF42 + movs r0, 0x80 + strh r0, [r1, 0x2E] + strh r3, [r1, 0x30] + strh r3, [r1, 0x32] + b _080CAF48 +_080CAF42: + strh r2, [r1, 0x2E] + strh r2, [r1, 0x30] + strh r2, [r1, 0x32] +_080CAF48: + ldr r0, _080CAF50 @ =sub_80CAF6C + str r0, [r1, 0x1C] + b _080CAF68 + .align 2, 0 +_080CAF50: .4byte sub_80CAF6C +_080CAF54: + subs r0, 0x1 + strh r0, [r1, 0x32] + ldrh r0, [r1, 0x2E] + ldrh r2, [r1, 0x20] + adds r0, r2 + strh r0, [r1, 0x20] + ldrh r0, [r1, 0x30] + ldrh r2, [r1, 0x22] + adds r0, r2 + strh r0, [r1, 0x22] +_080CAF68: + pop {r0} + bx r0 + thumb_func_end sub_80CAF20 + + thumb_func_start sub_80CAF6C +sub_80CAF6C: @ 80CAF6C + push {r4,lr} + adds r4, r0, 0 + ldr r0, _080CAF8C @ =gBattleAnimPlayerMonIndex + ldrb r0, [r0] + bl GetBankSide + lsls r0, 24 + cmp r0, 0 + beq _080CAF90 + movs r1, 0x2E + ldrsh r0, [r4, r1] + movs r1, 0x19 + bl Sin + negs r0, r0 + b _080CAF9A + .align 2, 0 +_080CAF8C: .4byte gBattleAnimPlayerMonIndex +_080CAF90: + movs r1, 0x2E + ldrsh r0, [r4, r1] + movs r1, 0x19 + bl Sin +_080CAF9A: + strh r0, [r4, 0x24] + ldrh r0, [r4, 0x2E] + adds r0, 0x2 + movs r1, 0xFF + ands r0, r1 + strh r0, [r4, 0x2E] + ldrh r0, [r4, 0x30] + adds r0, 0x1 + strh r0, [r4, 0x30] + movs r1, 0x1 + ands r0, r1 + cmp r0, 0 + bne _080CAFBA + ldrh r0, [r4, 0x26] + adds r0, 0x1 + strh r0, [r4, 0x26] +_080CAFBA: + movs r1, 0x30 + ldrsh r0, [r4, r1] + cmp r0, 0x50 + ble _080CAFC8 + adds r0, r4, 0 + bl move_anim_8072740 +_080CAFC8: + pop {r4} + pop {r0} + bx r0 + thumb_func_end sub_80CAF6C + + thumb_func_start sub_80CAFD0 +sub_80CAFD0: @ 80CAFD0 + push {r4-r6,lr} + adds r5, r0, 0 + movs r1, 0x1 + bl sub_80787B0 + ldr r0, _080CB024 @ =gBattleAnimPlayerMonIndex + ldrb r0, [r0] + bl GetBankSide + lsls r0, 24 + cmp r0, 0 + beq _080CAFF0 + ldr r1, _080CB028 @ =gBattleAnimArgs + ldrh r0, [r1, 0x4] + negs r0, r0 + strh r0, [r1, 0x4] +_080CAFF0: + ldr r6, _080CB028 @ =gBattleAnimArgs + ldrh r0, [r6, 0x8] + strh r0, [r5, 0x2E] + movs r1, 0xC + ldrsh r0, [r6, r1] + cmp r0, 0 + bne _080CB030 + ldr r4, _080CB02C @ =gBattleAnimEnemyMonIndex + ldrb r0, [r4] + movs r1, 0x2 + bl sub_8077ABC + lsls r0, 24 + lsrs r0, 24 + ldrh r1, [r6, 0x4] + adds r0, r1 + strh r0, [r5, 0x32] + ldrb r0, [r4] + movs r1, 0x3 + bl sub_8077ABC + lsls r0, 24 + lsrs r0, 24 + ldrh r6, [r6, 0x6] + adds r0, r6 + b _080CB050 + .align 2, 0 +_080CB024: .4byte gBattleAnimPlayerMonIndex +_080CB028: .4byte gBattleAnimArgs +_080CB02C: .4byte gBattleAnimEnemyMonIndex +_080CB030: + ldr r0, _080CB07C @ =gBattleAnimEnemyMonIndex + ldrb r0, [r0] + adds r2, r5, 0 + adds r2, 0x32 + adds r3, r5, 0 + adds r3, 0x36 + movs r1, 0x1 + bl sub_807A3FC + ldrh r0, [r6, 0x4] + ldrh r1, [r5, 0x32] + adds r0, r1 + strh r0, [r5, 0x32] + ldrh r0, [r6, 0x6] + ldrh r1, [r5, 0x36] + adds r0, r1 +_080CB050: + strh r0, [r5, 0x36] + ldr r0, _080CB080 @ =gBattleAnimArgs + ldrh r0, [r0, 0xA] + strh r0, [r5, 0x38] + adds r0, r5, 0 + bl sub_80786EC + ldr r0, _080CB084 @ =gBattleAnimPlayerMonIndex + ldrb r0, [r0] + bl GetBankSide + adds r4, r0, 0 + ldr r0, _080CB07C @ =gBattleAnimEnemyMonIndex + ldrb r0, [r0] + bl GetBankSide + lsls r4, 24 + lsls r0, 24 + cmp r4, r0 + bne _080CB088 + movs r0, 0x1 + b _080CB08A + .align 2, 0 +_080CB07C: .4byte gBattleAnimEnemyMonIndex +_080CB080: .4byte gBattleAnimArgs +_080CB084: .4byte gBattleAnimPlayerMonIndex +_080CB088: + movs r0, 0 +_080CB08A: + strh r0, [r5, 0x2E] + ldr r0, _080CB098 @ =sub_80CB09C + str r0, [r5, 0x1C] + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 +_080CB098: .4byte sub_80CB09C + thumb_func_end sub_80CAFD0 + + thumb_func_start sub_80CB09C +sub_80CB09C: @ 80CB09C + push {r4-r7,lr} + adds r6, r0, 0 + movs r7, 0 + ldrh r5, [r6, 0x2E] + ldrh r4, [r6, 0x3C] + movs r0, 0x1 + strh r0, [r6, 0x2E] + adds r0, r6, 0 + bl sub_8078718 + ldrh r0, [r6, 0x3C] + strh r5, [r6, 0x2E] + lsls r4, 16 + asrs r4, 16 + cmp r4, 0xC8 + ble _080CB0CE + lsls r0, 16 + asrs r0, 16 + cmp r0, 0x37 + bgt _080CB0CE + ldrh r0, [r6, 0x6] + cmp r0, 0 + bne _080CB0D4 + adds r0, 0x1 + strh r0, [r6, 0x6] +_080CB0CE: + ldrh r0, [r6, 0x6] + cmp r0, 0 + beq _080CB106 +_080CB0D4: + movs r1, 0x2E + ldrsh r0, [r6, r1] + cmp r0, 0 + beq _080CB106 + adds r3, r6, 0 + adds r3, 0x3E + ldrb r2, [r3] + lsls r0, r2, 29 + lsrs r0, 31 + movs r1, 0x1 + eors r1, r0 + lsls r1, 2 + movs r0, 0x5 + negs r0, r0 + ands r0, r2 + orrs r0, r1 + strb r0, [r3] + ldrh r0, [r6, 0x6] + adds r0, 0x1 + strh r0, [r6, 0x6] + lsls r0, 16 + lsrs r0, 16 + cmp r0, 0x1E + bne _080CB106 + movs r7, 0x1 +_080CB106: + movs r2, 0x20 + ldrsh r0, [r6, r2] + movs r2, 0x24 + ldrsh r1, [r6, r2] + adds r0, r1 + adds r0, 0x10 + movs r1, 0x88 + lsls r1, 1 + cmp r0, r1 + bhi _080CB130 + movs r0, 0x22 + ldrsh r1, [r6, r0] + movs r2, 0x26 + ldrsh r0, [r6, r2] + adds r1, r0 + cmp r1, 0xA0 + bgt _080CB130 + movs r0, 0x10 + negs r0, r0 + cmp r1, r0 + bge _080CB132 +_080CB130: + movs r7, 0x1 +_080CB132: + cmp r7, 0 + beq _080CB13C + adds r0, r6, 0 + bl move_anim_8072740 +_080CB13C: + pop {r4-r7} + pop {r0} + bx r0 + thumb_func_end sub_80CB09C + + thumb_func_start sub_80CB144 +sub_80CB144: @ 80CB144 + push {r4,lr} + adds r4, r0, 0 + bl IsContest + lsls r0, 24 + cmp r0, 0 + bne _080CB170 + bl IsDoubleBattle + lsls r0, 24 + lsrs r0, 24 + cmp r0, 0x1 + bne _080CB170 + ldr r0, _080CB198 @ =gBattleAnimEnemyMonIndex + ldrb r0, [r0] + adds r2, r4, 0 + adds r2, 0x20 + adds r3, r4, 0 + adds r3, 0x22 + movs r1, 0x1 + bl sub_807A3FC +_080CB170: + ldrh r0, [r4, 0x22] + adds r0, 0x20 + strh r0, [r4, 0x22] + ldr r1, _080CB19C @ =gBattleAnimArgs + ldrh r0, [r1] + strh r0, [r4, 0x2E] + ldrh r0, [r1, 0x2] + strh r0, [r4, 0x30] + ldrh r0, [r1, 0x4] + strh r0, [r4, 0x32] + ldrh r0, [r1, 0x6] + strh r0, [r4, 0x34] + ldrh r0, [r1, 0x8] + strh r0, [r4, 0x36] + ldr r0, _080CB1A0 @ =sub_80CB1A4 + str r0, [r4, 0x1C] + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_080CB198: .4byte gBattleAnimEnemyMonIndex +_080CB19C: .4byte gBattleAnimArgs +_080CB1A0: .4byte sub_80CB1A4 + thumb_func_end sub_80CB144 + + thumb_func_start sub_80CB1A4 +sub_80CB1A4: @ 80CB1A4 + push {r4,r5,lr} + adds r4, r0, 0 + ldrh r1, [r4, 0x30] + movs r2, 0x30 + ldrsh r0, [r4, r2] + cmp r0, 0xFF + bne _080CB1BA + ldrh r0, [r4, 0x22] + subs r0, 0x2 + strh r0, [r4, 0x22] + b _080CB1C8 +_080CB1BA: + cmp r0, 0 + ble _080CB1C8 + ldrh r0, [r4, 0x22] + subs r0, 0x2 + strh r0, [r4, 0x22] + subs r0, r1, 0x2 + strh r0, [r4, 0x30] +_080CB1C8: + ldrh r3, [r4, 0x32] + ldrh r5, [r4, 0x38] + adds r2, r3, r5 + strh r2, [r4, 0x38] + movs r0, 0x2E + ldrsh r1, [r4, r0] + movs r5, 0x36 + ldrsh r0, [r4, r5] + cmp r1, r0 + bge _080CB1E0 + adds r0, r2, r3 + strh r0, [r4, 0x38] +_080CB1E0: + ldrh r1, [r4, 0x38] + movs r0, 0xFF + ands r0, r1 + strh r0, [r4, 0x38] + movs r1, 0x38 + ldrsh r0, [r4, r1] + movs r2, 0x34 + ldrsh r1, [r4, r2] + bl Cos + strh r0, [r4, 0x24] + movs r5, 0x38 + ldrsh r0, [r4, r5] + movs r1, 0x5 + bl Sin + strh r0, [r4, 0x26] + movs r1, 0x38 + ldrsh r0, [r4, r1] + cmp r0, 0x7F + bgt _080CB220 + ldr r0, _080CB21C @ =gBattleAnimEnemyMonIndex + ldrb r0, [r0] + bl sub_8079ED4 + lsls r0, 24 + lsrs r0, 24 + subs r0, 0x1 + b _080CB22E + .align 2, 0 +_080CB21C: .4byte gBattleAnimEnemyMonIndex +_080CB220: + ldr r0, _080CB258 @ =gBattleAnimEnemyMonIndex + ldrb r0, [r0] + bl sub_8079ED4 + lsls r0, 24 + lsrs r0, 24 + adds r0, 0x1 +_080CB22E: + movs r1, 0x3 + ands r0, r1 + lsls r0, 2 + ldrb r2, [r4, 0x5] + movs r1, 0xD + negs r1, r1 + ands r1, r2 + orrs r1, r0 + strb r1, [r4, 0x5] + ldrh r0, [r4, 0x2E] + subs r0, 0x1 + strh r0, [r4, 0x2E] + lsls r0, 16 + cmp r0, 0 + bne _080CB252 + adds r0, r4, 0 + bl move_anim_8072740 +_080CB252: + pop {r4,r5} + pop {r0} + bx r0 + .align 2, 0 +_080CB258: .4byte gBattleAnimEnemyMonIndex + thumb_func_end sub_80CB1A4 + + thumb_func_start sub_80CB25C +sub_80CB25C: @ 80CB25C + push {r4,r5,lr} + adds r5, r0, 0 + movs r1, 0 + bl sub_8078764 + adds r2, r5, 0 + adds r2, 0x2C + ldrb r0, [r2] + movs r1, 0x80 + orrs r0, r1 + strb r0, [r2] + ldr r4, _080CB290 @ =gBattleAnimArgs + ldrb r1, [r4, 0x4] + adds r0, r5, 0 + bl StartSpriteAffineAnim + ldrh r0, [r4, 0x4] + strh r0, [r5, 0x3A] + ldrh r0, [r4, 0x6] + strh r0, [r5, 0x3C] + ldr r0, _080CB294 @ =sub_80CB298 + str r0, [r5, 0x1C] + pop {r4,r5} + pop {r0} + bx r0 + .align 2, 0 +_080CB290: .4byte gBattleAnimArgs +_080CB294: .4byte sub_80CB298 + thumb_func_end sub_80CB25C + + thumb_func_start sub_80CB298 +sub_80CB298: @ 80CB298 + push {r4,lr} + adds r4, r0, 0 + ldr r0, _080CB2C8 @ =gBattleAnimArgs + ldrh r1, [r0, 0xE] + ldr r0, _080CB2CC @ =0x0000ffff + cmp r1, r0 + bne _080CB2C2 + adds r2, r4, 0 + adds r2, 0x2C + ldrb r1, [r2] + movs r0, 0x7F + ands r0, r1 + strb r0, [r2] + movs r0, 0x1 + bl obj_id_for_side_relative_to_move + movs r0, 0x80 + lsls r0, 1 + strh r0, [r4, 0x2E] + ldr r0, _080CB2D0 @ =sub_80CB2D4 + str r0, [r4, 0x1C] +_080CB2C2: + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_080CB2C8: .4byte gBattleAnimArgs +_080CB2CC: .4byte 0x0000ffff +_080CB2D0: .4byte sub_80CB2D4 + thumb_func_end sub_80CB298 + + thumb_func_start sub_80CB2D4 +sub_80CB2D4: @ 80CB2D4 + push {r4,lr} + adds r4, r0, 0 + movs r0, 0x1 + bl obj_id_for_side_relative_to_move + movs r1, 0x32 + ldrsh r0, [r4, r1] + cmp r0, 0 + bne _080CB2EC + ldrh r0, [r4, 0x2E] + adds r0, 0xB + b _080CB2F0 +_080CB2EC: + ldrh r0, [r4, 0x2E] + subs r0, 0xB +_080CB2F0: + strh r0, [r4, 0x2E] + ldrh r0, [r4, 0x30] + adds r0, 0x1 + strh r0, [r4, 0x30] + lsls r0, 16 + asrs r0, 16 + cmp r0, 0x6 + bne _080CB30C + movs r0, 0 + strh r0, [r4, 0x30] + ldrh r0, [r4, 0x32] + movs r1, 0x1 + eors r0, r1 + strh r0, [r4, 0x32] +_080CB30C: + adds r0, r4, 0 + adds r0, 0x3F + ldrb r1, [r0] + movs r0, 0x20 + ands r0, r1 + cmp r0, 0 + beq _080CB33A + ldrh r0, [r4, 0x3C] + subs r0, 0x1 + strh r0, [r4, 0x3C] + lsls r0, 16 + cmp r0, 0 + ble _080CB334 + ldrh r1, [r4, 0x3A] + lsls r1, 24 + lsrs r1, 24 + adds r0, r4, 0 + bl StartSpriteAffineAnim + b _080CB33A +_080CB334: + adds r0, r4, 0 + bl move_anim_8072740 +_080CB33A: + pop {r4} + pop {r0} + bx r0 + thumb_func_end sub_80CB2D4 + + thumb_func_start sub_80CB340 +sub_80CB340: @ 80CB340 + push {r4,lr} + lsls r0, 24 + lsrs r4, r0, 24 + movs r0, 0x1 + bl obj_id_for_side_relative_to_move + lsls r0, 24 + lsrs r2, r0, 24 + ldr r1, _080CB36C @ =gSprites + lsls r0, r2, 4 + adds r0, r2 + lsls r0, 2 + adds r0, r1 + adds r0, 0x3E + ldrb r0, [r0] + lsls r0, 29 + cmp r0, 0 + bge _080CB370 + adds r0, r4, 0 + bl DestroyAnimVisualTask + b _080CB396 + .align 2, 0 +_080CB36C: .4byte gSprites +_080CB370: + adds r0, r2, 0 + movs r1, 0x1 + bl sub_8078E70 + ldr r1, _080CB39C @ =gTasks + lsls r0, r4, 2 + adds r0, r4 + lsls r0, 3 + adds r0, r1 + ldr r2, _080CB3A0 @ =gBattleAnimArgs + ldrh r1, [r2] + strh r1, [r0, 0x8] + ldrh r1, [r2, 0x2] + strh r1, [r0, 0xA] + movs r1, 0x80 + lsls r1, 1 + strh r1, [r0, 0x1E] + ldr r1, _080CB3A4 @ =sub_80CB3A8 + str r1, [r0] +_080CB396: + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_080CB39C: .4byte gTasks +_080CB3A0: .4byte gBattleAnimArgs +_080CB3A4: .4byte sub_80CB3A8 + thumb_func_end sub_80CB340 + + thumb_func_start sub_80CB3A8 +sub_80CB3A8: @ 80CB3A8 + push {r4-r6,lr} + adds r4, r0, 0 + lsls r4, 24 + lsrs r4, 24 + movs r0, 0x1 + bl obj_id_for_side_relative_to_move + lsls r0, 24 + lsrs r0, 24 + adds r6, r0, 0 + ldr r1, _080CB428 @ =gTasks + lsls r0, r4, 2 + adds r0, r4 + lsls r0, 3 + adds r4, r0, r1 + ldrh r1, [r4, 0x8] + ldrh r0, [r4, 0x1C] + adds r1, r0 + strh r1, [r4, 0x1C] + ldr r2, _080CB42C @ =gSprites + lsls r0, r6, 4 + adds r0, r6 + lsls r0, 2 + adds r5, r0, r2 + lsls r1, 16 + asrs r1, 24 + strh r1, [r5, 0x24] + ldr r0, _080CB430 @ =gBattleAnimEnemyMonIndex + ldrb r0, [r0] + bl GetBankSide + lsls r0, 24 + cmp r0, 0 + beq _080CB3F2 + ldrh r0, [r5, 0x24] + negs r0, r0 + strh r0, [r5, 0x24] +_080CB3F2: + ldrh r0, [r4, 0x1E] + adds r0, 0x10 + strh r0, [r4, 0x1E] + movs r0, 0x1E + ldrsh r2, [r4, r0] + adds r0, r6, 0 + adds r1, r2, 0 + movs r3, 0 + bl obj_id_set_rotscale + adds r0, r6, 0 + bl sub_8079A64 + ldrh r0, [r4, 0xA] + subs r0, 0x1 + strh r0, [r4, 0xA] + lsls r0, 16 + asrs r0, 16 + cmp r0, 0 + bne _080CB420 + strh r0, [r4, 0x8] + ldr r0, _080CB434 @ =sub_80CB438 + str r0, [r4] +_080CB420: + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 +_080CB428: .4byte gTasks +_080CB42C: .4byte gSprites +_080CB430: .4byte gBattleAnimEnemyMonIndex +_080CB434: .4byte sub_80CB438 + thumb_func_end sub_80CB3A8 + + thumb_func_start sub_80CB438 +sub_80CB438: @ 80CB438 + push {r4-r6,lr} + lsls r0, 24 + lsrs r3, r0, 24 + ldr r0, _080CB484 @ =gBattleAnimArgs + ldrh r1, [r0, 0xE] + ldr r0, _080CB488 @ =0x0000ffff + cmp r1, r0 + bne _080CB494 + ldr r0, _080CB48C @ =gTasks + lsls r2, r3, 2 + adds r1, r2, r3 + lsls r1, 3 + adds r6, r1, r0 + movs r1, 0x8 + ldrsh r5, [r6, r1] + adds r4, r0, 0 + cmp r5, 0 + bne _080CB4A8 + movs r0, 0x1 + bl obj_id_for_side_relative_to_move + adds r4, r0, 0 + lsls r4, 24 + lsrs r4, 24 + adds r0, r4, 0 + bl sub_8078F40 + ldr r1, _080CB490 @ =gSprites + lsls r0, r4, 4 + adds r0, r4 + lsls r0, 2 + adds r0, r1 + strh r5, [r0, 0x24] + strh r5, [r0, 0x26] + ldrh r0, [r6, 0x8] + adds r0, 0x1 + strh r0, [r6, 0x8] + b _080CB4C2 + .align 2, 0 +_080CB484: .4byte gBattleAnimArgs +_080CB488: .4byte 0x0000ffff +_080CB48C: .4byte gTasks +_080CB490: .4byte gSprites +_080CB494: + ldr r1, _080CB4C8 @ =gTasks + lsls r2, r3, 2 + adds r0, r2, r3 + lsls r0, 3 + adds r0, r1 + movs r4, 0x8 + ldrsh r0, [r0, r4] + adds r4, r1, 0 + cmp r0, 0 + beq _080CB4C2 +_080CB4A8: + adds r1, r2, r3 + lsls r1, 3 + adds r1, r4 + ldrh r0, [r1, 0x8] + adds r0, 0x1 + strh r0, [r1, 0x8] + lsls r0, 16 + asrs r0, 16 + cmp r0, 0x3 + bne _080CB4C2 + adds r0, r3, 0 + bl DestroyAnimVisualTask +_080CB4C2: + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 +_080CB4C8: .4byte gTasks + thumb_func_end sub_80CB438 + + thumb_func_start sub_80CB4CC +sub_80CB4CC: @ 80CB4CC + push {r4-r6,lr} + adds r5, r0, 0 + movs r1, 0x2E + ldrsh r0, [r5, r1] + cmp r0, 0 + beq _080CB4DE + cmp r0, 0x1 + beq _080CB538 + b _080CB58A +_080CB4DE: + ldr r6, _080CB530 @ =gBattleAnimEnemyMonIndex + ldrb r0, [r6] + bl GetBankSide + lsls r0, 24 + cmp r0, 0 + bne _080CB4F6 + ldr r1, _080CB534 @ =gBattleAnimArgs + movs r2, 0 + ldrsh r0, [r1, r2] + negs r0, r0 + strh r0, [r1] +_080CB4F6: + ldrb r0, [r6] + movs r1, 0 + bl sub_8077ABC + lsls r0, 24 + ldr r4, _080CB534 @ =gBattleAnimArgs + lsrs r0, 24 + ldrh r1, [r4] + adds r0, r1 + strh r0, [r5, 0x20] + ldrb r0, [r6] + movs r1, 0x1 + bl sub_8077ABC + lsls r0, 24 + lsrs r0, 24 + ldrh r4, [r4, 0x2] + adds r0, r4 + strh r0, [r5, 0x22] + adds r2, r5, 0 + adds r2, 0x3E + ldrb r0, [r2] + movs r1, 0x4 + orrs r0, r1 + strb r0, [r2] + ldrh r0, [r5, 0x2E] + adds r0, 0x1 + strh r0, [r5, 0x2E] + b _080CB58A + .align 2, 0 +_080CB530: .4byte gBattleAnimEnemyMonIndex +_080CB534: .4byte gBattleAnimArgs +_080CB538: + adds r2, r5, 0 + adds r2, 0x3E + ldrb r1, [r2] + movs r0, 0x5 + negs r0, r0 + ands r0, r1 + strb r0, [r2] + adds r0, r5, 0 + adds r0, 0x3F + ldrb r1, [r0] + movs r0, 0x20 + ands r0, r1 + cmp r0, 0 + beq _080CB58A + adds r0, r5, 0 + movs r1, 0x1 + bl ChangeSpriteAffineAnim + movs r0, 0x19 + strh r0, [r5, 0x2E] + ldr r4, _080CB590 @ =gBattleAnimPlayerMonIndex + ldrb r0, [r4] + movs r1, 0x2 + bl sub_8077ABC + lsls r0, 24 + lsrs r0, 24 + strh r0, [r5, 0x32] + ldrb r0, [r4] + movs r1, 0x3 + bl sub_8077ABC + lsls r0, 24 + lsrs r0, 24 + strh r0, [r5, 0x36] + ldr r0, _080CB594 @ =sub_8078CC0 + str r0, [r5, 0x1C] + ldr r1, _080CB598 @ =move_anim_8072740 + adds r0, r5, 0 + bl oamt_set_x3A_32 +_080CB58A: + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 +_080CB590: .4byte gBattleAnimPlayerMonIndex +_080CB594: .4byte sub_8078CC0 +_080CB598: .4byte move_anim_8072740 + thumb_func_end sub_80CB4CC + + thumb_func_start sub_80CB59C +sub_80CB59C: @ 80CB59C + push {r4,r5,lr} + adds r5, r0, 0 + movs r1, 0x2E + ldrsh r0, [r5, r1] + cmp r0, 0 + bne _080CB608 + ldr r4, _080CB614 @ =gBattleAnimPlayerMonIndex + ldrb r0, [r4] + movs r1, 0x2 + bl sub_8077ABC + lsls r0, 24 + lsrs r0, 24 + strh r0, [r5, 0x20] + ldrb r0, [r4] + movs r1, 0x1 + bl sub_8077ABC + lsls r0, 24 + lsrs r0, 24 + strh r0, [r5, 0x22] + ldr r4, _080CB618 @ =gBattleAnimArgs + ldrh r0, [r4] + strh r0, [r5, 0x24] + ldrh r0, [r4, 0x2] + strh r0, [r5, 0x26] + ldrb r0, [r4, 0x4] + adds r0, 0x1E + adds r1, r5, 0 + adds r1, 0x43 + strb r0, [r1] + ldrb r1, [r4, 0x6] + adds r0, r5, 0 + bl StartSpriteAnim + ldrh r0, [r4, 0x8] + strh r0, [r5, 0x32] + ldrh r0, [r5, 0x2E] + adds r0, 0x1 + strh r0, [r5, 0x2E] + movs r2, 0x22 + ldrsh r0, [r5, r2] + movs r2, 0x26 + ldrsh r1, [r5, r2] + adds r0, r1 + cmp r0, 0x78 + ble _080CB608 + ldrh r0, [r5, 0x22] + adds r1, r0, 0 + subs r1, 0x78 + ldrh r2, [r5, 0x26] + adds r0, r2 + adds r1, r0 + strh r1, [r5, 0x22] +_080CB608: + ldr r0, _080CB61C @ =sub_80CB710 + str r0, [r5, 0x1C] + pop {r4,r5} + pop {r0} + bx r0 + .align 2, 0 +_080CB614: .4byte gBattleAnimPlayerMonIndex +_080CB618: .4byte gBattleAnimArgs +_080CB61C: .4byte sub_80CB710 + thumb_func_end sub_80CB59C + + thumb_func_start sub_80CB620 +sub_80CB620: @ 80CB620 + push {r4-r6,lr} + mov r6, r10 + mov r5, r9 + mov r4, r8 + push {r4-r6} + sub sp, 0x4 + mov r9, r0 + ldr r4, _080CB6FC @ =gBattleAnimPlayerMonIndex + ldrb r0, [r4] + movs r1, 0x2 + bl sub_8077ABC + adds r5, r0, 0 + lsls r5, 24 + lsrs r5, 24 + ldrb r0, [r4] + movs r1, 0x3 + bl sub_8077ABC + mov r8, r0 + mov r0, r8 + lsls r0, 24 + lsrs r0, 24 + mov r8, r0 + ldr r6, _080CB700 @ =gBattleAnimEnemyMonIndex + ldrb r0, [r6] + movs r1, 0x2 + bl sub_8077ABC + adds r4, r0, 0 + lsls r4, 24 + lsrs r4, 24 + ldrb r0, [r6] + movs r1, 0x3 + bl sub_8077ABC + adds r2, r0, 0 + lsls r2, 24 + subs r4, r5 + lsls r4, 16 + lsrs r2, 24 + mov r1, r8 + subs r2, r1 + lsls r2, 16 + lsrs r2, 16 + lsrs r3, r4, 16 + mov r10, r3 + asrs r4, 16 + ldr r6, _080CB704 @ =gBattleAnimArgs + movs r1, 0 + ldrsh r0, [r6, r1] + muls r0, r4 + movs r1, 0x64 + str r2, [sp] + bl __divsi3 + adds r5, r0 + mov r3, r9 + strh r5, [r3, 0x20] + ldr r2, [sp] + lsls r0, r2, 16 + asrs r0, 16 + movs r3, 0 + ldrsh r1, [r6, r3] + muls r0, r1 + movs r1, 0x64 + bl __divsi3 + add r8, r0 + mov r1, r8 + mov r0, r9 + strh r1, [r0, 0x22] + ldrh r0, [r6, 0x2] + mov r3, r9 + strh r0, [r3, 0x24] + ldrh r0, [r6, 0x4] + strh r0, [r3, 0x26] + ldrb r0, [r6, 0x6] + adds r0, 0x1E + mov r1, r9 + adds r1, 0x43 + strb r0, [r1] + ldrb r1, [r6, 0x8] + mov r0, r9 + bl StartSpriteAnim + ldrh r0, [r6, 0xA] + mov r1, r9 + strh r0, [r1, 0x32] + ldr r0, _080CB708 @ =sub_80CB710 + str r0, [r1, 0x1C] + ldr r1, _080CB70C @ =gUnknown_03000728 + mov r3, r9 + ldrh r0, [r3, 0x20] + strh r0, [r1] + ldrh r0, [r3, 0x22] + strh r0, [r1, 0x2] + mov r0, r10 + strh r0, [r1, 0x4] + ldr r2, [sp] + strh r2, [r1, 0x6] + add sp, 0x4 + pop {r3-r5} + mov r8, r3 + mov r9, r4 + mov r10, r5 + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 +_080CB6FC: .4byte gBattleAnimPlayerMonIndex +_080CB700: .4byte gBattleAnimEnemyMonIndex +_080CB704: .4byte gBattleAnimArgs +_080CB708: .4byte sub_80CB710 +_080CB70C: .4byte gUnknown_03000728 + thumb_func_end sub_80CB620 + + thumb_func_start sub_80CB710 +sub_80CB710: @ 80CB710 + push {lr} + adds r3, r0, 0 + ldrh r1, [r3, 0x2E] + adds r1, 0x1 + strh r1, [r3, 0x2E] + lsls r1, 16 + asrs r1, 16 + movs r2, 0x32 + ldrsh r0, [r3, r2] + subs r0, 0xA + cmp r1, r0 + ble _080CB750 + movs r0, 0x2E + ldrsh r1, [r3, r0] + lsrs r0, r1, 31 + adds r0, r1, r0 + asrs r0, 1 + lsls r0, 1 + subs r1, r0 + movs r2, 0x3E + adds r2, r3 + mov r12, r2 + movs r0, 0x1 + ands r1, r0 + lsls r1, 2 + ldrb r2, [r2] + movs r0, 0x5 + negs r0, r0 + ands r0, r2 + orrs r0, r1 + mov r1, r12 + strb r0, [r1] +_080CB750: + movs r2, 0x2E + ldrsh r1, [r3, r2] + movs r2, 0x32 + ldrsh r0, [r3, r2] + cmp r1, r0 + ble _080CB762 + adds r0, r3, 0 + bl move_anim_8072740 +_080CB762: + pop {r0} + bx r0 + thumb_func_end sub_80CB710 + + thumb_func_start sub_80CB768 +sub_80CB768: @ 80CB768 + push {r4-r6,lr} + adds r6, r0, 0 + movs r1, 0x2E + ldrsh r0, [r6, r1] + cmp r0, 0 + bne _080CB7A8 + ldr r5, _080CB7E4 @ =gBattleAnimPlayerMonIndex + ldrb r0, [r5] + movs r1, 0x2 + bl sub_8077ABC + lsls r0, 24 + ldr r4, _080CB7E8 @ =gBattleAnimArgs + lsrs r0, 24 + ldrh r2, [r4] + adds r0, r2 + strh r0, [r6, 0x20] + ldrb r0, [r5] + movs r1, 0x1 + bl sub_8077ABC + lsls r0, 24 + lsrs r0, 24 + ldrh r1, [r4, 0x2] + adds r0, r1 + strh r0, [r6, 0x22] + ldrh r0, [r4, 0x4] + strh r0, [r6, 0x30] + ldrh r0, [r4, 0x6] + strh r0, [r6, 0x32] + ldrh r0, [r4, 0x8] + strh r0, [r6, 0x34] +_080CB7A8: + ldrh r0, [r6, 0x2E] + adds r0, 0x1 + strh r0, [r6, 0x2E] + ldrh r1, [r6, 0x30] + muls r0, r1 + strh r0, [r6, 0x24] + movs r2, 0x2E + ldrsh r1, [r6, r2] + lsls r0, r1, 2 + adds r0, r1 + lsls r0, 2 + movs r1, 0xFF + ands r0, r1 + movs r2, 0x32 + ldrsh r1, [r6, r2] + bl Sin + strh r0, [r6, 0x26] + movs r0, 0x2E + ldrsh r1, [r6, r0] + movs r2, 0x34 + ldrsh r0, [r6, r2] + cmp r1, r0 + ble _080CB7DE + adds r0, r6, 0 + bl move_anim_8072740 +_080CB7DE: + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 +_080CB7E4: .4byte gBattleAnimPlayerMonIndex +_080CB7E8: .4byte gBattleAnimArgs + thumb_func_end sub_80CB768 + + thumb_func_start sub_80CB7EC +sub_80CB7EC: @ 80CB7EC + push {r4,r5,lr} + movs r2, 0x20 + ldrsh r4, [r0, r2] + lsls r4, 8 + movs r3, 0x22 + ldrsh r2, [r0, r3] + orrs r4, r2 + movs r5, 0x3A + ldrsh r2, [r0, r5] + lsls r2, 8 + movs r5, 0x3C + ldrsh r3, [r0, r5] + orrs r2, r3 + lsls r1, 8 + strh r4, [r0, 0x38] + strh r2, [r0, 0x3A] + strh r1, [r0, 0x3C] + pop {r4,r5} + pop {r0} + bx r0 + thumb_func_end sub_80CB7EC + + thumb_func_start sub_80CB814 +sub_80CB814: @ 80CB814 + push {r4-r7,lr} + mov r7, r10 + mov r6, r9 + mov r5, r8 + push {r5-r7} + mov r8, r0 + ldrh r0, [r0, 0x38] + lsrs r1, r0, 8 + mov r10, r1 + lsls r0, 24 + lsrs r0, 24 + mov r9, r0 + mov r1, r8 + ldrh r0, [r1, 0x3A] + lsrs r2, r0, 8 + lsls r0, 24 + lsrs r4, r0, 24 + ldrh r1, [r1, 0x3C] + lsls r0, r1, 16 + asrs r0, 24 + lsls r0, 16 + lsrs r6, r0, 16 + movs r3, 0xFF + ands r3, r1 + cmp r2, 0 + bne _080CB84E + movs r2, 0x20 + negs r2, r2 + b _080CB856 +_080CB84E: + cmp r2, 0xFF + bne _080CB856 + movs r2, 0x88 + lsls r2, 1 +_080CB856: + mov r0, r9 + subs r4, r0 + lsls r4, 16 + lsrs r4, 16 + mov r1, r10 + subs r0, r2, r1 + lsls r5, r3, 16 + asrs r5, 16 + muls r0, r5 + lsls r1, r6, 16 + asrs r7, r1, 16 + adds r1, r7, 0 + bl __divsi3 + adds r6, r0, 0 + lsls r4, 16 + asrs r4, 16 + adds r0, r4, 0 + muls r0, r5 + adds r1, r7, 0 + bl __divsi3 + add r6, r10 + mov r1, r8 + strh r6, [r1, 0x20] + add r0, r9 + strh r0, [r1, 0x22] + adds r5, 0x1 + lsls r5, 16 + lsrs r3, r5, 16 + asrs r5, 16 + cmp r5, r7 + beq _080CB8A8 + lsls r1, r7, 8 + lsls r0, r3, 16 + asrs r0, 16 + orrs r0, r1 + mov r1, r8 + strh r0, [r1, 0x3C] + movs r0, 0 + b _080CB8AA +_080CB8A8: + movs r0, 0x1 +_080CB8AA: + pop {r3-r5} + mov r8, r3 + mov r9, r4 + mov r10, r5 + pop {r4-r7} + pop {r1} + bx r1 + thumb_func_end sub_80CB814 + + thumb_func_start sub_80CB8B8 +sub_80CB8B8: @ 80CB8B8 + push {r4,lr} + adds r4, r0, 0 + movs r1, 0x2E + ldrsh r0, [r4, r1] + cmp r0, 0xA + bne _080CB8CC + adds r0, r4, 0 + movs r1, 0x1 + bl StartSpriteAffineAnim +_080CB8CC: + ldrh r0, [r4, 0x2E] + adds r0, 0x1 + strh r0, [r4, 0x2E] + lsls r0, 16 + asrs r0, 16 + cmp r0, 0x32 + ble _080CB8E0 + adds r0, r4, 0 + bl move_anim_8072740 +_080CB8E0: + pop {r4} + pop {r0} + bx r0 + thumb_func_end sub_80CB8B8 + + thumb_func_start sub_80CB8E8 +sub_80CB8E8: @ 80CB8E8 + push {r4,r5,lr} + adds r4, r0, 0 + movs r1, 0x34 + ldrsh r0, [r4, r1] + lsls r0, 7 + movs r2, 0x36 + ldrsh r1, [r4, r2] + bl __divsi3 + ldrh r1, [r4, 0x2E] + adds r1, r0 + movs r5, 0 + strh r1, [r4, 0x2E] + lsls r1, 16 + asrs r1, 16 + cmp r1, 0x7F + ble _080CB912 + ldrh r0, [r4, 0x30] + adds r0, 0x1 + strh r0, [r4, 0x30] + strh r5, [r4, 0x2E] +_080CB912: + ldrh r0, [r4, 0x2E] + adds r0, 0x80 + lsls r0, 16 + asrs r0, 16 + movs r1, 0x30 + ldrsh r2, [r4, r1] + lsls r2, 3 + movs r1, 0x1E + subs r1, r2 + lsls r1, 16 + asrs r1, 16 + bl Sin + strh r0, [r4, 0x26] + adds r0, r4, 0 + bl sub_80CB814 + lsls r0, 24 + cmp r0, 0 + beq _080CB942 + strh r5, [r4, 0x26] + strh r5, [r4, 0x2E] + ldr r0, _080CB948 @ =sub_80CB8B8 + str r0, [r4, 0x1C] +_080CB942: + pop {r4,r5} + pop {r0} + bx r0 + .align 2, 0 +_080CB948: .4byte sub_80CB8B8 + thumb_func_end sub_80CB8E8 + + thumb_func_start sub_80CB94C +sub_80CB94C: @ 80CB94C + push {r4-r6,lr} + adds r5, r0, 0 + movs r1, 0 + bl sub_80787B0 + ldr r4, _080CB994 @ =gBattleAnimEnemyMonIndex + ldrb r0, [r4] + movs r1, 0 + bl sub_8077ABC + lsls r0, 24 + lsrs r6, r0, 24 + ldrb r0, [r4] + movs r1, 0x1 + bl sub_8077ABC + lsls r0, 24 + lsrs r2, r0, 24 + ldr r0, _080CB998 @ =gBattleAnimPlayerMonIndex + ldrb r1, [r0] + movs r0, 0x2 + eors r0, r1 + ldrb r4, [r4] + cmp r0, r4 + bne _080CB99C + strh r6, [r5, 0x3A] + adds r0, r2, 0 + adds r0, 0xA + strh r0, [r5, 0x3C] + adds r0, r5, 0 + movs r1, 0x3C + bl sub_80CB7EC + movs r0, 0x1 + b _080CB9AE + .align 2, 0 +_080CB994: .4byte gBattleAnimEnemyMonIndex +_080CB998: .4byte gBattleAnimPlayerMonIndex +_080CB99C: + strh r6, [r5, 0x3A] + adds r0, r2, 0 + adds r0, 0xA + strh r0, [r5, 0x3C] + adds r0, r5, 0 + movs r1, 0x3C + bl sub_80CB7EC + movs r0, 0x3 +_080CB9AE: + strh r0, [r5, 0x34] + movs r0, 0x3C + strh r0, [r5, 0x36] + ldr r0, _080CB9C0 @ =sub_80CB8E8 + str r0, [r5, 0x1C] + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 +_080CB9C0: .4byte sub_80CB8E8 + thumb_func_end sub_80CB94C + + thumb_func_start sub_80CB9C4 +sub_80CB9C4: @ 80CB9C4 + push {r4,r5,lr} + adds r4, r0, 0 + movs r1, 0x34 + ldrsh r0, [r4, r1] + lsls r0, 7 + movs r2, 0x36 + ldrsh r1, [r4, r2] + bl __divsi3 + ldrh r1, [r4, 0x2E] + adds r1, r0 + movs r5, 0 + strh r1, [r4, 0x2E] + lsls r1, 16 + asrs r1, 16 + cmp r1, 0x7F + ble _080CB9EE + ldrh r0, [r4, 0x30] + adds r0, 0x1 + strh r0, [r4, 0x30] + strh r5, [r4, 0x2E] +_080CB9EE: + ldrh r0, [r4, 0x2E] + adds r0, 0x80 + lsls r0, 16 + asrs r0, 16 + movs r1, 0x30 + ldrsh r2, [r4, r1] + lsls r2, 3 + movs r1, 0x1E + subs r1, r2 + lsls r1, 16 + asrs r1, 16 + bl Sin + strh r0, [r4, 0x26] + adds r0, r4, 0 + bl sub_80CB814 + lsls r0, 24 + cmp r0, 0 + beq _080CBA20 + strh r5, [r4, 0x26] + strh r5, [r4, 0x2E] + adds r0, r4, 0 + bl move_anim_8072740 +_080CBA20: + pop {r4,r5} + pop {r0} + bx r0 + thumb_func_end sub_80CB9C4 + + thumb_func_start sub_80CBA28 +sub_80CBA28: @ 80CBA28 + push {r4-r6,lr} + adds r5, r0, 0 + ldr r4, _080CBA64 @ =gBattleAnimEnemyMonIndex + ldrb r0, [r4] + movs r1, 0x1 + bl sub_8077ABC + lsls r0, 24 + lsrs r6, r0, 24 + ldrb r0, [r4] + bl GetBankSide + lsls r0, 24 + lsrs r0, 24 + cmp r0, 0 + bne _080CBA6C + strh r0, [r5, 0x3A] + adds r0, r6, 0 + adds r0, 0xA + strh r0, [r5, 0x3C] + adds r0, r5, 0 + movs r1, 0x28 + bl sub_80CB7EC + movs r0, 0x3 + strh r0, [r5, 0x34] + movs r0, 0x3C + strh r0, [r5, 0x36] + ldr r0, _080CBA68 @ =sub_80CB8E8 + b _080CBA96 + .align 2, 0 +_080CBA64: .4byte gBattleAnimEnemyMonIndex +_080CBA68: .4byte sub_80CB8E8 +_080CBA6C: + movs r0, 0xFF + strh r0, [r5, 0x3A] + adds r0, r6, 0 + adds r0, 0xA + strh r0, [r5, 0x3C] + bl IsContest + lsls r0, 24 + cmp r0, 0 + beq _080CBA84 + movs r0, 0 + strh r0, [r5, 0x3A] +_080CBA84: + adds r0, r5, 0 + movs r1, 0x28 + bl sub_80CB7EC + movs r0, 0x3 + strh r0, [r5, 0x34] + movs r0, 0x3C + strh r0, [r5, 0x36] + ldr r0, _080CBAA0 @ =sub_80CB9C4 +_080CBA96: + str r0, [r5, 0x1C] + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 +_080CBAA0: .4byte sub_80CB9C4 + thumb_func_end sub_80CBA28 + + thumb_func_start sub_80CBAA4 +sub_80CBAA4: @ 80CBAA4 + push {r4,lr} + adds r4, r0, 0 + movs r1, 0x2E + ldrsh r0, [r4, r1] + cmp r0, 0 + bne _080CBABE + adds r0, r4, 0 + movs r1, 0 + bl sub_8078764 + ldr r0, _080CBAE4 @ =gBattleAnimArgs + ldrh r0, [r0, 0x4] + strh r0, [r4, 0x30] +_080CBABE: + ldrh r0, [r4, 0x2E] + adds r0, 0x1 + strh r0, [r4, 0x2E] + ldrh r1, [r4, 0x30] + muls r0, r1 + strh r0, [r4, 0x26] + adds r0, r4, 0 + adds r0, 0x3F + ldrb r1, [r0] + movs r0, 0x10 + ands r0, r1 + cmp r0, 0 + beq _080CBADE + adds r0, r4, 0 + bl move_anim_8072740 +_080CBADE: + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_080CBAE4: .4byte gBattleAnimArgs + thumb_func_end sub_80CBAA4 + + thumb_func_start sub_80CBAE8 +sub_80CBAE8: @ 80CBAE8 + push {r4-r6,lr} + adds r5, r0, 0 + movs r1, 0 + bl sub_8078764 + ldr r4, _080CBB30 @ =gBattleAnimPlayerMonIndex + ldrb r0, [r4] + movs r1, 0 + bl sub_8077ABC + lsls r0, 24 + lsrs r6, r0, 24 + ldrb r0, [r4] + movs r1, 0x1 + bl sub_8077ABC + lsls r0, 24 + lsrs r2, r0, 24 + ldr r0, _080CBB34 @ =gBattleAnimEnemyMonIndex + ldrb r1, [r0] + movs r0, 0x2 + eors r0, r1 + ldrb r4, [r4] + cmp r0, r4 + bne _080CBB38 + strh r6, [r5, 0x3A] + adds r0, r2, 0 + adds r0, 0xA + strh r0, [r5, 0x3C] + adds r0, r5, 0 + movs r1, 0x3C + bl sub_80CB7EC + movs r0, 0x1 + b _080CBB4A + .align 2, 0 +_080CBB30: .4byte gBattleAnimPlayerMonIndex +_080CBB34: .4byte gBattleAnimEnemyMonIndex +_080CBB38: + strh r6, [r5, 0x3A] + adds r0, r2, 0 + adds r0, 0xA + strh r0, [r5, 0x3C] + adds r0, r5, 0 + movs r1, 0x3C + bl sub_80CB7EC + movs r0, 0x3 +_080CBB4A: + strh r0, [r5, 0x34] + movs r0, 0x3C + strh r0, [r5, 0x36] + ldr r0, _080CBB5C @ =sub_80CBB60 + str r0, [r5, 0x1C] + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 +_080CBB5C: .4byte sub_80CBB60 + thumb_func_end sub_80CBAE8 + + thumb_func_start sub_80CBB60 +sub_80CBB60: @ 80CBB60 + push {r4,r5,lr} + adds r4, r0, 0 + movs r1, 0x34 + ldrsh r0, [r4, r1] + lsls r0, 7 + movs r2, 0x36 + ldrsh r1, [r4, r2] + bl __divsi3 + ldrh r1, [r4, 0x2E] + adds r1, r0 + movs r5, 0 + strh r1, [r4, 0x2E] + lsls r1, 16 + asrs r1, 16 + cmp r1, 0x7F + ble _080CBB8A + ldrh r0, [r4, 0x30] + adds r0, 0x1 + strh r0, [r4, 0x30] + strh r5, [r4, 0x2E] +_080CBB8A: + ldrh r0, [r4, 0x2E] + adds r0, 0x80 + lsls r0, 16 + asrs r0, 16 + movs r1, 0x30 + ldrsh r2, [r4, r1] + lsls r2, 3 + movs r1, 0x1E + subs r1, r2 + lsls r1, 16 + asrs r1, 16 + bl Sin + strh r0, [r4, 0x26] + lsls r0, 16 + cmp r0, 0 + bne _080CBBBE + movs r0, 0x3F + bl sub_8076F98 + adds r1, r0, 0 + lsls r1, 24 + asrs r1, 24 + movs r0, 0x7D + bl PlaySE12WithPanning +_080CBBBE: + adds r0, r4, 0 + bl sub_80CB814 + lsls r0, 24 + cmp r0, 0 + beq _080CBBE6 + strh r5, [r4, 0x26] + strh r5, [r4, 0x2E] + ldr r0, _080CBBEC @ =sub_80CB8B8 + str r0, [r4, 0x1C] + movs r0, 0x40 + negs r0, r0 + bl sub_8076F98 + adds r1, r0, 0 + lsls r1, 24 + asrs r1, 24 + movs r0, 0x7D + bl PlaySE12WithPanning +_080CBBE6: + pop {r4,r5} + pop {r0} + bx r0 + .align 2, 0 +_080CBBEC: .4byte sub_80CB8B8 + thumb_func_end sub_80CBB60 + + thumb_func_start sub_80CBBF0 +sub_80CBBF0: @ 80CBBF0 + push {r4,r5,lr} + adds r4, r0, 0 + movs r1, 0x2E + ldrsh r0, [r4, r1] + cmp r0, 0 + bne _080CBC84 + bl IsContest + lsls r0, 24 + cmp r0, 0 + bne _080CBC18 + ldr r0, _080CBC14 @ =gBattleAnimArgs + ldrh r1, [r0, 0x2] + strh r1, [r4, 0x30] + movs r1, 0x78 + strh r1, [r4, 0x20] + adds r5, r0, 0 + b _080CBC3A + .align 2, 0 +_080CBC14: .4byte gBattleAnimArgs +_080CBC18: + ldr r0, _080CBC74 @ =gBattleAnimArgs + movs r1, 0x2 + ldrsh r3, [r0, r1] + adds r1, r3, 0 + subs r1, 0x20 + adds r2, r1, 0 + adds r5, r0, 0 + cmp r1, 0 + bge _080CBC2E + adds r2, r3, 0 + adds r2, 0xDF +_080CBC2E: + asrs r0, r2, 8 + lsls r0, 8 + subs r0, r1, r0 + strh r0, [r4, 0x30] + movs r0, 0x46 + strh r0, [r4, 0x20] +_080CBC3A: + ldrh r0, [r5] + strh r0, [r4, 0x22] + strh r0, [r4, 0x32] + movs r0, 0x14 + strh r0, [r4, 0x36] + movs r1, 0x30 + ldrsh r0, [r4, r1] + movs r1, 0x3C + bl Cos + strh r0, [r4, 0x24] + movs r1, 0x30 + ldrsh r0, [r4, r1] + movs r1, 0x14 + bl Sin + strh r0, [r4, 0x26] + ldr r0, _080CBC78 @ =sub_80CBC8C + str r0, [r4, 0x1C] + ldrh r0, [r4, 0x30] + subs r0, 0x1 + lsls r0, 16 + lsrs r0, 16 + cmp r0, 0xBE + bhi _080CBC7C + adds r1, r4, 0 + adds r1, 0x43 + movs r0, 0x1F + b _080CBC82 + .align 2, 0 +_080CBC74: .4byte gBattleAnimArgs +_080CBC78: .4byte sub_80CBC8C +_080CBC7C: + adds r1, r4, 0 + adds r1, 0x43 + movs r0, 0x1D +_080CBC82: + strb r0, [r1] +_080CBC84: + pop {r4,r5} + pop {r0} + bx r0 + thumb_func_end sub_80CBBF0 + + thumb_func_start sub_80CBC8C +sub_80CBC8C: @ 80CBC8C + push {r4,r5,lr} + adds r4, r0, 0 + movs r1, 0x34 + ldrsh r0, [r4, r1] + cmp r0, 0 + beq _080CBC9E + cmp r0, 0x1 + beq _080CBCCE + b _080CBCEE +_080CBC9E: + ldrh r5, [r4, 0x32] + movs r1, 0x32 + ldrsh r0, [r4, r1] + cmp r0, 0x4E + ble _080CBCB6 + movs r0, 0x1 + strh r0, [r4, 0x34] + adds r0, r4, 0 + movs r1, 0x1 + bl StartSpriteAffineAnim + b _080CBCEE +_080CBCB6: + movs r1, 0x36 + ldrsh r0, [r4, r1] + movs r1, 0xA + bl __divsi3 + adds r0, r5, r0 + strh r0, [r4, 0x32] + ldrh r1, [r4, 0x36] + adds r1, 0x3 + strh r1, [r4, 0x36] + strh r0, [r4, 0x22] + b _080CBCEE +_080CBCCE: + movs r1, 0x34 + ldrsh r0, [r4, r1] + cmp r0, 0 + beq _080CBCEE + adds r0, r4, 0 + adds r0, 0x3F + ldrb r1, [r0] + movs r0, 0x20 + ands r0, r1 + cmp r0, 0 + beq _080CBCEE + movs r0, 0 + strh r0, [r4, 0x2E] + strh r0, [r4, 0x32] + ldr r0, _080CBCF4 @ =sub_80CBCF8 + str r0, [r4, 0x1C] +_080CBCEE: + pop {r4,r5} + pop {r0} + bx r0 + .align 2, 0 +_080CBCF4: .4byte sub_80CBCF8 + thumb_func_end sub_80CBC8C + + thumb_func_start sub_80CBCF8 +sub_80CBCF8: @ 80CBCF8 + push {r4-r6,lr} + adds r4, r0, 0 + ldr r5, _080CBD3C @ =gUnknown_083D680C + movs r0, 0x2E + ldrsh r1, [r4, r0] + lsls r0, r1, 1 + adds r3, r0, r1 + adds r0, r5, 0x1 + adds r0, r3, r0 + ldrh r2, [r4, 0x32] + movs r6, 0x32 + ldrsh r1, [r4, r6] + ldrb r0, [r0] + lsls r0, 24 + asrs r0, 24 + cmp r1, r0 + bne _080CBD44 + adds r0, r5, 0x2 + adds r0, r3, r0 + ldrb r0, [r0] + lsls r0, 24 + asrs r0, 24 + cmp r0, 0x7F + bne _080CBD30 + movs r0, 0 + strh r0, [r4, 0x2E] + ldr r0, _080CBD40 @ =sub_80CBDB0 + str r0, [r4, 0x1C] +_080CBD30: + movs r0, 0 + strh r0, [r4, 0x32] + ldrh r0, [r4, 0x2E] + adds r0, 0x1 + strh r0, [r4, 0x2E] + b _080CBDAA + .align 2, 0 +_080CBD3C: .4byte gUnknown_083D680C +_080CBD40: .4byte sub_80CBDB0 +_080CBD44: + adds r0, r2, 0x1 + strh r0, [r4, 0x32] + movs r0, 0x2E + ldrsh r1, [r4, r0] + lsls r0, r1, 1 + adds r0, r1 + adds r1, r0, r5 + movs r2, 0 + ldrsb r2, [r1, r2] + adds r1, r5, 0x2 + adds r0, r1 + ldrb r0, [r0] + lsls r0, 24 + asrs r0, 24 + muls r0, r2 + ldrh r1, [r4, 0x30] + adds r0, r1 + movs r1, 0xFF + ands r0, r1 + strh r0, [r4, 0x30] + bl IsContest + lsls r0, 24 + cmp r0, 0 + bne _080CBD92 + ldrh r0, [r4, 0x30] + subs r0, 0x1 + lsls r0, 16 + lsrs r0, 16 + cmp r0, 0xBE + bhi _080CBD8A + adds r1, r4, 0 + adds r1, 0x43 + movs r0, 0x1F + b _080CBD90 +_080CBD8A: + adds r1, r4, 0 + adds r1, 0x43 + movs r0, 0x1D +_080CBD90: + strb r0, [r1] +_080CBD92: + movs r6, 0x30 + ldrsh r0, [r4, r6] + movs r1, 0x3C + bl Cos + strh r0, [r4, 0x24] + movs r1, 0x30 + ldrsh r0, [r4, r1] + movs r1, 0x14 + bl Sin + strh r0, [r4, 0x26] +_080CBDAA: + pop {r4-r6} + pop {r0} + bx r0 + thumb_func_end sub_80CBCF8 + + thumb_func_start sub_80CBDB0 +sub_80CBDB0: @ 80CBDB0 + push {r4,lr} + adds r4, r0, 0 + movs r1, 0x2E + ldrsh r0, [r4, r1] + cmp r0, 0x14 + ble _080CBDC2 + adds r0, r4, 0 + bl move_anim_8072740 +_080CBDC2: + movs r0, 0x2E + ldrsh r1, [r4, r0] + lsrs r0, r1, 31 + adds r0, r1, r0 + asrs r0, 1 + lsls r0, 1 + subs r1, r0 + adds r3, r4, 0 + adds r3, 0x3E + movs r0, 0x1 + ands r1, r0 + lsls r1, 2 + ldrb r2, [r3] + movs r0, 0x5 + negs r0, r0 + ands r0, r2 + orrs r0, r1 + strb r0, [r3] + ldrh r0, [r4, 0x2E] + adds r0, 0x1 + strh r0, [r4, 0x2E] + pop {r4} + pop {r0} + bx r0 + thumb_func_end sub_80CBDB0 + + thumb_func_start sub_80CBDF4 +sub_80CBDF4: @ 80CBDF4 + push {r4-r6,lr} + lsls r0, 24 + lsrs r0, 24 + adds r6, r0, 0 + lsls r0, r6, 2 + adds r0, r6 + lsls r0, 3 + ldr r1, _080CBF48 @ =gTasks + adds r5, r0, r1 + ldr r4, _080CBF4C @ =gBattleAnimEnemyMonIndex + ldrb r0, [r4] + bl sub_8079E90 + lsls r0, 24 + lsrs r0, 24 + subs r0, 0x1 + strh r0, [r5, 0x10] + ldrb r0, [r4] + movs r1, 0x2 + bl sub_8077ABC + lsls r0, 24 + lsrs r0, 24 + strh r0, [r5, 0x14] + ldrb r0, [r4] + movs r1, 0x3 + bl sub_8077ABC + lsls r0, 24 + lsrs r0, 24 + strh r0, [r5, 0x16] + ldrb r0, [r4] + movs r1, 0x1 + bl sub_807A100 + strh r0, [r5, 0x1C] + ldrb r0, [r4] + movs r1, 0 + bl sub_807A100 + strh r0, [r5, 0x1E] + ldrb r0, [r4] + bl GetBankSide + lsls r0, 24 + lsrs r0, 24 + movs r2, 0x1 + negs r2, r2 + adds r1, r2, 0 + cmp r0, 0x1 + bne _080CBE5C + movs r1, 0x1 +_080CBE5C: + strh r1, [r5, 0x12] + movs r3, 0x12 + ldrsh r0, [r5, r3] + lsls r0, 6 + movs r1, 0x38 + subs r1, r0 + strh r1, [r5, 0x1A] + ldrh r0, [r5, 0x16] + subs r0, r1 + ldrh r1, [r5, 0x14] + adds r0, r1 + strh r0, [r5, 0x18] + ldr r0, _080CBF50 @ =gSpriteTemplate_83D6884 + movs r2, 0x18 + ldrsh r1, [r5, r2] + movs r3, 0x1A + ldrsh r2, [r5, r3] + ldrb r3, [r5, 0x10] + bl CreateSprite + lsls r0, 24 + lsrs r0, 24 + strh r0, [r5, 0xC] + cmp r0, 0x40 + bne _080CBE94 + adds r0, r6, 0 + bl DestroyAnimVisualTask +_080CBE94: + ldr r4, _080CBF54 @ =gSprites + movs r0, 0xC + ldrsh r1, [r5, r0] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + adds r0, r4 + movs r1, 0xA + strh r1, [r0, 0x2E] + movs r2, 0xC + ldrsh r1, [r5, r2] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + adds r0, r4 + ldrh r1, [r5, 0x18] + strh r1, [r0, 0x30] + movs r3, 0xC + ldrsh r0, [r5, r3] + lsls r2, r0, 4 + adds r2, r0 + lsls r2, 2 + adds r2, r4 + movs r1, 0x1C + ldrsh r0, [r5, r1] + lsrs r1, r0, 31 + adds r0, r1 + asrs r0, 1 + adds r0, 0xA + movs r3, 0x12 + ldrsh r1, [r5, r3] + muls r1, r0 + ldrh r0, [r5, 0x14] + subs r0, r1 + strh r0, [r2, 0x32] + movs r0, 0xC + ldrsh r1, [r5, r0] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + adds r0, r4 + ldrh r1, [r5, 0x1A] + strh r1, [r0, 0x34] + movs r1, 0xC + ldrsh r0, [r5, r1] + lsls r1, r0, 4 + adds r1, r0 + lsls r1, 2 + adds r1, r4 + movs r2, 0x1E + ldrsh r0, [r5, r2] + lsrs r2, r0, 31 + adds r0, r2 + asrs r0, 1 + adds r0, 0xA + movs r3, 0x12 + ldrsh r2, [r5, r3] + muls r0, r2 + ldrh r2, [r5, 0x16] + adds r0, r2 + strh r0, [r1, 0x36] + movs r3, 0xC + ldrsh r1, [r5, r3] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + adds r0, r4 + bl sub_80CC338 + movs r1, 0xC + ldrsh r2, [r5, r1] + lsls r1, r2, 4 + adds r1, r2 + lsls r1, 2 + adds r1, r4 + strh r0, [r1, 0x38] + movs r2, 0xC + ldrsh r1, [r5, r2] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + adds r0, r4 + bl sub_80786EC + ldr r0, _080CBF58 @ =sub_80CBF5C + str r0, [r5] + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 +_080CBF48: .4byte gTasks +_080CBF4C: .4byte gBattleAnimEnemyMonIndex +_080CBF50: .4byte gSpriteTemplate_83D6884 +_080CBF54: .4byte gSprites +_080CBF58: .4byte sub_80CBF5C + thumb_func_end sub_80CBDF4 + + thumb_func_start sub_80CBF5C +sub_80CBF5C: @ 80CBF5C + push {r4-r6,lr} + lsls r0, 24 + lsrs r2, r0, 24 + lsls r0, r2, 2 + adds r0, r2 + lsls r0, 3 + ldr r1, _080CBFA0 @ =gTasks + adds r6, r0, r1 + movs r0, 0xC + ldrsh r1, [r6, r0] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + ldr r1, _080CBFA4 @ =gSprites + adds r4, r0, r1 + movs r1, 0x8 + ldrsh r5, [r6, r1] + cmp r5, 0x7 + bne _080CBF84 + b _080CC1B4 +_080CBF84: + cmp r5, 0x7 + bgt _080CBFD2 + cmp r5, 0x3 + bne _080CBF8E + b _080CC0A6 +_080CBF8E: + cmp r5, 0x3 + bgt _080CBFA8 + cmp r5, 0x1 + beq _080CC038 + cmp r5, 0x1 + bgt _080CC088 + cmp r5, 0 + beq _080CC01A + b _080CC330 + .align 2, 0 +_080CBFA0: .4byte gTasks +_080CBFA4: .4byte gSprites +_080CBFA8: + cmp r5, 0x5 + bne _080CBFAE + b _080CC11C +_080CBFAE: + cmp r5, 0x5 + ble _080CBFB4 + b _080CC196 +_080CBFB4: + adds r0, r6, 0 + adds r1, r2, 0 + bl sub_80CC358 + adds r0, r4, 0 + bl sub_8078718 + lsls r0, 24 + cmp r0, 0 + bne _080CBFCA + b _080CC330 +_080CBFCA: + movs r0, 0x5 + strh r0, [r6, 0x26] + movs r0, 0xFF + b _080CC32E +_080CBFD2: + cmp r5, 0xB + bne _080CBFD8 + b _080CC298 +_080CBFD8: + cmp r5, 0xB + bgt _080CC006 + cmp r5, 0x9 + bne _080CBFE2 + b _080CC206 +_080CBFE2: + cmp r5, 0x9 + ble _080CBFE8 + b _080CC27C +_080CBFE8: + adds r0, r6, 0 + adds r1, r2, 0 + bl sub_80CC358 + adds r0, r4, 0 + bl sub_8078718 + lsls r0, 24 + cmp r0, 0 + bne _080CBFFE + b _080CC330 +_080CBFFE: + movs r0, 0x9 + strh r0, [r6, 0x26] + movs r0, 0xFF + b _080CC32E +_080CC006: + cmp r5, 0xD + bne _080CC00C + b _080CC30A +_080CC00C: + cmp r5, 0xD + bge _080CC012 + b _080CC2EA +_080CC012: + cmp r5, 0xFF + bne _080CC018 + b _080CC31A +_080CC018: + b _080CC330 +_080CC01A: + adds r0, r6, 0 + adds r1, r2, 0 + bl sub_80CC358 + adds r0, r4, 0 + bl sub_8078718 + lsls r0, 24 + cmp r0, 0 + bne _080CC030 + b _080CC330 +_080CC030: + movs r0, 0x1 + strh r0, [r6, 0x26] + movs r0, 0xFF + b _080CC32E +_080CC038: + ldrh r2, [r4, 0x24] + ldrh r3, [r4, 0x20] + adds r2, r3 + movs r0, 0 + strh r2, [r4, 0x20] + ldrh r1, [r4, 0x26] + ldrh r3, [r4, 0x22] + adds r1, r3 + strh r1, [r4, 0x22] + strh r0, [r4, 0x24] + strh r0, [r4, 0x26] + movs r0, 0xA + strh r0, [r4, 0x2E] + strh r2, [r4, 0x30] + ldrh r0, [r6, 0x14] + strh r0, [r4, 0x32] + strh r1, [r4, 0x34] + ldrh r0, [r6, 0x16] + strh r0, [r4, 0x36] + adds r0, r4, 0 + bl sub_80CC338 + strh r0, [r4, 0x38] + ldrh r0, [r6, 0x10] + adds r0, 0x2 + strh r0, [r6, 0x10] + strh r5, [r6, 0xE] + adds r1, r4, 0 + adds r1, 0x43 + strb r0, [r1] + ldrb r1, [r6, 0xE] + adds r0, r4, 0 + bl StartSpriteAnim + adds r0, r4, 0 + bl sub_80786EC + ldrh r0, [r6, 0x8] + adds r0, 0x1 + b _080CC32E +_080CC088: + adds r0, r6, 0 + adds r1, r2, 0 + bl sub_80CC358 + adds r0, r4, 0 + bl sub_8078718 + lsls r0, 24 + cmp r0, 0 + bne _080CC09E + b _080CC330 +_080CC09E: + movs r0, 0x3 + strh r0, [r6, 0x26] + movs r0, 0xFF + b _080CC32E +_080CC0A6: + ldrh r1, [r4, 0x24] + ldrh r0, [r4, 0x20] + adds r1, r0 + movs r0, 0 + strh r1, [r4, 0x20] + ldrh r2, [r4, 0x26] + ldrh r3, [r4, 0x22] + adds r2, r3 + strh r2, [r4, 0x22] + strh r0, [r4, 0x24] + strh r0, [r4, 0x26] + movs r0, 0xA + strh r0, [r4, 0x2E] + strh r1, [r4, 0x30] + movs r1, 0x1C + ldrsh r0, [r6, r1] + lsrs r1, r0, 31 + adds r0, r1 + asrs r0, 1 + adds r0, 0xA + movs r3, 0x12 + ldrsh r1, [r6, r3] + muls r1, r0 + ldrh r0, [r6, 0x14] + subs r0, r1 + strh r0, [r4, 0x32] + strh r2, [r4, 0x34] + movs r1, 0x1E + ldrsh r0, [r6, r1] + lsrs r1, r0, 31 + adds r0, r1 + asrs r0, 1 + adds r0, 0xA + movs r2, 0x12 + ldrsh r1, [r6, r2] + muls r1, r0 + ldrh r0, [r6, 0x16] + subs r0, r1 + strh r0, [r4, 0x36] + adds r0, r4, 0 + bl sub_80CC338 + strh r0, [r4, 0x38] + movs r0, 0x2 + strh r0, [r6, 0xE] + ldrh r0, [r6, 0x10] + adds r1, r4, 0 + adds r1, 0x43 + strb r0, [r1] + ldrb r1, [r6, 0xE] + adds r0, r4, 0 + bl StartSpriteAnim + adds r0, r4, 0 + bl sub_80786EC + ldrh r0, [r6, 0x8] + adds r0, 0x1 + b _080CC32E +_080CC11C: + ldrh r1, [r4, 0x24] + ldrh r3, [r4, 0x20] + adds r1, r3 + movs r0, 0 + strh r1, [r4, 0x20] + ldrh r2, [r4, 0x26] + ldrh r3, [r4, 0x22] + adds r2, r3 + strh r2, [r4, 0x22] + strh r0, [r4, 0x24] + strh r0, [r4, 0x26] + movs r0, 0xA + strh r0, [r4, 0x2E] + strh r1, [r4, 0x30] + movs r1, 0x1C + ldrsh r0, [r6, r1] + lsrs r1, r0, 31 + adds r0, r1 + asrs r0, 1 + adds r0, 0xA + movs r3, 0x12 + ldrsh r1, [r6, r3] + muls r0, r1 + ldrh r1, [r6, 0x14] + adds r0, r1 + strh r0, [r4, 0x32] + strh r2, [r4, 0x34] + movs r2, 0x1E + ldrsh r0, [r6, r2] + lsrs r1, r0, 31 + adds r0, r1 + asrs r0, 1 + adds r0, 0xA + movs r3, 0x12 + ldrsh r1, [r6, r3] + muls r0, r1 + ldrh r1, [r6, 0x16] + adds r0, r1 + strh r0, [r4, 0x36] + adds r0, r4, 0 + bl sub_80CC338 + strh r0, [r4, 0x38] + ldrh r1, [r6, 0x10] + subs r1, 0x2 + strh r1, [r6, 0x10] + movs r0, 0x3 + strh r0, [r6, 0xE] + adds r0, r4, 0 + adds r0, 0x43 + strb r1, [r0] + ldrb r1, [r6, 0xE] + adds r0, r4, 0 + bl StartSpriteAnim + adds r0, r4, 0 + bl sub_80786EC + ldrh r0, [r6, 0x8] + adds r0, 0x1 + b _080CC32E +_080CC196: + adds r0, r6, 0 + adds r1, r2, 0 + bl sub_80CC358 + adds r0, r4, 0 + bl sub_8078718 + lsls r0, 24 + cmp r0, 0 + bne _080CC1AC + b _080CC330 +_080CC1AC: + movs r0, 0x7 + strh r0, [r6, 0x26] + movs r0, 0xFF + b _080CC32E +_080CC1B4: + ldrh r2, [r4, 0x24] + ldrh r3, [r4, 0x20] + adds r2, r3 + movs r0, 0 + strh r2, [r4, 0x20] + ldrh r1, [r4, 0x26] + ldrh r3, [r4, 0x22] + adds r1, r3 + strh r1, [r4, 0x22] + strh r0, [r4, 0x24] + strh r0, [r4, 0x26] + movs r0, 0xA + strh r0, [r4, 0x2E] + strh r2, [r4, 0x30] + ldrh r0, [r6, 0x14] + strh r0, [r4, 0x32] + strh r1, [r4, 0x34] + ldrh r0, [r6, 0x16] + strh r0, [r4, 0x36] + adds r0, r4, 0 + bl sub_80CC338 + strh r0, [r4, 0x38] + ldrh r1, [r6, 0x10] + adds r1, 0x2 + strh r1, [r6, 0x10] + movs r0, 0x4 + strh r0, [r6, 0xE] + adds r0, r4, 0 + adds r0, 0x43 + strb r1, [r0] + ldrb r1, [r6, 0xE] + adds r0, r4, 0 + bl StartSpriteAnim + adds r0, r4, 0 + bl sub_80786EC + ldrh r0, [r6, 0x8] + adds r0, 0x1 + b _080CC32E +_080CC206: + ldrh r1, [r4, 0x24] + ldrh r0, [r4, 0x20] + adds r1, r0 + movs r0, 0 + strh r1, [r4, 0x20] + ldrh r2, [r4, 0x26] + ldrh r3, [r4, 0x22] + adds r2, r3 + strh r2, [r4, 0x22] + strh r0, [r4, 0x24] + strh r0, [r4, 0x26] + movs r0, 0xA + strh r0, [r4, 0x2E] + strh r1, [r4, 0x30] + movs r1, 0x1C + ldrsh r0, [r6, r1] + lsrs r1, r0, 31 + adds r0, r1 + asrs r0, 1 + adds r0, 0xA + movs r3, 0x12 + ldrsh r1, [r6, r3] + muls r1, r0 + ldrh r0, [r6, 0x14] + subs r0, r1 + strh r0, [r4, 0x32] + strh r2, [r4, 0x34] + movs r1, 0x1E + ldrsh r0, [r6, r1] + lsrs r1, r0, 31 + adds r0, r1 + asrs r0, 1 + adds r0, 0xA + movs r2, 0x12 + ldrsh r1, [r6, r2] + muls r0, r1 + ldrh r3, [r6, 0x16] + adds r0, r3 + strh r0, [r4, 0x36] + adds r0, r4, 0 + bl sub_80CC338 + strh r0, [r4, 0x38] + movs r0, 0x5 + strh r0, [r6, 0xE] + ldrh r0, [r6, 0x10] + adds r1, r4, 0 + adds r1, 0x43 + strb r0, [r1] + ldrb r1, [r6, 0xE] + adds r0, r4, 0 + bl StartSpriteAnim + adds r0, r4, 0 + bl sub_80786EC + ldrh r0, [r6, 0x8] + adds r0, 0x1 + b _080CC32E +_080CC27C: + adds r0, r6, 0 + adds r1, r2, 0 + bl sub_80CC358 + adds r0, r4, 0 + bl sub_8078718 + lsls r0, 24 + cmp r0, 0 + beq _080CC330 + movs r0, 0xB + strh r0, [r6, 0x26] + movs r0, 0xFF + b _080CC32E +_080CC298: + ldrh r2, [r4, 0x24] + ldrh r0, [r4, 0x20] + adds r2, r0 + movs r0, 0 + strh r2, [r4, 0x20] + ldrh r1, [r4, 0x26] + ldrh r3, [r4, 0x22] + adds r1, r3 + strh r1, [r4, 0x22] + strh r0, [r4, 0x24] + strh r0, [r4, 0x26] + movs r0, 0xA + strh r0, [r4, 0x2E] + strh r2, [r4, 0x30] + ldrh r0, [r6, 0x18] + strh r0, [r4, 0x32] + strh r1, [r4, 0x34] + ldrh r0, [r6, 0x1A] + strh r0, [r4, 0x36] + adds r0, r4, 0 + bl sub_80CC338 + strh r0, [r4, 0x38] + ldrh r1, [r6, 0x10] + subs r1, 0x2 + strh r1, [r6, 0x10] + movs r0, 0x6 + strh r0, [r6, 0xE] + adds r0, r4, 0 + adds r0, 0x43 + strb r1, [r0] + ldrb r1, [r6, 0xE] + adds r0, r4, 0 + bl StartSpriteAnim + adds r0, r4, 0 + bl sub_80786EC + ldrh r0, [r6, 0x8] + adds r0, 0x1 + b _080CC32E +_080CC2EA: + adds r0, r6, 0 + adds r1, r2, 0 + bl sub_80CC358 + adds r0, r4, 0 + bl sub_8078718 + lsls r0, 24 + cmp r0, 0 + beq _080CC330 + adds r0, r4, 0 + bl DestroySprite + ldrh r0, [r6, 0x8] + adds r0, 0x1 + b _080CC32E +_080CC30A: + movs r1, 0x20 + ldrsh r0, [r6, r1] + cmp r0, 0 + bne _080CC330 + adds r0, r2, 0 + bl DestroyAnimVisualTask + b _080CC330 +_080CC31A: + ldrh r0, [r6, 0xA] + adds r0, 0x1 + strh r0, [r6, 0xA] + lsls r0, 16 + asrs r0, 16 + cmp r0, 0x5 + ble _080CC330 + movs r0, 0 + strh r0, [r6, 0xA] + ldrh r0, [r6, 0x26] +_080CC32E: + strh r0, [r6, 0x8] +_080CC330: + pop {r4-r6} + pop {r0} + bx r0 + thumb_func_end sub_80CBF5C + + thumb_func_start sub_80CC338 +sub_80CC338: @ 80CC338 + push {lr} + movs r2, 0x8 + movs r3, 0x36 + ldrsh r1, [r0, r3] + movs r3, 0x22 + ldrsh r0, [r0, r3] + cmp r1, r0 + bge _080CC34E + negs r0, r2 + lsls r0, 16 + lsrs r2, r0, 16 +_080CC34E: + lsls r0, r2, 16 + asrs r0, 16 + pop {r1} + bx r1 + thumb_func_end sub_80CC338 + + thumb_func_start sub_80CC358 +sub_80CC358: @ 80CC358 + push {r4-r7,lr} + mov r7, r8 + push {r7} + adds r6, r0, 0 + lsls r1, 24 + lsrs r7, r1, 24 + ldrh r0, [r6, 0x24] + adds r0, 0x1 + strh r0, [r6, 0x24] + lsls r0, 16 + cmp r0, 0 + ble _080CC3EE + movs r0, 0 + strh r0, [r6, 0x24] + ldr r0, _080CC3F8 @ =gSprites + mov r8, r0 + movs r2, 0xC + ldrsh r1, [r6, r2] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + add r0, r8 + ldrh r1, [r0, 0x24] + ldrh r2, [r0, 0x20] + adds r1, r2 + ldrh r2, [r0, 0x26] + ldrh r0, [r0, 0x22] + adds r2, r0 + ldr r0, _080CC3FC @ =gSpriteTemplate_83D6884 + lsls r1, 16 + asrs r1, 16 + lsls r2, 16 + asrs r2, 16 + ldrb r3, [r6, 0x10] + bl CreateSprite + lsls r0, 24 + lsrs r0, 24 + cmp r0, 0x40 + beq _080CC3EE + lsls r5, r0, 4 + adds r5, r0 + lsls r5, 2 + mov r0, r8 + adds r4, r5, r0 + strh r7, [r4, 0x3A] + movs r0, 0xC + strh r0, [r4, 0x3C] + ldr r0, _080CC400 @ =gTasks + lsls r1, r7, 2 + adds r1, r7 + lsls r1, 3 + adds r1, r0 + ldrh r0, [r1, 0x20] + adds r0, 0x1 + strh r0, [r1, 0x20] + ldrh r2, [r6, 0x22] + movs r0, 0x1 + ands r0, r2 + strh r0, [r4, 0x2E] + ldrh r0, [r1, 0x22] + adds r0, 0x1 + strh r0, [r1, 0x22] + ldrb r1, [r6, 0xE] + adds r0, r4, 0 + bl StartSpriteAnim + ldrh r0, [r6, 0x10] + adds r4, 0x43 + strb r0, [r4] + mov r0, r8 + adds r0, 0x1C + adds r5, r0 + ldr r0, _080CC404 @ =sub_80CC408 + str r0, [r5] +_080CC3EE: + pop {r3} + mov r8, r3 + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 +_080CC3F8: .4byte gSprites +_080CC3FC: .4byte gSpriteTemplate_83D6884 +_080CC400: .4byte gTasks +_080CC404: .4byte sub_80CC408 + thumb_func_end sub_80CC358 + + thumb_func_start sub_80CC408 +sub_80CC408: @ 80CC408 + push {r4,lr} + adds r4, r0, 0 + ldrh r0, [r4, 0x2E] + adds r0, 0x1 + strh r0, [r4, 0x2E] + lsls r0, 16 + asrs r0, 16 + cmp r0, 0x1 + ble _080CC46A + movs r0, 0 + strh r0, [r4, 0x2E] + adds r3, r4, 0 + adds r3, 0x3E + ldrb r2, [r3] + lsls r0, r2, 29 + lsrs r0, 31 + movs r1, 0x1 + eors r1, r0 + lsls r1, 2 + movs r0, 0x5 + negs r0, r0 + ands r0, r2 + orrs r0, r1 + strb r0, [r3] + ldrh r0, [r4, 0x30] + adds r0, 0x1 + strh r0, [r4, 0x30] + lsls r0, 16 + asrs r0, 16 + cmp r0, 0x8 + ble _080CC46A + ldr r3, _080CC470 @ =gTasks + movs r0, 0x3C + ldrsh r1, [r4, r0] + lsls r1, 1 + movs r0, 0x3A + ldrsh r2, [r4, r0] + lsls r0, r2, 2 + adds r0, r2 + lsls r0, 3 + adds r1, r0 + adds r3, 0x8 + adds r1, r3 + ldrh r0, [r1] + subs r0, 0x1 + strh r0, [r1] + adds r0, r4, 0 + bl DestroySprite +_080CC46A: + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_080CC470: .4byte gTasks + thumb_func_end sub_80CC408 + + thumb_func_start sub_80CC474 +sub_80CC474: @ 80CC474 + push {r4-r7,lr} + adds r4, r0, 0 + ldr r0, _080CC488 @ =gBattleAnimArgs + movs r1, 0xC + ldrsh r0, [r0, r1] + cmp r0, 0 + bne _080CC490 + ldr r0, _080CC48C @ =gBattleAnimPlayerMonIndex + b _080CC492 + .align 2, 0 +_080CC488: .4byte gBattleAnimArgs +_080CC48C: .4byte gBattleAnimPlayerMonIndex +_080CC490: + ldr r0, _080CC4B0 @ =gBattleAnimEnemyMonIndex +_080CC492: + ldrb r6, [r0] + adds r0, r6, 0 + bl GetBankSide + lsls r0, 24 + cmp r0, 0 + beq _080CC4BC + movs r0, 0 + strh r0, [r4, 0x36] + ldr r1, _080CC4B4 @ =gBattleAnimArgs + ldrh r0, [r1, 0x6] + strh r0, [r4, 0x32] + ldr r0, _080CC4B8 @ =0x0000fff0 + b _080CC4CC + .align 2, 0 +_080CC4B0: .4byte gBattleAnimEnemyMonIndex +_080CC4B4: .4byte gBattleAnimArgs +_080CC4B8: .4byte 0x0000fff0 +_080CC4BC: + movs r0, 0x1 + strh r0, [r4, 0x36] + ldr r1, _080CC4F0 @ =gBattleAnimArgs + ldrh r0, [r1, 0x6] + negs r0, r0 + strh r0, [r4, 0x32] + movs r0, 0x80 + lsls r0, 1 +_080CC4CC: + strh r0, [r4, 0x20] + adds r7, r1, 0 + adds r5, r7, 0 + ldrh r0, [r5, 0x2] + strh r0, [r4, 0x30] + ldrh r0, [r5, 0x4] + strh r0, [r4, 0x2E] + ldrh r0, [r5, 0x8] + strh r0, [r4, 0x34] + movs r1, 0xA + ldrsh r0, [r5, r1] + cmp r0, 0x1 + beq _080CC502 + cmp r0, 0x1 + bgt _080CC4F4 + cmp r0, 0 + beq _080CC4FE + b _080CC56C + .align 2, 0 +_080CC4F0: .4byte gBattleAnimArgs +_080CC4F4: + cmp r0, 0x2 + beq _080CC508 + cmp r0, 0x3 + beq _080CC534 + b _080CC56C +_080CC4FE: + ldrh r0, [r5] + b _080CC518 +_080CC502: + ldrh r0, [r5] + strh r0, [r4, 0x22] + b _080CC54E +_080CC508: + adds r0, r6, 0 + movs r1, 0x3 + bl sub_8077ABC + lsls r0, 24 + lsrs r0, 24 + ldrh r5, [r5] + adds r0, r5 +_080CC518: + strh r0, [r4, 0x22] + adds r0, r6, 0 + bl sub_8079ED4 + movs r1, 0x3 + ands r1, r0 + lsls r1, 2 + ldrb r2, [r4, 0x5] + movs r0, 0xD + negs r0, r0 + ands r0, r2 + orrs r0, r1 + strb r0, [r4, 0x5] + b _080CC56C +_080CC534: + ldr r0, _080CC578 @ =gBattleAnimEnemyMonIndex + ldrb r0, [r0] + movs r1, 0x3 + bl sub_8077ABC + lsls r0, 24 + lsrs r0, 24 + ldrh r7, [r7] + adds r0, r7 + strh r0, [r4, 0x22] + movs r0, 0x1 + bl obj_id_for_side_relative_to_move +_080CC54E: + adds r0, r6, 0 + bl sub_8079ED4 + lsls r0, 24 + lsrs r0, 24 + adds r0, 0x1 + movs r1, 0x3 + ands r0, r1 + lsls r0, 2 + ldrb r2, [r4, 0x5] + movs r1, 0xD + negs r1, r1 + ands r1, r2 + orrs r1, r0 + strb r1, [r4, 0x5] +_080CC56C: + ldr r0, _080CC57C @ =sub_80CC580 + str r0, [r4, 0x1C] + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 +_080CC578: .4byte gBattleAnimEnemyMonIndex +_080CC57C: .4byte sub_80CC580 + thumb_func_end sub_80CC474 + + thumb_func_start sub_80CC580 +sub_80CC580: @ 80CC580 + push {r4,r5,lr} + adds r4, r0, 0 + movs r0, 0x3C + ldrsh r3, [r4, r0] + ldrh r0, [r4, 0x3C] + adds r0, 0x1 + strh r0, [r4, 0x3C] + movs r1, 0x30 + ldrsh r2, [r4, r1] + ldr r1, _080CC5D4 @ =gSineTable + movs r5, 0x2E + ldrsh r0, [r4, r5] + lsls r0, 1 + adds r0, r1 + movs r1, 0 + ldrsh r0, [r0, r1] + muls r0, r2 + asrs r0, 8 + strh r0, [r4, 0x26] + movs r2, 0x32 + ldrsh r0, [r4, r2] + muls r0, r3 + strh r0, [r4, 0x24] + movs r5, 0x34 + ldrsh r0, [r4, r5] + muls r0, r3 + movs r1, 0xFF + ands r0, r1 + strh r0, [r4, 0x2E] + movs r1, 0x36 + ldrsh r0, [r4, r1] + cmp r0, 0 + bne _080CC5D8 + movs r2, 0x24 + ldrsh r0, [r4, r2] + movs r5, 0x20 + ldrsh r1, [r4, r5] + adds r0, r1 + cmp r0, 0xF7 + ble _080CC5F0 + b _080CC5EA + .align 2, 0 +_080CC5D4: .4byte gSineTable +_080CC5D8: + movs r1, 0x24 + ldrsh r0, [r4, r1] + movs r2, 0x20 + ldrsh r1, [r4, r2] + adds r0, r1 + movs r1, 0x10 + negs r1, r1 + cmp r0, r1 + bgt _080CC5F0 +_080CC5EA: + adds r0, r4, 0 + bl move_anim_8074EE0 +_080CC5F0: + pop {r4,r5} + pop {r0} + bx r0 + thumb_func_end sub_80CC580 + + thumb_func_start sub_80CC5F8 +sub_80CC5F8: @ 80CC5F8 + push {r4-r7,lr} + lsls r0, 24 + lsrs r6, r0, 24 + lsls r0, r6, 2 + adds r0, r6 + lsls r0, 3 + ldr r1, _080CC618 @ =gTasks + adds r5, r0, r1 + movs r1, 0x8 + ldrsh r0, [r5, r1] + cmp r0, 0 + beq _080CC61C + cmp r0, 0x1 + beq _080CC650 + b _080CC6AA + .align 2, 0 +_080CC618: .4byte gTasks +_080CC61C: + ldr r0, _080CC648 @ =0x0000274f + bl IndexOfSpritePaletteTag + lsls r0, 24 + lsrs r0, 20 + movs r2, 0x80 + lsls r2, 1 + adds r4, r2, 0 + adds r0, r4 + strh r0, [r5, 0x18] + ldr r0, _080CC64C @ =0x000027b0 + bl IndexOfSpritePaletteTag + lsls r0, 24 + lsrs r0, 20 + adds r0, r4 + strh r0, [r5, 0x20] + ldrh r0, [r5, 0x8] + adds r0, 0x1 + strh r0, [r5, 0x8] + b _080CC6AA + .align 2, 0 +_080CC648: .4byte 0x0000274f +_080CC64C: .4byte 0x000027b0 +_080CC650: + ldrh r0, [r5, 0x1A] + adds r0, 0x1 + movs r7, 0 + strh r0, [r5, 0x1A] + lsls r0, 16 + cmp r0, 0 + blt _080CC6AA + strh r7, [r5, 0x1A] + ldrh r0, [r5, 0x18] + ldrb r2, [r5, 0x1C] + ldr r4, _080CC6C4 @ =gUnknown_083D6984 + movs r3, 0x1E + ldrsh r1, [r5, r3] + lsls r1, 1 + adds r1, r4 + ldrh r3, [r1] + movs r1, 0x10 + bl BlendPalette + ldrh r0, [r5, 0x20] + ldrb r2, [r5, 0x1C] + movs r3, 0x1E + ldrsh r1, [r5, r3] + lsls r1, 1 + adds r1, r4 + ldrh r3, [r1] + movs r1, 0x10 + bl BlendPalette + ldrh r0, [r5, 0x1C] + adds r0, 0x1 + strh r0, [r5, 0x1C] + lsls r0, 16 + asrs r0, 16 + cmp r0, 0x11 + bne _080CC6AA + strh r7, [r5, 0x1C] + ldrh r0, [r5, 0x1E] + adds r0, 0x1 + strh r0, [r5, 0x1E] + lsls r0, 16 + asrs r0, 16 + cmp r0, 0x7 + bne _080CC6AA + strh r7, [r5, 0x1E] +_080CC6AA: + ldr r0, _080CC6C8 @ =gBattleAnimArgs + movs r2, 0xE + ldrsh r1, [r0, r2] + movs r0, 0x1 + negs r0, r0 + cmp r1, r0 + bne _080CC6BE + adds r0, r6, 0 + bl DestroyAnimVisualTask +_080CC6BE: + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 +_080CC6C4: .4byte gUnknown_083D6984 +_080CC6C8: .4byte gBattleAnimArgs + thumb_func_end sub_80CC5F8 + + thumb_func_start sub_80CC6CC +sub_80CC6CC: @ 80CC6CC + push {r4-r7,lr} + sub sp, 0x4 + adds r6, r0, 0 + ldr r1, _080CC6E4 @ =gBattleAnimArgs + movs r2, 0x8 + ldrsh r0, [r1, r2] + cmp r0, 0 + bne _080CC6E8 + adds r0, r6, 0 + bl move_anim_8072740 + b _080CC7C2 + .align 2, 0 +_080CC6E4: .4byte gBattleAnimArgs +_080CC6E8: + movs r3, 0 + ldrsh r0, [r1, r3] + cmp r0, 0 + bne _080CC6F8 + ldr r4, _080CC6F4 @ =gBattleAnimPlayerMonIndex + b _080CC6FA + .align 2, 0 +_080CC6F4: .4byte gBattleAnimPlayerMonIndex +_080CC6F8: + ldr r4, _080CC734 @ =gBattleAnimEnemyMonIndex +_080CC6FA: + ldrb r0, [r4] + movs r1, 0x2 + bl sub_8077ABC + lsls r0, 24 + lsrs r5, r0, 24 + ldrb r0, [r4] + movs r1, 0x3 + bl sub_8077ABC + lsls r0, 24 + lsrs r2, r0, 24 + ldr r0, _080CC738 @ =gBattleAnimArgs + ldrh r1, [r0, 0x8] + strh r1, [r6, 0x2E] + movs r3, 0x2 + ldrsh r1, [r0, r3] + adds r7, r0, 0 + cmp r1, 0 + bne _080CC73C + ldrh r0, [r7, 0x4] + adds r0, r5 + strh r0, [r6, 0x20] + ldrh r0, [r7, 0x6] + adds r0, r2 + strh r0, [r6, 0x22] + strh r5, [r6, 0x38] + strh r2, [r6, 0x3A] + b _080CC74C + .align 2, 0 +_080CC734: .4byte gBattleAnimEnemyMonIndex +_080CC738: .4byte gBattleAnimArgs +_080CC73C: + strh r5, [r6, 0x20] + strh r2, [r6, 0x22] + ldrh r0, [r7, 0x4] + adds r0, r5 + strh r0, [r6, 0x38] + ldrh r0, [r7, 0x6] + adds r0, r2 + strh r0, [r6, 0x3A] +_080CC74C: + ldrh r4, [r6, 0x20] + lsls r0, r4, 4 + strh r0, [r6, 0x30] + ldrh r5, [r6, 0x22] + lsls r0, r5, 4 + strh r0, [r6, 0x32] + movs r1, 0x38 + ldrsh r0, [r6, r1] + movs r2, 0x20 + ldrsh r1, [r6, r2] + subs r0, r1 + lsls r0, 4 + movs r3, 0x8 + ldrsh r1, [r7, r3] + bl __divsi3 + strh r0, [r6, 0x34] + movs r1, 0x3A + ldrsh r0, [r6, r1] + movs r2, 0x22 + ldrsh r1, [r6, r2] + subs r0, r1 + lsls r0, 4 + movs r3, 0x8 + ldrsh r1, [r7, r3] + bl __divsi3 + strh r0, [r6, 0x36] + ldrh r0, [r6, 0x38] + subs r0, r4 + lsls r0, 16 + asrs r0, 16 + ldrh r1, [r6, 0x3A] + subs r1, r5 + lsls r1, 16 + asrs r1, 16 + bl sub_80790F0 + lsls r0, 16 + lsrs r4, r0, 16 + bl IsContest + lsls r0, 24 + cmp r0, 0 + beq _080CC7AE + ldr r1, _080CC7CC @ =0xffff8000 + adds r0, r4, r1 + lsls r0, 16 + lsrs r4, r0, 16 +_080CC7AE: + movs r3, 0x80 + lsls r3, 1 + str r4, [sp] + adds r0, r6, 0 + movs r1, 0 + adds r2, r3, 0 + bl sub_8078FDC + ldr r0, _080CC7D0 @ =sub_80CC7D4 + str r0, [r6, 0x1C] +_080CC7C2: + add sp, 0x4 + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 +_080CC7CC: .4byte 0xffff8000 +_080CC7D0: .4byte sub_80CC7D4 + thumb_func_end sub_80CC6CC + + thumb_func_start sub_80CC7D4 +sub_80CC7D4: @ 80CC7D4 + push {r4,lr} + adds r2, r0, 0 + ldrh r3, [r2, 0x2E] + movs r1, 0x2E + ldrsh r0, [r2, r1] + cmp r0, 0 + beq _080CC804 + ldrh r0, [r2, 0x34] + ldrh r4, [r2, 0x30] + adds r0, r4 + strh r0, [r2, 0x30] + ldrh r1, [r2, 0x36] + ldrh r4, [r2, 0x32] + adds r1, r4 + strh r1, [r2, 0x32] + lsls r0, 16 + asrs r0, 20 + strh r0, [r2, 0x20] + lsls r1, 16 + asrs r1, 20 + strh r1, [r2, 0x22] + subs r0, r3, 0x1 + strh r0, [r2, 0x2E] + b _080CC80A +_080CC804: + adds r0, r2, 0 + bl move_anim_8074EE0 +_080CC80A: + pop {r4} + pop {r0} + bx r0 + thumb_func_end sub_80CC7D4 + + thumb_func_start sub_80CC810 +sub_80CC810: @ 80CC810 + push {lr} + adds r2, r0, 0 + adds r0, 0x3F + ldrb r1, [r0] + movs r0, 0x10 + ands r0, r1 + cmp r0, 0 + beq _080CC826 + adds r0, r2, 0 + bl move_anim_8072740 +_080CC826: + pop {r0} + bx r0 + thumb_func_end sub_80CC810 + + thumb_func_start sub_80CC82C +sub_80CC82C: @ 80CC82C + push {r4,lr} + adds r4, r0, 0 + ldr r0, _080CC84C @ =gBattleAnimPlayerMonIndex + ldrb r0, [r0] + bl GetBankSide + lsls r0, 24 + cmp r0, 0 + beq _080CC854 + ldr r2, _080CC850 @ =gBattleAnimArgs + ldrh r0, [r4, 0x20] + ldrh r1, [r2] + subs r0, r1 + strh r0, [r4, 0x20] + ldrh r0, [r2, 0x2] + b _080CC860 + .align 2, 0 +_080CC84C: .4byte gBattleAnimPlayerMonIndex +_080CC850: .4byte gBattleAnimArgs +_080CC854: + ldr r0, _080CC878 @ =gBattleAnimArgs + ldrh r1, [r0] + ldrh r2, [r4, 0x20] + adds r1, r2 + strh r1, [r4, 0x20] + ldrh r0, [r0, 0x2] +_080CC860: + ldrh r1, [r4, 0x22] + adds r0, r1 + strh r0, [r4, 0x22] + ldr r0, _080CC87C @ =sub_8078600 + str r0, [r4, 0x1C] + ldr r1, _080CC880 @ =move_anim_8072740 + adds r0, r4, 0 + bl oamt_set_x3A_32 + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_080CC878: .4byte gBattleAnimArgs +_080CC87C: .4byte sub_8078600 +_080CC880: .4byte move_anim_8072740 + thumb_func_end sub_80CC82C + + thumb_func_start sub_80CC884 +sub_80CC884: @ 80CC884 + push {r4,r5,lr} + adds r5, r0, 0 + ldr r0, _080CC8BC @ =gBattleAnimPlayerMonIndex + ldrb r0, [r0] + bl GetBankSide + lsls r0, 24 + cmp r0, 0 + bne _080CC89E + adds r0, r5, 0 + movs r1, 0x1 + bl StartSpriteAnim +_080CC89E: + ldr r0, _080CC8C0 @ =sub_80CC810 + str r0, [r5, 0x1C] + ldr r4, _080CC8C4 @ =gBattleAnimArgs + movs r0, 0 + ldrsh r1, [r4, r0] + adds r0, r5, 0 + bl sub_807867C + ldrh r0, [r4, 0x2] + ldrh r1, [r5, 0x22] + adds r0, r1 + strh r0, [r5, 0x22] + pop {r4,r5} + pop {r0} + bx r0 + .align 2, 0 +_080CC8BC: .4byte gBattleAnimPlayerMonIndex +_080CC8C0: .4byte sub_80CC810 +_080CC8C4: .4byte gBattleAnimArgs + thumb_func_end sub_80CC884 + + thumb_func_start sub_80CC8C8 +sub_80CC8C8: @ 80CC8C8 + push {r4,lr} + adds r4, r0, 0 + ldr r1, _080CC908 @ =gBattleAnimArgs + ldrh r0, [r1] + ldrh r2, [r4, 0x20] + adds r0, r2 + strh r0, [r4, 0x20] + ldrh r0, [r1, 0x2] + ldrh r2, [r4, 0x22] + adds r0, r2 + strh r0, [r4, 0x22] + ldrh r0, [r1, 0x4] + strh r0, [r4, 0x2E] + ldrh r0, [r1, 0x6] + strh r0, [r4, 0x30] + ldrh r0, [r1, 0x8] + strh r0, [r4, 0x34] + ldrh r0, [r1, 0xA] + strh r0, [r4, 0x38] + ldrb r1, [r1, 0xC] + adds r0, r4, 0 + bl StartSpriteAffineAnim + ldr r1, _080CC90C @ =move_anim_8074EE0 + adds r0, r4, 0 + bl oamt_set_x3A_32 + ldr r0, _080CC910 @ =sub_8078504 + str r0, [r4, 0x1C] + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_080CC908: .4byte gBattleAnimArgs +_080CC90C: .4byte move_anim_8074EE0 +_080CC910: .4byte sub_8078504 + thumb_func_end sub_80CC8C8 + + thumb_func_start sub_80CC914 +sub_80CC914: @ 80CC914 + push {r4,r5,lr} + adds r5, r0, 0 + ldr r4, _080CC964 @ =gBattleAnimEnemyMonIndex + ldrb r0, [r4] + movs r1, 0 + bl sub_8077ABC + lsls r0, 24 + lsrs r0, 24 + strh r0, [r5, 0x20] + ldrb r0, [r4] + movs r1, 0x1 + bl sub_8077ABC + lsls r0, 24 + lsrs r0, 24 + strh r0, [r5, 0x22] + ldrb r0, [r4] + bl GetBankSide + lsls r0, 24 + cmp r0, 0 + bne _080CC948 + ldrh r0, [r5, 0x22] + adds r0, 0x8 + strh r0, [r5, 0x22] +_080CC948: + ldr r0, _080CC968 @ =sub_80CCB00 + str r0, [r5, 0x1C] + ldr r0, _080CC96C @ =gBattleAnimArgs + movs r2, 0x4 + ldrsh r1, [r0, r2] + adds r3, r0, 0 + cmp r1, 0 + bne _080CC970 + ldrh r0, [r3] + ldrh r1, [r5, 0x20] + adds r0, r1 + strh r0, [r5, 0x20] + b _080CC984 + .align 2, 0 +_080CC964: .4byte gBattleAnimEnemyMonIndex +_080CC968: .4byte sub_80CCB00 +_080CC96C: .4byte gBattleAnimArgs +_080CC970: + ldrh r0, [r5, 0x20] + ldrh r1, [r3] + subs r0, r1 + strh r0, [r5, 0x20] + adds r2, r5, 0 + adds r2, 0x3F + ldrb r0, [r2] + movs r1, 0x1 + orrs r0, r1 + strb r0, [r2] +_080CC984: + ldrh r0, [r3, 0x2] + ldrh r2, [r5, 0x22] + adds r0, r2 + strh r0, [r5, 0x22] + ldr r1, _080CC9B8 @ =0xfffffc00 + adds r0, r1, 0 + ldrh r2, [r5, 0x30] + adds r1, r0, r2 + strh r1, [r5, 0x30] + movs r2, 0x80 + lsls r2, 3 + adds r0, r2, 0 + ldrh r2, [r5, 0x32] + adds r0, r2 + strh r0, [r5, 0x32] + ldrh r0, [r3, 0x4] + strh r0, [r5, 0x38] + lsls r0, 16 + asrs r0, 16 + cmp r0, 0x1 + bne _080CC9B2 + negs r0, r1 + strh r0, [r5, 0x30] +_080CC9B2: + pop {r4,r5} + pop {r0} + bx r0 + .align 2, 0 +_080CC9B8: .4byte 0xfffffc00 + thumb_func_end sub_80CC914 + + thumb_func_start sub_80CC9BC +sub_80CC9BC: @ 80CC9BC + push {r4-r7,lr} + mov r7, r8 + push {r7} + adds r6, r0, 0 + ldr r0, _080CC9D8 @ =gBattleAnimArgs + movs r1, 0x6 + ldrsh r0, [r0, r1] + cmp r0, 0x1 + beq _080CC9DC + cmp r0, 0x1 + ble _080CCA58 + cmp r0, 0x2 + beq _080CC9FC + b _080CCA58 + .align 2, 0 +_080CC9D8: .4byte gBattleAnimArgs +_080CC9DC: + ldr r5, _080CC9F8 @ =gBattleAnimEnemyMonIndex + ldrb r0, [r5] + movs r4, 0x2 + eors r0, r4 + movs r1, 0 + bl sub_8077ABC + lsls r0, 24 + lsrs r7, r0, 24 + ldrb r0, [r5] + eors r4, r0 + adds r0, r4, 0 + b _080CCA68 + .align 2, 0 +_080CC9F8: .4byte gBattleAnimEnemyMonIndex +_080CC9FC: + ldr r5, _080CCA54 @ =gBattleAnimEnemyMonIndex + ldrb r0, [r5] + movs r1, 0 + bl sub_8077ABC + lsls r0, 24 + lsrs r7, r0, 24 + ldrb r0, [r5] + movs r1, 0x1 + bl sub_8077ABC + lsls r0, 24 + lsrs r4, r0, 24 + ldrb r0, [r5] + movs r2, 0x2 + mov r8, r2 + mov r1, r8 + eors r0, r1 + bl b_side_obj__get_some_boolean + lsls r0, 24 + cmp r0, 0 + beq _080CCA72 + ldrb r0, [r5] + mov r2, r8 + eors r0, r2 + movs r1, 0 + bl sub_8077ABC + lsls r0, 24 + lsrs r0, 24 + adds r0, r7 + lsrs r7, r0, 1 + ldrb r0, [r5] + mov r1, r8 + eors r0, r1 + movs r1, 0x1 + bl sub_8077ABC + lsls r0, 24 + lsrs r0, 24 + adds r0, r4 + lsrs r4, r0, 1 + b _080CCA72 + .align 2, 0 +_080CCA54: .4byte gBattleAnimEnemyMonIndex +_080CCA58: + ldr r4, _080CCAA4 @ =gBattleAnimEnemyMonIndex + ldrb r0, [r4] + movs r1, 0 + bl sub_8077ABC + lsls r0, 24 + lsrs r7, r0, 24 + ldrb r0, [r4] +_080CCA68: + movs r1, 0x1 + bl sub_8077ABC + lsls r0, 24 + lsrs r4, r0, 24 +_080CCA72: + strh r7, [r6, 0x20] + strh r4, [r6, 0x22] + ldr r0, _080CCAA4 @ =gBattleAnimEnemyMonIndex + ldrb r0, [r0] + bl GetBankSide + lsls r0, 24 + cmp r0, 0 + bne _080CCA8A + ldrh r0, [r6, 0x22] + adds r0, 0x8 + strh r0, [r6, 0x22] +_080CCA8A: + ldr r0, _080CCAA8 @ =sub_80CCB00 + str r0, [r6, 0x1C] + ldr r0, _080CCAAC @ =gBattleAnimArgs + movs r2, 0x4 + ldrsh r1, [r0, r2] + adds r3, r0, 0 + cmp r1, 0 + bne _080CCAB0 + ldrh r0, [r3] + ldrh r1, [r6, 0x20] + adds r0, r1 + strh r0, [r6, 0x20] + b _080CCAC4 + .align 2, 0 +_080CCAA4: .4byte gBattleAnimEnemyMonIndex +_080CCAA8: .4byte sub_80CCB00 +_080CCAAC: .4byte gBattleAnimArgs +_080CCAB0: + ldrh r0, [r6, 0x20] + ldrh r1, [r3] + subs r0, r1 + strh r0, [r6, 0x20] + adds r2, r6, 0 + adds r2, 0x3F + ldrb r0, [r2] + movs r1, 0x1 + orrs r0, r1 + strb r0, [r2] +_080CCAC4: + ldrh r0, [r3, 0x2] + ldrh r2, [r6, 0x22] + adds r0, r2 + strh r0, [r6, 0x22] + ldr r1, _080CCAFC @ =0xfffffc00 + adds r0, r1, 0 + ldrh r2, [r6, 0x30] + adds r1, r0, r2 + strh r1, [r6, 0x30] + movs r2, 0x80 + lsls r2, 3 + adds r0, r2, 0 + ldrh r2, [r6, 0x32] + adds r0, r2 + strh r0, [r6, 0x32] + ldrh r0, [r3, 0x4] + strh r0, [r6, 0x38] + lsls r0, 16 + asrs r0, 16 + cmp r0, 0x1 + bne _080CCAF2 + negs r0, r1 + strh r0, [r6, 0x30] +_080CCAF2: + pop {r3} + mov r8, r3 + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 +_080CCAFC: .4byte 0xfffffc00 + thumb_func_end sub_80CC9BC + + thumb_func_start sub_80CCB00 +sub_80CCB00: @ 80CCB00 + push {r4,lr} + adds r4, r0, 0 + ldrh r1, [r4, 0x30] + ldrh r2, [r4, 0x34] + adds r0, r1, r2 + strh r0, [r4, 0x34] + ldrh r0, [r4, 0x32] + ldrh r2, [r4, 0x36] + adds r0, r2 + strh r0, [r4, 0x36] + movs r2, 0x38 + ldrsh r0, [r4, r2] + cmp r0, 0 + bne _080CCB22 + adds r0, r1, 0 + adds r0, 0x18 + b _080CCB26 +_080CCB22: + adds r0, r1, 0 + subs r0, 0x18 +_080CCB26: + strh r0, [r4, 0x30] + ldrh r0, [r4, 0x32] + subs r0, 0x18 + strh r0, [r4, 0x32] + ldrh r0, [r4, 0x34] + lsls r0, 16 + asrs r0, 24 + strh r0, [r4, 0x24] + ldrh r0, [r4, 0x36] + lsls r0, 16 + asrs r0, 24 + strh r0, [r4, 0x26] + ldrh r0, [r4, 0x2E] + adds r0, 0x1 + strh r0, [r4, 0x2E] + lsls r0, 16 + asrs r0, 16 + cmp r0, 0x14 + bne _080CCB5C + ldr r1, _080CCB64 @ =move_anim_8072740 + adds r0, r4, 0 + bl oamt_set_x3A_32 + movs r0, 0x3 + strh r0, [r4, 0x2E] + ldr r0, _080CCB68 @ =sub_80782D8 + str r0, [r4, 0x1C] +_080CCB5C: + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_080CCB64: .4byte move_anim_8072740 +_080CCB68: .4byte sub_80782D8 + thumb_func_end sub_80CCB00 + + thumb_func_start unref_sub_80CCB6C +unref_sub_80CCB6C: @ 80CCB6C + push {r4,r5,lr} + adds r5, r0, 0 + ldrh r1, [r5, 0x32] + movs r2, 0x32 + ldrsh r0, [r5, r2] + cmp r0, 0x1 + ble _080CCC10 + ldrh r1, [r5, 0x34] + movs r0, 0x1 + ands r0, r1 + cmp r0, 0 + beq _080CCBC8 + adds r3, r5, 0 + adds r3, 0x3E + ldrb r1, [r3] + movs r2, 0x5 + negs r2, r2 + adds r0, r2, 0 + ands r0, r1 + strb r0, [r3] + ldr r4, _080CCBC4 @ =gSprites + movs r0, 0x2E + ldrsh r1, [r5, r0] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + adds r0, r4 + adds r0, 0x3E + ldrb r3, [r0] + adds r1, r2, 0 + ands r1, r3 + strb r1, [r0] + movs r0, 0x30 + ldrsh r1, [r5, r0] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + adds r0, r4 + adds r0, 0x3E + ldrb r1, [r0] + ands r2, r1 + strb r2, [r0] + b _080CCBFE + .align 2, 0 +_080CCBC4: .4byte gSprites +_080CCBC8: + adds r1, r5, 0 + adds r1, 0x3E + ldrb r0, [r1] + movs r2, 0x4 + orrs r0, r2 + strb r0, [r1] + ldr r3, _080CCC0C @ =gSprites + movs r0, 0x2E + ldrsh r1, [r5, r0] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + adds r0, r3 + adds r0, 0x3E + ldrb r1, [r0] + orrs r1, r2 + strb r1, [r0] + movs r0, 0x30 + ldrsh r1, [r5, r0] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + adds r0, r3 + adds r0, 0x3E + ldrb r1, [r0] + orrs r1, r2 + strb r1, [r0] +_080CCBFE: + movs r0, 0 + strh r0, [r5, 0x32] + ldrh r0, [r5, 0x34] + adds r0, 0x1 + strh r0, [r5, 0x34] + b _080CCC14 + .align 2, 0 +_080CCC0C: .4byte gSprites +_080CCC10: + adds r0, r1, 0x1 + strh r0, [r5, 0x32] +_080CCC14: + movs r1, 0x34 + ldrsh r0, [r5, r1] + cmp r0, 0xA + bne _080CCC44 + movs r2, 0x2E + ldrsh r1, [r5, r2] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + ldr r4, _080CCC4C @ =gSprites + adds r0, r4 + bl DestroySprite + movs r0, 0x30 + ldrsh r1, [r5, r0] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + adds r0, r4 + bl DestroySprite + adds r0, r5, 0 + bl move_anim_8072740 +_080CCC44: + pop {r4,r5} + pop {r0} + bx r0 + .align 2, 0 +_080CCC4C: .4byte gSprites + thumb_func_end unref_sub_80CCB6C + + thumb_func_start sub_80CCC50 +sub_80CCC50: @ 80CCC50 + push {r4,r5,lr} + adds r5, r0, 0 + ldr r4, _080CCC70 @ =gBattleAnimArgs + ldrh r0, [r4, 0x4] + strh r0, [r5, 0x2E] + ldr r0, _080CCC74 @ =gBattleAnimPlayerMonIndex + ldrb r0, [r0] + bl GetBankSide + lsls r0, 24 + cmp r0, 0 + beq _080CCC78 + ldrh r0, [r5, 0x20] + ldrh r1, [r4] + subs r0, r1 + b _080CCC7E + .align 2, 0 +_080CCC70: .4byte gBattleAnimArgs +_080CCC74: .4byte gBattleAnimPlayerMonIndex +_080CCC78: + ldrh r0, [r4] + ldrh r1, [r5, 0x20] + adds r0, r1 +_080CCC7E: + strh r0, [r5, 0x20] + ldr r4, _080CCCAC @ =gBattleAnimArgs + ldrb r1, [r4, 0xA] + adds r0, r5, 0 + bl StartSpriteAnim + ldrh r0, [r4, 0x6] + negs r0, r0 + strh r0, [r5, 0x30] + ldrh r0, [r4, 0x2] + ldrh r1, [r5, 0x22] + adds r0, r1 + strh r0, [r5, 0x22] + ldrh r0, [r4, 0x8] + strh r0, [r5, 0x34] + ldr r1, _080CCCB0 @ =sub_80CCCB4 + str r1, [r5, 0x1C] + adds r0, r5, 0 + bl _call_via_r1 + pop {r4,r5} + pop {r0} + bx r0 + .align 2, 0 +_080CCCAC: .4byte gBattleAnimArgs +_080CCCB0: .4byte sub_80CCCB4 + thumb_func_end sub_80CCC50 + + thumb_func_start sub_80CCCB4 +sub_80CCCB4: @ 80CCCB4 + push {r4,lr} + adds r4, r0, 0 + movs r1, 0x2E + ldrsh r0, [r4, r1] + movs r1, 0x64 + bl Cos + strh r0, [r4, 0x24] + movs r2, 0x2E + ldrsh r0, [r4, r2] + movs r1, 0x14 + bl Sin + strh r0, [r4, 0x26] + movs r1, 0x2E + ldrsh r0, [r4, r1] + cmp r0, 0x7F + bgt _080CCCE0 + adds r1, r4, 0 + adds r1, 0x43 + movs r0, 0 + b _080CCCE6 +_080CCCE0: + adds r1, r4, 0 + adds r1, 0x43 + movs r0, 0xE +_080CCCE6: + strb r0, [r1] + ldrh r0, [r4, 0x30] + ldrh r2, [r4, 0x2E] + adds r0, r2 + movs r1, 0xFF + ands r0, r1 + strh r0, [r4, 0x2E] + ldrh r0, [r4, 0x38] + adds r0, 0x82 + strh r0, [r4, 0x38] + lsls r0, 16 + asrs r0, 24 + ldrh r1, [r4, 0x26] + adds r0, r1 + strh r0, [r4, 0x26] + ldrh r0, [r4, 0x32] + adds r0, 0x1 + strh r0, [r4, 0x32] + lsls r0, 16 + asrs r0, 16 + movs r2, 0x34 + ldrsh r1, [r4, r2] + cmp r0, r1 + bne _080CCD1C + adds r0, r4, 0 + bl move_anim_8072740 +_080CCD1C: + pop {r4} + pop {r0} + bx r0 + thumb_func_end sub_80CCCB4 + + thumb_func_start sub_80CCD24 +sub_80CCD24: @ 80CCD24 + push {r4-r6,lr} + adds r5, r0, 0 + bl IsContest + lsls r0, 24 + cmp r0, 0 + beq _080CCD3A + ldr r1, _080CCD98 @ =gBattleAnimArgs + ldrh r0, [r1, 0x2] + adds r0, 0x8 + strh r0, [r1, 0x2] +_080CCD3A: + ldr r6, _080CCD9C @ =gBattleAnimPlayerMonIndex + ldrb r0, [r6] + movs r1, 0 + bl sub_8077EE4 + lsls r0, 24 + ldr r4, _080CCD98 @ =gBattleAnimArgs + lsrs r0, 24 + ldrh r1, [r4] + adds r0, r1 + strh r0, [r5, 0x20] + ldrb r0, [r6] + movs r1, 0x1 + bl sub_8077EE4 + lsls r0, 24 + lsrs r0, 24 + ldrh r4, [r4, 0x2] + adds r0, r4 + strh r0, [r5, 0x22] + ldrb r0, [r6] + bl GetBankSide + lsls r0, 24 + cmp r0, 0 + beq _080CCD78 + bl IsContest + lsls r0, 24 + cmp r0, 0 + beq _080CCDA0 +_080CCD78: + ldrb r0, [r6] + bl sub_8079ED4 + lsls r0, 24 + lsrs r0, 24 + adds r0, 0x1 + movs r1, 0x3 + ands r0, r1 + lsls r0, 2 + ldrb r2, [r5, 0x5] + movs r1, 0xD + negs r1, r1 + ands r1, r2 + orrs r1, r0 + strb r1, [r5, 0x5] + b _080CCDB8 + .align 2, 0 +_080CCD98: .4byte gBattleAnimArgs +_080CCD9C: .4byte gBattleAnimPlayerMonIndex +_080CCDA0: + ldrb r0, [r6] + bl sub_8079ED4 + movs r1, 0x3 + ands r1, r0 + lsls r1, 2 + ldrb r2, [r5, 0x5] + movs r0, 0xD + negs r0, r0 + ands r0, r2 + orrs r0, r1 + strb r0, [r5, 0x5] +_080CCDB8: + ldr r0, _080CCDF8 @ =gBattleAnimArgs + ldrh r0, [r0, 0x4] + strh r0, [r5, 0x2E] + ldr r0, _080CCDFC @ =0x00002828 + bl IndexOfSpritePaletteTag + lsls r0, 24 + lsrs r0, 20 + movs r3, 0x80 + lsls r3, 1 + adds r0, r3 + strh r0, [r5, 0x32] + movs r2, 0x10 + movs r0, 0x10 + strh r0, [r5, 0x3C] + ldr r1, _080CCE00 @ =REG_BLDCNT + movs r3, 0xFD + lsls r3, 6 + adds r0, r3, 0 + strh r0, [r1] + ldr r3, _080CCE04 @ =REG_BLDALPHA + ldrh r1, [r5, 0x3C] + lsls r0, r1, 8 + subs r2, r1 + orrs r0, r2 + strh r0, [r3] + ldr r0, _080CCE08 @ =sub_80CCE0C + str r0, [r5, 0x1C] + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 +_080CCDF8: .4byte gBattleAnimArgs +_080CCDFC: .4byte 0x00002828 +_080CCE00: .4byte REG_BLDCNT +_080CCE04: .4byte REG_BLDALPHA +_080CCE08: .4byte sub_80CCE0C + thumb_func_end sub_80CCD24 + thumb_func_start sub_80CCE0C sub_80CCE0C: @ 80CCE0C push {r4-r6,lr} -- cgit v1.2.3 From c1d498a5a3480944ab70e8f1cbb84a8daa64e720 Mon Sep 17 00:00:00 2001 From: "U-User-PC\\User" Date: Wed, 30 Aug 2017 16:31:41 -0400 Subject: fixing conflicts --- ld_script.txt | 56 +++++++++++++++++++++++++++++++------------------------- 1 file changed, 31 insertions(+), 25 deletions(-) diff --git a/ld_script.txt b/ld_script.txt index c43906b68..070017666 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -55,12 +55,12 @@ SECTIONS { asm/battle_2.o(.text); src/battle_3.o(.text); src/battle_4.o(.text); - asm/battle_5.o(.text); - src/battle_6.o(.text); + src/battle_controller_player.o(.text); src/battle_7.o(.text); - src/battle_8.o(.text); + src/battle_controller_opponent.o(.text); asm/battle_9.o(.text); - src/battle_10.o(.text); + asm/battle_controller_linkopponent1.o(.text); + src/battle_controller_linkopponent2.o(.text); src/pokemon_1.o(.text); src/calculate_base_damage.o(.text); src/pokemon_2.o(.text); @@ -83,7 +83,7 @@ SECTIONS { asm/trade.o(.text.sub_804A9F4); src/trade.o(.text.sub_804DAD4); asm/trade.o(.text.sub_804DB2C); - asm/berry_blender.o(.text); + src/berry_blender.o(.text); src/play_time.o(.text); src/new_game.o(.text); src/rom4.o(.text); @@ -120,7 +120,7 @@ SECTIONS { src/battle_anim.o(.text); src/rom_8077ABC.o(.text); src/task.o(.text); - asm/reshow_battle_screen.o(.text); + src/reshow_battle_screen.o(.text); src/battle_anim_807B69C.o(.text); src/title_screen.o(.text); src/field_weather.o(.text); @@ -159,7 +159,6 @@ SECTIONS { src/matsuda_debug_menu.o(.text); asm/contest.o(.text); src/shop.o(.text); - asm/shop.o(.text); src/berry.o(.text); src/script_menu.o(.text); src/naming_screen.o(.text); @@ -181,6 +180,7 @@ SECTIONS { asm/contest_link_80C857C.o(.text); src/contest_link_80C857C.o(.text); src/item_use.o(.text); + src/battle_anim_80CA710.o(.text); asm/battle_anim_80CA710.o(.text); src/bike.o(.text); asm/easy_chat.o(.text); @@ -197,6 +197,7 @@ SECTIONS { src/dewford_trend.o(.text); src/heal_location.o(.text); src/region_map.o(.text); + src/cute_sketch.o(.text); asm/cute_sketch.o(.text); src/decoration.o(.text); asm/slot_machine.o(.text); @@ -226,9 +227,9 @@ SECTIONS { src/coins.o(.text); src/landmark.o(.text); src/fldeff_strength.o(.text); - asm/battle_transition.o(.text); - src/battle_811DA74.o(.text); - asm/battle_message.o(.text); + src/battle_transition.o(.text); + src/battle_controller_linkpartner.o(.text); + src/battle_message.o(.text); src/choose_party.o(.text); asm/cable_car.o(.text); asm/roulette_util.o(.text); @@ -239,17 +240,18 @@ SECTIONS { asm/field_effect_helpers.o(.text); asm/contest_ai.o(.text); asm/battle_anim_81258BC.o(.text); - src/battle_anim_81258BC.o(.text); - asm/battle_anim_81258BC.o(.text_812BBFC); + asm/battle_controller_safari.o(.text); + src/battle_controller_safari.o(.text); + asm/battle_controller_safari.o(.text_812BBFC); src/fldeff_sweetscent.o(.text); asm/battle_anim_812C144.o(.text); - asm/learn_move.o(.text); + src/learn_move.o(.text); src/fldeff_softboiled.o(.text); src/decoration_inventory.o(.text); src/roamer.o(.text); asm/battle_tower.o(.text); src/use_pokeblock.o(.text); - src/battle_anim_8137220.o(.text); + src/battle_controller_wally.o(.text); src/player_pc.o(.text); src/intro.o(.text); src/field_region_map.o(.text); @@ -262,10 +264,10 @@ SECTIONS { src/mystery_event_menu.o(.text); src/save_failed_screen.o(.text); src/braille_puzzles.o(.text); - asm/pokeblock_feed.o(.text); + src/pokeblock_feed.o(.text); src/clear_save_data_menu.o(.text); src/intro_credits_graphics.o(.text); - asm/evolution_graphics.o(.text); + src/evolution_graphics.o(.text); src/bard_music.o(.text); src/fldeff_teleport.o(.text); src/unknown_debug_menu.o(.text); @@ -330,7 +332,11 @@ SECTIONS { data/main_menu.o(.rodata); data/data2a.o(.rodata); src/battle_4.o(.rodata); + src/battle_controller_player.o(.rodata); data/data2b.o(.rodata); + src/battle_controller_opponent.o(.rodata); + src/battle_controller_linkopponent2.o(.rodata); + data/battle_moves.o(.rodata); src/battle_3.o(.rodata); src/pokemon_data.o(.rodata); . = ALIGN(4); @@ -341,7 +347,7 @@ SECTIONS { data/battle_interface.o(.rodata); src/pokeball.o(.rodata); data/trade.o(.rodata); - data/berry_blender.o(.rodata); + src/berry_blender.o(.rodata); src/new_game.o(.rodata); data/rom4.o(.rodata); data/tilesets.o(.rodata); @@ -397,7 +403,7 @@ SECTIONS { src/item.o(.rodata); data/matsuda_debug_menu.o(.rodata); data/contest.o(.rodata); - data/shop.o(.rodata); + src/shop.o(.rodata); src/berry.o(.rodata); src/script_menu.o(.rodata); src/naming_screen.o(.rodata); @@ -443,22 +449,22 @@ SECTIONS { data/roulette.o(.rodata); data/pokedex_cry_screen.o(.rodata); data/landmark.o(.rodata); - data/battle_transition.o(.rodata); - data/battle_811DA74.o(.rodata); + src/battle_transition.o(.rodata); + src/battle_controller_linkpartner.o(.rodata); data/battle_message.o(.rodata); src/choose_party.o(.rodata); data/cable_car.o(.rodata); src/save.o(.rodata); data/field_effect_helpers.o(.rodata); data/contest_ai.o(.rodata); - data/battle_anim_81258BC.o(.rodata); + src/battle_controller_safari.o(.rodata); data/battle_anim_812C144.o(.rodata); - data/learn_move.o(.rodata); + src/learn_move.o(.rodata); src/decoration_inventory.o(.rodata); src/roamer.o(.rodata); data/battle_tower.o(.rodata); src/use_pokeblock.o(.rodata); - data/battle_anim_8137220.o(.rodata); + src/battle_controller_wally.o(.rodata); src/player_pc.o(.rodata); src/intro.o(.rodata); data/battle_anim_813F0F4.o(.rodata); @@ -470,9 +476,9 @@ SECTIONS { src/strings.o(.rodata); src/berry_tag_screen.o(.rodata); src/save_failed_screen.o(.rodata); - data/pokeblock_feed.o(.rodata); + src/pokeblock_feed.o(.rodata); data/intro_credits_graphics.o(.rodata); - data/evolution_graphics.o(.rodata); + src/evolution_graphics.o(.rodata); data/bard_music.o(.rodata); data/unknown_debug_menu.o(.rodata); data/strings2.o(.rodata); -- cgit v1.2.3 From 8d658666a14f8364df32d3f14c6923ebe194153e Mon Sep 17 00:00:00 2001 From: golem galvanize Date: Wed, 10 Jan 2018 17:03:17 -0500 Subject: decompiled up to sub_80DFBD8 --- asm/dragon.s | 827 ----------------------------------------------- ld_script.txt | 1 + src/battle/anim/dragon.c | 262 +++++++++++++++ 3 files changed, 263 insertions(+), 827 deletions(-) create mode 100755 src/battle/anim/dragon.c diff --git a/asm/dragon.s b/asm/dragon.s index 7c4ea0547..bb7ba83d9 100755 --- a/asm/dragon.s +++ b/asm/dragon.s @@ -7,833 +7,6 @@ @ dragon - thumb_func_start sub_80DF5A0 -sub_80DF5A0: @ 80DF5A0 - push {r4,r5,lr} - adds r5, r0, 0 - ldr r4, _080DF5E8 @ =gAnimBankAttacker - ldrb r0, [r4] - movs r1, 0x2 - bl GetBankPosition - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x20] - ldrb r0, [r4] - movs r1, 0x3 - bl GetBankPosition - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x22] - ldrb r0, [r4] - bl GetBankSide - lsls r0, 24 - cmp r0, 0 - beq _080DF5F0 - ldr r2, _080DF5EC @ =gBattleAnimArgs - ldrh r0, [r5, 0x20] - ldrh r1, [r2] - subs r0, r1 - strh r0, [r5, 0x20] - ldrh r0, [r2, 0x6] - negs r0, r0 - strh r0, [r2, 0x6] - ldrh r0, [r2, 0x8] - negs r0, r0 - strh r0, [r2, 0x8] - adds r1, r2, 0 - b _080DF5FA - .align 2, 0 -_080DF5E8: .4byte gAnimBankAttacker -_080DF5EC: .4byte gBattleAnimArgs -_080DF5F0: - ldr r1, _080DF630 @ =gBattleAnimArgs - ldrh r0, [r1] - ldrh r2, [r5, 0x20] - adds r0, r2 - strh r0, [r5, 0x20] -_080DF5FA: - ldrh r0, [r1, 0x2] - ldrh r2, [r5, 0x22] - adds r0, r2 - strh r0, [r5, 0x22] - ldrh r0, [r1, 0x4] - strh r0, [r5, 0x2E] - ldrh r0, [r1, 0x6] - strh r0, [r5, 0x30] - ldrh r0, [r1, 0x8] - strh r0, [r5, 0x34] - ldrh r0, [r1, 0xA] - strh r0, [r5, 0x38] - adds r2, r5, 0 - adds r2, 0x3E - ldrb r0, [r2] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r2] - ldr r1, _080DF634 @ =move_anim_8074EE0 - adds r0, r5, 0 - bl StoreSpriteCallbackInData - ldr r0, _080DF638 @ =sub_8078504 - str r0, [r5, 0x1C] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080DF630: .4byte gBattleAnimArgs -_080DF634: .4byte move_anim_8074EE0 -_080DF638: .4byte sub_8078504 - thumb_func_end sub_80DF5A0 - - thumb_func_start sub_80DF63C -sub_80DF63C: @ 80DF63C - push {r4,r5,lr} - adds r5, r0, 0 - bl sub_8078650 - ldr r4, _080DF694 @ =gAnimBankTarget - ldrb r0, [r4] - movs r1, 0x2 - bl GetBankPosition - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x32] - ldrb r0, [r4] - movs r1, 0x3 - bl GetBankPosition - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x36] - ldr r0, _080DF698 @ =gAnimBankAttacker - ldrb r0, [r0] - bl GetBankSide - lsls r0, 24 - cmp r0, 0 - beq _080DF6A0 - ldr r2, _080DF69C @ =gBattleAnimArgs - ldrh r0, [r5, 0x20] - ldrh r1, [r2, 0x2] - subs r0, r1 - strh r0, [r5, 0x20] - ldrh r0, [r5, 0x22] - adds r1, r0 - strh r1, [r5, 0x22] - ldrh r0, [r5, 0x32] - ldrh r1, [r2, 0x4] - subs r0, r1 - strh r0, [r5, 0x32] - ldrh r0, [r2, 0x6] - ldrh r1, [r5, 0x36] - adds r0, r1 - strh r0, [r5, 0x36] - b _080DF6CA - .align 2, 0 -_080DF694: .4byte gAnimBankTarget -_080DF698: .4byte gAnimBankAttacker -_080DF69C: .4byte gBattleAnimArgs -_080DF6A0: - ldr r1, _080DF6E4 @ =gBattleAnimArgs - ldrh r0, [r1] - ldrh r2, [r5, 0x20] - adds r0, r2 - strh r0, [r5, 0x20] - ldrh r0, [r1, 0x2] - ldrh r2, [r5, 0x22] - adds r0, r2 - strh r0, [r5, 0x22] - ldrh r0, [r1, 0x4] - ldrh r2, [r5, 0x32] - adds r0, r2 - strh r0, [r5, 0x32] - ldrh r0, [r1, 0x6] - ldrh r1, [r5, 0x36] - adds r0, r1 - strh r0, [r5, 0x36] - adds r0, r5, 0 - movs r1, 0x1 - bl StartSpriteAnim -_080DF6CA: - ldr r0, _080DF6E4 @ =gBattleAnimArgs - ldrh r0, [r0, 0x8] - strh r0, [r5, 0x2E] - ldr r0, _080DF6E8 @ =sub_8078B34 - str r0, [r5, 0x1C] - ldr r1, _080DF6EC @ =move_anim_8074EE0 - adds r0, r5, 0 - bl StoreSpriteCallbackInData - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080DF6E4: .4byte gBattleAnimArgs -_080DF6E8: .4byte sub_8078B34 -_080DF6EC: .4byte move_anim_8074EE0 - thumb_func_end sub_80DF63C - - thumb_func_start sub_80DF6F0 -sub_80DF6F0: @ 80DF6F0 - push {r4,r5,lr} - adds r5, r0, 0 - ldr r0, _080DF704 @ =gBattleAnimArgs - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _080DF70C - ldr r4, _080DF708 @ =gAnimBankAttacker - b _080DF70E - .align 2, 0 -_080DF704: .4byte gBattleAnimArgs -_080DF708: .4byte gAnimBankAttacker -_080DF70C: - ldr r4, _080DF750 @ =gAnimBankTarget -_080DF70E: - ldrb r0, [r4] - movs r1, 0 - bl GetBankPosition - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x20] - ldrb r0, [r4] - movs r1, 0x1 - bl GetBankPosition - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x22] - ldr r4, _080DF754 @ =gBattleAnimArgs - movs r0, 0x2 - ldrsh r1, [r4, r0] - adds r0, r5, 0 - bl sub_807867C - ldrh r0, [r4, 0x4] - ldrh r1, [r5, 0x22] - adds r0, r1 - strh r0, [r5, 0x22] - ldr r0, _080DF758 @ =sub_8078600 - str r0, [r5, 0x1C] - ldr r1, _080DF75C @ =move_anim_8074EE0 - adds r0, r5, 0 - bl StoreSpriteCallbackInData - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080DF750: .4byte gAnimBankTarget -_080DF754: .4byte gBattleAnimArgs -_080DF758: .4byte sub_8078600 -_080DF75C: .4byte move_anim_8074EE0 - thumb_func_end sub_80DF6F0 - - thumb_func_start sub_80DF760 -sub_80DF760: @ 80DF760 - push {r4,lr} - adds r4, r0, 0 - ldr r0, _080DF788 @ =gAnimBankAttacker - ldrb r0, [r0] - bl GetBankSide - lsls r0, 24 - cmp r0, 0 - beq _080DF77A - adds r0, r4, 0 - movs r1, 0x1 - bl StartSpriteAffineAnim -_080DF77A: - adds r0, r4, 0 - bl sub_80DF63C - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080DF788: .4byte gAnimBankAttacker - thumb_func_end sub_80DF760 - - thumb_func_start sub_80DF78C -sub_80DF78C: @ 80DF78C - push {r4-r7,lr} - adds r6, r0, 0 - ldr r4, _080DF7E0 @ =gAnimBankAttacker - ldrb r0, [r4] - movs r1, 0x2 - bl GetBankPosition - lsls r0, 24 - lsrs r0, 24 - movs r5, 0 - strh r0, [r6, 0x20] - ldrb r0, [r4] - movs r1, 0x3 - bl GetBankPosition - lsls r0, 24 - lsrs r0, 24 - strh r0, [r6, 0x22] - strh r5, [r6, 0x36] - movs r0, 0x1 - strh r0, [r6, 0x38] - ldr r0, _080DF7E4 @ =gBattleAnimArgs - ldrh r0, [r0] - strh r0, [r6, 0x3A] - ldr r4, _080DF7E8 @ =gBankAttacker - ldrb r0, [r4] - movs r1, 0 - bl sub_807A100 - lsls r7, r0, 16 - lsrs r5, r7, 16 - ldrb r0, [r4] - movs r1, 0x1 - bl sub_807A100 - lsls r1, r0, 16 - lsrs r0, r1, 16 - cmp r5, r0 - bls _080DF7EC - lsrs r0, r7, 17 - b _080DF7EE - .align 2, 0 -_080DF7E0: .4byte gAnimBankAttacker -_080DF7E4: .4byte gBattleAnimArgs -_080DF7E8: .4byte gBankAttacker -_080DF7EC: - lsrs r0, r1, 17 -_080DF7EE: - strh r0, [r6, 0x3C] - movs r1, 0x3A - ldrsh r0, [r6, r1] - movs r2, 0x3C - ldrsh r1, [r6, r2] - bl Cos - strh r0, [r6, 0x24] - movs r1, 0x3A - ldrsh r0, [r6, r1] - movs r2, 0x3C - ldrsh r1, [r6, r2] - bl Sin - strh r0, [r6, 0x26] - ldr r0, _080DF818 @ =sub_80DF81C - str r0, [r6, 0x1C] - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080DF818: .4byte sub_80DF81C - thumb_func_end sub_80DF78C - - thumb_func_start sub_80DF81C -sub_80DF81C: @ 80DF81C - push {r4,r5,lr} - adds r4, r0, 0 - movs r0, 0x2E - ldrsh r5, [r4, r0] - cmp r5, 0 - beq _080DF82E - cmp r5, 0x1 - beq _080DF89A - b _080DF91E -_080DF82E: - ldrh r0, [r4, 0x3A] - ldrh r1, [r4, 0x38] - subs r0, r1 - movs r1, 0xFF - ands r0, r1 - strh r0, [r4, 0x3A] - movs r1, 0x3A - ldrsh r0, [r4, r1] - movs r2, 0x3C - ldrsh r1, [r4, r2] - bl Cos - strh r0, [r4, 0x24] - movs r1, 0x3A - ldrsh r0, [r4, r1] - movs r2, 0x3C - ldrsh r1, [r4, r2] - bl Sin - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x36] - adds r0, 0x1 - strh r0, [r4, 0x36] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x5 - ble _080DF880 - strh r5, [r4, 0x36] - ldrh r1, [r4, 0x38] - movs r2, 0x38 - ldrsh r0, [r4, r2] - cmp r0, 0xF - bgt _080DF880 - adds r0, r1, 0x1 - strh r0, [r4, 0x38] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xF - ble _080DF880 - movs r0, 0x10 - strh r0, [r4, 0x38] -_080DF880: - ldrh r0, [r4, 0x34] - adds r0, 0x1 - strh r0, [r4, 0x34] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x3C - ble _080DF91E - movs r0, 0 - strh r0, [r4, 0x34] - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - b _080DF91E -_080DF89A: - ldrh r0, [r4, 0x3A] - ldrh r1, [r4, 0x38] - subs r0, r1 - movs r1, 0xFF - ands r0, r1 - strh r0, [r4, 0x3A] - ldrh r1, [r4, 0x3C] - movs r2, 0x3C - ldrsh r0, [r4, r2] - cmp r0, 0x95 - bgt _080DF8C2 - adds r0, r1, 0 - adds r0, 0x8 - strh r0, [r4, 0x3C] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x95 - ble _080DF8C2 - movs r0, 0x96 - strh r0, [r4, 0x3C] -_080DF8C2: - movs r1, 0x3A - ldrsh r0, [r4, r1] - movs r2, 0x3C - ldrsh r1, [r4, r2] - bl Cos - strh r0, [r4, 0x24] - movs r1, 0x3A - ldrsh r0, [r4, r1] - movs r2, 0x3C - ldrsh r1, [r4, r2] - bl Sin - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x36] - adds r0, 0x1 - strh r0, [r4, 0x36] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x5 - ble _080DF90A - movs r0, 0 - strh r0, [r4, 0x36] - ldrh r1, [r4, 0x38] - movs r2, 0x38 - ldrsh r0, [r4, r2] - cmp r0, 0xF - bgt _080DF90A - adds r0, r1, 0x1 - strh r0, [r4, 0x38] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xF - ble _080DF90A - movs r0, 0x10 - strh r0, [r4, 0x38] -_080DF90A: - ldrh r0, [r4, 0x34] - adds r0, 0x1 - strh r0, [r4, 0x34] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x14 - ble _080DF91E - adds r0, r4, 0 - bl DestroyAnimSprite -_080DF91E: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80DF81C - - thumb_func_start sub_80DF924 -sub_80DF924: @ 80DF924 - push {r4-r6,lr} - sub sp, 0xC - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _080DF950 @ =gTasks - adds r4, r1, r0 - ldr r0, _080DF954 @ =gAnimBankAttacker - ldrb r0, [r0] - bl GetBankIdentity_permutated - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080DF960 - ldr r0, _080DF958 @ =REG_BG1HOFS - str r0, [sp] - ldr r0, _080DF95C @ =gBattle_BG1_X - b _080DF966 - .align 2, 0 -_080DF950: .4byte gTasks -_080DF954: .4byte gAnimBankAttacker -_080DF958: .4byte REG_BG1HOFS -_080DF95C: .4byte gBattle_BG1_X -_080DF960: - ldr r0, _080DF9DC @ =REG_BG2HOFS - str r0, [sp] - ldr r0, _080DF9E0 @ =gBattle_BG2_X -_080DF966: - ldrh r0, [r0] - strh r0, [r4, 0xC] - ldr r0, _080DF9E4 @ =0xa2600001 - str r0, [sp, 0x4] - mov r1, sp - movs r5, 0 - movs r0, 0x1 - strb r0, [r1, 0x8] - mov r0, sp - strb r5, [r0, 0x9] - ldr r0, _080DF9E8 @ =gAnimBankAttacker - ldrb r0, [r0] - bl sub_8077FC0 - lsls r0, 24 - lsrs r0, 24 - adds r1, r0, 0 - subs r1, 0x20 - strh r1, [r4, 0xE] - adds r0, 0x20 - strh r0, [r4, 0x10] - cmp r1, 0 - bge _080DF996 - strh r5, [r4, 0xE] -_080DF996: - ldrh r3, [r4, 0xE] - movs r1, 0x10 - ldrsh r0, [r4, r1] - cmp r3, r0 - bgt _080DF9C4 - ldr r5, _080DF9EC @ =gUnknown_03004DE0 - movs r0, 0xF0 - lsls r0, 3 - adds r6, r5, r0 -_080DF9A8: - lsls r1, r3, 1 - adds r2, r1, r5 - ldrh r0, [r4, 0xC] - strh r0, [r2] - adds r1, r6 - ldrh r0, [r4, 0xC] - strh r0, [r1] - adds r0, r3, 0x1 - lsls r0, 16 - lsrs r3, r0, 16 - movs r1, 0x10 - ldrsh r0, [r4, r1] - cmp r3, r0 - ble _080DF9A8 -_080DF9C4: - ldr r0, [sp] - ldr r1, [sp, 0x4] - ldr r2, [sp, 0x8] - bl sub_80895F8 - ldr r0, _080DF9F0 @ =sub_80DF9F4 - str r0, [r4] - add sp, 0xC - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080DF9DC: .4byte REG_BG2HOFS -_080DF9E0: .4byte gBattle_BG2_X -_080DF9E4: .4byte 0xa2600001 -_080DF9E8: .4byte gAnimBankAttacker -_080DF9EC: .4byte gUnknown_03004DE0 -_080DF9F0: .4byte sub_80DF9F4 - thumb_func_end sub_80DF924 - - thumb_func_start sub_80DF9F4 -sub_80DF9F4: @ 80DF9F4 - push {lr} - lsls r0, 24 - lsrs r3, r0, 24 - lsls r0, r3, 2 - adds r0, r3 - lsls r0, 3 - ldr r1, _080DFA18 @ =gTasks - adds r2, r0, r1 - movs r1, 0x8 - ldrsh r0, [r2, r1] - cmp r0, 0x4 - bhi _080DFAAA - lsls r0, 2 - ldr r1, _080DFA1C @ =_080DFA20 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080DFA18: .4byte gTasks -_080DFA1C: .4byte _080DFA20 - .align 2, 0 -_080DFA20: - .4byte _080DFA34 - .4byte _080DFA56 - .4byte _080DFA66 - .4byte _080DFA92 - .4byte _080DFAA4 -_080DFA34: - ldrh r0, [r2, 0x16] - adds r0, 0x1 - strh r0, [r2, 0x16] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _080DFA8A - movs r0, 0 - strh r0, [r2, 0x16] - ldrh r0, [r2, 0x14] - adds r0, 0x1 - strh r0, [r2, 0x14] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x3 - bne _080DFA8A - b _080DFA84 -_080DFA56: - ldrh r0, [r2, 0xA] - adds r0, 0x1 - strh r0, [r2, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x3C - ble _080DFA8A - b _080DFA84 -_080DFA66: - ldrh r0, [r2, 0x16] - adds r0, 0x1 - strh r0, [r2, 0x16] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _080DFA8A - movs r0, 0 - strh r0, [r2, 0x16] - ldrh r0, [r2, 0x14] - subs r0, 0x1 - strh r0, [r2, 0x14] - lsls r0, 16 - cmp r0, 0 - bne _080DFA8A -_080DFA84: - ldrh r0, [r2, 0x8] - adds r0, 0x1 - strh r0, [r2, 0x8] -_080DFA8A: - adds r0, r2, 0 - bl sub_80DFAB0 - b _080DFAAA -_080DFA92: - ldr r1, _080DFAA0 @ =gUnknown_03004DC0 - movs r0, 0x3 - strb r0, [r1, 0x15] - ldrh r0, [r2, 0x8] - adds r0, 0x1 - strh r0, [r2, 0x8] - b _080DFAAA - .align 2, 0 -_080DFAA0: .4byte gUnknown_03004DC0 -_080DFAA4: - adds r0, r3, 0 - bl DestroyAnimVisualTask -_080DFAAA: - pop {r0} - bx r0 - thumb_func_end sub_80DF9F4 - - thumb_func_start sub_80DFAB0 -sub_80DFAB0: @ 80DFAB0 - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r5, r0, 0 - ldrh r3, [r5, 0x12] - ldrh r4, [r5, 0xE] - movs r1, 0x10 - ldrsh r0, [r5, r1] - cmp r4, r0 - bgt _080DFB06 - ldr r7, _080DFB1C @ =gUnknown_03004DE0 - mov r12, r7 - ldr r0, _080DFB20 @ =gSineTable - mov r8, r0 - ldr r6, _080DFB24 @ =gUnknown_03004DC0 -_080DFACE: - lsls r2, r4, 1 - ldrb r1, [r6, 0x14] - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 7 - adds r2, r0 - add r2, r12 - lsls r0, r3, 1 - add r0, r8 - movs r7, 0 - ldrsh r1, [r0, r7] - movs r7, 0x14 - ldrsh r0, [r5, r7] - muls r0, r1 - asrs r0, 7 - ldrh r1, [r5, 0xC] - adds r0, r1 - strh r0, [r2] - adds r3, 0x8 - movs r0, 0xFF - ands r3, r0 - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - movs r7, 0x10 - ldrsh r0, [r5, r7] - cmp r4, r0 - ble _080DFACE -_080DFB06: - ldrh r0, [r5, 0x12] - adds r0, 0x9 - movs r1, 0xFF - ands r0, r1 - strh r0, [r5, 0x12] - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080DFB1C: .4byte gUnknown_03004DE0 -_080DFB20: .4byte gSineTable -_080DFB24: .4byte gUnknown_03004DC0 - thumb_func_end sub_80DFAB0 - - thumb_func_start sub_80DFB28 -sub_80DFB28: @ 80DFB28 - push {r4-r6,lr} - mov r6, r8 - push {r6} - adds r4, r0, 0 - ldr r5, _080DFBC8 @ =gBattleAnimArgs - movs r0, 0x4 - ldrsh r1, [r5, r0] - lsls r0, r1, 1 - adds r0, r1 - movs r1, 0x5 - bl __divsi3 - adds r6, r0, 0 - ldr r1, _080DFBCC @ =gAnimBankAttacker - mov r8, r1 - ldrb r0, [r1] - movs r1, 0x2 - bl GetBankPosition - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x20] - mov r2, r8 - ldrb r0, [r2] - movs r1, 0x3 - bl GetBankPosition - lsls r0, 24 - lsrs r0, 24 - ldrh r3, [r5, 0x8] - adds r0, r3 - strh r0, [r4, 0x22] - movs r1, 0x2 - ldrsh r0, [r5, r1] - movs r2, 0x4 - ldrsh r1, [r5, r2] - bl Cos - strh r0, [r4, 0x30] - movs r3, 0x2 - ldrsh r0, [r5, r3] - lsls r6, 16 - asrs r6, 16 - adds r1, r6, 0 - bl Sin - strh r0, [r4, 0x32] - ldrh r1, [r4, 0x30] - ldrh r2, [r5] - adds r3, r2, 0 - muls r3, r1 - adds r1, r3, 0 - ldrh r3, [r4, 0x20] - adds r1, r3 - strh r1, [r4, 0x20] - adds r1, r2, 0 - muls r1, r0 - adds r0, r1, 0 - ldrh r2, [r4, 0x22] - adds r0, r2 - strh r0, [r4, 0x22] - ldrh r0, [r5, 0x6] - strh r0, [r4, 0x34] - ldr r0, _080DFBD0 @ =sub_80DFBD8 - str r0, [r4, 0x1C] - adds r4, 0x2E - ldr r2, _080DFBD4 @ =gUnknown_03000730 - movs r1, 0x6 -_080DFBB0: - ldrh r0, [r4] - strh r0, [r2] - adds r4, 0x2 - adds r2, 0x2 - subs r1, 0x1 - cmp r1, 0 - bge _080DFBB0 - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080DFBC8: .4byte gBattleAnimArgs -_080DFBCC: .4byte gAnimBankAttacker -_080DFBD0: .4byte sub_80DFBD8 -_080DFBD4: .4byte gUnknown_03000730 - thumb_func_end sub_80DFB28 - - thumb_func_start sub_80DFBD8 -sub_80DFBD8: @ 80DFBD8 - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x30] - ldrh r1, [r4, 0x36] - adds r0, r1 - strh r0, [r4, 0x36] - ldrh r0, [r4, 0x32] - ldrh r2, [r4, 0x38] - adds r0, r2 - strh r0, [r4, 0x38] - movs r1, 0x36 - ldrsh r0, [r4, r1] - movs r1, 0xA - bl __divsi3 - strh r0, [r4, 0x24] - movs r2, 0x38 - ldrsh r0, [r4, r2] - movs r1, 0xA - bl __divsi3 - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - lsls r0, 16 - asrs r0, 16 - movs r2, 0x34 - ldrsh r1, [r4, r2] - cmp r0, r1 - ble _080DFC1C - adds r0, r4, 0 - bl DestroyAnimSprite -_080DFC1C: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80DFBD8 - thumb_func_start sub_80DFC24 sub_80DFC24: @ 80DFC24 push {r4,lr} diff --git a/ld_script.txt b/ld_script.txt index 11a430764..acc368cc8 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -295,6 +295,7 @@ SECTIONS { asm/bug.o(.text); asm/rock.o(.text); asm/ghost.o(.text); + src/battle/anim/dragon.o(.text); asm/dragon.o(.text); asm/dark.o(.text); asm/ground.o(.text); diff --git a/src/battle/anim/dragon.c b/src/battle/anim/dragon.c new file mode 100755 index 000000000..04859e39f --- /dev/null +++ b/src/battle/anim/dragon.c @@ -0,0 +1,262 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" +#include "unknown_task.h" + +void sub_80DF81C(struct Sprite *sprite); +void sub_80DFBD8(struct Sprite *sprite); + +void sub_80DF9F4(u8 taskId); + +void sub_80DFAB0(struct Task *task); + +extern s16 gBattleAnimArgs[]; +extern u8 gAnimBankAttacker; +extern u8 gAnimBankTarget; +extern u8 gBankAttacker; +extern u16 gBattle_BG1_X; +extern u16 gBattle_BG2_X; +extern u16 gUnknown_03000730[]; + + +// Outrage +void sub_80DF5A0(struct Sprite *sprite) +{ + sprite->pos1.x = GetBankPosition(gAnimBankAttacker, 2); + sprite->pos1.y = GetBankPosition(gAnimBankAttacker, 3); + if (GetBankSide(gAnimBankAttacker)) + { + sprite->pos1.x -= gBattleAnimArgs[0]; + gBattleAnimArgs[3] = -gBattleAnimArgs[3]; + gBattleAnimArgs[4] = -gBattleAnimArgs[4]; + } + else + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[1] = gBattleAnimArgs[3]; + sprite->data[3] = gBattleAnimArgs[4]; + sprite->data[5] = gBattleAnimArgs[5]; + sprite->invisible = 1; + StoreSpriteCallbackInData(sprite, move_anim_8074EE0); + sprite->callback = sub_8078504; +} + +void sub_80DF63C(struct Sprite *sprite) +{ + sub_8078650(sprite); + sprite->data[2] = GetBankPosition(gAnimBankTarget, 2); + sprite->data[4] = GetBankPosition(gAnimBankTarget, 3); + if (GetBankSide(gAnimBankAttacker)) + { + sprite->pos1.x -= gBattleAnimArgs[1]; + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[2] -= gBattleAnimArgs[2]; + sprite->data[4] += gBattleAnimArgs[3]; + } + else + { + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[2] += gBattleAnimArgs[2]; + sprite->data[4] += gBattleAnimArgs[3]; + StartSpriteAnim(sprite, 1); + } + sprite->data[0] = gBattleAnimArgs[4]; + sprite->callback = sub_8078B34; + StoreSpriteCallbackInData(sprite, move_anim_8074EE0); +} + +void sub_80DF6F0(struct Sprite *sprite) +{ + if (gBattleAnimArgs[0] == 0) + { + sprite->pos1.x = GetBankPosition(gAnimBankAttacker, 0); + sprite->pos1.y = GetBankPosition(gAnimBankAttacker, 1); + } + else + { + sprite->pos1.x = GetBankPosition(gAnimBankTarget, 0); + sprite->pos1.y = GetBankPosition(gAnimBankTarget, 1); + } + sub_807867C(sprite, gBattleAnimArgs[1]); + sprite->pos1.y += gBattleAnimArgs[2]; + sprite->callback = sub_8078600; + StoreSpriteCallbackInData(sprite, move_anim_8074EE0); +} + +void sub_80DF760(struct Sprite *sprite) +{ + if (GetBankSide(gAnimBankAttacker)) + StartSpriteAffineAnim(sprite, 1); + sub_80DF63C(sprite); +} + +void sub_80DF78C(struct Sprite *sprite) +{ + u16 r5; + u16 r0; + sprite->pos1.x = GetBankPosition(gAnimBankAttacker, 2); + sprite->pos1.y = GetBankPosition(gAnimBankAttacker, 3); + sprite->data[4] = 0; + sprite->data[5] = 1; + sprite->data[6] = gBattleAnimArgs[0]; + r5 = sub_807A100(gBankAttacker, 0); + r0 = sub_807A100(gBankAttacker, 1); + if (r5 > r0) + sprite->data[7] = r5 / 2; + else + sprite->data[7] = r0 / 2; + sprite->pos2.x = Cos(sprite->data[6], sprite->data[7]); + sprite->pos2.y = Sin(sprite->data[6], sprite->data[7]); + sprite->callback = sub_80DF81C; +} + +void sub_80DF81C(struct Sprite *sprite) +{ + switch (sprite->data[0]) + { + case 0: + sprite->data[6] = (sprite->data[6] - sprite->data[5]) & 0xFF; + sprite->pos2.x = Cos(sprite->data[6], sprite->data[7]); + sprite->pos2.y = Sin(sprite->data[6], sprite->data[7]); + if (++sprite->data[4] > 5) + { + sprite->data[4] = 0; + if (sprite->data[5] <= 15 && ++sprite->data[5] > 15) + sprite->data[5] = 16; + } + if (++sprite->data[3] > 0x3C) + { + sprite->data[3] = 0; + sprite->data[0]++; + } + break; + case 1: + sprite->data[6] = (sprite->data[6] - sprite->data[5]) & 0xFF; + if (sprite->data[7] <= 0x95 && (sprite->data[7] += 8) > 0x95) + sprite->data[7] = 0x96; + sprite->pos2.x = Cos(sprite->data[6], sprite->data[7]); + sprite->pos2.y = Sin(sprite->data[6], sprite->data[7]); + if (++sprite->data[4] > 5) + { + sprite->data[4] = 0; + if (sprite->data[5] <= 15 && ++sprite->data[5] > 15) + sprite->data[5] = 16; + } + if (++sprite->data[3] > 20) + DestroyAnimSprite(sprite); + break; + } +} + +void sub_80DF924(u8 taskId) +{ + struct UnknownTaskStruct sp; + struct Task *task = &gTasks[taskId]; + u16 i; + u8 r1; + if (GetBankIdentity_permutated(gAnimBankAttacker) == 1) + { + sp.dest = ®_BG1HOFS; + task->data[2] = gBattle_BG1_X; + } + else + { + sp.dest = ®_BG2HOFS; + task->data[2] = gBattle_BG2_X; + } + sp.control = 0xA2600001; + sp.unk8 = 1; + sp.unk9 = 0; + r1 = sub_8077FC0(gAnimBankAttacker); + task->data[3] = r1 - 32; + task->data[4] = r1 + 32; + if (task->data[3] < 0) + task->data[3] = 0; + for(i = task->data[3];i <= task->data[4];i++) + { + gUnknown_03004DE0[0][i] = task->data[2]; + gUnknown_03004DE0[1][i] = task->data[2]; + } + sub_80895F8(sp); + task->func = sub_80DF9F4; +} + +void sub_80DF9F4(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + switch (task->data[0]) + { + case 0: + if (++task->data[7] > 1) + { + task->data[7] = 0; + if (++task->data[6] == 3) + task->data[0]++; + } + sub_80DFAB0(task); + break; + case 1: + if (++task->data[1] > 0x3C) + task->data[0]++; + sub_80DFAB0(task); + break; + case 2: + if (++task->data[7] > 1) + { + task->data[7] = 0; + if (--task->data[6] == 0) + task->data[0]++; + } + sub_80DFAB0(task); + break; + case 3: + gUnknown_03004DC0.unk15 = 3; + task->data[0]++; + break; + case 4: + DestroyAnimVisualTask(taskId); + break; + } +} + +void sub_80DFAB0(struct Task *task) +{ + u16 r3 = task->data[5]; + u16 i; + for (i = task->data[3]; i <= task->data[4]; i++) + { + gUnknown_03004DE0[gUnknown_03004DC0.srcBank][i] = ((gSineTable[r3] * task->data[6]) >> 7) + task->data[2]; + r3 = (r3 + 8) & 0xFF; + } + task->data[5] = (task->data[5] + 9) & 0xFF; +} + +void sub_80DFB28(struct Sprite *sprite) +{ + int r6 = (gBattleAnimArgs[2] * 3) / 5; + int i; + sprite->pos1.x = GetBankPosition(gAnimBankAttacker, 2); + sprite->pos1.y = GetBankPosition(gAnimBankAttacker, 3) + gBattleAnimArgs[4]; + sprite->data[1] = Cos(gBattleAnimArgs[1], gBattleAnimArgs[2]); + sprite->data[2] = Sin(gBattleAnimArgs[1], r6); + sprite->pos1.x += sprite->data[1] * gBattleAnimArgs[0]; + sprite->pos1.y += sprite->data[2] * gBattleAnimArgs[0]; + sprite->data[3] = gBattleAnimArgs[3]; + sprite->callback = sub_80DFBD8; + for (i = 0; i <= 6; i++) + gUnknown_03000730[i] = sprite->data[i]; +} + +void sub_80DFBD8(struct Sprite *sprite) +{ + sprite->data[4] += sprite->data[1]; + sprite->data[5] += sprite->data[2]; + sprite->pos2.x = sprite->data[4] / 10; + sprite->pos2.y = sprite->data[5] / 10; + if (++sprite->data[0] > sprite->data[3]) + DestroyAnimSprite(sprite); +} \ No newline at end of file -- cgit v1.2.3 From bde368e439b3a279df18efcf563ec908f3e84330 Mon Sep 17 00:00:00 2001 From: golem galvanize Date: Thu, 11 Jan 2018 11:41:33 -0500 Subject: finish splitting and decompiling dragon.s --- asm/dragon.s | 387 ----------------------------------------------- ld_script.txt | 2 +- src/battle/anim/dark.c | 138 +++++++++++++++++ src/battle/anim/dragon.c | 42 +++-- 4 files changed, 167 insertions(+), 402 deletions(-) delete mode 100755 asm/dragon.s create mode 100755 src/battle/anim/dark.c diff --git a/asm/dragon.s b/asm/dragon.s deleted file mode 100755 index eb372ec80..000000000 --- a/asm/dragon.s +++ /dev/null @@ -1,387 +0,0 @@ - .include "constants/gba_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - @ dragon - - thumb_func_start sub_80DFC24 -sub_80DFC24: @ 80DFC24 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _080DFC58 @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - ldr r0, _080DFC5C @ =gBattleAnimArgs - ldrh r0, [r0] - strh r0, [r1, 0x8] - ldr r0, _080DFC60 @ =gAnimBankAttacker - ldrb r0, [r0] - movs r2, 0x10 - strh r2, [r1, 0xA] - ldr r1, _080DFC64 @ =REG_BLDALPHA - strh r2, [r1] - bl GetBankIdentity_permutated - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080DFC70 - ldr r1, _080DFC68 @ =REG_BLDCNT - ldr r2, _080DFC6C @ =0x00003f42 - b _080DFC74 - .align 2, 0 -_080DFC58: .4byte gTasks -_080DFC5C: .4byte gBattleAnimArgs -_080DFC60: .4byte gAnimBankAttacker -_080DFC64: .4byte REG_BLDALPHA -_080DFC68: .4byte REG_BLDCNT -_080DFC6C: .4byte 0x00003f42 -_080DFC70: - ldr r1, _080DFC8C @ =REG_BLDCNT - ldr r2, _080DFC90 @ =0x00003f44 -_080DFC74: - adds r0, r2, 0 - strh r0, [r1] - ldr r0, _080DFC94 @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - ldr r0, _080DFC98 @ =sub_80DFC9C - str r0, [r1] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080DFC8C: .4byte REG_BLDCNT -_080DFC90: .4byte 0x00003f44 -_080DFC94: .4byte gTasks -_080DFC98: .4byte sub_80DFC9C - thumb_func_end sub_80DFC24 - - thumb_func_start sub_80DFC9C -sub_80DFC9C: @ 80DFC9C - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r1, _080DFD04 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r4, r0, r1 - ldrh r0, [r4, 0xA] - lsrs r2, r0, 8 - lsls r0, 24 - lsrs r1, r0, 24 - movs r3, 0xC - ldrsh r0, [r4, r3] - ldrb r3, [r4, 0x8] - cmp r0, r3 - bne _080DFD18 - adds r2, 0x1 - lsls r2, 24 - lsrs r2, 24 - subs r0, r1, 0x1 - lsls r0, 24 - lsrs r0, 24 - lsls r1, r2, 8 - orrs r1, r0 - movs r3, 0 - strh r1, [r4, 0xA] - ldr r0, _080DFD08 @ =REG_BLDALPHA - strh r1, [r0] - strh r3, [r4, 0xC] - cmp r2, 0x10 - bne _080DFD1E - ldr r2, _080DFD0C @ =gSprites - ldr r1, _080DFD10 @ =gObjectBankIDs - ldr r0, _080DFD14 @ =gAnimBankAttacker - ldrb r0, [r0] - adds r0, r1 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - adds r0, 0x3E - ldrb r1, [r0] - movs r2, 0x4 - orrs r1, r2 - strb r1, [r0] - adds r0, r5, 0 - bl DestroyAnimVisualTask - b _080DFD1E - .align 2, 0 -_080DFD04: .4byte gTasks -_080DFD08: .4byte REG_BLDALPHA -_080DFD0C: .4byte gSprites -_080DFD10: .4byte gObjectBankIDs -_080DFD14: .4byte gAnimBankAttacker -_080DFD18: - ldrh r0, [r4, 0xC] - adds r0, 0x1 - strh r0, [r4, 0xC] -_080DFD1E: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80DFC9C - - thumb_func_start sub_80DFD24 -sub_80DFD24: @ 80DFD24 - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080DFD48 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - ldr r0, _080DFD4C @ =gBattleAnimArgs - ldrh r0, [r0] - strh r0, [r1, 0x8] - movs r2, 0x80 - lsls r2, 5 - strh r2, [r1, 0xA] - ldr r0, _080DFD50 @ =sub_80DFD58 - str r0, [r1] - ldr r0, _080DFD54 @ =REG_BLDALPHA - strh r2, [r0] - bx lr - .align 2, 0 -_080DFD48: .4byte gTasks -_080DFD4C: .4byte gBattleAnimArgs -_080DFD50: .4byte sub_80DFD58 -_080DFD54: .4byte REG_BLDALPHA - thumb_func_end sub_80DFD24 - - thumb_func_start sub_80DFD58 -sub_80DFD58: @ 80DFD58 - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r1, _080DFDA8 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r2, r0, r1 - ldrh r0, [r2, 0xA] - lsrs r1, r0, 8 - lsls r0, 24 - lsrs r5, r0, 24 - movs r3, 0xC - ldrsh r0, [r2, r3] - ldrb r3, [r2, 0x8] - cmp r0, r3 - bne _080DFDB4 - subs r0, r1, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r0, 24 - lsls r1, r3, 8 - orrs r1, r0 - movs r0, 0 - strh r1, [r2, 0xA] - ldr r5, _080DFDAC @ =REG_BLDALPHA - strh r1, [r5] - strh r0, [r2, 0xC] - cmp r3, 0 - bne _080DFDBA - ldr r0, _080DFDB0 @ =REG_BLDCNT - strh r3, [r0] - strh r3, [r5] - adds r0, r4, 0 - bl DestroyAnimVisualTask - b _080DFDBA - .align 2, 0 -_080DFDA8: .4byte gTasks -_080DFDAC: .4byte REG_BLDALPHA -_080DFDB0: .4byte REG_BLDCNT -_080DFDB4: - ldrh r0, [r2, 0xC] - adds r0, 0x1 - strh r0, [r2, 0xC] -_080DFDBA: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80DFD58 - - thumb_func_start sub_80DFDC0 -sub_80DFDC0: @ 80DFDC0 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r1, _080DFDE8 @ =REG_BLDALPHA - movs r2, 0x80 - lsls r2, 5 - adds r0, r2, 0 - strh r0, [r1] - ldr r0, _080DFDEC @ =gAnimBankAttacker - ldrb r0, [r0] - bl GetBankIdentity_permutated - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080DFDF8 - ldr r1, _080DFDF0 @ =REG_BLDCNT - ldr r2, _080DFDF4 @ =0x00003f42 - b _080DFDFC - .align 2, 0 -_080DFDE8: .4byte REG_BLDALPHA -_080DFDEC: .4byte gAnimBankAttacker -_080DFDF0: .4byte REG_BLDCNT -_080DFDF4: .4byte 0x00003f42 -_080DFDF8: - ldr r1, _080DFE0C @ =REG_BLDCNT - ldr r2, _080DFE10 @ =0x00003f44 -_080DFDFC: - adds r0, r2, 0 - strh r0, [r1] - adds r0, r4, 0 - bl DestroyAnimVisualTask - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080DFE0C: .4byte REG_BLDCNT -_080DFE10: .4byte 0x00003f44 - thumb_func_end sub_80DFDC0 - - thumb_func_start sub_80DFE14 -sub_80DFE14: @ 80DFE14 - push {r4-r6,lr} - adds r4, r0, 0 - ldr r6, _080DFE80 @ =gAnimBankTarget - ldrb r0, [r6] - movs r1, 0x2 - bl GetBankPosition - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x30] - ldr r5, _080DFE84 @ =gAnimBankAttacker - ldrb r0, [r5] - movs r1, 0x2 - bl GetBankPosition - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x32] - ldrb r0, [r6] - movs r1, 0x3 - bl GetBankPosition - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x34] - ldrb r0, [r5] - movs r1, 0x3 - bl GetBankPosition - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x36] - movs r0, 0x7E - strh r0, [r4, 0x2E] - adds r0, r4, 0 - bl sub_8078A5C - ldrh r0, [r4, 0x30] - negs r0, r0 - strh r0, [r4, 0x34] - ldrh r0, [r4, 0x32] - negs r0, r0 - strh r0, [r4, 0x36] - ldr r0, _080DFE88 @ =0x0000ffd8 - strh r0, [r4, 0x3A] - ldr r1, _080DFE8C @ =sub_80DFE90 - str r1, [r4, 0x1C] - adds r0, r4, 0 - bl _call_via_r1 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080DFE80: .4byte gAnimBankTarget -_080DFE84: .4byte gAnimBankAttacker -_080DFE88: .4byte 0x0000ffd8 -_080DFE8C: .4byte sub_80DFE90 - thumb_func_end sub_80DFE14 - - thumb_func_start sub_80DFE90 -sub_80DFE90: @ 80DFE90 - push {r4-r6,lr} - adds r4, r0, 0 - ldrh r5, [r4, 0x30] - ldrh r0, [r4, 0x34] - adds r2, r5, r0 - strh r2, [r4, 0x34] - ldrh r3, [r4, 0x32] - ldrh r6, [r4, 0x36] - adds r1, r3, r6 - strh r1, [r4, 0x36] - lsls r0, r2, 16 - asrs r0, 24 - strh r0, [r4, 0x24] - lsls r0, r1, 16 - asrs r0, 24 - strh r0, [r4, 0x26] - movs r6, 0x3C - ldrsh r0, [r4, r6] - cmp r0, 0 - bne _080DFED2 - adds r0, r2, r5 - strh r0, [r4, 0x34] - adds r1, r3 - strh r1, [r4, 0x36] - lsls r0, 16 - asrs r0, 24 - strh r0, [r4, 0x24] - lsls r1, 16 - asrs r1, 24 - strh r1, [r4, 0x26] - ldrh r0, [r4, 0x2E] - subs r0, 0x1 - strh r0, [r4, 0x2E] -_080DFED2: - movs r1, 0x38 - ldrsh r0, [r4, r1] - movs r2, 0x3A - ldrsh r1, [r4, r2] - bl Sin - ldrh r6, [r4, 0x26] - adds r0, r6 - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x38] - adds r0, 0x3 - movs r1, 0xFF - ands r0, r1 - strh r0, [r4, 0x38] - cmp r0, 0x7F - ble _080DFF02 - movs r0, 0 - strh r0, [r4, 0x38] - ldrh r0, [r4, 0x3A] - adds r0, 0x14 - strh r0, [r4, 0x3A] - ldrh r0, [r4, 0x3C] - adds r0, 0x1 - strh r0, [r4, 0x3C] -_080DFF02: - ldrh r0, [r4, 0x2E] - subs r0, 0x1 - strh r0, [r4, 0x2E] - lsls r0, 16 - cmp r0, 0 - bne _080DFF14 - adds r0, r4, 0 - bl DestroyAnimSprite -_080DFF14: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_80DFE90 - - .align 2, 0 @ Don't pad with nop. diff --git a/ld_script.txt b/ld_script.txt index 0fe09e652..4775e13d6 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -296,7 +296,7 @@ SECTIONS { asm/rock.o(.text); asm/ghost.o(.text); src/battle/anim/dragon.o(.text); - asm/dragon.o(.text); + src/battle/anim/dark.o(.text); asm/dark.o(.text); asm/ground.o(.text); asm/normal.o(.text); diff --git a/src/battle/anim/dark.c b/src/battle/anim/dark.c new file mode 100755 index 000000000..306784609 --- /dev/null +++ b/src/battle/anim/dark.c @@ -0,0 +1,138 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" +#include "scanline_effect.h" + +void sub_80DFE90(struct Sprite *sprite); + +void sub_80DFC9C(u8 taskId); +void sub_80DFD58(u8 taskId); + +extern s16 gBattleAnimArgs[]; +extern u8 gAnimBankAttacker; +extern u8 gAnimBankTarget; +extern u8 gObjectBankIDs[]; + +// used in Smoke Ball escape, Sky Attack, Feint Attack and Camouflage + +void sub_80DFC24(u8 taskId) +{ + int bank; + gTasks[taskId].data[0] = gBattleAnimArgs[0]; + bank = gAnimBankAttacker; + gTasks[taskId].data[1] = 16; + REG_BLDALPHA = 16; + if (GetBankIdentity_permutated(bank) == 1) + REG_BLDCNT = 0x3F42; + else + REG_BLDCNT = 0x3F44; + gTasks[taskId].func = sub_80DFC9C; +} + +void sub_80DFC9C(u8 taskId) +{ + u8 r2 = gTasks[taskId].data[1] >> 8; + u8 r1 = gTasks[taskId].data[1]; + if (gTasks[taskId].data[2] == (u8)gTasks[taskId].data[0]) + { + r2++; + r1--; + gTasks[taskId].data[1] = (r2 << 8) | r1; + REG_BLDALPHA = (r2 << 8) | r1; + gTasks[taskId].data[2] = 0; + if (r2 == 16) + { + gSprites[gObjectBankIDs[gAnimBankAttacker]].invisible = 1; + DestroyAnimVisualTask(taskId); + } + } + else + gTasks[taskId].data[2]++; +} + +void sub_80DFD24(u8 taskId) +{ + gTasks[taskId].data[0] = gBattleAnimArgs[0]; + gTasks[taskId].data[1] = 0x1000; + gTasks[taskId].func = sub_80DFD58; + REG_BLDALPHA = 0x1000; +} + +void sub_80DFD58(u8 taskId) +{ + u8 r1 = gTasks[taskId].data[1] >> 8; + u8 r5 = gTasks[taskId].data[1]; + if (gTasks[taskId].data[2] == (u8)gTasks[taskId].data[0]) + { + r1--; + r5++; + gTasks[taskId].data[1] = (r1 << 8) | r5; + REG_BLDALPHA = (r1 << 8) | r5; + gTasks[taskId].data[2] = 0; + if (r1 == 0) + { + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + DestroyAnimVisualTask(taskId); + } + } + else + gTasks[taskId].data[2]++; +} + +// unlike the above is only used in Feint Attack + +void sub_80DFDC0(u8 taskId) +{ + REG_BLDALPHA = 0x1000; + if (GetBankIdentity_permutated(gAnimBankAttacker) == 1) + REG_BLDCNT = 0x3F42; + else + REG_BLDCNT = 0x3F44; + DestroyAnimVisualTask(taskId); +} + +// unused sprite template's callback + +void sub_80DFE14(struct Sprite *sprite) +{ + sprite->data[1] = GetBankPosition(gAnimBankTarget, 2); + sprite->data[2] = GetBankPosition(gAnimBankAttacker, 2); + sprite->data[3] = GetBankPosition(gAnimBankTarget, 3); + sprite->data[4] = GetBankPosition(gAnimBankAttacker, 3); + sprite->data[0] = 0x7E; + sub_8078A5C(sprite); + sprite->data[3] = -sprite->data[1]; + sprite->data[4] = -sprite->data[2]; + sprite->data[6] = 0xFFD8; + sprite->callback = sub_80DFE90; + sub_80DFE90(sprite); +} + +void sub_80DFE90(struct Sprite *sprite) +{ + sprite->data[3] += sprite->data[1]; + sprite->data[4] += sprite->data[2]; + sprite->pos2.x = sprite->data[3] >> 8; + sprite->pos2.y = sprite->data[4] >> 8; + if (sprite->data[7] == 0) + { + sprite->data[3] += sprite->data[1]; + sprite->data[4] += sprite->data[2]; + sprite->pos2.x = sprite->data[3] >> 8; + sprite->pos2.y = sprite->data[4] >> 8; + sprite->data[0]--; + } + sprite->pos2.y += Sin(sprite->data[5], sprite->data[6]); + sprite->data[5] = (sprite->data[5] + 3) & 0xFF; + if (sprite->data[5] > 0x7F) + { + sprite->data[5] = 0; + sprite->data[6] += 20; + sprite->data[7]++; + } + if (--sprite->data[0] == 0) + DestroyAnimSprite(sprite); +} \ No newline at end of file diff --git a/src/battle/anim/dragon.c b/src/battle/anim/dragon.c index 04859e39f..0feb27dac 100755 --- a/src/battle/anim/dragon.c +++ b/src/battle/anim/dragon.c @@ -3,7 +3,7 @@ #include "trig.h" #include "battle_anim.h" #include "sound.h" -#include "unknown_task.h" +#include "scanline_effect.h" void sub_80DF81C(struct Sprite *sprite); void sub_80DFBD8(struct Sprite *sprite); @@ -19,9 +19,10 @@ extern u8 gBankAttacker; extern u16 gBattle_BG1_X; extern u16 gBattle_BG2_X; extern u16 gUnknown_03000730[]; - +extern u8 gObjectBankIDs[]; // Outrage + void sub_80DF5A0(struct Sprite *sprite) { sprite->pos1.x = GetBankPosition(gAnimBankAttacker, 2); @@ -44,6 +45,8 @@ void sub_80DF5A0(struct Sprite *sprite) sprite->callback = sub_8078504; } +// part of Dragon Breath + void sub_80DF63C(struct Sprite *sprite) { sub_8078650(sprite); @@ -69,6 +72,8 @@ void sub_80DF63C(struct Sprite *sprite) StoreSpriteCallbackInData(sprite, move_anim_8074EE0); } +// Dragon Rage + void sub_80DF6F0(struct Sprite *sprite) { if (gBattleAnimArgs[0] == 0) @@ -87,6 +92,8 @@ void sub_80DF6F0(struct Sprite *sprite) StoreSpriteCallbackInData(sprite, move_anim_8074EE0); } +// Dragon Breath init + void sub_80DF760(struct Sprite *sprite) { if (GetBankSide(gAnimBankAttacker)) @@ -94,6 +101,8 @@ void sub_80DF760(struct Sprite *sprite) sub_80DF63C(sprite); } +//next 2 tasks might be Dragon Dance orbs? + void sub_80DF78C(struct Sprite *sprite) { u16 r5; @@ -152,25 +161,27 @@ void sub_80DF81C(struct Sprite *sprite) } } +// Dragon Dance scanline eff + void sub_80DF924(u8 taskId) { - struct UnknownTaskStruct sp; + struct ScanlineEffectParams sp; struct Task *task = &gTasks[taskId]; u16 i; u8 r1; if (GetBankIdentity_permutated(gAnimBankAttacker) == 1) { - sp.dest = ®_BG1HOFS; + sp.dmaDest = ®_BG1HOFS; task->data[2] = gBattle_BG1_X; } else { - sp.dest = ®_BG2HOFS; + sp.dmaDest = ®_BG2HOFS; task->data[2] = gBattle_BG2_X; } - sp.control = 0xA2600001; - sp.unk8 = 1; - sp.unk9 = 0; + sp.dmaControl = 0xA2600001; + sp.initState = 1; + sp.unused9 = 0; r1 = sub_8077FC0(gAnimBankAttacker); task->data[3] = r1 - 32; task->data[4] = r1 + 32; @@ -178,10 +189,10 @@ void sub_80DF924(u8 taskId) task->data[3] = 0; for(i = task->data[3];i <= task->data[4];i++) { - gUnknown_03004DE0[0][i] = task->data[2]; - gUnknown_03004DE0[1][i] = task->data[2]; + gScanlineEffectRegBuffers[0][i] = task->data[2]; + gScanlineEffectRegBuffers[1][i] = task->data[2]; } - sub_80895F8(sp); + ScanlineEffect_SetParams(sp); task->func = sub_80DF9F4; } @@ -214,7 +225,7 @@ void sub_80DF9F4(u8 taskId) sub_80DFAB0(task); break; case 3: - gUnknown_03004DC0.unk15 = 3; + gScanlineEffect.state = 3; task->data[0]++; break; case 4: @@ -229,12 +240,14 @@ void sub_80DFAB0(struct Task *task) u16 i; for (i = task->data[3]; i <= task->data[4]; i++) { - gUnknown_03004DE0[gUnknown_03004DC0.srcBank][i] = ((gSineTable[r3] * task->data[6]) >> 7) + task->data[2]; + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = ((gSineTable[r3] * task->data[6]) >> 7) + task->data[2]; r3 = (r3 + 8) & 0xFF; } task->data[5] = (task->data[5] + 9) & 0xFF; } +// Overheat + void sub_80DFB28(struct Sprite *sprite) { int r6 = (gBattleAnimArgs[2] * 3) / 5; @@ -259,4 +272,5 @@ void sub_80DFBD8(struct Sprite *sprite) sprite->pos2.y = sprite->data[5] / 10; if (++sprite->data[0] > sprite->data[3]) DestroyAnimSprite(sprite); -} \ No newline at end of file +} + -- cgit v1.2.3 From bed652ee5411efbbbdf7e0920d9fd13646ec39c1 Mon Sep 17 00:00:00 2001 From: golem galvanize Date: Thu, 11 Jan 2018 13:21:20 -0500 Subject: fixing things --- src/battle/anim/dark.c | 2 +- src/battle/anim/dragon.c | 15 +++++++-------- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/battle/anim/dark.c b/src/battle/anim/dark.c index 306784609..8ceb00298 100755 --- a/src/battle/anim/dark.c +++ b/src/battle/anim/dark.c @@ -135,4 +135,4 @@ void sub_80DFE90(struct Sprite *sprite) } if (--sprite->data[0] == 0) DestroyAnimSprite(sprite); -} \ No newline at end of file +} diff --git a/src/battle/anim/dragon.c b/src/battle/anim/dragon.c index 0feb27dac..bf39e01c0 100755 --- a/src/battle/anim/dragon.c +++ b/src/battle/anim/dragon.c @@ -127,7 +127,7 @@ void sub_80DF81C(struct Sprite *sprite) { switch (sprite->data[0]) { - case 0: + case 0: sprite->data[6] = (sprite->data[6] - sprite->data[5]) & 0xFF; sprite->pos2.x = Cos(sprite->data[6], sprite->data[7]); sprite->pos2.y = Sin(sprite->data[6], sprite->data[7]); @@ -143,7 +143,7 @@ void sub_80DF81C(struct Sprite *sprite) sprite->data[0]++; } break; - case 1: + case 1: sprite->data[6] = (sprite->data[6] - sprite->data[5]) & 0xFF; if (sprite->data[7] <= 0x95 && (sprite->data[7] += 8) > 0x95) sprite->data[7] = 0x96; @@ -201,7 +201,7 @@ void sub_80DF9F4(u8 taskId) struct Task *task = &gTasks[taskId]; switch (task->data[0]) { - case 0: + case 0: if (++task->data[7] > 1) { task->data[7] = 0; @@ -210,12 +210,12 @@ void sub_80DF9F4(u8 taskId) } sub_80DFAB0(task); break; - case 1: + case 1: if (++task->data[1] > 0x3C) task->data[0]++; sub_80DFAB0(task); break; - case 2: + case 2: if (++task->data[7] > 1) { task->data[7] = 0; @@ -224,11 +224,11 @@ void sub_80DF9F4(u8 taskId) } sub_80DFAB0(task); break; - case 3: + case 3: gScanlineEffect.state = 3; task->data[0]++; break; - case 4: + case 4: DestroyAnimVisualTask(taskId); break; } @@ -273,4 +273,3 @@ void sub_80DFBD8(struct Sprite *sprite) if (++sprite->data[0] > sprite->data[3]) DestroyAnimSprite(sprite); } - -- cgit v1.2.3