summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorU-User-PC\User <golemgalvanize@github.com>2017-08-28 12:37:37 -0400
committerU-User-PC\User <golemgalvanize@github.com>2017-08-28 12:37:37 -0400
commit863afd9ed825d0f401b2c6441c5f1ac54c41540a (patch)
treeeff0df2e8e28832c1804bc95b4fe630811a5a534
parent0c03f535e144d9b43f03826fb337afa3b83e7ebb (diff)
decompiled up to sub_80D0E30
-rw-r--r--asm/battle_anim_80CA710.s895
-rwxr-xr-xsrc/battle_anim_80CA710.c447
2 files changed, 446 insertions, 896 deletions
diff --git a/asm/battle_anim_80CA710.s b/asm/battle_anim_80CA710.s
index 6052bda71..db5a3f104 100644
--- a/asm/battle_anim_80CA710.s
+++ b/asm/battle_anim_80CA710.s
@@ -6,901 +6,6 @@
.text
- thumb_func_start sub_80D07AC
-sub_80D07AC: @ 80D07AC
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- ldr r1, _080D07D0 @ =gTasks
- adds r4, r0, r1
- movs r0, 0xA
- ldrsh r5, [r4, r0]
- cmp r5, 0x1
- beq _080D0814
- cmp r5, 0x1
- bgt _080D07D4
- cmp r5, 0
- beq _080D07DE
- b _080D08BC
- .align 2, 0
-_080D07D0: .4byte gTasks
-_080D07D4:
- cmp r5, 0x2
- beq _080D0848
- cmp r5, 0x3
- beq _080D0878
- b _080D08BC
-_080D07DE:
- adds r0, r4, 0
- bl sub_807992C
- ldrh r2, [r4, 0x10]
- adds r2, 0x3
- strh r2, [r4, 0x10]
- ldr r3, _080D0810 @ =gSprites
- movs r0, 0x8
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- ldrh r1, [r0, 0x26]
- adds r1, r2
- strh r1, [r0, 0x26]
- ldrh r0, [r4, 0xE]
- adds r0, 0x1
- strh r0, [r4, 0xE]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x7
- ble _080D08BC
- strh r5, [r4, 0xE]
- b _080D0870
- .align 2, 0
-_080D0810: .4byte gSprites
-_080D0814:
- adds r0, r4, 0
- bl sub_807992C
- ldr r2, _080D0844 @ =gSprites
- movs r0, 0x8
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrh r1, [r4, 0x10]
- ldrh r2, [r0, 0x26]
- adds r1, r2
- strh r1, [r0, 0x26]
- ldrh r0, [r4, 0xE]
- adds r0, 0x1
- strh r0, [r4, 0xE]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x7
- ble _080D08BC
- movs r0, 0
- strh r0, [r4, 0xE]
- b _080D0870
- .align 2, 0
-_080D0844: .4byte gSprites
-_080D0848:
- movs r1, 0x10
- ldrsh r0, [r4, r1]
- cmp r0, 0
- beq _080D0870
- ldr r2, _080D086C @ =gSprites
- movs r0, 0x8
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrh r1, [r0, 0x26]
- subs r1, 0x2
- strh r1, [r0, 0x26]
- ldrh r0, [r4, 0x10]
- subs r0, 0x2
- strh r0, [r4, 0x10]
- b _080D08BC
- .align 2, 0
-_080D086C: .4byte gSprites
-_080D0870:
- ldrh r0, [r4, 0xA]
- adds r0, 0x1
- strh r0, [r4, 0xA]
- b _080D08BC
-_080D0878:
- adds r0, r4, 0
- bl sub_807992C
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0
- bne _080D08BC
- ldrh r0, [r4, 0xC]
- subs r0, 0x1
- strh r0, [r4, 0xC]
- lsls r0, 16
- cmp r0, 0
- bne _080D08B0
- ldr r2, _080D08AC @ =gSprites
- movs r0, 0x8
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- strh r5, [r0, 0x26]
- adds r0, r6, 0
- bl DestroyAnimVisualTask
- b _080D08BC
- .align 2, 0
-_080D08AC: .4byte gSprites
-_080D08B0:
- ldrb r1, [r4, 0x8]
- ldr r2, _080D08C4 @ =gUnknown_083D76F4
- adds r0, r4, 0
- bl sub_80798F4
- strh r5, [r4, 0xA]
-_080D08BC:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080D08C4: .4byte gUnknown_083D76F4
- thumb_func_end sub_80D07AC
-
- thumb_func_start sub_80D08C8
-sub_80D08C8: @ 80D08C8
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r4, r0, 2
- adds r4, r0
- lsls r4, 3
- ldr r0, _080D08F8 @ =gTasks
- adds r4, r0
- movs r0, 0
- bl obj_id_for_side_relative_to_move
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- ldr r2, _080D08FC @ =gUnknown_083D7714
- adds r0, r4, 0
- bl sub_80798F4
- ldr r0, _080D0900 @ =sub_80D0904
- str r0, [r4]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080D08F8: .4byte gTasks
-_080D08FC: .4byte gUnknown_083D7714
-_080D0900: .4byte sub_80D0904
- thumb_func_end sub_80D08C8
-
- thumb_func_start sub_80D0904
-sub_80D0904: @ 80D0904
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- ldr r1, _080D092C @ =gTasks
- adds r0, r1
- bl sub_807992C
- lsls r0, 24
- cmp r0, 0
- bne _080D0924
- adds r0, r4, 0
- bl DestroyAnimVisualTask
-_080D0924:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080D092C: .4byte gTasks
- thumb_func_end sub_80D0904
-
- thumb_func_start sub_80D0930
-sub_80D0930: @ 80D0930
- push {r4,r5,lr}
- adds r4, r0, 0
- ldr r5, _080D0960 @ =gBattleAnimPlayerMonIndex
- ldrb r0, [r5]
- bl GetBankSide
- lsls r0, 24
- cmp r0, 0
- bne _080D0964
- adds r0, r4, 0
- movs r1, 0
- bl StartSpriteAnim
- ldrb r0, [r5]
- movs r1, 0x2
- bl sub_8077ABC
- lsls r0, 24
- lsrs r0, 24
- adds r0, 0x20
- strh r0, [r4, 0x20]
- movs r0, 0x40
- b _080D097E
- .align 2, 0
-_080D0960: .4byte gBattleAnimPlayerMonIndex
-_080D0964:
- adds r0, r4, 0
- movs r1, 0x1
- bl StartSpriteAnim
- ldrb r0, [r5]
- movs r1, 0x2
- bl sub_8077ABC
- lsls r0, 24
- lsrs r0, 24
- subs r0, 0x20
- strh r0, [r4, 0x20]
- ldr r0, _080D09B0 @ =0x0000ffc0
-_080D097E:
- strh r0, [r4, 0x30]
- ldr r0, _080D09B4 @ =gBattleAnimPlayerMonIndex
- ldrb r0, [r0]
- movs r1, 0x3
- bl sub_8077ABC
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0
- strh r0, [r4, 0x22]
- movs r0, 0x34
- strh r0, [r4, 0x2E]
- strh r1, [r4, 0x32]
- strh r1, [r4, 0x34]
- strh r1, [r4, 0x36]
- ldr r1, _080D09B8 @ =move_anim_8072740
- adds r0, r4, 0
- bl oamt_set_x3A_32
- ldr r0, _080D09BC @ =sub_8078394
- str r0, [r4, 0x1C]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080D09B0: .4byte 0x0000ffc0
-_080D09B4: .4byte gBattleAnimPlayerMonIndex
-_080D09B8: .4byte move_anim_8072740
-_080D09BC: .4byte sub_8078394
- thumb_func_end sub_80D0930
-
- thumb_func_start sub_80D09C0
-sub_80D09C0: @ 80D09C0
- push {r4-r6,lr}
- adds r6, r0, 0
- ldr r0, _080D09D4 @ =gBattleAnimArgs
- movs r1, 0
- ldrsh r0, [r0, r1]
- cmp r0, 0
- bne _080D09DC
- ldr r0, _080D09D8 @ =gBattleAnimPlayerMonIndex
- b _080D09DE
- .align 2, 0
-_080D09D4: .4byte gBattleAnimArgs
-_080D09D8: .4byte gBattleAnimPlayerMonIndex
-_080D09DC:
- ldr r0, _080D0A3C @ =gBattleAnimEnemyMonIndex
-_080D09DE:
- ldrb r5, [r0]
- adds r0, r5, 0
- bl GetBankSide
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080D09F8
- ldr r1, _080D0A40 @ =gBattleAnimArgs
- movs r2, 0x2
- ldrsh r0, [r1, r2]
- negs r0, r0
- strh r0, [r1, 0x2]
-_080D09F8:
- adds r0, r5, 0
- movs r1, 0x2
- bl sub_8077ABC
- lsls r0, 24
- ldr r4, _080D0A40 @ =gBattleAnimArgs
- lsrs r0, 24
- ldrh r1, [r4, 0x2]
- adds r0, r1
- strh r0, [r6, 0x20]
- adds r0, r5, 0
- movs r1, 0x3
- bl sub_8077ABC
- lsls r0, 24
- lsrs r0, 24
- ldrh r4, [r4, 0x4]
- adds r0, r4
- strh r0, [r6, 0x22]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x7
- bgt _080D0A2A
- movs r0, 0x8
- strh r0, [r6, 0x22]
-_080D0A2A:
- ldr r1, _080D0A44 @ =move_anim_8074EE0
- adds r0, r6, 0
- bl oamt_set_x3A_32
- ldr r0, _080D0A48 @ =sub_80785E4
- str r0, [r6, 0x1C]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080D0A3C: .4byte gBattleAnimEnemyMonIndex
-_080D0A40: .4byte gBattleAnimArgs
-_080D0A44: .4byte move_anim_8074EE0
-_080D0A48: .4byte sub_80785E4
- thumb_func_end sub_80D09C0
-
- thumb_func_start sub_80D0A4C
-sub_80D0A4C: @ 80D0A4C
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r4, r0, 2
- adds r4, r0
- lsls r4, 3
- ldr r0, _080D0A80 @ =gTasks
- adds r4, r0
- movs r0, 0
- bl obj_id_for_side_relative_to_move
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- movs r0, 0
- strh r1, [r4, 0x8]
- strh r0, [r4, 0xA]
- ldr r2, _080D0A84 @ =gUnknown_083D77B0
- adds r0, r4, 0
- bl sub_80798F4
- ldr r0, _080D0A88 @ =sub_80D0A8C
- str r0, [r4]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080D0A80: .4byte gTasks
-_080D0A84: .4byte gUnknown_083D77B0
-_080D0A88: .4byte sub_80D0A8C
- thumb_func_end sub_80D0A4C
-
- thumb_func_start sub_80D0A8C
-sub_80D0A8C: @ 80D0A8C
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- ldr r1, _080D0AB4 @ =gTasks
- adds r0, r1
- bl sub_807992C
- lsls r0, 24
- cmp r0, 0
- bne _080D0AAC
- adds r0, r4, 0
- bl DestroyAnimVisualTask
-_080D0AAC:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080D0AB4: .4byte gTasks
- thumb_func_end sub_80D0A8C
-
- thumb_func_start sub_80D0AB8
-sub_80D0AB8: @ 80D0AB8
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, _080D0B2C @ =gTasks
- adds r4, r1, r0
- movs r0, 0
- bl obj_id_for_side_relative_to_move
- lsls r0, 24
- lsrs r0, 24
- movs r2, 0
- strh r0, [r4, 0x8]
- strh r2, [r4, 0xA]
- movs r0, 0x4
- strh r0, [r4, 0xC]
- movs r0, 0x7
- strh r0, [r4, 0xE]
- movs r0, 0x3
- strh r0, [r4, 0x10]
- ldr r3, _080D0B30 @ =gSprites
- movs r0, 0x8
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- ldrh r0, [r0, 0x20]
- strh r0, [r4, 0x12]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- ldrh r0, [r0, 0x22]
- strh r0, [r4, 0x14]
- strh r2, [r4, 0x16]
- strh r2, [r4, 0x18]
- movs r0, 0x2
- strh r0, [r4, 0x1A]
- ldr r0, _080D0B34 @ =gBattleAnimPlayerMonIndex
- ldrb r0, [r0]
- bl GetBankSide
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080D0B22
- movs r1, 0xC
- ldrsh r0, [r4, r1]
- negs r0, r0
- strh r0, [r4, 0xC]
-_080D0B22:
- ldr r0, _080D0B38 @ =sub_80D0B3C
- str r0, [r4]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080D0B2C: .4byte gTasks
-_080D0B30: .4byte gSprites
-_080D0B34: .4byte gBattleAnimPlayerMonIndex
-_080D0B38: .4byte sub_80D0B3C
- thumb_func_end sub_80D0AB8
-
- thumb_func_start sub_80D0B3C
-sub_80D0B3C: @ 80D0B3C
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- ldr r1, _080D0B84 @ =gTasks
- adds r3, r0, r1
- ldrh r0, [r3, 0x16]
- adds r0, 0x1
- strh r0, [r3, 0x16]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x2
- ble _080D0BA2
- movs r0, 0
- strh r0, [r3, 0x16]
- ldrh r0, [r3, 0x18]
- adds r0, 0x1
- strh r0, [r3, 0x18]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080D0B8C
- ldr r2, _080D0B88 @ =gSprites
- movs r0, 0x8
- ldrsh r1, [r3, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrh r1, [r3, 0x1A]
- ldrh r2, [r0, 0x22]
- adds r1, r2
- b _080D0BA0
- .align 2, 0
-_080D0B84: .4byte gTasks
-_080D0B88: .4byte gSprites
-_080D0B8C:
- ldr r2, _080D0BB4 @ =gSprites
- movs r5, 0x8
- ldrsh r1, [r3, r5]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrh r1, [r0, 0x22]
- ldrh r2, [r3, 0x1A]
- subs r1, r2
-_080D0BA0:
- strh r1, [r0, 0x22]
-_080D0BA2:
- movs r1, 0xA
- ldrsh r0, [r3, r1]
- cmp r0, 0x1
- beq _080D0BF0
- cmp r0, 0x1
- bgt _080D0BB8
- cmp r0, 0
- beq _080D0BBE
- b _080D0C80
- .align 2, 0
-_080D0BB4: .4byte gSprites
-_080D0BB8:
- cmp r0, 0x2
- beq _080D0C20
- b _080D0C80
-_080D0BBE:
- ldr r2, _080D0BEC @ =gSprites
- movs r5, 0x8
- ldrsh r1, [r3, r5]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrh r1, [r3, 0xC]
- ldrh r2, [r0, 0x20]
- adds r1, r2
- strh r1, [r0, 0x20]
- ldrh r0, [r3, 0xE]
- subs r0, 0x1
- strh r0, [r3, 0xE]
- lsls r0, 16
- cmp r0, 0
- bne _080D0C80
- movs r0, 0xE
- strh r0, [r3, 0xE]
- movs r0, 0x1
- strh r0, [r3, 0xA]
- b _080D0C80
- .align 2, 0
-_080D0BEC: .4byte gSprites
-_080D0BF0:
- ldr r2, _080D0C1C @ =gSprites
- movs r5, 0x8
- ldrsh r1, [r3, r5]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrh r1, [r0, 0x20]
- ldrh r2, [r3, 0xC]
- subs r1, r2
- strh r1, [r0, 0x20]
- ldrh r0, [r3, 0xE]
- subs r0, 0x1
- strh r0, [r3, 0xE]
- lsls r0, 16
- cmp r0, 0
- bne _080D0C80
- movs r0, 0x7
- strh r0, [r3, 0xE]
- movs r0, 0x2
- strh r0, [r3, 0xA]
- b _080D0C80
- .align 2, 0
-_080D0C1C: .4byte gSprites
-_080D0C20:
- ldr r2, _080D0C58 @ =gSprites
- movs r0, 0x8
- ldrsh r1, [r3, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrh r1, [r3, 0xC]
- ldrh r5, [r0, 0x20]
- adds r1, r5
- strh r1, [r0, 0x20]
- ldrh r0, [r3, 0xE]
- subs r0, 0x1
- strh r0, [r3, 0xE]
- lsls r0, 16
- asrs r1, r0, 16
- cmp r1, 0
- bne _080D0C80
- ldrh r0, [r3, 0x10]
- subs r0, 0x1
- strh r0, [r3, 0x10]
- lsls r0, 16
- cmp r0, 0
- beq _080D0C5C
- movs r0, 0x7
- strh r0, [r3, 0xE]
- strh r1, [r3, 0xA]
- b _080D0C80
- .align 2, 0
-_080D0C58: .4byte gSprites
-_080D0C5C:
- ldrh r1, [r3, 0x18]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080D0C7A
- movs r0, 0x8
- ldrsh r1, [r3, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrh r1, [r0, 0x22]
- ldrh r2, [r3, 0x1A]
- subs r1, r2
- strh r1, [r0, 0x22]
-_080D0C7A:
- adds r0, r4, 0
- bl DestroyAnimVisualTask
-_080D0C80:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_80D0B3C
-
- thumb_func_start sub_80D0C88
-sub_80D0C88: @ 80D0C88
- push {r4-r6,lr}
- sub sp, 0xC
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, _080D0CD8 @ =gTasks
- adds r5, r1, r0
- ldr r4, _080D0CDC @ =gBattleAnimEnemyMonIndex
- ldrb r0, [r4]
- bl sub_8077FC0
- lsls r0, 24
- lsrs r0, 24
- adds r0, 0x20
- movs r1, 0
- strh r0, [r5, 0x8]
- movs r0, 0x4
- strh r0, [r5, 0xA]
- strh r1, [r5, 0xC]
- strh r1, [r5, 0xE]
- strh r1, [r5, 0x10]
- strh r1, [r5, 0x12]
- ldrb r0, [r4]
- bl sub_807A100
- strh r0, [r5, 0x26]
- ldrb r0, [r4]
- bl GetBankIdentity_permutated
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080D0CE8
- ldr r0, _080D0CE0 @ =gUnknown_030042C0
- ldrh r0, [r0]
- strh r0, [r5, 0x14]
- ldr r0, _080D0CE4 @ =REG_BG1HOFS
- b _080D0CF0
- .align 2, 0
-_080D0CD8: .4byte gTasks
-_080D0CDC: .4byte gBattleAnimEnemyMonIndex
-_080D0CE0: .4byte gUnknown_030042C0
-_080D0CE4: .4byte REG_BG1HOFS
-_080D0CE8:
- ldr r0, _080D0D54 @ =gUnknown_03004288
- ldrh r0, [r0]
- strh r0, [r5, 0x14]
- ldr r0, _080D0D58 @ =REG_BG2HOFS
-_080D0CF0:
- str r0, [sp]
- ldrh r0, [r5, 0x8]
- adds r1, r0, 0
- subs r1, 0x40
- lsls r2, r1, 16
- lsls r0, 16
- cmp r2, r0
- bgt _080D0D2E
- ldr r4, _080D0D5C @ =gUnknown_03004DE0
- movs r0, 0xF0
- lsls r0, 3
- adds r6, r4, r0
-_080D0D08:
- asrs r3, r2, 16
- cmp r3, 0
- blt _080D0D20
- lsls r1, r3, 1
- adds r2, r1, r4
- ldrh r0, [r5, 0x14]
- adds r0, 0xF0
- strh r0, [r2]
- adds r1, r6
- ldrh r0, [r5, 0x14]
- adds r0, 0xF0
- strh r0, [r1]
-_080D0D20:
- adds r0, r3, 0x1
- lsls r2, r0, 16
- asrs r1, r2, 16
- movs r3, 0x8
- ldrsh r0, [r5, r3]
- cmp r1, r0
- ble _080D0D08
-_080D0D2E:
- ldr r0, _080D0D60 @ =0xa2600001
- str r0, [sp, 0x4]
- mov r1, sp
- movs r2, 0
- movs r0, 0x1
- strb r0, [r1, 0x8]
- mov r0, sp
- strb r2, [r0, 0x9]
- ldr r0, [sp]
- ldr r1, [sp, 0x4]
- ldr r2, [sp, 0x8]
- bl sub_80895F8
- ldr r0, _080D0D64 @ =sub_80D0D68
- str r0, [r5]
- add sp, 0xC
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080D0D54: .4byte gUnknown_03004288
-_080D0D58: .4byte REG_BG2HOFS
-_080D0D5C: .4byte gUnknown_03004DE0
-_080D0D60: .4byte 0xa2600001
-_080D0D64: .4byte sub_80D0D68
- thumb_func_end sub_80D0C88
-
- thumb_func_start sub_80D0D68
-sub_80D0D68: @ 80D0D68
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- ldr r1, _080D0D88 @ =gTasks
- adds r3, r0, r1
- movs r1, 0x10
- ldrsh r0, [r3, r1]
- cmp r0, 0
- beq _080D0D8C
- cmp r0, 0x1
- beq _080D0DA2
- b _080D0E22
- .align 2, 0
-_080D0D88: .4byte gTasks
-_080D0D8C:
- ldrh r0, [r3, 0x12]
- adds r0, 0x1
- strh r0, [r3, 0x12]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x14
- ble _080D0E22
- ldrh r0, [r3, 0x10]
- adds r0, 0x1
- strh r0, [r3, 0x10]
- b _080D0E22
-_080D0DA2:
- ldrh r0, [r3, 0xA]
- adds r0, 0x1
- strh r0, [r3, 0xA]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x3
- ble _080D0E22
- movs r0, 0
- strh r0, [r3, 0xA]
- ldrh r1, [r3, 0xE]
- movs r0, 0x3
- ands r0, r1
- strh r0, [r3, 0xC]
- ldrh r0, [r3, 0x8]
- subs r0, r1
- strh r0, [r3, 0x12]
- movs r2, 0xC
- ldrsh r1, [r3, r2]
- cmp r1, 0x1
- beq _080D0DD8
- cmp r1, 0x1
- ble _080D0DE0
- cmp r1, 0x2
- beq _080D0DDC
- cmp r1, 0x3
- beq _080D0DDC
- b _080D0DE0
-_080D0DD8:
- subs r0, 0x2
- b _080D0DDE
-_080D0DDC:
- adds r0, 0x1
-_080D0DDE:
- strh r0, [r3, 0x12]
-_080D0DE0:
- movs r1, 0x12
- ldrsh r0, [r3, r1]
- cmp r0, 0
- blt _080D0E04
- ldr r2, _080D0E28 @ =gUnknown_03004DE0
- lsls r0, 1
- adds r0, r2
- ldrh r1, [r3, 0x14]
- strh r1, [r0]
- movs r1, 0x12
- ldrsh r0, [r3, r1]
- lsls r0, 1
- movs r1, 0xF0
- lsls r1, 3
- adds r2, r1
- adds r0, r2
- ldrh r1, [r3, 0x14]
- strh r1, [r0]
-_080D0E04:
- ldrh r0, [r3, 0xE]
- adds r0, 0x1
- strh r0, [r3, 0xE]
- lsls r0, 16
- asrs r0, 16
- movs r2, 0x26
- ldrsh r1, [r3, r2]
- cmp r0, r1
- blt _080D0E22
- ldr r1, _080D0E2C @ =gUnknown_03004DC0
- movs r0, 0x3
- strb r0, [r1, 0x15]
- adds r0, r4, 0
- bl DestroyAnimVisualTask
-_080D0E22:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080D0E28: .4byte gUnknown_03004DE0
-_080D0E2C: .4byte gUnknown_03004DC0
- thumb_func_end sub_80D0D68
-
- thumb_func_start sub_80D0E30
-sub_80D0E30: @ 80D0E30
- push {r4-r6,lr}
- adds r4, r0, 0
- ldr r6, _080D0E84 @ =gBattleAnimEnemyMonIndex
- ldrb r0, [r6]
- movs r1, 0
- bl sub_8077ABC
- lsls r0, 24
- lsrs r0, 24
- subs r0, 0x10
- movs r5, 0
- strh r0, [r4, 0x20]
- ldrb r0, [r6]
- bl sub_8077FC0
- lsls r0, 24
- lsrs r0, 24
- adds r0, 0x10
- strh r0, [r4, 0x22]
- strh r5, [r4, 0x2E]
- strh r5, [r4, 0x30]
- strh r5, [r4, 0x32]
- movs r0, 0x10
- strh r0, [r4, 0x34]
- strh r5, [r4, 0x36]
- ldrb r0, [r6]
- movs r1, 0
- bl sub_807A100
- adds r0, 0x2
- strh r0, [r4, 0x38]
- movs r0, 0x3F
- bl sub_8076F98
- lsls r0, 24
- asrs r0, 24
- strh r0, [r4, 0x3A]
- ldr r0, _080D0E88 @ =sub_80D0E8C
- str r0, [r4, 0x1C]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080D0E84: .4byte gBattleAnimEnemyMonIndex
-_080D0E88: .4byte sub_80D0E8C
- thumb_func_end sub_80D0E30
-
thumb_func_start sub_80D0E8C
sub_80D0E8C: @ 80D0E8C
push {r4,lr}
diff --git a/src/battle_anim_80CA710.c b/src/battle_anim_80CA710.c
index 76c74c89a..2c2c40ff1 100755
--- a/src/battle_anim_80CA710.c
+++ b/src/battle_anim_80CA710.c
@@ -16,6 +16,35 @@ struct __attribute__((packed)) Some3ByteStruct {
u8 unkArr[3];
};
+struct UnknownStruct_1
+{
+ void *src[2];
+ void *dest;
+ u32 unkC;
+ void (*unk10)(void);
+ u8 srcBank;
+ u8 unk15;
+ u8 unk16;
+ u8 unk17;
+ u8 taskId;
+ u8 filler19[0x7];
+};
+
+struct UnknownStruct_2
+{
+ const void *dest;
+ u32 control;
+ u8 unk8;
+ u8 unk9;
+};
+
+struct UnknownStruct6
+{
+ u16 unk0[0xA0];
+ u8 fillerA0[0x640];
+ u16 unk780[0xA0];
+};
+
extern u8 gBanksBySide[];
extern s16 gBattleAnimArgs[8];
extern u8 gBattleAnimPlayerMonIndex;
@@ -27,6 +56,8 @@ extern struct SpriteTemplate gSpriteTemplate_83D75AC;
extern struct SpriteTemplate gBattleAnimSpriteTemplate_83D6FC8;
extern struct SpriteTemplate gBattleAnimSpriteTemplate_83D6FF8;
extern struct AffineAnimFrameCmd gUnknown_083D76F4;
+extern struct AffineAnimFrameCmd gUnknown_083D7714;
+extern struct AffineAnimFrameCmd gUnknown_083D77B0;
extern s16 gUnknown_03000728[];
extern s8 gUnknown_083D680C[11][3];
extern u16 gUnknown_083D6984[];
@@ -36,6 +67,10 @@ extern u8 gNoOfAllBanks;
extern u8 gHealthboxIDs[];
extern u16 gUnknown_083D712C[4][6];
extern u16 gBattleTypeFlags;
+extern u16 gUnknown_030042C0;
+extern u16 gUnknown_03004288;
+extern struct UnknownStruct6 gUnknown_03004DE0;
+extern struct UnknownStruct_1 gUnknown_03004DC0;
void sub_80CA768(struct Sprite* sprite);
void sub_80CA8B4(struct Sprite* sprite);
@@ -112,6 +147,7 @@ void sub_80D02D0(struct Sprite* sprite);
void sub_80D0344(struct Sprite* sprite);
void sub_80D03A8(struct Sprite* sprite);
void sub_80D0704(struct Sprite* sprite);
+void sub_80D0E8C(struct Sprite* sprite);
s16 sub_80CC338(struct Sprite* sprite);
@@ -152,6 +188,9 @@ s16 sub_81174E0(s16 a);
s16 sub_81174C4(s16 a, s16 b);
void sub_8079108(u16 a1, bool8 a2);
void sub_80798F4(struct Task *task, u8 a2, void *a3);
+bool8 sub_807992C(struct Task *task);
+u8 sub_8077FC0(u8 slot);
+void sub_80895F8(struct UnknownStruct_2 unk);
void move_anim_8074EE0(struct Sprite *sprite);
bool8 sub_8078718(struct Sprite *sprite);
@@ -168,6 +207,10 @@ void sub_80CF514(u8 taskId);
void sub_80D0428(u8 taskId);
void sub_80D04E0(u8 taskId);
void sub_80D07AC(u8 taskId);
+void sub_80D0904(u8 taskId);
+void sub_80D0A8C(u8 taskId);
+void sub_80D0B3C(u8 taskId);
+void sub_80D0D68(u8 taskId);
void sub_80CC358(struct Task* task, u8 taskId);
void sub_80D0614(struct Task* task, u8 taskId);
@@ -4494,5 +4537,407 @@ void sub_80D074C(u8 taskId)
}
}
+void sub_80D07AC(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ switch (task->data[1])
+ {
+ case 0:
+ sub_807992C(task);
+ task->data[4] += 3;
+ gSprites[task->data[0]].pos2.y += task->data[4];
+ if (++task->data[3] > 7)
+ {
+ task->data[3] = 0;
+ task->data[1]++;
+ }
+ break;
+ case 1:
+ sub_807992C(task);
+ gSprites[task->data[0]].pos2.y += task->data[4];
+ if (++task->data[3] > 7)
+ {
+ task->data[3] = 0;
+ task->data[1]++;
+ }
+ break;
+ case 2:
+ if (task->data[4] != 0)
+ {
+ gSprites[task->data[0]].pos2.y -= 2;
+ task->data[4] -= 2;
+ }
+ else
+ task->data[1]++;
+ break;
+ case 3:
+ if (!sub_807992C(task))
+ {
+ if (--task->data[2] == 0)
+ {
+ gSprites[task->data[0]].pos2.y = 0;
+ DestroyAnimVisualTask(taskId);
+ }
+ else
+ {
+ sub_80798F4(task, task->data[0], &gUnknown_083D76F4);
+ task->data[1] = 0;
+ }
+ }
+ break;
+ }
+}
- \ No newline at end of file
+void sub_80D08C8(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ u8 spriteId = obj_id_for_side_relative_to_move(0);
+ sub_80798F4(task, spriteId, &gUnknown_083D7714);
+ task->func = sub_80D0904;
+}
+
+void sub_80D0904(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ if (!sub_807992C(task))
+ DestroyAnimVisualTask(taskId);
+}
+
+void sub_80D0930(struct Sprite* sprite)
+{
+ if (GetBankSide(gBattleAnimPlayerMonIndex) == 0)
+ {
+ StartSpriteAnim(sprite, 0);
+ sprite->pos1.x = sub_8077ABC(gBattleAnimPlayerMonIndex, 2) + 32;
+ sprite->data1 = 0x40;
+ }
+ else
+ {
+ StartSpriteAnim(sprite, 1);
+ sprite->pos1.x = sub_8077ABC(gBattleAnimPlayerMonIndex, 2) - 32;
+ sprite->data1 = -0x40;
+ }
+ sprite->pos1.y = sub_8077ABC(gBattleAnimPlayerMonIndex, 3);
+ sprite->data0 = 0x34;
+ sprite->data2 = 0;
+ sprite->data3 = 0;
+ sprite->data4 = 0;
+ oamt_set_x3A_32(sprite, move_anim_8072740);
+ sprite->callback = sub_8078394;
+}
+
+void sub_80D09C0(struct Sprite* sprite)
+{
+ u8 bank;
+ if (gBattleAnimArgs[0] == 0)
+ bank = gBattleAnimPlayerMonIndex;
+ else
+ bank = gBattleAnimEnemyMonIndex;
+ if (GetBankSide(bank) == 1)
+ {
+ gBattleAnimArgs[1] *= -1;
+ }
+ sprite->pos1.x = sub_8077ABC(bank, 2) + gBattleAnimArgs[1];
+ sprite->pos1.y = sub_8077ABC(bank, 3) + gBattleAnimArgs[2];
+ if (sprite->pos1.y <= 7)
+ sprite->pos1.y = 8;
+ oamt_set_x3A_32(sprite, move_anim_8074EE0);
+ sprite->callback = sub_80785E4;
+}
+
+void sub_80D0A4C(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ u8 spriteId = obj_id_for_side_relative_to_move(0);
+ task->data[0] = spriteId;
+ task->data[1] = 0;
+ sub_80798F4(task, spriteId, &gUnknown_083D77B0);
+ task->func = sub_80D0A8C;
+}
+
+void sub_80D0A8C(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ if (!sub_807992C(task))
+ DestroyAnimVisualTask(taskId);
+}
+
+void sub_80D0AB8(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ task->data[0] = obj_id_for_side_relative_to_move(0);
+ task->data[1] = 0;
+ task->data[2] = 4;
+ task->data[3] = 7;
+ task->data[4] = 3;
+ task->data[5] = gSprites[task->data[0]].pos1.x;
+ task->data[6] = gSprites[task->data[0]].pos1.y;
+ task->data[7] = 0;
+ task->data[8] = 0;
+ task->data[9] = 2;
+ if (GetBankSide(gBattleAnimPlayerMonIndex) == 1)
+ task->data[2] *= -1;
+ task->func = sub_80D0B3C;
+}
+
+void sub_80D0B3C(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ if (++task->data[7] > 2)
+ {
+ task->data[7] = 0;
+ task->data[8]++;
+ if ((task->data[8] & 1) != 0)
+ {
+ gSprites[task->data[0]].pos1.y += task->data[9];
+ }
+ else
+ gSprites[task->data[0]].pos1.y -= task->data[9];
+ }
+ switch (task->data[1])
+ {
+ case 0:
+ gSprites[task->data[0]].pos1.x += task->data[2];
+ if (--task->data[3] == 0)
+ {
+ task->data[3] = 14;
+ task->data[1] = 1;
+ }
+ break;
+ case 1:
+ gSprites[task->data[0]].pos1.x -= task->data[2];
+ if (--task->data[3] == 0)
+ {
+ task->data[3] = 7;
+ task->data[1] = 2;
+ }
+ break;
+ case 2:
+ gSprites[task->data[0]].pos1.x += task->data[2];
+ if (--task->data[3] == 0)
+ {
+ if (--task->data[4] != 0)
+ {
+ task->data[3] = 7;
+ task->data[1] = 0;
+ }
+ else
+ {
+ if ((task->data[8] & 1) != 0)
+ {
+ gSprites[task->data[0]].pos1.y -= task->data[9];
+ }
+ DestroyAnimVisualTask(taskId);
+ }
+ }
+ break;
+ }
+}
+
+void sub_80D0C88(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ struct UnknownStruct_2 sp;
+ s16 i;
+ task->data[0] = sub_8077FC0(gBattleAnimEnemyMonIndex) + 32;
+ task->data[1] = 4;
+ task->data[2] = 0;
+ task->data[3] = 0;
+ task->data[4] = 0;
+ task->data[5] = 0;
+ task->data[15] = sub_807A100(gBattleAnimEnemyMonIndex, 0);
+ if (GetBankIdentity_permutated(gBattleAnimEnemyMonIndex) == 1)
+ {
+ task->data[6] = gUnknown_030042C0;
+ sp.dest = (u16 *)REG_ADDR_BG1HOFS;
+ }
+ else
+ {
+ task->data[6] = gUnknown_03004288;
+ sp.dest = (u16 *)REG_ADDR_BG2HOFS;
+ }
+ for (i = task->data[0] - 0x40; i <= task->data[0];i++)
+ {
+ if (i >= 0)
+ {
+ gUnknown_03004DE0.unk0[i] = task->data[6] + 0xF0;
+ gUnknown_03004DE0.unk780[i] = task->data[6] + 0xF0;
+ }
+ }
+ sp.control = 0xa2600001;
+ sp.unk8 = 1;
+ sp.unk9 = 0;
+ sub_80895F8(sp);
+ task->func = sub_80D0D68;
+}
+
+#ifdef NONMATCHING
+void sub_80D0D68(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ switch (task->data[4])
+ {
+ case 0:
+ if (++task->data[5] > 20)
+ task->data[4]++;
+ break;
+ case 1:
+ if (++task->data[1] > 3)
+ {
+ task->data[1] = 0;
+ task->data[2] = 3 & task->data[3];
+ task->data[5] = task->data[0] - task->data[3];
+ switch (task->data[2])
+ {
+ case 1:
+ task->data[5] -= 2;
+ default:
+ case 0:
+ break;
+ case 2:
+ case 3:
+ task->data[5]++;
+ break;
+ }
+ if (task->data[5] >= 0)
+ {
+ gUnknown_03004DE0.unk0[task->data[5]] = task->data[6];
+ gUnknown_03004DE0.unk780[task->data[5]] = task->data[6];
+ }
+ if (++task->data[3] >= task->data[15])
+ {
+ gUnknown_03004DC0.unk15 = 3;
+ DestroyAnimVisualTask(taskId);
+ }
+
+ }
+ break;
+ }
+}
+#else
+__attribute__((naked))
+void sub_80D0D68(u8 taskId)
+{
+ asm(".syntax unified\n\
+ push {r4,lr}\n\
+ lsls r0, 24\n\
+ lsrs r4, r0, 24\n\
+ lsls r0, r4, 2\n\
+ adds r0, r4\n\
+ lsls r0, 3\n\
+ ldr r1, _080D0D88 @ =gTasks\n\
+ adds r3, r0, r1\n\
+ movs r1, 0x10\n\
+ ldrsh r0, [r3, r1]\n\
+ cmp r0, 0\n\
+ beq _080D0D8C\n\
+ cmp r0, 0x1\n\
+ beq _080D0DA2\n\
+ b _080D0E22\n\
+ .align 2, 0\n\
+_080D0D88: .4byte gTasks\n\
+_080D0D8C:\n\
+ ldrh r0, [r3, 0x12]\n\
+ adds r0, 0x1\n\
+ strh r0, [r3, 0x12]\n\
+ lsls r0, 16\n\
+ asrs r0, 16\n\
+ cmp r0, 0x14\n\
+ ble _080D0E22\n\
+ ldrh r0, [r3, 0x10]\n\
+ adds r0, 0x1\n\
+ strh r0, [r3, 0x10]\n\
+ b _080D0E22\n\
+_080D0DA2:\n\
+ ldrh r0, [r3, 0xA]\n\
+ adds r0, 0x1\n\
+ strh r0, [r3, 0xA]\n\
+ lsls r0, 16\n\
+ asrs r0, 16\n\
+ cmp r0, 0x3\n\
+ ble _080D0E22\n\
+ movs r0, 0\n\
+ strh r0, [r3, 0xA]\n\
+ ldrh r1, [r3, 0xE]\n\
+ movs r0, 0x3\n\
+ ands r0, r1\n\
+ strh r0, [r3, 0xC]\n\
+ ldrh r0, [r3, 0x8]\n\
+ subs r0, r1\n\
+ strh r0, [r3, 0x12]\n\
+ movs r2, 0xC\n\
+ ldrsh r1, [r3, r2]\n\
+ cmp r1, 0x1\n\
+ beq _080D0DD8\n\
+ cmp r1, 0x1\n\
+ ble _080D0DE0\n\
+ cmp r1, 0x2\n\
+ beq _080D0DDC\n\
+ cmp r1, 0x3\n\
+ beq _080D0DDC\n\
+ b _080D0DE0\n\
+_080D0DD8:\n\
+ subs r0, 0x2\n\
+ b _080D0DDE\n\
+_080D0DDC:\n\
+ adds r0, 0x1\n\
+_080D0DDE:\n\
+ strh r0, [r3, 0x12]\n\
+_080D0DE0:\n\
+ movs r1, 0x12\n\
+ ldrsh r0, [r3, r1]\n\
+ cmp r0, 0\n\
+ blt _080D0E04\n\
+ ldr r2, _080D0E28 @ =gUnknown_03004DE0\n\
+ lsls r0, 1\n\
+ adds r0, r2\n\
+ ldrh r1, [r3, 0x14]\n\
+ strh r1, [r0]\n\
+ movs r1, 0x12\n\
+ ldrsh r0, [r3, r1]\n\
+ lsls r0, 1\n\
+ movs r1, 0xF0\n\
+ lsls r1, 3\n\
+ adds r2, r1\n\
+ adds r0, r2\n\
+ ldrh r1, [r3, 0x14]\n\
+ strh r1, [r0]\n\
+_080D0E04:\n\
+ ldrh r0, [r3, 0xE]\n\
+ adds r0, 0x1\n\
+ strh r0, [r3, 0xE]\n\
+ lsls r0, 16\n\
+ asrs r0, 16\n\
+ movs r2, 0x26\n\
+ ldrsh r1, [r3, r2]\n\
+ cmp r0, r1\n\
+ blt _080D0E22\n\
+ ldr r1, _080D0E2C @ =gUnknown_03004DC0\n\
+ movs r0, 0x3\n\
+ strb r0, [r1, 0x15]\n\
+ adds r0, r4, 0\n\
+ bl DestroyAnimVisualTask\n\
+_080D0E22:\n\
+ pop {r4}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_080D0E28: .4byte gUnknown_03004DE0\n\
+_080D0E2C: .4byte gUnknown_03004DC0\n\
+.syntax divided\n");
+}
+#endif
+
+void sub_80D0E30(struct Sprite* sprite)
+{
+ sprite->pos1.x = sub_8077ABC(gBattleAnimEnemyMonIndex, 0) - 16;
+ sprite->pos1.y = sub_8077FC0(gBattleAnimEnemyMonIndex) + 16;
+ sprite->data0 = 0;
+ sprite->data1 = 0;
+ sprite->data2 = 0;
+ sprite->data3 = 16;
+ sprite->data4 = 0;
+ sprite->data5 = sub_807A100(gBattleAnimEnemyMonIndex, 0) + 2;
+ sprite->data6 = sub_8076F98(0x3F);
+ sprite->callback = sub_80D0E8C;
+}