summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/battle_script_commands.s4138
-rw-r--r--include/battle.h48
-rw-r--r--include/battle_anim.h8
-rw-r--r--include/battle_scripts.h1
-rw-r--r--include/constants/battle_anim.h1
-rw-r--r--include/party_menu.h10
-rw-r--r--include/pokemon.h2
-rw-r--r--src/battle_gfx_sfx_util.c1
-rw-r--r--src/battle_script_commands.c1196
-rw-r--r--src/pokemon.c4
10 files changed, 1220 insertions, 4189 deletions
diff --git a/asm/battle_script_commands.s b/asm/battle_script_commands.s
index 1d0282835..ed848ba78 100644
--- a/asm/battle_script_commands.s
+++ b/asm/battle_script_commands.s
@@ -5,4144 +5,6 @@
.text
- thumb_func_start atk24
-atk24: @ 80223F8
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- movs r6, 0
- ldr r0, _08022534 @ =gBattleControllerExecFlags
- ldr r0, [r0]
- cmp r0, 0
- beq _0802240A
- b _0802258A
-_0802240A:
- movs r5, 0
-_0802240C:
- movs r0, 0x64
- adds r1, r5, 0
- muls r1, r0
- ldr r0, _08022538 @ =gPlayerParty
- adds r4, r1, r0
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _0802243C
- adds r0, r4, 0
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0
- bne _0802243C
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- adds r0, r6, r0
- lsls r0, 16
- lsrs r6, r0, 16
-_0802243C:
- adds r5, 0x1
- cmp r5, 0x5
- ble _0802240C
- cmp r6, 0
- bne _08022450
- ldr r0, _0802253C @ =gBattleOutcome
- ldrb r1, [r0]
- movs r2, 0x2
- orrs r1, r2
- strb r1, [r0]
-_08022450:
- movs r6, 0
- movs r5, 0
-_08022454:
- movs r0, 0x64
- adds r1, r5, 0
- muls r1, r0
- ldr r0, _08022540 @ =gEnemyParty
- adds r4, r1, r0
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _08022484
- adds r0, r4, 0
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0
- bne _08022484
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- adds r0, r6, r0
- lsls r0, 16
- lsrs r6, r0, 16
-_08022484:
- adds r5, 0x1
- cmp r5, 0x5
- ble _08022454
- ldr r2, _0802253C @ =gBattleOutcome
- cmp r6, 0
- bne _08022498
- ldrb r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
-_08022498:
- ldrb r0, [r2]
- cmp r0, 0
- bne _08022582
- ldr r0, _08022544 @ =gBattleTypeFlags
- ldr r1, [r0]
- movs r2, 0x2
- ands r1, r2
- mov r8, r0
- cmp r1, 0
- beq _08022582
- movs r3, 0
- movs r5, 0
- ldr r0, _08022548 @ =gBattlersCount
- ldrb r1, [r0]
- mov r12, r0
- ldr r7, _0802254C @ =gBattlescriptCurrInstr
- cmp r3, r1
- bge _080224E4
- ldr r0, _08022550 @ =gHitMarker
- movs r6, 0x80
- lsls r6, 21
- ldr r4, [r0]
- adds r2, r1, 0
- ldr r1, _08022554 @ =gSpecialStatuses
-_080224C8:
- adds r0, r6, 0
- lsls r0, r5
- ands r0, r4
- cmp r0, 0
- beq _080224DC
- ldrb r0, [r1]
- lsls r0, 25
- cmp r0, 0
- blt _080224DC
- adds r3, 0x1
-_080224DC:
- adds r1, 0x28
- adds r5, 0x2
- cmp r5, r2
- blt _080224C8
-_080224E4:
- movs r2, 0
- movs r5, 0x1
- mov r0, r12
- ldrb r1, [r0]
- cmp r5, r1
- bge _0802251E
- ldr r0, _08022550 @ =gHitMarker
- movs r4, 0x80
- lsls r4, 21
- mov r12, r4
- ldr r6, [r0]
- ldr r0, _08022554 @ =gSpecialStatuses
- adds r4, r1, 0
- adds r1, r0, 0
- adds r1, 0x14
-_08022502:
- mov r0, r12
- lsls r0, r5
- ands r0, r6
- cmp r0, 0
- beq _08022516
- ldrb r0, [r1]
- lsls r0, 25
- cmp r0, 0
- blt _08022516
- adds r2, 0x1
-_08022516:
- adds r1, 0x28
- adds r5, 0x2
- cmp r5, r4
- blt _08022502
-_0802251E:
- mov r1, r8
- ldr r0, [r1]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _08022558
- adds r0, r2, r3
- cmp r0, 0x1
- bgt _08022560
- b _0802257A
- .align 2, 0
-_08022534: .4byte gBattleControllerExecFlags
-_08022538: .4byte gPlayerParty
-_0802253C: .4byte gBattleOutcome
-_08022540: .4byte gEnemyParty
-_08022544: .4byte gBattleTypeFlags
-_08022548: .4byte gBattlersCount
-_0802254C: .4byte gBattlescriptCurrInstr
-_08022550: .4byte gHitMarker
-_08022554: .4byte gSpecialStatuses
-_08022558:
- cmp r2, 0
- beq _0802257A
- cmp r3, 0
- beq _0802257A
-_08022560:
- ldr r2, [r7]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- adds r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- adds r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- adds r1, r0
- str r1, [r7]
- b _0802258A
-_0802257A:
- ldr r0, [r7]
- adds r0, 0x5
- str r0, [r7]
- b _0802258A
-_08022582:
- ldr r1, _08022594 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
-_0802258A:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08022594: .4byte gBattlescriptCurrInstr
- thumb_func_end atk24
-
- thumb_func_start MoveValuesCleanUp
-MoveValuesCleanUp: @ 8022598
- ldr r1, _080225C0 @ =gMoveResultFlags
- movs r0, 0
- strb r0, [r1]
- ldr r0, _080225C4 @ =gBattleScripting
- movs r2, 0
- movs r1, 0x1
- strb r1, [r0, 0xE]
- ldr r0, _080225C8 @ =gCritMultiplier
- strb r1, [r0]
- ldr r0, _080225CC @ =gBattleCommunication
- strb r2, [r0, 0x3]
- strb r2, [r0, 0x6]
- ldr r2, _080225D0 @ =gHitMarker
- ldr r0, [r2]
- subs r1, 0x42
- ands r0, r1
- ldr r1, _080225D4 @ =0xffffbfff
- ands r0, r1
- str r0, [r2]
- bx lr
- .align 2, 0
-_080225C0: .4byte gMoveResultFlags
-_080225C4: .4byte gBattleScripting
-_080225C8: .4byte gCritMultiplier
-_080225CC: .4byte gBattleCommunication
-_080225D0: .4byte gHitMarker
-_080225D4: .4byte 0xffffbfff
- thumb_func_end MoveValuesCleanUp
-
- thumb_func_start atk25_movevaluescleanup
-atk25_movevaluescleanup: @ 80225D8
- push {lr}
- bl MoveValuesCleanUp
- ldr r1, _080225EC @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_080225EC: .4byte gBattlescriptCurrInstr
- thumb_func_end atk25_movevaluescleanup
-
- thumb_func_start atk26_setmultihit
-atk26_setmultihit: @ 80225F0
- ldr r3, _08022600 @ =gMultiHitCounter
- ldr r2, _08022604 @ =gBattlescriptCurrInstr
- ldr r0, [r2]
- ldrb r1, [r0, 0x1]
- strb r1, [r3]
- adds r0, 0x2
- str r0, [r2]
- bx lr
- .align 2, 0
-_08022600: .4byte gMultiHitCounter
-_08022604: .4byte gBattlescriptCurrInstr
- thumb_func_end atk26_setmultihit
-
- thumb_func_start atk27_decrementmultihit
-atk27_decrementmultihit: @ 8022608
- push {lr}
- ldr r1, _08022624 @ =gMultiHitCounter
- ldrb r0, [r1]
- subs r0, 0x1
- strb r0, [r1]
- lsls r0, 24
- cmp r0, 0
- bne _0802262C
- ldr r1, _08022628 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
- b _08022646
- .align 2, 0
-_08022624: .4byte gMultiHitCounter
-_08022628: .4byte gBattlescriptCurrInstr
-_0802262C:
- ldr r3, _0802264C @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- adds r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- adds r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- adds r1, r0
- str r1, [r3]
-_08022646:
- pop {r0}
- bx r0
- .align 2, 0
-_0802264C: .4byte gBattlescriptCurrInstr
- thumb_func_end atk27_decrementmultihit
-
- thumb_func_start atk28_goto
-atk28_goto: @ 8022650
- ldr r3, _0802266C @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- adds r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- adds r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- adds r1, r0
- str r1, [r3]
- bx lr
- .align 2, 0
-_0802266C: .4byte gBattlescriptCurrInstr
- thumb_func_end atk28_goto
-
- thumb_func_start atk29_jumpifbyte
-atk29_jumpifbyte: @ 8022670
- push {r4-r6,lr}
- ldr r3, _080226B4 @ =gBattlescriptCurrInstr
- ldr r1, [r3]
- ldrb r6, [r1, 0x1]
- ldrb r2, [r1, 0x2]
- ldrb r0, [r1, 0x3]
- lsls r0, 8
- adds r2, r0
- ldrb r0, [r1, 0x4]
- lsls r0, 16
- adds r2, r0
- ldrb r0, [r1, 0x5]
- lsls r0, 24
- adds r5, r2, r0
- ldrb r4, [r1, 0x6]
- ldrb r2, [r1, 0x7]
- ldrb r0, [r1, 0x8]
- lsls r0, 8
- adds r2, r0
- ldrb r0, [r1, 0x9]
- lsls r0, 16
- adds r2, r0
- ldrb r0, [r1, 0xA]
- lsls r0, 24
- adds r2, r0
- adds r1, 0xB
- str r1, [r3]
- cmp r6, 0x5
- bhi _08022708
- lsls r0, r6, 2
- ldr r1, _080226B8 @ =_080226BC
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080226B4: .4byte gBattlescriptCurrInstr
-_080226B8: .4byte _080226BC
- .align 2, 0
-_080226BC:
- .4byte _080226D4
- .4byte _080226DC
- .4byte _080226E4
- .4byte _080226EC
- .4byte _080226F4
- .4byte _080226FE
-_080226D4:
- ldrb r0, [r5]
- cmp r0, r4
- bne _08022708
- b _08022706
-_080226DC:
- ldrb r0, [r5]
- cmp r0, r4
- beq _08022708
- b _08022706
-_080226E4:
- ldrb r0, [r5]
- cmp r0, r4
- bls _08022708
- b _08022706
-_080226EC:
- ldrb r0, [r5]
- cmp r0, r4
- bcs _08022708
- b _08022706
-_080226F4:
- ldrb r0, [r5]
- ands r4, r0
- cmp r4, 0
- beq _08022708
- b _08022706
-_080226FE:
- ldrb r0, [r5]
- ands r4, r0
- cmp r4, 0
- bne _08022708
-_08022706:
- str r2, [r3]
-_08022708:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end atk29_jumpifbyte
-
- thumb_func_start atk2A_jumpifhalfword
-atk2A_jumpifhalfword: @ 8022710
- push {r4-r6,lr}
- ldr r3, _0802275C @ =gBattlescriptCurrInstr
- ldr r1, [r3]
- ldrb r6, [r1, 0x1]
- ldrb r2, [r1, 0x2]
- ldrb r0, [r1, 0x3]
- lsls r0, 8
- adds r2, r0
- ldrb r0, [r1, 0x4]
- lsls r0, 16
- adds r2, r0
- ldrb r0, [r1, 0x5]
- lsls r0, 24
- adds r5, r2, r0
- ldrb r4, [r1, 0x6]
- ldrb r0, [r1, 0x7]
- lsls r0, 8
- orrs r4, r0
- ldrb r2, [r1, 0x8]
- ldrb r0, [r1, 0x9]
- lsls r0, 8
- adds r2, r0
- ldrb r0, [r1, 0xA]
- lsls r0, 16
- adds r2, r0
- ldrb r0, [r1, 0xB]
- lsls r0, 24
- adds r2, r0
- adds r1, 0xC
- str r1, [r3]
- cmp r6, 0x5
- bhi _080227B0
- lsls r0, r6, 2
- ldr r1, _08022760 @ =_08022764
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0802275C: .4byte gBattlescriptCurrInstr
-_08022760: .4byte _08022764
- .align 2, 0
-_08022764:
- .4byte _0802277C
- .4byte _08022784
- .4byte _0802278C
- .4byte _08022794
- .4byte _0802279C
- .4byte _080227A6
-_0802277C:
- ldrh r0, [r5]
- cmp r0, r4
- bne _080227B0
- b _080227AE
-_08022784:
- ldrh r0, [r5]
- cmp r0, r4
- beq _080227B0
- b _080227AE
-_0802278C:
- ldrh r0, [r5]
- cmp r0, r4
- bls _080227B0
- b _080227AE
-_08022794:
- ldrh r0, [r5]
- cmp r0, r4
- bcs _080227B0
- b _080227AE
-_0802279C:
- ldrh r0, [r5]
- ands r4, r0
- cmp r4, 0
- beq _080227B0
- b _080227AE
-_080227A6:
- ldrh r0, [r5]
- ands r4, r0
- cmp r4, 0
- bne _080227B0
-_080227AE:
- str r2, [r3]
-_080227B0:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end atk2A_jumpifhalfword
-
- thumb_func_start atk2B_jumpifword
-atk2B_jumpifword: @ 80227B8
- push {r4-r6,lr}
- ldr r3, _08022810 @ =gBattlescriptCurrInstr
- ldr r1, [r3]
- ldrb r6, [r1, 0x1]
- ldrb r2, [r1, 0x2]
- ldrb r0, [r1, 0x3]
- lsls r0, 8
- adds r2, r0
- ldrb r0, [r1, 0x4]
- lsls r0, 16
- adds r2, r0
- ldrb r0, [r1, 0x5]
- lsls r0, 24
- adds r5, r2, r0
- ldrb r4, [r1, 0x6]
- ldrb r0, [r1, 0x7]
- lsls r0, 8
- orrs r4, r0
- ldrb r0, [r1, 0x8]
- lsls r0, 16
- orrs r4, r0
- ldrb r0, [r1, 0x9]
- lsls r0, 24
- orrs r4, r0
- ldrb r2, [r1, 0xA]
- ldrb r0, [r1, 0xB]
- lsls r0, 8
- adds r2, r0
- ldrb r0, [r1, 0xC]
- lsls r0, 16
- adds r2, r0
- ldrb r0, [r1, 0xD]
- lsls r0, 24
- adds r2, r0
- adds r1, 0xE
- str r1, [r3]
- cmp r6, 0x5
- bhi _08022864
- lsls r0, r6, 2
- ldr r1, _08022814 @ =_08022818
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08022810: .4byte gBattlescriptCurrInstr
-_08022814: .4byte _08022818
- .align 2, 0
-_08022818:
- .4byte _08022830
- .4byte _08022838
- .4byte _08022840
- .4byte _08022848
- .4byte _08022850
- .4byte _0802285A
-_08022830:
- ldr r0, [r5]
- cmp r0, r4
- bne _08022864
- b _08022862
-_08022838:
- ldr r0, [r5]
- cmp r0, r4
- beq _08022864
- b _08022862
-_08022840:
- ldr r0, [r5]
- cmp r0, r4
- bls _08022864
- b _08022862
-_08022848:
- ldr r0, [r5]
- cmp r0, r4
- bcs _08022864
- b _08022862
-_08022850:
- ldr r0, [r5]
- ands r0, r4
- cmp r0, 0
- beq _08022864
- b _08022862
-_0802285A:
- ldr r0, [r5]
- ands r0, r4
- cmp r0, 0
- bne _08022864
-_08022862:
- str r2, [r3]
-_08022864:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end atk2B_jumpifword
-
- thumb_func_start atk2C_jumpifarrayequal
-atk2C_jumpifarrayequal: @ 802286C
- push {r4-r7,lr}
- ldr r2, _080228C4 @ =gBattlescriptCurrInstr
- ldr r3, [r2]
- ldrb r1, [r3, 0x1]
- ldrb r0, [r3, 0x2]
- lsls r0, 8
- adds r1, r0
- ldrb r0, [r3, 0x3]
- lsls r0, 16
- adds r1, r0
- ldrb r0, [r3, 0x4]
- lsls r0, 24
- adds r5, r1, r0
- ldrb r1, [r3, 0x5]
- ldrb r0, [r3, 0x6]
- lsls r0, 8
- adds r1, r0
- ldrb r0, [r3, 0x7]
- lsls r0, 16
- adds r1, r0
- ldrb r0, [r3, 0x8]
- lsls r0, 24
- adds r4, r1, r0
- ldrb r6, [r3, 0x9]
- ldrb r1, [r3, 0xA]
- ldrb r0, [r3, 0xB]
- lsls r0, 8
- adds r1, r0
- ldrb r0, [r3, 0xC]
- lsls r0, 16
- adds r1, r0
- ldrb r0, [r3, 0xD]
- lsls r0, 24
- adds r1, r0
- mov r12, r1
- movs r1, 0
- cmp r1, r6
- bcs _080228E4
- ldrb r0, [r5]
- ldrb r7, [r4]
- cmp r0, r7
- beq _080228C8
- adds r0, r3, 0
- b _080228E0
- .align 2, 0
-_080228C4: .4byte gBattlescriptCurrInstr
-_080228C8:
- adds r5, 0x1
- adds r4, 0x1
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, r6
- bcs _080228E4
- ldrb r0, [r5]
- ldrb r3, [r4]
- cmp r0, r3
- beq _080228C8
- ldr r0, [r2]
-_080228E0:
- adds r0, 0xE
- str r0, [r2]
-_080228E4:
- cmp r1, r6
- bne _080228EC
- mov r7, r12
- str r7, [r2]
-_080228EC:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end atk2C_jumpifarrayequal
-
- thumb_func_start atk2D_jumpifarraynotequal
-atk2D_jumpifarraynotequal: @ 80228F4
- push {r4-r7,lr}
- movs r7, 0
- ldr r3, _08022968 @ =gBattlescriptCurrInstr
- ldr r1, [r3]
- ldrb r2, [r1, 0x1]
- ldrb r0, [r1, 0x2]
- lsls r0, 8
- adds r2, r0
- ldrb r0, [r1, 0x3]
- lsls r0, 16
- adds r2, r0
- ldrb r0, [r1, 0x4]
- lsls r0, 24
- adds r5, r2, r0
- ldrb r2, [r1, 0x5]
- ldrb r0, [r1, 0x6]
- lsls r0, 8
- adds r2, r0
- ldrb r0, [r1, 0x7]
- lsls r0, 16
- adds r2, r0
- ldrb r0, [r1, 0x8]
- lsls r0, 24
- adds r4, r2, r0
- ldrb r6, [r1, 0x9]
- ldrb r2, [r1, 0xA]
- ldrb r0, [r1, 0xB]
- lsls r0, 8
- adds r2, r0
- ldrb r0, [r1, 0xC]
- lsls r0, 16
- adds r2, r0
- ldrb r0, [r1, 0xD]
- lsls r0, 24
- adds r2, r0
- mov r12, r2
- movs r1, 0
- cmp r7, r6
- bcs _0802295E
-_08022942:
- ldrb r0, [r5]
- ldrb r2, [r4]
- cmp r0, r2
- bne _08022950
- adds r0, r7, 0x1
- lsls r0, 24
- lsrs r7, r0, 24
-_08022950:
- adds r5, 0x1
- adds r4, 0x1
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, r6
- bcc _08022942
-_0802295E:
- cmp r7, r6
- beq _0802296C
- mov r0, r12
- b _08022970
- .align 2, 0
-_08022968: .4byte gBattlescriptCurrInstr
-_0802296C:
- ldr r0, [r3]
- adds r0, 0xE
-_08022970:
- str r0, [r3]
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end atk2D_jumpifarraynotequal
-
- thumb_func_start atk2E_setbyte
-atk2E_setbyte: @ 8022978
- ldr r3, _0802299C @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- adds r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- adds r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- adds r1, r0
- ldrb r0, [r2, 0x5]
- strb r0, [r1]
- ldr r0, [r3]
- adds r0, 0x6
- str r0, [r3]
- bx lr
- .align 2, 0
-_0802299C: .4byte gBattlescriptCurrInstr
- thumb_func_end atk2E_setbyte
-
- thumb_func_start atk2F_addbyte
-atk2F_addbyte: @ 80229A0
- ldr r3, _080229C8 @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- adds r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- adds r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- adds r1, r0
- ldrb r0, [r2, 0x5]
- ldrb r2, [r1]
- adds r0, r2
- strb r0, [r1]
- ldr r0, [r3]
- adds r0, 0x6
- str r0, [r3]
- bx lr
- .align 2, 0
-_080229C8: .4byte gBattlescriptCurrInstr
- thumb_func_end atk2F_addbyte
-
- thumb_func_start atk30_subbyte
-atk30_subbyte: @ 80229CC
- ldr r3, _080229F4 @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- adds r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- adds r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- adds r1, r0
- ldrb r0, [r1]
- ldrb r2, [r2, 0x5]
- subs r0, r2
- strb r0, [r1]
- ldr r0, [r3]
- adds r0, 0x6
- str r0, [r3]
- bx lr
- .align 2, 0
-_080229F4: .4byte gBattlescriptCurrInstr
- thumb_func_end atk30_subbyte
-
- thumb_func_start atk31_copyarray
-atk31_copyarray: @ 80229F8
- push {r4-r6,lr}
- ldr r3, _08022A48 @ =gBattlescriptCurrInstr
- ldr r1, [r3]
- ldrb r2, [r1, 0x1]
- ldrb r0, [r1, 0x2]
- lsls r0, 8
- adds r2, r0
- ldrb r0, [r1, 0x3]
- lsls r0, 16
- adds r2, r0
- ldrb r0, [r1, 0x4]
- lsls r0, 24
- adds r6, r2, r0
- ldrb r2, [r1, 0x5]
- ldrb r0, [r1, 0x6]
- lsls r0, 8
- adds r2, r0
- ldrb r0, [r1, 0x7]
- lsls r0, 16
- adds r2, r0
- ldrb r0, [r1, 0x8]
- lsls r0, 24
- adds r5, r2, r0
- ldrb r4, [r1, 0x9]
- movs r2, 0
- cmp r2, r4
- bge _08022A3C
-_08022A2E:
- adds r0, r6, r2
- adds r1, r5, r2
- ldrb r1, [r1]
- strb r1, [r0]
- adds r2, 0x1
- cmp r2, r4
- blt _08022A2E
-_08022A3C:
- ldr r0, [r3]
- adds r0, 0xA
- str r0, [r3]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08022A48: .4byte gBattlescriptCurrInstr
- thumb_func_end atk31_copyarray
-
- thumb_func_start atk32_copyarraywithindex
-atk32_copyarraywithindex: @ 8022A4C
- push {r4-r7,lr}
- ldr r3, _08022AB4 @ =gBattlescriptCurrInstr
- ldr r1, [r3]
- ldrb r2, [r1, 0x1]
- ldrb r0, [r1, 0x2]
- lsls r0, 8
- adds r2, r0
- ldrb r0, [r1, 0x3]
- lsls r0, 16
- adds r2, r0
- ldrb r0, [r1, 0x4]
- lsls r0, 24
- adds r7, r2, r0
- ldrb r2, [r1, 0x5]
- ldrb r0, [r1, 0x6]
- lsls r0, 8
- adds r2, r0
- ldrb r0, [r1, 0x7]
- lsls r0, 16
- adds r2, r0
- ldrb r0, [r1, 0x8]
- lsls r0, 24
- adds r6, r2, r0
- ldrb r2, [r1, 0x9]
- ldrb r0, [r1, 0xA]
- lsls r0, 8
- adds r2, r0
- ldrb r0, [r1, 0xB]
- lsls r0, 16
- adds r2, r0
- ldrb r0, [r1, 0xC]
- lsls r0, 24
- adds r5, r2, r0
- ldrb r4, [r1, 0xD]
- movs r2, 0
- cmp r2, r4
- bge _08022AA8
-_08022A96:
- adds r0, r7, r2
- ldrb r1, [r5]
- adds r1, r2, r1
- adds r1, r6, r1
- ldrb r1, [r1]
- strb r1, [r0]
- adds r2, 0x1
- cmp r2, r4
- blt _08022A96
-_08022AA8:
- ldr r0, [r3]
- adds r0, 0xE
- str r0, [r3]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08022AB4: .4byte gBattlescriptCurrInstr
- thumb_func_end atk32_copyarraywithindex
-
- thumb_func_start atk33_orbyte
-atk33_orbyte: @ 8022AB8
- ldr r3, _08022AE0 @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- adds r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- adds r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- adds r1, r0
- ldrb r0, [r1]
- ldrb r2, [r2, 0x5]
- orrs r0, r2
- strb r0, [r1]
- ldr r0, [r3]
- adds r0, 0x6
- str r0, [r3]
- bx lr
- .align 2, 0
-_08022AE0: .4byte gBattlescriptCurrInstr
- thumb_func_end atk33_orbyte
-
- thumb_func_start atk34_orhalfword
-atk34_orhalfword: @ 8022AE4
- push {r4,lr}
- ldr r4, _08022B18 @ =gBattlescriptCurrInstr
- ldr r3, [r4]
- ldrb r2, [r3, 0x1]
- ldrb r0, [r3, 0x2]
- lsls r0, 8
- adds r2, r0
- ldrb r0, [r3, 0x3]
- lsls r0, 16
- adds r2, r0
- ldrb r0, [r3, 0x4]
- lsls r0, 24
- adds r2, r0
- ldrb r1, [r3, 0x5]
- ldrb r0, [r3, 0x6]
- lsls r0, 8
- orrs r1, r0
- ldrh r0, [r2]
- orrs r1, r0
- strh r1, [r2]
- ldr r0, [r4]
- adds r0, 0x7
- str r0, [r4]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08022B18: .4byte gBattlescriptCurrInstr
- thumb_func_end atk34_orhalfword
-
- thumb_func_start atk35_orword
-atk35_orword: @ 8022B1C
- push {r4,lr}
- ldr r4, _08022B5C @ =gBattlescriptCurrInstr
- ldr r2, [r4]
- ldrb r3, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- adds r3, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- adds r3, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- adds r3, r0
- ldrb r1, [r2, 0x5]
- ldrb r0, [r2, 0x6]
- lsls r0, 8
- adds r1, r0
- ldrb r0, [r2, 0x7]
- lsls r0, 16
- adds r1, r0
- ldrb r0, [r2, 0x8]
- lsls r0, 24
- adds r1, r0
- ldr r0, [r3]
- orrs r0, r1
- str r0, [r3]
- ldr r0, [r4]
- adds r0, 0x9
- str r0, [r4]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08022B5C: .4byte gBattlescriptCurrInstr
- thumb_func_end atk35_orword
-
- thumb_func_start atk36_bicbyte
-atk36_bicbyte: @ 8022B60
- ldr r3, _08022B88 @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- adds r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- adds r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- adds r1, r0
- ldrb r2, [r2, 0x5]
- ldrb r0, [r1]
- bics r0, r2
- strb r0, [r1]
- ldr r0, [r3]
- adds r0, 0x6
- str r0, [r3]
- bx lr
- .align 2, 0
-_08022B88: .4byte gBattlescriptCurrInstr
- thumb_func_end atk36_bicbyte
-
- thumb_func_start atk37_bichalfword
-atk37_bichalfword: @ 8022B8C
- push {r4,lr}
- ldr r4, _08022BC0 @ =gBattlescriptCurrInstr
- ldr r3, [r4]
- ldrb r1, [r3, 0x1]
- ldrb r0, [r3, 0x2]
- lsls r0, 8
- adds r1, r0
- ldrb r0, [r3, 0x3]
- lsls r0, 16
- adds r1, r0
- ldrb r0, [r3, 0x4]
- lsls r0, 24
- adds r1, r0
- ldrb r2, [r3, 0x5]
- ldrb r0, [r3, 0x6]
- lsls r0, 8
- orrs r2, r0
- ldrh r0, [r1]
- bics r0, r2
- strh r0, [r1]
- ldr r0, [r4]
- adds r0, 0x7
- str r0, [r4]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08022BC0: .4byte gBattlescriptCurrInstr
- thumb_func_end atk37_bichalfword
-
- thumb_func_start atk38_bicword
-atk38_bicword: @ 8022BC4
- push {r4,lr}
- ldr r4, _08022C04 @ =gBattlescriptCurrInstr
- ldr r2, [r4]
- ldrb r3, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- adds r3, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- adds r3, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- adds r3, r0
- ldrb r1, [r2, 0x5]
- ldrb r0, [r2, 0x6]
- lsls r0, 8
- adds r1, r0
- ldrb r0, [r2, 0x7]
- lsls r0, 16
- adds r1, r0
- ldrb r0, [r2, 0x8]
- lsls r0, 24
- adds r1, r0
- ldr r0, [r3]
- bics r0, r1
- str r0, [r3]
- ldr r0, [r4]
- adds r0, 0x9
- str r0, [r4]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08022C04: .4byte gBattlescriptCurrInstr
- thumb_func_end atk38_bicword
-
- thumb_func_start atk39_pause
-atk39_pause: @ 8022C08
- push {r4,r5,lr}
- ldr r0, _08022C3C @ =gBattleControllerExecFlags
- ldr r4, [r0]
- cmp r4, 0
- bne _08022C34
- ldr r5, _08022C40 @ =gBattlescriptCurrInstr
- ldr r2, [r5]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldr r3, _08022C44 @ =gPauseCounterBattle
- ldrh r0, [r3]
- adds r0, 0x1
- strh r0, [r3]
- lsls r0, 16
- lsrs r0, 16
- cmp r0, r1
- bcc _08022C34
- strh r4, [r3]
- adds r0, r2, 0x3
- str r0, [r5]
-_08022C34:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08022C3C: .4byte gBattleControllerExecFlags
-_08022C40: .4byte gBattlescriptCurrInstr
-_08022C44: .4byte gPauseCounterBattle
- thumb_func_end atk39_pause
-
- thumb_func_start atk3A_waitstate
-atk3A_waitstate: @ 8022C48
- push {lr}
- ldr r0, _08022C60 @ =gBattleControllerExecFlags
- ldr r0, [r0]
- cmp r0, 0
- bne _08022C5A
- ldr r1, _08022C64 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
-_08022C5A:
- pop {r0}
- bx r0
- .align 2, 0
-_08022C60: .4byte gBattleControllerExecFlags
-_08022C64: .4byte gBattlescriptCurrInstr
- thumb_func_end atk3A_waitstate
-
- thumb_func_start atk3B_healthbar_update
-atk3B_healthbar_update: @ 8022C68
- push {lr}
- ldr r0, _08022C7C @ =gBattlescriptCurrInstr
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- cmp r0, 0
- bne _08022C88
- ldr r0, _08022C80 @ =gActiveBattler
- ldr r1, _08022C84 @ =gBattlerTarget
- b _08022C8C
- .align 2, 0
-_08022C7C: .4byte gBattlescriptCurrInstr
-_08022C80: .4byte gActiveBattler
-_08022C84: .4byte gBattlerTarget
-_08022C88:
- ldr r0, _08022CB0 @ =gActiveBattler
- ldr r1, _08022CB4 @ =gBattlerAttacker
-_08022C8C:
- ldrb r1, [r1]
- strb r1, [r0]
- ldr r0, _08022CB8 @ =gBattleMoveDamage
- ldrh r1, [r0]
- movs r0, 0
- bl BtlController_EmitHealthBarUpdate
- ldr r0, _08022CB0 @ =gActiveBattler
- ldrb r0, [r0]
- bl MarkBattlerForControllerExec
- ldr r1, _08022CBC @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x2
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_08022CB0: .4byte gActiveBattler
-_08022CB4: .4byte gBattlerAttacker
-_08022CB8: .4byte gBattleMoveDamage
-_08022CBC: .4byte gBattlescriptCurrInstr
- thumb_func_end atk3B_healthbar_update
-
- thumb_func_start atk3C_return
-atk3C_return: @ 8022CC0
- push {lr}
- bl BattleScriptPop
- pop {r0}
- bx r0
- thumb_func_end atk3C_return
-
- thumb_func_start atk3D_end
-atk3D_end: @ 8022CCC
- ldr r0, _08022CE0 @ =gMoveResultFlags
- movs r1, 0
- strb r1, [r0]
- ldr r0, _08022CE4 @ =gActiveBattler
- strb r1, [r0]
- ldr r1, _08022CE8 @ =gCurrentActionFuncId
- movs r0, 0xB
- strb r0, [r1]
- bx lr
- .align 2, 0
-_08022CE0: .4byte gMoveResultFlags
-_08022CE4: .4byte gActiveBattler
-_08022CE8: .4byte gCurrentActionFuncId
- thumb_func_end atk3D_end
-
- thumb_func_start atk3E_end2
-atk3E_end2: @ 8022CEC
- ldr r1, _08022CFC @ =gActiveBattler
- movs r0, 0
- strb r0, [r1]
- ldr r1, _08022D00 @ =gCurrentActionFuncId
- movs r0, 0xB
- strb r0, [r1]
- bx lr
- .align 2, 0
-_08022CFC: .4byte gActiveBattler
-_08022D00: .4byte gCurrentActionFuncId
- thumb_func_end atk3E_end2
-
- thumb_func_start atk3F_end3
-atk3F_end3: @ 8022D04
- push {lr}
- bl BattleScriptPop
- ldr r3, _08022D38 @ =gBattleResources
- ldr r0, [r3]
- ldr r0, [r0, 0xC]
- adds r1, r0, 0
- adds r1, 0x20
- ldrb r0, [r1]
- cmp r0, 0
- beq _08022D1E
- subs r0, 0x1
- strb r0, [r1]
-_08022D1E:
- ldr r2, _08022D3C @ =gBattleMainFunc
- ldr r0, [r3]
- ldr r1, [r0, 0xC]
- adds r0, r1, 0
- adds r0, 0x20
- ldrb r0, [r0]
- lsls r0, 2
- adds r1, r0
- ldr r0, [r1]
- str r0, [r2]
- pop {r0}
- bx r0
- .align 2, 0
-_08022D38: .4byte gBattleResources
-_08022D3C: .4byte gBattleMainFunc
- thumb_func_end atk3F_end3
-
- thumb_func_start atk41_call
-atk41_call: @ 8022D40
- push {r4,lr}
- ldr r4, _08022D6C @ =gBattlescriptCurrInstr
- ldr r0, [r4]
- adds r0, 0x5
- bl BattleScriptPush
- ldr r2, [r4]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r4]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08022D6C: .4byte gBattlescriptCurrInstr
- thumb_func_end atk41_call
-
- thumb_func_start atk42_jumpiftype2
-atk42_jumpiftype2: @ 8022D70
- push {r4,lr}
- ldr r4, _08022DB8 @ =gBattlescriptCurrInstr
- ldr r0, [r4]
- ldrb r0, [r0, 0x1]
- bl GetBattlerForBattleScript
- lsls r0, 24
- lsrs r0, 24
- ldr r3, [r4]
- ldr r2, _08022DBC @ =gBattleMons
- movs r1, 0x58
- muls r0, r1
- adds r0, r2
- adds r1, r0, 0
- adds r1, 0x21
- ldrb r2, [r3, 0x2]
- ldrb r1, [r1]
- cmp r2, r1
- beq _08022D9E
- adds r0, 0x22
- ldrb r0, [r0]
- cmp r2, r0
- bne _08022DC0
-_08022D9E:
- ldrb r1, [r3, 0x3]
- ldrb r0, [r3, 0x4]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r3, 0x5]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r3, 0x6]
- lsls r0, 24
- orrs r1, r0
- str r1, [r4]
- b _08022DC4
- .align 2, 0
-_08022DB8: .4byte gBattlescriptCurrInstr
-_08022DBC: .4byte gBattleMons
-_08022DC0:
- adds r0, r3, 0x7
- str r0, [r4]
-_08022DC4:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end atk42_jumpiftype2
-
- thumb_func_start atk43_jumpifabilitypresent
-atk43_jumpifabilitypresent: @ 8022DCC
- push {r4,lr}
- sub sp, 0x4
- ldr r4, _08022E04 @ =gBattlescriptCurrInstr
- ldr r0, [r4]
- ldrb r2, [r0, 0x1]
- movs r0, 0
- str r0, [sp]
- movs r0, 0x13
- movs r1, 0
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- beq _08022E08
- ldr r2, [r4]
- ldrb r1, [r2, 0x2]
- ldrb r0, [r2, 0x3]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x5]
- lsls r0, 24
- orrs r1, r0
- str r1, [r4]
- b _08022E0E
- .align 2, 0
-_08022E04: .4byte gBattlescriptCurrInstr
-_08022E08:
- ldr r0, [r4]
- adds r0, 0x6
- str r0, [r4]
-_08022E0E:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end atk43_jumpifabilitypresent
-
- thumb_func_start atk44_endselectionscript
-atk44_endselectionscript: @ 8022E18
- ldr r0, _08022E2C @ =gBattlerAttacker
- ldrb r0, [r0]
- ldr r1, _08022E30 @ =gBattleStruct
- ldr r1, [r1]
- adds r0, r1
- adds r0, 0x54
- movs r1, 0x1
- strb r1, [r0]
- bx lr
- .align 2, 0
-_08022E2C: .4byte gBattlerAttacker
-_08022E30: .4byte gBattleStruct
- thumb_func_end atk44_endselectionscript
-
- thumb_func_start atk45_playanimation
-atk45_playanimation: @ 8022E34
- push {r4-r6,lr}
- ldr r4, _08022E84 @ =gBattlescriptCurrInstr
- ldr r0, [r4]
- ldrb r0, [r0, 0x1]
- bl GetBattlerForBattleScript
- ldr r6, _08022E88 @ =gActiveBattler
- strb r0, [r6]
- ldr r2, [r4]
- ldrb r1, [r2, 0x3]
- ldrb r0, [r2, 0x4]
- lsls r0, 8
- adds r1, r0
- ldrb r0, [r2, 0x5]
- lsls r0, 16
- adds r1, r0
- ldrb r0, [r2, 0x6]
- lsls r0, 24
- adds r3, r1, r0
- ldrb r5, [r2, 0x2]
- adds r0, r5, 0
- cmp r0, 0x1
- beq _08022E6E
- cmp r0, 0x11
- beq _08022E6E
- cmp r0, 0x2
- beq _08022E6E
- cmp r0, 0x19
- bne _08022E8C
-_08022E6E:
- ldr r4, _08022E84 @ =gBattlescriptCurrInstr
- ldr r0, [r4]
- ldrb r1, [r0, 0x2]
- ldrh r2, [r3]
- movs r0, 0
- bl BtlController_EmitBattleAnimation
- ldr r0, _08022E88 @ =gActiveBattler
- ldrb r0, [r0]
- b _08022EE4
- .align 2, 0
-_08022E84: .4byte gBattlescriptCurrInstr
-_08022E88: .4byte gActiveBattler
-_08022E8C:
- ldr r0, _08022EA4 @ =gHitMarker
- ldr r0, [r0]
- movs r1, 0x80
- ands r0, r1
- cmp r0, 0
- beq _08022EAC
- adds r0, r2, 0x7
- bl BattleScriptPush
- ldr r0, _08022EA8 @ =BattleScript_Pausex20
- b _08022EEC
- .align 2, 0
-_08022EA4: .4byte gHitMarker
-_08022EA8: .4byte BattleScript_Pausex20
-_08022EAC:
- adds r0, r5, 0
- subs r0, 0xA
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x3
- bls _08022ED8
- ldr r1, _08022ED0 @ =gStatuses3
- ldrb r0, [r6]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- ldr r1, _08022ED4 @ =0x000400c0
- ands r0, r1
- cmp r0, 0
- beq _08022ED8
- adds r0, r2, 0x7
- b _08022EEC
- .align 2, 0
-_08022ED0: .4byte gStatuses3
-_08022ED4: .4byte 0x000400c0
-_08022ED8:
- ldrb r1, [r2, 0x2]
- ldrh r2, [r3]
- movs r0, 0
- bl BtlController_EmitBattleAnimation
- ldrb r0, [r6]
-_08022EE4:
- bl MarkBattlerForControllerExec
- ldr r0, [r4]
- adds r0, 0x7
-_08022EEC:
- str r0, [r4]
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end atk45_playanimation
-
- thumb_func_start atk46_playanimation2
-atk46_playanimation2: @ 8022EF4
- push {r4-r7,lr}
- ldr r6, _08022F5C @ =gBattlescriptCurrInstr
- ldr r0, [r6]
- ldrb r0, [r0, 0x1]
- bl GetBattlerForBattleScript
- ldr r7, _08022F60 @ =gActiveBattler
- strb r0, [r7]
- ldr r2, [r6]
- ldrb r1, [r2, 0x2]
- ldrb r0, [r2, 0x3]
- lsls r0, 8
- adds r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 16
- adds r1, r0
- ldrb r0, [r2, 0x5]
- lsls r0, 24
- adds r3, r1, r0
- ldrb r1, [r2, 0x6]
- ldrb r0, [r2, 0x7]
- lsls r0, 8
- adds r1, r0
- ldrb r0, [r2, 0x8]
- lsls r0, 16
- adds r1, r0
- ldrb r0, [r2, 0x9]
- lsls r0, 24
- adds r4, r1, r0
- ldrb r5, [r3]
- adds r0, r5, 0
- cmp r0, 0x1
- beq _08022F3E
- cmp r0, 0x11
- beq _08022F3E
- cmp r0, 0x2
- bne _08022F64
-_08022F3E:
- ldrb r1, [r3]
- ldrh r2, [r4]
- movs r0, 0
- bl BtlController_EmitBattleAnimation
- ldr r0, _08022F60 @ =gActiveBattler
- ldrb r0, [r0]
- bl MarkBattlerForControllerExec
- ldr r1, _08022F5C @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0xA
- str r0, [r1]
- b _08022FBA
- .align 2, 0
-_08022F5C: .4byte gBattlescriptCurrInstr
-_08022F60: .4byte gActiveBattler
-_08022F64:
- ldr r0, _08022F74 @ =gHitMarker
- ldr r0, [r0]
- movs r1, 0x80
- ands r0, r1
- cmp r0, 0
- beq _08022F78
- adds r0, r2, 0
- b _08022FB6
- .align 2, 0
-_08022F74: .4byte gHitMarker
-_08022F78:
- adds r0, r5, 0
- subs r0, 0xA
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x3
- bls _08022FA4
- ldr r1, _08022F9C @ =gStatuses3
- ldrb r0, [r7]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- ldr r1, _08022FA0 @ =0x000400c0
- ands r0, r1
- cmp r0, 0
- beq _08022FA4
- adds r0, r2, 0
- b _08022FB6
- .align 2, 0
-_08022F9C: .4byte gStatuses3
-_08022FA0: .4byte 0x000400c0
-_08022FA4:
- ldrb r1, [r3]
- ldrh r2, [r4]
- movs r0, 0
- bl BtlController_EmitBattleAnimation
- ldrb r0, [r7]
- bl MarkBattlerForControllerExec
- ldr r0, [r6]
-_08022FB6:
- adds r0, 0xA
- str r0, [r6]
-_08022FBA:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end atk46_playanimation2
-
- thumb_func_start atk47_setgraphicalstatchangevalues
-atk47_setgraphicalstatchangevalues: @ 8022FC0
- push {r4,lr}
- movs r3, 0
- ldr r1, _08022FDC @ =gBattleScripting
- ldrb r0, [r1, 0x1A]
- movs r2, 0xF0
- ands r2, r0
- adds r4, r1, 0
- cmp r2, 0x20
- beq _08022FEE
- cmp r2, 0x20
- bgt _08022FE0
- cmp r2, 0x10
- beq _08022FEA
- b _08022FF8
- .align 2, 0
-_08022FDC: .4byte gBattleScripting
-_08022FE0:
- cmp r2, 0x90
- beq _08022FF2
- cmp r2, 0xA0
- beq _08022FF6
- b _08022FF8
-_08022FEA:
- movs r3, 0xF
- b _08022FF8
-_08022FEE:
- movs r3, 0x27
- b _08022FF8
-_08022FF2:
- movs r3, 0x16
- b _08022FF8
-_08022FF6:
- movs r3, 0x2E
-_08022FF8:
- ldrb r1, [r4, 0x1A]
- movs r0, 0xF
- ands r0, r1
- adds r0, r3, r0
- subs r0, 0x1
- movs r1, 0
- strb r0, [r4, 0x10]
- strb r1, [r4, 0x11]
- ldr r1, _08023018 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08023018: .4byte gBattlescriptCurrInstr
- thumb_func_end atk47_setgraphicalstatchangevalues
-
- thumb_func_start atk48_playstatchangeanimation
-atk48_playstatchangeanimation: @ 802301C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- movs r7, 0
- movs r0, 0
- mov r8, r0
- movs r3, 0
- ldr r5, _08023090 @ =gBattlescriptCurrInstr
- ldr r0, [r5]
- ldrb r0, [r0, 0x1]
- str r3, [sp]
- bl GetBattlerForBattleScript
- ldr r2, _08023094 @ =gActiveBattler
- strb r0, [r2]
- ldr r0, [r5]
- ldrb r4, [r0, 0x2]
- ldrb r1, [r0, 0x3]
- movs r0, 0x1
- ands r0, r1
- ldr r3, [sp]
- cmp r0, 0
- beq _08023130
- movs r0, 0x2
- ands r0, r1
- movs r1, 0x15
- cmp r0, 0
- beq _0802305C
- movs r1, 0x2D
-_0802305C:
- cmp r4, 0
- beq _08023104
- movs r0, 0x1
- mov r10, r0
- ldr r0, _08023098 @ =gUnknown_2023BFC
- mov r9, r0
- lsls r5, r1, 16
-_0802306A:
- adds r0, r4, 0
- mov r1, r10
- ands r0, r1
- cmp r0, 0
- beq _080230F6
- ldr r0, _08023090 @ =gBattlescriptCurrInstr
- ldr r0, [r0]
- ldrb r1, [r0, 0x3]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _0802309C
- ldr r0, _08023094 @ =gActiveBattler
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r7, r0
- b _080230E4
- .align 2, 0
-_08023090: .4byte gBattlescriptCurrInstr
-_08023094: .4byte gActiveBattler
-_08023098: .4byte gUnknown_2023BFC
-_0802309C:
- ldr r6, _08023120 @ =gActiveBattler
- ldrb r0, [r6]
- str r3, [sp]
- bl GetBattlerPosition
- mov r1, r10
- ands r1, r0
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- ldr r1, _08023124 @ =gSideTimers
- adds r0, r1
- ldrb r0, [r0, 0x4]
- ldr r3, [sp]
- cmp r0, 0
- bne _080230F6
- ldr r0, _08023128 @ =gBattleMons
- ldrb r2, [r6]
- movs r1, 0x58
- muls r2, r1
- adds r0, r2, r0
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x1D
- beq _080230F6
- cmp r0, 0x49
- beq _080230F6
- cmp r0, 0x33
- bne _080230DA
- cmp r7, 0x6
- beq _080230F6
-_080230DA:
- cmp r0, 0x34
- bne _080230E2
- cmp r7, 0x1
- beq _080230F6
-_080230E2:
- adds r0, r7, r2
-_080230E4:
- add r0, r9
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0
- ble _080230F6
- lsrs r0, r5, 16
- mov r8, r0
- adds r3, 0x1
-_080230F6:
- lsrs r4, 1
- movs r1, 0x80
- lsls r1, 9
- adds r5, r1
- adds r7, 0x1
- cmp r4, 0
- bne _0802306A
-_08023104:
- ldr r0, _0802312C @ =gBattlescriptCurrInstr
- mov r9, r0
- cmp r3, 0x1
- ble _08023192
- ldr r0, [r0]
- ldrb r1, [r0, 0x3]
- movs r0, 0x2
- ands r0, r1
- movs r1, 0x39
- mov r8, r1
- cmp r0, 0
- beq _08023192
- movs r0, 0x3A
- b _08023190
- .align 2, 0
-_08023120: .4byte gActiveBattler
-_08023124: .4byte gSideTimers
-_08023128: .4byte gBattleMons
-_0802312C: .4byte gBattlescriptCurrInstr
-_08023130:
- movs r0, 0x2
- ands r0, r1
- movs r1, 0xE
- cmp r0, 0
- beq _0802313C
- movs r1, 0x26
-_0802313C:
- mov r9, r5
- cmp r4, 0
- beq _08023178
- ldr r6, _080231AC @ =gUnknown_2023BFC
- adds r5, r2, 0
- lsls r2, r1, 16
-_08023148:
- movs r0, 0x1
- ands r0, r4
- cmp r0, 0
- beq _0802316A
- ldrb r1, [r5]
- movs r0, 0x58
- muls r0, r1
- adds r0, r7, r0
- adds r0, r6
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0xB
- bgt _0802316A
- lsrs r1, r2, 16
- mov r8, r1
- adds r3, 0x1
-_0802316A:
- lsrs r4, 1
- movs r0, 0x80
- lsls r0, 9
- adds r2, r0
- adds r7, 0x1
- cmp r4, 0
- bne _08023148
-_08023178:
- cmp r3, 0x1
- ble _08023192
- mov r1, r9
- ldr r0, [r1]
- ldrb r1, [r0, 0x3]
- movs r0, 0x2
- ands r0, r1
- movs r1, 0x37
- mov r8, r1
- cmp r0, 0
- beq _08023192
- movs r0, 0x38
-_08023190:
- mov r8, r0
-_08023192:
- mov r1, r9
- ldr r2, [r1]
- ldrb r1, [r2, 0x3]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _080231B0
- cmp r3, 0x1
- bgt _080231B0
- adds r0, r2, 0x4
- mov r1, r9
- b _080231FE
- .align 2, 0
-_080231AC: .4byte gUnknown_2023BFC
-_080231B0:
- cmp r3, 0
- beq _080231F8
- ldr r4, _080231EC @ =gBattleScripting
- ldrb r0, [r4, 0x1B]
- cmp r0, 0
- bne _080231F8
- movs r0, 0
- movs r1, 0x1
- mov r2, r8
- str r3, [sp]
- bl BtlController_EmitBattleAnimation
- ldr r0, _080231F0 @ =gActiveBattler
- ldrb r0, [r0]
- bl MarkBattlerForControllerExec
- ldr r0, _080231F4 @ =gBattlescriptCurrInstr
- ldr r0, [r0]
- ldrb r1, [r0, 0x3]
- movs r0, 0x4
- ands r0, r1
- ldr r3, [sp]
- cmp r0, 0
- beq _080231E8
- cmp r3, 0x1
- ble _080231E8
- movs r0, 0x1
- strb r0, [r4, 0x1B]
-_080231E8:
- ldr r1, _080231F4 @ =gBattlescriptCurrInstr
- b _080231FA
- .align 2, 0
-_080231EC: .4byte gBattleScripting
-_080231F0: .4byte gActiveBattler
-_080231F4: .4byte gBattlescriptCurrInstr
-_080231F8:
- mov r1, r9
-_080231FA:
- ldr r0, [r1]
- adds r0, 0x4
-_080231FE:
- str r0, [r1]
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end atk48_playstatchangeanimation
-
- thumb_func_start atk49_moveend
-atk49_moveend: @ 8023210
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x1C
- movs r0, 0
- mov r10, r0
- ldr r2, _08023260 @ =gChosenMove
- ldrh r1, [r2]
- ldr r0, _08023264 @ =0x0000ffff
- movs r3, 0
- str r3, [sp, 0x18]
- cmp r1, r0
- beq _08023232
- ldrh r2, [r2]
- str r2, [sp, 0x18]
-_08023232:
- ldr r0, _08023268 @ =gBattlescriptCurrInstr
- ldr r0, [r0]
- ldrb r4, [r0, 0x1]
- str r4, [sp, 0x10]
- ldrb r0, [r0, 0x2]
- str r0, [sp, 0x14]
- ldr r1, _0802326C @ =gBattleMons
- ldr r0, _08023270 @ =gBattlerAttacker
- ldrb r2, [r0]
- movs r0, 0x58
- muls r0, r2
- adds r1, r0, r1
- ldrh r0, [r1, 0x2E]
- cmp r0, 0xAF
- bne _08023278
- ldr r1, _08023274 @ =gEnigmaBerries
- lsls r0, r2, 3
- subs r0, r2
- lsls r0, 2
- adds r0, r1
- ldrb r0, [r0, 0x7]
- b _08023282
- .align 2, 0
-_08023260: .4byte gChosenMove
-_08023264: .4byte 0x0000ffff
-_08023268: .4byte gBattlescriptCurrInstr
-_0802326C: .4byte gBattleMons
-_08023270: .4byte gBattlerAttacker
-_08023274: .4byte gEnigmaBerries
-_08023278:
- ldrh r0, [r1, 0x2E]
- bl ItemId_GetHoldEffect
- lsls r0, 24
- lsrs r0, 24
-_08023282:
- str r0, [sp, 0x8]
- ldr r1, _080232A4 @ =gBattleStruct
- ldr r0, _080232A8 @ =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, 0xC8
- ldr r1, [r1]
- adds r0, r1, r0
- str r0, [sp, 0xC]
- ldrb r0, [r1, 0x13]
- cmp r0, 0
- beq _08023334
- movs r5, 0x3F
- ands r5, r0
- str r5, [sp, 0x4]
- b _08023346
- .align 2, 0
-_080232A4: .4byte gBattleStruct
-_080232A8: .4byte gBattlerAttacker
-_080232AC:
- ldr r4, _080232C0 @ =gActiveBattler
- strb r2, [r4]
- movs r0, 0
- movs r1, 0x1
- bl BtlController_EmitSpriteInvisibility
- ldrb r0, [r4]
- bl MarkBattlerForControllerExec
- b _0802379E
- .align 2, 0
-_080232C0: .4byte gActiveBattler
-_080232C4:
- ldr r4, _080232E8 @ =gActiveBattler
- strb r2, [r4]
- movs r0, 0
- movs r1, 0
- bl BtlController_EmitSpriteInvisibility
- ldrb r0, [r4]
- bl MarkBattlerForControllerExec
- ldrb r1, [r6]
- lsls r1, 2
- adds r1, r5
- ldr r0, [r1]
- ldr r2, _080232EC @ =0xfffbff3f
- ands r0, r2
- str r0, [r1]
- b _0802379E
- .align 2, 0
-_080232E8: .4byte gActiveBattler
-_080232EC: .4byte 0xfffbff3f
-_080232F0:
- strb r2, [r7]
- ldr r0, [r5]
- orrs r0, r6
- str r0, [r5]
- ldr r0, _08023324 @ =gBattleScripting
- strb r4, [r0, 0x14]
- bl MoveValuesCleanUp
- ldr r2, _08023328 @ =gBattleScriptsForMoveEffects
- mov r0, r8
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- add r0, r9
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r2
- ldr r0, [r0]
- bl BattleScriptPush
- ldr r1, _0802332C @ =gBattlescriptCurrInstr
- ldr r0, _08023330 @ =BattleScript_FlushMessageBox
- bl _08023BFC
- .align 2, 0
-_08023324: .4byte gBattleScripting
-_08023328: .4byte gBattleScriptsForMoveEffects
-_0802332C: .4byte gBattlescriptCurrInstr
-_08023330: .4byte BattleScript_FlushMessageBox
-_08023334:
- ldr r2, _0802334C @ =gBattleMoves
- ldr r0, _08023350 @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x2]
- str r0, [sp, 0x4]
-_08023346:
- ldr r1, _08023354 @ =gBattleScripting
- mov r12, r1
- b _08023362
- .align 2, 0
-_0802334C: .4byte gBattleMoves
-_08023350: .4byte gCurrentMove
-_08023354: .4byte gBattleScripting
-_08023358:
- mov r2, r10
- cmp r2, 0
- beq _08023362
- bl _08023BE8
-_08023362:
- mov r3, r12
- ldrb r0, [r3, 0x14]
- cmp r0, 0x11
- bls _0802336E
- bl _08023BB4
-_0802336E:
- lsls r0, 2
- ldr r1, _08023378 @ =_0802337C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08023378: .4byte _0802337C
- .align 2, 0
-_0802337C:
- .4byte _080233C4
- .4byte _080234A0
- .4byte _0802355C
- .4byte _08023580
- .4byte _08023598
- .4byte _080235C0
- .4byte _080235E4
- .4byte _0802368C
- .4byte _08023702
- .4byte _08023738
- .4byte _080237D8
- .4byte _080236CC
- .4byte _080236EC
- .4byte _0802381C
- .4byte _08023860
- .4byte _08023A40
- .4byte _08023B28
- .4byte _08023BB4
-_080233C4:
- ldr r6, _0802347C @ =gBattleMons
- ldr r5, _08023480 @ =gBattlerTarget
- ldrb r3, [r5]
- movs r7, 0x58
- adds r2, r3, 0
- muls r2, r7
- adds r0, r6, 0
- adds r0, 0x50
- adds r0, r2, r0
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 16
- ands r0, r1
- cmp r0, 0
- bne _080233E4
- b _080237C8
-_080233E4:
- adds r0, r2, r6
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- bne _080233EE
- b _080237C8
-_080233EE:
- ldr r0, _08023484 @ =gBattlerAttacker
- ldrb r1, [r0]
- cmp r1, r3
- bne _080233F8
- b _080237C8
-_080233F8:
- adds r0, r1, 0
- bl GetBattlerSide
- adds r4, r0, 0
- ldrb r0, [r5]
- bl GetBattlerSide
- lsls r4, 24
- lsls r0, 24
- cmp r4, r0
- bne _08023410
- b _080237C8
-_08023410:
- ldr r0, _08023488 @ =gMoveResultFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- beq _0802341E
- b _080237C8
-_0802341E:
- ldr r2, _0802348C @ =gSpecialStatuses
- ldrb r3, [r5]
- lsls r0, r3, 2
- adds r0, r3
- lsls r1, r0, 2
- adds r0, r2, 0
- adds r0, 0x8
- adds r0, r1, r0
- ldr r0, [r0]
- cmp r0, 0
- bne _08023442
- adds r0, r2, 0
- adds r0, 0xC
- adds r0, r1, r0
- ldr r0, [r0]
- cmp r0, 0
- bne _08023442
- b _080237C8
-_08023442:
- ldr r2, _08023490 @ =gBattleMoves
- ldr r0, _08023494 @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x1]
- cmp r0, 0
- bne _08023458
- b _080237C8
-_08023458:
- adds r0, r3, 0
- muls r0, r7
- adds r1, r0, r6
- ldrb r2, [r1, 0x19]
- movs r0, 0x19
- ldrsb r0, [r1, r0]
- cmp r0, 0xB
- ble _0802346A
- b _080237C8
-_0802346A:
- adds r0, r2, 0x1
- strb r0, [r1, 0x19]
- bl BattleScriptPushCursor
- ldr r1, _08023498 @ =gBattlescriptCurrInstr
- ldr r0, _0802349C @ =BattleScript_RageIsBuilding
- str r0, [r1]
- b _080236FC
- .align 2, 0
-_0802347C: .4byte gBattleMons
-_08023480: .4byte gBattlerTarget
-_08023484: .4byte gBattlerAttacker
-_08023488: .4byte gMoveResultFlags
-_0802348C: .4byte gSpecialStatuses
-_08023490: .4byte gBattleMoves
-_08023494: .4byte gCurrentMove
-_08023498: .4byte gBattlescriptCurrInstr
-_0802349C: .4byte BattleScript_RageIsBuilding
-_080234A0:
- ldr r4, _0802353C @ =gBattleMons
- ldr r6, _08023540 @ =gBattlerTarget
- ldrb r2, [r6]
- movs r5, 0x58
- mov r12, r5
- mov r1, r12
- muls r1, r2
- adds r7, r4, 0
- adds r7, 0x4C
- adds r5, r1, r7
- ldr r3, [r5]
- movs r0, 0x20
- ands r0, r3
- cmp r0, 0
- bne _080234C0
- b _080237C8
-_080234C0:
- adds r0, r1, r4
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- bne _080234CA
- b _080237C8
-_080234CA:
- ldr r0, _08023544 @ =gBattlerAttacker
- ldrb r0, [r0]
- cmp r0, r2
- bne _080234D4
- b _080237C8
-_080234D4:
- ldr r0, _08023548 @ =gSpecialStatuses
- lsls r1, r2, 2
- adds r1, r2
- lsls r1, 2
- adds r0, 0xC
- adds r1, r0
- ldr r0, [r1]
- cmp r0, 0
- bne _080234E8
- b _080237C8
-_080234E8:
- ldr r0, _0802354C @ =gMoveResultFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- beq _080234F6
- b _080237C8
-_080234F6:
- ldr r0, [sp, 0x4]
- cmp r0, 0xA
- beq _080234FE
- b _080237C8
-_080234FE:
- movs r0, 0x21
- negs r0, r0
- ands r3, r0
- str r3, [r5]
- ldr r4, _08023550 @ =gActiveBattler
- ldrb r0, [r6]
- strb r0, [r4]
- ldrb r0, [r6]
- mov r1, r12
- muls r1, r0
- adds r0, r1, 0
- adds r0, r7
- str r0, [sp]
- movs r0, 0
- movs r1, 0x28
- movs r2, 0
- movs r3, 0x4
- bl BtlController_EmitSetMonData
- ldrb r0, [r4]
- bl MarkBattlerForControllerExec
- bl BattleScriptPushCursor
- ldr r1, _08023554 @ =gBattlescriptCurrInstr
- ldr r0, _08023558 @ =BattleScript_DefrostedViaFireMove
- str r0, [r1]
- movs r2, 0x1
- mov r10, r2
- b _080237C8
- .align 2, 0
-_0802353C: .4byte gBattleMons
-_08023540: .4byte gBattlerTarget
-_08023544: .4byte gBattlerAttacker
-_08023548: .4byte gSpecialStatuses
-_0802354C: .4byte gMoveResultFlags
-_08023550: .4byte gActiveBattler
-_08023554: .4byte gBattlescriptCurrInstr
-_08023558: .4byte BattleScript_DefrostedViaFireMove
-_0802355C:
- ldr r0, _0802357C @ =gBattlerTarget
- ldrb r1, [r0]
- movs r0, 0
- str r0, [sp]
- movs r0, 0x7
- movs r2, 0
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- bne _08023576
- b _080237C8
-_08023576:
- movs r3, 0x1
- mov r10, r3
- b _080237C8
- .align 2, 0
-_0802357C: .4byte gBattlerTarget
-_08023580:
- ldr r0, _08023594 @ =gBattlerTarget
- ldrb r1, [r0]
- movs r0, 0
- str r0, [sp]
- movs r0, 0x4
- movs r2, 0
- movs r3, 0
- bl AbilityBattleEffects
- b _080236F6
- .align 2, 0
-_08023594: .4byte gBattlerTarget
-_08023598:
- movs r0, 0
- str r0, [sp]
- movs r0, 0x5
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- bne _080235B0
- b _080237C8
-_080235B0:
- movs r5, 0x1
- mov r10, r5
- ldr r0, _080235BC @ =gBattleScripting
- mov r12, r0
- b _08023BB4
- .align 2, 0
-_080235BC: .4byte gBattleScripting
-_080235C0:
- ldr r0, _080235E0 @ =gBattlerAttacker
- ldrb r1, [r0]
- movs r0, 0
- str r0, [sp]
- movs r0, 0x8
- movs r2, 0
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- bne _080235DA
- b _080237C8
-_080235DA:
- movs r1, 0x1
- mov r10, r1
- b _080237C8
- .align 2, 0
-_080235E0: .4byte gBattlerAttacker
-_080235E4:
- ldr r0, _08023674 @ =gHitMarker
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 18
- ands r0, r1
- cmp r0, 0
- beq _08023628
- ldr r2, [sp, 0x8]
- cmp r2, 0x1D
- bne _08023628
- ldr r0, _08023678 @ =gChosenMove
- ldrh r2, [r0]
- adds r3, r0, 0
- cmp r2, 0xA5
- beq _08023628
- ldr r4, [sp, 0xC]
- ldrh r1, [r4]
- cmp r1, 0
- beq _08023610
- ldr r0, _0802367C @ =0x0000ffff
- cmp r1, r0
- bne _08023628
-_08023610:
- cmp r2, 0xE2
- bne _08023622
- ldr r0, _08023680 @ =gMoveResultFlags
- ldrb r1, [r0]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- bne _08023622
- b _08023AFA
-_08023622:
- ldrh r0, [r3]
- ldr r1, [sp, 0xC]
- strh r0, [r1]
-_08023628:
- movs r4, 0
- ldr r2, _08023684 @ =gBattleMons
- ldr r3, _08023688 @ =gBattlerAttacker
- ldrb r1, [r3]
- movs r0, 0x58
- muls r0, r1
- adds r2, 0xC
- adds r0, r2
- ldrh r0, [r0]
- ldr r5, [sp, 0xC]
- ldrh r1, [r5]
- mov r9, r3
- cmp r0, r1
- beq _08023660
- mov r6, r9
- movs r3, 0x58
- adds r5, r1, 0
-_0802364A:
- adds r4, 0x1
- cmp r4, 0x3
- bgt _08023660
- lsls r0, r4, 1
- ldrb r1, [r6]
- muls r1, r3
- adds r0, r1
- adds r0, r2
- ldrh r0, [r0]
- cmp r0, r5
- bne _0802364A
-_08023660:
- cmp r4, 0x4
- bne _0802366A
- movs r0, 0
- ldr r1, [sp, 0xC]
- strh r0, [r1]
-_0802366A:
- mov r2, r12
- ldrb r0, [r2, 0x14]
- adds r0, 0x1
- strb r0, [r2, 0x14]
- b _08023BB4
- .align 2, 0
-_08023674: .4byte gHitMarker
-_08023678: .4byte gChosenMove
-_0802367C: .4byte 0x0000ffff
-_08023680: .4byte gMoveResultFlags
-_08023684: .4byte gBattleMons
-_08023688: .4byte gBattlerAttacker
-_0802368C:
- movs r4, 0
- ldr r0, _080236C0 @ =gBattlersCount
- ldrb r3, [r0]
- cmp r4, r3
- blt _08023698
- b _08023846
-_08023698:
- ldr r7, _080236C4 @ =gBattleStruct
- movs r6, 0
- movs r3, 0xD0
- adds r5, r0, 0
- ldr r2, _080236C8 @ =gBattleMons
-_080236A2:
- ldr r0, [r7]
- adds r0, r3
- ldrh r1, [r0]
- cmp r1, 0
- beq _080236B0
- strh r1, [r2, 0x2E]
- strh r6, [r0]
-_080236B0:
- adds r3, 0x2
- adds r2, 0x58
- adds r4, 0x1
- ldrb r0, [r5]
- cmp r4, r0
- blt _080236A2
- b _08023846
- .align 2, 0
-_080236C0: .4byte gBattlersCount
-_080236C4: .4byte gBattleStruct
-_080236C8: .4byte gBattleMons
-_080236CC:
- movs r0, 0x3
- movs r1, 0
- movs r2, 0
- bl ItemBattleEffects
- lsls r0, 24
- cmp r0, 0
- beq _080237C8
- movs r2, 0x1
- mov r10, r2
- ldr r3, _080236E8 @ =gBattleScripting
- mov r12, r3
- b _08023BB4
- .align 2, 0
-_080236E8: .4byte gBattleScripting
-_080236EC:
- movs r0, 0x4
- movs r1, 0
- movs r2, 0
- bl ItemBattleEffects
-_080236F6:
- lsls r0, 24
- cmp r0, 0
- beq _080237C8
-_080236FC:
- movs r4, 0x1
- mov r10, r4
- b _080237C8
-_08023702:
- ldr r1, _08023728 @ =gStatuses3
- ldr r0, _0802372C @ =gBattlerAttacker
- ldrb r2, [r0]
- lsls r0, r2, 2
- adds r0, r1
- ldr r0, [r0]
- ldr r1, _08023730 @ =0x000400c0
- ands r0, r1
- cmp r0, 0
- bne _08023718
- b _08023AFA
-_08023718:
- ldr r0, _08023734 @ =gHitMarker
- ldr r0, [r0]
- movs r1, 0x80
- ands r0, r1
- cmp r0, 0
- beq _08023726
- b _080232AC
-_08023726:
- b _08023AFA
- .align 2, 0
-_08023728: .4byte gStatuses3
-_0802372C: .4byte gBattlerAttacker
-_08023730: .4byte 0x000400c0
-_08023734: .4byte gHitMarker
-_08023738:
- ldr r0, _080237A8 @ =gMoveResultFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- bne _08023764
- ldr r1, _080237AC @ =gStatuses3
- ldr r0, _080237B0 @ =gBattlerAttacker
- ldrb r2, [r0]
- lsls r0, r2, 2
- adds r0, r1
- ldr r0, [r0]
- ldr r1, _080237B4 @ =0x000400c0
- ands r0, r1
- cmp r0, 0
- beq _08023764
- adds r0, r2, 0
- bl WasUnableToUseMove
- lsls r0, 24
- cmp r0, 0
- beq _080237C8
-_08023764:
- ldr r4, _080237B8 @ =gActiveBattler
- ldr r5, _080237B0 @ =gBattlerAttacker
- ldrb r0, [r5]
- strb r0, [r4]
- movs r0, 0
- movs r1, 0
- bl BtlController_EmitSpriteInvisibility
- ldrb r0, [r4]
- bl MarkBattlerForControllerExec
- ldr r0, _080237AC @ =gStatuses3
- ldrb r2, [r5]
- lsls r2, 2
- adds r2, r0
- ldr r0, [r2]
- ldr r1, _080237BC @ =0xfffbff3f
- ands r0, r1
- str r0, [r2]
- ldr r2, _080237C0 @ =gSpecialStatuses
- ldrb r1, [r5]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- movs r2, 0x4
- orrs r1, r2
- strb r1, [r0]
-_0802379E:
- ldr r1, _080237C4 @ =gBattleScripting
- ldrb r0, [r1, 0x14]
- adds r0, 0x1
- strb r0, [r1, 0x14]
- b _08023BFE
- .align 2, 0
-_080237A8: .4byte gMoveResultFlags
-_080237AC: .4byte gStatuses3
-_080237B0: .4byte gBattlerAttacker
-_080237B4: .4byte 0x000400c0
-_080237B8: .4byte gActiveBattler
-_080237BC: .4byte 0xfffbff3f
-_080237C0: .4byte gSpecialStatuses
-_080237C4: .4byte gBattleScripting
-_080237C8:
- ldr r1, _080237D4 @ =gBattleScripting
- ldrb r0, [r1, 0x14]
- adds r0, 0x1
- strb r0, [r1, 0x14]
- mov r12, r1
- b _08023BB4
- .align 2, 0
-_080237D4: .4byte gBattleScripting
-_080237D8:
- ldr r0, _08023808 @ =gSpecialStatuses
- ldr r6, _0802380C @ =gBattlerTarget
- ldrb r2, [r6]
- lsls r3, r2, 2
- adds r1, r3, r2
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1]
- lsls r0, 29
- cmp r0, 0
- blt _08023846
- ldr r0, _08023810 @ =gBattlersCount
- ldrb r0, [r0]
- cmp r2, r0
- bcs _08023846
- ldr r5, _08023814 @ =gStatuses3
- adds r0, r3, r5
- ldr r0, [r0]
- ldr r1, _08023818 @ =0x000400c0
- ands r0, r1
- cmp r0, 0
- bne _08023806
- b _080232C4
-_08023806:
- b _08023846
- .align 2, 0
-_08023808: .4byte gSpecialStatuses
-_0802380C: .4byte gBattlerTarget
-_08023810: .4byte gBattlersCount
-_08023814: .4byte gStatuses3
-_08023818: .4byte 0x000400c0
-_0802381C:
- movs r4, 0
- ldr r0, _08023850 @ =gBattlersCount
- ldrb r2, [r0]
- cmp r4, r2
- bge _08023846
- ldr r2, _08023854 @ =gDisableStructs
- ldr r5, _08023858 @ =0xfeffffff
- adds r3, r0, 0
- ldr r1, _0802385C @ =gUnknown_2023C34
-_0802382E:
- ldrb r0, [r2, 0xA]
- cmp r0, 0
- bne _0802383A
- ldr r0, [r1]
- ands r0, r5
- str r0, [r1]
-_0802383A:
- adds r2, 0x1C
- adds r1, 0x58
- adds r4, 0x1
- ldrb r0, [r3]
- cmp r4, r0
- blt _0802382E
-_08023846:
- mov r1, r12
- ldrb r0, [r1, 0x14]
- adds r0, 0x1
- strb r0, [r1, 0x14]
- b _08023BB4
- .align 2, 0
-_08023850: .4byte gBattlersCount
-_08023854: .4byte gDisableStructs
-_08023858: .4byte 0xfeffffff
-_0802385C: .4byte gUnknown_2023C34
-_08023860:
- ldr r1, _08023914 @ =gHitMarker
- ldr r3, [r1]
- movs r0, 0x80
- lsls r0, 5
- ands r0, r3
- ldr r2, _08023918 @ =gBattlerAttacker
- mov r9, r2
- adds r5, r1, 0
- cmp r0, 0
- beq _0802388A
- ldr r0, _0802391C @ =gActiveBattler
- ldrb r2, [r2]
- strb r2, [r0]
- ldr r1, _08023920 @ =gBattlerTarget
- ldrb r0, [r1]
- mov r4, r9
- strb r0, [r4]
- strb r2, [r1]
- ldr r0, _08023924 @ =0xffffefff
- ands r3, r0
- str r3, [r5]
-_0802388A:
- ldr r0, [r5]
- movs r1, 0x80
- lsls r1, 3
- ands r0, r1
- cmp r0, 0
- beq _080238A6
- ldr r0, _08023928 @ =gLastPrintedMoves
- mov r2, r9
- ldrb r1, [r2]
- lsls r1, 1
- adds r1, r0
- ldr r0, _0802392C @ =gChosenMove
- ldrh r0, [r0]
- strh r0, [r1]
-_080238A6:
- ldr r0, _08023930 @ =gAbsentBattlerFlags
- ldrb r1, [r0]
- ldr r2, _08023934 @ =gBitTable
- mov r3, r9
- ldrb r4, [r3]
- lsls r0, r4, 2
- adds r0, r2
- ldr r3, [r0]
- ands r1, r3
- adds r6, r2, 0
- cmp r1, 0
- beq _080238C0
- b _08023A2C
-_080238C0:
- ldr r0, _08023938 @ =gBattleStruct
- ldr r1, [r0]
- adds r1, 0x91
- ldrb r1, [r1]
- ands r1, r3
- adds r7, r0, 0
- cmp r1, 0
- beq _080238D2
- b _08023A2C
-_080238D2:
- ldr r0, _0802393C @ =gBattleMoves
- ldr r2, [sp, 0x18]
- lsls r1, r2, 1
- adds r1, r2
- lsls r1, 2
- adds r1, r0
- ldrb r1, [r1]
- mov r8, r0
- cmp r1, 0x7F
- bne _080238E8
- b _08023A2C
-_080238E8:
- ldr r0, [r5]
- movs r1, 0x80
- lsls r1, 18
- ands r0, r1
- cmp r0, 0
- beq _0802394C
- ldr r0, _08023940 @ =gLastMoves
- lsls r1, r4, 1
- adds r1, r0
- ldr r0, _0802392C @ =gChosenMove
- ldrh r0, [r0]
- strh r0, [r1]
- ldr r0, _08023944 @ =gLastResultingMoves
- mov r3, r9
- ldrb r1, [r3]
- lsls r1, 1
- adds r1, r0
- ldr r0, _08023948 @ =gCurrentMove
- ldrh r0, [r0]
- strh r0, [r1]
- b _08023966
- .align 2, 0
-_08023914: .4byte gHitMarker
-_08023918: .4byte gBattlerAttacker
-_0802391C: .4byte gActiveBattler
-_08023920: .4byte gBattlerTarget
-_08023924: .4byte 0xffffefff
-_08023928: .4byte gLastPrintedMoves
-_0802392C: .4byte gChosenMove
-_08023930: .4byte gAbsentBattlerFlags
-_08023934: .4byte gBitTable
-_08023938: .4byte gBattleStruct
-_0802393C: .4byte gBattleMoves
-_08023940: .4byte gLastMoves
-_08023944: .4byte gLastResultingMoves
-_08023948: .4byte gCurrentMove
-_0802394C:
- ldr r1, _080239B4 @ =gLastMoves
- lsls r0, r4, 1
- adds r0, r1
- ldr r1, _080239B8 @ =0x0000ffff
- strh r1, [r0]
- ldr r1, _080239BC @ =gLastResultingMoves
- mov r4, r9
- ldrb r0, [r4]
- lsls r0, 1
- adds r0, r1
- movs r1, 0x1
- negs r1, r1
- strh r1, [r0]
-_08023966:
- ldr r2, _080239C0 @ =gBattlerTarget
- ldrb r3, [r2]
- lsls r0, r3, 2
- adds r0, r6
- ldr r0, [r0]
- lsls r0, 28
- ldr r1, [r5]
- ands r1, r0
- cmp r1, 0
- bne _08023984
- ldr r0, _080239C4 @ =gLastHitBy
- adds r0, r3, r0
- mov r3, r9
- ldrb r1, [r3]
- strb r1, [r0]
-_08023984:
- ldr r0, [r5]
- movs r1, 0x80
- lsls r1, 18
- ands r0, r1
- cmp r0, 0
- beq _08023A20
- ldr r0, _080239C8 @ =gMoveResultFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- bne _08023A20
- ldr r0, _080239CC @ =gChosenMove
- ldrh r3, [r0]
- ldr r0, _080239B8 @ =0x0000ffff
- cmp r3, r0
- bne _080239D4
- ldr r1, _080239D0 @ =gLastLandedMoves
- ldrb r0, [r2]
- lsls r0, 1
- adds r0, r1
- strh r3, [r0]
- b _08023A2C
- .align 2, 0
-_080239B4: .4byte gLastMoves
-_080239B8: .4byte 0x0000ffff
-_080239BC: .4byte gLastResultingMoves
-_080239C0: .4byte gBattlerTarget
-_080239C4: .4byte gLastHitBy
-_080239C8: .4byte gMoveResultFlags
-_080239CC: .4byte gChosenMove
-_080239D0: .4byte gLastLandedMoves
-_080239D4:
- ldr r0, _080239F8 @ =gLastLandedMoves
- ldrb r1, [r2]
- lsls r1, 1
- adds r1, r0
- ldr r4, _080239FC @ =gCurrentMove
- ldrh r0, [r4]
- strh r0, [r1]
- ldr r0, [r7]
- ldrb r3, [r0, 0x13]
- cmp r3, 0
- beq _08023A04
- ldr r0, _08023A00 @ =gLastHitByType
- ldrb r1, [r2]
- lsls r1, 1
- adds r1, r0
- movs r0, 0x3F
- ands r0, r3
- b _08023A2A
- .align 2, 0
-_080239F8: .4byte gLastLandedMoves
-_080239FC: .4byte gCurrentMove
-_08023A00: .4byte gLastHitByType
-_08023A04:
- ldr r0, _08023A1C @ =gLastHitByType
- ldrb r2, [r2]
- lsls r2, 1
- adds r2, r0
- ldrh r1, [r4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- add r0, r8
- ldrb r0, [r0, 0x2]
- strh r0, [r2]
- b _08023A2C
- .align 2, 0
-_08023A1C: .4byte gLastHitByType
-_08023A20:
- ldr r0, _08023A38 @ =gLastLandedMoves
- ldrb r1, [r2]
- lsls r1, 1
- adds r1, r0
- ldr r0, _08023A3C @ =0x0000ffff
-_08023A2A:
- strh r0, [r1]
-_08023A2C:
- mov r4, r12
- ldrb r0, [r4, 0x14]
- adds r0, 0x1
- strb r0, [r4, 0x14]
- b _08023BB4
- .align 2, 0
-_08023A38: .4byte gLastLandedMoves
-_08023A3C: .4byte 0x0000ffff
-_08023A40:
- ldr r0, _08023B04 @ =gAbsentBattlerFlags
- ldrb r1, [r0]
- ldr r7, _08023B08 @ =gBitTable
- ldr r2, _08023B0C @ =gBattlerAttacker
- ldrb r3, [r2]
- lsls r0, r3, 2
- adds r0, r7
- ldr r4, [r0]
- ands r1, r4
- mov r9, r2
- cmp r1, 0
- bne _08023AFA
- ldr r6, _08023B10 @ =gBattleStruct
- ldr r5, [r6]
- adds r0, r5, 0
- adds r0, 0x91
- ldrb r0, [r0]
- ands r0, r4
- cmp r0, 0
- bne _08023AFA
- ldr r1, _08023B14 @ =gBattleMoves
- ldr r2, [sp, 0x18]
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0, 0x8]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _08023AFA
- ldr r0, _08023B18 @ =gHitMarker
- ldr r1, [r0]
- movs r0, 0x80
- lsls r0, 18
- ands r0, r1
- cmp r0, 0
- beq _08023AFA
- ldr r4, _08023B1C @ =gBattlerTarget
- ldrb r0, [r4]
- cmp r3, r0
- beq _08023AFA
- ldrb r2, [r4]
- lsls r0, r2, 2
- adds r0, r7
- ldr r0, [r0]
- lsls r0, 28
- ands r1, r0
- cmp r1, 0
- bne _08023AFA
- ldr r0, _08023B20 @ =gMoveResultFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- bne _08023AFA
- lsls r1, r2, 1
- adds r1, r5
- adds r1, 0x98
- ldr r3, _08023B24 @ =gChosenMove
- ldrh r0, [r3]
- strb r0, [r1]
- ldrb r1, [r4]
- ldr r0, [r6]
- lsls r1, 1
- adds r1, r0
- adds r1, 0x99
- ldrh r0, [r3]
- lsrs r0, 8
- strb r0, [r1]
- ldrb r0, [r4]
- mov r2, r9
- ldrb r1, [r2]
- ldr r2, [r6]
- lsls r0, 3
- lsls r1, 1
- adds r0, r1
- adds r0, r2
- adds r0, 0xE0
- ldrh r1, [r3]
- strb r1, [r0]
- ldrb r1, [r4]
- mov r4, r9
- ldrb r0, [r4]
- ldr r2, [r6]
- lsls r1, 3
- lsls r0, 1
- adds r1, r0
- adds r1, r2
- adds r1, 0xE1
- ldrh r0, [r3]
- lsrs r0, 8
- strb r0, [r1]
-_08023AFA:
- mov r5, r12
- ldrb r0, [r5, 0x14]
- adds r0, 0x1
- strb r0, [r5, 0x14]
- b _08023BB4
- .align 2, 0
-_08023B04: .4byte gAbsentBattlerFlags
-_08023B08: .4byte gBitTable
-_08023B0C: .4byte gBattlerAttacker
-_08023B10: .4byte gBattleStruct
-_08023B14: .4byte gBattleMoves
-_08023B18: .4byte gHitMarker
-_08023B1C: .4byte gBattlerTarget
-_08023B20: .4byte gMoveResultFlags
-_08023B24: .4byte gChosenMove
-_08023B28:
- ldr r5, _08023C10 @ =gHitMarker
- ldr r2, [r5]
- movs r0, 0x80
- lsls r0, 12
- ands r0, r2
- cmp r0, 0
- bne _08023BAC
- ldr r0, _08023C14 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08023BAC
- ldr r1, _08023C18 @ =gProtectStructs
- ldr r0, _08023C1C @ =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 4
- adds r0, r1
- ldrb r0, [r0, 0x1]
- lsls r0, 29
- cmp r0, 0
- blt _08023BAC
- ldr r0, _08023C20 @ =gBattleMoves
- mov r9, r0
- ldr r1, _08023C24 @ =gCurrentMove
- mov r8, r1
- ldrh r0, [r1]
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- add r1, r9
- ldrb r0, [r1, 0x6]
- cmp r0, 0x8
- bne _08023BAC
- movs r6, 0x80
- lsls r6, 2
- adds r4, r6, 0
- ands r4, r2
- cmp r4, 0
- bne _08023BAC
- ldr r7, _08023C28 @ =gBattlerTarget
- ldrb r0, [r7]
- bl GetBattlerPosition
- movs r1, 0x2
- eors r0, r1
- lsls r0, 24
- lsrs r0, 24
- bl GetBattlerAtPosition
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r1, _08023C2C @ =gBattleMons
- movs r0, 0x58
- muls r0, r2
- adds r0, r1
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- beq _08023BA2
- bl _080232F0
-_08023BA2:
- ldr r0, [r5]
- orrs r0, r6
- str r0, [r5]
- ldr r2, _08023C30 @ =gBattleScripting
- mov r12, r2
-_08023BAC:
- mov r3, r12
- ldrb r0, [r3, 0x14]
- adds r0, 0x1
- strb r0, [r3, 0x14]
-_08023BB4:
- ldr r4, [sp, 0x10]
- cmp r4, 0x1
- bne _08023BC6
- mov r5, r10
- cmp r5, 0
- bne _08023BC6
- movs r0, 0x11
- mov r1, r12
- strb r0, [r1, 0x14]
-_08023BC6:
- ldr r2, [sp, 0x10]
- cmp r2, 0x2
- bne _08023BDC
- ldr r4, [sp, 0x14]
- mov r3, r12
- ldrb r3, [r3, 0x14]
- cmp r4, r3
- bne _08023BDC
- movs r0, 0x11
- mov r4, r12
- strb r0, [r4, 0x14]
-_08023BDC:
- mov r5, r12
- ldrb r0, [r5, 0x14]
- cmp r0, 0x11
- beq _08023BE8
- bl _08023358
-_08023BE8:
- mov r1, r12
- ldrb r0, [r1, 0x14]
- cmp r0, 0x11
- bne _08023BFE
- mov r2, r10
- cmp r2, 0
- bne _08023BFE
- ldr r1, _08023C34 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x3
-_08023BFC:
- str r0, [r1]
-_08023BFE:
- add sp, 0x1C
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08023C10: .4byte gHitMarker
-_08023C14: .4byte gBattleTypeFlags
-_08023C18: .4byte gProtectStructs
-_08023C1C: .4byte gBattlerAttacker
-_08023C20: .4byte gBattleMoves
-_08023C24: .4byte gCurrentMove
-_08023C28: .4byte gBattlerTarget
-_08023C2C: .4byte gBattleMons
-_08023C30: .4byte gBattleScripting
-_08023C34: .4byte gBattlescriptCurrInstr
- thumb_func_end atk49_moveend
-
- thumb_func_start atk4A_typecalc2
-atk4A_typecalc2: @ 8023C38
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- movs r4, 0
- movs r5, 0
- ldr r2, _08023C9C @ =gBattleMoves
- ldr r0, _08023CA0 @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x2]
- mov r8, r0
- ldr r2, _08023CA4 @ =gBattleMons
- ldr r3, _08023CA8 @ =gBattlerTarget
- ldrb r1, [r3]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- adds r0, 0x20
- ldrb r0, [r0]
- mov r12, r2
- adds r7, r3, 0
- cmp r0, 0x1A
- bne _08023CCC
- mov r1, r8
- cmp r1, 0x4
- bne _08023CCC
- ldr r3, _08023CAC @ =gLastUsedAbility
- strb r0, [r3]
- ldr r2, _08023CB0 @ =gMoveResultFlags
- ldrb r0, [r2]
- movs r1, 0x9
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _08023CB4 @ =gLastLandedMoves
- ldrb r0, [r7]
- lsls r0, 1
- adds r0, r1
- strh r4, [r0]
- ldr r0, _08023CB8 @ =gBattleCommunication
- mov r2, r8
- strb r2, [r0, 0x6]
- ldrb r0, [r7]
- ldrb r1, [r3]
- bl RecordAbilityBattle
- b _08023DAE
- .align 2, 0
-_08023C9C: .4byte gBattleMoves
-_08023CA0: .4byte gCurrentMove
-_08023CA4: .4byte gBattleMons
-_08023CA8: .4byte gBattlerTarget
-_08023CAC: .4byte gLastUsedAbility
-_08023CB0: .4byte gMoveResultFlags
-_08023CB4: .4byte gLastLandedMoves
-_08023CB8: .4byte gBattleCommunication
-_08023CBC:
- ldr r0, _08023CC8 @ =gMoveResultFlags
- ldrb r1, [r0]
- movs r2, 0x8
- orrs r1, r2
- strb r1, [r0]
- b _08023DAE
- .align 2, 0
-_08023CC8: .4byte gMoveResultFlags
-_08023CCC:
- ldr r1, _08023CD8 @ =gTypeEffectiveness
- adds r0, r5, r1
- ldrb r0, [r0]
- adds r6, r1, 0
- b _08023D8E
- .align 2, 0
-_08023CD8: .4byte gTypeEffectiveness
-_08023CDC:
- adds r0, r5, r6
- ldrb r0, [r0]
- cmp r0, r8
- bne _08023D88
- adds r2, r5, 0x1
- adds r3, r2, r6
- ldrb r1, [r7]
- movs r0, 0x58
- muls r0, r1
- add r0, r12
- adds r0, 0x21
- ldrb r1, [r3]
- adds r3, r2, 0
- ldrb r0, [r0]
- cmp r1, r0
- bne _08023D1A
- adds r0, r5, 0x2
- adds r0, r6
- ldrb r1, [r0]
- cmp r1, 0
- beq _08023CBC
- cmp r1, 0x5
- bne _08023D0E
- movs r0, 0x4
- orrs r4, r0
-_08023D0E:
- cmp r1, 0x14
- bne _08023D1A
- movs r0, 0x2
- orrs r4, r0
- lsls r0, r4, 24
- lsrs r4, r0, 24
-_08023D1A:
- adds r2, r3, r6
- ldrb r1, [r7]
- movs r0, 0x58
- muls r0, r1
- add r0, r12
- adds r1, r0, 0
- adds r1, 0x22
- ldrb r2, [r2]
- ldrb r1, [r1]
- cmp r2, r1
- bne _08023D88
- adds r0, 0x21
- ldrb r1, [r0]
- cmp r1, r2
- beq _08023D42
- adds r0, r5, 0x2
- adds r0, r6
- ldrb r0, [r0]
- cmp r0, 0
- beq _08023CBC
-_08023D42:
- cmp r1, r2
- beq _08023D58
- adds r0, r5, 0x2
- adds r0, r6
- ldrb r0, [r0]
- cmp r0, 0x5
- bne _08023D58
- movs r0, 0x4
- orrs r4, r0
- lsls r0, r4, 24
- lsrs r4, r0, 24
-_08023D58:
- adds r2, r3, r6
- ldrb r1, [r7]
- movs r0, 0x58
- muls r0, r1
- add r0, r12
- adds r1, r0, 0
- adds r1, 0x22
- ldrb r2, [r2]
- ldrb r1, [r1]
- cmp r2, r1
- bne _08023D88
- adds r0, 0x21
- ldrb r0, [r0]
- cmp r0, r2
- beq _08023D88
- adds r0, r5, 0x2
- adds r0, r6
- ldrb r0, [r0]
- cmp r0, 0x14
- bne _08023D88
- movs r0, 0x2
- orrs r4, r0
- lsls r0, r4, 24
- lsrs r4, r0, 24
-_08023D88:
- adds r5, 0x3
- adds r0, r5, r6
- ldrb r0, [r0]
-_08023D8E:
- cmp r0, 0xFF
- beq _08023DAE
- cmp r0, 0xFE
- bne _08023CDC
- ldrb r1, [r7]
- movs r0, 0x58
- muls r0, r1
- mov r1, r12
- adds r1, 0x50
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 22
- ands r0, r1
- cmp r0, 0
- beq _08023D88
-_08023DAE:
- ldr r2, _08023E5C @ =gBattleMons
- ldr r0, _08023E60 @ =gBattlerTarget
- mov r8, r0
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- adds r0, 0x20
- ldrb r6, [r0]
- cmp r6, 0x19
- bne _08023E2A
- movs r5, 0x29
- ands r5, r4
- cmp r5, 0
- bne _08023E2A
- ldr r0, _08023E64 @ =gBattlerAttacker
- ldrb r0, [r0]
- ldr r7, _08023E68 @ =gCurrentMove
- ldrh r1, [r7]
- bl AttacksThisTurn
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x2
- bne _08023E2A
- adds r0, r4, 0
- ands r0, r1
- cmp r0, 0
- beq _08023DF0
- movs r0, 0x6
- ands r4, r0
- cmp r4, 0x6
- bne _08023E2A
-_08023DF0:
- ldr r2, _08023E6C @ =gBattleMoves
- ldrh r1, [r7]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x1]
- cmp r0, 0
- beq _08023E2A
- ldr r3, _08023E70 @ =gLastUsedAbility
- strb r6, [r3]
- ldr r2, _08023E74 @ =gMoveResultFlags
- ldrb r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _08023E78 @ =gLastLandedMoves
- mov r2, r8
- ldrb r0, [r2]
- lsls r0, 1
- adds r0, r1
- strh r5, [r0]
- ldr r1, _08023E7C @ =gBattleCommunication
- movs r0, 0x3
- strb r0, [r1, 0x6]
- ldrb r0, [r2]
- ldrb r1, [r3]
- bl RecordAbilityBattle
-_08023E2A:
- ldr r0, _08023E74 @ =gMoveResultFlags
- ldrb r1, [r0]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _08023E48
- ldr r2, _08023E80 @ =gProtectStructs
- ldr r0, _08023E64 @ =gBattlerAttacker
- ldrb r1, [r0]
- lsls r1, 4
- adds r1, r2
- ldrb r0, [r1, 0x1]
- movs r2, 0x2
- orrs r0, r2
- strb r0, [r1, 0x1]
-_08023E48:
- ldr r1, _08023E84 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08023E5C: .4byte gBattleMons
-_08023E60: .4byte gBattlerTarget
-_08023E64: .4byte gBattlerAttacker
-_08023E68: .4byte gCurrentMove
-_08023E6C: .4byte gBattleMoves
-_08023E70: .4byte gLastUsedAbility
-_08023E74: .4byte gMoveResultFlags
-_08023E78: .4byte gLastLandedMoves
-_08023E7C: .4byte gBattleCommunication
-_08023E80: .4byte gProtectStructs
-_08023E84: .4byte gBattlescriptCurrInstr
- thumb_func_end atk4A_typecalc2
-
- thumb_func_start atk4B_returnatktoball
-atk4B_returnatktoball: @ 8023E88
- push {r4,lr}
- ldr r4, _08023EC4 @ =gActiveBattler
- ldr r0, _08023EC8 @ =gBattlerAttacker
- ldrb r0, [r0]
- strb r0, [r4]
- ldr r2, _08023ECC @ =gHitMarker
- ldr r1, _08023ED0 @ =gBitTable
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- lsls r1, 28
- ldr r0, [r2]
- ands r0, r1
- cmp r0, 0
- bne _08023EB6
- movs r0, 0
- movs r1, 0
- bl BtlController_EmitReturnMonToBall
- ldrb r0, [r4]
- bl MarkBattlerForControllerExec
-_08023EB6:
- ldr r1, _08023ED4 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08023EC4: .4byte gActiveBattler
-_08023EC8: .4byte gBattlerAttacker
-_08023ECC: .4byte gHitMarker
-_08023ED0: .4byte gBitTable
-_08023ED4: .4byte gBattlescriptCurrInstr
- thumb_func_end atk4B_returnatktoball
-
- thumb_func_start atk4C_getswitchedmondata
-atk4C_getswitchedmondata: @ 8023ED8
- push {r4,r5,lr}
- ldr r0, _08023F30 @ =gBattleControllerExecFlags
- ldr r0, [r0]
- cmp r0, 0
- bne _08023F28
- ldr r5, _08023F34 @ =gBattlescriptCurrInstr
- ldr r0, [r5]
- ldrb r0, [r0, 0x1]
- bl GetBattlerForBattleScript
- ldr r4, _08023F38 @ =gActiveBattler
- strb r0, [r4]
- ldr r3, _08023F3C @ =gBattlerPartyIndexes
- ldrb r0, [r4]
- lsls r2, r0, 1
- adds r2, r3
- ldr r1, _08023F40 @ =gBattleStruct
- ldr r1, [r1]
- adds r0, r1
- adds r0, 0x5C
- ldrb r0, [r0]
- strh r0, [r2]
- ldr r1, _08023F44 @ =gBitTable
- ldrb r0, [r4]
- lsls r0, 1
- adds r0, r3
- ldrh r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldrb r2, [r0]
- movs r0, 0
- movs r1, 0
- bl BtlController_EmitGetMonData
- ldrb r0, [r4]
- bl MarkBattlerForControllerExec
- ldr r0, [r5]
- adds r0, 0x2
- str r0, [r5]
-_08023F28:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08023F30: .4byte gBattleControllerExecFlags
-_08023F34: .4byte gBattlescriptCurrInstr
-_08023F38: .4byte gActiveBattler
-_08023F3C: .4byte gBattlerPartyIndexes
-_08023F40: .4byte gBattleStruct
-_08023F44: .4byte gBitTable
- thumb_func_end atk4C_getswitchedmondata
-
- thumb_func_start atk4D_switchindataupdate
-atk4D_switchindataupdate: @ 8023F48
- push {r4-r7,lr}
- sub sp, 0x58
- ldr r0, _080240A0 @ =gBattleControllerExecFlags
- ldr r0, [r0]
- cmp r0, 0
- beq _08023F56
- b _08024098
-_08023F56:
- ldr r0, _080240A4 @ =gBattlescriptCurrInstr
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- bl GetBattlerForBattleScript
- ldr r4, _080240A8 @ =gActiveBattler
- strb r0, [r4]
- ldr r6, _080240AC @ =gBattleMons
- ldrb r0, [r4]
- movs r5, 0x58
- adds r1, r0, 0
- muls r1, r5
- adds r1, r6
- mov r0, sp
- movs r2, 0x58
- bl memcpy
- ldrb r0, [r4]
- muls r0, r5
- adds r3, r0, r6
- movs r2, 0
- ldr r5, _080240B0 @ =gBattleBufferB
- adds r7, r4, 0
-_08023F84:
- adds r0, r3, r2
- ldrb r1, [r4]
- lsls r1, 9
- adds r1, 0x4
- adds r1, r2, r1
- adds r1, r5
- ldrb r1, [r1]
- strb r1, [r0]
- adds r2, 0x1
- cmp r2, 0x57
- bls _08023F84
- ldr r4, _080240AC @ =gBattleMons
- ldrb r0, [r7]
- movs r6, 0x58
- adds r2, r0, 0
- muls r2, r6
- adds r2, r4
- ldr r3, _080240B4 @ =gBaseStats
- ldrh r1, [r2]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r3
- ldrb r0, [r0, 0x6]
- adds r2, 0x21
- strb r0, [r2]
- ldrb r0, [r7]
- adds r1, r0, 0
- muls r1, r6
- adds r1, r4
- ldrh r2, [r1]
- lsls r0, r2, 3
- subs r0, r2
- lsls r0, 2
- adds r0, r3
- ldrb r0, [r0, 0x7]
- adds r1, 0x22
- strb r0, [r1]
- ldrb r0, [r7]
- adds r1, r0, 0
- muls r1, r6
- adds r1, r4
- ldrh r0, [r1]
- ldrb r1, [r1, 0x17]
- lsrs r1, 7
- bl GetAbilityBySpecies
- ldrb r1, [r7]
- muls r1, r6
- adds r1, r4
- adds r1, 0x20
- strb r0, [r1]
- ldrb r0, [r7]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r0, _080240B8 @ =gWishFutureKnock
- adds r0, 0x29
- adds r0, r2, r0
- ldrb r1, [r0]
- ldr r3, _080240BC @ =gBitTable
- ldr r2, _080240C0 @ =gBattlerPartyIndexes
- ldrb r5, [r7]
- lsls r0, r5, 1
- adds r0, r2
- ldrh r0, [r0]
- lsls r0, 2
- adds r0, r3
- ldr r0, [r0]
- ands r1, r0
- mov r12, r4
- cmp r1, 0
- beq _08024022
- adds r0, r5, 0
- muls r0, r6
- add r0, r12
- movs r1, 0
- strh r1, [r0, 0x2E]
-_08024022:
- ldr r2, _080240C4 @ =gBattleMoves
- ldr r0, _080240C8 @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0]
- cmp r0, 0x7F
- bne _08024068
- movs r2, 0
- adds r4, r7, 0
- movs r6, 0x58
- mov r5, r12
- adds r5, 0x18
- add r3, sp, 0x18
-_08024042:
- ldrb r0, [r4]
- adds r1, r0, 0
- muls r1, r6
- adds r1, r2, r1
- adds r1, r5
- adds r0, r3, r2
- ldrb r0, [r0]
- strb r0, [r1]
- adds r2, 0x1
- cmp r2, 0x7
- ble _08024042
- ldrb r1, [r7]
- movs r0, 0x58
- muls r0, r1
- mov r1, r12
- adds r1, 0x50
- adds r0, r1
- ldr r1, [sp, 0x50]
- str r1, [r0]
-_08024068:
- bl SwitchInClearSetData
- ldr r0, _080240CC @ =gBattleScripting
- ldr r3, _080240A8 @ =gActiveBattler
- ldrb r2, [r3]
- strb r2, [r0, 0x17]
- ldr r1, _080240D0 @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x7
- strb r0, [r1, 0x1]
- strb r2, [r1, 0x2]
- ldr r2, _080240C0 @ =gBattlerPartyIndexes
- ldrb r0, [r3]
- lsls r0, 1
- adds r0, r2
- ldrh r0, [r0]
- strb r0, [r1, 0x3]
- movs r0, 0xFF
- strb r0, [r1, 0x4]
- ldr r1, _080240A4 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x2
- str r0, [r1]
-_08024098:
- add sp, 0x58
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080240A0: .4byte gBattleControllerExecFlags
-_080240A4: .4byte gBattlescriptCurrInstr
-_080240A8: .4byte gActiveBattler
-_080240AC: .4byte gBattleMons
-_080240B0: .4byte gBattleBufferB
-_080240B4: .4byte gBaseStats
-_080240B8: .4byte gWishFutureKnock
-_080240BC: .4byte gBitTable
-_080240C0: .4byte gBattlerPartyIndexes
-_080240C4: .4byte gBattleMoves
-_080240C8: .4byte gCurrentMove
-_080240CC: .4byte gBattleScripting
-_080240D0: .4byte gBattleTextBuff1
- thumb_func_end atk4D_switchindataupdate
-
- thumb_func_start atk4E_switchinanim
-atk4E_switchinanim: @ 80240D4
- push {r4-r6,lr}
- ldr r0, _08024168 @ =gBattleControllerExecFlags
- ldr r0, [r0]
- cmp r0, 0
- bne _08024160
- ldr r0, _0802416C @ =gBattlescriptCurrInstr
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- bl GetBattlerForBattleScript
- ldr r6, _08024170 @ =gActiveBattler
- strb r0, [r6]
- ldrb r0, [r6]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0802412A
- ldr r0, _08024174 @ =gBattleTypeFlags
- ldr r0, [r0]
- ldr r1, _08024178 @ =0x0001aa02
- ands r0, r1
- cmp r0, 0
- bne _0802412A
- ldr r4, _0802417C @ =gBattleMons
- ldrb r0, [r6]
- movs r5, 0x58
- muls r0, r5
- adds r0, r4
- ldrh r0, [r0]
- bl SpeciesToNationalPokedexNum
- lsls r0, 16
- lsrs r0, 16
- ldrb r1, [r6]
- muls r1, r5
- adds r4, 0x48
- adds r1, r4
- ldr r2, [r1]
- movs r1, 0x2
- bl HandleSetPokedexFlag
-_0802412A:
- ldr r2, _08024180 @ =gAbsentBattlerFlags
- ldr r1, _08024184 @ =gBitTable
- ldr r5, _08024170 @ =gActiveBattler
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- ldrb r0, [r2]
- bics r0, r1
- strb r0, [r2]
- ldr r1, _08024188 @ =gBattlerPartyIndexes
- ldrb r0, [r5]
- lsls r0, 1
- adds r0, r1
- ldrb r1, [r0]
- ldr r4, _0802416C @ =gBattlescriptCurrInstr
- ldr r0, [r4]
- ldrb r2, [r0, 0x2]
- movs r0, 0
- bl BtlController_EmitSwitchInAnim
- ldrb r0, [r5]
- bl MarkBattlerForControllerExec
- ldr r0, [r4]
- adds r0, 0x3
- str r0, [r4]
-_08024160:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08024168: .4byte gBattleControllerExecFlags
-_0802416C: .4byte gBattlescriptCurrInstr
-_08024170: .4byte gActiveBattler
-_08024174: .4byte gBattleTypeFlags
-_08024178: .4byte 0x0001aa02
-_0802417C: .4byte gBattleMons
-_08024180: .4byte gAbsentBattlerFlags
-_08024184: .4byte gBitTable
-_08024188: .4byte gBattlerPartyIndexes
- thumb_func_end atk4E_switchinanim
-
- thumb_func_start atk4F_jumpifcantswitch
-atk4F_jumpifcantswitch: @ 802418C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r4, _080241F0 @ =gBattlescriptCurrInstr
- ldr r0, [r4]
- ldrb r1, [r0, 0x1]
- movs r0, 0x7F
- ands r0, r1
- bl GetBattlerForBattleScript
- ldr r3, _080241F4 @ =gActiveBattler
- strb r0, [r3]
- ldr r2, [r4]
- ldrb r1, [r2, 0x1]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08024204
- ldr r1, _080241F8 @ =gBattleMons
- ldrb r3, [r3]
- movs r0, 0x58
- muls r0, r3
- adds r1, 0x50
- adds r0, r1
- ldr r0, [r0]
- ldr r1, _080241FC @ =0x0400e000
- ands r0, r1
- cmp r0, 0
- bne _080241D8
- ldr r1, _08024200 @ =gStatuses3
- lsls r0, r3, 2
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 3
- ands r0, r1
- cmp r0, 0
- beq _08024204
-_080241D8:
- ldrb r1, [r2, 0x2]
- ldrb r0, [r2, 0x3]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x5]
- lsls r0, 24
- orrs r1, r0
- str r1, [r4]
- b _08024388
- .align 2, 0
-_080241F0: .4byte gBattlescriptCurrInstr
-_080241F4: .4byte gActiveBattler
-_080241F8: .4byte gBattleMons
-_080241FC: .4byte 0x0400e000
-_08024200: .4byte gStatuses3
-_08024204:
- ldr r5, _08024290 @ =gBattleTypeFlags
- ldr r0, [r5]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _080242A4
- ldr r4, _08024294 @ =gActiveBattler
- ldrb r0, [r4]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _08024298 @ =gPlayerParty
- mov r8, r1
- cmp r0, 0x1
- bne _08024228
- ldr r0, _0802429C @ =gEnemyParty
- mov r8, r0
-_08024228:
- movs r5, 0
- ldrb r0, [r4]
- bl GetBattlerMultiplayerId
- lsls r0, 24
- lsrs r0, 24
- bl GetLinkTrainerFlankId
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x1
- bne _08024242
- movs r5, 0x3
-_08024242:
- adds r6, r5, 0x3
- cmp r5, r6
- bge _0802428A
- ldr r7, _080242A0 @ =gBattlerPartyIndexes
-_0802424A:
- movs r0, 0x64
- muls r0, r5
- mov r1, r8
- adds r4, r1, r0
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _08024284
- adds r0, r4, 0
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0
- bne _08024284
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- beq _08024284
- ldr r0, _08024294 @ =gActiveBattler
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r7
- ldrh r0, [r0]
- cmp r0, r5
- bne _0802428A
-_08024284:
- adds r5, 0x1
- cmp r5, r6
- blt _0802424A
-_0802428A:
- cmp r5, r6
- beq _08024358
- b _08024380
- .align 2, 0
-_08024290: .4byte gBattleTypeFlags
-_08024294: .4byte gActiveBattler
-_08024298: .4byte gPlayerParty
-_0802429C: .4byte gEnemyParty
-_080242A0: .4byte gBattlerPartyIndexes
-_080242A4:
- ldr r0, _080242D4 @ =gActiveBattler
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x1
- bne _080242E4
- movs r0, 0x1
- bl GetBattlerAtPosition
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r0, [r5]
- ands r0, r4
- cmp r0, 0
- beq _080242D8
- movs r0, 0x3
- bl GetBattlerAtPosition
- lsls r0, 24
- lsrs r6, r0, 24
- b _080242DA
- .align 2, 0
-_080242D4: .4byte gActiveBattler
-_080242D8:
- adds r6, r7, 0
-_080242DA:
- ldr r0, _080242E0 @ =gEnemyParty
- mov r8, r0
- b _0802430A
- .align 2, 0
-_080242E0: .4byte gEnemyParty
-_080242E4:
- movs r0, 0
- bl GetBattlerAtPosition
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r0, [r5]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08024304
- movs r0, 0x2
- bl GetBattlerAtPosition
- lsls r0, 24
- lsrs r6, r0, 24
- b _08024306
-_08024304:
- adds r6, r7, 0
-_08024306:
- ldr r1, _08024374 @ =gPlayerParty
- mov r8, r1
-_0802430A:
- movs r5, 0
-_0802430C:
- movs r0, 0x64
- muls r0, r5
- mov r1, r8
- adds r4, r1, r0
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- beq _0802434E
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _0802434E
- adds r0, r4, 0
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0
- bne _0802434E
- ldr r1, _08024378 @ =gBattlerPartyIndexes
- lsls r0, r7, 1
- adds r0, r1
- ldrh r0, [r0]
- cmp r5, r0
- beq _0802434E
- lsls r0, r6, 1
- adds r0, r1
- ldrh r0, [r0]
- cmp r5, r0
- bne _08024354
-_0802434E:
- adds r5, 0x1
- cmp r5, 0x5
- ble _0802430C
-_08024354:
- cmp r5, 0x6
- bne _08024380
-_08024358:
- ldr r3, _0802437C @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- ldrb r1, [r2, 0x2]
- ldrb r0, [r2, 0x3]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x5]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
- b _08024388
- .align 2, 0
-_08024374: .4byte gPlayerParty
-_08024378: .4byte gBattlerPartyIndexes
-_0802437C: .4byte gBattlescriptCurrInstr
-_08024380:
- ldr r1, _08024394 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x6
- str r0, [r1]
-_08024388:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08024394: .4byte gBattlescriptCurrInstr
- thumb_func_end atk4F_jumpifcantswitch
-
- thumb_func_start sub_8024398
-sub_8024398: @ 8024398
- push {r4,r5,lr}
- sub sp, 0x4
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- ldr r4, _080243E0 @ =gActiveBattler
- ldrb r0, [r4]
- ldr r5, _080243E4 @ =gBattleStruct
- ldr r1, [r5]
- adds r1, r0, r1
- adds r1, 0x58
- ldr r3, _080243E8 @ =gBattlerPartyIndexes
- lsls r0, 1
- adds r0, r3
- ldrh r0, [r0]
- strb r0, [r1]
- ldrb r0, [r4]
- lsls r1, r0, 1
- adds r1, r0
- adds r1, 0x60
- ldr r0, [r5]
- adds r0, r1
- str r0, [sp]
- movs r0, 0
- movs r1, 0x1
- movs r3, 0
- bl BtlController_EmitChoosePokemon
- ldrb r0, [r4]
- bl MarkBattlerForControllerExec
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080243E0: .4byte gActiveBattler
-_080243E4: .4byte gBattleStruct
-_080243E8: .4byte gBattlerPartyIndexes
- thumb_func_end sub_8024398
-
thumb_func_start atk50_openpartyscreen
atk50_openpartyscreen: @ 80243EC
push {r4-r7,lr}
diff --git a/include/battle.h b/include/battle.h
index fc92417da..144d0a3bb 100644
--- a/include/battle.h
+++ b/include/battle.h
@@ -657,52 +657,6 @@ extern struct BattleStruct *gBattleStruct;
#define MOVE_EFFECT_AFFECTS_USER 0x40
#define MOVE_EFFECT_CERTAIN 0x80
-// table ids for general animations
-#define B_ANIM_CASTFORM_CHANGE 0x0
-#define B_ANIM_STATS_CHANGE 0x1
-#define B_ANIM_SUBSTITUTE_FADE 0x2
-#define B_ANIM_SUBSTITUTE_APPEAR 0x3
-#define B_ANIM_x4 0x4
-#define B_ANIM_ITEM_KNOCKOFF 0x5
-#define B_ANIM_TURN_TRAP 0x6
-#define B_ANIM_ITEM_EFFECT 0x7
-#define B_ANIM_SMOKEBALL_ESCAPE 0x8
-#define B_ANIM_HANGED_ON 0x9
-#define B_ANIM_RAIN_CONTINUES 0xA
-#define B_ANIM_SUN_CONTINUES 0xB
-#define B_ANIM_SANDSTORM_CONTINUES 0xC
-#define B_ANIM_HAIL_CONTINUES 0xD
-#define B_ANIM_LEECH_SEED_DRAIN 0xE
-#define B_ANIM_MON_HIT 0xF
-#define B_ANIM_ITEM_STEAL 0x10
-#define B_ANIM_SNATCH_MOVE 0x11
-#define B_ANIM_FUTURE_SIGHT_HIT 0x12
-#define B_ANIM_DOOM_DESIRE_HIT 0x13
-#define B_ANIM_x14 0x14
-#define B_ANIM_INGRAIN_HEAL 0x15
-#define B_ANIM_WISH_HEAL 0x16
-
-// special animations table
-#define B_ANIM_LVL_UP 0x0
-#define B_ANIM_SWITCH_OUT_PLAYER_MON 0x1
-#define B_ANIM_SWITCH_OUT_OPPONENT_MON 0x2
-#define B_ANIM_BALL_THROW 0x3
-#define B_ANIM_SAFARI_BALL_THROW 0x4
-#define B_ANIM_SUBSTITUTE_TO_MON 0x5
-#define B_ANIM_MON_TO_SUBSTITUTE 0x6
-
-// status animation table
-#define B_ANIM_STATUS_PSN 0x0
-#define B_ANIM_STATUS_CONFUSION 0x1
-#define B_ANIM_STATUS_BRN 0x2
-#define B_ANIM_STATUS_INFATUATION 0x3
-#define B_ANIM_STATUS_SLP 0x4
-#define B_ANIM_STATUS_PRZ 0x5
-#define B_ANIM_STATUS_FRZ 0x6
-#define B_ANIM_STATUS_CURSED 0x7
-#define B_ANIM_STATUS_NIGHTMARE 0x8
-#define B_ANIM_STATUS_WRAPPED 0x9
-
#define GET_STAT_BUFF_ID(n)((n & 0xF)) // first four bits 0x1, 0x2, 0x4, 0x8
#define GET_STAT_BUFF_VALUE2(n)((n & 0xF0))
#define GET_STAT_BUFF_VALUE(n)(((n >> 4) & 7)) // 0x10, 0x20, 0x40
@@ -985,5 +939,7 @@ extern u16 gLockedMoves[MAX_BATTLERS_COUNT];
extern u8 gCurrentTurnActionNumber;
extern u16 gExpShareExp;
extern u8 gLeveledUpInBattle;
+extern u16 gLastResultingMoves[MAX_BATTLERS_COUNT];
+extern u16 gLastPrintedMoves[MAX_BATTLERS_COUNT];
#endif // GUARD_BATTLE_H
diff --git a/include/battle_anim.h b/include/battle_anim.h
index 35d144bac..3536e89f4 100644
--- a/include/battle_anim.h
+++ b/include/battle_anim.h
@@ -137,6 +137,14 @@ void sub_8072E48(u8 battlerId, u8);
void sub_8073128(u8);
// battle_anim_80A9C70.s
+#define STAT_ANIM_PLUS1 15
+#define STAT_ANIM_PLUS2 39
+#define STAT_ANIM_MINUS1 22
+#define STAT_ANIM_MINUS2 46
+#define STAT_ANIM_MULTIPLE_PLUS1 55
+#define STAT_ANIM_MULTIPLE_PLUS2 56
+#define STAT_ANIM_MULTIPLE_MINUS1 57
+#define STAT_ANIM_MULTIPLE_MINUS2 58
void LaunchStatusAnimation(u8 bank, u8 statusAnimId);
// battle_anim_8170478.s
diff --git a/include/battle_scripts.h b/include/battle_scripts.h
index adbbd7e0c..165b580de 100644
--- a/include/battle_scripts.h
+++ b/include/battle_scripts.h
@@ -223,5 +223,6 @@ extern const u8 BattleScript_IntimidateActivatesEnd3[];
extern const u8 BattleScript_IgnoresWhileAsleep[];
extern const u8 BattleScript_IgnoresAndHitsItself[];
extern const u8 BattleScript_MoveEffectRecoil[];
+extern const u8 BattleScript_FlushMessageBox[];
#endif // GUARD_BATTLE_SCRIPTS_H
diff --git a/include/constants/battle_anim.h b/include/constants/battle_anim.h
index 0a023f0c2..22793032f 100644
--- a/include/constants/battle_anim.h
+++ b/include/constants/battle_anim.h
@@ -370,6 +370,7 @@
#define B_ANIM_FOCUS_PUNCH_SETUP 0x14
#define B_ANIM_INGRAIN_HEAL 0x15
#define B_ANIM_WISH_HEAL 0x16
+#define B_ANIM_x19 0x19
// special animations table
#define B_ANIM_LVL_UP 0x0
diff --git a/include/party_menu.h b/include/party_menu.h
index 84d9edb76..d10d0e48a 100644
--- a/include/party_menu.h
+++ b/include/party_menu.h
@@ -13,6 +13,16 @@ enum {
AILMENT_BRN
};
+enum
+{
+ PARTY_CHOOSE_MON,
+ PARTY_MUST_CHOOSE_MON,
+ PARTY_CANT_SWITCH,
+ PARTY_USE_ITEM_ON,
+ PARTY_ABILITY_PREVENTS,
+ PARTY_GIVE_ITEM,
+};
+
struct Struct203B0A0
{
MainCallback exitCallback;
diff --git a/include/pokemon.h b/include/pokemon.h
index bf30766a0..5ec4443c6 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -623,7 +623,7 @@ u16 SpeciesToCryId(u16 species);
void DrawSpindaSpots(u16 species, u32 personality, u8 *dest, u8 a4);
void EvolutionRenameMon(struct Pokemon *mon, u16 oldSpecies, u16 newSpecies);
bool8 sub_80435E0(void);
-bool8 GetLinkTrainerFlankId(u8 linkPlayerId);
+bool16 GetLinkTrainerFlankId(u8 linkPlayerId);
s32 GetBattlerMultiplayerId(u16 a1);
u8 GetTrainerEncounterMusicId(u16 trainer);
void AdjustFriendship(struct Pokemon *mon, u8 event);
diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c
index 912c98410..55f3876af 100644
--- a/src/battle_gfx_sfx_util.c
+++ b/src/battle_gfx_sfx_util.c
@@ -17,6 +17,7 @@
#include "battle_ai_script_commands.h"
#include "battle_anim.h"
#include "battle_interface.h"
+#include "constants/battle_anim.h"
#include "constants/species.h"
#include "constants/moves.h"
#include "constants/songs.h"
diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c
index 405a4136f..aa3ef9504 100644
--- a/src/battle_script_commands.c
+++ b/src/battle_script_commands.c
@@ -714,7 +714,7 @@ const u16 gUnknown_82506D0[] = INCBIN_U16("graphics/battle_interface/unk_battleb
const u32 gUnknown_82506F0[] = INCBIN_U32("graphics/battle_interface/unk_battlebox.4bpp.lz");
// not used
-const u8 sRubyLevelUpStatBoxStats[] =
+static const u8 sRubyLevelUpStatBoxStats[] =
{
MON_DATA_MAX_HP, MON_DATA_SPATK, MON_DATA_ATK,
MON_DATA_SPDEF, MON_DATA_DEF, MON_DATA_SPEED
@@ -867,7 +867,7 @@ const u8 sBallCatchBonuses[] =
};
// not used
-const u32 gUnknown_8250898 = 0xFF7EAE60;
+static const u32 gUnknown_8250898 = 0xFF7EAE60;
void atk00_attackcanceler(void)
{
@@ -3310,3 +3310,1195 @@ void atk23_getexp(void)
break;
}
}
+
+void atk24(void)
+{
+ u16 HP_count = 0;
+ s32 i;
+
+ if (!gBattleControllerExecFlags)
+ {
+ for (i = 0; i < PARTY_SIZE; ++i)
+ if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) && !GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG))
+ HP_count += GetMonData(&gPlayerParty[i], MON_DATA_HP);
+ if (HP_count == 0)
+ gBattleOutcome |= B_OUTCOME_LOST;
+ for (HP_count = 0, i = 0; i < PARTY_SIZE; ++i)
+ if (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES) && !GetMonData(&gEnemyParty[i], MON_DATA_IS_EGG))
+ HP_count += GetMonData(&gEnemyParty[i], MON_DATA_HP);
+ if (HP_count == 0)
+ gBattleOutcome |= B_OUTCOME_WON;
+ if (gBattleOutcome == 0 && (gBattleTypeFlags & BATTLE_TYPE_LINK))
+ {
+ s32 foundPlayer;
+ s32 foundOpponent;
+
+ for (foundPlayer = 0, i = 0; i < gBattlersCount; i += 2)
+ {
+ u32 *ptr = &gHitMarker;
+ u32 hitMarkerUnk = 0x10000000;
+
+ ++i;
+ --i;
+ if ((hitMarkerUnk << i) & *ptr && !gSpecialStatuses[i].flag40)
+ ++foundPlayer;
+ }
+ for (foundOpponent = 0, i = 1; i < gBattlersCount; i += 2)
+ {
+ u32 *ptr = &gHitMarker;
+ u32 hitMarkerUnk = 0x10000000;
+
+ {
+ u8 match;
+
+ ++match;
+ --match;
+ }
+ if ((hitMarkerUnk << i) & *ptr && !gSpecialStatuses[i].flag40)
+ ++foundOpponent;
+ }
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ {
+ if (foundOpponent + foundPlayer > 1)
+ gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+ else
+ gBattlescriptCurrInstr += 5;
+ }
+ else
+ {
+ if (foundOpponent != 0 && foundPlayer != 0)
+ gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+ else
+ gBattlescriptCurrInstr += 5;
+ }
+ }
+ else
+ {
+ gBattlescriptCurrInstr += 5;
+ }
+ }
+}
+
+void MoveValuesCleanUp(void)
+{
+ gMoveResultFlags = 0;
+ gBattleScripting.dmgMultiplier = 1;
+ gCritMultiplier = 1;
+ gBattleCommunication[MOVE_EFFECT_BYTE] = 0;
+ gBattleCommunication[6] = 0;
+ gHitMarker &= ~(HITMARKER_DESTINYBOND);
+ gHitMarker &= ~(HITMARKER_SYNCHRONISE_EFFECT);
+}
+
+void atk25_movevaluescleanup(void)
+{
+ MoveValuesCleanUp();
+ gBattlescriptCurrInstr += 1;
+}
+
+void atk26_setmultihit(void)
+{
+ gMultiHitCounter = gBattlescriptCurrInstr[1];
+ gBattlescriptCurrInstr += 2;
+}
+
+void atk27_decrementmultihit(void)
+{
+ if (--gMultiHitCounter == 0)
+ gBattlescriptCurrInstr += 5;
+ else
+ gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+}
+
+void atk28_goto(void)
+{
+ gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+}
+
+void atk29_jumpifbyte(void)
+{
+ u8 caseID = gBattlescriptCurrInstr[1];
+ const u8 *memByte = T2_READ_PTR(gBattlescriptCurrInstr + 2);
+ u8 value = gBattlescriptCurrInstr[6];
+ const u8 *jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 7);
+
+ gBattlescriptCurrInstr += 11;
+
+ switch (caseID)
+ {
+ case CMP_EQUAL:
+ if (*memByte == value)
+ gBattlescriptCurrInstr = jumpPtr;
+ break;
+ case CMP_NOT_EQUAL:
+ if (*memByte != value)
+ gBattlescriptCurrInstr = jumpPtr;
+ break;
+ case CMP_GREATER_THAN:
+ if (*memByte > value)
+ gBattlescriptCurrInstr = jumpPtr;
+ break;
+ case CMP_LESS_THAN:
+ if (*memByte < value)
+ gBattlescriptCurrInstr = jumpPtr;
+ break;
+ case CMP_COMMON_BITS:
+ if (*memByte & value)
+ gBattlescriptCurrInstr = jumpPtr;
+ break;
+ case CMP_NO_COMMON_BITS:
+ if (!(*memByte & value))
+ gBattlescriptCurrInstr = jumpPtr;
+ break;
+ }
+}
+
+void atk2A_jumpifhalfword(void)
+{
+ u8 caseID = gBattlescriptCurrInstr[1];
+ const u16 *memHword = T2_READ_PTR(gBattlescriptCurrInstr + 2);
+ u16 value = T2_READ_16(gBattlescriptCurrInstr + 6);
+ const u8 *jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 8);
+
+ gBattlescriptCurrInstr += 12;
+ switch (caseID)
+ {
+ case CMP_EQUAL:
+ if (*memHword == value)
+ gBattlescriptCurrInstr = jumpPtr;
+ break;
+ case CMP_NOT_EQUAL:
+ if (*memHword != value)
+ gBattlescriptCurrInstr = jumpPtr;
+ break;
+ case CMP_GREATER_THAN:
+ if (*memHword > value)
+ gBattlescriptCurrInstr = jumpPtr;
+ break;
+ case CMP_LESS_THAN:
+ if (*memHword < value)
+ gBattlescriptCurrInstr = jumpPtr;
+ break;
+ case CMP_COMMON_BITS:
+ if (*memHword & value)
+ gBattlescriptCurrInstr = jumpPtr;
+ break;
+ case CMP_NO_COMMON_BITS:
+ if (!(*memHword & value))
+ gBattlescriptCurrInstr = jumpPtr;
+ break;
+ }
+}
+
+void atk2B_jumpifword(void)
+{
+ u8 caseID = gBattlescriptCurrInstr[1];
+ const u32* memWord = T2_READ_PTR(gBattlescriptCurrInstr + 2);
+ u32 value = T1_READ_32(gBattlescriptCurrInstr + 6);
+ const u8 *jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 10);
+
+ gBattlescriptCurrInstr += 14;
+ switch (caseID)
+ {
+ case CMP_EQUAL:
+ if (*memWord == value)
+ gBattlescriptCurrInstr = jumpPtr;
+ break;
+ case CMP_NOT_EQUAL:
+ if (*memWord != value)
+ gBattlescriptCurrInstr = jumpPtr;
+ break;
+ case CMP_GREATER_THAN:
+ if (*memWord > value)
+ gBattlescriptCurrInstr = jumpPtr;
+ break;
+ case CMP_LESS_THAN:
+ if (*memWord < value)
+ gBattlescriptCurrInstr = jumpPtr;
+ break;
+ case CMP_COMMON_BITS:
+ if (*memWord & value)
+ gBattlescriptCurrInstr = jumpPtr;
+ break;
+ case CMP_NO_COMMON_BITS:
+ if (!(*memWord & value))
+ gBattlescriptCurrInstr = jumpPtr;
+ break;
+ }
+}
+
+void atk2C_jumpifarrayequal(void)
+{
+ const u8 *mem1 = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+ const u8 *mem2 = T2_READ_PTR(gBattlescriptCurrInstr + 5);
+ u32 size = gBattlescriptCurrInstr[9];
+ const u8 *jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 10);
+ u8 i;
+
+ for (i = 0; i < size; ++i)
+ {
+ if (*mem1 != *mem2)
+ {
+ gBattlescriptCurrInstr += 14;
+ break;
+ }
+ ++mem1, ++mem2;
+ }
+ if (i == size)
+ gBattlescriptCurrInstr = jumpPtr;
+}
+
+void atk2D_jumpifarraynotequal(void)
+{
+ u8 equalBytes = 0;
+ const u8 *mem1 = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+ const u8 *mem2 = T2_READ_PTR(gBattlescriptCurrInstr + 5);
+ u32 size = gBattlescriptCurrInstr[9];
+ const u8 *jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 10);
+ u8 i;
+
+ for (i = 0; i < size; ++i)
+ {
+ if (*mem1 == *mem2)
+ ++equalBytes;
+ ++mem1, ++mem2;
+ }
+ if (equalBytes != size)
+ gBattlescriptCurrInstr = jumpPtr;
+ else
+ gBattlescriptCurrInstr += 14;
+}
+
+void atk2E_setbyte(void)
+{
+ u8 *memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+
+ *memByte = gBattlescriptCurrInstr[5];
+ gBattlescriptCurrInstr += 6;
+}
+
+void atk2F_addbyte(void)
+{
+ u8 *memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+
+ *memByte += gBattlescriptCurrInstr[5];
+ gBattlescriptCurrInstr += 6;
+}
+
+void atk30_subbyte(void)
+{
+ u8 *memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+
+ *memByte -= gBattlescriptCurrInstr[5];
+ gBattlescriptCurrInstr += 6;
+}
+
+void atk31_copyarray(void)
+{
+ u8 *dest = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+ const u8 *src = T2_READ_PTR(gBattlescriptCurrInstr + 5);
+ s32 size = gBattlescriptCurrInstr[9];
+ s32 i;
+
+ for (i = 0; i < size; ++i)
+ {
+ dest[i] = src[i];
+ }
+ gBattlescriptCurrInstr += 10;
+}
+
+void atk32_copyarraywithindex(void)
+{
+ u8 *dest = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+ const u8 *src = T2_READ_PTR(gBattlescriptCurrInstr + 5);
+ const u8 *index = T2_READ_PTR(gBattlescriptCurrInstr + 9);
+ s32 size = gBattlescriptCurrInstr[13];
+ s32 i;
+
+ for (i = 0; i < size; ++i)
+ {
+ dest[i] = src[i + *index];
+ }
+ gBattlescriptCurrInstr += 14;
+}
+
+void atk33_orbyte(void)
+{
+ u8 *memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+ *memByte |= gBattlescriptCurrInstr[5];
+ gBattlescriptCurrInstr += 6;
+}
+
+void atk34_orhalfword(void)
+{
+ u16 *memHword = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+ u16 val = T2_READ_16(gBattlescriptCurrInstr + 5);
+
+ *memHword |= val;
+ gBattlescriptCurrInstr += 7;
+}
+
+void atk35_orword(void)
+{
+ u32 *memWord = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+ u32 val = T2_READ_32(gBattlescriptCurrInstr + 5);
+
+ *memWord |= val;
+ gBattlescriptCurrInstr += 9;
+}
+
+void atk36_bicbyte(void)
+{
+ u8 *memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+
+ *memByte &= ~(gBattlescriptCurrInstr[5]);
+ gBattlescriptCurrInstr += 6;
+}
+
+void atk37_bichalfword(void)
+{
+ u16 *memHword = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+ u16 val = T2_READ_16(gBattlescriptCurrInstr + 5);
+
+ *memHword &= ~val;
+ gBattlescriptCurrInstr += 7;
+}
+
+void atk38_bicword(void)
+{
+ u32 *memWord = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+ u32 val = T2_READ_32(gBattlescriptCurrInstr + 5);
+
+ *memWord &= ~val;
+ gBattlescriptCurrInstr += 9;
+}
+
+void atk39_pause(void)
+{
+ if (!gBattleControllerExecFlags)
+ {
+ u16 value = T2_READ_16(gBattlescriptCurrInstr + 1);
+
+ if (++gPauseCounterBattle >= value)
+ {
+ gPauseCounterBattle = 0;
+ gBattlescriptCurrInstr += 3;
+ }
+ }
+}
+
+void atk3A_waitstate(void)
+{
+ if (!gBattleControllerExecFlags)
+ ++gBattlescriptCurrInstr;
+}
+
+void atk3B_healthbar_update(void)
+{
+ if (gBattlescriptCurrInstr[1] == BS_TARGET)
+ gActiveBattler = gBattlerTarget;
+ else
+ gActiveBattler = gBattlerAttacker;
+ BtlController_EmitHealthBarUpdate(0, gBattleMoveDamage);
+ MarkBattlerForControllerExec(gActiveBattler);
+ gBattlescriptCurrInstr += 2;
+}
+
+void atk3C_return(void)
+{
+ BattleScriptPop();
+}
+
+void atk3D_end(void)
+{
+ gMoveResultFlags = 0;
+ gActiveBattler = 0;
+ gCurrentActionFuncId = B_ACTION_TRY_FINISH;
+}
+
+void atk3E_end2(void)
+{
+ gActiveBattler = 0;
+ gCurrentActionFuncId = B_ACTION_TRY_FINISH;
+}
+
+void atk3F_end3(void) // pops the main function stack
+{
+ BattleScriptPop();
+ if (gBattleResources->battleCallbackStack->size != 0)
+ gBattleResources->battleCallbackStack->size--;
+ gBattleMainFunc = gBattleResources->battleCallbackStack->function[gBattleResources->battleCallbackStack->size];
+}
+
+void atk41_call(void)
+{
+ BattleScriptPush(gBattlescriptCurrInstr + 5);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+}
+
+void atk42_jumpiftype2(void)
+{
+ u8 battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
+
+ if (gBattlescriptCurrInstr[2] == gBattleMons[battlerId].type1 || gBattlescriptCurrInstr[2] == gBattleMons[battlerId].type2)
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
+ else
+ gBattlescriptCurrInstr += 7;
+}
+
+void atk43_jumpifabilitypresent(void)
+{
+ if (AbilityBattleEffects(ABILITYEFFECT_CHECK_ON_FIELD, 0, gBattlescriptCurrInstr[1], 0, 0))
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2);
+ else
+ gBattlescriptCurrInstr += 6;
+}
+
+void atk44_endselectionscript(void)
+{
+ *(gBattlerAttacker + gBattleStruct->selectionScriptFinished) = TRUE;
+}
+
+void atk45_playanimation(void)
+{
+ const u16 *argumentPtr;
+
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
+ argumentPtr = T2_READ_PTR(gBattlescriptCurrInstr + 3);
+ if (gBattlescriptCurrInstr[2] == B_ANIM_STATS_CHANGE
+ || gBattlescriptCurrInstr[2] == B_ANIM_SNATCH_MOVE
+ || gBattlescriptCurrInstr[2] == B_ANIM_SUBSTITUTE_FADE
+ || gBattlescriptCurrInstr[2] == B_ANIM_x19)
+ {
+ BtlController_EmitBattleAnimation(0, gBattlescriptCurrInstr[2], *argumentPtr);
+ MarkBattlerForControllerExec(gActiveBattler);
+ gBattlescriptCurrInstr += 7;
+ }
+ else if (gHitMarker & HITMARKER_NO_ANIMATIONS)
+ {
+ BattleScriptPush(gBattlescriptCurrInstr + 7);
+ gBattlescriptCurrInstr = BattleScript_Pausex20;
+ }
+ else if (gBattlescriptCurrInstr[2] == B_ANIM_RAIN_CONTINUES
+ || gBattlescriptCurrInstr[2] == B_ANIM_SUN_CONTINUES
+ || gBattlescriptCurrInstr[2] == B_ANIM_SANDSTORM_CONTINUES
+ || gBattlescriptCurrInstr[2] == B_ANIM_HAIL_CONTINUES)
+ {
+ BtlController_EmitBattleAnimation(0, gBattlescriptCurrInstr[2], *argumentPtr);
+ MarkBattlerForControllerExec(gActiveBattler);
+ gBattlescriptCurrInstr += 7;
+ }
+ else if (gStatuses3[gActiveBattler] & STATUS3_SEMI_INVULNERABLE)
+ {
+ gBattlescriptCurrInstr += 7;
+ }
+ else
+ {
+ BtlController_EmitBattleAnimation(0, gBattlescriptCurrInstr[2], *argumentPtr);
+ MarkBattlerForControllerExec(gActiveBattler);
+ gBattlescriptCurrInstr += 7;
+ }
+}
+
+void atk46_playanimation2(void) // animation Id is stored in the first pointer
+{
+ const u16 *argumentPtr;
+ const u8 *animationIdPtr;
+
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
+ animationIdPtr = T2_READ_PTR(gBattlescriptCurrInstr + 2);
+ argumentPtr = T2_READ_PTR(gBattlescriptCurrInstr + 6);
+ if (*animationIdPtr == B_ANIM_STATS_CHANGE
+ || *animationIdPtr == B_ANIM_SNATCH_MOVE
+ || *animationIdPtr == B_ANIM_SUBSTITUTE_FADE)
+ {
+ BtlController_EmitBattleAnimation(0, *animationIdPtr, *argumentPtr);
+ MarkBattlerForControllerExec(gActiveBattler);
+ gBattlescriptCurrInstr += 10;
+ }
+ else if (gHitMarker & HITMARKER_NO_ANIMATIONS)
+ {
+ gBattlescriptCurrInstr += 10;
+ }
+ else if (*animationIdPtr == B_ANIM_RAIN_CONTINUES
+ || *animationIdPtr == B_ANIM_SUN_CONTINUES
+ || *animationIdPtr == B_ANIM_SANDSTORM_CONTINUES
+ || *animationIdPtr == B_ANIM_HAIL_CONTINUES)
+ {
+ BtlController_EmitBattleAnimation(0, *animationIdPtr, *argumentPtr);
+ MarkBattlerForControllerExec(gActiveBattler);
+ gBattlescriptCurrInstr += 10;
+ }
+ else if (gStatuses3[gActiveBattler] & STATUS3_SEMI_INVULNERABLE)
+ {
+ gBattlescriptCurrInstr += 10;
+ }
+ else
+ {
+ BtlController_EmitBattleAnimation(0, *animationIdPtr, *argumentPtr);
+ MarkBattlerForControllerExec(gActiveBattler);
+ gBattlescriptCurrInstr += 10;
+ }
+}
+
+void atk47_setgraphicalstatchangevalues(void)
+{
+ u8 value = 0;
+
+ switch (GET_STAT_BUFF_VALUE2(gBattleScripting.statChanger))
+ {
+ case SET_STAT_BUFF_VALUE(1): // +1
+ value = STAT_ANIM_PLUS1;
+ break;
+ case SET_STAT_BUFF_VALUE(2): // +2
+ value = STAT_ANIM_PLUS2;
+ break;
+ case SET_STAT_BUFF_VALUE(1) | STAT_BUFF_NEGATIVE: // -1
+ value = STAT_ANIM_MINUS1;
+ break;
+ case SET_STAT_BUFF_VALUE(2) | STAT_BUFF_NEGATIVE: // -2
+ value = STAT_ANIM_MINUS2;
+ break;
+ }
+ gBattleScripting.animArg1 = GET_STAT_BUFF_ID(gBattleScripting.statChanger) + value - 1;
+ gBattleScripting.animArg2 = 0;
+ ++gBattlescriptCurrInstr;
+}
+
+void atk48_playstatchangeanimation(void)
+{
+ u32 currStat = 0;
+ u16 statAnimId = 0;
+ s32 changeableStatsCount = 0;
+ u8 statsToCheck = 0;
+
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
+ statsToCheck = gBattlescriptCurrInstr[2];
+ if (gBattlescriptCurrInstr[3] & ATK48_STAT_NEGATIVE) // goes down
+ {
+ s16 startingStatAnimId;
+ if (gBattlescriptCurrInstr[3] & ATK48_STAT_BY_TWO)
+ startingStatAnimId = STAT_ANIM_MINUS2 - 1;
+ else
+ startingStatAnimId = STAT_ANIM_MINUS1 - 1;
+
+ while (statsToCheck != 0)
+ {
+ if (statsToCheck & 1)
+ {
+ if (gBattlescriptCurrInstr[3] & ATK48_DONT_CHECK_LOWER)
+ {
+ if (gBattleMons[gActiveBattler].statStages[currStat] > 0)
+ {
+ statAnimId = startingStatAnimId + currStat;
+ ++changeableStatsCount;
+ }
+ }
+ else if (!gSideTimers[GET_BATTLER_SIDE(gActiveBattler)].mistTimer
+ && gBattleMons[gActiveBattler].ability != ABILITY_CLEAR_BODY
+ && gBattleMons[gActiveBattler].ability != ABILITY_WHITE_SMOKE
+ && !(gBattleMons[gActiveBattler].ability == ABILITY_KEEN_EYE && currStat == STAT_ACC)
+ && !(gBattleMons[gActiveBattler].ability == ABILITY_HYPER_CUTTER && currStat == STAT_ATK))
+ {
+ if (gBattleMons[gActiveBattler].statStages[currStat] > 0)
+ {
+ statAnimId = startingStatAnimId + currStat;
+ ++changeableStatsCount;
+ }
+ }
+ }
+ statsToCheck >>= 1;
+ ++currStat;
+ }
+
+ if (changeableStatsCount > 1) // more than one stat, so the color is gray
+ {
+ if (gBattlescriptCurrInstr[3] & ATK48_STAT_BY_TWO)
+ statAnimId = STAT_ANIM_MULTIPLE_MINUS2;
+ else
+ statAnimId = STAT_ANIM_MULTIPLE_MINUS1;
+ }
+ }
+ else // goes up
+ {
+ s16 startingStatAnimId;
+ if (gBattlescriptCurrInstr[3] & ATK48_STAT_BY_TWO)
+ startingStatAnimId = STAT_ANIM_PLUS2 - 1;
+ else
+ startingStatAnimId = STAT_ANIM_PLUS1 - 1;
+
+ while (statsToCheck != 0)
+ {
+ if (statsToCheck & 1 && gBattleMons[gActiveBattler].statStages[currStat] < 0xC)
+ {
+ statAnimId = startingStatAnimId + currStat;
+ ++changeableStatsCount;
+ }
+ statsToCheck >>= 1;
+ ++currStat;
+ }
+ if (changeableStatsCount > 1) // more than one stat, so the color is gray
+ {
+ if (gBattlescriptCurrInstr[3] & ATK48_STAT_BY_TWO)
+ statAnimId = STAT_ANIM_MULTIPLE_PLUS2;
+ else
+ statAnimId = STAT_ANIM_MULTIPLE_PLUS1;
+ }
+ }
+ if (gBattlescriptCurrInstr[3] & ATK48_ONLY_MULTIPLE && changeableStatsCount < 2)
+ {
+ gBattlescriptCurrInstr += 4;
+ }
+ else if (changeableStatsCount != 0 && !gBattleScripting.statAnimPlayed)
+ {
+ BtlController_EmitBattleAnimation(0, B_ANIM_STATS_CHANGE, statAnimId);
+ MarkBattlerForControllerExec(gActiveBattler);
+ if (gBattlescriptCurrInstr[3] & ATK48_ONLY_MULTIPLE && changeableStatsCount > 1)
+ gBattleScripting.statAnimPlayed = TRUE;
+ gBattlescriptCurrInstr += 4;
+ }
+ else
+ {
+ gBattlescriptCurrInstr += 4;
+ }
+}
+
+void atk49_moveend(void)
+{
+ s32 i;
+ bool32 effect = FALSE;
+ u8 moveType = 0;
+ u8 holdEffectAtk = 0;
+ u16 *choicedMoveAtk = NULL;
+ u8 arg1, arg2;
+ u16 originallyUsedMove;
+
+ if (gChosenMove == 0xFFFF)
+ originallyUsedMove = 0;
+ else
+ originallyUsedMove = gChosenMove;
+ arg1 = gBattlescriptCurrInstr[1];
+ arg2 = gBattlescriptCurrInstr[2];
+ if (gBattleMons[gBattlerAttacker].item == ITEM_ENIGMA_BERRY)
+ holdEffectAtk = gEnigmaBerries[gBattlerAttacker].holdEffect;
+ else
+ holdEffectAtk = ItemId_GetHoldEffect(gBattleMons[gBattlerAttacker].item);
+ choicedMoveAtk = &gBattleStruct->choicedMove[gBattlerAttacker];
+ GET_MOVE_TYPE(gCurrentMove, moveType);
+ do
+ {
+ switch (gBattleScripting.atk49_state)
+ {
+ case ATK49_RAGE: // rage check
+ if (gBattleMons[gBattlerTarget].status2 & STATUS2_RAGE
+ && gBattleMons[gBattlerTarget].hp != 0
+ && gBattlerAttacker != gBattlerTarget
+ && GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gBattlerTarget)
+ && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ && TARGET_TURN_DAMAGED
+ && gBattleMoves[gCurrentMove].power
+ && gBattleMons[gBattlerTarget].statStages[STAT_ATK] <= 0xB)
+ {
+ ++gBattleMons[gBattlerTarget].statStages[STAT_ATK];
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_RageIsBuilding;
+ effect = TRUE;
+ }
+ ++gBattleScripting.atk49_state;
+ break;
+ case ATK49_DEFROST: // defrosting check
+ if (gBattleMons[gBattlerTarget].status1 & STATUS1_FREEZE
+ && gBattleMons[gBattlerTarget].hp != 0
+ && gBattlerAttacker != gBattlerTarget
+ && gSpecialStatuses[gBattlerTarget].specialDmg
+ && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ && moveType == TYPE_FIRE)
+ {
+ gBattleMons[gBattlerTarget].status1 &= ~(STATUS1_FREEZE);
+ gActiveBattler = gBattlerTarget;
+ BtlController_EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gBattlerTarget].status1);
+ MarkBattlerForControllerExec(gActiveBattler);
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_DefrostedViaFireMove;
+ effect = TRUE;
+ }
+ ++gBattleScripting.atk49_state;
+ break;
+ case ATK49_SYNCHRONIZE_TARGET: // target synchronize
+ if (AbilityBattleEffects(ABILITYEFFECT_SYNCHRONIZE, gBattlerTarget, 0, 0, 0))
+ effect = TRUE;
+ ++gBattleScripting.atk49_state;
+ break;
+ case ATK49_MOVE_END_ABILITIES: // Such as abilities activating on contact(Poison Spore, Rough Skin, etc.).
+ if (AbilityBattleEffects(ABILITYEFFECT_MOVE_END, gBattlerTarget, 0, 0, 0))
+ effect = TRUE;
+ ++gBattleScripting.atk49_state;
+ break;
+ case ATK49_STATUS_IMMUNITY_ABILITIES: // status immunities
+ if (AbilityBattleEffects(ABILITYEFFECT_IMMUNITY, 0, 0, 0, 0))
+ effect = TRUE; // it loops through all battlers, so we increment after its done with all battlers
+ else
+ ++gBattleScripting.atk49_state;
+ break;
+ case ATK49_SYNCHRONIZE_ATTACKER: // attacker synchronize
+ if (AbilityBattleEffects(ABILITYEFFECT_ATK_SYNCHRONIZE, gBattlerAttacker, 0, 0, 0))
+ effect = TRUE;
+ ++gBattleScripting.atk49_state;
+ break;
+ case ATK49_CHOICE_MOVE: // update choice band move
+ if (gHitMarker & HITMARKER_OBEYS
+ && holdEffectAtk == HOLD_EFFECT_CHOICE_BAND
+ && gChosenMove != MOVE_STRUGGLE
+ && (*choicedMoveAtk == 0 || *choicedMoveAtk == 0xFFFF))
+ {
+ if (gChosenMove == MOVE_BATON_PASS && !(gMoveResultFlags & MOVE_RESULT_FAILED))
+ {
+ ++gBattleScripting.atk49_state;
+ break;
+ }
+ *choicedMoveAtk = gChosenMove;
+ }
+ for (i = 0; i < MAX_MON_MOVES; ++i)
+ {
+ if (gBattleMons[gBattlerAttacker].moves[i] == *choicedMoveAtk)
+ break;
+ }
+ if (i == MAX_MON_MOVES)
+ *choicedMoveAtk = 0;
+ ++gBattleScripting.atk49_state;
+ break;
+ case ATK49_CHANGED_ITEMS: // changed held items
+ for (i = 0; i < gBattlersCount; ++i)
+ {
+ u16 *changedItem = &gBattleStruct->changedItems[i];
+
+ if (*changedItem != 0)
+ {
+ gBattleMons[i].item = *changedItem;
+ *changedItem = 0;
+ }
+ }
+ ++gBattleScripting.atk49_state;
+ break;
+ case ATK49_ITEM_EFFECTS_ALL: // item effects for all battlers
+ if (ItemBattleEffects(ITEMEFFECT_MOVE_END, 0, FALSE))
+ effect = TRUE;
+ else
+ ++gBattleScripting.atk49_state;
+ break;
+ case ATK49_KINGSROCK_SHELLBELL: // king's rock and shell bell
+ if (ItemBattleEffects(ITEMEFFECT_KINGSROCK_SHELLBELL, 0, FALSE))
+ effect = TRUE;
+ ++gBattleScripting.atk49_state;
+ break;
+ case ATK49_ATTACKER_INVISIBLE: // make attacker sprite invisible
+ if (gStatuses3[gBattlerAttacker] & (STATUS3_SEMI_INVULNERABLE)
+ && gHitMarker & HITMARKER_NO_ANIMATIONS)
+ {
+ gActiveBattler = gBattlerAttacker;
+ BtlController_EmitSpriteInvisibility(0, TRUE);
+ MarkBattlerForControllerExec(gActiveBattler);
+ ++gBattleScripting.atk49_state;
+ return;
+ }
+ ++gBattleScripting.atk49_state;
+ break;
+ case ATK49_ATTACKER_VISIBLE: // make attacker sprite visible
+ if (gMoveResultFlags & MOVE_RESULT_NO_EFFECT
+ || !(gStatuses3[gBattlerAttacker] & (STATUS3_SEMI_INVULNERABLE))
+ || WasUnableToUseMove(gBattlerAttacker))
+ {
+ gActiveBattler = gBattlerAttacker;
+ BtlController_EmitSpriteInvisibility(0, FALSE);
+ MarkBattlerForControllerExec(gActiveBattler);
+ gStatuses3[gBattlerAttacker] &= ~(STATUS3_SEMI_INVULNERABLE);
+ gSpecialStatuses[gBattlerAttacker].restoredBattlerSprite = 1;
+ ++gBattleScripting.atk49_state;
+ return;
+ }
+ ++gBattleScripting.atk49_state;
+ break;
+ case ATK49_TARGET_VISIBLE: // make target sprite visible
+ if (!gSpecialStatuses[gBattlerTarget].restoredBattlerSprite
+ && gBattlerTarget < gBattlersCount
+ && !(gStatuses3[gBattlerTarget] & STATUS3_SEMI_INVULNERABLE))
+ {
+ gActiveBattler = gBattlerTarget;
+ BtlController_EmitSpriteInvisibility(0, FALSE);
+ MarkBattlerForControllerExec(gActiveBattler);
+ gStatuses3[gBattlerTarget] &= ~(STATUS3_SEMI_INVULNERABLE);
+ ++gBattleScripting.atk49_state;
+ return;
+ }
+ ++gBattleScripting.atk49_state;
+ break;
+ case ATK49_SUBSTITUTE: // update substitute
+ for (i = 0; i < gBattlersCount; ++i)
+ {
+ if (gDisableStructs[i].substituteHP == 0)
+ gBattleMons[i].status2 &= ~(STATUS2_SUBSTITUTE);
+ }
+ ++gBattleScripting.atk49_state;
+ break;
+ case ATK49_UPDATE_LAST_MOVES:
+ if (gHitMarker & HITMARKER_SWAP_ATTACKER_TARGET)
+ {
+ gActiveBattler = gBattlerAttacker;
+ gBattlerAttacker = gBattlerTarget;
+ gBattlerTarget = gActiveBattler;
+ gHitMarker &= ~(HITMARKER_SWAP_ATTACKER_TARGET);
+ }
+ if (gHitMarker & HITMARKER_ATTACKSTRING_PRINTED)
+ {
+ gLastPrintedMoves[gBattlerAttacker] = gChosenMove;
+ }
+ if (!(gAbsentBattlerFlags & gBitTable[gBattlerAttacker])
+ && !(gBattleStruct->field_91 & gBitTable[gBattlerAttacker])
+ && gBattleMoves[originallyUsedMove].effect != EFFECT_BATON_PASS)
+ {
+ if (gHitMarker & HITMARKER_OBEYS)
+ {
+ gLastMoves[gBattlerAttacker] = gChosenMove;
+ gLastResultingMoves[gBattlerAttacker] = gCurrentMove;
+ }
+ else
+ {
+ gLastMoves[gBattlerAttacker] = 0xFFFF;
+ gLastResultingMoves[gBattlerAttacker] = 0xFFFF;
+ }
+
+ if (!(gHitMarker & HITMARKER_FAINTED(gBattlerTarget)))
+ gLastHitBy[gBattlerTarget] = gBattlerAttacker;
+
+ if (gHitMarker & HITMARKER_OBEYS && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT))
+ {
+ if (gChosenMove == 0xFFFF)
+ {
+ gLastLandedMoves[gBattlerTarget] = gChosenMove;
+ }
+ else
+ {
+ gLastLandedMoves[gBattlerTarget] = gCurrentMove;
+ GET_MOVE_TYPE(gCurrentMove, gLastHitByType[gBattlerTarget]);
+ }
+ }
+ else
+ {
+ gLastLandedMoves[gBattlerTarget] = 0xFFFF;
+ }
+ }
+ ++gBattleScripting.atk49_state;
+ break;
+ case ATK49_MIRROR_MOVE: // mirror move
+ if (!(gAbsentBattlerFlags & gBitTable[gBattlerAttacker])
+ && !(gBattleStruct->field_91 & gBitTable[gBattlerAttacker])
+ && gBattleMoves[originallyUsedMove].flags & FLAG_MIRROR_MOVE_AFFECTED
+ && gHitMarker & HITMARKER_OBEYS
+ && gBattlerAttacker != gBattlerTarget
+ && !(gHitMarker & HITMARKER_FAINTED(gBattlerTarget))
+ && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT))
+ {
+ u8 target, attacker;
+
+ *(gBattleStruct->lastTakenMove + gBattlerTarget * 2 + 0) = gChosenMove;
+ *(gBattleStruct->lastTakenMove + gBattlerTarget * 2 + 1) = gChosenMove >> 8;
+ target = gBattlerTarget;
+ attacker = gBattlerAttacker;
+ *(attacker * 2 + target * 8 + (u8 *)(gBattleStruct->lastTakenMoveFrom) + 0) = gChosenMove;
+ target = gBattlerTarget;
+ attacker = gBattlerAttacker;
+ *(attacker * 2 + target * 8 + (u8 *)(gBattleStruct->lastTakenMoveFrom) + 1) = gChosenMove >> 8;
+ }
+ ++gBattleScripting.atk49_state;
+ break;
+ case ATK49_NEXT_TARGET: // For moves hitting two opposing Pokemon.
+ if (!(gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE)
+ && gBattleTypeFlags & BATTLE_TYPE_DOUBLE
+ && !gProtectStructs[gBattlerAttacker].chargingTurn
+ && gBattleMoves[gCurrentMove].target == MOVE_TARGET_BOTH
+ && !(gHitMarker & HITMARKER_NO_ATTACKSTRING))
+ {
+ u8 battlerId = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gBattlerTarget)));
+ if (gBattleMons[battlerId].hp != 0)
+ {
+ gBattlerTarget = battlerId;
+ gHitMarker |= HITMARKER_NO_ATTACKSTRING;
+ gBattleScripting.atk49_state = 0;
+ MoveValuesCleanUp();
+ BattleScriptPush(gBattleScriptsForMoveEffects[gBattleMoves[gCurrentMove].effect]);
+ gBattlescriptCurrInstr = BattleScript_FlushMessageBox;
+ return;
+ }
+ else
+ {
+ gHitMarker |= HITMARKER_NO_ATTACKSTRING;
+ }
+ }
+ ++gBattleScripting.atk49_state;
+ break;
+ case ATK49_COUNT:
+ break;
+ }
+ if (arg1 == 1 && effect == FALSE)
+ gBattleScripting.atk49_state = ATK49_COUNT;
+ if (arg1 == 2 && arg2 == gBattleScripting.atk49_state)
+ gBattleScripting.atk49_state = ATK49_COUNT;
+ }
+ while (gBattleScripting.atk49_state != ATK49_COUNT && effect == FALSE);
+ if (gBattleScripting.atk49_state == ATK49_COUNT && effect == FALSE)
+ gBattlescriptCurrInstr += 3;
+}
+
+void atk4A_typecalc2(void)
+{
+ u8 flags = 0;
+ s32 i = 0;
+ u8 moveType = gBattleMoves[gCurrentMove].type;
+
+ if (gBattleMons[gBattlerTarget].ability == ABILITY_LEVITATE && moveType == TYPE_GROUND)
+ {
+ gLastUsedAbility = gBattleMons[gBattlerTarget].ability;
+ gMoveResultFlags |= (MOVE_RESULT_MISSED | MOVE_RESULT_DOESNT_AFFECT_FOE);
+ gLastLandedMoves[gBattlerTarget] = 0;
+ gBattleCommunication[6] = moveType;
+ RecordAbilityBattle(gBattlerTarget, gLastUsedAbility);
+ }
+ else
+ {
+ while (TYPE_EFFECT_ATK_TYPE(i) != TYPE_ENDTABLE)
+ {
+ if (TYPE_EFFECT_ATK_TYPE(i) == TYPE_FORESIGHT)
+ {
+ if (gBattleMons[gBattlerTarget].status2 & STATUS2_FORESIGHT)
+ {
+ break;
+ }
+ else
+ {
+ i += 3;
+ continue;
+ }
+ }
+ if (TYPE_EFFECT_ATK_TYPE(i) == moveType)
+ {
+ // check type1
+ if (TYPE_EFFECT_DEF_TYPE(i) == gBattleMons[gBattlerTarget].type1)
+ {
+ if (TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_NO_EFFECT)
+ {
+ gMoveResultFlags |= MOVE_RESULT_DOESNT_AFFECT_FOE;
+ break;
+ }
+ if (TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_NOT_EFFECTIVE)
+ {
+ flags |= MOVE_RESULT_NOT_VERY_EFFECTIVE;
+ }
+ if (TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_SUPER_EFFECTIVE)
+ {
+ flags |= MOVE_RESULT_SUPER_EFFECTIVE;
+ }
+ }
+ // check type2
+ if (TYPE_EFFECT_DEF_TYPE(i) == gBattleMons[gBattlerTarget].type2)
+ {
+ if (gBattleMons[gBattlerTarget].type1 != gBattleMons[gBattlerTarget].type2
+ && TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_NO_EFFECT)
+ {
+ gMoveResultFlags |= MOVE_RESULT_DOESNT_AFFECT_FOE;
+ break;
+ }
+ if (TYPE_EFFECT_DEF_TYPE(i) == gBattleMons[gBattlerTarget].type2
+ && gBattleMons[gBattlerTarget].type1 != gBattleMons[gBattlerTarget].type2
+ && TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_NOT_EFFECTIVE)
+ {
+ flags |= MOVE_RESULT_NOT_VERY_EFFECTIVE;
+ }
+ if (TYPE_EFFECT_DEF_TYPE(i) == gBattleMons[gBattlerTarget].type2
+ && gBattleMons[gBattlerTarget].type1 != gBattleMons[gBattlerTarget].type2
+ && TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_SUPER_EFFECTIVE)
+ {
+ flags |= MOVE_RESULT_SUPER_EFFECTIVE;
+ }
+ }
+ }
+ i += 3;
+ }
+ }
+ if (gBattleMons[gBattlerTarget].ability == ABILITY_WONDER_GUARD
+ && !(flags & MOVE_RESULT_NO_EFFECT)
+ && AttacksThisTurn(gBattlerAttacker, gCurrentMove) == 2
+ && (!(flags & MOVE_RESULT_SUPER_EFFECTIVE) || ((flags & (MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE)) == (MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE)))
+ && gBattleMoves[gCurrentMove].power)
+ {
+ gLastUsedAbility = ABILITY_WONDER_GUARD;
+ gMoveResultFlags |= MOVE_RESULT_MISSED;
+ gLastLandedMoves[gBattlerTarget] = 0;
+ gBattleCommunication[6] = 3;
+ RecordAbilityBattle(gBattlerTarget, gLastUsedAbility);
+ }
+ if (gMoveResultFlags & MOVE_RESULT_DOESNT_AFFECT_FOE)
+ gProtectStructs[gBattlerAttacker].targetNotAffected = 1;
+ ++gBattlescriptCurrInstr;
+}
+
+void atk4B_returnatktoball(void)
+{
+ gActiveBattler = gBattlerAttacker;
+ if (!(gHitMarker & HITMARKER_FAINTED(gActiveBattler)))
+ {
+ BtlController_EmitReturnMonToBall(0, 0);
+ MarkBattlerForControllerExec(gActiveBattler);
+ }
+ ++gBattlescriptCurrInstr;
+}
+
+void atk4C_getswitchedmondata(void)
+{
+ if (!gBattleControllerExecFlags)
+ {
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
+ gBattlerPartyIndexes[gActiveBattler] = *(gBattleStruct->monToSwitchIntoId + gActiveBattler);
+ BtlController_EmitGetMonData(0, REQUEST_ALL_BATTLE, gBitTable[gBattlerPartyIndexes[gActiveBattler]]);
+ MarkBattlerForControllerExec(gActiveBattler);
+ gBattlescriptCurrInstr += 2;
+ }
+}
+
+void atk4D_switchindataupdate(void)
+{
+ struct BattlePokemon oldData;
+ s32 i;
+ u8 *monData;
+
+ if (!gBattleControllerExecFlags)
+ {
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
+ oldData = gBattleMons[gActiveBattler];
+ monData = (u8 *)(&gBattleMons[gActiveBattler]);
+ for (i = 0; i < sizeof(struct BattlePokemon); ++i)
+ {
+ monData[i] = gBattleBufferB[gActiveBattler][4 + i];
+ }
+ gBattleMons[gActiveBattler].type1 = gBaseStats[gBattleMons[gActiveBattler].species].type1;
+ gBattleMons[gActiveBattler].type2 = gBaseStats[gBattleMons[gActiveBattler].species].type2;
+ gBattleMons[gActiveBattler].ability = GetAbilityBySpecies(gBattleMons[gActiveBattler].species, gBattleMons[gActiveBattler].abilityNum);
+ // check knocked off item
+ i = GetBattlerSide(gActiveBattler);
+ if (gWishFutureKnock.knockedOffMons[i] & gBitTable[gBattlerPartyIndexes[gActiveBattler]])
+ gBattleMons[gActiveBattler].item = 0;
+ if (gBattleMoves[gCurrentMove].effect == EFFECT_BATON_PASS)
+ {
+ for (i = 0; i < NUM_BATTLE_STATS; ++i)
+ {
+ gBattleMons[gActiveBattler].statStages[i] = oldData.statStages[i];
+ }
+ gBattleMons[gActiveBattler].status2 = oldData.status2;
+ }
+ SwitchInClearSetData();
+ gBattleScripting.battler = gActiveBattler;
+ PREPARE_MON_NICK_BUFFER(gBattleTextBuff1, gActiveBattler, gBattlerPartyIndexes[gActiveBattler]);
+ gBattlescriptCurrInstr += 2;
+ }
+}
+
+void atk4E_switchinanim(void)
+{
+ if (!gBattleControllerExecFlags)
+ {
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
+ if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT
+ && !(gBattleTypeFlags &
+ (BATTLE_TYPE_LINK
+ | BATTLE_TYPE_LEGENDARY
+ | BATTLE_TYPE_OLDMAN_TUTORIAL
+ | BATTLE_TYPE_POKEDUDE
+ | BATTLE_TYPE_EREADER_TRAINER
+ | BATTLE_TYPE_GHOST)))
+ HandleSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gActiveBattler].species), FLAG_SET_SEEN, gBattleMons[gActiveBattler].personality);
+ gAbsentBattlerFlags &= ~(gBitTable[gActiveBattler]);
+ BtlController_EmitSwitchInAnim(0, gBattlerPartyIndexes[gActiveBattler], gBattlescriptCurrInstr[2]);
+ MarkBattlerForControllerExec(gActiveBattler);
+ gBattlescriptCurrInstr += 3;
+ }
+}
+
+void atk4F_jumpifcantswitch(void)
+{
+ s32 i;
+ s32 lastMonId;
+ struct Pokemon *party;
+
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1] & ~(ATK4F_DONT_CHECK_STATUSES));
+ if (!(gBattlescriptCurrInstr[1] & ATK4F_DONT_CHECK_STATUSES)
+ && ((gBattleMons[gActiveBattler].status2 & (STATUS2_WRAPPED | STATUS2_ESCAPE_PREVENTION))
+ || (gStatuses3[gActiveBattler] & STATUS3_ROOTED)))
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2);
+ }
+ else if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ {
+ if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT)
+ party = gEnemyParty;
+ else
+ party = gPlayerParty;
+
+ i = 0;
+ if (GetLinkTrainerFlankId(GetBattlerMultiplayerId(gActiveBattler)) == TRUE)
+ i = 3;
+ for (lastMonId = i + 3; i < lastMonId; ++i)
+ {
+ if (GetMonData(&party[i], MON_DATA_SPECIES) != SPECIES_NONE
+ && !GetMonData(&party[i], MON_DATA_IS_EGG)
+ && GetMonData(&party[i], MON_DATA_HP) != 0
+ && gBattlerPartyIndexes[gActiveBattler] != i)
+ break;
+ }
+ if (i == lastMonId)
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2);
+ else
+ gBattlescriptCurrInstr += 6;
+ }
+ else
+ {
+ u8 battlerIn1, battlerIn2;
+
+ if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT)
+ {
+ battlerIn1 = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ battlerIn2 = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
+ else
+ battlerIn2 = battlerIn1;
+ party = gEnemyParty;
+ }
+ else
+ {
+ battlerIn1 = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ battlerIn2 = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT);
+ else
+ battlerIn2 = battlerIn1;
+ party = gPlayerParty;
+ }
+ for (i = 0; i < PARTY_SIZE; ++i)
+ {
+ if (GetMonData(&party[i], MON_DATA_HP) != 0
+ && GetMonData(&party[i], MON_DATA_SPECIES) != SPECIES_NONE
+ && !GetMonData(&party[i], MON_DATA_IS_EGG)
+ && i != gBattlerPartyIndexes[battlerIn1]
+ && i != gBattlerPartyIndexes[battlerIn2])
+ break;
+ }
+ if (i == 6)
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2);
+ else
+ gBattlescriptCurrInstr += 6;
+ }
+}
+
+void sub_8024398(u8 arg0)
+{
+ *(gBattleStruct->field_58 + gActiveBattler) = gBattlerPartyIndexes[gActiveBattler];
+ BtlController_EmitChoosePokemon(0, PARTY_MUST_CHOOSE_MON, arg0, 0, gBattleStruct->field_60[gActiveBattler]);
+ MarkBattlerForControllerExec(gActiveBattler);
+}
diff --git a/src/pokemon.c b/src/pokemon.c
index e21643c51..e476ab456 100644
--- a/src/pokemon.c
+++ b/src/pokemon.c
@@ -6465,9 +6465,9 @@ bool8 sub_80435E0(void)
return retVal;
}
-bool8 GetLinkTrainerFlankId(u8 linkPlayerId)
+bool16 GetLinkTrainerFlankId(u8 linkPlayerId)
{
- bool8 retVal = FALSE;
+ bool16 retVal = FALSE;
switch (gLinkPlayers[linkPlayerId].id)
{
case 0: