diff options
-rwxr-xr-x | asm/bug.s | 545 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/battle/anim/bug.c | 314 |
3 files changed, 313 insertions, 547 deletions
diff --git a/asm/bug.s b/asm/bug.s deleted file mode 100755 index 3d1fb8669..000000000 --- a/asm/bug.s +++ /dev/null @@ -1,545 +0,0 @@ - .include "constants/gba_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - @ bug - - thumb_func_start sub_80DCA70 -sub_80DCA70: @ 80DCA70 - push {r4,lr} - adds r4, r0, 0 - ldr r0, _080DCAA0 @ =gAnimBankTarget - ldrb r0, [r0] - adds r2, r4, 0 - adds r2, 0x20 - adds r3, r4, 0 - adds r3, 0x22 - movs r1, 0 - bl sub_807A3FC - ldr r0, _080DCAA4 @ =gAnimBankAttacker - ldrb r0, [r0] - bl GetBankSide - lsls r0, 24 - cmp r0, 0 - beq _080DCAAC - ldr r0, _080DCAA8 @ =gBattleAnimArgs - ldrh r1, [r4, 0x20] - ldrh r2, [r0] - subs r1, r2 - strh r1, [r4, 0x20] - b _080DCAB8 - .align 2, 0 -_080DCAA0: .4byte gAnimBankTarget -_080DCAA4: .4byte gAnimBankAttacker -_080DCAA8: .4byte gBattleAnimArgs -_080DCAAC: - ldr r1, _080DCAE0 @ =gBattleAnimArgs - ldrh r0, [r1] - ldrh r2, [r4, 0x20] - adds r0, r2 - strh r0, [r4, 0x20] - adds r0, r1, 0 -_080DCAB8: - ldrh r0, [r0, 0x2] - ldrh r1, [r4, 0x22] - adds r0, r1 - strh r0, [r4, 0x22] - ldr r0, _080DCAE4 @ =gAnimBankTarget - ldrb r0, [r0] - bl GetBankSide - lsls r0, 24 - cmp r0, 0 - bne _080DCAD4 - ldrh r0, [r4, 0x22] - adds r0, 0x8 - strh r0, [r4, 0x22] -_080DCAD4: - ldr r0, _080DCAE8 @ =sub_80DCAEC - str r0, [r4, 0x1C] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080DCAE0: .4byte gBattleAnimArgs -_080DCAE4: .4byte gAnimBankTarget -_080DCAE8: .4byte sub_80DCAEC - thumb_func_end sub_80DCA70 - - thumb_func_start sub_80DCAEC -sub_80DCAEC: @ 80DCAEC - push {lr} - adds r3, r0, 0 - ldrh r0, [r3, 0x2E] - adds r0, 0x1 - strh r0, [r3, 0x2E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x3 - bne _080DCB20 - movs r0, 0 - strh r0, [r3, 0x2E] - movs r0, 0x3E - adds r0, r3 - mov r12, r0 - ldrb r2, [r0] - 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 - mov r1, r12 - strb r0, [r1] -_080DCB20: - ldrh r0, [r3, 0x30] - adds r0, 0x1 - strh r0, [r3, 0x30] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x33 - bne _080DCB34 - adds r0, r3, 0 - bl DestroyAnimSprite -_080DCB34: - pop {r0} - bx r0 - thumb_func_end sub_80DCAEC - - thumb_func_start sub_80DCB38 -sub_80DCB38: @ 80DCB38 - ldr r2, _080DCB54 @ =REG_BLDCNT - movs r3, 0xFD - lsls r3, 6 - adds r1, r3, 0 - strh r1, [r2] - adds r2, 0x2 - movs r1, 0x10 - strh r1, [r2] - movs r1, 0x10 - strh r1, [r0, 0x2E] - ldr r1, _080DCB58 @ =sub_80DCB5C - str r1, [r0, 0x1C] - bx lr - .align 2, 0 -_080DCB54: .4byte REG_BLDCNT -_080DCB58: .4byte sub_80DCB5C - thumb_func_end sub_80DCB38 - - thumb_func_start sub_80DCB5C -sub_80DCB5C: @ 80DCB5C - push {lr} - adds r3, r0, 0 - ldrh r1, [r3, 0x32] - movs r2, 0x32 - ldrsh r0, [r3, r2] - cmp r0, 0x13 - bgt _080DCB70 - adds r0, r1, 0x1 - strh r0, [r3, 0x32] - b _080DCBA8 -_080DCB70: - ldrh r1, [r3, 0x30] - adds r0, r1, 0x1 - strh r0, [r3, 0x30] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080DCBA8 - ldrh r1, [r3, 0x2E] - subs r1, 0x1 - strh r1, [r3, 0x2E] - ldr r2, _080DCBAC @ =REG_BLDALPHA - movs r0, 0x10 - subs r0, r1 - lsls r0, 8 - orrs r1, r0 - strh r1, [r2] - movs r1, 0x2E - ldrsh r0, [r3, r1] - cmp r0, 0 - bne _080DCBA8 - adds r2, r3, 0 - adds r2, 0x3E - ldrb r0, [r2] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r2] - ldr r0, _080DCBB0 @ =sub_80DCBB4 - str r0, [r3, 0x1C] -_080DCBA8: - pop {r0} - bx r0 - .align 2, 0 -_080DCBAC: .4byte REG_BLDALPHA -_080DCBB0: .4byte sub_80DCBB4 - thumb_func_end sub_80DCB5C - - thumb_func_start sub_80DCBB4 -sub_80DCBB4: @ 80DCBB4 - push {lr} - ldr r1, _080DCBC8 @ =REG_BLDCNT - movs r2, 0 - strh r2, [r1] - adds r1, 0x2 - strh r2, [r1] - bl DestroyAnimSprite - pop {r0} - bx r0 - .align 2, 0 -_080DCBC8: .4byte REG_BLDCNT - thumb_func_end sub_80DCBB4 - - thumb_func_start sub_80DCBCC -sub_80DCBCC: @ 80DCBCC - push {r4-r7,lr} - sub sp, 0x4 - adds r7, r0, 0 - bl IsContest - lsls r0, 24 - cmp r0, 0 - beq _080DCBEC - ldr r1, _080DCBE8 @ =gBattleAnimArgs - ldrh r0, [r1, 0x4] - negs r0, r0 - strh r0, [r1, 0x4] - b _080DCC0E - .align 2, 0 -_080DCBE8: .4byte gBattleAnimArgs -_080DCBEC: - ldr r0, _080DCCE8 @ =gAnimBankAttacker - ldrb r0, [r0] - bl GetBankSide - lsls r0, 24 - cmp r0, 0 - beq _080DCC0E - ldr r1, _080DCCEC @ =gBattleAnimArgs - ldrh r0, [r1, 0x4] - negs r0, r0 - strh r0, [r1, 0x4] - ldrh r0, [r1, 0x2] - negs r0, r0 - strh r0, [r1, 0x2] - ldrh r0, [r1, 0x6] - negs r0, r0 - strh r0, [r1, 0x6] -_080DCC0E: - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _080DCC5E - ldr r0, _080DCCE8 @ =gAnimBankAttacker - ldrb r0, [r0] - bl GetBankSide - adds r4, r0, 0 - ldr r5, _080DCCF0 @ =gAnimBankTarget - ldrb r0, [r5] - bl GetBankSide - lsls r4, 24 - lsls r0, 24 - cmp r4, r0 - bne _080DCC5E - ldrb r0, [r5] - bl GetBankIdentity - lsls r0, 24 - cmp r0, 0 - beq _080DCC4C - ldrb r0, [r5] - bl GetBankIdentity - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080DCC5E -_080DCC4C: - ldr r0, _080DCCEC @ =gBattleAnimArgs - movs r2, 0x4 - ldrsh r1, [r0, r2] - negs r1, r1 - strh r1, [r0, 0x4] - movs r2, 0 - ldrsh r1, [r0, r2] - negs r1, r1 - strh r1, [r0] -_080DCC5E: - adds r0, r7, 0 - movs r1, 0x1 - bl sub_80787B0 - ldr r5, _080DCCF0 @ =gAnimBankTarget - ldrb r0, [r5] - movs r1, 0x2 - bl GetBankPosition - adds r4, r0, 0 - lsls r4, 24 - ldr r6, _080DCCEC @ =gBattleAnimArgs - lsrs r4, 24 - ldrh r0, [r6, 0x4] - adds r4, r0 - lsls r4, 16 - lsrs r4, 16 - ldrb r0, [r5] - movs r1, 0x3 - bl GetBankPosition - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - ldrh r2, [r6, 0x6] - adds r1, r2 - lsls r1, 16 - ldrh r2, [r7, 0x20] - lsls r0, r4, 16 - asrs r0, 16 - subs r0, r2 - lsls r0, 16 - asrs r0, 16 - ldrh r2, [r7, 0x22] - lsrs r5, r1, 16 - asrs r1, 16 - subs r1, r2 - lsls r1, 16 - asrs r1, 16 - bl sub_80790F0 - lsls r0, 16 - movs r1, 0xC0 - lsls r1, 24 - adds r0, r1 - lsrs r0, 16 - movs r3, 0x80 - lsls r3, 1 - str r0, [sp] - adds r0, r7, 0 - movs r1, 0 - adds r2, r3, 0 - bl sub_8078FDC - ldrh r0, [r6, 0x8] - strh r0, [r7, 0x2E] - strh r4, [r7, 0x32] - strh r5, [r7, 0x36] - ldr r0, _080DCCF4 @ =sub_8078B34 - str r0, [r7, 0x1C] - ldr r1, _080DCCF8 @ =DestroyAnimSprite - adds r0, r7, 0 - bl StoreSpriteCallbackInData - add sp, 0x4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080DCCE8: .4byte gAnimBankAttacker -_080DCCEC: .4byte gBattleAnimArgs -_080DCCF0: .4byte gAnimBankTarget -_080DCCF4: .4byte sub_8078B34 -_080DCCF8: .4byte DestroyAnimSprite - thumb_func_end sub_80DCBCC - - thumb_func_start sub_80DCCFC -sub_80DCCFC: @ 80DCCFC - push {r4-r6,lr} - adds r6, r0, 0 - movs r1, 0x1 - bl sub_80787B0 - ldr r0, _080DCD68 @ =gAnimBankAttacker - ldrb r0, [r0] - bl GetBankSide - lsls r0, 24 - cmp r0, 0 - beq _080DCD1C - ldr r1, _080DCD6C @ =gBattleAnimArgs - ldrh r0, [r1, 0x4] - negs r0, r0 - strh r0, [r1, 0x4] -_080DCD1C: - ldr r4, _080DCD6C @ =gBattleAnimArgs - ldrh r0, [r4, 0x8] - strh r0, [r6, 0x2E] - ldr r5, _080DCD70 @ =gAnimBankTarget - ldrb r0, [r5] - movs r1, 0x2 - bl GetBankPosition - lsls r0, 24 - lsrs r0, 24 - ldrh r1, [r4, 0x4] - adds r0, r1 - strh r0, [r6, 0x32] - ldrb r0, [r5] - movs r1, 0x3 - bl GetBankPosition - 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, _080DCD74 @ =sub_80DCD78 - str r0, [r6, 0x1C] - adds r2, r6, 0 - adds r2, 0x3E - ldrb r0, [r2] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r2] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080DCD68: .4byte gAnimBankAttacker -_080DCD6C: .4byte gBattleAnimArgs -_080DCD70: .4byte gAnimBankTarget -_080DCD74: .4byte sub_80DCD78 - thumb_func_end sub_80DCCFC - - thumb_func_start sub_80DCD78 -sub_80DCD78: @ 80DCD78 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x14 - adds r4, r0, 0 - adds r2, r4, 0 - adds r2, 0x3E - ldrb r0, [r2] - movs r1, 0x5 - negs r1, r1 - ands r1, r0 - strb r1, [r2] - adds r0, r4, 0 - bl sub_8078718 - lsls r0, 24 - cmp r0, 0 - beq _080DCDA4 - adds r0, r4, 0 - bl DestroyAnimSprite - b _080DCE34 -_080DCDA4: - movs r0, 0x2E - adds r0, r4 - mov r8, r0 - ldrh r7, [r4, 0x20] - ldrh r5, [r4, 0x24] - ldrh r1, [r4, 0x22] - mov r12, r1 - ldrh r6, [r4, 0x26] - mov r2, r8 - add r1, sp, 0x4 - movs r3, 0x7 -_080DCDBA: - ldrh r0, [r2] - strh r0, [r1] - adds r2, 0x2 - adds r1, 0x2 - subs r3, 0x1 - cmp r3, 0 - bge _080DCDBA - adds r0, r7, r5 - lsls r0, 16 - lsrs r5, r0, 16 - mov r2, r12 - adds r0, r2, r6 - lsls r0, 16 - lsrs r6, r0, 16 - adds r0, r4, 0 - bl sub_8078718 - lsls r0, 24 - cmp r0, 0 - bne _080DCE34 - ldrh r0, [r4, 0x24] - ldrh r1, [r4, 0x20] - adds r0, r1 - lsls r1, r5, 16 - asrs r1, 16 - subs r0, r1 - lsls r0, 16 - asrs r0, 16 - ldrh r1, [r4, 0x26] - ldrh r2, [r4, 0x22] - adds r1, r2 - lsls r2, r6, 16 - asrs r2, 16 - subs r1, r2 - lsls r1, 16 - asrs r1, 16 - bl sub_80790F0 - lsls r0, 16 - movs r1, 0xC0 - lsls r1, 24 - adds r0, r1 - lsrs r0, 16 - movs r3, 0x80 - lsls r3, 1 - str r0, [sp] - adds r0, r4, 0 - movs r1, 0 - adds r2, r3, 0 - bl sub_8078FDC - add r2, sp, 0x4 - mov r1, r8 - movs r3, 0x7 -_080DCE26: - ldrh r0, [r2] - strh r0, [r1] - adds r2, 0x2 - adds r1, 0x2 - subs r3, 0x1 - cmp r3, 0 - bge _080DCE26 -_080DCE34: - add sp, 0x14 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80DCD78 - - thumb_func_start sub_80DCE40 -sub_80DCE40: @ 80DCE40 - push {r4,r5,lr} - adds r5, r0, 0 - ldr r0, _080DCE54 @ =gBattleAnimArgs - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _080DCE5C - ldr r4, _080DCE58 @ =gAnimBankAttacker - b _080DCE5E - .align 2, 0 -_080DCE54: .4byte gBattleAnimArgs -_080DCE58: .4byte gAnimBankAttacker -_080DCE5C: - ldr r4, _080DCE90 @ =gAnimBankTarget -_080DCE5E: - 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 - adds r0, 0x12 - strh r0, [r5, 0x22] - ldr r1, _080DCE94 @ =move_anim_8074EE0 - adds r0, r5, 0 - bl StoreSpriteCallbackInData - ldr r0, _080DCE98 @ =sub_80785E4 - str r0, [r5, 0x1C] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080DCE90: .4byte gAnimBankTarget -_080DCE94: .4byte move_anim_8074EE0 -_080DCE98: .4byte sub_80785E4 - thumb_func_end sub_80DCE40 - - .align 2, 0 @ Don't pad with nop. diff --git a/ld_script.txt b/ld_script.txt index ba0705659..c8ede2726 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -293,7 +293,6 @@ SECTIONS { asm/flying.o(.text); asm/psychic.o(.text); src/battle/anim/bug.o(.text); - asm/bug.o(.text); asm/rock.o(.text); asm/ghost.o(.text); asm/dragon.o(.text); diff --git a/src/battle/anim/bug.c b/src/battle/anim/bug.c index e9372ed9e..3736a86a8 100644 --- a/src/battle/anim/bug.c +++ b/src/battle/anim/bug.c @@ -10,6 +10,10 @@ extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; static void sub_80DCA38(struct Sprite *sprite); +static void sub_80DCAEC(struct Sprite *sprite); +static void sub_80DCB5C(struct Sprite *sprite); +static void sub_80DCBB4(struct Sprite *sprite); +void sub_80DCD78(struct Sprite *sprite); // used in Move_MEGAHORN void sub_80DC824(struct Sprite *sprite) @@ -102,4 +106,312 @@ static void sub_80DCA38(struct Sprite *sprite) sprite->pos2.x += Sin(sprite->data[6], sprite->data[5]); sprite->data[6] = (sprite->data[6] + 13) & 0xFF; -}
\ No newline at end of file +} + +// used in Move_STRING_SHOT +void sub_80DCA70(struct Sprite *sprite) +{ + sub_807A3FC(gAnimBankTarget, 0, &sprite->pos1.x, &sprite->pos1.y); + if (GetBankSide(gAnimBankAttacker)) + sprite->pos1.x -= gBattleAnimArgs[0]; + else + sprite->pos1.x += gBattleAnimArgs[0]; + + sprite->pos1.y += gBattleAnimArgs[1]; + if (!GetBankSide(gAnimBankTarget)) + sprite->pos1.y += 8; + + sprite->callback = sub_80DCAEC; +} + +static void sub_80DCAEC(struct Sprite *sprite) +{ + if (++sprite->data[0] == 3) + { + sprite->data[0] = 0; + sprite->invisible ^= 1; + } + + if (++sprite->data[1] == 51) + { + DestroyAnimSprite(sprite); + } +} + +// used in Move_SPIDER_WEB +void sub_80DCB38(struct Sprite *sprite) +{ + REG_BLDCNT = 0x3F40; + REG_BLDALPHA = 16; + + sprite->data[0] = 16; + sprite->callback = sub_80DCB5C; +} + +static void sub_80DCB5C(struct Sprite *sprite) +{ + if (sprite->data[2] < 20) + { + sprite->data[2]++; + } + else if (sprite->data[1]++ & 1) + { + sprite->data[0]--; + REG_BLDALPHA = sprite->data[0] | ((16 - sprite->data[0]) << 8); + + if (sprite->data[0] == 0) + { + sprite->invisible = TRUE; + sprite->callback = sub_80DCBB4; + } + } +} + +static void sub_80DCBB4(struct Sprite *sprite) +{ + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + DestroyAnimSprite(sprite); +} + +// used in 3 moves: +// Move_POISON_STING, Move_TWINEEDLE, Move_SPIKE_CANNON +void sub_80DCBCC(struct Sprite *sprite) +{ + s16 lVarX, lVarY; + u16 rot; + + if (IsContest()) + { + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + } + else + { + if (GetBankSide(gAnimBankAttacker)) + { + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + gBattleAnimArgs[3] = -gBattleAnimArgs[3]; + } + } + + if (!IsContest()) + { + if (GetBankSide(gAnimBankAttacker) == GetBankSide(gAnimBankTarget)) + { + if (GetBankIdentity(gAnimBankTarget) == 0 || GetBankIdentity(gAnimBankTarget) == 1) + { + s16 temp1, temp2; + + temp1 = gBattleAnimArgs[2]; + gBattleAnimArgs[2] = -temp1; + + temp2 = gBattleAnimArgs[0]; + gBattleAnimArgs[0] = -temp2; + } + } + } + + sub_80787B0(sprite, 1); + + lVarX = GetBankPosition(gAnimBankTarget, 2) + gBattleAnimArgs[2]; + lVarY = GetBankPosition(gAnimBankTarget, 3) + gBattleAnimArgs[3]; + rot = sub_80790F0(lVarX - sprite->pos1.x, lVarY - sprite->pos1.y); + rot += 0xC000; + sub_8078FDC(sprite, FALSE, 0x100, 0x100, rot); + + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[2] = lVarX; + sprite->data[4] = lVarY; + + sprite->callback = sub_8078B34; + StoreSpriteCallbackInData(sprite, DestroyAnimSprite); +} + +// used in 2 moves: +// Move_PIN_MISSILE, Move_ICICLE_SPEAR +void sub_80DCCFC(struct Sprite *sprite) +{ + sub_80787B0(sprite, 1); + + if (GetBankSide(gAnimBankAttacker)) + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[2] = GetBankPosition(gAnimBankTarget, 2) + gBattleAnimArgs[2]; + sprite->data[4] = GetBankPosition(gAnimBankTarget, 3) + gBattleAnimArgs[3]; + sprite->data[5] = gBattleAnimArgs[5]; + sub_80786EC(sprite); + + sprite->callback = sub_80DCD78; + sprite->invisible = TRUE; +} + +#ifdef NONMATCHING +void sub_80DCD78(struct Sprite *sprite) +{ + int i; + s16 x1, x2, y1, y2; + // s16 scale; + // u16 *data; + u16 tempData[8]; + s16 rot; + + sprite->invisible = FALSE; + + if (sub_8078718(sprite)) + { + DestroyAnimSprite(sprite); + return; + } + + // data = &sprite->data[7]; + x1 = sprite->pos1.x; + x2 = sprite->pos2.x; + y1 = sprite->pos1.y; + y2 = sprite->pos2.y; + for (i = 0; i < 8; i++) + { + tempData[i] = sprite->data[i]; + } + x2 += x1; + y2 += y1; + + if (!sub_8078718(sprite)) + { + rot = sub_80790F0(sprite->pos1.x + sprite->pos2.x - x2, + sprite->pos1.y + sprite->pos2.y - y2); + rot += 0xC000; + // scale = 0x100 + sub_8078FDC(sprite, FALSE, 0x100, 0x100, rot); + + for (i = 0; i < 8; i++) + { + sprite->data[i] = tempData[1]; + } + } +} +#else +__attribute__((naked)) +void sub_80DCD78(struct Sprite *sprite) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r8\n\ + push {r7}\n\ + sub sp, 0x14\n\ + adds r4, r0, 0\n\ + adds r2, r4, 0\n\ + adds r2, 0x3E\n\ + ldrb r0, [r2]\n\ + movs r1, 0x5\n\ + negs r1, r1\n\ + ands r1, r0\n\ + strb r1, [r2]\n\ + adds r0, r4, 0\n\ + bl sub_8078718\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _080DCDA4\n\ + adds r0, r4, 0\n\ + bl DestroyAnimSprite\n\ + b _080DCE34\n\ +_080DCDA4:\n\ + movs r0, 0x2E\n\ + adds r0, r4\n\ + mov r8, r0\n\ + ldrh r7, [r4, 0x20]\n\ + ldrh r5, [r4, 0x24]\n\ + ldrh r1, [r4, 0x22]\n\ + mov r12, r1\n\ + ldrh r6, [r4, 0x26]\n\ + mov r2, r8\n\ + add r1, sp, 0x4\n\ + movs r3, 0x7\n\ +_080DCDBA:\n\ + ldrh r0, [r2]\n\ + strh r0, [r1]\n\ + adds r2, 0x2\n\ + adds r1, 0x2\n\ + subs r3, 0x1\n\ + cmp r3, 0\n\ + bge _080DCDBA\n\ + adds r0, r7, r5\n\ + lsls r0, 16\n\ + lsrs r5, r0, 16\n\ + mov r2, r12\n\ + adds r0, r2, r6\n\ + lsls r0, 16\n\ + lsrs r6, r0, 16\n\ + adds r0, r4, 0\n\ + bl sub_8078718\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + bne _080DCE34\n\ + ldrh r0, [r4, 0x24]\n\ + ldrh r1, [r4, 0x20]\n\ + adds r0, r1\n\ + lsls r1, r5, 16\n\ + asrs r1, 16\n\ + subs r0, r1\n\ + lsls r0, 16\n\ + asrs r0, 16\n\ + ldrh r1, [r4, 0x26]\n\ + ldrh r2, [r4, 0x22]\n\ + adds r1, r2\n\ + lsls r2, r6, 16\n\ + asrs r2, 16\n\ + subs r1, r2\n\ + lsls r1, 16\n\ + asrs r1, 16\n\ + bl sub_80790F0\n\ + lsls r0, 16\n\ + movs r1, 0xC0\n\ + lsls r1, 24\n\ + adds r0, r1\n\ + lsrs r0, 16\n\ + movs r3, 0x80\n\ + lsls r3, 1\n\ + str r0, [sp]\n\ + adds r0, r4, 0\n\ + movs r1, 0\n\ + adds r2, r3, 0\n\ + bl sub_8078FDC\n\ + add r2, sp, 0x4\n\ + mov r1, r8\n\ + movs r3, 0x7\n\ +_080DCE26:\n\ + ldrh r0, [r2]\n\ + strh r0, [r1]\n\ + adds r2, 0x2\n\ + adds r1, 0x2\n\ + subs r3, 0x1\n\ + cmp r3, 0\n\ + bge _080DCE26\n\ +_080DCE34:\n\ + add sp, 0x14\n\ + pop {r3}\n\ + mov r8, r3\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .syntax divided\n"); +} +#endif // NONMATCHING + +void sub_80DCE40(struct Sprite *sprite) +{ + if (gBattleAnimArgs[0] == 0) + { + sprite->pos1.x = GetBankPosition(gAnimBankAttacker, 2); + sprite->pos1.y = GetBankPosition(gAnimBankAttacker, 3) + 18; + } + else + { + sprite->pos1.x = GetBankPosition(gAnimBankTarget, 2); + sprite->pos1.y = GetBankPosition(gAnimBankTarget, 3) + 18; + } + + StoreSpriteCallbackInData(sprite, move_anim_8074EE0); + sprite->callback = sub_80785E4; +} |