diff options
author | jiangzhengwenjz <jiangzhengwenjzw@qq.com> | 2019-11-08 05:03:08 +0800 |
---|---|---|
committer | jiangzhengwenjz <jiangzhengwenjzw@qq.com> | 2019-11-09 12:26:53 +0800 |
commit | 7e4a3697cd6587e78b07eb8899cc142cca6bb583 (patch) | |
tree | 813f237bd37f75ce97452710a294e3ec6ebcc4cd | |
parent | 253ffec0352404ae2ffe5635a5b648d39d8d6b7e (diff) |
fighting
-rw-r--r-- | asm/fighting.s | 1746 | ||||
-rw-r--r-- | asm/fire.s | 8 | ||||
-rw-r--r-- | data/battle_anim_effects_misc.s | 2 | ||||
-rw-r--r-- | include/battle_anim.h | 6 | ||||
-rw-r--r-- | ld_script.txt | 3 | ||||
-rw-r--r-- | src/battle_anim_mons.c | 2 | ||||
-rw-r--r-- | src/fighting.c | 971 |
7 files changed, 984 insertions, 1754 deletions
diff --git a/asm/fighting.s b/asm/fighting.s deleted file mode 100644 index 89168ced6..000000000 --- a/asm/fighting.s +++ /dev/null @@ -1,1746 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start unc_080B08A0 -unc_080B08A0: @ 80B08A0 - push {r4,r5,lr} - adds r4, r0, 0 - ldr r5, _080B08D0 @ =gBattleAnimArgs - movs r0, 0 - ldrsh r1, [r5, r0] - adds r0, r4, 0 - bl SetAnimSpriteInitialXOffset - ldrh r0, [r5, 0x2] - ldrh r1, [r4, 0x22] - adds r0, r1 - strh r0, [r4, 0x22] - movs r0, 0xF - strh r0, [r4, 0x2E] - ldr r0, _080B08D4 @ =WaitAnimForDuration - str r0, [r4, 0x1C] - ldr r1, _080B08D8 @ =DestroyAnimSprite - adds r0, r4, 0 - bl StoreSpriteCallbackInData6 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B08D0: .4byte gBattleAnimArgs -_080B08D4: .4byte WaitAnimForDuration -_080B08D8: .4byte DestroyAnimSprite - thumb_func_end unc_080B08A0 - - thumb_func_start sub_80B08DC -sub_80B08DC: @ 80B08DC - push {r4,r5,lr} - adds r5, r0, 0 - ldr r4, _080B0920 @ =gBattleAnimArgs - movs r1, 0xE - ldrsh r0, [r4, r1] - cmp r0, 0x1 - bne _080B0904 - ldr r0, _080B0924 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080B0904 - ldrh r0, [r4, 0x2] - negs r0, r0 - strh r0, [r4, 0x2] - ldrh r0, [r4, 0x6] - negs r0, r0 - strh r0, [r4, 0x6] -_080B0904: - ldr r4, _080B0920 @ =gBattleAnimArgs - ldrb r1, [r4, 0xC] - adds r0, r5, 0 - bl StartSpriteAnim - movs r0, 0 - strh r0, [r4, 0xC] - adds r0, r5, 0 - bl sub_8075F0C - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B0920: .4byte gBattleAnimArgs -_080B0924: .4byte gBattleAnimAttacker - thumb_func_end sub_80B08DC - - thumb_func_start sub_80B0928 -sub_80B0928: @ 80B0928 - push {r4,lr} - adds r4, r0, 0 - bl IsContest - lsls r0, 24 - cmp r0, 0 - beq _080B0944 - ldr r0, _080B0950 @ =gBattleAnimArgs - ldrh r1, [r0, 0x2] - negs r1, r1 - strh r1, [r0, 0x2] - ldrh r1, [r0, 0x6] - negs r1, r1 - strh r1, [r0, 0x6] -_080B0944: - adds r0, r4, 0 - bl sub_80B08DC - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B0950: .4byte gBattleAnimArgs - thumb_func_end sub_80B0928 - - thumb_func_start sub_80B0954 -sub_80B0954: @ 80B0954 - push {r4,r5,lr} - adds r5, r0, 0 - ldr r4, _080B0974 @ =gBattleAnimArgs - ldrb r1, [r4, 0x8] - bl StartSpriteAnim - movs r1, 0x6 - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _080B0978 - adds r0, r5, 0 - movs r1, 0x1 - bl InitSpritePosToAnimAttacker - b _080B0980 - .align 2, 0 -_080B0974: .4byte gBattleAnimArgs -_080B0978: - adds r0, r5, 0 - movs r1, 0x1 - bl InitSpritePosToAnimTarget -_080B0980: - ldr r0, _080B0998 @ =gBattleAnimArgs - ldrh r0, [r0, 0x4] - strh r0, [r5, 0x2E] - ldr r0, _080B099C @ =WaitAnimForDuration - str r0, [r5, 0x1C] - ldr r1, _080B09A0 @ =DestroyAnimSprite - adds r0, r5, 0 - bl StoreSpriteCallbackInData6 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B0998: .4byte gBattleAnimArgs -_080B099C: .4byte WaitAnimForDuration -_080B09A0: .4byte DestroyAnimSprite - thumb_func_end sub_80B0954 - - thumb_func_start sub_80B09A4 -sub_80B09A4: @ 80B09A4 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - adds r5, r0, 0 - ldr r0, _080B09C0 @ =gBattleAnimArgs - movs r2, 0 - ldrsh r1, [r0, r2] - mov r9, r0 - cmp r1, 0 - bne _080B09C8 - ldr r0, _080B09C4 @ =gBattleAnimAttacker - b _080B09CA - .align 2, 0 -_080B09C0: .4byte gBattleAnimArgs -_080B09C4: .4byte gBattleAnimAttacker -_080B09C8: - ldr r0, _080B0B10 @ =gBattleAnimTarget -_080B09CA: - ldrb r0, [r0] - mov r8, r0 - mov r4, r9 - movs r3, 0x4 - ldrsh r0, [r4, r3] - cmp r0, 0 - bge _080B09E8 - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x5 - bl __umodsi3 - strh r0, [r4, 0x4] -_080B09E8: - ldrb r1, [r4, 0x4] - adds r0, r5, 0 - bl StartSpriteAnim - mov r0, r8 - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x20] - mov r0, r8 - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x22] - mov r0, r8 - movs r1, 0x1 - bl GetBattlerSpriteCoordAttr - lsls r0, 16 - asrs r1, r0, 16 - lsrs r0, 31 - adds r1, r0 - lsls r1, 15 - lsrs r6, r1, 16 - mov r0, r8 - movs r1, 0 - bl GetBattlerSpriteCoordAttr - lsls r0, 16 - asrs r0, 16 - cmp r0, 0 - bge _080B0A32 - adds r0, 0x3 -_080B0A32: - lsls r4, r0, 14 - lsrs r4, 16 - bl Random - lsls r0, 16 - lsrs r0, 16 - lsls r1, r6, 16 - asrs r1, 16 - bl __modsi3 - lsls r0, 16 - lsrs r6, r0, 16 - bl Random - lsls r0, 16 - lsrs r0, 16 - lsls r4, 16 - asrs r4, 16 - adds r1, r4, 0 - bl __modsi3 - lsls r0, 16 - lsrs r4, r0, 16 - bl Random - movs r7, 0x1 - adds r1, r7, 0 - ands r1, r0 - cmp r1, 0 - beq _080B0A74 - lsls r0, r6, 16 - negs r0, r0 - lsrs r6, r0, 16 -_080B0A74: - bl Random - adds r1, r7, 0 - ands r1, r0 - cmp r1, 0 - beq _080B0A86 - lsls r0, r4, 16 - negs r0, r0 - lsrs r4, r0, 16 -_080B0A86: - ldr r0, _080B0B14 @ =gBattlerPositions - add r0, r8 - ldrb r1, [r0] - adds r0, r7, 0 - ands r0, r1 - cmp r0, 0 - bne _080B0A9C - lsls r0, r4, 16 - ldr r1, _080B0B18 @ =0xfff00000 - adds r0, r1 - lsrs r4, r0, 16 -_080B0A9C: - lsls r0, r6, 16 - asrs r0, 16 - ldrh r2, [r5, 0x20] - adds r0, r2 - strh r0, [r5, 0x20] - lsls r0, r4, 16 - asrs r0, 16 - ldrh r3, [r5, 0x22] - adds r0, r3 - strh r0, [r5, 0x22] - mov r1, r9 - ldrh r0, [r1, 0x2] - strh r0, [r5, 0x2E] - ldr r0, _080B0B1C @ =gBasicHitSplatSpriteTemplate - movs r2, 0x20 - ldrsh r1, [r5, r2] - movs r3, 0x22 - ldrsh r2, [r5, r3] - adds r3, r5, 0 - adds r3, 0x43 - ldrb r3, [r3] - adds r3, 0x1 - lsls r3, 24 - lsrs r3, 24 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x3C] - cmp r0, 0x40 - beq _080B0B00 - movs r0, 0x3C - ldrsh r1, [r5, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r4, _080B0B20 @ =gSprites - adds r0, r4 - movs r1, 0 - bl StartSpriteAffineAnim - movs r2, 0x3C - ldrsh r1, [r5, r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r4, 0x1C - adds r0, r4 - ldr r1, _080B0B24 @ =SpriteCallbackDummy - str r1, [r0] -_080B0B00: - ldr r0, _080B0B28 @ =sub_80B0B2C - str r0, [r5, 0x1C] - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080B0B10: .4byte gBattleAnimTarget -_080B0B14: .4byte gBattlerPositions -_080B0B18: .4byte 0xfff00000 -_080B0B1C: .4byte gBasicHitSplatSpriteTemplate -_080B0B20: .4byte gSprites -_080B0B24: .4byte SpriteCallbackDummy -_080B0B28: .4byte sub_80B0B2C - thumb_func_end sub_80B09A4 - - thumb_func_start sub_80B0B2C -sub_80B0B2C: @ 80B0B2C - push {r4,r5,lr} - adds r5, r0, 0 - ldrh r1, [r5, 0x2E] - movs r2, 0x2E - ldrsh r0, [r5, r2] - cmp r0, 0 - bne _080B0B74 - movs r1, 0x3C - ldrsh r0, [r5, r1] - cmp r0, 0x40 - beq _080B0B68 - ldr r4, _080B0B70 @ =gSprites - adds r1, r0, 0 - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldrb r0, [r0, 0x3] - lsls r0, 26 - lsrs r0, 27 - bl FreeOamMatrix - movs r0, 0x3C - ldrsh r1, [r5, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - bl DestroySprite -_080B0B68: - adds r0, r5, 0 - bl DestroyAnimSprite - b _080B0B78 - .align 2, 0 -_080B0B70: .4byte gSprites -_080B0B74: - subs r0, r1, 0x1 - strh r0, [r5, 0x2E] -_080B0B78: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80B0B2C - - thumb_func_start sub_80B0B80 -sub_80B0B80: @ 80B0B80 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x1 - bl InitSpritePosToAnimTarget - movs r0, 0x1E - strh r0, [r4, 0x2E] - ldr r0, _080B0BA0 @ =gBattleAnimArgs - movs r1, 0x4 - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _080B0BA4 - ldrh r0, [r4, 0x20] - subs r0, 0x14 - strh r0, [r4, 0x32] - b _080B0BB6 - .align 2, 0 -_080B0BA0: .4byte gBattleAnimArgs -_080B0BA4: - ldrh r0, [r4, 0x20] - adds r0, 0x14 - strh r0, [r4, 0x32] - adds r2, r4, 0 - adds r2, 0x3F - ldrb r0, [r2] - movs r1, 0x1 - orrs r0, r1 - strb r0, [r2] -_080B0BB6: - ldrh r0, [r4, 0x22] - subs r0, 0x14 - strh r0, [r4, 0x36] - ldr r0, _080B0BD0 @ =StartAnimLinearTranslation - str r0, [r4, 0x1C] - ldr r1, _080B0BD4 @ =sub_80B0BD8 - adds r0, r4, 0 - bl StoreSpriteCallbackInData6 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B0BD0: .4byte StartAnimLinearTranslation -_080B0BD4: .4byte sub_80B0BD8 - thumb_func_end sub_80B0B80 - - thumb_func_start sub_80B0BD8 -sub_80B0BD8: @ 80B0BD8 - push {r4-r6,lr} - adds r5, r0, 0 - ldrh r0, [r5, 0x38] - adds r0, 0x1 - movs r6, 0 - strh r0, [r5, 0x38] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xB - bne _080B0C18 - ldrh r2, [r5, 0x20] - ldrh r4, [r5, 0x24] - subs r0, r2, r4 - strh r0, [r5, 0x32] - ldrh r1, [r5, 0x22] - ldrh r3, [r5, 0x26] - subs r0, r1, r3 - strh r0, [r5, 0x36] - movs r0, 0x8 - strh r0, [r5, 0x2E] - adds r2, r4 - strh r2, [r5, 0x20] - adds r1, r3 - strh r1, [r5, 0x22] - strh r6, [r5, 0x26] - strh r6, [r5, 0x24] - ldr r0, _080B0C20 @ =StartAnimLinearTranslation - str r0, [r5, 0x1C] - ldr r1, _080B0C24 @ =DestroyAnimSprite - adds r0, r5, 0 - bl StoreSpriteCallbackInData6 -_080B0C18: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080B0C20: .4byte StartAnimLinearTranslation -_080B0C24: .4byte DestroyAnimSprite - thumb_func_end sub_80B0BD8 - - thumb_func_start sub_80B0C28 -sub_80B0C28: @ 80B0C28 - push {r4-r6,lr} - adds r6, r0, 0 - ldr r0, _080B0CA4 @ =gBattleAnimAttacker - ldrb r1, [r0] - movs r0, 0x2 - ldr r2, _080B0CA8 @ =gBattleAnimTarget - eors r0, r1 - ldrb r1, [r2] - cmp r0, r1 - bne _080B0C54 - ldrb r0, [r2] - bl GetBattlerPosition - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bhi _080B0C54 - ldr r1, _080B0CAC @ =gBattleAnimArgs - movs r2, 0 - ldrsh r0, [r1, r2] - negs r0, r0 - strh r0, [r1] -_080B0C54: - adds r0, r6, 0 - movs r1, 0x1 - bl InitSpritePosToAnimTarget - ldr r0, _080B0CA4 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080B0C72 - ldr r1, _080B0CAC @ =gBattleAnimArgs - ldrh r0, [r1, 0x4] - negs r0, r0 - strh r0, [r1, 0x4] -_080B0C72: - ldr r4, _080B0CAC @ =gBattleAnimArgs - ldrh r0, [r4, 0x6] - movs r5, 0 - strh r0, [r6, 0x2E] - ldrh r0, [r6, 0x20] - strh r0, [r6, 0x30] - ldrh r1, [r4, 0x4] - adds r0, r1 - strh r0, [r6, 0x32] - ldrh r0, [r6, 0x22] - strh r0, [r6, 0x34] - strh r0, [r6, 0x36] - adds r0, r6, 0 - bl InitAnimLinearTranslation - ldrh r0, [r4, 0xA] - strh r0, [r6, 0x38] - ldrh r0, [r4, 0x8] - strh r0, [r6, 0x3A] - strh r5, [r6, 0x3C] - ldr r0, _080B0CB0 @ =sub_80B0CB4 - str r0, [r6, 0x1C] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080B0CA4: .4byte gBattleAnimAttacker -_080B0CA8: .4byte gBattleAnimTarget -_080B0CAC: .4byte gBattleAnimArgs -_080B0CB0: .4byte sub_80B0CB4 - thumb_func_end sub_80B0C28 - - thumb_func_start sub_80B0CB4 -sub_80B0CB4: @ 80B0CB4 - push {r4,lr} - adds r4, r0, 0 - bl AnimTranslateLinear - lsls r0, 24 - cmp r0, 0 - bne _080B0CE0 - ldrh r0, [r4, 0x3C] - lsls r0, 16 - asrs r0, 24 - 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 - strh r0, [r4, 0x3C] - b _080B0CE6 -_080B0CE0: - adds r0, r4, 0 - bl DestroyAnimSprite -_080B0CE6: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80B0CB4 - - thumb_func_start sub_80B0CEC -sub_80B0CEC: @ 80B0CEC - push {r4,r5,lr} - adds r4, r0, 0 - movs r1, 0x1 - bl InitSpritePosToAnimTarget - ldr r5, _080B0D18 @ =gBattleAnimArgs - ldrb r1, [r5, 0x4] - adds r0, r4, 0 - bl StartSpriteAnim - ldrh r0, [r5, 0x6] - strh r0, [r4, 0x2E] - ldr r0, _080B0D1C @ =WaitAnimForDuration - str r0, [r4, 0x1C] - ldr r1, _080B0D20 @ =sub_80B0D24 - adds r0, r4, 0 - bl StoreSpriteCallbackInData6 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B0D18: .4byte gBattleAnimArgs -_080B0D1C: .4byte WaitAnimForDuration -_080B0D20: .4byte sub_80B0D24 - thumb_func_end sub_80B0CEC - - thumb_func_start sub_80B0D24 -sub_80B0D24: @ 80B0D24 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0 - bl StartSpriteAffineAnim - adds r2, r4, 0 - adds r2, 0x2C - ldrb r0, [r2] - movs r1, 0x80 - orrs r0, r1 - strb r0, [r2] - movs r0, 0x14 - strh r0, [r4, 0x2E] - ldr r0, _080B0D50 @ =WaitAnimForDuration - str r0, [r4, 0x1C] - ldr r1, _080B0D54 @ =DestroyAnimSprite - adds r0, r4, 0 - bl StoreSpriteCallbackInData6 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B0D50: .4byte WaitAnimForDuration -_080B0D54: .4byte DestroyAnimSprite - thumb_func_end sub_80B0D24 - - thumb_func_start sub_80B0D58 -sub_80B0D58: @ 80B0D58 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x1 - bl InitSpritePosToAnimTarget - ldr r0, _080B0D74 @ =gBattleAnimArgs - ldrh r0, [r0, 0x4] - strh r0, [r4, 0x2E] - ldr r0, _080B0D78 @ =sub_80B0D7C - str r0, [r4, 0x1C] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B0D74: .4byte gBattleAnimArgs -_080B0D78: .4byte sub_80B0D7C - thumb_func_end sub_80B0D58 - - thumb_func_start sub_80B0D7C -sub_80B0D7C: @ 80B0D7C - push {r4,r5,lr} - adds r5, r0, 0 - ldrh r0, [r5, 0x2E] - subs r0, 0x1 - strh r0, [r5, 0x2E] - lsls r0, 16 - asrs r0, 16 - movs r1, 0x1 - negs r1, r1 - cmp r0, r1 - bne _080B0DC0 - movs r0, 0x6 - strh r0, [r5, 0x2E] - ldr r4, _080B0DC8 @ =gBattleAnimTarget - 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] - ldr r0, _080B0DCC @ =StartAnimLinearTranslation - str r0, [r5, 0x1C] - ldr r1, _080B0DD0 @ =sub_80B0DD4 - adds r0, r5, 0 - bl StoreSpriteCallbackInData6 -_080B0DC0: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B0DC8: .4byte gBattleAnimTarget -_080B0DCC: .4byte StartAnimLinearTranslation -_080B0DD0: .4byte sub_80B0DD4 - thumb_func_end sub_80B0D7C - - thumb_func_start sub_80B0DD4 -sub_80B0DD4: @ 80B0DD4 - push {lr} - movs r1, 0xF - strh r1, [r0, 0x2E] - ldr r1, _080B0DE8 @ =WaitAnimForDuration - str r1, [r0, 0x1C] - ldr r1, _080B0DEC @ =DestroyAnimSprite - bl StoreSpriteCallbackInData6 - pop {r0} - bx r0 - .align 2, 0 -_080B0DE8: .4byte WaitAnimForDuration -_080B0DEC: .4byte DestroyAnimSprite - thumb_func_end sub_80B0DD4 - - thumb_func_start sub_80B0DF0 -sub_80B0DF0: @ 80B0DF0 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x2E - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _080B0E1C - adds r0, r4, 0 - movs r1, 0x1 - bl InitSpritePosToAnimTarget - ldr r1, _080B0E18 @ =gBattleAnimArgs - ldrh r0, [r1, 0x4] - strh r0, [r4, 0x30] - ldrh r0, [r1, 0x6] - strh r0, [r4, 0x32] - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - b _080B0E78 - .align 2, 0 -_080B0E18: .4byte gBattleAnimArgs -_080B0E1C: - ldrh r0, [r4, 0x30] - ldrh r2, [r4, 0x36] - adds r0, r2 - strh r0, [r4, 0x36] - lsls r0, 16 - asrs r0, 24 - strh r0, [r4, 0x24] - movs r1, 0x34 - ldrsh r0, [r4, r1] - movs r2, 0x32 - ldrsh r1, [r4, r2] - bl Sin - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x34] - adds r0, 0x3 - movs r1, 0xFF - ands r0, r1 - strh r0, [r4, 0x34] - cmp r0, 0x64 - ble _080B0E6A - movs r0, 0x34 - ldrsh r1, [r4, r0] - lsrs r0, r1, 31 - adds r0, r1, r0 - asrs r0, 1 - lsls r0, 1 - subs r1, r0 - adds r3, r4, 0 - adds r3, 0x3E - movs r0, 0x1 - ands r1, r0 - lsls r1, 2 - ldrb r2, [r3] - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] -_080B0E6A: - movs r1, 0x34 - ldrsh r0, [r4, r1] - cmp r0, 0x78 - ble _080B0E78 - adds r0, r4, 0 - bl DestroyAnimSprite -_080B0E78: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80B0DF0 - - thumb_func_start sub_80B0E80 -sub_80B0E80: @ 80B0E80 - push {r4,r5,lr} - adds r5, r0, 0 - ldr r0, _080B0E94 @ =gBattleAnimArgs - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _080B0E9C - ldr r4, _080B0E98 @ =gBattleAnimAttacker - b _080B0E9E - .align 2, 0 -_080B0E94: .4byte gBattleAnimArgs -_080B0E98: .4byte gBattleAnimAttacker -_080B0E9C: - ldr r4, _080B0EE4 @ =gBattleAnimTarget -_080B0E9E: - ldrb r0, [r4] - movs r1, 0 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x20] - ldrb r0, [r4] - movs r1, 0x1 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x22] - ldr r1, _080B0EE8 @ =gBattleAnimArgs - ldrh r0, [r1, 0x2] - ldrh r2, [r5, 0x20] - adds r0, r2 - movs r2, 0 - strh r0, [r5, 0x20] - ldrh r0, [r1, 0x4] - ldrh r3, [r5, 0x22] - adds r0, r3 - strh r0, [r5, 0x22] - strh r2, [r5, 0x2E] - ldrh r0, [r1, 0x6] - strh r0, [r5, 0x30] - ldrh r0, [r1, 0x8] - strh r0, [r5, 0x32] - strh r2, [r5, 0x34] - ldr r0, _080B0EEC @ =sub_80B0EF0 - str r0, [r5, 0x1C] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B0EE4: .4byte gBattleAnimTarget -_080B0EE8: .4byte gBattleAnimArgs -_080B0EEC: .4byte sub_80B0EF0 - thumb_func_end sub_80B0E80 - - thumb_func_start sub_80B0EF0 -sub_80B0EF0: @ 80B0EF0 - push {lr} - adds r1, r0, 0 - movs r0, 0x2E - ldrsh r2, [r1, r0] - cmp r2, 0 - beq _080B0F02 - cmp r2, 0x1 - beq _080B0F26 - b _080B0F60 -_080B0F02: - ldrh r0, [r1, 0x30] - subs r0, 0x1 - strh r0, [r1, 0x30] - lsls r0, 16 - cmp r0, 0 - bne _080B0F60 - movs r2, 0x32 - ldrsh r0, [r1, r2] - cmp r0, 0 - bne _080B0F1E - adds r0, r1, 0 - bl DestroyAnimSprite - b _080B0F60 -_080B0F1E: - ldrh r0, [r1, 0x2E] - adds r0, 0x1 - strh r0, [r1, 0x2E] - b _080B0F60 -_080B0F26: - ldrh r0, [r1, 0x30] - adds r0, 0x1 - strh r0, [r1, 0x30] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _080B0F4E - movs r0, 0 - strh r0, [r1, 0x30] - ldrh r0, [r1, 0x34] - adds r0, 0x1 - strh r0, [r1, 0x34] - ands r0, r2 - lsls r0, 16 - cmp r0, 0 - beq _080B0F4A - movs r0, 0x2 - b _080B0F4C -_080B0F4A: - ldr r0, _080B0F64 @ =0x0000fffe -_080B0F4C: - strh r0, [r1, 0x24] -_080B0F4E: - ldrh r0, [r1, 0x32] - subs r0, 0x1 - strh r0, [r1, 0x32] - lsls r0, 16 - cmp r0, 0 - bne _080B0F60 - adds r0, r1, 0 - bl DestroyAnimSprite -_080B0F60: - pop {r0} - bx r0 - .align 2, 0 -_080B0F64: .4byte 0x0000fffe - thumb_func_end sub_80B0EF0 - - thumb_func_start sub_80B0F68 -sub_80B0F68: @ 80B0F68 - push {r4-r6,lr} - adds r5, r0, 0 - ldr r6, _080B0F8C @ =gBattleAnimArgs - movs r1, 0 - ldrsh r0, [r6, r1] - cmp r0, 0 - bne _080B0F94 - ldr r4, _080B0F90 @ =gBattleAnimAttacker - ldrb r0, [r4] - movs r1, 0 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - ldrh r2, [r6, 0x4] - adds r0, r2 - b _080B0FA6 - .align 2, 0 -_080B0F8C: .4byte gBattleAnimArgs -_080B0F90: .4byte gBattleAnimAttacker -_080B0F94: - ldr r4, _080B0FF0 @ =gBattleAnimTarget - ldrb r0, [r4] - movs r1, 0 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - ldrh r1, [r6, 0x4] - adds r0, r1 -_080B0FA6: - strh r0, [r5, 0x20] - ldrb r0, [r4] - movs r1, 0x1 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - ldrh r6, [r6, 0x6] - adds r0, r6 - strh r0, [r5, 0x22] - ldrh r2, [r5, 0x4] - lsls r1, r2, 22 - lsrs r1, 22 - ldr r3, _080B0FF4 @ =gBattleAnimArgs - movs r4, 0x2 - ldrsh r0, [r3, r4] - lsls r0, 4 - adds r1, r0 - ldr r4, _080B0FF8 @ =0x000003ff - adds r0, r4, 0 - ands r1, r0 - ldr r0, _080B0FFC @ =0xfffffc00 - ands r0, r2 - orrs r0, r1 - strh r0, [r5, 0x4] - movs r1, 0 - movs r0, 0 - strh r0, [r5, 0x2E] - movs r2, 0x2 - ldrsh r0, [r3, r2] - cmp r0, 0x1 - beq _080B1014 - cmp r0, 0x1 - bgt _080B1000 - cmp r0, 0 - beq _080B100A - b _080B103A - .align 2, 0 -_080B0FF0: .4byte gBattleAnimTarget -_080B0FF4: .4byte gBattleAnimArgs -_080B0FF8: .4byte 0x000003ff -_080B0FFC: .4byte 0xfffffc00 -_080B1000: - cmp r0, 0x2 - beq _080B1024 - cmp r0, 0x3 - beq _080B1034 - b _080B103A -_080B100A: - ldr r0, _080B1010 @ =0x0000fffd - b _080B1034 - .align 2, 0 -_080B1010: .4byte 0x0000fffd -_080B1014: - movs r0, 0x3 - strh r0, [r5, 0x3A] - ldr r0, _080B1020 @ =0x0000fffd - strh r0, [r5, 0x3C] - b _080B1042 - .align 2, 0 -_080B1020: .4byte 0x0000fffd -_080B1024: - ldr r0, _080B1030 @ =0x0000fffd - strh r0, [r5, 0x3A] - movs r0, 0x3 - strh r0, [r5, 0x3C] - b _080B1042 - .align 2, 0 -_080B1030: .4byte 0x0000fffd -_080B1034: - strh r0, [r5, 0x3A] - strh r0, [r5, 0x3C] - b _080B1042 -_080B103A: - adds r0, r5, 0 - bl DestroyAnimSprite - b _080B1046 -_080B1042: - ldr r0, _080B104C @ =sub_80B1050 - str r0, [r5, 0x1C] -_080B1046: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080B104C: .4byte sub_80B1050 - thumb_func_end sub_80B0F68 - - thumb_func_start sub_80B1050 -sub_80B1050: @ 80B1050 - push {lr} - adds r1, r0, 0 - ldrh r0, [r1, 0x3A] - ldrh r2, [r1, 0x20] - adds r0, r2 - strh r0, [r1, 0x20] - ldrh r0, [r1, 0x3C] - ldrh r2, [r1, 0x22] - adds r0, r2 - strh r0, [r1, 0x22] - ldrh r0, [r1, 0x2E] - adds r0, 0x1 - strh r0, [r1, 0x2E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x28 - ble _080B1078 - adds r0, r1, 0 - bl DestroyAnimSprite -_080B1078: - pop {r0} - bx r0 - thumb_func_end sub_80B1050 - - thumb_func_start sub_80B107C -sub_80B107C: @ 80B107C - push {r4,r5,lr} - adds r5, r0, 0 - ldr r0, _080B10C8 @ =gBattleAnimArgs - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _080B10D8 - ldr r4, _080B10CC @ =gBattlerAttacker - 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 r0, _080B10D0 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSpriteBGPriority - movs r1, 0x3 - ands r1, r0 - lsls r1, 2 - ldrb r2, [r5, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r5, 0x5] - ldr r0, _080B10D4 @ =gBattleAnimTarget - b _080B10F4 - .align 2, 0 -_080B10C8: .4byte gBattleAnimArgs -_080B10CC: .4byte gBattlerAttacker -_080B10D0: .4byte gBattleAnimAttacker -_080B10D4: .4byte gBattleAnimTarget -_080B10D8: - ldr r0, _080B1110 @ =gBattleAnimTarget - ldrb r0, [r0] - bl GetBattlerSpriteBGPriority - movs r1, 0x3 - ands r1, r0 - lsls r1, 2 - ldrb r2, [r5, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r5, 0x5] - ldr r0, _080B1114 @ =gBattleAnimAttacker -_080B10F4: - ldrb r0, [r0] - strh r0, [r5, 0x3C] - movs r0, 0 - strh r0, [r5, 0x2E] - movs r0, 0xC - strh r0, [r5, 0x30] - movs r0, 0x8 - strh r0, [r5, 0x32] - ldr r0, _080B1118 @ =sub_80B111C - str r0, [r5, 0x1C] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B1110: .4byte gBattleAnimTarget -_080B1114: .4byte gBattleAnimAttacker -_080B1118: .4byte sub_80B111C - thumb_func_end sub_80B107C - - thumb_func_start sub_80B111C -sub_80B111C: @ 80B111C - 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, 0xB4 - bne _080B1178 - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - movs r0, 0x10 - strh r0, [r4, 0x2E] - ldrh r0, [r4, 0x20] - strh r0, [r4, 0x30] - ldrh r0, [r4, 0x3C] - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x32] - ldrh r0, [r4, 0x22] - strh r0, [r4, 0x34] - ldrh r0, [r4, 0x3C] - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x36] - adds r0, r4, 0 - bl InitAnimLinearTranslation - ldr r1, _080B1180 @ =DestroySpriteAndMatrix - adds r0, r4, 0 - bl StoreSpriteCallbackInData6 - ldr r0, _080B1184 @ =sub_807563C - str r0, [r4, 0x1C] -_080B1178: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B1180: .4byte DestroySpriteAndMatrix -_080B1184: .4byte sub_807563C - thumb_func_end sub_80B111C - - thumb_func_start sub_80B1188 -sub_80B1188: @ 80B1188 - push {r4,r5,lr} - adds r5, r0, 0 - ldr r4, _080B11D4 @ =gBattleAnimArgs - ldrh r0, [r4] - strh r0, [r5, 0x20] - movs r2, 0x78 - strh r2, [r5, 0x22] - ldrh r0, [r4, 0x6] - strh r0, [r5, 0x2E] - adds r0, r5, 0 - adds r0, 0x36 - adds r1, r5, 0 - adds r1, 0x38 - lsls r2, 8 - bl StorePointerInVars - ldrh r0, [r4, 0x2] - strh r0, [r5, 0x3A] - ldrh r2, [r5, 0x4] - lsls r1, r2, 22 - lsrs r1, 22 - movs r3, 0x4 - ldrsh r0, [r4, r3] - lsls r0, 2 - adds r1, r0 - ldr r3, _080B11D8 @ =0x000003ff - adds r0, r3, 0 - ands r1, r0 - ldr r0, _080B11DC @ =0xfffffc00 - ands r0, r2 - orrs r0, r1 - strh r0, [r5, 0x4] - ldr r0, _080B11E0 @ =sub_80B11E4 - str r0, [r5, 0x1C] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B11D4: .4byte gBattleAnimArgs -_080B11D8: .4byte 0x000003ff -_080B11DC: .4byte 0xfffffc00 -_080B11E0: .4byte sub_80B11E4 - thumb_func_end sub_80B1188 - - thumb_func_start sub_80B11E4 -sub_80B11E4: @ 80B11E4 - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r7, r0, 0 - movs r1, 0x2E - ldrsh r0, [r7, r1] - cmp r0, 0 - beq _080B1236 - movs r2, 0x36 - ldrsh r0, [r7, r2] - movs r2, 0x38 - ldrsh r1, [r7, r2] - bl LoadPointerFromVars - adds r4, r0, 0 - movs r1, 0x3A - ldrsh r0, [r7, r1] - subs r4, r0 - adds r0, r7, 0 - adds r0, 0x36 - adds r1, r7, 0 - adds r1, 0x38 - adds r2, r4, 0 - bl StorePointerInVars - asrs r4, 8 - strh r4, [r7, 0x22] - lsls r4, 16 - asrs r4, 16 - movs r0, 0x8 - negs r0, r0 - cmp r4, r0 - bge _080B122E - adds r0, r7, 0 - bl DestroyAnimSprite - b _080B128C -_080B122E: - ldrh r0, [r7, 0x2E] - subs r0, 0x1 - strh r0, [r7, 0x2E] - b _080B128C -_080B1236: - ldr r4, _080B1298 @ =gBattleAnimAttacker - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - adds r6, r0, 0 - lsls r6, 24 - lsrs r6, 24 - ldrb r0, [r4] - movs r1, 0x3 - bl GetBattlerSpriteCoord - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - ldr r2, _080B129C @ =gBattleAnimTarget - mov r8, r2 - ldrb r0, [r2] - movs r1, 0x2 - bl GetBattlerSpriteCoord - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - mov r1, r8 - ldrb r0, [r1] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - subs r4, r6 - strh r4, [r7, 0x2E] - lsrs r0, 24 - subs r0, r5 - strh r0, [r7, 0x30] - ldrh r0, [r7, 0x20] - lsls r0, 4 - strh r0, [r7, 0x32] - ldrh r0, [r7, 0x22] - lsls r0, 4 - strh r0, [r7, 0x34] - ldr r0, _080B12A0 @ =sub_80B12A4 - str r0, [r7, 0x1C] -_080B128C: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080B1298: .4byte gBattleAnimAttacker -_080B129C: .4byte gBattleAnimTarget -_080B12A0: .4byte sub_80B12A4 - thumb_func_end sub_80B11E4 - - thumb_func_start sub_80B12A4 -sub_80B12A4: @ 80B12A4 - push {lr} - adds r2, r0, 0 - ldrh r0, [r2, 0x2E] - ldrh r1, [r2, 0x32] - adds r0, r1 - strh r0, [r2, 0x32] - ldrh r1, [r2, 0x30] - ldrh r3, [r2, 0x34] - adds r1, r3 - strh r1, [r2, 0x34] - lsls r0, 16 - asrs r0, 20 - strh r0, [r2, 0x20] - lsls r1, 16 - asrs r3, r1, 20 - strh r3, [r2, 0x22] - adds r0, 0x8 - lsls r0, 16 - movs r1, 0x80 - lsls r1, 17 - cmp r0, r1 - bhi _080B12DE - adds r1, r3, 0 - movs r0, 0x8 - negs r0, r0 - cmp r1, r0 - blt _080B12DE - cmp r1, 0x78 - ble _080B12E4 -_080B12DE: - adds r0, r2, 0 - bl DestroyAnimSprite -_080B12E4: - pop {r0} - bx r0 - thumb_func_end sub_80B12A4 - - thumb_func_start sub_80B12E8 -sub_80B12E8: @ 80B12E8 - push {r4,r5,lr} - adds r5, r0, 0 - ldr r0, _080B131C @ =gBattleAnimArgs - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _080B132C - ldr r4, _080B1320 @ =gBattlerAttacker - 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 r0, _080B1324 @ =gBattleAnimTarget - ldrb r4, [r0] - ldr r0, _080B1328 @ =gBattleAnimAttacker - b _080B1332 - .align 2, 0 -_080B131C: .4byte gBattleAnimArgs -_080B1320: .4byte gBattlerAttacker -_080B1324: .4byte gBattleAnimTarget -_080B1328: .4byte gBattleAnimAttacker -_080B132C: - ldr r0, _080B1364 @ =gBattleAnimAttacker - ldrb r4, [r0] - ldr r0, _080B1368 @ =gBattleAnimTarget -_080B1332: - ldrb r0, [r0] - bl GetBattlerSpriteBGPriority - movs r1, 0x3 - ands r1, r0 - lsls r1, 2 - ldrb r2, [r5, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r5, 0x5] - bl IsContest - lsls r0, 24 - cmp r0, 0 - beq _080B136C - ldrb r2, [r5, 0x3] - lsls r1, r2, 26 - lsrs r1, 27 - movs r0, 0x8 - orrs r1, r0 - lsls r1, 1 - subs r0, 0x47 - b _080B1386 - .align 2, 0 -_080B1364: .4byte gBattleAnimAttacker -_080B1368: .4byte gBattleAnimTarget -_080B136C: - adds r0, r4, 0 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _080B138C - ldrb r2, [r5, 0x3] - lsls r1, r2, 26 - lsrs r1, 27 - movs r0, 0x18 - orrs r1, r0 - lsls r1, 1 - subs r0, 0x57 -_080B1386: - ands r0, r2 - orrs r0, r1 - strb r0, [r5, 0x3] -_080B138C: - movs r0, 0x10 - strh r0, [r5, 0x2E] - ldrh r0, [r5, 0x20] - strh r0, [r5, 0x30] - adds r0, r4, 0 - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x32] - ldrh r0, [r5, 0x22] - strh r0, [r5, 0x34] - adds r0, r4, 0 - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x36] - adds r0, r5, 0 - bl InitAnimLinearTranslation - ldr r1, _080B13CC @ =DestroyAnimSprite - adds r0, r5, 0 - bl StoreSpriteCallbackInData6 - ldr r0, _080B13D0 @ =sub_807563C - str r0, [r5, 0x1C] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B13CC: .4byte DestroyAnimSprite -_080B13D0: .4byte sub_807563C - thumb_func_end sub_80B12E8 - - thumb_func_start sub_80B13D4 -sub_80B13D4: @ 80B13D4 - push {r4,lr} - adds r4, r0, 0 - movs r0, 0x2E - ldrsh r1, [r4, r0] - movs r2, 0x36 - ldrsh r0, [r4, r2] - cmp r1, r0 - bne _080B13EA - adds r0, r4, 0 - bl DestroyAnimSprite -_080B13EA: - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80B13D4 - - thumb_func_start sub_80B13F8 -sub_80B13F8: @ 80B13F8 - push {r4-r6,lr} - adds r5, r0, 0 - ldr r4, _080B1474 @ =gBattleAnimTarget - 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 r1, _080B1478 @ =gBattleAnimArgs - ldrh r0, [r1, 0x6] - strh r0, [r5, 0x30] - ldrh r0, [r1] - strh r0, [r5, 0x32] - ldrh r0, [r1, 0x2] - strh r0, [r5, 0x34] - ldrh r0, [r1, 0x4] - strh r0, [r5, 0x36] - ldr r0, _080B147C @ =gAnimMoveTurn - ldrb r6, [r0] - ldrb r0, [r4] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _080B1442 - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 -_080B1442: - movs r0, 0x1 - ands r6, r0 - cmp r6, 0 - beq _080B1456 - ldrh r0, [r5, 0x32] - negs r0, r0 - strh r0, [r5, 0x32] - ldrh r0, [r5, 0x30] - adds r0, 0x1 - strh r0, [r5, 0x30] -_080B1456: - ldrh r1, [r5, 0x30] - lsls r1, 24 - lsrs r1, 24 - adds r0, r5, 0 - bl StartSpriteAnim - ldrh r0, [r5, 0x32] - strh r0, [r5, 0x24] - ldrh r0, [r5, 0x34] - strh r0, [r5, 0x26] - ldr r0, _080B1480 @ =sub_80B13D4 - str r0, [r5, 0x1C] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080B1474: .4byte gBattleAnimTarget -_080B1478: .4byte gBattleAnimArgs -_080B147C: .4byte gAnimMoveTurn -_080B1480: .4byte sub_80B13D4 - thumb_func_end sub_80B13F8 - - thumb_func_start sub_80B1484 -sub_80B1484: @ 80B1484 - push {r4,lr} - adds r4, r0, 0 - ldr r0, _080B149C @ =gBattleAnimArgs - movs r1, 0x4 - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _080B14A0 - adds r0, r4, 0 - movs r1, 0 - bl InitSpritePosToAnimAttacker - b _080B14A8 - .align 2, 0 -_080B149C: .4byte gBattleAnimArgs -_080B14A0: - adds r0, r4, 0 - movs r1, 0 - bl InitSpritePosToAnimTarget -_080B14A8: - bl IsContest - lsls r0, 24 - cmp r0, 0 - beq _080B14BC - adds r0, r4, 0 - movs r1, 0x2 - bl StartSpriteAnim - b _080B14D2 -_080B14BC: - ldr r0, _080B14E4 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080B14D2 - adds r0, r4, 0 - movs r1, 0x1 - bl StartSpriteAnim -_080B14D2: - ldr r0, _080B14E8 @ =RunStoredCallbackWhenAnimEnds - str r0, [r4, 0x1C] - ldr r1, _080B14EC @ =DestroyAnimSprite - adds r0, r4, 0 - bl StoreSpriteCallbackInData6 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B14E4: .4byte gBattleAnimAttacker -_080B14E8: .4byte RunStoredCallbackWhenAnimEnds -_080B14EC: .4byte DestroyAnimSprite - thumb_func_end sub_80B1484 - - thumb_func_start sub_80B14F0 -sub_80B14F0: @ 80B14F0 - push {r4,lr} - adds r4, r0, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _080B152A - ldrh r0, [r4, 0x30] - adds r0, 0x28 - movs r1, 0xFF - ands r0, r1 - strh r0, [r4, 0x30] - movs r1, 0x30 - ldrsh r0, [r4, r1] - movs r1, 0x2 - bl Sin - strh r0, [r4, 0x24] - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x28 - ble _080B152A - adds r0, r4, 0 - bl DestroyAnimSprite -_080B152A: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80B14F0 - - thumb_func_start sub_80B1530 -sub_80B1530: @ 80B1530 - push {r4-r7,lr} - lsls r0, 24 - lsrs r6, r0, 24 - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - ldr r1, _080B1560 @ =gTasks - adds r4, r0, r1 - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r0, 0x1 - beq _080B1568 - cmp r0, 0x1 - bgt _080B1582 - cmp r0, 0 - bne _080B1582 - movs r0, 0 - bl sub_8075458 - ldr r0, _080B1564 @ =gBattleAnimArgs - ldrh r0, [r0] - strh r0, [r4, 0x18] - b _080B157A - .align 2, 0 -_080B1560: .4byte gTasks -_080B1564: .4byte gBattleAnimArgs -_080B1568: - ldrh r0, [r4, 0x18] - subs r0, 0x1 - strh r0, [r4, 0x18] - lsls r0, 16 - asrs r0, 16 - movs r1, 0x1 - negs r1, r1 - cmp r0, r1 - bne _080B158E -_080B157A: - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - b _080B158E -_080B1582: - movs r2, 0xA0 - lsls r2, 3 - adds r0, r2, 0 - ldrh r1, [r4, 0x1A] - adds r0, r1 - strh r0, [r4, 0x1A] -_080B158E: - movs r2, 0xB0 - lsls r2, 4 - adds r0, r2, 0 - ldrh r1, [r4, 0x1C] - adds r0, r1 - strh r0, [r4, 0x1C] - ldr r0, _080B15BC @ =gBattleAnimTarget - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _080B15C4 - ldr r1, _080B15C0 @ =gBattle_BG3_X - ldrh r0, [r4, 0x1A] - lsls r0, 16 - asrs r0, 24 - ldrh r2, [r1] - adds r0, r2 - strh r0, [r1] - adds r7, r1, 0 - b _080B15D4 - .align 2, 0 -_080B15BC: .4byte gBattleAnimTarget -_080B15C0: .4byte gBattle_BG3_X -_080B15C4: - ldr r2, _080B1614 @ =gBattle_BG3_X - ldrh r1, [r4, 0x1A] - lsls r1, 16 - asrs r1, 24 - ldrh r0, [r2] - subs r0, r1 - strh r0, [r2] - adds r7, r2, 0 -_080B15D4: - ldr r3, _080B1618 @ =gBattle_BG3_Y - ldrh r2, [r4, 0x1C] - lsls r0, r2, 16 - asrs r0, 24 - ldrh r1, [r3] - adds r0, r1 - strh r0, [r3] - movs r0, 0xFF - ldrb r1, [r4, 0x1A] - movs r5, 0 - strh r1, [r4, 0x1A] - ands r0, r2 - strh r0, [r4, 0x1C] - ldr r0, _080B161C @ =gBattleAnimArgs - movs r2, 0xE - ldrsh r1, [r0, r2] - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - bne _080B160C - strh r5, [r7] - strh r5, [r3] - movs r0, 0x1 - bl sub_8075458 - adds r0, r6, 0 - bl DestroyAnimVisualTask -_080B160C: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080B1614: .4byte gBattle_BG3_X -_080B1618: .4byte gBattle_BG3_Y -_080B161C: .4byte gBattleAnimArgs - thumb_func_end sub_80B1530 - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/fire.s b/asm/fire.s index efdfc8315..11c4bcae8 100644 --- a/asm/fire.s +++ b/asm/fire.s @@ -413,7 +413,7 @@ _080ACC1A: negs r0, r0 strh r0, [r1, 0x4] _080ACC22: - ldr r1, _080ACC40 @ =sub_8075F0C + ldr r1, _080ACC40 @ =AnimSnoreZ str r1, [r6, 0x1C] adds r0, r6, 0 bl _call_via_r1 @@ -424,7 +424,7 @@ _080ACC22: _080ACC34: .4byte gBattleAnimAttacker _080ACC38: .4byte gBattleAnimTarget _080ACC3C: .4byte gBattleAnimArgs -_080ACC40: .4byte sub_8075F0C +_080ACC40: .4byte AnimSnoreZ thumb_func_end sub_80ACBDC thumb_func_start sub_80ACC44 @@ -436,12 +436,12 @@ sub_80ACC44: @ 80ACC44 ldrh r1, [r2, 0x4] negs r1, r1 strh r1, [r2, 0x4] - ldr r1, _080ACC5C @ =sub_8075F0C + ldr r1, _080ACC5C @ =AnimSnoreZ str r1, [r0, 0x1C] bx lr .align 2, 0 _080ACC58: .4byte gBattleAnimArgs -_080ACC5C: .4byte sub_8075F0C +_080ACC5C: .4byte AnimSnoreZ thumb_func_end sub_80ACC44 thumb_func_start sub_80ACC60 diff --git a/data/battle_anim_effects_misc.s b/data/battle_anim_effects_misc.s index 1aa9f6e7a..afba51599 100644 --- a/data/battle_anim_effects_misc.s +++ b/data/battle_anim_effects_misc.s @@ -202,4 +202,4 @@ gUnknown_83E652C:: @ 83E652C .incbin "baserom.gba", 0x3E652C, 0x78 gUnknown_83E65A4:: @ 83E65A4 - .incbin "baserom.gba", 0x3E65A4, 0x3F0 + .incbin "baserom.gba", 0x3E65A4, 0xE8 diff --git a/include/battle_anim.h b/include/battle_anim.h index bbfecc1e2..849b92f57 100644 --- a/include/battle_anim.h +++ b/include/battle_anim.h @@ -245,7 +245,7 @@ u8 sub_8075D80(u8 a1); void AnimSpriteOnMonPos(struct Sprite *sprite); void TranslateAnimSpriteToTargetMonLocation(struct Sprite *sprite); void AnimThrowProjectile(struct Sprite *sprite); -void sub_8075F0C(struct Sprite *sprite); +void AnimSnoreZ(struct Sprite *sprite); s16 CloneBattlerSpriteWithBlend(u8 animBattler); void obj_delete_but_dont_free_vram(struct Sprite *sprite); void sub_8076048(u8 taskId); @@ -293,6 +293,7 @@ void sub_8099BD4(u8 taskId); // normal.c extern const struct SpriteTemplate gUnknown_83E7C98; +extern const struct SpriteTemplate gBasicHitSplatSpriteTemplate; u32 UnpackSelectedBattleAnimPalettes(s16 selector); void sub_80B9BDC(u8 taskId); @@ -353,6 +354,9 @@ void sub_80B194C(u8 taskId); void sub_80B1D3C(struct Sprite *sprite); void sub_80B2868(u8 taskId); +// fighting.c +void sub_80B1530(u8 taskId); + // water.s extern const union AnimCmd *const gUnknown_83E5958[]; extern const union AnimCmd *const gUnknown_83E5A78[]; diff --git a/ld_script.txt b/ld_script.txt index 9cd32b6a7..15a4e31a0 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -160,7 +160,7 @@ SECTIONS { asm/fire.o(.text); asm/electric.o(.text); asm/ice.o(.text); - asm/fighting.o(.text); + src/fighting.o(.text); src/poison.o(.text); src/flying.o(.text); src/psychic.o(.text); @@ -450,6 +450,7 @@ SECTIONS { src/pokemon_size_record.o(.rodata); data/item_use.o(.rodata); data/battle_anim_effects_misc.o(.rodata); + src/fighting.o(.rodata); src/poison.o(.rodata); src/flying.o(.rodata); src/psychic.o(.rodata); diff --git a/src/battle_anim_mons.c b/src/battle_anim_mons.c index c19af4cb7..34e1f3042 100644 --- a/src/battle_anim_mons.c +++ b/src/battle_anim_mons.c @@ -1409,7 +1409,7 @@ static void AnimThrowProjectile_Step(struct Sprite *sprite) DestroyAnimSprite(sprite); } -void sub_8075F0C(struct Sprite *sprite) +void AnimSnoreZ(struct Sprite *sprite) { bool8 r4; u8 battlerId, coordType; diff --git a/src/fighting.c b/src/fighting.c new file mode 100644 index 000000000..a783f02f5 --- /dev/null +++ b/src/fighting.c @@ -0,0 +1,971 @@ +#include "global.h" +#include "battle_anim.h" +#include "gpu_regs.h" +#include "random.h" +#include "task.h" +#include "trig.h" + +static void unc_080B08A0(struct Sprite *sprite); +static void sub_80B08DC(struct Sprite *sprite); +static void sub_80B0928(struct Sprite *sprite); +static void AnimBasicFistOrFoot(struct Sprite *sprite); +static void sub_80B09A4(struct Sprite *sprite); +static void sub_80B0B80(struct Sprite *sprite); +static void sub_80B0C28(struct Sprite *sprite); +static void AnimSpinningKickOrPunch(struct Sprite *sprite); +static void AnimStompFoot(struct Sprite *sprite); +static void sub_80B0DF0(struct Sprite *sprite); +static void sub_80B0E80(struct Sprite *sprite); +static void sub_80B0F68(struct Sprite *sprite); +static void sub_80B107C(struct Sprite *sprite); +static void sub_80B1188(struct Sprite *sprite); +static void sub_80B12E8(struct Sprite *sprite); +static void sub_80B13F8(struct Sprite *sprite); +static void sub_80B1484(struct Sprite *sprite); +static void sub_80B14F0(struct Sprite *sprite); +static void sub_80B0B2C(struct Sprite *sprite); +static void sub_80B0BD8(struct Sprite *sprite); +static void sub_80B0CB4(struct Sprite *sprite); +static void AnimSpinningKickOrPunchFinish(struct Sprite *sprite); +static void AnimStompFootStep(struct Sprite *sprite); +static void AnimStompFootEnd(struct Sprite *sprite); +static void sub_80B0EF0(struct Sprite *sprite); +static void sub_80B1050(struct Sprite *sprite); +static void sub_80B111C(struct Sprite *sprite); +static void sub_80B11E4(struct Sprite *sprite); +static void sub_80B12A4(struct Sprite *sprite); + +const struct SpriteTemplate gUnknown_83E668C = +{ + .tileTag = ANIM_TAG_HUMANOID_FOOT, + .paletteTag = ANIM_TAG_HUMANOID_FOOT, + .oam = &gOamData_83AC9D8, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = unc_080B08A0, +}; + +static const union AnimCmd gUnknown_83E66A4[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd gUnknown_83E66AC[] = +{ + ANIMCMD_FRAME(16, 1), + ANIMCMD_END, +}; + +static const union AnimCmd gUnknown_83E66B4[] = +{ + ANIMCMD_FRAME(32, 1), + ANIMCMD_END, +}; + +static const union AnimCmd gUnknown_83E66BC[] = +{ + ANIMCMD_FRAME(48, 1), + ANIMCMD_END, +}; + +static const union AnimCmd gUnknown_83E66C4[] = +{ + ANIMCMD_FRAME(48, 1, .hFlip = TRUE), + ANIMCMD_END, +}; + +static const union AnimCmd *const gUnknown_83E66CC[] = +{ + gUnknown_83E66A4, +}; + +static const union AnimCmd *const gUnknown_83E66D0[] = +{ + gUnknown_83E66AC, + gUnknown_83E66B4, +}; + +static const union AnimCmd *const gUnknown_83E66D8[] = +{ + gUnknown_83E66BC, + gUnknown_83E66C4, +}; + +const struct SpriteTemplate gUnknown_83E66E0 = +{ + .tileTag = ANIM_TAG_HANDS_AND_FEET, + .paletteTag = ANIM_TAG_HANDS_AND_FEET, + .oam = &gOamData_83AC9D8, + .anims = gUnknown_83E66CC, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B08DC, +}; + +const struct SpriteTemplate gUnknown_83E66F8 = +{ + .tileTag = ANIM_TAG_HANDS_AND_FEET, + .paletteTag = ANIM_TAG_HANDS_AND_FEET, + .oam = &gOamData_83AC9D8, + .anims = gUnknown_83E66CC, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B0928, +}; + +const struct SpriteTemplate gFistFootSpriteTemplate = +{ + .tileTag = ANIM_TAG_HANDS_AND_FEET, + .paletteTag = ANIM_TAG_HANDS_AND_FEET, + .oam = &gOamData_83AC9D8, + .anims = gUnknown_83E66CC, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimBasicFistOrFoot, +}; + +const struct SpriteTemplate gUnknown_83E6728 = +{ + .tileTag = ANIM_TAG_HANDS_AND_FEET, + .paletteTag = ANIM_TAG_HANDS_AND_FEET, + .oam = &gOamData_83AC9D8, + .anims = gUnknown_83E66CC, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B09A4, +}; + +const struct SpriteTemplate gUnknown_83E6740 = +{ + .tileTag = ANIM_TAG_HANDS_AND_FEET, + .paletteTag = ANIM_TAG_HANDS_AND_FEET, + .oam = &gOamData_83AC9D8, + .anims = gUnknown_83E66D8, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B0B80, +}; + +const struct SpriteTemplate gUnknown_83E6758 = +{ + .tileTag = ANIM_TAG_HANDS_AND_FEET, + .paletteTag = ANIM_TAG_HANDS_AND_FEET, + .oam = &gOamData_83AC9D8, + .anims = gUnknown_83E66D0, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B0C28, +}; + +static const union AffineAnimCmd gUnknown_83E6770[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 20, 1), + AFFINEANIMCMD_JUMP(1), +}; + +static const union AffineAnimCmd *const gUnknown_83E6788[] = +{ + gUnknown_83E6770, +}; + +const struct SpriteTemplate gUnknown_83E678C = +{ + .tileTag = ANIM_TAG_HANDS_AND_FEET, + .paletteTag = ANIM_TAG_HANDS_AND_FEET, + .oam = &gOamData_83ACA98, + .anims = gUnknown_83E66CC, + .images = NULL, + .affineAnims = gUnknown_83E6788, + .callback = AnimSpinningKickOrPunch, +}; + +static const union AffineAnimCmd gUnknown_83E67A4[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0xFFFC, 0xFFFC, 20, 1), + AFFINEANIMCMD_JUMP(1), +}; + +static const union AffineAnimCmd *const gUnknown_83E67BC[] = +{ + gUnknown_83E67A4, +}; + +const struct SpriteTemplate gMegaPunchKickSpriteTemplate = +{ + .tileTag = ANIM_TAG_HANDS_AND_FEET, + .paletteTag = ANIM_TAG_HANDS_AND_FEET, + .oam = &gOamData_83ACA98, + .anims = gUnknown_83E66CC, + .images = NULL, + .affineAnims = gUnknown_83E67BC, + .callback = AnimSpinningKickOrPunch, +}; + +const struct SpriteTemplate gUnknown_83E67D8 = +{ + .tileTag = ANIM_TAG_HANDS_AND_FEET, + .paletteTag = ANIM_TAG_HANDS_AND_FEET, + .oam = &gOamData_83AC9D8, + .anims = gUnknown_83E66D0, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimStompFoot, +}; + +const struct SpriteTemplate gUnknown_83E67F0 = +{ + .tileTag = ANIM_TAG_DUCK, + .paletteTag = ANIM_TAG_DUCK, + .oam = &gOamData_83AC9D0, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B0DF0, +}; + +const struct SpriteTemplate gUnknown_83E6808 = +{ + .tileTag = ANIM_TAG_BLUE_LIGHT_WALL, + .paletteTag = ANIM_TAG_BLUE_LIGHT_WALL, + .oam = &gOamData_83ACB00, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B0E80, +}; + +const struct SpriteTemplate gUnknown_83E6820 = +{ + .tileTag = ANIM_TAG_TORN_METAL, + .paletteTag = ANIM_TAG_TORN_METAL, + .oam = &gOamData_83AC9D8, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B0F68, +}; + +static const union AffineAnimCmd gUnknown_83E6838[] = +{ + AFFINEANIMCMD_FRAME(0x20, 0x20, 0, 0), + AFFINEANIMCMD_FRAME(0x4, 0x4, 0, 64), + AFFINEANIMCMD_FRAME(0xFFFA, 0xFFFA, 0, 8), + AFFINEANIMCMD_FRAME(0x6, 0x6, 0, 8), + AFFINEANIMCMD_JUMP(2), +}; + +static const union AffineAnimCmd *const gUnknown_83E6860[] = +{ + gUnknown_83E6838, +}; + +const struct SpriteTemplate gUnknown_83E6864 = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .oam = &gOamData_83ACBC0, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_83E6860, + .callback = sub_80B107C, +}; + +const struct SpriteTemplate gUnknown_83E687C = +{ + .tileTag = ANIM_TAG_FLAT_ROCK, + .paletteTag = ANIM_TAG_FLAT_ROCK, + .oam = &gOamData_83AC9D0, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B1188, +}; + +const struct SpriteTemplate gUnknown_83E6894 = +{ + .tileTag = ANIM_TAG_METEOR, + .paletteTag = ANIM_TAG_METEOR, + .oam = &gOamData_83AC9E0, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B12E8, +}; + +const struct SpriteTemplate gUnknown_83E68AC = +{ + .tileTag = ANIM_TAG_HANDS_AND_FEET, + .paletteTag = ANIM_TAG_HANDS_AND_FEET, + .oam = &gOamData_83AC9D8, + .anims = gUnknown_83E66CC, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B13F8, +}; + +static const union AnimCmd gUnknown_83E68C4[] = +{ + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(16, 4), + ANIMCMD_FRAME(32, 4), + ANIMCMD_END, +}; + +static const union AnimCmd gUnknown_83E68D4[] = +{ + ANIMCMD_FRAME(0, 4, .vFlip = TRUE), + ANIMCMD_FRAME(16, 4, .vFlip = TRUE), + ANIMCMD_FRAME(32, 4, .vFlip = TRUE), + ANIMCMD_END, +}; + +static const union AnimCmd gUnknown_83E68E4[] = +{ + ANIMCMD_FRAME(0, 4, .hFlip = TRUE), + ANIMCMD_FRAME(16, 4, .hFlip = TRUE), + ANIMCMD_FRAME(32, 4, .hFlip = TRUE), + ANIMCMD_END, +}; + +static const union AnimCmd *const gUnknown_83E68F4[] = +{ + gUnknown_83E68C4, + gUnknown_83E68D4, + gUnknown_83E68E4, +}; + +const struct SpriteTemplate gUnknown_83E6900 = +{ + .tileTag = ANIM_TAG_PURPLE_SCRATCH, + .paletteTag = ANIM_TAG_PURPLE_SCRATCH, + .oam = &gOamData_83AC9D8, + .anims = gUnknown_83E68F4, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B1484, +}; + +static const union AnimCmd gUnknown_83E6918[] = +{ + ANIMCMD_FRAME(0, 6), + ANIMCMD_FRAME(64, 6), + ANIMCMD_END, +}; + +static const union AnimCmd gUnknown_83E6924[] = +{ + ANIMCMD_FRAME(0, 6, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_FRAME(64, 6, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_END, +}; + +static const union AnimCmd gUnknown_83E6930[] = +{ + ANIMCMD_FRAME(0, 6, .hFlip = TRUE), + ANIMCMD_FRAME(64, 6, .hFlip = TRUE), + ANIMCMD_END, +}; + +static const union AnimCmd *const gUnknown_83E693C[] = +{ + gUnknown_83E6918, + gUnknown_83E6924, + gUnknown_83E6930, +}; + +const struct SpriteTemplate gUnknown_83E6948 = +{ + .tileTag = ANIM_TAG_PURPLE_SWIPE, + .paletteTag = ANIM_TAG_PURPLE_SWIPE, + .oam = &gOamData_83AC9E0, + .anims = gUnknown_83E693C, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B1484, +}; + +static const union AffineAnimCmd gUnknown_83E6960[] = +{ + AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0), + AFFINEANIMCMD_FRAME(0xFFE0, 0xFFE0, 0, 8), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd *const gUnknown_83E6978[] = +{ + gUnknown_83E6960, +}; + +const struct SpriteTemplate gUnknown_83E697C = +{ + .tileTag = ANIM_TAG_HANDS_AND_FEET, + .paletteTag = ANIM_TAG_HANDS_AND_FEET, + .oam = &gOamData_83ACA98, + .anims = gUnknown_83E66CC, + .images = NULL, + .affineAnims = gUnknown_83E6978, + .callback = sub_80B14F0, +}; + +static void unc_080B08A0(struct Sprite *sprite) +{ + SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]); + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[0] = 15; + sprite->callback = WaitAnimForDuration; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); +} + +static void sub_80B08DC(struct Sprite *sprite) +{ + if (gBattleAnimArgs[7] == 1 && GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + { + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + gBattleAnimArgs[3] = -gBattleAnimArgs[3]; + } + StartSpriteAnim(sprite, gBattleAnimArgs[6]); + gBattleAnimArgs[6] = 0; + AnimSnoreZ(sprite); +} + +static void sub_80B0928(struct Sprite *sprite) +{ + if (IsContest()) + { + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + gBattleAnimArgs[3] = -gBattleAnimArgs[3]; + } + sub_80B08DC(sprite); +} + +// Displays a basic fist or foot sprite for a given duration. +// Used by many fighting moves (and elemental "punch" moves). +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: duration +// arg 3: ? (todo: related to initial pixel offsets) +// arg 4: anim num +static void AnimBasicFistOrFoot(struct Sprite *sprite) +{ + StartSpriteAnim(sprite, gBattleAnimArgs[4]); + if (gBattleAnimArgs[3] == 0) + InitSpritePosToAnimAttacker(sprite, 1); + else + InitSpritePosToAnimTarget(sprite, TRUE); + sprite->data[0] = gBattleAnimArgs[2]; + sprite->callback = WaitAnimForDuration; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); +} + +static void sub_80B09A4(struct Sprite *sprite) +{ + u8 battler; + s16 xMod, yMod; + s16 x, y; + + if (gBattleAnimArgs[0] == 0) + battler = gBattleAnimAttacker; + else + battler = gBattleAnimTarget; + + if (gBattleAnimArgs[2] < 0) + gBattleAnimArgs[2] = Random() % 5; + StartSpriteAnim(sprite, gBattleAnimArgs[2]); + sprite->pos1.x = GetBattlerSpriteCoord(battler, 2); + sprite->pos1.y = GetBattlerSpriteCoord(battler, 3); + xMod = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_WIDTH) / 2; + yMod = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_HEIGHT) / 4; + x = Random() % xMod; + y = Random() % yMod; + if (Random() & 1) + x *= -1; + if (Random() & 1) + y *= -1; + if ((gBattlerPositions[battler] & BIT_SIDE) == B_SIDE_PLAYER) + y += 0xFFF0; + sprite->pos1.x += x; + sprite->pos1.y += y; + sprite->data[0] = gBattleAnimArgs[1]; + sprite->data[7] = CreateSprite(&gBasicHitSplatSpriteTemplate, sprite->pos1.x, sprite->pos1.y, sprite->subpriority + 1); + if (sprite->data[7] != 64) + { + StartSpriteAffineAnim(&gSprites[sprite->data[7]], 0); + gSprites[sprite->data[7]].callback = SpriteCallbackDummy; + } + sprite->callback = sub_80B0B2C; +} + +static void sub_80B0B2C(struct Sprite *sprite) +{ + if (sprite->data[0] == 0) + { + if (sprite->data[7] != 64) + { + FreeOamMatrix(gSprites[sprite->data[7]].oam.matrixNum); + DestroySprite(&gSprites[sprite->data[7]]); + } + DestroyAnimSprite(sprite); + } + else + { + --sprite->data[0]; + } +} + +static void sub_80B0B80(struct Sprite *sprite) +{ + InitSpritePosToAnimTarget(sprite, TRUE); + sprite->data[0] = 30; + if (gBattleAnimArgs[2] == 0) + { + sprite->data[2] = sprite->pos1.x - 20; + } + else + { + sprite->data[2] = sprite->pos1.x + 20; + sprite->hFlip = 1; + } + sprite->data[4] = sprite->pos1.y - 20; + sprite->callback = StartAnimLinearTranslation; + StoreSpriteCallbackInData6(sprite, sub_80B0BD8); +} + +static void sub_80B0BD8(struct Sprite *sprite) +{ + if (++sprite->data[5] == 11) + { + sprite->data[2] = sprite->pos1.x - sprite->pos2.x; + sprite->data[4] = sprite->pos1.y - sprite->pos2.y; + sprite->data[0] = 8; + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.y = 0; + sprite->pos2.x = 0; + sprite->callback = StartAnimLinearTranslation; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); + } +} + +static void sub_80B0C28(struct Sprite *sprite) +{ + if (BATTLE_PARTNER(gBattleAnimAttacker) == gBattleAnimTarget && GetBattlerPosition(gBattleAnimTarget) < B_POSITION_PLAYER_RIGHT) + gBattleAnimArgs[0] *= -1; + InitSpritePosToAnimTarget(sprite, TRUE); + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + sprite->data[0] = gBattleAnimArgs[3]; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = sprite->pos1.x + gBattleAnimArgs[2]; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = sprite->pos1.y; + InitAnimLinearTranslation(sprite); + sprite->data[5] = gBattleAnimArgs[5]; + sprite->data[6] = gBattleAnimArgs[4]; + sprite->data[7] = 0; + sprite->callback = sub_80B0CB4; +} + +static void sub_80B0CB4(struct Sprite *sprite) +{ + if (!AnimTranslateLinear(sprite)) + { + sprite->pos2.y += Sin(sprite->data[7] >> 8, sprite->data[5]); + sprite->data[7] += sprite->data[6]; + } + else + { + DestroyAnimSprite(sprite); + } +} + +// Animates the spinning, shrinking kick or punch, which then +// reappears at full size. Used by moves such as MOVE_MEGA_PUNCH and MOVE_MEGA_KICK. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: anim num +// arg 3: spin duration +static void AnimSpinningKickOrPunch(struct Sprite *sprite) +{ + InitSpritePosToAnimTarget(sprite, TRUE); + StartSpriteAnim(sprite, gBattleAnimArgs[2]); + sprite->data[0] = gBattleAnimArgs[3]; + sprite->callback = WaitAnimForDuration; + StoreSpriteCallbackInData6(sprite, AnimSpinningKickOrPunchFinish); +} + +static void AnimSpinningKickOrPunchFinish(struct Sprite *sprite) +{ + StartSpriteAffineAnim(sprite, 0); + sprite->affineAnimPaused = 1; + sprite->data[0] = 20; + sprite->callback = WaitAnimForDuration; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); +} + +// Animates MOVE_STOMP's foot that slides downward. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: initial wait duration +static void AnimStompFoot(struct Sprite *sprite) +{ + InitSpritePosToAnimTarget(sprite, TRUE); + sprite->data[0] = gBattleAnimArgs[2]; + sprite->callback = AnimStompFootStep; +} + +static void AnimStompFootStep(struct Sprite *sprite) +{ + if (--sprite->data[0] == -1) + { + sprite->data[0] = 6; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sprite->callback = StartAnimLinearTranslation; + StoreSpriteCallbackInData6(sprite, AnimStompFootEnd); + } +} + +static void AnimStompFootEnd(struct Sprite *sprite) +{ + sprite->data[0] = 15; + sprite->callback = WaitAnimForDuration; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); +} + +static void sub_80B0DF0(struct Sprite *sprite) +{ + if (sprite->data[0] == 0) + { + InitSpritePosToAnimTarget(sprite, TRUE); + sprite->data[1] = gBattleAnimArgs[2]; + sprite->data[2] = gBattleAnimArgs[3]; + ++sprite->data[0]; + } + else + { + sprite->data[4] += sprite->data[1]; + sprite->pos2.x = sprite->data[4] >> 8; + sprite->pos2.y = Sin(sprite->data[3], sprite->data[2]); + sprite->data[3] = (sprite->data[3] + 3) & 0xFF; + if (sprite->data[3] > 100) + sprite->invisible = sprite->data[3] % 2; + if (sprite->data[3] > 120) + DestroyAnimSprite(sprite); + } +} + +static void sub_80B0E80(struct Sprite *sprite) +{ + if (gBattleAnimArgs[0] == 0) + { + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1); + } + else + { + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 0); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 1); + } + sprite->pos1.x += gBattleAnimArgs[1]; + sprite->pos1.y += gBattleAnimArgs[2]; + sprite->data[0] = 0; + sprite->data[1] = gBattleAnimArgs[3]; + sprite->data[2] = gBattleAnimArgs[4]; + sprite->data[3] = 0; + sprite->callback = sub_80B0EF0; +} + +static void sub_80B0EF0(struct Sprite *sprite) +{ + switch (sprite->data[0]) + { + case 0: + if (--sprite->data[1] == 0) + { + if (sprite->data[2] == 0) + DestroyAnimSprite(sprite); + else + ++sprite->data[0]; + } + break; + case 1: + if (++sprite->data[1] > 1) + { + sprite->data[1] = 0; + ++sprite->data[3]; + if (sprite->data[3] & 1) + sprite->pos2.x = 2; + else + sprite->pos2.x = -2; + } + + if (--sprite->data[2] == 0) + DestroyAnimSprite(sprite); + break; + } +} + +static void sub_80B0F68(struct Sprite *sprite) +{ + if (gBattleAnimArgs[0] == 0) + { + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0) + gBattleAnimArgs[2]; + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + gBattleAnimArgs[3]; + } + else + { + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 0) + gBattleAnimArgs[2]; + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + gBattleAnimArgs[3]; + } + sprite->oam.tileNum += gBattleAnimArgs[1] * 16; + sprite->data[0] = 0; + switch (gBattleAnimArgs[1]) + { + case 0: + sprite->data[6] = -3; + sprite->data[7] = -3; + break; + case 1: + sprite->data[6] = 3; + sprite->data[7] = -3; + break; + case 2: + sprite->data[6] = -3; + sprite->data[7] = 3; + break; + case 3: + sprite->data[6] = 3; + sprite->data[7] = 3; + break; + default: + DestroyAnimSprite(sprite); + return; + } + sprite->callback = sub_80B1050; +} + +static void sub_80B1050(struct Sprite *sprite) +{ + sprite->pos1.x += sprite->data[6]; + sprite->pos1.y += sprite->data[7]; + if (++sprite->data[0] > 40) + DestroyAnimSprite(sprite); +} + +static void sub_80B107C(struct Sprite *sprite) +{ + if (gBattleAnimArgs[0] == 0) + { + sprite->pos1.x = GetBattlerSpriteCoord(gBattlerAttacker, 2); + sprite->pos1.y = GetBattlerSpriteCoord(gBattlerAttacker, 3); + sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimAttacker); + sprite->data[7] = gBattleAnimTarget; + } + else + { + sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimTarget); + sprite->data[7] = gBattleAnimAttacker; + } + sprite->data[0] = 0; + sprite->data[1] = 12; + sprite->data[2] = 8; + sprite->callback = sub_80B111C; +} + +static void sub_80B111C(struct Sprite *sprite) +{ + if (++sprite->data[0] == 180) + { + SetGpuReg(REG_OFFSET_BLDCNT, 0); + sprite->data[0] = 16; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = GetBattlerSpriteCoord(sprite->data[7], 2); + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = GetBattlerSpriteCoord(sprite->data[7], 3); + InitAnimLinearTranslation(sprite); + StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); + sprite->callback = sub_807563C; + } +} + +static void sub_80B1188(struct Sprite *sprite) +{ + sprite->pos1.x = gBattleAnimArgs[0]; + sprite->pos1.y = 120; + sprite->data[0] = gBattleAnimArgs[3]; + StorePointerInVars(&sprite->data[4], &sprite->data[5], (void *)(sprite->pos1.y << 8)); + sprite->data[6] = gBattleAnimArgs[1]; + sprite->oam.tileNum += gBattleAnimArgs[2] * 4; + sprite->callback = sub_80B11E4; +} + +static void sub_80B11E4(struct Sprite *sprite) +{ + void *var0; + + if (sprite->data[0] != 0) + { + var0 = LoadPointerFromVars(sprite->data[4], sprite->data[5]); + var0 -= sprite->data[6]; + StorePointerInVars(&sprite->data[4], &sprite->data[5], var0); + var0 = (void *)(((intptr_t)var0) >> 8); + sprite->pos1.y = (intptr_t)var0; + if (sprite->pos1.y < -8) + DestroyAnimSprite(sprite); + else + --sprite->data[0]; + } + else + { + s16 pos0 = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); + s16 pos1 = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + s16 pos2 = GetBattlerSpriteCoord(gBattleAnimTarget, 2); + s16 pos3 = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + + sprite->data[0] = pos2 - pos0; + sprite->data[1] = pos3 - pos1; + sprite->data[2] = sprite->pos1.x << 4; + sprite->data[3] = sprite->pos1.y << 4; + sprite->callback = sub_80B12A4; + } +} + +static void sub_80B12A4(struct Sprite *sprite) +{ + u16 edgeX; + + sprite->data[2] += sprite->data[0]; + sprite->data[3] += sprite->data[1]; + sprite->pos1.x = sprite->data[2] >> 4; + sprite->pos1.y = sprite->data[3] >> 4; + edgeX = sprite->pos1.x + 8; + if (edgeX > 256 || sprite->pos1.y < -8 || sprite->pos1.y > 120) + DestroyAnimSprite(sprite); +} + +static void sub_80B12E8(struct Sprite *sprite) +{ + u8 battler; + + if (gBattleAnimArgs[0] == 0) + { + sprite->pos1.x = GetBattlerSpriteCoord(gBattlerAttacker, 2); + sprite->pos1.y = GetBattlerSpriteCoord(gBattlerAttacker, 3); + battler = gBattleAnimTarget; + sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimAttacker); + } + else + { + battler = gBattleAnimAttacker; + sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimTarget); + } + if (IsContest()) + sprite->oam.matrixNum |= ST_OAM_HFLIP; + else if (GetBattlerSide(battler) == B_SIDE_PLAYER) + sprite->oam.matrixNum |= (ST_OAM_HFLIP | ST_OAM_VFLIP); + sprite->data[0] = 16; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = GetBattlerSpriteCoord(battler, 2); + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = GetBattlerSpriteCoord(battler, 3); + InitAnimLinearTranslation(sprite); + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); + sprite->callback = sub_807563C; +} + +static void sub_80B13D4(struct Sprite *sprite) +{ + if (sprite->data[0] == sprite->data[4]) + DestroyAnimSprite(sprite); + ++sprite->data[0]; +} + +static void sub_80B13F8(struct Sprite *sprite) +{ + u8 turn; + + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 2); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sprite->data[1] = gBattleAnimArgs[3]; + sprite->data[2] = gBattleAnimArgs[0]; + sprite->data[3] = gBattleAnimArgs[1]; + sprite->data[4] = gBattleAnimArgs[2]; + turn = gAnimMoveTurn; + if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER) + ++turn; + if (turn & 1) + { + sprite->data[2] = -sprite->data[2]; + ++sprite->data[1]; + } + StartSpriteAnim(sprite, sprite->data[1]); + sprite->pos2.x = sprite->data[2]; + sprite->pos2.y = sprite->data[3]; + sprite->callback = sub_80B13D4; +} + +static void sub_80B1484(struct Sprite *sprite) +{ + if (gBattleAnimArgs[2] == 0) + InitSpritePosToAnimAttacker(sprite, 0); + else + InitSpritePosToAnimTarget(sprite, FALSE); + if (IsContest()) + StartSpriteAnim(sprite, 2); + else if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + StartSpriteAnim(sprite, 1); + sprite->callback = RunStoredCallbackWhenAnimEnds; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); +} + +static void sub_80B14F0(struct Sprite *sprite) +{ + if (sprite->affineAnimEnded) + { + sprite->data[1] = (sprite->data[1] + 40) & 0xFF; + sprite->pos2.x = Sin(sprite->data[1], 2); + if (++sprite->data[0] > 40) + DestroyAnimSprite(sprite); + } +} + +void sub_80B1530(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + sub_8075458(0); + task->data[8] = gBattleAnimArgs[0]; + ++task->data[0]; + break; + case 1: + if (--task->data[8] == -1) + ++task->data[0]; + break; + case 2: + default: + task->data[9] += 1280; + break; + } + task->data[10] += 2816; + if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER) + gBattle_BG3_X += task->data[9] >> 8; + else + gBattle_BG3_X -= task->data[9] >> 8; + gBattle_BG3_Y += task->data[10] >> 8; + task->data[9] &= 0xFF; + task->data[10] &= 0xFF; + if (gBattleAnimArgs[7] == -1) + { + gBattle_BG3_X = 0; + gBattle_BG3_Y = 0; + sub_8075458(1); + DestroyAnimVisualTask(taskId); + } +} |