diff options
-rw-r--r-- | asm/ice.s | 3186 | ||||
-rw-r--r-- | data/battle_anim_scripts.s | 230 | ||||
-rw-r--r-- | include/rom_8077ABC.h | 1 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/battle/anim/aurora.c | 34 | ||||
-rw-r--r-- | src/battle/anim/ice.c | 1953 |
6 files changed, 2029 insertions, 3376 deletions
diff --git a/asm/ice.s b/asm/ice.s deleted file mode 100644 index 22381fa16..000000000 --- a/asm/ice.s +++ /dev/null @@ -1,3186 +0,0 @@ - .include "constants/gba_constants.inc" - .include "include/macros.inc" - - .syntax unified - - .text - - @ ice - - thumb_func_start sub_80D7704 -sub_80D7704: @ 80D7704 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - adds r5, r0, 0 - ldrh r2, [r5, 0x4] - lsls r1, r2, 22 - lsrs r1, 22 - adds r1, 0x7 - ldr r3, _080D780C @ =0x000003ff - adds r0, r3, 0 - ands r1, r0 - ldr r0, _080D7810 @ =0xfffffc00 - ands r0, r2 - orrs r0, r1 - strh r0, [r5, 0x4] - ldr r4, _080D7814 @ =gAnimBankTarget - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - ldrb r0, [r4] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - ldr r4, _080D7818 @ =gAnimBankAttacker - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r3, r0, 24 - ldrb r0, [r4] - movs r1, 0x3 - str r3, [sp] - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r6, r0, 24 - ldr r1, _080D781C @ =gBattleAnimArgs - ldrh r0, [r1, 0x8] - strh r0, [r5, 0x2E] - ldrh r0, [r1] - ldr r3, [sp] - adds r0, r3 - strh r0, [r5, 0x30] - ldrh r0, [r1, 0x4] - mov r4, r9 - adds r0, r4, r0 - strh r0, [r5, 0x32] - ldrh r0, [r1, 0x2] - adds r0, r6 - strh r0, [r5, 0x34] - ldrh r0, [r1, 0x6] - mov r7, r8 - adds r0, r7, r0 - strh r0, [r5, 0x36] - adds r0, r5, 0 - bl sub_8078314 - adds r4, 0x20 - movs r0, 0x98 - lsls r0, 1 - mov r12, r0 - ldr r3, [sp] - cmp r4, r12 - bhi _080D77DE - adds r0, r7, 0 - adds r0, 0x20 - ldrh r1, [r5, 0x30] - ldrh r2, [r5, 0x32] - cmp r0, 0xE0 - bhi _080D77DE - adds r4, r1, 0 - mov r10, r12 -_080D77AA: - mov r7, r9 - lsls r1, r7, 16 - asrs r1, 16 - adds r1, r4 - lsls r1, 16 - mov r7, r8 - lsls r0, r7, 16 - asrs r0, 16 - adds r0, r2 - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 - lsrs r0, r1, 16 - mov r9, r0 - movs r7, 0x80 - lsls r7, 14 - adds r1, r7 - lsrs r1, 16 - cmp r1, r10 - bhi _080D77DE - mov r1, r8 - lsls r0, r1, 16 - adds r0, r7 - lsrs r0, 16 - cmp r0, 0xE0 - bls _080D77AA -_080D77DE: - ldrh r0, [r5, 0x30] - negs r7, r0 - strh r7, [r5, 0x30] - ldrh r0, [r5, 0x32] - negs r4, r0 - strh r4, [r5, 0x32] - lsls r0, r3, 16 - movs r1, 0x80 - lsls r1, 14 - adds r0, r1 - lsrs r0, 16 - movs r2, 0x98 - lsls r2, 1 - mov r12, r2 - ldr r1, _080D781C @ =gBattleAnimArgs - mov r10, r1 - cmp r0, r12 - bhi _080D784A - lsls r1, r6, 16 - movs r2, 0x80 - lsls r2, 14 - adds r0, r1, r2 - b _080D7842 - .align 2, 0 -_080D780C: .4byte 0x000003ff -_080D7810: .4byte 0xfffffc00 -_080D7814: .4byte gAnimBankTarget -_080D7818: .4byte gAnimBankAttacker -_080D781C: .4byte gBattleAnimArgs -_080D7820: - lsls r1, r3, 16 - asrs r1, 16 - adds r1, r7 - lsls r1, 16 - asrs r0, r2, 16 - adds r0, r4 - lsls r0, 16 - lsrs r6, r0, 16 - lsrs r3, r1, 16 - movs r0, 0x80 - lsls r0, 14 - adds r1, r0 - lsrs r1, 16 - cmp r1, r12 - bhi _080D784A - lsls r1, r6, 16 - adds r0, r1, r0 -_080D7842: - lsrs r0, 16 - adds r2, r1, 0 - cmp r0, 0xE0 - bls _080D7820 -_080D784A: - strh r3, [r5, 0x20] - strh r6, [r5, 0x22] - mov r1, r10 - ldrh r0, [r1, 0x8] - strh r0, [r5, 0x2E] - strh r3, [r5, 0x30] - mov r2, r9 - strh r2, [r5, 0x32] - strh r6, [r5, 0x34] - mov r3, r8 - strh r3, [r5, 0x36] - adds r0, r5, 0 - bl sub_8078314 - mov r7, r10 - ldrh r0, [r7, 0xA] - strh r0, [r5, 0x34] - ldrh r0, [r7, 0xC] - strh r0, [r5, 0x36] - ldr r0, _080D7884 @ =sub_80D7888 - str r0, [r5, 0x1C] - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080D7884: .4byte sub_80D7888 - thumb_func_end sub_80D7704 - - thumb_func_start sub_80D7888 -sub_80D7888: @ 80D7888 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x2E - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _080D78E0 - ldrh r1, [r4, 0x30] - ldrh r2, [r4, 0x38] - adds r1, r2 - strh r1, [r4, 0x38] - ldrh r0, [r4, 0x32] - ldrh r2, [r4, 0x3A] - adds r0, r2 - strh r0, [r4, 0x3A] - strh r1, [r4, 0x24] - strh r0, [r4, 0x26] - movs r1, 0x3C - ldrsh r0, [r4, r1] - movs r2, 0x34 - ldrsh r1, [r4, r2] - bl Sin - ldrh r1, [r4, 0x24] - adds r0, r1 - strh r0, [r4, 0x24] - movs r2, 0x3C - ldrsh r0, [r4, r2] - movs r2, 0x34 - ldrsh r1, [r4, r2] - bl Sin - ldrh r1, [r4, 0x26] - adds r0, r1 - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x36] - ldrh r2, [r4, 0x3C] - adds r0, r2 - movs r1, 0xFF - ands r0, r1 - strh r0, [r4, 0x3C] - ldrh r0, [r4, 0x2E] - subs r0, 0x1 - strh r0, [r4, 0x2E] - b _080D78E6 -_080D78E0: - adds r0, r4, 0 - bl DestroyAnimSprite -_080D78E6: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80D7888 - - thumb_func_start sub_80D78EC -sub_80D78EC: @ 80D78EC - push {r4,lr} - adds r4, r0, 0 - ldr r0, _080D7920 @ =gBattleAnimArgs - ldrh r0, [r0] - strh r0, [r4, 0x2E] - movs r0, 0x3C - strh r0, [r4, 0x30] - movs r0, 0x9 - strh r0, [r4, 0x32] - movs r0, 0x1E - strh r0, [r4, 0x34] - movs r0, 0xFE - lsls r0, 8 - strh r0, [r4, 0x36] - ldr r1, _080D7924 @ =DestroyAnimSprite - adds r0, r4, 0 - bl StoreSpriteCallbackInData - ldr r1, _080D7928 @ =sub_8078174 - str r1, [r4, 0x1C] - adds r0, r4, 0 - bl _call_via_r1 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080D7920: .4byte gBattleAnimArgs -_080D7924: .4byte DestroyAnimSprite -_080D7928: .4byte sub_8078174 - thumb_func_end sub_80D78EC - - thumb_func_start sub_80D792C -sub_80D792C: @ 80D792C - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x1 - bl InitAnimSpritePos - ldr r0, _080D7960 @ =gAnimBankTarget - ldrb r0, [r0] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x32] - ldr r0, _080D7964 @ =gAnimBankAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080D796C - ldr r0, _080D7968 @ =gBattleAnimArgs - ldrh r1, [r4, 0x32] - ldrh r0, [r0, 0x4] - subs r1, r0 - strh r1, [r4, 0x32] - b _080D7976 - .align 2, 0 -_080D7960: .4byte gAnimBankTarget -_080D7964: .4byte gAnimBankAttacker -_080D7968: .4byte gBattleAnimArgs -_080D796C: - ldr r0, _080D79A4 @ =gBattleAnimArgs - ldrh r0, [r0, 0x4] - ldrh r1, [r4, 0x32] - adds r0, r1 - strh r0, [r4, 0x32] -_080D7976: - ldr r0, _080D79A8 @ =gAnimBankTarget - ldrb r0, [r0] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - ldr r1, _080D79A4 @ =gBattleAnimArgs - lsrs r0, 24 - ldrh r2, [r1, 0x6] - adds r0, r2 - strh r0, [r4, 0x36] - ldrh r0, [r1, 0x8] - strh r0, [r4, 0x2E] - ldr r1, _080D79AC @ =DestroyAnimSprite - adds r0, r4, 0 - bl StoreSpriteCallbackInData - ldr r0, _080D79B0 @ =StartAnimLinearTranslation - str r0, [r4, 0x1C] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080D79A4: .4byte gBattleAnimArgs -_080D79A8: .4byte gAnimBankTarget -_080D79AC: .4byte DestroyAnimSprite -_080D79B0: .4byte StartAnimLinearTranslation - thumb_func_end sub_80D792C - - thumb_func_start sub_80D79B4 -sub_80D79B4: @ 80D79B4 - push {r4,r5,lr} - adds r4, r0, 0 - ldr r5, _080D79CC @ =gBattleAnimArgs - movs r1, 0x4 - ldrsh r0, [r5, r1] - cmp r0, 0 - bne _080D79D0 - adds r0, r4, 0 - movs r1, 0x1 - bl sub_8078764 - b _080D7A06 - .align 2, 0 -_080D79CC: .4byte gBattleAnimArgs -_080D79D0: - ldr r0, _080D7A18 @ =gAnimBankTarget - ldrb r0, [r0] - adds r2, r4, 0 - adds r2, 0x20 - adds r3, r4, 0 - adds r3, 0x22 - movs r1, 0x1 - bl SetAverageBattlerPositions - ldr r0, _080D7A1C @ =gAnimBankAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080D79F6 - ldrh r0, [r5] - negs r0, r0 - strh r0, [r5] -_080D79F6: - ldrh r0, [r5] - ldrh r1, [r4, 0x20] - adds r0, r1 - strh r0, [r4, 0x20] - ldrh r0, [r5, 0x2] - ldrh r1, [r4, 0x22] - adds r0, r1 - strh r0, [r4, 0x22] -_080D7A06: - ldr r1, _080D7A20 @ =sub_80D7A28 - adds r0, r4, 0 - bl StoreSpriteCallbackInData - ldr r0, _080D7A24 @ =sub_80785E4 - str r0, [r4, 0x1C] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D7A18: .4byte gAnimBankTarget -_080D7A1C: .4byte gAnimBankAttacker -_080D7A20: .4byte sub_80D7A28 -_080D7A24: .4byte sub_80785E4 - thumb_func_end sub_80D79B4 - - thumb_func_start sub_80D7A28 -sub_80D7A28: @ 80D7A28 - push {lr} - adds r3, r0, 0 - 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] - ldrh r0, [r3, 0x2E] - adds r0, 0x1 - strh r0, [r3, 0x2E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x14 - bne _080D7A5E - adds r0, r3, 0 - bl move_anim_8074EE0 -_080D7A5E: - pop {r0} - bx r0 - thumb_func_end sub_80D7A28 - - thumb_func_start sub_80D7A64 -sub_80D7A64: @ 80D7A64 - push {r4-r7,lr} - sub sp, 0x10 - adds r5, r0, 0 - movs r1, 0x1 - bl InitAnimSpritePos - ldr r6, _080D7AAC @ =gBattleAnimArgs - ldrh r0, [r6, 0x8] - strh r0, [r5, 0x2E] - ldrh r0, [r5, 0x20] - strh r0, [r5, 0x30] - ldrh r0, [r5, 0x22] - strh r0, [r5, 0x34] - movs r1, 0xA - ldrsh r0, [r6, r1] - cmp r0, 0 - bne _080D7AB4 - ldr r4, _080D7AB0 @ =gAnimBankTarget - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x32] - ldrb r0, [r4] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - ldrh r6, [r6, 0x6] - adds r0, r6 - strh r0, [r5, 0x36] - b _080D7AC6 - .align 2, 0 -_080D7AAC: .4byte gBattleAnimArgs -_080D7AB0: .4byte gAnimBankTarget -_080D7AB4: - ldr r0, _080D7AE0 @ =gAnimBankTarget - ldrb r0, [r0] - adds r2, r5, 0 - adds r2, 0x32 - adds r3, r5, 0 - adds r3, 0x36 - movs r1, 0x1 - bl SetAverageBattlerPositions -_080D7AC6: - ldr r0, _080D7AE4 @ =gAnimBankAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080D7AEC - ldr r0, _080D7AE8 @ =gBattleAnimArgs - ldrh r1, [r5, 0x32] - ldrh r0, [r0, 0x4] - subs r1, r0 - strh r1, [r5, 0x32] - b _080D7AF6 - .align 2, 0 -_080D7AE0: .4byte gAnimBankTarget -_080D7AE4: .4byte gAnimBankAttacker -_080D7AE8: .4byte gBattleAnimArgs -_080D7AEC: - ldr r0, _080D7B94 @ =gBattleAnimArgs - ldrh r0, [r0, 0x4] - ldrh r2, [r5, 0x32] - adds r0, r2 - strh r0, [r5, 0x32] -_080D7AF6: - adds r7, r5, 0 - adds r7, 0x2E - adds r2, r7, 0 - mov r1, sp - movs r4, 0x7 -_080D7B00: - ldrh r0, [r2] - strh r0, [r1] - adds r2, 0x2 - adds r1, 0x2 - subs r4, 0x1 - cmp r4, 0 - bge _080D7B00 - adds r0, r5, 0 - bl sub_8078D60 - ldrh r0, [r5, 0x30] - movs r1, 0x1 - eors r0, r1 - strh r0, [r5, 0x30] - ldrh r0, [r5, 0x32] - eors r0, r1 - strh r0, [r5, 0x32] -_080D7B22: - movs r0, 0x1 - strh r0, [r5, 0x2E] - adds r0, r5, 0 - bl sub_8078CE8 - movs r0, 0x20 - ldrsh r1, [r5, r0] - movs r2, 0x24 - ldrsh r0, [r5, r2] - adds r1, r0 - adds r1, 0x10 - movs r0, 0x88 - lsls r0, 1 - cmp r1, r0 - bhi _080D7B56 - movs r0, 0x22 - ldrsh r1, [r5, r0] - movs r2, 0x26 - ldrsh r0, [r5, r2] - adds r1, r0 - cmp r1, 0xA0 - bgt _080D7B56 - movs r0, 0x10 - negs r0, r0 - cmp r1, r0 - bge _080D7B22 -_080D7B56: - ldrh r0, [r5, 0x24] - ldrh r1, [r5, 0x20] - adds r0, r1 - movs r1, 0 - strh r0, [r5, 0x20] - ldrh r0, [r5, 0x26] - ldrh r2, [r5, 0x22] - adds r0, r2 - strh r0, [r5, 0x22] - strh r1, [r5, 0x26] - strh r1, [r5, 0x24] - ldr r6, _080D7B98 @ =sub_8078D8C - ldr r1, _080D7B9C @ =sub_80D7BA0 - mov r3, sp - adds r2, r7, 0 - movs r4, 0x7 -_080D7B76: - ldrh r0, [r3] - strh r0, [r2] - adds r3, 0x2 - adds r2, 0x2 - subs r4, 0x1 - cmp r4, 0 - bge _080D7B76 - str r6, [r5, 0x1C] - adds r0, r5, 0 - bl StoreSpriteCallbackInData - add sp, 0x10 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080D7B94: .4byte gBattleAnimArgs -_080D7B98: .4byte sub_8078D8C -_080D7B9C: .4byte sub_80D7BA0 - thumb_func_end sub_80D7A64 - - thumb_func_start sub_80D7BA0 -sub_80D7BA0: @ 80D7BA0 - push {r4,r5,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x24] - ldrh r1, [r4, 0x20] - adds r0, r1 - movs r5, 0 - strh r0, [r4, 0x20] - ldrh r0, [r4, 0x26] - ldrh r2, [r4, 0x22] - adds r0, r2 - strh r0, [r4, 0x22] - strh r5, [r4, 0x26] - strh r5, [r4, 0x24] - movs r0, 0x80 - strh r0, [r4, 0x2E] - ldr r0, _080D7BFC @ =gAnimBankAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - ldr r1, _080D7C00 @ =0x0000ffec - cmp r0, 0 - beq _080D7BD0 - movs r1, 0x14 -_080D7BD0: - movs r2, 0x2E - ldrsh r0, [r4, r2] - lsls r1, 16 - asrs r1, 16 - bl Sin - strh r0, [r4, 0x34] - movs r1, 0x2E - ldrsh r0, [r4, r1] - movs r1, 0xF - bl Cos - strh r0, [r4, 0x36] - strh r5, [r4, 0x38] - ldr r1, _080D7C04 @ =sub_80D7C08 - str r1, [r4, 0x1C] - adds r0, r4, 0 - bl _call_via_r1 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D7BFC: .4byte gAnimBankAttacker -_080D7C00: .4byte 0x0000ffec -_080D7C04: .4byte sub_80D7C08 - thumb_func_end sub_80D7BA0 - - thumb_func_start sub_80D7C08 -sub_80D7C08: @ 80D7C08 - push {r4,lr} - adds r4, r0, 0 - ldr r0, _080D7C5C @ =gAnimBankAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - ldr r1, _080D7C60 @ =0x0000ffec - cmp r0, 0 - beq _080D7C1E - movs r1, 0x14 -_080D7C1E: - movs r2, 0x38 - ldrsh r0, [r4, r2] - cmp r0, 0x1F - bgt _080D7C64 - movs r2, 0x2E - ldrsh r0, [r4, r2] - lsls r1, 16 - asrs r1, 16 - bl Sin - ldrh r1, [r4, 0x34] - subs r0, r1 - strh r0, [r4, 0x24] - movs r1, 0x2E - ldrsh r0, [r4, r1] - movs r1, 0xF - bl Cos - ldrh r1, [r4, 0x36] - subs r0, r1 - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x2E] - adds r0, 0x10 - movs r1, 0xFF - ands r0, r1 - strh r0, [r4, 0x2E] - ldrh r0, [r4, 0x38] - adds r0, 0x1 - strh r0, [r4, 0x38] - b _080D7C82 - .align 2, 0 -_080D7C5C: .4byte gAnimBankAttacker -_080D7C60: .4byte 0x0000ffec -_080D7C64: - ldrh r0, [r4, 0x24] - ldrh r2, [r4, 0x20] - adds r0, r2 - movs r1, 0 - strh r0, [r4, 0x20] - ldrh r0, [r4, 0x26] - ldrh r2, [r4, 0x22] - adds r0, r2 - strh r0, [r4, 0x22] - strh r1, [r4, 0x26] - strh r1, [r4, 0x24] - strh r1, [r4, 0x36] - strh r1, [r4, 0x34] - ldr r0, _080D7C88 @ =sub_80D7C8C - str r0, [r4, 0x1C] -_080D7C82: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080D7C88: .4byte sub_80D7C8C - thumb_func_end sub_80D7C08 - - thumb_func_start sub_80D7C8C -sub_80D7C8C: @ 80D7C8C - push {r4,lr} - adds r4, r0, 0 - movs r0, 0x1 - strh r0, [r4, 0x2E] - adds r0, r4, 0 - bl sub_8078CE8 - movs r1, 0x20 - ldrsh r0, [r4, r1] - movs r2, 0x24 - ldrsh r1, [r4, r2] - adds r0, r1 - adds r0, 0x10 - movs r1, 0x88 - lsls r1, 1 - cmp r0, r1 - bhi _080D7CC8 - movs r1, 0x22 - ldrsh r0, [r4, r1] - movs r2, 0x26 - ldrsh r1, [r4, r2] - adds r1, r0, r1 - movs r0, 0x80 - lsls r0, 1 - cmp r1, r0 - bgt _080D7CC8 - movs r0, 0x10 - negs r0, r0 - cmp r1, r0 - bge _080D7CCE -_080D7CC8: - adds r0, r4, 0 - bl DestroyAnimSprite -_080D7CCE: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80D7C8C - - thumb_func_start sub_80D7CD4 -sub_80D7CD4: @ 80D7CD4 - push {r4-r7,lr} - sub sp, 0x10 - adds r5, r0, 0 - movs r1, 0x1 - bl InitAnimSpritePos - ldr r1, _080D7D18 @ =gBattleAnimArgs - ldrh r0, [r1, 0x8] - strh r0, [r5, 0x2E] - ldrh r0, [r5, 0x20] - strh r0, [r5, 0x30] - ldrh r0, [r5, 0x22] - strh r0, [r5, 0x34] - movs r2, 0xE - ldrsh r0, [r1, r2] - cmp r0, 0 - bne _080D7D20 - ldr r4, _080D7D1C @ =gAnimBankTarget - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x32] - ldrb r0, [r4] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x36] - b _080D7D32 - .align 2, 0 -_080D7D18: .4byte gBattleAnimArgs -_080D7D1C: .4byte gAnimBankTarget -_080D7D20: - ldr r0, _080D7D50 @ =gAnimBankTarget - ldrb r0, [r0] - adds r2, r5, 0 - adds r2, 0x32 - adds r3, r5, 0 - adds r3, 0x36 - movs r1, 0x1 - bl SetAverageBattlerPositions -_080D7D32: - ldr r0, _080D7D54 @ =gAnimBankAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080D7D5C - ldr r0, _080D7D58 @ =gBattleAnimArgs - ldrh r1, [r5, 0x32] - ldrh r2, [r0, 0x4] - subs r1, r2 - strh r1, [r5, 0x32] - adds r1, r0, 0 - b _080D7D66 - .align 2, 0 -_080D7D50: .4byte gAnimBankTarget -_080D7D54: .4byte gAnimBankAttacker -_080D7D58: .4byte gBattleAnimArgs -_080D7D5C: - ldr r1, _080D7E10 @ =gBattleAnimArgs - ldrh r0, [r1, 0x4] - ldrh r2, [r5, 0x32] - adds r0, r2 - strh r0, [r5, 0x32] -_080D7D66: - ldrh r0, [r1, 0x6] - ldrh r1, [r5, 0x36] - adds r0, r1 - strh r0, [r5, 0x36] - adds r0, r5, 0 - bl sub_8078D60 - adds r7, r5, 0 - adds r7, 0x2E - adds r2, r7, 0 - mov r1, sp - movs r4, 0x7 -_080D7D7E: - ldrh r0, [r2] - strh r0, [r1] - adds r2, 0x2 - adds r1, 0x2 - subs r4, 0x1 - cmp r4, 0 - bge _080D7D7E - ldrh r0, [r5, 0x30] - movs r1, 0x1 - eors r0, r1 - strh r0, [r5, 0x30] - ldrh r0, [r5, 0x32] - eors r0, r1 - strh r0, [r5, 0x32] -_080D7D9A: - movs r0, 0x1 - strh r0, [r5, 0x2E] - adds r0, r5, 0 - bl sub_8078CE8 - movs r2, 0x20 - ldrsh r1, [r5, r2] - movs r2, 0x24 - ldrsh r0, [r5, r2] - adds r1, r0 - adds r1, 0x10 - movs r0, 0x88 - lsls r0, 1 - cmp r1, r0 - bhi _080D7DCE - movs r0, 0x22 - ldrsh r1, [r5, r0] - movs r2, 0x26 - ldrsh r0, [r5, r2] - adds r1, r0 - cmp r1, 0xA0 - bgt _080D7DCE - movs r0, 0x10 - negs r0, r0 - cmp r1, r0 - bge _080D7D9A -_080D7DCE: - ldrh r0, [r5, 0x24] - ldrh r1, [r5, 0x20] - adds r0, r1 - movs r1, 0 - strh r0, [r5, 0x20] - ldrh r0, [r5, 0x26] - ldrh r2, [r5, 0x22] - adds r0, r2 - strh r0, [r5, 0x22] - strh r1, [r5, 0x26] - strh r1, [r5, 0x24] - ldr r1, _080D7E10 @ =gBattleAnimArgs - ldr r6, _080D7E14 @ =sub_80D7E18 - mov r3, sp - adds r2, r7, 0 - movs r4, 0x7 -_080D7DEE: - ldrh r0, [r3] - strh r0, [r2] - adds r3, 0x2 - adds r2, 0x2 - subs r4, 0x1 - cmp r4, 0 - bge _080D7DEE - ldrh r0, [r1, 0xA] - strh r0, [r5, 0x38] - ldrh r0, [r1, 0xC] - strh r0, [r5, 0x3A] - str r6, [r5, 0x1C] - add sp, 0x10 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080D7E10: .4byte gBattleAnimArgs -_080D7E14: .4byte sub_80D7E18 - thumb_func_end sub_80D7CD4 - - thumb_func_start sub_80D7E18 -sub_80D7E18: @ 80D7E18 - push {r4,lr} - adds r4, r0, 0 - bl sub_8078CE8 - movs r1, 0x2E - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _080D7E2C - movs r0, 0x1 - strh r0, [r4, 0x2E] -_080D7E2C: - movs r2, 0x3C - ldrsh r0, [r4, r2] - movs r2, 0x38 - ldrsh r1, [r4, r2] - bl Sin - ldrh r1, [r4, 0x26] - adds r0, r1 - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x3A] - ldrh r2, [r4, 0x3C] - adds r0, r2 - movs r1, 0xFF - ands r0, r1 - strh r0, [r4, 0x3C] - movs r1, 0x2E - ldrsh r0, [r4, r1] - cmp r0, 0x1 - bne _080D7E82 - movs r2, 0x20 - ldrsh r0, [r4, r2] - movs r2, 0x24 - ldrsh r1, [r4, r2] - adds r0, r1 - adds r0, 0x10 - movs r1, 0x88 - lsls r1, 1 - cmp r0, r1 - bhi _080D7E7C - movs r0, 0x22 - ldrsh r1, [r4, r0] - movs r2, 0x26 - ldrsh r0, [r4, r2] - adds r1, r0 - cmp r1, 0xA0 - bgt _080D7E7C - movs r0, 0x10 - negs r0, r0 - cmp r1, r0 - bge _080D7E82 -_080D7E7C: - adds r0, r4, 0 - bl DestroyAnimSprite -_080D7E82: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80D7E18 - - thumb_func_start sub_80D7E88 -sub_80D7E88: @ 80D7E88 - push {r4,r5,lr} - adds r4, r0, 0 - movs r1, 0x2E - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _080D7EF4 - ldr r5, _080D7EA8 @ =gBattleAnimArgs - movs r1, 0x4 - ldrsh r0, [r5, r1] - cmp r0, 0 - bne _080D7EAC - adds r0, r4, 0 - movs r1, 0 - bl sub_8078764 - b _080D7EE2 - .align 2, 0 -_080D7EA8: .4byte gBattleAnimArgs -_080D7EAC: - ldr r0, _080D7EEC @ =gAnimBankTarget - ldrb r0, [r0] - adds r2, r4, 0 - adds r2, 0x20 - adds r3, r4, 0 - adds r3, 0x22 - movs r1, 0 - bl SetAverageBattlerPositions - ldr r0, _080D7EF0 @ =gAnimBankAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080D7ED2 - ldrh r0, [r5] - negs r0, r0 - strh r0, [r5] -_080D7ED2: - ldrh r0, [r5] - ldrh r1, [r4, 0x20] - adds r0, r1 - strh r0, [r4, 0x20] - ldrh r0, [r5, 0x2] - ldrh r1, [r4, 0x22] - adds r0, r1 - strh r0, [r4, 0x22] -_080D7EE2: - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - b _080D7F08 - .align 2, 0 -_080D7EEC: .4byte gAnimBankTarget -_080D7EF0: .4byte gAnimBankAttacker -_080D7EF4: - adds r0, r4, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _080D7F08 - adds r0, r4, 0 - bl DestroyAnimSprite -_080D7F08: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80D7E88 - - thumb_func_start sub_80D7F10 -sub_80D7F10: @ 80D7F10 - push {r4-r6,lr} - adds r5, r0, 0 - ldr r6, _080D7F30 @ =gBattleAnimArgs - movs r1, 0x8 - ldrsh r0, [r6, r1] - cmp r0, 0 - bne _080D7F80 - movs r1, 0xA - ldrsh r0, [r6, r1] - cmp r0, 0 - bne _080D7F34 - adds r0, r5, 0 - movs r1, 0 - bl InitAnimSpritePos - b _080D7F72 - .align 2, 0 -_080D7F30: .4byte gBattleAnimArgs -_080D7F34: - ldr r4, _080D7F5C @ =gAnimBankAttacker - ldrb r0, [r4] - adds r2, r5, 0 - adds r2, 0x20 - adds r3, r5, 0 - adds r3, 0x22 - movs r1, 0 - bl SetAverageBattlerPositions - ldrb r0, [r4] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080D7F60 - ldrh r0, [r5, 0x20] - ldrh r1, [r6] - subs r0, r1 - b _080D7F66 - .align 2, 0 -_080D7F5C: .4byte gAnimBankAttacker -_080D7F60: - ldrh r0, [r6] - ldrh r1, [r5, 0x20] - adds r0, r1 -_080D7F66: - strh r0, [r5, 0x20] - ldr r0, _080D7F78 @ =gBattleAnimArgs - ldrh r0, [r0, 0x2] - ldrh r1, [r5, 0x22] - adds r0, r1 - strh r0, [r5, 0x22] -_080D7F72: - ldr r0, _080D7F7C @ =gAnimBankAttacker - b _080D7FD0 - .align 2, 0 -_080D7F78: .4byte gBattleAnimArgs -_080D7F7C: .4byte gAnimBankAttacker -_080D7F80: - movs r1, 0xA - ldrsh r0, [r6, r1] - cmp r0, 0 - bne _080D7F92 - adds r0, r5, 0 - movs r1, 0 - bl sub_8078764 - b _080D7FCE -_080D7F92: - ldr r4, _080D7FB8 @ =gAnimBankTarget - ldrb r0, [r4] - adds r2, r5, 0 - adds r2, 0x20 - adds r3, r5, 0 - adds r3, 0x22 - movs r1, 0 - bl SetAverageBattlerPositions - ldrb r0, [r4] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080D7FBC - ldrh r0, [r5, 0x20] - ldrh r1, [r6] - subs r0, r1 - b _080D7FC2 - .align 2, 0 -_080D7FB8: .4byte gAnimBankTarget -_080D7FBC: - ldrh r0, [r6] - ldrh r1, [r5, 0x20] - adds r0, r1 -_080D7FC2: - strh r0, [r5, 0x20] - ldr r0, _080D7FEC @ =gBattleAnimArgs - ldrh r0, [r0, 0x2] - ldrh r1, [r5, 0x22] - adds r0, r1 - strh r0, [r5, 0x22] -_080D7FCE: - ldr r0, _080D7FF0 @ =gAnimBankTarget -_080D7FD0: - ldrb r0, [r0] - strh r0, [r5, 0x3C] - ldr r0, _080D7FEC @ =gBattleAnimArgs - movs r1, 0xA - ldrsh r0, [r0, r1] - cmp r0, 0 - beq _080D7FE8 - bl IsDoubleBattle - lsls r0, 24 - cmp r0, 0 - bne _080D7FF4 -_080D7FE8: - movs r0, 0x20 - b _080D7FF6 - .align 2, 0 -_080D7FEC: .4byte gBattleAnimArgs -_080D7FF0: .4byte gAnimBankTarget -_080D7FF4: - movs r0, 0x40 -_080D7FF6: - strh r0, [r5, 0x3A] - ldr r0, _080D803C @ =gAnimBankTarget - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _080D800C - ldrh r0, [r5, 0x22] - adds r0, 0x8 - strh r0, [r5, 0x22] -_080D800C: - ldr r1, _080D8040 @ =gBattleAnimArgs - ldrh r0, [r1, 0x6] - strh r0, [r5, 0x2E] - ldrh r0, [r5, 0x20] - strh r0, [r5, 0x30] - strh r0, [r5, 0x32] - ldrh r0, [r5, 0x22] - strh r0, [r5, 0x34] - ldrh r1, [r1, 0x4] - adds r0, r1 - strh r0, [r5, 0x36] - adds r0, r5, 0 - bl InitAnimLinearTranslation - movs r0, 0x40 - strh r0, [r5, 0x38] - ldr r1, _080D8044 @ =sub_80D8048 - str r1, [r5, 0x1C] - adds r0, r5, 0 - bl _call_via_r1 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080D803C: .4byte gAnimBankTarget -_080D8040: .4byte gBattleAnimArgs -_080D8044: .4byte sub_80D8048 - thumb_func_end sub_80D7F10 - - thumb_func_start sub_80D8048 -sub_80D8048: @ 80D8048 - push {r4,lr} - adds r4, r0, 0 - bl TranslateAnimLinear - lsls r0, 24 - cmp r0, 0 - bne _080D80D2 - movs r1, 0x38 - ldrsh r0, [r4, r1] - movs r2, 0x3A - ldrsh r1, [r4, r2] - bl Sin - ldrh r1, [r4, 0x24] - adds r0, r1 - strh r0, [r4, 0x24] - movs r2, 0x38 - ldrsh r0, [r4, r2] - movs r1, 0x6 - negs r1, r1 - bl Cos - ldrh r1, [r4, 0x26] - adds r0, r1 - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x38] - subs r0, 0x40 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x7F - bhi _080D80A4 - ldrh r0, [r4, 0x3C] - lsls r0, 24 - lsrs r0, 24 - 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 _080D80C6 -_080D80A4: - ldrh r0, [r4, 0x3C] - lsls r0, 24 - lsrs r0, 24 - 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] -_080D80C6: - ldrh r0, [r4, 0x38] - adds r0, 0x3 - movs r1, 0xFF - ands r0, r1 - strh r0, [r4, 0x38] - b _080D80D8 -_080D80D2: - adds r0, r4, 0 - bl DestroyAnimSprite -_080D80D8: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80D8048 - - thumb_func_start sub_80D80E0 -sub_80D80E0: @ 80D80E0 - push {r4,r5,lr} - sub sp, 0x10 - lsls r0, 24 - lsrs r5, r0, 24 - ldr r1, _080D81A8 @ =REG_BLDCNT - ldr r2, _080D81AC @ =0x00003f42 - adds r0, r2, 0 - strh r0, [r1] - adds r1, 0x2 - movs r2, 0x80 - lsls r2, 5 - adds r0, r2, 0 - strh r0, [r1] - ldr r4, _080D81B0 @ =REG_BG1CNT - ldrb r1, [r4] - movs r0, 0x4 - negs r0, r0 - ands r0, r1 - movs r1, 0x1 - orrs r0, r1 - strb r0, [r4] - ldrb r1, [r4, 0x1] - movs r0, 0x3F - ands r0, r1 - strb r0, [r4, 0x1] - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _080D812A - ldrb r0, [r4] - movs r1, 0xD - negs r1, r1 - ands r1, r0 - movs r0, 0x4 - orrs r1, r0 - strb r1, [r4] -_080D812A: - ldr r0, _080D81B4 @ =gBattle_BG1_X - movs r1, 0 - strh r1, [r0] - ldr r0, _080D81B8 @ =gBattle_BG1_Y - strh r1, [r0] - ldr r0, _080D81BC @ =REG_BG1HOFS - strh r1, [r0] - adds r0, 0x2 - strh r1, [r0] - mov r0, sp - bl sub_8078914 - ldr r1, [sp, 0x4] - movs r0, 0 - str r0, [sp, 0xC] - ldr r0, _080D81C0 @ =0x040000d4 - add r2, sp, 0xC - str r2, [r0] - str r1, [r0, 0x4] - ldr r2, _080D81C4 @ =0x85000400 - str r2, [r0, 0x8] - ldr r2, [r0, 0x8] - ldr r2, _080D81C8 @ =gWeatherFog1Tiles - ldr r3, [sp] - str r2, [r0] - str r3, [r0, 0x4] - ldr r2, _080D81CC @ =0x80000400 - str r2, [r0, 0x8] - ldr r0, [r0, 0x8] - ldr r0, _080D81D0 @ =gBattleAnimFogTilemap - bl LZDecompressVram - ldr r0, _080D81D4 @ =gUnknown_083970E8 - mov r1, sp - ldrb r1, [r1, 0x8] - lsls r1, 4 - movs r2, 0x20 - bl LoadPalette - bl IsContest - lsls r0, 24 - cmp r0, 0 - beq _080D8190 - mov r0, sp - ldrb r0, [r0, 0x8] - ldr r1, [sp, 0x4] - movs r2, 0 - movs r3, 0 - bl sub_80763FC -_080D8190: - ldr r0, _080D81D8 @ =gTasks - lsls r1, r5, 2 - adds r1, r5 - lsls r1, 3 - adds r1, r0 - ldr r0, _080D81DC @ =sub_80D81E0 - str r0, [r1] - add sp, 0x10 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D81A8: .4byte REG_BLDCNT -_080D81AC: .4byte 0x00003f42 -_080D81B0: .4byte REG_BG1CNT -_080D81B4: .4byte gBattle_BG1_X -_080D81B8: .4byte gBattle_BG1_Y -_080D81BC: .4byte REG_BG1HOFS -_080D81C0: .4byte 0x040000d4 -_080D81C4: .4byte 0x85000400 -_080D81C8: .4byte gWeatherFog1Tiles -_080D81CC: .4byte 0x80000400 -_080D81D0: .4byte gBattleAnimFogTilemap -_080D81D4: .4byte gUnknown_083970E8 -_080D81D8: .4byte gTasks -_080D81DC: .4byte sub_80D81E0 - thumb_func_end sub_80D80E0 - - thumb_func_start sub_80D81E0 -sub_80D81E0: @ 80D81E0 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x10 - lsls r0, 24 - lsrs r6, r0, 24 - ldr r2, _080D8220 @ =gBattle_BG1_X - ldr r1, _080D8224 @ =0x0000ffff - adds r0, r1, 0 - ldrh r4, [r2] - adds r0, r4 - strh r0, [r2] - ldr r1, _080D8228 @ =gBattle_BG1_Y - ldr r3, _080D822C @ =gTasks - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - adds r0, r3 - movs r4, 0x20 - ldrsh r0, [r0, r4] - adds r4, r1, 0 - cmp r0, 0x4 - bls _080D8214 - b _080D83B0 -_080D8214: - lsls r0, 2 - ldr r1, _080D8230 @ =_080D8234 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080D8220: .4byte gBattle_BG1_X -_080D8224: .4byte 0x0000ffff -_080D8228: .4byte gBattle_BG1_Y -_080D822C: .4byte gTasks -_080D8230: .4byte _080D8234 - .align 2, 0 -_080D8234: - .4byte _080D8248 - .4byte _080D82A0 - .4byte _080D82C2 - .4byte _080D8304 - .4byte _080D838C -_080D8248: - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - adds r3, r0, r3 - ldrh r0, [r3, 0x1C] - adds r0, 0x1 - movs r4, 0 - strh r0, [r3, 0x1C] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x4 - beq _080D8262 - b _080D83B0 -_080D8262: - strh r4, [r3, 0x1C] - ldrh r0, [r3, 0x1A] - adds r0, 0x1 - strh r0, [r3, 0x1A] - ldr r1, _080D8298 @ =gUnknown_083D9D6C - movs r2, 0x1A - ldrsh r0, [r3, r2] - adds r0, r1 - ldrb r1, [r0] - strh r1, [r3, 0x1E] - ldr r2, _080D829C @ =REG_BLDALPHA - movs r0, 0x10 - subs r0, r1 - lsls r0, 8 - orrs r1, r0 - strh r1, [r2] - movs r1, 0x1E - ldrsh r0, [r3, r1] - cmp r0, 0x9 - beq _080D828C - b _080D83B0 -_080D828C: - ldrh r0, [r3, 0x20] - adds r0, 0x1 - strh r0, [r3, 0x20] - strh r4, [r3, 0x1E] - b _080D83B0 - .align 2, 0 -_080D8298: .4byte gUnknown_083D9D6C -_080D829C: .4byte REG_BLDALPHA -_080D82A0: - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - adds r3, r0, r3 - ldrh r0, [r3, 0x1E] - adds r0, 0x1 - strh r0, [r3, 0x1E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x51 - bne _080D83B0 - movs r0, 0x9 - strh r0, [r3, 0x1E] - ldrh r0, [r3, 0x20] - adds r0, 0x1 - strh r0, [r3, 0x20] - b _080D83B0 -_080D82C2: - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - adds r3, r0, r3 - ldrh r0, [r3, 0x1C] - adds r0, 0x1 - strh r0, [r3, 0x1C] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x4 - bne _080D83B0 - movs r0, 0 - strh r0, [r3, 0x1C] - ldrh r1, [r3, 0x1E] - subs r1, 0x1 - strh r1, [r3, 0x1E] - ldr r2, _080D8300 @ =REG_BLDALPHA - movs r0, 0x10 - subs r0, r1 - lsls r0, 8 - orrs r1, r0 - strh r1, [r2] - movs r2, 0x1E - ldrsh r1, [r3, r2] - cmp r1, 0 - bne _080D83B0 - ldrh r0, [r3, 0x20] - adds r0, 0x1 - strh r0, [r3, 0x20] - strh r1, [r3, 0x1E] - b _080D83B0 - .align 2, 0 -_080D8300: .4byte REG_BLDALPHA -_080D8304: - mov r0, sp - bl sub_8078914 - ldr r2, [sp] - movs r3, 0x80 - lsls r3, 6 - lsls r4, r6, 2 - mov r10, r4 - add r5, sp, 0xC - movs r7, 0 - ldr r1, _080D83C0 @ =0x040000d4 - movs r4, 0x80 - lsls r4, 5 - mov r8, r5 - ldr r0, _080D83C4 @ =0x85000400 - mov r12, r0 - movs r0, 0x85 - lsls r0, 24 - mov r9, r0 -_080D832A: - str r7, [sp, 0xC] - mov r0, r8 - str r0, [r1] - str r2, [r1, 0x4] - mov r0, r12 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - adds r2, r4 - subs r3, r4 - cmp r3, r4 - bhi _080D832A - str r7, [sp, 0xC] - str r5, [r1] - str r2, [r1, 0x4] - lsrs r0, r3, 2 - mov r2, r9 - orrs r0, r2 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - ldr r1, [sp, 0x4] - movs r0, 0 - str r0, [sp, 0xC] - ldr r0, _080D83C0 @ =0x040000d4 - str r5, [r0] - str r1, [r0, 0x4] - ldr r1, _080D83C8 @ =0x85000200 - str r1, [r0, 0x8] - ldr r0, [r0, 0x8] - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _080D8378 - ldr r2, _080D83CC @ =REG_BG1CNT - ldrb r1, [r2] - movs r0, 0xD - negs r0, r0 - ands r0, r1 - strb r0, [r2] -_080D8378: - ldr r0, _080D83D0 @ =gTasks - mov r4, r10 - adds r1, r4, r6 - lsls r1, 3 - adds r1, r0 - ldrh r0, [r1, 0x20] - adds r0, 0x1 - strh r0, [r1, 0x20] - ldr r2, _080D83D4 @ =gBattle_BG1_X - ldr r4, _080D83D8 @ =gBattle_BG1_Y -_080D838C: - movs r1, 0 - strh r1, [r2] - strh r1, [r4] - ldr r0, _080D83DC @ =REG_BLDCNT - strh r1, [r0] - adds r0, 0x2 - strh r1, [r0] - ldr r2, _080D83CC @ =REG_BG1CNT - ldrb r1, [r2] - movs r0, 0x4 - negs r0, r0 - ands r0, r1 - movs r1, 0x1 - orrs r0, r1 - strb r0, [r2] - adds r0, r6, 0 - bl DestroyAnimVisualTask -_080D83B0: - add sp, 0x10 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080D83C0: .4byte 0x040000d4 -_080D83C4: .4byte 0x85000400 -_080D83C8: .4byte 0x85000200 -_080D83CC: .4byte REG_BG1CNT -_080D83D0: .4byte gTasks -_080D83D4: .4byte gBattle_BG1_X -_080D83D8: .4byte gBattle_BG1_Y -_080D83DC: .4byte REG_BLDCNT - thumb_func_end sub_80D81E0 - - thumb_func_start sub_80D83E0 -sub_80D83E0: @ 80D83E0 - push {r4,r5,lr} - adds r4, r0, 0 - ldr r5, _080D840C @ =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, _080D8410 @ =TranslateAnimSpriteToTargetMonLocation - str r0, [r4, 0x1C] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D840C: .4byte gAnimBankAttacker -_080D8410: .4byte TranslateAnimSpriteToTargetMonLocation - thumb_func_end sub_80D83E0 - - thumb_func_start sub_80D8414 -sub_80D8414: @ 80D8414 - push {r4,r5,lr} - sub sp, 0x10 - lsls r0, 24 - lsrs r5, r0, 24 - ldr r1, _080D84E0 @ =REG_BLDCNT - ldr r2, _080D84E4 @ =0x00003f42 - adds r0, r2, 0 - strh r0, [r1] - adds r1, 0x2 - movs r2, 0x80 - lsls r2, 5 - adds r0, r2, 0 - strh r0, [r1] - ldr r4, _080D84E8 @ =REG_BG1CNT - ldrb r1, [r4] - movs r0, 0x4 - negs r0, r0 - ands r0, r1 - movs r1, 0x1 - orrs r0, r1 - strb r0, [r4] - ldrb r1, [r4, 0x1] - movs r0, 0x3F - ands r0, r1 - strb r0, [r4, 0x1] - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _080D845E - ldrb r0, [r4] - movs r1, 0xD - negs r1, r1 - ands r1, r0 - movs r0, 0x4 - orrs r1, r0 - strb r1, [r4] -_080D845E: - ldr r0, _080D84EC @ =gBattle_BG1_X - movs r1, 0 - strh r1, [r0] - ldr r0, _080D84F0 @ =gBattle_BG1_Y - strh r1, [r0] - ldr r0, _080D84F4 @ =REG_BG1HOFS - strh r1, [r0] - adds r0, 0x2 - strh r1, [r0] - mov r0, sp - bl sub_8078914 - ldr r1, [sp, 0x4] - movs r0, 0 - str r0, [sp, 0xC] - ldr r0, _080D84F8 @ =0x040000d4 - add r2, sp, 0xC - str r2, [r0] - str r1, [r0, 0x4] - ldr r2, _080D84FC @ =0x85000400 - str r2, [r0, 0x8] - ldr r2, [r0, 0x8] - ldr r2, _080D8500 @ =gWeatherFog1Tiles - ldr r3, [sp] - str r2, [r0] - str r3, [r0, 0x4] - ldr r2, _080D8504 @ =0x80000400 - str r2, [r0, 0x8] - ldr r0, [r0, 0x8] - ldr r0, _080D8508 @ =gBattleAnimFogTilemap - bl LZDecompressVram - ldr r0, _080D850C @ =gUnknown_083970E8 - mov r1, sp - ldrb r1, [r1, 0x8] - lsls r1, 4 - movs r2, 0x20 - bl LoadPalette - bl IsContest - lsls r0, 24 - cmp r0, 0 - beq _080D84C4 - mov r0, sp - ldrb r0, [r0, 0x8] - ldr r1, [sp, 0x4] - movs r2, 0 - movs r3, 0 - bl sub_80763FC -_080D84C4: - ldr r1, _080D8510 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r0, r1 - ldr r1, _080D8514 @ =0x0000ffff - strh r1, [r0, 0x26] - ldr r1, _080D8518 @ =sub_80D851C - str r1, [r0] - add sp, 0x10 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D84E0: .4byte REG_BLDCNT -_080D84E4: .4byte 0x00003f42 -_080D84E8: .4byte REG_BG1CNT -_080D84EC: .4byte gBattle_BG1_X -_080D84F0: .4byte gBattle_BG1_Y -_080D84F4: .4byte REG_BG1HOFS -_080D84F8: .4byte 0x040000d4 -_080D84FC: .4byte 0x85000400 -_080D8500: .4byte gWeatherFog1Tiles -_080D8504: .4byte 0x80000400 -_080D8508: .4byte gBattleAnimFogTilemap -_080D850C: .4byte gUnknown_083970E8 -_080D8510: .4byte gTasks -_080D8514: .4byte 0x0000ffff -_080D8518: .4byte sub_80D851C - thumb_func_end sub_80D8414 - - thumb_func_start sub_80D851C -sub_80D851C: @ 80D851C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x10 - lsls r0, 24 - lsrs r6, r0, 24 - ldr r3, _080D8558 @ =gBattle_BG1_X - ldr r4, _080D855C @ =gTasks - lsls r1, r6, 2 - adds r1, r6 - lsls r1, 3 - adds r1, r4 - ldrh r0, [r1, 0x26] - ldrh r2, [r3] - adds r0, r2 - strh r0, [r3] - ldr r2, _080D8560 @ =gBattle_BG1_Y - movs r5, 0x20 - ldrsh r0, [r1, r5] - cmp r0, 0x4 - bls _080D854C - b _080D86D0 -_080D854C: - lsls r0, 2 - ldr r1, _080D8564 @ =_080D8568 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080D8558: .4byte gBattle_BG1_X -_080D855C: .4byte gTasks -_080D8560: .4byte gBattle_BG1_Y -_080D8564: .4byte _080D8568 - .align 2, 0 -_080D8568: - .4byte _080D857C - .4byte _080D85C0 - .4byte _080D85E2 - .4byte _080D8624 - .4byte _080D86AC -_080D857C: - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - adds r4, r0, r4 - ldrh r0, [r4, 0x1A] - adds r0, 0x1 - strh r0, [r4, 0x1A] - ldr r1, _080D85B8 @ =gUnknown_083D9D98 - movs r2, 0x1A - ldrsh r0, [r4, r2] - adds r0, r1 - ldrb r1, [r0] - strh r1, [r4, 0x1E] - ldr r2, _080D85BC @ =REG_BLDALPHA - movs r0, 0x11 - subs r0, r1 - lsls r0, 8 - orrs r1, r0 - strh r1, [r2] - movs r5, 0x1E - ldrsh r0, [r4, r5] - cmp r0, 0x5 - beq _080D85AC - b _080D86D0 -_080D85AC: - ldrh r0, [r4, 0x20] - adds r0, 0x1 - strh r0, [r4, 0x20] - movs r0, 0 - strh r0, [r4, 0x1E] - b _080D86D0 - .align 2, 0 -_080D85B8: .4byte gUnknown_083D9D98 -_080D85BC: .4byte REG_BLDALPHA -_080D85C0: - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - adds r1, r0, r4 - ldrh r0, [r1, 0x1E] - adds r0, 0x1 - strh r0, [r1, 0x1E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x51 - bne _080D86D0 - movs r0, 0x5 - strh r0, [r1, 0x1E] - ldrh r0, [r1, 0x20] - adds r0, 0x1 - strh r0, [r1, 0x20] - b _080D86D0 -_080D85E2: - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - adds r4, r0, r4 - ldrh r0, [r4, 0x1C] - adds r0, 0x1 - strh r0, [r4, 0x1C] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x4 - bne _080D86D0 - movs r0, 0 - strh r0, [r4, 0x1C] - ldrh r1, [r4, 0x1E] - subs r1, 0x1 - strh r1, [r4, 0x1E] - ldr r2, _080D8620 @ =REG_BLDALPHA - movs r0, 0x10 - subs r0, r1 - lsls r0, 8 - orrs r1, r0 - strh r1, [r2] - movs r0, 0x1E - ldrsh r1, [r4, r0] - cmp r1, 0 - bne _080D86D0 - ldrh r0, [r4, 0x20] - adds r0, 0x1 - strh r0, [r4, 0x20] - strh r1, [r4, 0x1E] - b _080D86D0 - .align 2, 0 -_080D8620: .4byte REG_BLDALPHA -_080D8624: - mov r0, sp - bl sub_8078914 - ldr r2, [sp] - movs r3, 0x80 - lsls r3, 6 - lsls r1, r6, 2 - mov r10, r1 - add r5, sp, 0xC - movs r7, 0 - ldr r1, _080D86E0 @ =0x040000d4 - movs r4, 0x80 - lsls r4, 5 - mov r8, r5 - ldr r0, _080D86E4 @ =0x85000400 - mov r12, r0 - movs r0, 0x85 - lsls r0, 24 - mov r9, r0 -_080D864A: - str r7, [sp, 0xC] - mov r0, r8 - str r0, [r1] - str r2, [r1, 0x4] - mov r0, r12 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - adds r2, r4 - subs r3, r4 - cmp r3, r4 - bhi _080D864A - str r7, [sp, 0xC] - str r5, [r1] - str r2, [r1, 0x4] - lsrs r0, r3, 2 - mov r2, r9 - orrs r0, r2 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - ldr r1, [sp, 0x4] - movs r0, 0 - str r0, [sp, 0xC] - ldr r0, _080D86E0 @ =0x040000d4 - str r5, [r0] - str r1, [r0, 0x4] - ldr r1, _080D86E8 @ =0x85000200 - str r1, [r0, 0x8] - ldr r0, [r0, 0x8] - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _080D8698 - ldr r2, _080D86EC @ =REG_BG1CNT - ldrb r1, [r2] - movs r0, 0xD - negs r0, r0 - ands r0, r1 - strb r0, [r2] -_080D8698: - ldr r0, _080D86F0 @ =gTasks - mov r5, r10 - adds r1, r5, r6 - lsls r1, 3 - adds r1, r0 - ldrh r0, [r1, 0x20] - adds r0, 0x1 - strh r0, [r1, 0x20] - ldr r3, _080D86F4 @ =gBattle_BG1_X - ldr r2, _080D86F8 @ =gBattle_BG1_Y -_080D86AC: - movs r1, 0 - strh r1, [r3] - strh r1, [r2] - ldr r0, _080D86FC @ =REG_BLDCNT - strh r1, [r0] - adds r0, 0x2 - strh r1, [r0] - ldr r2, _080D86EC @ =REG_BG1CNT - ldrb r1, [r2] - movs r0, 0x4 - negs r0, r0 - ands r0, r1 - movs r1, 0x1 - orrs r0, r1 - strb r0, [r2] - adds r0, r6, 0 - bl DestroyAnimVisualTask -_080D86D0: - add sp, 0x10 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080D86E0: .4byte 0x040000d4 -_080D86E4: .4byte 0x85000400 -_080D86E8: .4byte 0x85000200 -_080D86EC: .4byte REG_BG1CNT -_080D86F0: .4byte gTasks -_080D86F4: .4byte gBattle_BG1_X -_080D86F8: .4byte gBattle_BG1_Y -_080D86FC: .4byte REG_BLDCNT - thumb_func_end sub_80D851C - - thumb_func_start sub_80D8700 -sub_80D8700: @ 80D8700 - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r5, r0, 0 - ldr r6, _080D87E8 @ =gBattleAnimArgs - ldrh r0, [r6] - strh r0, [r5, 0x2E] - ldr r0, _080D87EC @ =gAnimBankAttacker - mov r8, r0 - ldrb r0, [r0] - movs r1, 0x2 - bl GetBattlerSpriteCoord - adds r4, r0, 0 - ldr r7, _080D87F0 @ =gAnimBankTarget - ldrb r0, [r7] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r4, 24 - lsls r0, 24 - cmp r4, r0 - bcs _080D8734 - movs r0, 0x80 - lsls r0, 8 - strh r0, [r5, 0x3C] -_080D8734: - ldr r3, _080D87F4 @ =gBanksBySide - ldrb r0, [r7] - adds r0, r3 - ldrb r1, [r0] - movs r2, 0x1 - adds r0, r2, 0 - ands r0, r1 - cmp r0, 0 - bne _080D8794 - ldrh r0, [r6, 0x2] - negs r0, r0 - strh r0, [r6, 0x2] - ldrh r0, [r6, 0x6] - negs r0, r0 - strh r0, [r6, 0x6] - movs r1, 0x3C - ldrsh r0, [r5, r1] - movs r1, 0x80 - lsls r1, 8 - ands r0, r1 - cmp r0, 0 - beq _080D8790 - mov r1, r8 - ldrb r0, [r1] - adds r0, r3 - ldrb r1, [r0] - adds r0, r2, 0 - ands r0, r1 - cmp r0, 0 - bne _080D8790 - movs r0, 0x1 - bl GetAnimBattlerSpriteId - ldr r2, _080D87F8 @ =gSprites - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - adds r1, 0x43 - ldrb r0, [r1] - adds r0, 0x1 - adds r1, r5, 0 - adds r1, 0x43 - strb r0, [r1] -_080D8790: - movs r0, 0x1 - strh r0, [r5, 0x3A] -_080D8794: - ldr r4, _080D87EC @ =gAnimBankAttacker - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x20] - ldrb r0, [r4] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x22] - ldr r6, _080D87E8 @ =gBattleAnimArgs - movs r1, 0xE - ldrsh r0, [r6, r1] - cmp r0, 0 - beq _080D87FC - ldrh r0, [r6, 0x2] - ldrh r1, [r5, 0x20] - adds r0, r1 - strh r0, [r5, 0x30] - ldr r4, _080D87F0 @ =gAnimBankTarget - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - ldrh r1, [r6, 0x6] - adds r0, r1 - strh r0, [r5, 0x32] - ldrh r0, [r6, 0x4] - ldrh r1, [r5, 0x22] - adds r0, r1 - strh r0, [r5, 0x34] - ldrb r0, [r4] - movs r1, 0x3 - b _080D8824 - .align 2, 0 -_080D87E8: .4byte gBattleAnimArgs -_080D87EC: .4byte gAnimBankAttacker -_080D87F0: .4byte gAnimBankTarget -_080D87F4: .4byte gBanksBySide -_080D87F8: .4byte gSprites -_080D87FC: - ldrh r0, [r6, 0x2] - ldrh r1, [r5, 0x20] - adds r0, r1 - strh r0, [r5, 0x30] - ldr r4, _080D886C @ =gAnimBankTarget - ldrb r0, [r4] - movs r1, 0 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - ldrh r1, [r6, 0x6] - adds r0, r1 - strh r0, [r5, 0x32] - ldrh r0, [r6, 0x4] - ldrh r1, [r5, 0x22] - adds r0, r1 - strh r0, [r5, 0x34] - ldrb r0, [r4] - movs r1, 0x1 -_080D8824: - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - ldrh r6, [r6, 0x8] - adds r0, r6 - strh r0, [r5, 0x36] - ldrb r0, [r4] - bl sub_8079ED4 - lsls r0, 24 - lsrs r0, 16 - ldrh r1, [r5, 0x3C] - orrs r0, r1 - strh r0, [r5, 0x3C] - bl IsContest - lsls r0, 24 - cmp r0, 0 - beq _080D8858 - movs r0, 0x1 - strh r0, [r5, 0x3A] - adds r1, r5, 0 - adds r1, 0x43 - movs r0, 0x80 - strb r0, [r1] -_080D8858: - adds r0, r5, 0 - bl InitAnimLinearTranslation - ldr r0, _080D8870 @ =sub_80D8874 - str r0, [r5, 0x1C] - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080D886C: .4byte gAnimBankTarget -_080D8870: .4byte sub_80D8874 - thumb_func_end sub_80D8700 - - thumb_func_start sub_80D8874 -sub_80D8874: @ 80D8874 - push {r4-r6,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x3C] - movs r5, 0xFF - movs r1, 0xFF - ands r1, r0 - cmp r1, 0x1 - beq _080D8968 - cmp r1, 0x1 - bgt _080D888E - cmp r1, 0 - beq _080D8896 - b _080D8AD0 -_080D888E: - cmp r1, 0x2 - bne _080D8894 - b _080D8A94 -_080D8894: - b _080D8AD0 -_080D8896: - adds r0, r4, 0 - bl TranslateAnimLinear - ldr r1, _080D88C0 @ =gSineTable - movs r2, 0x38 - ldrsh r0, [r4, r2] - lsls r0, 1 - adds r0, r1 - movs r1, 0 - ldrsh r0, [r0, r1] - asrs r0, 4 - ldrh r2, [r4, 0x24] - adds r0, r2 - strh r0, [r4, 0x24] - movs r1, 0x3A - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _080D88C4 - ldrh r0, [r4, 0x38] - subs r0, 0x8 - b _080D88C8 - .align 2, 0 -_080D88C0: .4byte gSineTable -_080D88C4: - ldrh r0, [r4, 0x38] - adds r0, 0x8 -_080D88C8: - ands r0, r5 - strh r0, [r4, 0x38] - movs r2, 0x2E - ldrsh r0, [r4, r2] - cmp r0, 0 - ble _080D88D6 - b _080D8AD0 -_080D88D6: - movs r5, 0x50 - strh r5, [r4, 0x2E] - ldr r6, _080D8928 @ =gAnimBankTarget - ldrb r0, [r6] - movs r1, 0 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x20] - strh r0, [r4, 0x30] - strh r0, [r4, 0x32] - ldrh r0, [r4, 0x26] - ldrh r1, [r4, 0x22] - adds r0, r1 - strh r0, [r4, 0x22] - strh r0, [r4, 0x34] - adds r0, 0x1D - strh r0, [r4, 0x36] - ldrh r0, [r4, 0x3C] - adds r0, 0x1 - strh r0, [r4, 0x3C] - ldr r0, _080D892C @ =gMain - ldr r2, _080D8930 @ =0x0000043d - adds r0, r2 - ldrb r1, [r0] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _080D8938 - ldr r1, _080D8934 @ =gBanksBySide - ldrb r0, [r6] - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080D8938 - movs r0, 0xCC - strh r0, [r4, 0x38] - b _080D893A - .align 2, 0 -_080D8928: .4byte gAnimBankTarget -_080D892C: .4byte gMain -_080D8930: .4byte 0x0000043d -_080D8934: .4byte gBanksBySide -_080D8938: - strh r5, [r4, 0x38] -_080D893A: - movs r0, 0 - strh r0, [r4, 0x26] - ldr r1, _080D8964 @ =gSineTable - movs r2, 0x38 - ldrsh r0, [r4, r2] - lsls r0, 1 - adds r0, r1 - movs r1, 0 - ldrsh r0, [r0, r1] - asrs r0, 3 - strh r0, [r4, 0x24] - ldrh r0, [r4, 0x38] - adds r0, 0x2 - movs r1, 0xFF - ands r0, r1 - strh r0, [r4, 0x38] - adds r0, r4, 0 - bl InitAnimLinearTranslation - b _080D8AD0 - .align 2, 0 -_080D8964: .4byte gSineTable -_080D8968: - adds r0, r4, 0 - bl TranslateAnimLinear - ldr r1, _080D89C8 @ =gSineTable - movs r2, 0x38 - ldrsh r0, [r4, r2] - lsls r0, 1 - adds r0, r1 - movs r2, 0 - ldrsh r0, [r0, r2] - asrs r0, 3 - ldrh r2, [r4, 0x24] - adds r0, r2 - strh r0, [r4, 0x24] - movs r2, 0x38 - ldrsh r0, [r4, r2] - adds r0, 0x40 - lsls r0, 1 - adds r0, r1 - movs r2, 0 - ldrsh r1, [r0, r2] - lsls r0, r1, 1 - adds r0, r1 - negs r0, r0 - asrs r0, 8 - ldrh r1, [r4, 0x26] - adds r0, r1 - strh r0, [r4, 0x26] - ldr r0, _080D89CC @ =gMain - ldr r2, _080D89D0 @ =0x0000043d - adds r0, r2 - ldrb r1, [r0] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _080D89F2 - ldrh r1, [r4, 0x38] - adds r0, r1, 0 - subs r0, 0x40 - lsls r0, 16 - lsrs r0, 16 - adds r3, r1, 0 - cmp r0, 0x7F - bhi _080D89D4 - ldrh r1, [r4, 0x3C] - lsls r1, 16 - asrs r1, 24 - b _080D89DC - .align 2, 0 -_080D89C8: .4byte gSineTable -_080D89CC: .4byte gMain -_080D89D0: .4byte 0x0000043d -_080D89D4: - ldrh r1, [r4, 0x3C] - lsls r1, 16 - asrs r1, 24 - adds r1, 0x1 -_080D89DC: - movs r0, 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] - adds r0, r3, 0x4 - b _080D8A12 -_080D89F2: - ldrh r0, [r4, 0x38] - subs r0, 0x40 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x7F - bhi _080D8A06 - adds r1, r4, 0 - adds r1, 0x43 - movs r0, 0x80 - b _080D8A0C -_080D8A06: - adds r1, r4, 0 - adds r1, 0x43 - movs r0, 0x8C -_080D8A0C: - strb r0, [r1] - ldrh r0, [r4, 0x38] - subs r0, 0x4 -_080D8A12: - movs r1, 0xFF - ands r0, r1 - strh r0, [r4, 0x38] - movs r1, 0x2E - ldrsh r0, [r4, r1] - cmp r0, 0 - bgt _080D8AD0 - movs r2, 0 - movs r0, 0xC0 - lsls r0, 2 - strh r0, [r4, 0x2E] - ldrh r0, [r4, 0x24] - ldrh r1, [r4, 0x20] - adds r0, r1 - strh r0, [r4, 0x20] - strh r0, [r4, 0x30] - ldrh r0, [r4, 0x26] - ldrh r1, [r4, 0x22] - adds r0, r1 - strh r0, [r4, 0x22] - strh r0, [r4, 0x34] - adds r0, 0x4 - strh r0, [r4, 0x36] - ldr r0, _080D8A68 @ =gMain - ldr r1, _080D8A6C @ =0x0000043d - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _080D8A78 - ldr r1, _080D8A70 @ =gBanksBySide - ldr r0, _080D8A74 @ =gAnimBankTarget - ldrb r0, [r0] - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080D8A78 - movs r0, 0x80 - lsls r0, 1 - b _080D8A7A - .align 2, 0 -_080D8A68: .4byte gMain -_080D8A6C: .4byte 0x0000043d -_080D8A70: .4byte gBanksBySide -_080D8A74: .4byte gAnimBankTarget -_080D8A78: - ldr r0, _080D8A90 @ =0x0000fff0 -_080D8A7A: - strh r0, [r4, 0x32] - ldrh r0, [r4, 0x3C] - adds r0, 0x1 - movs r1, 0 - strh r0, [r4, 0x3C] - strh r1, [r4, 0x26] - strh r1, [r4, 0x24] - adds r0, r4, 0 - bl sub_8078BD4 - b _080D8AD0 - .align 2, 0 -_080D8A90: .4byte 0x0000fff0 -_080D8A94: - adds r0, r4, 0 - bl TranslateAnimLinear - lsls r0, 24 - cmp r0, 0 - beq _080D8AD0 - ldrb r0, [r4, 0x1] - lsls r0, 30 - lsrs r0, 30 - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080D8AC2 - ldrb r0, [r4, 0x3] - lsls r0, 26 - lsrs r0, 27 - bl FreeOamMatrix - ldrb r1, [r4, 0x1] - movs r0, 0x4 - negs r0, r0 - ands r0, r1 - strb r0, [r4, 0x1] -_080D8AC2: - adds r0, r4, 0 - bl DestroySprite - ldr r1, _080D8AD8 @ =gAnimVisualTaskCount - ldrb r0, [r1] - subs r0, 0x1 - strb r0, [r1] -_080D8AD0: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080D8AD8: .4byte gAnimVisualTaskCount - thumb_func_end sub_80D8874 - - thumb_func_start sub_80D8ADC -sub_80D8ADC: @ 80D8ADC - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _080D8AF0 @ =gTasks - adds r1, r0 - ldr r0, _080D8AF4 @ =sub_80D8AF8 - str r0, [r1] - bx lr - .align 2, 0 -_080D8AF0: .4byte gTasks -_080D8AF4: .4byte sub_80D8AF8 - thumb_func_end sub_80D8ADC - - thumb_func_start sub_80D8AF8 -sub_80D8AF8: @ 80D8AF8 - push {r4,r5,lr} - lsls r0, 24 - lsrs r2, r0, 24 - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - ldr r1, _080D8B1C @ =gTasks - adds r4, r0, r1 - movs r0, 0x8 - ldrsh r5, [r4, r0] - cmp r5, 0x1 - beq _080D8B3C - cmp r5, 0x1 - bgt _080D8B20 - cmp r5, 0 - beq _080D8B26 - b _080D8BA0 - .align 2, 0 -_080D8B1C: .4byte gTasks -_080D8B20: - cmp r5, 0x2 - beq _080D8B92 - b _080D8BA0 -_080D8B26: - ldrh r0, [r4, 0x10] - adds r0, 0x1 - strh r0, [r4, 0x10] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x2 - ble _080D8BA0 - strh r5, [r4, 0x10] - strh r5, [r4, 0x12] - strh r5, [r4, 0xC] - b _080D8B78 -_080D8B3C: - ldrh r1, [r4, 0x12] - movs r3, 0x12 - ldrsh r0, [r4, r3] - cmp r0, 0 - bne _080D8B8C - ldrb r0, [r4, 0xE] - ldrb r1, [r4, 0xC] - movs r3, 0x1 - bl sub_80D8BA8 - lsls r0, 24 - cmp r0, 0 - beq _080D8B5C - ldrh r0, [r4, 0xA] - adds r0, 0x1 - strh r0, [r4, 0xA] -_080D8B5C: - ldrh r0, [r4, 0xC] - adds r0, 0x1 - strh r0, [r4, 0xC] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x3 - bne _080D8B88 - ldrh r0, [r4, 0xE] - adds r0, 0x1 - strh r0, [r4, 0xE] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xA - bne _080D8B80 -_080D8B78: - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - b _080D8BA0 -_080D8B80: - ldrh r0, [r4, 0x8] - subs r0, 0x1 - strh r0, [r4, 0x8] - b _080D8BA0 -_080D8B88: - strh r5, [r4, 0x12] - b _080D8BA0 -_080D8B8C: - subs r0, r1, 0x1 - strh r0, [r4, 0x12] - b _080D8BA0 -_080D8B92: - movs r1, 0xA - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _080D8BA0 - adds r0, r2, 0 - bl DestroyAnimVisualTask -_080D8BA0: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80D8AF8 - - thumb_func_start sub_80D8BA8 -sub_80D8BA8: @ 80D8BA8 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - lsls r0, 24 - lsls r1, 24 - lsrs r1, 24 - mov r9, r1 - lsls r2, 24 - lsrs r2, 24 - str r2, [sp] - lsls r3, 24 - lsrs r3, 24 - mov r10, r3 - movs r1, 0 - str r1, [sp, 0x4] - ldr r1, _080D8C20 @ =gUnknown_083D9DC4 - lsrs r0, 22 - adds r4, r0, r1 - ldrb r0, [r4, 0x3] - lsls r0, 24 - asrs r0, 28 - mov r8, r0 - cmp r0, 0x2 - beq _080D8C94 - ldrh r0, [r4, 0x2] - lsls r0, 20 - lsrs r0, 24 - bl GetBattlerAtPosition - lsls r0, 24 - lsrs r5, r0, 24 - adds r0, r5, 0 - bl IsAnimBankSpriteVisible - lsls r0, 24 - cmp r0, 0 - beq _080D8C94 - movs r0, 0x1 - str r0, [sp, 0x4] - adds r0, r5, 0 - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r7, r0, 24 - adds r0, r5, 0 - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r6, r0, 24 - mov r1, r8 - cmp r1, 0 - beq _080D8C24 - cmp r1, 0x1 - beq _080D8C5A - b _080D8CA6 - .align 2, 0 -_080D8C20: .4byte gUnknown_083D9DC4 -_080D8C24: - adds r0, r5, 0 - movs r1, 0x1 - bl sub_807A100 - lsls r0, 16 - asrs r0, 16 - movs r1, 0x6 - bl __divsi3 - lsls r1, r7, 16 - asrs r1, 16 - subs r1, r0 - lsls r1, 16 - lsrs r7, r1, 16 - adds r0, r5, 0 - movs r1, 0 - bl sub_807A100 - lsls r0, 16 - asrs r0, 16 - movs r1, 0x6 - bl __divsi3 - lsls r1, r6, 16 - asrs r1, 16 - subs r1, r0 - b _080D8C8E -_080D8C5A: - adds r0, r5, 0 - movs r1, 0x1 - bl sub_807A100 - lsls r0, 16 - asrs r0, 16 - movs r1, 0x6 - bl __divsi3 - lsls r1, r7, 16 - asrs r1, 16 - adds r1, r0 - lsls r1, 16 - lsrs r7, r1, 16 - adds r0, r5, 0 - movs r1, 0 - bl sub_807A100 - lsls r0, 16 - asrs r0, 16 - movs r1, 0x6 - bl __divsi3 - lsls r1, r6, 16 - asrs r1, 16 - adds r1, r0 -_080D8C8E: - lsls r1, 16 - lsrs r6, r1, 16 - b _080D8CA6 -_080D8C94: - ldrh r0, [r4] - lsls r0, 22 - asrs r0, 6 - lsrs r7, r0, 16 - ldr r0, [r4] - lsls r0, 12 - asrs r0, 22 - lsls r0, 16 - lsrs r6, r0, 16 -_080D8CA6: - lsls r0, r6, 16 - asrs r0, 16 - adds r0, 0x8 - lsrs r1, r0, 31 - adds r0, r1 - asrs r0, 1 - lsls r1, r7, 16 - asrs r1, 16 - subs r1, r0 - ldr r0, _080D8D00 @ =gSpriteTemplate_83D9E3C - lsls r1, 16 - asrs r1, 16 - movs r2, 0x8 - negs r2, r2 - movs r3, 0x12 - bl CreateSprite - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x40 - beq _080D8D08 - lsls r4, r5, 4 - adds r4, r5 - lsls r4, 2 - ldr r0, _080D8D04 @ =gSprites - adds r4, r0 - adds r0, r4, 0 - mov r1, r9 - bl StartSpriteAffineAnim - mov r0, sp - ldrh r0, [r0, 0x4] - strh r0, [r4, 0x2E] - strh r7, [r4, 0x34] - strh r6, [r4, 0x36] - mov r1, r9 - strh r1, [r4, 0x38] - mov r0, sp - ldrh r0, [r0] - strh r0, [r4, 0x3A] - mov r1, r10 - strh r1, [r4, 0x3C] - movs r0, 0x1 - b _080D8D0A - .align 2, 0 -_080D8D00: .4byte gSpriteTemplate_83D9E3C -_080D8D04: .4byte gSprites -_080D8D08: - movs r0, 0 -_080D8D0A: - add sp, 0x8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80D8BA8 - - thumb_func_start sub_80D8D1C -sub_80D8D1C: @ 80D8D1C - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x20] - adds r0, 0x4 - strh r0, [r4, 0x20] - ldrh r1, [r4, 0x22] - adds r2, r1, 0 - adds r2, 0x8 - strh r2, [r4, 0x22] - lsls r0, 16 - asrs r0, 16 - movs r3, 0x34 - ldrsh r1, [r4, r3] - cmp r0, r1 - bge _080D8D46 - lsls r0, r2, 16 - asrs r0, 16 - movs r2, 0x36 - ldrsh r1, [r4, r2] - cmp r0, r1 - blt _080D8DF6 -_080D8D46: - movs r3, 0x2E - ldrsh r0, [r4, r3] - cmp r0, 0x1 - bne _080D8DC8 - movs r1, 0x38 - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _080D8DC8 - ldr r0, _080D8DBC @ =gBattleAnimSpriteTemplate_83D9C78 - movs r2, 0x34 - ldrsh r1, [r4, r2] - movs r3, 0x36 - ldrsh r2, [r4, r3] - adds r3, r4, 0 - adds r3, 0x43 - ldrb r3, [r3] - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x2E] - cmp r0, 0x40 - beq _080D8DAA - ldr r2, _080D8DC0 @ =gSprites - movs r0, 0x2E - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r1, r2, 0 - adds r1, 0x1C - adds r0, r1 - ldr r1, _080D8DC4 @ =sub_80D8E00 - str r1, [r0] - movs r3, 0x2E - ldrsh r1, [r4, r3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r1, [r4, 0x3A] - strh r1, [r0, 0x3A] - movs r0, 0x2E - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r1, [r4, 0x3C] - strh r1, [r0, 0x3C] -_080D8DAA: - ldrb r0, [r4, 0x3] - lsls r0, 26 - lsrs r0, 27 - bl FreeOamMatrix - adds r0, r4, 0 - bl DestroySprite - b _080D8DF6 - .align 2, 0 -_080D8DBC: .4byte gBattleAnimSpriteTemplate_83D9C78 -_080D8DC0: .4byte gSprites -_080D8DC4: .4byte sub_80D8E00 -_080D8DC8: - ldr r3, _080D8DFC @ =gTasks - movs r2, 0x3C - ldrsh r1, [r4, r2] - lsls r1, 1 - movs r0, 0x3A - ldrsh r2, [r4, r0] - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - adds r1, r0 - adds r3, 0x8 - adds r1, r3 - ldrh r0, [r1] - subs r0, 0x1 - strh r0, [r1] - ldrb r0, [r4, 0x3] - lsls r0, 26 - lsrs r0, 27 - bl FreeOamMatrix - adds r0, r4, 0 - bl DestroySprite -_080D8DF6: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080D8DFC: .4byte gTasks - thumb_func_end sub_80D8D1C - - thumb_func_start sub_80D8E00 -sub_80D8E00: @ 80D8E00 - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x14 - bne _080D8E40 - ldr r3, _080D8E48 @ =gTasks - movs r0, 0x3C - ldrsh r1, [r4, r0] - lsls r1, 1 - movs r0, 0x3A - ldrsh r2, [r4, r0] - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - adds r1, r0 - adds r3, 0x8 - adds r1, r3 - ldrh r0, [r1] - subs r0, 0x1 - strh r0, [r1] - ldrb r0, [r4, 0x3] - lsls r0, 26 - lsrs r0, 27 - bl FreeOamMatrix - adds r0, r4, 0 - bl DestroySprite -_080D8E40: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080D8E48: .4byte gTasks - thumb_func_end sub_80D8E00 - - thumb_func_start unc_080B06FC -unc_080B06FC: @ 80D8E4C - push {r4-r6,lr} - adds r5, r0, 0 - ldr r0, _080D8ECC @ =gAnimDisableStructPtr - ldr r0, [r0] - ldrb r1, [r0, 0x11] - lsrs r0, r1, 4 - lsls r1, 28 - lsrs r1, 28 - subs r0, r1 - subs r0, 0x1 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x4 - bls _080D8E6A - movs r1, 0x4 -_080D8E6A: - adds r0, r5, 0 - bl StartSpriteAffineAnim - adds r0, r5, 0 - movs r1, 0x1 - bl InitAnimSpritePos - ldr r6, _080D8ED0 @ =gBattleAnimArgs - ldrh r0, [r6, 0x8] - strh r0, [r5, 0x2E] - ldr r0, _080D8ED4 @ =gAnimBankAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080D8E92 - ldrh r0, [r6, 0x4] - negs r0, r0 - strh r0, [r6, 0x4] -_080D8E92: - ldr r4, _080D8ED8 @ =gAnimBankTarget - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - ldrh r1, [r6, 0x4] - adds r0, r1 - strh r0, [r5, 0x32] - ldrb r0, [r4] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - ldrh r1, [r6, 0x6] - adds r0, r1 - strh r0, [r5, 0x36] - ldrh r0, [r6, 0xA] - strh r0, [r5, 0x38] - adds r0, r5, 0 - bl InitAnimArcTranslation - ldr r0, _080D8EDC @ =sub_80D8EE0 - str r0, [r5, 0x1C] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080D8ECC: .4byte gAnimDisableStructPtr -_080D8ED0: .4byte gBattleAnimArgs -_080D8ED4: .4byte gAnimBankAttacker -_080D8ED8: .4byte gAnimBankTarget -_080D8EDC: .4byte sub_80D8EE0 - thumb_func_end unc_080B06FC - - thumb_func_start sub_80D8EE0 -sub_80D8EE0: @ 80D8EE0 - push {r4,lr} - adds r4, r0, 0 - bl TranslateAnimArc - lsls r0, 24 - cmp r0, 0 - beq _080D8F02 - adds r0, r4, 0 - movs r1, 0x1 - bl StartSpriteAnim - ldr r0, _080D8F08 @ =sub_8078600 - str r0, [r4, 0x1C] - ldr r1, _080D8F0C @ =DestroyAnimSprite - adds r0, r4, 0 - bl StoreSpriteCallbackInData -_080D8F02: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080D8F08: .4byte sub_8078600 -_080D8F0C: .4byte DestroyAnimSprite - thumb_func_end sub_80D8EE0 - - thumb_func_start sub_80D8F10 -sub_80D8F10: @ 80D8F10 - push {r4-r6,lr} - adds r4, r0, 0 - ldrh r2, [r4, 0x4] - lsls r1, r2, 22 - lsrs r1, 22 - adds r1, 0x8 - ldr r3, _080D8F64 @ =0x000003ff - adds r0, r3, 0 - ands r1, r0 - ldr r0, _080D8F68 @ =0xfffffc00 - ands r0, r2 - orrs r0, r1 - strh r0, [r4, 0x4] - adds r0, r4, 0 - movs r1, 0x1 - bl sub_8078764 - bl Random - movs r5, 0xFF - ands r5, r0 - movs r0, 0x80 - lsls r0, 1 - adds r6, r0, 0 - orrs r5, r6 - bl Random - ldr r1, _080D8F6C @ =0x000001ff - ands r1, r0 - adds r0, r1, 0 - cmp r0, 0xFF - ble _080D8F56 - subs r0, r6, r0 - lsls r0, 16 - lsrs r1, r0, 16 -_080D8F56: - strh r5, [r4, 0x30] - strh r1, [r4, 0x32] - ldr r0, _080D8F70 @ =sub_80D8F74 - str r0, [r4, 0x1C] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080D8F64: .4byte 0x000003ff -_080D8F68: .4byte 0xfffffc00 -_080D8F6C: .4byte 0x000001ff -_080D8F70: .4byte sub_80D8F74 - thumb_func_end sub_80D8F10 - - thumb_func_start sub_80D8F74 -sub_80D8F74: @ 80D8F74 - push {r4,lr} - adds r2, r0, 0 - ldrh r0, [r2, 0x30] - ldrh r1, [r2, 0x34] - adds r3, r0, r1 - strh r3, [r2, 0x34] - ldrh r1, [r2, 0x32] - ldrh r4, [r2, 0x36] - adds r1, r4 - strh r1, [r2, 0x36] - movs r1, 0x1 - ands r1, r0 - cmp r1, 0 - beq _080D8F98 - lsls r0, r3, 16 - asrs r0, 24 - negs r0, r0 - b _080D8F9C -_080D8F98: - lsls r0, r3, 16 - asrs r0, 24 -_080D8F9C: - strh r0, [r2, 0x24] - ldrh r0, [r2, 0x36] - lsls r0, 16 - asrs r0, 24 - strh r0, [r2, 0x26] - ldrh r0, [r2, 0x2E] - adds r0, 0x1 - strh r0, [r2, 0x2E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x15 - bne _080D8FBA - adds r0, r2, 0 - bl DestroyAnimSprite -_080D8FBA: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80D8F74 - - thumb_func_start sub_80D8FC0 -sub_80D8FC0: @ 80D8FC0 - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r1, _080D8FE8 @ =gBattleAnimArgs - ldrb r3, [r1] - lsls r3, 1 - adds r3, r1 - ldr r1, _080D8FEC @ =gAnimDisableStructPtr - ldr r1, [r1] - ldrb r1, [r1, 0x11] - lsrs r2, r1, 4 - lsls r1, 28 - lsrs r1, 28 - subs r2, r1 - subs r2, 0x1 - strh r2, [r3] - bl DestroyAnimVisualTask - pop {r0} - bx r0 - .align 2, 0 -_080D8FE8: .4byte gBattleAnimArgs -_080D8FEC: .4byte gAnimDisableStructPtr - thumb_func_end sub_80D8FC0 - - .align 2, 0 @ Don't pad with nop. diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index c5c6eb144..42bfad289 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -2247,15 +2247,15 @@ Move_ICY_WIND: @ 81CA650 waitbgfadein end _81CA6A8: - createsprite gBattleAnimSpriteTemplate_83D9CA8, 168, 0, 0, 0, 0, 72, 1 + createsprite gSmallSnowballSpriteTemplate1, 168, 0, 0, 0, 0, 72, 1 delay 5 - createsprite gBattleAnimSpriteTemplate_83D9CA8, 168, 0, 10, 0, 10, 72, 1 + createsprite gSmallSnowballSpriteTemplate1, 168, 0, 10, 0, 10, 72, 1 delay 5 - createsprite gBattleAnimSpriteTemplate_83D9CA8, 168, 0, -10, 0, -10, 72, 1 + createsprite gSmallSnowballSpriteTemplate1, 168, 0, -10, 0, -10, 72, 1 delay 5 - createsprite gBattleAnimSpriteTemplate_83D9CA8, 168, 0, 15, 0, 15, 72, 1 + createsprite gSmallSnowballSpriteTemplate1, 168, 0, 15, 0, 15, 72, 1 delay 5 - createsprite gBattleAnimSpriteTemplate_83D9CA8, 168, 0, -5, 0, -5, 72, 1 + createsprite gSmallSnowballSpriteTemplate1, 168, 0, -5, 0, -5, 72, 1 return Move_SMOKESCREEN: @ 81CA710 @@ -3477,7 +3477,7 @@ Move_HAIL: @ 81CC076 loadspritegfx 10141 createvisualtask sub_80E2A38, 10, 1, 3, 0, 6, 0 waitforvisualfinish - createvisualtask sub_80D8ADC, 5 + createvisualtask AnimTask_Hail1, 5 loopsewithpan SE_W258, 0, 8, 10 waitforvisualfinish createvisualtask sub_80E2A38, 10, 1, 3, 6, 0, 0 @@ -3946,14 +3946,14 @@ Move_MIST_BALL: @ 81CCA72 loadspritegfx 10270 delay 0 playsewithpan SE_W081, 192 - createsprite gBattleAnimSpriteTemplate_83D9D80, 128, 0, 0, 0, 0, 30, 0 + createsprite gMistBallSpriteTemplate, 128, 0, 0, 0, 0, 30, 0 waitforvisualfinish playsewithpan SE_W028, 63 createvisualtask AnimTask_ShakeMon, 2, ANIM_BANK_TARGET, 5, 0, 10, 0 createsprite gBattleAnimSpriteTemplate_83DB3DC, 0, 1, 1, 1, 32279, 16, 32767, 16 delay 0 playsewithpan SE_W114, 0 - createvisualtask sub_80D8414, 5 + createvisualtask AnimTask_LoadMistTiles, 5 createvisualtask sub_80E2A38, 10, 4, 3, 0, 16, 32767 delay 8 createvisualtask AnimTask_ShakeMon, 2, ANIM_BANK_TARGET, 4, 0, 70, 0 @@ -4662,15 +4662,15 @@ Move_ICE_PUNCH: @ 81CDB3E createvisualtask sub_80E2A38, 10, 4, 2, 0, 9, 32588 delay 20 playsewithpan SE_W081, 63 - createsprite gBattleAnimSpriteTemplate_83D9BF8, 2, 0 - createsprite gBattleAnimSpriteTemplate_83D9BF8, 2, 64 - createsprite gBattleAnimSpriteTemplate_83D9BF8, 2, 128 - createsprite gBattleAnimSpriteTemplate_83D9BF8, 2, 192 + createsprite gSmallIcePunchCrystalSpriteTemplate, 2, 0 + createsprite gSmallIcePunchCrystalSpriteTemplate, 2, 64 + createsprite gSmallIcePunchCrystalSpriteTemplate, 2, 128 + createsprite gSmallIcePunchCrystalSpriteTemplate, 2, 192 delay 5 - createsprite gBattleAnimSpriteTemplate_83D9BE0, 2, 32 - createsprite gBattleAnimSpriteTemplate_83D9BE0, 2, 96 - createsprite gBattleAnimSpriteTemplate_83D9BE0, 2, 160 - createsprite gBattleAnimSpriteTemplate_83D9BE0, 2, 224 + createsprite gLargeIcePunchCrystalSpriteTemplate, 2, 32 + createsprite gLargeIcePunchCrystalSpriteTemplate, 2, 96 + createsprite gLargeIcePunchCrystalSpriteTemplate, 2, 160 + createsprite gLargeIcePunchCrystalSpriteTemplate, 2, 224 delay 17 createsprite gFistFootSpriteTemplate, 4, 0, -10, 8, 1, 0 createsprite gBasicHitSplatSpriteTemplate, 3, 0, -10, 1, 1 @@ -4679,7 +4679,7 @@ Move_ICE_PUNCH: @ 81CDB3E createvisualtask AnimTask_ShakeMon, 5, 1, 0, 5, 3, 1 waitforvisualfinish delay 15 - call Unknown_81D5C36 + call Effect_LightIceDamage delay 5 createvisualtask sub_80E2A38, 10, 4, 2, 9, 0, 32588 waitforvisualfinish @@ -5148,7 +5148,7 @@ Move_SMOG: @ 81CE672 blendoff end _81CE6D7: - createsprite gBattleAnimSpriteTemplate_83D9D54, 2, 0, -24, 48, 240, 1, 0 + createsprite gSmogCloudSpriteTemplate, 2, 0, -24, 48, 240, 1, 0 delay 7 return @@ -5355,8 +5355,8 @@ Move_ICE_BEAM: @ 81CEB4D createsprite gSimplePaletteBlendSpriteTemplate, 2, 1, 1, 0, 7, rgb(0, 0, 0) waitforvisualfinish createsoundtask sub_812B058, 183, -64, 63, 4, 4, 0, 10 - createsprite gBattleAnimSpriteTemplate_83D9C3C, 2, 20, 12, 0, 12, 20 - createsprite gBattleAnimSpriteTemplate_83D9C3C, 2, 20, -12, 0, -12, 20 + createsprite gIceBeamOuterParticleSpriteTemplate, 2, 20, 12, 0, 12, 20 + createsprite gIceBeamOuterParticleSpriteTemplate, 2, 20, -12, 0, -12, 20 delay 1 call _81CEC4E call _81CEC4E @@ -5371,12 +5371,12 @@ Move_ICE_BEAM: @ 81CEB4D call _81CEC4E call _81CEC4E call _81CEC4E - createsprite gBattleAnimSpriteTemplate_83D9C24, 2, 20, 0, 0, 0, 11 + createsprite IceBeamCenterParticleSpriteTemplate, 2, 20, 0, 0, 0, 11 delay 1 - createsprite gBattleAnimSpriteTemplate_83D9C24, 2, 20, 0, 0, 0, 11 + createsprite IceBeamCenterParticleSpriteTemplate, 2, 20, 0, 0, 0, 11 waitforvisualfinish delay 20 - call Unknown_81D5C36 + call Effect_LightIceDamage createsprite gSimplePaletteBlendSpriteTemplate, 2, 4, 5, 7, 0, rgb(0, 20, 31) waitforvisualfinish createsprite gSimplePaletteBlendSpriteTemplate, 2, 1, 0, 7, 0, rgb(0, 0, 0) @@ -5385,9 +5385,9 @@ Move_ICE_BEAM: @ 81CEB4D blendoff end _81CEC4E: - createsprite gBattleAnimSpriteTemplate_83D9C3C, 2, 20, 12, 0, 12, 20 - createsprite gBattleAnimSpriteTemplate_83D9C3C, 2, 20, -12, 0, -12, 20 - createsprite gBattleAnimSpriteTemplate_83D9C24, 2, 20, 0, 0, 0, 11 + createsprite gIceBeamOuterParticleSpriteTemplate, 2, 20, 12, 0, 12, 20 + createsprite gIceBeamOuterParticleSpriteTemplate, 2, 20, -12, 0, -12, 20 + createsprite IceBeamCenterParticleSpriteTemplate, 2, 20, 0, 0, 0, 11 delay 1 return @@ -5403,7 +5403,7 @@ Move_AURORA_BEAM: @ 81CEC91 waitbgfadein playsewithpan SE_W062, 192 setarg 7, 0 - createvisualtask sub_80D3490, 10, 130 + createvisualtask AnimTask_RotateMonPalette1, 10, 130 call _81CED18 createvisualtask AnimTask_ShakeMon2, 5, 1, 1, 0, 17, 1 call _81CED18 @@ -5423,13 +5423,13 @@ Move_AURORA_BEAM: @ 81CEC91 waitbgfadein end _81CED18: - createsprite gBattleAnimSpriteTemplate_83D91C4, 130, 20, 0, 0, 0, 17 + createsprite RainbowRingSpriteTemplate, 130, 20, 0, 0, 0, 17 delay 1 - createsprite gBattleAnimSpriteTemplate_83D91C4, 130, 20, 0, 0, 0, 17 + createsprite RainbowRingSpriteTemplate, 130, 20, 0, 0, 0, 17 delay 1 - createsprite gBattleAnimSpriteTemplate_83D91C4, 130, 20, 0, 0, 0, 17 + createsprite RainbowRingSpriteTemplate, 130, 20, 0, 0, 0, 17 delay 1 - createsprite gBattleAnimSpriteTemplate_83D91C4, 130, 20, 0, 0, 0, 17 + createsprite RainbowRingSpriteTemplate, 130, 20, 0, 0, 0, 17 delay 1 return @@ -5538,7 +5538,7 @@ _81CEFD0: call _81CF00A playsewithpan SE_W059B, 63 waitforvisualfinish - call Unknown_81D5CBA + call Effect_HeavyIceDamage waitforvisualfinish clearmonbg ANIM_BANK_DEF_PARTNER delay 20 @@ -5548,26 +5548,26 @@ _81CEFD0: waitbgfadein end _81CF00A: - createsprite gBattleAnimSpriteTemplate_83D9CA8, 40, 0, -10, 0, -10, 72, 1 - createsprite gBattleAnimSpriteTemplate_83D9CC0, 40, 0, 0, 0, 0, 80, 0, 0, 1 + createsprite gSmallSnowballSpriteTemplate1, 40, 0, -10, 0, -10, 72, 1 + createsprite gLargeSnowballSpriteTemplate, 40, 0, 0, 0, 0, 80, 0, 0, 1 delay 3 - createsprite gBattleAnimSpriteTemplate_83D9CA8, 40, 0, -15, 0, -15, 72, 1 - createsprite gBattleAnimSpriteTemplate_83D9CC0, 40, 0, -10, 0, -10, 80, 0, 0, 1 + createsprite gSmallSnowballSpriteTemplate1, 40, 0, -15, 0, -15, 72, 1 + createsprite gLargeSnowballSpriteTemplate, 40, 0, -10, 0, -10, 80, 0, 0, 1 delay 3 - createsprite gBattleAnimSpriteTemplate_83D9CA8, 40, 0, -5, 0, -5, 72, 1 - createsprite gBattleAnimSpriteTemplate_83D9CC0, 40, 0, 10, 0, 10, 80, 0, 0, 1 + createsprite gSmallSnowballSpriteTemplate1, 40, 0, -5, 0, -5, 72, 1 + createsprite gLargeSnowballSpriteTemplate, 40, 0, 10, 0, 10, 80, 0, 0, 1 delay 3 - createsprite gBattleAnimSpriteTemplate_83D9CA8, 40, 0, -10, 0, -10, 72, 1 - createsprite gBattleAnimSpriteTemplate_83D9CC0, 40, 0, -20, 0, -20, 80, 0, 0, 1 + createsprite gSmallSnowballSpriteTemplate1, 40, 0, -10, 0, -10, 72, 1 + createsprite gLargeSnowballSpriteTemplate, 40, 0, -20, 0, -20, 80, 0, 0, 1 delay 3 - createsprite gBattleAnimSpriteTemplate_83D9CA8, 40, 0, -20, 0, -20, 72, 1 - createsprite gBattleAnimSpriteTemplate_83D9CC0, 40, 0, 15, 0, 15, 80, 0, 0, 1 + createsprite gSmallSnowballSpriteTemplate1, 40, 0, -20, 0, -20, 72, 1 + createsprite gLargeSnowballSpriteTemplate, 40, 0, 15, 0, 15, 80, 0, 0, 1 delay 3 - createsprite gBattleAnimSpriteTemplate_83D9CA8, 40, 0, -15, 0, -15, 72, 1 - createsprite gBattleAnimSpriteTemplate_83D9CC0, 40, 0, -20, 0, -20, 80, 0, 0, 1 + createsprite gSmallSnowballSpriteTemplate1, 40, 0, -15, 0, -15, 72, 1 + createsprite gLargeSnowballSpriteTemplate, 40, 0, -20, 0, -20, 80, 0, 0, 1 delay 3 - createsprite gBattleAnimSpriteTemplate_83D9CA8, 40, 0, -25, 0, -25, 72, 1 - createsprite gBattleAnimSpriteTemplate_83D9CC0, 40, 0, 20, 0, 20, 80, 0, 0, 1 + createsprite gSmallSnowballSpriteTemplate1, 40, 0, -25, 0, -25, 72, 1 + createsprite gLargeSnowballSpriteTemplate, 40, 0, 20, 0, 20, 80, 0, 0, 1 delay 3 return _81CF13F: @@ -5585,26 +5585,26 @@ Move_POWDER_SNOW: @ 81CF146 playsewithpan SE_W016B, 63 waitforvisualfinish waitsound - call Unknown_81D5CBA + call Effect_HeavyIceDamage waitforvisualfinish clearmonbg ANIM_BANK_DEF_PARTNER delay 20 createsprite gSimplePaletteBlendSpriteTemplate, 2, 31, 1, 3, 0, rgb(0, 0, 0) end _81CF190: - createsprite gBattleAnimSpriteTemplate_83D9CD8, 40, 0, 0, 0, 0, 56, 4, 4, 1 + createsprite gSmallSnowballSpriteTemplate2, 40, 0, 0, 0, 0, 56, 4, 4, 1 delay 3 - createsprite gBattleAnimSpriteTemplate_83D9CD8, 40, 0, -10, 0, -10, 56, 4, 4, 1 + createsprite gSmallSnowballSpriteTemplate2, 40, 0, -10, 0, -10, 56, 4, 4, 1 delay 3 - createsprite gBattleAnimSpriteTemplate_83D9CD8, 40, 0, 10, 0, 10, 56, -4, 3, 1 + createsprite gSmallSnowballSpriteTemplate2, 40, 0, 10, 0, 10, 56, -4, 3, 1 delay 3 - createsprite gBattleAnimSpriteTemplate_83D9CD8, 40, 0, -20, 0, -20, 56, -4, 5, 1 + createsprite gSmallSnowballSpriteTemplate2, 40, 0, -20, 0, -20, 56, -4, 5, 1 delay 3 - createsprite gBattleAnimSpriteTemplate_83D9CD8, 40, 0, 15, 0, 15, 56, 4, 4, 1 + createsprite gSmallSnowballSpriteTemplate2, 40, 0, 15, 0, 15, 56, 4, 4, 1 delay 3 - createsprite gBattleAnimSpriteTemplate_83D9CD8, 40, 0, -20, 0, -20, 56, 4, 4, 1 + createsprite gSmallSnowballSpriteTemplate2, 40, 0, -20, 0, -20, 56, 4, 4, 1 delay 3 - createsprite gBattleAnimSpriteTemplate_83D9CD8, 40, 0, 20, 0, 20, 56, 4, 4, 1 + createsprite gSmallSnowballSpriteTemplate2, 40, 0, 20, 0, 20, 56, 4, 4, 1 delay 3 return @@ -6919,14 +6919,14 @@ Move_MIST: @ 81D1073 blendoff end _81D10BE: - createsprite gBattleAnimSpriteTemplate_83D9D3C, 2, 0, -24, 48, 240, 0, 1 + createsprite gMistCloudSpriteTemplate, 2, 0, -24, 48, 240, 0, 1 delay 7 return Move_HAZE: @ 81D10D4 waitforvisualfinish playsewithpan SE_W114, 0 - createvisualtask sub_80D80E0, 5 + createvisualtask AnimTask_Haze1, 5 delay 30 createvisualtask sub_80E2A38, 10, 1920, 2, 0, 16, 0 delay 90 @@ -7063,22 +7063,22 @@ Move_POISON_GAS: @ 81D1474 setalpha 12, 8 delay 0 playsewithpan SE_W054, 192 - createsprite gBattleAnimSpriteTemplate_83D9DAC, 128, 64, 0, 0, -32, -6, 4192, 1072, 0 + createsprite gPoisonGasCloudSpriteTemplate, 128, 64, 0, 0, -32, -6, 4192, 1072, 0 delay 4 playsewithpan SE_W054, 192 - createsprite gBattleAnimSpriteTemplate_83D9DAC, 128, 64, 0, 0, -32, -6, 4192, 1072, 0 + createsprite gPoisonGasCloudSpriteTemplate, 128, 64, 0, 0, -32, -6, 4192, 1072, 0 delay 4 playsewithpan SE_W054, 192 - createsprite gBattleAnimSpriteTemplate_83D9DAC, 128, 64, 0, 0, -32, -6, 4192, 1072, 0 + createsprite gPoisonGasCloudSpriteTemplate, 128, 64, 0, 0, -32, -6, 4192, 1072, 0 delay 4 playsewithpan SE_W054, 192 - createsprite gBattleAnimSpriteTemplate_83D9DAC, 128, 64, 0, 0, -32, -6, 4192, 1072, 0 + createsprite gPoisonGasCloudSpriteTemplate, 128, 64, 0, 0, -32, -6, 4192, 1072, 0 delay 4 playsewithpan SE_W054, 192 - createsprite gBattleAnimSpriteTemplate_83D9DAC, 128, 64, 0, 0, -32, -6, 4192, 1072, 0 + createsprite gPoisonGasCloudSpriteTemplate, 128, 64, 0, 0, -32, -6, 4192, 1072, 0 delay 4 playsewithpan SE_W054, 192 - createsprite gBattleAnimSpriteTemplate_83D9DAC, 128, 64, 0, 0, -32, -6, 4192, 1072, 0 + createsprite gPoisonGasCloudSpriteTemplate, 128, 64, 0, 0, -32, -6, 4192, 1072, 0 delay 40 loopsewithpan SE_W054, 63, 28, 6 createvisualtask sub_80E1F8C, 2, 4, 6, 2, 0, 12, 26650 @@ -8029,7 +8029,7 @@ Move_TRI_ATTACK: @ 81D2A0F createvisualtask sub_80E2324, 2, 257, 257, 257 waitforvisualfinish loadspritegfx 10141 - call Unknown_81D5C36 + call Effect_LightIceDamage createsprite gSimplePaletteBlendSpriteTemplate, 2, 1, 2, 16, 0, rgb(0, 0, 0) waitforvisualfinish end @@ -9734,21 +9734,21 @@ Move_MAGICAL_LEAF: @ 81D5699 Move_ICE_BALL: @ 81D57BA loadspritegfx 10043 loadspritegfx 10141 - createvisualtask sub_80D8FC0, 5, 0 + createvisualtask AnimTask_CountIceBallThrows, 5, 0 jumpargeq 0, 4, _81D5831 _81D57D1: playsewithpan SE_W196, 192 - createsprite gBattleAnimSpriteTemplate_83D9EF4, 130, 15, 0, -12, -16, 30, -40 + createsprite gIceBallSpriteTemplate, 130, 15, 0, -12, -16, 30, -40 delay 28 playsewithpan SE_W280, 63 - createvisualtask sub_80D8FC0, 5, 0 + createvisualtask AnimTask_CountIceBallThrows, 5, 0 jumpargeq 0, 0, _81D5842 jumpargeq 0, 1, _81D5871 jumpargeq 0, 2, _81D58AA jumpargeq 0, 3, _81D58ED jumpargeq 0, 4, _81D5935 _81D581F: - createvisualtask sub_80D8FC0, 5, 0 + createvisualtask AnimTask_CountIceBallThrows, 5, 0 jumpargeq 0, 4, _81D5838 _81D5830: end @@ -9818,7 +9818,7 @@ _81D5935: call _81D597D goto _81D581F _81D597D: - createsprite gBattleAnimSpriteTemplate_83D9F0C, 132, -12, -16 + createsprite gIceBallParticleSpriteTemplate, 132, -12, -16 return Move_WEATHER_BALL: @ 81D5989 @@ -9900,18 +9900,18 @@ _81D5AF9: _81D5B99: loadspritegfx 10263 loadspritegfx 10141 - createsprite gBattleAnimSpriteTemplate_83D9E54, 130, -30, -100, 25, 25, -40, 20 + createsprite gWeatherBallHailSpriteTemplate, 130, -30, -100, 25, 25, -40, 20 playsewithpan SE_W258, 63 delay 10 - createsprite gBattleAnimSpriteTemplate_83D9E54, 130, -30, -100, 25, 25, 40, 0 + createsprite gWeatherBallHailSpriteTemplate, 130, -30, -100, 25, 25, 40, 0 playsewithpan SE_W258, 63 delay 10 - createsprite gBattleAnimSpriteTemplate_83D9E54, 130, -30, -100, 25, 25, 0, 0 + createsprite gWeatherBallHailSpriteTemplate, 130, -30, -100, 25, 25, 0, 0 playsewithpan SE_W258, 63 waitforvisualfinish createvisualtask AnimTask_ShakeMon2, 2, ANIM_BANK_TARGET, 2, 0, 8, 1 playsewithpan SE_W196, 63 - call Unknown_81D5C36 + call Effect_LightIceDamage waitforvisualfinish end @@ -9927,102 +9927,102 @@ PoundCopy: @ 81D5C05 blendoff end -Unknown_81D5C36: @ 81D5C36 - createsprite gBattleAnimSpriteTemplate_83D9C78, 130, -10, -10, 0 +Effect_LightIceDamage: @ 81D5C36 + createsprite gLargeIceEffectParticleSpriteTemplate, 130, -10, -10, 0 playsewithpan SE_W196, 63 delay 4 - createsprite gBattleAnimSpriteTemplate_83D9C90, 130, 10, 20, 0 + createsprite gSmallIceEffectParticleSpriteTemplate, 130, 10, 20, 0 playsewithpan SE_W196, 63 delay 4 - createsprite gBattleAnimSpriteTemplate_83D9C78, 130, -5, 10, 0 + createsprite gLargeIceEffectParticleSpriteTemplate, 130, -5, 10, 0 playsewithpan SE_W196, 63 delay 4 - createsprite gBattleAnimSpriteTemplate_83D9C90, 130, 17, -12, 0 + createsprite gSmallIceEffectParticleSpriteTemplate, 130, 17, -12, 0 playsewithpan SE_W196, 63 delay 4 - createsprite gBattleAnimSpriteTemplate_83D9C90, 130, -15, 15, 0 + createsprite gSmallIceEffectParticleSpriteTemplate, 130, -15, 15, 0 playsewithpan SE_W196, 63 delay 4 - createsprite gBattleAnimSpriteTemplate_83D9C90, 130, 0, 0, 0 + createsprite gSmallIceEffectParticleSpriteTemplate, 130, 0, 0, 0 playsewithpan SE_W196, 63 delay 4 - createsprite gBattleAnimSpriteTemplate_83D9C78, 130, 20, 2, 0 + createsprite gLargeIceEffectParticleSpriteTemplate, 130, 20, 2, 0 playsewithpan SE_W196, 63 return -Unknown_81D5CBA: @ 81D5CBA - createsprite gBattleAnimSpriteTemplate_83D9C78, 130, -10, -10, 1 +Effect_HeavyIceDamage: @ 81D5CBA + createsprite gLargeIceEffectParticleSpriteTemplate, 130, -10, -10, 1 playsewithpan SE_W196, 63 delay 4 - createsprite gBattleAnimSpriteTemplate_83D9C90, 130, 10, 20, 1 + createsprite gSmallIceEffectParticleSpriteTemplate, 130, 10, 20, 1 playsewithpan SE_W196, 63 delay 4 - createsprite gBattleAnimSpriteTemplate_83D9C78, 130, -29, 0, 1 + createsprite gLargeIceEffectParticleSpriteTemplate, 130, -29, 0, 1 playsewithpan SE_W196, 63 delay 4 - createsprite gBattleAnimSpriteTemplate_83D9C90, 130, 29, -20, 1 + createsprite gSmallIceEffectParticleSpriteTemplate, 130, 29, -20, 1 playsewithpan SE_W196, 63 delay 4 - createsprite gBattleAnimSpriteTemplate_83D9C78, 130, -5, 10, 1 + createsprite gLargeIceEffectParticleSpriteTemplate, 130, -5, 10, 1 playsewithpan SE_W196, 63 delay 4 - createsprite gBattleAnimSpriteTemplate_83D9C90, 130, 17, -12, 1 + createsprite gSmallIceEffectParticleSpriteTemplate, 130, 17, -12, 1 playsewithpan SE_W196, 63 delay 4 - createsprite gBattleAnimSpriteTemplate_83D9C78, 130, -20, 0, 1 + createsprite gLargeIceEffectParticleSpriteTemplate, 130, -20, 0, 1 playsewithpan SE_W196, 63 delay 4 - createsprite gBattleAnimSpriteTemplate_83D9C90, 130, -15, 15, 1 + createsprite gSmallIceEffectParticleSpriteTemplate, 130, -15, 15, 1 playsewithpan SE_W196, 63 delay 4 - createsprite gBattleAnimSpriteTemplate_83D9C90, 130, 26, -5, 1 + createsprite gSmallIceEffectParticleSpriteTemplate, 130, 26, -5, 1 playsewithpan SE_W196, 63 delay 4 - createsprite gBattleAnimSpriteTemplate_83D9C90, 130, 0, 0, 1 + createsprite gSmallIceEffectParticleSpriteTemplate, 130, 0, 0, 1 playsewithpan SE_W196, 63 delay 4 - createsprite gBattleAnimSpriteTemplate_83D9C78, 130, 20, 2, 1 + createsprite gLargeIceEffectParticleSpriteTemplate, 130, 20, 2, 1 playsewithpan SE_W196, 63 return Unknown_81D5D8A: @ 81D5D8A loopsewithpan SE_W196, 63, 6, 4 - createsprite gBattleAnimSpriteTemplate_83D9D14, 130, 0, 24, 0 + createsprite gIceSpikeSpriteTemplate, 130, 0, 24, 0 delay 4 - createsprite gBattleAnimSpriteTemplate_83D9D14, 130, 8, 24, 0 - createsprite gBattleAnimSpriteTemplate_83D9D14, 130, -8, 24, 0 + createsprite gIceSpikeSpriteTemplate, 130, 8, 24, 0 + createsprite gIceSpikeSpriteTemplate, 130, -8, 24, 0 delay 4 - createsprite gBattleAnimSpriteTemplate_83D9D14, 130, 16, 24, 0 - createsprite gBattleAnimSpriteTemplate_83D9D14, 130, -16, 24, 0 + createsprite gIceSpikeSpriteTemplate, 130, 16, 24, 0 + createsprite gIceSpikeSpriteTemplate, 130, -16, 24, 0 delay 4 - createsprite gBattleAnimSpriteTemplate_83D9D14, 130, 24, 24, 0 - createsprite gBattleAnimSpriteTemplate_83D9D14, 130, -24, 24, 0 + createsprite gIceSpikeSpriteTemplate, 130, 24, 24, 0 + createsprite gIceSpikeSpriteTemplate, 130, -24, 24, 0 delay 4 - createsprite gBattleAnimSpriteTemplate_83D9D14, 130, 32, 24, 0 - createsprite gBattleAnimSpriteTemplate_83D9D14, 130, -32, 24, 0 + createsprite gIceSpikeSpriteTemplate, 130, 32, 24, 0 + createsprite gIceSpikeSpriteTemplate, 130, -32, 24, 0 return -Unknown_81D5E0E: @ 81D5E0E +Unknown_81D5E0E: @ 81D5E0E Icy Wind animates end bit with the wavy shiz loopsewithpan SE_W196, 63, 6, 4 - createsprite gBattleAnimSpriteTemplate_83D9D14, 130, 0, 24, 1 + createsprite gIceSpikeSpriteTemplate, 130, 0, 24, 1 delay 4 - createsprite gBattleAnimSpriteTemplate_83D9D14, 130, 8, 24, 1 - createsprite gBattleAnimSpriteTemplate_83D9D14, 130, -8, 24, 1 + createsprite gIceSpikeSpriteTemplate, 130, 8, 24, 1 + createsprite gIceSpikeSpriteTemplate, 130, -8, 24, 1 delay 4 - createsprite gBattleAnimSpriteTemplate_83D9D14, 130, 16, 24, 1 - createsprite gBattleAnimSpriteTemplate_83D9D14, 130, -16, 24, 1 + createsprite gIceSpikeSpriteTemplate, 130, 16, 24, 1 + createsprite gIceSpikeSpriteTemplate, 130, -16, 24, 1 delay 4 - createsprite gBattleAnimSpriteTemplate_83D9D14, 130, 24, 24, 1 - createsprite gBattleAnimSpriteTemplate_83D9D14, 130, -24, 24, 1 + createsprite gIceSpikeSpriteTemplate, 130, 24, 24, 1 + createsprite gIceSpikeSpriteTemplate, 130, -24, 24, 1 delay 4 - createsprite gBattleAnimSpriteTemplate_83D9D14, 130, 32, 24, 1 - createsprite gBattleAnimSpriteTemplate_83D9D14, 130, -32, 24, 1 + createsprite gIceSpikeSpriteTemplate, 130, 32, 24, 1 + createsprite gIceSpikeSpriteTemplate, 130, -32, 24, 1 delay 4 - createsprite gBattleAnimSpriteTemplate_83D9D14, 130, 40, 24, 1 - createsprite gBattleAnimSpriteTemplate_83D9D14, 130, -40, 24, 1 + createsprite gIceSpikeSpriteTemplate, 130, 40, 24, 1 + createsprite gIceSpikeSpriteTemplate, 130, -40, 24, 1 delay 4 - createsprite gBattleAnimSpriteTemplate_83D9D14, 130, 48, 24, 1 - createsprite gBattleAnimSpriteTemplate_83D9D14, 130, -48, 24, 1 + createsprite gIceSpikeSpriteTemplate, 130, 48, 24, 1 + createsprite gIceSpikeSpriteTemplate, 130, -48, 24, 1 return Unknown_81D5ECA: @ 81D5ECA diff --git a/include/rom_8077ABC.h b/include/rom_8077ABC.h index 5be158c54..55c0f46c2 100644 --- a/include/rom_8077ABC.h +++ b/include/rom_8077ABC.h @@ -75,6 +75,7 @@ void sub_8078764(struct Sprite *sprite, u8); void StartAnimLinearTranslation(struct Sprite *sprite); void sub_8078D60(struct Sprite *sprite); void InitAnimArcTranslation(struct Sprite *sprite); +void sub_8078D8C(struct Sprite *sprite); void WaitAnimForDuration(struct Sprite *sprite); void sub_8078CC0(struct Sprite *sprite); void sub_8078600(struct Sprite *sprite); diff --git a/ld_script.txt b/ld_script.txt index 88bbd3d4c..552feb804 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -279,7 +279,6 @@ SECTIONS { src/battle/anim/shock.o(.text); src/battle/anim/current.o(.text); src/battle/anim/ice.o(.text); - asm/ice.o(.text); src/battle/anim/fight.o(.text); src/battle/anim/poison.o(.text); src/battle/anim/flying.o(.text); diff --git a/src/battle/anim/aurora.c b/src/battle/anim/aurora.c index c17748440..3564da811 100644 --- a/src/battle/anim/aurora.c +++ b/src/battle/anim/aurora.c @@ -9,9 +9,9 @@ extern s16 gBattleAnimArgs[8]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; -void sub_80D33B4(struct Sprite *sprite); -static void sub_80D344C(struct Sprite *); -static void sub_80D34D4(u8); +void AnimAuroraRings(struct Sprite *sprite); +static void AnimGrowAuroraRings(struct Sprite *); +static void AnimTask_RotateMonPalette2(u8); const union AnimCmd gSpriteAnim_83D9190[] = { @@ -43,7 +43,8 @@ const union AffineAnimCmd *const gSpriteAffineAnimTable_83D91C0[] = gSpriteAffineAnim_83D91A8, }; -const struct SpriteTemplate gBattleAnimSpriteTemplate_83D91C4 = +// Multi-colored rings used in Aurora Beam. +const struct SpriteTemplate RainbowRingSpriteTemplate = { .tileTag = 10140, .paletteTag = 10140, @@ -51,10 +52,16 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D91C4 = .anims = gSpriteAnimTable_83D91A0, .images = NULL, .affineAnims = gSpriteAffineAnimTable_83D91C0, - .callback = sub_80D33B4, + .callback = AnimAuroraRings, }; -void sub_80D33B4(struct Sprite *sprite) +// Animates the colorful rings in Aurora Beam linearly towards the target mon. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: target x offset +// arg 3: target y offset +// arg 4: duration +void AnimAuroraRings(struct Sprite *sprite) { s16 r6; @@ -69,12 +76,14 @@ void sub_80D33B4(struct Sprite *sprite) sprite->data[3] = sprite->pos1.y; sprite->data[4] = GetBattlerSpriteCoord(gAnimBankTarget, 3) + gBattleAnimArgs[3]; InitAnimLinearTranslation(sprite); - sprite->callback = sub_80D344C; + sprite->callback = AnimGrowAuroraRings; sprite->affineAnimPaused = TRUE; sprite->callback(sprite); } -static void sub_80D344C(struct Sprite *sprite) +// Grows the rings in Aurora Beam. +// arg 7: if -1, grow the rings +static void AnimGrowAuroraRings(struct Sprite *sprite) { if ((u16)gBattleAnimArgs[7] == 0xFFFF) { @@ -85,14 +94,17 @@ static void sub_80D344C(struct Sprite *sprite) DestroyAnimSprite(sprite); } -void sub_80D3490(u8 taskId) +// This seems to rotate the palette of the attacking mon, but the visual +// effect is not noticeable in-game. +// arg 0: duration +void AnimTask_RotateMonPalette1(u8 taskId) { gTasks[taskId].data[0] = gBattleAnimArgs[0]; gTasks[taskId].data[2] = 0x100 + IndexOfSpritePaletteTag(0x279C) * 16; - gTasks[taskId].func = sub_80D34D4; + gTasks[taskId].func = AnimTask_RotateMonPalette2; } -static void sub_80D34D4(u8 taskId) +static void AnimTask_RotateMonPalette2(u8 taskId) { gTasks[taskId].data[10]++; if (gTasks[taskId].data[10] == 3) diff --git a/src/battle/anim/ice.c b/src/battle/anim/ice.c index 50c8b9030..0ff236523 100644 --- a/src/battle/anim/ice.c +++ b/src/battle/anim/ice.c @@ -1,25 +1,59 @@ #include "global.h" +#include "main.h" +#include "trig.h" #include "rom_8077ABC.h" +#include "battle.h" #include "battle_anim.h" +#include "constants/battle_constants.h" +#include "task.h" +#include "decompress.h" +#include "palette.h" +#include "random.h" extern s16 gBattleAnimArgs[]; -extern u8 gAnimBankAttacker; -extern u8 gAnimBankTarget; - -void sub_80D7704(struct Sprite *sprite); -void sub_80D78EC(struct Sprite *sprite); -void sub_80D792C(struct Sprite *sprite); -void sub_80D79B4(struct Sprite *sprite); -void sub_80D7A64(struct Sprite *sprite); -void sub_80D7CD4(struct Sprite *sprite); -void sub_80D7E88(struct Sprite *sprite); -void sub_80D7F10(struct Sprite *sprite); -void sub_80D83E0(struct Sprite *sprite); -void sub_80D8700(struct Sprite *sprite); -void sub_80D8D1C(struct Sprite *sprite); +extern u8 gAnimBankAttacker; +extern u8 gAnimBankTarget; +extern u8 gAnimVisualTaskCount; +extern u8 gBanksBySide[]; +extern u8 gBankSpriteIds[]; + +extern u16 gBattle_BG1_X; +extern u16 gBattle_BG1_Y; + +extern const u8 gUnknown_083970E8[]; + +extern struct INCBIN_U8 gBattleAnimFogTilemap; +extern struct INCBIN_U8 gWeatherFog1Tiles; + +static void sub_80D7704(struct Sprite *sprite); +static void AnimIcePunchSwirlingParticle(struct Sprite *sprite); +static void AnimIceBeamParticle(struct Sprite *sprite); +static void AnimIceEffectParticle(struct Sprite *sprite); +static void AnimFlickerIceEffectParticle(struct Sprite *sprite); +static void AnimMoveParticleBeyondTarget(struct Sprite *sprite); +static void AnimWaveFromCenterOfTarget(struct Sprite *sprite); +static void InitSwirlingFogAnim(struct Sprite *sprite); +static void AnimThrowMistBall(struct Sprite *sprite); +static void InitPoisonGasCloudAnim(struct Sprite *sprite); +static void AnimHailBegin(struct Sprite *sprite); void sub_807A9BC(struct Sprite *sprite); -void unc_080B06FC(struct Sprite *sprite); -void sub_80D8F10(struct Sprite *sprite); +static void InitIceBallAnim(struct Sprite *sprite); +static void InitIceBallParticle(struct Sprite *sprite); +static void AnimSwirlingSnowball_Step1(struct Sprite *sprite); +static void AnimSwirlingSnowball_Step2(struct Sprite *sprite); +static void AnimSwirlingSnowball_Step3(struct Sprite *sprite); +static void AnimSwirlingSnowball_End(struct Sprite *sprite); +static void AnimWiggleParticleTowardsTarget(struct Sprite *sprite); +static void AnimSwirlingFogAnim(struct Sprite *sprite); +static void sub_80D8874(struct Sprite *sprite); +static void AnimHailContinue(struct Sprite *sprite); +static void AnimThrowIceBall(struct Sprite *sprite); +static void AnimIceBallParticle(struct Sprite *sprite); + +static void AnimTask_Haze2(u8 taskId); +static void AnimTask_OverlayFogTiles(u8 taskId); +static void AnimTask_Hail2(u8 taskId); +bool8 sub_80D8BA8(u8 a1, u8 a2, u8 a3, u8 a4); const union AnimCmd gSpriteAnim_83D9B58[] = { @@ -33,6 +67,7 @@ const union AnimCmd *const gSpriteAnimTable_83D9B64[] = gSpriteAnim_83D9B58, }; +// unknown sprite template const struct SpriteTemplate gSpriteTemplate_83D9B68 = { .tileTag = 10141, @@ -122,7 +157,7 @@ const union AffineAnimCmd *const gSpriteAffineAnimTable_83D9BDC[] = gSpriteAffineAnim_83D9BCC, }; -const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9BE0 = +const struct SpriteTemplate gLargeIcePunchCrystalSpriteTemplate = { .tileTag = 10141, .paletteTag = 10141, @@ -130,10 +165,10 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9BE0 = .anims = gSpriteAnimTable_83D9BB8, .images = NULL, .affineAnims = gSpriteAffineAnimTable_83D9BDC, - .callback = sub_80D78EC, + .callback = AnimIcePunchSwirlingParticle, }; -const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9BF8 = +const struct SpriteTemplate gSmallIcePunchCrystalSpriteTemplate = { .tileTag = 10141, .paletteTag = 10141, @@ -141,7 +176,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9BF8 = .anims = gSpriteAnimTable_83D9BBC, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80D78EC, + .callback = AnimIcePunchSwirlingParticle, }; const union AffineAnimCmd gSpriteAffineAnim_83D9C10[] = @@ -155,7 +190,7 @@ const union AffineAnimCmd *const gSpriteAffineAnimTable_83D9C20[] = gSpriteAffineAnim_83D9C10, }; -const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9C24 = +const struct SpriteTemplate IceBeamCenterParticleSpriteTemplate = { .tileTag = 10141, .paletteTag = 10141, @@ -163,10 +198,10 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9C24 = .anims = gSpriteAnimTable_83D9BB8, .images = NULL, .affineAnims = gSpriteAffineAnimTable_83D9C20, - .callback = sub_80D792C, + .callback = AnimIceBeamParticle, }; -const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9C3C = +const struct SpriteTemplate gIceBeamOuterParticleSpriteTemplate = { .tileTag = 10141, .paletteTag = 10141, @@ -174,7 +209,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9C3C = .anims = gSpriteAnimTable_83D9BBC, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80D792C, + .callback = AnimIceBeamParticle, }; const union AffineAnimCmd gSpriteAffineAnim_83D9C54[] = @@ -190,7 +225,7 @@ const union AffineAnimCmd *const gSpriteAffineAnimTable_83D9C74[] = gSpriteAffineAnim_83D9C54, }; -const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9C78 = +const struct SpriteTemplate gLargeIceEffectParticleSpriteTemplate = { .tileTag = 10141, .paletteTag = 10141, @@ -198,10 +233,10 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9C78 = .anims = gSpriteAnimTable_83D9BB8, .images = NULL, .affineAnims = gSpriteAffineAnimTable_83D9C74, - .callback = sub_80D79B4, + .callback = AnimIceEffectParticle, }; -const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9C90 = +const struct SpriteTemplate gSmallIceEffectParticleSpriteTemplate = { .tileTag = 10141, .paletteTag = 10141, @@ -209,10 +244,10 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9C90 = .anims = gSpriteAnimTable_83D9BBC, .images = NULL, .affineAnims = gSpriteAffineAnimTable_83D9C74, - .callback = sub_80D79B4, + .callback = AnimIceEffectParticle, }; -const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9CA8 = +const struct SpriteTemplate gSmallSnowballSpriteTemplate1 = { .tileTag = 10141, .paletteTag = 10141, @@ -220,10 +255,10 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9CA8 = .anims = gSpriteAnimTable_83D9BC0, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80D7A64, + .callback = AnimSwirlingSnowball_Step1, }; -const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9CC0 = +const struct SpriteTemplate gLargeSnowballSpriteTemplate = { .tileTag = 10141, .paletteTag = 10141, @@ -231,10 +266,10 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9CC0 = .anims = gSpriteAnimTable_83D9BC4, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80D7CD4, + .callback = AnimMoveParticleBeyondTarget, }; -const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9CD8 = +const struct SpriteTemplate gSmallSnowballSpriteTemplate2 = { .tileTag = 10141, .paletteTag = 10141, @@ -242,7 +277,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9CD8 = .anims = gSpriteAnimTable_83D9BC0, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80D7CD4, + .callback = AnimMoveParticleBeyondTarget, }; const union AnimCmd gSpriteAnim_83D9CF0[] = @@ -262,7 +297,7 @@ const union AnimCmd *const gSpriteAnimTable_83D9D10[] = gSpriteAnim_83D9CF0, }; -const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9D14 = +const struct SpriteTemplate gIceSpikeSpriteTemplate = { .tileTag = 10142, .paletteTag = 10142, @@ -270,7 +305,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9D14 = .anims = gSpriteAnimTable_83D9D10, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80D7E88, + .callback = AnimWaveFromCenterOfTarget, }; const union AnimCmd gSpriteAnim_83D9D2C[] = @@ -285,7 +320,7 @@ const union AnimCmd *const gSpriteAnimTable_83D9D38[] = gSpriteAnim_83D9D2C, }; -const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9D3C = +const struct SpriteTemplate gMistCloudSpriteTemplate = { .tileTag = 10144, .paletteTag = 10144, @@ -293,10 +328,10 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9D3C = .anims = gSpriteAnimTable_83D9D38, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80D7F10, + .callback = InitSwirlingFogAnim, }; -const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9D54 = +const struct SpriteTemplate gSmogCloudSpriteTemplate = { .tileTag = 10172, .paletteTag = 10172, @@ -304,7 +339,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9D54 = .anims = gSpriteAnimTable_83D9D38, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80D7F10, + .callback = InitSwirlingFogAnim, }; const u8 gUnknown_083D9D6C[] = @@ -312,7 +347,7 @@ const u8 gUnknown_083D9D6C[] = 0, 1, 2, 2, 2, 2, 3, 4, 4, 4, 5, 6, 6, 6, 6, 7, 8, 8, 8, 9, }; -const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9D80 = +const struct SpriteTemplate gMistBallSpriteTemplate = { .tileTag = 10155, .paletteTag = 10155, @@ -320,7 +355,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9D80 = .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80D83E0, + .callback = AnimThrowMistBall, }; const u8 gUnknown_083D9D98[] = @@ -328,7 +363,7 @@ const u8 gUnknown_083D9D98[] = 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, }; -const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9DAC = +const struct SpriteTemplate gPoisonGasCloudSpriteTemplate = { .tileTag = 10172, .paletteTag = 10172, @@ -336,22 +371,21 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9DAC = .anims = gSpriteAnimTable_83D9D38, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80D8700, + .callback = InitPoisonGasCloudAnim, }; -// bitfield array -const u32 gUnknown_083D9DC4[] = +const u8 gUnknown_083D9DC4[][4] = { - 0x2001E064, - 0x0001E055, - 0x1011E0F2, - 0x1021E042, - 0x0031E0B6, - 0x2001E03C, - 0x0011E0D6, - 0x1001E071, - 0x1031E0D2, - 0x0021E026, + {0x64, 0xE0, 0x01, 0x20}, + {0x55, 0xE0, 0x01, 0x00}, + {0xF2, 0xE0, 0x11, 0x10}, + {0x42, 0xE0, 0x21, 0x10}, + {0xB6, 0xE0, 0x31, 0x00}, + {0x3C, 0xE0, 0x01, 0x20}, + {0xD6, 0xE0, 0x11, 0x00}, + {0x71, 0xE0, 0x01, 0x10}, + {0xD2, 0xE0, 0x31, 0x10}, + {0x26, 0xE0, 0x21, 0x00}, }; const union AffineAnimCmd gSpriteAffineAnim_83D9DEC[] = @@ -390,7 +424,7 @@ const union AffineAnimCmd *const gSpriteAffineAnimTable_83D9E38[] = gSpriteAffineAnim_83D9E1C, }; -const struct SpriteTemplate gSpriteTemplate_83D9E3C = +const struct SpriteTemplate gHailSpriteTemplate = { .tileTag = 10263, .paletteTag = 10263, @@ -398,10 +432,10 @@ const struct SpriteTemplate gSpriteTemplate_83D9E3C = .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gSpriteAffineAnimTable_83D9E2C, - .callback = sub_80D8D1C, + .callback = AnimHailBegin, }; -const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9E54 = +const struct SpriteTemplate gWeatherBallHailSpriteTemplate = { .tileTag = 10263, .paletteTag = 10263, @@ -472,7 +506,7 @@ const union AffineAnimCmd *const gSpriteAffineAnimTable_83D9EE0[] = gSpriteAffineAnim_83D9ED0, }; -const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9EF4 = +const struct SpriteTemplate gIceBallSpriteTemplate = { .tileTag = 10043, .paletteTag = 10043, @@ -480,10 +514,10 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9EF4 = .anims = gSpriteAnimTable_83D9E88, .images = NULL, .affineAnims = gSpriteAffineAnimTable_83D9EE0, - .callback = unc_080B06FC, + .callback = InitIceBallAnim, }; -const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9F0C = +const struct SpriteTemplate gIceBallParticleSpriteTemplate = { .tileTag = 10141, .paletteTag = 10141, @@ -491,5 +525,1798 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9F0C = .anims = gSpriteAnimTable_83D9BBC, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80D8F10, + .callback = InitIceBallParticle, }; + +// unknown - potentially used in weather ball +// TODO: decompile function and name it +/* +// NOT EQUIVALENT +static void sub_80D7704(struct Sprite *sprite) +{ + // + //u16 battler1, battler2, battler3, battler4; // + u16 r9, r8, r3, r6; + //s16 r4, r10; + + sprite->oam.tileNum += 7; + + //u8 battler1, battler2, battler3, battler4; + + //battler1 = GetBattlerSpriteCoord(gAnimBankTarget, 2); + //battler2 = GetBattlerSpriteCoord(gAnimBankTarget, 3); + //battler3 = GetBattlerSpriteCoord(gAnimBankAttacker, 2); + //battler4 = GetBattlerSpriteCoord(gAnimBankAttacker, 3); + + //sprite->oam.tileNum += 7; + + //sprite->data[0] = gBattleAnimArgs[4]; + + //sprite->data[1] = battler3 + gBattleAnimArgs[0]; //??? + //sprite->data[2] = battler1 + gBattleAnimArgs[2]; + //sprite->data[3] = battler4 + gBattleAnimArgs[1]; + //sprite->data[4] = battler2 + gBattleAnimArgs[3]; + + r9 = GetBattlerSpriteCoord(gAnimBankTarget, 2); + r8 = GetBattlerSpriteCoord(gAnimBankTarget, 3); + r3 = GetBattlerSpriteCoord(gAnimBankAttacker, 2); + r6 = GetBattlerSpriteCoord(gAnimBankAttacker, 3); + + sprite->data[0] = gBattleAnimArgs[4]; + + sprite->data[1] = r3 + gBattleAnimArgs[0]; //??? + sprite->data[2] = r9 + gBattleAnimArgs[2]; + sprite->data[3] = r6 + gBattleAnimArgs[1]; + sprite->data[4] = r8 + gBattleAnimArgs[3]; + + //sprite->data[0] = gBattleAnimArgs; + + + sub_8078314(sprite); + + if ((u32)(r9 + 32) <= 304 || (u32)(r8 + 32) <= 224) // cmp 1 + { + r4 = sprite->data[1]; + r10 = 304; + + // _080D77AA + for (int i = 0; i < 3; i++) + { + // + if (((u32)((s16)r9 + r4) + (0x80 << 14)) >> 16 > 304 + || ((u32)((s16)r8 + r4) + (0x80 << 14)) >> 16 > 0xE0) + { + break; + } + } + } + // _080D77DE +} +*/ + +NAKED static void sub_80D7704(struct Sprite *sprite) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tmov r7, r10\n" + "\tmov r6, r9\n" + "\tmov r5, r8\n" + "\tpush {r5-r7}\n" + "\tsub sp, 0x4\n" + "\tadds r5, r0, 0\n" + "\tldrh r2, [r5, 0x4]\n" + "\tlsls r1, r2, 22\n" + "\tlsrs r1, 22\n" + "\tadds r1, 0x7\n" + "\tldr r3, _080D780C @ =0x000003ff\n" + "\tadds r0, r3, 0\n" + "\tands r1, r0\n" + "\tldr r0, _080D7810 @ =0xfffffc00\n" + "\tands r0, r2\n" + "\torrs r0, r1\n" + "\tstrh r0, [r5, 0x4]\n" + "\tldr r4, _080D7814 @ =gAnimBankTarget\n" + "\tldrb r0, [r4]\n" + "\tmovs r1, 0x2\n" + "\tbl GetBattlerSpriteCoord\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tmov r9, r0\n" + "\tldrb r0, [r4]\n" + "\tmovs r1, 0x3\n" + "\tbl GetBattlerSpriteCoord\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tmov r8, r0\n" + "\tldr r4, _080D7818 @ =gAnimBankAttacker\n" + "\tldrb r0, [r4]\n" + "\tmovs r1, 0x2\n" + "\tbl GetBattlerSpriteCoord\n" + "\tlsls r0, 24\n" + "\tlsrs r3, r0, 24\n" + "\tldrb r0, [r4]\n" + "\tmovs r1, 0x3\n" + "\tstr r3, [sp]\n" + "\tbl GetBattlerSpriteCoord\n" + "\tlsls r0, 24\n" + "\tlsrs r6, r0, 24\n" + "\tldr r1, _080D781C @ =gBattleAnimArgs\n" + "\tldrh r0, [r1, 0x8]\n" + "\tstrh r0, [r5, 0x2E]\n" + "\tldrh r0, [r1]\n" + "\tldr r3, [sp]\n" + "\tadds r0, r3\n" + "\tstrh r0, [r5, 0x30]\n" + "\t ldrh r0, [r1, 0x4]\n" + "\t mov r4, r9\n" + "\t adds r0, r4, r0\n" + "\tstrh r0, [r5, 0x32]\n" + "\tldrh r0, [r1, 0x2]\n" + "\tadds r0, r6\n" + "\tstrh r0, [r5, 0x34]\n" + "\tldrh r0, [r1, 0x6]\n" + "\tmov r7, r8\n" + "\tadds r0, r7, r0\n" + "\tstrh r0, [r5, 0x36]\n" + "\tadds r0, r5, 0\n" + "\tbl sub_8078314\n" + "\tadds r4, 0x20\n" + "\tmovs r0, 0x98\n" + "\tlsls r0, 1\n" + "\tmov r12, r0\n" + "\tldr r3, [sp]\n" + "\tcmp r4, r12\n" + "\tbhi _080D77DE\n" + "\tadds r0, r7, 0\n" + "\tadds r0, 0x20\n" + "\tldrh r1, [r5, 0x30]\n" + "\tldrh r2, [r5, 0x32]\n" + "\tcmp r0, 0xE0\n" + "\tbhi _080D77DE\n" + "\tadds r4, r1, 0\n" + "\tmov r10, r12\n" + "_080D77AA:\n" + "\tmov r7, r9\n" + "\tlsls r1, r7, 16\n" + "\tasrs r1, 16\n" + "\tadds r1, r4\n" + "\tlsls r1, 16\n" + "\tmov r7, r8\n" + "\tlsls r0, r7, 16\n" + "\tasrs r0, 16\n" + "\tadds r0, r2\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tmov r8, r0\n" + "\tlsrs r0, r1, 16\n" + "\tmov r9, r0\n" + "\tmovs r7, 0x80\n" + "\tlsls r7, 14\n" + "\tadds r1, r7\n" + "\tlsrs r1, 16\n" + "\tcmp r1, r10\n" + "\tbhi _080D77DE\n" + "\tmov r1, r8\n" + "\tlsls r0, r1, 16\n" + "\tadds r0, r7\n" + "\tlsrs r0, 16\n" + "\tcmp r0, 0xE0\n" + "\tbls _080D77AA\n" + "_080D77DE:\n" + "\tldrh r0, [r5, 0x30]\n" + "\tnegs r7, r0\n" + "\tstrh r7, [r5, 0x30]\n" + "\tldrh r0, [r5, 0x32]\n" + "\tnegs r4, r0\n" + "\tstrh r4, [r5, 0x32]\n" + "\tlsls r0, r3, 16\n" + "\tmovs r1, 0x80\n" + "\tlsls r1, 14\n" + "\tadds r0, r1\n" + "\tlsrs r0, 16\n" + "\tmovs r2, 0x98\n" + "\tlsls r2, 1\n" + "\tmov r12, r2\n" + "\tldr r1, _080D781C @ =gBattleAnimArgs\n" + "\tmov r10, r1\n" + "\tcmp r0, r12\n" + "\tbhi _080D784A\n" + "\tlsls r1, r6, 16\n" + "\tmovs r2, 0x80\n" + "\tlsls r2, 14\n" + "\tadds r0, r1, r2\n" + "\tb _080D7842\n" + "\t.align 2, 0\n" + "_080D780C: .4byte 0x000003ff\n" + "_080D7810: .4byte 0xfffffc00\n" + "_080D7814: .4byte gAnimBankTarget\n" + "_080D7818: .4byte gAnimBankAttacker\n" + "_080D781C: .4byte gBattleAnimArgs\n" + "_080D7820:\n" + "\tlsls r1, r3, 16\n" + "\tasrs r1, 16\n" + "\tadds r1, r7\n" + "\tlsls r1, 16\n" + "\tasrs r0, r2, 16\n" + "\tadds r0, r4\n" + "\tlsls r0, 16\n" + "\tlsrs r6, r0, 16\n" + "\tlsrs r3, r1, 16\n" + "\tmovs r0, 0x80\n" + "\tlsls r0, 14\n" + "\tadds r1, r0\n" + "\tlsrs r1, 16\n" + "\tcmp r1, r12\n" + "\tbhi _080D784A\n" + "\tlsls r1, r6, 16\n" + "\tadds r0, r1, r0\n" + "_080D7842:\n" + "\tlsrs r0, 16\n" + "\tadds r2, r1, 0\n" + "\tcmp r0, 0xE0\n" + "\tbls _080D7820\n" + "_080D784A:\n" + "\tstrh r3, [r5, 0x20]\n" + "\tstrh r6, [r5, 0x22]\n" + "\tmov r1, r10\n" + "\tldrh r0, [r1, 0x8]\n" + "\tstrh r0, [r5, 0x2E]\n" + "\tstrh r3, [r5, 0x30]\n" + "\tmov r2, r9\n" + "\tstrh r2, [r5, 0x32]\n" + "\tstrh r6, [r5, 0x34]\n" + "\tmov r3, r8\n" + "\tstrh r3, [r5, 0x36]\n" + "\tadds r0, r5, 0\n" + "\tbl sub_8078314\n" + "\tmov r7, r10\n" + "\tldrh r0, [r7, 0xA]\n" + "\tstrh r0, [r5, 0x34]\n" + "\tldrh r0, [r7, 0xC]\n" + "\tstrh r0, [r5, 0x36]\n" + "\tldr r0, _080D7884 @ =sub_80D7888\n" + "\tstr r0, [r5, 0x1C]\n" + "\tadd sp, 0x4\n" + "\tpop {r3-r5}\n" + "\tmov r8, r3\n" + "\tmov r9, r4\n" + "\tmov r10, r5\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_080D7884: .4byte sub_80D7888"); +} + +void sub_80D7888(struct Sprite *sprite) +{ + if (sprite->data[0] != 0) + { + sprite->data[5] += sprite->data[1]; + sprite->data[6] += sprite->data[2]; + sprite->pos2.x = sprite->data[5]; + sprite->pos2.y = sprite->data[6]; + sprite->pos2.x += Sin(sprite->data[7], sprite->data[3]); + sprite->pos2.y += Sin(sprite->data[7], sprite->data[3]); + sprite->data[7] = (sprite->data[7] + sprite->data[4]) & 0xFF; + sprite->data[0] -= 1; + } + else + { + DestroyAnimSprite(sprite); + } +} + +// Animates the swirling ice crystals in Ice Punch. +// arg 0: initial position angle around circle (0-256) +static void AnimIcePunchSwirlingParticle(struct Sprite *sprite) +{ + sprite->data[0] = gBattleAnimArgs[0]; + sprite->data[1] = 60; + sprite->data[2] = 9; + sprite->data[3] = 30; + sprite->data[4] = 65024; + StoreSpriteCallbackInData(sprite, DestroyAnimSprite); + sprite->callback = sub_8078174; + sub_8078174(sprite); +} + +// Animates the ice particles in Ice Beam. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: target x offset +// arg 3: target y offset +// arg 4: duration +static void AnimIceBeamParticle(struct Sprite *sprite) +{ + InitAnimSpritePos(sprite, 1); + sprite->data[2] = GetBattlerSpriteCoord(gAnimBankTarget, 2); + + if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER) + sprite->data[2] -= gBattleAnimArgs[2]; + else + sprite->data[2] += gBattleAnimArgs[2]; + + sprite->data[4] = GetBattlerSpriteCoord(gAnimBankTarget, 3) + gBattleAnimArgs[3]; + sprite->data[0] = gBattleAnimArgs[4]; + StoreSpriteCallbackInData(sprite, DestroyAnimSprite); + sprite->callback = StartAnimLinearTranslation; +} + +// Animates the ice crystals at the end of Ice Punch, Ice Beam, Tri Attack, +// Weather Ball (Hail), Blizzard, and Powder Snow. +// arg 0: target x offset +// arg 1: target y offset +// arg 2: ??? unknown boolean +static void AnimIceEffectParticle(struct Sprite *sprite) +{ + if (gBattleAnimArgs[2] == 0) + { + sub_8078764(sprite, 1); + } + else + { + SetAverageBattlerPositions(gAnimBankTarget, 1, &sprite->pos1.x, &sprite->pos1.y); + if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER) + gBattleAnimArgs[0] = -gBattleAnimArgs[0]; + + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + } + + StoreSpriteCallbackInData(sprite, AnimFlickerIceEffectParticle); + sprite->callback = sub_80785E4; +} + +static void AnimFlickerIceEffectParticle(struct Sprite *sprite) +{ + sprite->invisible ^= 1; + sprite->data[0] += 1; + if (sprite->data[0] == 20) + move_anim_8074EE0(sprite); +} + +// Animates the small snowballs that swirl around the target in Blizzard and Icy Wind. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: target x offset +// arg 3: target y offset +// arg 4: particle speed +// arg 5: multiple targets? (boolean) +static void AnimSwirlingSnowball_Step1(struct Sprite *sprite) +{ + int i; + s16 tempDataHolder[8]; + + InitAnimSpritePos(sprite, 1); + + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[1] = sprite->pos1.x; + sprite->data[3] = sprite->pos1.y; + + if (!gBattleAnimArgs[5]) + { + sprite->data[2] = GetBattlerSpriteCoord(gAnimBankTarget, 2); + sprite->data[4] = GetBattlerSpriteCoord(gAnimBankTarget, 3) + gBattleAnimArgs[3]; + } + else + { + SetAverageBattlerPositions(gAnimBankTarget, 1, &sprite->data[2], &sprite->data[4]); + } + + if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER) + sprite->data[2] -= gBattleAnimArgs[2]; + else + sprite->data[2] += gBattleAnimArgs[2]; + + for (i = 0; i < 8; i++) + tempDataHolder[i] = sprite->data[i]; + + sub_8078D60(sprite); + sprite->data[1] ^= 1; + sprite->data[2] ^= 1; + + while (1) + { + sprite->data[0] = 1; + sub_8078CE8(sprite); + + if ((u32)(sprite->pos1.x + sprite->pos2.x + 16) > 272 + || sprite->pos1.y + sprite->pos2.y > 160 + || sprite->pos1.y + sprite->pos2.y < -16) + break; + } + + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.y = 0; + sprite->pos2.x = 0; + + for (i = 0; i < 8; i++) + sprite->data[i] = tempDataHolder[i]; + + sprite->callback = sub_8078D8C; + StoreSpriteCallbackInData(sprite, AnimSwirlingSnowball_Step2); +} + +static void AnimSwirlingSnowball_Step2(struct Sprite *sprite) +{ + s16 tempVar; + + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.y = 0; + sprite->pos2.x = 0; + sprite->data[0] = 128; + + tempVar = GetBattlerSide(gAnimBankAttacker) != 0 ? 20 : 65516; + + sprite->data[3] = Sin(sprite->data[0], tempVar); + sprite->data[4] = Cos(sprite->data[0], 0xF); + sprite->data[5] = 0; + sprite->callback = AnimSwirlingSnowball_Step3; + AnimSwirlingSnowball_Step3(sprite); +} + +static void AnimSwirlingSnowball_Step3(struct Sprite *sprite) +{ + s16 tempVar; + tempVar = GetBattlerSide(gAnimBankAttacker) != 0 ? 20 : 65516; + + if (sprite->data[5] <= 31) + { + sprite->pos2.x = Sin(sprite->data[0], tempVar) - sprite->data[3]; + sprite->pos2.y = Cos(sprite->data[0], 15) - sprite->data[4]; + sprite->data[0] = (sprite->data[0] + 16) & 0xFF; + sprite->data[5] += 1; + } + else + { + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.y = 0; + sprite->pos2.x = 0; + sprite->data[4] = 0; + sprite->data[3] = 0; + sprite->callback = AnimSwirlingSnowball_End; + } +} + +static void AnimSwirlingSnowball_End(struct Sprite *sprite) +{ + sprite->data[0] = 1; + sub_8078CE8(sprite); + + if ((u32)(sprite->pos1.x + sprite->pos2.x + 16) > 272 + || sprite->pos1.y + sprite->pos2.y > 256 + || sprite->pos1.y + sprite->pos2.y < -16) + DestroyAnimSprite(sprite); +} + +// Moves particles towards the target mon and off the screen. Used to animate +// the large snowballs in Blizzard and the small snowballs in Powder Snow. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: target x offset +// arg 3: target y offset +// arg 4: speed +// arg 5: wave amplitude +// arg 6: wave frequency +// arg 7: multiple targets? (boolean) +static void AnimMoveParticleBeyondTarget(struct Sprite *sprite) +{ + int i; + s16 tempDataHolder[8]; + + InitAnimSpritePos(sprite, 1); + + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[1] = sprite->pos1.x; + sprite->data[3] = sprite->pos1.y; + + if (!gBattleAnimArgs[7]) + { + sprite->data[2] = GetBattlerSpriteCoord(gAnimBankTarget, 2); + sprite->data[4] = GetBattlerSpriteCoord(gAnimBankTarget, 3); + } + else + { + SetAverageBattlerPositions(gAnimBankTarget, 1, &sprite->data[2], &sprite->data[4]); + } + + if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER) + sprite->data[2] -= gBattleAnimArgs[2]; + else + sprite->data[2] += gBattleAnimArgs[2]; + + sprite->data[4] += gBattleAnimArgs[3]; + sub_8078D60(sprite); + for (i = 0; i < 8; i++) + tempDataHolder[i] = sprite->data[i]; + + sprite->data[1] ^= 1; + sprite->data[2] ^= 1; + + while (1) + { + sprite->data[0] = 1; + sub_8078CE8(sprite); + if ((u32)(sprite->pos1.x + sprite->pos2.x + 16) > 272 + || sprite->pos1.y + sprite->pos2.y > 160 + || sprite->pos1.y + sprite->pos2.y < -16) + break; + } + + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.y = 0; + sprite->pos2.x = 0; + + for (i = 0; i < 8; i++) + sprite->data[i] = tempDataHolder[i]; + + sprite->data[5] = gBattleAnimArgs[5]; + sprite->data[6] = gBattleAnimArgs[6]; + sprite->callback = AnimWiggleParticleTowardsTarget; +} + +// Moves particles in a sine wave towards the target. +static void AnimWiggleParticleTowardsTarget(struct Sprite *sprite) +{ + sub_8078CE8(sprite); + if (sprite->data[0] == 0) + sprite->data[0] = 1; + + sprite->pos2.y += Sin(sprite->data[7], sprite->data[5]); + sprite->data[7] = (sprite->data[7] + sprite->data[6]) & 0xFF; + if (sprite->data[0] == 1) + { + if ((u32)(sprite->pos1.x + sprite->pos2.x + 16) > 272 + || sprite->pos1.y + sprite->pos2.y > 160 + || sprite->pos1.y + sprite->pos2.y < -16) + DestroyAnimSprite(sprite); + } +} + +// Animates the ice pilar wave used by Icy Wind. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: ??? unknown boolean +static void AnimWaveFromCenterOfTarget(struct Sprite *sprite) +{ + if (sprite->data[0] == 0) + { + if (gBattleAnimArgs[2] == 0) + { + sub_8078764(sprite, 0); + } + else + { + SetAverageBattlerPositions(gAnimBankTarget, 0, &sprite->pos1.x, &sprite->pos1.y); + + if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER) + gBattleAnimArgs[0] = -gBattleAnimArgs[0]; + + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + } + + sprite->data[0]++; + } + else + { + if (sprite->animEnded) + DestroyAnimSprite(sprite); + } +} + +// Animates the fog that swirls around the mon in Mist and Smog. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: change in y pixels per rotation +// arg 3: duration +// arg 4: animate on opponent? (boolean) +// arg 5: ??? unknown boolean +static void InitSwirlingFogAnim(struct Sprite *sprite) +{ + s16 tempVar; + u8 battler; + + if (gBattleAnimArgs[4] == 0) + { + if (gBattleAnimArgs[5] == 0) + { + InitAnimSpritePos(sprite, 0); + } + else + { + SetAverageBattlerPositions(gAnimBankAttacker, 0, &sprite->pos1.x, &sprite->pos1.y); + if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER) + sprite->pos1.x -= gBattleAnimArgs[0]; + else + sprite->pos1.x += gBattleAnimArgs[0]; + + sprite->pos1.y += gBattleAnimArgs[1]; + } + + battler = gAnimBankAttacker; + } + else + { + if (gBattleAnimArgs[5] == 0) + { + sub_8078764(sprite, 0); + } + else + { + SetAverageBattlerPositions(gAnimBankTarget, 0, &sprite->pos1.x, &sprite->pos1.y); + if (GetBattlerSide(gAnimBankTarget) != B_SIDE_PLAYER) + sprite->pos1.x -= gBattleAnimArgs[0]; + else + sprite->pos1.x += gBattleAnimArgs[0]; + + sprite->pos1.y += gBattleAnimArgs[1]; + } + + battler = gAnimBankTarget; + } + + sprite->data[7] = battler; + if (gBattleAnimArgs[5] == 0 || !IsDoubleBattle()) + tempVar = 0x20; + else + tempVar = 0x40; + + sprite->data[6] = tempVar; + if (GetBattlerSide(gAnimBankTarget) == B_SIDE_PLAYER) + sprite->pos1.y += 8; + + sprite->data[0] = gBattleAnimArgs[3]; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = sprite->pos1.x; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = sprite->pos1.y + gBattleAnimArgs[2]; + + InitAnimLinearTranslation(sprite); + + sprite->data[5] = 64; + sprite->callback = AnimSwirlingFogAnim; + AnimSwirlingFogAnim(sprite); +} + +// Animates swirling fog initialized by InitSwirlingFogAnim. +static void AnimSwirlingFogAnim(struct Sprite *sprite) +{ + if (!TranslateAnimLinear(sprite)) + { + sprite->pos2.x += Sin(sprite->data[5], sprite->data[6]); + sprite->pos2.y += Cos(sprite->data[5], -6); + + if ((u16)(sprite->data[5] - 64) <= 0x7F) + sprite->oam.priority = sub_8079ED4(sprite->data[7]); + else + sprite->oam.priority = sub_8079ED4(sprite->data[7]) + 1; + + sprite->data[5] = (sprite->data[5] + 3) & 0xFF; + } + else + { + DestroyAnimSprite(sprite); + } +} + +// Fades mons to black and places foggy overlay in Haze. +void AnimTask_Haze1(u8 taskId) +{ + struct Struct_sub_8078914 subStruct; + + REG_BLDCNT = 0x3F42; + REG_BLDALPHA = 0x1000; + REG_BG1CNT_BITFIELD.priority = 1; + REG_BG1CNT_BITFIELD.screenSize = 0; + + if (!IsContest()) + REG_BG1CNT_BITFIELD.charBaseBlock = 1; + + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + + sub_8078914(&subStruct); + DmaFill32Defvars(3, 0, subStruct.field_4, 0x1000); + DmaCopy16Defvars(3, &gWeatherFog1Tiles, subStruct.field_0, 0x800); + LZDecompressVram(&gBattleAnimFogTilemap, subStruct.field_4); + LoadPalette(&gUnknown_083970E8, subStruct.field_8 * 16, 32); + + if (IsContest()) + sub_80763FC(subStruct.field_8, (u16 *)subStruct.field_4, 0, 0); + + gTasks[taskId].func = AnimTask_Haze2; +} + +static void AnimTask_Haze2(u8 taskId) +{ + struct Struct_sub_8078914 subStruct; + + gBattle_BG1_X += 0xFFFF; + gBattle_BG1_Y += 0; + + switch (gTasks[taskId].data[12]) + { + case 0: + if (++gTasks[taskId].data[10] == 4) + { + gTasks[taskId].data[10] = 0; + gTasks[taskId].data[9]++; + gTasks[taskId].data[11] = gUnknown_083D9D6C[gTasks[taskId].data[9]]; + + REG_BLDALPHA = gTasks[taskId].data[11] | ((16 - gTasks[taskId].data[11]) << 8); + if (gTasks[taskId].data[11] == 9) + { + gTasks[taskId].data[12]++; + gTasks[taskId].data[11] = 0; + } + } + break; + case 1: + if (++gTasks[taskId].data[11] == 0x51) + { + gTasks[taskId].data[11] = 9; + gTasks[taskId].data[12]++; + } + break; + case 2: + if (++gTasks[taskId].data[10] == 4) + { + gTasks[taskId].data[10] = 0; + gTasks[taskId].data[11]--; + + REG_BLDALPHA = gTasks[taskId].data[11] | ((16 - gTasks[taskId].data[11]) << 8); + if (gTasks[taskId].data[11] == 0) + { + gTasks[taskId].data[12]++; + gTasks[taskId].data[11] = 0; + } + } + break; + case 3: + sub_8078914(&subStruct); + DmaFill32Large(3, 0, subStruct.field_0, 0x2000, 0x1000); + DmaClear32(3, subStruct.field_4, 0x800); + + if (!IsContest()) + REG_BG1CNT_BITFIELD.charBaseBlock = 0; + + gTasks[taskId].data[12]++; + // fall through + case 4: + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + REG_BG1CNT_BITFIELD.priority = 1; + DestroyAnimVisualTask(taskId); + } +} + +// Throws the ball in Mist Ball. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: targey x offset +// arg 3: target y offset +// arg 4: duration +// arg 5: ??? unknown (seems to vibrate target mon somehow) +static void AnimThrowMistBall(struct Sprite *sprite) +{ + sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2); + sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3); + sprite->callback = TranslateAnimSpriteToTargetMonLocation; +} + +// Displays misty background in Mist Ball. +void AnimTask_LoadMistTiles(u8 taskId) +{ + struct Struct_sub_8078914 subStruct; + + REG_BLDCNT = 0x3F42; + REG_BLDALPHA = 0x1000; + REG_BG1CNT_BITFIELD.priority = 1; + REG_BG1CNT_BITFIELD.screenSize = 0; + + if (!IsContest()) + REG_BG1CNT_BITFIELD.charBaseBlock = 1; + + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + + sub_8078914(&subStruct); + DmaFill32Defvars(3, 0, subStruct.field_4, 0x1000); + DmaCopy16Defvars(3, &gWeatherFog1Tiles, subStruct.field_0, 0x800); + LZDecompressVram(&gBattleAnimFogTilemap, subStruct.field_4); + LoadPalette(&gUnknown_083970E8, subStruct.field_8 * 16, 32); + + if (IsContest()) + sub_80763FC(subStruct.field_8, (u16 *)subStruct.field_4, 0, 0); + + gTasks[taskId].data[15] = -1; + gTasks[taskId].func = AnimTask_OverlayFogTiles; +} + +static void AnimTask_OverlayFogTiles(u8 taskId) +{ + struct Struct_sub_8078914 subStruct; + + gBattle_BG1_X += gTasks[taskId].data[15]; + gBattle_BG1_Y += 0; + + switch (gTasks[taskId].data[12]) + { + case 0: + gTasks[taskId].data[9] += 1; + gTasks[taskId].data[11] = gUnknown_083D9D98[gTasks[taskId].data[9]]; + REG_BLDALPHA = gTasks[taskId].data[11] | ((17 - gTasks[taskId].data[11]) << 8); + if (gTasks[taskId].data[11] == 5) + { + gTasks[taskId].data[12]++; + gTasks[taskId].data[11] = 0; + } + break; + case 1: + if (++gTasks[taskId].data[11] == 0x51) + { + gTasks[taskId].data[11] = 5; + gTasks[taskId].data[12]++; + } + break; + case 2: + if (++gTasks[taskId].data[10] == 4) + { + gTasks[taskId].data[10] = 0; + gTasks[taskId].data[11] -= 1; + REG_BLDALPHA = gTasks[taskId].data[11] | ((16 - gTasks[taskId].data[11]) << 8); + if (gTasks[taskId].data[11] == 0) + { + gTasks[taskId].data[12]++; + gTasks[taskId].data[11] = 0; + } + } + break; + case 3: + sub_8078914(&subStruct); + DmaFill32Large(3, 0, subStruct.field_0, 0x2000, 0x1000); + DmaClear32(3, subStruct.field_4, 0x800); + + if (!IsContest()) + REG_BG1CNT_BITFIELD.charBaseBlock = 0; + + gTasks[taskId].data[12]++; + // fall through + case 4: + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + REG_BG1CNT_BITFIELD.priority = 1; + DestroyAnimVisualTask(taskId); + } +} + +// Initializes gas clouds in the Poison Gas animation. +// arg 0: duration +// arg 1: ? target x offset +// arg 2: ? target y offset +// arg 3: ? swirl start x +// arg 4: ? swirl start y +// arg 5: ??? unknown +// arg 6: ??? unknown +// arg 7: ??? unknown boolean +static void InitPoisonGasCloudAnim(struct Sprite *sprite) +{ + sprite->data[0] = gBattleAnimArgs[0]; + + if (GetBattlerSpriteCoord(gAnimBankAttacker, 2) < GetBattlerSpriteCoord(gAnimBankTarget, 2)) + sprite->data[7] = 0x8000; + + if (!(gBanksBySide[gAnimBankTarget] & 1)) + { + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + gBattleAnimArgs[3] = -gBattleAnimArgs[3]; + + if ((sprite->data[7] & 0x8000) && !(gBanksBySide[gAnimBankAttacker] & 1)) + sprite->subpriority = gSprites[GetAnimBattlerSpriteId(1)].subpriority + 1; + + sprite->data[6] = 1; + } + + sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2); + sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3); + if (gBattleAnimArgs[7]) + { + sprite->data[1] = sprite->pos1.x + gBattleAnimArgs[1]; + sprite->data[2] = GetBattlerSpriteCoord(gAnimBankTarget, 2) + gBattleAnimArgs[3]; + sprite->data[3] = sprite->pos1.y + gBattleAnimArgs[2]; + sprite->data[4] = GetBattlerSpriteCoord(gAnimBankTarget, 3) + gBattleAnimArgs[4]; + sprite->data[7] |= sub_8079ED4(gAnimBankTarget) << 8; + } + else + { + sprite->data[1] = sprite->pos1.x + gBattleAnimArgs[1]; + sprite->data[2] = GetBattlerSpriteCoord(gAnimBankTarget, 0) + gBattleAnimArgs[3]; + sprite->data[3] = sprite->pos1.y + gBattleAnimArgs[2]; + sprite->data[4] = GetBattlerSpriteCoord(gAnimBankTarget, 1) + gBattleAnimArgs[4]; + sprite->data[7] |= sub_8079ED4(gAnimBankTarget) << 8; + } + + if (IsContest()) + { + sprite->data[6] = 1; + sprite->subpriority = 0x80; + } + + InitAnimLinearTranslation(sprite); + sprite->callback = sub_80D8874; +} + +// Animates the gas clouds towards the target mon in Poison Gas. +// functionally correct, but there appears to be an unused local variable causing +// switch case 1 to not match +#ifdef NONMATCHING +static void sub_80D8874(struct Sprite *sprite) +{ + int value; + register s16 value2 asm("r5"); + + switch (sprite->data[7] & 0xFF) + { + case 0: + TranslateAnimLinear(sprite); + value = gSineTable[sprite->data[5]]; + sprite->pos2.x += value >> 4; + if (sprite->data[6]) + sprite->data[5] = (sprite->data[5] - 8) & 0xFF; + else + sprite->data[5] = (sprite->data[5] + 8) & 0xFF; + + if (sprite->data[0] <= 0) + { + value2 = 80; + sprite->data[0] = value2; + sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankTarget, 0); + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = sprite->pos1.x; + sprite->pos1.y += sprite->pos2.y; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = sprite->pos1.y + 29; + sprite->data[7]++; + if (gMain.inBattle && gBanksBySide[gAnimBankTarget] & 1) + sprite->data[5] = 204; + else + sprite->data[5] = value2; + + sprite->pos2.y = 0; + value = gSineTable[sprite->data[5]]; + sprite->pos2.x = value >> 3; + sprite->data[5] = (sprite->data[5] + 2) & 0xFF; + InitAnimLinearTranslation(sprite); + } + break; + case 1: + TranslateAnimLinear(sprite); + value = gSineTable[sprite->data[5]]; + sprite->pos2.x += value >> 3; + sprite->pos2.y += (gSineTable[sprite->data[5] + 0x40] * -3) >> 8; + if (gMain.inBattle) + { + u16 var0 = sprite->data[5] - 0x40; + if (var0 <= 0x7F) + sprite->oam.priority = sprite->data[7] >> 8; + else + sprite->oam.priority = (sprite->data[7] >> 8) + 1; + + sprite->data[5] = (sprite->data[5] + 4) & 0xFF; + } + else + { + u16 var0 = sprite->data[5] - 0x40; + if (var0 <= 0x7F) + sprite->subpriority = 128; + else + sprite->subpriority = 140; + + sprite->data[5] = (sprite->data[5] - 4) & 0xFF; + } + + if (sprite->data[0] <= 0) + { + asm("mov r2, #0"); // unused local variable? + sprite->data[0] = 0x300; + sprite->data[1] = sprite->pos1.x += sprite->pos2.x; + sprite->data[3] = sprite->pos1.y += sprite->pos2.y; + sprite->data[4] = sprite->pos1.y + 4; + if (gMain.inBattle && gBanksBySide[gAnimBankTarget] & 1) + sprite->data[2] = 0x100; + else + sprite->data[2] = -0x10; + + sprite->data[7]++; + sprite->pos2.x = sprite->pos2.y = 0; + sub_8078BD4(sprite); + } + break; + case 2: + if (TranslateAnimLinear(sprite)) + { + if (sprite->oam.affineMode & 1) + { + FreeOamMatrix(sprite->oam.matrixNum); + sprite->oam.affineMode = ST_OAM_AFFINE_OFF; + } + + DestroySprite(sprite); + gAnimVisualTaskCount--; + } + break; + } +} +#else +NAKED static void sub_80D8874(struct Sprite *sprite) +{ + asm_unified("\tpush {r4-r6,lr}\n" + "\tadds r4, r0, 0\n" + "\tldrh r0, [r4, 0x3C]\n" + "\tmovs r5, 0xFF\n" + "\tmovs r1, 0xFF\n" + "\tands r1, r0\n" + "\tcmp r1, 0x1\n" + "\tbeq _080D8968\n" + "\tcmp r1, 0x1\n" + "\tbgt _080D888E\n" + "\tcmp r1, 0\n" + "\tbeq _080D8896\n" + "\tb _080D8AD0\n" + "_080D888E:\n" + "\tcmp r1, 0x2\n" + "\tbne _080D8894\n" + "\tb _080D8A94\n" + "_080D8894:\n" + "\tb _080D8AD0\n" + "_080D8896:\n" + "\tadds r0, r4, 0\n" + "\tbl TranslateAnimLinear\n" + "\tldr r1, _080D88C0 @ =gSineTable\n" + "\tmovs r2, 0x38\n" + "\tldrsh r0, [r4, r2]\n" + "\tlsls r0, 1\n" + "\tadds r0, r1\n" + "\tmovs r1, 0\n" + "\tldrsh r0, [r0, r1]\n" + "\tasrs r0, 4\n" + "\tldrh r2, [r4, 0x24]\n" + "\tadds r0, r2\n" + "\tstrh r0, [r4, 0x24]\n" + "\tmovs r1, 0x3A\n" + "\tldrsh r0, [r4, r1]\n" + "\tcmp r0, 0\n" + "\tbeq _080D88C4\n" + "\tldrh r0, [r4, 0x38]\n" + "\tsubs r0, 0x8\n" + "\tb _080D88C8\n" + "\t.align 2, 0\n" + "_080D88C0: .4byte gSineTable\n" + "_080D88C4:\n" + "\tldrh r0, [r4, 0x38]\n" + "\tadds r0, 0x8\n" + "_080D88C8:\n" + "\tands r0, r5\n" + "\tstrh r0, [r4, 0x38]\n" + "\tmovs r2, 0x2E\n" + "\tldrsh r0, [r4, r2]\n" + "\tcmp r0, 0\n" + "\tble _080D88D6\n" + "\tb _080D8AD0\n" + "_080D88D6:\n" + "\tmovs r5, 0x50\n" + "\tstrh r5, [r4, 0x2E]\n" + "\tldr r6, _080D8928 @ =gAnimBankTarget\n" + "\tldrb r0, [r6]\n" + "\tmovs r1, 0\n" + "\tbl GetBattlerSpriteCoord\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tstrh r0, [r4, 0x20]\n" + "\tstrh r0, [r4, 0x30]\n" + "\tstrh r0, [r4, 0x32]\n" + "\tldrh r0, [r4, 0x26]\n" + "\tldrh r1, [r4, 0x22]\n" + "\tadds r0, r1\n" + "\tstrh r0, [r4, 0x22]\n" + "\tstrh r0, [r4, 0x34]\n" + "\tadds r0, 0x1D\n" + "\tstrh r0, [r4, 0x36]\n" + "\tldrh r0, [r4, 0x3C]\n" + "\tadds r0, 0x1\n" + "\tstrh r0, [r4, 0x3C]\n" + "\tldr r0, _080D892C @ =gMain\n" + "\tldr r2, _080D8930 @ =0x0000043d\n" + "\tadds r0, r2\n" + "\tldrb r1, [r0]\n" + "\tmovs r0, 0x2\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbeq _080D8938\n" + "\tldr r1, _080D8934 @ =gBanksBySide\n" + "\tldrb r0, [r6]\n" + "\tadds r0, r1\n" + "\tldrb r1, [r0]\n" + "\tmovs r0, 0x1\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbeq _080D8938\n" + "\tmovs r0, 0xCC\n" + "\tstrh r0, [r4, 0x38]\n" + "\tb _080D893A\n" + "\t.align 2, 0\n" + "_080D8928: .4byte gAnimBankTarget\n" + "_080D892C: .4byte gMain\n" + "_080D8930: .4byte 0x0000043d\n" + "_080D8934: .4byte gBanksBySide\n" + "_080D8938:\n" + "\tstrh r5, [r4, 0x38]\n" + "_080D893A:\n" + "\tmovs r0, 0\n" + "\tstrh r0, [r4, 0x26]\n" + "\tldr r1, _080D8964 @ =gSineTable\n" + "\tmovs r2, 0x38\n" + "\tldrsh r0, [r4, r2]\n" + "\tlsls r0, 1\n" + "\tadds r0, r1\n" + "\tmovs r1, 0\n" + "\tldrsh r0, [r0, r1]\n" + "\tasrs r0, 3\n" + "\tstrh r0, [r4, 0x24]\n" + "\tldrh r0, [r4, 0x38]\n" + "\tadds r0, 0x2\n" + "\tmovs r1, 0xFF\n" + "\tands r0, r1\n" + "\tstrh r0, [r4, 0x38]\n" + "\tadds r0, r4, 0\n" + "\tbl InitAnimLinearTranslation\n" + "\tb _080D8AD0\n" + "\t.align 2, 0\n" + "_080D8964: .4byte gSineTable\n" + "_080D8968:\n" + "\tadds r0, r4, 0\n" + "\tbl TranslateAnimLinear\n" + "\tldr r1, _080D89C8 @ =gSineTable\n" + "\tmovs r2, 0x38\n" + "\tldrsh r0, [r4, r2]\n" + "\tlsls r0, 1\n" + "\tadds r0, r1\n" + "\tmovs r2, 0\n" + "\tldrsh r0, [r0, r2]\n" + "\tasrs r0, 3\n" + "\tldrh r2, [r4, 0x24]\n" + "\tadds r0, r2\n" + "\tstrh r0, [r4, 0x24]\n" + "\tmovs r2, 0x38\n" + "\tldrsh r0, [r4, r2]\n" + "\tadds r0, 0x40\n" + "\tlsls r0, 1\n" + "\tadds r0, r1\n" + "\tmovs r2, 0\n" + "\tldrsh r1, [r0, r2]\n" + "\tlsls r0, r1, 1\n" + "\tadds r0, r1\n" + "\tnegs r0, r0\n" + "\tasrs r0, 8\n" + "\tldrh r1, [r4, 0x26]\n" + "\tadds r0, r1\n" + "\tstrh r0, [r4, 0x26]\n" + "\tldr r0, _080D89CC @ =gMain\n" + "\tldr r2, _080D89D0 @ =0x0000043d\n" + "\tadds r0, r2\n" + "\tldrb r1, [r0]\n" + "\tmovs r0, 0x2\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbeq _080D89F2\n" + "\tldrh r1, [r4, 0x38]\n" + "\tadds r0, r1, 0\n" + "\tsubs r0, 0x40\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tadds r3, r1, 0\n" + "\tcmp r0, 0x7F\n" + "\tbhi _080D89D4\n" + "\tldrh r1, [r4, 0x3C]\n" + "\tlsls r1, 16\n" + "\tasrs r1, 24\n" + "\tb _080D89DC\n" + "\t.align 2, 0\n" + "_080D89C8: .4byte gSineTable\n" + "_080D89CC: .4byte gMain\n" + "_080D89D0: .4byte 0x0000043d\n" + "_080D89D4:\n" + "\tldrh r1, [r4, 0x3C]\n" + "\tlsls r1, 16\n" + "\tasrs r1, 24\n" + "\tadds r1, 0x1\n" + "_080D89DC:\n" + "\tmovs r0, 0x3\n" + "\tands r1, r0\n" + "\tlsls r1, 2\n" + "\tldrb r2, [r4, 0x5]\n" + "\tmovs r0, 0xD\n" + "\tnegs r0, r0\n" + "\tands r0, r2\n" + "\torrs r0, r1\n" + "\tstrb r0, [r4, 0x5]\n" + "\tadds r0, r3, 0x4\n" + "\tb _080D8A12\n" + "_080D89F2:\n" + "\tldrh r0, [r4, 0x38]\n" + "\tsubs r0, 0x40\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tcmp r0, 0x7F\n" + "\tbhi _080D8A06\n" + "\tadds r1, r4, 0\n" + "\tadds r1, 0x43\n" + "\tmovs r0, 0x80\n" + "\tb _080D8A0C\n" + "_080D8A06:\n" + "\tadds r1, r4, 0\n" + "\tadds r1, 0x43\n" + "\tmovs r0, 0x8C\n" + "_080D8A0C:\n" + "\tstrb r0, [r1]\n" + "\tldrh r0, [r4, 0x38]\n" + "\tsubs r0, 0x4\n" + "_080D8A12:\n" + "\tmovs r1, 0xFF\n" + "\tands r0, r1\n" + "\tstrh r0, [r4, 0x38]\n" + "\tmovs r1, 0x2E\n" + "\tldrsh r0, [r4, r1]\n" + "\tcmp r0, 0\n" + "\tbgt _080D8AD0\n" + "\tmovs r2, 0\n" + "\tmovs r0, 0xC0\n" + "\tlsls r0, 2\n" + "\tstrh r0, [r4, 0x2E]\n" + "\tldrh r0, [r4, 0x24]\n" + "\tldrh r1, [r4, 0x20]\n" + "\tadds r0, r1\n" + "\tstrh r0, [r4, 0x20]\n" + "\tstrh r0, [r4, 0x30]\n" + "\tldrh r0, [r4, 0x26]\n" + "\tldrh r1, [r4, 0x22]\n" + "\tadds r0, r1\n" + "\tstrh r0, [r4, 0x22]\n" + "\tstrh r0, [r4, 0x34]\n" + "\tadds r0, 0x4\n" + "\tstrh r0, [r4, 0x36]\n" + "\tldr r0, _080D8A68 @ =gMain\n" + "\tldr r1, _080D8A6C @ =0x0000043d\n" + "\tadds r0, r1\n" + "\tldrb r1, [r0]\n" + "\tmovs r0, 0x2\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbeq _080D8A78\n" + "\tldr r1, _080D8A70 @ =gBanksBySide\n" + "\tldr r0, _080D8A74 @ =gAnimBankTarget\n" + "\tldrb r0, [r0]\n" + "\tadds r0, r1\n" + "\tldrb r1, [r0]\n" + "\tmovs r0, 0x1\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbeq _080D8A78\n" + "\tmovs r0, 0x80\n" + "\tlsls r0, 1\n" + "\tb _080D8A7A\n" + "\t.align 2, 0\n" + "_080D8A68: .4byte gMain\n" + "_080D8A6C: .4byte 0x0000043d\n" + "_080D8A70: .4byte gBanksBySide\n" + "_080D8A74: .4byte gAnimBankTarget\n" + "_080D8A78:\n" + "\tldr r0, _080D8A90 @ =0x0000fff0\n" + "_080D8A7A:\n" + "\tstrh r0, [r4, 0x32]\n" + "\tldrh r0, [r4, 0x3C]\n" + "\tadds r0, 0x1\n" + "\tmovs r1, 0\n" + "\tstrh r0, [r4, 0x3C]\n" + "\tstrh r1, [r4, 0x26]\n" + "\tstrh r1, [r4, 0x24]\n" + "\tadds r0, r4, 0\n" + "\tbl sub_8078BD4\n" + "\tb _080D8AD0\n" + "\t.align 2, 0\n" + "_080D8A90: .4byte 0x0000fff0\n" + "_080D8A94:\n" + "\tadds r0, r4, 0\n" + "\tbl TranslateAnimLinear\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbeq _080D8AD0\n" + "\tldrb r0, [r4, 0x1]\n" + "\tlsls r0, 30\n" + "\tlsrs r0, 30\n" + "\tmovs r1, 0x1\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbeq _080D8AC2\n" + "\tldrb r0, [r4, 0x3]\n" + "\tlsls r0, 26\n" + "\tlsrs r0, 27\n" + "\tbl FreeOamMatrix\n" + "\tldrb r1, [r4, 0x1]\n" + "\tmovs r0, 0x4\n" + "\tnegs r0, r0\n" + "\tands r0, r1\n" + "\tstrb r0, [r4, 0x1]\n" + "_080D8AC2:\n" + "\tadds r0, r4, 0\n" + "\tbl DestroySprite\n" + "\tldr r1, _080D8AD8 @ =gAnimVisualTaskCount\n" + "\tldrb r0, [r1]\n" + "\tsubs r0, 0x1\n" + "\tstrb r0, [r1]\n" + "_080D8AD0:\n" + "\tpop {r4-r6}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_080D8AD8: .4byte gAnimVisualTaskCount"); +} +#endif // NONMATCHING + +// Creates Hail. +void AnimTask_Hail1(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + task->func = AnimTask_Hail2; +} + +static void AnimTask_Hail2(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + switch (task->data[0]) + { + case 0: + if (++task->data[4] > 2) + { + task->data[4] = 0; + task->data[5] = 0; + task->data[2] = 0; + task->data[0]++; + } + break; + case 1: + if (task->data[5] == 0) + { + if (sub_80D8BA8(task->data[3], task->data[2], taskId, 1)) + task->data[1]++; + + if (++task->data[2] == 3) + { + if (++task->data[3] == 10) + task->data[0]++; + else + task->data[0]--; + } + else + { + task->data[5] = 1; + } + + } + else + { + task->data[5]--; + } + break; + case 2: + if (task->data[1] == 0) + DestroyAnimVisualTask(taskId); + break; + } +} + + +/* +// Something to do with Hail. +// possibly equivalent, possibly not +bool8 sub_80D8BA8(u8 a1, u8 a2, u8 a3, u8 a4)//(u8 spriteId, u8 taskId, u8 a3)//(u8 taskId) +{ + // + //struct Task *task = &gTasks[a2]; + //u16 i, j; + //task->data[3]++; + //u8 r5bank = ; + + //const struct SpriteTemplate *spriteTemplate; + u8 spriteId; + + s16 r6, r7; + + u32 tempA, tempB; // u32? s16? u16? u8? int? + + //u8 r6, r7; + + tempA = a3 + 0; + tempB = 0; + + // is that gunknown a tempvar? + + if (gUnknown_083D9DC4[a1][3] != 2 + || IsAnimBankSpriteVisible(GetBattlerAtPosition(gUnknown_083D9DC4[a1][2]))) + { + //return TRUE; + tempB = 1; + + r7 = GetBattlerSpriteCoord(GetBattlerAtPosition(gUnknown_083D9DC4[a1][2]), 2); + r6 = GetBattlerSpriteCoord(GetBattlerAtPosition(gUnknown_083D9DC4[a1][2]), 3); + + switch (gUnknown_083D9DC4[a1][3]) + { + case 0: + // + r7 -= sub_807A100(GetBattlerAtPosition(gUnknown_083D9DC4[a1][2]), 1) / 6; + r6 -= sub_807A100(GetBattlerAtPosition(gUnknown_083D9DC4[a1][2]), 0) / 6; + break; + case 1: + // + r7 += sub_807A100(GetBattlerAtPosition(gUnknown_083D9DC4[a1][2]), 1) / 6; + r6 += sub_807A100(GetBattlerAtPosition(gUnknown_083D9DC4[a1][2]), 0) / 6; + } + } + + else + { + // _94 + r7 = gUnknown_083D9DC4[a1][0]; + r6 = gUnknown_083D9DC4[a1][1]; + } + + spriteId = CreateSprite(&HailSpriteTemplate, r7 - r6, -0x8, 0x12); + + if (spriteId != 0x40) + { + // + StartSpriteAffineAnim(&gSprites[spriteId], a2); + + gSprites[spriteId].data[0] = tempB; + gSprites[spriteId].data[3] = r7; + gSprites[spriteId].data[4] = r6; + + gSprites[spriteId].data[5] = a2; + gSprites[spriteId].data[6] = tempA; + gSprites[spriteId].data[7] = a4; + + return TRUE; + } + + return FALSE; + +} +//*/ + +//* +NAKED bool8 sub_80D8BA8(u8 a1, u8 a2, u8 a3, u8 a4) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tmov r7, r10\n" + "\tmov r6, r9\n" + "\tmov r5, r8\n" + "\tpush {r5-r7}\n" + "\tsub sp, 0x8\n" + "\tlsls r0, 24\n" + "\tlsls r1, 24\n" + "\tlsrs r1, 24\n" + "\tmov r9, r1\n" + "\tlsls r2, 24\n" + "\tlsrs r2, 24\n" + "\tstr r2, [sp]\n" + "\tlsls r3, 24\n" + "\tlsrs r3, 24\n" + "\tmov r10, r3\n" + "\tmovs r1, 0\n" + "\tstr r1, [sp, 0x4]\n" + "\tldr r1, _080D8C20 @ =gUnknown_083D9DC4\n" + "\tlsrs r0, 22\n" + "\tadds r4, r0, r1\n" + "\tldrb r0, [r4, 0x3]\n" + "\tlsls r0, 24\n" + "\tasrs r0, 28\n" + "\tmov r8, r0\n" + "\tcmp r0, 0x2\n" + "\tbeq _080D8C94\n" + "\tldrh r0, [r4, 0x2]\n" + "\tlsls r0, 20\n" + "\tlsrs r0, 24\n" + "\tbl GetBattlerAtPosition\n" + "\tlsls r0, 24\n" + "\tlsrs r5, r0, 24\n" + "\tadds r0, r5, 0\n" + "\tbl IsAnimBankSpriteVisible\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbeq _080D8C94\n" + "\tmovs r0, 0x1\n" + "\tstr r0, [sp, 0x4]\n" + "\tadds r0, r5, 0\n" + "\tmovs r1, 0x2\n" + "\tbl GetBattlerSpriteCoord\n" + "\tlsls r0, 24\n" + "\tlsrs r7, r0, 24\n" + "\tadds r0, r5, 0\n" + "\tmovs r1, 0x3\n" + "\tbl GetBattlerSpriteCoord\n" + "\tlsls r0, 24\n" + "\tlsrs r6, r0, 24\n" + "\tmov r1, r8\n" + "\tcmp r1, 0\n" + "\tbeq _080D8C24\n" + "\tcmp r1, 0x1\n" + "\tbeq _080D8C5A\n" + "\tb _080D8CA6\n" + "\t.align 2, 0\n" + "_080D8C20: .4byte gUnknown_083D9DC4\n" + "_080D8C24:\n" + "\tadds r0, r5, 0\n" + "\tmovs r1, 0x1\n" + "\tbl sub_807A100\n" + "\tlsls r0, 16\n" + "\tasrs r0, 16\n" + "\tmovs r1, 0x6\n" + "\tbl __divsi3\n" + "\tlsls r1, r7, 16\n" + "\tasrs r1, 16\n" + "\tsubs r1, r0\n" + "\tlsls r1, 16\n" + "\tlsrs r7, r1, 16\n" + "\tadds r0, r5, 0\n" + "\tmovs r1, 0\n" + "\tbl sub_807A100\n" + "\tlsls r0, 16\n" + "\tasrs r0, 16\n" + "\tmovs r1, 0x6\n" + "\tbl __divsi3\n" + "\tlsls r1, r6, 16\n" + "\tasrs r1, 16\n" + "\tsubs r1, r0\n" + "\tb _080D8C8E\n" + "_080D8C5A:\n" + "\tadds r0, r5, 0\n" + "\tmovs r1, 0x1\n" + "\tbl sub_807A100\n" + "\tlsls r0, 16\n" + "\tasrs r0, 16\n" + "\tmovs r1, 0x6\n" + "\tbl __divsi3\n" + "\tlsls r1, r7, 16\n" + "\tasrs r1, 16\n" + "\tadds r1, r0\n" + "\tlsls r1, 16\n" + "\tlsrs r7, r1, 16\n" + "\tadds r0, r5, 0\n" + "\tmovs r1, 0\n" + "\tbl sub_807A100\n" + "\tlsls r0, 16\n" + "\tasrs r0, 16\n" + "\tmovs r1, 0x6\n" + "\tbl __divsi3\n" + "\tlsls r1, r6, 16\n" + "\tasrs r1, 16\n" + "\tadds r1, r0\n" + "_080D8C8E:\n" + "\tlsls r1, 16\n" + "\tlsrs r6, r1, 16\n" + "\tb _080D8CA6\n" + "_080D8C94:\n" + "\tldrh r0, [r4]\n" + "\tlsls r0, 22\n" + "\tasrs r0, 6\n" + "\tlsrs r7, r0, 16\n" + "\tldr r0, [r4]\n" + "\tlsls r0, 12\n" + "\tasrs r0, 22\n" + "\tlsls r0, 16\n" + "\tlsrs r6, r0, 16\n" + "_080D8CA6:\n" + "\tlsls r0, r6, 16\n" + "\tasrs r0, 16\n" + "\tadds r0, 0x8\n" + "\tlsrs r1, r0, 31\n" + "\tadds r0, r1\n" + "\tasrs r0, 1\n" + "\tlsls r1, r7, 16\n" + "\tasrs r1, 16\n" + "\tsubs r1, r0\n" + "\tldr r0, _080D8D00 @ =HailSpriteTemplate\n" + "\tlsls r1, 16\n" + "\tasrs r1, 16\n" + "\tmovs r2, 0x8\n" + "\tnegs r2, r2\n" + "\tmovs r3, 0x12\n" + "\tbl CreateSprite\n" + "\tlsls r0, 24\n" + "\tlsrs r5, r0, 24\n" + "\tcmp r5, 0x40\n" + "\tbeq _080D8D08\n" + "\tlsls r4, r5, 4\n" + "\tadds r4, r5\n" + "\tlsls r4, 2\n" + "\tldr r0, _080D8D04 @ =gSprites\n" + "\tadds r4, r0\n" + "\tadds r0, r4, 0\n" + "\tmov r1, r9\n" + "\tbl StartSpriteAffineAnim\n" + "\tmov r0, sp\n" + "\tldrh r0, [r0, 0x4]\n" + "\tstrh r0, [r4, 0x2E]\n" + "\tstrh r7, [r4, 0x34]\n" + "\tstrh r6, [r4, 0x36]\n" + "\tmov r1, r9\n" + "\tstrh r1, [r4, 0x38]\n" + "\tmov r0, sp\n" + "\tldrh r0, [r0]\n" + "\tstrh r0, [r4, 0x3A]\n" + "\tmov r1, r10\n" + "\tstrh r1, [r4, 0x3C]\n" + "\tmovs r0, 0x1\n" + "\tb _080D8D0A\n" + "\t.align 2, 0\n" + "_080D8D00: .4byte gHailSpriteTemplate\n" + "_080D8D04: .4byte gSprites\n" + "_080D8D08:\n" + "\tmovs r0, 0\n" + "_080D8D0A:\n" + "\tadd sp, 0x8\n" + "\tpop {r3-r5}\n" + "\tmov r8, r3\n" + "\tmov r9, r4\n" + "\tmov r10, r5\n" + "\tpop {r4-r7}\n" + "\tpop {r1}\n" + "\tbx r1"); +} +//*/ + +static void AnimHailBegin(struct Sprite *sprite) +{ + u8 spriteId; + + sprite->pos1.x += 4; + sprite->pos1.y += 8; + + if (sprite->pos1.x < sprite->data[3] && sprite->pos1.y < sprite->data[4]) + return; + + if (sprite->data[0] == 1 && sprite->data[5] == 0) + { + spriteId = CreateSprite(&gLargeIceEffectParticleSpriteTemplate, + sprite->data[3], sprite->data[4], sprite->subpriority); + + sprite->data[0] = spriteId; + if (spriteId != 64) + { + gSprites[sprite->data[0]].callback = AnimHailContinue; + gSprites[sprite->data[0]].data[6] = sprite->data[6]; + gSprites[sprite->data[0]].data[7] = sprite->data[7]; + } + + FreeOamMatrix(sprite->oam.matrixNum); + DestroySprite(sprite); + } + else + { + gTasks[sprite->data[6]].data[sprite->data[7]]--; + FreeOamMatrix(sprite->oam.matrixNum); + DestroySprite(sprite); + } +} + +static void AnimHailContinue(struct Sprite *sprite) +{ + if (++sprite->data[0] == 20) + { + gTasks[sprite->data[6]].data[sprite->data[7]]--; + FreeOamMatrix(sprite->oam.matrixNum); + DestroySprite(sprite); + } +} + +// Initializes the animation for Ice Ball. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: target x offset +// arg 3: target y offset +// arg 4: duration +// arg 5: arc height (negative) +static void InitIceBallAnim(struct Sprite *sprite) +{ + u8 animNum = gAnimDisableStructPtr->rolloutTimer2 - gAnimDisableStructPtr->rolloutTimer1 - 1; + + if (animNum > 4) + animNum = 4; + + StartSpriteAffineAnim(sprite, animNum); + InitAnimSpritePos(sprite, 1); + + sprite->data[0] = gBattleAnimArgs[4]; + + if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER) + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + + sprite->data[2] = GetBattlerSpriteCoord(gAnimBankTarget, 2) + gBattleAnimArgs[2]; + sprite->data[4] = GetBattlerSpriteCoord(gAnimBankTarget, 3) + gBattleAnimArgs[3]; + sprite->data[5] = gBattleAnimArgs[5]; + + InitAnimArcTranslation(sprite); + + sprite->callback = AnimThrowIceBall; +} + +// Throws the ball of ice in Ice Ball. +static void AnimThrowIceBall(struct Sprite *sprite) +{ + if (!TranslateAnimArc(sprite)) + return; + + StartSpriteAnim(sprite, 1); + sprite->callback = sub_8078600; + StoreSpriteCallbackInData(sprite, DestroyAnimSprite); +} + +// Initializes the particles that scatter at the end of the Ice Ball animation. +static void InitIceBallParticle(struct Sprite *sprite) +{ + s16 randA, randB; + + sprite->oam.tileNum += 8; + sub_8078764(sprite, 1); + + randA = (Random() & 0xFF) + 256; + randB = Random() & 0x1FF; + + if (randB > 0xFF) + randB = 256 - randB; + + sprite->data[1] = randA; + sprite->data[2] = randB; + sprite->callback = AnimIceBallParticle; +} + +// Animates the particles created by InitIceBallParticle. +static void AnimIceBallParticle(struct Sprite *sprite) +{ + sprite->data[3] += sprite->data[1]; + sprite->data[4] += sprite->data[2]; + + if (sprite->data[1] & 1) + sprite->pos2.x = -(sprite->data[3] >> 8); + else + sprite->pos2.x = sprite->data[3] >> 8; + + sprite->pos2.y = sprite->data[4] >> 8; + + if (++sprite->data[0] == 21) + DestroyAnimSprite(sprite); +} + +// Counter for Ice Ball. +void AnimTask_CountIceBallThrows(u8 taskId) +{ + u8 arg = gBattleAnimArgs[0]; + + gBattleAnimArgs[arg] = gAnimDisableStructPtr->rolloutTimer2 - gAnimDisableStructPtr->rolloutTimer1 - 1; + DestroyAnimVisualTask(taskId); +} |