diff options
author | who-knows-who <j.williams.8@warwick.ac.uk> | 2018-08-28 00:15:13 +0100 |
---|---|---|
committer | who-knows-who <j.williams.8@warwick.ac.uk> | 2018-08-28 00:15:13 +0100 |
commit | 6a7b3033eadef95b9fb8788b3bf7251bc4ee27ae (patch) | |
tree | 2e5c43ae8274b4d75b46ecd5cfa7a73ecda9bd95 | |
parent | 3abc9e3a7e7eb83e42c1cbcb5a64052b1e693466 (diff) |
Decompile flying.s
So far:
matching - 27
fakematching - 1
nonmatching - 5
-rw-r--r-- | asm/flying.s | 1351 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/battle/anim/flying.c | 2503 |
3 files changed, 2295 insertions, 1560 deletions
diff --git a/asm/flying.s b/asm/flying.s deleted file mode 100644 index aa9833f7e..000000000 --- a/asm/flying.s +++ /dev/null @@ -1,1351 +0,0 @@ - .include "constants/gba_constants.inc" - .include "include/macros.inc" - - .syntax unified - - .text - - @ flying - - - thumb_func_start sub_80DAD30 -sub_80DAD30: @ 80DAD30 - push {r4,r5,lr} - adds r4, r0, 0 - ldr r0, _080DAD78 @ =gAnimBankTarget - 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 - strb r0, [r4, 0x5] - ldr r5, _080DAD7C @ =gAnimBankAttacker - ldrb r0, [r5] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x20] - ldrb r0, [r5] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x22] - ldr r0, _080DAD80 @ =TranslateAnimSpriteToTargetMonLocation - str r0, [r4, 0x1C] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080DAD78: .4byte gAnimBankTarget -_080DAD7C: .4byte gAnimBankAttacker -_080DAD80: .4byte TranslateAnimSpriteToTargetMonLocation - thumb_func_end sub_80DAD30 - - thumb_func_start sub_80DAD84 -sub_80DAD84: @ 80DAD84 - push {r4-r7,lr} - adds r4, r0, 0 - ldr r5, _080DADCC @ =gBattleAnimArgs - ldrh r0, [r5] - strh r0, [r4, 0x30] - ldrh r0, [r5, 0x2] - strh r0, [r4, 0x32] - ldrh r0, [r5, 0x4] - strh r0, [r4, 0x34] - ldr r0, _080DADD0 @ =gMain - ldr r1, _080DADD4 @ =0x0000043d - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _080DAE44 - ldr r0, _080DADD8 @ =gBanksBySide - ldr r1, _080DADDC @ =gAnimBankTarget - ldrb r2, [r1] - adds r0, r2, r0 - ldrb r1, [r0] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080DADE0 - adds r0, r2, 0 - movs r1, 0x1 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - ldrh r5, [r5, 0x6] - adds r0, r5 - b _080DADEE - .align 2, 0 -_080DADCC: .4byte gBattleAnimArgs -_080DADD0: .4byte gMain -_080DADD4: .4byte 0x0000043d -_080DADD8: .4byte gBanksBySide -_080DADDC: .4byte gAnimBankTarget -_080DADE0: - adds r0, r2, 0 - movs r1, 0x1 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - adds r0, 0x28 -_080DADEE: - strh r0, [r4, 0x3C] - ldr r0, _080DAE1C @ =gBattleAnimArgs - movs r1, 0x8 - ldrsh r0, [r0, r1] - cmp r0, 0 - beq _080DAE24 - ldr r0, _080DAE20 @ =gAnimBankTarget - ldrb r0, [r0] - 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] - b _080DAE58 - .align 2, 0 -_080DAE1C: .4byte gBattleAnimArgs -_080DAE20: .4byte gAnimBankTarget -_080DAE24: - ldr r0, _080DAE40 @ =gAnimBankTarget - 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 - strb r0, [r4, 0x5] - b _080DAE58 - .align 2, 0 -_080DAE40: .4byte gAnimBankTarget -_080DAE44: - ldr r0, _080DAEFC @ =gAnimBankTarget - ldrb r0, [r0] - movs r1, 0x1 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - ldrh r5, [r5, 0x6] - adds r0, r5 - strh r0, [r4, 0x3C] -_080DAE58: - ldr r5, _080DAF00 @ =gSineTable - ldrh r3, [r4, 0x30] - movs r1, 0xFF - ands r1, r3 - lsls r0, r1, 1 - adds r0, r5 - ldrh r0, [r0] - movs r2, 0 - strh r0, [r4, 0x36] - adds r1, 0x40 - lsls r1, 1 - adds r1, r5 - ldrh r0, [r1] - negs r0, r0 - strh r0, [r4, 0x38] - strh r2, [r4, 0x3A] - strh r2, [r4, 0x26] - strh r2, [r4, 0x24] - ldrb r0, [r4, 0x3] - lsls r0, 26 - lsrs r6, r0, 27 - lsls r3, 16 - lsrs r3, 24 - strh r3, [r4, 0x30] - bl Random - lsls r0, 16 - asrs r7, r0, 16 - movs r0, 0x80 - lsls r0, 8 - ands r0, r7 - cmp r0, 0 - beq _080DAEA2 - ldrh r1, [r4, 0x30] - movs r0, 0xFF - subs r0, r1 - strh r0, [r4, 0x30] -_080DAEA2: - movs r0, 0x30 - ldrsh r1, [r4, r0] - lsls r0, r1, 1 - adds r0, r5 - ldrh r0, [r0] - ldr r3, _080DAF04 @ =gOamMatrices - lsls r2, r6, 3 - adds r2, r3 - adds r1, 0x40 - lsls r1, 1 - adds r1, r5 - ldrh r1, [r1] - strh r1, [r2, 0x6] - strh r1, [r2] - strh r0, [r2, 0x2] - lsls r0, 16 - asrs r0, 16 - negs r0, r0 - strh r0, [r2, 0x4] - adds r3, r4, 0 - adds r3, 0x3F - ldrb r0, [r3] - movs r1, 0x4 - orrs r0, r1 - movs r1, 0x11 - negs r1, r1 - ands r0, r1 - strb r0, [r3] - movs r0, 0x1 - ands r0, r7 - cmp r0, 0 - beq _080DAEF2 - adds r2, r4, 0 - adds r2, 0x2A - movs r1, 0x1 - movs r0, 0x1 - strb r0, [r2] - ldrb r0, [r3] - orrs r0, r1 - strb r0, [r3] -_080DAEF2: - ldr r0, _080DAF08 @ =sub_80DAF0C - str r0, [r4, 0x1C] - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080DAEFC: .4byte gAnimBankTarget -_080DAF00: .4byte gSineTable -_080DAF04: .4byte gOamMatrices -_080DAF08: .4byte sub_80DAF0C - thumb_func_end sub_80DAD84 - - thumb_func_start sub_80DAF0C -sub_80DAF0C: @ 80DAF0C - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x10 - adds r4, r0, 0 - adds r5, r4, 0 - adds r5, 0x2E - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - movs r1, 0 - mov r8, r1 - movs r7, 0 - strh r0, [r4, 0x2E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x4 - ble _080DAFF0 - movs r2, 0x36 - ldrsh r1, [r4, r2] - movs r2, 0x3A - ldrsh r0, [r4, r2] - muls r0, r1 - asrs r6, r0, 8 - strh r6, [r4, 0x24] - movs r0, 0x38 - ldrsh r1, [r4, r0] - movs r2, 0x3A - ldrsh r0, [r4, r2] - muls r0, r1 - asrs r3, r0, 8 - strh r3, [r4, 0x26] - ldrh r2, [r4, 0x34] - movs r1, 0xFF - adds r0, r1, 0 - ands r0, r2 - ldrh r2, [r4, 0x3A] - adds r0, r2 - strh r0, [r4, 0x3A] - ldrh r2, [r4, 0x32] - lsls r0, 16 - asrs r0, 16 - ands r1, r2 - cmp r0, r1 - blt _080DAFF0 - ldrh r0, [r4, 0x20] - adds r0, r6 - strh r0, [r4, 0x20] - ldrh r0, [r4, 0x22] - adds r0, r3 - strh r0, [r4, 0x22] - strh r7, [r4, 0x24] - strh r7, [r4, 0x26] - mov r0, sp - adds r1, r5, 0 - movs r2, 0x10 - bl memcpy - adds r0, r5, 0 - movs r1, 0 - movs r2, 0x10 - bl memset - ldrh r0, [r4, 0x22] - lsls r0, 8 - strh r0, [r5, 0x8] - mov r0, sp - ldrh r0, [r0, 0x6] - lsrs r1, r0, 8 - strh r1, [r5, 0x6] - strh r7, [r5, 0x2] - mov r0, sp - ldrh r0, [r0, 0x2] - strh r0, [r5, 0xA] - adds r0, r4, 0 - adds r0, 0x2A - ldrb r0, [r0] - cmp r0, 0 - beq _080DAFC0 - movs r0, 0x8 - ands r1, r0 - cmp r1, 0 - beq _080DAFB8 - ldr r0, _080DAFB4 @ =0x00008001 - b _080DAFCE - .align 2, 0 -_080DAFB4: .4byte 0x00008001 -_080DAFB8: - ldr r0, _080DAFBC @ =0x00008002 - b _080DAFCE - .align 2, 0 -_080DAFBC: .4byte 0x00008002 -_080DAFC0: - movs r0, 0x8 - ands r1, r0 - cmp r1, 0 - beq _080DAFCC - movs r0, 0x1 - b _080DAFCE -_080DAFCC: - movs r0, 0x2 -_080DAFCE: - strh r0, [r5, 0x4] - mov r0, sp - ldrh r0, [r0, 0x4] - lsrs r0, 8 - strb r0, [r5, 0xC] - subs r0, 0x2 - strb r0, [r5, 0xD] - mov r0, sp - ldrh r1, [r0, 0xE] - lsls r1, 1 - ldrh r2, [r5, 0xE] - movs r0, 0x1 - ands r0, r2 - orrs r0, r1 - strh r0, [r5, 0xE] - ldr r0, _080DAFFC @ =sub_80DA6F0 - str r0, [r4, 0x1C] -_080DAFF0: - add sp, 0x10 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080DAFFC: .4byte sub_80DA6F0 - thumb_func_end sub_80DAF0C - - thumb_func_start sub_80DB000 -sub_80DB000: @ 80DB000 - push {r4,r5,lr} - adds r5, r0, 0 - ldr r0, _080DB018 @ =gBattleAnimArgs - movs r1, 0x4 - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _080DB01C - adds r0, r5, 0 - movs r1, 0 - bl InitAnimSpritePos - b _080DB024 - .align 2, 0 -_080DB018: .4byte gBattleAnimArgs -_080DB01C: - adds r0, r5, 0 - movs r1, 0 - bl sub_8078764 -_080DB024: - ldr r4, _080DB08C @ =gBattleAnimArgs - movs r2, 0x4 - ldrsh r0, [r4, r2] - cmp r0, 0 - bne _080DB03C - ldr r0, _080DB090 @ =gAnimBankAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080DB052 -_080DB03C: - movs r1, 0x4 - ldrsh r0, [r4, r1] - cmp r0, 0x1 - bne _080DB058 - ldr r0, _080DB094 @ =gAnimBankTarget - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _080DB058 -_080DB052: - ldrh r0, [r5, 0x20] - adds r0, 0x8 - strh r0, [r5, 0x20] -_080DB058: - ldr r4, _080DB08C @ =gBattleAnimArgs - ldrb r1, [r4, 0x8] - adds r0, r5, 0 - bl SeekSpriteAnim - ldrh r0, [r5, 0x20] - subs r0, 0x20 - strh r0, [r5, 0x20] - ldr r0, _080DB098 @ =0x00000ccc - strh r0, [r5, 0x30] - ldrh r1, [r4, 0x8] - movs r0, 0xC - adds r2, r0, 0 - muls r2, r1 - adds r0, r2, 0 - ldrh r2, [r5, 0x24] - adds r0, r2 - strh r0, [r5, 0x24] - strh r1, [r5, 0x2E] - ldrh r0, [r4, 0x6] - strh r0, [r5, 0x3C] - ldr r0, _080DB09C @ =sub_80DB0A0 - str r0, [r5, 0x1C] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080DB08C: .4byte gBattleAnimArgs -_080DB090: .4byte gAnimBankAttacker -_080DB094: .4byte gAnimBankTarget -_080DB098: .4byte 0x00000ccc -_080DB09C: .4byte sub_80DB0A0 - thumb_func_end sub_80DB000 - - thumb_func_start sub_80DB0A0 -sub_80DB0A0: @ 80DB0A0 - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x30] - lsls r0, 16 - asrs r0, 24 - ldrh r1, [r4, 0x24] - adds r0, r1 - movs r1, 0 - strh r0, [r4, 0x24] - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x6 - bne _080DB0CA - strh r1, [r4, 0x2E] - strh r1, [r4, 0x24] - adds r0, r4, 0 - bl StartSpriteAnim -_080DB0CA: - ldrh r0, [r4, 0x3C] - subs r0, 0x1 - strh r0, [r4, 0x3C] - lsls r0, 16 - asrs r0, 16 - movs r1, 0x1 - negs r1, r1 - cmp r0, r1 - bne _080DB0E2 - adds r0, r4, 0 - bl DestroyAnimSprite -_080DB0E2: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80DB0A0 - - thumb_func_start sub_80DB0E8 -sub_80DB0E8: @ 80DB0E8 - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsrs r0, 24 - adds r6, r0, 0 - ldr r1, _080DB180 @ =gTasks - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - adds r7, r0, r1 - ldrh r0, [r7, 0x8] - movs r1, 0x1F - ands r0, r1 - cmp r0, 0 - bne _080DB162 - ldr r1, _080DB184 @ =gAnimVisualTaskCount - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - movs r1, 0x8 - ldrsh r0, [r7, r1] - movs r5, 0xD - negs r5, r5 - adds r1, r5, 0 - bl Sin - ldr r4, _080DB188 @ =gBattleAnimArgs - strh r0, [r4] - movs r1, 0x8 - ldrsh r0, [r7, r1] - adds r1, r5, 0 - bl Cos - strh r0, [r4, 0x2] - movs r0, 0x1 - strh r0, [r4, 0x4] - movs r0, 0x3 - strh r0, [r4, 0x6] - ldr r0, _080DB18C @ =gBattleAnimSpriteTemplate_83DB538 - mov r8, r0 - ldr r5, _080DB190 @ =gAnimBankTarget - ldrb r0, [r5] - movs r1, 0x2 - bl GetBattlerSpriteCoord - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldrb r0, [r5] - movs r1, 0x3 - bl GetBattlerSpriteCoord - adds r2, r0, 0 - lsls r2, 24 - lsrs r2, 24 - mov r0, r8 - adds r1, r4, 0 - movs r3, 0x3 - bl CreateSpriteAndAnimate -_080DB162: - ldrh r0, [r7, 0x8] - adds r0, 0x8 - strh r0, [r7, 0x8] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xFF - ble _080DB176 - adds r0, r6, 0 - bl DestroyAnimVisualTask -_080DB176: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080DB180: .4byte gTasks -_080DB184: .4byte gAnimVisualTaskCount -_080DB188: .4byte gBattleAnimArgs -_080DB18C: .4byte gBattleAnimSpriteTemplate_83DB538 -_080DB190: .4byte gAnimBankTarget - thumb_func_end sub_80DB0E8 - - thumb_func_start sub_80DB194 -sub_80DB194: @ 80DB194 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x2E - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _080DB1A6 - cmp r0, 0x1 - beq _080DB1D8 - b _080DB1EC -_080DB1A6: - adds r0, r4, 0 - movs r1, 0x1 - bl InitAnimSpritePos - movs r0, 0 - bl GetAnimBattlerSpriteId - ldr r2, _080DB1D4 @ =gSprites - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - adds r1, 0x3E - ldrb r0, [r1] - movs r2, 0x4 - orrs r0, r2 - strb r0, [r1] - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - b _080DB1EC - .align 2, 0 -_080DB1D4: .4byte gSprites -_080DB1D8: - adds r0, r4, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _080DB1EC - adds r0, r4, 0 - bl DestroyAnimSprite -_080DB1EC: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80DB194 - - thumb_func_start sub_80DB1F4 -sub_80DB1F4: @ 80DB1F4 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x2E - ldrsh r0, [r4, r1] - cmp r0, 0x1 - beq _080DB22C - cmp r0, 0x1 - bgt _080DB20A - cmp r0, 0 - beq _080DB210 - b _080DB27E -_080DB20A: - cmp r0, 0x2 - beq _080DB240 - b _080DB27E -_080DB210: - ldr r0, _080DB228 @ =gAnimBankTarget - ldrb r0, [r0] - movs r1, 0x1 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x22] - negs r0, r0 - subs r0, 0x20 - strh r0, [r4, 0x26] - b _080DB238 - .align 2, 0 -_080DB228: .4byte gAnimBankTarget -_080DB22C: - ldrh r0, [r4, 0x26] - adds r0, 0xA - strh r0, [r4, 0x26] - lsls r0, 16 - cmp r0, 0 - blt _080DB27E -_080DB238: - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - b _080DB27E -_080DB240: - ldrh r0, [r4, 0x26] - subs r0, 0xA - strh r0, [r4, 0x26] - movs r2, 0x22 - ldrsh r0, [r4, r2] - movs r2, 0x26 - ldrsh r1, [r4, r2] - adds r0, r1 - movs r1, 0x20 - negs r1, r1 - cmp r0, r1 - bge _080DB27E - movs r0, 0 - bl GetAnimBattlerSpriteId - ldr r2, _080DB284 @ =gSprites - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - adds r1, 0x3E - ldrb r2, [r1] - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - strb r0, [r1] - adds r0, r4, 0 - bl DestroyAnimSprite -_080DB27E: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080DB284: .4byte gSprites - thumb_func_end sub_80DB1F4 - - thumb_func_start sub_80DB288 -sub_80DB288: @ 80DB288 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x1 - bl InitAnimSpritePos - ldr r1, _080DB2C4 @ =gBattleAnimArgs - ldrh r0, [r1, 0x4] - strh r0, [r4, 0x2E] - ldrh r0, [r1, 0x6] - strh r0, [r4, 0x30] - ldr r0, _080DB2C8 @ =sub_80DB2D0 - str r0, [r4, 0x1C] - movs r0, 0 - bl GetAnimBattlerSpriteId - ldr r2, _080DB2CC @ =gSprites - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - adds r1, 0x3E - ldrb r0, [r1] - movs r2, 0x4 - orrs r0, r2 - strb r0, [r1] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080DB2C4: .4byte gBattleAnimArgs -_080DB2C8: .4byte sub_80DB2D0 -_080DB2CC: .4byte gSprites - thumb_func_end sub_80DB288 - - thumb_func_start sub_80DB2D0 -sub_80DB2D0: @ 80DB2D0 - push {lr} - adds r2, r0, 0 - ldrh r1, [r2, 0x2E] - movs r3, 0x2E - ldrsh r0, [r2, r3] - cmp r0, 0 - ble _080DB2E4 - subs r0, r1, 0x1 - strh r0, [r2, 0x2E] - b _080DB328 -_080DB2E4: - movs r1, 0x22 - ldrsh r0, [r2, r1] - movs r3, 0x26 - ldrsh r1, [r2, r3] - adds r0, r1 - movs r1, 0x20 - negs r1, r1 - cmp r0, r1 - ble _080DB30A - ldrh r0, [r2, 0x30] - ldrh r1, [r2, 0x32] - adds r0, r1 - strh r0, [r2, 0x32] - lsls r0, 16 - asrs r0, 24 - ldrh r1, [r2, 0x26] - subs r1, r0 - strh r1, [r2, 0x26] - b _080DB328 -_080DB30A: - adds r3, r2, 0 - adds r3, 0x3E - ldrb r0, [r3] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r3] - ldrh r0, [r2, 0x34] - adds r1, r0, 0x1 - strh r1, [r2, 0x34] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x14 - ble _080DB328 - ldr r0, _080DB32C @ =sub_80DB330 - str r0, [r2, 0x1C] -_080DB328: - pop {r0} - bx r0 - .align 2, 0 -_080DB32C: .4byte sub_80DB330 - thumb_func_end sub_80DB2D0 - - thumb_func_start sub_80DB330 -sub_80DB330: @ 80DB330 - push {lr} - adds r2, r0, 0 - ldrh r0, [r2, 0x32] - lsls r0, 16 - asrs r0, 24 - ldrh r1, [r2, 0x26] - adds r0, r1 - strh r0, [r2, 0x26] - movs r3, 0x22 - ldrsh r0, [r2, r3] - movs r3, 0x26 - ldrsh r1, [r2, r3] - adds r0, r1 - movs r1, 0x20 - negs r1, r1 - cmp r0, r1 - ble _080DB360 - adds r3, r2, 0 - adds r3, 0x3E - ldrb r1, [r3] - movs r0, 0x5 - negs r0, r0 - ands r0, r1 - strb r0, [r3] -_080DB360: - movs r1, 0x26 - ldrsh r0, [r2, r1] - cmp r0, 0 - ble _080DB36E - adds r0, r2, 0 - bl DestroyAnimSprite -_080DB36E: - pop {r0} - bx r0 - thumb_func_end sub_80DB330 - - thumb_func_start sub_80DB374 -sub_80DB374: @ 80DB374 - push {r4,r5,lr} - sub sp, 0x4 - adds r5, r0, 0 - movs r1, 0x2E - ldrsh r0, [r5, r1] - cmp r0, 0 - beq _080DB388 - cmp r0, 0x1 - beq _080DB3E0 - b _080DB44C -_080DB388: - ldr r0, _080DB398 @ =gBattleAnimArgs - movs r2, 0 - ldrsh r0, [r0, r2] - cmp r0, 0 - bne _080DB3A0 - ldr r4, _080DB39C @ =gAnimBankAttacker - b _080DB3A2 - .align 2, 0 -_080DB398: .4byte gBattleAnimArgs -_080DB39C: .4byte gAnimBankAttacker -_080DB3A0: - ldr r4, _080DB3DC @ =gAnimBankTarget -_080DB3A2: - ldrb r0, [r4] - movs r1, 0 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x20] - ldrb r0, [r4] - movs r1, 0x1 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x22] - movs r0, 0 - movs r3, 0x80 - lsls r3, 2 - strh r3, [r5, 0x30] - movs r2, 0x80 - lsls r2, 1 - str r0, [sp] - adds r0, r5, 0 - movs r1, 0 - bl sub_8078FDC - ldrh r0, [r5, 0x2E] - adds r0, 0x1 - strh r0, [r5, 0x2E] - b _080DB44C - .align 2, 0 -_080DB3DC: .4byte gAnimBankTarget -_080DB3E0: - movs r1, 0x32 - ldrsh r0, [r5, r1] - cmp r0, 0xB - bgt _080DB3EE - ldrh r0, [r5, 0x30] - subs r0, 0x28 - b _080DB3F2 -_080DB3EE: - ldrh r0, [r5, 0x30] - adds r0, 0x28 -_080DB3F2: - strh r0, [r5, 0x30] - ldrh r0, [r5, 0x32] - adds r0, 0x1 - movs r1, 0 - strh r0, [r5, 0x32] - movs r2, 0x80 - lsls r2, 1 - movs r0, 0x30 - ldrsh r3, [r5, r0] - str r1, [sp] - adds r0, r5, 0 - bl sub_8078FDC - ldrb r1, [r5, 0x3] - lsls r1, 26 - lsrs r1, 27 - movs r0, 0xF4 - lsls r0, 6 - ldr r2, _080DB454 @ =gOamMatrices - lsls r1, 3 - adds r1, r2 - movs r2, 0x6 - ldrsh r1, [r1, r2] - bl __divsi3 - adds r1, r0, 0x1 - cmp r1, 0x80 - ble _080DB42C - movs r1, 0x80 -_080DB42C: - movs r0, 0x40 - subs r0, r1 - lsrs r1, r0, 31 - adds r0, r1 - asrs r1, r0, 1 - strh r1, [r5, 0x26] - movs r1, 0x32 - ldrsh r0, [r5, r1] - cmp r0, 0x18 - bne _080DB44C - adds r0, r5, 0 - bl sub_8079098 - adds r0, r5, 0 - bl DestroyAnimSprite -_080DB44C: - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080DB454: .4byte gOamMatrices - thumb_func_end sub_80DB374 - - thumb_func_start sub_80DB458 -sub_80DB458: @ 80DB458 - push {r4,r5,lr} - adds r5, r0, 0 - bl Random - ldr r4, _080DB47C @ =0x000001ff - ands r4, r0 - bl Random - movs r1, 0x7F - ands r1, r0 - movs r0, 0x1 - ands r0, r4 - cmp r0, 0 - beq _080DB480 - movs r2, 0xB8 - lsls r2, 2 - adds r0, r4, r2 - b _080DB488 - .align 2, 0 -_080DB47C: .4byte 0x000001ff -_080DB480: - movs r2, 0xB8 - lsls r2, 2 - adds r0, r2, 0 - subs r0, r4 -_080DB488: - strh r0, [r5, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080DB49C - movs r2, 0xE0 - lsls r2, 2 - adds r0, r2, 0 - adds r0, r1, r0 - b _080DB4A4 -_080DB49C: - movs r2, 0xE0 - lsls r2, 2 - adds r0, r2, 0 - subs r0, r1 -_080DB4A4: - strh r0, [r5, 0x30] - ldr r2, _080DB4CC @ =gBattleAnimArgs - ldrh r0, [r2] - strh r0, [r5, 0x32] - lsls r0, 16 - cmp r0, 0 - beq _080DB4C0 - ldrb r0, [r5, 0x3] - movs r1, 0x3F - negs r1, r1 - ands r1, r0 - movs r0, 0x10 - orrs r1, r0 - strb r1, [r5, 0x3] -_080DB4C0: - movs r1, 0x2 - ldrsh r0, [r2, r1] - cmp r0, 0 - bne _080DB4D4 - ldr r4, _080DB4D0 @ =gAnimBankAttacker - b _080DB4D6 - .align 2, 0 -_080DB4CC: .4byte gBattleAnimArgs -_080DB4D0: .4byte gAnimBankAttacker -_080DB4D4: - ldr r4, _080DB500 @ =gAnimBankTarget -_080DB4D6: - ldrb r0, [r4] - movs r1, 0 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x20] - ldrb r0, [r4] - movs r1, 0x1 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - adds r0, 0x20 - strh r0, [r5, 0x22] - ldr r0, _080DB504 @ =sub_80DB508 - str r0, [r5, 0x1C] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080DB500: .4byte gAnimBankTarget -_080DB504: .4byte sub_80DB508 - thumb_func_end sub_80DB458 - - thumb_func_start sub_80DB508 -sub_80DB508: @ 80DB508 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x32 - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _080DB520 - ldrh r3, [r4, 0x2E] - lsls r0, r3, 16 - asrs r0, 24 - ldrh r1, [r4, 0x24] - adds r0, r1 - b _080DB52A -_080DB520: - ldrh r3, [r4, 0x2E] - lsls r1, r3, 16 - asrs r1, 24 - ldrh r0, [r4, 0x24] - subs r0, r1 -_080DB52A: - strh r0, [r4, 0x24] - ldrh r2, [r4, 0x30] - lsls r1, r2, 16 - asrs r1, 24 - ldrh r0, [r4, 0x26] - subs r0, r1 - strh r0, [r4, 0x26] - strh r3, [r4, 0x2E] - adds r0, r2, 0 - subs r0, 0x20 - strh r0, [r4, 0x30] - lsls r0, r3, 16 - cmp r0, 0 - bge _080DB54A - movs r0, 0 - strh r0, [r4, 0x2E] -_080DB54A: - ldrh r0, [r4, 0x34] - adds r0, 0x1 - strh r0, [r4, 0x34] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1F - bne _080DB55E - adds r0, r4, 0 - bl DestroyAnimSprite -_080DB55E: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80DB508 - - thumb_func_start sub_80DB564 -sub_80DB564: @ 80DB564 - movs r1, 0 - strh r1, [r0, 0x3A] - movs r1, 0x40 - strh r1, [r0, 0x3C] - ldr r1, _080DB574 @ =sub_80DB578 - str r1, [r0, 0x1C] - bx lr - .align 2, 0 -_080DB574: .4byte sub_80DB578 - thumb_func_end sub_80DB564 - - thumb_func_start sub_80DB578 -sub_80DB578: @ 80DB578 - push {lr} - adds r3, r0, 0 - movs r0, 0x2E - ldrsh r1, [r3, r0] - cmp r1, 0 - beq _080DB58A - cmp r1, 0x1 - beq _080DB5D8 - b _080DB5DE -_080DB58A: - ldrh r0, [r3, 0x30] - adds r0, 0x1 - strh r0, [r3, 0x30] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x8 - ble _080DB5DE - strh r1, [r3, 0x30] - movs r1, 0x3E - adds r1, r3 - mov r12, r1 - ldrb r2, [r1] - 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] - ldrh r0, [r3, 0x32] - adds r0, 0x1 - strh r0, [r3, 0x32] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x5 - ble _080DB5DE - ldrb r1, [r1] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _080DB5DE - ldrh r0, [r3, 0x2E] - adds r0, 0x1 - strh r0, [r3, 0x2E] - b _080DB5DE -_080DB5D8: - adds r0, r3, 0 - bl DestroyAnimSprite -_080DB5DE: - pop {r0} - bx r0 - thumb_func_end sub_80DB578 - - thumb_func_start sub_80DB5E4 -sub_80DB5E4: @ 80DB5E4 - push {r4-r6,lr} - mov r6, r9 - mov r5, r8 - push {r5,r6} - sub sp, 0x4 - mov r8, r0 - ldrh r4, [r0, 0x20] - ldrh r5, [r0, 0x22] - ldr r6, _080DB698 @ =gAnimBankAttacker - ldrb r0, [r6] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - mov r1, r8 - strh r0, [r1, 0x20] - ldrb r0, [r6] - movs r1, 0x3 - bl GetBattlerSpriteCoord - adds r6, r0, 0 - lsls r6, 24 - lsrs r6, 24 - mov r2, r8 - strh r6, [r2, 0x22] - ldrh r0, [r2, 0x20] - mov r9, r0 - mov r1, r9 - lsls r0, r1, 4 - strh r0, [r2, 0x36] - lsls r0, r6, 4 - strh r0, [r2, 0x38] - lsls r4, 16 - asrs r4, 16 - movs r1, 0x20 - ldrsh r0, [r2, r1] - subs r0, r4, r0 - lsls r0, 4 - movs r1, 0xC - bl __divsi3 - mov r2, r8 - strh r0, [r2, 0x3A] - lsls r5, 16 - asrs r5, 16 - movs r1, 0x22 - ldrsh r0, [r2, r1] - subs r0, r5, r0 - lsls r0, 4 - movs r1, 0xC - bl __divsi3 - mov r2, r8 - strh r0, [r2, 0x3C] - mov r0, r9 - subs r4, r0 - lsls r4, 16 - asrs r4, 16 - subs r5, r6 - lsls r5, 16 - asrs r5, 16 - adds r0, r4, 0 - adds r1, r5, 0 - bl ArcTan2Neg - lsls r0, 16 - movs r1, 0xC0 - lsls r1, 24 - adds r0, r1 - lsrs r0, 16 - movs r3, 0x80 - lsls r3, 1 - str r0, [sp] - mov r0, r8 - movs r1, 0x1 - adds r2, r3, 0 - bl sub_8078FDC - ldr r0, _080DB69C @ =sub_80DB6A0 - mov r2, r8 - str r0, [r2, 0x1C] - add sp, 0x4 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080DB698: .4byte gAnimBankAttacker -_080DB69C: .4byte sub_80DB6A0 - thumb_func_end sub_80DB5E4 - - thumb_func_start sub_80DB6A0 -sub_80DB6A0: @ 80DB6A0 - push {lr} - adds r2, r0, 0 - ldrh r0, [r2, 0x3A] - ldrh r1, [r2, 0x36] - adds r0, r1 - strh r0, [r2, 0x36] - ldrh r1, [r2, 0x3C] - ldrh r3, [r2, 0x38] - adds r1, r3 - strh r1, [r2, 0x38] - lsls r0, 16 - asrs r0, 20 - strh r0, [r2, 0x20] - lsls r1, 16 - asrs r3, r1, 20 - strh r3, [r2, 0x22] - adds r0, 0x2D - lsls r0, 16 - movs r1, 0xA5 - lsls r1, 17 - cmp r0, r1 - bhi _080DB6DA - adds r1, r3, 0 - cmp r1, 0x9D - bgt _080DB6DA - movs r0, 0x2D - negs r0, r0 - cmp r1, r0 - bge _080DB6E0 -_080DB6DA: - adds r0, r2, 0 - bl move_anim_8074EE0 -_080DB6E0: - pop {r0} - bx r0 - thumb_func_end sub_80DB6A0 - - thumb_func_start unref_sub_80DB6E4 -unref_sub_80DB6E4: @ 80DB6E4 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _080DB714 @ =gBattleAnimArgs - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _080DB71C - movs r0, 0 - bl GetAnimBattlerSpriteId - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080DB718 @ =gSprites - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - adds r1, 0x3E - ldrb r0, [r1] - movs r2, 0x4 - orrs r0, r2 - b _080DB73A - .align 2, 0 -_080DB714: .4byte gBattleAnimArgs -_080DB718: .4byte gSprites -_080DB71C: - movs r0, 0 - bl GetAnimBattlerSpriteId - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080DB748 @ =gSprites - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - adds r1, 0x3E - ldrb r2, [r1] - movs r0, 0x5 - negs r0, r0 - ands r0, r2 -_080DB73A: - strb r0, [r1] - adds r0, r4, 0 - bl DestroyAnimVisualTask - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080DB748: .4byte gSprites - thumb_func_end unref_sub_80DB6E4 - - .align 2, 0 @ Don't pad with nop. diff --git a/ld_script.txt b/ld_script.txt index 364cd4469..88bbd3d4c 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -283,7 +283,6 @@ SECTIONS { src/battle/anim/fight.o(.text); src/battle/anim/poison.o(.text); src/battle/anim/flying.o(.text); - asm/flying.o(.text); src/battle/anim/psychic.o(.text); src/battle/anim/bug.o(.text); src/battle/anim/rock.o(.text); diff --git a/src/battle/anim/flying.c b/src/battle/anim/flying.c index 957975123..ccba5bb0a 100644 --- a/src/battle/anim/flying.c +++ b/src/battle/anim/flying.c @@ -5,12 +5,15 @@ #include "rom_8077ABC.h" #include "trig.h" #include "main.h" +#include "random.h" extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; extern u8 gAnimVisualTaskCount; extern struct OamMatrix gOamMatrices[]; +extern u8 gBanksBySide[]; +extern const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB538; void sub_80785E4(struct Sprite *sprite); void sub_80DA034(struct Sprite *sprite); @@ -23,16 +26,24 @@ void sub_80DA348(struct Sprite *sprite); void sub_80DA38C(struct Sprite *sprite); void sub_80DA4D8(struct Sprite *sprite); void sub_80DA410(struct Sprite *sprite); +void sub_80DA6F0(struct Sprite *sprite); void sub_80DAD30(struct Sprite *sprite); void sub_80DAD84(struct Sprite *sprite); +void sub_80DAF0C(struct Sprite *sprite); void sub_80DB000(struct Sprite *sprite); +void sub_80DB0A0(struct Sprite *sprite); void sub_80DB194(struct Sprite *sprite); void sub_80DB1F4(struct Sprite *sprite); void sub_80DB288(struct Sprite *sprite); +void sub_80DB2D0(struct Sprite *sprite); +void sub_80DB330(struct Sprite *sprite); void sub_80DB374(struct Sprite *sprite); void sub_80DB458(struct Sprite *sprite); +void sub_80DB508(struct Sprite *sprite); void sub_80DB564(struct Sprite *sprite); +void sub_80DB578(struct Sprite *sprite); void sub_80DB5E4(struct Sprite *sprite); +void sub_80DB6A0(struct Sprite *sprite); void sub_80DA0DC(u8 taskId); @@ -106,7 +117,7 @@ const union AffineAnimCmd gSpriteAffineAnim_83DA3FC[] = const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA424[] = { - gSpriteAffineAnim_83DA3FC, + gSpriteAffineAnim_83DA3FC, }; const union AffineAnimCmd gSpriteAffineAnim_83DA428[] = @@ -358,7 +369,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA65C = .callback = sub_80DB5E4, }; -void sub_80DA034(struct Sprite *sprite) +void sub_80DA034(struct Sprite *sprite) { sub_8078764(sprite, 0); sprite->pos1.y += 20; @@ -367,18 +378,16 @@ void sub_80DA034(struct Sprite *sprite) sub_80DA05C(sprite); } -void sub_80DA05C(struct Sprite *sprite) -{ +void sub_80DA05C(struct Sprite *sprite) { sprite->pos2.x = Sin(sprite->data[1], 0x20); sprite->pos2.y = Cos(sprite->data[1], 0x8); sprite->data[1] = (sprite->data[1] + 5) & 0xFF; - if(++sprite->data[0] == 0x47) - { + if (++sprite->data[0] == 0x47) { DestroyAnimSprite(sprite); } } -void sub_80DA09C(u8 taskId) +void sub_80DA09C(u8 taskId) { gTasks[taskId].data[0] = gBattleAnimArgs[1]; gTasks[taskId].data[1] = gBattleAnimArgs[0]; @@ -386,113 +395,43 @@ void sub_80DA09C(u8 taskId) gTasks[taskId].func = sub_80DA0DC; } -#ifdef NONMATCHING void sub_80DA0DC(u8 taskId) { - gTasks[taskId].data[10]++; - if(gTasks[taskId].data[10] == gTasks[taskId].data[1]) + u8 data2; + u16 temp; + int i, base; + + if (gTasks[taskId].data[10]++ == gTasks[taskId].data[1]) { - u16 r0; - u16 r2; - s32 i; - gTasks[taskId].data[10] = 0; - r0 = gTasks[taskId].data[2]; - r2 = gPlttBufferFaded[r0 * 8]; - for(i = 0; i < 8; i++) - gPlttBufferFaded[r0 * 8 + i + 0x107] = gPlttBufferFaded[r0 * 8 + i + 0x107]; - gTasks[taskId].data[2] = ((r0 + 0x101) * 2) + r2; + + data2 = gTasks[taskId].data[2]; + temp = gPlttBufferFaded[16 * data2 + 0x108]; + + i = 7; + base = data2 * 16; + + do { + gPlttBufferFaded[base + 0x101 + i] = gPlttBufferFaded[base + 0x100 + i]; + i--; + } while (i > 0); + + gPlttBufferFaded[base + 0x101] = temp; } - gTasks[taskId].data[0] = gTasks[taskId].data[0] * 32; - if(gTasks[taskId].data[0] == 0) + + if (--gTasks[taskId].data[0] == 0) { DestroyAnimVisualTask(taskId); } } -#else -NAKED -void sub_80DA0DC(u8 taskId) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - lsls r0, 24\n\ - lsrs r5, r0, 24\n\ - ldr r2, _080DA15C @ =gTasks\n\ - lsls r0, r5, 2\n\ - adds r0, r5\n\ - lsls r0, 3\n\ - adds r3, r0, r2\n\ - ldrh r0, [r3, 0x1C]\n\ - adds r1, r0, 0x1\n\ - strh r1, [r3, 0x1C]\n\ - lsls r0, 16\n\ - asrs r0, 16\n\ - movs r4, 0xA\n\ - ldrsh r1, [r3, r4]\n\ - adds r7, r2, 0\n\ - cmp r0, r1\n\ - bne _080DA13A\n\ - movs r0, 0\n\ - strh r0, [r3, 0x1C]\n\ - ldrb r0, [r3, 0xC]\n\ - ldr r2, _080DA160 @ =gPlttBufferFaded\n\ - lsls r0, 4\n\ - movs r3, 0x84\n\ - lsls r3, 1\n\ - adds r1, r0, r3\n\ - lsls r1, 1\n\ - adds r1, r2\n\ - ldrh r6, [r1]\n\ - movs r4, 0x7\n\ - mov r12, r0\n\ - ldr r0, _080DA164 @ =0x00000107\n\ - add r0, r12\n\ - lsls r0, 1\n\ - adds r3, r0, r2\n\ -_080DA122:\n\ - ldrh r0, [r3]\n\ - strh r0, [r1]\n\ - subs r3, 0x2\n\ - subs r1, 0x2\n\ - subs r4, 0x1\n\ - cmp r4, 0\n\ - bgt _080DA122\n\ - ldr r0, _080DA168 @ =0x00000101\n\ - add r0, r12\n\ - lsls r0, 1\n\ - adds r0, r2\n\ - strh r6, [r0]\n\ -_080DA13A:\n\ - lsls r0, r5, 2\n\ - adds r0, r5\n\ - lsls r0, 3\n\ - adds r0, r7\n\ - ldrh r1, [r0, 0x8]\n\ - subs r1, 0x1\n\ - strh r1, [r0, 0x8]\n\ - lsls r1, 16\n\ - cmp r1, 0\n\ - bne _080DA154\n\ - adds r0, r5, 0\n\ - bl DestroyAnimVisualTask\n\ -_080DA154:\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080DA15C: .4byte gTasks\n\ -_080DA160: .4byte gPlttBufferFaded\n\ -_080DA164: .4byte 0x00000107\n\ -_080DA168: .4byte 0x00000101\n\ - .syntax divided\n"); -} -#endif void sub_80DA16C(struct Sprite *sprite) { InitAnimSpritePos(sprite, 1); if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER) + { gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + } sprite->data[0] = gBattleAnimArgs[4]; sprite->data[1] = sprite->pos1.x; sprite->data[2] = GetBattlerSpriteCoord(gAnimBankTarget, 2) + gBattleAnimArgs[2]; @@ -503,10 +442,8 @@ void sub_80DA16C(struct Sprite *sprite) StoreSpriteCallbackInData(sprite, sub_80DA1EC); } -void sub_80DA1EC(struct Sprite *sprite) -{ - if (TranslateAnimLinear(sprite) != 0) - { +void sub_80DA1EC(struct Sprite *sprite) { + if (TranslateAnimLinear(sprite) != 0) { DestroyAnimSprite(sprite); } } @@ -607,14 +544,14 @@ void sub_80DA410(struct Sprite *sprite) sprite->data[0] = 1; TranslateAnimLinear(sprite); - if (((u16)sprite->data[3] >> 8) > 200) + if (((u16) sprite->data[3] >> 8) > 200) { sprite->pos1.x += sprite->pos2.x; sprite->pos2.x = 0; sprite->data[3] &= 0xFF; } - if ((u32)(sprite->pos1.x + sprite->pos2.x + 32) > 304 || sprite->pos1.y + sprite->pos2.y > 160) + if ((u32) (sprite->pos1.x + sprite->pos2.x + 32) > 304 || sprite->pos1.y + sprite->pos2.y > 160) { gSprites[GetAnimBattlerSpriteId(0)].invisible = 0; DestroyAnimSprite(sprite); @@ -630,143 +567,2293 @@ void sub_80DA48C(struct Sprite *sprite) FreeOamMatrix(sprite->oam.matrixNum); sprite->oam.affineMode = 0; } - + DestroySprite(sprite); gAnimVisualTaskCount--; } } -void sub_80DA4D8(struct Sprite *sprite ) { +// FAKEMATCHING +void sub_80DA4D8(struct Sprite *sprite) +{ + s16 *data; + u8 *dataByte; - s16 * data; - u8 bank; + u8 slot; s16 spriteCoord; - - u32 t1; - u16 t2; - - u32 v7; - u8 arg2byte; - + + int t1; + int t2; + + u32 arg2; + u32 matrixNum; - - //int sinVal1; - u8 v14; - register s16 sinVal2 asm ("r4"); - register int sinVal3 asm ("r0"); - + u8 sinIndex; + register s16 sinVal asm ("r4"); + register int sinVal2 asm ("r0"); + data = sprite->data; - - if (gBattleAnimArgs[7] & 0x100) { - bank = gAnimBankAttacker; - } else { - bank = gAnimBankTarget; - } - - if(!GetBattlerSide(bank)) { + dataByte = (u8 *)data; + + if (gBattleAnimArgs[7] & 0x100) + { + slot = gAnimBankAttacker; + } + else + { + slot = gAnimBankTarget; + } + + if (GetBattlerSide(slot) == 0) + { gBattleAnimArgs[0] = -gBattleAnimArgs[0]; - } - - sprite->pos1.x = GetBattlerSpriteCoord(bank, 0) + gBattleAnimArgs[0]; + } - spriteCoord = GetBattlerSpriteCoord(bank, 1); - + sprite->pos1.x = GetBattlerSpriteCoord(slot, 0) + gBattleAnimArgs[0]; + spriteCoord = GetBattlerSpriteCoord(slot, 1); sprite->pos1.y = spriteCoord + gBattleAnimArgs[1]; data[4] = sprite->pos1.y << 8; - // keep lowest bit of data[7] replace other bits from coord + animarg[6] - //arg6 = gBattleAnimArgs[6]; - t1 = (spriteCoord + (u16)gBattleAnimArgs[6]) << 1; - data[7] = (data[7] & 1) | t1; - - // 3rd bit of data[0] = 1 - // needs to store a byte - *(u8*)data |= 4; - - v7 = (u16) gBattleAnimArgs[2]; - arg2byte = gBattleAnimArgs[2]; // (u8) - - data[1] = arg2byte; - v7 = v7 << 16; - v7 = v7 >> 16; - data[5] = v7 >> 8; + t1 = (spriteCoord + (u16) gBattleAnimArgs[6]) << 1; + data[7] = (data[7] & 1) | t1; + + ((u8 *) data)[0] |= 4; + + arg2 = (u16) gBattleAnimArgs[2]; + data[1] = (u8) gBattleAnimArgs[2]; + arg2 <<= 16; + data[5] = arg2 >> 24; data[2] = gBattleAnimArgs[3]; data[3] = gBattleAnimArgs[4]; data[6] = gBattleAnimArgs[5]; - - if ((u16)(arg2byte - 64) <= 0x7f){ - - if (gMain.inBattle) { - sprite->oam.priority = sub_8079ED4(bank) + 1u; - } else { - sprite->oam.priority = sub_8079ED4(bank); + + if ((u16) (data[1] - 64) <= 0x7f) + { + if (gMain.inBattle) + { + sprite->oam.priority = sub_8079ED4(slot) + 1; + } + else + { + sprite->oam.priority = sub_8079ED4(slot); } - + // set smallest bit to 0 - *(u8*)(data + 7) = data[7] & -0x2; - - if (!(data[2] & 0x8000)) { - - sprite->hFlip ^= 1; + ((u8 *) data)[14] = data[7] & -2; + + if (!(data[2] & 0x8000)) + { + sprite->hFlip ^= 1; sprite->animNum = sprite->hFlip; - + sprite->animBeginning = 1; - sprite->animEnded = 0; - } - - } else { - - sprite->oam.priority = sub_8079ED4(bank); - + sprite->animEnded = 0; + } + } + else + { + sprite->oam.priority = sub_8079ED4(slot); + // set smallest bit to 1 - *(u8*)(data + 7) |= 1u; - - if (data[2] & 0x8000) { - - sprite->hFlip ^= 1; + ((u8 *) data)[14] |= 1; + + if (data[2] & 0x8000) + { + sprite->hFlip ^= 1; sprite->animNum = sprite->hFlip; sprite->animBeginning = 1; sprite->animEnded = 0; } - - } - - // bits 1-4 = data[0]0:3 5-8 = and 5-8 = data[1]6:9 - t2 = (u16)data[1] >> 6 << 4; - *(u8*)data = (15 & (u8)data[0]) | t2; - - sprite->pos2.x = (gSineTable[(u16)data[1]] * (u8)data[6]) >> 8; - + } + + t2 = (u16) data[1] >> 6 << 4; + ((u8 *) data)[0] = (15 & data[0]) | t2; + + sprite->pos2.x = (gSineTable[(u16) data[1]] * (u8) data[6]) >> 8; + matrixNum = sprite->oam.matrixNum; - - v14 = (-sprite->pos2.x >> 1) + (u8)data[5]; - sinVal2 = gSineTable[v14]; - - gOamMatrices[matrixNum].a = gOamMatrices[matrixNum].d = gSineTable[v14 + 64]; - gOamMatrices[matrixNum].b = sinVal2; - sinVal3 = - sinVal2; - gOamMatrices[matrixNum].c = sinVal3; - - sprite->callback = (SpriteCallback) sub_80DA6F0; + sinIndex = (-sprite->pos2.x >> 1) + data[5]; + sinVal = gSineTable[sinIndex]; + + gOamMatrices[matrixNum].a = gOamMatrices[matrixNum].d = gSineTable[sinIndex + 64]; + gOamMatrices[matrixNum].b = sinVal; + sinVal2 = -sinVal; + gOamMatrices[matrixNum].c = sinVal2; + + sprite->callback = sub_80DA6F0; } -void sub_80DA6F0(struct Sprite *sprite) { +#ifdef NONMATCHING +void sub_80DA6F0(struct Sprite * sprite) { + + // (Probably) Functionally equivalent + + struct dataStruct { + u8 one:1; + u8 two:1; + u8 three:1; + u8 four:1; + u8 fiveeight:4; + }; + + u8 zero; + s16 * data; + u8 * dataByte; + + u16 r8; + u32 matrixNum; + u8 sinIndex; + s16 sinVal; + + zero = 0; + data = sprite->data; + dataByte = (u8 *)data; + + if (dataByte[0] & 1) { + u32 t1; + + t1 = dataByte[1]; + dataByte[1] += 0xff; + + t1 <<= 24; + if (t1 == 0) { + // 080da724 + ((struct dataStruct *)dataByte)[0].one = 0; + dataByte[1] = zero; + } + + } else { + // 080da730 + u16 tData; + u16 t2; + + tData = data[1]; + t2 = tData >> 6; + r8 = tData; + + switch (t2) { + + case (0): + // 080da756 + + if (dataByte[0] >> 4 == 1) { + dataByte[0] |= 8; + dataByte[0] |= 1; + dataByte[1] = zero; + } else if (dataByte[0] >> 4 == 3) { + /*080da76c*/ + ((struct dataStruct *)dataByte)[0].two ^= 1; + ((struct dataStruct *)dataByte)[0].one = 1; + dataByte[1] = zero; + } else { + // 080da790 + if (dataByte[0] & 8) { + sprite->hFlip ^= 1; + sprite->animNum = sprite->hFlip; + sprite->animBeginning = 1; + sprite->animEnded = 0; + + if ((dataByte)[0] & 4) { + u8 b; + if (gMain.inBattle) { + if (!(dataByte[14] & 1)) { + sprite->oam.priority -= 1; + } else { + // 080da814 + sprite->oam.priority += 1; + } + } else { + // 080da82e + if (!(dataByte[14] & 1)) { + sprite->subpriority -= 12; + } else { + // 080da85c + sprite->subpriority += 12; + } + } + b = (((u32)(dataByte[14] << 31) >> 31) ^ 1) & 1; + dataByte[14] = (dataByte[14] & -2) | b; + } + // 080da87a + ((struct dataStruct *)dataByte)[0].four = 0; + r8 = data[1]; + } + } + + // 080da88a + dataByte[0] &= 15; + // 080dac52 + break; + case (1): + // 080da896 + if (dataByte[0] >> 4 == 0) { + dataByte[0] |= 8; + dataByte[0] |= 1; + dataByte[1] = zero; + } else/*080da8ac*/if (dataByte[0] >> 4 == 2) { + dataByte[0] |= 1; + dataByte[1] = zero; + } else { + // 080da8be + if (dataByte[0] & 8) { + sprite->hFlip ^= 1; + sprite->animNum = sprite->hFlip; + sprite->animBeginning = 1; + sprite->animEnded = 0; + + if (dataByte[0] & 4) { + u8 b; + if (gMain.inBattle) { + if (!(dataByte[14] & 1)) { + sprite->oam.priority -= 1; + } else { + // 080da948 + sprite->oam.priority += 1; + } + } else { + // 080da962 + if (!(dataByte[14] & 1)) { + sprite->subpriority -=12; + } else { + // 080da98c + sprite->subpriority += 12; + } + } + // 080da978 + 080da996 + b = (((u32)(dataByte[14] << 31) >> 31) ^ 1) & 1; + dataByte[14] = (dataByte[14] & -2) | b; + } + // 080da9ac + ((struct dataStruct *)dataByte)[0].four = 0; + r8 = data[1]; + } + } + // 080da9bc + dataByte[0] &= 15; + dataByte[0] |= 16; + // 080dac52 + break; + case (2): + // 080da9c8 + if (dataByte[0] >> 4 == 3) { + dataByte[0] |= 8; + dataByte[0] |= 1; + dataByte[1] = zero; + } else/*080da9de*/if (dataByte[0] >> 4 == 1) { + dataByte[0] |= 1; + dataByte[1] = zero; + } else { + // 080da9f0 + if (dataByte[0] & 8) { + // 080da9fa + sprite->hFlip ^= 1; + sprite->animNum = sprite->hFlip; + sprite->animBeginning = 1; + sprite->animEnded = 0; + + if (dataByte[0] & 4) { + u8 b; + if (gMain.inBattle) { + if (!(dataByte[14] & 1)) { + sprite->oam.priority -= 1; + } else { + // 080daa74 + sprite->oam.priority += 1; + } + } else { + // 080daaa4 + if (!(dataByte[14] & 1)) { + sprite->subpriority -= 12; + } else { + // 080daace + sprite->subpriority += 12; + } + } + b = (((u32)(dataByte[14] << 31) >> 31) ^ 1) & 1; + dataByte[14] = (dataByte[14] & -2) | b; + } + // 080daaec + ((struct dataStruct *)dataByte)[0].four = 0; + r8 = data[1]; + } + } + // 080daafe + dataByte[0] &= 15; + dataByte[0] |= 32; + // 080dac52 + break; + case (3): + // 080dab0e + if (dataByte[0] >> 4 == 2) { + dataByte[0] |= 8; + // 080dac42 + } else/*080dab20*/if (dataByte[0] >> 4 == 0) { + ((struct dataStruct *)dataByte)[0].two ^= 1; + ((struct dataStruct *)dataByte)[0].one = 1; + dataByte[1] = zero; + // 080dac42 + } else { + // 080dab44 + if (dataByte[0] & 8) { + sprite->hFlip ^= 1; + sprite->animNum = sprite->hFlip; + sprite->animBeginning = 1; + sprite->animEnded = 0; + + if (dataByte[0] & 4) { + u8 b; + if (gMain.inBattle) { + if (!(dataByte[14] & 1)) { + sprite->oam.priority -= 1; + } else { + // 080dabcc + sprite->oam.priority += 1; + } + } else { + // 080dabe6 + if (!(dataByte[14] & 1)) { + sprite->subpriority -= 12; + } else { + // 080dac14 + sprite->subpriority += 12; + } + } + // 080dac00 + 080dac1e + b = (((u32)(dataByte[14]) << 31 >> 31) ^ 1) & 1; + dataByte[14] = (-2 & dataByte[14]) | b; + } + // 080dac32 + ((struct dataStruct *)dataByte)[0].four = 0; + r8 = data[1]; + } + } + // 080dac42 + dataByte[0] &= 15; + dataByte[0] |= 48; + break; + } + + // 080dac52 + + sprite->pos2.x = (dataByte[12 + ((struct dataStruct *)dataByte)[0].two] * gSineTable[r8]) >> 8; + + matrixNum = sprite->oam.matrixNum; - int r6 = 0; - s16* data = sprite->data; - u8 dataByte; + sinIndex = (-sprite->pos2.x >> 1) + dataByte[10]; + sinVal = gSineTable[sinIndex]; - dataByte = (u8)data[0]; - r7 = 1; - r1 = 1; - r9 = r1; + gOamMatrices[matrixNum].a = gOamMatrices[matrixNum].d = gSineTable[sinIndex + 64]; + gOamMatrices[matrixNum].b = sinVal; + gOamMatrices[matrixNum].c = -sinVal; - if (dataByte & 1) { - r3 = data; - dataByte = data[1]; - data[1] = dataByte + 0xff; + data[4] += data[3]; + + sprite->pos1.y = (u16)data[4] >> 8; + + if (data[2] & (0x80 << 8)) { + data[1] = (data[1] - (data[2] & ((0x80 << 8) - 1))) & 0xff; + } else { + // 080dace8 + data[1] = ((data[2] & 0x7fff) + data[1]) & 0xff; + } + // 080dacfe + if (sprite->pos1.y + sprite->pos2.y >= (u16)data[7] / 2) { + sprite->data[0] = 0; + sprite->callback = sub_80DA48C; + } } }; +#else +NAKED +void sub_80DA6F0(struct Sprite *sprite) +{ + asm_unified("push {r4-r7,lr}\n\ + mov r7, r9\n\ + mov r6, r8\n\ + push {r6,r7}\n\ + adds r5, r0, 0\n\ + movs r6, 0\n\ + movs r0, 0x2E\n\ + adds r0, r5\n\ + mov r12, r0\n\ + ldrb r2, [r0]\n\ + movs r7, 0x1\n\ + movs r1, 0x1\n\ + mov r9, r1\n\ + mov r0, r9\n\ + ands r0, r2\n\ + cmp r0, 0\n\ + beq _080DA730\n\ + mov r3, r12\n\ + ldrb r0, [r3, 0x1]\n\ + adds r1, r0, 0\n\ + adds r1, 0xFF\n\ + strb r1, [r3, 0x1]\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _080DA724\n\ + b _080DAD1A\n\ +_080DA724:\n\ + movs r0, 0x2\n\ + negs r0, r0\n\ + ands r0, r2\n\ + strb r0, [r3]\n\ + strb r6, [r3, 0x1]\n\ + b _080DAD1A\n\ +_080DA730:\n\ + mov r4, r12\n\ + ldrh r0, [r4, 0x2]\n\ + lsrs r4, r0, 6\n\ + mov r8, r0\n\ + cmp r4, 0x1\n\ + bne _080DA73E\n\ + b _080DA896\n\ +_080DA73E:\n\ + cmp r4, 0x1\n\ + bgt _080DA748\n\ + cmp r4, 0\n\ + beq _080DA756\n\ + b _080DAC52\n\ +_080DA748:\n\ + cmp r4, 0x2\n\ + bne _080DA74E\n\ + b _080DA9C8\n\ +_080DA74E:\n\ + cmp r4, 0x3\n\ + bne _080DA754\n\ + b _080DAB0E\n\ +_080DA754:\n\ + b _080DAC52\n\ +_080DA756:\n\ + lsls r1, r2, 24\n\ + lsrs r0, r1, 28\n\ + cmp r0, 0x1\n\ + bne _080DA76C\n\ + movs r0, 0x8\n\ + orrs r0, r2\n\ + orrs r0, r7\n\ + mov r1, r12\n\ + strb r0, [r1]\n\ + strb r6, [r1, 0x1]\n\ + b _080DA88A\n\ +_080DA76C:\n\ + lsrs r0, r1, 28\n\ + cmp r0, 0x3\n\ + bne _080DA790\n\ + lsls r0, r2, 30\n\ + lsrs r0, 31\n\ + movs r1, 0x1\n\ + eors r0, r1\n\ + ands r0, r7\n\ + lsls r0, 1\n\ + movs r1, 0x3\n\ + negs r1, r1\n\ + ands r1, r2\n\ + orrs r1, r0\n\ + orrs r1, r7\n\ + mov r2, r12\n\ + strb r1, [r2]\n\ + strb r6, [r2, 0x1]\n\ + b _080DA88A\n\ +_080DA790:\n\ + movs r0, 0x8\n\ + ands r0, r2\n\ + cmp r0, 0\n\ + beq _080DA88A\n\ + adds r3, r5, 0\n\ + adds r3, 0x3F\n\ + ldrb r2, [r3]\n\ + lsls r1, r2, 31\n\ + lsrs r1, 31\n\ + movs r4, 0x1\n\ + eors r1, r4\n\ + ands r1, r7\n\ + movs r6, 0x2\n\ + negs r6, r6\n\ + adds r0, r6, 0\n\ + ands r0, r2\n\ + orrs r0, r1\n\ + strb r0, [r3]\n\ + lsls r0, 31\n\ + lsrs r0, 31\n\ + adds r1, r5, 0\n\ + adds r1, 0x2A\n\ + strb r0, [r1]\n\ + ldrb r0, [r3]\n\ + movs r1, 0x4\n\ + orrs r0, r1\n\ + movs r1, 0x11\n\ + negs r1, r1\n\ + ands r0, r1\n\ + strb r0, [r3]\n\ + mov r3, r12\n\ + ldrb r1, [r3]\n\ + movs r0, 0x4\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080DA87A\n\ + ldr r0, _080DA80C @ =gMain\n\ + ldr r1, _080DA810 @ =0x0000043d\n\ + adds r0, r1\n\ + ldrb r1, [r0]\n\ + movs r0, 0x2\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080DA82E\n\ + ldrb r1, [r3, 0xE]\n\ + mov r0, r9\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _080DA814\n\ + ldrb r2, [r5, 0x5]\n\ + lsls r1, r2, 28\n\ + lsrs r1, 30\n\ + subs r1, 0x1\n\ + movs r0, 0x3\n\ + ands r1, r0\n\ + lsls r1, 2\n\ + movs r0, 0xD\n\ + negs r0, r0\n\ + ands r0, r2\n\ + orrs r0, r1\n\ + strb r0, [r5, 0x5]\n\ + b _080DA868\n\ + .align 2, 0\n\ +_080DA80C: .4byte gMain\n\ +_080DA810: .4byte 0x0000043d\n\ +_080DA814:\n\ + ldrb r2, [r5, 0x5]\n\ + lsls r1, r2, 28\n\ + lsrs r1, 30\n\ + adds r1, 0x1\n\ + movs r0, 0x3\n\ + ands r1, r0\n\ + lsls r1, 2\n\ + movs r0, 0xD\n\ + negs r0, r0\n\ + ands r0, r2\n\ + orrs r0, r1\n\ + strb r0, [r5, 0x5]\n\ + b _080DA866\n\ +_080DA82E:\n\ + mov r0, r12\n\ + ldrb r1, [r0, 0xE]\n\ + mov r0, r9\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _080DA85C\n\ + adds r1, r5, 0\n\ + adds r1, 0x43\n\ + ldrb r0, [r1]\n\ + subs r0, 0xC\n\ + strb r0, [r1]\n\ + mov r1, r12\n\ + ldrb r2, [r1, 0xE]\n\ + lsls r0, r2, 31\n\ + lsrs r0, 31\n\ + eors r0, r4\n\ + ands r0, r7\n\ + adds r1, r6, 0\n\ + ands r1, r2\n\ + orrs r1, r0\n\ + mov r2, r12\n\ + strb r1, [r2, 0xE]\n\ + b _080DA87A\n\ +_080DA85C:\n\ + adds r1, r5, 0\n\ + adds r1, 0x43\n\ + ldrb r0, [r1]\n\ + adds r0, 0xC\n\ + strb r0, [r1]\n\ +_080DA866:\n\ + mov r3, r12\n\ +_080DA868:\n\ + ldrb r2, [r3, 0xE]\n\ + lsls r0, r2, 31\n\ + lsrs r0, 31\n\ + eors r0, r4\n\ + ands r0, r7\n\ + adds r1, r6, 0\n\ + ands r1, r2\n\ + orrs r1, r0\n\ + strb r1, [r3, 0xE]\n\ +_080DA87A:\n\ + mov r4, r12\n\ + ldrb r1, [r4]\n\ + movs r0, 0x9\n\ + negs r0, r0\n\ + ands r0, r1\n\ + strb r0, [r4]\n\ + ldrh r0, [r4, 0x2]\n\ + mov r8, r0\n\ +_080DA88A:\n\ + mov r2, r12\n\ + ldrb r1, [r2]\n\ + movs r0, 0xF\n\ + ands r0, r1\n\ + strb r0, [r2]\n\ + b _080DAC52\n\ +_080DA896:\n\ + lsls r1, r2, 24\n\ + lsrs r0, r1, 28\n\ + cmp r0, 0\n\ + bne _080DA8AC\n\ + movs r0, 0x8\n\ + orrs r0, r2\n\ + orrs r0, r7\n\ + mov r3, r12\n\ + strb r0, [r3]\n\ + strb r6, [r3, 0x1]\n\ + b _080DA9BC\n\ +_080DA8AC:\n\ + lsrs r0, r1, 28\n\ + cmp r0, 0x2\n\ + bne _080DA8BE\n\ + adds r0, r2, 0\n\ + orrs r0, r7\n\ + mov r4, r12\n\ + strb r0, [r4]\n\ + strb r6, [r4, 0x1]\n\ + b _080DA9BC\n\ +_080DA8BE:\n\ + movs r0, 0x8\n\ + ands r0, r2\n\ + cmp r0, 0\n\ + beq _080DA9BC\n\ + adds r3, r5, 0\n\ + adds r3, 0x3F\n\ + ldrb r2, [r3]\n\ + lsls r1, r2, 31\n\ + lsrs r1, 31\n\ + movs r4, 0x1\n\ + eors r1, r4\n\ + ands r1, r7\n\ + movs r6, 0x2\n\ + negs r6, r6\n\ + adds r0, r6, 0\n\ + ands r0, r2\n\ + orrs r0, r1\n\ + strb r0, [r3]\n\ + lsls r0, 31\n\ + lsrs r0, 31\n\ + adds r1, r5, 0\n\ + adds r1, 0x2A\n\ + strb r0, [r1]\n\ + ldrb r0, [r3]\n\ + movs r1, 0x4\n\ + orrs r0, r1\n\ + movs r1, 0x11\n\ + negs r1, r1\n\ + ands r0, r1\n\ + strb r0, [r3]\n\ + mov r0, r12\n\ + ldrb r1, [r0]\n\ + movs r0, 0x4\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080DA9AC\n\ + ldr r0, _080DA940 @ =gMain\n\ + ldr r1, _080DA944 @ =0x0000043d\n\ + adds r0, r1\n\ + ldrb r1, [r0]\n\ + movs r0, 0x2\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080DA962\n\ + mov r2, r12\n\ + ldrb r1, [r2, 0xE]\n\ + mov r0, r9\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _080DA948\n\ + ldrb r2, [r5, 0x5]\n\ + lsls r1, r2, 28\n\ + lsrs r1, 30\n\ + subs r1, 0x1\n\ + movs r0, 0x3\n\ + ands r1, r0\n\ + lsls r1, 2\n\ + movs r0, 0xD\n\ + negs r0, r0\n\ + ands r0, r2\n\ + orrs r0, r1\n\ + strb r0, [r5, 0x5]\n\ + mov r3, r12\n\ + b _080DA978\n\ + .align 2, 0\n\ +_080DA940: .4byte gMain\n\ +_080DA944: .4byte 0x0000043d\n\ +_080DA948:\n\ + ldrb r2, [r5, 0x5]\n\ + lsls r1, r2, 28\n\ + lsrs r1, 30\n\ + adds r1, 0x1\n\ + movs r0, 0x3\n\ + ands r1, r0\n\ + lsls r1, 2\n\ + movs r0, 0xD\n\ + negs r0, r0\n\ + ands r0, r2\n\ + orrs r0, r1\n\ + strb r0, [r5, 0x5]\n\ + b _080DA996\n\ +_080DA962:\n\ + mov r3, r12\n\ + ldrb r1, [r3, 0xE]\n\ + mov r0, r9\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _080DA98C\n\ + adds r1, r5, 0\n\ + adds r1, 0x43\n\ + ldrb r0, [r1]\n\ + subs r0, 0xC\n\ + strb r0, [r1]\n\ +_080DA978:\n\ + ldrb r2, [r3, 0xE]\n\ + lsls r0, r2, 31\n\ + lsrs r0, 31\n\ + eors r0, r4\n\ + ands r0, r7\n\ + adds r1, r6, 0\n\ + ands r1, r2\n\ + orrs r1, r0\n\ + strb r1, [r3, 0xE]\n\ + b _080DA9AC\n\ +_080DA98C:\n\ + adds r1, r5, 0\n\ + adds r1, 0x43\n\ + ldrb r0, [r1]\n\ + adds r0, 0xC\n\ + strb r0, [r1]\n\ +_080DA996:\n\ + mov r0, r12\n\ + ldrb r2, [r0, 0xE]\n\ + lsls r0, r2, 31\n\ + lsrs r0, 31\n\ + eors r0, r4\n\ + ands r0, r7\n\ + adds r1, r6, 0\n\ + ands r1, r2\n\ + orrs r1, r0\n\ + mov r2, r12\n\ + strb r1, [r2, 0xE]\n\ +_080DA9AC:\n\ + mov r3, r12\n\ + ldrb r1, [r3]\n\ + movs r0, 0x9\n\ + negs r0, r0\n\ + ands r0, r1\n\ + strb r0, [r3]\n\ + ldrh r4, [r3, 0x2]\n\ + mov r8, r4\n\ +_080DA9BC:\n\ + mov r1, r12\n\ + ldrb r0, [r1]\n\ + movs r1, 0xF\n\ + ands r1, r0\n\ + movs r0, 0x10\n\ + b _080DAC4C\n\ +_080DA9C8:\n\ + lsls r1, r2, 24\n\ + lsrs r0, r1, 28\n\ + cmp r0, 0x3\n\ + bne _080DA9DE\n\ + movs r0, 0x8\n\ + orrs r0, r2\n\ + orrs r0, r7\n\ + mov r3, r12\n\ + strb r0, [r3]\n\ + strb r6, [r3, 0x1]\n\ + b _080DAAFE\n\ +_080DA9DE:\n\ + lsrs r0, r1, 28\n\ + cmp r0, 0x1\n\ + bne _080DA9F0\n\ + adds r0, r2, 0\n\ + orrs r0, r7\n\ + mov r4, r12\n\ + strb r0, [r4]\n\ + strb r6, [r4, 0x1]\n\ + b _080DAAFE\n\ +_080DA9F0:\n\ + movs r0, 0x8\n\ + ands r0, r2\n\ + cmp r0, 0\n\ + bne _080DA9FA\n\ + b _080DAAFE\n\ +_080DA9FA:\n\ + adds r3, r5, 0\n\ + adds r3, 0x3F\n\ + ldrb r2, [r3]\n\ + lsls r1, r2, 31\n\ + lsrs r1, 31\n\ + movs r6, 0x1\n\ + eors r1, r6\n\ + ands r1, r7\n\ + movs r0, 0x2\n\ + negs r0, r0\n\ + mov r8, r0\n\ + ands r0, r2\n\ + orrs r0, r1\n\ + strb r0, [r3]\n\ + lsls r0, 31\n\ + lsrs r0, 31\n\ + adds r1, r5, 0\n\ + adds r1, 0x2A\n\ + strb r0, [r1]\n\ + ldrb r0, [r3]\n\ + movs r1, 0x4\n\ + orrs r0, r1\n\ + movs r1, 0x11\n\ + negs r1, r1\n\ + ands r0, r1\n\ + strb r0, [r3]\n\ + mov r2, r12\n\ + ldrb r1, [r2]\n\ + movs r0, 0x4\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080DAAEC\n\ + ldr r0, _080DAA6C @ =gMain\n\ + ldr r3, _080DAA70 @ =0x0000043d\n\ + adds r0, r3\n\ + ldrb r0, [r0]\n\ + ands r4, r0\n\ + cmp r4, 0\n\ + beq _080DAAA4\n\ + ldrb r1, [r2, 0xE]\n\ + mov r0, r9\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _080DAA74\n\ + ldrb r2, [r5, 0x5]\n\ + lsls r1, r2, 28\n\ + lsrs r1, 30\n\ + subs r1, 0x1\n\ + movs r0, 0x3\n\ + ands r1, r0\n\ + lsls r1, 2\n\ + movs r0, 0xD\n\ + negs r0, r0\n\ + ands r0, r2\n\ + orrs r0, r1\n\ + strb r0, [r5, 0x5]\n\ + b _080DAAD8\n\ + .align 2, 0\n\ +_080DAA6C: .4byte gMain\n\ +_080DAA70: .4byte 0x0000043d\n\ +_080DAA74:\n\ + ldrb r2, [r5, 0x5]\n\ + lsls r1, r2, 28\n\ + lsrs r1, 30\n\ + adds r1, 0x1\n\ + movs r0, 0x3\n\ + ands r1, r0\n\ + lsls r1, 2\n\ + movs r0, 0xD\n\ + negs r0, r0\n\ + ands r0, r2\n\ + orrs r0, r1\n\ + strb r0, [r5, 0x5]\n\ + mov r0, r12\n\ + ldrb r2, [r0, 0xE]\n\ + lsls r0, r2, 31\n\ + lsrs r0, 31\n\ + eors r0, r6\n\ + ands r0, r7\n\ + mov r1, r8\n\ + ands r1, r2\n\ + orrs r1, r0\n\ + mov r2, r12\n\ + strb r1, [r2, 0xE]\n\ + b _080DAAEC\n\ +_080DAAA4:\n\ + mov r3, r12\n\ + ldrb r1, [r3, 0xE]\n\ + mov r0, r9\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _080DAACE\n\ + adds r1, r5, 0\n\ + adds r1, 0x43\n\ + ldrb r0, [r1]\n\ + subs r0, 0xC\n\ + strb r0, [r1]\n\ + ldrb r2, [r3, 0xE]\n\ + lsls r0, r2, 31\n\ + lsrs r0, 31\n\ + eors r0, r6\n\ + ands r0, r7\n\ + mov r1, r8\n\ + ands r1, r2\n\ + orrs r1, r0\n\ + strb r1, [r3, 0xE]\n\ + b _080DAAEC\n\ +_080DAACE:\n\ + adds r1, r5, 0\n\ + adds r1, 0x43\n\ + ldrb r0, [r1]\n\ + adds r0, 0xC\n\ + strb r0, [r1]\n\ +_080DAAD8:\n\ + mov r4, r12\n\ + ldrb r2, [r4, 0xE]\n\ + lsls r0, r2, 31\n\ + lsrs r0, 31\n\ + eors r0, r6\n\ + ands r0, r7\n\ + mov r1, r8\n\ + ands r1, r2\n\ + orrs r1, r0\n\ + strb r1, [r4, 0xE]\n\ +_080DAAEC:\n\ + mov r0, r12\n\ + ldrb r1, [r0]\n\ + movs r0, 0x9\n\ + negs r0, r0\n\ + ands r0, r1\n\ + mov r1, r12\n\ + strb r0, [r1]\n\ + ldrh r2, [r1, 0x2]\n\ + mov r8, r2\n\ +_080DAAFE:\n\ + mov r3, r12\n\ + ldrb r0, [r3]\n\ + movs r1, 0xF\n\ + ands r1, r0\n\ + movs r0, 0x20\n\ + orrs r1, r0\n\ + strb r1, [r3]\n\ + b _080DAC52\n\ +_080DAB0E:\n\ + lsls r1, r2, 24\n\ + lsrs r0, r1, 28\n\ + cmp r0, 0x2\n\ + bne _080DAB20\n\ + movs r0, 0x8\n\ + orrs r0, r2\n\ + mov r4, r12\n\ + strb r0, [r4]\n\ + b _080DAC42\n\ +_080DAB20:\n\ + lsrs r0, r1, 28\n\ + cmp r0, 0\n\ + bne _080DAB44\n\ + lsls r0, r2, 30\n\ + lsrs r0, 31\n\ + movs r1, 0x1\n\ + eors r0, r1\n\ + ands r0, r7\n\ + lsls r0, 1\n\ + movs r1, 0x3\n\ + negs r1, r1\n\ + ands r1, r2\n\ + orrs r1, r0\n\ + orrs r1, r7\n\ + mov r0, r12\n\ + strb r1, [r0]\n\ + strb r6, [r0, 0x1]\n\ + b _080DAC42\n\ +_080DAB44:\n\ + movs r0, 0x8\n\ + ands r0, r2\n\ + cmp r0, 0\n\ + beq _080DAC42\n\ + adds r3, r5, 0\n\ + adds r3, 0x3F\n\ + ldrb r2, [r3]\n\ + lsls r1, r2, 31\n\ + lsrs r1, 31\n\ + movs r4, 0x1\n\ + eors r1, r4\n\ + ands r1, r7\n\ + movs r6, 0x2\n\ + negs r6, r6\n\ + adds r0, r6, 0\n\ + ands r0, r2\n\ + orrs r0, r1\n\ + strb r0, [r3]\n\ + lsls r0, 31\n\ + lsrs r0, 31\n\ + adds r1, r5, 0\n\ + adds r1, 0x2A\n\ + strb r0, [r1]\n\ + ldrb r0, [r3]\n\ + movs r1, 0x4\n\ + orrs r0, r1\n\ + movs r1, 0x11\n\ + negs r1, r1\n\ + ands r0, r1\n\ + strb r0, [r3]\n\ + mov r2, r12\n\ + ldrb r1, [r2]\n\ + movs r0, 0x4\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080DAC32\n\ + ldr r0, _080DABC4 @ =gMain\n\ + ldr r3, _080DABC8 @ =0x0000043d\n\ + adds r0, r3\n\ + ldrb r1, [r0]\n\ + movs r0, 0x2\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080DABE6\n\ + ldrb r1, [r2, 0xE]\n\ + mov r0, r9\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _080DABCC\n\ + ldrb r2, [r5, 0x5]\n\ + lsls r1, r2, 28\n\ + lsrs r1, 30\n\ + subs r1, 0x1\n\ + movs r0, 0x3\n\ + ands r1, r0\n\ + lsls r1, 2\n\ + movs r0, 0xD\n\ + negs r0, r0\n\ + ands r0, r2\n\ + orrs r0, r1\n\ + strb r0, [r5, 0x5]\n\ + mov r0, r12\n\ + ldrb r2, [r0, 0xE]\n\ + b _080DAC00\n\ + .align 2, 0\n\ +_080DABC4: .4byte gMain\n\ +_080DABC8: .4byte 0x0000043d\n\ +_080DABCC:\n\ + ldrb r2, [r5, 0x5]\n\ + lsls r1, r2, 28\n\ + lsrs r1, 30\n\ + adds r1, 0x1\n\ + movs r0, 0x3\n\ + ands r1, r0\n\ + lsls r1, 2\n\ + movs r0, 0xD\n\ + negs r0, r0\n\ + ands r0, r2\n\ + orrs r0, r1\n\ + strb r0, [r5, 0x5]\n\ + b _080DAC1E\n\ +_080DABE6:\n\ + mov r0, r12\n\ + ldrb r1, [r0, 0xE]\n\ + mov r0, r9\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _080DAC14\n\ + adds r1, r5, 0\n\ + adds r1, 0x43\n\ + ldrb r0, [r1]\n\ + subs r0, 0xC\n\ + strb r0, [r1]\n\ + mov r1, r12\n\ + ldrb r2, [r1, 0xE]\n\ +_080DAC00:\n\ + lsls r0, r2, 31\n\ + lsrs r0, 31\n\ + eors r0, r4\n\ + ands r0, r7\n\ + adds r1, r6, 0\n\ + ands r1, r2\n\ + orrs r1, r0\n\ + mov r2, r12\n\ + strb r1, [r2, 0xE]\n\ + b _080DAC32\n\ +_080DAC14:\n\ + adds r1, r5, 0\n\ + adds r1, 0x43\n\ + ldrb r0, [r1]\n\ + adds r0, 0xC\n\ + strb r0, [r1]\n\ +_080DAC1E:\n\ + mov r3, r12\n\ + ldrb r2, [r3, 0xE]\n\ + lsls r0, r2, 31\n\ + lsrs r0, 31\n\ + eors r0, r4\n\ + ands r0, r7\n\ + adds r1, r6, 0\n\ + ands r1, r2\n\ + orrs r1, r0\n\ + strb r1, [r3, 0xE]\n\ +_080DAC32:\n\ + mov r4, r12\n\ + ldrb r1, [r4]\n\ + movs r0, 0x9\n\ + negs r0, r0\n\ + ands r0, r1\n\ + strb r0, [r4]\n\ + ldrh r0, [r4, 0x2]\n\ + mov r8, r0\n\ +_080DAC42:\n\ + mov r1, r12\n\ + ldrb r0, [r1]\n\ + movs r1, 0xF\n\ + ands r1, r0\n\ + movs r0, 0x30\n\ +_080DAC4C:\n\ + orrs r1, r0\n\ + mov r2, r12\n\ + strb r1, [r2]\n\ +_080DAC52:\n\ + mov r3, r12\n\ + ldrb r1, [r3]\n\ + lsls r1, 30\n\ + lsrs r1, 31\n\ + mov r0, r12\n\ + adds r0, 0xC\n\ + adds r0, r1\n\ + ldrb r1, [r0]\n\ + ldr r3, _080DACE0 @ =gSineTable\n\ + mov r4, r8\n\ + lsls r0, r4, 1\n\ + adds r0, r3\n\ + movs r2, 0\n\ + ldrsh r0, [r0, r2]\n\ + muls r0, r1\n\ + asrs r0, 8\n\ + strh r0, [r5, 0x24]\n\ + ldrb r2, [r5, 0x3]\n\ + lsls r2, 26\n\ + lsrs r2, 27\n\ + movs r4, 0x24\n\ + ldrsh r0, [r5, r4]\n\ + negs r0, r0\n\ + asrs r0, 1\n\ + mov r1, r12\n\ + ldrb r1, [r1, 0xA]\n\ + adds r0, r1\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + lsls r1, r0, 1\n\ + adds r1, r3\n\ + ldrh r6, [r1]\n\ + ldr r1, _080DACE4 @ =gOamMatrices\n\ + lsls r2, 3\n\ + adds r2, r1\n\ + adds r0, 0x40\n\ + lsls r0, 1\n\ + adds r0, r3\n\ + ldrh r0, [r0]\n\ + strh r0, [r2, 0x6]\n\ + strh r0, [r2]\n\ + strh r6, [r2, 0x2]\n\ + lsls r0, r6, 16\n\ + asrs r0, 16\n\ + negs r0, r0\n\ + strh r0, [r2, 0x4]\n\ + mov r2, r12\n\ + ldrh r0, [r2, 0x6]\n\ + ldrh r3, [r2, 0x8]\n\ + adds r0, r3\n\ + strh r0, [r2, 0x8]\n\ + lsls r0, 16\n\ + lsrs r0, 24\n\ + strh r0, [r5, 0x22]\n\ + movs r4, 0x4\n\ + ldrsh r0, [r2, r4]\n\ + movs r1, 0x80\n\ + lsls r1, 8\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080DACE8\n\ + ldrh r0, [r2, 0x4]\n\ + subs r1, 0x1\n\ + ands r1, r0\n\ + ldrh r0, [r2, 0x2]\n\ + subs r0, r1\n\ + movs r1, 0xFF\n\ + ands r0, r1\n\ + strh r0, [r2, 0x2]\n\ + b _080DACFE\n\ + .align 2, 0\n\ +_080DACE0: .4byte gSineTable\n\ +_080DACE4: .4byte gOamMatrices\n\ +_080DACE8:\n\ + mov r1, r12\n\ + ldrh r0, [r1, 0x4]\n\ + ldr r1, _080DAD28 @ =0x00007fff\n\ + ands r1, r0\n\ + mov r2, r12\n\ + ldrh r2, [r2, 0x2]\n\ + adds r1, r2\n\ + movs r0, 0xFF\n\ + ands r1, r0\n\ + mov r3, r12\n\ + strh r1, [r3, 0x2]\n\ +_080DACFE:\n\ + movs r4, 0x22\n\ + ldrsh r1, [r5, r4]\n\ + movs r2, 0x26\n\ + ldrsh r0, [r5, r2]\n\ + adds r1, r0\n\ + mov r3, r12\n\ + ldrh r0, [r3, 0xE]\n\ + lsrs r0, 1\n\ + cmp r1, r0\n\ + blt _080DAD1A\n\ + movs r0, 0\n\ + strh r0, [r5, 0x2E]\n\ + ldr r0, _080DAD2C @ =sub_80DA48C\n\ + str r0, [r5, 0x1C]\n\ +_080DAD1A:\n\ + pop {r3,r4}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080DAD28: .4byte 0x00007fff\n\ +_080DAD2C: .4byte sub_80DA48C\n"); +}; +#endif + +void sub_80DAD30(struct Sprite *sprite) +{ + sprite->oam.priority = sub_8079ED4(gAnimBankTarget); + sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2); + sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3); + sprite->callback = TranslateAnimSpriteToTargetMonLocation; +} + +#ifdef NONMATCHING +void sub_80DAD84(struct Sprite * sprite) { + + /* functionally equivalent + * rand and matrix num registers switched + * can't force registers because they move on left/right switch + */ + + u32 matrixNum; + s16 rand; + s16 sinVal; + + sprite->data[1] = gBattleAnimArgs[0]; + sprite->data[2] = gBattleAnimArgs[1]; + sprite->data[3] = gBattleAnimArgs[2]; + + if(gMain.inBattle) { + if (gBanksBySide[gAnimBankTarget] & 1) { + sprite->data[7] = GetBattlerSpriteCoord(gAnimBankTarget, 1) + gBattleAnimArgs[3]; + } else { + // 080dade0 + sprite->data[7] = GetBattlerSpriteCoord(gAnimBankTarget, 1) + 40; + } + + if(gBattleAnimArgs[4]) { + sprite->oam.priority = sub_8079ED4(gAnimBankTarget) + 1; + // 080dae24 + } else { + sprite->oam.priority = sub_8079ED4(gAnimBankTarget); + } + } else { + sprite->data[7] = GetBattlerSpriteCoord(gAnimBankTarget, 1) + gBattleAnimArgs[3]; + } + + sprite->data[4] = gSineTable[sprite->data[1] & 0xff]; + sprite->data[5] = - gSineTable[(sprite->data[1] & 0xff) + 64]; + sprite->data[6] = 0; + sprite->pos2.x = sprite->pos2.y = 0; + + matrixNum = sprite->oam.matrixNum; + sprite->data[1] = (u8) (sprite->data[1] >> 8); + + rand = Random(); + if (rand & 0x8000) { + sprite->data[1] = 0xff - sprite->data[1]; + } + + sinVal = gSineTable[sprite->data[1]]; + + gOamMatrices[matrixNum].a = gOamMatrices[matrixNum].d = gSineTable[sprite->data[1] + 64]; + gOamMatrices[matrixNum].b = sinVal; + gOamMatrices[matrixNum].c = - sinVal; + + sprite->animBeginning = 1; + sprite->animEnded = 0; + + if (rand & 1) { + sprite->animNum = 1; + sprite->hFlip = 1; + } + + sprite->callback = sub_80DAF0C; + +} +#else +NAKED +void sub_80DAD84(struct Sprite *sprite) +{ + asm_unified("push {r4-r7,lr}\n\ + adds r4, r0, 0\n\ + ldr r5, _080DADCC @ =gBattleAnimArgs\n\ + ldrh r0, [r5]\n\ + strh r0, [r4, 0x30]\n\ + ldrh r0, [r5, 0x2]\n\ + strh r0, [r4, 0x32]\n\ + ldrh r0, [r5, 0x4]\n\ + strh r0, [r4, 0x34]\n\ + ldr r0, _080DADD0 @ =gMain\n\ + ldr r1, _080DADD4 @ =0x0000043d\n\ + adds r0, r1\n\ + ldrb r1, [r0]\n\ + movs r0, 0x2\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080DAE44\n\ + ldr r0, _080DADD8 @ =gBanksBySide\n\ + ldr r1, _080DADDC @ =gAnimBankTarget\n\ + ldrb r2, [r1]\n\ + adds r0, r2, r0\n\ + ldrb r1, [r0]\n\ + movs r0, 0x1\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080DADE0\n\ + adds r0, r2, 0\n\ + movs r1, 0x1\n\ + bl GetBattlerSpriteCoord\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + ldrh r5, [r5, 0x6]\n\ + adds r0, r5\n\ + b _080DADEE\n\ + .align 2, 0\n\ +_080DADCC: .4byte gBattleAnimArgs\n\ +_080DADD0: .4byte gMain\n\ +_080DADD4: .4byte 0x0000043d\n\ +_080DADD8: .4byte gBanksBySide\n\ +_080DADDC: .4byte gAnimBankTarget\n\ +_080DADE0:\n\ + adds r0, r2, 0\n\ + movs r1, 0x1\n\ + bl GetBattlerSpriteCoord\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + adds r0, 0x28\n\ +_080DADEE:\n\ + strh r0, [r4, 0x3C]\n\ + ldr r0, _080DAE1C @ =gBattleAnimArgs\n\ + movs r1, 0x8\n\ + ldrsh r0, [r0, r1]\n\ + cmp r0, 0\n\ + beq _080DAE24\n\ + ldr r0, _080DAE20 @ =gAnimBankTarget\n\ + ldrb r0, [r0]\n\ + bl sub_8079ED4\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + adds r0, 0x1\n\ + movs r1, 0x3\n\ + ands r0, r1\n\ + lsls r0, 2\n\ + ldrb r2, [r4, 0x5]\n\ + movs r1, 0xD\n\ + negs r1, r1\n\ + ands r1, r2\n\ + orrs r1, r0\n\ + strb r1, [r4, 0x5]\n\ + b _080DAE58\n\ + .align 2, 0\n\ +_080DAE1C: .4byte gBattleAnimArgs\n\ +_080DAE20: .4byte gAnimBankTarget\n\ +_080DAE24:\n\ + ldr r0, _080DAE40 @ =gAnimBankTarget\n\ + ldrb r0, [r0]\n\ + bl sub_8079ED4\n\ + movs r1, 0x3\n\ + ands r1, r0\n\ + lsls r1, 2\n\ + ldrb r2, [r4, 0x5]\n\ + movs r0, 0xD\n\ + negs r0, r0\n\ + ands r0, r2\n\ + orrs r0, r1\n\ + strb r0, [r4, 0x5]\n\ + b _080DAE58\n\ + .align 2, 0\n\ +_080DAE40: .4byte gAnimBankTarget\n\ +_080DAE44:\n\ + ldr r0, _080DAEFC @ =gAnimBankTarget\n\ + ldrb r0, [r0]\n\ + movs r1, 0x1\n\ + bl GetBattlerSpriteCoord\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + ldrh r5, [r5, 0x6]\n\ + adds r0, r5\n\ + strh r0, [r4, 0x3C]\n\ +_080DAE58:\n\ + ldr r5, _080DAF00 @ =gSineTable\n\ + ldrh r3, [r4, 0x30]\n\ + movs r1, 0xFF\n\ + ands r1, r3\n\ + lsls r0, r1, 1\n\ + adds r0, r5\n\ + ldrh r0, [r0]\n\ + movs r2, 0\n\ + strh r0, [r4, 0x36]\n\ + adds r1, 0x40\n\ + lsls r1, 1\n\ + adds r1, r5\n\ + ldrh r0, [r1]\n\ + negs r0, r0\n\ + strh r0, [r4, 0x38]\n\ + strh r2, [r4, 0x3A]\n\ + strh r2, [r4, 0x26]\n\ + strh r2, [r4, 0x24]\n\ + ldrb r0, [r4, 0x3]\n\ + lsls r0, 26\n\ + lsrs r6, r0, 27\n\ + lsls r3, 16\n\ + lsrs r3, 24\n\ + strh r3, [r4, 0x30]\n\ + bl Random\n\ + lsls r0, 16\n\ + asrs r7, r0, 16\n\ + movs r0, 0x80\n\ + lsls r0, 8\n\ + ands r0, r7\n\ + cmp r0, 0\n\ + beq _080DAEA2\n\ + ldrh r1, [r4, 0x30]\n\ + movs r0, 0xFF\n\ + subs r0, r1\n\ + strh r0, [r4, 0x30]\n\ +_080DAEA2:\n\ + movs r0, 0x30\n\ + ldrsh r1, [r4, r0]\n\ + lsls r0, r1, 1\n\ + adds r0, r5\n\ + ldrh r0, [r0]\n\ + ldr r3, _080DAF04 @ =gOamMatrices\n\ + lsls r2, r6, 3\n\ + adds r2, r3\n\ + adds r1, 0x40\n\ + lsls r1, 1\n\ + adds r1, r5\n\ + ldrh r1, [r1]\n\ + strh r1, [r2, 0x6]\n\ + strh r1, [r2]\n\ + strh r0, [r2, 0x2]\n\ + lsls r0, 16\n\ + asrs r0, 16\n\ + negs r0, r0\n\ + strh r0, [r2, 0x4]\n\ + adds r3, r4, 0\n\ + adds r3, 0x3F\n\ + ldrb r0, [r3]\n\ + movs r1, 0x4\n\ + orrs r0, r1\n\ + movs r1, 0x11\n\ + negs r1, r1\n\ + ands r0, r1\n\ + strb r0, [r3]\n\ + movs r0, 0x1\n\ + ands r0, r7\n\ + cmp r0, 0\n\ + beq _080DAEF2\n\ + adds r2, r4, 0\n\ + adds r2, 0x2A\n\ + movs r1, 0x1\n\ + movs r0, 0x1\n\ + strb r0, [r2]\n\ + ldrb r0, [r3]\n\ + orrs r0, r1\n\ + strb r0, [r3]\n\ +_080DAEF2:\n\ + ldr r0, _080DAF08 @ =sub_80DAF0C\n\ + str r0, [r4, 0x1C]\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080DAEFC: .4byte gAnimBankTarget\n\ +_080DAF00: .4byte gSineTable\n\ +_080DAF04: .4byte gOamMatrices\n\ +_080DAF08: .4byte sub_80DAF0C\n"); +} +#endif + +#ifdef NONMATCHING +void sub_80DAF0C(struct Sprite * sprite) { + + /* NONMATCHING - Functionally equivalent + * + * differences: + * + * asm contains useless: + * movs r1, 0 + * mov r8, r1 + * where r8 is never used can't be matched + * + * 0x8001 and 0x8002 loaded then added with 0 to r0 instead of loaded straight there + * + * add sp, #-0x10 instead of sub sp, #0x10 */ + + u16 * data; + u16 dataCpy[8]; + int higher; + + data = sprite->data; + + if (++sprite->data[0] > 4) { + sprite->pos2.x = (sprite->data[4] * sprite->data[6]) >> 8; + sprite->pos2.y = (sprite->data[5] * sprite->data[6]) >> 8; + + sprite->data[6] += sprite->data[3] & 0xff; + + if (sprite->data[6] >= (sprite->data[2] & 0xff)) { + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + + sprite->pos2.x = 0; + sprite->pos2.y = 0; + + memcpy(dataCpy, data, 16); + memset(data, 0, 16); + + data[4] = sprite->pos1.y << 8; + data[3] = dataCpy[3] >> 8; + data[1] = 0; + data[5] = dataCpy[1]; + + if(sprite->animNum != 0) { + if (data[3] & 8) { + data[2] = 0x8001; + } else { + data[2] = 0x8002; + } + } else { + if (data[3] & 8) { + data[2] = 1; + } else { + data[2] = 2; + } + } + + //data[6] bytes separated + ((u8*)data)[12] = dataCpy[2] >> 8; + ((u8*)data)[13] = (u8)data[6] - 2; + + // force evaluation order + higher = dataCpy[7] << 1; + data[7] = (data[7] & 1) | higher; + + sprite->callback = sub_80DA6F0; + } + } +} +#else +NAKED +void sub_80DAF0C(struct Sprite *sprite) +{ + asm_unified("push {r4-r7,lr}\n\ + mov r7, r8\n\ + push {r7}\n\ + sub sp, 0x10\n\ + adds r4, r0, 0\n\ + adds r5, r4, 0\n\ + adds r5, 0x2E\n\ + ldrh r0, [r4, 0x2E]\n\ + adds r0, 0x1\n\ + movs r1, 0\n\ + mov r8, r1\n\ + movs r7, 0\n\ + strh r0, [r4, 0x2E]\n\ + lsls r0, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x4\n\ + ble _080DAFF0\n\ + movs r2, 0x36\n\ + ldrsh r1, [r4, r2]\n\ + movs r2, 0x3A\n\ + ldrsh r0, [r4, r2]\n\ + muls r0, r1\n\ + asrs r6, r0, 8\n\ + strh r6, [r4, 0x24]\n\ + movs r0, 0x38\n\ + ldrsh r1, [r4, r0]\n\ + movs r2, 0x3A\n\ + ldrsh r0, [r4, r2]\n\ + muls r0, r1\n\ + asrs r3, r0, 8\n\ + strh r3, [r4, 0x26]\n\ + ldrh r2, [r4, 0x34]\n\ + movs r1, 0xFF\n\ + adds r0, r1, 0\n\ + ands r0, r2\n\ + ldrh r2, [r4, 0x3A]\n\ + adds r0, r2\n\ + strh r0, [r4, 0x3A]\n\ + ldrh r2, [r4, 0x32]\n\ + lsls r0, 16\n\ + asrs r0, 16\n\ + ands r1, r2\n\ + cmp r0, r1\n\ + blt _080DAFF0\n\ + ldrh r0, [r4, 0x20]\n\ + adds r0, r6\n\ + strh r0, [r4, 0x20]\n\ + ldrh r0, [r4, 0x22]\n\ + adds r0, r3\n\ + strh r0, [r4, 0x22]\n\ + strh r7, [r4, 0x24]\n\ + strh r7, [r4, 0x26]\n\ + mov r0, sp\n\ + adds r1, r5, 0\n\ + movs r2, 0x10\n\ + bl memcpy\n\ + adds r0, r5, 0\n\ + movs r1, 0\n\ + movs r2, 0x10\n\ + bl memset\n\ + ldrh r0, [r4, 0x22]\n\ + lsls r0, 8\n\ + strh r0, [r5, 0x8]\n\ + mov r0, sp\n\ + ldrh r0, [r0, 0x6]\n\ + lsrs r1, r0, 8\n\ + strh r1, [r5, 0x6]\n\ + strh r7, [r5, 0x2]\n\ + mov r0, sp\n\ + ldrh r0, [r0, 0x2]\n\ + strh r0, [r5, 0xA]\n\ + adds r0, r4, 0\n\ + adds r0, 0x2A\n\ + ldrb r0, [r0]\n\ + cmp r0, 0\n\ + beq _080DAFC0\n\ + movs r0, 0x8\n\ + ands r1, r0\n\ + cmp r1, 0\n\ + beq _080DAFB8\n\ + ldr r0, _080DAFB4 @ =0x00008001\n\ + b _080DAFCE\n\ + .align 2, 0\n\ + _080DAFB4: .4byte 0x00008001\n\ + _080DAFB8:\n\ + ldr r0, _080DAFBC @ =0x00008002\n\ + b _080DAFCE\n\ + .align 2, 0\n\ + _080DAFBC: .4byte 0x00008002\n\ + _080DAFC0:\n\ + movs r0, 0x8\n\ + ands r1, r0\n\ + cmp r1, 0\n\ + beq _080DAFCC\n\ + movs r0, 0x1\n\ + b _080DAFCE\n\ + _080DAFCC:\n\ + movs r0, 0x2\n\ + _080DAFCE:\n\ + strh r0, [r5, 0x4]\n\ + mov r0, sp\n\ + ldrh r0, [r0, 0x4]\n\ + lsrs r0, 8\n\ + strb r0, [r5, 0xC]\n\ + subs r0, 0x2\n\ + strb r0, [r5, 0xD]\n\ + mov r0, sp\n\ + ldrh r1, [r0, 0xE]\n\ + lsls r1, 1\n\ + ldrh r2, [r5, 0xE]\n\ + movs r0, 0x1\n\ + ands r0, r2\n\ + orrs r0, r1\n\ + strh r0, [r5, 0xE]\n\ + ldr r0, _080DAFFC @ =sub_80DA6F0\n\ + str r0, [r4, 0x1C]\n\ + _080DAFF0:\n\ + add sp, 0x10\n\ + pop {r3}\n\ + mov r8, r3\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ + _080DAFFC: .4byte sub_80DA6F0\n"); + +} +#endif + +void sub_80DB000(struct Sprite *sprite) +{ + u16 arg; + u8 mult; + + if (gBattleAnimArgs[2] == 0) + { + InitAnimSpritePos(sprite, 0); + } + else + { + sub_8078764(sprite, 0); + } + + if ((!gBattleAnimArgs[2] && !GetBattlerSide(gAnimBankAttacker)) + || (gBattleAnimArgs[2] == 1 && !GetBattlerSide(gAnimBankTarget))) + { + sprite->pos1.x += 8; + } + + SeekSpriteAnim(sprite, gBattleAnimArgs[4]); + sprite->pos1.x -= 32; + sprite->data[1] = 0x0ccc; + + arg = gBattleAnimArgs[4]; + mult = 12; + sprite->pos2.x += mult * arg; + sprite->data[0] = arg; + sprite->data[7] = gBattleAnimArgs[3]; + sprite->callback = sub_80DB0A0; +} + +void sub_80DB0A0(struct Sprite *sprite) +{ + sprite->pos2.x += sprite->data[1] >> 8; + + if (++sprite->data[0] == 6) + { + sprite->data[0] = 0; + sprite->pos2.x = 0; + StartSpriteAnim(sprite, 0); + } + + if (--sprite->data[7] == -1) + { + DestroyAnimSprite(sprite); + } +} + +void sub_80DB0E8(u8 task) +{ + u16 data = gTasks[task].data[0]; + if ((data & 31) == 0) + { + ++gAnimVisualTaskCount; + + gBattleAnimArgs[0] = Sin(gTasks[task].data[0], -13); + gBattleAnimArgs[1] = Cos(gTasks[task].data[0], -13); + gBattleAnimArgs[2] = 1; + gBattleAnimArgs[3] = 3; + + CreateSpriteAndAnimate(&gBattleAnimSpriteTemplate_83DB538, + GetBattlerSpriteCoord(gAnimBankTarget, 2), + GetBattlerSpriteCoord(gAnimBankTarget, 3), + 3); + } + + gTasks[task].data[0] += 8; + + if (gTasks[task].data[0] > 0xff) + { + DestroyAnimVisualTask(task); + } +} + +void sub_80DB194(struct Sprite *sprite) +{ + switch (sprite->data[0]) + { + case 0: + InitAnimSpritePos(sprite, 1); + gSprites[GetAnimBattlerSpriteId(0)].invisible = 1; + ++sprite->data[0]; + break; + case 1: + if (sprite->affineAnimEnded) + { + DestroyAnimSprite(sprite); + } + } +} + +void sub_80DB1F4(struct Sprite *sprite) +{ + switch (sprite->data[0]) + { + case 0: + sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankTarget, 1); + sprite->pos2.y = -sprite->pos1.y - 32; + ++sprite->data[0]; + break; + case 1: + sprite->pos2.y += 10; + if (sprite->pos2.y >= 0) + { + ++sprite->data[0]; + } + break; + case 2: + sprite->pos2.y -= 10; + if (sprite->pos1.y + sprite->pos2.y < -32) + { + gSprites[GetAnimBattlerSpriteId(0)].invisible = 0; + DestroyAnimSprite(sprite); + } + } +} + +void sub_80DB288(struct Sprite *sprite) +{ + InitAnimSpritePos(sprite, 1); + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[1] = gBattleAnimArgs[3]; + sprite->callback = sub_80DB2D0; + gSprites[GetAnimBattlerSpriteId(0)].invisible = 1; +} + +void sub_80DB2D0(struct Sprite *sprite) +{ + if (sprite->data[0] > 0) + { + --sprite->data[0]; + } + else if (sprite->pos1.y + sprite->pos2.y > -32) + { + sprite->data[2] += sprite->data[1]; + sprite->pos2.y -= (sprite->data[2] >> 8); + } + else + { + sprite->invisible = 1; + if (sprite->data[3]++ > 20) + { + sprite->callback = sub_80DB330; + } + } +} + +void sub_80DB330(struct Sprite *sprite) +{ + sprite->pos2.y += sprite->data[2] >> 8; + + if (sprite->pos1.y + sprite->pos2.y > -32) + { + sprite->invisible = 0; + } + + if (sprite->pos2.y > 0) + { + DestroyAnimSprite(sprite); + } +} + +#ifdef NONMATCHING +void sub_80DB374(struct Sprite * sprite) +{ + // NONMATCHING - Functionally equivalent - slight register swap at end + + u32 matrixNum; + int t1, t3; + s16 t2; + + switch (sprite->data[0]) { + + case 0: + if (!gBattleAnimArgs[0]) + { + sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 0); + sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 1); + } + else + { + sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankTarget, 0); + sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankTarget, 1); + } + + sprite->data[1] = 512; + + sub_8078FDC(sprite, 0, 256, sprite->data[1], 0); + ++sprite->data[0]; + break; + case 1: + if (sprite->data[2] <= 11) + { + sprite->data[1] -= 40; + } + else + { + sprite->data[1] += 40; + } + + ++sprite->data[2]; + + sub_8078FDC(sprite, 0, 256, sprite->data[1], 0); + + matrixNum = sprite->oam.matrixNum; + + t1 = 15616; + t2 = gOamMatrices[matrixNum].d; + t3 = t1 / t2 + 1; + + if (t3 > 128) + { + t3 = 128; + } + + /* NONMATCHING + * compiles to: + * asr r0, r0, #0x1 + strh r0, [r5, #0x26] + * needed: + * asrs r1, r0, 1 + * strh r1, [r5, 0x26] */ + sprite->pos2.y = (64 - t3) / 2; + + if (sprite->data[2] == 24) + { + sub_8079098(sprite); + DestroyAnimSprite(sprite); + } + } +} +#else +NAKED +void sub_80DB374(struct Sprite *sprite) +{ + asm_unified("push {r4,r5,lr}\n\ + sub sp, 0x4\n\ + adds r5, r0, 0\n\ + movs r1, 0x2E\n\ + ldrsh r0, [r5, r1]\n\ + cmp r0, 0\n\ + beq _080DB388\n\ + cmp r0, 0x1\n\ + beq _080DB3E0\n\ + b _080DB44C\n\ +_080DB388:\n\ + ldr r0, _080DB398 @ =gBattleAnimArgs\n\ + movs r2, 0\n\ + ldrsh r0, [r0, r2]\n\ + cmp r0, 0\n\ + bne _080DB3A0\n\ + ldr r4, _080DB39C @ =gAnimBankAttacker\n\ + b _080DB3A2\n\ + .align 2, 0\n\ +_080DB398: .4byte gBattleAnimArgs\n\ +_080DB39C: .4byte gAnimBankAttacker\n\ +_080DB3A0:\n\ + ldr r4, _080DB3DC @ =gAnimBankTarget\n\ +_080DB3A2:\n\ + ldrb r0, [r4]\n\ + movs r1, 0\n\ + bl GetBattlerSpriteCoord\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + strh r0, [r5, 0x20]\n\ + ldrb r0, [r4]\n\ + movs r1, 0x1\n\ + bl GetBattlerSpriteCoord\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + strh r0, [r5, 0x22]\n\ + movs r0, 0\n\ + movs r3, 0x80\n\ + lsls r3, 2\n\ + strh r3, [r5, 0x30]\n\ + movs r2, 0x80\n\ + lsls r2, 1\n\ + str r0, [sp]\n\ + adds r0, r5, 0\n\ + movs r1, 0\n\ + bl sub_8078FDC\n\ + ldrh r0, [r5, 0x2E]\n\ + adds r0, 0x1\n\ + strh r0, [r5, 0x2E]\n\ + b _080DB44C\n\ + .align 2, 0\n\ +_080DB3DC: .4byte gAnimBankTarget\n\ +_080DB3E0:\n\ + movs r1, 0x32\n\ + ldrsh r0, [r5, r1]\n\ + cmp r0, 0xB\n\ + bgt _080DB3EE\n\ + ldrh r0, [r5, 0x30]\n\ + subs r0, 0x28\n\ + b _080DB3F2\n\ +_080DB3EE:\n\ + ldrh r0, [r5, 0x30]\n\ + adds r0, 0x28\n\ +_080DB3F2:\n\ + strh r0, [r5, 0x30]\n\ + ldrh r0, [r5, 0x32]\n\ + adds r0, 0x1\n\ + movs r1, 0\n\ + strh r0, [r5, 0x32]\n\ + movs r2, 0x80\n\ + lsls r2, 1\n\ + movs r0, 0x30\n\ + ldrsh r3, [r5, r0]\n\ + str r1, [sp]\n\ + adds r0, r5, 0\n\ + bl sub_8078FDC\n\ + ldrb r1, [r5, 0x3]\n\ + lsls r1, 26\n\ + lsrs r1, 27\n\ + movs r0, 0xF4\n\ + lsls r0, 6\n\ + ldr r2, _080DB454 @ =gOamMatrices\n\ + lsls r1, 3\n\ + adds r1, r2\n\ + movs r2, 0x6\n\ + ldrsh r1, [r1, r2]\n\ + bl __divsi3\n\ + adds r1, r0, 0x1\n\ + cmp r1, 0x80\n\ + ble _080DB42C\n\ + movs r1, 0x80\n\ +_080DB42C:\n\ + movs r0, 0x40\n\ + subs r0, r1\n\ + lsrs r1, r0, 31\n\ + adds r0, r1\n\ + asrs r1, r0, 1\n\ + strh r1, [r5, 0x26]\n\ + movs r1, 0x32\n\ + ldrsh r0, [r5, r1]\n\ + cmp r0, 0x18\n\ + bne _080DB44C\n\ + adds r0, r5, 0\n\ + bl sub_8079098\n\ + adds r0, r5, 0\n\ + bl DestroyAnimSprite\n\ +_080DB44C:\n\ + add sp, 0x4\n\ + pop {r4,r5}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080DB454: .4byte gOamMatrices\n"); +} +#endif + +void sub_80DB458(struct Sprite *sprite) +{ + int v1, v2; + + v1 = 0x1ff & Random(); + v2 = 0x7f & Random(); + + if (v1 & 1) + { + sprite->data[0] = 736 + v1; + } + else + { + sprite->data[0] = 736 - v1; + } + + if (v2 & 1) + { + sprite->data[1] = 896 + v2; + } + else + { + sprite->data[1] = 896 - v2; + } + + sprite->data[2] = gBattleAnimArgs[0]; + + if (sprite->data[2]) + { + sprite->oam.matrixNum = 8; + } + + if (gBattleAnimArgs[1] == 0) + { + sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 0); + sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 1) + 32; + } + else + { + sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankTarget, 0); + sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankTarget, 1) + 32; + } + + sprite->callback = sub_80DB508; +} + +#ifdef NONMATCHING +void sub_80DB508(struct Sprite * sprite) +{ + // NONMATCHING - Functionally equivalent + + if (sprite->data[2] == 0) + { + sprite->pos2.x += sprite->data[0] >> 8; + } + else + { + sprite->pos2.x -= sprite->data[0] >> 8; + } + + sprite->pos2.y -= sprite->data[1] >> 8; + sprite->data[0] = sprite->data[0]; + sprite->data[1] -= 32; + + if (sprite->data[0] < 0) + { + sprite->data[0] = 0; + } + + if (++sprite->data[3] == 31) + { + DestroyAnimSprite(sprite); + } +} +#else +NAKED +void sub_80DB508(struct Sprite *sprite) +{ + asm_unified("push {r4,lr}\n\ + adds r4, r0, 0\n\ + movs r1, 0x32\n\ + ldrsh r0, [r4, r1]\n\ + cmp r0, 0\n\ + bne _080DB520\n\ + ldrh r3, [r4, 0x2E]\n\ + lsls r0, r3, 16\n\ + asrs r0, 24\n\ + ldrh r1, [r4, 0x24]\n\ + adds r0, r1\n\ + b _080DB52A\n\ +_080DB520:\n\ + ldrh r3, [r4, 0x2E]\n\ + lsls r1, r3, 16\n\ + asrs r1, 24\n\ + ldrh r0, [r4, 0x24]\n\ + subs r0, r1\n\ +_080DB52A:\n\ + strh r0, [r4, 0x24]\n\ + ldrh r2, [r4, 0x30]\n\ + lsls r1, r2, 16\n\ + asrs r1, 24\n\ + ldrh r0, [r4, 0x26]\n\ + subs r0, r1\n\ + strh r0, [r4, 0x26]\n\ + strh r3, [r4, 0x2E]\n\ + adds r0, r2, 0\n\ + subs r0, 0x20\n\ + strh r0, [r4, 0x30]\n\ + lsls r0, r3, 16\n\ + cmp r0, 0\n\ + bge _080DB54A\n\ + movs r0, 0\n\ + strh r0, [r4, 0x2E]\n\ +_080DB54A:\n\ + ldrh r0, [r4, 0x34]\n\ + adds r0, 0x1\n\ + strh r0, [r4, 0x34]\n\ + lsls r0, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x1F\n\ + bne _080DB55E\n\ + adds r0, r4, 0\n\ + bl DestroyAnimSprite\n\ +_080DB55E:\n\ + pop {r4}\n\ + pop {r0}\n\ + bx r0\n"); +} +#endif + +void sub_80DB564(struct Sprite *sprite) +{ + + sprite->data[6] = 0; + sprite->data[7] = 0x40; + sprite->callback = sub_80DB578; + +} + +void sub_80DB578(struct Sprite *sprite) +{ + + switch (sprite->data[0]) + { + case 0: + if (++sprite->data[1] > 8) + { + sprite->data[1] = 0; + sprite->invisible ^= 1; + if (++sprite->data[2] > 5 && sprite->invisible) + { + ++sprite->data[0]; + } + } + break; + case 1: + DestroyAnimSprite(sprite); + } + +} + +void sub_80DB5E4(struct Sprite *sprite) +{ + + s16 posx, posy; + u16 rotation; + + posx = sprite->pos1.x; + posy = sprite->pos1.y; + + sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2); + sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3); + + sprite->data[4] = sprite->pos1.x << 4; + sprite->data[5] = sprite->pos1.y << 4; + + sprite->data[6] = ((posx - sprite->pos1.x) << 4) / 12; + sprite->data[7] = ((posy - sprite->pos1.y) << 4) / 12; + + rotation = ArcTan2Neg(posx - sprite->pos1.x, posy - sprite->pos1.y); + rotation += 0xc000; + + sub_8078FDC(sprite, 1, 0x100, 0x100, rotation); + + sprite->callback = sub_80DB6A0; + +} + +void sub_80DB6A0(struct Sprite *sprite) +{ + + sprite->data[4] += sprite->data[6]; + sprite->data[5] += sprite->data[7]; + + sprite->pos1.x = sprite->data[4] >> 4; + sprite->pos1.y = sprite->data[5] >> 4; + + if ((u16) (sprite->pos1.x + 0x2d) > 0x14a || sprite->pos1.y > 0x9d || sprite->pos1.y < -0x2d) + { + move_anim_8074EE0(sprite); + } + +} + +void unref_sub_80DB6E4(u8 taskId) +{ + + if (gBattleAnimArgs[0] == 0) + { + u8 spriteId = GetAnimBattlerSpriteId(0); + gSprites[spriteId].invisible = 1; + } + else + { + u8 spriteId = GetAnimBattlerSpriteId(0); + gSprites[spriteId].invisible = 0; + } + + DestroyAnimVisualTask(taskId); + +}
\ No newline at end of file |