diff options
author | U-Maria-PC\Maria <throwawaygolem@gmail.com> | 2017-08-06 16:44:22 -0400 |
---|---|---|
committer | U-Maria-PC\Maria <throwawaygolem@gmail.com> | 2017-08-06 16:44:22 -0400 |
commit | 6c6afe1c8a58457a0caa0b1a5532622b4249cebf (patch) | |
tree | ca05243b30f56ec911fdc9c984b72928b7d17ceb | |
parent | 02384ce88a28fd1e55a0d1d55fc1468e884560f3 (diff) |
decompiled up to sub_80cbc8c
-rw-r--r-- | asm/battle_anim_80CA710.s | 647 | ||||
-rwxr-xr-x | src/battle_anim_80CA710.c | 502 |
2 files changed, 502 insertions, 647 deletions
diff --git a/asm/battle_anim_80CA710.s b/asm/battle_anim_80CA710.s index ddfce03a8..3b42023eb 100644 --- a/asm/battle_anim_80CA710.s +++ b/asm/battle_anim_80CA710.s @@ -6,655 +6,8 @@ .text - thumb_func_start sub_80CB814 -sub_80CB814: @ 80CB814 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - mov r8, r0 - ldrh r0, [r0, 0x38] - lsrs r1, r0, 8 - mov r10, r1 - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - mov r1, r8 - ldrh r0, [r1, 0x3A] - lsrs r2, r0, 8 - lsls r0, 24 - lsrs r4, r0, 24 - ldrh r1, [r1, 0x3C] - lsls r0, r1, 16 - asrs r0, 24 - lsls r0, 16 - lsrs r6, r0, 16 - movs r3, 0xFF - ands r3, r1 - cmp r2, 0 - bne _080CB84E - movs r2, 0x20 - negs r2, r2 - b _080CB856 -_080CB84E: - cmp r2, 0xFF - bne _080CB856 - movs r2, 0x88 - lsls r2, 1 -_080CB856: - mov r0, r9 - subs r4, r0 - lsls r4, 16 - lsrs r4, 16 - mov r1, r10 - subs r0, r2, r1 - lsls r5, r3, 16 - asrs r5, 16 - muls r0, r5 - lsls r1, r6, 16 - asrs r7, r1, 16 - adds r1, r7, 0 - bl __divsi3 - adds r6, r0, 0 - lsls r4, 16 - asrs r4, 16 - adds r0, r4, 0 - muls r0, r5 - adds r1, r7, 0 - bl __divsi3 - add r6, r10 - mov r1, r8 - strh r6, [r1, 0x20] - add r0, r9 - strh r0, [r1, 0x22] - adds r5, 0x1 - lsls r5, 16 - lsrs r3, r5, 16 - asrs r5, 16 - cmp r5, r7 - beq _080CB8A8 - lsls r1, r7, 8 - lsls r0, r3, 16 - asrs r0, 16 - orrs r0, r1 - mov r1, r8 - strh r0, [r1, 0x3C] - movs r0, 0 - b _080CB8AA -_080CB8A8: - movs r0, 0x1 -_080CB8AA: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80CB814 - - thumb_func_start sub_80CB8B8 -sub_80CB8B8: @ 80CB8B8 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x2E - ldrsh r0, [r4, r1] - cmp r0, 0xA - bne _080CB8CC - adds r0, r4, 0 - movs r1, 0x1 - bl StartSpriteAffineAnim -_080CB8CC: - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x32 - ble _080CB8E0 - adds r0, r4, 0 - bl move_anim_8072740 -_080CB8E0: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80CB8B8 - - thumb_func_start sub_80CB8E8 -sub_80CB8E8: @ 80CB8E8 - push {r4,r5,lr} - adds r4, r0, 0 - movs r1, 0x34 - ldrsh r0, [r4, r1] - lsls r0, 7 - movs r2, 0x36 - ldrsh r1, [r4, r2] - bl __divsi3 - ldrh r1, [r4, 0x2E] - adds r1, r0 - movs r5, 0 - strh r1, [r4, 0x2E] - lsls r1, 16 - asrs r1, 16 - cmp r1, 0x7F - ble _080CB912 - ldrh r0, [r4, 0x30] - adds r0, 0x1 - strh r0, [r4, 0x30] - strh r5, [r4, 0x2E] -_080CB912: - ldrh r0, [r4, 0x2E] - adds r0, 0x80 - lsls r0, 16 - asrs r0, 16 - movs r1, 0x30 - ldrsh r2, [r4, r1] - lsls r2, 3 - movs r1, 0x1E - subs r1, r2 - lsls r1, 16 - asrs r1, 16 - bl Sin - strh r0, [r4, 0x26] - adds r0, r4, 0 - bl sub_80CB814 - lsls r0, 24 - cmp r0, 0 - beq _080CB942 - strh r5, [r4, 0x26] - strh r5, [r4, 0x2E] - ldr r0, _080CB948 @ =sub_80CB8B8 - str r0, [r4, 0x1C] -_080CB942: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080CB948: .4byte sub_80CB8B8 - thumb_func_end sub_80CB8E8 - - thumb_func_start sub_80CB94C -sub_80CB94C: @ 80CB94C - push {r4-r6,lr} - adds r5, r0, 0 - movs r1, 0 - bl sub_80787B0 - ldr r4, _080CB994 @ =gBattleAnimEnemyMonIndex - ldrb r0, [r4] - movs r1, 0 - bl sub_8077ABC - lsls r0, 24 - lsrs r6, r0, 24 - ldrb r0, [r4] - movs r1, 0x1 - bl sub_8077ABC - lsls r0, 24 - lsrs r2, r0, 24 - ldr r0, _080CB998 @ =gBattleAnimPlayerMonIndex - ldrb r1, [r0] - movs r0, 0x2 - eors r0, r1 - ldrb r4, [r4] - cmp r0, r4 - bne _080CB99C - strh r6, [r5, 0x3A] - adds r0, r2, 0 - adds r0, 0xA - strh r0, [r5, 0x3C] - adds r0, r5, 0 - movs r1, 0x3C - bl sub_80CB7EC - movs r0, 0x1 - b _080CB9AE - .align 2, 0 -_080CB994: .4byte gBattleAnimEnemyMonIndex -_080CB998: .4byte gBattleAnimPlayerMonIndex -_080CB99C: - strh r6, [r5, 0x3A] - adds r0, r2, 0 - adds r0, 0xA - strh r0, [r5, 0x3C] - adds r0, r5, 0 - movs r1, 0x3C - bl sub_80CB7EC - movs r0, 0x3 -_080CB9AE: - strh r0, [r5, 0x34] - movs r0, 0x3C - strh r0, [r5, 0x36] - ldr r0, _080CB9C0 @ =sub_80CB8E8 - str r0, [r5, 0x1C] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080CB9C0: .4byte sub_80CB8E8 - thumb_func_end sub_80CB94C - - thumb_func_start sub_80CB9C4 -sub_80CB9C4: @ 80CB9C4 - push {r4,r5,lr} - adds r4, r0, 0 - movs r1, 0x34 - ldrsh r0, [r4, r1] - lsls r0, 7 - movs r2, 0x36 - ldrsh r1, [r4, r2] - bl __divsi3 - ldrh r1, [r4, 0x2E] - adds r1, r0 - movs r5, 0 - strh r1, [r4, 0x2E] - lsls r1, 16 - asrs r1, 16 - cmp r1, 0x7F - ble _080CB9EE - ldrh r0, [r4, 0x30] - adds r0, 0x1 - strh r0, [r4, 0x30] - strh r5, [r4, 0x2E] -_080CB9EE: - ldrh r0, [r4, 0x2E] - adds r0, 0x80 - lsls r0, 16 - asrs r0, 16 - movs r1, 0x30 - ldrsh r2, [r4, r1] - lsls r2, 3 - movs r1, 0x1E - subs r1, r2 - lsls r1, 16 - asrs r1, 16 - bl Sin - strh r0, [r4, 0x26] - adds r0, r4, 0 - bl sub_80CB814 - lsls r0, 24 - cmp r0, 0 - beq _080CBA20 - strh r5, [r4, 0x26] - strh r5, [r4, 0x2E] - adds r0, r4, 0 - bl move_anim_8072740 -_080CBA20: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80CB9C4 - - thumb_func_start sub_80CBA28 -sub_80CBA28: @ 80CBA28 - push {r4-r6,lr} - adds r5, r0, 0 - ldr r4, _080CBA64 @ =gBattleAnimEnemyMonIndex - ldrb r0, [r4] - movs r1, 0x1 - bl sub_8077ABC - lsls r0, 24 - lsrs r6, r0, 24 - ldrb r0, [r4] - bl GetBankSide - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - bne _080CBA6C - strh r0, [r5, 0x3A] - adds r0, r6, 0 - adds r0, 0xA - strh r0, [r5, 0x3C] - adds r0, r5, 0 - movs r1, 0x28 - bl sub_80CB7EC - movs r0, 0x3 - strh r0, [r5, 0x34] - movs r0, 0x3C - strh r0, [r5, 0x36] - ldr r0, _080CBA68 @ =sub_80CB8E8 - b _080CBA96 - .align 2, 0 -_080CBA64: .4byte gBattleAnimEnemyMonIndex -_080CBA68: .4byte sub_80CB8E8 -_080CBA6C: - movs r0, 0xFF - strh r0, [r5, 0x3A] - adds r0, r6, 0 - adds r0, 0xA - strh r0, [r5, 0x3C] - bl IsContest - lsls r0, 24 - cmp r0, 0 - beq _080CBA84 - movs r0, 0 - strh r0, [r5, 0x3A] -_080CBA84: - adds r0, r5, 0 - movs r1, 0x28 - bl sub_80CB7EC - movs r0, 0x3 - strh r0, [r5, 0x34] - movs r0, 0x3C - strh r0, [r5, 0x36] - ldr r0, _080CBAA0 @ =sub_80CB9C4 -_080CBA96: - str r0, [r5, 0x1C] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080CBAA0: .4byte sub_80CB9C4 - thumb_func_end sub_80CBA28 - - thumb_func_start sub_80CBAA4 -sub_80CBAA4: @ 80CBAA4 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x2E - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _080CBABE - adds r0, r4, 0 - movs r1, 0 - bl sub_8078764 - ldr r0, _080CBAE4 @ =gBattleAnimArgs - ldrh r0, [r0, 0x4] - strh r0, [r4, 0x30] -_080CBABE: - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - ldrh r1, [r4, 0x30] - muls r0, r1 - strh r0, [r4, 0x26] - adds r0, r4, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _080CBADE - adds r0, r4, 0 - bl move_anim_8072740 -_080CBADE: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080CBAE4: .4byte gBattleAnimArgs - thumb_func_end sub_80CBAA4 - thumb_func_start sub_80CBAE8 -sub_80CBAE8: @ 80CBAE8 - push {r4-r6,lr} - adds r5, r0, 0 - movs r1, 0 - bl sub_8078764 - ldr r4, _080CBB30 @ =gBattleAnimPlayerMonIndex - ldrb r0, [r4] - movs r1, 0 - bl sub_8077ABC - lsls r0, 24 - lsrs r6, r0, 24 - ldrb r0, [r4] - movs r1, 0x1 - bl sub_8077ABC - lsls r0, 24 - lsrs r2, r0, 24 - ldr r0, _080CBB34 @ =gBattleAnimEnemyMonIndex - ldrb r1, [r0] - movs r0, 0x2 - eors r0, r1 - ldrb r4, [r4] - cmp r0, r4 - bne _080CBB38 - strh r6, [r5, 0x3A] - adds r0, r2, 0 - adds r0, 0xA - strh r0, [r5, 0x3C] - adds r0, r5, 0 - movs r1, 0x3C - bl sub_80CB7EC - movs r0, 0x1 - b _080CBB4A - .align 2, 0 -_080CBB30: .4byte gBattleAnimPlayerMonIndex -_080CBB34: .4byte gBattleAnimEnemyMonIndex -_080CBB38: - strh r6, [r5, 0x3A] - adds r0, r2, 0 - adds r0, 0xA - strh r0, [r5, 0x3C] - adds r0, r5, 0 - movs r1, 0x3C - bl sub_80CB7EC - movs r0, 0x3 -_080CBB4A: - strh r0, [r5, 0x34] - movs r0, 0x3C - strh r0, [r5, 0x36] - ldr r0, _080CBB5C @ =sub_80CBB60 - str r0, [r5, 0x1C] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080CBB5C: .4byte sub_80CBB60 - thumb_func_end sub_80CBAE8 - thumb_func_start sub_80CBB60 -sub_80CBB60: @ 80CBB60 - push {r4,r5,lr} - adds r4, r0, 0 - movs r1, 0x34 - ldrsh r0, [r4, r1] - lsls r0, 7 - movs r2, 0x36 - ldrsh r1, [r4, r2] - bl __divsi3 - ldrh r1, [r4, 0x2E] - adds r1, r0 - movs r5, 0 - strh r1, [r4, 0x2E] - lsls r1, 16 - asrs r1, 16 - cmp r1, 0x7F - ble _080CBB8A - ldrh r0, [r4, 0x30] - adds r0, 0x1 - strh r0, [r4, 0x30] - strh r5, [r4, 0x2E] -_080CBB8A: - ldrh r0, [r4, 0x2E] - adds r0, 0x80 - lsls r0, 16 - asrs r0, 16 - movs r1, 0x30 - ldrsh r2, [r4, r1] - lsls r2, 3 - movs r1, 0x1E - subs r1, r2 - lsls r1, 16 - asrs r1, 16 - bl Sin - strh r0, [r4, 0x26] - lsls r0, 16 - cmp r0, 0 - bne _080CBBBE - movs r0, 0x3F - bl sub_8076F98 - adds r1, r0, 0 - lsls r1, 24 - asrs r1, 24 - movs r0, 0x7D - bl PlaySE12WithPanning -_080CBBBE: - adds r0, r4, 0 - bl sub_80CB814 - lsls r0, 24 - cmp r0, 0 - beq _080CBBE6 - strh r5, [r4, 0x26] - strh r5, [r4, 0x2E] - ldr r0, _080CBBEC @ =sub_80CB8B8 - str r0, [r4, 0x1C] - movs r0, 0x40 - negs r0, r0 - bl sub_8076F98 - adds r1, r0, 0 - lsls r1, 24 - asrs r1, 24 - movs r0, 0x7D - bl PlaySE12WithPanning -_080CBBE6: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080CBBEC: .4byte sub_80CB8B8 - thumb_func_end sub_80CBB60 - - thumb_func_start sub_80CBBF0 -sub_80CBBF0: @ 80CBBF0 - push {r4,r5,lr} - adds r4, r0, 0 - movs r1, 0x2E - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _080CBC84 - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _080CBC18 - ldr r0, _080CBC14 @ =gBattleAnimArgs - ldrh r1, [r0, 0x2] - strh r1, [r4, 0x30] - movs r1, 0x78 - strh r1, [r4, 0x20] - adds r5, r0, 0 - b _080CBC3A - .align 2, 0 -_080CBC14: .4byte gBattleAnimArgs -_080CBC18: - ldr r0, _080CBC74 @ =gBattleAnimArgs - movs r1, 0x2 - ldrsh r3, [r0, r1] - adds r1, r3, 0 - subs r1, 0x20 - adds r2, r1, 0 - adds r5, r0, 0 - cmp r1, 0 - bge _080CBC2E - adds r2, r3, 0 - adds r2, 0xDF -_080CBC2E: - asrs r0, r2, 8 - lsls r0, 8 - subs r0, r1, r0 - strh r0, [r4, 0x30] - movs r0, 0x46 - strh r0, [r4, 0x20] -_080CBC3A: - ldrh r0, [r5] - strh r0, [r4, 0x22] - strh r0, [r4, 0x32] - movs r0, 0x14 - strh r0, [r4, 0x36] - movs r1, 0x30 - ldrsh r0, [r4, r1] - movs r1, 0x3C - bl Cos - strh r0, [r4, 0x24] - movs r1, 0x30 - ldrsh r0, [r4, r1] - movs r1, 0x14 - bl Sin - strh r0, [r4, 0x26] - ldr r0, _080CBC78 @ =sub_80CBC8C - str r0, [r4, 0x1C] - ldrh r0, [r4, 0x30] - subs r0, 0x1 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0xBE - bhi _080CBC7C - adds r1, r4, 0 - adds r1, 0x43 - movs r0, 0x1F - b _080CBC82 - .align 2, 0 -_080CBC74: .4byte gBattleAnimArgs -_080CBC78: .4byte sub_80CBC8C -_080CBC7C: - adds r1, r4, 0 - adds r1, 0x43 - movs r0, 0x1D -_080CBC82: - strb r0, [r1] -_080CBC84: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80CBBF0 - - thumb_func_start sub_80CBC8C -sub_80CBC8C: @ 80CBC8C - push {r4,r5,lr} - adds r4, r0, 0 - movs r1, 0x34 - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _080CBC9E - cmp r0, 0x1 - beq _080CBCCE - b _080CBCEE -_080CBC9E: - ldrh r5, [r4, 0x32] - movs r1, 0x32 - ldrsh r0, [r4, r1] - cmp r0, 0x4E - ble _080CBCB6 - movs r0, 0x1 - strh r0, [r4, 0x34] - adds r0, r4, 0 - movs r1, 0x1 - bl StartSpriteAffineAnim - b _080CBCEE -_080CBCB6: - movs r1, 0x36 - ldrsh r0, [r4, r1] - movs r1, 0xA - bl __divsi3 - adds r0, r5, r0 - strh r0, [r4, 0x32] - ldrh r1, [r4, 0x36] - adds r1, 0x3 - strh r1, [r4, 0x36] - strh r0, [r4, 0x22] - b _080CBCEE -_080CBCCE: - movs r1, 0x34 - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _080CBCEE - adds r0, r4, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _080CBCEE - movs r0, 0 - strh r0, [r4, 0x2E] - strh r0, [r4, 0x32] - ldr r0, _080CBCF4 @ =sub_80CBCF8 - str r0, [r4, 0x1C] -_080CBCEE: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080CBCF4: .4byte sub_80CBCF8 - thumb_func_end sub_80CBC8C thumb_func_start sub_80CBCF8 sub_80CBCF8: @ 80CBCF8 diff --git a/src/battle_anim_80CA710.c b/src/battle_anim_80CA710.c index 50bdb3005..85ad92d7f 100755 --- a/src/battle_anim_80CA710.c +++ b/src/battle_anim_80CA710.c @@ -6,6 +6,7 @@ #include "palette.h" #include "rng.h" #include "rom_8077ABC.h" +#include "sound.h" #include "sprite.h" #include "task.h" #include "trig.h" @@ -32,6 +33,9 @@ void sub_80CB1A4(struct Sprite* sprite); void sub_80CB298(struct Sprite* sprite); void sub_80CB2D4(struct Sprite* sprite); void sub_80CB710(struct Sprite* sprite); +void sub_80CBB60(struct Sprite* sprite); +void sub_80CBC8C(struct Sprite* sprite); +void sub_80CBCF8(struct Sprite* sprite); void sub_80787B0(struct Sprite *sprite, u8 a2); void sub_8078764(struct Sprite *sprite, u8 a2); @@ -42,6 +46,7 @@ void sub_80782D8(struct Sprite *sprite); void sub_8078CC0(struct Sprite *sprite); void sub_807A3FC(u8 slot, u8 a2, s16 *a3, s16 *a4); u8 sub_8079ED4(u8 slot); +s8 sub_8076F98(s8 a); void move_anim_8074EE0(struct Sprite *sprite); bool8 sub_8078718(struct Sprite *sprite); @@ -1059,4 +1064,501 @@ void sub_80CB7EC(struct Sprite* sprite, s16 c) sprite->data5 = a; sprite->data6 = b; sprite->data7 = c; +} + +#ifdef NONMATCHING +bool8 sub_80CB814(struct Sprite* sprite) +{ + s32 a = sprite->data5 >> 8; + s16 d = sprite->data5; + s16 b = sprite->data6 >> 8; + s16 e = sprite->data6; + s16 c = sprite->data7 >> 8; + s16 f = c & 0xFF; + if(!b) + { + b = ~32; + } + else if(b == 255) + { + b = 0x110; + } + sprite->pos1.x = ((b - a) * f / a ) + (((e - d) * f) / a); + sprite->pos2.y = d; + f++; + if(f != a) + { + sprite->data7 = (f << 8) | c; + return FALSE; + } + return TRUE; +} +#else +__attribute__((naked)) +bool8 sub_80CB814(struct Sprite* sprite) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + mov r8, r0\n\ + ldrh r0, [r0, 0x38]\n\ + lsrs r1, r0, 8\n\ + mov r10, r1\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r9, r0\n\ + mov r1, r8\n\ + ldrh r0, [r1, 0x3A]\n\ + lsrs r2, r0, 8\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + ldrh r1, [r1, 0x3C]\n\ + lsls r0, r1, 16\n\ + asrs r0, 24\n\ + lsls r0, 16\n\ + lsrs r6, r0, 16\n\ + movs r3, 0xFF\n\ + ands r3, r1\n\ + cmp r2, 0\n\ + bne _080CB84E\n\ + movs r2, 0x20\n\ + negs r2, r2\n\ + b _080CB856\n\ +_080CB84E:\n\ + cmp r2, 0xFF\n\ + bne _080CB856\n\ + movs r2, 0x88\n\ + lsls r2, 1\n\ +_080CB856:\n\ + mov r0, r9\n\ + subs r4, r0\n\ + lsls r4, 16\n\ + lsrs r4, 16\n\ + mov r1, r10\n\ + subs r0, r2, r1\n\ + lsls r5, r3, 16\n\ + asrs r5, 16\n\ + muls r0, r5\n\ + lsls r1, r6, 16\n\ + asrs r7, r1, 16\n\ + adds r1, r7, 0\n\ + bl __divsi3\n\ + adds r6, r0, 0\n\ + lsls r4, 16\n\ + asrs r4, 16\n\ + adds r0, r4, 0\n\ + muls r0, r5\n\ + adds r1, r7, 0\n\ + bl __divsi3\n\ + add r6, r10\n\ + mov r1, r8\n\ + strh r6, [r1, 0x20]\n\ + add r0, r9\n\ + strh r0, [r1, 0x22]\n\ + adds r5, 0x1\n\ + lsls r5, 16\n\ + lsrs r3, r5, 16\n\ + asrs r5, 16\n\ + cmp r5, r7\n\ + beq _080CB8A8\n\ + lsls r1, r7, 8\n\ + lsls r0, r3, 16\n\ + asrs r0, 16\n\ + orrs r0, r1\n\ + mov r1, r8\n\ + strh r0, [r1, 0x3C]\n\ + movs r0, 0\n\ + b _080CB8AA\n\ +_080CB8A8:\n\ + movs r0, 0x1\n\ +_080CB8AA:\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r1}\n\ + bx r1\n\ + .syntax divided\n"); +} +#endif + +void sub_80CB8B8(struct Sprite* sprite) +{ + if(sprite->data0 == 10) + { + StartSpriteAffineAnim(sprite, 1); + } + sprite->data0++; + if(sprite->data0 > 50) move_anim_8072740(sprite); +} + +#ifdef NONMATCHING +void sub_80CB8E8(struct Sprite* sprite) +{ + int temp = ((sprite->data3 * 128) / sprite->data4) + sprite->data0; + int zero = 0; + sprite->data0 = temp; + if(sprite->data0 > 0x7F) + { + sprite->data1++; + sprite->data0 = zero; + } + sprite->pos2.y = Sin(sprite->data0 + 0x80, (sprite->data1 * 8) - 30); + if(!sub_80CB814(sprite)) + { + sprite->pos2.y = zero; + sprite->data0 = zero; + sprite->callback = sub_80CB8B8; + } +} +#else +__attribute__((naked)) +void sub_80CB8E8(struct Sprite* sprite) +{ + asm(".syntax unified\n\ + push {r4,r5,lr}\n\ + adds r4, r0, 0\n\ + movs r1, 0x34\n\ + ldrsh r0, [r4, r1]\n\ + lsls r0, 7\n\ + movs r2, 0x36\n\ + ldrsh r1, [r4, r2]\n\ + bl __divsi3\n\ + ldrh r1, [r4, 0x2E]\n\ + adds r1, r0\n\ + movs r5, 0\n\ + strh r1, [r4, 0x2E]\n\ + lsls r1, 16\n\ + asrs r1, 16\n\ + cmp r1, 0x7F\n\ + ble _080CB912\n\ + ldrh r0, [r4, 0x30]\n\ + adds r0, 0x1\n\ + strh r0, [r4, 0x30]\n\ + strh r5, [r4, 0x2E]\n\ +_080CB912:\n\ + ldrh r0, [r4, 0x2E]\n\ + adds r0, 0x80\n\ + lsls r0, 16\n\ + asrs r0, 16\n\ + movs r1, 0x30\n\ + ldrsh r2, [r4, r1]\n\ + lsls r2, 3\n\ + movs r1, 0x1E\n\ + subs r1, r2\n\ + lsls r1, 16\n\ + asrs r1, 16\n\ + bl Sin\n\ + strh r0, [r4, 0x26]\n\ + adds r0, r4, 0\n\ + bl sub_80CB814\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _080CB942\n\ + strh r5, [r4, 0x26]\n\ + strh r5, [r4, 0x2E]\n\ + ldr r0, _080CB948 @ =sub_80CB8B8\n\ + str r0, [r4, 0x1C]\n\ +_080CB942:\n\ + pop {r4,r5}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080CB948: .4byte sub_80CB8B8\n\ + .syntax divided\n"); +} +#endif + +void sub_80CB94C(struct Sprite* sprite) +{ + s16 e1; + s16 e2; + sub_80787B0(sprite, 0); + e1 = sub_8077ABC(gBattleAnimEnemyMonIndex, 0); + e2 = sub_8077ABC(gBattleAnimEnemyMonIndex, 1); + if((gBattleAnimPlayerMonIndex ^ 2) == gBattleAnimEnemyMonIndex) + { + sprite->data6 = e1; + sprite->data7 = e2 + 10; + sub_80CB7EC(sprite, 0x3C); + sprite->data3 = 1; + } + else + { + sprite->data6 = e1; + sprite->data7 = e2 + 10; + sub_80CB7EC(sprite, 0x3C); + sprite->data3 = 3; + } + sprite->data4 = 0x3C; + sprite->callback = sub_80CB8E8; +} + +void sub_80CB9C4(struct Sprite* sprite) +{ + int zero; + sprite->data0 += ((sprite->data3 * 128) / sprite->data4); + zero = 0; + if(sprite->data0 > 0x7F) + { + sprite->data1++; + sprite->data0 = zero; + } + sprite->pos2.y = Sin(sprite->data0 + 0x80, 30 - sprite->data1 * 8); + if(sub_80CB814(sprite)) + { + sprite->pos2.y = zero; + sprite->data0 = zero; + move_anim_8072740(sprite); + } +} + +void sub_80CBA28(struct Sprite* sprite) +{ + s16 e = sub_8077ABC(gBattleAnimEnemyMonIndex, 1); + if(GetBankSide(gBattleAnimEnemyMonIndex) == 0) + { + sprite->data6 = 0; + sprite->data7 = e + 10; + sub_80CB7EC(sprite, 0x28); + sprite->data3 = 3; + sprite->data4 = 0x3C; + sprite->callback = sub_80CB8E8; + } + else + { + sprite->data6 = 255; + sprite->data7 = e + 10; + if(IsContest()) sprite->data6 = 0; + sub_80CB7EC(sprite, 0x28); + sprite->data3 = 3; + sprite->data4 = 0x3C; + sprite->callback = sub_80CB9C4; + } +} + +void sub_80CBAA4(struct Sprite* sprite) +{ + if(sprite->data0 == 0) + { + sub_8078764(sprite, 0); + sprite->data1 = gBattleAnimArgs[2]; + } + sprite->data0++; + sprite->pos2.y = sprite->data1 * sprite->data0; + if(sprite->animEnded) move_anim_8072740(sprite); +} + +void sub_80CBAE8(struct Sprite* sprite) +{ + s16 p1; + s16 p2; + sub_8078764(sprite, 0); + p1 = sub_8077ABC(gBattleAnimPlayerMonIndex, 0); + p2 = sub_8077ABC(gBattleAnimPlayerMonIndex, 1); + if((gBattleAnimEnemyMonIndex ^ 2) == gBattleAnimPlayerMonIndex) + { + sprite->data6 = p1; + sprite->data7 = p2 + 10; + sub_80CB7EC(sprite, 0x3c); + sprite->data3 = 1; + } + else + { + sprite->data6 = p1; + sprite->data7 = p2 + 10; + sub_80CB7EC(sprite, 0x3c); + sprite->data3 = 3; + } + sprite->data4 = 0x3C; + sprite->callback = sub_80CBB60; +} + +void sub_80CBB60(struct Sprite* sprite) +{ + int zero; + sprite->data0 += ((sprite->data3 * 128) / sprite->data4); + zero = 0; + if(sprite->data0 > 0x7F) + { + sprite->data1++; + sprite->data0 = zero; + } + sprite->pos2.y = Sin(sprite->data0 + 0x80, 30 - sprite->data1 * 8); + if(sprite->pos2.y == 0) + { + PlaySE12WithPanning(0x7D, sub_8076F98(0x3F)); + } + if(sub_80CB814(sprite)) + { + sprite->pos2.y = 0; + sprite->data0 = 0; + sprite->callback = sub_80CB8B8; + PlaySE12WithPanning(0x7D, sub_8076F98(-0x40)); + } +} + +#ifdef NONMATCHING +void sub_80CBBF0(struct Sprite* sprite) +{ + int a; + int b; + if(sprite->data0 == 0) + { + if(!IsContest()) + { + sprite->data1 = gBattleAnimArgs[1]; + sprite->pos1.x = 0x78; + } + else + { + a = gBattleAnimArgs[1] - 32; + b = a; + if(a < 0) + { + b += gBattleAnimArgs[1] + 0xDF; + } + sprite->data1 = b - a; + sprite->pos1.x = 0x46; + + } + sprite->pos1.y = gBattleAnimArgs[0]; + sprite->data2 = gBattleAnimArgs[0]; + sprite->data4 = 20; + sprite->pos2.x = Cos(sprite->data1, 0x3C); + sprite->pos2.y = Sin(sprite->data1, 20); + sprite->callback = sub_80CBC8C; + if((sprite->data1 - 1) <= 0xBE) + { + sprite->subpriority = 30; + } + else + { + sprite->subpriority = 28; + } + } +} +#else +__attribute__((naked)) +void sub_80CBBF0(struct Sprite* sprite) +{ + asm(".syntax unified\n\ + push {r4,r5,lr}\n\ + adds r4, r0, 0\n\ + movs r1, 0x2E\n\ + ldrsh r0, [r4, r1]\n\ + cmp r0, 0\n\ + bne _080CBC84\n\ + bl IsContest\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + bne _080CBC18\n\ + ldr r0, _080CBC14 @ =gBattleAnimArgs\n\ + ldrh r1, [r0, 0x2]\n\ + strh r1, [r4, 0x30]\n\ + movs r1, 0x78\n\ + strh r1, [r4, 0x20]\n\ + adds r5, r0, 0\n\ + b _080CBC3A\n\ + .align 2, 0\n\ +_080CBC14: .4byte gBattleAnimArgs\n\ +_080CBC18:\n\ + ldr r0, _080CBC74 @ =gBattleAnimArgs\n\ + movs r1, 0x2\n\ + ldrsh r3, [r0, r1]\n\ + adds r1, r3, 0\n\ + subs r1, 0x20\n\ + adds r2, r1, 0\n\ + adds r5, r0, 0\n\ + cmp r1, 0\n\ + bge _080CBC2E\n\ + adds r2, r3, 0\n\ + adds r2, 0xDF\n\ +_080CBC2E:\n\ + asrs r0, r2, 8\n\ + lsls r0, 8\n\ + subs r0, r1, r0\n\ + strh r0, [r4, 0x30]\n\ + movs r0, 0x46\n\ + strh r0, [r4, 0x20]\n\ +_080CBC3A:\n\ + ldrh r0, [r5]\n\ + strh r0, [r4, 0x22]\n\ + strh r0, [r4, 0x32]\n\ + movs r0, 0x14\n\ + strh r0, [r4, 0x36]\n\ + movs r1, 0x30\n\ + ldrsh r0, [r4, r1]\n\ + movs r1, 0x3C\n\ + bl Cos\n\ + strh r0, [r4, 0x24]\n\ + movs r1, 0x30\n\ + ldrsh r0, [r4, r1]\n\ + movs r1, 0x14\n\ + bl Sin\n\ + strh r0, [r4, 0x26]\n\ + ldr r0, _080CBC78 @ =sub_80CBC8C\n\ + str r0, [r4, 0x1C]\n\ + ldrh r0, [r4, 0x30]\n\ + subs r0, 0x1\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + cmp r0, 0xBE\n\ + bhi _080CBC7C\n\ + adds r1, r4, 0\n\ + adds r1, 0x43\n\ + movs r0, 0x1F\n\ + b _080CBC82\n\ + .align 2, 0\n\ +_080CBC74: .4byte gBattleAnimArgs\n\ +_080CBC78: .4byte sub_80CBC8C\n\ +_080CBC7C:\n\ + adds r1, r4, 0\n\ + adds r1, 0x43\n\ + movs r0, 0x1D\n\ +_080CBC82:\n\ + strb r0, [r1]\n\ +_080CBC84:\n\ + pop {r4,r5}\n\ + pop {r0}\n\ + bx r0\n\ + .syntax divided\n"); +} +#endif + +void sub_80CBC8C(struct Sprite* sprite) +{ + switch(sprite->data3) + { + case 0: + { + if(sprite->data2 > 0x4E) + { + sprite->data3 = 1; + StartSpriteAffineAnim(sprite, 1); + break; + } + else + { + sprite->data2 += sprite->data4 / 10; + sprite->data4 += 3; + sprite->pos1.y = sprite->data2; + break; + } + } + case 1: + { + if(sprite->data3 && sprite->affineAnimEnded) + { + sprite->data0 = 0; + sprite->data2 = 0; + sprite->callback = sub_80CBCF8; + } + break; + } + } }
\ No newline at end of file |